+++ /dev/null
---- linux-2.6.0-test1/arch/alpha/kernel/irq.c 2003-06-14 12:18:29.000000000 -0700
-+++ 25/arch/alpha/kernel/irq.c 2003-07-19 17:03:49.000000000 -0700
-@@ -601,7 +601,7 @@ handle_irq(int irq, struct pt_regs * reg
- if ((unsigned) irq > ACTUAL_NR_IRQS && illegal_count < MAX_ILLEGAL_IRQS ) {
- irq_err_count++;
- illegal_count++;
-- printk(KERN_CRIT "device_interrupt: illegal interrupt %d\n",
-+ printk(KERN_CRIT "device_interrupt: invalid interrupt %d\n",
- irq);
- return;
- }
---- linux-2.6.0-test1/arch/alpha/kernel/smp.c 2003-06-14 12:18:05.000000000 -0700
-+++ 25/arch/alpha/kernel/smp.c 2003-07-19 17:04:06.000000000 -0700
-@@ -71,7 +71,7 @@ static int smp_secondary_alive __initdat
-
- /* Which cpus ids came online. */
- unsigned long cpu_present_mask;
--volatile unsigned long cpu_online_map;
-+cpumask_t cpu_online_map;
-
- /* cpus reported in the hwrpb */
- static unsigned long hwrpb_cpu_present_mask __initdata = 0;
-@@ -132,7 +132,7 @@ smp_callin(void)
- {
- int cpuid = hard_smp_processor_id();
-
-- if (test_and_set_bit(cpuid, &cpu_online_map)) {
-+ if (cpu_test_and_set(cpuid, cpu_online_map)) {
- printk("??, cpu 0x%x already present??\n", cpuid);
- BUG();
- }
-@@ -575,8 +575,8 @@ smp_prepare_boot_cpu(void)
- /*
- * Mark the boot cpu (current cpu) as both present and online
- */
-- set_bit(smp_processor_id(), &cpu_present_mask);
-- set_bit(smp_processor_id(), &cpu_online_map);
-+ cpu_set(smp_processor_id(), cpu_present_mask);
-+ cpu_set(smp_processor_id(), cpu_online_map);
- }
-
- int __devinit
---- linux-2.6.0-test1/arch/alpha/mm/init.c 2003-06-14 12:18:33.000000000 -0700
-+++ 25/arch/alpha/mm/init.c 2003-07-19 17:03:49.000000000 -0700
-@@ -20,9 +20,6 @@
- #include <linux/init.h>
- #include <linux/bootmem.h> /* max_low_pfn */
- #include <linux/vmalloc.h>
--#ifdef CONFIG_BLK_DEV_INITRD
--#include <linux/blk.h>
--#endif
-
- #include <asm/system.h>
- #include <asm/uaccess.h>
---- linux-2.6.0-test1/arch/alpha/mm/remap.c 2003-06-14 12:17:56.000000000 -0700
-+++ 25/arch/alpha/mm/remap.c 2003-07-19 17:07:16.000000000 -0700
-@@ -73,7 +73,7 @@ __alpha_remap_area_pages(unsigned long a
- spin_lock(&init_mm.page_table_lock);
- do {
- pmd_t *pmd;
-- pmd = pmd_alloc(&init_mm, dir, address);
-+ pmd = pmd_alloc_kernel(&init_mm, dir, address);
- error = -ENOMEM;
- if (!pmd)
- break;
---- linux-2.6.0-test1/arch/arm26/kernel/setup.c 2003-07-10 18:50:30.000000000 -0700
-+++ 25/arch/arm26/kernel/setup.c 2003-07-19 17:03:49.000000000 -0700
-@@ -14,7 +14,7 @@
- #include <linux/ioport.h>
- #include <linux/delay.h>
- #include <linux/utsname.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/console.h>
- #include <linux/bootmem.h>
- #include <linux/seq_file.h>
---- linux-2.6.0-test1/arch/arm26/mm/init.c 2003-07-10 18:50:30.000000000 -0700
-+++ 25/arch/arm26/mm/init.c 2003-07-19 17:03:49.000000000 -0700
-@@ -22,7 +22,7 @@
- #include <linux/init.h>
- #include <linux/initrd.h>
- #include <linux/bootmem.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
-
- #include <asm/segment.h>
- #include <asm/mach-types.h>
---- linux-2.6.0-test1/arch/arm26/mm/mm-memc.c 2003-07-10 18:50:30.000000000 -0700
-+++ 25/arch/arm26/mm/mm-memc.c 2003-07-19 17:07:16.000000000 -0700
-@@ -79,7 +79,7 @@ pgd_t *get_pgd_slow(struct mm_struct *mm
- goto no_pgd;
-
- /*
-- * This lock is here just to satisfy pmd_alloc and pte_lock
-+ * This lock is here just to satisfy pmd_alloc_kernel() and pte_lock
- * FIXME: I bet we could avoid taking it pretty much altogether
- */
- spin_lock(&mm->page_table_lock);
-@@ -88,7 +88,7 @@ pgd_t *get_pgd_slow(struct mm_struct *mm
- * On ARM, first page must always be allocated since it contains
- * the machine vectors.
- */
-- new_pmd = pmd_alloc(mm, new_pgd, 0);
-+ new_pmd = pmd_alloc_kernel(mm, new_pgd, 0);
- if (!new_pmd)
- goto no_pmd;
-
---- linux-2.6.0-test1/arch/arm/mach-arc/mm.c 2003-06-14 12:18:08.000000000 -0700
-+++ 25/arch/arm/mach-arc/mm.c 2003-07-19 17:07:16.000000000 -0700
-@@ -66,7 +66,7 @@ pgd_t *get_pgd_slow(struct mm_struct *mm
- goto no_pgd;
-
- /*
-- * This lock is here just to satisfy pmd_alloc and pte_lock
-+ * This lock is here just to satisfy pmd_alloc_map() and pte_lock
- */
- spin_lock(&mm->page_table_lock);
-
-@@ -74,13 +74,15 @@ pgd_t *get_pgd_slow(struct mm_struct *mm
- * On ARM, first page must always be allocated since it contains
- * the machine vectors.
- */
-- new_pmd = pmd_alloc(mm, new_pgd, 0);
-+ new_pmd = pmd_alloc_map(mm, new_pgd, 0);
- if (!new_pmd)
- goto no_pmd;
-
-- new_pte = pte_alloc_map(mm, new_pmd, 0);
-- if (!new_pte)
-+ new_pte = pte_alloc_map(mm, new_pgd, &new_pmd, 0);
-+ if (!new_pte) {
-+ pmd_unmap(new_pmd);
- goto no_pte;
-+ }
-
- init_pgd = pgd_offset_k(0);
- init_pmd = pmd_offset(init_pgd, 0);
-@@ -88,6 +90,7 @@ pgd_t *get_pgd_slow(struct mm_struct *mm
- set_pte(new_pte, *init_pte);
- pte_unmap_nested(init_pte);
- pte_unmap(new_pte);
-+ pmd_unmap(new_pmd);
-
- /*
- * most of the page table entries are zeroed
---- linux-2.6.0-test1/arch/arm/mach-clps711x/autcpu12.c 2003-06-14 12:18:04.000000000 -0700
-+++ 25/arch/arm/mach-clps711x/autcpu12.c 2003-07-19 17:03:49.000000000 -0700
-@@ -21,7 +21,6 @@
- #include <linux/init.h>
- #include <linux/types.h>
- #include <linux/string.h>
--#include <linux/blk.h>
- #include <linux/mm.h>
-
- #include <asm/hardware.h>
---- linux-2.6.0-test1/arch/arm/mm/consistent.c 2003-06-14 12:18:29.000000000 -0700
-+++ 25/arch/arm/mm/consistent.c 2003-07-19 17:07:16.000000000 -0700
-@@ -325,7 +325,7 @@ static int __init consistent_init(void)
-
- do {
- pgd = pgd_offset(&init_mm, CONSISTENT_BASE);
-- pmd = pmd_alloc(&init_mm, pgd, CONSISTENT_BASE);
-+ pmd = pmd_alloc_kernel(&init_mm, pgd, CONSISTENT_BASE);
- if (!pmd) {
- printk(KERN_ERR "consistent_init: out of pmd tables\n");
- return -ENOMEM;
---- linux-2.6.0-test1/arch/arm/mm/ioremap.c 2003-06-14 12:18:24.000000000 -0700
-+++ 25/arch/arm/mm/ioremap.c 2003-07-19 17:07:16.000000000 -0700
-@@ -95,7 +95,7 @@ static int remap_area_pages(unsigned lon
- spin_lock(&init_mm.page_table_lock);
- do {
- pmd_t *pmd;
-- pmd = pmd_alloc(&init_mm, dir, address);
-+ pmd = pmd_alloc_kernel(&init_mm, dir, address);
- error = -ENOMEM;
- if (!pmd)
- break;
---- linux-2.6.0-test1/arch/arm/mm/minicache.c 2003-06-14 12:18:25.000000000 -0700
-+++ 25/arch/arm/mm/minicache.c 2003-07-19 17:07:16.000000000 -0700
-@@ -57,7 +57,7 @@ static int __init minicache_init(void)
- pmd_t *pmd;
-
- pgd = pgd_offset_k(minicache_address);
-- pmd = pmd_alloc(&init_mm, pgd, minicache_address);
-+ pmd = pmd_alloc_kernel(&init_mm, pgd, minicache_address);
- if (!pmd)
- BUG();
- minicache_pte = pte_alloc_kernel(&init_mm, pmd, minicache_address);
---- linux-2.6.0-test1/arch/arm/mm/mm-armv.c 2003-06-22 12:04:43.000000000 -0700
-+++ 25/arch/arm/mm/mm-armv.c 2003-07-19 17:07:16.000000000 -0700
-@@ -131,7 +131,7 @@ pgd_t *get_pgd_slow(struct mm_struct *mm
-
- if (vectors_base() == 0) {
- /*
-- * This lock is here just to satisfy pmd_alloc and pte_lock
-+ * This lock is here just to satisfy pmd_alloc_map() and pte_lock
- */
- spin_lock(&mm->page_table_lock);
-
-@@ -139,20 +139,22 @@ pgd_t *get_pgd_slow(struct mm_struct *mm
- * On ARM, first page must always be allocated since it
- * contains the machine vectors.
- */
-- new_pmd = pmd_alloc(mm, new_pgd, 0);
-+ new_pmd = pmd_alloc_map(mm, new_pgd, 0);
- if (!new_pmd)
- goto no_pmd;
-
-- new_pte = pte_alloc_map(mm, new_pmd, 0);
-- if (!new_pte)
-+ new_pte = pte_alloc_map(mm, new_pgd, &new_pmd, 0);
-+ if (!new_pte) {
-+ pmd_unmap(new_pmd);
- goto no_pte;
-+ }
-
- init_pmd = pmd_offset(init_pgd, 0);
- init_pte = pte_offset_map_nested(init_pmd, 0);
- set_pte(new_pte, *init_pte);
- pte_unmap_nested(init_pte);
- pte_unmap(new_pte);
--
-+ pmd_unmap(new_pmd);
- spin_unlock(&mm->page_table_lock);
- }
-
---- linux-2.6.0-test1/arch/cris/mm/ioremap.c 2003-07-10 18:50:30.000000000 -0700
-+++ 25/arch/cris/mm/ioremap.c 2003-07-19 17:07:16.000000000 -0700
-@@ -78,7 +78,7 @@ static int remap_area_pages(unsigned lon
- spin_lock(&init_mm.page_table_lock);
- do {
- pmd_t *pmd;
-- pmd = pmd_alloc(&init_mm, dir, address);
-+ pmd = pmd_alloc_kernel(&init_mm, dir, address);
- error = -ENOMEM;
- if (!pmd)
- break;
---- linux-2.6.0-test1/arch/h8300/kernel/setup.c 2003-06-14 12:17:58.000000000 -0700
-+++ 25/arch/h8300/kernel/setup.c 2003-07-19 17:03:49.000000000 -0700
-@@ -35,7 +35,6 @@
- #include <asm/irq.h>
-
- #ifdef CONFIG_BLK_DEV_INITRD
--#include <linux/blk.h>
- #include <asm/pgtable.h>
- #endif
-
---- linux-2.6.0-test1/arch/h8300/mm/init.c 2003-06-14 12:18:21.000000000 -0700
-+++ 25/arch/h8300/mm/init.c 2003-07-19 17:03:49.000000000 -0700
-@@ -23,9 +23,6 @@
- #include <linux/errno.h>
- #include <linux/string.h>
- #include <linux/types.h>
--#ifdef CONFIG_BLK_DEV_RAM
--#include <linux/blk.h>
--#endif
- #include <linux/ptrace.h>
- #include <linux/mman.h>
- #include <linux/mm.h>
---- linux-2.6.0-test1/arch/i386/Kconfig 2003-07-13 21:44:34.000000000 -0700
-+++ 25/arch/i386/Kconfig 2003-07-19 17:07:16.000000000 -0700
-@@ -438,9 +438,9 @@ config SMP
- If you don't know what to do here, say N.
-
- config NR_CPUS
-- int "Maximum number of CPUs (2-32)"
-+ int "Maximum number of CPUs (2-255)"
- depends on SMP
-- default "32"
-+ default "8"
- help
- This allows you to specify the maximum number of CPUs which this
- kernel will support. The maximum supported value is 32 and the
-@@ -723,6 +723,16 @@ config HIGHPTE
- low memory. Setting this option will put user-space page table
- entries in high memory.
-
-+config HIGHPMD
-+ bool "Allocate 2nd-level pagetables from highmem"
-+ depends on HIGHMEM64G && HIGHPTE
-+ help
-+ The VM uses one lowmem-allocated pmd entry for each pagetable
-+ page of physical memory allocated, and preallocates them all
-+ for 12KB of per-process lowmem overhead. For systems with
-+ extreme amounts of highmem, this cannot be tolerated. Setting
-+ this option will put userspace 2nd-level pagetables in highmem.
-+
- config MATH_EMULATION
- bool "Math emulation"
- ---help---
-@@ -1347,6 +1357,15 @@ config DEBUG_PAGEALLOC
- This results in a large slowdown, but helps to find certain types
- of memory corruptions.
-
-+config SPINLINE
-+ bool "Spinlock inlining"
-+ depends on DEBUG_KERNEL
-+ help
-+ This will change spinlocks from out of line to inline, making them
-+ account cost to the callers in readprofile, rather than the lock
-+ itself (as ".text.lock.filename"). This can be helpful for finding
-+ the callers of locks.
-+
- config DEBUG_HIGHMEM
- bool "Highmem debugging"
- depends on DEBUG_KERNEL && HIGHMEM
-@@ -1354,20 +1373,207 @@ config DEBUG_HIGHMEM
- This options enables addition error checking for high memory systems.
- Disable for production systems.
-
-+config LOCKMETER
-+ bool "Kernel lock metering"
-+ depends on SMP && !PREEMPT
-+ help
-+ Say Y to enable kernel lock metering, which adds overhead to SMP locks,
-+ but allows you to see various statistics using the lockstat command.
-+
- config DEBUG_SPINLOCK_SLEEP
- bool "Sleep-inside-spinlock checking"
- help
- If you say Y here, various routines which may sleep will become very
- noisy if they are called with a spinlock held.
-
-+config KGDB
-+ bool "Include kgdb kernel debugger"
-+ depends on DEBUG_KERNEL
-+ help
-+ If you say Y here, the system will be compiled with the debug
-+ option (-g) and a debugging stub will be included in the
-+ kernel. This stub communicates with gdb on another (host)
-+ computer via a serial port. The host computer should have
-+ access to the kernel binary file (vmlinux) and a serial port
-+ that is connected to the target machine. Gdb can be made to
-+ configure the serial port or you can use stty and setserial to
-+ do this. See the 'target' command in gdb. This option also
-+ configures in the ability to request a breakpoint early in the
-+ boot process. To request the breakpoint just include 'kgdb'
-+ as a boot option when booting the target machine. The system
-+ will then break as soon as it looks at the boot options. This
-+ option also installs a breakpoint in panic and sends any
-+ kernel faults to the debugger. For more information see the
-+ Documentation/i386/kgdb.txt file.
-+
-+choice
-+ depends on KGDB
-+ prompt "Debug serial port BAUD"
-+ default KGDB_115200BAUD
-+ help
-+ Gdb and the kernel stub need to agree on the baud rate to be
-+ used. Some systems (x86 family at this writing) allow this to
-+ be configured.
-+
-+config KGDB_9600BAUD
-+ bool "9600"
-+
-+config KGDB_19200BAUD
-+ bool "19200"
-+
-+config KGDB_38400BAUD
-+ bool "38400"
-+
-+config KGDB_57600BAUD
-+ bool "57600"
-+
-+config KGDB_115200BAUD
-+ bool "115200"
-+endchoice
-+
-+config KGDB_PORT
-+ hex "hex I/O port address of the debug serial port"
-+ depends on KGDB
-+ default 3f8
-+ help
-+ Some systems (x86 family at this writing) allow the port
-+ address to be configured. The number entered is assumed to be
-+ hex, don't put 0x in front of it. The standard address are:
-+ COM1 3f8 , irq 4 and COM2 2f8 irq 3. Setserial /dev/ttySx
-+ will tell you what you have. It is good to test the serial
-+ connection with a live system before trying to debug.
-+
-+config KGDB_IRQ
-+ int "IRQ of the debug serial port"
-+ depends on KGDB
-+ default 4
-+ help
-+ This is the irq for the debug port. If everything is working
-+ correctly and the kernel has interrupts on a control C to the
-+ port should cause a break into the kernel debug stub.
-+
-+config DEBUG_INFO
-+ bool
-+ default y
-+
-+config KGDB_MORE
-+ bool "Add any additional compile options"
-+ depends on KGDB
-+ default n
-+ help
-+ Saying yes here turns on the ability to enter additional
-+ compile options.
-+
-+
-+config KGDB_OPTIONS
-+ depends on KGDB_MORE
-+ string "Additional compile arguments"
-+ default "-O1"
-+ help
-+ This option allows you enter additional compile options for
-+ the whole kernel compile. Each platform will have a default
-+ that seems right for it. For example on PPC "-ggdb -O1", and
-+ for i386 "-O1". Note that by configuring KGDB "-g" is already
-+ turned on. In addition, on i386 platforms
-+ "-fomit-frame-pointer" is deleted from the standard compile
-+ options.
-+
-+config NO_KGDB_CPUS
-+ int "Number of CPUs"
-+ depends on KGDB && SMP
-+ default NR_CPUS
-+ help
-+
-+ This option sets the number of cpus for kgdb ONLY. It is used
-+ to prune some internal structures so they look "nice" when
-+ displayed with gdb. This is to overcome possibly larger
-+ numbers that may have been entered above. Enter the real
-+ number to get nice clean kgdb_info displays.
-+
-+config KGDB_TS
-+ bool "Enable kgdb time stamp macros?"
-+ depends on KGDB
-+ default n
-+ help
-+ Kgdb event macros allow you to instrument your code with calls
-+ to the kgdb event recording function. The event log may be
-+ examined with gdb at a break point. Turning on this
-+ capability also allows you to choose how many events to
-+ keep. Kgdb always keeps the lastest events.
-+
-+choice
-+ depends on KGDB_TS
-+ prompt "Max number of time stamps to save?"
-+ default KGDB_TS_128
-+
-+config KGDB_TS_64
-+ bool "64"
-+
-+config KGDB_TS_128
-+ bool "128"
-+
-+config KGDB_TS_256
-+ bool "256"
-+
-+config KGDB_TS_512
-+ bool "512"
-+
-+config KGDB_TS_1024
-+ bool "1024"
-+
-+endchoice
-+
-+config STACK_OVERFLOW_TEST
-+ bool "Turn on kernel stack overflow testing?"
-+ depends on KGDB
-+ default n
-+ help
-+ This option enables code in the front line interrupt handlers
-+ to check for kernel stack overflow on interrupts and system
-+ calls. This is part of the kgdb code on x86 systems.
-+
-+config KGDB_CONSOLE
-+ bool "Enable serial console thru kgdb port"
-+ depends on KGDB
-+ default n
-+ help
-+ This option enables the command line "console=kgdb" option.
-+ When the system is booted with this option in the command line
-+ all kernel printk output is sent to gdb (as well as to other
-+ consoles). For this to work gdb must be connected. For this
-+ reason, this command line option will generate a breakpoint if
-+ gdb has not yet connected. After the gdb continue command is
-+ given all pent up console output will be printed by gdb on the
-+ host machine. Neither this option, nor KGDB require the
-+ serial driver to be configured.
-+
-+config KGDB_SYSRQ
-+ bool "Turn on SysRq 'G' command to do a break?"
-+ depends on KGDB
-+ default y
-+ help
-+ This option includes an option in the SysRq code that allows
-+ you to enter SysRq G which generates a breakpoint to the KGDB
-+ stub. This will work if the keyboard is alive and can
-+ interrupt the system. Because of constraints on when the
-+ serial port interrupt can be enabled, this code may allow you
-+ to interrupt the system before the serial port control C is
-+ available. Just say yes here.
-+
- config FRAME_POINTER
- bool "Compile the kernel with frame pointers"
-+ default KGDB
- help
- If you say Y here the resulting kernel image will be slightly larger
- and slower, but it will give very useful debugging information.
- If you don't debug the kernel, you can say N, but we may not be able
- to solve problems without frame pointers.
-
-+config MAGIC_SYSRQ
-+ bool
-+ depends on KGDB_SYSRQ
-+ default y
-+
- config X86_EXTRA_IRQS
- bool
- depends on X86_LOCAL_APIC || X86_VOYAGER
---- linux-2.6.0-test1/arch/i386/kernel/apic.c 2003-07-02 14:53:12.000000000 -0700
-+++ 25/arch/i386/kernel/apic.c 2003-07-19 17:04:06.000000000 -0700
-@@ -1137,7 +1137,7 @@ int __init APIC_init_uniprocessor (void)
-
- connect_bsp_APIC();
-
-- phys_cpu_present_map = 1 << boot_cpu_physical_apicid;
-+ phys_cpu_present_map = physid_mask_of_physid(boot_cpu_physical_apicid);
-
- setup_local_APIC();
-
---- linux-2.6.0-test1/arch/i386/kernel/apm.c 2003-06-14 12:17:57.000000000 -0700
-+++ 25/arch/i386/kernel/apm.c 2003-07-19 17:04:06.000000000 -0700
-@@ -508,16 +508,16 @@ static void apm_error(char *str, int err
-
- #ifdef CONFIG_SMP
-
--static unsigned long apm_save_cpus(void)
-+static cpumask_t apm_save_cpus(void)
- {
-- unsigned long x = current->cpus_allowed;
-+ cpumask_t x = current->cpus_allowed;
- /* Some bioses don't like being called from CPU != 0 */
-- set_cpus_allowed(current, 1UL << 0);
-+ set_cpus_allowed(current, cpumask_of_cpu(0));
- BUG_ON(smp_processor_id() != 0);
- return x;
- }
-
--static inline void apm_restore_cpus(unsigned long mask)
-+static inline void apm_restore_cpus(cpumask_t mask)
- {
- set_cpus_allowed(current, mask);
- }
-@@ -528,7 +528,7 @@ static inline void apm_restore_cpus(unsi
- * No CPU lockdown needed on a uniprocessor
- */
-
--#define apm_save_cpus() 0
-+#define apm_save_cpus() (current->cpus_allowed)
- #define apm_restore_cpus(x) (void)(x)
-
- #endif
-@@ -593,7 +593,7 @@ static u8 apm_bios_call(u32 func, u32 eb
- {
- APM_DECL_SEGS
- unsigned long flags;
-- unsigned long cpus;
-+ cpumask_t cpus;
- int cpu;
- struct desc_struct save_desc_40;
-
-@@ -635,7 +635,7 @@ static u8 apm_bios_call_simple(u32 func,
- u8 error;
- APM_DECL_SEGS
- unsigned long flags;
-- unsigned long cpus;
-+ cpumask_t cpus;
- int cpu;
- struct desc_struct save_desc_40;
-
-@@ -913,7 +913,7 @@ static void apm_power_off(void)
- */
- #ifdef CONFIG_SMP
- /* Some bioses don't like being called from CPU != 0 */
-- set_cpus_allowed(current, 1UL << 0);
-+ set_cpus_allowed(current, cpumask_of_cpu(0));
- BUG_ON(smp_processor_id() != 0);
- #endif
- if (apm_info.realmode_power_off)
-@@ -1704,7 +1704,7 @@ static int apm(void *unused)
- * Some bioses don't like being called from CPU != 0.
- * Method suggested by Ingo Molnar.
- */
-- set_cpus_allowed(current, 1UL << 0);
-+ set_cpus_allowed(current, cpumask_of_cpu(0));
- BUG_ON(smp_processor_id() != 0);
- #endif
-
---- linux-2.6.0-test1/arch/i386/kernel/cpu/cpufreq/p4-clockmod.c 2003-06-14 12:18:33.000000000 -0700
-+++ 25/arch/i386/kernel/cpu/cpufreq/p4-clockmod.c 2003-07-19 17:04:06.000000000 -0700
-@@ -53,10 +53,9 @@ static int stock_freq;
- static int cpufreq_p4_setdc(unsigned int cpu, unsigned int newstate)
- {
- u32 l, h;
-- unsigned long cpus_allowed;
-+ cpumask_t cpus_allowed, affected_cpu_map;
- struct cpufreq_freqs freqs;
- int hyperthreading = 0;
-- int affected_cpu_map = 0;
- int sibling = 0;
-
- if (!cpu_online(cpu) || (newstate > DC_DISABLE) ||
-@@ -67,16 +66,16 @@ static int cpufreq_p4_setdc(unsigned int
- cpus_allowed = current->cpus_allowed;
-
- /* only run on CPU to be set, or on its sibling */
-- affected_cpu_map = 1 << cpu;
-+ affected_cpu_map = cpumask_of_cpu(cpu);
- #ifdef CONFIG_X86_HT
- hyperthreading = ((cpu_has_ht) && (smp_num_siblings == 2));
- if (hyperthreading) {
- sibling = cpu_sibling_map[cpu];
-- affected_cpu_map |= (1 << sibling);
-+ cpu_set(sibling, affected_cpu_map);
- }
- #endif
- set_cpus_allowed(current, affected_cpu_map);
-- BUG_ON(!(affected_cpu_map & (1 << smp_processor_id())));
-+ BUG_ON(!cpu_isset(smp_processor_id(), affected_cpu_map));
-
- /* get current state */
- rdmsr(MSR_IA32_THERM_CONTROL, l, h);
---- linux-2.6.0-test1/arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c 2003-07-02 14:53:12.000000000 -0700
-+++ 25/arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c 2003-07-19 17:05:02.000000000 -0700
-@@ -156,14 +156,15 @@ static struct cpufreq_frequency_table op
- };
- #undef OP
-
--#define CPU(max) \
-- { "Intel(R) Pentium(R) M processor " #max "MHz", (max)*1000, op_##max }
-+#define _CPU(max, name) \
-+ { "Intel(R) Pentium(R) M processor " name "MHz", (max)*1000, op_##max }
-+#define CPU(max) _CPU(max, #max)
-
- /* CPU models, their operating frequency range, and freq/voltage
- operating points */
- static const struct cpu_model models[] =
- {
-- CPU( 900),
-+ _CPU( 900, " 900"),
- CPU(1100),
- CPU(1200),
- CPU(1300),
---- linux-2.6.0-test1/arch/i386/kernel/cpu/cpufreq/speedstep-ich.c 2003-07-02 14:53:12.000000000 -0700
-+++ 25/arch/i386/kernel/cpu/cpufreq/speedstep-ich.c 2003-07-19 17:08:59.000000000 -0700
-@@ -77,15 +77,17 @@ static void speedstep_set_state (unsigne
- u8 value;
- unsigned long flags;
- struct cpufreq_freqs freqs;
-+ int newfreq;
-
- if (!speedstep_chipset_dev || (state > 0x1))
- return;
-
- freqs.old = speedstep_get_processor_frequency(speedstep_processor);
-- freqs.new = speedstep_freqs[SPEEDSTEP_LOW].frequency;
-+ freqs.new = speedstep_freqs[state].frequency;
- freqs.cpu = 0; /* speedstep.c is UP only driver */
-
-- if (notify)
-+ /* make sure we've initialized before calling notify */
-+ if (notify && (freqs.new != 0))
- cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE);
-
- /* get PMBASE */
-@@ -136,13 +138,16 @@ static void speedstep_set_state (unsigne
-
- dprintk(KERN_DEBUG "cpufreq: read at pmbase 0x%x + 0x50 returned 0x%x\n", pmbase, value);
-
-+ /* freqs.new may not be set yet - need local copy */
-+ newfreq = speedstep_get_processor_frequency(speedstep_processor);
- if (state == (value & 0x1)) {
-- dprintk (KERN_INFO "cpufreq: change to %u MHz succeeded\n", (freqs.new / 1000));
-+ dprintk (KERN_INFO "cpufreq: change to %u MHz succeeded\n", (newfreq / 1000));
- } else {
- printk (KERN_ERR "cpufreq: change failed - I/O error\n");
- }
-
-- if (notify)
-+ /* Make sure we're initialized before calling notify */
-+ if (notify && (freqs.new != 0))
- cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE);
-
- return;
-@@ -295,7 +300,7 @@ static int speedstep_cpu_init(struct cpu
- return -EIO;
-
- dprintk(KERN_INFO "cpufreq: currently at %s speed setting - %i MHz\n",
-- (speed == speedstep_low_freq) ? "low" : "high",
-+ (speed == speedstep_freqs[SPEEDSTEP_LOW].frequency) ? "low" : "high",
- (speed / 1000));
-
- /* cpuinfo and default policy values */
---- linux-2.6.0-test1/arch/i386/kernel/cpuid.c 2003-06-14 12:17:55.000000000 -0700
-+++ 25/arch/i386/kernel/cpuid.c 2003-07-19 17:04:06.000000000 -0700
-@@ -136,7 +136,7 @@ static int cpuid_open(struct inode *inod
- int cpu = minor(file->f_dentry->d_inode->i_rdev);
- struct cpuinfo_x86 *c = &(cpu_data)[cpu];
-
-- if ( !(cpu_online_map & (1UL << cpu)) )
-+ if (!cpu_online(cpu))
- return -ENXIO; /* No such CPU */
- if ( c->cpuid_level < 0 )
- return -EIO; /* CPUID not supported */
---- linux-2.6.0-test1/arch/i386/kernel/cpu/mtrr/cyrix.c 2003-06-14 12:18:22.000000000 -0700
-+++ 25/arch/i386/kernel/cpu/mtrr/cyrix.c 2003-07-19 17:03:49.000000000 -0700
-@@ -330,16 +330,16 @@ cyrix_arr_init(void)
- set_mtrr_done(&ctxt); /* flush cache and disable MAPEN */
-
- if (ccrc[5])
-- printk("mtrr: ARR usage was not enabled, enabled manually\n");
-+ printk(KERN_INFO "mtrr: ARR usage was not enabled, enabled manually\n");
- if (ccrc[3])
-- printk("mtrr: ARR3 cannot be changed\n");
-+ printk(KERN_INFO "mtrr: ARR3 cannot be changed\n");
- /*
- if ( ccrc[1] & 0x80) printk ("mtrr: SMM memory access through ARR3 disabled\n");
- if ( ccrc[1] & 0x04) printk ("mtrr: SMM memory access disabled\n");
- if ( ccrc[1] & 0x02) printk ("mtrr: SMM mode disabled\n");
- */
- if (ccrc[6])
-- printk("mtrr: ARR3 was write protected, unprotected\n");
-+ printk(KERN_INFO "mtrr: ARR3 was write protected, unprotected\n");
- }
-
- static struct mtrr_ops cyrix_mtrr_ops = {
---- linux-2.6.0-test1/arch/i386/kernel/cpu/mtrr/main.c 2003-06-26 22:07:22.000000000 -0700
-+++ 25/arch/i386/kernel/cpu/mtrr/main.c 2003-07-19 17:04:57.000000000 -0700
-@@ -64,7 +64,7 @@ __initdata char *mtrr_if_name[] = {
- static void set_mtrr(unsigned int reg, unsigned long base,
- unsigned long size, mtrr_type type);
-
--static unsigned int arr3_protected;
-+extern int arr3_protected;
-
- void set_mtrr_ops(struct mtrr_ops * ops)
- {
-@@ -75,23 +75,25 @@ void set_mtrr_ops(struct mtrr_ops * ops)
- /* Returns non-zero if we have the write-combining memory type */
- static int have_wrcomb(void)
- {
-- struct pci_dev *dev = NULL;
--
-- /* WTF is this?
-- * Someone, please shoot me.
-- */
--
-- /* ServerWorks LE chipsets have problems with write-combining
-- Don't allow it and leave room for other chipsets to be tagged */
--
-+ struct pci_dev *dev;
-+
- if ((dev = pci_find_class(PCI_CLASS_BRIDGE_HOST << 8, NULL)) != NULL) {
-- if ((dev->vendor == PCI_VENDOR_ID_SERVERWORKS) &&
-- (dev->device == PCI_DEVICE_ID_SERVERWORKS_LE)) {
-- printk(KERN_INFO
-- "mtrr: Serverworks LE detected. Write-combining disabled.\n");
-+ /* ServerWorks LE chipsets have problems with write-combining
-+ Don't allow it and leave room for other chipsets to be tagged */
-+ if (dev->vendor == PCI_VENDOR_ID_SERVERWORKS &&
-+ dev->device == PCI_DEVICE_ID_SERVERWORKS_LE) {
-+ printk(KERN_INFO "mtrr: Serverworks LE detected. Write-combining disabled.\n");
- return 0;
- }
-- }
-+ /* Intel 450NX errata # 23. Non ascending cachline evictions to
-+ write combining memory may resulting in data corruption */
-+ if (dev->vendor == PCI_VENDOR_ID_INTEL &&
-+ dev->device == PCI_DEVICE_ID_INTEL_82451NX)
-+ {
-+ printk(KERN_INFO "mtrr: Intel 450NX MMC detected. Write-combining disabled.\n");
-+ return 0;
-+ }
-+ }
- return (mtrr_if->have_wrcomb ? mtrr_if->have_wrcomb() : 0);
- }
-
-@@ -121,7 +123,7 @@ static void init_table(void)
- max = num_var_ranges;
- if ((usage_table = kmalloc(max * sizeof *usage_table, GFP_KERNEL))
- == NULL) {
-- printk("mtrr: could not allocate\n");
-+ printk(KERN_ERR "mtrr: could not allocate\n");
- return;
- }
- for (i = 0; i < max; i++)
-@@ -310,7 +312,7 @@ int mtrr_add_page(unsigned long base, un
- return error;
-
- if (type >= MTRR_NUM_TYPES) {
-- printk("mtrr: type: %u illegal\n", type);
-+ printk(KERN_WARNING "mtrr: type: %u invalid\n", type);
- return -EINVAL;
- }
-
-@@ -322,7 +324,7 @@ int mtrr_add_page(unsigned long base, un
- }
-
- if (base & size_or_mask || size & size_or_mask) {
-- printk("mtrr: base or size exceeds the MTRR width\n");
-+ printk(KERN_WARNING "mtrr: base or size exceeds the MTRR width\n");
- return -EINVAL;
- }
-
-@@ -348,7 +350,7 @@ int mtrr_add_page(unsigned long base, un
- if (ltype != type) {
- if (type == MTRR_TYPE_UNCACHABLE)
- continue;
-- printk ("mtrr: type mismatch for %lx000,%lx000 old: %s new: %s\n",
-+ printk (KERN_WARNING "mtrr: type mismatch for %lx000,%lx000 old: %s new: %s\n",
- base, size, attrib_to_str(ltype),
- attrib_to_str(type));
- goto out;
-@@ -364,7 +366,7 @@ int mtrr_add_page(unsigned long base, un
- set_mtrr(i, base, size, type);
- usage_table[i] = 1;
- } else
-- printk("mtrr: no more MTRRs available\n");
-+ printk(KERN_INFO "mtrr: no more MTRRs available\n");
- error = i;
- out:
- up(&main_lock);
-@@ -412,8 +414,8 @@ mtrr_add(unsigned long base, unsigned lo
- char increment)
- {
- if ((base & (PAGE_SIZE - 1)) || (size & (PAGE_SIZE - 1))) {
-- printk("mtrr: size and base must be multiples of 4 kiB\n");
-- printk("mtrr: size: 0x%lx base: 0x%lx\n", size, base);
-+ printk(KERN_WARNING "mtrr: size and base must be multiples of 4 kiB\n");
-+ printk(KERN_DEBUG "mtrr: size: 0x%lx base: 0x%lx\n", size, base);
- return -EINVAL;
- }
- return mtrr_add_page(base >> PAGE_SHIFT, size >> PAGE_SHIFT, type,
-@@ -458,28 +460,28 @@ int mtrr_del_page(int reg, unsigned long
- }
- }
- if (reg < 0) {
-- printk("mtrr: no MTRR for %lx000,%lx000 found\n", base,
-+ printk(KERN_DEBUG "mtrr: no MTRR for %lx000,%lx000 found\n", base,
- size);
- goto out;
- }
- }
- if (reg >= max) {
-- printk("mtrr: register: %d too big\n", reg);
-+ printk(KERN_WARNING "mtrr: register: %d too big\n", reg);
- goto out;
- }
- if (is_cpu(CYRIX) && !use_intel()) {
- if ((reg == 3) && arr3_protected) {
-- printk("mtrr: ARR3 cannot be changed\n");
-+ printk(KERN_WARNING "mtrr: ARR3 cannot be changed\n");
- goto out;
- }
- }
- mtrr_if->get(reg, &lbase, &lsize, <ype);
- if (lsize < 1) {
-- printk("mtrr: MTRR %d not used\n", reg);
-+ printk(KERN_WARNING "mtrr: MTRR %d not used\n", reg);
- goto out;
- }
- if (usage_table[reg] < 1) {
-- printk("mtrr: reg: %d has count=0\n", reg);
-+ printk(KERN_WARNING "mtrr: reg: %d has count=0\n", reg);
- goto out;
- }
- if (--usage_table[reg] < 1)
-@@ -508,8 +510,8 @@ int
- mtrr_del(int reg, unsigned long base, unsigned long size)
- {
- if ((base & (PAGE_SIZE - 1)) || (size & (PAGE_SIZE - 1))) {
-- printk("mtrr: size and base must be multiples of 4 kiB\n");
-- printk("mtrr: size: 0x%lx base: 0x%lx\n", size, base);
-+ printk(KERN_INFO "mtrr: size and base must be multiples of 4 kiB\n");
-+ printk(KERN_DEBUG "mtrr: size: 0x%lx base: 0x%lx\n", size, base);
- return -EINVAL;
- }
- return mtrr_del_page(reg, base >> PAGE_SHIFT, size >> PAGE_SHIFT);
-@@ -677,7 +679,7 @@ static int __init mtrr_init(void)
- break;
- }
- }
-- printk("mtrr: v%s\n",MTRR_VERSION);
-+ printk(KERN_INFO "mtrr: v%s\n",MTRR_VERSION);
-
- if (mtrr_if) {
- set_num_var_ranges();
-@@ -701,5 +703,5 @@ char *mtrr_strings[MTRR_NUM_TYPES] =
- "write-back", /* 6 */
- };
-
--subsys_initcall(mtrr_init);
-+core_initcall(mtrr_init);
-
---- linux-2.6.0-test1/arch/i386/kernel/cpu/proc.c 2003-06-14 12:18:33.000000000 -0700
-+++ 25/arch/i386/kernel/cpu/proc.c 2003-07-19 17:04:06.000000000 -0700
-@@ -60,7 +60,7 @@ static int show_cpuinfo(struct seq_file
- int fpu_exception;
-
- #ifdef CONFIG_SMP
-- if (!(cpu_online_map & (1<<n)))
-+ if (!cpu_online(n))
- return 0;
- #endif
- seq_printf(m, "processor\t: %d\n"
---- linux-2.6.0-test1/arch/i386/kernel/entry.S 2003-07-13 21:44:34.000000000 -0700
-+++ 25/arch/i386/kernel/entry.S 2003-07-19 17:06:37.000000000 -0700
-@@ -48,6 +48,18 @@
- #include <asm/smp.h>
- #include <asm/page.h>
- #include "irq_vectors.h"
-+ /* We do not recover from a stack overflow, but at least
-+ * we know it happened and should be able to track it down.
-+ */
-+#ifdef CONFIG_STACK_OVERFLOW_TEST
-+#define STACK_OVERFLOW_TEST \
-+ testl $7680,%esp; \
-+ jnz 10f; \
-+ call stack_overflow; \
-+10:
-+#else
-+#define STACK_OVERFLOW_TEST
-+#endif
-
- EBX = 0x00
- ECX = 0x04
-@@ -98,7 +110,8 @@ TSS_ESP0_OFFSET = (4 - 0x200)
- pushl %ebx; \
- movl $(__USER_DS), %edx; \
- movl %edx, %ds; \
-- movl %edx, %es;
-+ movl %edx, %es; \
-+ STACK_OVERFLOW_TEST
-
- #define RESTORE_INT_REGS \
- popl %ebx; \
-@@ -298,6 +311,19 @@ syscall_exit:
- testw $_TIF_ALLWORK_MASK, %cx # current->work
- jne syscall_exit_work
- restore_all:
-+#ifdef CONFIG_TRAP_BAD_SYSCALL_EXITS
-+ movl EFLAGS(%esp), %eax # mix EFLAGS and CS
-+ movb CS(%esp), %al
-+ testl $(VM_MASK | 3), %eax
-+ jz resume_kernelX # returning to kernel or vm86-space
-+
-+ cmpl $0,TI_PRE_COUNT(%ebx) # non-zero preempt_count ?
-+ jz resume_kernelX
-+
-+ int $3
-+
-+resume_kernelX:
-+#endif
- RESTORE_ALL
-
- # perform work that needs to be done immediately before resumption
-@@ -878,5 +904,6 @@ ENTRY(sys_call_table)
- .long sys_fstatfs64
- .long sys_tgkill /* 270 */
- .long sys_utimes
--
-+ .long sys_mknod64
-+
- nr_syscalls=(.-sys_call_table)/4
---- linux-2.6.0-test1/arch/i386/kernel/io_apic.c 2003-07-10 18:50:30.000000000 -0700
-+++ 25/arch/i386/kernel/io_apic.c 2003-07-19 17:04:06.000000000 -0700
-@@ -249,14 +249,14 @@ static void clear_IO_APIC (void)
- clear_IO_APIC_pin(apic, pin);
- }
-
--static void set_ioapic_affinity (unsigned int irq, unsigned long cpu_mask)
-+static void set_ioapic_affinity(unsigned int irq, cpumask_t cpumask)
- {
- unsigned long flags;
- int pin;
- struct irq_pin_list *entry = irq_2_pin + irq;
- unsigned int apicid_value;
-
-- apicid_value = cpu_mask_to_apicid(cpu_mask);
-+ apicid_value = cpu_mask_to_apicid(mk_cpumask_const(cpumask));
- /* Prepare to do the io_apic_write */
- apicid_value = apicid_value << 24;
- spin_lock_irqsave(&ioapic_lock, flags);
-@@ -286,9 +286,9 @@ static void set_ioapic_affinity (unsigne
- # define Dprintk(x...)
- # endif
-
--extern unsigned long irq_affinity[NR_IRQS];
-+extern cpumask_t irq_affinity[NR_IRQS];
-
--static int __cacheline_aligned pending_irq_balance_cpumask[NR_IRQS];
-+static cpumask_t __cacheline_aligned pending_irq_balance_cpumask[NR_IRQS];
-
- #define IRQBALANCE_CHECK_ARCH -999
- static int irqbalance_disabled = IRQBALANCE_CHECK_ARCH;
-@@ -307,8 +307,7 @@ struct irq_cpu_info {
- #define IDLE_ENOUGH(cpu,now) \
- (idle_cpu(cpu) && ((now) - irq_stat[(cpu)].idle_timestamp > 1))
-
--#define IRQ_ALLOWED(cpu,allowed_mask) \
-- ((1 << cpu) & (allowed_mask))
-+#define IRQ_ALLOWED(cpu, allowed_mask) cpu_isset(cpu, allowed_mask)
-
- #define CPU_TO_PACKAGEINDEX(i) \
- ((physical_balance && i > cpu_sibling_map[i]) ? cpu_sibling_map[i] : i)
-@@ -320,7 +319,7 @@ struct irq_cpu_info {
-
- long balanced_irq_interval = MAX_BALANCED_IRQ_INTERVAL;
-
--static unsigned long move(int curr_cpu, unsigned long allowed_mask,
-+static unsigned long move(int curr_cpu, cpumask_t allowed_mask,
- unsigned long now, int direction)
- {
- int search_idle = 1;
-@@ -350,20 +349,20 @@ inside:
- static inline void balance_irq(int cpu, int irq)
- {
- unsigned long now = jiffies;
-- unsigned long allowed_mask;
-+ cpumask_t allowed_mask;
- unsigned int new_cpu;
-
- if (irqbalance_disabled)
- return;
-
-- allowed_mask = cpu_online_map & irq_affinity[irq];
-+ cpus_and(allowed_mask, cpu_online_map, irq_affinity[irq]);
- new_cpu = move(cpu, allowed_mask, now, 1);
- if (cpu != new_cpu) {
- irq_desc_t *desc = irq_desc + irq;
- unsigned long flags;
-
- spin_lock_irqsave(&desc->lock, flags);
-- pending_irq_balance_cpumask[irq] = 1 << new_cpu;
-+ pending_irq_balance_cpumask[irq] = cpumask_of_cpu(new_cpu);
- spin_unlock_irqrestore(&desc->lock, flags);
- }
- }
-@@ -399,8 +398,7 @@ static void do_irq_balance(void)
- int tmp_loaded, first_attempt = 1;
- unsigned long tmp_cpu_irq;
- unsigned long imbalance = 0;
-- unsigned long allowed_mask;
-- unsigned long target_cpu_mask;
-+ cpumask_t allowed_mask, target_cpu_mask, tmp;
-
- for (i = 0; i < NR_CPUS; i++) {
- int package_index;
-@@ -549,10 +547,11 @@ tryanotherirq:
- CPU_IRQ(cpu_sibling_map[min_loaded]))
- min_loaded = cpu_sibling_map[min_loaded];
-
-- allowed_mask = cpu_online_map & irq_affinity[selected_irq];
-- target_cpu_mask = 1 << min_loaded;
-+ cpus_and(allowed_mask, cpu_online_map, irq_affinity[selected_irq]);
-+ target_cpu_mask = cpumask_of_cpu(min_loaded);
-+ cpus_and(tmp, target_cpu_mask, allowed_mask);
-
-- if (target_cpu_mask & allowed_mask) {
-+ if (!cpus_empty(tmp)) {
- irq_desc_t *desc = irq_desc + selected_irq;
- unsigned long flags;
-
-@@ -560,7 +559,8 @@ tryanotherirq:
- selected_irq, min_loaded);
- /* mark for change destination */
- spin_lock_irqsave(&desc->lock, flags);
-- pending_irq_balance_cpumask[selected_irq] = 1 << min_loaded;
-+ pending_irq_balance_cpumask[selected_irq] =
-+ cpumask_of_cpu(min_loaded);
- spin_unlock_irqrestore(&desc->lock, flags);
- /* Since we made a change, come back sooner to
- * check for more variation.
-@@ -591,8 +591,9 @@ int balanced_irq(void *unused)
- daemonize("kirqd");
-
- /* push everything to CPU 0 to give us a starting point. */
-- for (i = 0 ; i < NR_IRQS ; i++)
-- pending_irq_balance_cpumask[i] = 1;
-+ for (i = 0 ; i < NR_IRQS ; i++) {
-+ pending_irq_balance_cpumask[i] = cpumask_of_cpu(0);
-+ }
-
- repeat:
- set_current_state(TASK_INTERRUPTIBLE);
-@@ -611,7 +612,9 @@ static int __init balanced_irq_init(void
- {
- int i;
- struct cpuinfo_x86 *c;
-+ cpumask_t tmp;
-
-+ cpus_shift_right(tmp, cpu_online_map, 2);
- c = &boot_cpu_data;
- /* When not overwritten by the command line ask subarchitecture. */
- if (irqbalance_disabled == IRQBALANCE_CHECK_ARCH)
-@@ -628,7 +631,7 @@ static int __init balanced_irq_init(void
- * Enable physical balance only if more than 1 physical processor
- * is present
- */
-- if (smp_num_siblings > 1 && cpu_online_map >> 2)
-+ if (smp_num_siblings > 1 && !cpus_empty(tmp))
- physical_balance = 1;
-
- for (i = 0; i < NR_CPUS; i++) {
-@@ -667,14 +670,14 @@ static int __init irqbalance_disable(cha
-
- __setup("noirqbalance", irqbalance_disable);
-
--static void set_ioapic_affinity (unsigned int irq, unsigned long mask);
-+static void set_ioapic_affinity(unsigned int irq, cpumask_t mask);
-
- static inline void move_irq(int irq)
- {
- /* note - we hold the desc->lock */
-- if (unlikely(pending_irq_balance_cpumask[irq])) {
-+ if (unlikely(!cpus_empty(pending_irq_balance_cpumask[irq]))) {
- set_ioapic_affinity(irq, pending_irq_balance_cpumask[irq]);
-- pending_irq_balance_cpumask[irq] = 0;
-+ cpus_clear(pending_irq_balance_cpumask[irq]);
- }
- }
-
-@@ -682,6 +685,21 @@ __initcall(balanced_irq_init);
-
- #else /* !SMP */
- static inline void move_irq(int irq) { }
-+
-+void send_IPI_self(int vector)
-+{
-+ unsigned int cfg;
-+
-+ /*
-+ * Wait for idle.
-+ */
-+ apic_wait_icr_idle();
-+ cfg = APIC_DM_FIXED | APIC_DEST_SELF | vector | APIC_DEST_LOGICAL;
-+ /*
-+ * Send the IPI. The write to APIC_ICR fires this off.
-+ */
-+ apic_write_around(APIC_ICR, cfg);
-+}
- #endif /* defined(CONFIG_SMP) */
-
-
-@@ -822,7 +840,7 @@ int IO_APIC_get_PCI_irq_vector(int bus,
- * we need to reprogram the ioredtbls to cater for the cpus which have come online
- * so mask in all cases should simply be TARGET_CPUS
- */
--void __init setup_ioapic_dest (unsigned long mask)
-+void __init setup_ioapic_dest(cpumask_t mask)
- {
- int pin, ioapic, irq, irq_entry;
-
-@@ -1598,7 +1616,7 @@ void disable_IO_APIC(void)
- static void __init setup_ioapic_ids_from_mpc(void)
- {
- union IO_APIC_reg_00 reg_00;
-- unsigned long phys_id_present_map;
-+ physid_mask_t phys_id_present_map;
- int apic;
- int i;
- unsigned char old_id;
-@@ -1608,6 +1626,10 @@ static void __init setup_ioapic_ids_from
- /* This gets done during IOAPIC enumeration for ACPI. */
- return;
-
-+ /*
-+ * This is broken; anything with a real cpu count has to
-+ * circumvent this idiocy regardless.
-+ */
- phys_id_present_map = ioapic_phys_id_map(phys_cpu_present_map);
-
- /*
-@@ -1639,18 +1661,20 @@ static void __init setup_ioapic_ids_from
- mp_ioapics[apic].mpc_apicid)) {
- printk(KERN_ERR "BIOS bug, IO-APIC#%d ID %d is already used!...\n",
- apic, mp_ioapics[apic].mpc_apicid);
-- for (i = 0; i < 0xf; i++)
-- if (!(phys_id_present_map & (1 << i)))
-+ for (i = 0; i < APIC_BROADCAST_ID; i++)
-+ if (!physid_isset(i, phys_id_present_map))
- break;
-- if (i >= 0xf)
-+ if (i >= APIC_BROADCAST_ID)
- panic("Max APIC ID exceeded!\n");
- printk(KERN_ERR "... fixing up to %d. (tell your hw vendor)\n",
- i);
-- phys_id_present_map |= 1 << i;
-+ physid_set(i, phys_id_present_map);
- mp_ioapics[apic].mpc_apicid = i;
- } else {
-+ physid_mask_t tmp;
-+ tmp = apicid_to_cpu_present(mp_ioapics[apic].mpc_apicid);
- printk("Setting %d in the phys_id_present_map\n", mp_ioapics[apic].mpc_apicid);
-- phys_id_present_map |= apicid_to_cpu_present(mp_ioapics[apic].mpc_apicid);
-+ physids_or(phys_id_present_map, phys_id_present_map, tmp);
- }
-
-
-@@ -2220,7 +2244,8 @@ late_initcall(io_apic_bug_finalize);
- int __init io_apic_get_unique_id (int ioapic, int apic_id)
- {
- union IO_APIC_reg_00 reg_00;
-- static unsigned long apic_id_map = 0;
-+ static physid_mask_t apic_id_map = PHYSID_MASK_NONE;
-+ physid_mask_t tmp;
- unsigned long flags;
- int i = 0;
-
-@@ -2233,8 +2258,8 @@ int __init io_apic_get_unique_id (int io
- * advantage of new APIC bus architecture.
- */
-
-- if (!apic_id_map)
-- apic_id_map = phys_cpu_present_map;
-+ if (physids_empty(apic_id_map))
-+ apic_id_map = ioapic_phys_id_map(phys_cpu_present_map);
-
- spin_lock_irqsave(&ioapic_lock, flags);
- reg_00.raw = io_apic_read(ioapic, 0);
-@@ -2266,7 +2291,8 @@ int __init io_apic_get_unique_id (int io
- apic_id = i;
- }
-
-- apic_id_map |= apicid_to_cpu_present(apic_id);
-+ tmp = apicid_to_cpu_present(apic_id);
-+ physids_or(apic_id_map, apic_id_map, tmp);
-
- if (reg_00.bits.ID != apic_id) {
- reg_00.bits.ID = apic_id;
---- linux-2.6.0-test1/arch/i386/kernel/irq.c 2003-07-10 18:50:30.000000000 -0700
-+++ 25/arch/i386/kernel/irq.c 2003-07-19 17:04:06.000000000 -0700
-@@ -45,8 +45,6 @@
- #include <asm/desc.h>
- #include <asm/irq.h>
-
--
--
- /*
- * Linux has a controller-independent x86 interrupt architecture.
- * every controller has a 'controller-template', that is used
-@@ -889,13 +887,13 @@ int setup_irq(unsigned int irq, struct i
- static struct proc_dir_entry * root_irq_dir;
- static struct proc_dir_entry * irq_dir [NR_IRQS];
-
--#define HEX_DIGITS 8
-+#define HEX_DIGITS (2*sizeof(cpumask_t))
-
--static unsigned int parse_hex_value (const char __user *buffer,
-- unsigned long count, unsigned long *ret)
-+static unsigned int parse_hex_value(const char __user *buffer,
-+ unsigned long count, cpumask_t *ret)
- {
-- unsigned char hexnum [HEX_DIGITS];
-- unsigned long value;
-+ unsigned char hexnum[HEX_DIGITS];
-+ cpumask_t value = CPU_MASK_NONE;
- int i;
-
- if (!count)
-@@ -909,10 +907,10 @@ static unsigned int parse_hex_value (con
- * Parse the first 8 characters as a hex string, any non-hex char
- * is end-of-string. '00e1', 'e1', '00E1', 'E1' are all the same.
- */
-- value = 0;
-
- for (i = 0; i < count; i++) {
- unsigned int c = hexnum[i];
-+ int k;
-
- switch (c) {
- case '0' ... '9': c -= '0'; break;
-@@ -921,7 +919,10 @@ static unsigned int parse_hex_value (con
- default:
- goto out;
- }
-- value = (value << 4) | c;
-+ cpus_shift_left(value, value, 4);
-+ for (k = 0; k < 4; ++k)
-+ if (test_bit(k, (unsigned long *)&c))
-+ cpu_set(k, value);
- }
- out:
- *ret = value;
-@@ -930,22 +931,35 @@ out:
-
- #ifdef CONFIG_SMP
-
--static struct proc_dir_entry * smp_affinity_entry [NR_IRQS];
-+static struct proc_dir_entry *smp_affinity_entry[NR_IRQS];
-+
-+cpumask_t irq_affinity[NR_IRQS] = { [0 ... NR_IRQS-1] = CPU_MASK_ALL };
-
--unsigned long irq_affinity [NR_IRQS] = { [0 ... NR_IRQS-1] = ~0UL };
--static int irq_affinity_read_proc (char *page, char **start, off_t off,
-+static int irq_affinity_read_proc(char *page, char **start, off_t off,
- int count, int *eof, void *data)
- {
-+ int k, len;
-+ cpumask_t tmp = irq_affinity[(long)data];
-+
- if (count < HEX_DIGITS+1)
- return -EINVAL;
-- return sprintf (page, "%08lx\n", irq_affinity[(long)data]);
-+
-+ len = 0;
-+ for (k = 0; k < sizeof(cpumask_t)/sizeof(u16); ++k) {
-+ int j = sprintf(page, "%04hx", (u16)cpus_coerce(tmp));
-+ len += j;
-+ page += j;
-+ cpus_shift_right(tmp, tmp, 16);
-+ }
-+ len += sprintf(page, "\n");
-+ return len;
- }
-
--static int irq_affinity_write_proc (struct file *file, const char __user *buffer,
-+static int irq_affinity_write_proc(struct file *file, const char __user *buffer,
- unsigned long count, void *data)
- {
-- int irq = (long) data, full_count = count, err;
-- unsigned long new_value;
-+ int irq = (long)data, full_count = count, err;
-+ cpumask_t new_value, tmp;
-
- if (!irq_desc[irq].handler->set_affinity)
- return -EIO;
-@@ -957,11 +971,13 @@ static int irq_affinity_write_proc (stru
- * way to make the system unusable accidentally :-) At least
- * one online CPU still has to be targeted.
- */
-- if (!(new_value & cpu_online_map))
-+ cpus_and(tmp, new_value, cpu_online_map);
-+ if (cpus_empty(tmp))
- return -EINVAL;
-
- irq_affinity[irq] = new_value;
-- irq_desc[irq].handler->set_affinity(irq, new_value);
-+ irq_desc[irq].handler->set_affinity(irq,
-+ cpumask_of_cpu(first_cpu(new_value)));
-
- return full_count;
- }
-@@ -980,8 +996,9 @@ static int prof_cpu_mask_read_proc (char
- static int prof_cpu_mask_write_proc (struct file *file, const char __user *buffer,
- unsigned long count, void *data)
- {
-- unsigned long *mask = (unsigned long *) data, full_count = count, err;
-- unsigned long new_value;
-+ cpumask_t *mask = (cpumask_t *)data;
-+ unsigned long full_count = count, err;
-+ cpumask_t new_value;
-
- err = parse_hex_value(buffer, count, &new_value);
- if (err)
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/arch/i386/kernel/kgdb_stub.c 2003-07-19 17:04:14.000000000 -0700
-@@ -0,0 +1,2215 @@
-+/*
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License as published by the
-+ * Free Software Foundation; either version 2, or (at your option) any
-+ * later version.
-+ *
-+ * This program is distributed in the hope that it will be useful, but
-+ * WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * General Public License for more details.
-+ *
-+ */
-+
-+/*
-+ * Copyright (c) 2000 VERITAS Software Corporation.
-+ *
-+ */
-+/****************************************************************************
-+ * Header: remcom.c,v 1.34 91/03/09 12:29:49 glenne Exp $
-+ *
-+ * Module name: remcom.c $
-+ * Revision: 1.34 $
-+ * Date: 91/03/09 12:29:49 $
-+ * Contributor: Lake Stevens Instrument Division$
-+ *
-+ * Description: low level support for gdb debugger. $
-+ *
-+ * Considerations: only works on target hardware $
-+ *
-+ * Written by: Glenn Engel $
-+ * Updated by: David Grothe <dave@gcom.com>
-+ * ModuleState: Experimental $
-+ *
-+ * NOTES: See Below $
-+ *
-+ * Modified for 386 by Jim Kingdon, Cygnus Support.
-+ * Compatibility with 2.1.xx kernel by David Grothe <dave@gcom.com>
-+ *
-+ * Changes to allow auto initilization. All that is needed is that it
-+ * be linked with the kernel and a break point (int 3) be executed.
-+ * The header file <asm/kgdb.h> defines BREAKPOINT to allow one to do
-+ * this. It should also be possible, once the interrupt system is up, to
-+ * call putDebugChar("+"). Once this is done, the remote debugger should
-+ * get our attention by sending a ^C in a packet. George Anzinger
-+ * <george@mvista.com>
-+ * Integrated into 2.2.5 kernel by Tigran Aivazian <tigran@sco.com>
-+ * Added thread support, support for multiple processors,
-+ * support for ia-32(x86) hardware debugging.
-+ * Amit S. Kale ( akale@veritas.com )
-+ *
-+ *
-+ * To enable debugger support, two things need to happen. One, a
-+ * call to set_debug_traps() is necessary in order to allow any breakpoints
-+ * or error conditions to be properly intercepted and reported to gdb.
-+ * Two, a breakpoint needs to be generated to begin communication. This
-+ * is most easily accomplished by a call to breakpoint(). Breakpoint()
-+ * simulates a breakpoint by executing an int 3.
-+ *
-+ *************
-+ *
-+ * The following gdb commands are supported:
-+ *
-+ * command function Return value
-+ *
-+ * g return the value of the CPU registers hex data or ENN
-+ * G set the value of the CPU registers OK or ENN
-+ *
-+ * mAA..AA,LLLL Read LLLL bytes at address AA..AA hex data or ENN
-+ * MAA..AA,LLLL: Write LLLL bytes at address AA.AA OK or ENN
-+ *
-+ * c Resume at current address SNN ( signal NN)
-+ * cAA..AA Continue at address AA..AA SNN
-+ *
-+ * s Step one instruction SNN
-+ * sAA..AA Step one instruction from AA..AA SNN
-+ *
-+ * k kill
-+ *
-+ * ? What was the last sigval ? SNN (signal NN)
-+ *
-+ * All commands and responses are sent with a packet which includes a
-+ * checksum. A packet consists of
-+ *
-+ * $<packet info>#<checksum>.
-+ *
-+ * where
-+ * <packet info> :: <characters representing the command or response>
-+ * <checksum> :: < two hex digits computed as modulo 256 sum of <packetinfo>>
-+ *
-+ * When a packet is received, it is first acknowledged with either '+' or '-'.
-+ * '+' indicates a successful transfer. '-' indicates a failed transfer.
-+ *
-+ * Example:
-+ *
-+ * Host: Reply:
-+ * $m0,10#2a +$00010203040506070809101112131415#42
-+ *
-+ ****************************************************************************/
-+#define KGDB_VERSION "<20030530.0126.22>"
-+#include <linux/config.h>
-+#include <linux/types.h>
-+#include <asm/string.h> /* for strcpy */
-+#include <linux/kernel.h>
-+#include <linux/sched.h>
-+#include <asm/vm86.h>
-+#include <asm/system.h>
-+#include <asm/ptrace.h> /* for linux pt_regs struct */
-+#include <asm/kgdb_local.h>
-+#include <linux/list.h>
-+#include <asm/atomic.h>
-+#include <asm/processor.h>
-+#include <linux/irq.h>
-+#include <asm/desc.h>
-+
-+/************************************************************************
-+ *
-+ * external low-level support routines
-+ */
-+typedef void (*Function) (void); /* pointer to a function */
-+
-+/* Thread reference */
-+typedef unsigned char threadref[8];
-+
-+extern void putDebugChar(int); /* write a single character */
-+extern int getDebugChar(void); /* read and return a single char */
-+
-+/************************************************************************/
-+/* BUFMAX defines the maximum number of characters in inbound/outbound buffers*/
-+/* at least NUMREGBYTES*2 are needed for register packets */
-+/* Longer buffer is needed to list all threads */
-+#define BUFMAX 1024
-+
-+char *kgdb_version = KGDB_VERSION;
-+
-+/* debug > 0 prints ill-formed commands in valid packets & checksum errors */
-+int debug_regs = 0; /* set to non-zero to print registers */
-+
-+/* filled in by an external module */
-+char *gdb_module_offsets;
-+
-+static const char hexchars[] = "0123456789abcdef";
-+
-+/* Number of bytes of registers. */
-+#define NUMREGBYTES 64
-+/*
-+ * Note that this register image is in a different order than
-+ * the register image that Linux produces at interrupt time.
-+ *
-+ * Linux's register image is defined by struct pt_regs in ptrace.h.
-+ * Just why GDB uses a different order is a historical mystery.
-+ */
-+enum regnames { _EAX, /* 0 */
-+ _ECX, /* 1 */
-+ _EDX, /* 2 */
-+ _EBX, /* 3 */
-+ _ESP, /* 4 */
-+ _EBP, /* 5 */
-+ _ESI, /* 6 */
-+ _EDI, /* 7 */
-+ _PC /* 8 also known as eip */ ,
-+ _PS /* 9 also known as eflags */ ,
-+ _CS, /* 10 */
-+ _SS, /* 11 */
-+ _DS, /* 12 */
-+ _ES, /* 13 */
-+ _FS, /* 14 */
-+ _GS /* 15 */
-+};
-+
-+/*************************** ASSEMBLY CODE MACROS *************************/
-+/*
-+ * Put the error code here just in case the user cares.
-+ * Likewise, the vector number here (since GDB only gets the signal
-+ * number through the usual means, and that's not very specific).
-+ * The called_from is the return address so he can tell how we entered kgdb.
-+ * This will allow him to seperate out the various possible entries.
-+ */
-+#define REMOTE_DEBUG 0 /* set != to turn on printing (also available in info) */
-+
-+#define PID_MAX PID_MAX_DEFAULT
-+
-+#ifdef CONFIG_SMP
-+void smp_send_nmi_allbutself(void);
-+#define IF_SMP(x) x
-+#undef MAX_NO_CPUS
-+#ifndef CONFIG_NO_KGDB_CPUS
-+#define CONFIG_NO_KGDB_CPUS 2
-+#endif
-+#if CONFIG_NO_KGDB_CPUS > NR_CPUS
-+#define MAX_NO_CPUS NR_CPUS
-+#else
-+#define MAX_NO_CPUS CONFIG_NO_KGDB_CPUS
-+#endif
-+#define hold_init hold_on_sstep: 1,
-+#define MAX_CPU_MASK (unsigned long)((1LL << MAX_NO_CPUS) - 1LL)
-+#define NUM_CPUS num_online_cpus()
-+#else
-+#define IF_SMP(x)
-+#define hold_init
-+#undef MAX_NO_CPUS
-+#define MAX_NO_CPUS 1
-+#define NUM_CPUS 1
-+#endif
-+#define NOCPU (struct task_struct *)0xbad1fbad
-+/* *INDENT-OFF* */
-+struct kgdb_info {
-+ int used_malloc;
-+ void *called_from;
-+ long long entry_tsc;
-+ int errcode;
-+ int vector;
-+ int print_debug_info;
-+#ifdef CONFIG_SMP
-+ int hold_on_sstep;
-+ struct {
-+ volatile struct task_struct *task;
-+ int pid;
-+ int hold;
-+ struct pt_regs *regs;
-+ } cpus_waiting[MAX_NO_CPUS];
-+#endif
-+} kgdb_info = {hold_init print_debug_info:REMOTE_DEBUG, vector:-1};
-+
-+/* *INDENT-ON* */
-+
-+#define used_m kgdb_info.used_malloc
-+/*
-+ * This is little area we set aside to contain the stack we
-+ * need to build to allow gdb to call functions. We use one
-+ * per cpu to avoid locking issues. We will do all this work
-+ * with interrupts off so that should take care of the protection
-+ * issues.
-+ */
-+#define LOOKASIDE_SIZE 200 /* should be more than enough */
-+#define MALLOC_MAX 200 /* Max malloc size */
-+struct {
-+ unsigned int esp;
-+ int array[LOOKASIDE_SIZE];
-+} fn_call_lookaside[MAX_NO_CPUS];
-+
-+static int trap_cpu;
-+static unsigned int OLD_esp;
-+
-+#define END_OF_LOOKASIDE &fn_call_lookaside[trap_cpu].array[LOOKASIDE_SIZE]
-+#define IF_BIT 0x200
-+#define TF_BIT 0x100
-+
-+#define MALLOC_ROUND 8-1
-+
-+static char malloc_array[MALLOC_MAX];
-+IF_SMP(static void to_gdb(const char *mess));
-+void *
-+malloc(int size)
-+{
-+
-+ if (size <= (MALLOC_MAX - used_m)) {
-+ int old_used = used_m;
-+ used_m += ((size + MALLOC_ROUND) & (~MALLOC_ROUND));
-+ return &malloc_array[old_used];
-+ } else {
-+ return NULL;
-+ }
-+}
-+
-+/*
-+ * Gdb calls functions by pushing agruments, including a return address
-+ * on the stack and the adjusting EIP to point to the function. The
-+ * whole assumption in GDB is that we are on a different stack than the
-+ * one the "user" i.e. code that hit the break point, is on. This, of
-+ * course is not true in the kernel. Thus various dodges are needed to
-+ * do the call without directly messing with EIP (which we can not change
-+ * as it is just a location and not a register. To adjust it would then
-+ * require that we move every thing below EIP up or down as needed. This
-+ * will not work as we may well have stack relative pointer on the stack
-+ * (such as the pointer to regs, for example).
-+
-+ * So here is what we do:
-+ * We detect gdb attempting to store into the stack area and instead, store
-+ * into the fn_call_lookaside.array at the same relative location as if it
-+ * were the area ESP pointed at. We also trap ESP modifications
-+ * and uses these to adjust fn_call_lookaside.esp. On entry
-+ * fn_call_lookaside.esp will be set to point at the last entry in
-+ * fn_call_lookaside.array. This allows us to check if it has changed, and
-+ * if so, on exit, we add the registers we will use to do the move and a
-+ * trap/ interrupt return exit sequence. We then adjust the eflags in the
-+ * regs array (remember we now have a copy in the fn_call_lookaside.array) to
-+ * kill the interrupt bit, AND we change EIP to point at our set up stub.
-+ * As part of the register set up we preset the registers to point at the
-+ * begining and end of the fn_call_lookaside.array, so all the stub needs to
-+ * do is move words from the array to the stack until ESP= the desired value
-+ * then do the rti. This will then transfer to the desired function with
-+ * all the correct registers. Nifty huh?
-+ */
-+extern asmlinkage void fn_call_stub(void);
-+extern asmlinkage void fn_rtn_stub(void);
-+/* *INDENT-OFF* */
-+__asm__("fn_rtn_stub:\n\t"
-+ "movl %eax,%esp\n\t"
-+ "fn_call_stub:\n\t"
-+ "1:\n\t"
-+ "addl $-4,%ebx\n\t"
-+ "movl (%ebx), %eax\n\t"
-+ "pushl %eax\n\t"
-+ "cmpl %esp,%ecx\n\t"
-+ "jne 1b\n\t"
-+ "popl %eax\n\t"
-+ "popl %ebx\n\t"
-+ "popl %ecx\n\t"
-+ "iret \n\t");
-+/* *INDENT-ON* */
-+#define gdb_i386vector kgdb_info.vector
-+#define gdb_i386errcode kgdb_info.errcode
-+#define waiting_cpus kgdb_info.cpus_waiting
-+#define remote_debug kgdb_info.print_debug_info
-+#define hold_cpu(cpu) kgdb_info.cpus_waiting[cpu].hold
-+/* gdb locks */
-+
-+#ifdef CONFIG_SMP
-+static int in_kgdb_called;
-+static spinlock_t waitlocks[MAX_NO_CPUS] =
-+ {[0 ... MAX_NO_CPUS - 1] = SPIN_LOCK_UNLOCKED };
-+/*
-+ * The following array has the thread pointer of each of the "other"
-+ * cpus. We make it global so it can be seen by gdb.
-+ */
-+volatile int in_kgdb_entry_log[MAX_NO_CPUS];
-+volatile struct pt_regs *in_kgdb_here_log[MAX_NO_CPUS];
-+/*
-+static spinlock_t continuelocks[MAX_NO_CPUS];
-+*/
-+spinlock_t kgdb_spinlock = SPIN_LOCK_UNLOCKED;
-+/* waiters on our spinlock plus us */
-+static atomic_t spinlock_waiters = ATOMIC_INIT(1);
-+static int spinlock_count = 0;
-+static int spinlock_cpu = 0;
-+/*
-+ * Note we use nested spin locks to account for the case where a break
-+ * point is encountered when calling a function by user direction from
-+ * kgdb. Also there is the memory exception recursion to account for.
-+ * Well, yes, but this lets other cpus thru too. Lets add a
-+ * cpu id to the lock.
-+ */
-+#define KGDB_SPIN_LOCK(x) if( spinlock_count == 0 || \
-+ spinlock_cpu != smp_processor_id()){\
-+ atomic_inc(&spinlock_waiters); \
-+ while (! spin_trylock(x)) {\
-+ in_kgdb(®s);\
-+ }\
-+ atomic_dec(&spinlock_waiters); \
-+ spinlock_count = 1; \
-+ spinlock_cpu = smp_processor_id(); \
-+ }else{ \
-+ spinlock_count++; \
-+ }
-+#define KGDB_SPIN_UNLOCK(x) if( --spinlock_count == 0) spin_unlock(x)
-+#else
-+unsigned kgdb_spinlock = 0;
-+#define KGDB_SPIN_LOCK(x) --*x
-+#define KGDB_SPIN_UNLOCK(x) ++*x
-+#endif
-+
-+int
-+hex(char ch)
-+{
-+ if ((ch >= 'a') && (ch <= 'f'))
-+ return (ch - 'a' + 10);
-+ if ((ch >= '0') && (ch <= '9'))
-+ return (ch - '0');
-+ if ((ch >= 'A') && (ch <= 'F'))
-+ return (ch - 'A' + 10);
-+ return (-1);
-+}
-+
-+/* scan for the sequence $<data>#<checksum> */
-+void
-+getpacket(char *buffer)
-+{
-+ unsigned char checksum;
-+ unsigned char xmitcsum;
-+ int i;
-+ int count;
-+ char ch;
-+
-+ do {
-+ /* wait around for the start character, ignore all other characters */
-+ while ((ch = (getDebugChar() & 0x7f)) != '$') ;
-+ checksum = 0;
-+ xmitcsum = -1;
-+
-+ count = 0;
-+
-+ /* now, read until a # or end of buffer is found */
-+ while (count < BUFMAX) {
-+ ch = getDebugChar() & 0x7f;
-+ if (ch == '#')
-+ break;
-+ checksum = checksum + ch;
-+ buffer[count] = ch;
-+ count = count + 1;
-+ }
-+ buffer[count] = 0;
-+
-+ if (ch == '#') {
-+ xmitcsum = hex(getDebugChar() & 0x7f) << 4;
-+ xmitcsum += hex(getDebugChar() & 0x7f);
-+ if ((remote_debug) && (checksum != xmitcsum)) {
-+ printk
-+ ("bad checksum. My count = 0x%x, sent=0x%x. buf=%s\n",
-+ checksum, xmitcsum, buffer);
-+ }
-+
-+ if (checksum != xmitcsum)
-+ putDebugChar('-'); /* failed checksum */
-+ else {
-+ putDebugChar('+'); /* successful transfer */
-+ /* if a sequence char is present, reply the sequence ID */
-+ if (buffer[2] == ':') {
-+ putDebugChar(buffer[0]);
-+ putDebugChar(buffer[1]);
-+ /* remove sequence chars from buffer */
-+ count = strlen(buffer);
-+ for (i = 3; i <= count; i++)
-+ buffer[i - 3] = buffer[i];
-+ }
-+ }
-+ }
-+ } while (checksum != xmitcsum);
-+
-+ if (remote_debug)
-+ printk("R:%s\n", buffer);
-+}
-+
-+/* send the packet in buffer. */
-+
-+void
-+putpacket(char *buffer)
-+{
-+ unsigned char checksum;
-+ int count;
-+ char ch;
-+
-+ /* $<packet info>#<checksum>. */
-+ do {
-+ if (remote_debug)
-+ printk("T:%s\n", buffer);
-+ putDebugChar('$');
-+ checksum = 0;
-+ count = 0;
-+
-+ while ((ch = buffer[count])) {
-+ putDebugChar(ch);
-+ checksum += ch;
-+ count += 1;
-+ }
-+
-+ putDebugChar('#');
-+ putDebugChar(hexchars[checksum >> 4]);
-+ putDebugChar(hexchars[checksum % 16]);
-+
-+ } while ((getDebugChar() & 0x7f) != '+');
-+
-+}
-+
-+static char remcomInBuffer[BUFMAX];
-+static char remcomOutBuffer[BUFMAX];
-+static short error;
-+
-+void
-+debug_error(char *format, char *parm)
-+{
-+ if (remote_debug)
-+ printk(format, parm);
-+}
-+
-+static void
-+print_regs(struct pt_regs *regs)
-+{
-+ printk("EAX=%08lx ", regs->eax);
-+ printk("EBX=%08lx ", regs->ebx);
-+ printk("ECX=%08lx ", regs->ecx);
-+ printk("EDX=%08lx ", regs->edx);
-+ printk("\n");
-+ printk("ESI=%08lx ", regs->esi);
-+ printk("EDI=%08lx ", regs->edi);
-+ printk("EBP=%08lx ", regs->ebp);
-+ printk("ESP=%08lx ", (long) ®s->esp);
-+ printk("\n");
-+ printk(" DS=%08x ", regs->xds);
-+ printk(" ES=%08x ", regs->xes);
-+ printk(" SS=%08x ", __KERNEL_DS);
-+ printk(" FL=%08lx ", regs->eflags);
-+ printk("\n");
-+ printk(" CS=%08x ", regs->xcs);
-+ printk(" IP=%08lx ", regs->eip);
-+#if 0
-+ printk(" FS=%08x ", regs->fs);
-+ printk(" GS=%08x ", regs->gs);
-+#endif
-+ printk("\n");
-+
-+} /* print_regs */
-+
-+#define NEW_esp fn_call_lookaside[trap_cpu].esp
-+
-+static void
-+regs_to_gdb_regs(int *gdb_regs, struct pt_regs *regs)
-+{
-+ gdb_regs[_EAX] = regs->eax;
-+ gdb_regs[_EBX] = regs->ebx;
-+ gdb_regs[_ECX] = regs->ecx;
-+ gdb_regs[_EDX] = regs->edx;
-+ gdb_regs[_ESI] = regs->esi;
-+ gdb_regs[_EDI] = regs->edi;
-+ gdb_regs[_EBP] = regs->ebp;
-+ gdb_regs[_DS] = regs->xds;
-+ gdb_regs[_ES] = regs->xes;
-+ gdb_regs[_PS] = regs->eflags;
-+ gdb_regs[_CS] = regs->xcs;
-+ gdb_regs[_PC] = regs->eip;
-+ /* Note, as we are a debugging the kernel, we will always
-+ * trap in kernel code, this means no priviledge change,
-+ * and so the pt_regs structure is not completely valid. In a non
-+ * privilege change trap, only EFLAGS, CS and EIP are put on the stack,
-+ * SS and ESP are not stacked, this means that the last 2 elements of
-+ * pt_regs is not valid (they would normally refer to the user stack)
-+ * also, using regs+1 is no good because you end up will a value that is
-+ * 2 longs (8) too high. This used to cause stepping over functions
-+ * to fail, so my fix is to use the address of regs->esp, which
-+ * should point at the end of the stack frame. Note I have ignored
-+ * completely exceptions that cause an error code to be stacked, such
-+ * as double fault. Stuart Hughes, Zentropix.
-+ * original code: gdb_regs[_ESP] = (int) (regs + 1) ;
-+
-+ * this is now done on entry and moved to OLD_esp (as well as NEW_esp).
-+ */
-+ gdb_regs[_ESP] = NEW_esp;
-+ gdb_regs[_SS] = __KERNEL_DS;
-+ gdb_regs[_FS] = 0xFFFF;
-+ gdb_regs[_GS] = 0xFFFF;
-+} /* regs_to_gdb_regs */
-+
-+static void
-+gdb_regs_to_regs(int *gdb_regs, struct pt_regs *regs)
-+{
-+ regs->eax = gdb_regs[_EAX];
-+ regs->ebx = gdb_regs[_EBX];
-+ regs->ecx = gdb_regs[_ECX];
-+ regs->edx = gdb_regs[_EDX];
-+ regs->esi = gdb_regs[_ESI];
-+ regs->edi = gdb_regs[_EDI];
-+ regs->ebp = gdb_regs[_EBP];
-+ regs->xds = gdb_regs[_DS];
-+ regs->xes = gdb_regs[_ES];
-+ regs->eflags = gdb_regs[_PS];
-+ regs->xcs = gdb_regs[_CS];
-+ regs->eip = gdb_regs[_PC];
-+ NEW_esp = gdb_regs[_ESP]; /* keep the value */
-+#if 0 /* can't change these */
-+ regs->esp = gdb_regs[_ESP];
-+ regs->xss = gdb_regs[_SS];
-+ regs->fs = gdb_regs[_FS];
-+ regs->gs = gdb_regs[_GS];
-+#endif
-+
-+} /* gdb_regs_to_regs */
-+extern void scheduling_functions_start_here(void);
-+extern void scheduling_functions_end_here(void);
-+#define first_sched ((unsigned long) scheduling_functions_start_here)
-+#define last_sched ((unsigned long) scheduling_functions_end_here)
-+
-+int thread_list = 0;
-+
-+void
-+get_gdb_regs(struct task_struct *p, struct pt_regs *regs, int *gdb_regs)
-+{
-+ unsigned long stack_page;
-+ int count = 0;
-+ IF_SMP(int i);
-+ if (!p || p == current) {
-+ regs_to_gdb_regs(gdb_regs, regs);
-+ return;
-+ }
-+#ifdef CONFIG_SMP
-+ for (i = 0; i < MAX_NO_CPUS; i++) {
-+ if (p == kgdb_info.cpus_waiting[i].task) {
-+ regs_to_gdb_regs(gdb_regs,
-+ kgdb_info.cpus_waiting[i].regs);
-+ gdb_regs[_ESP] =
-+ (int) &kgdb_info.cpus_waiting[i].regs->esp;
-+
-+ return;
-+ }
-+ }
-+#endif
-+ memset(gdb_regs, 0, NUMREGBYTES);
-+ gdb_regs[_ESP] = p->thread.esp;
-+ gdb_regs[_PC] = p->thread.eip;
-+ gdb_regs[_EBP] = *(int *) gdb_regs[_ESP];
-+ gdb_regs[_EDI] = *(int *) (gdb_regs[_ESP] + 4);
-+ gdb_regs[_ESI] = *(int *) (gdb_regs[_ESP] + 8);
-+
-+/*
-+ * This code is to give a more informative notion of where a process
-+ * is waiting. It is used only when the user asks for a thread info
-+ * list. If he then switches to the thread, s/he will find the task
-+ * is in schedule, but a back trace should show the same info we come
-+ * up with. This code was shamelessly purloined from process.c. It was
-+ * then enhanced to provide more registers than simply the program
-+ * counter.
-+ */
-+
-+ if (!thread_list) {
-+ return;
-+ }
-+
-+ if (p->state == TASK_RUNNING)
-+ return;
-+ stack_page = (unsigned long) p->thread_info;
-+ if (gdb_regs[_ESP] < stack_page || gdb_regs[_ESP] > 8188 + stack_page)
-+ return;
-+ /* include/asm-i386/system.h:switch_to() pushes ebp last. */
-+ do {
-+ if (gdb_regs[_EBP] < stack_page ||
-+ gdb_regs[_EBP] > 8184 + stack_page)
-+ return;
-+ gdb_regs[_PC] = *(unsigned long *) (gdb_regs[_EBP] + 4);
-+ gdb_regs[_ESP] = gdb_regs[_EBP] + 8;
-+ gdb_regs[_EBP] = *(unsigned long *) gdb_regs[_EBP];
-+ if (gdb_regs[_PC] < first_sched || gdb_regs[_PC] >= last_sched)
-+ return;
-+ } while (count++ < 16);
-+ return;
-+}
-+
-+/* Indicate to caller of mem2hex or hex2mem that there has been an
-+ error. */
-+static volatile int mem_err = 0;
-+static volatile int mem_err_expected = 0;
-+static volatile int mem_err_cnt = 0;
-+static int garbage_loc = -1;
-+
-+int
-+get_char(char *addr)
-+{
-+ return *addr;
-+}
-+
-+void
-+set_char(char *addr, int val, int may_fault)
-+{
-+ /*
-+ * This code traps references to the area mapped to the kernel
-+ * stack as given by the regs and, instead, stores to the
-+ * fn_call_lookaside[cpu].array
-+ */
-+ if (may_fault &&
-+ (unsigned int) addr < OLD_esp &&
-+ ((unsigned int) addr > (OLD_esp - (unsigned int) LOOKASIDE_SIZE))) {
-+ addr = (char *) END_OF_LOOKASIDE - ((char *) OLD_esp - addr);
-+ }
-+ *addr = val;
-+}
-+
-+/* convert the memory pointed to by mem into hex, placing result in buf */
-+/* return a pointer to the last char put in buf (null) */
-+/* If MAY_FAULT is non-zero, then we should set mem_err in response to
-+ a fault; if zero treat a fault like any other fault in the stub. */
-+char *
-+mem2hex(char *mem, char *buf, int count, int may_fault)
-+{
-+ int i;
-+ unsigned char ch;
-+
-+ if (may_fault) {
-+ mem_err_expected = 1;
-+ mem_err = 0;
-+ }
-+ for (i = 0; i < count; i++) {
-+ /* printk("%lx = ", mem) ; */
-+
-+ ch = get_char(mem++);
-+
-+ /* printk("%02x\n", ch & 0xFF) ; */
-+ if (may_fault && mem_err) {
-+ if (remote_debug)
-+ printk("Mem fault fetching from addr %lx\n",
-+ (long) (mem - 1));
-+ *buf = 0; /* truncate buffer */
-+ return (buf);
-+ }
-+ *buf++ = hexchars[ch >> 4];
-+ *buf++ = hexchars[ch % 16];
-+ }
-+ *buf = 0;
-+ if (may_fault)
-+ mem_err_expected = 0;
-+ return (buf);
-+}
-+
-+/* convert the hex array pointed to by buf into binary to be placed in mem */
-+/* return a pointer to the character AFTER the last byte written */
-+/* NOTE: We use the may fault flag to also indicate if the write is to
-+ * the registers (0) or "other" memory (!=0)
-+ */
-+char *
-+hex2mem(char *buf, char *mem, int count, int may_fault)
-+{
-+ int i;
-+ unsigned char ch;
-+
-+ if (may_fault) {
-+ mem_err_expected = 1;
-+ mem_err = 0;
-+ }
-+ for (i = 0; i < count; i++) {
-+ ch = hex(*buf++) << 4;
-+ ch = ch + hex(*buf++);
-+ set_char(mem++, ch, may_fault);
-+
-+ if (may_fault && mem_err) {
-+ if (remote_debug)
-+ printk("Mem fault storing to addr %lx\n",
-+ (long) (mem - 1));
-+ return (mem);
-+ }
-+ }
-+ if (may_fault)
-+ mem_err_expected = 0;
-+ return (mem);
-+}
-+
-+/**********************************************/
-+/* WHILE WE FIND NICE HEX CHARS, BUILD AN INT */
-+/* RETURN NUMBER OF CHARS PROCESSED */
-+/**********************************************/
-+int
-+hexToInt(char **ptr, int *intValue)
-+{
-+ int numChars = 0;
-+ int hexValue;
-+
-+ *intValue = 0;
-+
-+ while (**ptr) {
-+ hexValue = hex(**ptr);
-+ if (hexValue >= 0) {
-+ *intValue = (*intValue << 4) | hexValue;
-+ numChars++;
-+ } else
-+ break;
-+
-+ (*ptr)++;
-+ }
-+
-+ return (numChars);
-+}
-+
-+#define stubhex(h) hex(h)
-+
-+static int
-+stub_unpack_int(char *buff, int fieldlength)
-+{
-+ int nibble;
-+ int retval = 0;
-+
-+ while (fieldlength) {
-+ nibble = stubhex(*buff++);
-+ retval |= nibble;
-+ fieldlength--;
-+ if (fieldlength)
-+ retval = retval << 4;
-+ }
-+ return retval;
-+}
-+
-+static char *
-+pack_hex_byte(char *pkt, int byte)
-+{
-+ *pkt++ = hexchars[(byte >> 4) & 0xf];
-+ *pkt++ = hexchars[(byte & 0xf)];
-+ return pkt;
-+}
-+
-+#define BUF_THREAD_ID_SIZE 16
-+
-+static char *
-+pack_threadid(char *pkt, threadref * id)
-+{
-+ char *limit;
-+ unsigned char *altid;
-+
-+ altid = (unsigned char *) id;
-+ limit = pkt + BUF_THREAD_ID_SIZE;
-+ while (pkt < limit)
-+ pkt = pack_hex_byte(pkt, *altid++);
-+ return pkt;
-+}
-+
-+static char *
-+unpack_byte(char *buf, int *value)
-+{
-+ *value = stub_unpack_int(buf, 2);
-+ return buf + 2;
-+}
-+
-+static char *
-+unpack_threadid(char *inbuf, threadref * id)
-+{
-+ char *altref;
-+ char *limit = inbuf + BUF_THREAD_ID_SIZE;
-+ int x, y;
-+
-+ altref = (char *) id;
-+
-+ while (inbuf < limit) {
-+ x = stubhex(*inbuf++);
-+ y = stubhex(*inbuf++);
-+ *altref++ = (x << 4) | y;
-+ }
-+ return inbuf;
-+}
-+
-+void
-+int_to_threadref(threadref * id, int value)
-+{
-+ unsigned char *scan;
-+
-+ scan = (unsigned char *) id;
-+ {
-+ int i = 4;
-+ while (i--)
-+ *scan++ = 0;
-+ }
-+ *scan++ = (value >> 24) & 0xff;
-+ *scan++ = (value >> 16) & 0xff;
-+ *scan++ = (value >> 8) & 0xff;
-+ *scan++ = (value & 0xff);
-+}
-+
-+static int
-+threadref_to_int(threadref * ref)
-+{
-+ int i, value = 0;
-+ unsigned char *scan;
-+
-+ scan = (char *) ref;
-+ scan += 4;
-+ i = 4;
-+ while (i-- > 0)
-+ value = (value << 8) | ((*scan++) & 0xff);
-+ return value;
-+}
-+
-+#if 1 /* this is a hold over from 2.4 where O(1) was "sometimes" */
-+extern struct task_struct *kgdb_get_idle(int cpu);
-+#define idle_task(cpu) kgdb_get_idle(cpu)
-+#else
-+#define idle_task(cpu) init_tasks[cpu]
-+#endif
-+
-+struct task_struct *
-+getthread(int pid)
-+{
-+ struct task_struct *thread;
-+ if (pid >= PID_MAX && pid <= (PID_MAX + MAX_NO_CPUS)) {
-+
-+ return idle_task(pid - PID_MAX);
-+ } else {
-+ /*
-+ * find_task_by_pid is relatively safe all the time
-+ * Other pid functions require lock downs which imply
-+ * that we may be interrupting them (as we get here
-+ * in the middle of most any lock down)
-+ */
-+ thread = find_task_by_pid(pid);
-+ if (thread) {
-+ return thread;
-+ }
-+ }
-+ return NULL;
-+}
-+/* *INDENT-OFF* */
-+struct hw_breakpoint {
-+ unsigned enabled;
-+ unsigned type;
-+ unsigned len;
-+ unsigned addr;
-+} breakinfo[4] = { {enabled:0},
-+ {enabled:0},
-+ {enabled:0},
-+ {enabled:0}};
-+/* *INDENT-ON* */
-+unsigned hw_breakpoint_status;
-+void
-+correct_hw_break(void)
-+{
-+ int breakno;
-+ int correctit;
-+ int breakbit;
-+ unsigned dr7;
-+
-+ asm volatile ("movl %%db7, %0\n":"=r" (dr7)
-+ :);
-+ /* *INDENT-OFF* */
-+ do {
-+ unsigned addr0, addr1, addr2, addr3;
-+ asm volatile ("movl %%db0, %0\n"
-+ "movl %%db1, %1\n"
-+ "movl %%db2, %2\n"
-+ "movl %%db3, %3\n"
-+ :"=r" (addr0), "=r"(addr1),
-+ "=r"(addr2), "=r"(addr3)
-+ :);
-+ } while (0);
-+ /* *INDENT-ON* */
-+ correctit = 0;
-+ for (breakno = 0; breakno < 3; breakno++) {
-+ breakbit = 2 << (breakno << 1);
-+ if (!(dr7 & breakbit) && breakinfo[breakno].enabled) {
-+ correctit = 1;
-+ dr7 |= breakbit;
-+ dr7 &= ~(0xf0000 << (breakno << 2));
-+ dr7 |= (((breakinfo[breakno].len << 2) |
-+ breakinfo[breakno].type) << 16) <<
-+ (breakno << 2);
-+ switch (breakno) {
-+ case 0:
-+ asm volatile ("movl %0, %%dr0\n"::"r"
-+ (breakinfo[breakno].addr));
-+ break;
-+
-+ case 1:
-+ asm volatile ("movl %0, %%dr1\n"::"r"
-+ (breakinfo[breakno].addr));
-+ break;
-+
-+ case 2:
-+ asm volatile ("movl %0, %%dr2\n"::"r"
-+ (breakinfo[breakno].addr));
-+ break;
-+
-+ case 3:
-+ asm volatile ("movl %0, %%dr3\n"::"r"
-+ (breakinfo[breakno].addr));
-+ break;
-+ }
-+ } else if ((dr7 & breakbit) && !breakinfo[breakno].enabled) {
-+ correctit = 1;
-+ dr7 &= ~breakbit;
-+ dr7 &= ~(0xf0000 << (breakno << 2));
-+ }
-+ }
-+ if (correctit) {
-+ asm volatile ("movl %0, %%db7\n"::"r" (dr7));
-+ }
-+}
-+
-+int
-+remove_hw_break(unsigned breakno)
-+{
-+ if (!breakinfo[breakno].enabled) {
-+ return -1;
-+ }
-+ breakinfo[breakno].enabled = 0;
-+ return 0;
-+}
-+
-+int
-+set_hw_break(unsigned breakno, unsigned type, unsigned len, unsigned addr)
-+{
-+ if (breakinfo[breakno].enabled) {
-+ return -1;
-+ }
-+ breakinfo[breakno].enabled = 1;
-+ breakinfo[breakno].type = type;
-+ breakinfo[breakno].len = len;
-+ breakinfo[breakno].addr = addr;
-+ return 0;
-+}
-+
-+#ifdef CONFIG_SMP
-+static int in_kgdb_console = 0;
-+
-+int
-+in_kgdb(struct pt_regs *regs)
-+{
-+ unsigned flags;
-+ int cpu = smp_processor_id();
-+ in_kgdb_called = 1;
-+ if (!spin_is_locked(&kgdb_spinlock)) {
-+ if (in_kgdb_here_log[cpu] || /* we are holding this cpu */
-+ in_kgdb_console) { /* or we are doing slow i/o */
-+ return 1;
-+ }
-+ return 0;
-+ }
-+
-+ /* As I see it the only reason not to let all cpus spin on
-+ * the same spin_lock is to allow selected ones to proceed.
-+ * This would be a good thing, so we leave it this way.
-+ * Maybe someday.... Done !
-+
-+ * in_kgdb() is called from an NMI so we don't pretend
-+ * to have any resources, like printk() for example.
-+ */
-+
-+ kgdb_local_irq_save(flags); /* only local here, to avoid hanging */
-+ /*
-+ * log arival of this cpu
-+ * The NMI keeps on ticking. Protect against recurring more
-+ * than once, and ignor the cpu that has the kgdb lock
-+ */
-+ in_kgdb_entry_log[cpu]++;
-+ in_kgdb_here_log[cpu] = regs;
-+ if (cpu == spinlock_cpu || waiting_cpus[cpu].task) {
-+ goto exit_in_kgdb;
-+ }
-+ /*
-+ * For protection of the initilization of the spin locks by kgdb
-+ * it locks the kgdb spinlock before it gets the wait locks set
-+ * up. We wait here for the wait lock to be taken. If the
-+ * kgdb lock goes away first?? Well, it could be a slow exit
-+ * sequence where the wait lock is removed prior to the kgdb lock
-+ * so if kgdb gets unlocked, we just exit.
-+ */
-+ while (spin_is_locked(&kgdb_spinlock) &&
-+ !spin_is_locked(waitlocks + cpu)) ;
-+ if (!spin_is_locked(&kgdb_spinlock)) {
-+ goto exit_in_kgdb;
-+ }
-+ waiting_cpus[cpu].task = current;
-+ waiting_cpus[cpu].pid = (current->pid) ? : (PID_MAX + cpu);
-+ waiting_cpus[cpu].regs = regs;
-+
-+ spin_unlock_wait(waitlocks + cpu);
-+ /*
-+ * log departure of this cpu
-+ */
-+ waiting_cpus[cpu].task = 0;
-+ waiting_cpus[cpu].pid = 0;
-+ waiting_cpus[cpu].regs = 0;
-+ correct_hw_break();
-+ exit_in_kgdb:
-+ in_kgdb_here_log[cpu] = 0;
-+ kgdb_local_irq_restore(flags);
-+ return 1;
-+ /*
-+ spin_unlock(continuelocks + smp_processor_id());
-+ */
-+}
-+
-+void
-+smp__in_kgdb(struct pt_regs regs)
-+{
-+ ack_APIC_irq();
-+ in_kgdb(®s);
-+}
-+#else
-+int
-+in_kgdb(struct pt_regs *regs)
-+{
-+ return (kgdb_spinlock);
-+}
-+#endif
-+
-+void
-+printexceptioninfo(int exceptionNo, int errorcode, char *buffer)
-+{
-+ unsigned dr6;
-+ int i;
-+ switch (exceptionNo) {
-+ case 1: /* debug exception */
-+ break;
-+ case 3: /* breakpoint */
-+ sprintf(buffer, "Software breakpoint");
-+ return;
-+ default:
-+ sprintf(buffer, "Details not available");
-+ return;
-+ }
-+ asm volatile ("movl %%db6, %0\n":"=r" (dr6)
-+ :);
-+ if (dr6 & 0x4000) {
-+ sprintf(buffer, "Single step");
-+ return;
-+ }
-+ for (i = 0; i < 4; ++i) {
-+ if (dr6 & (1 << i)) {
-+ sprintf(buffer, "Hardware breakpoint %d", i);
-+ return;
-+ }
-+ }
-+ sprintf(buffer, "Unknown trap");
-+ return;
-+}
-+
-+/*
-+ * This function does all command procesing for interfacing to gdb.
-+ *
-+ * NOTE: The INT nn instruction leaves the state of the interrupt
-+ * enable flag UNCHANGED. That means that when this routine
-+ * is entered via a breakpoint (INT 3) instruction from code
-+ * that has interrupts enabled, then interrupts will STILL BE
-+ * enabled when this routine is entered. The first thing that
-+ * we do here is disable interrupts so as to prevent recursive
-+ * entries and bothersome serial interrupts while we are
-+ * trying to run the serial port in polled mode.
-+ *
-+ * For kernel version 2.1.xx the kgdb_cli() actually gets a spin lock so
-+ * it is always necessary to do a restore_flags before returning
-+ * so as to let go of that lock.
-+ */
-+int
-+kgdb_handle_exception(int exceptionVector,
-+ int signo, int err_code, struct pt_regs *linux_regs)
-+{
-+ struct task_struct *usethread = NULL;
-+ struct task_struct *thread_list_start = 0, *thread = NULL;
-+ int addr, length;
-+ int breakno, breaktype;
-+ char *ptr;
-+ int newPC;
-+ threadref thref;
-+ int threadid;
-+ int thread_min = PID_MAX + MAX_NO_CPUS;
-+ int maxthreads;
-+ int nothreads;
-+ unsigned long flags;
-+ int gdb_regs[NUMREGBYTES / 4];
-+ int dr6;
-+ IF_SMP(int entry_state = 0); /* 0, ok, 1, no nmi, 2 sync failed */
-+#define NO_NMI 1
-+#define NO_SYNC 2
-+#define regs (*linux_regs)
-+#define NUMREGS NUMREGBYTES/4
-+ /*
-+ * If the entry is not from the kernel then return to the Linux
-+ * trap handler and let it process the interrupt normally.
-+ */
-+ if ((linux_regs->eflags & VM_MASK) || (3 & linux_regs->xcs)) {
-+ printk("ignoring non-kernel exception\n");
-+ print_regs(®s);
-+ return (0);
-+ }
-+
-+ kgdb_local_irq_save(flags);
-+
-+ /* Get kgdb spinlock */
-+
-+ KGDB_SPIN_LOCK(&kgdb_spinlock);
-+ rdtscll(kgdb_info.entry_tsc);
-+ /*
-+ * We depend on this spinlock and the NMI watch dog to control the
-+ * other cpus. They will arrive at "in_kgdb()" as a result of the
-+ * NMI and will wait there for the following spin locks to be
-+ * released.
-+ */
-+#ifdef CONFIG_SMP
-+
-+#if 0
-+ if (cpu_callout_map & ~MAX_CPU_MASK) {
-+ printk("kgdb : too many cpus, possibly not mapped"
-+ " in contiguous space, change MAX_NO_CPUS"
-+ " in kgdb_stub and make new kernel.\n"
-+ " cpu_callout_map is %lx\n", cpu_callout_map);
-+ goto exit_just_unlock;
-+ }
-+#endif
-+ if (spinlock_count == 1) {
-+ int time, end_time, dum;
-+ int i;
-+ int cpu_logged_in[MAX_NO_CPUS] = {[0 ... MAX_NO_CPUS - 1] = (0)
-+ };
-+ if (remote_debug) {
-+ printk("kgdb : cpu %d entry, syncing others\n",
-+ smp_processor_id());
-+ }
-+ for (i = 0; i < MAX_NO_CPUS; i++) {
-+ /*
-+ * Use trylock as we may already hold the lock if
-+ * we are holding the cpu. Net result is all
-+ * locked.
-+ */
-+ spin_trylock(&waitlocks[i]);
-+ }
-+ for (i = 0; i < MAX_NO_CPUS; i++)
-+ cpu_logged_in[i] = 0;
-+ /*
-+ * Wait for their arrival. We know the watch dog is active if
-+ * in_kgdb() has ever been called, as it is always called on a
-+ * watchdog tick.
-+ */
-+ rdtsc(dum, time);
-+ end_time = time + 2; /* Note: we use the High order bits! */
-+ i = 1;
-+ if (num_online_cpus() > 1) {
-+ int me_in_kgdb = in_kgdb_entry_log[smp_processor_id()];
-+ smp_send_nmi_allbutself();
-+ while (i < num_online_cpus() && time != end_time) {
-+ int j;
-+ for (j = 0; j < MAX_NO_CPUS; j++) {
-+ if (waiting_cpus[j].task &&
-+ !cpu_logged_in[j]) {
-+ i++;
-+ cpu_logged_in[j] = 1;
-+ if (remote_debug) {
-+ printk
-+ ("kgdb : cpu %d arrived at kgdb\n",
-+ j);
-+ }
-+ break;
-+ } else if (!waiting_cpus[j].task &&
-+ !cpu_online(j)) {
-+ waiting_cpus[j].task = NOCPU;
-+ cpu_logged_in[j] = 1;
-+ waiting_cpus[j].hold = 1;
-+ break;
-+ }
-+ if (!waiting_cpus[j].task &&
-+ in_kgdb_here_log[j]) {
-+
-+ int wait = 100000;
-+ while (wait--) ;
-+ if (!waiting_cpus[j].task &&
-+ in_kgdb_here_log[j]) {
-+ printk
-+ ("kgdb : cpu %d stall"
-+ " in in_kgdb\n",
-+ j);
-+ i++;
-+ cpu_logged_in[j] = 1;
-+ waiting_cpus[j].task =
-+ (struct task_struct
-+ *) 1;
-+ }
-+ }
-+ }
-+
-+ if (in_kgdb_entry_log[smp_processor_id()] >
-+ (me_in_kgdb + 10)) {
-+ break;
-+ }
-+
-+ rdtsc(dum, time);
-+ }
-+ if (i < num_online_cpus()) {
-+ printk
-+ ("kgdb : time out, proceeding without sync\n");
-+#if 0
-+ printk("kgdb : Waiting_cpus: 0 = %d, 1 = %d\n",
-+ waiting_cpus[0].task != 0,
-+ waiting_cpus[1].task != 0);
-+ printk("kgdb : Cpu_logged in: 0 = %d, 1 = %d\n",
-+ cpu_logged_in[0], cpu_logged_in[1]);
-+ printk
-+ ("kgdb : in_kgdb_here_log in: 0 = %d, 1 = %d\n",
-+ in_kgdb_here_log[0] != 0,
-+ in_kgdb_here_log[1] != 0);
-+#endif
-+ entry_state = NO_SYNC;
-+ } else {
-+#if 0
-+ int ent =
-+ in_kgdb_entry_log[smp_processor_id()] -
-+ me_in_kgdb;
-+ printk("kgdb : sync after %d entries\n", ent);
-+#endif
-+ }
-+ } else {
-+ if (remote_debug) {
-+ printk
-+ ("kgdb : %d cpus, but watchdog not active\n"
-+ "proceeding without locking down other cpus\n",
-+ num_online_cpus());
-+ entry_state = NO_NMI;
-+ }
-+ }
-+ }
-+#endif
-+
-+ if (remote_debug) {
-+ unsigned long *lp = (unsigned long *) &linux_regs;
-+
-+ printk("handle_exception(exceptionVector=%d, "
-+ "signo=%d, err_code=%d, linux_regs=%p)\n",
-+ exceptionVector, signo, err_code, linux_regs);
-+ if (debug_regs) {
-+ print_regs(®s);
-+ printk("Stk: %8lx %8lx %8lx %8lx"
-+ " %8lx %8lx %8lx %8lx\n",
-+ lp[0], lp[1], lp[2], lp[3],
-+ lp[4], lp[5], lp[6], lp[7]);
-+ printk(" %8lx %8lx %8lx %8lx"
-+ " %8lx %8lx %8lx %8lx\n",
-+ lp[8], lp[9], lp[10], lp[11],
-+ lp[12], lp[13], lp[14], lp[15]);
-+ printk(" %8lx %8lx %8lx %8lx "
-+ "%8lx %8lx %8lx %8lx\n",
-+ lp[16], lp[17], lp[18], lp[19],
-+ lp[20], lp[21], lp[22], lp[23]);
-+ printk(" %8lx %8lx %8lx %8lx "
-+ "%8lx %8lx %8lx %8lx\n",
-+ lp[24], lp[25], lp[26], lp[27],
-+ lp[28], lp[29], lp[30], lp[31]);
-+ }
-+ }
-+
-+ /* Disable hardware debugging while we are in kgdb */
-+ /* Get the debug register status register */
-+/* *INDENT-OFF* */
-+ __asm__("movl %0,%%db7"
-+ : /* no output */
-+ :"r"(0));
-+
-+ asm volatile ("movl %%db6, %0\n"
-+ :"=r" (hw_breakpoint_status)
-+ :);
-+
-+/* *INDENT-ON* */
-+ switch (exceptionVector) {
-+ case 0: /* divide error */
-+ case 1: /* debug exception */
-+ case 2: /* NMI */
-+ case 3: /* breakpoint */
-+ case 4: /* overflow */
-+ case 5: /* bounds check */
-+ case 6: /* invalid opcode */
-+ case 7: /* device not available */
-+ case 8: /* double fault (errcode) */
-+ case 10: /* invalid TSS (errcode) */
-+ case 12: /* stack fault (errcode) */
-+ case 16: /* floating point error */
-+ case 17: /* alignment check (errcode) */
-+ default: /* any undocumented */
-+ break;
-+ case 11: /* segment not present (errcode) */
-+ case 13: /* general protection (errcode) */
-+ case 14: /* page fault (special errcode) */
-+ case 19: /* cache flush denied */
-+ if (mem_err_expected) {
-+ /*
-+ * This fault occured because of the
-+ * get_char or set_char routines. These
-+ * two routines use either eax of edx to
-+ * indirectly reference the location in
-+ * memory that they are working with.
-+ * For a page fault, when we return the
-+ * instruction will be retried, so we
-+ * have to make sure that these
-+ * registers point to valid memory.
-+ */
-+ mem_err = 1; /* set mem error flag */
-+ mem_err_expected = 0;
-+ mem_err_cnt++; /* helps in debugging */
-+ /* make valid address */
-+ regs.eax = (long) &garbage_loc;
-+ /* make valid address */
-+ regs.edx = (long) &garbage_loc;
-+ if (remote_debug)
-+ printk("Return after memory error: "
-+ "mem_err_cnt=%d\n", mem_err_cnt);
-+ if (debug_regs)
-+ print_regs(®s);
-+ goto exit_kgdb;
-+ }
-+ break;
-+ }
-+ if (remote_debug)
-+ printk("kgdb : entered kgdb on cpu %d\n", smp_processor_id());
-+
-+ gdb_i386vector = exceptionVector;
-+ gdb_i386errcode = err_code;
-+ kgdb_info.called_from = __builtin_return_address(0);
-+#ifdef CONFIG_SMP
-+ /*
-+ * OK, we can now communicate, lets tell gdb about the sync.
-+ * but only if we had a problem.
-+ */
-+ switch (entry_state) {
-+ case NO_NMI:
-+ to_gdb("NMI not active, other cpus not stopped\n");
-+ break;
-+ case NO_SYNC:
-+ to_gdb("Some cpus not stopped, see 'kgdb_info' for details\n");
-+ default:;
-+ }
-+
-+#endif
-+/*
-+ * Set up the gdb function call area.
-+ */
-+ trap_cpu = smp_processor_id();
-+ OLD_esp = NEW_esp = (int) (&linux_regs->esp);
-+
-+ IF_SMP(once_again:)
-+ /* reply to host that an exception has occurred */
-+ remcomOutBuffer[0] = 'S';
-+ remcomOutBuffer[1] = hexchars[signo >> 4];
-+ remcomOutBuffer[2] = hexchars[signo % 16];
-+ remcomOutBuffer[3] = 0;
-+
-+ putpacket(remcomOutBuffer);
-+
-+ while (1 == 1) {
-+ error = 0;
-+ remcomOutBuffer[0] = 0;
-+ getpacket(remcomInBuffer);
-+ switch (remcomInBuffer[0]) {
-+ case '?':
-+ remcomOutBuffer[0] = 'S';
-+ remcomOutBuffer[1] = hexchars[signo >> 4];
-+ remcomOutBuffer[2] = hexchars[signo % 16];
-+ remcomOutBuffer[3] = 0;
-+ break;
-+ case 'd':
-+ remote_debug = !(remote_debug); /* toggle debug flag */
-+ printk("Remote debug %s\n",
-+ remote_debug ? "on" : "off");
-+ break;
-+ case 'g': /* return the value of the CPU registers */
-+ get_gdb_regs(usethread, ®s, gdb_regs);
-+ mem2hex((char *) gdb_regs,
-+ remcomOutBuffer, NUMREGBYTES, 0);
-+ break;
-+ case 'G': /* set the value of the CPU registers - return OK */
-+ hex2mem(&remcomInBuffer[1],
-+ (char *) gdb_regs, NUMREGBYTES, 0);
-+ if (!usethread || usethread == current) {
-+ gdb_regs_to_regs(gdb_regs, ®s);
-+ strcpy(remcomOutBuffer, "OK");
-+ } else {
-+ strcpy(remcomOutBuffer, "E00");
-+ }
-+ break;
-+
-+ case 'P':{ /* set the value of a single CPU register -
-+ return OK */
-+ /*
-+ * For some reason, gdb wants to talk about psudo
-+ * registers (greater than 15). These may have
-+ * meaning for ptrace, but for us it is safe to
-+ * ignor them. We do this by dumping them into
-+ * _GS which we also ignor, but do have memory for.
-+ */
-+ int regno;
-+
-+ ptr = &remcomInBuffer[1];
-+ regs_to_gdb_regs(gdb_regs, ®s);
-+ if ((!usethread || usethread == current) &&
-+ hexToInt(&ptr, ®no) &&
-+ *ptr++ == '=' && (regno >= 0)) {
-+ regno =
-+ (regno >= NUMREGS ? _GS : regno);
-+ hex2mem(ptr, (char *) &gdb_regs[regno],
-+ 4, 0);
-+ gdb_regs_to_regs(gdb_regs, ®s);
-+ strcpy(remcomOutBuffer, "OK");
-+ break;
-+ }
-+ strcpy(remcomOutBuffer, "E01");
-+ break;
-+ }
-+
-+ /* mAA..AA,LLLL Read LLLL bytes at address AA..AA */
-+ case 'm':
-+ /* TRY TO READ %x,%x. IF SUCCEED, SET PTR = 0 */
-+ ptr = &remcomInBuffer[1];
-+ if (hexToInt(&ptr, &addr) &&
-+ (*(ptr++) == ',') && (hexToInt(&ptr, &length))) {
-+ ptr = 0;
-+ /*
-+ * hex doubles the byte count
-+ */
-+ if (length > (BUFMAX / 2))
-+ length = BUFMAX / 2;
-+ mem2hex((char *) addr,
-+ remcomOutBuffer, length, 1);
-+ if (mem_err) {
-+ strcpy(remcomOutBuffer, "E03");
-+ debug_error("memory fault\n", NULL);
-+ }
-+ }
-+
-+ if (ptr) {
-+ strcpy(remcomOutBuffer, "E01");
-+ debug_error
-+ ("malformed read memory command: %s\n",
-+ remcomInBuffer);
-+ }
-+ break;
-+
-+ /* MAA..AA,LLLL:
-+ Write LLLL bytes at address AA.AA return OK */
-+ case 'M':
-+ /* TRY TO READ '%x,%x:'. IF SUCCEED, SET PTR = 0 */
-+ ptr = &remcomInBuffer[1];
-+ if (hexToInt(&ptr, &addr) &&
-+ (*(ptr++) == ',') &&
-+ (hexToInt(&ptr, &length)) && (*(ptr++) == ':')) {
-+ hex2mem(ptr, (char *) addr, length, 1);
-+
-+ if (mem_err) {
-+ strcpy(remcomOutBuffer, "E03");
-+ debug_error("memory fault\n", NULL);
-+ } else {
-+ strcpy(remcomOutBuffer, "OK");
-+ }
-+
-+ ptr = 0;
-+ }
-+ if (ptr) {
-+ strcpy(remcomOutBuffer, "E02");
-+ debug_error
-+ ("malformed write memory command: %s\n",
-+ remcomInBuffer);
-+ }
-+ break;
-+
-+ /* cAA..AA Continue at address AA..AA(optional) */
-+ /* sAA..AA Step one instruction from AA..AA(optional) */
-+ /* D detach, reply OK and then continue */
-+ case 'c':
-+ case 's':
-+ case 'D':
-+
-+ /* try to read optional parameter,
-+ pc unchanged if no parm */
-+ ptr = &remcomInBuffer[1];
-+ if (hexToInt(&ptr, &addr)) {
-+ if (remote_debug)
-+ printk("Changing EIP to 0x%x\n", addr);
-+
-+ regs.eip = addr;
-+ }
-+
-+ newPC = regs.eip;
-+
-+ /* clear the trace bit */
-+ regs.eflags &= 0xfffffeff;
-+
-+ /* set the trace bit if we're stepping */
-+ if (remcomInBuffer[0] == 's')
-+ regs.eflags |= 0x100;
-+
-+ /* detach is a friendly version of continue. Note that
-+ debugging is still enabled (e.g hit control C)
-+ until the process that issued an ioctl TIOCGDB
-+ terminates
-+ */
-+ if (remcomInBuffer[0] == 'D') {
-+ strcpy(remcomOutBuffer, "OK");
-+ putpacket(remcomOutBuffer);
-+ }
-+
-+ if (remote_debug) {
-+ printk("Resuming execution\n");
-+ print_regs(®s);
-+ }
-+ asm volatile ("movl %%db6, %0\n":"=r" (dr6)
-+ :);
-+ if (!(dr6 & 0x4000)) {
-+ for (breakno = 0; breakno < 4; ++breakno) {
-+ if (dr6 & (1 << breakno) &&
-+ (breakinfo[breakno].type == 0)) {
-+ /* Set restore flag */
-+ regs.eflags |= 0x10000;
-+ break;
-+ }
-+ }
-+ }
-+ correct_hw_break();
-+ asm volatile ("movl %0, %%db6\n"::"r" (0));
-+ goto exit_kgdb;
-+
-+ /* kill the program */
-+ case 'k': /* do nothing */
-+ break;
-+
-+ /* query */
-+ case 'q':
-+ switch (remcomInBuffer[1]) {
-+ case 'L':
-+ /* List threads */
-+ thread_list = 2;
-+ thread_list_start = (usethread ? : current);
-+ unpack_byte(remcomInBuffer + 3, &maxthreads);
-+ unpack_threadid(remcomInBuffer + 5, &thref);
-+ do {
-+ int buf_thread_limit =
-+ (BUFMAX - 22) / BUF_THREAD_ID_SIZE;
-+ if (maxthreads > buf_thread_limit) {
-+ maxthreads = buf_thread_limit;
-+ }
-+ } while (0);
-+ remcomOutBuffer[0] = 'q';
-+ remcomOutBuffer[1] = 'M';
-+ remcomOutBuffer[4] = '0';
-+ pack_threadid(remcomOutBuffer + 5, &thref);
-+
-+ threadid = threadref_to_int(&thref);
-+ for (nothreads = 0;
-+ nothreads < maxthreads &&
-+ threadid < PID_MAX + MAX_NO_CPUS;
-+ threadid++) {
-+ thread = getthread(threadid);
-+ if (thread) {
-+ int_to_threadref(&thref,
-+ threadid);
-+ pack_threadid(remcomOutBuffer +
-+ 21 +
-+ nothreads * 16,
-+ &thref);
-+ nothreads++;
-+ if (thread_min > threadid)
-+ thread_min = threadid;
-+ }
-+ }
-+
-+ if (threadid == PID_MAX + MAX_NO_CPUS) {
-+ remcomOutBuffer[4] = '1';
-+ }
-+ pack_hex_byte(remcomOutBuffer + 2, nothreads);
-+ remcomOutBuffer[21 + nothreads * 16] = '\0';
-+ break;
-+
-+ case 'C':
-+ /* Current thread id */
-+ remcomOutBuffer[0] = 'Q';
-+ remcomOutBuffer[1] = 'C';
-+ threadid = current->pid;
-+ if (!threadid) {
-+ /*
-+ * idle thread
-+ */
-+ for (threadid = PID_MAX;
-+ threadid < PID_MAX + MAX_NO_CPUS;
-+ threadid++) {
-+ if (current ==
-+ idle_task(threadid -
-+ PID_MAX))
-+ break;
-+ }
-+ }
-+ int_to_threadref(&thref, threadid);
-+ pack_threadid(remcomOutBuffer + 2, &thref);
-+ remcomOutBuffer[18] = '\0';
-+ break;
-+
-+ case 'E':
-+ /* Print exception info */
-+ printexceptioninfo(exceptionVector,
-+ err_code, remcomOutBuffer);
-+ break;
-+ }
-+ break;
-+
-+ /* task related */
-+ case 'H':
-+ switch (remcomInBuffer[1]) {
-+ case 'g':
-+ ptr = &remcomInBuffer[2];
-+ hexToInt(&ptr, &threadid);
-+ thread = getthread(threadid);
-+ if (!thread) {
-+ remcomOutBuffer[0] = 'E';
-+ remcomOutBuffer[1] = '\0';
-+ break;
-+ }
-+ /*
-+ * Just in case I forget what this is all about,
-+ * the "thread info" command to gdb causes it
-+ * to ask for a thread list. It then switches
-+ * to each thread and asks for the registers.
-+ * For this (and only this) usage, we want to
-+ * fudge the registers of tasks not on the run
-+ * list (i.e. waiting) to show the routine that
-+ * called schedule. Also, gdb, is a minimalist
-+ * in that if the current thread is the last
-+ * it will not re-read the info when done.
-+ * This means that in this case we must show
-+ * the real registers. So here is how we do it:
-+ * Each entry we keep track of the min
-+ * thread in the list (the last that gdb will)
-+ * get info for. We also keep track of the
-+ * starting thread.
-+ * "thread_list" is cleared when switching back
-+ * to the min thread if it is was current, or
-+ * if it was not current, thread_list is set
-+ * to 1. When the switch to current comes,
-+ * if thread_list is 1, clear it, else do
-+ * nothing.
-+ */
-+ usethread = thread;
-+ if ((thread_list == 1) &&
-+ (thread == thread_list_start)) {
-+ thread_list = 0;
-+ }
-+ if (thread_list && (threadid == thread_min)) {
-+ if (thread == thread_list_start) {
-+ thread_list = 0;
-+ } else {
-+ thread_list = 1;
-+ }
-+ }
-+ /* follow through */
-+ case 'c':
-+ remcomOutBuffer[0] = 'O';
-+ remcomOutBuffer[1] = 'K';
-+ remcomOutBuffer[2] = '\0';
-+ break;
-+ }
-+ break;
-+
-+ /* Query thread status */
-+ case 'T':
-+ ptr = &remcomInBuffer[1];
-+ hexToInt(&ptr, &threadid);
-+ thread = getthread(threadid);
-+ if (thread) {
-+ remcomOutBuffer[0] = 'O';
-+ remcomOutBuffer[1] = 'K';
-+ remcomOutBuffer[2] = '\0';
-+ if (thread_min > threadid)
-+ thread_min = threadid;
-+ } else {
-+ remcomOutBuffer[0] = 'E';
-+ remcomOutBuffer[1] = '\0';
-+ }
-+ break;
-+
-+ case 'Y':
-+ ptr = &remcomInBuffer[1];
-+ hexToInt(&ptr, &breakno);
-+ ptr++;
-+ hexToInt(&ptr, &breaktype);
-+ ptr++;
-+ hexToInt(&ptr, &length);
-+ ptr++;
-+ hexToInt(&ptr, &addr);
-+ if (set_hw_break(breakno & 0x3,
-+ breaktype & 0x3,
-+ length & 0x3, addr) == 0) {
-+ strcpy(remcomOutBuffer, "OK");
-+ } else {
-+ strcpy(remcomOutBuffer, "ERROR");
-+ }
-+ break;
-+
-+ /* Remove hardware breakpoint */
-+ case 'y':
-+ ptr = &remcomInBuffer[1];
-+ hexToInt(&ptr, &breakno);
-+ if (remove_hw_break(breakno & 0x3) == 0) {
-+ strcpy(remcomOutBuffer, "OK");
-+ } else {
-+ strcpy(remcomOutBuffer, "ERROR");
-+ }
-+ break;
-+
-+ case 'r': /* reboot */
-+ strcpy(remcomOutBuffer, "OK");
-+ putpacket(remcomOutBuffer);
-+ /*to_gdb("Rebooting\n"); */
-+ /* triplefault no return from here */
-+ {
-+ static long no_idt[2];
-+ __asm__ __volatile__("lidt %0"::"m"(no_idt));
-+ BREAKPOINT;
-+ }
-+
-+ } /* switch */
-+
-+ /* reply to the request */
-+ putpacket(remcomOutBuffer);
-+ } /* while(1==1) */
-+ /*
-+ * reached by goto only.
-+ */
-+ exit_kgdb:
-+ /*
-+ * Here is where we set up to trap a gdb function call. NEW_esp
-+ * will be changed if we are trying to do this. We handle both
-+ * adding and subtracting, thus allowing gdb to put grung on
-+ * the stack which it removes later.
-+ */
-+ if (NEW_esp != OLD_esp) {
-+ int *ptr = END_OF_LOOKASIDE;
-+ if (NEW_esp < OLD_esp)
-+ ptr -= (OLD_esp - NEW_esp) / sizeof (int);
-+ *--ptr = linux_regs->eflags;
-+ *--ptr = linux_regs->xcs;
-+ *--ptr = linux_regs->eip;
-+ *--ptr = linux_regs->ecx;
-+ *--ptr = linux_regs->ebx;
-+ *--ptr = linux_regs->eax;
-+ linux_regs->ecx = NEW_esp - (sizeof (int) * 6);
-+ linux_regs->ebx = (unsigned int) END_OF_LOOKASIDE;
-+ if (NEW_esp < OLD_esp) {
-+ linux_regs->eip = (unsigned int) fn_call_stub;
-+ } else {
-+ linux_regs->eip = (unsigned int) fn_rtn_stub;
-+ linux_regs->eax = NEW_esp;
-+ }
-+ linux_regs->eflags &= ~(IF_BIT | TF_BIT);
-+ }
-+#ifdef CONFIG_SMP
-+ /*
-+ * Release gdb wait locks
-+ * Sanity check time. Must have at least one cpu to run. Also single
-+ * step must not be done if the current cpu is on hold.
-+ */
-+ if (spinlock_count == 1) {
-+ int ss_hold = (regs.eflags & 0x100) && kgdb_info.hold_on_sstep;
-+ int cpu_avail = 0;
-+ int i;
-+
-+ for (i = 0; i < MAX_NO_CPUS; i++) {
-+ if (!cpu_online(i))
-+ break;
-+ if (!hold_cpu(i)) {
-+ cpu_avail = 1;
-+ }
-+ }
-+ /*
-+ * Early in the bring up there will be NO cpus on line...
-+ */
-+ if (!cpu_avail && !cpus_empty(cpu_online_map)) {
-+ to_gdb("No cpus unblocked, see 'kgdb_info.hold_cpu'\n");
-+ goto once_again;
-+ }
-+ if (hold_cpu(smp_processor_id()) && (regs.eflags & 0x100)) {
-+ to_gdb
-+ ("Current cpu must be unblocked to single step\n");
-+ goto once_again;
-+ }
-+ if (!(ss_hold)) {
-+ int i;
-+ for (i = 0; i < MAX_NO_CPUS; i++) {
-+ if (!hold_cpu(i)) {
-+ spin_unlock(&waitlocks[i]);
-+ }
-+ }
-+ } else {
-+ spin_unlock(&waitlocks[smp_processor_id()]);
-+ }
-+ /* Release kgdb spinlock */
-+ KGDB_SPIN_UNLOCK(&kgdb_spinlock);
-+ /*
-+ * If this cpu is on hold, this is where we
-+ * do it. Note, the NMI will pull us out of here,
-+ * but will return as the above lock is not held.
-+ * We will stay here till another cpu releases the lock for us.
-+ */
-+ spin_unlock_wait(waitlocks + smp_processor_id());
-+ kgdb_local_irq_restore(flags);
-+ return (0);
-+ }
-+#if 0
-+exit_just_unlock:
-+#endif
-+#endif
-+ /* Release kgdb spinlock */
-+ KGDB_SPIN_UNLOCK(&kgdb_spinlock);
-+ kgdb_local_irq_restore(flags);
-+ return (0);
-+}
-+
-+/* this function is used to set up exception handlers for tracing and
-+ * breakpoints.
-+ * This function is not needed as the above line does all that is needed.
-+ * We leave it for backward compatitability...
-+ */
-+void
-+set_debug_traps(void)
-+{
-+ /*
-+ * linux_debug_hook is defined in traps.c. We store a pointer
-+ * to our own exception handler into it.
-+
-+ * But really folks, every hear of labeled common, an old Fortran
-+ * concept. Lots of folks can reference it and it is define if
-+ * anyone does. Only one can initialize it at link time. We do
-+ * this with the hook. See the statement above. No need for any
-+ * executable code and it is ready as soon as the kernel is
-+ * loaded. Very desirable in kernel debugging.
-+
-+ linux_debug_hook = handle_exception ;
-+ */
-+
-+ /* In case GDB is started before us, ack any packets (presumably
-+ "$?#xx") sitting there.
-+ putDebugChar ('+');
-+
-+ initialized = 1;
-+ */
-+}
-+
-+/* This function will generate a breakpoint exception. It is used at the
-+ beginning of a program to sync up with a debugger and can be used
-+ otherwise as a quick means to stop program execution and "break" into
-+ the debugger. */
-+/* But really, just use the BREAKPOINT macro. We will handle the int stuff
-+ */
-+
-+#ifdef later
-+/*
-+ * possibly we should not go thru the traps.c code at all? Someday.
-+ */
-+void
-+do_kgdb_int3(struct pt_regs *regs, long error_code)
-+{
-+ kgdb_handle_exception(3, 5, error_code, regs);
-+ return;
-+}
-+#endif
-+#undef regs
-+#ifdef CONFIG_TRAP_BAD_SYSCALL_EXITS
-+asmlinkage void
-+bad_sys_call_exit(int stuff)
-+{
-+ struct pt_regs *regs = (struct pt_regs *) &stuff;
-+ printk("Sys call %d return with %x preempt_count\n",
-+ (int) regs->orig_eax, preempt_count());
-+}
-+#endif
-+#ifdef CONFIG_STACK_OVERFLOW_TEST
-+#include <asm/kgdb.h>
-+asmlinkage void
-+stack_overflow(void)
-+{
-+#ifdef BREAKPOINT
-+ BREAKPOINT;
-+#else
-+ printk("Kernel stack overflow, looping forever\n");
-+#endif
-+ while (1) {
-+ }
-+}
-+#endif
-+
-+#if defined(CONFIG_SMP) || defined(CONFIG_KGDB_CONSOLE)
-+char gdbconbuf[BUFMAX];
-+
-+static void
-+kgdb_gdb_message(const char *s, unsigned count)
-+{
-+ int i;
-+ int wcount;
-+ char *bufptr;
-+ /*
-+ * This takes care of NMI while spining out chars to gdb
-+ */
-+ IF_SMP(in_kgdb_console = 1);
-+ gdbconbuf[0] = 'O';
-+ bufptr = gdbconbuf + 1;
-+ while (count > 0) {
-+ if ((count << 1) > (BUFMAX - 2)) {
-+ wcount = (BUFMAX - 2) >> 1;
-+ } else {
-+ wcount = count;
-+ }
-+ count -= wcount;
-+ for (i = 0; i < wcount; i++) {
-+ bufptr = pack_hex_byte(bufptr, s[i]);
-+ }
-+ *bufptr = '\0';
-+ s += wcount;
-+
-+ putpacket(gdbconbuf);
-+
-+ }
-+ IF_SMP(in_kgdb_console = 0);
-+}
-+#endif
-+#ifdef CONFIG_SMP
-+static void
-+to_gdb(const char *s)
-+{
-+ int count = 0;
-+ while (s[count] && (count++ < BUFMAX)) ;
-+ kgdb_gdb_message(s, count);
-+}
-+#endif
-+#ifdef CONFIG_KGDB_CONSOLE
-+#include <linux/console.h>
-+#include <linux/init.h>
-+#include <linux/fs.h>
-+#include <asm/uaccess.h>
-+#include <asm/semaphore.h>
-+
-+void
-+kgdb_console_write(struct console *co, const char *s, unsigned count)
-+{
-+
-+ if (gdb_i386vector == -1) {
-+ /*
-+ * We have not yet talked to gdb. What to do...
-+ * lets break, on continue we can do the write.
-+ * But first tell him whats up. Uh, well no can do,
-+ * as this IS the console. Oh well...
-+ * We do need to wait or the messages will be lost.
-+ * Other option would be to tell the above code to
-+ * ignore this breakpoint and do an auto return,
-+ * but that might confuse gdb. Also this happens
-+ * early enough in boot up that we don't have the traps
-+ * set up yet, so...
-+ */
-+ breakpoint();
-+ }
-+ kgdb_gdb_message(s, count);
-+}
-+
-+/*
-+ * ------------------------------------------------------------
-+ * Serial KGDB driver
-+ * ------------------------------------------------------------
-+ */
-+
-+static struct console kgdbcons = {
-+ name:"kgdb",
-+ write:kgdb_console_write,
-+#ifdef CONFIG_KGDB_USER_CONSOLE
-+ device:kgdb_console_device,
-+#endif
-+ flags:CON_PRINTBUFFER | CON_ENABLED,
-+ index:-1,
-+};
-+
-+/*
-+ * The trick here is that this file gets linked before printk.o
-+ * That means we get to peer at the console info in the command
-+ * line before it does. If we are up, we register, otherwise,
-+ * do nothing. By returning 0, we allow printk to look also.
-+ */
-+static int kgdb_console_enabled;
-+
-+int __init
-+kgdb_console_init(char *str)
-+{
-+ if ((strncmp(str, "kgdb", 4) == 0) || (strncmp(str, "gdb", 3) == 0)) {
-+ register_console(&kgdbcons);
-+ kgdb_console_enabled = 1;
-+ }
-+ return 0; /* let others look at the string */
-+}
-+
-+__setup("console=", kgdb_console_init);
-+
-+#ifdef CONFIG_KGDB_USER_CONSOLE
-+static kdev_t kgdb_console_device(struct console *c);
-+/* This stuff sort of works, but it knocks out telnet devices
-+ * we are leaving it here in case we (or you) find time to figure it out
-+ * better..
-+ */
-+
-+/*
-+ * We need a real char device as well for when the console is opened for user
-+ * space activities.
-+ */
-+
-+static int
-+kgdb_consdev_open(struct inode *inode, struct file *file)
-+{
-+ return 0;
-+}
-+
-+static ssize_t
-+kgdb_consdev_write(struct file *file, const char *buf,
-+ size_t count, loff_t * ppos)
-+{
-+ int size, ret = 0;
-+ static char kbuf[128];
-+ static DECLARE_MUTEX(sem);
-+
-+ /* We are not reentrant... */
-+ if (down_interruptible(&sem))
-+ return -ERESTARTSYS;
-+
-+ while (count > 0) {
-+ /* need to copy the data from user space */
-+ size = count;
-+ if (size > sizeof (kbuf))
-+ size = sizeof (kbuf);
-+ if (copy_from_user(kbuf, buf, size)) {
-+ ret = -EFAULT;
-+ break;;
-+ }
-+ kgdb_console_write(&kgdbcons, kbuf, size);
-+ count -= size;
-+ ret += size;
-+ buf += size;
-+ }
-+
-+ up(&sem);
-+
-+ return ret;
-+}
-+
-+struct file_operations kgdb_consdev_fops = {
-+ open:kgdb_consdev_open,
-+ write:kgdb_consdev_write
-+};
-+static kdev_t
-+kgdb_console_device(struct console *c)
-+{
-+ return MKDEV(TTYAUX_MAJOR, 1);
-+}
-+
-+/*
-+ * This routine gets called from the serial stub in the i386/lib
-+ * This is so it is done late in bring up (just before the console open).
-+ */
-+void
-+kgdb_console_finit(void)
-+{
-+ if (kgdb_console_enabled) {
-+ char *cptr = cdevname(MKDEV(TTYAUX_MAJOR, 1));
-+ char *cp = cptr;
-+ while (*cptr && *cptr != '(')
-+ cptr++;
-+ *cptr = 0;
-+ unregister_chrdev(TTYAUX_MAJOR, cp);
-+ register_chrdev(TTYAUX_MAJOR, "kgdb", &kgdb_consdev_fops);
-+ }
-+}
-+#endif
-+#endif
-+#ifdef CONFIG_KGDB_TS
-+#include <asm/msr.h> /* time stamp code */
-+#include <asm/hardirq.h> /* in_interrupt */
-+#ifdef CONFIG_KGDB_TS_64
-+#define DATA_POINTS 64
-+#endif
-+#ifdef CONFIG_KGDB_TS_128
-+#define DATA_POINTS 128
-+#endif
-+#ifdef CONFIG_KGDB_TS_256
-+#define DATA_POINTS 256
-+#endif
-+#ifdef CONFIG_KGDB_TS_512
-+#define DATA_POINTS 512
-+#endif
-+#ifdef CONFIG_KGDB_TS_1024
-+#define DATA_POINTS 1024
-+#endif
-+#ifndef DATA_POINTS
-+#define DATA_POINTS 128 /* must be a power of two */
-+#endif
-+#define INDEX_MASK (DATA_POINTS - 1)
-+#if (INDEX_MASK & DATA_POINTS)
-+#error "CONFIG_KGDB_TS_COUNT must be a power of 2"
-+#endif
-+struct kgdb_and_then_struct {
-+#ifdef CONFIG_SMP
-+ int on_cpu;
-+#endif
-+ struct task_struct *task;
-+ long long at_time;
-+ int from_ln;
-+ char *in_src;
-+ void *from;
-+ int *with_shpf;
-+ int data0;
-+ int data1;
-+};
-+struct kgdb_and_then_struct2 {
-+#ifdef CONFIG_SMP
-+ int on_cpu;
-+#endif
-+ struct task_struct *task;
-+ long long at_time;
-+ int from_ln;
-+ char *in_src;
-+ void *from;
-+ int *with_shpf;
-+ struct task_struct *t1;
-+ struct task_struct *t2;
-+};
-+struct kgdb_and_then_struct kgdb_data[DATA_POINTS];
-+
-+struct kgdb_and_then_struct *kgdb_and_then = &kgdb_data[0];
-+int kgdb_and_then_count;
-+
-+void
-+kgdb_tstamp(int line, char *source, int data0, int data1)
-+{
-+ static spinlock_t ts_spin = SPIN_LOCK_UNLOCKED;
-+ int flags;
-+ kgdb_local_irq_save(flags);
-+ spin_lock(&ts_spin);
-+ rdtscll(kgdb_and_then->at_time);
-+#ifdef CONFIG_SMP
-+ kgdb_and_then->on_cpu = smp_processor_id();
-+#endif
-+ kgdb_and_then->task = current;
-+ kgdb_and_then->from_ln = line;
-+ kgdb_and_then->in_src = source;
-+ kgdb_and_then->from = __builtin_return_address(0);
-+ kgdb_and_then->with_shpf = (int *) (((flags & IF_BIT) >> 9) |
-+ (preempt_count() << 8));
-+ kgdb_and_then->data0 = data0;
-+ kgdb_and_then->data1 = data1;
-+ kgdb_and_then = &kgdb_data[++kgdb_and_then_count & INDEX_MASK];
-+ spin_unlock(&ts_spin);
-+ kgdb_local_irq_restore(flags);
-+#ifdef CONFIG_PREEMPT
-+
-+#endif
-+ return;
-+}
-+#endif
-+typedef int gdb_debug_hook(int exceptionVector,
-+ int signo, int err_code, struct pt_regs *linux_regs);
-+gdb_debug_hook *linux_debug_hook = &kgdb_handle_exception; /* histerical reasons... */
---- linux-2.6.0-test1/arch/i386/kernel/ldt.c 2003-06-14 12:18:25.000000000 -0700
-+++ 25/arch/i386/kernel/ldt.c 2003-07-19 17:04:06.000000000 -0700
-@@ -56,9 +56,11 @@ static int alloc_ldt(mm_context_t *pc, i
-
- if (reload) {
- #ifdef CONFIG_SMP
-+ cpumask_t mask;
- preempt_disable();
- load_LDT(pc);
-- if (current->mm->cpu_vm_mask != (1 << smp_processor_id()))
-+ mask = cpumask_of_cpu(smp_processor_id());
-+ if (!cpus_equal(current->mm->cpu_vm_mask, mask))
- smp_call_function(flush_ldt, 0, 1, 1);
- preempt_enable();
- #else
---- linux-2.6.0-test1/arch/i386/kernel/Makefile 2003-07-02 14:53:12.000000000 -0700
-+++ 25/arch/i386/kernel/Makefile 2003-07-19 17:04:02.000000000 -0700
-@@ -14,6 +14,7 @@ obj-y += timers/
- obj-$(CONFIG_ACPI) += acpi/
- obj-$(CONFIG_X86_BIOS_REBOOT) += reboot.o
- obj-$(CONFIG_MCA) += mca.o
-+obj-$(CONFIG_KGDB) += kgdb_stub.o
- obj-$(CONFIG_X86_MSR) += msr.o
- obj-$(CONFIG_X86_CPUID) += cpuid.o
- obj-$(CONFIG_MICROCODE) += microcode.o
---- linux-2.6.0-test1/arch/i386/kernel/mpparse.c 2003-06-16 22:32:20.000000000 -0700
-+++ 25/arch/i386/kernel/mpparse.c 2003-07-19 17:04:06.000000000 -0700
-@@ -71,7 +71,7 @@ unsigned int boot_cpu_logical_apicid = -
- static unsigned int __initdata num_processors;
-
- /* Bitmask of physically existing CPUs */
--unsigned long phys_cpu_present_map;
-+physid_mask_t phys_cpu_present_map;
-
- u8 bios_cpu_apicid[NR_CPUS] = { [0 ... NR_CPUS-1] = BAD_APICID };
-
-@@ -106,6 +106,7 @@ static struct mpc_config_translation *tr
- void __init MP_processor_info (struct mpc_config_processor *m)
- {
- int ver, apicid;
-+ physid_mask_t tmp;
-
- if (!(m->mpc_cpuflag & CPU_ENABLED))
- return;
-@@ -176,7 +177,8 @@ void __init MP_processor_info (struct mp
- }
- ver = m->mpc_apicver;
-
-- phys_cpu_present_map |= apicid_to_cpu_present(apicid);
-+ tmp = apicid_to_cpu_present(apicid);
-+ physids_or(phys_cpu_present_map, phys_cpu_present_map, tmp);
-
- /*
- * Validate version
---- linux-2.6.0-test1/arch/i386/kernel/msr.c 2003-06-14 12:18:08.000000000 -0700
-+++ 25/arch/i386/kernel/msr.c 2003-07-19 17:04:06.000000000 -0700
-@@ -242,7 +242,7 @@ static int msr_open(struct inode *inode,
- int cpu = minor(file->f_dentry->d_inode->i_rdev);
- struct cpuinfo_x86 *c = &(cpu_data)[cpu];
-
-- if ( !(cpu_online_map & (1UL << cpu)) )
-+ if (!cpu_online(cpu))
- return -ENXIO; /* No such CPU */
- if ( !cpu_has(c, X86_FEATURE_MSR) )
- return -EIO; /* MSR not supported */
---- linux-2.6.0-test1/arch/i386/kernel/nmi.c 2003-07-10 18:50:30.000000000 -0700
-+++ 25/arch/i386/kernel/nmi.c 2003-07-19 17:04:02.000000000 -0700
-@@ -31,7 +31,17 @@
- #include <asm/mpspec.h>
- #include <asm/nmi.h>
-
-+#ifdef CONFIG_KGDB
-+#include <asm/kgdb.h>
-+#ifdef CONFIG_SMP
-+unsigned int nmi_watchdog = NMI_IO_APIC;
-+#else
-+unsigned int nmi_watchdog = NMI_LOCAL_APIC;
-+#endif
-+#else
- unsigned int nmi_watchdog = NMI_NONE;
-+#endif
-+
- static unsigned int nmi_hz = HZ;
- unsigned int nmi_perfctr_msr; /* the MSR to reset in NMI handler */
- extern void show_registers(struct pt_regs *regs);
-@@ -396,6 +406,9 @@ void touch_nmi_watchdog (void)
- for (i = 0; i < NR_CPUS; i++)
- alert_counter[i] = 0;
- }
-+#ifdef CONFIG_KGDB
-+int tune_watchdog = 5*HZ;
-+#endif
-
- void nmi_watchdog_tick (struct pt_regs * regs)
- {
-@@ -409,12 +422,24 @@ void nmi_watchdog_tick (struct pt_regs *
-
- sum = irq_stat[cpu].apic_timer_irqs;
-
-+#ifdef CONFIG_KGDB
-+ if (! in_kgdb(regs) && last_irq_sums[cpu] == sum ) {
-+
-+#else
- if (last_irq_sums[cpu] == sum) {
-+#endif
- /*
- * Ayiee, looks like this CPU is stuck ...
- * wait a few IRQs (5 seconds) before doing the oops ...
- */
- alert_counter[cpu]++;
-+#ifdef CONFIG_KGDB
-+ if (alert_counter[cpu] == tune_watchdog) {
-+ kgdb_handle_exception(2, SIGPWR, 0, regs);
-+ last_irq_sums[cpu] = sum;
-+ alert_counter[cpu] = 0;
-+ }
-+#endif
- if (alert_counter[cpu] == 5*nmi_hz) {
- spin_lock(&nmi_print_lock);
- /*
---- linux-2.6.0-test1/arch/i386/kernel/reboot.c 2003-06-14 12:18:06.000000000 -0700
-+++ 25/arch/i386/kernel/reboot.c 2003-07-19 17:04:06.000000000 -0700
-@@ -226,7 +226,7 @@ void machine_restart(char * __unused)
- if its not, default to the BSP */
- if ((reboot_cpu == -1) ||
- (reboot_cpu > (NR_CPUS -1)) ||
-- !(phys_cpu_present_map & (1<<cpuid)))
-+ !cpu_isset(cpuid, phys_cpu_present_map))
- reboot_cpu = boot_cpu_physical_apicid;
-
- reboot_smp = 0; /* use this as a flag to only go through this once*/
---- linux-2.6.0-test1/arch/i386/kernel/setup.c 2003-06-22 12:04:43.000000000 -0700
-+++ 25/arch/i386/kernel/setup.c 2003-07-19 17:03:49.000000000 -0700
-@@ -42,6 +42,7 @@
- #include <asm/edd.h>
- #include <asm/setup.h>
- #include <asm/arch_hooks.h>
-+#include <asm/sections.h>
- #include "setup_arch_pre.h"
- #include "mach_resources.h"
-
-@@ -100,7 +101,7 @@ extern void early_cpu_init(void);
- extern void dmi_scan_machine(void);
- extern void generic_apic_probe(char *);
- extern int root_mountflags;
--extern char _text, _etext, _edata, _end;
-+extern char _end[];
-
- unsigned long saved_videomode;
-
-@@ -520,7 +521,7 @@ static void __init parse_cmdline_early (
- acpi_disabled = 1;
-
- /* "acpismp=force" turns on ACPI again */
-- else if (!memcmp(from, "acpismp=force", 14))
-+ if (c == ' ' && !memcmp(from, "acpismp=force", 13))
- acpi_disabled = 0;
-
- /*
-@@ -676,7 +677,7 @@ static unsigned long __init setup_memory
- * partially used pages are not usable - thus
- * we are rounding upwards:
- */
-- start_pfn = PFN_UP(__pa(&_end));
-+ start_pfn = PFN_UP(__pa(_end));
-
- find_max_pfn();
-
-@@ -947,15 +948,15 @@ void __init setup_arch(char **cmdline_p)
-
- if (!MOUNT_ROOT_RDONLY)
- root_mountflags &= ~MS_RDONLY;
-- init_mm.start_code = (unsigned long) &_text;
-- init_mm.end_code = (unsigned long) &_etext;
-- init_mm.end_data = (unsigned long) &_edata;
-- init_mm.brk = (unsigned long) &_end;
--
-- code_resource.start = virt_to_phys(&_text);
-- code_resource.end = virt_to_phys(&_etext)-1;
-- data_resource.start = virt_to_phys(&_etext);
-- data_resource.end = virt_to_phys(&_edata)-1;
-+ init_mm.start_code = (unsigned long) _text;
-+ init_mm.end_code = (unsigned long) _etext;
-+ init_mm.end_data = (unsigned long) _edata;
-+ init_mm.brk = (unsigned long) _end;
-+
-+ code_resource.start = virt_to_phys(_text);
-+ code_resource.end = virt_to_phys(_etext)-1;
-+ data_resource.start = virt_to_phys(_etext);
-+ data_resource.end = virt_to_phys(_edata)-1;
-
- parse_cmdline_early(cmdline_p);
-
-@@ -977,7 +978,7 @@ void __init setup_arch(char **cmdline_p)
- generic_apic_probe(*cmdline_p);
- #endif
-
--#ifdef CONFIG_ACPI_BOOT
-+#ifdef CONFIG_ACPI
- /*
- * Parse the ACPI tables for possible boot-time SMP configuration.
- */
---- linux-2.6.0-test1/arch/i386/kernel/smpboot.c 2003-06-26 22:07:23.000000000 -0700
-+++ 25/arch/i386/kernel/smpboot.c 2003-07-19 17:04:06.000000000 -0700
-@@ -61,12 +61,12 @@ static int __initdata smp_b_stepping;
- int smp_num_siblings = 1;
- int phys_proc_id[NR_CPUS]; /* Package ID of each logical CPU */
-
--/* Bitmask of currently online CPUs */
--unsigned long cpu_online_map;
-+/* bitmap of online cpus */
-+cpumask_t cpu_online_map;
-
--static volatile unsigned long cpu_callin_map;
--volatile unsigned long cpu_callout_map;
--static unsigned long smp_commenced_mask;
-+static cpumask_t cpu_callin_map;
-+cpumask_t cpu_callout_map;
-+static cpumask_t smp_commenced_mask;
-
- /* Per CPU bogomips and other parameters */
- struct cpuinfo_x86 cpu_data[NR_CPUS] __cacheline_aligned;
-@@ -268,7 +268,7 @@ static void __init synchronize_tsc_bp (v
-
- sum = 0;
- for (i = 0; i < NR_CPUS; i++) {
-- if (test_bit(i, &cpu_callout_map)) {
-+ if (cpu_isset(i, cpu_callout_map)) {
- t0 = tsc_values[i];
- sum += t0;
- }
-@@ -277,7 +277,7 @@ static void __init synchronize_tsc_bp (v
-
- sum = 0;
- for (i = 0; i < NR_CPUS; i++) {
-- if (!test_bit(i, &cpu_callout_map))
-+ if (!cpu_isset(i, cpu_callout_map))
- continue;
- delta = tsc_values[i] - avg;
- if (delta < 0)
-@@ -353,7 +353,7 @@ void __init smp_callin(void)
- */
- phys_id = GET_APIC_ID(apic_read(APIC_ID));
- cpuid = smp_processor_id();
-- if (test_bit(cpuid, &cpu_callin_map)) {
-+ if (cpu_isset(cpuid, cpu_callin_map)) {
- printk("huh, phys CPU#%d, CPU#%d already present??\n",
- phys_id, cpuid);
- BUG();
-@@ -376,7 +376,7 @@ void __init smp_callin(void)
- /*
- * Has the boot CPU finished it's STARTUP sequence?
- */
-- if (test_bit(cpuid, &cpu_callout_map))
-+ if (cpu_isset(cpuid, cpu_callout_map))
- break;
- rep_nop();
- }
-@@ -417,7 +417,7 @@ void __init smp_callin(void)
- /*
- * Allow the master to continue.
- */
-- set_bit(cpuid, &cpu_callin_map);
-+ cpu_set(cpuid, cpu_callin_map);
-
- /*
- * Synchronize the TSC with the BP
-@@ -442,7 +442,7 @@ int __init start_secondary(void *unused)
- */
- cpu_init();
- smp_callin();
-- while (!test_bit(smp_processor_id(), &smp_commenced_mask))
-+ while (!cpu_isset(smp_processor_id(), smp_commenced_mask))
- rep_nop();
- setup_secondary_APIC_clock();
- if (nmi_watchdog == NMI_IO_APIC) {
-@@ -456,7 +456,7 @@ int __init start_secondary(void *unused)
- * the local TLBs too.
- */
- local_flush_tlb();
-- set_bit(smp_processor_id(), &cpu_online_map);
-+ cpu_set(smp_processor_id(), cpu_online_map);
- wmb();
- return cpu_idle();
- }
-@@ -499,16 +499,16 @@ static struct task_struct * __init fork_
- #ifdef CONFIG_NUMA
-
- /* which logical CPUs are on which nodes */
--volatile unsigned long node_2_cpu_mask[MAX_NR_NODES] =
-- { [0 ... MAX_NR_NODES-1] = 0 };
-+cpumask_t node_2_cpu_mask[MAX_NR_NODES] =
-+ { [0 ... MAX_NR_NODES-1] = CPU_MASK_NONE };
- /* which node each logical CPU is on */
--volatile int cpu_2_node[NR_CPUS] = { [0 ... NR_CPUS-1] = 0 };
-+int cpu_2_node[NR_CPUS] = { [0 ... NR_CPUS-1] = 0 };
-
- /* set up a mapping between cpu and node. */
- static inline void map_cpu_to_node(int cpu, int node)
- {
- printk("Mapping cpu %d to node %d\n", cpu, node);
-- node_2_cpu_mask[node] |= (1 << cpu);
-+ cpu_set(cpu, node_2_cpu_mask[node]);
- cpu_2_node[cpu] = node;
- }
-
-@@ -519,7 +519,7 @@ static inline void unmap_cpu_to_node(int
-
- printk("Unmapping cpu %d from all nodes\n", cpu);
- for (node = 0; node < MAX_NR_NODES; node ++)
-- node_2_cpu_mask[node] &= ~(1 << cpu);
-+ cpu_clear(cpu, node_2_cpu_mask[node]);
- cpu_2_node[cpu] = -1;
- }
- #else /* !CONFIG_NUMA */
-@@ -529,7 +529,7 @@ static inline void unmap_cpu_to_node(int
-
- #endif /* CONFIG_NUMA */
-
--volatile u8 cpu_2_logical_apicid[NR_CPUS] = { [0 ... NR_CPUS-1] = BAD_APICID };
-+u8 cpu_2_logical_apicid[NR_CPUS] = { [0 ... NR_CPUS-1] = BAD_APICID };
-
- void map_cpu_to_logical_apicid(void)
- {
-@@ -770,7 +770,7 @@ wakeup_secondary_cpu(int phys_apicid, un
- }
- #endif /* WAKE_SECONDARY_VIA_INIT */
-
--extern unsigned long cpu_initialized;
-+extern cpumask_t cpu_initialized;
-
- static int __init do_boot_cpu(int apicid)
- /*
-@@ -836,19 +836,19 @@ static int __init do_boot_cpu(int apicid
- * allow APs to start initializing.
- */
- Dprintk("Before Callout %d.\n", cpu);
-- set_bit(cpu, &cpu_callout_map);
-+ cpu_set(cpu, cpu_callout_map);
- Dprintk("After Callout %d.\n", cpu);
-
- /*
- * Wait 5s total for a response
- */
- for (timeout = 0; timeout < 50000; timeout++) {
-- if (test_bit(cpu, &cpu_callin_map))
-+ if (cpu_isset(cpu, cpu_callin_map))
- break; /* It has booted */
- udelay(100);
- }
-
-- if (test_bit(cpu, &cpu_callin_map)) {
-+ if (cpu_isset(cpu, cpu_callin_map)) {
- /* number CPUs logically, starting from 1 (BSP is 0) */
- Dprintk("OK.\n");
- printk("CPU%d: ", cpu);
-@@ -869,8 +869,8 @@ static int __init do_boot_cpu(int apicid
- if (boot_error) {
- /* Try to put things back the way they were before ... */
- unmap_cpu_to_logical_apicid(cpu);
-- clear_bit(cpu, &cpu_callout_map); /* was set here (do_boot_cpu()) */
-- clear_bit(cpu, &cpu_initialized); /* was set by cpu_init() */
-+ cpu_clear(cpu, cpu_callout_map); /* was set here (do_boot_cpu()) */
-+ cpu_clear(cpu, cpu_initialized); /* was set by cpu_init() */
- cpucount--;
- }
-
-@@ -957,7 +957,7 @@ static void __init smp_boot_cpus(unsigne
- if (!smp_found_config) {
- printk(KERN_NOTICE "SMP motherboard not detected.\n");
- smpboot_clear_io_apic_irqs();
-- phys_cpu_present_map = 1;
-+ phys_cpu_present_map = physid_mask_of_physid(0);
- if (APIC_init_uniprocessor())
- printk(KERN_NOTICE "Local APIC not detected."
- " Using dummy APIC emulation.\n");
-@@ -973,7 +973,7 @@ static void __init smp_boot_cpus(unsigne
- if (!check_phys_apicid_present(boot_cpu_physical_apicid)) {
- printk("weird, boot CPU (#%d) not listed by the BIOS.\n",
- boot_cpu_physical_apicid);
-- phys_cpu_present_map |= (1 << hard_smp_processor_id());
-+ cpu_set(hard_smp_processor_id(), phys_cpu_present_map);
- }
-
- /*
-@@ -984,7 +984,7 @@ static void __init smp_boot_cpus(unsigne
- boot_cpu_physical_apicid);
- printk(KERN_ERR "... forcing use of dummy APIC emulation. (tell your hw vendor)\n");
- smpboot_clear_io_apic_irqs();
-- phys_cpu_present_map = 1;
-+ phys_cpu_present_map = physid_mask_of_physid(0);
- return;
- }
-
-@@ -997,7 +997,7 @@ static void __init smp_boot_cpus(unsigne
- smp_found_config = 0;
- printk(KERN_INFO "SMP mode deactivated, forcing use of dummy APIC emulation.\n");
- smpboot_clear_io_apic_irqs();
-- phys_cpu_present_map = 1;
-+ phys_cpu_present_map = physid_mask_of_physid(0);
- return;
- }
-
-@@ -1017,10 +1017,10 @@ static void __init smp_boot_cpus(unsigne
- * bits 0-3 are quad0, 4-7 are quad1, etc. A perverse twist on the
- * clustered apic ID.
- */
-- Dprintk("CPU present map: %lx\n", phys_cpu_present_map);
-+ Dprintk("CPU present map: %lx\n", cpus_coerce(phys_cpu_present_map));
-
- kicked = 1;
-- for (bit = 0; kicked < NR_CPUS && bit < BITS_PER_LONG; bit++) {
-+ for (bit = 0; kicked < NR_CPUS && bit < MAX_APICS; bit++) {
- apicid = cpu_present_to_apicid(bit);
- /*
- * Don't even attempt to start the boot CPU!
-@@ -1055,7 +1055,7 @@ static void __init smp_boot_cpus(unsigne
- } else {
- unsigned long bogosum = 0;
- for (cpu = 0; cpu < NR_CPUS; cpu++)
-- if (cpu_callout_map & (1<<cpu))
-+ if (cpu_isset(cpu, cpu_callout_map))
- bogosum += cpu_data[cpu].loops_per_jiffy;
- printk(KERN_INFO "Total of %d processors activated (%lu.%02lu BogoMIPS).\n",
- cpucount+1,
-@@ -1087,10 +1087,11 @@ static void __init smp_boot_cpus(unsigne
-
- for (cpu = 0; cpu < NR_CPUS; cpu++) {
- int i;
-- if (!test_bit(cpu, &cpu_callout_map)) continue;
-+ if (!cpu_isset(cpu, cpu_callout_map))
-+ continue;
-
- for (i = 0; i < NR_CPUS; i++) {
-- if (i == cpu || !test_bit(i, &cpu_callout_map))
-+ if (i == cpu || !cpu_isset(i, cpu_callout_map))
- continue;
- if (phys_proc_id[cpu] == phys_proc_id[i]) {
- cpu_sibling_map[cpu] = i;
-@@ -1125,28 +1126,28 @@ void __init smp_prepare_cpus(unsigned in
-
- void __devinit smp_prepare_boot_cpu(void)
- {
-- set_bit(smp_processor_id(), &cpu_online_map);
-- set_bit(smp_processor_id(), &cpu_callout_map);
-+ cpu_set(smp_processor_id(), cpu_online_map);
-+ cpu_set(smp_processor_id(), cpu_callout_map);
- }
-
- int __devinit __cpu_up(unsigned int cpu)
- {
- /* This only works at boot for x86. See "rewrite" above. */
-- if (test_bit(cpu, &smp_commenced_mask)) {
-+ if (cpu_isset(cpu, smp_commenced_mask)) {
- local_irq_enable();
- return -ENOSYS;
- }
-
- /* In case one didn't come up */
-- if (!test_bit(cpu, &cpu_callin_map)) {
-+ if (!cpu_isset(cpu, cpu_callin_map)) {
- local_irq_enable();
- return -EIO;
- }
-
- local_irq_enable();
- /* Unleash the CPU! */
-- set_bit(cpu, &smp_commenced_mask);
-- while (!test_bit(cpu, &cpu_online_map))
-+ cpu_set(cpu, smp_commenced_mask);
-+ while (!cpu_isset(cpu, cpu_online_map))
- mb();
- return 0;
- }
-@@ -1154,7 +1155,8 @@ int __devinit __cpu_up(unsigned int cpu)
- void __init smp_cpus_done(unsigned int max_cpus)
- {
- #ifdef CONFIG_X86_IO_APIC
-- setup_ioapic_dest(TARGET_CPUS);
-+ cpumask_t targets = CPU_MASK_ALL;
-+ setup_ioapic_dest(targets);
- #endif
- zap_low_mappings();
- }
---- linux-2.6.0-test1/arch/i386/kernel/smp.c 2003-06-26 22:07:23.000000000 -0700
-+++ 25/arch/i386/kernel/smp.c 2003-07-19 17:04:06.000000000 -0700
-@@ -155,8 +155,12 @@ void send_IPI_self(int vector)
- __send_IPI_shortcut(APIC_DEST_SELF, vector);
- }
-
--inline void send_IPI_mask_bitmask(int mask, int vector)
-+/*
-+ * This is only used on smaller machines.
-+ */
-+inline void send_IPI_mask_bitmask(cpumask_t cpumask, int vector)
- {
-+ unsigned long mask = cpus_coerce(cpumask);
- unsigned long cfg;
- unsigned long flags;
-
-@@ -186,10 +190,10 @@ inline void send_IPI_mask_bitmask(int ma
- local_irq_restore(flags);
- }
-
--inline void send_IPI_mask_sequence(int mask, int vector)
-+inline void send_IPI_mask_sequence(cpumask_t mask, int vector)
- {
- unsigned long cfg, flags;
-- unsigned int query_cpu, query_mask;
-+ unsigned int query_cpu;
-
- /*
- * Hack. The clustered APIC addressing mode doesn't allow us to send
-@@ -200,8 +204,7 @@ inline void send_IPI_mask_sequence(int m
- local_irq_save(flags);
-
- for (query_cpu = 0; query_cpu < NR_CPUS; ++query_cpu) {
-- query_mask = 1 << query_cpu;
-- if (query_mask & mask) {
-+ if (cpu_isset(query_cpu, mask)) {
-
- /*
- * Wait for idle.
-@@ -238,7 +241,7 @@ inline void send_IPI_mask_sequence(int m
- * Optimizations Manfred Spraul <manfred@colorfullife.com>
- */
-
--static volatile unsigned long flush_cpumask;
-+static cpumask_t flush_cpumask;
- static struct mm_struct * flush_mm;
- static unsigned long flush_va;
- static spinlock_t tlbstate_lock = SPIN_LOCK_UNLOCKED;
-@@ -255,7 +258,7 @@ static inline void leave_mm (unsigned lo
- {
- if (cpu_tlbstate[cpu].state == TLBSTATE_OK)
- BUG();
-- clear_bit(cpu, &cpu_tlbstate[cpu].active_mm->cpu_vm_mask);
-+ cpu_clear(cpu, cpu_tlbstate[cpu].active_mm->cpu_vm_mask);
- load_cr3(swapper_pg_dir);
- }
-
-@@ -265,7 +268,7 @@ static inline void leave_mm (unsigned lo
- * [cpu0: the cpu that switches]
- * 1) switch_mm() either 1a) or 1b)
- * 1a) thread switch to a different mm
-- * 1a1) clear_bit(cpu, &old_mm->cpu_vm_mask);
-+ * 1a1) cpu_clear(cpu, old_mm->cpu_vm_mask);
- * Stop ipi delivery for the old mm. This is not synchronized with
- * the other cpus, but smp_invalidate_interrupt ignore flush ipis
- * for the wrong mm, and in the worst case we perform a superflous
-@@ -275,7 +278,7 @@ static inline void leave_mm (unsigned lo
- * was in lazy tlb mode.
- * 1a3) update cpu_tlbstate[].active_mm
- * Now cpu0 accepts tlb flushes for the new mm.
-- * 1a4) set_bit(cpu, &new_mm->cpu_vm_mask);
-+ * 1a4) cpu_set(cpu, new_mm->cpu_vm_mask);
- * Now the other cpus will send tlb flush ipis.
- * 1a4) change cr3.
- * 1b) thread switch without mm change
-@@ -311,7 +314,7 @@ asmlinkage void smp_invalidate_interrupt
-
- cpu = get_cpu();
-
-- if (!test_bit(cpu, &flush_cpumask))
-+ if (!cpu_isset(cpu, flush_cpumask))
- goto out;
- /*
- * This was a BUG() but until someone can quote me the
-@@ -332,15 +335,17 @@ asmlinkage void smp_invalidate_interrupt
- leave_mm(cpu);
- }
- ack_APIC_irq();
-- clear_bit(cpu, &flush_cpumask);
--
-+ smp_mb__before_clear_bit();
-+ cpu_clear(cpu, flush_cpumask);
-+ smp_mb__after_clear_bit();
- out:
- put_cpu_no_resched();
- }
-
--static void flush_tlb_others (unsigned long cpumask, struct mm_struct *mm,
-+static void flush_tlb_others(cpumask_t cpumask, struct mm_struct *mm,
- unsigned long va)
- {
-+ cpumask_t tmp;
- /*
- * A couple of (to be removed) sanity checks:
- *
-@@ -348,14 +353,12 @@ static void flush_tlb_others (unsigned l
- * - current CPU must not be in mask
- * - mask must exist :)
- */
-- if (!cpumask)
-- BUG();
-- if ((cpumask & cpu_online_map) != cpumask)
-- BUG();
-- if (cpumask & (1 << smp_processor_id()))
-- BUG();
-- if (!mm)
-- BUG();
-+ BUG_ON(cpus_empty(cpumask));
-+
-+ cpus_and(tmp, cpumask, cpu_online_map);
-+ BUG_ON(!cpus_equal(cpumask, tmp));
-+ BUG_ON(cpu_isset(smp_processor_id(), cpumask));
-+ BUG_ON(!mm);
-
- /*
- * i'm not happy about this global shared spinlock in the
-@@ -367,15 +370,26 @@ static void flush_tlb_others (unsigned l
-
- flush_mm = mm;
- flush_va = va;
-+#if NR_CPUS <= BITS_PER_LONG
- atomic_set_mask(cpumask, &flush_cpumask);
-+#else
-+ {
-+ int k;
-+ unsigned long *flush_mask = (unsigned long *)&flush_cpumask;
-+ unsigned long *cpu_mask = (unsigned long *)&cpumask;
-+ for (k = 0; k < BITS_TO_LONGS(NR_CPUS); ++k)
-+ atomic_set_mask(cpu_mask[k], &flush_mask[k]);
-+ }
-+#endif
- /*
- * We have to send the IPI only to
- * CPUs affected.
- */
- send_IPI_mask(cpumask, INVALIDATE_TLB_VECTOR);
-
-- while (flush_cpumask)
-- /* nothing. lockup detection does not belong here */;
-+ while (!cpus_empty(flush_cpumask))
-+ /* nothing. lockup detection does not belong here */
-+ mb();
-
- flush_mm = NULL;
- flush_va = 0;
-@@ -385,23 +399,25 @@ static void flush_tlb_others (unsigned l
- void flush_tlb_current_task(void)
- {
- struct mm_struct *mm = current->mm;
-- unsigned long cpu_mask;
-+ cpumask_t cpu_mask;
-
- preempt_disable();
-- cpu_mask = mm->cpu_vm_mask & ~(1UL << smp_processor_id());
-+ cpu_mask = mm->cpu_vm_mask;
-+ cpu_clear(smp_processor_id(), cpu_mask);
-
- local_flush_tlb();
-- if (cpu_mask)
-+ if (!cpus_empty(cpu_mask))
- flush_tlb_others(cpu_mask, mm, FLUSH_ALL);
- preempt_enable();
- }
-
- void flush_tlb_mm (struct mm_struct * mm)
- {
-- unsigned long cpu_mask;
-+ cpumask_t cpu_mask;
-
- preempt_disable();
-- cpu_mask = mm->cpu_vm_mask & ~(1UL << smp_processor_id());
-+ cpu_mask = mm->cpu_vm_mask;
-+ cpu_clear(smp_processor_id(), cpu_mask);
-
- if (current->active_mm == mm) {
- if (current->mm)
-@@ -409,7 +425,7 @@ void flush_tlb_mm (struct mm_struct * mm
- else
- leave_mm(smp_processor_id());
- }
-- if (cpu_mask)
-+ if (!cpus_empty(cpu_mask))
- flush_tlb_others(cpu_mask, mm, FLUSH_ALL);
-
- preempt_enable();
-@@ -418,10 +434,11 @@ void flush_tlb_mm (struct mm_struct * mm
- void flush_tlb_page(struct vm_area_struct * vma, unsigned long va)
- {
- struct mm_struct *mm = vma->vm_mm;
-- unsigned long cpu_mask;
-+ cpumask_t cpu_mask;
-
- preempt_disable();
-- cpu_mask = mm->cpu_vm_mask & ~(1UL << smp_processor_id());
-+ cpu_mask = mm->cpu_vm_mask;
-+ cpu_clear(smp_processor_id(), cpu_mask);
-
- if (current->active_mm == mm) {
- if(current->mm)
-@@ -430,7 +447,7 @@ void flush_tlb_page(struct vm_area_struc
- leave_mm(smp_processor_id());
- }
-
-- if (cpu_mask)
-+ if (!cpus_empty(cpu_mask))
- flush_tlb_others(cpu_mask, mm, va);
-
- preempt_enable();
-@@ -457,9 +474,19 @@ void flush_tlb_all(void)
- */
- void smp_send_reschedule(int cpu)
- {
-- send_IPI_mask(1 << cpu, RESCHEDULE_VECTOR);
-+ send_IPI_mask(cpumask_of_cpu(cpu), RESCHEDULE_VECTOR);
- }
--
-+#ifdef CONFIG_KGDB
-+/*
-+ * By using the NMI code instead of a vector we just sneak thru the
-+ * word generator coming out with just what we want. AND it does
-+ * not matter if clustered_apic_mode is set or not.
-+ */
-+void smp_send_nmi_allbutself(void)
-+{
-+ send_IPI_allbutself(APIC_DM_NMI);
-+}
-+#endif
- /*
- * Structure and data for smp_call_function(). This is designed to minimise
- * static memory requirements. It also looks cleaner.
-@@ -533,7 +560,7 @@ static void stop_this_cpu (void * dummy)
- /*
- * Remove this CPU:
- */
-- clear_bit(smp_processor_id(), &cpu_online_map);
-+ cpu_clear(smp_processor_id(), cpu_online_map);
- local_irq_disable();
- disable_local_APIC();
- if (cpu_data[smp_processor_id()].hlt_works_ok)
---- linux-2.6.0-test1/arch/i386/kernel/traps.c 2003-07-02 14:53:12.000000000 -0700
-+++ 25/arch/i386/kernel/traps.c 2003-07-19 17:06:40.000000000 -0700
-@@ -90,6 +90,42 @@ asmlinkage void alignment_check(void);
- asmlinkage void spurious_interrupt_bug(void);
- asmlinkage void machine_check(void);
-
-+#ifdef CONFIG_KGDB
-+extern void sysenter_entry(void);
-+#include <asm/kgdb.h>
-+#include <linux/init.h>
-+extern void int3(void);
-+extern void debug(void);
-+void set_intr_gate(unsigned int n, void *addr);
-+static void set_intr_usr_gate(unsigned int n, void *addr);
-+/*
-+ * Should be able to call this breakpoint() very early in
-+ * bring up. Just hard code the call where needed.
-+ * The breakpoint() code is here because set_?_gate() functions
-+ * are local (static) to trap.c. They need be done only once,
-+ * but it does not hurt to do them over.
-+ */
-+void breakpoint(void)
-+{
-+ set_intr_usr_gate(3,&int3); /* disable ints on trap */
-+ set_intr_gate(1,&debug);
-+ set_intr_gate(14,&page_fault);
-+
-+ BREAKPOINT;
-+}
-+#define CHK_REMOTE_DEBUG(trapnr,signr,error_code,regs,after) \
-+ { \
-+ if (!user_mode(regs) ) \
-+ { \
-+ kgdb_handle_exception(trapnr, signr, error_code, regs); \
-+ after; \
-+ } else if ((trapnr == 3) && (regs->eflags &0x200)) local_irq_enable(); \
-+ }
-+#else
-+#define CHK_REMOTE_DEBUG(trapnr,signr,error_code,regs,after)
-+#endif
-+
-+
- static int kstack_depth_to_print = 24;
-
- void show_trace(struct task_struct *task, unsigned long * stack)
-@@ -172,8 +208,9 @@ void show_registers(struct pt_regs *regs
- ss = regs->xss & 0xffff;
- }
- print_modules();
-- printk("CPU: %d\nEIP: %04x:[<%08lx>] %s\nEFLAGS: %08lx\n",
-- smp_processor_id(), 0xffff & regs->xcs, regs->eip, print_tainted(), regs->eflags);
-+ printk("CPU: %d\nEIP: %04x:[<%08lx>] %s VLI\nEFLAGS: %08lx\n",
-+ smp_processor_id(), 0xffff & regs->xcs,
-+ regs->eip, print_tainted(), regs->eflags);
-
- print_symbol("EIP is at %s\n", regs->eip);
- printk("eax: %08lx ebx: %08lx ecx: %08lx edx: %08lx\n",
-@@ -189,23 +226,25 @@ void show_registers(struct pt_regs *regs
- * time of the fault..
- */
- if (in_kernel) {
-+ u8 *eip;
-
- printk("\nStack: ");
- show_stack(NULL, (unsigned long*)esp);
-
- printk("Code: ");
-- if(regs->eip < PAGE_OFFSET)
-- goto bad;
-
-- for(i=0;i<20;i++)
-- {
-+ eip = (u8 *)regs->eip - 43;
-+ for (i = 0; i < 64; i++, eip++) {
- unsigned char c;
-- if(__get_user(c, &((unsigned char*)regs->eip)[i])) {
--bad:
-+
-+ if (eip < (u8 *)PAGE_OFFSET || __get_user(c, eip)) {
- printk(" Bad EIP value.");
- break;
- }
-- printk("%02x ", c);
-+ if (eip == (u8 *)regs->eip)
-+ printk("<%02x> ", c);
-+ else
-+ printk("%02x ", c);
- }
- }
- printk("\n");
-@@ -252,12 +291,36 @@ spinlock_t die_lock = SPIN_LOCK_UNLOCKED
- void die(const char * str, struct pt_regs * regs, long err)
- {
- static int die_counter;
-+ int nl = 0;
-
- console_verbose();
- spin_lock_irq(&die_lock);
- bust_spinlocks(1);
- handle_BUG(regs);
- printk("%s: %04lx [#%d]\n", str, err & 0xffff, ++die_counter);
-+#ifdef CONFIG_PREEMPT
-+ printk("PREEMPT ");
-+ nl = 1;
-+#endif
-+#ifdef CONFIG_SMP
-+ printk("SMP ");
-+ nl = 1;
-+#endif
-+#ifdef CONFIG_DEBUG_PAGEALLOC
-+ printk("DEBUG_PAGEALLOC");
-+ nl = 1;
-+#endif
-+ if (nl)
-+ printk("\n");
-+#ifdef CONFIG_KGDB
-+ /* This is about the only place we want to go to kgdb even if in
-+ * user mode. But we must go in via a trap so within kgdb we will
-+ * always be in kernel mode.
-+ */
-+ if (user_mode(regs))
-+ BREAKPOINT;
-+#endif
-+ CHK_REMOTE_DEBUG(0,SIGTRAP,err,regs,)
- show_registers(regs);
- bust_spinlocks(0);
- spin_unlock_irq(&die_lock);
-@@ -327,6 +390,7 @@ static inline void do_trap(int trapnr, i
- #define DO_ERROR(trapnr, signr, str, name) \
- asmlinkage void do_##name(struct pt_regs * regs, long error_code) \
- { \
-+ CHK_REMOTE_DEBUG(trapnr,signr,error_code,regs,)\
- do_trap(trapnr, signr, str, 0, regs, error_code, NULL); \
- }
-
-@@ -344,7 +408,9 @@ asmlinkage void do_##name(struct pt_regs
- #define DO_VM86_ERROR(trapnr, signr, str, name) \
- asmlinkage void do_##name(struct pt_regs * regs, long error_code) \
- { \
-+ CHK_REMOTE_DEBUG(trapnr, signr, error_code,regs, return)\
- do_trap(trapnr, signr, str, 1, regs, error_code, NULL); \
-+ return; \
- }
-
- #define DO_VM86_ERROR_INFO(trapnr, signr, str, name, sicode, siaddr) \
-@@ -387,8 +453,10 @@ gp_in_vm86:
- return;
-
- gp_in_kernel:
-- if (!fixup_exception(regs))
-+ if (!fixup_exception(regs)){
-+ CHK_REMOTE_DEBUG(13,SIGSEGV,error_code,regs,)
- die("general protection fault", regs, error_code);
-+ }
- }
-
- static void mem_parity_error(unsigned char reason, struct pt_regs * regs)
-@@ -550,8 +618,18 @@ asmlinkage void do_debug(struct pt_regs
- * allowing programs to debug themselves without the ptrace()
- * interface.
- */
-- if ((regs->xcs & 3) == 0)
-+#ifdef CONFIG_KGDB
-+ /*
-+ * I think this is the only "real" case of a TF in the kernel
-+ * that really belongs to user space. Others are
-+ * "Ours all ours!"
-+ */
-+ if (((regs->xcs & 3) == 0) && ((void *)regs->eip == sysenter_entry))
-+ goto clear_TF_reenable;
-+#else
-+ if ((regs->xcs & 3) == 0)
- goto clear_TF_reenable;
-+#endif
- if ((tsk->ptrace & (PT_DTRACE|PT_PTRACED)) == PT_DTRACE)
- goto clear_TF;
- }
-@@ -563,6 +641,17 @@ asmlinkage void do_debug(struct pt_regs
- info.si_errno = 0;
- info.si_code = TRAP_BRKPT;
-
-+#ifdef CONFIG_KGDB
-+ /*
-+ * If this is a kernel mode trap, we need to reset db7 to allow us
-+ * to continue sanely ALSO skip the signal delivery
-+ */
-+ if ((regs->xcs & 3) == 0)
-+ goto clear_dr7;
-+
-+ /* if not kernel, allow ints but only if they were on */
-+ if ( regs->eflags & 0x200) local_irq_enable();
-+#endif
- /* If this is a kernel mode trap, save the user PC on entry to
- * the kernel, that's what the debugger can make sense of.
- */
-@@ -577,6 +666,7 @@ clear_dr7:
- __asm__("movl %0,%%db7"
- : /* no output */
- : "r" (0));
-+ CHK_REMOTE_DEBUG(1,SIGTRAP,error_code,regs,)
- return;
-
- debug_vm86:
-@@ -823,6 +913,12 @@ static void __init set_call_gate(void *a
- {
- _set_gate(a,12,3,addr,__KERNEL_CS);
- }
-+#ifdef CONFIG_KGDB
-+void set_intr_usr_gate(unsigned int n, void *addr)
-+{
-+ _set_gate(idt_table+n,14,3,addr,__KERNEL_CS);
-+}
-+#endif
-
- static void __init set_task_gate(unsigned int n, unsigned int gdt_entry)
- {
-@@ -849,7 +945,11 @@ void __init trap_init(void)
- set_trap_gate(0,÷_error);
- set_intr_gate(1,&debug);
- set_intr_gate(2,&nmi);
-+#ifndef CONFIG_KGDB
- set_system_gate(3,&int3); /* int3-5 can be called from all */
-+#else
-+ set_intr_usr_gate(3,&int3); /* int3-5 can be called from all */
-+#endif
- set_system_gate(4,&overflow);
- set_system_gate(5,&bounds);
- set_trap_gate(6,&invalid_op);
---- linux-2.6.0-test1/arch/i386/kernel/vm86.c 2003-06-14 12:17:58.000000000 -0700
-+++ 25/arch/i386/kernel/vm86.c 2003-07-19 17:07:16.000000000 -0700
-@@ -144,12 +144,14 @@ static void mark_screen_rdonly(struct ta
- pgd_clear(pgd);
- goto out;
- }
-- pmd = pmd_offset(pgd, 0xA0000);
-- if (pmd_none(*pmd))
-+ pmd = pmd_offset_map(pgd, 0xA0000);
-+ if (pmd_none(*pmd)) {
-+ pmd_unmap(pmd);
- goto out;
-- if (pmd_bad(*pmd)) {
-+ } else if (pmd_bad(*pmd)) {
- pmd_ERROR(*pmd);
- pmd_clear(pmd);
-+ pmd_unmap(pmd);
- goto out;
- }
- pte = mapped = pte_offset_map(pmd, 0xA0000);
-@@ -159,6 +161,7 @@ static void mark_screen_rdonly(struct ta
- pte++;
- }
- pte_unmap(mapped);
-+ pmd_unmap(pmd);
- out:
- spin_unlock(&tsk->mm->page_table_lock);
- preempt_enable();
---- linux-2.6.0-test1/arch/i386/lib/dec_and_lock.c 2003-06-26 22:07:23.000000000 -0700
-+++ 25/arch/i386/lib/dec_and_lock.c 2003-07-19 17:06:40.000000000 -0700
-@@ -10,6 +10,7 @@
- #include <linux/spinlock.h>
- #include <asm/atomic.h>
-
-+#ifndef ATOMIC_DEC_AND_LOCK
- int atomic_dec_and_lock(atomic_t *atomic, spinlock_t *lock)
- {
- int counter;
-@@ -38,3 +39,5 @@ slow_path:
- spin_unlock(lock);
- return 0;
- }
-+#endif
-+
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/arch/i386/lib/kgdb_serial.c 2003-07-19 17:04:02.000000000 -0700
-@@ -0,0 +1,485 @@
-+/*
-+ * Serial interface GDB stub
-+ *
-+ * Written (hacked together) by David Grothe (dave@gcom.com)
-+ * Modified to allow invokation early in boot see also
-+ * kgdb.h for instructions by George Anzinger(george@mvista.com)
-+ *
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/errno.h>
-+#include <linux/signal.h>
-+#include <linux/sched.h>
-+#include <linux/timer.h>
-+#include <linux/interrupt.h>
-+#include <linux/tty.h>
-+#include <linux/tty_flip.h>
-+#include <linux/serial.h>
-+#include <linux/serial_reg.h>
-+#include <linux/config.h>
-+#include <linux/major.h>
-+#include <linux/string.h>
-+#include <linux/fcntl.h>
-+#include <linux/ptrace.h>
-+#include <linux/ioport.h>
-+#include <linux/mm.h>
-+#include <linux/init.h>
-+#include <linux/highmem.h>
-+#include <asm/system.h>
-+#include <asm/io.h>
-+#include <asm/segment.h>
-+#include <asm/bitops.h>
-+#include <asm/system.h>
-+#include <asm/kgdb_local.h>
-+#ifdef CONFIG_KGDB_USER_CONSOLE
-+extern void kgdb_console_finit(void);
-+#endif
-+#define PRNT_off
-+#define TEST_EXISTANCE
-+#ifdef PRNT
-+#define dbprintk(s) printk s
-+#else
-+#define dbprintk(s)
-+#endif
-+#define TEST_INTERRUPT_off
-+#ifdef TEST_INTERRUPT
-+#define intprintk(s) printk s
-+#else
-+#define intprintk(s)
-+#endif
-+
-+#define IRQ_T(info) ((info->flags & ASYNC_SHARE_IRQ) ? SA_SHIRQ : SA_INTERRUPT)
-+
-+#define GDB_BUF_SIZE 512 /* power of 2, please */
-+
-+static char gdb_buf[GDB_BUF_SIZE];
-+static int gdb_buf_in_inx;
-+static atomic_t gdb_buf_in_cnt;
-+static int gdb_buf_out_inx;
-+
-+struct async_struct *gdb_async_info;
-+static int gdb_async_irq;
-+
-+#define outb_px(a,b) outb_p(b,a)
-+
-+static void program_uart(struct async_struct *info);
-+static void write_char(struct async_struct *info, int chr);
-+/*
-+ * Get a byte from the hardware data buffer and return it
-+ */
-+static int
-+read_data_bfr(struct async_struct *info)
-+{
-+ char it = inb_p(info->port + UART_LSR);
-+
-+ if (it & UART_LSR_DR)
-+ return (inb_p(info->port + UART_RX));
-+ /*
-+ * If we have a framing error assume somebody messed with
-+ * our uart. Reprogram it and send '-' both ways...
-+ */
-+ if (it & 0xc) {
-+ program_uart(info);
-+ write_char(info, '-');
-+ return ('-');
-+ }
-+ return (-1);
-+
-+} /* read_data_bfr */
-+
-+/*
-+ * Get a char if available, return -1 if nothing available.
-+ * Empty the receive buffer first, then look at the interface hardware.
-+
-+ * Locking here is a bit of a problem. We MUST not lock out communication
-+ * if we are trying to talk to gdb about a kgdb entry. ON the other hand
-+ * we can loose chars in the console pass thru if we don't lock. It is also
-+ * possible that we could hold the lock or be waiting for it when kgdb
-+ * NEEDS to talk. Since kgdb locks down the world, it does not need locks.
-+ * We do, of course have possible issues with interrupting a uart operation,
-+ * but we will just depend on the uart status to help keep that straight.
-+
-+ */
-+static spinlock_t uart_interrupt_lock = SPIN_LOCK_UNLOCKED;
-+#ifdef CONFIG_SMP
-+extern spinlock_t kgdb_spinlock;
-+#endif
-+
-+static int
-+read_char(struct async_struct *info)
-+{
-+ int chr;
-+ unsigned long flags;
-+ local_irq_save(flags);
-+#ifdef CONFIG_SMP
-+ if (!spin_is_locked(&kgdb_spinlock)) {
-+ spin_lock(&uart_interrupt_lock);
-+ }
-+#endif
-+ if (atomic_read(&gdb_buf_in_cnt) != 0) { /* intr routine has q'd chars */
-+ chr = gdb_buf[gdb_buf_out_inx++];
-+ gdb_buf_out_inx &= (GDB_BUF_SIZE - 1);
-+ atomic_dec(&gdb_buf_in_cnt);
-+ } else {
-+ chr = read_data_bfr(info);
-+ }
-+#ifdef CONFIG_SMP
-+ if (!spin_is_locked(&kgdb_spinlock)) {
-+ spin_unlock(&uart_interrupt_lock);
-+ }
-+#endif
-+ local_irq_restore(flags);
-+ return (chr);
-+}
-+
-+/*
-+ * Wait until the interface can accept a char, then write it.
-+ */
-+static void
-+write_char(struct async_struct *info, int chr)
-+{
-+ while (!(inb_p(info->port + UART_LSR) & UART_LSR_THRE)) ;
-+
-+ outb_p(chr, info->port + UART_TX);
-+
-+} /* write_char */
-+
-+/*
-+ * Mostly we don't need a spinlock, but since the console goes
-+ * thru here with interrutps on, well, we need to catch those
-+ * chars.
-+ */
-+/*
-+ * This is the receiver interrupt routine for the GDB stub.
-+ * It will receive a limited number of characters of input
-+ * from the gdb host machine and save them up in a buffer.
-+ *
-+ * When the gdb stub routine getDebugChar() is called it
-+ * draws characters out of the buffer until it is empty and
-+ * then reads directly from the serial port.
-+ *
-+ * We do not attempt to write chars from the interrupt routine
-+ * since the stubs do all of that via putDebugChar() which
-+ * writes one byte after waiting for the interface to become
-+ * ready.
-+ *
-+ * The debug stubs like to run with interrupts disabled since,
-+ * after all, they run as a consequence of a breakpoint in
-+ * the kernel.
-+ *
-+ * Perhaps someone who knows more about the tty driver than I
-+ * care to learn can make this work for any low level serial
-+ * driver.
-+ */
-+static irqreturn_t
-+gdb_interrupt(int irq, void *dev_id, struct pt_regs *regs)
-+{
-+ struct async_struct *info;
-+ unsigned long flags;
-+
-+ info = gdb_async_info;
-+ if (!info || !info->tty || irq != gdb_async_irq)
-+ return IRQ_NONE;
-+
-+ local_irq_save(flags);
-+ spin_lock(&uart_interrupt_lock);
-+ do {
-+ int chr = read_data_bfr(info);
-+ intprintk(("Debug char on int: %x hex\n", chr));
-+ if (chr < 0)
-+ continue;
-+
-+ if (chr == 3) { /* Ctrl-C means remote interrupt */
-+ BREAKPOINT;
-+ continue;
-+ }
-+
-+ if (atomic_read(&gdb_buf_in_cnt) >= GDB_BUF_SIZE) {
-+ /* buffer overflow tosses early char */
-+ read_char(info);
-+ }
-+ gdb_buf[gdb_buf_in_inx++] = chr;
-+ gdb_buf_in_inx &= (GDB_BUF_SIZE - 1);
-+ } while (inb_p(info->port + UART_IIR) & UART_IIR_RDI);
-+ spin_unlock(&uart_interrupt_lock);
-+ local_irq_restore(flags);
-+ return IRQ_HANDLED;
-+} /* gdb_interrupt */
-+
-+/*
-+ * Just a NULL routine for testing.
-+ */
-+void
-+gdb_null(void)
-+{
-+} /* gdb_null */
-+
-+/* These structure are filled in with values defined in asm/kgdb_local.h
-+ */
-+static struct serial_state state = SB_STATE;
-+static struct async_struct local_info = SB_INFO;
-+static int ok_to_enable_ints = 0;
-+static void kgdb_enable_ints_now(void);
-+
-+extern char *kgdb_version;
-+/*
-+ * Hook an IRQ for KGDB.
-+ *
-+ * This routine is called from putDebugChar, below.
-+ */
-+static int ints_disabled = 1;
-+int
-+gdb_hook_interrupt(struct async_struct *info, int verb)
-+{
-+ struct serial_state *state = info->state;
-+ unsigned long flags;
-+ int port;
-+#ifdef TEST_EXISTANCE
-+ int scratch, scratch2;
-+#endif
-+
-+ /* The above fails if memory managment is not set up yet.
-+ * Rather than fail the set up, just keep track of the fact
-+ * and pick up the interrupt thing later.
-+ */
-+ gdb_async_info = info;
-+ port = gdb_async_info->port;
-+ gdb_async_irq = state->irq;
-+ if (verb) {
-+ printk("kgdb %s : port =%x, IRQ=%d, divisor =%d\n",
-+ kgdb_version,
-+ port,
-+ gdb_async_irq, gdb_async_info->state->custom_divisor);
-+ }
-+ local_irq_save(flags);
-+#ifdef TEST_EXISTANCE
-+ /* Existance test */
-+ /* Should not need all this, but just in case.... */
-+
-+ scratch = inb_p(port + UART_IER);
-+ outb_px(port + UART_IER, 0);
-+ outb_px(0xff, 0x080);
-+ scratch2 = inb_p(port + UART_IER);
-+ outb_px(port + UART_IER, scratch);
-+ if (scratch2) {
-+ printk
-+ ("gdb_hook_interrupt: Could not clear IER, not a UART!\n");
-+ local_irq_restore(flags);
-+ return 1; /* We failed; there's nothing here */
-+ }
-+ scratch2 = inb_p(port + UART_LCR);
-+ outb_px(port + UART_LCR, 0xBF); /* set up for StarTech test */
-+ outb_px(port + UART_EFR, 0); /* EFR is the same as FCR */
-+ outb_px(port + UART_LCR, 0);
-+ outb_px(port + UART_FCR, UART_FCR_ENABLE_FIFO);
-+ scratch = inb_p(port + UART_IIR) >> 6;
-+ if (scratch == 1) {
-+ printk("gdb_hook_interrupt: Undefined UART type!"
-+ " Not a UART! \n");
-+ local_irq_restore(flags);
-+ return 1;
-+ } else {
-+ dbprintk(("gdb_hook_interrupt: UART type "
-+ "is %d where 0=16450, 2=16550 3=16550A\n", scratch));
-+ }
-+ scratch = inb_p(port + UART_MCR);
-+ outb_px(port + UART_MCR, UART_MCR_LOOP | scratch);
-+ outb_px(port + UART_MCR, UART_MCR_LOOP | 0x0A);
-+ scratch2 = inb_p(port + UART_MSR) & 0xF0;
-+ outb_px(port + UART_MCR, scratch);
-+ if (scratch2 != 0x90) {
-+ printk("gdb_hook_interrupt: "
-+ "Loop back test failed! Not a UART!\n");
-+ local_irq_restore(flags);
-+ return scratch2 + 1000; /* force 0 to fail */
-+ }
-+#endif /* test existance */
-+ program_uart(info);
-+ local_irq_restore(flags);
-+
-+ return (0);
-+
-+} /* gdb_hook_interrupt */
-+
-+static void
-+program_uart(struct async_struct *info)
-+{
-+ int port = info->port;
-+
-+ (void) inb_p(port + UART_RX);
-+ outb_px(port + UART_IER, 0);
-+
-+ (void) inb_p(port + UART_RX); /* serial driver comments say */
-+ (void) inb_p(port + UART_IIR); /* this clears the interrupt regs */
-+ (void) inb_p(port + UART_MSR);
-+ outb_px(port + UART_LCR, UART_LCR_WLEN8 | UART_LCR_DLAB);
-+ outb_px(port + UART_DLL, info->state->custom_divisor & 0xff); /* LS */
-+ outb_px(port + UART_DLM, info->state->custom_divisor >> 8); /* MS */
-+ outb_px(port + UART_MCR, info->MCR);
-+
-+ outb_px(port + UART_FCR, UART_FCR_ENABLE_FIFO | UART_FCR_TRIGGER_1 | UART_FCR_CLEAR_XMIT | UART_FCR_CLEAR_RCVR); /* set fcr */
-+ outb_px(port + UART_LCR, UART_LCR_WLEN8); /* reset DLAB */
-+ outb_px(port + UART_FCR, UART_FCR_ENABLE_FIFO | UART_FCR_TRIGGER_1); /* set fcr */
-+ if (!ints_disabled) {
-+ intprintk(("KGDB: Sending %d to port %x offset %d\n",
-+ gdb_async_info->IER,
-+ (int) gdb_async_info->port, UART_IER));
-+ outb_px(gdb_async_info->port + UART_IER, gdb_async_info->IER);
-+ }
-+ return;
-+}
-+
-+/*
-+ * getDebugChar
-+ *
-+ * This is a GDB stub routine. It waits for a character from the
-+ * serial interface and then returns it. If there is no serial
-+ * interface connection then it returns a bogus value which will
-+ * almost certainly cause the system to hang. In the
-+ */
-+int kgdb_in_isr = 0;
-+int kgdb_in_lsr = 0;
-+extern spinlock_t kgdb_spinlock;
-+
-+/* Caller takes needed protections */
-+
-+int
-+getDebugChar(void)
-+{
-+ volatile int chr, dum, time, end_time;
-+
-+ dbprintk(("getDebugChar(port %x): ", gdb_async_info->port));
-+
-+ if (gdb_async_info == NULL) {
-+ gdb_hook_interrupt(&local_info, 0);
-+ }
-+ /*
-+ * This trick says if we wait a very long time and get
-+ * no char, return the -1 and let the upper level deal
-+ * with it.
-+ */
-+ rdtsc(dum, time);
-+ end_time = time + 2;
-+ while (((chr = read_char(gdb_async_info)) == -1) &&
-+ (end_time - time) > 0) {
-+ rdtsc(dum, time);
-+ };
-+ /*
-+ * This covers our butts if some other code messes with
-+ * our uart, hay, it happens :o)
-+ */
-+ if (chr == -1)
-+ program_uart(gdb_async_info);
-+
-+ dbprintk(("%c\n", chr > ' ' && chr < 0x7F ? chr : ' '));
-+ return (chr);
-+
-+} /* getDebugChar */
-+
-+static int count = 3;
-+static spinlock_t one_at_atime = SPIN_LOCK_UNLOCKED;
-+
-+static int __init
-+kgdb_enable_ints(void)
-+{
-+ if (gdb_async_info == NULL) {
-+ gdb_hook_interrupt(&local_info, 1);
-+ }
-+ ok_to_enable_ints = 1;
-+ kgdb_enable_ints_now();
-+#ifdef CONFIG_KGDB_USER_CONSOLE
-+ kgdb_console_finit();
-+#endif
-+ return 0;
-+}
-+
-+#ifdef CONFIG_SERIAL_8250
-+void shutdown_for_kgdb(struct async_struct *gdb_async_info);
-+#endif
-+
-+#ifdef CONFIG_DISCONTIGMEM
-+static inline int kgdb_mem_init_done(void)
-+{
-+ return highmem_start_page != NULL;
-+}
-+#else
-+static inline int kgdb_mem_init_done(void)
-+{
-+ return max_mapnr != 0;
-+}
-+#endif
-+
-+static void
-+kgdb_enable_ints_now(void)
-+{
-+ if (!spin_trylock(&one_at_atime))
-+ return;
-+ if (!ints_disabled)
-+ goto exit;
-+ if (kgdb_mem_init_done() &&
-+ ints_disabled) { /* don't try till mem init */
-+#ifdef CONFIG_SERIAL_8250
-+ /*
-+ * The ifdef here allows the system to be configured
-+ * without the serial driver.
-+ * Don't make it a module, however, it will steal the port
-+ */
-+ shutdown_for_kgdb(gdb_async_info);
-+#endif
-+ ints_disabled = request_irq(gdb_async_info->state->irq,
-+ gdb_interrupt,
-+ IRQ_T(gdb_async_info),
-+ "KGDB-stub", NULL);
-+ intprintk(("KGDB: request_irq returned %d\n", ints_disabled));
-+ }
-+ if (!ints_disabled) {
-+ intprintk(("KGDB: Sending %d to port %x offset %d\n",
-+ gdb_async_info->IER,
-+ (int) gdb_async_info->port, UART_IER));
-+ outb_px(gdb_async_info->port + UART_IER, gdb_async_info->IER);
-+ }
-+ exit:
-+ spin_unlock(&one_at_atime);
-+}
-+
-+/*
-+ * putDebugChar
-+ *
-+ * This is a GDB stub routine. It waits until the interface is ready
-+ * to transmit a char and then sends it. If there is no serial
-+ * interface connection then it simply returns to its caller, having
-+ * pretended to send the char. Caller takes needed protections.
-+ */
-+void
-+putDebugChar(int chr)
-+{
-+ dbprintk(("putDebugChar(port %x): chr=%02x '%c', ints_on=%d\n",
-+ gdb_async_info->port,
-+ chr,
-+ chr > ' ' && chr < 0x7F ? chr : ' ', ints_disabled ? 0 : 1));
-+
-+ if (gdb_async_info == NULL) {
-+ gdb_hook_interrupt(&local_info, 0);
-+ }
-+
-+ write_char(gdb_async_info, chr); /* this routine will wait */
-+ count = (chr == '#') ? 0 : count + 1;
-+ if ((count == 2)) { /* try to enable after */
-+ if (ints_disabled & ok_to_enable_ints)
-+ kgdb_enable_ints_now(); /* try to enable after */
-+
-+ /* We do this a lot because, well we really want to get these
-+ * interrupts. The serial driver will clear these bits when it
-+ * initializes the chip. Every thing else it does is ok,
-+ * but this.
-+ */
-+ if (!ints_disabled) {
-+ outb_px(gdb_async_info->port + UART_IER,
-+ gdb_async_info->IER);
-+ }
-+ }
-+
-+} /* putDebugChar */
-+
-+module_init(kgdb_enable_ints);
---- linux-2.6.0-test1/arch/i386/lib/Makefile 2003-06-26 22:07:23.000000000 -0700
-+++ 25/arch/i386/lib/Makefile 2003-07-19 17:04:02.000000000 -0700
-@@ -9,4 +9,5 @@ lib-y = checksum.o delay.o \
-
- lib-$(CONFIG_X86_USE_3DNOW) += mmx.o
- lib-$(CONFIG_HAVE_DEC_LOCK) += dec_and_lock.o
-+lib-$(CONFIG_KGDB) += kgdb_serial.o
- lib-$(CONFIG_DEBUG_IOVIRT) += iodebug.o
---- linux-2.6.0-test1/arch/i386/mach-generic/bigsmp.c 2003-06-14 12:18:05.000000000 -0700
-+++ 25/arch/i386/mach-generic/bigsmp.c 2003-07-19 17:04:13.000000000 -0700
-@@ -3,6 +3,10 @@
- * Drives the local APIC in "clustered mode".
- */
- #define APIC_DEFINITION 1
-+#include <linux/config.h>
-+#include <linux/threads.h>
-+#include <linux/cpumask.h>
-+#include <asm/mpspec.h>
- #include <asm/genapic.h>
- #include <asm/fixmap.h>
- #include <asm/apicdef.h>
---- linux-2.6.0-test1/arch/i386/mach-generic/default.c 2003-06-14 12:17:57.000000000 -0700
-+++ 25/arch/i386/mach-generic/default.c 2003-07-19 17:04:13.000000000 -0700
-@@ -2,6 +2,10 @@
- * Default generic APIC driver. This handles upto 8 CPUs.
- */
- #define APIC_DEFINITION 1
-+#include <linux/config.h>
-+#include <linux/threads.h>
-+#include <linux/cpumask.h>
-+#include <asm/mpspec.h>
- #include <asm/mach-default/mach_apicdef.h>
- #include <asm/genapic.h>
- #include <asm/fixmap.h>
---- linux-2.6.0-test1/arch/i386/mach-generic/probe.c 2003-06-14 12:17:57.000000000 -0700
-+++ 25/arch/i386/mach-generic/probe.c 2003-07-19 17:04:13.000000000 -0700
-@@ -3,11 +3,15 @@
- *
- * Generic x86 APIC driver probe layer.
- */
-+#include <linux/config.h>
-+#include <linux/threads.h>
-+#include <linux/cpumask.h>
- #include <linux/string.h>
- #include <linux/kernel.h>
- #include <linux/ctype.h>
- #include <linux/init.h>
- #include <asm/fixmap.h>
-+#include <asm/mpspec.h>
- #include <asm/apicdef.h>
- #include <asm/genapic.h>
-
---- linux-2.6.0-test1/arch/i386/mach-generic/summit.c 2003-06-14 12:18:34.000000000 -0700
-+++ 25/arch/i386/mach-generic/summit.c 2003-07-19 17:04:13.000000000 -0700
-@@ -2,6 +2,10 @@
- * APIC driver for the IBM "Summit" chipset.
- */
- #define APIC_DEFINITION 1
-+#include <linux/config.h>
-+#include <linux/threads.h>
-+#include <linux/cpumask.h>
-+#include <asm/mpspec.h>
- #include <asm/genapic.h>
- #include <asm/fixmap.h>
- #include <asm/apicdef.h>
---- linux-2.6.0-test1/arch/i386/mach-visws/mpparse.c 2003-06-14 12:18:04.000000000 -0700
-+++ 25/arch/i386/mach-visws/mpparse.c 2003-07-19 17:04:06.000000000 -0700
-@@ -26,7 +26,7 @@ unsigned int boot_cpu_physical_apicid =
- unsigned int boot_cpu_logical_apicid = -1U;
-
- /* Bitmask of physically existing CPUs */
--unsigned long phys_cpu_present_map;
-+cpumask_t phys_cpu_present_map;
-
-
- /*
-@@ -38,6 +38,7 @@ unsigned long phys_cpu_present_map;
- void __init MP_processor_info (struct mpc_config_processor *m)
- {
- int ver, logical_apicid;
-+ cpumask_t apic_cpus;
-
- if (!(m->mpc_cpuflag & CPU_ENABLED))
- return;
-@@ -62,7 +63,8 @@ void __init MP_processor_info (struct mp
- }
- ver = m->mpc_apicver;
-
-- phys_cpu_present_map |= apicid_to_cpu_present(m->mpc_apicid);
-+ apic_cpus = apicid_to_cpu_present(m->mpc_apicid);
-+ cpus_or(phys_cpu_present_map, phys_cpu_present_map, apic_cpus);
- /*
- * Validate version
- */
---- linux-2.6.0-test1/arch/i386/mach-voyager/voyager_smp.c 2003-06-14 12:18:07.000000000 -0700
-+++ 25/arch/i386/mach-voyager/voyager_smp.c 2003-07-19 17:04:06.000000000 -0700
-@@ -75,15 +75,15 @@ static int voyager_extended_cpus = 1;
- int smp_found_config = 0;
-
- /* Used for the invalidate map that's also checked in the spinlock */
--volatile unsigned long smp_invalidate_needed;
-+static volatile unsigned long smp_invalidate_needed;
-
- /* Bitmask of currently online CPUs - used by setup.c for
- /proc/cpuinfo, visible externally but still physical */
--unsigned long cpu_online_map = 0;
-+cpumask_t cpu_online_map = CPU_MASK_NONE;
-
- /* Bitmask of CPUs present in the system - exported by i386_syms.c, used
- * by scheduler but indexed physically */
--unsigned long phys_cpu_present_map = 0;
-+cpumask_t phys_cpu_present_map = CPU_MASK_NONE;
-
- /* estimate of time used to flush the SMP-local cache - used in
- * processor affinity calculations */
-@@ -108,7 +108,7 @@ static void enable_local_vic_irq(unsigne
- static void disable_local_vic_irq(unsigned int irq);
- static void before_handle_vic_irq(unsigned int irq);
- static void after_handle_vic_irq(unsigned int irq);
--static void set_vic_irq_affinity(unsigned int irq, unsigned long mask);
-+static void set_vic_irq_affinity(unsigned int irq, cpumask_t mask);
- static void ack_vic_irq(unsigned int irq);
- static void vic_enable_cpi(void);
- static void do_boot_cpu(__u8 cpuid);
-@@ -128,13 +128,12 @@ send_one_QIC_CPI(__u8 cpu, __u8 cpi)
- static inline void
- send_QIC_CPI(__u32 cpuset, __u8 cpi)
- {
-- int mask;
-- __u8 cpu;
-+ int cpu;
-
-- for_each_cpu(cpu, mask) {
-+ for_each_cpu(cpu, mk_cpumask_const(cpu_online_map)) {
- if(cpuset & (1<<cpu)) {
- #ifdef VOYAGER_DEBUG
-- if(!test_bit(cpu, cpu_online_map))
-+ if(!cpu_isset(cpu, cpu_online_map))
- VDEBUG(("CPU%d sending cpi %d to CPU%d not in cpu_online_map\n", hard_smp_processor_id(), cpi, cpu));
- #endif
- send_one_QIC_CPI(cpu, cpi - QIC_CPI_OFFSET);
-@@ -155,7 +154,7 @@ static inline void
- send_CPI_allbutself(__u8 cpi)
- {
- __u8 cpu = smp_processor_id();
-- __u32 mask = (cpu_online_map & (~(1<<cpu)));
-+ __u32 mask = cpus_coerce(cpu_online_map) & ~(1 << cpu);
- send_CPI(mask, cpi);
- }
-
-@@ -243,11 +242,11 @@ static __u32 cpu_booted_map;
-
- /* the synchronize flag used to hold all secondary CPUs spinning in
- * a tight loop until the boot sequence is ready for them */
--static unsigned long smp_commenced_mask = 0;
-+static cpumask_t smp_commenced_mask = CPU_MASK_NONE;
-
- /* This is for the new dynamic CPU boot code */
--volatile unsigned long cpu_callin_map = 0;
--volatile unsigned long cpu_callout_map = 0;
-+volatile cpumask_t cpu_callin_map = CPU_MASK_NONE;
-+volatile cpumask_t cpu_callout_map = CPU_MASK_NONE;
-
- /* The per processor IRQ masks (these are usually kept in sync) */
- static __u16 vic_irq_mask[NR_CPUS] __cacheline_aligned;
-@@ -395,7 +394,7 @@ find_smp_config(void)
- for(i=0; i<NR_CPUS; i++) {
- cpu_irq_affinity[i] = ~0;
- }
-- cpu_online_map = (1<<boot_cpu_id);
-+ cpu_online_map = cpumask_of_cpu(boot_cpu_id);
-
- /* The boot CPU must be extended */
- voyager_extended_vic_processors = 1<<boot_cpu_id;
-@@ -404,11 +403,11 @@ find_smp_config(void)
- /* set up everything for just this CPU, we can alter
- * this as we start the other CPUs later */
- /* now get the CPU disposition from the extended CMOS */
-- phys_cpu_present_map = voyager_extended_cmos_read(VOYAGER_PROCESSOR_PRESENT_MASK);
-- phys_cpu_present_map |= voyager_extended_cmos_read(VOYAGER_PROCESSOR_PRESENT_MASK + 1) << 8;
-- phys_cpu_present_map |= voyager_extended_cmos_read(VOYAGER_PROCESSOR_PRESENT_MASK + 2) << 16;
-- phys_cpu_present_map |= voyager_extended_cmos_read(VOYAGER_PROCESSOR_PRESENT_MASK + 3) << 24;
-- printk("VOYAGER SMP: phys_cpu_present_map = 0x%lx\n", phys_cpu_present_map);
-+ phys_cpu_present_map = cpus_promote(voyager_extended_cmos_read(VOYAGER_PROCESSOR_PRESENT_MASK));
-+ cpus_coerce(phys_cpu_present_map) |= voyager_extended_cmos_read(VOYAGER_PROCESSOR_PRESENT_MASK + 1) << 8;
-+ cpus_coerce(phys_cpu_present_map) |= voyager_extended_cmos_read(VOYAGER_PROCESSOR_PRESENT_MASK + 2) << 16;
-+ cpus_coerce(phys_cpu_present_map) |= voyager_extended_cmos_read(VOYAGER_PROCESSOR_PRESENT_MASK + 3) << 24;
-+ printk("VOYAGER SMP: phys_cpu_present_map = 0x%lx\n", cpus_coerce(phys_cpu_present_map));
- /* Here we set up the VIC to enable SMP */
- /* enable the CPIs by writing the base vector to their register */
- outb(VIC_DEFAULT_CPI_BASE, VIC_CPI_BASE_REGISTER);
-@@ -509,18 +508,18 @@ start_secondary(void *unused)
- * permission to proceed. Without this, the new per CPU stuff
- * in the softirqs will fail */
- local_irq_disable();
-- set_bit(cpuid, &cpu_callin_map);
-+ cpu_set(cpuid, cpu_callin_map);
-
- /* signal that we're done */
- cpu_booted_map = 1;
-
-- while (!test_bit(cpuid, &smp_commenced_mask))
-+ while (!cpu_isset(cpuid, smp_commenced_mask))
- rep_nop();
- local_irq_enable();
-
- local_flush_tlb();
-
-- set_bit(cpuid, &cpu_online_map);
-+ cpu_set(cpuid, cpu_online_map);
- wmb();
- return cpu_idle();
- }
-@@ -674,14 +673,14 @@ do_boot_cpu(__u8 cpu)
- free_page((unsigned long)page_table_copies);
- #endif
-
-- if(cpu_booted_map) {
-+ if (cpu_booted_map) {
- VDEBUG(("CPU%d: Booted successfully, back in CPU %d\n",
- cpu, smp_processor_id()));
-
- printk("CPU%d: ", cpu);
- print_cpu_info(&cpu_data[cpu]);
- wmb();
-- set_bit(cpu, &cpu_callout_map);
-+ cpu_set(cpu, cpu_callout_map);
- }
- else {
- printk("CPU%d FAILED TO BOOT: ", cpu);
-@@ -708,13 +707,12 @@ smp_boot_cpus(void)
- /* now that the cat has probed the Voyager System Bus, sanity
- * check the cpu map */
- if( ((voyager_quad_processors | voyager_extended_vic_processors)
-- & phys_cpu_present_map) != phys_cpu_present_map) {
-+ & cpus_coerce(phys_cpu_present_map)) != cpus_coerce(phys_cpu_present_map)) {
- /* should panic */
- printk("\n\n***WARNING*** Sanity check of CPU present map FAILED\n");
- }
-- } else if(voyager_level == 4) {
-- voyager_extended_vic_processors = phys_cpu_present_map;
-- }
-+ } else if(voyager_level == 4)
-+ voyager_extended_vic_processors = cpus_coerce(phys_cpu_present_map);
-
- /* this sets up the idle task to run on the current cpu */
- voyager_extended_cpus = 1;
-@@ -740,13 +738,13 @@ smp_boot_cpus(void)
- /* enable our own CPIs */
- vic_enable_cpi();
-
-- set_bit(boot_cpu_id, &cpu_online_map);
-- set_bit(boot_cpu_id, &cpu_callout_map);
-+ cpu_set(boot_cpu_id, cpu_online_map);
-+ cpu_set(boot_cpu_id, cpu_callout_map);
-
- /* loop over all the extended VIC CPUs and boot them. The
- * Quad CPUs must be bootstrapped by their extended VIC cpu */
- for(i = 0; i < NR_CPUS; i++) {
-- if( i == boot_cpu_id || ((1<<i) & (phys_cpu_present_map) ) == 0)
-+ if(i == boot_cpu_id || !cpu_isset(i, phys_cpu_present_map))
- continue;
- do_boot_cpu(i);
- /* This udelay seems to be needed for the Quad boots
-@@ -758,7 +756,7 @@ smp_boot_cpus(void)
- {
- unsigned long bogosum = 0;
- for (i = 0; i < NR_CPUS; i++)
-- if (cpu_online_map & (1<<i))
-+ if (cpu_isset(i, cpu_online_map))
- bogosum += cpu_data[i].loops_per_jiffy;
- printk(KERN_INFO "Total of %d processors activated (%lu.%02lu BogoMIPS).\n",
- cpucount+1,
-@@ -865,7 +863,7 @@ leave_mm (unsigned long cpu)
- {
- if (cpu_tlbstate[cpu].state == TLBSTATE_OK)
- BUG();
-- clear_bit(cpu, &cpu_tlbstate[cpu].active_mm->cpu_vm_mask);
-+ cpu_clear(cpu, cpu_tlbstate[cpu].active_mm->cpu_vm_mask);
- load_cr3(swapper_pg_dir);
- }
-
-@@ -878,7 +876,7 @@ smp_invalidate_interrupt(void)
- {
- __u8 cpu = get_cpu();
-
-- if(!test_bit(cpu, &smp_invalidate_needed))
-+ if (!(smp_invalidate_needed & (1UL << cpu)))
- goto out;
- /* This will flood messages. Don't uncomment unless you see
- * Problems with cross cpu invalidation
-@@ -895,7 +893,7 @@ smp_invalidate_interrupt(void)
- } else
- leave_mm(cpu);
- }
-- clear_bit(cpu, &smp_invalidate_needed);
-+ smp_invalidate_needed |= 1UL << cpu;
- out:
- put_cpu_no_resched();
- }
-@@ -912,7 +910,7 @@ flush_tlb_others (unsigned long cpumask,
-
- if (!cpumask)
- BUG();
-- if ((cpumask & cpu_online_map) != cpumask)
-+ if ((cpumask & cpus_coerce(cpu_online_map)) != cpumask)
- BUG();
- if (cpumask & (1 << smp_processor_id()))
- BUG();
-@@ -954,7 +952,7 @@ flush_tlb_current_task(void)
-
- preempt_disable();
-
-- cpu_mask = mm->cpu_vm_mask & ~(1 << smp_processor_id());
-+ cpu_mask = cpus_coerce(mm->cpu_vm_mask) & ~(1 << smp_processor_id());
- local_flush_tlb();
- if (cpu_mask)
- flush_tlb_others(cpu_mask, mm, FLUSH_ALL);
-@@ -970,7 +968,7 @@ flush_tlb_mm (struct mm_struct * mm)
-
- preempt_disable();
-
-- cpu_mask = mm->cpu_vm_mask & ~(1 << smp_processor_id());
-+ cpu_mask = cpus_coerce(mm->cpu_vm_mask) & ~(1 << smp_processor_id());
-
- if (current->active_mm == mm) {
- if (current->mm)
-@@ -991,7 +989,7 @@ void flush_tlb_page(struct vm_area_struc
-
- preempt_disable();
-
-- cpu_mask = mm->cpu_vm_mask & ~(1 << smp_processor_id());
-+ cpu_mask = cpus_coerce(mm->cpu_vm_mask) & ~(1 << smp_processor_id());
- if (current->active_mm == mm) {
- if(current->mm)
- __flush_tlb_one(va);
-@@ -1033,7 +1031,7 @@ static void
- smp_stop_cpu_function(void *dummy)
- {
- VDEBUG(("VOYAGER SMP: CPU%d is STOPPING\n", smp_processor_id()));
-- clear_bit(smp_processor_id(), &cpu_online_map);
-+ cpu_clear(smp_processor_id(), cpu_online_map);
- local_irq_disable();
- for(;;)
- __asm__("hlt");
-@@ -1100,7 +1098,7 @@ smp_call_function (void (*func) (void *i
- int wait)
- {
- struct call_data_struct data;
-- __u32 mask = cpu_online_map;
-+ __u32 mask = cpus_coerce(cpu_online_map);
-
- mask &= ~(1<<smp_processor_id());
-
-@@ -1451,8 +1449,7 @@ smp_intr_init(void)
- static void
- send_CPI(__u32 cpuset, __u8 cpi)
- {
-- int mask;
-- __u8 cpu;
-+ int cpu;
- __u32 quad_cpuset = (cpuset & voyager_quad_processors);
-
- if(cpi < VIC_START_FAKE_CPI) {
-@@ -1467,7 +1464,7 @@ send_CPI(__u32 cpuset, __u8 cpi)
- cpuset &= 0xff; /* only first 8 CPUs vaild for VIC CPI */
- if(cpuset == 0)
- return;
-- for_each_cpu(cpu, mask) {
-+ for_each_cpu(cpu, mk_cpumask_const(cpu_online_map)) {
- if(cpuset & (1<<cpu))
- set_bit(cpi, &vic_cpi_mailbox[cpu]);
- }
-@@ -1571,10 +1568,9 @@ startup_vic_irq(unsigned int irq)
- static void
- enable_vic_irq(unsigned int irq)
- {
-- int tmpmask;
- /* linux doesn't to processor-irq affinity, so enable on
- * all CPUs we know about */
-- __u8 cpu = smp_processor_id(), real_cpu;
-+ int cpu = smp_processor_id(), real_cpu;
- __u16 mask = (1<<irq);
- __u32 processorList = 0;
- unsigned long flags;
-@@ -1582,7 +1578,7 @@ enable_vic_irq(unsigned int irq)
- VDEBUG(("VOYAGER: enable_vic_irq(%d) CPU%d affinity 0x%lx\n",
- irq, cpu, cpu_irq_affinity[cpu]));
- spin_lock_irqsave(&vic_irq_lock, flags);
-- for_each_cpu(real_cpu, tmpmask) {
-+ for_each_cpu(real_cpu, mk_cpumask_const(cpu_online_map)) {
- if(!(voyager_extended_vic_processors & (1<<real_cpu)))
- continue;
- if(!(cpu_irq_affinity[real_cpu] & mask)) {
-@@ -1727,7 +1723,7 @@ after_handle_vic_irq(unsigned int irq)
-
- printk("VOYAGER SMP: CPU%d lost interrupt %d\n",
- cpu, irq);
-- for_each_cpu(real_cpu, mask) {
-+ for_each_cpu(real_cpu, mk_cpumask_const(mask)) {
-
- outb(VIC_CPU_MASQUERADE_ENABLE | real_cpu,
- VIC_PROCESSOR_ID);
-@@ -1783,15 +1779,16 @@ after_handle_vic_irq(unsigned int irq)
- * the selected processors */
-
- void
--set_vic_irq_affinity(unsigned int irq, unsigned long mask)
-+set_vic_irq_affinity(unsigned int irq, cpumask_t mask)
- {
- /* Only extended processors handle interrupts */
-- unsigned long real_mask = mask & voyager_extended_vic_processors;
-- unsigned long irq_mask = (1<<irq);
-- int tmpmask;
-- __u8 cpu;
-+ unsigned long real_mask;
-+ unsigned long irq_mask = 1 << irq;
-+ int cpu;
-+
-+ real_mask = cpus_coerce(mask) & voyager_extended_vic_processors;
-
-- if(mask == 0)
-+ if(cpus_coerce(mask) == 0)
- /* can't have no cpu's to accept the interrupt -- extremely
- * bad things will happen */
- return;
-@@ -1811,8 +1808,8 @@ set_vic_irq_affinity(unsigned int irq, u
- * bus) */
- return;
-
-- for_each_cpu(cpu, tmpmask) {
-- unsigned long cpu_mask = (1<<cpu);
-+ for_each_cpu(cpu, mk_cpumask_const(cpu_online_map)) {
-+ unsigned long cpu_mask = 1 << cpu;
-
- if(cpu_mask & real_mask) {
- /* enable the interrupt for this cpu */
-@@ -1874,11 +1871,10 @@ vic_enable_cpi(void)
- void
- voyager_smp_dump()
- {
-- int mask;
-- __u8 old_cpu = smp_processor_id(), cpu;
-+ int old_cpu = smp_processor_id(), cpu;
-
- /* dump the interrupt masks of each processor */
-- for_each_cpu(cpu, mask) {
-+ for_each_cpu(cpu, mk_cpumask_const(cpu_online_map)) {
- __u16 imr, isr, irr;
- unsigned long flags;
-
-@@ -1936,23 +1932,23 @@ smp_prepare_cpus(unsigned int max_cpus)
-
- void __devinit smp_prepare_boot_cpu(void)
- {
-- set_bit(smp_processor_id(), &cpu_online_map);
-- set_bit(smp_processor_id(), &cpu_callout_map);
-+ cpu_set(smp_processor_id(), cpu_online_map);
-+ cpu_set(smp_processor_id(), cpu_callout_map);
- }
-
- int __devinit
- __cpu_up(unsigned int cpu)
- {
- /* This only works at boot for x86. See "rewrite" above. */
-- if (test_bit(cpu, &smp_commenced_mask))
-+ if (cpu_isset(cpu, smp_commenced_mask))
- return -ENOSYS;
-
- /* In case one didn't come up */
-- if (!test_bit(cpu, &cpu_callin_map))
-+ if (!cpu_isset(cpu, cpu_callin_map))
- return -EIO;
- /* Unleash the CPU! */
-- set_bit(cpu, &smp_commenced_mask);
-- while (!test_bit(cpu, &cpu_online_map))
-+ cpu_set(cpu, smp_commenced_mask);
-+ while (!cpu_isset(cpu, cpu_online_map))
- mb();
- return 0;
- }
---- linux-2.6.0-test1/arch/i386/Makefile 2003-06-26 22:07:23.000000000 -0700
-+++ 25/arch/i386/Makefile 2003-07-19 17:04:05.000000000 -0700
-@@ -85,6 +85,9 @@ mcore-$(CONFIG_X86_ES7000) := mach-es700
- # default subarch .h files
- mflags-y += -Iinclude/asm-i386/mach-default
-
-+mflags-$(CONFIG_KGDB) += -ggdb
-+mflags-$(CONFIG_KGDB_MORE) += $(shell echo $(CONFIG_KGDB_OPTIONS) | sed -e 's/"//g')
-+
- head-y := arch/i386/kernel/head.o arch/i386/kernel/init_task.o
-
- libs-y += arch/i386/lib/
---- linux-2.6.0-test1/arch/i386/mm/fault.c 2003-06-26 22:07:23.000000000 -0700
-+++ 25/arch/i386/mm/fault.c 2003-07-19 17:07:16.000000000 -0700
-@@ -236,6 +236,12 @@ no_context:
- * Oops. The kernel tried to access some bad page. We'll have to
- * terminate things with extreme prejudice.
- */
-+#ifdef CONFIG_KGDB
-+ if (!user_mode(regs)){
-+ kgdb_handle_exception(14,SIGBUS, error_code, regs);
-+ return;
-+ }
-+#endif
-
- bust_spinlocks(1);
-
-@@ -247,6 +253,13 @@ no_context:
- printk(" printing eip:\n");
- printk("%08lx\n", regs->eip);
- asm("movl %%cr3,%0":"=r" (page));
-+#ifdef CONFIG_HIGHPMD /* Oh boy. Error reporting is going to blow major goats. */
-+ printk(KERN_ALERT "%%cr3 = 0x%lx\n", page);
-+ /* Mask off flag bits. It should end up 32B-aligned. */
-+ page &= ~(PTRS_PER_PGD*sizeof(pgd_t) - 1);
-+ printk(KERN_ALERT "*pdpte = 0x%Lx\n",
-+ pgd_val(((pgd_t *)__va(page))[address >> PGDIR_SHIFT]));
-+#else /* !CONFIG_HIGHPMD */
- page = ((unsigned long *) __va(page))[address >> 22];
- printk(KERN_ALERT "*pde = %08lx\n", page);
- /*
-@@ -262,7 +275,8 @@ no_context:
- page = ((unsigned long *) __va(page))[address >> PAGE_SHIFT];
- printk(KERN_ALERT "*pte = %08lx\n", page);
- }
--#endif
-+#endif /* !CONFIG_HIGHPTE */
-+#endif /* CONFIG_HIGHPMD */
- die("Oops", regs, error_code);
- bust_spinlocks(0);
- do_exit(SIGKILL);
-@@ -330,8 +344,8 @@ vmalloc_fault:
- * and redundant with the set_pmd() on non-PAE.
- */
-
-- pmd = pmd_offset(pgd, address);
-- pmd_k = pmd_offset(pgd_k, address);
-+ pmd = pmd_offset_kernel(pgd, address);
-+ pmd_k = pmd_offset_kernel(pgd_k, address);
- if (!pmd_present(*pmd_k))
- goto no_context;
- set_pmd(pmd, *pmd_k);
---- linux-2.6.0-test1/arch/i386/mm/hugetlbpage.c 2003-06-22 12:04:43.000000000 -0700
-+++ 25/arch/i386/mm/hugetlbpage.c 2003-07-19 17:07:16.000000000 -0700
-@@ -87,8 +87,8 @@ static pte_t *huge_pte_alloc(struct mm_s
- pmd_t *pmd = NULL;
-
- pgd = pgd_offset(mm, addr);
-- pmd = pmd_alloc(mm, pgd, addr);
-- return (pte_t *) pmd;
-+ pmd = pmd_alloc_map(mm, pgd, addr);
-+ return (pte_t *)pmd;
- }
-
- static pte_t *huge_pte_offset(struct mm_struct *mm, unsigned long addr)
-@@ -97,8 +97,8 @@ static pte_t *huge_pte_offset(struct mm_
- pmd_t *pmd = NULL;
-
- pgd = pgd_offset(mm, addr);
-- pmd = pmd_offset(pgd, addr);
-- return (pte_t *) pmd;
-+ pmd = pmd_offset_map_nested(pgd, addr);
-+ return (pte_t *)pmd;
- }
-
- static void set_huge_pte(struct mm_struct *mm, struct vm_area_struct *vma, struct page *page, pte_t * page_table, int write_access)
-@@ -145,6 +145,8 @@ int copy_hugetlb_page_range(struct mm_st
- ptepage = pte_page(entry);
- get_page(ptepage);
- set_pte(dst_pte, entry);
-+ pmd_unmap(dst_pte);
-+ pmd_unmap_nested(src_pte);
- dst->rss += (HPAGE_SIZE / PAGE_SIZE);
- addr += HPAGE_SIZE;
- }
-@@ -182,6 +184,7 @@ follow_hugetlb_page(struct mm_struct *mm
-
- get_page(page);
- pages[i] = page;
-+ pmd_unmap_nested(pte);
- }
-
- if (vmas)
-@@ -271,6 +274,7 @@ follow_huge_pmd(struct mm_struct *mm, un
- page += ((address & ~HPAGE_MASK) >> PAGE_SHIFT);
- get_page(page);
- }
-+ pmd_unmap(pmd);
- return page;
- }
- #endif
-@@ -314,6 +318,7 @@ void unmap_hugepage_range(struct vm_area
- page = pte_page(*pte);
- huge_page_release(page);
- pte_clear(pte);
-+ pmd_unmap_nested(pte);
- }
- mm->rss -= (end - start) >> PAGE_SHIFT;
- flush_tlb_range(vma, start, end);
-@@ -348,8 +353,10 @@ int hugetlb_prefault(struct address_spac
- ret = -ENOMEM;
- goto out;
- }
-- if (!pte_none(*pte))
-+ if (!pte_none(*pte)) {
-+ pmd_unmap(pte);
- continue;
-+ }
-
- idx = ((addr - vma->vm_start) >> HPAGE_SHIFT)
- + (vma->vm_pgoff >> (HPAGE_SHIFT - PAGE_SHIFT));
-@@ -358,16 +365,19 @@ int hugetlb_prefault(struct address_spac
- page = alloc_hugetlb_page();
- if (!page) {
- ret = -ENOMEM;
-+ pmd_unmap(pte);
- goto out;
- }
- ret = add_to_page_cache(page, mapping, idx, GFP_ATOMIC);
- unlock_page(page);
- if (ret) {
- free_huge_page(page);
-+ pmd_unmap(pte);
- goto out;
- }
- }
- set_huge_pte(mm, vma, page, pte, vma->vm_flags & VM_WRITE);
-+ pmd_unmap(pte);
- }
- out:
- spin_unlock(&mm->page_table_lock);
---- linux-2.6.0-test1/arch/i386/mm/init.c 2003-06-26 22:07:23.000000000 -0700
-+++ 25/arch/i386/mm/init.c 2003-07-19 17:07:16.000000000 -0700
-@@ -20,9 +20,6 @@
- #include <linux/swap.h>
- #include <linux/smp.h>
- #include <linux/init.h>
--#ifdef CONFIG_BLK_DEV_INITRD
--#include <linux/blk.h>
--#endif
- #include <linux/highmem.h>
- #include <linux/pagemap.h>
- #include <linux/bootmem.h>
-@@ -59,10 +56,10 @@ static pmd_t * __init one_md_table_init(
- #ifdef CONFIG_X86_PAE
- pmd_table = (pmd_t *) alloc_bootmem_low_pages(PAGE_SIZE);
- set_pgd(pgd, __pgd(__pa(pmd_table) | _PAGE_PRESENT));
-- if (pmd_table != pmd_offset(pgd, 0))
-+ if (pmd_table != pmd_offset_kernel(pgd, 0))
- BUG();
- #else
-- pmd_table = pmd_offset(pgd, 0);
-+ pmd_table = pmd_offset_kernel(pgd, 0);
- #endif
-
- return pmd_table;
-@@ -113,7 +110,7 @@ static void __init page_table_range_init
- if (pgd_none(*pgd))
- one_md_table_init(pgd);
-
-- pmd = pmd_offset(pgd, vaddr);
-+ pmd = pmd_offset_kernel(pgd, vaddr);
- for (; (pmd_idx < PTRS_PER_PMD) && (vaddr != end); pmd++, pmd_idx++) {
- if (pmd_none(*pmd))
- one_page_table_init(pmd);
-@@ -194,7 +191,7 @@ pte_t *kmap_pte;
- pgprot_t kmap_prot;
-
- #define kmap_get_fixmap_pte(vaddr) \
-- pte_offset_kernel(pmd_offset(pgd_offset_k(vaddr), (vaddr)), (vaddr))
-+ pte_offset_kernel(pmd_offset_kernel(pgd_offset_k(vaddr), (vaddr)), (vaddr))
-
- void __init kmap_init(void)
- {
-@@ -218,7 +215,7 @@ void __init permanent_kmaps_init(pgd_t *
- page_table_range_init(vaddr, vaddr + PAGE_SIZE*LAST_PKMAP, pgd_base);
-
- pgd = swapper_pg_dir + pgd_index(vaddr);
-- pmd = pmd_offset(pgd, vaddr);
-+ pmd = pmd_offset_kernel(pgd, vaddr);
- pte = pte_offset_kernel(pmd, vaddr);
- pkmap_page_table = pte;
- }
-@@ -512,20 +509,19 @@ void __init mem_init(void)
- #endif
- }
-
--#ifdef CONFIG_X86_PAE
--struct kmem_cache_s *pae_pgd_cachep;
-+kmem_cache_t *pgd_cache;
-
- void __init pgtable_cache_init(void)
- {
-- /*
-- * PAE pgds must be 16-byte aligned:
-- */
-- pae_pgd_cachep = kmem_cache_create("pae_pgd", 32, 0,
-- SLAB_HWCACHE_ALIGN | SLAB_MUST_HWCACHE_ALIGN, NULL, NULL);
-- if (!pae_pgd_cachep)
-- panic("init_pae(): Cannot alloc pae_pgd SLAB cache");
-+ pgd_cache = kmem_cache_create("pgd",
-+ PTRS_PER_PGD*sizeof(pgd_t),
-+ 0,
-+ SLAB_HWCACHE_ALIGN | SLAB_MUST_HWCACHE_ALIGN,
-+ pgd_ctor,
-+ PTRS_PER_PMD == 1 ? pgd_dtor : NULL);
-+ if (!pgd_cache)
-+ panic("pgtable_cache_init(): Cannot create pgd cache");
- }
--#endif
-
- /*
- * This function cannot be __init, since exceptions don't work in that
-@@ -565,7 +561,7 @@ void free_initmem(void)
- free_page(addr);
- totalram_pages++;
- }
-- printk (KERN_INFO "Freeing unused kernel memory: %dk freed\n", (&__init_end - &__init_begin) >> 10);
-+ printk (KERN_INFO "Freeing unused kernel memory: %dk freed\n", (__init_end - __init_begin) >> 10);
- }
-
- #ifdef CONFIG_BLK_DEV_INITRD
---- linux-2.6.0-test1/arch/i386/mm/ioremap.c 2003-06-14 12:18:04.000000000 -0700
-+++ 25/arch/i386/mm/ioremap.c 2003-07-19 17:07:16.000000000 -0700
-@@ -82,7 +82,7 @@ static int remap_area_pages(unsigned lon
- spin_lock(&init_mm.page_table_lock);
- do {
- pmd_t *pmd;
-- pmd = pmd_alloc(&init_mm, dir, address);
-+ pmd = pmd_alloc_kernel(&init_mm, dir, address);
- error = -ENOMEM;
- if (!pmd)
- break;
---- linux-2.6.0-test1/arch/i386/mm/pageattr.c 2003-07-10 18:50:30.000000000 -0700
-+++ 25/arch/i386/mm/pageattr.c 2003-07-19 17:07:16.000000000 -0700
-@@ -23,7 +23,7 @@ static inline pte_t *lookup_address(unsi
- pmd_t *pmd;
- if (pgd_none(*pgd))
- return NULL;
-- pmd = pmd_offset(pgd, address);
-+ pmd = pmd_offset_kernel(pgd, address);
- if (pmd_none(*pmd))
- return NULL;
- if (pmd_large(*pmd))
-@@ -67,19 +67,22 @@ static void flush_kernel_map(void *dummy
-
- static void set_pmd_pte(pte_t *kpte, unsigned long address, pte_t pte)
- {
-+ struct page *page;
-+ unsigned long flags;
-+
- set_pte_atomic(kpte, pte); /* change init_mm */
--#ifndef CONFIG_X86_PAE
-- {
-- struct list_head *l;
-- spin_lock(&mmlist_lock);
-- list_for_each(l, &init_mm.mmlist) {
-- struct mm_struct *mm = list_entry(l, struct mm_struct, mmlist);
-- pmd_t *pmd = pmd_offset(pgd_offset(mm, address), address);
-- set_pte_atomic((pte_t *)pmd, pte);
-- }
-- spin_unlock(&mmlist_lock);
-+ if (PTRS_PER_PMD > 1)
-+ return;
-+
-+ spin_lock_irqsave(&pgd_lock, flags);
-+ list_for_each_entry(page, &pgd_list, lru) {
-+ pgd_t *pgd;
-+ pmd_t *pmd;
-+ pgd = (pgd_t *)page_address(page) + pgd_index(address);
-+ pmd = pmd_offset_kernel(pgd, address);
-+ set_pte_atomic((pte_t *)pmd, pte);
- }
--#endif
-+ spin_unlock_irqrestore(&pgd_lock, flags);
- }
-
- /*
-@@ -89,7 +92,7 @@ static void set_pmd_pte(pte_t *kpte, uns
- static inline void revert_page(struct page *kpte_page, unsigned long address)
- {
- pte_t *linear = (pte_t *)
-- pmd_offset(pgd_offset(&init_mm, address), address);
-+ pmd_offset_kernel(pgd_offset_k(address), address);
- set_pmd_pte(linear, address,
- pfn_pte((__pa(address) & LARGE_PAGE_MASK) >> PAGE_SHIFT,
- PAGE_KERNEL_LARGE));
---- linux-2.6.0-test1/arch/i386/mm/pgtable.c 2003-07-10 18:50:30.000000000 -0700
-+++ 25/arch/i386/mm/pgtable.c 2003-07-19 17:07:16.000000000 -0700
-@@ -12,6 +12,7 @@
- #include <linux/highmem.h>
- #include <linux/slab.h>
- #include <linux/pagemap.h>
-+#include <linux/spinlock.h>
-
- #include <asm/system.h>
- #include <asm/pgtable.h>
-@@ -69,7 +70,7 @@ static void set_pte_pfn(unsigned long va
- BUG();
- return;
- }
-- pmd = pmd_offset(pgd, vaddr);
-+ pmd = pmd_offset_kernel(pgd, vaddr);
- if (pmd_none(*pmd)) {
- BUG();
- return;
-@@ -109,7 +110,7 @@ void set_pmd_pfn(unsigned long vaddr, un
- printk ("set_pmd_pfn: pgd_none\n");
- return; /* BUG(); */
- }
-- pmd = pmd_offset(pgd, vaddr);
-+ pmd = pmd_offset_kernel(pgd, vaddr);
- set_pmd(pmd, pfn_pmd(pfn, flags));
- /*
- * It's enough to flush this one mapping.
-@@ -151,61 +152,89 @@ struct page *pte_alloc_one(struct mm_str
- return pte;
- }
-
--#ifdef CONFIG_X86_PAE
-+/*
-+ * List of all pgd's needed for non-PAE so it can invalidate entries
-+ * in both cached and uncached pgd's; not needed for PAE since the
-+ * kernel pmd is shared. If PAE were not to share the pmd a similar
-+ * tactic would be needed. This is essentially codepath-based locking
-+ * against pageattr.c; it is the unique case in which a valid change
-+ * of kernel pagetables can't be lazily synchronized by vmalloc faults.
-+ * vmalloc faults work because attached pagetables are never freed.
-+ * If the locking proves to be non-performant, a ticketing scheme with
-+ * checks at dup_mmap(), exec(), and other mmlist addition points
-+ * could be used. The locking scheme was chosen on the basis of
-+ * manfred's recommendations and having no core impact whatsoever.
-+ * -- wli
-+ */
-+spinlock_t pgd_lock = SPIN_LOCK_UNLOCKED;
-+LIST_HEAD(pgd_list);
-
--pgd_t *pgd_alloc(struct mm_struct *mm)
-+void pgd_ctor(void *pgd, kmem_cache_t *cache, unsigned long unused)
- {
-- int i;
-- pgd_t *pgd = kmem_cache_alloc(pae_pgd_cachep, GFP_KERNEL);
-+ unsigned long flags;
-
-- if (pgd) {
-- for (i = 0; i < USER_PTRS_PER_PGD; i++) {
-- unsigned long pmd = __get_free_page(GFP_KERNEL);
-- if (!pmd)
-- goto out_oom;
-- clear_page(pmd);
-- set_pgd(pgd + i, __pgd(1 + __pa(pmd)));
-- }
-- memcpy(pgd + USER_PTRS_PER_PGD,
-+ if (PTRS_PER_PMD == 1)
-+ spin_lock_irqsave(&pgd_lock, flags);
-+
-+ memcpy((pgd_t *)pgd + USER_PTRS_PER_PGD,
- swapper_pg_dir + USER_PTRS_PER_PGD,
- (PTRS_PER_PGD - USER_PTRS_PER_PGD) * sizeof(pgd_t));
-- }
-- return pgd;
--out_oom:
-- for (i--; i >= 0; i--)
-- free_page((unsigned long)__va(pgd_val(pgd[i])-1));
-- kmem_cache_free(pae_pgd_cachep, pgd);
-- return NULL;
-+
-+ if (PTRS_PER_PMD > 1)
-+ return;
-+
-+ list_add(&virt_to_page(pgd)->lru, &pgd_list);
-+ spin_unlock_irqrestore(&pgd_lock, flags);
-+ memset(pgd, 0, USER_PTRS_PER_PGD*sizeof(pgd_t));
- }
-
--void pgd_free(pgd_t *pgd)
-+/* never called when PTRS_PER_PMD > 1 */
-+void pgd_dtor(void *pgd, kmem_cache_t *cache, unsigned long unused)
- {
-- int i;
-+ unsigned long flags; /* can be called from interrupt context */
-
-- for (i = 0; i < USER_PTRS_PER_PGD; i++)
-- free_page((unsigned long)__va(pgd_val(pgd[i])-1));
-- kmem_cache_free(pae_pgd_cachep, pgd);
-+ spin_lock_irqsave(&pgd_lock, flags);
-+ list_del(&virt_to_page(pgd)->lru);
-+ spin_unlock_irqrestore(&pgd_lock, flags);
- }
-
--#else
--
- pgd_t *pgd_alloc(struct mm_struct *mm)
- {
-- pgd_t *pgd = (pgd_t *)__get_free_page(GFP_KERNEL);
-+ int i;
-+ pgd_t *pgd = kmem_cache_alloc(pgd_cache, GFP_KERNEL);
-
-- if (pgd) {
-- memset(pgd, 0, USER_PTRS_PER_PGD * sizeof(pgd_t));
-- memcpy(pgd + USER_PTRS_PER_PGD,
-- swapper_pg_dir + USER_PTRS_PER_PGD,
-- (PTRS_PER_PGD - USER_PTRS_PER_PGD) * sizeof(pgd_t));
-+ if (PTRS_PER_PMD == 1 || !pgd)
-+ return pgd;
-+
-+ for (i = 0; i < USER_PTRS_PER_PGD; ++i) {
-+ struct page *pmd;
-+#ifdef CONFIG_HIGHPMD
-+ pmd = alloc_page(GFP_KERNEL|__GFP_HIGHMEM|__GFP_REPEAT);
-+#else
-+ pmd = alloc_page(GFP_KERNEL|__GFP_REPEAT);
-+#endif
-+ if (!pmd)
-+ goto out_oom;
-+ clear_highpage(pmd);
-+ set_pgd(&pgd[i], __pgd(1ULL | (u64)page_to_pfn(pmd) << PAGE_SHIFT));
- }
- return pgd;
-+
-+out_oom:
-+ for (i--; i >= 0; i--)
-+ __free_page(pgd_page(pgd[i]));
-+ kmem_cache_free(pgd_cache, pgd);
-+ return NULL;
- }
-
- void pgd_free(pgd_t *pgd)
- {
-- free_page((unsigned long)pgd);
--}
--
--#endif /* CONFIG_X86_PAE */
-+ int i;
-
-+ /* in the PAE case user pgd entries are overwritten before usage */
-+ if (PTRS_PER_PMD > 1)
-+ for (i = 0; i < USER_PTRS_PER_PGD; ++i)
-+ __free_page(pgd_page(pgd[i]));
-+ /* in the non-PAE case, clear_page_tables() clears user pgd entries */
-+ kmem_cache_free(pgd_cache, pgd);
-+}
---- linux-2.6.0-test1/arch/i386/pci/legacy.c 2003-07-10 18:50:30.000000000 -0700
-+++ 25/arch/i386/pci/legacy.c 2003-07-19 17:03:49.000000000 -0700
-@@ -24,7 +24,7 @@ static void __devinit pcibios_fixup_peer
- for (devfn = 0; devfn < 256; devfn += 8) {
- if (!raw_pci_ops->read(0, n, devfn, PCI_VENDOR_ID, 2, &l) &&
- l != 0x0000 && l != 0xffff) {
-- DBG("Found device at %02x:%02x [%04x]\n", n, dev->devfn, l);
-+ DBG("Found device at %02x:%02x [%04x]\n", n, devfn, l);
- printk(KERN_INFO "PCI: Discovered peer bus %02x\n", n);
- pci_scan_bus(n, &pci_root_ops, NULL);
- break;
---- linux-2.6.0-test1/arch/i386/pci/visws.c 2003-06-14 12:18:29.000000000 -0700
-+++ 25/arch/i386/pci/visws.c 2003-07-19 17:03:49.000000000 -0700
-@@ -17,7 +17,7 @@
-
- int broken_hp_bios_irq9;
-
--extern struct pci_ops pci_direct_conf1;
-+extern struct pci_raw_ops pci_direct_conf1;
-
- static int pci_visws_enable_irq(struct pci_dev *dev) { return 0; }
-
-@@ -101,8 +101,9 @@ static int __init pcibios_init(void)
- printk(KERN_INFO "PCI: Lithium bridge A bus: %u, "
- "bridge B (PIIX4) bus: %u\n", pci_bus1, pci_bus0);
-
-- pci_scan_bus(pci_bus0, &pci_direct_conf1, NULL);
-- pci_scan_bus(pci_bus1, &pci_direct_conf1, NULL);
-+ raw_pci_ops = &pci_direct_conf1;
-+ pci_scan_bus(pci_bus0, &pci_root_ops, NULL);
-+ pci_scan_bus(pci_bus1, &pci_root_ops, NULL);
- pci_fixup_irqs(visws_swizzle, visws_map_irq);
- pcibios_resource_survey();
- return 0;
---- linux-2.6.0-test1/arch/ia64/hp/sim/simscsi.c 2003-07-10 18:50:30.000000000 -0700
-+++ 25/arch/ia64/hp/sim/simscsi.c 2003-07-19 17:03:49.000000000 -0700
-@@ -9,7 +9,7 @@
- * 99/12/18 David Mosberger Added support for READ10/WRITE10 needed by linux v2.3.33
- */
- #include <linux/config.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/init.h>
- #include <linux/interrupt.h>
- #include <linux/kernel.h>
---- linux-2.6.0-test1/arch/ia64/ia32/ia32_ioctl.c 2003-06-22 12:04:43.000000000 -0700
-+++ 25/arch/ia64/ia32/ia32_ioctl.c 2003-07-19 17:03:49.000000000 -0700
-@@ -52,7 +52,7 @@
- #include <linux/raw.h>
- #include <linux/smb_fs.h>
- #include <linux/blkpg.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/elevator.h>
- #include <linux/rtc.h>
- #include <linux/pci.h>
---- linux-2.6.0-test1/arch/ia64/kernel/acpi.c 2003-07-02 14:53:12.000000000 -0700
-+++ 25/arch/ia64/kernel/acpi.c 2003-07-19 17:03:49.000000000 -0700
-@@ -720,7 +720,7 @@ acpi_register_irq (u32 gsi, u32 polarity
- {
- int vector = 0;
-
-- if (acpi_madt->flags.pcat_compat && (gsi < 16))
-+ if (has_8259 && (gsi < 16))
- return isa_irq_to_vector(gsi);
-
- if (!iosapic_register_intr)
---- linux-2.6.0-test1/arch/ia64/kernel/entry.S 2003-07-10 18:50:30.000000000 -0700
-+++ 25/arch/ia64/kernel/entry.S 2003-07-19 17:03:49.000000000 -0700
-@@ -61,7 +61,17 @@ ENTRY(ia64_execve)
- mov out2=in2 // envp
- add out3=16,sp // regs
- br.call.sptk.many rp=sys_execve
--.ret0: cmp4.ge p6,p7=r8,r0
-+.ret0:
-+#ifdef CONFIG_IA32_SUPPORT
-+ /*
-+ * Check if we're returning to ia32 mode. If so, we need to restore ia32 registers
-+ * from pt_regs.
-+ */
-+ adds r16=PT(CR_IPSR)+16,sp
-+ ;;
-+ ld8 r16=[r16]
-+#endif
-+ cmp4.ge p6,p7=r8,r0
- mov ar.pfs=loc1 // restore ar.pfs
- sxt4 r8=r8 // return 64-bit result
- ;;
-@@ -89,6 +99,12 @@ ENTRY(ia64_execve)
- ldf.fill f23=[sp]; ldf.fill f24=[sp]; mov f25=f0
- ldf.fill f26=[sp]; ldf.fill f27=[sp]; mov f28=f0
- ldf.fill f29=[sp]; ldf.fill f30=[sp]; mov f31=f0
-+#ifdef CONFIG_IA32_SUPPORT
-+ tbit.nz p6,p0=r16, IA64_PSR_IS_BIT
-+ movl loc0=ia64_ret_from_ia32_execve
-+ ;;
-+(p6) mov rp=loc0
-+#endif
- br.ret.sptk.many rp
- END(ia64_execve)
-
-@@ -688,7 +704,7 @@ GLOBAL_ENTRY(ia64_leave_syscall)
- mov b7=r0 // clear b7
- ;;
- (pUStk) st1 [r14]=r3
-- movl r17=THIS_CPU(ia64_phys_stacked_size_p8)
-+ addl r17=THIS_CPU(ia64_phys_stacked_size_p8),r0
- ;;
- mov r16=ar.bsp // get existing backing store pointer
- srlz.i // ensure interruption collection is off
-@@ -701,6 +717,19 @@ GLOBAL_ENTRY(ia64_leave_syscall)
- br.cond.sptk.many rbs_switch
- END(ia64_leave_syscall)
-
-+#ifdef CONFIG_IA32_SUPPORT
-+GLOBAL_ENTRY(ia64_ret_from_ia32_execve)
-+ PT_REGS_UNWIND_INFO(0)
-+ adds r2=PT(R8)+16,sp // r2 = &pt_regs.r8
-+ adds r3=PT(R10)+16,sp // r3 = &pt_regs.r10
-+ ;;
-+ .mem.offset 0,0
-+ st8.spill [r2]=r8 // store return value in slot for r8 and set unat bit
-+ .mem.offset 8,0
-+ st8.spill [r3]=r0 // clear error indication in slot for r10 and set unat bit
-+END(ia64_ret_from_ia32_execve_syscall)
-+ // fall through
-+#endif /* CONFIG_IA32_SUPPORT */
- GLOBAL_ENTRY(ia64_leave_kernel)
- PT_REGS_UNWIND_INFO(0)
- /*
-@@ -841,7 +870,7 @@ GLOBAL_ENTRY(ia64_leave_kernel)
- shr.u r18=r19,16 // get byte size of existing "dirty" partition
- ;;
- mov r16=ar.bsp // get existing backing store pointer
-- movl r17=THIS_CPU(ia64_phys_stacked_size_p8)
-+ addl r17=THIS_CPU(ia64_phys_stacked_size_p8),r0
- ;;
- ld4 r17=[r17] // r17 = cpu_data->phys_stacked_size_p8
- (pKStk) br.cond.dpnt skip_rbs_switch
---- linux-2.6.0-test1/arch/ia64/kernel/fsys.S 2003-07-10 18:50:30.000000000 -0700
-+++ 25/arch/ia64/kernel/fsys.S 2003-07-19 17:03:49.000000000 -0700
-@@ -165,7 +165,7 @@ ENTRY(fsys_gettimeofday)
- .altrp b6
- .body
- add r9=TI_FLAGS+IA64_TASK_SIZE,r16
-- movl r3=THIS_CPU(cpu_info)
-+ addl r3=THIS_CPU(cpu_info),r0
-
- mov.m r31=ar.itc // put time stamp into r31 (ITC) == now (35 cyc)
- #ifdef CONFIG_SMP
-@@ -177,7 +177,7 @@ ENTRY(fsys_gettimeofday)
- movl r19=xtime // xtime is a timespec struct
-
- ld8 r10=[r10] // r10 <- __per_cpu_offset[0]
-- movl r21=THIS_CPU(cpu_info)
-+ addl r21=THIS_CPU(cpu_info),r0
- ;;
- add r10=r21, r10 // r10 <- &cpu_data(time_keeper_id)
- tbit.nz p8,p0 = r2, IA64_SAL_PLATFORM_FEATURE_ITC_DRIFT_BIT
---- linux-2.6.0-test1/arch/ia64/kernel/ia64_ksyms.c 2003-06-22 12:04:43.000000000 -0700
-+++ 25/arch/ia64/kernel/ia64_ksyms.c 2003-07-19 17:03:49.000000000 -0700
-@@ -64,9 +64,10 @@ EXPORT_SYMBOL(ia64_pfn_valid);
- #endif
-
- #include <asm/processor.h>
--EXPORT_SYMBOL(cpu_info__per_cpu);
-+EXPORT_SYMBOL(per_cpu__cpu_info);
- #ifdef CONFIG_SMP
- EXPORT_SYMBOL(__per_cpu_offset);
-+EXPORT_SYMBOL(per_cpu__local_per_cpu_offset);
- #endif
- EXPORT_SYMBOL(kernel_thread);
-
---- linux-2.6.0-test1/arch/ia64/kernel/init_task.c 2003-07-02 14:53:12.000000000 -0700
-+++ 25/arch/ia64/kernel/init_task.c 2003-07-19 17:03:49.000000000 -0700
-@@ -2,7 +2,7 @@
- * This is where we statically allocate and initialize the initial
- * task.
- *
-- * Copyright (C) 1999, 2002 Hewlett-Packard Co
-+ * Copyright (C) 1999, 2002-2003 Hewlett-Packard Co
- * David Mosberger-Tang <davidm@hpl.hp.com>
- */
-
-@@ -34,7 +34,7 @@ static union {
- struct thread_info thread_info;
- } s;
- unsigned long stack[KERNEL_STACK_SIZE/sizeof (unsigned long)];
--} init_task_mem __attribute__((section(".data.init_task"))) = {{
-+} init_task_mem asm ("init_task_mem") __attribute__((section(".data.init_task"))) = {{
- .task = INIT_TASK(init_task_mem.s.task),
- .thread_info = INIT_THREAD_INFO(init_task_mem.s.task)
- }};
---- linux-2.6.0-test1/arch/ia64/kernel/iosapic.c 2003-07-02 14:53:12.000000000 -0700
-+++ 25/arch/ia64/kernel/iosapic.c 2003-07-19 17:04:06.000000000 -0700
-@@ -274,7 +274,7 @@ unmask_irq (unsigned int irq)
-
-
- static void
--iosapic_set_affinity (unsigned int irq, unsigned long mask)
-+iosapic_set_affinity (unsigned int irq, cpumask_t mask)
- {
- #ifdef CONFIG_SMP
- unsigned long flags;
-@@ -287,12 +287,10 @@ iosapic_set_affinity (unsigned int irq,
- irq &= (~IA64_IRQ_REDIRECTED);
- vec = irq_to_vector(irq);
-
-- mask &= cpu_online_map;
--
-- if (!mask || vec >= IA64_NUM_VECTORS)
-+ if (cpus_empty(mask) || vec >= IA64_NUM_VECTORS)
- return;
-
-- dest = cpu_physical_id(ffz(~mask));
-+ dest = cpu_physical_id(first_cpu(mask));
-
- rte_index = iosapic_intr_info[vec].rte_index;
- addr = iosapic_intr_info[vec].addr;
-@@ -717,6 +715,7 @@ iosapic_parse_prt (void)
- register_intr(gsi, vector, IOSAPIC_LOWEST_PRIORITY, IOSAPIC_POL_LOW,
- IOSAPIC_LEVEL);
- }
-+ entry->irq = vector;
- snprintf(pci_id, sizeof(pci_id), "%02x:%02x:%02x[%c]",
- entry->id.segment, entry->id.bus, entry->id.device, 'A' + entry->pin);
-
---- linux-2.6.0-test1/arch/ia64/kernel/irq.c 2003-07-02 14:53:12.000000000 -0700
-+++ 25/arch/ia64/kernel/irq.c 2003-07-19 17:04:06.000000000 -0700
-@@ -898,13 +898,14 @@ int setup_irq(unsigned int irq, struct i
- static struct proc_dir_entry * root_irq_dir;
- static struct proc_dir_entry * irq_dir [NR_IRQS];
-
--#define HEX_DIGITS 8
-+#define HEX_DIGITS (2*sizeof(cpumask_t))
-
--static unsigned int parse_hex_value (const char *buffer,
-- unsigned long count, unsigned long *ret)
-+static unsigned int parse_hex_value(const char *buffer,
-+ unsigned long count, cpumask_t *ret)
- {
-- unsigned char hexnum [HEX_DIGITS];
-- unsigned long value, i;
-+ unsigned char hexnum[HEX_DIGITS];
-+ cpumask_t value = CPU_MASK_NONE;
-+ unsigned long i;
-
- if (!count)
- return -EINVAL;
-@@ -917,10 +918,9 @@ static unsigned int parse_hex_value (con
- * Parse the first 8 characters as a hex string, any non-hex char
- * is end-of-string. '00e1', 'e1', '00E1', 'E1' are all the same.
- */
-- value = 0;
--
- for (i = 0; i < count; i++) {
- unsigned int c = hexnum[i];
-+ int k;
-
- switch (c) {
- case '0' ... '9': c -= '0'; break;
-@@ -929,7 +929,10 @@ static unsigned int parse_hex_value (con
- default:
- goto out;
- }
-- value = (value << 4) | c;
-+ cpus_shift_left(value, value, 4);
-+ for (k = 0; k < 4; ++k)
-+ if (test_bit(k, (unsigned long *)&c))
-+ cpu_set(k, value);
- }
- out:
- *ret = value;
-@@ -940,12 +943,15 @@ out:
-
- static struct proc_dir_entry * smp_affinity_entry [NR_IRQS];
-
--static unsigned long irq_affinity [NR_IRQS] = { [0 ... NR_IRQS-1] = ~0UL };
-+static cpumask_t irq_affinity [NR_IRQS] = { [0 ... NR_IRQS-1] = CPU_MASK_ALL };
-+
- static char irq_redir [NR_IRQS]; // = { [0 ... NR_IRQS-1] = 1 };
-
- void set_irq_affinity_info (unsigned int irq, int hwid, int redir)
- {
-- unsigned long mask = 1UL<<cpu_logical_id(hwid);
-+ cpumask_t mask = CPU_MASK_NONE;
-+
-+ cpu_set(cpu_logical_id(hwid), mask);
-
- if (irq < NR_IRQS) {
- irq_affinity[irq] = mask;
-@@ -956,10 +962,21 @@ void set_irq_affinity_info (unsigned int
- static int irq_affinity_read_proc (char *page, char **start, off_t off,
- int count, int *eof, void *data)
- {
-- if (count < HEX_DIGITS+3)
-+ int k, len;
-+ cpumask_t tmp = irq_affinity[(long)data];
-+
-+ if (count < HEX_DIGITS+1)
- return -EINVAL;
-- return sprintf (page, "%s%08lx\n", irq_redir[(unsigned long)data] ? "r " : "",
-- irq_affinity[(unsigned long)data]);
-+
-+ len = 0;
-+ for (k = 0; k < sizeof(cpumask_t)/sizeof(u16); ++k) {
-+ int j = sprintf(page, "%04hx", (u16)cpus_coerce(tmp));
-+ len += j;
-+ page += j;
-+ cpus_shift_right(tmp, tmp, 16);
-+ }
-+ len += sprintf(page, "\n");
-+ return len;
- }
-
- static int irq_affinity_write_proc (struct file *file, const char *buffer,
-@@ -967,7 +984,7 @@ static int irq_affinity_write_proc (stru
- {
- unsigned int irq = (unsigned long) data;
- int full_count = count, err;
-- unsigned long new_value;
-+ cpumask_t new_value, tmp;
- const char *buf = buffer;
- irq_desc_t *desc = irq_descp(irq);
- int redir;
-@@ -991,7 +1008,8 @@ static int irq_affinity_write_proc (stru
- * way to make the system unusable accidentally :-) At least
- * one online CPU still has to be targeted.
- */
-- if (!(new_value & cpu_online_map))
-+ cpus_and(tmp, new_value, cpu_online_map);
-+ if (cpus_empty(tmp))
- return -EINVAL;
-
- desc->handler->set_affinity(irq | (redir? IA64_IRQ_REDIRECTED : 0), new_value);
-@@ -1003,18 +1021,28 @@ static int irq_affinity_write_proc (stru
- static int prof_cpu_mask_read_proc (char *page, char **start, off_t off,
- int count, int *eof, void *data)
- {
-- unsigned long *mask = (unsigned long *) data;
-+ cpumask_t *mask = (cpumask_t *)data;
-+ int k, len = 0;
-+
- if (count < HEX_DIGITS+1)
- return -EINVAL;
-- return sprintf (page, "%08lx\n", *mask);
-+
-+ for (k = 0; k < sizeof(cpumask_t)/sizeof(unsigned long); ++k) {
-+ int j = sprintf(page, "%04hx", (u16)cpus_coerce(*mask));
-+ len += j;
-+ page += j;
-+ cpus_shift_right(*mask, *mask, 16);
-+ }
-+ len += sprintf(page, "\n");
-+ return len;
- }
-
- static int prof_cpu_mask_write_proc (struct file *file, const char *buffer,
- unsigned long count, void *data)
- {
-- unsigned long *mask = (unsigned long *) data;
-- int full_count = count, err;
-- unsigned long new_value;
-+ cpumask_t *mask = (cpumask_t *)data;
-+ unsigned long full_count = count, err;
-+ cpumask_t new_value;
-
- err = parse_hex_value(buffer, count, &new_value);
- if (err)
-@@ -1058,7 +1086,7 @@ static void register_irq_proc (unsigned
- #endif
- }
-
--unsigned long prof_cpu_mask = -1;
-+cpumask_t prof_cpu_mask = CPU_MASK_ALL;
-
- void init_irq_proc (void)
- {
---- linux-2.6.0-test1/arch/ia64/kernel/module.c 2003-06-22 12:04:43.000000000 -0700
-+++ 25/arch/ia64/kernel/module.c 2003-07-19 17:03:49.000000000 -0700
-@@ -164,7 +164,7 @@ static int
- apply_imm64 (struct module *mod, struct insn *insn, uint64_t val)
- {
- if (slot(insn) != 2) {
-- printk(KERN_ERR "%s: illegal slot number %d for IMM64\n",
-+ printk(KERN_ERR "%s: invalid slot number %d for IMM64\n",
- mod->name, slot(insn));
- return 0;
- }
-@@ -176,7 +176,7 @@ static int
- apply_imm60 (struct module *mod, struct insn *insn, uint64_t val)
- {
- if (slot(insn) != 2) {
-- printk(KERN_ERR "%s: illegal slot number %d for IMM60\n",
-+ printk(KERN_ERR "%s: invalid slot number %d for IMM60\n",
- mod->name, slot(insn));
- return 0;
- }
---- linux-2.6.0-test1/arch/ia64/kernel/perfmon.c 2003-07-02 14:53:12.000000000 -0700
-+++ 25/arch/ia64/kernel/perfmon.c 2003-07-19 17:04:06.000000000 -0700
-@@ -221,14 +221,6 @@
-
- #define PFM_REG_RETFLAG_SET(flags, val) do { flags &= ~PFM_REG_RETFL_MASK; flags |= (val); } while(0)
-
--#ifdef CONFIG_SMP
--#define PFM_CPU_ONLINE_MAP cpu_online_map
--#define cpu_is_online(i) (PFM_CPU_ONLINE_MAP & (1UL << i))
--#else
--#define PFM_CPU_ONLINE_MAP 1UL
--#define cpu_is_online(i) (i==0)
--#endif
--
- /*
- * cmp0 must be the value of pmc0
- */
-@@ -566,7 +558,7 @@ static struct vm_operations_struct pfm_v
-
-
- #define pfm_wait_task_inactive(t) wait_task_inactive(t)
--#define pfm_get_cpu_var(v) __get_cpu_var(v)
-+#define pfm_get_cpu_var(v) __ia64_per_cpu_var(v)
- #define pfm_get_cpu_data(a,b) per_cpu(a, b)
- typedef irqreturn_t pfm_irq_handler_t;
- #define PFM_IRQ_HANDLER_RET(v) do { \
-@@ -5354,7 +5346,7 @@ pfm_proc_info(char *page)
- p += sprintf(p, "ovfl_mask : 0x%lx\n", pmu_conf.ovfl_val);
-
- for(i=0; i < NR_CPUS; i++) {
-- if (cpu_is_online(i) == 0) continue;
-+ if (cpu_online(i) == 0) continue;
- p += sprintf(p, "CPU%-2d overflow intrs : %lu\n", i, pfm_stats[i].pfm_ovfl_intr_count);
- p += sprintf(p, "CPU%-2d overflow cycles : %lu\n", i, pfm_stats[i].pfm_ovfl_intr_cycles);
- p += sprintf(p, "CPU%-2d overflow min : %lu\n", i, pfm_stats[i].pfm_ovfl_intr_cycles_min);
-@@ -5372,7 +5364,7 @@ pfm_proc_info(char *page)
- p += sprintf(p, "CPU%-2d activations : %lu\n", i, pfm_get_cpu_data(pmu_activation_number,i));
- }
-
-- if (hweight64(PFM_CPU_ONLINE_MAP) == 1)
-+ if (num_online_cpus() == 1)
- {
- psr = pfm_get_psr();
- ia64_srlz_d();
---- linux-2.6.0-test1/arch/ia64/kernel/ptrace.c 2003-07-10 18:50:30.000000000 -0700
-+++ 25/arch/ia64/kernel/ptrace.c 2003-07-19 17:03:49.000000000 -0700
-@@ -42,7 +42,7 @@
- (IA64_PSR_UM | IA64_PSR_DB | IA64_PSR_IS | IA64_PSR_ID | IA64_PSR_DD | IA64_PSR_RI)
- #define IPSR_READ_MASK IPSR_WRITE_MASK
-
--#define PTRACE_DEBUG 1
-+#define PTRACE_DEBUG 0
-
- #if PTRACE_DEBUG
- # define dprintk(format...) printk(format)
---- linux-2.6.0-test1/arch/ia64/kernel/setup.c 2003-06-22 12:04:43.000000000 -0700
-+++ 25/arch/ia64/kernel/setup.c 2003-07-19 17:04:07.000000000 -0700
-@@ -56,6 +56,7 @@ unsigned long __per_cpu_offset[NR_CPUS];
- #endif
-
- DEFINE_PER_CPU(struct cpuinfo_ia64, cpu_info);
-+DEFINE_PER_CPU(unsigned long, local_per_cpu_offset);
- DEFINE_PER_CPU(unsigned long, ia64_phys_stacked_size_p8);
- unsigned long ia64_cycles_per_usec;
- struct ia64_boot_param *ia64_boot_param;
-@@ -558,7 +559,7 @@ static void *
- c_start (struct seq_file *m, loff_t *pos)
- {
- #ifdef CONFIG_SMP
-- while (*pos < NR_CPUS && !(cpu_online_map & (1UL << *pos)))
-+ while (*pos < NR_CPUS && !cpu_isset(*pos, cpu_online_map))
- ++*pos;
- #endif
- return *pos < NR_CPUS ? cpu_data(*pos) : NULL;
-@@ -709,6 +710,8 @@ cpu_init (void)
- memcpy(cpu_data, __phys_per_cpu_start, __per_cpu_end - __per_cpu_start);
- __per_cpu_offset[cpu] = (char *) cpu_data - __per_cpu_start;
- cpu_data += PERCPU_PAGE_SIZE;
-+
-+ per_cpu(local_per_cpu_offset, cpu) = __per_cpu_offset[cpu];
- }
- }
- cpu_data = __per_cpu_start + __per_cpu_offset[smp_processor_id()];
-@@ -716,19 +719,18 @@ cpu_init (void)
- cpu_data = __phys_per_cpu_start;
- #endif /* !CONFIG_SMP */
-
-- cpu_info = cpu_data + ((char *) &__get_cpu_var(cpu_info) - __per_cpu_start);
--#ifdef CONFIG_NUMA
-- cpu_info->node_data = get_node_data_ptr();
--#endif
--
- get_max_cacheline_size();
-
- /*
- * We can't pass "local_cpu_data" to identify_cpu() because we haven't called
- * ia64_mmu_init() yet. And we can't call ia64_mmu_init() first because it
- * depends on the data returned by identify_cpu(). We break the dependency by
-- * accessing cpu_data() the old way, through identity mapped space.
-+ * accessing cpu_data() through the canonical per-CPU address.
- */
-+ cpu_info = cpu_data + ((char *) &__ia64_per_cpu_var(cpu_info) - __per_cpu_start);
-+#ifdef CONFIG_NUMA
-+ cpu_info->node_data = get_node_data_ptr();
-+#endif
- identify_cpu(cpu_info);
-
- #ifdef CONFIG_MCKINLEY
---- linux-2.6.0-test1/arch/ia64/kernel/smpboot.c 2003-07-02 14:53:12.000000000 -0700
-+++ 25/arch/ia64/kernel/smpboot.c 2003-07-19 17:04:07.000000000 -0700
-@@ -79,13 +79,13 @@ int cpucount;
- task_t *task_for_booting_cpu;
-
- /* Bitmask of currently online CPUs */
--volatile unsigned long cpu_online_map;
--unsigned long phys_cpu_present_map;
-+cpumask_t cpu_online_map;
-+cpumask_t phys_cpu_present_map;
-
- /* which logical CPU number maps to which CPU (physical APIC ID) */
- volatile int ia64_cpu_to_sapicid[NR_CPUS];
-
--static volatile unsigned long cpu_callin_map;
-+static volatile cpumask_t cpu_callin_map;
-
- struct smp_boot_data smp_boot_data __initdata;
-
-@@ -282,7 +282,7 @@ smp_callin (void)
- cpuid = smp_processor_id();
- phys_id = hard_smp_processor_id();
-
-- if (test_and_set_bit(cpuid, &cpu_online_map)) {
-+ if (cpu_test_and_set(cpuid, cpu_online_map)) {
- printk(KERN_ERR "huh, phys CPU#0x%x, CPU#0x%x already present??\n",
- phys_id, cpuid);
- BUG();
-@@ -327,7 +327,7 @@ smp_callin (void)
- /*
- * Allow the master to continue.
- */
-- set_bit(cpuid, &cpu_callin_map);
-+ cpu_set(cpuid, cpu_callin_map);
- Dprintk("Stack on CPU %d at about %p\n",cpuid, &cpuid);
- }
-
-@@ -391,19 +391,19 @@ do_boot_cpu (int sapicid, int cpu)
- */
- Dprintk("Waiting on callin_map ...");
- for (timeout = 0; timeout < 100000; timeout++) {
-- if (test_bit(cpu, &cpu_callin_map))
-+ if (cpu_isset(cpu, cpu_callin_map))
- break; /* It has booted */
- udelay(100);
- }
- Dprintk("\n");
-
-- if (test_bit(cpu, &cpu_callin_map)) {
-+ if (cpu_isset(cpu, cpu_callin_map)) {
- /* number CPUs logically, starting from 1 (BSP is 0) */
- printk(KERN_INFO "CPU%d: CPU has booted.\n", cpu);
- } else {
- printk(KERN_ERR "Processor 0x%x/0x%x is stuck.\n", cpu, sapicid);
- ia64_cpu_to_sapicid[cpu] = -1;
-- clear_bit(cpu, &cpu_online_map); /* was set in smp_callin() */
-+ cpu_clear(cpu, cpu_online_map); /* was set in smp_callin() */
- return -EINVAL;
- }
- return 0;
-@@ -446,13 +446,14 @@ smp_build_cpu_map (void)
- ia64_cpu_to_sapicid[cpu] = -1;
-
- ia64_cpu_to_sapicid[0] = boot_cpu_id;
-- phys_cpu_present_map = 1;
-+ cpus_clear(phys_cpu_present_map);
-+ cpu_set(0, phys_cpu_present_map);
-
- for (cpu = 1, i = 0; i < smp_boot_data.cpu_count; i++) {
- sapicid = smp_boot_data.cpu_phys_id[i];
- if (sapicid == boot_cpu_id)
- continue;
-- phys_cpu_present_map |= (1UL << cpu);
-+ cpu_set(cpu, phys_cpu_present_map);
- ia64_cpu_to_sapicid[cpu] = sapicid;
- cpu++;
- }
-@@ -463,7 +464,7 @@ smp_build_cpu_map (void)
- /* on which node is each logical CPU (one cacheline even for 64 CPUs) */
- volatile char cpu_to_node_map[NR_CPUS] __cacheline_aligned;
- /* which logical CPUs are on which nodes */
--volatile unsigned long node_to_cpu_mask[MAX_NUMNODES] __cacheline_aligned;
-+volatile cpumask_t node_to_cpu_mask[MAX_NUMNODES] __cacheline_aligned;
-
- /*
- * Build cpu to node mapping and initialize the per node cpu masks.
-@@ -474,7 +475,7 @@ build_cpu_to_node_map (void)
- int cpu, i, node;
-
- for(node=0; node<MAX_NUMNODES; node++)
-- node_to_cpu_mask[node] = 0;
-+ cpus_clear(node_to_cpu_mask[node]);
- for(cpu = 0; cpu < NR_CPUS; ++cpu) {
- /*
- * All Itanium NUMA platforms I know use ACPI, so maybe we
-@@ -492,7 +493,7 @@ build_cpu_to_node_map (void)
- #endif
- cpu_to_node_map[cpu] = node;
- if (node >= 0)
-- node_to_cpu_mask[node] |= (1UL << cpu);
-+ cpu_set(cpu, node_to_cpu_mask[node]);
- }
- }
-
-@@ -515,8 +516,8 @@ smp_prepare_cpus (unsigned int max_cpus)
- /*
- * We have the boot CPU online for sure.
- */
-- set_bit(0, &cpu_online_map);
-- set_bit(0, &cpu_callin_map);
-+ cpu_set(0, cpu_online_map);
-+ cpu_set(0, cpu_callin_map);
-
- local_cpu_data->loops_per_jiffy = loops_per_jiffy;
- ia64_cpu_to_sapicid[0] = boot_cpu_id;
-@@ -531,15 +532,18 @@ smp_prepare_cpus (unsigned int max_cpus)
- */
- if (!max_cpus) {
- printk(KERN_INFO "SMP mode deactivated.\n");
-- cpu_online_map = phys_cpu_present_map = 1;
-+ cpus_clear(cpu_online_map);
-+ cpus_clear(phys_cpu_present_map);
-+ cpu_set(1, cpu_online_map);
-+ cpu_set(1, phys_cpu_present_map);
- return;
- }
- }
-
- void __devinit smp_prepare_boot_cpu(void)
- {
-- set_bit(smp_processor_id(), &cpu_online_map);
-- set_bit(smp_processor_id(), &cpu_callin_map);
-+ cpu_set(smp_processor_id(), cpu_online_map);
-+ cpu_set(smp_processor_id(), cpu_callin_map);
- }
-
- void
---- linux-2.6.0-test1/arch/ia64/kernel/smp.c 2003-06-14 12:18:50.000000000 -0700
-+++ 25/arch/ia64/kernel/smp.c 2003-07-19 17:04:07.000000000 -0700
-@@ -72,7 +72,7 @@ static volatile struct call_data_struct
- #define IPI_CPU_STOP 1
-
- /* This needs to be cacheline aligned because it is written to by *other* CPUs. */
--static DEFINE_PER_CPU(__u64, ipi_operation) ____cacheline_aligned;
-+static DEFINE_PER_CPU(u64, ipi_operation) ____cacheline_aligned;
-
- static void
- stop_this_cpu (void)
-@@ -81,7 +81,7 @@ stop_this_cpu (void)
- /*
- * Remove this CPU:
- */
-- clear_bit(smp_processor_id(), &cpu_online_map);
-+ cpu_clear(smp_processor_id(), cpu_online_map);
- max_xtp();
- local_irq_disable();
- cpu_halt();
-@@ -91,7 +91,7 @@ irqreturn_t
- handle_IPI (int irq, void *dev_id, struct pt_regs *regs)
- {
- int this_cpu = get_cpu();
-- unsigned long *pending_ipis = &__get_cpu_var(ipi_operation);
-+ unsigned long *pending_ipis = &__ia64_per_cpu_var(ipi_operation);
- unsigned long ops;
-
- /* Count this now; we may make a call that never returns. */
---- linux-2.6.0-test1/arch/ia64/kernel/time.c 2003-07-13 21:44:34.000000000 -0700
-+++ 25/arch/ia64/kernel/time.c 2003-07-19 17:04:07.000000000 -0700
-@@ -40,13 +40,13 @@ unsigned long last_cli_ip;
- static void
- do_profile (unsigned long ip)
- {
-- extern unsigned long prof_cpu_mask;
-+ extern cpumask_t prof_cpu_mask;
- extern char _stext;
-
- if (!prof_buffer)
- return;
-
-- if (!((1UL << smp_processor_id()) & prof_cpu_mask))
-+ if (!cpu_isset(smp_processor_id(), prof_cpu_mask))
- return;
-
- ip -= (unsigned long) &_stext;
-@@ -83,12 +83,11 @@ unsigned long
- itc_get_offset (void)
- {
- unsigned long elapsed_cycles, lost = jiffies - wall_jiffies;
-- unsigned long now, last_tick;
-+ unsigned long now = ia64_get_itc(), last_tick;
-
- last_tick = (cpu_data(TIME_KEEPER_ID)->itm_next
- - (lost + 1)*cpu_data(TIME_KEEPER_ID)->itm_delta);
-
-- now = ia64_get_itc();
- if (unlikely((long) (now - last_tick) < 0)) {
- printk(KERN_ERR "CPU %d: now < last_tick (now=0x%lx,last_tick=0x%lx)!\n",
- smp_processor_id(), now, last_tick);
---- linux-2.6.0-test1/arch/ia64/Makefile 2003-07-02 14:53:12.000000000 -0700
-+++ 25/arch/ia64/Makefile 2003-07-19 17:03:49.000000000 -0700
-@@ -66,8 +66,7 @@ core-$(CONFIG_IA64_SGI_SN2) += arch/ia64
- drivers-$(CONFIG_PCI) += arch/ia64/pci/
- drivers-$(CONFIG_IA64_HP_SIM) += arch/ia64/hp/sim/
- drivers-$(CONFIG_IA64_HP_ZX1) += arch/ia64/hp/common/ arch/ia64/hp/zx1/
--drivers-$(CONFIG_IA64_GENERIC) += arch/ia64/hp/common/ arch/ia64/hp/zx1/ arch/ia64/hp/sim/ \
-- arch/ia64/sn/
-+drivers-$(CONFIG_IA64_GENERIC) += arch/ia64/hp/common/ arch/ia64/hp/zx1/ arch/ia64/hp/sim/
-
- boot := arch/ia64/boot
-
---- linux-2.6.0-test1/arch/ia64/mm/hugetlbpage.c 2003-06-22 12:04:43.000000000 -0700
-+++ 25/arch/ia64/mm/hugetlbpage.c 2003-07-19 17:07:16.000000000 -0700
-@@ -60,9 +60,9 @@ huge_pte_alloc (struct mm_struct *mm, un
- pte_t *pte = NULL;
-
- pgd = pgd_offset(mm, taddr);
-- pmd = pmd_alloc(mm, pgd, taddr);
-+ pmd = pmd_alloc_map(mm, pgd, taddr);
- if (pmd)
-- pte = pte_alloc_map(mm, pmd, taddr);
-+ pte = pte_alloc_map(mm, pgd, &pmd, taddr);
- return pte;
- }
-
---- linux-2.6.0-test1/arch/ia64/mm/init.c 2003-07-10 18:50:30.000000000 -0700
-+++ 25/arch/ia64/mm/init.c 2003-07-19 17:07:16.000000000 -0700
-@@ -286,10 +286,10 @@ put_kernel_page (struct page *page, unsi
-
- spin_lock(&init_mm.page_table_lock);
- {
-- pmd = pmd_alloc(&init_mm, pgd, address);
-+ pmd = pmd_alloc_kernel(&init_mm, pgd, address);
- if (!pmd)
- goto out;
-- pte = pte_alloc_map(&init_mm, pmd, address);
-+ pte = pte_alloc_map(&init_mm, pgd, &pmd, address);
- if (!pte)
- goto out;
- if (!pte_none(*pte)) {
---- linux-2.6.0-test1/arch/ia64/pci/pci.c 2003-07-10 18:50:30.000000000 -0700
-+++ 25/arch/ia64/pci/pci.c 2003-07-19 17:03:49.000000000 -0700
-@@ -124,7 +124,7 @@ subsys_initcall(pci_acpi_init);
-
- /* Called by ACPI when it finds a new root bus. */
-
--static struct pci_controller *
-+static struct pci_controller * __devinit
- alloc_pci_controller (int seg)
- {
- struct pci_controller *controller;
-@@ -138,7 +138,7 @@ alloc_pci_controller (int seg)
- return controller;
- }
-
--static int
-+static int __devinit
- alloc_resource (char *name, struct resource *root, unsigned long start, unsigned long end, unsigned long flags)
- {
- struct resource *res;
-@@ -159,7 +159,7 @@ alloc_resource (char *name, struct resou
- return 0;
- }
-
--static u64
-+static u64 __devinit
- add_io_space (struct acpi_resource_address64 *addr)
- {
- u64 offset;
-@@ -190,7 +190,7 @@ add_io_space (struct acpi_resource_addre
- return IO_SPACE_BASE(i);
- }
-
--static acpi_status
-+static acpi_status __devinit
- count_window (struct acpi_resource *resource, void *data)
- {
- unsigned int *windows = (unsigned int *) data;
-@@ -211,7 +211,7 @@ struct pci_root_info {
- char *name;
- };
-
--static acpi_status
-+static acpi_status __devinit
- add_window (struct acpi_resource *res, void *data)
- {
- struct pci_root_info *info = (struct pci_root_info *) data;
-@@ -252,7 +252,7 @@ add_window (struct acpi_resource *res, v
- return AE_OK;
- }
-
--struct pci_bus *
-+struct pci_bus * __devinit
- pci_acpi_scan_root (struct acpi_device *device, int domain, int bus)
- {
- struct pci_root_info info;
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/arch/ia64/scripts/check-model.c 2003-07-19 17:03:49.000000000 -0700
-@@ -0,0 +1 @@
-+int __attribute__ ((__model__ (__small__))) x;
---- linux-2.6.0-test1/arch/ia64/scripts/toolchain-flags 2003-07-02 14:53:12.000000000 -0700
-+++ 25/arch/ia64/scripts/toolchain-flags 2003-07-19 17:03:49.000000000 -0700
-@@ -2,6 +2,7 @@
- #
- # Check whether linker can handle cross-segment @segrel():
- #
-+CPPFLAGS=""
- CC=$1
- OBJDUMP=$2
- dir=$(dirname $0)
-@@ -11,10 +12,17 @@ $CC -nostdlib -static -Wl,-T$dir/check-s
- res=$($OBJDUMP --full --section .rodata $out | fgrep 000 | cut -f3 -d' ')
- rm -f $out
- if [ $res != 00000a00 ]; then
-- echo " -DHAVE_BUGGY_SEGREL"
-+ CPPFLAGS="$CPPFLAGS -DHAVE_BUGGY_SEGREL"
- cat >&2 <<EOF
- warning: your linker cannot handle cross-segment segment-relative relocations.
- please upgrade to a newer version (it is safe to use this linker, but
- the kernel will be bigger than strictly necessary).
- EOF
- fi
-+
-+if ! $CC -c $dir/check-model.c -o $out | grep -q 'attribute directive ignored'
-+then
-+ CPPFLAGS="$CPPFLAGS -DHAVE_MODEL_SMALL_ATTRIBUTE"
-+fi
-+rm -f $out
-+echo $CPPFLAGS
---- linux-2.6.0-test1/arch/m68k/apollo/dn_ints.c 2003-06-14 12:18:24.000000000 -0700
-+++ 25/arch/m68k/apollo/dn_ints.c 2003-07-19 17:03:49.000000000 -0700
-@@ -46,7 +46,7 @@ void dn_init_IRQ(void) {
- int dn_request_irq(unsigned int irq, irqreturn_t (*handler)(int, void *, struct pt_regs *), unsigned long flags, const char *devname, void *dev_id) {
-
- if((irq<0) || (irq>15)) {
-- printk("Trying to request illegal IRQ\n");
-+ printk("Trying to request invalid IRQ\n");
- return -ENXIO;
- }
-
-@@ -72,7 +72,7 @@ int dn_request_irq(unsigned int irq, irq
- void dn_free_irq(unsigned int irq, void *dev_id) {
-
- if((irq<0) || (irq>15)) {
-- printk("Trying to free illegal IRQ\n");
-+ printk("Trying to free invalid IRQ\n");
- return ;
- }
-
---- linux-2.6.0-test1/arch/m68k/atari/stram.c 2003-06-14 12:18:29.000000000 -0700
-+++ 25/arch/m68k/atari/stram.c 2003-07-19 17:03:49.000000000 -0700
-@@ -37,7 +37,6 @@
- #define MAJOR_NR Z2RAM_MAJOR
- #define do_z2_request do_stram_request
- #define DEVICE_NR(device) (minor(device))
--#include <linux/blk.h>
- #endif
-
- #undef DEBUG
---- linux-2.6.0-test1/arch/m68k/kernel/head.S 2003-06-14 12:18:51.000000000 -0700
-+++ 25/arch/m68k/kernel/head.S 2003-07-19 17:07:16.000000000 -0700
-@@ -110,7 +110,7 @@
- *
- * These routines are used by other mmu routines to get a pointer into
- * a table, if necessary a new table is allocated. These routines are working
-- * basically like pmd_alloc() and pte_alloc() in <asm/pgtable.h>. The root
-+ * basically like pmd_alloc_map() and pte_alloc_map() in <asm/pgtable.h>. The root
- * table needs of course only to be allocated once in mmu_get_root_table_entry,
- * so that here also some mmu specific initialization is done. The second page
- * at the start of the kernel (the first page is unmapped later) is used for
---- linux-2.6.0-test1/arch/m68k/mm/init.c 2003-06-14 12:18:32.000000000 -0700
-+++ 25/arch/m68k/mm/init.c 2003-07-19 17:03:49.000000000 -0700
-@@ -17,9 +17,6 @@
- #include <linux/types.h>
- #include <linux/init.h>
- #include <linux/bootmem.h>
--#ifdef CONFIG_BLK_DEV_RAM
--#include <linux/blk.h>
--#endif
-
- #include <asm/setup.h>
- #include <asm/uaccess.h>
---- linux-2.6.0-test1/arch/m68k/mm/kmap.c 2003-06-14 12:18:35.000000000 -0700
-+++ 25/arch/m68k/mm/kmap.c 2003-07-19 17:07:16.000000000 -0700
-@@ -189,7 +189,7 @@ void *__ioremap(unsigned long physaddr,
- printk ("\npa=%#lx va=%#lx ", physaddr, virtaddr);
- #endif
- pgd_dir = pgd_offset_k(virtaddr);
-- pmd_dir = pmd_alloc(&init_mm, pgd_dir, virtaddr);
-+ pmd_dir = pmd_alloc_kernel(&init_mm, pgd_dir, virtaddr);
- if (!pmd_dir) {
- printk("ioremap: no mem for pmd_dir\n");
- return NULL;
---- linux-2.6.0-test1/arch/m68k/mm/motorola.c 2003-06-14 12:18:23.000000000 -0700
-+++ 25/arch/m68k/mm/motorola.c 2003-07-19 17:03:49.000000000 -0700
-@@ -18,9 +18,6 @@
- #include <linux/types.h>
- #include <linux/init.h>
- #include <linux/bootmem.h>
--#ifdef CONFIG_BLK_DEV_RAM
--#include <linux/blk.h>
--#endif
-
- #include <asm/setup.h>
- #include <asm/uaccess.h>
---- linux-2.6.0-test1/arch/m68k/mm/sun3mmu.c 2003-06-14 12:18:05.000000000 -0700
-+++ 25/arch/m68k/mm/sun3mmu.c 2003-07-19 17:03:49.000000000 -0700
-@@ -16,9 +16,6 @@
- #include <linux/string.h>
- #include <linux/types.h>
- #include <linux/init.h>
--#ifdef CONFIG_BLK_DEV_RAM
--#include <linux/blk.h>
--#endif
- #include <linux/bootmem.h>
-
- #include <asm/setup.h>
---- linux-2.6.0-test1/arch/m68knommu/kernel/setup.c 2003-06-16 22:32:20.000000000 -0700
-+++ 25/arch/m68knommu/kernel/setup.c 2003-07-19 17:03:49.000000000 -0700
-@@ -37,7 +37,6 @@
- #include <asm/machdep.h>
-
- #ifdef CONFIG_BLK_DEV_INITRD
--#include <linux/blk.h>
- #include <asm/pgtable.h>
- #endif
-
---- linux-2.6.0-test1/arch/m68knommu/mm/init.c 2003-06-14 12:18:25.000000000 -0700
-+++ 25/arch/m68knommu/mm/init.c 2003-07-19 17:03:49.000000000 -0700
-@@ -27,9 +27,6 @@
- #include <linux/mm.h>
- #include <linux/swap.h>
- #include <linux/init.h>
--#ifdef CONFIG_BLK_DEV_RAM
--#include <linux/blk.h>
--#endif
- #include <linux/highmem.h>
- #include <linux/pagemap.h>
- #include <linux/bootmem.h>
---- linux-2.6.0-test1/arch/m68k/q40/q40ints.c 2003-06-14 12:18:33.000000000 -0700
-+++ 25/arch/m68k/q40/q40ints.c 2003-07-19 17:03:49.000000000 -0700
-@@ -171,7 +171,7 @@ void q40_free_irq(unsigned int irq, void
- {
- case 1: case 2: case 8: case 9:
- case 12: case 13:
-- printk("%s: ISA IRQ %d from %x illegal\n", __FUNCTION__, irq, (unsigned)dev_id);
-+ printk("%s: ISA IRQ %d from %x invalid\n", __FUNCTION__, irq, (unsigned)dev_id);
- return;
- case 11: irq=10;
- default:
---- linux-2.6.0-test1/arch/m68k/sun3x/dvma.c 2003-06-14 12:17:59.000000000 -0700
-+++ 25/arch/m68k/sun3x/dvma.c 2003-07-19 17:07:16.000000000 -0700
-@@ -102,7 +102,7 @@ inline int dvma_map_cpu(unsigned long ka
- pmd_t *pmd;
- unsigned long end2;
-
-- if((pmd = pmd_alloc(&init_mm, pgd, vaddr)) == NULL) {
-+ if((pmd = pmd_alloc_kernel(&init_mm, pgd, vaddr)) == NULL) {
- ret = -ENOMEM;
- goto out;
- }
---- linux-2.6.0-test1/arch/mips64/kernel/irq.c 2003-07-02 14:53:13.000000000 -0700
-+++ 25/arch/mips64/kernel/irq.c 2003-07-19 17:04:07.000000000 -0700
-@@ -818,13 +818,13 @@ EXPORT_SYMBOL(probe_irq_mask);
- static struct proc_dir_entry * root_irq_dir;
- static struct proc_dir_entry * irq_dir [NR_IRQS];
-
--#define HEX_DIGITS 8
-+#define HEX_DIGITS (2*sizeof(cpumask_t))
-
- static unsigned int parse_hex_value (const char *buffer,
-- unsigned long count, unsigned long *ret)
-+ unsigned long count, cpumask_t *ret)
- {
- unsigned char hexnum [HEX_DIGITS];
-- unsigned long value;
-+ cpumask_t value = CPU_MASK_NONE;
- int i;
-
- if (!count)
-@@ -838,10 +838,9 @@ static unsigned int parse_hex_value (con
- * Parse the first 8 characters as a hex string, any non-hex char
- * is end-of-string. '00e1', 'e1', '00E1', 'E1' are all the same.
- */
-- value = 0;
-
- for (i = 0; i < count; i++) {
-- unsigned int c = hexnum[i];
-+ unsigned int k, c = hexnum[i];
-
- switch (c) {
- case '0' ... '9': c -= '0'; break;
-@@ -850,7 +849,10 @@ static unsigned int parse_hex_value (con
- default:
- goto out;
- }
-- value = (value << 4) | c;
-+ cpus_shift_left(value, value, 4);
-+ for (k = 0; k < 4; ++k)
-+ if (c & (1 << k))
-+ cpu_set(k, value);
- }
- out:
- *ret = value;
-@@ -861,20 +863,31 @@ out:
-
- static struct proc_dir_entry * smp_affinity_entry [NR_IRQS];
-
--static unsigned long irq_affinity [NR_IRQS] = { [0 ... NR_IRQS-1] = ~0UL };
-+static cpumask_t irq_affinity [NR_IRQS] = { [0 ... NR_IRQS-1] = CPU_MASK_ALL };
- static int irq_affinity_read_proc (char *page, char **start, off_t off,
- int count, int *eof, void *data)
- {
-+ int k, len = 0;
-+ cpumask_t tmp = irq_affinity[(long)data];
-+
- if (count < HEX_DIGITS+1)
- return -EINVAL;
-- return sprintf (page, "%08lx\n", irq_affinity[(long)data]);
-+
-+ for (k = 0; k < sizeof(cpumask_t)/sizeof(u16); ++k) {
-+ int j = sprintf(page, "%04hx", cpus_coerce(tmp));
-+ len += j;
-+ page += j;
-+ cpus_shift_right(tmp, tmp, 16);
-+ }
-+ len += sprintf(page, "\n");
-+ return len;
- }
-
- static int irq_affinity_write_proc (struct file *file, const char *buffer,
- unsigned long count, void *data)
- {
- int irq = (long) data, full_count = count, err;
-- unsigned long new_value;
-+ cpumask_t new_value, tmp;
-
- if (!irq_desc[irq].handler->set_affinity)
- return -EIO;
-@@ -886,7 +899,8 @@ static int irq_affinity_write_proc (stru
- * way to make the system unusable accidentally :-) At least
- * one online CPU still has to be targeted.
- */
-- if (!(new_value & cpu_online_map))
-+ cpus_and(tmp, new_value, cpu_online_map);
-+ if (cpus_empty(tmp))
- return -EINVAL;
-
- irq_affinity[irq] = new_value;
-@@ -900,17 +914,28 @@ static int irq_affinity_write_proc (stru
- static int prof_cpu_mask_read_proc (char *page, char **start, off_t off,
- int count, int *eof, void *data)
- {
-- unsigned long *mask = (unsigned long *) data;
-+ int k, len = 0;
-+ cpumask_t *mask = (cpumask_t *)data, tmp;
-+
- if (count < HEX_DIGITS+1)
- return -EINVAL;
-- return sprintf (page, "%08lx\n", *mask);
-+
-+ tmp = *mask;
-+ for (k = 0; k < sizeof(cpumask_t)/sizeof(u16); ++k) {
-+ int j = sprintf(page, "%04hx", cpus_coerce(tmp));
-+ len += j;
-+ page += j;
-+ cpus_shift_right(tmp, tmp, 16);
-+ }
-+ len += sprintf(page, "\n");
-+ return len;
- }
-
- static int prof_cpu_mask_write_proc (struct file *file, const char *buffer,
- unsigned long count, void *data)
- {
-- unsigned long *mask = (unsigned long *) data, full_count = count, err;
-- unsigned long new_value;
-+ unsigned long full_count = count, err;
-+ cpumask_t new_value, *mask = (cpumask_t *)data;
-
- err = parse_hex_value(buffer, count, &new_value);
- if (err)
---- linux-2.6.0-test1/arch/mips64/kernel/proc.c 2003-07-02 14:53:13.000000000 -0700
-+++ 25/arch/mips64/kernel/proc.c 2003-07-19 17:04:07.000000000 -0700
-@@ -81,7 +81,7 @@ static int show_cpuinfo(struct seq_file
- char fmt [64];
-
- #ifdef CONFIG_SMP
-- if (!CPUMASK_TSTB(cpu_online_map, n))
-+ if (!cpu_isset(n, cpu_online_map))
- return 0;
- #endif
-
---- linux-2.6.0-test1/arch/mips64/kernel/setup.c 2003-07-02 14:53:13.000000000 -0700
-+++ 25/arch/mips64/kernel/setup.c 2003-07-19 17:03:49.000000000 -0700
-@@ -28,9 +28,6 @@
- #include <linux/a.out.h>
- #include <linux/tty.h>
- #include <linux/bootmem.h>
--#ifdef CONFIG_BLK_DEV_RAM
--#include <linux/blk.h>
--#endif
- #include <linux/major.h>
- #include <linux/kdev_t.h>
- #include <linux/root_dev.h>
---- linux-2.6.0-test1/arch/mips64/kernel/smp.c 2003-07-02 14:53:13.000000000 -0700
-+++ 25/arch/mips64/kernel/smp.c 2003-07-19 17:04:07.000000000 -0700
-@@ -146,7 +146,7 @@ asmlinkage void start_secondary(void)
- cpu_data[cpu].udelay_val = loops_per_jiffy;
- prom_smp_finish();
- printk("Slave cpu booted successfully\n");
-- CPUMASK_SETB(cpu_online_map, cpu);
-+ cpu_set(cpu, cpu_online_map);
- atomic_inc(&cpus_booted);
- cpu_idle();
- }
-@@ -250,7 +250,7 @@ static void stop_this_cpu(void *dummy)
- /*
- * Remove this CPU:
- */
-- clear_bit(smp_processor_id(), &cpu_online_map);
-+ cpu_clear(smp_processor_id(), cpu_online_map);
- local_irq_enable(); /* May need to service _machine_restart IPI */
- for (;;); /* Wait if available. */
- }
---- linux-2.6.0-test1/arch/mips/kernel/irq.c 2003-07-02 14:53:13.000000000 -0700
-+++ 25/arch/mips/kernel/irq.c 2003-07-19 17:04:07.000000000 -0700
-@@ -861,20 +861,30 @@ out:
-
- static struct proc_dir_entry * smp_affinity_entry [NR_IRQS];
-
--static unsigned long irq_affinity [NR_IRQS] = { [0 ... NR_IRQS-1] = ~0UL };
-+static cpumask_t irq_affinity [NR_IRQS] = { [0 ... NR_IRQS-1] = ~0UL };
- static int irq_affinity_read_proc (char *page, char **start, off_t off,
- int count, int *eof, void *data)
- {
-+ int len, k;
-+ cpumask_t tmp = irq_affinity[(long)data];
-+
- if (count < HEX_DIGITS+1)
- return -EINVAL;
-- return sprintf (page, "%08lx\n", irq_affinity[(long)data]);
-+ for (k = 0; k < sizeof(cpumask_t)/sizeof(u16); ++k) {
-+ int j = sprintf(page, "%04hx", cpus_coerce(tmp));
-+ len += j;
-+ page += j;
-+ cpus_shift_right(tmp, tmp, 16);
-+ }
-+ len += sprintf(page, "\n");
-+ return len;
- }
-
- static int irq_affinity_write_proc (struct file *file, const char *buffer,
- unsigned long count, void *data)
- {
- int irq = (long) data, full_count = count, err;
-- unsigned long new_value;
-+ cpumask_t new_value, tmp;
-
- if (!irq_desc[irq].handler->set_affinity)
- return -EIO;
-@@ -886,7 +896,8 @@ static int irq_affinity_write_proc (stru
- * way to make the system unusable accidentally :-) At least
- * one online CPU still has to be targeted.
- */
-- if (!(new_value & cpu_online_map))
-+ cpus_and(tmp, tmp, cpu_online_map);
-+ if (cpus_empty(tmp))
- return -EINVAL;
-
- irq_affinity[irq] = new_value;
-@@ -900,17 +911,28 @@ static int irq_affinity_write_proc (stru
- static int prof_cpu_mask_read_proc (char *page, char **start, off_t off,
- int count, int *eof, void *data)
- {
-- unsigned long *mask = (unsigned long *) data;
-+ int len, k;
-+ cpumask_t *mask = (cpumask_t *)data, tmp;
-+
- if (count < HEX_DIGITS+1)
- return -EINVAL;
-- return sprintf (page, "%08lx\n", *mask);
-+ tmp = *mask;
-+
-+ for (k = 0; k < sizeof(cpumask_t)/sizeof(u16); ++k) {
-+ int j = sprintf(page, "%04hx", cpus_coerce(tmp));
-+ len += j;
-+ page += j;
-+ cpus_shift_right(tmp, tmp, 16);
-+ }
-+ len += sprintf(page, "\n");
-+ return len;
- }
-
- static int prof_cpu_mask_write_proc (struct file *file, const char *buffer,
- unsigned long count, void *data)
- {
-- unsigned long *mask = (unsigned long *) data, full_count = count, err;
-- unsigned long new_value;
-+ cpumask_t *mask = (cpumask_t *)data, new_value;
-+ unsigned long full_count = count, err;
-
- err = parse_hex_value(buffer, count, &new_value);
- if (err)
---- linux-2.6.0-test1/arch/mips/kernel/proc.c 2003-07-02 14:53:13.000000000 -0700
-+++ 25/arch/mips/kernel/proc.c 2003-07-19 17:04:07.000000000 -0700
-@@ -81,7 +81,7 @@ static int show_cpuinfo(struct seq_file
- char fmt [64];
-
- #ifdef CONFIG_SMP
-- if (!CPUMASK_TSTB(cpu_online_map, n))
-+ if (!cpu_isset(n, cpu_online_map))
- return 0;
- #endif
-
---- linux-2.6.0-test1/arch/mips/kernel/smp.c 2003-07-02 14:53:13.000000000 -0700
-+++ 25/arch/mips/kernel/smp.c 2003-07-19 17:04:07.000000000 -0700
-@@ -146,7 +146,7 @@ asmlinkage void start_secondary(void)
- cpu_data[cpu].udelay_val = loops_per_jiffy;
- prom_smp_finish();
- printk("Slave cpu booted successfully\n");
-- CPUMASK_SETB(cpu_online_map, cpu);
-+ cpu_set(cpu, cpu_online_map);
- atomic_inc(&cpus_booted);
- cpu_idle();
- }
-@@ -250,7 +250,7 @@ static void stop_this_cpu(void *dummy)
- /*
- * Remove this CPU:
- */
-- clear_bit(smp_processor_id(), &cpu_online_map);
-+ cpu_clear(smp_processor_id(), cpu_online_map);
- local_irq_enable(); /* May need to service _machine_restart IPI */
- for (;;); /* Wait if available. */
- }
---- linux-2.6.0-test1/arch/mips/mm/fault.c 2003-07-02 14:53:13.000000000 -0700
-+++ 25/arch/mips/mm/fault.c 2003-07-19 17:03:49.000000000 -0700
-@@ -162,7 +162,7 @@ bad_area:
- tsk->thread.cp0_badvaddr = address;
- tsk->thread.error_code = write;
- #if 0
-- printk("do_page_fault() #2: sending SIGSEGV to %s for illegal %s\n"
-+ printk("do_page_fault() #2: sending SIGSEGV to %s for invalid %s\n"
- "%08lx (epc == %08lx, ra == %08lx)\n",
- tsk->comm,
- write ? "write access to" : "read access from",
---- linux-2.6.0-test1/arch/mips/mm/init.c 2003-07-02 14:53:13.000000000 -0700
-+++ 25/arch/mips/mm/init.c 2003-07-19 17:03:49.000000000 -0700
-@@ -24,7 +24,7 @@
- #include <linux/bootmem.h>
- #include <linux/highmem.h>
- #include <linux/swap.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
-
- #include <asm/bootinfo.h>
- #include <asm/cacheflush.h>
---- linux-2.6.0-test1/arch/mips/mm/ioremap.c 2003-07-02 14:53:13.000000000 -0700
-+++ 25/arch/mips/mm/ioremap.c 2003-07-19 17:07:16.000000000 -0700
-@@ -81,7 +81,7 @@ static int remap_area_pages(unsigned lon
- spin_lock(&init_mm.page_table_lock);
- do {
- pmd_t *pmd;
-- pmd = pmd_alloc(&init_mm, dir, address);
-+ pmd = pmd_alloc_kernel(&init_mm, dir, address);
- error = -ENOMEM;
- if (!pmd)
- break;
---- linux-2.6.0-test1/arch/mips/momentum/ocelot_c/setup.c 2003-07-02 14:53:13.000000000 -0700
-+++ 25/arch/mips/momentum/ocelot_c/setup.c 2003-07-19 17:03:49.000000000 -0700
-@@ -63,7 +63,7 @@
- #include <asm/mc146818rtc.h>
- #include <linux/version.h>
- #include <linux/bootmem.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <asm/mv64340.h>
- #include "ocelot_c_fpga.h"
-
---- linux-2.6.0-test1/arch/mips/momentum/ocelot_g/setup.c 2003-07-02 14:53:13.000000000 -0700
-+++ 25/arch/mips/momentum/ocelot_g/setup.c 2003-07-19 17:03:49.000000000 -0700
-@@ -64,7 +64,7 @@
- #include <asm/mc146818rtc.h>
- #include <linux/version.h>
- #include <linux/bootmem.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include "gt64240.h"
- #include "ocelot_pld.h"
-
---- linux-2.6.0-test1/arch/mips/ramdisk/Makefile 2003-07-02 14:53:13.000000000 -0700
-+++ 25/arch/mips/ramdisk/Makefile 2003-07-19 17:03:49.000000000 -0700
-@@ -2,7 +2,7 @@
- # Makefile for a ramdisk image
- #
-
--O_FORMAT = $(shell $(OBJDUMP) -i | head -2 | grep elf32)
-+O_FORMAT = $(shell $(OBJDUMP) -i | head -n 2 | grep elf32)
- img = $(CONFIG_EMBEDDED_RAMDISK_IMAGE)
- ramdisk.o: $(subst ",,$(img)) ld.script
- echo "O_FORMAT: " $(O_FORMAT)
---- linux-2.6.0-test1/arch/mips/sgi-ip27/ip27-init.c 2003-07-02 14:53:13.000000000 -0700
-+++ 25/arch/mips/sgi-ip27/ip27-init.c 2003-07-19 17:04:07.000000000 -0700
-@@ -481,7 +481,7 @@ static int __init do_boot_cpu(int cpu, i
- */
- __cpu_number_map[cpu] = num_cpus;
- __cpu_logical_map[num_cpus] = cpu;
-- CPUMASK_SETB(cpu_online_map, cpu);
-+ cpu_set(cpu, cpu_online_map);
-
- /*
- * Wait this cpu to start up and initialize its hub,
---- linux-2.6.0-test1/arch/mips/sibyte/cfe/setup.c 2003-07-02 14:53:13.000000000 -0700
-+++ 25/arch/mips/sibyte/cfe/setup.c 2003-07-19 17:03:49.000000000 -0700
-@@ -20,7 +20,7 @@
- #include <linux/init.h>
- #include <linux/kernel.h>
- #include <linux/mm.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/bootmem.h>
- #include <linux/smp.h>
-
---- linux-2.6.0-test1/arch/mips/sibyte/cfe/smp.c 2003-07-02 14:53:13.000000000 -0700
-+++ 25/arch/mips/sibyte/cfe/smp.c 2003-07-19 17:04:07.000000000 -0700
-@@ -63,7 +63,7 @@ void prom_setup_smp(void)
- /* Use CFE to find out how many CPUs are available */
- for (i=1; i<NR_CPUS; i++) {
- if (cfe_cpu_stop(i) == 0) {
-- CPUMASK_SETB(cpu_online_map, i);
-+ cpu_set(i, cpu_online_map);
- }
- }
- printk("Detected %i available CPU(s)\n", num_online_cpus());
---- linux-2.6.0-test1/arch/mips/sibyte/sb1250/prom.c 2003-07-02 14:53:13.000000000 -0700
-+++ 25/arch/mips/sibyte/sb1250/prom.c 2003-07-19 17:03:49.000000000 -0700
-@@ -20,7 +20,7 @@
- #include <linux/init.h>
- #include <linux/kernel.h>
- #include <linux/mm.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/bootmem.h>
- #include <linux/smp.h>
-
---- linux-2.6.0-test1/arch/mips/sibyte/sb1250/smp.c 2003-07-02 14:53:13.000000000 -0700
-+++ 25/arch/mips/sibyte/sb1250/smp.c 2003-07-19 17:04:07.000000000 -0700
-@@ -107,8 +107,8 @@ void __init smp_boot_cpus(void)
- current_thread_info()->cpu = 0;
- cpu_data[0].udelay_val = loops_per_jiffy;
- cpu_data[0].asid_cache = ASID_FIRST_VERSION;
-- CPUMASK_CLRALL(cpu_online_map);
-- CPUMASK_SETB(cpu_online_map, 0);
-+ cpus_clear(cpu_online_map);
-+ cpu_set(0, cpu_online_map);
- atomic_set(&cpus_booted, 1); /* Master CPU is already booted... */
- smp_tune_scheduling();
-
---- linux-2.6.0-test1/arch/mips/sibyte/swarm/setup.c 2003-07-02 14:53:13.000000000 -0700
-+++ 25/arch/mips/sibyte/swarm/setup.c 2003-07-19 17:03:49.000000000 -0700
-@@ -23,7 +23,7 @@
- #include <linux/spinlock.h>
- #include <linux/mm.h>
- #include <linux/bootmem.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/init.h>
- #include <linux/ide.h>
- #include <linux/console.h>
---- linux-2.6.0-test1/arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_irq.c 2003-07-02 14:53:13.000000000 -0700
-+++ 25/arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_irq.c 2003-07-19 17:03:49.000000000 -0700
-@@ -134,7 +134,7 @@ JP7 is not bus master -- do NOT use -- o
- #include <asm/time.h>
- #include <linux/version.h>
- #include <linux/bootmem.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #ifdef CONFIG_RTC_DS1742
- #include <asm/rtc_ds1742.h>
- #endif
---- linux-2.6.0-test1/arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_setup.c 2003-07-02 14:53:13.000000000 -0700
-+++ 25/arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_setup.c 2003-07-19 17:03:49.000000000 -0700
-@@ -62,7 +62,7 @@
- #include <asm/time.h>
- #include <linux/version.h>
- #include <linux/bootmem.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/console.h>
- #ifdef CONFIG_RTC_DS1742
- #include <asm/rtc_ds1742.h>
---- linux-2.6.0-test1/arch/mips/vr41xx/tanbac-tb0229/setup.c 2003-07-02 14:53:13.000000000 -0700
-+++ 25/arch/mips/vr41xx/tanbac-tb0229/setup.c 2003-07-19 17:03:49.000000000 -0700
-@@ -18,7 +18,7 @@
- * option) any later version.
- */
- #include <linux/config.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/console.h>
- #include <linux/init.h>
- #include <linux/ioport.h>
---- linux-2.6.0-test1/arch/parisc/kernel/ioctl32.c 2003-07-13 21:44:34.000000000 -0700
-+++ 25/arch/parisc/kernel/ioctl32.c 2003-07-19 17:03:49.000000000 -0700
-@@ -48,7 +48,6 @@
- #include <linux/raw.h>
- #include <linux/smb_fs.h>
- #include <linux/blkpg.h>
--#include <linux/blk.h>
- #include <linux/elevator.h>
- #include <linux/rtc.h>
- #include <linux/pci.h>
---- linux-2.6.0-test1/arch/parisc/kernel/pci-dma.c 2003-06-14 12:18:33.000000000 -0700
-+++ 25/arch/parisc/kernel/pci-dma.c 2003-07-19 17:07:16.000000000 -0700
-@@ -133,7 +133,7 @@ static inline int map_uncached_pages(uns
- do {
- pmd_t *pmd;
-
-- pmd = pmd_alloc(NULL, dir, vaddr);
-+ pmd = pmd_alloc_kernel(NULL, dir, vaddr);
- if (!pmd)
- return -ENOMEM;
- if (map_pmd_uncached(pmd, vaddr, end - vaddr, &paddr))
---- linux-2.6.0-test1/arch/parisc/kernel/smp.c 2003-07-10 18:50:30.000000000 -0700
-+++ 25/arch/parisc/kernel/smp.c 2003-07-19 17:04:07.000000000 -0700
-@@ -62,14 +62,14 @@ volatile struct task_struct *smp_init_cu
-
- static volatile int smp_commenced = 0; /* Set when the idlers are all forked */
- static volatile int cpu_now_booting = 0; /* track which CPU is booting */
--volatile unsigned long cpu_online_map = 0; /* Bitmap of online CPUs */
--#define IS_LOGGED_IN(cpunum) (test_bit(cpunum, (atomic_t *)&cpu_online_map))
-+cpumask_t cpu_online_map = CPU_MASK_NONE; /* Bitmap of online CPUs */
-+#define IS_LOGGED_IN(cpunum) (cpu_isset(cpunum, cpu_online_map))
-
- int smp_num_cpus = 1;
- int smp_threads_ready = 0;
- unsigned long cache_decay_ticks;
- static int max_cpus = -1; /* Command line */
--unsigned long cpu_present_mask;
-+cpumask_t cpu_present_mask;
-
- struct smp_call_struct {
- void (*func) (void *info);
-@@ -139,7 +139,7 @@ halt_processor(void)
- #else
- /* REVISIT : redirect I/O Interrupts to another CPU? */
- /* REVISIT : does PM *know* this CPU isn't available? */
-- clear_bit(smp_processor_id(), (void *)&cpu_online_map);
-+ cpu_clear(smp_processor_id(), cpu_online_map);
- local_irq_disable();
- for (;;)
- ;
-@@ -443,7 +443,7 @@ smp_cpu_init(int cpunum)
- mb();
-
- /* Well, support 2.4 linux scheme as well. */
-- if (test_and_set_bit(cpunum, (unsigned long *) (&cpu_online_map)))
-+ if (cpu_test_and_set(cpunum, cpu_online_map))
- {
- extern void machine_halt(void); /* arch/parisc.../process.c */
-
-@@ -624,13 +624,14 @@ void __init smp_boot_cpus(void)
- printk(KERN_DEBUG "SMP: bootstrap CPU ID is %d\n",bootstrap_processor);
- init_task.thread_info->cpu = bootstrap_processor;
- current->thread_info->cpu = bootstrap_processor;
-- cpu_online_map = 1 << bootstrap_processor; /* Mark Boostrap processor as present */
-+ /* Mark Boostrap processor as present */
-+ cpu_online_map = cpumask_of_cpu(bootstrap_processor);
- current->active_mm = &init_mm;
-
- #ifdef ENTRY_SYS_CPUS
- cpu_data[0].state = STATE_RUNNING;
- #endif
-- cpu_present_mask = 1UL << bootstrap_processor;
-+ cpu_present_mask = cpumask_of_cpu(bootstrap_processor);
-
- /* Nothing to do when told not to. */
- if (max_cpus == 0) {
-@@ -709,8 +710,8 @@ void __init smp_prepare_cpus(unsigned in
-
- void __devinit smp_prepare_boot_cpu(void)
- {
-- set_bit(smp_processor_id(), &cpu_online_map);
-- set_bit(smp_processor_id(), &cpu_present_mask);
-+ cpu_set(smp_processor_id(), cpu_online_map);
-+ cpu_set(smp_processor_id(), cpu_present_mask);
- }
-
- int __devinit __cpu_up(unsigned int cpu)
---- linux-2.6.0-test1/arch/parisc/mm/ioremap.c 2003-06-14 12:18:07.000000000 -0700
-+++ 25/arch/parisc/mm/ioremap.c 2003-07-19 17:07:16.000000000 -0700
-@@ -77,7 +77,7 @@ static int remap_area_pages(unsigned lon
- spin_lock(&init_mm.page_table_lock);
- do {
- pmd_t *pmd;
-- pmd = pmd_alloc(dir, address);
-+ pmd = pmd_alloc_kernel(dir, address);
- error = -ENOMEM;
- if (!pmd)
- break;
---- linux-2.6.0-test1/arch/ppc64/boot/Makefile 2003-06-14 12:18:32.000000000 -0700
-+++ 25/arch/ppc64/boot/Makefile 2003-07-19 17:03:49.000000000 -0700
-@@ -118,7 +118,7 @@ $(obj)/imagesize.c: vmlinux
- ls -l vmlinux | \
- awk '{printf "/* generated -- do not edit! */\n" \
- "unsigned long vmlinux_filesize = %d;\n", $$5}' > $(obj)/imagesize.c
-- $(CROSS_COMPILE)nm -n vmlinux | tail -1 | \
-+ $(CROSS_COMPILE)nm -n vmlinux | tail -n 1 | \
- awk '{printf "unsigned long vmlinux_memsize = 0x%s;\n", substr($$1,8)}' \
- >> $(obj)/imagesize.c
-
---- linux-2.6.0-test1/arch/ppc64/Kconfig 2003-07-02 14:53:14.000000000 -0700
-+++ 25/arch/ppc64/Kconfig 2003-07-19 17:04:07.000000000 -0700
-@@ -93,7 +93,7 @@ config IRQ_ALL_CPUS
- CPU.
-
- config NR_CPUS
-- int "Maximum number of CPUs (2-64)"
-+ int "Maximum number of CPUs (2-128)"
- depends on SMP
- default "32"
-
---- linux-2.6.0-test1/arch/ppc64/kernel/htab.c 2003-06-14 12:18:23.000000000 -0700
-+++ 25/arch/ppc64/kernel/htab.c 2003-07-19 17:04:07.000000000 -0700
-@@ -377,6 +377,7 @@ int hash_page(unsigned long ea, unsigned
- int ret;
- int user_region = 0;
- int local = 0;
-+ cpumask_t tmp;
-
- /* Check for invalid addresses. */
- if (!IS_VALID_EA(ea))
-@@ -431,7 +432,8 @@ int hash_page(unsigned long ea, unsigned
- */
- spin_lock(&mm->page_table_lock);
-
-- if (user_region && (mm->cpu_vm_mask == (1 << smp_processor_id())))
-+ tmp = cpumask_of_cpu(smp_processor_id());
-+ if (user_region && cpus_equal(mm->cpu_vm_mask, tmp))
- local = 1;
-
- ptep = find_linux_pte(pgdir, ea);
---- linux-2.6.0-test1/arch/ppc64/kernel/irq.c 2003-06-14 12:18:08.000000000 -0700
-+++ 25/arch/ppc64/kernel/irq.c 2003-07-19 17:04:07.000000000 -0700
-@@ -603,26 +603,37 @@ static struct proc_dir_entry * irq_dir [
- static struct proc_dir_entry * smp_affinity_entry [NR_IRQS];
-
- #ifdef CONFIG_IRQ_ALL_CPUS
--unsigned long irq_affinity [NR_IRQS] = { [0 ... NR_IRQS-1] = -1UL};
-+cpumask_t irq_affinity [NR_IRQS] = { [0 ... NR_IRQS-1] = CPU_MASK_ALL };
- #else /* CONFIG_IRQ_ALL_CPUS */
--unsigned long irq_affinity [NR_IRQS] = { [0 ... NR_IRQS-1] = 0x0};
-+cpumask_t irq_affinity [NR_IRQS] = { [0 ... NR_IRQS-1] = CPU_MASK_NONE };
- #endif /* CONFIG_IRQ_ALL_CPUS */
-
--#define HEX_DIGITS 16
-+#define HEX_DIGITS (2*sizeof(cpumask_t))
-
- static int irq_affinity_read_proc (char *page, char **start, off_t off,
- int count, int *eof, void *data)
- {
-+ int k, len;
-+ cpumask_t tmp = irq_affinity[(long)data];
-+
- if (count < HEX_DIGITS+1)
- return -EINVAL;
-- return sprintf(page, "%16lx\n", irq_affinity[(long)data]);
-+
-+ for (k = 0; k < sizeof(cpumask_t) / sizeof(u16); ++k) {
-+ int j = sprintf(page, "%04hx", (u16)cpus_coerce(tmp));
-+ len += j;
-+ page += j;
-+ cpus_shift_right(tmp, tmp, 16);
-+ }
-+ len += sprintf(page, "\n");
-+ return len;
- }
-
- static unsigned int parse_hex_value (const char *buffer,
-- unsigned long count, unsigned long *ret)
-+ unsigned long count, cpumask_t *ret)
- {
- unsigned char hexnum [HEX_DIGITS];
-- unsigned long value;
-+ cpumask_t value = CPU_MASK_NONE;
- int i;
-
- if (!count)
-@@ -636,10 +647,10 @@ static unsigned int parse_hex_value (con
- * Parse the first 16 characters as a hex string, any non-hex char
- * is end-of-string. '00e1', 'e1', '00E1', 'E1' are all the same.
- */
-- value = 0;
-
- for (i = 0; i < count; i++) {
- unsigned int c = hexnum[i];
-+ int k;
-
- switch (c) {
- case '0' ... '9': c -= '0'; break;
-@@ -648,7 +659,11 @@ static unsigned int parse_hex_value (con
- default:
- goto out;
- }
-- value = (value << 4) | c;
-+ cpus_shift_left(value, value, 4);
-+ for (k = 0; k < 4; ++k)
-+ if (test_bit(k, (unsigned long *)&c))
-+ cpu_set(k, value);
-+
- }
- out:
- *ret = value;
-@@ -659,7 +674,7 @@ static int irq_affinity_write_proc (stru
- unsigned long count, void *data)
- {
- int irq = (long)data, full_count = count, err;
-- unsigned long new_value;
-+ cpumask_t new_value, tmp;
-
- if (!irq_desc[irq].handler->set_affinity)
- return -EIO;
-@@ -671,7 +686,8 @@ static int irq_affinity_write_proc (stru
- * way to make the system unusable accidentally :-) At least
- * one online CPU still has to be targeted.
- */
-- if (!(new_value & cpu_online_map))
-+ cpus_and(tmp, new_value, cpu_online_map);
-+ if (cpus_empty(tmp))
- return -EINVAL;
-
- irq_affinity[irq] = new_value;
-@@ -692,8 +708,9 @@ static int prof_cpu_mask_read_proc (char
- static int prof_cpu_mask_write_proc (struct file *file, const char *buffer,
- unsigned long count, void *data)
- {
-- unsigned long *mask = (unsigned long *) data, full_count = count, err;
-- unsigned long new_value;
-+ cpumask_t *mask = (cpumask_t *)data;
-+ unsigned long full_count = count, err;
-+ cpumask_t new_value;
-
- err = parse_hex_value(buffer, count, &new_value);
- if (err)
---- linux-2.6.0-test1/arch/ppc64/kernel/iSeries_irq.c 2003-06-14 12:18:29.000000000 -0700
-+++ 25/arch/ppc64/kernel/iSeries_irq.c 2003-07-19 17:03:49.000000000 -0700
-@@ -29,7 +29,6 @@
- #include <linux/param.h>
- #include <linux/string.h>
- #include <linux/bootmem.h>
--#include <linux/blk.h>
- #include <linux/ide.h>
-
- #include <linux/irq.h>
---- linux-2.6.0-test1/arch/ppc64/kernel/open_pic.c 2003-06-14 12:18:23.000000000 -0700
-+++ 25/arch/ppc64/kernel/open_pic.c 2003-07-19 17:04:07.000000000 -0700
-@@ -46,7 +46,7 @@ static int broken_ipi_registers;
- OpenPIC_SourcePtr ISU[OPENPIC_MAX_ISU];
-
- static void openpic_end_irq(unsigned int irq_nr);
--static void openpic_set_affinity(unsigned int irq_nr, unsigned long cpumask);
-+static void openpic_set_affinity(unsigned int irq_nr, cpumask_t cpumask);
-
- struct hw_interrupt_type open_pic = {
- " OpenPIC ",
-@@ -505,7 +505,7 @@ static void openpic_set_spurious(u_int v
- void openpic_init_processor(u_int cpumask)
- {
- openpic_write(&OpenPIC->Global.Processor_Initialization,
-- cpumask & cpu_online_map);
-+ cpumask & cpus_coerce(cpu_online_map));
- }
-
- #ifdef CONFIG_SMP
-@@ -539,7 +539,7 @@ void openpic_cause_IPI(u_int ipi, u_int
- CHECK_THIS_CPU;
- check_arg_ipi(ipi);
- openpic_write(&OpenPIC->THIS_CPU.IPI_Dispatch(ipi),
-- cpumask & cpu_online_map);
-+ cpumask & cpus_coerce(cpu_online_map));
- }
-
- void openpic_request_IPIs(void)
-@@ -625,7 +625,7 @@ static void __init openpic_maptimer(u_in
- {
- check_arg_timer(timer);
- openpic_write(&OpenPIC->Global.Timer[timer].Destination,
-- cpumask & cpu_online_map);
-+ cpumask & cpus_coerce(cpu_online_map));
- }
-
-
-@@ -746,9 +746,12 @@ static void openpic_end_irq(unsigned int
- openpic_eoi();
- }
-
--static void openpic_set_affinity(unsigned int irq_nr, unsigned long cpumask)
-+static void openpic_set_affinity(unsigned int irq_nr, cpumask_t cpumask)
- {
-- openpic_mapirq(irq_nr - open_pic_irq_offset, cpumask & cpu_online_map);
-+ cpumask_t tmp;
-+
-+ cpus_and(tmp, cpumask, cpu_online_map);
-+ openpic_mapirq(irq_nr - open_pic_irq_offset, cpus_coerce(tmp));
- }
-
- #ifdef CONFIG_SMP
---- linux-2.6.0-test1/arch/ppc64/kernel/open_pic.h 2003-06-14 12:17:58.000000000 -0700
-+++ 25/arch/ppc64/kernel/open_pic.h 2003-07-19 17:04:07.000000000 -0700
-@@ -13,6 +13,7 @@
- #define _PPC64_KERNEL_OPEN_PIC_H
-
- #include <linux/config.h>
-+#include <linux/cpumask.h>
-
- #define OPENPIC_SIZE 0x40000
-
---- linux-2.6.0-test1/arch/ppc64/kernel/pacaData.c 2003-06-14 12:18:29.000000000 -0700
-+++ 25/arch/ppc64/kernel/pacaData.c 2003-07-19 17:04:07.000000000 -0700
-@@ -134,5 +134,71 @@ struct paca_struct paca[NR_CPUS] __page_
- PACAINITDATA(61, 0, 0, 0, 0),
- PACAINITDATA(62, 0, 0, 0, 0),
- PACAINITDATA(63, 0, 0, 0, 0),
-+#if NR_CPUS > 64
-+ PACAINITDATA(64, 0, 0, 0, 0),
-+ PACAINITDATA(65, 0, 0, 0, 0),
-+ PACAINITDATA(66, 0, 0, 0, 0),
-+ PACAINITDATA(67, 0, 0, 0, 0),
-+ PACAINITDATA(68, 0, 0, 0, 0),
-+ PACAINITDATA(69, 0, 0, 0, 0),
-+ PACAINITDATA(70, 0, 0, 0, 0),
-+ PACAINITDATA(71, 0, 0, 0, 0),
-+ PACAINITDATA(72, 0, 0, 0, 0),
-+ PACAINITDATA(73, 0, 0, 0, 0),
-+ PACAINITDATA(74, 0, 0, 0, 0),
-+ PACAINITDATA(75, 0, 0, 0, 0),
-+ PACAINITDATA(76, 0, 0, 0, 0),
-+ PACAINITDATA(77, 0, 0, 0, 0),
-+ PACAINITDATA(78, 0, 0, 0, 0),
-+ PACAINITDATA(79, 0, 0, 0, 0),
-+ PACAINITDATA(80, 0, 0, 0, 0),
-+ PACAINITDATA(81, 0, 0, 0, 0),
-+ PACAINITDATA(82, 0, 0, 0, 0),
-+ PACAINITDATA(83, 0, 0, 0, 0),
-+ PACAINITDATA(84, 0, 0, 0, 0),
-+ PACAINITDATA(85, 0, 0, 0, 0),
-+ PACAINITDATA(86, 0, 0, 0, 0),
-+ PACAINITDATA(87, 0, 0, 0, 0),
-+ PACAINITDATA(88, 0, 0, 0, 0),
-+ PACAINITDATA(89, 0, 0, 0, 0),
-+ PACAINITDATA(90, 0, 0, 0, 0),
-+ PACAINITDATA(91, 0, 0, 0, 0),
-+ PACAINITDATA(92, 0, 0, 0, 0),
-+ PACAINITDATA(93, 0, 0, 0, 0),
-+ PACAINITDATA(94, 0, 0, 0, 0),
-+ PACAINITDATA(95, 0, 0, 0, 0),
-+ PACAINITDATA(96, 0, 0, 0, 0),
-+ PACAINITDATA(97, 0, 0, 0, 0),
-+ PACAINITDATA(98, 0, 0, 0, 0),
-+ PACAINITDATA(99, 0, 0, 0, 0),
-+ PACAINITDATA(100, 0, 0, 0, 0),
-+ PACAINITDATA(101, 0, 0, 0, 0),
-+ PACAINITDATA(102, 0, 0, 0, 0),
-+ PACAINITDATA(103, 0, 0, 0, 0),
-+ PACAINITDATA(104, 0, 0, 0, 0),
-+ PACAINITDATA(105, 0, 0, 0, 0),
-+ PACAINITDATA(106, 0, 0, 0, 0),
-+ PACAINITDATA(107, 0, 0, 0, 0),
-+ PACAINITDATA(108, 0, 0, 0, 0),
-+ PACAINITDATA(109, 0, 0, 0, 0),
-+ PACAINITDATA(110, 0, 0, 0, 0),
-+ PACAINITDATA(111, 0, 0, 0, 0),
-+ PACAINITDATA(112, 0, 0, 0, 0),
-+ PACAINITDATA(113, 0, 0, 0, 0),
-+ PACAINITDATA(114, 0, 0, 0, 0),
-+ PACAINITDATA(115, 0, 0, 0, 0),
-+ PACAINITDATA(116, 0, 0, 0, 0),
-+ PACAINITDATA(117, 0, 0, 0, 0),
-+ PACAINITDATA(118, 0, 0, 0, 0),
-+ PACAINITDATA(119, 0, 0, 0, 0),
-+ PACAINITDATA(120, 0, 0, 0, 0),
-+ PACAINITDATA(121, 0, 0, 0, 0),
-+ PACAINITDATA(122, 0, 0, 0, 0),
-+ PACAINITDATA(123, 0, 0, 0, 0),
-+ PACAINITDATA(124, 0, 0, 0, 0),
-+ PACAINITDATA(125, 0, 0, 0, 0),
-+ PACAINITDATA(126, 0, 0, 0, 0),
-+ PACAINITDATA(127, 0, 0, 0, 0),
-+#endif
- #endif
- };
---- linux-2.6.0-test1/arch/ppc64/kernel/prom.c 2003-07-02 14:53:14.000000000 -0700
-+++ 25/arch/ppc64/kernel/prom.c 2003-07-19 17:04:07.000000000 -0700
-@@ -27,7 +27,6 @@
- #include <linux/version.h>
- #include <linux/threads.h>
- #include <linux/spinlock.h>
--#include <linux/blk.h>
- #include <linux/types.h>
- #include <linux/pci.h>
- #include <asm/prom.h>
-@@ -1134,7 +1133,7 @@ prom_init(unsigned long r3, unsigned lon
- _prom->cpu = (int)(unsigned long)getprop_rval;
- _xPaca[_prom->cpu].active = 1;
- #ifdef CONFIG_SMP
-- RELOC(cpu_online_map) = 1UL << _prom->cpu;
-+ cpu_set(_prom->cpu, RELOC(cpu_online_map));
- #endif
- RELOC(boot_cpuid) = _prom->cpu;
-
---- linux-2.6.0-test1/arch/ppc64/kernel/rtasd.c 2003-06-14 12:18:06.000000000 -0700
-+++ 25/arch/ppc64/kernel/rtasd.c 2003-07-19 17:04:07.000000000 -0700
-@@ -225,7 +225,7 @@ repeat:
- continue;
-
- DEBUG("scheduling on %d\n", cpu);
-- set_cpus_allowed(current, 1UL << cpu);
-+ set_cpus_allowed(current, cpumask_of_cpu(cpu));
- DEBUG("watchdog scheduled on cpu %d\n", smp_processor_id());
-
- do {
---- linux-2.6.0-test1/arch/ppc64/kernel/semaphore.c 2003-06-26 22:07:24.000000000 -0700
-+++ 25/arch/ppc64/kernel/semaphore.c 2003-07-19 17:04:51.000000000 -0700
-@@ -21,6 +21,7 @@
- #include <asm/semaphore.h>
- #include <asm/errno.h>
-
-+#if 0
- /*
- * Atomically update sem->count.
- * This does the equivalent of the following:
-@@ -129,3 +130,140 @@ int __down_interruptible(struct semaphor
- wake_up(&sem->wait);
- return retval;
- }
-+#else
-+
-+static __inline__ int atomic_add_negative(int i, atomic_t *v)
-+{
-+ if (atomic_add_return(i, v) < 0)
-+ return 1;
-+ else
-+ return 0;
-+}
-+
-+void __up(struct semaphore *sem)
-+{
-+ wake_up(&sem->wait);
-+}
-+
-+void __down(struct semaphore * sem)
-+{
-+ struct task_struct *tsk = current;
-+ DECLARE_WAITQUEUE(wait, tsk);
-+ unsigned long flags;
-+
-+ tsk->state = TASK_UNINTERRUPTIBLE;
-+ spin_lock_irqsave(&sem->wait.lock, flags);
-+ add_wait_queue_exclusive_locked(&sem->wait, &wait);
-+
-+ sem->sleepers++;
-+ for (;;) {
-+ int sleepers = sem->sleepers;
-+
-+ /*
-+ * Add "everybody else" into it. They aren't
-+ * playing, because we own the spinlock in
-+ * the wait_queue_head.
-+ */
-+ if (!atomic_add_negative(sleepers - 1, &sem->count)) {
-+ sem->sleepers = 0;
-+ break;
-+ }
-+ sem->sleepers = 1; /* us - see -1 above */
-+ spin_unlock_irqrestore(&sem->wait.lock, flags);
-+
-+ schedule();
-+
-+ spin_lock_irqsave(&sem->wait.lock, flags);
-+ tsk->state = TASK_UNINTERRUPTIBLE;
-+ }
-+ remove_wait_queue_locked(&sem->wait, &wait);
-+ wake_up_locked(&sem->wait);
-+ spin_unlock_irqrestore(&sem->wait.lock, flags);
-+ tsk->state = TASK_RUNNING;
-+}
-+
-+int __down_interruptible(struct semaphore * sem)
-+{
-+ int retval = 0;
-+ struct task_struct *tsk = current;
-+ DECLARE_WAITQUEUE(wait, tsk);
-+ unsigned long flags;
-+
-+ tsk->state = TASK_INTERRUPTIBLE;
-+ spin_lock_irqsave(&sem->wait.lock, flags);
-+ add_wait_queue_exclusive_locked(&sem->wait, &wait);
-+
-+ sem->sleepers++;
-+ for (;;) {
-+ int sleepers = sem->sleepers;
-+
-+ /*
-+ * With signals pending, this turns into
-+ * the trylock failure case - we won't be
-+ * sleeping, and we* can't get the lock as
-+ * it has contention. Just correct the count
-+ * and exit.
-+ */
-+ if (signal_pending(current)) {
-+ retval = -EINTR;
-+ sem->sleepers = 0;
-+ atomic_add(sleepers, &sem->count);
-+ break;
-+ }
-+
-+ /*
-+ * Add "everybody else" into it. They aren't
-+ * playing, because we own the spinlock in
-+ * wait_queue_head. The "-1" is because we're
-+ * still hoping to get the semaphore.
-+ */
-+ if (!atomic_add_negative(sleepers - 1, &sem->count)) {
-+ sem->sleepers = 0;
-+ break;
-+ }
-+ sem->sleepers = 1; /* us - see -1 above */
-+ spin_unlock_irqrestore(&sem->wait.lock, flags);
-+
-+ schedule();
-+
-+ spin_lock_irqsave(&sem->wait.lock, flags);
-+ tsk->state = TASK_INTERRUPTIBLE;
-+ }
-+ remove_wait_queue_locked(&sem->wait, &wait);
-+ wake_up_locked(&sem->wait);
-+ spin_unlock_irqrestore(&sem->wait.lock, flags);
-+
-+ tsk->state = TASK_RUNNING;
-+ return retval;
-+}
-+
-+/*
-+ * Trylock failed - make sure we correct for
-+ * having decremented the count.
-+ *
-+ * We could have done the trylock with a
-+ * single "cmpxchg" without failure cases,
-+ * but then it wouldn't work on a 386.
-+ */
-+int __down_trylock(struct semaphore * sem)
-+{
-+ int sleepers;
-+ unsigned long flags;
-+
-+ spin_lock_irqsave(&sem->wait.lock, flags);
-+ sleepers = sem->sleepers + 1;
-+ sem->sleepers = 0;
-+
-+ /*
-+ * Add "everybody else" and us into it. They aren't
-+ * playing, because we own the spinlock in the
-+ * wait_queue_head.
-+ */
-+ if (!atomic_add_negative(sleepers, &sem->count)) {
-+ wake_up_locked(&sem->wait);
-+ }
-+
-+ spin_unlock_irqrestore(&sem->wait.lock, flags);
-+ return 1;
-+}
-+#endif
---- linux-2.6.0-test1/arch/ppc64/kernel/setup.c 2003-06-14 12:18:09.000000000 -0700
-+++ 25/arch/ppc64/kernel/setup.c 2003-07-19 17:04:07.000000000 -0700
-@@ -256,7 +256,7 @@ static int show_cpuinfo(struct seq_file
- return 0;
- }
-
-- if (!(cpu_online_map & (1UL << cpu_id)))
-+ if (!cpu_online(cpu_id))
- return 0;
-
- #ifdef CONFIG_SMP
---- linux-2.6.0-test1/arch/ppc64/kernel/smp.c 2003-07-02 14:53:14.000000000 -0700
-+++ 25/arch/ppc64/kernel/smp.c 2003-07-19 17:04:07.000000000 -0700
-@@ -53,7 +53,7 @@ int smp_threads_ready;
- unsigned long cache_decay_ticks;
-
- /* initialised so it doesn't end up in bss */
--unsigned long cpu_online_map = 0;
-+cpumask_t cpu_online_map = CPU_MASK_NONE;
-
- static struct smp_ops_t *smp_ops;
-
-@@ -570,7 +570,7 @@ void __init smp_prepare_cpus(unsigned in
-
- void __devinit smp_prepare_boot_cpu(void)
- {
-- set_bit(smp_processor_id(), &cpu_online_map);
-+ cpu_set(smp_processor_id(), cpu_online_map);
- /* FIXME: what about cpu_possible()? */
- }
-
-@@ -631,7 +631,7 @@ int __devinit __cpu_up(unsigned int cpu)
-
- if (smp_ops->give_timebase)
- smp_ops->give_timebase();
-- set_bit(cpu, &cpu_online_map);
-+ cpu_set(cpu, cpu_online_map);
- return 0;
- }
-
---- linux-2.6.0-test1/arch/ppc64/kernel/xics.c 2003-06-14 12:18:22.000000000 -0700
-+++ 25/arch/ppc64/kernel/xics.c 2003-07-19 17:04:07.000000000 -0700
-@@ -33,7 +33,7 @@ void xics_enable_irq(u_int irq);
- void xics_disable_irq(u_int irq);
- void xics_mask_and_ack_irq(u_int irq);
- void xics_end_irq(u_int irq);
--void xics_set_affinity(unsigned int irq_nr, unsigned long cpumask);
-+void xics_set_affinity(unsigned int irq_nr, cpumask_t cpumask);
-
- struct hw_interrupt_type xics_pic = {
- " XICS ",
-@@ -508,7 +508,7 @@ nextnode:
- ppc64_boot_msg(0x21, "XICS Done");
- }
-
--void xics_set_affinity(unsigned int virq, unsigned long cpumask)
-+void xics_set_affinity(unsigned int virq, cpumask_t cpumask)
- {
- irq_desc_t *desc = irq_desc + virq;
- unsigned int irq;
-@@ -516,6 +516,8 @@ void xics_set_affinity(unsigned int virq
- long status;
- unsigned long xics_status[2];
- unsigned long newmask;
-+ cpumask_t allcpus = CPU_MASK_ALL;
-+ cpumask_t tmp = CPU_MASK_NONE;
-
- virq -= XICS_IRQ_OFFSET;
- irq = virt_irq_to_real(virq);
-@@ -533,12 +535,13 @@ void xics_set_affinity(unsigned int virq
- }
-
- /* For the moment only implement delivery to all cpus or one cpu */
-- if (cpumask == -1UL) {
-+ if (cpus_equal(cpumask, allcpus)) {
- newmask = default_distrib_server;
- } else {
-- if (!(cpumask & cpu_online_map))
-+ cpus_and(tmp, cpu_online_map, cpumask);
-+ if (cpus_empty(tmp))
- goto out;
-- newmask = find_first_bit(&cpumask, 8*sizeof(unsigned long));
-+ newmask = first_cpu(cpumask);
- }
-
- status = rtas_call(ibm_set_xive, 3, 1, NULL,
---- linux-2.6.0-test1/arch/ppc64/kernel/XmPciLpEvent.c 2003-06-14 12:18:21.000000000 -0700
-+++ 25/arch/ppc64/kernel/XmPciLpEvent.c 2003-07-19 17:03:49.000000000 -0700
-@@ -12,7 +12,6 @@
- #include <linux/param.h>
- #include <linux/string.h>
- #include <linux/bootmem.h>
--#include <linux/blk.h>
- #include <linux/ide.h>
-
- #include <asm/iSeries/HvTypes.h>
---- linux-2.6.0-test1/arch/ppc64/mm/init.c 2003-07-10 18:50:30.000000000 -0700
-+++ 25/arch/ppc64/mm/init.c 2003-07-19 17:07:16.000000000 -0700
-@@ -37,9 +37,6 @@
- #include <linux/bootmem.h>
- #include <linux/highmem.h>
- #include <linux/proc_fs.h>
--#ifdef CONFIG_BLK_DEV_INITRD
--#include <linux/blk.h> /* for initrd_* */
--#endif
-
- #include <asm/pgalloc.h>
- #include <asm/page.h>
-@@ -211,7 +208,7 @@ static void map_io_page(unsigned long ea
- if (mem_init_done) {
- spin_lock(&ioremap_mm.page_table_lock);
- pgdp = pgd_offset_i(ea);
-- pmdp = pmd_alloc(&ioremap_mm, pgdp, ea);
-+ pmdp = pmd_alloc_kernel(&ioremap_mm, pgdp, ea);
- ptep = pte_alloc_kernel(&ioremap_mm, pmdp, ea);
-
- pa = absolute_to_phys(pa);
-@@ -253,7 +250,7 @@ flush_tlb_mm(struct mm_struct *mm)
- __flush_tlb_range(mm, mp->vm_start, mp->vm_end);
-
- /* XXX are there races with checking cpu_vm_mask? - Anton */
-- mm->cpu_vm_mask = 0;
-+ cpus_clear(mm->cpu_vm_mask);
-
- spin_unlock(&mm->page_table_lock);
- }
-@@ -270,6 +267,7 @@ flush_tlb_page(struct vm_area_struct *vm
- pte_t *ptep;
- pte_t pte;
- int local = 0;
-+ cpumask_t tmp;
-
- switch( REGION_ID(vmaddr) ) {
- case VMALLOC_REGION_ID:
-@@ -283,7 +281,8 @@ flush_tlb_page(struct vm_area_struct *vm
- context = vma->vm_mm->context;
-
- /* XXX are there races with checking cpu_vm_mask? - Anton */
-- if (vma->vm_mm->cpu_vm_mask == (1 << smp_processor_id()))
-+ tmp = cpumask_of_cpu(smp_processor_id());
-+ if (cpus_equal(vma->vm_mm->cpu_vm_mask, tmp))
- local = 1;
-
- break;
-@@ -319,6 +318,7 @@ __flush_tlb_range(struct mm_struct *mm,
- struct ppc64_tlb_batch *batch = &ppc64_tlb_batch[smp_processor_id()];
- unsigned long i = 0;
- int local = 0;
-+ cpumask_t tmp;
-
- switch(REGION_ID(start)) {
- case VMALLOC_REGION_ID:
-@@ -332,7 +332,8 @@ __flush_tlb_range(struct mm_struct *mm,
- context = mm->context;
-
- /* XXX are there races with checking cpu_vm_mask? - Anton */
-- if (mm->cpu_vm_mask == (1 << smp_processor_id()))
-+ tmp = cpumask_of_cpu(smp_processor_id());
-+ if (cpus_equal(mm->cpu_vm_mask, tmp))
- local = 1;
-
- break;
-@@ -698,6 +699,7 @@ void update_mmu_cache(struct vm_area_str
- void *pgdir;
- pte_t *ptep;
- int local = 0;
-+ cpumask_t tmp;
-
- /* handle i-cache coherency */
- if (!(cur_cpu_spec->cpu_features & CPU_FTR_NOEXECUTE)) {
-@@ -723,7 +725,8 @@ void update_mmu_cache(struct vm_area_str
- ptep = find_linux_pte(pgdir, ea);
- vsid = get_vsid(vma->vm_mm->context, ea);
-
-- if (vma->vm_mm->cpu_vm_mask == (1 << smp_processor_id()))
-+ tmp = cpumask_of_cpu(smp_processor_id());
-+ if (cpus_equal(vma->vm_mm->cpu_vm_mask, tmp))
- local = 1;
-
- __hash_page(ea, pte_val(pte) & (_PAGE_USER|_PAGE_RW), vsid, ptep,
---- linux-2.6.0-test1/arch/ppc/kernel/irq.c 2003-06-14 12:18:30.000000000 -0700
-+++ 25/arch/ppc/kernel/irq.c 2003-07-19 17:04:07.000000000 -0700
-@@ -44,6 +44,7 @@
- #include <linux/proc_fs.h>
- #include <linux/random.h>
- #include <linux/seq_file.h>
-+#include <linux/cpumask.h>
-
- #include <asm/uaccess.h>
- #include <asm/bitops.h>
-@@ -420,10 +421,9 @@ void ppc_irq_dispatch_handler(struct pt_
- {
- int status;
- struct irqaction *action;
-- int cpu = smp_processor_id();
- irq_desc_t *desc = irq_desc + irq;
-
-- kstat_cpu(cpu).irqs[irq]++;
-+ kstat_this_cpu.irqs[irq]++;
- spin_lock(&desc->lock);
- ack_irq(irq);
- /*
-@@ -565,29 +565,41 @@ static struct proc_dir_entry *irq_dir[NR
- static struct proc_dir_entry *smp_affinity_entry[NR_IRQS];
-
- #ifdef CONFIG_IRQ_ALL_CPUS
--#define DEFAULT_CPU_AFFINITY 0xffffffff
-+#define DEFAULT_CPU_AFFINITY CPU_MASK_ALL
- #else
--#define DEFAULT_CPU_AFFINITY 0x00000001
-+#define DEFAULT_CPU_AFFINITY cpumask_of_cpu(0)
- #endif
-
--unsigned int irq_affinity [NR_IRQS] =
-+cpumask_t irq_affinity [NR_IRQS] =
- { [0 ... NR_IRQS-1] = DEFAULT_CPU_AFFINITY };
-
--#define HEX_DIGITS 8
-+#define HEX_DIGITS (2*sizeof(cpumask_t))
-
- static int irq_affinity_read_proc (char *page, char **start, off_t off,
- int count, int *eof, void *data)
- {
-+ cpumask_t tmp = irq_affinity[(long)data];
-+ int k, len = 0;
-+
- if (count < HEX_DIGITS+1)
- return -EINVAL;
-- return sprintf (page, "%08x\n", irq_affinity[(int)data]);
-+
-+ for (k = 0; k < sizeof(cpumask_t)/sizeof(u16); ++k) {
-+ int j = sprintf(page, "%04hx", (u16)cpus_coerce(tmp));
-+ len += j;
-+ page += j;
-+ cpus_shift_right(tmp, tmp, 16);
-+ }
-+
-+ len += sprintf(page, "\n");
-+ return len;
- }
-
- static unsigned int parse_hex_value (const char __user *buffer,
-- unsigned long count, unsigned long *ret)
-+ unsigned long count, cpumask_t *ret)
- {
- unsigned char hexnum [HEX_DIGITS];
-- unsigned long value;
-+ cpumask_t value = CPU_MASK_NONE;
- int i;
-
- if (!count)
-@@ -601,10 +613,9 @@ static unsigned int parse_hex_value (con
- * Parse the first 8 characters as a hex string, any non-hex char
- * is end-of-string. '00e1', 'e1', '00E1', 'E1' are all the same.
- */
-- value = 0;
--
- for (i = 0; i < count; i++) {
- unsigned int c = hexnum[i];
-+ int k;
-
- switch (c) {
- case '0' ... '9': c -= '0'; break;
-@@ -613,7 +624,10 @@ static unsigned int parse_hex_value (con
- default:
- goto out;
- }
-- value = (value << 4) | c;
-+ cpus_shift_left(value, value, 4);
-+ for (k = 0; k < 4; ++k)
-+ if (c & (1 << k))
-+ cpu_set(k, value);
- }
- out:
- *ret = value;
-@@ -624,7 +638,7 @@ static int irq_affinity_write_proc (stru
- unsigned long count, void *data)
- {
- int irq = (int) data, full_count = count, err;
-- unsigned long new_value;
-+ cpumask_t new_value, tmp;
-
- if (!irq_desc[irq].handler->set_affinity)
- return -EIO;
-@@ -641,7 +655,8 @@ static int irq_affinity_write_proc (stru
- * are actually logical cpu #'s then we have no problem.
- * -- Cort <cort@fsmlabs.com>
- */
-- if (!(new_value & cpu_online_map))
-+ cpus_and(tmp, new_value, cpu_online_map);
-+ if (cpus_empty(tmp))
- return -EINVAL;
-
- irq_affinity[irq] = new_value;
-@@ -653,17 +668,27 @@ static int irq_affinity_write_proc (stru
- static int prof_cpu_mask_read_proc (char *page, char **start, off_t off,
- int count, int *eof, void *data)
- {
-- unsigned long *mask = (unsigned long *) data;
-+ cpumask_t mask = *(cpumask_t *)data;
-+ int k, len = 0;
-+
- if (count < HEX_DIGITS+1)
- return -EINVAL;
-- return sprintf (page, "%08lx\n", *mask);
-+
-+ for (k = 0; k < sizeof(cpumask_t)/sizeof(u16); ++k) {
-+ int j = sprintf(page, "%04hx", (u16)cpus_coerce(mask));
-+ len += j;
-+ page += j;
-+ cpus_shift_right(mask, mask, 16);
-+ }
-+ len += sprintf(page, "\n");
-+ return len;
- }
-
- static int prof_cpu_mask_write_proc (struct file *file, const char __user *buffer,
- unsigned long count, void *data)
- {
-- unsigned long *mask = (unsigned long *) data, full_count = count, err;
-- unsigned long new_value;
-+ cpumask_t *mask = (cpumask_t *)data, full_count = count, err;
-+ cpumask_t new_value;
-
- err = parse_hex_value(buffer, count, &new_value);
- if (err)
---- linux-2.6.0-test1/arch/ppc/kernel/misc.S 2003-06-14 12:18:33.000000000 -0700
-+++ 25/arch/ppc/kernel/misc.S 2003-07-19 17:03:49.000000000 -0700
-@@ -1375,3 +1375,8 @@ _GLOBAL(sys_call_table)
- .long sys_clock_gettime
- .long sys_clock_getres
- .long sys_clock_nanosleep
-+ .long sys_ni_syscall /* reserved for swapcontext */
-+ .long sys_tgkill /* 250 */
-+ .long sys_utimes
-+ .long sys_statfs64
-+ .long sys_fstatfs64
---- linux-2.6.0-test1/arch/ppc/kernel/setup.c 2003-07-10 18:50:30.000000000 -0700
-+++ 25/arch/ppc/kernel/setup.c 2003-07-19 17:04:07.000000000 -0700
-@@ -159,7 +159,7 @@ int show_cpuinfo(struct seq_file *m, voi
- }
-
- #ifdef CONFIG_SMP
-- if (!(cpu_online_map & (1 << i)))
-+ if (!cpu_online(i))
- return 0;
- pvr = cpu_data[i].pvr;
- lpj = cpu_data[i].loops_per_jiffy;
---- linux-2.6.0-test1/arch/ppc/kernel/smp.c 2003-06-14 12:18:34.000000000 -0700
-+++ 25/arch/ppc/kernel/smp.c 2003-07-19 17:04:07.000000000 -0700
-@@ -47,7 +47,7 @@ atomic_t ipi_sent;
- DEFINE_PER_CPU(unsigned int, prof_multiplier);
- DEFINE_PER_CPU(unsigned int, prof_counter);
- unsigned long cache_decay_ticks = HZ/100;
--unsigned long cpu_online_map = 1UL;
-+unsigned long cpu_online_map = cpumask_of_cpu(0);
- unsigned long cpu_possible_map = 1UL;
- int smp_hw_index[NR_CPUS];
- struct thread_info *secondary_ti;
-@@ -361,8 +361,8 @@ void __init smp_prepare_cpus(unsigned in
-
- void __devinit smp_prepare_boot_cpu(void)
- {
-- set_bit(smp_processor_id(), &cpu_online_map);
-- set_bit(smp_processor_id(), &cpu_possible_map);
-+ cpu_set(smp_processor_id(), cpu_online_map);
-+ cpu_set(smp_processor_id(), cpu_possible_map);
- }
-
- int __init setup_profiling_timer(unsigned int multiplier)
-@@ -444,7 +444,7 @@ int __cpu_up(unsigned int cpu)
- printk("Processor %d found.\n", cpu);
-
- smp_ops->give_timebase();
-- set_bit(cpu, &cpu_online_map);
-+ cpu_set(cpu, cpu_online_map);
- return 0;
- }
-
---- linux-2.6.0-test1/arch/ppc/kernel/syscalls.c 2003-06-14 12:18:34.000000000 -0700
-+++ 25/arch/ppc/kernel/syscalls.c 2003-07-19 17:03:49.000000000 -0700
-@@ -20,7 +20,6 @@
- *
- */
-
--#include <linux/config.h>
- #include <linux/errno.h>
- #include <linux/sched.h>
- #include <linux/mm.h>
-@@ -59,10 +58,15 @@ sys_ipc (uint call, int first, int secon
- version = call >> 16; /* hack for backward compatibility */
- call &= 0xffff;
-
-- ret = -EINVAL;
-+ ret = -ENOSYS;
- switch (call) {
- case SEMOP:
-- ret = sys_semop (first, (struct sembuf __user *)ptr, second);
-+ ret = sys_semtimedop (first, (struct sembuf __user *)ptr,
-+ second, NULL);
-+ break;
-+ case SEMTIMEDOP:
-+ ret = sys_semtimedop (first, (struct sembuf __user *)ptr,
-+ second, (const struct timespec *) fifth);
- break;
- case SEMGET:
- ret = sys_semget (first, second, third);
-@@ -258,6 +262,4 @@ int sys_olduname(struct oldold_utsname _
- return error;
- }
-
--cond_syscall(sys_pciconfig_read);
--cond_syscall(sys_pciconfig_write);
- cond_syscall(sys_pciconfig_iobase);
---- linux-2.6.0-test1/arch/ppc/kernel/time.c 2003-07-13 21:44:34.000000000 -0700
-+++ 25/arch/ppc/kernel/time.c 2003-07-19 17:03:49.000000000 -0700
-@@ -244,7 +244,7 @@ int do_settimeofday(struct timespec *tv)
- time_t wtm_sec, new_sec = tv->tv_sec;
- long wtm_nsec, new_nsec = tv->tv_nsec;
- unsigned long flags;
-- int tb_delta, new_nsec, new_sec;
-+ int tb_delta;
-
- if ((unsigned long)tv->tv_nsec >= NSEC_PER_SEC)
- return -EINVAL;
---- linux-2.6.0-test1/arch/ppc/mm/mem_pieces.c 2003-06-14 12:17:56.000000000 -0700
-+++ 25/arch/ppc/mm/mem_pieces.c 2003-07-19 17:03:49.000000000 -0700
-@@ -17,7 +17,6 @@
- #include <linux/config.h>
- #include <linux/kernel.h>
- #include <linux/stddef.h>
--#include <linux/blk.h>
- #include <linux/init.h>
-
- #include "mem_pieces.h"
---- linux-2.6.0-test1/arch/ppc/platforms/4xx/beech.c 2003-06-14 12:18:22.000000000 -0700
-+++ 25/arch/ppc/platforms/4xx/beech.c 2003-07-19 17:03:49.000000000 -0700
-@@ -25,7 +25,6 @@
- *
- */
-
--#include <linux/blk.h>
- #include <linux/config.h>
- #include <linux/init.h>
- #include <linux/module.h>
---- linux-2.6.0-test1/arch/ppc/platforms/4xx/sycamore.c 2003-06-14 12:18:24.000000000 -0700
-+++ 25/arch/ppc/platforms/4xx/sycamore.c 2003-07-19 17:03:49.000000000 -0700
-@@ -17,7 +17,6 @@
- #include <linux/threads.h>
- #include <linux/param.h>
- #include <linux/string.h>
--#include <linux/blk.h>
- #include <linux/pci.h>
- #include <linux/rtc.h>
-
---- linux-2.6.0-test1/arch/ppc/platforms/4xx/walnut.c 2003-06-14 12:18:23.000000000 -0700
-+++ 25/arch/ppc/platforms/4xx/walnut.c 2003-07-19 17:03:49.000000000 -0700
-@@ -19,7 +19,6 @@
- #include <linux/threads.h>
- #include <linux/param.h>
- #include <linux/string.h>
--#include <linux/blk.h>
- #include <linux/pci.h>
- #include <linux/rtc.h>
-
---- linux-2.6.0-test1/arch/ppc/platforms/pmac_cpufreq.c 2003-06-14 12:18:23.000000000 -0700
-+++ 25/arch/ppc/platforms/pmac_cpufreq.c 2003-07-19 17:03:49.000000000 -0700
-@@ -176,7 +176,7 @@ do_set_cpu_speed(int speed_mode)
-
- freqs.old = cur_freq;
- freqs.new = (speed_mode == PMAC_CPU_HIGH_SPEED) ? hi_freq : low_freq;
-- freqs.cpu = CPUFREQ_ALL_CPUS;
-+ freqs.cpu = smp_processor_id();
-
- cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE);
- if (cpufreq_uses_pmu)
---- linux-2.6.0-test1/arch/ppc/platforms/residual.c 2003-06-14 12:18:00.000000000 -0700
-+++ 25/arch/ppc/platforms/residual.c 2003-07-19 17:03:49.000000000 -0700
-@@ -36,7 +36,6 @@
- #include <linux/interrupt.h>
- #include <linux/reboot.h>
- #include <linux/init.h>
--#include <linux/blk.h>
- #include <linux/ioport.h>
- #include <linux/pci.h>
- #include <linux/ide.h>
---- linux-2.6.0-test1/arch/s390/defconfig 2003-07-02 14:53:14.000000000 -0700
-+++ 25/arch/s390/defconfig 2003-07-19 17:03:49.000000000 -0700
-@@ -20,6 +20,7 @@ CONFIG_SYSVIPC=y
- CONFIG_SYSCTL=y
- CONFIG_LOG_BUF_SHIFT=17
- # CONFIG_EMBEDDED is not set
-+# CONFIG_KALLSYMS is not set
- CONFIG_FUTEX=y
- CONFIG_EPOLL=y
-
-@@ -169,7 +170,7 @@ CONFIG_IP_MULTICAST=y
- # CONFIG_INET_AH is not set
- # CONFIG_INET_ESP is not set
- # CONFIG_INET_IPCOMP is not set
--CONFIG_IPV6=m
-+CONFIG_IPV6=y
- # CONFIG_IPV6_PRIVACY is not set
- # CONFIG_INET6_AH is not set
- # CONFIG_INET6_ESP is not set
-@@ -180,7 +181,7 @@ CONFIG_IPV6=m
- #
- # SCTP Configuration (EXPERIMENTAL)
- #
--CONFIG_IPV6_SCTP__=m
-+CONFIG_IPV6_SCTP__=y
- # CONFIG_IP_SCTP is not set
- # CONFIG_ATM is not set
- # CONFIG_VLAN_8021Q is not set
-@@ -383,7 +384,6 @@ CONFIG_IBM_PARTITION=y
- CONFIG_DEBUG_KERNEL=y
- CONFIG_MAGIC_SYSRQ=y
- # CONFIG_DEBUG_SLAB is not set
--# CONFIG_KALLSYMS is not set
- # CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-
- #
---- linux-2.6.0-test1/arch/s390/kernel/compat_ioctl.c 2003-07-02 14:53:14.000000000 -0700
-+++ 25/arch/s390/kernel/compat_ioctl.c 2003-07-19 17:03:49.000000000 -0700
-@@ -23,7 +23,6 @@
- #include <asm/types.h>
- #include <asm/uaccess.h>
-
--#include <linux/blk.h>
- #include <linux/blkpg.h>
- #include <linux/cdrom.h>
- #include <linux/dm-ioctl.h>
---- linux-2.6.0-test1/arch/s390/kernel/compat_linux.c 2003-07-02 14:53:14.000000000 -0700
-+++ 25/arch/s390/kernel/compat_linux.c 2003-07-19 17:03:49.000000000 -0700
-@@ -250,14 +250,14 @@ asmlinkage long sys32_getegid16(void)
- static inline long get_tv32(struct timeval *o, struct compat_timeval *i)
- {
- return (!access_ok(VERIFY_READ, tv32, sizeof(*tv32)) ||
-- (__get_user(o->tv_sec, &i->tv_sec) |
-+ (__get_user(o->tv_sec, &i->tv_sec) ||
- __get_user(o->tv_usec, &i->tv_usec)));
- }
-
- static inline long put_tv32(struct compat_timeval *o, struct timeval *i)
- {
- return (!access_ok(VERIFY_WRITE, o, sizeof(*o)) ||
-- (__put_user(i->tv_sec, &o->tv_sec) |
-+ (__put_user(i->tv_sec, &o->tv_sec) ||
- __put_user(i->tv_usec, &o->tv_usec)));
- }
-
---- linux-2.6.0-test1/arch/s390/kernel/entry64.S 2003-07-02 14:53:14.000000000 -0700
-+++ 25/arch/s390/kernel/entry64.S 2003-07-19 17:03:49.000000000 -0700
-@@ -637,6 +637,7 @@ io_sigpending:
- ext_int_handler:
- SAVE_ALL __LC_EXT_OLD_PSW,0
- GET_THREAD_INFO # load pointer to task_struct to R9
-+ brasl %r14,do_extint
- llgh %r6,__LC_EXT_INT_CODE # get interruption code
- lgr %r1,%r6 # calculate index = code & 0xff
- nill %r1,0xff
---- linux-2.6.0-test1/arch/s390/kernel/entry.S 2003-07-02 14:53:14.000000000 -0700
-+++ 25/arch/s390/kernel/entry.S 2003-07-19 17:03:49.000000000 -0700
-@@ -606,6 +606,8 @@ ext_int_handler:
- SAVE_ALL_BASE
- SAVE_ALL __LC_EXT_OLD_PSW,0
- GET_THREAD_INFO # load pointer to task_struct to R9
-+ l %r1,BASED(.Ldo_extint)
-+ basr %r14,%r1
- lh %r6,__LC_EXT_INT_CODE # get interruption code
- lr %r1,%r6 # calculate index = code & 0xff
- n %r1,BASED(.Lc0xff)
-@@ -694,6 +696,7 @@ restart_go:
- */
- .Ls390_mcck: .long s390_do_machine_check
- .Ldo_IRQ: .long do_IRQ
-+.Ldo_extint: .long do_extint
- .Ldo_signal: .long do_signal
- .Ldo_softirq: .long do_softirq
- .Lentry_base: .long entry_base
---- linux-2.6.0-test1/arch/s390/kernel/s390_ext.c 2003-06-14 12:18:09.000000000 -0700
-+++ 25/arch/s390/kernel/s390_ext.c 2003-07-19 17:03:49.000000000 -0700
-@@ -11,8 +11,11 @@
- #include <linux/kernel.h>
- #include <linux/slab.h>
- #include <linux/errno.h>
-+#include <linux/kernel_stat.h>
-+
- #include <asm/lowcore.h>
- #include <asm/s390_ext.h>
-+#include <asm/irq.h>
-
- /*
- * Simple hash strategy: index = code & 0xff;
-@@ -98,6 +101,11 @@ int unregister_early_external_interrupt(
- return 0;
- }
-
-+void do_extint(void)
-+{
-+ kstat_cpu(smp_processor_id()).irqs[EXTERNAL_INTERRUPT]++;
-+}
-+
- EXPORT_SYMBOL(register_external_interrupt);
- EXPORT_SYMBOL(unregister_external_interrupt);
-
---- linux-2.6.0-test1/arch/s390/kernel/setup.c 2003-07-10 18:50:30.000000000 -0700
-+++ 25/arch/s390/kernel/setup.c 2003-07-19 17:04:07.000000000 -0700
-@@ -34,12 +34,15 @@
- #include <linux/root_dev.h>
- #include <linux/console.h>
- #include <linux/seq_file.h>
-+#include <linux/kernel_stat.h>
-+
- #include <asm/uaccess.h>
- #include <asm/system.h>
- #include <asm/smp.h>
- #include <asm/mmu_context.h>
- #include <asm/cpcmd.h>
- #include <asm/lowcore.h>
-+#include <asm/irq.h>
-
- /*
- * Machine setup..
-@@ -53,7 +56,7 @@ struct { unsigned long addr, size, type;
- #define CHUNK_READ_WRITE 0
- #define CHUNK_READ_ONLY 1
- int cpus_initialized = 0;
--unsigned long cpu_initialized = 0;
-+static cpumask_t cpu_initialized;
- volatile int __cpu_logical_map[NR_CPUS]; /* logical cpu to cpu address */
-
- /*
-@@ -83,7 +86,7 @@ void __devinit cpu_init (void)
- int nr = smp_processor_id();
- int addr = hard_smp_processor_id();
-
-- if (test_and_set_bit(nr,&cpu_initialized)) {
-+ if (cpu_test_and_set(nr,cpu_initialized)) {
- printk("CPU#%d ALREADY INITIALIZED!!!!!!!!!\n", nr);
- for (;;) local_irq_enable();
- }
-@@ -562,7 +565,7 @@ static int show_cpuinfo(struct seq_file
- num_online_cpus(), loops_per_jiffy/(500000/HZ),
- (loops_per_jiffy/(5000/HZ))%100);
- }
-- if (cpu_online_map & (1 << n)) {
-+ if (cpu_online(n)) {
- #ifdef CONFIG_SMP
- if (smp_processor_id() == n)
- cpuinfo = &S390_lowcore.cpu_data;
-@@ -600,3 +603,40 @@ struct seq_operations cpuinfo_op = {
- .stop = c_stop,
- .show = show_cpuinfo,
- };
-+
-+/*
-+ * show_interrupts is needed by /proc/interrupts.
-+ */
-+
-+static const char *intrclass_names[] = {
-+ "EXT",
-+ "I/O",
-+};
-+
-+int show_interrupts(struct seq_file *p, void *v)
-+{
-+ int i, j;
-+
-+ seq_puts(p, " ");
-+
-+ for (j=0; j<NR_CPUS; j++)
-+ if (cpu_online(j))
-+ seq_printf(p, "CPU%d ",j);
-+
-+ seq_putc(p, '\n');
-+
-+ for (i = 0 ; i < NR_IRQS ; i++) {
-+ seq_printf(p, "%s: ", intrclass_names[i]);
-+#ifndef CONFIG_SMP
-+ seq_printf(p, "%10u ", kstat_irqs(i));
-+#else
-+ for (j = 0; j < NR_CPUS; j++)
-+ if (cpu_online(j))
-+ seq_printf(p, "%10u ", kstat_cpu(j).irqs[i]);
-+#endif
-+ seq_putc(p, '\n');
-+
-+ }
-+
-+ return 0;
-+}
---- linux-2.6.0-test1/arch/s390/kernel/smp.c 2003-07-02 14:53:14.000000000 -0700
-+++ 25/arch/s390/kernel/smp.c 2003-07-19 17:04:07.000000000 -0700
-@@ -51,8 +51,8 @@ struct _lowcore *lowcore_ptr[NR_CPUS];
- cycles_t cacheflush_time=0;
- int smp_threads_ready=0; /* Set when the idlers are all forked. */
-
--volatile unsigned long cpu_online_map;
--volatile unsigned long cpu_possible_map;
-+cpumask_t cpu_online_map;
-+cpumask_t cpu_possible_map;
- unsigned long cache_decay_ticks = 0;
-
- /*
-@@ -200,14 +200,14 @@ void smp_send_stop(void)
- /*
- * Reboot, halt and power_off routines for SMP.
- */
--static volatile unsigned long cpu_restart_map;
-+static cpumask_t cpu_restart_map;
-
- static void do_machine_restart(void * __unused)
- {
-- clear_bit(smp_processor_id(), &cpu_restart_map);
-+ cpu_clear(smp_processor_id(), cpu_restart_map);
- if (smp_processor_id() == 0) {
- /* Wait for all other cpus to enter do_machine_restart. */
-- while (cpu_restart_map != 0);
-+ while (!cpus_empty(cpu_restart_map));
- /* Store status of other cpus. */
- do_store_status();
- /*
-@@ -427,7 +427,7 @@ void __init smp_check_cpus(unsigned int
- if (signal_processor(num_cpus, sigp_sense) ==
- sigp_not_operational)
- continue;
-- set_bit(num_cpus, &cpu_possible_map);
-+ cpu_set(num_cpus, cpu_possible_map);
- num_cpus++;
- }
- printk("Detected %d CPU's\n",(int) num_cpus);
-@@ -452,7 +452,7 @@ int __devinit start_secondary(void *cpuv
- pfault_init();
- #endif
- /* Mark this cpu as online */
-- set_bit(smp_processor_id(), &cpu_online_map);
-+ cpu_set(smp_processor_id(), cpu_online_map);
- /* Switch on interrupts */
- local_irq_enable();
- /* Print info about this processor */
-@@ -558,8 +558,8 @@ void __init smp_prepare_cpus(unsigned in
-
- void __devinit smp_prepare_boot_cpu(void)
- {
-- set_bit(smp_processor_id(), &cpu_online_map);
-- set_bit(smp_processor_id(), &cpu_possible_map);
-+ cpu_set(smp_processor_id(), cpu_online_map);
-+ cpu_set(smp_processor_id(), cpu_possible_map);
- }
-
- void smp_cpus_done(unsigned int max_cpus)
---- linux-2.6.0-test1/arch/s390/mm/init.c 2003-06-14 12:18:29.000000000 -0700
-+++ 25/arch/s390/mm/init.c 2003-07-19 17:03:49.000000000 -0700
-@@ -22,9 +22,6 @@
- #include <linux/swap.h>
- #include <linux/smp.h>
- #include <linux/init.h>
--#ifdef CONFIG_BLK_DEV_INITRD
--#include <linux/blk.h>
--#endif
- #include <linux/pagemap.h>
- #include <linux/bootmem.h>
-
---- linux-2.6.0-test1/arch/s390/mm/ioremap.c 2003-06-14 12:17:58.000000000 -0700
-+++ 25/arch/s390/mm/ioremap.c 2003-07-19 17:07:16.000000000 -0700
-@@ -83,7 +83,7 @@ static int remap_area_pages(unsigned lon
- spin_lock(&init_mm.page_table_lock);
- do {
- pmd_t *pmd;
-- pmd = pmd_alloc(&init_mm, dir, address);
-+ pmd = pmd_alloc_kernel(&init_mm, dir, address);
- error = -ENOMEM;
- if (!pmd)
- break;
---- linux-2.6.0-test1/arch/sh/mm/init.c 2003-07-02 14:53:14.000000000 -0700
-+++ 25/arch/sh/mm/init.c 2003-07-19 17:03:49.000000000 -0700
-@@ -22,9 +22,6 @@
- #include <linux/swap.h>
- #include <linux/smp.h>
- #include <linux/init.h>
--#ifdef CONFIG_BLK_DEV_INITRD
--#include <linux/blk.h>
--#endif
- #include <linux/highmem.h>
- #include <linux/bootmem.h>
-
---- linux-2.6.0-test1/arch/sh/mm/ioremap.c 2003-07-02 14:53:14.000000000 -0700
-+++ 25/arch/sh/mm/ioremap.c 2003-07-19 17:07:16.000000000 -0700
-@@ -45,7 +45,7 @@ static inline void remap_area_pte(pte_t
- } while (address && (address < end));
- }
-
--static inline int remap_area_pmd(pmd_t * pmd, unsigned long address,
-+static inline int remap_area_pmd(pgd_t *pgd, pmd_t * pmd, unsigned long address,
- unsigned long size, unsigned long phys_addr, unsigned long flags)
- {
- unsigned long end;
-@@ -83,11 +83,11 @@ int remap_area_pages(unsigned long addre
- spin_lock(&init_mm.page_table_lock);
- do {
- pmd_t *pmd;
-- pmd = pmd_alloc(&init_mm, dir, address);
-+ pmd = pmd_alloc_map(&init_mm, dir, address);
- error = -ENOMEM;
- if (!pmd)
- break;
-- if (remap_area_pmd(pmd, address, end - address,
-+ if (remap_area_pmd(dir, pmd, address, end - address,
- phys_addr + address, flags))
- break;
- error = 0;
---- linux-2.6.0-test1/arch/sparc64/kernel/devices.c 2003-06-26 22:07:24.000000000 -0700
-+++ 25/arch/sparc64/kernel/devices.c 2003-07-19 17:06:40.000000000 -0700
-@@ -31,6 +31,8 @@ int linux_num_cpus = 0;
- extern void cpu_probe(void);
- extern void central_probe(void);
-
-+unsigned long cpu_hz;
-+
- void __init device_scan(void)
- {
- char node_str[128];
-@@ -68,6 +70,8 @@ void __init device_scan(void)
- prom_getproperty(scan, "portid",
- (char *) &thismid, sizeof(thismid));
- }
-+ if (!cpu_hz)
-+ cpu_hz = prom_getint(scan, "clock-frequency");
- linux_cpus[cpu_ctr].mid = thismid;
- printk("Found CPU %d (node=%08x,mid=%d)\n",
- cpu_ctr, (unsigned) scan, thismid);
---- linux-2.6.0-test1/arch/sparc64/kernel/head.S 2003-06-14 12:18:07.000000000 -0700
-+++ 25/arch/sparc64/kernel/head.S 2003-07-19 17:03:49.000000000 -0700
-@@ -66,7 +66,7 @@ sparc_ramdisk_image:
- sparc_ramdisk_size:
- .word 0
- .xword reboot_command
-- .xword bootstr_len
-+ .xword bootstr_info
- .word _end
-
- /* We must be careful, 32-bit OpenBOOT will get confused if it
-@@ -740,8 +740,9 @@ swapper_pg_dir:
-
- .data
- .align 8
-- .globl prom_tba
-+ .globl prom_tba, tlb_type
- prom_tba: .xword 0
-+tlb_type: .word 0 /* Must NOT end up in BSS */
- .section ".fixup",#alloc,#execinstr
- .globl __ret_efault
- __ret_efault:
---- linux-2.6.0-test1/arch/sparc64/kernel/irq.c 2003-07-10 18:50:30.000000000 -0700
-+++ 25/arch/sparc64/kernel/irq.c 2003-07-19 17:04:07.000000000 -0700
-@@ -110,6 +110,10 @@ static void register_irq_proc (unsigned
- action->flags |= __irq_ino(irq) << 48;
- #define get_ino_in_irqaction(action) (action->flags >> 48)
-
-+#if NR_CPUS > 64
-+#error irqaction embedded smp affinity does not work with > 64 cpus, FIXME
-+#endif
-+
- #define put_smpaff_in_irqaction(action, smpaff) (action)->mask = (smpaff)
- #define get_smpaff_in_irqaction(action) ((action)->mask)
-
-@@ -658,11 +662,11 @@ static inline void redirect_intr(int cpu
- * Just Do It.
- */
- struct irqaction *ap = bp->irq_info;
-- unsigned long cpu_mask = get_smpaff_in_irqaction(ap);
-+ cpumask_t cpu_mask = { .mask[0] = get_smpaff_in_irqaction(ap) };
- unsigned int buddy, ticks;
-
-- cpu_mask &= cpu_online_map;
-- if (cpu_mask == 0)
-+ cpus_and(cpu_mask, cpu_mask, cpu_online_map);
-+ if (cpus_empty(cpu_mask))
- cpu_mask = cpu_online_map;
-
- if (this_is_starfire != 0 ||
-@@ -677,7 +681,7 @@ static inline void redirect_intr(int cpu
- buddy = 0;
-
- ticks = 0;
-- while ((cpu_mask & (1UL << buddy)) == 0) {
-+ while (!cpu_isset(buddy, cpu_mask)) {
- if (++buddy >= NR_CPUS)
- buddy = 0;
- if (++ticks > NR_CPUS) {
---- linux-2.6.0-test1/arch/sparc64/kernel/pci.c 2003-06-14 12:17:55.000000000 -0700
-+++ 25/arch/sparc64/kernel/pci.c 2003-07-19 17:03:49.000000000 -0700
-@@ -804,25 +804,20 @@ int pci_mmap_page_range(struct pci_dev *
-
- /* Return the domain nuber for this pci bus */
-
--int pci_domain_nr(struct pci_bus *bus)
-+int pci_domain_nr(struct pci_bus *pbus)
- {
-- struct pcidev_cookie *cookie = bus->sysdata;
-+ struct pci_pbm_info *pbm = pbus->sysdata;
- int ret;
-
-- if (cookie != NULL) {
-- struct pci_pbm_info *pbm = cookie->pbm;
-- if (pbm == NULL || pbm->parent == NULL) {
-- ret = -ENXIO;
-- } else {
-- struct pci_controller_info *p = pbm->parent;
--
-- ret = p->index;
-- if (p->pbms_same_domain == 0)
-- ret = ((ret << 1) +
-- ((pbm == &pbm->parent->pbm_B) ? 1 : 0));
-- }
-- } else {
-+ if (pbm == NULL || pbm->parent == NULL) {
- ret = -ENXIO;
-+ } else {
-+ struct pci_controller_info *p = pbm->parent;
-+
-+ ret = p->index;
-+ if (p->pbms_same_domain == 0)
-+ ret = ((ret << 1) +
-+ ((pbm == &pbm->parent->pbm_B) ? 1 : 0));
- }
-
- return ret;
---- linux-2.6.0-test1/arch/sparc64/kernel/setup.c 2003-06-14 12:18:07.000000000 -0700
-+++ 25/arch/sparc64/kernel/setup.c 2003-07-19 17:03:49.000000000 -0700
-@@ -24,7 +24,6 @@
- #include <linux/kdev_t.h>
- #include <linux/major.h>
- #include <linux/string.h>
--#include <linux/blk.h>
- #include <linux/init.h>
- #include <linux/inet.h>
- #include <linux/console.h>
---- linux-2.6.0-test1/arch/sparc64/kernel/smp.c 2003-07-10 18:50:30.000000000 -0700
-+++ 25/arch/sparc64/kernel/smp.c 2003-07-19 17:04:07.000000000 -0700
-@@ -46,12 +46,11 @@ cpuinfo_sparc cpu_data[NR_CPUS];
- /* Please don't make this stuff initdata!!! --DaveM */
- static unsigned char boot_cpu_id;
-
--atomic_t sparc64_num_cpus_online = ATOMIC_INIT(0);
--unsigned long cpu_online_map = 0;
-+cpumask_t cpu_online_map = CPU_MASK_NONE;
- atomic_t sparc64_num_cpus_possible = ATOMIC_INIT(0);
--unsigned long phys_cpu_present_map = 0;
--static unsigned long smp_commenced_mask;
--static unsigned long cpu_callout_map;
-+cpumask_t phys_cpu_present_map = CPU_MASK_NONE;
-+static cpumask_t smp_commenced_mask;
-+static cpumask_t cpu_callout_map;
-
- void smp_info(struct seq_file *m)
- {
-@@ -151,11 +150,10 @@ void __init smp_callin(void)
- atomic_inc(&init_mm.mm_count);
- current->active_mm = &init_mm;
-
-- while (!test_bit(cpuid, &smp_commenced_mask))
-+ while (!cpu_isset(cpuid, smp_commenced_mask))
- membar("#LoadLoad");
-
-- set_bit(cpuid, &cpu_online_map);
-- atomic_inc(&sparc64_num_cpus_online);
-+ cpu_set(cpuid, cpu_online_map);
- }
-
- void cpu_panic(void)
-@@ -334,7 +332,7 @@ static int __devinit smp_boot_one_cpu(un
- if (linux_cpus[no].mid == cpu)
- break;
- cpu_new_thread = p->thread_info;
-- set_bit(cpu, &cpu_callout_map);
-+ cpu_set(cpu, cpu_callout_map);
- prom_startcpu(linux_cpus[no].prom_node, entry, cookie);
- for (timeout = 0; timeout < 5000000; timeout++) {
- if (callin_flag)
-@@ -346,7 +344,7 @@ static int __devinit smp_boot_one_cpu(un
- ret = 0;
- } else {
- printk("Processor %d is stuck.\n", cpu);
-- clear_bit(cpu, &cpu_callout_map);
-+ cpu_clear(cpu, cpu_callout_map);
- ret = -ENODEV;
- }
- cpu_new_thread = NULL;
-@@ -420,17 +418,17 @@ again:
- }
- }
-
--static __inline__ void spitfire_xcall_deliver(u64 data0, u64 data1, u64 data2, unsigned long mask)
-+static __inline__ void spitfire_xcall_deliver(u64 data0, u64 data1, u64 data2, cpumask_t mask)
- {
- u64 pstate;
- int i;
-
- __asm__ __volatile__("rdpr %%pstate, %0" : "=r" (pstate));
- for (i = 0; i < NR_CPUS; i++) {
-- if (mask & (1UL << i)) {
-+ if (cpu_isset(i, mask)) {
- spitfire_xcall_helper(data0, data1, data2, pstate, i);
-- mask &= ~(1UL << i);
-- if (!mask)
-+ cpu_clear(i, mask);
-+ if (cpus_empty(mask))
- break;
- }
- }
-@@ -443,12 +441,12 @@ static __inline__ void spitfire_xcall_de
- #if NR_CPUS > 32
- #error Fixup cheetah_xcall_deliver Dave...
- #endif
--static void cheetah_xcall_deliver(u64 data0, u64 data1, u64 data2, unsigned long mask)
-+static void cheetah_xcall_deliver(u64 data0, u64 data1, u64 data2, cpumask_t mask)
- {
- u64 pstate;
- int nack_busy_id;
-
-- if (!mask)
-+ if (cpus_empty(mask))
- return;
-
- __asm__ __volatile__("rdpr %%pstate, %0" : "=r" (pstate));
-@@ -469,11 +467,11 @@ retry:
-
- nack_busy_id = 0;
- {
-- unsigned long work_mask = mask;
-+ cpumask_t work_mask = mask;
- int i;
-
- for (i = 0; i < NR_CPUS; i++) {
-- if (work_mask & (1UL << i)) {
-+ if (cpu_isset(i, work_mask)) {
- u64 target = (i << 14) | 0x70;
-
- target |= (nack_busy_id++ << 24);
-@@ -482,8 +480,8 @@ retry:
- "membar #Sync\n\t"
- : /* no outputs */
- : "r" (target), "i" (ASI_INTR_W));
-- work_mask &= ~(1UL << i);
-- if (!work_mask)
-+ cpu_clear(i, work_mask);
-+ if (cpus_empty(work_mask))
- break;
- }
- }
-@@ -518,7 +516,7 @@ retry:
- printk("CPU[%d]: mondo stuckage result[%016lx]\n",
- smp_processor_id(), dispatch_stat);
- } else {
-- unsigned long work_mask = mask;
-+ cpumask_t work_mask = mask;
- int i, this_busy_nack = 0;
-
- /* Delay some random time with interrupts enabled
-@@ -530,13 +528,13 @@ retry:
- * NACK us.
- */
- for (i = 0; i < NR_CPUS; i++) {
-- if (work_mask & (1UL << i)) {
-+ if (cpu_isset(i, work_mask)) {
- if ((dispatch_stat &
- (0x2 << this_busy_nack)) == 0)
-- mask &= ~(1UL << i);
-+ cpu_clear(i, mask);
- this_busy_nack += 2;
-- work_mask &= ~(1UL << i);
-- if (!work_mask)
-+ cpu_clear(i, work_mask);
-+ if (cpus_empty(work_mask))
- break;
- }
- }
-@@ -549,12 +547,12 @@ retry:
- /* Send cross call to all processors mentioned in MASK
- * except self.
- */
--static void smp_cross_call_masked(unsigned long *func, u32 ctx, u64 data1, u64 data2, unsigned long mask)
-+static void smp_cross_call_masked(unsigned long *func, u32 ctx, u64 data1, u64 data2, cpumask_t mask)
- {
- u64 data0 = (((u64)ctx)<<32 | (((u64)func) & 0xffffffff));
-
-- mask &= cpu_online_map;
-- mask &= ~(1UL<<smp_processor_id());
-+ cpus_and(mask, mask, cpu_online_map);
-+ cpu_clear(smp_processor_id(), mask);
-
- if (tlb_type == spitfire)
- spitfire_xcall_deliver(data0, data1, data2, mask);
-@@ -567,9 +565,10 @@ extern unsigned long xcall_sync_tick;
-
- static void smp_start_sync_tick_client(int cpu)
- {
-+ cpumask_t mask = cpumask_of_cpu(cpu);
-+
- smp_cross_call_masked(&xcall_sync_tick,
-- 0, 0, 0,
-- (1UL << cpu));
-+ 0, 0, 0, mask);
- }
-
- /* Send cross call to all processors except self. */
-@@ -685,14 +684,14 @@ static __inline__ void __local_flush_dca
-
- void smp_flush_dcache_page_impl(struct page *page, int cpu)
- {
-- unsigned long mask = 1UL << cpu;
-+ cpumask_t mask = cpumask_of_cpu(cpu);
-
- #ifdef CONFIG_DEBUG_DCFLUSH
- atomic_inc(&dcpage_flushes);
- #endif
- if (cpu == smp_processor_id()) {
- __local_flush_dcache_page(page);
-- } else if ((cpu_online_map & mask) != 0) {
-+ } else if (cpu_online(cpu)) {
- u64 data0;
-
- if (tlb_type == spitfire) {
-@@ -719,13 +718,14 @@ void smp_flush_dcache_page_impl(struct p
-
- void flush_dcache_page_all(struct mm_struct *mm, struct page *page)
- {
-- unsigned long mask = cpu_online_map & ~(1UL << smp_processor_id());
-+ cpumask_t mask = cpu_online_map;
-+ cpu_clear(smp_processor_id(), mask);
- u64 data0;
-
- #ifdef CONFIG_DEBUG_DCFLUSH
- atomic_inc(&dcpage_flushes);
- #endif
-- if (mask == 0UL)
-+ if (cpus_empty(mask))
- goto flush_self;
- if (tlb_type == spitfire) {
- data0 = ((u64)&xcall_flush_dcache_page_spitfire);
-@@ -750,9 +750,9 @@ void flush_dcache_page_all(struct mm_str
-
- void smp_receive_signal(int cpu)
- {
-- unsigned long mask = 1UL << cpu;
-+ cpumask_t mask = cpumask_of_cpu(cpu);
-
-- if ((cpu_online_map & mask) != 0) {
-+ if (cpu_online(cpu)) {
- u64 data0 = (((u64)&xcall_receive_signal) & 0xffffffff);
-
- if (tlb_type == spitfire)
-@@ -854,7 +854,7 @@ void smp_flush_tlb_mm(struct mm_struct *
-
- if (atomic_read(&mm->mm_users) == 1) {
- /* See smp_flush_tlb_page for info about this. */
-- mm->cpu_vm_mask = (1UL << cpu);
-+ mm->cpu_vm_mask = cpumask_of_cpu(cpu);
- goto local_flush_and_out;
- }
-
-@@ -877,7 +877,7 @@ void smp_flush_tlb_range(struct mm_struc
- end = PAGE_ALIGN(end);
-
- if (mm == current->active_mm && atomic_read(&mm->mm_users) == 1) {
-- mm->cpu_vm_mask = (1UL << cpu);
-+ mm->cpu_vm_mask = cpumask_of_cpu(cpu);
- goto local_flush_and_out;
- }
-
-@@ -921,14 +921,16 @@ void smp_flush_tlb_page(struct mm_struct
- * is almost certain that all TLB entries for this
- * context will be replaced by the time that happens.
- */
-- mm->cpu_vm_mask = (1UL << cpu);
-+ mm->cpu_vm_mask = cpumask_of_cpu(cpu);
- goto local_flush_and_out;
- } else {
-+ cpumask_t this_cpu_mask = cpumask_of_cpu(cpu);
-+
- /* By virtue of running under the mm->page_table_lock,
- * and mmu_context.h:switch_mm doing the same, the
- * following operation is safe.
- */
-- if (mm->cpu_vm_mask == (1UL << cpu))
-+ if (cpus_equal(mm->cpu_vm_mask, this_cpu_mask))
- goto local_flush_and_out;
- }
-
-@@ -939,7 +941,7 @@ void smp_flush_tlb_page(struct mm_struct
- smp_cross_call_masked(&xcall_flush_tlb_page,
- ctx, page, 0,
- mm->cpu_vm_mask);
-- if (!(mm->cpu_vm_mask & (1UL << cpu)))
-+ if (!cpu_isset(cpu, mm->cpu_vm_mask))
- return;
-
- local_flush_and_out:
-@@ -1122,8 +1124,7 @@ void __init smp_tick_init(void)
- prom_halt();
- }
-
-- atomic_inc(&sparc64_num_cpus_online);
-- set_bit(boot_cpu_id, &cpu_online_map);
-+ cpu_set(boot_cpu_id, cpu_online_map);
- prom_cpu_nodes[boot_cpu_id] = linux_cpus[0].prom_node;
- prof_counter(boot_cpu_id) = prof_multiplier(boot_cpu_id) = 1;
- }
-@@ -1241,16 +1242,14 @@ void __init smp_prepare_cpus(unsigned in
-
- for (i = 0; i < linux_num_cpus; i++) {
- if (linux_cpus[i].mid < max_cpus) {
-- set_bit(linux_cpus[i].mid,
-- &phys_cpu_present_map);
-+ cpu_set(linux_cpus[i].mid, phys_cpu_present_map);
- atomic_inc(&sparc64_num_cpus_possible);
- }
- }
- if (atomic_read(&sparc64_num_cpus_possible) > max_cpus) {
- for (i = linux_num_cpus - 1; i >= 0; i--) {
- if (linux_cpus[i].mid != boot_cpu_id) {
-- clear_bit(linux_cpus[i].mid,
-- &phys_cpu_present_map);
-+ cpu_clear(linux_cpus[i].mid, phys_cpu_present_map);
- atomic_dec(&sparc64_num_cpus_possible);
- if (atomic_read(&sparc64_num_cpus_possible) <= max_cpus)
- break;
-@@ -1263,8 +1262,8 @@ void __init smp_prepare_cpus(unsigned in
-
- void __devinit smp_prepare_boot_cpu(void)
- {
-- set_bit(smp_processor_id(), &cpu_online_map);
-- set_bit(smp_processor_id(), &phys_cpu_present_map);
-+ cpu_set(smp_processor_id(), cpu_online_map);
-+ cpu_set(smp_processor_id(), phys_cpu_present_map);
- }
-
- int __devinit __cpu_up(unsigned int cpu)
-@@ -1272,10 +1271,10 @@ int __devinit __cpu_up(unsigned int cpu)
- int ret = smp_boot_one_cpu(cpu);
-
- if (!ret) {
-- set_bit(cpu, &smp_commenced_mask);
-- while (!test_bit(cpu, &cpu_online_map))
-+ cpu_set(cpu, smp_commenced_mask);
-+ while (!cpu_isset(cpu, cpu_online_map))
- mb();
-- if (!test_bit(cpu, &cpu_online_map)) {
-+ if (!cpu_isset(cpu, cpu_online_map)) {
- ret = -ENODEV;
- } else {
- smp_synchronize_one_tick(cpu);
---- linux-2.6.0-test1/arch/sparc64/kernel/sparc64_ksyms.c 2003-07-10 18:50:30.000000000 -0700
-+++ 25/arch/sparc64/kernel/sparc64_ksyms.c 2003-07-19 17:04:07.000000000 -0700
-@@ -147,7 +147,6 @@ EXPORT_SYMBOL(cpu_data);
-
- /* CPU online map and active count. */
- EXPORT_SYMBOL(cpu_online_map);
--EXPORT_SYMBOL(sparc64_num_cpus_online);
- EXPORT_SYMBOL(phys_cpu_present_map);
- EXPORT_SYMBOL(sparc64_num_cpus_possible);
-
-@@ -176,6 +175,8 @@ EXPORT_SYMBOL(up);
- /* Atomic counter implementation. */
- EXPORT_SYMBOL(__atomic_add);
- EXPORT_SYMBOL(__atomic_sub);
-+EXPORT_SYMBOL(__atomic64_add);
-+EXPORT_SYMBOL(__atomic64_sub);
- #ifdef CONFIG_SMP
- EXPORT_SYMBOL(atomic_dec_and_lock);
- #endif
---- linux-2.6.0-test1/arch/sparc64/kernel/time.c 2003-07-13 21:44:34.000000000 -0700
-+++ 25/arch/sparc64/kernel/time.c 2003-07-19 17:03:49.000000000 -0700
-@@ -41,6 +41,7 @@
- #include <asm/isa.h>
- #include <asm/starfire.h>
- #include <asm/smp.h>
-+#include <asm/sections.h>
-
- spinlock_t mostek_lock = SPIN_LOCK_UNLOCKED;
- spinlock_t rtc_lock = SPIN_LOCK_UNLOCKED;
-@@ -449,7 +450,6 @@ void sparc64_do_profile(struct pt_regs *
- return;
-
- {
-- extern int _stext;
- extern int rwlock_impl_begin, rwlock_impl_end;
- extern int atomic_impl_begin, atomic_impl_end;
- extern int __memcpy_begin, __memcpy_end;
-@@ -468,7 +468,7 @@ void sparc64_do_profile(struct pt_regs *
- pc < (unsigned long) &__bitops_end))
- pc = o7;
-
-- pc -= (unsigned long) &_stext;
-+ pc -= (unsigned long) _stext;
- pc >>= prof_shift;
-
- if(pc >= prof_len)
---- linux-2.6.0-test1/arch/sparc64/kernel/us2e_cpufreq.c 2003-06-14 12:18:29.000000000 -0700
-+++ 25/arch/sparc64/kernel/us2e_cpufreq.c 2003-07-19 17:04:07.000000000 -0700
-@@ -232,15 +232,16 @@ static unsigned long estar_to_divisor(un
-
- static void us2e_set_cpu_divider_index(unsigned int cpu, unsigned int index)
- {
-- unsigned long new_bits, new_freq, cpus_allowed;
-+ unsigned long new_bits, new_freq;
- unsigned long clock_tick, divisor, old_divisor, estar;
-+ cpumask_t cpus_allowed;
- struct cpufreq_freqs freqs;
-
- if (!cpu_online(cpu))
- return;
-
- cpus_allowed = current->cpus_allowed;
-- set_cpus_allowed(current, (1UL << cpu));
-+ set_cpus_allowed(current, cpumask_of_cpu(cpu));
-
- new_freq = clock_tick = sparc64_get_clock_tick(cpu);
- new_bits = index_to_estar_mode(index);
---- linux-2.6.0-test1/arch/sparc64/kernel/us3_cpufreq.c 2003-06-14 12:17:56.000000000 -0700
-+++ 25/arch/sparc64/kernel/us3_cpufreq.c 2003-07-19 17:04:07.000000000 -0700
-@@ -78,14 +78,15 @@ static unsigned long get_current_freq(un
-
- static void us3_set_cpu_divider_index(unsigned int cpu, unsigned int index)
- {
-- unsigned long new_bits, new_freq, reg, cpus_allowed;
-+ unsigned long new_bits, new_freq, reg;
-+ cpumask_t cpus_allowed;
- struct cpufreq_freqs freqs;
-
- if (!cpu_online(cpu))
- return;
-
- cpus_allowed = current->cpus_allowed;
-- set_cpus_allowed(current, (1UL << cpu));
-+ set_cpus_allowed(current, cpumask_of_cpu(cpu));
-
- new_freq = sparc64_get_clock_tick(cpu);
- switch (index) {
---- linux-2.6.0-test1/arch/sparc64/lib/atomic.S 2003-06-14 12:18:33.000000000 -0700
-+++ 25/arch/sparc64/lib/atomic.S 2003-07-19 17:03:49.000000000 -0700
-@@ -33,4 +33,27 @@ __atomic_sub: /* %o0 = increment, %o1 =
- membar #StoreLoad | #StoreStore
- retl
- sub %g7, %o0, %o0
-+
-+ .globl __atomic64_add
-+__atomic64_add: /* %o0 = increment, %o1 = atomic_ptr */
-+ ldx [%o1], %g5
-+ add %g5, %o0, %g7
-+ casx [%o1], %g5, %g7
-+ cmp %g5, %g7
-+ bne,pn %xcc, __atomic64_add
-+ membar #StoreLoad | #StoreStore
-+ retl
-+ add %g7, %o0, %o0
-+
-+ .globl __atomic64_sub
-+__atomic64_sub: /* %o0 = increment, %o1 = atomic_ptr */
-+ ldx [%o1], %g5
-+ sub %g5, %o0, %g7
-+ casx [%o1], %g5, %g7
-+ cmp %g5, %g7
-+ bne,pn %xcc, __atomic64_sub
-+ membar #StoreLoad | #StoreStore
-+ retl
-+ sub %g7, %o0, %o0
-+
- atomic_impl_end:
---- linux-2.6.0-test1/arch/sparc64/lib/rwlock.S 2003-06-26 22:07:24.000000000 -0700
-+++ 25/arch/sparc64/lib/rwlock.S 2003-07-19 17:06:40.000000000 -0700
-@@ -63,5 +63,33 @@ __write_lock: /* %o0 = lock_ptr */
- be,pt %icc, 99b
- membar #StoreLoad | #StoreStore
- ba,a,pt %xcc, 1b
-+
-+ .globl __read_trylock
-+__read_trylock: /* %o0 = lock_ptr */
-+ ldsw [%o0], %g5
-+ brlz,pn %g5, 100f
-+ add %g5, 1, %g7
-+ cas [%o0], %g5, %g7
-+ cmp %g5, %g7
-+ bne,pn %icc, __read_trylock
-+ membar #StoreLoad | #StoreStore
-+ retl
-+ mov 1, %o0
-+
-+ .globl __write_trylock
-+__write_trylock: /* %o0 = lock_ptr */
-+ sethi %hi(0x80000000), %g2
-+1: lduw [%o0], %g5
-+4: brnz,pn %g5, 100f
-+ or %g5, %g2, %g7
-+ cas [%o0], %g5, %g7
-+ cmp %g5, %g7
-+ bne,pn %icc, 1b
-+ membar #StoreLoad | #StoreStore
-+ retl
-+ mov 1, %o0
-+100: retl
-+ mov 0, %o0
-+
- rwlock_impl_end:
-
---- linux-2.6.0-test1/arch/sparc64/mm/fault.c 2003-07-02 14:53:14.000000000 -0700
-+++ 25/arch/sparc64/mm/fault.c 2003-07-19 17:03:49.000000000 -0700
-@@ -26,6 +26,7 @@
- #include <asm/uaccess.h>
- #include <asm/asi.h>
- #include <asm/lsu.h>
-+#include <asm/sections.h>
-
- #define ELEMENTS(arr) (sizeof (arr)/sizeof (arr[0]))
-
-@@ -320,10 +321,9 @@ asmlinkage void do_sparc64_fault(struct
-
- if (regs->tstate & TSTATE_PRIV) {
- unsigned long tpc = regs->tpc;
-- extern unsigned int _etext;
-
- /* Sanity check the PC. */
-- if ((tpc >= KERNBASE && tpc < (unsigned long) &_etext) ||
-+ if ((tpc >= KERNBASE && tpc < (unsigned long) _etext) ||
- (tpc >= MODULES_VADDR && tpc < MODULES_END)) {
- /* Valid, no problems... */
- } else {
---- linux-2.6.0-test1/arch/sparc64/mm/generic.c 2003-06-14 12:18:30.000000000 -0700
-+++ 25/arch/sparc64/mm/generic.c 2003-07-19 17:07:16.000000000 -0700
-@@ -85,7 +85,7 @@ static inline void io_remap_pte_range(pt
- } while (address < end);
- }
-
--static inline int io_remap_pmd_range(pmd_t * pmd, unsigned long address, unsigned long size,
-+static inline int io_remap_pmd_range(pgd_t *pgd, pmd_t * pmd, unsigned long address, unsigned long size,
- unsigned long offset, pgprot_t prot, int space)
- {
- unsigned long end;
-@@ -96,7 +96,7 @@ static inline int io_remap_pmd_range(pmd
- end = PGDIR_SIZE;
- offset -= address;
- do {
-- pte_t * pte = pte_alloc_map(current->mm, pmd, address);
-+ pte_t * pte = pte_alloc_map(current->mm, pgd, &pmd, address);
- if (!pte)
- return -ENOMEM;
- io_remap_pte_range(pte, address, end - address, address + offset, prot, space);
-@@ -122,11 +122,11 @@ int io_remap_page_range(struct vm_area_s
-
- spin_lock(&mm->page_table_lock);
- while (from < end) {
-- pmd_t *pmd = pmd_alloc(current->mm, dir, from);
-+ pmd_t *pmd = pmd_alloc_map(current->mm, dir, from);
- error = -ENOMEM;
- if (!pmd)
- break;
-- error = io_remap_pmd_range(pmd, from, end - from, offset + from, prot, space);
-+ error = io_remap_pmd_range(pgd, pmd, from, end - from, offset + from, prot, space);
- if (error)
- break;
- from = (from + PGDIR_SIZE) & PGDIR_MASK;
---- linux-2.6.0-test1/arch/sparc64/mm/hugetlbpage.c 2003-06-14 12:18:25.000000000 -0700
-+++ 25/arch/sparc64/mm/hugetlbpage.c 2003-07-19 17:07:16.000000000 -0700
-@@ -107,9 +107,11 @@ static pte_t *huge_pte_alloc_map(struct
-
- pgd = pgd_offset(mm, addr);
- if (pgd) {
-- pmd = pmd_alloc(mm, pgd, addr);
-- if (pmd)
-- pte = pte_alloc_map(mm, pmd, addr);
-+ pmd = pmd_alloc_map(mm, pgd, addr);
-+ if (pmd) {
-+ pte = pte_alloc_map(mm, pgd, &pmd, addr);
-+ pmd_unmap(pmd);
-+ }
- }
- return pte;
- }
-@@ -122,9 +124,11 @@ static pte_t *huge_pte_offset_map(struct
-
- pgd = pgd_offset(mm, addr);
- if (pgd) {
-- pmd = pmd_offset(pgd, addr);
-- if (pmd)
-+ pmd = pmd_offset_map(pgd, addr);
-+ if (pmd) {
- pte = pte_offset_map(pmd, addr);
-+ pmd_unmap(pmd);
-+ }
- }
- return pte;
- }
---- linux-2.6.0-test1/arch/sparc64/mm/init.c 2003-06-14 12:18:07.000000000 -0700
-+++ 25/arch/sparc64/mm/init.c 2003-07-19 17:03:49.000000000 -0700
-@@ -35,6 +35,7 @@
- #include <asm/starfire.h>
- #include <asm/tlb.h>
- #include <asm/spitfire.h>
-+#include <asm/sections.h>
-
- DEFINE_PER_CPU(struct mmu_gather, mmu_gathers);
-
-@@ -48,16 +49,14 @@ unsigned long *sparc64_valid_addr_bitmap
- unsigned long phys_base;
- unsigned long pfn_base;
-
--enum ultra_tlb_layout tlb_type = spitfire;
--
- /* get_new_mmu_context() uses "cache + 1". */
- spinlock_t ctx_alloc_lock = SPIN_LOCK_UNLOCKED;
- unsigned long tlb_context_cache = CTX_FIRST_VERSION - 1;
- #define CTX_BMAP_SLOTS (1UL << (CTX_VERSION_SHIFT - 6))
- unsigned long mmu_context_bmap[CTX_BMAP_SLOTS];
-
--/* References to section boundaries */
--extern char __init_begin, __init_end, _start, _end, etext, edata;
-+/* References to special section boundaries */
-+extern char _start[], _end[];
-
- /* Initial ramdisk setup */
- extern unsigned int sparc_ramdisk_image;
-@@ -1333,7 +1332,7 @@ unsigned long __init bootmem_init(unsign
- * image. The kernel is hard mapped below PAGE_OFFSET in a
- * 4MB locked TLB translation.
- */
-- start_pfn = PAGE_ALIGN((unsigned long) &_end) -
-+ start_pfn = PAGE_ALIGN((unsigned long) _end) -
- ((unsigned long) KERNBASE);
-
- /* Adjust up to the physical address where the kernel begins. */
-@@ -1349,7 +1348,7 @@ unsigned long __init bootmem_init(unsign
- #ifdef CONFIG_BLK_DEV_INITRD
- /* Now have to check initial ramdisk, so that bootmap does not overwrite it */
- if (sparc_ramdisk_image) {
-- if (sparc_ramdisk_image >= (unsigned long)&_end - 2 * PAGE_SIZE)
-+ if (sparc_ramdisk_image >= (unsigned long)_end - 2 * PAGE_SIZE)
- sparc_ramdisk_image -= KERNBASE;
- initrd_start = sparc_ramdisk_image + phys_base;
- initrd_end = initrd_start + sparc_ramdisk_size;
-@@ -1426,7 +1425,7 @@ void __init paging_init(void)
-
- set_bit(0, mmu_context_bmap);
-
-- real_end = (unsigned long)&_end;
-+ real_end = (unsigned long)_end;
- if ((real_end > ((unsigned long)KERNBASE + 0x400000)))
- bigkernel = 1;
- #ifdef CONFIG_BLK_DEV_INITRD
-@@ -1718,7 +1717,7 @@ void __init mem_init(void)
- memset(sparc64_valid_addr_bitmap, 0, i << 3);
-
- addr = PAGE_OFFSET + phys_base;
-- last = PAGE_ALIGN((unsigned long)&_end) -
-+ last = PAGE_ALIGN((unsigned long)_end) -
- ((unsigned long) KERNBASE);
- last += PAGE_OFFSET + phys_base;
- while (addr < last) {
-@@ -1745,11 +1744,11 @@ void __init mem_init(void)
- SetPageReserved(mem_map_zero);
- clear_page(page_address(mem_map_zero));
-
-- codepages = (((unsigned long) &etext) - ((unsigned long)&_start));
-+ codepages = (((unsigned long) _etext) - ((unsigned long) _start));
- codepages = PAGE_ALIGN(codepages) >> PAGE_SHIFT;
-- datapages = (((unsigned long) &edata) - ((unsigned long)&etext));
-+ datapages = (((unsigned long) _edata) - ((unsigned long) _etext));
- datapages = PAGE_ALIGN(datapages) >> PAGE_SHIFT;
-- initpages = (((unsigned long) &__init_end) - ((unsigned long) &__init_begin));
-+ initpages = (((unsigned long) __init_end) - ((unsigned long) __init_begin));
- initpages = PAGE_ALIGN(initpages) >> PAGE_SHIFT;
-
- #ifndef CONFIG_SMP
-@@ -1812,8 +1811,8 @@ void free_initmem (void)
- /*
- * The init section is aligned to 8k in vmlinux.lds. Page align for >8k pagesizes.
- */
-- addr = PAGE_ALIGN((unsigned long)(&__init_begin));
-- initend = (unsigned long)(&__init_end) & PAGE_MASK;
-+ addr = PAGE_ALIGN((unsigned long)(__init_begin));
-+ initend = (unsigned long)(__init_end) & PAGE_MASK;
- for (; addr < initend; addr += PAGE_SIZE) {
- unsigned long page;
- struct page *p;
---- linux-2.6.0-test1/arch/sparc64/prom/bootstr.c 2003-06-14 12:17:58.000000000 -0700
-+++ 25/arch/sparc64/prom/bootstr.c 2003-07-19 17:03:49.000000000 -0700
-@@ -15,16 +15,22 @@
- */
-
- #define BARG_LEN 256
--int bootstr_len = BARG_LEN;
--static int bootstr_valid = 0;
--static char bootstr_buf[BARG_LEN] = { 0 };
-+struct {
-+ int bootstr_len;
-+ int bootstr_valid;
-+ char bootstr_buf[BARG_LEN];
-+} bootstr_info = {
-+ .bootstr_len = BARG_LEN,
-+};
-
- char * __init
- prom_getbootargs(void)
- {
- /* This check saves us from a panic when bootfd patches args. */
-- if (bootstr_valid) return bootstr_buf;
-- prom_getstring(prom_chosen_node, "bootargs", bootstr_buf, BARG_LEN);
-- bootstr_valid = 1;
-- return bootstr_buf;
-+ if (bootstr_info.bootstr_valid)
-+ return bootstr_info.bootstr_buf;
-+ prom_getstring(prom_chosen_node, "bootargs",
-+ bootstr_info.bootstr_buf, BARG_LEN);
-+ bootstr_info.bootstr_valid = 1;
-+ return bootstr_info.bootstr_buf;
- }
---- linux-2.6.0-test1/arch/sparc/kernel/process.c 2003-07-13 21:44:34.000000000 -0700
-+++ 25/arch/sparc/kernel/process.c 2003-07-19 17:03:49.000000000 -0700
-@@ -590,16 +590,20 @@ int dump_fpu (struct pt_regs * regs, elf
- put_psr(get_psr() | PSR_EF);
- fpsave(¤t->thread.float_regs[0], ¤t->thread.fsr,
- ¤t->thread.fpqueue[0], ¤t->thread.fpqdepth);
-- regs->psr &= ~(PSR_EF);
-- current->flags &= ~(PF_USEDFPU);
-+ if (regs != NULL) {
-+ regs->psr &= ~(PSR_EF);
-+ current->flags &= ~(PF_USEDFPU);
-+ }
- }
- #else
- if (current == last_task_used_math) {
- put_psr(get_psr() | PSR_EF);
- fpsave(¤t->thread.float_regs[0], ¤t->thread.fsr,
- ¤t->thread.fpqueue[0], ¤t->thread.fpqdepth);
-- last_task_used_math = 0;
-- regs->psr &= ~(PSR_EF);
-+ if (regs != NULL) {
-+ regs->psr &= ~(PSR_EF);
-+ last_task_used_math = 0;
-+ }
- }
- #endif
- memcpy(&fpregs->pr_fr.pr_regs[0],
---- linux-2.6.0-test1/arch/sparc/kernel/setup.c 2003-06-14 12:17:56.000000000 -0700
-+++ 25/arch/sparc/kernel/setup.c 2003-07-19 17:03:49.000000000 -0700
-@@ -25,7 +25,6 @@
- #include <linux/kdev_t.h>
- #include <linux/major.h>
- #include <linux/string.h>
--#include <linux/blk.h>
- #include <linux/init.h>
- #include <linux/interrupt.h>
- #include <linux/console.h>
---- linux-2.6.0-test1/arch/sparc/mm/generic.c 2003-06-14 12:18:33.000000000 -0700
-+++ 25/arch/sparc/mm/generic.c 2003-07-19 17:07:16.000000000 -0700
-@@ -67,7 +67,7 @@ static inline void io_remap_pte_range(pt
- } while (address < end);
- }
-
--static inline int io_remap_pmd_range(pmd_t * pmd, unsigned long address, unsigned long size,
-+static inline int io_remap_pmd_range(pgd_t *pgd, pmd_t * pmd, unsigned long address, unsigned long size,
- unsigned long offset, pgprot_t prot, int space)
- {
- unsigned long end;
-@@ -78,7 +78,7 @@ static inline int io_remap_pmd_range(pmd
- end = PGDIR_SIZE;
- offset -= address;
- do {
-- pte_t * pte = pte_alloc_map(current->mm, pmd, address);
-+ pte_t * pte = pte_alloc_map(current->mm, pgd, &pmd, address);
- if (!pte)
- return -ENOMEM;
- io_remap_pte_range(pte, address, end - address, address + offset, prot, space);
-@@ -103,11 +103,11 @@ int io_remap_page_range(struct vm_area_s
-
- spin_lock(&mm->page_table_lock);
- while (from < end) {
-- pmd_t *pmd = pmd_alloc(current->mm, dir, from);
-+ pmd_t *pmd = pmd_alloc_map(current->mm, dir, from);
- error = -ENOMEM;
- if (!pmd)
- break;
-- error = io_remap_pmd_range(pmd, from, end - from, offset + from, prot, space);
-+ error = io_remap_pmd_range(pgd, pmd, from, end - from, offset + from, prot, space);
- if (error)
- break;
- from = (from + PGDIR_SIZE) & PGDIR_MASK;
---- linux-2.6.0-test1/arch/sparc/mm/srmmu.c 2003-07-13 21:44:34.000000000 -0700
-+++ 25/arch/sparc/mm/srmmu.c 2003-07-19 17:07:16.000000000 -0700
-@@ -15,7 +15,6 @@
- #include <linux/vmalloc.h>
- #include <linux/pagemap.h>
- #include <linux/init.h>
--#include <linux/blk.h>
- #include <linux/spinlock.h>
- #include <linux/bootmem.h>
- #include <linux/fs.h>
-@@ -2188,7 +2187,7 @@ void __init ld_mmu_srmmu(void)
-
- BTFIXUPSET_CALL(pte_pfn, srmmu_pte_pfn, BTFIXUPCALL_NORM);
- BTFIXUPSET_CALL(pmd_page, srmmu_pmd_page, BTFIXUPCALL_NORM);
-- BTFIXUPSET_CALL(pgd_page, srmmu_pgd_page, BTFIXUPCALL_NORM);
-+ BTFIXUPSET_CALL(__pgd_page, srmmu_pgd_page, BTFIXUPCALL_NORM);
-
- BTFIXUPSET_SETHI(none_mask, 0xF0000000);
-
-@@ -2220,7 +2219,7 @@ void __init ld_mmu_srmmu(void)
- BTFIXUPSET_CALL(pte_alloc_one_kernel, srmmu_pte_alloc_one_kernel, BTFIXUPCALL_NORM);
- BTFIXUPSET_CALL(pte_alloc_one, srmmu_pte_alloc_one, BTFIXUPCALL_NORM);
- BTFIXUPSET_CALL(free_pmd_fast, srmmu_pmd_free, BTFIXUPCALL_NORM);
-- BTFIXUPSET_CALL(pmd_alloc_one, srmmu_pmd_alloc_one, BTFIXUPCALL_NORM);
-+ BTFIXUPSET_CALL(__pmd_alloc_one, srmmu_pmd_alloc_one, BTFIXUPCALL_NORM);
- BTFIXUPSET_CALL(free_pgd_fast, srmmu_free_pgd_fast, BTFIXUPCALL_NORM);
- BTFIXUPSET_CALL(get_pgd_fast, srmmu_get_pgd_fast, BTFIXUPCALL_NORM);
-
---- linux-2.6.0-test1/arch/sparc/mm/sun4c.c 2003-06-14 12:18:29.000000000 -0700
-+++ 25/arch/sparc/mm/sun4c.c 2003-07-19 17:07:16.000000000 -0700
-@@ -2211,7 +2211,7 @@ void __init ld_mmu_sun4c(void)
- BTFIXUPSET_CALL(pte_alloc_one_kernel, sun4c_pte_alloc_one_kernel, BTFIXUPCALL_NORM);
- BTFIXUPSET_CALL(pte_alloc_one, sun4c_pte_alloc_one, BTFIXUPCALL_NORM);
- BTFIXUPSET_CALL(free_pmd_fast, sun4c_free_pmd_fast, BTFIXUPCALL_NOP);
-- BTFIXUPSET_CALL(pmd_alloc_one, sun4c_pmd_alloc_one, BTFIXUPCALL_RETO0);
-+ BTFIXUPSET_CALL(__pmd_alloc_one, sun4c_pmd_alloc_one, BTFIXUPCALL_RETO0);
- BTFIXUPSET_CALL(free_pgd_fast, sun4c_free_pgd_fast, BTFIXUPCALL_NORM);
- BTFIXUPSET_CALL(get_pgd_fast, sun4c_get_pgd_fast, BTFIXUPCALL_NORM);
-
-@@ -2252,5 +2252,5 @@ void __init ld_mmu_sun4c(void)
-
- /* These should _never_ get called with two level tables. */
- BTFIXUPSET_CALL(pgd_set, sun4c_pgd_set, BTFIXUPCALL_NOP);
-- BTFIXUPSET_CALL(pgd_page, sun4c_pgd_page, BTFIXUPCALL_RETO0);
-+ BTFIXUPSET_CALL(__pgd_page, sun4c_pgd_page, BTFIXUPCALL_RETO0);
- }
---- linux-2.6.0-test1/arch/um/drivers/ubd_kern.c 2003-06-14 12:18:20.000000000 -0700
-+++ 25/arch/um/drivers/ubd_kern.c 2003-07-19 17:03:49.000000000 -0700
-@@ -15,7 +15,6 @@
-
- #include "linux/config.h"
- #include "linux/module.h"
--#include "linux/blk.h"
- #include "linux/blkdev.h"
- #include "linux/hdreg.h"
- #include "linux/init.h"
---- linux-2.6.0-test1/arch/um/kernel/irq.c 2003-06-14 12:18:30.000000000 -0700
-+++ 25/arch/um/kernel/irq.c 2003-07-19 17:04:07.000000000 -0700
-@@ -565,9 +565,9 @@ static struct proc_dir_entry * smp_affin
- /* These are read and written as longs, so a read won't see a partial write
- * even during a race.
- */
--static unsigned long irq_affinity [NR_IRQS] = { [0 ... NR_IRQS-1] = ~0UL };
-+static cpumask_t irq_affinity [NR_IRQS] = { [0 ... NR_IRQS-1] = CPU_MASK_ALL };
-
--#define HEX_DIGITS 8
-+#define HEX_DIGITS (2*sizeof(cpumask_t))
-
- static int irq_affinity_read_proc (char *page, char **start, off_t off,
- int count, int *eof, void *data)
-@@ -578,10 +578,10 @@ static int irq_affinity_read_proc (char
- }
-
- static unsigned int parse_hex_value (const char *buffer,
-- unsigned long count, unsigned long *ret)
-+ unsigned long count, cpumask_t *ret)
- {
- unsigned char hexnum [HEX_DIGITS];
-- unsigned long value;
-+ cpumask_t value = CPU_MASK_NONE;
- int i;
-
- if (!count)
-@@ -595,10 +595,9 @@ static unsigned int parse_hex_value (con
- * Parse the first 8 characters as a hex string, any non-hex char
- * is end-of-string. '00e1', 'e1', '00E1', 'E1' are all the same.
- */
-- value = 0;
-
- for (i = 0; i < count; i++) {
-- unsigned int c = hexnum[i];
-+ unsigned int k, c = hexnum[i];
-
- switch (c) {
- case '0' ... '9': c -= '0'; break;
-@@ -607,7 +606,10 @@ static unsigned int parse_hex_value (con
- default:
- goto out;
- }
-- value = (value << 4) | c;
-+ cpus_shift_left(value, value, 16);
-+ for (k = 0; k < 4; ++k)
-+ if (c & (1 << k))
-+ cpu_set(k, value);
- }
- out:
- *ret = value;
-@@ -618,7 +620,7 @@ static int irq_affinity_write_proc (stru
- unsigned long count, void *data)
- {
- int irq = (long) data, full_count = count, err;
-- unsigned long new_value;
-+ cpumask_t new_value, tmp;
-
- if (!irq_desc[irq].handler->set_affinity)
- return -EIO;
-@@ -631,7 +633,8 @@ static int irq_affinity_write_proc (stru
- * way to make the system unusable accidentally :-) At least
- * one online CPU still has to be targeted.
- */
-- if (!(new_value & cpu_online_map))
-+ cpus_and(tmp, new_value, cpu_online_map);
-+ if (cpus_empty(tmp))
- return -EINVAL;
- #endif
-
-@@ -644,17 +647,27 @@ static int irq_affinity_write_proc (stru
- static int prof_cpu_mask_read_proc (char *page, char **start, off_t off,
- int count, int *eof, void *data)
- {
-- unsigned long *mask = (unsigned long *) data;
-+ cpumask_t tmp, *mask = (cpumask_t *) data;
-+ int k, len = 0;
-+
- if (count < HEX_DIGITS+1)
- return -EINVAL;
-- return sprintf (page, "%08lx\n", *mask);
-+ tmp = *mask;
-+ for (k = 0; k < sizeof(cpumask_t)/sizeof(u16); ++k) {
-+ int j = sprintf(page, "%04hx", cpus_coerce(tmp));
-+ len += j;
-+ page += j;
-+ cpus_shift_right(tmp, tmp, 16);
-+ }
-+ len += sprintf(page, "\n");
-+ return len;
- }
-
- static int prof_cpu_mask_write_proc (struct file *file, const char *buffer,
- unsigned long count, void *data)
- {
-- unsigned long *mask = (unsigned long *) data, full_count = count, err;
-- unsigned long new_value;
-+ cpumask_t *mask = (cpumask_t *)data, new_value;
-+ unsigned long full_count = count, err;
-
- err = parse_hex_value(buffer, count, &new_value);
- if (err)
-@@ -693,7 +706,7 @@ static void register_irq_proc (unsigned
- }
-
- /* Read and written as a long */
--unsigned long prof_cpu_mask = -1;
-+cpumask_t prof_cpu_mask = CPU_MASK_ALL;
-
- void __init init_irq_proc (void)
- {
---- linux-2.6.0-test1/arch/um/kernel/skas/process_kern.c 2003-06-14 12:18:04.000000000 -0700
-+++ 25/arch/um/kernel/skas/process_kern.c 2003-07-19 17:04:07.000000000 -0700
-@@ -152,7 +152,7 @@ static int start_kernel_proc(void *unuse
- cpu_tasks[0].pid = pid;
- cpu_tasks[0].task = current;
- #ifdef CONFIG_SMP
-- cpu_online_map = 1;
-+ cpu_online_map = cpumask_of_cpu(0);
- #endif
- start_kernel();
- return(0);
---- linux-2.6.0-test1/arch/um/kernel/smp.c 2003-06-14 12:18:03.000000000 -0700
-+++ 25/arch/um/kernel/smp.c 2003-07-19 17:04:07.000000000 -0700
-@@ -5,9 +5,6 @@
-
- #include "linux/config.h"
-
--/* CPU online map, set by smp_boot_cpus */
--unsigned long cpu_online_map = 1;
--
- #ifdef CONFIG_SMP
-
- #include "linux/sched.h"
-@@ -24,6 +21,9 @@ unsigned long cpu_online_map = 1;
- #include "irq_user.h"
- #include "os.h"
-
-+/* CPU online map, set by smp_boot_cpus */
-+unsigned long cpu_online_map = cpumask_of_cpu(0);
-+
- /* Per CPU bogomips and other parameters
- * The only piece used here is the ipi pipe, which is set before SMP is
- * started and never changed.
-@@ -104,8 +104,8 @@ void smp_send_stop(void)
- printk("done\n");
- }
-
--static unsigned long smp_commenced_mask;
--static volatile unsigned long smp_callin_map = 0;
-+static cpumask_t smp_commenced_mask;
-+static cpumask_t smp_callin_map = CPU_MASK_NONE;
-
- static int idle_proc(void *cpup)
- {
-@@ -120,15 +120,15 @@ static int idle_proc(void *cpup)
- current->thread.mode.tt.extern_pid);
-
- wmb();
-- if (test_and_set_bit(cpu, &smp_callin_map)) {
-+ if (cpu_test_and_set(cpu, &smp_callin_map)) {
- printk("huh, CPU#%d already present??\n", cpu);
- BUG();
- }
-
-- while (!test_bit(cpu, &smp_commenced_mask))
-+ while (!cpu_isset(cpu, &smp_commenced_mask))
- cpu_relax();
-
-- set_bit(cpu, &cpu_online_map);
-+ cpu_set(cpu, cpu_online_map);
- default_idle();
- return(0);
- }
-@@ -159,8 +159,8 @@ void smp_prepare_cpus(unsigned int maxcp
- unsigned long waittime;
- int err, cpu;
-
-- set_bit(0, &cpu_online_map);
-- set_bit(0, &smp_callin_map);
-+ cpu_set(0, cpu_online_map);
-+ cpu_set(0, smp_callin_map);
-
- err = os_pipe(cpu_data[0].ipi_pipe, 1, 1);
- if(err) panic("CPU#0 failed to create IPI pipe, errno = %d", -err);
-@@ -177,10 +177,10 @@ void smp_prepare_cpus(unsigned int maxcp
- unhash_process(idle);
-
- waittime = 200000000;
-- while (waittime-- && !test_bit(cpu, &smp_callin_map))
-+ while (waittime-- && !cpu_isset(cpu, smp_callin_map))
- cpu_relax();
-
-- if (test_bit(cpu, &smp_callin_map))
-+ if (cpu_isset(cpu, smp_callin_map))
- printk("done\n");
- else printk("failed\n");
- }
-@@ -188,13 +188,13 @@ void smp_prepare_cpus(unsigned int maxcp
-
- void smp_prepare_boot_cpu(void)
- {
-- set_bit(smp_processor_id(), &cpu_online_map);
-+ cpu_set(smp_processor_id(), cpu_online_map);
- }
-
- int __cpu_up(unsigned int cpu)
- {
-- set_bit(cpu, &smp_commenced_mask);
-- while (!test_bit(cpu, &cpu_online_map))
-+ cpu_set(cpu, smp_commenced_mask);
-+ while (!cpu_isset(cpu, cpu_online_map))
- mb();
- return(0);
- }
-@@ -271,7 +271,7 @@ int smp_call_function(void (*_func)(void
-
- for (i=0;i<NR_CPUS;i++)
- if((i != current->thread_info->cpu) &&
-- test_bit(i, &cpu_online_map))
-+ cpu_isset(i, cpu_online_map))
- write(cpu_data[i].ipi_pipe[1], "C", 1);
-
- while (atomic_read(&scf_started) != cpus)
---- linux-2.6.0-test1/arch/um/kernel/tt/process_kern.c 2003-06-14 12:18:30.000000000 -0700
-+++ 25/arch/um/kernel/tt/process_kern.c 2003-07-19 17:04:07.000000000 -0700
-@@ -419,7 +419,7 @@ static int start_kernel_proc(void *unuse
- cpu_tasks[0].pid = pid;
- cpu_tasks[0].task = current;
- #ifdef CONFIG_SMP
-- cpu_online_map = 1;
-+ cpu_online_map = cpumask_of_cpu(0);
- #endif
- if(debug) os_stop_process(pid);
- start_kernel();
---- linux-2.6.0-test1/arch/um/kernel/um_arch.c 2003-06-14 12:18:30.000000000 -0700
-+++ 25/arch/um/kernel/um_arch.c 2003-07-19 17:04:07.000000000 -0700
-@@ -57,7 +57,7 @@ static int show_cpuinfo(struct seq_file
-
- index = (struct cpuinfo_um *)v - cpu_data;
- #ifdef CONFIG_SMP
-- if (!(cpu_online_map & (1 << index)))
-+ if (!cpu_online(index))
- return 0;
- #endif
-
---- linux-2.6.0-test1/arch/v850/Kconfig 2003-07-02 14:53:14.000000000 -0700
-+++ 25/arch/v850/Kconfig 2003-07-19 17:03:49.000000000 -0700
-@@ -48,20 +48,24 @@ menu "Processor type and features"
- choice
- prompt "Platform"
- default GDB
-+ config V850E_SIM
-+ bool "GDB"
- config RTE_CB_MA1
- bool "RTE-V850E/MA1-CB"
- config RTE_CB_NB85E
- bool "RTE-V850E/NB85E-CB"
-- config V850E_SIM
-- bool "GDB"
-+ config RTE_CB_ME2
-+ bool "RTE-V850E/ME2-CB"
-+ config V850E_AS85EP1
-+ bool "AS85EP1"
- config V850E2_SIM85E2C
- bool "sim85e2c"
-+ config V850E2_SIM85E2S
-+ bool "sim85e2s"
- config V850E2_FPGA85E2C
- bool "NA85E2C-FPGA"
- config V850E2_ANNA
- bool "Anna"
-- config V850E_AS85EP1
-- bool "AS85EP1"
- endchoice
-
-
-@@ -78,41 +82,32 @@ menu "Processor type and features"
- bool
- depends RTE_CB_MA1
- default y
-- # Similarly for the RTE-V850E/MA1-CB - V850E/TEG
-+ # Similarly for the RTE-V850E/NB85E-CB - V850E/TEG
- config V850E_TEG
- bool
- depends RTE_CB_NB85E
- default y
--
-- # NB85E processor core
-- config V850E_NB85E
-+ # ... and the RTE-V850E/ME2-CB - V850E/ME2
-+ config V850E_ME2
- bool
-- depends V850E_MA1 || V850E_TEG
-+ depends RTE_CB_ME2
- default y
-
-- config V850E_MA1_HIGHRES_TIMER
-- bool "High resolution timer support"
-- depends V850E_MA1
--
-
-- #### V850E2 processor-specific config
-+ #### sim85e2-specific config
-
-- # V850E2 processors
-- config V850E2
-+ config V850E2_SIM85E2
- bool
-- depends V850E2_SIM85E2C || V850E2_FPGA85E2C || V850E2_ANNA
-+ depends V850E2_SIM85E2C || V850E2_SIM85E2S
- default y
-
-- # Processors based on the NA85E2A core
-- config V850E2_NA85E2A
-- bool
-- depends V850E2_ANNA
-- default y
-
-- # Processors based on the NA85E2C core
-- config V850E2_NA85E2C
-+ #### V850E2 processor-specific config
-+
-+ # V850E2 processors
-+ config V850E2
- bool
-- depends V850E2_SIM85E2C || V850E2_FPGA85E2C
-+ depends V850E2_SIM85E2 || V850E2_FPGA85E2C || V850E2_ANNA
- default y
-
-
-@@ -121,7 +116,7 @@ menu "Processor type and features"
- # Boards in the RTE-x-CB series
- config RTE_CB
- bool
-- depends RTE_CB_MA1 || RTE_CB_NB85E
-+ depends RTE_CB_MA1 || RTE_CB_NB85E || RTE_CB_ME2
- default y
-
- config RTE_CB_MULTI
-@@ -129,7 +124,7 @@ menu "Processor type and features"
- # RTE_CB_NB85E can either have multi ROM support or not, but
- # other platforms (currently only RTE_CB_MA1) require it.
- prompt "Multi monitor ROM support" if RTE_CB_NB85E
-- depends RTE_CB
-+ depends RTE_CB_MA1 || RTE_CB_NB85E
- default y
-
- config RTE_CB_MULTI_DBTRAP
-@@ -156,14 +151,42 @@ menu "Processor type and features"
- # The only PCI bus we support is on the RTE-MOTHER-A board
- config PCI
- bool
-- default y if RTE_MB_A_PCI
-+ default RTE_MB_A_PCI
-+
-+
-+ #### Some feature-specific configs
-+
-+ # Everything except for the GDB simulator uses the same interrupt controller
-+ config V850E_INTC
-+ bool
-+ default !V850E_SIM
-+
-+ # Everything except for the various simulators uses the "Timer D" unit
-+ config V850E_TIMER_D
-+ bool
-+ default !V850E_SIM && !V850E2_SIM85E2
-+
-+ # Cache control used on some v850e1 processors
-+ config V850E_CACHE
-+ bool
-+ default V850E_TEG || V850E_ME2
-+
-+ # Cache control used on v850e2 processors; I think this should
-+ # actually apply to more, but currently only the SIM85E2S uses it
-+ config V850E2_CACHE
-+ bool
-+ default V850E2_SIM85E2S
-+
-+ config NO_CACHE
-+ bool
-+ default !V850E_CACHE && !V850E2_CACHE
-
-
- #### Misc config
-
- config ROM_KERNEL
- bool "Kernel in ROM"
-- depends V850E2_ANNA || (RTE_CB && !RTE_CB_MULTI)
-+ depends V850E2_ANNA || V850E_AS85EP1 || RTE_CB_ME2
-
- # Some platforms pre-zero memory, in which case the kernel doesn't need to
- config ZERO_BSS
-@@ -177,9 +200,12 @@ menu "Processor type and features"
- int
- default 8 if V850E2_SIM85E2C || V850E2_FPGA85E2C
-
-+ config V850E_HIGHRES_TIMER
-+ bool "High resolution timer support"
-+ depends V850E_TIMER_D
- config TIME_BOOTUP
- bool "Time bootup"
-- depends V850E_MA1_HIGHRES_TIMER
-+ depends V850E_HIGHRES_TIMER
-
- config RESET_GUARD
- bool "Reset Guard"
-@@ -241,6 +267,7 @@ config KCORE_AOUT
- default y
-
- config KCORE_ELF
-+ bool
- default y
-
- source "fs/Kconfig.binfmt"
---- linux-2.6.0-test1/arch/v850/kernel/anna.c 2003-06-14 12:18:21.000000000 -0700
-+++ 25/arch/v850/kernel/anna.c 2003-07-19 17:03:49.000000000 -0700
-@@ -1,8 +1,8 @@
- /*
- * arch/v850/kernel/anna.c -- Anna V850E2 evaluation chip/board
- *
-- * Copyright (C) 2002 NEC Corporation
-- * Copyright (C) 2002 Miles Bader <miles@gnu.org>
-+ * Copyright (C) 2002,03 NEC Electronics Corporation
-+ * Copyright (C) 2002,03 Miles Bader <miles@gnu.org>
- *
- * This file is subject to the terms and conditions of the GNU General
- * Public License. See the file COPYING in the main directory of this
-@@ -21,8 +21,8 @@
- #include <asm/machdep.h>
- #include <asm/atomic.h>
- #include <asm/page.h>
--#include <asm/nb85e_timer_d.h>
--#include <asm/nb85e_uart.h>
-+#include <asm/v850e_timer_d.h>
-+#include <asm/v850e_uart.h>
-
- #include "mach.h"
-
-@@ -41,32 +41,34 @@ static void anna_led_tick (void);
-
- void __init mach_early_init (void)
- {
-- ANNA_ILBEN = 0;
-- ANNA_CSC(0) = 0x402F;
-- ANNA_CSC(1) = 0x4000;
-- ANNA_BPC = 0;
-- ANNA_BSC = 0xAAAA;
-- ANNA_BEC = 0;
-- ANNA_BHC = 0xFFFF; /* icache all memory, dcache all */
-- ANNA_BCT(0) = 0xB088;
-- ANNA_BCT(1) = 0x0008;
-- ANNA_DWC(0) = 0x0027;
-- ANNA_DWC(1) = 0;
-- ANNA_BCC = 0x0006;
-- ANNA_ASC = 0;
-- ANNA_LBS = 0x0089;
-- ANNA_SCR3 = 0x21A9;
-- ANNA_RFS3 = 0x8121;
-+ ANNA_ILBEN = 0;
-
-- nb85e_intc_disable_irqs ();
-+ V850E2_CSC(0) = 0x402F;
-+ V850E2_CSC(1) = 0x4000;
-+ V850E2_BPC = 0;
-+ V850E2_BSC = 0xAAAA;
-+ V850E2_BEC = 0;
-+
-+#if 0
-+ V850E2_BHC = 0xFFFF; /* icache all memory, dcache all */
-+#else
-+ V850E2_BHC = 0; /* cache no memory */
-+#endif
-+ V850E2_BCT(0) = 0xB088;
-+ V850E2_BCT(1) = 0x0008;
-+ V850E2_DWC(0) = 0x0027;
-+ V850E2_DWC(1) = 0;
-+ V850E2_BCC = 0x0006;
-+ V850E2_ASC = 0;
-+ V850E2_LBS = 0x0089;
-+ V850E2_SCR(3) = 0x21A9;
-+ V850E2_RFS(3) = 0x8121;
-+
-+ v850e_intc_disable_irqs ();
- }
-
- void __init mach_setup (char **cmdline)
- {
--#ifdef CONFIG_V850E_NB85E_UART_CONSOLE
-- nb85e_uart_cons_init (1);
--#endif
--
- ANNA_PORT_PM (LEDS_PORT) = 0; /* Make all LED pins output pins. */
- mach_tick = anna_led_tick;
- }
-@@ -95,12 +97,12 @@ void mach_gettimeofday (struct timespec
- void __init mach_sched_init (struct irqaction *timer_action)
- {
- /* Start hardware timer. */
-- nb85e_timer_d_configure (0, HZ);
-+ v850e_timer_d_configure (0, HZ);
- /* Install timer interrupt handler. */
- setup_irq (IRQ_INTCMD(0), timer_action);
- }
-
--static struct nb85e_intc_irq_init irq_inits[] = {
-+static struct v850e_intc_irq_init irq_inits[] = {
- { "IRQ", 0, NUM_MACH_IRQS, 1, 7 },
- { "PIN", IRQ_INTP(0), IRQ_INTP_NUM, 1, 4 },
- { "CCC", IRQ_INTCCC(0), IRQ_INTCCC_NUM, 1, 5 },
-@@ -118,7 +120,7 @@ static struct hw_interrupt_type hw_itype
-
- void __init mach_init_irqs (void)
- {
-- nb85e_intc_init_irq_types (irq_inits, hw_itypes);
-+ v850e_intc_init_irq_types (irq_inits, hw_itypes);
- }
-
- void machine_restart (char *__unused)
---- linux-2.6.0-test1/arch/v850/kernel/as85ep1.c 2003-06-14 12:18:34.000000000 -0700
-+++ 25/arch/v850/kernel/as85ep1.c 2003-07-19 17:03:49.000000000 -0700
-@@ -1,8 +1,8 @@
- /*
- * arch/v850/kernel/as85ep1.c -- AS85EP1 V850E evaluation chip/board
- *
-- * Copyright (C) 2002 NEC Corporation
-- * Copyright (C) 2002 Miles Bader <miles@gnu.org>
-+ * Copyright (C) 2002,03 NEC Electronics Corporation
-+ * Copyright (C) 2002,03 Miles Bader <miles@gnu.org>
- *
- * This file is subject to the terms and conditions of the GNU General
- * Public License. See the file COPYING in the main directory of this
-@@ -21,8 +21,8 @@
- #include <asm/machdep.h>
- #include <asm/atomic.h>
- #include <asm/page.h>
--#include <asm/nb85e_timer_d.h>
--#include <asm/nb85e_uart.h>
-+#include <asm/v850e_timer_d.h>
-+#include <asm/v850e_uart.h>
-
- #include "mach.h"
-
-@@ -90,20 +90,14 @@ void __init mach_early_init (void)
- AS85EP1_IRAMM = 0x0; /* \e$BFbB"L?Na\e(BRAM\e$B$O!V\e(Bread-mode\e$B!W$K$J$j$^$9\e(B */
- #endif /* !CONFIG_ROM_KERNEL */
-
-- nb85e_intc_disable_irqs ();
-+ v850e_intc_disable_irqs ();
- }
-
- void __init mach_setup (char **cmdline)
- {
--#ifdef CONFIG_V850E_NB85E_UART_CONSOLE
-- nb85e_uart_cons_init (1);
--#endif
--
- AS85EP1_PORT_PMC (LEDS_PORT) = 0; /* Make the LEDs port an I/O port. */
- AS85EP1_PORT_PM (LEDS_PORT) = 0; /* Make all the bits output pins. */
- mach_tick = as85ep1_led_tick;
--
-- ROOT_DEV = MKDEV (BLKMEM_MAJOR, 0);
- }
-
- void __init mach_get_physical_ram (unsigned long *ram_start,
-@@ -137,21 +131,21 @@ void __init mach_reserve_bootmem ()
- root_fs_image_end - root_fs_image_start);
- }
-
--void mach_gettimeofday (struct timeval *tv)
-+void mach_gettimeofday (struct timespec *tv)
- {
- tv->tv_sec = 0;
-- tv->tv_usec = 0;
-+ tv->tv_nsec = 0;
- }
-
- void __init mach_sched_init (struct irqaction *timer_action)
- {
- /* Start hardware timer. */
-- nb85e_timer_d_configure (0, HZ);
-+ v850e_timer_d_configure (0, HZ);
- /* Install timer interrupt handler. */
- setup_irq (IRQ_INTCMD(0), timer_action);
- }
-
--static struct nb85e_intc_irq_init irq_inits[] = {
-+static struct v850e_intc_irq_init irq_inits[] = {
- { "IRQ", 0, NUM_MACH_IRQS, 1, 7 },
- { "CCC", IRQ_INTCCC(0), IRQ_INTCCC_NUM, 1, 5 },
- { "CMD", IRQ_INTCMD(0), IRQ_INTCMD_NUM, 1, 5 },
-@@ -166,7 +160,7 @@ static struct hw_interrupt_type hw_itype
-
- void __init mach_init_irqs (void)
- {
-- nb85e_intc_init_irq_types (irq_inits, hw_itypes);
-+ v850e_intc_init_irq_types (irq_inits, hw_itypes);
- }
-
- void machine_restart (char *__unused)
---- linux-2.6.0-test1/arch/v850/kernel/fpga85e2c.c 2003-06-14 12:18:33.000000000 -0700
-+++ 25/arch/v850/kernel/fpga85e2c.c 2003-07-19 17:03:49.000000000 -0700
-@@ -2,8 +2,8 @@
- * arch/v850/kernel/fpga85e2c.h -- Machine-dependent defs for
- * FPGA implementation of V850E2/NA85E2C
- *
-- * Copyright (C) 2002 NEC Corporation
-- * Copyright (C) 2002 Miles Bader <miles@gnu.org>
-+ * Copyright (C) 2002,03 NEC Electronics Corporation
-+ * Copyright (C) 2002,03 Miles Bader <miles@gnu.org>
- *
- * This file is subject to the terms and conditions of the GNU General
- * Public License. See the file COPYING in the main directory of this
-@@ -46,7 +46,7 @@ void __init mach_early_init (void)
-
- /* Set bus sizes: CS0 32-bit, CS1 16-bit, CS7 8-bit,
- everything else 32-bit. */
-- BSC = 0x2AA6;
-+ V850E2_BSC = 0x2AA6;
- for (i = 2; i <= 6; i++)
- CSDEV(i) = 0; /* 32 bit */
-
-@@ -134,7 +134,7 @@ void machine_power_off (void)
- \f
- /* Interrupts */
-
--struct nb85e_intc_irq_init irq_inits[] = {
-+struct v850e_intc_irq_init irq_inits[] = {
- { "IRQ", 0, NUM_MACH_IRQS, 1, 7 },
- { "RPU", IRQ_RPU(0), IRQ_RPU_NUM, 1, 6 },
- { 0 }
-@@ -146,7 +146,7 @@ struct hw_interrupt_type hw_itypes[NUM_I
- /* Initialize interrupts. */
- void __init mach_init_irqs (void)
- {
-- nb85e_intc_init_irq_types (irq_inits, hw_itypes);
-+ v850e_intc_init_irq_types (irq_inits, hw_itypes);
- }
-
- \f
---- linux-2.6.0-test1/arch/v850/kernel/gbus_int.c 2003-07-13 21:44:34.000000000 -0700
-+++ 25/arch/v850/kernel/gbus_int.c 2003-07-19 17:03:49.000000000 -0700
-@@ -113,9 +113,7 @@ static irqreturn_t gbus_int_handle_irq (
- /* Only pay attention to enabled interrupts. */
- status &= enable;
- if (status) {
-- unsigned base_irq
-- = IRQ_GBUS_INT (w * GBUS_INT_BITS_PER_WORD);
-- irq = base_irq;
-+ irq = IRQ_GBUS_INT (w * GBUS_INT_BITS_PER_WORD);
- do {
- /* There's an active interrupt in word
- W, find out which one, and call its
-@@ -247,7 +245,7 @@ void __init gbus_int_init_irqs (void)
- /* First initialize the shared gint interrupts. */
- for (i = 0; i < NUM_USED_GINTS; i++) {
- unsigned gint = used_gint[i].gint;
-- struct nb85e_intc_irq_init gint_irq_init[2];
-+ struct v850e_intc_irq_init gint_irq_init[2];
-
- /* We initialize one GINT interrupt at a time. */
- gint_irq_init[0].name = "GINT";
-@@ -258,7 +256,7 @@ void __init gbus_int_init_irqs (void)
-
- gint_irq_init[1].name = 0; /* Terminate the vector. */
-
-- nb85e_intc_init_irq_types (gint_irq_init, gint_hw_itypes);
-+ v850e_intc_init_irq_types (gint_irq_init, gint_hw_itypes);
- }
-
- /* Then the GBUS interrupts. */
---- linux-2.6.0-test1/arch/v850/kernel/head.S 2003-06-14 12:17:58.000000000 -0700
-+++ 25/arch/v850/kernel/head.S 2003-07-19 17:03:49.000000000 -0700
-@@ -1,8 +1,8 @@
- /*
- * arch/v850/kernel/head.S -- Lowest-level startup code
- *
-- * Copyright (C) 2001,02 NEC Corporation
-- * Copyright (C) 2001,02 Miles Bader <miles@gnu.org>
-+ * Copyright (C) 2001,02,03 NEC Electronics Corporation
-+ * Copyright (C) 2001,02,03 Miles Bader <miles@gnu.org>
- *
- * This file is subject to the terms and conditions of the GNU General
- * Public License. See the file COPYING in the main directory of this
-@@ -115,7 +115,14 @@ C_ENTRY(start):
- jarl CSYM(memset), lp
- #endif
-
-- // Start Linux kernel.
-+ // What happens if the main kernel function returns (it shouldn't)
- mov hilo(CSYM(machine_halt)), lp
-- jr CSYM(start_kernel)
-+
-+ // Start the linux kernel. We use an indirect jump to get extra
-+ // range, because on some platforms this initial startup code
-+ // (and the associated platform-specific code in mach_early_init)
-+ // are located far away from the main kernel, e.g. so that they
-+ // can initialize RAM first and copy the kernel or something.
-+ mov hilo(CSYM(start_kernel)), r12
-+ jmp [r12]
- C_END(start)
---- linux-2.6.0-test1/arch/v850/kernel/highres_timer.c 2003-06-14 12:18:52.000000000 -0700
-+++ 25/arch/v850/kernel/highres_timer.c 2003-07-19 17:03:49.000000000 -0700
-@@ -1,8 +1,8 @@
- /*
- * arch/v850/kernel/highres_timer.c -- High resolution timing routines
- *
-- * Copyright (C) 2001,02 NEC Corporation
-- * Copyright (C) 2001,02 Miles Bader <miles@gnu.org>
-+ * Copyright (C) 2001,02,03 NEC Electronics Corporation
-+ * Copyright (C) 2001,02,03 Miles Bader <miles@gnu.org>
- *
- * This file is subject to the terms and conditions of the GNU General
- * Public License. See the file COPYING in the main directory of this
-@@ -12,7 +12,7 @@
- */
-
- #include <asm/system.h>
--#include <asm/nb85e_timer_d.h>
-+#include <asm/v850e_timer_d.h>
- #include <asm/highres_timer.h>
-
- #define HIGHRES_TIMER_USEC_SHIFT 12
-@@ -42,7 +42,7 @@ void highres_timer_slow_tick_irq (void)
-
- void highres_timer_reset (void)
- {
-- NB85E_TIMER_D_TMD (HIGHRES_TIMER_TIMER_D_UNIT) = 0;
-+ V850E_TIMER_D_TMD (HIGHRES_TIMER_TIMER_D_UNIT) = 0;
- HIGHRES_TIMER_SLOW_TICKS = 0;
- }
-
-@@ -51,12 +51,12 @@ void highres_timer_start (void)
- u32 fast_tick_rate;
-
- /* Start hardware timer. */
-- nb85e_timer_d_configure (HIGHRES_TIMER_TIMER_D_UNIT,
-+ v850e_timer_d_configure (HIGHRES_TIMER_TIMER_D_UNIT,
- HIGHRES_TIMER_SLOW_TICK_RATE);
-
- fast_tick_rate =
-- (NB85E_TIMER_D_BASE_FREQ
-- >> NB85E_TIMER_D_DIVLOG2 (HIGHRES_TIMER_TIMER_D_UNIT));
-+ (V850E_TIMER_D_BASE_FREQ
-+ >> V850E_TIMER_D_DIVLOG2 (HIGHRES_TIMER_TIMER_D_UNIT));
-
- /* The obvious way of calculating microseconds from fast ticks
- is to do:
-@@ -77,16 +77,16 @@ void highres_timer_start (void)
-
- /* Enable the interrupt (which is hardwired to this use), and
- give it the highest priority. */
-- NB85E_INTC_IC (IRQ_INTCMD (HIGHRES_TIMER_TIMER_D_UNIT)) = 0;
-+ V850E_INTC_IC (IRQ_INTCMD (HIGHRES_TIMER_TIMER_D_UNIT)) = 0;
- }
-
- void highres_timer_stop (void)
- {
- /* Stop the timer. */
-- NB85E_TIMER_D_TMCD (HIGHRES_TIMER_TIMER_D_UNIT) =
-- NB85E_TIMER_D_TMCD_CAE;
-+ V850E_TIMER_D_TMCD (HIGHRES_TIMER_TIMER_D_UNIT) =
-+ V850E_TIMER_D_TMCD_CAE;
- /* Disable its interrupt, just in case. */
-- nb85e_intc_disable_irq (IRQ_INTCMD (HIGHRES_TIMER_TIMER_D_UNIT));
-+ v850e_intc_disable_irq (IRQ_INTCMD (HIGHRES_TIMER_TIMER_D_UNIT));
- }
-
- inline void highres_timer_read_ticks (u32 *slow_ticks, u32 *fast_ticks)
-@@ -95,9 +95,9 @@ inline void highres_timer_read_ticks (u3
- u32 fast_ticks_1, fast_ticks_2, _slow_ticks;
-
- local_irq_save (flags);
-- fast_ticks_1 = NB85E_TIMER_D_TMD (HIGHRES_TIMER_TIMER_D_UNIT);
-+ fast_ticks_1 = V850E_TIMER_D_TMD (HIGHRES_TIMER_TIMER_D_UNIT);
- _slow_ticks = HIGHRES_TIMER_SLOW_TICKS;
-- fast_ticks_2 = NB85E_TIMER_D_TMD (HIGHRES_TIMER_TIMER_D_UNIT);
-+ fast_ticks_2 = V850E_TIMER_D_TMD (HIGHRES_TIMER_TIMER_D_UNIT);
- local_irq_restore (flags);
-
- if (fast_ticks_2 < fast_ticks_1)
---- linux-2.6.0-test1/arch/v850/kernel/intv.S 2003-06-14 12:18:22.000000000 -0700
-+++ 25/arch/v850/kernel/intv.S 2003-07-19 17:03:49.000000000 -0700
-@@ -16,7 +16,7 @@
- #include <asm/machdep.h>
- #include <asm/entry.h>
-
--#ifdef CONFIG_V850E_MA1_HIGHRES_TIMER
-+#ifdef CONFIG_V850E_HIGHRES_TIMER
- #include <asm/highres_timer.h>
- #endif
-
-@@ -59,7 +59,7 @@
- .section .intv.mach, "ax"
- .org 0x0
-
--#if defined (CONFIG_V850E_MA1_HIGHRES_TIMER) && defined (IRQ_INTCMD)
-+#if defined (CONFIG_V850E_HIGHRES_TIMER) && defined (IRQ_INTCMD)
-
- /* Interrupts before the highres timer interrupt. */
- .rept IRQ_INTCMD (HIGHRES_TIMER_TIMER_D_UNIT)
---- linux-2.6.0-test1/arch/v850/kernel/ma.c 2003-06-14 12:17:58.000000000 -0700
-+++ 25/arch/v850/kernel/ma.c 2003-07-19 17:03:49.000000000 -0700
-@@ -22,19 +22,19 @@
- #include <asm/atomic.h>
- #include <asm/page.h>
- #include <asm/machdep.h>
--#include <asm/nb85e_timer_d.h>
-+#include <asm/v850e_timer_d.h>
-
- #include "mach.h"
-
- void __init mach_sched_init (struct irqaction *timer_action)
- {
- /* Start hardware timer. */
-- nb85e_timer_d_configure (0, HZ);
-+ v850e_timer_d_configure (0, HZ);
- /* Install timer interrupt handler. */
- setup_irq (IRQ_INTCMD(0), timer_action);
- }
-
--static struct nb85e_intc_irq_init irq_inits[] = {
-+static struct v850e_intc_irq_init irq_inits[] = {
- { "IRQ", 0, NUM_MACH_IRQS, 1, 7 },
- { "CMD", IRQ_INTCMD(0), IRQ_INTCMD_NUM, 1, 5 },
- { "DMA", IRQ_INTDMA(0), IRQ_INTDMA_NUM, 1, 2 },
-@@ -51,7 +51,7 @@ static struct hw_interrupt_type hw_itype
- /* Initialize MA chip interrupts. */
- void __init ma_init_irqs (void)
- {
-- nb85e_intc_init_irq_types (irq_inits, hw_itypes);
-+ v850e_intc_init_irq_types (irq_inits, hw_itypes);
- }
-
- /* Called before configuring an on-chip UART. */
---- linux-2.6.0-test1/arch/v850/kernel/Makefile 2003-06-14 12:18:51.000000000 -0700
-+++ 25/arch/v850/kernel/Makefile 2003-07-19 17:03:49.000000000 -0700
-@@ -15,24 +15,26 @@ obj-y += intv.o entry.o process.o syscal
- signal.o irq.o mach.o ptrace.o bug.o
- obj-$(CONFIG_MODULES) += module.o v850_ksyms.o
- # chip-specific code
--obj-$(CONFIG_V850E_NB85E) += nb85e_intc.o
--obj-$(CONFIG_V850E_MA1) += ma.o nb85e_utils.o nb85e_timer_d.o
--obj-$(CONFIG_V850E_TEG) += teg.o nb85e_utils.o nb85e_cache.o \
-- nb85e_timer_d.o
--obj-$(CONFIG_V850E2_ANNA) += anna.o nb85e_intc.o nb85e_utils.o \
-- nb85e_timer_d.o
--obj-$(CONFIG_V850E_AS85EP1) += as85ep1.o nb85e_intc.o nb85e_utils.o \
-- nb85e_timer_d.o
-+obj-$(CONFIG_V850E_MA1) += ma.o
-+obj-$(CONFIG_V850E_ME2) += me2.o
-+obj-$(CONFIG_V850E_TEG) += teg.o
-+obj-$(CONFIG_V850E_AS85EP1) += as85ep1.o
-+obj-$(CONFIG_V850E2_ANNA) += anna.o
- # platform-specific code
- obj-$(CONFIG_V850E_SIM) += sim.o simcons.o
--obj-$(CONFIG_V850E2_SIM85E2C) += sim85e2c.o nb85e_intc.o memcons.o
--obj-$(CONFIG_V850E2_FPGA85E2C) += fpga85e2c.o nb85e_intc.o memcons.o
-+obj-$(CONFIG_V850E2_SIM85E2) += sim85e2.o memcons.o
-+obj-$(CONFIG_V850E2_FPGA85E2C) += fpga85e2c.o memcons.o
- obj-$(CONFIG_RTE_CB) += rte_cb.o rte_cb_leds.o
- obj-$(CONFIG_RTE_CB_MA1) += rte_ma1_cb.o
-+obj-$(CONFIG_RTE_CB_ME2) += rte_me2_cb.o
- obj-$(CONFIG_RTE_CB_NB85E) += rte_nb85e_cb.o
- obj-$(CONFIG_RTE_CB_MULTI) += rte_cb_multi.o
- obj-$(CONFIG_RTE_MB_A_PCI) += rte_mb_a_pci.o
- obj-$(CONFIG_RTE_GBUS_INT) += gbus_int.o
- # feature-specific code
--obj-$(CONFIG_V850E_MA1_HIGHRES_TIMER) += highres_timer.o
-+obj-$(CONFIG_V850E_INTC) += v850e_intc.o
-+obj-$(CONFIG_V850E_TIMER_D) += v850e_timer_d.o v850e_utils.o
-+obj-$(CONFIG_V850E_CACHE) += v850e_cache.o
-+obj-$(CONFIG_V850E2_CACHE) += v850e2_cache.o
-+obj-$(CONFIG_V850E_HIGHRES_TIMER) += highres_timer.o
- obj-$(CONFIG_PROC_FS) += procfs.o
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/arch/v850/kernel/me2.c 2003-07-19 17:03:49.000000000 -0700
-@@ -0,0 +1,74 @@
-+/*
-+ * arch/v850/kernel/me2.c -- V850E/ME2 chip-specific support
-+ *
-+ * Copyright (C) 2003 NEC Corporation
-+ * Copyright (C) 2003 Miles Bader <miles@gnu.org>
-+ *
-+ * This file is subject to the terms and conditions of the GNU General
-+ * Public License. See the file COPYING in the main directory of this
-+ * archive for more details.
-+ *
-+ * Written by Miles Bader <miles@gnu.org>
-+ */
-+
-+#include <linux/config.h>
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/mm.h>
-+#include <linux/swap.h>
-+#include <linux/bootmem.h>
-+#include <linux/irq.h>
-+
-+#include <asm/atomic.h>
-+#include <asm/page.h>
-+#include <asm/machdep.h>
-+#include <asm/v850e_timer_d.h>
-+
-+#include "mach.h"
-+
-+void __init mach_sched_init (struct irqaction *timer_action)
-+{
-+ /* Start hardware timer. */
-+ v850e_timer_d_configure (0, HZ);
-+ /* Install timer interrupt handler. */
-+ setup_irq (IRQ_INTCMD(0), timer_action);
-+}
-+
-+static struct v850e_intc_irq_init irq_inits[] = {
-+ { "IRQ", 0, NUM_CPU_IRQS, 1, 7 },
-+ { "INTP", IRQ_INTP(0), IRQ_INTP_NUM, 1, 5 },
-+ { "CMD", IRQ_INTCMD(0), IRQ_INTCMD_NUM, 1, 3 },
-+ { "UBTIRE", IRQ_INTUBTIRE(0), IRQ_INTUBTIRE_NUM, 5, 4 },
-+ { "UBTIR", IRQ_INTUBTIR(0), IRQ_INTUBTIR_NUM, 5, 4 },
-+ { "UBTIT", IRQ_INTUBTIT(0), IRQ_INTUBTIT_NUM, 5, 4 },
-+ { "UBTIF", IRQ_INTUBTIF(0), IRQ_INTUBTIF_NUM, 5, 4 },
-+ { "UBTITO", IRQ_INTUBTITO(0), IRQ_INTUBTITO_NUM, 5, 4 },
-+ { 0 }
-+};
-+#define NUM_IRQ_INITS ((sizeof irq_inits / sizeof irq_inits[0]) - 1)
-+
-+static struct hw_interrupt_type hw_itypes[NUM_IRQ_INITS];
-+
-+/* Initialize V850E/ME2 chip interrupts. */
-+void __init me2_init_irqs (void)
-+{
-+ v850e_intc_init_irq_types (irq_inits, hw_itypes);
-+}
-+
-+/* Called before configuring an on-chip UART. */
-+void me2_uart_pre_configure (unsigned chan, unsigned cflags, unsigned baud)
-+{
-+ if (chan == 0) {
-+ /* Specify that the relevent pins on the chip should do
-+ serial I/O, not direct I/O. */
-+ ME2_PORT1_PMC |= 0xC;
-+ /* Specify that we're using the UART, not the CSI device. */
-+ ME2_PORT1_PFC |= 0xC;
-+ } else if (chan == 1) {
-+ /* Specify that the relevent pins on the chip should do
-+ serial I/O, not direct I/O. */
-+ ME2_PORT2_PMC |= 0x6;
-+ /* Specify that we're using the UART, not the CSI device. */
-+ ME2_PORT2_PFC |= 0x6;
-+ }
-+}
---- linux-2.6.0-test1/arch/v850/kernel/nb85e_cache.c 2003-06-14 12:18:25.000000000 -0700
-+++ /dev/null 2002-08-30 16:31:37.000000000 -0700
-@@ -1,178 +0,0 @@
--/*
-- * arch/v850/kernel/nb85e_cache.c -- Cache control for NB85E_CACHE212 and
-- * NB85E_CACHE213 cache memories
-- *
-- * Copyright (C) 2003 NEC Electronics Corporation
-- * Copyright (C) 2003 Miles Bader <miles@gnu.org>
-- *
-- * This file is subject to the terms and conditions of the GNU General
-- * Public License. See the file COPYING in the main directory of this
-- * archive for more details.
-- *
-- * Written by Miles Bader <miles@gnu.org>
-- */
--
--#include <asm/entry.h>
--#include <asm/nb85e_cache.h>
--
--#define WAIT_UNTIL_CLEAR(value) while (value) {}
--
--/* Set caching params via the BHC and DCC registers. */
--void nb85e_cache_enable (u16 bhc, u16 dcc)
--{
-- unsigned long *r0_ram = (unsigned long *)R0_RAM_ADDR;
-- register u16 bhc_val asm ("r6") = bhc;
--
-- /* Configure data-cache. */
-- NB85E_CACHE_DCC = dcc;
--
-- /* Configure caching for various memory regions by writing the BHC
-- register. The documentation says that an instruction _cannot_
-- enable/disable caching for the memory region in which the
-- instruction itself exists; to work around this, we store
-- appropriate instructions into the on-chip RAM area (which is never
-- cached), and briefly jump there to do the work. */
-- r0_ram[0] = 0xf0720760; /* st.h r0, 0xfffff072[r0] */
-- r0_ram[1] = 0xf06a3760; /* st.h r6, 0xfffff06a[r0] */
-- r0_ram[2] = 0x5640006b; /* jmp [r11] */
-- asm ("mov hilo(1f), r11; jmp [%1]; 1:;"
-- :: "r" (bhc_val), "r" (R0_RAM_ADDR) : "r11");
--}
--
--static void clear_icache (void)
--{
-- /* 1. Read the instruction cache control register (ICC) and confirm
-- that bits 0 and 1 (TCLR0, TCLR1) are all cleared. */
-- WAIT_UNTIL_CLEAR (NB85E_CACHE_ICC & 0x3);
--
-- /* 2. Read the ICC register and confirm that bit 12 (LOCK0) is
-- cleared. Bit 13 of the ICC register is always cleared. */
-- WAIT_UNTIL_CLEAR (NB85E_CACHE_ICC & 0x1000);
--
-- /* 3. Set the TCLR0 and TCLR1 bits of the ICC register as follows,
-- when clearing way 0 and way 1 at the same time:
-- (a) Set the TCLR0 and TCLR1 bits.
-- (b) Read the TCLR0 and TCLR1 bits to confirm that these bits
-- are cleared.
-- (c) Perform (a) and (b) above again. */
-- NB85E_CACHE_ICC |= 0x3;
-- WAIT_UNTIL_CLEAR (NB85E_CACHE_ICC & 0x3);
-- /* Do it again. */
-- NB85E_CACHE_ICC |= 0x3;
-- WAIT_UNTIL_CLEAR (NB85E_CACHE_ICC & 0x3);
--}
--
--/* Flush or clear (or both) the data cache, depending on the value of FLAGS;
-- the procedure is the same for both, just the control bits used differ (and
-- both may be performed simultaneously). */
--static void dcache_op (unsigned short flags)
--{
-- /* 1. Read the data cache control register (DCC) and confirm that bits
-- 0, 1, 4, and 5 (DC00, DC01, DC04, DC05) are all cleared. */
-- WAIT_UNTIL_CLEAR (NB85E_CACHE_DCC & 0x33);
--
-- /* 2. Clear DCC register bit 12 (DC12), bit 13 (DC13), or both
-- depending on the way for which tags are to be cleared. */
-- NB85E_CACHE_DCC &= ~0xC000;
--
-- /* 3. Set DCC register bit 0 (DC00), bit 1 (DC01) or both depending on
-- the way for which tags are to be cleared.
-- ...
-- Set DCC register bit 4 (DC04), bit 5 (DC05), or both depending
-- on the way to be data flushed. */
-- NB85E_CACHE_DCC |= flags;
--
-- /* 4. Read DCC register bit DC00, DC01 [DC04, DC05], or both depending
-- on the way for which tags were cleared [flushed] and confirm
-- that that bit is cleared. */
-- WAIT_UNTIL_CLEAR (NB85E_CACHE_DCC & flags);
--}
--
--/* Flushes the contents of the dcache to memory. */
--static inline void flush_dcache (void)
--{
-- /* We only need to do something if in write-back mode. */
-- if (NB85E_CACHE_DCC & 0x0400)
-- dcache_op (0x30);
--}
--
--/* Flushes the contents of the dcache to memory, and then clears it. */
--static inline void clear_dcache (void)
--{
-- /* We only need to do something if the dcache is enabled. */
-- if (NB85E_CACHE_DCC & 0x0C00)
-- dcache_op (0x33);
--}
--
--/* Clears the dcache without flushing to memory first. */
--static inline void clear_dcache_no_flush (void)
--{
-- /* We only need to do something if the dcache is enabled. */
-- if (NB85E_CACHE_DCC & 0x0C00)
-- dcache_op (0x3);
--}
--
--static inline void cache_exec_after_store (void)
--{
-- flush_dcache ();
-- clear_icache ();
--}
--
--\f
--/* Exported functions. */
--
--void inline nb85e_cache_flush_all (void)
--{
-- clear_icache ();
-- clear_dcache ();
--}
--
--void nb85e_cache_flush_mm (struct mm_struct *mm)
--{
-- /* nothing */
--}
--
--void nb85e_cache_flush_range (struct mm_struct *mm,
-- unsigned long start, unsigned long end)
--{
-- /* nothing */
--}
--
--void nb85e_cache_flush_page (struct vm_area_struct *vma,
-- unsigned long page_addr)
--{
-- /* nothing */
--}
--
--void nb85e_cache_flush_dcache_page (struct page *page)
--{
-- /* nothing */
--}
--
--void nb85e_cache_flush_icache (void)
--{
-- cache_exec_after_store ();
--}
--
--void nb85e_cache_flush_icache_range (unsigned long start, unsigned long end)
--{
-- cache_exec_after_store ();
--}
--
--void nb85e_cache_flush_icache_page (struct vm_area_struct *vma,
-- struct page *page)
--{
-- cache_exec_after_store ();
--}
--
--void nb85e_cache_flush_icache_user_range (struct vm_area_struct *vma,
-- struct page *page,
-- unsigned long adr, int len)
--{
-- cache_exec_after_store ();
--}
--
--void nb85e_cache_flush_sigtramp (unsigned long addr)
--{
-- cache_exec_after_store ();
--}
---- linux-2.6.0-test1/arch/v850/kernel/nb85e_intc.c 2003-06-14 12:18:06.000000000 -0700
-+++ /dev/null 2002-08-30 16:31:37.000000000 -0700
-@@ -1,104 +0,0 @@
--/*
-- * arch/v850/kernel/nb85e_intc.c -- NB85E cpu core interrupt controller (INTC)
-- *
-- * Copyright (C) 2001,02,03 NEC Electronics Corporation
-- * Copyright (C) 2001,02,03 Miles Bader <miles@gnu.org>
-- *
-- * This file is subject to the terms and conditions of the GNU General
-- * Public License. See the file COPYING in the main directory of this
-- * archive for more details.
-- *
-- * Written by Miles Bader <miles@gnu.org>
-- */
--
--#include <linux/kernel.h>
--#include <linux/init.h>
--#include <linux/irq.h>
--
--#include <asm/nb85e_intc.h>
--
--static void irq_nop (unsigned irq) { }
--
--static unsigned nb85e_intc_irq_startup (unsigned irq)
--{
-- nb85e_intc_clear_pending_irq (irq);
-- nb85e_intc_enable_irq (irq);
-- return 0;
--}
--
--static void nb85e_intc_end_irq (unsigned irq)
--{
-- unsigned long psw, temp;
--
-- /* Clear the highest-level bit in the In-service priority register
-- (ISPR), to allow this interrupt (or another of the same or
-- lesser priority) to happen again.
--
-- The `reti' instruction normally does this automatically when the
-- PSW bits EP and NP are zero, but we can't always rely on reti
-- being used consistently to return after an interrupt (another
-- process can be scheduled, for instance, which can delay the
-- associated reti for a long time, or this process may be being
-- single-stepped, which uses the `dbret' instruction to return
-- from the kernel).
--
-- We also set the PSW EP bit, which prevents reti from also
-- trying to modify the ISPR itself. */
--
-- /* Get PSW and disable interrupts. */
-- asm volatile ("stsr psw, %0; di" : "=r" (psw));
-- /* We don't want to do anything for NMIs (they don't use the ISPR). */
-- if (! (psw & 0xC0)) {
-- /* Transition to `trap' state, so that an eventual real
-- reti instruction won't modify the ISPR. */
-- psw |= 0x40;
-- /* Fake an interrupt return, which automatically clears the
-- appropriate bit in the ISPR. */
-- asm volatile ("mov hilo(1f), %0;"
-- "ldsr %0, eipc; ldsr %1, eipsw;"
-- "reti;"
-- "1:"
-- : "=&r" (temp) : "r" (psw));
-- }
--}
--
--/* Initialize HW_IRQ_TYPES for INTC-controlled irqs described in array
-- INITS (which is terminated by an entry with the name field == 0). */
--void __init nb85e_intc_init_irq_types (struct nb85e_intc_irq_init *inits,
-- struct hw_interrupt_type *hw_irq_types)
--{
-- struct nb85e_intc_irq_init *init;
-- for (init = inits; init->name; init++) {
-- unsigned i;
-- struct hw_interrupt_type *hwit = hw_irq_types++;
--
-- hwit->typename = init->name;
--
-- hwit->startup = nb85e_intc_irq_startup;
-- hwit->shutdown = nb85e_intc_disable_irq;
-- hwit->enable = nb85e_intc_enable_irq;
-- hwit->disable = nb85e_intc_disable_irq;
-- hwit->ack = irq_nop;
-- hwit->end = nb85e_intc_end_irq;
--
-- /* Initialize kernel IRQ infrastructure for this interrupt. */
-- init_irq_handlers(init->base, init->num, init->interval, hwit);
--
-- /* Set the interrupt priorities. */
-- for (i = 0; i < init->num; i++) {
-- unsigned irq = init->base + i * init->interval;
--
-- /* If the interrupt is currently enabled (all
-- interrupts are initially disabled), then
-- assume whoever enabled it has set things up
-- properly, and avoid messing with it. */
-- if (! nb85e_intc_irq_enabled (irq))
-- /* This write also (1) disables the
-- interrupt, and (2) clears any pending
-- interrupts. */
-- NB85E_INTC_IC (irq)
-- = (NB85E_INTC_IC_PR (init->priority)
-- | NB85E_INTC_IC_MK);
-- }
-- }
--}
---- linux-2.6.0-test1/arch/v850/kernel/nb85e_timer_d.c 2003-06-14 12:18:21.000000000 -0700
-+++ /dev/null 2002-08-30 16:31:37.000000000 -0700
-@@ -1,54 +0,0 @@
--/*
-- * include/asm-v850/nb85e_timer_d.c -- `Timer D' component often used
-- * with the NB85E cpu core
-- *
-- * Copyright (C) 2001,02 NEC Corporation
-- * Copyright (C) 2001,02 Miles Bader <miles@gnu.org>
-- *
-- * This file is subject to the terms and conditions of the GNU General
-- * Public License. See the file COPYING in the main directory of this
-- * archive for more details.
-- *
-- * Written by Miles Bader <miles@gnu.org>
-- */
--
--#include <linux/kernel.h>
--
--#include <asm/nb85e_utils.h>
--#include <asm/nb85e_timer_d.h>
--
--/* Start interval timer TIMER (0-3). The timer will issue the
-- corresponding INTCMD interrupt RATE times per second.
-- This function does not enable the interrupt. */
--void nb85e_timer_d_configure (unsigned timer, unsigned rate)
--{
-- unsigned divlog2, count;
--
-- /* Calculate params for timer. */
-- if (! calc_counter_params (
-- NB85E_TIMER_D_BASE_FREQ, rate,
-- NB85E_TIMER_D_TMCD_CS_MIN, NB85E_TIMER_D_TMCD_CS_MAX, 16,
-- &divlog2, &count))
-- printk (KERN_WARNING
-- "Cannot find interval timer %d setting suitable"
-- " for rate of %dHz.\n"
-- "Using rate of %dHz instead.\n",
-- timer, rate,
-- (NB85E_TIMER_D_BASE_FREQ >> divlog2) >> 16);
--
-- /* Do the actual hardware timer initialization: */
--
-- /* Enable timer. */
-- NB85E_TIMER_D_TMCD(timer) = NB85E_TIMER_D_TMCD_CAE;
-- /* Set clock divider. */
-- NB85E_TIMER_D_TMCD(timer)
-- = NB85E_TIMER_D_TMCD_CAE
-- | NB85E_TIMER_D_TMCD_CS(divlog2);
-- /* Set timer compare register. */
-- NB85E_TIMER_D_CMD(timer) = count;
-- /* Start counting. */
-- NB85E_TIMER_D_TMCD(timer)
-- = NB85E_TIMER_D_TMCD_CAE
-- | NB85E_TIMER_D_TMCD_CS(divlog2)
-- | NB85E_TIMER_D_TMCD_CE;
--}
---- linux-2.6.0-test1/arch/v850/kernel/nb85e_utils.c 2003-06-14 12:17:59.000000000 -0700
-+++ /dev/null 2002-08-30 16:31:37.000000000 -0700
-@@ -1,65 +0,0 @@
--/*
-- * include/asm-v850/nb85e_utils.h -- Utility functions associated with
-- * the NB85E cpu core
-- *
-- * Copyright (C) 2001,02 NEC Corporation
-- * Copyright (C) 2001,02 Miles Bader <miles@gnu.org>
-- *
-- * This file is subject to the terms and conditions of the GNU General
-- * Public License. See the file COPYING in the main directory of this
-- * archive for more details.
-- *
-- * Written by Miles Bader <miles@gnu.org>
-- */
--
--/* Note: these functions are often associated with the N85E cpu core,
-- but not always, which is why they're not in `nb85e.c'. */
--
--#include <asm/nb85e_utils.h>
--
--/* Calculate counter clock-divider and count values to attain the
-- desired frequency RATE from the base frequency BASE_FREQ. The
-- counter is expected to have a clock-divider, which can divide the
-- system cpu clock by a power of two value from MIN_DIVLOG2 to
-- MAX_DIV_LOG2, and a word-size of COUNTER_SIZE bits (the counter
-- counts up and resets whenever it's equal to the compare register,
-- generating an interrupt or whatever when it does so). The returned
-- values are: *DIVLOG2 -- log2 of the desired clock divider and *COUNT
-- -- the counter compare value to use. Returns true if it was possible
-- to find a reasonable value, otherwise false (and the other return
-- values will be set to be as good as possible). */
--int calc_counter_params (unsigned long base_freq,
-- unsigned long rate,
-- unsigned min_divlog2, unsigned max_divlog2,
-- unsigned counter_size,
-- unsigned *divlog2, unsigned *count)
--{
-- unsigned _divlog2;
-- int ok = 0;
--
-- /* Find the lowest clock divider setting that can represent RATE. */
-- for (_divlog2 = min_divlog2; _divlog2 <= max_divlog2; _divlog2++) {
-- /* Minimum interrupt rate possible using this divider. */
-- unsigned min_int_rate
-- = (base_freq >> _divlog2) >> counter_size;
--
-- if (min_int_rate <= rate) {
-- /* This setting is the highest resolution
-- setting that's slow enough enough to attain
-- RATE interrupts per second, so use it. */
-- ok = 1;
-- break;
-- }
-- }
--
-- if (_divlog2 > max_divlog2)
-- /* Can't find correct setting. */
-- _divlog2 = max_divlog2;
--
-- if (divlog2)
-- *divlog2 = _divlog2;
-- if (count)
-- *count = ((base_freq >> _divlog2) + rate/2) / rate;
--
-- return ok;
--}
---- linux-2.6.0-test1/arch/v850/kernel/rte_cb.c 2003-06-14 12:17:57.000000000 -0700
-+++ 25/arch/v850/kernel/rte_cb.c 2003-07-19 17:03:49.000000000 -0700
-@@ -17,7 +17,7 @@
- #include <linux/fs.h>
-
- #include <asm/machdep.h>
--#include <asm/nb85e_uart.h>
-+#include <asm/v850e_uart.h>
-
- #include "mach.h"
-
-@@ -34,7 +34,7 @@ extern void multi_init (void);
- \f
- void __init rte_cb_early_init (void)
- {
-- nb85e_intc_disable_irqs ();
-+ v850e_intc_disable_irqs ();
-
- #ifdef CONFIG_RTE_CB_MULTI
- multi_init ();
-@@ -43,6 +43,7 @@ void __init rte_cb_early_init (void)
-
- void __init mach_setup (char **cmdline)
- {
-+#ifdef CONFIG_RTE_MB_A_PCI
- /* Probe for Mother-A, and print a message if we find it. */
- *(volatile unsigned long *)MB_A_SRAM_ADDR = 0xDEADBEEF;
- if (*(volatile unsigned long *)MB_A_SRAM_ADDR == 0xDEADBEEF) {
-@@ -52,23 +53,11 @@ void __init mach_setup (char **cmdline)
- " NEC SolutionGear/Midas lab"
- " RTE-MOTHER-A motherboard\n");
- }
--
--#if defined (CONFIG_V850E_NB85E_UART_CONSOLE) && !defined (CONFIG_TIME_BOOTUP)
-- nb85e_uart_cons_init (0);
--#endif
-+#endif /* CONFIG_RTE_MB_A_PCI */
-
- mach_tick = led_tick;
- }
-
--#ifdef CONFIG_TIME_BOOTUP
--void initial_boot_done (void)
--{
--#ifdef CONFIG_V850E_NB85E_UART_CONSOLE
-- nb85e_uart_cons_init (0);
--#endif
--}
--#endif
--
- void machine_restart (char *__unused)
- {
- #ifdef CONFIG_RESET_GUARD
-@@ -194,6 +183,7 @@ static struct hw_interrupt_type gbus_hw_
-
- #endif /* CONFIG_RTE_GBUS_INT */
-
-+
- void __init rte_cb_init_irqs (void)
- {
- #ifdef CONFIG_RTE_GBUS_INT
---- linux-2.6.0-test1/arch/v850/kernel/rte_ma1_cb.c 2003-06-14 12:18:30.000000000 -0700
-+++ 25/arch/v850/kernel/rte_ma1_cb.c 2003-07-19 17:03:49.000000000 -0700
-@@ -20,7 +20,7 @@
- #include <asm/page.h>
- #include <asm/ma1.h>
- #include <asm/rte_ma1_cb.h>
--#include <asm/nb85e_timer_c.h>
-+#include <asm/v850e_timer_c.h>
-
- #include "mach.h"
-
-@@ -89,14 +89,14 @@ void __init mach_init_irqs (void)
- rte_cb_init_irqs ();
-
- /* Use falling-edge-sensitivity for interrupts . */
-- NB85E_TIMER_C_SESC (0) &= ~0xC;
-- NB85E_TIMER_C_SESC (1) &= ~0xF;
-+ V850E_TIMER_C_SESC (0) &= ~0xC;
-+ V850E_TIMER_C_SESC (1) &= ~0xF;
-
- /* INTP000-INTP011 are shared with `Timer C', so we have to set
- up Timer C to pass them through as raw interrupts. */
- for (tc = 0; tc < 2; tc++)
- /* Turn on the timer. */
-- NB85E_TIMER_C_TMCC0 (tc) |= NB85E_TIMER_C_TMCC0_CAE;
-+ V850E_TIMER_C_TMCC0 (tc) |= V850E_TIMER_C_TMCC0_CAE;
-
- /* Make sure the relevant port0/port1 pins are assigned
- interrupt duty. We used INTP001-INTP011 (don't screw with
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/arch/v850/kernel/rte_me2_cb.c 2003-07-19 17:03:49.000000000 -0700
-@@ -0,0 +1,308 @@
-+/*
-+ * arch/v850/kernel/rte_me2_cb.c -- Midas labs RTE-V850E/ME2-CB board
-+ *
-+ * Copyright (C) 2001,02,03 NEC Electronics Corporation
-+ * Copyright (C) 2001,02,03 Miles Bader <miles@gnu.org>
-+ *
-+ * This file is subject to the terms and conditions of the GNU General
-+ * Public License. See the file COPYING in the main directory of this
-+ * archive for more details.
-+ *
-+ * Written by Miles Bader <miles@gnu.org>
-+ */
-+
-+#include <linux/config.h>
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/bootmem.h>
-+#include <linux/irq.h>
-+#include <linux/fs.h>
-+#include <linux/major.h>
-+#include <linux/sched.h>
-+#include <linux/delay.h>
-+
-+#include <asm/atomic.h>
-+#include <asm/page.h>
-+#include <asm/me2.h>
-+#include <asm/rte_me2_cb.h>
-+#include <asm/machdep.h>
-+#include <asm/v850e_intc.h>
-+#include <asm/v850e_cache.h>
-+#include <asm/irq.h>
-+
-+#include "mach.h"
-+
-+extern unsigned long *_intv_start;
-+extern unsigned long *_intv_end;
-+
-+/* LED access routines. */
-+extern unsigned read_leds (int pos, char *buf, int len);
-+extern unsigned write_leds (int pos, const char *buf, int len);
-+
-+
-+/* SDRAM are almost contiguous (with a small hole in between;
-+ see mach_reserve_bootmem for details), so just use both as one big area. */
-+#define RAM_START SDRAM_ADDR
-+#define RAM_END (SDRAM_ADDR + SDRAM_SIZE)
-+
-+
-+void __init mach_get_physical_ram (unsigned long *ram_start,
-+ unsigned long *ram_len)
-+{
-+ *ram_start = RAM_START;
-+ *ram_len = RAM_END - RAM_START;
-+}
-+
-+void __init mach_reserve_bootmem ()
-+{
-+ extern char _root_fs_image_start, _root_fs_image_end;
-+ u32 root_fs_image_start = (u32)&_root_fs_image_start;
-+ u32 root_fs_image_end = (u32)&_root_fs_image_end;
-+
-+ /* Reserve the memory used by the root filesystem image if it's
-+ in RAM. */
-+ if (root_fs_image_start >= RAM_START && root_fs_image_start < RAM_END)
-+ reserve_bootmem (root_fs_image_start,
-+ root_fs_image_end - root_fs_image_start);
-+}
-+
-+void mach_gettimeofday (struct timespec *tv)
-+{
-+ tv->tv_sec = 0;
-+ tv->tv_nsec = 0;
-+}
-+
-+/* Called before configuring an on-chip UART. */
-+void rte_me2_cb_uart_pre_configure (unsigned chan,
-+ unsigned cflags, unsigned baud)
-+{
-+ /* The RTE-V850E/ME2-CB connects some general-purpose I/O
-+ pins on the CPU to the RTS/CTS lines of UARTB channel 0's
-+ serial connection.
-+ I/O pins P21 and P22 are RTS and CTS respectively. */
-+ if (chan == 0) {
-+ /* Put P21 & P22 in I/O port mode. */
-+ ME2_PORT2_PMC &= ~0x6;
-+ /* Make P21 and output, and P22 an input. */
-+ ME2_PORT2_PM = (ME2_PORT2_PM & ~0xC) | 0x4;
-+ }
-+
-+ me2_uart_pre_configure (chan, cflags, baud);
-+}
-+
-+void __init mach_init_irqs (void)
-+{
-+ /* Initialize interrupts. */
-+ me2_init_irqs ();
-+ rte_me2_cb_init_irqs ();
-+}
-+
-+#ifdef CONFIG_ROM_KERNEL
-+/* Initialization for kernel in ROM. */
-+static inline rom_kernel_init (void)
-+{
-+ /* If the kernel is in ROM, we have to copy any initialized data
-+ from ROM into RAM. */
-+ extern unsigned long _data_load_start, _sdata, _edata;
-+ register unsigned long *src = &_data_load_start;
-+ register unsigned long *dst = &_sdata, *end = &_edata;
-+
-+ while (dst != end)
-+ *dst++ = *src++;
-+}
-+#endif /* CONFIG_ROM_KERNEL */
-+
-+static void install_interrupt_vectors (void)
-+{
-+ unsigned long *p1, *p2;
-+
-+ ME2_IRAMM = 0x03; /* V850E/ME2 iRAM write mode */
-+
-+ /* vector copy to iRAM */
-+ p1 = (unsigned long *)0; /* v85x vector start */
-+ p2 = (unsigned long *)&_intv_start;
-+ while (p2 < (unsigned long *)&_intv_end)
-+ *p1++ = *p2++;
-+
-+ ME2_IRAMM = 0x00; /* V850E/ME2 iRAM read mode */
-+}
-+\f
-+/* CompactFlash */
-+
-+static void cf_power_on (void)
-+{
-+ /* CF card detected? */
-+ if (CB_CF_STS0 & 0x0030)
-+ return;
-+
-+ CB_CF_REG0 = 0x0002; /* reest on */
-+ mdelay (10);
-+ CB_CF_REG0 = 0x0003; /* power on */
-+ mdelay (10);
-+ CB_CF_REG0 = 0x0001; /* reset off */
-+ mdelay (10);
-+}
-+
-+static void cf_power_off (void)
-+{
-+ CB_CF_REG0 = 0x0003; /* power on */
-+ mdelay (10);
-+ CB_CF_REG0 = 0x0002; /* reest on */
-+ mdelay (10);
-+}
-+
-+void __init mach_early_init (void)
-+{
-+ install_interrupt_vectors ();
-+
-+ /* CS1 SDRAM instruction cache enable */
-+ v850e_cache_enable (0x04, 0x03, 0);
-+
-+ rte_cb_early_init ();
-+
-+ /* CompactFlash power on */
-+ cf_power_on ();
-+
-+#if defined (CONFIG_ROM_KERNEL)
-+ rom_kernel_init ();
-+#endif
-+}
-+
-+\f
-+/* RTE-V850E/ME2-CB Programmable Interrupt Controller. */
-+
-+static struct cb_pic_irq_init cb_pic_irq_inits[] = {
-+ { "CB_EXTTM0", IRQ_CB_EXTTM0, 1, 1, 6 },
-+ { "CB_EXTSIO", IRQ_CB_EXTSIO, 1, 1, 6 },
-+ { "CB_TOVER", IRQ_CB_TOVER, 1, 1, 6 },
-+ { "CB_GINT0", IRQ_CB_GINT0, 1, 1, 6 },
-+ { "CB_USB", IRQ_CB_USB, 1, 1, 6 },
-+ { "CB_LANC", IRQ_CB_LANC, 1, 1, 6 },
-+ { "CB_USB_VBUS_ON", IRQ_CB_USB_VBUS_ON, 1, 1, 6 },
-+ { "CB_USB_VBUS_OFF", IRQ_CB_USB_VBUS_OFF, 1, 1, 6 },
-+ { "CB_EXTTM1", IRQ_CB_EXTTM1, 1, 1, 6 },
-+ { "CB_EXTTM2", IRQ_CB_EXTTM2, 1, 1, 6 },
-+ { 0 }
-+};
-+#define NUM_CB_PIC_IRQ_INITS \
-+ ((sizeof cb_pic_irq_inits / sizeof cb_pic_irq_inits[0]) - 1)
-+
-+static struct hw_interrupt_type cb_pic_hw_itypes[NUM_CB_PIC_IRQ_INITS];
-+static unsigned char cb_pic_active_irqs = 0;
-+
-+void __init rte_me2_cb_init_irqs (void)
-+{
-+ cb_pic_init_irq_types (cb_pic_irq_inits, cb_pic_hw_itypes);
-+
-+ /* Initalize on board PIC1 (not PIC0) enable */
-+ CB_PIC_INT0M = 0x0000;
-+ CB_PIC_INT1M = 0x0000;
-+ CB_PIC_INTR = 0x0000;
-+ CB_PIC_INTEN |= CB_PIC_INT1EN;
-+
-+ ME2_PORT2_PMC |= 0x08; /* INTP23/SCK1 mode */
-+ ME2_PORT2_PFC &= ~0x08; /* INTP23 mode */
-+ ME2_INTR(2) &= ~0x08; /* INTP23 falling-edge detect */
-+ ME2_INTF(2) &= ~0x08; /* " */
-+
-+ rte_cb_init_irqs (); /* gbus &c */
-+}
-+
-+
-+/* Enable interrupt handling for interrupt IRQ. */
-+void cb_pic_enable_irq (unsigned irq)
-+{
-+ CB_PIC_INT1M |= 1 << (irq - CB_PIC_BASE_IRQ);
-+}
-+
-+void cb_pic_disable_irq (unsigned irq)
-+{
-+ CB_PIC_INT1M &= ~(1 << (irq - CB_PIC_BASE_IRQ));
-+}
-+
-+void cb_pic_shutdown_irq (unsigned irq)
-+{
-+ cb_pic_disable_irq (irq);
-+
-+ if (--cb_pic_active_irqs == 0)
-+ free_irq (IRQ_CB_PIC, 0);
-+
-+ CB_PIC_INT1M &= ~(1 << (irq - CB_PIC_BASE_IRQ));
-+}
-+
-+static void cb_pic_handle_irq (int irq, void *dev_id, struct pt_regs *regs)
-+{
-+ unsigned status = CB_PIC_INTR;
-+ unsigned enable = CB_PIC_INT1M;
-+
-+ /* Only pay attention to enabled interrupts. */
-+ status &= enable;
-+
-+ CB_PIC_INTEN &= ~CB_PIC_INT1EN;
-+
-+ if (status) {
-+ unsigned mask = 1;
-+
-+ irq = CB_PIC_BASE_IRQ;
-+ do {
-+ /* There's an active interrupt, find out which one,
-+ and call its handler. */
-+ while (! (status & mask)) {
-+ irq++;
-+ mask <<= 1;
-+ }
-+ status &= ~mask;
-+
-+ CB_PIC_INTR = mask;
-+
-+ /* Recursively call handle_irq to handle it. */
-+ handle_irq (irq, regs);
-+ } while (status);
-+ }
-+
-+ CB_PIC_INTEN |= CB_PIC_INT1EN;
-+}
-+
-+
-+static void irq_nop (unsigned irq) { }
-+
-+static unsigned cb_pic_startup_irq (unsigned irq)
-+{
-+ int rval;
-+
-+ if (cb_pic_active_irqs == 0) {
-+ rval = request_irq (IRQ_CB_PIC, cb_pic_handle_irq,
-+ SA_INTERRUPT, "cb_pic_handler", 0);
-+ if (rval != 0)
-+ return rval;
-+ }
-+
-+ cb_pic_active_irqs++;
-+
-+ cb_pic_enable_irq (irq);
-+
-+ return 0;
-+}
-+
-+/* Initialize HW_IRQ_TYPES for INTC-controlled irqs described in array
-+ INITS (which is terminated by an entry with the name field == 0). */
-+void __init cb_pic_init_irq_types (struct cb_pic_irq_init *inits,
-+ struct hw_interrupt_type *hw_irq_types)
-+{
-+ struct cb_pic_irq_init *init;
-+ for (init = inits; init->name; init++) {
-+ struct hw_interrupt_type *hwit = hw_irq_types++;
-+
-+ hwit->typename = init->name;
-+
-+ hwit->startup = cb_pic_startup_irq;
-+ hwit->shutdown = cb_pic_shutdown_irq;
-+ hwit->enable = cb_pic_enable_irq;
-+ hwit->disable = cb_pic_disable_irq;
-+ hwit->ack = irq_nop;
-+ hwit->end = irq_nop;
-+
-+ /* Initialize kernel IRQ infrastructure for this interrupt. */
-+ init_irq_handlers(init->base, init->num, init->interval, hwit);
-+ }
-+}
---- linux-2.6.0-test1/arch/v850/kernel/rte_nb85e_cb.c 2003-06-14 12:18:34.000000000 -0700
-+++ 25/arch/v850/kernel/rte_nb85e_cb.c 2003-07-19 17:03:49.000000000 -0700
-@@ -21,7 +21,7 @@
-
- #include <asm/atomic.h>
- #include <asm/page.h>
--#include <asm/nb85e.h>
-+#include <asm/v850e.h>
- #include <asm/rte_nb85e_cb.h>
-
- #include "mach.h"
-@@ -41,7 +41,7 @@ void __init mach_early_init (void)
-
- Unfortunately, the dcache seems to be buggy, so we only use the
- icache for now. */
-- nb85e_cache_enable (0x0040 /* BHC */, 0x0000 /* DCC */);
-+ v850e_cache_enable (0x0040 /*BHC*/, 0x0003 /*ICC*/, 0x0000 /*DCC*/);
-
- rte_cb_early_init ();
- }
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/arch/v850/kernel/sim85e2.c 2003-07-19 17:03:49.000000000 -0700
-@@ -0,0 +1,211 @@
-+/*
-+ * arch/v850/kernel/sim85e2.c -- Machine-specific stuff for
-+ * V850E2 RTL simulator
-+ *
-+ * Copyright (C) 2002,03 NEC Electronics Corporation
-+ * Copyright (C) 2002,03 Miles Bader <miles@gnu.org>
-+ *
-+ * This file is subject to the terms and conditions of the GNU General
-+ * Public License. See the file COPYING in the main directory of this
-+ * archive for more details.
-+ *
-+ * Written by Miles Bader <miles@gnu.org>
-+ */
-+
-+#include <linux/config.h>
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/mm.h>
-+#include <linux/swap.h>
-+#include <linux/bootmem.h>
-+#include <linux/irq.h>
-+
-+#include <asm/atomic.h>
-+#include <asm/page.h>
-+#include <asm/machdep.h>
-+
-+#include "mach.h"
-+
-+
-+/* There are 4 possible areas we can use:
-+
-+ IRAM (1MB) is fast for instruction fetches, but slow for data
-+ DRAM (1020KB) is fast for data, but slow for instructions
-+ ERAM is cached, so should be fast for both insns and data
-+ SDRAM is external DRAM, similar to ERAM
-+*/
-+
-+#define INIT_MEMC_FOR_SDRAM
-+#define USE_SDRAM_AREA
-+#define KERNEL_IN_SDRAM_AREA
-+
-+#define DCACHE_MODE V850E2_CACHE_BTSC_DCM_WT
-+/*#define DCACHE_MODE V850E2_CACHE_BTSC_DCM_WB_ALLOC*/
-+
-+#ifdef USE_SDRAM_AREA
-+#define RAM_START SDRAM_ADDR
-+#define RAM_END (SDRAM_ADDR + SDRAM_SIZE)
-+#else
-+/* When we use DRAM, we need to account for the fact that the end of it is
-+ used for R0_RAM. */
-+#define RAM_START DRAM_ADDR
-+#define RAM_END R0_RAM_ADDR
-+#endif
-+
-+
-+extern void memcons_setup (void);
-+
-+
-+#ifdef KERNEL_IN_SDRAM_AREA
-+#define EARLY_INIT_SECTION_ATTR __attribute__ ((section (".early.text")))
-+#else
-+#define EARLY_INIT_SECTION_ATTR __init
-+#endif
-+
-+void EARLY_INIT_SECTION_ATTR mach_early_init (void)
-+{
-+ extern int panic_timeout;
-+
-+ /* The sim85e2 simulator tracks `undefined' values, so to make
-+ debugging easier, we begin by zeroing out all otherwise
-+ undefined registers. This is not strictly necessary.
-+
-+ The registers we zero are:
-+ Every GPR except:
-+ stack-pointer (r3)
-+ task-pointer (r16)
-+ our return addr (r31)
-+ Every system register (SPR) that we know about except for
-+ the PSW (SPR 5), which we zero except for the
-+ disable-interrupts bit.
-+ */
-+
-+ /* GPRs */
-+ asm volatile (" mov r0, r1 ; mov r0, r2 ");
-+ asm volatile ("mov r0, r4 ; mov r0, r5 ; mov r0, r6 ; mov r0, r7 ");
-+ asm volatile ("mov r0, r8 ; mov r0, r9 ; mov r0, r10; mov r0, r11");
-+ asm volatile ("mov r0, r12; mov r0, r13; mov r0, r14; mov r0, r15");
-+ asm volatile (" mov r0, r17; mov r0, r18; mov r0, r19");
-+ asm volatile ("mov r0, r20; mov r0, r21; mov r0, r22; mov r0, r23");
-+ asm volatile ("mov r0, r24; mov r0, r25; mov r0, r26; mov r0, r27");
-+ asm volatile ("mov r0, r28; mov r0, r29; mov r0, r30");
-+
-+ /* SPRs */
-+ asm volatile ("ldsr r0, 0; ldsr r0, 1; ldsr r0, 2; ldsr r0, 3");
-+ asm volatile ("ldsr r0, 4");
-+ asm volatile ("addi 0x20, r0, r1; ldsr r1, 5"); /* PSW */
-+ asm volatile ("ldsr r0, 16; ldsr r0, 17; ldsr r0, 18; ldsr r0, 19");
-+ asm volatile ("ldsr r0, 20");
-+
-+
-+#ifdef INIT_MEMC_FOR_SDRAM
-+ /* Settings for SDRAM controller. */
-+ V850E2_VSWC = 0x0042;
-+ V850E2_BSC = 0x9286;
-+ V850E2_BCT(0) = 0xb000; /* was: 0 */
-+ V850E2_BCT(1) = 0x000b;
-+ V850E2_ASC = 0;
-+ V850E2_LBS = 0xa9aa; /* was: 0xaaaa */
-+ V850E2_LBC(0) = 0;
-+ V850E2_LBC(1) = 0; /* was: 0x3 */
-+ V850E2_BCC = 0;
-+ V850E2_RFS(4) = 0x800a; /* was: 0xf109 */
-+ V850E2_SCR(4) = 0x2091; /* was: 0x20a1 */
-+ V850E2_RFS(3) = 0x800c;
-+ V850E2_SCR(3) = 0x20a1;
-+ V850E2_DWC(0) = 0;
-+ V850E2_DWC(1) = 0;
-+#endif
-+
-+#if 0
-+#ifdef CONFIG_V850E2_SIM85E2S
-+ /* Turn on the caches. */
-+ V850E2_CACHE_BTSC = V850E2_CACHE_BTSC_ICM | DCACHE_MODE;
-+ V850E2_BHC = 0x1010;
-+#elif CONFIG_V850E2_SIM85E2C
-+ V850E2_CACHE_BTSC |= (V850E2_CACHE_BTSC_ICM | V850E2_CACHE_BTSC_DCM0);
-+ V850E2_BUSM_BHC = 0xFFFF;
-+#endif
-+#else
-+ V850E2_BHC = 0;
-+#endif
-+
-+ /* Don't stop the simulator at `halt' instructions. */
-+ SIM85E2_NOTHAL = 1;
-+
-+ /* Ensure that the simulator halts on a panic, instead of going
-+ into an infinite loop inside the panic function. */
-+ panic_timeout = -1;
-+}
-+
-+void __init mach_setup (char **cmdline)
-+{
-+ memcons_setup ();
-+}
-+
-+void mach_get_physical_ram (unsigned long *ram_start, unsigned long *ram_len)
-+{
-+ *ram_start = RAM_START;
-+ *ram_len = RAM_END - RAM_START;
-+}
-+
-+void __init mach_reserve_bootmem ()
-+{
-+ extern char _root_fs_image_start, _root_fs_image_end;
-+ u32 root_fs_image_start = (u32)&_root_fs_image_start;
-+ u32 root_fs_image_end = (u32)&_root_fs_image_end;
-+
-+ /* Reserve the memory used by the root filesystem image if it's
-+ in RAM. */
-+ if (root_fs_image_end > root_fs_image_start
-+ && root_fs_image_start >= RAM_START
-+ && root_fs_image_start < RAM_END)
-+ reserve_bootmem (root_fs_image_start,
-+ root_fs_image_end - root_fs_image_start);
-+}
-+
-+void __init mach_sched_init (struct irqaction *timer_action)
-+{
-+ /* The simulator actually cycles through all interrupts
-+ periodically. We just pay attention to IRQ0, which gives us
-+ 1/64 the rate of the periodic interrupts. */
-+ setup_irq (0, timer_action);
-+}
-+
-+void mach_gettimeofday (struct timespec *tv)
-+{
-+ tv->tv_sec = 0;
-+ tv->tv_nsec = 0;
-+}
-+\f
-+/* Interrupts */
-+
-+struct v850e_intc_irq_init irq_inits[] = {
-+ { "IRQ", 0, NUM_MACH_IRQS, 1, 7 },
-+ { 0 }
-+};
-+struct hw_interrupt_type hw_itypes[1];
-+
-+/* Initialize interrupts. */
-+void __init mach_init_irqs (void)
-+{
-+ v850e_intc_init_irq_types (irq_inits, hw_itypes);
-+}
-+\f
-+
-+void machine_halt (void) __attribute__ ((noreturn));
-+void machine_halt (void)
-+{
-+ SIM85E2_SIMFIN = 0; /* Halt immediately. */
-+ for (;;) {}
-+}
-+
-+void machine_restart (char *__unused)
-+{
-+ machine_halt ();
-+}
-+
-+void machine_power_off (void)
-+{
-+ machine_halt ();
-+}
---- linux-2.6.0-test1/arch/v850/kernel/sim85e2c.c 2003-06-14 12:18:22.000000000 -0700
-+++ /dev/null 2002-08-30 16:31:37.000000000 -0700
-@@ -1,145 +0,0 @@
--/*
-- * arch/v850/kernel/sim85e2c.c -- Machine-specific stuff for
-- * V850E2 RTL simulator
-- *
-- * Copyright (C) 2002 NEC Corporation
-- * Copyright (C) 2002 Miles Bader <miles@gnu.org>
-- *
-- * This file is subject to the terms and conditions of the GNU General
-- * Public License. See the file COPYING in the main directory of this
-- * archive for more details.
-- *
-- * Written by Miles Bader <miles@gnu.org>
-- */
--
--#include <linux/config.h>
--#include <linux/kernel.h>
--#include <linux/init.h>
--#include <linux/mm.h>
--#include <linux/swap.h>
--#include <linux/bootmem.h>
--#include <linux/irq.h>
--
--#include <asm/atomic.h>
--#include <asm/page.h>
--#include <asm/machdep.h>
--
--#include "mach.h"
--
--extern void memcons_setup (void);
--
--
--void __init mach_early_init (void)
--{
-- extern int panic_timeout;
--
-- /* Don't stop the simulator at `halt' instructions. */
-- NOTHAL = 1;
--
-- /* The sim85e2c simulator tracks `undefined' values, so to make
-- debugging easier, we begin by zeroing out all otherwise
-- undefined registers. This is not strictly necessary.
--
-- The registers we zero are:
-- Every GPR except:
-- stack-pointer (r3)
-- task-pointer (r16)
-- our return addr (r31)
-- Every system register (SPR) that we know about except for
-- the PSW (SPR 5), which we zero except for the
-- disable-interrupts bit.
-- */
--
-- /* GPRs */
-- asm volatile (" mov r0, r1 ; mov r0, r2 ");
-- asm volatile ("mov r0, r4 ; mov r0, r5 ; mov r0, r6 ; mov r0, r7 ");
-- asm volatile ("mov r0, r8 ; mov r0, r9 ; mov r0, r10; mov r0, r11");
-- asm volatile ("mov r0, r12; mov r0, r13; mov r0, r14; mov r0, r15");
-- asm volatile (" mov r0, r17; mov r0, r18; mov r0, r19");
-- asm volatile ("mov r0, r20; mov r0, r21; mov r0, r22; mov r0, r23");
-- asm volatile ("mov r0, r24; mov r0, r25; mov r0, r26; mov r0, r27");
-- asm volatile ("mov r0, r28; mov r0, r29; mov r0, r30");
--
-- /* SPRs */
-- asm volatile ("ldsr r0, 0; ldsr r0, 1; ldsr r0, 2; ldsr r0, 3");
-- asm volatile ("ldsr r0, 4");
-- asm volatile ("addi 0x20, r0, r1; ldsr r1, 5"); /* PSW */
-- asm volatile ("ldsr r0, 16; ldsr r0, 17; ldsr r0, 18; ldsr r0, 19");
-- asm volatile ("ldsr r0, 20");
--
-- /* Turn on the caches. */
-- NA85E2C_CACHE_BTSC
-- |= (NA85E2C_CACHE_BTSC_ICM | NA85E2C_CACHE_BTSC_DCM0);
-- NA85E2C_BUSM_BHC = 0xFFFF;
--
-- /* Ensure that the simulator halts on a panic, instead of going
-- into an infinite loop inside the panic function. */
-- panic_timeout = -1;
--}
--
--void __init mach_setup (char **cmdline)
--{
-- memcons_setup ();
--}
--
--void mach_get_physical_ram (unsigned long *ram_start, unsigned long *ram_len)
--{
-- /* There are 3 possible areas we can use:
-- IRAM (1MB) is fast for instruction fetches, but slow for data
-- DRAM (1020KB) is fast for data, but slow for instructions
-- ERAM is cached, so should be fast for both insns and data,
-- _but_ currently only supports write-through caching, so
-- writes are slow.
-- Since there's really no area that's good for general kernel
-- use, we use DRAM -- it won't be good for user programs
-- (which will be loaded into kernel allocated memory), but
-- currently we're more concerned with testing the kernel. */
-- *ram_start = DRAM_ADDR;
-- *ram_len = R0_RAM_ADDR - DRAM_ADDR;
--}
--
--void __init mach_sched_init (struct irqaction *timer_action)
--{
-- /* The simulator actually cycles through all interrupts
-- periodically. We just pay attention to IRQ0, which gives us
-- 1/64 the rate of the periodic interrupts. */
-- setup_irq (0, timer_action);
--}
--
--void mach_gettimeofday (struct timespec *tv)
--{
-- tv->tv_sec = 0;
-- tv->tv_nsec = 0;
--}
--\f
--/* Interrupts */
--
--struct nb85e_intc_irq_init irq_inits[] = {
-- { "IRQ", 0, NUM_MACH_IRQS, 1, 7 },
-- { 0 }
--};
--struct hw_interrupt_type hw_itypes[1];
--
--/* Initialize interrupts. */
--void __init mach_init_irqs (void)
--{
-- nb85e_intc_init_irq_types (irq_inits, hw_itypes);
--}
--\f
--
--void machine_halt (void) __attribute__ ((noreturn));
--void machine_halt (void)
--{
-- SIMFIN = 0; /* Halt immediately. */
-- for (;;) {}
--}
--
--void machine_restart (char *__unused)
--{
-- machine_halt ();
--}
--
--void machine_power_off (void)
--{
-- machine_halt ();
--}
---- linux-2.6.0-test1/arch/v850/kernel/teg.c 2003-06-14 12:18:25.000000000 -0700
-+++ 25/arch/v850/kernel/teg.c 2003-07-19 17:03:49.000000000 -0700
-@@ -22,7 +22,7 @@
- #include <asm/atomic.h>
- #include <asm/page.h>
- #include <asm/machdep.h>
--#include <asm/nb85e_timer_d.h>
-+#include <asm/v850e_timer_d.h>
-
- #include "mach.h"
-
-@@ -31,12 +31,12 @@ void __init mach_sched_init (struct irqa
- /* Select timer interrupt instead of external pin. */
- TEG_ISS |= 0x1;
- /* Start hardware timer. */
-- nb85e_timer_d_configure (0, HZ);
-+ v850e_timer_d_configure (0, HZ);
- /* Install timer interrupt handler. */
- setup_irq (IRQ_INTCMD(0), timer_action);
- }
-
--static struct nb85e_intc_irq_init irq_inits[] = {
-+static struct v850e_intc_irq_init irq_inits[] = {
- { "IRQ", 0, NUM_CPU_IRQS, 1, 7 },
- { "CMD", IRQ_INTCMD(0), IRQ_INTCMD_NUM, 1, 5 },
- { "SER", IRQ_INTSER(0), IRQ_INTSER_NUM, 1, 3 },
-@@ -51,7 +51,7 @@ static struct hw_interrupt_type hw_itype
- /* Initialize MA chip interrupts. */
- void __init teg_init_irqs (void)
- {
-- nb85e_intc_init_irq_types (irq_inits, hw_itypes);
-+ v850e_intc_init_irq_types (irq_inits, hw_itypes);
- }
-
- /* Called before configuring an on-chip UART. */
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/arch/v850/kernel/v850e2_cache.c 2003-07-19 17:03:49.000000000 -0700
-@@ -0,0 +1,127 @@
-+/*
-+ * arch/v850/kernel/v850e2_cache.c -- Cache control for V850E2 cache
-+ * memories
-+ *
-+ * Copyright (C) 2003 NEC Electronics Corporation
-+ * Copyright (C) 2003 Miles Bader <miles@gnu.org>
-+ *
-+ * This file is subject to the terms and conditions of the GNU General
-+ * Public License. See the file COPYING in the main directory of this
-+ * archive for more details.
-+ *
-+ * Written by Miles Bader <miles@gnu.org>
-+ */
-+
-+#include <linux/mm.h>
-+
-+#include <asm/v850e2_cache.h>
-+
-+/* Cache operations we can do. The encoding corresponds directly to the
-+ value we need to write into the COPR register. */
-+enum cache_op {
-+ OP_SYNC_IF_DIRTY = V850E2_CACHE_COPR_CFC(0), /* 000 */
-+ OP_SYNC_IF_VALID = V850E2_CACHE_COPR_CFC(1), /* 001 */
-+ OP_SYNC_IF_VALID_AND_CLEAR = V850E2_CACHE_COPR_CFC(3), /* 011 */
-+ OP_WAY_CLEAR = V850E2_CACHE_COPR_CFC(4), /* 100 */
-+ OP_FILL = V850E2_CACHE_COPR_CFC(5), /* 101 */
-+ OP_CLEAR = V850E2_CACHE_COPR_CFC(6), /* 110 */
-+ OP_CREATE_DIRTY = V850E2_CACHE_COPR_CFC(7) /* 111 */
-+};
-+
-+/* Which cache to use. This encoding also corresponds directly to the
-+ value we need to write into the COPR register. */
-+enum cache {
-+ ICACHE = 0,
-+ DCACHE = V850E2_CACHE_COPR_LBSL
-+};
-+
-+/* Returns ADDR rounded down to the beginning of its cache-line. */
-+#define CACHE_LINE_ADDR(addr) \
-+ ((addr) & ~(V850E2_CACHE_LINE_SIZE - 1))
-+/* Returns END_ADDR rounded up to the `limit' of its cache-line. */
-+#define CACHE_LINE_END_ADDR(end_addr) \
-+ CACHE_LINE_ADDR(end_addr + (V850E2_CACHE_LINE_SIZE - 1))
-+
-+\f
-+/* Low-level cache ops. */
-+
-+/* Apply cache-op OP to all entries in CACHE. */
-+static inline void cache_op_all (enum cache_op op, enum cache cache)
-+{
-+ int cmd = op | cache | V850E2_CACHE_COPR_WSLE | V850E2_CACHE_COPR_STRT;
-+
-+ if (op != OP_WAY_CLEAR) {
-+ /* The WAY_CLEAR operation does the whole way, but other
-+ ops take begin-index and count params; we just indicate
-+ the entire cache. */
-+ V850E2_CACHE_CADL = 0;
-+ V850E2_CACHE_CADH = 0;
-+ V850E2_CACHE_CCNT = V850E2_CACHE_WAY_SIZE - 1;
-+ }
-+
-+ V850E2_CACHE_COPR = cmd | V850E2_CACHE_COPR_WSL(0); /* way 0 */
-+ V850E2_CACHE_COPR = cmd | V850E2_CACHE_COPR_WSL(1); /* way 1 */
-+ V850E2_CACHE_COPR = cmd | V850E2_CACHE_COPR_WSL(2); /* way 2 */
-+ V850E2_CACHE_COPR = cmd | V850E2_CACHE_COPR_WSL(3); /* way 3 */
-+}
-+
-+/* Apply cache-op OP to all entries in CACHE covering addresses ADDR
-+ through ADDR+LEN. */
-+static inline void cache_op_range (enum cache_op op, u32 addr, u32 len,
-+ enum cache cache)
-+{
-+ u32 start = CACHE_LINE_ADDR (addr);
-+ u32 end = CACHE_LINE_END_ADDR (addr + len);
-+ u32 num_lines = (end - start) >> V850E2_CACHE_LINE_SIZE_BITS;
-+
-+ V850E2_CACHE_CADL = start & 0xFFFF;
-+ V850E2_CACHE_CADH = start >> 16;
-+ V850E2_CACHE_CCNT = num_lines - 1;
-+
-+ V850E2_CACHE_COPR = op | cache | V850E2_CACHE_COPR_STRT;
-+}
-+
-+\f
-+/* High-level ops. */
-+
-+static void cache_exec_after_store_all (void)
-+{
-+ cache_op_all (OP_SYNC_IF_DIRTY, DCACHE);
-+ cache_op_all (OP_WAY_CLEAR, ICACHE);
-+}
-+
-+static void cache_exec_after_store_range (u32 start, u32 len)
-+{
-+ cache_op_range (OP_SYNC_IF_DIRTY, start, len, DCACHE);
-+ cache_op_range (OP_CLEAR, start, len, ICACHE);
-+}
-+
-+\f
-+/* Exported functions. */
-+
-+void flush_icache (void)
-+{
-+ cache_exec_after_store_all ();
-+}
-+
-+void flush_icache_range (unsigned long start, unsigned long end)
-+{
-+ cache_exec_after_store_range (start, end - start);
-+}
-+
-+void flush_icache_page (struct vm_area_struct *vma, struct page *page)
-+{
-+ cache_exec_after_store_range (page_to_virt (page), PAGE_SIZE);
-+}
-+
-+void flush_icache_user_range (struct vm_area_struct *vma, struct page *page,
-+ unsigned long addr, int len)
-+{
-+ cache_exec_after_store_range (addr, len);
-+}
-+
-+void flush_cache_sigtramp (unsigned long addr)
-+{
-+ /* For the exact size, see signal.c, but 16 bytes should be enough. */
-+ cache_exec_after_store_range (addr, 16);
-+}
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/arch/v850/kernel/v850e_cache.c 2003-07-19 17:03:49.000000000 -0700
-@@ -0,0 +1,173 @@
-+/*
-+ * arch/v850/kernel/v850e_cache.c -- Cache control for V850E cache memories
-+ *
-+ * Copyright (C) 2003 NEC Electronics Corporation
-+ * Copyright (C) 2003 Miles Bader <miles@gnu.org>
-+ *
-+ * This file is subject to the terms and conditions of the GNU General
-+ * Public License. See the file COPYING in the main directory of this
-+ * archive for more details.
-+ *
-+ * Written by Miles Bader <miles@gnu.org>
-+ */
-+
-+/* This file implements cache control for the rather simple cache used on
-+ some V850E CPUs, specifically the NB85E/TEG CPU-core and the V850E/ME2
-+ CPU. V850E2 processors have their own (better) cache
-+ implementation. */
-+
-+#include <asm/entry.h>
-+#include <asm/v850e_cache.h>
-+
-+#define WAIT_UNTIL_CLEAR(value) while (value) {}
-+
-+/* Set caching params via the BHC and DCC registers. */
-+void v850e_cache_enable (u16 bhc, u16 icc, u16 dcc)
-+{
-+ unsigned long *r0_ram = (unsigned long *)R0_RAM_ADDR;
-+ register u16 bhc_val asm ("r6") = bhc;
-+
-+ /* Read the instruction cache control register (ICC) and confirm
-+ that bits 0 and 1 (TCLR0, TCLR1) are all cleared. */
-+ WAIT_UNTIL_CLEAR (V850E_CACHE_ICC & 0x3);
-+ V850E_CACHE_ICC = icc;
-+
-+#ifdef V850E_CACHE_DCC
-+ /* Configure data-cache. */
-+ V850E_CACHE_DCC = dcc;
-+#endif /* V850E_CACHE_DCC */
-+
-+ /* Configure caching for various memory regions by writing the BHC
-+ register. The documentation says that an instruction _cannot_
-+ enable/disable caching for the memory region in which the
-+ instruction itself exists; to work around this, we store
-+ appropriate instructions into the on-chip RAM area (which is never
-+ cached), and briefly jump there to do the work. */
-+#ifdef V850E_CACHE_WRITE_IBS
-+ *r0_ram++ = 0xf0720760; /* st.h r0, 0xfffff072[r0] */
-+#endif
-+ *r0_ram++ = 0xf06a3760; /* st.h r6, 0xfffff06a[r0] */
-+ *r0_ram = 0x5640006b; /* jmp [r11] */
-+
-+ asm ("mov hilo(1f), r11; jmp [%1]; 1:;"
-+ :: "r" (bhc_val), "r" (R0_RAM_ADDR) : "r11");
-+}
-+
-+static void clear_icache (void)
-+{
-+ /* 1. Read the instruction cache control register (ICC) and confirm
-+ that bits 0 and 1 (TCLR0, TCLR1) are all cleared. */
-+ WAIT_UNTIL_CLEAR (V850E_CACHE_ICC & 0x3);
-+
-+ /* 2. Read the ICC register and confirm that bit 12 (LOCK0) is
-+ cleared. Bit 13 of the ICC register is always cleared. */
-+ WAIT_UNTIL_CLEAR (V850E_CACHE_ICC & 0x1000);
-+
-+ /* 3. Set the TCLR0 and TCLR1 bits of the ICC register as follows,
-+ when clearing way 0 and way 1 at the same time:
-+ (a) Set the TCLR0 and TCLR1 bits.
-+ (b) Read the TCLR0 and TCLR1 bits to confirm that these bits
-+ are cleared.
-+ (c) Perform (a) and (b) above again. */
-+ V850E_CACHE_ICC |= 0x3;
-+ WAIT_UNTIL_CLEAR (V850E_CACHE_ICC & 0x3);
-+
-+#ifdef V850E_CACHE_REPEAT_ICC_WRITE
-+ /* Do it again. */
-+ V850E_CACHE_ICC |= 0x3;
-+ WAIT_UNTIL_CLEAR (V850E_CACHE_ICC & 0x3);
-+#endif
-+}
-+
-+#ifdef V850E_CACHE_DCC
-+/* Flush or clear (or both) the data cache, depending on the value of FLAGS;
-+ the procedure is the same for both, just the control bits used differ (and
-+ both may be performed simultaneously). */
-+static void dcache_op (unsigned short flags)
-+{
-+ /* 1. Read the data cache control register (DCC) and confirm that bits
-+ 0, 1, 4, and 5 (DC00, DC01, DC04, DC05) are all cleared. */
-+ WAIT_UNTIL_CLEAR (V850E_CACHE_DCC & 0x33);
-+
-+ /* 2. Clear DCC register bit 12 (DC12), bit 13 (DC13), or both
-+ depending on the way for which tags are to be cleared. */
-+ V850E_CACHE_DCC &= ~0xC000;
-+
-+ /* 3. Set DCC register bit 0 (DC00), bit 1 (DC01) or both depending on
-+ the way for which tags are to be cleared.
-+ ...
-+ Set DCC register bit 4 (DC04), bit 5 (DC05), or both depending
-+ on the way to be data flushed. */
-+ V850E_CACHE_DCC |= flags;
-+
-+ /* 4. Read DCC register bit DC00, DC01 [DC04, DC05], or both depending
-+ on the way for which tags were cleared [flushed] and confirm
-+ that that bit is cleared. */
-+ WAIT_UNTIL_CLEAR (V850E_CACHE_DCC & flags);
-+}
-+#endif /* V850E_CACHE_DCC */
-+
-+/* Flushes the contents of the dcache to memory. */
-+static inline void flush_dcache (void)
-+{
-+#ifdef V850E_CACHE_DCC
-+ /* We only need to do something if in write-back mode. */
-+ if (V850E_CACHE_DCC & 0x0400)
-+ dcache_op (0x30);
-+#endif /* V850E_CACHE_DCC */
-+}
-+
-+/* Flushes the contents of the dcache to memory, and then clears it. */
-+static inline void clear_dcache (void)
-+{
-+#ifdef V850E_CACHE_DCC
-+ /* We only need to do something if the dcache is enabled. */
-+ if (V850E_CACHE_DCC & 0x0C00)
-+ dcache_op (0x33);
-+#endif /* V850E_CACHE_DCC */
-+}
-+
-+/* Clears the dcache without flushing to memory first. */
-+static inline void clear_dcache_no_flush (void)
-+{
-+#ifdef V850E_CACHE_DCC
-+ /* We only need to do something if the dcache is enabled. */
-+ if (V850E_CACHE_DCC & 0x0C00)
-+ dcache_op (0x3);
-+#endif /* V850E_CACHE_DCC */
-+}
-+
-+static inline void cache_exec_after_store (void)
-+{
-+ flush_dcache ();
-+ clear_icache ();
-+}
-+
-+\f
-+/* Exported functions. */
-+
-+void flush_icache (void)
-+{
-+ cache_exec_after_store ();
-+}
-+
-+void flush_icache_range (unsigned long start, unsigned long end)
-+{
-+ cache_exec_after_store ();
-+}
-+
-+void flush_icache_page (struct vm_area_struct *vma, struct page *page)
-+{
-+ cache_exec_after_store ();
-+}
-+
-+void flush_icache_user_range (struct vm_area_struct *vma, struct page *page,
-+ unsigned long adr, int len)
-+{
-+ cache_exec_after_store ();
-+}
-+
-+void flush_cache_sigtramp (unsigned long addr)
-+{
-+ cache_exec_after_store ();
-+}
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/arch/v850/kernel/v850e_intc.c 2003-07-19 17:03:49.000000000 -0700
-@@ -0,0 +1,104 @@
-+/*
-+ * arch/v850/kernel/v850e_intc.c -- V850E interrupt controller (INTC)
-+ *
-+ * Copyright (C) 2001,02,03 NEC Electronics Corporation
-+ * Copyright (C) 2001,02,03 Miles Bader <miles@gnu.org>
-+ *
-+ * This file is subject to the terms and conditions of the GNU General
-+ * Public License. See the file COPYING in the main directory of this
-+ * archive for more details.
-+ *
-+ * Written by Miles Bader <miles@gnu.org>
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/irq.h>
-+
-+#include <asm/v850e_intc.h>
-+
-+static void irq_nop (unsigned irq) { }
-+
-+static unsigned v850e_intc_irq_startup (unsigned irq)
-+{
-+ v850e_intc_clear_pending_irq (irq);
-+ v850e_intc_enable_irq (irq);
-+ return 0;
-+}
-+
-+static void v850e_intc_end_irq (unsigned irq)
-+{
-+ unsigned long psw, temp;
-+
-+ /* Clear the highest-level bit in the In-service priority register
-+ (ISPR), to allow this interrupt (or another of the same or
-+ lesser priority) to happen again.
-+
-+ The `reti' instruction normally does this automatically when the
-+ PSW bits EP and NP are zero, but we can't always rely on reti
-+ being used consistently to return after an interrupt (another
-+ process can be scheduled, for instance, which can delay the
-+ associated reti for a long time, or this process may be being
-+ single-stepped, which uses the `dbret' instruction to return
-+ from the kernel).
-+
-+ We also set the PSW EP bit, which prevents reti from also
-+ trying to modify the ISPR itself. */
-+
-+ /* Get PSW and disable interrupts. */
-+ asm volatile ("stsr psw, %0; di" : "=r" (psw));
-+ /* We don't want to do anything for NMIs (they don't use the ISPR). */
-+ if (! (psw & 0xC0)) {
-+ /* Transition to `trap' state, so that an eventual real
-+ reti instruction won't modify the ISPR. */
-+ psw |= 0x40;
-+ /* Fake an interrupt return, which automatically clears the
-+ appropriate bit in the ISPR. */
-+ asm volatile ("mov hilo(1f), %0;"
-+ "ldsr %0, eipc; ldsr %1, eipsw;"
-+ "reti;"
-+ "1:"
-+ : "=&r" (temp) : "r" (psw));
-+ }
-+}
-+
-+/* Initialize HW_IRQ_TYPES for INTC-controlled irqs described in array
-+ INITS (which is terminated by an entry with the name field == 0). */
-+void __init v850e_intc_init_irq_types (struct v850e_intc_irq_init *inits,
-+ struct hw_interrupt_type *hw_irq_types)
-+{
-+ struct v850e_intc_irq_init *init;
-+ for (init = inits; init->name; init++) {
-+ unsigned i;
-+ struct hw_interrupt_type *hwit = hw_irq_types++;
-+
-+ hwit->typename = init->name;
-+
-+ hwit->startup = v850e_intc_irq_startup;
-+ hwit->shutdown = v850e_intc_disable_irq;
-+ hwit->enable = v850e_intc_enable_irq;
-+ hwit->disable = v850e_intc_disable_irq;
-+ hwit->ack = irq_nop;
-+ hwit->end = v850e_intc_end_irq;
-+
-+ /* Initialize kernel IRQ infrastructure for this interrupt. */
-+ init_irq_handlers(init->base, init->num, init->interval, hwit);
-+
-+ /* Set the interrupt priorities. */
-+ for (i = 0; i < init->num; i++) {
-+ unsigned irq = init->base + i * init->interval;
-+
-+ /* If the interrupt is currently enabled (all
-+ interrupts are initially disabled), then
-+ assume whoever enabled it has set things up
-+ properly, and avoid messing with it. */
-+ if (! v850e_intc_irq_enabled (irq))
-+ /* This write also (1) disables the
-+ interrupt, and (2) clears any pending
-+ interrupts. */
-+ V850E_INTC_IC (irq)
-+ = (V850E_INTC_IC_PR (init->priority)
-+ | V850E_INTC_IC_MK);
-+ }
-+ }
-+}
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/arch/v850/kernel/v850e_timer_d.c 2003-07-19 17:03:49.000000000 -0700
-@@ -0,0 +1,54 @@
-+/*
-+ * include/asm-v850/v850e_timer_d.c -- `Timer D' component often used
-+ * with V850E CPUs
-+ *
-+ * Copyright (C) 2001,02,03 NEC Electronics Corporation
-+ * Copyright (C) 2001,02,03 Miles Bader <miles@gnu.org>
-+ *
-+ * This file is subject to the terms and conditions of the GNU General
-+ * Public License. See the file COPYING in the main directory of this
-+ * archive for more details.
-+ *
-+ * Written by Miles Bader <miles@gnu.org>
-+ */
-+
-+#include <linux/kernel.h>
-+
-+#include <asm/v850e_utils.h>
-+#include <asm/v850e_timer_d.h>
-+
-+/* Start interval timer TIMER (0-3). The timer will issue the
-+ corresponding INTCMD interrupt RATE times per second.
-+ This function does not enable the interrupt. */
-+void v850e_timer_d_configure (unsigned timer, unsigned rate)
-+{
-+ unsigned divlog2, count;
-+
-+ /* Calculate params for timer. */
-+ if (! calc_counter_params (
-+ V850E_TIMER_D_BASE_FREQ, rate,
-+ V850E_TIMER_D_TMCD_CS_MIN, V850E_TIMER_D_TMCD_CS_MAX, 16,
-+ &divlog2, &count))
-+ printk (KERN_WARNING
-+ "Cannot find interval timer %d setting suitable"
-+ " for rate of %dHz.\n"
-+ "Using rate of %dHz instead.\n",
-+ timer, rate,
-+ (V850E_TIMER_D_BASE_FREQ >> divlog2) >> 16);
-+
-+ /* Do the actual hardware timer initialization: */
-+
-+ /* Enable timer. */
-+ V850E_TIMER_D_TMCD(timer) = V850E_TIMER_D_TMCD_CAE;
-+ /* Set clock divider. */
-+ V850E_TIMER_D_TMCD(timer)
-+ = V850E_TIMER_D_TMCD_CAE
-+ | V850E_TIMER_D_TMCD_CS(divlog2);
-+ /* Set timer compare register. */
-+ V850E_TIMER_D_CMD(timer) = count;
-+ /* Start counting. */
-+ V850E_TIMER_D_TMCD(timer)
-+ = V850E_TIMER_D_TMCD_CAE
-+ | V850E_TIMER_D_TMCD_CS(divlog2)
-+ | V850E_TIMER_D_TMCD_CE;
-+}
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/arch/v850/kernel/v850e_utils.c 2003-07-19 17:03:49.000000000 -0700
-@@ -0,0 +1,62 @@
-+/*
-+ * include/asm-v850/v850e_utils.h -- Utility functions associated with
-+ * V850E CPUs
-+ *
-+ * Copyright (C) 2001,02,03 NEC Electronics Corporation
-+ * Copyright (C) 2001,02,03 Miles Bader <miles@gnu.org>
-+ *
-+ * This file is subject to the terms and conditions of the GNU General
-+ * Public License. See the file COPYING in the main directory of this
-+ * archive for more details.
-+ *
-+ * Written by Miles Bader <miles@gnu.org>
-+ */
-+
-+#include <asm/v850e_utils.h>
-+
-+/* Calculate counter clock-divider and count values to attain the
-+ desired frequency RATE from the base frequency BASE_FREQ. The
-+ counter is expected to have a clock-divider, which can divide the
-+ system cpu clock by a power of two value from MIN_DIVLOG2 to
-+ MAX_DIV_LOG2, and a word-size of COUNTER_SIZE bits (the counter
-+ counts up and resets whenever it's equal to the compare register,
-+ generating an interrupt or whatever when it does so). The returned
-+ values are: *DIVLOG2 -- log2 of the desired clock divider and *COUNT
-+ -- the counter compare value to use. Returns true if it was possible
-+ to find a reasonable value, otherwise false (and the other return
-+ values will be set to be as good as possible). */
-+int calc_counter_params (unsigned long base_freq,
-+ unsigned long rate,
-+ unsigned min_divlog2, unsigned max_divlog2,
-+ unsigned counter_size,
-+ unsigned *divlog2, unsigned *count)
-+{
-+ unsigned _divlog2;
-+ int ok = 0;
-+
-+ /* Find the lowest clock divider setting that can represent RATE. */
-+ for (_divlog2 = min_divlog2; _divlog2 <= max_divlog2; _divlog2++) {
-+ /* Minimum interrupt rate possible using this divider. */
-+ unsigned min_int_rate
-+ = (base_freq >> _divlog2) >> counter_size;
-+
-+ if (min_int_rate <= rate) {
-+ /* This setting is the highest resolution
-+ setting that's slow enough enough to attain
-+ RATE interrupts per second, so use it. */
-+ ok = 1;
-+ break;
-+ }
-+ }
-+
-+ if (_divlog2 > max_divlog2)
-+ /* Can't find correct setting. */
-+ _divlog2 = max_divlog2;
-+
-+ if (divlog2)
-+ *divlog2 = _divlog2;
-+ if (count)
-+ *count = ((base_freq >> _divlog2) + rate/2) / rate;
-+
-+ return ok;
-+}
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/arch/v850/rte_me2_cb.ld 2003-07-19 17:03:49.000000000 -0700
-@@ -0,0 +1,30 @@
-+/* Linker script for the Midas labs RTE-V850E/ME2-CB evaluation board
-+ (CONFIG_RTE_CB_ME2), with kernel in SDRAM. */
-+
-+MEMORY {
-+ /* 128Kbyte of IRAM */
-+ IRAM : ORIGIN = 0x00000000, LENGTH = 0x00020000
-+
-+ /* 32MB of SDRAM. */
-+ SDRAM : ORIGIN = 0x00800000, LENGTH = 0x02000000
-+}
-+
-+#define KRAM SDRAM
-+
-+SECTIONS {
-+ .text : {
-+ __kram_start = . ;
-+ TEXT_CONTENTS
-+ INTV_CONTENTS /* copy to iRAM (0x0-0x620) */
-+ } > KRAM
-+
-+ .data : {
-+ DATA_CONTENTS
-+ BSS_CONTENTS
-+ RAMK_INIT_CONTENTS
-+ __kram_end = . ;
-+ BOOTMAP_CONTENTS
-+ } > KRAM
-+
-+ .root ALIGN (4096) : { ROOT_FS_CONTENTS } > SDRAM
-+}
---- linux-2.6.0-test1/arch/v850/sim85e2c.ld 2003-06-14 12:18:34.000000000 -0700
-+++ /dev/null 2002-08-30 16:31:37.000000000 -0700
-@@ -1,44 +0,0 @@
--/* Linker script for the sim85e2c simulator, which is a verilog simulation of
-- the V850E2 NA85E2C cpu core (CONFIG_V850E2_SIM85E2C). */
--
--MEMORY {
-- /* 1MB of `instruction RAM', starting at 0.
-- Instruction fetches are much faster from IRAM than from DRAM.
-- This should match IRAM_ADDR in "include/asm-v580/sim85e2c.h". */
-- IRAM : ORIGIN = 0x00000000, LENGTH = 0x00100000
--
-- /* 1MB of `data RAM', below and contiguous with the I/O space.
-- Data fetches are much faster from DRAM than from IRAM.
-- This should match DRAM_ADDR in "include/asm-v580/sim85e2c.h". */
-- DRAM : ORIGIN = 0xfff00000, LENGTH = 0x000ff000
-- /* We have to load DRAM at a mirror-address of 0x1ff00000,
-- because the simulator's preprocessing script isn't smart
-- enough to deal with the above LMA. */
-- DRAM_LOAD : ORIGIN = 0x1ff00000, LENGTH = 0x000ff000
--
-- /* `external ram' (CS1 area), comes after IRAM.
-- This should match ERAM_ADDR in "include/asm-v580/sim85e2c.h". */
-- ERAM : ORIGIN = 0x00100000, LENGTH = 0x07f00000
--}
--
--SECTIONS {
-- .iram : {
-- INTV_CONTENTS
-- TEXT_CONTENTS
-- RAMK_INIT_CONTENTS
-- } > IRAM
-- .data : {
-- __kram_start = . ;
-- DATA_CONTENTS
-- BSS_CONTENTS
-- ROOT_FS_CONTENTS
--
-- /* We stick console output into a buffer here. */
-- _memcons_output = . ;
-- . = . + 0x8000 ;
-- _memcons_output_end = . ;
--
-- __kram_end = . ;
-- BOOTMAP_CONTENTS
-- } > DRAM AT> DRAM_LOAD
--}
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/arch/v850/sim85e2.ld 2003-07-19 17:03:49.000000000 -0700
-@@ -0,0 +1,44 @@
-+/* Linker script for the sim85e2c simulator, which is a verilog simulation of
-+ the V850E2 NA85E2C cpu core (CONFIG_V850E2_SIM85E2C). */
-+
-+MEMORY {
-+ /* 1MB of `instruction RAM', starting at 0.
-+ Instruction fetches are much faster from IRAM than from DRAM.
-+ This should match IRAM_ADDR in "include/asm-v580/sim85e2c.h". */
-+ IRAM : ORIGIN = 0x00000000, LENGTH = 0x00100000
-+
-+ /* 1MB of `data RAM', below and contiguous with the I/O space.
-+ Data fetches are much faster from DRAM than from IRAM.
-+ This should match DRAM_ADDR in "include/asm-v580/sim85e2c.h". */
-+ DRAM : ORIGIN = 0xfff00000, LENGTH = 0x000ff000
-+ /* We have to load DRAM at a mirror-address of 0x1ff00000,
-+ because the simulator's preprocessing script isn't smart
-+ enough to deal with the above LMA. */
-+ DRAM_LOAD : ORIGIN = 0x1ff00000, LENGTH = 0x000ff000
-+
-+ /* `external ram' (CS1 area), comes after IRAM.
-+ This should match ERAM_ADDR in "include/asm-v580/sim85e2c.h". */
-+ ERAM : ORIGIN = 0x00100000, LENGTH = 0x07f00000
-+
-+ /* Dynamic RAM; uses memory controller. */
-+ /* SDRAM : ORIGIN = 0x10000000, LENGTH = 0x01000000 */
-+ SDRAM : ORIGIN = 0x10000000, LENGTH = 0x00200000/*use 2MB*/
-+}
-+
-+SECTIONS {
-+ .iram : {
-+ INTV_CONTENTS
-+ *arch/v850/kernel/head.o
-+ *(.early.text)
-+ } > IRAM
-+ .dram : {
-+ _memcons_output = . ;
-+ . = . + 0x8000 ;
-+ _memcons_output_end = . ;
-+ } > DRAM
-+ .sdram : {
-+ /* We stick console output into a buffer here. */
-+ RAMK_KRAM_CONTENTS
-+ ROOT_FS_CONTENTS
-+ } > SDRAM
-+}
---- linux-2.6.0-test1/arch/v850/vmlinux.lds.S 2003-06-22 12:04:44.000000000 -0700
-+++ 25/arch/v850/vmlinux.lds.S 2003-07-19 17:03:49.000000000 -0700
-@@ -206,8 +206,8 @@ _jiffies = _jiffies_64 ;
- # include "sim.ld"
- #endif
-
--#ifdef CONFIG_V850E2_SIM85E2C
--# include "sim85e2c.ld"
-+#ifdef CONFIG_V850E2_SIM85E2
-+# include "sim85e2.ld"
- #endif
-
- #ifdef CONFIG_V850E2_FPGA85E2C
-@@ -247,3 +247,8 @@ _jiffies = _jiffies_64 ;
- # include "rte_nb85e_cb.ld"
- # endif
- #endif
-+
-+#ifdef CONFIG_RTE_CB_ME2
-+# include "rte_me2_cb.ld"
-+#endif
-+
---- linux-2.6.0-test1/arch/x86_64/boot/compressed/head.S 2003-06-26 22:07:24.000000000 -0700
-+++ 25/arch/x86_64/boot/compressed/head.S 2003-07-19 17:04:53.000000000 -0700
-@@ -26,6 +26,7 @@
- .code32
- .text
-
-+#define IN_BOOTLOADER
- #include <linux/linkage.h>
- #include <asm/segment.h>
-
---- linux-2.6.0-test1/arch/x86_64/boot/compressed/misc.c 2003-06-26 22:07:24.000000000 -0700
-+++ 25/arch/x86_64/boot/compressed/misc.c 2003-07-19 17:04:53.000000000 -0700
-@@ -9,6 +9,7 @@
- * High loaded stuff by Hans Lermen & Werner Almesberger, Feb. 1996
- */
-
-+#define IN_BOOTLOADER
- #include "miscsetup.h"
- #include <asm/io.h>
-
---- linux-2.6.0-test1/arch/x86_64/ia32/syscall32.c 2003-06-14 12:18:24.000000000 -0700
-+++ 25/arch/x86_64/ia32/syscall32.c 2003-07-19 17:07:16.000000000 -0700
-@@ -29,12 +29,15 @@ char *syscall32_page;
- and let it be handled by generic VM */
- int map_syscall32(struct mm_struct *mm, unsigned long address)
- {
-+ pgd_t *pgd;
-+ pmd_t *pmd;
- pte_t *pte;
- int err = 0;
- down_read(&mm->mmap_sem);
- spin_lock(&mm->page_table_lock);
-- pmd_t *pmd = pmd_alloc(mm, pgd_offset(mm, address), address);
-- if (pmd && (pte = pte_alloc_map(mm, pmd, address)) != NULL) {
-+ pgd = pgd_offset(mm, address);
-+ pmd = pmd_alloc_map(mm, pgd, address);
-+ if (pmd && (pte = pte_alloc_map(mm, pgd, &pmd, address)) != NULL) {
- if (pte_none(*pte)) {
- set_pte(pte,
- mk_pte(virt_to_page(syscall32_page),
---- linux-2.6.0-test1/arch/x86_64/kernel/apic.c 2003-06-16 22:32:20.000000000 -0700
-+++ 25/arch/x86_64/kernel/apic.c 2003-07-19 17:04:07.000000000 -0700
-@@ -298,8 +298,8 @@ void __init setup_local_APIC (void)
- * Double-check whether this APIC is really registered.
- * This is meaningless in clustered apic mode, so we skip it.
- */
-- if (!clustered_apic_mode &&
-- !test_bit(GET_APIC_ID(apic_read(APIC_ID)), &phys_cpu_present_map))
-+ if (!clustered_apic_mode &&
-+ !cpu_isset(GET_APIC_ID(apic_read(APIC_ID)), phys_cpu_present_map))
- BUG();
-
- /*
-@@ -997,7 +997,7 @@ int __init APIC_init_uniprocessor (void)
-
- connect_bsp_APIC();
-
-- phys_cpu_present_map = 1;
-+ phys_cpu_present_map = cpumask_of_cpu(0);
- apic_write_around(APIC_ID, boot_cpu_id);
-
- setup_local_APIC();
---- linux-2.6.0-test1/arch/x86_64/kernel/io_apic.c 2003-07-02 14:53:14.000000000 -0700
-+++ 25/arch/x86_64/kernel/io_apic.c 2003-07-19 17:04:07.000000000 -0700
-@@ -1014,7 +1014,7 @@ void disable_IO_APIC(void)
- static void __init setup_ioapic_ids_from_mpc (void)
- {
- union IO_APIC_reg_00 reg_00;
-- unsigned long phys_id_present_map = phys_cpu_present_map;
-+ cpumask_t phys_id_present_map = phys_cpu_present_map;
- int apic;
- int i;
- unsigned char old_id;
-@@ -1047,22 +1047,22 @@ static void __init setup_ioapic_ids_from
- * system must have a unique ID or we get lots of nice
- * 'stuck on smp_invalidate_needed IPI wait' messages.
- */
-- if (phys_id_present_map & (1 << mp_ioapics[apic].mpc_apicid)) {
-+ if (cpu_isset(mp_ioapics[apic].mpc_apicid, phys_id_present_map)) {
- printk(KERN_ERR "BIOS bug, IO-APIC#%d ID %d is already used!...\n",
- apic, mp_ioapics[apic].mpc_apicid);
- for (i = 0; i < 0xf; i++)
-- if (!(phys_id_present_map & (1 << i)))
-+ if (!cpu_isset(i, phys_id_present_map))
- break;
- if (i >= 0xf)
- panic("Max APIC ID exceeded!\n");
- printk(KERN_ERR "... fixing up to %d. (tell your hw vendor)\n",
- i);
-- phys_id_present_map |= 1 << i;
-+ cpu_set(i, phys_id_present_map);
- mp_ioapics[apic].mpc_apicid = i;
- } else {
- printk(KERN_INFO
- "Using IO-APIC %d\n", mp_ioapics[apic].mpc_apicid);
-- phys_id_present_map |= 1 << mp_ioapics[apic].mpc_apicid;
-+ cpu_set(mp_ioapics[apic].mpc_apicid, phys_id_present_map);
- }
-
-
-@@ -1638,7 +1638,7 @@ void __init mp_config_ioapic_for_sci(int
- int __init io_apic_get_unique_id (int ioapic, int apic_id)
- {
- union IO_APIC_reg_00 reg_00;
-- static unsigned long apic_id_map = 0;
-+ static cpumask_t apic_id_map;
- unsigned long flags;
- int i = 0;
-
-@@ -1651,7 +1651,7 @@ int __init io_apic_get_unique_id (int io
- * advantage of new APIC bus architecture.
- */
-
-- if (!apic_id_map)
-+ if (!cpus_empty(apic_id_map))
- apic_id_map = phys_cpu_present_map;
-
- spin_lock_irqsave(&ioapic_lock, flags);
-@@ -1668,10 +1668,10 @@ int __init io_apic_get_unique_id (int io
- * Every APIC in a system must have a unique ID or we get lots of nice
- * 'stuck on smp_invalidate_needed IPI wait' messages.
- */
-- if (apic_id_map & (1 << apic_id)) {
-+ if (cpu_isset(apic_id, apic_id_map)) {
-
- for (i = 0; i < IO_APIC_MAX_ID; i++) {
-- if (!(apic_id_map & (1 << i)))
-+ if (!cpu_isset(i, apic_id_map))
- break;
- }
-
-@@ -1684,7 +1684,7 @@ int __init io_apic_get_unique_id (int io
- apic_id = i;
- }
-
-- apic_id_map |= (1 << apic_id);
-+ cpu_set(apic_id, apic_id_map);
-
- if (reg_00.bits.ID != apic_id) {
- reg_00.bits.ID = apic_id;
---- linux-2.6.0-test1/arch/x86_64/kernel/irq.c 2003-06-14 12:18:08.000000000 -0700
-+++ 25/arch/x86_64/kernel/irq.c 2003-07-19 17:04:07.000000000 -0700
-@@ -792,13 +792,13 @@ int setup_irq(unsigned int irq, struct i
- static struct proc_dir_entry * root_irq_dir;
- static struct proc_dir_entry * irq_dir [NR_IRQS];
-
--#define HEX_DIGITS 8
-+#define HEX_DIGITS (2*sizeof(cpumask_t))
-
- static unsigned int parse_hex_value (const char *buffer,
-- unsigned long count, unsigned long *ret)
-+ unsigned long count, cpumask_t *ret)
- {
- unsigned char hexnum [HEX_DIGITS];
-- unsigned long value;
-+ cpumask_t value = CPU_MASK_NONE;
- unsigned i;
-
- if (!count)
-@@ -812,10 +812,9 @@ static unsigned int parse_hex_value (con
- * Parse the first 8 characters as a hex string, any non-hex char
- * is end-of-string. '00e1', 'e1', '00E1', 'E1' are all the same.
- */
-- value = 0;
-
- for (i = 0; i < count; i++) {
-- unsigned int c = hexnum[i];
-+ unsigned int k, c = hexnum[i];
-
- switch (c) {
- case '0' ... '9': c -= '0'; break;
-@@ -824,7 +823,10 @@ static unsigned int parse_hex_value (con
- default:
- goto out;
- }
-- value = (value << 4) | c;
-+ cpus_shift_left(value, value, 4);
-+ for (k = 0; k < 4; ++k)
-+ if (c & (1 << k))
-+ cpu_set(k, value);
- }
- out:
- *ret = value;
-@@ -835,20 +837,31 @@ out:
-
- static struct proc_dir_entry * smp_affinity_entry [NR_IRQS];
-
--static unsigned long irq_affinity [NR_IRQS] = { [0 ... NR_IRQS-1] = ~0UL };
-+static cpumask_t irq_affinity [NR_IRQS] = { [0 ... NR_IRQS-1] = CPU_MASK_ALL };
- static int irq_affinity_read_proc (char *page, char **start, off_t off,
- int count, int *eof, void *data)
- {
-+ int k, len;
-+ cpumask_t tmp = irq_affinity[(long)data];
-+
- if (count < HEX_DIGITS+1)
- return -EINVAL;
-- return sprintf (page, "%08lx\n", irq_affinity[(long)data]);
-+
-+ for (k = len = 0; k < sizeof(cpumask_t)/sizeof(u16); ++k) {
-+ int j = sprintf(page, "%04hx", (u16)cpus_coerce(tmp));
-+ len += j;
-+ page += j;
-+ cpus_shift_right(tmp, tmp, 16);
-+ }
-+ len += sprintf(page, "\n");
-+ return len;
- }
-
- static int irq_affinity_write_proc (struct file *file, const char *buffer,
- unsigned long count, void *data)
- {
- int irq = (long) data, full_count = count, err;
-- unsigned long new_value;
-+ cpumask_t tmp, new_value;
-
- if (!irq_desc[irq].handler->set_affinity)
- return -EIO;
-@@ -860,7 +873,8 @@ static int irq_affinity_write_proc (stru
- * way to make the system unusable accidentally :-) At least
- * one online CPU still has to be targeted.
- */
-- if (!(new_value & cpu_online_map))
-+ cpus_and(tmp, new_value, cpu_online_map);
-+ if (cpus_empty(tmp))
- return -EINVAL;
-
- irq_affinity[irq] = new_value;
-@@ -874,17 +888,28 @@ static int irq_affinity_write_proc (stru
- static int prof_cpu_mask_read_proc (char *page, char **start, off_t off,
- int count, int *eof, void *data)
- {
-- unsigned long *mask = (unsigned long *) data;
-+ cpumask_t tmp, *mask = (cpumask_t *) data;
-+ int k, len;
-+
- if (count < HEX_DIGITS+1)
- return -EINVAL;
-- return sprintf (page, "%08lx\n", *mask);
-+
-+ tmp = *mask;
-+ for (k = len = 0; k < sizeof(cpumask_t)/sizeof(u16); ++k) {
-+ int j = sprintf(page, "%04hx", (u16)cpus_coerce(tmp));
-+ len += j;
-+ page += j;
-+ cpus_shift_right(tmp, tmp, 16);
-+ }
-+ len += sprintf(page, "\n");
-+ return len;
- }
-
- static int prof_cpu_mask_write_proc (struct file *file, const char *buffer,
- unsigned long count, void *data)
- {
-- unsigned long *mask = (unsigned long *) data, full_count = count, err;
-- unsigned long new_value;
-+ unsigned long full_count = count, err;
-+ cpumask_t new_value, *mask = (cpumask_t *)data;
-
- err = parse_hex_value(buffer, count, &new_value);
- if (err)
---- linux-2.6.0-test1/arch/x86_64/kernel/ldt.c 2003-06-16 22:32:20.000000000 -0700
-+++ 25/arch/x86_64/kernel/ldt.c 2003-07-19 17:04:07.000000000 -0700
-@@ -60,9 +60,12 @@ static int alloc_ldt(mm_context_t *pc, u
- wmb();
- if (reload) {
- #ifdef CONFIG_SMP
-+ cpumask_t mask;
-+
- preempt_disable();
-+ mask = cpumask_of_cpu(smp_processor_id());
- load_LDT(pc);
-- if (current->mm->cpu_vm_mask != (1UL<<smp_processor_id()))
-+ if (!cpus_equal(current->mm->cpu_vm_mask, mask))
- smp_call_function(flush_ldt, 0, 1, 1);
- preempt_enable();
- #else
---- linux-2.6.0-test1/arch/x86_64/kernel/mpparse.c 2003-06-14 12:18:06.000000000 -0700
-+++ 25/arch/x86_64/kernel/mpparse.c 2003-07-19 17:04:07.000000000 -0700
-@@ -65,7 +65,7 @@ unsigned int boot_cpu_id = -1U;
- static unsigned int num_processors = 0;
-
- /* Bitmask of physically existing CPUs */
--unsigned long phys_cpu_present_map = 0;
-+cpumask_t phys_cpu_present_map = CPU_MASK_NONE;
-
- /* ACPI MADT entry parsing functions */
- #ifdef CONFIG_ACPI_BOOT
-@@ -124,7 +124,7 @@ static void __init MP_processor_info (st
- }
- ver = m->mpc_apicver;
-
-- phys_cpu_present_map |= 1 << m->mpc_apicid;
-+ cpu_set(m->mpc_apicid, phys_cpu_present_map);
- /*
- * Validate version
- */
---- linux-2.6.0-test1/arch/x86_64/kernel/msr.c 2003-06-16 22:32:20.000000000 -0700
-+++ 25/arch/x86_64/kernel/msr.c 2003-07-19 17:04:07.000000000 -0700
-@@ -242,7 +242,7 @@ static int msr_open(struct inode *inode,
- int cpu = minor(file->f_dentry->d_inode->i_rdev);
- struct cpuinfo_x86 *c = &(cpu_data)[cpu];
-
-- if ( !(cpu_online_map & (1UL << cpu)) )
-+ if (!cpu_online(cpu))
- return -ENXIO; /* No such CPU */
- if ( !cpu_has(c, X86_FEATURE_MSR) )
- return -EIO; /* MSR not supported */
---- linux-2.6.0-test1/arch/x86_64/kernel/reboot.c 2003-06-14 12:18:30.000000000 -0700
-+++ 25/arch/x86_64/kernel/reboot.c 2003-07-19 17:04:07.000000000 -0700
-@@ -110,7 +110,7 @@ static void smp_halt(void)
- }
-
- /* Wait for all other CPUs to have run smp_stop_cpu */
-- while (cpu_online_map)
-+ while (!cpus_empty(cpu_online_map))
- rep_nop();
- }
- #endif
---- linux-2.6.0-test1/arch/x86_64/kernel/setup.c 2003-07-02 14:53:14.000000000 -0700
-+++ 25/arch/x86_64/kernel/setup.c 2003-07-19 17:04:07.000000000 -0700
-@@ -643,7 +643,7 @@ static int show_cpuinfo(struct seq_file
-
-
- #ifdef CONFIG_SMP
-- if (!(cpu_online_map & (1<<(c-cpu_data))))
-+ if (!cpu_online(c-cpu_data))
- return 0;
- #endif
-
---- linux-2.6.0-test1/arch/x86_64/kernel/smpboot.c 2003-06-16 22:32:20.000000000 -0700
-+++ 25/arch/x86_64/kernel/smpboot.c 2003-07-19 17:04:07.000000000 -0700
-@@ -54,11 +54,11 @@
- #include <asm/proto.h>
-
- /* Bitmask of currently online CPUs */
--unsigned long cpu_online_map = 1;
-+cpumask_t cpu_online_map;
-
--static volatile unsigned long cpu_callin_map;
--volatile unsigned long cpu_callout_map;
--static unsigned long smp_commenced_mask;
-+static cpumask_t cpu_callin_map;
-+cpumask_t cpu_callout_map;
-+static cpumask_t smp_commenced_mask;
-
- /* Per CPU bogomips and other parameters */
- struct cpuinfo_x86 cpu_data[NR_CPUS] __cacheline_aligned;
-@@ -174,7 +174,7 @@ static void __init synchronize_tsc_bp (v
-
- sum = 0;
- for (i = 0; i < NR_CPUS; i++) {
-- if (test_bit(i, &cpu_callout_map)) {
-+ if (cpu_isset(i, cpu_callout_map)) {
- t0 = tsc_values[i];
- sum += t0;
- }
-@@ -183,7 +183,7 @@ static void __init synchronize_tsc_bp (v
-
- sum = 0;
- for (i = 0; i < NR_CPUS; i++) {
-- if (!test_bit(i, &cpu_callout_map))
-+ if (!cpu_isset(i, cpu_callout_map))
- continue;
-
- delta = tsc_values[i] - avg;
-@@ -258,7 +258,7 @@ void __init smp_callin(void)
- */
- phys_id = GET_APIC_ID(apic_read(APIC_ID));
- cpuid = smp_processor_id();
-- if (test_and_set_bit(cpuid, &cpu_callin_map)) {
-+ if (cpu_test_and_set(cpuid, cpu_callin_map)) {
- panic("smp_callin: phys CPU#%d, CPU#%d already present??\n",
- phys_id, cpuid);
- }
-@@ -280,7 +280,7 @@ void __init smp_callin(void)
- /*
- * Has the boot CPU finished it's STARTUP sequence?
- */
-- if (test_bit(cpuid, &cpu_callout_map))
-+ if (cpu_isset(cpuid, cpu_callout_map))
- break;
- rep_nop();
- }
-@@ -320,7 +320,7 @@ void __init smp_callin(void)
- /*
- * Allow the master to continue.
- */
-- set_bit(cpuid, &cpu_callin_map);
-+ cpu_set(cpuid, cpu_callin_map);
-
- /*
- * Synchronize the TSC with the BP
-@@ -348,7 +348,7 @@ void __init start_secondary(void)
- barrier();
-
- Dprintk("cpu %d: waiting for commence\n", smp_processor_id());
-- while (!test_bit(smp_processor_id(), &smp_commenced_mask))
-+ while (!cpu_isset(smp_processor_id(), smp_commenced_mask))
- rep_nop();
-
- Dprintk("cpu %d: setting up apic clock\n", smp_processor_id());
-@@ -372,7 +372,7 @@ void __init start_secondary(void)
- local_flush_tlb();
-
- Dprintk("cpu %d eSetting cpu_online_map\n", smp_processor_id());
-- set_bit(smp_processor_id(), &cpu_online_map);
-+ cpu_set(smp_processor_id(), cpu_online_map);
- wmb();
-
- cpu_idle();
-@@ -630,19 +630,19 @@ static void __init do_boot_cpu (int apic
- * allow APs to start initializing.
- */
- Dprintk("Before Callout %d.\n", cpu);
-- set_bit(cpu, &cpu_callout_map);
-+ cpu_set(cpu, cpu_callout_map);
- Dprintk("After Callout %d.\n", cpu);
-
- /*
- * Wait 5s total for a response
- */
- for (timeout = 0; timeout < 50000; timeout++) {
-- if (test_bit(cpu, &cpu_callin_map))
-+ if (cpu_isset(cpu, cpu_callin_map))
- break; /* It has booted */
- udelay(100);
- }
-
-- if (test_bit(cpu, &cpu_callin_map)) {
-+ if (cpu_isset(cpu, cpu_callin_map)) {
- /* number CPUs logically, starting from 1 (BSP is 0) */
- Dprintk("OK.\n");
- printk(KERN_INFO "CPU%d: ", cpu);
-@@ -663,7 +663,7 @@ static void __init do_boot_cpu (int apic
- }
- }
- if (boot_error) {
-- clear_bit(cpu, &cpu_callout_map); /* was set here (do_boot_cpu()) */
-+ cpu_clear(cpu, cpu_callout_map); /* was set here (do_boot_cpu()) */
- clear_bit(cpu, &cpu_initialized); /* was set by cpu_init() */
- cpucount--;
- }
-@@ -734,10 +734,10 @@ static void __init smp_boot_cpus(unsigne
- current_thread_info()->cpu = 0;
- smp_tune_scheduling();
-
-- if (!test_bit(hard_smp_processor_id(), &phys_cpu_present_map)) {
-+ if (!cpu_isset(hard_smp_processor_id(), phys_cpu_present_map)) {
- printk("weird, boot CPU (#%d) not listed by the BIOS.\n",
- hard_smp_processor_id());
-- phys_cpu_present_map |= (1 << hard_smp_processor_id());
-+ cpu_set(hard_smp_processor_id(), phys_cpu_present_map);
- }
-
- /*
-@@ -747,8 +747,8 @@ static void __init smp_boot_cpus(unsigne
- if (!smp_found_config) {
- printk(KERN_NOTICE "SMP motherboard not detected.\n");
- io_apic_irqs = 0;
-- cpu_online_map = phys_cpu_present_map = 1;
-- phys_cpu_present_map = 1;
-+ cpu_online_map = cpumask_of_cpu(0);
-+ phys_cpu_present_map = cpumask_of_cpu(0);
- if (APIC_init_uniprocessor())
- printk(KERN_NOTICE "Local APIC not detected."
- " Using dummy APIC emulation.\n");
-@@ -759,10 +759,10 @@ static void __init smp_boot_cpus(unsigne
- * Should not be necessary because the MP table should list the boot
- * CPU too, but we do it for the sake of robustness anyway.
- */
-- if (!test_bit(boot_cpu_id, &phys_cpu_present_map)) {
-+ if (!cpu_isset(boot_cpu_id, phys_cpu_present_map)) {
- printk(KERN_NOTICE "weird, boot CPU (#%d) not listed by the BIOS.\n",
- boot_cpu_id);
-- phys_cpu_present_map |= (1 << hard_smp_processor_id());
-+ cpu_set(hard_smp_processor_id(), phys_cpu_present_map);
- }
-
- /*
-@@ -773,8 +773,8 @@ static void __init smp_boot_cpus(unsigne
- boot_cpu_id);
- printk(KERN_ERR "... forcing use of dummy APIC emulation. (tell your hw vendor)\n");
- io_apic_irqs = 0;
-- cpu_online_map = phys_cpu_present_map = 1;
-- phys_cpu_present_map = 1;
-+ cpu_online_map = cpumask_of_cpu(0);
-+ phys_cpu_present_map = cpumask_of_cpu(0);
- disable_apic = 1;
- goto smp_done;
- }
-@@ -788,8 +788,8 @@ static void __init smp_boot_cpus(unsigne
- smp_found_config = 0;
- printk(KERN_INFO "SMP mode deactivated, forcing use of dummy APIC emulation.\n");
- io_apic_irqs = 0;
-- cpu_online_map = phys_cpu_present_map = 1;
-- phys_cpu_present_map = 1;
-+ cpu_online_map = cpumask_of_cpu(0);
-+ phys_cpu_present_map = cpumask_of_cpu(0);
- disable_apic = 1;
- goto smp_done;
- }
-@@ -812,7 +812,7 @@ static void __init smp_boot_cpus(unsigne
- if (apicid == boot_cpu_id)
- continue;
-
-- if (!(phys_cpu_present_map & (1 << apicid)))
-+ if (!cpu_isset(apicid, phys_cpu_present_map))
- continue;
- if ((max_cpus >= 0) && (max_cpus <= cpucount+1))
- continue;
-@@ -848,7 +848,7 @@ static void __init smp_boot_cpus(unsigne
- } else {
- unsigned long bogosum = 0;
- for (cpu = 0; cpu < NR_CPUS; cpu++)
-- if (cpu_callout_map & (1<<cpu))
-+ if (cpu_isset(cpu, cpu_callout_map))
- bogosum += cpu_data[cpu].loops_per_jiffy;
- printk(KERN_INFO "Total of %d processors activated (%lu.%02lu BogoMIPS).\n",
- cpucount+1,
-@@ -889,20 +889,20 @@ void __init smp_prepare_cpus(unsigned in
-
- void __devinit smp_prepare_boot_cpu(void)
- {
-- set_bit(smp_processor_id(), &cpu_online_map);
-- set_bit(smp_processor_id(), &cpu_callout_map);
-+ cpu_set(smp_processor_id(), cpu_online_map);
-+ cpu_set(smp_processor_id(), cpu_callout_map);
- }
-
- int __devinit __cpu_up(unsigned int cpu)
- {
- /* This only works at boot for x86. See "rewrite" above. */
-- if (test_bit(cpu, &smp_commenced_mask)) {
-+ if (cpu_isset(cpu, smp_commenced_mask)) {
- local_irq_enable();
- return -ENOSYS;
- }
-
- /* In case one didn't come up */
-- if (!test_bit(cpu, &cpu_callin_map)) {
-+ if (!cpu_isset(cpu, cpu_callin_map)) {
- local_irq_enable();
- return -EIO;
- }
-@@ -911,8 +911,8 @@ int __devinit __cpu_up(unsigned int cpu)
- /* Unleash the CPU! */
- Dprintk("waiting for cpu %d\n", cpu);
-
-- set_bit(cpu, &smp_commenced_mask);
-- while (!test_bit(cpu, &cpu_online_map))
-+ cpu_set(cpu, smp_commenced_mask);
-+ while (!cpu_isset(cpu, cpu_online_map))
- mb();
- return 0;
- }
---- linux-2.6.0-test1/arch/x86_64/kernel/smp.c 2003-06-14 12:18:04.000000000 -0700
-+++ 25/arch/x86_64/kernel/smp.c 2003-07-19 17:04:07.000000000 -0700
-@@ -92,8 +92,9 @@ void send_IPI_self(int vector)
- __send_IPI_shortcut(APIC_DEST_SELF, vector);
- }
-
--static inline void send_IPI_mask(int mask, int vector)
-+static inline void send_IPI_mask(cpumask_t cpumask, int vector)
- {
-+ unsigned long mask = cpus_coerce(cpumask);
- unsigned long cfg;
- unsigned long flags;
-
-@@ -133,7 +134,7 @@ static inline void send_IPI_mask(int mas
- * Optimizations Manfred Spraul <manfred@colorfullife.com>
- */
-
--static volatile unsigned long flush_cpumask;
-+static volatile cpumask_t flush_cpumask;
- static struct mm_struct * flush_mm;
- static unsigned long flush_va;
- static spinlock_t tlbstate_lock = SPIN_LOCK_UNLOCKED;
-@@ -203,7 +204,7 @@ asmlinkage void smp_invalidate_interrupt
-
- cpu = get_cpu();
-
-- if (!test_bit(cpu, &flush_cpumask))
-+ if (!cpu_isset(cpu, flush_cpumask))
- goto out;
- /*
- * This was a BUG() but until someone can quote me the
-@@ -224,15 +225,16 @@ asmlinkage void smp_invalidate_interrupt
- leave_mm(cpu);
- }
- ack_APIC_irq();
-- clear_bit(cpu, &flush_cpumask);
-+ cpu_clear(cpu, flush_cpumask);
-
- out:
- put_cpu_no_resched();
- }
-
--static void flush_tlb_others (unsigned long cpumask, struct mm_struct *mm,
-+static void flush_tlb_others(cpumask_t cpumask, struct mm_struct *mm,
- unsigned long va)
- {
-+ cpumask_t tmp;
- /*
- * A couple of (to be removed) sanity checks:
- *
-@@ -240,12 +242,10 @@ static void flush_tlb_others (unsigned l
- * - current CPU must not be in mask
- * - mask must exist :)
- */
-- if (!cpumask)
-- BUG();
-- if ((cpumask & cpu_online_map) != cpumask)
-- BUG();
-- if (cpumask & (1 << smp_processor_id()))
-- BUG();
-+ BUG_ON(cpus_empty(cpumask));
-+ cpus_and(tmp, cpumask, cpu_online_map);
-+ BUG_ON(!cpus_equal(tmp, cpumask));
-+ BUG_ON(cpu_isset(smp_processor_id(), cpumask));
- if (!mm)
- BUG();
-
-@@ -259,14 +259,15 @@ static void flush_tlb_others (unsigned l
-
- flush_mm = mm;
- flush_va = va;
-- atomic_set_mask(cpumask, &flush_cpumask);
-+ cpus_or(flush_cpumask, cpumask, flush_cpumask);
-+
- /*
- * We have to send the IPI only to
- * CPUs affected.
- */
- send_IPI_mask(cpumask, INVALIDATE_TLB_VECTOR);
-
-- while (flush_cpumask)
-+ while (!cpus_empty(flush_cpumask))
- /* nothing. lockup detection does not belong here */;
-
- flush_mm = NULL;
-@@ -277,23 +278,25 @@ static void flush_tlb_others (unsigned l
- void flush_tlb_current_task(void)
- {
- struct mm_struct *mm = current->mm;
-- unsigned long cpu_mask;
-+ cpumask_t cpu_mask;
-
- preempt_disable();
-- cpu_mask = mm->cpu_vm_mask & ~(1UL << smp_processor_id());
-+ cpu_mask = mm->cpu_vm_mask;
-+ cpu_clear(smp_processor_id(), cpu_mask);
-
- local_flush_tlb();
-- if (cpu_mask)
-+ if (!cpus_empty(cpu_mask))
- flush_tlb_others(cpu_mask, mm, FLUSH_ALL);
- preempt_enable();
- }
-
- void flush_tlb_mm (struct mm_struct * mm)
- {
-- unsigned long cpu_mask;
-+ cpumask_t cpu_mask;
-
- preempt_disable();
-- cpu_mask = mm->cpu_vm_mask & ~(1UL << smp_processor_id());
-+ cpu_mask = mm->cpu_vm_mask;
-+ cpu_clear(smp_processor_id(), cpu_mask);
-
- if (current->active_mm == mm) {
- if (current->mm)
-@@ -301,7 +304,7 @@ void flush_tlb_mm (struct mm_struct * mm
- else
- leave_mm(smp_processor_id());
- }
-- if (cpu_mask)
-+ if (!cpus_empty(cpu_mask))
- flush_tlb_others(cpu_mask, mm, FLUSH_ALL);
-
- preempt_enable();
-@@ -310,10 +313,11 @@ void flush_tlb_mm (struct mm_struct * mm
- void flush_tlb_page(struct vm_area_struct * vma, unsigned long va)
- {
- struct mm_struct *mm = vma->vm_mm;
-- unsigned long cpu_mask;
-+ cpumask_t cpu_mask;
-
- preempt_disable();
-- cpu_mask = mm->cpu_vm_mask & ~(1UL << smp_processor_id());
-+ cpu_mask = mm->cpu_vm_mask;
-+ cpu_clear(smp_processor_id(), cpu_mask);
-
- if (current->active_mm == mm) {
- if(current->mm)
-@@ -322,7 +326,7 @@ void flush_tlb_page(struct vm_area_struc
- leave_mm(smp_processor_id());
- }
-
-- if (cpu_mask)
-+ if (!cpus_empty(cpu_mask))
- flush_tlb_others(cpu_mask, mm, va);
-
- preempt_enable();
-@@ -355,7 +359,7 @@ void smp_kdb_stop(void)
-
- void smp_send_reschedule(int cpu)
- {
-- send_IPI_mask(1 << cpu, RESCHEDULE_VECTOR);
-+ send_IPI_mask(cpumask_of_cpu(cpu), RESCHEDULE_VECTOR);
- }
-
- /*
-@@ -430,7 +434,7 @@ void smp_stop_cpu(void)
- /*
- * Remove this CPU:
- */
-- clear_bit(smp_processor_id(), &cpu_online_map);
-+ cpu_clear(smp_processor_id(), cpu_online_map);
- local_irq_disable();
- disable_local_APIC();
- local_irq_enable();
-@@ -491,8 +495,8 @@ int slow_smp_processor_id(void)
- unsigned long sp = (unsigned long)&stack_location;
- int offset = 0, cpu;
-
-- for (offset = 0; (cpu_online_map >> offset); offset = cpu + 1) {
-- cpu = ffz(~(cpu_online_map >> offset));
-+ for (offset = 0; next_cpu(offset, cpu_online_map) < NR_CPUS; offset = cpu + 1) {
-+ cpu = next_cpu(offset, cpu_online_map);
-
- if (sp >= (u64)cpu_pda[cpu].irqstackptr - IRQSTACKSIZE &&
- sp <= (u64)cpu_pda[cpu].irqstackptr)
---- linux-2.6.0-test1/arch/x86_64/mm/init.c 2003-07-10 18:50:30.000000000 -0700
-+++ 25/arch/x86_64/mm/init.c 2003-07-19 17:03:49.000000000 -0700
-@@ -19,9 +19,6 @@
- #include <linux/swap.h>
- #include <linux/smp.h>
- #include <linux/init.h>
--#ifdef CONFIG_BLK_DEV_INITRD
--#include <linux/blk.h>
--#endif
- #include <linux/pagemap.h>
- #include <linux/bootmem.h>
- #include <linux/proc_fs.h>
---- linux-2.6.0-test1/arch/x86_64/mm/ioremap.c 2003-06-14 12:18:34.000000000 -0700
-+++ 25/arch/x86_64/mm/ioremap.c 2003-07-19 17:07:16.000000000 -0700
-@@ -82,7 +82,7 @@ static int remap_area_pages(unsigned lon
- spin_lock(&init_mm.page_table_lock);
- do {
- pmd_t *pmd;
-- pmd = pmd_alloc(&init_mm, dir, address);
-+ pmd = pmd_alloc_kernel(&init_mm, dir, address);
- error = -ENOMEM;
- if (!pmd)
- break;
---- linux-2.6.0-test1/arch/x86_64/mm/numa.c 2003-07-10 18:50:30.000000000 -0700
-+++ 25/arch/x86_64/mm/numa.c 2003-07-19 17:03:49.000000000 -0700
-@@ -8,7 +8,6 @@
- #include <linux/init.h>
- #include <linux/bootmem.h>
- #include <linux/mmzone.h>
--#include <linux/blk.h>
- #include <linux/ctype.h>
- #include <asm/e820.h>
- #include <asm/proto.h>
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/Documentation/fb/neofb.txt 2003-07-19 17:04:55.000000000 -0700
-@@ -0,0 +1,27 @@
-+the neofb framebuffer driver supports the following Neomagic chipsets:
-+
-+NM2070 MagicGraph 128
-+NM2090 MagicGraph 128V
-+NM2093 MagicGraph 128ZV
-+NM2097 MagicGraph 128ZV+
-+NM2160 MagicGraph 128XD
-+NM2200 MagicGraph 256AV
-+NM2230 MagicGraph 256AV+
-+NM2360 MagicGraph 256ZX
-+NM2380 MagicGraph 256XL+
-+
-+with the following options:
-+
-+disabled Disable this driver's initialization.
-+internal Enable output on internal LCD Display.
-+external Enable output on external CRT.
-+nostretch Disable stretching of modes smaller than LCD.
-+nopciburst Disable PCI burst mode.
-+libretto Force Libretto 100/110 800x480 LCD.
-+picturebook Force Picturebook 1024x480 LCD.
-+
-+at the boot prompt:
-+ video=neofb:picturebook
-+
-+as a module:
-+ modprobe neofb picturebook=1
---- linux-2.6.0-test1/Documentation/filesystems/proc.txt 2003-06-26 22:07:24.000000000 -0700
-+++ 25/Documentation/filesystems/proc.txt 2003-07-19 17:04:56.000000000 -0700
-@@ -222,6 +222,7 @@ Table 1-3: Kernel info in /proc
- partitions Table of partitions known to the system
- pci Depreciated info of PCI bus (new way -> /proc/bus/pci/,
- decoupled by lspci (2.4)
-+ rcu Read-Copy Update information (2.5)
- rtc Real time clock
- scsi SCSI info (see text)
- slabinfo Slab pool info
-@@ -346,6 +347,9 @@ available. In this case, there are 0 ch
- ZONE_DMA, 4 chunks of 2^1*PAGE_SIZE in ZONE_DMA, 101 chunks of 2^4*PAGE_SIZE
- available in ZONE_NORMAL, etc...
-
-+The rcu file gives information about Read-Copy Update synchronization
-+primitive. It indicates the number for RCU requests and actual
-+updates for every CPU.
-
- 1.3 IDE devices in /proc/ide
- ----------------------------
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/Documentation/i386/kgdb/andthen 2003-07-19 17:04:02.000000000 -0700
-@@ -0,0 +1,100 @@
-+
-+define set_andthen
-+ set var $thp=0
-+ set var $thp=(struct kgdb_and_then_struct *)&kgdb_data[0]
-+ set var $at_size = (sizeof kgdb_data)/(sizeof *$thp)
-+ set var $at_oc=kgdb_and_then_count
-+ set var $at_cc=$at_oc
-+end
-+
-+define andthen_next
-+ set var $at_cc=$arg0
-+end
-+
-+define andthen
-+ andthen_set_edge
-+ if ($at_cc >= $at_oc)
-+ printf "Outside window. Window size is %d\n",($at_oc-$at_low)
-+ else
-+ printf "%d: ",$at_cc
-+ output *($thp+($at_cc++ % $at_size ))
-+ printf "\n"
-+ end
-+end
-+define andthen_set_edge
-+ set var $at_oc=kgdb_and_then_count
-+ set var $at_low = $at_oc - $at_size
-+ if ($at_low < 0 )
-+ set var $at_low = 0
-+ end
-+ if (( $at_cc > $at_oc) || ($at_cc < $at_low))
-+ printf "Count outside of window, setting count to "
-+ if ($at_cc >= $at_oc)
-+ set var $at_cc = $at_oc
-+ else
-+ set var $at_cc = $at_low
-+ end
-+ printf "%d\n",$at_cc
-+ end
-+end
-+
-+define beforethat
-+ andthen_set_edge
-+ if ($at_cc <= $at_low)
-+ printf "Outside window. Window size is %d\n",($at_oc-$at_low)
-+ else
-+ printf "%d: ",$at_cc-1
-+ output *($thp+(--$at_cc % $at_size ))
-+ printf "\n"
-+ end
-+end
-+
-+document andthen_next
-+ andthen_next <count>
-+ . sets the number of the event to display next. If this event
-+ . is not in the event pool, either andthen or beforethat will
-+ . correct it to the nearest event pool edge. The event pool
-+ . ends at the last event recorded and begins <number of events>
-+ . prior to that. If beforethat is used next, it will display
-+ . event <count> -1.
-+.
-+ andthen commands are: set_andthen, andthen_next, andthen and beforethat
-+end
-+
-+
-+document andthen
-+ andthen
-+. displays the next event in the list. <set_andthen> sets up to display
-+. the oldest saved event first.
-+. <count> (optional) count of the event to display.
-+. note the number of events saved is specified at configure time.
-+. if events are saved between calls to andthen the index will change
-+. but the displayed event will be the next one (unless the event buffer
-+. is overrun).
-+.
-+. andthen commands are: set_andthen, andthen_next, andthen and beforethat
-+end
-+
-+document set_andthen
-+ set_andthen
-+. sets up to use the <andthen> and <beforethat> commands.
-+. if you have defined your own struct, use the above and
-+. then enter the following:
-+. p $thp=(struct kgdb_and_then_structX *)&kgdb_data[0]
-+. where <kgdb_and_then_structX> is the name of your structure.
-+.
-+. andthen commands are: set_andthen, andthen_next, andthen and beforethat
-+end
-+
-+document beforethat
-+ beforethat
-+. displays the next prior event in the list. <set_andthen> sets up to
-+. display the last occuring event first.
-+.
-+. note the number of events saved is specified at configure time.
-+. if events are saved between calls to beforethat the index will change
-+. but the displayed event will be the next one (unless the event buffer
-+. is overrun).
-+.
-+. andthen commands are: set_andthen, andthen_next, andthen and beforethat
-+end
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/Documentation/i386/kgdb/debug-nmi.txt 2003-07-19 17:04:02.000000000 -0700
-@@ -0,0 +1,37 @@
-+Subject: Debugging with NMI
-+Date: Mon, 12 Jul 1999 11:28:31 -0500
-+From: David Grothe <dave@gcom.com>
-+Organization: Gcom, Inc
-+To: David Grothe <dave@gcom.com>
-+
-+Kernel hackers:
-+
-+Maybe this is old hat, but it is new to me --
-+
-+On an ISA bus machine, if you short out the A1 and B1 pins of an ISA
-+slot you will generate an NMI to the CPU. This interrupts even a
-+machine that is hung in a loop with interrupts disabled. Used in
-+conjunction with kgdb <
-+ftp://ftp.gcom.com/pub/linux/src/kgdb-2.3.35/kgdb-2.3.35.tgz > you can
-+gain debugger control of a machine that is hung in the kernel! Even
-+without kgdb the kernel will print a stack trace so you can find out
-+where it was hung.
-+
-+The A1/B1 pins are directly opposite one another and the farthest pins
-+towards the bracket end of the ISA bus socket. You can stick a paper
-+clip or multi-meter probe between them to short them out.
-+
-+I had a spare ISA bus to PC104 bus adapter around. The PC104 end of the
-+board consists of two rows of wire wrap pins. So I wired a push button
-+between the A1/B1 pins and now have an ISA board that I can stick into
-+any ISA bus slot for debugger entry.
-+
-+Microsoft has a circuit diagram of a PCI card at
-+http://www.microsoft.com/hwdev/DEBUGGING/DMPSW.HTM. If you want to
-+build one you will have to mail them and ask for the PAL equations.
-+Nobody makes one comercially.
-+
-+[THIS TIP COMES WITH NO WARRANTY WHATSOEVER. It works for me, but if
-+your machine catches fire, it is your problem, not mine.]
-+
-+-- Dave (the kgdb guy)
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/Documentation/i386/kgdb/gdb-globals.txt 2003-07-19 17:04:02.000000000 -0700
-@@ -0,0 +1,71 @@
-+Sender: akale@veritas.com
-+Date: Fri, 23 Jun 2000 19:26:35 +0530
-+From: "Amit S. Kale" <akale@veritas.com>
-+Organization: Veritas Software (India)
-+To: Dave Grothe <dave@gcom.com>, linux-kernel@vger.rutgers.edu
-+CC: David Milburn <dmilburn@wirespeed.com>,
-+ "Edouard G. Parmelan" <Edouard.Parmelan@quadratec.fr>,
-+ ezannoni@cygnus.com, Keith Owens <kaos@ocs.com.au>
-+Subject: Re: Module debugging using kgdb
-+
-+Dave Grothe wrote:
-+>
-+> Amit:
-+>
-+> There is a 2.4.0 version of kgdb on our ftp site:
-+> ftp://ftp.gcom.com/pub/linux/src/kgdb. I mirrored your version of gdb
-+> and loadmodule.sh there.
-+>
-+> Have a look at the README file and see if I go it right. If not, send
-+> me some corrections and I will update it.
-+>
-+> Does your version of gdb solve the global variable problem?
-+
-+Yes.
-+Thanks to Elena Zanoni, gdb (developement version) can now calculate
-+correctly addresses of dynamically loaded object files. I have not been
-+following gdb developement for sometime and am not sure when symbol
-+address calculation fix is going to appear in a gdb stable version.
-+
-+Elena, any idea when the fix will make it to a prebuilt gdb from a
-+redhat release?
-+
-+For the time being I have built a gdb developement version. It can be
-+used for module debugging with loadmodule.sh script.
-+
-+The problem with calculating of module addresses with previous versions
-+of gdb was as follows:
-+gdb did not use base address of a section while calculating address of
-+a symbol in the section in an object file loaded via 'add-symbol-file'.
-+It used address of .text segment instead. Due to this addresses of
-+symbols in .data, .bss etc. (e.g. global variables) were calculated incorrectly.
-+
-+Above mentioned fix allow gdb to use base address of a segment while
-+calculating address of a symbol in it. It adds a parameter '-s' to
-+'add-symbol-file' command for specifying base address of a segment.
-+
-+loadmodule.sh script works as follows.
-+
-+1. Copy a module file to target machine.
-+2. Load the module on the target machine using insmod with -m parameter.
-+insmod produces a module load map which contains base addresses of all
-+sections in the module and addresses of symbols in the module file.
-+3. Find all sections and their base addresses in the module from
-+the module map.
-+4. Generate a script that loads the module file. The script uses
-+'add-symbol-file' and specifies address of text segment followed by
-+addresses of all segments in the module.
-+
-+Here is an example gdb script produced by loadmodule.sh script.
-+
-+add-symbol-file foo 0xd082c060 -s .text.lock 0xd08cbfb5
-+-s .fixup 0xd08cfbdf -s .rodata 0xd08cfde0 -s __ex_table 0xd08e3b38
-+-s .data 0xd08e3d00 -s .bss 0xd08ec8c0 -s __ksymtab 0xd08ee838
-+
-+With this command gdb can calculate addresses of symbols in ANY segment
-+in a module file.
-+
-+Regards.
-+--
-+Amit Kale
-+Veritas Software ( http://www.veritas.com )
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/Documentation/i386/kgdb/gdbinit 2003-07-19 17:04:02.000000000 -0700
-@@ -0,0 +1,14 @@
-+shell echo -e "\003" >/dev/ttyS0
-+set remotebaud 38400
-+target remote /dev/ttyS0
-+define si
-+stepi
-+printf "EAX=%08x EBX=%08x ECX=%08x EDX=%08x\n", $eax, $ebx, $ecx, $edx
-+printf "ESI=%08x EDI=%08x EBP=%08x ESP=%08x\n", $esi, $edi, $ebp, $esp
-+x/i $eip
-+end
-+define ni
-+nexti
-+printf "EAX=%08x EBX=%08x ECX=%08x EDX=%08x\n", $eax, $ebx, $ecx, $edx
-+printf "ESI=%08x EDI=%08x EBP=%08x ESP=%08x\n", $esi, $edi, $ebp, $esp
-+x/i $eip
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/Documentation/i386/kgdb/gdbinit.hw 2003-07-19 17:04:02.000000000 -0700
-@@ -0,0 +1,117 @@
-+
-+#Using ia-32 hardware breakpoints.
-+#
-+#4 hardware breakpoints are available in ia-32 processors. These breakpoints
-+#do not need code modification. They are set using debug registers.
-+#
-+#Each hardware breakpoint can be of one of the
-+#three types: execution, write, access.
-+#1. An Execution breakpoint is triggered when code at the breakpoint address is
-+#executed.
-+#2. A write breakpoint ( aka watchpoints ) is triggered when memory location
-+#at the breakpoint address is written.
-+#3. An access breakpoint is triggered when memory location at the breakpoint
-+#address is either read or written.
-+#
-+#As hardware breakpoints are available in limited number, use software
-+#breakpoints ( br command in gdb ) instead of execution hardware breakpoints.
-+#
-+#Length of an access or a write breakpoint defines length of the datatype to
-+#be watched. Length is 1 for char, 2 short , 3 int.
-+#
-+#For placing execution, write and access breakpoints, use commands
-+#hwebrk, hwwbrk, hwabrk
-+#To remove a breakpoint use hwrmbrk command.
-+#
-+#These commands take following types of arguments. For arguments associated
-+#with each command, use help command.
-+#1. breakpointno: 0 to 3
-+#2. length: 1 to 3
-+#3. address: Memory location in hex ( without 0x ) e.g c015e9bc
-+#
-+#Use the command exinfo to find which hardware breakpoint occured.
-+
-+#hwebrk breakpointno address
-+define hwebrk
-+ maintenance packet Y$arg0,0,0,$arg1
-+end
-+document hwebrk
-+ hwebrk <breakpointno> <address>
-+ Places a hardware execution breakpoint
-+ <breakpointno> = 0 - 3
-+ <address> = Hex digits without leading "0x".
-+end
-+
-+#hwwbrk breakpointno length address
-+define hwwbrk
-+ maintenance packet Y$arg0,1,$arg1,$arg2
-+end
-+document hwwbrk
-+ hwwbrk <breakpointno> <length> <address>
-+ Places a hardware write breakpoint
-+ <breakpointno> = 0 - 3
-+ <length> = 1 (1 byte), 2 (2 byte), 3 (4 byte)
-+ <address> = Hex digits without leading "0x".
-+end
-+
-+#hwabrk breakpointno length address
-+define hwabrk
-+ maintenance packet Y$arg0,1,$arg1,$arg2
-+end
-+document hwabrk
-+ hwabrk <breakpointno> <length> <address>
-+ Places a hardware access breakpoint
-+ <breakpointno> = 0 - 3
-+ <length> = 1 (1 byte), 2 (2 byte), 3 (4 byte)
-+ <address> = Hex digits without leading "0x".
-+end
-+
-+#hwrmbrk breakpointno
-+define hwrmbrk
-+ maintenance packet y$arg0
-+end
-+document hwrmbrk
-+ hwrmbrk <breakpointno>
-+ <breakpointno> = 0 - 3
-+ Removes a hardware breakpoint
-+end
-+
-+define reboot
-+ maintenance packet r
-+end
-+#exinfo
-+define exinfo
-+ maintenance packet qE
-+end
-+document exinfo
-+ exinfo
-+ Gives information about a breakpoint.
-+end
-+define get_th
-+ p $th=(struct thread_info *)((int)$esp & ~8191)
-+end
-+document get_th
-+ get_tu
-+ Gets and prints the current thread_info pointer, Defines th to be it.
-+end
-+define get_cu
-+ p $cu=(struct thread_info *)((int)$esp & ~8191)->task
-+end
-+document get_cu
-+ get_cu
-+ Gets and print the "current" value. Defines $cu to be it.
-+end
-+define int_off
-+ set var $flags=$eflags
-+ set $eflags=$eflags&~0x200
-+ end
-+define int_on
-+ set var $eflags|=$flags&0x200
-+ end
-+document int_off
-+ saves the current interrupt state and clears the processor interrupt
-+ flag. Use int_on to restore the saved flag.
-+end
-+document int_on
-+ Restores the interrupt flag saved by int_off.
-+end
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/Documentation/i386/kgdb/gdbinit-modules 2003-07-19 17:04:02.000000000 -0700
-@@ -0,0 +1,146 @@
-+#
-+# Usefull GDB user-command to debug Linux Kernel Modules with gdbstub.
-+#
-+# This don't work for Linux-2.0 or older.
-+#
-+# Author Edouard G. Parmelan <Edouard.Parmelan@quadratec.fr>
-+#
-+#
-+# Fri Apr 30 20:33:29 CEST 1999
-+# First public release.
-+#
-+# Major cleanup after experiment Linux-2.0 kernel without success.
-+# Symbols of a module are not in the correct order, I can't explain
-+# why :(
-+#
-+# Fri Mar 19 15:41:40 CET 1999
-+# Initial version.
-+#
-+# Thu Jan 6 16:29:03 CST 2000
-+# A little fixing by Dave Grothe <dave@gcom.com>
-+#
-+# Mon Jun 19 09:33:13 CDT 2000
-+# Alignment changes from Edouard Parmelan
-+#
-+# The basic idea is to find where insmod load the module and inform
-+# GDB to load the symbol table of the module with the GDB command
-+# ``add-symbol-file <object> <address>''.
-+#
-+# The Linux kernel holds the list of all loaded modules in module_list,
-+# this list end with &kernel_module (exactly with module->next == NULL,
-+# but the last module is not a real module).
-+#
-+# Insmod allocates the struct module before the object file. Since
-+# Linux-2.1, this structure contain his size. The real address of
-+# the object file is then (char*)module + module->size_of_struct.
-+#
-+# You can use three user functions ``mod-list'', ``mod-print-symbols''
-+# and ``add-module-symbols''.
-+#
-+# mod-list list all loaded modules with the format:
-+# <module-address> <module-name>
-+#
-+# As soon as you have found the address of your module, you can
-+# print its exported symbols (mod-print-symbols) or inform GDB to add
-+# symbols from your module file (mod-add-symbols).
-+#
-+# The argument that you give to mod-print-symbols or mod-add-symbols
-+# is the <module-address> from the mod-list command.
-+#
-+# When using the mod-add-symbols command you must also give the full
-+# pathname of the modules object code file.
-+#
-+# The command mod-add-lis is an example of how to make this easier.
-+# You can edit this macro to contain the path name of your own
-+# favorite module and then use it as a shorthand to load it. You
-+# still need the module-address, however.
-+#
-+# The internal function ``mod-validate'' set the GDB variable $mod
-+# as a ``struct module*'' if the kernel known the module otherwise
-+# $mod is set to NULL. This ensure to not add symbols for a wrong
-+# address.
-+#
-+# Have a nice hacking day !
-+#
-+#
-+define mod-list
-+ set $mod = (struct module*)module_list
-+ # the last module is the kernel, ignore it
-+ while $mod != &kernel_module
-+ printf "%p\t%s\n", (long)$mod, ($mod)->name
-+ set $mod = $mod->next
-+ end
-+end
-+document mod-list
-+List all modules in the form: <module-address> <module-name>
-+Use the <module-address> as the argument for the other
-+mod-commands: mod-print-symbols, mod-add-symbols.
-+end
-+
-+define mod-validate
-+ set $mod = (struct module*)module_list
-+ while ($mod != $arg0) && ($mod != &kernel_module)
-+ set $mod = $mod->next
-+ end
-+ if $mod == &kernel_module
-+ set $mod = 0
-+ printf "%p is not a module\n", $arg0
-+ end
-+end
-+document mod-validate
-+mod-validate <module-address>
-+Internal user-command used to validate the module parameter.
-+If <module> is a real loaded module, set $mod to it otherwise set $mod to 0.
-+end
-+
-+
-+define mod-print-symbols
-+ mod-validate $arg0
-+ if $mod != 0
-+ set $i = 0
-+ while $i < $mod->nsyms
-+ set $sym = $mod->syms[$i]
-+ printf "%p\t%s\n", $sym->value, $sym->name
-+ set $i = $i + 1
-+ end
-+ end
-+end
-+document mod-print-symbols
-+mod-print-symbols <module-address>
-+Print all exported symbols of the module. see mod-list
-+end
-+
-+
-+define mod-add-symbols-align
-+ mod-validate $arg0
-+ if $mod != 0
-+ set $mod_base = ($mod->size_of_struct + (long)$mod)
-+ if ($arg2 != 0) && (($mod_base & ($arg2 - 1)) != 0)
-+ set $mod_base = ($mod_base | ($arg2 - 1)) + 1
-+ end
-+ add-symbol-file $arg1 $mod_base
-+ end
-+end
-+document mod-add-symbols-align
-+mod-add-symbols-align <module-address> <object file path name> <align>
-+Load the symbols table of the module from the object file where
-+first section aligment is <align>.
-+To retreive alignment, use `objdump -h <object file path name>'.
-+end
-+
-+define mod-add-symbols
-+ mod-add-symbols-align $arg0 $arg1 sizeof(long)
-+end
-+document mod-add-symbols
-+mod-add-symbols <module-address> <object file path name>
-+Load the symbols table of the module from the object file.
-+Default alignment is 4. See mod-add-symbols-align.
-+end
-+
-+define mod-add-lis
-+ mod-add-symbols-align $arg0 /usr/src/LiS/streams.o 16
-+end
-+document mod-add-lis
-+mod-add-lis <module-address>
-+Does mod-add-symbols <module-address> /usr/src/LiS/streams.o
-+end
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/Documentation/i386/kgdb/kgdb.txt 2003-07-19 17:04:05.000000000 -0700
-@@ -0,0 +1,716 @@
-+Last edit: <20030506.1615.42>
-+This file has information specific to the i386 kgdb option. Other
-+platforms with the kgdb option may behave in a similar fashion.
-+
-+New features:
-+============
-+20030505.1827.27
-+We are starting to align with the sourceforge version, at least in
-+commands. To this end, the boot command string to start kgdb at
-+boot time has been changed from "kgdb" to "gdb".
-+
-+Andrew Morton sent a couple of patches which are now included as follows:
-+1.) We now return a flag to the interrupt handler.
-+2.) We no longer use smp_num_cpus (a conflict with the lock meter).
-+3.) And from William Lee Irwin III <wli@holomorphy.com> code to make
-+ sure high-mem is set up before we attempt to register our interrupt
-+ handler.
-+We now include asm/kgdb.h from config.h so you will most likely never
-+have to include it. It also 'NULLS' the kgdb macros you might have in
-+your code when CONFIG_KGDB is not defined. This allows you to just
-+turn off CONFIG_KGDB to turn off all the kgdb_ts() calls and such.
-+This include is conditioned on the machine being an x86 so as to not
-+mess with other archs.
-+
-+20020801.1129.03
-+This is currently the version for the 2.4.18 (and beyond?) kernel.
-+
-+We have several new "features" beginning with this version:
-+
-+1.) Kgdb now syncs the "other" CPUs with a cross-CPU NMI. No more
-+ waiting and it will pull that guy out of an IRQ off spin lock :)
-+
-+2.) We doctored up the code that tells where a task is waiting and
-+ included it so that the "info thread" command will show a bit more
-+ than "schedule()". Try it...
-+
-+3.) Added the ability to call a function from gdb. All the standard gdb
-+ issues apply, i.e. if you hit a breakpoint in the function, you are
-+ not allowed to call another (gdb limitation, not kgdb). To help
-+ this capability we added a memory allocation function. Gdb does not
-+ return this memory (it is used for strings that you pass to that function
-+ you are calling from gdb) so we fixed up a way to allow you to
-+ manually return the memory (see below).
-+
-+4.) Kgdb time stamps (kgdb_ts()) are enhanced to expand what was the
-+ interrupt flag to now also include the preemption count and the
-+ "in_interrupt" info. The flag is now called "with_pif" to indicate
-+ the order, preempt_count, in_interrupt, flag. The preempt_count is
-+ shifted left by 4 bits so you can read the count in hex by dropping
-+ the low order digit. In_interrupt is in bit 1, and the flag is in
-+ bit 0.
-+
-+5.) The command: "p kgdb_info" is now expanded and prints something
-+ like:
-+(gdb) p kgdb_info
-+$2 = {used_malloc = 0, called_from = 0xc0107506, entry_tsc = 67468627259,
-+ errcode = 0, vector = 3, print_debug_info = 0, hold_on_sstep = 1,
-+ cpus_waiting = {{task = 0xc027a000, pid = 32768, hold = 0,
-+ regs = 0xc027bf84}, {task = 0x0, pid = 0, hold = 0, regs = 0x0}}}
-+
-+ Things to note here: a.) used_malloc is the amount of memory that
-+ has been malloc'ed to do calls from gdb. You can reclaim this
-+ memory like this: "p kgdb_info.used_malloc=0" Cool, huh? b.)
-+ cpus_waiting is now "sized" by the number of CPUs you enter at
-+ configure time in the kgdb configure section. This is NOT used
-+ anywhere else in the system, but it is "nice" here. c.) The task's
-+ "pid" is now in the structure. This is the pid you will need to use
-+ to decode to the thread id to get gdb to look at that thread.
-+ Remember that the "info thread" command prints a list of threads
-+ wherein it numbers each thread with its reference number followed
-+ by the thread's pid. Note that the per-CPU idle threads actually
-+ have pids of 0 (yes, there is more than one pid 0 in an SMP system).
-+ To avoid confusion, kgdb numbers these threads with numbers beyond
-+ the MAX_PID. That is why you see 32768 and above.
-+
-+6.) A subtle change, we now provide the complete register set for tasks
-+ that are active on the other CPUs. This allows better trace back on
-+ those tasks.
-+
-+ And, let's mention what we could not fix. Back-trace from all but the
-+ thread that we trapped will, most likely, have a bogus entry in it.
-+ The problem is that gdb does not recognize the entry code for
-+ functions that use "current" near (at all?) the entry. The compiler
-+ is putting the "current" decode as the first two instructions of the
-+ function where gdb expects to find %ebp changing code. Back trace
-+ also has trouble with interrupt frames. I am talking with Daniel
-+ Jacobowitz about some way to fix this, but don't hold your breath.
-+
-+20011220.0050.35
-+Major enhancement with this version is the ability to hold one or more
-+CPUs in an SMP system while allowing the others to continue. Also, by
-+default only the current CPU is enabled on single-step commands (please
-+note that gdb issues single-step commands at times other than when you
-+use the si command).
-+
-+Another change is to collect some useful information in
-+a global structure called "kgdb_info". You should be able to just:
-+
-+p kgdb_info
-+
-+although I have seen cases where the first time this is done gdb just
-+prints the first member but prints the whole structure if you then enter
-+CR (carriage return or enter). This also works:
-+
-+p *&kgdb_info
-+
-+Here is a sample:
-+(gdb) p kgdb_info
-+$4 = {called_from = 0xc010732c, entry_tsc = 32804123790856, errcode = 0,
-+ vector = 3, print_debug_info = 0}
-+
-+"Called_from" is the return address from the current entry into kgdb.
-+Sometimes it is useful to know why you are in kgdb, for example, was
-+it an NMI or a real breakpoint? The simple way to interrogate this
-+return address is:
-+
-+l *0xc010732c
-+
-+which will print the surrounding few lines of source code.
-+
-+"Entry_tsc" is the CPU TSC on entry to kgdb (useful to compare to the
-+kgdb_ts entries).
-+
-+"errcode" and "vector" are other entry parameters which may be helpful on
-+some traps.
-+
-+"print_debug_info" is the internal debugging kgdb print enable flag. Yes,
-+you can modify it.
-+
-+In SMP systems kgdb_info also includes the "cpus_waiting" structure and
-+"hold_on_step":
-+
-+(gdb) p kgdb_info
-+$7 = {called_from = 0xc0112739, entry_tsc = 1034936624074, errcode = 0,
-+ vector = 2, print_debug_info = 0, hold_on_sstep = 1, cpus_waiting = {{
-+ task = 0x0, hold = 0, regs = 0x0}, {task = 0xc71b8000, hold = 0,
-+ regs = 0xc71b9f70}, {task = 0x0, hold = 0, regs = 0x0}, {task = 0x0,
-+ hold = 0, regs = 0x0}, {task = 0x0, hold = 0, regs = 0x0}, {task = 0x0,
-+ hold = 0, regs = 0x0}, {task = 0x0, hold = 0, regs = 0x0}, {task = 0x0,
-+ hold = 0, regs = 0x0}}}
-+
-+"Cpus_waiting" has an entry for each CPU other than the current one that
-+has been stopped. Each entry contains the task_struct address for that
-+CPU, the address of the regs for that task and a hold flag. All these
-+have the proper typing so that, for example:
-+
-+p *kgdb_info.cpus_waiting[1].regs
-+
-+will print the registers for CPU 1.
-+
-+"Hold_on_sstep" is a new feature with this version and comes up set or
-+true. What this means is that whenever kgdb is asked to single-step all
-+other CPUs are held (i.e. not allowed to execute). The flag applies to
-+all but the current CPU and, again, can be changed:
-+
-+p kgdb_info.hold_on_sstep=0
-+
-+restores the old behavior of letting all CPUs run during single-stepping.
-+
-+Likewise, each CPU has a "hold" flag, which if set, locks that CPU out
-+of execution. Note that this has some risk in cases where the CPUs need
-+to communicate with each other. If kgdb finds no CPU available on exit,
-+it will push a message thru gdb and stay in kgdb. Note that it is legal
-+to hold the current CPU as long as at least one CPU can execute.
-+
-+20010621.1117.09
-+This version implements an event queue. Events are signaled by calling
-+a function in the kgdb stub and may be examined from gdb. See EVENTS
-+below for details. This version also tightens up the interrupt and SMP
-+handling to not allow interrupts on the way to kgdb from a breakpoint
-+trap. It is fine to allow these interrupts for user code, but not
-+system debugging.
-+
-+Version
-+=======
-+
-+This version of the kgdb package was developed and tested on
-+kernel version 2.4.16. It will not install on any earlier kernels.
-+It is possible that it will continue to work on later versions
-+of 2.4 and then versions of 2.5 (I hope).
-+
-+
-+Debugging Setup
-+===============
-+
-+Designate one machine as the "development" machine. This is the
-+machine on which you run your compiles and which has your source
-+code for the kernel. Designate a second machine as the "target"
-+machine. This is the machine that will run your experimental
-+kernel.
-+
-+The two machines will be connected together via a serial line out
-+one or the other of the COM ports of the PC. You will need the
-+appropriate modem eliminator (null modem) cable(s) for this.
-+
-+Decide on which tty port you want the machines to communicate, then
-+connect them up back-to-back using the null modem cable. COM1 is
-+/dev/ttyS0 and COM2 is /dev/ttyS1. You should test this connection
-+with the two machines prior to trying to debug a kernel. Once you
-+have it working, on the TARGET machine, enter:
-+
-+setserial /dev/ttyS0 (or what ever tty you are using)
-+
-+and record the port address and the IRQ number.
-+
-+On the DEVELOPMENT machine you need to apply the patch for the kgdb
-+hooks. You have probably already done that if you are reading this
-+file.
-+
-+On your DEVELOPMENT machine, go to your kernel source directory and do
-+"make Xconfig" where X is one of "x", "menu", or "". If you are
-+configuring in the standard serial driver, it must not be a module.
-+Either yes or no is ok, but making the serial driver a module means it
-+will initialize after kgdb has set up the UART interrupt code and may
-+cause a failure of the control-C option discussed below. The configure
-+question for the serial driver is under the "Character devices" heading
-+and is:
-+
-+"Standard/generic (8250/16550 and compatible UARTs) serial support"
-+
-+Go down to the kernel debugging menu item and open it up. Enable the
-+kernel kgdb stub code by selecting that item. You can also choose to
-+turn on the "-ggdb -O1" compile options. The -ggdb causes the compiler
-+to put more debug info (like local symbols) in the object file. On the
-+i386 -g and -ggdb are the same so this option just reduces to "O1". The
-+-O1 reduces the optimization level. This may be helpful in some cases,
-+be aware, however, that this may also mask the problem you are looking
-+for.
-+
-+The baud rate. Default is 115200. What ever you choose be sure that
-+the host machine is set to the same speed. I recommend the default.
-+
-+The port. This is the I/O address of the serial UART that you should
-+have gotten using setserial as described above. The standard COM1 port
-+(3f8) using IRQ 4 is default. COM2 is 2f8 which by convention uses IRQ
-+3.
-+
-+The port IRQ (see above).
-+
-+Stack overflow test. This option makes a minor change in the trap,
-+system call and interrupt code to detect stack overflow and transfer
-+control to kgdb if it happens. (Some platforms have this in the
-+baseline code, but the i386 does not.)
-+
-+You can also configure the system to recognize the boot option
-+"console=kgdb" which if given will cause all console output during
-+booting to be put thru gdb as well as other consoles. This option
-+requires that gdb and kgdb be connected prior to sending console output
-+so, if they are not, a breakpoint is executed to force the connection.
-+This will happen before any kernel output (it is going thru gdb, right),
-+and will stall the boot until the connection is made.
-+
-+You can also configure in a patch to SysRq to enable the kGdb SysRq.
-+This request generates a breakpoint. Since the serial port IRQ line is
-+set up after any serial drivers, it is possible that this command will
-+work when the control-C will not.
-+
-+Save and exit the Xconfig program. Then do "make clean" , "make dep"
-+and "make bzImage" (or whatever target you want to make). This gets the
-+kernel compiled with the "-g" option set -- necessary for debugging.
-+
-+You have just built the kernel on your DEVELOPMENT machine that you
-+intend to run on your TARGET machine.
-+
-+To install this new kernel, use the following installation procedure.
-+Remember, you are on the DEVELOPMENT machine patching the kernel source
-+for the kernel that you intend to run on the TARGET machine.
-+
-+Copy this kernel to your target machine using your usual procedures. I
-+usually arrange to copy development:
-+/usr/src/linux/arch/i386/boot/bzImage to /vmlinuz on the TARGET machine
-+via a LAN based NFS access. That is, I run the cp command on the target
-+and copy from the development machine via the LAN. Run Lilo (see "man
-+lilo" for details on how to set this up) on the new kernel on the target
-+machine so that it will boot! Then boot the kernel on the target
-+machine.
-+
-+On the DEVELOPMENT machine, create a file called .gdbinit in the
-+directory /usr/src/linux. An example .gdbinit file looks like this:
-+
-+shell echo -e "\003" >/dev/ttyS0
-+set remotebaud 38400 (or what ever speed you have chosen)
-+target remote /dev/ttyS0
-+
-+
-+Change the "echo" and "target" definition so that it specifies the tty
-+port that you intend to use. Change the "remotebaud" definition to
-+match the data rate that you are going to use for the com line.
-+
-+You are now ready to try it out.
-+
-+Boot your target machine with "kgdb" in the boot command i.e. something
-+like:
-+
-+lilo> test kgdb
-+
-+or if you also want console output thru gdb:
-+
-+lilo> test kgdb console=kgdb
-+
-+You should see the lilo message saying it has loaded the kernel and then
-+all output stops. The kgdb stub is trying to connect with gdb. Start
-+gdb something like this:
-+
-+
-+On your DEVELOPMENT machine, cd /usr/src/linux and enter "gdb vmlinux".
-+When gdb gets the symbols loaded it will read your .gdbinit file and, if
-+everything is working correctly, you should see gdb print out a few
-+lines indicating that a breakpoint has been taken. It will actually
-+show a line of code in the target kernel inside the kgdb activation
-+code.
-+
-+The gdb interaction should look something like this:
-+
-+ linux-dev:/usr/src/linux# gdb vmlinux
-+ GDB is free software and you are welcome to distribute copies of it
-+ under certain conditions; type "show copying" to see the conditions.
-+ There is absolutely no warranty for GDB; type "show warranty" for details.
-+ GDB 4.15.1 (i486-slackware-linux),
-+ Copyright 1995 Free Software Foundation, Inc...
-+ breakpoint () at i386-stub.c:750
-+ 750 }
-+ (gdb)
-+
-+You can now use whatever gdb commands you like to set breakpoints.
-+Enter "continue" to start your target machine executing again. At this
-+point the target system will run at full speed until it encounters
-+your breakpoint or gets a segment violation in the kernel, or whatever.
-+
-+If you have the kgdb console enabled when you continue, gdb will print
-+out all the console messages.
-+
-+The above example caused a breakpoint relatively early in the boot
-+process. For the i386 kgdb it is possible to code a break instruction
-+as the first C-language point in init/main.c, i.e. as the first instruction
-+in start_kernel(). This could be done as follows:
-+
-+#include <asm/kgdb.h>
-+ breakpoint();
-+
-+This breakpoint() is really a function that sets up the breakpoint and
-+single-step hardware trap cells and then executes a breakpoint. Any
-+early hard coded breakpoint will need to use this function. Once the
-+trap cells are set up they need not be set again, but doing it again
-+does not hurt anything, so you don't need to be concerned about which
-+breakpoint is hit first. Once the trap cells are set up (and the kernel
-+sets them up in due course even if breakpoint() is never called) the
-+macro:
-+
-+BREAKPOINT;
-+
-+will generate an inline breakpoint. This may be more useful as it stops
-+the processor at the instruction instead of in a function a step removed
-+from the location of interest. In either case <asm/kgdb.h> must be
-+included to define both breakpoint() and BREAKPOINT.
-+
-+Triggering kgdbstub at other times
-+==================================
-+
-+Often you don't need to enter the debugger until much later in the boot
-+or even after the machine has been running for some time. Once the
-+kernel is booted and interrupts are on, you can force the system to
-+enter the debugger by sending a control-C to the debug port. This is
-+what the first line of the recommended .gdbinit file does. This allows
-+you to start gdb any time after the system is up as well as when the
-+system is already at a breakpoint. (In the case where the system is
-+already at a breakpoint the control-C is not needed, however, it will
-+be ignored by the target so no harm is done. Also note the the echo
-+command assumes that the port speed is already set. This will be true
-+once gdb has connected, but it is best to set the port speed before you
-+run gdb.)
-+
-+Another simple way to do this is to put the following file in you ~/bin
-+directory:
-+
-+#!/bin/bash
-+echo -e "\003" > /dev/ttyS0
-+
-+Here, the ttyS0 should be replaced with what ever port you are using.
-+The "\003" is control-C. Once you are connected with gdb, you can enter
-+control-C at the command prompt.
-+
-+An alternative way to get control to the debugger is to enable the kGdb
-+SysRq command. Then you would enter Alt-SysRq-g (all three keys at the
-+same time, but push them down in the order given). To refresh your
-+memory of the available SysRq commands try Alt-SysRq-=. Actually any
-+undefined command could replace the "=", but I like to KNOW that what I
-+am pushing will never be defined.
-+
-+Debugging hints
-+===============
-+
-+You can break into the target machine at any time from the development
-+machine by typing ^C (see above paragraph). If the target machine has
-+interrupts enabled this will stop it in the kernel and enter the
-+debugger.
-+
-+There is unfortunately no way of breaking into the kernel if it is
-+in a loop with interrupts disabled, so if this happens to you then
-+you need to place exploratory breakpoints or printk's into the kernel
-+to find out where it is looping. The exploratory breakpoints can be
-+entered either thru gdb or hard coded into the source. This is very
-+handy if you do something like:
-+
-+if (<it hurts>) BREAKPOINT;
-+
-+
-+There is a copy of an e-mail in the Documentation/i386/kgdb/ directory
-+(debug-nmi.txt) which describes how to create an NMI on an ISA bus
-+machine using a paper clip. I have a sophisticated version of this made
-+by wiring a push button switch into a PC104/ISA bus adapter card. The
-+adapter card nicely furnishes wire wrap pins for all the ISA bus
-+signals.
-+
-+When you are done debugging the kernel on the target machine it is a
-+good idea to leave it in a running state. This makes reboots faster,
-+bypassing the fsck. So do a gdb "continue" as the last gdb command if
-+this is possible. To terminate gdb itself on the development machine
-+and leave the target machine running, first clear all breakpoints and
-+continue, then type ^Z to suspend gdb and then kill it with "kill %1" or
-+something similar.
-+
-+If gdbstub Does Not Work
-+========================
-+
-+If it doesn't work, you will have to troubleshoot it. Do the easy
-+things first like double checking your cabling and data rates. You
-+might try some non-kernel based programs to see if the back-to-back
-+connection works properly. Just something simple like cat /etc/hosts
-+>/dev/ttyS0 on one machine and cat /dev/ttyS0 on the other will tell you
-+if you can send data from one machine to the other. Make sure it works
-+in both directions. There is no point in tearing out your hair in the
-+kernel if the line doesn't work.
-+
-+All of the real action takes place in the file
-+/usr/src/linux/arch/i386/kernel/kgdb_stub.c. That is the code on the target
-+machine that interacts with gdb on the development machine. In gdb you can
-+turn on a debug switch with the following command:
-+
-+ set remotedebug
-+
-+This will print out the protocol messages that gdb is exchanging with
-+the target machine.
-+
-+Another place to look is /usr/src/arch/i386/lib/kgdb_serial.c. This is
-+the code that talks to the serial port on the target side. There might
-+be a problem there. In particular there is a section of this code that
-+tests the UART which will tell you what UART you have if you define
-+"PRNT" (just remove "_off" from the #define PRNT_off). To view this
-+report you will need to boot the system without any beakpoints. This
-+allows the kernel to run to the point where it calls kgdb to set up
-+interrupts. At this time kgdb will test the UART and print out the type
-+it finds. (You need to wait so that the printks are actually being
-+printed. Early in the boot they are cached, waiting for the console to
-+be enabled. Also, if kgdb is entered thru a breakpoint it is possible
-+to cause a dead lock by calling printk when the console is locked. The
-+stub thus avoids doing printks from breakpoints, especially in the
-+serial code.) At this time, if the UART fails to do the expected thing,
-+kgdb will print out (using printk) information on what failed. (These
-+messages will be buried in all the other boot up messages. Look for
-+lines that start with "gdb_hook_interrupt:". You may want to use dmesg
-+once the system is up to view the log. If this fails or if you still
-+don't connect, review your answers for the port address. Use:
-+
-+setserial /dev/ttyS0
-+
-+to get the current port and IRQ information. This command will also
-+tell you what the system found for the UART type. The stub recognizes
-+the following UART types:
-+
-+16450, 16550, and 16550A
-+
-+If you are really desperate you can use printk debugging in the
-+kgdbstub code in the target kernel until you get it working. In particular,
-+there is a global variable in /usr/src/linux/arch/i386/kernel/kgdb_stub.c
-+named "remote_debug". Compile your kernel with this set to 1, rather
-+than 0 and the debug stub will print out lots of stuff as it does
-+what it does. Likewise there are debug printks in the kgdb_serial.c
-+code that can be turned on with simple changes in the macro defines.
-+
-+
-+Debugging Loadable Modules
-+==========================
-+
-+This technique comes courtesy of Edouard Parmelan
-+<Edouard.Parmelan@quadratec.fr>
-+
-+When you run gdb, enter the command
-+
-+source gdbinit-modules
-+
-+This will read in a file of gdb macros that was installed in your
-+kernel source directory when kgdb was installed. This file implements
-+the following commands:
-+
-+mod-list
-+ Lists the loaded modules in the form <module-address> <module-name>
-+
-+mod-print-symbols <module-address>
-+ Prints all the symbols in the indicated module.
-+
-+mod-add-symbols <module-address> <object-file-path-name>
-+ Loads the symbols from the object file and associates them
-+ with the indicated module.
-+
-+After you have loaded the module that you want to debug, use the command
-+mod-list to find the <module-address> of your module. Then use that
-+address in the mod-add-symbols command to load your module's symbols.
-+From that point onward you can debug your module as if it were a part
-+of the kernel.
-+
-+The file gdbinit-modules also contains a command named mod-add-lis as
-+an example of how to construct a command of your own to load your
-+favorite module. The idea is to "can" the pathname of the module
-+in the command so you don't have to type so much.
-+
-+Threads
-+=======
-+
-+Each process in a target machine is seen as a gdb thread. gdb thread
-+related commands (info threads, thread n) can be used.
-+
-+ia-32 hardware breakpoints
-+==========================
-+
-+kgdb stub contains support for hardware breakpoints using debugging features
-+of ia-32(x86) processors. These breakpoints do not need code modification.
-+They use debugging registers. 4 hardware breakpoints are available in ia-32
-+processors.
-+
-+Each hardware breakpoint can be of one of the following three types.
-+
-+1. Execution breakpoint - An Execution breakpoint is triggered when code
-+ at the breakpoint address is executed.
-+
-+ As limited number of hardware breakpoints are available, it is
-+ advisable to use software breakpoints ( break command ) instead
-+ of execution hardware breakpoints, unless modification of code
-+ is to be avoided.
-+
-+2. Write breakpoint - A write breakpoint is triggered when memory
-+ location at the breakpoint address is written.
-+
-+ A write or can be placed for data of variable length. Length of
-+ a write breakpoint indicates length of the datatype to be
-+ watched. Length is 1 for 1 byte data , 2 for 2 byte data, 3 for
-+ 4 byte data.
-+
-+3. Access breakpoint - An access breakpoint is triggered when memory
-+ location at the breakpoint address is either read or written.
-+
-+ Access breakpoints also have lengths similar to write breakpoints.
-+
-+IO breakpoints in ia-32 are not supported.
-+
-+Since gdb stub at present does not use the protocol used by gdb for hardware
-+breakpoints, hardware breakpoints are accessed through gdb macros. gdb macros
-+for hardware breakpoints are described below.
-+
-+hwebrk - Places an execution breakpoint
-+ hwebrk breakpointno address
-+hwwbrk - Places a write breakpoint
-+ hwwbrk breakpointno length address
-+hwabrk - Places an access breakpoint
-+ hwabrk breakpointno length address
-+hwrmbrk - Removes a breakpoint
-+ hwrmbrk breakpointno
-+exinfo - Tells whether a software or hardware breakpoint has occurred.
-+ Prints number of the hardware breakpoint if a hardware breakpoint has
-+ occurred.
-+
-+Arguments required by these commands are as follows
-+breakpointno - 0 to 3
-+length - 1 to 3
-+address - Memory location in hex digits ( without 0x ) e.g c015e9bc
-+
-+SMP support
-+==========
-+
-+When a breakpoint occurs or user issues a break ( Ctrl + C ) to gdb
-+client, all the processors are forced to enter the debugger. Current
-+thread corresponds to the thread running on the processor where
-+breakpoint occurred. Threads running on other processor(s) appear
-+similar to other non-running threads in the 'info threads' output.
-+Within the kgdb stub there is a structure "waiting_cpus" in which kgdb
-+records the values of "current" and "regs" for each CPU other than the
-+one that hit the breakpoint. "current" is a pointer to the task
-+structure for the task that CPU is running, while "regs" points to the
-+saved registers for the task. This structure can be examined with the
-+gdb "p" command.
-+
-+ia-32 hardware debugging registers on all processors are set to same
-+values. Hence any hardware breakpoints may occur on any processor.
-+
-+gdb troubleshooting
-+===================
-+
-+1. gdb hangs
-+Kill it. restart gdb. Connect to target machine.
-+
-+2. gdb cannot connect to target machine (after killing a gdb and
-+restarting another) If the target machine was not inside debugger when
-+you killed gdb, gdb cannot connect because the target machine won't
-+respond. In this case echo "Ctrl+C"(ASCII 3) to the serial line.
-+e.g. echo -e "\003" > /dev/ttyS1
-+This forces that target machine into the debugger, after which you
-+can connect.
-+
-+3. gdb cannot connect even after echoing Ctrl+C into serial line
-+Try changing serial line settings min to 1 and time to 0
-+e.g. stty min 1 time 0 < /dev/ttyS1
-+Try echoing again
-+
-+Check serial line speed and set it to correct value if required
-+e.g. stty ispeed 115200 ospeed 115200 < /dev/ttyS1
-+
-+EVENTS
-+======
-+
-+Ever want to know the order of things happening? Which CPU did what and
-+when? How did the spinlock get the way it is? Then events are for
-+you. Events are defined by calls to an event collection interface and
-+saved for later examination. In this case, kgdb events are saved by a
-+very fast bit of code in kgdb which is fully SMP and interrupt protected
-+and they are examined by using gdb to display them. Kgdb keeps only
-+the last N events, where N must be a power of two and is defined at
-+configure time.
-+
-+
-+Events are signaled to kgdb by calling:
-+
-+kgdb_ts(data0,data1)
-+
-+For each call kgdb records each call in an array along with other info.
-+Here is the array definition:
-+
-+struct kgdb_and_then_struct {
-+#ifdef CONFIG_SMP
-+ int on_cpu;
-+#endif
-+ long long at_time;
-+ int from_ln;
-+ char * in_src;
-+ void *from;
-+ int with_if;
-+ int data0;
-+ int data1;
-+};
-+
-+For SMP machines the CPU is recorded, for all machines the TSC is
-+recorded (gets a time stamp) as well as the line number and source file
-+the call was made from. The address of the (from), the "if" (interrupt
-+flag) and the two data items are also recorded. The macro kgdb_ts casts
-+the types to int, so you can put any 32-bit values here. There is a
-+configure option to select the number of events you want to keep. A
-+nice number might be 128, but you can keep up to 1024 if you want. The
-+number must be a power of two. An "andthen" macro library is provided
-+for gdb to help you look at these events. It is also possible to define
-+a different structure for the event storage and cast the data to this
-+structure. For example the following structure is defined in kgdb:
-+
-+struct kgdb_and_then_struct2 {
-+#ifdef CONFIG_SMP
-+ int on_cpu;
-+#endif
-+ long long at_time;
-+ int from_ln;
-+ char * in_src;
-+ void *from;
-+ int with_if;
-+ struct task_struct *t1;
-+ struct task_struct *t2;
-+};
-+
-+If you use this for display, the data elements will be displayed as
-+pointers to task_struct entries. You may want to define your own
-+structure to use in casting. You should only change the last two items
-+and you must keep the structure size the same. Kgdb will handle these
-+as 32-bit ints, but within that constraint you can define a structure to
-+cast to any 32-bit quantity. This need only be available to gdb and is
-+only used for casting in the display code.
-+
-+Final Items
-+===========
-+
-+I picked up this code from Amit S. Kale and enhanced it.
-+
-+If you make some really cool modification to this stuff, or if you
-+fix a bug, please let me know.
-+
-+George Anzinger
-+<george@mvista.com>
-+
-+Amit S. Kale
-+<akale@veritas.com>
-+
-+(First kgdb by David Grothe <dave@gcom.com>)
-+
-+(modified by Tigran Aivazian <tigran@sco.com>)
-+ Putting gdbstub into the kernel config menu.
-+
-+(modified by Scott Foehner <sfoehner@engr.sgi.com>)
-+ Hooks for entering gdbstub at boot time.
-+
-+(modified by Amit S. Kale <akale@veritas.com>)
-+ Threads, ia-32 hw debugging, mp support, console support,
-+ nmi watchdog handling.
-+
-+(modified by George Anzinger <george@mvista.com>)
-+ Extended threads to include the idle threads.
-+ Enhancements to allow breakpoint() at first C code.
-+ Use of module_init() and __setup() to automate the configure.
-+ Enhanced the cpu "collection" code to work in early bring-up.
-+ Added ability to call functions from gdb
-+ Print info thread stuff without going back to schedule()
-+ Now collect the "other" cpus with an IPI/ NMI.
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/Documentation/i386/kgdb/loadmodule.sh 2003-07-19 17:04:02.000000000 -0700
-@@ -0,0 +1,78 @@
-+#/bin/sh
-+# This script loads a module on a target machine and generates a gdb script.
-+# source generated gdb script to load the module file at appropriate addresses
-+# in gdb.
-+#
-+# Usage:
-+# Loading the module on target machine and generating gdb script)
-+# [foo]$ loadmodule.sh <modulename>
-+#
-+# Loading the module file into gdb
-+# (gdb) source <gdbscriptpath>
-+#
-+# Modify following variables according to your setup.
-+# TESTMACHINE - Name of the target machine
-+# GDBSCRIPTS - The directory where a gdb script will be generated
-+#
-+# Author: Amit S. Kale (akale@veritas.com).
-+#
-+# If you run into problems, please check files pointed to by following
-+# variables.
-+# ERRFILE - /tmp/<modulename>.errs contains stderr output of insmod
-+# MAPFILE - /tmp/<modulename>.map contains stdout output of insmod
-+# GDBSCRIPT - $GDBSCRIPTS/load<modulename> gdb script.
-+
-+TESTMACHINE=foo
-+GDBSCRIPTS=/home/bar
-+
-+if [ $# -lt 1 ] ; then {
-+ echo Usage: $0 modulefile
-+ exit
-+} ; fi
-+
-+MODULEFILE=$1
-+MODULEFILEBASENAME=`basename $1`
-+
-+if [ $MODULEFILE = $MODULEFILEBASENAME ] ; then {
-+ MODULEFILE=`pwd`/$MODULEFILE
-+} fi
-+
-+ERRFILE=/tmp/$MODULEFILEBASENAME.errs
-+MAPFILE=/tmp/$MODULEFILEBASENAME.map
-+GDBSCRIPT=$GDBSCRIPTS/load$MODULEFILEBASENAME
-+
-+function findaddr() {
-+ local ADDR=0x$(echo "$SEGMENTS" | \
-+ grep "$1" | sed 's/^[^ ]*[ ]*[^ ]*[ ]*//' | \
-+ sed 's/[ ]*[^ ]*$//')
-+ echo $ADDR
-+}
-+
-+function checkerrs() {
-+ if [ "`cat $ERRFILE`" != "" ] ; then {
-+ cat $ERRFILE
-+ exit
-+ } fi
-+}
-+
-+#load the module
-+echo Copying $MODULEFILE to $TESTMACHINE
-+rcp $MODULEFILE root@${TESTMACHINE}:
-+
-+echo Loading module $MODULEFILE
-+rsh -l root $TESTMACHINE /sbin/insmod -m ./`basename $MODULEFILE` \
-+ > $MAPFILE 2> $ERRFILE
-+checkerrs
-+
-+SEGMENTS=`head -n 11 $MAPFILE | tail -n 10`
-+TEXTADDR=$(findaddr "\\.text[^.]")
-+LOADSTRING="add-symbol-file $MODULEFILE $TEXTADDR"
-+SEGADDRS=`echo "$SEGMENTS" | awk '//{
-+ if ($1 != ".text" && $1 != ".this" &&
-+ $1 != ".kstrtab" && $1 != ".kmodtab") {
-+ print " -s " $1 " 0x" $3 " "
-+ }
-+}'`
-+LOADSTRING="$LOADSTRING $SEGADDRS"
-+echo Generating script $GDBSCRIPT
-+echo $LOADSTRING > $GDBSCRIPT
---- linux-2.6.0-test1/Documentation/magic-number.txt 2003-06-14 12:18:23.000000000 -0700
-+++ 25/Documentation/magic-number.txt 2003-07-19 17:03:49.000000000 -0700
-@@ -51,6 +51,13 @@ kernel before 2.6.x yet.
- <pasky@ucw.cz>
- 03 Nov 2002
-
-+Updated the magic table to Linux 2.5.74.
-+
-+ Fabian Frederick
-+ <ffrederick@users.sourceforge.net>
-+ 09 Jul 2003
-+
-+
- Magic Name Number Structure File
- ===========================================================================
- PG_MAGIC 'P' pg_{read,write}_hdr include/linux/pg.h
-@@ -62,10 +69,12 @@ AURORA_MAGIC 0x0A18 Aurora
- HDLC_MAGIC 0x239e n_hdlc drivers/char/n_hdlc.c
- APM_BIOS_MAGIC 0x4101 apm_user arch/i386/kernel/apm.c
- CYCLADES_MAGIC 0x4359 cyclades_port include/linux/cyclades.h
-+DB_MAGIC 0x4442 fc_info drivers/net/iph5526_novram.c
-+DL_MAGIC 0x444d fc_info drivers/net/iph5526_novram.c
- FASYNC_MAGIC 0x4601 fasync_struct include/linux/fs.h
-+FF_MAGIC 0x4646 fc_info drivers/net/iph5526_novram.c
- ISICOM_MAGIC 0x4d54 isi_port include/linux/isicom.h
--PTY_MAGIC 0x5001 (none at the moment)
-- drivers/char/pty.c
-+PTY_MAGIC 0x5001 drivers/char/pty.c
- PPP_MAGIC 0x5002 ppp include/linux/if_pppvar.h
- SERIAL_MAGIC 0x5301 async_struct include/linux/serial.h
- SSTATE_MAGIC 0x5302 serial_state include/linux/serial.h
-@@ -81,9 +90,9 @@ TTY_DRIVER_MAGIC 0x5402 tty_dr
- MGSLPC_MAGIC 0x5402 mgslpc_info drivers/char/pcmcia/synclink_cs.c
- TTY_LDISC_MAGIC 0x5403 tty_ldisc include/linux/tty_ldisc.h
- USB_SERIAL_MAGIC 0x6702 usb_serial drivers/usb/serial/usb-serial.h
-+FULL_DUPLEX_MAGIC 0x6969 drivers/net/tulip/de2104x.c
- USB_BLUETOOTH_MAGIC 0x6d02 usb_bluetooth drivers/usb/class/bluetty.c
--RFCOMM_TTY_MAGIC 0x6d02 (note at the moment)
-- net/bluetooth/rfcomm/tty.c
-+RFCOMM_TTY_MAGIC 0x6d02 net/bluetooth/rfcomm/tty.c
- USB_SERIAL_PORT_MAGIC 0x7301 usb_serial_port drivers/usb/serial/usb-serial.h
- CG_MAGIC 0x00090255 ufs_cylinder_group include/linux/ufs_fs.h
- A2232_MAGIC 0x000a2232 gs_port drivers/char/ser_a2232.h
-@@ -91,6 +100,7 @@ SOLARIS_SOCKET_MAGIC 0x000ADDED sol_so
- RPORT_MAGIC 0x00525001 r_port drivers/char/rocket_int.h
- LSEMAGIC 0x05091998 lse drivers/fc4/fc.c
- GDTIOCTL_MAGIC 0x06030f07 gdth_iowr_str drivers/scsi/gdth_ioctl.h
-+RIEBL_MAGIC 0x09051990 drivers/net/atarilance.c
- RIO_MAGIC 0x12345678 gs_port drivers/char/rio/rio_linux.c
- SX_MAGIC 0x12345678 gs_port drivers/char/sx.h
- NBD_REQUEST_MAGIC 0x12560953 nbd_request include/linux/nbd.h
-@@ -120,6 +130,7 @@ SAVEKMSG_MAGIC1 0x53415645 savekm
- GDA_MAGIC 0x58464552 gda include/asm-mips64/sn/gda.h
- RED_MAGIC1 0x5a2cf071 (any) mm/slab.c
- STL_PORTMAGIC 0x5a7182c9 stlport include/linux/stallion.h
-+EEPROM_MAGIC_VALUE 0X5ab478d2 lanai_dev drivers/atm/lanai.c
- HDLCDRV_MAGIC 0x5ac6e778 hdlcdrv_state include/linux/hdlcdrv.h
- EPCA_MAGIC 0x5c6df104 channel include/linux/epca.h
- PCXX_MAGIC 0x5c6df104 channel drivers/char/pcxx.h
-@@ -127,9 +138,11 @@ KV_MAGIC 0x5f4b565f kernel
- I810_STATE_MAGIC 0x63657373 i810_state sound/oss/i810_audio.c
- TRIDENT_STATE_MAGIC 0x63657373 trient_state sound/oss/trident.c
- M3_CARD_MAGIC 0x646e6f50 m3_card sound/oss/maestro3.c
-+FW_HEADER_MAGIC 0x65726F66 fw_header drivers/atm/fore200e.h
- SLOT_MAGIC 0x67267321 slot drivers/hotplug/cpqphp.h
- SLOT_MAGIC 0x67267322 slot drivers/hotplug/acpiphp.h
- LO_MAGIC 0x68797548 nbd_device include/linux/nbd.h
-+OPROFILE_MAGIC 0x6f70726f super_block drivers/oprofile/oprofilefs.h
- M3_STATE_MAGIC 0x734d724d m3_state sound/oss/maestro3.c
- STL_PANELMAGIC 0x7ef621a1 stlpanel include/linux/stallion.h
- VMALLOC_MAGIC 0x87654320 snd_alloc_track sound/core/memory.c
-@@ -137,11 +150,15 @@ KMALLOC_MAGIC 0x87654321 snd_al
- PWC_MAGIC 0x89DC10AB pwc_device drivers/usb/media/pwc.h
- NBD_REPLY_MAGIC 0x96744668 nbd_reply include/linux/nbd.h
- STL_BOARDMAGIC 0xa2267f52 stlbrd include/linux/stallion.h
-+ENI155_MAGIC 0xa54b872d midway_eprom drivers/atm/eni.h
- SCI_MAGIC 0xbabeface gs_port drivers/char/sh-sci.h
- CODA_MAGIC 0xC0DAC0DA coda_file_info include/linux/coda_fs_i.h
-+DPMEM_MAGIC 0xc0ffee11 gdt_pci_sram drivers/scsi/gdth.h
- STLI_PORTMAGIC 0xe671c7a1 stliport include/linux/istallion.h
- YAM_MAGIC 0xF10A7654 yam_port drivers/net/hamradio/yam.c
- CCB_MAGIC 0xf2691ad2 ccb drivers/scsi/ncr53c8xx.c
-+QUEUE_MAGIC_FREE 0xf7e1c9a3 queue_entry drivers/scsi/arm/queue.c
-+QUEUE_MAGIC_USED 0xf7e1cc33 queue_entry drivers/scsi/arm/queue.c
- HTB_CMAGIC 0xFEFAFEF1 htb_class net/sched/sch_htb.c
- NMI_MAGIC 0x48414d4d455201 nmi_s include/asm-mips64/sn/nmi.h
-
---- linux-2.6.0-test1/Documentation/networking/vortex.txt 2003-06-14 12:18:00.000000000 -0700
-+++ 25/Documentation/networking/vortex.txt 2003-07-19 17:05:08.000000000 -0700
-@@ -216,19 +216,6 @@ watchdog=N
- to increase this value on LANs which have very high collision rates.
- The default value is 5000 (5.0 seconds).
-
--enable_wol=N1,N2,N3,...
--
-- Enable Wake-on-LAN support for the relevant interface. Donald
-- Becker's `ether-wake' application may be used to wake suspended
-- machines.
--
-- Also enables the NIC's power management support.
--
--global_enable_wol=N
--
-- Sets enable_wol mode for all 3c59x NICs in the machine. Entries in
-- the `enable_wol' array above will override any setting of this.
--
- Media selection
- ---------------
-
---- linux-2.6.0-test1/Documentation/pnp.txt 2003-06-14 12:17:58.000000000 -0700
-+++ 25/Documentation/pnp.txt 2003-07-19 17:03:49.000000000 -0700
-@@ -22,7 +22,7 @@ user interface is integrated into driver
- In addition to the standard driverfs file the following are created in each
- device's directory:
- id - displays a list of support EISA IDs
--possible - displays possible resource configurations
-+options - displays possible resource configurations
- resources - displays currently allocated resources and allows resource changes
-
- -activating a device
-@@ -60,7 +60,7 @@ DISABLED
- - Notice the string "DISABLED". THis means the device is not active.
-
- 3.) check the device's possible configurations (optional)
--# cat possible
-+# cat options
- Dependent: 01 - Priority acceptable
- port 0x3f0-0x3f0, align 0x7, size 0x6, 16-bit address decoding
- port 0x3f7-0x3f7, align 0x0, size 0x1, 16-bit address decoding
---- linux-2.6.0-test1/drivers/acorn/block/fd1772.c 2003-06-14 12:18:06.000000000 -0700
-+++ 25/drivers/acorn/block/fd1772.c 2003-07-19 17:03:49.000000000 -0700
-@@ -152,8 +152,6 @@
- #include <asm/uaccess.h>
-
-
--#include <linux/blk.h>
--
- /* Note: FD_MAX_UNITS could be redefined to 2 for the Atari (with
- * little additional rework in this file). But I'm not yet sure if
- * some other code depends on the number of floppies... (It is defined
---- linux-2.6.0-test1/drivers/acorn/block/mfmhd.c 2003-06-14 12:18:01.000000000 -0700
-+++ 25/drivers/acorn/block/mfmhd.c 2003-07-19 17:03:49.000000000 -0700
-@@ -111,7 +111,6 @@
- #include <linux/major.h>
- #include <linux/ioport.h>
- #include <linux/delay.h>
--#include <linux/blk.h>
- #include <linux/blkpg.h>
-
- #include <asm/system.h>
---- linux-2.6.0-test1/drivers/acpi/executer/exutils.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/acpi/executer/exutils.c 2003-07-19 17:03:49.000000000 -0700
-@@ -290,7 +290,7 @@ acpi_ex_digits_needed (
- * acpi_integer is unsigned, so we don't worry about a '-'
- */
- if ((current_value = value) == 0) {
-- return_VALUE (1);
-+ return_VALUE (1);
- }
-
- num_digits = 0;
---- linux-2.6.0-test1/drivers/acpi/hardware/hwregs.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/acpi/hardware/hwregs.c 2003-07-19 17:03:49.000000000 -0700
-@@ -357,9 +357,9 @@ acpi_set_register (
-
- /*
- * Decode the Register ID
-- * Register id = Register block id | bit id
-+ * Register ID = [Register block ID] | [bit ID]
- *
-- * Check bit id to fine locate Register offset.
-+ * Check bit ID to fine locate Register offset.
- * Check Mask to determine Register offset, and then read-write.
- */
- switch (bit_reg_info->parent_register) {
-@@ -367,9 +367,9 @@ acpi_set_register (
-
- /*
- * Status Registers are different from the rest. Clear by
-- * writing 1, writing 0 has no effect. So, the only relevant
-+ * writing 1, and writing 0 has no effect. So, the only relevant
- * information is the single bit we're interested in, all others should
-- * be written as 0 so they will be left unchanged
-+ * be written as 0 so they will be left unchanged.
- */
- value = ACPI_REGISTER_PREPARE_BITS (value,
- bit_reg_info->bit_position, bit_reg_info->access_bit_mask);
-@@ -394,17 +394,17 @@ acpi_set_register (
- case ACPI_REGISTER_PM1_CONTROL:
-
- /*
-- * Read the PM1 Control register.
-+ * Write the PM1 Control register.
- * Note that at this level, the fact that there are actually TWO
-- * registers (A and B - and that B may not exist) is abstracted.
-+ * registers (A and B - and B may not exist) is abstracted.
- */
- ACPI_DEBUG_PRINT ((ACPI_DB_IO, "PM1 control: Read %X\n", register_value));
-
- ACPI_REGISTER_INSERT_VALUE (register_value, bit_reg_info->bit_position,
- bit_reg_info->access_bit_mask, value);
-
-- status = acpi_hw_register_write (ACPI_MTX_DO_NOT_LOCK, register_id,
-- (u16) register_value);
-+ status = acpi_hw_register_write (ACPI_MTX_DO_NOT_LOCK,
-+ ACPI_REGISTER_PM1_CONTROL, (u16) register_value);
- break;
-
-
-@@ -724,7 +724,7 @@ acpi_hw_low_level_read (
-
- /*
- * Three address spaces supported:
-- * Memory, Io, or PCI config.
-+ * Memory, IO, or PCI_Config.
- */
- switch (reg->address_space_id) {
- case ACPI_ADR_SPACE_SYSTEM_MEMORY:
-@@ -808,9 +808,10 @@ acpi_hw_low_level_write (
- (!reg->address)) {
- return (AE_OK);
- }
-+
- /*
- * Three address spaces supported:
-- * Memory, Io, or PCI config.
-+ * Memory, IO, or PCI_Config.
- */
- switch (reg->address_space_id) {
- case ACPI_ADR_SPACE_SYSTEM_MEMORY:
---- linux-2.6.0-test1/drivers/acpi/osl.c 2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/acpi/osl.c 2003-07-19 17:03:49.000000000 -0700
-@@ -35,6 +35,7 @@
- #include <linux/kmod.h>
- #include <linux/delay.h>
- #include <linux/workqueue.h>
-+#include <linux/nmi.h>
- #include <acpi/acpi.h>
- #include <asm/io.h>
- #include <acpi/acpi_bus.h>
-@@ -291,11 +292,14 @@ acpi_os_sleep(u32 sec, u32 ms)
- void
- acpi_os_stall(u32 us)
- {
-- if (us > 10000) {
-- mdelay(us / 1000);
-- }
-- else {
-- udelay(us);
-+ while (us) {
-+ u32 delay = 1000;
-+
-+ if (delay > us)
-+ delay = us;
-+ udelay(delay);
-+ touch_nmi_watchdog();
-+ us -= delay;
- }
- }
-
---- linux-2.6.0-test1/drivers/acpi/processor.c 2003-06-14 12:18:25.000000000 -0700
-+++ 25/drivers/acpi/processor.c 2003-07-19 17:03:49.000000000 -0700
-@@ -1351,7 +1351,7 @@ static int acpi_processor_throttling_ope
- PDE(inode)->data);
- }
-
--static int
-+static ssize_t
- acpi_processor_write_throttling (
- struct file *file,
- const char *buffer,
-@@ -1414,7 +1414,7 @@ static int acpi_processor_limit_open_fs(
- PDE(inode)->data);
- }
-
--static int
-+static ssize_t
- acpi_processor_write_limit (
- struct file *file,
- const char *buffer,
---- linux-2.6.0-test1/drivers/acpi/tables.c 2003-06-14 12:18:07.000000000 -0700
-+++ 25/drivers/acpi/tables.c 2003-07-19 17:03:49.000000000 -0700
-@@ -33,6 +33,7 @@
- #include <linux/irq.h>
- #include <linux/errno.h>
- #include <linux/acpi.h>
-+#include <linux/bootmem.h>
-
- #define PREFIX "ACPI: "
-
-@@ -61,16 +62,14 @@ static char *acpi_table_signatures[ACPI_
-
- /* System Description Table (RSDT/XSDT) */
- struct acpi_table_sdt {
-- unsigned long pa; /* Physical Address */
-- unsigned long count; /* Table count */
-- struct {
-- unsigned long pa;
-- enum acpi_table_id id;
-- unsigned long size;
-- } entry[ACPI_MAX_TABLES];
-+ unsigned long pa;
-+ enum acpi_table_id id;
-+ unsigned long size;
- } __attribute__ ((packed));
-
--static struct acpi_table_sdt sdt;
-+static unsigned long sdt_pa; /* Physical Address */
-+static unsigned long sdt_count; /* Table count */
-+static struct acpi_table_sdt *sdt_entry;
-
- void
- acpi_table_print (
-@@ -236,11 +235,11 @@ acpi_get_table_header_early (
-
- /* Locate the table. */
-
-- for (i = 0; i < sdt.count; i++) {
-- if (sdt.entry[i].id != temp_id)
-+ for (i = 0; i < sdt_count; i++) {
-+ if (sdt_entry[i].id != temp_id)
- continue;
- *header = (void *)
-- __acpi_map_table(sdt.entry[i].pa, sdt.entry[i].size);
-+ __acpi_map_table(sdt_entry[i].pa, sdt_entry[i].size);
- if (!*header) {
- printk(KERN_WARNING PREFIX "Unable to map %s\n",
- acpi_table_signatures[temp_id]);
-@@ -289,11 +288,11 @@ acpi_table_parse_madt_family (
-
- /* Locate the MADT (if exists). There should only be one. */
-
-- for (i = 0; i < sdt.count; i++) {
-- if (sdt.entry[i].id != id)
-+ for (i = 0; i < sdt_count; i++) {
-+ if (sdt_entry[i].id != id)
- continue;
- madt = (void *)
-- __acpi_map_table(sdt.entry[i].pa, sdt.entry[i].size);
-+ __acpi_map_table(sdt_entry[i].pa, sdt_entry[i].size);
- if (!madt) {
- printk(KERN_WARNING PREFIX "Unable to map %s\n",
- acpi_table_signatures[id]);
-@@ -308,7 +307,7 @@ acpi_table_parse_madt_family (
- return -ENODEV;
- }
-
-- madt_end = (unsigned long) madt + sdt.entry[i].size;
-+ madt_end = (unsigned long) madt + sdt_entry[i].size;
-
- /* Parse all entries looking for a match. */
-
-@@ -349,10 +348,10 @@ acpi_table_parse (
- if (!handler)
- return -EINVAL;
-
-- for (i = 0; i < sdt.count; i++) {
-- if (sdt.entry[i].id != id)
-+ for (i = 0; i < sdt_count; i++) {
-+ if (sdt_entry[i].id != id)
- continue;
-- handler(sdt.entry[i].pa, sdt.entry[i].size);
-+ handler(sdt_entry[i].pa, sdt_entry[i].size);
- count++;
- }
-
-@@ -377,11 +376,11 @@ acpi_table_get_sdt (
-
- struct acpi_table_xsdt *mapped_xsdt = NULL;
-
-- sdt.pa = ((struct acpi20_table_rsdp*)rsdp)->xsdt_address;
-+ sdt_pa = ((struct acpi20_table_rsdp*)rsdp)->xsdt_address;
-
- /* map in just the header */
- header = (struct acpi_table_header *)
-- __acpi_map_table(sdt.pa, sizeof(struct acpi_table_header));
-+ __acpi_map_table(sdt_pa, sizeof(struct acpi_table_header));
-
- if (!header) {
- printk(KERN_WARNING PREFIX "Unable to map XSDT header\n");
-@@ -390,7 +389,7 @@ acpi_table_get_sdt (
-
- /* remap in the entire table before processing */
- mapped_xsdt = (struct acpi_table_xsdt *)
-- __acpi_map_table(sdt.pa, header->length);
-+ __acpi_map_table(sdt_pa, header->length);
- if (!mapped_xsdt) {
- printk(KERN_WARNING PREFIX "Unable to map XSDT\n");
- return -ENODEV;
-@@ -407,15 +406,21 @@ acpi_table_get_sdt (
- return -ENODEV;
- }
-
-- sdt.count = (header->length - sizeof(struct acpi_table_header)) >> 3;
-- if (sdt.count > ACPI_MAX_TABLES) {
-+ sdt_count = (header->length - sizeof(struct acpi_table_header)) >> 3;
-+ if (sdt_count > ACPI_MAX_TABLES) {
- printk(KERN_WARNING PREFIX "Truncated %lu XSDT entries\n",
-- (sdt.count - ACPI_MAX_TABLES));
-- sdt.count = ACPI_MAX_TABLES;
-+ (sdt_count - ACPI_MAX_TABLES));
-+ sdt_count = ACPI_MAX_TABLES;
- }
-
-- for (i = 0; i < sdt.count; i++)
-- sdt.entry[i].pa = (unsigned long) mapped_xsdt->entry[i];
-+ sdt_entry = alloc_bootmem(sdt_count * sizeof(struct acpi_table_sdt));
-+ if (!sdt_entry) {
-+ printk(KERN_ERR "ACPI: Could not allocate mem for SDT entries!\n");
-+ return -ENOMEM;
-+ }
-+
-+ for (i = 0; i < sdt_count; i++)
-+ sdt_entry[i].pa = (unsigned long) mapped_xsdt->entry[i];
- }
-
- /* Then check RSDT */
-@@ -424,11 +429,11 @@ acpi_table_get_sdt (
-
- struct acpi_table_rsdt *mapped_rsdt = NULL;
-
-- sdt.pa = rsdp->rsdt_address;
-+ sdt_pa = rsdp->rsdt_address;
-
- /* map in just the header */
- header = (struct acpi_table_header *)
-- __acpi_map_table(sdt.pa, sizeof(struct acpi_table_header));
-+ __acpi_map_table(sdt_pa, sizeof(struct acpi_table_header));
- if (!header) {
- printk(KERN_WARNING PREFIX "Unable to map RSDT header\n");
- return -ENODEV;
-@@ -436,7 +441,7 @@ acpi_table_get_sdt (
-
- /* remap in the entire table before processing */
- mapped_rsdt = (struct acpi_table_rsdt *)
-- __acpi_map_table(sdt.pa, header->length);
-+ __acpi_map_table(sdt_pa, header->length);
- if (!mapped_rsdt) {
- printk(KERN_WARNING PREFIX "Unable to map RSDT\n");
- return -ENODEV;
-@@ -453,15 +458,21 @@ acpi_table_get_sdt (
- return -ENODEV;
- }
-
-- sdt.count = (header->length - sizeof(struct acpi_table_header)) >> 2;
-- if (sdt.count > ACPI_MAX_TABLES) {
-+ sdt_count = (header->length - sizeof(struct acpi_table_header)) >> 2;
-+ if (sdt_count > ACPI_MAX_TABLES) {
- printk(KERN_WARNING PREFIX "Truncated %lu RSDT entries\n",
-- (sdt.count - ACPI_TABLE_COUNT));
-- sdt.count = ACPI_MAX_TABLES;
-+ (sdt_count - ACPI_MAX_TABLES));
-+ sdt_count = ACPI_MAX_TABLES;
- }
-
-- for (i = 0; i < sdt.count; i++)
-- sdt.entry[i].pa = (unsigned long) mapped_rsdt->entry[i];
-+ sdt_entry = alloc_bootmem(sdt_count * sizeof(struct acpi_table_sdt));
-+ if (!sdt_entry) {
-+ printk(KERN_ERR "ACPI: Could not allocate mem for SDT entries!\n");
-+ return -ENOMEM;
-+ }
-+
-+ for (i = 0; i < sdt_count; i++)
-+ sdt_entry[i].pa = (unsigned long) mapped_rsdt->entry[i];
- }
-
- else {
-@@ -469,38 +480,38 @@ acpi_table_get_sdt (
- return -ENODEV;
- }
-
-- acpi_table_print(header, sdt.pa);
-+ acpi_table_print(header, sdt_pa);
-
-- for (i = 0; i < sdt.count; i++) {
-+ for (i = 0; i < sdt_count; i++) {
-
- /* map in just the header */
- header = (struct acpi_table_header *)
-- __acpi_map_table(sdt.entry[i].pa,
-+ __acpi_map_table(sdt_entry[i].pa,
- sizeof(struct acpi_table_header));
- if (!header)
- continue;
-
- /* remap in the entire table before processing */
- header = (struct acpi_table_header *)
-- __acpi_map_table(sdt.entry[i].pa,
-+ __acpi_map_table(sdt_entry[i].pa,
- header->length);
- if (!header)
- continue;
-
-- acpi_table_print(header, sdt.entry[i].pa);
-+ acpi_table_print(header, sdt_entry[i].pa);
-
- if (acpi_table_compute_checksum(header, header->length)) {
- printk(KERN_WARNING " >>> ERROR: Invalid checksum\n");
- continue;
- }
-
-- sdt.entry[i].size = header->length;
-+ sdt_entry[i].size = header->length;
-
- for (id = 0; id < ACPI_TABLE_COUNT; id++) {
- if (!strncmp((char *) &header->signature,
- acpi_table_signatures[id],
- sizeof(header->signature))) {
-- sdt.entry[i].id = id;
-+ sdt_entry[i].id = id;
- }
- }
- }
-@@ -525,8 +536,6 @@ acpi_table_init (void)
- unsigned long rsdp_phys = 0;
- int result = 0;
-
-- memset(&sdt, 0, sizeof(struct acpi_table_sdt));
--
- /* Locate and map the Root System Description Table (RSDP) */
-
- rsdp_phys = acpi_find_rsdp();
---- linux-2.6.0-test1/drivers/acpi/tables/tbconvrt.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/acpi/tables/tbconvrt.c 2003-07-19 17:03:49.000000000 -0700
-@@ -75,14 +75,10 @@ acpi_tb_get_table_count (
- ACPI_FUNCTION_ENTRY ();
-
-
--#if ACPI_MACHINE_WIDTH != 64
--
- if (RSDP->revision < 2) {
- pointer_size = sizeof (u32);
- }
-- else
--#endif
-- {
-+ else {
- pointer_size = sizeof (u64);
- }
-
---- linux-2.6.0-test1/drivers/acpi/tables/tbget.c 2003-06-14 12:18:24.000000000 -0700
-+++ 25/drivers/acpi/tables/tbget.c 2003-07-19 17:03:49.000000000 -0700
-@@ -145,7 +145,7 @@ acpi_tb_get_table_header (
- /* Create a logical address for the physical pointer*/
-
- status = acpi_os_map_memory (address->pointer.physical, sizeof (struct acpi_table_header),
-- (void **) &header);
-+ (void *) &header);
- if (ACPI_FAILURE (status)) {
- ACPI_REPORT_ERROR (("Could not map memory at %8.8X%8.8X for length %X\n",
- ACPI_HIDWORD (address->pointer.physical),
-@@ -361,7 +361,7 @@ acpi_tb_get_this_table (
- * into our address space.
- */
- status = acpi_os_map_memory (address->pointer.physical, (acpi_size) header->length,
-- (void **) &full_table);
-+ (void *) &full_table);
- if (ACPI_FAILURE (status)) {
- ACPI_REPORT_ERROR (("Could not map memory for table [%4.4s] at %8.8X%8.8X for length %X\n",
- header->signature,
---- linux-2.6.0-test1/drivers/acpi/tables/tbinstal.c 2003-06-14 12:18:03.000000000 -0700
-+++ 25/drivers/acpi/tables/tbinstal.c 2003-07-19 17:03:49.000000000 -0700
-@@ -271,22 +271,40 @@ acpi_tb_init_table_descriptor (
- if (list_head->next) {
- return_ACPI_STATUS (AE_ALREADY_EXISTS);
- }
-- }
-
-- /*
-- * Link the new table in to the list of tables of this type.
-- * Just insert at the start of the list, order unimportant.
-- *
-- * table_desc->Prev is already NULL from calloc()
-- */
-- table_desc->next = list_head->next;
-- list_head->next = table_desc;
-+ table_desc->next = list_head->next;
-+ list_head->next = table_desc;
-
-- if (table_desc->next) {
-- table_desc->next->prev = table_desc;
-+ if (table_desc->next) {
-+ table_desc->next->prev = table_desc;
-+ }
-+
-+ list_head->count++;
- }
-+ else {
-+ /*
-+ * Link the new table in to the list of tables of this type.
-+ * Insert at the end of the list, order IS IMPORTANT.
-+ *
-+ * table_desc->Prev & Next are already NULL from calloc()
-+ */
-+ list_head->count++;
-+
-+ if (!list_head->next) {
-+ list_head->next = table_desc;
-+ }
-+ else {
-+ table_desc->next = list_head->next;
-
-- list_head->count++;
-+ while (table_desc->next->next) {
-+ table_desc->next = table_desc->next->next;
-+ }
-+
-+ table_desc->next->next = table_desc;
-+ table_desc->prev = table_desc->next;
-+ table_desc->next = NULL;
-+ }
-+ }
-
- /* Finish initialization of the table descriptor */
-
---- linux-2.6.0-test1/drivers/acpi/tables/tbrsdt.c 2003-06-14 12:18:24.000000000 -0700
-+++ 25/drivers/acpi/tables/tbrsdt.c 2003-07-19 17:03:49.000000000 -0700
-@@ -85,7 +85,7 @@ acpi_tb_verify_rsdp (
- * Obtain access to the RSDP structure
- */
- status = acpi_os_map_memory (address->pointer.physical, sizeof (struct rsdp_descriptor),
-- (void **) &rsdp);
-+ (void *) &rsdp);
- if (ACPI_FAILURE (status)) {
- return_ACPI_STATUS (status);
- }
---- linux-2.6.0-test1/drivers/acpi/tables/tbxfroot.c 2003-06-14 12:18:29.000000000 -0700
-+++ 25/drivers/acpi/tables/tbxfroot.c 2003-07-19 17:03:49.000000000 -0700
-@@ -179,7 +179,7 @@ acpi_get_firmware_table (
-
- if ((flags & ACPI_MEMORY_MODE) == ACPI_LOGICAL_ADDRESSING) {
- status = acpi_os_map_memory (rsdp_address.pointer.physical, sizeof (struct rsdp_descriptor),
-- (void **) &acpi_gbl_RSDP);
-+ (void *) &acpi_gbl_RSDP);
- if (ACPI_FAILURE (status)) {
- return_ACPI_STATUS (status);
- }
-@@ -423,7 +423,7 @@ acpi_tb_find_rsdp (
- * 1) Search EBDA (low memory) paragraphs
- */
- status = acpi_os_map_memory ((u64) ACPI_LO_RSDP_WINDOW_BASE, ACPI_LO_RSDP_WINDOW_SIZE,
-- (void **) &table_ptr);
-+ (void *) &table_ptr);
- if (ACPI_FAILURE (status)) {
- ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Could not map memory at %X for length %X\n",
- ACPI_LO_RSDP_WINDOW_BASE, ACPI_LO_RSDP_WINDOW_SIZE));
-@@ -447,7 +447,7 @@ acpi_tb_find_rsdp (
- * 2) Search upper memory: 16-byte boundaries in E0000h-F0000h
- */
- status = acpi_os_map_memory ((u64) ACPI_HI_RSDP_WINDOW_BASE, ACPI_HI_RSDP_WINDOW_SIZE,
-- (void **) &table_ptr);
-+ (void *) &table_ptr);
- if (ACPI_FAILURE (status)) {
- ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Could not map memory at %X for length %X\n",
- ACPI_HI_RSDP_WINDOW_BASE, ACPI_HI_RSDP_WINDOW_SIZE));
---- linux-2.6.0-test1/drivers/acpi/thermal.c 2003-06-14 12:18:32.000000000 -0700
-+++ 25/drivers/acpi/thermal.c 2003-07-19 17:03:49.000000000 -0700
-@@ -84,11 +84,11 @@ static int acpi_thermal_remove (struct a
- static int acpi_thermal_state_open_fs(struct inode *inode, struct file *file);
- static int acpi_thermal_temp_open_fs(struct inode *inode, struct file *file);
- static int acpi_thermal_trip_open_fs(struct inode *inode, struct file *file);
--static int acpi_thermal_write_trip_points (struct file*,const char *,size_t,loff_t *);
-+static ssize_t acpi_thermal_write_trip_points (struct file*,const char *,size_t,loff_t *);
- static int acpi_thermal_cooling_open_fs(struct inode *inode, struct file *file);
--static int acpi_thermal_write_cooling_mode (struct file*,const char *,size_t,loff_t *);
-+static ssize_t acpi_thermal_write_cooling_mode (struct file*,const char *,size_t,loff_t *);
- static int acpi_thermal_polling_open_fs(struct inode *inode, struct file *file);
--static int acpi_thermal_write_polling(struct file*,const char *,size_t,loff_t *);
-+static ssize_t acpi_thermal_write_polling(struct file*,const char *,size_t,loff_t *);
-
- static struct acpi_driver acpi_thermal_driver = {
- .name = ACPI_THERMAL_DRIVER_NAME,
-@@ -881,7 +881,7 @@ static int acpi_thermal_trip_open_fs(str
- return single_open(file, acpi_thermal_trip_seq_show, PDE(inode)->data);
- }
-
--static int
-+static ssize_t
- acpi_thermal_write_trip_points (
- struct file *file,
- const char *buffer,
-@@ -950,7 +950,7 @@ static int acpi_thermal_cooling_open_fs(
- PDE(inode)->data);
- }
-
--static int
-+static ssize_t
- acpi_thermal_write_cooling_mode (
- struct file *file,
- const char *buffer,
-@@ -1011,7 +1011,7 @@ static int acpi_thermal_polling_open_fs(
- PDE(inode)->data);
- }
-
--static int
-+static ssize_t
- acpi_thermal_write_polling (
- struct file *file,
- const char *buffer,
---- linux-2.6.0-test1/drivers/acpi/utilities/utglobal.c 2003-06-14 12:17:58.000000000 -0700
-+++ 25/drivers/acpi/utilities/utglobal.c 2003-07-19 17:03:49.000000000 -0700
-@@ -307,9 +307,9 @@ struct acpi_table_support acpi
- /*********** Name, Signature, Global typed pointer Signature size, Type How many allowed?, Contains valid AML? */
-
- /* RSDP 0 */ {RSDP_NAME, RSDP_SIG, NULL, sizeof (RSDP_SIG)-1, ACPI_TABLE_ROOT | ACPI_TABLE_SINGLE},
-- /* DSDT 1 */ {DSDT_SIG, DSDT_SIG, (void **) &acpi_gbl_DSDT, sizeof (DSDT_SIG)-1, ACPI_TABLE_SECONDARY| ACPI_TABLE_SINGLE | ACPI_TABLE_EXECUTABLE},
-- /* FADT 2 */ {FADT_SIG, FADT_SIG, (void **) &acpi_gbl_FADT, sizeof (FADT_SIG)-1, ACPI_TABLE_PRIMARY | ACPI_TABLE_SINGLE},
-- /* FACS 3 */ {FACS_SIG, FACS_SIG, (void **) &acpi_gbl_FACS, sizeof (FACS_SIG)-1, ACPI_TABLE_SECONDARY| ACPI_TABLE_SINGLE},
-+ /* DSDT 1 */ {DSDT_SIG, DSDT_SIG, (void *) &acpi_gbl_DSDT, sizeof (DSDT_SIG)-1, ACPI_TABLE_SECONDARY| ACPI_TABLE_SINGLE | ACPI_TABLE_EXECUTABLE},
-+ /* FADT 2 */ {FADT_SIG, FADT_SIG, (void *) &acpi_gbl_FADT, sizeof (FADT_SIG)-1, ACPI_TABLE_PRIMARY | ACPI_TABLE_SINGLE},
-+ /* FACS 3 */ {FACS_SIG, FACS_SIG, (void *) &acpi_gbl_FACS, sizeof (FACS_SIG)-1, ACPI_TABLE_SECONDARY| ACPI_TABLE_SINGLE},
- /* PSDT 4 */ {PSDT_SIG, PSDT_SIG, NULL, sizeof (PSDT_SIG)-1, ACPI_TABLE_PRIMARY | ACPI_TABLE_MULTIPLE | ACPI_TABLE_EXECUTABLE},
- /* SSDT 5 */ {SSDT_SIG, SSDT_SIG, NULL, sizeof (SSDT_SIG)-1, ACPI_TABLE_PRIMARY | ACPI_TABLE_MULTIPLE | ACPI_TABLE_EXECUTABLE},
- /* XSDT 6 */ {XSDT_SIG, XSDT_SIG, NULL, sizeof (RSDT_SIG)-1, ACPI_TABLE_ROOT | ACPI_TABLE_SINGLE},
---- linux-2.6.0-test1/drivers/atm/atmtcp.c 2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/atm/atmtcp.c 2003-07-19 17:03:49.000000000 -0700
-@@ -66,7 +66,7 @@ static int atmtcp_send_control(struct at
- *(struct atm_vcc **) &new_msg->vcc = vcc;
- old_test = test_bit(flag,&vcc->flags);
- out_vcc->push(out_vcc,skb);
-- add_wait_queue(&vcc->sleep,&wait);
-+ add_wait_queue(vcc->sk->sk_sleep, &wait);
- while (test_bit(flag,&vcc->flags) == old_test) {
- mb();
- out_vcc = PRIV(vcc->dev) ? PRIV(vcc->dev)->vcc : NULL;
-@@ -78,7 +78,7 @@ static int atmtcp_send_control(struct at
- schedule();
- }
- current->state = TASK_RUNNING;
-- remove_wait_queue(&vcc->sleep,&wait);
-+ remove_wait_queue(vcc->sk->sk_sleep, &wait);
- return error;
- }
-
-@@ -90,7 +90,7 @@ static int atmtcp_recv_control(const str
- vcc->vpi = msg->addr.sap_addr.vpi;
- vcc->vci = msg->addr.sap_addr.vci;
- vcc->qos = msg->qos;
-- vcc->reply = msg->result;
-+ vcc->sk->sk_err = -msg->result;
- switch (msg->type) {
- case ATMTCP_CTRL_OPEN:
- change_bit(ATM_VF_READY,&vcc->flags);
-@@ -103,7 +103,7 @@ static int atmtcp_recv_control(const str
- msg->type);
- return -EINVAL;
- }
-- wake_up(&vcc->sleep);
-+ wake_up(vcc->sk->sk_sleep);
- return 0;
- }
-
-@@ -134,7 +134,7 @@ static int atmtcp_v_open(struct atm_vcc
- clear_bit(ATM_VF_READY,&vcc->flags); /* just in case ... */
- error = atmtcp_send_control(vcc,ATMTCP_CTRL_OPEN,&msg,ATM_VF_READY);
- if (error) return error;
-- return vcc->reply;
-+ return -vcc->sk->sk_err;
- }
-
-
-@@ -257,7 +257,7 @@ static void atmtcp_c_close(struct atm_vc
- walk = atm_sk(s);
- if (walk->dev != atmtcp_dev)
- continue;
-- wake_up(&walk->sleep);
-+ wake_up(walk->sk->sk_sleep);
- }
- read_unlock(&vcc_sklist_lock);
- }
---- linux-2.6.0-test1/drivers/base/node.c 2003-06-14 12:17:58.000000000 -0700
-+++ 25/drivers/base/node.c 2003-07-19 17:04:07.000000000 -0700
-@@ -7,6 +7,7 @@
- #include <linux/init.h>
- #include <linux/mm.h>
- #include <linux/node.h>
-+#include <linux/cpumask.h>
- #include <linux/topology.h>
-
- static struct sysdev_class node_class = {
-@@ -17,7 +18,17 @@ static struct sysdev_class node_class =
- static ssize_t node_read_cpumap(struct sys_device * dev, char * buf)
- {
- struct node *node_dev = to_node(dev);
-- return sprintf(buf,"%lx\n",node_dev->cpumap);
-+ cpumask_t tmp = node_dev->cpumap;
-+ int k, len = 0;
-+
-+ for (k = 0; k < sizeof(cpumask_t)/sizeof(u16); ++k) {
-+ int j = sprintf(buf, "%04hx", (u16)cpus_coerce(tmp));
-+ len += j;
-+ buf += j;
-+ cpus_shift_right(tmp, tmp, 16);
-+ }
-+ len += sprintf(buf, "\n");
-+ return len;
- }
- static SYSDEV_ATTR(cpumap,S_IRUGO,node_read_cpumap,NULL);
-
---- linux-2.6.0-test1/drivers/block/acsi.c 2003-06-14 12:18:51.000000000 -0700
-+++ 25/drivers/block/acsi.c 2003-07-19 17:03:49.000000000 -0700
-@@ -55,7 +55,6 @@
- #include <linux/delay.h>
- #include <linux/mm.h>
- #include <linux/major.h>
--#include <linux/blk.h>
- #include <linux/slab.h>
- #include <linux/interrupt.h>
- #include <scsi/scsi.h> /* for SCSI_IOCTL_GET_IDLUN */
---- linux-2.6.0-test1/drivers/block/amiflop.c 2003-06-14 12:18:09.000000000 -0700
-+++ 25/drivers/block/amiflop.c 2003-07-19 17:03:49.000000000 -0700
-@@ -79,7 +79,6 @@
- #include <asm/amigahw.h>
- #include <asm/amigaints.h>
- #include <asm/irq.h>
--#include <linux/blk.h>
-
- #undef DEBUG /* print _LOTS_ of infos */
-
---- linux-2.6.0-test1/drivers/block/as-iosched.c 2003-07-13 21:44:34.000000000 -0700
-+++ 25/drivers/block/as-iosched.c 2003-07-19 17:03:49.000000000 -0700
-@@ -12,7 +12,6 @@
- #include <linux/blkdev.h>
- #include <linux/elevator.h>
- #include <linux/bio.h>
--#include <linux/blk.h>
- #include <linux/config.h>
- #include <linux/module.h>
- #include <linux/slab.h>
-@@ -834,10 +833,11 @@ static void as_update_iohist(struct as_i
- + 2*1024*64);
-
- aic->seek_samples += 256;
-- aic->seek_total += 256*seek_dist;
-+ aic->seek_total += (u64)256*seek_dist;
- if (aic->seek_samples) {
-- aic->seek_mean = aic->seek_total + 128;
-- sector_div(aic->seek_mean, aic->seek_samples);
-+ u64 total = aic->seek_total + (aic->seek_samples>>1);
-+ do_div(total, aic->seek_samples);
-+ aic->seek_mean = (sector_t)total;
- }
- aic->seek_samples = (aic->seek_samples>>1)
- + (aic->seek_samples>>2);
-@@ -1306,6 +1306,15 @@ static void as_add_request(struct as_dat
- as_update_arq(ad, arq); /* keep state machine up to date */
- }
-
-+/*
-+ * FIXME: HACK for AS requeue problems
-+ */
-+static void as_requeue_request(request_queue_t *q, struct request *rq)
-+{
-+ elv_completed_request(q, rq);
-+ __elv_add_request(q, rq, 0, 0);
-+}
-+
- static void
- as_insert_request(request_queue_t *q, struct request *rq,
- struct list_head *insert_here)
-@@ -1821,6 +1830,7 @@ elevator_t iosched_as = {
- .elevator_next_req_fn = as_next_request,
- .elevator_add_req_fn = as_insert_request,
- .elevator_remove_req_fn = as_remove_request,
-+ .elevator_requeue_req_fn = as_requeue_request,
- .elevator_queue_empty_fn = as_queue_empty,
- .elevator_completed_req_fn = as_completed_request,
- .elevator_former_req_fn = as_former_request,
---- linux-2.6.0-test1/drivers/block/ataflop.c 2003-06-14 12:17:58.000000000 -0700
-+++ 25/drivers/block/ataflop.c 2003-07-19 17:03:49.000000000 -0700
-@@ -91,7 +91,6 @@
- #include <asm/atariints.h>
- #include <asm/atari_stdma.h>
- #include <asm/atari_stram.h>
--#include <linux/blk.h>
- #include <linux/blkpg.h>
-
- #define FD_MAX_UNITS 2
---- linux-2.6.0-test1/drivers/block/cciss.c 2003-07-10 18:50:30.000000000 -0700
-+++ 25/drivers/block/cciss.c 2003-07-19 17:03:49.000000000 -0700
-@@ -41,7 +41,6 @@
- #include <asm/uaccess.h>
- #include <asm/io.h>
-
--#include <linux/blk.h>
- #include <linux/blkdev.h>
- #include <linux/genhd.h>
- #include <linux/completion.h>
---- linux-2.6.0-test1/drivers/block/cciss_scsi.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/block/cciss_scsi.c 2003-07-19 17:03:49.000000000 -0700
-@@ -712,7 +712,8 @@ cciss_scsi_detect(int ctlr)
- sh->hostdata[0] = (unsigned long) hba[ctlr];
- sh->irq = hba[ctlr]->intr;
- sh->unique_id = sh->irq;
-- scsi_add_host(sh, &hba[ctlr]->pdev->dev);
-+ scsi_add_host(sh, &hba[ctlr]->pdev->dev); /* XXX handle failure */
-+ scsi_scan_host(sh);
-
- return 1;
- }
---- linux-2.6.0-test1/drivers/block/cpqarray.c 2003-06-14 12:17:58.000000000 -0700
-+++ 25/drivers/block/cpqarray.c 2003-07-19 17:03:49.000000000 -0700
-@@ -38,7 +38,6 @@
- #include <linux/init.h>
- #include <linux/hdreg.h>
- #include <linux/spinlock.h>
--#include <linux/blk.h>
- #include <linux/blkdev.h>
- #include <linux/genhd.h>
- #include <asm/uaccess.h>
---- linux-2.6.0-test1/drivers/block/cryptoloop.c 2003-07-13 21:44:34.000000000 -0700
-+++ 25/drivers/block/cryptoloop.c 2003-07-19 17:03:49.000000000 -0700
-@@ -26,7 +26,6 @@
- #include <linux/crypto.h>
- #include <linux/blkdev.h>
- #include <linux/loop.h>
--#include <linux/blk.h>
- #include <asm/semaphore.h>
- #include <asm/uaccess.h>
-
---- linux-2.6.0-test1/drivers/block/DAC960.c 2003-06-14 12:18:29.000000000 -0700
-+++ 25/drivers/block/DAC960.c 2003-07-19 17:03:49.000000000 -0700
-@@ -23,7 +23,6 @@
- #include <linux/version.h>
- #include <linux/module.h>
- #include <linux/types.h>
--#include <linux/blk.h>
- #include <linux/blkdev.h>
- #include <linux/bio.h>
- #include <linux/completion.h>
---- linux-2.6.0-test1/drivers/block/deadline-iosched.c 2003-06-14 12:18:30.000000000 -0700
-+++ 25/drivers/block/deadline-iosched.c 2003-07-19 17:03:49.000000000 -0700
-@@ -10,7 +10,6 @@
- #include <linux/blkdev.h>
- #include <linux/elevator.h>
- #include <linux/bio.h>
--#include <linux/blk.h>
- #include <linux/config.h>
- #include <linux/module.h>
- #include <linux/slab.h>
---- linux-2.6.0-test1/drivers/block/elevator.c 2003-07-10 18:50:30.000000000 -0700
-+++ 25/drivers/block/elevator.c 2003-07-19 17:03:49.000000000 -0700
-@@ -29,7 +29,6 @@
- #include <linux/blkdev.h>
- #include <linux/elevator.h>
- #include <linux/bio.h>
--#include <linux/blk.h>
- #include <linux/config.h>
- #include <linux/module.h>
- #include <linux/slab.h>
-@@ -214,6 +213,18 @@ void elv_merge_requests(request_queue_t
- e->elevator_merge_req_fn(q, rq, next);
- }
-
-+void elv_requeue_request(request_queue_t *q, struct request *rq)
-+{
-+ /*
-+ * if iosched has an explicit requeue hook, then use that. otherwise
-+ * just put the request at the front of the queue
-+ */
-+ if (q->elevator.elevator_requeue_req_fn)
-+ q->elevator.elevator_requeue_req_fn(q, rq);
-+ else
-+ __elv_add_request(q, rq, 0, 0);
-+}
-+
- void __elv_add_request(request_queue_t *q, struct request *rq, int at_end,
- int plug)
- {
-@@ -417,6 +428,7 @@ EXPORT_SYMBOL(elevator_noop);
-
- EXPORT_SYMBOL(elv_add_request);
- EXPORT_SYMBOL(__elv_add_request);
-+EXPORT_SYMBOL(elv_requeue_request);
- EXPORT_SYMBOL(elv_next_request);
- EXPORT_SYMBOL(elv_remove_request);
- EXPORT_SYMBOL(elv_queue_empty);
---- linux-2.6.0-test1/drivers/block/floppy98.c 2003-07-13 21:44:34.000000000 -0700
-+++ 25/drivers/block/floppy98.c 2003-07-19 17:03:49.000000000 -0700
-@@ -277,7 +277,6 @@ static int irqdma_allocated;
- #define LOCAL_END_REQUEST
- #define DEVICE_NAME "floppy"
-
--#include <linux/blk.h>
- #include <linux/blkpg.h>
- #include <linux/cdrom.h> /* for the compatibility eject ioctl */
- #include <linux/completion.h>
---- linux-2.6.0-test1/drivers/block/floppy.c 2003-07-10 18:50:30.000000000 -0700
-+++ 25/drivers/block/floppy.c 2003-07-19 17:15:21.000000000 -0700
-@@ -242,7 +242,7 @@ static int irqdma_allocated;
- #define LOCAL_END_REQUEST
- #define DEVICE_NAME "floppy"
-
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/blkpg.h>
- #include <linux/cdrom.h> /* for the compatibility eject ioctl */
- #include <linux/completion.h>
-@@ -4261,6 +4261,7 @@ int __init floppy_init(void)
- floppy_sizes[i] = MAX_DISK_SIZE << 1;
-
- blk_init_queue(&floppy_queue, do_fd_request, &floppy_lock);
-+ blk_queue_max_hw_segments(&floppy_queue, 1);
- reschedule_timeout(MAXTIMEOUT, "floppy init", MAXTIMEOUT);
- config_types();
-
---- linux-2.6.0-test1/drivers/block/genhd.c 2003-07-10 18:50:30.000000000 -0700
-+++ 25/drivers/block/genhd.c 2003-07-19 17:06:13.000000000 -0700
-@@ -7,7 +7,7 @@
- #include <linux/fs.h>
- #include <linux/genhd.h>
- #include <linux/kernel.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/init.h>
- #include <linux/spinlock.h>
- #include <linux/seq_file.h>
-@@ -336,7 +336,7 @@ static struct sysfs_ops disk_sysfs_ops =
- static ssize_t disk_dev_read(struct gendisk * disk, char *page)
- {
- dev_t base = MKDEV(disk->major, disk->first_minor);
-- return sprintf(page, "%04x\n", (unsigned)base);
-+ return print_dev_t(page, base);
- }
- static ssize_t disk_range_read(struct gendisk * disk, char *page)
- {
---- linux-2.6.0-test1/drivers/block/ioctl.c 2003-06-14 12:17:57.000000000 -0700
-+++ 25/drivers/block/ioctl.c 2003-07-19 17:03:49.000000000 -0700
-@@ -1,5 +1,5 @@
- #include <linux/sched.h> /* for capable() */
--#include <linux/blk.h> /* for set_device_ro() */
-+#include <linux/blkdev.h>
- #include <linux/blkpg.h>
- #include <linux/backing-dev.h>
- #include <linux/buffer_head.h>
-@@ -166,13 +166,11 @@ int blkdev_ioctl(struct inode *inode, st
- return -EINVAL;
- if (get_user(n, (int *) arg))
- return -EFAULT;
-- if (n > PAGE_SIZE || n < 512 || (n & (n - 1)))
-- return -EINVAL;
- if (bd_claim(bdev, &holder) < 0)
- return -EBUSY;
-- set_blocksize(bdev, n);
-+ ret = set_blocksize(bdev, n);
- bd_release(bdev);
-- return 0;
-+ return ret;
- case BLKPG:
- return blkpg_ioctl(bdev, (struct blkpg_ioctl_arg *) arg);
- case BLKRRPART:
---- linux-2.6.0-test1/drivers/block/Kconfig 2003-07-13 21:44:34.000000000 -0700
-+++ 25/drivers/block/Kconfig 2003-07-19 17:03:49.000000000 -0700
-@@ -264,6 +264,7 @@ config BLK_DEV_LOOP
-
- config BLK_DEV_CRYPTOLOOP
- tristate "Cryptoloop Support"
-+ select CRYPTO
- depends on BLK_DEV_LOOP
- ---help---
- Say Y here if you want to be able to use the ciphers that are
-@@ -339,7 +340,7 @@ config BLK_DEV_INITRD
-
- config LBD
- bool "Support for Large Block Devices"
-- depends on X86
-+ depends on X86 || MIPS32 || PPC32 || ARCH_S390_31 || SUPERH
- help
- Say Y here if you want to attach large (bigger than 2TB) discs to
- your machine, or if you want to have a raid or loopback device
---- linux-2.6.0-test1/drivers/block/ll_rw_blk.c 2003-07-13 21:44:34.000000000 -0700
-+++ 25/drivers/block/ll_rw_blk.c 2003-07-19 17:06:49.000000000 -0700
-@@ -17,7 +17,7 @@
- #include <linux/module.h>
- #include <linux/backing-dev.h>
- #include <linux/bio.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/highmem.h>
- #include <linux/mm.h>
- #include <linux/kernel_stat.h>
-@@ -371,6 +371,20 @@ void blk_queue_hardsect_size(request_que
- }
-
- /**
-+ * blk_queue_stack_limits - inherit underlying queue limits for stacked drivers
-+ * @t: the stacking driver (top)
-+ * @b: the underlying device (bottom)
-+ **/
-+void blk_queue_stack_limits(request_queue_t *t, request_queue_t *b)
-+{
-+ t->max_sectors = min(t->max_sectors,b->max_sectors);
-+ t->max_phys_segments = min(t->max_phys_segments,b->max_phys_segments);
-+ t->max_hw_segments = min(t->max_hw_segments,b->max_hw_segments);
-+ t->max_segment_size = min(t->max_segment_size,b->max_segment_size);
-+ t->hardsect_size = max(t->hardsect_size,b->hardsect_size);
-+}
-+
-+/**
- * blk_queue_segment_boundary - set boundary rules for segment merging
- * @q: the request queue for the device
- * @mask: the memory boundary mask
-@@ -1494,6 +1508,23 @@ struct request *blk_get_request(request_
-
- return rq;
- }
-+/**
-+ * blk_requeue_request - put a request back on queue
-+ * @q: request queue where request should be inserted
-+ * @rq: request to be inserted
-+ *
-+ * Description:
-+ * Drivers often keep queueing requests until the hardware cannot accept
-+ * more, when that condition happens we need to put the request back
-+ * on the queue. Must be called with queue lock held.
-+ */
-+void blk_requeue_request(request_queue_t *q, struct request *rq)
-+{
-+ if (blk_rq_tagged(rq))
-+ blk_queue_end_tag(q, rq);
-+
-+ elv_requeue_request(q, rq);
-+}
-
- /**
- * blk_insert_request - insert a special request in to a request queue
-@@ -1659,25 +1690,50 @@ void blk_put_request(struct request *req
- }
-
- /**
-- * blk_congestion_wait - wait for a queue to become uncongested
-+ * blk_congestion_wait_wq - wait for a queue to become uncongested,
- * @rw: READ or WRITE
- * @timeout: timeout in jiffies
-+ * @wait : wait queue entry to use for waiting or async notification
-+ * (NULL defaults to synchronous behaviour)
- *
- * Waits for up to @timeout jiffies for a queue (any queue) to exit congestion.
- * If no queues are congested then just wait for the next request to be
- * returned.
-+ *
-+ * If the wait queue parameter specifies an async i/o callback,
-+ * then instead of blocking, just register the callback on the wait
-+ * queue for async notification when the queue gets uncongested.
- */
--void blk_congestion_wait(int rw, long timeout)
-+int blk_congestion_wait_wq(int rw, long timeout, wait_queue_t *wait)
- {
-- DEFINE_WAIT(wait);
- wait_queue_head_t *wqh = &congestion_wqh[rw];
-+ DEFINE_WAIT(local_wait);
-+
-+ if (!wait)
-+ wait = &local_wait;
-
- blk_run_queues();
-- prepare_to_wait(wqh, &wait, TASK_UNINTERRUPTIBLE);
-+ prepare_to_wait(wqh, wait, TASK_UNINTERRUPTIBLE);
-+ if (!is_sync_wait(wait)) {
-+ /*
-+ * if we've queued an async wait queue
-+ * callback do not block; just tell the
-+ * caller to return and retry later when
-+ * the callback is notified
-+ */
-+ return -EIOCBRETRY;
-+ }
- io_schedule_timeout(timeout);
-- finish_wait(wqh, &wait);
-+ finish_wait(wqh, wait);
-+ return 0;
-+}
-+
-+void blk_congestion_wait(int rw, long timeout)
-+{
-+ blk_congestion_wait_wq(rw, timeout, NULL);
- }
-
-+
- /*
- * Has to be called with the request spinlock acquired
- */
-@@ -2720,6 +2776,7 @@ EXPORT_SYMBOL(blk_queue_max_phys_segment
- EXPORT_SYMBOL(blk_queue_max_hw_segments);
- EXPORT_SYMBOL(blk_queue_max_segment_size);
- EXPORT_SYMBOL(blk_queue_hardsect_size);
-+EXPORT_SYMBOL(blk_queue_stack_limits);
- EXPORT_SYMBOL(blk_queue_segment_boundary);
- EXPORT_SYMBOL(blk_queue_dma_alignment);
- EXPORT_SYMBOL(blk_rq_map_sg);
-@@ -2730,6 +2787,7 @@ EXPORT_SYMBOL(blk_hw_contig_segment);
- EXPORT_SYMBOL(blk_get_request);
- EXPORT_SYMBOL(blk_put_request);
- EXPORT_SYMBOL(blk_insert_request);
-+EXPORT_SYMBOL(blk_requeue_request);
-
- EXPORT_SYMBOL(blk_queue_prep_rq);
- EXPORT_SYMBOL(blk_queue_merge_bvec);
---- linux-2.6.0-test1/drivers/block/nbd.c 2003-07-13 21:44:34.000000000 -0700
-+++ 25/drivers/block/nbd.c 2003-07-19 17:03:49.000000000 -0700
-@@ -44,7 +44,6 @@
-
- #include <linux/major.h>
-
--#include <linux/blk.h>
- #include <linux/blkdev.h>
- #include <linux/module.h>
- #include <linux/init.h>
-@@ -55,8 +54,6 @@
- #include <linux/errno.h>
- #include <linux/file.h>
- #include <linux/ioctl.h>
--#include <linux/blkdev.h>
--#include <linux/blk.h>
- #include <net/sock.h>
-
- #include <linux/devfs_fs_kernel.h>
-@@ -261,7 +258,8 @@ void nbd_send_req(struct nbd_device *lo,
- dprintk(DBG_TX, "%s: request %p: sending control (%s@%llu,%luB)\n",
- lo->disk->disk_name, req,
- nbdcmd_to_ascii(nbd_cmd(req)),
-- req->sector << 9, req->nr_sectors << 9);
-+ (unsigned long long)req->sector << 9,
-+ req->nr_sectors << 9);
- result = sock_xmit(sock, 1, &request, sizeof(request),
- (nbd_cmd(req) == NBD_CMD_WRITE)? MSG_MORE: 0);
- if (result <= 0) {
---- linux-2.6.0-test1/drivers/block/paride/pcd.c 2003-06-14 12:18:35.000000000 -0700
-+++ 25/drivers/block/paride/pcd.c 2003-07-19 17:03:49.000000000 -0700
-@@ -137,7 +137,7 @@ enum {D_PRT, D_PRO, D_UNI, D_MOD, D_SLV,
- #include <linux/delay.h>
- #include <linux/cdrom.h>
- #include <linux/spinlock.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <asm/uaccess.h>
-
- static spinlock_t pcd_lock;
---- linux-2.6.0-test1/drivers/block/paride/pd.c 2003-06-14 12:18:30.000000000 -0700
-+++ 25/drivers/block/paride/pd.c 2003-07-19 17:03:49.000000000 -0700
-@@ -150,7 +150,7 @@ enum {D_PRT, D_PRO, D_UNI, D_MOD, D_GEO,
- #include <linux/delay.h>
- #include <linux/hdreg.h>
- #include <linux/cdrom.h> /* for the eject ioctl */
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/blkpg.h>
- #include <asm/uaccess.h>
-
---- linux-2.6.0-test1/drivers/block/paride/pf.c 2003-06-14 12:18:25.000000000 -0700
-+++ 25/drivers/block/paride/pf.c 2003-07-19 17:03:49.000000000 -0700
-@@ -150,7 +150,7 @@ enum {D_PRT, D_PRO, D_UNI, D_MOD, D_SLV,
- #include <linux/hdreg.h>
- #include <linux/cdrom.h>
- #include <linux/spinlock.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/blkpg.h>
- #include <asm/uaccess.h>
-
-@@ -222,9 +222,6 @@ MODULE_PARM(drive3, "1-7i");
- #define ATAPI_READ_10 0x28
- #define ATAPI_WRITE_10 0x2a
-
--#ifdef MODULE
--void cleanup_module(void);
--#endif
- static int pf_open(struct inode *inode, struct file *file);
- static void do_pf_request(request_queue_t * q);
- static int pf_ioctl(struct inode *inode, struct file *file,
---- linux-2.6.0-test1/drivers/block/ps2esdi.c 2003-06-14 12:17:55.000000000 -0700
-+++ 25/drivers/block/ps2esdi.c 2003-07-19 17:03:49.000000000 -0700
-@@ -38,7 +38,7 @@
- #include <linux/kernel.h>
- #include <linux/genhd.h>
- #include <linux/ps2esdi.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/mca.h>
- #include <linux/init.h>
- #include <linux/ioport.h>
---- linux-2.6.0-test1/drivers/block/swim3.c 2003-06-14 12:18:07.000000000 -0700
-+++ 25/drivers/block/swim3.c 2003-07-19 17:03:49.000000000 -0700
-@@ -24,7 +24,6 @@
- #include <linux/delay.h>
- #include <linux/fd.h>
- #include <linux/ioctl.h>
--#include <linux/blk.h>
- #include <linux/devfs_fs_kernel.h>
- #include <asm/io.h>
- #include <asm/dbdma.h>
---- linux-2.6.0-test1/drivers/block/swim_iop.c 2003-06-14 12:17:56.000000000 -0700
-+++ 25/drivers/block/swim_iop.c 2003-07-19 17:03:49.000000000 -0700
-@@ -30,7 +30,6 @@
- #include <linux/timer.h>
- #include <linux/delay.h>
- #include <linux/fd.h>
--#include <linux/blk.h>
- #include <linux/ioctl.h>
- #include <asm/io.h>
- #include <asm/uaccess.h>
---- linux-2.6.0-test1/drivers/block/umem.c 2003-06-14 12:18:51.000000000 -0700
-+++ 25/drivers/block/umem.c 2003-07-19 17:03:49.000000000 -0700
-@@ -99,7 +99,7 @@ static int pci_cmds;
-
- static int major_nr;
-
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/blkpg.h>
-
- struct cardinfo {
---- linux-2.6.0-test1/drivers/block/xd.c 2003-06-14 12:18:30.000000000 -0700
-+++ 25/drivers/block/xd.c 2003-07-19 17:03:49.000000000 -0700
-@@ -46,7 +46,7 @@
- #include <linux/init.h>
- #include <linux/wait.h>
- #include <linux/devfs_fs_kernel.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/blkpg.h>
-
- #include <asm/system.h>
---- linux-2.6.0-test1/drivers/block/z2ram.c 2003-06-14 12:18:24.000000000 -0700
-+++ 25/drivers/block/z2ram.c 2003-07-19 17:03:49.000000000 -0700
-@@ -30,7 +30,6 @@
- #include <linux/major.h>
- #include <linux/slab.h>
- #include <linux/vmalloc.h>
--#include <linux/blk.h>
- #include <linux/init.h>
- #include <linux/module.h>
-
---- linux-2.6.0-test1/drivers/cdrom/aztcd.c 2003-06-14 12:18:34.000000000 -0700
-+++ 25/drivers/cdrom/aztcd.c 2003-07-19 17:03:49.000000000 -0700
-@@ -166,7 +166,7 @@
- */
-
- #include <linux/version.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include "aztcd.h"
-
- #include <linux/module.h>
---- linux-2.6.0-test1/drivers/cdrom/cdrom.c 2003-06-14 12:17:58.000000000 -0700
-+++ 25/drivers/cdrom/cdrom.c 2003-07-19 17:03:49.000000000 -0700
-@@ -268,6 +268,7 @@
- #include <linux/init.h>
- #include <linux/fcntl.h>
- #include <linux/blkdev.h>
-+#include <linux/times.h>
-
- #include <asm/uaccess.h>
-
-@@ -2171,6 +2172,7 @@ static int mmc_ioctl(struct cdrom_device
- return -ENOSYS;
- cdinfo(CD_DO_IOCTL, "entering CDROM_SEND_PACKET\n");
- IOCTL_IN(arg, struct cdrom_generic_command, cgc);
-+ cgc.timeout = clock_t_to_jiffies(cgc.timeout);
- return cdrom_do_cmd(cdi, &cgc);
- }
- case CDROM_NEXT_WRITABLE: {
---- linux-2.6.0-test1/drivers/cdrom/cdu31a.c 2003-06-14 12:18:25.000000000 -0700
-+++ 25/drivers/cdrom/cdu31a.c 2003-07-19 17:03:49.000000000 -0700
-@@ -177,7 +177,7 @@
- #include "cdu31a.h"
-
- #define MAJOR_NR CDU31A_CDROM_MAJOR
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
-
- #define CDU31A_READAHEAD 4 /* 128 sector, 64kB, 32 reads read-ahead */
- #define CDU31A_MAX_CONSECUTIVE_ATTENTIONS 10
---- linux-2.6.0-test1/drivers/cdrom/cm206.c 2003-06-14 12:18:33.000000000 -0700
-+++ 25/drivers/cdrom/cm206.c 2003-07-19 17:03:49.000000000 -0700
-@@ -199,7 +199,7 @@ History:
-
- #define MAJOR_NR CM206_CDROM_MAJOR
-
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
-
- #undef DEBUG
- #define STATISTICS /* record times and frequencies of events */
---- linux-2.6.0-test1/drivers/cdrom/gscd.c 2003-06-14 12:17:56.000000000 -0700
-+++ 25/drivers/cdrom/gscd.c 2003-07-19 17:03:49.000000000 -0700
-@@ -69,7 +69,7 @@
- #include <asm/uaccess.h>
-
- #define MAJOR_NR GOLDSTAR_CDROM_MAJOR
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #define gscd_port gscd /* for compatible parameter passing with "insmod" */
- #include "gscd.h"
-
---- linux-2.6.0-test1/drivers/cdrom/mcd.c 2003-06-14 12:18:24.000000000 -0700
-+++ 25/drivers/cdrom/mcd.c 2003-07-19 17:03:49.000000000 -0700
-@@ -101,7 +101,7 @@
- #include <asm/io.h>
- #include <asm/current.h>
- #include <asm/uaccess.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
-
- #define mcd_port mcd /* for compatible parameter passing with "insmod" */
- #include "mcd.h"
---- linux-2.6.0-test1/drivers/cdrom/mcdx.c 2003-06-14 12:18:09.000000000 -0700
-+++ 25/drivers/cdrom/mcdx.c 2003-07-19 17:03:49.000000000 -0700
-@@ -74,7 +74,7 @@ static const char *mcdx_c_version
-
- #include <linux/major.h>
- #define MAJOR_NR MITSUMI_X_CDROM_MAJOR
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/devfs_fs_kernel.h>
-
- /* for compatible parameter passing with "insmod" */
---- linux-2.6.0-test1/drivers/cdrom/optcd.c 2003-06-14 12:18:04.000000000 -0700
-+++ 25/drivers/cdrom/optcd.c 2003-07-19 17:03:49.000000000 -0700
-@@ -73,7 +73,7 @@
- #include <linux/init.h>
-
- #include <asm/io.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
-
- #include <linux/cdrom.h>
- #include "optcd.h"
---- linux-2.6.0-test1/drivers/cdrom/sbpcd.c 2003-06-14 12:17:59.000000000 -0700
-+++ 25/drivers/cdrom/sbpcd.c 2003-07-19 17:03:49.000000000 -0700
-@@ -387,7 +387,7 @@
- #include "sbpcd.h"
-
- #define MAJOR_NR MATSUSHITA_CDROM_MAJOR
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
-
- /*==========================================================================*/
- #if SBPCD_DIS_IRQ
---- linux-2.6.0-test1/drivers/cdrom/sjcd.c 2003-06-14 12:18:25.000000000 -0700
-+++ 25/drivers/cdrom/sjcd.c 2003-07-19 17:03:49.000000000 -0700
-@@ -74,7 +74,7 @@
- #include <asm/system.h>
- #include <asm/io.h>
- #include <asm/uaccess.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include "sjcd.h"
-
- static int sjcd_present = 0;
---- linux-2.6.0-test1/drivers/cdrom/sonycd535.c 2003-06-14 12:18:07.000000000 -0700
-+++ 25/drivers/cdrom/sonycd535.c 2003-07-19 17:03:49.000000000 -0700
-@@ -134,7 +134,7 @@
- #include <linux/cdrom.h>
-
- #define MAJOR_NR CDU535_CDROM_MAJOR
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
-
- #define sony535_cd_base_io sonycd535 /* for compatible parameter passing with "insmod" */
- #include "sonycd535.h"
---- linux-2.6.0-test1/drivers/char/agp/i460-agp.c 2003-06-14 12:18:23.000000000 -0700
-+++ 25/drivers/char/agp/i460-agp.c 2003-07-19 17:03:49.000000000 -0700
-@@ -608,7 +608,7 @@ static struct pci_driver agp_intel_i460_
- .name = "agpgart-intel-i460",
- .id_table = agp_intel_i460_pci_table,
- .probe = agp_intel_i460_probe,
-- .remove = agp_intel_i460_remove,
-+ .remove = __devexit_p(agp_intel_i460_remove),
- };
-
- static int __init agp_intel_i460_init(void)
---- linux-2.6.0-test1/drivers/char/busmouse.c 2003-06-14 12:18:30.000000000 -0700
-+++ 25/drivers/char/busmouse.c 2003-07-19 17:03:49.000000000 -0700
-@@ -357,25 +357,23 @@ int register_busmouse(struct busmouse *o
- {
- unsigned int msedev = MINOR_TO_MOUSE(ops->minor);
- struct busmouse_data *mse;
-- int ret;
-+ int ret = -EINVAL;
-
- if (msedev >= NR_MICE) {
- printk(KERN_ERR "busmouse: trying to allocate mouse on minor %d\n",
- ops->minor);
-- return -EINVAL;
-+ goto out;
- }
-
-+ ret = -ENOMEM;
- mse = kmalloc(sizeof(*mse), GFP_KERNEL);
- if (!mse)
-- return -ENOMEM;
-+ goto out;
-
- down(&mouse_sem);
-+ ret = -EBUSY;
- if (busmouse_data[msedev])
-- {
-- up(&mouse_sem);
-- kfree(mse);
-- return -EBUSY;
-- }
-+ goto freemem;
-
- memset(mse, 0, sizeof(*mse));
-
-@@ -386,14 +384,22 @@ int register_busmouse(struct busmouse *o
- mse->lock = (spinlock_t)SPIN_LOCK_UNLOCKED;
- init_waitqueue_head(&mse->wait);
-
-- busmouse_data[msedev] = mse;
-
- ret = misc_register(&mse->miscdev);
-- if (!ret)
-- ret = msedev;
-+
-+ if (ret < 0)
-+ goto freemem;
-+
-+ busmouse_data[msedev] = mse;
-+ ret = msedev;
-+out:
- up(&mouse_sem);
--
- return ret;
-+
-+
-+freemem:
-+ kfree(mse);
-+ goto out;
- }
-
- /**
---- linux-2.6.0-test1/drivers/char/drm/drm_memory.h 2003-07-13 21:44:34.000000000 -0700
-+++ 25/drivers/char/drm/drm_memory.h 2003-07-19 17:07:16.000000000 -0700
-@@ -128,7 +128,7 @@ static inline unsigned long
- drm_follow_page (void *vaddr)
- {
- pgd_t *pgd = pgd_offset_k((unsigned long) vaddr);
-- pmd_t *pmd = pmd_offset(pgd, (unsigned long) vaddr);
-+ pmd_t *pmd = pmd_offset_kernel(pgd, (unsigned long)vaddr);
- pte_t *ptep = pte_offset_kernel(pmd, (unsigned long) vaddr);
- return pte_pfn(*ptep) << PAGE_SHIFT;
- }
---- linux-2.6.0-test1/drivers/char/ftape/lowlevel/fdc-io.c 2003-06-14 12:18:04.000000000 -0700
-+++ 25/drivers/char/ftape/lowlevel/fdc-io.c 2003-07-19 17:03:49.000000000 -0700
-@@ -66,6 +66,7 @@ int ft_mach2 = CONFIG_FT_MAC
-
- /* Local vars.
- */
-+static spinlock_t fdc_io_lock;
- static unsigned int fdc_calibr_count;
- static unsigned int fdc_calibr_time;
- static int fdc_status;
-@@ -89,14 +90,13 @@ void fdc_catch_stray_interrupts(int coun
- {
- unsigned long flags;
-
-- save_flags(flags);
-- cli();
-+ spin_lock_irqsave(&fdc_io_lock, flags);
- if (count == 0) {
- ft_expected_stray_interrupts = 0;
- } else {
- ft_expected_stray_interrupts += count;
- }
-- restore_flags(flags);
-+ spin_unlock_irqrestore(&fdc_io_lock, flags);
- }
-
- /* Wait during a timeout period for a given FDC status.
-@@ -194,8 +194,7 @@ int fdc_command(const __u8 * cmd_data, i
- TRACE_FUN(ft_t_any);
-
- fdc_usec_wait(FT_RQM_DELAY); /* wait for valid RQM status */
-- save_flags(flags);
-- cli();
-+ spin_lock_irqsave(&fdc_io_lock, flags);
- if (!in_interrupt())
- /* Yes, I know, too much comments inside this function
- * ...
-@@ -242,12 +241,11 @@ int fdc_command(const __u8 * cmd_data, i
-
- }
- fdc_usec_wait(FT_RQM_DELAY); /* wait for valid RQM status */
-- save_flags(flags);
-- cli();
-+ spin_lock_irqsave(&fdc_io_lock, flags);
- }
- fdc_status = inb(fdc.msr);
- if ((fdc_status & FDC_DATA_READY_MASK) != FDC_DATA_IN_READY) {
-- restore_flags(flags);
-+ spin_unlock_irqrestore(&fdc_io_lock, flags);
- TRACE_ABORT(-EBUSY, ft_t_err, "fdc not ready");
- }
- fdc_mode = *cmd_data; /* used by isr */
-@@ -289,7 +287,7 @@ int fdc_command(const __u8 * cmd_data, i
- last_time = ftape_timestamp();
- }
- #endif
-- restore_flags(flags);
-+ spin_unlock_irqrestore(&fdc_io_lock, flags);
- TRACE_EXIT result;
- }
-
-@@ -305,15 +303,14 @@ int fdc_result(__u8 * res_data, int res_
- int retry = 0;
- TRACE_FUN(ft_t_any);
-
-- save_flags(flags);
-- cli();
-+ spin_lock_irqsave(&fdc_io_lock, flags);
- fdc_status = inb(fdc.msr);
- if ((fdc_status & FDC_DATA_READY_MASK) != FDC_DATA_OUT_READY) {
- TRACE(ft_t_err, "fdc not ready");
- result = -EBUSY;
- } else while (count) {
- if (!(fdc_status & FDC_BUSY)) {
-- restore_flags(flags);
-+ spin_unlock_irqrestore(&fdc_io_lock, flags);
- TRACE_ABORT(-EIO, ft_t_err, "premature end of result phase");
- }
- result = fdc_read(res_data);
-@@ -336,7 +333,7 @@ int fdc_result(__u8 * res_data, int res_
- ++res_data;
- }
- }
-- restore_flags(flags);
-+ spin_unlock_irqrestore(&fdc_io_lock, flags);
- fdc_usec_wait(FT_RQM_DELAY); /* allow FDC to negate BSY */
- TRACE_EXIT result;
- }
-@@ -609,8 +606,7 @@ void fdc_reset(void)
- unsigned long flags;
- TRACE_FUN(ft_t_any);
-
-- save_flags(flags);
-- cli();
-+ spin_lock_irqsave(&fdc_io_lock, flags);
-
- fdc_dor_reset(1); /* keep unit selected */
-
-@@ -629,7 +625,7 @@ void fdc_reset(void)
- */
- fdc_update_dsr(); /* restore data rate and precomp */
-
-- restore_flags(flags);
-+ spin_unlock_irqrestore(&fdc_io_lock, flags);
-
- /*
- * Wait for first polling cycle to complete
-@@ -928,8 +924,7 @@ int fdc_setup_formatting(buffer_struct *
- */
- TRACE(ft_t_fdc_dma,
- "phys. addr. = %lx", virt_to_bus((void*) buff->ptr));
-- save_flags(flags);
-- cli(); /* could be called from ISR ! */
-+ spin_lock_irqsave(&fdc_io_lock, flags);
- fdc_setup_dma(DMA_MODE_WRITE, buff->ptr, FT_SECTORS_PER_SEGMENT * 4);
- /* Issue FDC command to start reading/writing.
- */
-@@ -937,7 +932,7 @@ int fdc_setup_formatting(buffer_struct *
- out[4] = buff->gap3;
- TRACE_CATCH(fdc_setup_error = fdc_command(out, sizeof(out)),
- restore_flags(flags); fdc_mode = fdc_idle);
-- restore_flags(flags);
-+ spin_unlock_irqrestore(&fdc_io_lock, flags);
- TRACE_EXIT 0;
- }
-
-@@ -977,11 +972,10 @@ int fdc_setup_read_write(buffer_struct *
- break;
- default:
- TRACE_ABORT(-EIO,
-- ft_t_bug, "bug: illegal operation parameter");
-+ ft_t_bug, "bug: invalid operation parameter");
- }
- TRACE(ft_t_fdc_dma, "phys. addr. = %lx",virt_to_bus((void*)buff->ptr));
-- save_flags(flags);
-- cli(); /* could be called from ISR ! */
-+ spin_lock_irqsave(&fdc_io_lock, flags);
- if (operation != FDC_VERIFY) {
- fdc_setup_dma(dma_mode, buff->ptr,
- FT_SECTOR_SIZE * buff->sector_count);
-@@ -999,7 +993,7 @@ int fdc_setup_read_write(buffer_struct *
- out[8] = 0xff; /* No limit to transfer size. */
- TRACE(ft_t_fdc_dma, "C: 0x%02x, H: 0x%02x, R: 0x%02x, cnt: 0x%02x",
- out[2], out[3], out[4], out[6] - out[4] + 1);
-- restore_flags(flags);
-+ spin_unlock_irqrestore(&fdc_io_lock, flags);
- TRACE_CATCH(fdc_setup_error = fdc_command(out, 9),fdc_mode = fdc_idle);
- TRACE_EXIT 0;
- }
---- linux-2.6.0-test1/drivers/char/ftape/lowlevel/ftape-calibr.c 2003-06-14 12:18:05.000000000 -0700
-+++ 25/drivers/char/ftape/lowlevel/ftape-calibr.c 2003-07-19 17:03:49.000000000 -0700
-@@ -49,6 +49,8 @@
- static unsigned long ps_per_cycle = 0;
- #endif
-
-+static spinlock_t calibr_lock;
-+
- /*
- * Note: On Intel PCs, the clock ticks at 100 Hz (HZ==100) which is
- * too slow for certain timeouts (and that clock doesn't even tick
-@@ -75,13 +77,12 @@ unsigned int ftape_timestamp(void)
- __u16 lo;
- __u16 hi;
-
-- save_flags(flags);
-- cli();
-+ spin_lock_irqsave(&calibr_lock, flags);
- outb_p(0x00, 0x43); /* latch the count ASAP */
- lo = inb_p(0x40); /* read the latched count */
- lo |= inb(0x40) << 8;
- hi = jiffies;
-- restore_flags(flags);
-+ spin_unlock_irqrestore(&calibr_lock, flags);
- return ((hi + 1) * (unsigned int) LATCH) - lo; /* downcounter ! */
- #endif
- }
-@@ -94,12 +95,11 @@ static unsigned int short_ftape_timestam
- unsigned int count;
- unsigned long flags;
-
-- save_flags(flags);
-- cli();
-+ spin_lock_irqsave(&calibr_lock, flags);
- outb_p(0x00, 0x43); /* latch the count ASAP */
- count = inb_p(0x40); /* read the latched count */
- count |= inb(0x40) << 8;
-- restore_flags(flags);
-+ spin_unlock_irqrestore(&calibr_lock, flags);
- return (LATCH - count); /* normal: downcounter */
- #endif
- }
-@@ -150,14 +150,13 @@ static void time_inb(void)
- int status;
- TRACE_FUN(ft_t_any);
-
-- save_flags(flags);
-- cli();
-+ spin_lock_irqsave(&calibr_lock, flags);
- t0 = short_ftape_timestamp();
- for (i = 0; i < 1000; ++i) {
- status = inb(fdc.msr);
- }
- t1 = short_ftape_timestamp();
-- restore_flags(flags);
-+ spin_unlock_irqrestore(&calibr_lock, flags);
- TRACE(ft_t_info, "inb() duration: %d nsec", ftape_timediff(t0, t1));
- TRACE_EXIT;
- }
-@@ -241,8 +240,7 @@ void ftape_calibrate(char *name,
-
- *calibr_count =
- *calibr_time = count; /* set TC to 1 */
-- save_flags(flags);
-- cli();
-+ spin_lock_irqsave(&calibr_lock, flags);
- fun(0); /* dummy, get code into cache */
- t0 = short_ftape_timestamp();
- fun(0); /* overhead + one test */
-@@ -252,7 +250,7 @@ void ftape_calibrate(char *name,
- fun(count); /* overhead + count tests */
- t1 = short_ftape_timestamp();
- multiple = diff(t0, t1);
-- restore_flags(flags);
-+ spin_unlock_irqrestore(&calibr_lock, flags);
- time = ftape_timediff(0, multiple - once);
- tc = (1000 * time) / (count - 1);
- TRACE(ft_t_any, "once:%3d us,%6d times:%6d us, TC:%5d ns",
---- linux-2.6.0-test1/drivers/char/ftape/lowlevel/ftape-format.c 2003-06-14 12:18:21.000000000 -0700
-+++ 25/drivers/char/ftape/lowlevel/ftape-format.c 2003-07-19 17:03:49.000000000 -0700
-@@ -44,6 +44,8 @@
- #define FT_FMT_SEGS_PER_BUF (FT_BUFF_SIZE/(4*FT_SECTORS_PER_SEGMENT))
- #endif
-
-+static spinlock_t ftape_format_lock;
-+
- /*
- * first segment of the new buffer
- */
-@@ -129,9 +131,9 @@ int ftape_format_track(const unsigned in
- head->status = formatting;
- TRACE_CATCH(ftape_seek_head_to_track(track),);
- TRACE_CATCH(ftape_command(QIC_LOGICAL_FORWARD),);
-- save_flags(flags); cli();
-+ spin_lock_irqsave(&ftape_format_lock, flags);
- TRACE_CATCH(fdc_setup_formatting(head), restore_flags(flags));
-- restore_flags(flags);
-+ spin_unlock_irqrestore(&ftape_format_lock, flags);
- TRACE_EXIT 0;
- }
-
---- linux-2.6.0-test1/drivers/char/ftape/zftape/zftape-init.c 2003-06-14 12:18:07.000000000 -0700
-+++ 25/drivers/char/ftape/zftape/zftape-init.c 2003-07-19 17:03:49.000000000 -0700
-@@ -118,7 +118,7 @@ static int zft_open(struct inode *ino, s
- >
- FTAPE_SEL_D) {
- clear_bit(0,&busy_flag);
-- TRACE_ABORT(-ENXIO, ft_t_err, "failed: illegal unit nr");
-+ TRACE_ABORT(-ENXIO, ft_t_err, "failed: invalid unit nr");
- }
- orig_sigmask = current->blocked;
- sigfillset(¤t->blocked);
---- linux-2.6.0-test1/drivers/char/ip2.c 2003-06-14 12:18:20.000000000 -0700
-+++ 25/drivers/char/ip2.c 2003-07-19 17:03:49.000000000 -0700
-@@ -38,16 +38,14 @@ static int irq[IP2_MAX_BOARDS] = { -1, -
-
- static int poll_only = 0;
-
--# if LINUX_VERSION_CODE >= KERNEL_VERSION(2,1,0)
-- MODULE_AUTHOR("Doug McNash");
-- MODULE_DESCRIPTION("Computone IntelliPort Plus Driver");
-- MODULE_PARM(irq,"1-"__MODULE_STRING(IP2_MAX_BOARDS) "i");
-- MODULE_PARM_DESC(irq,"Interrupts for IntelliPort Cards");
-- MODULE_PARM(io,"1-"__MODULE_STRING(IP2_MAX_BOARDS) "i");
-- MODULE_PARM_DESC(io,"I/O ports for IntelliPort Cards");
-- MODULE_PARM(poll_only,"1i");
-- MODULE_PARM_DESC(poll_only,"Do not use card interrupts");
--# endif /* LINUX_VERSION */
-+MODULE_AUTHOR("Doug McNash");
-+MODULE_DESCRIPTION("Computone IntelliPort Plus Driver");
-+MODULE_PARM(irq,"1-"__MODULE_STRING(IP2_MAX_BOARDS) "i");
-+MODULE_PARM_DESC(irq,"Interrupts for IntelliPort Cards");
-+MODULE_PARM(io,"1-"__MODULE_STRING(IP2_MAX_BOARDS) "i");
-+MODULE_PARM_DESC(io,"I/O ports for IntelliPort Cards");
-+MODULE_PARM(poll_only,"1i");
-+MODULE_PARM_DESC(poll_only,"Do not use card interrupts");
-
-
- //======================================================================
---- linux-2.6.0-test1/drivers/char/ip2/i2lib.c 2003-06-14 12:18:51.000000000 -0700
-+++ 25/drivers/char/ip2/i2lib.c 2003-07-19 17:03:49.000000000 -0700
-@@ -1089,7 +1089,7 @@ i2Output(i2ChanStrPtr pCh, const char *p
-
- // Move the data
- if ( user ) {
-- COPY_FROM_USER(rc, (char*)(DATA_OF(pInsert)), pSource,
-+ rc = copy_from_user((char*)(DATA_OF(pInsert)), pSource,
- amountToMove );
- } else {
- memcpy( (char*)(DATA_OF(pInsert)), pSource, amountToMove );
---- linux-2.6.0-test1/drivers/char/ip2/i2os.h 2003-06-14 12:18:09.000000000 -0700
-+++ 25/drivers/char/ip2/i2os.h 2003-07-19 17:03:49.000000000 -0700
-@@ -19,8 +19,6 @@
- #ifndef I2OS_H /* To prevent multiple includes */
- #define I2OS_H 1
-
--#define VERSION(ver,rel,seq) (((ver)<<16) | ((rel)<<8) | (seq))
--
- //-------------------------------------------------
- // Required Includes
- //-------------------------------------------------
-@@ -46,22 +44,6 @@
- // Interrupt control
- //--------------------------------------------
-
--#if LINUX_VERSION_CODE < 0x00020100
--typedef int spinlock_t;
--#define spin_lock_init()
--#define spin_lock(a)
--#define spin_unlock(a)
--#define spin_lock_irqsave(a,b) {save_flags((b));cli();}
--#define spin_unlock_irqrestore(a,b) {restore_flags((b));}
--#define write_lock_irqsave(a,b) spin_lock_irqsave(a,b)
--#define write_unlock_irqrestore(a,b) spin_unlock_irqrestore(a,b)
--#define read_lock_irqsave(a,b) spin_lock_irqsave(a,b)
--#define read_unlock_irqrestore(a,b) spin_unlock_irqrestore(a,b)
--#endif
--
--//#define SAVE_AND_DISABLE_INTS(a,b) spin_lock_irqsave(a,b)
--//#define RESTORE_INTS(a,b) spin_unlock_irqrestore(a,b)
--
- #define LOCK_INIT(a) rwlock_init(a)
-
- #define SAVE_AND_DISABLE_INTS(a,b) { \
---- linux-2.6.0-test1/drivers/char/ip2main.c 2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/char/ip2main.c 2003-07-19 17:03:49.000000000 -0700
-@@ -83,7 +83,6 @@
- /* Includes */
- /************/
- #include <linux/config.h>
--// Uncomment the following if you want it compiled with modversions
-
- #include <linux/version.h>
-
-@@ -120,82 +119,11 @@
- #include <asm/irq.h>
- #include <asm/bitops.h>
-
--#ifndef KERNEL_VERSION
--#define KERNEL_VERSION(ver,rel,seq) (((ver)<<16) | ((rel)<<8) | (seq))
--#endif
--
--#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,1,0)
--# include <linux/vmalloc.h>
--# include <linux/init.h>
--# include <asm/serial.h>
--#else
--# include <linux/bios32.h>
--#endif
-+#include <linux/vmalloc.h>
-+#include <linux/init.h>
-+#include <asm/serial.h>
-
--// These VERSION switches maybe inexact because I simply don't know
--// when the various features appeared in the 2.1.XX kernels.
--// They are good enough for 2.0 vs 2.2 and if you are fooling with
--// the 2.1.XX stuff then it would be trivial for you to fix.
--// Most of these macros were stolen from some other drivers
--// so blame them.
--
--#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,1,4)
--# define GET_USER(error,value,addr) error = get_user(value,addr)
--# define COPY_FROM_USER(error,dest,src,size) error = copy_from_user(dest,src,size) ? -EFAULT : 0
--# define PUT_USER(error,value,addr) error = put_user(value,addr)
--# define COPY_TO_USER(error,dest,src,size) error = copy_to_user(dest,src,size) ? -EFAULT : 0
--
--# if LINUX_VERSION_CODE >= KERNEL_VERSION(2,1,5)
--# include <asm/uaccess.h>
--# define pcibios_strerror(status) \
-- printk( KERN_ERR "IP2: PCI error 0x%x \n", status );
--# endif
--
--#else /* 2.0.x and 2.1.x before 2.1.4 */
--
--# define proc_register_dynamic(a,b) proc_register(a,b)
--
--# define GET_USER(error,value,addr) \
-- do { \
-- error = verify_area (VERIFY_READ, (void *) addr, sizeof (value)); \
-- if (error == 0) \
-- value = get_user(addr); \
-- } while (0)
--
--# define COPY_FROM_USER(error,dest,src,size) \
-- do { \
-- error = verify_area (VERIFY_READ, (void *) src, size); \
-- if (error == 0) \
-- memcpy_fromfs (dest, src, size); \
-- } while (0)
--
--# define PUT_USER(error,value,addr) \
-- do { \
-- error = verify_area (VERIFY_WRITE, (void *) addr, sizeof (value)); \
-- if (error == 0) \
-- put_user (value, addr); \
-- } while (0)
--
--# define COPY_TO_USER(error,dest,src,size) \
-- do { \
-- error = verify_area (VERIFY_WRITE, (void *) dest, size); \
-- if (error == 0) \
-- memcpy_tofs (dest, src, size); \
-- } while (0)
--
--#endif
--
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,1,0)
--#define __init
--#define __initfunc(a) a
--#define __initdata
--#define ioremap(a,b) vremap((a),(b))
--#define iounmap(a) vfree((a))
--#define SERIAL_TYPE_NORMAL 1
--#define schedule_timeout(a){current->timeout = jiffies + (a); schedule();}
--#define signal_pending(a) ((a)->signal & ~(a)->blocked)
--#define in_interrupt() intr_count
--#endif
-+#include <asm/uaccess.h>
-
- #include "./ip2/ip2types.h"
- #include "./ip2/ip2trace.h"
-@@ -276,11 +204,7 @@ static int set_modem_info(i2ChanStrPtr,
- static int get_serial_info(i2ChanStrPtr, struct serial_struct *);
- static int set_serial_info(i2ChanStrPtr, struct serial_struct *);
-
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,1,0)
--static int ip2_ipl_read(struct inode *, char *, size_t , loff_t *);
--#else
--static ssize_t ip2_ipl_read(struct file *, char *, size_t, loff_t *) ;
--#endif
-+static ssize_t ip2_ipl_read(struct file *, char *, size_t, loff_t *);
- static ssize_t ip2_ipl_write(struct file *, const char *, size_t, loff_t *);
- static int ip2_ipl_ioctl(struct inode *, struct file *, UINT, ULONG);
- static int ip2_ipl_open(struct inode *, struct file *);
-@@ -354,9 +278,6 @@ static int tracewrap;
- #define DBG_CNT(s)
- #endif
-
--#define MIN(a,b) ( ( (a) < (b) ) ? (a) : (b) )
--#define MAX(a,b) ( ( (a) > (b) ) ? (a) : (b) )
--
- /********/
- /* Code */
- /********/
-@@ -366,12 +287,9 @@ static int tracewrap;
- #include "./ip2/i2lib.c" /* High level interface services */
-
- /* Configuration area for modprobe */
--#ifdef MODULE
--# if LINUX_VERSION_CODE >= KERNEL_VERSION(2,1,0)
-- MODULE_AUTHOR("Doug McNash");
-- MODULE_DESCRIPTION("Computone IntelliPort Plus Driver");
--# endif /* LINUX_VERSION */
--#endif /* MODULE */
-+
-+MODULE_AUTHOR("Doug McNash");
-+MODULE_DESCRIPTION("Computone IntelliPort Plus Driver");
-
- static int poll_only = 0;
-
-@@ -660,53 +578,6 @@ ip2_loadmain(int *iop, int *irqp, unsign
- break;
- case PCI:
- #ifdef CONFIG_PCI
--#if (LINUX_VERSION_CODE < 0x020163) /* 2.1.99 */
-- if (pcibios_present()) {
-- unsigned char pci_bus, pci_devfn;
-- int Pci_index = 0;
-- status = pcibios_find_device(PCI_VENDOR_ID_COMPUTONE,
-- PCI_DEVICE_ID_COMPUTONE_IP2EX, Pci_index,
-- &pci_bus, &pci_devfn);
-- if (status == 0) {
-- unsigned int addr;
-- unsigned char pci_irq;
--
-- ip2config.type[i] = PCI;
-- /*
-- * Update Pci_index, so that the next time we go
-- * searching for a PCI board we find a different
-- * one.
-- */
-- ++Pci_index;
--
-- pcibios_read_config_dword(pci_bus, pci_devfn,
-- PCI_BASE_ADDRESS_1, &addr);
-- if ( addr & 1 ) {
-- ip2config.addr[i]=(USHORT)(addr&0xfffe);
-- } else {
-- printk( KERN_ERR "IP2: PCI I/O address error\n");
-- }
-- pcibios_read_config_byte(pci_bus, pci_devfn,
-- PCI_INTERRUPT_LINE, &pci_irq);
--
--// If the PCI BIOS assigned it, lets try and use it. If we
--// can't acquire it or it screws up, deal with it then.
--
--// if (!is_valid_irq(pci_irq)) {
--// printk( KERN_ERR "IP2: Bad PCI BIOS IRQ(%d)\n",pci_irq);
--// pci_irq = 0;
--// }
-- ip2config.irq[i] = pci_irq;
-- } else { // ann error
-- ip2config.addr[i] = 0;
-- if (status == PCIBIOS_DEVICE_NOT_FOUND) {
-- printk( KERN_ERR "IP2: PCI board %d not found\n", i );
-- } else {
-- pcibios_strerror(status);
-- }
-- }
-- }
--#else /* LINUX_VERSION_CODE > 2.1.99 */
- {
- struct pci_dev *pci_dev_i = NULL;
- pci_dev_i = pci_find_device(PCI_VENDOR_ID_COMPUTONE,
-@@ -739,11 +610,10 @@ ip2_loadmain(int *iop, int *irqp, unsign
- if (status == PCIBIOS_DEVICE_NOT_FOUND) {
- printk( KERN_ERR "IP2: PCI board %d not found\n", i );
- } else {
-- pcibios_strerror(status);
-+ printk( KERN_ERR "IP2: PCI error 0x%x \n", status );
- }
- }
- }
--#endif /* ! 2_0_X */
- #else
- printk( KERN_ERR "IP2: PCI card specified but PCI support not\n");
- printk( KERN_ERR "IP2: configured in this kernel.\n");
-@@ -2193,7 +2063,7 @@ ip2_ioctl ( PTTY tty, struct file *pFile
-
- ip2trace (CHANN, ITRC_IOCTL, 6, 1, rc );
-
-- PUT_USER(rc,C_CLOCAL(tty) ? 1 : 0, (unsigned long *) arg);
-+ rc = put_user(C_CLOCAL(tty) ? 1 : 0, (unsigned long *) arg);
- if (rc)
- return rc;
- break;
-@@ -2202,7 +2072,7 @@ ip2_ioctl ( PTTY tty, struct file *pFile
-
- ip2trace (CHANN, ITRC_IOCTL, 7, 1, rc );
-
-- GET_USER(rc,arg,(unsigned long *) arg);
-+ rc = get_user(arg,(unsigned long *) arg);
- if (rc)
- return rc;
- tty->termios->c_cflag = ((tty->termios->c_cflag & ~CLOCAL)
-@@ -2243,7 +2113,7 @@ ip2_ioctl ( PTTY tty, struct file *pFile
- return -EINTR;
- }
- #endif
-- PUT_USER(rc,
-+ rc = put_user(
- ((pCh->dataSetOut & I2_RTS) ? TIOCM_RTS : 0)
- | ((pCh->dataSetOut & I2_DTR) ? TIOCM_DTR : 0)
- | ((pCh->dataSetIn & I2_DCD) ? TIOCM_CAR : 0)
-@@ -2333,17 +2203,17 @@ ip2_ioctl ( PTTY tty, struct file *pFile
- cnow = pCh->icount;
- restore_flags(flags);
- p_cuser = (struct serial_icounter_struct *) arg;
-- PUT_USER(rc,cnow.cts, &p_cuser->cts);
-- PUT_USER(rc,cnow.dsr, &p_cuser->dsr);
-- PUT_USER(rc,cnow.rng, &p_cuser->rng);
-- PUT_USER(rc,cnow.dcd, &p_cuser->dcd);
-- PUT_USER(rc,cnow.rx, &p_cuser->rx);
-- PUT_USER(rc,cnow.tx, &p_cuser->tx);
-- PUT_USER(rc,cnow.frame, &p_cuser->frame);
-- PUT_USER(rc,cnow.overrun, &p_cuser->overrun);
-- PUT_USER(rc,cnow.parity, &p_cuser->parity);
-- PUT_USER(rc,cnow.brk, &p_cuser->brk);
-- PUT_USER(rc,cnow.buf_overrun, &p_cuser->buf_overrun);
-+ rc = put_user(cnow.cts, &p_cuser->cts);
-+ rc = put_user(cnow.dsr, &p_cuser->dsr);
-+ rc = put_user(cnow.rng, &p_cuser->rng);
-+ rc = put_user(cnow.dcd, &p_cuser->dcd);
-+ rc = put_user(cnow.rx, &p_cuser->rx);
-+ rc = put_user(cnow.tx, &p_cuser->tx);
-+ rc = put_user(cnow.frame, &p_cuser->frame);
-+ rc = put_user(cnow.overrun, &p_cuser->overrun);
-+ rc = put_user(cnow.parity, &p_cuser->parity);
-+ rc = put_user(cnow.brk, &p_cuser->brk);
-+ rc = put_user(cnow.buf_overrun, &p_cuser->buf_overrun);
- break;
-
- /*
-@@ -2387,7 +2257,7 @@ set_modem_info(i2ChanStrPtr pCh, unsigne
- int rc;
- unsigned int arg;
-
-- GET_USER(rc,arg,value);
-+ rc = get_user(arg,value);
- if (rc)
- return rc;
- switch(cmd) {
-@@ -2469,7 +2339,7 @@ get_serial_info ( i2ChanStrPtr pCh, stru
- tmp.close_delay = pCh->ClosingDelay;
- tmp.closing_wait = pCh->ClosingWaitTime;
- tmp.custom_divisor = pCh->BaudDivisor;
-- COPY_TO_USER(rc,retinfo,&tmp,sizeof(*retinfo));
-+ rc = copy_to_user(retinfo,&tmp,sizeof(*retinfo));
- return rc;
- }
-
-@@ -2489,15 +2359,15 @@ set_serial_info( i2ChanStrPtr pCh, struc
- {
- struct serial_struct ns;
- int old_flags, old_baud_divisor;
-- int rc = 0;
-
- if ( !new_info ) {
- return -EFAULT;
- }
-- COPY_FROM_USER(rc, &ns, new_info, sizeof (ns) );
-- if (rc) {
-- return rc;
-+
-+ if (copy_from_user(&ns, new_info, sizeof (ns))) {
-+ return -EFAULT;
- }
-+
- /*
- * We don't allow setserial to change IRQ, board address, type or baud
- * base. Also line nunber as such is meaningless but we use it for our
-@@ -2537,7 +2407,7 @@ set_serial_info( i2ChanStrPtr pCh, struc
- set_params( pCh, NULL );
- }
-
-- return rc;
-+ return 0;
- }
-
- /******************************************************************************/
-@@ -2860,16 +2730,10 @@ service_it:
- /******************************************************************************/
-
- static
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,1,0)
--int
--ip2_ipl_read(struct inode *pInode, char *pData, size_t count, loff_t *off )
-- unsigned int minor = minor( pInode->i_rdev );
--#else
- ssize_t
- ip2_ipl_read(struct file *pFile, char *pData, size_t count, loff_t *off )
- {
- unsigned int minor = minor( pFile->f_dentry->d_inode->i_rdev );
--#endif
- int rc = 0;
-
- #ifdef IP2DEBUG_IPL
-@@ -2904,7 +2768,7 @@ DumpFifoBuffer ( char *pData, int count
- {
- #ifdef DEBUG_FIFO
- int rc;
-- COPY_TO_USER(rc, pData, DBGBuf, count);
-+ rc = copy_to_user(pData, DBGBuf, count);
-
- printk(KERN_DEBUG "Last index %d\n", I );
-
-@@ -2925,10 +2789,10 @@ DumpTraceBuffer ( char *pData, int count
- if ( count < (sizeof(int) * 6) ) {
- return -EIO;
- }
-- PUT_USER(rc, tracewrap, pIndex );
-- PUT_USER(rc, TRACEMAX, ++pIndex );
-- PUT_USER(rc, tracestrip, ++pIndex );
-- PUT_USER(rc, tracestuff, ++pIndex );
-+ rc = put_user(tracewrap, pIndex );
-+ rc = put_user(TRACEMAX, ++pIndex );
-+ rc = put_user(tracestrip, ++pIndex );
-+ rc = put_user(tracestuff, ++pIndex );
- pData += sizeof(int) * 6;
- count -= sizeof(int) * 6;
-
-@@ -2941,7 +2805,7 @@ DumpTraceBuffer ( char *pData, int count
- }
- chunk = TRACEMAX - tracestrip;
- if ( dumpcount > chunk ) {
-- COPY_TO_USER(rc, pData, &tracebuf[tracestrip],
-+ rc = copy_to_user(pData, &tracebuf[tracestrip],
- chunk * sizeof(tracebuf[0]) );
- pData += chunk * sizeof(tracebuf[0]);
- tracestrip = 0;
-@@ -2949,13 +2813,13 @@ DumpTraceBuffer ( char *pData, int count
- } else {
- chunk = dumpcount;
- }
-- COPY_TO_USER(rc, pData, &tracebuf[tracestrip],
-+ rc = copy_to_user(pData, &tracebuf[tracestrip],
- chunk * sizeof(tracebuf[0]) );
- tracestrip += chunk;
- tracewrap = 0;
-
-- PUT_USER(rc, tracestrip, ++pIndex );
-- PUT_USER(rc, tracestuff, ++pIndex );
-+ rc = put_user(tracestrip, ++pIndex );
-+ rc = put_user(tracestuff, ++pIndex );
-
- return dumpcount;
- #else
-@@ -3019,15 +2883,15 @@ ip2_ipl_ioctl ( struct inode *pInode, st
- case 13:
- switch ( cmd ) {
- case 64: /* Driver - ip2stat */
-- PUT_USER(rc, ip2_tty_driver->refcount, pIndex++ );
-- PUT_USER(rc, irq_counter, pIndex++ );
-- PUT_USER(rc, bh_counter, pIndex++ );
-+ rc = put_user(ip2_tty_driver->refcount, pIndex++ );
-+ rc = put_user(irq_counter, pIndex++ );
-+ rc = put_user(bh_counter, pIndex++ );
- break;
-
- case 65: /* Board - ip2stat */
- if ( pB ) {
-- COPY_TO_USER(rc, (char*)arg, (char*)pB, sizeof(i2eBordStr) );
-- PUT_USER(rc, INB(pB->i2eStatus),
-+ rc = copy_to_user((char*)arg, (char*)pB, sizeof(i2eBordStr) );
-+ rc = put_user(INB(pB->i2eStatus),
- (ULONG*)(arg + (ULONG)(&pB->i2eStatus) - (ULONG)pB ) );
- } else {
- rc = -ENODEV;
-@@ -3039,7 +2903,7 @@ ip2_ipl_ioctl ( struct inode *pInode, st
- pCh = DevTable[cmd];
- if ( pCh )
- {
-- COPY_TO_USER(rc, (char*)arg, (char*)pCh, sizeof(i2ChanStr) );
-+ rc = copy_to_user((char*)arg, (char*)pCh, sizeof(i2ChanStr) );
- } else {
- rc = -ENODEV;
- }
-@@ -3054,60 +2918,60 @@ ip2_ipl_ioctl ( struct inode *pInode, st
- break;
- case 3: // Trace device
- if ( cmd == 1 ) {
-- PUT_USER(rc, iiSendPendingMail, pIndex++ );
-- PUT_USER(rc, i2InitChannels, pIndex++ );
-- PUT_USER(rc, i2QueueNeeds, pIndex++ );
-- PUT_USER(rc, i2QueueCommands, pIndex++ );
-- PUT_USER(rc, i2GetStatus, pIndex++ );
-- PUT_USER(rc, i2Input, pIndex++ );
-- PUT_USER(rc, i2InputFlush, pIndex++ );
-- PUT_USER(rc, i2Output, pIndex++ );
-- PUT_USER(rc, i2FlushOutput, pIndex++ );
-- PUT_USER(rc, i2DrainWakeup, pIndex++ );
-- PUT_USER(rc, i2DrainOutput, pIndex++ );
-- PUT_USER(rc, i2OutputFree, pIndex++ );
-- PUT_USER(rc, i2StripFifo, pIndex++ );
-- PUT_USER(rc, i2StuffFifoBypass, pIndex++ );
-- PUT_USER(rc, i2StuffFifoFlow, pIndex++ );
-- PUT_USER(rc, i2StuffFifoInline, pIndex++ );
-- PUT_USER(rc, i2ServiceBoard, pIndex++ );
-- PUT_USER(rc, serviceOutgoingFifo, pIndex++ );
-- // PUT_USER(rc, ip2_init, pIndex++ );
-- PUT_USER(rc, ip2_init_board, pIndex++ );
-- PUT_USER(rc, find_eisa_board, pIndex++ );
-- PUT_USER(rc, set_irq, pIndex++ );
-- PUT_USER(rc, ip2_interrupt, pIndex++ );
-- PUT_USER(rc, ip2_poll, pIndex++ );
-- PUT_USER(rc, service_all_boards, pIndex++ );
-- PUT_USER(rc, do_input, pIndex++ );
-- PUT_USER(rc, do_status, pIndex++ );
-+ rc = put_user(iiSendPendingMail, pIndex++ );
-+ rc = put_user(i2InitChannels, pIndex++ );
-+ rc = put_user(i2QueueNeeds, pIndex++ );
-+ rc = put_user(i2QueueCommands, pIndex++ );
-+ rc = put_user(i2GetStatus, pIndex++ );
-+ rc = put_user(i2Input, pIndex++ );
-+ rc = put_user(i2InputFlush, pIndex++ );
-+ rc = put_user(i2Output, pIndex++ );
-+ rc = put_user(i2FlushOutput, pIndex++ );
-+ rc = put_user(i2DrainWakeup, pIndex++ );
-+ rc = put_user(i2DrainOutput, pIndex++ );
-+ rc = put_user(i2OutputFree, pIndex++ );
-+ rc = put_user(i2StripFifo, pIndex++ );
-+ rc = put_user(i2StuffFifoBypass, pIndex++ );
-+ rc = put_user(i2StuffFifoFlow, pIndex++ );
-+ rc = put_user(i2StuffFifoInline, pIndex++ );
-+ rc = put_user(i2ServiceBoard, pIndex++ );
-+ rc = put_user(serviceOutgoingFifo, pIndex++ );
-+ // rc = put_user(ip2_init, pIndex++ );
-+ rc = put_user(ip2_init_board, pIndex++ );
-+ rc = put_user(find_eisa_board, pIndex++ );
-+ rc = put_user(set_irq, pIndex++ );
-+ rc = put_user(ip2_interrupt, pIndex++ );
-+ rc = put_user(ip2_poll, pIndex++ );
-+ rc = put_user(service_all_boards, pIndex++ );
-+ rc = put_user(do_input, pIndex++ );
-+ rc = put_user(do_status, pIndex++ );
- #ifndef IP2DEBUG_OPEN
-- PUT_USER(rc, 0, pIndex++ );
-+ rc = put_user(0, pIndex++ );
- #else
-- PUT_USER(rc, open_sanity_check, pIndex++ );
-+ rc = put_user(open_sanity_check, pIndex++ );
- #endif
-- PUT_USER(rc, ip2_open, pIndex++ );
-- PUT_USER(rc, ip2_close, pIndex++ );
-- PUT_USER(rc, ip2_hangup, pIndex++ );
-- PUT_USER(rc, ip2_write, pIndex++ );
-- PUT_USER(rc, ip2_putchar, pIndex++ );
-- PUT_USER(rc, ip2_flush_chars, pIndex++ );
-- PUT_USER(rc, ip2_write_room, pIndex++ );
-- PUT_USER(rc, ip2_chars_in_buf, pIndex++ );
-- PUT_USER(rc, ip2_flush_buffer, pIndex++ );
--
-- //PUT_USER(rc, ip2_wait_until_sent, pIndex++ );
-- PUT_USER(rc, 0, pIndex++ );
--
-- PUT_USER(rc, ip2_throttle, pIndex++ );
-- PUT_USER(rc, ip2_unthrottle, pIndex++ );
-- PUT_USER(rc, ip2_ioctl, pIndex++ );
-- PUT_USER(rc, set_modem_info, pIndex++ );
-- PUT_USER(rc, get_serial_info, pIndex++ );
-- PUT_USER(rc, set_serial_info, pIndex++ );
-- PUT_USER(rc, ip2_set_termios, pIndex++ );
-- PUT_USER(rc, ip2_set_line_discipline, pIndex++ );
-- PUT_USER(rc, set_params, pIndex++ );
-+ rc = put_user(ip2_open, pIndex++ );
-+ rc = put_user(ip2_close, pIndex++ );
-+ rc = put_user(ip2_hangup, pIndex++ );
-+ rc = put_user(ip2_write, pIndex++ );
-+ rc = put_user(ip2_putchar, pIndex++ );
-+ rc = put_user(ip2_flush_chars, pIndex++ );
-+ rc = put_user(ip2_write_room, pIndex++ );
-+ rc = put_user(ip2_chars_in_buf, pIndex++ );
-+ rc = put_user(ip2_flush_buffer, pIndex++ );
-+
-+ //rc = put_user(ip2_wait_until_sent, pIndex++ );
-+ rc = put_user(0, pIndex++ );
-+
-+ rc = put_user(ip2_throttle, pIndex++ );
-+ rc = put_user(ip2_unthrottle, pIndex++ );
-+ rc = put_user(ip2_ioctl, pIndex++ );
-+ rc = put_user(set_modem_info, pIndex++ );
-+ rc = put_user(get_serial_info, pIndex++ );
-+ rc = put_user(set_serial_info, pIndex++ );
-+ rc = put_user(ip2_set_termios, pIndex++ );
-+ rc = put_user(ip2_set_line_discipline, pIndex++ );
-+ rc = put_user(set_params, pIndex++ );
- } else {
- rc = -EINVAL;
- }
---- linux-2.6.0-test1/drivers/char/istallion.c 2003-06-14 12:18:24.000000000 -0700
-+++ 25/drivers/char/istallion.c 2003-07-19 17:03:49.000000000 -0700
-@@ -650,8 +650,6 @@ static unsigned int stli_baudrates[] = {
- */
-
- #ifdef MODULE
--int init_module(void);
--void cleanup_module(void);
- static void stli_argbrds(void);
- static int stli_parsebrd(stlconf_t *confp, char **argp);
-
---- linux-2.6.0-test1/drivers/char/keyboard.c 2003-06-26 22:07:24.000000000 -0700
-+++ 25/drivers/char/keyboard.c 2003-07-19 17:04:02.000000000 -0700
-@@ -1055,6 +1055,9 @@ void kbd_keycode(unsigned int keycode, i
- }
- if (sysrq_down && down && !rep) {
- handle_sysrq(kbd_sysrq_xlate[keycode], regs, tty);
-+#ifdef CONFIG_KGDB_SYSRQ
-+ sysrq_down = 0; /* in case we miss the "up" event */
-+#endif
- return;
- }
- #endif
---- linux-2.6.0-test1/drivers/char/moxa.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/char/moxa.c 2003-07-19 17:03:49.000000000 -0700
-@@ -216,10 +216,7 @@ static struct timer_list moxaEmptyTimer[
- static struct semaphore moxaBuffSem;
-
- int moxa_init(void);
--#ifdef MODULE
--int init_module(void);
--void cleanup_module(void);
--#endif
-+
- /*
- * static functions:
- */
---- linux-2.6.0-test1/drivers/char/nwbutton.h 2003-06-14 12:18:04.000000000 -0700
-+++ 25/drivers/char/nwbutton.h 2003-07-19 17:03:49.000000000 -0700
-@@ -32,10 +32,6 @@ int button_init (void);
- int button_add_callback (void (*callback) (void), int count);
- int button_del_callback (void (*callback) (void));
- static void button_consume_callbacks (int bpcount);
--#ifdef MODULE
--int init_module (void);
--void cleanup_module (void);
--#endif /* MODULE */
-
- #else /* Not compiling the driver itself */
-
---- linux-2.6.0-test1/drivers/char/pcxx.c 2003-06-14 12:18:23.000000000 -0700
-+++ 25/drivers/char/pcxx.c 2003-07-19 17:03:49.000000000 -0700
-@@ -209,17 +209,9 @@ static void cleanup_board_resources(void
-
- #ifdef MODULE
-
--/*
-- * pcxe_init() is our init_module():
-- */
--#define pcxe_init init_module
--
--void cleanup_module(void);
--
--
- /*****************************************************************************/
-
--void cleanup_module()
-+static void pcxe_cleanup()
- {
-
- unsigned long flags;
-@@ -240,6 +232,12 @@ void cleanup_module()
- kfree(digi_channels);
- restore_flags(flags);
- }
-+
-+/*
-+ * pcxe_init() is our init_module():
-+ */
-+module_init(pcxe_init);
-+module_cleanup(pcxe_cleanup);
- #endif
-
- static inline struct channel *chan(register struct tty_struct *tty)
---- linux-2.6.0-test1/drivers/char/stallion.c 2003-06-14 12:18:29.000000000 -0700
-+++ 25/drivers/char/stallion.c 2003-07-19 17:03:49.000000000 -0700
-@@ -472,8 +472,6 @@ static unsigned int stl_baudrates[] = {
- */
-
- #ifdef MODULE
--int init_module(void);
--void cleanup_module(void);
- static void stl_argbrds(void);
- static int stl_parsebrd(stlconf_t *confp, char **argp);
-
---- linux-2.6.0-test1/drivers/char/sysrq.c 2003-06-26 22:07:24.000000000 -0700
-+++ 25/drivers/char/sysrq.c 2003-07-19 17:04:02.000000000 -0700
-@@ -35,6 +35,19 @@
- #include <linux/spinlock.h>
-
- #include <asm/ptrace.h>
-+#ifdef CONFIG_KGDB_SYSRQ
-+
-+#define GDB_OP &kgdb_op
-+static struct sysrq_key_op kgdb_op={
-+ handler: (void*)breakpoint,
-+ help_msg: "kGdb ",
-+ action_msg: "Debug breakpoint\n",
-+};
-+
-+#else
-+#define GDB_OP NULL
-+#endif
-+
-
- extern void reset_vc(unsigned int);
- extern struct list_head super_blocks;
-@@ -240,7 +253,7 @@ static struct sysrq_key_op *sysrq_key_ta
- /* d */ NULL,
- /* e */ &sysrq_term_op,
- /* f */ NULL,
--/* g */ NULL,
-+/* g */ GDB_OP,
- /* h */ NULL,
- /* i */ &sysrq_kill_op,
- /* j */ NULL,
---- linux-2.6.0-test1/drivers/char/tty_io.c 2003-06-14 12:18:23.000000000 -0700
-+++ 25/drivers/char/tty_io.c 2003-07-19 17:06:13.000000000 -0700
-@@ -2106,7 +2106,7 @@ static spinlock_t tty_dev_list_lock = SP
- static ssize_t show_dev(struct class_device *class_dev, char *buf)
- {
- struct tty_dev *tty_dev = to_tty_dev(class_dev);
-- return sprintf(buf, "%04lx\n", (unsigned long)tty_dev->dev);
-+ return print_dev_t(buf, tty_dev->dev);
- }
- static CLASS_DEVICE_ATTR(dev, S_IRUGO, show_dev, NULL);
-
---- linux-2.6.0-test1/drivers/char/watchdog/acquirewdt.c 2003-06-14 12:18:24.000000000 -0700
-+++ 25/drivers/char/watchdog/acquirewdt.c 2003-07-19 17:03:49.000000000 -0700
-@@ -143,7 +143,7 @@ static int acq_open(struct inode *inode,
- return -EBUSY;
- }
- if (nowayout)
-- MOD_INC_USE_COUNT;
-+ __module_get(THIS_MODULE);
-
- /* Activate */
- acq_is_open=1;
---- linux-2.6.0-test1/drivers/char/watchdog/i810-tco.c 2003-06-14 12:17:56.000000000 -0700
-+++ 25/drivers/char/watchdog/i810-tco.c 2003-07-19 17:03:49.000000000 -0700
-@@ -25,7 +25,8 @@
- * 82801AA & 82801AB chip : document number 290655-003, 290677-004,
- * 82801BA & 82801BAM chip : document number 290687-002, 298242-005,
- * 82801CA & 82801CAM chip : document number 290716-001, 290718-001,
-- * 82801DB & 82801E chip : document number 290744-001, 273599-001
-+ * 82801DB & 82801E chip : document number 290744-001, 273599-001,
-+ * 82801EB & 82801ER chip : document number 252516-001
- *
- * 20000710 Nils Faerber
- * Initial Version 0.01
-@@ -42,9 +43,11 @@
- * clean up ioctls (WDIOC_GETSTATUS, WDIOC_GETBOOTSTATUS and
- * WDIOC_SETOPTIONS), made i810tco_getdevice __init,
- * removed boot_status, removed tco_timer_read,
-- * added support for 82801DB and 82801E chipset, general cleanup.
-+ * added support for 82801DB and 82801E chipset,
-+ * added support for 82801EB and 8280ER chipset,
-+ * general cleanup.
- */
--
-+
- #include <linux/module.h>
- #include <linux/types.h>
- #include <linux/miscdevice.h>
-@@ -164,7 +167,7 @@ static int tco_timer_settimer (unsigned
- * Reload (trigger) the timer. Lock is needed so we don't reload it during
- * a reprogramming event
- */
--
-+
- static void tco_timer_reload (void)
- {
- spin_lock(&tco_lock);
-@@ -307,6 +310,7 @@ static struct pci_device_id i810tco_pci_
- { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_12, PCI_ANY_ID, PCI_ANY_ID, },
- { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_0, PCI_ANY_ID, PCI_ANY_ID, },
- { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801E_0, PCI_ANY_ID, PCI_ANY_ID, },
-+ { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801EB_0, PCI_ANY_ID, PCI_ANY_ID, },
- { 0, },
- };
- MODULE_DEVICE_TABLE (pci, i810tco_pci_tbl);
---- linux-2.6.0-test1/drivers/char/watchdog/i810-tco.h 2003-06-14 12:18:25.000000000 -0700
-+++ 25/drivers/char/watchdog/i810-tco.h 2003-07-19 17:03:49.000000000 -0700
-@@ -1,5 +1,5 @@
- /*
-- * i810-tco 0.05: TCO timer driver for i8xx chipsets
-+ * i810-tco: TCO timer driver for i8xx chipsets
- *
- * (c) Copyright 2000 kernel concepts <nils@kernelconcepts.de>, All Rights Reserved.
- * http://www.kernelconcepts.de
-@@ -8,7 +8,7 @@
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version
- * 2 of the License, or (at your option) any later version.
-- *
-+ *
- * Neither kernel concepts nor Nils Faerber admit liability nor provide
- * warranty for any of this software. This material is provided
- * "AS-IS" and at no charge.
---- linux-2.6.0-test1/drivers/char/watchdog/ib700wdt.c 2003-06-14 12:18:33.000000000 -0700
-+++ 25/drivers/char/watchdog/ib700wdt.c 2003-07-19 17:03:49.000000000 -0700
-@@ -230,7 +230,7 @@ ibwdt_open(struct inode *inode, struct f
- return -EBUSY;
- }
- if (nowayout)
-- MOD_INC_USE_COUNT;
-+ __module_get(THIS_MODULE);
-
- /* Activate */
- ibwdt_is_open = 1;
---- linux-2.6.0-test1/drivers/char/watchdog/indydog.c 2003-06-14 12:18:34.000000000 -0700
-+++ 25/drivers/char/watchdog/indydog.c 2003-07-19 17:03:49.000000000 -0700
-@@ -54,7 +54,7 @@ static int indydog_open(struct inode *in
- return -EBUSY;
-
- if (nowayout)
-- MOD_INC_USE_COUNT;
-+ __module_get(THIS_MODULE);
-
- /*
- * Activate timer
---- linux-2.6.0-test1/drivers/char/watchdog/machzwd.c 2003-06-14 12:17:59.000000000 -0700
-+++ 25/drivers/char/watchdog/machzwd.c 2003-07-19 17:03:49.000000000 -0700
-@@ -392,7 +392,7 @@ static int zf_open(struct inode *inode,
- }
-
- if (nowayout)
-- MOD_INC_USE_COUNT;
-+ __module_get(THIS_MODULE);
-
- zf_is_open = 1;
-
---- linux-2.6.0-test1/drivers/char/watchdog/pcwd.c 2003-06-14 12:17:57.000000000 -0700
-+++ 25/drivers/char/watchdog/pcwd.c 2003-07-19 17:03:49.000000000 -0700
-@@ -431,7 +431,7 @@ static int pcwd_open(struct inode *ino,
- atomic_inc( &open_allowed );
- return -EBUSY;
- }
-- MOD_INC_USE_COUNT;
-+ __module_get(THIS_MODULE);
- /* Enable the port */
- if (revision == PCWD_REVISION_C) {
- spin_lock(&io_lock);
---- linux-2.6.0-test1/drivers/char/watchdog/sbc60xxwdt.c 2003-06-14 12:18:25.000000000 -0700
-+++ 25/drivers/char/watchdog/sbc60xxwdt.c 2003-07-19 17:03:49.000000000 -0700
-@@ -207,9 +207,8 @@ static int fop_open(struct inode * inode
- /* Just in case we're already talking to someone... */
- if(wdt_is_open)
- return -EBUSY;
-- if (nowayout) {
-- MOD_INC_USE_COUNT;
-- }
-+ if (nowayout)
-+ __module_get(THIS_MODULE);
- /* Good, fire up the show */
- wdt_is_open = 1;
- wdt_startup();
---- linux-2.6.0-test1/drivers/char/watchdog/sc520_wdt.c 2003-06-14 12:18:20.000000000 -0700
-+++ 25/drivers/char/watchdog/sc520_wdt.c 2003-07-19 17:03:49.000000000 -0700
-@@ -231,7 +231,7 @@ static int fop_open(struct inode * inode
- /* Good, fire up the show */
- wdt_startup();
- if (nowayout)
-- MOD_INC_USE_COUNT;
-+ __module_get(THIS_MODULE);
-
- return 0;
- default:
---- linux-2.6.0-test1/drivers/char/watchdog/shwdt.c 2003-06-14 12:18:06.000000000 -0700
-+++ 25/drivers/char/watchdog/shwdt.c 2003-07-19 17:03:49.000000000 -0700
-@@ -3,7 +3,7 @@
- *
- * Watchdog driver for integrated watchdog in the SuperH processors.
- *
-- * Copyright (C) 2001, 2002 Paul Mundt <lethal@0xd6.org>
-+ * Copyright (C) 2001, 2002, 2003 Paul Mundt <lethal@linux-sh.org>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
-@@ -12,6 +12,10 @@
- *
- * 14-Dec-2001 Matt Domsch <Matt_Domsch@dell.com>
- * Added nowayout module option to override CONFIG_WATCHDOG_NOWAYOUT
-+ *
-+ * 19-Apr-2002 Rob Radez <rob@osinvestor.com>
-+ * Added expect close support, made emulated timeout runtime changeable
-+ * general cleanups, add some ioctls
- */
- #include <linux/config.h>
- #include <linux/module.h>
-@@ -22,76 +26,50 @@
- #include <linux/reboot.h>
- #include <linux/notifier.h>
- #include <linux/ioport.h>
-+#include <linux/fs.h>
-
- #include <asm/io.h>
- #include <asm/uaccess.h>
--
--#if defined(CONFIG_CPU_SH5)
-- #define WTCNT CPRC_BASE + 0x10
-- #define WTCSR CPRC_BASE + 0x18
--#elif defined(CONFIG_CPU_SH4)
-- #define WTCNT 0xffc00008
-- #define WTCSR 0xffc0000c
--#elif defined(CONFIG_CPU_SH3)
-- #define WTCNT 0xffffff84
-- #define WTCSR 0xffffff86
--#else
-- #error "Can't use SuperH watchdog on this platform"
--#endif
--
--#define WTCNT_HIGH 0x5a00
--#define WTCSR_HIGH 0xa500
--
--#define WTCSR_TME 0x80
--#define WTCSR_WT 0x40
--#define WTCSR_RSTS 0x20
--#define WTCSR_WOVF 0x10
--#define WTCSR_IOVF 0x08
--#define WTCSR_CKS2 0x04
--#define WTCSR_CKS1 0x02
--#define WTCSR_CKS0 0x01
--
--/*
-- * CKS0-2 supports a number of clock division ratios. At the time the watchdog
-- * is enabled, it defaults to a 41 usec overflow period .. we overload this to
-- * something a little more reasonable, and really can't deal with anything
-- * lower than WTCSR_CKS_1024, else we drop back into the usec range.
-- *
-- * Clock Division Ratio Overflow Period
-- * --------------------------------------------
-- * 1/32 (initial value) 41 usecs
-- * 1/64 82 usecs
-- * 1/128 164 usecs
-- * 1/256 328 usecs
-- * 1/512 656 usecs
-- * 1/1024 1.31 msecs
-- * 1/2048 2.62 msecs
-- * 1/4096 5.25 msecs
-- */
--#define WTCSR_CKS_32 0x00
--#define WTCSR_CKS_64 0x01
--#define WTCSR_CKS_128 0x02
--#define WTCSR_CKS_256 0x03
--#define WTCSR_CKS_512 0x04
--#define WTCSR_CKS_1024 0x05
--#define WTCSR_CKS_2048 0x06
--#define WTCSR_CKS_4096 0x07
-+#include <asm/watchdog.h>
-
- /*
-- * Default clock division ratio is 5.25 msecs. Overload this at module load
-- * time. Any value not in the msec range will default to a timeout of one
-- * jiffy, which exceeds the usec overflow periods.
-+ * Default clock division ratio is 5.25 msecs. For an additional table of
-+ * values, consult the asm-sh/watchdog.h. Overload this at module load
-+ * time.
-+ *
-+ * In order for this to work reliably we need to have HZ set to 1000 or
-+ * something quite higher than 100 (or we need a proper high-res timer
-+ * implementation that will deal with this properly), otherwise the 10ms
-+ * resolution of a jiffy is enough to trigger the overflow. For things like
-+ * the SH-4 and SH-5, this isn't necessarily that big of a problem, though
-+ * for the SH-2 and SH-3, this isn't recommended unless the WDT is absolutely
-+ * necssary.
-+ *
-+ * As a result of this timing problem, the only modes that are particularly
-+ * feasible are the 4096 and the 2048 divisors, which yeild 5.25 and 2.62ms
-+ * overflow periods respectively.
-+ *
-+ * Also, since we can't really expect userspace to be responsive enough
-+ * before the overflow happens, we maintain two seperate timers .. One in
-+ * the kernel for clearing out WOVF every 2ms or so (again, this depends on
-+ * HZ == 1000), and another for monitoring userspace writes to the WDT device.
-+ *
-+ * As such, we currently use a configurable heartbeat interval which defaults
-+ * to 30s. In this case, the userspace daemon is only responsible for periodic
-+ * writes to the device before the next heartbeat is scheduled. If the daemon
-+ * misses its deadline, the kernel timer will allow the WDT to overflow.
- */
- static int clock_division_ratio = WTCSR_CKS_4096;
-
--#define msecs_to_jiffies(msecs) (jiffies + ((HZ * msecs + 999) / 1000))
-+#define msecs_to_jiffies(msecs) (jiffies + (HZ * msecs + 9999) / 10000)
- #define next_ping_period(cks) msecs_to_jiffies(cks - 4)
--#define user_ping_period(cks) (next_ping_period(cks) * 10)
-
--static unsigned long sh_is_open = 0;
-+static unsigned long shwdt_is_open;
- static struct watchdog_info sh_wdt_info;
-+static char shwdt_expect_close;
- static struct timer_list timer;
- static unsigned long next_heartbeat;
-+static int heartbeat = 30;
-
- #ifdef CONFIG_WATCHDOG_NOWAYOUT
- static int nowayout = 1;
-@@ -99,35 +77,6 @@ static int nowayout = 1;
- static int nowayout = 0;
- #endif
-
--MODULE_PARM(nowayout,"i");
--MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default=CONFIG_WATCHDOG_NOWAYOUT)");
--
--/**
-- * sh_wdt_write_cnt - Write to Counter
-- *
-- * @val: Value to write
-- *
-- * Writes the given value @val to the lower byte of the timer counter.
-- * The upper byte is set manually on each write.
-- */
--static void sh_wdt_write_cnt(__u8 val)
--{
-- ctrl_outw(WTCNT_HIGH | (__u16)val, WTCNT);
--}
--
--/**
-- * sh_wdt_write_csr - Write to Control/Status Register
-- *
-- * @val: Value to write
-- *
-- * Writes the given value @val to the lower byte of the control/status
-- * register. The upper byte is set manually on each write.
-- */
--static void sh_wdt_write_csr(__u8 val)
--{
-- ctrl_outw(WTCSR_HIGH | (__u16)val, WTCSR);
--}
--
- /**
- * sh_wdt_start - Start the Watchdog
- *
-@@ -135,13 +84,44 @@ static void sh_wdt_write_csr(__u8 val)
- */
- static void sh_wdt_start(void)
- {
-- timer.expires = next_ping_period(clock_division_ratio);
-- next_heartbeat = user_ping_period(clock_division_ratio);
-- add_timer(&timer);
-+ __u8 csr;
-+
-+ mod_timer(&timer, next_ping_period(clock_division_ratio));
-+ next_heartbeat = jiffies + (heartbeat * HZ);
-+
-+ csr = sh_wdt_read_csr();
-+ csr |= WTCSR_WT | clock_division_ratio;
-+ sh_wdt_write_csr(csr);
-
-- sh_wdt_write_csr(WTCSR_WT | WTCSR_CKS_4096);
- sh_wdt_write_cnt(0);
-- sh_wdt_write_csr((ctrl_inb(WTCSR) | WTCSR_TME));
-+
-+ /*
-+ * These processors have a bit of an inconsistent initialization
-+ * process.. starting with SH-3, RSTS was moved to WTCSR, and the
-+ * RSTCSR register was removed.
-+ *
-+ * On the SH-2 however, in addition with bits being in different
-+ * locations, we must deal with RSTCSR outright..
-+ */
-+ csr = sh_wdt_read_csr();
-+ csr |= WTCSR_TME;
-+ csr &= ~WTCSR_RSTS;
-+ sh_wdt_write_csr(csr);
-+
-+#ifdef CONFIG_CPU_SH2
-+ /*
-+ * Whoever came up with the RSTCSR semantics must've been smoking
-+ * some of the good stuff, since in addition to the WTCSR/WTCNT write
-+ * brain-damage, it's managed to fuck things up one step further..
-+ *
-+ * If we need to clear the WOVF bit, the upper byte has to be 0xa5..
-+ * but if we want to touch RSTE or RSTS, the upper byte has to be
-+ * 0x5a..
-+ */
-+ csr = sh_wdt_read_rstcsr();
-+ csr &= ~RSTCSR_RSTS;
-+ sh_wdt_write_rstcsr(csr);
-+#endif
- }
-
- /**
-@@ -151,9 +131,13 @@ static void sh_wdt_start(void)
- */
- static void sh_wdt_stop(void)
- {
-+ __u8 csr;
-+
- del_timer(&timer);
-
-- sh_wdt_write_csr((ctrl_inb(WTCSR) & ~WTCSR_TME));
-+ csr = sh_wdt_read_csr();
-+ csr &= ~WTCSR_TME;
-+ sh_wdt_write_csr(csr);
- }
-
- /**
-@@ -166,11 +150,15 @@ static void sh_wdt_stop(void)
- static void sh_wdt_ping(unsigned long data)
- {
- if (time_before(jiffies, next_heartbeat)) {
-- sh_wdt_write_csr((ctrl_inb(WTCSR) & ~WTCSR_IOVF));
-+ __u8 csr;
-+
-+ csr = sh_wdt_read_csr();
-+ csr &= ~WTCSR_IOVF;
-+ sh_wdt_write_csr(csr);
-+
- sh_wdt_write_cnt(0);
-
-- timer.expires = next_ping_period(clock_division_ratio);
-- add_timer(&timer);
-+ mod_timer(&timer, next_ping_period(clock_division_ratio));
- }
- }
-
-@@ -184,21 +172,12 @@ static void sh_wdt_ping(unsigned long da
- */
- static int sh_wdt_open(struct inode *inode, struct file *file)
- {
-- switch (minor(inode->i_rdev)) {
-- case WATCHDOG_MINOR:
-- if (test_and_set_bit(0, &sh_is_open))
-- return -EBUSY;
-+ if (test_and_set_bit(0, &shwdt_is_open))
-+ return -EBUSY;
-+ if (nowayout)
-+ __module_get(THIS_MODULE);
-
-- if (nowayout) {
-- MOD_INC_USE_COUNT;
-- }
--
-- sh_wdt_start();
--
-- break;
-- default:
-- return -ENODEV;
-- }
-+ sh_wdt_start();
-
- return 0;
- }
-@@ -213,33 +192,20 @@ static int sh_wdt_open(struct inode *ino
- */
- static int sh_wdt_close(struct inode *inode, struct file *file)
- {
-- if (minor(inode->i_rdev) == WATCHDOG_MINOR) {
-- if (!nowayout) {
-- sh_wdt_stop();
-- }
-- clear_bit(0, &sh_is_open);
-+ if (!nowayout && shwdt_expect_close == 42) {
-+ sh_wdt_stop();
-+ } else {
-+ printk(KERN_CRIT "shwdt: Unexpected close, not stopping watchdog!\n");
-+ next_heartbeat = jiffies + (heartbeat * HZ);
- }
-+
-+ clear_bit(0, &shwdt_is_open);
-+ shwdt_expect_close = 0;
-
- return 0;
- }
-
- /**
-- * sh_wdt_read - Read from Device
-- *
-- * @file: file handle of device
-- * @buf: buffer to write to
-- * @count: length of buffer
-- * @ppos: offset
-- *
-- * Unsupported.
-- */
--static ssize_t sh_wdt_read(struct file *file, char *buf,
-- size_t count, loff_t *ppos)
--{
-- return -EINVAL;
--}
--
--/**
- * sh_wdt_write - Write to Device
- *
- * @file: file handle of device
-@@ -257,11 +223,21 @@ static ssize_t sh_wdt_write(struct file
- return -ESPIPE;
-
- if (count) {
-- next_heartbeat = user_ping_period(clock_division_ratio);
-- return 1;
-+ size_t i;
-+
-+ shwdt_expect_close = 0;
-+
-+ for (i = 0; i != count; i++) {
-+ char c;
-+ if (get_user(c, buf + i))
-+ return -EFAULT;
-+ if (c == 'V')
-+ shwdt_expect_close = 42;
-+ }
-+ next_heartbeat = jiffies + (heartbeat * HZ);
- }
-
-- return 0;
-+ return count;
- }
-
- /**
-@@ -278,6 +254,8 @@ static ssize_t sh_wdt_write(struct file
- static int sh_wdt_ioctl(struct inode *inode, struct file *file,
- unsigned int cmd, unsigned long arg)
- {
-+ int new_timeout;
-+
- switch (cmd) {
- case WDIOC_GETSUPPORT:
- if (copy_to_user((struct watchdog_info *)arg,
-@@ -288,17 +266,41 @@ static int sh_wdt_ioctl(struct inode *in
-
- break;
- case WDIOC_GETSTATUS:
-- if (copy_to_user((int *)arg,
-- &sh_is_open,
-- sizeof(int))) {
-+ case WDIOC_GETBOOTSTATUS:
-+ return put_user(0, (int *)arg);
-+ case WDIOC_KEEPALIVE:
-+ next_heartbeat = jiffies + (heartbeat * HZ);
-+
-+ break;
-+ case WDIOC_SETTIMEOUT:
-+ if (get_user(new_timeout, (int *)arg))
- return -EFAULT;
-+ if (new_timeout < 1 || new_timeout > 3600) /* arbitrary upper limit */
-+ return -EINVAL;
-+ heartbeat = new_timeout;
-+ next_heartbeat = jiffies + (heartbeat * HZ);
-+ /* Fall */
-+ case WDIOC_GETTIMEOUT:
-+ return put_user(heartbeat, (int *)arg);
-+ case WDIOC_SETOPTIONS:
-+ {
-+ int options, retval = -EINVAL;
-+
-+ if (get_user(options, (int *)arg))
-+ return -EFAULT;
-+
-+ if (options & WDIOS_DISABLECARD) {
-+ sh_wdt_stop();
-+ retval = 0;
- }
-
-- break;
-- case WDIOC_KEEPALIVE:
-- next_heartbeat = user_ping_period(clock_division_ratio);
-+ if (options & WDIOS_ENABLECARD) {
-+ sh_wdt_start();
-+ retval = 0;
-+ }
-
-- break;
-+ return retval;
-+ }
- default:
- return -ENOTTY;
- }
-@@ -328,7 +330,7 @@ static int sh_wdt_notify_sys(struct noti
-
- static struct file_operations sh_wdt_fops = {
- .owner = THIS_MODULE,
-- .read = sh_wdt_read,
-+ .llseek = no_llseek,
- .write = sh_wdt_write,
- .ioctl = sh_wdt_ioctl,
- .open = sh_wdt_open,
-@@ -336,21 +338,20 @@ static struct file_operations sh_wdt_fop
- };
-
- static struct watchdog_info sh_wdt_info = {
-- .options = WDIOF_KEEPALIVEPING | WDIOF_SETTIMEOUT | WDIOF_MAGICCLOSE,
-- .firmware_version = 1,
-- .identity = "SH WDT",
-+ .options = WDIOF_KEEPALIVEPING | WDIOF_SETTIMEOUT | WDIOF_MAGICCLOSE,
-+ .firmware_version = 1,
-+ .identity = "SH WDT",
- };
-
- static struct notifier_block sh_wdt_notifier = {
-- .notifier_call = sh_wdt_notify_sys,
-- .next = NULL,
-- .priority = 0
-+ .notifier_call = sh_wdt_notify_sys,
-+ .priority = 0,
- };
-
- static struct miscdevice sh_wdt_miscdev = {
-- .minor = WATCHDOG_MINOR,
-- .name = "watchdog",
-- .fops &sh_wdt_fops,
-+ .minor = WATCHDOG_MINOR,
-+ .name = "watchdog",
-+ .fops = &sh_wdt_fops,
- };
-
- /**
-@@ -366,23 +367,8 @@ static int __init sh_wdt_init(void)
- return -EINVAL;
- }
-
-- if (!request_region(WTCNT, 1, "shwdt")) {
-- printk(KERN_ERR "shwdt: Can't request WTCNT region\n");
-- misc_deregister(&sh_wdt_miscdev);
-- return -ENXIO;
-- }
--
-- if (!request_region(WTCSR, 1, "shwdt")) {
-- printk(KERN_ERR "shwdt: Can't request WTCSR region\n");
-- release_region(WTCNT, 1);
-- misc_deregister(&sh_wdt_miscdev);
-- return -ENXIO;
-- }
--
- if (register_reboot_notifier(&sh_wdt_notifier)) {
- printk(KERN_ERR "shwdt: Can't register reboot notifier\n");
-- release_region(WTCSR, 1);
-- release_region(WTCNT, 1);
- misc_deregister(&sh_wdt_miscdev);
- return -EINVAL;
- }
-@@ -403,16 +389,16 @@ static int __init sh_wdt_init(void)
- static void __exit sh_wdt_exit(void)
- {
- unregister_reboot_notifier(&sh_wdt_notifier);
-- release_region(WTCSR, 1);
-- release_region(WTCNT, 1);
- misc_deregister(&sh_wdt_miscdev);
- }
-
--MODULE_AUTHOR("Paul Mundt <lethal@0xd6.org>");
-+MODULE_AUTHOR("Paul Mundt <lethal@linux-sh.org>");
- MODULE_DESCRIPTION("SuperH watchdog driver");
- MODULE_LICENSE("GPL");
- MODULE_PARM(clock_division_ratio, "i");
- MODULE_PARM_DESC(clock_division_ratio, "Clock division ratio. Valid ranges are from 0x5 (1.31ms) to 0x7 (5.25ms). Defaults to 0x7.");
-+MODULE_PARM(nowayout,"i");
-+MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default=CONFIG_WATCHDOG_NOWAYOUT)");
-
- module_init(sh_wdt_init);
- module_exit(sh_wdt_exit);
---- linux-2.6.0-test1/drivers/char/watchdog/softdog.c 2003-06-14 12:18:08.000000000 -0700
-+++ 25/drivers/char/watchdog/softdog.c 2003-07-19 17:03:49.000000000 -0700
-@@ -104,9 +104,8 @@ static int softdog_open(struct inode *in
- {
- if(test_and_set_bit(0, &timer_alive))
- return -EBUSY;
-- if (nowayout) {
-- MOD_INC_USE_COUNT;
-- }
-+ if (nowayout)
-+ __module_get(THIS_MODULE);
- /*
- * Activate timer
- */
---- linux-2.6.0-test1/drivers/char/watchdog/wdt977.c 2003-06-14 12:18:30.000000000 -0700
-+++ 25/drivers/char/watchdog/wdt977.c 2003-07-19 17:03:49.000000000 -0700
-@@ -16,6 +16,8 @@
- * 19-Dec-2001 Woody Suwalski: Netwinder fixes, ioctl interface
- * 06-Jan-2002 Woody Suwalski: For compatibility, convert all timeouts
- * from minutes to seconds.
-+ * 07-Jul-2003 Daniele Bellucci: Audit return code of misc_register in
-+ * nwwatchdog_init.
- */
-
- #include <linux/module.h>
-@@ -99,7 +101,7 @@ static int wdt977_open(struct inode *ino
-
- if (nowayout)
- {
-- MOD_INC_USE_COUNT;
-+ __module_get(THIS_MODULE);
-
- /* do not permit disabling the watchdog by writing 0 to reg. 0xF2 */
- if (!timeoutM) timeoutM = DEFAULT_TIMEOUT;
-@@ -343,12 +345,14 @@ static struct miscdevice wdt977_miscdev=
-
- static int __init nwwatchdog_init(void)
- {
-+ int retval;
- if (!machine_is_netwinder())
- return -ENODEV;
-
-- misc_register(&wdt977_miscdev);
-- printk(KERN_INFO "Wdt977 Watchdog sleeping.\n");
-- return 0;
-+ retval = misc_register(&wdt977_miscdev);
-+ if (!retval)
-+ printk(KERN_INFO "Wdt977 Watchdog sleeping.\n");
-+ return retval;
- }
-
- static void __exit nwwatchdog_exit(void)
---- linux-2.6.0-test1/drivers/char/watchdog/wdt_pci.c 2003-06-14 12:18:24.000000000 -0700
-+++ 25/drivers/char/watchdog/wdt_pci.c 2003-07-19 17:03:49.000000000 -0700
-@@ -367,7 +367,7 @@ static int wdtpci_open(struct inode *ino
- return -EBUSY;
-
- if (nowayout) {
-- MOD_INC_USE_COUNT;
-+ __module_get(THIS_MODULE);
- }
- /*
- * Activate
---- linux-2.6.0-test1/drivers/fc4/fc.c 2003-06-14 12:18:23.000000000 -0700
-+++ 25/drivers/fc4/fc.c 2003-07-19 17:03:49.000000000 -0700
-@@ -33,7 +33,6 @@
- #include <linux/slab.h>
- #include <linux/string.h>
- #include <linux/init.h>
--#include <linux/blk.h>
-
- #include <asm/pgtable.h>
- #include <asm/irq.h>
---- linux-2.6.0-test1/drivers/fc4/fcp_impl.h 2003-06-14 12:18:08.000000000 -0700
-+++ 25/drivers/fc4/fcp_impl.h 2003-07-19 17:03:49.000000000 -0700
-@@ -8,7 +8,6 @@
- #define _FCP_SCSI_H
-
- #include <linux/types.h>
--#include <linux/blk.h>
- #include "../scsi/scsi.h"
-
- #include "fc.h"
---- linux-2.6.0-test1/drivers/i2c/i2c-dev.c 2003-06-14 12:18:29.000000000 -0700
-+++ 25/drivers/i2c/i2c-dev.c 2003-07-19 17:06:13.000000000 -0700
-@@ -118,7 +118,7 @@ static void return_i2c_dev(struct i2c_de
- static ssize_t show_dev(struct class_device *class_dev, char *buf)
- {
- struct i2c_dev *i2c_dev = to_i2c_dev(class_dev);
-- return sprintf(buf, "%04x\n", MKDEV(I2C_MAJOR, i2c_dev->minor));
-+ return print_dev_t(buf, MKDEV(I2C_MAJOR, i2c_dev->minor));
- }
- static CLASS_DEVICE_ATTR(dev, S_IRUGO, show_dev, NULL);
-
---- linux-2.6.0-test1/drivers/ide/ide-disk.c 2003-06-16 22:32:21.000000000 -0700
-+++ 25/drivers/ide/ide-disk.c 2003-07-19 17:07:19.000000000 -0700
-@@ -1665,6 +1665,10 @@ static void idedisk_setup (ide_drive_t *
- drive->no_io_32bit = id->dword_io ? 1 : 0;
- if (drive->id->cfs_enable_2 & 0x3000)
- write_cache(drive, (id->cfs_enable_2 & 0x3000));
-+
-+#ifdef CONFIG_BLK_DEV_IDE_TCQ_DEFAULT
-+ HWIF(drive)->ide_dma_queued_on(drive);
-+#endif
- }
-
- static int idedisk_cleanup (ide_drive_t *drive)
---- linux-2.6.0-test1/drivers/ide/ide-dma.c 2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/ide/ide-dma.c 2003-07-19 17:07:19.000000000 -0700
-@@ -442,9 +442,10 @@ static int config_drive_for_dma (ide_dri
- * the driver to resolve the problem, if a DMA transfer is still
- * in progress we continue to wait (arguably we need to add a
- * secondary 'I don't care what the drive thinks' timeout here)
-- * Finally if we have an interrupt but for some reason got the
-- * timeout first we complete the I/O. This can occur if an
-- * interrupt is lost or due to bugs.
-+ * Finally if we have an interrupt we let it complete the I/O.
-+ * But only one time - we clear expiry and if it's still not
-+ * completed after WAIT_CMD, we error and retry in PIO.
-+ * This can occur if an interrupt is lost or due to hang or bugs.
- */
-
- static int dma_timer_expiry (ide_drive_t *drive)
-@@ -461,19 +462,16 @@ static int dma_timer_expiry (ide_drive_t
- HWGROUP(drive)->expiry = NULL; /* one free ride for now */
-
- /* 1 dmaing, 2 error, 4 intr */
--
-- if (dma_stat & 2) { /* ERROR */
-- (void) hwif->ide_dma_end(drive);
-- return DRIVER(drive)->error(drive,
-- "dma_timer_expiry", hwif->INB(IDE_STATUS_REG));
-- }
-+ if (dma_stat & 2) /* ERROR */
-+ return -1;
-+
- if (dma_stat & 1) /* DMAing */
- return WAIT_CMD;
-
- if (dma_stat & 4) /* Got an Interrupt */
-- HWGROUP(drive)->handler(drive);
-+ return WAIT_CMD;
-
-- return 0;
-+ return 0; /* Status is unknown -- reset the bus */
- }
-
- /**
-@@ -572,10 +570,6 @@ int __ide_dma_on (ide_drive_t *drive)
- if (HWIF(drive)->ide_dma_host_on(drive))
- return 1;
-
--#ifdef CONFIG_BLK_DEV_IDE_TCQ_DEFAULT
-- HWIF(drive)->ide_dma_queued_on(drive);
--#endif
--
- return 0;
- }
-
---- linux-2.6.0-test1/drivers/ide/ide-io.c 2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/ide/ide-io.c 2003-07-19 17:03:49.000000000 -0700
-@@ -949,14 +949,14 @@ queue_next:
- * happens anyway when any interrupt comes in, IDE or otherwise
- * -- the kernel masks the IRQ while it is being handled.
- */
-- if (masked_irq != IDE_NO_IRQ && hwif->irq != masked_irq)
-+ if (hwif->irq != masked_irq)
- disable_irq_nosync(hwif->irq);
- spin_unlock(&ide_lock);
- local_irq_enable();
- /* allow other IRQs while we start this request */
- startstop = start_request(drive, rq);
- spin_lock_irq(&ide_lock);
-- if (masked_irq != IDE_NO_IRQ && hwif->irq != masked_irq)
-+ if (hwif->irq != masked_irq)
- enable_irq(hwif->irq);
- if (startstop == ide_released)
- goto queue_next;
-@@ -980,21 +980,25 @@ void do_ide_request(request_queue_t *q)
- * retry the current request in pio mode instead of risking tossing it
- * all away
- */
--void ide_dma_timeout_retry(ide_drive_t *drive)
-+static ide_startstop_t ide_dma_timeout_retry(ide_drive_t *drive, int error)
- {
- ide_hwif_t *hwif = HWIF(drive);
- struct request *rq;
-+ ide_startstop_t ret = ide_stopped;
-
- /*
- * end current dma transaction
- */
-- (void) hwif->ide_dma_end(drive);
-
-- /*
-- * complain a little, later we might remove some of this verbosity
-- */
-- printk(KERN_WARNING "%s: timeout waiting for DMA\n", drive->name);
-- (void) hwif->ide_dma_timeout(drive);
-+ if (error < 0) {
-+ printk(KERN_WARNING "%s: DMA timeout error\n", drive->name);
-+ (void)HWIF(drive)->ide_dma_end(drive);
-+ ret = DRIVER(drive)->error(drive, "dma timeout error",
-+ hwif->INB(IDE_STATUS_REG));
-+ } else {
-+ printk(KERN_WARNING "%s: DMA timeout retry\n", drive->name);
-+ (void) hwif->ide_dma_timeout(drive);
-+ }
-
- /*
- * disable dma for now, but remember that we did so because of
-@@ -1018,9 +1022,9 @@ void ide_dma_timeout_retry(ide_drive_t *
- rq->hard_cur_sectors = rq->current_nr_sectors;
- if (rq->bio)
- rq->buffer = NULL;
--}
-
--EXPORT_SYMBOL(ide_dma_timeout_retry);
-+ return ret;
-+}
-
- /**
- * ide_timer_expiry - handle lack of an IDE interrupt
-@@ -1041,11 +1045,10 @@ void ide_timer_expiry (unsigned long dat
- ide_hwgroup_t *hwgroup = (ide_hwgroup_t *) data;
- ide_handler_t *handler;
- ide_expiry_t *expiry;
-- unsigned long flags;
-- unsigned long wait;
-+ unsigned long flags;
-+ unsigned long wait = -1;
-
- spin_lock_irqsave(&ide_lock, flags);
-- del_timer(&hwgroup->timer);
-
- if ((handler = hwgroup->handler) == NULL) {
- /*
-@@ -1072,7 +1075,7 @@ void ide_timer_expiry (unsigned long dat
- }
- if ((expiry = hwgroup->expiry) != NULL) {
- /* continue */
-- if ((wait = expiry(drive)) != 0) {
-+ if ((wait = expiry(drive)) > 0) {
- /* reset timer */
- hwgroup->timer.expires = jiffies + wait;
- add_timer(&hwgroup->timer);
-@@ -1107,15 +1110,15 @@ void ide_timer_expiry (unsigned long dat
- startstop = handler(drive);
- } else {
- if (drive->waiting_for_dma) {
-- startstop = ide_stopped;
-- ide_dma_timeout_retry(drive);
-+ startstop = ide_dma_timeout_retry(drive, wait);
- } else
-- startstop = DRIVER(drive)->error(drive, "irq timeout", hwif->INB(IDE_STATUS_REG));
-+ startstop =
-+ DRIVER(drive)->error(drive, "irq timeout", hwif->INB(IDE_STATUS_REG));
- }
- set_recovery_timer(hwif);
- drive->service_time = jiffies - drive->service_start;
-- enable_irq(hwif->irq);
- spin_lock_irq(&ide_lock);
-+ enable_irq(hwif->irq);
- if (startstop == ide_stopped)
- hwgroup->busy = 0;
- }
---- linux-2.6.0-test1/drivers/ide/Kconfig 2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/ide/Kconfig 2003-07-19 17:03:49.000000000 -0700
-@@ -521,7 +521,7 @@ config BLK_DEV_ALI15X3
-
- If you say Y here, you also need to say Y to "Use DMA by default
- when available", above. Please read the comments at the top of
-- <file:drivers/ide/alim15x3.c>.
-+ <file:drivers/ide/pci/alim15x3.c>.
-
- If unsure, say N.
-
-@@ -608,7 +608,7 @@ config HPT34X_AUTODMA
- depends on BLK_DEV_HPT34X && IDEDMA_PCI_WIP
- help
- This is a dangerous thing to attempt currently! Please read the
-- comments at the top of <file:drivers/ide/hpt34x.c>. If you say Y
-+ comments at the top of <file:drivers/ide/pci/hpt34x.c>. If you say Y
- here, then say Y to "Use DMA by default when available" as well.
-
- If unsure, say N.
-@@ -670,14 +670,14 @@ config BLK_DEV_NS87415
- This driver adds detection and support for the NS87415 chip
- (used in SPARC64, among others).
-
-- Please read the comments at the top of <file:drivers/ide/ns87415.c>.
-+ Please read the comments at the top of <file:drivers/ide/pci/ns87415.c>.
-
- config BLK_DEV_OPTI621
- tristate "OPTi 82C621 chipset enhanced support (EXPERIMENTAL)"
- depends on PCI && BLK_DEV_IDEPCI && EXPERIMENTAL
- help
- This is a driver for the OPTi 82C621 EIDE controller.
-- Please read the comments at the top of <file:drivers/ide/opti621.c>.
-+ Please read the comments at the top of <file:drivers/ide/pci/opti621.c>.
-
- config BLK_DEV_PDC202XX_OLD
- tristate "PROMISE PDC202{46|62|65|67} support"
-@@ -696,7 +696,7 @@ config PDC202XX_BURST
- when the PDC20265 BIOS has been disabled (for faster boot up).
-
- Please read the comments at the top of
-- <file:drivers/ide/pdc202xx.c>.
-+ <file:drivers/ide/pci/pdc202xx_old.c>.
-
- If unsure, say N.
-
-@@ -754,7 +754,7 @@ config BLK_DEV_SIS5513
- If you say Y here, you need to say Y to "Use DMA by default when
- available" as well.
-
-- Please read the comments at the top of <file:drivers/ide/sis5513.c>.
-+ Please read the comments at the top of <file:drivers/ide/pci/sis5513.c>.
-
- config BLK_DEV_SLC90E66
- tristate "SLC90E66 chipset support"
-@@ -770,7 +770,7 @@ config BLK_DEV_SLC90E66
- available" as well.
-
- Please read the comments at the top of
-- drivers/ide/slc90e66.c.
-+ drivers/ide/pci/slc90e66.c.
-
- config BLK_DEV_TRM290
- tristate "Tekram TRM290 chipset support"
-@@ -779,7 +779,7 @@ config BLK_DEV_TRM290
- This driver adds support for bus master DMA transfers
- using the Tekram TRM290 PCI IDE chip. Volunteers are
- needed for further tweaking and development.
-- Please read the comments at the top of <file:drivers/ide/trm290.c>.
-+ Please read the comments at the top of <file:drivers/ide/pci/trm290.c>.
-
- config BLK_DEV_VIA82CXXX
- tristate "VIA82CXXX chipset support"
-@@ -1010,7 +1010,7 @@ config BLK_DEV_ALI14XX
- boot parameter. It enables support for the secondary IDE interface
- of the ALI M1439/1443/1445/1487/1489 chipsets, and permits faster
- I/O speeds to be set as well. See the files
-- <file:Documentation/ide.txt> and <file:drivers/ide/ali14xx.c> for
-+ <file:Documentation/ide.txt> and <file:drivers/ide/legacy/ali14xx.c> for
- more info.
-
- config BLK_DEV_DTC2278
-@@ -1021,7 +1021,7 @@ config BLK_DEV_DTC2278
- boot parameter. It enables support for the secondary IDE interface
- of the DTC-2278 card, and permits faster I/O speeds to be set as
- well. See the <file:Documentation/ide.txt> and
-- <file:drivers/ide/dtc2278.c> files for more info.
-+ <file:drivers/ide/legacy/dtc2278.c> files for more info.
-
- config BLK_DEV_HT6560B
- tristate "Holtek HT6560B support"
-@@ -1031,7 +1031,7 @@ config BLK_DEV_HT6560B
- boot parameter. It enables support for the secondary IDE interface
- of the Holtek card, and permits faster I/O speeds to be set as well.
- See the <file:Documentation/ide.txt> and
-- <file:drivers/ide/ht6560b.c> files for more info.
-+ <file:drivers/ide/legacy/ht6560b.c> files for more info.
-
- config BLK_DEV_PDC4030
- tristate "PROMISE DC4030 support (EXPERIMENTAL)"
-@@ -1044,7 +1044,7 @@ config BLK_DEV_PDC4030
- supported (and probably never will be since I don't think the cards
- support them). This driver is enabled at runtime using the "ide0=dc4030"
- or "ide1=dc4030" kernel boot parameter. See the
-- <file:drivers/ide/pdc4030.c> file for more info.
-+ <file:drivers/ide/legacy/pdc4030.c> file for more info.
-
- config BLK_DEV_QD65XX
- tristate "QDI QD65xx support"
-@@ -1052,7 +1052,7 @@ config BLK_DEV_QD65XX
- help
- This driver is enabled at runtime using the "ide0=qd65xx" kernel
- boot parameter. It permits faster I/O speeds to be set. See the
-- <file:Documentation/ide.txt> and <file:drivers/ide/qd65xx.c> for
-+ <file:Documentation/ide.txt> and <file:drivers/ide/legacy/qd65xx.c> for
- more info.
-
- config BLK_DEV_UMC8672
-@@ -1063,7 +1063,7 @@ config BLK_DEV_UMC8672
- boot parameter. It enables support for the secondary IDE interface
- of the UMC-8672, and permits faster I/O speeds to be set as well.
- See the files <file:Documentation/ide.txt> and
-- <file:drivers/ide/umc8672.c> for more info.
-+ <file:drivers/ide/legacy/umc8672.c> for more info.
-
- config BLK_DEV_HD_ONLY
- bool "Old hard disk (MFM/RLL/IDE) driver"
-@@ -1132,7 +1132,7 @@ config BLK_DEV_PDC202XX
- available" as well.
-
- Please read the comments at the top of
-- <file:drivers/ide/pdc202xx.c>.
-+ <file:drivers/ide/pdc202xx_old.c>.
-
- If unsure, say N.
-
---- linux-2.6.0-test1/drivers/ide/legacy/hd98.c 2003-06-14 12:18:28.000000000 -0700
-+++ 25/drivers/ide/legacy/hd98.c 2003-07-19 17:03:49.000000000 -0700
-@@ -46,8 +46,6 @@
- #include <asm/io.h>
- #include <asm/uaccess.h>
-
--#include <linux/blk.h>
--
- #include "io_ports.h"
-
- #ifdef __arm__
---- linux-2.6.0-test1/drivers/ide/legacy/hd.c 2003-06-14 12:17:56.000000000 -0700
-+++ 25/drivers/ide/legacy/hd.c 2003-07-19 17:03:49.000000000 -0700
-@@ -26,7 +26,7 @@
- /* Uncomment the following if you want verbose error reports. */
- /* #define VERBOSE_ERRORS */
-
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/errno.h>
- #include <linux/signal.h>
- #include <linux/interrupt.h>
---- linux-2.6.0-test1/drivers/ide/ppc/mpc8xx.c 2003-06-14 12:18:34.000000000 -0700
-+++ 25/drivers/ide/ppc/mpc8xx.c 2003-07-19 17:03:49.000000000 -0700
-@@ -27,7 +27,6 @@
- #include <linux/interrupt.h>
- #include <linux/reboot.h>
- #include <linux/init.h>
--#include <linux/blk.h>
- #include <linux/ioport.h>
- #include <linux/ide.h>
- #include <linux/bootmem.h>
---- linux-2.6.0-test1/drivers/ieee1394/amdtp.c 2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/ieee1394/amdtp.c 2003-07-19 17:03:49.000000000 -0700
-@@ -62,6 +62,12 @@
- * - Maybe make an ALSA interface, that is, create a file_ops
- * implementation that recognizes ALSA ioctls and uses defaults for
- * things that can't be controlled through ALSA (iso channel).
-+ *
-+ * Changes:
-+ *
-+ * - Audit copy_from_user in amdtp_write.
-+ * Daniele Bellucci <bellucda@tiscali.it>
-+ *
- */
-
- #include <linux/module.h>
-@@ -1112,7 +1118,8 @@ static ssize_t amdtp_write(struct file *
-
- for (i = 0; i < count; i += length) {
- p = buffer_put_bytes(s->input, count - i, &length);
-- copy_from_user(p, buffer + i, length);
-+ if (copy_from_user(p, buffer + i, length))
-+ return -EFAULT;
- if (s->input->length < s->input->size)
- continue;
-
---- linux-2.6.0-test1/drivers/ieee1394/sbp2.c 2003-07-10 18:50:31.000000000 -0700
-+++ 25/drivers/ieee1394/sbp2.c 2003-07-19 17:03:49.000000000 -0700
-@@ -52,7 +52,7 @@
- #include <linux/delay.h>
- #include <linux/sched.h>
- #include <linux/proc_fs.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/smp_lock.h>
- #include <linux/init.h>
- #include <linux/version.h>
---- linux-2.6.0-test1/drivers/input/keyboard/sunkbd.c 2003-06-16 22:32:21.000000000 -0700
-+++ 25/drivers/input/keyboard/sunkbd.c 2003-07-19 17:03:49.000000000 -0700
-@@ -80,8 +80,8 @@ struct sunkbd {
- char name[64];
- char phys[32];
- char type;
-- char reset;
-- char layout;
-+ volatile char reset;
-+ volatile char layout;
- };
-
- /*
---- linux-2.6.0-test1/drivers/input/mouse/psmouse-base.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/input/mouse/psmouse-base.c 2003-07-19 17:07:16.000000000 -0700
-@@ -200,7 +200,7 @@ int psmouse_command(struct psmouse *psmo
- psmouse->cmdcnt = receive;
-
- if (command == PSMOUSE_CMD_RESET_BAT)
-- timeout = 2000000; /* 2 sec */
-+ timeout = 4000000; /* 4 sec */
-
- if (command & 0xff)
- if (psmouse_sendbyte(psmouse, command & 0xff))
---- linux-2.6.0-test1/drivers/md/dm.c 2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/md/dm.c 2003-07-19 17:03:49.000000000 -0700
-@@ -8,7 +8,6 @@
-
- #include <linux/init.h>
- #include <linux/module.h>
--#include <linux/blk.h>
- #include <linux/blkpg.h>
- #include <linux/bio.h>
- #include <linux/mempool.h>
-@@ -63,6 +62,12 @@ struct mapped_device {
- * io objects are allocated from here.
- */
- mempool_t *io_pool;
-+
-+ /*
-+ * Event handling.
-+ */
-+ uint32_t event_nr;
-+ wait_queue_head_t eventq;
- };
-
- #define MIN_IOS 256
-@@ -510,6 +515,11 @@ static int dm_request(request_queue_t *q
- down_read(&md->lock);
- }
-
-+ if (!md->map) {
-+ bio_io_error(bio, bio->bi_size);
-+ return 0;
-+ }
-+
- __split_bio(md, bio);
- up_read(&md->lock);
- return 0;
-@@ -619,6 +629,8 @@ static struct mapped_device *alloc_dev(u
-
- atomic_set(&md->pending, 0);
- init_waitqueue_head(&md->wait);
-+ init_waitqueue_head(&md->eventq);
-+
- return md;
- }
-
-@@ -634,6 +646,16 @@ static void free_dev(struct mapped_devic
- /*
- * Bind a table to the device.
- */
-+static void event_callback(void *context)
-+{
-+ struct mapped_device *md = (struct mapped_device *) context;
-+
-+ down_write(&md->lock);
-+ md->event_nr++;
-+ wake_up_interruptible(&md->eventq);
-+ up_write(&md->lock);
-+}
-+
- static int __bind(struct mapped_device *md, struct dm_table *t)
- {
- request_queue_t *q = &md->queue;
-@@ -645,6 +667,8 @@ static int __bind(struct mapped_device *
- if (size == 0)
- return 0;
-
-+ dm_table_event_callback(md->map, event_callback, md);
-+
- dm_table_get(t);
- dm_table_set_restrictions(t, q);
- return 0;
-@@ -652,6 +676,10 @@ static int __bind(struct mapped_device *
-
- static void __unbind(struct mapped_device *md)
- {
-+ if (!md->map)
-+ return;
-+
-+ dm_table_event_callback(md->map, NULL, NULL);
- dm_table_put(md->map);
- md->map = NULL;
- set_capacity(md->disk, 0);
-@@ -661,35 +689,26 @@ static void __unbind(struct mapped_devic
- * Constructor for a new device.
- */
- static int create_aux(unsigned int minor, int persistent,
-- struct dm_table *table, struct mapped_device **result)
-+ struct mapped_device **result)
- {
-- int r;
- struct mapped_device *md;
-
- md = alloc_dev(minor, persistent);
- if (!md)
- return -ENXIO;
-
-- r = __bind(md, table);
-- if (r) {
-- free_dev(md);
-- return r;
-- }
-- dm_table_resume_targets(md->map);
--
- *result = md;
- return 0;
- }
-
--int dm_create(struct dm_table *table, struct mapped_device **result)
-+int dm_create(struct mapped_device **result)
- {
-- return create_aux(0, 0, table, result);
-+ return create_aux(0, 0, result);
- }
-
--int dm_create_with_minor(unsigned int minor,
-- struct dm_table *table, struct mapped_device **result)
-+int dm_create_with_minor(unsigned int minor, struct mapped_device **result)
- {
-- return create_aux(minor, 1, table, result);
-+ return create_aux(minor, 1, result);
- }
-
- void dm_get(struct mapped_device *md)
-@@ -700,7 +719,7 @@ void dm_get(struct mapped_device *md)
- void dm_put(struct mapped_device *md)
- {
- if (atomic_dec_and_test(&md->holders)) {
-- if (!test_bit(DMF_SUSPENDED, &md->flags))
-+ if (!test_bit(DMF_SUSPENDED, &md->flags) && md->map)
- dm_table_suspend_targets(md->map);
- __unbind(md);
- free_dev(md);
-@@ -790,7 +809,8 @@ int dm_suspend(struct mapped_device *md)
- down_write(&md->lock);
- remove_wait_queue(&md->wait, &wait);
- set_bit(DMF_SUSPENDED, &md->flags);
-- dm_table_suspend_targets(md->map);
-+ if (md->map)
-+ dm_table_suspend_targets(md->map);
- up_write(&md->lock);
-
- return 0;
-@@ -801,7 +821,8 @@ int dm_resume(struct mapped_device *md)
- struct deferred_io *def;
-
- down_write(&md->lock);
-- if (!test_bit(DMF_SUSPENDED, &md->flags) ||
-+ if (!md->map ||
-+ !test_bit(DMF_SUSPENDED, &md->flags) ||
- !dm_table_get_size(md->map)) {
- up_write(&md->lock);
- return -EINVAL;
-@@ -820,6 +841,42 @@ int dm_resume(struct mapped_device *md)
- return 0;
- }
-
-+/*-----------------------------------------------------------------
-+ * Event notification.
-+ *---------------------------------------------------------------*/
-+uint32_t dm_get_event_nr(struct mapped_device *md)
-+{
-+ uint32_t r;
-+
-+ down_read(&md->lock);
-+ r = md->event_nr;
-+ up_read(&md->lock);
-+
-+ return r;
-+}
-+
-+int dm_add_wait_queue(struct mapped_device *md, wait_queue_t *wq,
-+ uint32_t event_nr)
-+{
-+ down_write(&md->lock);
-+ if (event_nr != md->event_nr) {
-+ up_write(&md->lock);
-+ return 1;
-+ }
-+
-+ add_wait_queue(&md->eventq, wq);
-+ up_write(&md->lock);
-+
-+ return 0;
-+}
-+
-+void dm_remove_wait_queue(struct mapped_device *md, wait_queue_t *wq)
-+{
-+ down_write(&md->lock);
-+ remove_wait_queue(&md->eventq, wq);
-+ up_write(&md->lock);
-+}
-+
- /*
- * The gendisk is only valid as long as you have a reference
- * count on 'md'.
-@@ -835,7 +892,8 @@ struct dm_table *dm_get_table(struct map
-
- down_read(&md->lock);
- t = md->map;
-- dm_table_get(t);
-+ if (t)
-+ dm_table_get(t);
- up_read(&md->lock);
-
- return t;
---- linux-2.6.0-test1/drivers/md/dm.h 2003-06-16 22:32:21.000000000 -0700
-+++ 25/drivers/md/dm.h 2003-07-19 17:03:49.000000000 -0700
-@@ -51,9 +51,8 @@ struct mapped_device;
- * Functions for manipulating a struct mapped_device.
- * Drop the reference with dm_put when you finish with the object.
- *---------------------------------------------------------------*/
--int dm_create(struct dm_table *table, struct mapped_device **md);
--int dm_create_with_minor(unsigned int minor, struct dm_table *table,
-- struct mapped_device **md);
-+int dm_create(struct mapped_device **md);
-+int dm_create_with_minor(unsigned int minor, struct mapped_device **md);
-
- /*
- * Reference counting for md.
-@@ -79,6 +78,14 @@ int dm_swap_table(struct mapped_device *
- struct dm_table *dm_get_table(struct mapped_device *md);
-
- /*
-+ * Event functions.
-+ */
-+uint32_t dm_get_event_nr(struct mapped_device *md);
-+int dm_add_wait_queue(struct mapped_device *md, wait_queue_t *wq,
-+ uint32_t event_nr);
-+void dm_remove_wait_queue(struct mapped_device *md, wait_queue_t *wq);
-+
-+/*
- * Info functions.
- */
- struct gendisk *dm_disk(struct mapped_device *md);
-@@ -96,6 +103,8 @@ void dm_table_put(struct dm_table *t);
- int dm_table_add_target(struct dm_table *t, const char *type,
- sector_t start, sector_t len, char *params);
- int dm_table_complete(struct dm_table *t);
-+void dm_table_event_callback(struct dm_table *t,
-+ void (*fn)(void *), void *context);
- void dm_table_event(struct dm_table *t);
- sector_t dm_table_get_size(struct dm_table *t);
- struct dm_target *dm_table_get_target(struct dm_table *t, unsigned int index);
-@@ -104,7 +113,6 @@ void dm_table_set_restrictions(struct dm
- unsigned int dm_table_get_num_targets(struct dm_table *t);
- struct list_head *dm_table_get_devices(struct dm_table *t);
- int dm_table_get_mode(struct dm_table *t);
--void dm_table_add_wait_queue(struct dm_table *t, wait_queue_t *wq);
- void dm_table_suspend_targets(struct dm_table *t);
- void dm_table_resume_targets(struct dm_table *t);
-
---- linux-2.6.0-test1/drivers/md/dm-ioctl.c 2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/md/dm-ioctl.c 2003-07-19 17:03:49.000000000 -0700
-@@ -1,1134 +1,13 @@
- /*
-- * Copyright (C) 2001, 2002 Sistina Software (UK) Limited.
-+ * Copyright (C) 2003 Sistina Software (UK) Limited.
- *
- * This file is released under the GPL.
- */
-
--#include "dm.h"
--
--#include <linux/module.h>
--#include <linux/vmalloc.h>
--#include <linux/miscdevice.h>
- #include <linux/dm-ioctl.h>
--#include <linux/init.h>
--#include <linux/wait.h>
--#include <linux/blk.h>
--#include <linux/slab.h>
--#include <linux/devfs_fs_kernel.h>
--
--#include <asm/uaccess.h>
--
--#define DM_DRIVER_EMAIL "dm@uk.sistina.com"
--
--/*-----------------------------------------------------------------
-- * The ioctl interface needs to be able to look up devices by
-- * name or uuid.
-- *---------------------------------------------------------------*/
--struct hash_cell {
-- struct list_head name_list;
-- struct list_head uuid_list;
--
-- char *name;
-- char *uuid;
-- struct mapped_device *md;
--};
--
--#define NUM_BUCKETS 64
--#define MASK_BUCKETS (NUM_BUCKETS - 1)
--static struct list_head _name_buckets[NUM_BUCKETS];
--static struct list_head _uuid_buckets[NUM_BUCKETS];
--
--void dm_hash_remove_all(void);
--
--/*
-- * Guards access to all three tables.
-- */
--static DECLARE_RWSEM(_hash_lock);
--
--static void init_buckets(struct list_head *buckets)
--{
-- unsigned int i;
--
-- for (i = 0; i < NUM_BUCKETS; i++)
-- INIT_LIST_HEAD(buckets + i);
--}
--
--int dm_hash_init(void)
--{
-- init_buckets(_name_buckets);
-- init_buckets(_uuid_buckets);
-- devfs_mk_dir(DM_DIR);
-- return 0;
--}
--
--void dm_hash_exit(void)
--{
-- dm_hash_remove_all();
-- devfs_remove(DM_DIR);
--}
--
--/*-----------------------------------------------------------------
-- * Hash function:
-- * We're not really concerned with the str hash function being
-- * fast since it's only used by the ioctl interface.
-- *---------------------------------------------------------------*/
--static unsigned int hash_str(const char *str)
--{
-- const unsigned int hash_mult = 2654435387U;
-- unsigned int h = 0;
--
-- while (*str)
-- h = (h + (unsigned int) *str++) * hash_mult;
--
-- return h & MASK_BUCKETS;
--}
--
--/*-----------------------------------------------------------------
-- * Code for looking up a device by name
-- *---------------------------------------------------------------*/
--static struct hash_cell *__get_name_cell(const char *str)
--{
-- struct list_head *tmp;
-- struct hash_cell *hc;
-- unsigned int h = hash_str(str);
--
-- list_for_each (tmp, _name_buckets + h) {
-- hc = list_entry(tmp, struct hash_cell, name_list);
-- if (!strcmp(hc->name, str))
-- return hc;
-- }
--
-- return NULL;
--}
--
--static struct hash_cell *__get_uuid_cell(const char *str)
--{
-- struct list_head *tmp;
-- struct hash_cell *hc;
-- unsigned int h = hash_str(str);
--
-- list_for_each (tmp, _uuid_buckets + h) {
-- hc = list_entry(tmp, struct hash_cell, uuid_list);
-- if (!strcmp(hc->uuid, str))
-- return hc;
-- }
--
-- return NULL;
--}
--
--/*-----------------------------------------------------------------
-- * Inserting, removing and renaming a device.
-- *---------------------------------------------------------------*/
--static inline char *kstrdup(const char *str)
--{
-- char *r = kmalloc(strlen(str) + 1, GFP_KERNEL);
-- if (r)
-- strcpy(r, str);
-- return r;
--}
--
--static struct hash_cell *alloc_cell(const char *name, const char *uuid,
-- struct mapped_device *md)
--{
-- struct hash_cell *hc;
--
-- hc = kmalloc(sizeof(*hc), GFP_KERNEL);
-- if (!hc)
-- return NULL;
--
-- hc->name = kstrdup(name);
-- if (!hc->name) {
-- kfree(hc);
-- return NULL;
-- }
--
-- if (!uuid)
-- hc->uuid = NULL;
--
-- else {
-- hc->uuid = kstrdup(uuid);
-- if (!hc->uuid) {
-- kfree(hc->name);
-- kfree(hc);
-- return NULL;
-- }
-- }
--
-- INIT_LIST_HEAD(&hc->name_list);
-- INIT_LIST_HEAD(&hc->uuid_list);
-- hc->md = md;
-- return hc;
--}
--
--static void free_cell(struct hash_cell *hc)
--{
-- if (hc) {
-- kfree(hc->name);
-- kfree(hc->uuid);
-- kfree(hc);
-- }
--}
--
--/*
-- * devfs stuff.
-- */
--static int register_with_devfs(struct hash_cell *hc)
--{
-- struct gendisk *disk = dm_disk(hc->md);
--
-- devfs_mk_bdev(MKDEV(disk->major, disk->first_minor),
-- S_IFBLK | S_IRUSR | S_IWUSR | S_IRGRP,
-- DM_DIR "/%s", hc->name);
-- return 0;
--}
--
--static int unregister_with_devfs(struct hash_cell *hc)
--{
-- devfs_remove(DM_DIR"/%s", hc->name);
-- return 0;
--}
--
--/*
-- * The kdev_t and uuid of a device can never change once it is
-- * initially inserted.
-- */
--int dm_hash_insert(const char *name, const char *uuid, struct mapped_device *md)
--{
-- struct hash_cell *cell;
--
-- /*
-- * Allocate the new cells.
-- */
-- cell = alloc_cell(name, uuid, md);
-- if (!cell)
-- return -ENOMEM;
--
-- /*
-- * Insert the cell into all three hash tables.
-- */
-- down_write(&_hash_lock);
-- if (__get_name_cell(name))
-- goto bad;
--
-- list_add(&cell->name_list, _name_buckets + hash_str(name));
--
-- if (uuid) {
-- if (__get_uuid_cell(uuid)) {
-- list_del(&cell->name_list);
-- goto bad;
-- }
-- list_add(&cell->uuid_list, _uuid_buckets + hash_str(uuid));
-- }
-- register_with_devfs(cell);
-- dm_get(md);
-- up_write(&_hash_lock);
--
-- return 0;
--
-- bad:
-- up_write(&_hash_lock);
-- free_cell(cell);
-- return -EBUSY;
--}
--
--void __hash_remove(struct hash_cell *hc)
--{
-- /* remove from the dev hash */
-- list_del(&hc->uuid_list);
-- list_del(&hc->name_list);
-- unregister_with_devfs(hc);
-- dm_put(hc->md);
-- free_cell(hc);
--}
--
--void dm_hash_remove_all(void)
--{
-- int i;
-- struct hash_cell *hc;
-- struct list_head *tmp, *n;
--
-- down_write(&_hash_lock);
-- for (i = 0; i < NUM_BUCKETS; i++) {
-- list_for_each_safe (tmp, n, _name_buckets + i) {
-- hc = list_entry(tmp, struct hash_cell, name_list);
-- __hash_remove(hc);
-- }
-- }
-- up_write(&_hash_lock);
--}
--
--int dm_hash_rename(const char *old, const char *new)
--{
-- char *new_name, *old_name;
-- struct hash_cell *hc;
--
-- /*
-- * duplicate new.
-- */
-- new_name = kstrdup(new);
-- if (!new_name)
-- return -ENOMEM;
--
-- down_write(&_hash_lock);
--
-- /*
-- * Is new free ?
-- */
-- hc = __get_name_cell(new);
-- if (hc) {
-- DMWARN("asked to rename to an already existing name %s -> %s",
-- old, new);
-- up_write(&_hash_lock);
-- kfree(new_name);
-- return -EBUSY;
-- }
--
-- /*
-- * Is there such a device as 'old' ?
-- */
-- hc = __get_name_cell(old);
-- if (!hc) {
-- DMWARN("asked to rename a non existent device %s -> %s",
-- old, new);
-- up_write(&_hash_lock);
-- kfree(new_name);
-- return -ENXIO;
-- }
--
-- /*
-- * rename and move the name cell.
-- */
-- unregister_with_devfs(hc);
--
-- list_del(&hc->name_list);
-- old_name = hc->name;
-- hc->name = new_name;
-- list_add(&hc->name_list, _name_buckets + hash_str(new_name));
--
-- /* rename the device node in devfs */
-- register_with_devfs(hc);
--
-- up_write(&_hash_lock);
-- kfree(old_name);
-- return 0;
--}
--
--
--/*-----------------------------------------------------------------
-- * Implementation of the ioctl commands
-- *---------------------------------------------------------------*/
--
--/*
-- * All the ioctl commands get dispatched to functions with this
-- * prototype.
-- */
--typedef int (*ioctl_fn)(struct dm_ioctl *param, struct dm_ioctl *user);
--
--/*
-- * Check a string doesn't overrun the chunk of
-- * memory we copied from userland.
-- */
--static int valid_str(char *str, void *begin, void *end)
--{
-- while (((void *) str >= begin) && ((void *) str < end))
-- if (!*str++)
-- return 0;
--
-- return -EINVAL;
--}
--
--static int next_target(struct dm_target_spec *last, uint32_t next,
-- void *begin, void *end,
-- struct dm_target_spec **spec, char **params)
--{
-- *spec = (struct dm_target_spec *)
-- ((unsigned char *) last + next);
-- *params = (char *) (*spec + 1);
--
-- if (*spec < (last + 1) || ((void *) *spec > end))
-- return -EINVAL;
--
-- return valid_str(*params, begin, end);
--}
--
--static int populate_table(struct dm_table *table, struct dm_ioctl *args)
--{
-- int r, first = 1;
-- unsigned int i = 0;
-- struct dm_target_spec *spec;
-- char *params;
-- void *begin, *end;
--
-- if (!args->target_count) {
-- DMWARN("populate_table: no targets specified");
-- return -EINVAL;
-- }
--
-- begin = (void *) args;
-- end = begin + args->data_size;
--
-- for (i = 0; i < args->target_count; i++) {
--
-- if (first)
-- r = next_target((struct dm_target_spec *) args,
-- args->data_start,
-- begin, end, &spec, ¶ms);
-- else
-- r = next_target(spec, spec->next, begin, end,
-- &spec, ¶ms);
--
-- if (r) {
-- DMWARN("unable to find target");
-- return -EINVAL;
-- }
--
-- r = dm_table_add_target(table, spec->target_type,
-- (sector_t) spec->sector_start,
-- (sector_t) spec->length,
-- params);
-- if (r) {
-- DMWARN("internal error adding target to table");
-- return -EINVAL;
-- }
--
-- first = 0;
-- }
--
-- return dm_table_complete(table);
--}
--
--/*
-- * Round up the ptr to the next 'align' boundary. Obviously
-- * 'align' must be a power of 2.
-- */
--static inline void *align_ptr(void *ptr, unsigned int align)
--{
-- align--;
-- return (void *) (((unsigned long) (ptr + align)) & ~align);
--}
--
--/*
-- * Copies a dm_ioctl and an optional additional payload to
-- * userland.
-- */
--static int results_to_user(struct dm_ioctl *user, struct dm_ioctl *param,
-- void *data, uint32_t len)
--{
-- int r;
-- void *ptr = NULL;
--
-- if (data) {
-- ptr = align_ptr(user + 1, sizeof(unsigned long));
-- param->data_start = ptr - (void *) user;
-- }
--
-- /*
-- * The version number has already been filled in, so we
-- * just copy later fields.
-- */
-- r = copy_to_user(&user->data_size, ¶m->data_size,
-- sizeof(*param) - sizeof(param->version));
-- if (r)
-- return -EFAULT;
--
-- if (data) {
-- if (param->data_start + len > param->data_size)
-- return -ENOSPC;
--
-- if (copy_to_user(ptr, data, len))
-- r = -EFAULT;
-- }
--
-- return r;
--}
--
--/*
-- * Fills in a dm_ioctl structure, ready for sending back to
-- * userland.
-- */
--static int __info(struct mapped_device *md, struct dm_ioctl *param)
--{
-- struct dm_table *table;
-- struct block_device *bdev;
-- struct gendisk *disk = dm_disk(md);
--
-- param->flags = DM_EXISTS_FLAG;
-- if (dm_suspended(md))
-- param->flags |= DM_SUSPEND_FLAG;
--
-- bdev = bdget_disk(disk, 0);
-- if (!bdev)
-- return -ENXIO;
--
-- param->dev = bdev->bd_dev;
-- param->open_count = bdev->bd_openers;
-- bdput(bdev);
--
-- if (disk->policy)
-- param->flags |= DM_READONLY_FLAG;
--
-- table = dm_get_table(md);
-- param->target_count = dm_table_get_num_targets(table);
-- dm_table_put(table);
--
-- return 0;
--}
--
--/*
-- * Always use UUID for lookups if it's present, otherwise use name.
-- */
--static inline struct mapped_device *find_device(struct dm_ioctl *param)
--{
-- struct hash_cell *hc;
-- struct mapped_device *md = NULL;
--
-- down_read(&_hash_lock);
-- hc = *param->uuid ? __get_uuid_cell(param->uuid) :
-- __get_name_cell(param->name);
-- if (hc) {
-- md = hc->md;
--
-- /*
-- * Sneakily write in both the name and the uuid
-- * while we have the cell.
-- */
-- strlcpy(param->name, hc->name, sizeof(param->name));
-- if (hc->uuid)
-- strlcpy(param->uuid, hc->uuid, sizeof(param->uuid));
-- else
-- param->uuid[0] = '\0';
--
-- dm_get(md);
-- }
-- up_read(&_hash_lock);
--
-- return md;
--}
--
--#define ALIGNMENT sizeof(int)
--static void *_align(void *ptr, unsigned int a)
--{
-- register unsigned long align = --a;
--
-- return (void *) (((unsigned long) ptr + align) & ~align);
--}
--
--/*
-- * Copies device info back to user space, used by
-- * the create and info ioctls.
-- */
--static int info(struct dm_ioctl *param, struct dm_ioctl *user)
--{
-- struct mapped_device *md;
--
-- param->flags = 0;
--
-- md = find_device(param);
-- if (!md)
-- /*
-- * Device not found - returns cleared exists flag.
-- */
-- goto out;
--
-- __info(md, param);
-- dm_put(md);
--
-- out:
-- return results_to_user(user, param, NULL, 0);
--}
--
--static inline int get_mode(struct dm_ioctl *param)
--{
-- int mode = FMODE_READ | FMODE_WRITE;
--
-- if (param->flags & DM_READONLY_FLAG)
-- mode = FMODE_READ;
--
-- return mode;
--}
--
--static int check_name(const char *name)
--{
-- if (name[0] == '/') {
-- DMWARN("invalid device name");
-- return -EINVAL;
-- }
--
-- return 0;
--}
--
--static int create(struct dm_ioctl *param, struct dm_ioctl *user)
--{
-- int r;
-- struct dm_table *t;
-- struct mapped_device *md;
--
-- r = check_name(param->name);
-- if (r)
-- return r;
--
-- r = dm_table_create(&t, get_mode(param));
-- if (r)
-- return r;
--
-- r = populate_table(t, param);
-- if (r) {
-- dm_table_put(t);
-- return r;
-- }
--
-- if (param->flags & DM_PERSISTENT_DEV_FLAG)
-- r = dm_create_with_minor(minor(to_kdev_t(param->dev)), t, &md);
-- else
-- r = dm_create(t, &md);
--
-- if (r) {
-- dm_table_put(t);
-- return r;
-- }
-- dm_table_put(t); /* md will have grabbed its own reference */
--
-- set_disk_ro(dm_disk(md), (param->flags & DM_READONLY_FLAG) ? 1 : 0);
-- r = dm_hash_insert(param->name, *param->uuid ? param->uuid : NULL, md);
-- dm_put(md);
--
-- return r ? r : info(param, user);
--}
--
--/*
-- * Build up the status struct for each target
-- */
--static int __status(struct mapped_device *md, struct dm_ioctl *param,
-- char *outbuf, size_t *len)
--{
-- unsigned int i, num_targets;
-- struct dm_target_spec *spec;
-- char *outptr;
-- status_type_t type;
-- struct dm_table *table = dm_get_table(md);
--
-- if (param->flags & DM_STATUS_TABLE_FLAG)
-- type = STATUSTYPE_TABLE;
-- else
-- type = STATUSTYPE_INFO;
--
-- outptr = outbuf;
--
-- /* Get all the target info */
-- num_targets = dm_table_get_num_targets(table);
-- for (i = 0; i < num_targets; i++) {
-- struct dm_target *ti = dm_table_get_target(table, i);
--
-- if (outptr - outbuf +
-- sizeof(struct dm_target_spec) > param->data_size) {
-- dm_table_put(table);
-- return -ENOMEM;
-- }
--
-- spec = (struct dm_target_spec *) outptr;
--
-- spec->status = 0;
-- spec->sector_start = ti->begin;
-- spec->length = ti->len;
-- strlcpy(spec->target_type, ti->type->name,
-- sizeof(spec->target_type));
--
-- outptr += sizeof(struct dm_target_spec);
--
-- /* Get the status/table string from the target driver */
-- if (ti->type->status)
-- ti->type->status(ti, type, outptr,
-- outbuf + param->data_size - outptr);
-- else
-- outptr[0] = '\0';
--
-- outptr += strlen(outptr) + 1;
-- _align(outptr, ALIGNMENT);
-- spec->next = outptr - outbuf;
-- }
--
-- param->target_count = num_targets;
-- *len = outptr - outbuf;
-- dm_table_put(table);
--
-- return 0;
--}
--
--/*
-- * Return the status of a device as a text string for each
-- * target.
-- */
--static int get_status(struct dm_ioctl *param, struct dm_ioctl *user)
--{
-- struct mapped_device *md;
-- size_t len = 0;
-- int ret;
-- char *outbuf = NULL;
--
-- md = find_device(param);
-- if (!md)
-- /*
-- * Device not found - returns cleared exists flag.
-- */
-- goto out;
--
-- /* We haven't a clue how long the resultant data will be so
-- just allocate as much as userland has allowed us and make sure
-- we don't overun it */
-- outbuf = kmalloc(param->data_size, GFP_KERNEL);
-- if (!outbuf)
-- goto out;
-- /*
-- * Get the status of all targets
-- */
-- __status(md, param, outbuf, &len);
--
-- /*
-- * Setup the basic dm_ioctl structure.
-- */
-- __info(md, param);
--
-- out:
-- if (md)
-- dm_put(md);
--
-- ret = results_to_user(user, param, outbuf, len);
--
-- if (outbuf)
-- kfree(outbuf);
--
-- return ret;
--}
--
--/*
-- * Wait for a device to report an event
-- */
--static int wait_device_event(struct dm_ioctl *param, struct dm_ioctl *user)
--{
-- struct mapped_device *md;
-- struct dm_table *table;
-- DECLARE_WAITQUEUE(wq, current);
--
-- md = find_device(param);
-- if (!md)
-- /*
-- * Device not found - returns cleared exists flag.
-- */
-- goto out;
--
-- /*
-- * Setup the basic dm_ioctl structure.
-- */
-- __info(md, param);
--
-- /*
-- * Wait for a notification event
-- */
-- set_current_state(TASK_INTERRUPTIBLE);
-- table = dm_get_table(md);
-- dm_table_add_wait_queue(table, &wq);
-- dm_table_put(table);
-- dm_put(md);
--
-- schedule();
--
-- out:
-- return results_to_user(user, param, NULL, 0);
--}
--
--/*
-- * Retrieves a list of devices used by a particular dm device.
-- */
--static int dep(struct dm_ioctl *param, struct dm_ioctl *user)
--{
-- int r;
-- unsigned int count;
-- struct mapped_device *md;
-- struct list_head *tmp;
-- size_t len = 0;
-- struct dm_target_deps *deps = NULL;
-- struct dm_table *table;
--
-- md = find_device(param);
-- if (!md)
-- goto out;
-- table = dm_get_table(md);
--
-- /*
-- * Setup the basic dm_ioctl structure.
-- */
-- __info(md, param);
--
-- /*
-- * Count the devices.
-- */
-- count = 0;
-- list_for_each(tmp, dm_table_get_devices(table))
-- count++;
--
-- /*
-- * Allocate a kernel space version of the dm_target_status
-- * struct.
-- */
-- if (array_too_big(sizeof(*deps), sizeof(*deps->dev), count)) {
-- dm_table_put(table);
-- dm_put(md);
-- return -ENOMEM;
-- }
--
-- len = sizeof(*deps) + (sizeof(*deps->dev) * count);
-- deps = kmalloc(len, GFP_KERNEL);
-- if (!deps) {
-- dm_table_put(table);
-- dm_put(md);
-- return -ENOMEM;
-- }
--
-- /*
-- * Fill in the devices.
-- */
-- deps->count = count;
-- count = 0;
-- list_for_each(tmp, dm_table_get_devices(table)) {
-- struct dm_dev *dd = list_entry(tmp, struct dm_dev, list);
-- deps->dev[count++] = dd->bdev->bd_dev;
-- }
-- dm_table_put(table);
-- dm_put(md);
--
-- out:
-- r = results_to_user(user, param, deps, len);
--
-- kfree(deps);
-- return r;
--}
--
--static int remove(struct dm_ioctl *param, struct dm_ioctl *user)
--{
-- struct hash_cell *hc;
--
-- down_write(&_hash_lock);
-- hc = *param->uuid ? __get_uuid_cell(param->uuid) :
-- __get_name_cell(param->name);
-- if (!hc) {
-- DMWARN("device doesn't appear to be in the dev hash table.");
-- up_write(&_hash_lock);
-- return -EINVAL;
-- }
--
-- /*
-- * You may ask the interface to drop its reference to an
-- * in use device. This is no different to unlinking a
-- * file that someone still has open. The device will not
-- * actually be destroyed until the last opener closes it.
-- * The name and uuid of the device (both are interface
-- * properties) will be available for reuse immediately.
-- *
-- * You don't want to drop a _suspended_ device from the
-- * interface, since that will leave you with no way of
-- * resuming it.
-- */
-- if (dm_suspended(hc->md)) {
-- DMWARN("refusing to remove a suspended device.");
-- up_write(&_hash_lock);
-- return -EPERM;
-- }
--
-- __hash_remove(hc);
-- up_write(&_hash_lock);
-- return 0;
--}
--
--static int remove_all(struct dm_ioctl *param, struct dm_ioctl *user)
--{
-- dm_hash_remove_all();
-- return 0;
--}
--
--static int suspend(struct dm_ioctl *param, struct dm_ioctl *user)
--{
-- int r;
-- struct mapped_device *md;
--
-- md = find_device(param);
-- if (!md)
-- return -ENXIO;
--
-- if (param->flags & DM_SUSPEND_FLAG)
-- r = dm_suspend(md);
-- else
-- r = dm_resume(md);
--
-- dm_put(md);
-- return r;
--}
--
--static int reload(struct dm_ioctl *param, struct dm_ioctl *user)
--{
-- int r;
-- struct mapped_device *md;
-- struct dm_table *t;
--
-- r = dm_table_create(&t, get_mode(param));
-- if (r)
-- return r;
--
-- r = populate_table(t, param);
-- if (r) {
-- dm_table_put(t);
-- return r;
-- }
--
-- md = find_device(param);
-- if (!md) {
-- dm_table_put(t);
-- return -ENXIO;
-- }
--
-- r = dm_swap_table(md, t);
-- if (r) {
-- dm_put(md);
-- dm_table_put(t);
-- return r;
-- }
-- dm_table_put(t); /* md will have taken its own reference */
--
-- set_disk_ro(dm_disk(md), (param->flags & DM_READONLY_FLAG) ? 1 : 0);
-- dm_put(md);
--
-- r = info(param, user);
-- return r;
--}
--
--static int rename(struct dm_ioctl *param, struct dm_ioctl *user)
--{
-- int r;
-- char *new_name = (char *) param + param->data_start;
--
-- if (valid_str(new_name, (void *) param,
-- (void *) param + param->data_size)) {
-- DMWARN("Invalid new logical volume name supplied.");
-- return -EINVAL;
-- }
--
-- r = check_name(new_name);
-- if (r)
-- return r;
--
-- return dm_hash_rename(param->name, new_name);
--}
--
--
--/*-----------------------------------------------------------------
-- * Implementation of open/close/ioctl on the special char
-- * device.
-- *---------------------------------------------------------------*/
--static ioctl_fn lookup_ioctl(unsigned int cmd)
--{
-- static struct {
-- int cmd;
-- ioctl_fn fn;
-- } _ioctls[] = {
-- {DM_VERSION_CMD, NULL}, /* version is dealt with elsewhere */
-- {DM_REMOVE_ALL_CMD, remove_all},
-- {DM_DEV_CREATE_CMD, create},
-- {DM_DEV_REMOVE_CMD, remove},
-- {DM_DEV_RELOAD_CMD, reload},
-- {DM_DEV_RENAME_CMD, rename},
-- {DM_DEV_SUSPEND_CMD, suspend},
-- {DM_DEV_DEPS_CMD, dep},
-- {DM_DEV_STATUS_CMD, info},
-- {DM_TARGET_STATUS_CMD, get_status},
-- {DM_TARGET_WAIT_CMD, wait_device_event},
-- };
--
-- return (cmd >= ARRAY_SIZE(_ioctls)) ? NULL : _ioctls[cmd].fn;
--}
--
--/*
-- * As well as checking the version compatibility this always
-- * copies the kernel interface version out.
-- */
--static int check_version(unsigned int cmd, struct dm_ioctl *user)
--{
-- uint32_t version[3];
-- int r = 0;
--
-- if (copy_from_user(version, user->version, sizeof(version)))
-- return -EFAULT;
--
-- if ((DM_VERSION_MAJOR != version[0]) ||
-- (DM_VERSION_MINOR < version[1])) {
-- DMWARN("ioctl interface mismatch: "
-- "kernel(%u.%u.%u), user(%u.%u.%u), cmd(%d)",
-- DM_VERSION_MAJOR, DM_VERSION_MINOR,
-- DM_VERSION_PATCHLEVEL,
-- version[0], version[1], version[2], cmd);
-- r = -EINVAL;
-- }
--
-- /*
-- * Fill in the kernel version.
-- */
-- version[0] = DM_VERSION_MAJOR;
-- version[1] = DM_VERSION_MINOR;
-- version[2] = DM_VERSION_PATCHLEVEL;
-- if (copy_to_user(user->version, version, sizeof(version)))
-- return -EFAULT;
--
-- return r;
--}
--
--static void free_params(struct dm_ioctl *param)
--{
-- vfree(param);
--}
--
--static int copy_params(struct dm_ioctl *user, struct dm_ioctl **param)
--{
-- struct dm_ioctl tmp, *dmi;
--
-- if (copy_from_user(&tmp, user, sizeof(tmp)))
-- return -EFAULT;
--
-- if (tmp.data_size < sizeof(tmp))
-- return -EINVAL;
--
-- dmi = (struct dm_ioctl *) vmalloc(tmp.data_size);
-- if (!dmi)
-- return -ENOMEM;
--
-- if (copy_from_user(dmi, user, tmp.data_size)) {
-- vfree(dmi);
-- return -EFAULT;
-- }
--
-- *param = dmi;
-- return 0;
--}
--
--static int validate_params(uint cmd, struct dm_ioctl *param)
--{
-- /* Ignores parameters */
-- if (cmd == DM_REMOVE_ALL_CMD)
-- return 0;
--
-- /* Unless creating, either name of uuid but not both */
-- if (cmd != DM_DEV_CREATE_CMD) {
-- if ((!*param->uuid && !*param->name) ||
-- (*param->uuid && *param->name)) {
-- DMWARN("one of name or uuid must be supplied");
-- return -EINVAL;
-- }
-- }
--
-- /* Ensure strings are terminated */
-- param->name[DM_NAME_LEN - 1] = '\0';
-- param->uuid[DM_UUID_LEN - 1] = '\0';
--
-- return 0;
--}
--
--static int ctl_ioctl(struct inode *inode, struct file *file,
-- uint command, ulong u)
--{
-- int r = 0;
-- unsigned int cmd;
-- struct dm_ioctl *param;
-- struct dm_ioctl *user = (struct dm_ioctl *) u;
-- ioctl_fn fn = NULL;
--
-- /* only root can play with this */
-- if (!capable(CAP_SYS_ADMIN))
-- return -EACCES;
--
-- if (_IOC_TYPE(command) != DM_IOCTL)
-- return -ENOTTY;
--
-- cmd = _IOC_NR(command);
--
-- /*
-- * Check the interface version passed in. This also
-- * writes out the kernels interface version.
-- */
-- r = check_version(cmd, user);
-- if (r)
-- return r;
--
-- /*
-- * Nothing more to do for the version command.
-- */
-- if (cmd == DM_VERSION_CMD)
-- return 0;
--
-- fn = lookup_ioctl(cmd);
-- if (!fn) {
-- DMWARN("dm_ctl_ioctl: unknown command 0x%x", command);
-- return -ENOTTY;
-- }
--
-- /*
-- * Copy the parameters into kernel space.
-- */
-- r = copy_params(user, ¶m);
-- if (r)
-- return r;
--
-- r = validate_params(cmd, param);
-- if (r) {
-- free_params(param);
-- return r;
-- }
--
-- r = fn(param, user);
-- free_params(param);
-- return r;
--}
--
--static struct file_operations _ctl_fops = {
-- .ioctl = ctl_ioctl,
-- .owner = THIS_MODULE,
--};
--
--static struct miscdevice _dm_misc = {
-- .minor = MISC_DYNAMIC_MINOR,
-- .name = DM_NAME,
-- .devfs_name = "mapper/control",
-- .fops = &_ctl_fops
--};
--
--/*
-- * Create misc character device and link to DM_DIR/control.
-- */
--int __init dm_interface_init(void)
--{
-- int r;
--
-- r = dm_hash_init();
-- if (r)
-- return r;
--
-- r = misc_register(&_dm_misc);
-- if (r) {
-- DMERR("misc_register failed for control device");
-- dm_hash_exit();
-- return r;
-- }
--
-- DMINFO("%d.%d.%d%s initialised: %s", DM_VERSION_MAJOR,
-- DM_VERSION_MINOR, DM_VERSION_PATCHLEVEL, DM_VERSION_EXTRA,
-- DM_DRIVER_EMAIL);
-- return 0;
--
-- if (misc_deregister(&_dm_misc) < 0)
-- DMERR("misc_deregister failed for control device");
-- dm_hash_exit();
-- return r;
--}
-
--void dm_interface_exit(void)
--{
-- if (misc_deregister(&_dm_misc) < 0)
-- DMERR("misc_deregister failed for control device");
-- dm_hash_exit();
--}
-+#ifdef CONFIG_DM_IOCTL_V4
-+#include "dm-ioctl-v4.c"
-+#else
-+#include "dm-ioctl-v1.c"
-+#endif
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/md/dm-ioctl-v1.c 2003-07-19 17:03:49.000000000 -0700
-@@ -0,0 +1,1160 @@
-+/*
-+ * Copyright (C) 2001, 2002 Sistina Software (UK) Limited.
-+ *
-+ * This file is released under the GPL.
-+ */
-+
-+#include "dm.h"
-+
-+#include <linux/module.h>
-+#include <linux/vmalloc.h>
-+#include <linux/miscdevice.h>
-+#include <linux/dm-ioctl.h>
-+#include <linux/init.h>
-+#include <linux/wait.h>
-+#include <linux/blk.h>
-+#include <linux/slab.h>
-+#include <linux/devfs_fs_kernel.h>
-+
-+#include <asm/uaccess.h>
-+
-+#define DM_DRIVER_EMAIL "dm@uk.sistina.com"
-+
-+/*-----------------------------------------------------------------
-+ * The ioctl interface needs to be able to look up devices by
-+ * name or uuid.
-+ *---------------------------------------------------------------*/
-+struct hash_cell {
-+ struct list_head name_list;
-+ struct list_head uuid_list;
-+
-+ char *name;
-+ char *uuid;
-+ struct mapped_device *md;
-+};
-+
-+#define NUM_BUCKETS 64
-+#define MASK_BUCKETS (NUM_BUCKETS - 1)
-+static struct list_head _name_buckets[NUM_BUCKETS];
-+static struct list_head _uuid_buckets[NUM_BUCKETS];
-+
-+void dm_hash_remove_all(void);
-+
-+/*
-+ * Guards access to all three tables.
-+ */
-+static DECLARE_RWSEM(_hash_lock);
-+
-+static void init_buckets(struct list_head *buckets)
-+{
-+ unsigned int i;
-+
-+ for (i = 0; i < NUM_BUCKETS; i++)
-+ INIT_LIST_HEAD(buckets + i);
-+}
-+
-+int dm_hash_init(void)
-+{
-+ init_buckets(_name_buckets);
-+ init_buckets(_uuid_buckets);
-+ devfs_mk_dir(DM_DIR);
-+ return 0;
-+}
-+
-+void dm_hash_exit(void)
-+{
-+ dm_hash_remove_all();
-+ devfs_remove(DM_DIR);
-+}
-+
-+/*-----------------------------------------------------------------
-+ * Hash function:
-+ * We're not really concerned with the str hash function being
-+ * fast since it's only used by the ioctl interface.
-+ *---------------------------------------------------------------*/
-+static unsigned int hash_str(const char *str)
-+{
-+ const unsigned int hash_mult = 2654435387U;
-+ unsigned int h = 0;
-+
-+ while (*str)
-+ h = (h + (unsigned int) *str++) * hash_mult;
-+
-+ return h & MASK_BUCKETS;
-+}
-+
-+/*-----------------------------------------------------------------
-+ * Code for looking up a device by name
-+ *---------------------------------------------------------------*/
-+static struct hash_cell *__get_name_cell(const char *str)
-+{
-+ struct list_head *tmp;
-+ struct hash_cell *hc;
-+ unsigned int h = hash_str(str);
-+
-+ list_for_each (tmp, _name_buckets + h) {
-+ hc = list_entry(tmp, struct hash_cell, name_list);
-+ if (!strcmp(hc->name, str))
-+ return hc;
-+ }
-+
-+ return NULL;
-+}
-+
-+static struct hash_cell *__get_uuid_cell(const char *str)
-+{
-+ struct list_head *tmp;
-+ struct hash_cell *hc;
-+ unsigned int h = hash_str(str);
-+
-+ list_for_each (tmp, _uuid_buckets + h) {
-+ hc = list_entry(tmp, struct hash_cell, uuid_list);
-+ if (!strcmp(hc->uuid, str))
-+ return hc;
-+ }
-+
-+ return NULL;
-+}
-+
-+/*-----------------------------------------------------------------
-+ * Inserting, removing and renaming a device.
-+ *---------------------------------------------------------------*/
-+static inline char *kstrdup(const char *str)
-+{
-+ char *r = kmalloc(strlen(str) + 1, GFP_KERNEL);
-+ if (r)
-+ strcpy(r, str);
-+ return r;
-+}
-+
-+static struct hash_cell *alloc_cell(const char *name, const char *uuid,
-+ struct mapped_device *md)
-+{
-+ struct hash_cell *hc;
-+
-+ hc = kmalloc(sizeof(*hc), GFP_KERNEL);
-+ if (!hc)
-+ return NULL;
-+
-+ hc->name = kstrdup(name);
-+ if (!hc->name) {
-+ kfree(hc);
-+ return NULL;
-+ }
-+
-+ if (!uuid)
-+ hc->uuid = NULL;
-+
-+ else {
-+ hc->uuid = kstrdup(uuid);
-+ if (!hc->uuid) {
-+ kfree(hc->name);
-+ kfree(hc);
-+ return NULL;
-+ }
-+ }
-+
-+ INIT_LIST_HEAD(&hc->name_list);
-+ INIT_LIST_HEAD(&hc->uuid_list);
-+ hc->md = md;
-+ return hc;
-+}
-+
-+static void free_cell(struct hash_cell *hc)
-+{
-+ if (hc) {
-+ kfree(hc->name);
-+ kfree(hc->uuid);
-+ kfree(hc);
-+ }
-+}
-+
-+/*
-+ * devfs stuff.
-+ */
-+static int register_with_devfs(struct hash_cell *hc)
-+{
-+ struct gendisk *disk = dm_disk(hc->md);
-+
-+ devfs_mk_bdev(MKDEV(disk->major, disk->first_minor),
-+ S_IFBLK | S_IRUSR | S_IWUSR | S_IRGRP,
-+ DM_DIR "/%s", hc->name);
-+ return 0;
-+}
-+
-+static int unregister_with_devfs(struct hash_cell *hc)
-+{
-+ devfs_remove(DM_DIR"/%s", hc->name);
-+ return 0;
-+}
-+
-+/*
-+ * The kdev_t and uuid of a device can never change once it is
-+ * initially inserted.
-+ */
-+int dm_hash_insert(const char *name, const char *uuid, struct mapped_device *md)
-+{
-+ struct hash_cell *cell;
-+
-+ /*
-+ * Allocate the new cells.
-+ */
-+ cell = alloc_cell(name, uuid, md);
-+ if (!cell)
-+ return -ENOMEM;
-+
-+ /*
-+ * Insert the cell into all three hash tables.
-+ */
-+ down_write(&_hash_lock);
-+ if (__get_name_cell(name))
-+ goto bad;
-+
-+ list_add(&cell->name_list, _name_buckets + hash_str(name));
-+
-+ if (uuid) {
-+ if (__get_uuid_cell(uuid)) {
-+ list_del(&cell->name_list);
-+ goto bad;
-+ }
-+ list_add(&cell->uuid_list, _uuid_buckets + hash_str(uuid));
-+ }
-+ register_with_devfs(cell);
-+ dm_get(md);
-+ up_write(&_hash_lock);
-+
-+ return 0;
-+
-+ bad:
-+ up_write(&_hash_lock);
-+ free_cell(cell);
-+ return -EBUSY;
-+}
-+
-+void __hash_remove(struct hash_cell *hc)
-+{
-+ /* remove from the dev hash */
-+ list_del(&hc->uuid_list);
-+ list_del(&hc->name_list);
-+ unregister_with_devfs(hc);
-+ dm_put(hc->md);
-+ free_cell(hc);
-+}
-+
-+void dm_hash_remove_all(void)
-+{
-+ int i;
-+ struct hash_cell *hc;
-+ struct list_head *tmp, *n;
-+
-+ down_write(&_hash_lock);
-+ for (i = 0; i < NUM_BUCKETS; i++) {
-+ list_for_each_safe (tmp, n, _name_buckets + i) {
-+ hc = list_entry(tmp, struct hash_cell, name_list);
-+ __hash_remove(hc);
-+ }
-+ }
-+ up_write(&_hash_lock);
-+}
-+
-+int dm_hash_rename(const char *old, const char *new)
-+{
-+ char *new_name, *old_name;
-+ struct hash_cell *hc;
-+
-+ /*
-+ * duplicate new.
-+ */
-+ new_name = kstrdup(new);
-+ if (!new_name)
-+ return -ENOMEM;
-+
-+ down_write(&_hash_lock);
-+
-+ /*
-+ * Is new free ?
-+ */
-+ hc = __get_name_cell(new);
-+ if (hc) {
-+ DMWARN("asked to rename to an already existing name %s -> %s",
-+ old, new);
-+ up_write(&_hash_lock);
-+ kfree(new_name);
-+ return -EBUSY;
-+ }
-+
-+ /*
-+ * Is there such a device as 'old' ?
-+ */
-+ hc = __get_name_cell(old);
-+ if (!hc) {
-+ DMWARN("asked to rename a non existent device %s -> %s",
-+ old, new);
-+ up_write(&_hash_lock);
-+ kfree(new_name);
-+ return -ENXIO;
-+ }
-+
-+ /*
-+ * rename and move the name cell.
-+ */
-+ unregister_with_devfs(hc);
-+
-+ list_del(&hc->name_list);
-+ old_name = hc->name;
-+ hc->name = new_name;
-+ list_add(&hc->name_list, _name_buckets + hash_str(new_name));
-+
-+ /* rename the device node in devfs */
-+ register_with_devfs(hc);
-+
-+ up_write(&_hash_lock);
-+ kfree(old_name);
-+ return 0;
-+}
-+
-+
-+/*-----------------------------------------------------------------
-+ * Implementation of the ioctl commands
-+ *---------------------------------------------------------------*/
-+
-+/*
-+ * All the ioctl commands get dispatched to functions with this
-+ * prototype.
-+ */
-+typedef int (*ioctl_fn)(struct dm_ioctl *param, struct dm_ioctl *user);
-+
-+/*
-+ * Check a string doesn't overrun the chunk of
-+ * memory we copied from userland.
-+ */
-+static int valid_str(char *str, void *begin, void *end)
-+{
-+ while (((void *) str >= begin) && ((void *) str < end))
-+ if (!*str++)
-+ return 0;
-+
-+ return -EINVAL;
-+}
-+
-+static int next_target(struct dm_target_spec *last, uint32_t next,
-+ void *begin, void *end,
-+ struct dm_target_spec **spec, char **params)
-+{
-+ *spec = (struct dm_target_spec *)
-+ ((unsigned char *) last + next);
-+ *params = (char *) (*spec + 1);
-+
-+ if (*spec < (last + 1) || ((void *) *spec > end))
-+ return -EINVAL;
-+
-+ return valid_str(*params, begin, end);
-+}
-+
-+static int populate_table(struct dm_table *table, struct dm_ioctl *args)
-+{
-+ int r, first = 1;
-+ unsigned int i = 0;
-+ struct dm_target_spec *spec;
-+ char *params;
-+ void *begin, *end;
-+
-+ if (!args->target_count) {
-+ DMWARN("populate_table: no targets specified");
-+ return -EINVAL;
-+ }
-+
-+ begin = (void *) args;
-+ end = begin + args->data_size;
-+
-+ for (i = 0; i < args->target_count; i++) {
-+
-+ if (first)
-+ r = next_target((struct dm_target_spec *) args,
-+ args->data_start,
-+ begin, end, &spec, ¶ms);
-+ else
-+ r = next_target(spec, spec->next, begin, end,
-+ &spec, ¶ms);
-+
-+ if (r) {
-+ DMWARN("unable to find target");
-+ return -EINVAL;
-+ }
-+
-+ r = dm_table_add_target(table, spec->target_type,
-+ (sector_t) spec->sector_start,
-+ (sector_t) spec->length,
-+ params);
-+ if (r) {
-+ DMWARN("internal error adding target to table");
-+ return -EINVAL;
-+ }
-+
-+ first = 0;
-+ }
-+
-+ return dm_table_complete(table);
-+}
-+
-+/*
-+ * Round up the ptr to the next 'align' boundary. Obviously
-+ * 'align' must be a power of 2.
-+ */
-+static inline void *align_ptr(void *ptr, unsigned int align)
-+{
-+ align--;
-+ return (void *) (((unsigned long) (ptr + align)) & ~align);
-+}
-+
-+/*
-+ * Copies a dm_ioctl and an optional additional payload to
-+ * userland.
-+ */
-+static int results_to_user(struct dm_ioctl *user, struct dm_ioctl *param,
-+ void *data, uint32_t len)
-+{
-+ int r;
-+ void *ptr = NULL;
-+
-+ if (data) {
-+ ptr = align_ptr(user + 1, sizeof(unsigned long));
-+ param->data_start = ptr - (void *) user;
-+ }
-+
-+ /*
-+ * The version number has already been filled in, so we
-+ * just copy later fields.
-+ */
-+ r = copy_to_user(&user->data_size, ¶m->data_size,
-+ sizeof(*param) - sizeof(param->version));
-+ if (r)
-+ return -EFAULT;
-+
-+ if (data) {
-+ if (param->data_start + len > param->data_size)
-+ return -ENOSPC;
-+
-+ if (copy_to_user(ptr, data, len))
-+ r = -EFAULT;
-+ }
-+
-+ return r;
-+}
-+
-+/*
-+ * Fills in a dm_ioctl structure, ready for sending back to
-+ * userland.
-+ */
-+static int __info(struct mapped_device *md, struct dm_ioctl *param)
-+{
-+ struct dm_table *table;
-+ struct block_device *bdev;
-+ struct gendisk *disk = dm_disk(md);
-+
-+ param->flags = DM_EXISTS_FLAG;
-+ if (dm_suspended(md))
-+ param->flags |= DM_SUSPEND_FLAG;
-+
-+ bdev = bdget_disk(disk, 0);
-+ if (!bdev)
-+ return -ENXIO;
-+
-+ param->dev = bdev->bd_dev;
-+ param->open_count = bdev->bd_openers;
-+ bdput(bdev);
-+
-+ if (disk->policy)
-+ param->flags |= DM_READONLY_FLAG;
-+
-+ table = dm_get_table(md);
-+ param->target_count = dm_table_get_num_targets(table);
-+ dm_table_put(table);
-+
-+ return 0;
-+}
-+
-+/*
-+ * Always use UUID for lookups if it's present, otherwise use name.
-+ */
-+static inline struct mapped_device *find_device(struct dm_ioctl *param)
-+{
-+ struct hash_cell *hc;
-+ struct mapped_device *md = NULL;
-+
-+ down_read(&_hash_lock);
-+ hc = *param->uuid ? __get_uuid_cell(param->uuid) :
-+ __get_name_cell(param->name);
-+ if (hc) {
-+ md = hc->md;
-+
-+ /*
-+ * Sneakily write in both the name and the uuid
-+ * while we have the cell.
-+ */
-+ strlcpy(param->name, hc->name, sizeof(param->name));
-+ if (hc->uuid)
-+ strlcpy(param->uuid, hc->uuid, sizeof(param->uuid));
-+ else
-+ param->uuid[0] = '\0';
-+
-+ dm_get(md);
-+ }
-+ up_read(&_hash_lock);
-+
-+ return md;
-+}
-+
-+#define ALIGNMENT sizeof(int)
-+static void *_align(void *ptr, unsigned int a)
-+{
-+ register unsigned long align = --a;
-+
-+ return (void *) (((unsigned long) ptr + align) & ~align);
-+}
-+
-+/*
-+ * Copies device info back to user space, used by
-+ * the create and info ioctls.
-+ */
-+static int info(struct dm_ioctl *param, struct dm_ioctl *user)
-+{
-+ struct mapped_device *md;
-+
-+ param->flags = 0;
-+
-+ md = find_device(param);
-+ if (!md)
-+ /*
-+ * Device not found - returns cleared exists flag.
-+ */
-+ goto out;
-+
-+ __info(md, param);
-+ dm_put(md);
-+
-+ out:
-+ return results_to_user(user, param, NULL, 0);
-+}
-+
-+static inline int get_mode(struct dm_ioctl *param)
-+{
-+ int mode = FMODE_READ | FMODE_WRITE;
-+
-+ if (param->flags & DM_READONLY_FLAG)
-+ mode = FMODE_READ;
-+
-+ return mode;
-+}
-+
-+static int check_name(const char *name)
-+{
-+ if (name[0] == '/') {
-+ DMWARN("invalid device name");
-+ return -EINVAL;
-+ }
-+
-+ return 0;
-+}
-+
-+static int create(struct dm_ioctl *param, struct dm_ioctl *user)
-+{
-+ int r;
-+ struct dm_table *t;
-+ struct mapped_device *md;
-+
-+ r = check_name(param->name);
-+ if (r)
-+ return r;
-+
-+ r = dm_table_create(&t, get_mode(param));
-+ if (r)
-+ return r;
-+
-+ r = populate_table(t, param);
-+ if (r) {
-+ dm_table_put(t);
-+ return r;
-+ }
-+
-+ if (param->flags & DM_PERSISTENT_DEV_FLAG)
-+ r = dm_create_with_minor(minor(to_kdev_t(param->dev)), &md);
-+ else
-+ r = dm_create(&md);
-+
-+ if (r) {
-+ dm_table_put(t);
-+ return r;
-+ }
-+
-+ /* suspend the device */
-+ r = dm_suspend(md);
-+ if (r) {
-+ DMWARN("suspend failed");
-+ dm_table_put(t);
-+ dm_put(md);
-+ return r;
-+ }
-+ /* swap in the table */
-+ r = dm_swap_table(md, t);
-+ if (r) {
-+ DMWARN("table swap failed");
-+ dm_table_put(t);
-+ dm_put(md);
-+ return r;
-+ }
-+
-+ /* resume the device */
-+ r = dm_resume(md);
-+ if (r) {
-+ DMWARN("resume failed");
-+ dm_table_put(t);
-+ dm_put(md);
-+ return r;
-+ }
-+
-+ dm_table_put(t); /* md will have grabbed its own reference */
-+
-+ set_disk_ro(dm_disk(md), (param->flags & DM_READONLY_FLAG) ? 1 : 0);
-+ r = dm_hash_insert(param->name, *param->uuid ? param->uuid : NULL, md);
-+ dm_put(md);
-+
-+ return r ? r : info(param, user);
-+}
-+
-+/*
-+ * Build up the status struct for each target
-+ */
-+static int __status(struct mapped_device *md, struct dm_ioctl *param,
-+ char *outbuf, size_t *len)
-+{
-+ unsigned int i, num_targets;
-+ struct dm_target_spec *spec;
-+ char *outptr;
-+ status_type_t type;
-+ struct dm_table *table = dm_get_table(md);
-+
-+ if (param->flags & DM_STATUS_TABLE_FLAG)
-+ type = STATUSTYPE_TABLE;
-+ else
-+ type = STATUSTYPE_INFO;
-+
-+ outptr = outbuf;
-+
-+ /* Get all the target info */
-+ num_targets = dm_table_get_num_targets(table);
-+ for (i = 0; i < num_targets; i++) {
-+ struct dm_target *ti = dm_table_get_target(table, i);
-+
-+ if (outptr - outbuf +
-+ sizeof(struct dm_target_spec) > param->data_size) {
-+ dm_table_put(table);
-+ return -ENOMEM;
-+ }
-+
-+ spec = (struct dm_target_spec *) outptr;
-+
-+ spec->status = 0;
-+ spec->sector_start = ti->begin;
-+ spec->length = ti->len;
-+ strlcpy(spec->target_type, ti->type->name,
-+ sizeof(spec->target_type));
-+
-+ outptr += sizeof(struct dm_target_spec);
-+
-+ /* Get the status/table string from the target driver */
-+ if (ti->type->status)
-+ ti->type->status(ti, type, outptr,
-+ outbuf + param->data_size - outptr);
-+ else
-+ outptr[0] = '\0';
-+
-+ outptr += strlen(outptr) + 1;
-+ _align(outptr, ALIGNMENT);
-+ spec->next = outptr - outbuf;
-+ }
-+
-+ param->target_count = num_targets;
-+ *len = outptr - outbuf;
-+ dm_table_put(table);
-+
-+ return 0;
-+}
-+
-+/*
-+ * Return the status of a device as a text string for each
-+ * target.
-+ */
-+static int get_status(struct dm_ioctl *param, struct dm_ioctl *user)
-+{
-+ struct mapped_device *md;
-+ size_t len = 0;
-+ int ret;
-+ char *outbuf = NULL;
-+
-+ md = find_device(param);
-+ if (!md)
-+ /*
-+ * Device not found - returns cleared exists flag.
-+ */
-+ goto out;
-+
-+ /* We haven't a clue how long the resultant data will be so
-+ just allocate as much as userland has allowed us and make sure
-+ we don't overun it */
-+ outbuf = kmalloc(param->data_size, GFP_KERNEL);
-+ if (!outbuf)
-+ goto out;
-+ /*
-+ * Get the status of all targets
-+ */
-+ __status(md, param, outbuf, &len);
-+
-+ /*
-+ * Setup the basic dm_ioctl structure.
-+ */
-+ __info(md, param);
-+
-+ out:
-+ if (md)
-+ dm_put(md);
-+
-+ ret = results_to_user(user, param, outbuf, len);
-+
-+ if (outbuf)
-+ kfree(outbuf);
-+
-+ return ret;
-+}
-+
-+/*
-+ * Wait for a device to report an event
-+ */
-+static int wait_device_event(struct dm_ioctl *param, struct dm_ioctl *user)
-+{
-+ struct mapped_device *md;
-+ DECLARE_WAITQUEUE(wq, current);
-+
-+ md = find_device(param);
-+ if (!md)
-+ /*
-+ * Device not found - returns cleared exists flag.
-+ */
-+ goto out;
-+
-+ /*
-+ * Setup the basic dm_ioctl structure.
-+ */
-+ __info(md, param);
-+
-+ /*
-+ * Wait for a notification event
-+ */
-+ set_current_state(TASK_INTERRUPTIBLE);
-+ if (!dm_add_wait_queue(md, &wq, dm_get_event_nr(md))) {
-+ schedule();
-+ dm_remove_wait_queue(md, &wq);
-+ }
-+ set_current_state(TASK_RUNNING);
-+ dm_put(md);
-+
-+ out:
-+ return results_to_user(user, param, NULL, 0);
-+}
-+
-+/*
-+ * Retrieves a list of devices used by a particular dm device.
-+ */
-+static int dep(struct dm_ioctl *param, struct dm_ioctl *user)
-+{
-+ int r;
-+ unsigned int count;
-+ struct mapped_device *md;
-+ struct list_head *tmp;
-+ size_t len = 0;
-+ struct dm_target_deps *deps = NULL;
-+ struct dm_table *table;
-+
-+ md = find_device(param);
-+ if (!md)
-+ goto out;
-+ table = dm_get_table(md);
-+
-+ /*
-+ * Setup the basic dm_ioctl structure.
-+ */
-+ __info(md, param);
-+
-+ /*
-+ * Count the devices.
-+ */
-+ count = 0;
-+ list_for_each(tmp, dm_table_get_devices(table))
-+ count++;
-+
-+ /*
-+ * Allocate a kernel space version of the dm_target_status
-+ * struct.
-+ */
-+ if (array_too_big(sizeof(*deps), sizeof(*deps->dev), count)) {
-+ dm_table_put(table);
-+ dm_put(md);
-+ return -ENOMEM;
-+ }
-+
-+ len = sizeof(*deps) + (sizeof(*deps->dev) * count);
-+ deps = kmalloc(len, GFP_KERNEL);
-+ if (!deps) {
-+ dm_table_put(table);
-+ dm_put(md);
-+ return -ENOMEM;
-+ }
-+
-+ /*
-+ * Fill in the devices.
-+ */
-+ deps->count = count;
-+ count = 0;
-+ list_for_each(tmp, dm_table_get_devices(table)) {
-+ struct dm_dev *dd = list_entry(tmp, struct dm_dev, list);
-+ deps->dev[count++] = dd->bdev->bd_dev;
-+ }
-+ dm_table_put(table);
-+ dm_put(md);
-+
-+ out:
-+ r = results_to_user(user, param, deps, len);
-+
-+ kfree(deps);
-+ return r;
-+}
-+
-+static int remove(struct dm_ioctl *param, struct dm_ioctl *user)
-+{
-+ struct hash_cell *hc;
-+
-+ down_write(&_hash_lock);
-+ hc = *param->uuid ? __get_uuid_cell(param->uuid) :
-+ __get_name_cell(param->name);
-+ if (!hc) {
-+ DMWARN("device doesn't appear to be in the dev hash table.");
-+ up_write(&_hash_lock);
-+ return -EINVAL;
-+ }
-+
-+ /*
-+ * You may ask the interface to drop its reference to an
-+ * in use device. This is no different to unlinking a
-+ * file that someone still has open. The device will not
-+ * actually be destroyed until the last opener closes it.
-+ * The name and uuid of the device (both are interface
-+ * properties) will be available for reuse immediately.
-+ *
-+ * You don't want to drop a _suspended_ device from the
-+ * interface, since that will leave you with no way of
-+ * resuming it.
-+ */
-+ if (dm_suspended(hc->md)) {
-+ DMWARN("refusing to remove a suspended device.");
-+ up_write(&_hash_lock);
-+ return -EPERM;
-+ }
-+
-+ __hash_remove(hc);
-+ up_write(&_hash_lock);
-+ return 0;
-+}
-+
-+static int remove_all(struct dm_ioctl *param, struct dm_ioctl *user)
-+{
-+ dm_hash_remove_all();
-+ return 0;
-+}
-+
-+static int suspend(struct dm_ioctl *param, struct dm_ioctl *user)
-+{
-+ int r;
-+ struct mapped_device *md;
-+
-+ md = find_device(param);
-+ if (!md)
-+ return -ENXIO;
-+
-+ if (param->flags & DM_SUSPEND_FLAG)
-+ r = dm_suspend(md);
-+ else
-+ r = dm_resume(md);
-+
-+ dm_put(md);
-+ return r;
-+}
-+
-+static int reload(struct dm_ioctl *param, struct dm_ioctl *user)
-+{
-+ int r;
-+ struct mapped_device *md;
-+ struct dm_table *t;
-+
-+ r = dm_table_create(&t, get_mode(param));
-+ if (r)
-+ return r;
-+
-+ r = populate_table(t, param);
-+ if (r) {
-+ dm_table_put(t);
-+ return r;
-+ }
-+
-+ md = find_device(param);
-+ if (!md) {
-+ dm_table_put(t);
-+ return -ENXIO;
-+ }
-+
-+ r = dm_swap_table(md, t);
-+ if (r) {
-+ dm_put(md);
-+ dm_table_put(t);
-+ return r;
-+ }
-+ dm_table_put(t); /* md will have taken its own reference */
-+
-+ set_disk_ro(dm_disk(md), (param->flags & DM_READONLY_FLAG) ? 1 : 0);
-+ dm_put(md);
-+
-+ r = info(param, user);
-+ return r;
-+}
-+
-+static int rename(struct dm_ioctl *param, struct dm_ioctl *user)
-+{
-+ int r;
-+ char *new_name = (char *) param + param->data_start;
-+
-+ if (valid_str(new_name, (void *) param,
-+ (void *) param + param->data_size)) {
-+ DMWARN("Invalid new logical volume name supplied.");
-+ return -EINVAL;
-+ }
-+
-+ r = check_name(new_name);
-+ if (r)
-+ return r;
-+
-+ return dm_hash_rename(param->name, new_name);
-+}
-+
-+
-+/*-----------------------------------------------------------------
-+ * Implementation of open/close/ioctl on the special char
-+ * device.
-+ *---------------------------------------------------------------*/
-+static ioctl_fn lookup_ioctl(unsigned int cmd)
-+{
-+ static struct {
-+ int cmd;
-+ ioctl_fn fn;
-+ } _ioctls[] = {
-+ {DM_VERSION_CMD, NULL}, /* version is dealt with elsewhere */
-+ {DM_REMOVE_ALL_CMD, remove_all},
-+ {DM_DEV_CREATE_CMD, create},
-+ {DM_DEV_REMOVE_CMD, remove},
-+ {DM_DEV_RELOAD_CMD, reload},
-+ {DM_DEV_RENAME_CMD, rename},
-+ {DM_DEV_SUSPEND_CMD, suspend},
-+ {DM_DEV_DEPS_CMD, dep},
-+ {DM_DEV_STATUS_CMD, info},
-+ {DM_TARGET_STATUS_CMD, get_status},
-+ {DM_TARGET_WAIT_CMD, wait_device_event},
-+ };
-+
-+ return (cmd >= ARRAY_SIZE(_ioctls)) ? NULL : _ioctls[cmd].fn;
-+}
-+
-+/*
-+ * As well as checking the version compatibility this always
-+ * copies the kernel interface version out.
-+ */
-+static int check_version(unsigned int cmd, struct dm_ioctl *user)
-+{
-+ uint32_t version[3];
-+ int r = 0;
-+
-+ if (copy_from_user(version, user->version, sizeof(version)))
-+ return -EFAULT;
-+
-+ if ((DM_VERSION_MAJOR != version[0]) ||
-+ (DM_VERSION_MINOR < version[1])) {
-+ DMWARN("ioctl interface mismatch: "
-+ "kernel(%u.%u.%u), user(%u.%u.%u), cmd(%d)",
-+ DM_VERSION_MAJOR, DM_VERSION_MINOR,
-+ DM_VERSION_PATCHLEVEL,
-+ version[0], version[1], version[2], cmd);
-+ r = -EINVAL;
-+ }
-+
-+ /*
-+ * Fill in the kernel version.
-+ */
-+ version[0] = DM_VERSION_MAJOR;
-+ version[1] = DM_VERSION_MINOR;
-+ version[2] = DM_VERSION_PATCHLEVEL;
-+ if (copy_to_user(user->version, version, sizeof(version)))
-+ return -EFAULT;
-+
-+ return r;
-+}
-+
-+static void free_params(struct dm_ioctl *param)
-+{
-+ vfree(param);
-+}
-+
-+static int copy_params(struct dm_ioctl *user, struct dm_ioctl **param)
-+{
-+ struct dm_ioctl tmp, *dmi;
-+
-+ if (copy_from_user(&tmp, user, sizeof(tmp)))
-+ return -EFAULT;
-+
-+ if (tmp.data_size < sizeof(tmp))
-+ return -EINVAL;
-+
-+ dmi = (struct dm_ioctl *) vmalloc(tmp.data_size);
-+ if (!dmi)
-+ return -ENOMEM;
-+
-+ if (copy_from_user(dmi, user, tmp.data_size)) {
-+ vfree(dmi);
-+ return -EFAULT;
-+ }
-+
-+ *param = dmi;
-+ return 0;
-+}
-+
-+static int validate_params(uint cmd, struct dm_ioctl *param)
-+{
-+ /* Ignores parameters */
-+ if (cmd == DM_REMOVE_ALL_CMD)
-+ return 0;
-+
-+ /* Unless creating, either name of uuid but not both */
-+ if (cmd != DM_DEV_CREATE_CMD) {
-+ if ((!*param->uuid && !*param->name) ||
-+ (*param->uuid && *param->name)) {
-+ DMWARN("one of name or uuid must be supplied");
-+ return -EINVAL;
-+ }
-+ }
-+
-+ /* Ensure strings are terminated */
-+ param->name[DM_NAME_LEN - 1] = '\0';
-+ param->uuid[DM_UUID_LEN - 1] = '\0';
-+
-+ return 0;
-+}
-+
-+static int ctl_ioctl(struct inode *inode, struct file *file,
-+ uint command, ulong u)
-+{
-+ int r = 0;
-+ unsigned int cmd;
-+ struct dm_ioctl *param;
-+ struct dm_ioctl *user = (struct dm_ioctl *) u;
-+ ioctl_fn fn = NULL;
-+
-+ /* only root can play with this */
-+ if (!capable(CAP_SYS_ADMIN))
-+ return -EACCES;
-+
-+ if (_IOC_TYPE(command) != DM_IOCTL)
-+ return -ENOTTY;
-+
-+ cmd = _IOC_NR(command);
-+
-+ /*
-+ * Check the interface version passed in. This also
-+ * writes out the kernels interface version.
-+ */
-+ r = check_version(cmd, user);
-+ if (r)
-+ return r;
-+
-+ /*
-+ * Nothing more to do for the version command.
-+ */
-+ if (cmd == DM_VERSION_CMD)
-+ return 0;
-+
-+ fn = lookup_ioctl(cmd);
-+ if (!fn) {
-+ DMWARN("dm_ctl_ioctl: unknown command 0x%x", command);
-+ return -ENOTTY;
-+ }
-+
-+ /*
-+ * Copy the parameters into kernel space.
-+ */
-+ r = copy_params(user, ¶m);
-+ if (r)
-+ return r;
-+
-+ r = validate_params(cmd, param);
-+ if (r) {
-+ free_params(param);
-+ return r;
-+ }
-+
-+ r = fn(param, user);
-+ free_params(param);
-+ return r;
-+}
-+
-+static struct file_operations _ctl_fops = {
-+ .ioctl = ctl_ioctl,
-+ .owner = THIS_MODULE,
-+};
-+
-+static struct miscdevice _dm_misc = {
-+ .minor = MISC_DYNAMIC_MINOR,
-+ .name = DM_NAME,
-+ .devfs_name = "mapper/control",
-+ .fops = &_ctl_fops
-+};
-+
-+/*
-+ * Create misc character device and link to DM_DIR/control.
-+ */
-+int __init dm_interface_init(void)
-+{
-+ int r;
-+
-+ r = dm_hash_init();
-+ if (r)
-+ return r;
-+
-+ r = misc_register(&_dm_misc);
-+ if (r) {
-+ DMERR("misc_register failed for control device");
-+ dm_hash_exit();
-+ return r;
-+ }
-+
-+ DMINFO("%d.%d.%d%s initialised: %s", DM_VERSION_MAJOR,
-+ DM_VERSION_MINOR, DM_VERSION_PATCHLEVEL, DM_VERSION_EXTRA,
-+ DM_DRIVER_EMAIL);
-+ return 0;
-+
-+ if (misc_deregister(&_dm_misc) < 0)
-+ DMERR("misc_deregister failed for control device");
-+ dm_hash_exit();
-+ return r;
-+}
-+
-+void dm_interface_exit(void)
-+{
-+ if (misc_deregister(&_dm_misc) < 0)
-+ DMERR("misc_deregister failed for control device");
-+ dm_hash_exit();
-+}
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/md/dm-ioctl-v4.c 2003-07-19 17:03:49.000000000 -0700
-@@ -0,0 +1,1252 @@
-+/*
-+ * Copyright (C) 2001, 2002 Sistina Software (UK) Limited.
-+ *
-+ * This file is released under the GPL.
-+ */
-+
-+#include "dm.h"
-+
-+#include <linux/module.h>
-+#include <linux/vmalloc.h>
-+#include <linux/miscdevice.h>
-+#include <linux/init.h>
-+#include <linux/wait.h>
-+#include <linux/blk.h>
-+#include <linux/slab.h>
-+#include <linux/devfs_fs_kernel.h>
-+
-+#include <asm/uaccess.h>
-+
-+#define DM_DRIVER_EMAIL "dm@uk.sistina.com"
-+
-+/*-----------------------------------------------------------------
-+ * The ioctl interface needs to be able to look up devices by
-+ * name or uuid.
-+ *---------------------------------------------------------------*/
-+struct hash_cell {
-+ struct list_head name_list;
-+ struct list_head uuid_list;
-+
-+ char *name;
-+ char *uuid;
-+ struct mapped_device *md;
-+ struct dm_table *new_map;
-+};
-+
-+#define NUM_BUCKETS 64
-+#define MASK_BUCKETS (NUM_BUCKETS - 1)
-+static struct list_head _name_buckets[NUM_BUCKETS];
-+static struct list_head _uuid_buckets[NUM_BUCKETS];
-+
-+void dm_hash_remove_all(void);
-+
-+/*
-+ * Guards access to both hash tables.
-+ */
-+static DECLARE_RWSEM(_hash_lock);
-+
-+static void init_buckets(struct list_head *buckets)
-+{
-+ unsigned int i;
-+
-+ for (i = 0; i < NUM_BUCKETS; i++)
-+ INIT_LIST_HEAD(buckets + i);
-+}
-+
-+int dm_hash_init(void)
-+{
-+ init_buckets(_name_buckets);
-+ init_buckets(_uuid_buckets);
-+ devfs_mk_dir(DM_DIR);
-+ return 0;
-+}
-+
-+void dm_hash_exit(void)
-+{
-+ dm_hash_remove_all();
-+ devfs_remove(DM_DIR);
-+}
-+
-+/*-----------------------------------------------------------------
-+ * Hash function:
-+ * We're not really concerned with the str hash function being
-+ * fast since it's only used by the ioctl interface.
-+ *---------------------------------------------------------------*/
-+static unsigned int hash_str(const char *str)
-+{
-+ const unsigned int hash_mult = 2654435387U;
-+ unsigned int h = 0;
-+
-+ while (*str)
-+ h = (h + (unsigned int) *str++) * hash_mult;
-+
-+ return h & MASK_BUCKETS;
-+}
-+
-+/*-----------------------------------------------------------------
-+ * Code for looking up a device by name
-+ *---------------------------------------------------------------*/
-+static struct hash_cell *__get_name_cell(const char *str)
-+{
-+ struct list_head *tmp;
-+ struct hash_cell *hc;
-+ unsigned int h = hash_str(str);
-+
-+ list_for_each (tmp, _name_buckets + h) {
-+ hc = list_entry(tmp, struct hash_cell, name_list);
-+ if (!strcmp(hc->name, str))
-+ return hc;
-+ }
-+
-+ return NULL;
-+}
-+
-+static struct hash_cell *__get_uuid_cell(const char *str)
-+{
-+ struct list_head *tmp;
-+ struct hash_cell *hc;
-+ unsigned int h = hash_str(str);
-+
-+ list_for_each (tmp, _uuid_buckets + h) {
-+ hc = list_entry(tmp, struct hash_cell, uuid_list);
-+ if (!strcmp(hc->uuid, str))
-+ return hc;
-+ }
-+
-+ return NULL;
-+}
-+
-+/*-----------------------------------------------------------------
-+ * Inserting, removing and renaming a device.
-+ *---------------------------------------------------------------*/
-+static inline char *kstrdup(const char *str)
-+{
-+ char *r = kmalloc(strlen(str) + 1, GFP_KERNEL);
-+ if (r)
-+ strcpy(r, str);
-+ return r;
-+}
-+
-+static struct hash_cell *alloc_cell(const char *name, const char *uuid,
-+ struct mapped_device *md)
-+{
-+ struct hash_cell *hc;
-+
-+ hc = kmalloc(sizeof(*hc), GFP_KERNEL);
-+ if (!hc)
-+ return NULL;
-+
-+ hc->name = kstrdup(name);
-+ if (!hc->name) {
-+ kfree(hc);
-+ return NULL;
-+ }
-+
-+ if (!uuid)
-+ hc->uuid = NULL;
-+
-+ else {
-+ hc->uuid = kstrdup(uuid);
-+ if (!hc->uuid) {
-+ kfree(hc->name);
-+ kfree(hc);
-+ return NULL;
-+ }
-+ }
-+
-+ INIT_LIST_HEAD(&hc->name_list);
-+ INIT_LIST_HEAD(&hc->uuid_list);
-+ hc->md = md;
-+ hc->new_map = NULL;
-+ return hc;
-+}
-+
-+static void free_cell(struct hash_cell *hc)
-+{
-+ if (hc) {
-+ kfree(hc->name);
-+ kfree(hc->uuid);
-+ kfree(hc);
-+ }
-+}
-+
-+/*
-+ * devfs stuff.
-+ */
-+static int register_with_devfs(struct hash_cell *hc)
-+{
-+ struct gendisk *disk = dm_disk(hc->md);
-+
-+ devfs_mk_bdev(MKDEV(disk->major, disk->first_minor),
-+ S_IFBLK | S_IRUSR | S_IWUSR | S_IRGRP,
-+ DM_DIR "/%s", hc->name);
-+ return 0;
-+}
-+
-+static int unregister_with_devfs(struct hash_cell *hc)
-+{
-+ devfs_remove(DM_DIR"/%s", hc->name);
-+ return 0;
-+}
-+
-+/*
-+ * The kdev_t and uuid of a device can never change once it is
-+ * initially inserted.
-+ */
-+int dm_hash_insert(const char *name, const char *uuid, struct mapped_device *md)
-+{
-+ struct hash_cell *cell;
-+
-+ /*
-+ * Allocate the new cells.
-+ */
-+ cell = alloc_cell(name, uuid, md);
-+ if (!cell)
-+ return -ENOMEM;
-+
-+ /*
-+ * Insert the cell into both hash tables.
-+ */
-+ down_write(&_hash_lock);
-+ if (__get_name_cell(name))
-+ goto bad;
-+
-+ list_add(&cell->name_list, _name_buckets + hash_str(name));
-+
-+ if (uuid) {
-+ if (__get_uuid_cell(uuid)) {
-+ list_del(&cell->name_list);
-+ goto bad;
-+ }
-+ list_add(&cell->uuid_list, _uuid_buckets + hash_str(uuid));
-+ }
-+ register_with_devfs(cell);
-+ dm_get(md);
-+ up_write(&_hash_lock);
-+
-+ return 0;
-+
-+ bad:
-+ up_write(&_hash_lock);
-+ free_cell(cell);
-+ return -EBUSY;
-+}
-+
-+void __hash_remove(struct hash_cell *hc)
-+{
-+ /* remove from the dev hash */
-+ list_del(&hc->uuid_list);
-+ list_del(&hc->name_list);
-+ unregister_with_devfs(hc);
-+ dm_put(hc->md);
-+ if (hc->new_map)
-+ dm_table_put(hc->new_map);
-+ free_cell(hc);
-+}
-+
-+void dm_hash_remove_all(void)
-+{
-+ int i;
-+ struct hash_cell *hc;
-+ struct list_head *tmp, *n;
-+
-+ down_write(&_hash_lock);
-+ for (i = 0; i < NUM_BUCKETS; i++) {
-+ list_for_each_safe (tmp, n, _name_buckets + i) {
-+ hc = list_entry(tmp, struct hash_cell, name_list);
-+ __hash_remove(hc);
-+ }
-+ }
-+ up_write(&_hash_lock);
-+}
-+
-+int dm_hash_rename(const char *old, const char *new)
-+{
-+ char *new_name, *old_name;
-+ struct hash_cell *hc;
-+
-+ /*
-+ * duplicate new.
-+ */
-+ new_name = kstrdup(new);
-+ if (!new_name)
-+ return -ENOMEM;
-+
-+ down_write(&_hash_lock);
-+
-+ /*
-+ * Is new free ?
-+ */
-+ hc = __get_name_cell(new);
-+ if (hc) {
-+ DMWARN("asked to rename to an already existing name %s -> %s",
-+ old, new);
-+ up_write(&_hash_lock);
-+ kfree(new_name);
-+ return -EBUSY;
-+ }
-+
-+ /*
-+ * Is there such a device as 'old' ?
-+ */
-+ hc = __get_name_cell(old);
-+ if (!hc) {
-+ DMWARN("asked to rename a non existent device %s -> %s",
-+ old, new);
-+ up_write(&_hash_lock);
-+ kfree(new_name);
-+ return -ENXIO;
-+ }
-+
-+ /*
-+ * rename and move the name cell.
-+ */
-+ unregister_with_devfs(hc);
-+
-+ list_del(&hc->name_list);
-+ old_name = hc->name;
-+ hc->name = new_name;
-+ list_add(&hc->name_list, _name_buckets + hash_str(new_name));
-+
-+ /* rename the device node in devfs */
-+ register_with_devfs(hc);
-+
-+ up_write(&_hash_lock);
-+ kfree(old_name);
-+ return 0;
-+}
-+
-+/*-----------------------------------------------------------------
-+ * Implementation of the ioctl commands
-+ *---------------------------------------------------------------*/
-+/*
-+ * All the ioctl commands get dispatched to functions with this
-+ * prototype.
-+ */
-+typedef int (*ioctl_fn)(struct dm_ioctl *param, size_t param_size);
-+
-+static int remove_all(struct dm_ioctl *param, size_t param_size)
-+{
-+ dm_hash_remove_all();
-+ param->data_size = 0;
-+ return 0;
-+}
-+
-+/*
-+ * Round up the ptr to an 8-byte boundary.
-+ */
-+#define ALIGN_MASK 7
-+static inline void *align_ptr(void *ptr)
-+{
-+ return (void *) (((size_t) (ptr + ALIGN_MASK)) & ~ALIGN_MASK);
-+}
-+
-+/*
-+ * Retrieves the data payload buffer from an already allocated
-+ * struct dm_ioctl.
-+ */
-+static void *get_result_buffer(struct dm_ioctl *param, size_t param_size,
-+ size_t *len)
-+{
-+ param->data_start = align_ptr(param + 1) - (void *) param;
-+
-+ if (param->data_start < param_size)
-+ *len = param_size - param->data_start;
-+ else
-+ *len = 0;
-+
-+ return ((void *) param) + param->data_start;
-+}
-+
-+static int list_devices(struct dm_ioctl *param, size_t param_size)
-+{
-+ unsigned int i;
-+ struct hash_cell *hc;
-+ size_t len, needed = 0;
-+ struct gendisk *disk;
-+ struct dm_name_list *nl, *old_nl = NULL;
-+
-+ down_write(&_hash_lock);
-+
-+ /*
-+ * Loop through all the devices working out how much
-+ * space we need.
-+ */
-+ for (i = 0; i < NUM_BUCKETS; i++) {
-+ list_for_each_entry (hc, _name_buckets + i, name_list) {
-+ needed += sizeof(struct dm_name_list);
-+ needed += strlen(hc->name);
-+ needed += ALIGN_MASK;
-+ }
-+ }
-+
-+ /*
-+ * Grab our output buffer.
-+ */
-+ nl = get_result_buffer(param, param_size, &len);
-+ if (len < needed) {
-+ param->flags |= DM_BUFFER_FULL_FLAG;
-+ goto out;
-+ }
-+ param->data_size = param->data_start + needed;
-+
-+ nl->dev = 0; /* Flags no data */
-+
-+ /*
-+ * Now loop through filling out the names.
-+ */
-+ for (i = 0; i < NUM_BUCKETS; i++) {
-+ list_for_each_entry (hc, _name_buckets + i, name_list) {
-+ if (old_nl)
-+ old_nl->next = (uint32_t) ((void *) nl -
-+ (void *) old_nl);
-+ disk = dm_disk(hc->md);
-+ nl->dev = MKDEV(disk->major, disk->first_minor);
-+ nl->next = 0;
-+ strcpy(nl->name, hc->name);
-+
-+ old_nl = nl;
-+ nl = align_ptr(((void *) ++nl) + strlen(hc->name) + 1);
-+ }
-+ }
-+
-+ out:
-+ up_write(&_hash_lock);
-+ return 0;
-+}
-+
-+static int check_name(const char *name)
-+{
-+ if (strchr(name, '/')) {
-+ DMWARN("invalid device name");
-+ return -EINVAL;
-+ }
-+
-+ return 0;
-+}
-+
-+/*
-+ * Fills in a dm_ioctl structure, ready for sending back to
-+ * userland.
-+ */
-+static int __dev_status(struct mapped_device *md, struct dm_ioctl *param)
-+{
-+ struct gendisk *disk = dm_disk(md);
-+ struct dm_table *table;
-+ struct block_device *bdev;
-+
-+ param->flags &= ~(DM_SUSPEND_FLAG | DM_READONLY_FLAG |
-+ DM_ACTIVE_PRESENT_FLAG);
-+
-+ if (dm_suspended(md))
-+ param->flags |= DM_SUSPEND_FLAG;
-+
-+ bdev = bdget_disk(disk, 0);
-+ if (!bdev)
-+ return -ENXIO;
-+
-+ param->dev = MKDEV(disk->major, disk->first_minor);
-+
-+ /*
-+ * Yes, this will be out of date by the time it gets back
-+ * to userland, but it is still very useful ofr
-+ * debugging.
-+ */
-+ param->open_count = bdev->bd_openers;
-+ bdput(bdev);
-+
-+ if (disk->policy)
-+ param->flags |= DM_READONLY_FLAG;
-+
-+ param->event_nr = dm_get_event_nr(md);
-+
-+ table = dm_get_table(md);
-+ if (table) {
-+ param->flags |= DM_ACTIVE_PRESENT_FLAG;
-+ param->target_count = dm_table_get_num_targets(table);
-+ dm_table_put(table);
-+ } else
-+ param->target_count = 0;
-+
-+ return 0;
-+}
-+
-+static int dev_create(struct dm_ioctl *param, size_t param_size)
-+{
-+ int r;
-+ struct mapped_device *md;
-+
-+ r = check_name(param->name);
-+ if (r)
-+ return r;
-+
-+ if (param->flags & DM_PERSISTENT_DEV_FLAG)
-+ r = dm_create_with_minor(minor(to_kdev_t(param->dev)), &md);
-+ else
-+ r = dm_create(&md);
-+
-+ if (r)
-+ return r;
-+
-+ r = dm_hash_insert(param->name, *param->uuid ? param->uuid : NULL, md);
-+ if (r) {
-+ dm_put(md);
-+ return r;
-+ }
-+
-+ param->flags &= ~DM_INACTIVE_PRESENT_FLAG;
-+
-+ r = __dev_status(md, param);
-+ dm_put(md);
-+
-+ return r;
-+}
-+
-+/*
-+ * Always use UUID for lookups if it's present, otherwise use name.
-+ */
-+static inline struct hash_cell *__find_device_hash_cell(struct dm_ioctl *param)
-+{
-+ return *param->uuid ?
-+ __get_uuid_cell(param->uuid) : __get_name_cell(param->name);
-+}
-+
-+static inline struct mapped_device *find_device(struct dm_ioctl *param)
-+{
-+ struct hash_cell *hc;
-+ struct mapped_device *md = NULL;
-+
-+ down_read(&_hash_lock);
-+ hc = __find_device_hash_cell(param);
-+ if (hc) {
-+ md = hc->md;
-+
-+ /*
-+ * Sneakily write in both the name and the uuid
-+ * while we have the cell.
-+ */
-+ strncpy(param->name, hc->name, sizeof(param->name));
-+ if (hc->uuid)
-+ strncpy(param->uuid, hc->uuid, sizeof(param->uuid)-1);
-+ else
-+ param->uuid[0] = '\0';
-+
-+ if (hc->new_map)
-+ param->flags |= DM_INACTIVE_PRESENT_FLAG;
-+ else
-+ param->flags &= ~DM_INACTIVE_PRESENT_FLAG;
-+
-+ dm_get(md);
-+ }
-+ up_read(&_hash_lock);
-+
-+ return md;
-+}
-+
-+static int dev_remove(struct dm_ioctl *param, size_t param_size)
-+{
-+ struct hash_cell *hc;
-+
-+ down_write(&_hash_lock);
-+ hc = __find_device_hash_cell(param);
-+
-+ if (!hc) {
-+ DMWARN("device doesn't appear to be in the dev hash table.");
-+ up_write(&_hash_lock);
-+ return -ENXIO;
-+ }
-+
-+ __hash_remove(hc);
-+ up_write(&_hash_lock);
-+ param->data_size = 0;
-+ return 0;
-+}
-+
-+/*
-+ * Check a string doesn't overrun the chunk of
-+ * memory we copied from userland.
-+ */
-+static int invalid_str(char *str, void *end)
-+{
-+ while ((void *) str < end)
-+ if (!*str++)
-+ return 0;
-+
-+ return -EINVAL;
-+}
-+
-+static int dev_rename(struct dm_ioctl *param, size_t param_size)
-+{
-+ int r;
-+ char *new_name = (char *) param + param->data_start;
-+
-+ if (new_name < (char *) (param + 1) ||
-+ invalid_str(new_name, (void *) param + param_size)) {
-+ DMWARN("Invalid new logical volume name supplied.");
-+ return -EINVAL;
-+ }
-+
-+ r = check_name(new_name);
-+ if (r)
-+ return r;
-+
-+ param->data_size = 0;
-+ return dm_hash_rename(param->name, new_name);
-+}
-+
-+static int suspend(struct dm_ioctl *param)
-+{
-+ int r = 0;
-+ struct mapped_device *md;
-+
-+ md = find_device(param);
-+ if (!md)
-+ return -ENXIO;
-+
-+ if (!dm_suspended(md))
-+ r = dm_suspend(md);
-+
-+ if (!r)
-+ r = __dev_status(md, param);
-+
-+ dm_put(md);
-+ return r;
-+}
-+
-+static int resume(struct dm_ioctl *param)
-+{
-+ int r = 0;
-+ struct hash_cell *hc;
-+ struct mapped_device *md;
-+ struct dm_table *new_map;
-+
-+ down_write(&_hash_lock);
-+
-+ hc = __find_device_hash_cell(param);
-+ if (!hc) {
-+ DMWARN("device doesn't appear to be in the dev hash table.");
-+ up_write(&_hash_lock);
-+ return -ENXIO;
-+ }
-+
-+ md = hc->md;
-+ dm_get(md);
-+
-+ new_map = hc->new_map;
-+ hc->new_map = NULL;
-+ param->flags &= ~DM_INACTIVE_PRESENT_FLAG;
-+
-+ up_write(&_hash_lock);
-+
-+ /* Do we need to load a new map ? */
-+ if (new_map) {
-+ /* Suspend if it isn't already suspended */
-+ if (!dm_suspended(md))
-+ dm_suspend(md);
-+
-+ r = dm_swap_table(md, new_map);
-+ if (r) {
-+ dm_put(md);
-+ dm_table_put(new_map);
-+ return r;
-+ }
-+
-+ if (dm_table_get_mode(new_map) & FMODE_WRITE)
-+ set_disk_ro(dm_disk(md), 0);
-+ else
-+ set_disk_ro(dm_disk(md), 1);
-+
-+ dm_table_put(new_map);
-+ }
-+
-+ if (dm_suspended(md))
-+ r = dm_resume(md);
-+
-+ if (!r)
-+ r = __dev_status(md, param);
-+
-+ dm_put(md);
-+ return r;
-+}
-+
-+/*
-+ * Set or unset the suspension state of a device.
-+ * If the device already is in the requested state we just return its status.
-+ */
-+static int dev_suspend(struct dm_ioctl *param, size_t param_size)
-+{
-+ if (param->flags & DM_SUSPEND_FLAG)
-+ return suspend(param);
-+
-+ return resume(param);
-+}
-+
-+/*
-+ * Copies device info back to user space, used by
-+ * the create and info ioctls.
-+ */
-+static int dev_status(struct dm_ioctl *param, size_t param_size)
-+{
-+ int r;
-+ struct mapped_device *md;
-+
-+ md = find_device(param);
-+ if (!md)
-+ return -ENXIO;
-+
-+ r = __dev_status(md, param);
-+ dm_put(md);
-+ return r;
-+}
-+
-+/*
-+ * Wait for a device to report an event
-+ */
-+static int dev_wait(struct dm_ioctl *param, size_t param_size)
-+{
-+ int r;
-+ struct mapped_device *md;
-+ DECLARE_WAITQUEUE(wq, current);
-+
-+ md = find_device(param);
-+ if (!md)
-+ return -ENXIO;
-+
-+ /*
-+ * Wait for a notification event
-+ */
-+ set_current_state(TASK_INTERRUPTIBLE);
-+ if (!dm_add_wait_queue(md, &wq, param->event_nr)) {
-+ schedule();
-+ dm_remove_wait_queue(md, &wq);
-+ }
-+ set_current_state(TASK_RUNNING);
-+
-+ /*
-+ * The userland program is going to want to know what
-+ * changed to trigger the event, so we may as well tell
-+ * him and save an ioctl.
-+ */
-+ r = __dev_status(md, param);
-+
-+ dm_put(md);
-+ return r;
-+}
-+
-+static inline int get_mode(struct dm_ioctl *param)
-+{
-+ int mode = FMODE_READ | FMODE_WRITE;
-+
-+ if (param->flags & DM_READONLY_FLAG)
-+ mode = FMODE_READ;
-+
-+ return mode;
-+}
-+
-+static int next_target(struct dm_target_spec *last, uint32_t next, void *end,
-+ struct dm_target_spec **spec, char **target_params)
-+{
-+ *spec = (struct dm_target_spec *) ((unsigned char *) last + next);
-+ *target_params = (char *) (*spec + 1);
-+
-+ if (*spec < (last + 1))
-+ return -EINVAL;
-+
-+ return invalid_str(*target_params, end);
-+}
-+
-+static int populate_table(struct dm_table *table,
-+ struct dm_ioctl *param, size_t param_size)
-+{
-+ int r;
-+ unsigned int i = 0;
-+ struct dm_target_spec *spec = (struct dm_target_spec *) param;
-+ uint32_t next = param->data_start;
-+ void *end = (void *) param + param_size;
-+ char *target_params;
-+
-+ if (!param->target_count) {
-+ DMWARN("populate_table: no targets specified");
-+ return -EINVAL;
-+ }
-+
-+ for (i = 0; i < param->target_count; i++) {
-+
-+ r = next_target(spec, next, end, &spec, &target_params);
-+ if (r) {
-+ DMWARN("unable to find target");
-+ return r;
-+ }
-+
-+ r = dm_table_add_target(table, spec->target_type,
-+ (sector_t) spec->sector_start,
-+ (sector_t) spec->length,
-+ target_params);
-+ if (r) {
-+ DMWARN("error adding target to table");
-+ return r;
-+ }
-+
-+ next = spec->next;
-+ }
-+
-+ return dm_table_complete(table);
-+}
-+
-+static int table_load(struct dm_ioctl *param, size_t param_size)
-+{
-+ int r;
-+ struct hash_cell *hc;
-+ struct dm_table *t;
-+
-+ r = dm_table_create(&t, get_mode(param));
-+ if (r)
-+ return r;
-+
-+ r = populate_table(t, param, param_size);
-+ if (r) {
-+ dm_table_put(t);
-+ return r;
-+ }
-+
-+ down_write(&_hash_lock);
-+ hc = __find_device_hash_cell(param);
-+ if (!hc) {
-+ DMWARN("device doesn't appear to be in the dev hash table.");
-+ up_write(&_hash_lock);
-+ return -ENXIO;
-+ }
-+
-+ hc->new_map = t;
-+ param->flags |= DM_INACTIVE_PRESENT_FLAG;
-+
-+ r = __dev_status(hc->md, param);
-+ up_write(&_hash_lock);
-+ return r;
-+}
-+
-+static int table_clear(struct dm_ioctl *param, size_t param_size)
-+{
-+ int r;
-+ struct hash_cell *hc;
-+
-+ down_write(&_hash_lock);
-+
-+ hc = __find_device_hash_cell(param);
-+ if (!hc) {
-+ DMWARN("device doesn't appear to be in the dev hash table.");
-+ up_write(&_hash_lock);
-+ return -ENXIO;
-+ }
-+
-+ if (hc->new_map) {
-+ dm_table_put(hc->new_map);
-+ hc->new_map = NULL;
-+ }
-+
-+ param->flags &= ~DM_INACTIVE_PRESENT_FLAG;
-+
-+ r = __dev_status(hc->md, param);
-+ up_write(&_hash_lock);
-+ return r;
-+}
-+
-+/*
-+ * Retrieves a list of devices used by a particular dm device.
-+ */
-+static void retrieve_deps(struct dm_table *table,
-+ struct dm_ioctl *param, size_t param_size)
-+{
-+ unsigned int count = 0;
-+ struct list_head *tmp;
-+ size_t len, needed;
-+ struct dm_target_deps *deps;
-+
-+ deps = get_result_buffer(param, param_size, &len);
-+
-+ /*
-+ * Count the devices.
-+ */
-+ list_for_each(tmp, dm_table_get_devices(table))
-+ count++;
-+
-+ /*
-+ * Check we have enough space.
-+ */
-+ needed = sizeof(*deps) + (sizeof(*deps->dev) * count);
-+ if (len < needed) {
-+ param->flags |= DM_BUFFER_FULL_FLAG;
-+ return;
-+ }
-+
-+ /*
-+ * Fill in the devices.
-+ */
-+ deps->count = count;
-+ count = 0;
-+ list_for_each(tmp, dm_table_get_devices(table)) {
-+ struct dm_dev *dd = list_entry(tmp, struct dm_dev, list);
-+ deps->dev[count++] = dd->bdev->bd_dev;
-+ }
-+
-+ param->data_size = param->data_start + needed;
-+}
-+
-+static int table_deps(struct dm_ioctl *param, size_t param_size)
-+{
-+ int r = 0;
-+ struct mapped_device *md;
-+ struct dm_table *table;
-+
-+ md = find_device(param);
-+ if (!md)
-+ return -ENXIO;
-+
-+ r = __dev_status(md, param);
-+ if (r)
-+ goto out;
-+
-+ table = dm_get_table(md);
-+ if (table) {
-+ retrieve_deps(table, param, param_size);
-+ dm_table_put(table);
-+ }
-+
-+ out:
-+ dm_put(md);
-+ return r;
-+}
-+
-+/*
-+ * Build up the status struct for each target
-+ */
-+static void retrieve_status(struct dm_table *table,
-+ struct dm_ioctl *param, size_t param_size)
-+{
-+ unsigned int i, num_targets;
-+ struct dm_target_spec *spec;
-+ char *outbuf, *outptr;
-+ status_type_t type;
-+ size_t remaining, len, used = 0;
-+
-+ outptr = outbuf = get_result_buffer(param, param_size, &len);
-+
-+ if (param->flags & DM_STATUS_TABLE_FLAG)
-+ type = STATUSTYPE_TABLE;
-+ else
-+ type = STATUSTYPE_INFO;
-+
-+ /* Get all the target info */
-+ num_targets = dm_table_get_num_targets(table);
-+ for (i = 0; i < num_targets; i++) {
-+ struct dm_target *ti = dm_table_get_target(table, i);
-+
-+ remaining = len - (outptr - outbuf);
-+ if (remaining < sizeof(struct dm_target_spec)) {
-+ param->flags |= DM_BUFFER_FULL_FLAG;
-+ break;
-+ }
-+
-+ spec = (struct dm_target_spec *) outptr;
-+
-+ spec->status = 0;
-+ spec->sector_start = ti->begin;
-+ spec->length = ti->len;
-+ strncpy(spec->target_type, ti->type->name,
-+ sizeof(spec->target_type));
-+
-+ outptr += sizeof(struct dm_target_spec);
-+ remaining = len - (outptr - outbuf);
-+
-+ /* Get the status/table string from the target driver */
-+ if (ti->type->status) {
-+ if (ti->type->status(ti, type, outptr, remaining)) {
-+ param->flags |= DM_BUFFER_FULL_FLAG;
-+ break;
-+ }
-+ } else
-+ outptr[0] = '\0';
-+
-+ outptr += strlen(outptr) + 1;
-+ used = param->data_start + (outptr - outbuf);
-+
-+ align_ptr(outptr);
-+ spec->next = outptr - outbuf;
-+ }
-+
-+ if (used)
-+ param->data_size = used;
-+
-+ param->target_count = num_targets;
-+}
-+
-+/*
-+ * Return the status of a device as a text string for each
-+ * target.
-+ */
-+static int table_status(struct dm_ioctl *param, size_t param_size)
-+{
-+ int r;
-+ struct mapped_device *md;
-+ struct dm_table *table;
-+
-+ md = find_device(param);
-+ if (!md)
-+ return -ENXIO;
-+
-+ r = __dev_status(md, param);
-+ if (r)
-+ goto out;
-+
-+ table = dm_get_table(md);
-+ if (table) {
-+ retrieve_status(table, param, param_size);
-+ dm_table_put(table);
-+ }
-+
-+ out:
-+ dm_put(md);
-+ return r;
-+}
-+
-+/*-----------------------------------------------------------------
-+ * Implementation of open/close/ioctl on the special char
-+ * device.
-+ *---------------------------------------------------------------*/
-+static ioctl_fn lookup_ioctl(unsigned int cmd)
-+{
-+ static struct {
-+ int cmd;
-+ ioctl_fn fn;
-+ } _ioctls[] = {
-+ {DM_VERSION_CMD, NULL}, /* version is dealt with elsewhere */
-+ {DM_REMOVE_ALL_CMD, remove_all},
-+ {DM_LIST_DEVICES_CMD, list_devices},
-+
-+ {DM_DEV_CREATE_CMD, dev_create},
-+ {DM_DEV_REMOVE_CMD, dev_remove},
-+ {DM_DEV_RENAME_CMD, dev_rename},
-+ {DM_DEV_SUSPEND_CMD, dev_suspend},
-+ {DM_DEV_STATUS_CMD, dev_status},
-+ {DM_DEV_WAIT_CMD, dev_wait},
-+
-+ {DM_TABLE_LOAD_CMD, table_load},
-+ {DM_TABLE_CLEAR_CMD, table_clear},
-+ {DM_TABLE_DEPS_CMD, table_deps},
-+ {DM_TABLE_STATUS_CMD, table_status}
-+ };
-+
-+ return (cmd >= ARRAY_SIZE(_ioctls)) ? NULL : _ioctls[cmd].fn;
-+}
-+
-+/*
-+ * As well as checking the version compatibility this always
-+ * copies the kernel interface version out.
-+ */
-+static int check_version(unsigned int cmd, struct dm_ioctl *user)
-+{
-+ uint32_t version[3];
-+ int r = 0;
-+
-+ if (copy_from_user(version, user->version, sizeof(version)))
-+ return -EFAULT;
-+
-+ if ((DM_VERSION_MAJOR != version[0]) ||
-+ (DM_VERSION_MINOR < version[1])) {
-+ DMWARN("ioctl interface mismatch: "
-+ "kernel(%u.%u.%u), user(%u.%u.%u), cmd(%d)",
-+ DM_VERSION_MAJOR, DM_VERSION_MINOR,
-+ DM_VERSION_PATCHLEVEL,
-+ version[0], version[1], version[2], cmd);
-+ r = -EINVAL;
-+ }
-+
-+ /*
-+ * Fill in the kernel version.
-+ */
-+ version[0] = DM_VERSION_MAJOR;
-+ version[1] = DM_VERSION_MINOR;
-+ version[2] = DM_VERSION_PATCHLEVEL;
-+ if (copy_to_user(user->version, version, sizeof(version)))
-+ return -EFAULT;
-+
-+ return r;
-+}
-+
-+static void free_params(struct dm_ioctl *param)
-+{
-+ vfree(param);
-+}
-+
-+static int copy_params(struct dm_ioctl *user, struct dm_ioctl **param)
-+{
-+ struct dm_ioctl tmp, *dmi;
-+
-+ if (copy_from_user(&tmp, user, sizeof(tmp)))
-+ return -EFAULT;
-+
-+ if (tmp.data_size < sizeof(tmp))
-+ return -EINVAL;
-+
-+ dmi = (struct dm_ioctl *) vmalloc(tmp.data_size);
-+ if (!dmi)
-+ return -ENOMEM;
-+
-+ if (copy_from_user(dmi, user, tmp.data_size)) {
-+ vfree(dmi);
-+ return -EFAULT;
-+ }
-+
-+ *param = dmi;
-+ return 0;
-+}
-+
-+static int validate_params(uint cmd, struct dm_ioctl *param)
-+{
-+ /* Always clear this flag */
-+ param->flags &= ~DM_BUFFER_FULL_FLAG;
-+
-+ /* Ignores parameters */
-+ if (cmd == DM_REMOVE_ALL_CMD || cmd == DM_LIST_DEVICES_CMD)
-+ return 0;
-+
-+ /* Unless creating, either name or uuid but not both */
-+ if (cmd != DM_DEV_CREATE_CMD) {
-+ if ((!*param->uuid && !*param->name) ||
-+ (*param->uuid && *param->name)) {
-+ DMWARN("one of name or uuid must be supplied, cmd(%u)",
-+ cmd);
-+ return -EINVAL;
-+ }
-+ }
-+
-+ /* Ensure strings are terminated */
-+ param->name[DM_NAME_LEN - 1] = '\0';
-+ param->uuid[DM_UUID_LEN - 1] = '\0';
-+
-+ return 0;
-+}
-+
-+static int ctl_ioctl(struct inode *inode, struct file *file,
-+ uint command, ulong u)
-+{
-+ int r = 0;
-+ unsigned int cmd;
-+ struct dm_ioctl *param;
-+ struct dm_ioctl *user = (struct dm_ioctl *) u;
-+ ioctl_fn fn = NULL;
-+ size_t param_size;
-+
-+ /* only root can play with this */
-+ if (!capable(CAP_SYS_ADMIN))
-+ return -EACCES;
-+
-+ if (_IOC_TYPE(command) != DM_IOCTL)
-+ return -ENOTTY;
-+
-+ cmd = _IOC_NR(command);
-+
-+ /*
-+ * Check the interface version passed in. This also
-+ * writes out the kernel's interface version.
-+ */
-+ r = check_version(cmd, user);
-+ if (r)
-+ return r;
-+
-+ /*
-+ * Nothing more to do for the version command.
-+ */
-+ if (cmd == DM_VERSION_CMD)
-+ return 0;
-+
-+ fn = lookup_ioctl(cmd);
-+ if (!fn) {
-+ DMWARN("dm_ctl_ioctl: unknown command 0x%x", command);
-+ return -ENOTTY;
-+ }
-+
-+ /*
-+ * Trying to avoid low memory issues when a device is
-+ * suspended.
-+ */
-+ current->flags |= PF_MEMALLOC;
-+
-+ /*
-+ * Copy the parameters into kernel space.
-+ */
-+ r = copy_params(user, ¶m);
-+ if (r) {
-+ current->flags &= ~PF_MEMALLOC;
-+ return r;
-+ }
-+
-+ /*
-+ * FIXME: eventually we will remove the PF_MEMALLOC flag
-+ * here. However the tools still do nasty things like
-+ * 'load' while a device is suspended.
-+ */
-+
-+ r = validate_params(cmd, param);
-+ if (r)
-+ goto out;
-+
-+ param_size = param->data_size;
-+ param->data_size = sizeof(*param);
-+ r = fn(param, param_size);
-+
-+ /*
-+ * Copy the results back to userland.
-+ */
-+ if (!r && copy_to_user(user, param, param->data_size))
-+ r = -EFAULT;
-+
-+ out:
-+ free_params(param);
-+ current->flags &= ~PF_MEMALLOC;
-+ return r;
-+}
-+
-+static struct file_operations _ctl_fops = {
-+ .ioctl = ctl_ioctl,
-+ .owner = THIS_MODULE,
-+};
-+
-+static struct miscdevice _dm_misc = {
-+ .minor = MISC_DYNAMIC_MINOR,
-+ .name = DM_NAME,
-+ .devfs_name = "mapper/control",
-+ .fops = &_ctl_fops
-+};
-+
-+/*
-+ * Create misc character device and link to DM_DIR/control.
-+ */
-+int __init dm_interface_init(void)
-+{
-+ int r;
-+
-+ r = dm_hash_init();
-+ if (r)
-+ return r;
-+
-+ r = misc_register(&_dm_misc);
-+ if (r) {
-+ DMERR("misc_register failed for control device");
-+ dm_hash_exit();
-+ return r;
-+ }
-+
-+ DMINFO("%d.%d.%d%s initialised: %s", DM_VERSION_MAJOR,
-+ DM_VERSION_MINOR, DM_VERSION_PATCHLEVEL, DM_VERSION_EXTRA,
-+ DM_DRIVER_EMAIL);
-+ return 0;
-+}
-+
-+void dm_interface_exit(void)
-+{
-+ if (misc_deregister(&_dm_misc) < 0)
-+ DMERR("misc_deregister failed for control device");
-+
-+ dm_hash_exit();
-+}
---- linux-2.6.0-test1/drivers/md/dm-table.c 2003-06-14 12:18:35.000000000 -0700
-+++ 25/drivers/md/dm-table.c 2003-07-19 17:03:49.000000000 -0700
-@@ -48,11 +48,9 @@ struct dm_table {
- */
- struct io_restrictions limits;
-
-- /*
-- * A waitqueue for processes waiting for something
-- * interesting to happen to this table.
-- */
-- wait_queue_head_t eventq;
-+ /* events get handed up using this callback */
-+ void (*event_fn)(void *);
-+ void *event_context;
- };
-
- /*
-@@ -222,7 +220,6 @@ int dm_table_create(struct dm_table **re
- return -ENOMEM;
- }
-
-- init_waitqueue_head(&t->eventq);
- t->mode = mode;
- *result = t;
- return 0;
-@@ -243,9 +240,6 @@ void table_destroy(struct dm_table *t)
- {
- unsigned int i;
-
-- /* destroying the table counts as an event */
-- dm_table_event(t);
--
- /* free the indexes (see dm_table_complete) */
- if (t->depth >= 2)
- vfree(t->index[t->depth - 2]);
-@@ -694,9 +688,22 @@ int dm_table_complete(struct dm_table *t
- return r;
- }
-
-+static spinlock_t _event_lock = SPIN_LOCK_UNLOCKED;
-+void dm_table_event_callback(struct dm_table *t,
-+ void (*fn)(void *), void *context)
-+{
-+ spin_lock_irq(&_event_lock);
-+ t->event_fn = fn;
-+ t->event_context = context;
-+ spin_unlock_irq(&_event_lock);
-+}
-+
- void dm_table_event(struct dm_table *t)
- {
-- wake_up_interruptible(&t->eventq);
-+ spin_lock(&_event_lock);
-+ if (t->event_fn)
-+ t->event_fn(t->event_context);
-+ spin_unlock(&_event_lock);
- }
-
- sector_t dm_table_get_size(struct dm_table *t)
-@@ -761,11 +768,6 @@ int dm_table_get_mode(struct dm_table *t
- return t->mode;
- }
-
--void dm_table_add_wait_queue(struct dm_table *t, wait_queue_t *wq)
--{
-- add_wait_queue(&t->eventq, wq);
--}
--
- void dm_table_suspend_targets(struct dm_table *t)
- {
- int i;
---- linux-2.6.0-test1/drivers/md/Kconfig 2003-06-14 12:17:58.000000000 -0700
-+++ 25/drivers/md/Kconfig 2003-07-19 17:03:49.000000000 -0700
-@@ -145,5 +145,12 @@ config BLK_DEV_DM
-
- If unsure, say N.
-
-+config DM_IOCTL_V4
-+ bool "ioctl interface version 4"
-+ depends on BLK_DEV_DM
-+ ---help---
-+ Recent tools use a new version of the ioctl interface, only
-+ select this option if you intend using such tools.
-+
- endmenu
-
---- linux-2.6.0-test1/drivers/md/linear.c 2003-06-14 12:18:08.000000000 -0700
-+++ 25/drivers/md/linear.c 2003-07-19 17:04:58.000000000 -0700
-@@ -114,6 +114,8 @@ static int linear_run (mddev_t *mddev)
- }
-
- disk->rdev = rdev;
-+ blk_queue_stack_limits(&mddev->queue,
-+ rdev->bdev->bd_disk->queue);
- disk->size = rdev->size;
- mddev->array_size += rdev->size;
-
---- linux-2.6.0-test1/drivers/md/md.c 2003-06-14 12:18:06.000000000 -0700
-+++ 25/drivers/md/md.c 2003-07-19 17:03:49.000000000 -0700
-@@ -52,8 +52,6 @@
- #define MD_DRIVER
- #define DEVICE_NR(device) (minor(device))
-
--#include <linux/blk.h>
--
- #define DEBUG 0
- #define dprintk(x...) ((void)(DEBUG && printk(x)))
-
---- linux-2.6.0-test1/drivers/md/multipath.c 2003-06-14 12:18:09.000000000 -0700
-+++ 25/drivers/md/multipath.c 2003-07-19 17:04:58.000000000 -0700
-@@ -271,6 +271,8 @@ static int multipath_add_disk(mddev_t *m
- for (path=0; path<mddev->raid_disks; path++)
- if ((p=conf->multipaths+path)->rdev == NULL) {
- p->rdev = rdev;
-+ blk_queue_stack_limits(&mddev->queue,
-+ rdev->bdev->bd_disk->queue);
- conf->working_disks++;
- rdev->raid_disk = path;
- rdev->in_sync = 1;
-@@ -408,6 +410,8 @@ static int multipath_run (mddev_t *mddev
-
- disk = conf->multipaths + disk_idx;
- disk->rdev = rdev;
-+ blk_queue_stack_limits(&mddev->queue,
-+ rdev->bdev->bd_disk->queue);
- if (!rdev->faulty)
- conf->working_disks++;
- }
---- linux-2.6.0-test1/drivers/md/raid0.c 2003-06-14 12:18:22.000000000 -0700
-+++ 25/drivers/md/raid0.c 2003-07-19 17:04:58.000000000 -0700
-@@ -113,6 +113,8 @@ static int create_strip_zones (mddev_t *
- goto abort;
- }
- zone->dev[j] = rdev1;
-+ blk_queue_stack_limits(&mddev->queue,
-+ rdev1->bdev->bd_disk->queue);
- if (!smallest || (rdev1->size <smallest->size))
- smallest = rdev1;
- cnt++;
-@@ -293,7 +295,6 @@ static int raid0_run (mddev_t *mddev)
- conf->hash_spacing++;
- }
-
-- blk_queue_max_sectors(&mddev->queue, mddev->chunk_size >> 9);
- blk_queue_merge_bvec(&mddev->queue, raid0_mergeable_bvec);
- return 0;
-
---- linux-2.6.0-test1/drivers/md/raid1.c 2003-06-14 12:18:22.000000000 -0700
-+++ 25/drivers/md/raid1.c 2003-07-19 17:04:58.000000000 -0700
-@@ -678,6 +678,8 @@ static int raid1_add_disk(mddev_t *mddev
- for (mirror=0; mirror < mddev->raid_disks; mirror++)
- if ( !(p=conf->mirrors+mirror)->rdev) {
- p->rdev = rdev;
-+ blk_queue_stack_limits(&mddev->queue,
-+ rdev->bdev->bd_disk->queue);
- p->head_position = 0;
- rdev->raid_disk = mirror;
- found = 1;
-@@ -1076,6 +1078,8 @@ static int run(mddev_t *mddev)
- disk = conf->mirrors + disk_idx;
-
- disk->rdev = rdev;
-+ blk_queue_stack_limits(&mddev->queue,
-+ rdev->bdev->bd_disk->queue);
- disk->head_position = 0;
- if (!rdev->faulty && rdev->in_sync)
- conf->working_disks++;
---- linux-2.6.0-test1/drivers/media/common/Makefile 2003-06-14 12:18:30.000000000 -0700
-+++ 25/drivers/media/common/Makefile 2003-07-19 17:03:49.000000000 -0700
-@@ -1,5 +1,5 @@
- saa7146-objs := saa7146_i2c.o saa7146_core.o
--saa7146_vv-objs := saa7146_fops.o saa7146_video.o saa7146_hlp.o saa7146_vbi.o
-+saa7146_vv-objs := saa7146_vv_ksyms.o saa7146_fops.o saa7146_video.o saa7146_hlp.o saa7146_vbi.o
-
- obj-$(CONFIG_VIDEO_SAA7146) += saa7146.o saa7146_vv.o
-
---- linux-2.6.0-test1/drivers/media/common/saa7146_core.c 2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/common/saa7146_core.c 2003-07-19 17:03:49.000000000 -0700
-@@ -373,6 +373,9 @@ static int saa7146_init_one(struct pci_d
- dev->module = THIS_MODULE;
- init_waitqueue_head(&dev->i2c_wq);
-
-+ /* set some default values */
-+ saa7146_write(dev, BCS_CTRL, 0x80400040);
-+
- if( 0 != ext->probe) {
- if( 0 != ext->probe(dev) ) {
- DEB_D(("ext->probe() failed for %p. skipping device.\n",dev));
-@@ -391,9 +394,6 @@ static int saa7146_init_one(struct pci_d
- list_add_tail(&dev->item,&saa7146_devices);
- saa7146_num++;
-
-- /* set some default values */
-- saa7146_write(dev, BCS_CTRL, 0x80400040);
--
- err = 0;
- goto out;
- attach_error:
---- linux-2.6.0-test1/drivers/media/common/saa7146_fops.c 2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/common/saa7146_fops.c 2003-07-19 17:03:49.000000000 -0700
-@@ -106,10 +106,21 @@ void saa7146_buffer_next(struct saa7146_
- // fixme: fix this for vflip != 0
-
- saa7146_write(dev, PROT_ADDR1, 0);
-+ saa7146_write(dev, MC2, (MASK_02|MASK_18));
-+
- /* write the address of the rps-program */
- saa7146_write(dev, RPS_ADDR0, dev->d_rps0.dma_handle);
- /* turn on rps */
- saa7146_write(dev, MC1, (MASK_12 | MASK_28));
-+
-+/*
-+ printk("vdma%d.base_even: 0x%08x\n", 1,saa7146_read(dev,BASE_EVEN1));
-+ printk("vdma%d.base_odd: 0x%08x\n", 1,saa7146_read(dev,BASE_ODD1));
-+ printk("vdma%d.prot_addr: 0x%08x\n", 1,saa7146_read(dev,PROT_ADDR1));
-+ printk("vdma%d.base_page: 0x%08x\n", 1,saa7146_read(dev,BASE_PAGE1));
-+ printk("vdma%d.pitch: 0x%08x\n", 1,saa7146_read(dev,PITCH1));
-+ printk("vdma%d.num_line_byte: 0x%08x\n", 1,saa7146_read(dev,NUM_LINE_BYTE1));
-+*/
- }
- del_timer(&q->timeout);
- }
-@@ -374,7 +385,7 @@ static struct video_device device_templa
- .minor = -1,
- };
-
--int saa7146_vv_init(struct saa7146_dev* dev)
-+int saa7146_vv_init(struct saa7146_dev* dev, struct saa7146_ext_vv *ext_vv)
- {
- struct saa7146_vv *vv = kmalloc (sizeof(struct saa7146_vv),GFP_KERNEL);
- if( NULL == vv ) {
-@@ -385,6 +396,11 @@ int saa7146_vv_init(struct saa7146_dev*
-
- DEB_EE(("dev:%p\n",dev));
-
-+ /* save per-device extension data (one extension can
-+ handle different devices that might need different
-+ configuration data) */
-+ dev->ext_vv_data = ext_vv;
-+
- vv->video_minor = -1;
- vv->vbi_minor = -1;
-
-@@ -475,13 +491,6 @@ static void __exit saa7146_vv_cleanup_mo
- module_init(saa7146_vv_init_module);
- module_exit(saa7146_vv_cleanup_module);
-
--EXPORT_SYMBOL_GPL(saa7146_set_hps_source_and_sync);
--EXPORT_SYMBOL_GPL(saa7146_register_device);
--EXPORT_SYMBOL_GPL(saa7146_unregister_device);
--
--EXPORT_SYMBOL_GPL(saa7146_vv_init);
--EXPORT_SYMBOL_GPL(saa7146_vv_release);
--
- MODULE_AUTHOR("Michael Hunold <michael@mihu.de>");
- MODULE_DESCRIPTION("video4linux driver for saa7146-based hardware");
- MODULE_LICENSE("GPL");
---- linux-2.6.0-test1/drivers/media/common/saa7146_hlp.c 2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/common/saa7146_hlp.c 2003-07-19 17:03:49.000000000 -0700
-@@ -242,7 +242,9 @@ static int calculate_v_scale_registers(s
- if( 2*out_y >= in_y) {
- lpi = 1;
- }
-- } else if (field == V4L2_FIELD_TOP || field == V4L2_FIELD_BOTTOM) {
-+ } else if (field == V4L2_FIELD_TOP
-+ || field == V4L2_FIELD_ALTERNATE
-+ || field == V4L2_FIELD_BOTTOM) {
- if( 4*out_y >= in_y ) {
- lpi = 1;
- }
-@@ -468,9 +470,7 @@ static void calculate_clipping_registers
- *clip_format &= 0xfffffff7;
- if (V4L2_FIELD_HAS_BOTH(field)) {
- *clip_format |= 0x00000008;
-- } else if (field == V4L2_FIELD_TOP) {
-- *clip_format |= 0x00000000;
-- } else if (field == V4L2_FIELD_BOTTOM) {
-+ } else {
- *clip_format |= 0x00000000;
- }
- }
-@@ -593,6 +593,10 @@ static void saa7146_set_position(struct
- }
-
- if (V4L2_FIELD_HAS_BOTH(field)) {
-+ } else if (field == V4L2_FIELD_ALTERNATE) {
-+ /* fixme */
-+ vdma1.base_odd = vdma1.prot_addr;
-+ vdma1.pitch /= 2;
- } else if (field == V4L2_FIELD_TOP) {
- vdma1.base_odd = vdma1.prot_addr;
- vdma1.pitch /= 2;
-@@ -706,7 +710,7 @@ void saa7146_write_out_dma(struct saa714
- /* calculate starting address */
- where = (which-1)*0x18;
-
-- if( 0 != (dev->ext->ext_vv_data->flags & SAA7146_EXT_SWAP_ODD_EVEN)) {
-+ if( 0 != (dev->ext_vv_data->flags & SAA7146_EXT_SWAP_ODD_EVEN)) {
- saa7146_write(dev, where, vdma->base_even);
- saa7146_write(dev, where+0x04, vdma->base_odd);
- } else {
-@@ -760,6 +764,16 @@ static int calculate_video_dma_grab_pack
- }
-
- if (V4L2_FIELD_HAS_BOTH(field)) {
-+ } else if (field == V4L2_FIELD_ALTERNATE) {
-+ /* fixme */
-+ if ( vv->last_field == V4L2_FIELD_TOP ) {
-+ vdma1.base_odd = vdma1.prot_addr;
-+ vdma1.pitch /= 2;
-+ } else if ( vv->last_field == V4L2_FIELD_BOTTOM ) {
-+ vdma1.base_odd = vdma1.base_even;
-+ vdma1.base_even = vdma1.prot_addr;
-+ vdma1.pitch /= 2;
-+ }
- } else if (field == V4L2_FIELD_TOP) {
- vdma1.base_odd = vdma1.prot_addr;
- vdma1.pitch /= 2;
-@@ -896,6 +910,14 @@ static int calculate_video_dma_grab_plan
- }
-
- if (V4L2_FIELD_HAS_BOTH(field)) {
-+ } else if (field == V4L2_FIELD_ALTERNATE) {
-+ /* fixme */
-+ vdma1.base_odd = vdma1.prot_addr;
-+ vdma1.pitch /= 2;
-+ vdma2.base_odd = vdma2.prot_addr;
-+ vdma2.pitch /= 2;
-+ vdma3.base_odd = vdma3.prot_addr;
-+ vdma3.pitch /= 2;
- } else if (field == V4L2_FIELD_TOP) {
- vdma1.base_odd = vdma1.prot_addr;
- vdma1.pitch /= 2;
-@@ -935,21 +957,22 @@ static int calculate_video_dma_grab_plan
- static void program_capture_engine(struct saa7146_dev *dev, int planar)
- {
- struct saa7146_vv *vv = dev->vv_data;
-+ int count = 0;
-
- unsigned long e_wait = vv->current_hps_sync == SAA7146_HPS_SYNC_PORT_A ? CMD_E_FID_A : CMD_E_FID_B;
- unsigned long o_wait = vv->current_hps_sync == SAA7146_HPS_SYNC_PORT_A ? CMD_O_FID_A : CMD_O_FID_B;
-
-- if( 0 != (dev->ext->ext_vv_data->flags & SAA7146_EXT_SWAP_ODD_EVEN)) {
-+ if( 0 != (dev->ext_vv_data->flags & SAA7146_EXT_SWAP_ODD_EVEN)) {
- unsigned long tmp = e_wait;
- e_wait = o_wait;
- o_wait = tmp;
- }
-
-- /* wait for o_fid_a/b / e_fid_a/b toggle only if bit 0 is not set*/
-- WRITE_RPS0(CMD_PAUSE | CMD_OAN | CMD_SIG0 | e_wait);
-+ /* wait for o_fid_a/b / e_fid_a/b toggle only if rps register 0 is not set*/
- WRITE_RPS0(CMD_PAUSE | CMD_OAN | CMD_SIG0 | o_wait);
-+ WRITE_RPS0(CMD_PAUSE | CMD_OAN | CMD_SIG0 | e_wait);
-
-- /* set bit 0 */
-+ /* set rps register 0 */
- WRITE_RPS0(CMD_WR_REG | (1 << 8) | (MC2/4));
- WRITE_RPS0(MASK_27 | MASK_11);
-
-@@ -970,8 +993,14 @@ static void program_capture_engine(struc
- }
-
- /* wait for o_fid_a/b / e_fid_a/b toggle */
-+ if ( vv->last_field == V4L2_FIELD_INTERLACED ) {
-+ WRITE_RPS0(CMD_PAUSE | o_wait);
- WRITE_RPS0(CMD_PAUSE | e_wait);
-+ } else if ( vv->last_field == V4L2_FIELD_TOP ) {
- WRITE_RPS0(CMD_PAUSE | o_wait);
-+ } else if ( vv->last_field == V4L2_FIELD_BOTTOM ) {
-+ WRITE_RPS0(CMD_PAUSE | e_wait);
-+ }
-
- /* turn off video-dma1 */
- WRITE_RPS0(CMD_WR_REG_MASK | (MC1/4));
-@@ -999,13 +1028,39 @@ static void program_capture_engine(struc
- void saa7146_set_capture(struct saa7146_dev *dev, struct saa7146_buf *buf, struct saa7146_buf *next)
- {
- struct saa7146_format *sfmt = format_by_fourcc(dev,buf->fmt->pixelformat);
-+ struct saa7146_vv *vv = dev->vv_data;
-+ u32 vdma1_prot_addr;
-
- DEB_CAP(("buf:%p, next:%p\n",buf,next));
-
-+/*
-+ printk("vdma%d.base_even: 0x%08x\n", 1,saa7146_read(dev,BASE_EVEN1));
-+ printk("vdma%d.base_odd: 0x%08x\n", 1,saa7146_read(dev,BASE_ODD1));
-+ printk("vdma%d.prot_addr: 0x%08x\n", 1,saa7146_read(dev,PROT_ADDR1));
-+ printk("vdma%d.base_page: 0x%08x\n", 1,saa7146_read(dev,BASE_PAGE1));
-+ printk("vdma%d.pitch: 0x%08x\n", 1,saa7146_read(dev,PITCH1));
-+ printk("vdma%d.num_line_byte: 0x%08x\n", 1,saa7146_read(dev,NUM_LINE_BYTE1));
-+ printk("vdma%d => vptr : 0x%08x\n", 1,saa7146_read(dev,PCI_VDP1));
-+*/
-+
-+ vdma1_prot_addr = saa7146_read(dev, PROT_ADDR1);
-+ if( 0 == vdma1_prot_addr ) {
-+ /* clear out beginning of streaming bit (rps register 0)*/
-+ DEB_CAP(("forcing sync to new frame\n"));
-+ saa7146_write(dev, MC2, MASK_27 );
-+ }
-+
- saa7146_set_window(dev, buf->fmt->width, buf->fmt->height, buf->fmt->field);
- saa7146_set_output_format(dev, sfmt->trans);
- saa7146_disable_clipping(dev);
-
-+ if ( vv->last_field == V4L2_FIELD_INTERLACED ) {
-+ } else if ( vv->last_field == V4L2_FIELD_TOP ) {
-+ vv->last_field = V4L2_FIELD_BOTTOM;
-+ } else if ( vv->last_field == V4L2_FIELD_BOTTOM ) {
-+ vv->last_field = V4L2_FIELD_TOP;
-+ }
-+
- if( 0 != IS_PLANAR(sfmt->trans)) {
- calculate_video_dma_grab_planar(dev, buf);
- program_capture_engine(dev,1);
---- linux-2.6.0-test1/drivers/media/common/saa7146_i2c.c 2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/common/saa7146_i2c.c 2003-07-19 17:03:49.000000000 -0700
-@@ -181,9 +181,10 @@ static int saa7146_i2c_reset(struct saa7
- /* this functions writes out the data-byte 'dword' to the i2c-device.
- it returns 0 if ok, -1 if the transfer failed, -2 if the transfer
- failed badly (e.g. address error) */
--static int saa7146_i2c_writeout(struct saa7146_dev *dev, u32* dword)
-+static int saa7146_i2c_writeout(struct saa7146_dev *dev, u32* dword, int short_delay)
- {
- u32 status = 0, mc2 = 0;
-+ int trial = 0;
- int timeout;
-
- /* write out i2c-command */
-@@ -224,10 +225,13 @@ static int saa7146_i2c_writeout(struct s
- /* wait until we get a transfer done or error */
- timeout = jiffies + HZ/100 + 1; /* 10ms */
- while(1) {
-+ /**
-+ * first read usually delivers bogus results...
-+ */
-+ saa7146_i2c_status(dev);
- status = saa7146_i2c_status(dev);
-- if( (0x3 == (status & 0x3)) || (0 == (status & 0x1)) ) {
-+ if ((status & 0x3) != 1)
- break;
-- }
- if (jiffies > timeout) {
- /* this is normal when probing the bus
- * (no answer from nonexisistant device...)
-@@ -235,6 +239,9 @@ static int saa7146_i2c_writeout(struct s
- DEB_I2C(("saa7146_i2c_writeout: timed out waiting for end of xfer\n"));
- return -EIO;
- }
-+ if ((++trial < 20) && short_delay)
-+ udelay(10);
-+ else
- my_wait(dev,1);
- }
- }
-@@ -277,6 +284,7 @@ int saa7146_i2c_transfer(struct saa7146_
- u32* buffer = dev->d_i2c.cpu_addr;
- int err = 0;
- int address_err = 0;
-+ int short_delay = 0;
-
- if (down_interruptible (&dev->i2c_lock))
- return -ERESTARTSYS;
-@@ -292,6 +300,8 @@ int saa7146_i2c_transfer(struct saa7146_
- goto out;
- }
-
-+ if (count > 3) short_delay = 1;
-+
- do {
- /* reset the i2c-device if necessary */
- err = saa7146_i2c_reset(dev);
-@@ -302,7 +312,7 @@ int saa7146_i2c_transfer(struct saa7146_
-
- /* write out the u32s one after another */
- for(i = 0; i < count; i++) {
-- err = saa7146_i2c_writeout(dev, &buffer[i] );
-+ err = saa7146_i2c_writeout(dev, &buffer[i], short_delay);
- if ( 0 != err) {
- /* this one is unsatisfying: some i2c slaves on some
- dvb cards don't acknowledge correctly, so the saa7146
-@@ -357,7 +367,7 @@ out:
- if( 0 == dev->revision ) {
- u32 zero = 0;
- saa7146_i2c_reset(dev);
-- if( 0 != saa7146_i2c_writeout(dev, &zero)) {
-+ if( 0 != saa7146_i2c_writeout(dev, &zero, short_delay)) {
- INFO(("revision 0 error. this should never happen.\n"));
- }
- }
-@@ -397,8 +407,13 @@ int saa7146_i2c_adapter_prepare(struct s
-
- if( NULL != i2c_adapter ) {
- memset(i2c_adapter,0,sizeof(struct i2c_adapter));
-+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
-+ strcpy(i2c_adapter->name, dev->name);
-+ i2c_adapter->data = dev;
-+#else
- strcpy(i2c_adapter->dev.name, dev->name);
- i2c_set_adapdata(i2c_adapter,dev);
-+#endif
- i2c_adapter->algo = &saa7146_algo;
- i2c_adapter->algo_data = NULL;
- i2c_adapter->id = I2C_ALGO_SAA7146;
---- linux-2.6.0-test1/drivers/media/common/saa7146_vbi.c 2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/common/saa7146_vbi.c 2003-07-19 17:03:49.000000000 -0700
-@@ -9,6 +9,7 @@ static int vbi_workaround(struct saa7146
- u32 *cpu;
- dma_addr_t dma_addr;
-
-+ int count = 0;
- int i;
-
- DECLARE_WAITQUEUE(wait, current);
-@@ -443,5 +444,3 @@ struct saa7146_use_ops saa7146_vbi_uops
- .irq_done = vbi_irq_done,
- .read = vbi_read,
- };
--
--EXPORT_SYMBOL_GPL(saa7146_vbi_uops);
---- linux-2.6.0-test1/drivers/media/common/saa7146_video.c 2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/common/saa7146_video.c 2003-07-19 17:03:49.000000000 -0700
-@@ -137,6 +137,7 @@ static int try_win(struct saa7146_dev *d
- switch (field) {
- case V4L2_FIELD_TOP:
- case V4L2_FIELD_BOTTOM:
-+ case V4L2_FIELD_ALTERNATE:
- maxh = maxh / 2;
- break;
- case V4L2_FIELD_INTERLACED:
-@@ -186,11 +187,18 @@ static int try_fmt(struct saa7146_fh *fh
- : V4L2_FIELD_BOTTOM;
- }
- switch (field) {
-+ case V4L2_FIELD_ALTERNATE: {
-+ vv->last_field = V4L2_FIELD_TOP;
-+ maxh = maxh / 2;
-+ break;
-+ }
- case V4L2_FIELD_TOP:
- case V4L2_FIELD_BOTTOM:
-+ vv->last_field = V4L2_FIELD_INTERLACED;
- maxh = maxh / 2;
- break;
- case V4L2_FIELD_INTERLACED:
-+ vv->last_field = V4L2_FIELD_INTERLACED;
- break;
- default: {
- DEB_D(("no known field mode '%d'.\n",field));
-@@ -220,7 +228,7 @@ static int try_fmt(struct saa7146_fh *fh
- }
- }
-
--static int start_preview(struct saa7146_fh *fh)
-+int saa7146_start_preview(struct saa7146_fh *fh)
- {
- struct saa7146_dev *dev = fh->dev;
- struct saa7146_vv *vv = dev->vv_data;
-@@ -266,12 +274,12 @@ static int start_preview(struct saa7146_
- return 0;
- }
-
--static int stop_preview(struct saa7146_fh *fh)
-+int saa7146_stop_preview(struct saa7146_fh *fh)
- {
- struct saa7146_dev *dev = fh->dev;
- struct saa7146_vv *vv = dev->vv_data;
-
-- DEB_EE(("saa7146.o: stop_preview()\n"));
-+ DEB_EE(("saa7146.o: saa7146_stop_preview()\n"));
-
- /* check if overlay is running */
- if( 0 == vv->ov_data ) {
-@@ -333,8 +341,8 @@ static int s_fmt(struct saa7146_fh *fh,
- if( vv->ov_data != NULL ) {
- if( fh == vv->ov_data->fh) {
- spin_lock_irqsave(&dev->slock,flags);
-- stop_preview(fh);
-- start_preview(fh);
-+ saa7146_stop_preview(fh);
-+ saa7146_start_preview(fh);
- spin_unlock_irqrestore(&dev->slock,flags);
- }
- }
-@@ -522,8 +530,8 @@ static int set_control(struct saa7146_fh
- if( 0 != vv->ov_data ) {
- if( fh == vv->ov_data->fh ) {
- spin_lock_irqsave(&dev->slock,flags);
-- stop_preview(fh);
-- start_preview(fh);
-+ saa7146_stop_preview(fh);
-+ saa7146_start_preview(fh);
- spin_unlock_irqrestore(&dev->slock,flags);
- }
- }
-@@ -561,7 +569,7 @@ static int saa7146_pgtable_build(struct
- m3 = ((size+(size/2)+PAGE_SIZE)/PAGE_SIZE)-1;
- o1 = size%PAGE_SIZE;
- o2 = (size+(size/4))%PAGE_SIZE;
-- printk("size:%d, m1:%d, m2:%d, m3:%d, o1:%d, o2:%d\n",size,m1,m2,m3,o1,o2);
-+ DEB_CAP(("size:%d, m1:%d, m2:%d, m3:%d, o1:%d, o2:%d\n",size,m1,m2,m3,o1,o2));
- break;
- }
- case 16: {
-@@ -571,7 +579,7 @@ static int saa7146_pgtable_build(struct
- m3 = ((2*size+PAGE_SIZE)/PAGE_SIZE)-1;
- o1 = size%PAGE_SIZE;
- o2 = (size+(size/2))%PAGE_SIZE;
-- printk("size:%d, m1:%d, m2:%d, m3:%d, o1:%d, o2:%d\n",size,m1,m2,m3,o1,o2);
-+ DEB_CAP(("size:%d, m1:%d, m2:%d, m3:%d, o1:%d, o2:%d\n",size,m1,m2,m3,o1,o2));
- break;
- }
- default: {
-@@ -674,7 +682,7 @@ static int video_begin(struct saa7146_fh
-
- spin_lock_irqsave(&dev->slock,flags);
-
-- /* clear out beginning of streaming bit */
-+ /* clear out beginning of streaming bit (rps register 0)*/
- saa7146_write(dev, MC2, MASK_27 );
-
- /* enable rps0 irqs */
-@@ -740,19 +748,19 @@ int saa7146_video_do_ioctl(struct inode
- struct videobuf_queue *q;
-
- /* check if extension handles the command */
-- for(ee = 0; dev->ext->ext_vv_data->ioctls[ee].flags != 0; ee++) {
-- if( cmd == dev->ext->ext_vv_data->ioctls[ee].cmd )
-+ for(ee = 0; dev->ext_vv_data->ioctls[ee].flags != 0; ee++) {
-+ if( cmd == dev->ext_vv_data->ioctls[ee].cmd )
- break;
- }
-
-- if( 0 != (dev->ext->ext_vv_data->ioctls[ee].flags & SAA7146_EXCLUSIVE) ) {
-+ if( 0 != (dev->ext_vv_data->ioctls[ee].flags & SAA7146_EXCLUSIVE) ) {
- DEB_D(("extension handles ioctl exclusive.\n"));
-- result = dev->ext->ext_vv_data->ioctl(dev, cmd, arg);
-+ result = dev->ext_vv_data->ioctl(fh, cmd, arg);
- return result;
- }
-- if( 0 != (dev->ext->ext_vv_data->ioctls[ee].flags & SAA7146_BEFORE) ) {
-+ if( 0 != (dev->ext_vv_data->ioctls[ee].flags & SAA7146_BEFORE) ) {
- DEB_D(("extension handles ioctl before.\n"));
-- result = dev->ext->ext_vv_data->ioctl(dev, cmd, arg);
-+ result = dev->ext_vv_data->ioctl(fh, cmd, arg);
- if( -EAGAIN != result ) {
- return result;
- }
-@@ -793,7 +801,7 @@ int saa7146_video_do_ioctl(struct inode
- V4L2_CAP_VIDEO_OVERLAY |
- V4L2_CAP_READWRITE |
- V4L2_CAP_STREAMING;
-- cap->capabilities |= dev->ext->ext_vv_data->capabilities;
-+ cap->capabilities |= dev->ext_vv_data->capabilities;
- return 0;
- }
- case VIDIOC_G_FBUF:
-@@ -942,9 +950,10 @@ int saa7146_video_do_ioctl(struct inode
- struct v4l2_standard *e = arg;
- if (e->index < 0 )
- return -EINVAL;
-- if( e->index < dev->ext->ext_vv_data->num_stds ) {
-+ if( e->index < dev->ext_vv_data->num_stds ) {
- DEB_EE(("VIDIOC_ENUMSTD: index:%d\n",e->index));
-- return v4l2_video_std_construct(e, dev->ext->ext_vv_data->stds[e->index].id, dev->ext->ext_vv_data->stds[e->index].name);
-+ v4l2_video_std_construct(e, dev->ext_vv_data->stds[e->index].id, dev->ext_vv_data->stds[e->index].name);
-+ return 0;
- }
- return -EINVAL;
- }
-@@ -968,22 +977,22 @@ int saa7146_video_do_ioctl(struct inode
-
- if( vv->ov_data != NULL ) {
- ov_fh = vv->ov_data->fh;
-- stop_preview(ov_fh);
-+ saa7146_stop_preview(ov_fh);
- restart_overlay = 1;
- }
-
-- for(i = 0; i < dev->ext->ext_vv_data->num_stds; i++)
-- if (*id & dev->ext->ext_vv_data->stds[i].id)
-+ for(i = 0; i < dev->ext_vv_data->num_stds; i++)
-+ if (*id & dev->ext_vv_data->stds[i].id)
- break;
-- if (i != dev->ext->ext_vv_data->num_stds) {
-- vv->standard = &dev->ext->ext_vv_data->stds[i];
-- if( NULL != dev->ext->ext_vv_data->std_callback )
-- dev->ext->ext_vv_data->std_callback(dev, vv->standard);
-+ if (i != dev->ext_vv_data->num_stds) {
-+ vv->standard = &dev->ext_vv_data->stds[i];
-+ if( NULL != dev->ext_vv_data->std_callback )
-+ dev->ext_vv_data->std_callback(dev, vv->standard);
- found = 1;
- }
-
- if( 0 != restart_overlay ) {
-- start_preview(ov_fh);
-+ saa7146_start_preview(ov_fh);
- }
- up(&dev->lock);
-
-@@ -1000,7 +1009,7 @@ int saa7146_video_do_ioctl(struct inode
- int on = *(int *)arg;
- int err = 0;
-
-- if( NULL == vv->ov_fmt ) {
-+ if( NULL == vv->ov_fmt && on != 0 ) {
- DEB_D(("VIDIOC_OVERLAY: no framebuffer informations. call S_FBUF first!\n"));
- return -EAGAIN;
- }
-@@ -1013,7 +1022,7 @@ int saa7146_video_do_ioctl(struct inode
- }
- }
- spin_lock_irqsave(&dev->slock,flags);
-- err = start_preview(fh);
-+ err = saa7146_start_preview(fh);
- spin_unlock_irqrestore(&dev->slock,flags);
- } else {
- if( vv->ov_data != NULL ) {
-@@ -1022,7 +1031,7 @@ int saa7146_video_do_ioctl(struct inode
- }
- }
- spin_lock_irqsave(&dev->slock,flags);
-- err = stop_preview(fh);
-+ err = saa7146_stop_preview(fh);
- spin_unlock_irqrestore(&dev->slock,flags);
- }
- return err;
-@@ -1036,12 +1045,18 @@ int saa7146_video_do_ioctl(struct inode
- return videobuf_querybuf(q,arg);
- }
- case VIDIOC_QBUF: {
-- DEB_D(("VIDIOC_QBUF \n"));
-- return videobuf_qbuf(file,q,arg);
-+ struct v4l2_buffer *b = arg;
-+ int ret = 0;
-+ ret = videobuf_qbuf(file,q,b);
-+ DEB_D(("VIDIOC_QBUF: ret:%d, index:%d\n",ret,b->index));
-+ return ret;
- }
- case VIDIOC_DQBUF: {
-- DEB_D(("VIDIOC_DQBUF \n"));
-- return videobuf_dqbuf(file,q,arg);
-+ struct v4l2_buffer *b = arg;
-+ int ret = 0;
-+ ret = videobuf_dqbuf(file,q,b);
-+ DEB_D(("VIDIOC_DQBUF: ret:%d, index:%d\n",ret,b->index));
-+ return ret;
- }
- case VIDIOC_STREAMON: {
- DEB_D(("VIDIOC_STREAMON \n"));
-@@ -1075,7 +1090,7 @@ int saa7146_video_do_ioctl(struct inode
-
- q = &fh->video_q;
- down(&q->lock);
-- err = videobuf_mmap_setup(file,q,gbuffers,gbufsize);
-+ err = videobuf_mmap_setup(file,q,gbuffers,gbufsize); // ,V4L2_MEMORY_MMAP);
- if (err < 0) {
- up(&q->lock);
- return err;
-@@ -1250,7 +1265,7 @@ static void video_init(struct saa7146_de
- vv->video_q.dev = dev;
-
- /* set some default values */
-- vv->standard = &dev->ext->ext_vv_data->stds[0];
-+ vv->standard = &dev->ext_vv_data->stds[0];
-
- /* FIXME: what's this? */
- vv->current_hps_source = SAA7146_HPS_SOURCE_PORT_A;
-@@ -1287,7 +1302,7 @@ static void video_close(struct saa7146_d
- if( 0 != vv->ov_data ) {
- if( fh == vv->ov_data->fh ) {
- spin_lock_irqsave(&dev->slock,flags);
-- stop_preview(fh);
-+ saa7146_stop_preview(fh);
- spin_unlock_irqrestore(&dev->slock,flags);
- }
- }
-@@ -1331,7 +1346,7 @@ static ssize_t video_read(struct file *f
-
- if( vv->ov_data != NULL ) {
- ov_fh = vv->ov_data->fh;
-- stop_preview(ov_fh);
-+ saa7146_stop_preview(ov_fh);
- restart_overlay = 1;
- }
-
-@@ -1343,7 +1358,7 @@ static ssize_t video_read(struct file *f
-
- /* restart overlay if it was active before */
- if( 0 != restart_overlay ) {
-- start_preview(ov_fh);
-+ saa7146_start_preview(ov_fh);
- }
-
- return ret;
-@@ -1358,5 +1373,3 @@ struct saa7146_use_ops saa7146_video_uop
- .capture_begin = video_begin,
- .capture_end = video_end,
- };
--
--EXPORT_SYMBOL_GPL(saa7146_video_uops);
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/media/common/saa7146_vv_ksyms.c 2003-07-19 17:03:49.000000000 -0700
-@@ -0,0 +1,15 @@
-+#include <linux/module.h>
-+#include <media/saa7146_vv.h>
-+
-+EXPORT_SYMBOL_GPL(saa7146_vbi_uops);
-+EXPORT_SYMBOL_GPL(saa7146_video_uops);
-+
-+EXPORT_SYMBOL_GPL(saa7146_start_preview);
-+EXPORT_SYMBOL_GPL(saa7146_stop_preview);
-+
-+EXPORT_SYMBOL_GPL(saa7146_set_hps_source_and_sync);
-+EXPORT_SYMBOL_GPL(saa7146_register_device);
-+EXPORT_SYMBOL_GPL(saa7146_unregister_device);
-+
-+EXPORT_SYMBOL_GPL(saa7146_vv_init);
-+EXPORT_SYMBOL_GPL(saa7146_vv_release);
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/media/dvb/b2c2/Kconfig 2003-07-19 17:03:49.000000000 -0700
-@@ -0,0 +1,8 @@
-+config DVB_B2C2_SKYSTAR
-+ tristate "Technisat Skystar2 PCI"
-+ depends on DVB_CORE
-+ help
-+ Support for the Skystar2 PCI DVB card by Technisat, which
-+ is equipped with the FlexCopII chipset by B2C2.
-+
-+ Say Y if you own such a device and want to use it.
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/media/dvb/b2c2/Makefile 2003-07-19 17:03:49.000000000 -0700
-@@ -0,0 +1,3 @@
-+obj-$(CONFIG_DVB_B2C2_SKYSTAR) += skystar2.o
-+
-+EXTRA_CFLAGS = -Idrivers/media/dvb/dvb-core/
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/media/dvb/b2c2/skystar2.c 2003-07-19 17:03:49.000000000 -0700
-@@ -0,0 +1,2506 @@
-+/*
-+ * skystar2.c - driver for the Technisat SkyStar2 PCI DVB card
-+ * based on the FlexCopII by B2C2,Inc.
-+ *
-+ * Copyright (C) 2003 V.C. , skystar@moldova.cc
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public License
-+ * as published by the Free Software Foundation; either version 2.1
-+ * of the License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser 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/delay.h>
-+#include <linux/pci.h>
-+
-+#include "dvb_i2c.h"
-+#include "dvb_frontend.h"
-+#include "dvb_functions.h"
-+
-+#include <linux/dvb/frontend.h>
-+#include <linux/dvb/dmx.h>
-+#include "dvb_demux.h"
-+#include "dmxdev.h"
-+#include "dvb_filter.h"
-+#include "dvbdev.h"
-+#include "demux.h"
-+#include "dvb_net.h"
-+
-+static int debug = 0;
-+#define dprintk(x...) do { if (debug) printk(x); } while (0)
-+
-+#define SizeOfBufDMA1 0x3AC00
-+#define SizeOfBufDMA2 0x758
-+
-+struct dmaq {
-+
-+ u32 bus_addr;
-+ u32 head;
-+ u32 tail;
-+ u32 buffer_size;
-+ u8 *buffer;
-+};
-+
-+struct packet_header {
-+
-+ u32 sync_byte;
-+ u32 transport_error_indicator;
-+ u32 payload_unit_start_indicator;
-+ u32 transport_priority;
-+ u32 pid;
-+ u32 transport_scrambling_control;
-+ u32 adaptation_field_control;
-+ u32 continuity_counter;
-+};
-+
-+struct adapter {
-+
-+ struct pci_dev *pdev;
-+
-+ u8 card_revision;
-+ u32 b2c2_revision;
-+ u32 PidFilterMax;
-+ u32 MacFilterMax;
-+ u32 irq;
-+ u32 io_mem;
-+ u32 io_port;
-+ u8 mac_addr[8];
-+ u32 dwSramType;
-+
-+ struct dvb_adapter *dvb_adapter;
-+ struct dvb_demux demux;
-+ struct dmxdev dmxdev;
-+ struct dmx_frontend hw_frontend;
-+ struct dmx_frontend mem_frontend;
-+ struct dvb_i2c_bus *i2c_bus;
-+ struct dvb_net dvbnet;
-+
-+ struct semaphore i2c_sem;
-+
-+ struct dmaq dmaq1;
-+ struct dmaq dmaq2;
-+
-+ u32 dma_ctrl;
-+ u32 dma_status;
-+
-+ u32 capturing;
-+
-+ spinlock_t lock;
-+
-+ u16 pids[0x27];
-+ u32 mac_filter;
-+};
-+
-+#define WriteRegDW(adapter,reg,value) writel(value, adapter->io_mem + reg)
-+#define ReadRegDW(adapter,reg) readl(adapter->io_mem + reg)
-+
-+static void WriteRegOp(struct adapter *adapter, u32 reg, u32 operation, u32 andvalue, u32 orvalue)
-+{
-+ u32 tmp;
-+
-+ tmp = ReadRegDW(adapter, reg);
-+
-+ if (operation == 1)
-+ tmp = tmp | orvalue;
-+ if (operation == 2)
-+ tmp = tmp & andvalue;
-+ if (operation == 3)
-+ tmp = (tmp & andvalue) | orvalue;
-+
-+ WriteRegDW(adapter, reg, tmp);
-+}
-+
-+/* i2c functions */
-+static int i2cMainWriteForFlex2(struct adapter * adapter, u32 command, u8 * buf, u32 retries)
-+{
-+ u32 i;
-+ u32 value;
-+
-+ WriteRegDW(adapter, 0x100, 0);
-+ WriteRegDW(adapter, 0x100, command);
-+
-+ for (i = 0; i < retries; i++) {
-+ value = ReadRegDW(adapter, 0x100);
-+
-+ if ((value & 0x40000000) == 0) {
-+ if ((value & 0x81000000) == 0x80000000) {
-+ if (buf != 0)
-+ *buf = (value >> 0x10) & 0xff;
-+
-+ return 1;
-+ }
-+
-+ } else {
-+
-+ WriteRegDW(adapter, 0x100, 0);
-+ WriteRegDW(adapter, 0x100, command);
-+ }
-+ }
-+
-+ return 0;
-+}
-+
-+/* device = 0x10000000 for tuner, 0x20000000 for eeprom */
-+static void i2cMainSetup(u32 device, u32 chip_addr, u8 op, u8 addr, u32 value, u32 len, u32 *command)
-+{
-+ *command = device | ((len - 1) << 26) | (value << 16) | (addr << 8) | chip_addr;
-+
-+ if (op != 0)
-+ *command = *command | 0x03000000;
-+ else
-+ *command = *command | 0x01000000;
-+}
-+
-+static int FlexI2cRead4(struct adapter * adapter, u32 device, u32 chip_addr, u16 addr, u8 * buf, u8 len)
-+{
-+ u32 command;
-+ u32 value;
-+
-+ int result, i;
-+
-+ i2cMainSetup(device, chip_addr, 1, addr, 0, len, &command);
-+
-+ result = i2cMainWriteForFlex2(adapter, command, buf, 100000);
-+
-+ if ((result & 0xff) != 0) {
-+ if (len > 1) {
-+ value = ReadRegDW(adapter, 0x104);
-+
-+ for (i = 1; i < len; i++) {
-+ buf[i] = value & 0xff;
-+ value = value >> 8;
-+ }
-+ }
-+ }
-+
-+ return result;
-+}
-+
-+static int FlexI2cWrite4(struct adapter * adapter, u32 device, u32 chip_addr, u32 addr, u8 * buf, u8 len)
-+{
-+ u32 command;
-+ u32 value;
-+ int i;
-+
-+ if (len > 1) {
-+ value = 0;
-+
-+ for (i = len; i > 1; i--) {
-+ value = value << 8;
-+ value = value | buf[i - 1];
-+ }
-+
-+ WriteRegDW(adapter, 0x104, value);
-+ }
-+
-+ i2cMainSetup(device, chip_addr, 0, addr, buf[0], len, &command);
-+
-+ return i2cMainWriteForFlex2(adapter, command, 0, 100000);
-+}
-+
-+static void fixchipaddr(u32 device, u32 bus, u32 addr, u32 *ret)
-+{
-+ if (device == 0x20000000)
-+ *ret = bus | ((addr >> 8) & 3);
-+
-+ *ret = bus;
-+}
-+
-+static u32 FLEXI2C_read(struct adapter * adapter, u32 device, u32 bus, u32 addr, u8 * buf, u32 len)
-+{
-+ u32 chipaddr;
-+ u32 bytes_to_transfer;
-+ u8 *start;
-+
-+// dprintk("%s:\n", __FUNCTION__);
-+
-+ start = buf;
-+
-+ while (len != 0) {
-+ bytes_to_transfer = len;
-+
-+ if (bytes_to_transfer > 4)
-+ bytes_to_transfer = 4;
-+
-+ fixchipaddr(device, bus, addr, &chipaddr);
-+
-+ if (FlexI2cRead4(adapter, device, chipaddr, addr, buf, bytes_to_transfer) == 0)
-+ return buf - start;
-+
-+ buf = buf + bytes_to_transfer;
-+ addr = addr + bytes_to_transfer;
-+ len = len - bytes_to_transfer;
-+ };
-+
-+ return buf - start;
-+}
-+
-+static u32 FLEXI2C_write(struct adapter * adapter, u32 device, u32 bus, u32 addr, u8 * buf, u32 len)
-+{
-+ u32 chipaddr;
-+ u32 bytes_to_transfer;
-+ u8 *start;
-+
-+// dprintk("%s:\n", __FUNCTION__);
-+
-+ start = buf;
-+
-+ while (len != 0) {
-+ bytes_to_transfer = len;
-+
-+ if (bytes_to_transfer > 4)
-+ bytes_to_transfer = 4;
-+
-+ fixchipaddr(device, bus, addr, &chipaddr);
-+
-+ if (FlexI2cWrite4(adapter, device, chipaddr, addr, buf, bytes_to_transfer) == 0)
-+ return buf - start;
-+
-+ buf = buf + bytes_to_transfer;
-+ addr = addr + bytes_to_transfer;
-+ len = len - bytes_to_transfer;
-+ }
-+
-+ return buf - start;
-+}
-+
-+static int master_xfer(struct dvb_i2c_bus *i2c, const struct i2c_msg *msgs, int num)
-+{
-+ struct adapter *tmp = i2c->data;
-+ int i, ret = 0;
-+
-+ if (down_interruptible(&tmp->i2c_sem))
-+ return -ERESTARTSYS;
-+
-+ if (0) {
-+ dprintk("%s:\n", __FUNCTION__);
-+
-+ for (i = 0; i < num; i++) {
-+ printk("message %d: flags=%x, addr=0x%04x, buf=%x, len=%d \n", i, msgs[i].flags, msgs[i].addr, (u32) msgs[i].buf, msgs[i].len);
-+ }
-+ }
-+
-+ /* allow only the vp310 frontend to access the bus */
-+ if ((msgs[0].addr != 0x0E) && (msgs[0].addr != 0x61)) {
-+ up(&tmp->i2c_sem);
-+
-+ return -EREMOTEIO;
-+ }
-+
-+ if ((num == 1) && (msgs[0].buf != NULL)) {
-+ if (msgs[0].flags == I2C_M_RD) {
-+ ret = -EINVAL;
-+
-+ } else {
-+
-+ // single writes do have the reg addr in buf[0] and data in buf[1] to buf[n]
-+ ret = FLEXI2C_write(tmp, 0x10000000, msgs[0].addr, msgs[0].buf[0], &msgs[0].buf[1], msgs[0].len - 1);
-+
-+ if (ret != msgs[0].len - 1)
-+ ret = -EREMOTEIO;
-+ else
-+ ret = num;
-+ }
-+
-+ } else if ((num == 2) && (msgs[1].buf != NULL)) {
-+
-+ // i2c reads consist of a reg addr _write_ followed by a data read, so msg[1].flags has to be examined
-+ if (msgs[1].flags == I2C_M_RD) {
-+ ret = FLEXI2C_read(tmp, 0x10000000, msgs[0].addr, msgs[0].buf[0], msgs[1].buf, msgs[1].len);
-+
-+ } else {
-+
-+ ret = FLEXI2C_write(tmp, 0x10000000, msgs[0].addr, msgs[0].buf[0], msgs[1].buf, msgs[1].len);
-+ }
-+
-+ if (ret != msgs[1].len)
-+ ret = -EREMOTEIO;
-+ else
-+ ret = num;
-+ }
-+
-+ up(&tmp->i2c_sem);
-+
-+ /* master xfer functions always return the number of successfully
-+ transmitted messages, not the number of transmitted bytes.
-+ return -EREMOTEIO in case of failure. */
-+ return ret;
-+}
-+
-+/* SRAM (Skystar2 rev2.3 has one "ISSI IS61LV256" chip on board,
-+ but it seems that FlexCopII can work with more than one chip) */
-+static void SRAMSetNetDest(struct adapter * adapter, u8 dest)
-+{
-+ u32 tmp;
-+
-+ udelay(1000);
-+
-+ tmp = (ReadRegDW(adapter, 0x714) & 0xFFFFFFFC) | (dest & 3);
-+
-+ udelay(1000);
-+
-+ WriteRegDW(adapter, 0x714, tmp);
-+ WriteRegDW(adapter, 0x714, tmp);
-+
-+ udelay(1000);
-+
-+ /* return value is never used? */
-+/* return tmp; */
-+}
-+
-+static void SRAMSetCaiDest(struct adapter * adapter, u8 dest)
-+{
-+ u32 tmp;
-+
-+ udelay(1000);
-+
-+ tmp = (ReadRegDW(adapter, 0x714) & 0xFFFFFFF3) | ((dest & 3) << 2);
-+
-+ udelay(1000);
-+ udelay(1000);
-+
-+ WriteRegDW(adapter, 0x714, tmp);
-+ WriteRegDW(adapter, 0x714, tmp);
-+
-+ udelay(1000);
-+
-+ /* return value is never used? */
-+/* return tmp; */
-+}
-+
-+static void SRAMSetCaoDest(struct adapter * adapter, u8 dest)
-+{
-+ u32 tmp;
-+
-+ udelay(1000);
-+
-+ tmp = (ReadRegDW(adapter, 0x714) & 0xFFFFFFCF) | ((dest & 3) << 4);
-+
-+ udelay(1000);
-+ udelay(1000);
-+
-+ WriteRegDW(adapter, 0x714, tmp);
-+ WriteRegDW(adapter, 0x714, tmp);
-+
-+ udelay(1000);
-+
-+ /* return value is never used? */
-+/* return tmp; */
-+}
-+
-+static void SRAMSetMediaDest(struct adapter * adapter, u8 dest)
-+{
-+ u32 tmp;
-+
-+ udelay(1000);
-+
-+ tmp = (ReadRegDW(adapter, 0x714) & 0xFFFFFF3F) | ((dest & 3) << 6);
-+
-+ udelay(1000);
-+ udelay(1000);
-+
-+ WriteRegDW(adapter, 0x714, tmp);
-+ WriteRegDW(adapter, 0x714, tmp);
-+
-+ udelay(1000);
-+
-+ /* return value is never used? */
-+/* return tmp; */
-+}
-+
-+/* SRAM memory is accessed through a buffer register in the FlexCop
-+ chip (0x700). This register has the following structure:
-+ bits 0-14 : address
-+ bit 15 : read/write flag
-+ bits 16-23 : 8-bit word to write
-+ bits 24-27 : = 4
-+ bits 28-29 : memory bank selector
-+ bit 31 : busy flag
-+*/
-+static void FlexSramWrite(struct adapter *adapter, u32 bank, u32 addr, u8 * buf, u32 len)
-+{
-+ u32 i, command, retries;
-+
-+ for (i = 0; i < len; i++) {
-+ command = bank | addr | 0x04000000 | (*buf << 0x10);
-+
-+ retries = 2;
-+
-+ while (((ReadRegDW(adapter, 0x700) & 0x80000000) != 0) && (retries > 0)) {
-+ mdelay(1);
-+ retries--;
-+ };
-+
-+ if (retries == 0)
-+ printk("%s: SRAM timeout\n", __FUNCTION__);
-+
-+ WriteRegDW(adapter, 0x700, command);
-+
-+ buf++;
-+ addr++;
-+ }
-+}
-+
-+static void FlexSramRead(struct adapter *adapter, u32 bank, u32 addr, u8 * buf, u32 len)
-+{
-+ u32 i, command, value, retries;
-+
-+ for (i = 0; i < len; i++) {
-+ command = bank | addr | 0x04008000;
-+
-+ retries = 10000;
-+
-+ while (((ReadRegDW(adapter, 0x700) & 0x80000000) != 0) && (retries > 0)) {
-+ mdelay(1);
-+ retries--;
-+ };
-+
-+ if (retries == 0)
-+ printk("%s: SRAM timeout\n", __FUNCTION__);
-+
-+ WriteRegDW(adapter, 0x700, command);
-+
-+ retries = 10000;
-+
-+ while (((ReadRegDW(adapter, 0x700) & 0x80000000) != 0) && (retries > 0)) {
-+ mdelay(1);
-+ retries--;
-+ };
-+
-+ if (retries == 0)
-+ printk("%s: SRAM timeout\n", __FUNCTION__);
-+
-+ value = ReadRegDW(adapter, 0x700) >> 0x10;
-+
-+ *buf = (value & 0xff);
-+
-+ addr++;
-+ buf++;
-+ }
-+}
-+
-+static void SRAM_writeChunk(struct adapter *adapter, u32 addr, u8 * buf, u16 len)
-+{
-+ u32 bank;
-+
-+ bank = 0;
-+
-+ if (adapter->dwSramType == 0x20000) {
-+ bank = (addr & 0x18000) << 0x0D;
-+ }
-+
-+ if (adapter->dwSramType == 0x00000) {
-+ if ((addr >> 0x0F) == 0)
-+ bank = 0x20000000;
-+ else
-+ bank = 0x10000000;
-+ }
-+
-+ FlexSramWrite(adapter, bank, addr & 0x7FFF, buf, len);
-+}
-+
-+static void SRAM_readChunk(struct adapter *adapter, u32 addr, u8 * buf, u16 len)
-+{
-+ u32 bank;
-+
-+ bank = 0;
-+
-+ if (adapter->dwSramType == 0x20000) {
-+ bank = (addr & 0x18000) << 0x0D;
-+ }
-+
-+ if (adapter->dwSramType == 0x00000) {
-+ if ((addr >> 0x0F) == 0)
-+ bank = 0x20000000;
-+ else
-+ bank = 0x10000000;
-+ }
-+
-+ FlexSramRead(adapter, bank, addr & 0x7FFF, buf, len);
-+}
-+
-+static void SRAM_read(struct adapter *adapter, u32 addr, u8 * buf, u32 len)
-+{
-+ u32 length;
-+
-+ while (len != 0) {
-+ length = len;
-+
-+ // check if the address range belongs to the same
-+ // 32K memory chip. If not, the data is read from
-+ // one chip at a time.
-+ if ((addr >> 0x0F) != ((addr + len - 1) >> 0x0F)) {
-+ length = (((addr >> 0x0F) + 1) << 0x0F) - addr;
-+ }
-+
-+ SRAM_readChunk(adapter, addr, buf, length);
-+
-+ addr = addr + length;
-+ buf = buf + length;
-+ len = len - length;
-+ }
-+}
-+
-+static void SRAM_write(struct adapter *adapter, u32 addr, u8 * buf, u32 len)
-+{
-+ u32 length;
-+
-+ while (len != 0) {
-+ length = len;
-+
-+ // check if the address range belongs to the same
-+ // 32K memory chip. If not, the data is written to
-+ // one chip at a time.
-+ if ((addr >> 0x0F) != ((addr + len - 1) >> 0x0F)) {
-+ length = (((addr >> 0x0F) + 1) << 0x0F) - addr;
-+ }
-+
-+ SRAM_writeChunk(adapter, addr, buf, length);
-+
-+ addr = addr + length;
-+ buf = buf + length;
-+ len = len - length;
-+ }
-+}
-+
-+static void SRAM_setSize(struct adapter *adapter, u32 mask)
-+{
-+ WriteRegDW(adapter, 0x71C, (mask | (~0x30000 & ReadRegDW(adapter, 0x71C))));
-+}
-+
-+static void SRAM_init(struct adapter *adapter)
-+{
-+ u32 tmp;
-+
-+ tmp = ReadRegDW(adapter, 0x71C);
-+
-+ WriteRegDW(adapter, 0x71C, 1);
-+
-+ if (ReadRegDW(adapter, 0x71C) != 0) {
-+ WriteRegDW(adapter, 0x71C, tmp);
-+
-+ adapter->dwSramType = tmp & 0x30000;
-+
-+ dprintk("%s: dwSramType = %x\n", __FUNCTION__, adapter->dwSramType);
-+
-+ } else {
-+
-+ adapter->dwSramType = 0x10000;
-+
-+ dprintk("%s: dwSramType = %x\n", __FUNCTION__, adapter->dwSramType);
-+ }
-+
-+ /* return value is never used? */
-+/* return adapter->dwSramType; */
-+}
-+
-+static int SRAM_testLocation(struct adapter *adapter, u32 mask, u32 addr)
-+{
-+ u8 tmp1, tmp2;
-+
-+ dprintk("%s: mask = %x, addr = %x\n", __FUNCTION__, mask, addr);
-+
-+ SRAM_setSize(adapter, mask);
-+ SRAM_init(adapter);
-+
-+ tmp2 = 0xA5;
-+ tmp1 = 0x4F;
-+
-+ SRAM_write(adapter, addr, &tmp2, 1);
-+ SRAM_write(adapter, addr + 4, &tmp1, 1);
-+
-+ tmp2 = 0;
-+
-+ mdelay(20);
-+
-+ SRAM_read(adapter, addr, &tmp2, 1);
-+ SRAM_read(adapter, addr, &tmp2, 1);
-+
-+ dprintk("%s: wrote 0xA5, read 0x%2x\n", __FUNCTION__, tmp2);
-+
-+ if (tmp2 != 0xA5)
-+ return 0;
-+
-+ tmp2 = 0x5A;
-+ tmp1 = 0xF4;
-+
-+ SRAM_write(adapter, addr, &tmp2, 1);
-+ SRAM_write(adapter, addr + 4, &tmp1, 1);
-+
-+ tmp2 = 0;
-+
-+ mdelay(20);
-+
-+ SRAM_read(adapter, addr, &tmp2, 1);
-+ SRAM_read(adapter, addr, &tmp2, 1);
-+
-+ dprintk("%s: wrote 0x5A, read 0x%2x\n", __FUNCTION__, tmp2);
-+
-+ if (tmp2 != 0x5A)
-+ return 0;
-+
-+ return 1;
-+}
-+
-+static u32 SRAM_length(struct adapter * adapter)
-+{
-+ if (adapter->dwSramType == 0x10000)
-+ return 32768; // 32K
-+ if (adapter->dwSramType == 0x00000)
-+ return 65536; // 64K
-+ if (adapter->dwSramType == 0x20000)
-+ return 131072; // 128K
-+
-+ return 32768; // 32K
-+}
-+
-+/* FlexcopII can work with 32K, 64K or 128K of external SRAM memory.
-+ - for 128K there are 4x32K chips at bank 0,1,2,3.
-+ - for 64K there are 2x32K chips at bank 1,2.
-+ - for 32K there is one 32K chip at bank 0.
-+
-+ FlexCop works only with one bank at a time. The bank is selected
-+ by bits 28-29 of the 0x700 register.
-+
-+ bank 0 covers addresses 0x00000-0x07FFF
-+ bank 1 covers addresses 0x08000-0x0FFFF
-+ bank 2 covers addresses 0x10000-0x17FFF
-+ bank 3 covers addresses 0x18000-0x1FFFF
-+*/
-+static int SramDetectForFlex2(struct adapter *adapter)
-+{
-+ u32 tmp, tmp2, tmp3;
-+
-+ dprintk("%s:\n", __FUNCTION__);
-+
-+ tmp = ReadRegDW(adapter, 0x208);
-+ WriteRegDW(adapter, 0x208, 0);
-+
-+ tmp2 = ReadRegDW(adapter, 0x71C);
-+
-+ dprintk("%s: tmp2 = %x\n", __FUNCTION__, tmp2);
-+
-+ WriteRegDW(adapter, 0x71C, 1);
-+
-+ tmp3 = ReadRegDW(adapter, 0x71C);
-+
-+ dprintk("%s: tmp3 = %x\n", __FUNCTION__, tmp3);
-+
-+ WriteRegDW(adapter, 0x71C, tmp2);
-+
-+ // check for internal SRAM ???
-+ tmp3--;
-+ if (tmp3 != 0) {
-+ SRAM_setSize(adapter, 0x10000);
-+ SRAM_init(adapter);
-+ WriteRegDW(adapter, 0x208, tmp);
-+
-+ dprintk("%s: sram size = 32K\n", __FUNCTION__);
-+
-+ return 32;
-+ }
-+
-+ if (SRAM_testLocation(adapter, 0x20000, 0x18000) != 0) {
-+ SRAM_setSize(adapter, 0x20000);
-+ SRAM_init(adapter);
-+ WriteRegDW(adapter, 0x208, tmp);
-+
-+ dprintk("%s: sram size = 128K\n", __FUNCTION__);
-+
-+ return 128;
-+ }
-+
-+ if (SRAM_testLocation(adapter, 0x00000, 0x10000) != 0) {
-+ SRAM_setSize(adapter, 0x00000);
-+ SRAM_init(adapter);
-+ WriteRegDW(adapter, 0x208, tmp);
-+
-+ dprintk("%s: sram size = 64K\n", __FUNCTION__);
-+
-+ return 64;
-+ }
-+
-+ if (SRAM_testLocation(adapter, 0x10000, 0x00000) != 0) {
-+ SRAM_setSize(adapter, 0x10000);
-+ SRAM_init(adapter);
-+ WriteRegDW(adapter, 0x208, tmp);
-+
-+ dprintk("%s: sram size = 32K\n", __FUNCTION__);
-+
-+ return 32;
-+ }
-+
-+ SRAM_setSize(adapter, 0x10000);
-+ SRAM_init(adapter);
-+ WriteRegDW(adapter, 0x208, tmp);
-+
-+ dprintk("%s: SRAM detection failed. Set to 32K \n", __FUNCTION__);
-+
-+ return 0;
-+}
-+
-+static void SLL_detectSramSize(struct adapter *adapter)
-+{
-+ SramDetectForFlex2(adapter);
-+}
-+/* EEPROM (Skystar2 has one "24LC08B" chip on board) */
-+/*
-+static int EEPROM_write(struct adapter *adapter, u16 addr, u8 * buf, u16 len)
-+{
-+ return FLEXI2C_write(adapter, 0x20000000, 0x50, addr, buf, len);
-+}
-+*/
-+
-+static int EEPROM_read(struct adapter *adapter, u16 addr, u8 * buf, u16 len)
-+{
-+ return FLEXI2C_read(adapter, 0x20000000, 0x50, addr, buf, len);
-+}
-+
-+u8 calc_LRC(u8 * buf, u32 len)
-+{
-+ u32 i;
-+ u8 sum;
-+
-+ sum = 0;
-+
-+ for (i = 0; i < len; i++)
-+ sum = sum ^ buf[i];
-+
-+ return sum;
-+}
-+
-+static int EEPROM_LRC_read(struct adapter *adapter, u32 addr, u32 len, u8 * buf, u32 retries)
-+{
-+ int i;
-+
-+ for (i = 0; i < retries; i++) {
-+ if (EEPROM_read(adapter, addr, buf, len) == len) {
-+ if (calc_LRC(buf, len - 1) == buf[len - 1])
-+ return 1;
-+ }
-+ }
-+
-+ return 0;
-+}
-+
-+/*
-+static int EEPROM_LRC_write(struct adapter *adapter, u32 addr, u32 len, u8 * wbuf, u8 * rbuf, u32 retries)
-+{
-+ int i;
-+
-+ for (i = 0; i < retries; i++) {
-+ if (EEPROM_write(adapter, addr, wbuf, len) == len) {
-+ if (EEPROM_LRC_read(adapter, addr, len, rbuf, retries) == 1)
-+ return 1;
-+ }
-+ }
-+
-+ return 0;
-+}
-+*/
-+
-+/* These functions could be called from the initialization routine
-+ to unlock SkyStar2 cards, locked by "Europe On Line".
-+
-+ in cards from "Europe On Line" the key is:
-+
-+ u8 key[20] = {
-+ 0xB2, 0x01, 0x00, 0x00,
-+ 0x00, 0x00, 0x00, 0x00,
-+ 0x00, 0x00, 0x00, 0x00,
-+ 0x00, 0x00, 0x00, 0x00,
-+ };
-+
-+ LRC = 0xB3;
-+
-+ in unlocked cards the key is:
-+
-+ u8 key[20] = {
-+ 0xB2, 0x00, 0x00, 0x00,
-+ 0x00, 0x00, 0x00, 0x00,
-+ 0x00, 0x00, 0x00, 0x00,
-+ 0x00, 0x00, 0x00, 0x00,
-+ };
-+
-+ LRC = 0xB2;
-+*/
-+/*
-+static int EEPROM_writeKey(struct adapter *adapter, u8 * key, u32 len)
-+{
-+ u8 rbuf[20];
-+ u8 wbuf[20];
-+
-+ if (len != 16)
-+ return 0;
-+
-+ memcpy(wbuf, key, len);
-+
-+ wbuf[16] = 0;
-+ wbuf[17] = 0;
-+ wbuf[18] = 0;
-+ wbuf[19] = calc_LRC(wbuf, 19);
-+
-+ return EEPROM_LRC_write(adapter, 0x3E4, 20, wbuf, rbuf, 4);
-+}
-+*/
-+static int EEPROM_readKey(struct adapter *adapter, u8 * key, u32 len)
-+{
-+ u8 buf[20];
-+
-+ if (len != 16)
-+ return 0;
-+
-+ if (EEPROM_LRC_read(adapter, 0x3E4, 20, buf, 4) == 0)
-+ return 0;
-+
-+ memcpy(key, buf, len);
-+
-+ return 1;
-+}
-+
-+static int EEPROM_getMacAddr(struct adapter *adapter, char type, u8 * mac)
-+{
-+ u8 tmp[8];
-+
-+ if (EEPROM_LRC_read(adapter, 0x3F8, 8, tmp, 4) != 0) {
-+ if (type != 0) {
-+ mac[0] = tmp[0];
-+ mac[1] = tmp[1];
-+ mac[2] = tmp[2];
-+ mac[3] = 0xFE;
-+ mac[4] = 0xFF;
-+ mac[5] = tmp[3];
-+ mac[6] = tmp[4];
-+ mac[7] = tmp[5];
-+
-+ } else {
-+
-+ mac[0] = tmp[0];
-+ mac[1] = tmp[1];
-+ mac[2] = tmp[2];
-+ mac[3] = tmp[3];
-+ mac[4] = tmp[4];
-+ mac[5] = tmp[5];
-+ }
-+
-+ return 1;
-+
-+ } else {
-+
-+ if (type == 0) {
-+ memset(mac, 0, 6);
-+
-+ } else {
-+
-+ memset(mac, 0, 8);
-+ }
-+
-+ return 0;
-+ }
-+}
-+
-+/*
-+static char EEPROM_setMacAddr(struct adapter *adapter, char type, u8 * mac)
-+{
-+ u8 tmp[8];
-+
-+ if (type != 0) {
-+ tmp[0] = mac[0];
-+ tmp[1] = mac[1];
-+ tmp[2] = mac[2];
-+ tmp[3] = mac[5];
-+ tmp[4] = mac[6];
-+ tmp[5] = mac[7];
-+
-+ } else {
-+
-+ tmp[0] = mac[0];
-+ tmp[1] = mac[1];
-+ tmp[2] = mac[2];
-+ tmp[3] = mac[3];
-+ tmp[4] = mac[4];
-+ tmp[5] = mac[5];
-+ }
-+
-+ tmp[6] = 0;
-+ tmp[7] = calc_LRC(tmp, 7);
-+
-+ if (EEPROM_write(adapter, 0x3F8, tmp, 8) == 8)
-+ return 1;
-+
-+ return 0;
-+}
-+*/
-+
-+/* PID filter */
-+static void FilterEnableStream1Filter(struct adapter *adapter, u32 op)
-+{
-+ dprintk("%s: op=%x\n", __FUNCTION__, op);
-+
-+ if (op == 0) {
-+ WriteRegOp(adapter, 0x208, 2, ~0x00000001, 0);
-+
-+ } else {
-+
-+ WriteRegOp(adapter, 0x208, 1, 0, 0x00000001);
-+ }
-+}
-+
-+static void FilterEnableStream2Filter(struct adapter *adapter, u32 op)
-+{
-+ dprintk("%s: op=%x\n", __FUNCTION__, op);
-+
-+ if (op == 0) {
-+ WriteRegOp(adapter, 0x208, 2, ~0x00000002, 0);
-+
-+ } else {
-+
-+ WriteRegOp(adapter, 0x208, 1, 0, 0x00000002);
-+ }
-+}
-+
-+static void FilterEnablePcrFilter(struct adapter *adapter, u32 op)
-+{
-+ dprintk("%s: op=%x\n", __FUNCTION__, op);
-+
-+ if (op == 0) {
-+ WriteRegOp(adapter, 0x208, 2, ~0x00000004, 0);
-+
-+ } else {
-+
-+ WriteRegOp(adapter, 0x208, 1, 0, 0x00000004);
-+ }
-+}
-+
-+static void FilterEnablePmtFilter(struct adapter *adapter, u32 op)
-+{
-+ dprintk("%s: op=%x\n", __FUNCTION__, op);
-+
-+ if (op == 0) {
-+ WriteRegOp(adapter, 0x208, 2, ~0x00000008, 0);
-+
-+ } else {
-+
-+ WriteRegOp(adapter, 0x208, 1, 0, 0x00000008);
-+ }
-+}
-+
-+static void FilterEnableEmmFilter(struct adapter *adapter, u32 op)
-+{
-+ dprintk("%s: op=%x\n", __FUNCTION__, op);
-+
-+ if (op == 0) {
-+ WriteRegOp(adapter, 0x208, 2, ~0x00000010, 0);
-+
-+ } else {
-+
-+ WriteRegOp(adapter, 0x208, 1, 0, 0x00000010);
-+ }
-+}
-+
-+static void FilterEnableEcmFilter(struct adapter *adapter, u32 op)
-+{
-+ dprintk("%s: op=%x\n", __FUNCTION__, op);
-+
-+ if (op == 0) {
-+ WriteRegOp(adapter, 0x208, 2, ~0x00000020, 0);
-+
-+ } else {
-+
-+ WriteRegOp(adapter, 0x208, 1, 0, 0x00000020);
-+ }
-+}
-+
-+/*
-+static void FilterEnableNullFilter(struct adapter *adapter, u32 op)
-+{
-+ dprintk("%s: op=%x\n", __FUNCTION__, op);
-+
-+ if (op == 0) {
-+ WriteRegOp(adapter, 0x208, 2, ~0x00000040, 0);
-+
-+ } else {
-+
-+ WriteRegOp(adapter, 0x208, 1, 0, 0x00000040);
-+ }
-+}
-+*/
-+
-+static void FilterEnableMaskFilter(struct adapter *adapter, u32 op)
-+{
-+ dprintk("%s: op=%x\n", __FUNCTION__, op);
-+
-+ if (op == 0) {
-+ WriteRegOp(adapter, 0x208, 2, ~0x00000080, 0);
-+
-+ } else {
-+
-+ WriteRegOp(adapter, 0x208, 1, 0, 0x00000080);
-+ }
-+}
-+
-+
-+static void CtrlEnableMAC(struct adapter *adapter, u32 op)
-+{
-+ if (op == 0) {
-+ WriteRegOp(adapter, 0x208, 2, ~0x00004000, 0);
-+
-+ } else {
-+
-+ WriteRegOp(adapter, 0x208, 1, 0, 0x00004000);
-+ }
-+}
-+
-+static int CASetMacDstAddrFilter(struct adapter *adapter, u8 * mac)
-+{
-+ u32 tmp1, tmp2;
-+
-+ tmp1 = (mac[3] << 0x18) | (mac[2] << 0x10) | (mac[1] << 0x08) | mac[0];
-+ tmp2 = (mac[5] << 0x08) | mac[4];
-+
-+ WriteRegDW(adapter, 0x418, tmp1);
-+ WriteRegDW(adapter, 0x41C, tmp2);
-+
-+ return 0;
-+}
-+
-+/*
-+static void SetIgnoreMACFilter(struct adapter *adapter, u8 op)
-+{
-+ if (op != 0) {
-+ WriteRegOp(adapter, 0x208, 2, ~0x00004000, 0);
-+
-+ adapter->mac_filter = 1;
-+
-+ } else {
-+
-+ if (adapter->mac_filter != 0) {
-+ adapter->mac_filter = 0;
-+
-+ WriteRegOp(adapter, 0x208, 1, 0, 0x00004000);
-+ }
-+ }
-+}
-+*/
-+
-+/*
-+static void CheckNullFilterEnable(struct adapter *adapter)
-+{
-+ FilterEnableNullFilter(adapter, 1);
-+ FilterEnableMaskFilter(adapter, 1);
-+}
-+*/
-+
-+static void InitPIDsInfo(struct adapter *adapter)
-+{
-+ int i;
-+
-+ for (i = 0; i < 0x27; i++)
-+ adapter->pids[i] = 0x1FFF;
-+}
-+
-+static int CheckPID(struct adapter *adapter, u16 pid)
-+{
-+ u32 i;
-+
-+ if (pid == 0x1FFF)
-+ return 0;
-+
-+ for (i = 0; i < 0x27; i++) {
-+ if (adapter->pids[i] == pid)
-+ return 1;
-+ }
-+
-+ return 0;
-+}
-+
-+static void PidSetGroupPID(struct adapter * adapter, u32 pid)
-+{
-+ u32 value;
-+
-+ dprintk("%s: pid=%x\n", __FUNCTION__, pid);
-+
-+ value = (pid & 0x3FFF) | (ReadRegDW(adapter, 0x30C) & 0xFFFF0000);
-+
-+ WriteRegDW(adapter, 0x30C, value);
-+
-+ /* return value is never used? */
-+/* return value; */
-+}
-+
-+static void PidSetGroupMASK(struct adapter * adapter, u32 pid)
-+{
-+ u32 value;
-+
-+ dprintk("%s: pid=%x\n", __FUNCTION__, pid);
-+
-+ value = ((pid & 0x3FFF) << 0x10) | (ReadRegDW(adapter, 0x30C) & 0xFFFF);
-+
-+ WriteRegDW(adapter, 0x30C, value);
-+
-+ /* return value is never used? */
-+/* return value; */
-+}
-+
-+static void PidSetStream1PID(struct adapter * adapter, u32 pid)
-+{
-+ u32 value;
-+
-+ dprintk("%s: pid=%x\n", __FUNCTION__, pid);
-+
-+ value = (pid & 0x3FFF) | (ReadRegDW(adapter, 0x300) & 0xFFFFC000);
-+
-+ WriteRegDW(adapter, 0x300, value);
-+
-+ /* return value is never used? */
-+/* return value; */
-+}
-+
-+static void PidSetStream2PID(struct adapter * adapter, u32 pid)
-+{
-+ u32 value;
-+
-+ dprintk("%s: pid=%x\n", __FUNCTION__, pid);
-+
-+ value = ((pid & 0x3FFF) << 0x10) | (ReadRegDW(adapter, 0x300) & 0xFFFF);
-+
-+ WriteRegDW(adapter, 0x300, value);
-+
-+ /* return value is never used? */
-+/* return value; */
-+}
-+
-+static void PidSetPcrPID(struct adapter * adapter, u32 pid)
-+{
-+ u32 value;
-+
-+ dprintk("%s: pid=%x\n", __FUNCTION__, pid);
-+
-+ value = (pid & 0x3FFF) | (ReadRegDW(adapter, 0x304) & 0xFFFFC000);
-+
-+ WriteRegDW(adapter, 0x304, value);
-+
-+ /* return value is never used? */
-+/* return value; */
-+}
-+
-+static void PidSetPmtPID(struct adapter * adapter, u32 pid)
-+{
-+ u32 value;
-+
-+ dprintk("%s: pid=%x\n", __FUNCTION__, pid);
-+
-+ value = ((pid & 0x3FFF) << 0x10) | (ReadRegDW(adapter, 0x304) & 0x3FFF);
-+
-+ WriteRegDW(adapter, 0x304, value);
-+
-+ /* return value is never used? */
-+/* return value; */
-+}
-+
-+static void PidSetEmmPID(struct adapter * adapter, u32 pid)
-+{
-+ u32 value;
-+
-+ dprintk("%s: pid=%x\n", __FUNCTION__, pid);
-+
-+ value = (pid & 0xFFFF) | (ReadRegDW(adapter, 0x308) & 0xFFFF0000);
-+
-+ WriteRegDW(adapter, 0x308, value);
-+
-+ /* return value is never used? */
-+/* return value; */
-+}
-+
-+static void PidSetEcmPID(struct adapter * adapter, u32 pid)
-+{
-+ u32 value;
-+
-+ dprintk("%s: pid=%x\n", __FUNCTION__, pid);
-+
-+ value = (pid << 0x10) | (ReadRegDW(adapter, 0x308) & 0xFFFF);
-+
-+ WriteRegDW(adapter, 0x308, value);
-+
-+ /* return value is never used? */
-+/* return value; */
-+}
-+
-+static int PidGetStream1PID(struct adapter * adapter)
-+{
-+ return ReadRegDW(adapter, 0x300) & 0x00001FFF;
-+}
-+
-+static int PidGetStream2PID(struct adapter * adapter)
-+{
-+ return (ReadRegDW(adapter, 0x300) >> 0x10)& 0x00001FFF;
-+}
-+
-+static int PidGetPcrPID(struct adapter * adapter)
-+{
-+ return ReadRegDW(adapter, 0x304) & 0x00001FFF;
-+}
-+
-+static int PidGetPmtPID(struct adapter * adapter)
-+{
-+ return (ReadRegDW(adapter, 0x304) >> 0x10)& 0x00001FFF;
-+}
-+
-+static int PidGetEmmPID(struct adapter * adapter)
-+{
-+ return ReadRegDW(adapter, 0x308) & 0x00001FFF;
-+}
-+
-+static int PidGetEcmPID(struct adapter * adapter)
-+{
-+ return (ReadRegDW(adapter, 0x308) >> 0x10)& 0x00001FFF;
-+}
-+
-+static int PidGetGroupPID(struct adapter * adapter)
-+{
-+ return ReadRegDW(adapter, 0x30C) & 0x00001FFF;
-+}
-+
-+static int PidGetGroupMASK(struct adapter * adapter)
-+{
-+ return (ReadRegDW(adapter, 0x30C) >> 0x10)& 0x00001FFF;
-+}
-+
-+/*
-+static void ResetHardwarePIDFilter(struct adapter *adapter)
-+{
-+ PidSetStream1PID(adapter, 0x1FFF);
-+
-+ PidSetStream2PID(adapter, 0x1FFF);
-+ FilterEnableStream2Filter(adapter, 0);
-+
-+ PidSetPcrPID(adapter, 0x1FFF);
-+ FilterEnablePcrFilter(adapter, 0);
-+
-+ PidSetPmtPID(adapter, 0x1FFF);
-+ FilterEnablePmtFilter(adapter, 0);
-+
-+ PidSetEcmPID(adapter, 0x1FFF);
-+ FilterEnableEcmFilter(adapter, 0);
-+
-+ PidSetEmmPID(adapter, 0x1FFF);
-+ FilterEnableEmmFilter(adapter, 0);
-+}
-+*/
-+
-+static void OpenWholeBandwidth(struct adapter *adapter)
-+{
-+ PidSetGroupPID(adapter, 0);
-+
-+ PidSetGroupMASK(adapter, 0);
-+
-+ FilterEnableMaskFilter(adapter, 1);
-+}
-+
-+static int AddHwPID(struct adapter *adapter, u32 pid)
-+{
-+ dprintk("%s: pid=%d\n", __FUNCTION__, pid);
-+
-+ if (pid <= 0x1F)
-+ return 1;
-+
-+ if ((PidGetGroupMASK(adapter) == 0) && (PidGetGroupPID(adapter) == 0))
-+ return 0;
-+
-+ if (PidGetStream1PID(adapter) == 0x1FFF) {
-+ PidSetStream1PID(adapter, pid & 0xFFFF);
-+
-+ FilterEnableStream1Filter(adapter, 1);
-+
-+ return 1;
-+ }
-+
-+ if (PidGetStream2PID(adapter) == 0x1FFF) {
-+ PidSetStream2PID(adapter, (pid & 0xFFFF));
-+
-+ FilterEnableStream2Filter(adapter, 1);
-+
-+ return 1;
-+ }
-+
-+ if (PidGetPcrPID(adapter) == 0x1FFF) {
-+ PidSetPcrPID(adapter, (pid & 0xFFFF));
-+
-+ FilterEnablePcrFilter(adapter, 1);
-+
-+ return 1;
-+ }
-+
-+ if ((PidGetPmtPID(adapter) & 0x1FFF) == 0x1FFF) {
-+ PidSetPmtPID(adapter, (pid & 0xFFFF));
-+
-+ FilterEnablePmtFilter(adapter, 1);
-+
-+ return 1;
-+ }
-+
-+ if ((PidGetEmmPID(adapter) & 0x1FFF) == 0x1FFF) {
-+ PidSetEmmPID(adapter, (pid & 0xFFFF));
-+
-+ FilterEnableEmmFilter(adapter, 1);
-+
-+ return 1;
-+ }
-+
-+ if ((PidGetEcmPID(adapter) & 0x1FFF) == 0x1FFF) {
-+ PidSetEcmPID(adapter, (pid & 0xFFFF));
-+
-+ FilterEnableEcmFilter(adapter, 1);
-+
-+ return 1;
-+ }
-+
-+ return -1;
-+}
-+
-+static int RemoveHwPID(struct adapter *adapter, u32 pid)
-+{
-+ dprintk("%s: pid=%d\n", __FUNCTION__, pid);
-+
-+ if (pid <= 0x1F)
-+ return 1;
-+
-+ if (PidGetStream1PID(adapter) == pid) {
-+ PidSetStream1PID(adapter, 0x1FFF);
-+
-+ return 1;
-+ }
-+
-+ if (PidGetStream2PID(adapter) == pid) {
-+ PidSetStream2PID(adapter, 0x1FFF);
-+
-+ FilterEnableStream2Filter(adapter, 0);
-+
-+ return 1;
-+ }
-+
-+ if (PidGetPcrPID(adapter) == pid) {
-+ PidSetPcrPID(adapter, 0x1FFF);
-+
-+ FilterEnablePcrFilter(adapter, 0);
-+
-+ return 1;
-+ }
-+
-+ if (PidGetPmtPID(adapter) == pid) {
-+ PidSetPmtPID(adapter, 0x1FFF);
-+
-+ FilterEnablePmtFilter(adapter, 0);
-+
-+ return 1;
-+ }
-+
-+ if (PidGetEmmPID(adapter) == pid) {
-+ PidSetEmmPID(adapter, 0x1FFF);
-+
-+ FilterEnableEmmFilter(adapter, 0);
-+
-+ return 1;
-+ }
-+
-+ if (PidGetEcmPID(adapter) == pid) {
-+ PidSetEcmPID(adapter, 0x1FFF);
-+
-+ FilterEnableEcmFilter(adapter, 0);
-+
-+ return 1;
-+ }
-+
-+ return -1;
-+}
-+
-+static int AddPID(struct adapter *adapter, u32 pid)
-+{
-+ int i;
-+
-+ dprintk("%s: pid=%d\n", __FUNCTION__, pid);
-+
-+ if (pid > 0x1FFE)
-+ return -1;
-+
-+ if (CheckPID(adapter, pid) == 1)
-+ return 1;
-+
-+ for (i = 0; i < 0x27; i++) {
-+ if (adapter->pids[i] == 0x1FFF) // find free pid filter
-+ {
-+ adapter->pids[i] = pid;
-+
-+ if (AddHwPID(adapter, pid) < 0)
-+ OpenWholeBandwidth(adapter);
-+
-+ return 1;
-+ }
-+ }
-+
-+ return -1;
-+}
-+
-+static int RemovePID(struct adapter *adapter, u32 pid)
-+{
-+ u32 i;
-+
-+ dprintk("%s: pid=%d\n", __FUNCTION__, pid);
-+
-+ if (pid > 0x1FFE)
-+ return -1;
-+
-+ for (i = 0; i < 0x27; i++) {
-+ if (adapter->pids[i] == pid) {
-+ adapter->pids[i] = 0x1FFF;
-+
-+ RemoveHwPID(adapter, pid);
-+
-+ return 1;
-+ }
-+ }
-+
-+ return -1;
-+}
-+
-+/* dma & irq */
-+static void CtrlEnableSmc(struct adapter *adapter, u32 op)
-+{
-+ if (op == 0) {
-+ WriteRegOp(adapter, 0x208, 2, ~0x00000800, 0);
-+
-+ } else {
-+
-+ WriteRegOp(adapter, 0x208, 1, 0, 0x00000800);
-+ }
-+}
-+
-+static void DmaEnableDisableIrq(struct adapter *adapter, u32 flag1, u32 flag2, u32 flag3)
-+{
-+ adapter->dma_ctrl = adapter->dma_ctrl & 0x000F0000;
-+
-+ if (flag1 == 0) {
-+ if (flag2 == 0)
-+ adapter->dma_ctrl = adapter->dma_ctrl & ~0x00010000;
-+ else
-+ adapter->dma_ctrl = adapter->dma_ctrl | 0x00010000;
-+
-+ if (flag3 == 0)
-+ adapter->dma_ctrl = adapter->dma_ctrl & ~0x00020000;
-+ else
-+ adapter->dma_ctrl = adapter->dma_ctrl | 0x00020000;
-+
-+ } else {
-+
-+ if (flag2 == 0)
-+ adapter->dma_ctrl = adapter->dma_ctrl & ~0x00040000;
-+ else
-+ adapter->dma_ctrl = adapter->dma_ctrl | 0x00040000;
-+
-+ if (flag3 == 0)
-+ adapter->dma_ctrl = adapter->dma_ctrl & ~0x00080000;
-+ else
-+ adapter->dma_ctrl = adapter->dma_ctrl | 0x00080000;
-+ }
-+}
-+
-+static void IrqDmaEnableDisableIrq(struct adapter * adapter, u32 op)
-+{
-+ u32 value;
-+
-+ value = ReadRegDW(adapter, 0x208) & 0xFFF0FFFF;
-+
-+ if (op != 0)
-+ value = value | (adapter->dma_ctrl & 0x000F0000);
-+
-+ WriteRegDW(adapter, 0x208, value);
-+}
-+
-+/* FlexCopII has 2 dma channels. DMA1 is used to transfer TS data to
-+ system memory.
-+
-+ The DMA1 buffer is divided in 2 subbuffers of equal size.
-+ FlexCopII will transfer TS data to one subbuffer, signal an interrupt
-+ when the subbuffer is full and continue fillig the second subbuffer.
-+
-+ For DMA1:
-+ subbuffer size in 32-bit words is stored in the first 24 bits of
-+ register 0x004. The last 8 bits of register 0x004 contain the number
-+ of subbuffers.
-+
-+ the first 30 bits of register 0x000 contain the address of the first
-+ subbuffer. The last 2 bits contain 0, when dma1 is disabled and 1,
-+ when dma1 is enabled.
-+
-+ the first 30 bits of register 0x00C contain the address of the second
-+ subbuffer. the last 2 bits contain 1.
-+
-+ register 0x008 will contain the address of the subbuffer that was filled
-+ with TS data, when FlexCopII will generate an interrupt.
-+
-+ For DMA2:
-+ subbuffer size in 32-bit words is stored in the first 24 bits of
-+ register 0x014. The last 8 bits of register 0x014 contain the number
-+ of subbuffers.
-+
-+ the first 30 bits of register 0x010 contain the address of the first
-+ subbuffer. The last 2 bits contain 0, when dma1 is disabled and 1,
-+ when dma1 is enabled.
-+
-+ the first 30 bits of register 0x01C contain the address of the second
-+ subbuffer. the last 2 bits contain 1.
-+
-+ register 0x018 contains the address of the subbuffer that was filled
-+ with TS data, when FlexCopII generates an interrupt.
-+*/
-+static int DmaInitDMA(struct adapter *adapter, u32 dma_channel)
-+{
-+ u32 subbuffers, subbufsize, subbuf0, subbuf1;
-+
-+ if (dma_channel == 0) {
-+ dprintk("%s: Initializing DMA1 channel\n", __FUNCTION__);
-+
-+ subbuffers = 2;
-+
-+ subbufsize = (((adapter->dmaq1.buffer_size / 2) / 4) << 8) | subbuffers;
-+
-+ subbuf0 = adapter->dmaq1.bus_addr & 0xFFFFFFFC;
-+
-+ subbuf1 = ((adapter->dmaq1.bus_addr + adapter->dmaq1.buffer_size / 2) & 0xFFFFFFFC) | 1;
-+
-+ dprintk("%s: first subbuffer address = 0x%x\n", __FUNCTION__, subbuf0);
-+ udelay(1000);
-+ WriteRegDW(adapter, 0x000, subbuf0);
-+
-+ dprintk("%s: subbuffer size = 0x%x\n", __FUNCTION__, (subbufsize >> 8) * 4);
-+ udelay(1000);
-+ WriteRegDW(adapter, 0x004, subbufsize);
-+
-+ dprintk("%s: second subbuffer address = 0x%x\n", __FUNCTION__, subbuf1);
-+ udelay(1000);
-+ WriteRegDW(adapter, 0x00C, subbuf1);
-+
-+ dprintk("%s: counter = 0x%x\n", __FUNCTION__, adapter->dmaq1.bus_addr & 0xFFFFFFFC);
-+ WriteRegDW(adapter, 0x008, adapter->dmaq1.bus_addr & 0xFFFFFFFC);
-+ udelay(1000);
-+
-+ if (subbuffers == 0)
-+ DmaEnableDisableIrq(adapter, 0, 1, 0);
-+ else
-+ DmaEnableDisableIrq(adapter, 0, 1, 1);
-+
-+ IrqDmaEnableDisableIrq(adapter, 1);
-+
-+ SRAMSetMediaDest(adapter, 1);
-+ SRAMSetNetDest(adapter, 1);
-+ SRAMSetCaiDest(adapter, 2);
-+ SRAMSetCaoDest(adapter, 2);
-+ }
-+
-+ if (dma_channel == 1) {
-+ dprintk("%s: Initializing DMA2 channel\n", __FUNCTION__);
-+
-+ subbuffers = 2;
-+
-+ subbufsize = (((adapter->dmaq2.buffer_size / 2) / 4) << 8) | subbuffers;
-+
-+ subbuf0 = adapter->dmaq2.bus_addr & 0xFFFFFFFC;
-+
-+ subbuf1 = ((adapter->dmaq2.bus_addr + adapter->dmaq2.buffer_size / 2) & 0xFFFFFFFC) | 1;
-+
-+ dprintk("%s: first subbuffer address = 0x%x\n", __FUNCTION__, subbuf0);
-+ udelay(1000);
-+ WriteRegDW(adapter, 0x010, subbuf0);
-+
-+ dprintk("%s: subbuffer size = 0x%x\n", __FUNCTION__, (subbufsize >> 8) * 4);
-+ udelay(1000);
-+ WriteRegDW(adapter, 0x014, subbufsize);
-+
-+ dprintk("%s: second buffer address = 0x%x\n", __FUNCTION__, subbuf1);
-+ udelay(1000);
-+ WriteRegDW(adapter, 0x01C, subbuf1);
-+
-+ SRAMSetCaiDest(adapter, 2);
-+ }
-+
-+ return 0;
-+}
-+
-+static void CtrlEnableReceiveData(struct adapter *adapter, u32 op)
-+{
-+ if (op == 0) {
-+ WriteRegOp(adapter, 0x208, 2, ~0x00008000, 0);
-+
-+ adapter->dma_status = adapter->dma_status & ~0x00000004;
-+
-+ } else {
-+
-+ WriteRegOp(adapter, 0x208, 1, 0, 0x00008000);
-+
-+ adapter->dma_status = adapter->dma_status | 0x00000004;
-+ }
-+}
-+
-+/* bit 0 of dma_mask is set to 1 if dma1 channel has to be enabled/disabled
-+ bit 1 of dma_mask is set to 1 if dma2 channel has to be enabled/disabled
-+*/
-+static void DmaStartStop0x2102(struct adapter *adapter, u32 dma_mask, u32 start_stop)
-+{
-+ u32 dma_enable, dma1_enable, dma2_enable;
-+
-+ dprintk("%s: dma_mask=%x\n", __FUNCTION__, dma_mask);
-+
-+ if (start_stop == 1) {
-+ dprintk("%s: starting dma\n", __FUNCTION__);
-+
-+ dma1_enable = 0;
-+ dma2_enable = 0;
-+
-+ if (((dma_mask & 1) != 0) && ((adapter->dma_status & 1) == 0) && (adapter->dmaq1.bus_addr != 0)) {
-+ adapter->dma_status = adapter->dma_status | 1;
-+ dma1_enable = 1;
-+ }
-+
-+ if (((dma_mask & 2) != 0) && ((adapter->dma_status & 2) == 0) && (adapter->dmaq2.bus_addr != 0)) {
-+ adapter->dma_status = adapter->dma_status | 2;
-+ dma2_enable = 1;
-+ }
-+ // enable dma1 and dma2
-+ if ((dma1_enable == 1) && (dma2_enable == 1)) {
-+ WriteRegDW(adapter, 0x000, adapter->dmaq1.bus_addr | 1);
-+ WriteRegDW(adapter, 0x00C, (adapter->dmaq1.bus_addr + adapter->dmaq1.buffer_size / 2) | 1);
-+ WriteRegDW(adapter, 0x010, adapter->dmaq2.bus_addr | 1);
-+
-+ CtrlEnableReceiveData(adapter, 1);
-+
-+ return;
-+ }
-+ // enable dma1
-+ if ((dma1_enable == 1) && (dma2_enable == 0)) {
-+ WriteRegDW(adapter, 0x000, adapter->dmaq1.bus_addr | 1);
-+ WriteRegDW(adapter, 0x00C, (adapter->dmaq1.bus_addr + adapter->dmaq1.buffer_size / 2) | 1);
-+
-+ CtrlEnableReceiveData(adapter, 1);
-+
-+ return;
-+ }
-+ // enable dma2
-+ if ((dma1_enable == 0) && (dma2_enable == 1)) {
-+ WriteRegDW(adapter, 0x010, adapter->dmaq2.bus_addr | 1);
-+
-+ CtrlEnableReceiveData(adapter, 1);
-+
-+ return;
-+ }
-+ // start dma
-+ if ((dma1_enable == 0) && (dma2_enable == 0)) {
-+ CtrlEnableReceiveData(adapter, 1);
-+
-+ return;
-+ }
-+
-+ } else {
-+
-+ dprintk("%s: stoping dma\n", __FUNCTION__);
-+
-+ dma_enable = adapter->dma_status & 0x00000003;
-+
-+ if (((dma_mask & 1) != 0) && ((adapter->dma_status & 1) != 0)) {
-+ dma_enable = dma_enable & 0xFFFFFFFE;
-+ }
-+
-+ if (((dma_mask & 2) != 0) && ((adapter->dma_status & 2) != 0)) {
-+ dma_enable = dma_enable & 0xFFFFFFFD;
-+ }
-+ //stop dma
-+ if ((dma_enable == 0) && ((adapter->dma_status & 4) != 0)) {
-+ CtrlEnableReceiveData(adapter, 0);
-+
-+ udelay(3000);
-+ }
-+ //disable dma1
-+ if (((dma_mask & 1) != 0) && ((adapter->dma_status & 1) != 0) && (adapter->dmaq1.bus_addr != 0)) {
-+ WriteRegDW(adapter, 0x000, adapter->dmaq1.bus_addr);
-+ WriteRegDW(adapter, 0x00C, (adapter->dmaq1.bus_addr + adapter->dmaq1.buffer_size / 2) | 1);
-+
-+ adapter->dma_status = adapter->dma_status & ~0x00000001;
-+ }
-+ //disable dma2
-+ if (((dma_mask & 2) != 0) && ((adapter->dma_status & 2) != 0) && (adapter->dmaq2.bus_addr != 0)) {
-+ WriteRegDW(adapter, 0x010, adapter->dmaq2.bus_addr);
-+
-+ adapter->dma_status = adapter->dma_status & ~0x00000002;
-+ }
-+ }
-+}
-+
-+static void OpenStream(struct adapter *adapter, u32 pid)
-+{
-+ u32 dma_mask;
-+
-+ if (adapter->capturing == 0)
-+ adapter->capturing = 1;
-+
-+ FilterEnableMaskFilter(adapter, 1);
-+
-+ AddPID(adapter, pid);
-+
-+ dprintk("%s: adapter->dma_status=%x\n", __FUNCTION__, adapter->dma_status);
-+
-+ if ((adapter->dma_status & 7) != 7) {
-+ dma_mask = 0;
-+
-+ if (((adapter->dma_status & 0x10000000) != 0) && ((adapter->dma_status & 1) == 0)) {
-+ dma_mask = dma_mask | 1;
-+
-+ adapter->dmaq1.head = 0;
-+ adapter->dmaq1.tail = 0;
-+
-+ memset(adapter->dmaq1.buffer, 0, adapter->dmaq1.buffer_size);
-+ }
-+
-+ if (((adapter->dma_status & 0x20000000) != 0) && ((adapter->dma_status & 2) == 0)) {
-+ dma_mask = dma_mask | 2;
-+
-+ adapter->dmaq2.head = 0;
-+ adapter->dmaq2.tail = 0;
-+ }
-+
-+ if (dma_mask != 0) {
-+ IrqDmaEnableDisableIrq(adapter, 1);
-+
-+ DmaStartStop0x2102(adapter, dma_mask, 1);
-+ }
-+ }
-+}
-+
-+static void CloseStream(struct adapter *adapter, u32 pid)
-+{
-+ u32 dma_mask;
-+
-+ if (adapter->capturing != 0)
-+ adapter->capturing = 0;
-+
-+ dprintk("%s: dma_status=%x\n", __FUNCTION__, adapter->dma_status);
-+
-+ dma_mask = 0;
-+
-+ if ((adapter->dma_status & 1) != 0)
-+ dma_mask = dma_mask | 0x00000001;
-+ if ((adapter->dma_status & 2) != 0)
-+ dma_mask = dma_mask | 0x00000002;
-+
-+ if (dma_mask != 0) {
-+ DmaStartStop0x2102(adapter, dma_mask, 0);
-+ }
-+
-+ RemovePID(adapter, pid);
-+}
-+
-+static void InterruptServiceDMA1(struct adapter *adapter)
-+{
-+ struct dvb_demux *dvbdmx = &adapter->demux;
-+ struct packet_header packet_header;
-+
-+ int nCurDmaCounter;
-+ u32 nNumBytesParsed;
-+ u32 nNumNewBytesTransferred;
-+ u32 dwDefaultPacketSize = 188;
-+ u8 gbTmpBuffer[188];
-+ u8 *pbDMABufCurPos;
-+
-+ nCurDmaCounter = readl(adapter->io_mem + 0x008) - adapter->dmaq1.bus_addr;
-+ nCurDmaCounter = (nCurDmaCounter / dwDefaultPacketSize) * dwDefaultPacketSize;
-+
-+ if ((nCurDmaCounter < 0) || (nCurDmaCounter > adapter->dmaq1.buffer_size)) {
-+ dprintk("%s: dma counter outside dma buffer\n", __FUNCTION__);
-+ return;
-+ }
-+
-+ adapter->dmaq1.head = nCurDmaCounter;
-+
-+ if (adapter->dmaq1.tail <= nCurDmaCounter) {
-+ nNumNewBytesTransferred = nCurDmaCounter - adapter->dmaq1.tail;
-+
-+ } else {
-+
-+ nNumNewBytesTransferred = (adapter->dmaq1.buffer_size - adapter->dmaq1.tail) + nCurDmaCounter;
-+ }
-+
-+// dprintk("%s: nCurDmaCounter = %d\n" , __FUNCTION__, nCurDmaCounter);
-+// dprintk("%s: dmaq1.tail = %d\n" , __FUNCTION__, adapter->dmaq1.tail):
-+// dprintk("%s: BytesTransferred = %d\n" , __FUNCTION__, nNumNewBytesTransferred);
-+
-+ if (nNumNewBytesTransferred < dwDefaultPacketSize)
-+ return;
-+
-+ nNumBytesParsed = 0;
-+
-+ while (nNumBytesParsed < nNumNewBytesTransferred) {
-+ pbDMABufCurPos = adapter->dmaq1.buffer + adapter->dmaq1.tail;
-+
-+ if (adapter->dmaq1.buffer + adapter->dmaq1.buffer_size < adapter->dmaq1.buffer + adapter->dmaq1.tail + 188) {
-+ memcpy(gbTmpBuffer, adapter->dmaq1.buffer + adapter->dmaq1.tail, adapter->dmaq1.buffer_size - adapter->dmaq1.tail);
-+ memcpy(gbTmpBuffer + (adapter->dmaq1.buffer_size - adapter->dmaq1.tail), adapter->dmaq1.buffer, (188 - (adapter->dmaq1.buffer_size - adapter->dmaq1.tail)));
-+
-+ pbDMABufCurPos = gbTmpBuffer;
-+ }
-+
-+ if (adapter->capturing != 0) {
-+ u32 *dq = (u32 *) pbDMABufCurPos;
-+
-+ packet_header.sync_byte = *dq & 0x000000FF;
-+ packet_header.transport_error_indicator = *dq & 0x00008000;
-+ packet_header.payload_unit_start_indicator = *dq & 0x00004000;
-+ packet_header.transport_priority = *dq & 0x00002000;
-+ packet_header.pid = ((*dq & 0x00FF0000) >> 0x10) | (*dq & 0x00001F00);
-+ packet_header.transport_scrambling_control = *dq >> 0x1E;
-+ packet_header.adaptation_field_control = (*dq & 0x30000000) >> 0x1C;
-+ packet_header.continuity_counter = (*dq & 0x0F000000) >> 0x18;
-+
-+ if ((packet_header.sync_byte == 0x47) && (packet_header.transport_error_indicator == 0) && (packet_header.pid != 0x1FFF)) {
-+ if (CheckPID(adapter, packet_header.pid & 0x0000FFFF) != 0) {
-+ dvb_dmx_swfilter_packets(dvbdmx, pbDMABufCurPos, dwDefaultPacketSize / 188);
-+
-+ } else {
-+
-+// dprintk("%s: pid=%x\n", __FUNCTION__, packet_header.pid);
-+ }
-+ }
-+ }
-+
-+ nNumBytesParsed = nNumBytesParsed + dwDefaultPacketSize;
-+
-+ adapter->dmaq1.tail = adapter->dmaq1.tail + dwDefaultPacketSize;
-+
-+ if (adapter->dmaq1.tail >= adapter->dmaq1.buffer_size)
-+ adapter->dmaq1.tail = adapter->dmaq1.tail - adapter->dmaq1.buffer_size;
-+ };
-+}
-+
-+static void InterruptServiceDMA2(struct adapter *adapter)
-+{
-+ printk("%s:\n", __FUNCTION__);
-+}
-+
-+static irqreturn_t isr(int irq, void *dev_id, struct pt_regs *regs)
-+{
-+ struct adapter *tmp = dev_id;
-+
-+ u32 value;
-+
-+// dprintk("%s:\n", __FUNCTION__);
-+
-+ spin_lock_irq(&tmp->lock);
-+
-+ if (0 == ((value = ReadRegDW(tmp, 0x20C)) & 0x0F)) {
-+ spin_unlock_irq(&tmp->lock);
-+ return IRQ_NONE;
-+ }
-+
-+ while (value != 0) {
-+ if ((value & 0x03) != 0)
-+ InterruptServiceDMA1(tmp);
-+ if ((value & 0x0C) != 0)
-+ InterruptServiceDMA2(tmp);
-+ value = ReadRegDW(tmp, 0x20C) & 0x0F;
-+ }
-+
-+ spin_unlock_irq(&tmp->lock);
-+ return IRQ_HANDLED;
-+}
-+
-+static void Initdmaqueue(struct adapter *adapter)
-+{
-+ dma_addr_t dma_addr;
-+
-+ if (adapter->dmaq1.buffer != 0)
-+ return;
-+
-+ adapter->dmaq1.head = 0;
-+ adapter->dmaq1.tail = 0;
-+ adapter->dmaq1.buffer = 0;
-+
-+ adapter->dmaq1.buffer = pci_alloc_consistent(adapter->pdev, SizeOfBufDMA1 + 0x80, &dma_addr);
-+
-+ if (adapter->dmaq1.buffer != 0) {
-+ memset(adapter->dmaq1.buffer, 0, SizeOfBufDMA1);
-+
-+ adapter->dmaq1.bus_addr = dma_addr;
-+ adapter->dmaq1.buffer_size = SizeOfBufDMA1;
-+
-+ DmaInitDMA(adapter, 0);
-+
-+ adapter->dma_status = adapter->dma_status | 0x10000000;
-+
-+ dprintk("%s: allocated dma buffer at 0x%x, length=%d\n", __FUNCTION__, (int) adapter->dmaq1.buffer, SizeOfBufDMA1);
-+
-+ } else {
-+
-+ adapter->dma_status = adapter->dma_status & ~0x10000000;
-+ }
-+
-+ if (adapter->dmaq2.buffer != 0)
-+ return;
-+
-+ adapter->dmaq2.head = 0;
-+ adapter->dmaq2.tail = 0;
-+ adapter->dmaq2.buffer = 0;
-+
-+ adapter->dmaq2.buffer = pci_alloc_consistent(adapter->pdev, SizeOfBufDMA2 + 0x80, &dma_addr);
-+
-+ if (adapter->dmaq2.buffer != 0) {
-+ memset(adapter->dmaq2.buffer, 0, SizeOfBufDMA2);
-+
-+ adapter->dmaq2.bus_addr = dma_addr;
-+ adapter->dmaq2.buffer_size = SizeOfBufDMA2;
-+
-+ DmaInitDMA(adapter, 1);
-+
-+ adapter->dma_status = adapter->dma_status | 0x20000000;
-+
-+ dprintk("%s: allocated dma buffer at 0x%x, length=%d\n", __FUNCTION__, (int) adapter->dmaq2.buffer, (int) SizeOfBufDMA2);
-+
-+ } else {
-+
-+ adapter->dma_status = adapter->dma_status & ~0x20000000;
-+ }
-+}
-+
-+static void Freedmaqueue(struct adapter *adapter)
-+{
-+ if (adapter->dmaq1.buffer != 0) {
-+ pci_free_consistent(adapter->pdev, SizeOfBufDMA1 + 0x80, adapter->dmaq1.buffer, adapter->dmaq1.bus_addr);
-+
-+ adapter->dmaq1.bus_addr = 0;
-+ adapter->dmaq1.head = 0;
-+ adapter->dmaq1.tail = 0;
-+ adapter->dmaq1.buffer_size = 0;
-+ adapter->dmaq1.buffer = 0;
-+ }
-+
-+ if (adapter->dmaq2.buffer != 0) {
-+ pci_free_consistent(adapter->pdev, SizeOfBufDMA2 + 0x80, adapter->dmaq2.buffer, adapter->dmaq2.bus_addr);
-+
-+ adapter->dmaq2.bus_addr = 0;
-+ adapter->dmaq2.head = 0;
-+ adapter->dmaq2.tail = 0;
-+ adapter->dmaq2.buffer_size = 0;
-+ adapter->dmaq2.buffer = 0;
-+ }
-+}
-+
-+static void FreeAdapterObject(struct adapter *adapter)
-+{
-+ dprintk("%s:\n", __FUNCTION__);
-+
-+ CloseStream(adapter, 0);
-+
-+ if (adapter->irq != 0)
-+ free_irq(adapter->irq, adapter);
-+
-+ Freedmaqueue(adapter);
-+
-+ if (adapter->io_mem != 0)
-+ iounmap((void *) adapter->io_mem);
-+
-+ if (adapter != 0)
-+ kfree(adapter);
-+}
-+
-+static struct pci_driver skystar2_pci_driver;
-+
-+static int ClaimAdapter(struct adapter *adapter)
-+{
-+ struct pci_dev *pdev = adapter->pdev;
-+
-+ u16 var;
-+
-+ if (!request_region(pci_resource_start(pdev, 1), pci_resource_len(pdev, 1), skystar2_pci_driver.name))
-+ return -EBUSY;
-+
-+ if (!request_mem_region(pci_resource_start(pdev, 0), pci_resource_len(pdev, 0), skystar2_pci_driver.name))
-+ return -EBUSY;
-+
-+ pci_read_config_byte(pdev, PCI_CLASS_REVISION, &adapter->card_revision);
-+
-+ dprintk("%s: card revision %x \n", __FUNCTION__, adapter->card_revision);
-+
-+ if (pci_enable_device(pdev))
-+ return -EIO;
-+
-+ pci_read_config_word(pdev, 4, &var);
-+
-+ if ((var & 4) == 0)
-+ pci_set_master(pdev);
-+
-+ adapter->io_port = pdev->resource[1].start;
-+
-+ adapter->io_mem = (u32) ioremap(pdev->resource[0].start, 0x800);
-+
-+ if (adapter->io_mem == 0) {
-+ dprintk("%s: can not map io memory\n", __FUNCTION__);
-+
-+ return 2;
-+ }
-+
-+ dprintk("%s: io memory maped at %x\n", __FUNCTION__, adapter->io_mem);
-+
-+ return 1;
-+}
-+
-+/*
-+static int SLL_reset_FlexCOP(struct adapter *adapter)
-+{
-+ WriteRegDW(adapter, 0x208, 0);
-+ WriteRegDW(adapter, 0x210, 0xB2FF);
-+
-+ return 0;
-+}
-+*/
-+
-+static int DriverInitialize(struct pci_dev * pdev)
-+{
-+ struct adapter *adapter;
-+ u32 tmp;
-+ u8 key[16];
-+
-+ if (!(adapter = kmalloc(sizeof(struct adapter), GFP_KERNEL))) {
-+ dprintk("%s: out of memory!\n", __FUNCTION__);
-+
-+ return -ENOMEM;
-+ }
-+
-+ memset(adapter, 0, sizeof(struct adapter));
-+
-+ pci_set_drvdata(pdev,adapter);
-+
-+ adapter->pdev = pdev;
-+ adapter->irq = pdev->irq;
-+
-+ if ((ClaimAdapter(adapter)) != 1) {
-+ FreeAdapterObject(adapter);
-+
-+ return -ENODEV;
-+ }
-+
-+ IrqDmaEnableDisableIrq(adapter, 0);
-+
-+ if (request_irq(pdev->irq, isr, 0x4000000, "Skystar2", adapter) != 0) {
-+ dprintk("%s: unable to allocate irq=%d !\n", __FUNCTION__, pdev->irq);
-+
-+ FreeAdapterObject(adapter);
-+
-+ return -ENODEV;
-+ }
-+
-+ ReadRegDW(adapter, 0x208);
-+ WriteRegDW(adapter, 0x208, 0);
-+ WriteRegDW(adapter, 0x210, 0xB2FF);
-+ WriteRegDW(adapter, 0x208, 0x40);
-+
-+ InitPIDsInfo(adapter);
-+
-+ PidSetGroupPID(adapter, 0);
-+ PidSetGroupMASK(adapter, 0x1FE0);
-+ PidSetStream1PID(adapter, 0x1FFF);
-+ PidSetStream2PID(adapter, 0x1FFF);
-+ PidSetPmtPID(adapter, 0x1FFF);
-+ PidSetPcrPID(adapter, 0x1FFF);
-+ PidSetEcmPID(adapter, 0x1FFF);
-+ PidSetEmmPID(adapter, 0x1FFF);
-+
-+ Initdmaqueue(adapter);
-+
-+ if ((adapter->dma_status & 0x30000000) == 0) {
-+ FreeAdapterObject(adapter);
-+
-+ return -ENODEV;
-+ }
-+
-+ adapter->b2c2_revision = (ReadRegDW(adapter, 0x204) >> 0x18);
-+
-+ if ((adapter->b2c2_revision != 0x82) && (adapter->b2c2_revision != 0xC3))
-+ if (adapter->b2c2_revision != 0x82) {
-+ dprintk("%s: The revision of the FlexCopII chip on your card is - %d\n", __FUNCTION__, adapter->b2c2_revision);
-+ dprintk("%s: This driver works now only with FlexCopII(rev.130) and FlexCopIIB(rev.195).\n", __FUNCTION__);
-+
-+ FreeAdapterObject(adapter);
-+
-+ return -ENODEV;
-+ }
-+
-+ tmp = ReadRegDW(adapter, 0x204);
-+
-+ WriteRegDW(adapter, 0x204, 0);
-+ mdelay(20);
-+
-+ WriteRegDW(adapter, 0x204, tmp);
-+ mdelay(10);
-+
-+ tmp = ReadRegDW(adapter, 0x308);
-+ WriteRegDW(adapter, 0x308, 0x4000 | tmp);
-+
-+ adapter->dwSramType = 0x10000;
-+
-+ SLL_detectSramSize(adapter);
-+
-+ dprintk("%s sram length = %d, sram type= %x\n", __FUNCTION__, SRAM_length(adapter), adapter->dwSramType);
-+
-+ SRAMSetMediaDest(adapter, 1);
-+ SRAMSetNetDest(adapter, 1);
-+
-+ CtrlEnableSmc(adapter, 0);
-+
-+ SRAMSetCaiDest(adapter, 2);
-+ SRAMSetCaoDest(adapter, 2);
-+
-+ DmaEnableDisableIrq(adapter, 1, 0, 0);
-+
-+ if (EEPROM_getMacAddr(adapter, 0, adapter->mac_addr) != 0) {
-+ printk("%s MAC address = %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x \n", __FUNCTION__, adapter->mac_addr[0], adapter->mac_addr[1], adapter->mac_addr[2], adapter->mac_addr[3], adapter->mac_addr[4], adapter->mac_addr[5], adapter->mac_addr[6], adapter->mac_addr[7]
-+ );
-+
-+ CASetMacDstAddrFilter(adapter, adapter->mac_addr);
-+ CtrlEnableMAC(adapter, 1);
-+ }
-+
-+ EEPROM_readKey(adapter, key, 16);
-+
-+ printk("%s key = \n %02x %02x %02x %02x \n %02x %02x %02x %02x \n %02x %02x %02x %02x \n %02x %02x %02x %02x \n", __FUNCTION__, key[0], key[1], key[2], key[3], key[4], key[5], key[6], key[7], key[8], key[9], key[10], key[11], key[12], key[13], key[14], key[15]);
-+
-+ adapter->lock = SPIN_LOCK_UNLOCKED;
-+
-+ return 0;
-+}
-+
-+static void DriverHalt(struct pci_dev *pdev)
-+{
-+ struct adapter *adapter;
-+
-+ adapter = pci_get_drvdata(pdev);
-+
-+ IrqDmaEnableDisableIrq(adapter, 0);
-+
-+ CtrlEnableReceiveData(adapter, 0);
-+
-+ FreeAdapterObject(adapter);
-+
-+ pci_set_drvdata(pdev, NULL);
-+
-+ release_region(pci_resource_start(pdev, 1), pci_resource_len(pdev, 1));
-+
-+ release_mem_region(pci_resource_start(pdev, 0), pci_resource_len(pdev, 0));
-+}
-+
-+static int dvb_start_feed(struct dvb_demux_feed *dvbdmxfeed)
-+{
-+ struct dvb_demux *dvbdmx = dvbdmxfeed->demux;
-+ struct adapter *adapter = (struct adapter *) dvbdmx->priv;
-+
-+ dprintk("%s: PID=%d, type=%d\n", __FUNCTION__, dvbdmxfeed->pid, dvbdmxfeed->type);
-+
-+ OpenStream(adapter, dvbdmxfeed->pid);
-+
-+ return 0;
-+}
-+
-+static int dvb_stop_feed(struct dvb_demux_feed *dvbdmxfeed)
-+{
-+ struct dvb_demux *dvbdmx = dvbdmxfeed->demux;
-+ struct adapter *adapter = (struct adapter *) dvbdmx->priv;
-+
-+ dprintk("%s: PID=%d, type=%d\n", __FUNCTION__, dvbdmxfeed->pid, dvbdmxfeed->type);
-+
-+ CloseStream(adapter, dvbdmxfeed->pid);
-+
-+ return 0;
-+}
-+
-+/* lnb control */
-+static void set_tuner_tone(struct adapter *adapter, u8 tone)
-+{
-+ u16 wzHalfPeriodFor45MHz[] = { 0x01FF, 0x0154, 0x00FF, 0x00CC };
-+ u16 ax;
-+
-+ dprintk("%s: %u\n", __FUNCTION__, tone);
-+
-+ switch (tone) {
-+ case 1:
-+ ax = wzHalfPeriodFor45MHz[0];
-+ break;
-+ case 2:
-+ ax = wzHalfPeriodFor45MHz[1];
-+ break;
-+ case 3:
-+ ax = wzHalfPeriodFor45MHz[2];
-+ break;
-+ case 4:
-+ ax = wzHalfPeriodFor45MHz[3];
-+ break;
-+
-+ default:
-+ ax = 0;
-+ }
-+
-+ if (ax != 0) {
-+ WriteRegDW(adapter, 0x200, ((ax << 0x0F) + (ax & 0x7FFF)) | 0x40000000);
-+
-+ } else {
-+
-+ WriteRegDW(adapter, 0x200, 0x40FF8000);
-+ }
-+}
-+
-+static void set_tuner_polarity(struct adapter *adapter, u8 polarity)
-+{
-+ u32 var;
-+
-+ dprintk("%s : polarity = %u \n", __FUNCTION__, polarity);
-+
-+ var = ReadRegDW(adapter, 0x204);
-+
-+ if (polarity == 0) {
-+ dprintk("%s: LNB power off\n", __FUNCTION__);
-+ var = var | 1;
-+ };
-+
-+ if (polarity == 1) {
-+ var = var & ~1;
-+ var = var & ~4;
-+ };
-+
-+ if (polarity == 2) {
-+ var = var & ~1;
-+ var = var | 4;
-+ }
-+
-+ WriteRegDW(adapter, 0x204, var);
-+}
-+
-+static int flexcop_diseqc_ioctl(struct dvb_frontend *fe, unsigned int cmd, void *arg)
-+{
-+ struct adapter *adapter = fe->before_after_data;
-+
-+ switch (cmd) {
-+ case FE_SLEEP:
-+ {
-+ printk("%s: FE_SLEEP\n", __FUNCTION__);
-+
-+ set_tuner_polarity(adapter, 0);
-+
-+ // return -EOPNOTSUPP, to make DVB core also send "FE_SLEEP" command to frontend.
-+ return -EOPNOTSUPP;
-+ }
-+
-+ case FE_SET_VOLTAGE:
-+ {
-+ dprintk("%s: FE_SET_VOLTAGE\n", __FUNCTION__);
-+
-+ switch ((fe_sec_voltage_t) arg) {
-+ case SEC_VOLTAGE_13:
-+
-+ printk("%s: SEC_VOLTAGE_13, %x\n", __FUNCTION__, SEC_VOLTAGE_13);
-+
-+ set_tuner_polarity(adapter, 1);
-+
-+ break;
-+
-+ case SEC_VOLTAGE_18:
-+
-+ printk("%s: SEC_VOLTAGE_18, %x\n", __FUNCTION__, SEC_VOLTAGE_18);
-+
-+ set_tuner_polarity(adapter, 2);
-+
-+ break;
-+
-+ default:
-+
-+ return -EINVAL;
-+ };
-+
-+ break;
-+ }
-+
-+ case FE_SET_TONE:
-+ {
-+ dprintk("%s: FE_SET_TONE\n", __FUNCTION__);
-+
-+ switch ((fe_sec_tone_mode_t) arg) {
-+ case SEC_TONE_ON:
-+
-+ printk("%s: SEC_TONE_ON, %x\n", __FUNCTION__, SEC_TONE_ON);
-+
-+ set_tuner_tone(adapter, 1);
-+
-+ break;
-+
-+ case SEC_TONE_OFF:
-+
-+ printk("%s: SEC_TONE_OFF, %x\n", __FUNCTION__, SEC_TONE_OFF);
-+
-+ set_tuner_tone(adapter, 0);
-+
-+ break;
-+
-+ default:
-+
-+ return -EINVAL;
-+ };
-+
-+ break;
-+ }
-+
-+ default:
-+
-+ return -EOPNOTSUPP;
-+ };
-+
-+ return 0;
-+}
-+
-+static int skystar2_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
-+{
-+ struct adapter *adapter;
-+ struct dvb_adapter *dvb_adapter;
-+ struct dvb_demux *dvbdemux;
-+
-+ int ret;
-+
-+ if (pdev == NULL)
-+ return -ENODEV;
-+
-+ if (DriverInitialize(pdev) != 0)
-+ return -ENODEV;
-+
-+ dvb_register_adapter(&dvb_adapter, skystar2_pci_driver.name);
-+
-+ if (dvb_adapter == NULL) {
-+ printk("%s: Error registering DVB adapter\n", __FUNCTION__);
-+
-+ DriverHalt(pdev);
-+
-+ return -ENODEV;
-+ }
-+
-+ adapter = (struct adapter *) pci_get_drvdata(pdev);
-+
-+ adapter->dvb_adapter = dvb_adapter;
-+
-+ init_MUTEX(&adapter->i2c_sem);
-+
-+ adapter->i2c_bus = dvb_register_i2c_bus(master_xfer, adapter, adapter->dvb_adapter, 0);
-+
-+ if (!adapter->i2c_bus)
-+ return -ENOMEM;
-+
-+ dvb_add_frontend_ioctls(adapter->dvb_adapter, flexcop_diseqc_ioctl, NULL, adapter);
-+
-+ dvbdemux = &adapter->demux;
-+
-+ dvbdemux->priv = (void *) adapter;
-+ dvbdemux->filternum = 32;
-+ dvbdemux->feednum = 32;
-+ dvbdemux->start_feed = dvb_start_feed;
-+ dvbdemux->stop_feed = dvb_stop_feed;
-+ dvbdemux->write_to_decoder = 0;
-+ dvbdemux->dmx.capabilities = (DMX_TS_FILTERING | DMX_SECTION_FILTERING | DMX_MEMORY_BASED_FILTERING);
-+
-+ dvb_dmx_init(&adapter->demux);
-+
-+ adapter->hw_frontend.source = DMX_FRONTEND_0;
-+
-+ adapter->dmxdev.filternum = 32;
-+ adapter->dmxdev.demux = &dvbdemux->dmx;
-+ adapter->dmxdev.capabilities = 0;
-+
-+ dvb_dmxdev_init(&adapter->dmxdev, adapter->dvb_adapter);
-+
-+ ret = dvbdemux->dmx.add_frontend(&dvbdemux->dmx, &adapter->hw_frontend);
-+ if (ret < 0)
-+ return ret;
-+
-+ adapter->mem_frontend.source = DMX_MEMORY_FE;
-+
-+ ret = dvbdemux->dmx.add_frontend(&dvbdemux->dmx, &adapter->mem_frontend);
-+ if (ret < 0)
-+ return ret;
-+
-+ ret = dvbdemux->dmx.connect_frontend(&dvbdemux->dmx, &adapter->hw_frontend);
-+ if (ret < 0)
-+ return ret;
-+
-+ dvb_net_init(adapter->dvb_adapter, &adapter->dvbnet, &dvbdemux->dmx);
-+ return 0;
-+}
-+
-+static void skystar2_remove(struct pci_dev *pdev)
-+{
-+ struct adapter *adapter;
-+ struct dvb_demux *dvbdemux;
-+
-+ if (pdev == NULL)
-+ return;
-+
-+ adapter = pci_get_drvdata(pdev);
-+
-+ if (adapter != NULL) {
-+ dvb_net_release(&adapter->dvbnet);
-+ dvbdemux = &adapter->demux;
-+
-+ dvbdemux->dmx.close(&dvbdemux->dmx);
-+ dvbdemux->dmx.remove_frontend(&dvbdemux->dmx, &adapter->hw_frontend);
-+ dvbdemux->dmx.remove_frontend(&dvbdemux->dmx, &adapter->mem_frontend);
-+
-+ dvb_dmxdev_release(&adapter->dmxdev);
-+ dvb_dmx_release(&adapter->demux);
-+
-+ if (adapter->dvb_adapter != NULL) {
-+ dvb_remove_frontend_ioctls(adapter->dvb_adapter, flexcop_diseqc_ioctl, NULL);
-+
-+ if (adapter->i2c_bus != NULL)
-+ dvb_unregister_i2c_bus(master_xfer, adapter->i2c_bus->adapter, adapter->i2c_bus->id);
-+
-+ dvb_unregister_adapter(adapter->dvb_adapter);
-+ }
-+
-+ DriverHalt(pdev);
-+ }
-+}
-+
-+static struct pci_device_id skystar2_pci_tbl[] = {
-+ {0x000013D0, 0x00002103, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000},
-+ {0,},
-+};
-+
-+static struct pci_driver skystar2_pci_driver = {
-+ .name = "Technisat SkyStar2 driver",
-+ .id_table = skystar2_pci_tbl,
-+ .probe = skystar2_probe,
-+ .remove = skystar2_remove,
-+};
-+
-+static int skystar2_init(void)
-+{
-+ return pci_module_init(&skystar2_pci_driver);
-+}
-+
-+static void skystar2_cleanup(void)
-+{
-+ pci_unregister_driver(&skystar2_pci_driver);
-+}
-+
-+module_init(skystar2_init);
-+module_exit(skystar2_cleanup);
-+
-+MODULE_DESCRIPTION("Technisat SkyStar2 DVB PCI Driver");
-+MODULE_LICENSE("GPL");
---- linux-2.6.0-test1/drivers/media/dvb/dvb-core/dvb_demux.c 2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/dvb/dvb-core/dvb_demux.c 2003-07-19 17:03:49.000000000 -0700
-@@ -403,13 +403,16 @@ void dvb_dmx_swfilter(struct dvb_demux *
- {
- int p = 0,i, j;
-
-+ spin_lock(&demux->lock);
-+
- if ((i = demux->tsbufp)) {
- if (count < (j=188-i)) {
- memcpy(&demux->tsbuf[i], buf, count);
- demux->tsbufp += count;
-- return;
-+ goto bailout;
- }
- memcpy(&demux->tsbuf[i], buf, j);
-+ if (demux->tsbuf[0] == 0x47)
- dvb_dmx_swfilter_packet(demux, demux->tsbuf);
- demux->tsbufp = 0;
- p += j;
-@@ -424,11 +427,14 @@ void dvb_dmx_swfilter(struct dvb_demux *
- i = count-p;
- memcpy(demux->tsbuf, buf+p, i);
- demux->tsbufp=i;
-- return;
-+ goto bailout;
- }
- } else
- p++;
- }
-+
-+bailout:
-+ spin_unlock(&demux->lock);
- }
-
-
-@@ -1030,9 +1036,11 @@ static int dvbdmx_write(struct dmx_demux
-
- if (down_interruptible (&dvbdemux->mutex))
- return -ERESTARTSYS;
--
- dvb_dmx_swfilter(dvbdemux, buf, count);
- up(&dvbdemux->mutex);
-+
-+ if (signal_pending(current))
-+ return -EINTR;
- return count;
- }
-
-@@ -1110,8 +1118,8 @@ static int dvbdmx_get_pes_pids(struct dm
- return 0;
- }
-
--int
--dvb_dmx_init(struct dvb_demux *dvbdemux)
-+
-+int dvb_dmx_init(struct dvb_demux *dvbdemux)
- {
- int i, err;
- struct dmx_demux *dmx = &dvbdemux->dmx;
-@@ -1181,8 +1189,8 @@ dvb_dmx_init(struct dvb_demux *dvbdemux)
- return 0;
- }
-
--int
--dvb_dmx_release(struct dvb_demux *dvbdemux)
-+
-+int dvb_dmx_release(struct dvb_demux *dvbdemux)
- {
- struct dmx_demux *dmx = &dvbdemux->dmx;
-
---- linux-2.6.0-test1/drivers/media/dvb/dvb-core/dvbdev.c 2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/dvb/dvb-core/dvbdev.c 2003-07-19 17:03:49.000000000 -0700
-@@ -29,8 +29,6 @@
- #include <linux/sched.h>
- #include <linux/init.h>
- #include <linux/slab.h>
--#include <linux/version.h>
--#include <asm/semaphore.h>
-
- #include "dvbdev.h"
- #include "dvb_functions.h"
---- linux-2.6.0-test1/drivers/media/dvb/dvb-core/dvbdev.h 2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/dvb/dvb-core/dvbdev.h 2003-07-19 17:03:49.000000000 -0700
-@@ -27,8 +27,9 @@
- #include <linux/types.h>
- #include <linux/poll.h>
- #include <linux/fs.h>
--#include <linux/devfs_fs_kernel.h>
- #include <linux/list.h>
-+#include <linux/version.h>
-+#include <linux/devfs_fs_kernel.h>
-
- #define DVB_MAJOR 250
-
-@@ -48,6 +49,7 @@ struct dvb_adapter {
- struct list_head list_head;
- struct list_head device_list;
- const char *name;
-+ u8 proposed_mac [6];
- };
-
-
---- linux-2.6.0-test1/drivers/media/dvb/dvb-core/dvb_frontend.c 2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/dvb/dvb-core/dvb_frontend.c 2003-07-19 17:03:49.000000000 -0700
-@@ -263,8 +263,14 @@ static int dvb_frontend_get_event (struc
- if (flags & O_NONBLOCK)
- return -EWOULDBLOCK;
-
-+ up(&fe->sem);
-+
- ret = wait_event_interruptible (events->wait_queue,
- events->eventw != events->eventr);
-+
-+ if (down_interruptible (&fe->sem))
-+ return -ERESTARTSYS;
-+
- if (ret < 0)
- return ret;
- }
---- linux-2.6.0-test1/drivers/media/dvb/dvb-core/dvb_functions.c 2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/dvb/dvb-core/dvb_functions.c 2003-07-19 17:03:49.000000000 -0700
-@@ -1,11 +1,11 @@
- #include <linux/version.h>
--#include <linux/string.h>
--#include <linux/smp_lock.h>
--#include <linux/fs.h>
- #include <linux/errno.h>
-+#include <linux/fs.h>
-+#include <linux/string.h>
- #include <linux/module.h>
- #include <linux/ioctl.h>
- #include <linux/slab.h>
-+#include <linux/smp_lock.h>
- #include <asm/uaccess.h>
-
- void dvb_kernel_thread_setup (const char *thread_name)
---- linux-2.6.0-test1/drivers/media/dvb/dvb-core/dvb_functions.h 2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/dvb/dvb-core/dvb_functions.h 2003-07-19 17:03:49.000000000 -0700
-@@ -1,6 +1,8 @@
- #ifndef __DVB_FUNCTIONS_H__
- #define __DVB_FUNCTIONS_H__
-
-+#include <linux/version.h>
-+
- /**
- * a sleeping delay function, waits i ms
- *
---- linux-2.6.0-test1/drivers/media/dvb/dvb-core/dvb_net.c 2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/dvb/dvb-core/dvb_net.c 2003-07-19 17:03:49.000000000 -0700
-@@ -24,22 +24,25 @@
- *
- */
-
--#include <linux/errno.h>
--#include <linux/kernel.h>
--#include <linux/string.h>
--#include <linux/ioctl.h>
--#include <linux/slab.h>
--#include <asm/uaccess.h>
--
- #include <linux/dvb/net.h>
-+#include <asm/uaccess.h>
-
- #include "dvb_demux.h"
- #include "dvb_net.h"
- #include "dvb_functions.h"
-
-+
-+#if 1
-+#define dprintk(x...) printk(x)
-+#else
-+#define dprintk(x...)
-+#endif
-+
-+
- #define DVB_NET_MULTICAST_MAX 10
-
- struct dvb_net_priv {
-+ int in_use;
- struct net_device_stats stats;
- char name[6];
- u16 pid;
-@@ -49,10 +52,17 @@ struct dvb_net_priv {
- int multi_num;
- struct dmx_section_filter *multi_secfilter[DVB_NET_MULTICAST_MAX];
- unsigned char multi_macs[DVB_NET_MULTICAST_MAX][6];
-- int mode;
-+ int rx_mode;
-+#define RX_MODE_UNI 0
-+#define RX_MODE_MULTI 1
-+#define RX_MODE_ALL_MULTI 2
-+#define RX_MODE_PROMISC 3
-+ struct work_struct set_multicast_list_wq;
-+ struct work_struct restart_net_feed_wq;
- };
-
--/*
-+
-+/**
- * Determine the packet's protocol ID. The rule here is that we
- * assume 802.3 if the type field is short enough to be a length.
- * This is normal practice and works for any 'now in use' protocol.
-@@ -60,8 +70,8 @@ struct dvb_net_priv {
- * stolen from eth.c out of the linux kernel, hacked for dvb-device
- * by Michael Holzt <kju@debian.org>
- */
--
--unsigned short my_eth_type_trans(struct sk_buff *skb, struct net_device *dev)
-+static unsigned short dvb_net_eth_type_trans(struct sk_buff *skb,
-+ struct net_device *dev)
- {
- struct ethhdr *eth;
- unsigned char *rawp;
-@@ -70,8 +80,7 @@ unsigned short my_eth_type_trans(struct
- skb_pull(skb,dev->hard_header_len);
- eth= skb->mac.ethernet;
-
-- if(*eth->h_dest&1)
-- {
-+ if (*eth->h_dest & 1) {
- if(memcmp(eth->h_dest,dev->broadcast, ETH_ALEN)==0)
- skb->pkt_type=PACKET_BROADCAST;
- else
-@@ -83,7 +92,7 @@ unsigned short my_eth_type_trans(struct
-
- rawp = skb->data;
-
-- /*
-+ /**
- * This is a magic hack to spot IPX packets. Older Novell breaks
- * the protocol design and runs IPX over 802.3 without an 802.2 LLC
- * layer. We look for FFFF which isn't a used 802.2 SSAP/DSAP. This
-@@ -92,42 +101,73 @@ unsigned short my_eth_type_trans(struct
- if (*(unsigned short *)rawp == 0xFFFF)
- return htons(ETH_P_802_3);
-
-- /*
-+ /**
- * Real 802.2 LLC
- */
- return htons(ETH_P_802_2);
- }
-
--static void dvb_net_sec(struct net_device *dev, const u8 *pkt, int pkt_len)
-+
-+static void dvb_net_sec(struct net_device *dev, u8 *pkt, int pkt_len)
- {
- u8 *eth;
- struct sk_buff *skb;
-
-- if (pkt_len<13) {
-- printk("%s: IP/MPE packet length = %d too small.\n", dev->name, pkt_len);
-+ /* note: pkt_len includes a 32bit checksum */
-+ if (pkt_len < 16) {
-+ printk("%s: IP/MPE packet length = %d too small.\n",
-+ dev->name, pkt_len);
-+ ((struct dvb_net_priv *) dev->priv)->stats.rx_errors++;
-+ ((struct dvb_net_priv *) dev->priv)->stats.rx_length_errors++;
-+ return;
-+ }
-+ if ((pkt[5] & 0xfd) != 0xc1) {
-+ /* drop scrambled or broken packets */
-+ ((struct dvb_net_priv *) dev->priv)->stats.rx_errors++;
-+ ((struct dvb_net_priv *) dev->priv)->stats.rx_crc_errors++;
- return;
- }
-- skb = dev_alloc_skb(pkt_len+2);
-- if (skb == NULL) {
-- printk(KERN_NOTICE "%s: Memory squeeze, dropping packet.\n",
-- dev->name);
-+ if (pkt[5] & 0x02) {
-+ //FIXME: handle LLC/SNAP
- ((struct dvb_net_priv *)dev->priv)->stats.rx_dropped++;
- return;
- }
-- eth=(u8 *) skb_put(skb, pkt_len+2);
-- memcpy(eth+14, (void*)pkt+12, pkt_len-12);
-+ if (pkt[7]) {
-+ /* FIXME: assemble datagram from multiple sections */
-+ ((struct dvb_net_priv *) dev->priv)->stats.rx_errors++;
-+ ((struct dvb_net_priv *) dev->priv)->stats.rx_frame_errors++;
-+ return;
-+ }
-
-+ /* we have 14 byte ethernet header (ip header follows);
-+ * 12 byte MPE header; 4 byte checksum; + 2 byte alignment
-+ */
-+ if (!(skb = dev_alloc_skb(pkt_len - 4 - 12 + 14 + 2))) {
-+ //printk(KERN_NOTICE "%s: Memory squeeze, dropping packet.\n", dev->name);
-+ ((struct dvb_net_priv *) dev->priv)->stats.rx_dropped++;
-+ return;
-+ }
-+ skb_reserve(skb, 2); /* longword align L3 header */
-+ skb->dev = dev;
-+
-+ /* copy L3 payload */
-+ eth = (u8 *) skb_put(skb, pkt_len - 12 - 4 + 14);
-+ memcpy(eth + 14, pkt + 12, pkt_len - 12 - 4);
-+
-+ /* create ethernet header: */
- eth[0]=pkt[0x0b];
- eth[1]=pkt[0x0a];
- eth[2]=pkt[0x09];
- eth[3]=pkt[0x08];
- eth[4]=pkt[0x04];
- eth[5]=pkt[0x03];
-+
- eth[6]=eth[7]=eth[8]=eth[9]=eth[10]=eth[11]=0;
-- eth[12]=0x08; eth[13]=0x00;
-
-- skb->protocol=my_eth_type_trans(skb,dev);
-- skb->dev=dev;
-+ eth[12] = 0x08; /* ETH_P_IP */
-+ eth[13] = 0x00;
-+
-+ skb->protocol = dvb_net_eth_type_trans(skb, dev);
-
- ((struct dvb_net_priv *)dev->priv)->stats.rx_packets++;
- ((struct dvb_net_priv *)dev->priv)->stats.rx_bytes+=skb->len;
-@@ -141,9 +181,11 @@ static int dvb_net_callback(const u8 *bu
- {
- struct net_device *dev=(struct net_device *) filter->priv;
-
-- /* FIXME: this only works if exactly one complete section is
-- delivered in buffer1 only */
-- dvb_net_sec(dev, buffer1, buffer1_len);
-+ /**
-+ * we rely on the DVB API definition where exactly one complete
-+ * section is delivered in buffer1
-+ */
-+ dvb_net_sec (dev, (u8*) buffer1, buffer1_len);
- return 0;
- }
-
-@@ -178,24 +220,27 @@ static int dvb_net_filter_set(struct net
- memset((*secfilter)->filter_mode, 0xff, DMX_MAX_FILTER_SIZE);
-
- (*secfilter)->filter_value[0]=0x3e;
-- (*secfilter)->filter_mask[0]=0xff;
--
- (*secfilter)->filter_value[3]=mac[5];
-- (*secfilter)->filter_mask[3]=mac_mask[5];
- (*secfilter)->filter_value[4]=mac[4];
-- (*secfilter)->filter_mask[4]=mac_mask[4];
- (*secfilter)->filter_value[8]=mac[3];
-- (*secfilter)->filter_mask[8]=mac_mask[3];
- (*secfilter)->filter_value[9]=mac[2];
-- (*secfilter)->filter_mask[9]=mac_mask[2];
--
- (*secfilter)->filter_value[10]=mac[1];
-- (*secfilter)->filter_mask[10]=mac_mask[1];
- (*secfilter)->filter_value[11]=mac[0];
-+
-+ (*secfilter)->filter_mask[0] = 0xff;
-+ (*secfilter)->filter_mask[3] = mac_mask[5];
-+ (*secfilter)->filter_mask[4] = mac_mask[4];
-+ (*secfilter)->filter_mask[8] = mac_mask[3];
-+ (*secfilter)->filter_mask[9] = mac_mask[2];
-+ (*secfilter)->filter_mask[10] = mac_mask[1];
- (*secfilter)->filter_mask[11]=mac_mask[0];
-
-- printk("%s: filter mac=%02x %02x %02x %02x %02x %02x\n",
-+ dprintk("%s: filter mac=%02x %02x %02x %02x %02x %02x\n",
- dev->name, mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
-+ dprintk("%s: filter mask=%02x %02x %02x %02x %02x %02x\n",
-+ dev->name, mac_mask[0], mac_mask[1], mac_mask[2],
-+ mac_mask[3], mac_mask[4], mac_mask[5]);
-+
- return 0;
- }
-
-@@ -206,46 +251,57 @@ static int dvb_net_feed_start(struct net
- struct dmx_demux *demux = priv->demux;
- unsigned char *mac = (unsigned char *) dev->dev_addr;
-
-+ dprintk("%s: rx_mode %i\n", __FUNCTION__, priv->rx_mode);
-+ if (priv->secfeed || priv->secfilter || priv->multi_secfilter[0])
-+ printk("%s: BUG %d\n", __FUNCTION__, __LINE__);
-+
- priv->secfeed=0;
- priv->secfilter=0;
-
-+ dprintk("%s: alloc secfeed\n", __FUNCTION__);
- ret=demux->allocate_section_feed(demux, &priv->secfeed,
- dvb_net_callback);
- if (ret<0) {
-- printk("%s: could not get section feed\n", dev->name);
-+ printk("%s: could not allocate section feed\n", dev->name);
- return ret;
- }
-
-- ret=priv->secfeed->set(priv->secfeed, priv->pid, 32768, 0, 0);
-+ ret = priv->secfeed->set(priv->secfeed, priv->pid, 32768, 0, 1);
-+
- if (ret<0) {
- printk("%s: could not set section feed\n", dev->name);
-- priv->demux->
-- release_section_feed(priv->demux, priv->secfeed);
-+ priv->demux->release_section_feed(priv->demux, priv->secfeed);
- priv->secfeed=0;
- return ret;
- }
-- /* fixme: is this correct? */
-- try_module_get(THIS_MODULE);
-
-- if (priv->mode<3)
-+ if (priv->rx_mode != RX_MODE_PROMISC) {
-+ dprintk("%s: set secfilter\n", __FUNCTION__);
- dvb_net_filter_set(dev, &priv->secfilter, mac, mask_normal);
-+ }
-
-- switch (priv->mode) {
-- case 1:
-- for (i=0; i<priv->multi_num; i++)
-+ switch (priv->rx_mode) {
-+ case RX_MODE_MULTI:
-+ for (i = 0; i < priv->multi_num; i++) {
-+ dprintk("%s: set multi_secfilter[%d]\n", __FUNCTION__, i);
- dvb_net_filter_set(dev, &priv->multi_secfilter[i],
- priv->multi_macs[i], mask_normal);
-+ }
- break;
-- case 2:
-+ case RX_MODE_ALL_MULTI:
- priv->multi_num=1;
-- dvb_net_filter_set(dev, &priv->multi_secfilter[0], mac_allmulti, mask_allmulti);
-+ dprintk("%s: set multi_secfilter[0]\n", __FUNCTION__);
-+ dvb_net_filter_set(dev, &priv->multi_secfilter[0],
-+ mac_allmulti, mask_allmulti);
- break;
-- case 3:
-+ case RX_MODE_PROMISC:
- priv->multi_num=0;
-+ dprintk("%s: set secfilter\n", __FUNCTION__);
- dvb_net_filter_set(dev, &priv->secfilter, mac, mask_promisc);
- break;
- }
-
-+ dprintk("%s: start filtering\n", __FUNCTION__);
- priv->secfeed->start_filtering(priv->secfeed);
- return 0;
- }
-@@ -255,89 +311,93 @@ static void dvb_net_feed_stop(struct net
- struct dvb_net_priv *priv = (struct dvb_net_priv*) dev->priv;
- int i;
-
-+ dprintk("%s\n", __FUNCTION__);
- if (priv->secfeed) {
-- if (priv->secfeed->is_filtering)
-+ if (priv->secfeed->is_filtering) {
-+ dprintk("%s: stop secfeed\n", __FUNCTION__);
- priv->secfeed->stop_filtering(priv->secfeed);
-- if (priv->secfilter)
-- priv->secfeed->
-- release_filter(priv->secfeed,
-+ }
-+
-+ if (priv->secfilter) {
-+ dprintk("%s: release secfilter\n", __FUNCTION__);
-+ priv->secfeed->release_filter(priv->secfeed,
- priv->secfilter);
- priv->secfilter=0;
-+ }
-
- for (i=0; i<priv->multi_num; i++) {
-- if (priv->multi_secfilter[i])
-- priv->secfeed->
-- release_filter(priv->secfeed,
-+ if (priv->multi_secfilter[i]) {
-+ dprintk("%s: release multi_filter[%d]\n", __FUNCTION__, i);
-+ priv->secfeed->release_filter(priv->secfeed,
- priv->multi_secfilter[i]);
- priv->multi_secfilter[i]=0;
- }
-- priv->demux->
-- release_section_feed(priv->demux, priv->secfeed);
-+ }
-+
-+ priv->demux->release_section_feed(priv->demux, priv->secfeed);
- priv->secfeed=0;
-- /* fixme: is this correct? */
-- module_put(THIS_MODULE);
- } else
- printk("%s: no feed to stop\n", dev->name);
- }
-
--static int dvb_add_mc_filter(struct net_device *dev, struct dev_mc_list *mc)
-+
-+static int dvb_set_mc_filter (struct net_device *dev, struct dev_mc_list *mc)
- {
- struct dvb_net_priv *priv = (struct dvb_net_priv*) dev->priv;
-- int ret;
-
-- if (priv->multi_num >= DVB_NET_MULTICAST_MAX)
-+ if (priv->multi_num == DVB_NET_MULTICAST_MAX)
- return -ENOMEM;
-
-- ret = memcmp(priv->multi_macs[priv->multi_num], mc->dmi_addr, 6);
- memcpy(priv->multi_macs[priv->multi_num], mc->dmi_addr, 6);
-
- priv->multi_num++;
--
-- return ret;
-+ return 0;
- }
-
--static void dvb_net_set_multi(struct net_device *dev)
-+
-+static void wq_set_multicast_list (void *data)
- {
-+ struct net_device *dev = data;
- struct dvb_net_priv *priv = (struct dvb_net_priv*) dev->priv;
-- struct dev_mc_list *mc;
-- int mci;
-- int update = 0;
-+
-+ dvb_net_feed_stop(dev);
-+
-+ priv->rx_mode = RX_MODE_UNI;
-
- if(dev->flags & IFF_PROMISC) {
--// printk("%s: promiscuous mode\n", dev->name);
-- if(priv->mode != 3)
-- update = 1;
-- priv->mode = 3;
-- } else if(dev->flags & IFF_ALLMULTI) {
--// printk("%s: allmulti mode\n", dev->name);
-- if(priv->mode != 2)
-- update = 1;
-- priv->mode = 2;
-- } else if(dev->mc_count > 0) {
--// printk("%s: set_mc_list, %d entries\n",
--// dev->name, dev->mc_count);
-- if(priv->mode != 1)
-- update = 1;
-- priv->mode = 1;
-+ dprintk("%s: promiscuous mode\n", dev->name);
-+ priv->rx_mode = RX_MODE_PROMISC;
-+ } else if ((dev->flags & IFF_ALLMULTI)) {
-+ dprintk("%s: allmulti mode\n", dev->name);
-+ priv->rx_mode = RX_MODE_ALL_MULTI;
-+ } else if (dev->mc_count) {
-+ int mci;
-+ struct dev_mc_list *mc;
-+
-+ dprintk("%s: set_mc_list, %d entries\n",
-+ dev->name, dev->mc_count);
-+
-+ priv->rx_mode = RX_MODE_MULTI;
- priv->multi_num = 0;
-+
- for (mci = 0, mc=dev->mc_list;
- mci < dev->mc_count;
-- mc=mc->next, mci++)
-- if(dvb_add_mc_filter(dev, mc) != 0)
-- update = 1;
-- } else {
-- if(priv->mode != 0)
-- update = 1;
-- priv->mode = 0;
-+ mc = mc->next, mci++) {
-+ dvb_set_mc_filter(dev, mc);
-+ }
- }
-
-- if(netif_running(dev) != 0 && update > 0)
-- {
-- dvb_net_feed_stop(dev);
- dvb_net_feed_start(dev);
- }
-+
-+
-+static void dvb_net_set_multicast_list (struct net_device *dev)
-+{
-+ struct dvb_net_priv *priv = (struct dvb_net_priv*) dev->priv;
-+ schedule_work(&priv->set_multicast_list_wq);
- }
-
-+
- static int dvb_net_set_config(struct net_device *dev, struct ifmap *map)
- {
- if (netif_running(dev))
-@@ -345,29 +405,47 @@ static int dvb_net_set_config(struct net
- return 0;
- }
-
--static int dvb_net_set_mac(struct net_device *dev, void *p)
-+
-+static void wq_restart_net_feed (void *data)
- {
-- struct sockaddr *addr=p;
-- int update;
-+ struct net_device *dev = data;
-
-- update = memcmp(dev->dev_addr, addr->sa_data, dev->addr_len);
-- memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
-- if (netif_running(dev) != 0 && update > 0) {
-+ if (netif_running(dev)) {
- dvb_net_feed_stop(dev);
- dvb_net_feed_start(dev);
- }
-+}
-+
-+
-+static int dvb_net_set_mac (struct net_device *dev, void *p)
-+{
-+ struct dvb_net_priv *priv = (struct dvb_net_priv*) dev->priv;
-+ struct sockaddr *addr=p;
-+
-+ memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
-+
-+ if (netif_running(dev))
-+ schedule_work(&priv->restart_net_feed_wq);
-+
- return 0;
- }
-
-
- static int dvb_net_open(struct net_device *dev)
- {
-+ struct dvb_net_priv *priv = (struct dvb_net_priv*) dev->priv;
-+
-+ priv->in_use++;
- dvb_net_feed_start(dev);
- return 0;
- }
-
-+
- static int dvb_net_stop(struct net_device *dev)
- {
-+ struct dvb_net_priv *priv = (struct dvb_net_priv*) dev->priv;
-+
-+ priv->in_use--;
- dvb_net_feed_stop(dev);
- return 0;
- }
-@@ -386,16 +464,14 @@ static int dvb_net_init_dev(struct net_d
- dev->stop = dvb_net_stop;
- dev->hard_start_xmit = dvb_net_tx;
- dev->get_stats = dvb_net_get_stats;
-- dev->set_multicast_list = dvb_net_set_multi;
-+ dev->set_multicast_list = dvb_net_set_multicast_list;
- dev->set_config = dvb_net_set_config;
- dev->set_mac_address = dvb_net_set_mac;
- dev->mtu = 4096;
- dev->mc_count = 0;
--
-- dev->flags |= IFF_NOARP;
- dev->hard_header_cache = NULL;
-
-- //SET_MODULE_OWNER(dev);
-+ dev->flags |= IFF_NOARP;
-
- return 0;
- }
-@@ -404,18 +480,19 @@ static int get_if(struct dvb_net *dvbnet
- {
- int i;
-
-- for (i=0; i<dvbnet->dev_num; i++)
-+ for (i=0; i<DVB_NET_DEVICES_MAX; i++)
- if (!dvbnet->state[i])
- break;
-- if (i==dvbnet->dev_num)
-+
-+ if (i == DVB_NET_DEVICES_MAX)
- return -1;
-+
- dvbnet->state[i]=1;
- return i;
- }
-
-
--int
--dvb_net_add_if(struct dvb_net *dvbnet, u16 pid)
-+static int dvb_net_add_if(struct dvb_net *dvbnet, u16 pid)
- {
- struct net_device *net;
- struct dmx_demux *demux;
-@@ -423,59 +500,63 @@ dvb_net_add_if(struct dvb_net *dvbnet, u
- int result;
- int if_num;
-
-- if_num=get_if(dvbnet);
-- if (if_num<0)
-+ if ((if_num = get_if(dvbnet)) < 0)
- return -EINVAL;
-
- net=&dvbnet->device[if_num];
- demux=dvbnet->demux;
-
-- net->base_addr = 0;
-- net->irq = 0;
-- net->dma = 0;
-- net->mem_start = 0;
-+ memset(net, 0, sizeof(struct net_device));
-+
- memcpy(net->name, "dvb0_0", 7);
-- net->name[3]=dvbnet->card_num+0x30;
-- net->name[5]=if_num+0x30;
-+ net->name[3] = dvbnet->dvbdev->adapter->num + '0';
-+ net->name[5] = if_num + '0';
-+ net->addr_len = 6;
-+ memcpy(net->dev_addr, dvbnet->dvbdev->adapter->proposed_mac, 6);
- net->next = NULL;
- net->init = dvb_net_init_dev;
-- net->priv = kmalloc(sizeof(struct dvb_net_priv), GFP_KERNEL);
-- if (net->priv == NULL)
-+
-+ if (!(net->priv = kmalloc(sizeof(struct dvb_net_priv), GFP_KERNEL)))
- return -ENOMEM;
-
- priv = net->priv;
- memset(priv, 0, sizeof(struct dvb_net_priv));
- priv->demux = demux;
- priv->pid = pid;
-- priv->mode = 0;
-+ priv->rx_mode = RX_MODE_UNI;
-+
-+ INIT_WORK(&priv->set_multicast_list_wq, wq_set_multicast_list, net);
-+ INIT_WORK(&priv->restart_net_feed_wq, wq_restart_net_feed, net);
-
- net->base_addr = pid;
-
- if ((result = register_netdev(net)) < 0) {
- return result;
- }
-- /* fixme: is this correct? */
-- try_module_get(THIS_MODULE);
-
- return if_num;
- }
-
--int
--dvb_net_remove_if(struct dvb_net *dvbnet, int num)
-+
-+static int dvb_net_remove_if(struct dvb_net *dvbnet, int num)
- {
-+ struct dvb_net_priv *priv = dvbnet->device[num].priv;
-+
- if (!dvbnet->state[num])
- return -EINVAL;
-+ if (priv->in_use)
-+ return -EBUSY;
-+
- dvb_net_stop(&dvbnet->device[num]);
-- kfree(dvbnet->device[num].priv);
-+ flush_scheduled_work();
-+ kfree(priv);
- unregister_netdev(&dvbnet->device[num]);
- dvbnet->state[num]=0;
-- /* fixme: is this correct? */
-- module_put(THIS_MODULE);
--
- return 0;
- }
-
--int dvb_net_do_ioctl(struct inode *inode, struct file *file,
-+
-+static int dvb_net_do_ioctl(struct inode *inode, struct file *file,
- unsigned int cmd, void *parg)
- {
- struct dvb_device *dvbdev = (struct dvb_device *) file->private_data;
-@@ -490,6 +571,8 @@ int dvb_net_do_ioctl(struct inode *inode
- struct dvb_net_if *dvbnetif=(struct dvb_net_if *)parg;
- int result;
-
-+ if (!capable(CAP_SYS_ADMIN))
-+ return -EPERM;
- result=dvb_net_add_if(dvbnet, dvbnetif->pid);
- if (result<0)
- return result;
-@@ -502,7 +585,7 @@ int dvb_net_do_ioctl(struct inode *inode
- struct dvb_net_priv *priv_data;
- struct dvb_net_if *dvbnetif=(struct dvb_net_if *)parg;
-
-- if (dvbnetif->if_num >= dvbnet->dev_num ||
-+ if (dvbnetif->if_num >= DVB_NET_DEVICES_MAX ||
- !dvbnet->state[dvbnetif->if_num])
- return -EFAULT;
-
-@@ -512,7 +595,9 @@ int dvb_net_do_ioctl(struct inode *inode
- break;
- }
- case NET_REMOVE_IF:
-- return dvb_net_remove_if(dvbnet, (long) parg);
-+ if (!capable(CAP_SYS_ADMIN))
-+ return -EPERM;
-+ return dvb_net_remove_if(dvbnet, (int) parg);
- default:
- return -EINVAL;
- }
-@@ -542,28 +627,29 @@ static struct dvb_device dvbdev_net = {
- .fops = &dvb_net_fops,
- };
-
--void
--dvb_net_release(struct dvb_net *dvbnet)
-+
-+void dvb_net_release (struct dvb_net *dvbnet)
- {
- int i;
-
- dvb_unregister_device(dvbnet->dvbdev);
-- for (i=0; i<dvbnet->dev_num; i++) {
-+
-+ for (i=0; i<DVB_NET_DEVICES_MAX; i++) {
- if (!dvbnet->state[i])
- continue;
- dvb_net_remove_if(dvbnet, i);
- }
- }
-
--int
--dvb_net_init(struct dvb_adapter *adap, struct dvb_net *dvbnet, struct dmx_demux *dmx)
-+
-+int dvb_net_init (struct dvb_adapter *adap, struct dvb_net *dvbnet,
-+ struct dmx_demux *dmx)
- {
- int i;
-
- dvbnet->demux = dmx;
-- dvbnet->dev_num = DVB_NET_DEVICES_MAX;
-
-- for (i=0; i<dvbnet->dev_num; i++)
-+ for (i=0; i<DVB_NET_DEVICES_MAX; i++)
- dvbnet->state[i] = 0;
-
- dvb_register_device (adap, &dvbnet->dvbdev, &dvbdev_net,
---- linux-2.6.0-test1/drivers/media/dvb/dvb-core/dvb_net.h 2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/dvb/dvb-core/dvb_net.h 2003-07-19 17:03:49.000000000 -0700
-@@ -35,8 +35,6 @@
-
- struct dvb_net {
- struct dvb_device *dvbdev;
-- int card_num;
-- int dev_num;
- struct net_device device[DVB_NET_DEVICES_MAX];
- int state[DVB_NET_DEVICES_MAX];
- struct dmx_demux *demux;
---- linux-2.6.0-test1/drivers/media/dvb/frontends/alps_bsrv2.c 2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/dvb/frontends/alps_bsrv2.c 2003-07-19 17:03:49.000000000 -0700
-@@ -55,7 +55,7 @@ static u8 init_1893_tab [] = {
- 0x01, 0xA4, 0x35, 0x81, 0x2A, 0x0d, 0x55, 0xC4,
- 0x09, 0x69, 0x00, 0x86, 0x4c, 0x28, 0x7F, 0x00,
- 0x00, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-- 0x80, 0x00, 0x31, 0xb0, 0x14, 0x00, 0xDC, 0x20,
-+ 0x80, 0x00, 0x31, 0xb0, 0x14, 0x00, 0xDC, 0x00,
- 0x81, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x55, 0x00, 0x00, 0x7f, 0x00
-@@ -158,6 +158,11 @@ static int ves1893_set_inversion (struct
- {
- u8 val;
-
-+ /*
-+ * inversion on/off are interchanged because i and q seem to
-+ * be swapped on the hardware
-+ */
-+
- switch (inversion) {
- case INVERSION_OFF:
- val = 0xc0;
-@@ -166,13 +171,16 @@ static int ves1893_set_inversion (struct
- val = 0x80;
- break;
- case INVERSION_AUTO:
-- val = 0x40;
-+ val = 0x00;
- break;
- default:
- return -EINVAL;
- }
-
-- return ves1893_writereg (i2c, 0x0c, (init_1893_tab[0x0c] & 0x3f) | val);
-+ /* needs to be saved for FE_GET_FRONTEND */
-+ init_1893_tab[0x0c] = (init_1893_tab[0x0c] & 0x3f) | val;
-+
-+ return ves1893_writereg (i2c, 0x0c, init_1893_tab[0x0c]);
- }
-
-
-@@ -383,8 +391,14 @@ static int bsrv2_ioctl (struct dvb_front
- afc = (afc * (int)(p->u.qpsk.symbol_rate/1000/8))/16;
-
- p->frequency -= afc;
-+
-+ /*
-+ * inversion indicator is only valid
-+ * if auto inversion was used
-+ */
-+ if (!(init_1893_tab[0x0c] & 0x80))
- p->inversion = (ves1893_readreg (i2c, 0x0f) & 2) ?
-- INVERSION_ON : INVERSION_OFF;
-+ INVERSION_OFF : INVERSION_ON;
- p->u.qpsk.fec_inner = ves1893_get_fec (i2c);
- /* XXX FIXME: timing offset !! */
- break;
---- linux-2.6.0-test1/drivers/media/dvb/frontends/alps_tdlb7.c 2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/dvb/frontends/alps_tdlb7.c 2003-07-19 17:03:49.000000000 -0700
-@@ -349,6 +349,9 @@ static int tdlb7_ioctl (struct dvb_front
-
- sp5659_set_tv_freq (i2c, p->frequency);
-
-+ // read status reg in order to clear pending irqs
-+ sp8870_readreg(i2c, 0x200);
-+
- // sample rate correction bit [23..17]
- sp8870_writereg(i2c,0x0319,0x000A);
-
---- linux-2.6.0-test1/drivers/media/dvb/frontends/grundig_29504-401.c 2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/dvb/frontends/grundig_29504-401.c 2003-07-19 17:03:49.000000000 -0700
-@@ -37,15 +37,15 @@ static int debug = 0;
-
-
- struct dvb_frontend_info grundig_29504_401_info = {
-- .name = "Grundig 29504-401",
-- .type = FE_OFDM,
--/* .frequency_min = ???,*/
--/* .frequency_max = ???,*/
-- .frequency_stepsize = 166666,
--/* .frequency_tolerance = ???,*/
--/* .symbol_rate_tolerance = ???,*/
-- .notifier_delay = 0,
-- .caps = FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 |
-+ name: "Grundig 29504-401",
-+ type: FE_OFDM,
-+/* frequency_min: ???,*/
-+/* frequency_max: ???,*/
-+ frequency_stepsize: 166666,
-+/* frequency_tolerance: ???,*/
-+/* symbol_rate_tolerance: ???,*/
-+ notifier_delay: 0,
-+ caps: FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 |
- FE_CAN_FEC_5_6 | FE_CAN_FEC_7_8 |
- FE_CAN_QPSK | FE_CAN_QAM_16 | FE_CAN_QAM_64 |
- FE_CAN_MUTE_TS /*| FE_CAN_CLEAN_SETUP*/
-@@ -109,15 +109,15 @@ static int tsa5060_set_tv_freq (struct d
- div = (36125000 + freq) / 166666;
- cfg = 0x88;
-
-- cpump = div < 175000000 ? 2 : div < 390000000 ? 1 :
-- div < 470000000 ? 2 : div < 750000000 ? 1 : 3;
-+ cpump = freq < 175000000 ? 2 : freq < 390000000 ? 1 :
-+ freq < 470000000 ? 2 : freq < 750000000 ? 1 : 3;
-
-- band_select = div < 175000000 ? 0x0e : div < 470000000 ? 0x05 : 0x03;
-+ band_select = freq < 175000000 ? 0x0e : freq < 470000000 ? 0x05 : 0x03;
-
- buf [0] = (div >> 8) & 0x7f;
- buf [1] = div & 0xff;
- buf [2] = ((div >> 10) & 0x60) | cfg;
-- buf [3] = cpump | band_select;
-+ buf [3] = (cpump << 6) | band_select;
-
- return tsa5060_write (i2c, buf);
- }
-@@ -267,12 +267,12 @@ static int apply_frontend_param (struct
- }
-
-
--static void reset_and_configure (struct dvb_i2c_bus *i2c)
-+static int reset_and_configure (struct dvb_i2c_bus *i2c)
- {
- u8 buf [] = { 0x06 };
- struct i2c_msg msg = { .addr = 0x00, .flags = 0, .buf = buf, .len = 1 };
-
-- i2c->xfer (i2c, &msg, 1);
-+ return (i2c->xfer (i2c, &msg, 1) == 1) ? 0 : -ENODEV;
- }
-
-
-@@ -391,7 +391,7 @@ int grundig_29504_401_ioctl (struct dvb_
- struct dvb_frontend_parameters *p = arg;
-
- tsa5060_set_tv_freq (i2c, p->frequency);
-- apply_frontend_param (i2c, p);
-+ return apply_frontend_param (i2c, p);
- }
- case FE_GET_FRONTEND:
- /* we could correct the frequency here, but...
-@@ -417,25 +417,61 @@ int grundig_29504_401_ioctl (struct dvb_
-
- static int l64781_attach (struct dvb_i2c_bus *i2c)
- {
-+ u8 reg0x3e;
- u8 b0 [] = { 0x1a };
- u8 b1 [] = { 0x00 };
- struct i2c_msg msg [] = { { .addr = 0x55, .flags = 0, .buf = b0, .len = 1 },
- { .addr = 0x55, .flags = I2C_M_RD, .buf = b1, .len = 1 } };
-
-- if (i2c->xfer (i2c, msg, 2) == 2) /* probably an EEPROM... */
-+ /**
-+ * the L64781 won't show up before we send the reset_and_configure()
-+ * broadcast. If nothing responds there is no L64781 on the bus...
-+ */
-+ if (reset_and_configure(i2c) < 0) {
-+ dprintk("no response on reset_and_configure() broadcast, bailing out...\n");
- return -ENODEV;
-+ }
-
-- reset_and_configure (i2c);
--
-- if (i2c->xfer (i2c, msg, 2) != 2) /* nothing... */
-+ /* The chip always responds to reads */
-+ if (i2c->xfer(i2c, msg, 2) != 2) {
-+ dprintk("no response to read on I2C bus\n");
- return -ENODEV;
-+ }
-
-- if (b1[0] != 0xa1)
-+ /* Save current register contents for bailout */
-+ reg0x3e = l64781_readreg(i2c, 0x3e);
-+
-+ /* Reading the POWER_DOWN register always returns 0 */
-+ if (reg0x3e != 0) {
-+ dprintk("Device doesn't look like L64781\n");
- return -ENODEV;
-+ }
-+
-+ /* Turn the chip off */
-+ l64781_writereg (i2c, 0x3e, 0x5a);
-+
-+ /* Responds to all reads with 0 */
-+ if (l64781_readreg(i2c, 0x1a) != 0) {
-+ dprintk("Read 1 returned unexpcted value\n");
-+ goto bailout;
-+ }
-+
-+ /* Turn the chip on */
-+ l64781_writereg (i2c, 0x3e, 0xa5);
-+
-+ /* Responds with register default value */
-+ if (l64781_readreg(i2c, 0x1a) != 0xa1) {
-+ dprintk("Read 2 returned unexpcted value\n");
-+ goto bailout;
-+ }
-
- dvb_register_frontend (grundig_29504_401_ioctl, i2c, NULL,
- &grundig_29504_401_info);
- return 0;
-+
-+ bailout:
-+ l64781_writereg (i2c, 0x3e, reg0x3e); /* restore reg 0x3e */
-+ return -ENODEV;
- }
-
-
---- linux-2.6.0-test1/drivers/media/dvb/frontends/grundig_29504-491.c 2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/dvb/frontends/grundig_29504-491.c 2003-07-19 17:03:49.000000000 -0700
-@@ -179,10 +179,7 @@ static fe_code_rate_t tda8083_get_fec (s
- static fe_code_rate_t fec_tab [] = { FEC_8_9, FEC_1_2, FEC_2_3, FEC_3_4,
- FEC_4_5, FEC_5_6, FEC_6_7, FEC_7_8 };
-
-- index = tda8083_readreg (i2c, 0x0e) & 0x3;
--
-- if (index > 7)
-- return FEC_NONE;
-+ index = tda8083_readreg(i2c, 0x0e) & 0x07;
-
- return fec_tab [index];
- }
---- linux-2.6.0-test1/drivers/media/dvb/frontends/Kconfig 2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/dvb/frontends/Kconfig 2003-07-19 17:03:49.000000000 -0700
-@@ -93,6 +93,16 @@ config DVB_GRUNDIG_29504_401
- DVB adapter simply enable all supported frontends, the
- right one will get autodetected.
-
-+config DVB_MT312
-+ tristate "Zarlink MT312 Satellite Channel Decoder (QPSK)"
-+ depends on DVB_CORE
-+ help
-+ A DVB-S tuner module. Say Y when you want to support this frontend.
-+
-+ If you don't know what tuner module is soldered on your
-+ DVB adapter simply enable all supported frontends, the
-+ right one will get autodetected.
-+
- config DVB_VES1820
- tristate "Frontends with external VES1820 demodulator (QAM)"
- depends on DVB_CORE
-@@ -105,3 +115,23 @@ config DVB_VES1820
- DVB adapter simply enable all supported frontends, the
- right one will get autodetected.
-
-+config DVB_TDA1004X
-+ tristate "Frontends with external TDA1004X demodulators (OFDM)"
-+ depends on DVB_CORE
-+ help
-+ A DVB-T tuner module. Say Y when you want to support this frontend.
-+
-+ If you don't know what tuner module is soldered on your
-+ DVB adapter simply enable all supported frontends, the
-+ right one will get autodetected.
-+
-+config DVB_TDA1004X_FIRMWARE_FILE
-+ string "Full pathname of tda1004x.bin firmware file"
-+ depends on DVB_TDA1004X
-+ default "/etc/dvb/tda1004x.bin"
-+ help
-+ The TDA1004X requires additional firmware in order to function.
-+ The firmware file can obtained as follows:
-+ wget http://www.technotrend.de/new/215/TTweb_215a_budget_20_05_2003.zip
-+ unzip -j TTweb_215a_budget_20_05_2003.zip Software/Oem/PCI/App/ttlcdacc.dll
-+ mv ttlcdacc.dll /etc/dvb/tda1004x.bin
---- linux-2.6.0-test1/drivers/media/dvb/frontends/Makefile 2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/dvb/frontends/Makefile 2003-07-19 17:03:49.000000000 -0700
-@@ -12,4 +12,6 @@ obj-$(CONFIG_DVB_ATMEL_AT76C651) += at76
- obj-$(CONFIG_DVB_CX24110) += cx24110.o
- obj-$(CONFIG_DVB_GRUNDIG_29504_491) += grundig_29504-491.o
- obj-$(CONFIG_DVB_GRUNDIG_29504_401) += grundig_29504-401.o
-+obi-$(CONFIG_DVB_MT312) += mt312.o
- obj-$(CONFIG_DVB_VES1820) += ves1820.o
-+obj-$(CONFIG_DVB_TDA1004X) += tda1004x.o
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/media/dvb/frontends/mt312.c 2003-07-19 17:03:49.000000000 -0700
-@@ -0,0 +1,749 @@
-+/*
-+ Driver for Zarlink MT312 Satellite Channel Decoder
-+
-+ Copyright (C) 2003 Andreas Oberritter <obi@saftware.de>
-+
-+ This program is free software; you can redistribute it and/or modify
-+ it under the terms of the GNU General Public License as published by
-+ the Free Software Foundation; either version 2 of the License, or
-+ (at your option) any later version.
-+
-+ This program is distributed in the hope that it will be useful,
-+ but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+
-+ GNU General Public License for more details.
-+
-+ You should have received a copy of the GNU General Public License
-+ along with this program; if not, write to the Free Software
-+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+
-+ References:
-+ http://products.zarlink.com/product_profiles/MT312.htm
-+ http://products.zarlink.com/product_profiles/SL1935.htm
-+*/
-+
-+#include <linux/delay.h>
-+#include <linux/errno.h>
-+#include <linux/init.h>
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+
-+#include "dvb_frontend.h"
-+#include "mt312.h"
-+
-+#define I2C_ADDR_MT312 0x0e
-+#define I2C_ADDR_SL1935 0x61
-+#define I2C_ADDR_TSA5059 0x61
-+
-+#define MT312_DEBUG 0
-+
-+#define MT312_SYS_CLK 90000000UL /* 90 MHz */
-+#define MT312_PLL_CLK 10000000UL /* 10 MHz */
-+
-+static struct dvb_frontend_info mt312_info = {
-+ .name = "Zarlink MT312",
-+ .type = FE_QPSK,
-+ .frequency_min = 950000,
-+ .frequency_max = 2150000,
-+ .frequency_stepsize = (MT312_PLL_CLK / 1000) / 128,
-+ /*.frequency_tolerance = 29500, FIXME: binary compatibility waste? */
-+ .symbol_rate_min = MT312_SYS_CLK / 128,
-+ .symbol_rate_max = MT312_SYS_CLK / 2,
-+ /*.symbol_rate_tolerance = 500, FIXME: binary compatibility waste? 2% */
-+ .notifier_delay = 0,
-+ .caps =
-+ FE_CAN_INVERSION_AUTO | FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 |
-+ FE_CAN_FEC_3_4 | FE_CAN_FEC_5_6 | FE_CAN_FEC_7_8 |
-+ FE_CAN_FEC_AUTO | FE_CAN_QPSK | FE_CAN_RECOVER |
-+ FE_CAN_CLEAN_SETUP | FE_CAN_MUTE_TS
-+};
-+
-+static int mt312_read(struct dvb_i2c_bus *i2c,
-+ const enum mt312_reg_addr reg, void *buf,
-+ const size_t count)
-+{
-+ int ret;
-+ struct i2c_msg msg[2];
-+ u8 regbuf[1] = { reg };
-+
-+ msg[0].addr = I2C_ADDR_MT312;
-+ msg[0].flags = 0;
-+ msg[0].buf = regbuf;
-+ msg[0].len = 1;
-+ msg[1].addr = I2C_ADDR_MT312;
-+ msg[1].flags = I2C_M_RD;
-+ msg[1].buf = buf;
-+ msg[1].len = count;
-+
-+ ret = i2c->xfer(i2c, msg, 2);
-+
-+ if (ret != 2) {
-+ printk(KERN_ERR "%s: ret == %d\n", __FUNCTION__, ret);
-+ return -EREMOTEIO;
-+ }
-+#ifdef MT312_DEBUG
-+ {
-+ int i;
-+ printk(KERN_INFO "R(%d):", reg & 0x7f);
-+ for (i = 0; i < count; i++)
-+ printk(" %02x", ((const u8 *) buf)[i]);
-+ printk("\n");
-+ }
-+#endif
-+
-+ return 0;
-+}
-+
-+static int mt312_write(struct dvb_i2c_bus *i2c,
-+ const enum mt312_reg_addr reg, const void *src,
-+ const size_t count)
-+{
-+ int ret;
-+ u8 buf[count + 1];
-+ struct i2c_msg msg;
-+
-+#ifdef MT312_DEBUG
-+ {
-+ int i;
-+ printk(KERN_INFO "W(%d):", reg & 0x7f);
-+ for (i = 0; i < count; i++)
-+ printk(" %02x", ((const u8 *) src)[i]);
-+ printk("\n");
-+ }
-+#endif
-+
-+ buf[0] = reg;
-+ memcpy(&buf[1], src, count);
-+
-+ msg.addr = I2C_ADDR_MT312;
-+ msg.flags = 0;
-+ msg.buf = buf;
-+ msg.len = count + 1;
-+
-+ ret = i2c->xfer(i2c, &msg, 1);
-+
-+ if (ret != 1) {
-+ printk(KERN_ERR "%s: ret == %d\n", __FUNCTION__, ret);
-+ return -EREMOTEIO;
-+ }
-+
-+ return 0;
-+}
-+
-+static inline int mt312_readreg(struct dvb_i2c_bus *i2c,
-+ const enum mt312_reg_addr reg, u8 * val)
-+{
-+ return mt312_read(i2c, reg, val, 1);
-+}
-+
-+static inline int mt312_writereg(struct dvb_i2c_bus *i2c,
-+ const enum mt312_reg_addr reg, const u8 val)
-+{
-+ return mt312_write(i2c, reg, &val, 1);
-+}
-+
-+static int mt312_pll_write(struct dvb_i2c_bus *i2c, const u8 addr,
-+ u8 * buf, const u8 len)
-+{
-+ int ret;
-+ struct i2c_msg msg;
-+
-+ msg.addr = addr;
-+ msg.flags = 0;
-+ msg.buf = buf;
-+ msg.len = len;
-+
-+ if ((ret = mt312_writereg(i2c, GPP_CTRL, 0x40)) < 0)
-+ return ret;
-+
-+ if ((ret = i2c->xfer(i2c, &msg, 1)) != 1)
-+ printk(KERN_ERR "%s: i/o error (ret == %d)\n", __FUNCTION__, ret);
-+
-+ if ((ret = mt312_writereg(i2c, GPP_CTRL, 0x00)) < 0)
-+ return ret;
-+
-+ return 0;
-+}
-+
-+static inline u32 mt312_div(u32 a, u32 b)
-+{
-+ return (a + (b / 2)) / b;
-+}
-+
-+static int sl1935_set_tv_freq(struct dvb_i2c_bus *i2c, u32 freq, u32 sr)
-+{
-+ /* 155 uA, Baseband Path B */
-+ u8 buf[4] = { 0x00, 0x00, 0x80, 0x00 };
-+
-+ u8 exp;
-+ u32 ref;
-+ u32 div;
-+
-+ if (sr < 10000000) { /* 1-10 MSym/s: ratio 2 ^ 3 */
-+ exp = 3;
-+ buf[2] |= 0x40; /* 690 uA */
-+ } else if (sr < 15000000) { /* 10-15 MSym/s: ratio 2 ^ 4 */
-+ exp = 4;
-+ buf[2] |= 0x20; /* 330 uA */
-+ } else { /* 15-45 MSym/s: ratio 2 ^ 7 */
-+ exp = 7;
-+ buf[3] |= 0x08; /* Baseband Path A */
-+ }
-+
-+ div = mt312_div(MT312_PLL_CLK, 1 << exp);
-+ ref = mt312_div(freq * 1000, div);
-+ mt312_info.frequency_stepsize = mt312_div(div, 1000);
-+
-+ buf[0] = (ref >> 8) & 0x7f;
-+ buf[1] = (ref >> 0) & 0xff;
-+ buf[2] |= (exp - 1);
-+
-+ if (freq < 1550000)
-+ buf[3] |= 0x10;
-+
-+ printk(KERN_INFO "synth dword = %02x%02x%02x%02x\n", buf[0],
-+ buf[1], buf[2], buf[3]);
-+
-+ return mt312_pll_write(i2c, I2C_ADDR_SL1935, buf, sizeof(buf));
-+}
-+
-+static int tsa5059_set_tv_freq(struct dvb_i2c_bus *i2c, u32 freq, u32 sr)
-+{
-+ u8 buf[4];
-+
-+ u32 ref = mt312_div(freq, 125);
-+
-+ buf[0] = (ref >> 8) & 0x7f;
-+ buf[1] = (ref >> 0) & 0xff;
-+ buf[2] = 0x84 | ((ref >> 10) & 0x60);
-+ buf[3] = 0x80;
-+
-+ if (freq < 1550000)
-+ buf[3] |= 0x02;
-+
-+ printk(KERN_INFO "synth dword = %02x%02x%02x%02x\n", buf[0],
-+ buf[1], buf[2], buf[3]);
-+
-+ return mt312_pll_write(i2c, I2C_ADDR_TSA5059, buf, sizeof(buf));
-+}
-+
-+static int mt312_reset(struct dvb_i2c_bus *i2c, const u8 full)
-+{
-+ return mt312_writereg(i2c, RESET, full ? 0x80 : 0x40);
-+}
-+
-+static int mt312_init(struct dvb_i2c_bus *i2c, const long id)
-+{
-+ int ret;
-+ u8 buf[2];
-+
-+ /* wake up */
-+ if ((ret = mt312_writereg(i2c, CONFIG, 0x8c)) < 0)
-+ return ret;
-+
-+ /* wait at least 150 usec */
-+ udelay(150);
-+
-+ /* full reset */
-+ if ((ret = mt312_reset(i2c, 1)) < 0)
-+ return ret;
-+
-+ /* SYS_CLK */
-+ buf[0] = mt312_div(MT312_SYS_CLK * 2, 1000000);
-+
-+ /* DISEQC_RATIO */
-+ buf[1] = mt312_div(MT312_PLL_CLK, 15000 * 4);
-+
-+ if ((ret = mt312_write(i2c, SYS_CLK, buf, sizeof(buf))) < 0)
-+ return ret;
-+
-+ if ((ret = mt312_writereg(i2c, SNR_THS_HIGH, 0x32)) < 0)
-+ return ret;
-+
-+ if ((ret = mt312_writereg(i2c, OP_CTRL, 0x53)) < 0)
-+ return ret;
-+
-+ /* TS_SW_LIM */
-+ buf[0] = 0x8c;
-+ buf[1] = 0x98;
-+
-+ if ((ret = mt312_write(i2c, TS_SW_LIM_L, buf, sizeof(buf))) < 0)
-+ return ret;
-+
-+ if ((ret = mt312_writereg(i2c, CS_SW_LIM, 0x69)) < 0)
-+ return ret;
-+
-+ return 0;
-+}
-+
-+static int mt312_send_master_cmd(struct dvb_i2c_bus *i2c,
-+ const struct dvb_diseqc_master_cmd *c)
-+{
-+ int ret;
-+ u8 diseqc_mode;
-+
-+ if ((c->msg_len == 0) || (c->msg_len > sizeof(c->msg)))
-+ return -EINVAL;
-+
-+ if ((ret = mt312_readreg(i2c, DISEQC_MODE, &diseqc_mode)) < 0)
-+ return ret;
-+
-+ if ((ret =
-+ mt312_write(i2c, (0x80 | DISEQC_INSTR), c->msg, c->msg_len)) < 0)
-+ return ret;
-+
-+ if ((ret =
-+ mt312_writereg(i2c, DISEQC_MODE,
-+ (diseqc_mode & 0x40) | ((c->msg_len - 1) << 3)
-+ | 0x04)) < 0)
-+ return ret;
-+
-+ /* set DISEQC_MODE[2:0] to zero if a return message is expected */
-+ if (c->msg[0] & 0x02)
-+ if ((ret =
-+ mt312_writereg(i2c, DISEQC_MODE, (diseqc_mode & 0x40))) < 0)
-+ return ret;
-+
-+ return 0;
-+}
-+
-+static int mt312_recv_slave_reply(struct dvb_i2c_bus *i2c,
-+ struct dvb_diseqc_slave_reply *r)
-+{
-+ /* TODO */
-+ return -EOPNOTSUPP;
-+}
-+
-+static int mt312_send_burst(struct dvb_i2c_bus *i2c, const fe_sec_mini_cmd_t c)
-+{
-+ const u8 mini_tab[2] = { 0x02, 0x03 };
-+
-+ int ret;
-+ u8 diseqc_mode;
-+
-+ if (c > SEC_MINI_B)
-+ return -EINVAL;
-+
-+ if ((ret = mt312_readreg(i2c, DISEQC_MODE, &diseqc_mode)) < 0)
-+ return ret;
-+
-+ if ((ret =
-+ mt312_writereg(i2c, DISEQC_MODE,
-+ (diseqc_mode & 0x40) | mini_tab[c])) < 0)
-+ return ret;
-+
-+ return 0;
-+}
-+
-+static int mt312_set_tone(struct dvb_i2c_bus *i2c, const fe_sec_tone_mode_t t)
-+{
-+ const u8 tone_tab[2] = { 0x01, 0x00 };
-+
-+ int ret;
-+ u8 diseqc_mode;
-+
-+ if (t > SEC_TONE_OFF)
-+ return -EINVAL;
-+
-+ if ((ret = mt312_readreg(i2c, DISEQC_MODE, &diseqc_mode)) < 0)
-+ return ret;
-+
-+ if ((ret =
-+ mt312_writereg(i2c, DISEQC_MODE,
-+ (diseqc_mode & 0x40) | tone_tab[t])) < 0)
-+ return ret;
-+
-+ return 0;
-+}
-+
-+static int mt312_set_voltage(struct dvb_i2c_bus *i2c, const fe_sec_voltage_t v)
-+{
-+ const u8 volt_tab[3] = { 0x00, 0x40, 0x00 };
-+
-+ if (v > SEC_VOLTAGE_OFF)
-+ return -EINVAL;
-+
-+ return mt312_writereg(i2c, DISEQC_MODE, volt_tab[v]);
-+}
-+
-+static int mt312_read_status(struct dvb_i2c_bus *i2c, fe_status_t * s)
-+{
-+ int ret;
-+ u8 status[3];
-+
-+ *s = 0;
-+
-+ if ((ret = mt312_read(i2c, QPSK_STAT_H, status, sizeof(status))) < 0)
-+ return ret;
-+
-+ if (status[0] & 0xc0)
-+ *s |= FE_HAS_SIGNAL; /* signal noise ratio */
-+ if (status[0] & 0x04)
-+ *s |= FE_HAS_CARRIER; /* qpsk carrier lock */
-+ if (status[2] & 0x02)
-+ *s |= FE_HAS_VITERBI; /* viterbi lock */
-+ if (status[2] & 0x04)
-+ *s |= FE_HAS_SYNC; /* byte align lock */
-+ if (status[0] & 0x01)
-+ *s |= FE_HAS_LOCK; /* qpsk lock */
-+
-+ return 0;
-+}
-+
-+static int mt312_read_bercnt(struct dvb_i2c_bus *i2c, u32 * ber)
-+{
-+ int ret;
-+ u8 buf[3];
-+
-+ if ((ret = mt312_read(i2c, RS_BERCNT_H, buf, 3)) < 0)
-+ return ret;
-+
-+ *ber = ((buf[0] << 16) | (buf[1] << 8) | buf[2]) * 64;
-+
-+ return 0;
-+}
-+
-+static int mt312_read_agc(struct dvb_i2c_bus *i2c, u16 * signal_strength)
-+{
-+ int ret;
-+ u8 buf[3];
-+ u16 agc;
-+ s16 err_db;
-+
-+ if ((ret = mt312_read(i2c, AGC_H, buf, sizeof(buf))) < 0)
-+ return ret;
-+
-+ agc = (buf[0] << 6) | (buf[1] >> 2);
-+ err_db = (s16) (((buf[1] & 0x03) << 14) | buf[2] << 6) >> 6;
-+
-+ *signal_strength = agc;
-+
-+ printk(KERN_DEBUG "agc=%08x err_db=%hd\n", agc, err_db);
-+
-+ return 0;
-+}
-+
-+static int mt312_read_snr(struct dvb_i2c_bus *i2c, u16 * snr)
-+{
-+ int ret;
-+ u8 buf[2];
-+
-+ if ((ret = mt312_read(i2c, M_SNR_H, &buf, sizeof(buf))) < 0)
-+ return ret;
-+
-+ *snr = 0xFFFF - ((((buf[0] & 0x7f) << 8) | buf[1]) << 1);
-+
-+ return 0;
-+}
-+
-+static int mt312_read_ubc(struct dvb_i2c_bus *i2c, u32 * ubc)
-+{
-+ int ret;
-+ u8 buf[2];
-+
-+ if ((ret = mt312_read(i2c, RS_UBC_H, &buf, sizeof(buf))) < 0)
-+ return ret;
-+
-+ *ubc = (buf[0] << 8) | buf[1];
-+
-+ return 0;
-+}
-+
-+static int mt312_set_frontend(struct dvb_i2c_bus *i2c,
-+ const struct dvb_frontend_parameters *p,
-+ const long id)
-+{
-+ int ret;
-+ u8 buf[5];
-+ u16 sr;
-+
-+ const u8 fec_tab[10] =
-+ { 0x00, 0x01, 0x02, 0x04, 0x3f, 0x08, 0x10, 0x20, 0x3f, 0x3f };
-+ const u8 inv_tab[3] = { 0x00, 0x40, 0x80 };
-+
-+ int (*set_tv_freq)(struct dvb_i2c_bus *i2c, u32 freq, u32 sr);
-+
-+ if ((p->frequency < mt312_info.frequency_min)
-+ || (p->frequency > mt312_info.frequency_max))
-+ return -EINVAL;
-+
-+ if ((p->inversion < INVERSION_OFF)
-+ || (p->inversion > INVERSION_AUTO))
-+ return -EINVAL;
-+
-+ if ((p->u.qpsk.symbol_rate < mt312_info.symbol_rate_min)
-+ || (p->u.qpsk.symbol_rate > mt312_info.symbol_rate_max))
-+ return -EINVAL;
-+
-+ if ((p->u.qpsk.fec_inner < FEC_NONE)
-+ || (p->u.qpsk.fec_inner > FEC_AUTO))
-+ return -EINVAL;
-+
-+ if ((p->u.qpsk.fec_inner == FEC_4_5)
-+ || (p->u.qpsk.fec_inner == FEC_8_9))
-+ return -EINVAL;
-+
-+ switch (id) {
-+ case ID_VP310:
-+ set_tv_freq = tsa5059_set_tv_freq;
-+ break;
-+ case ID_MT312:
-+ set_tv_freq = sl1935_set_tv_freq;
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+
-+ if ((ret = set_tv_freq(i2c, p->frequency, p->u.qpsk.symbol_rate)) < 0)
-+ return ret;
-+
-+ /* sr = (u16)(sr * 256.0 / 1000000.0) */
-+ sr = mt312_div(p->u.qpsk.symbol_rate * 4, 15625);
-+
-+ /* SYM_RATE */
-+ buf[0] = (sr >> 8) & 0x3f;
-+ buf[1] = (sr >> 0) & 0xff;
-+
-+ /* VIT_MODE */
-+ buf[2] = inv_tab[p->inversion] | fec_tab[p->u.qpsk.fec_inner];
-+
-+ /* QPSK_CTRL */
-+ buf[3] = 0x40; /* swap I and Q before QPSK demodulation */
-+
-+ if (p->u.qpsk.symbol_rate < 10000000)
-+ buf[3] |= 0x04; /* use afc mode */
-+
-+ /* GO */
-+ buf[4] = 0x01;
-+
-+ if ((ret = mt312_write(i2c, SYM_RATE_H, buf, sizeof(buf))) < 0)
-+ return ret;
-+
-+ return 0;
-+}
-+
-+static int mt312_get_inversion(struct dvb_i2c_bus *i2c,
-+ fe_spectral_inversion_t * i)
-+{
-+ int ret;
-+ u8 vit_mode;
-+
-+ if ((ret = mt312_readreg(i2c, VIT_MODE, &vit_mode)) < 0)
-+ return ret;
-+
-+ if (vit_mode & 0x80) /* auto inversion was used */
-+ *i = (vit_mode & 0x40) ? INVERSION_ON : INVERSION_OFF;
-+
-+ return 0;
-+}
-+
-+static int mt312_get_symbol_rate(struct dvb_i2c_bus *i2c, u32 * sr)
-+{
-+ int ret;
-+ u8 sym_rate_h;
-+ u8 dec_ratio;
-+ u16 sym_rat_op;
-+ u16 monitor;
-+ u8 buf[2];
-+
-+ if ((ret = mt312_readreg(i2c, SYM_RATE_H, &sym_rate_h)) < 0)
-+ return ret;
-+
-+ if (sym_rate_h & 0x80) { /* symbol rate search was used */
-+ if ((ret = mt312_writereg(i2c, MON_CTRL, 0x03)) < 0)
-+ return ret;
-+
-+ if ((ret = mt312_read(i2c, MONITOR_H, buf, sizeof(buf))) < 0)
-+ return ret;
-+
-+ monitor = (buf[0] << 8) | buf[1];
-+
-+ printk(KERN_DEBUG "sr(auto) = %u\n",
-+ mt312_div(monitor * 15625, 4));
-+ } else {
-+ if ((ret = mt312_writereg(i2c, MON_CTRL, 0x05)) < 0)
-+ return ret;
-+
-+ if ((ret = mt312_read(i2c, MONITOR_H, buf, sizeof(buf))) < 0)
-+ return ret;
-+
-+ dec_ratio = ((buf[0] >> 5) & 0x07) * 32;
-+
-+ if ((ret = mt312_read(i2c, SYM_RAT_OP_H, buf, sizeof(buf))) < 0)
-+ return ret;
-+
-+ sym_rat_op = (buf[0] << 8) | buf[1];
-+
-+ printk(KERN_DEBUG "sym_rat_op=%d dec_ratio=%d\n",
-+ sym_rat_op, dec_ratio);
-+ printk(KERN_DEBUG "*sr(manual) = %lu\n",
-+ (((MT312_PLL_CLK * 8192) / (sym_rat_op + 8192)) *
-+ 2) - dec_ratio);
-+ }
-+
-+ return 0;
-+}
-+
-+static int mt312_get_code_rate(struct dvb_i2c_bus *i2c, fe_code_rate_t * cr)
-+{
-+ const fe_code_rate_t fec_tab[8] =
-+ { FEC_1_2, FEC_2_3, FEC_3_4, FEC_5_6, FEC_6_7, FEC_7_8,
-+ FEC_AUTO, FEC_AUTO };
-+
-+ int ret;
-+ u8 fec_status;
-+
-+ if ((ret = mt312_readreg(i2c, FEC_STATUS, &fec_status)) < 0)
-+ return ret;
-+
-+ *cr = fec_tab[(fec_status >> 4) & 0x07];
-+
-+ return 0;
-+}
-+
-+static int mt312_get_frontend(struct dvb_i2c_bus *i2c,
-+ struct dvb_frontend_parameters *p)
-+{
-+ int ret;
-+
-+ if ((ret = mt312_get_inversion(i2c, &p->inversion)) < 0)
-+ return ret;
-+
-+ if ((ret = mt312_get_symbol_rate(i2c, &p->u.qpsk.symbol_rate)) < 0)
-+ return ret;
-+
-+ if ((ret = mt312_get_code_rate(i2c, &p->u.qpsk.fec_inner)) < 0)
-+ return ret;
-+
-+ return 0;
-+}
-+
-+static int mt312_sleep(struct dvb_i2c_bus *i2c)
-+{
-+ int ret;
-+ u8 config;
-+
-+ /* reset all registers to defaults */
-+ if ((ret = mt312_reset(i2c, 1)) < 0)
-+ return ret;
-+
-+ if ((ret = mt312_readreg(i2c, CONFIG, &config)) < 0)
-+ return ret;
-+
-+ /* enter standby */
-+ if ((ret = mt312_writereg(i2c, CONFIG, config & 0x7f)) < 0)
-+ return ret;
-+
-+ return 0;
-+}
-+
-+static int mt312_ioctl(struct dvb_frontend *fe, unsigned int cmd, void *arg)
-+{
-+ struct dvb_i2c_bus *i2c = fe->i2c;
-+
-+ switch (cmd) {
-+ case FE_GET_INFO:
-+ memcpy(arg, &mt312_info, sizeof(struct dvb_frontend_info));
-+ break;
-+
-+ case FE_DISEQC_RESET_OVERLOAD:
-+ return -EOPNOTSUPP;
-+
-+ case FE_DISEQC_SEND_MASTER_CMD:
-+ return mt312_send_master_cmd(i2c, arg);
-+
-+ case FE_DISEQC_RECV_SLAVE_REPLY:
-+ if ((long) fe->data == ID_MT312)
-+ return mt312_recv_slave_reply(i2c, arg);
-+ else
-+ return -EOPNOTSUPP;
-+
-+ case FE_DISEQC_SEND_BURST:
-+ return mt312_send_burst(i2c, (fe_sec_mini_cmd_t) arg);
-+
-+ case FE_SET_TONE:
-+ return mt312_set_tone(i2c, (fe_sec_tone_mode_t) arg);
-+
-+ case FE_SET_VOLTAGE:
-+ return mt312_set_voltage(i2c, (fe_sec_voltage_t) arg);
-+
-+ case FE_ENABLE_HIGH_LNB_VOLTAGE:
-+ return -EOPNOTSUPP;
-+
-+ case FE_READ_STATUS:
-+ return mt312_read_status(i2c, arg);
-+
-+ case FE_READ_BER:
-+ return mt312_read_bercnt(i2c, arg);
-+
-+ case FE_READ_SIGNAL_STRENGTH:
-+ return mt312_read_agc(i2c, arg);
-+
-+ case FE_READ_SNR:
-+ return mt312_read_snr(i2c, arg);
-+
-+ case FE_READ_UNCORRECTED_BLOCKS:
-+ return mt312_read_ubc(i2c, arg);
-+
-+ case FE_SET_FRONTEND:
-+ return mt312_set_frontend(i2c, arg, (long) fe->data);
-+
-+ case FE_GET_FRONTEND:
-+ return mt312_get_frontend(i2c, arg);
-+
-+ case FE_GET_EVENT:
-+ return -EOPNOTSUPP;
-+
-+ case FE_SLEEP:
-+ return mt312_sleep(i2c);
-+
-+ case FE_INIT:
-+ return mt312_init(i2c, (long) fe->data);
-+
-+ case FE_RESET:
-+ return mt312_reset(i2c, 0);
-+
-+ default:
-+ return -ENOIOCTLCMD;
-+ }
-+
-+ return 0;
-+}
-+
-+static int mt312_attach(struct dvb_i2c_bus *i2c)
-+{
-+ int ret;
-+ u8 id;
-+
-+ if ((ret = mt312_readreg(i2c, ID, &id)) < 0)
-+ return ret;
-+
-+ if ((id != ID_VP310) && (id != ID_MT312))
-+ return -ENODEV;
-+
-+ return dvb_register_frontend(mt312_ioctl, i2c, (void *) (long) id,
-+ &mt312_info);
-+}
-+
-+static void mt312_detach(struct dvb_i2c_bus *i2c)
-+{
-+ dvb_unregister_frontend(mt312_ioctl, i2c);
-+}
-+
-+static int __init mt312_module_init(void)
-+{
-+ return dvb_register_i2c_device(THIS_MODULE, mt312_attach, mt312_detach);
-+}
-+
-+static void __exit mt312_module_exit(void)
-+{
-+ dvb_unregister_i2c_device(mt312_attach);
-+}
-+
-+module_init(mt312_module_init);
-+module_exit(mt312_module_exit);
-+
-+MODULE_DESCRIPTION("MT312 Satellite Channel Decoder Driver");
-+MODULE_AUTHOR("Andreas Oberritter <obi@saftware.de>");
-+MODULE_LICENSE("GPL");
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/media/dvb/frontends/mt312.h 2003-07-19 17:03:49.000000000 -0700
-@@ -0,0 +1,162 @@
-+/*
-+ Driver for Zarlink MT312 QPSK Frontend
-+
-+ Copyright (C) 2003 Andreas Oberritter <obi@saftware.de>
-+
-+ This program is free software; you can redistribute it and/or modify
-+ it under the terms of the GNU General Public License as published by
-+ the Free Software Foundation; either version 2 of the License, or
-+ (at your option) any later version.
-+
-+ This program is distributed in the hope that it will be useful,
-+ but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+
-+ GNU General Public License for more details.
-+
-+ You should have received a copy of the GNU General Public License
-+ along with this program; if not, write to the Free Software
-+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+
-+*/
-+
-+#ifndef _DVB_FRONTENDS_MT312
-+#define _DVB_FRONTENDS_MT312
-+
-+enum mt312_reg_addr {
-+ QPSK_INT_H = 0,
-+ QPSK_INT_M = 1,
-+ QPSK_INT_L = 2,
-+ FEC_INT = 3,
-+ QPSK_STAT_H = 4,
-+ QPSK_STAT_L = 5,
-+ FEC_STATUS = 6,
-+ LNB_FREQ_H = 7,
-+ LNB_FREQ_L = 8,
-+ M_SNR_H = 9,
-+ M_SNR_L = 10,
-+ VIT_ERRCNT_H = 11,
-+ VIT_ERRCNT_M = 12,
-+ VIT_ERRCNT_L = 13,
-+ RS_BERCNT_H = 14,
-+ RS_BERCNT_M = 15,
-+ RS_BERCNT_L = 16,
-+ RS_UBC_H = 17,
-+ RS_UBC_L = 18,
-+ SIG_LEVEL = 19,
-+ GPP_CTRL = 20,
-+ RESET = 21,
-+ DISEQC_MODE = 22,
-+ SYM_RATE_H = 23,
-+ SYM_RATE_L = 24,
-+ VIT_MODE = 25,
-+ QPSK_CTRL = 26,
-+ GO = 27,
-+ IE_QPSK_H = 28,
-+ IE_QPSK_M = 29,
-+ IE_QPSK_L = 30,
-+ IE_FEC = 31,
-+ QPSK_STAT_EN = 32,
-+ FEC_STAT_EN = 33,
-+ SYS_CLK = 34,
-+ DISEQC_RATIO = 35,
-+ DISEQC_INSTR = 36,
-+ FR_LIM = 37,
-+ FR_OFF = 38,
-+ AGC_CTRL = 39,
-+ AGC_INIT = 40,
-+ AGC_REF = 41,
-+ AGC_MAX = 42,
-+ AGC_MIN = 43,
-+ AGC_LK_TH = 44,
-+ TS_AGC_LK_TH = 45,
-+ AGC_PWR_SET = 46,
-+ QPSK_MISC = 47,
-+ SNR_THS_LOW = 48,
-+ SNR_THS_HIGH = 49,
-+ TS_SW_RATE = 50,
-+ TS_SW_LIM_L = 51,
-+ TS_SW_LIM_H = 52,
-+ CS_SW_RATE_1 = 53,
-+ CS_SW_RATE_2 = 54,
-+ CS_SW_RATE_3 = 55,
-+ CS_SW_RATE_4 = 56,
-+ CS_SW_LIM = 57,
-+ TS_LPK = 58,
-+ TS_LPK_M = 59,
-+ TS_LPK_L = 60,
-+ CS_KPROP_H = 61,
-+ CS_KPROP_L = 62,
-+ CS_KINT_H = 63,
-+ CS_KINT_L = 64,
-+ QPSK_SCALE = 65,
-+ TLD_OUTCLK_TH = 66,
-+ TLD_INCLK_TH = 67,
-+ FLD_TH = 68,
-+ PLD_OUTLK3 = 69,
-+ PLD_OUTLK2 = 70,
-+ PLD_OUTLK1 = 71,
-+ PLD_OUTLK0 = 72,
-+ PLD_INLK3 = 73,
-+ PLD_INLK2 = 74,
-+ PLD_INLK1 = 75,
-+ PLD_INLK0 = 76,
-+ PLD_ACC_TIME = 77,
-+ SWEEP_PAR = 78,
-+ STARTUP_TIME = 79,
-+ LOSSLOCK_TH = 80,
-+ FEC_LOCK_TM = 81,
-+ LOSSLOCK_TM = 82,
-+ VIT_ERRPER_H = 83,
-+ VIT_ERRPER_M = 84,
-+ VIT_ERRPER_L = 85,
-+ VIT_SETUP = 86,
-+ VIT_REF0 = 87,
-+ VIT_REF1 = 88,
-+ VIT_REF2 = 89,
-+ VIT_REF3 = 90,
-+ VIT_REF4 = 91,
-+ VIT_REF5 = 92,
-+ VIT_REF6 = 93,
-+ VIT_MAXERR = 94,
-+ BA_SETUPT = 95,
-+ OP_CTRL = 96,
-+ FEC_SETUP = 97,
-+ PROG_SYNC = 98,
-+ AFC_SEAR_TH = 99,
-+ CSACC_DIF_TH = 100,
-+ QPSK_LK_CT = 101,
-+ QPSK_ST_CT = 102,
-+ MON_CTRL = 103,
-+ QPSK_RESET = 104,
-+ QPSK_TST_CT = 105,
-+ QPSK_TST_ST = 106,
-+ TEST_R = 107,
-+ AGC_H = 108,
-+ AGC_M = 109,
-+ AGC_L = 110,
-+ FREQ_ERR1_H = 111,
-+ FREQ_ERR1_M = 112,
-+ FREQ_ERR1_L = 113,
-+ FREQ_ERR2_H = 114,
-+ FREQ_ERR2_L = 115,
-+ SYM_RAT_OP_H = 116,
-+ SYM_RAT_OP_L = 117,
-+ DESEQC2_INT = 118,
-+ DISEQC2_STAT = 119,
-+ DISEQC2_FIFO = 120,
-+ DISEQC2_CTRL1 = 121,
-+ DISEQC2_CTRL2 = 122,
-+ MONITOR_H = 123,
-+ MONITOR_L = 124,
-+ TEST_MODE = 125,
-+ ID = 126,
-+ CONFIG = 127
-+};
-+
-+enum mt312_model_id {
-+ ID_VP310 = 1,
-+ ID_MT312 = 3
-+};
-+
-+#endif /* DVB_FRONTENDS_MT312 */
---- linux-2.6.0-test1/drivers/media/dvb/frontends/nxt6000.c 2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/dvb/frontends/nxt6000.c 2003-07-19 17:03:49.000000000 -0700
-@@ -6,8 +6,10 @@
-
- Alps TDME7 (Tuner: MITEL SP5659)
- Alps TDED4 (Tuner: TI ALP510, external Nxt6000)
-+ Comtech DVBT-6k07 (PLL IC: SP5730)
-
- Copyright (C) 2002-2003 Florian Schirmer <schirmer@taytron.net>
-+ Copyright (C) 2003 Paul Andreassen <paul@andreassen.com.au>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
-@@ -78,6 +80,7 @@ struct nxt6000_config {
-
- #define TUNER_TYPE_ALP510 0
- #define TUNER_TYPE_SP5659 1
-+#define TUNER_TYPE_SP5730 2
-
- #define FE2NXT(fe) ((struct nxt6000_config *)&(fe->data))
- #define FREQ2DIV(freq) ((freq + 36166667) / 166667)
-@@ -212,6 +215,39 @@ static int alp510_set_tv_freq(struct dvb
-
- }
-
-+static int sp5730_set_tv_freq(struct dvb_frontend *fe, u32 freq)
-+{
-+
-+ u8 buf[4];
-+ struct nxt6000_config *nxt = FE2NXT(fe);
-+
-+ buf[0] = (FREQ2DIV(freq) >> 8) & 0x7F;
-+ buf[1] = FREQ2DIV(freq) & 0xFF;
-+ buf[2] = 0x93;
-+
-+ if ((freq >= 51000000) && (freq < 132100000))
-+ buf[3] = 0x05;
-+ else if ((freq >= 132100000) && (freq < 143000000))
-+ buf[3] = 0x45;
-+ else if ((freq >= 146000000) && (freq < 349100000))
-+ buf[3] = 0x06;
-+ else if ((freq >= 349100000) && (freq < 397100000))
-+ buf[3] = 0x46;
-+ else if ((freq >= 397100000) && (freq < 426000000))
-+ buf[3] = 0x86;
-+ else if ((freq >= 430000000) && (freq < 659100000))
-+ buf[3] = 0x03;
-+ else if ((freq >= 659100000) && (freq < 759100000))
-+ buf[3] = 0x43;
-+ else if ((freq >= 759100000) && (freq < 858000000))
-+ buf[3] = 0x83;
-+ else
-+ return -EINVAL;
-+
-+ return pll_write(fe->i2c, nxt->demod_addr, nxt->tuner_addr, buf, 4);
-+
-+}
-+
- static void nxt6000_reset(struct dvb_frontend *fe)
- {
-
-@@ -756,6 +792,13 @@ static int nxt6000_ioctl(struct dvb_fron
-
- break;
-
-+ case TUNER_TYPE_SP5730:
-+
-+ if ((result = sp5730_set_tv_freq(fe, param->frequency)) < 0)
-+ return result;
-+
-+ break;
-+
- default:
-
- return -EFAULT;
-@@ -816,6 +859,14 @@ static int nxt6000_attach(struct dvb_i2c
-
- dprintk("nxt6000: detected MITEL SP5659 tuner at 0x%02X\n", nxt.tuner_addr);
-
-+ } else if (pll_write(i2c, demod_addr_tbl[addr_nr], 0xC0, NULL, 0) == 0) {
-+
-+ nxt.tuner_addr = 0xC0;
-+ nxt.tuner_type = TUNER_TYPE_SP5730;
-+ nxt.clock_inversion = 0;
-+
-+ dprintk("nxt6000: detected SP5730 tuner at 0x%02X\n", nxt.tuner_addr);
-+
- } else {
-
- printk("nxt6000: unable to detect tuner\n");
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/media/dvb/frontends/tda1004x.c 2003-07-19 17:03:49.000000000 -0700
-@@ -0,0 +1,1158 @@
-+ /*
-+ Driver for Philips tda1004x OFDM Frontend
-+
-+ This program is free software; you can redistribute it and/or modify
-+ it under the terms of the GNU General Public License as published by
-+ the Free Software Foundation; either version 2 of the License, or
-+ (at your option) any later version.
-+
-+ This program is distributed in the hope that it will be useful,
-+ but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+
-+ GNU General Public License for more details.
-+
-+ You should have received a copy of the GNU General Public License
-+ along with this program; if not, write to the Free Software
-+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+
-+ */
-+
-+/*
-+ This driver needs a copy of the DLL "ttlcdacc.dll" from the Haupauge or Technotrend
-+ windows driver saved as '/etc/dvb/tda1004x.mc'.
-+ You can also pass the complete file name with the module parameter 'tda1004x_firmware'.
-+
-+ Currently the DLL from v2.15a of the technotrend driver is supported. Other versions can
-+ be added reasonably painlessly.
-+
-+ Windows driver URL: http://www.technotrend.de/
-+ */
-+
-+
-+#define __KERNEL_SYSCALLS__
-+#include <linux/kernel.h>
-+#include <linux/vmalloc.h>
-+#include <linux/module.h>
-+#include <linux/init.h>
-+#include <linux/string.h>
-+#include <linux/slab.h>
-+#include <linux/fs.h>
-+#include <linux/unistd.h>
-+#include <linux/fcntl.h>
-+#include <linux/errno.h>
-+#include "dvb_frontend.h"
-+#include "dvb_functions.h"
-+
-+#ifndef CONFIG_TDA1004X_MC_LOCATION
-+#define CONFIG_TDA1004X_MC_LOCATION "/etc/dvb/tda1004x.mc"
-+#endif
-+
-+static int tda1004x_debug = 0;
-+static char *tda1004x_firmware = CONFIG_TDA1004X_MC_LOCATION;
-+
-+
-+#define TDA10045H_ADDRESS 0x08
-+#define TD1344_ADDRESS 0x61
-+#define TDM1316L_ADDRESS 0x63
-+#define MC44BC374_ADDRESS 0x65
-+
-+#define TDA1004X_CHIPID 0x00
-+#define TDA1004X_AUTO 0x01
-+#define TDA1004X_IN_CONF1 0x02
-+#define TDA1004X_IN_CONF2 0x03
-+#define TDA1004X_OUT_CONF1 0x04
-+#define TDA1004X_OUT_CONF2 0x05
-+#define TDA1004X_STATUS_CD 0x06
-+#define TDA1004X_CONFC4 0x07
-+#define TDA1004X_DSSPARE2 0x0C
-+#define TDA1004X_CODE_IN 0x0D
-+#define TDA1004X_FWPAGE 0x0E
-+#define TDA1004X_SCAN_CPT 0x10
-+#define TDA1004X_DSP_CMD 0x11
-+#define TDA1004X_DSP_ARG 0x12
-+#define TDA1004X_DSP_DATA1 0x13
-+#define TDA1004X_DSP_DATA2 0x14
-+#define TDA1004X_CONFADC1 0x15
-+#define TDA1004X_CONFC1 0x16
-+#define TDA1004X_SIGNAL_STRENGTH 0x1a
-+#define TDA1004X_SNR 0x1c
-+#define TDA1004X_REG1E 0x1e
-+#define TDA1004X_REG1F 0x1f
-+#define TDA1004X_CBER_RESET 0x20
-+#define TDA1004X_CBER_MSB 0x21
-+#define TDA1004X_CBER_LSB 0x22
-+#define TDA1004X_CVBER_LUT 0x23
-+#define TDA1004X_VBER_MSB 0x24
-+#define TDA1004X_VBER_MID 0x25
-+#define TDA1004X_VBER_LSB 0x26
-+#define TDA1004X_UNCOR 0x27
-+#define TDA1004X_CONFPLL_P 0x2D
-+#define TDA1004X_CONFPLL_M_MSB 0x2E
-+#define TDA1004X_CONFPLL_M_LSB 0x2F
-+#define TDA1004X_CONFPLL_N 0x30
-+#define TDA1004X_UNSURW_MSB 0x31
-+#define TDA1004X_UNSURW_LSB 0x32
-+#define TDA1004X_WREF_MSB 0x33
-+#define TDA1004X_WREF_MID 0x34
-+#define TDA1004X_WREF_LSB 0x35
-+#define TDA1004X_MUXOUT 0x36
-+#define TDA1004X_CONFADC2 0x37
-+#define TDA1004X_IOFFSET 0x38
-+
-+#define dprintk if (tda1004x_debug) printk
-+
-+static struct dvb_frontend_info tda10045h_info = {
-+ .name = "Philips TDA10045H",
-+ .type = FE_OFDM,
-+ .frequency_min = 51000000,
-+ .frequency_max = 858000000,
-+ .frequency_stepsize = 166667,
-+ .caps = FE_CAN_INVERSION_AUTO |
-+ FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 |
-+ FE_CAN_FEC_5_6 | FE_CAN_FEC_7_8 | FE_CAN_FEC_AUTO |
-+ FE_CAN_QPSK | FE_CAN_QAM_16 | FE_CAN_QAM_64 | FE_CAN_QAM_AUTO |
-+ FE_CAN_TRANSMISSION_MODE_AUTO | FE_CAN_GUARD_INTERVAL_AUTO
-+};
-+
-+#pragma pack(1)
-+struct tda1004x_state {
-+ u8 tda1004x_address;
-+ u8 tuner_address;
-+ u8 initialised:1;
-+};
-+#pragma pack()
-+
-+struct fwinfo {
-+ int file_size;
-+ int fw_offset;
-+ int fw_size;
-+};
-+static struct fwinfo tda10045h_fwinfo[] = { {.file_size = 286720,.fw_offset = 0x34cc5,.fw_size = 30555} };
-+static int tda10045h_fwinfo_count = sizeof(tda10045h_fwinfo) / sizeof(struct fwinfo);
-+
-+static int errno;
-+
-+
-+static int tda1004x_write_byte(struct dvb_i2c_bus *i2c, struct tda1004x_state *tda_state, int reg, int data)
-+{
-+ int ret;
-+ u8 buf[] = { reg, data };
-+ struct i2c_msg msg = { .addr=0, .flags=0, .buf=buf, .len=2 };
-+
-+ dprintk("%s: reg=0x%x, data=0x%x\n", __FUNCTION__, reg, data);
-+
-+ msg.addr = tda_state->tda1004x_address;
-+ ret = i2c->xfer(i2c, &msg, 1);
-+
-+ if (ret != 1)
-+ dprintk("%s: error reg=0x%x, data=0x%x, ret=%i\n",
-+ __FUNCTION__, reg, data, ret);
-+
-+ dprintk("%s: success reg=0x%x, data=0x%x, ret=%i\n", __FUNCTION__,
-+ reg, data, ret);
-+ return (ret != 1) ? -1 : 0;
-+}
-+
-+static int tda1004x_read_byte(struct dvb_i2c_bus *i2c, struct tda1004x_state *tda_state, int reg)
-+{
-+ int ret;
-+ u8 b0[] = { reg };
-+ u8 b1[] = { 0 };
-+ struct i2c_msg msg[] = {{ .addr=0, .flags=0, .buf=b0, .len=1},
-+ { .addr=0, .flags=I2C_M_RD, .buf=b1, .len = 1}};
-+
-+ dprintk("%s: reg=0x%x\n", __FUNCTION__, reg);
-+
-+ msg[0].addr = tda_state->tda1004x_address;
-+ msg[1].addr = tda_state->tda1004x_address;
-+ ret = i2c->xfer(i2c, msg, 2);
-+
-+ if (ret != 2) {
-+ dprintk("%s: error reg=0x%x, ret=%i\n", __FUNCTION__, reg,
-+ ret);
-+ return -1;
-+ }
-+
-+ dprintk("%s: success reg=0x%x, data=0x%x, ret=%i\n", __FUNCTION__,
-+ reg, b1[0], ret);
-+ return b1[0];
-+}
-+
-+static int tda1004x_write_mask(struct dvb_i2c_bus *i2c, struct tda1004x_state *tda_state, int reg, int mask, int data)
-+{
-+ int val;
-+ dprintk("%s: reg=0x%x, mask=0x%x, data=0x%x\n", __FUNCTION__, reg,
-+ mask, data);
-+
-+ // read a byte and check
-+ val = tda1004x_read_byte(i2c, tda_state, reg);
-+ if (val < 0)
-+ return val;
-+
-+ // mask if off
-+ val = val & ~mask;
-+ val |= data & 0xff;
-+
-+ // write it out again
-+ return tda1004x_write_byte(i2c, tda_state, reg, val);
-+}
-+
-+static int tda1004x_write_buf(struct dvb_i2c_bus *i2c, struct tda1004x_state *tda_state, int reg, unsigned char *buf, int len)
-+{
-+ int i;
-+ int result;
-+
-+ dprintk("%s: reg=0x%x, len=0x%x\n", __FUNCTION__, reg, len);
-+
-+ result = 0;
-+ for (i = 0; i < len; i++) {
-+ result = tda1004x_write_byte(i2c, tda_state, reg + i, buf[i]);
-+ if (result != 0)
-+ break;
-+ }
-+
-+ return result;
-+}
-+
-+static int tda1004x_enable_tuner_i2c(struct dvb_i2c_bus *i2c, struct tda1004x_state *tda_state)
-+{
-+ int result;
-+ dprintk("%s\n", __FUNCTION__);
-+
-+ result = tda1004x_write_mask(i2c, tda_state, TDA1004X_CONFC4, 2, 2);
-+ dvb_delay(1);
-+ return result;
-+}
-+
-+static int tda1004x_disable_tuner_i2c(struct dvb_i2c_bus *i2c, struct tda1004x_state *tda_state)
-+{
-+
-+ dprintk("%s\n", __FUNCTION__);
-+
-+ return tda1004x_write_mask(i2c, tda_state, TDA1004X_CONFC4, 2, 0);
-+}
-+
-+
-+static int tda10045h_set_bandwidth(struct dvb_i2c_bus *i2c,
-+ struct tda1004x_state *tda_state,
-+ fe_bandwidth_t bandwidth)
-+{
-+ static u8 bandwidth_6mhz[] = { 0x02, 0x00, 0x3d, 0x00, 0x60, 0x1e, 0xa7, 0x45, 0x4f };
-+ static u8 bandwidth_7mhz[] = { 0x02, 0x00, 0x37, 0x00, 0x4a, 0x2f, 0x6d, 0x76, 0xdb };
-+ static u8 bandwidth_8mhz[] = { 0x02, 0x00, 0x3d, 0x00, 0x48, 0x17, 0x89, 0xc7, 0x14 };
-+
-+ switch (bandwidth) {
-+ case BANDWIDTH_6_MHZ:
-+ tda1004x_write_byte(i2c, tda_state, TDA1004X_DSSPARE2, 0x14);
-+ tda1004x_write_buf(i2c, tda_state, TDA1004X_CONFPLL_P, bandwidth_6mhz, sizeof(bandwidth_6mhz));
-+ break;
-+
-+ case BANDWIDTH_7_MHZ:
-+ tda1004x_write_byte(i2c, tda_state, TDA1004X_DSSPARE2, 0x80);
-+ tda1004x_write_buf(i2c, tda_state, TDA1004X_CONFPLL_P, bandwidth_7mhz, sizeof(bandwidth_7mhz));
-+ break;
-+
-+ case BANDWIDTH_8_MHZ:
-+ tda1004x_write_byte(i2c, tda_state, TDA1004X_DSSPARE2, 0x14);
-+ tda1004x_write_buf(i2c, tda_state, TDA1004X_CONFPLL_P, bandwidth_8mhz, sizeof(bandwidth_8mhz));
-+ break;
-+
-+ default:
-+ return -EINVAL;
-+ }
-+
-+ tda1004x_write_byte(i2c, tda_state, TDA1004X_IOFFSET, 0);
-+
-+ // done
-+ return 0;
-+}
-+
-+
-+static int tda1004x_init(struct dvb_i2c_bus *i2c, struct tda1004x_state *tda_state)
-+{
-+ u8 fw_buf[65];
-+ struct i2c_msg fw_msg = {.addr = 0,.flags = 0,.buf = fw_buf,.len = 0 };
-+ struct i2c_msg tuner_msg = {.addr = 0,.flags = 0,.buf = 0,.len = 0 };
-+ unsigned char *firmware = NULL;
-+ int filesize;
-+ int fd;
-+ int fwinfo_idx;
-+ int fw_size = 0;
-+ int fw_pos;
-+ int tx_size;
-+ static u8 disable_mc44BC374c[] = { 0x1d, 0x74, 0xa0, 0x68 };
-+ mm_segment_t fs = get_fs();
-+
-+ dprintk("%s\n", __FUNCTION__);
-+
-+ // Load the firmware
-+ set_fs(get_ds());
-+ fd = open(tda1004x_firmware, 0, 0);
-+ if (fd < 0) {
-+ printk("%s: Unable to open firmware %s\n", __FUNCTION__,
-+ tda1004x_firmware);
-+ return -EIO;
-+ }
-+ filesize = lseek(fd, 0L, 2);
-+ if (filesize <= 0) {
-+ printk("%s: Firmware %s is empty\n", __FUNCTION__,
-+ tda1004x_firmware);
-+ sys_close(fd);
-+ return -EIO;
-+ }
-+
-+ // find extraction parameters
-+ for (fwinfo_idx = 0; fwinfo_idx < tda10045h_fwinfo_count; fwinfo_idx++) {
-+ if (tda10045h_fwinfo[fwinfo_idx].file_size == filesize)
-+ break;
-+ }
-+ if (fwinfo_idx >= tda10045h_fwinfo_count) {
-+ printk("%s: Unsupported firmware %s\n", __FUNCTION__, tda1004x_firmware);
-+ sys_close(fd);
-+ return -EIO;
-+ }
-+ fw_size = tda10045h_fwinfo[fwinfo_idx].fw_size;
-+
-+ // allocate buffer for it
-+ firmware = vmalloc(fw_size);
-+ if (firmware == NULL) {
-+ printk("%s: Out of memory loading firmware\n",
-+ __FUNCTION__);
-+ sys_close(fd);
-+ return -EIO;
-+ }
-+
-+ // read it!
-+ lseek(fd, tda10045h_fwinfo[fwinfo_idx].fw_offset, 0);
-+ if (read(fd, firmware, fw_size) != fw_size) {
-+ printk("%s: Failed to read firmware\n", __FUNCTION__);
-+ vfree(firmware);
-+ sys_close(fd);
-+ return -EIO;
-+ }
-+ sys_close(fd);
-+ set_fs(fs);
-+
-+ // Disable the MC44BC374C
-+ tda1004x_enable_tuner_i2c(i2c, tda_state);
-+ tuner_msg.addr = MC44BC374_ADDRESS;
-+ tuner_msg.buf = disable_mc44BC374c;
-+ tuner_msg.len = sizeof(disable_mc44BC374c);
-+ if (i2c->xfer(i2c, &tuner_msg, 1) != 1) {
-+ i2c->xfer(i2c, &tuner_msg, 1);
-+ }
-+ tda1004x_disable_tuner_i2c(i2c, tda_state);
-+
-+ // set some valid bandwith parameters
-+ switch(tda_state->tda1004x_address) {
-+ case TDA10045H_ADDRESS:
-+ tda10045h_set_bandwidth(i2c, tda_state, BANDWIDTH_8_MHZ);
-+ break;
-+ }
-+ dvb_delay(500);
-+
-+ // do the firmware upload
-+ tda1004x_write_byte(i2c, tda_state, TDA1004X_FWPAGE, 0);
-+ fw_msg.addr = tda_state->tda1004x_address;
-+ fw_pos = 0;
-+ while (fw_pos != fw_size) {
-+ // work out how much to send this time
-+ tx_size = fw_size - fw_pos;
-+ if (tx_size > 64) {
-+ tx_size = 64;
-+ }
-+ // send the chunk
-+ fw_buf[0] = TDA1004X_CODE_IN;
-+ memcpy(fw_buf + 1, firmware + fw_pos, tx_size);
-+ fw_msg.len = tx_size + 1;
-+ if (i2c->xfer(i2c, &fw_msg, 1) != 1) {
-+ vfree(firmware);
-+ return -EIO;
-+ }
-+ fw_pos += tx_size;
-+
-+ dprintk("%s: fw_pos=0x%x\n", __FUNCTION__, fw_pos);
-+ }
-+ dvb_delay(100);
-+ vfree(firmware);
-+
-+ // Initialise the DSP and check upload was OK
-+ tda1004x_write_mask(i2c, tda_state, TDA1004X_CONFC4, 0x10, 0);
-+ tda1004x_write_byte(i2c, tda_state, TDA1004X_DSP_CMD, 0x67);
-+ if ((tda1004x_read_byte(i2c, tda_state, TDA1004X_DSP_DATA1) != 0x67) ||
-+ (tda1004x_read_byte(i2c, tda_state, TDA1004X_DSP_DATA2) != 0x2c)) {
-+ printk("%s: firmware upload failed!\n", __FUNCTION__);
-+ return -EIO;
-+ }
-+
-+ // tda setup
-+ tda1004x_write_mask(i2c, tda_state, TDA1004X_AUTO, 8, 0);
-+ tda1004x_write_mask(i2c, tda_state, TDA1004X_AUTO, 0x10, 0x10);
-+ tda1004x_write_mask(i2c, tda_state, TDA1004X_IN_CONF2, 0xC0, 0x0);
-+ tda1004x_write_mask(i2c, tda_state, TDA1004X_CONFC4, 0x20, 0);
-+ tda1004x_write_byte(i2c, tda_state, TDA1004X_CONFADC1, 0x2e);
-+ tda1004x_write_mask(i2c, tda_state, TDA1004X_CONFC1, 0x80, 0x80);
-+ tda1004x_write_mask(i2c, tda_state, TDA1004X_CONFC1, 0x40, 0);
-+ tda1004x_write_mask(i2c, tda_state, TDA1004X_CONFC1, 0x10, 0);
-+ tda1004x_write_byte(i2c, tda_state, TDA1004X_REG1E, 0);
-+ tda1004x_write_byte(i2c, tda_state, TDA1004X_REG1F, 0);
-+ tda1004x_write_mask(i2c, tda_state, TDA1004X_VBER_MSB, 0xe0, 0xa0);
-+
-+ // done
-+ return 0;
-+}
-+
-+static int tda1004x_encode_fec(int fec)
-+{
-+ // convert known FEC values
-+ switch (fec) {
-+ case FEC_1_2:
-+ return 0;
-+ case FEC_2_3:
-+ return 1;
-+ case FEC_3_4:
-+ return 2;
-+ case FEC_5_6:
-+ return 3;
-+ case FEC_7_8:
-+ return 4;
-+ }
-+
-+ // unsupported
-+ return -EINVAL;
-+}
-+
-+static int tda1004x_decode_fec(int tdafec)
-+{
-+ // convert known FEC values
-+ switch (tdafec) {
-+ case 0:
-+ return FEC_1_2;
-+ case 1:
-+ return FEC_2_3;
-+ case 2:
-+ return FEC_3_4;
-+ case 3:
-+ return FEC_5_6;
-+ case 4:
-+ return FEC_7_8;
-+ }
-+
-+ // unsupported
-+ return -1;
-+}
-+
-+static int tda1004x_set_frequency(struct dvb_i2c_bus *i2c,
-+ struct tda1004x_state *tda_state,
-+ struct dvb_frontend_parameters *fe_params)
-+{
-+ u8 tuner_buf[4];
-+ struct i2c_msg tuner_msg = {.addr=0, .flags=0, .buf=tuner_buf, .len=sizeof(tuner_buf) };
-+ int tuner_frequency;
-+ u8 band, cp, filter;
-+ int counter, counter2;
-+
-+ dprintk("%s\n", __FUNCTION__);
-+
-+ // setup the frequency buffer
-+ switch (tda_state->tuner_address) {
-+ case TD1344_ADDRESS:
-+
-+ // setup tuner buffer
-+ tuner_frequency =
-+ (((fe_params->frequency / 1000) * 6) + 217502) / 1000;
-+ tuner_buf[0] = tuner_frequency >> 8;
-+ tuner_buf[1] = tuner_frequency & 0xff;
-+ tuner_buf[2] = 0x88;
-+ if (fe_params->frequency < 550000000) {
-+ tuner_buf[3] = 0xab;
-+ } else {
-+ tuner_buf[3] = 0xeb;
-+ }
-+
-+ // tune it
-+ tda1004x_enable_tuner_i2c(i2c, tda_state);
-+ tuner_msg.addr = tda_state->tuner_address;
-+ tuner_msg.len = 4;
-+ i2c->xfer(i2c, &tuner_msg, 1);
-+
-+ // wait for it to finish
-+ tuner_msg.len = 1;
-+ tuner_msg.flags = I2C_M_RD;
-+ counter = 0;
-+ counter2 = 0;
-+ while (counter++ < 100) {
-+ if (i2c->xfer(i2c, &tuner_msg, 1) == 1) {
-+ if (tuner_buf[0] & 0x40) {
-+ counter2++;
-+ } else {
-+ counter2 = 0;
-+ }
-+ }
-+
-+ if (counter2 > 10) {
-+ break;
-+ }
-+ }
-+ tda1004x_disable_tuner_i2c(i2c, tda_state);
-+ break;
-+
-+ case TDM1316L_ADDRESS:
-+ // determine charge pump
-+ tuner_frequency = fe_params->frequency + 36130000;
-+ if (tuner_frequency < 87000000) {
-+ return -EINVAL;
-+ } else if (tuner_frequency < 130000000) {
-+ cp = 3;
-+ } else if (tuner_frequency < 160000000) {
-+ cp = 5;
-+ } else if (tuner_frequency < 200000000) {
-+ cp = 6;
-+ } else if (tuner_frequency < 290000000) {
-+ cp = 3;
-+ } else if (tuner_frequency < 420000000) {
-+ cp = 5;
-+ } else if (tuner_frequency < 480000000) {
-+ cp = 6;
-+ } else if (tuner_frequency < 620000000) {
-+ cp = 3;
-+ } else if (tuner_frequency < 830000000) {
-+ cp = 5;
-+ } else if (tuner_frequency < 895000000) {
-+ cp = 7;
-+ } else {
-+ return -EINVAL;
-+ }
-+
-+ // determine band
-+ if (fe_params->frequency < 49000000) {
-+ return -EINVAL;
-+ } else if (fe_params->frequency < 159000000) {
-+ band = 1;
-+ } else if (fe_params->frequency < 444000000) {
-+ band = 2;
-+ } else if (fe_params->frequency < 861000000) {
-+ band = 4;
-+ } else {
-+ return -EINVAL;
-+ }
-+
-+ // work out filter
-+ switch (fe_params->u.ofdm.bandwidth) {
-+ case BANDWIDTH_6_MHZ:
-+ // 6 MHz isn't supported directly, but set this to
-+ // the 8 MHz setting in case we can fiddle it later
-+ filter = 1;
-+ break;
-+
-+ case BANDWIDTH_7_MHZ:
-+ filter = 0;
-+ break;
-+
-+ case BANDWIDTH_8_MHZ:
-+ filter = 1;
-+ break;
-+
-+ default:
-+ return -EINVAL;
-+ }
-+
-+ // calculate tuner parameters
-+ tuner_frequency =
-+ (((fe_params->frequency / 1000) * 6) + 217280) / 1000;
-+ tuner_buf[0] = tuner_frequency >> 8;
-+ tuner_buf[1] = tuner_frequency & 0xff;
-+ tuner_buf[2] = 0xca;
-+ tuner_buf[3] = (cp << 5) | (filter << 3) | band;
-+
-+ // tune it
-+ tda1004x_enable_tuner_i2c(i2c, tda_state);
-+ tuner_msg.addr = tda_state->tuner_address;
-+ tuner_msg.len = 4;
-+ if (i2c->xfer(i2c, &tuner_msg, 1) != 1) {
-+ return -EIO;
-+ }
-+ dvb_delay(1);
-+ tda1004x_disable_tuner_i2c(i2c, tda_state);
-+ break;
-+
-+ default:
-+ return -EINVAL;
-+ }
-+
-+ dprintk("%s: success\n", __FUNCTION__);
-+
-+ // done
-+ return 0;
-+}
-+
-+static int tda1004x_set_fe(struct dvb_i2c_bus *i2c,
-+ struct tda1004x_state *tda_state,
-+ struct dvb_frontend_parameters *fe_params)
-+{
-+ int tmp;
-+
-+ dprintk("%s\n", __FUNCTION__);
-+
-+
-+ // set frequency
-+ tmp = tda1004x_set_frequency(i2c, tda_state, fe_params);
-+ if (tmp < 0)
-+ return tmp;
-+
-+ // hardcoded to use auto as much as possible
-+ fe_params->u.ofdm.code_rate_HP = FEC_AUTO;
-+ fe_params->u.ofdm.guard_interval = GUARD_INTERVAL_AUTO;
-+ fe_params->u.ofdm.transmission_mode = TRANSMISSION_MODE_AUTO;
-+
-+ // Set standard params.. or put them to auto
-+ if ((fe_params->u.ofdm.code_rate_HP == FEC_AUTO) ||
-+ (fe_params->u.ofdm.code_rate_LP == FEC_AUTO) ||
-+ (fe_params->u.ofdm.constellation == QAM_AUTO) ||
-+ (fe_params->u.ofdm.hierarchy_information == HIERARCHY_AUTO)) {
-+ tda1004x_write_mask(i2c, tda_state, TDA1004X_AUTO, 1, 1); // enable auto
-+ tda1004x_write_mask(i2c, tda_state, TDA1004X_IN_CONF1, 0x03, 0); // turn off constellation bits
-+ tda1004x_write_mask(i2c, tda_state, TDA1004X_IN_CONF1, 0x60, 0); // turn off hierarchy bits
-+ tda1004x_write_mask(i2c, tda_state, TDA1004X_IN_CONF2, 0x3f, 0); // turn off FEC bits
-+ } else {
-+ tda1004x_write_mask(i2c, tda_state, TDA1004X_AUTO, 1, 0); // disable auto
-+
-+ // set HP FEC
-+ tmp = tda1004x_encode_fec(fe_params->u.ofdm.code_rate_HP);
-+ if (tmp < 0) return tmp;
-+ tda1004x_write_mask(i2c, tda_state, TDA1004X_IN_CONF2, 7, tmp);
-+
-+ // set LP FEC
-+ if (fe_params->u.ofdm.code_rate_LP != FEC_NONE) {
-+ tmp = tda1004x_encode_fec(fe_params->u.ofdm.code_rate_LP);
-+ if (tmp < 0) return tmp;
-+ tda1004x_write_mask(i2c, tda_state, TDA1004X_IN_CONF2, 0x38, tmp << 3);
-+ }
-+
-+ // set constellation
-+ switch (fe_params->u.ofdm.constellation) {
-+ case QPSK:
-+ tda1004x_write_mask(i2c, tda_state, TDA1004X_IN_CONF1, 3, 0);
-+ break;
-+
-+ case QAM_16:
-+ tda1004x_write_mask(i2c, tda_state, TDA1004X_IN_CONF1, 3, 1);
-+ break;
-+
-+ case QAM_64:
-+ tda1004x_write_mask(i2c, tda_state, TDA1004X_IN_CONF1, 3, 2);
-+ break;
-+
-+ default:
-+ return -EINVAL;
-+ }
-+
-+ // set hierarchy
-+ switch (fe_params->u.ofdm.hierarchy_information) {
-+ case HIERARCHY_NONE:
-+ tda1004x_write_mask(i2c, tda_state, TDA1004X_IN_CONF1, 0x60, 0 << 5);
-+ break;
-+
-+ case HIERARCHY_1:
-+ tda1004x_write_mask(i2c, tda_state, TDA1004X_IN_CONF1, 0x60, 1 << 5);
-+ break;
-+
-+ case HIERARCHY_2:
-+ tda1004x_write_mask(i2c, tda_state, TDA1004X_IN_CONF1, 0x60, 2 << 5);
-+ break;
-+
-+ case HIERARCHY_4:
-+ tda1004x_write_mask(i2c, tda_state, TDA1004X_IN_CONF1, 0x60, 3 << 5);
-+ break;
-+
-+ default:
-+ return -EINVAL;
-+ }
-+ }
-+
-+ // set bandwidth
-+ switch(tda_state->tda1004x_address) {
-+ case TDA10045H_ADDRESS:
-+ tda10045h_set_bandwidth(i2c, tda_state, fe_params->u.ofdm.bandwidth);
-+ break;
-+ }
-+
-+ // set inversion
-+ switch (fe_params->inversion) {
-+ case INVERSION_OFF:
-+ tda1004x_write_mask(i2c, tda_state, TDA1004X_CONFC1, 0x20, 0);
-+ break;
-+
-+ case INVERSION_ON:
-+ tda1004x_write_mask(i2c, tda_state, TDA1004X_CONFC1, 0x20, 0x20);
-+ break;
-+
-+ default:
-+ return -EINVAL;
-+ }
-+
-+ // set guard interval
-+ switch (fe_params->u.ofdm.guard_interval) {
-+ case GUARD_INTERVAL_1_32:
-+ tda1004x_write_mask(i2c, tda_state, TDA1004X_AUTO, 2, 0);
-+ tda1004x_write_mask(i2c, tda_state, TDA1004X_IN_CONF1, 0x0c, 0 << 2);
-+ break;
-+
-+ case GUARD_INTERVAL_1_16:
-+ tda1004x_write_mask(i2c, tda_state, TDA1004X_AUTO, 2, 0);
-+ tda1004x_write_mask(i2c, tda_state, TDA1004X_IN_CONF1, 0x0c, 1 << 2);
-+ break;
-+
-+ case GUARD_INTERVAL_1_8:
-+ tda1004x_write_mask(i2c, tda_state, TDA1004X_AUTO, 2, 0);
-+ tda1004x_write_mask(i2c, tda_state, TDA1004X_IN_CONF1, 0x0c, 2 << 2);
-+ break;
-+
-+ case GUARD_INTERVAL_1_4:
-+ tda1004x_write_mask(i2c, tda_state, TDA1004X_AUTO, 2, 0);
-+ tda1004x_write_mask(i2c, tda_state, TDA1004X_IN_CONF1, 0x0c, 3 << 2);
-+ break;
-+
-+ case GUARD_INTERVAL_AUTO:
-+ tda1004x_write_mask(i2c, tda_state, TDA1004X_AUTO, 2, 2);
-+ tda1004x_write_mask(i2c, tda_state, TDA1004X_IN_CONF1, 0x0c, 0 << 2);
-+ break;
-+
-+ default:
-+ return -EINVAL;
-+ }
-+
-+ // set transmission mode
-+ switch (fe_params->u.ofdm.transmission_mode) {
-+ case TRANSMISSION_MODE_2K:
-+ tda1004x_write_mask(i2c, tda_state, TDA1004X_AUTO, 4, 0);
-+ tda1004x_write_mask(i2c, tda_state, TDA1004X_IN_CONF1, 0x10, 0 << 4);
-+ break;
-+
-+ case TRANSMISSION_MODE_8K:
-+ tda1004x_write_mask(i2c, tda_state, TDA1004X_AUTO, 4, 0);
-+ tda1004x_write_mask(i2c, tda_state, TDA1004X_IN_CONF1, 0x10, 1 << 4);
-+ break;
-+
-+ case TRANSMISSION_MODE_AUTO:
-+ tda1004x_write_mask(i2c, tda_state, TDA1004X_AUTO, 4, 4);
-+ tda1004x_write_mask(i2c, tda_state, TDA1004X_IN_CONF1, 0x10, 0);
-+ break;
-+
-+ default:
-+ return -EINVAL;
-+ }
-+
-+ // reset DSP
-+ tda1004x_write_mask(i2c, tda_state, TDA1004X_CONFC4, 8, 8);
-+ tda1004x_write_mask(i2c, tda_state, TDA1004X_CONFC4, 8, 0);
-+ dvb_delay(10);
-+
-+ // done
-+ return 0;
-+}
-+
-+
-+static int tda1004x_get_fe(struct dvb_i2c_bus *i2c, struct tda1004x_state* tda_state, struct dvb_frontend_parameters *fe_params)
-+{
-+
-+ dprintk("%s\n", __FUNCTION__);
-+
-+ // inversion status
-+ fe_params->inversion = INVERSION_OFF;
-+ if (tda1004x_read_byte(i2c, tda_state, TDA1004X_CONFC1) & 0x20) {
-+ fe_params->inversion = INVERSION_ON;
-+ }
-+
-+ // bandwidth
-+ switch (tda1004x_read_byte(i2c, tda_state, TDA1004X_WREF_LSB)) {
-+ case 0x14:
-+ fe_params->u.ofdm.bandwidth = BANDWIDTH_8_MHZ;
-+ break;
-+ case 0xdb:
-+ fe_params->u.ofdm.bandwidth = BANDWIDTH_7_MHZ;
-+ break;
-+ case 0x4f:
-+ fe_params->u.ofdm.bandwidth = BANDWIDTH_6_MHZ;
-+ break;
-+ }
-+
-+ // FEC
-+ fe_params->u.ofdm.code_rate_HP =
-+ tda1004x_decode_fec(tda1004x_read_byte(i2c, tda_state, TDA1004X_OUT_CONF2) & 7);
-+ fe_params->u.ofdm.code_rate_LP =
-+ tda1004x_decode_fec((tda1004x_read_byte(i2c, tda_state, TDA1004X_OUT_CONF2) >> 3) & 7);
-+
-+ // constellation
-+ switch (tda1004x_read_byte(i2c, tda_state, TDA1004X_OUT_CONF1) & 3) {
-+ case 0:
-+ fe_params->u.ofdm.constellation = QPSK;
-+ break;
-+ case 1:
-+ fe_params->u.ofdm.constellation = QAM_16;
-+ break;
-+ case 2:
-+ fe_params->u.ofdm.constellation = QAM_64;
-+ break;
-+ }
-+
-+ // transmission mode
-+ fe_params->u.ofdm.transmission_mode = TRANSMISSION_MODE_2K;
-+ if (tda1004x_read_byte(i2c, tda_state, TDA1004X_OUT_CONF1) & 0x10) {
-+ fe_params->u.ofdm.transmission_mode = TRANSMISSION_MODE_8K;
-+ }
-+
-+ // guard interval
-+ switch ((tda1004x_read_byte(i2c, tda_state, TDA1004X_OUT_CONF1) & 0x0c) >> 2) {
-+ case 0:
-+ fe_params->u.ofdm.guard_interval = GUARD_INTERVAL_1_32;
-+ break;
-+ case 1:
-+ fe_params->u.ofdm.guard_interval = GUARD_INTERVAL_1_16;
-+ break;
-+ case 2:
-+ fe_params->u.ofdm.guard_interval = GUARD_INTERVAL_1_8;
-+ break;
-+ case 3:
-+ fe_params->u.ofdm.guard_interval = GUARD_INTERVAL_1_4;
-+ break;
-+ }
-+
-+ // hierarchy
-+ switch ((tda1004x_read_byte(i2c, tda_state, TDA1004X_OUT_CONF1) & 0x60) >> 5) {
-+ case 0:
-+ fe_params->u.ofdm.hierarchy_information = HIERARCHY_NONE;
-+ break;
-+ case 1:
-+ fe_params->u.ofdm.hierarchy_information = HIERARCHY_1;
-+ break;
-+ case 2:
-+ fe_params->u.ofdm.hierarchy_information = HIERARCHY_2;
-+ break;
-+ case 3:
-+ fe_params->u.ofdm.hierarchy_information = HIERARCHY_4;
-+ break;
-+ }
-+
-+ // done
-+ return 0;
-+}
-+
-+
-+static int tda1004x_read_status(struct dvb_i2c_bus *i2c, struct tda1004x_state* tda_state, fe_status_t * fe_status)
-+{
-+ int status;
-+ int cber;
-+ int vber;
-+
-+ dprintk("%s\n", __FUNCTION__);
-+
-+ // read status
-+ status = tda1004x_read_byte(i2c, tda_state, TDA1004X_STATUS_CD);
-+ if (status == -1) {
-+ return -EIO;
-+ }
-+
-+ // decode
-+ *fe_status = 0;
-+ if (status & 4) *fe_status |= FE_HAS_SIGNAL;
-+ if (status & 2) *fe_status |= FE_HAS_CARRIER;
-+ if (status & 8) *fe_status |= FE_HAS_VITERBI | FE_HAS_SYNC | FE_HAS_LOCK;
-+
-+ // if we don't already have VITERBI (i.e. not LOCKED), see if the viterbi
-+ // is getting anything valid
-+ if (!(*fe_status & FE_HAS_VITERBI)) {
-+ // read the CBER
-+ cber = tda1004x_read_byte(i2c, tda_state, TDA1004X_CBER_LSB);
-+ if (cber == -1) return -EIO;
-+ status = tda1004x_read_byte(i2c, tda_state, TDA1004X_CBER_MSB);
-+ if (status == -1) return -EIO;
-+ cber |= (status << 8);
-+ tda1004x_read_byte(i2c, tda_state, TDA1004X_CBER_RESET);
-+
-+ if (cber != 65535) {
-+ *fe_status |= FE_HAS_VITERBI;
-+ }
-+ }
-+
-+ // if we DO have some valid VITERBI output, but don't already have SYNC
-+ // bytes (i.e. not LOCKED), see if the RS decoder is getting anything valid.
-+ if ((*fe_status & FE_HAS_VITERBI) && (!(*fe_status & FE_HAS_SYNC))) {
-+ // read the VBER
-+ vber = tda1004x_read_byte(i2c, tda_state, TDA1004X_VBER_LSB);
-+ if (vber == -1) return -EIO;
-+ status = tda1004x_read_byte(i2c, tda_state, TDA1004X_VBER_MID);
-+ if (status == -1) return -EIO;
-+ vber |= (status << 8);
-+ status = tda1004x_read_byte(i2c, tda_state, TDA1004X_VBER_MSB);
-+ if (status == -1) return -EIO;
-+ vber |= ((status << 16) & 0x0f);
-+ tda1004x_read_byte(i2c, tda_state, TDA1004X_CVBER_LUT);
-+
-+ // if RS has passed some valid TS packets, then we must be
-+ // getting some SYNC bytes
-+ if (vber < 16632) {
-+ *fe_status |= FE_HAS_SYNC;
-+ }
-+ }
-+
-+ // success
-+ dprintk("%s: fe_status=0x%x\n", __FUNCTION__, *fe_status);
-+ return 0;
-+}
-+
-+static int tda1004x_read_signal_strength(struct dvb_i2c_bus *i2c, struct tda1004x_state* tda_state, u16 * signal)
-+{
-+ int tmp;
-+
-+ dprintk("%s\n", __FUNCTION__);
-+
-+ // read it
-+ tmp = tda1004x_read_byte(i2c, tda_state, TDA1004X_SIGNAL_STRENGTH);
-+ if (tmp < 0)
-+ return -EIO;
-+
-+ // done
-+ *signal = (tmp << 8) | tmp;
-+ dprintk("%s: signal=0x%x\n", __FUNCTION__, *signal);
-+ return 0;
-+}
-+
-+
-+static int tda1004x_read_snr(struct dvb_i2c_bus *i2c, struct tda1004x_state* tda_state, u16 * snr)
-+{
-+ int tmp;
-+
-+ dprintk("%s\n", __FUNCTION__);
-+
-+ // read it
-+ tmp = tda1004x_read_byte(i2c, tda_state, TDA1004X_SNR);
-+ if (tmp < 0)
-+ return -EIO;
-+ if (tmp) {
-+ tmp = 255 - tmp;
-+ }
-+
-+ // done
-+ *snr = ((tmp << 8) | tmp);
-+ dprintk("%s: snr=0x%x\n", __FUNCTION__, *snr);
-+ return 0;
-+}
-+
-+static int tda1004x_read_ucblocks(struct dvb_i2c_bus *i2c, struct tda1004x_state* tda_state, u32* ucblocks)
-+{
-+ int tmp;
-+ int tmp2;
-+ int counter;
-+
-+ dprintk("%s\n", __FUNCTION__);
-+
-+ // read the UCBLOCKS and reset
-+ counter = 0;
-+ tmp = tda1004x_read_byte(i2c, tda_state, TDA1004X_UNCOR);
-+ if (tmp < 0)
-+ return -EIO;
-+ tmp &= 0x7f;
-+ while (counter++ < 5) {
-+ tda1004x_write_mask(i2c, tda_state, TDA1004X_UNCOR, 0x80, 0);
-+ tda1004x_write_mask(i2c, tda_state, TDA1004X_UNCOR, 0x80, 0);
-+ tda1004x_write_mask(i2c, tda_state, TDA1004X_UNCOR, 0x80, 0);
-+
-+ tmp2 = tda1004x_read_byte(i2c, tda_state, TDA1004X_UNCOR);
-+ if (tmp2 < 0)
-+ return -EIO;
-+ tmp2 &= 0x7f;
-+ if ((tmp2 < tmp) || (tmp2 == 0))
-+ break;
-+ }
-+
-+ // done
-+ if (tmp != 0x7f) {
-+ *ucblocks = tmp;
-+ } else {
-+ *ucblocks = 0xffffffff;
-+ }
-+ dprintk("%s: ucblocks=0x%x\n", __FUNCTION__, *ucblocks);
-+ return 0;
-+}
-+
-+static int tda1004x_read_ber(struct dvb_i2c_bus *i2c, struct tda1004x_state* tda_state, u32* ber)
-+{
-+ int tmp;
-+
-+ dprintk("%s\n", __FUNCTION__);
-+
-+ // read it in
-+ tmp = tda1004x_read_byte(i2c, tda_state, TDA1004X_CBER_LSB);
-+ if (tmp < 0) return -EIO;
-+ *ber = tmp << 1;
-+ tmp = tda1004x_read_byte(i2c, tda_state, TDA1004X_CBER_MSB);
-+ if (tmp < 0) return -EIO;
-+ *ber |= (tmp << 9);
-+ tda1004x_read_byte(i2c, tda_state, TDA1004X_CBER_RESET);
-+
-+ // done
-+ dprintk("%s: ber=0x%x\n", __FUNCTION__, *ber);
-+ return 0;
-+}
-+
-+
-+static int tda1004x_ioctl(struct dvb_frontend *fe, unsigned int cmd, void *arg)
-+{
-+ int status = 0;
-+ struct dvb_i2c_bus *i2c = fe->i2c;
-+ struct tda1004x_state *tda_state = (struct tda1004x_state *) &(fe->data);
-+
-+ dprintk("%s: cmd=0x%x\n", __FUNCTION__, cmd);
-+
-+ switch (cmd) {
-+ case FE_GET_INFO:
-+ switch(tda_state->tda1004x_address) {
-+ case TDA10045H_ADDRESS:
-+ memcpy(arg, &tda10045h_info, sizeof(struct dvb_frontend_info));
-+ break;
-+ }
-+ break;
-+
-+ case FE_READ_STATUS:
-+ return tda1004x_read_status(i2c, tda_state, (fe_status_t *) arg);
-+
-+ case FE_READ_BER:
-+ return tda1004x_read_ber(i2c, tda_state, (u32 *) arg);
-+
-+ case FE_READ_SIGNAL_STRENGTH:
-+ return tda1004x_read_signal_strength(i2c, tda_state, (u16 *) arg);
-+
-+ case FE_READ_SNR:
-+ return tda1004x_read_snr(i2c, tda_state, (u16 *) arg);
-+
-+ case FE_READ_UNCORRECTED_BLOCKS:
-+ return tda1004x_read_ucblocks(i2c, tda_state, (u32 *) arg);
-+
-+ case FE_SET_FRONTEND:
-+ return tda1004x_set_fe(i2c, tda_state, (struct dvb_frontend_parameters*) arg);
-+
-+ case FE_GET_FRONTEND:
-+ return tda1004x_get_fe(i2c, tda_state, (struct dvb_frontend_parameters*) arg);
-+
-+ case FE_INIT:
-+ // don't bother reinitialising
-+ if (tda_state->initialised)
-+ return 0;
-+
-+ // OK, perform initialisation
-+ status = tda1004x_init(i2c, tda_state);
-+ if (status == 0)
-+ tda_state->initialised = 1;
-+ return status;
-+
-+ default:
-+ return -EOPNOTSUPP;
-+ }
-+
-+ return 0;
-+}
-+
-+
-+static int tda1004x_attach(struct dvb_i2c_bus *i2c)
-+{
-+ int tda1004x_address = -1;
-+ int tuner_address = -1;
-+ struct tda1004x_state tda_state;
-+ struct i2c_msg tuner_msg = {.addr=0, .flags=0, .buf=0, .len=0 };
-+ static u8 td1344_init[] = { 0x0b, 0xf5, 0x88, 0xab };
-+ static u8 tdm1316l_init[] = { 0x0b, 0xf5, 0x85, 0xab };
-+
-+ dprintk("%s\n", __FUNCTION__);
-+
-+ // probe for frontend
-+ tda_state.tda1004x_address = TDA10045H_ADDRESS;
-+ if (tda1004x_read_byte(i2c, &tda_state, TDA1004X_CHIPID) == 0x25) {
-+ tda1004x_address = TDA10045H_ADDRESS;
-+ printk("tda1004x: Detected Philips TDA10045H.\n");
-+ }
-+
-+ // did we find a frontend?
-+ if (tda1004x_address == -1) {
-+ return -ENODEV;
-+ }
-+
-+ // supported tuner?
-+ tda1004x_enable_tuner_i2c(i2c, &tda_state);
-+ tuner_msg.addr = TD1344_ADDRESS;
-+ tuner_msg.buf = td1344_init;
-+ tuner_msg.len = sizeof(td1344_init);
-+ if (i2c->xfer(i2c, &tuner_msg, 1) == 1) {
-+ dvb_delay(1);
-+ tuner_address = TD1344_ADDRESS;
-+ printk("tda1004x: Detected Philips TD1344 tuner. PLEASE CHECK THIS AND REPORT BACK!.\n");
-+ } else {
-+ tuner_msg.addr = TDM1316L_ADDRESS;
-+ tuner_msg.buf = tdm1316l_init;
-+ tuner_msg.len = sizeof(tdm1316l_init);
-+ if (i2c->xfer(i2c, &tuner_msg, 1) == 1) {
-+ dvb_delay(1);
-+ tuner_address = TDM1316L_ADDRESS;
-+ printk("tda1004x: Detected Philips TDM1316L tuner.\n");
-+ }
-+ }
-+ tda1004x_disable_tuner_i2c(i2c, &tda_state);
-+
-+ // did we find a tuner?
-+ if (tuner_address == -1) {
-+ printk("tda1004x: Detected, but with unknown tuner.\n");
-+ return -ENODEV;
-+ }
-+
-+ // create state
-+ tda_state.tda1004x_address = tda1004x_address;
-+ tda_state.tuner_address = tuner_address;
-+ tda_state.initialised = 0;
-+
-+ // register
-+ switch(tda_state.tda1004x_address) {
-+ case TDA10045H_ADDRESS:
-+ dvb_register_frontend(tda1004x_ioctl, i2c, (void *)(*((u32*) &tda_state)), &tda10045h_info);
-+ break;
-+ }
-+
-+ // success
-+ return 0;
-+}
-+
-+
-+static
-+void tda1004x_detach(struct dvb_i2c_bus *i2c)
-+{
-+ dprintk("%s\n", __FUNCTION__);
-+
-+ dvb_unregister_frontend(tda1004x_ioctl, i2c);
-+}
-+
-+
-+static
-+int __init init_tda1004x(void)
-+{
-+ return dvb_register_i2c_device(THIS_MODULE, tda1004x_attach, tda1004x_detach);
-+}
-+
-+
-+static
-+void __exit exit_tda1004x(void)
-+{
-+ dvb_unregister_i2c_device(tda1004x_attach);
-+}
-+
-+module_init(init_tda1004x);
-+module_exit(exit_tda1004x);
-+
-+MODULE_DESCRIPTION("Philips TDA10045H DVB-T Frontend");
-+MODULE_AUTHOR("Andrew de Quincey & Robert Schlabbach");
-+MODULE_LICENSE("GPL");
-+
-+MODULE_PARM(tda1004x_debug, "i");
-+MODULE_PARM_DESC(tda1004x_debug, "enable verbose debug messages");
-+
-+MODULE_PARM(tda1004x_firmware, "s");
-+MODULE_PARM_DESC(tda1004x_firmware, "Where to find the firmware file");
---- linux-2.6.0-test1/drivers/media/dvb/frontends/ves1820.c 2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/dvb/frontends/ves1820.c 2003-07-19 17:03:49.000000000 -0700
-@@ -95,7 +95,7 @@ static struct dvb_frontend_info ves1820_
-
- static u8 ves1820_inittab [] =
- {
-- 0x69, 0x6A, 0x9B, 0x0A, 0x52, 0x46, 0x26, 0x1A,
-+ 0x69, 0x6A, 0x9B, 0x12, 0x12, 0x46, 0x26, 0x1A,
- 0x43, 0x6A, 0xAA, 0xAA, 0x1E, 0x85, 0x43, 0x28,
- 0xE0, 0x00, 0xA1, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
-@@ -109,7 +109,7 @@ static int ves1820_writereg (struct dvb_
- {
- u8 addr = GET_DEMOD_ADDR(fe->data);
- u8 buf[] = { 0x00, reg, data };
-- struct i2c_msg msg = { addr: addr, .flags = 0, .buf = buf, .len = 3 };
-+ struct i2c_msg msg = { .addr = addr, .flags = 0, .buf = buf, .len = 3 };
- struct dvb_i2c_bus *i2c = fe->i2c;
- int ret;
-
-@@ -130,8 +130,8 @@ static u8 ves1820_readreg (struct dvb_fr
- u8 b0 [] = { 0x00, reg };
- u8 b1 [] = { 0 };
- u8 addr = GET_DEMOD_ADDR(fe->data);
-- struct i2c_msg msg [] = { { addr: addr, .flags = 0, .buf = b0, .len = 2 },
-- { addr: addr, .flags = I2C_M_RD, .buf = b1, .len = 1 } };
-+ struct i2c_msg msg [] = { { .addr = addr, .flags = 0, .buf = b0, .len = 2 },
-+ { .addr = addr, .flags = I2C_M_RD, .buf = b1, .len = 1 } };
- struct dvb_i2c_bus *i2c = fe->i2c;
- int ret;
-
-@@ -147,7 +147,7 @@ static u8 ves1820_readreg (struct dvb_fr
- static int tuner_write (struct dvb_i2c_bus *i2c, u8 addr, u8 data [4])
- {
- int ret;
-- struct i2c_msg msg = { addr: addr, .flags = 0, .buf = data, .len = 4 };
-+ struct i2c_msg msg = { .addr = addr, .flags = 0, .buf = data, .len = 4 };
-
- ret = i2c->xfer (i2c, &msg, 1);
-
---- linux-2.6.0-test1/drivers/media/dvb/Kconfig 2003-06-14 12:18:06.000000000 -0700
-+++ 25/drivers/media/dvb/Kconfig 2003-07-19 17:03:49.000000000 -0700
-@@ -33,9 +33,19 @@ source "drivers/media/dvb/dvb-core/Kconf
- source "drivers/media/dvb/frontends/Kconfig"
-
- comment "Supported SAA7146 based PCI Adapters"
-- depends on DVB
-+ depends on DVB && PCI
-
- source "drivers/media/dvb/ttpci/Kconfig"
-
-+comment "Supported USB Adapters"
-+ depends on DVB && USB
-+
-+source "drivers/media/dvb/ttusb-budget/Kconfig"
-+source "drivers/media/dvb/ttusb-dec/Kconfig"
-+
-+comment "Supported FlexCopII (B2C2) Adapters"
-+ depends on DVB && PCI
-+source "drivers/media/dvb/b2c2/Kconfig"
-+
- endmenu
-
---- linux-2.6.0-test1/drivers/media/dvb/Makefile 2003-06-14 12:18:23.000000000 -0700
-+++ 25/drivers/media/dvb/Makefile 2003-07-19 17:03:49.000000000 -0700
-@@ -2,4 +2,5 @@
- # Makefile for the kernel multimedia device drivers.
- #
-
--obj-y := dvb-core/ frontends/ ttpci/ # ttusb-budget/
-+obj-y := dvb-core/ frontends/ ttpci/ ttusb-dec/ ttusb-budget/ b2c2/
-+
---- linux-2.6.0-test1/drivers/media/dvb/ttpci/av7110.c 2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/dvb/ttpci/av7110.c 2003-07-19 17:03:49.000000000 -0700
-@@ -86,6 +86,7 @@
- #define DEB_EE(x)
- #endif
-
-+#include "ttpci-eeprom.h"
- #include "av7110.h"
- #include "av7110_ipack.h"
-
-@@ -110,7 +111,8 @@ static int hw_sections = 1;
-
- int av7110_num = 0;
-
--#define FW_CI_LL_SUPPORT(arm_app) (((arm_app) >> 16) & 0x8000)
-+#define FW_CI_LL_SUPPORT(arm_app) ((arm_app) & 0x80000000)
-+#define FW_VERSION(arm_app) ((arm_app) & 0x0000FFFF)
-
- /****************************************************************************
- * DEBI functions
-@@ -1089,7 +1091,7 @@ static int OutCommand(struct av7110 *av7
- u32 stat;
- #endif
-
-- DEB_EE(("av7110: %p\n",av7110));
-+// DEB_EE(("av7110: %p\n",av7110));
-
- if (!av7110->arm_ready) {
- DEB_D(("arm not ready.\n"));
-@@ -1166,7 +1168,7 @@ static inline int SOutCommand(struct av7
- {
- int ret;
-
-- DEB_EE(("av7110: %p\n",av7110));
-+// DEB_EE(("av7110: %p\n",av7110));
-
- if (!av7110->arm_ready) {
- DEB_D(("arm not ready.\n"));
-@@ -1190,7 +1192,7 @@ static int outcom(struct av7110 *av7110,
- u16 buf[num+2];
- int i, ret;
-
-- DEB_EE(("av7110: %p\n",av7110));
-+// DEB_EE(("av7110: %p\n",av7110));
-
- buf[0]=(( type << 8 ) | com);
- buf[1]=num;
-@@ -1332,7 +1334,7 @@ static inline int msp_writereg(struct av
-
- static inline int SendDAC(struct av7110 *av7110, u8 addr, u8 data)
- {
-- DEB_EE(("av7110: %p\n",av7110));
-+// DEB_EE(("av7110: %p\n",av7110));
-
- return outcom(av7110, COMTYPE_AUDIODAC, AudioDAC, 2, addr, data);
- }
-@@ -1659,6 +1661,24 @@ static void OSDSetColor(struct av7110 *a
- color, ((blend>>4)&0x0f));
- }
-
-+static int OSDSetPalette(struct av7110 *av7110, u32 *colors, u8 first, u8 last)
-+{
-+ int i;
-+ int length = last - first + 1;
-+
-+ if (length * 4 > DATA_BUFF3_SIZE)
-+ return -1;
-+
-+ for (i=0; i<length; i++) {
-+ u32 blend = (colors[i] & 0xF0000000) >> 4;
-+ u32 yuv = blend ? RGB2YUV(colors[i] & 0xFF, (colors[i] >> 8) & 0xFF, (colors[i] >> 16) & 0xFF) | blend : 0;
-+ yuv = ((yuv & 0xFFFF0000) >> 16) | ((yuv & 0x0000FFFF) << 16); // TODO kls2003-06-15: not sure if this is endian-proof
-+ wdebi(av7110, DEBINOSWAP, DATA_BUFF3_BASE + i*4, yuv, 4);
-+ }
-+ return outcom(av7110, COMTYPE_OSD, Set_Palette, 4,
-+ av7110->osdwin, bpp2pal[av7110->osdbpp[av7110->osdwin]], first, last);
-+}
-+
- static int OSDSetBlock(struct av7110 *av7110, int x0, int y0, int x1, int y1, int inc, u8 *data)
- {
- uint w, h, bpp, bpl, size, lpb, bnum, brest;
-@@ -1721,6 +1741,9 @@ static int OSD_DrawCommand(struct av7110
- return 0;
- case OSD_SetPalette:
- {
-+ if (FW_VERSION(av7110->arm_app) >= 0x2618)
-+ OSDSetPalette(av7110, (u32 *)dc->data, dc->color, dc->x0);
-+ else {
- int i, len=dc->x0-dc->color+1;
- u8 *colors=(u8 *)dc->data;
-
-@@ -1728,6 +1751,7 @@ static int OSD_DrawCommand(struct av7110
- OSDSetColor(av7110, dc->color+i,
- colors[i*4] , colors[i*4+1],
- colors[i*4+2], colors[i*4+3]);
-+ }
- return 0;
- }
- case OSD_SetTrans:
-@@ -2087,28 +2111,28 @@ static void SetMode(struct av7110 *av711
-
- static inline void TestMode(struct av7110 *av7110, int mode)
- {
-- DEB_EE(("av7110: %p\n",av7110));
-+// DEB_EE(("av7110: %p\n",av7110));
- outcom(av7110, COMTYPE_ENCODER, SetTestMode, 1, mode);
- }
-
- static inline void VidMode(struct av7110 *av7110, int mode)
- {
-- DEB_EE(("av7110: %p\n",av7110));
-+// DEB_EE(("av7110: %p\n",av7110));
- outcom(av7110, COMTYPE_ENCODER, SetVidMode, 1, mode);
- }
-
-
--static inline int vidcom(struct av7110 *av7110, u32 com, u32 arg)
-+static int inline vidcom(struct av7110 *av7110, u32 com, u32 arg)
- {
-- DEB_EE(("av7110: %p\n",av7110));
-+// DEB_EE(("av7110: %p\n",av7110));
- return outcom(av7110, 0x80, 0x02, 4,
- (com>>16), (com&0xffff),
- (arg>>16), (arg&0xffff));
- }
-
--static inline int audcom(struct av7110 *av7110, u32 com)
-+static int inline audcom(struct av7110 *av7110, u32 com)
- {
-- DEB_EE(("av7110: %p\n",av7110));
-+// DEB_EE(("av7110: %p\n",av7110));
- return outcom(av7110, 0x80, 0x03, 4,
- (com>>16), (com&0xffff));
- }
-@@ -2583,38 +2607,274 @@ void p_to_t(u8 const *buf, long int leng
- * V4L SECTION
- ****************************************************************************/
-
--int av7110_ioctl(struct saa7146_dev *dev, unsigned int cmd, void *arg)
-+static struct v4l2_input inputs[2] = {
-+ { 0, "DVB", V4L2_INPUT_TYPE_CAMERA, 1, 0, V4L2_STD_PAL_BG|V4L2_STD_NTSC_M, 0 },
-+ { 1, "ANALOG", V4L2_INPUT_TYPE_TUNER, 2, 1, V4L2_STD_PAL_BG|V4L2_STD_NTSC_M, 0 },
-+};
-+
-+/* taken from ves1820.c */
-+static int ves1820_writereg(struct saa7146_dev *dev, u8 reg, u8 data)
-+{
-+ u8 addr = 0x09;
-+ u8 buf[] = { 0x00, reg, data };
-+ struct i2c_msg msg = { .addr = addr, .flags = 0, .buf = buf, .len = 3 };
-+
-+ DEB_EE(("av7710: dev: %p\n",dev));
-+
-+ if( 1 != saa7146_i2c_transfer(dev, &msg, 1, 1)) {
-+ return -1;
-+ }
-+ return 0;
-+}
-+
-+static int tuner_write(struct saa7146_dev *dev, u8 addr, u8 data [4])
-+{
-+ struct i2c_msg msg = { .addr = addr, .flags = 0, .buf = data, .len = 4 };
-+
-+ DEB_EE(("av7710: dev: %p\n",dev));
-+
-+ if( 1 != saa7146_i2c_transfer(dev, &msg, 1, 1)) {
-+ return -1;
-+ }
-+ return 0;
-+}
-+
-+
-+/**
-+ * set up the downconverter frequency divisor for a
-+ * reference clock comparision frequency of 62.5 kHz.
-+ */
-+static int tuner_set_tv_freq (struct saa7146_dev *dev, u32 freq)
-+{
-+ u32 div;
-+ u8 config;
-+ u8 buf [4];
-+
-+ DEB_EE(("av7710: freq: 0x%08x\n",freq));
-+
-+ /* magic number: 56. tuning with the frequency given by v4l2
-+ is always off by 56*62.5 kHz...*/
-+ div = freq + 56;
-+
-+ buf[0] = (div >> 8) & 0x7f;
-+ buf[1] = div & 0xff;
-+ buf[2] = 0x8e;
-+
-+ if (freq < 16*168.25 )
-+ config = 0xa0;
-+ else if (freq < 16*447.25)
-+ config = 0x90;
-+ else
-+ config = 0x30;
-+ config &= ~0x02;
-+
-+ buf[3] = config;
-+
-+ return tuner_write (dev, 0x61, buf);
-+}
-+
-+static struct saa7146_standard analog_standard[];
-+static struct saa7146_standard dvb_standard[];
-+static struct saa7146_standard standard[];
-+
-+int av7110_dvb_c_switch(struct saa7146_fh *fh)
-+{
-+ struct saa7146_dev *dev = fh->dev;
-+ struct saa7146_vv *vv = dev->vv_data;
-+ struct av7110 *av7110 = (struct av7110*)dev->ext_priv;
-+ u16 buf[3] = { ((COMTYPE_AUDIODAC << 8) + ADSwitch), 1, 1 };
-+
-+ u8 band = 0;
-+ int source, sync;
-+ struct saa7146_fh *ov_fh = NULL;
-+ int restart_overlay = 0;
-+
-+ DEB_EE(("av7110: %p\n",av7110));
-+
-+ if( vv->ov_data != NULL ) {
-+ ov_fh = vv->ov_data->fh;
-+ saa7146_stop_preview(ov_fh);
-+ restart_overlay = 1;
-+ }
-+
-+ if( 0 != av7110->current_input ) {
-+ buf[2] = 0;
-+ band = 0x68; /* analog band */
-+ source = SAA7146_HPS_SOURCE_PORT_B;
-+ sync = SAA7146_HPS_SYNC_PORT_B;
-+ memcpy(standard,analog_standard,sizeof(struct saa7146_standard)*2);
-+ } else {
-+ buf[2] = 1;
-+ band = 0x28; /* digital band */
-+ source = SAA7146_HPS_SOURCE_PORT_A;
-+ sync = SAA7146_HPS_SYNC_PORT_A;
-+ memcpy(standard,dvb_standard,sizeof(struct saa7146_standard)*2);
-+ }
-+
-+ /* hmm, this does not do anything!? */
-+ if (OutCommand(av7110, buf, 3)) {
-+ printk("ADSwitch error\n");
-+ }
-+
-+ if( 0 != ves1820_writereg(dev, 0x0f, band )) {
-+ printk("setting band in demodulator failed.\n");
-+ }
-+ saa7146_set_hps_source_and_sync(dev, source, sync);
-+
-+ /* restart overlay if it was active before */
-+ if( 0 != restart_overlay ) {
-+ saa7146_start_preview(ov_fh);
-+ }
-+
-+ return 0;
-+}
-+
-+int av7110_ioctl(struct saa7146_fh *fh, unsigned int cmd, void *arg)
- {
-+ struct saa7146_dev *dev = fh->dev;
-+ struct av7110 *av7110 = (struct av7110*)dev->ext_priv;
- DEB_EE(("saa7146_dev: %p\n",dev));
-
- switch(cmd) {
-+ case VIDIOC_G_TUNER:
-+ {
-+ struct v4l2_tuner *t = arg;
-+
-+ DEB_EE(("VIDIOC_G_TUNER: %d\n", t->index));
-+
-+ if( 0 == av7110->has_analog_tuner || av7110->current_input != 1 ) {
-+ return -EINVAL;
-+ }
-+
-+ memset(t,0,sizeof(*t));
-+ strcpy(t->name, "Television");
-+
-+ t->type = V4L2_TUNER_ANALOG_TV;
-+ t->capability = V4L2_TUNER_CAP_NORM | V4L2_TUNER_CAP_STEREO | V4L2_TUNER_CAP_LANG1 | V4L2_TUNER_CAP_LANG2 | V4L2_TUNER_CAP_SAP;
-+ t->rangelow = 772; /* 48.25 MHZ / 62.5 kHz = 772, see fi1216mk2-specs, page 2 */
-+ t->rangehigh = 13684; /* 855.25 MHz / 62.5 kHz = 13684 */
-+ /* FIXME: add the real signal strength here */
-+ t->signal = 0xffff;
-+ t->afc = 0;
-+ /* fixme: real autodetection here */
-+ t->rxsubchans = V4L2_TUNER_SUB_STEREO | V4L2_TUNER_SUB_MONO;
-+
-+ return 0;
-+ }
-+ case VIDIOC_S_TUNER:
-+ {
-+ struct v4l2_tuner *t = arg;
-+
-+ DEB_EE(("VIDIOC_S_TUNER: %d\n", t->index));
-+
-+ if( 0 == av7110->has_analog_tuner || av7110->current_input != 1 ) {
-+ return -EINVAL;
-+ }
-+
-+
-+ switch(t->audmode) {
-+ case V4L2_TUNER_MODE_STEREO: {
-+ DEB_D(("VIDIOC_S_TUNER: V4L2_TUNER_MODE_STEREO\n"));
-+ break;
-+ }
-+ case V4L2_TUNER_MODE_LANG1: {
-+ DEB_D(("VIDIOC_S_TUNER: V4L2_TUNER_MODE_LANG1\n"));
-+ break;
-+ }
-+ case V4L2_TUNER_MODE_LANG2: {
-+ DEB_D(("VIDIOC_S_TUNER: V4L2_TUNER_MODE_LANG2\n"));
-+ break;
-+ }
-+ default: { /* case V4L2_TUNER_MODE_MONO: {*/
-+ DEB_D(("VIDIOC_S_TUNER: TDA9840_SET_MONO\n"));
-+ break;
-+ }
-+ }
-+
-+ return 0;
-+ }
-+ case VIDIOC_G_FREQUENCY:
-+ {
-+ struct v4l2_frequency *f = arg;
-+
-+ DEB_EE(("VIDIOC_G_FREQ: freq:0x%08x.\n", f->frequency));
-+
-+ if( 0 == av7110->has_analog_tuner || av7110->current_input != 1 ) {
-+ return -EINVAL;
-+ }
-+
-+ memset(f,0,sizeof(*f));
-+ f->type = V4L2_TUNER_ANALOG_TV;
-+ f->frequency = av7110->current_freq;
-+
-+ return 0;
-+ }
-+ case VIDIOC_S_FREQUENCY:
-+ {
-+ struct v4l2_frequency *f = arg;
-+
-+ DEB_EE(("VIDIOC_S_FREQUENCY: freq:0x%08x.\n",f->frequency));
-+
-+ if( 0 == av7110->has_analog_tuner || av7110->current_input != 1 ) {
-+ return -EINVAL;
-+ }
-+
-+ if (V4L2_TUNER_ANALOG_TV != f->type)
-+ return -EINVAL;
-+
-+ /* tune in desired frequency */
-+ tuner_set_tv_freq(dev, f->frequency);
-+ av7110->current_freq = f->frequency;
-+
-+ return 0;
-+ }
- case VIDIOC_ENUMINPUT:
- {
- struct v4l2_input *i = arg;
-
-+ DEB_EE(("VIDIOC_ENUMINPUT: %d\n", i->index));
-+
-+ if( 0 != av7110->has_analog_tuner ) {
-+ if( i->index < 0 || i->index >= 2) {
-+ return -EINVAL;
-+ }
-+ } else {
- if( i->index != 0 ) {
- return -EINVAL;
- }
-+ }
-
-- memset(i,0,sizeof(*i));
-- i->index = 0;
-- strcpy(i->name, "DVB");
-- i->type = V4L2_INPUT_TYPE_CAMERA;
-- i->audioset = 1;
-+ memcpy(i, &inputs[i->index], sizeof(struct v4l2_input));
-
- return 0;
- }
- case VIDIOC_G_INPUT:
- {
- int *input = (int *)arg;
-- *input = 0;
-+ *input = av7110->current_input;
-+ DEB_EE(("VIDIOC_G_INPUT: %d\n", *input));
- return 0;
- }
- case VIDIOC_S_INPUT:
- {
-+ int input = *(int *)arg;
-+
-+ DEB_EE(("VIDIOC_S_INPUT: %d\n", input));
-+
-+ if( 0 == av7110->has_analog_tuner ) {
- return 0;
- }
-+
-+ if( input < 0 || input >= 2) {
-+ return -EINVAL;
-+ }
-+
-+ /* fixme: switch inputs here */
-+ av7110->current_input = input;
-+ return av7110_dvb_c_switch(fh);
-+ }
- default:
-+ printk("no such ioctl\n");
- return -ENOIOCTLCMD;
- }
- return 0;
-@@ -2997,7 +3257,7 @@ static int dvb_get_stc(struct dmx_demux
- DEB_EE(("av7110: fwstc = %04hx %04hx %04hx %04hx\n",
- fwstc[0], fwstc[1], fwstc[2], fwstc[3]));
-
-- *stc = (((uint64_t)fwstc[2] & 1) << 32) |
-+ *stc = (((uint64_t)(~fwstc[2]) & 1) << 32) |
- (((uint64_t)fwstc[1]) << 16) | ((uint64_t)fwstc[0]);
- *base = 1;
-
-@@ -4006,7 +4266,6 @@ static int av7110_register(struct av7110
- #endif
- // }
-
-- av7110->dvb_net.card_num=av7110->dvb_adapter->num;
- dvb_net_init(av7110->dvb_adapter, &av7110->dvb_net, &dvbdemux->dmx);
-
- return 0;
-@@ -4061,9 +4320,16 @@ struct saa7146_extension_ioctls ioctls[]
- { VIDIOC_ENUMINPUT, SAA7146_EXCLUSIVE },
- { VIDIOC_G_INPUT, SAA7146_EXCLUSIVE },
- { VIDIOC_S_INPUT, SAA7146_EXCLUSIVE },
-+ { VIDIOC_G_FREQUENCY, SAA7146_EXCLUSIVE },
-+ { VIDIOC_S_FREQUENCY, SAA7146_EXCLUSIVE },
-+ { VIDIOC_G_TUNER, SAA7146_EXCLUSIVE },
-+ { VIDIOC_S_TUNER, SAA7146_EXCLUSIVE },
- { 0, 0 }
- };
-
-+static struct saa7146_ext_vv av7110_vv_data_st;
-+static struct saa7146_ext_vv av7110_vv_data_c;
-+
- static int av7110_attach (struct saa7146_dev* dev, struct saa7146_pci_extension_data *pci_ext)
- {
- struct av7110 *av7110 = NULL;
-@@ -4081,7 +4347,16 @@ static int av7110_attach (struct saa7146
-
- DEB_EE(("dev: %p, av7110: %p\n",dev,av7110));
-
-- if (saa7146_vv_init(dev)) {
-+ /* special case DVB-C: these cards have an analog tuner
-+ plus need some special handling, so we have separate
-+ saa7146_ext_vv data for these... */
-+ if (dev->pci->subsystem_vendor == 0x110a) {
-+ ret = saa7146_vv_init(dev, &av7110_vv_data_c);
-+ } else {
-+ ret = saa7146_vv_init(dev, &av7110_vv_data_st);
-+ }
-+
-+ if ( 0 != ret) {
- ERR(("cannot init capture device. skipping.\n"));
- kfree(av7110);
- return -1;
-@@ -4114,6 +4389,8 @@ static int av7110_attach (struct saa7146
- return -ENOMEM;
- }
-
-+ ttpci_eeprom_parse_mac(av7110->i2c_bus);
-+
- saa7146_write(dev, PCI_BT_V1, 0x1c00101f);
- saa7146_write(dev, BCS_CTRL, 0x80400040);
-
-@@ -4186,9 +4463,9 @@ static int av7110_attach (struct saa7146
- bootarm(av7110);
- firmversion(av7110);
-
-- if ((av7110->arm_app&0xffff)<0x2501)
-+ if (FW_VERSION(av7110->arm_app)<0x2501)
- printk ("av7110: Warning, firmware version 0x%04x is too old. "
-- "System might be unstable!\n", av7110->arm_app&0xffff);
-+ "System might be unstable!\n", FW_VERSION(av7110->arm_app));
-
- kernel_thread(arm_thread, (void *) av7110, 0);
-
-@@ -4199,6 +4476,8 @@ static int av7110_attach (struct saa7146
- VidMode(av7110, vidmode);
-
- /* remaining inits according to card and frontend type */
-+ av7110->has_analog_tuner = 0;
-+ av7110->current_input = 0;
- if (i2c_writereg(av7110, 0x20, 0x00, 0x00)==1) {
- printk ("av7110(%d): Crystal audio DAC detected\n",
- av7110->dvb_adapter->num);
-@@ -4225,6 +4504,31 @@ static int av7110_attach (struct saa7146
- msp_writereg(av7110, 0x12, 0x000a, 0x0220); // SCART 1 source
- msp_writereg(av7110, 0x12, 0x0007, 0x7f00); // SCART 1 volume
- msp_writereg(av7110, 0x12, 0x000d, 0x4800); // prescale SCART
-+
-+ if (i2c_writereg(av7110, 0x48, 0x01, 0x00)!=1) {
-+ INFO(("saa7113 not accessible.\n"));
-+ } else {
-+ av7110->has_analog_tuner = 1;
-+ /* init the saa7113 */
-+ i2c_writereg(av7110, 0x48, 0x02, 0xd0); i2c_writereg(av7110, 0x48, 0x03, 0x23); i2c_writereg(av7110, 0x48, 0x04, 0x00);
-+ i2c_writereg(av7110, 0x48, 0x05, 0x00); i2c_writereg(av7110, 0x48, 0x06, 0xe9); i2c_writereg(av7110, 0x48, 0x07, 0x0d);
-+ i2c_writereg(av7110, 0x48, 0x08, 0x98); i2c_writereg(av7110, 0x48, 0x09, 0x02); i2c_writereg(av7110, 0x48, 0x0a, 0x80);
-+ i2c_writereg(av7110, 0x48, 0x0b, 0x40); i2c_writereg(av7110, 0x48, 0x0c, 0x40); i2c_writereg(av7110, 0x48, 0x0d, 0x00);
-+ i2c_writereg(av7110, 0x48, 0x0e, 0x01); i2c_writereg(av7110, 0x48, 0x0f, 0x7c); i2c_writereg(av7110, 0x48, 0x10, 0x48);
-+ i2c_writereg(av7110, 0x48, 0x11, 0x0c); i2c_writereg(av7110, 0x48, 0x12, 0x8b); i2c_writereg(av7110, 0x48, 0x13, 0x10);
-+ i2c_writereg(av7110, 0x48, 0x14, 0x00); i2c_writereg(av7110, 0x48, 0x15, 0x00); i2c_writereg(av7110, 0x48, 0x16, 0x00);
-+ i2c_writereg(av7110, 0x48, 0x17, 0x00); i2c_writereg(av7110, 0x48, 0x18, 0x00); i2c_writereg(av7110, 0x48, 0x19, 0x00);
-+ i2c_writereg(av7110, 0x48, 0x1a, 0x00); i2c_writereg(av7110, 0x48, 0x1b, 0x00); i2c_writereg(av7110, 0x48, 0x1c, 0x00);
-+ i2c_writereg(av7110, 0x48, 0x1d, 0x00); i2c_writereg(av7110, 0x48, 0x1e, 0x00);
-+ }
-+
-+ memcpy(standard,dvb_standard,sizeof(struct saa7146_standard)*2);
-+ /* set dd1 stream a & b */
-+ saa7146_write(dev, DD1_STREAM_B, 0x00000000);
-+ saa7146_write(dev, DD1_INIT, 0x0200700);
-+ saa7146_write(dev, MC2, (MASK_09 | MASK_25 | MASK_10 | MASK_26));
-+
-+
- } else if (dev->pci->subsystem_vendor == 0x110a) {
- printk("av7110(%d): DVB-C w/o analog module detected\n",
- av7110->dvb_adapter->num);
-@@ -4330,6 +4634,16 @@ static struct saa7146_standard standard[
- { "NTSC", V4L2_STD_NTSC, 0x10, 244, 480, 0x40, 708, 709, 480, 640 },
- };
-
-+static struct saa7146_standard analog_standard[] = {
-+ { "PAL", V4L2_STD_PAL, 0x18, 288, 576, 0x08, 708, 709, 576, 768 },
-+ { "NTSC", V4L2_STD_NTSC, 0x10, 244, 480, 0x40, 708, 709, 480, 640 },
-+};
-+
-+static struct saa7146_standard dvb_standard[] = {
-+ { "PAL", V4L2_STD_PAL, 0x14, 288, 576, 0x4a, 708, 709, 576, 768 },
-+ { "NTSC", V4L2_STD_NTSC, 0x10, 244, 480, 0x40, 708, 709, 480, 640 },
-+};
-+
- static struct saa7146_extension av7110_extension;
-
- #define MAKE_AV7110_INFO(x_var,x_name) \
-@@ -4387,7 +4701,7 @@ static int std_callback(struct saa7146_d
- }
-
-
--static struct saa7146_ext_vv av7110_vv_data = {
-+static struct saa7146_ext_vv av7110_vv_data_st = {
- .inputs = 1,
- .audios = 1,
- .capabilities = 0,
-@@ -4401,9 +4715,23 @@ static struct saa7146_ext_vv av7110_vv_d
- .ioctl = av7110_ioctl,
- };
-
-+static struct saa7146_ext_vv av7110_vv_data_c = {
-+ .inputs = 1,
-+ .audios = 1,
-+ .capabilities = V4L2_CAP_TUNER,
-+ .flags = 0,
-+
-+ .stds = &standard[0],
-+ .num_stds = sizeof(standard)/sizeof(struct saa7146_standard),
-+ .std_callback = &std_callback,
-+
-+ .ioctls = &ioctls[0],
-+ .ioctl = av7110_ioctl,
-+};
-+
-+
- static struct saa7146_extension av7110_extension = {
- .name = "dvb\0",
-- .ext_vv_data = &av7110_vv_data,
-
- .module = THIS_MODULE,
- .pci_tbl = &pci_tbl[0],
-@@ -4442,7 +4770,11 @@ MODULE_LICENSE("GPL");
-
- MODULE_PARM(av7110_debug,"i");
- MODULE_PARM(vidmode,"i");
-+MODULE_PARM_DESC(vidmode,"analog video out: 0 off, 1 CVBS+RGB (default), 2 CVBS+YC, 3 YC");
- MODULE_PARM(pids_off,"i");
-+MODULE_PARM_DESC(pids_off,"clear video/audio/PCR PID filters when demux is closed");
- MODULE_PARM(adac,"i");
-+MODULE_PARM_DESC(adac,"audio DAC type: 0 TI, 1 CRYSTAL, 2 MSP (use if autodetection fails)");
- MODULE_PARM(hw_sections, "i");
-+MODULE_PARM_DESC(hw_sections, "0 use software section filter, 1 use hardware");
-
---- linux-2.6.0-test1/drivers/media/dvb/ttpci/av7110.h 2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/dvb/ttpci/av7110.h 2003-07-19 17:03:49.000000000 -0700
-@@ -153,7 +153,8 @@ enum av7110_osd_command {
- BlitBmp,
- ReleaseBmp,
- SetWTrans,
-- SetWNoTrans
-+ SetWNoTrans,
-+ Set_Palette
- };
-
- enum av7110_pid_command {
-@@ -405,6 +406,11 @@ struct av7110 {
- struct dvb_i2c_bus *i2c_bus;
- char *card_name;
-
-+ /* support for analog module of dvb-c */
-+ int has_analog_tuner;
-+ int current_input;
-+ u32 current_freq;
-+
- struct tasklet_struct debi_tasklet;
- struct tasklet_struct gpio_tasklet;
-
-@@ -572,6 +578,9 @@ struct av7110 {
- #define DATA_BUFF2_BASE (DATA_BUFF1_BASE+DATA_BUFF1_SIZE)
- #define DATA_BUFF2_SIZE 0x0800
-
-+#define DATA_BUFF3_BASE (DATA_BUFF2_BASE+DATA_BUFF2_SIZE)
-+#define DATA_BUFF3_SIZE 0x0400
-+
- #define Reserved (DPRAM_BASE + 0x1E00)
- #define Reserved_SIZE 0x1C0
-
---- linux-2.6.0-test1/drivers/media/dvb/ttpci/budget-av.c 2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/dvb/ttpci/budget-av.c 2003-07-19 17:03:49.000000000 -0700
-@@ -170,6 +170,7 @@ static int budget_av_detach (struct saa7
- return err;
- }
-
-+static struct saa7146_ext_vv vv_data;
-
- static int budget_av_attach (struct saa7146_dev* dev,
- struct saa7146_pci_extension_data *info)
-@@ -207,16 +208,22 @@ static int budget_av_attach (struct saa7
- dvb_delay(500);
-
- if ((err = saa7113_init (budget_av))) {
-- budget_av_detach(dev);
-+ /* fixme: proper cleanup here */
-+ ERR(("cannot init saa7113.\n"));
-+ return err;
-+ }
-+
-+ if ( 0 != saa7146_vv_init(dev,&vv_data)) {
-+ /* fixme: proper cleanup here */
-+ ERR(("cannot init vv subsystem.\n"));
- return err;
- }
-
-- saa7146_vv_init(dev);
- if ((err = saa7146_register_device(&budget_av->vd, dev, "knc1",
- VFL_TYPE_GRABBER)))
- {
-+ /* fixme: proper cleanup here */
- ERR(("cannot register capture v4l2 device.\n"));
-- budget_av_detach(dev);
- return err;
- }
-
-@@ -256,8 +263,9 @@ static struct saa7146_extension_ioctls i
- };
-
-
--static int av_ioctl(struct saa7146_dev *dev, unsigned int cmd, void *arg)
-+static int av_ioctl(struct saa7146_fh *fh, unsigned int cmd, void *arg)
- {
-+ struct saa7146_dev *dev = fh->dev;
- struct budget_av *budget_av = (struct budget_av*) dev->ext_priv;
- /*
- struct saa7146_vv *vv = dev->vv_data;
-@@ -299,11 +307,19 @@ static int av_ioctl(struct saa7146_dev *
- }
-
- static struct saa7146_standard standard[] = {
-- { "PAL", V4L2_STD_PAL, SAA7146_PAL_VALUES },
-- { "NTSC", V4L2_STD_NTSC, SAA7146_NTSC_VALUES },
-+ {
-+ .name = "PAL", .id = V4L2_STD_PAL,
-+ .v_offset = 0x17, .v_field = 288, .v_calc = 576,
-+ .h_offset = 0x14, .h_pixels = 680, .h_calc = 680+1,
-+ .v_max_out = 576, .h_max_out = 768,
-+ }, {
-+ .name = "NTSC", .id = V4L2_STD_NTSC,
-+ .v_offset = 0x16, .v_field = 240, .v_calc = 480,
-+ .h_offset = 0x06, .h_pixels = 708, .h_calc = 708+1,
-+ .v_max_out = 480, .h_max_out = 640,
-+ }
- };
-
--
- static struct saa7146_ext_vv vv_data = {
- .inputs = 2,
- .capabilities = 0, // perhaps later: V4L2_CAP_VBI_CAPTURE, but that need tweaking with the saa7113
-@@ -338,8 +354,6 @@ static struct saa7146_extension budget_e
- .attach = budget_av_attach,
- .detach = budget_av_detach,
-
-- .ext_vv_data = &vv_data,
--
- .irq_mask = MASK_10,
- .irq_func = ttpci_budget_irq10_handler,
- };
---- linux-2.6.0-test1/drivers/media/dvb/ttpci/budget.c 2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/dvb/ttpci/budget.c 2003-07-19 17:03:49.000000000 -0700
-@@ -192,6 +192,7 @@ static struct saa7146_extension budget_e
- MAKE_BUDGET_INFO(ttbs, "TT-Budget/WinTV-NOVA-S PCI", BUDGET_TT);
- MAKE_BUDGET_INFO(ttbc, "TT-Budget/WinTV-NOVA-C PCI", BUDGET_TT);
- MAKE_BUDGET_INFO(ttbt, "TT-Budget/WinTV-NOVA-T PCI", BUDGET_TT);
-+MAKE_BUDGET_INFO(ttbt2, "TT-Budget/WinTV-NOVA-T PCI", BUDGET_TT);
- MAKE_BUDGET_INFO(satel, "SATELCO Multimedia PCI", BUDGET_TT_HW_DISEQC);
- /* Uncomment for Budget Patch */
- /*MAKE_BUDGET_INFO(fs_1_3,"Siemens/Technotrend/Hauppauge PCI rev1.3+Budget_Patch", BUDGET_PATCH);*/
-@@ -202,6 +203,7 @@ static struct pci_device_id pci_tbl[] =
- MAKE_EXTENSION_PCI(ttbs, 0x13c2, 0x1003),
- MAKE_EXTENSION_PCI(ttbc, 0x13c2, 0x1004),
- MAKE_EXTENSION_PCI(ttbt, 0x13c2, 0x1005),
-+ MAKE_EXTENSION_PCI(ttbt2, 0x13c2, 0x1011),
- MAKE_EXTENSION_PCI(satel, 0x13c2, 0x1013),
- {
- .vendor = 0,
-@@ -213,7 +215,6 @@ MODULE_DEVICE_TABLE(pci, pci_tbl);
- static struct saa7146_extension budget_extension = {
- .name = "budget dvb\0",
- .flags = 0,
-- .ext_vv_data = NULL,
-
- .module = THIS_MODULE,
- .pci_tbl = pci_tbl,
---- linux-2.6.0-test1/drivers/media/dvb/ttpci/budget-ci.c 2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/dvb/ttpci/budget-ci.c 2003-07-19 17:03:49.000000000 -0700
-@@ -371,7 +371,6 @@ MODULE_DEVICE_TABLE(pci, pci_tbl);
- static struct saa7146_extension budget_extension = {
- .name = "budget_ci dvb\0",
- .flags = 0,
-- .ext_vv_data = NULL,
-
- .module = THIS_MODULE,
- .pci_tbl = &pci_tbl[0],
---- linux-2.6.0-test1/drivers/media/dvb/ttpci/budget-core.c 2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/dvb/ttpci/budget-core.c 2003-07-19 17:03:49.000000000 -0700
-@@ -1,4 +1,5 @@
- #include "budget.h"
-+#include "ttpci-eeprom.h"
-
- int budget_debug = 0;
-
-@@ -165,7 +166,6 @@ static int budget_register(struct budget
- if (ret < 0)
- return ret;
-
-- budget->dvb_net.card_num = budget->dvb_adapter->num;
- dvb_net_init(budget->dvb_adapter, &budget->dvb_net, &dvbdemux->dmx);
-
- return 0;
-@@ -222,7 +222,7 @@ int ttpci_budget_init (struct budget *bu
- get recognized before the main driver is loaded */
- saa7146_write(dev, GPIO_CTRL, 0x500000);
-
-- saa7146_i2c_adapter_prepare(dev, NULL, SAA7146_I2C_BUS_BIT_RATE_3200);
-+ saa7146_i2c_adapter_prepare(dev, NULL, SAA7146_I2C_BUS_BIT_RATE_120);
-
- budget->i2c_bus = dvb_register_i2c_bus (master_xfer, dev,
- budget->dvb_adapter, 0);
-@@ -232,6 +232,8 @@ int ttpci_budget_init (struct budget *bu
- return -ENOMEM;
- }
-
-+ ttpci_eeprom_parse_mac(budget->i2c_bus);
-+
- if( NULL == (budget->grabbing = saa7146_vmalloc_build_pgtable(dev->pci,length,&budget->pt))) {
- ret = -ENOMEM;
- goto err;
---- linux-2.6.0-test1/drivers/media/dvb/ttpci/budget-patch.c 2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/dvb/ttpci/budget-patch.c 2003-07-19 17:03:49.000000000 -0700
-@@ -165,6 +165,7 @@ static int budget_patch_attach (struct s
- {
- struct budget_patch *budget;
- int err;
-+ int count = 0;
-
- if (!(budget = kmalloc (sizeof(struct budget_patch), GFP_KERNEL)))
- return -ENOMEM;
-@@ -263,7 +264,6 @@ static void __exit budget_patch_exit(voi
- static struct saa7146_extension budget_extension = {
- .name = "budget_patch dvb\0",
- .flags = 0,
-- .ext_vv_data = NULL,
-
- .module = THIS_MODULE,
- .pci_tbl = pci_tbl,
---- linux-2.6.0-test1/drivers/media/dvb/ttpci/Makefile 2003-06-14 12:17:58.000000000 -0700
-+++ 25/drivers/media/dvb/ttpci/Makefile 2003-07-19 17:03:49.000000000 -0700
-@@ -3,16 +3,12 @@
- # and the AV7110 DVB device driver
- #
-
--dvb-ttpci-budget-objs := budget.o
--dvb-ttpci-budget-av-objs := budget-av.o
--dvb-ttpci-budget-ci-objs := budget-ci.o
--dvb-ttpci-budget-patch-objs := budget-patch.o
- dvb-ttpci-objs := av7110.o av7110_ipack.o av7110_ir.o
-
--obj-$(CONFIG_DVB_BUDGET) += budget-core.o dvb-ttpci-budget.o
--obj-$(CONFIG_DVB_BUDGET_CI) += budget-core.o dvb-ttpci-budget-ci.o
--obj-$(CONFIG_DVB_BUDGET_AV) += budget-core.o dvb-ttpci-budget-av.o
--obj-$(CONFIG_DVB_BUDGET_PATCH) += budget-core.o dvb-ttpci-budget-patch.o
--obj-$(CONFIG_DVB_AV7110) += dvb-ttpci.o
-+obj-$(CONFIG_DVB_BUDGET) += budget-core.o budget.o ttpci-eeprom.o
-+obj-$(CONFIG_DVB_BUDGET_AV) += budget-core.o budget-av.o ttpci-eeprom.o
-+obj-$(CONFIG_DVB_BUDGET_CI) += budget-core.o budget-ci.o ttpci-eeprom.o
-+obj-$(CONFIG_DVB_BUDGET_PATCH) += budget-core.o budget-patch.o ttpci-eeprom.o
-+obj-$(CONFIG_DVB_AV7110) += dvb-ttpci.o ttpci-eeprom.o
-
- EXTRA_CFLAGS = -Idrivers/media/dvb/dvb-core/
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/media/dvb/ttpci/ttpci-eeprom.c 2003-07-19 17:03:49.000000000 -0700
-@@ -0,0 +1,120 @@
-+/*
-+ Retrieve encoded MAC address from 24C16 serial 2-wire EEPROM,
-+ decode it and store it in the associated adapter struct for
-+ use by dvb_net.c
-+
-+ This code was tested on TT-Budget/WinTV-NOVA-CI PCI boards with
-+ Atmel and ST Microelectronics EEPROMs.
-+
-+ This card appear to have the 24C16 write protect held to ground,
-+ thus permitting normal read/write operation. Theoretically it
-+ would be possible to write routines to burn a different (encoded)
-+ MAC address into the EEPROM.
-+
-+ Robert Schlabbach GMX
-+ Michael Glaum KVH Industries
-+ Holger Waechtler Convergence
-+
-+ This program is free software; you can redistribute it and/or modify
-+ it under the terms of the GNU General Public License as published by
-+ the Free Software Foundation; either version 2 of the License, or
-+ (at your option) any later version.
-+
-+ This program is distributed in the hope that it will be useful,
-+ but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ GNU General Public License for more details.
-+
-+ You should have received a copy of the GNU General Public License
-+ along with this program; if not, write to the Free Software
-+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+
-+*/
-+
-+#include <asm/errno.h>
-+#include <linux/init.h>
-+#include <linux/module.h>
-+#include <linux/string.h>
-+
-+#include "dvb_i2c.h"
-+#include "dvb_functions.h"
-+
-+#if 1
-+#define dprintk(x...) printk(x)
-+#else
-+#define dprintk(x...)
-+#endif
-+
-+
-+static int ttpci_eeprom_read_encodedMAC(struct dvb_i2c_bus *i2c, u8 * encodedMAC)
-+{
-+ int ret;
-+ u8 b0[] = { 0xd4 };
-+
-+ struct i2c_msg msg[] = {
-+ {.addr = 0x50,.flags = 0,.buf = b0,.len = 1},
-+ {.addr = 0x50,.flags = I2C_M_RD,.buf = encodedMAC,.len = 6}
-+ };
-+
-+ dprintk("%s\n", __FUNCTION__);
-+
-+ ret = i2c->xfer(i2c, msg, 2);
-+
-+ if (ret != 2) /* Assume EEPROM isn't there */
-+ return (-ENODEV);
-+
-+ return 0;
-+}
-+
-+static void decodeMAC(u8 * decodedMAC, const u8 * encodedMAC)
-+{
-+ u8 ormask0[3] = { 0x54, 0x7B, 0x9E };
-+ u8 ormask1[3] = { 0xD3, 0xF1, 0x23 };
-+ u8 low;
-+ u8 high;
-+ u8 shift;
-+ int i;
-+
-+ decodedMAC[0] = 0x00;
-+ decodedMAC[1] = 0xD0;
-+ decodedMAC[2] = 0x5C;
-+
-+ for (i = 0; i < 3; i++) {
-+ low = encodedMAC[2 * i] ^ ormask0[i];
-+ high = encodedMAC[2 * i + 1] ^ ormask1[i];
-+ shift = (high >> 6) & 0x3;
-+
-+ decodedMAC[5 - i] = ((high << 8) | low) >> shift;
-+ }
-+
-+}
-+
-+
-+int ttpci_eeprom_parse_mac(struct dvb_i2c_bus *i2c)
-+{
-+ int ret;
-+ u8 encodedMAC[6];
-+ u8 decodedMAC[6];
-+
-+ ret = ttpci_eeprom_read_encodedMAC(i2c, encodedMAC);
-+
-+ if (ret != 0) { /* Will only be -ENODEV */
-+ dprintk("Couldn't read from EEPROM: not there?\n");
-+ memset(i2c->adapter->proposed_mac, 0, 6);
-+ return ret;
-+ }
-+
-+ decodeMAC(decodedMAC, encodedMAC);
-+ memcpy(i2c->adapter->proposed_mac, decodedMAC, 6);
-+
-+ dprintk("%s adapter %i has MAC addr = %02x:%02x:%02x:%02x:%02x:%02x\n",
-+ i2c->adapter->name, i2c->adapter->num,
-+ decodedMAC[0], decodedMAC[1], decodedMAC[2],
-+ decodedMAC[3], decodedMAC[4], decodedMAC[5]);
-+ dprintk("encoded MAC was %02x:%02x:%02x:%02x:%02x:%02x\n",
-+ encodedMAC[0], encodedMAC[1], encodedMAC[2],
-+ encodedMAC[3], encodedMAC[4], encodedMAC[5]);
-+ return 0;
-+}
-+
-+EXPORT_SYMBOL(ttpci_eeprom_parse_mac);
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/media/dvb/ttpci/ttpci-eeprom.h 2003-07-19 17:03:50.000000000 -0700
-@@ -0,0 +1,32 @@
-+/*
-+ Retrieve encoded MAC address from ATMEL ttpci_eeprom serial 2-wire EEPROM,
-+ decode it and store it in associated adapter net device
-+
-+ Robert Schlabbach GMX
-+ Michael Glaum KVH Industries
-+ Holger Waechtler Convergence
-+
-+ This program is free software; you can redistribute it and/or modify
-+ it under the terms of the GNU General Public License as published by
-+ the Free Software Foundation; either version 2 of the License, or
-+ (at your option) any later version.
-+
-+ This program is distributed in the hope that it will be useful,
-+ but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ GNU General Public License for more details.
-+
-+ You should have received a copy of the GNU General Public License
-+ along with this program; if not, write to the Free Software
-+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+
-+*/
-+
-+#ifndef __TTPCI_EEPROM_H__
-+#define __TTPCI_EEPROM_H__
-+
-+#include "dvb_i2c.h"
-+
-+extern int ttpci_eeprom_parse_mac(struct dvb_i2c_bus *i2c);
-+
-+#endif
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c 2003-07-19 17:03:50.000000000 -0700
-@@ -0,0 +1,1271 @@
-+/*
-+ * TTUSB DVB driver
-+ *
-+ * Copyright (c) 2002 Holger Waechtler <holger@convergence.de>
-+ * Copyright (c) 2003 Felix Domke <tmbinc@gmx.net>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License as
-+ * published by the Free Software Foundation; either version 2 of
-+ * the License, or (at your option) any later version.
-+ */
-+#include <linux/init.h>
-+#include <linux/slab.h>
-+#include <linux/wait.h>
-+#include <linux/module.h>
-+#include <linux/usb.h>
-+#include <linux/delay.h>
-+#include <linux/time.h>
-+#include <linux/errno.h>
-+#include <asm/semaphore.h>
-+
-+#include "dvb_frontend.h"
-+#include "dmxdev.h"
-+#include "dvb_demux.h"
-+#include "dvb_net.h"
-+
-+#include <linux/dvb/frontend.h>
-+#include <linux/dvb/dmx.h>
-+#include <linux/pci.h>
-+#include <linux/usb.h>
-+
-+#include "dvb_functions.h"
-+
-+/*
-+ TTUSB_HWSECTIONS:
-+ the DSP supports filtering in hardware, however, since the "muxstream"
-+ is a bit braindead (no matching channel masks or no matching filter mask),
-+ we won't support this - yet. it doesn't event support negative filters,
-+ so the best way is maybe to keep TTUSB_HWSECTIONS undef'd and just
-+ parse TS data. USB bandwith will be a problem when having large
-+ datastreams, especially for dvb-net, but hey, that's not my problem.
-+
-+ TTUSB_DISEQC, TTUSB_TONE:
-+ let the STC do the diseqc/tone stuff. this isn't supported at least with
-+ my TTUSB, so let it undef'd unless you want to implement another
-+ frontend. never tested.
-+
-+ DEBUG:
-+ define it to > 3 for really hardcore debugging. you probably don't want
-+ this unless the device doesn't load at all. > 2 for bandwidth statistics.
-+*/
-+
-+static int debug = 0;
-+
-+#define dprintk(x...) do { if (debug) printk(KERN_DEBUG x); } while (0)
-+
-+#define ISO_BUF_COUNT 4
-+#define FRAMES_PER_ISO_BUF 4
-+#define ISO_FRAME_SIZE 912
-+#define TTUSB_MAXCHANNEL 32
-+#ifdef TTUSB_HWSECTIONS
-+#define TTUSB_MAXFILTER 16 /* ??? */
-+#endif
-+
-+#define TTUSB_BUDGET_NAME "ttusb_stc_fw"
-+
-+/**
-+ * since we're casting (struct ttusb*) <-> (struct dvb_demux*) around
-+ * the dvb_demux field must be the first in struct!!
-+ */
-+struct ttusb {
-+ struct dvb_demux dvb_demux;
-+ struct dmxdev dmxdev;
-+ struct dvb_net dvbnet;
-+
-+ /* our semaphore, for channel allocation/deallocation */
-+ struct semaphore sem;
-+ /* and one for USB access. */
-+ struct semaphore semusb;
-+
-+ struct dvb_adapter *adapter;
-+ struct usb_device *dev;
-+
-+ int disconnecting;
-+ int iso_streaming;
-+
-+ unsigned int bulk_out_pipe;
-+ unsigned int bulk_in_pipe;
-+ unsigned int isoc_in_pipe;
-+
-+ void *iso_buffer;
-+ dma_addr_t iso_dma_handle;
-+
-+ struct urb *iso_urb[ISO_BUF_COUNT];
-+
-+ int running_feed_count;
-+ int last_channel;
-+ int last_filter;
-+
-+ u8 c; /* transaction counter, wraps around... */
-+ fe_sec_tone_mode_t tone;
-+ fe_sec_voltage_t voltage;
-+
-+ int mux_state; // 0..2 - MuxSyncWord, 3 - nMuxPacks, 4 - muxpack
-+ u8 mux_npacks;
-+ u8 muxpack[256 + 8];
-+ int muxpack_ptr, muxpack_len;
-+
-+ int insync;
-+
-+ u16 cc; /* MuxCounter - will increment on EVERY MUX PACKET */
-+ /* (including stuffing. yes. really.) */
-+
-+ u8 last_result[32];
-+
-+ struct ttusb_channel {
-+ struct ttusb *ttusb;
-+ struct dvb_demux_feed *dvbdmxfeed;
-+
-+ int active;
-+ int id;
-+ int pid;
-+ int type; /* 1 - TS, 2 - Filter */
-+#ifdef TTUSB_HWSECTIONS
-+ int filterstate[TTUSB_MAXFILTER]; /* 0: not busy, 1: busy */
-+#endif
-+ } channel[TTUSB_MAXCHANNEL];
-+#if 0
-+ devfs_handle_t stc_devfs_handle;
-+#endif
-+};
-+
-+/* ugly workaround ... don't know why it's neccessary to read */
-+/* all result codes. */
-+
-+#define DEBUG 0
-+static int ttusb_cmd(struct ttusb *ttusb,
-+ const u8 * data, int len, int needresult)
-+{
-+ int actual_len;
-+ int err;
-+#if DEBUG >= 3
-+ int i;
-+
-+ printk(">");
-+ for (i = 0; i < len; ++i)
-+ printk(" %02x", data[i]);
-+ printk("\n");
-+#endif
-+
-+ if (down_interruptible(&ttusb->semusb) < 0)
-+ return -EAGAIN;
-+
-+ err = usb_bulk_msg(ttusb->dev, ttusb->bulk_out_pipe,
-+ (u8 *) data, len, &actual_len, HZ);
-+ if (err != 0) {
-+ dprintk("%s: usb_bulk_msg(send) failed, err == %i!\n",
-+ __FUNCTION__, err);
-+ up(&ttusb->semusb);
-+ return err;
-+ }
-+ if (actual_len != len) {
-+ dprintk("%s: only wrote %d of %d bytes\n", __FUNCTION__,
-+ actual_len, len);
-+ up(&ttusb->semusb);
-+ return -1;
-+ }
-+
-+ err = usb_bulk_msg(ttusb->dev, ttusb->bulk_in_pipe,
-+ ttusb->last_result, 32, &actual_len, HZ);
-+
-+ if (err != 0) {
-+ printk("%s: failed, receive error %d\n", __FUNCTION__,
-+ err);
-+ up(&ttusb->semusb);
-+ return err;
-+ }
-+#if DEBUG >= 3
-+ actual_len = ttusb->last_result[3] + 4;
-+ printk("<");
-+ for (i = 0; i < actual_len; ++i)
-+ printk(" %02x", ttusb->last_result[i]);
-+ printk("\n");
-+#endif
-+ if (!needresult)
-+ up(&ttusb->semusb);
-+ return 0;
-+}
-+
-+static int ttusb_result(struct ttusb *ttusb, u8 * data, int len)
-+{
-+ memcpy(data, ttusb->last_result, len);
-+ up(&ttusb->semusb);
-+ return 0;
-+}
-+
-+static int ttusb_i2c_msg(struct ttusb *ttusb,
-+ u8 addr, u8 * snd_buf, u8 snd_len, u8 * rcv_buf,
-+ u8 rcv_len)
-+{
-+ u8 b[0x28];
-+ u8 id = ++ttusb->c;
-+ int i, err;
-+
-+ if (snd_len > 0x28 - 7 || rcv_len > 0x20 - 7)
-+ return -EINVAL;
-+
-+ b[0] = 0xaa;
-+ b[1] = id;
-+ b[2] = 0x31;
-+ b[3] = snd_len + 3;
-+ b[4] = addr << 1;
-+ b[5] = snd_len;
-+ b[6] = rcv_len;
-+
-+ for (i = 0; i < snd_len; i++)
-+ b[7 + i] = snd_buf[i];
-+
-+ err = ttusb_cmd(ttusb, b, snd_len + 7, 1);
-+
-+ if (err)
-+ return -EREMOTEIO;
-+
-+ err = ttusb_result(ttusb, b, 0x20);
-+
-+ if (rcv_len > 0) {
-+
-+ if (err || b[0] != 0x55 || b[1] != id) {
-+ dprintk
-+ ("%s: usb_bulk_msg(recv) failed, err == %i, id == %02x, b == ",
-+ __FUNCTION__, err, id);
-+ return -EREMOTEIO;
-+ }
-+
-+ for (i = 0; i < rcv_len; i++)
-+ rcv_buf[i] = b[7 + i];
-+ }
-+
-+ return rcv_len;
-+}
-+
-+static int ttusb_i2c_xfer(struct dvb_i2c_bus *i2c, const struct i2c_msg msg[],
-+ int num)
-+{
-+ struct ttusb *ttusb = i2c->data;
-+ int i = 0;
-+ int inc;
-+
-+ if (down_interruptible(&ttusb->sem) < 0)
-+ return -EAGAIN;
-+
-+ while (i < num) {
-+ u8 addr, snd_len, rcv_len, *snd_buf, *rcv_buf;
-+ int err;
-+
-+ if (num > i + 1 && (msg[i + 1].flags & I2C_M_RD)) {
-+ addr = msg[i].addr;
-+ snd_buf = msg[i].buf;
-+ snd_len = msg[i].len;
-+ rcv_buf = msg[i + 1].buf;
-+ rcv_len = msg[i + 1].len;
-+ inc = 2;
-+ } else {
-+ addr = msg[i].addr;
-+ snd_buf = msg[i].buf;
-+ snd_len = msg[i].len;
-+ rcv_buf = NULL;
-+ rcv_len = 0;
-+ inc = 1;
-+ }
-+
-+ err = ttusb_i2c_msg(ttusb, addr,
-+ snd_buf, snd_len, rcv_buf, rcv_len);
-+
-+ if (err < rcv_len) {
-+ printk("%s: i == %i\n", __FUNCTION__, i);
-+ break;
-+ }
-+
-+ i += inc;
-+ }
-+
-+ up(&ttusb->sem);
-+ return i;
-+}
-+
-+#include "dvb-ttusb-dspbootcode.h"
-+
-+static int ttusb_boot_dsp(struct ttusb *ttusb)
-+{
-+ int i, err;
-+ u8 b[40];
-+
-+ /* BootBlock */
-+ b[0] = 0xaa;
-+ b[2] = 0x13;
-+ b[3] = 28;
-+
-+ /* upload dsp code in 32 byte steps (36 didn't work for me ...) */
-+ /* 32 is max packet size, no messages should be splitted. */
-+ for (i = 0; i < sizeof(dsp_bootcode); i += 28) {
-+ memcpy(&b[4], &dsp_bootcode[i], 28);
-+
-+ b[1] = ++ttusb->c;
-+
-+ err = ttusb_cmd(ttusb, b, 32, 0);
-+ if (err)
-+ goto done;
-+ }
-+
-+ /* last block ... */
-+ b[1] = ++ttusb->c;
-+ b[2] = 0x13;
-+ b[3] = 0;
-+
-+ err = ttusb_cmd(ttusb, b, 4, 0);
-+ if (err)
-+ goto done;
-+
-+ /* BootEnd */
-+ b[1] = ++ttusb->c;
-+ b[2] = 0x14;
-+ b[3] = 0;
-+
-+ err = ttusb_cmd(ttusb, b, 4, 0);
-+
-+ done:
-+ if (err) {
-+ dprintk("%s: usb_bulk_msg() failed, return value %i!\n",
-+ __FUNCTION__, err);
-+ }
-+
-+ return err;
-+}
-+
-+static int ttusb_set_channel(struct ttusb *ttusb, int chan_id, int filter_type,
-+ int pid)
-+{
-+ int err;
-+ /* SetChannel */
-+ u8 b[] = { 0xaa, ++ttusb->c, 0x22, 4, chan_id, filter_type,
-+ (pid >> 8) & 0xff, pid & 0xff
-+ };
-+
-+ err = ttusb_cmd(ttusb, b, sizeof(b), 0);
-+ return err;
-+}
-+
-+static int ttusb_del_channel(struct ttusb *ttusb, int channel_id)
-+{
-+ int err;
-+ /* DelChannel */
-+ u8 b[] = { 0xaa, ++ttusb->c, 0x23, 1, channel_id };
-+
-+ err = ttusb_cmd(ttusb, b, sizeof(b), 0);
-+ return err;
-+}
-+
-+#ifdef TTUSB_HWSECTIONS
-+static int ttusb_set_filter(struct ttusb *ttusb, int filter_id,
-+ int associated_chan, u8 filter[8], u8 mask[8])
-+{
-+ int err;
-+ /* SetFilter */
-+ u8 b[] = { 0xaa, 0, 0x24, 0x1a, filter_id, associated_chan,
-+ filter[0], filter[1], filter[2], filter[3],
-+ filter[4], filter[5], filter[6], filter[7],
-+ filter[8], filter[9], filter[10], filter[11],
-+ mask[0], mask[1], mask[2], mask[3],
-+ mask[4], mask[5], mask[6], mask[7],
-+ mask[8], mask[9], mask[10], mask[11]
-+ };
-+
-+ err = ttusb_cmd(ttusb, b, sizeof(b), 0);
-+ return err;
-+}
-+
-+static int ttusb_del_filter(struct ttusb *ttusb, int filter_id)
-+{
-+ int err;
-+ /* DelFilter */
-+ u8 b[] = { 0xaa, ++ttusb->c, 0x25, 1, filter_id };
-+
-+ err = ttusb_cmd(ttusb, b, sizeof(b), 0);
-+ return err;
-+}
-+#endif
-+
-+static int ttusb_init_controller(struct ttusb *ttusb)
-+{
-+ u8 b0[] = { 0xaa, ++ttusb->c, 0x15, 1, 0 };
-+ u8 b1[] = { 0xaa, ++ttusb->c, 0x15, 1, 1 };
-+ u8 b2[] = { 0xaa, ++ttusb->c, 0x32, 1, 0 };
-+ /* i2c write read: 5 bytes, addr 0x10, 0x02 bytes write, 1 bytes read. */
-+ u8 b3[] =
-+ { 0xaa, ++ttusb->c, 0x31, 5, 0x10, 0x02, 0x01, 0x00, 0x1e };
-+ u8 b4[] =
-+ { 0x55, ttusb->c, 0x31, 4, 0x10, 0x02, 0x01, 0x00, 0x1e };
-+
-+ u8 get_version[] = { 0xaa, ++ttusb->c, 0x17, 5, 0, 0, 0, 0, 0 };
-+ u8 get_dsp_version[0x20] =
-+ { 0xaa, ++ttusb->c, 0x26, 28, 0, 0, 0, 0, 0 };
-+ int err;
-+
-+ /* reset board */
-+ if ((err = ttusb_cmd(ttusb, b0, sizeof(b0), 0)))
-+ return err;
-+
-+ /* reset board (again?) */
-+ if ((err = ttusb_cmd(ttusb, b1, sizeof(b1), 0)))
-+ return err;
-+
-+ ttusb_boot_dsp(ttusb);
-+
-+ /* set i2c bit rate */
-+ if ((err = ttusb_cmd(ttusb, b2, sizeof(b2), 0)))
-+ return err;
-+
-+ if ((err = ttusb_cmd(ttusb, b3, sizeof(b3), 1)))
-+ return err;
-+
-+ err = ttusb_result(ttusb, b4, sizeof(b4));
-+
-+ if ((err = ttusb_cmd(ttusb, get_version, sizeof(get_version), 1)))
-+ return err;
-+
-+ if ((err = ttusb_result(ttusb, get_version, sizeof(get_version))))
-+ return err;
-+
-+ dprintk("%s: stc-version: %c%c%c%c%c\n", __FUNCTION__,
-+ get_version[4], get_version[5], get_version[6],
-+ get_version[7], get_version[8]);
-+
-+ if (memcmp(get_version + 4, "V 0.0", 5) &&
-+ memcmp(get_version + 4, "V 1.1", 5)) {
-+ printk
-+ ("%s: unknown STC version %c%c%c%c%c, please report!\n",
-+ __FUNCTION__, get_version[4], get_version[5],
-+ get_version[6], get_version[7], get_version[8]);
-+ }
-+
-+ err =
-+ ttusb_cmd(ttusb, get_dsp_version, sizeof(get_dsp_version), 1);
-+ if (err)
-+ return err;
-+
-+ err =
-+ ttusb_result(ttusb, get_dsp_version, sizeof(get_dsp_version));
-+ if (err)
-+ return err;
-+ printk("%s: dsp-version: %c%c%c\n", __FUNCTION__,
-+ get_dsp_version[4], get_dsp_version[5], get_dsp_version[6]);
-+ return 0;
-+}
-+
-+#ifdef TTUSB_DISEQC
-+static int ttusb_send_diseqc(struct ttusb *ttusb,
-+ const struct dvb_diseqc_master_cmd *cmd)
-+{
-+ u8 b[12] = { 0xaa, ++ttusb->c, 0x18 };
-+
-+ int err;
-+
-+ b[3] = 4 + 2 + cmd->msg_len;
-+ b[4] = 0xFF; /* send diseqc master, not burst */
-+ b[5] = cmd->msg_len;
-+
-+ memcpy(b + 5, cmd->msg, cmd->msg_len);
-+
-+ /* Diseqc */
-+ if ((err = ttusb_cmd(ttusb, b, 4 + b[3], 0))) {
-+ dprintk("%s: usb_bulk_msg() failed, return value %i!\n",
-+ __FUNCTION__, err);
-+ }
-+
-+ return err;
-+}
-+#endif
-+
-+static int ttusb_update_lnb(struct ttusb *ttusb)
-+{
-+ u8 b[] = { 0xaa, ++ttusb->c, 0x16, 5, /*power: */ 1,
-+ ttusb->voltage == SEC_VOLTAGE_18 ? 0 : 1,
-+ ttusb->tone == SEC_TONE_ON ? 1 : 0, 1, 1
-+ };
-+ int err;
-+
-+ /* SetLNB */
-+ if ((err = ttusb_cmd(ttusb, b, sizeof(b), 0))) {
-+ dprintk("%s: usb_bulk_msg() failed, return value %i!\n",
-+ __FUNCTION__, err);
-+ }
-+
-+ return err;
-+}
-+
-+static int ttusb_set_voltage(struct ttusb *ttusb, fe_sec_voltage_t voltage)
-+{
-+ ttusb->voltage = voltage;
-+ return ttusb_update_lnb(ttusb);
-+}
-+
-+#ifdef TTUSB_TONE
-+static int ttusb_set_tone(struct ttusb *ttusb, fe_sec_tone_mode_t tone)
-+{
-+ ttusb->tone = tone;
-+ return ttusb_update_lnb(ttusb);
-+}
-+#endif
-+
-+static int ttusb_lnb_ioctl(struct dvb_frontend *fe, unsigned int cmd, void *arg)
-+{
-+ struct ttusb *ttusb = fe->i2c->data;
-+
-+ switch (cmd) {
-+ case FE_SET_VOLTAGE:
-+ return ttusb_set_voltage(ttusb, (fe_sec_voltage_t) arg);
-+#ifdef TTUSB_TONE
-+ case FE_SET_TONE:
-+ return ttusb_set_tone(ttusb, (fe_sec_tone_mode_t) arg);
-+#endif
-+#ifdef TTUSB_DISEQC
-+ case FE_DISEQC_SEND_MASTER_CMD:
-+ return ttusb_send_diseqc(ttusb,
-+ (struct dvb_diseqc_master_cmd *)
-+ arg);
-+#endif
-+ default:
-+ return -EOPNOTSUPP;
-+ };
-+}
-+
-+#if 0
-+static void ttusb_set_led_freq(struct ttusb *ttusb, u8 freq)
-+{
-+ u8 b[] = { 0xaa, ++ttusb->c, 0x19, 1, freq };
-+ int err, actual_len;
-+
-+ err = ttusb_cmd(ttusb, b, sizeof(b), 0);
-+ if (err) {
-+ dprintk("%s: usb_bulk_msg() failed, return value %i!\n",
-+ __FUNCTION__, err);
-+ }
-+}
-+#endif
-+
-+/*****************************************************************************/
-+
-+#ifdef TTUSB_HWSECTIONS
-+static void ttusb_handle_ts_data(struct ttusb_channel *channel,
-+ const u8 * data, int len);
-+static void ttusb_handle_sec_data(struct ttusb_channel *channel,
-+ const u8 * data, int len);
-+#endif
-+
-+int numpkt = 0, lastj, numts, numstuff, numsec, numinvalid;
-+
-+static void ttusb_process_muxpack(struct ttusb *ttusb, const u8 * muxpack,
-+ int len)
-+{
-+ u16 csum = 0, cc;
-+ int i;
-+ for (i = 0; i < len; i += 2)
-+ csum ^= le16_to_cpup((u16 *) (muxpack + i));
-+ if (csum) {
-+ printk("%s: muxpack with incorrect checksum, ignoring\n",
-+ __FUNCTION__);
-+ numinvalid++;
-+ return;
-+ }
-+
-+ cc = (muxpack[len - 4] << 8) | muxpack[len - 3];
-+ cc &= 0x7FFF;
-+ if (cc != ttusb->cc)
-+ printk("%s: cc discontinuity (%d frames missing)\n",
-+ __FUNCTION__, (cc - ttusb->cc) & 0x7FFF);
-+ ttusb->cc = (cc + 1) & 0x7FFF;
-+ if (muxpack[0] & 0x80) {
-+#ifdef TTUSB_HWSECTIONS
-+ /* section data */
-+ int pusi = muxpack[0] & 0x40;
-+ int channel = muxpack[0] & 0x1F;
-+ int payload = muxpack[1];
-+ const u8 *data = muxpack + 2;
-+ /* check offset flag */
-+ if (muxpack[0] & 0x20)
-+ data++;
-+
-+ ttusb_handle_sec_data(ttusb->channel + channel, data,
-+ payload);
-+ data += payload;
-+
-+ if ((!!(ttusb->muxpack[0] & 0x20)) ^
-+ !!(ttusb->muxpack[1] & 1))
-+ data++;
-+#warning TODO: pusi
-+ printk("cc: %04x\n", (data[0] << 8) | data[1]);
-+#endif
-+ numsec++;
-+ } else if (muxpack[0] == 0x47) {
-+#ifdef TTUSB_HWSECTIONS
-+ /* we have TS data here! */
-+ int pid = ((muxpack[1] & 0x0F) << 8) | muxpack[2];
-+ int channel;
-+ for (channel = 0; channel < TTUSB_MAXCHANNEL; ++channel)
-+ if (ttusb->channel[channel].active
-+ && (pid == ttusb->channel[channel].pid))
-+ ttusb_handle_ts_data(ttusb->channel +
-+ channel, muxpack,
-+ 188);
-+#endif
-+ numts++;
-+ dvb_dmx_swfilter_packets(&ttusb->dvb_demux, muxpack, 1);
-+ } else if (muxpack[0] != 0) {
-+ numinvalid++;
-+ printk("illegal muxpack type %02x\n", muxpack[0]);
-+ } else
-+ numstuff++;
-+}
-+
-+static void ttusb_process_frame(struct ttusb *ttusb, u8 * data, int len)
-+{
-+ int maxwork = 1024;
-+ while (len) {
-+ if (!(maxwork--)) {
-+ printk("%s: too much work\n", __FUNCTION__);
-+ break;
-+ }
-+
-+ switch (ttusb->mux_state) {
-+ case 0:
-+ case 1:
-+ case 2:
-+ len--;
-+ if (*data++ == 0xAA)
-+ ++ttusb->mux_state;
-+ else {
-+ ttusb->mux_state = 0;
-+#if DEBUG > 3
-+ if (ttusb->insync)
-+ printk("%02x ", data[-1]);
-+#else
-+ if (ttusb->insync) {
-+ printk("%s: lost sync.\n",
-+ __FUNCTION__);
-+ ttusb->insync = 0;
-+ }
-+#endif
-+ }
-+ break;
-+ case 3:
-+ ttusb->insync = 1;
-+ len--;
-+ ttusb->mux_npacks = *data++;
-+ ++ttusb->mux_state;
-+ ttusb->muxpack_ptr = 0;
-+ /* maximum bytes, until we know the length */
-+ ttusb->muxpack_len = 2;
-+ break;
-+ case 4:
-+ {
-+ int avail;
-+ avail = len;
-+ if (avail >
-+ (ttusb->muxpack_len -
-+ ttusb->muxpack_ptr))
-+ avail =
-+ ttusb->muxpack_len -
-+ ttusb->muxpack_ptr;
-+ memcpy(ttusb->muxpack + ttusb->muxpack_ptr,
-+ data, avail);
-+ ttusb->muxpack_ptr += avail;
-+ if (ttusb->muxpack_ptr > 264)
-+ BUG();
-+ data += avail;
-+ len -= avail;
-+ /* determine length */
-+ if (ttusb->muxpack_ptr == 2) {
-+ if (ttusb->muxpack[0] & 0x80) {
-+ ttusb->muxpack_len =
-+ ttusb->muxpack[1] + 2;
-+ if (ttusb->
-+ muxpack[0] & 0x20)
-+ ttusb->
-+ muxpack_len++;
-+ if ((!!
-+ (ttusb->
-+ muxpack[0] & 0x20)) ^
-+ !!(ttusb->
-+ muxpack[1] & 1))
-+ ttusb->
-+ muxpack_len++;
-+ ttusb->muxpack_len += 4;
-+ } else if (ttusb->muxpack[0] ==
-+ 0x47)
-+ ttusb->muxpack_len =
-+ 188 + 4;
-+ else if (ttusb->muxpack[0] == 0x00)
-+ ttusb->muxpack_len =
-+ ttusb->muxpack[1] + 2 +
-+ 4;
-+ else {
-+ dprintk
-+ ("%s: invalid state: first byte is %x\n",
-+ __FUNCTION__,
-+ ttusb->muxpack[0]);
-+ ttusb->mux_state = 0;
-+ }
-+ }
-+
-+ /**
-+ * if length is valid and we reached the end:
-+ * goto next muxpack
-+ */
-+ if ((ttusb->muxpack_ptr >= 2) &&
-+ (ttusb->muxpack_ptr ==
-+ ttusb->muxpack_len)) {
-+ ttusb_process_muxpack(ttusb,
-+ ttusb->
-+ muxpack,
-+ ttusb->
-+ muxpack_ptr);
-+ ttusb->muxpack_ptr = 0;
-+ /* maximum bytes, until we know the length */
-+ ttusb->muxpack_len = 2;
-+
-+ /**
-+ * no muxpacks left?
-+ * return to search-sync state
-+ */
-+ if (!ttusb->mux_npacks--) {
-+ ttusb->mux_state = 0;
-+ break;
-+ }
-+ }
-+ break;
-+ }
-+ default:
-+ BUG();
-+ break;
-+ }
-+ }
-+}
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+static void ttusb_iso_irq(struct urb *urb)
-+#else
-+static void ttusb_iso_irq(struct urb *urb, struct pt_regs *ptregs)
-+#endif
-+{
-+ struct ttusb *ttusb = urb->context;
-+
-+ if (!ttusb->iso_streaming)
-+ return;
-+
-+#if 0
-+ printk("%s: status %d, errcount == %d, length == %i\n",
-+ __FUNCTION__,
-+ urb->status, urb->error_count, urb->actual_length);
-+#endif
-+
-+ if (!urb->status) {
-+ int i;
-+ for (i = 0; i < urb->number_of_packets; ++i) {
-+ struct usb_iso_packet_descriptor *d;
-+ u8 *data;
-+ int len;
-+ numpkt++;
-+ if ((jiffies - lastj) >= HZ) {
-+#if DEBUG > 2
-+ printk
-+ ("frames/s: %d (ts: %d, stuff %d, sec: %d, invalid: %d, all: %d)\n",
-+ numpkt * HZ / (jiffies - lastj),
-+ numts, numstuff, numsec, numinvalid,
-+ numts + numstuff + numsec +
-+ numinvalid);
-+#endif
-+ numts = numstuff = numsec = numinvalid = 0;
-+ lastj = jiffies;
-+ numpkt = 0;
-+ }
-+ d = &urb->iso_frame_desc[i];
-+ data = urb->transfer_buffer + d->offset;
-+ len = d->actual_length;
-+ d->actual_length = 0;
-+ d->status = 0;
-+ ttusb_process_frame(ttusb, data, len);
-+ }
-+ }
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
-+ usb_submit_urb(urb, GFP_KERNEL);
-+#endif
-+}
-+
-+static void ttusb_free_iso_urbs(struct ttusb *ttusb)
-+{
-+ int i;
-+
-+ for (i = 0; i < ISO_BUF_COUNT; i++)
-+ if (ttusb->iso_urb[i])
-+ usb_free_urb(ttusb->iso_urb[i]);
-+
-+ pci_free_consistent(NULL,
-+ ISO_FRAME_SIZE * FRAMES_PER_ISO_BUF *
-+ ISO_BUF_COUNT, ttusb->iso_buffer,
-+ ttusb->iso_dma_handle);
-+}
-+
-+static int ttusb_alloc_iso_urbs(struct ttusb *ttusb)
-+{
-+ int i;
-+
-+ ttusb->iso_buffer = pci_alloc_consistent(NULL,
-+ ISO_FRAME_SIZE *
-+ FRAMES_PER_ISO_BUF *
-+ ISO_BUF_COUNT,
-+ &ttusb->iso_dma_handle);
-+
-+ memset(ttusb->iso_buffer, 0,
-+ ISO_FRAME_SIZE * FRAMES_PER_ISO_BUF * ISO_BUF_COUNT);
-+
-+ for (i = 0; i < ISO_BUF_COUNT; i++) {
-+ struct urb *urb;
-+
-+ if (!
-+ (urb =
-+ usb_alloc_urb(FRAMES_PER_ISO_BUF, GFP_KERNEL))) {
-+ ttusb_free_iso_urbs(ttusb);
-+ return -ENOMEM;
-+ }
-+
-+ ttusb->iso_urb[i] = urb;
-+ }
-+
-+ return 0;
-+}
-+
-+static void ttusb_stop_iso_xfer(struct ttusb *ttusb)
-+{
-+ int i;
-+
-+ for (i = 0; i < ISO_BUF_COUNT; i++)
-+ usb_unlink_urb(ttusb->iso_urb[i]);
-+
-+ ttusb->iso_streaming = 0;
-+}
-+
-+static int ttusb_start_iso_xfer(struct ttusb *ttusb)
-+{
-+ int i, j, err, buffer_offset = 0;
-+
-+ if (ttusb->iso_streaming) {
-+ printk("%s: iso xfer already running!\n", __FUNCTION__);
-+ return 0;
-+ }
-+
-+ ttusb->insync = 0;
-+ ttusb->mux_state = 0;
-+
-+ for (i = 0; i < ISO_BUF_COUNT; i++) {
-+ int frame_offset = 0;
-+ struct urb *urb = ttusb->iso_urb[i];
-+
-+ urb->dev = ttusb->dev;
-+ urb->context = ttusb;
-+ urb->complete = ttusb_iso_irq;
-+ urb->pipe = ttusb->isoc_in_pipe;
-+ urb->transfer_flags = URB_ISO_ASAP;
-+ urb->number_of_packets = FRAMES_PER_ISO_BUF;
-+ urb->transfer_buffer_length =
-+ ISO_FRAME_SIZE * FRAMES_PER_ISO_BUF;
-+ urb->transfer_buffer = ttusb->iso_buffer + buffer_offset;
-+ buffer_offset += ISO_FRAME_SIZE * FRAMES_PER_ISO_BUF;
-+
-+ for (j = 0; j < FRAMES_PER_ISO_BUF; j++) {
-+ urb->iso_frame_desc[j].offset = frame_offset;
-+ urb->iso_frame_desc[j].length = ISO_FRAME_SIZE;
-+ frame_offset += ISO_FRAME_SIZE;
-+ }
-+ }
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+ for (i = 0; i < ISO_BUF_COUNT; i++) {
-+ int next = (i + 1) % ISO_BUF_COUNT;
-+ ttusb->iso_urb[i]->next = ttusb->iso_urb[next];
-+ }
-+#endif
-+
-+ for (i = 0; i < ISO_BUF_COUNT; i++) {
-+ if ((err = usb_submit_urb(ttusb->iso_urb[i], GFP_KERNEL))) {
-+ ttusb_stop_iso_xfer(ttusb);
-+ printk
-+ ("%s: failed urb submission (%i: err = %i)!\n",
-+ __FUNCTION__, i, err);
-+ return err;
-+ }
-+ }
-+
-+ ttusb->iso_streaming = 1;
-+
-+ return 0;
-+}
-+
-+#ifdef TTUSB_HWSECTIONS
-+static void ttusb_handle_ts_data(struct ttusb_channel *channel, const u8 * data,
-+ int len)
-+{
-+ struct dvb_demux_feed *dvbdmxfeed = channel->dvbdmxfeed;
-+
-+ dvbdmxfeed->cb.ts(data, len, 0, 0, &dvbdmxfeed->feed.ts, 0);
-+}
-+
-+static void ttusb_handle_sec_data(struct ttusb_channel *channel, const u8 * data,
-+ int len)
-+{
-+// struct dvb_demux_feed *dvbdmxfeed = channel->dvbdmxfeed;
-+#error TODO: handle ugly stuff
-+// dvbdmxfeed->cb.sec(data, len, 0, 0, &dvbdmxfeed->feed.sec, 0);
-+}
-+#endif
-+
-+static struct ttusb_channel *ttusb_channel_allocate(struct ttusb *ttusb)
-+{
-+ int i;
-+
-+ if (down_interruptible(&ttusb->sem))
-+ return NULL;
-+
-+ /* lock! */
-+ for (i = 0; i < TTUSB_MAXCHANNEL; ++i) {
-+ if (!ttusb->channel[i].active) {
-+ ttusb->channel[i].active = 1;
-+ up(&ttusb->sem);
-+ return ttusb->channel + i;
-+ }
-+ }
-+
-+ up(&ttusb->sem);
-+
-+ return NULL;
-+}
-+
-+static int ttusb_start_feed(struct dvb_demux_feed *dvbdmxfeed)
-+{
-+ struct ttusb *ttusb = (struct ttusb *) dvbdmxfeed->demux;
-+ struct ttusb_channel *channel;
-+
-+ printk("ttusb_start_feed\n");
-+
-+ switch (dvbdmxfeed->type) {
-+ case DMX_TYPE_TS:
-+ break;
-+ case DMX_TYPE_SEC:
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+
-+ if (dvbdmxfeed->type == DMX_TYPE_TS) {
-+ switch (dvbdmxfeed->pes_type) {
-+ case DMX_TS_PES_VIDEO:
-+ case DMX_TS_PES_AUDIO:
-+ case DMX_TS_PES_TELETEXT:
-+ case DMX_TS_PES_PCR:
-+ case DMX_TS_PES_OTHER:
-+ channel = ttusb_channel_allocate(ttusb);
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+ } else {
-+ channel = ttusb_channel_allocate(ttusb);
-+ }
-+
-+ if (!channel)
-+ return -EBUSY;
-+
-+ dvbdmxfeed->priv = channel;
-+ channel->dvbdmxfeed = dvbdmxfeed;
-+
-+ channel->pid = dvbdmxfeed->pid;
-+
-+#ifdef TTUSB_HWSECTIONS
-+ if (dvbdmxfeed->type == DMX_TYPE_TS) {
-+ channel->type = 1;
-+ } else if (dvbdmxfeed->type == DMX_TYPE_SEC) {
-+ channel->type = 2;
-+#error TODO: allocate filters
-+ }
-+#else
-+ channel->type = 1;
-+#endif
-+
-+ ttusb_set_channel(ttusb, channel->id, channel->type, channel->pid);
-+
-+ if (0 == ttusb->running_feed_count++)
-+ ttusb_start_iso_xfer(ttusb);
-+
-+ return 0;
-+}
-+
-+static int ttusb_stop_feed(struct dvb_demux_feed *dvbdmxfeed)
-+{
-+ struct ttusb_channel *channel =
-+ (struct ttusb_channel *) dvbdmxfeed->priv;
-+ struct ttusb *ttusb = (struct ttusb *) dvbdmxfeed->demux;
-+
-+ ttusb_del_channel(channel->ttusb, channel->id);
-+
-+ if (--ttusb->running_feed_count == 0)
-+ ttusb_stop_iso_xfer(ttusb);
-+
-+ channel->active = 0;
-+
-+ return 0;
-+}
-+
-+static int ttusb_setup_interfaces(struct ttusb *ttusb)
-+{
-+ usb_set_configuration(ttusb->dev, 1);
-+ usb_set_interface(ttusb->dev, 1, 1);
-+
-+ ttusb->bulk_out_pipe = usb_sndbulkpipe(ttusb->dev, 1);
-+ ttusb->bulk_in_pipe = usb_rcvbulkpipe(ttusb->dev, 1);
-+ ttusb->isoc_in_pipe = usb_rcvisocpipe(ttusb->dev, 2);
-+
-+ return 0;
-+}
-+
-+#if 0
-+static u8 stc_firmware[8192];
-+
-+static int stc_open(struct inode *inode, struct file *file)
-+{
-+ struct ttusb *ttusb = file->private_data;
-+ int addr;
-+
-+ for (addr = 0; addr < 8192; addr += 16) {
-+ u8 snd_buf[2] = { addr >> 8, addr & 0xFF };
-+ ttusb_i2c_msg(ttusb, 0x50, snd_buf, 2, stc_firmware + addr,
-+ 16);
-+ }
-+
-+ return 0;
-+}
-+
-+static ssize_t stc_read(struct file *file, char *buf, size_t count,
-+ loff_t * offset)
-+{
-+ int tc = count;
-+
-+ if ((tc + *offset) > 8192)
-+ tc = 8192 - *offset;
-+
-+ if (tc < 0)
-+ return 0;
-+
-+ copy_to_user(buf, stc_firmware + *offset, tc);
-+
-+ *offset += tc;
-+
-+ return tc;
-+}
-+
-+static int stc_release(struct inode *inode, struct file *file)
-+{
-+ return 0;
-+}
-+
-+static struct file_operations stc_fops = {
-+ .owner = THIS_MODULE,
-+ .read = stc_read,
-+ .open = stc_open,
-+ .release = stc_release,
-+};
-+#endif
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+static void *ttusb_probe(struct usb_device *udev, unsigned int ifnum,
-+ const struct usb_device_id *id)
-+{
-+ struct ttusb *ttusb;
-+ int result, channel;
-+
-+ if (ifnum != 0)
-+ return NULL;
-+
-+ dprintk("%s: TTUSB DVB connected\n", __FUNCTION__);
-+
-+ if (!(ttusb = kmalloc(sizeof(struct ttusb), GFP_KERNEL)))
-+ return NULL;
-+
-+#else
-+static int ttusb_probe(struct usb_interface *intf, const struct usb_device_id *id)
-+{
-+ struct usb_device *udev;
-+ struct ttusb *ttusb;
-+ int result, channel;
-+
-+ dprintk("%s: TTUSB DVB connected\n", __FUNCTION__);
-+
-+ udev = interface_to_usbdev(intf);
-+
-+ if (!(ttusb = kmalloc(sizeof(struct ttusb), GFP_KERNEL)))
-+ return -ENOMEM;
-+
-+#endif
-+
-+ memset(ttusb, 0, sizeof(struct ttusb));
-+
-+ for (channel = 0; channel < TTUSB_MAXCHANNEL; ++channel) {
-+ ttusb->channel[channel].id = channel;
-+ ttusb->channel[channel].ttusb = ttusb;
-+ }
-+
-+ ttusb->dev = udev;
-+ ttusb->c = 0;
-+ ttusb->mux_state = 0;
-+ sema_init(&ttusb->sem, 0);
-+ sema_init(&ttusb->semusb, 1);
-+
-+ ttusb_setup_interfaces(ttusb);
-+
-+ ttusb_alloc_iso_urbs(ttusb);
-+ if (ttusb_init_controller(ttusb))
-+ printk("ttusb_init_controller: error\n");
-+
-+ up(&ttusb->sem);
-+
-+ dvb_register_adapter(&ttusb->adapter,
-+ "Technotrend/Hauppauge Nova-USB");
-+
-+ dvb_register_i2c_bus(ttusb_i2c_xfer, ttusb, ttusb->adapter, 0);
-+ dvb_add_frontend_ioctls(ttusb->adapter, ttusb_lnb_ioctl, NULL,
-+ ttusb);
-+
-+ memset(&ttusb->dvb_demux, 0, sizeof(ttusb->dvb_demux));
-+
-+ ttusb->dvb_demux.dmx.capabilities =
-+ DMX_TS_FILTERING | DMX_SECTION_FILTERING;
-+ ttusb->dvb_demux.priv = 0;
-+#ifdef TTUSB_HWSECTIONS
-+ ttusb->dvb_demux.filternum = TTUSB_MAXFILTER;
-+#else
-+ ttusb->dvb_demux.filternum = 32;
-+#endif
-+ ttusb->dvb_demux.feednum = TTUSB_MAXCHANNEL;
-+ ttusb->dvb_demux.start_feed = ttusb_start_feed;
-+ ttusb->dvb_demux.stop_feed = ttusb_stop_feed;
-+ ttusb->dvb_demux.write_to_decoder = 0;
-+
-+ if ((result = dvb_dmx_init(&ttusb->dvb_demux)) < 0) {
-+ printk("ttusb_dvb: dvb_dmx_init failed (errno = %d)\n",
-+ result);
-+ goto err;
-+ }
-+//FIXME dmxdev (nur WAS?)
-+ ttusb->dmxdev.filternum = ttusb->dvb_demux.filternum;
-+ ttusb->dmxdev.demux = &ttusb->dvb_demux.dmx;
-+ ttusb->dmxdev.capabilities = 0;
-+
-+ if ((result = dvb_dmxdev_init(&ttusb->dmxdev, ttusb->adapter)) < 0) {
-+ printk("ttusb_dvb: dvb_dmxdev_init failed (errno = %d)\n",
-+ result);
-+ dvb_dmx_release(&ttusb->dvb_demux);
-+ goto err;
-+ }
-+
-+ if (dvb_net_init
-+ (ttusb->adapter, &ttusb->dvbnet, &ttusb->dvb_demux.dmx)) {
-+ printk("ttusb_dvb: dvb_net_init failed!\n");
-+ }
-+
-+ err:
-+#if 0
-+ ttusb->stc_devfs_handle =
-+ devfs_register(ttusb->adapter->devfs_handle, TTUSB_BUDGET_NAME,
-+ DEVFS_FL_DEFAULT, 0, 192,
-+ S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP
-+ | S_IROTH | S_IWOTH, &stc_fops, ttusb);
-+#endif
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+ return (void *) ttusb;
-+#else
-+ usb_set_intfdata(intf, (void *) ttusb);
-+
-+ return 0;
-+#endif
-+}
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+static void ttusb_disconnect(struct usb_device *udev, void *data)
-+{
-+ struct ttusb *ttusb = data;
-+#else
-+static void ttusb_disconnect(struct usb_interface *intf)
-+{
-+ struct ttusb *ttusb = usb_get_intfdata(intf);
-+
-+ usb_set_intfdata(intf, NULL);
-+#endif
-+
-+ ttusb->disconnecting = 1;
-+
-+ ttusb_stop_iso_xfer(ttusb);
-+
-+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,69))
-+#undef devfs_remove
-+#define devfs_remove(x) devfs_unregister(ttusb->stc_devfs_handle);
-+#endif
-+#if 0
-+ devfs_remove(TTUSB_BUDGET_NAME);
-+#endif
-+ ttusb->dvb_demux.dmx.close(&ttusb->dvb_demux.dmx);
-+ dvb_net_release(&ttusb->dvbnet);
-+ dvb_dmxdev_release(&ttusb->dmxdev);
-+ dvb_dmx_release(&ttusb->dvb_demux);
-+
-+ dvb_unregister_i2c_bus(ttusb_i2c_xfer, ttusb->adapter, 0);
-+ dvb_unregister_adapter(ttusb->adapter);
-+
-+ ttusb_free_iso_urbs(ttusb);
-+
-+ kfree(ttusb);
-+
-+ dprintk("%s: TTUSB DVB disconnected\n", __FUNCTION__);
-+}
-+
-+static struct usb_device_id ttusb_table[] = {
-+ {USB_DEVICE(0xb48, 0x1003)},
-+ {USB_DEVICE(0xb48, 0x1004)}, /* to be confirmed ???? */
-+ {USB_DEVICE(0xb48, 0x1005)}, /* to be confirmed ???? */
-+ {}
-+};
-+
-+MODULE_DEVICE_TABLE(usb, ttusb_table);
-+
-+static struct usb_driver ttusb_driver = {
-+ .name = "Technotrend/Hauppauge USB-Nova",
-+ .probe = ttusb_probe,
-+ .disconnect = ttusb_disconnect,
-+ .id_table = ttusb_table,
-+};
-+
-+static int __init ttusb_init(void)
-+{
-+ int err;
-+
-+ if ((err = usb_register(&ttusb_driver)) < 0) {
-+ printk("%s: usb_register failed! Error number %d",
-+ __FILE__, err);
-+ return -1;
-+ }
-+
-+ return 0;
-+}
-+
-+static void __exit ttusb_exit(void)
-+{
-+ usb_deregister(&ttusb_driver);
-+}
-+
-+module_init(ttusb_init);
-+module_exit(ttusb_exit);
-+
-+MODULE_PARM(debug, "i");
-+MODULE_PARM_DESC(debug, "Debug or not");
-+
-+MODULE_AUTHOR("Holger Waechtler <holger@convergence.de>");
-+MODULE_DESCRIPTION("TTUSB DVB Driver");
-+MODULE_LICENSE("GPL");
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/media/dvb/ttusb-budget/dvb-ttusb-dspbootcode.h 2003-07-19 17:03:50.000000000 -0700
-@@ -0,0 +1,1644 @@
-+
-+#include <asm/types.h>
-+
-+u8 dsp_bootcode [] __initdata = {
-+ 0x08, 0xaa, 0x00, 0x18, 0x00, 0x03, 0x08, 0x00,
-+ 0x00, 0x10, 0x00, 0x00, 0x01, 0x80, 0x18, 0x5f,
-+ 0x00, 0x00, 0x01, 0x80, 0x77, 0x18, 0x2a, 0xeb,
-+ 0x6b, 0xf8, 0x00, 0x18, 0x03, 0xff, 0x68, 0xf8,
-+ 0x00, 0x18, 0xff, 0xfe, 0xf7, 0xb8, 0xf7, 0xbe,
-+ 0xf6, 0xb9, 0xf4, 0xa0, 0xf6, 0xb7, 0xf6, 0xb5,
-+ 0xf6, 0xb6, 0xf0, 0x20, 0x19, 0xdf, 0xf1, 0x00,
-+ 0x00, 0x01, 0xf8, 0x4d, 0x01, 0xab, 0xf6, 0xb8,
-+ 0xf0, 0x20, 0x19, 0xdf, 0xf0, 0x73, 0x01, 0xa5,
-+ 0x7e, 0xf8, 0x00, 0x12, 0xf0, 0x00, 0x00, 0x01,
-+ 0x47, 0xf8, 0x00, 0x11, 0x7e, 0x92, 0x00, 0xf8,
-+ 0x00, 0x11, 0xf0, 0x00, 0x00, 0x01, 0x7e, 0xf8,
-+ 0x00, 0x11, 0xf0, 0x00, 0x00, 0x01, 0x6c, 0x89,
-+ 0x01, 0x9a, 0xf7, 0xb8, 0xee, 0xfc, 0xf0, 0x20,
-+ 0xff, 0xff, 0xf1, 0x00, 0x00, 0x01, 0xf8, 0x4d,
-+ 0x01, 0xbf, 0xf2, 0x73, 0x01, 0xb9, 0x4e, 0x02,
-+ 0xf4, 0x95, 0xf5, 0xe3, 0x56, 0x02, 0x7e, 0x00,
-+ 0x11, 0x00, 0xfa, 0x4c, 0x01, 0xb7, 0x6b, 0x03,
-+ 0x00, 0x01, 0xf6, 0xb8, 0xee, 0x04, 0xf0, 0x74,
-+ 0x0d, 0xa7, 0xf0, 0x74, 0x01, 0xc5, 0x4a, 0x11,
-+ 0x4a, 0x16, 0x72, 0x11, 0x2a, 0xe6, 0x10, 0xf8,
-+ 0x00, 0x11, 0xfa, 0x45, 0x01, 0xdb, 0xf4, 0x95,
-+ 0xee, 0xff, 0x48, 0x11, 0xf0, 0x00, 0x2a, 0xc6,
-+ 0x88, 0x16, 0xf4, 0x95, 0xf4, 0x95, 0x10, 0xee,
-+ 0xff, 0xff, 0xf4, 0xe3, 0x6c, 0xe9, 0xff, 0xff,
-+ 0x01, 0xd5, 0x10, 0xf8, 0x2a, 0xe7, 0xf8, 0x45,
-+ 0x01, 0xe2, 0x10, 0xf8, 0x2a, 0xe7, 0xf4, 0xe3,
-+ 0xf0, 0x74, 0x01, 0xff, 0xee, 0x01, 0x8a, 0x16,
-+ 0x8a, 0x11, 0xfc, 0x00, 0xf7, 0xb8, 0xe9, 0x20,
-+ 0x4a, 0x11, 0x09, 0xf8, 0x2a, 0xe6, 0xf8, 0x4e,
-+ 0x01, 0xf3, 0xf2, 0x73, 0x01, 0xfd, 0xf4, 0x95,
-+ 0xe8, 0x01, 0x72, 0x11, 0x2a, 0xe6, 0x49, 0x11,
-+ 0x80, 0xe1, 0x2a, 0xc6, 0xf3, 0x00, 0x00, 0x01,
-+ 0xe8, 0x00, 0x81, 0xf8, 0x2a, 0xe6, 0x8a, 0x11,
-+ 0xfc, 0x00, 0xf4, 0x95, 0xf0, 0x73, 0x02, 0x00,
-+ 0x10, 0xf8, 0x2a, 0x0f, 0xfc, 0x00, 0x4a, 0x11,
-+ 0xf0, 0x74, 0x02, 0x02, 0x80, 0xf8, 0x2a, 0x10,
-+ 0x73, 0x08, 0x00, 0x09, 0x40, 0xf8, 0x2a, 0x15,
-+ 0x82, 0xf8, 0x00, 0x11, 0xf4, 0x95, 0x77, 0x10,
-+ 0x03, 0xe8, 0xf5, 0xa9, 0xf8, 0x30, 0x02, 0x21,
-+ 0x71, 0xf8, 0x2a, 0x10, 0x2a, 0x15, 0x56, 0xf8,
-+ 0x2a, 0x0c, 0xf0, 0xe3, 0x4e, 0xf8, 0x2a, 0x16,
-+ 0xe8, 0x00, 0x4e, 0xf8, 0x2a, 0x0c, 0x8a, 0x11,
-+ 0xfc, 0x00, 0x4a, 0x06, 0x4a, 0x07, 0x4a, 0x1d,
-+ 0x68, 0xf8, 0x00, 0x07, 0x7d, 0x3f, 0x69, 0xf8,
-+ 0x00, 0x07, 0x40, 0x00, 0x68, 0xf8, 0x00, 0x1d,
-+ 0xff, 0xfc, 0x6b, 0xf8, 0x2a, 0x0f, 0x00, 0x01,
-+ 0x8a, 0x1d, 0x8a, 0x07, 0x8a, 0x06, 0xf4, 0xeb,
-+ 0xee, 0xfd, 0x76, 0xf8, 0x2a, 0x0f, 0x00, 0x00,
-+ 0x76, 0x00, 0x00, 0x00, 0xfb, 0x80, 0x19, 0x4c,
-+ 0xf4, 0x95, 0xe8, 0x00, 0x80, 0xf8, 0x2a, 0x11,
-+ 0xf9, 0x80, 0x19, 0x07, 0x80, 0xf8, 0x2a, 0x0e,
-+ 0xf9, 0x80, 0x16, 0x66, 0x76, 0x00, 0x2a, 0x12,
-+ 0x10, 0xf8, 0x2a, 0x11, 0xf9, 0x80, 0x18, 0xe3,
-+ 0x10, 0xf8, 0x2a, 0x0e, 0xf9, 0x80, 0x16, 0x66,
-+ 0x10, 0xf8, 0x2a, 0x0e, 0xf9, 0x80, 0x16, 0x87,
-+ 0xee, 0x03, 0xfc, 0x00, 0x4a, 0x11, 0xf6, 0xb8,
-+ 0xf4, 0x95, 0xf0, 0x20, 0x80, 0x00, 0x11, 0xf8,
-+ 0x2a, 0x5a, 0xf8, 0x4d, 0x02, 0x93, 0x11, 0xf8,
-+ 0x2a, 0x9f, 0xf8, 0x4c, 0x02, 0x7c, 0x77, 0x12,
-+ 0x2a, 0x39, 0x49, 0x12, 0x01, 0xf8, 0x2a, 0x9f,
-+ 0x89, 0x11, 0xf4, 0x95, 0xf4, 0x95, 0x71, 0x81,
-+ 0x00, 0x11, 0x6c, 0xe1, 0xff, 0xab, 0x02, 0x93,
-+ 0x6b, 0xf8, 0x2a, 0x9f, 0x00, 0x01, 0xe9, 0x05,
-+ 0x01, 0xe2, 0x00, 0x03, 0x81, 0xf8, 0x2a, 0xa0,
-+ 0xf0, 0x73, 0x02, 0x95, 0x72, 0x11, 0x2a, 0x9f,
-+ 0xf4, 0x95, 0x10, 0xe1, 0x2a, 0x39, 0x6b, 0xf8,
-+ 0x2a, 0x9f, 0x00, 0x01, 0x11, 0xf8, 0x2a, 0x9f,
-+ 0x09, 0xf8, 0x2a, 0xa0, 0xf8, 0x4c, 0x02, 0x93,
-+ 0x76, 0xf8, 0x2a, 0x5a, 0x00, 0x00, 0x76, 0xf8,
-+ 0x2a, 0x9f, 0x00, 0x00, 0x76, 0xf8, 0x2a, 0xa0,
-+ 0x00, 0x00, 0x88, 0x11, 0xf4, 0x95, 0x48, 0x11,
-+ 0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11, 0xee, 0xfe,
-+ 0x10, 0xf8, 0x2a, 0x5a, 0xf8, 0x44, 0x02, 0xb2,
-+ 0x76, 0xf8, 0x2a, 0x5a, 0x00, 0x01, 0xf0, 0x74,
-+ 0x02, 0x58, 0x88, 0x11, 0xf4, 0x95, 0x77, 0x10,
-+ 0x80, 0x00, 0xf4, 0xa9, 0xf8, 0x30, 0x02, 0xb2,
-+ 0x48, 0x11, 0xf0, 0x30, 0x00, 0xff, 0x80, 0x00,
-+ 0x10, 0xf8, 0x2a, 0x5b, 0xf9, 0x80, 0x18, 0xd6,
-+ 0xee, 0x02, 0x8a, 0x11, 0xfc, 0x00, 0xf4, 0x95,
-+ 0x4a, 0x08, 0x4a, 0x09, 0x4a, 0x0a, 0x4a, 0x0b,
-+ 0x4a, 0x0c, 0x4a, 0x0d, 0x4a, 0x10, 0x4a, 0x11,
-+ 0x4a, 0x12, 0x4a, 0x13, 0x4a, 0x14, 0x4a, 0x15,
-+ 0x4a, 0x16, 0x4a, 0x17, 0x4a, 0x17, 0x4a, 0x19,
-+ 0x4a, 0x0e, 0x4a, 0x06, 0x4a, 0x07, 0x4a, 0x1a,
-+ 0x4a, 0x1d, 0x4a, 0x1b, 0x4a, 0x1c, 0x68, 0xf8,
-+ 0x00, 0x07, 0x7d, 0x3f, 0x69, 0xf8, 0x00, 0x07,
-+ 0x40, 0x00, 0x68, 0xf8, 0x00, 0x1d, 0xff, 0xfc,
-+ 0x48, 0x18, 0x68, 0xf8, 0x00, 0x18, 0xff, 0xfe,
-+ 0xf4, 0x95, 0xf4, 0x95, 0x4a, 0x08, 0xee, 0xfd,
-+ 0xf0, 0x74, 0x02, 0x58, 0x88, 0x11, 0xf4, 0x95,
-+ 0x77, 0x10, 0x80, 0x00, 0xf4, 0xa9, 0xf8, 0x30,
-+ 0x02, 0xef, 0x48, 0x11, 0xf0, 0x30, 0x00, 0xff,
-+ 0x80, 0x00, 0x10, 0xf8, 0x2a, 0x5b, 0xf9, 0x80,
-+ 0x18, 0xd6, 0xee, 0x03, 0x8a, 0x18, 0xf4, 0x95,
-+ 0x8a, 0x1c, 0x8a, 0x1b, 0x8a, 0x1d, 0x8a, 0x1a,
-+ 0x8a, 0x07, 0x8a, 0x06, 0x8a, 0x0e, 0x8a, 0x19,
-+ 0x8a, 0x17, 0x8a, 0x17, 0x8a, 0x16, 0x8a, 0x15,
-+ 0x8a, 0x14, 0x8a, 0x13, 0x8a, 0x12, 0x8a, 0x11,
-+ 0x8a, 0x10, 0x8a, 0x0d, 0x8a, 0x0c, 0x8a, 0x0b,
-+ 0x8a, 0x0a, 0x8a, 0x09, 0x8a, 0x08, 0xf4, 0xeb,
-+ 0x4a, 0x11, 0x77, 0x11, 0x2a, 0x39, 0x76, 0x81,
-+ 0x00, 0x55, 0x77, 0x12, 0x2a, 0x18, 0x10, 0xe2,
-+ 0x00, 0x01, 0x80, 0xe1, 0x00, 0x01, 0x10, 0xe2,
-+ 0x00, 0x02, 0x80, 0xe1, 0x00, 0x02, 0x76, 0xe1,
-+ 0x00, 0x03, 0x00, 0x00, 0x76, 0xe1, 0x00, 0x04,
-+ 0x00, 0xaa, 0xf0, 0x74, 0x02, 0x98, 0x8a, 0x11,
-+ 0xfc, 0x00, 0x4a, 0x11, 0x88, 0x11, 0xf4, 0x95,
-+ 0xf4, 0x95, 0x10, 0x81, 0x6f, 0xf8, 0x2a, 0x9e,
-+ 0x0c, 0x88, 0xe8, 0xff, 0x18, 0xe1, 0x00, 0x01,
-+ 0x1a, 0xf8, 0x2a, 0x9e, 0xf0, 0x30, 0x1f, 0xff,
-+ 0x80, 0xf8, 0x2a, 0x9e, 0x8a, 0x11, 0xfc, 0x00,
-+ 0x4a, 0x11, 0x77, 0x11, 0x2a, 0x39, 0x76, 0x81,
-+ 0x00, 0x55, 0x77, 0x12, 0x2a, 0x18, 0x11, 0xe2,
-+ 0x00, 0x01, 0x81, 0xe1, 0x00, 0x01, 0x11, 0xe2,
-+ 0x00, 0x02, 0x81, 0xe1, 0x00, 0x02, 0x76, 0xe1,
-+ 0x00, 0x03, 0x00, 0x02, 0x48, 0x08, 0x6f, 0xe1,
-+ 0x00, 0x04, 0x0c, 0x98, 0xf0, 0x30, 0x00, 0xff,
-+ 0x80, 0xe1, 0x00, 0x05, 0x76, 0xe1, 0x00, 0x06,
-+ 0x00, 0xaa, 0xf0, 0x74, 0x02, 0x98, 0x8a, 0x11,
-+ 0xfc, 0x00, 0x4a, 0x11, 0x77, 0x11, 0x2a, 0x39,
-+ 0x76, 0x81, 0x00, 0x55, 0x77, 0x12, 0x2a, 0x18,
-+ 0x10, 0xe2, 0x00, 0x01, 0x80, 0xe1, 0x00, 0x01,
-+ 0x10, 0xe2, 0x00, 0x02, 0x80, 0xe1, 0x00, 0x02,
-+ 0x76, 0xe1, 0x00, 0x03, 0x00, 0x04, 0x48, 0x11,
-+ 0xf0, 0x00, 0x00, 0x04, 0x88, 0x12, 0xf4, 0x95,
-+ 0x77, 0x13, 0x2a, 0x76, 0xe9, 0x00, 0xe5, 0x98,
-+ 0xf3, 0x00, 0x00, 0x01, 0xf6, 0xb8, 0x48, 0x0b,
-+ 0x08, 0xf8, 0x2a, 0x3c, 0xf8, 0x43, 0x03, 0x71,
-+ 0x76, 0x82, 0x00, 0xaa, 0xf0, 0x74, 0x02, 0x98,
-+ 0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11, 0xee, 0xf0,
-+ 0x88, 0x11, 0xf4, 0x95, 0xf4, 0x95, 0x71, 0x81,
-+ 0x00, 0x14, 0x71, 0xe1, 0x00, 0x01, 0x00, 0x15,
-+ 0x49, 0x11, 0xf3, 0x00, 0x00, 0x02, 0x89, 0x11,
-+ 0xe7, 0x82, 0x6d, 0xea, 0x00, 0x04, 0xe7, 0x83,
-+ 0x6d, 0xeb, 0x00, 0x0a, 0x77, 0x1a, 0x00, 0x05,
-+ 0xf0, 0x72, 0x03, 0xaa, 0x11, 0x81, 0xf2, 0xe8,
-+ 0x80, 0x82, 0xe9, 0xff, 0x19, 0xe1, 0x00, 0x01,
-+ 0xf1, 0xa0, 0x81, 0x92, 0x11, 0xe1, 0x00, 0x0c,
-+ 0xf2, 0xe8, 0x80, 0x83, 0xe9, 0xff, 0x19, 0xe1,
-+ 0x00, 0x0d, 0xf1, 0xa0, 0x81, 0x93, 0x6d, 0xe9,
-+ 0x00, 0x02, 0x48, 0x18, 0x49, 0x18, 0x70, 0x00,
-+ 0x00, 0x15, 0xf0, 0x00, 0x00, 0x04, 0xf3, 0x00,
-+ 0x00, 0x0a, 0x80, 0x01, 0x81, 0x02, 0xf2, 0x74,
-+ 0x0e, 0x54, 0xf4, 0x95, 0x48, 0x14, 0xee, 0x10,
-+ 0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11, 0xf0, 0x74,
-+ 0x0c, 0x5e, 0x80, 0xf8, 0x2a, 0x5c, 0x77, 0x12,
-+ 0x2a, 0x39, 0x76, 0x82, 0x00, 0x55, 0x77, 0x11,
-+ 0x2a, 0x18, 0x10, 0xe1, 0x00, 0x01, 0x80, 0xe2,
-+ 0x00, 0x01, 0x10, 0xe1, 0x00, 0x02, 0x80, 0xe2,
-+ 0x00, 0x02, 0x76, 0xe2, 0x00, 0x03, 0x00, 0x1c,
-+ 0xf6, 0xb8, 0x56, 0xf8, 0x2a, 0x16, 0xf0, 0xf0,
-+ 0xf0, 0xf8, 0x80, 0xe2, 0x00, 0x07, 0x56, 0xf8,
-+ 0x2a, 0x16, 0xf1, 0xf0, 0xe8, 0xff, 0xf2, 0x80,
-+ 0x80, 0xe2, 0x00, 0x06, 0x56, 0xf8, 0x2a, 0x16,
-+ 0xf1, 0xf8, 0xe8, 0xff, 0xf2, 0x80, 0x80, 0xe2,
-+ 0x00, 0x05, 0x57, 0xf8, 0x2a, 0x16, 0xe8, 0xff,
-+ 0xf2, 0x80, 0x80, 0xe2, 0x00, 0x04, 0x56, 0xf8,
-+ 0x27, 0x6c, 0xf0, 0xf0, 0xf0, 0xf8, 0x80, 0xe2,
-+ 0x00, 0x0b, 0x56, 0xf8, 0x27, 0x6c, 0xf1, 0xf0,
-+ 0xe8, 0xff, 0xf2, 0x80, 0x80, 0xe2, 0x00, 0x0a,
-+ 0x56, 0xf8, 0x27, 0x6c, 0xf1, 0xf8, 0xe8, 0xff,
-+ 0xf2, 0x80, 0x80, 0xe2, 0x00, 0x09, 0xe8, 0xff,
-+ 0x57, 0xf8, 0x27, 0x6c, 0xf2, 0x80, 0x80, 0xe2,
-+ 0x00, 0x08, 0x56, 0xf8, 0x27, 0x6a, 0xf0, 0xf0,
-+ 0xf0, 0xf8, 0x80, 0xe2, 0x00, 0x0f, 0x56, 0xf8,
-+ 0x27, 0x6a, 0xf1, 0xf0, 0xe8, 0xff, 0xf2, 0x80,
-+ 0x80, 0xe2, 0x00, 0x0e, 0x56, 0xf8, 0x27, 0x6a,
-+ 0xf1, 0xf8, 0xe8, 0xff, 0xf2, 0x80, 0x80, 0xe2,
-+ 0x00, 0x0d, 0x57, 0xf8, 0x27, 0x6a, 0xe8, 0xff,
-+ 0xf2, 0x80, 0x80, 0xe2, 0x00, 0x0c, 0x76, 0xe2,
-+ 0x00, 0x13, 0x00, 0x00, 0x76, 0xe2, 0x00, 0x12,
-+ 0x00, 0x00, 0x6f, 0xf8, 0x2a, 0x5c, 0x0c, 0x58,
-+ 0x80, 0xe2, 0x00, 0x11, 0xe8, 0xff, 0x18, 0xf8,
-+ 0x2a, 0x5c, 0x80, 0xe2, 0x00, 0x10, 0x76, 0xe2,
-+ 0x00, 0x17, 0x00, 0x00, 0x76, 0xe2, 0x00, 0x16,
-+ 0x00, 0x00, 0x6f, 0xf8, 0x2a, 0x9e, 0x0c, 0x58,
-+ 0x80, 0xe2, 0x00, 0x15, 0xe8, 0xff, 0x18, 0xf8,
-+ 0x2a, 0x9e, 0x80, 0xe2, 0x00, 0x14, 0x76, 0xe2,
-+ 0x00, 0x1b, 0x00, 0x00, 0x76, 0xe2, 0x00, 0x1a,
-+ 0x00, 0x00, 0x76, 0xe2, 0x00, 0x19, 0x00, 0x00,
-+ 0x70, 0xe2, 0x00, 0x18, 0x27, 0x6e, 0x76, 0xe2,
-+ 0x00, 0x1f, 0x00, 0x00, 0x76, 0xe2, 0x00, 0x1e,
-+ 0x00, 0x00, 0x76, 0xe2, 0x00, 0x1d, 0x00, 0x00,
-+ 0x76, 0xe2, 0x00, 0x1c, 0x00, 0x00, 0x76, 0xe2,
-+ 0x00, 0x20, 0x00, 0xaa, 0xf0, 0x74, 0x02, 0x98,
-+ 0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11, 0xee, 0xfe,
-+ 0x10, 0xf8, 0x2a, 0x38, 0xf8, 0x45, 0x04, 0xed,
-+ 0x77, 0x12, 0x2a, 0x18, 0x10, 0xe2, 0x00, 0x02,
-+ 0x88, 0x11, 0xf4, 0x95, 0x77, 0x10, 0x00, 0x08,
-+ 0x6d, 0xe9, 0xff, 0xdf, 0xf6, 0xa9, 0xf8, 0x20,
-+ 0x04, 0x75, 0xf0, 0x73, 0x04, 0x7d, 0xf0, 0x10,
-+ 0x00, 0x21, 0xf0, 0x00, 0x1a, 0x83, 0x48, 0x08,
-+ 0x7e, 0xf8, 0x00, 0x08, 0xf4, 0xe2, 0xf0, 0x74,
-+ 0x03, 0x0a, 0xf0, 0x73, 0x04, 0xea, 0x48, 0x12,
-+ 0xf2, 0x74, 0x03, 0x23, 0xf0, 0x00, 0x00, 0x04,
-+ 0xf2, 0x74, 0x03, 0x36, 0xf4, 0x95, 0xe8, 0x00,
-+ 0xf0, 0x73, 0x04, 0xea, 0x77, 0x11, 0x2a, 0x18,
-+ 0xe8, 0xff, 0x6f, 0xe1, 0x00, 0x04, 0x0d, 0x48,
-+ 0x18, 0xe1, 0x00, 0x05, 0xf2, 0x74, 0x09, 0x69,
-+ 0xf4, 0x95, 0xf2, 0xa0, 0xf0, 0x74, 0x03, 0x36,
-+ 0xf0, 0x73, 0x04, 0xea, 0x77, 0x11, 0x2a, 0x18,
-+ 0xe8, 0xff, 0x6f, 0xe1, 0x00, 0x04, 0x0d, 0x48,
-+ 0x18, 0xe1, 0x00, 0x05, 0xf2, 0x74, 0x09, 0x41,
-+ 0xf4, 0x95, 0xf2, 0xa0, 0xf0, 0x74, 0x03, 0x36,
-+ 0xf0, 0x73, 0x04, 0xea, 0xf0, 0x74, 0x03, 0x57,
-+ 0xf0, 0x73, 0x04, 0xea, 0x10, 0xf8, 0x2a, 0x1c,
-+ 0xf0, 0x74, 0x12, 0xa4, 0xf2, 0x74, 0x03, 0x36,
-+ 0xf4, 0x95, 0xe8, 0x00, 0xf0, 0x73, 0x04, 0xea,
-+ 0x48, 0x12, 0xf2, 0x74, 0x03, 0x80, 0xf0, 0x00,
-+ 0x00, 0x04, 0xf2, 0x74, 0x03, 0x36, 0xf4, 0x95,
-+ 0xe8, 0x00, 0xf0, 0x73, 0x04, 0xea, 0x10, 0xf8,
-+ 0x2a, 0x1c, 0xf0, 0x74, 0x12, 0xc5, 0xf2, 0x74,
-+ 0x03, 0x36, 0xf4, 0x95, 0xe8, 0x00, 0xf0, 0x73,
-+ 0x04, 0xea, 0x77, 0x11, 0x2a, 0x18, 0xe8, 0xff,
-+ 0x6f, 0xe1, 0x00, 0x06, 0x0d, 0x48, 0x18, 0xe1,
-+ 0x00, 0x07, 0x71, 0xe1, 0x00, 0x05, 0x00, 0x12,
-+ 0xf2, 0xa0, 0x70, 0x00, 0x00, 0x12, 0x80, 0x01,
-+ 0x10, 0xe1, 0x00, 0x04, 0xf0, 0x74, 0x0e, 0x7a,
-+ 0xf2, 0x74, 0x03, 0x36, 0xf4, 0x95, 0xe8, 0x00,
-+ 0xf0, 0x73, 0x04, 0xea, 0xf0, 0x74, 0x03, 0xbc,
-+ 0x76, 0xf8, 0x2a, 0x38, 0x00, 0x00, 0xee, 0x02,
-+ 0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11, 0x77, 0x11,
-+ 0x2a, 0x39, 0x76, 0x81, 0x00, 0x55, 0x77, 0x12,
-+ 0x2a, 0x18, 0x10, 0xe2, 0x00, 0x01, 0x80, 0xe1,
-+ 0x00, 0x01, 0x10, 0xe2, 0x00, 0x02, 0x80, 0xe1,
-+ 0x00, 0x02, 0x76, 0xe1, 0x00, 0x03, 0x00, 0x09,
-+ 0x48, 0x11, 0xf0, 0x00, 0x00, 0x04, 0x88, 0x12,
-+ 0xf4, 0x95, 0x77, 0x13, 0x2a, 0x86, 0xe9, 0x00,
-+ 0xe5, 0x98, 0xf3, 0x00, 0x00, 0x01, 0xf6, 0xb8,
-+ 0x48, 0x0b, 0x08, 0xf8, 0x2a, 0x3c, 0xf8, 0x43,
-+ 0x05, 0x0a, 0x76, 0x82, 0x00, 0xaa, 0xf0, 0x74,
-+ 0x02, 0x98, 0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11,
-+ 0x77, 0x11, 0x2a, 0x39, 0x76, 0x81, 0x00, 0x55,
-+ 0x77, 0x13, 0x2a, 0x18, 0x10, 0xe3, 0x00, 0x01,
-+ 0x80, 0xe1, 0x00, 0x01, 0x10, 0xe3, 0x00, 0x02,
-+ 0x80, 0xe1, 0x00, 0x02, 0x13, 0xe3, 0x00, 0x03,
-+ 0x81, 0xe1, 0x00, 0x03, 0x48, 0x11, 0x77, 0x11,
-+ 0x00, 0x00, 0xf8, 0x4d, 0x05, 0x44, 0xf0, 0x00,
-+ 0x00, 0x04, 0x88, 0x12, 0x48, 0x13, 0xf0, 0x00,
-+ 0x00, 0x04, 0x88, 0x13, 0xf4, 0x95, 0xf4, 0x95,
-+ 0xe5, 0x98, 0x6d, 0x91, 0xf6, 0xb8, 0x48, 0x11,
-+ 0x08, 0xf8, 0x2a, 0x3c, 0xf8, 0x43, 0x05, 0x3a,
-+ 0xf0, 0x20, 0x2a, 0x39, 0x49, 0x11, 0xf5, 0x00,
-+ 0x89, 0x11, 0xf4, 0x95, 0xf4, 0x95, 0x76, 0xe1,
-+ 0x00, 0x04, 0x00, 0xaa, 0xf0, 0x74, 0x02, 0x98,
-+ 0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11, 0x77, 0x11,
-+ 0x2a, 0x39, 0x76, 0x81, 0x00, 0x55, 0x77, 0x12,
-+ 0x2a, 0x18, 0x10, 0xe2, 0x00, 0x01, 0x80, 0xe1,
-+ 0x00, 0x01, 0x10, 0xe2, 0x00, 0x02, 0x80, 0xe1,
-+ 0x00, 0x02, 0x76, 0xe1, 0x00, 0x03, 0x00, 0x0c,
-+ 0x48, 0x11, 0xf0, 0x00, 0x00, 0x04, 0x88, 0x12,
-+ 0xf4, 0x95, 0x77, 0x13, 0x2a, 0x7a, 0xe9, 0x00,
-+ 0xe5, 0x98, 0xf3, 0x00, 0x00, 0x01, 0xf6, 0xb8,
-+ 0x48, 0x0b, 0x08, 0xf8, 0x2a, 0x3c, 0xf8, 0x43,
-+ 0x05, 0x6a, 0x76, 0x82, 0x00, 0xaa, 0xf0, 0x74,
-+ 0x02, 0x98, 0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11,
-+ 0x77, 0x11, 0x2a, 0x39, 0x76, 0x81, 0x00, 0x55,
-+ 0x77, 0x12, 0x2a, 0x18, 0x10, 0xe2, 0x00, 0x01,
-+ 0x80, 0xe1, 0x00, 0x01, 0x10, 0xe2, 0x00, 0x02,
-+ 0x80, 0xe1, 0x00, 0x02, 0x76, 0xe1, 0x00, 0x03,
-+ 0x00, 0x19, 0x48, 0x11, 0xf0, 0x00, 0x00, 0x04,
-+ 0x88, 0x12, 0xf4, 0x95, 0x77, 0x13, 0x2a, 0x5d,
-+ 0xe9, 0x00, 0xe5, 0x98, 0xf3, 0x00, 0x00, 0x01,
-+ 0xf6, 0xb8, 0x48, 0x0b, 0x08, 0xf8, 0x2a, 0x3c,
-+ 0xf8, 0x43, 0x05, 0x93, 0x76, 0x82, 0x00, 0xaa,
-+ 0xf0, 0x74, 0x02, 0x98, 0x8a, 0x11, 0xfc, 0x00,
-+ 0x4a, 0x11, 0x88, 0x11, 0x10, 0xf8, 0x2a, 0x38,
-+ 0xf8, 0x44, 0x05, 0xe3, 0x10, 0xf8, 0x2a, 0xa1,
-+ 0xf8, 0x44, 0x05, 0xba, 0x6c, 0xe1, 0xff, 0x56,
-+ 0x05, 0xe3, 0x72, 0x12, 0x2a, 0xa1, 0xf4, 0x95,
-+ 0x70, 0xe2, 0x2a, 0x18, 0x00, 0x11, 0x6b, 0xf8,
-+ 0x2a, 0xa1, 0x00, 0x01, 0xf0, 0x73, 0x05, 0xe3,
-+ 0x72, 0x12, 0x2a, 0xa1, 0xf4, 0x95, 0x70, 0xe2,
-+ 0x2a, 0x18, 0x00, 0x11, 0x10, 0xf8, 0x2a, 0xa1,
-+ 0xf0, 0x00, 0x00, 0x01, 0x88, 0x12, 0xf4, 0x95,
-+ 0xf4, 0x95, 0x6e, 0xe2, 0xff, 0xfc, 0x05, 0xd1,
-+ 0x73, 0x12, 0x2a, 0xa1, 0x48, 0x11, 0xf0, 0x00,
-+ 0x00, 0x05, 0x80, 0xf8, 0x2a, 0xa2, 0x10, 0xf8,
-+ 0x2a, 0xa1, 0x08, 0xf8, 0x2a, 0xa2, 0xf8, 0x44,
-+ 0x05, 0xe3, 0x6c, 0xe1, 0xff, 0xab, 0x05, 0xdd,
-+ 0x76, 0xf8, 0x2a, 0x38, 0x00, 0x01, 0x76, 0xf8,
-+ 0x2a, 0xa1, 0x00, 0x00, 0x76, 0xf8, 0x2a, 0xa2,
-+ 0x00, 0x00, 0x8a, 0x11, 0xfc, 0x00, 0xf4, 0x95,
-+ 0x4a, 0x08, 0x4a, 0x09, 0x4a, 0x0a, 0x4a, 0x0b,
-+ 0x4a, 0x0c, 0x4a, 0x0d, 0x4a, 0x10, 0x4a, 0x11,
-+ 0x4a, 0x12, 0x4a, 0x13, 0x4a, 0x14, 0x4a, 0x15,
-+ 0x4a, 0x16, 0x4a, 0x17, 0x4a, 0x17, 0x4a, 0x19,
-+ 0x4a, 0x0e, 0x4a, 0x06, 0x4a, 0x07, 0x4a, 0x1a,
-+ 0x4a, 0x1d, 0x4a, 0x1b, 0x4a, 0x1c, 0x68, 0xf8,
-+ 0x00, 0x07, 0x7d, 0x3f, 0x69, 0xf8, 0x00, 0x07,
-+ 0x40, 0x00, 0x68, 0xf8, 0x00, 0x1d, 0xff, 0xfc,
-+ 0x48, 0x18, 0x68, 0xf8, 0x00, 0x18, 0xff, 0xfe,
-+ 0xf4, 0x95, 0xf4, 0x95, 0x4a, 0x08, 0xee, 0xff,
-+ 0x10, 0xf8, 0x2a, 0x5b, 0xf9, 0x80, 0x18, 0x04,
-+ 0xf0, 0x74, 0x05, 0xa2, 0xee, 0x01, 0x8a, 0x18,
-+ 0xf4, 0x95, 0x8a, 0x1c, 0x8a, 0x1b, 0x8a, 0x1d,
-+ 0x8a, 0x1a, 0x8a, 0x07, 0x8a, 0x06, 0x8a, 0x0e,
-+ 0x8a, 0x19, 0x8a, 0x17, 0x8a, 0x17, 0x8a, 0x16,
-+ 0x8a, 0x15, 0x8a, 0x14, 0x8a, 0x13, 0x8a, 0x12,
-+ 0x8a, 0x11, 0x8a, 0x10, 0x8a, 0x0d, 0x8a, 0x0c,
-+ 0x8a, 0x0b, 0x8a, 0x0a, 0x8a, 0x09, 0x8a, 0x08,
-+ 0xf4, 0xeb, 0xee, 0xfd, 0x76, 0xf8, 0x2a, 0x38,
-+ 0x00, 0x00, 0x76, 0xf8, 0x2a, 0x5a, 0x00, 0x00,
-+ 0xe8, 0x01, 0x4e, 0x00, 0xfb, 0x80, 0x17, 0xd6,
-+ 0xf4, 0x95, 0xe8, 0x01, 0x80, 0xf8, 0x2a, 0x5b,
-+ 0x76, 0x00, 0x2a, 0x8f, 0xf9, 0x80, 0x16, 0xaa,
-+ 0x10, 0xf8, 0x2a, 0x5b, 0xf9, 0x80, 0x17, 0x5c,
-+ 0x10, 0xf8, 0x2a, 0x5b, 0xf9, 0x80, 0x17, 0x6f,
-+ 0xfb, 0x80, 0x16, 0x66, 0xf4, 0x95, 0xe8, 0x1a,
-+ 0xfb, 0x80, 0x16, 0x87, 0xf4, 0x95, 0xe8, 0x1a,
-+ 0xfb, 0x80, 0x16, 0x66, 0xf4, 0x95, 0xe8, 0x1b,
-+ 0xfb, 0x80, 0x16, 0x87, 0xf4, 0x95, 0xe8, 0x1b,
-+ 0xee, 0x03, 0xfc, 0x00, 0x4a, 0x11, 0xf4, 0x95,
-+ 0x13, 0x02, 0x88, 0x11, 0xe8, 0x00, 0xf8, 0x4d,
-+ 0x06, 0x6a, 0xf3, 0x10, 0x00, 0x01, 0x89, 0x1a,
-+ 0xf4, 0x95, 0xf0, 0x72, 0x06, 0x69, 0x1c, 0x91,
-+ 0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11, 0x88, 0x11,
-+ 0x12, 0x03, 0x11, 0x02, 0xf8, 0x45, 0x06, 0x79,
-+ 0xf0, 0x10, 0x00, 0x01, 0x88, 0x1a, 0xf4, 0x95,
-+ 0xf0, 0x72, 0x06, 0x78, 0x81, 0x91, 0x8a, 0x11,
-+ 0xfc, 0x00, 0x4a, 0x11, 0xf4, 0x95, 0x71, 0x02,
-+ 0x00, 0x11, 0x11, 0x03, 0x61, 0xf8, 0x00, 0x11,
-+ 0x00, 0x01, 0xf8, 0x30, 0x06, 0x91, 0xf6, 0xb8,
-+ 0x6f, 0xf8, 0x00, 0x11, 0x0c, 0x1f, 0x88, 0x11,
-+ 0xf3, 0xe8, 0xe8, 0xff, 0x18, 0x81, 0xf1, 0xa0,
-+ 0x81, 0x81, 0xf0, 0x73, 0x06, 0x9d, 0xf6, 0xb8,
-+ 0x6f, 0xf8, 0x00, 0x11, 0x0c, 0x1f, 0x88, 0x11,
-+ 0xf3, 0x30, 0x00, 0xff, 0xf0, 0x20, 0xff, 0x00,
-+ 0x18, 0x81, 0xf1, 0xa0, 0x81, 0x81, 0x8a, 0x11,
-+ 0xfc, 0x00, 0x4a, 0x11, 0xf4, 0x95, 0x11, 0x02,
-+ 0x61, 0xf8, 0x00, 0x0b, 0x00, 0x01, 0xf8, 0x20,
-+ 0x06, 0xb1, 0x49, 0x0b, 0xf6, 0x1f, 0x88, 0x11,
-+ 0xf4, 0x95, 0xf4, 0x95, 0x10, 0x81, 0xf2, 0x73,
-+ 0x06, 0xb8, 0xf0, 0x30, 0x00, 0xff, 0x49, 0x0b,
-+ 0xf6, 0x1f, 0x88, 0x11, 0xf4, 0x95, 0xf4, 0x95,
-+ 0x12, 0x81, 0xf4, 0x78, 0x8a, 0x11, 0xfc, 0x00,
-+ 0x4a, 0x11, 0xf4, 0x95, 0x71, 0x02, 0x00, 0x12,
-+ 0x13, 0x03, 0x88, 0x11, 0xe8, 0x00, 0xf8, 0x4d,
-+ 0x06, 0xcc, 0xf3, 0x10, 0x00, 0x01, 0x89, 0x1a,
-+ 0xf4, 0x95, 0xf0, 0x72, 0x06, 0xcb, 0x11, 0x92,
-+ 0xf2, 0xc0, 0x81, 0x91, 0x8a, 0x11, 0xfc, 0x00,
-+ 0x88, 0x12, 0x12, 0x02, 0x71, 0x01, 0x00, 0x13,
-+ 0xf8, 0x45, 0x06, 0xdb, 0xf0, 0x10, 0x00, 0x01,
-+ 0x88, 0x1a, 0xf4, 0x95, 0xf0, 0x72, 0x06, 0xda,
-+ 0xe5, 0x98, 0xfc, 0x00, 0x4a, 0x11, 0xee, 0xfe,
-+ 0x88, 0x11, 0x11, 0x04, 0x10, 0x06, 0x71, 0x05,
-+ 0x00, 0x12, 0x61, 0xf8, 0x00, 0x12, 0x00, 0x01,
-+ 0xf8, 0x20, 0x06, 0xea, 0xf0, 0x00, 0x00, 0x01,
-+ 0xf6, 0xb8, 0xf0, 0x00, 0x00, 0x01, 0x6f, 0xf8,
-+ 0x00, 0x12, 0x0f, 0x1f, 0x48, 0x08, 0x81, 0x00,
-+ 0xf4, 0x7f, 0x80, 0x01, 0xf2, 0x74, 0x06, 0xba,
-+ 0xf4, 0x95, 0x48, 0x11, 0xee, 0x02, 0x8a, 0x11,
-+ 0xfc, 0x00, 0x4a, 0x11, 0xee, 0xfe, 0x88, 0x12,
-+ 0x11, 0x04, 0x10, 0x06, 0x71, 0x05, 0x00, 0x13,
-+ 0x61, 0xf8, 0x00, 0x13, 0x00, 0x01, 0xf8, 0x20,
-+ 0x07, 0x09, 0xf0, 0x00, 0x00, 0x01, 0xf0, 0x00,
-+ 0x00, 0x01, 0x88, 0x11, 0xf6, 0xb8, 0x6f, 0xf8,
-+ 0x00, 0x13, 0x0f, 0x1f, 0x81, 0x00, 0x48, 0x11,
-+ 0xf4, 0x7f, 0x80, 0x01, 0xf2, 0x74, 0x06, 0xce,
-+ 0xf4, 0x95, 0x48, 0x12, 0x48, 0x11, 0xf0, 0x30,
-+ 0xff, 0xfe, 0xee, 0x02, 0x8a, 0x11, 0xfc, 0x00,
-+ 0x4a, 0x11, 0x4a, 0x16, 0x4a, 0x17, 0xee, 0xfc,
-+ 0xf4, 0x95, 0x80, 0x02, 0x71, 0x08, 0x00, 0x16,
-+ 0x10, 0x09, 0x71, 0x0b, 0x00, 0x17, 0x80, 0x03,
-+ 0x71, 0x0a, 0x00, 0x11, 0x48, 0x17, 0xf8, 0x45,
-+ 0x07, 0x3f, 0x70, 0x00, 0x00, 0x11, 0x10, 0x03,
-+ 0xf0, 0x74, 0x06, 0x9f, 0x80, 0x01, 0x70, 0x00,
-+ 0x00, 0x16, 0x10, 0x02, 0xf0, 0x74, 0x06, 0x7b,
-+ 0x6d, 0x91, 0x6d, 0x96, 0x6c, 0xef, 0xff, 0xff,
-+ 0x07, 0x2f, 0xee, 0x04, 0x8a, 0x17, 0x8a, 0x16,
-+ 0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11, 0xee, 0xfe,
-+ 0x10, 0xf8, 0x2a, 0xe8, 0x08, 0xf8, 0x2a, 0xe9,
-+ 0xf8, 0x45, 0x07, 0x64, 0x76, 0x00, 0x00, 0x01,
-+ 0x62, 0xf8, 0x2a, 0xe9, 0x00, 0x5e, 0xf2, 0x74,
-+ 0x12, 0x0b, 0xf0, 0x00, 0x30, 0x40, 0x72, 0x11,
-+ 0x2a, 0xe9, 0x77, 0x10, 0x00, 0x0f, 0xf5, 0xa9,
-+ 0xf8, 0x20, 0x07, 0x61, 0x6b, 0xf8, 0x2a, 0xe9,
-+ 0x00, 0x01, 0xf0, 0x73, 0x07, 0x64, 0x76, 0xf8,
-+ 0x2a, 0xe9, 0x00, 0x00, 0xee, 0x02, 0x8a, 0x11,
-+ 0xfc, 0x00, 0x4a, 0x11, 0x88, 0x11, 0xe8, 0x00,
-+ 0x75, 0xf8, 0x00, 0x08, 0x00, 0x08, 0xe8, 0x00,
-+ 0x75, 0xf8, 0x00, 0x08, 0x00, 0x09, 0xf6, 0xb8,
-+ 0xf4, 0x95, 0xf0, 0x20, 0xfc, 0x3f, 0x75, 0xf8,
-+ 0x00, 0x08, 0x00, 0x0d, 0xf0, 0x20, 0x0c, 0x30,
-+ 0x75, 0xf8, 0x00, 0x08, 0x00, 0x0c, 0x76, 0xf8,
-+ 0x2a, 0xe8, 0x00, 0x00, 0x76, 0xf8, 0x2a, 0xe9,
-+ 0x00, 0x00, 0x6c, 0x81, 0x07, 0x92, 0x76, 0xf8,
-+ 0x2a, 0xea, 0x00, 0x00, 0xfb, 0x80, 0x16, 0x76,
-+ 0xf4, 0x95, 0xe8, 0x10, 0xe8, 0x00, 0x75, 0xf8,
-+ 0x00, 0x08, 0x00, 0x00, 0xf0, 0x73, 0x07, 0xa8,
-+ 0x76, 0xf8, 0x2a, 0xea, 0x00, 0x01, 0xfb, 0x80,
-+ 0x16, 0x66, 0xf4, 0x95, 0xe8, 0x10, 0xfb, 0x80,
-+ 0x16, 0x87, 0xf4, 0x95, 0xe8, 0x10, 0xe8, 0x00,
-+ 0x75, 0xf8, 0x00, 0x08, 0x00, 0x00, 0xf6, 0xb8,
-+ 0xf4, 0x95, 0xf0, 0x20, 0xff, 0xff, 0x75, 0xf8,
-+ 0x00, 0x08, 0x00, 0x00, 0x8a, 0x11, 0xfc, 0x00,
-+ 0xf4, 0x95, 0x4a, 0x08, 0x4a, 0x09, 0x4a, 0x0a,
-+ 0x4a, 0x06, 0x4a, 0x07, 0x4a, 0x1d, 0x68, 0xf8,
-+ 0x00, 0x07, 0x7d, 0x3f, 0x69, 0xf8, 0x00, 0x07,
-+ 0x40, 0x00, 0x68, 0xf8, 0x00, 0x1d, 0xff, 0xfc,
-+ 0x10, 0xf8, 0x2a, 0xea, 0xf8, 0x45, 0x07, 0xe1,
-+ 0x10, 0xf8, 0x2a, 0xe8, 0xf0, 0x00, 0x00, 0x01,
-+ 0xf0, 0x30, 0x00, 0x0f, 0x80, 0xf8, 0x2a, 0xe8,
-+ 0x10, 0xf8, 0x2a, 0xe8, 0xf8, 0x44, 0x07, 0xd6,
-+ 0xf6, 0xb8, 0xf4, 0x95, 0xf0, 0x20, 0xfc, 0x3f,
-+ 0x75, 0xf8, 0x00, 0x08, 0x00, 0x0d, 0xf0, 0x20,
-+ 0x0c, 0x30, 0x75, 0xf8, 0x00, 0x08, 0x00, 0x0c,
-+ 0xe8, 0x00, 0x75, 0xf8, 0x00, 0x08, 0x00, 0x00,
-+ 0xf6, 0xb8, 0xf4, 0x95, 0xf0, 0x20, 0xff, 0xff,
-+ 0x75, 0xf8, 0x00, 0x08, 0x00, 0x00, 0x8a, 0x1d,
-+ 0x8a, 0x07, 0x8a, 0x06, 0x8a, 0x0a, 0x8a, 0x09,
-+ 0x8a, 0x08, 0xf4, 0xeb, 0xee, 0xff, 0xf2, 0x74,
-+ 0x07, 0x67, 0xf4, 0x95, 0xe8, 0x01, 0xee, 0x01,
-+ 0xfc, 0x00, 0x4a, 0x07, 0x4a, 0x1d, 0x68, 0xf8,
-+ 0x00, 0x07, 0x7d, 0x3f, 0x69, 0xf8, 0x00, 0x07,
-+ 0x40, 0x00, 0x68, 0xf8, 0x00, 0x1d, 0xff, 0xfc,
-+ 0x8a, 0x1d, 0x8a, 0x07, 0xf4, 0xeb, 0x4a, 0x11,
-+ 0x77, 0x11, 0x00, 0x28, 0x76, 0x81, 0x24, 0x00,
-+ 0xe8, 0x00, 0x75, 0xf8, 0x00, 0x08, 0x00, 0x01,
-+ 0xf2, 0x74, 0x07, 0x67, 0xf4, 0x95, 0xe8, 0x00,
-+ 0x77, 0x11, 0x00, 0x1d, 0x68, 0x81, 0x00, 0x7f,
-+ 0xf6, 0xb8, 0xf4, 0x95, 0xf0, 0x20, 0xff, 0x80,
-+ 0x77, 0x11, 0x00, 0x1d, 0xf0, 0x30, 0x01, 0x00,
-+ 0x1a, 0x81, 0x80, 0x81, 0xf0, 0x74, 0x0a, 0x33,
-+ 0xf0, 0x74, 0x11, 0xac, 0xf9, 0x80, 0x13, 0x25,
-+ 0xf9, 0x80, 0x16, 0x53, 0xf9, 0x80, 0x17, 0x82,
-+ 0xf0, 0x74, 0x06, 0x2f, 0xf9, 0x80, 0x14, 0xb2,
-+ 0xf9, 0x80, 0x19, 0x10, 0xf0, 0x74, 0x0d, 0xe3,
-+ 0xf0, 0x74, 0x07, 0xe8, 0xf0, 0x74, 0x02, 0x36,
-+ 0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11, 0x60, 0xf8,
-+ 0x27, 0x7b, 0xff, 0xff, 0xf8, 0x30, 0x08, 0x39,
-+ 0x71, 0xf8, 0x27, 0x7b, 0x27, 0x79, 0x60, 0xf8,
-+ 0x27, 0x79, 0xff, 0xff, 0xf8, 0x30, 0x08, 0xb2,
-+ 0x10, 0xf8, 0x29, 0x86, 0x08, 0xf8, 0x27, 0x79,
-+ 0xf0, 0x30, 0x7f, 0xff, 0x88, 0x11, 0xf4, 0x95,
-+ 0x77, 0x10, 0x40, 0x00, 0xf6, 0xa9, 0xf8, 0x30,
-+ 0x08, 0x58, 0x10, 0xf8, 0x27, 0x79, 0x08, 0xf8,
-+ 0x27, 0x7a, 0xf0, 0x30, 0x7f, 0xff, 0x88, 0x11,
-+ 0xf4, 0x95, 0x77, 0x10, 0x40, 0x00, 0xf6, 0xa9,
-+ 0xf8, 0x20, 0x08, 0x63, 0x76, 0xf8, 0x27, 0x79,
-+ 0xff, 0xff, 0x76, 0xf8, 0x27, 0x7b, 0xff, 0xff,
-+ 0xf7, 0xb8, 0xf2, 0x73, 0x08, 0xd9, 0xf0, 0x20,
-+ 0xff, 0xff, 0xf6, 0xb8, 0x56, 0xf8, 0x27, 0x74,
-+ 0xf0, 0xf9, 0x88, 0x11, 0x56, 0xf8, 0x27, 0x72,
-+ 0xf0, 0xf9, 0x88, 0x12, 0xf4, 0x95, 0xf4, 0x95,
-+ 0xe7, 0x20, 0xf4, 0xa9, 0xf8, 0x30, 0x08, 0x8f,
-+ 0xf1, 0x20, 0x27, 0x7c, 0x48, 0x11, 0xf6, 0x00,
-+ 0x88, 0x13, 0xf4, 0x95, 0xf4, 0x95, 0x10, 0x83,
-+ 0x08, 0xf8, 0x27, 0x79, 0xf0, 0x30, 0x7f, 0xff,
-+ 0x88, 0x13, 0xf4, 0x95, 0x77, 0x10, 0x40, 0x00,
-+ 0xf5, 0xab, 0xf8, 0x30, 0x08, 0x8f, 0x6d, 0x91,
-+ 0x48, 0x11, 0xf0, 0x30, 0x01, 0xff, 0x88, 0x11,
-+ 0xf4, 0x95, 0xe7, 0x20, 0xf7, 0xa9, 0xf8, 0x30,
-+ 0x08, 0x74, 0x6d, 0x89, 0x48, 0x11, 0xf0, 0x30,
-+ 0x01, 0xff, 0xf0, 0xe7, 0xf4, 0x95, 0x48, 0x08,
-+ 0x4e, 0xf8, 0x27, 0x74, 0x48, 0x08, 0xf1, 0xf9,
-+ 0x89, 0x11, 0xf4, 0x95, 0xf4, 0x95, 0x71, 0xe1,
-+ 0x27, 0x7c, 0x27, 0x7a, 0x60, 0xf8, 0x27, 0x7b,
-+ 0xff, 0xff, 0xf8, 0x30, 0x08, 0xab, 0x48, 0x08,
-+ 0x4e, 0xf8, 0x27, 0x72, 0x76, 0xf8, 0x27, 0x7b,
-+ 0xff, 0xff, 0x76, 0xf8, 0x27, 0x79, 0xff, 0xff,
-+ 0xf2, 0x73, 0x08, 0xd9, 0xf4, 0x95, 0xe8, 0x00,
-+ 0x44, 0xf8, 0x27, 0x73, 0x40, 0xf8, 0x27, 0x75,
-+ 0x82, 0xf8, 0x00, 0x11, 0xf4, 0x95, 0x77, 0x10,
-+ 0x80, 0x00, 0xf6, 0xa9, 0xf8, 0x20, 0x08, 0xd8,
-+ 0xf6, 0xb8, 0x10, 0xf8, 0x27, 0x73, 0xf0, 0x00,
-+ 0x80, 0x00, 0x48, 0x08, 0x4e, 0xf8, 0x27, 0x74,
-+ 0x48, 0x08, 0xf0, 0xf9, 0x88, 0x11, 0xf4, 0x95,
-+ 0xf4, 0x95, 0x71, 0xe1, 0x27, 0x7c, 0x27, 0x7a,
-+ 0xf7, 0xb8, 0x57, 0xf8, 0x27, 0x74, 0xf0, 0x62,
-+ 0xff, 0xff, 0xf0, 0x40, 0xff, 0x80, 0xf2, 0x80,
-+ 0x4e, 0xf8, 0x27, 0x74, 0xe8, 0x00, 0x8a, 0x11,
-+ 0xfc, 0x00, 0x4a, 0x11, 0x4a, 0x16, 0xee, 0xfb,
-+ 0x11, 0xf8, 0x27, 0x71, 0x09, 0xf8, 0x27, 0x73,
-+ 0x89, 0x11, 0x88, 0x10, 0xf4, 0x95, 0xf4, 0x95,
-+ 0xf6, 0xa9, 0xf8, 0x20, 0x08, 0xed, 0xf2, 0x73,
-+ 0x09, 0x0e, 0xf4, 0x95, 0xe8, 0x00, 0xf6, 0x20,
-+ 0x76, 0x00, 0x00, 0x41, 0xf0, 0x74, 0x12, 0xee,
-+ 0x88, 0x16, 0xf4, 0x95, 0xf7, 0xb8, 0x6d, 0x96,
-+ 0x10, 0xf8, 0x00, 0x16, 0xf8, 0x47, 0x09, 0x0a,
-+ 0xe7, 0x61, 0x76, 0x00, 0x00, 0x00, 0x76, 0x01,
-+ 0x00, 0x80, 0x76, 0x02, 0x00, 0xff, 0x76, 0x03,
-+ 0x00, 0x00, 0xf2, 0x74, 0x0c, 0xb9, 0xf4, 0x95,
-+ 0xe8, 0x00, 0x6c, 0xe9, 0xff, 0xff, 0x08, 0xfb,
-+ 0x73, 0x16, 0x00, 0x0e, 0xf0, 0x66, 0x00, 0x41,
-+ 0xee, 0x05, 0x8a, 0x16, 0x8a, 0x11, 0xfc, 0x00,
-+ 0x4a, 0x11, 0xf4, 0x95, 0x71, 0x02, 0x00, 0x13,
-+ 0xf6, 0xb8, 0x77, 0x11, 0x7f, 0xff, 0x57, 0xf8,
-+ 0x27, 0x72, 0x48, 0x11, 0xf2, 0x80, 0xf0, 0x00,
-+ 0x80, 0x00, 0x88, 0x11, 0xf6, 0x40, 0xf0, 0xe0,
-+ 0xf1, 0xf1, 0xe8, 0x01, 0xf2, 0x80, 0x80, 0xf8,
-+ 0x27, 0x78, 0x77, 0x12, 0x80, 0x00, 0x57, 0xf8,
-+ 0x27, 0x72, 0x48, 0x12, 0xf2, 0x80, 0x88, 0x12,
-+ 0xf4, 0x95, 0xf4, 0x95, 0x6c, 0x82, 0x09, 0x38,
-+ 0xe8, 0x00, 0x75, 0xf8, 0x00, 0x08, 0x00, 0x01,
-+ 0xf0, 0x73, 0x09, 0x3d, 0xf0, 0x20, 0x80, 0x01,
-+ 0x75, 0xf8, 0x00, 0x08, 0x00, 0x01, 0x70, 0x81,
-+ 0x00, 0x13, 0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11,
-+ 0xf0, 0x30, 0x7f, 0xff, 0x11, 0xf8, 0x29, 0x86,
-+ 0xf5, 0x20, 0xf3, 0x30, 0x7f, 0xff, 0x89, 0x11,
-+ 0xf4, 0x95, 0x77, 0x10, 0x40, 0x00, 0xf6, 0xa9,
-+ 0xf8, 0x20, 0x09, 0x54, 0xf2, 0x73, 0x09, 0x67,
-+ 0xf4, 0x95, 0xe8, 0x02, 0x6f, 0xf8, 0x27, 0x7a,
-+ 0x0d, 0x20, 0xf3, 0x30, 0x7f, 0xff, 0x89, 0x11,
-+ 0xf4, 0x95, 0x77, 0x10, 0x40, 0x00, 0xf6, 0xa9,
-+ 0xf8, 0x20, 0x09, 0x64, 0xf2, 0x73, 0x09, 0x67,
-+ 0xf4, 0x95, 0xe8, 0x01, 0x80, 0xf8, 0x27, 0x7b,
-+ 0xe8, 0x00, 0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11,
-+ 0x11, 0xf8, 0x29, 0x86, 0xf5, 0x20, 0xf3, 0x30,
-+ 0x7f, 0xff, 0x89, 0x11, 0xf4, 0x95, 0x77, 0x10,
-+ 0x40, 0x00, 0xf6, 0xa9, 0xf8, 0x20, 0x09, 0x7a,
-+ 0xf2, 0x73, 0x09, 0x8d, 0xf4, 0x95, 0xe8, 0x02,
-+ 0x6f, 0xf8, 0x27, 0x7a, 0x0d, 0x20, 0xf3, 0x30,
-+ 0x7f, 0xff, 0x89, 0x11, 0xf4, 0x95, 0x77, 0x10,
-+ 0x40, 0x00, 0xf6, 0xa9, 0xf8, 0x20, 0x09, 0x8a,
-+ 0xf2, 0x73, 0x09, 0x8d, 0xf4, 0x95, 0xe8, 0x01,
-+ 0x80, 0xf8, 0x27, 0x79, 0xe8, 0x00, 0x8a, 0x11,
-+ 0xfc, 0x00, 0x4a, 0x11, 0xf4, 0x95, 0x71, 0x02,
-+ 0x00, 0x12, 0x88, 0x11, 0xf6, 0xb8, 0x57, 0xf8,
-+ 0x27, 0x72, 0xf0, 0x20, 0x7f, 0xff, 0xf2, 0x80,
-+ 0xf0, 0x00, 0x80, 0x00, 0x80, 0x81, 0x57, 0xf8,
-+ 0x27, 0x72, 0xe8, 0x01, 0xf3, 0xf1, 0xf2, 0x80,
-+ 0x80, 0xf8, 0x27, 0x78, 0x77, 0x11, 0x80, 0x00,
-+ 0x48, 0x11, 0x57, 0xf8, 0x27, 0x72, 0xf2, 0x80,
-+ 0x88, 0x11, 0xf4, 0x95, 0xf4, 0x95, 0x6c, 0x81,
-+ 0x09, 0xb5, 0xe8, 0x00, 0x75, 0xf8, 0x00, 0x08,
-+ 0x00, 0x01, 0xf0, 0x73, 0x09, 0xba, 0xf0, 0x20,
-+ 0x80, 0x01, 0x75, 0xf8, 0x00, 0x08, 0x00, 0x01,
-+ 0x45, 0xf8, 0x27, 0x71, 0x43, 0xf8, 0x27, 0x73,
-+ 0x83, 0xf8, 0x00, 0x11, 0xf4, 0x95, 0xe7, 0x20,
-+ 0xf6, 0xa9, 0xf8, 0x30, 0x09, 0xc9, 0xf2, 0x73,
-+ 0x09, 0xe4, 0x77, 0x12, 0x00, 0x00, 0x57, 0xf8,
-+ 0x27, 0x72, 0xf0, 0x20, 0x7f, 0xff, 0xf2, 0x80,
-+ 0x49, 0x12, 0xf5, 0x00, 0xf3, 0x00, 0x80, 0x00,
-+ 0x61, 0xf8, 0x00, 0x0b, 0x80, 0x00, 0xf8, 0x30,
-+ 0x09, 0xdc, 0xf1, 0x20, 0x80, 0x00, 0xf5, 0x20,
-+ 0x89, 0x12, 0xf4, 0x95, 0x48, 0x12, 0x6f, 0xf8,
-+ 0x27, 0x73, 0x0d, 0x00, 0xf4, 0x95, 0x49, 0x0b,
-+ 0x4f, 0xf8, 0x27, 0x72, 0x8a, 0x11, 0xfe, 0x00,
-+ 0x48, 0x12, 0xf4, 0x95, 0x4a, 0x11, 0x4a, 0x16,
-+ 0x4a, 0x17, 0xee, 0xfc, 0xf4, 0x95, 0x71, 0x08,
-+ 0x00, 0x16, 0x88, 0x17, 0xf0, 0x74, 0x08, 0x30,
-+ 0x48, 0x18, 0x70, 0x00, 0x00, 0x16, 0xf2, 0x74,
-+ 0x09, 0x8f, 0xf0, 0x00, 0x00, 0x02, 0x88, 0x11,
-+ 0xf4, 0x95, 0xf4, 0x95, 0x6c, 0x81, 0x0a, 0x0a,
-+ 0xf2, 0x74, 0x08, 0xdb, 0xf4, 0x95, 0x48, 0x16,
-+ 0x48, 0x18, 0x70, 0x00, 0x00, 0x16, 0xf2, 0x74,
-+ 0x09, 0x8f, 0xf0, 0x00, 0x00, 0x02, 0x88, 0x11,
-+ 0x10, 0x02, 0x70, 0x01, 0x00, 0x11, 0x80, 0x00,
-+ 0xf2, 0x74, 0x06, 0xce, 0xf4, 0x95, 0x48, 0x17,
-+ 0x49, 0x11, 0x48, 0x17, 0xf6, 0x00, 0x88, 0x17,
-+ 0xe7, 0x60, 0xf5, 0xa9, 0xf8, 0x20, 0x0a, 0x2d,
-+ 0x48, 0x16, 0xf6, 0x20, 0x88, 0x11, 0x48, 0x18,
-+ 0x70, 0x00, 0x00, 0x11, 0xf2, 0x74, 0x09, 0x8f,
-+ 0xf0, 0x00, 0x00, 0x02, 0x88, 0x11, 0x70, 0x01,
-+ 0x00, 0x11, 0x10, 0x02, 0x80, 0x00, 0xf2, 0x74,
-+ 0x06, 0xce, 0xf4, 0x95, 0x48, 0x17, 0xee, 0x04,
-+ 0x48, 0x16, 0x8a, 0x17, 0x8a, 0x16, 0x8a, 0x11,
-+ 0xfc, 0x00, 0xee, 0xfd, 0xe8, 0x00, 0x4e, 0xf8,
-+ 0x27, 0x70, 0xe8, 0x00, 0x4e, 0xf8, 0x27, 0x72,
-+ 0xe8, 0x00, 0x4e, 0xf8, 0x27, 0x74, 0xe8, 0x00,
-+ 0x4e, 0xf8, 0x27, 0x76, 0x76, 0xf8, 0x27, 0x79,
-+ 0xff, 0xff, 0x76, 0xf8, 0x27, 0x7a, 0x00, 0x00,
-+ 0x76, 0xf8, 0x27, 0x7b, 0xff, 0xff, 0x76, 0xf8,
-+ 0x27, 0x78, 0x00, 0x00, 0xe8, 0x00, 0x75, 0xf8,
-+ 0x00, 0x08, 0x00, 0x01, 0x76, 0x00, 0x00, 0x00,
-+ 0x76, 0x01, 0x02, 0x00, 0xf2, 0x74, 0x12, 0xdc,
-+ 0xf0, 0x20, 0x27, 0x7c, 0xee, 0x03, 0xfc, 0x00,
-+ 0x4a, 0x11, 0xee, 0xfc, 0xf4, 0x95, 0x4e, 0x00,
-+ 0x77, 0x12, 0x7f, 0xff, 0xf6, 0xb8, 0x49, 0x12,
-+ 0xf1, 0x80, 0xf3, 0x00, 0x80, 0x00, 0x89, 0x12,
-+ 0xf0, 0xe0, 0xf1, 0xf1, 0x4f, 0x02, 0xe9, 0x01,
-+ 0xf4, 0x95, 0x48, 0x0b, 0xf5, 0x40, 0x56, 0x02,
-+ 0xf1, 0x80, 0x81, 0xf8, 0x27, 0x78, 0x77, 0x11,
-+ 0x80, 0x00, 0x56, 0x00, 0x49, 0x11, 0xf1, 0x80,
-+ 0x89, 0x11, 0xf4, 0x95, 0xf4, 0x95, 0x6c, 0x81,
-+ 0x0a, 0x81, 0xe8, 0x00, 0x75, 0xf8, 0x00, 0x08,
-+ 0x00, 0x01, 0xf0, 0x73, 0x0a, 0x86, 0xf0, 0x20,
-+ 0x80, 0x01, 0x75, 0xf8, 0x00, 0x08, 0x00, 0x01,
-+ 0x10, 0x82, 0xee, 0x04, 0x8a, 0x11, 0xfc, 0x00,
-+ 0x4a, 0x11, 0xee, 0xfe, 0xf4, 0x95, 0x4e, 0x00,
-+ 0x77, 0x11, 0x7f, 0xff, 0xf6, 0xb8, 0x49, 0x11,
-+ 0xf1, 0x80, 0xf3, 0x00, 0x80, 0x00, 0x89, 0x11,
-+ 0xf0, 0xe0, 0xf1, 0xf1, 0xe8, 0x01, 0xf2, 0x80,
-+ 0x80, 0xf8, 0x27, 0x78, 0x56, 0x00, 0xf1, 0x20,
-+ 0x80, 0x00, 0xf1, 0x80, 0xf4, 0x95, 0x49, 0x0b,
-+ 0xf8, 0x4d, 0x0a, 0xab, 0xf0, 0x20, 0x80, 0x01,
-+ 0x75, 0xf8, 0x00, 0x08, 0x00, 0x01, 0xf0, 0x73,
-+ 0x0a, 0xaf, 0xe8, 0x00, 0x75, 0xf8, 0x00, 0x08,
-+ 0x00, 0x01, 0xee, 0x02, 0x48, 0x11, 0x8a, 0x11,
-+ 0xfc, 0x00, 0x4a, 0x11, 0x88, 0x12, 0x13, 0x02,
-+ 0x77, 0x11, 0x00, 0x00, 0xf8, 0x4d, 0x0a, 0xcb,
-+ 0xf3, 0x10, 0x00, 0x01, 0x89, 0x1a, 0xf4, 0x95,
-+ 0xf0, 0x72, 0x0a, 0xca, 0x48, 0x11, 0x1c, 0xf8,
-+ 0x29, 0x7e, 0x88, 0x11, 0x11, 0xf8, 0x29, 0x7e,
-+ 0xf2, 0x00, 0x00, 0x01, 0x80, 0xf8, 0x29, 0x7e,
-+ 0x81, 0x92, 0x48, 0x11, 0x8a, 0x11, 0xfc, 0x00,
-+ 0x4a, 0x11, 0xf4, 0x95, 0x71, 0x02, 0x00, 0x11,
-+ 0x88, 0x12, 0xf6, 0xb8, 0xf0, 0x20, 0x7f, 0xff,
-+ 0x57, 0xf8, 0x27, 0x70, 0xf2, 0x80, 0xf0, 0x00,
-+ 0x80, 0x00, 0x80, 0x82, 0x57, 0xf8, 0x27, 0x70,
-+ 0xe8, 0x01, 0xf3, 0xf1, 0xf2, 0x80, 0x80, 0xf8,
-+ 0x27, 0x78, 0x77, 0x12, 0x80, 0x00, 0x48, 0x12,
-+ 0x57, 0xf8, 0x27, 0x70, 0xf2, 0x80, 0x88, 0x12,
-+ 0xf4, 0x95, 0xf4, 0x95, 0x6c, 0x82, 0x0a, 0xf4,
-+ 0xe8, 0x00, 0x75, 0xf8, 0x00, 0x08, 0x00, 0x01,
-+ 0xf0, 0x73, 0x0a, 0xf9, 0xf0, 0x20, 0x80, 0x01,
-+ 0x75, 0xf8, 0x00, 0x08, 0x00, 0x01, 0x45, 0xf8,
-+ 0x27, 0x75, 0xe7, 0x10, 0x43, 0xf8, 0x27, 0x71,
-+ 0x83, 0xf8, 0x00, 0x12, 0x6d, 0xe8, 0x00, 0x04,
-+ 0x6d, 0x8a, 0xf6, 0xaa, 0xf8, 0x30, 0x0b, 0x0a,
-+ 0xf2, 0x73, 0x0b, 0x25, 0x77, 0x11, 0x00, 0x00,
-+ 0x57, 0xf8, 0x27, 0x70, 0xf0, 0x20, 0x7f, 0xff,
-+ 0xf2, 0x80, 0x49, 0x11, 0xf5, 0x00, 0xf3, 0x00,
-+ 0x80, 0x00, 0x61, 0xf8, 0x00, 0x0b, 0x80, 0x00,
-+ 0xf8, 0x30, 0x0b, 0x1d, 0xf1, 0x20, 0x80, 0x00,
-+ 0xf5, 0x20, 0x89, 0x11, 0xf4, 0x95, 0x48, 0x11,
-+ 0x6f, 0xf8, 0x27, 0x71, 0x0d, 0x00, 0xf4, 0x95,
-+ 0x49, 0x0b, 0x4f, 0xf8, 0x27, 0x70, 0x48, 0x11,
-+ 0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11, 0x4a, 0x16,
-+ 0x4a, 0x17, 0xee, 0xf0, 0x88, 0x17, 0x10, 0x17,
-+ 0x80, 0x05, 0x10, 0x16, 0x80, 0x06, 0x10, 0x15,
-+ 0x80, 0x07, 0x71, 0x14, 0x00, 0x11, 0x10, 0x05,
-+ 0xf0, 0x30, 0x00, 0x01, 0x88, 0x10, 0x10, 0x06,
-+ 0xf0, 0x30, 0x00, 0x01, 0x80, 0x08, 0x49, 0x11,
-+ 0x10, 0x05, 0xf6, 0x01, 0x80, 0x09, 0x10, 0x06,
-+ 0x61, 0xf8, 0x00, 0x08, 0x00, 0x01, 0xf8, 0x20,
-+ 0x0b, 0x4b, 0x10, 0x09, 0xf0, 0x00, 0x00, 0x01,
-+ 0x80, 0x09, 0x71, 0x08, 0x00, 0x12, 0xf4, 0xaa,
-+ 0xf8, 0x30, 0x0b, 0x54, 0x10, 0x09, 0xf0, 0x00,
-+ 0x00, 0x01, 0x80, 0x09, 0x12, 0x09, 0x49, 0x11,
-+ 0xf4, 0x7f, 0x80, 0x09, 0xf6, 0x20, 0x80, 0x0a,
-+ 0x56, 0xf8, 0x27, 0x70, 0x4e, 0x0c, 0x10, 0x09,
-+ 0x80, 0x00, 0x48, 0x18, 0xf2, 0x74, 0x0a, 0xce,
-+ 0xf0, 0x00, 0x00, 0x04, 0x88, 0x16, 0xf4, 0x95,
-+ 0xf4, 0x95, 0x6c, 0x86, 0x0b, 0x6d, 0xf2, 0x73,
-+ 0x0c, 0x59, 0xf4, 0x95, 0xe8, 0x00, 0xf6, 0xb8,
-+ 0xf4, 0x95, 0x56, 0x0c, 0xf0, 0xf9, 0x88, 0x12,
-+ 0xf4, 0x95, 0xf4, 0x95, 0x70, 0xe2, 0x27, 0x7c,
-+ 0x29, 0x86, 0xe8, 0x00, 0x80, 0x0e, 0x48, 0x11,
-+ 0xf8, 0x45, 0x0b, 0xcc, 0x77, 0x10, 0x00, 0x01,
-+ 0xf4, 0xa9, 0xf8, 0x30, 0x0b, 0x89, 0x6c, 0xe1,
-+ 0xff, 0xfd, 0x0b, 0x8b, 0x10, 0xe7, 0x00, 0x02,
-+ 0x80, 0x0e, 0xf0, 0x73, 0x0b, 0x8b, 0x10, 0x87,
-+ 0x80, 0x0e, 0xe7, 0x10, 0xf5, 0xae, 0xf8, 0x20,
-+ 0x0b, 0xb2, 0x70, 0x00, 0x00, 0x17, 0x70, 0x01,
-+ 0x00, 0x16, 0x10, 0x04, 0xf0, 0x74, 0x06, 0xce,
-+ 0x48, 0x17, 0x49, 0x16, 0xf6, 0x00, 0x88, 0x17,
-+ 0x48, 0x11, 0xf6, 0x20, 0x88, 0x11, 0x10, 0x09,
-+ 0xf6, 0x20, 0x80, 0x00, 0x48, 0x18, 0xf2, 0x74,
-+ 0x0a, 0xce, 0xf0, 0x00, 0x00, 0x04, 0x88, 0x16,
-+ 0x10, 0x04, 0x70, 0x00, 0x00, 0x17, 0x70, 0x01,
-+ 0x00, 0x11, 0xf0, 0x74, 0x06, 0xce, 0x48, 0x11,
-+ 0x00, 0x04, 0x80, 0x04, 0xf0, 0x73, 0x0b, 0xbc,
-+ 0x70, 0x00, 0x00, 0x17, 0x70, 0x01, 0x00, 0x11,
-+ 0x10, 0x04, 0xf0, 0x74, 0x06, 0xce, 0x48, 0x11,
-+ 0x00, 0x04, 0x80, 0x04, 0x49, 0x11, 0x48, 0x16,
-+ 0xf6, 0x20, 0x88, 0x16, 0xf4, 0x95, 0xf4, 0x95,
-+ 0x6c, 0x86, 0x0b, 0xcc, 0x10, 0x0a, 0x80, 0x00,
-+ 0x48, 0x18, 0xf2, 0x74, 0x0a, 0xce, 0xf0, 0x00,
-+ 0x00, 0x04, 0x88, 0x16, 0x12, 0x0a, 0xf8, 0x45,
-+ 0x0c, 0x33, 0x71, 0x0a, 0x00, 0x10, 0xf4, 0xae,
-+ 0xf8, 0x30, 0x0c, 0x1c, 0x48, 0x16, 0xf0, 0xe1,
-+ 0x88, 0x11, 0x12, 0x08, 0xf8, 0x45, 0x0b, 0xdb,
-+ 0x6d, 0x89, 0x12, 0x07, 0xf8, 0x45, 0x0b, 0xe9,
-+ 0x10, 0x07, 0x80, 0x00, 0x70, 0x02, 0x00, 0x11,
-+ 0x10, 0x06, 0x80, 0x01, 0x10, 0x04, 0xf0, 0x74,
-+ 0x06, 0xdc, 0xf0, 0x73, 0x0b, 0xef, 0x48, 0x11,
-+ 0x6f, 0x00, 0x0c, 0x9f, 0x10, 0x04, 0xf0, 0x74,
-+ 0x0a, 0xb3, 0x11, 0x0e, 0xf1, 0xc0, 0x81, 0x0e,
-+ 0x10, 0x06, 0x49, 0x11, 0xf6, 0x00, 0x80, 0x06,
-+ 0x10, 0x05, 0xf6, 0x20, 0x88, 0x11, 0xf0, 0x00,
-+ 0x00, 0x01, 0x48, 0x08, 0x6f, 0x00, 0x0c, 0x9f,
-+ 0x48, 0x18, 0xf2, 0x74, 0x0a, 0xce, 0xf0, 0x00,
-+ 0x00, 0x04, 0x12, 0x07, 0xf8, 0x45, 0x0c, 0x11,
-+ 0x10, 0x07, 0x80, 0x00, 0x70, 0x02, 0x00, 0x11,
-+ 0x10, 0x06, 0x80, 0x01, 0x10, 0x04, 0xf0, 0x74,
-+ 0x06, 0xdc, 0xf0, 0x73, 0x0c, 0x17, 0x48, 0x11,
-+ 0x6f, 0x00, 0x0c, 0x9f, 0x10, 0x04, 0xf0, 0x74,
-+ 0x0a, 0xb3, 0x11, 0x0e, 0xf1, 0xc0, 0x81, 0x0e,
-+ 0xf0, 0x73, 0x0c, 0x33, 0x12, 0x07, 0xf8, 0x45,
-+ 0x0c, 0x2a, 0x10, 0x07, 0x80, 0x00, 0x10, 0x06,
-+ 0x80, 0x01, 0x10, 0x05, 0x80, 0x02, 0x10, 0x04,
-+ 0xf0, 0x74, 0x06, 0xdc, 0xf0, 0x73, 0x0c, 0x30,
-+ 0x12, 0x05, 0x6f, 0x00, 0x0c, 0x9f, 0x10, 0x04,
-+ 0xf0, 0x74, 0x0a, 0xb3, 0x11, 0x0e, 0xf1, 0xc0,
-+ 0x81, 0x0e, 0x76, 0x00, 0x00, 0x01, 0x48, 0x18,
-+ 0xf2, 0x74, 0x0a, 0xce, 0xf0, 0x00, 0x00, 0x04,
-+ 0x71, 0x04, 0x00, 0x11, 0x70, 0x81, 0x29, 0x86,
-+ 0x10, 0x0e, 0x1c, 0xf8, 0x29, 0x86, 0x80, 0x0e,
-+ 0x76, 0x00, 0x00, 0x01, 0x48, 0x18, 0xf2, 0x74,
-+ 0x0a, 0xce, 0xf0, 0x00, 0x00, 0x04, 0x10, 0x0e,
-+ 0x71, 0x04, 0x00, 0x11, 0x80, 0x81, 0x10, 0xf8,
-+ 0x29, 0x86, 0xf0, 0x00, 0x00, 0x01, 0xf0, 0x30,
-+ 0x7f, 0xff, 0x80, 0xf8, 0x29, 0x86, 0x10, 0x09,
-+ 0xf0, 0x00, 0x00, 0x02, 0x80, 0x09, 0xee, 0x10,
-+ 0x8a, 0x17, 0x8a, 0x16, 0x8a, 0x11, 0xfc, 0x00,
-+ 0x10, 0xf8, 0x27, 0x75, 0x08, 0xf8, 0x27, 0x71,
-+ 0xf0, 0x10, 0x00, 0x01, 0x48, 0x08, 0xfc, 0x00,
-+ 0x4a, 0x11, 0x4a, 0x16, 0xee, 0xff, 0xf4, 0x95,
-+ 0x71, 0x04, 0x00, 0x16, 0xf0, 0x00, 0x00, 0x01,
-+ 0x48, 0x08, 0x4e, 0xf8, 0x29, 0x7c, 0x6d, 0xee,
-+ 0xff, 0xfd, 0x48, 0x16, 0xf8, 0x45, 0x0c, 0x99,
-+ 0x56, 0xf8, 0x29, 0x7c, 0xf0, 0x74, 0x0a, 0x5a,
-+ 0x88, 0x11, 0x10, 0xf8, 0x29, 0x7d, 0xf0, 0x00,
-+ 0x00, 0x01, 0x48, 0x08, 0x4e, 0xf8, 0x29, 0x7c,
-+ 0x10, 0xf8, 0x29, 0x82, 0xf0, 0x00, 0x00, 0x01,
-+ 0x88, 0x10, 0xf4, 0x95, 0xf4, 0x95, 0xf4, 0xa9,
-+ 0xfa, 0x30, 0x0c, 0x96, 0x80, 0xf8, 0x29, 0x82,
-+ 0x56, 0xf8, 0x29, 0x80, 0xf0, 0x00, 0x00, 0x01,
-+ 0x4e, 0xf8, 0x29, 0x80, 0x73, 0x11, 0x29, 0x82,
-+ 0x6c, 0xee, 0xff, 0xff, 0x0c, 0x76, 0xee, 0x01,
-+ 0x8a, 0x16, 0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11,
-+ 0x76, 0xf8, 0x29, 0x84, 0x00, 0x00, 0x76, 0xf8,
-+ 0x29, 0x85, 0x00, 0x01, 0xe8, 0x00, 0x4e, 0xf8,
-+ 0x2a, 0x0c, 0x76, 0xf8, 0x29, 0x86, 0x00, 0x00,
-+ 0x76, 0xf8, 0x29, 0x87, 0x00, 0x00, 0x77, 0x11,
-+ 0x29, 0x88, 0x76, 0x81, 0xaa, 0xaa, 0x76, 0xe1,
-+ 0x00, 0x01, 0xaa, 0xaa, 0x76, 0xe1, 0x00, 0x02,
-+ 0x00, 0x00, 0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11,
-+ 0xee, 0xfc, 0xf4, 0x95, 0x71, 0x06, 0x00, 0x14,
-+ 0x71, 0x07, 0x00, 0x13, 0x71, 0x08, 0x00, 0x12,
-+ 0x71, 0x09, 0x00, 0x15, 0x77, 0x10, 0x00, 0xff,
-+ 0xf4, 0xaa, 0xf8, 0x30, 0x0d, 0x44, 0x49, 0x13,
-+ 0x53, 0xf8, 0x2a, 0x0c, 0x4f, 0xf8, 0x2a, 0x0c,
-+ 0x73, 0x12, 0x00, 0x0e, 0xf1, 0x66, 0x00, 0x0d,
-+ 0x89, 0x11, 0xf4, 0x95, 0x77, 0x10, 0x00, 0x01,
-+ 0x71, 0xe1, 0x24, 0x00, 0x00, 0x11, 0xf4, 0xa9,
-+ 0xf8, 0x30, 0x0d, 0x17, 0x77, 0x10, 0x00, 0x02,
-+ 0xf4, 0xa9, 0xf8, 0x30, 0x0c, 0xec, 0x77, 0x11,
-+ 0x29, 0x8a, 0x76, 0x81, 0x00, 0x00, 0xe8, 0x00,
-+ 0x77, 0x14, 0x00, 0x00, 0x77, 0x13, 0x00, 0x00,
-+ 0xf0, 0x73, 0x0d, 0x48, 0x6c, 0x83, 0x0c, 0xfa,
-+ 0x77, 0x11, 0x29, 0x8a, 0x48, 0x12, 0xf0, 0xe8,
-+ 0xf0, 0x40, 0x80, 0x00, 0x80, 0x81, 0xe8, 0x00,
-+ 0x77, 0x14, 0x00, 0x00, 0xf0, 0x73, 0x0d, 0x48,
-+ 0x49, 0x13, 0xf3, 0x40, 0x80, 0x00, 0x81, 0xf8,
-+ 0x29, 0x8a, 0x61, 0xf8, 0x00, 0x15, 0x00, 0x01,
-+ 0xf8, 0x20, 0x0d, 0x07, 0x69, 0xf8, 0x29, 0x8a,
-+ 0x40, 0x00, 0x61, 0xf8, 0x00, 0x14, 0x00, 0x01,
-+ 0xf8, 0x20, 0x0d, 0x0f, 0x69, 0xf8, 0x29, 0x8a,
-+ 0x20, 0x00, 0x77, 0x11, 0x29, 0x8a, 0x49, 0x12,
-+ 0xf3, 0xe8, 0x1b, 0x81, 0x81, 0x81, 0xf0, 0x73,
-+ 0x0d, 0x48, 0x11, 0xf8, 0x29, 0x84, 0xf8, 0x4c,
-+ 0x0d, 0x37, 0x77, 0x11, 0x29, 0x88, 0x76, 0x81,
-+ 0xaa, 0xaa, 0x11, 0xf8, 0x29, 0x85, 0xf3, 0x10,
-+ 0x00, 0x01, 0xf3, 0x40, 0xaa, 0x00, 0x81, 0xe1,
-+ 0x00, 0x01, 0x76, 0x00, 0x00, 0x02, 0x80, 0x01,
-+ 0x70, 0x02, 0x00, 0x14, 0x70, 0x03, 0x00, 0x13,
-+ 0xf2, 0x74, 0x0b, 0x28, 0xf4, 0x95, 0x48, 0x11,
-+ 0x71, 0xf8, 0x29, 0x85, 0x29, 0x84, 0xf0, 0x73,
-+ 0x0d, 0x73, 0x76, 0x00, 0x00, 0x00, 0x80, 0x01,
-+ 0x76, 0x02, 0x00, 0x00, 0x70, 0x03, 0x00, 0x13,
-+ 0xf2, 0x74, 0x0b, 0x28, 0xf4, 0x95, 0xe8, 0x00,
-+ 0xf0, 0x73, 0x0d, 0x73, 0x77, 0x11, 0x29, 0x8a,
-+ 0x70, 0x81, 0x00, 0x13, 0x11, 0xf8, 0x29, 0x84,
-+ 0xf8, 0x4c, 0x0d, 0x68, 0x77, 0x11, 0x29, 0x88,
-+ 0x76, 0x81, 0xaa, 0xaa, 0x11, 0xf8, 0x29, 0x85,
-+ 0xf3, 0x10, 0x00, 0x01, 0xf3, 0x40, 0xaa, 0x00,
-+ 0x81, 0xe1, 0x00, 0x01, 0x76, 0x00, 0x00, 0x03,
-+ 0x80, 0x01, 0x70, 0x02, 0x00, 0x14, 0x70, 0x03,
-+ 0x00, 0x13, 0xf2, 0x74, 0x0b, 0x28, 0xf4, 0x95,
-+ 0x48, 0x11, 0x71, 0xf8, 0x29, 0x85, 0x29, 0x84,
-+ 0xf0, 0x73, 0x0d, 0x73, 0x76, 0x00, 0x00, 0x01,
-+ 0x80, 0x01, 0x70, 0x02, 0x00, 0x14, 0x70, 0x03,
-+ 0x00, 0x13, 0xf2, 0x74, 0x0b, 0x28, 0xf4, 0x95,
-+ 0x48, 0x11, 0x6b, 0xf8, 0x29, 0x84, 0xff, 0xff,
-+ 0xee, 0x04, 0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11,
-+ 0xf5, 0x40, 0xf4, 0x95, 0x48, 0x0b, 0xf4, 0x78,
-+ 0x88, 0x11, 0xf4, 0x95, 0xf4, 0x95, 0x6c, 0xe1,
-+ 0xff, 0xb9, 0x0d, 0x88, 0xf2, 0x73, 0x0d, 0xa5,
-+ 0xf4, 0x95, 0xe8, 0x60, 0xf2, 0x00, 0x00, 0x06,
-+ 0x61, 0xf8, 0x00, 0x11, 0x00, 0x20, 0xf8, 0x30,
-+ 0x0d, 0x98, 0x61, 0xf8, 0x00, 0x0b, 0x00, 0x01,
-+ 0xf8, 0x20, 0x0d, 0xa3, 0xf2, 0x00, 0x00, 0x07,
-+ 0xf0, 0x73, 0x0d, 0xa3, 0x61, 0xf8, 0x00, 0x0b,
-+ 0x00, 0x01, 0xf8, 0x20, 0x0d, 0xa1, 0xf2, 0x73,
-+ 0x0d, 0xa3, 0xf0, 0x00, 0x00, 0x01, 0xf0, 0x00,
-+ 0x00, 0x02, 0x48, 0x08, 0xf4, 0x7f, 0x8a, 0x11,
-+ 0xfc, 0x00, 0xee, 0xff, 0xf0, 0x74, 0x07, 0xfd,
-+ 0xf0, 0x74, 0x07, 0x44, 0xf0, 0x74, 0x0d, 0xb4,
-+ 0xf0, 0x74, 0x02, 0x05, 0xf0, 0x74, 0x04, 0x60,
-+ 0xf0, 0x73, 0x0d, 0xaa, 0xee, 0xfd, 0x10, 0xf8,
-+ 0x2a, 0xa3, 0xf8, 0x44, 0x0d, 0xcb, 0x10, 0xf8,
-+ 0x2a, 0xa4, 0xf8, 0x45, 0x0d, 0xd7, 0x76, 0x00,
-+ 0x02, 0x00, 0xf2, 0x74, 0x09, 0xe8, 0xf0, 0x20,
-+ 0x22, 0x00, 0x76, 0xf8, 0x2a, 0xa4, 0x00, 0x00,
-+ 0x76, 0xf8, 0x2a, 0xa7, 0x00, 0x00, 0xf0, 0x73,
-+ 0x0d, 0xd7, 0x76, 0x00, 0x02, 0x00, 0xf2, 0x74,
-+ 0x09, 0xe8, 0xf0, 0x20, 0x20, 0x00, 0x76, 0xf8,
-+ 0x2a, 0xa3, 0x00, 0x00, 0x76, 0xf8, 0x2a, 0xa7,
-+ 0x00, 0x01, 0xf0, 0x74, 0x0c, 0x5e, 0xf0, 0xe0,
-+ 0xf0, 0x10, 0x3a, 0x98, 0xf8, 0x47, 0x0d, 0xe1,
-+ 0x76, 0xf8, 0x27, 0x6e, 0x00, 0x00, 0xee, 0x03,
-+ 0xfc, 0x00, 0x4a, 0x11, 0xee, 0xfe, 0x77, 0x11,
-+ 0x20, 0x00, 0x76, 0x00, 0xaa, 0xaa, 0x76, 0x01,
-+ 0x02, 0x00, 0xf2, 0x74, 0x06, 0x6c, 0xf4, 0x95,
-+ 0x48, 0x11, 0x76, 0x00, 0x55, 0x55, 0x76, 0x01,
-+ 0x02, 0x00, 0x48, 0x11, 0xf2, 0x74, 0x06, 0x6c,
-+ 0xf0, 0x00, 0x02, 0x00, 0x76, 0xf8, 0x2a, 0xa3,
-+ 0x00, 0x00, 0x76, 0xf8, 0x2a, 0xa4, 0x00, 0x00,
-+ 0xe8, 0x00, 0x4e, 0x00, 0xfb, 0x80, 0x15, 0x3e,
-+ 0xf4, 0x95, 0xe8, 0x04, 0x80, 0xf8, 0x2a, 0xa5,
-+ 0x76, 0x00, 0x2a, 0xa8, 0xf9, 0x80, 0x14, 0x87,
-+ 0x76, 0x00, 0x2a, 0xad, 0xfb, 0x80, 0x13, 0x62,
-+ 0xf4, 0x95, 0xe8, 0x02, 0x10, 0xf8, 0x2a, 0xa5,
-+ 0xf9, 0x80, 0x14, 0x63, 0xfb, 0x80, 0x16, 0x66,
-+ 0xf4, 0x95, 0xe8, 0x1c, 0xfb, 0x80, 0x16, 0x87,
-+ 0xf4, 0x95, 0xe8, 0x1c, 0xe8, 0x01, 0x4e, 0x00,
-+ 0xfb, 0x80, 0x17, 0xd6, 0xf4, 0x95, 0xe8, 0x00,
-+ 0x80, 0xf8, 0x2a, 0xa6, 0x76, 0x00, 0x2a, 0xb7,
-+ 0xf9, 0x80, 0x16, 0xaa, 0x10, 0xf8, 0x2a, 0xa6,
-+ 0xf9, 0x80, 0x17, 0x5c, 0x10, 0xf8, 0x2a, 0xa6,
-+ 0xf9, 0x80, 0x17, 0x6f, 0xee, 0x02, 0x8a, 0x11,
-+ 0xfc, 0x00, 0xf4, 0x95, 0x4a, 0x08, 0x4a, 0x09,
-+ 0x4a, 0x0a, 0x4a, 0x07, 0x4a, 0x1d, 0x68, 0xf8,
-+ 0x00, 0x07, 0x7d, 0x3f, 0x69, 0xf8, 0x00, 0x07,
-+ 0x40, 0x00, 0x68, 0xf8, 0x00, 0x1d, 0xff, 0xfc,
-+ 0x10, 0xf8, 0x2a, 0xa7, 0xf8, 0x44, 0x0e, 0x4b,
-+ 0x76, 0xf8, 0x2a, 0xa3, 0x00, 0x01, 0xf0, 0x73,
-+ 0x0e, 0x4e, 0x76, 0xf8, 0x2a, 0xa4, 0x00, 0x01,
-+ 0x8a, 0x1d, 0x8a, 0x07, 0x8a, 0x0a, 0x8a, 0x09,
-+ 0x8a, 0x08, 0xf4, 0xeb, 0x4a, 0x11, 0x4a, 0x16,
-+ 0x4a, 0x17, 0xee, 0xfe, 0x88, 0x0e, 0x71, 0x08,
-+ 0x00, 0x16, 0x71, 0x06, 0x00, 0x17, 0x11, 0x07,
-+ 0xf0, 0x66, 0x00, 0x0d, 0xf0, 0x00, 0x25, 0xa0,
-+ 0x88, 0x11, 0x76, 0x01, 0x00, 0x06, 0x81, 0x00,
-+ 0xf2, 0x74, 0x06, 0xce, 0xf0, 0x00, 0x00, 0x01,
-+ 0x76, 0x01, 0x00, 0x06, 0x70, 0x00, 0x00, 0x16,
-+ 0x48, 0x11, 0xf2, 0x74, 0x06, 0xce, 0xf0, 0x00,
-+ 0x00, 0x07, 0x70, 0x81, 0x00, 0x17, 0xee, 0x02,
-+ 0x8a, 0x17, 0x8a, 0x16, 0x8a, 0x11, 0xfc, 0x00,
-+ 0x4a, 0x11, 0x88, 0x0e, 0x71, 0x02, 0x00, 0x12,
-+ 0x11, 0x03, 0xf0, 0x66, 0x00, 0x0d, 0xf0, 0x00,
-+ 0x24, 0x00, 0x88, 0x11, 0xf4, 0x95, 0x70, 0x81,
-+ 0x00, 0x12, 0x6e, 0xe2, 0xff, 0xfe, 0x0e, 0x8d,
-+ 0xf4, 0x95, 0xe8, 0x00, 0xe8, 0x01, 0x80, 0xe1,
-+ 0x00, 0x02, 0x76, 0xe1, 0x00, 0x03, 0x00, 0xff,
-+ 0x76, 0xe1, 0x00, 0x04, 0x00, 0x00, 0x76, 0xe1,
-+ 0x00, 0x0b, 0x00, 0x00, 0x76, 0xe1, 0x00, 0x0c,
-+ 0x00, 0x00, 0x81, 0xe1, 0x00, 0x01, 0x8a, 0x11,
-+ 0xfc, 0x00, 0x4a, 0x11, 0xee, 0xfc, 0x88, 0x0e,
-+ 0xf4, 0x95, 0xf1, 0x66, 0x00, 0x0d, 0xf3, 0x00,
-+ 0x24, 0x00, 0x89, 0x11, 0xf4, 0x95, 0xf4, 0x95,
-+ 0x76, 0xe1, 0x00, 0x0c, 0x00, 0x00, 0x76, 0xe1,
-+ 0x00, 0x0b, 0x00, 0x00, 0x76, 0xe1, 0x00, 0x02,
-+ 0x00, 0x01, 0x76, 0x00, 0x00, 0x00, 0x76, 0x01,
-+ 0x00, 0x00, 0x80, 0x02, 0x76, 0x03, 0x00, 0x00,
-+ 0xf2, 0x74, 0x0c, 0xb9, 0xf4, 0x95, 0xe8, 0x00,
-+ 0xee, 0x04, 0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11,
-+ 0x88, 0x19, 0xf4, 0x95, 0x73, 0x19, 0x00, 0x0e,
-+ 0xf1, 0x66, 0x00, 0x0d, 0xf2, 0x00, 0x24, 0x00,
-+ 0x77, 0x15, 0x25, 0xa0, 0x77, 0x14, 0x00, 0x00,
-+ 0x77, 0x1a, 0x00, 0x1f, 0xf0, 0x72, 0x0f, 0x14,
-+ 0xf6, 0xb8, 0x49, 0x19, 0x09, 0x85, 0xf8, 0x4c,
-+ 0x0f, 0x13, 0xf1, 0x00, 0x00, 0x05, 0x89, 0x11,
-+ 0x49, 0x15, 0xf3, 0x00, 0x00, 0x01, 0x89, 0x13,
-+ 0x49, 0x15, 0xf3, 0x00, 0x00, 0x07, 0x89, 0x12,
-+ 0x11, 0x93, 0x1d, 0x91, 0x19, 0x92, 0x89, 0x10,
-+ 0xf4, 0x95, 0xf4, 0x95, 0x6c, 0x80, 0x0f, 0x13,
-+ 0x11, 0x93, 0x1d, 0x91, 0x19, 0x92, 0x89, 0x10,
-+ 0xf4, 0x95, 0xf4, 0x95, 0x6c, 0x80, 0x0f, 0x13,
-+ 0x11, 0x93, 0x1d, 0x91, 0x19, 0x92, 0x89, 0x10,
-+ 0xf4, 0x95, 0xf4, 0x95, 0x6c, 0x80, 0x0f, 0x13,
-+ 0x11, 0x93, 0x1d, 0x91, 0x19, 0x92, 0x89, 0x10,
-+ 0xf4, 0x95, 0xf4, 0x95, 0x6c, 0x80, 0x0f, 0x13,
-+ 0x11, 0x93, 0x1d, 0x91, 0x19, 0x92, 0x89, 0x10,
-+ 0xf4, 0x95, 0xf4, 0x95, 0x6c, 0x80, 0x0f, 0x13,
-+ 0x11, 0x93, 0x1d, 0x91, 0x19, 0x92, 0x89, 0x11,
-+ 0xf4, 0x95, 0xf4, 0x95, 0x6c, 0x81, 0x0f, 0x13,
-+ 0x6d, 0x94, 0x6d, 0xed, 0x00, 0x0d, 0x48, 0x14,
-+ 0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11, 0x4a, 0x16,
-+ 0x4a, 0x17, 0xee, 0xf8, 0x88, 0x17, 0x10, 0x0d,
-+ 0x80, 0x04, 0x10, 0x0c, 0x80, 0x05, 0x71, 0x0e,
-+ 0x00, 0x16, 0x73, 0x17, 0x00, 0x0e, 0xf0, 0x66,
-+ 0x00, 0x0d, 0xf0, 0x00, 0x24, 0x00, 0x88, 0x11,
-+ 0x10, 0xf8, 0x27, 0x63, 0xf8, 0x45, 0x0f, 0x32,
-+ 0xf2, 0x74, 0x0e, 0x9f, 0xf4, 0x95, 0x48, 0x17,
-+ 0x10, 0xf8, 0x27, 0x60, 0xf8, 0x44, 0x0f, 0x3d,
-+ 0x60, 0xe1, 0x00, 0x02, 0x00, 0x01, 0xf8, 0x20,
-+ 0x0f, 0x6d, 0xf0, 0x73, 0x11, 0x33, 0x10, 0x04,
-+ 0x80, 0x00, 0x10, 0x05, 0xf0, 0x74, 0x06, 0x9f,
-+ 0x11, 0x04, 0xf3, 0x00, 0x00, 0x01, 0x81, 0x04,
-+ 0x6d, 0x8e, 0x77, 0x10, 0x00, 0x01, 0x71, 0xe1,
-+ 0x00, 0x02, 0x00, 0x12, 0xf4, 0xaa, 0xf8, 0x30,
-+ 0x0f, 0x62, 0x77, 0x10, 0x00, 0x02, 0xf4, 0xaa,
-+ 0xf8, 0x30, 0x0f, 0x6d, 0x45, 0xe1, 0x00, 0x0b,
-+ 0x88, 0x10, 0x43, 0xe1, 0x00, 0x0c, 0x83, 0xf8,
-+ 0x00, 0x12, 0xf4, 0x95, 0xf4, 0x95, 0xf4, 0xaa,
-+ 0xf8, 0x30, 0x0f, 0x6d, 0xf0, 0x73, 0x0f, 0x96,
-+ 0xf5, 0x00, 0x81, 0x04, 0x49, 0x16, 0xf5, 0x20,
-+ 0x89, 0x16, 0x76, 0xe1, 0x00, 0x0c, 0x00, 0x00,
-+ 0x76, 0xe1, 0x00, 0x04, 0x00, 0x00, 0x48, 0x16,
-+ 0xf8, 0x45, 0x11, 0x33, 0xf7, 0xb8, 0x71, 0xe1,
-+ 0x00, 0x02, 0x00, 0x12, 0x10, 0xf8, 0x00, 0x12,
-+ 0xf0, 0x10, 0x00, 0x03, 0xf8, 0x46, 0x0f, 0x8c,
-+ 0x10, 0xf8, 0x00, 0x12, 0xf0, 0x10, 0x00, 0x03,
-+ 0xf8, 0x45, 0x10, 0x16, 0x77, 0x10, 0x00, 0x01,
-+ 0xf4, 0xaa, 0xf8, 0x30, 0x0f, 0x9c, 0x77, 0x10,
-+ 0x00, 0x02, 0xf4, 0xaa, 0xf8, 0x30, 0x0f, 0xa8,
-+ 0xf0, 0x73, 0x0f, 0x96, 0x77, 0x10, 0x00, 0x04,
-+ 0xf4, 0xaa, 0xf8, 0x30, 0x10, 0xb7, 0x77, 0x10,
-+ 0x00, 0x05, 0xf4, 0xaa, 0xf8, 0x30, 0x10, 0xbc,
-+ 0xf2, 0x74, 0x0e, 0x9f, 0xf4, 0x95, 0x48, 0x17,
-+ 0xf0, 0x73, 0x11, 0x31, 0x76, 0xe1, 0x00, 0x0c,
-+ 0x00, 0x00, 0x76, 0xe1, 0x00, 0x0b, 0x00, 0x00,
-+ 0x76, 0xe1, 0x00, 0x04, 0x00, 0x00, 0x76, 0xe1,
-+ 0x00, 0x02, 0x00, 0x02, 0x11, 0xe1, 0x00, 0x0c,
-+ 0xe8, 0x03, 0xf6, 0x20, 0x89, 0x12, 0xf4, 0x95,
-+ 0x77, 0x10, 0x00, 0x03, 0xf5, 0xaa, 0xf8, 0x30,
-+ 0x0f, 0xb6, 0x6b, 0xf8, 0x27, 0x6f, 0x00, 0x01,
-+ 0x88, 0x10, 0xf4, 0x95, 0xf4, 0x95, 0xf5, 0xae,
-+ 0xf8, 0x20, 0x0f, 0xbd, 0x48, 0x16, 0x80, 0x06,
-+ 0x88, 0x13, 0xf4, 0x95, 0x77, 0x10, 0x00, 0x03,
-+ 0xf6, 0xab, 0xf8, 0x20, 0x0f, 0xc8, 0x6b, 0xf8,
-+ 0x27, 0x6f, 0x00, 0x01, 0x12, 0x06, 0xf8, 0x45,
-+ 0x10, 0x00, 0x10, 0xe1, 0x00, 0x04, 0x80, 0x00,
-+ 0x10, 0x05, 0x80, 0x01, 0x10, 0x04, 0x80, 0x02,
-+ 0x10, 0x06, 0x80, 0x03, 0x48, 0x11, 0xf2, 0x74,
-+ 0x07, 0x1e, 0xf0, 0x00, 0x00, 0x05, 0x10, 0x06,
-+ 0x00, 0xe1, 0x00, 0x04, 0x80, 0xe1, 0x00, 0x04,
-+ 0x10, 0x06, 0x00, 0xe1, 0x00, 0x0c, 0x80, 0xe1,
-+ 0x00, 0x0c, 0x88, 0x12, 0x11, 0x06, 0x10, 0x04,
-+ 0xf6, 0x00, 0x80, 0x04, 0x48, 0x16, 0xf6, 0x20,
-+ 0x88, 0x16, 0x89, 0x13, 0xf4, 0x95, 0x77, 0x10,
-+ 0x00, 0x03, 0xf6, 0xab, 0xf8, 0x20, 0x0f, 0xf5,
-+ 0x6b, 0xf8, 0x27, 0x6f, 0x00, 0x01, 0x77, 0x10,
-+ 0x00, 0x0c, 0x71, 0xe1, 0x00, 0x04, 0x00, 0x13,
-+ 0xf6, 0xab, 0xf8, 0x20, 0x10, 0x00, 0x6b, 0xf8,
-+ 0x27, 0x6f, 0x00, 0x01, 0x6c, 0xe2, 0xff, 0xfd,
-+ 0x11, 0x31, 0xf6, 0xb8, 0x6f, 0xe1, 0x00, 0x05,
-+ 0x0c, 0x48, 0x6f, 0xe1, 0x00, 0x06, 0x0c, 0x18,
-+ 0xf0, 0x30, 0x0f, 0xff, 0xf0, 0x00, 0x00, 0x03,
-+ 0x80, 0xe1, 0x00, 0x0b, 0x76, 0xe1, 0x00, 0x02,
-+ 0x00, 0x03, 0x48, 0x16, 0xf8, 0x45, 0x11, 0x33,
-+ 0x71, 0xe1, 0x00, 0x0c, 0x00, 0x12, 0x10, 0xe1,
-+ 0x00, 0x0b, 0x49, 0x12, 0xf6, 0x20, 0x88, 0x13,
-+ 0xe8, 0x0c, 0xf6, 0x20, 0x88, 0x10, 0xf4, 0x95,
-+ 0xf4, 0x95, 0xf5, 0xab, 0xf8, 0x20, 0x10, 0x27,
-+ 0x48, 0x13, 0x80, 0x06, 0x88, 0x10, 0xf4, 0x95,
-+ 0xf4, 0x95, 0xf5, 0xae, 0xf8, 0x20, 0x10, 0x30,
-+ 0x70, 0x06, 0x00, 0x16, 0x12, 0x06, 0xf8, 0x45,
-+ 0x10, 0x5f, 0x10, 0xe1, 0x00, 0x04, 0x80, 0x00,
-+ 0x10, 0x05, 0x80, 0x01, 0x10, 0x04, 0x80, 0x02,
-+ 0x10, 0x06, 0x80, 0x03, 0x48, 0x11, 0xf2, 0x74,
-+ 0x07, 0x1e, 0xf0, 0x00, 0x00, 0x05, 0x10, 0x06,
-+ 0x00, 0xe1, 0x00, 0x04, 0x80, 0xe1, 0x00, 0x04,
-+ 0x10, 0x06, 0x00, 0xe1, 0x00, 0x0c, 0x80, 0xe1,
-+ 0x00, 0x0c, 0x88, 0x12, 0x11, 0x06, 0x10, 0x04,
-+ 0xf6, 0x00, 0x80, 0x04, 0x48, 0x16, 0xf6, 0x20,
-+ 0x88, 0x16, 0xf4, 0x95, 0x77, 0x10, 0x00, 0x0c,
-+ 0x71, 0xe1, 0x00, 0x04, 0x00, 0x13, 0xf6, 0xab,
-+ 0xf8, 0x20, 0x10, 0x5f, 0x6b, 0xf8, 0x27, 0x6f,
-+ 0x00, 0x01, 0x77, 0x10, 0x00, 0x0c, 0xf6, 0xaa,
-+ 0xf8, 0x20, 0x10, 0x6b, 0xf2, 0x74, 0x0e, 0x9f,
-+ 0xf4, 0x95, 0x48, 0x17, 0x71, 0xe1, 0x00, 0x0c,
-+ 0x00, 0x12, 0x77, 0x10, 0x00, 0x0c, 0xf4, 0xaa,
-+ 0xf8, 0x30, 0x10, 0x7c, 0x77, 0x10, 0x00, 0x0c,
-+ 0x71, 0xe1, 0x00, 0x0b, 0x00, 0x13, 0xf6, 0xab,
-+ 0xf8, 0x30, 0x10, 0xb4, 0xe7, 0x30, 0xf7, 0xaa,
-+ 0xf8, 0x30, 0x10, 0xb4, 0xf2, 0x74, 0x0e, 0xc1,
-+ 0xf4, 0x95, 0x48, 0x17, 0x88, 0x12, 0xf4, 0x95,
-+ 0xf4, 0x95, 0x6c, 0x82, 0x10, 0x8d, 0x76, 0xe1,
-+ 0x00, 0x04, 0x00, 0x00, 0x76, 0xe1, 0x00, 0x02,
-+ 0x00, 0x05, 0xf0, 0x73, 0x10, 0xb4, 0x76, 0xe1,
-+ 0x00, 0x02, 0x00, 0x04, 0x77, 0x10, 0x00, 0x0c,
-+ 0x71, 0xe1, 0x00, 0x0b, 0x00, 0x12, 0xf5, 0xaa,
-+ 0xf8, 0x20, 0x10, 0x9a, 0xf0, 0x73, 0x10, 0x9c,
-+ 0x77, 0x12, 0x00, 0x0c, 0x76, 0x00, 0x00, 0x00,
-+ 0x70, 0x01, 0x00, 0x12, 0x70, 0x02, 0x00, 0x17,
-+ 0x76, 0x03, 0x00, 0x01, 0x48, 0x11, 0xf2, 0x74,
-+ 0x0c, 0xb9, 0xf0, 0x00, 0x00, 0x05, 0x76, 0xe1,
-+ 0x00, 0x04, 0x00, 0x00, 0x77, 0x10, 0x00, 0x0c,
-+ 0x71, 0xe1, 0x00, 0x0b, 0x00, 0x12, 0xf6, 0xaa,
-+ 0xf8, 0x20, 0x11, 0x1c, 0x48, 0x16, 0xf8, 0x45,
-+ 0x11, 0x33, 0x60, 0xe1, 0x00, 0x02, 0x00, 0x05,
-+ 0xf8, 0x20, 0x10, 0xdf, 0x10, 0xe1, 0x00, 0x0b,
-+ 0x08, 0xe1, 0x00, 0x0c, 0x11, 0xe1, 0x00, 0x04,
-+ 0xf8, 0x4d, 0x10, 0xc7, 0x6b, 0xf8, 0x27, 0x6f,
-+ 0x00, 0x01, 0x88, 0x10, 0xf4, 0x95, 0xf4, 0x95,
-+ 0xf5, 0xae, 0xf8, 0x20, 0x10, 0xcf, 0x48, 0x16,
-+ 0xf4, 0x95, 0x48, 0x08, 0xf8, 0x45, 0x11, 0x16,
-+ 0x6f, 0xe1, 0x00, 0x0c, 0x0d, 0x00, 0x81, 0xe1,
-+ 0x00, 0x0c, 0x11, 0x04, 0xf5, 0x00, 0x81, 0x04,
-+ 0x49, 0x16, 0xf5, 0x20, 0x89, 0x16, 0xf0, 0x73,
-+ 0x11, 0x0e, 0x10, 0xe1, 0x00, 0x0b, 0x71, 0xe1,
-+ 0x00, 0x0c, 0x00, 0x12, 0x88, 0x10, 0xf4, 0x95,
-+ 0xf4, 0x95, 0xf6, 0xaa, 0xf8, 0x30, 0x11, 0x16,
-+ 0x49, 0x12, 0xf6, 0x20, 0x88, 0x10, 0xf4, 0x95,
-+ 0xf4, 0x95, 0xf5, 0xae, 0xf8, 0x20, 0x10, 0xf3,
-+ 0x48, 0x16, 0x80, 0x06, 0x48, 0x08, 0xf8, 0x45,
-+ 0x11, 0x16, 0x10, 0x04, 0x70, 0x02, 0x00, 0x17,
-+ 0x80, 0x00, 0x76, 0x03, 0x00, 0x00, 0x10, 0x06,
-+ 0x80, 0x01, 0x10, 0x05, 0xf0, 0x74, 0x0c, 0xb9,
-+ 0x10, 0x06, 0x00, 0xe1, 0x00, 0x0c, 0x80, 0xe1,
-+ 0x00, 0x0c, 0x11, 0x06, 0x10, 0x04, 0xf6, 0x00,
-+ 0x80, 0x04, 0x48, 0x16, 0xf6, 0x20, 0x88, 0x16,
-+ 0x10, 0xe1, 0x00, 0x0c, 0x08, 0xe1, 0x00, 0x0b,
-+ 0xf8, 0x45, 0x11, 0x1c, 0xf0, 0x73, 0x11, 0x31,
-+ 0xf2, 0x74, 0x0e, 0x9f, 0xf4, 0x95, 0x48, 0x17,
-+ 0xf0, 0x73, 0x11, 0x33, 0x76, 0xe1, 0x00, 0x0c,
-+ 0x00, 0x00, 0x76, 0xe1, 0x00, 0x0b, 0x00, 0x00,
-+ 0x76, 0xe1, 0x00, 0x02, 0x00, 0x01, 0x10, 0x04,
-+ 0x80, 0x00, 0x10, 0x05, 0xf0, 0x74, 0x06, 0x9f,
-+ 0x88, 0x12, 0xf4, 0x95, 0x77, 0x10, 0x00, 0xff,
-+ 0xf4, 0xaa, 0xf8, 0x30, 0x11, 0x33, 0x6c, 0x86,
-+ 0x0f, 0x70, 0xee, 0x08, 0x8a, 0x17, 0x8a, 0x16,
-+ 0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11, 0xee, 0xfc,
-+ 0xf4, 0x95, 0x71, 0x06, 0x00, 0x12, 0x88, 0x11,
-+ 0x73, 0x12, 0x00, 0x0e, 0xf1, 0x66, 0x00, 0x0d,
-+ 0xf3, 0x00, 0x24, 0x00, 0x89, 0x14, 0x13, 0x81,
-+ 0xf7, 0x7a, 0xf3, 0x30, 0x00, 0x01, 0x81, 0xf8,
-+ 0x27, 0x60, 0x13, 0xe1, 0x00, 0x01, 0xf7, 0x7c,
-+ 0xf3, 0x30, 0x00, 0x03, 0x81, 0xf8, 0x27, 0x61,
-+ 0xe9, 0x0f, 0x19, 0xe1, 0x00, 0x01, 0x81, 0xf8,
-+ 0x27, 0x62, 0x71, 0xe4, 0x00, 0x03, 0x00, 0x13,
-+ 0xf6, 0xb8, 0x49, 0x13, 0xf3, 0x00, 0x00, 0x01,
-+ 0xf3, 0x30, 0x00, 0x0f, 0x49, 0x0b, 0x09, 0xf8,
-+ 0x27, 0x62, 0xf8, 0x4d, 0x11, 0x75, 0x77, 0x10,
-+ 0x00, 0xff, 0xf4, 0xab, 0xf8, 0x30, 0x11, 0x75,
-+ 0x57, 0xf8, 0x27, 0x6c, 0xf3, 0x00, 0x00, 0x01,
-+ 0x4f, 0xf8, 0x27, 0x6c, 0x76, 0xf8, 0x27, 0x63,
-+ 0x00, 0x01, 0xf0, 0x73, 0x11, 0x78, 0x76, 0xf8,
-+ 0x27, 0x63, 0x00, 0x00, 0x70, 0xe4, 0x00, 0x03,
-+ 0x27, 0x62, 0x76, 0xf8, 0x27, 0x64, 0x00, 0x00,
-+ 0x11, 0xf8, 0x27, 0x61, 0x61, 0xf8, 0x00, 0x0b,
-+ 0x00, 0x02, 0xf8, 0x20, 0x11, 0x8d, 0xe9, 0x01,
-+ 0x6f, 0xe1, 0x00, 0x02, 0x0f, 0x18, 0x81, 0xf8,
-+ 0x27, 0x64, 0x11, 0xf8, 0x27, 0x61, 0x61, 0xf8,
-+ 0x00, 0x0b, 0x00, 0x01, 0xf8, 0x20, 0x11, 0xa9,
-+ 0x10, 0xf8, 0x27, 0x64, 0xf1, 0x00, 0x00, 0x04,
-+ 0x89, 0x13, 0xe9, 0xb8, 0xf5, 0x20, 0x81, 0xf8,
-+ 0x27, 0x65, 0x60, 0x84, 0x00, 0x02, 0xf8, 0x20,
-+ 0x11, 0xa9, 0x70, 0x00, 0x00, 0x11, 0x70, 0x01,
-+ 0x00, 0x13, 0x70, 0x02, 0x27, 0x65, 0xf2, 0x74,
-+ 0x0f, 0x18, 0xf4, 0x95, 0x48, 0x12, 0xee, 0x04,
-+ 0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11, 0x4a, 0x16,
-+ 0x4a, 0x17, 0xee, 0xfc, 0xe8, 0x00, 0x4e, 0xf8,
-+ 0x27, 0x66, 0xe8, 0x00, 0x4e, 0xf8, 0x27, 0x68,
-+ 0xe8, 0x00, 0x4e, 0xf8, 0x27, 0x6c, 0xe8, 0x00,
-+ 0x4e, 0xf8, 0x27, 0x6a, 0x77, 0x12, 0x27, 0x40,
-+ 0x77, 0x11, 0x24, 0x00, 0x77, 0x1a, 0x00, 0x1f,
-+ 0xf0, 0x72, 0x11, 0xdb, 0x70, 0x92, 0x00, 0x11,
-+ 0x76, 0xe1, 0x00, 0x01, 0xff, 0xff, 0x76, 0x81,
-+ 0x00, 0x00, 0x76, 0xe1, 0x00, 0x02, 0x00, 0x00,
-+ 0x76, 0xe1, 0x00, 0x03, 0x00, 0xff, 0x76, 0xe1,
-+ 0x00, 0x0c, 0x00, 0x00, 0x76, 0xe1, 0x00, 0x0b,
-+ 0x00, 0x00, 0x76, 0xe1, 0x00, 0x04, 0x00, 0x00,
-+ 0x6d, 0xe9, 0x00, 0x0d, 0xf0, 0x20, 0x25, 0xa0,
-+ 0xf1, 0x00, 0x00, 0x07, 0x89, 0x11, 0xf1, 0x00,
-+ 0x00, 0x01, 0x81, 0x02, 0x88, 0x16, 0xf4, 0x95,
-+ 0x77, 0x17, 0x00, 0x20, 0x76, 0x86, 0x00, 0xff,
-+ 0x76, 0x00, 0x00, 0x00, 0x76, 0x01, 0x00, 0x06,
-+ 0x10, 0x02, 0xf0, 0x74, 0x06, 0x6c, 0x76, 0x00,
-+ 0x00, 0x00, 0x76, 0x01, 0x00, 0x06, 0xf2, 0x74,
-+ 0x06, 0x6c, 0xf4, 0x95, 0x48, 0x11, 0x10, 0x02,
-+ 0xf0, 0x00, 0x00, 0x0d, 0x80, 0x02, 0x6d, 0xe9,
-+ 0x00, 0x0d, 0x6d, 0xee, 0x00, 0x0d, 0x6c, 0xef,
-+ 0xff, 0xff, 0x11, 0xe8, 0xf0, 0x74, 0x0c, 0x9d,
-+ 0xee, 0x04, 0x8a, 0x17, 0x8a, 0x16, 0x8a, 0x11,
-+ 0xfc, 0x00, 0x4a, 0x11, 0x4a, 0x16, 0x4a, 0x17,
-+ 0xee, 0xfa, 0x88, 0x11, 0x10, 0x0a, 0x49, 0x11,
-+ 0xf8, 0x4d, 0x12, 0x9f, 0x48, 0x08, 0xf8, 0x45,
-+ 0x12, 0x9f, 0x80, 0x04, 0x12, 0x81, 0xf5, 0x78,
-+ 0x89, 0x12, 0xf4, 0x95, 0xf4, 0x95, 0x6c, 0xe2,
-+ 0xff, 0xb9, 0x12, 0x8a, 0x61, 0xf8, 0x00, 0x08,
-+ 0x00, 0x80, 0xf8, 0x30, 0x12, 0x8a, 0x13, 0xe1,
-+ 0x00, 0x01, 0xf0, 0xe8, 0xf7, 0x78, 0xf1, 0xa0,
-+ 0xf2, 0x30, 0x1f, 0xff, 0x88, 0x17, 0xf4, 0x95,
-+ 0x77, 0x12, 0x24, 0x00, 0x77, 0x16, 0x00, 0x00,
-+ 0x77, 0x13, 0x00, 0x20, 0xf6, 0xb8, 0x48, 0x17,
-+ 0x08, 0xe2, 0x00, 0x01, 0xf8, 0x45, 0x12, 0x42,
-+ 0x6d, 0xea, 0x00, 0x0d, 0x6d, 0x96, 0x6c, 0xeb,
-+ 0xff, 0xff, 0x12, 0x34, 0xf0, 0x73, 0x12, 0x90,
-+ 0x56, 0xf8, 0x27, 0x6a, 0xf0, 0x00, 0x00, 0x01,
-+ 0x4e, 0xf8, 0x27, 0x6a, 0x60, 0x82, 0x00, 0x01,
-+ 0xf8, 0x30, 0x12, 0x54, 0x70, 0x00, 0x00, 0x16,
-+ 0xf2, 0x74, 0x11, 0x38, 0xf4, 0x95, 0x48, 0x11,
-+ 0xf0, 0x73, 0x12, 0x90, 0x70, 0x00, 0x00, 0x16,
-+ 0xf2, 0x74, 0x11, 0x38, 0xf4, 0x95, 0x48, 0x11,
-+ 0x72, 0x10, 0x2a, 0x9e, 0xf4, 0x95, 0xf4, 0xaf,
-+ 0xf8, 0x30, 0x12, 0x6e, 0x76, 0x00, 0x00, 0x00,
-+ 0x76, 0x01, 0x00, 0xbc, 0x70, 0x02, 0x00, 0x16,
-+ 0x76, 0x03, 0x00, 0x00, 0xf2, 0x74, 0x0c, 0xb9,
-+ 0xf4, 0x95, 0x48, 0x11, 0xf0, 0x73, 0x12, 0x90,
-+ 0x10, 0xf8, 0x27, 0x6e, 0xf8, 0x44, 0x12, 0x90,
-+ 0x76, 0x00, 0x00, 0x00, 0x76, 0x01, 0x00, 0xbc,
-+ 0x70, 0x02, 0x00, 0x16, 0x76, 0x03, 0x00, 0x00,
-+ 0xf2, 0x74, 0x0c, 0xb9, 0xf4, 0x95, 0x48, 0x11,
-+ 0xf0, 0x74, 0x0c, 0x5e, 0xf0, 0xe0, 0xf0, 0x10,
-+ 0x13, 0x88, 0xf8, 0x42, 0x12, 0x90, 0x76, 0xf8,
-+ 0x27, 0x6e, 0x00, 0x01, 0xf0, 0x73, 0x12, 0x90,
-+ 0x56, 0xf8, 0x27, 0x66, 0xf0, 0x00, 0x00, 0x01,
-+ 0x4e, 0xf8, 0x27, 0x66, 0x6d, 0xe9, 0x00, 0x5e,
-+ 0x56, 0xf8, 0x27, 0x68, 0xf0, 0x00, 0x00, 0x01,
-+ 0x4e, 0xf8, 0x27, 0x68, 0x71, 0x04, 0x00, 0x12,
-+ 0x6e, 0xea, 0xff, 0xff, 0x12, 0x18, 0x70, 0x04,
-+ 0x00, 0x12, 0xee, 0x06, 0x8a, 0x17, 0x8a, 0x16,
-+ 0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11, 0xee, 0xfe,
-+ 0x88, 0x0e, 0xf4, 0x95, 0xf0, 0x66, 0x00, 0x0d,
-+ 0xf0, 0x00, 0x25, 0xa0, 0x88, 0x11, 0xf4, 0x95,
-+ 0xf4, 0x95, 0x76, 0x81, 0x00, 0xff, 0x76, 0x00,
-+ 0x00, 0x00, 0x76, 0x01, 0x00, 0x06, 0xf2, 0x74,
-+ 0x06, 0x6c, 0xf0, 0x00, 0x00, 0x01, 0x76, 0x00,
-+ 0x00, 0x00, 0x76, 0x01, 0x00, 0x06, 0x48, 0x11,
-+ 0xf2, 0x74, 0x06, 0x6c, 0xf0, 0x00, 0x00, 0x07,
-+ 0xee, 0x02, 0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11,
-+ 0x88, 0x0e, 0xf4, 0x95, 0xf0, 0x66, 0x00, 0x0d,
-+ 0xf0, 0x00, 0x24, 0x00, 0x88, 0x11, 0xf4, 0x95,
-+ 0xf4, 0x95, 0x76, 0xe1, 0x00, 0x01, 0xff, 0xff,
-+ 0x76, 0x81, 0x00, 0x00, 0x76, 0xe1, 0x00, 0x02,
-+ 0x00, 0x00, 0x76, 0xe1, 0x00, 0x03, 0x00, 0xff,
-+ 0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11, 0xf4, 0x95,
-+ 0x13, 0x03, 0x88, 0x11, 0xfa, 0x4d, 0x12, 0xec,
-+ 0x71, 0x02, 0x00, 0x12, 0xf3, 0x10, 0x00, 0x01,
-+ 0x89, 0x1a, 0xf4, 0x95, 0xf0, 0x72, 0x12, 0xeb,
-+ 0x70, 0x91, 0x00, 0x12, 0x8a, 0x11, 0xfc, 0x00,
-+ 0xf4, 0x95, 0x4a, 0x0b, 0x4a, 0x0c, 0x4a, 0x0d,
-+ 0xf7, 0xb8, 0xee, 0xfe, 0x10, 0xf8, 0x00, 0x08,
-+ 0x11, 0x06, 0xf1, 0xc0, 0x83, 0x00, 0xf4, 0x85,
-+ 0x11, 0x06, 0xf7, 0x85, 0x81, 0x06, 0xf6, 0xb8,
-+ 0xec, 0x0f, 0x1e, 0x06, 0x61, 0x00, 0x80, 0x00,
-+ 0xf8, 0x20, 0x13, 0x05, 0xf4, 0x84, 0xee, 0x02,
-+ 0x8a, 0x0d, 0x8a, 0x0c, 0x8a, 0x0b, 0xfc, 0x00,
-+ 0xf4, 0x95, 0x4a, 0x0b, 0x4a, 0x0c, 0x4a, 0x0d,
-+ 0xee, 0xfe, 0xf7, 0xb8, 0x80, 0x00, 0x10, 0xf8,
-+ 0x00, 0x08, 0xf4, 0x85, 0x11, 0x06, 0xf7, 0x85,
-+ 0x81, 0x06, 0xf6, 0xb8, 0xec, 0x0f, 0x1e, 0x06,
-+ 0xf0, 0xf0, 0x61, 0x00, 0x80, 0x00, 0xf8, 0x20,
-+ 0x13, 0x20, 0xf4, 0x84, 0xee, 0x02, 0x8a, 0x0d,
-+ 0x8a, 0x0c, 0x8a, 0x0b, 0xfc, 0x00, 0x4a, 0x11,
-+ 0x77, 0x11, 0x00, 0x7b, 0x76, 0x81, 0x2e, 0xec,
-+ 0x77, 0x11, 0x00, 0x7b, 0xee, 0xff, 0x71, 0x81,
-+ 0x00, 0x11, 0xee, 0x01, 0x76, 0xe1, 0x00, 0x01,
-+ 0x00, 0x00, 0x76, 0xe1, 0x00, 0x04, 0x00, 0x00,
-+ 0x76, 0xe1, 0x00, 0x06, 0x00, 0x00, 0x76, 0xe1,
-+ 0x00, 0x62, 0x00, 0x00, 0x76, 0xe1, 0x00, 0x76,
-+ 0x00, 0x00, 0x76, 0xe1, 0x00, 0x92, 0x00, 0x00,
-+ 0x76, 0xe1, 0x00, 0x94, 0x00, 0x00, 0x76, 0xe1,
-+ 0x00, 0xb0, 0x00, 0x00, 0x76, 0xe1, 0x00, 0xb3,
-+ 0x00, 0x00, 0x76, 0xe1, 0x00, 0xbe, 0x00, 0x00,
-+ 0x76, 0xe1, 0x00, 0xbf, 0x00, 0x00, 0x76, 0xe1,
-+ 0x00, 0xc1, 0x00, 0x00, 0x76, 0xe1, 0x00, 0xc3,
-+ 0x00, 0x00, 0x76, 0xe1, 0x00, 0xc5, 0x00, 0x00,
-+ 0x76, 0xe1, 0x00, 0xc7, 0x00, 0x00, 0x76, 0x81,
-+ 0x00, 0x00, 0x8a, 0x11, 0xf4, 0x95, 0xf4, 0xe4,
-+ 0x4a, 0x11, 0x4a, 0x16, 0x4a, 0x17, 0xee, 0xff,
-+ 0xf4, 0x95, 0x71, 0x06, 0x00, 0x16, 0xfb, 0x80,
-+ 0x16, 0xa2, 0x88, 0x17, 0xf4, 0x95, 0xf7, 0xb8,
-+ 0x10, 0xf8, 0x00, 0x17, 0xf0, 0x10, 0x00, 0x02,
-+ 0xfa, 0x46, 0x13, 0x88, 0x77, 0x11, 0x00, 0x00,
-+ 0x10, 0xf8, 0x00, 0x17, 0xf0, 0x10, 0x00, 0x02,
-+ 0xf8, 0x45, 0x13, 0xf9, 0x10, 0xf8, 0x00, 0x17,
-+ 0xf8, 0x45, 0x14, 0x39, 0x10, 0xf8, 0x00, 0x17,
-+ 0xf0, 0x10, 0x00, 0x01, 0xf8, 0x45, 0x14, 0x1f,
-+ 0xf0, 0x73, 0x14, 0x52, 0x10, 0xf8, 0x00, 0x17,
-+ 0xf0, 0x10, 0x00, 0x03, 0xf8, 0x45, 0x13, 0xd3,
-+ 0x10, 0xf8, 0x00, 0x17, 0xf0, 0x10, 0x00, 0x06,
-+ 0xf8, 0x44, 0x14, 0x52, 0x77, 0x12, 0x00, 0x7b,
-+ 0x71, 0x82, 0x00, 0x14, 0x61, 0xe4, 0x00, 0x07,
-+ 0x00, 0x40, 0xf8, 0x30, 0x14, 0x52, 0x49, 0x14,
-+ 0x48, 0x17, 0xf6, 0x00, 0x88, 0x12, 0xf4, 0x95,
-+ 0x77, 0x13, 0x00, 0x55, 0x77, 0x11, 0x00, 0x57,
-+ 0x6d, 0xea, 0x00, 0x3b, 0xe5, 0x01, 0x10, 0xe6,
-+ 0x00, 0x06, 0x80, 0x81, 0x48, 0x14, 0x00, 0xf8,
-+ 0x00, 0x17, 0x88, 0x12, 0xf4, 0x95, 0x77, 0x11,
-+ 0x00, 0x55, 0x10, 0xe2, 0x00, 0x40, 0x80, 0x81,
-+ 0x77, 0x11, 0x00, 0x57, 0x10, 0xe6, 0x00, 0x07,
-+ 0x80, 0x81, 0x77, 0x11, 0x00, 0x55, 0x10, 0xe2,
-+ 0x00, 0x45, 0x80, 0x81, 0x10, 0xe6, 0x00, 0x08,
-+ 0x77, 0x11, 0x00, 0x57, 0x80, 0x81, 0x77, 0x11,
-+ 0x00, 0x55, 0x10, 0xe2, 0x00, 0x4a, 0x80, 0x81,
-+ 0x77, 0x11, 0x00, 0x57, 0x10, 0xe6, 0x00, 0x09,
-+ 0x80, 0x81, 0xf2, 0x73, 0x14, 0x52, 0x77, 0x11,
-+ 0x03, 0xc0, 0x77, 0x12, 0x00, 0x7b, 0x10, 0x82,
-+ 0xf0, 0x00, 0x00, 0x07, 0x88, 0x13, 0xf4, 0x95,
-+ 0xf4, 0x95, 0x96, 0x1b, 0xf8, 0x30, 0x14, 0x52,
-+ 0x10, 0xe3, 0x00, 0x35, 0x77, 0x12, 0x00, 0x55,
-+ 0x80, 0x82, 0x77, 0x12, 0x00, 0x57, 0x10, 0xe6,
-+ 0x00, 0x04, 0x80, 0x82, 0x77, 0x12, 0x00, 0x55,
-+ 0x10, 0xe3, 0x00, 0x37, 0x80, 0x82, 0x77, 0x12,
-+ 0x00, 0x57, 0x10, 0xe6, 0x00, 0x05, 0x80, 0x82,
-+ 0x48, 0x11, 0xf0, 0x40, 0x00, 0x10, 0xf2, 0x73,
-+ 0x14, 0x50, 0xf0, 0x40, 0x00, 0x20, 0x77, 0x12,
-+ 0x00, 0x7b, 0x10, 0x82, 0xf0, 0x00, 0x00, 0x07,
-+ 0x88, 0x12, 0xf4, 0x95, 0xf4, 0x95, 0x96, 0x0d,
-+ 0xf8, 0x30, 0x14, 0x52, 0x10, 0xe2, 0x00, 0x34,
-+ 0x77, 0x13, 0x00, 0x55, 0x80, 0x83, 0x77, 0x13,
-+ 0x00, 0x57, 0x10, 0xe6, 0x00, 0x02, 0x80, 0x83,
-+ 0x10, 0xe2, 0x00, 0x36, 0x77, 0x12, 0x00, 0x55,
-+ 0x80, 0x82, 0x77, 0x12, 0x00, 0x57, 0x10, 0xe6,
-+ 0x00, 0x03, 0x80, 0x82, 0x48, 0x11, 0xf0, 0x40,
-+ 0x00, 0x04, 0xf2, 0x73, 0x14, 0x50, 0xf0, 0x40,
-+ 0x00, 0x08, 0x77, 0x12, 0x00, 0x7b, 0x10, 0x82,
-+ 0xf0, 0x00, 0x00, 0x07, 0x88, 0x12, 0xf4, 0x95,
-+ 0xf4, 0x95, 0x96, 0x0e, 0xf8, 0x30, 0x14, 0x52,
-+ 0x10, 0xe2, 0x00, 0x33, 0x77, 0x12, 0x00, 0x55,
-+ 0x80, 0x82, 0x77, 0x12, 0x00, 0x57, 0x10, 0xe6,
-+ 0x00, 0x01, 0x80, 0x82, 0x48, 0x11, 0xf2, 0x73,
-+ 0x14, 0x50, 0xf0, 0x40, 0x00, 0x02, 0x77, 0x12,
-+ 0x00, 0x7b, 0x10, 0x82, 0xf0, 0x00, 0x00, 0x07,
-+ 0x88, 0x12, 0xf4, 0x95, 0xf4, 0x95, 0x96, 0x0f,
-+ 0xf8, 0x30, 0x14, 0x52, 0x10, 0xe2, 0x00, 0x32,
-+ 0x77, 0x12, 0x00, 0x55, 0x77, 0x13, 0x00, 0x57,
-+ 0x80, 0x82, 0x48, 0x11, 0xe7, 0x62, 0xf0, 0x40,
-+ 0x00, 0x01, 0xe5, 0x01, 0x88, 0x11, 0xf4, 0x95,
-+ 0x77, 0x12, 0x00, 0x7b, 0x48, 0x11, 0x71, 0x82,
-+ 0x00, 0x12, 0x1a, 0xe2, 0x00, 0x07, 0x80, 0xe2,
-+ 0x00, 0x07, 0xf9, 0x80, 0x16, 0x9a, 0xee, 0x01,
-+ 0x8a, 0x17, 0x48, 0x11, 0x8a, 0x16, 0x8a, 0x11,
-+ 0xf4, 0xe4, 0x4a, 0x11, 0x88, 0x11, 0x77, 0x0e,
-+ 0x00, 0x05, 0x77, 0x12, 0x00, 0x55, 0xe8, 0x04,
-+ 0xf6, 0xb8, 0x28, 0xe1, 0x00, 0x02, 0xee, 0xff,
-+ 0x80, 0x82, 0x77, 0x12, 0x00, 0x57, 0xf0, 0x20,
-+ 0x80, 0x00, 0xee, 0x01, 0x1a, 0x82, 0x77, 0x12,
-+ 0x00, 0x57, 0x80, 0x82, 0xe8, 0x01, 0x32, 0xe1,
-+ 0x00, 0x02, 0xf5, 0x82, 0x77, 0x11, 0x00, 0x54,
-+ 0xf6, 0x93, 0x18, 0x81, 0x77, 0x11, 0x00, 0x54,
-+ 0xf2, 0xa0, 0x80, 0x81, 0x8a, 0x11, 0xf4, 0x95,
-+ 0xf4, 0xe4, 0x4a, 0x11, 0x4a, 0x16, 0xf4, 0x95,
-+ 0x71, 0x04, 0x00, 0x11, 0xfb, 0x80, 0x16, 0xa2,
-+ 0x88, 0x16, 0xf4, 0x95, 0x77, 0x12, 0x00, 0x55,
-+ 0x10, 0xe6, 0x00, 0x03, 0x80, 0x82, 0x77, 0x12,
-+ 0x00, 0x56, 0x10, 0xe1, 0x00, 0x02, 0x77, 0x13,
-+ 0x00, 0x56, 0x80, 0x82, 0x77, 0x12, 0x00, 0x56,
-+ 0x10, 0xe1, 0x00, 0x03, 0x80, 0x82, 0x10, 0xe1,
-+ 0x00, 0x04, 0x77, 0x12, 0x00, 0x56, 0x80, 0x82,
-+ 0x77, 0x12, 0x00, 0x56, 0x10, 0xe1, 0x00, 0x01,
-+ 0x80, 0x82, 0xe7, 0x12, 0xe5, 0x01, 0xf9, 0x80,
-+ 0x16, 0x9a, 0x8a, 0x16, 0x8a, 0x11, 0xf4, 0xe4,
-+ 0x4a, 0x11, 0x4a, 0x16, 0x4a, 0x17, 0xee, 0xf9,
-+ 0x77, 0x11, 0x00, 0x7b, 0x76, 0x00, 0x00, 0x16,
-+ 0x76, 0x01, 0x00, 0x17, 0x76, 0x02, 0x00, 0x1a,
-+ 0x76, 0x03, 0x00, 0x1b, 0x76, 0x04, 0x00, 0x1c,
-+ 0x76, 0x05, 0x00, 0x1d, 0x71, 0x81, 0x00, 0x17,
-+ 0x71, 0xe7, 0x00, 0x06, 0x00, 0x11, 0x10, 0x81,
-+ 0xf8, 0x44, 0x14, 0xdf, 0xf9, 0x80, 0x16, 0x53,
-+ 0xf6, 0xb8, 0xfb, 0x80, 0x15, 0x85, 0xf0, 0x20,
-+ 0xff, 0xff, 0xf6, 0xb8, 0xfb, 0x80, 0x16, 0x08,
-+ 0xf0, 0x20, 0xff, 0xff, 0x77, 0x11, 0x00, 0x7b,
-+ 0x71, 0x81, 0x00, 0x17, 0x76, 0xe7, 0x00, 0x06,
-+ 0x00, 0x01, 0x48, 0x17, 0x77, 0x16, 0x00, 0x00,
-+ 0x77, 0x10, 0x00, 0x04, 0x77, 0x15, 0x00, 0x03,
-+ 0x77, 0x14, 0x00, 0x02, 0x77, 0x13, 0x00, 0x01,
-+ 0xf0, 0x00, 0x00, 0x39, 0x76, 0xe7, 0x00, 0x08,
-+ 0x00, 0x1f, 0x76, 0xe7, 0x00, 0x07, 0x00, 0x00,
-+ 0x88, 0x0e, 0x77, 0x1a, 0x00, 0x05, 0x48, 0x17,
-+ 0xf0, 0x00, 0x00, 0x09, 0x88, 0x12, 0x48, 0x18,
-+ 0x88, 0x19, 0xe8, 0x00, 0xf0, 0x72, 0x15, 0x2c,
-+ 0x73, 0x19, 0x00, 0x11, 0x76, 0x82, 0x00, 0x00,
-+ 0x11, 0x91, 0x73, 0x11, 0x00, 0x19, 0x70, 0xe2,
-+ 0x00, 0x03, 0x00, 0x16, 0x70, 0xe2, 0x00, 0x04,
-+ 0x00, 0x13, 0x70, 0xe2, 0x00, 0x05, 0x00, 0x14,
-+ 0x81, 0xe2, 0x00, 0x01, 0x70, 0xe2, 0x00, 0x06,
-+ 0x00, 0x15, 0x70, 0xe2, 0x00, 0x07, 0x00, 0x10,
-+ 0x80, 0xe2, 0x00, 0x02, 0x73, 0x0e, 0x00, 0x11,
-+ 0xf1, 0x00, 0x00, 0x1e, 0x6d, 0xee, 0x00, 0x05,
-+ 0x6d, 0xeb, 0x00, 0x05, 0x6d, 0xec, 0x00, 0x05,
-+ 0x6d, 0xed, 0x00, 0x05, 0x6d, 0xe8, 0x00, 0x05,
-+ 0xf0, 0x00, 0x00, 0x01, 0x81, 0x91, 0x6d, 0xea,
-+ 0x00, 0x08, 0x73, 0x11, 0x00, 0x0e, 0xee, 0x07,
-+ 0x76, 0xe7, 0x00, 0x41, 0x00, 0x24, 0x76, 0xe7,
-+ 0x00, 0x46, 0x00, 0x25, 0x76, 0xe7, 0x00, 0x4b,
-+ 0x00, 0x26, 0x76, 0xe7, 0x00, 0x50, 0x00, 0x27,
-+ 0x8a, 0x17, 0x8a, 0x16, 0x8a, 0x11, 0xf4, 0xe4,
-+ 0x4a, 0x11, 0x4a, 0x16, 0xee, 0xfe, 0x88, 0x11,
-+ 0x56, 0x06, 0x4e, 0x00, 0xf9, 0x80, 0x16, 0xa2,
-+ 0xf7, 0xb8, 0x10, 0xf8, 0x00, 0x11, 0xf0, 0x10,
-+ 0xff, 0xff, 0xfa, 0x45, 0x15, 0x60, 0x77, 0x16,
-+ 0xff, 0xff, 0x77, 0x12, 0x00, 0x7b, 0x49, 0x11,
-+ 0x10, 0x82, 0xf6, 0x03, 0xf0, 0x00, 0x00, 0x09,
-+ 0x88, 0x11, 0xf4, 0x95, 0xf4, 0x95, 0x10, 0x81,
-+ 0xf8, 0x44, 0x15, 0x71, 0xf2, 0x73, 0x15, 0x71,
-+ 0xf4, 0x95, 0xe7, 0x16, 0x77, 0x11, 0x00, 0x7b,
-+ 0x10, 0x81, 0xf0, 0x00, 0x00, 0x09, 0x88, 0x11,
-+ 0xf4, 0x95, 0x77, 0x12, 0x00, 0x06, 0x10, 0x81,
-+ 0xf8, 0x45, 0x15, 0x5c, 0x6e, 0xea, 0xff, 0xff,
-+ 0x15, 0x69, 0x6d, 0xe9, 0x00, 0x08, 0x76, 0x86,
-+ 0x00, 0x01, 0xe9, 0x01, 0x56, 0x00, 0xf1, 0x80,
-+ 0x10, 0xf8, 0x00, 0x0b, 0xf8, 0x45, 0x15, 0x7e,
-+ 0xfb, 0x80, 0x15, 0x85, 0xf4, 0x95, 0x48, 0x16,
-+ 0xf9, 0x80, 0x16, 0x9a, 0xee, 0x02, 0x48, 0x16,
-+ 0x8a, 0x16, 0x8a, 0x11, 0xf4, 0xe4, 0x4a, 0x11,
-+ 0xee, 0xff, 0xfb, 0x80, 0x16, 0xa2, 0x88, 0x11,
-+ 0xf4, 0x95, 0x77, 0x10, 0xff, 0xff, 0xf4, 0xa9,
-+ 0xf8, 0x30, 0x15, 0xc4, 0x10, 0xe1, 0x00, 0x03,
-+ 0x77, 0x12, 0x00, 0x55, 0x80, 0x82, 0x77, 0x12,
-+ 0x00, 0x56, 0x76, 0x82, 0x00, 0x00, 0x77, 0x12,
-+ 0x00, 0x56, 0x76, 0x82, 0x00, 0x00, 0x77, 0x12,
-+ 0x00, 0x56, 0x76, 0x82, 0x00, 0x00, 0x77, 0x12,
-+ 0x00, 0x56, 0x76, 0x82, 0x00, 0x00, 0x77, 0x12,
-+ 0x00, 0x56, 0x76, 0x82, 0x00, 0x00, 0x10, 0xe1,
-+ 0x00, 0x02, 0xf0, 0x00, 0x00, 0x08, 0x32, 0xf8,
-+ 0x00, 0x08, 0x77, 0x12, 0x00, 0x54, 0xe8, 0x01,
-+ 0xf4, 0x82, 0xf4, 0x93, 0x18, 0x82, 0x77, 0x12,
-+ 0x00, 0x54, 0xf0, 0x40, 0x00, 0x00, 0x80, 0x82,
-+ 0x10, 0xe1, 0x00, 0x01, 0xf9, 0x80, 0x16, 0x76,
-+ 0x10, 0xe1, 0x00, 0x01, 0xf9, 0x80, 0x16, 0x66,
-+ 0xf0, 0x73, 0x16, 0x03, 0x77, 0x11, 0x00, 0x7b,
-+ 0x71, 0x81, 0x00, 0x11, 0x71, 0xe1, 0x00, 0x07,
-+ 0x00, 0x12, 0x76, 0x82, 0x00, 0x00, 0x10, 0xe1,
-+ 0x00, 0x09, 0xf9, 0x80, 0x15, 0x85, 0x77, 0x11,
-+ 0x00, 0x7b, 0x71, 0x81, 0x00, 0x11, 0x10, 0xe1,
-+ 0x00, 0x09, 0xfb, 0x80, 0x15, 0x85, 0xf0, 0x00,
-+ 0x00, 0x08, 0x77, 0x11, 0x00, 0x7b, 0x71, 0x81,
-+ 0x00, 0x11, 0x10, 0xe1, 0x00, 0x09, 0xfb, 0x80,
-+ 0x15, 0x85, 0xf0, 0x00, 0x00, 0x10, 0x77, 0x11,
-+ 0x00, 0x7b, 0x71, 0x81, 0x00, 0x11, 0x10, 0xe1,
-+ 0x00, 0x09, 0xfb, 0x80, 0x15, 0x85, 0xf0, 0x00,
-+ 0x00, 0x18, 0x77, 0x11, 0x00, 0x7b, 0x71, 0x81,
-+ 0x00, 0x11, 0x10, 0xe1, 0x00, 0x09, 0xfb, 0x80,
-+ 0x15, 0x85, 0xf0, 0x00, 0x00, 0x20, 0x77, 0x11,
-+ 0x00, 0x7b, 0x71, 0x81, 0x00, 0x11, 0x10, 0xe1,
-+ 0x00, 0x09, 0xfb, 0x80, 0x15, 0x85, 0xf0, 0x00,
-+ 0x00, 0x28, 0xf9, 0x80, 0x16, 0x9a, 0xee, 0x01,
-+ 0x8a, 0x11, 0xf4, 0xe4, 0x4a, 0x11, 0xee, 0xff,
-+ 0xfb, 0x80, 0x16, 0xa2, 0x88, 0x11, 0xf4, 0x95,
-+ 0x77, 0x10, 0xff, 0xff, 0xf4, 0xa9, 0xf8, 0x30,
-+ 0x16, 0x41, 0x77, 0x11, 0x00, 0x55, 0x76, 0x81,
-+ 0x00, 0x1e, 0x77, 0x11, 0x00, 0x56, 0x76, 0x81,
-+ 0x00, 0x00, 0x77, 0x11, 0x00, 0x56, 0x76, 0x81,
-+ 0x00, 0x00, 0x77, 0x11, 0x00, 0x56, 0x76, 0x81,
-+ 0x00, 0x00, 0x77, 0x11, 0x00, 0x56, 0x76, 0x81,
-+ 0x00, 0x00, 0x77, 0x11, 0x00, 0x56, 0x76, 0x81,
-+ 0x00, 0x00, 0x77, 0x11, 0x00, 0x56, 0x76, 0x81,
-+ 0x00, 0x00, 0x77, 0x11, 0x00, 0x56, 0x76, 0x81,
-+ 0x00, 0x00, 0x77, 0x11, 0x00, 0x56, 0x76, 0x81,
-+ 0x00, 0x00, 0x77, 0x11, 0x00, 0x56, 0x76, 0x81,
-+ 0x00, 0x00, 0x77, 0x11, 0x00, 0x56, 0xf2, 0x73,
-+ 0x16, 0x4e, 0x76, 0x81, 0x00, 0x00, 0x77, 0x11,
-+ 0x00, 0x7b, 0x71, 0x81, 0x00, 0x11, 0x71, 0xe1,
-+ 0x00, 0x07, 0x00, 0x12, 0x76, 0x82, 0x00, 0x00,
-+ 0x10, 0xe1, 0x00, 0x39, 0xf9, 0x80, 0x16, 0x08,
-+ 0xf9, 0x80, 0x16, 0x9a, 0xee, 0x01, 0x8a, 0x11,
-+ 0xf4, 0xe4, 0x4a, 0x11, 0x77, 0x11, 0x00, 0x7b,
-+ 0x10, 0x81, 0xf0, 0x00, 0x00, 0x04, 0x88, 0x11,
-+ 0xf4, 0x95, 0xf4, 0x95, 0x10, 0x81, 0xfa, 0x44,
-+ 0x16, 0x63, 0xf4, 0x95, 0xee, 0xff, 0x76, 0x81,
-+ 0x00, 0x01, 0xee, 0x01, 0x8a, 0x11, 0xf4, 0xe4,
-+ 0xf0, 0x10, 0x00, 0x10, 0x4a, 0x11, 0x32, 0xf8,
-+ 0x00, 0x08, 0xee, 0xff, 0x77, 0x11, 0x00, 0x01,
-+ 0xe8, 0x01, 0xee, 0x01, 0xf4, 0x82, 0x1a, 0x81,
-+ 0x80, 0x81, 0x8a, 0x11, 0xf4, 0x95, 0xf4, 0xe4,
-+ 0xf0, 0x10, 0x00, 0x10, 0x4a, 0x11, 0x32, 0xf8,
-+ 0x00, 0x08, 0xee, 0xff, 0xe8, 0x01, 0x77, 0x11,
-+ 0x00, 0x00, 0xf4, 0x82, 0xee, 0x01, 0xf4, 0x93,
-+ 0x18, 0x81, 0x80, 0x81, 0x8a, 0x11, 0xf4, 0x95,
-+ 0xf4, 0xe4, 0x4a, 0x11, 0xf0, 0x10, 0x00, 0x10,
-+ 0x77, 0x11, 0x00, 0x00, 0x32, 0xf8, 0x00, 0x08,
-+ 0xee, 0xff, 0x11, 0x81, 0xe8, 0x01, 0xee, 0x01,
-+ 0x77, 0x11, 0x00, 0x00, 0xf4, 0x82, 0xf2, 0xa0,
-+ 0x80, 0x81, 0x8a, 0x11, 0xf4, 0x95, 0xf4, 0xe4,
-+ 0xf2, 0x73, 0x16, 0x9e, 0xf6, 0xbb, 0xf4, 0x95,
-+ 0xf4, 0x95, 0xf4, 0x95, 0xf4, 0x95, 0xf4, 0xe4,
-+ 0xf2, 0x73, 0x16, 0xa6, 0xf7, 0xbb, 0xf4, 0x95,
-+ 0xf4, 0x95, 0xf4, 0x95, 0xf4, 0x95, 0xf4, 0xe4,
-+ 0x4a, 0x11, 0x4a, 0x16, 0xf4, 0x95, 0x71, 0x04,
-+ 0x00, 0x16, 0xfb, 0x80, 0x16, 0xa2, 0x88, 0x11,
-+ 0xf4, 0x95, 0x71, 0xe1, 0x00, 0x05, 0x00, 0x12,
-+ 0x76, 0x82, 0x00, 0x0e, 0x10, 0xe6, 0x00, 0x0e,
-+ 0x71, 0xe1, 0x00, 0x06, 0x00, 0x12, 0x80, 0x82,
-+ 0x71, 0xe1, 0x00, 0x05, 0x00, 0x12, 0x76, 0x82,
-+ 0x00, 0x0d, 0x71, 0xe1, 0x00, 0x06, 0x00, 0x12,
-+ 0x10, 0xe6, 0x00, 0x0d, 0x80, 0x82, 0x71, 0xe1,
-+ 0x00, 0x05, 0x00, 0x12, 0x76, 0x82, 0x00, 0x0c,
-+ 0x10, 0xe6, 0x00, 0x0c, 0x71, 0xe1, 0x00, 0x06,
-+ 0x00, 0x12, 0x80, 0x82, 0x71, 0xe1, 0x00, 0x05,
-+ 0x00, 0x12, 0x76, 0x82, 0x00, 0x0b, 0x10, 0xe6,
-+ 0x00, 0x0b, 0x71, 0xe1, 0x00, 0x06, 0x00, 0x12,
-+ 0x80, 0x82, 0x71, 0xe1, 0x00, 0x05, 0x00, 0x12,
-+ 0x76, 0x82, 0x00, 0x0a, 0x71, 0xe1, 0x00, 0x06,
-+ 0x00, 0x12, 0x10, 0xe6, 0x00, 0x0a, 0x80, 0x82,
-+ 0x71, 0xe1, 0x00, 0x05, 0x00, 0x12, 0x76, 0x82,
-+ 0x00, 0x09, 0x10, 0xe6, 0x00, 0x09, 0x71, 0xe1,
-+ 0x00, 0x06, 0x00, 0x12, 0x80, 0x82, 0x71, 0xe1,
-+ 0x00, 0x05, 0x00, 0x12, 0x76, 0x82, 0x00, 0x08,
-+ 0x71, 0xe1, 0x00, 0x06, 0x00, 0x12, 0x10, 0xe6,
-+ 0x00, 0x08, 0x80, 0x82, 0x71, 0xe1, 0x00, 0x05,
-+ 0x00, 0x12, 0x76, 0x82, 0x00, 0x07, 0x10, 0xe6,
-+ 0x00, 0x07, 0x71, 0xe1, 0x00, 0x06, 0x00, 0x12,
-+ 0x80, 0x82, 0x71, 0xe1, 0x00, 0x05, 0x00, 0x12,
-+ 0x76, 0x82, 0x00, 0x06, 0x71, 0xe1, 0x00, 0x06,
-+ 0x00, 0x12, 0x10, 0xe6, 0x00, 0x06, 0x80, 0x82,
-+ 0x71, 0xe1, 0x00, 0x05, 0x00, 0x12, 0x76, 0x82,
-+ 0x00, 0x05, 0x71, 0xe1, 0x00, 0x06, 0x00, 0x12,
-+ 0x10, 0xe6, 0x00, 0x05, 0x80, 0x82, 0x71, 0xe1,
-+ 0x00, 0x05, 0x00, 0x12, 0x76, 0x82, 0x00, 0x04,
-+ 0x71, 0xe1, 0x00, 0x06, 0x00, 0x12, 0x10, 0xe6,
-+ 0x00, 0x04, 0x80, 0x82, 0x71, 0xe1, 0x00, 0x05,
-+ 0x00, 0x12, 0x76, 0x82, 0x00, 0x03, 0x71, 0xe1,
-+ 0x00, 0x06, 0x00, 0x12, 0x10, 0xe6, 0x00, 0x03,
-+ 0x80, 0x82, 0x71, 0xe1, 0x00, 0x05, 0x00, 0x12,
-+ 0x76, 0x82, 0x00, 0x02, 0x10, 0xe6, 0x00, 0x02,
-+ 0x71, 0xe1, 0x00, 0x06, 0x00, 0x12, 0x80, 0x82,
-+ 0x71, 0xe1, 0x00, 0x05, 0x00, 0x12, 0x76, 0x82,
-+ 0x00, 0x01, 0x10, 0xe6, 0x00, 0x01, 0x71, 0xe1,
-+ 0x00, 0x06, 0x00, 0x12, 0x80, 0x82, 0x71, 0xe1,
-+ 0x00, 0x05, 0x00, 0x12, 0x76, 0x82, 0x00, 0x00,
-+ 0x71, 0xe1, 0x00, 0x06, 0x00, 0x13, 0xe7, 0x62,
-+ 0xe5, 0x01, 0xf9, 0x80, 0x16, 0x9a, 0x8a, 0x16,
-+ 0x8a, 0x11, 0xf4, 0xe4, 0x4a, 0x11, 0x88, 0x11,
-+ 0xf4, 0x95, 0xf4, 0x95, 0x71, 0xe1, 0x00, 0x05,
-+ 0x00, 0x12, 0xee, 0xff, 0x76, 0x82, 0x00, 0x00,
-+ 0xee, 0x01, 0x71, 0xe1, 0x00, 0x06, 0x00, 0x11,
-+ 0x69, 0x81, 0x00, 0x01, 0x8a, 0x11, 0xf4, 0x95,
-+ 0xf4, 0xe4, 0x4a, 0x11, 0x88, 0x11, 0xf4, 0x95,
-+ 0xf4, 0x95, 0x71, 0xe1, 0x00, 0x05, 0x00, 0x12,
-+ 0xee, 0xff, 0x76, 0x82, 0x00, 0x01, 0xee, 0x01,
-+ 0x71, 0xe1, 0x00, 0x06, 0x00, 0x11, 0x69, 0x81,
-+ 0x00, 0x01, 0x8a, 0x11, 0xf4, 0x95, 0xf4, 0xe4,
-+ 0x4a, 0x11, 0x77, 0x11, 0x00, 0x7b, 0x10, 0x81,
-+ 0xf0, 0x00, 0x00, 0x94, 0x88, 0x11, 0xf4, 0x95,
-+ 0xf4, 0x95, 0x10, 0x81, 0xfa, 0x44, 0x17, 0x9c,
-+ 0xf4, 0x95, 0xee, 0xff, 0xf9, 0x80, 0x16, 0x53,
-+ 0x77, 0x11, 0x00, 0x7b, 0x10, 0x81, 0xf0, 0x00,
-+ 0x00, 0x94, 0x88, 0x11, 0xf4, 0x95, 0xf4, 0x95,
-+ 0x76, 0x81, 0x00, 0x01, 0xee, 0x01, 0x76, 0xe1,
-+ 0x00, 0x01, 0x00, 0x00, 0x76, 0xe1, 0x00, 0x02,
-+ 0x00, 0x21, 0x76, 0xe1, 0x00, 0x03, 0x00, 0x20,
-+ 0x76, 0xe1, 0x00, 0x04, 0x00, 0x23, 0x76, 0xe1,
-+ 0x00, 0x05, 0x00, 0x22, 0x76, 0xe1, 0x00, 0x06,
-+ 0x00, 0x38, 0x76, 0xe1, 0x00, 0x07, 0x00, 0x39,
-+ 0x76, 0xe1, 0x00, 0x08, 0x00, 0x15, 0x76, 0xe1,
-+ 0x00, 0x09, 0x00, 0x14, 0x76, 0xe1, 0x00, 0x0a,
-+ 0x00, 0x00, 0x76, 0xe1, 0x00, 0x0b, 0x00, 0x41,
-+ 0x76, 0xe1, 0x00, 0x0c, 0x00, 0x40, 0x76, 0xe1,
-+ 0x00, 0x0d, 0x00, 0x43, 0x76, 0xe1, 0x00, 0x0e,
-+ 0x00, 0x42, 0x76, 0xe1, 0x00, 0x0f, 0x00, 0x48,
-+ 0x76, 0xe1, 0x00, 0x10, 0x00, 0x49, 0x76, 0xe1,
-+ 0x00, 0x11, 0x00, 0x1b, 0x76, 0xe1, 0x00, 0x12,
-+ 0x00, 0x1a, 0x8a, 0x11, 0xf4, 0x95, 0xf4, 0xe4,
-+ 0x4a, 0x11, 0xee, 0xfd, 0x88, 0x11, 0x56, 0x06,
-+ 0x4e, 0x00, 0xf9, 0x80, 0x16, 0xa2, 0x77, 0x12,
-+ 0x00, 0x7b, 0x77, 0x0e, 0x00, 0x09, 0x10, 0x82,
-+ 0x28, 0xf8, 0x00, 0x11, 0xf0, 0x00, 0x00, 0x95,
-+ 0x88, 0x11, 0xf4, 0x95, 0xf4, 0x95, 0x10, 0x81,
-+ 0xf8, 0x45, 0x17, 0xf0, 0xf2, 0x73, 0x17, 0xfd,
-+ 0x77, 0x11, 0xff, 0xff, 0x76, 0x81, 0x00, 0x01,
-+ 0xe9, 0x01, 0x56, 0x00, 0xf1, 0x80, 0x10, 0xf8,
-+ 0x00, 0x0b, 0xf8, 0x45, 0x17, 0xfd, 0xfb, 0x80,
-+ 0x18, 0x10, 0xf4, 0x95, 0x48, 0x11, 0xf9, 0x80,
-+ 0x16, 0x9a, 0xee, 0x03, 0x48, 0x11, 0x8a, 0x11,
-+ 0xf4, 0x95, 0xf4, 0xe4, 0x4a, 0x11, 0x88, 0x11,
-+ 0xf4, 0x95, 0xee, 0xff, 0x71, 0xe1, 0x00, 0x01,
-+ 0x00, 0x11, 0xee, 0x01, 0x10, 0x81, 0x8a, 0x11,
-+ 0xf4, 0x95, 0xf4, 0xe4, 0x4a, 0x11, 0xee, 0xff,
-+ 0xfb, 0x80, 0x16, 0xa2, 0x88, 0x11, 0xf4, 0x95,
-+ 0x77, 0x10, 0xff, 0xff, 0xf4, 0xa9, 0xf8, 0x30,
-+ 0x18, 0xc3, 0x71, 0xe1, 0x00, 0x05, 0x00, 0x12,
-+ 0x76, 0x82, 0x00, 0x00, 0x71, 0xe1, 0x00, 0x06,
-+ 0x00, 0x12, 0x76, 0x82, 0x00, 0x00, 0x71, 0xe1,
-+ 0x00, 0x05, 0x00, 0x12, 0x76, 0x82, 0x00, 0x01,
-+ 0x71, 0xe1, 0x00, 0x06, 0x00, 0x12, 0x76, 0x82,
-+ 0x00, 0x00, 0x71, 0xe1, 0x00, 0x05, 0x00, 0x12,
-+ 0x76, 0x82, 0x00, 0x02, 0x71, 0xe1, 0x00, 0x06,
-+ 0x00, 0x12, 0x76, 0x82, 0x00, 0x00, 0x71, 0xe1,
-+ 0x00, 0x05, 0x00, 0x12, 0x76, 0x82, 0x00, 0x03,
-+ 0x71, 0xe1, 0x00, 0x06, 0x00, 0x12, 0x76, 0x82,
-+ 0x00, 0x00, 0x71, 0xe1, 0x00, 0x05, 0x00, 0x12,
-+ 0x76, 0x82, 0x00, 0x04, 0x71, 0xe1, 0x00, 0x06,
-+ 0x00, 0x12, 0x76, 0x82, 0x00, 0x00, 0x71, 0xe1,
-+ 0x00, 0x05, 0x00, 0x12, 0x76, 0x82, 0x00, 0x05,
-+ 0x71, 0xe1, 0x00, 0x06, 0x00, 0x12, 0x76, 0x82,
-+ 0x00, 0x00, 0x71, 0xe1, 0x00, 0x05, 0x00, 0x12,
-+ 0x76, 0x82, 0x00, 0x06, 0x71, 0xe1, 0x00, 0x06,
-+ 0x00, 0x12, 0x76, 0x82, 0x00, 0x01, 0x71, 0xe1,
-+ 0x00, 0x05, 0x00, 0x12, 0x76, 0x82, 0x00, 0x07,
-+ 0x71, 0xe1, 0x00, 0x06, 0x00, 0x12, 0x76, 0x82,
-+ 0x20, 0x00, 0x71, 0xe1, 0x00, 0x05, 0x00, 0x12,
-+ 0x76, 0x82, 0x00, 0x08, 0x71, 0xe1, 0x00, 0x06,
-+ 0x00, 0x12, 0x76, 0x82, 0x00, 0x00, 0x71, 0xe1,
-+ 0x00, 0x05, 0x00, 0x12, 0x76, 0x82, 0x00, 0x09,
-+ 0x71, 0xe1, 0x00, 0x06, 0x00, 0x12, 0x76, 0x82,
-+ 0x00, 0x00, 0x71, 0xe1, 0x00, 0x05, 0x00, 0x12,
-+ 0x76, 0x82, 0x00, 0x0a, 0x71, 0xe1, 0x00, 0x06,
-+ 0x00, 0x12, 0x76, 0x82, 0x00, 0x00, 0x71, 0xe1,
-+ 0x00, 0x05, 0x00, 0x12, 0x76, 0x82, 0x00, 0x0b,
-+ 0x71, 0xe1, 0x00, 0x06, 0x00, 0x12, 0x76, 0x82,
-+ 0x00, 0x00, 0x71, 0xe1, 0x00, 0x05, 0x00, 0x12,
-+ 0x76, 0x82, 0x00, 0x0c, 0x71, 0xe1, 0x00, 0x06,
-+ 0x00, 0x12, 0x76, 0x82, 0x00, 0x00, 0x71, 0xe1,
-+ 0x00, 0x05, 0x00, 0x12, 0x76, 0x82, 0x00, 0x0d,
-+ 0x71, 0xe1, 0x00, 0x06, 0x00, 0x12, 0x76, 0x82,
-+ 0x00, 0x00, 0x71, 0xe1, 0x00, 0x05, 0x00, 0x12,
-+ 0x76, 0x82, 0x00, 0x0e, 0x71, 0xe1, 0x00, 0x06,
-+ 0x00, 0x12, 0x76, 0x82, 0x00, 0x00, 0x10, 0xe1,
-+ 0x00, 0x07, 0xf9, 0x80, 0x16, 0x76, 0x10, 0xe1,
-+ 0x00, 0x08, 0xf9, 0x80, 0x16, 0x76, 0x10, 0xe1,
-+ 0x00, 0x07, 0xf9, 0x80, 0x16, 0x66, 0x10, 0xe1,
-+ 0x00, 0x08, 0xf9, 0x80, 0x16, 0x66, 0xf0, 0x73,
-+ 0x18, 0xd1, 0x77, 0x11, 0x00, 0x7b, 0x10, 0x81,
-+ 0xfb, 0x80, 0x18, 0x10, 0xf0, 0x00, 0x00, 0x95,
-+ 0x77, 0x11, 0x00, 0x7b, 0x10, 0x81, 0xfb, 0x80,
-+ 0x18, 0x10, 0xf0, 0x00, 0x00, 0x9e, 0xf9, 0x80,
-+ 0x16, 0x9a, 0xee, 0x01, 0x8a, 0x11, 0xf4, 0xe4,
-+ 0x4a, 0x11, 0x88, 0x11, 0xee, 0xff, 0xf4, 0x95,
-+ 0x10, 0x04, 0x71, 0xe1, 0x00, 0x03, 0x00, 0x11,
-+ 0xee, 0x01, 0x80, 0x81, 0x8a, 0x11, 0xf4, 0x95,
-+ 0xf4, 0xe4, 0x4a, 0x11, 0x4a, 0x16, 0xf4, 0x95,
-+ 0x71, 0x04, 0x00, 0x16, 0xfb, 0x80, 0x16, 0xa2,
-+ 0x88, 0x11, 0xf4, 0x95, 0x71, 0xe1, 0x00, 0x02,
-+ 0x00, 0x12, 0x76, 0x82, 0x00, 0x10, 0x10, 0xe6,
-+ 0x00, 0x01, 0x71, 0xe1, 0x00, 0x03, 0x00, 0x12,
-+ 0x80, 0x82, 0x71, 0xe1, 0x00, 0x04, 0x00, 0x12,
-+ 0x10, 0xe6, 0x00, 0x02, 0x80, 0x82, 0xe7, 0x62,
-+ 0x71, 0xe1, 0x00, 0x02, 0x00, 0x13, 0xe5, 0x01,
-+ 0xf9, 0x80, 0x16, 0x9a, 0x8a, 0x16, 0x8a, 0x11,
-+ 0xf4, 0xe4, 0x4a, 0x11, 0x88, 0x11, 0xee, 0xff,
-+ 0xee, 0x01, 0x10, 0xe1, 0x00, 0x01, 0x8a, 0x11,
-+ 0xf4, 0x95, 0xf4, 0xe4, 0x4a, 0x11, 0x77, 0x11,
-+ 0x00, 0x7b, 0x10, 0x81, 0xf0, 0x00, 0x00, 0xb3,
-+ 0x88, 0x11, 0xf4, 0x95, 0xf4, 0x95, 0x10, 0x81,
-+ 0xfa, 0x44, 0x19, 0x2a, 0xf4, 0x95, 0xee, 0xff,
-+ 0xf9, 0x80, 0x16, 0x53, 0x77, 0x11, 0x00, 0x7b,
-+ 0x10, 0x81, 0xf0, 0x00, 0x00, 0xb3, 0x88, 0x11,
-+ 0xf4, 0x95, 0xf4, 0x95, 0x76, 0x81, 0x00, 0x01,
-+ 0xee, 0x01, 0x76, 0xe1, 0x00, 0x01, 0x00, 0x00,
-+ 0x76, 0xe1, 0x00, 0x02, 0x00, 0x13, 0x76, 0xe1,
-+ 0x00, 0x03, 0x00, 0x26, 0x76, 0xe1, 0x00, 0x04,
-+ 0x00, 0x25, 0x76, 0xe1, 0x00, 0x05, 0x00, 0x24,
-+ 0x76, 0xe1, 0x00, 0x06, 0x00, 0x00, 0x76, 0xe1,
-+ 0x00, 0x07, 0x00, 0x17, 0x76, 0xe1, 0x00, 0x08,
-+ 0x00, 0x32, 0x76, 0xe1, 0x00, 0x09, 0x00, 0x31,
-+ 0x76, 0xe1, 0x00, 0x0a, 0x00, 0x30, 0x8a, 0x11,
-+ 0xf4, 0x95, 0xf4, 0xe4, 0x4a, 0x11, 0x4a, 0x16,
-+ 0x4a, 0x17, 0xee, 0xff, 0xf4, 0x95, 0x71, 0x06,
-+ 0x00, 0x17, 0xfb, 0x80, 0x16, 0xa2, 0x88, 0x11,
-+ 0xf4, 0x95, 0xf7, 0xb8, 0x10, 0xf8, 0x00, 0x11,
-+ 0xf0, 0x10, 0xff, 0xff, 0xfa, 0x45, 0x19, 0x73,
-+ 0x77, 0x16, 0xff, 0xff, 0x77, 0x12, 0x00, 0x7b,
-+ 0x77, 0x0e, 0x00, 0x05, 0x10, 0x82, 0x28, 0xf8,
-+ 0x00, 0x11, 0xf0, 0x00, 0x00, 0xb4, 0x88, 0x11,
-+ 0xf4, 0x95, 0xf4, 0x95, 0x10, 0x81, 0xf8, 0x44,
-+ 0x19, 0x84, 0xf2, 0x73, 0x19, 0x84, 0xf4, 0x95,
-+ 0xe7, 0x16, 0x77, 0x11, 0x00, 0x7b, 0x10, 0x81,
-+ 0xf0, 0x00, 0x00, 0xb4, 0x88, 0x11, 0xf4, 0x95,
-+ 0x77, 0x12, 0x00, 0x02, 0x10, 0x81, 0xf8, 0x45,
-+ 0x19, 0x6f, 0x6e, 0xea, 0xff, 0xff, 0x19, 0x7c,
-+ 0x6d, 0xe9, 0x00, 0x05, 0x61, 0xf8, 0x00, 0x17,
-+ 0x00, 0x01, 0xfa, 0x20, 0x19, 0x8f, 0x76, 0x86,
-+ 0x00, 0x01, 0xfb, 0x80, 0x19, 0x97, 0xf4, 0x95,
-+ 0x48, 0x16, 0xf9, 0x80, 0x16, 0x9a, 0xee, 0x01,
-+ 0x8a, 0x17, 0x48, 0x16, 0x8a, 0x16, 0x8a, 0x11,
-+ 0xf4, 0xe4, 0x4a, 0x11, 0xee, 0xff, 0xfb, 0x80,
-+ 0x16, 0xa2, 0x88, 0x11, 0xf4, 0x95, 0x77, 0x10,
-+ 0xff, 0xff, 0xf4, 0xa9, 0xf8, 0x30, 0x19, 0xcc,
-+ 0x71, 0xe1, 0x00, 0x02, 0x00, 0x12, 0x69, 0x82,
-+ 0x00, 0x10, 0x71, 0xe1, 0x00, 0x02, 0x00, 0x12,
-+ 0x68, 0x82, 0xf7, 0xff, 0x71, 0xe1, 0x00, 0x02,
-+ 0x00, 0x12, 0x68, 0x82, 0xfb, 0xff, 0x71, 0xe1,
-+ 0x00, 0x02, 0x00, 0x12, 0x68, 0x82, 0xff, 0xf0,
-+ 0x71, 0xe1, 0x00, 0x03, 0x00, 0x12, 0x76, 0x82,
-+ 0xff, 0xff, 0x71, 0xe1, 0x00, 0x04, 0x00, 0x12,
-+ 0x76, 0x82, 0xff, 0xff, 0x71, 0xe1, 0x00, 0x02,
-+ 0x00, 0x12, 0x69, 0x82, 0x00, 0x20, 0x71, 0xe1,
-+ 0x00, 0x02, 0x00, 0x11, 0xf2, 0x73, 0x19, 0xda,
-+ 0x68, 0x81, 0xff, 0xef, 0x77, 0x11, 0x00, 0x7b,
-+ 0x10, 0x81, 0xfb, 0x80, 0x19, 0x97, 0xf0, 0x00,
-+ 0x00, 0xb4, 0x77, 0x11, 0x00, 0x7b, 0x10, 0x81,
-+ 0xfb, 0x80, 0x19, 0x97, 0xf0, 0x00, 0x00, 0xb9,
-+ 0xf9, 0x80, 0x16, 0x9a, 0xee, 0x01, 0x8a, 0x11,
-+ 0xf4, 0xe4, 0x00, 0xa4, 0x00, 0x00, 0x19, 0xdf,
-+ 0x00, 0x01, 0x2a, 0xe6, 0x00, 0x00, 0x00, 0x01,
-+ 0x2a, 0xe7, 0x00, 0x00, 0x00, 0x03, 0x2a, 0x12,
-+ 0x0c, 0x01, 0xc3, 0x4f, 0x00, 0x00, 0x00, 0x01,
-+ 0x2a, 0x15, 0x00, 0x00, 0x00, 0x02, 0x2a, 0x16,
-+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x2a, 0x5d,
-+ 0x00, 0x43, 0x00, 0x6f, 0x00, 0x70, 0x00, 0x79,
-+ 0x00, 0x72, 0x00, 0x69, 0x00, 0x67, 0x00, 0x68,
-+ 0x00, 0x74, 0x00, 0x20, 0x00, 0x54, 0x00, 0x65,
-+ 0x00, 0x63, 0x00, 0x68, 0x00, 0x6e, 0x00, 0x6f,
-+ 0x00, 0x54, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6e,
-+ 0x00, 0x64, 0x00, 0x20, 0x00, 0x41, 0x00, 0x47,
-+ 0x00, 0x00, 0x00, 0x04, 0x2a, 0x76, 0x00, 0x30,
-+ 0x00, 0x2e, 0x00, 0x30, 0x00, 0x00, 0x00, 0x0c,
-+ 0x2a, 0x7a, 0x00, 0x46, 0x00, 0x65, 0x00, 0x62,
-+ 0x00, 0x20, 0x00, 0x32, 0x00, 0x37, 0x00, 0x20,
-+ 0x00, 0x32, 0x00, 0x30, 0x00, 0x30, 0x00, 0x31,
-+ 0x00, 0x00, 0x00, 0x09, 0x2a, 0x86, 0x00, 0x31,
-+ 0x00, 0x34, 0x00, 0x3a, 0x00, 0x33, 0x00, 0x35,
-+ 0x00, 0x3a, 0x00, 0x33, 0x00, 0x33, 0x00, 0x00,
-+ 0x00, 0x0f, 0x2a, 0x8f, 0x00, 0x00, 0x00, 0x00,
-+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
-+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-+ 0x00, 0x00, 0x00, 0x01, 0x2a, 0x9e, 0x00, 0x00,
-+ 0x00, 0x01, 0x2a, 0x9f, 0x00, 0x00, 0x00, 0x01,
-+ 0x2a, 0xa0, 0x00, 0x00, 0x00, 0x01, 0x2a, 0xa1,
-+ 0x00, 0x00, 0x00, 0x01, 0x2a, 0xa2, 0x00, 0x00,
-+ 0x00, 0x01, 0x29, 0x7e, 0x00, 0x00, 0x00, 0x02,
-+ 0x29, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
-+ 0x29, 0x82, 0xff, 0xff, 0x00, 0x01, 0x2a, 0xa7,
-+ 0x00, 0x00, 0x00, 0x05, 0x2a, 0xa8, 0x71, 0x41,
-+ 0x20, 0x00, 0x20, 0x00, 0x00, 0x23, 0x04, 0x00,
-+ 0x00, 0x0a, 0x2a, 0xad, 0x00, 0x00, 0x00, 0x00,
-+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-+ 0x00, 0x0f, 0x2a, 0xb7, 0x00, 0x00, 0x00, 0x00,
-+ 0x00, 0x00, 0x00, 0x40, 0x00, 0xa0, 0x82, 0x40,
-+ 0x00, 0x08, 0x30, 0x7f, 0x00, 0x80, 0x01, 0x80,
-+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-+ 0x00, 0x00, 0x00, 0x01, 0x27, 0x6e, 0x00, 0x00,
-+ 0x00, 0x01, 0x27, 0x6f, 0x00, 0x00, 0x00, 0x00,
-+ 0x00, 0x09, 0x00, 0x00, 0x1a, 0x83, 0x04, 0xe8,
-+ 0x04, 0xcf, 0x04, 0xc5, 0x04, 0xba, 0x04, 0xb0,
-+ 0x04, 0xac, 0x04, 0x9c, 0x04, 0x8c, 0x04, 0x81,
-+ 0x00, 0x78, 0x00, 0x00, 0x01, 0x00, 0xf2, 0x73,
-+ 0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73,
-+ 0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73,
-+ 0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73,
-+ 0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73,
-+ 0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73,
-+ 0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73,
-+ 0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73,
-+ 0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73,
-+ 0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73,
-+ 0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73,
-+ 0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73,
-+ 0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73,
-+ 0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73,
-+ 0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73,
-+ 0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73,
-+ 0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73,
-+ 0x07, 0xaa, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73,
-+ 0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73,
-+ 0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73,
-+ 0x02, 0x23, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73,
-+ 0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73,
-+ 0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73,
-+ 0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73,
-+ 0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73,
-+ 0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73,
-+ 0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73,
-+ 0x05, 0xe5, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73,
-+ 0x02, 0xb5, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73,
-+ 0x0e, 0x33, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73,
-+ 0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0x00, 0x00,
-+};
-+
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/media/dvb/ttusb-budget/Kconfig 2003-07-19 17:03:50.000000000 -0700
-@@ -0,0 +1,11 @@
-+config DVB_TTUSB_BUDGET
-+ tristate "Technotrend/Hauppauge Nova-USB devices"
-+ depends on DVB_CORE && USB
-+ help
-+ Support for external USB adapters designed by Technotrend and
-+ produced by Hauppauge, shipped under the brand name 'Nova-USB'.
-+
-+ These devices don't have a MPEG decoder built in, so you need
-+ an external software decoder to watch TV.
-+
-+ Say Y if you own such a device and want to use it.
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/media/dvb/ttusb-budget/Makefile 2003-07-19 17:03:50.000000000 -0700
-@@ -0,0 +1,3 @@
-+obj-$(CONFIG_DVB_TTUSB_BUDGET) += dvb-ttusb-budget.o
-+
-+EXTRA_CFLAGS = -Idrivers/media/dvb/dvb-core/
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/media/dvb/ttusb-dec/dec2000_frontend.c 2003-07-19 17:03:50.000000000 -0700
-@@ -0,0 +1,180 @@
-+/*
-+ * TTUSB DEC-2000-t Frontend
-+ *
-+ * Copyright (C) 2003 Alex Woods <linux-dvb@giblets.org>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+ *
-+ */
-+
-+#include <linux/init.h>
-+#include <linux/module.h>
-+
-+#include "dvb_frontend.h"
-+#include "dvb_functions.h"
-+
-+static int debug = 0;
-+
-+#define dprintk if (debug) printk
-+
-+static struct dvb_frontend_info dec2000_frontend_info = {
-+ name: "TechnoTrend/Hauppauge DEC-2000-t Frontend",
-+ type: FE_OFDM,
-+ frequency_min: 51000000,
-+ frequency_max: 858000000,
-+ frequency_stepsize: 62500,
-+ caps: FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 |
-+ FE_CAN_FEC_5_6 | FE_CAN_FEC_7_8 | FE_CAN_FEC_AUTO |
-+ FE_CAN_QAM_16 | FE_CAN_QAM_64 | FE_CAN_QAM_AUTO |
-+ FE_CAN_TRANSMISSION_MODE_AUTO | FE_CAN_GUARD_INTERVAL_AUTO |
-+ FE_CAN_HIERARCHY_AUTO,
-+};
-+
-+static int dec2000_frontend_ioctl(struct dvb_frontend *fe, unsigned int cmd,
-+ void *arg)
-+{
-+ dprintk("%s\n", __FUNCTION__);
-+
-+ switch (cmd) {
-+
-+ case FE_GET_INFO:
-+ dprintk("%s: FE_GET_INFO\n", __FUNCTION__);
-+ memcpy(arg, &dec2000_frontend_info,
-+ sizeof (struct dvb_frontend_info));
-+ break;
-+
-+ case FE_READ_STATUS: {
-+ fe_status_t *status = (fe_status_t *)arg;
-+ dprintk("%s: FE_READ_STATUS\n", __FUNCTION__);
-+ *status = FE_HAS_SIGNAL | FE_HAS_VITERBI |
-+ FE_HAS_SYNC | FE_HAS_CARRIER | FE_HAS_LOCK;
-+ break;
-+ }
-+
-+ case FE_READ_BER: {
-+ u32 *ber = (u32 *)arg;
-+ dprintk("%s: FE_READ_BER\n", __FUNCTION__);
-+ *ber = 0;
-+ return -ENOSYS;
-+ break;
-+ }
-+
-+ case FE_READ_SIGNAL_STRENGTH: {
-+ dprintk("%s: FE_READ_SIGNAL_STRENGTH\n", __FUNCTION__);
-+ *(s32 *)arg = 0xFF;
-+ return -ENOSYS;
-+ break;
-+ }
-+
-+ case FE_READ_SNR:
-+ dprintk("%s: FE_READ_SNR\n", __FUNCTION__);
-+ *(s32 *)arg = 0;
-+ return -ENOSYS;
-+ break;
-+
-+ case FE_READ_UNCORRECTED_BLOCKS:
-+ dprintk("%s: FE_READ_UNCORRECTED_BLOCKS\n", __FUNCTION__);
-+ *(u32 *)arg = 0;
-+ return -ENOSYS;
-+ break;
-+
-+ case FE_SET_FRONTEND:{
-+ struct dvb_frontend_parameters *p =
-+ (struct dvb_frontend_parameters *)arg;
-+ u8 b[] = { 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
-+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
-+ 0x00, 0xff, 0x00, 0x00, 0x00, 0xff };
-+ u32 freq;
-+ struct i2c_msg msg = { addr: 0x71, flags: 0, len:20 };
-+
-+ dprintk("%s: FE_SET_FRONTEND\n", __FUNCTION__);
-+
-+ dprintk(" frequency->%d\n", p->frequency);
-+ dprintk(" symbol_rate->%d\n",
-+ p->u.qam.symbol_rate);
-+ dprintk(" inversion->%d\n", p->inversion);
-+
-+ freq = htonl(p->frequency / 1000);
-+ memcpy(&b[4], &freq, sizeof (int));
-+ msg.buf = b;
-+ fe->i2c->xfer(fe->i2c, &msg, 1);
-+
-+ break;
-+ }
-+
-+ case FE_GET_FRONTEND:
-+ dprintk("%s: FE_GET_FRONTEND\n", __FUNCTION__);
-+ break;
-+
-+ case FE_SLEEP:
-+ dprintk("%s: FE_SLEEP\n", __FUNCTION__);
-+ return -ENOSYS;
-+ break;
-+
-+ case FE_INIT:
-+ dprintk("%s: FE_INIT\n", __FUNCTION__);
-+ break;
-+
-+ case FE_RESET:
-+ dprintk("%s: FE_RESET\n", __FUNCTION__);
-+ break;
-+
-+ default:
-+ dprintk("%s: unknown IOCTL (0x%X)\n", __FUNCTION__, cmd);
-+ return -EINVAL;
-+
-+ }
-+
-+ return 0;
-+}
-+
-+static int dec2000_frontend_attach(struct dvb_i2c_bus *i2c)
-+{
-+ dprintk("%s\n", __FUNCTION__);
-+
-+ dvb_register_frontend(dec2000_frontend_ioctl, i2c, NULL,
-+ &dec2000_frontend_info);
-+
-+ return 0;
-+}
-+
-+static void dec2000_frontend_detach(struct dvb_i2c_bus *i2c)
-+{
-+ dprintk("%s\n", __FUNCTION__);
-+
-+ dvb_unregister_frontend(dec2000_frontend_ioctl, i2c);
-+}
-+
-+static int __init dec2000_frontend_init(void)
-+{
-+ return dvb_register_i2c_device(THIS_MODULE, dec2000_frontend_attach,
-+ dec2000_frontend_detach);
-+}
-+
-+static void __exit dec2000_frontend_exit(void)
-+{
-+ dvb_unregister_i2c_device(dec2000_frontend_attach);
-+}
-+
-+module_init(dec2000_frontend_init);
-+module_exit(dec2000_frontend_exit);
-+
-+MODULE_DESCRIPTION("TechnoTrend/Hauppauge DEC-2000-t Frontend");
-+MODULE_AUTHOR("Alex Woods <linux-dvb@giblets.org");
-+MODULE_LICENSE("GPL");
-+
-+MODULE_PARM(debug, "i");
-+MODULE_PARM_DESC(debug, "Debug level");
-+
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/media/dvb/ttusb-dec/fdump.c 2003-07-19 17:03:50.000000000 -0700
-@@ -0,0 +1,36 @@
-+#include <stdio.h>
-+#include <sys/types.h>
-+#include <sys/stat.h>
-+#include <fcntl.h>
-+#include <unistd.h>
-+
-+
-+int main (int argc, char **argv)
-+{
-+ unsigned char buf[8];
-+ unsigned int i, count, bytes = 0;
-+ int fd;
-+
-+ if (argc != 3) {
-+ fprintf (stderr, "\n\tusage: %s <ucode.bin> <array_name>\n\n",
-+ argv[0]);
-+ return -1;
-+ }
-+
-+ fd = open (argv[1], O_RDONLY);
-+
-+ printf ("\n#include <asm/types.h>\n\nu8 %s [] __initdata = {",
-+ argv[2]);
-+
-+ while ((count = read (fd, buf, 8)) > 0) {
-+ printf ("\n\t");
-+ for (i=0;i<count;i++, bytes++)
-+ printf ("0x%02x, ", buf[i]);
-+ }
-+
-+ printf ("\n};\n\n");
-+ close (fd);
-+
-+ return 0;
-+}
-+
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/media/dvb/ttusb-dec/Kconfig 2003-07-19 17:03:50.000000000 -0700
-@@ -0,0 +1,24 @@
-+config DVB_TTUSB_DEC
-+ tristate "Technotrend/Hauppauge USB DEC2000-T devices"
-+ depends on DVB_CORE && USB
-+ help
-+ Support for external USB adapters designed by Technotrend and
-+ produced by Hauppauge, shipped under the brand name 'DEC2000-T'.
-+
-+ Even if these devices have a MPEG decoder built in, they transmit
-+ only compressed MPEG data over the USB bus, so you need
-+ an external software decoder to watch TV on your computer.
-+
-+ Say Y if you own such a device and want to use it.
-+
-+config DVB_TTUSB_DEC_FIRMWARE_FILE
-+ string "Full pathname of dec2000t.bin firmware file"
-+ depends on DVB_TTUSB_DEC
-+ default "/etc/dvb/dec2000t.bin"
-+ help
-+ The DEC2000-T requires a firmware in order to boot into a mode in
-+ which it is a slave to the PC. The firmware file can obtained as
-+ follows:
-+ wget http://hauppauge.lightpath.net/de/dec215a.exe
-+ unzip -j dec215a.exe Software/Oem/STB/App/Boot/STB_PC_T.bin
-+ mv STB_PC_T.bin /etc/dvb/dec2000t.bin
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/media/dvb/ttusb-dec/Makefile 2003-07-19 17:03:50.000000000 -0700
-@@ -0,0 +1,11 @@
-+
-+obj-$(CONFIG_DVB_TTUSB_DEC) += ttusb_dec.o dec2000_frontend.o
-+
-+EXTRA_CFLAGS = -Idrivers/media/dvb/dvb-core/
-+
-+host-progs := fdump
-+
-+$(obj)/ttusb_dec.o: $(obj)/dsp_dec2000.h
-+
-+$(obj)/dsp_dec2000.h: $(patsubst "%", %, $(CONFIG_DVB_TTUSB_DEC_FIRMWARE_FILE)) $(obj)/fdump
-+ $(obj)/fdump $< dsp_dec2000 > $@
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/media/dvb/ttusb-dec/ttusb_dec.c 2003-07-19 17:03:50.000000000 -0700
-@@ -0,0 +1,991 @@
-+/*
-+ * TTUSB DEC Driver
-+ *
-+ * Copyright (C) 2003 Alex Woods <linux-dvb@giblets.org>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+ *
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/pci.h>
-+#include <linux/slab.h>
-+#include <linux/usb.h>
-+
-+#include "ttusb_dec.h"
-+#include "dvb_frontend.h"
-+
-+static int debug = 0;
-+
-+#define dprintk if (debug) printk
-+
-+static int ttusb_dec_send_command(struct ttusb_dec *dec, const u8 command,
-+ int param_length, const u8 params[],
-+ int *result_length, u8 cmd_result[])
-+{
-+ int result, actual_len, i;
-+ u8 b[COMMAND_PACKET_SIZE + 4];
-+ u8 c[COMMAND_PACKET_SIZE + 4];
-+
-+ dprintk("%s\n", __FUNCTION__);
-+
-+ if ((result = down_interruptible(&dec->usb_sem))) {
-+ printk("%s: Failed to down usb semaphore.\n", __FUNCTION__);
-+ return result;
-+ }
-+
-+ b[0] = 0xaa;
-+ b[1] = ++dec->trans_count;
-+ b[2] = command;
-+ b[3] = param_length;
-+
-+ if (params)
-+ memcpy(&b[4], params, param_length);
-+
-+ if (debug) {
-+ printk("%s: command: ", __FUNCTION__);
-+ for (i = 0; i < param_length + 4; i++)
-+ printk("0x%02X ", b[i]);
-+ printk("\n");
-+ }
-+
-+ result = usb_bulk_msg(dec->udev, dec->command_pipe, b, sizeof(b),
-+ &actual_len, HZ);
-+
-+ if (result) {
-+ printk("%s: command bulk message failed: error %d\n",
-+ __FUNCTION__, result);
-+ up(&dec->usb_sem);
-+ return result;
-+ }
-+
-+ result = usb_bulk_msg(dec->udev, dec->result_pipe, c, sizeof(c),
-+ &actual_len, HZ);
-+
-+ if (result) {
-+ printk("%s: result bulk message failed: error %d\n",
-+ __FUNCTION__, result);
-+ up(&dec->usb_sem);
-+ return result;
-+ } else {
-+ if (debug) {
-+ printk("%s: result: ", __FUNCTION__);
-+ for (i = 0; i < actual_len; i++)
-+ printk("0x%02X ", c[i]);
-+ printk("\n");
-+ }
-+
-+ if (result_length)
-+ *result_length = c[3];
-+ if (cmd_result && c[3] > 0)
-+ memcpy(cmd_result, &c[4], c[3]);
-+
-+ up(&dec->usb_sem);
-+
-+ return 0;
-+ }
-+}
-+
-+static int ttusb_dec_av_pes2ts_cb(void *priv, unsigned char *data)
-+{
-+ struct dvb_demux_feed *dvbdmxfeed = (struct dvb_demux_feed *)priv;
-+
-+ dvbdmxfeed->cb.ts(data, 188, 0, 0, &dvbdmxfeed->feed.ts, DMX_OK);
-+
-+ return 0;
-+}
-+
-+static void ttusb_dec_set_pids(struct ttusb_dec *dec)
-+{
-+ u8 b[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
-+ 0xff, 0xff };
-+
-+ u16 pcr = htons(dec->pid[DMX_PES_PCR]);
-+ u16 audio = htons(dec->pid[DMX_PES_AUDIO]);
-+ u16 video = htons(dec->pid[DMX_PES_VIDEO]);
-+
-+ dprintk("%s\n", __FUNCTION__);
-+
-+ memcpy(&b[0], &pcr, 2);
-+ memcpy(&b[2], &audio, 2);
-+ memcpy(&b[4], &video, 2);
-+
-+ ttusb_dec_send_command(dec, 0x50, sizeof(b), b, NULL, NULL);
-+
-+ if (!down_interruptible(&dec->pes2ts_sem)) {
-+ dvb_filter_pes2ts_init(&dec->a_pes2ts, dec->pid[DMX_PES_AUDIO],
-+ ttusb_dec_av_pes2ts_cb, dec->demux.feed);
-+ dvb_filter_pes2ts_init(&dec->v_pes2ts, dec->pid[DMX_PES_VIDEO],
-+ ttusb_dec_av_pes2ts_cb, dec->demux.feed);
-+
-+ up(&dec->pes2ts_sem);
-+ }
-+}
-+
-+static int ttusb_dec_i2c_master_xfer(struct dvb_i2c_bus *i2c,
-+ const struct i2c_msg msgs[], int num)
-+{
-+ int result, i;
-+
-+ dprintk("%s\n", __FUNCTION__);
-+
-+ for (i = 0; i < num; i++)
-+ if ((result = ttusb_dec_send_command(i2c->data, msgs[i].addr,
-+ msgs[i].len, msgs[i].buf,
-+ NULL, NULL)))
-+ return result;
-+
-+ return 0;
-+}
-+
-+static void ttusb_dec_process_av_pes(struct ttusb_dec * dec, u8 * av_pes,
-+ int length)
-+{
-+ int i;
-+ u16 csum = 0;
-+ u8 c;
-+
-+ if (length < 16) {
-+ printk("%s: packet too short.\n", __FUNCTION__);
-+ return;
-+ }
-+
-+ for (i = 0; i < length; i += 2) {
-+ csum ^= le16_to_cpup((u16 *)(av_pes + i));
-+ c = av_pes[i];
-+ av_pes[i] = av_pes[i + 1];
-+ av_pes[i + 1] = c;
-+ }
-+
-+ if (csum) {
-+ printk("%s: checksum failed.\n", __FUNCTION__);
-+ return;
-+ }
-+
-+ if (length > 8 + MAX_AV_PES_LENGTH + 4) {
-+ printk("%s: packet too long.\n", __FUNCTION__);
-+ return;
-+ }
-+
-+ if (!(av_pes[0] == 'A' && av_pes[1] == 'V')) {
-+ printk("%s: invalid AV_PES packet.\n", __FUNCTION__);
-+ return;
-+ }
-+
-+ switch (av_pes[2]) {
-+
-+ case 0x01: { /* VideoStream */
-+ int prebytes = av_pes[5] & 0x03;
-+ int postbytes = (av_pes[5] & 0x0c) >> 2;
-+ u16 v_pes_payload_length;
-+
-+ if (dec->v_pes_postbytes > 0 &&
-+ dec->v_pes_postbytes == prebytes) {
-+ memcpy(&dec->v_pes[dec->v_pes_length],
-+ &av_pes[12], prebytes);
-+
-+ if (!down_interruptible(&dec->pes2ts_sem)) {
-+ dvb_filter_pes2ts(&dec->v_pes2ts,
-+ dec->v_pes,
-+ dec->v_pes_length +
-+ prebytes);
-+
-+ up(&dec->pes2ts_sem);
-+ }
-+ }
-+
-+ if (av_pes[5] & 0x10) {
-+ dec->v_pes[7] = 0x80;
-+ dec->v_pes[8] = 0x05;
-+
-+ dec->v_pes[9] = 0x21 |
-+ ((av_pes[8] & 0xc0) >> 5);
-+ dec->v_pes[10] = ((av_pes[8] & 0x3f) << 2) |
-+ ((av_pes[9] & 0xc0) >> 6);
-+ dec->v_pes[11] = 0x01 |
-+ ((av_pes[9] & 0x3f) << 2) |
-+ ((av_pes[10] & 0x80) >> 6);
-+ dec->v_pes[12] = ((av_pes[10] & 0x7f) << 1) |
-+ ((av_pes[11] & 0xc0) >> 7);
-+ dec->v_pes[13] = 0x01 |
-+ ((av_pes[11] & 0x7f) << 1);
-+
-+ memcpy(&dec->v_pes[14], &av_pes[12 + prebytes],
-+ length - 16 - prebytes);
-+ dec->v_pes_length = 14 + length - 16 - prebytes;
-+ } else {
-+ dec->v_pes[7] = 0x00;
-+ dec->v_pes[8] = 0x00;
-+
-+ memcpy(&dec->v_pes[9], &av_pes[8], length - 12);
-+ dec->v_pes_length = 9 + length - 12;
-+ }
-+
-+ dec->v_pes_postbytes = postbytes;
-+
-+ if (dec->v_pes[9 + dec->v_pes[8]] == 0x00 &&
-+ dec->v_pes[10 + dec->v_pes[8]] == 0x00 &&
-+ dec->v_pes[11 + dec->v_pes[8]] == 0x01)
-+ dec->v_pes[6] = 0x84;
-+ else
-+ dec->v_pes[6] = 0x80;
-+
-+ v_pes_payload_length = htons(dec->v_pes_length - 6 +
-+ postbytes);
-+ memcpy(&dec->v_pes[4], &v_pes_payload_length, 2);
-+
-+ if (postbytes == 0) {
-+ if (!down_interruptible(&dec->pes2ts_sem)) {
-+ dvb_filter_pes2ts(&dec->v_pes2ts,
-+ dec->v_pes,
-+ dec->v_pes_length);
-+
-+ up(&dec->pes2ts_sem);
-+ }
-+ }
-+
-+ break;
-+ }
-+
-+ case 0x02: /* MainAudioStream */
-+ dvb_filter_pes2ts(&dec->a_pes2ts, &av_pes[8], length - 12);
-+ break;
-+
-+ default:
-+ printk("%s: unknown AV_PES type: %02x.\n", __FUNCTION__,
-+ av_pes[2]);
-+ break;
-+
-+ }
-+}
-+
-+static void ttusb_dec_process_urb_frame(struct ttusb_dec * dec, u8 * b,
-+ int length)
-+{
-+ while (length) {
-+ switch (dec->av_pes_state) {
-+
-+ case 0:
-+ case 1:
-+ case 3:
-+ if (*b++ == 0xaa) {
-+ dec->av_pes_state++;
-+ if (dec->av_pes_state == 4)
-+ dec->av_pes_length = 0;
-+ } else {
-+ dec->av_pes_state = 0;
-+ }
-+
-+ length--;
-+ break;
-+
-+ case 2:
-+ if (*b++ == 0x00) {
-+ dec->av_pes_state++;
-+ } else {
-+ dec->av_pes_state = 0;
-+ }
-+
-+ length--;
-+ break;
-+
-+ case 4:
-+ dec->av_pes[dec->av_pes_length++] = *b++;
-+
-+ if (dec->av_pes_length == 8) {
-+ dec->av_pes_state++;
-+ dec->av_pes_payload_length = le16_to_cpup(
-+ (u16 *)(dec->av_pes + 6));
-+ }
-+
-+ length--;
-+ break;
-+
-+ case 5: {
-+ int remainder = dec->av_pes_payload_length +
-+ 8 - dec->av_pes_length;
-+
-+ if (length >= remainder) {
-+ memcpy(dec->av_pes + dec->av_pes_length,
-+ b, remainder);
-+ dec->av_pes_length += remainder;
-+ b += remainder;
-+ length -= remainder;
-+ dec->av_pes_state++;
-+ } else {
-+ memcpy(&dec->av_pes[dec->av_pes_length],
-+ b, length);
-+ dec->av_pes_length += length;
-+ length = 0;
-+ }
-+
-+ break;
-+ }
-+
-+ case 6:
-+ dec->av_pes[dec->av_pes_length++] = *b++;
-+
-+ if (dec->av_pes_length ==
-+ 8 + dec->av_pes_payload_length + 4) {
-+ ttusb_dec_process_av_pes(dec, dec->av_pes,
-+ dec->av_pes_length);
-+ dec->av_pes_state = 0;
-+ }
-+
-+ length--;
-+ break;
-+
-+ default:
-+ printk("%s: illegal packet state encountered.\n",
-+ __FUNCTION__);
-+ dec->av_pes_state = 0;
-+
-+ }
-+
-+ }
-+}
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+static void ttusb_dec_process_urb(struct urb *urb)
-+#else
-+static void ttusb_dec_process_urb(struct urb *urb, struct pt_regs *ptregs)
-+#endif
-+{
-+ struct ttusb_dec *dec = urb->context;
-+
-+ if (!urb->status) {
-+ int i;
-+
-+ for (i = 0; i < FRAMES_PER_ISO_BUF; i++) {
-+ struct usb_iso_packet_descriptor *d;
-+ u8 *b;
-+ int length;
-+
-+ d = &urb->iso_frame_desc[i];
-+ b = urb->transfer_buffer + d->offset;
-+ length = d->actual_length;
-+
-+ ttusb_dec_process_urb_frame(dec, b, length);
-+ }
-+ } else {
-+ /* -ENOENT is expected when unlinking urbs */
-+ if (urb->status != -ENOENT)
-+ dprintk("%s: urb error: %d\n", __FUNCTION__,
-+ urb->status);
-+ }
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
-+ if (dec->iso_stream_count)
-+ usb_submit_urb(urb, GFP_KERNEL);
-+#endif
-+}
-+
-+static void ttusb_dec_setup_urbs(struct ttusb_dec *dec)
-+{
-+ int i, j, buffer_offset = 0;
-+
-+ dprintk("%s\n", __FUNCTION__);
-+
-+ for (i = 0; i < ISO_BUF_COUNT; i++) {
-+ int frame_offset = 0;
-+ struct urb *urb = dec->iso_urb[i];
-+
-+ urb->dev = dec->udev;
-+ urb->context = dec;
-+ urb->complete = ttusb_dec_process_urb;
-+ urb->pipe = dec->stream_pipe;
-+ urb->transfer_flags = URB_ISO_ASAP;
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
-+ urb->interval = 1;
-+#endif
-+ urb->number_of_packets = FRAMES_PER_ISO_BUF;
-+ urb->transfer_buffer_length = ISO_FRAME_SIZE *
-+ FRAMES_PER_ISO_BUF;
-+ urb->transfer_buffer = dec->iso_buffer + buffer_offset;
-+ buffer_offset += ISO_FRAME_SIZE * FRAMES_PER_ISO_BUF;
-+
-+ for (j = 0; j < FRAMES_PER_ISO_BUF; j++) {
-+ urb->iso_frame_desc[j].offset = frame_offset;
-+ urb->iso_frame_desc[j].length = ISO_FRAME_SIZE;
-+ frame_offset += ISO_FRAME_SIZE;
-+ }
-+ }
-+}
-+
-+static void ttusb_dec_stop_iso_xfer(struct ttusb_dec *dec)
-+{
-+ int i;
-+
-+ dprintk("%s\n", __FUNCTION__);
-+
-+ if (down_interruptible(&dec->iso_sem))
-+ return;
-+
-+ dec->iso_stream_count--;
-+
-+ if (!dec->iso_stream_count) {
-+ u8 b0[] = { 0x00 };
-+
-+ for (i = 0; i < ISO_BUF_COUNT; i++)
-+ usb_unlink_urb(dec->iso_urb[i]);
-+
-+ ttusb_dec_send_command(dec, 0x81, sizeof(b0), b0, NULL, NULL);
-+ }
-+
-+ up(&dec->iso_sem);
-+}
-+
-+/* Setting the interface of the DEC tends to take down the USB communications
-+ * for a short period, so it's important not to call this function just before
-+ * trying to talk to it.
-+ */
-+static void ttusb_dec_set_streaming_interface(struct ttusb_dec *dec)
-+{
-+ if (!dec->interface) {
-+ usb_set_interface(dec->udev, 0, 8);
-+ dec->interface = 8;
-+ }
-+}
-+
-+static int ttusb_dec_start_iso_xfer(struct ttusb_dec *dec)
-+{
-+ int i, result;
-+
-+ dprintk("%s\n", __FUNCTION__);
-+
-+ if (down_interruptible(&dec->iso_sem))
-+ return -EAGAIN;
-+
-+ if (!dec->iso_stream_count) {
-+ u8 b0[] = { 0x05 };
-+
-+ ttusb_dec_send_command(dec, 0x80, sizeof(b0), b0, NULL, NULL);
-+
-+ ttusb_dec_setup_urbs(dec);
-+
-+ for (i = 0; i < ISO_BUF_COUNT; i++) {
-+ if ((result = usb_submit_urb(dec->iso_urb[i]
-+ , GFP_KERNEL))) {
-+ printk("%s: failed urb submission %d: "
-+ "error %d\n", __FUNCTION__, i, result);
-+
-+ while (i) {
-+ usb_unlink_urb(dec->iso_urb[i - 1]);
-+ i--;
-+ }
-+
-+ up(&dec->iso_sem);
-+ return result;
-+ }
-+ }
-+
-+ dec->av_pes_state = 0;
-+ dec->v_pes_postbytes = 0;
-+ }
-+
-+ dec->iso_stream_count++;
-+
-+ up(&dec->iso_sem);
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+ ttusb_dec_set_streaming_interface(dec);
-+#endif
-+
-+ return 0;
-+}
-+
-+static int ttusb_dec_start_feed(struct dvb_demux_feed *dvbdmxfeed)
-+{
-+ struct dvb_demux *dvbdmx = dvbdmxfeed->demux;
-+ struct ttusb_dec *dec = dvbdmx->priv;
-+
-+ dprintk("%s\n", __FUNCTION__);
-+
-+ if (!dvbdmx->dmx.frontend)
-+ return -EINVAL;
-+
-+ dprintk(" pid: 0x%04X\n", dvbdmxfeed->pid);
-+
-+ switch (dvbdmxfeed->type) {
-+
-+ case DMX_TYPE_TS:
-+ dprintk(" type: DMX_TYPE_TS\n");
-+ break;
-+
-+ case DMX_TYPE_SEC:
-+ dprintk(" type: DMX_TYPE_SEC\n");
-+ break;
-+
-+ default:
-+ dprintk(" type: unknown (%d)\n", dvbdmxfeed->type);
-+ return -EINVAL;
-+
-+ }
-+
-+ dprintk(" ts_type:");
-+
-+ if (dvbdmxfeed->ts_type & TS_DECODER)
-+ dprintk(" TS_DECODER");
-+
-+ if (dvbdmxfeed->ts_type & TS_PACKET)
-+ dprintk(" TS_PACKET");
-+
-+ if (dvbdmxfeed->ts_type & TS_PAYLOAD_ONLY)
-+ dprintk(" TS_PAYLOAD_ONLY");
-+
-+ dprintk("\n");
-+
-+ switch (dvbdmxfeed->pes_type) {
-+
-+ case DMX_TS_PES_VIDEO:
-+ dprintk(" pes_type: DMX_TS_PES_VIDEO\n");
-+ dec->pid[DMX_PES_PCR] = dvbdmxfeed->pid;
-+ dec->pid[DMX_PES_VIDEO] = dvbdmxfeed->pid;
-+ ttusb_dec_set_pids(dec);
-+ break;
-+
-+ case DMX_TS_PES_AUDIO:
-+ dprintk(" pes_type: DMX_TS_PES_AUDIO\n");
-+ dec->pid[DMX_PES_AUDIO] = dvbdmxfeed->pid;
-+ ttusb_dec_set_pids(dec);
-+ break;
-+
-+ case DMX_TS_PES_TELETEXT:
-+ dec->pid[DMX_PES_TELETEXT] = dvbdmxfeed->pid;
-+ dprintk(" pes_type: DMX_TS_PES_TELETEXT\n");
-+ break;
-+
-+ case DMX_TS_PES_PCR:
-+ dprintk(" pes_type: DMX_TS_PES_PCR\n");
-+ dec->pid[DMX_PES_PCR] = dvbdmxfeed->pid;
-+ ttusb_dec_set_pids(dec);
-+ break;
-+
-+ case DMX_TS_PES_OTHER:
-+ dprintk(" pes_type: DMX_TS_PES_OTHER\n");
-+ break;
-+
-+ default:
-+ dprintk(" pes_type: unknown (%d)\n", dvbdmxfeed->pes_type);
-+ return -EINVAL;
-+
-+ }
-+
-+ ttusb_dec_start_iso_xfer(dec);
-+
-+ return 0;
-+}
-+
-+static int ttusb_dec_stop_feed(struct dvb_demux_feed *dvbdmxfeed)
-+{
-+ struct ttusb_dec *dec = dvbdmxfeed->demux->priv;
-+
-+ dprintk("%s\n", __FUNCTION__);
-+
-+ ttusb_dec_stop_iso_xfer(dec);
-+
-+ return 0;
-+}
-+
-+static void ttusb_dec_free_iso_urbs(struct ttusb_dec *dec)
-+{
-+ int i;
-+
-+ dprintk("%s\n", __FUNCTION__);
-+
-+ for (i = 0; i < ISO_BUF_COUNT; i++)
-+ if (dec->iso_urb[i])
-+ usb_free_urb(dec->iso_urb[i]);
-+
-+ pci_free_consistent(NULL,
-+ ISO_FRAME_SIZE * (FRAMES_PER_ISO_BUF *
-+ ISO_BUF_COUNT),
-+ dec->iso_buffer, dec->iso_dma_handle);
-+}
-+
-+static int ttusb_dec_alloc_iso_urbs(struct ttusb_dec *dec)
-+{
-+ int i;
-+
-+ dprintk("%s\n", __FUNCTION__);
-+
-+ dec->iso_buffer = pci_alloc_consistent(NULL,
-+ ISO_FRAME_SIZE *
-+ (FRAMES_PER_ISO_BUF *
-+ ISO_BUF_COUNT),
-+ &dec->iso_dma_handle);
-+
-+ memset(dec->iso_buffer, 0,
-+ sizeof(ISO_FRAME_SIZE * (FRAMES_PER_ISO_BUF * ISO_BUF_COUNT)));
-+
-+ for (i = 0; i < ISO_BUF_COUNT; i++) {
-+ struct urb *urb;
-+
-+ if (!(urb = usb_alloc_urb(FRAMES_PER_ISO_BUF, GFP_KERNEL))) {
-+ ttusb_dec_free_iso_urbs(dec);
-+ return -ENOMEM;
-+ }
-+
-+ dec->iso_urb[i] = urb;
-+ }
-+
-+ ttusb_dec_setup_urbs(dec);
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+ for (i = 0; i < ISO_BUF_COUNT; i++) {
-+ int next = (i + 1) % ISO_BUF_COUNT;
-+ dec->iso_urb[i]->next = dec->iso_urb[next];
-+ }
-+#endif
-+
-+ return 0;
-+}
-+
-+static void ttusb_dec_init_v_pes(struct ttusb_dec *dec)
-+{
-+ dprintk("%s\n", __FUNCTION__);
-+
-+ dec->v_pes[0] = 0x00;
-+ dec->v_pes[1] = 0x00;
-+ dec->v_pes[2] = 0x01;
-+ dec->v_pes[3] = 0xe0;
-+}
-+
-+static void ttusb_dec_init_usb(struct ttusb_dec *dec)
-+{
-+ dprintk("%s\n", __FUNCTION__);
-+
-+ sema_init(&dec->usb_sem, 1);
-+ sema_init(&dec->iso_sem, 1);
-+
-+ dec->command_pipe = usb_sndbulkpipe(dec->udev, COMMAND_PIPE);
-+ dec->result_pipe = usb_rcvbulkpipe(dec->udev, RESULT_PIPE);
-+ dec->stream_pipe = usb_rcvisocpipe(dec->udev, STREAM_PIPE);
-+
-+ ttusb_dec_alloc_iso_urbs(dec);
-+}
-+
-+#include "dsp_dec2000.h"
-+
-+static int ttusb_dec_boot_dsp(struct ttusb_dec *dec)
-+{
-+ int i, j, actual_len, result, size, trans_count;
-+ u8 b0[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0xc8, 0x61,
-+ 0x00 };
-+ u8 b1[] = { 0x61 };
-+ u8 b[ARM_PACKET_SIZE];
-+ u32 dsp_length = htonl(sizeof(dsp_dec2000));
-+
-+ dprintk("%s\n", __FUNCTION__);
-+
-+ memcpy(b0, &dsp_length, 4);
-+
-+ result = ttusb_dec_send_command(dec, 0x41, sizeof(b0), b0, NULL, NULL);
-+
-+ if (result)
-+ return result;
-+
-+ trans_count = 0;
-+ j = 0;
-+
-+ for (i = 0; i < sizeof(dsp_dec2000); i += COMMAND_PACKET_SIZE) {
-+ size = sizeof(dsp_dec2000) - i;
-+ if (size > COMMAND_PACKET_SIZE)
-+ size = COMMAND_PACKET_SIZE;
-+
-+ b[j + 0] = 0xaa;
-+ b[j + 1] = trans_count++;
-+ b[j + 2] = 0xf0;
-+ b[j + 3] = size;
-+ memcpy(&b[j + 4], &dsp_dec2000[i], size);
-+
-+ j += COMMAND_PACKET_SIZE + 4;
-+
-+ if (j >= ARM_PACKET_SIZE) {
-+ result = usb_bulk_msg(dec->udev, dec->command_pipe, b,
-+ ARM_PACKET_SIZE, &actual_len,
-+ HZ / 10);
-+ j = 0;
-+ } else if (size < COMMAND_PACKET_SIZE) {
-+ result = usb_bulk_msg(dec->udev, dec->command_pipe, b,
-+ j - COMMAND_PACKET_SIZE + size,
-+ &actual_len, HZ / 10);
-+ }
-+ }
-+
-+ result = ttusb_dec_send_command(dec, 0x43, sizeof(b1), b1, NULL, NULL);
-+
-+ return result;
-+}
-+
-+static void ttusb_dec_init_stb(struct ttusb_dec *dec)
-+{
-+ u8 c[COMMAND_PACKET_SIZE];
-+ int c_length;
-+ int result;
-+
-+ dprintk("%s\n", __FUNCTION__);
-+
-+ result = ttusb_dec_send_command(dec, 0x08, 0, NULL, &c_length, c);
-+
-+ if (!result)
-+ if (c_length != 0x0c || (c_length == 0x0c && c[9] != 0x63))
-+ ttusb_dec_boot_dsp(dec);
-+}
-+
-+static int ttusb_dec_init_dvb(struct ttusb_dec *dec)
-+{
-+ int result;
-+
-+ dprintk("%s\n", __FUNCTION__);
-+
-+ if ((result = dvb_register_adapter(&dec->adapter, "dec2000")) < 0) {
-+ printk("%s: dvb_register_adapter failed: error %d\n",
-+ __FUNCTION__, result);
-+
-+ return result;
-+ }
-+
-+ if (!(dec->i2c_bus = dvb_register_i2c_bus(ttusb_dec_i2c_master_xfer,
-+ dec, dec->adapter, 0))) {
-+ printk("%s: dvb_register_i2c_bus failed\n", __FUNCTION__);
-+
-+ dvb_unregister_adapter(dec->adapter);
-+
-+ return -ENOMEM;
-+ }
-+
-+ dec->demux.dmx.capabilities = DMX_TS_FILTERING | DMX_SECTION_FILTERING;
-+
-+ dec->demux.priv = (void *)dec;
-+ dec->demux.filternum = 31;
-+ dec->demux.feednum = 31;
-+ dec->demux.start_feed = ttusb_dec_start_feed;
-+ dec->demux.stop_feed = ttusb_dec_stop_feed;
-+ dec->demux.write_to_decoder = NULL;
-+
-+ if ((result = dvb_dmx_init(&dec->demux)) < 0) {
-+ printk("%s: dvb_dmx_init failed: error %d\n", __FUNCTION__,
-+ result);
-+
-+ dvb_unregister_i2c_bus(ttusb_dec_i2c_master_xfer, dec->adapter,
-+ 0);
-+ dvb_unregister_adapter(dec->adapter);
-+
-+ return result;
-+ }
-+
-+ dec->dmxdev.filternum = 32;
-+ dec->dmxdev.demux = &dec->demux.dmx;
-+ dec->dmxdev.capabilities = 0;
-+
-+ if ((result = dvb_dmxdev_init(&dec->dmxdev, dec->adapter)) < 0) {
-+ printk("%s: dvb_dmxdev_init failed: error %d\n",
-+ __FUNCTION__, result);
-+
-+ dvb_dmx_release(&dec->demux);
-+ dvb_unregister_i2c_bus(ttusb_dec_i2c_master_xfer, dec->adapter,
-+ 0);
-+ dvb_unregister_adapter(dec->adapter);
-+
-+ return result;
-+ }
-+
-+ dec->frontend.source = DMX_FRONTEND_0;
-+
-+ if ((result = dec->demux.dmx.add_frontend(&dec->demux.dmx,
-+ &dec->frontend)) < 0) {
-+ printk("%s: dvb_dmx_init failed: error %d\n", __FUNCTION__,
-+ result);
-+
-+ dvb_dmxdev_release(&dec->dmxdev);
-+ dvb_dmx_release(&dec->demux);
-+ dvb_unregister_i2c_bus(ttusb_dec_i2c_master_xfer, dec->adapter,
-+ 0);
-+ dvb_unregister_adapter(dec->adapter);
-+
-+ return result;
-+ }
-+
-+ if ((result = dec->demux.dmx.connect_frontend(&dec->demux.dmx,
-+ &dec->frontend)) < 0) {
-+ printk("%s: dvb_dmx_init failed: error %d\n", __FUNCTION__,
-+ result);
-+
-+ dec->demux.dmx.remove_frontend(&dec->demux.dmx, &dec->frontend);
-+ dvb_dmxdev_release(&dec->dmxdev);
-+ dvb_dmx_release(&dec->demux);
-+ dvb_unregister_i2c_bus(ttusb_dec_i2c_master_xfer, dec->adapter,
-+ 0);
-+ dvb_unregister_adapter(dec->adapter);
-+
-+ return result;
-+ }
-+
-+ sema_init(&dec->pes2ts_sem, 1);
-+
-+ dvb_net_init(dec->adapter, &dec->dvb_net, &dec->demux.dmx);
-+
-+ return 0;
-+}
-+
-+static void ttusb_dec_exit_dvb(struct ttusb_dec *dec)
-+{
-+ dprintk("%s\n", __FUNCTION__);
-+
-+ dvb_net_release(&dec->dvb_net);
-+ dec->demux.dmx.close(&dec->demux.dmx);
-+ dec->demux.dmx.remove_frontend(&dec->demux.dmx, &dec->frontend);
-+ dvb_dmxdev_release(&dec->dmxdev);
-+ dvb_dmx_release(&dec->demux);
-+ dvb_unregister_i2c_bus(ttusb_dec_i2c_master_xfer, dec->adapter, 0);
-+ dvb_unregister_adapter(dec->adapter);
-+}
-+
-+static void ttusb_dec_exit_usb(struct ttusb_dec *dec)
-+{
-+ int i;
-+
-+ dprintk("%s\n", __FUNCTION__);
-+
-+ dec->iso_stream_count = 0;
-+
-+ for (i = 0; i < ISO_BUF_COUNT; i++)
-+ usb_unlink_urb(dec->iso_urb[i]);
-+
-+ ttusb_dec_free_iso_urbs(dec);
-+}
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+static void *ttusb_dec_probe(struct usb_device *udev, unsigned int ifnum,
-+ const struct usb_device_id *id)
-+{
-+ struct ttusb_dec *dec;
-+
-+ dprintk("%s\n", __FUNCTION__);
-+
-+ if (ifnum != 0)
-+ return NULL;
-+
-+ if (!(dec = kmalloc(sizeof(struct ttusb_dec), GFP_KERNEL))) {
-+ printk("%s: couldn't allocate memory.\n", __FUNCTION__);
-+ return NULL;
-+ }
-+
-+ memset(dec, 0, sizeof(struct ttusb_dec));
-+
-+ dec->udev = udev;
-+
-+ ttusb_dec_init_usb(dec);
-+ ttusb_dec_init_stb(dec);
-+ ttusb_dec_init_dvb(dec);
-+ ttusb_dec_init_v_pes(dec);
-+
-+ return (void *)dec;
-+}
-+#else
-+static int ttusb_dec_probe(struct usb_interface *intf,
-+ const struct usb_device_id *id)
-+{
-+ struct usb_device *udev;
-+ struct ttusb_dec *dec;
-+
-+ dprintk("%s\n", __FUNCTION__);
-+
-+ udev = interface_to_usbdev(intf);
-+
-+ if (!(dec = kmalloc(sizeof(struct ttusb_dec), GFP_KERNEL))) {
-+ printk("%s: couldn't allocate memory.\n", __FUNCTION__);
-+ return -ENOMEM;
-+ }
-+
-+ memset(dec, 0, sizeof(struct ttusb_dec));
-+
-+ dec->udev = udev;
-+
-+ ttusb_dec_init_usb(dec);
-+ ttusb_dec_init_stb(dec);
-+ ttusb_dec_init_dvb(dec);
-+ ttusb_dec_init_v_pes(dec);
-+
-+ usb_set_intfdata(intf, (void *)dec);
-+ ttusb_dec_set_streaming_interface(dec);
-+
-+ return 0;
-+}
-+#endif
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+static void ttusb_dec_disconnect(struct usb_device *udev, void *data)
-+{
-+ struct ttusb_dec *dec = data;
-+#else
-+static void ttusb_dec_disconnect(struct usb_interface *intf)
-+{
-+ struct ttusb_dec *dec = usb_get_intfdata(intf);
-+
-+ usb_set_intfdata(intf, NULL);
-+#endif
-+
-+ dprintk("%s\n", __FUNCTION__);
-+
-+ ttusb_dec_exit_usb(dec);
-+ ttusb_dec_exit_dvb(dec);
-+
-+ kfree(dec);
-+}
-+
-+static struct usb_device_id ttusb_dec_table[] = {
-+ {USB_DEVICE(0x0b48, 0x1006)}, /* Unconfirmed */
-+ {USB_DEVICE(0x0b48, 0x1007)}, /* Unconfirmed */
-+ {USB_DEVICE(0x0b48, 0x1008)}, /* DEC 2000 t */
-+ {}
-+};
-+
-+static struct usb_driver ttusb_dec_driver = {
-+ name: DRIVER_NAME,
-+ probe: ttusb_dec_probe,
-+ disconnect: ttusb_dec_disconnect,
-+ id_table: ttusb_dec_table,
-+};
-+
-+static int __init ttusb_dec_init(void)
-+{
-+ int result;
-+
-+ if ((result = usb_register(&ttusb_dec_driver)) < 0) {
-+ printk("%s: initialisation failed: error %d.\n", __FUNCTION__,
-+ result);
-+ return result;
-+ }
-+
-+ return 0;
-+}
-+
-+static void __exit ttusb_dec_exit(void)
-+{
-+ usb_deregister(&ttusb_dec_driver);
-+}
-+
-+module_init(ttusb_dec_init);
-+module_exit(ttusb_dec_exit);
-+
-+MODULE_AUTHOR("Alex Woods <linux-dvb@giblets.org>");
-+MODULE_DESCRIPTION(DRIVER_NAME);
-+MODULE_LICENSE("GPL");
-+MODULE_DEVICE_TABLE(usb, ttusb_dec_table);
-+
-+MODULE_PARM(debug, "i");
-+MODULE_PARM_DESC(debug, "Debug level");
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/media/dvb/ttusb-dec/ttusb_dec.h 2003-07-19 17:03:50.000000000 -0700
-@@ -0,0 +1,87 @@
-+/*
-+ * TTUSB DEC Driver
-+ *
-+ * Copyright (C) 2003 Alex Woods <linux-dvb@giblets.org>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+ *
-+ */
-+
-+#ifndef _TTUSB_DEC_H
-+#define _TTUSB_DEC_H
-+
-+#include "asm/semaphore.h"
-+#include "dmxdev.h"
-+#include "dvb_demux.h"
-+#include "dvb_filter.h"
-+#include "dvb_i2c.h"
-+#include "dvb_net.h"
-+
-+#define DRIVER_NAME "TechnoTrend/Hauppauge DEC USB"
-+
-+#define COMMAND_PIPE 0x03
-+#define RESULT_PIPE 0x84
-+#define STREAM_PIPE 0x88
-+
-+#define COMMAND_PACKET_SIZE 0x3c
-+#define ARM_PACKET_SIZE 0x1000
-+
-+#define ISO_BUF_COUNT 0x04
-+#define FRAMES_PER_ISO_BUF 0x04
-+#define ISO_FRAME_SIZE 0x0380
-+
-+#define MAX_AV_PES_LENGTH 6144
-+
-+struct ttusb_dec {
-+ /* DVB bits */
-+ struct dvb_adapter *adapter;
-+ struct dmxdev dmxdev;
-+ struct dvb_demux demux;
-+ struct dmx_frontend frontend;
-+ struct dvb_i2c_bus *i2c_bus;
-+ struct dvb_net dvb_net;
-+
-+ u16 pid[DMX_PES_OTHER];
-+
-+ /* USB bits */
-+ struct usb_device *udev;
-+ u8 trans_count;
-+ unsigned int command_pipe;
-+ unsigned int result_pipe;
-+ unsigned int stream_pipe;
-+ int interface;
-+ struct semaphore usb_sem;
-+
-+ void *iso_buffer;
-+ dma_addr_t iso_dma_handle;
-+ struct urb *iso_urb[ISO_BUF_COUNT];
-+ int iso_stream_count;
-+ struct semaphore iso_sem;
-+
-+ u8 av_pes[MAX_AV_PES_LENGTH + 4];
-+ int av_pes_state;
-+ int av_pes_length;
-+ int av_pes_payload_length;
-+
-+ struct dvb_filter_pes2ts a_pes2ts;
-+ struct dvb_filter_pes2ts v_pes2ts;
-+ struct semaphore pes2ts_sem;
-+
-+ u8 v_pes[16 + MAX_AV_PES_LENGTH];
-+ int v_pes_length;
-+ int v_pes_postbytes;
-+};
-+
-+#endif
---- linux-2.6.0-test1/drivers/media/video/dpc7146.c 2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/video/dpc7146.c 2003-07-19 17:03:50.000000000 -0700
-@@ -173,6 +173,8 @@ static int dpc_init_done(struct saa7146_
- return 0;
- }
-
-+static struct saa7146_ext_vv vv_data;
-+
- /* this function only gets called when the probing was successful */
- static int dpc_attach(struct saa7146_dev* dev, struct saa7146_pci_extension_data *info)
- {
-@@ -183,7 +185,7 @@ static int dpc_attach(struct saa7146_dev
- /* checking for i2c-devices can be omitted here, because we
- already did this in "dpc_vl42_probe" */
-
-- saa7146_vv_init(dev);
-+ saa7146_vv_init(dev,&vv_data);
- if( 0 != saa7146_register_device(&dpc->video_dev, dev, "dpc", VFL_TYPE_GRABBER)) {
- ERR(("cannot register capture v4l2 device. skipping.\n"));
- return -1;
-@@ -246,8 +248,9 @@ int dpc_vbi_bypass(struct saa7146_dev* d
- }
- #endif
-
--static int dpc_ioctl(struct saa7146_dev *dev, unsigned int cmd, void *arg)
-+static int dpc_ioctl(struct saa7146_fh *fh, unsigned int cmd, void *arg)
- {
-+ struct saa7146_dev *dev = fh->dev;
- struct dpc* dpc = (struct dpc*)dev->ext_priv;
- /*
- struct saa7146_vv *vv = dev->vv_data;
-@@ -307,23 +310,32 @@ static int std_callback(struct saa7146_d
- }
-
- static struct saa7146_standard standard[] = {
-- { "PAL-BG", V4L2_STD_PAL_BG, SAA7146_PAL_VALUES },
-- { "PAL-I", V4L2_STD_PAL_I, SAA7146_PAL_VALUES },
-- { "NTSC", V4L2_STD_NTSC, SAA7146_NTSC_VALUES },
-- { "SECAM", V4L2_STD_SECAM, SAA7146_SECAM_VALUES },
-+ {
-+ .name = "PAL", .id = V4L2_STD_PAL,
-+ .v_offset = 0x17, .v_field = 288, .v_calc = 576,
-+ .h_offset = 0x14, .h_pixels = 680, .h_calc = 680+1,
-+ .v_max_out = 576, .h_max_out = 768,
-+ }, {
-+ .name = "NTSC", .id = V4L2_STD_NTSC,
-+ .v_offset = 0x16, .v_field = 240, .v_calc = 480,
-+ .h_offset = 0x06, .h_pixels = 708, .h_calc = 708+1,
-+ .v_max_out = 480, .h_max_out = 640,
-+ }, {
-+ .name = "SECAM", .id = V4L2_STD_SECAM,
-+ .v_offset = 0x14, .v_field = 288, .v_calc = 576,
-+ .h_offset = 0x14, .h_pixels = 720, .h_calc = 720+1,
-+ .v_max_out = 576, .h_max_out = 768,
-+ }
- };
-
--static
--struct saa7146_extension extension;
-+static struct saa7146_extension extension;
-
--static
--struct saa7146_pci_extension_data dpc = {
-+static struct saa7146_pci_extension_data dpc = {
- .ext_priv = "Multimedia eXtension Board",
- .ext = &extension,
- };
-
--static
--struct pci_device_id pci_tbl[] = {
-+static struct pci_device_id pci_tbl[] = {
- {
- .vendor = PCI_VENDOR_ID_PHILIPS,
- .device = PCI_DEVICE_ID_PHILIPS_SAA7146,
-@@ -337,8 +349,7 @@ struct pci_device_id pci_tbl[] = {
-
- MODULE_DEVICE_TABLE(pci, pci_tbl);
-
--static
--struct saa7146_ext_vv vv_data = {
-+static struct saa7146_ext_vv vv_data = {
- .inputs = DPC_INPUTS,
- .capabilities = V4L2_CAP_VBI_CAPTURE,
- .stds = &standard[0],
-@@ -348,14 +359,12 @@ struct saa7146_ext_vv vv_data = {
- .ioctl = dpc_ioctl,
- };
-
--static
--struct saa7146_extension extension = {
-+static struct saa7146_extension extension = {
- .name = "dpc7146 demonstration board",
- .flags = SAA7146_USE_I2C_IRQ,
-
- .pci_tbl = &pci_tbl[0],
- .module = THIS_MODULE,
-- .ext_vv_data = &vv_data,
-
- .probe = dpc_probe,
- .attach = dpc_attach,
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/media/video/hexium_gemini.c 2003-07-19 17:03:50.000000000 -0700
-@@ -0,0 +1,411 @@
-+/*
-+ hexium_gemini.c - v4l2 driver for Hexium Gemini frame grabber cards
-+
-+ Visit http://www.mihu.de/linux/saa7146/ and follow the link
-+ to "hexium" for further details about this card.
-+
-+ Copyright (C) 2003 Michael Hunold <michael@mihu.de>
-+
-+ This program is free software; you can redistribute it and/or modify
-+ it under the terms of the GNU General Public License as published by
-+ the Free Software Foundation; either version 2 of the License, or
-+ (at your option) any later version.
-+
-+ This program is distributed in the hope that it will be useful,
-+ but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ GNU General Public License for more details.
-+
-+ You should have received a copy of the GNU General Public License
-+ along with this program; if not, write to the Free Software
-+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+*/
-+
-+#define DEBUG_VARIABLE debug
-+
-+#include <media/saa7146_vv.h>
-+
-+static int debug = 255;
-+MODULE_PARM(debug, "i");
-+MODULE_PARM_DESC(debug, "debug verbosity");
-+
-+/* global variables */
-+int hexium_num = 0;
-+
-+#include "hexium_gemini.h"
-+
-+/* bring hardware to a sane state. this has to be done, just in case someone
-+ wants to capture from this device before it has been properly initialized.
-+ the capture engine would badly fail, because no valid signal arrives on the
-+ saa7146, thus leading to timeouts and stuff. */
-+static int hexium_init_done(struct saa7146_dev *dev)
-+{
-+ struct hexium *hexium = (struct hexium *) dev->ext_priv;
-+ union i2c_smbus_data data;
-+ int i = 0;
-+
-+ DEB_D(("hexium_init_done called.\n"));
-+
-+ /* initialize the helper ics to useful values */
-+ for (i = 0; i < sizeof(hexium_ks0127b); i++) {
-+ data.byte = hexium_ks0127b[i];
-+ if (0 != i2c_smbus_xfer(&hexium->i2c_adapter, 0x6c, 0, I2C_SMBUS_WRITE, i, I2C_SMBUS_BYTE_DATA, &data)) {
-+ printk("failed for address 0x%02x\n", i);
-+ }
-+ }
-+
-+ return 0;
-+}
-+
-+static int hexium_set_input(struct hexium *hexium, int input)
-+{
-+ union i2c_smbus_data data;
-+
-+ DEB_D((".\n"));
-+
-+ data.byte = hexium_input_select[input].byte;
-+ if (0 != i2c_smbus_xfer(&hexium->i2c_adapter, 0x6c, 0, I2C_SMBUS_WRITE, hexium_input_select[input].adr, I2C_SMBUS_BYTE_DATA, &data)) {
-+ return -1;
-+ }
-+
-+ return 0;
-+}
-+
-+static int hexium_set_standard(struct hexium *hexium, struct hexium_data *vdec)
-+{
-+ union i2c_smbus_data data;
-+ int i = 0;
-+
-+ DEB_D((".\n"));
-+
-+ while (vdec[i].adr != -1) {
-+ data.byte = vdec[i].byte;
-+ if (0 != i2c_smbus_xfer(&hexium->i2c_adapter, 0x6c, 0, I2C_SMBUS_WRITE, vdec[i].adr, I2C_SMBUS_BYTE_DATA, &data)) {
-+ printk("failed for address 0x%02x\n", i);
-+ return -1;
-+ }
-+ i++;
-+ }
-+ return 0;
-+}
-+
-+static struct saa7146_ext_vv vv_data;
-+
-+/* this function only gets called when the probing was successful */
-+static int hexium_attach(struct saa7146_dev *dev, struct saa7146_pci_extension_data *info)
-+{
-+ struct hexium *hexium = (struct hexium *) dev->ext_priv;
-+
-+ DEB_EE((".\n"));
-+
-+ hexium = (struct hexium *) kmalloc(sizeof(struct hexium), GFP_KERNEL);
-+ if (NULL == hexium) {
-+ printk("hexium_v4l2.o: hexium_probe: not enough kernel memory.\n");
-+ return -ENOMEM;
-+ }
-+ memset(hexium, 0x0, sizeof(struct hexium));
-+ (struct hexium *) dev->ext_priv = hexium;
-+
-+ /* FIXME: enable i2c-port pins, video-port-pins
-+ video port pins should be enabled here ?! */
-+ saa7146_write(dev, MC1, (MASK_08 | MASK_24 | MASK_10 | MASK_26));
-+
-+ saa7146_i2c_adapter_prepare(dev, &hexium->i2c_adapter, SAA7146_I2C_BUS_BIT_RATE_480);
-+ if (i2c_add_adapter(&hexium->i2c_adapter) < 0) {
-+ DEB_S(("cannot register i2c-device. skipping.\n"));
-+ kfree(hexium);
-+ return -EFAULT;
-+ }
-+
-+ /* set HWControl GPIO number 2 */
-+ saa7146_setgpio(dev, 2, SAA7146_GPIO_OUTHI);
-+
-+ saa7146_write(dev, DD1_INIT, 0x07000700);
-+ saa7146_write(dev, DD1_STREAM_B, 0x00000000);
-+ saa7146_write(dev, MC2, (MASK_09 | MASK_25 | MASK_10 | MASK_26));
-+
-+ /* the rest */
-+ hexium->cur_input = 0;
-+ hexium_init_done(dev);
-+
-+ hexium_set_standard(hexium, hexium_pal);
-+ hexium->cur_std = V4L2_STD_PAL;
-+
-+ hexium_set_input(hexium, 0);
-+ hexium->cur_input = 0;
-+
-+ saa7146_vv_init(dev, &vv_data);
-+ if (0 != saa7146_register_device(&hexium->video_dev, dev, "hexium", VFL_TYPE_GRABBER)) {
-+ ERR(("cannot register capture v4l2 device. skipping.\n"));
-+ return -1;
-+ }
-+
-+ printk("hexium: found 'hexium frame grabber'-%d.\n", hexium_num);
-+ hexium_num++;
-+
-+ return 0;
-+}
-+
-+static int hexium_detach(struct saa7146_dev *dev)
-+{
-+ struct hexium *hexium = (struct hexium *) dev->ext_priv;
-+
-+ DEB_EE(("dev:%p\n", dev));
-+
-+ saa7146_unregister_device(&hexium->video_dev, dev);
-+ saa7146_vv_release(dev);
-+
-+ hexium_num--;
-+
-+ i2c_del_adapter(&hexium->i2c_adapter);
-+ kfree(hexium);
-+ return 0;
-+}
-+
-+static int hexium_ioctl(struct saa7146_fh *fh, unsigned int cmd, void *arg)
-+{
-+ struct saa7146_dev *dev = fh->dev;
-+ struct hexium *hexium = (struct hexium *) dev->ext_priv;
-+/*
-+ struct saa7146_vv *vv = dev->vv_data;
-+*/
-+ switch (cmd) {
-+ case VIDIOC_ENUMINPUT:
-+ {
-+ struct v4l2_input *i = arg;
-+ DEB_EE(("VIDIOC_ENUMINPUT %d.\n", i->index));
-+
-+ if (i->index < 0 || i->index >= HEXIUM_INPUTS) {
-+ return -EINVAL;
-+ }
-+
-+ memcpy(i, &hexium_inputs[i->index], sizeof(struct v4l2_input));
-+
-+ DEB_D(("v4l2_ioctl: VIDIOC_ENUMINPUT %d.\n", i->index));
-+ return 0;
-+ }
-+ case VIDIOC_G_INPUT:
-+ {
-+ int *input = (int *) arg;
-+ *input = hexium->cur_input;
-+
-+ DEB_D(("VIDIOC_G_INPUT: %d\n", *input));
-+ return 0;
-+ }
-+ case VIDIOC_S_INPUT:
-+ {
-+ int input = *(int *) arg;
-+
-+ DEB_EE(("VIDIOC_S_INPUT %d.\n", input));
-+
-+ if (input < 0 || input >= HEXIUM_INPUTS) {
-+ return -EINVAL;
-+ }
-+
-+ hexium->cur_input = input;
-+ hexium_set_input(hexium, input);
-+
-+ return 0;
-+ }
-+ /* the saa7146 provides some controls (brightness, contrast, saturation)
-+ which gets registered *after* this function. because of this we have
-+ to return with a value != 0 even if the function succeded.. */
-+ case VIDIOC_QUERYCTRL:
-+ {
-+ struct v4l2_queryctrl *qc = arg;
-+ int i;
-+
-+ for (i = HEXIUM_CONTROLS - 1; i >= 0; i--) {
-+ if (hexium_controls[i].id == qc->id) {
-+ *qc = hexium_controls[i];
-+ DEB_D(("VIDIOC_QUERYCTRL %d.\n", qc->id));
-+ return 0;
-+ }
-+ }
-+ return -EAGAIN;
-+ }
-+ case VIDIOC_G_CTRL:
-+ {
-+ struct v4l2_control *vc = arg;
-+ int i;
-+
-+ for (i = HEXIUM_CONTROLS - 1; i >= 0; i--) {
-+ if (hexium_controls[i].id == vc->id) {
-+ break;
-+ }
-+ }
-+
-+ if (i < 0) {
-+ return -EAGAIN;
-+ }
-+
-+ switch (vc->id) {
-+ case V4L2_CID_PRIVATE_BASE:{
-+ vc->value = hexium->cur_bw;
-+ DEB_D(("VIDIOC_G_CTRL BW:%d.\n", vc->value));
-+ return 0;
-+ }
-+ }
-+ return -EINVAL;
-+ }
-+
-+ case VIDIOC_S_CTRL:
-+ {
-+ struct v4l2_control *vc = arg;
-+ int i = 0;
-+
-+ for (i = HEXIUM_CONTROLS - 1; i >= 0; i--) {
-+ if (hexium_controls[i].id == vc->id) {
-+ break;
-+ }
-+ }
-+
-+ if (i < 0) {
-+ return -EAGAIN;
-+ }
-+
-+ switch (vc->id) {
-+ case V4L2_CID_PRIVATE_BASE:{
-+ hexium->cur_bw = vc->value;
-+ break;
-+ }
-+ }
-+
-+ DEB_D(("VIDIOC_S_CTRL BW:%d.\n", hexium->cur_bw));
-+
-+ if (0 == hexium->cur_bw && V4L2_STD_PAL == hexium->cur_std) {
-+ hexium_set_standard(hexium, hexium_pal);
-+ return 0;
-+ }
-+ if (0 == hexium->cur_bw && V4L2_STD_NTSC == hexium->cur_std) {
-+ hexium_set_standard(hexium, hexium_ntsc);
-+ return 0;
-+ }
-+ if (0 == hexium->cur_bw && V4L2_STD_SECAM == hexium->cur_std) {
-+ hexium_set_standard(hexium, hexium_secam);
-+ return 0;
-+ }
-+ if (1 == hexium->cur_bw && V4L2_STD_PAL == hexium->cur_std) {
-+ hexium_set_standard(hexium, hexium_pal_bw);
-+ return 0;
-+ }
-+ if (1 == hexium->cur_bw && V4L2_STD_NTSC == hexium->cur_std) {
-+ hexium_set_standard(hexium, hexium_ntsc_bw);
-+ return 0;
-+ }
-+ if (1 == hexium->cur_bw && V4L2_STD_SECAM == hexium->cur_std) {
-+ /* fixme: is there no bw secam mode? */
-+ return -EINVAL;
-+ }
-+
-+ return -EINVAL;
-+ }
-+ default:
-+/*
-+ DEB_D(("v4l2_ioctl does not handle this ioctl.\n"));
-+*/
-+ return -ENOIOCTLCMD;
-+ }
-+ return 0;
-+}
-+
-+static int std_callback(struct saa7146_dev *dev, struct saa7146_standard *std)
-+{
-+ struct hexium *hexium = (struct hexium *) dev->ext_priv;
-+
-+ if (V4L2_STD_PAL == std->id) {
-+ hexium_set_standard(hexium, hexium_pal);
-+ hexium->cur_std = V4L2_STD_PAL;
-+ return 0;
-+ } else if (V4L2_STD_NTSC == std->id) {
-+ hexium_set_standard(hexium, hexium_ntsc);
-+ hexium->cur_std = V4L2_STD_NTSC;
-+ return 0;
-+ } else if (V4L2_STD_SECAM == std->id) {
-+ hexium_set_standard(hexium, hexium_secam);
-+ hexium->cur_std = V4L2_STD_SECAM;
-+ return 0;
-+ }
-+
-+ return -1;
-+}
-+
-+static struct saa7146_extension hexium_extension;
-+
-+static struct saa7146_pci_extension_data hexium_gemini_4bnc = {
-+ .ext_priv = "Hexium Gemini (4 BNC)",
-+ .ext = &hexium_extension,
-+};
-+
-+static struct saa7146_pci_extension_data hexium_gemini_dual_4bnc = {
-+ .ext_priv = "Hexium Gemini Dual (4 BNC)",
-+ .ext = &hexium_extension,
-+};
-+
-+static struct pci_device_id pci_tbl[] = {
-+ {
-+ .vendor = PCI_VENDOR_ID_PHILIPS,
-+ .device = PCI_DEVICE_ID_PHILIPS_SAA7146,
-+ .subvendor = 0x17c8,
-+ .subdevice = 0x2401,
-+ .driver_data = (unsigned long) &hexium_gemini_4bnc,
-+ },
-+ {
-+ .vendor = PCI_VENDOR_ID_PHILIPS,
-+ .device = PCI_DEVICE_ID_PHILIPS_SAA7146,
-+ .subvendor = 0x17c8,
-+ .subdevice = 0x2402,
-+ .driver_data = (unsigned long) &hexium_gemini_dual_4bnc,
-+ },
-+ {
-+ .vendor = 0,
-+ }
-+};
-+
-+MODULE_DEVICE_TABLE(pci, pci_tbl);
-+
-+static struct saa7146_ext_vv vv_data = {
-+ .inputs = HEXIUM_INPUTS,
-+ .capabilities = 0,
-+ .stds = &hexium_standards[0],
-+ .num_stds = sizeof(hexium_standards) / sizeof(struct saa7146_standard),
-+ .std_callback = &std_callback,
-+ .ioctls = &ioctls[0],
-+ .ioctl = hexium_ioctl,
-+};
-+
-+static struct saa7146_extension hexium_extension = {
-+ .name = "hexium gemini",
-+ .flags = SAA7146_USE_I2C_IRQ,
-+
-+ .pci_tbl = &pci_tbl[0],
-+ .module = THIS_MODULE,
-+
-+ .attach = hexium_attach,
-+ .detach = hexium_detach,
-+
-+ .irq_mask = 0,
-+ .irq_func = NULL,
-+};
-+
-+int __init hexium_init_module(void)
-+{
-+ if (0 != saa7146_register_extension(&hexium_extension)) {
-+ DEB_S(("failed to register extension.\n"));
-+ return -ENODEV;
-+ }
-+
-+ return 0;
-+}
-+
-+void __exit hexium_cleanup_module(void)
-+{
-+ saa7146_unregister_extension(&hexium_extension);
-+}
-+
-+module_init(hexium_init_module);
-+module_exit(hexium_cleanup_module);
-+
-+MODULE_DESCRIPTION("video4linux-2 driver for Hexium Gemini frame grabber cards");
-+MODULE_AUTHOR("Michael Hunold <michael@mihu.de>");
-+MODULE_LICENSE("GPL");
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/media/video/hexium_gemini.h 2003-07-19 17:03:50.000000000 -0700
-@@ -0,0 +1,103 @@
-+#ifndef __HEXIUM_GEMINI__
-+#define __HEXIUM_GEMINI__
-+
-+#include "hexium.h"
-+
-+static struct saa7146_extension_ioctls ioctls[] = {
-+ { VIDIOC_G_INPUT, SAA7146_EXCLUSIVE },
-+ { VIDIOC_S_INPUT, SAA7146_EXCLUSIVE },
-+ { VIDIOC_QUERYCTRL, SAA7146_BEFORE },
-+ { VIDIOC_ENUMINPUT, SAA7146_EXCLUSIVE },
-+ { VIDIOC_S_STD, SAA7146_AFTER },
-+ { VIDIOC_G_CTRL, SAA7146_BEFORE },
-+ { VIDIOC_S_CTRL, SAA7146_BEFORE },
-+ { 0, 0 }
-+};
-+
-+#define HEXIUM_CONTROLS 1
-+static struct v4l2_queryctrl hexium_controls[] = {
-+ { V4L2_CID_PRIVATE_BASE, V4L2_CTRL_TYPE_BOOLEAN, "B/W", 0, 1, 1, 0, 0 },
-+};
-+
-+#define HEXIUM_GEMUINI_V_1_0 1
-+#define HEXIUM_GEMUINI_DUAL_V_1_0 2
-+
-+struct hexium
-+{
-+ int type;
-+ struct video_device video_dev;
-+ struct i2c_adapter i2c_adapter;
-+
-+ int cur_input; /* current input */
-+ v4l2_std_id cur_std; /* current standard */
-+ int cur_bw; /* current black/white status */
-+};
-+
-+/* Samsung KS0127B decoder default registers */
-+static u8 hexium_ks0127b[0x100]={
-+/*00*/ 0x00,0x52,0x30,0x40,0x01,0x0C,0x2A,0x10,
-+/*08*/ 0x00,0x00,0x00,0x60,0x00,0x00,0x0F,0x06,
-+/*10*/ 0x00,0x00,0xE4,0xC0,0x00,0x00,0x00,0x00,
-+/*18*/ 0x14,0x9B,0xFE,0xFF,0xFC,0xFF,0x03,0x22,
-+/*20*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-+/*28*/ 0x00,0x00,0x00,0x00,0x00,0x2C,0x9B,0x00,
-+/*30*/ 0x00,0x00,0x10,0x80,0x80,0x10,0x80,0x80,
-+/*38*/ 0x01,0x04,0x00,0x00,0x00,0x29,0xC0,0x00,
-+/*40*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-+/*48*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-+/*50*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-+/*58*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-+/*60*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-+/*68*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-+/*70*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-+/*78*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-+/*80*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-+/*88*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-+/*90*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-+/*98*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-+/*A0*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-+/*A8*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-+/*B0*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-+/*B8*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-+/*C0*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-+/*C8*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-+/*D0*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-+/*D8*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-+/*E0*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-+/*E8*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-+/*F0*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-+/*F8*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
-+};
-+
-+static struct hexium_data hexium_pal[] = {
-+ { 0x01, 0x52 }, { 0x12, 0x64 }, { 0x2D, 0x2C }, { 0x2E, 0x9B }, { -1 , 0xFF }
-+};
-+
-+static struct hexium_data hexium_pal_bw[] = {
-+ { 0x01, 0x52 }, { 0x12, 0x64 }, { 0x2D, 0x2C }, { 0x2E, 0x9B }, { -1 , 0xFF }
-+};
-+
-+static struct hexium_data hexium_ntsc[] = {
-+ { 0x01, 0x53 }, { 0x12, 0x04 }, { 0x2D, 0x23 }, { 0x2E, 0x81 }, { -1 , 0xFF }
-+};
-+
-+static struct hexium_data hexium_ntsc_bw[] = {
-+ { 0x01, 0x53 }, { 0x12, 0x04 }, { 0x2D, 0x23 }, { 0x2E, 0x81 }, { -1 , 0xFF }
-+};
-+
-+static struct hexium_data hexium_secam[] = {
-+ { 0x01, 0x52 }, { 0x12, 0x64 }, { 0x2D, 0x2C }, { 0x2E, 0x9B }, { -1 , 0xFF }
-+};
-+
-+static struct hexium_data hexium_input_select[] = {
-+ { 0x02, 0x60 },
-+ { 0x02, 0x64 },
-+ { 0x02, 0x61 },
-+ { 0x02, 0x65 },
-+ { 0x02, 0x62 },
-+ { 0x02, 0x66 },
-+ { 0x02, 0x68 },
-+ { 0x02, 0x69 },
-+ { 0x02, 0x6A },
-+};
-+#endif
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/media/video/hexium.h 2003-07-19 17:03:50.000000000 -0700
-@@ -0,0 +1,51 @@
-+#ifndef __HEXIUM__
-+#define __HEXIUM__
-+
-+#define HEXIUM_HV_PCI6_ORION 1
-+#define HEXIUM_ORION_1SVHS_3BNC 2
-+#define HEXIUM_ORION_4BNC 3
-+#define HEXIUM_GEMUINI 4
-+#define HEXIUM_GEMUINI_DUAL 5
-+
-+static struct saa7146_standard hexium_standards[] = {
-+ {
-+ .name = "PAL", .id = V4L2_STD_PAL,
-+ .v_offset = 0x17, .v_field = 288, .v_calc = 576,
-+ .h_offset = 0x14, .h_pixels = 680, .h_calc = 680+1,
-+ .v_max_out = 576, .h_max_out = 768,
-+ }, {
-+ .name = "NTSC", .id = V4L2_STD_NTSC,
-+ .v_offset = 0x17, .v_field = 240, .v_calc = 480,
-+ .h_offset = 0x06, .h_pixels = 640, .h_calc = 641+1,
-+ .v_max_out = 480, .h_max_out = 640,
-+ }, {
-+ .name = "SECAM", .id = V4L2_STD_SECAM,
-+ .v_offset = 0x14, .v_field = 288, .v_calc = 576,
-+ .h_offset = 0x14, .h_pixels = 720, .h_calc = 720+1,
-+ .v_max_out = 576, .h_max_out = 768,
-+ }
-+};
-+
-+
-+#define HEXIUM_INPUTS 9
-+static struct v4l2_input hexium_inputs[HEXIUM_INPUTS] = {
-+ { 0, "CVBS 1", V4L2_INPUT_TYPE_CAMERA, 2, 0, V4L2_STD_PAL_BG|V4L2_STD_NTSC_M, 0 },
-+ { 1, "CVBS 2", V4L2_INPUT_TYPE_CAMERA, 2, 0, V4L2_STD_PAL_BG|V4L2_STD_NTSC_M, 0 },
-+ { 2, "CVBS 3", V4L2_INPUT_TYPE_CAMERA, 2, 0, V4L2_STD_PAL_BG|V4L2_STD_NTSC_M, 0 },
-+ { 3, "CVBS 4", V4L2_INPUT_TYPE_CAMERA, 2, 0, V4L2_STD_PAL_BG|V4L2_STD_NTSC_M, 0 },
-+ { 4, "CVBS 5", V4L2_INPUT_TYPE_CAMERA, 2, 0, V4L2_STD_PAL_BG|V4L2_STD_NTSC_M, 0 },
-+ { 5, "CVBS 6", V4L2_INPUT_TYPE_CAMERA, 2, 0, V4L2_STD_PAL_BG|V4L2_STD_NTSC_M, 0 },
-+ { 6, "Y/C 1", V4L2_INPUT_TYPE_CAMERA, 2, 0, V4L2_STD_PAL_BG|V4L2_STD_NTSC_M, 0 },
-+ { 7, "Y/C 2", V4L2_INPUT_TYPE_CAMERA, 2, 0, V4L2_STD_PAL_BG|V4L2_STD_NTSC_M, 0 },
-+ { 8, "Y/C 3", V4L2_INPUT_TYPE_CAMERA, 2, 0, V4L2_STD_PAL_BG|V4L2_STD_NTSC_M, 0 },
-+};
-+
-+#define HEXIUM_AUDIOS 0
-+
-+struct hexium_data
-+{
-+ s8 adr;
-+ u8 byte;
-+};
-+
-+#endif
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/media/video/hexium_orion.c 2003-07-19 17:03:50.000000000 -0700
-@@ -0,0 +1,328 @@
-+/*
-+ hexium_orion.c - v4l2 driver for the Hexium Orion frame grabber cards
-+
-+ Visit http://www.mihu.de/linux/saa7146/ and follow the link
-+ to "hexium" for further details about this card.
-+
-+ Copyright (C) 2003 Michael Hunold <michael@mihu.de>
-+
-+ This program is free software; you can redistribute it and/or modify
-+ it under the terms of the GNU General Public License as published by
-+ the Free Software Foundation; either version 2 of the License, or
-+ (at your option) any later version.
-+
-+ This program is distributed in the hope that it will be useful,
-+ but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ GNU General Public License for more details.
-+
-+ You should have received a copy of the GNU General Public License
-+ along with this program; if not, write to the Free Software
-+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+*/
-+
-+#define DEBUG_VARIABLE debug
-+
-+#include <media/saa7146_vv.h>
-+
-+static int debug = 255;
-+MODULE_PARM(debug, "i");
-+MODULE_PARM_DESC(debug, "debug verbosity");
-+
-+/* global variables */
-+int hexium_num = 0;
-+
-+#include "hexium_orion.h"
-+
-+/* this is only called for old HV-PCI6/Orion cards
-+ without eeprom */
-+static int hexium_probe(struct saa7146_dev *dev)
-+{
-+ struct hexium *hexium = 0;
-+ union i2c_smbus_data data;
-+ int err = 0;
-+
-+ DEB_EE((".\n"));
-+
-+ /* there are no hexium orion cards with revision 0 saa7146s */
-+ if (0 == dev->revision) {
-+ return -EFAULT;
-+ }
-+
-+ hexium = (struct hexium *) kmalloc(sizeof(struct hexium), GFP_KERNEL);
-+ if (NULL == hexium) {
-+ printk("hexium_orion.o: hexium_probe: not enough kernel memory.\n");
-+ return -ENOMEM;
-+ }
-+ memset(hexium, 0x0, sizeof(struct hexium));
-+
-+ /* FIXME: enable i2c-port pins, video-port-pins
-+ video port pins should be enabled here ?! */
-+ saa7146_write(dev, MC1, (MASK_08 | MASK_24 | MASK_10 | MASK_26));
-+
-+ saa7146_write(dev, DD1_INIT, 0x02000200);
-+ saa7146_write(dev, DD1_STREAM_B, 0x00000000);
-+ saa7146_write(dev, MC2, (MASK_09 | MASK_25 | MASK_10 | MASK_26));
-+
-+ saa7146_i2c_adapter_prepare(dev, &hexium->i2c_adapter, SAA7146_I2C_BUS_BIT_RATE_480);
-+ if (i2c_add_adapter(&hexium->i2c_adapter) < 0) {
-+ DEB_S(("cannot register i2c-device. skipping.\n"));
-+ kfree(hexium);
-+ return -EFAULT;
-+ }
-+
-+ /* set SAA7110 control GPIO 0 */
-+ saa7146_setgpio(dev, 0, SAA7146_GPIO_OUTHI);
-+ /* set HWControl GPIO number 2 */
-+ saa7146_setgpio(dev, 2, SAA7146_GPIO_OUTHI);
-+
-+ mdelay(10);
-+
-+ /* detect newer Hexium Orion cards by subsystem ids */
-+ if (0x17c8 == dev->pci->subsystem_vendor && 0x0101 == dev->pci->subsystem_device) {
-+ printk("hexium_orion.o: device is a Hexium Orion w/ 1 SVHS + 3 BNC inputs.\n");
-+ /* we store the pointer in our private data field */
-+ (struct hexium *) dev->ext_priv = hexium;
-+ hexium->type = HEXIUM_ORION_1SVHS_3BNC;
-+ return 0;
-+ }
-+
-+ if (0x17c8 == dev->pci->subsystem_vendor && 0x2101 == dev->pci->subsystem_device) {
-+ printk("hexium_orion.o: device is a Hexium Orion w/ 4 BNC inputs.\n");
-+ /* we store the pointer in our private data field */
-+ (struct hexium *) dev->ext_priv = hexium;
-+ hexium->type = HEXIUM_ORION_4BNC;
-+ return 0;
-+ }
-+
-+ /* check if this is an old hexium Orion card by looking at
-+ a saa7110 at address 0x4e */
-+ if (0 == (err = i2c_smbus_xfer(&hexium->i2c_adapter, 0x4e, 0, I2C_SMBUS_READ, 0x00, I2C_SMBUS_BYTE_DATA, &data))) {
-+ printk("hexium_orion.o: device is a Hexium HV-PCI6/Orion (old).\n");
-+ /* we store the pointer in our private data field */
-+ (struct hexium *) dev->ext_priv = hexium;
-+ hexium->type = HEXIUM_HV_PCI6_ORION;
-+ return 0;
-+ }
-+
-+ i2c_del_adapter(&hexium->i2c_adapter);
-+ kfree(hexium);
-+ return -EFAULT;
-+}
-+
-+/* bring hardware to a sane state. this has to be done, just in case someone
-+ wants to capture from this device before it has been properly initialized.
-+ the capture engine would badly fail, because no valid signal arrives on the
-+ saa7146, thus leading to timeouts and stuff. */
-+static int hexium_init_done(struct saa7146_dev *dev)
-+{
-+ struct hexium *hexium = (struct hexium *) dev->ext_priv;
-+ union i2c_smbus_data data;
-+ int i = 0;
-+
-+ DEB_D(("hexium_init_done called.\n"));
-+
-+ /* initialize the helper ics to useful values */
-+ for (i = 0; i < sizeof(hexium_saa7110); i++) {
-+ data.byte = hexium_saa7110[i];
-+ if (0 != i2c_smbus_xfer(&hexium->i2c_adapter, 0x4e, 0, I2C_SMBUS_WRITE, i, I2C_SMBUS_BYTE_DATA, &data)) {
-+ printk("hexium_orion: failed for address 0x%02x\n", i);
-+ }
-+ }
-+
-+ return 0;
-+}
-+
-+static struct saa7146_ext_vv vv_data;
-+
-+/* this function only gets called when the probing was successful */
-+static int hexium_attach(struct saa7146_dev *dev, struct saa7146_pci_extension_data *info)
-+{
-+ struct hexium *hexium = (struct hexium *) dev->ext_priv;
-+
-+ DEB_EE((".\n"));
-+
-+ saa7146_vv_init(dev, &vv_data);
-+ if (0 != saa7146_register_device(&hexium->video_dev, dev, "hexium", VFL_TYPE_GRABBER)) {
-+ ERR(("cannot register capture v4l2 device. skipping.\n"));
-+ return -1;
-+ }
-+
-+ printk("hexium_orion.o: found 'hexium orion' frame grabber-%d.\n", hexium_num);
-+ hexium_num++;
-+
-+ /* the rest */
-+ hexium->cur_input = 0;
-+ hexium_init_done(dev);
-+
-+ return 0;
-+}
-+
-+static int hexium_detach(struct saa7146_dev *dev)
-+{
-+ struct hexium *hexium = (struct hexium *) dev->ext_priv;
-+
-+ DEB_EE(("dev:%p\n", dev));
-+
-+ saa7146_unregister_device(&hexium->video_dev, dev);
-+ saa7146_vv_release(dev);
-+
-+ hexium_num--;
-+
-+ i2c_del_adapter(&hexium->i2c_adapter);
-+ kfree(hexium);
-+ return 0;
-+}
-+
-+static int hexium_ioctl(struct saa7146_fh *fh, unsigned int cmd, void *arg)
-+{
-+ struct saa7146_dev *dev = fh->dev;
-+ struct hexium *hexium = (struct hexium *) dev->ext_priv;
-+/*
-+ struct saa7146_vv *vv = dev->vv_data;
-+*/
-+ switch (cmd) {
-+ case VIDIOC_ENUMINPUT:
-+ {
-+ struct v4l2_input *i = arg;
-+ DEB_EE(("VIDIOC_ENUMINPUT %d.\n", i->index));
-+
-+ if (i->index < 0 || i->index >= HEXIUM_INPUTS) {
-+ return -EINVAL;
-+ }
-+
-+ memcpy(i, &hexium_inputs[i->index], sizeof(struct v4l2_input));
-+
-+ DEB_D(("v4l2_ioctl: VIDIOC_ENUMINPUT %d.\n", i->index));
-+ return 0;
-+ }
-+ case VIDIOC_G_INPUT:
-+ {
-+ int *input = (int *) arg;
-+ *input = hexium->cur_input;
-+
-+ DEB_D(("VIDIOC_G_INPUT: %d\n", *input));
-+ return 0;
-+ }
-+ case VIDIOC_S_INPUT:
-+ {
-+ int input = *(int *) arg;
-+
-+ if (input < 0 || input >= HEXIUM_INPUTS) {
-+ return -EINVAL;
-+ }
-+
-+ hexium->cur_input = input;
-+
-+ /* fixme: switch input here, switch audio, too! */
-+// saa7146_set_hps_source_and_sync(dev, input_port_selection[input].hps_source, input_port_selection[input].hps_sync);
-+ printk("hexium_orion.o: VIDIOC_S_INPUT: fixme switch input.\n");
-+
-+ return 0;
-+ }
-+ default:
-+/*
-+ DEB_D(("v4l2_ioctl does not handle this ioctl.\n"));
-+*/
-+ return -ENOIOCTLCMD;
-+ }
-+ return 0;
-+}
-+
-+static int std_callback(struct saa7146_dev *dev, struct saa7146_standard *std)
-+{
-+ return 0;
-+}
-+
-+static struct saa7146_extension extension;
-+
-+static struct saa7146_pci_extension_data hexium_hv_pci6 = {
-+ .ext_priv = "Hexium HV-PCI6 / Orion",
-+ .ext = &extension,
-+};
-+
-+static struct saa7146_pci_extension_data hexium_orion_1svhs_3bnc = {
-+ .ext_priv = "Hexium HV-PCI6 / Orion (1 SVHS/3 BNC)",
-+ .ext = &extension,
-+};
-+
-+static struct saa7146_pci_extension_data hexium_orion_4bnc = {
-+ .ext_priv = "Hexium HV-PCI6 / Orion (4 BNC)",
-+ .ext = &extension,
-+};
-+
-+static struct pci_device_id pci_tbl[] = {
-+ {
-+ .vendor = PCI_VENDOR_ID_PHILIPS,
-+ .device = PCI_DEVICE_ID_PHILIPS_SAA7146,
-+ .subvendor = 0x0000,
-+ .subdevice = 0x0000,
-+ .driver_data = (unsigned long) &hexium_hv_pci6,
-+ },
-+ {
-+ .vendor = PCI_VENDOR_ID_PHILIPS,
-+ .device = PCI_DEVICE_ID_PHILIPS_SAA7146,
-+ .subvendor = 0x17c8,
-+ .subdevice = 0x0101,
-+ .driver_data = (unsigned long) &hexium_orion_1svhs_3bnc,
-+ },
-+ {
-+ .vendor = PCI_VENDOR_ID_PHILIPS,
-+ .device = PCI_DEVICE_ID_PHILIPS_SAA7146,
-+ .subvendor = 0x17c8,
-+ .subdevice = 0x2101,
-+ .driver_data = (unsigned long) &hexium_orion_4bnc,
-+ },
-+ {
-+ .vendor = 0,
-+ }
-+};
-+
-+MODULE_DEVICE_TABLE(pci, pci_tbl);
-+
-+static struct saa7146_ext_vv vv_data = {
-+ .inputs = HEXIUM_INPUTS,
-+ .capabilities = 0,
-+ .stds = &hexium_standards[0],
-+ .num_stds = sizeof(hexium_standards) / sizeof(struct saa7146_standard),
-+ .std_callback = &std_callback,
-+ .ioctls = &ioctls[0],
-+ .ioctl = hexium_ioctl,
-+};
-+
-+static struct saa7146_extension extension = {
-+ .name = "hexium HV-PCI6/Orion",
-+ .flags = 0, // SAA7146_USE_I2C_IRQ,
-+
-+ .pci_tbl = &pci_tbl[0],
-+ .module = THIS_MODULE,
-+
-+ .probe = hexium_probe,
-+ .attach = hexium_attach,
-+ .detach = hexium_detach,
-+
-+ .irq_mask = 0,
-+ .irq_func = NULL,
-+};
-+
-+int __init hexium_init_module(void)
-+{
-+ if (0 != saa7146_register_extension(&extension)) {
-+ DEB_S(("failed to register extension.\n"));
-+ return -ENODEV;
-+ }
-+
-+ return 0;
-+}
-+
-+void __exit hexium_cleanup_module(void)
-+{
-+ saa7146_unregister_extension(&extension);
-+}
-+
-+module_init(hexium_init_module);
-+module_exit(hexium_cleanup_module);
-+
-+MODULE_DESCRIPTION("video4linux-2 driver for Hexium Orion frame grabber cards");
-+MODULE_AUTHOR("Michael Hunold <michael@mihu.de>");
-+MODULE_LICENSE("GPL");
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/media/video/hexium_orion.h 2003-07-19 17:03:50.000000000 -0700
-@@ -0,0 +1,138 @@
-+#ifndef __HEXIUM_ORION__
-+#define __HEXIUM_ORION__
-+
-+#include "hexium.h"
-+
-+static struct saa7146_extension_ioctls ioctls[] = {
-+ { VIDIOC_G_INPUT, SAA7146_EXCLUSIVE },
-+ { VIDIOC_S_INPUT, SAA7146_EXCLUSIVE },
-+ { VIDIOC_ENUMINPUT, SAA7146_EXCLUSIVE },
-+ { VIDIOC_S_STD, SAA7146_AFTER },
-+ { 0, 0 }
-+};
-+
-+struct hexium
-+{
-+ int type;
-+ struct video_device video_dev;
-+ struct i2c_adapter i2c_adapter;
-+ int cur_input; /* current input */
-+};
-+
-+/* Philips SAA7110 decoder default registers */
-+static u8 hexium_saa7110[53]={
-+/*00*/ 0x4C,0x3C,0x0D,0xEF,0xBD,0xF0,0x00,0x00,
-+/*08*/ 0xF8,0xF8,0x60,0x60,0x40,0x86,0x18,0x90,
-+/*10*/ 0x00,0x2C,0x40,0x46,0x42,0x1A,0xFF,0xDA,
-+/*18*/ 0xF0,0x8B,0x00,0x00,0x00,0x00,0x00,0x00,
-+/*20*/ 0xD9,0x17,0x40,0x41,0x80,0x41,0x80,0x4F,
-+/*28*/ 0xFE,0x01,0x0F,0x0F,0x03,0x01,0x81,0x03,
-+/*30*/ 0x44,0x75,0x01,0x8C,0x03
-+};
-+
-+static struct {
-+ struct hexium_data data[8];
-+} hexium_input_select[] = {
-+{
-+ { /* input 0 */
-+ { 0x06, 0x00 },
-+ { 0x20, 0xD9 },
-+ { 0x21, 0x17 }, // 0x16,
-+ { 0x22, 0x40 },
-+ { 0x2C, 0x03 },
-+ { 0x30, 0x44 },
-+ { 0x31, 0x75 }, // ??
-+ { 0x21, 0x16 }, // 0x03,
-+ }
-+}, {
-+ { /* input 1 */
-+ { 0x06, 0x00 },
-+ { 0x20, 0xD8 },
-+ { 0x21, 0x17 }, // 0x16,
-+ { 0x22, 0x40 },
-+ { 0x2C, 0x03 },
-+ { 0x30, 0x44 },
-+ { 0x31, 0x75 }, // ??
-+ { 0x21, 0x16 }, // 0x03,
-+ }
-+}, {
-+ { /* input 2 */
-+ { 0x06, 0x00 },
-+ { 0x20, 0xBA },
-+ { 0x21, 0x07 }, // 0x05,
-+ { 0x22, 0x91 },
-+ { 0x2C, 0x03 },
-+ { 0x30, 0x60 },
-+ { 0x31, 0xB5 }, // ??
-+ { 0x21, 0x05 }, // 0x03,
-+ }
-+}, {
-+ { /* input 3 */
-+ { 0x06, 0x00 },
-+ { 0x20, 0xB8 },
-+ { 0x21, 0x07 }, // 0x05,
-+ { 0x22, 0x91 },
-+ { 0x2C, 0x03 },
-+ { 0x30, 0x60 },
-+ { 0x31, 0xB5 }, // ??
-+ { 0x21, 0x05 }, // 0x03,
-+ }
-+}, {
-+ { /* input 4 */
-+ { 0x06, 0x00 },
-+ { 0x20, 0x7C },
-+ { 0x21, 0x07 }, // 0x03
-+ { 0x22, 0xD2 },
-+ { 0x2C, 0x83 },
-+ { 0x30, 0x60 },
-+ { 0x31, 0xB5 }, // ??
-+ { 0x21, 0x03 },
-+ }
-+}, {
-+ { /* input 5 */
-+ { 0x06, 0x00 },
-+ { 0x20, 0x78 },
-+ { 0x21, 0x07 }, // 0x03,
-+ { 0x22, 0xD2 },
-+ { 0x2C, 0x83 },
-+ { 0x30, 0x60 },
-+ { 0x31, 0xB5 }, // ?
-+ { 0x21, 0x03 },
-+ }
-+}, {
-+ { /* input 6 */
-+ { 0x06, 0x80 },
-+ { 0x20, 0x59 },
-+ { 0x21, 0x17 },
-+ { 0x22, 0x42 },
-+ { 0x2C, 0xA3 },
-+ { 0x30, 0x44 },
-+ { 0x31, 0x75 },
-+ { 0x21, 0x12 },
-+ }
-+}, {
-+ { /* input 7 */
-+ { 0x06, 0x80 },
-+ { 0x20, 0x9A },
-+ { 0x21, 0x17 },
-+ { 0x22, 0xB1 },
-+ { 0x2C, 0x13 },
-+ { 0x30, 0x60 },
-+ { 0x31, 0xB5 },
-+ { 0x21, 0x14 },
-+ }
-+}, {
-+ { /* input 8 */
-+ { 0x06, 0x80 },
-+ { 0x20, 0x3C },
-+ { 0x21, 0x27 },
-+ { 0x22, 0xC1 },
-+ { 0x2C, 0x23 },
-+ { 0x30, 0x44 },
-+ { 0x31, 0x75 },
-+ { 0x21, 0x21 },
-+ }
-+}
-+};
-+
-+#endif
---- linux-2.6.0-test1/drivers/media/video/Kconfig 2003-06-14 12:18:34.000000000 -0700
-+++ 25/drivers/media/video/Kconfig 2003-07-19 17:03:50.000000000 -0700
-@@ -257,5 +257,30 @@ config VIDEO_DPC
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>.
-
-+config VIDEO_HEXIUM_ORION
-+ tristate "Hexium HV-PCI6 and Orion frame grabber"
-+ depends on VIDEO_DEV && PCI
-+ ---help---
-+ This is a video4linux driver for the Hexium HV-PCI6 and
-+ Orion frame grabber cards by Hexium.
-+
-+ This driver is available as a module called hexium_orion
-+ ( = code which can be inserted in and removed from the
-+ running kernel whenever you want). If you want to compile
-+ it as a module, say M here and read <file:Documentation/modules.txt>.
-+
-+config VIDEO_HEXIUM_GEMINI
-+ tristate "Hexium Gemini frame grabber"
-+ depends on VIDEO_DEV && PCI
-+ ---help---
-+ This is a video4linux driver for the Hexium Gemini frame
-+ grabber card by Hexium. Please note that the Gemini Dual
-+ card is *not* fully supported.
-+
-+ This driver is available as a module called hexium_gemini
-+ ( = code which can be inserted in and removed from the
-+ running kernel whenever you want). If you want to compile
-+ it as a module, say M here and read <file:Documentation/modules.txt>.
-+
- endmenu
-
---- linux-2.6.0-test1/drivers/media/video/Makefile 2003-06-14 12:18:07.000000000 -0700
-+++ 25/drivers/media/video/Makefile 2003-07-19 17:03:50.000000000 -0700
-@@ -31,6 +31,8 @@ obj-$(CONFIG_VIDEO_CPIA_USB) += cpia_usb
- obj-$(CONFIG_VIDEO_MEYE) += meye.o
- obj-$(CONFIG_VIDEO_SAA7134) += saa7134/
- obj-$(CONFIG_VIDEO_MXB) += saa7111.o tuner.o tda9840.o tea6415c.o tea6420.o mxb.o
-+obj-$(CONFIG_VIDEO_HEXIUM_ORION) += hexium_orion.o
-+obj-$(CONFIG_VIDEO_HEXIUM_GEMINI) += hexium_gemini.o
- obj-$(CONFIG_VIDEO_DPC) += saa7111.o dpc7146.o
- obj-$(CONFIG_TUNER_3036) += tuner-3036.o
-
---- linux-2.6.0-test1/drivers/media/video/mxb.c 2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/video/mxb.c 2003-07-19 17:03:50.000000000 -0700
-@@ -81,7 +81,7 @@ MODULE_PARM_DESC(debug, "debug verbosity
- enum { TUNER, AUX1, AUX3, AUX3_YC };
-
- static struct v4l2_input mxb_inputs[MXB_INPUTS] = {
-- { TUNER, "Tuner", V4L2_INPUT_TYPE_TUNER, 1, 1, V4L2_STD_PAL_BG|V4L2_STD_NTSC_M, 0 },
-+ { TUNER, "Tuner", V4L2_INPUT_TYPE_TUNER, 1, 0, V4L2_STD_PAL_BG|V4L2_STD_NTSC_M, 0 },
- { AUX1, "AUX1", V4L2_INPUT_TYPE_CAMERA, 2, 0, V4L2_STD_PAL_BG|V4L2_STD_NTSC_M, 0 },
- { AUX3, "AUX3 Composite", V4L2_INPUT_TYPE_CAMERA, 4, 0, V4L2_STD_PAL_BG|V4L2_STD_NTSC_M, 0 },
- { AUX3_YC, "AUX3 S-Video", V4L2_INPUT_TYPE_CAMERA, 4, 0, V4L2_STD_PAL_BG|V4L2_STD_NTSC_M, 0 },
-@@ -101,8 +101,8 @@ static struct {
-
- /* this array holds the information of the audio source (mxb_audios),
- which has to be switched corresponding to the video source (mxb_channels) */
--static int video_audio_connect[MXB_AUDIOS] =
-- { 0, 1, 2, 3, 3 };
-+static int video_audio_connect[MXB_INPUTS] =
-+ { 0, 1, 3, 3 };
-
- /* these are the necessary input-output-pins for bringing one audio source
- (see above) to the CD-output */
-@@ -173,8 +173,7 @@ struct mxb
- int cur_mute; /* current mute status */
- };
-
--static
--struct saa7146_extension extension;
-+static struct saa7146_extension extension;
-
- static int mxb_vbi_bypass(struct saa7146_dev* dev)
- {
-@@ -431,10 +430,11 @@ static int mxb_init_done(struct saa7146_
- polling method ... */
- extension.flags &= ~SAA7146_USE_I2C_IRQ;
- for(i = 1;;i++) {
-- msg.len = mxb_saa7740_init[i].length;
-- if (msg.len == -1U) {
-+ if( -1 == mxb_saa7740_init[i].length ) {
- break;
- }
-+
-+ msg.len = mxb_saa7740_init[i].length;
- msg.buf = &mxb_saa7740_init[i].data[0];
- if( 1 != (err = i2c_transfer(&mxb->i2c_adapter, &msg, 1))) {
- DEB_D(("failed to initialize 'sound arena module'.\n"));
-@@ -472,6 +472,8 @@ void mxb_irq_bh(struct saa7146_dev* dev,
- }
- */
-
-+static struct saa7146_ext_vv vv_data;
-+
- /* this function only gets called when the probing was successful */
- static int mxb_attach(struct saa7146_dev* dev, struct saa7146_pci_extension_data *info)
- {
-@@ -482,7 +484,7 @@ static int mxb_attach(struct saa7146_dev
- /* checking for i2c-devices can be omitted here, because we
- already did this in "mxb_vl42_probe" */
-
-- saa7146_vv_init(dev);
-+ saa7146_vv_init(dev,&vv_data);
- if( 0 != saa7146_register_device(&mxb->video_dev, dev, "mxb", VFL_TYPE_GRABBER)) {
- ERR(("cannot register capture v4l2 device. skipping.\n"));
- return -1;
-@@ -566,8 +568,9 @@ static int saa7111_set_gpio(struct saa71
- return 0;
- }
-
--static int mxb_ioctl(struct saa7146_dev *dev, unsigned int cmd, void *arg)
-+static int mxb_ioctl(struct saa7146_fh *fh, unsigned int cmd, void *arg)
- {
-+ struct saa7146_dev *dev = fh->dev;
- struct mxb* mxb = (struct mxb*)dev->ext_priv;
- struct saa7146_vv *vv = dev->vv_data;
-
-@@ -1002,20 +1005,35 @@ static int std_callback(struct saa7146_d
- }
-
- static struct saa7146_standard standard[] = {
-- { "PAL-BG", V4L2_STD_PAL_BG, SAA7146_PAL_VALUES },
-- { "PAL-I", V4L2_STD_PAL_I, SAA7146_PAL_VALUES },
-- { "NTSC", V4L2_STD_NTSC, SAA7146_NTSC_VALUES },
-- { "SECAM", V4L2_STD_SECAM, SAA7146_SECAM_VALUES },
-+ {
-+ .name = "PAL-BG", .id = V4L2_STD_PAL_BG,
-+ .v_offset = 0x17, .v_field = 288, .v_calc = 576,
-+ .h_offset = 0x14, .h_pixels = 680, .h_calc = 680+1,
-+ .v_max_out = 576, .h_max_out = 768,
-+ }, {
-+ .name = "PAL-I", .id = V4L2_STD_PAL_I,
-+ .v_offset = 0x17, .v_field = 288, .v_calc = 576,
-+ .h_offset = 0x14, .h_pixels = 680, .h_calc = 680+1,
-+ .v_max_out = 576, .h_max_out = 768,
-+ }, {
-+ .name = "NTSC", .id = V4L2_STD_NTSC,
-+ .v_offset = 0x16, .v_field = 240, .v_calc = 480,
-+ .h_offset = 0x06, .h_pixels = 708, .h_calc = 708+1,
-+ .v_max_out = 480, .h_max_out = 640,
-+ }, {
-+ .name = "SECAM", .id = V4L2_STD_SECAM,
-+ .v_offset = 0x14, .v_field = 288, .v_calc = 576,
-+ .h_offset = 0x14, .h_pixels = 720, .h_calc = 720+1,
-+ .v_max_out = 576, .h_max_out = 768,
-+ }
- };
-
--static
--struct saa7146_pci_extension_data mxb = {
-+static struct saa7146_pci_extension_data mxb = {
- .ext_priv = "Multimedia eXtension Board",
- .ext = &extension,
- };
-
--static
--struct pci_device_id pci_tbl[] = {
-+static struct pci_device_id pci_tbl[] = {
- {
- .vendor = PCI_VENDOR_ID_PHILIPS,
- .device = PCI_DEVICE_ID_PHILIPS_SAA7146,
-@@ -1029,8 +1047,7 @@ struct pci_device_id pci_tbl[] = {
-
- MODULE_DEVICE_TABLE(pci, pci_tbl);
-
--static
--struct saa7146_ext_vv vv_data = {
-+static struct saa7146_ext_vv vv_data = {
- .inputs = MXB_INPUTS,
- .capabilities = V4L2_CAP_TUNER | V4L2_CAP_VBI_CAPTURE,
- .stds = &standard[0],
-@@ -1040,14 +1057,12 @@ struct saa7146_ext_vv vv_data = {
- .ioctl = mxb_ioctl,
- };
-
--static
--struct saa7146_extension extension = {
-+static struct saa7146_extension extension = {
- .name = MXB_IDENTIFIER,
- .flags = SAA7146_USE_I2C_IRQ,
-
- .pci_tbl = &pci_tbl[0],
- .module = THIS_MODULE,
-- .ext_vv_data = &vv_data,
-
- .probe = mxb_probe,
- .attach = mxb_attach,
---- linux-2.6.0-test1/drivers/media/video/pms.c 2003-06-14 12:18:30.000000000 -0700
-+++ 25/drivers/media/video/pms.c 2003-07-19 17:03:50.000000000 -0700
-@@ -12,6 +12,10 @@
- * Most of this code is directly derived from his userspace driver.
- * His driver works so send any reports to alan@redhat.com unless the
- * userspace driver also doesn't work for you...
-+ *
-+ * Changes:
-+ * 08/07/2003 Daniele Bellucci <bellucda@tiscali.it>
-+ * - pms_capture: report back -EFAULT
- */
-
- #include <linux/module.h>
-@@ -659,7 +663,8 @@ static int pms_capture(struct pms_device
- if(dt+len>count)
- dt=count-len;
- cnt += dev->height;
-- copy_to_user(buf, tmp+32, dt);
-+ if (copy_to_user(buf, tmp+32, dt))
-+ return -EFAULT;
- buf += dt;
- len += dt;
- }
---- linux-2.6.0-test1/drivers/message/fusion/mptctl.c 2003-06-14 12:17:56.000000000 -0700
-+++ 25/drivers/message/fusion/mptctl.c 2003-07-19 17:03:50.000000000 -0700
-@@ -88,7 +88,6 @@
-
- #include <linux/kdev_t.h> /* needed for access to Scsi_Host struct */
- #include <linux/blkdev.h>
--#include <linux/blk.h> /* for io_request_lock (spinlock) decl */
- #include "../../scsi/scsi.h"
- #include "../../scsi/hosts.h"
-
---- linux-2.6.0-test1/drivers/message/fusion/mptscsih.c 2003-06-14 12:18:08.000000000 -0700
-+++ 25/drivers/message/fusion/mptscsih.c 2003-07-19 17:03:50.000000000 -0700
-@@ -72,7 +72,6 @@
- #include <linux/errno.h>
- #include <linux/kdev_t.h>
- #include <linux/blkdev.h>
--#include <linux/blk.h> /* for io_request_lock (spinlock) decl */
- #include <linux/delay.h> /* for mdelay */
- #include <linux/interrupt.h> /* needed for in_interrupt() proto */
- #include <linux/reboot.h> /* notifier code */
---- linux-2.6.0-test1/drivers/message/i2o/i2o_block.c 2003-06-14 12:18:28.000000000 -0700
-+++ 25/drivers/message/i2o/i2o_block.c 2003-07-19 17:03:50.000000000 -0700
-@@ -87,8 +87,6 @@
-
- #define MAJOR_NR I2O_MAJOR
-
--#include <linux/blk.h>
--
- #define MAX_I2OB 16
-
- #define MAX_I2OB_DEPTH 8
---- linux-2.6.0-test1/drivers/message/i2o/i2o_scsi.c 2003-07-10 18:50:31.000000000 -0700
-+++ 25/drivers/message/i2o/i2o_scsi.c 2003-07-19 17:03:50.000000000 -0700
-@@ -54,7 +54,7 @@
- #include <asm/system.h>
- #include <asm/io.h>
- #include <asm/atomic.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/i2o.h>
- #include "../../scsi/scsi.h"
- #include "../../scsi/hosts.h"
---- linux-2.6.0-test1/drivers/mtd/devices/blkmtd.c 2003-06-26 22:07:24.000000000 -0700
-+++ 25/drivers/mtd/devices/blkmtd.c 2003-07-19 17:07:03.000000000 -0700
-@@ -1189,6 +1189,7 @@ static int __init init_blkmtd(void)
- INIT_LIST_HEAD(&mtd_rawdevice->as.locked_pages);
- mtd_rawdevice->as.host = NULL;
- init_MUTEX(&(mtd_rawdevice->as.i_shared_sem));
-+ atomic_set(&(mtd_rawdevice->as.truncate_count), 0);
-
- mtd_rawdevice->as.a_ops = &blkmtd_aops;
- INIT_LIST_HEAD(&mtd_rawdevice->as.i_mmap);
---- linux-2.6.0-test1/drivers/mtd/mtd_blkdevs.c 2003-07-10 18:50:31.000000000 -0700
-+++ 25/drivers/mtd/mtd_blkdevs.c 2003-07-19 17:03:50.000000000 -0700
-@@ -15,7 +15,6 @@
- #include <linux/mtd/blktrans.h>
- #include <linux/mtd/mtd.h>
- #include <linux/blkdev.h>
--#include <linux/blk.h>
- #include <linux/blkpg.h>
- #include <linux/spinlock.h>
- #include <linux/hdreg.h>
---- linux-2.6.0-test1/drivers/net/3c59x.c 2003-06-14 12:17:55.000000000 -0700
-+++ 25/drivers/net/3c59x.c 2003-07-19 17:06:13.000000000 -0700
-@@ -291,8 +291,6 @@ MODULE_PARM(global_full_duplex, "i");
- MODULE_PARM(full_duplex, "1-" __MODULE_STRING(8) "i");
- MODULE_PARM(hw_checksums, "1-" __MODULE_STRING(8) "i");
- MODULE_PARM(flow_ctrl, "1-" __MODULE_STRING(8) "i");
--MODULE_PARM(global_enable_wol, "i");
--MODULE_PARM(enable_wol, "1-" __MODULE_STRING(8) "i");
- MODULE_PARM(rx_copybreak, "i");
- MODULE_PARM(max_interrupt_work, "i");
- MODULE_PARM(compaq_ioaddr, "i");
-@@ -306,8 +304,6 @@ MODULE_PARM_DESC(full_duplex, "3c59x ful
- MODULE_PARM_DESC(global_full_duplex, "3c59x: same as full_duplex, but applies to all NICs if options is unset");
- MODULE_PARM_DESC(hw_checksums, "3c59x Hardware checksum checking by adapter(s) (0-1)");
- MODULE_PARM_DESC(flow_ctrl, "3c59x 802.3x flow control usage (PAUSE only) (0-1)");
--MODULE_PARM_DESC(enable_wol, "3c59x: Turn on Wake-on-LAN for adapter(s) (0-1)");
--MODULE_PARM_DESC(global_enable_wol, "3c59x: same as enable_wol, but applies to all NICs if options is unset");
- MODULE_PARM_DESC(rx_copybreak, "3c59x copy breakpoint for copy-only-tiny-frames");
- MODULE_PARM_DESC(max_interrupt_work, "3c59x maximum events handled per interrupt");
- MODULE_PARM_DESC(compaq_ioaddr, "3c59x PCI I/O base address (Compaq BIOS problem workaround)");
-@@ -484,10 +480,8 @@ static struct vortex_chip_info {
- } vortex_info_tbl[] __devinitdata = {
- {"3c590 Vortex 10Mbps",
- PCI_USES_IO|PCI_USES_MASTER, IS_VORTEX, 32, },
--#define EISA_3C592_OFFSET 1 /* Offset of this entry for vortex_eisa_init */
- {"3c592 EISA 10Mbps Demon/Vortex", /* AKPM: from Don's 3c59x_cb.c 0.49H */
- PCI_USES_IO|PCI_USES_MASTER, IS_VORTEX, 32, },
--#define EISA_3C597_OFFSET 2 /* Offset of this entry for vortex_eisa_init */
- {"3c597 EISA Fast Demon/Vortex", /* AKPM: from Don's 3c59x_cb.c 0.49H */
- PCI_USES_IO|PCI_USES_MASTER, IS_VORTEX, 32, },
- {"3c595 Vortex 100baseTx",
-@@ -819,7 +813,6 @@ struct vortex_private {
- flow_ctrl:1, /* Use 802.3x flow control (PAUSE only) */
- partner_flow_ctrl:1, /* Partner supports flow control */
- has_nway:1,
-- enable_wol:1, /* Wake-on-LAN is enabled */
- pm_state_valid:1, /* power_state[] has sane contents */
- open:1,
- medialock:1,
-@@ -915,10 +908,8 @@ static int options[MAX_UNITS] = { -1, -1
- static int full_duplex[MAX_UNITS] = {-1, -1, -1, -1, -1, -1, -1, -1};
- static int hw_checksums[MAX_UNITS] = {-1, -1, -1, -1, -1, -1, -1, -1};
- static int flow_ctrl[MAX_UNITS] = {-1, -1, -1, -1, -1, -1, -1, -1};
--static int enable_wol[MAX_UNITS] = {-1, -1, -1, -1, -1, -1, -1, -1};
- static int global_options = -1;
- static int global_full_duplex = -1;
--static int global_enable_wol = -1;
-
- /* #define dev_alloc_skb dev_alloc_skb_debug */
-
-@@ -960,8 +951,8 @@ static int vortex_resume (struct pci_dev
-
- #ifdef CONFIG_EISA
- static struct eisa_device_id vortex_eisa_ids[] = {
-- { "TCM5920", EISA_3C592_OFFSET },
-- { "TCM5970", EISA_3C597_OFFSET },
-+ { "TCM5920", CH_3C592 },
-+ { "TCM5970", CH_3C597 },
- { "" }
- };
-
-@@ -1138,8 +1129,6 @@ static int __devinit vortex_probe1(struc
- vortex_debug = 7;
- if (option & 0x4000)
- vortex_debug = 2;
-- if (option & 0x0400)
-- vp->enable_wol = 1;
- }
-
- print_info = (vortex_debug > 1);
-@@ -1227,16 +1216,12 @@ static int __devinit vortex_probe1(struc
-
- if (global_full_duplex > 0)
- vp->full_duplex = 1;
-- if (global_enable_wol > 0)
-- vp->enable_wol = 1;
-
- if (card_idx < MAX_UNITS) {
- if (full_duplex[card_idx] > 0)
- vp->full_duplex = 1;
- if (flow_ctrl[card_idx] > 0)
- vp->flow_ctrl = 1;
-- if (enable_wol[card_idx] > 0)
-- vp->enable_wol = 1;
- }
-
- vp->force_fd = vp->full_duplex;
-@@ -1379,7 +1364,7 @@ static int __devinit vortex_probe1(struc
- } else
- dev->if_port = vp->default_media;
-
-- if ((vp->available_media & 0x4b) || (vci->drv_flags & HAS_NWAY) ||
-+ if ((vp->available_media & 0x40) || (vci->drv_flags & HAS_NWAY) ||
- dev->if_port == XCVR_MII || dev->if_port == XCVR_NWAY) {
- int phy, phy_idx = 0;
- EL3WINDOW(4);
-@@ -1463,7 +1448,7 @@ static int __devinit vortex_probe1(struc
- dev->set_multicast_list = set_rx_mode;
- dev->tx_timeout = vortex_tx_timeout;
- dev->watchdog_timeo = (watchdog * HZ) / 1000;
-- if (pdev && vp->enable_wol) {
-+ if (pdev) {
- vp->pm_state_valid = 1;
- pci_save_state(VORTEX_PCI(vp), vp->power_state);
- acpi_set_WOL(dev);
-@@ -1520,7 +1505,7 @@ vortex_up(struct net_device *dev)
- unsigned int config;
- int i;
-
-- if (VORTEX_PCI(vp) && vp->enable_wol) {
-+ if (VORTEX_PCI(vp)) {
- pci_set_power_state(VORTEX_PCI(vp), 0); /* Go active */
- pci_restore_state(VORTEX_PCI(vp), vp->power_state);
- }
-@@ -2669,7 +2654,7 @@ vortex_down(struct net_device *dev)
- if (vp->full_bus_master_tx)
- outl(0, ioaddr + DownListPtr);
-
-- if (VORTEX_PCI(vp) && vp->enable_wol) {
-+ if (VORTEX_PCI(vp)) {
- pci_save_state(VORTEX_PCI(vp), vp->power_state);
- acpi_set_WOL(dev);
- }
-@@ -3059,7 +3044,7 @@ static void __devexit vortex_remove_one
- /* Should really use issue_and_wait() here */
- outw(TotalReset|0x14, dev->base_addr + EL3_CMD);
-
-- if (VORTEX_PCI(vp) && vp->enable_wol) {
-+ if (VORTEX_PCI(vp)) {
- pci_set_power_state(VORTEX_PCI(vp), 0); /* Go active */
- if (vp->pm_state_valid)
- pci_restore_state(VORTEX_PCI(vp), vp->power_state);
---- linux-2.6.0-test1/drivers/net/eql.c 2003-06-14 12:18:33.000000000 -0700
-+++ 25/drivers/net/eql.c 2003-07-19 17:03:50.000000000 -0700
-@@ -162,22 +162,12 @@ static void eql_timer(unsigned long para
- static char version[] __initdata =
- "Equalizer2002: Simon Janes (simon@ncm.com) and David S. Miller (davem@redhat.com)\n";
-
--static int __init eql_init(struct net_device *dev)
-+static void __init eql_setup(struct net_device *dev)
- {
-- static unsigned int version_printed;
-- equalizer_t *eql;
-+ equalizer_t *eql = dev->priv;
-
- SET_MODULE_OWNER(dev);
-
-- if (version_printed++ == 0)
-- printk(version);
--
-- dev->priv = kmalloc(sizeof (equalizer_t), GFP_KERNEL);
-- if (dev->priv == NULL)
-- return -ENOMEM;
-- memset(dev->priv, 0, sizeof (equalizer_t));
-- eql = dev->priv;
--
- init_timer(&eql->timer);
- eql->timer.data = (unsigned long) dev->priv;
- eql->timer.expires = jiffies + EQL_DEFAULT_RESCHED_IVAL;
-@@ -203,8 +193,6 @@ static int __init eql_init(struct net_de
-
- dev->type = ARPHRD_SLIP;
- dev->tx_queue_len = 5; /* Hands them off fast */
--
-- return 0;
- }
-
- static int eql_open(struct net_device *dev)
-@@ -598,23 +586,28 @@ static int eql_s_master_cfg(struct net_d
- return -EINVAL;
- }
-
--static struct net_device dev_eql;
-+static struct net_device *dev_eql;
-
- static int __init eql_init_module(void)
- {
-- strcpy(dev_eql.name, "eql");
-- dev_eql.init = eql_init;
-- if (register_netdev(&dev_eql) != 0) {
-- printk("eql: register_netdev() returned non-zero.\n");
-- return -EIO;
-- }
-- return 0;
-+ int err;
-+
-+ printk(version);
-+
-+ dev_eql = alloc_netdev(sizeof(equalizer_t), "eql", eql_setup);
-+ if (!dev_eql)
-+ return -ENOMEM;
-+
-+ err = register_netdev(dev_eql);
-+ if (err)
-+ kfree(dev_eql);
-+ return err;
- }
-
- static void __exit eql_cleanup_module(void)
- {
-- kfree(dev_eql.priv);
-- unregister_netdev(&dev_eql);
-+ unregister_netdev(dev_eql);
-+ kfree(dev_eql);
- }
-
- module_init(eql_init_module);
---- linux-2.6.0-test1/drivers/net/fc/iph5526.c 2003-06-16 22:32:21.000000000 -0700
-+++ 25/drivers/net/fc/iph5526.c 2003-07-19 17:03:50.000000000 -0700
-@@ -48,7 +48,6 @@ static const char *version =
- #include <linux/timer.h>
- #include <linux/spinlock.h>
- #include <linux/netdevice.h>
--#include <linux/blk.h>
- #include <linux/fcdevice.h> /* had the declarations for init_fcdev among
- others + includes if_fcdevice.h */
-
---- linux-2.6.0-test1/drivers/net/irda/vlsi_ir.c 2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/net/irda/vlsi_ir.c 2003-07-19 17:03:50.000000000 -0700
-@@ -474,10 +474,8 @@ static ssize_t vlsi_proc_read(struct fil
- if (pos + nbytes > size)
- nbytes = size - pos;
-
-- if (!access_ok(VERIFY_WRITE, buf, nbytes))
-- return -EINVAL;
--
-- copy_to_user(buf, procdata->data + pos, nbytes);
-+ if (copy_to_user(buf, procdata->data + pos, nbytes))
-+ return -EFAULT;
-
- *ppos += nbytes;
-
---- linux-2.6.0-test1/drivers/net/Kconfig 2003-07-10 18:50:31.000000000 -0700
-+++ 25/drivers/net/Kconfig 2003-07-19 17:03:50.000000000 -0700
-@@ -1153,7 +1153,7 @@ config ZNET
-
- config SEEQ8005
- tristate "SEEQ8005 support (EXPERIMENTAL)"
-- depends on NET_ISA && OBSOLETE && EXPERIMENTAL
-+ depends on NET_ISA && EXPERIMENTAL
- help
- This is a driver for the SEEQ 8005 network (Ethernet) card. If this
- is for you, read the Ethernet-HOWTO, available from
---- linux-2.6.0-test1/drivers/net/ni65.c 2003-06-14 12:18:05.000000000 -0700
-+++ 25/drivers/net/ni65.c 2003-07-19 17:03:50.000000000 -0700
-@@ -245,6 +245,7 @@ struct priv
- int cmdr_addr;
- int cardno;
- int features;
-+ spinlock_t ring_lock;
- };
-
- static int ni65_probe1(struct net_device *dev,int);
-@@ -299,7 +300,7 @@ static int ni65_open(struct net_device *
- int irqval = request_irq(dev->irq, &ni65_interrupt,0,
- cards[p->cardno].cardname,dev);
- if (irqval) {
-- printk ("%s: unable to get IRQ %d (irqval=%d).\n",
-+ printk(KERN_ERR "%s: unable to get IRQ %d (irqval=%d).\n",
- dev->name,dev->irq, irqval);
- return -EAGAIN;
- }
-@@ -409,12 +410,14 @@ static int __init ni65_probe1(struct net
- p = (struct priv *) dev->priv;
- p->cmdr_addr = ioaddr + cards[i].cmd_offset;
- p->cardno = i;
-+ spin_lock_init(&p->ring_lock);
-
-- printk("%s: %s found at %#3x, ", dev->name, cards[p->cardno].cardname , ioaddr);
-+ printk(KERN_INFO "%s: %s found at %#3x, ", dev->name, cards[p->cardno].cardname , ioaddr);
-
- outw(inw(PORT+L_RESET),PORT+L_RESET); /* first: reset the card */
- if( (j=readreg(CSR0)) != 0x4) {
-- printk(KERN_ERR "can't RESET card: %04x\n",j);
-+ printk("failed.\n");
-+ printk(KERN_ERR "%s: Can't RESET card: %04x\n", dev->name, j);
- ni65_free_buffer(p);
- release_region(ioaddr, cards[p->cardno].total_size);
- return -EAGAIN;
-@@ -467,7 +470,8 @@ static int __init ni65_probe1(struct net
- break;
- }
- if(i == 5) {
-- printk("Can't detect DMA channel!\n");
-+ printk("failed.\n");
-+ printk(KERN_ERR "%s: Can't detect DMA channel!\n", dev->name);
- ni65_free_buffer(p);
- release_region(ioaddr, cards[p->cardno].total_size);
- return -EAGAIN;
-@@ -480,13 +484,13 @@ static int __init ni65_probe1(struct net
-
- if(dev->irq < 2)
- {
-- unsigned long irq_mask, delay;
-+ unsigned long irq_mask;
-
- ni65_init_lance(p,dev->dev_addr,0,0);
- irq_mask = probe_irq_on();
- writereg(CSR0_INIT|CSR0_INEA,CSR0); /* trigger interrupt */
-- delay = jiffies + HZ/50;
-- while (time_before(jiffies, delay)) ;
-+ set_current_state(TASK_UNINTERRUPTIBLE);
-+ schedule_timeout(HZ/50);
- dev->irq = probe_irq_off(irq_mask);
- if(!dev->irq)
- {
-@@ -503,7 +507,7 @@ static int __init ni65_probe1(struct net
-
- if(request_dma(dev->dma, cards[p->cardno].cardname ) != 0)
- {
-- printk("%s: Can't request dma-channel %d\n",dev->name,(int) dev->dma);
-+ printk(KERN_ERR "%s: Can't request dma-channel %d\n",dev->name,(int) dev->dma);
- ni65_free_buffer(p);
- release_region(ioaddr, cards[p->cardno].total_size);
- return -EAGAIN;
-@@ -570,7 +574,7 @@ static void *ni65_alloc_mem(struct net_d
- if(type) {
- ret = skb = alloc_skb(2+16+size,GFP_KERNEL|GFP_DMA);
- if(!skb) {
-- printk("%s: unable to allocate %s memory.\n",dev->name,what);
-+ printk(KERN_WARNING "%s: unable to allocate %s memory.\n",dev->name,what);
- return NULL;
- }
- skb->dev = dev;
-@@ -581,12 +585,12 @@ static void *ni65_alloc_mem(struct net_d
- else {
- ret = ptr = kmalloc(T_BUF_SIZE,GFP_KERNEL | GFP_DMA);
- if(!ret) {
-- printk("%s: unable to allocate %s memory.\n",dev->name,what);
-+ printk(KERN_WARNING "%s: unable to allocate %s memory.\n",dev->name,what);
- return NULL;
- }
- }
- if( (u32) virt_to_phys(ptr+size) > 0x1000000) {
-- printk("%s: unable to allocate %s memory in lower 16MB!\n",dev->name,what);
-+ printk(KERN_WARNING "%s: unable to allocate %s memory in lower 16MB!\n",dev->name,what);
- if(type)
- kfree_skb(skb);
- else
-@@ -692,7 +696,7 @@ static void ni65_stop_start(struct net_d
- writedatareg(CSR0_STOP);
-
- if(debuglevel > 1)
-- printk("ni65_stop_start\n");
-+ printk(KERN_DEBUG "ni65_stop_start\n");
-
- if(p->features & INIT_RING_BEFORE_START) {
- int i;
-@@ -846,6 +850,8 @@ static irqreturn_t ni65_interrupt(int ir
-
- p = (struct priv *) dev->priv;
-
-+ spin_lock(&p->ring_lock);
-+
- while(--bcnt) {
- csr0 = inw(PORT+L_DATAREG);
-
-@@ -867,7 +873,7 @@ static irqreturn_t ni65_interrupt(int ir
- {
- struct priv *p = (struct priv *) dev->priv;
- if(debuglevel > 1)
-- printk("%s: general error: %04x.\n",dev->name,csr0);
-+ printk(KERN_ERR "%s: general error: %04x.\n",dev->name,csr0);
- if(csr0 & CSR0_BABL)
- p->stats.tx_errors++;
- if(csr0 & CSR0_MISS) {
-@@ -879,7 +885,7 @@ static irqreturn_t ni65_interrupt(int ir
- }
- if(csr0 & CSR0_MERR) {
- if(debuglevel > 1)
-- printk("%s: Ooops .. memory error: %04x.\n",dev->name,csr0);
-+ printk(KERN_ERR "%s: Ooops .. memory error: %04x.\n",dev->name,csr0);
- ni65_stop_start(dev,p);
- }
- }
-@@ -932,12 +938,13 @@ static irqreturn_t ni65_interrupt(int ir
- #endif
-
- if( (csr0 & (CSR0_RXON | CSR0_TXON)) != (CSR0_RXON | CSR0_TXON) ) {
-- printk("%s: RX or TX was offline -> restart\n",dev->name);
-+ printk(KERN_DEBUG "%s: RX or TX was offline -> restart\n",dev->name);
- ni65_stop_start(dev,p);
- }
- else
- writedatareg(CSR0_INEA);
-
-+ spin_unlock(&p->ring_lock);
- return IRQ_HANDLED;
- }
-
-@@ -1147,9 +1154,7 @@ static int ni65_send_packet(struct sk_bu
- memset((char *)p->tmdbounce[p->tmdbouncenum]+skb->len, 0, len-skb->len);
- dev_kfree_skb (skb);
-
-- save_flags(flags);
-- cli();
--
-+ spin_lock_irqsave(&p->ring_lock, flags);
- tmdp = p->tmdhead + p->tmdnum;
- tmdp->u.buffer = (u32) isa_virt_to_bus(p->tmdbounce[p->tmdbouncenum]);
- p->tmdbouncenum = (p->tmdbouncenum + 1) & (TMDNUM - 1);
-@@ -1157,8 +1162,7 @@ static int ni65_send_packet(struct sk_bu
- #ifdef XMT_VIA_SKB
- }
- else {
-- save_flags(flags);
-- cli();
-+ spin_lock_irqsave(&p->ring_lock, flags);
-
- tmdp = p->tmdhead + p->tmdnum;
- tmdp->u.buffer = (u32) isa_virt_to_bus(skb->data);
-@@ -1178,8 +1182,8 @@ static int ni65_send_packet(struct sk_bu
-
- p->lock = 0;
- dev->trans_start = jiffies;
--
-- restore_flags(flags);
-+
-+ spin_unlock_irqrestore(&p->ring_lock, flags);
- }
-
- return 0;
-@@ -1238,10 +1242,8 @@ void cleanup_module(void)
- {
- struct priv *p;
- p = (struct priv *) dev_ni65.priv;
-- if(!p) {
-- printk("Ooops .. no private struct\n");
-- return;
-- }
-+ if(!p)
-+ BUG();
- disable_dma(dev_ni65.dma);
- free_dma(dev_ni65.dma);
- unregister_netdev(&dev_ni65);
-@@ -1250,6 +1252,7 @@ void cleanup_module(void)
- dev_ni65.priv = NULL;
- }
- #endif /* MODULE */
-+
- MODULE_LICENSE("GPL");
-
- /*
---- linux-2.6.0-test1/drivers/net/ni65.h 2003-06-14 12:18:35.000000000 -0700
-+++ 25/drivers/net/ni65.h 2003-07-19 17:03:50.000000000 -0700
-@@ -20,32 +20,32 @@
- #define CSR0_BABL 0x4000 /* Babble transmitter timeout error (RC) */
- #define CSR0_CERR 0x2000 /* Collision Error (RC) */
- #define CSR0_MISS 0x1000 /* Missed packet (RC) */
--#define CSR0_MERR 0x0800 /* Memory Error (RC) */
-+#define CSR0_MERR 0x0800 /* Memory Error (RC) */
- #define CSR0_RINT 0x0400 /* Receiver Interrupt (RC) */
--#define CSR0_TINT 0x0200 /* Transmit Interrupt (RC) */
-+#define CSR0_TINT 0x0200 /* Transmit Interrupt (RC) */
- #define CSR0_IDON 0x0100 /* Initialization Done (RC) */
- #define CSR0_INTR 0x0080 /* Interrupt Flag (R) */
- #define CSR0_INEA 0x0040 /* Interrupt Enable (RW) */
- #define CSR0_RXON 0x0020 /* Receiver on (R) */
--#define CSR0_TXON 0x0010 /* Transmitter on (R) */
-+#define CSR0_TXON 0x0010 /* Transmitter on (R) */
- #define CSR0_TDMD 0x0008 /* Transmit Demand (RS) */
--#define CSR0_STOP 0x0004 /* Stop (RS) */
-+#define CSR0_STOP 0x0004 /* Stop (RS) */
- #define CSR0_STRT 0x0002 /* Start (RS) */
- #define CSR0_INIT 0x0001 /* Initialize (RS) */
-
--#define CSR0_CLRALL 0x7f00 /* mask for all clearable bits */
-+#define CSR0_CLRALL 0x7f00 /* mask for all clearable bits */
- /*
- * Initialization Block Mode operation Bit Definitions.
- */
-
- #define M_PROM 0x8000 /* Promiscuous Mode */
--#define M_INTL 0x0040 /* Internal Loopback */
--#define M_DRTY 0x0020 /* Disable Retry */
-+#define M_INTL 0x0040 /* Internal Loopback */
-+#define M_DRTY 0x0020 /* Disable Retry */
- #define M_COLL 0x0010 /* Force Collision */
- #define M_DTCR 0x0008 /* Disable Transmit CRC) */
- #define M_LOOP 0x0004 /* Loopback */
--#define M_DTX 0x0002 /* Disable the Transmitter */
--#define M_DRX 0x0001 /* Disable the Receiver */
-+#define M_DTX 0x0002 /* Disable the Transmitter */
-+#define M_DRX 0x0001 /* Disable the Receiver */
-
-
- /*
-@@ -56,7 +56,7 @@
- #define RCV_ERR 0x40 /* Error Summary */
- #define RCV_FRAM 0x20 /* Framing Error */
- #define RCV_OFLO 0x10 /* Overflow Error */
--#define RCV_CRC 0x08 /* CRC Error */
-+#define RCV_CRC 0x08 /* CRC Error */
- #define RCV_BUF_ERR 0x04 /* Buffer Error */
- #define RCV_START 0x02 /* Start of Packet */
- #define RCV_END 0x01 /* End of Packet */
-@@ -67,7 +67,7 @@
- */
-
- #define XMIT_OWN 0x80 /* owner bit 0 = host, 1 = lance */
--#define XMIT_ERR 0x40 /* Error Summary */
-+#define XMIT_ERR 0x40 /* Error Summary */
- #define XMIT_RETRY 0x10 /* more the 1 retry needed to Xmit */
- #define XMIT_1_RETRY 0x08 /* one retry needed to Xmit */
- #define XMIT_DEF 0x04 /* Deferred */
-@@ -78,53 +78,44 @@
- * transmit status (2) (valid if XMIT_ERR == 1)
- */
-
--#define XMIT_TDRMASK 0x03ff /* time-domain-reflectometer-value */
--#define XMIT_RTRY 0x0400 /* Failed after 16 retransmissions */
--#define XMIT_LCAR 0x0800 /* Loss of Carrier */
--#define XMIT_LCOL 0x1000 /* Late collision */
--#define XMIT_RESERV 0x2000 /* Reserved */
--#define XMIT_UFLO 0x4000 /* Underflow (late memory) */
--#define XMIT_BUFF 0x8000 /* Buffering error (no ENP) */
--
--struct init_block
--{
-- unsigned short mode;
-- unsigned char eaddr[6];
-- unsigned char filter[8];
-- /* bit 29-31: number of rmd's (power of 2) */
-- u32 rrp; /* receive ring pointer (align 8) */
-- /* bit 29-31: number of tmd's (power of 2) */
-- u32 trp; /* transmit ring pointer (align 8) */
-+#define XMIT_TDRMASK 0x03ff /* time-domain-reflectometer-value */
-+#define XMIT_RTRY 0x0400 /* Failed after 16 retransmissions */
-+#define XMIT_LCAR 0x0800 /* Loss of Carrier */
-+#define XMIT_LCOL 0x1000 /* Late collision */
-+#define XMIT_RESERV 0x2000 /* Reserved */
-+#define XMIT_UFLO 0x4000 /* Underflow (late memory) */
-+#define XMIT_BUFF 0x8000 /* Buffering error (no ENP) */
-+
-+struct init_block {
-+ unsigned short mode;
-+ unsigned char eaddr[6];
-+ unsigned char filter[8];
-+ /* bit 29-31: number of rmd's (power of 2) */
-+ u32 rrp; /* receive ring pointer (align 8) */
-+ /* bit 29-31: number of tmd's (power of 2) */
-+ u32 trp; /* transmit ring pointer (align 8) */
- };
-
--struct rmd /* Receive Message Descriptor */
--{
-- union
-- {
-- volatile u32 buffer;
-- struct
-- {
-- volatile unsigned char dummy[3];
-- volatile unsigned char status;
-- } s;
-- } u;
-- volatile short blen;
-- volatile unsigned short mlen;
-+struct rmd { /* Receive Message Descriptor */
-+ union {
-+ volatile u32 buffer;
-+ struct {
-+ volatile unsigned char dummy[3];
-+ volatile unsigned char status;
-+ } s;
-+ } u;
-+ volatile short blen;
-+ volatile unsigned short mlen;
- };
-
--struct tmd
--{
-- union
-- {
-- volatile u32 buffer;
-- struct
-- {
-- volatile unsigned char dummy[3];
-- volatile unsigned char status;
-- } s;
-- } u;
-- volatile unsigned short blen;
-- volatile unsigned short status2;
-+struct tmd {
-+ union {
-+ volatile u32 buffer;
-+ struct {
-+ volatile unsigned char dummy[3];
-+ volatile unsigned char status;
-+ } s;
-+ } u;
-+ volatile unsigned short blen;
-+ volatile unsigned short status2;
- };
--
--
---- linux-2.6.0-test1/drivers/net/pcmcia/Kconfig 2003-06-14 12:18:29.000000000 -0700
-+++ 25/drivers/net/pcmcia/Kconfig 2003-07-19 17:03:50.000000000 -0700
-@@ -113,7 +113,7 @@ config PCMCIA_XIRC2PS
- If unsure, say N.
-
- config PCMCIA_AXNET
-- tristate "broken NS8390-cards support"
-+ tristate "Asix AX88190 PCMCIA support"
- depends on NET_PCMCIA && PCMCIA
- ---help---
- Say Y here if you intend to attach an Asix AX88190-based PCMCIA
---- linux-2.6.0-test1/drivers/net/seeq8005.c 2003-06-14 12:18:29.000000000 -0700
-+++ 25/drivers/net/seeq8005.c 2003-07-19 17:03:50.000000000 -0700
-@@ -700,7 +700,8 @@ static void hardware_send_packet(struct
- * wait_for_buffer
- *
- * This routine waits for the SEEQ chip to assert that the FIFO is ready
-- * by checking for a window interrupt, and then clearing it
-+ * by checking for a window interrupt, and then clearing it. This has to
-+ * occur in the interrupt handler!
- */
- inline void wait_for_buffer(struct net_device * dev)
- {
-@@ -710,7 +711,7 @@ inline void wait_for_buffer(struct net_d
-
- tmp = jiffies + HZ;
- while ( ( ((status=inw(SEEQ_STATUS)) & SEEQSTAT_WINDOW_INT) != SEEQSTAT_WINDOW_INT) && time_before(jiffies, tmp))
-- mb();
-+ cpu_relax();
-
- if ( (status & SEEQSTAT_WINDOW_INT) == SEEQSTAT_WINDOW_INT)
- outw( SEEQCMD_WINDOW_INT_ACK | (status & SEEQCMD_INT_MASK), SEEQ_CMD);
---- linux-2.6.0-test1/drivers/net/wan/comx-hw-comx.c 2003-06-14 12:17:57.000000000 -0700
-+++ 25/drivers/net/wan/comx-hw-comx.c 2003-07-19 17:03:50.000000000 -0700
-@@ -11,6 +11,7 @@
- *
- * Contributors:
- * Arnaldo Carvalho de Melo <acme@conectiva.com.br> - 0.86
-+ * Daniele Bellucci <bellucda@tiscali.it> - 0.87
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
-@@ -42,9 +43,12 @@
- * - printk cleanups
- * Version 0.86 (00/08/15):
- * - resource release on failure at COMX_init
-+ *
-+ * Version 0.87 (03/07/09)
-+ * - audit copy_from_user in comxhw_write_proc
- */
-
--#define VERSION "0.86"
-+#define VERSION "0.87"
-
- #include <linux/module.h>
- #include <linux/version.h>
-@@ -1084,7 +1088,8 @@ static int comxhw_write_proc(struct file
- if (hw->firmware->data) {
- kfree(hw->firmware->data);
- }
-- copy_from_user(tmp + file->f_pos, buffer, count);
-+ if (copy_from_user(tmp + file->f_pos, buffer, count))
-+ return -EFAULT;
- hw->firmware->len = entry->size = file->f_pos + count;
- hw->firmware->data = tmp;
- file->f_pos += count;
---- linux-2.6.0-test1/drivers/net/wan/sdladrv.c 2003-06-14 12:18:03.000000000 -0700
-+++ 25/drivers/net/wan/sdladrv.c 2003-07-19 17:03:50.000000000 -0700
-@@ -160,10 +160,6 @@
-
- /****** Function Prototypes *************************************************/
-
--/* Module entry points. These are called by the OS and must be public. */
--int init_module (void);
--void cleanup_module (void);
--
- /* Hardware-specific functions */
- static int sdla_detect (sdlahw_t* hw);
- static int sdla_autodpm (sdlahw_t* hw);
-@@ -325,11 +321,7 @@ static int pci_slot_ar[MAX_S514_CARDS];
- * Context: process
- */
-
--#ifdef MODULE
--int init_module (void)
--#else
- int sdladrv_init(void)
--#endif
- {
- int i=0;
-
-@@ -354,9 +346,12 @@ int sdladrv_init(void)
- * Module 'remove' entry point.
- * o release all remaining system resources
- */
--void cleanup_module (void)
-+static void sdladrv_cleanup(void)
- {
- }
-+
-+module_init(sdladrv_init);
-+module_cleanup(sdladrv_cleanup);
- #endif
-
- /******* Kernel APIs ********************************************************/
---- linux-2.6.0-test1/drivers/net/wan/sdlamain.c 2003-06-14 12:18:29.000000000 -0700
-+++ 25/drivers/net/wan/sdlamain.c 2003-07-19 17:03:50.000000000 -0700
-@@ -177,10 +177,6 @@ static void dbg_kfree(void * v, int line
- extern void disable_irq(unsigned int);
- extern void enable_irq(unsigned int);
-
--/* Module entry points */
--int init_module (void);
--void cleanup_module (void);
--
- /* WAN link driver entry points */
- static int setup(struct wan_device* wandev, wandev_conf_t* conf);
- static int shutdown(struct wan_device* wandev);
-@@ -246,11 +242,7 @@ static int wanpipe_bh_critical=0;
- * Context: process
- */
-
--#ifdef MODULE
--int init_module (void)
--#else
- int wanpipe_init(void)
--#endif
- {
- int cnt, err = 0;
-
-@@ -313,7 +305,7 @@ int wanpipe_init(void)
- * o unregister all adapters from the WAN router
- * o release all remaining system resources
- */
--void cleanup_module (void)
-+static void wanpipe_cleanup(void)
- {
- int i;
-
-@@ -329,6 +321,8 @@ void cleanup_module (void)
- printk(KERN_INFO "\nwanpipe: WANPIPE Modules Unloaded.\n");
- }
-
-+module_init(wanpipe_init);
-+module_exit(wanpipe_cleanup);
- #endif
-
- /******* WAN Device Driver Entry Points *************************************/
---- linux-2.6.0-test1/drivers/net/wan/syncppp.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/net/wan/syncppp.c 2003-07-19 17:03:50.000000000 -0700
-@@ -161,7 +161,7 @@ static int debug;
- * then put the packet into tx_queue, and call sppp_flush_xmit()
- * after spinlock is released.
- */
--static void sppp_flush_xmit()
-+static void sppp_flush_xmit(void)
- {
- struct sk_buff *skb;
- while ((skb = skb_dequeue(&tx_queue)) != NULL)
---- linux-2.6.0-test1/drivers/net/wireless/airo.c 2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/net/wireless/airo.c 2003-07-19 17:06:31.000000000 -0700
-@@ -927,9 +927,8 @@ static int enable_MAC( struct airo_info
- static void disable_MAC(struct airo_info *ai);
- static void enable_interrupts(struct airo_info*);
- static void disable_interrupts(struct airo_info*);
--static u16 issuecommand(struct airo_info*, Cmd *pCmd, Resp *pRsp);
--static u16 sendcommand(struct airo_info *ai, Cmd *pCmd);
--static void completecommand(struct airo_info *ai, Resp *pRsp);
-+static int issuecommand(struct airo_info*, Cmd *pCmd, Resp *pRsp);
-+static int issuecommand_nolock(struct airo_info*, Cmd *pCmd, Resp *pRsp);
- static int bap_setup(struct airo_info*, u16 rid, u16 offset, int whichbap);
- static int aux_bap_read(struct airo_info*, u16 *pu16Dst, int bytelen,
- int whichbap);
-@@ -939,13 +938,14 @@ static int bap_write(struct airo_info*,
- int whichbap);
- static int PC4500_accessrid(struct airo_info*, u16 rid, u16 accmd);
- static int PC4500_readrid(struct airo_info*, u16 rid, void *pBuf, int len);
-+static int PC4500_readrid_nolock(struct airo_info*, u16 rid, void *pBuf, int len);
- static int PC4500_writerid(struct airo_info*, u16 rid, const void
- *pBuf, int len);
- static int do_writerid( struct airo_info*, u16 rid, const void *rid_data,
- int len );
- static u16 transmit_allocate(struct airo_info*, int lenPayload, int raw);
--static int transmit_802_3_packet(struct airo_info*, int len, char *pPacket);
--static int transmit_802_11_packet(struct airo_info*, int len, char *pPacket);
-+static int transmit_802_3_packet(struct airo_info*, u16 txFid, char *pPacket, int len);
-+static int transmit_802_11_packet(struct airo_info*, u16 txFid, char *pPacket, int len);
-
- static irqreturn_t airo_interrupt( int irq, void* dev_id, struct pt_regs
- *regs);
-@@ -981,12 +981,11 @@ struct airo_info {
- struct timer_list timer;
- struct proc_dir_entry *proc_entry;
- struct airo_info *next;
-- spinlock_t aux_lock;
-+ spinlock_t main_lock;
- unsigned long flags;
- #define FLAG_PROMISC IFF_PROMISC /* 0x100 - include/linux/if.h */
- #define FLAG_RADIO_OFF 0x02 /* User disabling of MAC */
- #define FLAG_RADIO_DOWN 0x08 /* ifup/ifdown disabling of MAC */
--#define FLAG_LOCKED 2 /* 0x04 - use as a bit offset */
- #define FLAG_FLASHING 0x10
- #define FLAG_ADHOC 0x01 /* Needed by MIC */
- #define FLAG_MIC_CAPABLE 0x20
-@@ -997,14 +996,8 @@ struct airo_info {
- int whichbap);
- unsigned short *flash;
- tdsRssiEntry *rssi;
-- struct semaphore sem;
- struct task_struct *task;
- struct work_struct promisc_task;
-- struct {
-- struct sk_buff *skb;
-- int fid;
-- struct work_struct task;
-- } xmit, xmit11;
- struct net_device *wifidev;
- #ifdef WIRELESS_EXT
- struct iw_statistics wstats; // wireless stats
-@@ -1045,10 +1038,8 @@ static int readBSSListRid(struct airo_in
- if (first == 1) {
- memset(&cmd, 0, sizeof(cmd));
- cmd.cmd=CMD_LISTBSS;
-- if (down_interruptible(&ai->sem))
-- return -ERESTARTSYS;
- issuecommand(ai, &cmd, &rsp);
-- up(&ai->sem);
-+
- /* Let the command take effect */
- set_current_state (TASK_INTERRUPTIBLE);
- ai->task = current;
-@@ -1193,7 +1184,7 @@ static int readStatusRid(struct airo_inf
- statr->len = le16_to_cpu(statr->len);
- for(s = &statr->mode; s <= &statr->SSIDlen; s++) *s = le16_to_cpu(*s);
-
-- for(s = &statr->beaconPeriod; s <= &statr->_reserved[9]; s++)
-+ for(s = &statr->beaconPeriod; s <= &statr->_reserved1; s++)
- *s = le16_to_cpu(*s);
-
- return rc;
-@@ -1306,44 +1297,15 @@ static void get_tx_error(struct airo_inf
- }
- }
-
--static void airo_do_xmit(struct net_device *dev) {
-- u16 status;
-- int i;
-- struct airo_info *priv = dev->priv;
-- struct sk_buff *skb = priv->xmit.skb;
-- int fid = priv->xmit.fid;
-- u32 *fids = priv->fids;
--
-- if (down_trylock(&priv->sem) != 0) {
-- netif_stop_queue(dev);
-- priv->xmit.task.func = (void (*)(void *))airo_do_xmit;
-- priv->xmit.task.data = (void *)dev;
-- schedule_work(&priv->xmit.task);
-- return;
-- }
-- status = transmit_802_3_packet (priv, fids[fid], skb->data);
-- up(&priv->sem);
--
-- i = 0;
-- if ( status == SUCCESS ) {
-- dev->trans_start = jiffies;
-- for (; i < MAX_FIDS / 2 && (priv->fids[i] & 0xffff0000); i++);
-- } else {
-- priv->fids[fid] &= 0xffff;
-- priv->stats.tx_window_errors++;
-- }
-- if (i < MAX_FIDS / 2)
-- netif_wake_queue(dev);
-- else
-- netif_stop_queue(dev);
-- dev_kfree_skb(skb);
--}
--
--static int airo_start_xmit(struct sk_buff *skb, struct net_device *dev) {
-- s16 len;
-+static int airo_start_xmit(struct sk_buff *skb, struct net_device *dev)
-+{
-+ int len;
- int i;
-+ int ret = 0;
-+ int status;
-+ unsigned long flags;
- struct airo_info *priv = dev->priv;
-- u32 *fids = priv->fids;
-+ int *fids = priv->fids;
-
- if ( skb == NULL ) {
- printk( KERN_ERR "airo: skb == NULL!!!\n" );
-@@ -1351,61 +1313,50 @@ static int airo_start_xmit(struct sk_buf
- }
-
- /* Find a vacant FID */
-- for( i = 0; i < MAX_FIDS / 2 && (fids[i] & 0xffff0000); i++ );
--
-- if ( i == MAX_FIDS / 2 ) {
-- priv->stats.tx_fifo_errors++;
-- dev_kfree_skb(skb);
-- } else {
-- /* check min length*/
-- len = ETH_ZLEN < skb->len ? skb->len : ETH_ZLEN;
-- /* Mark fid as used & save length for later */
-- fids[i] |= (len << 16);
-- priv->xmit.skb = skb;
-- priv->xmit.fid = i;
-- airo_do_xmit(dev);
-- }
-- return 0;
--}
-+ spin_lock_irqsave(&priv->main_lock, flags);
-+ for (i = 0; i < MAX_FIDS / 2 && (fids[i] & 0xffff0000); i++);
-
--static void airo_do_xmit11(struct net_device *dev) {
-- u16 status;
-- int i;
-- struct airo_info *priv = dev->priv;
-- struct sk_buff *skb = priv->xmit11.skb;
-- int fid = priv->xmit11.fid;
-- u32 *fids = priv->fids;
--
-- if (down_trylock(&priv->sem) != 0) {
-+ if (i + 1 >= MAX_FIDS / 2) {
- netif_stop_queue(dev);
-- priv->xmit11.task.func = (void (*)(void *))airo_do_xmit11;
-- priv->xmit11.task.data = (void *)dev;
-- schedule_work(&priv->xmit11.task);
-- return;
-+
-+ /* we cannot transmit */
-+ if (i == MAX_FIDS / 2) {
-+ priv->stats.tx_fifo_errors++;
-+ ret = 1;
-+ goto tx_done;
-+ }
- }
-- status = transmit_802_11_packet (priv, fids[fid], skb->data);
-- up(&priv->sem);
-
-- i = MAX_FIDS / 2;
-- if ( status == SUCCESS ) {
-+ /* check min length*/
-+ len = ETH_ZLEN < skb->len ? skb->len : ETH_ZLEN;
-+ status = transmit_802_3_packet (priv, fids[i], skb->data, len);
-+
-+ if (status == SUCCESS) {
-+ /* Mark fid as used & save length for later */
-+ fids[i] |= (len << 16);
- dev->trans_start = jiffies;
-- for (; i < MAX_FIDS && (priv->fids[i] & 0xffff0000); i++);
-- } else {
-- priv->fids[fid] &= 0xffff;
-+ }
-+ else {
- priv->stats.tx_window_errors++;
-+ ret = 1;
- }
-- if (i < MAX_FIDS)
-- netif_wake_queue(dev);
-- else
-- netif_stop_queue(dev);
-- dev_kfree_skb(skb);
-+
-+tx_done:
-+ spin_unlock_irqrestore(&priv->main_lock, flags);
-+ if (!ret)
-+ dev_kfree_skb(skb);
-+ return ret;
- }
-
--static int airo_start_xmit11(struct sk_buff *skb, struct net_device *dev) {
-- s16 len;
-+static int airo_start_xmit11(struct sk_buff *skb, struct net_device *dev)
-+{
-+ int len;
- int i;
-+ int ret = 0;
-+ int status;
-+ unsigned long flags;
- struct airo_info *priv = dev->priv;
-- u32 *fids = priv->fids;
-+ int *fids = priv->fids;
-
- if ( skb == NULL ) {
- printk( KERN_ERR "airo: skb == NULL!!!\n" );
-@@ -1413,21 +1364,39 @@ static int airo_start_xmit11(struct sk_b
- }
-
- /* Find a vacant FID */
-+ spin_lock_irqsave(&priv->main_lock, flags);
- for( i = MAX_FIDS / 2; i < MAX_FIDS && (fids[i] & 0xffff0000); i++ );
-
-- if ( i == MAX_FIDS ) {
-- priv->stats.tx_fifo_errors++;
-- dev_kfree_skb(skb);
-- } else {
-- /* check min length*/
-- len = ETH_ZLEN < skb->len ? skb->len : ETH_ZLEN;
-- /* Mark fid as used & save length for later */
-+ if (i + 1 >= MAX_FIDS) {
-+ netif_stop_queue(dev);
-+
-+ /* we cannot transmit */
-+ if (i == MAX_FIDS) {
-+ priv->stats.tx_fifo_errors++;
-+ ret = 1;
-+ goto tx_done;
-+ }
-+ }
-+
-+ /* check min length*/
-+ len = ETH_ZLEN < skb->len ? skb->len : ETH_ZLEN;
-+ status = transmit_802_11_packet (priv, fids[i], skb->data, len);
-+
-+ if (status == SUCCESS) {
-+ /* Mark fid as used & save length for later */
- fids[i] |= (len << 16);
-- priv->xmit11.skb = skb;
-- priv->xmit11.fid = i;
-- airo_do_xmit11(dev);
-+ dev->trans_start = jiffies;
- }
-- return 0;
-+ else {
-+ priv->stats.tx_window_errors++;
-+ ret = 1;
-+ }
-+
-+tx_done:
-+ spin_unlock_irqrestore(&priv->main_lock, flags);
-+ if (!ret)
-+ dev_kfree_skb(skb);
-+ return ret;
- }
-
- struct net_device_stats *airo_get_stats(struct net_device *dev)
-@@ -1457,36 +1426,19 @@ struct net_device_stats *airo_get_stats(
- return &local->stats;
- }
-
--static void airo_end_promisc(struct airo_info *ai) {
-- Resp rsp;
--
-- if ((IN4500(ai, EVSTAT) & EV_CMD) != 0) {
-- completecommand(ai, &rsp);
-- up(&ai->sem);
-- } else {
-- ai->promisc_task.func = (void (*)(void *))airo_end_promisc;
-- ai->promisc_task.data = (void *)ai;
-- schedule_work(&ai->promisc_task);
-- }
--}
--
--static void airo_set_promisc(struct airo_info *ai) {
-+static void airo_set_promisc(struct airo_info *ai)
-+{
- Cmd cmd;
-+ Resp rsp;
-
-- if (down_trylock(&ai->sem) == 0) {
-- memset(&cmd, 0, sizeof(cmd));
-- cmd.cmd=CMD_SETMODE;
-- cmd.parm0=(ai->flags&IFF_PROMISC) ? PROMISC : NOPROMISC;
-- sendcommand(ai, &cmd);
-- airo_end_promisc(ai);
-- } else {
-- ai->promisc_task.func = (void (*)(void *))airo_set_promisc;
-- ai->promisc_task.data = (void *)ai;
-- schedule_work(&ai->promisc_task);
-- }
-+ memset(&cmd, 0, sizeof(cmd));
-+ cmd.cmd = CMD_SETMODE;
-+ cmd.parm0 = (ai->flags & IFF_PROMISC) ? PROMISC : NOPROMISC;
-+ issuecommand(ai, &cmd, &rsp);
- }
-
--static void airo_set_multicast_list(struct net_device *dev) {
-+static void airo_set_multicast_list(struct net_device *dev)
-+{
- struct airo_info *ai = dev->priv;
-
- if ((dev->flags ^ ai->flags) & IFF_PROMISC) {
-@@ -1551,11 +1503,10 @@ void stop_airo_card( struct net_device *
- {
- struct airo_info *ai = dev->priv;
- flush_scheduled_work();
-- if (ai->flash)
-- kfree(ai->flash);
-- if (ai->rssi)
-- kfree(ai->rssi);
-- takedown_proc_entry( dev, ai );
-+
-+ disable_interrupts(ai);
-+ free_irq(dev->irq, dev);
-+
- if (ai->registered) {
- unregister_netdev( dev );
- if (ai->wifidev) {
-@@ -1565,9 +1516,15 @@ void stop_airo_card( struct net_device *
- }
- ai->registered = 0;
- }
-- disable_interrupts(ai);
-- free_irq( dev->irq, dev );
-- if (auto_wep) del_timer_sync(&ai->timer);
-+
-+ if (ai->flash)
-+ kfree(ai->flash);
-+ if (ai->rssi)
-+ kfree(ai->rssi);
-+ takedown_proc_entry( dev, ai );
-+
-+ if (auto_wep)
-+ del_timer_sync(&ai->timer);
- if (freeres) {
- /* PCMCIA frees this stuff, so only for PCI and ISA */
- release_region( dev->base_addr, 64 );
-@@ -1664,8 +1621,7 @@ struct net_device *init_airo_card( unsig
- ai->wifidev = 0;
- ai->registered = 0;
- ai->dev = dev;
-- ai->aux_lock = SPIN_LOCK_UNLOCKED;
-- sema_init(&ai->sem, 1);
-+ ai->main_lock = SPIN_LOCK_UNLOCKED;
- ai->need_commit = 0;
- ai->config.len = 0;
- rc = add_airo_dev( dev );
-@@ -1730,7 +1686,6 @@ struct net_device *init_airo_card( unsig
- ai->fids[i] = transmit_allocate(ai,2312,i>=MAX_FIDS/2);
-
- setup_proc_entry( dev, dev->priv ); /* XXX check for failure */
-- netif_start_queue(dev);
- SET_MODULE_OWNER(dev);
- return dev;
-
-@@ -1794,47 +1749,31 @@ int reset_airo_card( struct net_device *
- EXPORT_SYMBOL(reset_airo_card);
-
- #if WIRELESS_EXT > 13
-+/* must be called with lock held */
- static void airo_send_event(struct net_device *dev) {
- struct airo_info *ai = dev->priv;
- union iwreq_data wrqu;
- StatusRid status_rid;
-
-- if (down_trylock(&ai->sem) == 0) {
-- __set_bit(FLAG_LOCKED, &ai->flags);
-- PC4500_readrid(ai, RID_STATUS, &status_rid, sizeof(status_rid));
-- clear_bit(FLAG_LOCKED, &ai->flags);
-- up(&ai->sem);
-- wrqu.data.length = 0;
-- wrqu.data.flags = 0;
-- memcpy(wrqu.ap_addr.sa_data, status_rid.bssid[0], ETH_ALEN);
-- wrqu.ap_addr.sa_family = ARPHRD_ETHER;
-+ PC4500_readrid_nolock(ai, RID_STATUS, &status_rid, sizeof(status_rid));
-
-- /* Send event to user space */
-- wireless_send_event(dev, SIOCGIWAP, &wrqu, NULL);
-- } else {
-- ai->event_task.func = (void (*)(void *))airo_send_event;
-- ai->event_task.data = (void *)dev;
-- schedule_work(&ai->event_task);
-- }
-+ wrqu.data.length = 0;
-+ wrqu.data.flags = 0;
-+ memcpy(wrqu.ap_addr.sa_data, status_rid.bssid[0], ETH_ALEN);
-+ wrqu.ap_addr.sa_family = ARPHRD_ETHER;
-+
-+ /* Send event to user space */
-+ wireless_send_event(dev, SIOCGIWAP, &wrqu, NULL);
- }
- #endif
-
- static void airo_read_mic(struct airo_info *ai) {
-+#ifdef MICSUPPORT
- MICRid mic_rid;
-
-- if (down_trylock(&ai->sem) == 0) {
-- __set_bit(FLAG_LOCKED, &ai->flags);
-- PC4500_readrid(ai, RID_MIC, &mic_rid, sizeof(mic_rid));
-- clear_bit(FLAG_LOCKED, &ai->flags);
-- up(&ai->sem);
--#ifdef MICSUPPORT
-- micinit (ai, &mic_rid);
-+ PC4500_readrid(ai, RID_MIC, &mic_rid, sizeof(mic_rid));
-+ micinit (ai, &mic_rid);
- #endif
-- } else {
-- ai->mic_task.func = (void (*)(void *))airo_read_mic;
-- ai->mic_task.data = (void *)ai;
-- schedule_work(&ai->mic_task);
-- }
- }
-
- static irqreturn_t airo_interrupt ( int irq, void* dev_id, struct pt_regs *regs) {
-@@ -1848,6 +1787,7 @@ static irqreturn_t airo_interrupt ( int
- if (!netif_device_present(dev))
- return IRQ_NONE;
-
-+ spin_lock(&apriv->main_lock);
- for (;;) {
- status = IN4500( apriv, EVSTAT );
- if ( !(status & STATUS_INTS) || status == 0xffff ) break;
-@@ -1866,7 +1806,8 @@ static irqreturn_t airo_interrupt ( int
-
- if ( status & EV_MIC ) {
- OUT4500( apriv, EVACK, EV_MIC );
-- airo_read_mic( apriv );
-+ if (apriv->flags & FLAG_MIC_CAPABLE)
-+ airo_read_mic( apriv );
- }
- if ( status & EV_LINK ) {
- #if WIRELESS_EXT > 13
-@@ -2115,10 +2056,14 @@ static irqreturn_t airo_interrupt ( int
- index = i;
- /* Set up to be used again */
- apriv->fids[i] &= 0xffff;
-+
-+ if (i < MAX_FIDS / 2)
-+ netif_wake_queue(dev);
-+ else
-+ netif_wake_queue(apriv->wifidev);
- }
- }
- if (index != -1) {
-- netif_wake_queue(dev);
- if (status & EV_TXEXC)
- get_tx_error(apriv, index);
- }
-@@ -2134,6 +2079,7 @@ static irqreturn_t airo_interrupt ( int
-
- if (savedInterrupts)
- OUT4500( apriv, EVINTEN, savedInterrupts );
-+ spin_unlock(&apriv->main_lock);
-
- /* done.. */
- return IRQ_RETVAL(handled);
-@@ -2169,8 +2115,8 @@ static u16 IN4500( struct airo_info *ai,
- return rc;
- }
-
--static int enable_MAC( struct airo_info *ai, Resp *rsp ) {
-- int rc;
-+static int enable_MAC( struct airo_info *ai, Resp *rsp )
-+{
- Cmd cmd;
-
- /* FLAG_RADIO_OFF : Radio disabled via /proc or Wireless Extensions
-@@ -2182,45 +2128,41 @@ static int enable_MAC( struct airo_info
- if (ai->flags & (FLAG_RADIO_OFF|FLAG_RADIO_DOWN)) return SUCCESS;
- memset(&cmd, 0, sizeof(cmd));
- cmd.cmd = MAC_ENABLE;
-- if (test_bit(FLAG_LOCKED, &ai->flags) != 0)
-- return issuecommand(ai, &cmd, rsp);
--
-- if (down_interruptible(&ai->sem))
-- return -ERESTARTSYS;
-- rc = issuecommand(ai, &cmd, rsp);
-- up(&ai->sem);
-- return rc;
-+ return issuecommand(ai, &cmd, rsp);
- }
-
--static void disable_MAC( struct airo_info *ai ) {
-+static void disable_MAC(struct airo_info *ai)
-+{
- Cmd cmd;
- Resp rsp;
-
- memset(&cmd, 0, sizeof(cmd));
- cmd.cmd = MAC_DISABLE; // disable in case already enabled
-- if (test_bit(FLAG_LOCKED, &ai->flags) != 0) {
-- issuecommand(ai, &cmd, &rsp);
-- return;
-- }
--
-- if (down_interruptible(&ai->sem))
-- return;
- issuecommand(ai, &cmd, &rsp);
-- up(&ai->sem);
- }
-
--static void enable_interrupts( struct airo_info *ai ) {
-+static void enable_interrupts(struct airo_info *ai)
-+{
-+ unsigned long flags;
-+ u16 status;
-+ spin_lock_irqsave(&ai->main_lock, flags);
-+
- /* Reset the status register */
-- u16 status = IN4500( ai, EVSTAT );
-+ status = IN4500( ai, EVSTAT );
- OUT4500( ai, EVACK, status );
-+
- /* Enable the interrupts */
- OUT4500( ai, EVINTEN, STATUS_INTS );
-- /* Note there is a race condition between the last two lines that
-- I don't know how to get rid of right now... */
-+
-+ spin_unlock_irqrestore(&ai->main_lock, flags);
- }
-
--static void disable_interrupts( struct airo_info *ai ) {
-+static void disable_interrupts(struct airo_info *ai)
-+{
-+ unsigned long flags;
-+ spin_lock_irqsave(&ai->main_lock, flags);
- OUT4500( ai, EVINTEN, 0 );
-+ spin_unlock_irqrestore(&ai->main_lock, flags);
- }
-
- static u16 setup_card(struct airo_info *ai, u8 *mac)
-@@ -2243,23 +2185,20 @@ static u16 setup_card(struct airo_info *
- /* The NOP is the first step in getting the card going */
- cmd.cmd = NOP;
- cmd.parm0 = cmd.parm1 = cmd.parm2 = 0;
-- if (down_interruptible(&ai->sem))
-+ if (spin_is_locked(&ai->main_lock))
- return ERROR;
-- if ( issuecommand( ai, &cmd, &rsp ) != SUCCESS ) {
-- up(&ai->sem);
-+ if (issuecommand(ai, &cmd, &rsp) != SUCCESS)
- return ERROR;
-- }
-+
- memset(&cmd, 0, sizeof(cmd));
- cmd.cmd = MAC_DISABLE; // disable in case already enabled
-- if ( issuecommand( ai, &cmd, &rsp ) != SUCCESS ) {
-- up(&ai->sem);
-+ if (issuecommand( ai, &cmd, &rsp) != SUCCESS )
- return ERROR;
-- }
-+
-
- // Let's figure out if we need to use the AUX port
- cmd.cmd = CMD_ENABLEAUX;
- if (issuecommand(ai, &cmd, &rsp) != SUCCESS) {
-- up(&ai->sem);
- printk(KERN_ERR "airo: Error checking for AUX port\n");
- return ERROR;
- }
-@@ -2270,7 +2209,7 @@ static u16 setup_card(struct airo_info *
- ai->bap_read = aux_bap_read;
- printk(KERN_DEBUG "airo: Doing AUX bap_reads\n");
- }
-- up(&ai->sem);
-+
- if (ai->config.len == 0) {
- tdsRssiRid rssi_rid;
- CapabilityRid cap_rid;
-@@ -2375,50 +2314,35 @@ static u16 setup_card(struct airo_info *
- }
- return SUCCESS;
- }
-+static int issuecommand(struct airo_info *ai, Cmd *pCmd, Resp *pRsp) {
-+ int rc;
-+ unsigned long flags;
-
--static u16 issuecommand(struct airo_info *ai, Cmd *pCmd, Resp *pRsp) {
-- // Im really paranoid about letting it run forever!
-- int max_tries = 600000;
--
-- if (sendcommand(ai, pCmd) == (u16)ERROR)
-- return ERROR;
--
-- while (max_tries-- && (IN4500(ai, EVSTAT) & EV_CMD) == 0) {
-- if (!in_interrupt() && (max_tries & 255) == 0)
-- schedule();
-- }
-- if ( max_tries == -1 ) {
-- printk( KERN_ERR
-- "airo: Max tries exceeded waiting for command\n" );
-- return ERROR;
-- }
-- completecommand(ai, pRsp);
-- return SUCCESS;
-+ spin_lock_irqsave(&ai->main_lock, flags);
-+ rc = issuecommand_nolock(ai, pCmd, pRsp);
-+ spin_unlock_irqrestore(&ai->main_lock, flags);
-+ return rc;
- }
-
--static u16 sendcommand(struct airo_info *ai, Cmd *pCmd) {
-- // Im really paranoid about letting it run forever!
-+static int issuecommand_nolock(struct airo_info *ai, Cmd *pCmd, Resp *pRsp) {
-+ // Im really paranoid about letting it run forever!
- int max_tries = 600000;
-- u16 cmd;
-
- OUT4500(ai, PARAM0, pCmd->parm0);
- OUT4500(ai, PARAM1, pCmd->parm1);
- OUT4500(ai, PARAM2, pCmd->parm2);
- OUT4500(ai, COMMAND, pCmd->cmd);
-- while ( max_tries-- && (IN4500(ai, EVSTAT) & EV_CMD) == 0 &&
-- (cmd = IN4500(ai, COMMAND)) != 0 )
-- if (cmd == pCmd->cmd)
-- // PC4500 didn't notice command, try again
-- OUT4500(ai, COMMAND, pCmd->cmd);
-- if ( max_tries == -1 ) {
-+ while (max_tries-- && (IN4500(ai, EVSTAT) & EV_CMD) == 0) {
-+ if (IN4500(ai, COMMAND) == pCmd->cmd) {
-+ // PC4500 didn't notice command, try again
-+ OUT4500(ai, COMMAND, pCmd->cmd);
-+ }
-+ }
-+ if (max_tries == -1) {
- printk( KERN_ERR
- "airo: Max tries exceeded when issueing command\n" );
- return ERROR;
- }
-- return SUCCESS;
--}
--
--static void completecommand(struct airo_info *ai, Resp *pRsp) {
- // command completed
- pRsp->status = IN4500(ai, STATUS);
- pRsp->rsp0 = IN4500(ai, RESP0);
-@@ -2431,8 +2355,10 @@ static void completecommand(struct airo_
- }
- // acknowledge processing the status/response
- OUT4500(ai, EVACK, EV_CMD);
-+ return SUCCESS;
- }
-
-+
- /* Sets up the bap to start exchange data. whichbap should
- * be one of the BAP0 or BAP1 defines. Locks should be held before
- * calling! */
-@@ -2497,9 +2423,7 @@ static int aux_bap_read(struct airo_info
- u16 next;
- int words;
- int i;
-- unsigned long flags;
-
-- spin_lock_irqsave(&ai->aux_lock, flags);
- page = IN4500(ai, SWS0+whichbap);
- offset = IN4500(ai, SWS2+whichbap);
- next = aux_setup(ai, page, offset, &len);
-@@ -2519,7 +2443,6 @@ static int aux_bap_read(struct airo_info
- next = aux_setup(ai, next, 4, &len);
- }
- }
-- spin_unlock_irqrestore(&ai->aux_lock, flags);
- return SUCCESS;
- }
-
-@@ -2558,7 +2481,7 @@ static int PC4500_accessrid(struct airo_
- memset(&cmd, 0, sizeof(cmd));
- cmd.cmd = accmd;
- cmd.parm0 = rid;
-- status = issuecommand(ai, &cmd, &rsp);
-+ status = issuecommand_nolock(ai, &cmd, &rsp);
- if (status != 0) return status;
- if ( (rsp.status & 0x7F00) != 0) {
- return (accmd << 8) + (rsp.rsp0 & 0xFF);
-@@ -2567,25 +2490,16 @@ static int PC4500_accessrid(struct airo_
- }
-
- /* Note, that we are using BAP1 which is also used by transmit, so
-- * we must get a lock. */
--static int PC4500_readrid(struct airo_info *ai, u16 rid, void *pBuf, int len)
-+ * it must be called with main_lock held. */
-+static int PC4500_readrid_nolock(struct airo_info *ai, u16 rid, void *pBuf, int len)
- {
-- u16 status, dolock = 0;
-- int rc = SUCCESS;
-+ u16 status;
-+
-+ if ((status = PC4500_accessrid(ai, rid, CMD_ACCESS)) != SUCCESS)
-+ return status;
-+ if (bap_setup(ai, rid, 0, BAP1) != SUCCESS)
-+ return ERROR;
-
-- if (test_bit(FLAG_LOCKED, &ai->flags) == 0) {
-- dolock = 1;
-- if (down_interruptible(&ai->sem))
-- return ERROR;
-- }
-- if ( (status = PC4500_accessrid(ai, rid, CMD_ACCESS)) != SUCCESS) {
-- rc = status;
-- goto done;
-- }
-- if (bap_setup(ai, rid, 0, BAP1) != SUCCESS) {
-- rc = ERROR;
-- goto done;
-- }
- // read the rid length field
- bap_read(ai, pBuf, 2, BAP1);
- // length for remaining part of rid
-@@ -2596,30 +2510,34 @@ static int PC4500_readrid(struct airo_in
- "airo: Rid %x has a length of %d which is too short\n",
- (int)rid,
- (int)len );
-- rc = ERROR;
-- goto done;
-+ return ERROR;
- }
- // read remainder of the rid
-- rc = bap_read(ai, ((u16*)pBuf)+1, len, BAP1);
--done:
-- if (dolock)
-- up(&ai->sem);
-- return rc;
-+ return bap_read(ai, ((u16*)pBuf)+1, len, BAP1);
- }
-
-+static int PC4500_readrid(struct airo_info *ai, u16 rid, void *pBuf, int len)
-+{
-+ unsigned long flags;
-+ int rc;
-+
-+ spin_lock_irqsave(&ai->main_lock, flags);
-+ rc = PC4500_readrid_nolock(ai, rid, pBuf, len);
-+ spin_unlock_irqrestore(&ai->main_lock, flags);
-+ return rc;
-+}
- /* Note, that we are using BAP1 which is also used by transmit, so
- * make sure this isnt called when a transmit is happening */
- static int PC4500_writerid(struct airo_info *ai, u16 rid,
- const void *pBuf, int len)
- {
-- u16 status, dolock = 0;
-+ u16 status;
-+ unsigned long flags;
- int rc = SUCCESS;
-
-- if (test_bit(FLAG_LOCKED, &ai->flags) == 0) {
-- dolock = 1;
-- if (down_interruptible(&ai->sem))
-- return ERROR;
-- }
-+ *(u16*)pBuf = cpu_to_le16((u16)len);
-+
-+ spin_lock_irqsave(&ai->main_lock, flags);
- // --- first access so that we can write the rid data
- if ( (status = PC4500_accessrid(ai, rid, CMD_ACCESS)) != 0) {
- rc = status;
-@@ -2633,9 +2551,8 @@ static int PC4500_writerid(struct airo_i
- bap_write(ai, pBuf, len, BAP1);
- // ---now commit the rid data
- rc = PC4500_accessrid(ai, rid, 0x100|CMD_ACCESS);
-- done:
-- if (dolock)
-- up(&ai->sem);
-+done:
-+ spin_unlock_irqrestore(&ai->main_lock, flags);
- return rc;
- }
-
-@@ -2643,6 +2560,8 @@ static int PC4500_writerid(struct airo_i
- one for now. */
- static u16 transmit_allocate(struct airo_info *ai, int lenPayload, int raw)
- {
-+ unsigned long flags;
-+ unsigned int loop = 3000;
- Cmd cmd;
- Resp rsp;
- u16 txFid;
-@@ -2650,20 +2569,25 @@ static u16 transmit_allocate(struct airo
-
- cmd.cmd = CMD_ALLOCATETX;
- cmd.parm0 = lenPayload;
-- if (down_interruptible(&ai->sem))
-- return ERROR;
-- if (issuecommand(ai, &cmd, &rsp) != SUCCESS) {
-- txFid = 0;
-+ spin_lock_irqsave(&ai->main_lock, flags);
-+ if (issuecommand_nolock(ai, &cmd, &rsp) != SUCCESS) {
-+ txFid = ERROR;
- goto done;
- }
- if ( (rsp.status & 0xFF00) != 0) {
-- txFid = 0;
-+ txFid = ERROR;
- goto done;
- }
-+
- /* wait for the allocate event/indication
-- * It makes me kind of nervous that this can just sit here and spin,
-- * but in practice it only loops like four times. */
-- while ( (IN4500(ai, EVSTAT) & EV_ALLOC) == 0) ;
-+ * in practice it only loops like four times. */
-+ while (((IN4500(ai, EVSTAT) & EV_ALLOC) == 0) && --loop)
-+ ; /* nada */
-+ if (!loop) {
-+ txFid = ERROR;
-+ goto done;
-+ }
-+
- // get the allocated fid and acknowledge
- txFid = IN4500(ai, TXALLOCFID);
- OUT4500(ai, EVACK, EV_ALLOC);
-@@ -2685,7 +2609,7 @@ static u16 transmit_allocate(struct airo
- bap_write(ai, &txControl, sizeof(txControl), BAP1);
-
- done:
-- up(&ai->sem);
-+ spin_unlock_irqrestore(&ai->main_lock, flags);
-
- return txFid;
- }
-@@ -2693,17 +2617,14 @@ done:
- /* In general BAP1 is dedicated to transmiting packets. However,
- since we need a BAP when accessing RIDs, we also use BAP1 for that.
- Make sure the BAP1 spinlock is held when this is called. */
--static int transmit_802_3_packet(struct airo_info *ai, int len, char *pPacket)
-+static int transmit_802_3_packet(struct airo_info *ai, u16 txFid, char *pPacket, int len)
- {
- u16 payloadLen;
- Cmd cmd;
- Resp rsp;
- int miclen = 0;
-- u16 txFid = len;
- MICBuffer pMic;
-
-- len >>= 16;
--
- if (len < ETH_ALEN * 2) {
- printk( KERN_WARNING "Short packet %d\n", len );
- return ERROR;
-@@ -2734,12 +2655,12 @@ static int transmit_802_3_packet(struct
- memset( &cmd, 0, sizeof( cmd ) );
- cmd.cmd = CMD_TRANSMIT;
- cmd.parm0 = txFid;
-- if (issuecommand(ai, &cmd, &rsp) != SUCCESS) return ERROR;
-+ if (issuecommand_nolock(ai, &cmd, &rsp) != SUCCESS) return ERROR;
- if ( (rsp.status & 0xFF00) != 0) return ERROR;
- return SUCCESS;
- }
-
--static int transmit_802_11_packet(struct airo_info *ai, int len, char *pPacket)
-+static int transmit_802_11_packet(struct airo_info *ai, u16 txFid, char *pPacket, int len)
- {
- u16 fc, payloadLen;
- Cmd cmd;
-@@ -2750,8 +2671,6 @@ static int transmit_802_11_packet(struct
- u16 gaplen;
- u8 gap[6];
- } gap;
-- u16 txFid = len;
-- len >>= 16;
- gap.gaplen = 6;
-
- fc = le16_to_cpu(*(const u16*)pPacket);
-@@ -2793,7 +2712,7 @@ static int transmit_802_11_packet(struct
- memset( &cmd, 0, sizeof( cmd ) );
- cmd.cmd = CMD_TRANSMIT;
- cmd.parm0 = txFid;
-- if (issuecommand(ai, &cmd, &rsp) != SUCCESS) return ERROR;
-+ if (issuecommand_nolock(ai, &cmd, &rsp) != SUCCESS) return ERROR;
- if ( (rsp.status & 0xFF00) != 0) return ERROR;
- return SUCCESS;
- }
-@@ -3857,10 +3776,7 @@ static int proc_BSSList_open( struct ino
-
- memset(&cmd, 0, sizeof(cmd));
- cmd.cmd=CMD_LISTBSS;
-- if (down_interruptible(&ai->sem))
-- return -ERESTARTSYS;
- issuecommand(ai, &cmd, &rsp);
-- up(&ai->sem);
- data->readlen = 0;
- return 0;
- }
-@@ -3923,13 +3839,6 @@ static void timer_func( u_long data ) {
-
- if (!(apriv->flags & FLAG_FLASHING) && (linkstat != 0x400)) {
- /* We don't have a link so try changing the authtype */
-- if (down_trylock(&apriv->sem) != 0) {
-- apriv->timer.expires = RUN_AT(1);
-- add_timer(&apriv->timer);
-- return;
-- }
-- __set_bit(FLAG_LOCKED, &apriv->flags);
--
- readConfigRid(apriv);
- disable_MAC(apriv);
- switch(apriv->config.authType) {
-@@ -3955,8 +3864,6 @@ static void timer_func( u_long data ) {
- apriv->need_commit = 1;
- writeConfigRid(apriv);
- enable_MAC(apriv, &rsp);
-- clear_bit(FLAG_LOCKED, &apriv->flags);
-- up(&apriv->sem);
-
- /* Schedule check to see if the change worked */
- apriv->timer.expires = RUN_AT(HZ*3);
-@@ -4135,7 +4042,11 @@ static int airo_get_freq(struct net_devi
- struct airo_info *local = dev->priv;
- StatusRid status_rid; /* Card status info */
-
-- readStatusRid(local, &status_rid);
-+ if (local->config.opmode & MODE_STA_ESS)
-+ status_rid.channel = local->config.channelSet;
-+ else
-+ readStatusRid(local, &status_rid);
-+
-
- /* Will return zero in infrastructure mode */
- #ifdef WEXT_USECHANNELS
-@@ -4246,11 +4157,8 @@ static int airo_set_wap(struct net_devic
- return -EINVAL;
- else if (!memcmp(bcast, awrq->sa_data, ETH_ALEN)) {
- memset(&cmd, 0, sizeof(cmd));
-- cmd.cmd=CMD_LOSE_SYNC;
-- if (down_interruptible(&local->sem))
-- return -ERESTARTSYS;
-+ cmd.cmd = CMD_LOSE_SYNC;
- issuecommand(local, &cmd, &rsp);
-- up(&local->sem);
- } else {
- memset(&APList_rid, 0, sizeof(APList_rid));
- APList_rid.len = sizeof(APList_rid);
-@@ -5132,11 +5040,8 @@ static int airo_set_scan(struct net_devi
- /* Initiate a scan command */
- memset(&cmd, 0, sizeof(cmd));
- cmd.cmd=CMD_LISTBSS;
-- if (down_interruptible(&ai->sem))
-- return -ERESTARTSYS;
- issuecommand(ai, &cmd, &rsp);
- ai->scan_timestamp = jiffies;
-- up(&ai->sem);
-
- /* At this point, just return to the user. */
-
---- linux-2.6.0-test1/drivers/net/wireless/ray_cs.c 2003-06-14 12:18:07.000000000 -0700
-+++ 25/drivers/net/wireless/ray_cs.c 2003-07-19 17:03:50.000000000 -0700
-@@ -25,6 +25,8 @@
- * - reorganize kmallocs in ray_attach, checking all for failure
- * and releasing the previous allocations if one fails
- *
-+ * Daniele Bellucci <bellucda@tiscali.it> - 07/10/2003
-+ * - Audit copy_to_user in ioctl(SIOCGIWESSID)
- *
- =============================================================================*/
-
-@@ -1315,7 +1317,8 @@ static int ray_dev_ioctl(struct net_devi
- /* Push it out ! */
- wrq->u.data.length = strlen(essid) + 1;
- wrq->u.data.flags = 1; /* active */
-- copy_to_user(wrq->u.data.pointer, essid, sizeof(essid));
-+ if (copy_to_user(wrq->u.data.pointer, essid, sizeof(essid)))
-+ err = -EFAULT;
- }
- break;
-
---- linux-2.6.0-test1/drivers/parisc/led.c 2003-06-16 22:32:21.000000000 -0700
-+++ 25/drivers/parisc/led.c 2003-07-19 17:03:50.000000000 -0700
-@@ -14,6 +14,10 @@
- * TODO:
- * - speed-up calculations with inlined assembler
- * - interface to write to second row of LCD from /proc (if technically possible)
-+ *
-+ * Changes:
-+ * - Audit copy_from_user in led_proc_write.
-+ * Daniele Bellucci <bellucda@tiscali.it>
- */
-
- #include <linux/config.h>
-@@ -160,7 +164,9 @@ static int led_proc_write(struct file *f
-
- memset(lbuf, 0, count);
-
-- copy_from_user(lbuf, buf, count);
-+ if (copy_from_user(lbuf, buf, count))
-+ return -EFAULT;
-+
- cur = lbuf;
-
- /* skip initial spaces */
---- linux-2.6.0-test1/drivers/parport/parport_pc.c 2003-06-14 12:18:35.000000000 -0700
-+++ 25/drivers/parport/parport_pc.c 2003-07-19 17:03:50.000000000 -0700
-@@ -94,7 +94,8 @@ static struct superio_struct { /* For Su
- } superios[NR_SUPERIOS] __devinitdata = { {0,},};
-
- static int user_specified __devinitdata = 0;
--#if defined(CONFIG_PARPORT_PC_FIFO) || defined(CONFIG_PARPORT_PC_SUPERIO)
-+#if defined(CONFIG_PARPORT_PC_SUPERIO) || \
-+ (defined(CONFIG_PARPORT_1284) && defined(CONFIG_PARPORT_PC_FIFO))
- static int verbose_probing;
- #endif
- static int registered_parport;
-@@ -3116,7 +3117,8 @@ MODULE_PARM_DESC(irq, "IRQ line");
- MODULE_PARM(irq, "1-" __MODULE_STRING(PARPORT_PC_MAX_PORTS) "s");
- MODULE_PARM_DESC(dma, "DMA channel");
- MODULE_PARM(dma, "1-" __MODULE_STRING(PARPORT_PC_MAX_PORTS) "s");
--#if defined(CONFIG_PARPORT_PC_FIFO) || defined(CONFIG_PARPORT_PC_SUPERIO)
-+#if defined(CONFIG_PARPORT_PC_SUPERIO) || \
-+ (defined(CONFIG_PARPORT_1284) && defined(CONFIG_PARPORT_PC_FIFO))
- MODULE_PARM_DESC(verbose_probing, "Log chit-chat during initialisation");
- MODULE_PARM(verbose_probing, "i");
- #endif
---- linux-2.6.0-test1/drivers/pci/hotplug/acpiphp_glue.c 2003-07-10 18:50:31.000000000 -0700
-+++ 25/drivers/pci/hotplug/acpiphp_glue.c 2003-07-19 17:03:50.000000000 -0700
-@@ -607,7 +607,7 @@ find_p2p_bridge (acpi_handle handle, u32
-
- /* check if this bridge has ejectable slots */
- if (detect_ejectable_slots(handle) > 0) {
-- dbg("found PCI-to-PCI bridge at PCI %s\n", dev->slot_name);
-+ dbg("found PCI-to-PCI bridge at PCI %s\n", pci_name(dev));
- add_p2p_bridge(handle, seg, bus, device, function);
- }
-
-@@ -693,7 +693,7 @@ static int power_on_slot (struct acpiphp
-
- if (func->flags & FUNC_HAS_PS0) {
- dbg("%s: executing _PS0 on %s\n", __FUNCTION__,
-- func->pci_dev->slot_name);
-+ pci_name(func->pci_dev));
- status = acpi_evaluate_object(func->handle, "_PS0", NULL, NULL);
- if (ACPI_FAILURE(status)) {
- warn("%s: _PS0 failed\n", __FUNCTION__);
---- linux-2.6.0-test1/drivers/pci/hotplug/acpiphp_pci.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/pci/hotplug/acpiphp_pci.c 2003-07-19 17:03:50.000000000 -0700
-@@ -212,7 +212,7 @@ static int detect_used_resource (struct
- int count;
- struct pci_resource *res;
-
-- dbg("Device %s\n", dev->slot_name);
-+ dbg("Device %s\n", pci_name(dev));
-
- for (count = 0; address[count]; count++) { /* for 6 BARs */
- pci_read_config_dword(dev, address[count], &bar);
-@@ -337,7 +337,7 @@ int acpiphp_init_func_resource (struct a
- struct pci_dev *dev;
-
- dev = func->pci_dev;
-- dbg("Hot-pluggable device %s\n", dev->slot_name);
-+ dbg("Hot-pluggable device %s\n", pci_name(dev));
-
- for (count = 0; address[count]; count++) { /* for 6 BARs */
- pci_read_config_dword(dev, address[count], &bar);
---- linux-2.6.0-test1/drivers/pci/hotplug.c 2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/pci/hotplug.c 2003-07-19 17:03:50.000000000 -0700
-@@ -10,8 +10,6 @@
- #define DBG(x...)
- #endif
-
--static void pci_free_resources(struct pci_dev *dev);
--
- int pci_hotplug (struct device *dev, char **envp, int num_envp,
- char *buffer, int buffer_size)
- {
-@@ -57,7 +55,7 @@ int pci_hotplug (struct device *dev, cha
-
- envp[i++] = scratch;
- length += snprintf (scratch, buffer_size - length, "PCI_SLOT_NAME=%s",
-- pdev->slot_name);
-+ pci_name(pdev));
- if ((buffer_size - length <= 0) || (i >= num_envp))
- return -ENOMEM;
-
-@@ -172,105 +170,3 @@ int pci_visit_dev (struct pci_visit *fn,
- }
- EXPORT_SYMBOL(pci_visit_dev);
-
--static void pci_destroy_dev(struct pci_dev *dev)
--{
-- pci_proc_detach_device(dev);
-- device_unregister(&dev->dev);
--
-- /* Remove the device from the device lists, and prevent any further
-- * list accesses from this device */
-- spin_lock(&pci_bus_lock);
-- list_del(&dev->bus_list);
-- list_del(&dev->global_list);
-- dev->bus_list.next = dev->bus_list.prev = NULL;
-- dev->global_list.next = dev->global_list.prev = NULL;
-- spin_unlock(&pci_bus_lock);
--
-- pci_free_resources(dev);
-- pci_dev_put(dev);
--}
--
--/**
-- * pci_remove_device_safe - remove an unused hotplug device
-- * @dev: the device to remove
-- *
-- * Delete the device structure from the device lists and
-- * notify userspace (/sbin/hotplug), but only if the device
-- * in question is not being used by a driver.
-- * Returns 0 on success.
-- */
--int pci_remove_device_safe(struct pci_dev *dev)
--{
-- if (pci_dev_driver(dev))
-- return -EBUSY;
-- pci_destroy_dev(dev);
-- return 0;
--}
--EXPORT_SYMBOL(pci_remove_device_safe);
--
--static void
--pci_free_resources(struct pci_dev *dev)
--{
-- int i;
--
-- for (i = 0; i < PCI_NUM_RESOURCES; i++) {
-- struct resource *res = dev->resource + i;
-- if (res->parent)
-- release_resource(res);
-- }
--}
--
--/**
-- * pci_remove_bus_device - remove a PCI device and any children
-- * @dev: the device to remove
-- *
-- * Remove a PCI device from the device lists, informing the drivers
-- * that the device has been removed. We also remove any subordinate
-- * buses and children in a depth-first manner.
-- *
-- * For each device we remove, delete the device structure from the
-- * device lists, remove the /proc entry, and notify userspace
-- * (/sbin/hotplug).
-- */
--void pci_remove_bus_device(struct pci_dev *dev)
--{
-- if (dev->subordinate) {
-- struct pci_bus *b = dev->subordinate;
--
-- pci_remove_behind_bridge(dev);
-- pci_proc_detach_bus(b);
--
-- spin_lock(&pci_bus_lock);
-- list_del(&b->node);
-- spin_unlock(&pci_bus_lock);
--
-- kfree(b);
-- dev->subordinate = NULL;
-- }
--
-- pci_destroy_dev(dev);
--}
--
--/**
-- * pci_remove_behind_bridge - remove all devices behind a PCI bridge
-- * @dev: PCI bridge device
-- *
-- * Remove all devices on the bus, except for the parent bridge.
-- * This also removes any child buses, and any devices they may
-- * contain in a depth-first manner.
-- */
--void pci_remove_behind_bridge(struct pci_dev *dev)
--{
-- struct list_head *l, *n;
--
-- if (dev->subordinate) {
-- list_for_each_safe(l, n, &dev->subordinate->devices) {
-- struct pci_dev *dev = pci_dev_b(l);
--
-- pci_remove_bus_device(dev);
-- }
-- }
--}
--
--EXPORT_SYMBOL(pci_remove_bus_device);
--EXPORT_SYMBOL(pci_remove_behind_bridge);
---- linux-2.6.0-test1/drivers/pci/hotplug/cpci_hotplug_core.c 2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/pci/hotplug/cpci_hotplug_core.c 2003-07-19 17:03:50.000000000 -0700
-@@ -427,34 +427,6 @@ cpci_hp_unregister_bus(struct pci_bus *b
- return 0;
- }
-
--struct slot *
--cpci_find_slot(struct pci_bus *bus, unsigned int devfn)
--{
-- struct slot *slot;
-- struct slot *found;
-- struct list_head *tmp;
--
-- if(!bus) {
-- return NULL;
-- }
--
-- spin_lock(&list_lock);
-- if(!slots) {
-- spin_unlock(&list_lock);
-- return NULL;
-- }
-- found = NULL;
-- list_for_each(tmp, &slot_list) {
-- slot = list_entry(tmp, struct slot, slot_list);
-- if(slot->bus == bus && slot->devfn == devfn) {
-- found = slot;
-- break;
-- }
-- }
-- spin_unlock(&list_lock);
-- return found;
--}
--
- /* This is the interrupt mode interrupt handler */
- irqreturn_t
- cpci_hp_intr(int irq, void *data, struct pt_regs *regs)
-@@ -924,6 +896,5 @@ EXPORT_SYMBOL_GPL(cpci_hp_register_contr
- EXPORT_SYMBOL_GPL(cpci_hp_unregister_controller);
- EXPORT_SYMBOL_GPL(cpci_hp_register_bus);
- EXPORT_SYMBOL_GPL(cpci_hp_unregister_bus);
--EXPORT_SYMBOL_GPL(cpci_find_slot);
- EXPORT_SYMBOL_GPL(cpci_hp_start);
- EXPORT_SYMBOL_GPL(cpci_hp_stop);
---- linux-2.6.0-test1/drivers/pci/hotplug/cpci_hotplug.h 2003-06-14 12:17:58.000000000 -0700
-+++ 25/drivers/pci/hotplug/cpci_hotplug.h 2003-07-19 17:03:50.000000000 -0700
-@@ -75,7 +75,6 @@ extern int cpci_hp_register_controller(s
- extern int cpci_hp_unregister_controller(struct cpci_hp_controller *controller);
- extern int cpci_hp_register_bus(struct pci_bus *bus, u8 first, u8 last);
- extern int cpci_hp_unregister_bus(struct pci_bus *bus);
--extern struct slot *cpci_find_slot(struct pci_bus *bus, unsigned int devfn);
- extern int cpci_hp_start(void);
- extern int cpci_hp_stop(void);
-
---- linux-2.6.0-test1/drivers/pci/hotplug/cpci_hotplug_pci.c 2003-07-10 18:50:31.000000000 -0700
-+++ 25/drivers/pci/hotplug/cpci_hotplug_pci.c 2003-07-19 17:03:50.000000000 -0700
-@@ -448,7 +448,7 @@ static int cpci_configure_bridge(struct
- }
-
- static int configure_visit_pci_dev(struct pci_dev_wrapped *wrapped_dev,
-- struct pci_bus_wrapped *wrapped_bus)
-+ struct pci_bus_wrapped *wrapped_bus)
- {
- int rc;
- struct pci_dev *dev = wrapped_dev->dev;
-@@ -461,8 +461,8 @@ static int configure_visit_pci_dev(struc
- * We need to fix up the hotplug representation with the Linux
- * representation.
- */
-- slot = cpci_find_slot(dev->bus, dev->devfn);
-- if(slot) {
-+ if(wrapped_dev->data) {
-+ slot = (struct slot*) wrapped_dev->data;
- slot->dev = dev;
- }
-
-@@ -494,9 +494,7 @@ static int unconfigure_visit_pci_dev_pha
- return -ENODEV;
-
- /* Remove the Linux representation */
-- if(pci_remove_device_safe(dev) == 0) {
-- kfree(dev);
-- } else {
-+ if(pci_remove_device_safe(dev)) {
- err("Could not remove device\n");
- return -1;
- }
-@@ -504,8 +502,8 @@ static int unconfigure_visit_pci_dev_pha
- /*
- * Now remove the hotplug representation.
- */
-- slot = cpci_find_slot(dev->bus, dev->devfn);
-- if(slot) {
-+ if(wrapped_dev->data) {
-+ slot = (struct slot*) wrapped_dev->data;
- slot->dev = NULL;
- } else {
- dbg("No hotplug representation for %02x:%02x.%x",
-@@ -574,13 +572,18 @@ int cpci_configure_slot(struct slot* slo
-
- /* Still NULL? Well then scan for it! */
- if(slot->dev == NULL) {
-+ int n;
- dbg("pci_dev still null");
-
- /*
- * This will generate pci_dev structures for all functions, but
- * we will only call this case when lookup fails.
- */
-- slot->dev = pci_scan_slot(slot->bus, slot->devfn);
-+ n = pci_scan_slot(slot->bus, slot->devfn);
-+ dbg("%s: pci_scan_slot returned %d", __FUNCTION__, n);
-+ if(n > 0)
-+ pci_bus_add_devices(slot->bus);
-+ slot->dev = pci_find_slot(slot->bus->number, slot->devfn);
- if(slot->dev == NULL) {
- err("Could not find PCI device for slot %02x", slot->number);
- return 0;
-@@ -603,6 +606,10 @@ int cpci_configure_slot(struct slot* slo
- continue;
- wrapped_dev.dev = dev;
- wrapped_bus.bus = slot->dev->bus;
-+ if(i)
-+ wrapped_dev.data = NULL;
-+ else
-+ wrapped_dev.data = (void*) slot;
- rc = pci_visit_dev(&configure_functions, &wrapped_dev, &wrapped_bus);
- }
- }
-@@ -635,9 +642,14 @@ int cpci_unconfigure_slot(struct slot* s
- if(dev) {
- wrapped_dev.dev = dev;
- wrapped_bus.bus = dev->bus;
-+ if(i)
-+ wrapped_dev.data = NULL;
-+ else
-+ wrapped_dev.data = (void*) slot;
- dbg("%s - unconfigure phase 2", __FUNCTION__);
- rc = pci_visit_dev(&unconfigure_functions_phase2,
-- &wrapped_dev, &wrapped_bus);
-+ &wrapped_dev,
-+ &wrapped_bus);
- if(rc)
- break;
- }
---- linux-2.6.0-test1/drivers/pci/hotplug/Kconfig 2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/pci/hotplug/Kconfig 2003-07-19 17:03:50.000000000 -0700
-@@ -99,22 +99,17 @@ config HOTPLUG_PCI_ACPI
- When in doubt, say N.
-
- config HOTPLUG_PCI_CPCI
-- tristate "CompactPCI Hotplug driver"
-+ bool "CompactPCI Hotplug driver"
- depends on HOTPLUG_PCI
- help
- Say Y here if you have a CompactPCI system card with CompactPCI
- hotswap support per the PICMG 2.1 specification.
-
-- This code is also available as a module ( = code which can be
-- inserted in and removed from the running kernel whenever you want).
-- The module will be called cpci_hotplug. If you want to compile it
-- as a module, say M here and read <file:Documentation/modules.txt>.
--
- When in doubt, say N.
-
- config HOTPLUG_PCI_CPCI_ZT5550
- tristate "Ziatech ZT5550 CompactPCI Hotplug driver"
-- depends on HOTPLUG_PCI_CPCI && X86
-+ depends on HOTPLUG_PCI && HOTPLUG_PCI_CPCI && X86
- help
- Say Y here if you have an Performance Technologies (formerly Intel,
- formerly just Ziatech) Ziatech ZT5550 CompactPCI system card.
-@@ -128,7 +123,7 @@ config HOTPLUG_PCI_CPCI_ZT5550
-
- config HOTPLUG_PCI_CPCI_GENERIC
- tristate "Generic port I/O CompactPCI Hotplug driver"
-- depends on HOTPLUG_PCI_CPCI && X86
-+ depends on HOTPLUG_PCI && HOTPLUG_PCI_CPCI && X86
- help
- Say Y here if you have a CompactPCI system card that exposes the #ENUM
- hotswap signal as a bit in a system register that can be read through
---- linux-2.6.0-test1/drivers/pci/Makefile 2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/pci/Makefile 2003-07-19 17:03:50.000000000 -0700
-@@ -2,7 +2,7 @@
- # Makefile for the PCI bus specific drivers.
- #
-
--obj-y += access.o bus.o probe.o pci.o pool.o quirks.o \
-+obj-y += access.o bus.o probe.o remove.o pci.o pool.o quirks.o \
- names.o pci-driver.o search.o pci-sysfs.o
- obj-$(CONFIG_PM) += power.o
- obj-$(CONFIG_PROC_FS) += proc.o
---- linux-2.6.0-test1/drivers/pci/pci.c 2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/pci/pci.c 2003-07-19 17:03:50.000000000 -0700
-@@ -506,7 +506,7 @@ err_out:
- pci_resource_flags(pdev, bar) & IORESOURCE_IO ? "I/O" : "mem",
- bar + 1, /* PCI BAR # */
- pci_resource_len(pdev, bar), pci_resource_start(pdev, bar),
-- pdev->slot_name);
-+ pci_name(pdev));
- return -EBUSY;
- }
-
-@@ -555,7 +555,7 @@ err_out:
- pci_resource_flags(pdev, i) & IORESOURCE_IO ? "I/O" : "mem",
- i + 1, /* PCI BAR # */
- pci_resource_len(pdev, i), pci_resource_start(pdev, i),
-- pdev->slot_name);
-+ pci_name(pdev));
- while(--i >= 0)
- pci_release_region(pdev, i);
-
-@@ -576,7 +576,7 @@ pci_set_master(struct pci_dev *dev)
-
- pci_read_config_word(dev, PCI_COMMAND, &cmd);
- if (! (cmd & PCI_COMMAND_MASTER)) {
-- DBG("PCI: Enabling bus mastering for device %s\n", dev->slot_name);
-+ DBG("PCI: Enabling bus mastering for device %s\n", pci_name(dev));
- cmd |= PCI_COMMAND_MASTER;
- pci_write_config_word(dev, PCI_COMMAND, cmd);
- }
-@@ -620,7 +620,7 @@ pci_generic_prep_mwi(struct pci_dev *dev
- return 0;
-
- printk(KERN_WARNING "PCI: cache line size of %d is not supported "
-- "by device %s\n", pci_cache_line_size << 2, dev->slot_name);
-+ "by device %s\n", pci_cache_line_size << 2, pci_name(dev));
-
- return -EINVAL;
- }
-@@ -653,7 +653,7 @@ pci_set_mwi(struct pci_dev *dev)
-
- pci_read_config_word(dev, PCI_COMMAND, &cmd);
- if (! (cmd & PCI_COMMAND_INVALIDATE)) {
-- DBG("PCI: Enabling Mem-Wr-Inval for device %s\n", dev->slot_name);
-+ DBG("PCI: Enabling Mem-Wr-Inval for device %s\n", pci_name(dev));
- cmd |= PCI_COMMAND_INVALIDATE;
- pci_write_config_word(dev, PCI_COMMAND, cmd);
- }
---- linux-2.6.0-test1/drivers/pci/pool.c 2003-06-14 12:18:34.000000000 -0700
-+++ 25/drivers/pci/pool.c 2003-07-19 17:03:50.000000000 -0700
-@@ -233,7 +233,7 @@ pci_pool_destroy (struct pci_pool *pool)
- struct pci_page, page_list);
- if (is_page_busy (pool->blocks_per_page, page->bitmap)) {
- printk (KERN_ERR "pci_pool_destroy %s/%s, %p busy\n",
-- pool->dev ? pool->dev->slot_name : NULL,
-+ pool->dev ? pci_name(pool->dev) : NULL,
- pool->name, page->vaddr);
- /* leak the still-in-use consistent memory */
- list_del (&page->page_list);
-@@ -359,7 +359,7 @@ pci_pool_free (struct pci_pool *pool, vo
-
- if ((page = pool_find_page (pool, dma)) == 0) {
- printk (KERN_ERR "pci_pool_free %s/%s, %p/%lx (bad dma)\n",
-- pool->dev ? pool->dev->slot_name : NULL,
-+ pool->dev ? pci_name(pool->dev) : NULL,
- pool->name, vaddr, (unsigned long) dma);
- return;
- }
-@@ -372,13 +372,13 @@ pci_pool_free (struct pci_pool *pool, vo
- #ifdef CONFIG_DEBUG_SLAB
- if (((dma - page->dma) + (void *)page->vaddr) != vaddr) {
- printk (KERN_ERR "pci_pool_free %s/%s, %p (bad vaddr)/%Lx\n",
-- pool->dev ? pool->dev->slot_name : NULL,
-+ pool->dev ? pci_name(pool->dev) : NULL,
- pool->name, vaddr, (unsigned long long) dma);
- return;
- }
- if (page->bitmap [map] & (1UL << block)) {
- printk (KERN_ERR "pci_pool_free %s/%s, dma %Lx already free\n",
-- pool->dev ? pool->dev->slot_name : NULL,
-+ pool->dev ? pci_name(pool->dev) : NULL,
- pool->name, (unsigned long long)dma);
- return;
- }
---- linux-2.6.0-test1/drivers/pci/probe.c 2003-07-10 18:50:31.000000000 -0700
-+++ 25/drivers/pci/probe.c 2003-07-19 17:04:50.000000000 -0700
-@@ -176,7 +176,7 @@ void __devinit pci_read_bridge_bases(str
- limit |= (io_limit_hi << 16);
- }
-
-- if (base && base <= limit) {
-+ if (base <= limit) {
- res->flags = (io_base_lo & PCI_IO_RANGE_TYPE_MASK) | IORESOURCE_IO;
- res->start = base;
- res->end = limit + 0xfff;
-@@ -187,7 +187,7 @@ void __devinit pci_read_bridge_bases(str
- pci_read_config_word(dev, PCI_MEMORY_LIMIT, &mem_limit_lo);
- base = (mem_base_lo & PCI_MEMORY_RANGE_MASK) << 16;
- limit = (mem_limit_lo & PCI_MEMORY_RANGE_MASK) << 16;
-- if (base && base <= limit) {
-+ if (base <= limit) {
- res->flags = (mem_base_lo & PCI_MEMORY_RANGE_TYPE_MASK) | IORESOURCE_MEM;
- res->start = base;
- res->end = limit + 0xfffff;
-@@ -213,7 +213,7 @@ void __devinit pci_read_bridge_bases(str
- }
- #endif
- }
-- if (base && base <= limit) {
-+ if (base <= limit) {
- res->flags = (mem_base_lo & PCI_MEMORY_RANGE_TYPE_MASK) | IORESOURCE_MEM | IORESOURCE_PREFETCH;
- res->start = base;
- res->end = limit + 0xfffff;
---- linux-2.6.0-test1/drivers/pci/quirks.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/pci/quirks.c 2003-07-19 17:03:50.000000000 -0700
-@@ -33,7 +33,7 @@ static void __devinit quirk_passive_rele
- while ((d = pci_find_device(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371SB_0, d))) {
- pci_read_config_byte(d, 0x82, &dlc);
- if (!(dlc & 1<<1)) {
-- printk(KERN_ERR "PCI: PIIX3: Enabling Passive Release on %s\n", d->slot_name);
-+ printk(KERN_ERR "PCI: PIIX3: Enabling Passive Release on %s\n", pci_name(d));
- dlc |= 1<<1;
- pci_write_config_byte(d, 0x82, dlc);
- }
-@@ -437,7 +437,7 @@ static void __devinit quirk_via_irqpic(s
-
- if (new_irq != irq) {
- printk(KERN_INFO "PCI: Via IRQ fixup for %s, from %d to %d\n",
-- dev->slot_name, irq, new_irq);
-+ pci_name(dev), irq, new_irq);
-
- udelay(15);
- pci_write_config_byte(dev, PCI_INTERRUPT_LINE, new_irq);
-@@ -598,7 +598,7 @@ static void __devinit quirk_ide_bases(st
- return;
-
- printk(KERN_INFO "PCI: Ignoring BAR%d-%d of IDE controller %s\n",
-- first_bar, last_bar, dev->slot_name);
-+ first_bar, last_bar, pci_name(dev));
- }
-
- /*
-@@ -856,7 +856,7 @@ static void pci_do_fixups(struct pci_dev
- (f->vendor == dev->vendor || f->vendor == (u16) PCI_ANY_ID) &&
- (f->device == dev->device || f->device == (u16) PCI_ANY_ID)) {
- #ifdef DEBUG
-- printk(KERN_INFO "PCI: Calling quirk %p for %s\n", f->hook, dev->slot_name);
-+ printk(KERN_INFO "PCI: Calling quirk %p for %s\n", f->hook, pci_name(dev));
- #endif
- f->hook(dev);
- }
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/pci/remove.c 2003-07-19 17:03:50.000000000 -0700
-@@ -0,0 +1,113 @@
-+#include <linux/pci.h>
-+#include <linux/module.h>
-+#include "pci.h"
-+
-+#undef DEBUG
-+
-+#ifdef DEBUG
-+#define DBG(x...) printk(x)
-+#else
-+#define DBG(x...)
-+#endif
-+
-+static void pci_free_resources(struct pci_dev *dev)
-+{
-+ int i;
-+
-+ for (i = 0; i < PCI_NUM_RESOURCES; i++) {
-+ struct resource *res = dev->resource + i;
-+ if (res->parent)
-+ release_resource(res);
-+ }
-+}
-+
-+static void pci_destroy_dev(struct pci_dev *dev)
-+{
-+ pci_proc_detach_device(dev);
-+ device_unregister(&dev->dev);
-+
-+ /* Remove the device from the device lists, and prevent any further
-+ * list accesses from this device */
-+ spin_lock(&pci_bus_lock);
-+ list_del(&dev->bus_list);
-+ list_del(&dev->global_list);
-+ dev->bus_list.next = dev->bus_list.prev = NULL;
-+ dev->global_list.next = dev->global_list.prev = NULL;
-+ spin_unlock(&pci_bus_lock);
-+
-+ pci_free_resources(dev);
-+ pci_dev_put(dev);
-+}
-+
-+/**
-+ * pci_remove_device_safe - remove an unused hotplug device
-+ * @dev: the device to remove
-+ *
-+ * Delete the device structure from the device lists and
-+ * notify userspace (/sbin/hotplug), but only if the device
-+ * in question is not being used by a driver.
-+ * Returns 0 on success.
-+ */
-+int pci_remove_device_safe(struct pci_dev *dev)
-+{
-+ if (pci_dev_driver(dev))
-+ return -EBUSY;
-+ pci_destroy_dev(dev);
-+ return 0;
-+}
-+EXPORT_SYMBOL(pci_remove_device_safe);
-+
-+/**
-+ * pci_remove_bus_device - remove a PCI device and any children
-+ * @dev: the device to remove
-+ *
-+ * Remove a PCI device from the device lists, informing the drivers
-+ * that the device has been removed. We also remove any subordinate
-+ * buses and children in a depth-first manner.
-+ *
-+ * For each device we remove, delete the device structure from the
-+ * device lists, remove the /proc entry, and notify userspace
-+ * (/sbin/hotplug).
-+ */
-+void pci_remove_bus_device(struct pci_dev *dev)
-+{
-+ if (dev->subordinate) {
-+ struct pci_bus *b = dev->subordinate;
-+
-+ pci_remove_behind_bridge(dev);
-+ pci_proc_detach_bus(b);
-+
-+ spin_lock(&pci_bus_lock);
-+ list_del(&b->node);
-+ spin_unlock(&pci_bus_lock);
-+
-+ kfree(b);
-+ dev->subordinate = NULL;
-+ }
-+
-+ pci_destroy_dev(dev);
-+}
-+
-+/**
-+ * pci_remove_behind_bridge - remove all devices behind a PCI bridge
-+ * @dev: PCI bridge device
-+ *
-+ * Remove all devices on the bus, except for the parent bridge.
-+ * This also removes any child buses, and any devices they may
-+ * contain in a depth-first manner.
-+ */
-+void pci_remove_behind_bridge(struct pci_dev *dev)
-+{
-+ struct list_head *l, *n;
-+
-+ if (dev->subordinate) {
-+ list_for_each_safe(l, n, &dev->subordinate->devices) {
-+ struct pci_dev *dev = pci_dev_b(l);
-+
-+ pci_remove_bus_device(dev);
-+ }
-+ }
-+}
-+
-+EXPORT_SYMBOL(pci_remove_bus_device);
-+EXPORT_SYMBOL(pci_remove_behind_bridge);
---- linux-2.6.0-test1/drivers/pci/setup-bus.c 2003-06-14 12:18:35.000000000 -0700
-+++ 25/drivers/pci/setup-bus.c 2003-07-19 17:03:50.000000000 -0700
-@@ -81,7 +81,7 @@ pci_setup_cardbus(struct pci_bus *bus)
- struct pci_bus_region region;
-
- printk("PCI: Bus %d, cardbus bridge: %s\n",
-- bus->number, bridge->slot_name);
-+ bus->number, pci_name(bridge));
-
- pcibios_resource_to_bus(bridge, ®ion, bus->resource[0]);
- if (bus->resource[0]->flags & IORESOURCE_IO) {
-@@ -344,7 +344,7 @@ pbus_size_mem(struct pci_bus *bus, unsig
- if (order > 11) {
- printk(KERN_WARNING "PCI: region %s/%d "
- "too large: %lx-%lx\n",
-- dev->slot_name, i, r->start, r->end);
-+ pci_name(dev), i, r->start, r->end);
- r->flags = 0;
- continue;
- }
-@@ -513,7 +513,7 @@ pci_bus_assign_resources(struct pci_bus
-
- default:
- printk(KERN_INFO "PCI: not setting up bridge %s "
-- "for bus %d\n", dev->slot_name, b->number);
-+ "for bus %d\n", pci_name(dev), b->number);
- break;
- }
- }
---- linux-2.6.0-test1/drivers/pci/setup-res.c 2003-06-14 12:18:32.000000000 -0700
-+++ 25/drivers/pci/setup-res.c 2003-07-19 17:03:50.000000000 -0700
-@@ -68,7 +68,7 @@ pci_update_resource(struct pci_dev *dev,
-
- if ((new ^ check) & mask) {
- printk(KERN_ERR "PCI: Error while updating region "
-- "%s/%d (%08x != %08x)\n", dev->slot_name, resno,
-+ "%s/%d (%08x != %08x)\n", pci_name(dev), resno,
- new, check);
- }
-
-@@ -80,7 +80,7 @@ pci_update_resource(struct pci_dev *dev,
- if (check != new) {
- printk(KERN_ERR "PCI: Error updating region "
- "%s/%d (high %08x != %08x)\n",
-- dev->slot_name, resno, new, check);
-+ pci_name(dev), resno, new, check);
- }
- }
- }
-@@ -101,7 +101,7 @@ pci_claim_resource(struct pci_dev *dev,
- printk(KERN_ERR "PCI: %s region %d of %s %s [%lx:%lx]\n",
- root ? "Address space collision on" :
- "No parent found for",
-- resource, dtype, dev->slot_name, res->start, res->end);
-+ resource, dtype, pci_name(dev), res->start, res->end);
- }
-
- return err;
-@@ -139,7 +139,7 @@ int pci_assign_resource(struct pci_dev *
-
- if (ret) {
- printk(KERN_ERR "PCI: Failed to allocate resource %d(%lx-%lx) for %s\n",
-- resno, res->start, res->end, dev->slot_name);
-+ resno, res->start, res->end, pci_name(dev));
- } else if (resno < PCI_BRIDGE_RESOURCES) {
- pci_update_resource(dev, res, resno);
- }
---- linux-2.6.0-test1/drivers/pcmcia/hd64465_ss.c 2003-06-14 12:18:23.000000000 -0700
-+++ 25/drivers/pcmcia/hd64465_ss.c 2003-07-19 17:03:50.000000000 -0700
-@@ -1,5 +1,5 @@
- /*
-- * $Id$
-+ * $Id: hd64465_ss.c,v 1.7 2003/07/06 14:42:50 lethal Exp $
- *
- * Device driver for the PCMCIA controller module of the
- * Hitachi HD64465 handheld companion chip.
-@@ -24,7 +24,6 @@
- *
- * by Greg Banks <gbanks@pocketpenguins.com>
- * (c) 2000 PocketPenguins Inc
-- *
- */
-
- #include <linux/types.h>
-@@ -37,28 +36,26 @@
- #include <linux/vmalloc.h>
- #include <asm/errno.h>
- #include <linux/irq.h>
--#include <linux/workqueue.h>
-+#include <linux/interrupt.h>
- #include <linux/device.h>
-
- #include <asm/io.h>
--#include <asm/hd64465.h>
-+#include <asm/hd64465/hd64465.h>
-+#include <asm/hd64465/io.h>
-
- #include <pcmcia/version.h>
- #include <pcmcia/cs_types.h>
- #include <pcmcia/cs.h>
-+#include <pcmcia/cistpl.h>
-+#include <pcmcia/ds.h>
- #include <pcmcia/ss.h>
- #include <pcmcia/bulkmem.h>
--#include <pcmcia/cistpl.h>
- #include "cs_internal.h"
-
- #define MODNAME "hd64465_ss"
-
- /* #define HD64465_DEBUG 1 */
-
--#ifndef HD64465_DEBUG
--#define HD64465_DEBUG 0
--#endif
--
- #if HD64465_DEBUG
- #define DPRINTK(args...) printk(MODNAME ": " args)
- #else
-@@ -66,7 +63,8 @@
- #endif
-
- extern int hd64465_io_debug;
--
-+extern void * p3_ioremap(unsigned long phys_addr, unsigned long size, unsigned long flags);
-+extern void p3_iounmap(void *addr);
-
- /*============================================================*/
-
-@@ -74,37 +72,22 @@ extern int hd64465_io_debug;
-
- typedef struct hs_socket_t
- {
-+ unsigned int number;
- u_int irq;
- u_long mem_base;
-+ void *io_base;
- u_long mem_length;
-- void (*handler)(void *info, u_int events);
-- void *handler_info;
-- u_int pending_events;
- u_int ctrl_base;
- socket_state_t state;
- pccard_io_map io_maps[MAX_IO_WIN];
- pccard_mem_map mem_maps[MAX_WIN];
-- struct vm_struct *io_vma; /* allocated kernel vm for mapping IO space */
-+ struct pcmcia_socket socket;
- } hs_socket_t;
-
--#define HS_MAX_SOCKETS 2
--static hs_socket_t hs_sockets[HS_MAX_SOCKETS];
--static spinlock_t hs_pending_event_lock = SPIN_LOCK_UNLOCKED;
-
--/* Calculate socket number from ptr into hs_sockets[] */
--#define hs_sockno(sp) (sp - hs_sockets)
-
--static socket_cap_t hs_socket_cap =
--{
-- SS_CAP_PCCARD /* support 16 bit cards */
-- |SS_CAP_STATIC_MAP /* mappings are fixed in host memory */
-- ,
-- 0xffde/*0xffff*/, /* IRQs mapped in s/w so can do any, really */
-- HD64465_PCC_WINDOW, /* 16MB fixed window size */
-- 0, /* no PCI support */
-- 0, /* no CardBus support */
-- 0 /* no bus operations needed */
--};
-+#define HS_MAX_SOCKETS 2
-+static hs_socket_t hs_sockets[HS_MAX_SOCKETS];
-
- #define hs_in(sp, r) inb((sp)->ctrl_base + (r))
- #define hs_out(sp, v, r) outb(v, (sp)->ctrl_base + (r))
-@@ -179,7 +162,7 @@ static void hs_socket_enable_ireq(hs_soc
- {
- unsigned short cscier;
-
-- DPRINTK("hs_socket_enable_ireq(sock=%d)\n", hs_sockno(sp));
-+ DPRINTK("hs_socket_enable_ireq(sock=%d)\n", sp->number);
-
- cscier = hs_in(sp, CSCIER);
- cscier &= ~HD64465_PCCCSCIER_PIREQE_MASK;
-@@ -191,7 +174,7 @@ static void hs_socket_disable_ireq(hs_so
- {
- unsigned short cscier;
-
-- DPRINTK("hs_socket_disable_ireq(sock=%d)\n", hs_sockno(sp));
-+ DPRINTK("hs_socket_disable_ireq(sock=%d)\n", sp->number);
-
- cscier = hs_in(sp, CSCIER);
- cscier &= ~HD64465_PCCCSCIER_PIREQE_MASK;
-@@ -255,7 +238,7 @@ static struct hw_interrupt_type hd64465_
- */
- static void hs_map_irq(hs_socket_t *sp, unsigned int irq)
- {
-- DPRINTK("hs_map_irq(sock=%d irq=%d)\n", hs_sockno(sp), irq);
-+ DPRINTK("hs_map_irq(sock=%d irq=%d)\n", sp->number, irq);
-
- if (irq >= HS_NUM_MAPPED_IRQS)
- return;
-@@ -272,7 +255,7 @@ static void hs_map_irq(hs_socket_t *sp,
- */
- static void hs_unmap_irq(hs_socket_t *sp, unsigned int irq)
- {
-- DPRINTK("hs_unmap_irq(sock=%d irq=%d)\n", hs_sockno(sp), irq);
-+ DPRINTK("hs_unmap_irq(sock=%d irq=%d)\n", sp->number, irq);
-
- if (irq >= HS_NUM_MAPPED_IRQS)
- return;
-@@ -301,7 +284,7 @@ static int hs_set_voltages(hs_socket_t *
- {
- u_int psr;
- u_int vcci = 0;
-- u_int sock = hs_sockno(sp);
-+ u_int sock = sp->number;
-
- DPRINTK("hs_set_voltage(%d, %d, %d)\n", sock, Vcc, Vpp);
-
-@@ -359,13 +342,12 @@ static void hs_reset_socket(hs_socket_t
-
- /*============================================================*/
-
--static int hs_init(unsigned int sock)
-+static int hs_init(struct pcmcia_socket *s)
- {
-- hs_socket_t *sp = &hs_sockets[sock];
-+ hs_socket_t *sp = container_of(s, struct hs_socket_t, socket);
-
-- DPRINTK("hs_init(%d)\n", sock);
-+ DPRINTK("hs_init(%d)\n", sp->number);
-
-- sp->pending_events = 0;
- sp->state.Vcc = 0;
- sp->state.Vpp = 0;
- hs_set_voltages(sp, 0, 0);
-@@ -375,9 +357,12 @@ static int hs_init(unsigned int sock)
-
- /*============================================================*/
-
--static int hs_suspend(unsigned int sock)
-+static int hs_suspend(struct pcmcia_socket *s)
- {
-- DPRINTK("hs_suspend(%d)\n", sock);
-+#ifdef HD64465_DEBUG
-+ hs_socket_t *sp = container_of(s, struct hs_socket_t, socket);
-+ DPRINTK("hs_suspend(%d)\n", sp->number);
-+#endif
-
- /* TODO */
-
-@@ -386,32 +371,10 @@ static int hs_suspend(unsigned int sock)
-
- /*============================================================*/
-
--static int hs_register_callback(unsigned int sock,
-- void (*handler)(void *, unsigned int), void * info)
--{
-- hs_socket_t *sp = &hs_sockets[sock];
--
-- DPRINTK("hs_register_callback(%d)\n", sock);
-- sp->handler = handler;
-- sp->handler_info = info;
-- return 0;
--}
--
--/*============================================================*/
-
--static int hs_inquire_socket(unsigned int sock, socket_cap_t *cap)
-+static int hs_get_status(struct pcmcia_socket *s, u_int *value)
- {
-- DPRINTK("hs_inquire_socket(%d)\n", sock);
--
-- *cap = hs_socket_cap;
-- return 0;
--}
--
--/*============================================================*/
--
--static int hs_get_status(unsigned int sock, u_int *value)
--{
-- hs_socket_t *sp = &hs_sockets[sock];
-+ hs_socket_t *sp = container_of(s, struct hs_socket_t, socket);
- unsigned int isr;
- u_int status = 0;
-
-@@ -473,9 +436,9 @@ static int hs_get_status(unsigned int so
-
- /*============================================================*/
-
--static int hs_get_socket(unsigned int sock, socket_state_t *state)
-+static int hs_get_socket(struct pcmcia_socket *s, socket_state_t *state)
- {
-- hs_socket_t *sp = &hs_sockets[sock];
-+ hs_socket_t *sp = container_of(s, struct hs_socket_t, socket);
-
- DPRINTK("hs_get_socket(%d)\n", sock);
-
-@@ -485,9 +448,9 @@ static int hs_get_socket(unsigned int so
-
- /*============================================================*/
-
--static int hs_set_socket(unsigned int sock, socket_state_t *state)
-+static int hs_set_socket(struct pcmcia_socket *s, socket_state_t *state)
- {
-- hs_socket_t *sp = &hs_sockets[sock];
-+ hs_socket_t *sp = container_of(s, struct hs_socket_t, socket);
- u_long flags;
- u_int changed;
- unsigned short cscier;
-@@ -495,12 +458,12 @@ static int hs_set_socket(unsigned int so
- DPRINTK("hs_set_socket(sock=%d, flags=%x, csc_mask=%x, Vcc=%d, Vpp=%d, io_irq=%d)\n",
- sock, state->flags, state->csc_mask, state->Vcc, state->Vpp, state->io_irq);
-
-- save_and_cli(flags); /* Don't want interrupts happening here */
-+ local_irq_save(flags); /* Don't want interrupts happening here */
-
- if (state->Vpp != sp->state.Vpp ||
- state->Vcc != sp->state.Vcc) {
- if (!hs_set_voltages(sp, state->Vcc, state->Vpp)) {
-- restore_flags(flags);
-+ local_irq_restore(flags);
- return -EINVAL;
- }
- }
-@@ -588,7 +551,7 @@ static int hs_set_socket(unsigned int so
- /* hd64465_io_debug = 0; */
- sp->state = *state;
-
-- restore_flags(flags);
-+ local_irq_restore(flags);
-
- #if HD64465_DEBUG > 10
- if (state->flags & SS_OUTPUT_ENA)
-@@ -599,10 +562,11 @@ static int hs_set_socket(unsigned int so
-
- /*============================================================*/
-
--static int hs_set_io_map(unsigned int sock, struct pccard_io_map *io)
-+static int hs_set_io_map(struct pcmcia_socket *s, struct pccard_io_map *io)
- {
-- hs_socket_t *sp = &hs_sockets[sock];
-+ hs_socket_t *sp = container_of(s, struct hs_socket_t, socket);
- int map = io->map;
-+ int sock = sp->number;
- struct pccard_io_map *sio;
- pgprot_t prot;
-
-@@ -639,10 +603,9 @@ static int hs_set_io_map(unsigned int so
- printk(KERN_INFO MODNAME ": MAP_0WS unimplemented\n");
-
- if (io->flags & MAP_ACTIVE) {
-- unsigned long pstart, psize, paddrbase, vaddrbase;
-+ unsigned long pstart, psize, paddrbase;
-
- paddrbase = virt_to_phys((void*)(sp->mem_base + 2 * HD64465_PCC_WINDOW));
-- vaddrbase = (unsigned long)sp->io_vma->addr;
- pstart = io->start & PAGE_MASK;
- psize = ((io->stop + PAGE_SIZE) & PAGE_MASK) - pstart;
-
-@@ -653,26 +616,17 @@ static int hs_set_io_map(unsigned int so
- * page will be mapped. But the code allows for weird cards
- * that might want IO ports > 4K.
- */
-- DPRINTK("remap_page_range(vaddr=0x%08lx, paddr=0x%08lx, size=0x%08lxx)\n",
-- vaddrbase + pstart, paddrbase + pstart, psize);
--#error This does not work. Firstly remap_page_range() uses current->mm for
--#error the address space, which is wrong for kernel mappings. remap_page_range
--#error also does flush_{cache,tlb}_range() which ONLY works for user mappings.
--#error Next, remap_page_range() now wants to take a vm_area_struct arg.
-- remap_page_range(vaddrbase + pstart, paddrbase + pstart, psize, prot);
-+ sp->io_base = p3_ioremap(paddrbase + pstart, psize, pgprot_val(prot));
-
- /*
- * Change the mapping used by inb() outb() etc
- */
-- hd64465_port_map(
-- io->start,
-+ hd64465_port_map(io->start,
- io->stop - io->start + 1,
-- vaddrbase + io->start,0);
-+ (unsigned long)sp->io_base + io->start, 0);
- } else {
-- hd64465_port_unmap(
-- sio->start,
-- sio->stop - sio->start + 1);
-- /* TODO: remap_page_range() to mark pages not present ? */
-+ hd64465_port_unmap(sio->start, sio->stop - sio->start + 1);
-+ p3_iounmap(sp->io_base);
- }
-
- *sio = *io;
-@@ -681,9 +635,9 @@ static int hs_set_io_map(unsigned int so
-
- /*============================================================*/
-
--static int hs_set_mem_map(unsigned int sock, struct pccard_mem_map *mem)
-+static int hs_set_mem_map(struct pcmcia_socket *s, struct pccard_mem_map *mem)
- {
-- hs_socket_t *sp = &hs_sockets[sock];
-+ hs_socket_t *sp = container_of(s, struct hs_socket_t, socket);
- struct pccard_mem_map *smem;
- int map = mem->map;
- unsigned long paddr, size;
-@@ -722,13 +676,6 @@ static int hs_set_mem_map(unsigned int s
-
- /*============================================================*/
-
--static void hs_proc_setup(unsigned int sock, struct proc_dir_entry *base)
--{
-- DPRINTK("hs_proc_setup(%d)\n", sock);
--}
--
--/*============================================================*/
--
- /*
- * This function is registered with the HD64465 glue code to do a
- * secondary demux step on the PCMCIA interrupts. It handles
-@@ -756,35 +703,9 @@ static int hs_irq_demux(int irq, void *d
-
- /*
- * Interrupt handling routine.
-- *
-- * This uses the schedule_work() technique to cause reportable events
-- * such as card insertion and removal to be handled in keventd's
-- * process context.
- */
-
--
--static void hs_events_bh(void *dummy)
--{
-- hs_socket_t *sp;
-- u_int events;
-- int i;
--
-- for (i=0; i<HS_MAX_SOCKETS; i++) {
-- sp = &hs_sockets[i];
--
-- spin_lock_irq(&hs_pending_event_lock);
-- events = sp->pending_events;
-- sp->pending_events = 0;
-- spin_unlock_irq(&hs_pending_event_lock);
--
-- if (sp->handler)
-- sp->handler(sp->handler_info, events);
-- }
--}
--
--static DECLARE_WORK(hs_events_task, hs_events_bh, NULL);
--
--static void hs_interrupt(int irq, void *dev, struct pt_regs *regs)
-+static irqreturn_t hs_interrupt(int irq, void *dev, struct pt_regs *regs)
- {
- hs_socket_t *sp = (hs_socket_t *)dev;
- u_int events = 0;
-@@ -801,7 +722,7 @@ static void hs_interrupt(int irq, void *
- if ((hs_in(sp, ISR) & HD64465_PCCISR_PCD_MASK) != 0) {
- printk(KERN_NOTICE MODNAME
- ": socket %d, card not a supported card type or not inserted correctly\n",
-- hs_sockno(sp));
-+ sp->number);
- /* Don't do the rest unless a card is present */
- cscr &= ~(HD64465_PCCCSCR_PCDC|
- HD64465_PCCCSCR_PRC|
-@@ -839,34 +760,22 @@ static void hs_interrupt(int irq, void *
-
- hs_out(sp, cscr, CSCR);
-
-- if (events) {
-- /*
-- * Arrange for events to be reported to the registered
-- * event handler function (from CardServices) in a process
-- * context (keventd) "soon".
-- */
-- spin_lock(&hs_pending_event_lock);
-- sp->pending_events |= events;
-- spin_unlock(&hs_pending_event_lock);
--
-- schedule_work(&hs_events_task);
-- }
-+ if (events)
-+ pcmcia_parse_events(&sp->socket, events);
-+
-+ return IRQ_HANDLED;
- }
-
- /*============================================================*/
-
- static struct pccard_operations hs_operations = {
-- .owner = THIS_MODULE,
- .init = hs_init,
- .suspend = hs_suspend,
-- .register_callback = hs_register_callback,
-- .inquire_socket = hs_inquire_socket,
- .get_status = hs_get_status,
- .get_socket = hs_get_socket,
- .set_socket = hs_set_socket,
- .set_io_map = hs_set_io_map,
- .set_mem_map = hs_set_mem_map,
-- .proc_setup = hs_proc_setup,
- };
-
- static int hs_init_socket(hs_socket_t *sp, int irq, unsigned long mem_base,
-@@ -886,9 +795,6 @@ static int hs_init_socket(hs_socket_t *s
- for (i=0 ; i<MAX_WIN ; i++)
- sp->mem_maps[i].map = i;
-
-- if ((sp->io_vma = get_vm_area(HS_IO_MAP_SIZE, VM_IOREMAP)) == 0)
-- return -ENOMEM;
--
- hd64465_register_irq_demux(sp->irq, hs_irq_demux, sp);
-
- if ((err = request_irq(sp->irq, hs_interrupt, SA_INTERRUPT, MODNAME, sp)) < 0)
-@@ -925,9 +831,8 @@ static int hs_init_socket(hs_socket_t *s
-
- hs_reset_socket(sp, 1);
-
-- printk(KERN_INFO "HD64465 PCMCIA bridge socket %d at 0x%08lx irq %d io window %ldK@0x%08lx\n",
-- i, sp->mem_base, sp->irq,
-- sp->io_vma->size>>10, (unsigned long)sp->io_vma->addr);
-+ printk(KERN_INFO "HD64465 PCMCIA bridge socket %d at 0x%08lx irq %d\n",
-+ i, sp->mem_base, sp->irq);
-
- return 0;
- }
-@@ -935,7 +840,10 @@ static int hs_init_socket(hs_socket_t *s
- static void hs_exit_socket(hs_socket_t *sp)
- {
- unsigned short cscier, gcr;
-+ unsigned long flags;
-
-+ local_irq_save(flags);
-+
- /* turn off interrupts in hardware */
- cscier = hs_in(sp, CSCIER);
- cscier = (cscier & IER_MASK) | IER_OFF;
-@@ -955,19 +863,13 @@ static void hs_exit_socket(hs_socket_t *
- free_irq(sp->irq, hs_interrupt);
- hd64465_unregister_irq_demux(sp->irq);
- }
-- if (sp->io_vma != 0)
-- vfree(sp->io_vma->addr);
--}
-
--static struct pcmcia_socket_class_data hd64465_data = {
-- .nsock = HS_MAX_SOCKETS,
-- .ops = &hs_operations,
--};
-+ local_irq_restore(flags);
-+}
-
- static struct device_driver hd64465_driver = {
- .name = "hd64465-pcmcia",
- .bus = &platform_bus_type,
-- .devclass = &pcmcia_socket_class,
- .suspend = pcmcia_socket_dev_suspend,
- .resume = pcmcia_socket_dev_resume,
- };
-@@ -996,7 +898,8 @@ static int __init init_hs(void)
- }
-
- /* hd64465_io_debug = 1; */
-- register_driver(&hd64465_driver);
-+ if (driver_register(&hd64465_driver))
-+ return -EINVAL;
-
- /* Wake both sockets out of STANDBY mode */
- /* TODO: wait 15ms */
-@@ -1014,14 +917,22 @@ static int __init init_hs(void)
- v |= HD64465_PCCCSCR_PSWSEL;
- outb(v, HD64465_REG_PCC0CSCR);
-
-- hs_set_voltages(&hs_sockets[0], 0, 0);
-- hs_set_voltages(&hs_sockets[1], 0, 0);
--
- /*
- * Setup hs_sockets[] structures and request system resources.
- * TODO: on memory allocation failure, power down the socket
- * before quitting.
- */
-+ for (i=0; i<HS_MAX_SOCKETS; i++) {
-+ hs_set_voltages(&hs_sockets[i], 0, 0);
-+
-+ hs_sockets[i].socket.features |= SS_CAP_PCCARD | SS_CAP_STATIC_MAP; /* mappings are fixed in host memory */
-+ hs_sockets[i].socket.irq_mask = 0xffde;/*0xffff*/ /* IRQs mapped in s/w so can do any, really */
-+ hs_sockets[i].socket.map_size = HD64465_PCC_WINDOW; /* 16MB fixed window size */
-+
-+ hs_sockets[i].socket.owner = THIS_MODULE;
-+ hs_sockets[i].socket.ss_entry = &hs_operations;
-+ }
-+
- i = hs_init_socket(&hs_sockets[0],
- HD64465_IRQ_PCMCIA0,
- HD64465_PCC0_BASE,
-@@ -1040,27 +951,31 @@ static int __init init_hs(void)
- }
-
- /* hd64465_io_debug = 0; */
-- hd64465_device.dev.class_data = &hd64465_data;
-+
- platform_device_register(&hd64465_device);
-
-- return 0;
-+ for (i=0; i<HS_MAX_SOCKETS; i++) {
-+ unsigned int ret;
-+ hs_sockets[i].socket.dev.dev = &hd64465_device.dev;
-+ hs_sockets[i].number = i;
-+ ret = pcmcia_register_socket(&hs_sockets[i].socket);
-+ if (ret && i)
-+ pcmcia_unregister_socket(&hs_sockets[0].socket);
-+ }
-+
-+ return 0;
- }
-
- static void __exit exit_hs(void)
- {
-- u_long flags;
- int i;
--
-- save_and_cli(flags);
-
-- /*
-- * Release kernel resources
-- */
-- for (i=0 ; i<HS_MAX_SOCKETS ; i++)
-- hs_exit_socket(&hs_sockets[i]);
-+ for (i=0 ; i<HS_MAX_SOCKETS ; i++) {
-+ pcmcia_unregister_socket(&hs_sockets[i].socket);
-+ hs_exit_socket(&hs_sockets[i]);
-+ }
-+
- platform_device_unregister(&hd64465_device);
--
-- restore_flags(flags);
- unregister_driver(&hd64465_driver);
- }
-
---- linux-2.6.0-test1/drivers/pcmcia/ricoh.h 2003-07-13 21:44:34.000000000 -0700
-+++ 25/drivers/pcmcia/ricoh.h 2003-07-19 17:03:50.000000000 -0700
-@@ -116,6 +116,8 @@
- #define RL5C4XX_CMD_SHIFT 4
- #define RL5C4XX_HOLD_MASK 0x1c00
- #define RL5C4XX_HOLD_SHIFT 10
-+#define RL5C4XX_MISC_CONTROL 0x2F /* 8 bit */
-+#define RL5C4XX_ZV_ENABLE 0x08
-
- #ifdef __YENTA_H
-
-@@ -125,10 +127,41 @@
- #define rl_mem(socket) ((socket)->private[3])
- #define rl_config(socket) ((socket)->private[4])
-
-+static void ricoh_zoom_video(struct pcmcia_socket *sock, int onoff)
-+{
-+ u8 reg;
-+ struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
-+
-+ reg = config_readb(socket, RL5C4XX_MISC_CONTROL);
-+ if (onoff)
-+ /* Zoom zoom, we will all go together, zoom zoom, zoom zoom */
-+ reg |= RL5C4XX_ZV_ENABLE;
-+ else
-+ reg &= ~RL5C4XX_ZV_ENABLE;
-+
-+ config_writeb(socket, RL5C4XX_MISC_CONTROL, reg);
-+}
-+
-+static void ricoh_set_zv(struct pcmcia_socket *sock)
-+{
-+ struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
-+ if(socket->dev->vendor == PCI_VENDOR_ID_RICOH)
-+ {
-+ switch(socket->dev->device)
-+ {
-+ /* There may be more .. */
-+ case PCI_DEVICE_ID_RICOH_RL5C478:
-+ sock->zoom_video = ricoh_zoom_video;
-+ break;
-+ }
-+ }
-+}
-+
- static int ricoh_init(struct pcmcia_socket *sock)
- {
- struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
- yenta_init(sock);
-+ ricoh_set_zv(sock);
-
- config_writew(socket, RL5C4XX_MISC, rl_misc(socket));
- config_writew(socket, RL5C4XX_16BIT_CTL, rl_ctl(socket));
---- linux-2.6.0-test1/drivers/pcmcia/ti113x.h 2003-07-13 21:44:34.000000000 -0700
-+++ 25/drivers/pcmcia/ti113x.h 2003-07-19 17:03:50.000000000 -0700
-@@ -148,14 +148,96 @@ static int ti_intctl(struct yenta_socket
- return 0;
- }
-
-+/*
-+ * Zoom video control for TI122x/113x chips
-+ */
-+
-+static void ti_zoom_video(struct pcmcia_socket *sock, int onoff)
-+{
-+ u8 reg;
-+ struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
-+
-+ /* If we don't have a Zoom Video switch this is harmless,
-+ we just tristate the unused (ZV) lines */
-+ reg = config_readb(socket, TI113X_CARD_CONTROL);
-+ if (onoff)
-+ /* Zoom zoom, we will all go together, zoom zoom, zoom zoom */
-+ reg |= TI113X_CCR_ZVENABLE;
-+ else
-+ reg &= ~TI113X_CCR_ZVENABLE;
-+ config_writeb(socket, TI113X_CARD_CONTROL, reg);
-+}
-+
-+/*
-+ * The 145x series can also use this. They have an additional
-+ * ZV autodetect mode we don't use but don't actually need.
-+ * FIXME: manual says its in func0 and func1 but disagrees with
-+ * itself about this - do we need to force func0, if so we need
-+ * to know a lot more about socket pairings in pcmcia_socket than
-+ * we do now.. uggh.
-+ */
-+
-+static void ti1250_zoom_video(struct pcmcia_socket *sock, int onoff)
-+{
-+ struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
-+ int shift = 0;
-+ u8 reg;
-+
-+ ti_zoom_video(sock, onoff);
-+
-+ reg = config_readb(socket, 0x84);
-+ reg |= (1<<7); /* ZV bus enable */
-+
-+ if(PCI_FUNC(socket->dev->devfn)==1)
-+ shift = 1;
-+
-+ if(onoff)
-+ {
-+ reg &= ~(1<<6); /* Clear select bit */
-+ reg |= shift<<6; /* Favour our socket */
-+ reg |= 1<<shift; /* Socket zoom video on */
-+ }
-+ else
-+ {
-+ reg &= ~(1<<6); /* Clear select bit */
-+ reg |= (1^shift)<<6; /* Favour other socket */
-+ reg &= ~(1<<shift); /* Socket zoon video off */
-+ }
-+
-+ config_writeb(socket, 0x84, reg);
-+}
-+
-+static void ti_set_zv(struct pcmcia_socket *sock)
-+{
-+ struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
-+ if(socket->dev->vendor == PCI_VENDOR_ID_TI)
-+ {
-+ switch(socket->dev->device)
-+ {
-+ /* There may be more .. */
-+ case PCI_DEVICE_ID_TI_1220:
-+ case PCI_DEVICE_ID_TI_1221:
-+ case PCI_DEVICE_ID_TI_1225:
-+ sock->zoom_video = ti_zoom_video;
-+ break;
-+ case PCI_DEVICE_ID_TI_1250:
-+ case PCI_DEVICE_ID_TI_1251A:
-+ case PCI_DEVICE_ID_TI_1251B:
-+ case PCI_DEVICE_ID_TI_1450:
-+ sock->zoom_video = ti1250_zoom_video;
-+ }
-+ }
-+}
- static int ti_init(struct pcmcia_socket *sock)
- {
- struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
- yenta_init(sock);
-+ ti_set_zv(sock);
- ti_intctl(socket);
- return 0;
- }
-
-+
- /*
- * Generic TI init - TI has an extension for the
- * INTCTL register that sets the PCI CSC interrupt.
-@@ -176,9 +258,6 @@ static int ti_override(struct yenta_sock
- if (new != reg)
- exca_writeb(socket, I365_INTCTL, new);
-
--#if 0
-- /* THIS CAUSES HANGS! Disabled for now, do not know why */
--
- /*
- * If ISA interrupts don't work, then fall back to routing card
- * interrupts to the PCI interrupt of the socket.
-@@ -190,7 +269,7 @@ static int ti_override(struct yenta_sock
- u8 irqmux, devctl;
-
- devctl = config_readb(socket, TI113X_DEVICE_CONTROL);
-- if (devctl & TI113X_DCR_IMODE_MASK != TI12XX_DCR_IMODE_ALL_SERIAL) {
-+ if ((devctl & TI113X_DCR_IMODE_MASK) != TI12XX_DCR_IMODE_ALL_SERIAL) {
- printk (KERN_INFO "ti113x: Routing card interrupts to PCI\n");
-
- devctl &= ~TI113X_DCR_IMODE_MASK;
-@@ -203,7 +282,6 @@ static int ti_override(struct yenta_sock
- config_writeb(socket, TI113X_DEVICE_CONTROL, devctl);
- }
- }
--#endif
-
- socket->socket.ops->init = ti_init;
- return 0;
-@@ -220,6 +298,7 @@ static int ti113x_init(struct pcmcia_soc
- {
- struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
- yenta_init(sock);
-+ ti_set_zv(sock);
-
- config_writel(socket, TI113X_SYSTEM_CONTROL, ti_sysctl(socket));
- config_writeb(socket, TI113X_CARD_CONTROL, ti_cardctl(socket));
-@@ -248,6 +327,7 @@ static int ti1250_init(struct pcmcia_soc
- struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
- yenta_init(sock);
- ti113x_init(sock);
-+ ti_set_zv(sock);
- ti_irqmux(socket) = config_readl(socket, TI122X_IRQMUX);
- ti_irqmux(socket) = (ti_irqmux(socket) & ~0x0f) | 0x02; /* route INTA */
- if (!(ti_sysctl(socket) & TI122X_SCR_INTRTIE))
---- linux-2.6.0-test1/drivers/pcmcia/yenta_socket.c 2003-07-13 21:44:34.000000000 -0700
-+++ 25/drivers/pcmcia/yenta_socket.c 2003-07-19 17:03:50.000000000 -0700
-@@ -297,6 +297,8 @@ static int yenta_set_socket(struct pcmci
- }
- exca_writeb(socket, I365_CSCINT, reg);
- exca_readb(socket, I365_CSC);
-+ if(sock->zoom_video)
-+ sock->zoom_video(sock, state->flags & SS_ZVCARD);
- }
- config_writew(socket, CB_BRIDGE_CONTROL, bridge);
- /* Socket event mask: get card insert/remove events.. */
---- linux-2.6.0-test1/drivers/pnp/isapnp/core.c 2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/pnp/isapnp/core.c 2003-07-19 17:03:50.000000000 -0700
-@@ -255,14 +255,22 @@ static void __init isapnp_peek(unsigned
- static int isapnp_next_rdp(void)
- {
- int rdp = isapnp_rdp;
-+ static int old_rdp = 0;
-+
-+ if(old_rdp)
-+ {
-+ release_region(old_rdp, 1);
-+ old_rdp = 0;
-+ }
- while (rdp <= 0x3ff) {
- /*
- * We cannot use NE2000 probe spaces for ISAPnP or we
- * will lock up machines.
- */
-- if ((rdp < 0x280 || rdp > 0x380) && !check_region(rdp, 1))
-+ if ((rdp < 0x280 || rdp > 0x380) && request_region(rdp, 1, "ISAPnP"))
- {
- isapnp_rdp = rdp;
-+ old_rdp = rdp;
- return 0;
- }
- rdp += RDP_STEP;
---- linux-2.6.0-test1/drivers/s390/block/dasd.c 2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/s390/block/dasd.c 2003-07-19 17:03:50.000000000 -0700
-@@ -16,7 +16,6 @@
- #include <linux/interrupt.h>
- #include <linux/ctype.h>
- #include <linux/major.h>
--#include <linux/blk.h>
- #include <linux/slab.h>
- #include <linux/buffer_head.h>
-
---- linux-2.6.0-test1/drivers/s390/block/dasd_genhd.c 2003-06-14 12:18:29.000000000 -0700
-+++ 25/drivers/s390/block/dasd_genhd.c 2003-07-19 17:03:50.000000000 -0700
-@@ -9,7 +9,7 @@
- *
- * Dealing with devices registered to multiple major numbers.
- *
-- * $Revision: 1.29 $
-+ * $Revision: 1.31 $
- */
-
- #include <linux/config.h>
-@@ -17,7 +17,6 @@
- #include <linux/interrupt.h>
- #include <linux/fs.h>
- #include <linux/blkpg.h>
--#include <linux/blk.h>
-
- #include <asm/uaccess.h>
-
-@@ -200,7 +199,6 @@ void
- dasd_destroy_partitions(struct dasd_device * device)
- {
- del_gendisk(device->gdp);
-- put_disk(device->gdp);
- }
-
- int
---- linux-2.6.0-test1/drivers/s390/block/dasd_int.h 2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/s390/block/dasd_int.h 2003-07-19 17:06:39.000000000 -0700
-@@ -14,7 +14,8 @@
-
- #ifdef __KERNEL__
-
--#define DASD_PER_MAJOR ( 1U<<(MINORBITS-DASD_PARTN_BITS))
-+#define DASD_MINORBITS 8
-+#define DASD_PER_MAJOR ( 1U<<(DASD_MINORBITS-DASD_PARTN_BITS))
- #define DASD_PARTN_MASK ((1 << DASD_PARTN_BITS) - 1)
-
- /*
---- linux-2.6.0-test1/drivers/s390/block/dasd_ioctl.c 2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/s390/block/dasd_ioctl.c 2003-07-19 17:03:50.000000000 -0700
-@@ -14,7 +14,6 @@
- #include <linux/major.h>
- #include <linux/fs.h>
- #include <linux/blkpg.h>
--#include <linux/blk.h>
-
- #include <asm/ccwdev.h>
- #include <asm/uaccess.h>
---- linux-2.6.0-test1/drivers/s390/block/xpram.c 2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/s390/block/xpram.c 2003-07-19 17:03:50.000000000 -0700
-@@ -31,7 +31,6 @@
- #include <linux/errno.h>
- #include <linux/init.h>
- #include <linux/slab.h>
--#include <linux/blk.h>
- #include <linux/blkpg.h>
- #include <linux/hdreg.h> /* HDIO_GETGEO */
- #include <linux/sysdev.h>
---- linux-2.6.0-test1/drivers/s390/char/sclp.c 2003-06-14 12:18:24.000000000 -0700
-+++ 25/drivers/s390/char/sclp.c 2003-07-19 17:04:07.000000000 -0700
-@@ -468,17 +468,17 @@ static struct sclp_register sclp_state_c
- * SCLP quiesce event handler
- */
- #ifdef CONFIG_SMP
--static volatile unsigned long cpu_quiesce_map;
-+static cpumask_t cpu_quiesce_map;
-
- static void
- do_load_quiesce_psw(void * __unused)
- {
- psw_t quiesce_psw;
-
-- clear_bit(smp_processor_id(), &cpu_quiesce_map);
-+ cpu_clear(smp_processor_id(), cpu_quiesce_map);
- if (smp_processor_id() == 0) {
- /* Wait for all other cpus to enter do_load_quiesce_psw */
-- while (cpu_quiesce_map != 0);
-+ while (!cpus_empty(cpu_quiesce_map));
- /* Quiesce the last cpu with the special psw */
- quiesce_psw.mask = PSW_BASE_BITS | PSW_MASK_WAIT;
- quiesce_psw.addr = 0xfff;
---- linux-2.6.0-test1/drivers/s390/char/tape_block.c 2003-06-14 12:18:29.000000000 -0700
-+++ 25/drivers/s390/char/tape_block.c 2003-07-19 17:03:50.000000000 -0700
-@@ -13,7 +13,6 @@
- #include <linux/version.h>
- #include <linux/module.h>
- #include <linux/blkdev.h>
--#include <linux/blk.h>
- #include <linux/interrupt.h>
- #include <linux/buffer_head.h>
-
---- linux-2.6.0-test1/drivers/s390/cio/chsc.c 2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/s390/cio/chsc.c 2003-07-19 17:03:50.000000000 -0700
-@@ -1,7 +1,7 @@
- /*
- * drivers/s390/cio/chsc.c
- * S/390 common I/O routines -- channel subsystem call
-- * $Revision: 1.73 $
-+ * $Revision: 1.74 $
- *
- * Copyright (C) 1999-2002 IBM Deutschland Entwicklung GmbH,
- * IBM Corporation
-@@ -206,6 +206,7 @@ chsc_get_sch_descriptions(void)
- if (!page)
- return -ENOMEM;
-
-+ err = 0;
- for (irq = 0; irq <= highest_subchannel; irq++) {
- /*
- * retrieve information for each sch
-@@ -222,13 +223,14 @@ chsc_get_sch_descriptions(void)
- "not work\n", err);
- cio_chsc_err_msg = 1;
- }
-- return err;
-+ goto out;
- }
- clear_page(page);
- }
- cio_chsc_desc_avail = 1;
-+out:
- free_page((unsigned long)page);
-- return 0;
-+ return err;
- }
-
- __initcall(chsc_get_sch_descriptions);
-@@ -428,7 +430,7 @@ s390_process_res_acc (u8 chpid, __u16 fl
- ret = css_probe_device(irq);
- if (ret == -ENXIO)
- /* We're through */
-- return;
-+ break;
- continue;
- }
-
---- linux-2.6.0-test1/drivers/s390/cio/cio.c 2003-06-14 12:18:48.000000000 -0700
-+++ 25/drivers/s390/cio/cio.c 2003-07-19 17:03:50.000000000 -0700
-@@ -1,7 +1,7 @@
- /*
- * drivers/s390/cio/cio.c
- * S/390 common I/O routines -- low level i/o calls
-- * $Revision: 1.98 $
-+ * $Revision: 1.100 $
- *
- * Copyright (C) 1999-2002 IBM Deutschland Entwicklung GmbH,
- * IBM Corporation
-@@ -16,10 +16,12 @@
- #include <linux/init.h>
- #include <linux/slab.h>
- #include <linux/device.h>
-+#include <linux/kernel_stat.h>
-
- #include <asm/hardirq.h>
- #include <asm/cio.h>
- #include <asm/delay.h>
-+#include <asm/irq.h>
-
- #include "airq.h"
- #include "cio.h"
-@@ -442,6 +444,11 @@ cio_enable_subchannel (struct subchannel
- if (sch->schib.pmcw.ena)
- break;
- }
-+ if (ret == -EBUSY) {
-+ struct irb irb;
-+ if (tsch(sch->irq, &irb) != 0)
-+ break;
-+ }
- }
- sprintf (dbf_txt, "ret:%d", ret);
- CIO_TRACE_EVENT (2, dbf_txt);
-@@ -608,6 +615,7 @@ do_IRQ (struct pt_regs regs)
- tpi_info = (struct tpi_info *) __LC_SUBCHANNEL_ID;
- irb = (struct irb *) __LC_IRB;
- do {
-+ kstat_cpu(smp_processor_id()).irqs[IO_INTERRUPT]++;
- /*
- * Non I/O-subchannel thin interrupts are processed differently
- */
---- linux-2.6.0-test1/drivers/s390/cio/device.c 2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/s390/cio/device.c 2003-07-19 17:03:50.000000000 -0700
-@@ -1,7 +1,7 @@
- /*
- * drivers/s390/cio/device.c
- * bus driver for ccw devices
-- * $Revision: 1.58 $
-+ * $Revision: 1.60 $
- *
- * Copyright (C) 2002 IBM Deutschland Entwicklung GmbH,
- * IBM Corporation
-@@ -434,6 +434,13 @@ ccw_device_register(struct ccw_device *c
- return ret;
- }
-
-+void
-+ccw_device_unregister(void *data)
-+{
-+ device_unregister((struct device *)data);
-+}
-+
-+
- static void
- ccw_device_release(struct device *dev)
- {
-@@ -513,17 +520,11 @@ io_subchannel_recog_done(struct ccw_devi
- wake_up(&ccw_device_init_wq);
- }
-
--static void
-+static int
- io_subchannel_recog(struct ccw_device *cdev, struct subchannel *sch)
- {
- int rc;
-
-- if (!get_device(&sch->dev)) {
-- if (cdev->dev.release)
-- cdev->dev.release(&cdev->dev);
-- return;
-- }
--
- sch->dev.driver_data = cdev;
- sch->driver = &io_subchannel_driver;
- cdev->ccwlock = &sch->lock;
-@@ -540,9 +541,6 @@ io_subchannel_recog(struct ccw_device *c
- snprintf (cdev->dev.bus_id, DEVICE_ID_SIZE, "0:%04x",
- sch->schib.pmcw.dev);
-
-- /* Do first half of device_register. */
-- device_initialize(&cdev->dev);
--
- /* Increase counter of devices currently in recognition. */
- atomic_inc(&ccw_device_init_count);
-
-@@ -551,13 +549,10 @@ io_subchannel_recog(struct ccw_device *c
- rc = ccw_device_recognition(cdev);
- spin_unlock_irq(cdev->ccwlock);
- if (rc) {
-- sch->dev.driver_data = 0;
-- put_device(&sch->dev);
-- if (cdev->dev.release)
-- cdev->dev.release(&cdev->dev);
- if (atomic_dec_and_test(&ccw_device_init_count))
- wake_up(&ccw_device_init_wq);
- }
-+ return rc;
- }
-
- static int
-@@ -565,6 +560,7 @@ io_subchannel_probe (struct device *pdev
- {
- struct subchannel *sch;
- struct ccw_device *cdev;
-+ int rc;
-
- sch = to_subchannel(pdev);
- if (sch->dev.driver_data) {
-@@ -573,8 +569,20 @@ io_subchannel_probe (struct device *pdev
- * Register it and exit. This happens for all early
- * device, e.g. the console.
- */
-- ccw_device_register(sch->dev.driver_data);
-+ cdev = sch->dev.driver_data;
-+ device_initialize(&cdev->dev);
-+ ccw_device_register(cdev);
- subchannel_add_files(&sch->dev);
-+ /*
-+ * Check if the device is already online. If it is
-+ * the reference count needs to be corrected
-+ * (see ccw_device_online and css_init_done for the
-+ * ugly details).
-+ */
-+ if (cdev->private->state != DEV_STATE_NOT_OPER &&
-+ cdev->private->state != DEV_STATE_OFFLINE &&
-+ cdev->private->state != DEV_STATE_BOXED)
-+ get_device(&cdev->dev);
- return 0;
- }
- cdev = kmalloc (sizeof(*cdev), GFP_KERNEL);
-@@ -592,7 +600,23 @@ io_subchannel_probe (struct device *pdev
- .parent = pdev,
- .release = ccw_device_release,
- };
-- io_subchannel_recog(cdev, to_subchannel(pdev));
-+ /* Do first half of device_register. */
-+ device_initialize(&cdev->dev);
-+
-+ if (!get_device(&sch->dev)) {
-+ if (cdev->dev.release)
-+ cdev->dev.release(&cdev->dev);
-+ return 0;
-+ }
-+
-+ rc = io_subchannel_recog(cdev, to_subchannel(pdev));
-+ if (rc) {
-+ sch->dev.driver_data = 0;
-+ put_device(&sch->dev);
-+ if (cdev->dev.release)
-+ cdev->dev.release(&cdev->dev);
-+ }
-+
- return 0;
- }
-
-@@ -604,6 +628,8 @@ static int console_cdev_in_use;
- static int
- ccw_device_console_enable (struct ccw_device *cdev, struct subchannel *sch)
- {
-+ int rc;
-+
- /* Initialize the ccw_device structure. */
- cdev->dev = (struct device) {
- .parent = &sch->dev,
-@@ -613,7 +639,11 @@ ccw_device_console_enable (struct ccw_de
- .parent = &css_bus_device,
- .bus = &css_bus_type,
- };
-- io_subchannel_recog(cdev, sch);
-+
-+ rc = io_subchannel_recog(cdev, sch);
-+ if (rc)
-+ return rc;
-+
- /* Now wait for the async. recognition to come to an end. */
- while (!dev_fsm_final_state(cdev))
- wait_cons_dev();
---- linux-2.6.0-test1/drivers/s390/cio/device_fsm.c 2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/s390/cio/device_fsm.c 2003-07-19 17:03:50.000000000 -0700
-@@ -188,7 +188,7 @@ ccw_device_done(struct ccw_device *cdev,
-
- wake_up(&cdev->private->wait_q);
-
-- if (state != DEV_STATE_ONLINE)
-+ if (css_init_done && state != DEV_STATE_ONLINE)
- put_device (&cdev->dev);
- }
-
-@@ -293,7 +293,7 @@ ccw_device_online(struct ccw_device *cde
- if (cdev->private->state != DEV_STATE_OFFLINE)
- return -EINVAL;
- sch = to_subchannel(cdev->dev.parent);
-- if (!get_device(&cdev->dev))
-+ if (css_init_done && !get_device(&cdev->dev))
- return -ENODEV;
- if (cio_enable_subchannel(sch, sch->schib.pmcw.isc) != 0) {
- /* Couldn't enable the subchannel for i/o. Sick device. */
-@@ -384,7 +384,9 @@ static void
- ccw_device_offline_notoper(struct ccw_device *cdev, enum dev_event dev_event)
- {
- cdev->private->state = DEV_STATE_NOT_OPER;
-- device_unregister(&cdev->dev);
-+ INIT_WORK(&cdev->private->kick_work,
-+ ccw_device_unregister, (void *) &cdev->dev);
-+ queue_work(ccw_device_work, &cdev->private->kick_work);
- wake_up(&cdev->private->wait_q);
- }
-
-@@ -403,8 +405,10 @@ ccw_device_online_notoper(struct ccw_dev
- // FIXME: not-oper indication to device driver ?
- ccw_device_call_handler(cdev);
- }
-+ INIT_WORK(&cdev->private->kick_work,
-+ ccw_device_unregister, (void *) &cdev->dev);
-+ queue_work(ccw_device_work, &cdev->private->kick_work);
- wake_up(&cdev->private->wait_q);
-- device_unregister(&cdev->dev);
- }
-
- /*
---- linux-2.6.0-test1/drivers/s390/cio/device.h 2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/s390/cio/device.h 2003-07-19 17:03:50.000000000 -0700
-@@ -65,6 +65,8 @@ extern struct workqueue_struct *ccw_devi
-
- void io_subchannel_recog_done(struct ccw_device *cdev);
-
-+void ccw_device_unregister(void *);
-+
- int ccw_device_recognition(struct ccw_device *);
- int ccw_device_online(struct ccw_device *);
- int ccw_device_offline(struct ccw_device *);
---- linux-2.6.0-test1/drivers/s390/cio/qdio.c 2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/s390/cio/qdio.c 2003-07-19 17:03:50.000000000 -0700
-@@ -55,7 +55,7 @@
- #include "ioasm.h"
- #include "chsc.h"
-
--#define VERSION_QDIO_C "$Revision: 1.51 $"
-+#define VERSION_QDIO_C "$Revision: 1.55 $"
-
- /****************** MODULE PARAMETER VARIABLES ********************/
- MODULE_AUTHOR("Utz Bacher <utz.bacher@de.ibm.com>");
-@@ -1643,6 +1643,7 @@ qdio_timeout_handler(struct ccw_device *
- default:
- BUG();
- }
-+ ccw_device_set_timeout(cdev, 0);
- wake_up(&cdev->private->wait_q);
-
- }
-@@ -1891,26 +1892,25 @@ tiqdio_check_chsc_availability(void)
- result=-EIO;
- goto exit;
- }
-- /* 4: request block
-- * 2: general char
-- * 512: chsc char */
-- if ((scsc_area->general_char[1] & 0x00800000) != 0x00800000) {
-+ /* Check for bit 41. */
-+ if ((scsc_area->general_char[1] & 0x00400000) != 0x00400000) {
- QDIO_PRINT_WARN("Adapter interruption facility not " \
- "installed.\n");
- result=-ENOENT;
- goto exit;
- }
-- if ((scsc_area->chsc_char[2] & 0x00180000) != 0x00180000) {
-+ /* Check for bits 107 and 108. */
-+ if ((scsc_area->chsc_char[3] & 0x00180000) != 0x00180000) {
- QDIO_PRINT_WARN("Set Chan Subsys. Char. & Fast-CHSCs " \
- "not available.\n");
- result=-ENOENT;
- goto exit;
- }
-
-- /* Check for hydra thin interrupts. */
-+ /* Check for hydra thin interrupts (bit 67). */
- hydra_thinints = ((scsc_area->general_char[2] & 0x10000000)
- == 0x10000000);
-- sprintf(dbf_text,"hydra_ti%1x", hydra_thinints);
-+ sprintf(dbf_text,"hydrati%1x", hydra_thinints);
- QDIO_DBF_TEXT0(0,setup,dbf_text);
- exit:
- free_page ((unsigned long) scsc_area);
-@@ -2413,8 +2413,10 @@ qdio_establish_handle_irq(struct ccw_dev
- QDIO_DBF_TEXT0(0,setup,dbf_text);
- QDIO_DBF_TEXT0(0,trace,dbf_text);
-
-- if (qdio_establish_irq_check_for_errors(cdev, cstat, dstat))
-+ if (qdio_establish_irq_check_for_errors(cdev, cstat, dstat)) {
-+ ccw_device_set_timeout(cdev, 0);
- return;
-+ }
-
- irq_ptr = cdev->private->qdio_data;
-
-@@ -2439,7 +2441,7 @@ qdio_establish_handle_irq(struct ccw_dev
- qdio_initialize_set_siga_flags_output(irq_ptr);
-
- qdio_set_state(irq_ptr,QDIO_IRQ_STATE_ESTABLISHED);
--
-+ ccw_device_set_timeout(cdev, 0);
- }
-
- int
-@@ -2698,6 +2700,8 @@ qdio_establish(struct ccw_device *cdev)
- "returned %i, next try returned %i\n",
- irq_ptr->irq,result,result2);
- result=result2;
-+ if (result)
-+ ccw_device_set_timeout(cdev, 0);
- }
-
- spin_unlock_irqrestore(get_ccwdev_lock(cdev),saveflags);
-@@ -3000,7 +3004,6 @@ qdio_perf_procfile_read(char *buffer, ch
- int buffer_length, int *eof, void *data)
- {
- int c=0;
-- int irq;
-
- /* we are always called with buffer_length=4k, so we all
- deliver on the first read */
-@@ -3020,7 +3023,7 @@ qdio_perf_procfile_read(char *buffer, ch
- perf_stats.siga_ins);
- _OUTP_IT("Number of SIGA out's issued : %u\n",
- perf_stats.siga_outs);
-- _OUTP_IT("Number of PCIs caught : %u\n",
-+ _OUTP_IT("Number of PCIs caught : %u\n",
- perf_stats.pcis);
- _OUTP_IT("Number of adapter interrupts caught : %u\n",
- perf_stats.thinints);
-@@ -3037,27 +3040,6 @@ qdio_perf_procfile_read(char *buffer, ch
- perf_stats.outbound_cnt);
- _OUTP_IT("\n");
-
-- /*
-- * FIXME: Rather use driver_for_each_dev, if we had it.
-- * I know this loop destroys our layering, but at least gets the
-- * performance stats out...
-- */
-- for (irq=0;irq <= highest_subchannel; irq++) {
-- struct qdio_irq *irq_ptr;
-- struct ccw_device *cdev;
--
-- if (!ioinfo[irq])
-- continue;
-- cdev = ioinfo[irq]->dev.driver_data;
-- if (!cdev)
-- continue;
-- irq_ptr = cdev->private->qdio_data;
-- if (!irq_ptr)
-- continue;
-- _OUTP_IT("Polling time on irq %4x " \
-- ": %u\n",
-- irq_ptr->irq,irq_ptr->input_qs[0]->timing.threshold);
-- }
- return c;
- }
-
---- linux-2.6.0-test1/drivers/s390/net/qeth.c 2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/s390/net/qeth.c 2003-07-19 17:03:50.000000000 -0700
-@@ -1,6 +1,6 @@
- /*
- *
-- * linux/drivers/s390/net/qeth.c ($Revision: 1.118 $)
-+ * linux/drivers/s390/net/qeth.c ($Revision: 1.126 $)
- *
- * Linux on zSeries OSA Express and HiperSockets support
- *
-@@ -165,7 +165,7 @@ MODULE_PARM_DESC(qeth_sparebufs, "the nu
- "reserved for low memory situations");
-
- /****************** MODULE STUFF **********************************/
--#define VERSION_QETH_C "$Revision: 1.118 $"
-+#define VERSION_QETH_C "$Revision: 1.126 $"
- static const char *version = "qeth S/390 OSA-Express driver ("
- VERSION_QETH_C "/" VERSION_QETH_H "/" VERSION_QETH_MPC_H
- QETH_VERSION_IPV6 QETH_VERSION_VLAN ")";
-@@ -1156,7 +1156,7 @@ qeth_get_skb(unsigned int len)
- return skb;
- }
-
--static struct sk_buff *
-+static inline struct sk_buff *
- qeth_get_next_skb(struct qeth_card *card,
- int *element_ptr, int *pos_in_el_ptr,
- void **hdr_ptr, struct qdio_buffer *buffer)
-@@ -1464,8 +1464,21 @@ __qeth_rebuild_skb(struct qeth_card *car
- skb->ip_summed = card->options.checksum_type;
- if (card->options.checksum_type == HW_CHECKSUMMING) {
- /* do we have a checksummed packet? */
-- if (*(__u8 *) (hdr_ptr + 11) & QETH_EXT_HEADER_CSUM_TRANSP_REQ) {
-- /* skb->ip_summed is set already */
-+
-+ /*
-+ * we only check for TCP/UDP checksums when the pseudo
-+ * header was also checked successfully -- for the
-+ * rest of the packets, it's not clear, whether the
-+ * upper layer csum is alright. And they shouldn't
-+ * occur too often anyway in real life
-+ */
-+
-+ if ((*(__u8*)(hdr_ptr+11) & (QETH_EXT_HEADER_CSUM_HDR_REQ |
-+ QETH_EXT_HEADER_CSUM_TRANSP_REQ)) ==
-+ (QETH_EXT_HEADER_CSUM_HDR_REQ |
-+ QETH_EXT_HEADER_CSUM_TRANSP_REQ)) {
-+#if 0
-+ /* csum does not need to be set inbound anyway */
-
- /*
- * vlan is not an issue here, it's still in
-@@ -1485,11 +1498,15 @@ __qeth_rebuild_skb(struct qeth_card *car
- (&skb->data[ip_len +
- QETH_TCP_CSUM_OFFSET]);
- }
-+#endif /* 0 */
-+ skb->ip_summed=CHECKSUM_UNNECESSARY;
- } else {
- /* make the stack check it */
- skb->ip_summed = SW_CHECKSUMMING;
- }
-- }
-+ } else
-+ skb->ip_summed=card->options.checksum_type;
-+
- __qeth_rebuild_skb_vlan(card, skb, hdr_ptr);
- }
-
-@@ -1596,7 +1613,7 @@ __qeth_fill_header_add_vlan(struct qeth_
- #endif
- }
-
--static __u8
-+static inline __u8
- __qeth_get_flags_v4(int multicast)
- {
- if (multicast == RTN_MULTICAST)
-@@ -1606,7 +1623,7 @@ __qeth_get_flags_v4(int multicast)
- return QETH_CAST_UNICAST;
- }
-
--static __u8
-+static inline __u8
- __qeth_get_flags_v6(int multicast)
- {
- if (multicast == RTN_MULTICAST)
-@@ -1625,7 +1642,7 @@ __qeth_get_flags_v6(int multicast)
- QETH_HEADER_IPV6;
- }
-
--static void
-+static inline void
- qeth_fill_header(struct qeth_hdr *hdr, struct sk_buff *skb,
- int version, int multicast)
- {
-@@ -1681,7 +1698,7 @@ qeth_fill_header(struct qeth_hdr *hdr, s
- __max(QETH_DBF_DATA_LEN, QETH_DBF_DATA_LEN));
- }
-
--static int inline
-+static inline int
- qeth_fill_buffer(struct qdio_buffer *buffer, char *dataptr,
- int length, int element)
- {
-@@ -1735,7 +1752,7 @@ qeth_fill_buffer(struct qdio_buffer *buf
- return element;
- }
-
--static void
-+static inline void
- qeth_flush_packed_packets(struct qeth_card *card, int queue, int under_int)
- {
- struct qdio_buffer *buffer;
-@@ -1900,7 +1917,7 @@ qeth_determine_send_error(int cc, int qd
- return ERROR_LINK_FAILURE; /* should never happen */
- }
-
--static void
-+static inline void
- qeth_free_buffer(struct qeth_card *card, int queue, int bufno,
- int qdio_error, int siga_error)
- {
-@@ -2013,7 +2030,7 @@ qeth_free_buffer(struct qeth_card *card,
- card->send_retries[queue][bufno] = 0;
- }
-
--static void
-+static inline void
- qeth_free_all_skbs(struct qeth_card *card)
- {
- int q, b;
-@@ -2049,7 +2066,7 @@ qeth_flush_buffer(struct qeth_card *card
- }
-
- #ifdef QETH_VLAN
--void
-+static inline void
- qeth_insert_ipv6_vlan_tag(struct sk_buff *__skb)
- {
-
-@@ -2088,7 +2105,7 @@ __qeth_add_vlan_tag(struct qeth_card *ca
- #endif
- }
-
--static void
-+static inline void
- qeth_send_packet_fast(struct qeth_card *card, struct sk_buff *skb,
- struct net_device *dev,
- int queue, int version, int multicast)
-@@ -2183,7 +2200,7 @@ qeth_send_packet_fast(struct qeth_card *
-
- /* no checks, if all elements are used, as then we would not be here (at most
- 127 buffers are enqueued) */
--static void
-+static inline void
- qeth_send_packet_packed(struct qeth_card *card, struct sk_buff *skb,
- struct net_device *dev,
- int queue, int version, int multicast)
-@@ -2391,7 +2408,7 @@ __qeth_switch_state_if_needed(struct qet
- }
- }
-
--static int
-+static inline int
- qeth_do_send_packet(struct qeth_card *card, struct sk_buff *skb,
- struct net_device *dev)
- {
-@@ -2829,23 +2846,27 @@ qeth_send_ipa_cmd(struct qeth_card *card
-
- if (!buffer) {
- if (atomic_read(&card->escape_softsetup))
-- result = 0;
-+ return 0;
- else
-- result = -1;
-- } else {
-- reply = (struct ipa_cmd *) PDU_ENCAPSULATION(buffer);
-- if ((update_cmd) && (reply))
-- memcpy(cmd, reply, sizeof (struct ipa_cmd));
-- result = reply->return_code;
--
-- /* some special sausages: */
-- if ((ipa_cmd == IPA_CMD_SETASSPARMS) && (result == 0)) {
-- result = reply->data.setassparms.return_code;
-- }
-- if ((ipa_cmd == IPA_CMD_SETADAPTERPARMS) && (result == 0)) {
-- result = reply->data.setadapterparms.return_code;
-- }
-+ return -1;
-+ }
-+ reply = (struct ipa_cmd *) PDU_ENCAPSULATION(buffer);
-+ if ((update_cmd) && (reply))
-+ memcpy(cmd, reply, sizeof (struct ipa_cmd));
-+ result = reply->return_code;
-+
-+ /* some special sausages: */
-+ if ((ipa_cmd == IPA_CMD_SETASSPARMS) && (result == 0)) {
-+ result = reply->data.setassparms.return_code;
-+ if ((reply->data.setassparms.assist_no==IPA_INBOUND_CHECKSUM) &&
-+ (reply->data.setassparms.command_code == IPA_CMD_ASS_START))
-+ card->csum_enable_mask =
-+ reply->data.setassparms.data.flags_32bit;
-+ }
-+ if ((ipa_cmd == IPA_CMD_SETADAPTERPARMS) && (result == 0)) {
-+ result = reply->data.setadapterparms.return_code;
- }
-+
- return result;
- }
-
-@@ -5599,7 +5620,7 @@ go_on_filt:
- }
- result=qeth_send_setassparms_simple_with_data
- (card,IPA_INBOUND_CHECKSUM,
-- IPA_CMD_ASS_ENABLE, IPA_CHECKSUM_ENABLE_MASK);
-+ IPA_CMD_ASS_ENABLE, card->csum_enable_mask);
- if (result) {
- PRINT_WARN("Could not enable inbound " \
- "checksumming on %s: 0x%x, " \
-@@ -6881,6 +6902,14 @@ qeth_peer_func_level(int level)
- return level; /* hmmm... don't know what to do with that level. */
- }
-
-+/* returns last four digits of bus_id */
-+static inline __u16
-+__raw_devno_from_bus_id(char *id)
-+{
-+ id += (strlen(id) - 4);
-+ return (__u16) simple_strtoul(id, &id, 16);
-+}
-+
- static int
- qeth_idx_activate_read(struct qeth_card *card)
- {
-@@ -6905,7 +6934,7 @@ qeth_idx_activate_read(struct qeth_card
- memcpy(QETH_IDX_ACT_FUNC_LEVEL(card->dma_stuff->sendbuf),
- &card->func_level, 2);
-
-- temp = _ccw_device_get_device_number(card->ddev);
-+ temp = __raw_devno_from_bus_id(card->ddev->dev.bus_id);
- memcpy(QETH_IDX_ACT_QDIO_DEV_CUA(card->dma_stuff->sendbuf), &temp, 2);
- temp = (card->cula << 8) + card->unit_addr2;
- memcpy(QETH_IDX_ACT_QDIO_DEV_REALADDR(card->dma_stuff->sendbuf),
-@@ -7501,10 +7530,8 @@ qeth_verify_dev(struct net_device *dev)
- for (; tmp && (!result); tmp = tmp->next) {
- if (atomic_read(&tmp->shutdown_phase))
- continue;
-- if (dev == tmp->dev) {
-- result = QETH_VERIFY_IS_REAL_DEV;
-- }
-- result = __qeth_verify_dev_vlan(dev, tmp);
-+ result = (dev == tmp->dev)?
-+ QETH_VERIFY_IS_REAL_DEV:__qeth_verify_dev_vlan(dev, tmp);
- }
- read_unlock(&list_lock);
- return result;
-@@ -8547,6 +8574,8 @@ qeth_alloc_card(void)
- card->ip_mc_new_state.ipm6_ifa = NULL;
- #endif /* QETH_IPV6 */
-
-+ card->csum_enable_mask = IPA_CHECKSUM_DEFAULT_ENABLE_MASK;
-+
- /* setup net_device stuff */
- card->dev->priv = card;
-
-@@ -9087,21 +9116,19 @@ qeth_procfile_open(struct inode *inode,
- /* FIXME: this is really a mess... */
-
- #ifdef QETH_IPV6
-- if (atomic_read(&card->rt4fld) && atomic_read(&card->rt6fld))
-- strcpy(router_str, "no");
-- else if (atomic_read(&card->rt4fld)
-- || atomic_read(&card->rt6fld))
-- strcpy(router_str, "mix");
-+ if (atomic_read(&card->rt4fld) || atomic_read(&card->rt6fld))
-+ strcpy(router_str, "FLD");
- #else/* QETH_IPV6 */
- if (atomic_read(&card->rt4fld))
-- strcpy(router_str, "no");
-+ strcpy(router_str, "FLD");
- #endif /* QETH_IPV6 */
- else if (((card->options.routing_type4 & ROUTER_MASK) ==
- PRIMARY_ROUTER)
- #ifdef QETH_IPV6
- &&
-- ((card->options.routing_type6 & ROUTER_MASK) ==
-- PRIMARY_ROUTER)
-+ (((card->options.routing_type6 & ROUTER_MASK) ==
-+ PRIMARY_ROUTER) ||
-+ (!qeth_is_supported(IPA_IPv6)))
- #endif /* QETH_IPV6 */
- ) {
- strcpy(router_str, "pri");
-@@ -9110,8 +9137,9 @@ qeth_procfile_open(struct inode *inode,
- SECONDARY_ROUTER)
- #ifdef QETH_IPV6
- &&
-- ((card->options.routing_type6 & ROUTER_MASK) ==
-- SECONDARY_ROUTER)
-+ (((card->options.routing_type6 & ROUTER_MASK) ==
-+ SECONDARY_ROUTER) ||
-+ (!qeth_is_supported(IPA_IPv6)))
- #endif /* QETH_IPV6 */
- ) {
- strcpy(router_str, "sec");
-@@ -9120,8 +9148,9 @@ qeth_procfile_open(struct inode *inode,
- MULTICAST_ROUTER)
- #ifdef QETH_IPV6
- &&
-- ((card->options.routing_type6 & ROUTER_MASK) ==
-- MULTICAST_ROUTER)
-+ (((card->options.routing_type6 & ROUTER_MASK) ==
-+ MULTICAST_ROUTER) ||
-+ (!qeth_is_supported(IPA_IPv6)))
- #endif /* QETH_IPV6 */
- ) {
- strcpy(router_str, "mc");
-@@ -9130,8 +9159,9 @@ qeth_procfile_open(struct inode *inode,
- PRIMARY_CONNECTOR)
- #ifdef QETH_IPV6
- &&
-- ((card->options.routing_type6 & ROUTER_MASK) ==
-- PRIMARY_CONNECTOR)
-+ (((card->options.routing_type6 & ROUTER_MASK) ==
-+ PRIMARY_CONNECTOR) ||
-+ (!qeth_is_supported(IPA_IPv6)))
- #endif /* QETH_IPV6 */
- ) {
- strcpy(router_str, "p.c");
-@@ -9140,8 +9170,9 @@ qeth_procfile_open(struct inode *inode,
- SECONDARY_CONNECTOR)
- #ifdef QETH_IPV6
- &&
-- ((card->options.routing_type6 & ROUTER_MASK) ==
-- SECONDARY_CONNECTOR)
-+ (((card->options.routing_type6 & ROUTER_MASK) ==
-+ SECONDARY_CONNECTOR) ||
-+ (!qeth_is_supported(IPA_IPv6)))
- #endif /* QETH_IPV6 */
- ) {
- strcpy(router_str, "s.c");
-@@ -9150,8 +9181,9 @@ qeth_procfile_open(struct inode *inode,
- NO_ROUTER)
- #ifdef QETH_IPV6
- &&
-- ((card->options.routing_type6 & ROUTER_MASK) ==
-- NO_ROUTER)
-+ (((card->options.routing_type6 & ROUTER_MASK) ==
-+ NO_ROUTER) ||
-+ (!qeth_is_supported(IPA_IPv6)))
- #endif /* QETH_IPV6 */
- ) {
- strcpy(router_str, "no");
-@@ -10115,7 +10147,7 @@ qeth_route4_show(struct device *dev, cha
- return -EINVAL;
-
- if (atomic_read(&card->rt4fld))
-- return sprintf(buf, "%s\n", "no");
-+ return sprintf(buf, "%s\n", "FLD");
-
- switch (card->options.routing_type4 & ROUTER_MASK) {
- case PRIMARY_ROUTER:
-@@ -10202,7 +10234,10 @@ qeth_route6_show(struct device *dev, cha
- return -EINVAL;
-
- if (atomic_read(&card->rt6fld))
-- return sprintf(buf, "%s\n", "no");
-+ return sprintf(buf, "%s\n", "FLD");
-+
-+ if (!qeth_is_supported(IPA_IPv6))
-+ return sprintf(buf, "%s\n", "n/a");
-
- switch (card->options.routing_type6 & ROUTER_MASK) {
- case PRIMARY_ROUTER:
-@@ -11061,6 +11096,10 @@ qeth_set_offline(struct ccwgroup_device
-
- QETH_DBF_TEXT4(0, trace, "freecard");
-
-+ memset(card->dev, 0, sizeof (struct net_device));
-+ card->dev->priv = card;
-+ strncpy(card->dev->name, card->dev_name, IFNAMSIZ);
-+
- ccw_device_set_offline(card->ddev);
- ccw_device_set_offline(card->wdev);
- ccw_device_set_offline(card->rdev);
---- linux-2.6.0-test1/drivers/s390/net/qeth.h 2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/s390/net/qeth.h 2003-07-19 17:03:50.000000000 -0700
-@@ -14,7 +14,7 @@
-
- #define QETH_NAME " qeth"
-
--#define VERSION_QETH_H "$Revision: 1.47 $"
-+#define VERSION_QETH_H "$Revision: 1.49 $"
-
- /******************** CONFIG STUFF ***********************/
- //#define QETH_DBF_LIKE_HELL
-@@ -938,6 +938,8 @@ struct qeth_card { /* pointed to by dev-
- __u32 ipa6_enabled;
- __u32 adp_supported;
-
-+ __u32 csum_enable_mask;
-+
- atomic_t startlan_attempts;
- atomic_t enable_routing_attempts4;
- atomic_t rt4fld;
-@@ -1021,7 +1023,7 @@ qeth_get_arphrd_type(int cardtype, int l
- case QETH_MPC_LINK_TYPE_LANE_TR:
- /* fallthrough */
- case QETH_MPC_LINK_TYPE_HSTR:
-- return ARPHRD_IEEE802;
-+ return ARPHRD_IEEE802_TR;
- default:
- return ARPHRD_ETHER;
- }
---- linux-2.6.0-test1/drivers/s390/net/qeth_mpc.h 2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/s390/net/qeth_mpc.h 2003-07-19 17:03:50.000000000 -0700
-@@ -10,7 +10,7 @@
- #ifndef __QETH_MPC_H__
- #define __QETH_MPC_H__
-
--#define VERSION_QETH_MPC_H "$Revision: 1.15 $"
-+#define VERSION_QETH_MPC_H "$Revision: 1.16 $"
-
- #define QETH_IPA_TIMEOUT (card->ipa_timeout)
- #define QETH_MPC_TIMEOUT 2000
-@@ -188,7 +188,7 @@ extern unsigned char DM_ACT[];
- #define IPA_CMD_ASS_ARP_QUERY_INFO 0x0104
- #define IPA_CMD_ASS_ARP_QUERY_STATS 0x0204
-
--#define IPA_CHECKSUM_ENABLE_MASK 0x001a
-+#define IPA_CHECKSUM_DEFAULT_ENABLE_MASK 0x001a
-
- #define IPA_CMD_ASS_FILTER_SET_TYPES 0x0003
-
---- linux-2.6.0-test1/drivers/sbus/char/envctrl.c 2003-06-14 12:17:59.000000000 -0700
-+++ 25/drivers/sbus/char/envctrl.c 2003-07-19 17:03:50.000000000 -0700
-@@ -14,6 +14,9 @@
- *
- * EB - Added support for CP1500 Global Address and PS/Voltage monitoring.
- * Eric Brower <ebrower@usa.net>
-+ *
-+ * DB - Audit every copy_to_user in envctrl_read.
-+ * Daniele Bellucci <bellucda@tiscali.it>
- */
-
- #include <linux/config.h>
-@@ -571,7 +574,8 @@ envctrl_read(struct file *file, char *bu
-
- data[0] = (unsigned char)(warning_temperature);
- ret = 1;
-- copy_to_user((unsigned char *)buf, data, ret);
-+ if (copy_to_user((unsigned char *)buf, data, ret))
-+ ret = -EFAULT;
- break;
-
- case ENVCTRL_RD_SHUTDOWN_TEMPERATURE:
-@@ -580,14 +584,16 @@ envctrl_read(struct file *file, char *bu
-
- data[0] = (unsigned char)(shutdown_temperature);
- ret = 1;
-- copy_to_user((unsigned char *)buf, data, ret);
-+ if (copy_to_user((unsigned char *)buf, data, ret))
-+ ret = -EFAULT;
- break;
-
- case ENVCTRL_RD_MTHRBD_TEMPERATURE:
- if (!(pchild = envctrl_get_i2c_child(ENVCTRL_MTHRBDTEMP_MON)))
- return 0;
- ret = envctrl_read_noncpu_info(pchild, ENVCTRL_MTHRBDTEMP_MON, data);
-- copy_to_user((unsigned char *)buf, data, ret);
-+ if (copy_to_user((unsigned char *)buf, data, ret))
-+ ret = -EFAULT;
- break;
-
- case ENVCTRL_RD_CPU_TEMPERATURE:
-@@ -596,7 +602,8 @@ envctrl_read(struct file *file, char *bu
- ret = envctrl_read_cpu_info(read_cpu, pchild, ENVCTRL_CPUTEMP_MON, data);
-
- /* Reset cpu to the default cpu0. */
-- copy_to_user((unsigned char *)buf, data, ret);
-+ if (copy_to_user((unsigned char *)buf, data, ret))
-+ ret = -EFAULT;
- break;
-
- case ENVCTRL_RD_CPU_VOLTAGE:
-@@ -605,21 +612,24 @@ envctrl_read(struct file *file, char *bu
- ret = envctrl_read_cpu_info(read_cpu, pchild, ENVCTRL_CPUVOLTAGE_MON, data);
-
- /* Reset cpu to the default cpu0. */
-- copy_to_user((unsigned char *)buf, data, ret);
-+ if (copy_to_user((unsigned char *)buf, data, ret))
-+ ret = -EFAULT;
- break;
-
- case ENVCTRL_RD_SCSI_TEMPERATURE:
- if (!(pchild = envctrl_get_i2c_child(ENVCTRL_SCSITEMP_MON)))
- return 0;
- ret = envctrl_read_noncpu_info(pchild, ENVCTRL_SCSITEMP_MON, data);
-- copy_to_user((unsigned char *)buf, data, ret);
-+ if (copy_to_user((unsigned char *)buf, data, ret))
-+ ret = -EFAULT;
- break;
-
- case ENVCTRL_RD_ETHERNET_TEMPERATURE:
- if (!(pchild = envctrl_get_i2c_child(ENVCTRL_ETHERTEMP_MON)))
- return 0;
- ret = envctrl_read_noncpu_info(pchild, ENVCTRL_ETHERTEMP_MON, data);
-- copy_to_user((unsigned char *)buf, data, ret);
-+ if (copy_to_user((unsigned char *)buf, data, ret))
-+ ret = -EFAULT;
- break;
-
- case ENVCTRL_RD_FAN_STATUS:
-@@ -627,7 +637,8 @@ envctrl_read(struct file *file, char *bu
- return 0;
- data[0] = envctrl_i2c_read_8574(pchild->addr);
- ret = envctrl_i2c_fan_status(pchild,data[0], data);
-- copy_to_user((unsigned char *)buf, data, ret);
-+ if (copy_to_user((unsigned char *)buf, data, ret))
-+ ret = -EFAULT;
- break;
-
- case ENVCTRL_RD_GLOBALADDRESS:
-@@ -635,7 +646,8 @@ envctrl_read(struct file *file, char *bu
- return 0;
- data[0] = envctrl_i2c_read_8574(pchild->addr);
- ret = envctrl_i2c_globaladdr(pchild, data[0], data);
-- copy_to_user((unsigned char *)buf, data, ret);
-+ if (copy_to_user((unsigned char *)buf, data, ret))
-+ ret = -EFAULT;
- break;
-
- case ENVCTRL_RD_VOLTAGE_STATUS:
-@@ -645,7 +657,8 @@ envctrl_read(struct file *file, char *bu
- return 0;
- data[0] = envctrl_i2c_read_8574(pchild->addr);
- ret = envctrl_i2c_voltage_status(pchild, data[0], data);
-- copy_to_user((unsigned char *)buf, data, ret);
-+ if (copy_to_user((unsigned char *)buf, data, ret))
-+ ret = -EFAULT;
- break;
-
- default:
---- linux-2.6.0-test1/drivers/sbus/char/jsflash.c 2003-06-14 12:18:09.000000000 -0700
-+++ 25/drivers/sbus/char/jsflash.c 2003-07-19 17:03:50.000000000 -0700
-@@ -38,12 +38,8 @@
- #include <linux/smp_lock.h>
- #include <linux/genhd.h>
-
--/*
-- * <linux/blk.h> is controlled from the outside with these definitions.
-- */
- #define MAJOR_NR JSFD_MAJOR
-
--#include <linux/blk.h>
- #include <asm/uaccess.h>
- #include <asm/pgtable.h>
- #include <asm/io.h>
---- linux-2.6.0-test1/drivers/scsi/3w-xxxx.c 2003-06-14 12:18:34.000000000 -0700
-+++ 25/drivers/scsi/3w-xxxx.c 2003-07-19 17:03:50.000000000 -0700
-@@ -187,7 +187,7 @@ MODULE_LICENSE("GPL");
- #include <linux/proc_fs.h>
- #include <linux/sched.h>
- #include <linux/ioport.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/hdreg.h>
- #include <linux/string.h>
- #include <linux/delay.h>
---- linux-2.6.0-test1/drivers/scsi/53c700.c 2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/53c700.c 2003-07-19 17:03:50.000000000 -0700
-@@ -131,7 +131,7 @@
- #include <asm/io.h>
- #include <asm/pgtable.h>
- #include <asm/byteorder.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/module.h>
- #include <linux/interrupt.h>
-
-@@ -172,7 +172,7 @@ STATIC void NCR_700_chip_reset(struct Sc
- STATIC int NCR_700_slave_configure(Scsi_Device *SDpnt);
- STATIC void NCR_700_slave_destroy(Scsi_Device *SDpnt);
-
--static struct device_attribute **NCR_700_dev_attrs = NULL;
-+STATIC struct device_attribute *NCR_700_dev_attrs[];
-
- static char *NCR_700_phase[] = {
- "",
-@@ -2027,25 +2027,12 @@ static struct device_attribute NCR_700_a
- .show = NCR_700_show_active_tags,
- };
-
--STATIC int __init
--NCR_700_init(void)
--{
-- scsi_sysfs_modify_sdev_attribute(&NCR_700_dev_attrs,
-- &NCR_700_queue_depth_attr);
-- scsi_sysfs_modify_sdev_attribute(&NCR_700_dev_attrs,
-- &NCR_700_active_tags_attr);
-- return 0;
--}
--
--/* NULL exit routine to keep modutils happy */
--STATIC void __exit
--NCR_700_exit(void)
--{
--}
-+STATIC struct device_attribute *NCR_700_dev_attrs[] = {
-+ &NCR_700_queue_depth_attr,
-+ &NCR_700_active_tags_attr,
-+ NULL,
-+};
-
- EXPORT_SYMBOL(NCR_700_detect);
- EXPORT_SYMBOL(NCR_700_release);
- EXPORT_SYMBOL(NCR_700_intr);
--
--module_init(NCR_700_init);
--module_exit(NCR_700_exit);
---- linux-2.6.0-test1/drivers/scsi/53c7xx.c 2003-06-14 12:18:52.000000000 -0700
-+++ 25/drivers/scsi/53c7xx.c 2003-07-19 17:03:50.000000000 -0700
-@@ -249,7 +249,7 @@
- #include <linux/mm.h>
- #include <linux/ioport.h>
- #include <linux/time.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/spinlock.h>
- #include <linux/interrupt.h>
- #include <asm/pgtable.h>
---- linux-2.6.0-test1/drivers/scsi/a2091.c 2003-06-14 12:18:22.000000000 -0700
-+++ 25/drivers/scsi/a2091.c 2003-07-19 17:03:50.000000000 -0700
-@@ -1,6 +1,6 @@
- #include <linux/types.h>
- #include <linux/mm.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/sched.h>
- #include <linux/version.h>
- #include <linux/init.h>
---- linux-2.6.0-test1/drivers/scsi/a3000.c 2003-06-14 12:18:29.000000000 -0700
-+++ 25/drivers/scsi/a3000.c 2003-07-19 17:03:50.000000000 -0700
-@@ -1,6 +1,6 @@
- #include <linux/types.h>
- #include <linux/mm.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/sched.h>
- #include <linux/version.h>
- #include <linux/ioport.h>
---- linux-2.6.0-test1/drivers/scsi/aacraid/aachba.c 2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/aacraid/aachba.c 2003-07-19 17:03:50.000000000 -0700
-@@ -33,7 +33,7 @@
- #include <linux/completion.h>
- #include <asm/semaphore.h>
- #include <asm/uaccess.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include "scsi.h"
- #include "hosts.h"
-
---- linux-2.6.0-test1/drivers/scsi/aacraid/commctrl.c 2003-06-14 12:18:07.000000000 -0700
-+++ 25/drivers/scsi/aacraid/commctrl.c 2003-07-19 17:03:50.000000000 -0700
-@@ -37,7 +37,7 @@
- #include <linux/spinlock.h>
- #include <linux/slab.h>
- #include <linux/completion.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <asm/semaphore.h>
- #include <asm/uaccess.h>
- #include "scsi.h"
---- linux-2.6.0-test1/drivers/scsi/aacraid/comminit.c 2003-06-14 12:17:57.000000000 -0700
-+++ 25/drivers/scsi/aacraid/comminit.c 2003-07-19 17:03:50.000000000 -0700
-@@ -37,7 +37,7 @@
- #include <linux/pci.h>
- #include <linux/spinlock.h>
- #include <linux/slab.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/completion.h>
- #include <linux/mm.h>
- #include <asm/semaphore.h>
---- linux-2.6.0-test1/drivers/scsi/aacraid/commsup.c 2003-06-14 12:18:28.000000000 -0700
-+++ 25/drivers/scsi/aacraid/commsup.c 2003-07-19 17:03:50.000000000 -0700
-@@ -41,7 +41,7 @@
- #include <linux/slab.h>
- #include <linux/completion.h>
- #include <asm/semaphore.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include "scsi.h"
- #include "hosts.h"
-
---- linux-2.6.0-test1/drivers/scsi/aacraid/dpcsup.c 2003-06-14 12:18:09.000000000 -0700
-+++ 25/drivers/scsi/aacraid/dpcsup.c 2003-07-19 17:03:50.000000000 -0700
-@@ -38,7 +38,7 @@
- #include <linux/spinlock.h>
- #include <linux/slab.h>
- #include <linux/completion.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <asm/semaphore.h>
- #include "scsi.h"
- #include "hosts.h"
---- linux-2.6.0-test1/drivers/scsi/aacraid/linit.c 2003-06-14 12:18:07.000000000 -0700
-+++ 25/drivers/scsi/aacraid/linit.c 2003-07-19 17:05:05.000000000 -0700
-@@ -50,7 +50,7 @@
- #include <linux/completion.h>
- #include <linux/interrupt.h>
- #include <asm/semaphore.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include "scsi.h"
- #include "hosts.h"
- #include <scsi/scsicam.h>
-@@ -295,7 +295,6 @@ static int aac_detect(Scsi_Host_Template
- printk(KERN_WARNING "aacraid: unable to register \"aac\" device.\n");
- }
-
-- template->present = aac_count; /* # of cards of this type found */
- return aac_count;
- }
-
---- linux-2.6.0-test1/drivers/scsi/aacraid/rx.c 2003-06-14 12:18:52.000000000 -0700
-+++ 25/drivers/scsi/aacraid/rx.c 2003-07-19 17:03:50.000000000 -0700
-@@ -36,7 +36,7 @@
- #include <linux/pci.h>
- #include <linux/spinlock.h>
- #include <linux/slab.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/delay.h>
- #include <linux/completion.h>
- #include <linux/interrupt.h>
---- linux-2.6.0-test1/drivers/scsi/aacraid/sa.c 2003-06-14 12:18:23.000000000 -0700
-+++ 25/drivers/scsi/aacraid/sa.c 2003-07-19 17:03:50.000000000 -0700
-@@ -36,7 +36,7 @@
- #include <linux/pci.h>
- #include <linux/spinlock.h>
- #include <linux/slab.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/delay.h>
- #include <linux/completion.h>
- #include <linux/interrupt.h>
---- linux-2.6.0-test1/drivers/scsi/advansys.c 2003-06-14 12:18:06.000000000 -0700
-+++ 25/drivers/scsi/advansys.c 2003-07-19 17:03:50.000000000 -0700
-@@ -798,7 +798,7 @@
- #include <linux/mm.h>
- #include <linux/proc_fs.h>
- #include <linux/init.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/stat.h>
- #include <linux/spinlock.h>
-
---- linux-2.6.0-test1/drivers/scsi/aha152x.c 2003-06-26 22:07:24.000000000 -0700
-+++ 25/drivers/scsi/aha152x.c 2003-07-19 17:03:50.000000000 -0700
-@@ -225,7 +225,7 @@
- #include <asm/irq.h>
- #include <asm/io.h>
- #include <linux/version.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include "scsi.h"
- #include "hosts.h"
- #include <asm/system.h>
-@@ -241,9 +241,7 @@
- #include <linux/isapnp.h>
- #include <linux/spinlock.h>
- #include <linux/workqueue.h>
--#include <linux/blk.h>
- #include <asm/semaphore.h>
--#include <asm/io.h>
- #include <scsi/scsicam.h>
-
- #include "scsi.h"
-@@ -941,7 +939,8 @@ static irqreturn_t swintr(int irqno, voi
- struct Scsi_Host *shpnt = lookup_irq(irqno);
-
- if (!shpnt) {
-- printk(KERN_ERR "aha152x%d: catched software interrupt %d for unknown controller.\n", HOSTNO, irqno);
-+ /* no point using HOSTNO here! */
-+ printk(KERN_ERR "aha152x: catched software interrupt %d for unknown controller.\n", irqno);
- return IRQ_NONE;
- }
-
-@@ -1049,6 +1048,10 @@ struct Scsi_Host *aha152x_probe_one(stru
-
- printk(KERN_INFO "aha152x%d: trying software interrupt, ",
- shost->host_no);
-+
-+ /* need to have host registered before triggering any interrupt */
-+ aha152x_host[registered_count] = shost;
-+ mb();
- SETPORT(DMACNTRL0, SWINT|INTEN);
- mdelay(1000);
- free_irq(shost->irq, shost);
-@@ -1064,7 +1067,7 @@ struct Scsi_Host *aha152x_probe_one(stru
-
- printk(KERN_ERR "aha152x%d: IRQ %d possibly wrong. "
- "Please verify.\n", shost->host_no, shost->irq);
-- goto out_release_region;
-+ goto out_unregister_host;
- }
- printk("ok.\n");
-
-@@ -1077,12 +1080,12 @@ struct Scsi_Host *aha152x_probe_one(stru
- "aha152x", shost) < 0) {
- printk(KERN_ERR "aha152x%d: failed to reassign interrupt.\n",
- shost->host_no);
-- goto out_release_region;
-+ goto out_unregister_host;
- }
--
-- aha152x_host[registered_count] = shost;
- return shost; /* the pcmcia stub needs the return value; */
-
-+out_unregister_host:
-+ aha152x_host[registered_count] = NULL;
- out_release_region:
- release_region(shost->io_port, IO_RANGE);
- out_unregister:
---- linux-2.6.0-test1/drivers/scsi/aha1542.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/aha1542.c 2003-07-19 17:03:50.000000000 -0700
-@@ -38,7 +38,7 @@
- #include <linux/spinlock.h>
- #include <linux/pci.h>
- #include <linux/isapnp.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/mca.h>
- #include <linux/mca-legacy.h>
-
---- linux-2.6.0-test1/drivers/scsi/aha1542.h 2003-06-14 12:18:25.000000000 -0700
-+++ 25/drivers/scsi/aha1542.h 2003-07-19 17:03:50.000000000 -0700
-@@ -130,7 +130,6 @@ struct ccb { /* Command Control Block
- };
-
- static int aha1542_detect(Scsi_Host_Template *);
--static int aha1542_command(Scsi_Cmnd *);
- static int aha1542_queuecommand(Scsi_Cmnd *, void (*done)(Scsi_Cmnd *));
- static int aha1542_abort(Scsi_Cmnd * SCpnt);
- static int aha1542_bus_reset(Scsi_Cmnd * SCpnt);
---- linux-2.6.0-test1/drivers/scsi/aha1740.c 2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/aha1740.c 2003-07-19 17:03:50.000000000 -0700
-@@ -34,7 +34,7 @@
- * are deemed to be part of the source code.
- */
-
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/interrupt.h>
- #include <linux/module.h>
- #include <linux/kernel.h>
-@@ -375,7 +375,7 @@ static int aha1740_queuecommand(Scsi_Cmn
- #endif
-
- /* locate an available ecb */
-- spin_lock_irqsave(&SCpnt->device->host->host_lock, flags);
-+ spin_lock_irqsave(SCpnt->device->host->host_lock, flags);
- ecbno = host->last_ecb_used + 1; /* An optimization */
- if (ecbno >= AHA1740_ECBS)
- ecbno = 0;
-@@ -394,7 +394,7 @@ static int aha1740_queuecommand(Scsi_Cmn
- doubles as reserved flag */
-
- host->last_ecb_used = ecbno;
-- spin_unlock_irqrestore(&SCpnt->device->host->host_lock, flags);
-+ spin_unlock_irqrestore(SCpnt->device->host->host_lock, flags);
-
- #ifdef DEBUG
- printk("Sending command (%d %x)...", ecbno, done);
-@@ -491,7 +491,7 @@ static int aha1740_queuecommand(Scsi_Cmn
- unsigned int base = SCpnt->device->host->io_port;
- DEB(printk("aha1740[%d] critical section\n",ecbno));
-
-- spin_lock_irqsave(&SCpnt->device->host->host_lock, flags);
-+ spin_lock_irqsave(SCpnt->device->host->host_lock, flags);
- for (loopcnt = 0; ; loopcnt++) {
- if (inb(G2STAT(base)) & G2STAT_MBXOUT) break;
- if (loopcnt == LOOPCNT_WARN) {
-@@ -511,7 +511,7 @@ static int aha1740_queuecommand(Scsi_Cmn
- panic("aha1740.c: attn wait failed!\n");
- }
- outb(ATTN_START | (target & 7), ATTN(base)); /* Start it up */
-- spin_unlock_irqrestore(&SCpnt->device->host->host_lock, flags);
-+ spin_unlock_irqrestore(SCpnt->device->host->host_lock, flags);
- DEB(printk("aha1740[%d] request queued.\n",ecbno));
- } else
- printk(KERN_ALERT "aha1740_queuecommand: done can't be NULL\n");
-@@ -594,7 +594,7 @@ static int aha1740_probe (struct device
- if (!request_region(slotbase, SLOTSIZE, "aha1740")) /* See if in use */
- return -EBUSY;
- if (!aha1740_test_port(slotbase))
-- goto err_release;
-+ goto err_release_region;
- aha1740_getconfig(slotbase,&irq_level,&translation);
- if ((inb(G2STAT(slotbase)) &
- (G2STAT_MBXOUT|G2STAT_BUSY)) != G2STAT_MBXOUT) {
-@@ -609,7 +609,7 @@ static int aha1740_probe (struct device
- shpnt = scsi_host_alloc(&aha1740_template,
- sizeof(struct aha1740_hostdata));
- if(shpnt == NULL)
-- goto err_release;
-+ goto err_release_region;
-
- shpnt->base = 0;
- shpnt->io_port = slotbase;
-@@ -625,21 +625,27 @@ static int aha1740_probe (struct device
- if (!host->ecb_dma_addr) {
- printk (KERN_ERR "aha1740_probe: Couldn't map ECB, giving up\n");
- scsi_unregister (shpnt);
-- goto err_release;
-+ goto err_host_put;
- }
-
- DEB(printk("aha1740_probe: enable interrupt channel %d\n",irq_level));
- if (request_irq(irq_level,aha1740_intr_handle,0,"aha1740",shpnt)) {
- printk(KERN_ERR "aha1740_probe: Unable to allocate IRQ %d.\n",
- irq_level);
-- goto err_release;
-+ goto err_unmap;
- }
-
- eisa_set_drvdata (edev, shpnt);
-- scsi_add_host (shpnt, dev);
-+ scsi_add_host (shpnt, dev); /* XXX handle failure */
-+ scsi_scan_host (shpnt);
- return 0;
-
-- err_release:
-+ err_unmap:
-+ dma_unmap_single (&edev->dev, host->ecb_dma_addr,
-+ sizeof (host->ecb), DMA_BIDIRECTIONAL);
-+ err_host_put:
-+ scsi_host_put (shpnt);
-+ err_release_region:
- release_region(slotbase, SLOTSIZE);
-
- return -ENODEV;
---- linux-2.6.0-test1/drivers/scsi/aic7xxx/aic79xx_osm.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/aic7xxx/aic79xx_osm.c 2003-07-19 17:03:50.000000000 -0700
-@@ -2173,7 +2173,8 @@ ahd_linux_register_host(struct ahd_softc
- ahd_unlock(ahd, &s);
-
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
-- scsi_add_host(host, &ahd->dev_softc->dev);
-+ scsi_add_host(host, &ahd->dev_softc->dev); /* XXX handle failure */
-+ scsi_scan_host(host);
- #endif
- return (0);
- }
---- linux-2.6.0-test1/drivers/scsi/aic7xxx/aic79xx_osm.h 2003-06-14 12:18:24.000000000 -0700
-+++ 25/drivers/scsi/aic7xxx/aic79xx_osm.h 2003-07-19 17:03:50.000000000 -0700
-@@ -43,7 +43,6 @@
- #define _AIC79XX_LINUX_H_
-
- #include <linux/types.h>
--#include <linux/blk.h>
- #include <linux/blkdev.h>
- #include <linux/delay.h>
- #include <linux/ioport.h>
---- linux-2.6.0-test1/drivers/scsi/aic7xxx/aic7xxx_osm.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/aic7xxx/aic7xxx_osm.c 2003-07-19 17:03:50.000000000 -0700
-@@ -139,7 +139,7 @@
- #endif
-
- #include <linux/mm.h> /* For fetching system memory size */
--#include <linux/blk.h> /* For block_size() */
-+#include <linux/blkdev.h> /* For block_size() */
-
- /*
- * Lock protecting manipulation of the ahc softc list.
-@@ -1811,7 +1811,8 @@ ahc_linux_register_host(struct ahc_softc
- ahc_unlock(ahc, &s);
-
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
-- scsi_add_host(host, (ahc->dev_softc ? &ahc->dev_softc->dev : NULL));
-+ scsi_add_host(host, (ahc->dev_softc ? &ahc->dev_softc->dev : NULL)); /* XXX handle failure */
-+ scsi_scan_host(host);
- #endif
- return (0);
- }
---- linux-2.6.0-test1/drivers/scsi/aic7xxx/aic7xxx_osm.h 2003-06-14 12:18:07.000000000 -0700
-+++ 25/drivers/scsi/aic7xxx/aic7xxx_osm.h 2003-07-19 17:03:50.000000000 -0700
-@@ -60,7 +60,6 @@
- #define _AIC7XXX_LINUX_H_
-
- #include <linux/types.h>
--#include <linux/blk.h>
- #include <linux/blkdev.h>
- #include <linux/delay.h>
- #include <linux/ioport.h>
---- linux-2.6.0-test1/drivers/scsi/aic7xxx/aiclib.c 2003-06-14 12:18:22.000000000 -0700
-+++ 25/drivers/scsi/aic7xxx/aiclib.c 2003-07-19 17:03:50.000000000 -0700
-@@ -30,7 +30,6 @@
- * $Id$
- */
-
--#include <linux/blk.h>
- #include <linux/blkdev.h>
- #include <linux/delay.h>
- #include <linux/version.h>
---- linux-2.6.0-test1/drivers/scsi/aic7xxx_old.c 2003-06-14 12:18:08.000000000 -0700
-+++ 25/drivers/scsi/aic7xxx_old.c 2003-07-19 17:03:50.000000000 -0700
-@@ -233,11 +233,10 @@
- #include <linux/sched.h>
- #include <linux/pci.h>
- #include <linux/proc_fs.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/init.h>
- #include <linux/spinlock.h>
- #include <linux/smp.h>
--#include <linux/blk.h>
- #include <linux/interrupt.h>
- #include "scsi.h"
- #include "hosts.h"
---- linux-2.6.0-test1/drivers/scsi/AM53C974.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/AM53C974.c 2003-07-19 17:03:50.000000000 -0700
-@@ -7,7 +7,7 @@
- #include <linux/errno.h>
- #include <linux/pci.h>
- #include <linux/string.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/init.h>
- #include <linux/spinlock.h>
-
---- linux-2.6.0-test1/drivers/scsi/amiga7xx.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/amiga7xx.c 2003-07-19 17:03:50.000000000 -0700
-@@ -9,7 +9,7 @@
- */
- #include <linux/types.h>
- #include <linux/mm.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/sched.h>
- #include <linux/version.h>
- #include <linux/config.h>
---- linux-2.6.0-test1/drivers/scsi/arm/acornscsi.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/arm/acornscsi.c 2003-07-19 17:03:50.000000000 -0700
-@@ -138,7 +138,7 @@
- #include <linux/errno.h>
- #include <linux/proc_fs.h>
- #include <linux/ioport.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/delay.h>
- #include <linux/interrupt.h>
- #include <linux/init.h>
-@@ -3043,9 +3043,13 @@ acornscsi_probe(struct expansion_card *e
- acornscsi_resetcard(ashost);
-
- ret = scsi_add_host(host, &ec->dev);
-- if (ret == 0)
-- goto out;
-+ if (ret)
-+ goto err_7;
-+
-+ scsi_scan_host(host);
-+ goto out;
-
-+ err_7:
- free_irq(host->irq, ashost);
- err_6:
- release_region(host->io_port, 2048);
---- linux-2.6.0-test1/drivers/scsi/arm/arxescsi.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/arm/arxescsi.c 2003-07-19 17:03:50.000000000 -0700
-@@ -19,7 +19,7 @@
- * 22-10-2000 SH Updated for new registering scheme.
- */
- #include <linux/module.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/kernel.h>
- #include <linux/string.h>
- #include <linux/ioport.h>
---- linux-2.6.0-test1/drivers/scsi/arm/cumana_1.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/arm/cumana_1.c 2003-07-19 17:03:50.000000000 -0700
-@@ -8,7 +8,7 @@
- #include <linux/sched.h>
- #include <linux/ioport.h>
- #include <linux/delay.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/init.h>
-
- #include <asm/ecard.h>
-@@ -297,9 +297,13 @@ cumanascsi1_probe(struct expansion_card
- printk("\n");
-
- ret = scsi_add_host(host, &ec->dev);
-- if (ret == 0)
-- goto out;
-+ if (ret)
-+ goto out_free_irq;
-+
-+ scsi_scan_host(host);
-+ goto out;
-
-+ out_free_irq:
- free_irq(host->irq, host);
- out_release:
- release_region(host->io_port, host->n_io_port);
---- linux-2.6.0-test1/drivers/scsi/arm/cumana_2.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/arm/cumana_2.c 2003-07-19 17:03:50.000000000 -0700
-@@ -17,7 +17,7 @@
- * 02-04-2000 RMK 0.0.4 Updated for new error handling code.
- */
- #include <linux/module.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/kernel.h>
- #include <linux/string.h>
- #include <linux/ioport.h>
---- linux-2.6.0-test1/drivers/scsi/arm/ecoscsi.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/arm/ecoscsi.c 2003-07-19 17:03:50.000000000 -0700
-@@ -27,7 +27,7 @@
- #include <linux/ioport.h>
- #include <linux/delay.h>
- #include <linux/init.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
-
- #include <asm/io.h>
- #include <asm/system.h>
-@@ -205,7 +205,8 @@ static int __init ecoscsi_init(void)
- NCR5380_print_options(host);
- printk("\n");
-
-- scsi_add_host(host, NULL);
-+ scsi_add_host(host, NULL); /* XXX handle failure */
-+ scsi_scan_host(host);
- return 0;
-
- release_reg:
---- linux-2.6.0-test1/drivers/scsi/arm/eesox.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/arm/eesox.c 2003-07-19 17:03:50.000000000 -0700
-@@ -23,7 +23,7 @@
- * error handling code.
- */
- #include <linux/module.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/kernel.h>
- #include <linux/string.h>
- #include <linux/ioport.h>
---- linux-2.6.0-test1/drivers/scsi/arm/fas216.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/arm/fas216.c 2003-07-19 17:03:50.000000000 -0700
-@@ -35,7 +35,7 @@
- * condition status from targets.
- */
- #include <linux/module.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/kernel.h>
- #include <linux/string.h>
- #include <linux/ioport.h>
-@@ -2861,6 +2861,8 @@ int fas216_add(struct Scsi_Host *host, s
- ret = scsi_add_host(host, dev);
- if (ret)
- fas216_writeb(info, REG_CMD, CMD_RESETCHIP);
-+ else
-+ scsi_scan_host(host);
-
- return ret;
- }
---- linux-2.6.0-test1/drivers/scsi/arm/oak.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/arm/oak.c 2003-07-19 17:03:50.000000000 -0700
-@@ -9,7 +9,7 @@
- #include <linux/sched.h>
- #include <linux/ioport.h>
- #include <linux/delay.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/init.h>
-
- #include <asm/ecard.h>
-@@ -158,9 +158,13 @@ oakscsi_probe(struct expansion_card *ec,
- printk("\n");
-
- ret = scsi_add_host(host, &ec->dev);
-- if (ret == 0)
-- goto out;
-+ if (ret)
-+ goto out_release;
-+
-+ scsi_scan_host(host);
-+ goto out;
-
-+ out_release:
- release_region(host->io_port, host->n_io_port);
- unreg:
- scsi_host_put(host);
---- linux-2.6.0-test1/drivers/scsi/arm/powertec.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/arm/powertec.c 2003-07-19 17:03:50.000000000 -0700
-@@ -8,7 +8,7 @@
- * published by the Free Software Foundation.
- */
- #include <linux/module.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/kernel.h>
- #include <linux/string.h>
- #include <linux/ioport.h>
---- linux-2.6.0-test1/drivers/scsi/arm/queue.c 2003-06-14 12:17:58.000000000 -0700
-+++ 25/drivers/scsi/arm/queue.c 2003-07-19 17:03:50.000000000 -0700
-@@ -15,7 +15,7 @@
- * 30-Aug-2000 RMK Use Linux list handling and spinlocks
- */
- #include <linux/module.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/kernel.h>
- #include <linux/string.h>
- #include <linux/slab.h>
---- linux-2.6.0-test1/drivers/scsi/atari_scsi.c 2003-06-14 12:18:51.000000000 -0700
-+++ 25/drivers/scsi/atari_scsi.c 2003-07-19 17:03:50.000000000 -0700
-@@ -86,7 +86,7 @@
- #include <linux/ctype.h>
- #include <linux/delay.h>
- #include <linux/mm.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/sched.h>
- #include <linux/interrupt.h>
- #include <linux/init.h>
---- linux-2.6.0-test1/drivers/scsi/atp870u.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/atp870u.c 2003-07-19 17:03:50.000000000 -0700
-@@ -26,7 +26,7 @@
- #include <linux/proc_fs.h>
- #include <linux/spinlock.h>
- #include <linux/pci.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/stat.h>
-
- #include <asm/system.h>
---- linux-2.6.0-test1/drivers/scsi/blz1230.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/blz1230.c 2003-07-19 17:03:50.000000000 -0700
-@@ -22,7 +22,7 @@
- #include <linux/types.h>
- #include <linux/string.h>
- #include <linux/slab.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/proc_fs.h>
- #include <linux/stat.h>
- #include <linux/interrupt.h>
---- linux-2.6.0-test1/drivers/scsi/blz2060.c 2003-06-14 12:18:09.000000000 -0700
-+++ 25/drivers/scsi/blz2060.c 2003-07-19 17:03:50.000000000 -0700
-@@ -22,7 +22,7 @@
- #include <linux/types.h>
- #include <linux/string.h>
- #include <linux/slab.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/proc_fs.h>
- #include <linux/stat.h>
- #include <linux/interrupt.h>
---- linux-2.6.0-test1/drivers/scsi/BusLogic.c 2003-06-14 12:18:34.000000000 -0700
-+++ 25/drivers/scsi/BusLogic.c 2003-07-19 17:03:50.000000000 -0700
-@@ -36,7 +36,6 @@
- #include <linux/init.h>
- #include <linux/interrupt.h>
- #include <linux/types.h>
--#include <linux/blk.h>
- #include <linux/blkdev.h>
- #include <linux/delay.h>
- #include <linux/ioport.h>
---- linux-2.6.0-test1/drivers/scsi/bvme6000.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/bvme6000.c 2003-07-19 17:03:50.000000000 -0700
-@@ -5,7 +5,7 @@
- */
- #include <linux/types.h>
- #include <linux/mm.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/sched.h>
- #include <linux/version.h>
- #include <linux/zorro.h>
---- linux-2.6.0-test1/drivers/scsi/constants.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/constants.c 2003-07-19 17:03:50.000000000 -0700
-@@ -9,7 +9,7 @@
- #include <linux/module.h>
-
- #include <linux/config.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/kernel.h>
- #include "scsi.h"
- #include "hosts.h"
---- linux-2.6.0-test1/drivers/scsi/cpqfcTScontrol.c 2003-06-14 12:17:57.000000000 -0700
-+++ 25/drivers/scsi/cpqfcTScontrol.c 2003-07-19 17:03:50.000000000 -0700
-@@ -30,7 +30,7 @@
-
- #define LinuxVersionCode(v, p, s) (((v)<<16)+((p)<<8)+(s))
-
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/kernel.h>
- #include <linux/string.h>
- #include <linux/ioport.h> // request_region() prototype
---- linux-2.6.0-test1/drivers/scsi/cpqfcTSinit.c 2003-06-14 12:17:57.000000000 -0700
-+++ 25/drivers/scsi/cpqfcTSinit.c 2003-07-19 17:03:50.000000000 -0700
-@@ -35,7 +35,7 @@
- #include <linux/interrupt.h>
- #include <linux/module.h>
- #include <linux/version.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/kernel.h>
- #include <linux/string.h>
- #include <linux/types.h>
---- linux-2.6.0-test1/drivers/scsi/cpqfcTSworker.c 2003-06-14 12:18:29.000000000 -0700
-+++ 25/drivers/scsi/cpqfcTSworker.c 2003-07-19 17:03:50.000000000 -0700
-@@ -26,7 +26,7 @@
- #include <linux/ioport.h>
- #include <linux/kernel.h>
- #include <linux/stat.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/interrupt.h>
- #include <linux/delay.h>
- #include <linux/smp_lock.h>
---- linux-2.6.0-test1/drivers/scsi/cyberstorm.c 2003-06-14 12:18:29.000000000 -0700
-+++ 25/drivers/scsi/cyberstorm.c 2003-07-19 17:03:50.000000000 -0700
-@@ -25,7 +25,7 @@
- #include <linux/types.h>
- #include <linux/string.h>
- #include <linux/slab.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/proc_fs.h>
- #include <linux/stat.h>
- #include <linux/interrupt.h>
---- linux-2.6.0-test1/drivers/scsi/cyberstormII.c 2003-06-14 12:18:30.000000000 -0700
-+++ 25/drivers/scsi/cyberstormII.c 2003-07-19 17:03:50.000000000 -0700
-@@ -21,7 +21,7 @@
- #include <linux/types.h>
- #include <linux/string.h>
- #include <linux/slab.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/proc_fs.h>
- #include <linux/stat.h>
- #include <linux/interrupt.h>
---- linux-2.6.0-test1/drivers/scsi/dc395x.c 2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/dc395x.c 2003-07-19 17:03:50.000000000 -0700
-@@ -50,7 +50,7 @@
- #include <linux/moduleparam.h>
- #include <linux/delay.h>
- #include <linux/ctype.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <asm/io.h>
- #include "scsi.h"
- #include "hosts.h"
-@@ -6214,7 +6214,8 @@ int __devinit dc395x_init_one(struct pci
- pci_set_drvdata(pdev, scsi_host);
-
- /* get the scsi mid level to scan for new devices on the bus */
-- scsi_add_host(scsi_host, &pdev->dev);
-+ scsi_add_host(scsi_host, &pdev->dev); /* XXX handle failure */
-+ scsi_scan_host(scsi_host);
-
- return 0;
- }
---- linux-2.6.0-test1/drivers/scsi/dec_esp.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/dec_esp.c 2003-07-19 17:03:50.000000000 -0700
-@@ -24,7 +24,7 @@
- #include <linux/types.h>
- #include <linux/string.h>
- #include <linux/slab.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/proc_fs.h>
- #include <linux/stat.h>
-
---- linux-2.6.0-test1/drivers/scsi/dmx3191d.c 2003-06-14 12:18:23.000000000 -0700
-+++ 25/drivers/scsi/dmx3191d.c 2003-07-19 17:03:50.000000000 -0700
-@@ -22,7 +22,7 @@
-
- #include <asm/io.h>
- #include <asm/system.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/init.h>
- #include <linux/ioport.h>
- #include <linux/module.h>
---- linux-2.6.0-test1/drivers/scsi/dpt_i2o.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/dpt_i2o.c 2003-07-19 17:03:50.000000000 -0700
-@@ -47,7 +47,7 @@ MODULE_DESCRIPTION("Adaptec I2O RAID Dri
- #include <linux/config.h> /* for CONFIG_PCI */
- #include <linux/pci.h> /* for PCI support */
- #include <linux/proc_fs.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/delay.h> /* for udelay */
- #include <linux/interrupt.h>
- #include <linux/kernel.h> /* for printk */
---- linux-2.6.0-test1/drivers/scsi/dtc.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/dtc.c 2003-07-19 17:03:50.000000000 -0700
-@@ -76,7 +76,7 @@
- #include <linux/module.h>
- #include <linux/signal.h>
- #include <linux/sched.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/delay.h>
- #include <linux/stat.h>
- #include <linux/string.h>
---- linux-2.6.0-test1/drivers/scsi/eata.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/eata.c 2003-07-19 17:03:50.000000000 -0700
-@@ -486,7 +486,7 @@
- #include <asm/system.h>
- #include <asm/byteorder.h>
- #include <linux/proc_fs.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/interrupt.h>
- #include <linux/stat.h>
- #include <linux/pci.h>
---- linux-2.6.0-test1/drivers/scsi/eata_pio.c 2003-06-14 12:18:24.000000000 -0700
-+++ 25/drivers/scsi/eata_pio.c 2003-07-19 17:03:50.000000000 -0700
-@@ -58,7 +58,7 @@
- #include <linux/interrupt.h>
- #include <linux/stat.h>
- #include <linux/config.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/spinlock.h>
- #include <asm/io.h>
-
---- linux-2.6.0-test1/drivers/scsi/esp.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/esp.c 2003-07-19 17:03:50.000000000 -0700
-@@ -19,7 +19,7 @@
- #include <linux/types.h>
- #include <linux/string.h>
- #include <linux/slab.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/proc_fs.h>
- #include <linux/stat.h>
- #include <linux/init.h>
---- linux-2.6.0-test1/drivers/scsi/fastlane.c 2003-06-14 12:18:07.000000000 -0700
-+++ 25/drivers/scsi/fastlane.c 2003-07-19 17:03:50.000000000 -0700
-@@ -30,7 +30,7 @@
- #include <linux/types.h>
- #include <linux/string.h>
- #include <linux/slab.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/proc_fs.h>
- #include <linux/stat.h>
- #include <linux/interrupt.h>
---- linux-2.6.0-test1/drivers/scsi/fcal.c 2003-06-14 12:17:57.000000000 -0700
-+++ 25/drivers/scsi/fcal.c 2003-07-19 17:03:50.000000000 -0700
-@@ -9,7 +9,7 @@
- #include <linux/types.h>
- #include <linux/string.h>
- #include <linux/slab.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/proc_fs.h>
- #include <linux/stat.h>
- #include <linux/init.h>
---- linux-2.6.0-test1/drivers/scsi/fd_mcs.c 2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/fd_mcs.c 2003-07-19 17:03:50.000000000 -0700
-@@ -79,7 +79,7 @@
-
- #include <linux/module.h>
- #include <linux/interrupt.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/errno.h>
- #include <linux/string.h>
- #include <linux/ioport.h>
---- linux-2.6.0-test1/drivers/scsi/fdomain.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/fdomain.c 2003-07-19 17:03:50.000000000 -0700
-@@ -270,7 +270,7 @@
- #include <linux/module.h>
- #include <linux/init.h>
- #include <linux/interrupt.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/spinlock.h>
- #include <linux/errno.h>
- #include <linux/string.h>
---- linux-2.6.0-test1/drivers/scsi/gdth.c 2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/gdth.c 2003-07-19 17:03:50.000000000 -0700
-@@ -357,11 +357,8 @@
- #include <asm/spinlock.h>
- #endif
-
--#if LINUX_VERSION_CODE >= 0x010300
--#include <linux/blk.h>
--#else
--#include "../block/blk.h"
--#endif
-+#include <linux/blkdev.h>
-+
- #include "scsi.h"
- #include "hosts.h"
- #if LINUX_VERSION_CODE < 0x020503
---- linux-2.6.0-test1/drivers/scsi/g_NCR5380.c 2003-07-13 21:44:34.000000000 -0700
-+++ 25/drivers/scsi/g_NCR5380.c 2003-07-19 17:03:50.000000000 -0700
-@@ -105,7 +105,7 @@
- #include <asm/io.h>
- #include <linux/signal.h>
- #include <linux/sched.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include "scsi.h"
- #include "hosts.h"
- #include "g_NCR5380.h"
---- linux-2.6.0-test1/drivers/scsi/gvp11.c 2003-06-14 12:18:34.000000000 -0700
-+++ 25/drivers/scsi/gvp11.c 2003-07-19 17:03:50.000000000 -0700
-@@ -1,6 +1,6 @@
- #include <linux/types.h>
- #include <linux/mm.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/sched.h>
- #include <linux/version.h>
- #include <linux/init.h>
---- linux-2.6.0-test1/drivers/scsi/hosts.c 2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/hosts.c 2003-07-19 17:05:05.000000000 -0700
-@@ -81,19 +81,15 @@ int scsi_add_host(struct Scsi_Host *shos
- printk(KERN_INFO "scsi%d : %s\n", shost->host_no,
- sht->info ? sht->info(shost) : sht->name);
-
-- error = scsi_sysfs_add_host(shost, dev);
--
- if (!shost->can_queue) {
- printk(KERN_ERR "%s: can_queue = 0 no longer supported\n",
- sht->name);
- error = -EINVAL;
- }
-
-- if (!error) {
-+ error = scsi_sysfs_add_host(shost, dev);
-+ if (!error)
- scsi_proc_host_add(shost);
-- scsi_scan_host(shost);
-- }
--
- return error;
- }
-
-@@ -112,7 +108,7 @@ void scsi_free_shost(struct Scsi_Host *s
- shost->eh_notify = NULL;
- }
-
-- shost->hostt->present--;
-+ scsi_proc_hostdir_rm(shost->hostt);
- scsi_destroy_command_freelist(shost);
- kfree(shost);
- }
-@@ -151,12 +147,6 @@ struct Scsi_Host *scsi_host_alloc(struct
- dump_stack();
- }
-
-- /* if its not set in the template, use the default */
-- if (!sht->shost_attrs)
-- sht->shost_attrs = scsi_sysfs_shost_attrs;
-- if (!sht->sdev_attrs)
-- sht->sdev_attrs = scsi_sysfs_sdev_attrs;
--
- shost = kmalloc(sizeof(struct Scsi_Host) + privsize, gfp_mask);
- if (!shost)
- return NULL;
-@@ -219,7 +209,7 @@ struct Scsi_Host *scsi_host_alloc(struct
- kernel_thread((int (*)(void *))scsi_error_handler, shost, 0);
- wait_for_completion(&complete);
- shost->eh_notify = NULL;
-- shost->hostt->present++;
-+ scsi_proc_hostdir_add(shost->hostt);
- return shost;
- fail:
- kfree(shost);
-@@ -283,8 +273,8 @@ struct Scsi_Host *scsi_host_lookup(unsig
- **/
- void scsi_host_get(struct Scsi_Host *shost)
- {
-- get_device(&shost->host_gendev);
-- class_device_get(&shost->class_dev);
-+ get_device(&shost->shost_gendev);
-+ class_device_get(&shost->shost_classdev);
- }
-
- /**
-@@ -293,6 +283,6 @@ void scsi_host_get(struct Scsi_Host *sho
- **/
- void scsi_host_put(struct Scsi_Host *shost)
- {
-- class_device_put(&shost->class_dev);
-- put_device(&shost->host_gendev);
-+ class_device_put(&shost->shost_classdev);
-+ put_device(&shost->shost_gendev);
- }
---- linux-2.6.0-test1/drivers/scsi/i91uscsi.c 2003-06-14 12:17:59.000000000 -0700
-+++ 25/drivers/scsi/i91uscsi.c 2003-07-19 17:03:50.000000000 -0700
-@@ -81,7 +81,7 @@
-
- #include <linux/jiffies.h>
- #include <linux/delay.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <asm/io.h>
-
- #include "i91uscsi.h"
---- linux-2.6.0-test1/drivers/scsi/ibmmca.c 2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/ibmmca.c 2003-07-19 17:03:50.000000000 -0700
-@@ -32,7 +32,7 @@
- #include <linux/interrupt.h>
- #include <linux/ioport.h>
- #include <linux/delay.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/proc_fs.h>
- #include <linux/stat.h>
- #include <linux/mca.h>
---- linux-2.6.0-test1/drivers/scsi/ide-scsi.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/ide-scsi.c 2003-07-19 17:03:50.000000000 -0700
-@@ -978,8 +978,10 @@ static int idescsi_attach(ide_drive_t *d
- idescsi_setup (drive, idescsi);
- drive->disk->fops = &idescsi_ops;
- err = scsi_add_host(host, &idescsi_primary);
-- if (!err)
-+ if (!err) {
-+ scsi_scan_host(host);
- return 0;
-+ }
- /* fall through on error */
- ide_unregister_subdriver(drive);
- }
---- linux-2.6.0-test1/drivers/scsi/imm.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/imm.c 2003-07-19 17:03:50.000000000 -0700
-@@ -24,7 +24,7 @@
- void imm_reset_pulse(unsigned int base);
- static int device_check(int host_no);
-
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <asm/io.h>
- #include <linux/parport.h>
- #include <linux/workqueue.h>
---- linux-2.6.0-test1/drivers/scsi/imm.h 2003-06-14 12:17:55.000000000 -0700
-+++ 25/drivers/scsi/imm.h 2003-07-19 17:03:50.000000000 -0700
-@@ -75,7 +75,7 @@
- #include <linux/delay.h>
- #include <linux/proc_fs.h>
- #include <linux/stat.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/sched.h>
- #include <linux/interrupt.h>
-
---- linux-2.6.0-test1/drivers/scsi/in2000.c 2003-06-14 12:18:29.000000000 -0700
-+++ 25/drivers/scsi/in2000.c 2003-07-19 17:03:50.000000000 -0700
-@@ -114,7 +114,6 @@
- */
-
- #include <linux/module.h>
--#include <linux/blk.h>
- #include <linux/blkdev.h>
- #include <linux/interrupt.h>
- #include <linux/string.h>
---- linux-2.6.0-test1/drivers/scsi/ini9100u.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/ini9100u.c 2003-07-19 17:03:50.000000000 -0700
-@@ -119,7 +119,7 @@
- #include <linux/delay.h>
- #include <linux/pci.h>
- #include <linux/init.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/spinlock.h>
- #include <linux/stat.h>
- #include <linux/config.h>
---- linux-2.6.0-test1/drivers/scsi/inia100.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/inia100.c 2003-07-19 17:03:50.000000000 -0700
-@@ -74,7 +74,7 @@
- #include <linux/interrupt.h>
- #include <linux/pci.h>
- #include <linux/init.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/spinlock.h>
- #include <linux/stat.h>
- #include <linux/kernel.h>
---- linux-2.6.0-test1/drivers/scsi/ips.c 2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/ips.c 2003-07-19 17:03:50.000000000 -0700
-@@ -167,7 +167,7 @@
- #include <linux/reboot.h>
- #include <linux/interrupt.h>
-
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/types.h>
-
- #include <scsi/sg.h>
---- linux-2.6.0-test1/drivers/scsi/ips.h 2003-06-14 12:18:03.000000000 -0700
-+++ 25/drivers/scsi/ips.h 2003-07-19 17:03:50.000000000 -0700
-@@ -111,7 +111,7 @@
- #else
- #define IPS_REGISTER_HOSTS(SHT) (!ips_detect(SHT))
- #define IPS_UNREGISTER_HOSTS(SHT)
-- #define IPS_ADD_HOST(shost,device) scsi_add_host(shost,device)
-+ #define IPS_ADD_HOST(shost,device) do { scsi_add_host(shost,device); scsi_scan_host(shost); } while (0)
- #define IPS_REMOVE_HOST(shost) scsi_remove_host(shost)
- #define IPS_SCSI_SET_DEVICE(sh,ha) scsi_set_device(sh, &(ha)->pcidev->dev)
- #define IPS_PRINTK(level, pcidev, format, arg...) \
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/scsi/isp/asm_1000.h 2003-07-19 17:06:32.000000000 -0700
-@@ -0,0 +1,3224 @@
-+/* @(#)asm_1000.h 1.2 */
-+/*
-+ * Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000 Qlogic, Inc.
-+ * All rights reserved.
-+ *
-+ * Redistribution and use in source and binary forms are permitted provided
-+ * that the following conditions are met:
-+ * 1. Redistribution of source code must retain the above copyright
-+ * notice, this list of conditions and the following disclaimer.
-+ * 2. Redistribution in binary form must reproduce the above copyright
-+ * notice, this list of conditions and the following disclaimer in the
-+ * documentation and/or other materials provided with the distribution.
-+ * 3. The name of the author may not be used to endorse or promote products
-+ * derived from this software without specific prior written permission
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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, 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) HOWEVER CAUSED AND ON ANY
-+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-+ */
-+
-+#ifndef ISP_TARGET_MODE
-+/*
-+ * Firmware Version 1.37.00 (11:28 Aug 28, 2000)
-+ */
-+static const u_int16_t isp_1000_risc_code[] = {
-+ 0x0078, 0x1041, 0x0000, 0x2757, 0x0000, 0x12ff, 0x2043, 0x4f50,
-+ 0x5952, 0x4947, 0x4854, 0x2031, 0x3939, 0x312c, 0x3139, 0x3932,
-+ 0x2c31, 0x3939, 0x332c, 0x3139, 0x3934, 0x2051, 0x4c4f, 0x4749,
-+ 0x4320, 0x434f, 0x5250, 0x4f52, 0x4154, 0x494f, 0x4e00, 0x2049,
-+ 0x5350, 0x3130, 0x3030, 0x2046, 0x6972, 0x6d77, 0x6172, 0x6520,
-+ 0x2056, 0x6572, 0x7369, 0x6f6e, 0x2030, 0x312e, 0x3337, 0x2020,
-+ 0x2043, 0x7573, 0x746f, 0x6d65, 0x7220, 0x4e6f, 0x2e20, 0x3135,
-+ 0x2050, 0x726f, 0x6475, 0x6374, 0x204e, 0x6f2e, 0x2000, 0x3030,
-+ 0x2024, 0x20b9, 0x1212, 0x20c1, 0x0008, 0x2071, 0x0010, 0x70c3,
-+ 0x0004, 0x20c9, 0x5cff, 0x2089, 0x10ee, 0x70c7, 0x4953, 0x70cb,
-+ 0x5020, 0x70cf, 0x2020, 0x70d3, 0x0001, 0x3f00, 0x70d6, 0x2031,
-+ 0x0030, 0x2079, 0x3800, 0x7863, 0x0000, 0x2fa0, 0x2009, 0x031b,
-+ 0x2011, 0x0000, 0x20a9, 0x0040, 0x42a4, 0x8109, 0x00c0, 0x1062,
-+ 0x789b, 0x0101, 0x780b, 0x0002, 0x780f, 0x0002, 0x784f, 0x0bb8,
-+ 0x2009, 0x3835, 0x200b, 0x0003, 0x78bb, 0x0000, 0x78bf, 0x0000,
-+ 0x78c3, 0x0000, 0x2069, 0x3840, 0x00a8, 0x1085, 0x681b, 0x003c,
-+ 0x2009, 0x1313, 0x21b8, 0x0078, 0x1087, 0x681b, 0x0028, 0x6807,
-+ 0x0007, 0x680b, 0x00fa, 0x680f, 0x0008, 0x6813, 0x0005, 0x681f,
-+ 0x0000, 0x6823, 0x0006, 0x6817, 0x0008, 0x6827, 0x0000, 0x2069,
-+ 0x3a80, 0x2011, 0x0020, 0x2009, 0x0010, 0x680b, 0x0c19, 0x680f,
-+ 0x0019, 0x6803, 0xdd00, 0x6807, 0x001a, 0x6a1a, 0x2d00, 0xa0e8,
-+ 0x0008, 0xa290, 0x0004, 0x8109, 0x00c0, 0x109d, 0x2069, 0x3b00,
-+ 0x2009, 0x0002, 0x20a9, 0x0100, 0x683f, 0x0000, 0x2001, 0x0008,
-+ 0x8007, 0x6832, 0x6837, 0x000a, 0x680b, 0x0040, 0x6817, 0x0100,
-+ 0x681f, 0x0064, 0xade8, 0x0010, 0x0070, 0x10c8, 0x0078, 0x10b4,
-+ 0x8109, 0x00c0, 0x10b2, 0x1078, 0x1b64, 0x1078, 0x31c0, 0x1078,
-+ 0x1747, 0x1078, 0x368b, 0x3200, 0xa085, 0x000d, 0x2090, 0x70c3,
-+ 0x0000, 0x0090, 0x10e2, 0x70c0, 0xa086, 0x0002, 0x00c0, 0x10e2,
-+ 0x1078, 0x11e0, 0x1078, 0x1112, 0x1078, 0x18f2, 0x1078, 0x1aaf,
-+ 0x1078, 0x34fd, 0x1078, 0x184d, 0x0078, 0x10e2, 0x10f6, 0x10f8,
-+ 0x1d05, 0x1d05, 0x321e, 0x321e, 0x1d05, 0x1d05, 0x0078, 0x10f6,
-+ 0x0078, 0x10f8, 0x0078, 0x10fa, 0x0078, 0x10fc, 0x7008, 0x800c,
-+ 0x00c8, 0x110d, 0x7007, 0x0002, 0xa08c, 0x000c, 0x00c0, 0x110e,
-+ 0x8004, 0x8004, 0x00c8, 0x110d, 0x087a, 0x097a, 0x70c3, 0x4002,
-+ 0x0078, 0x11e3, 0x7814, 0xa005, 0x00c0, 0x111a, 0x0010, 0x1156,
-+ 0x0078, 0x1155, 0x2009, 0x3868, 0x2104, 0xa005, 0x00c0, 0x1155,
-+ 0x7814, 0xa086, 0x0001, 0x00c0, 0x1127, 0x1078, 0x15ae, 0x7817,
-+ 0x0000, 0x2009, 0x386f, 0x2104, 0xa065, 0x0040, 0x1143, 0x2009,
-+ 0x386a, 0x211c, 0x8108, 0x2114, 0x8108, 0x2104, 0xa210, 0xa399,
-+ 0x0000, 0x2009, 0x0018, 0x6083, 0x0103, 0x1078, 0x16d7, 0x00c0,
-+ 0x114f, 0x1078, 0x173e, 0x2009, 0x386f, 0x200b, 0x0000, 0x2009,
-+ 0x3869, 0x2104, 0x200b, 0x0000, 0xa005, 0x0040, 0x1153, 0x2001,
-+ 0x4005, 0x0078, 0x11e2, 0x0078, 0x11e0, 0x007c, 0x2061, 0x0000,
-+ 0x6018, 0xa084, 0x0001, 0x0040, 0x115e, 0x007c, 0x70c3, 0x0000,
-+ 0x70c7, 0x0000, 0x70cb, 0x0000, 0x70cf, 0x0000, 0x70c0, 0xa0bc,
-+ 0xffc0, 0x00c0, 0x11ae, 0x2038, 0x0079, 0x116e, 0x11e0, 0x122e,
-+ 0x11fc, 0x122e, 0x127f, 0x127f, 0x11f3, 0x1608, 0x128a, 0x11ef,
-+ 0x1200, 0x1202, 0x1204, 0x1206, 0x160d, 0x11ef, 0x1292, 0x12ba,
-+ 0x15bc, 0x1602, 0x1208, 0x14e3, 0x1505, 0x151f, 0x1548, 0x149c,
-+ 0x14aa, 0x14be, 0x14d2, 0x1357, 0x1332, 0x12e2, 0x12e9, 0x12ee,
-+ 0x12f3, 0x12f9, 0x12fe, 0x1303, 0x1308, 0x130d, 0x1311, 0x1326,
-+ 0x11ef, 0x11ef, 0x11ef, 0x11ef, 0x11ef, 0x1363, 0x136c, 0x137b,
-+ 0x13a1, 0x13ab, 0x13b2, 0x13d8, 0x13e7, 0x13f6, 0x1408, 0x147a,
-+ 0x11ef, 0x148a, 0x11ef, 0x11ef, 0x11ef, 0x1491, 0xa0bc, 0xffa0,
-+ 0x00c0, 0x11ef, 0x2038, 0xa084, 0x001f, 0x0079, 0x11b7, 0x11ef,
-+ 0x11ef, 0x11ef, 0x11ef, 0x11ef, 0x11ef, 0x11ef, 0x11ef, 0x11ef,
-+ 0x11ef, 0x11ef, 0x11ef, 0x11ef, 0x11ef, 0x1665, 0x1674, 0x11ef,
-+ 0x11ef, 0x11ef, 0x11ef, 0x11ef, 0x11ef, 0x11ef, 0x11ef, 0x11ef,
-+ 0x11ef, 0x16b3, 0x16bd, 0x16c1, 0x16cf, 0x167f, 0x169c, 0x72ca,
-+ 0x71c6, 0x2001, 0x4006, 0x0078, 0x11e2, 0x73ce, 0x72ca, 0x71c6,
-+ 0x2001, 0x4000, 0x70c2, 0x2061, 0x0000, 0x601b, 0x0001, 0x2091,
-+ 0x5000, 0x2091, 0x4080, 0x007c, 0x71c6, 0x0078, 0x11e2, 0x70c3,
-+ 0x4001, 0x0078, 0x11e3, 0x2099, 0x0041, 0x20a1, 0x0041, 0x20a9,
-+ 0x0005, 0x53a3, 0x0078, 0x11e0, 0x70c4, 0x70c3, 0x0004, 0x007a,
-+ 0x0078, 0x11e0, 0x0078, 0x11e0, 0x0078, 0x11e0, 0x0078, 0x11e0,
-+ 0x2091, 0x8000, 0x70c3, 0x0000, 0x70c7, 0x4953, 0x70cb, 0x5020,
-+ 0x70cf, 0x2020, 0x70d3, 0x0001, 0x3f00, 0x70d6, 0x2079, 0x0000,
-+ 0x781b, 0x0001, 0x2031, 0x0030, 0x2059, 0x1000, 0x2029, 0x0457,
-+ 0x2051, 0x0470, 0x2061, 0x0472, 0x20b9, 0xffff, 0x20c1, 0x0000,
-+ 0x2091, 0x5000, 0x2091, 0x4080, 0x0078, 0x0455, 0x71d0, 0x72c8,
-+ 0x73cc, 0x70c4, 0x20a0, 0x2098, 0x2031, 0x0030, 0x81ff, 0x0040,
-+ 0x11e0, 0x7007, 0x0004, 0x731a, 0x721e, 0x2051, 0x0012, 0x2049,
-+ 0x125d, 0x2041, 0x11e0, 0x7003, 0x0002, 0xa786, 0x0001, 0x00c0,
-+ 0x124f, 0x2049, 0x126b, 0x2041, 0x1277, 0x7003, 0x0003, 0x7017,
-+ 0x0000, 0x810b, 0x7112, 0x00c8, 0x1257, 0x7017, 0x0001, 0x7007,
-+ 0x0001, 0xa786, 0x0001, 0x0040, 0x126b, 0x700c, 0xa084, 0x007f,
-+ 0x8004, 0x2009, 0x0020, 0xa102, 0x0942, 0x094a, 0x20a8, 0x26a0,
-+ 0x53a6, 0x0078, 0x10fe, 0x700c, 0xa084, 0x007f, 0x0040, 0x126b,
-+ 0x80ac, 0x0048, 0x126b, 0x2698, 0x53a5, 0x0078, 0x10fe, 0x700c,
-+ 0xa084, 0x007f, 0x80ac, 0x2698, 0x53a5, 0x0078, 0x11e0, 0x71c4,
-+ 0x70c8, 0x2114, 0xa79e, 0x0004, 0x00c0, 0x1287, 0x200a, 0x72ca,
-+ 0x0078, 0x11df, 0x70c7, 0x0125, 0x70cb, 0x0000, 0x70cf, 0x0f00,
-+ 0x0078, 0x11e0, 0x70c4, 0x72c8, 0x73cc, 0x74d0, 0x70c6, 0x72ca,
-+ 0x73ce, 0x74d2, 0xa005, 0x0040, 0x12b4, 0x8001, 0x7872, 0xa084,
-+ 0xfc00, 0x0040, 0x12ab, 0x7898, 0xa085, 0x0001, 0x789a, 0x2001,
-+ 0x4005, 0x0078, 0x11e2, 0x7a7a, 0x7b7e, 0x7c76, 0x7898, 0xa084,
-+ 0xfffc, 0x789a, 0x0078, 0x12b8, 0x7898, 0xa085, 0x0001, 0x789a,
-+ 0x0078, 0x11e0, 0x70c4, 0x72c8, 0x73cc, 0x74d4, 0x70c6, 0x72ca,
-+ 0x73ce, 0x74d6, 0xa005, 0x0040, 0x12dc, 0x8001, 0x7886, 0xa084,
-+ 0xfc00, 0x0040, 0x12d3, 0x7898, 0xa085, 0x0100, 0x789a, 0x2001,
-+ 0x4005, 0x0078, 0x11e2, 0x7a8e, 0x7b92, 0x7c8a, 0x7898, 0xa084,
-+ 0xfcff, 0x789a, 0x0078, 0x12e0, 0x7898, 0xa085, 0x0100, 0x789a,
-+ 0x0078, 0x11e0, 0x2009, 0x3859, 0x210c, 0x2011, 0x0372, 0x0078,
-+ 0x11de, 0x2009, 0x3841, 0x210c, 0x0078, 0x11df, 0x2009, 0x3842,
-+ 0x210c, 0x0078, 0x11df, 0x2061, 0x3840, 0x610c, 0x6210, 0x0078,
-+ 0x11de, 0x2009, 0x3845, 0x210c, 0x0078, 0x11df, 0x2009, 0x3846,
-+ 0x210c, 0x0078, 0x11df, 0x2009, 0x3847, 0x210c, 0x0078, 0x11df,
-+ 0x2009, 0x3848, 0x210c, 0x0078, 0x11df, 0x7908, 0x7a0c, 0x0078,
-+ 0x11de, 0x71c4, 0x8107, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003,
-+ 0xa0e8, 0x3a80, 0x6a00, 0x6804, 0xa084, 0x0008, 0x0040, 0x1323,
-+ 0x6b08, 0x0078, 0x1324, 0x6b0c, 0x0078, 0x11dd, 0x77c4, 0x1078,
-+ 0x1758, 0x2091, 0x8000, 0x6b1c, 0x6a14, 0x2091, 0x8001, 0x2708,
-+ 0x0078, 0x11dd, 0x2091, 0x8000, 0x7848, 0xa005, 0x00c0, 0x1346,
-+ 0x2061, 0x3b00, 0x20a9, 0x0100, 0x603c, 0xa005, 0x00c0, 0x1346,
-+ 0xace0, 0x0010, 0x00f0, 0x133c, 0x0078, 0x134e, 0x2019, 0x0000,
-+ 0x2011, 0x0000, 0x2009, 0x0000, 0x0078, 0x1353, 0x7bb8, 0x7abc,
-+ 0x79c0, 0x78c3, 0x0000, 0x2091, 0x8001, 0x0078, 0x11dd, 0x77c4,
-+ 0x1078, 0x1758, 0x2091, 0x8000, 0x6908, 0x6a18, 0x6b10, 0x2091,
-+ 0x8001, 0x0078, 0x11dd, 0x71c4, 0xa182, 0x0010, 0x00c8, 0x11d8,
-+ 0x1078, 0x1be8, 0x0078, 0x11dd, 0x71c4, 0xa182, 0x0010, 0x00c8,
-+ 0x11d8, 0x2011, 0x3841, 0x2204, 0x007e, 0x2112, 0x1078, 0x1ba1,
-+ 0x017f, 0x0078, 0x11df, 0x71c4, 0x2011, 0x1399, 0x20a9, 0x0008,
-+ 0x2204, 0xa106, 0x0040, 0x138b, 0x8210, 0x0070, 0x1389, 0x0078,
-+ 0x1380, 0x0078, 0x11d8, 0xa292, 0x1399, 0x027e, 0x2011, 0x3842,
-+ 0x2204, 0x2112, 0x017f, 0x007e, 0x1078, 0x1bad, 0x017f, 0x0078,
-+ 0x11df, 0x03e8, 0x00fa, 0x01f4, 0x02ee, 0x0064, 0x0019, 0x0032,
-+ 0x004b, 0x2061, 0x3840, 0x610c, 0x6210, 0x70c4, 0x600e, 0x70c8,
-+ 0x6012, 0x0078, 0x11de, 0x2061, 0x3840, 0x6114, 0x70c4, 0x6016,
-+ 0x0078, 0x11df, 0x71c4, 0x2011, 0x0004, 0x2019, 0x1212, 0xa186,
-+ 0x0028, 0x0040, 0x13cb, 0x2011, 0x0005, 0x2019, 0x1212, 0xa186,
-+ 0x0032, 0x0040, 0x13cb, 0x2011, 0x0006, 0x2019, 0x1313, 0xa186,
-+ 0x003c, 0x00c0, 0x11d8, 0x2061, 0x3840, 0x6018, 0x007e, 0x611a,
-+ 0x23b8, 0x1078, 0x1bbe, 0x1078, 0x368b, 0x017f, 0x0078, 0x11df,
-+ 0x71c4, 0xa184, 0xffcf, 0x00c0, 0x11d8, 0x2011, 0x3847, 0x2204,
-+ 0x2112, 0x007e, 0x1078, 0x1be0, 0x017f, 0x0078, 0x11df, 0x71c4,
-+ 0xa182, 0x0010, 0x00c8, 0x11d8, 0x2011, 0x3848, 0x2204, 0x007e,
-+ 0x2112, 0x1078, 0x1bcf, 0x017f, 0x0078, 0x11df, 0x71c4, 0x72c8,
-+ 0xa184, 0xfffd, 0x00c0, 0x11d7, 0xa284, 0xfffd, 0x00c0, 0x11d7,
-+ 0x2100, 0x7908, 0x780a, 0x2200, 0x7a0c, 0x780e, 0x0078, 0x11de,
-+ 0x71c4, 0x8107, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa0e8,
-+ 0x3a80, 0x2019, 0x0000, 0x72c8, 0x6800, 0x007e, 0xa226, 0x0040,
-+ 0x1440, 0xa284, 0x0001, 0x0040, 0x1422, 0x2220, 0xa39d, 0x0002,
-+ 0xa294, 0xfffe, 0x6a02, 0xa484, 0x2000, 0x0040, 0x1429, 0xa39d,
-+ 0x0010, 0xa484, 0x1000, 0x0040, 0x142f, 0xa39d, 0x0008, 0xa484,
-+ 0x4000, 0x0040, 0x1440, 0x810f, 0xa284, 0x4000, 0x0040, 0x143c,
-+ 0x1078, 0x1c02, 0x0078, 0x1440, 0x1078, 0x1bf4, 0x0078, 0x1440,
-+ 0x72cc, 0x82ff, 0x0040, 0x1472, 0x6808, 0xa206, 0x0040, 0x1472,
-+ 0xa2a4, 0x00ff, 0x2061, 0x3840, 0x6118, 0xa186, 0x0028, 0x0040,
-+ 0x1459, 0xa186, 0x0032, 0x0040, 0x145f, 0xa186, 0x003c, 0x0040,
-+ 0x1465, 0xa482, 0x0064, 0x0048, 0x146f, 0x0078, 0x1469, 0xa482,
-+ 0x0050, 0x0048, 0x146f, 0x0078, 0x1469, 0xa482, 0x0043, 0x0048,
-+ 0x146f, 0x71c4, 0x71c6, 0x027f, 0x72ca, 0x0078, 0x11d9, 0x6a0a,
-+ 0xa39d, 0x000a, 0x6804, 0xa305, 0x6806, 0x027f, 0x6b0c, 0x71c4,
-+ 0x0078, 0x11dd, 0x77c4, 0x1078, 0x1758, 0x2091, 0x8000, 0x6a14,
-+ 0x6b1c, 0x2091, 0x8001, 0x70c8, 0x6816, 0x70cc, 0x681e, 0x2708,
-+ 0x0078, 0x11dd, 0x2011, 0x3835, 0x220c, 0x70c4, 0x2012, 0x0078,
-+ 0x11df, 0x71c4, 0x72c8, 0x73cc, 0xa182, 0x0010, 0x00c8, 0x11d8,
-+ 0x1078, 0x1c10, 0x0078, 0x11dd, 0x77c4, 0x1078, 0x1758, 0x2091,
-+ 0x8000, 0x6a08, 0xa295, 0x0002, 0x6a0a, 0x2091, 0x8001, 0x2708,
-+ 0x0078, 0x11de, 0x77c4, 0x1078, 0x1758, 0x2091, 0x8000, 0x6a08,
-+ 0xa294, 0xfff9, 0x6a0a, 0x6804, 0xa005, 0x0040, 0x14b9, 0x1078,
-+ 0x1b49, 0x2091, 0x8001, 0x2708, 0x0078, 0x11de, 0x77c4, 0x1078,
-+ 0x1758, 0x2091, 0x8000, 0x6a08, 0xa295, 0x0004, 0x6a0a, 0x6804,
-+ 0xa005, 0x0040, 0x14cd, 0x1078, 0x1b49, 0x2091, 0x8001, 0x2708,
-+ 0x0078, 0x11de, 0x77c4, 0x2041, 0x0001, 0x2049, 0x0005, 0x2051,
-+ 0x0020, 0x2091, 0x8000, 0x1078, 0x1765, 0x2091, 0x8001, 0x2708,
-+ 0x6a08, 0x0078, 0x11de, 0x77c4, 0x72c8, 0x73cc, 0x77c6, 0x72ca,
-+ 0x73ce, 0x1078, 0x17e6, 0x00c0, 0x1501, 0x6818, 0xa005, 0x0040,
-+ 0x14fb, 0x2708, 0x1078, 0x1c20, 0x00c0, 0x14fb, 0x7817, 0xffff,
-+ 0x2091, 0x8001, 0x007c, 0x2091, 0x8001, 0x2001, 0x4005, 0x0078,
-+ 0x11e2, 0x2091, 0x8001, 0x0078, 0x11e0, 0x77c4, 0x77c6, 0x2041,
-+ 0x0021, 0x2049, 0x0005, 0x2051, 0x0020, 0x2091, 0x8000, 0x1078,
-+ 0x1765, 0x2061, 0x3840, 0x60a3, 0x0003, 0x67b6, 0x60a7, 0x0000,
-+ 0x7817, 0xffff, 0x1078, 0x1b49, 0x2091, 0x8001, 0x007c, 0x77c8,
-+ 0x77ca, 0x77c4, 0x77c6, 0xa7bc, 0xff00, 0x2091, 0x8000, 0x2061,
-+ 0x3840, 0x60a3, 0x0002, 0x60a7, 0x0000, 0x67b6, 0x7817, 0xffff,
-+ 0x1078, 0x1b49, 0x2091, 0x8001, 0x2041, 0x0021, 0x2049, 0x0004,
-+ 0x2051, 0x0010, 0x2091, 0x8000, 0x1078, 0x1765, 0x70c8, 0x683e,
-+ 0x8738, 0xa784, 0x001f, 0x00c0, 0x153c, 0x2091, 0x8001, 0x007c,
-+ 0x7898, 0xa084, 0x0003, 0x00c0, 0x156c, 0x2039, 0x0000, 0x2041,
-+ 0x0021, 0x2049, 0x0004, 0x2051, 0x0008, 0x1078, 0x1758, 0x2091,
-+ 0x8000, 0x6808, 0xa80d, 0x690a, 0x2091, 0x8001, 0x8738, 0xa784,
-+ 0x001f, 0x00c0, 0x1555, 0xa7bc, 0xff00, 0x873f, 0x8738, 0x873f,
-+ 0xa784, 0x0f00, 0x00c0, 0x1555, 0x2091, 0x8000, 0x2069, 0x0100,
-+ 0x6830, 0xa084, 0x0040, 0x0040, 0x1595, 0x684b, 0x0004, 0x20a9,
-+ 0x0014, 0x6848, 0xa084, 0x0004, 0x0040, 0x1582, 0x0070, 0x1582,
-+ 0x0078, 0x1579, 0x684b, 0x0009, 0x20a9, 0x0014, 0x6848, 0xa084,
-+ 0x0001, 0x0040, 0x158f, 0x0070, 0x158f, 0x0078, 0x1586, 0x20a9,
-+ 0x00fa, 0x0070, 0x1595, 0x0078, 0x1591, 0x2079, 0x3800, 0x7817,
-+ 0x0001, 0x2061, 0x3840, 0x60a3, 0x0001, 0x60a7, 0x0000, 0x60c3,
-+ 0x000f, 0x7898, 0xa085, 0x0002, 0x789a, 0x6808, 0xa084, 0xfffd,
-+ 0x680a, 0x681b, 0x0046, 0x2091, 0x8001, 0x007c, 0x7898, 0xa084,
-+ 0xfffd, 0x789a, 0xa084, 0x0001, 0x00c0, 0x15b8, 0x1078, 0x1830,
-+ 0x71c4, 0x71c6, 0x794a, 0x007c, 0x74c4, 0x73c8, 0x72cc, 0x74c6,
-+ 0x73ca, 0x72ce, 0x2079, 0x3800, 0x2009, 0x0040, 0x1078, 0x1735,
-+ 0x0040, 0x15fe, 0x1078, 0x1705, 0x0040, 0x15d2, 0x1078, 0x173e,
-+ 0x0078, 0x15fe, 0x6010, 0x2091, 0x8000, 0x7817, 0xffff, 0x2009,
-+ 0x3868, 0x200b, 0x0005, 0x8108, 0x200b, 0x0000, 0x8108, 0x230a,
-+ 0x8108, 0x220a, 0x8108, 0x240a, 0x8108, 0x200a, 0x8108, 0x200b,
-+ 0x0000, 0x8108, 0x2c0a, 0xa02e, 0x2530, 0x0e7e, 0x1078, 0x3199,
-+ 0x0e7f, 0x6592, 0x65a2, 0x6696, 0x66a6, 0x60ab, 0x0000, 0x60af,
-+ 0x0000, 0x1078, 0x1b49, 0x2091, 0x8001, 0x007c, 0x70c3, 0x4005,
-+ 0x0078, 0x11e3, 0x71c4, 0x70c7, 0x0000, 0x7906, 0x0078, 0x11e0,
-+ 0x71c4, 0x71c6, 0x2168, 0x0078, 0x160f, 0x2069, 0x1000, 0x690c,
-+ 0xa016, 0x2d04, 0xa210, 0x8d68, 0x8109, 0x00c0, 0x1611, 0xa285,
-+ 0x0000, 0x00c0, 0x161f, 0x70c3, 0x4000, 0x0078, 0x1621, 0x70c3,
-+ 0x4003, 0x70ca, 0x0078, 0x11e3, 0x71c4, 0x72c8, 0x73cc, 0x2100,
-+ 0xa184, 0xfffc, 0x00c0, 0x11ef, 0x2100, 0x0079, 0x162f, 0x1646,
-+ 0x165b, 0x165d, 0x165f, 0x70c3, 0x4003, 0x71ce, 0x72d2, 0x73d6,
-+ 0x0078, 0x1642, 0x70c3, 0x4000, 0x70cf, 0x0000, 0x70d3, 0x0000,
-+ 0x70d7, 0x0000, 0x77c6, 0x71ca, 0x0078, 0x11e0, 0x2031, 0x1661,
-+ 0x2624, 0x8630, 0x2412, 0x2204, 0xa446, 0x00c0, 0x1633, 0xa484,
-+ 0xffff, 0x00c0, 0x1648, 0x2031, 0x1661, 0x8210, 0x8319, 0xa384,
-+ 0xffff, 0x00c0, 0x1648, 0x0078, 0x163a, 0x0078, 0x163a, 0x0078,
-+ 0x163a, 0x5555, 0xaaaa, 0xffff, 0x0000, 0x77c4, 0x1078, 0x1758,
-+ 0x2091, 0x8000, 0x6830, 0xa084, 0xff00, 0x8007, 0x2010, 0x2091,
-+ 0x8001, 0x2708, 0x0078, 0x11de, 0x77c4, 0x1078, 0x1758, 0x2091,
-+ 0x8000, 0x6a34, 0x2091, 0x8001, 0x2708, 0x0078, 0x11de, 0x77c4,
-+ 0x077e, 0xa7bc, 0xff00, 0x20a9, 0x0020, 0x72c8, 0x8217, 0xa294,
-+ 0xff00, 0x1078, 0x1758, 0x2091, 0x8000, 0x6c30, 0x6a32, 0x2091,
-+ 0x8001, 0x8738, 0x00f0, 0x1689, 0x077f, 0x2708, 0x8427, 0xa4a4,
-+ 0x00ff, 0x2410, 0x0078, 0x11de, 0x77c4, 0x077e, 0xa7bc, 0xff00,
-+ 0x20a9, 0x0020, 0x72c8, 0x1078, 0x1758, 0x2091, 0x8000, 0x6c34,
-+ 0x6a36, 0x2091, 0x8001, 0x8738, 0x00f0, 0x16a3, 0x077f, 0x2708,
-+ 0x2410, 0x0078, 0x11de, 0x7960, 0x71c6, 0x71c4, 0xa182, 0x0003,
-+ 0x00c8, 0x11d8, 0x7962, 0x0078, 0x11e0, 0x7960, 0x71c6, 0x0078,
-+ 0x11e0, 0x7954, 0x71c6, 0x71c4, 0x7956, 0x7958, 0x71ca, 0x71c8,
-+ 0x795a, 0x795c, 0x71ce, 0x71cc, 0x795e, 0x0078, 0x11e0, 0x7954,
-+ 0x71c6, 0x7958, 0x71ca, 0x795c, 0x71ce, 0x0078, 0x11e0, 0x700c,
-+ 0xa084, 0x007f, 0x0040, 0x16e3, 0x7007, 0x0004, 0x7004, 0xa084,
-+ 0x0004, 0x00c0, 0x16de, 0x7017, 0x0000, 0x7112, 0x721a, 0x731e,
-+ 0x8108, 0x810c, 0x81a9, 0x8c98, 0x20a1, 0x0030, 0x6080, 0x20a2,
-+ 0x53a6, 0x780c, 0xa085, 0x0000, 0x7002, 0x7007, 0x0001, 0x7108,
-+ 0x8104, 0x00c8, 0x16f7, 0x7007, 0x0002, 0xa184, 0x000c, 0x710c,
-+ 0xa184, 0x0300, 0x7003, 0x0000, 0x007c, 0x700c, 0xa084, 0x007f,
-+ 0x0040, 0x1711, 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0,
-+ 0x170c, 0x7017, 0x0000, 0x7112, 0x721a, 0x731e, 0x2099, 0x0030,
-+ 0x8108, 0x81ac, 0x780c, 0xa085, 0x0001, 0x7002, 0x7007, 0x0001,
-+ 0x7008, 0x800c, 0x00c8, 0x1720, 0x7007, 0x0002, 0xa08c, 0x000c,
-+ 0x00c0, 0x1732, 0x710c, 0xa184, 0x0300, 0x00c0, 0x1732, 0x2ca0,
-+ 0x53a5, 0xa006, 0x7003, 0x0000, 0x007c, 0x7850, 0xa065, 0x0040,
-+ 0x173d, 0x2c04, 0x7852, 0x2063, 0x0000, 0x007c, 0x0f7e, 0x2079,
-+ 0x3800, 0x7850, 0x2062, 0x2c00, 0x7852, 0x0f7f, 0x007c, 0x2011,
-+ 0x5d00, 0x7a52, 0x2019, 0x0372, 0x8319, 0x0040, 0x1755, 0xa280,
-+ 0x002f, 0x2012, 0x2010, 0x0078, 0x174c, 0x2013, 0x0000, 0x007c,
-+ 0xa784, 0x0f00, 0x800b, 0xa784, 0x001f, 0x8003, 0x8003, 0x8003,
-+ 0x8003, 0xa105, 0xa0e8, 0x3b00, 0x007c, 0x1078, 0x1758, 0x2900,
-+ 0x682a, 0x2a00, 0x682e, 0x6808, 0xa084, 0xffef, 0xa80d, 0x690a,
-+ 0x2091, 0x8000, 0x2009, 0x384f, 0x210c, 0x6804, 0xa005, 0x0040,
-+ 0x1784, 0xa116, 0x00c0, 0x1784, 0x2060, 0x6000, 0x6806, 0x017e,
-+ 0x200b, 0x0000, 0x0078, 0x1787, 0x2009, 0x0000, 0x017e, 0x6804,
-+ 0xa065, 0x0040, 0x1798, 0x6000, 0x6806, 0x1078, 0x17ad, 0x1078,
-+ 0x18a4, 0x1078, 0x2b27, 0x6810, 0x8001, 0x6812, 0x00c0, 0x1787,
-+ 0x1078, 0x2b27, 0x017f, 0x6902, 0x6906, 0x2091, 0x8001, 0x007c,
-+ 0xa065, 0x0040, 0x17ac, 0x6098, 0x609b, 0x0000, 0x2008, 0x1078,
-+ 0x173e, 0x2100, 0x0078, 0x17a0, 0x007c, 0x6003, 0x0103, 0x20a9,
-+ 0x001c, 0xac80, 0x0004, 0x20a0, 0x2001, 0x0000, 0x40a4, 0x6828,
-+ 0x6016, 0x682c, 0x601e, 0x007c, 0x0e7e, 0x2071, 0x3840, 0x7040,
-+ 0xa08c, 0x0200, 0x00c0, 0x17ca, 0xa088, 0x3880, 0x2d0a, 0x8000,
-+ 0x7042, 0xa006, 0x0e7f, 0x007c, 0x0e7e, 0x2071, 0x3840, 0x2009,
-+ 0x3880, 0x7240, 0x8221, 0x8211, 0x0048, 0x17e4, 0x2104, 0x8108,
-+ 0xad06, 0x00c0, 0x17d3, 0x8119, 0x211e, 0x8108, 0x8318, 0x8211,
-+ 0x00c8, 0x17dc, 0x7442, 0xa006, 0x0e7f, 0x007c, 0x1078, 0x1758,
-+ 0x2091, 0x8000, 0x6804, 0x781e, 0xa065, 0x0040, 0x182f, 0x0078,
-+ 0x17f7, 0x2c00, 0x781e, 0x6000, 0xa065, 0x0040, 0x182f, 0x600c,
-+ 0xa306, 0x00c0, 0x17f1, 0x6008, 0xa206, 0x00c0, 0x17f1, 0x2c28,
-+ 0x2001, 0x384f, 0x2004, 0xac06, 0x0040, 0x182f, 0x6804, 0xac06,
-+ 0x00c0, 0x1814, 0x6000, 0x2060, 0x6806, 0xa005, 0x00c0, 0x1814,
-+ 0x6803, 0x0000, 0x0078, 0x181e, 0x6400, 0x781c, 0x2060, 0x6402,
-+ 0xa486, 0x0000, 0x00c0, 0x181e, 0x2c00, 0x6802, 0x2560, 0x1078,
-+ 0x17ad, 0x6017, 0x0005, 0x601f, 0x0020, 0x1078, 0x18a4, 0x1078,
-+ 0x2b27, 0x6810, 0x8001, 0x6812, 0x2001, 0xffff, 0xa005, 0x007c,
-+ 0x2039, 0x0000, 0x2041, 0x0021, 0x2049, 0x0004, 0x2051, 0x0008,
-+ 0x2091, 0x8000, 0x1078, 0x1765, 0x8738, 0xa784, 0x001f, 0x00c0,
-+ 0x183a, 0xa7bc, 0xff00, 0x873f, 0x8738, 0x873f, 0xa784, 0x0f00,
-+ 0x00c0, 0x183a, 0x2091, 0x8001, 0x007c, 0x0068, 0x185c, 0x2061,
-+ 0x0000, 0x6018, 0xa084, 0x0001, 0x00c0, 0x185c, 0x78ac, 0x78af,
-+ 0x0000, 0xa005, 0x00c0, 0x185d, 0x007c, 0xa08c, 0xfff0, 0x0040,
-+ 0x1863, 0x1078, 0x1ce7, 0x0079, 0x1865, 0x1875, 0x1877, 0x187d,
-+ 0x1881, 0x1875, 0x1885, 0x1875, 0x1875, 0x188b, 0x1875, 0x1892,
-+ 0x1896, 0x1875, 0x1875, 0x1875, 0x1875, 0x1078, 0x1ce7, 0x1078,
-+ 0x1830, 0x2001, 0x8001, 0x0078, 0x189c, 0x2001, 0x8003, 0x0078,
-+ 0x189c, 0x2001, 0x8004, 0x0078, 0x189c, 0x1078, 0x1830, 0x2001,
-+ 0x8006, 0x0078, 0x189c, 0x2001, 0x8009, 0x2011, 0x382c, 0x220c,
-+ 0x0078, 0x11ec, 0x2001, 0x800c, 0x0078, 0x189c, 0x1078, 0x1830,
-+ 0x2001, 0x800d, 0x0078, 0x189c, 0x70c2, 0x2061, 0x0000, 0x601b,
-+ 0x0001, 0x2091, 0x4080, 0x007c, 0x2c04, 0x6082, 0x2c08, 0x2063,
-+ 0x0000, 0x7864, 0x8000, 0x7866, 0x7868, 0xa005, 0x796a, 0x0040,
-+ 0x18b4, 0x2c02, 0x0078, 0x18b5, 0x796e, 0x007c, 0x0c7e, 0x2061,
-+ 0x3800, 0x6883, 0x0103, 0x2d08, 0x206b, 0x0000, 0x6064, 0x8000,
-+ 0x6066, 0x6068, 0xa005, 0x616a, 0x0040, 0x18c9, 0x2d02, 0x0078,
-+ 0x18cc, 0x616e, 0x1078, 0x2b41, 0x0c7f, 0x007c, 0x1078, 0x18df,
-+ 0x0040, 0x18de, 0x0c7e, 0x6098, 0xa065, 0x0040, 0x18d9, 0x1078,
-+ 0x17a0, 0x0c7f, 0x609b, 0x0000, 0x1078, 0x173e, 0x007c, 0x786c,
-+ 0xa065, 0x0040, 0x18f1, 0x2091, 0x8000, 0x7864, 0x8001, 0x7866,
-+ 0x2c04, 0x786e, 0xa005, 0x00c0, 0x18ef, 0x786a, 0x8000, 0x2091,
-+ 0x8001, 0x007c, 0x7898, 0xa005, 0x00c0, 0x194d, 0x7974, 0x70d0,
-+ 0x0005, 0x0005, 0x72d0, 0xa206, 0x00c0, 0x18f7, 0x2200, 0xa106,
-+ 0x00c0, 0x190e, 0x7804, 0xa005, 0x0040, 0x194d, 0x7807, 0x0000,
-+ 0x0068, 0x194d, 0x2091, 0x4080, 0x0078, 0x194d, 0x1078, 0x1735,
-+ 0x0040, 0x194d, 0x7a7c, 0x7b78, 0xa184, 0xff00, 0x0040, 0x1921,
-+ 0x810f, 0x810c, 0x810c, 0x8004, 0x8004, 0x8007, 0xa100, 0x0078,
-+ 0x1924, 0x8107, 0x8004, 0x8004, 0xa210, 0xa399, 0x0000, 0x2009,
-+ 0x0040, 0x1078, 0x1705, 0x0040, 0x1944, 0x1078, 0x173e, 0x7880,
-+ 0x8000, 0x7882, 0xa086, 0x0002, 0x00c0, 0x194d, 0x2091, 0x8000,
-+ 0x78af, 0x0002, 0x7883, 0x0000, 0x7898, 0xa085, 0x0003, 0x789a,
-+ 0x2091, 0x8001, 0x0078, 0x194d, 0x7883, 0x0000, 0x1078, 0x1a99,
-+ 0x6000, 0xa084, 0x0007, 0x0079, 0x194e, 0x007c, 0x1956, 0x1965,
-+ 0x1985, 0x1956, 0x1997, 0x1956, 0x1956, 0x1956, 0x2039, 0x0400,
-+ 0x78a8, 0xa705, 0x78aa, 0x6004, 0xa705, 0x6006, 0x1078, 0x19e2,
-+ 0x6018, 0x78a6, 0x1078, 0x1a81, 0x007c, 0x78a8, 0xa084, 0x0100,
-+ 0x0040, 0x196c, 0x0078, 0x1956, 0x78ab, 0x0000, 0x6000, 0x8007,
-+ 0xa084, 0x00ff, 0x789e, 0x8001, 0x609b, 0x0000, 0x0040, 0x1982,
-+ 0x1078, 0x19e2, 0x0040, 0x1982, 0x78a8, 0xa085, 0x0100, 0x78aa,
-+ 0x0078, 0x1984, 0x1078, 0x1a06, 0x007c, 0x78a8, 0xa08c, 0x0e00,
-+ 0x00c0, 0x198e, 0xa084, 0x0100, 0x00c0, 0x1990, 0x0078, 0x1956,
-+ 0x1078, 0x19e2, 0x00c0, 0x1996, 0x1078, 0x1a06, 0x007c, 0x78a8,
-+ 0xa084, 0x0100, 0x0040, 0x199e, 0x0078, 0x1956, 0x78ab, 0x0000,
-+ 0x6710, 0x2011, 0x0001, 0x20a9, 0x0001, 0x6014, 0xa084, 0x00ff,
-+ 0xa005, 0x0040, 0x19c1, 0x2011, 0x0001, 0xa7bc, 0xff00, 0x20a9,
-+ 0x0020, 0xa08e, 0x0001, 0x0040, 0x19c1, 0x2039, 0x0000, 0x2011,
-+ 0x0002, 0x20a9, 0x0100, 0xa08e, 0x0002, 0x0040, 0x19c1, 0x0078,
-+ 0x19df, 0x1078, 0x1758, 0x2d00, 0x2091, 0x8000, 0x682b, 0x0000,
-+ 0x682f, 0x0000, 0x6808, 0xa084, 0xffde, 0x680a, 0x2d00, 0xa080,
-+ 0x0010, 0x2068, 0x2091, 0x8001, 0x0070, 0x19d8, 0x0078, 0x19c4,
-+ 0x8211, 0x0040, 0x19df, 0x20a9, 0x0100, 0x0078, 0x19c4, 0x1078,
-+ 0x173e, 0x007c, 0x78a0, 0xa06d, 0x00c0, 0x19ed, 0x2c00, 0x78a2,
-+ 0x78a6, 0x609b, 0x0000, 0x0078, 0x19f9, 0x2c00, 0x689a, 0x609b,
-+ 0x0000, 0x78a2, 0x2d00, 0x6002, 0x78a4, 0xad06, 0x00c0, 0x19f9,
-+ 0x6002, 0x789c, 0x8001, 0x789e, 0x00c0, 0x1a05, 0x78a8, 0xa084,
-+ 0x0000, 0x78aa, 0x78a4, 0x2060, 0xa006, 0x007c, 0xa02e, 0x2530,
-+ 0x6118, 0xa184, 0x0060, 0x619e, 0x0040, 0x1a12, 0x0e7e, 0x1078,
-+ 0x3199, 0x0e7f, 0x6592, 0x65a2, 0x6696, 0x66a6, 0x60ab, 0x0000,
-+ 0x60af, 0x0000, 0x6710, 0x1078, 0x1758, 0x2091, 0x8000, 0x6808,
-+ 0xa084, 0x0001, 0x0040, 0x1a34, 0x2091, 0x8001, 0x1078, 0x17ad,
-+ 0x2091, 0x8000, 0x1078, 0x18a4, 0x2091, 0x8001, 0x78a3, 0x0000,
-+ 0x78a7, 0x0000, 0x0078, 0x1a80, 0x6020, 0xa096, 0x0001, 0x00c0,
-+ 0x1a3b, 0x8000, 0x6022, 0x6a10, 0x6814, 0x2091, 0x8001, 0xa202,
-+ 0x0048, 0x1a4a, 0x0040, 0x1a4a, 0x2039, 0x0200, 0x1078, 0x1a81,
-+ 0x0078, 0x1a80, 0x2c08, 0x2091, 0x8000, 0x6800, 0xa065, 0x0040,
-+ 0x1a52, 0x6102, 0x6902, 0x00c0, 0x1a56, 0x6906, 0x2160, 0x6003,
-+ 0x0000, 0x6810, 0x8000, 0x6812, 0x78b8, 0x8000, 0x78ba, 0x2091,
-+ 0x8001, 0x6808, 0xa08c, 0x0040, 0x0040, 0x1a76, 0xa086, 0x0040,
-+ 0x680a, 0x1078, 0x17bc, 0x017e, 0x007e, 0x6930, 0x2100, 0x810f,
-+ 0xa105, 0x6832, 0x6934, 0x693a, 0x007f, 0x017f, 0x2091, 0x8000,
-+ 0x1078, 0x1b49, 0x2091, 0x8001, 0x78a7, 0x0000, 0x78a3, 0x0000,
-+ 0x007c, 0x6004, 0xa705, 0x6006, 0x2091, 0x8000, 0x1078, 0x18a4,
-+ 0x2091, 0x8001, 0x78a4, 0xa065, 0x0040, 0x1a94, 0x6098, 0x78a6,
-+ 0x609b, 0x0000, 0x0078, 0x1a84, 0x78a3, 0x0000, 0x78a7, 0x0000,
-+ 0x007c, 0x7970, 0x7874, 0x8000, 0xa10a, 0x00c8, 0x1aa0, 0xa006,
-+ 0x7876, 0x70d2, 0x7804, 0xa005, 0x0040, 0x1aae, 0x8001, 0x7806,
-+ 0x00c0, 0x1aae, 0x0068, 0x1aae, 0x2091, 0x4080, 0x007c, 0x0068,
-+ 0x1ac9, 0x2029, 0x0000, 0x786c, 0xa065, 0x0040, 0x1ac4, 0x1078,
-+ 0x1aca, 0x0040, 0x1ac4, 0x057e, 0x1078, 0x1ae8, 0x057f, 0x00c0,
-+ 0x1ac4, 0x8528, 0x0078, 0x1ab3, 0x85ff, 0x0040, 0x1ac9, 0x2091,
-+ 0x4080, 0x007c, 0x2091, 0x8000, 0x7b84, 0x7988, 0x72d4, 0x0005,
-+ 0x0005, 0x70d4, 0xa206, 0x00c0, 0x1ace, 0x2200, 0xa102, 0x00c0,
-+ 0x1ade, 0x2300, 0x2091, 0x8001, 0xa005, 0x007c, 0x0048, 0x1ae4,
-+ 0xa302, 0x2091, 0x8001, 0x007c, 0x8002, 0x2091, 0x8001, 0x007c,
-+ 0x2091, 0x8000, 0x2071, 0x0020, 0x7004, 0xa005, 0x00c0, 0x1b3f,
-+ 0x7008, 0x7208, 0xa206, 0x00c0, 0x1b3f, 0xa286, 0x0002, 0x00c0,
-+ 0x1b3f, 0x2071, 0x0010, 0xa184, 0xff00, 0x0040, 0x1b08, 0x810f,
-+ 0x810c, 0x810c, 0x8004, 0x8004, 0x8007, 0xa100, 0x0078, 0x1b0b,
-+ 0x8107, 0x8004, 0x8004, 0x7a90, 0x7b8c, 0xa210, 0xa399, 0x0000,
-+ 0x2009, 0x0018, 0x6024, 0xa005, 0x0040, 0x1b18, 0x2009, 0x0040,
-+ 0x1078, 0x16d7, 0x0040, 0x1b31, 0x7894, 0x8000, 0x7896, 0xa086,
-+ 0x0002, 0x00c0, 0x1b3f, 0x2091, 0x8000, 0x78af, 0x0003, 0x7897,
-+ 0x0000, 0x7898, 0xa085, 0x0300, 0x789a, 0x2091, 0x8001, 0x0078,
-+ 0x1b3f, 0x7897, 0x0000, 0x1078, 0x18ce, 0x7984, 0x7888, 0x8000,
-+ 0xa10a, 0x00c8, 0x1b3c, 0xa006, 0x788a, 0x70d6, 0xa006, 0x2071,
-+ 0x0010, 0x2091, 0x8001, 0x007c, 0x2009, 0x3868, 0x2091, 0x8000,
-+ 0x200a, 0x0f7e, 0x2079, 0x0100, 0x2009, 0x3840, 0x2104, 0xa086,
-+ 0x0000, 0x00c0, 0x1b62, 0x2009, 0x3812, 0x2104, 0xa005, 0x00c0,
-+ 0x1b62, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x1b62, 0x0018, 0x1b62,
-+ 0x781b, 0x0044, 0x0f7f, 0x007c, 0x127e, 0x2091, 0x2300, 0x2071,
-+ 0x3840, 0x2079, 0x0100, 0x2019, 0x305e, 0x20a1, 0x012b, 0x2304,
-+ 0xa005, 0x0040, 0x1b7c, 0x789a, 0x8318, 0x23ac, 0x8318, 0x2398,
-+ 0x53a6, 0x3318, 0x0078, 0x1b6f, 0x789b, 0x0020, 0x20a9, 0x0010,
-+ 0x78af, 0x0000, 0x78af, 0x0220, 0x0070, 0x1b88, 0x0078, 0x1b80,
-+ 0x7003, 0x0000, 0x1078, 0x1c87, 0x7004, 0xa084, 0x000f, 0xa085,
-+ 0x6280, 0x7806, 0x780f, 0x9200, 0x7843, 0x00d8, 0x7853, 0x0080,
-+ 0x780b, 0x0008, 0x7047, 0x387f, 0x7043, 0x0000, 0x127f, 0x2000,
-+ 0x007c, 0xa18c, 0x000f, 0x2011, 0x0101, 0x2204, 0xa084, 0xfff0,
-+ 0xa105, 0x2012, 0x1078, 0x1c87, 0x007c, 0x2011, 0x0101, 0x20a9,
-+ 0x0009, 0x810b, 0x0070, 0x1bb6, 0x0078, 0x1bb1, 0xa18c, 0x0e00,
-+ 0x2204, 0xa084, 0xf1ff, 0xa105, 0x2012, 0x007c, 0x2009, 0x0101,
-+ 0x20a9, 0x0005, 0x8213, 0x0070, 0x1bc7, 0x0078, 0x1bc2, 0xa294,
-+ 0x00e0, 0x2104, 0xa084, 0xff1f, 0xa205, 0x200a, 0x007c, 0x2011,
-+ 0x0101, 0x20a9, 0x000c, 0x810b, 0x0070, 0x1bd8, 0x0078, 0x1bd3,
-+ 0xa18c, 0xf000, 0x2204, 0xa084, 0x0fff, 0xa105, 0x2012, 0x007c,
-+ 0x2011, 0x0102, 0x2204, 0xa084, 0xffcf, 0xa105, 0x2012, 0x007c,
-+ 0x8103, 0x8003, 0xa080, 0x0020, 0x0c7e, 0x2061, 0x0100, 0x609a,
-+ 0x62ac, 0x63ac, 0x0c7f, 0x007c, 0x8103, 0x8003, 0xa080, 0x0022,
-+ 0x0c7e, 0x2061, 0x0100, 0x609a, 0x60a4, 0xa084, 0xffdf, 0x60ae,
-+ 0x0c7f, 0x007c, 0x8103, 0x8003, 0xa080, 0x0022, 0x0c7e, 0x2061,
-+ 0x0100, 0x609a, 0x60a4, 0xa085, 0x0020, 0x60ae, 0x0c7f, 0x007c,
-+ 0x8103, 0x8003, 0xa080, 0x0020, 0x0c7e, 0x2061, 0x0100, 0x609a,
-+ 0x60a4, 0x62ae, 0x2010, 0x60a4, 0x63ae, 0x2018, 0x0c7f, 0x007c,
-+ 0x2091, 0x8000, 0x0c7e, 0x0e7e, 0x6818, 0xa005, 0x0040, 0x1c65,
-+ 0x2061, 0x5c00, 0x1078, 0x1c6d, 0x0040, 0x1c53, 0x20a9, 0x0000,
-+ 0x2061, 0x5b00, 0x0c7e, 0x1078, 0x1c6d, 0x0040, 0x1c3f, 0x0c7f,
-+ 0x8c60, 0x0070, 0x1c3d, 0x0078, 0x1c32, 0x0078, 0x1c65, 0x007f,
-+ 0xa082, 0x5b00, 0x2071, 0x3840, 0x70ba, 0x601c, 0xa085, 0x0800,
-+ 0x601e, 0x71b6, 0x60a7, 0x0000, 0x2001, 0x0004, 0x70a2, 0x1078,
-+ 0x1b44, 0x0078, 0x1c61, 0x2071, 0x3840, 0x601c, 0xa085, 0x0800,
-+ 0x601e, 0x71b6, 0x60a7, 0x0000, 0x2001, 0x0006, 0x70a2, 0x1078,
-+ 0x1b44, 0x2001, 0x0000, 0x0078, 0x1c67, 0x2001, 0x0001, 0x2091,
-+ 0x8001, 0xa005, 0x0e7f, 0x0c7f, 0x007c, 0x2c04, 0xa005, 0x0040,
-+ 0x1c84, 0x2060, 0x600c, 0xa306, 0x00c0, 0x1c81, 0x6008, 0xa206,
-+ 0x00c0, 0x1c81, 0x6010, 0xa106, 0x00c0, 0x1c81, 0xa006, 0x0078,
-+ 0x1c86, 0x6000, 0x0078, 0x1c6e, 0xa085, 0x0001, 0x007c, 0x2011,
-+ 0x3841, 0x220c, 0xa18c, 0x000f, 0x2011, 0x013b, 0x2204, 0xa084,
-+ 0x0100, 0x0040, 0x1c96, 0x2021, 0xff00, 0x2122, 0x007c, 0x0e7e,
-+ 0x68e4, 0xa08c, 0x0020, 0x0040, 0x1ce5, 0xa084, 0x0006, 0x00c0,
-+ 0x1ce5, 0x6010, 0x8007, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003,
-+ 0xa0f0, 0x3a80, 0x7004, 0xa084, 0x000a, 0x00c0, 0x1ce5, 0x7108,
-+ 0xa194, 0xff00, 0x0040, 0x1ce5, 0xa18c, 0x00ff, 0x7104, 0xa084,
-+ 0x0014, 0x00c0, 0x1cd2, 0x017e, 0x611c, 0xa18d, 0x0002, 0x611e,
-+ 0x017f, 0xa085, 0x0014, 0x7006, 0x2001, 0x000c, 0xa106, 0x0040,
-+ 0x1cce, 0x2100, 0x8003, 0x2008, 0x0078, 0x1ce2, 0x2009, 0x0019,
-+ 0x0078, 0x1ce2, 0x2011, 0x0000, 0x7000, 0xa084, 0xdfff, 0x7002,
-+ 0x7004, 0xa084, 0xffef, 0x7006, 0x017e, 0x611c, 0xa18d, 0x0002,
-+ 0x611e, 0x017f, 0x2100, 0xa205, 0x700a, 0x0e7f, 0x007c, 0x0068,
-+ 0x1ce7, 0x007e, 0x2071, 0x0000, 0x7018, 0xa084, 0x0001, 0x00c0,
-+ 0x1cec, 0x007f, 0x2e08, 0x2071, 0x0010, 0x70ca, 0x007f, 0x70c6,
-+ 0x70c3, 0x8002, 0x2071, 0x0000, 0x701b, 0x0001, 0x2091, 0x4080,
-+ 0x007f, 0x2070, 0x007f, 0x0078, 0x1d03, 0x107e, 0x007e, 0x127e,
-+ 0x2091, 0x2300, 0x7f3c, 0x7e58, 0x7c30, 0x7d38, 0xa594, 0x003f,
-+ 0xa484, 0x4000, 0x0040, 0x1d1a, 0xa784, 0x007c, 0x00c0, 0x3022,
-+ 0x1078, 0x1ce7, 0xa49c, 0x000f, 0xa382, 0x0004, 0x0050, 0x1d22,
-+ 0x1078, 0x1ce7, 0x8507, 0xa084, 0x000f, 0x0079, 0x1d27, 0x21a1,
-+ 0x2251, 0x2277, 0x24cf, 0x2787, 0x27cf, 0x2808, 0x2883, 0x28dd,
-+ 0x2962, 0x1d4d, 0x1d37, 0x1fb8, 0x208d, 0x2766, 0x1d37, 0x1078,
-+ 0x1ce7, 0x0018, 0x1d0a, 0x127f, 0x2091, 0x8001, 0x007f, 0x107f,
-+ 0x007c, 0x7003, 0x0000, 0x703f, 0x0000, 0x7030, 0xa005, 0x0040,
-+ 0x1d4b, 0x7033, 0x0000, 0x0018, 0x1d0a, 0x705c, 0xa005, 0x00c0,
-+ 0x1df8, 0x70a0, 0xa084, 0x001f, 0x0079, 0x1d56, 0x1e18, 0x1d5e,
-+ 0x1d6c, 0x1d8d, 0x1db3, 0x1ddf, 0x1ddd, 0x1d5e, 0x7808, 0xa084,
-+ 0xfffd, 0x780a, 0x2009, 0x0046, 0x1078, 0x260f, 0x00c0, 0x1d6a,
-+ 0x7003, 0x0004, 0x0078, 0x1d39, 0x1078, 0x2fe4, 0x00c0, 0x1d8b,
-+ 0x70b4, 0x8007, 0x789b, 0x007e, 0x78aa, 0x789b, 0x0010, 0x78ab,
-+ 0x000c, 0x789b, 0x0060, 0x78ab, 0x0001, 0x785b, 0x0004, 0x2009,
-+ 0x00f7, 0x1078, 0x260d, 0x00c0, 0x1d8b, 0x7003, 0x0004, 0x70c3,
-+ 0x000f, 0x7033, 0x3870, 0x0078, 0x1d39, 0x1078, 0x2fe4, 0x00c0,
-+ 0x1db1, 0x71b4, 0x8107, 0x789b, 0x007e, 0x78aa, 0x789b, 0x0010,
-+ 0xa18c, 0x0007, 0xa18d, 0x00c0, 0x79aa, 0x78ab, 0x0006, 0x789b,
-+ 0x0060, 0x78ab, 0x0002, 0x785b, 0x0004, 0x2009, 0x00f7, 0x1078,
-+ 0x260d, 0x00c0, 0x1db1, 0x7003, 0x0004, 0x70c3, 0x000f, 0x7033,
-+ 0x3870, 0x0078, 0x1d39, 0x1078, 0x2fe4, 0x00c0, 0x1ddb, 0x71b4,
-+ 0x8107, 0x789b, 0x007e, 0x78aa, 0x789b, 0x0010, 0xa18c, 0x0007,
-+ 0xa18d, 0x00c0, 0x79aa, 0x78ab, 0x0020, 0x71b8, 0x79aa, 0x78ab,
-+ 0x000d, 0x789b, 0x0060, 0x78ab, 0x0004, 0x785b, 0x0004, 0x2009,
-+ 0x00f7, 0x1078, 0x260d, 0x00c0, 0x1ddb, 0x7003, 0x0004, 0x70c3,
-+ 0x000f, 0x7033, 0x3870, 0x0078, 0x1d39, 0x0078, 0x1d8d, 0x1078,
-+ 0x2fe4, 0x00c0, 0x1d39, 0x70bc, 0x2068, 0x789b, 0x0010, 0x6f10,
-+ 0x1078, 0x2f11, 0x2c50, 0x6810, 0xa084, 0x001f, 0xa085, 0x0080,
-+ 0x78aa, 0x6e18, 0x2041, 0x0001, 0x2001, 0x0004, 0x0078, 0x1f41,
-+ 0x1078, 0x2fe4, 0x00c0, 0x1d39, 0x789b, 0x0010, 0x705c, 0x2068,
-+ 0x6f10, 0x1078, 0x2f11, 0x2c50, 0x6008, 0xa085, 0x0010, 0x600a,
-+ 0x6810, 0xa084, 0x001f, 0xa085, 0x0080, 0x78aa, 0x2031, 0x0020,
-+ 0x2041, 0x0001, 0x1078, 0x304b, 0x2001, 0x0003, 0x0078, 0x1f2c,
-+ 0x0018, 0x1d0a, 0x7440, 0xa485, 0x0000, 0x0040, 0x1e32, 0xa080,
-+ 0x3880, 0x2030, 0x7144, 0x8108, 0xa12a, 0x0048, 0x1e29, 0x2009,
-+ 0x3880, 0x2164, 0x6504, 0x85ff, 0x00c0, 0x1e3f, 0x8421, 0x00c0,
-+ 0x1e23, 0x7146, 0x7003, 0x0000, 0x703f, 0x0000, 0x0078, 0x1d39,
-+ 0x7640, 0xa6b0, 0x3880, 0x7144, 0x2600, 0x0078, 0x1e2e, 0x7146,
-+ 0x2568, 0x2558, 0x753e, 0x2c50, 0x603c, 0xa085, 0x0000, 0x00c0,
-+ 0x1e3c, 0x6708, 0x7736, 0xa784, 0x033f, 0x0040, 0x1e75, 0xa784,
-+ 0x0021, 0x00c0, 0x1e3c, 0xa784, 0x0002, 0x0040, 0x1e5e, 0xa784,
-+ 0x0004, 0x0040, 0x1e3c, 0xa7bc, 0xfffb, 0x670a, 0xa784, 0x0008,
-+ 0x00c0, 0x1e3c, 0xa784, 0x0010, 0x00c0, 0x1e3c, 0xa184, 0x0200,
-+ 0x00c0, 0x1e3c, 0xa784, 0x0100, 0x0040, 0x1e75, 0x6018, 0xa005,
-+ 0x00c0, 0x1e3c, 0xa7bc, 0xfeff, 0x670a, 0x681f, 0x0000, 0x6e18,
-+ 0xa684, 0x000e, 0x6118, 0x0040, 0x1e85, 0x601c, 0xa102, 0x0048,
-+ 0x1e92, 0x0040, 0x1e92, 0x0078, 0x1e38, 0x81ff, 0x0040, 0x1e92,
-+ 0x6828, 0x8007, 0xa084, 0x00ff, 0xa082, 0x0003, 0x0040, 0x1e92,
-+ 0x00c0, 0x1e38, 0xa184, 0x0400, 0x00c0, 0x1ea1, 0x6130, 0xa18c,
-+ 0xff00, 0x810f, 0x6030, 0xa084, 0xff00, 0xa105, 0x6032, 0x0078,
-+ 0x1ea5, 0x6034, 0x603a, 0xa7bc, 0xfbff, 0xa784, 0x0080, 0x00c0,
-+ 0x1eab, 0x700c, 0x6022, 0xa7bc, 0xff7f, 0x670a, 0x6b10, 0x8307,
-+ 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa080, 0x3a80, 0x2060,
-+ 0x2048, 0x704a, 0x6000, 0x704e, 0x6004, 0x7052, 0x2a60, 0x0018,
-+ 0x1d0a, 0x789b, 0x0010, 0xa046, 0x1078, 0x2fe4, 0x00c0, 0x1d39,
-+ 0x6b10, 0xa39c, 0x001f, 0xa39d, 0x00c0, 0x704c, 0xa084, 0x8000,
-+ 0x0040, 0x1ed6, 0xa684, 0x0001, 0x0040, 0x1ed8, 0xa39c, 0xffbf,
-+ 0xa684, 0x0010, 0x0040, 0x1ede, 0xa39d, 0x0020, 0x7baa, 0x8840,
-+ 0xa684, 0x000e, 0x00c0, 0x1ee9, 0xa7bd, 0x0010, 0x670a, 0x0078,
-+ 0x1f2a, 0x714c, 0xa18c, 0x0800, 0x0040, 0x2b74, 0x2011, 0x0021,
-+ 0x8004, 0x8004, 0x0048, 0x1f00, 0x2011, 0x0022, 0x8004, 0x0048,
-+ 0x1f00, 0x2011, 0x0020, 0x8004, 0x0048, 0x1f00, 0x0040, 0x1f2a,
-+ 0x7aaa, 0x8840, 0x1078, 0x2ffd, 0x6a10, 0x610c, 0x8108, 0xa18c,
-+ 0x00ff, 0xa1e0, 0x5b00, 0x2c64, 0x8cff, 0x0040, 0x1f21, 0x6010,
-+ 0xa206, 0x00c0, 0x1f0b, 0x60b4, 0x8001, 0x60b6, 0x00c0, 0x1f06,
-+ 0x0c7e, 0x2a60, 0x6008, 0xa085, 0x0100, 0x600a, 0x0c7f, 0x0078,
-+ 0x1e18, 0x1078, 0x2fe4, 0x00c0, 0x1d39, 0x2a60, 0x610e, 0x79aa,
-+ 0x8840, 0x712e, 0x2001, 0x0001, 0x007e, 0x7150, 0xa184, 0x0018,
-+ 0x0040, 0x1f40, 0xa184, 0x0010, 0x0040, 0x1f3a, 0x1078, 0x2d3d,
-+ 0x00c0, 0x1f40, 0xa184, 0x0008, 0x0040, 0x1f40, 0x1078, 0x2c58,
-+ 0x007f, 0x7002, 0xa68c, 0x0060, 0x88ff, 0x0040, 0x1f49, 0xa18d,
-+ 0x0004, 0x795a, 0x69b2, 0x789b, 0x0060, 0x2800, 0x78aa, 0x789b,
-+ 0x0061, 0x6814, 0xa085, 0x8000, 0x6816, 0x78aa, 0x157e, 0x137e,
-+ 0x147e, 0x20a1, 0x012c, 0x789b, 0x0000, 0x8000, 0x80ac, 0xad80,
-+ 0x000a, 0x2098, 0x53a6, 0x147f, 0x137f, 0x157f, 0x6810, 0x8007,
-+ 0x789b, 0x007e, 0x78aa, 0x6d90, 0x7dd6, 0x7dde, 0x6e94, 0x7ed2,
-+ 0x7eda, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x1f78, 0x0098, 0x1f80,
-+ 0x6008, 0xa084, 0xffef, 0x600a, 0x1078, 0x2ffd, 0x0078, 0x1d41,
-+ 0x7200, 0xa284, 0x0007, 0xa086, 0x0001, 0x00c0, 0x1f8d, 0x781b,
-+ 0x0049, 0x1078, 0x2ffd, 0x0078, 0x1f9e, 0x6ab0, 0xa295, 0x2000,
-+ 0x7a5a, 0x781b, 0x0049, 0x1078, 0x2ffd, 0x7200, 0x2500, 0xa605,
-+ 0x0040, 0x1f9e, 0xa284, 0x0007, 0x1079, 0x1fae, 0xad80, 0x0008,
-+ 0x7032, 0xa284, 0x0007, 0xa086, 0x0001, 0x00c0, 0x1fac, 0x6018,
-+ 0x8000, 0x601a, 0x1078, 0x2b4b, 0x0078, 0x1d39, 0x1fb6, 0x3376,
-+ 0x3376, 0x3365, 0x3376, 0x1fb6, 0x1fb6, 0x1fb6, 0x1078, 0x1ce7,
-+ 0x7808, 0xa084, 0xfffd, 0x780a, 0x0f7e, 0x2079, 0x3800, 0x7898,
-+ 0x0f7f, 0xa084, 0x0001, 0x0040, 0x1fde, 0x70a0, 0xa086, 0x0001,
-+ 0x00c0, 0x1fcd, 0x70a2, 0x0078, 0x2071, 0x70a0, 0xa086, 0x0005,
-+ 0x00c0, 0x1fdc, 0x70bc, 0x2068, 0x6817, 0x0004, 0x6813, 0x0000,
-+ 0x681c, 0xa085, 0x0008, 0x681e, 0x70a3, 0x0000, 0x157e, 0x2011,
-+ 0x0004, 0x71a0, 0xa186, 0x0001, 0x0040, 0x2000, 0xa186, 0x0007,
-+ 0x00c0, 0x1ff0, 0x2009, 0x382b, 0x200b, 0x0005, 0x0078, 0x2000,
-+ 0x2009, 0x3813, 0x2104, 0x2009, 0x3812, 0x200a, 0x2009, 0x382b,
-+ 0x200b, 0x0001, 0x70a3, 0x0000, 0x70a7, 0x0001, 0x0078, 0x2002,
-+ 0x70a3, 0x0000, 0x1078, 0x314d, 0x20a9, 0x0010, 0x2039, 0x0000,
-+ 0x1078, 0x2e16, 0xa7b8, 0x0100, 0x0070, 0x2010, 0x0078, 0x2008,
-+ 0x7000, 0x2020, 0x0079, 0x2014, 0x2042, 0x202b, 0x202b, 0x201e,
-+ 0x2042, 0x2042, 0x201c, 0x201c, 0x1078, 0x1ce7, 0x2021, 0x3857,
-+ 0x2404, 0xa005, 0x0040, 0x202b, 0xad06, 0x00c0, 0x202b, 0x6800,
-+ 0x2022, 0x0078, 0x203b, 0x681c, 0xa084, 0x0001, 0x00c0, 0x2037,
-+ 0x6f10, 0x1078, 0x2f11, 0x1078, 0x2b06, 0x0078, 0x203b, 0x7054,
-+ 0x2060, 0x6800, 0x6002, 0x6a16, 0x681c, 0xa085, 0x0008, 0x681e,
-+ 0x1078, 0x18b6, 0x2021, 0x5c00, 0x1078, 0x2077, 0x2021, 0x3857,
-+ 0x1078, 0x2077, 0x20a9, 0x0000, 0x2021, 0x5b00, 0x1078, 0x2077,
-+ 0x8420, 0x0070, 0x2055, 0x0078, 0x204e, 0x1078, 0x2b55, 0x2061,
-+ 0x3b00, 0x2021, 0x0002, 0x20a9, 0x0100, 0x6018, 0x6110, 0xa102,
-+ 0x6012, 0x601b, 0x0000, 0xace0, 0x0010, 0x0070, 0x2069, 0x0078,
-+ 0x205d, 0x2009, 0x382f, 0x200b, 0x0000, 0x8421, 0x00c0, 0x205b,
-+ 0x157f, 0x7003, 0x0000, 0x703f, 0x0000, 0x0078, 0x1d39, 0x047e,
-+ 0x2404, 0xa005, 0x0040, 0x2089, 0x2068, 0x6800, 0x007e, 0x6a16,
-+ 0x681c, 0xa085, 0x0008, 0x681e, 0x1078, 0x18b6, 0x007f, 0x0078,
-+ 0x2079, 0x047f, 0x2023, 0x0000, 0x007c, 0xa282, 0x0003, 0x0050,
-+ 0x2093, 0x1078, 0x1ce7, 0x2300, 0x0079, 0x2096, 0x2099, 0x210c,
-+ 0x211a, 0xa282, 0x0002, 0x0040, 0x209f, 0x1078, 0x1ce7, 0x70a0,
-+ 0x70a3, 0x0000, 0x70c3, 0x0000, 0x0079, 0x20a6, 0x20ae, 0x20ae,
-+ 0x20b0, 0x20e4, 0x2b7a, 0x20ae, 0x20e4, 0x20ae, 0x1078, 0x1ce7,
-+ 0x77b4, 0x1078, 0x2e16, 0x77b4, 0xa7bc, 0x0f00, 0x1078, 0x2f11,
-+ 0x6018, 0xa005, 0x0040, 0x20db, 0x2021, 0x5c00, 0x2009, 0x0004,
-+ 0x2011, 0x0010, 0x1078, 0x216a, 0x0040, 0x20db, 0x157e, 0x20a9,
-+ 0x0000, 0x2021, 0x5b00, 0x047e, 0x2009, 0x0004, 0x2011, 0x0010,
-+ 0x1078, 0x216a, 0x047f, 0x0040, 0x20da, 0x8420, 0x0070, 0x20da,
-+ 0x0078, 0x20cb, 0x157f, 0x8738, 0xa784, 0x001f, 0x00c0, 0x20b6,
-+ 0x0078, 0x1d41, 0x0078, 0x1d41, 0x77b4, 0x1078, 0x2f11, 0x6018,
-+ 0xa005, 0x0040, 0x210a, 0x2021, 0x5c00, 0x2009, 0x0005, 0x2011,
-+ 0x0020, 0x1078, 0x216a, 0x0040, 0x210a, 0x157e, 0x20a9, 0x0000,
-+ 0x2021, 0x5b00, 0x047e, 0x2009, 0x0005, 0x2011, 0x0020, 0x1078,
-+ 0x216a, 0x047f, 0x0040, 0x2109, 0x8420, 0x0070, 0x2109, 0x0078,
-+ 0x20fa, 0x157f, 0x0078, 0x1d41, 0x2200, 0x0079, 0x210f, 0x2112,
-+ 0x2114, 0x2114, 0x1078, 0x1ce7, 0x70a3, 0x0000, 0x70a7, 0x0001,
-+ 0x0078, 0x1d39, 0x2200, 0x0079, 0x211d, 0x2122, 0x2114, 0x2120,
-+ 0x1078, 0x1ce7, 0x1078, 0x261c, 0x70a0, 0xa086, 0x0002, 0x00c0,
-+ 0x2159, 0x77b4, 0x1078, 0x2e16, 0x77b4, 0xa7bc, 0x0f00, 0x1078,
-+ 0x2f11, 0x6018, 0xa005, 0x0040, 0x2154, 0x2021, 0x5c00, 0x2009,
-+ 0x0005, 0x2011, 0x0020, 0x1078, 0x216a, 0x0040, 0x2154, 0x157e,
-+ 0x20a9, 0x0000, 0x2021, 0x5b00, 0x047e, 0x2009, 0x0005, 0x2011,
-+ 0x0020, 0x1078, 0x216a, 0x047f, 0x0040, 0x2153, 0x8420, 0x0070,
-+ 0x2153, 0x0078, 0x2144, 0x157f, 0x8738, 0xa784, 0x001f, 0x00c0,
-+ 0x212f, 0x7000, 0xa086, 0x0001, 0x00c0, 0x2acd, 0x1078, 0x2b1e,
-+ 0x6008, 0xa084, 0xffef, 0x600a, 0x1078, 0x2ac0, 0x0040, 0x2acd,
-+ 0x0078, 0x1e18, 0x2404, 0xa005, 0x0040, 0x219d, 0x2068, 0x2d04,
-+ 0x007e, 0x6810, 0xa706, 0x0040, 0x2179, 0x2d20, 0x007f, 0x0078,
-+ 0x216b, 0x007f, 0x2022, 0x6916, 0x6814, 0xa086, 0x0050, 0x00c0,
-+ 0x218c, 0x6817, 0x0006, 0x2200, 0xa086, 0x0010, 0x00c0, 0x218c,
-+ 0x681c, 0xa084, 0xffef, 0x681e, 0x681c, 0xa205, 0x681e, 0x1078,
-+ 0x18b6, 0x1078, 0x2b27, 0x6010, 0x8001, 0x6012, 0x6008, 0xa084,
-+ 0xffef, 0x600a, 0x1078, 0x2b1e, 0x007c, 0xa085, 0x0001, 0x0078,
-+ 0x219c, 0x2300, 0x0079, 0x21a4, 0x21a9, 0x21a7, 0x21ec, 0x1078,
-+ 0x1ce7, 0x78e4, 0xa005, 0x00d0, 0x21cc, 0x0018, 0x21cc, 0x2008,
-+ 0xa084, 0x0030, 0x00c0, 0x21b8, 0x781b, 0x0049, 0x0078, 0x1d39,
-+ 0x78ec, 0xa084, 0x0003, 0x0040, 0x21b4, 0x2100, 0xa084, 0x0007,
-+ 0x0079, 0x21c2, 0x21da, 0x21e0, 0x21d4, 0x21ca, 0x2fde, 0x2fde,
-+ 0x21ca, 0x21e6, 0x1078, 0x1ce7, 0x7000, 0xa005, 0x0040, 0x1d41,
-+ 0x2001, 0x0003, 0x0078, 0x24e3, 0x1078, 0x2df9, 0x781b, 0x0055,
-+ 0x0078, 0x1d39, 0x1078, 0x2df9, 0x781b, 0x00dc, 0x0078, 0x1d39,
-+ 0x1078, 0x2df9, 0x781b, 0x00e3, 0x0078, 0x1d39, 0x1078, 0x2df9,
-+ 0x781b, 0x009d, 0x0078, 0x1d39, 0xa584, 0x000f, 0x00c0, 0x2216,
-+ 0x1078, 0x261c, 0x7000, 0x0079, 0x21f5, 0x21fd, 0x220a, 0x21fd,
-+ 0x2acd, 0x21ff, 0x2acd, 0x21fd, 0x21fd, 0x1078, 0x1ce7, 0x71a0,
-+ 0x70a3, 0x0000, 0xa186, 0x0004, 0x00c0, 0x2208, 0x0078, 0x2b7a,
-+ 0x0078, 0x2acd, 0x1078, 0x2b1e, 0x6008, 0xa084, 0xffef, 0x600a,
-+ 0x1078, 0x2ac0, 0x0040, 0x2acd, 0x0078, 0x1e18, 0x78e4, 0xa005,
-+ 0x00d0, 0x21cc, 0x0018, 0x21cc, 0x2008, 0xa084, 0x0030, 0x00c0,
-+ 0x2225, 0x781b, 0x0049, 0x0078, 0x1d39, 0x78ec, 0xa084, 0x0003,
-+ 0x0040, 0x2221, 0x2100, 0xa184, 0x0007, 0x0079, 0x222f, 0x223f,
-+ 0x2245, 0x2239, 0x2237, 0x2fde, 0x2fde, 0x2237, 0x2fd6, 0x1078,
-+ 0x1ce7, 0x1078, 0x2e01, 0x781b, 0x0055, 0x0078, 0x1d39, 0x1078,
-+ 0x2e01, 0x781b, 0x00dc, 0x0078, 0x1d39, 0x1078, 0x2e01, 0x781b,
-+ 0x00e3, 0x0078, 0x1d39, 0x1078, 0x2e01, 0x781b, 0x009d, 0x0078,
-+ 0x1d39, 0x2300, 0x0079, 0x2254, 0x2259, 0x2257, 0x225b, 0x1078,
-+ 0x1ce7, 0x0078, 0x2883, 0x6817, 0x0008, 0x78a3, 0x0000, 0x79e4,
-+ 0xa184, 0x0030, 0x0040, 0x2883, 0x78ec, 0xa084, 0x0003, 0x0040,
-+ 0x2883, 0xa184, 0x0007, 0x0079, 0x226d, 0x21da, 0x21e0, 0x21d4,
-+ 0x2fb6, 0x2fde, 0x2fde, 0x2275, 0x2fd6, 0x1078, 0x1ce7, 0xa282,
-+ 0x0005, 0x0050, 0x227d, 0x1078, 0x1ce7, 0x2300, 0x0079, 0x2280,
-+ 0x2283, 0x24b7, 0x24c3, 0x2200, 0x0079, 0x2286, 0x228b, 0x228d,
-+ 0x22a0, 0x228b, 0x249c, 0x1078, 0x1ce7, 0x789b, 0x0018, 0x78a8,
-+ 0xa084, 0x00ff, 0xa082, 0x0020, 0x0048, 0x2dda, 0xa08a, 0x0004,
-+ 0x00c8, 0x2dda, 0x0079, 0x229c, 0x2dda, 0x2dda, 0x2dda, 0x2d7c,
-+ 0x789b, 0x0018, 0x79a8, 0xa184, 0x0080, 0x0040, 0x22b5, 0xa184,
-+ 0x0018, 0x0040, 0x22b1, 0x0078, 0x2dda, 0x7000, 0xa005, 0x00c0,
-+ 0x22ab, 0x2011, 0x0003, 0x0078, 0x2970, 0xa184, 0x00ff, 0xa08c,
-+ 0x0080, 0x0040, 0x22e9, 0x7000, 0xa086, 0x0001, 0x00c0, 0x22c8,
-+ 0x1078, 0x2b1e, 0x1078, 0x314d, 0x7034, 0x600a, 0x0078, 0x22cd,
-+ 0x7000, 0xa086, 0x0003, 0x0040, 0x22c2, 0x7003, 0x0005, 0x2001,
-+ 0x5c10, 0x2068, 0x703e, 0x7032, 0x157e, 0x20a9, 0x002f, 0x2003,
-+ 0x0000, 0x8000, 0x0070, 0x22de, 0x0078, 0x22d7, 0x157f, 0x6813,
-+ 0x0000, 0x68b3, 0x0700, 0x681f, 0x0800, 0x6823, 0x0003, 0x0078,
-+ 0x2dda, 0xa08a, 0x0010, 0x00c8, 0x2dda, 0x0079, 0x22ef, 0x2301,
-+ 0x22ff, 0x2317, 0x2319, 0x23ab, 0x2dda, 0x2dda, 0x23ad, 0x2dda,
-+ 0x2dda, 0x2498, 0x2498, 0x2dda, 0x2dda, 0x2dda, 0x249a, 0x1078,
-+ 0x1ce7, 0xa684, 0x1000, 0x0040, 0x230e, 0x2001, 0x0300, 0x8000,
-+ 0x8000, 0x783a, 0x781b, 0x009a, 0x0078, 0x1d39, 0x6814, 0xa084,
-+ 0x8000, 0x0040, 0x2315, 0x6817, 0x0003, 0x0078, 0x2fb6, 0x1078,
-+ 0x1ce7, 0x691c, 0x691e, 0xa684, 0x1800, 0x00c0, 0x2333, 0x681c,
-+ 0xa084, 0x0001, 0x00c0, 0x233b, 0x6814, 0xa086, 0x0008, 0x00c0,
-+ 0x232b, 0x6817, 0x0000, 0xa684, 0x0400, 0x0040, 0x23a7, 0x781b,
-+ 0x0058, 0x0078, 0x1d39, 0xa684, 0x1000, 0x0040, 0x233b, 0x781b,
-+ 0x0058, 0x0078, 0x1d39, 0xa684, 0x0060, 0x0040, 0x23a3, 0xa684,
-+ 0x0800, 0x0040, 0x23a3, 0xa684, 0x8000, 0x00c0, 0x2349, 0x0078,
-+ 0x2363, 0xa6b4, 0x7fff, 0x7e5a, 0x6eb2, 0x789b, 0x0074, 0x7aac,
-+ 0x79ac, 0x78ac, 0x801b, 0x00c8, 0x2356, 0x8000, 0xa084, 0x003f,
-+ 0xa108, 0xa291, 0x0000, 0x6b94, 0x2100, 0xa302, 0x68ae, 0x6b90,
-+ 0x2200, 0xa303, 0x68aa, 0xa684, 0x4000, 0x0040, 0x236b, 0xa6b4,
-+ 0xbfff, 0x7e5a, 0x6eb2, 0x7000, 0xa086, 0x0003, 0x00c0, 0x2378,
-+ 0x1078, 0x31c0, 0x1078, 0x3365, 0x781b, 0x0067, 0x0078, 0x1d39,
-+ 0xa006, 0x1078, 0x3414, 0x6aac, 0x69a8, 0x6c94, 0x6b90, 0x2200,
-+ 0xa105, 0x0040, 0x2387, 0x2200, 0xa422, 0x2100, 0xa31b, 0x7cd2,
-+ 0x7bd6, 0x2300, 0xa405, 0x00c0, 0x2395, 0xa6b5, 0x4000, 0x7e5a,
-+ 0x6eb2, 0x781b, 0x0067, 0x0078, 0x1d39, 0x781b, 0x0067, 0x2200,
-+ 0xa115, 0x00c0, 0x239f, 0x1078, 0x3376, 0x0078, 0x1d39, 0x1078,
-+ 0x339d, 0x0078, 0x1d39, 0x781b, 0x006a, 0x0078, 0x1d39, 0x781b,
-+ 0x0058, 0x0078, 0x1d39, 0x1078, 0x1ce7, 0x0078, 0x240a, 0x691c,
-+ 0xa184, 0x0100, 0x0040, 0x23c5, 0xa18c, 0xfeff, 0x691e, 0x0c7e,
-+ 0x7048, 0x2060, 0x6000, 0xa084, 0xefff, 0x6002, 0x6004, 0xa084,
-+ 0xfff5, 0x6006, 0x0c7f, 0x0078, 0x23f9, 0xa184, 0x0200, 0x0040,
-+ 0x23f9, 0xa18c, 0xfdff, 0x691e, 0x0c7e, 0x7048, 0x2060, 0x6000,
-+ 0xa084, 0xdfff, 0x6002, 0x6004, 0xa084, 0xffef, 0x6006, 0x2008,
-+ 0x2c48, 0x0c7f, 0xa184, 0x0008, 0x0040, 0x23f9, 0x1078, 0x2f0d,
-+ 0x1078, 0x2c58, 0x88ff, 0x0040, 0x23f9, 0x789b, 0x0060, 0x2800,
-+ 0x78aa, 0x7e58, 0xa6b5, 0x0004, 0x7e5a, 0xa684, 0x0400, 0x00c0,
-+ 0x23f5, 0x781b, 0x0055, 0x0078, 0x1d39, 0x781b, 0x0069, 0x0078,
-+ 0x1d39, 0x7e58, 0xa684, 0x0400, 0x00c0, 0x2402, 0x781b, 0x0058,
-+ 0x0078, 0x1d39, 0x781b, 0x006a, 0x0078, 0x1d39, 0x0078, 0x2de0,
-+ 0x0078, 0x2de0, 0x2019, 0x0000, 0x7990, 0xa18c, 0x0007, 0x0040,
-+ 0x2408, 0x789b, 0x0010, 0x78a8, 0xa094, 0x00ff, 0xa286, 0x0001,
-+ 0x00c0, 0x242d, 0x2300, 0x7ca8, 0xa400, 0x2018, 0xa102, 0x0040,
-+ 0x2425, 0x0048, 0x2425, 0x0078, 0x2427, 0x0078, 0x23af, 0x24a8,
-+ 0x7aa8, 0x00f0, 0x2427, 0x0078, 0x2413, 0xa284, 0x00f0, 0xa086,
-+ 0x0020, 0x00c0, 0x2489, 0x8318, 0x8318, 0x2300, 0xa102, 0x0040,
-+ 0x243d, 0x0048, 0x243d, 0x0078, 0x2486, 0xa286, 0x0023, 0x0040,
-+ 0x2408, 0x6818, 0xa084, 0xfff1, 0x681a, 0x7e58, 0xa684, 0xfff1,
-+ 0xa085, 0x0010, 0x2030, 0x7e5a, 0x6008, 0xa085, 0x0010, 0x600a,
-+ 0x0c7e, 0x7048, 0x2060, 0x6004, 0x2008, 0x2c48, 0x0c7f, 0xa184,
-+ 0x0010, 0x0040, 0x2461, 0x1078, 0x2f0d, 0x1078, 0x2d3d, 0x0078,
-+ 0x2470, 0x0c7e, 0x7048, 0x2060, 0x6004, 0x2008, 0x2c48, 0x0c7f,
-+ 0xa184, 0x0008, 0x0040, 0x23f9, 0x1078, 0x2f0d, 0x1078, 0x2c58,
-+ 0x88ff, 0x0040, 0x23f9, 0x789b, 0x0060, 0x2800, 0x78aa, 0xa6b5,
-+ 0x0004, 0x7e5a, 0xa684, 0x0400, 0x00c0, 0x2482, 0x781b, 0x0055,
-+ 0x0078, 0x1d39, 0x781b, 0x0069, 0x0078, 0x1d39, 0x7aa8, 0x0078,
-+ 0x2413, 0x8318, 0x2300, 0xa102, 0x0040, 0x2492, 0x0048, 0x2492,
-+ 0x0078, 0x2413, 0xa284, 0x0080, 0x00c0, 0x2de6, 0x0078, 0x2de0,
-+ 0x0078, 0x2de6, 0x0078, 0x2dda, 0x789b, 0x0018, 0x78a8, 0xa084,
-+ 0x00ff, 0xa08e, 0x0001, 0x0040, 0x24a7, 0x1078, 0x1ce7, 0x7aa8,
-+ 0xa294, 0x00ff, 0x78a8, 0xa084, 0x00ff, 0xa08a, 0x0004, 0x00c8,
-+ 0x2dda, 0x0079, 0x24b3, 0x2dda, 0x2bab, 0x2dda, 0x2cd8, 0xa282,
-+ 0x0000, 0x00c0, 0x24bd, 0x1078, 0x1ce7, 0x1078, 0x2df9, 0x781b,
-+ 0x0069, 0x0078, 0x1d39, 0xa282, 0x0003, 0x00c0, 0x24c9, 0x1078,
-+ 0x1ce7, 0x1078, 0x2e09, 0x781b, 0x0069, 0x0078, 0x1d39, 0xa282,
-+ 0x0004, 0x0050, 0x24d5, 0x1078, 0x1ce7, 0x2300, 0x0079, 0x24d8,
-+ 0x24db, 0x25c6, 0x25f7, 0xa286, 0x0003, 0x0040, 0x24e1, 0x1078,
-+ 0x1ce7, 0x2001, 0x0000, 0x703a, 0x7000, 0xa084, 0x0007, 0x0079,
-+ 0x24e9, 0x24f1, 0x24f3, 0x24f3, 0x2703, 0x274c, 0x26cd, 0x24f1,
-+ 0x24f1, 0x1078, 0x1ce7, 0xa684, 0x1000, 0x00c0, 0x24fb, 0x1078,
-+ 0x314d, 0x0040, 0x25a0, 0x7868, 0xa08c, 0x00ff, 0x0040, 0x2557,
-+ 0xa186, 0x0008, 0x00c0, 0x2512, 0x6008, 0xa084, 0xffef, 0x600a,
-+ 0x1078, 0x2ac0, 0x0040, 0x2557, 0x1078, 0x2b1e, 0x1078, 0x314d,
-+ 0x0078, 0x253e, 0xa186, 0x0028, 0x00c0, 0x2557, 0x1078, 0x314d,
-+ 0x6008, 0xa084, 0xffef, 0x600a, 0x1078, 0x2b34, 0x6018, 0xa005,
-+ 0x0040, 0x253e, 0x8001, 0x601a, 0xa005, 0x0040, 0x2534, 0x8001,
-+ 0xa005, 0x0040, 0x2534, 0x601e, 0x0078, 0x253e, 0x6813, 0x0028,
-+ 0x6817, 0x0000, 0x0078, 0x25b5, 0x6030, 0xa084, 0x00ff, 0xa005,
-+ 0x0040, 0x252e, 0x6008, 0xa085, 0x0200, 0x600a, 0x681c, 0xa084,
-+ 0x0001, 0x0040, 0x1d41, 0x681c, 0xa084, 0xfffe, 0x681e, 0x7054,
-+ 0x0c7e, 0x2060, 0x6800, 0x6002, 0x0c7f, 0x6004, 0x6802, 0xa005,
-+ 0x2d00, 0x00c0, 0x2554, 0x6002, 0x6006, 0x0078, 0x1d41, 0x017e,
-+ 0x1078, 0x261c, 0x017f, 0xa684, 0xdf00, 0x681a, 0x6827, 0x0000,
-+ 0x6f10, 0x81ff, 0x0040, 0x25a0, 0xa186, 0x0002, 0x00c0, 0x2598,
-+ 0xa684, 0x0800, 0x00c0, 0x2574, 0xa684, 0x0060, 0x0040, 0x2574,
-+ 0x78d8, 0x7adc, 0x682e, 0x6a2a, 0x8717, 0xa294, 0x000f, 0x8213,
-+ 0x8213, 0x8213, 0xa290, 0x3a80, 0xa290, 0x0000, 0x221c, 0xa384,
-+ 0x0100, 0x00c0, 0x2585, 0x0078, 0x258b, 0x8210, 0x2204, 0xa085,
-+ 0x0018, 0x2012, 0x8211, 0xa384, 0x0400, 0x0040, 0x2598, 0x689c,
-+ 0xa084, 0x0100, 0x00c0, 0x2598, 0x1078, 0x268c, 0x0078, 0x1d41,
-+ 0xa186, 0x0018, 0x0040, 0x25a0, 0xa186, 0x0014, 0x0040, 0x1d41,
-+ 0x6912, 0x6814, 0xa084, 0x8000, 0x0040, 0x25a8, 0x7038, 0x6816,
-+ 0xa68c, 0xdf00, 0x691a, 0x1078, 0x2b0d, 0x1078, 0x2b1e, 0x00c0,
-+ 0x25b5, 0x6008, 0xa084, 0xffef, 0x600a, 0x681c, 0xa084, 0x0001,
-+ 0x00c0, 0x25be, 0x1078, 0x2b06, 0x0078, 0x25c2, 0x7054, 0x2060,
-+ 0x6800, 0x6002, 0x1078, 0x18b6, 0x0078, 0x1d41, 0xa282, 0x0004,
-+ 0x0048, 0x25cc, 0x1078, 0x1ce7, 0x2200, 0x0079, 0x25cf, 0x25d3,
-+ 0x25d5, 0x25e2, 0x25d5, 0x1078, 0x1ce7, 0x7000, 0xa086, 0x0005,
-+ 0x0040, 0x25de, 0x1078, 0x2df9, 0x781b, 0x0069, 0x781b, 0x006a,
-+ 0x0078, 0x1d39, 0x7890, 0x8007, 0x8001, 0xa084, 0x0007, 0xa080,
-+ 0x0018, 0x789a, 0x79a8, 0xa18c, 0x00ff, 0xa186, 0x0003, 0x0040,
-+ 0x25f3, 0x0078, 0x2dda, 0x781b, 0x006a, 0x0078, 0x1d39, 0x681c,
-+ 0xa085, 0x0004, 0x681e, 0x82ff, 0x00c0, 0x2602, 0x1078, 0x2df9,
-+ 0x0078, 0x2609, 0x8211, 0x0040, 0x2607, 0x1078, 0x1ce7, 0x1078,
-+ 0x2e09, 0x781b, 0x0069, 0x0078, 0x1d39, 0x1078, 0x2ffd, 0x7830,
-+ 0xa084, 0x00c0, 0x00c0, 0x2619, 0x0018, 0x2619, 0x791a, 0xa006,
-+ 0x007c, 0xa085, 0x0001, 0x007c, 0xa684, 0x0060, 0x00c0, 0x2626,
-+ 0x682f, 0x0000, 0x682b, 0x0000, 0x0078, 0x268b, 0xa684, 0x0800,
-+ 0x00c0, 0x2635, 0x68b0, 0xa084, 0x4800, 0xa635, 0xa684, 0x0800,
-+ 0x00c0, 0x2635, 0x1078, 0x314d, 0x007c, 0xa684, 0x0020, 0x0040,
-+ 0x265f, 0x78d0, 0x8003, 0x00c8, 0x2643, 0xa006, 0x1078, 0x3414,
-+ 0x78d4, 0x1078, 0x3479, 0xa684, 0x4000, 0x0040, 0x264d, 0x682f,
-+ 0x0000, 0x682b, 0x0000, 0x0078, 0x2632, 0x68b0, 0xa084, 0x4800,
-+ 0xa635, 0xa684, 0x4000, 0x00c0, 0x2647, 0x7038, 0xa005, 0x00c0,
-+ 0x2659, 0x79d8, 0x7adc, 0x692e, 0x6a2a, 0x0078, 0x2632, 0xa684,
-+ 0x4000, 0x0040, 0x2669, 0x682f, 0x0000, 0x682b, 0x0000, 0x0078,
-+ 0x2632, 0x68b0, 0xa084, 0x4800, 0xa635, 0xa684, 0x4000, 0x00c0,
-+ 0x2663, 0x7038, 0xa005, 0x00c0, 0x2675, 0x79d8, 0x7adc, 0x78d0,
-+ 0x80f3, 0x00c8, 0x267c, 0x8000, 0xa084, 0x003f, 0xa108, 0xa291,
-+ 0x0000, 0x692e, 0x6a2a, 0x2100, 0xa205, 0x00c0, 0x2689, 0x0078,
-+ 0x2632, 0x1078, 0x3414, 0x007c, 0xa384, 0x0200, 0x0040, 0x2694,
-+ 0x6008, 0xa085, 0x0002, 0x600a, 0x6817, 0x0006, 0x6a28, 0x692c,
-+ 0x6a3a, 0x693e, 0x682b, 0x0300, 0x682f, 0x0000, 0x6833, 0x2000,
-+ 0x6893, 0x0000, 0x6897, 0x0020, 0x7000, 0x0079, 0x26a7, 0x26af,
-+ 0x26b1, 0x26ba, 0x26af, 0x26af, 0x26af, 0x26af, 0x26af, 0x1078,
-+ 0x1ce7, 0x681c, 0xa084, 0x0001, 0x00c0, 0x26ba, 0x1078, 0x2b06,
-+ 0x0078, 0x26c0, 0x7054, 0x2c50, 0x2060, 0x6800, 0x6002, 0x2a60,
-+ 0x2021, 0x3857, 0x2404, 0xa005, 0x0040, 0x26c9, 0x2020, 0x0078,
-+ 0x26c2, 0x2d22, 0x206b, 0x0000, 0x007c, 0x77b4, 0x1078, 0x2e16,
-+ 0xa7bc, 0x0f00, 0x1078, 0x2f11, 0x6018, 0xa005, 0x0040, 0x26fc,
-+ 0x0d7e, 0x2001, 0x5c10, 0x2068, 0x0d7f, 0x2021, 0x5c00, 0x2009,
-+ 0x0004, 0x2011, 0x0010, 0x1078, 0x216a, 0x0040, 0x26fc, 0x157e,
-+ 0x20a9, 0x0000, 0x2021, 0x5b00, 0x047e, 0x2009, 0x0004, 0x2011,
-+ 0x0010, 0x1078, 0x216a, 0x047f, 0x0040, 0x26fb, 0x8420, 0x0070,
-+ 0x26fb, 0x0078, 0x26ec, 0x157f, 0x8738, 0xa784, 0x001f, 0x00c0,
-+ 0x26d2, 0x0078, 0x1d41, 0x1078, 0x2b0d, 0x1078, 0x2b1e, 0x6827,
-+ 0x0000, 0x789b, 0x000e, 0x6f10, 0x1078, 0x344a, 0x017e, 0xad88,
-+ 0x0010, 0xa188, 0x0006, 0x2104, 0x017f, 0x8007, 0xa084, 0x00ff,
-+ 0xa082, 0x0047, 0x0040, 0x271e, 0x0078, 0x272f, 0x0c7e, 0x6810,
-+ 0x8007, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa0e0, 0x3a80,
-+ 0x6004, 0xa084, 0xfff5, 0x6006, 0x0c7f, 0x1078, 0x2f6b, 0x6813,
-+ 0x0002, 0xa684, 0x0800, 0x0040, 0x2739, 0x6918, 0xa18d, 0x2000,
-+ 0x691a, 0x6814, 0xa084, 0x8000, 0x0040, 0x2740, 0x6817, 0x0000,
-+ 0x2021, 0x3857, 0x6800, 0x2022, 0x6a38, 0x693c, 0x6a2a, 0x692e,
-+ 0x1078, 0x18b6, 0x0078, 0x1d41, 0x1078, 0x261c, 0x6827, 0x0000,
-+ 0x789b, 0x000e, 0x6f10, 0x1078, 0x3002, 0xa08c, 0x00ff, 0x6912,
-+ 0x6814, 0xa084, 0x8000, 0x0040, 0x275f, 0x7038, 0x6816, 0xa68c,
-+ 0xdf00, 0x691a, 0x70a3, 0x0000, 0x0078, 0x1d41, 0xa006, 0x1078,
-+ 0x314d, 0x6813, 0x0000, 0x6817, 0x0001, 0xa68c, 0xdf00, 0x691a,
-+ 0x6827, 0x0000, 0x7000, 0x0079, 0x2775, 0x277d, 0x277f, 0x277f,
-+ 0x2781, 0x2781, 0x2781, 0x277d, 0x277d, 0x1078, 0x1ce7, 0x1078,
-+ 0x2b1e, 0x6008, 0xa084, 0xffef, 0x600a, 0x0078, 0x2ad8, 0x2300,
-+ 0x0079, 0x278a, 0x278d, 0x278f, 0x27cd, 0x1078, 0x1ce7, 0x7000,
-+ 0x0079, 0x2792, 0x279a, 0x279c, 0x279c, 0x27a7, 0x279c, 0x27ae,
-+ 0x279a, 0x279a, 0x1078, 0x1ce7, 0xa684, 0x2000, 0x00c0, 0x27a7,
-+ 0xa6b5, 0x2000, 0x7e5a, 0x1078, 0x3376, 0x0078, 0x2fb6, 0x6814,
-+ 0xa084, 0x8000, 0x0040, 0x27ae, 0x6817, 0x0007, 0x2009, 0x3818,
-+ 0x210c, 0xa186, 0x0000, 0x0040, 0x27c3, 0xa186, 0x0001, 0x0040,
-+ 0x27c7, 0x2009, 0x382b, 0x200b, 0x000b, 0x70a3, 0x0001, 0x781b,
-+ 0x0046, 0x0078, 0x1d39, 0x781b, 0x00dd, 0x0078, 0x1d39, 0x2009,
-+ 0x382b, 0x200b, 0x000a, 0x0078, 0x1d39, 0x1078, 0x1ce7, 0x2300,
-+ 0x0079, 0x27d2, 0x27d5, 0x27d7, 0x27fa, 0x1078, 0x1ce7, 0x7000,
-+ 0x0079, 0x27da, 0x27e2, 0x27e4, 0x27e4, 0x27ef, 0x27e4, 0x27f6,
-+ 0x27e2, 0x27e2, 0x1078, 0x1ce7, 0xa684, 0x2000, 0x00c0, 0x27ef,
-+ 0xa6b5, 0x2000, 0x7e5a, 0x1078, 0x3376, 0x0078, 0x2fb6, 0x6814,
-+ 0xa084, 0x8000, 0x0040, 0x27f6, 0x6817, 0x0007, 0x781b, 0x00e4,
-+ 0x0078, 0x1d39, 0x681c, 0xa085, 0x0004, 0x681e, 0x1078, 0x2f6b,
-+ 0xa6b5, 0x0800, 0x1078, 0x2df9, 0x781b, 0x0069, 0x0078, 0x1d39,
-+ 0x2300, 0x0079, 0x280b, 0x280e, 0x2810, 0x2812, 0x1078, 0x1ce7,
-+ 0x1078, 0x1ce7, 0xa684, 0x0400, 0x00c0, 0x2831, 0x782b, 0x3009,
-+ 0x789b, 0x0060, 0x78ab, 0x0000, 0xa684, 0xfffb, 0x785a, 0x79e4,
-+ 0xa184, 0x0020, 0x0040, 0x2829, 0x78ec, 0xa084, 0x0003, 0x00c0,
-+ 0x282d, 0x2001, 0x0014, 0x0078, 0x24e3, 0xa184, 0x0007, 0x0079,
-+ 0x2869, 0x7a90, 0xa294, 0x0007, 0x789b, 0x0060, 0x79a8, 0x81ff,
-+ 0x0040, 0x2867, 0x789b, 0x0010, 0x7ba8, 0xa384, 0x0001, 0x00c0,
-+ 0x2858, 0x7ba8, 0x7ba8, 0xa386, 0x0001, 0x00c0, 0x284b, 0x2009,
-+ 0xfff7, 0x0078, 0x2851, 0xa386, 0x0003, 0x00c0, 0x2858, 0x2009,
-+ 0xffef, 0x0c7e, 0x7048, 0x2060, 0x6004, 0xa104, 0x6006, 0x0c7f,
-+ 0x789b, 0x0060, 0x78ab, 0x0000, 0xa684, 0xfffb, 0x785a, 0x782b,
-+ 0x3009, 0x691c, 0xa18c, 0xfdff, 0xa18c, 0xfeff, 0x691e, 0x0078,
-+ 0x2fb6, 0x21da, 0x21e0, 0x2873, 0x287b, 0x2871, 0x2871, 0x2871,
-+ 0x2fb6, 0x1078, 0x1ce7, 0x691c, 0xa18c, 0xfdff, 0xa18c, 0xfeff,
-+ 0x691e, 0x0078, 0x2fbe, 0x691c, 0xa18c, 0xfdff, 0xa18c, 0xfeff,
-+ 0x691e, 0x0078, 0x2fb6, 0x79e4, 0xa184, 0x0030, 0x0040, 0x288d,
-+ 0x78ec, 0xa084, 0x0003, 0x00c0, 0x2895, 0x6814, 0xa085, 0x8000,
-+ 0x6816, 0x2001, 0x0014, 0x0078, 0x24e3, 0xa184, 0x0007, 0x0079,
-+ 0x2899, 0x2fb6, 0x2fb6, 0x28a1, 0x2fb6, 0x2fde, 0x2fde, 0x2fb6,
-+ 0x2fb6, 0xa684, 0x0400, 0x00c0, 0x28d2, 0x681c, 0xa084, 0x0001,
-+ 0x0040, 0x2fbe, 0xa68c, 0x2060, 0xa18c, 0xfffb, 0x795a, 0x69b2,
-+ 0x789b, 0x0060, 0x78ab, 0x0000, 0x789b, 0x0061, 0x6814, 0xa085,
-+ 0x8000, 0x6816, 0x78aa, 0x157e, 0x137e, 0x147e, 0x20a1, 0x012c,
-+ 0x789b, 0x0000, 0x8000, 0x80ac, 0xad80, 0x000a, 0x2098, 0x53a6,
-+ 0x147f, 0x137f, 0x157f, 0x6810, 0x8007, 0x789b, 0x007e, 0x78aa,
-+ 0x0078, 0x2fbe, 0x6814, 0xa084, 0x8000, 0x0040, 0x28d9, 0x6817,
-+ 0x0008, 0x781b, 0x00d8, 0x0078, 0x1d39, 0x2300, 0x0079, 0x28e0,
-+ 0x28e5, 0x2960, 0x28e3, 0x1078, 0x1ce7, 0x7000, 0xa084, 0x0007,
-+ 0x0079, 0x28ea, 0x28f2, 0x28f4, 0x2910, 0x28f2, 0x28f2, 0x26cd,
-+ 0x28f2, 0x28f2, 0x1078, 0x1ce7, 0x691c, 0xa18d, 0x0001, 0x691e,
-+ 0x6800, 0x6006, 0xa005, 0x00c0, 0x28fe, 0x6002, 0x6818, 0xa084,
-+ 0x000e, 0x0040, 0x290a, 0x7014, 0x68b6, 0x712c, 0xa188, 0x5b00,
-+ 0x0078, 0x290c, 0x2009, 0x5c00, 0x2104, 0x6802, 0x2d0a, 0x7156,
-+ 0x6eb2, 0xa684, 0x0060, 0x0040, 0x295e, 0xa684, 0x0800, 0x00c0,
-+ 0x2922, 0xa684, 0x7fff, 0x68b2, 0x6890, 0x6894, 0x1078, 0x314d,
-+ 0x0078, 0x295e, 0xa684, 0x0020, 0x0040, 0x2934, 0xa006, 0x1078,
-+ 0x3414, 0x78d0, 0x8003, 0x00c8, 0x2930, 0x78d4, 0x1078, 0x3479,
-+ 0x79d8, 0x7adc, 0x0078, 0x2938, 0x1078, 0x2f1e, 0x1078, 0x3414,
-+ 0xa684, 0x8000, 0x0040, 0x295e, 0xa684, 0x7fff, 0x68b2, 0x789b,
-+ 0x0074, 0x1078, 0x3002, 0x2010, 0x1078, 0x3002, 0x2008, 0xa684,
-+ 0x0020, 0x00c0, 0x2956, 0x1078, 0x3002, 0x801b, 0x00c8, 0x2951,
-+ 0x8000, 0xa084, 0x003f, 0xa108, 0xa291, 0x0000, 0x6b94, 0x2100,
-+ 0xa302, 0x68ae, 0x6b90, 0x2200, 0xa303, 0x68aa, 0x0078, 0x1d41,
-+ 0x0078, 0x2de6, 0x7033, 0x0000, 0xa282, 0x0005, 0x0050, 0x296a,
-+ 0x1078, 0x1ce7, 0x2300, 0x0079, 0x296d, 0x2970, 0x297a, 0x299d,
-+ 0x2200, 0x0079, 0x2973, 0x2978, 0x2de6, 0x2978, 0x29c6, 0x2a17,
-+ 0x1078, 0x1ce7, 0x7000, 0xa086, 0x0001, 0x00c0, 0x2987, 0x1078,
-+ 0x2b1e, 0x1078, 0x314d, 0x7034, 0x600a, 0x0078, 0x298c, 0x7000,
-+ 0xa086, 0x0003, 0x0040, 0x2981, 0x7003, 0x0005, 0x2001, 0x5c10,
-+ 0x2068, 0x703e, 0x7032, 0x2200, 0x0079, 0x2996, 0x2de6, 0x299b,
-+ 0x29c6, 0x299b, 0x2de6, 0x1078, 0x1ce7, 0x7000, 0xa086, 0x0001,
-+ 0x00c0, 0x29aa, 0x1078, 0x2b1e, 0x1078, 0x314d, 0x7034, 0x600a,
-+ 0x0078, 0x29af, 0x7000, 0xa086, 0x0003, 0x0040, 0x29a4, 0x7003,
-+ 0x0005, 0x2001, 0x5c10, 0x2068, 0x703e, 0x7032, 0x2200, 0x0079,
-+ 0x29b9, 0x29c0, 0x29be, 0x29c0, 0x29be, 0x29c0, 0x1078, 0x1ce7,
-+ 0x1078, 0x2e09, 0x781b, 0x0069, 0x0078, 0x1d39, 0x7000, 0xa086,
-+ 0x0001, 0x00c0, 0x29d3, 0x1078, 0x2b1e, 0x1078, 0x314d, 0x7034,
-+ 0x600a, 0x0078, 0x29d8, 0x7000, 0xa086, 0x0003, 0x0040, 0x29cd,
-+ 0x7003, 0x0002, 0x7a80, 0xa294, 0x0f00, 0x789b, 0x0018, 0x7ca8,
-+ 0xa484, 0x001f, 0xa215, 0x2069, 0x5c00, 0x2d04, 0x2d08, 0x7156,
-+ 0x2068, 0xa005, 0x0040, 0x29f3, 0x6810, 0xa206, 0x0040, 0x2a0c,
-+ 0x6800, 0x0078, 0x29e6, 0x7003, 0x0005, 0x2001, 0x5c10, 0x2068,
-+ 0x703e, 0x7032, 0x157e, 0x20a9, 0x002f, 0x2003, 0x0000, 0x8000,
-+ 0x0070, 0x2a04, 0x0078, 0x29fd, 0x157f, 0x6a12, 0x68b3, 0x0700,
-+ 0x681f, 0x0800, 0x6823, 0x0003, 0x6eb0, 0x7e5a, 0x681c, 0xa084,
-+ 0x0c00, 0x0040, 0x2a6d, 0x1078, 0x2e01, 0x0078, 0x2a6d, 0x7000,
-+ 0xa086, 0x0001, 0x00c0, 0x2a24, 0x1078, 0x2b1e, 0x1078, 0x314d,
-+ 0x7034, 0x600a, 0x0078, 0x2a29, 0x7000, 0xa086, 0x0003, 0x0040,
-+ 0x2a1e, 0x7003, 0x0002, 0x7a80, 0xa294, 0x0f00, 0x789b, 0x0018,
-+ 0x7ca8, 0xa484, 0x001f, 0xa215, 0x79a8, 0x79a8, 0xa18c, 0x00ff,
-+ 0xa1e8, 0x5b00, 0x2d04, 0x2d08, 0x7156, 0x2068, 0xa005, 0x0040,
-+ 0x2a48, 0x6810, 0xa206, 0x0040, 0x2a61, 0x6800, 0x0078, 0x2a3b,
-+ 0x7003, 0x0005, 0x2001, 0x5c10, 0x2068, 0x703e, 0x7032, 0x157e,
-+ 0x20a9, 0x002f, 0x2003, 0x0000, 0x8000, 0x0070, 0x2a59, 0x0078,
-+ 0x2a52, 0x157f, 0x6a12, 0x68b3, 0x0700, 0x681f, 0x0800, 0x6823,
-+ 0x0003, 0x6eb0, 0x7e5a, 0x681c, 0xa084, 0x0c00, 0x0040, 0x2a6d,
-+ 0x1078, 0x2dfd, 0x7e58, 0x0078, 0x2a6d, 0x027e, 0x8207, 0xa084,
-+ 0x000f, 0x8003, 0x8003, 0x8003, 0xa080, 0x3a80, 0x2060, 0x704a,
-+ 0x6000, 0x704e, 0x6004, 0x7052, 0xa684, 0x0060, 0x0040, 0x2aa4,
-+ 0x6b94, 0x6c90, 0x69a8, 0x68ac, 0xa105, 0x00c0, 0x2a92, 0x7bd2,
-+ 0x7bda, 0x7cd6, 0x7cde, 0xa6b4, 0xb7ff, 0x7e5a, 0x1078, 0x3376,
-+ 0x0078, 0x2aa4, 0x68ac, 0xa31a, 0x2100, 0xa423, 0x2400, 0xa305,
-+ 0x0040, 0x2aa4, 0x7bd2, 0x7bda, 0x7cd6, 0x7cde, 0x68ac, 0xa6b4,
-+ 0xbfff, 0x7e5a, 0x1078, 0x339d, 0x077f, 0x1078, 0x2f11, 0x2009,
-+ 0x006a, 0xa684, 0x0008, 0x0040, 0x2aaf, 0x2009, 0x0069, 0xa6b5,
-+ 0x2000, 0x7e5a, 0x791a, 0x2d00, 0x703e, 0x8207, 0xa084, 0x000f,
-+ 0x8003, 0x8003, 0x8003, 0xa080, 0x3a80, 0x2048, 0x0078, 0x1d39,
-+ 0x6020, 0xa005, 0x0040, 0x2acc, 0x8001, 0x6022, 0x6008, 0xa085,
-+ 0x0008, 0x600a, 0x7010, 0x6026, 0x007c, 0xa006, 0x1078, 0x314d,
-+ 0x6813, 0x0000, 0x6817, 0x0001, 0x681f, 0x0040, 0x681b, 0x0100,
-+ 0x7000, 0xa084, 0x0007, 0x0079, 0x2add, 0x2ae5, 0x2ae7, 0x2ae7,
-+ 0x2b02, 0x2aef, 0x2ae5, 0x2ae5, 0x2ae5, 0x1078, 0x1ce7, 0x1078,
-+ 0x2b0d, 0x1078, 0x2b06, 0x1078, 0x18b6, 0x0078, 0x1d41, 0x70a0,
-+ 0x70a3, 0x0000, 0x0079, 0x2af4, 0x2afe, 0x2afe, 0x2afc, 0x2afc,
-+ 0x2afc, 0x2afe, 0x2afc, 0x2afe, 0x0079, 0x20a6, 0x70a3, 0x0000,
-+ 0x0078, 0x1d41, 0x6817, 0x0000, 0x0078, 0x2703, 0x6800, 0xa005,
-+ 0x00c0, 0x2b0b, 0x6002, 0x6006, 0x007c, 0x1078, 0x2b27, 0x6010,
-+ 0xa005, 0x0040, 0x2b18, 0x8001, 0x00d0, 0x2b18, 0x1078, 0x1ce7,
-+ 0x6012, 0x6008, 0xa084, 0xffef, 0x600a, 0x007c, 0x1078, 0x2b34,
-+ 0x6018, 0xa005, 0x0040, 0x2b26, 0x8001, 0x601a, 0x007c, 0x017e,
-+ 0x007e, 0x2009, 0x382e, 0x2104, 0xa005, 0x0040, 0x2b31, 0x8001,
-+ 0x200a, 0x007f, 0x017f, 0x007c, 0x017e, 0x007e, 0x2009, 0x382f,
-+ 0x2104, 0xa005, 0x0040, 0x2b3e, 0x8001, 0x200a, 0x007f, 0x017f,
-+ 0x007c, 0x017e, 0x007e, 0x2009, 0x3830, 0x2104, 0x8000, 0x200a,
-+ 0x007f, 0x017f, 0x007c, 0x017e, 0x007e, 0x2009, 0x382f, 0x2104,
-+ 0x8000, 0x200a, 0x007f, 0x017f, 0x007c, 0x027e, 0x037e, 0x007e,
-+ 0x2009, 0x382e, 0x2114, 0x2019, 0x382f, 0x2304, 0xa202, 0x200a,
-+ 0x201b, 0x0000, 0x2009, 0x3830, 0x007f, 0x037f, 0x027f, 0x007c,
-+ 0x1078, 0x2ffd, 0x6817, 0x0018, 0x0078, 0x2b98, 0x1078, 0x2ffd,
-+ 0x6817, 0x0019, 0x0078, 0x2b98, 0x1078, 0x2ffd, 0x6817, 0x001a,
-+ 0x0078, 0x2b98, 0x77b4, 0x1078, 0x2f11, 0x71b8, 0xa18c, 0x00ff,
-+ 0xa1e8, 0x5b00, 0x2d04, 0x2d08, 0x2068, 0xa005, 0x00c0, 0x2b8a,
-+ 0x0078, 0x1d41, 0x6810, 0x72b4, 0xa206, 0x0040, 0x2b92, 0x6800,
-+ 0x0078, 0x2b83, 0x6800, 0x200a, 0x6817, 0x0005, 0x70bf, 0x0000,
-+ 0x1078, 0x2b0d, 0x681c, 0xa084, 0x0001, 0x00c0, 0x2ba1, 0x1078,
-+ 0x2b06, 0x1078, 0x2b1e, 0x681b, 0x0000, 0x681f, 0x0020, 0x1078,
-+ 0x18b6, 0x0078, 0x1d41, 0xa282, 0x0003, 0x00c0, 0x2dda, 0x7da8,
-+ 0xa5ac, 0x00ff, 0x7ea8, 0xa6b4, 0x00ff, 0x691c, 0xa18d, 0x0080,
-+ 0x691e, 0xa184, 0x0100, 0x0040, 0x2c0b, 0xa18c, 0xfeff, 0x691e,
-+ 0xa6b4, 0x00ff, 0x0040, 0x2bf5, 0xa682, 0x000f, 0x0048, 0x2bcc,
-+ 0x0040, 0x2bcc, 0x2031, 0x000f, 0x852b, 0x852b, 0x1078, 0x2e94,
-+ 0x0040, 0x2bd6, 0x1078, 0x2ca4, 0x0078, 0x2bfe, 0x1078, 0x2e4f,
-+ 0x0c7e, 0x2960, 0x6004, 0xa084, 0xfff5, 0x6006, 0x1078, 0x2cc8,
-+ 0x0c7f, 0x691c, 0xa18d, 0x0100, 0x691e, 0x7e58, 0xa6b5, 0x0004,
-+ 0x7e5a, 0xa684, 0x0400, 0x00c0, 0x2bf1, 0x781b, 0x0055, 0x0078,
-+ 0x1d39, 0x781b, 0x0069, 0x0078, 0x1d39, 0x0c7e, 0x2960, 0x6004,
-+ 0xa084, 0xfff5, 0x6006, 0x1078, 0x2cc8, 0x0c7f, 0x7e58, 0xa684,
-+ 0x0400, 0x00c0, 0x2c07, 0x781b, 0x0058, 0x0078, 0x1d39, 0x781b,
-+ 0x006a, 0x0078, 0x1d39, 0x0c7e, 0x7048, 0x2060, 0x6100, 0xa18c,
-+ 0x1000, 0x0040, 0x2c4b, 0x6208, 0x8217, 0xa294, 0x00ff, 0xa282,
-+ 0x000f, 0x0048, 0x2c1f, 0x0040, 0x2c1f, 0x2011, 0x000f, 0x2600,
-+ 0xa202, 0x00c8, 0x2c24, 0x2230, 0x6208, 0xa294, 0x00ff, 0x7018,
-+ 0xa086, 0x0028, 0x00c0, 0x2c34, 0xa282, 0x0019, 0x00c8, 0x2c3a,
-+ 0x2011, 0x0019, 0x0078, 0x2c3a, 0xa282, 0x000c, 0x00c8, 0x2c3a,
-+ 0x2011, 0x000c, 0x2200, 0xa502, 0x00c8, 0x2c3f, 0x2228, 0x1078,
-+ 0x2e53, 0x852b, 0x852b, 0x1078, 0x2e94, 0x0040, 0x2c4b, 0x1078,
-+ 0x2ca4, 0x0078, 0x2c4f, 0x1078, 0x2e4f, 0x1078, 0x2cc8, 0x7858,
-+ 0xa085, 0x0004, 0x785a, 0x0c7f, 0x781b, 0x0069, 0x0078, 0x1d39,
-+ 0x0c7e, 0x2960, 0x6000, 0xa084, 0x1000, 0x00c0, 0x2c72, 0xa084,
-+ 0x0040, 0x00c0, 0x2c6c, 0xa18c, 0x0002, 0x00c0, 0x2c6c, 0xa18c,
-+ 0xfff5, 0x6106, 0x0c7f, 0x007c, 0x2011, 0x0032, 0x2019, 0x0000,
-+ 0x0078, 0x2c94, 0x6208, 0xa294, 0x00ff, 0x7018, 0xa086, 0x0028,
-+ 0x00c0, 0x2c82, 0xa282, 0x0019, 0x00c8, 0x2c88, 0x2011, 0x0019,
-+ 0x0078, 0x2c88, 0xa282, 0x000c, 0x00c8, 0x2c88, 0x2011, 0x000c,
-+ 0x6308, 0x831f, 0xa39c, 0x00ff, 0xa382, 0x000f, 0x0048, 0x2c94,
-+ 0x0040, 0x2c94, 0x2019, 0x000f, 0x78ab, 0x0001, 0x78ab, 0x0003,
-+ 0x78ab, 0x0001, 0x7aaa, 0x7baa, 0xa8c0, 0x0005, 0x681c, 0xa085,
-+ 0x0100, 0x681e, 0x0c7f, 0x007c, 0x0c7e, 0x7148, 0x2160, 0x2008,
-+ 0xa084, 0xfff0, 0xa635, 0x7e86, 0x6018, 0x789a, 0x7eae, 0x6612,
-+ 0x78a4, 0xa084, 0xfff8, 0xa18c, 0x0007, 0xa105, 0x78a6, 0x6016,
-+ 0x788a, 0xa6b4, 0x000f, 0x8637, 0x8204, 0x8004, 0xa084, 0x00ff,
-+ 0xa605, 0x600e, 0x6004, 0xa084, 0xfff5, 0x6006, 0x0c7f, 0x007c,
-+ 0x0c7e, 0x7048, 0x2060, 0x6018, 0x789a, 0x78a4, 0xa084, 0xfff0,
-+ 0x78a6, 0x6012, 0x7884, 0xa084, 0xfff0, 0x7886, 0x0c7f, 0x007c,
-+ 0xa282, 0x0002, 0x00c0, 0x2dda, 0x7aa8, 0x691c, 0xa18d, 0x0080,
-+ 0x691e, 0xa184, 0x0200, 0x0040, 0x2d1d, 0xa18c, 0xfdff, 0x691e,
-+ 0xa294, 0x00ff, 0xa282, 0x0002, 0x00c8, 0x2dda, 0x1078, 0x2d63,
-+ 0x1078, 0x2cc8, 0xa980, 0x0001, 0x200c, 0x1078, 0x2f0d, 0x1078,
-+ 0x2c58, 0x88ff, 0x0040, 0x2d10, 0x789b, 0x0060, 0x2800, 0x78aa,
-+ 0x7e58, 0xa6b5, 0x0004, 0x7e5a, 0xa684, 0x0400, 0x00c0, 0x2d0c,
-+ 0x781b, 0x0055, 0x0078, 0x1d39, 0x781b, 0x0069, 0x0078, 0x1d39,
-+ 0x7e58, 0xa684, 0x0400, 0x00c0, 0x2d19, 0x781b, 0x0058, 0x0078,
-+ 0x1d39, 0x781b, 0x006a, 0x0078, 0x1d39, 0xa282, 0x0002, 0x00c8,
-+ 0x2d25, 0xa284, 0x0001, 0x0040, 0x2d2f, 0x7148, 0xa188, 0x0000,
-+ 0x210c, 0xa18c, 0x2000, 0x00c0, 0x2d2f, 0x2011, 0x0000, 0x1078,
-+ 0x2e41, 0x1078, 0x2d63, 0x1078, 0x2cc8, 0x7858, 0xa085, 0x0004,
-+ 0x785a, 0x781b, 0x0069, 0x0078, 0x1d39, 0x0c7e, 0x027e, 0x2960,
-+ 0x6000, 0x2011, 0x0001, 0xa084, 0x2000, 0x00c0, 0x2d53, 0xa084,
-+ 0x0080, 0x00c0, 0x2d51, 0xa18c, 0xffef, 0x6106, 0xa006, 0x0078,
-+ 0x2d60, 0x2011, 0x0000, 0x78ab, 0x0001, 0x78ab, 0x0002, 0x78ab,
-+ 0x0003, 0x7aaa, 0xa8c0, 0x0004, 0x681c, 0xa085, 0x0200, 0x681e,
-+ 0x027f, 0x0c7f, 0x007c, 0x0c7e, 0x7048, 0x2060, 0x82ff, 0x0040,
-+ 0x2d6b, 0x2011, 0x0040, 0x6018, 0xa080, 0x0002, 0x789a, 0x78a4,
-+ 0xa084, 0xffbf, 0xa205, 0x78a6, 0x6016, 0x788a, 0x6004, 0xa084,
-+ 0xffef, 0x6006, 0x0c7f, 0x007c, 0x007e, 0x7000, 0xa086, 0x0003,
-+ 0x0040, 0x2d85, 0x007f, 0x0078, 0x2d88, 0x007f, 0x0078, 0x2dd6,
-+ 0xa684, 0x0020, 0x0040, 0x2dd6, 0x7888, 0xa084, 0x0040, 0x0040,
-+ 0x2dd6, 0x78a8, 0x8001, 0x0040, 0x2d95, 0x7bb8, 0xa384, 0x003f,
-+ 0x831b, 0x00c8, 0x2d9c, 0x8000, 0xa005, 0x0040, 0x2dbd, 0x831b,
-+ 0x00c8, 0x2da5, 0x8001, 0x0040, 0x2dd2, 0xa006, 0x1078, 0x3414,
-+ 0x78b4, 0x1078, 0x3479, 0x0078, 0x2dd6, 0xa684, 0x4000, 0x0040,
-+ 0x2dbd, 0x78b8, 0x801b, 0x00c8, 0x2db6, 0x8000, 0xa084, 0x003f,
-+ 0x00c0, 0x2dd2, 0xa6b4, 0xbfff, 0x7e5a, 0x79d8, 0x7adc, 0x2001,
-+ 0x0001, 0xa108, 0x00c8, 0x2dc6, 0xa291, 0x0000, 0x79d2, 0x79da,
-+ 0x7ad6, 0x7ade, 0x1078, 0x3414, 0x781b, 0x0067, 0x1078, 0x32e4,
-+ 0x0078, 0x1d39, 0x781b, 0x0067, 0x0078, 0x1d39, 0x781b, 0x006a,
-+ 0x0078, 0x1d39, 0x1078, 0x2e0d, 0x781b, 0x0069, 0x0078, 0x1d39,
-+ 0x1078, 0x2df9, 0x781b, 0x0069, 0x0078, 0x1d39, 0x6823, 0x0002,
-+ 0x1078, 0x2e01, 0x691c, 0xa18d, 0x0020, 0x691e, 0x6814, 0xa084,
-+ 0x8000, 0x0040, 0x2df5, 0x6817, 0x0005, 0x781b, 0x0069, 0x0078,
-+ 0x1d39, 0x2001, 0x0005, 0x0078, 0x2e0f, 0x2001, 0x000c, 0x0078,
-+ 0x2e0f, 0x2001, 0x0006, 0x0078, 0x2e0f, 0x2001, 0x000d, 0x0078,
-+ 0x2e0f, 0x2001, 0x0009, 0x0078, 0x2e0f, 0x2001, 0x0007, 0x789b,
-+ 0x007f, 0x78aa, 0xa6b5, 0x0008, 0x7e5a, 0x007c, 0x077e, 0x873f,
-+ 0xa7bc, 0x000f, 0x873b, 0x873b, 0x8703, 0xa0e0, 0x3a80, 0xa7b8,
-+ 0x0020, 0x7f9a, 0x79a4, 0xa184, 0x000f, 0x0040, 0x2e2f, 0xa184,
-+ 0xfff0, 0x78a6, 0x6012, 0x6004, 0xa085, 0x0008, 0x6006, 0x8738,
-+ 0x8738, 0x7f9a, 0x79a4, 0xa184, 0x0040, 0x0040, 0x2e3f, 0xa184,
-+ 0xffbf, 0x78a6, 0x6016, 0x6004, 0xa085, 0x0010, 0x6006, 0x077f,
-+ 0x007c, 0x789b, 0x0010, 0x78ab, 0x0001, 0x78ab, 0x0002, 0x78ab,
-+ 0x0003, 0x7aaa, 0x789b, 0x0060, 0x78ab, 0x0004, 0x007c, 0x2031,
-+ 0x0000, 0x2029, 0x0032, 0x789b, 0x0010, 0x78ab, 0x0001, 0x78ab,
-+ 0x0003, 0x78ab, 0x0001, 0x7daa, 0x7eaa, 0x789b, 0x0060, 0x78ab,
-+ 0x0005, 0x007c, 0x157e, 0x8007, 0xa084, 0x00ff, 0x8003, 0x8003,
-+ 0xa080, 0x0020, 0x789a, 0x79a4, 0xa18c, 0xfff0, 0x2001, 0x3846,
-+ 0x2004, 0xa082, 0x0028, 0x0040, 0x2e7d, 0x2021, 0x2ef4, 0x2019,
-+ 0x0014, 0x20a9, 0x000c, 0x0078, 0x2e83, 0x2021, 0x2f00, 0x2019,
-+ 0x0019, 0x20a9, 0x000d, 0x2011, 0x0064, 0x2404, 0xa084, 0xfff0,
-+ 0xa106, 0x0040, 0x2e92, 0x8420, 0x2300, 0xa210, 0x0070, 0x2e92,
-+ 0x0078, 0x2e85, 0x157f, 0x007c, 0x157e, 0x2011, 0x3846, 0x2214,
-+ 0xa282, 0x0032, 0x0048, 0x2ea8, 0x0040, 0x2eac, 0x2021, 0x2ee6,
-+ 0x2019, 0x0011, 0x20a9, 0x000e, 0x2011, 0x0032, 0x0078, 0x2ebc,
-+ 0xa282, 0x0028, 0x0040, 0x2eb4, 0x2021, 0x2ef4, 0x2019, 0x0014,
-+ 0x20a9, 0x000c, 0x0078, 0x2eba, 0x2021, 0x2f00, 0x2019, 0x0019,
-+ 0x20a9, 0x000d, 0x2011, 0x0064, 0x2200, 0xa502, 0x0040, 0x2ecc,
-+ 0x0048, 0x2ecc, 0x8420, 0x2300, 0xa210, 0x0070, 0x2ec9, 0x0078,
-+ 0x2ebc, 0x157f, 0xa006, 0x007c, 0x157f, 0xa582, 0x0064, 0x00c8,
-+ 0x2ed5, 0x7808, 0xa085, 0x0070, 0x780a, 0x78ec, 0xa084, 0x0300,
-+ 0x0040, 0x2ee3, 0x2404, 0xa09e, 0x1201, 0x00c0, 0x2ee3, 0x2001,
-+ 0x2101, 0x0078, 0x2ee4, 0x2404, 0xa005, 0x007c, 0x1201, 0x3002,
-+ 0x3202, 0x4203, 0x4403, 0x5404, 0x5604, 0x6605, 0x6805, 0x7806,
-+ 0x7a06, 0x0a07, 0x0c07, 0x0e07, 0x3202, 0x4202, 0x5202, 0x6202,
-+ 0x7202, 0x6605, 0x7605, 0x7805, 0x7a05, 0x7c05, 0x7e05, 0x7f05,
-+ 0x2202, 0x3202, 0x4202, 0x5202, 0x5404, 0x6404, 0x7404, 0x7604,
-+ 0x7804, 0x7a04, 0x7c04, 0x7e04, 0x7f04, 0x789b, 0x0010, 0xa046,
-+ 0x007c, 0xa784, 0x0f00, 0x800b, 0xa784, 0x001f, 0x8003, 0x8003,
-+ 0x8003, 0x8003, 0xa105, 0xa0e0, 0x3b00, 0x007c, 0x79d8, 0x7adc,
-+ 0x78d0, 0x801b, 0x00c8, 0x2f25, 0x8000, 0xa084, 0x003f, 0xa108,
-+ 0xa291, 0x0000, 0x007c, 0x0f7e, 0x2079, 0x0100, 0x2009, 0x3840,
-+ 0x2091, 0x8000, 0x2104, 0x0079, 0x2f35, 0x2f67, 0x2f3f, 0x2f3f,
-+ 0x2f3f, 0x2f3f, 0x2f3f, 0x2f3d, 0x2f3d, 0x1078, 0x1ce7, 0x784b,
-+ 0x0004, 0x7848, 0xa084, 0x0004, 0x00c0, 0x2f41, 0x784b, 0x0008,
-+ 0x7848, 0xa084, 0x0008, 0x00c0, 0x2f48, 0x68b0, 0xa085, 0x4000,
-+ 0x68b2, 0x7858, 0xa085, 0x4000, 0x785a, 0x7830, 0xa084, 0x0080,
-+ 0x00c0, 0x2f67, 0x0018, 0x2f67, 0x6818, 0xa084, 0x0020, 0x00c0,
-+ 0x2f65, 0x781b, 0x00dd, 0x0078, 0x2f67, 0x781b, 0x00e4, 0x2091,
-+ 0x8001, 0x0f7f, 0x007c, 0x0c7e, 0x6810, 0x8007, 0xa084, 0x000f,
-+ 0x8003, 0x8003, 0x8003, 0xa0e0, 0x3a80, 0x6004, 0xa084, 0x000a,
-+ 0x00c0, 0x2fb4, 0x6108, 0xa194, 0xff00, 0x0040, 0x2fb4, 0xa18c,
-+ 0x00ff, 0x6004, 0xa084, 0x0014, 0x00c0, 0x2f9d, 0xa085, 0x0014,
-+ 0x6006, 0x017e, 0x691c, 0xa18d, 0x0002, 0x691e, 0x017f, 0x2001,
-+ 0x000c, 0xa106, 0x0040, 0x2f99, 0x2100, 0x8003, 0x2008, 0x0078,
-+ 0x2fad, 0x2009, 0x0019, 0x0078, 0x2fad, 0x2011, 0x0000, 0x6000,
-+ 0xa084, 0xdfff, 0x6002, 0x6004, 0xa084, 0xffef, 0x6006, 0x017e,
-+ 0x691c, 0xa18d, 0x0002, 0x691e, 0x017f, 0x2100, 0xa205, 0x600a,
-+ 0x6004, 0xa085, 0x000a, 0x6006, 0x0c7f, 0x007c, 0x781b, 0x006a,
-+ 0x0078, 0x1d39, 0x781b, 0x0069, 0x0078, 0x1d39, 0x781b, 0x0058,
-+ 0x0078, 0x1d39, 0x781b, 0x0055, 0x0078, 0x1d39, 0x781b, 0x00dd,
-+ 0x0078, 0x1d39, 0x781b, 0x00dc, 0x0078, 0x1d39, 0x781b, 0x00e4,
-+ 0x0078, 0x1d39, 0x781b, 0x00e3, 0x0078, 0x1d39, 0x781b, 0x009e,
-+ 0x0078, 0x1d39, 0x781b, 0x009d, 0x0078, 0x1d39, 0x70a3, 0x0001,
-+ 0x781b, 0x0046, 0x0078, 0x1d39, 0x007e, 0x7830, 0xa084, 0x00c0,
-+ 0x00c0, 0x2ffb, 0x7808, 0xa084, 0xfffd, 0x780a, 0x0005, 0x0005,
-+ 0x0005, 0x0005, 0x78ec, 0xa084, 0x0021, 0x0040, 0x2ffb, 0x7808,
-+ 0xa085, 0x0002, 0x780a, 0x007f, 0x007c, 0x7808, 0xa085, 0x0002,
-+ 0x780a, 0x007c, 0x7830, 0xa084, 0x0040, 0x00c0, 0x3002, 0x0098,
-+ 0x300b, 0x78ac, 0x007c, 0x7808, 0xa084, 0xfffd, 0x780a, 0x0005,
-+ 0x0005, 0x0005, 0x0005, 0x78ec, 0xa084, 0x0021, 0x0040, 0x301a,
-+ 0x0098, 0x3018, 0x78ac, 0x007e, 0x7808, 0xa085, 0x0002, 0x780a,
-+ 0x007f, 0x007c, 0xa784, 0x0070, 0x0040, 0x302e, 0x0c7e, 0x2d60,
-+ 0x2f68, 0x1078, 0x1c97, 0x2d78, 0x2c68, 0x0c7f, 0x6817, 0x0003,
-+ 0x7858, 0xa084, 0x3f00, 0x681a, 0x682f, 0x0000, 0x682b, 0x0000,
-+ 0x784b, 0x0008, 0x78e4, 0xa005, 0x00d0, 0x21cc, 0xa084, 0x0020,
-+ 0x0040, 0x21cc, 0x78ec, 0xa084, 0x0003, 0x0040, 0x21cc, 0x0018,
-+ 0x21cc, 0x0078, 0x2de0, 0x0c7e, 0x6810, 0x8007, 0xa084, 0x000f,
-+ 0x8003, 0x8003, 0x8003, 0xa080, 0x3a80, 0x2060, 0x2048, 0x704a,
-+ 0x6000, 0x704e, 0x6004, 0x7052, 0x0c7f, 0x007c, 0x0020, 0x0020,
-+ 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020,
-+ 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020,
-+ 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020,
-+ 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020,
-+ 0x0062, 0x0009, 0x0014, 0x0014, 0x9847, 0x0014, 0x0014, 0x98f5,
-+ 0x98e7, 0x0014, 0x0014, 0x0080, 0x00bf, 0x0100, 0x0402, 0x2008,
-+ 0xf880, 0xa20a, 0x0014, 0x300b, 0xa20c, 0x0014, 0xa200, 0x8838,
-+ 0x817e, 0x842a, 0x84a0, 0x3806, 0x8839, 0x28c2, 0x9cc3, 0xa805,
-+ 0x0864, 0xa83b, 0x3008, 0x28c1, 0x9cc3, 0xa201, 0x300c, 0x2847,
-+ 0x8161, 0x846a, 0x8000, 0x84a4, 0x1856, 0x883a, 0xa808, 0x28e2,
-+ 0x9ca0, 0xa8f3, 0x0864, 0xa829, 0x300c, 0xa801, 0x3008, 0x28e1,
-+ 0x9ca0, 0x280d, 0xa204, 0x64c0, 0x67a0, 0x6fc0, 0x1814, 0x883b,
-+ 0x7023, 0x8576, 0x8677, 0xa80f, 0x786e, 0x883e, 0xa80c, 0x282b,
-+ 0xa205, 0x64a0, 0x67a0, 0x6fc0, 0x1814, 0x883b, 0x7023, 0x8576,
-+ 0x8677, 0xa801, 0x883e, 0x2069, 0x28c1, 0x9cc3, 0x2044, 0x2103,
-+ 0x20a2, 0x2081, 0xa8dc, 0xa207, 0x0014, 0xa203, 0x8000, 0x84a8,
-+ 0x85a4, 0x1872, 0x849a, 0x883c, 0x1fe2, 0xf601, 0xa208, 0x856e,
-+ 0x866f, 0x0704, 0x3008, 0x9ca0, 0x0014, 0xa202, 0x8000, 0x85a4,
-+ 0x3009, 0x84a8, 0x19e2, 0xf848, 0x8174, 0x86eb, 0x85eb, 0x872e,
-+ 0x87a9, 0x883f, 0x08e6, 0xa8f1, 0xf861, 0xa8e8, 0xf801, 0x0014,
-+ 0xf881, 0x0016, 0x85b2, 0x80f0, 0x9532, 0xfaa2, 0x1de2, 0x0014,
-+ 0x8532, 0xf221, 0x0014, 0x1de2, 0x84a8, 0xd6e0, 0x1fe6, 0x0014,
-+ 0xa206, 0x6865, 0x817f, 0x842a, 0x1dc1, 0x8823, 0x0016, 0x6042,
-+ 0x8008, 0xa8fa, 0x8000, 0x84a4, 0x8160, 0x842a, 0xf021, 0x3008,
-+ 0x84a8, 0x1dc6, 0x20d7, 0x8822, 0x0016, 0x8000, 0x2848, 0x1011,
-+ 0xa8fc, 0x3008, 0x8000, 0xa000, 0x2802, 0x1011, 0xa8fd, 0xa887,
-+ 0x3008, 0x283d, 0x1011, 0xa8fd, 0xa209, 0x0017, 0x300c, 0x8000,
-+ 0x85a4, 0x1de2, 0xdac1, 0x0014, 0x26e0, 0x873a, 0xfaa2, 0x19f2,
-+ 0x1fe2, 0x0014, 0xa20b, 0x0014, 0xa20d, 0x817e, 0x842a, 0x84a0,
-+ 0x3806, 0x0210, 0x9ccd, 0x0704, 0x0000, 0x127e, 0x2091, 0x2200,
-+ 0x2049, 0x314d, 0x7000, 0x7204, 0xa205, 0x720c, 0xa215, 0x7008,
-+ 0xa084, 0xfffd, 0xa205, 0x0040, 0x315f, 0x0078, 0x3164, 0x7003,
-+ 0x0000, 0x127f, 0x2000, 0x007c, 0x7000, 0xa084, 0x0001, 0x00c0,
-+ 0x3192, 0x7108, 0x8104, 0x00c8, 0x3171, 0x1078, 0x322e, 0x0078,
-+ 0x3169, 0x700c, 0xa08c, 0x007f, 0x0040, 0x3192, 0x7004, 0x8004,
-+ 0x00c8, 0x3189, 0x7014, 0xa005, 0x00c0, 0x3185, 0x7010, 0xa005,
-+ 0x0040, 0x3189, 0xa102, 0x00c8, 0x3169, 0x7007, 0x0010, 0x0078,
-+ 0x3192, 0x8aff, 0x0040, 0x3192, 0x1078, 0x33eb, 0x00c0, 0x318c,
-+ 0x0040, 0x3169, 0x1078, 0x31dc, 0x7003, 0x0000, 0x127f, 0x2000,
-+ 0x007c, 0x6424, 0x84ff, 0x0040, 0x31b6, 0x2c70, 0x2039, 0x31bb,
-+ 0x2704, 0xae68, 0x680c, 0xa630, 0x6808, 0xa529, 0x8421, 0x0040,
-+ 0x31b6, 0x8738, 0x2704, 0xa005, 0x00c0, 0x31a1, 0x7098, 0xa075,
-+ 0x0040, 0x31b6, 0x2039, 0x31b8, 0x0078, 0x31a0, 0x007c, 0x0000,
-+ 0x0004, 0x0008, 0x000c, 0x0010, 0x0014, 0x0018, 0x001c, 0x0000,
-+ 0x127e, 0x2091, 0x2200, 0x2079, 0x3800, 0x2071, 0x0010, 0x7007,
-+ 0x000a, 0x7007, 0x0002, 0x7003, 0x0000, 0x2071, 0x0020, 0x7007,
-+ 0x000a, 0x7007, 0x0002, 0x7003, 0x0000, 0x2049, 0x0000, 0x78b7,
-+ 0x0000, 0x127f, 0x2000, 0x007c, 0x2049, 0x31dc, 0x7004, 0x8004,
-+ 0x00c8, 0x3208, 0x7007, 0x0012, 0x7108, 0x7008, 0xa106, 0x00c0,
-+ 0x31e4, 0xa184, 0x0030, 0x0040, 0x31f1, 0xa086, 0x0030, 0x00c0,
-+ 0x31e4, 0x7000, 0xa084, 0x0001, 0x00c0, 0x3208, 0x7008, 0xa084,
-+ 0x000c, 0x00c0, 0x3206, 0x710c, 0xa184, 0x0300, 0x00c0, 0x3206,
-+ 0xa184, 0x007f, 0x00c0, 0x31dc, 0x0078, 0x3208, 0x6817, 0x0003,
-+ 0x7007, 0x0012, 0x7007, 0x0008, 0x7004, 0xa084, 0x0008, 0x00c0,
-+ 0x320c, 0x7007, 0x0012, 0x7108, 0x8104, 0x0048, 0x3211, 0x78b7,
-+ 0x0000, 0x7003, 0x0000, 0x2049, 0x0000, 0x007c, 0x107e, 0x007e,
-+ 0x127e, 0x157e, 0x2091, 0x2200, 0x7108, 0x1078, 0x322e, 0x157f,
-+ 0x127f, 0x2091, 0x8001, 0x007f, 0x107f, 0x007c, 0x7204, 0x2118,
-+ 0x7108, 0x700c, 0xa084, 0x0300, 0x00c0, 0x3270, 0xa184, 0x000c,
-+ 0x00c0, 0x3270, 0x8213, 0x8213, 0x8213, 0x8213, 0xa284, 0x0100,
-+ 0xa10d, 0x810b, 0x810b, 0x810f, 0xa184, 0x0007, 0x0079, 0x3248,
-+ 0x3252, 0x3262, 0x3270, 0x3262, 0x3284, 0x3284, 0x3270, 0x3282,
-+ 0x1078, 0x1ce7, 0x7007, 0x0002, 0x8aff, 0x00c0, 0x325b, 0x2049,
-+ 0x0000, 0x0078, 0x325f, 0x1078, 0x33eb, 0x00c0, 0x325b, 0x78b7,
-+ 0x0000, 0x007c, 0x7007, 0x0002, 0x8aff, 0x00c0, 0x3269, 0x0078,
-+ 0x326d, 0x1078, 0x33eb, 0x00c0, 0x3269, 0x78b7, 0x0000, 0x007c,
-+ 0x7007, 0x0002, 0x1078, 0x31dc, 0x1078, 0x2f2b, 0x6814, 0xa084,
-+ 0x8000, 0x0040, 0x327d, 0x6817, 0x0002, 0x007c, 0x1078, 0x1ce7,
-+ 0x1078, 0x1ce7, 0x1078, 0x32d6, 0x7210, 0x7114, 0x700c, 0xa09c,
-+ 0x007f, 0x2800, 0xa300, 0xa211, 0xa189, 0x0000, 0x78b4, 0xa005,
-+ 0x0040, 0x3296, 0x78b7, 0x0000, 0x0078, 0x32b9, 0x1078, 0x32d6,
-+ 0x2704, 0x2c58, 0xac60, 0x630c, 0x2200, 0xa322, 0x6308, 0x2100,
-+ 0xa31b, 0x2400, 0xa305, 0x0040, 0x32af, 0x00c8, 0x32af, 0x8412,
-+ 0x8210, 0x830a, 0xa189, 0x0000, 0x2b60, 0x0078, 0x3296, 0x2b60,
-+ 0x8a07, 0xa7ba, 0x31b8, 0xa73d, 0x2c00, 0x6882, 0x6f86, 0x6c8e,
-+ 0x6b8a, 0x7007, 0x0012, 0x1078, 0x31dc, 0x007c, 0x8738, 0x2704,
-+ 0xa005, 0x00c0, 0x32ca, 0x6098, 0xa005, 0x0040, 0x32d3, 0x2060,
-+ 0x2039, 0x31b8, 0x8a51, 0x0040, 0x32d2, 0x7008, 0xa084, 0x00c0,
-+ 0xa086, 0x00c0, 0x007c, 0x2051, 0x0000, 0x007c, 0x8a50, 0x8739,
-+ 0x2704, 0xa004, 0x00c0, 0x32e3, 0x2039, 0x31be, 0x6000, 0xa064,
-+ 0x00c0, 0x32e3, 0x2d60, 0x007c, 0x127e, 0x0d7e, 0x2091, 0x2200,
-+ 0x0d7f, 0x6880, 0x2060, 0x6884, 0x6b88, 0x6c8c, 0x8057, 0xaad4,
-+ 0x00ff, 0xa084, 0x00ff, 0xa0b8, 0x31b8, 0x7e08, 0xa6b5, 0x000c,
-+ 0x6818, 0xa084, 0x0040, 0x0040, 0x32ff, 0xa6b5, 0x0001, 0x0f7e,
-+ 0x2079, 0x0100, 0x7858, 0x0f7f, 0xa084, 0x0040, 0x0040, 0x330e,
-+ 0xa684, 0x0001, 0x00c0, 0x330e, 0xa6b5, 0x0001, 0x7007, 0x0004,
-+ 0x7004, 0xa084, 0x0004, 0x00c0, 0x3310, 0x7000, 0xa005, 0x0040,
-+ 0x331b, 0x1078, 0x1ce7, 0x2400, 0xa305, 0x00c0, 0x3321, 0x0078,
-+ 0x335e, 0x2c58, 0x2704, 0xac60, 0x6004, 0xa400, 0x007e, 0x701a,
-+ 0x6000, 0xa301, 0x701e, 0x2009, 0x04fd, 0x2104, 0xa086, 0x04fd,
-+ 0x007f, 0x00c0, 0x334e, 0xa084, 0x0001, 0x0040, 0x334e, 0xa684,
-+ 0x0001, 0x00c0, 0x334e, 0x7013, 0x0001, 0x7017, 0x0000, 0x7602,
-+ 0x7007, 0x0001, 0x78b7, 0x0001, 0xa4a0, 0x0001, 0xa399, 0x0000,
-+ 0x6004, 0xa400, 0x701a, 0x6000, 0xa301, 0x701e, 0x620c, 0x2400,
-+ 0xa202, 0x7012, 0x6208, 0x2300, 0xa203, 0x7016, 0x7602, 0x7007,
-+ 0x0001, 0x2b60, 0x1078, 0x32be, 0x0078, 0x3360, 0x1078, 0x33eb,
-+ 0x00c0, 0x335e, 0x127f, 0x2000, 0x007c, 0x127e, 0x0d7e, 0x2091,
-+ 0x2200, 0x0d7f, 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0,
-+ 0x336c, 0x7003, 0x0008, 0x127f, 0x2000, 0x007c, 0x127e, 0x0d7e,
-+ 0x2091, 0x2200, 0x0d7f, 0x2049, 0x3376, 0x7007, 0x0004, 0x7004,
-+ 0xa084, 0x0004, 0x00c0, 0x337f, 0x7e08, 0xa6b5, 0x000c, 0x6818,
-+ 0xa084, 0x0040, 0x0040, 0x338e, 0xa6b5, 0x0001, 0x6824, 0xa005,
-+ 0x0040, 0x339a, 0x2050, 0x2039, 0x31bb, 0x2d60, 0x1078, 0x33eb,
-+ 0x00c0, 0x3396, 0x127f, 0x2000, 0x007c, 0x127e, 0x007e, 0x017e,
-+ 0x0d7e, 0x2091, 0x2200, 0x0d7f, 0x037f, 0x047f, 0x7e08, 0xa6b5,
-+ 0x000c, 0x6818, 0xa084, 0x0040, 0x0040, 0x33b0, 0xa6b5, 0x0001,
-+ 0x2049, 0x339d, 0x6824, 0xa055, 0x0040, 0x33e8, 0x2d70, 0x2e60,
-+ 0x2039, 0x31bb, 0x2704, 0xae68, 0x680c, 0xa422, 0x6808, 0xa31b,
-+ 0x0048, 0x33d5, 0x8a51, 0x00c0, 0x33c7, 0x1078, 0x1ce7, 0x8738,
-+ 0x2704, 0xa005, 0x00c0, 0x33bb, 0x7098, 0xa075, 0x2060, 0x0040,
-+ 0x33e8, 0x2039, 0x31b8, 0x0078, 0x33ba, 0x8422, 0x8420, 0x831a,
-+ 0xa399, 0x0000, 0x690c, 0x2400, 0xa122, 0x6908, 0x2300, 0xa11b,
-+ 0x00c8, 0x33e4, 0x1078, 0x1ce7, 0x2071, 0x0020, 0x0078, 0x330e,
-+ 0x127f, 0x2000, 0x007c, 0x7008, 0xa084, 0x00c0, 0xa086, 0x00c0,
-+ 0x0040, 0x3413, 0x2704, 0xac08, 0x2104, 0x701e, 0x8108, 0x2104,
-+ 0x701a, 0x8108, 0x2104, 0x7016, 0x8108, 0x2104, 0x7012, 0x0f7e,
-+ 0x2079, 0x0100, 0x7858, 0x0f7f, 0xa084, 0x0040, 0x0040, 0x340e,
-+ 0xa684, 0x0001, 0x00c0, 0x340e, 0xa6b5, 0x0001, 0x7602, 0x7007,
-+ 0x0001, 0x1078, 0x32be, 0x007c, 0x127e, 0x007e, 0x0d7e, 0x2091,
-+ 0x2200, 0x2049, 0x3414, 0x0d7f, 0x087f, 0x7108, 0xa184, 0x00c0,
-+ 0x00c0, 0x342a, 0x6824, 0xa005, 0x0040, 0x343a, 0x0078, 0x3164,
-+ 0x0078, 0x343a, 0x7108, 0x8104, 0x00c8, 0x3432, 0x1078, 0x322e,
-+ 0x0078, 0x341d, 0x7007, 0x0010, 0x7108, 0x8104, 0x00c8, 0x3434,
-+ 0x1078, 0x322e, 0x7008, 0xa086, 0x0002, 0x00c0, 0x341d, 0x7000,
-+ 0xa005, 0x00c0, 0x341d, 0x7003, 0x0000, 0x2049, 0x0000, 0x127f,
-+ 0x2000, 0x007c, 0x127e, 0x147e, 0x137e, 0x157e, 0x0d7e, 0x2091,
-+ 0x2200, 0x0d7f, 0x2049, 0x344a, 0xad80, 0x0010, 0x20a0, 0x2099,
-+ 0x0031, 0x700c, 0xa084, 0x007f, 0x6826, 0x7007, 0x0008, 0x7007,
-+ 0x0002, 0x7003, 0x0001, 0x0040, 0x3468, 0x8000, 0x80ac, 0x53a5,
-+ 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, 0x346a, 0x2049,
-+ 0x0000, 0x7003, 0x0000, 0x157f, 0x137f, 0x147f, 0x127f, 0x2000,
-+ 0x007c, 0x127e, 0x007e, 0x0d7e, 0x2091, 0x2200, 0x0d7f, 0x2049,
-+ 0x3479, 0x6880, 0x2060, 0x6884, 0x6b88, 0x6c8c, 0x8057, 0xaad4,
-+ 0x00ff, 0xa084, 0x00ff, 0xa0b8, 0x31b8, 0x7e08, 0xa6b5, 0x0004,
-+ 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, 0x3492, 0x2c58,
-+ 0x2704, 0xac60, 0x6004, 0xa400, 0x701a, 0x6000, 0xa301, 0x701e,
-+ 0x7013, 0x0001, 0x7017, 0x0000, 0x7602, 0x7007, 0x0001, 0x007f,
-+ 0x8007, 0x2009, 0x0031, 0x200a, 0x00a0, 0x34ac, 0x7108, 0x7007,
-+ 0x0002, 0x810c, 0x00c8, 0x34ac, 0x810c, 0x0048, 0x34b9, 0x0078,
-+ 0x3270, 0xa4a0, 0x0001, 0xa399, 0x0000, 0x6b8a, 0x6c8e, 0x7007,
-+ 0x0004, 0x2049, 0x0000, 0x7003, 0x0000, 0x127f, 0x2000, 0x007c,
-+ 0x20a9, 0x0010, 0xa006, 0x8004, 0x8086, 0x818e, 0x00c8, 0x34d1,
-+ 0xa200, 0x00f0, 0x34cc, 0x8086, 0x818e, 0x007c, 0x157e, 0x20a9,
-+ 0x0010, 0xa005, 0x0040, 0x34f7, 0xa11a, 0x00c8, 0x34f7, 0x8213,
-+ 0x818d, 0x0048, 0x34ea, 0xa11a, 0x00c8, 0x34eb, 0x00f0, 0x34df,
-+ 0x0078, 0x34ef, 0xa11a, 0x2308, 0x8210, 0x00f0, 0x34df, 0x007e,
-+ 0x3200, 0xa084, 0xf7ff, 0x2080, 0x007f, 0x157f, 0x007c, 0x007e,
-+ 0x3200, 0xa085, 0x0800, 0x0078, 0x34f3, 0x00e0, 0x3563, 0x2091,
-+ 0x6000, 0x7820, 0x8001, 0x7822, 0x00c0, 0x355b, 0x7824, 0x7822,
-+ 0x2009, 0x3834, 0x2104, 0xa005, 0x00c0, 0x3510, 0x2001, 0x0010,
-+ 0x8001, 0x200a, 0x077e, 0x803f, 0x1078, 0x2f11, 0x077f, 0x20a9,
-+ 0x0020, 0x601f, 0x0064, 0xace0, 0x0010, 0x00f0, 0x3519, 0x2091,
-+ 0x8000, 0x2069, 0x3840, 0x6800, 0xa084, 0x0007, 0x0040, 0x3538,
-+ 0xa086, 0x0002, 0x0040, 0x3538, 0x6830, 0xa00d, 0x0040, 0x3538,
-+ 0x2104, 0xa005, 0x0040, 0x3538, 0x8001, 0x200a, 0x0040, 0x3640,
-+ 0x2061, 0x3b00, 0x2009, 0x0002, 0x20a9, 0x0100, 0x603c, 0xa005,
-+ 0x0040, 0x354e, 0x8001, 0x603e, 0x00c0, 0x354e, 0x6010, 0xa005,
-+ 0x0040, 0x354e, 0x017e, 0x1078, 0x1b49, 0x017f, 0xace0, 0x0010,
-+ 0x0070, 0x3554, 0x0078, 0x353e, 0x8109, 0x0040, 0x355b, 0x20a9,
-+ 0x0100, 0x0078, 0x353e, 0x1078, 0x3578, 0x1078, 0x3566, 0x1078,
-+ 0x359d, 0x1078, 0x3707, 0x2091, 0x8001, 0x007c, 0x783c, 0x8001,
-+ 0x783e, 0x00c0, 0x3577, 0x7840, 0x783e, 0x7848, 0xa005, 0x0040,
-+ 0x3577, 0x8001, 0x784a, 0x00c0, 0x3577, 0x1078, 0x1b49, 0x007c,
-+ 0x7834, 0x8001, 0x7836, 0x00c0, 0x359c, 0x7838, 0x7836, 0x2091,
-+ 0x8000, 0x7844, 0xa005, 0x00c0, 0x3587, 0x2001, 0x0101, 0x8001,
-+ 0x7846, 0xa080, 0x5b00, 0x2040, 0x2004, 0xa065, 0x0040, 0x359c,
-+ 0x6020, 0xa005, 0x0040, 0x3598, 0x8001, 0x6022, 0x0040, 0x35cc,
-+ 0x6000, 0x2c40, 0x0078, 0x358d, 0x007c, 0x7828, 0x8001, 0x782a,
-+ 0x00c0, 0x35cb, 0x782c, 0x782a, 0x7830, 0xa005, 0x00c0, 0x35aa,
-+ 0x2001, 0x0200, 0x8001, 0x7832, 0x8003, 0x8003, 0x8003, 0x8003,
-+ 0xa090, 0x3b00, 0xa298, 0x0002, 0x2304, 0xa084, 0x0008, 0x0040,
-+ 0x35cb, 0xa290, 0x0009, 0x2204, 0xa005, 0x0040, 0x35c3, 0x8001,
-+ 0x2012, 0x00c0, 0x35cb, 0x2304, 0xa084, 0xfff7, 0xa085, 0x0080,
-+ 0x201a, 0x1078, 0x1b49, 0x007c, 0x2069, 0x3840, 0x6800, 0xa005,
-+ 0x0040, 0x35d6, 0x683c, 0xac06, 0x0040, 0x3640, 0x6710, 0x6fb6,
-+ 0x1078, 0x1758, 0x6808, 0xa084, 0x0020, 0x00c0, 0x363d, 0x2009,
-+ 0x382b, 0x2104, 0xa005, 0x0040, 0x35e9, 0x6023, 0x0001, 0x0078,
-+ 0x363d, 0x6808, 0xa084, 0xffef, 0xa085, 0x0021, 0x6017, 0x0006,
-+ 0x60b0, 0xa084, 0x3f00, 0x601a, 0x601c, 0xa084, 0x00ff, 0xa085,
-+ 0x0060, 0x601e, 0x6000, 0x2042, 0x6710, 0x6fb6, 0x1078, 0x1758,
-+ 0x6818, 0xa005, 0x0040, 0x3606, 0x8001, 0x681a, 0x6808, 0xa084,
-+ 0xffef, 0x680a, 0x6810, 0x8001, 0x00d0, 0x3610, 0x1078, 0x1ce7,
-+ 0x6812, 0x602f, 0x0000, 0x602b, 0x0000, 0x2c68, 0x1078, 0x18b6,
-+ 0x2069, 0x3840, 0x6710, 0xa784, 0x0f00, 0x68b6, 0x2001, 0x0002,
-+ 0x1078, 0x1b44, 0x2041, 0x0021, 0x2049, 0x0005, 0x2051, 0x0030,
-+ 0x1078, 0x1765, 0x2011, 0x3835, 0x2214, 0x6a3e, 0x8738, 0xa784,
-+ 0x001f, 0x00c0, 0x3622, 0x2009, 0x382b, 0x200b, 0x0008, 0x2009,
-+ 0x382c, 0x2069, 0x3840, 0x68b4, 0x200a, 0x2091, 0x8001, 0x007c,
-+ 0x2009, 0x384f, 0x2164, 0x2069, 0x0100, 0x1078, 0x1c97, 0x6017,
-+ 0x0006, 0x6858, 0xa084, 0x3f00, 0x601a, 0x601c, 0xa084, 0x00ff,
-+ 0xa085, 0x0048, 0x601e, 0x602f, 0x0000, 0x602b, 0x0000, 0x6830,
-+ 0xa084, 0x0040, 0x0040, 0x367c, 0x684b, 0x0004, 0x20a9, 0x0014,
-+ 0x6848, 0xa084, 0x0004, 0x0040, 0x3669, 0x0070, 0x3669, 0x0078,
-+ 0x3660, 0x684b, 0x0009, 0x20a9, 0x0014, 0x6848, 0xa084, 0x0001,
-+ 0x0040, 0x3676, 0x0070, 0x3676, 0x0078, 0x366d, 0x20a9, 0x00fa,
-+ 0x0070, 0x367c, 0x0078, 0x3678, 0x6808, 0xa084, 0xfffd, 0x680a,
-+ 0x681b, 0x0046, 0x2009, 0x3868, 0x200b, 0x0007, 0x784c, 0x784a,
-+ 0x2091, 0x8001, 0x007c, 0x2079, 0x3800, 0x1078, 0x36de, 0x1078,
-+ 0x36a6, 0x1078, 0x36b4, 0x1078, 0x36c9, 0x1078, 0x36f3, 0x2009,
-+ 0x3833, 0x200b, 0x0000, 0x2009, 0x3834, 0x200b, 0x0000, 0x7833,
-+ 0x0000, 0x7847, 0x0000, 0x784b, 0x0000, 0x007c, 0x2019, 0x0003,
-+ 0x2011, 0x3846, 0x2204, 0xa086, 0x003c, 0x0040, 0x36b1, 0x2019,
-+ 0x0002, 0x7b2a, 0x7b2e, 0x007c, 0x2019, 0x0030, 0x2011, 0x3846,
-+ 0x2204, 0xa086, 0x0032, 0x0040, 0x36c6, 0x2019, 0x0039, 0x2204,
-+ 0xa086, 0x003c, 0x0040, 0x36c6, 0x2019, 0x0027, 0x7b36, 0x7b3a,
-+ 0x007c, 0x2019, 0x000f, 0x2011, 0x3846, 0x2204, 0xa086, 0x003c,
-+ 0x0040, 0x36db, 0x2019, 0x000d, 0x2204, 0xa086, 0x0032, 0x0040,
-+ 0x36db, 0x2019, 0x000a, 0x7b3e, 0x7b42, 0x007c, 0x2019, 0x2faf,
-+ 0x2011, 0x3846, 0x2204, 0xa086, 0x0032, 0x0040, 0x36f0, 0x2019,
-+ 0x3971, 0x2204, 0xa086, 0x003c, 0x0040, 0x36f0, 0x2019, 0x2626,
-+ 0x7b22, 0x7b26, 0x007c, 0x2019, 0x0001, 0x2011, 0x3846, 0x2204,
-+ 0xa086, 0x003c, 0x0040, 0x36fe, 0x2019, 0x0001, 0x017e, 0x2009,
-+ 0x3831, 0x230a, 0x2009, 0x3832, 0x230a, 0x017f, 0x007c, 0x2009,
-+ 0x3831, 0x2104, 0x8001, 0x200a, 0xa005, 0x00c0, 0x3755, 0x2009,
-+ 0x3832, 0x2104, 0x2009, 0x3831, 0x200a, 0x2009, 0x3833, 0x2104,
-+ 0xa005, 0x00c0, 0x371d, 0x2001, 0x0200, 0x8001, 0x200a, 0x8003,
-+ 0x8003, 0x8003, 0x8003, 0xa090, 0x3b00, 0x2208, 0xa298, 0x0002,
-+ 0x2304, 0xa084, 0x0200, 0x0040, 0x3755, 0xa290, 0x000e, 0x2204,
-+ 0xa005, 0x0040, 0x3740, 0x8001, 0x0040, 0x3740, 0x8001, 0x0040,
-+ 0x3740, 0x8001, 0x0040, 0x3740, 0x8001, 0x2012, 0x00c0, 0x3755,
-+ 0x2012, 0x2304, 0xa084, 0xfdff, 0xa085, 0x0400, 0x201a, 0xa188,
-+ 0x000c, 0x2104, 0x007e, 0xa084, 0x00ff, 0x8001, 0x027f, 0xa294,
-+ 0xff00, 0xa205, 0x200a, 0x1078, 0x1b49, 0x007c, 0x6ed0
-+};
-+#else
-+/*
-+ * Flakey, not quite functional, target mode code for ISP1000
-+ * hacked out of PCI 7.55 initiator/target mode code.
-+ */
-+static const u_int16_t isp_1000_risc_code[] = {
-+ 0x0078, 0x103a, 0x0000, 0x3c1f, 0x0000, 0x2043, 0x4f50, 0x5952,
-+ 0x4947, 0x4854, 0x2031, 0x3939, 0x3520, 0x514c, 0x4f47, 0x4943,
-+ 0x2043, 0x4f52, 0x504f, 0x5241, 0x5449, 0x4f4e, 0x2049, 0x5350,
-+ 0x3130, 0x3030, 0x2049, 0x2f54, 0x2046, 0x6972, 0x6d77, 0x6172,
-+ 0x6520, 0x2056, 0x6572, 0x7369, 0x6f6e, 0x2030, 0x372e, 0x3535,
-+ 0x2020, 0x2043, 0x7573, 0x746f, 0x6d65, 0x7220, 0x4e6f, 0x2e20,
-+ 0x3030, 0x2050, 0x726f, 0x6475, 0x6374, 0x204e, 0x6f2e, 0x2020,
-+ 0x3031, 0x2024, 0x3700, 0xa086, 0xffff, 0x0040, 0x1043, 0x2079,
-+ 0x4d00, 0x7803, 0x0001, 0x20c1, 0x0008, 0x2071, 0x0010, 0x70c3,
-+ 0x0004, 0x20c9, 0x73ff, 0x2089, 0x116f, 0x70c7, 0x4953, 0x70cb,
-+ 0x5020, 0x70cf, 0x2020, 0x70d3, 0x0007, 0x3f00, 0x70d6, 0x20c1,
-+ 0x0008, 0x2019, 0x0000, 0x2009, 0xfeff, 0x2100, 0x200b, 0xa5a5,
-+ 0xa1ec, 0x7fff, 0x2d64, 0x206b, 0x0a0a, 0xaddc, 0x3fff, 0x2b54,
-+ 0x205b, 0x5050, 0x2114, 0xa286, 0xa5a5, 0x0040, 0x10b5, 0xa386,
-+ 0x000f, 0x0040, 0x107b, 0x2c6a, 0x2a5a, 0x20c1, 0x0000, 0x2019,
-+ 0x000f, 0x0078, 0x105b, 0x2c6a, 0x2a5a, 0x20c1, 0x0008, 0x2009,
-+ 0x7fff, 0x2148, 0x2944, 0x204b, 0x0a0a, 0xa9bc, 0x3fff, 0x2734,
-+ 0x203b, 0x5050, 0x2114, 0xa286, 0x0a0a, 0x0040, 0x109f, 0x284a,
-+ 0x263a, 0x20c1, 0x0004, 0x2009, 0x3fff, 0x2134, 0x200b, 0x5050,
-+ 0x2114, 0xa286, 0x5050, 0x0040, 0x10a0, 0x0078, 0x1177, 0x284a,
-+ 0x263a, 0x98c0, 0xa188, 0x1000, 0x212c, 0x200b, 0xa5a5, 0x2114,
-+ 0xa286, 0xa5a5, 0x0040, 0x10b2, 0x250a, 0xa18a, 0x1000, 0x98c1,
-+ 0x0078, 0x10b7, 0x250a, 0x0078, 0x10b7, 0x2c6a, 0x2a5a, 0x2130,
-+ 0xa18a, 0x0040, 0x2128, 0xa1a2, 0x4d00, 0x8424, 0x8424, 0x8424,
-+ 0x8424, 0x8424, 0x8424, 0xa192, 0x7400, 0x2009, 0x0000, 0x2001,
-+ 0x0031, 0x1078, 0x1bd8, 0x2218, 0x2079, 0x4d00, 0x2fa0, 0x2408,
-+ 0x2011, 0x0000, 0x20a9, 0x0040, 0x42a4, 0x8109, 0x00c0, 0x10d2,
-+ 0x7ef2, 0x8528, 0x7de6, 0x7cea, 0x7bee, 0x7883, 0x0000, 0x2031,
-+ 0x0030, 0x78cf, 0x0101, 0x780b, 0x0002, 0x780f, 0x0002, 0x784f,
-+ 0x0003, 0x2069, 0x4d40, 0x00a8, 0x10f1, 0x681b, 0x003c, 0x0078,
-+ 0x10f3, 0x681b, 0x0028, 0x6807, 0x0007, 0x680b, 0x00fa, 0x680f,
-+ 0x0008, 0x6813, 0x0005, 0x6823, 0x0000, 0x6827, 0x0006, 0x6817,
-+ 0x0008, 0x682b, 0x0000, 0x681f, 0x0019, 0x2069, 0x4f80, 0x2011,
-+ 0x0020, 0x2009, 0x0010, 0x680b, 0x080c, 0x680f, 0x0019, 0x6803,
-+ 0xfd00, 0x6807, 0x0018, 0x6a1a, 0x2d00, 0xa0e8, 0x0008, 0xa290,
-+ 0x0004, 0x8109, 0x00c0, 0x110b, 0x2069, 0x5000, 0x2009, 0x0002,
-+ 0x20a9, 0x0100, 0x6837, 0x0000, 0x680b, 0x0040, 0x7bf0, 0xa386,
-+ 0xfeff, 0x00c0, 0x1131, 0x6817, 0x0100, 0x681f, 0x0064, 0x0078,
-+ 0x1135, 0x6817, 0x0064, 0x681f, 0x0002, 0xade8, 0x0010, 0x0070,
-+ 0x113b, 0x0078, 0x1122, 0x8109, 0x00c0, 0x1120, 0x1078, 0x20d8,
-+ 0x1078, 0x43d1, 0x1078, 0x18a9, 0x1078, 0x48d9, 0x3200, 0xa085,
-+ 0x000d, 0x2090, 0x70c3, 0x0000, 0x0090, 0x1155, 0x70c0, 0xa086,
-+ 0x0002, 0x00c0, 0x1155, 0x1078, 0x126d, 0x1078, 0x117f, 0x78cc,
-+ 0xa005, 0x00c0, 0x1163, 0x1078, 0x1c01, 0x0010, 0x1169, 0x0068,
-+ 0x1169, 0x1078, 0x1fbd, 0x0010, 0x1169, 0x0068, 0x1169, 0x1078,
-+ 0x198e, 0x00e0, 0x1155, 0x1078, 0x4760, 0x0078, 0x1155, 0x1177,
-+ 0x1179, 0x22cc, 0x22cc, 0x4452, 0x4452, 0x22cc, 0x22cc, 0x0078,
-+ 0x1177, 0x0078, 0x1179, 0x0078, 0x117b, 0x0078, 0x117d, 0x0068,
-+ 0x11ea, 0x2061, 0x0000, 0x6018, 0xa084, 0x0001, 0x00c0, 0x11ea,
-+ 0x7814, 0xa005, 0x00c0, 0x1190, 0x0010, 0x11eb, 0x0078, 0x11ea,
-+ 0x2009, 0x4d5b, 0x2104, 0xa005, 0x00c0, 0x11ea, 0x2009, 0x4d64,
-+ 0x200b, 0x0000, 0x7914, 0xa186, 0x0042, 0x00c0, 0x11b5, 0x7816,
-+ 0x2009, 0x4d62, 0x2164, 0x200b, 0x0000, 0x6018, 0x70c6, 0x6014,
-+ 0x70ca, 0x611c, 0xa18c, 0xff00, 0x6020, 0xa084, 0x00ff, 0xa105,
-+ 0x70ce, 0x1078, 0x188e, 0x0078, 0x11e8, 0x7814, 0xa086, 0x0018,
-+ 0x00c0, 0x11bc, 0x1078, 0x15e0, 0x7817, 0x0000, 0x2009, 0x4d62,
-+ 0x2104, 0xa065, 0x0040, 0x11d8, 0x0c7e, 0x609c, 0x2060, 0x1078,
-+ 0x18f9, 0x0c7f, 0x609f, 0x0000, 0x1078, 0x16a2, 0x2009, 0x000e,
-+ 0x6007, 0x0103, 0x1078, 0x186a, 0x00c0, 0x11e4, 0x1078, 0x188e,
-+ 0x2009, 0x4d62, 0x200b, 0x0000, 0x2009, 0x4d5c, 0x2104, 0x200b,
-+ 0x0000, 0xa005, 0x0040, 0x11e8, 0x2001, 0x4005, 0x0078, 0x126f,
-+ 0x0078, 0x126d, 0x007c, 0x70c3, 0x0000, 0x70c7, 0x0000, 0x70cb,
-+ 0x0000, 0x70cf, 0x0000, 0x70c0, 0xa0bc, 0xffc0, 0x00c0, 0x123b,
-+ 0x2038, 0x0079, 0x11fb, 0x126d, 0x12c4, 0x1292, 0x12d3, 0x12e2,
-+ 0x12e8, 0x1289, 0x16ba, 0x12ec, 0x1281, 0x1296, 0x1298, 0x129a,
-+ 0x129c, 0x16bf, 0x1281, 0x12f4, 0x1313, 0x15ee, 0x16b4, 0x129e,
-+ 0x1517, 0x1533, 0x154f, 0x157a, 0x14d0, 0x14de, 0x14f2, 0x1506,
-+ 0x1384, 0x1281, 0x1332, 0x1338, 0x133d, 0x1342, 0x1348, 0x134d,
-+ 0x1352, 0x1357, 0x135c, 0x1360, 0x1375, 0x1381, 0x1281, 0x1281,
-+ 0x1281, 0x1281, 0x1390, 0x1399, 0x13a8, 0x13ce, 0x13d8, 0x13df,
-+ 0x141a, 0x1429, 0x1438, 0x144a, 0x14b0, 0x14c0, 0x1281, 0x1281,
-+ 0x1281, 0x1281, 0x14c5, 0xa0bc, 0xffa0, 0x00c0, 0x1281, 0x2038,
-+ 0xa084, 0x001f, 0x0079, 0x1244, 0x16f8, 0x16fb, 0x170b, 0x1281,
-+ 0x1281, 0x1846, 0x1858, 0x1281, 0x1281, 0x1281, 0x185c, 0x1864,
-+ 0x1281, 0x1281, 0x1281, 0x1281, 0x1281, 0x1281, 0x1281, 0x1281,
-+ 0x1281, 0x16d6, 0x16ea, 0x1281, 0x1797, 0x1281, 0x1822, 0x182c,
-+ 0x1830, 0x183e, 0x1281, 0x1281, 0x72ca, 0x71c6, 0x2001, 0x4006,
-+ 0x0078, 0x126f, 0x73ce, 0x72ca, 0x71c6, 0x2001, 0x4000, 0x70c2,
-+ 0x0068, 0x1270, 0x2061, 0x0000, 0x601b, 0x0001, 0x2091, 0x5000,
-+ 0x00e0, 0x1278, 0x00e0, 0x127a, 0x0068, 0x127a, 0x2091, 0x4080,
-+ 0x007c, 0x70c3, 0x4001, 0x0078, 0x1270, 0x70c3, 0x4006, 0x0078,
-+ 0x1270, 0x2099, 0x0041, 0x20a1, 0x0041, 0x20a9, 0x0005, 0x53a3,
-+ 0x0078, 0x126d, 0x70c4, 0x70c3, 0x0004, 0x007a, 0x0078, 0x126d,
-+ 0x0078, 0x126d, 0x0078, 0x126d, 0x0078, 0x126d, 0x2091, 0x8000,
-+ 0x70c3, 0x0000, 0x70c7, 0x4953, 0x70cb, 0x5020, 0x70cf, 0x2020,
-+ 0x70d3, 0x0007, 0x3f00, 0x70d6, 0x2079, 0x0000, 0x781b, 0x0001,
-+ 0x2031, 0x0030, 0x2059, 0x1000, 0x2029, 0x0457, 0x2051, 0x0470,
-+ 0x2061, 0x0472, 0x20b9, 0xffff, 0x20c1, 0x0000, 0x2091, 0x5000,
-+ 0x2091, 0x4080, 0x0078, 0x0455, 0x2029, 0x0000, 0x2520, 0x71d0,
-+ 0x73c8, 0x72cc, 0x70c4, 0x1078, 0x19d3, 0x0040, 0x126d, 0x70c3,
-+ 0x4002, 0x0078, 0x126d, 0x2029, 0x0000, 0x2520, 0x71d0, 0x73c8,
-+ 0x72cc, 0x70c4, 0x1078, 0x1a1f, 0x0040, 0x126d, 0x70c3, 0x4002,
-+ 0x0078, 0x126d, 0x71c4, 0x70c8, 0x2114, 0x200a, 0x0078, 0x126b,
-+ 0x71c4, 0x2114, 0x0078, 0x126b, 0x70c7, 0x0007, 0x70cb, 0x0037,
-+ 0x70cf, 0x0000, 0x0078, 0x126d, 0x2029, 0x0000, 0x2530, 0x70c4,
-+ 0x72c8, 0x73cc, 0x74d0, 0x70c6, 0x72ca, 0x73ce, 0x74d2, 0xa005,
-+ 0x0040, 0x130d, 0x8001, 0x7892, 0x7a9a, 0x7b9e, 0x7c96, 0x78cc,
-+ 0xa084, 0xfffc, 0x78ce, 0x0078, 0x1311, 0x78cc, 0xa085, 0x0001,
-+ 0x78ce, 0x0078, 0x126d, 0x2029, 0x0000, 0x2530, 0x70c4, 0x72c8,
-+ 0x73cc, 0x74d4, 0x70c6, 0x72ca, 0x73ce, 0x74d6, 0xa005, 0x0040,
-+ 0x132c, 0x8001, 0x78ae, 0x7ab6, 0x7bba, 0x7cb2, 0x78cc, 0xa084,
-+ 0xfcff, 0x78ce, 0x0078, 0x1330, 0x78cc, 0xa085, 0x0100, 0x78ce,
-+ 0x0078, 0x126d, 0x2009, 0x4d61, 0x210c, 0x7aec, 0x0078, 0x126b,
-+ 0x2009, 0x4d41, 0x210c, 0x0078, 0x126c, 0x2009, 0x4d42, 0x210c,
-+ 0x0078, 0x126c, 0x2061, 0x4d40, 0x610c, 0x6210, 0x0078, 0x126b,
-+ 0x2009, 0x4d45, 0x210c, 0x0078, 0x126c, 0x2009, 0x4d46, 0x210c,
-+ 0x0078, 0x126c, 0x2009, 0x4d48, 0x210c, 0x0078, 0x126c, 0x2009,
-+ 0x4d49, 0x210c, 0x0078, 0x126c, 0x7908, 0x7a0c, 0x0078, 0x126b,
-+ 0x71c4, 0x8107, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa0e8,
-+ 0x4f80, 0x6a00, 0x6804, 0xa084, 0x0008, 0x0040, 0x1372, 0x6b08,
-+ 0x0078, 0x1373, 0x6b0c, 0x0078, 0x126a, 0x77c4, 0x1078, 0x18b9,
-+ 0x2091, 0x8000, 0x6b1c, 0x6a14, 0x2091, 0x8001, 0x2708, 0x0078,
-+ 0x126a, 0x794c, 0x0078, 0x126c, 0x77c4, 0x1078, 0x18b9, 0x2091,
-+ 0x8000, 0x6908, 0x6a18, 0x6b10, 0x2091, 0x8001, 0x0078, 0x126a,
-+ 0x71c4, 0xa182, 0x0010, 0x00c8, 0x1265, 0x1078, 0x21a3, 0x0078,
-+ 0x126a, 0x71c4, 0xa182, 0x0010, 0x00c8, 0x1265, 0x2011, 0x4d41,
-+ 0x2204, 0x007e, 0x2112, 0x1078, 0x215c, 0x017f, 0x0078, 0x126c,
-+ 0x71c4, 0x2011, 0x13c6, 0x20a9, 0x0008, 0x2204, 0xa106, 0x0040,
-+ 0x13b8, 0x8210, 0x0070, 0x13b6, 0x0078, 0x13ad, 0x0078, 0x1265,
-+ 0xa292, 0x13c6, 0x027e, 0x2011, 0x4d42, 0x2204, 0x2112, 0x017f,
-+ 0x007e, 0x1078, 0x2168, 0x017f, 0x0078, 0x126c, 0x03e8, 0x00fa,
-+ 0x01f4, 0x02ee, 0x0064, 0x0019, 0x0032, 0x004b, 0x2061, 0x4d40,
-+ 0x610c, 0x6210, 0x70c4, 0x600e, 0x70c8, 0x6012, 0x0078, 0x126b,
-+ 0x2061, 0x4d40, 0x6114, 0x70c4, 0x6016, 0x0078, 0x126c, 0x2061,
-+ 0x4d40, 0x71c4, 0x2011, 0x0004, 0x601f, 0x0019, 0x2019, 0x1212,
-+ 0xa186, 0x0028, 0x0040, 0x1400, 0x2011, 0x0005, 0x601f, 0x0019,
-+ 0x2019, 0x1212, 0xa186, 0x0032, 0x0040, 0x1400, 0x2011, 0x0006,
-+ 0x601f, 0x000c, 0x2019, 0x2222, 0xa186, 0x003c, 0x00c0, 0x1265,
-+ 0x6018, 0x007e, 0x611a, 0x7800, 0xa084, 0x0001, 0x00c0, 0x1410,
-+ 0x0028, 0x140c, 0x0078, 0x1410, 0x2019, 0x2222, 0x0078, 0x1412,
-+ 0x2019, 0x1212, 0x23b8, 0x1078, 0x2179, 0x1078, 0x48d9, 0x017f,
-+ 0x0078, 0x126c, 0x71c4, 0xa184, 0xffcf, 0x00c0, 0x1265, 0x2011,
-+ 0x4d48, 0x2204, 0x2112, 0x007e, 0x1078, 0x219b, 0x017f, 0x0078,
-+ 0x126c, 0x71c4, 0xa182, 0x0010, 0x00c8, 0x1265, 0x2011, 0x4d49,
-+ 0x2204, 0x007e, 0x2112, 0x1078, 0x218a, 0x017f, 0x0078, 0x126c,
-+ 0x71c4, 0x72c8, 0xa184, 0xfffd, 0x00c0, 0x1264, 0xa284, 0xfffd,
-+ 0x00c0, 0x1264, 0x2100, 0x7908, 0x780a, 0x2200, 0x7a0c, 0x780e,
-+ 0x0078, 0x126b, 0x71c4, 0x8107, 0xa084, 0x000f, 0x8003, 0x8003,
-+ 0x8003, 0xa0e8, 0x4f80, 0x2019, 0x0000, 0x72c8, 0x6800, 0x007e,
-+ 0xa226, 0x0040, 0x1479, 0x6a02, 0xa484, 0x2000, 0x0040, 0x1462,
-+ 0xa39d, 0x0010, 0xa484, 0x1000, 0x0040, 0x1468, 0xa39d, 0x0008,
-+ 0xa484, 0x4000, 0x0040, 0x1479, 0x810f, 0xa284, 0x4000, 0x0040,
-+ 0x1475, 0x1078, 0x21bd, 0x0078, 0x1479, 0x1078, 0x21af, 0x0078,
-+ 0x1479, 0x72cc, 0x6808, 0xa206, 0x0040, 0x14a8, 0xa2a4, 0x00ff,
-+ 0x2061, 0x4d40, 0x6118, 0xa186, 0x0028, 0x0040, 0x148f, 0xa186,
-+ 0x0032, 0x0040, 0x1495, 0xa186, 0x003c, 0x0040, 0x149b, 0xa482,
-+ 0x0064, 0x0048, 0x14a5, 0x0078, 0x149f, 0xa482, 0x0050, 0x0048,
-+ 0x14a5, 0x0078, 0x149f, 0xa482, 0x0043, 0x0048, 0x14a5, 0x71c4,
-+ 0x71c6, 0x027f, 0x72ca, 0x0078, 0x1266, 0x6a0a, 0xa39d, 0x000a,
-+ 0x6804, 0xa305, 0x6806, 0x027f, 0x6b0c, 0x71c4, 0x0078, 0x126a,
-+ 0x77c4, 0x1078, 0x18b9, 0x2091, 0x8000, 0x6a14, 0x6b1c, 0x2091,
-+ 0x8001, 0x70c8, 0x6816, 0x70cc, 0x681e, 0x2708, 0x0078, 0x126a,
-+ 0x70c4, 0x794c, 0x784e, 0x0078, 0x126c, 0x71c4, 0x72c8, 0x73cc,
-+ 0xa182, 0x0010, 0x00c8, 0x1265, 0x1078, 0x21cb, 0x0078, 0x126a,
-+ 0x77c4, 0x1078, 0x18b9, 0x2091, 0x8000, 0x6a08, 0xa295, 0x0002,
-+ 0x6a0a, 0x2091, 0x8001, 0x2708, 0x0078, 0x126b, 0x77c4, 0x1078,
-+ 0x18b9, 0x2091, 0x8000, 0x6a08, 0xa294, 0xfff9, 0x6a0a, 0x6804,
-+ 0xa005, 0x0040, 0x14ed, 0x1078, 0x20a0, 0x2091, 0x8001, 0x2708,
-+ 0x0078, 0x126b, 0x77c4, 0x1078, 0x18b9, 0x2091, 0x8000, 0x6a08,
-+ 0xa295, 0x0004, 0x6a0a, 0x6804, 0xa005, 0x0040, 0x1501, 0x1078,
-+ 0x20a0, 0x2091, 0x8001, 0x2708, 0x0078, 0x126b, 0x77c4, 0x2041,
-+ 0x0001, 0x2049, 0x0005, 0x2051, 0x0020, 0x2091, 0x8000, 0x1078,
-+ 0x18c6, 0x2091, 0x8001, 0x2708, 0x6a08, 0x0078, 0x126b, 0x77c4,
-+ 0x72c8, 0x73cc, 0x77c6, 0x72ca, 0x73ce, 0x1078, 0x1927, 0x00c0,
-+ 0x152f, 0x6818, 0xa005, 0x0040, 0x152f, 0x2708, 0x1078, 0x21db,
-+ 0x00c0, 0x152f, 0x7817, 0x0015, 0x2091, 0x8001, 0x007c, 0x2091,
-+ 0x8001, 0x0078, 0x126d, 0x77c4, 0x77c6, 0x2041, 0x0021, 0x2049,
-+ 0x0005, 0x2051, 0x0020, 0x2091, 0x8000, 0x1078, 0x18c6, 0x2061,
-+ 0x4d40, 0x606f, 0x0003, 0x6782, 0x6093, 0x000f, 0x6073, 0x0000,
-+ 0x7817, 0x0016, 0x1078, 0x20a0, 0x2091, 0x8001, 0x007c, 0x77c8,
-+ 0x77ca, 0x77c4, 0x77c6, 0xa7bc, 0xff00, 0x2091, 0x8000, 0x2061,
-+ 0x4d40, 0x606f, 0x0002, 0x6073, 0x0000, 0x6782, 0x6093, 0x000f,
-+ 0x7817, 0x0017, 0x1078, 0x20a0, 0x2091, 0x8001, 0x2041, 0x0021,
-+ 0x2049, 0x0004, 0x2051, 0x0010, 0x2091, 0x8000, 0x1078, 0x18c6,
-+ 0x70c8, 0x6836, 0x8738, 0xa784, 0x001f, 0x00c0, 0x156e, 0x2091,
-+ 0x8001, 0x007c, 0x78cc, 0xa084, 0x0003, 0x00c0, 0x159e, 0x2039,
-+ 0x0000, 0x2041, 0x0021, 0x2049, 0x0004, 0x2051, 0x0008, 0x1078,
-+ 0x18b9, 0x2091, 0x8000, 0x6808, 0xa80d, 0x690a, 0x2091, 0x8001,
-+ 0x8738, 0xa784, 0x001f, 0x00c0, 0x1587, 0xa7bc, 0xff00, 0x873f,
-+ 0x8738, 0x873f, 0xa784, 0x0f00, 0x00c0, 0x1587, 0x2091, 0x8000,
-+ 0x2069, 0x0100, 0x6830, 0xa084, 0x0040, 0x0040, 0x15c7, 0x684b,
-+ 0x0004, 0x20a9, 0x0014, 0x6848, 0xa084, 0x0004, 0x0040, 0x15b4,
-+ 0x0070, 0x15b4, 0x0078, 0x15ab, 0x684b, 0x0009, 0x20a9, 0x0014,
-+ 0x6848, 0xa084, 0x0001, 0x0040, 0x15c1, 0x0070, 0x15c1, 0x0078,
-+ 0x15b8, 0x20a9, 0x00fa, 0x0070, 0x15c7, 0x0078, 0x15c3, 0x2079,
-+ 0x4d00, 0x7817, 0x0018, 0x2061, 0x4d40, 0x606f, 0x0001, 0x6073,
-+ 0x0000, 0x6093, 0x000f, 0x78cc, 0xa085, 0x0002, 0x78ce, 0x6808,
-+ 0xa084, 0xfffd, 0x680a, 0x681b, 0x0048, 0x2091, 0x8001, 0x007c,
-+ 0x78cc, 0xa084, 0xfffd, 0x78ce, 0xa084, 0x0001, 0x00c0, 0x15ea,
-+ 0x1078, 0x1971, 0x71c4, 0x71c6, 0x794a, 0x007c, 0x2029, 0x0000,
-+ 0x2520, 0x71c4, 0x73c8, 0x72cc, 0x71c6, 0x73ca, 0x72ce, 0x2079,
-+ 0x4d00, 0x1078, 0x1874, 0x0040, 0x169e, 0x20a9, 0x0005, 0x20a1,
-+ 0x4d18, 0x2091, 0x8000, 0x41a1, 0x2091, 0x8001, 0x2009, 0x0020,
-+ 0x1078, 0x186f, 0x0040, 0x1610, 0x1078, 0x188e, 0x0078, 0x169e,
-+ 0x6004, 0xa084, 0xff00, 0x8007, 0x8009, 0x0040, 0x166d, 0x0c7e,
-+ 0x2c68, 0x1078, 0x1874, 0x0040, 0x163e, 0x2c00, 0x689e, 0x8109,
-+ 0x00c0, 0x1618, 0x609f, 0x0000, 0x0c7f, 0x0c7e, 0x7218, 0x731c,
-+ 0x2c68, 0x689c, 0xa065, 0x0040, 0x166c, 0x2009, 0x0020, 0x1078,
-+ 0x186f, 0x00c0, 0x1655, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0002,
-+ 0x00c0, 0x163e, 0x2d00, 0x6002, 0x0078, 0x1626, 0x0c7f, 0x0c7e,
-+ 0x609c, 0x2060, 0x1078, 0x18f9, 0x0c7f, 0x609f, 0x0000, 0x1078,
-+ 0x16a2, 0x2009, 0x000e, 0x6008, 0xa085, 0x0200, 0x600a, 0x1078,
-+ 0x186a, 0x1078, 0x188e, 0x0078, 0x169e, 0x0c7f, 0x0c7e, 0x609c,
-+ 0x2060, 0x1078, 0x18f9, 0x0c7f, 0x609f, 0x0000, 0x1078, 0x16a2,
-+ 0x2009, 0x000e, 0x6007, 0x0103, 0x601b, 0x0003, 0x1078, 0x186a,
-+ 0x1078, 0x188e, 0x0078, 0x169e, 0x0c7f, 0x74c4, 0x73c8, 0x72cc,
-+ 0x6014, 0x2091, 0x8000, 0x7817, 0x0012, 0x0e7e, 0x2071, 0x4d40,
-+ 0x706f, 0x0005, 0x7073, 0x0000, 0x7376, 0x727a, 0x747e, 0x7082,
-+ 0x7087, 0x0000, 0x2c00, 0x708a, 0x708f, 0x0000, 0xa02e, 0x2530,
-+ 0x611c, 0x61a2, 0xa184, 0x0060, 0x0040, 0x1690, 0x1078, 0x4367,
-+ 0x0e7f, 0x6596, 0x65a6, 0x669a, 0x66aa, 0x60af, 0x0000, 0x60b3,
-+ 0x0000, 0x1078, 0x20a0, 0x2091, 0x8001, 0x007c, 0x70c3, 0x4005,
-+ 0x0078, 0x1270, 0x20a9, 0x0005, 0x2099, 0x4d18, 0x2091, 0x8000,
-+ 0x530a, 0x2091, 0x8001, 0x2100, 0xa210, 0xa399, 0x0000, 0xa4a1,
-+ 0x0000, 0xa5a9, 0x0000, 0x007c, 0x71c4, 0x70c7, 0x0000, 0x7906,
-+ 0x0078, 0x126d, 0x71c4, 0x71c6, 0x2168, 0x0078, 0x16c1, 0x2069,
-+ 0x1000, 0x690c, 0xa016, 0x2d04, 0xa210, 0x8d68, 0x8109, 0x00c0,
-+ 0x16c3, 0xa285, 0x0000, 0x00c0, 0x16d1, 0x70c3, 0x4000, 0x0078,
-+ 0x16d3, 0x70c3, 0x4003, 0x70ca, 0x0078, 0x1270, 0x2011, 0x4d67,
-+ 0x220c, 0x70c4, 0x8003, 0x0048, 0x16e3, 0x1078, 0x398d, 0xa184,
-+ 0x7fff, 0x0078, 0x16e7, 0x1078, 0x3980, 0xa185, 0x8000, 0x2012,
-+ 0x0078, 0x126c, 0x71c4, 0x1078, 0x3977, 0x6100, 0x2001, 0x4d67,
-+ 0x2004, 0xa084, 0x8000, 0xa10d, 0x6204, 0x6308, 0x0078, 0x126a,
-+ 0x79e4, 0x0078, 0x126c, 0x71c4, 0x71c6, 0x2198, 0x20a1, 0x0042,
-+ 0x20a9, 0x0004, 0x53a3, 0x21a0, 0x2099, 0x0042, 0x20a9, 0x0004,
-+ 0x53a3, 0x0078, 0x126d, 0x70c4, 0x2068, 0x2079, 0x4d00, 0x1078,
-+ 0x1874, 0x0040, 0x1793, 0x6007, 0x0001, 0x600b, 0x0000, 0x602b,
-+ 0x0000, 0x601b, 0x0006, 0x6a10, 0xa28c, 0x000f, 0xa284, 0x00f0,
-+ 0x8003, 0x8003, 0x8003, 0x8003, 0xa105, 0x6016, 0xa284, 0x0800,
-+ 0x0040, 0x172e, 0x601b, 0x000a, 0x0078, 0x1734, 0xa284, 0x1000,
-+ 0x0040, 0x1734, 0x601b, 0x000c, 0xa284, 0x0300, 0x0040, 0x173d,
-+ 0x602b, 0x0001, 0x8004, 0x8004, 0x8004, 0xa085, 0x0001, 0x601e,
-+ 0x6023, 0x0000, 0x6027, 0x0000, 0xa284, 0x0400, 0x0040, 0x174a,
-+ 0x602b, 0x0000, 0x20a9, 0x0006, 0xac80, 0x000b, 0x20a0, 0xad80,
-+ 0x0005, 0x2098, 0x53a3, 0xa284, 0x0300, 0x00c0, 0x175f, 0x604a,
-+ 0x6046, 0x6052, 0x604e, 0x6096, 0x609a, 0x0078, 0x1769, 0x6800,
-+ 0x604a, 0x6804, 0x6046, 0x6e08, 0x6652, 0x6d0c, 0x654e, 0x6596,
-+ 0x669a, 0x6014, 0x2091, 0x8000, 0x7817, 0x0042, 0x2c08, 0x2061,
-+ 0x4d40, 0x606f, 0x0005, 0x6073, 0x0000, 0x6077, 0x0000, 0x607b,
-+ 0x0000, 0x607f, 0x0000, 0x6082, 0x618a, 0xa284, 0x0400, 0x608e,
-+ 0x2091, 0x8001, 0x0e7e, 0x2071, 0x0020, 0x7007, 0x000a, 0x7007,
-+ 0x0002, 0x7003, 0x0000, 0x0e7f, 0x2091, 0x8000, 0x1078, 0x20a0,
-+ 0x2091, 0x8001, 0x007c, 0x70c3, 0x4005, 0x0078, 0x1270, 0x0c7e,
-+ 0x0d7e, 0x0e7e, 0x0f7e, 0x2091, 0x8000, 0x2071, 0x4d40, 0x2079,
-+ 0x0100, 0x2061, 0x0010, 0x70a0, 0xa06d, 0x0040, 0x1818, 0x6a04,
-+ 0xa294, 0x00ff, 0xa286, 0x0007, 0x0040, 0x17b2, 0xa286, 0x000f,
-+ 0x00c0, 0x1818, 0x6920, 0xa184, 0x0080, 0x00c0, 0x1818, 0x6824,
-+ 0xa18c, 0xff00, 0xa085, 0x0019, 0x6826, 0x71b8, 0x81ff, 0x0040,
-+ 0x17d3, 0x0d7e, 0x2069, 0x0020, 0x6908, 0x6808, 0xa106, 0x00c0,
-+ 0x17c4, 0x690c, 0x680c, 0xa106, 0x00c0, 0x17c9, 0xa184, 0x00ff,
-+ 0x00c0, 0x17c9, 0x0d7f, 0x78b8, 0xa084, 0x801f, 0x00c0, 0x17d3,
-+ 0x7848, 0xa085, 0x000c, 0x784a, 0x71b8, 0x81ff, 0x0040, 0x17f6,
-+ 0x70bb, 0x0000, 0x0d7e, 0x2069, 0x0020, 0x6807, 0x0008, 0x6804,
-+ 0xa084, 0x0008, 0x00c0, 0x17e7, 0x6807, 0x0008, 0x6804, 0xa084,
-+ 0x0008, 0x00c0, 0x17ee, 0x6807, 0x0002, 0x0d7f, 0x61c4, 0x62c8,
-+ 0x63cc, 0x61c6, 0x62ca, 0x63ce, 0x0e7e, 0x2071, 0x4d00, 0x7266,
-+ 0x736a, 0xae80, 0x0019, 0x0e7f, 0x1078, 0x42b7, 0x78a3, 0x0000,
-+ 0x7858, 0xa084, 0xedff, 0x785a, 0x70bc, 0xa080, 0x00da, 0x781a,
-+ 0x0f7f, 0x0e7f, 0x0d7f, 0x0c7f, 0x2091, 0x8001, 0x0078, 0x126d,
-+ 0x0f7f, 0x0e7f, 0x0d7f, 0x0c7f, 0x2091, 0x8001, 0x2001, 0x4005,
-+ 0x0078, 0x126f, 0x7980, 0x71c6, 0x71c4, 0xa182, 0x0003, 0x00c8,
-+ 0x1265, 0x7982, 0x0078, 0x126d, 0x7980, 0x71c6, 0x0078, 0x126d,
-+ 0x7974, 0x71c6, 0x71c4, 0x7976, 0x7978, 0x71ca, 0x71c8, 0x797a,
-+ 0x797c, 0x71ce, 0x71cc, 0x797e, 0x0078, 0x126d, 0x7974, 0x71c6,
-+ 0x7978, 0x71ca, 0x797c, 0x71ce, 0x0078, 0x126d, 0x7900, 0x71c6,
-+ 0x71c4, 0x7902, 0x00a8, 0x1856, 0xa18c, 0x0001, 0x00c0, 0x1854,
-+ 0x20b9, 0x2222, 0x0078, 0x1856, 0x20b9, 0x1212, 0x0078, 0x126d,
-+ 0x7900, 0x71c6, 0x0078, 0x126d, 0x2009, 0x4d74, 0x2104, 0x70c6,
-+ 0x70c4, 0x200a, 0x0078, 0x126d, 0x2009, 0x4d74, 0x2104, 0x70c6,
-+ 0x0078, 0x126d, 0xac80, 0x0001, 0x1078, 0x1a3d, 0x007c, 0xac80,
-+ 0x0001, 0x1078, 0x19f1, 0x007c, 0x7850, 0xa065, 0x0040, 0x187c,
-+ 0x2c04, 0x7852, 0x2063, 0x0000, 0x007c, 0x0f7e, 0x2079, 0x4d00,
-+ 0x7850, 0xa06d, 0x0040, 0x188c, 0x2d04, 0x7852, 0x6803, 0x0000,
-+ 0x6807, 0x0000, 0x680b, 0x0000, 0x0f7f, 0x007c, 0x2091, 0x8000,
-+ 0x0f7e, 0x2079, 0x4d00, 0x7850, 0x2062, 0x2c00, 0xa005, 0x00c0,
-+ 0x189b, 0x1078, 0x22ac, 0x7852, 0x0f7f, 0x2091, 0x8001, 0x007c,
-+ 0x0f7e, 0x2079, 0x4d00, 0x7850, 0x206a, 0x2d00, 0x7852, 0x0f7f,
-+ 0x007c, 0x2011, 0x7400, 0x7a52, 0x7bec, 0x8319, 0x0040, 0x18b6,
-+ 0xa280, 0x0031, 0x2012, 0x2010, 0x0078, 0x18ad, 0x2013, 0x0000,
-+ 0x007c, 0xa784, 0x0f00, 0x800b, 0xa784, 0x001f, 0x8003, 0x8003,
-+ 0x8003, 0x8003, 0xa105, 0xa0e8, 0x5000, 0x007c, 0x1078, 0x18b9,
-+ 0x2900, 0x682a, 0x2a00, 0x682e, 0x6808, 0xa084, 0xffef, 0xa80d,
-+ 0x690a, 0x2009, 0x4d52, 0x210c, 0x6804, 0xa005, 0x0040, 0x18f8,
-+ 0xa116, 0x00c0, 0x18e3, 0x2060, 0x6000, 0x6806, 0x017e, 0x200b,
-+ 0x0000, 0x0078, 0x18e6, 0x2009, 0x0000, 0x017e, 0x6804, 0xa065,
-+ 0x0040, 0x18f5, 0x6000, 0x6806, 0x1078, 0x1906, 0x1078, 0x1b7d,
-+ 0x6810, 0x8001, 0x6812, 0x00c0, 0x18e6, 0x017f, 0x6902, 0x6906,
-+ 0x007c, 0xa065, 0x0040, 0x1905, 0x609c, 0x609f, 0x0000, 0x2008,
-+ 0x1078, 0x188e, 0x2100, 0x0078, 0x18f9, 0x007c, 0x6007, 0x0103,
-+ 0x608f, 0x0000, 0x20a9, 0x001c, 0xac80, 0x0005, 0x20a0, 0x2001,
-+ 0x0000, 0x40a4, 0x6828, 0x601a, 0x682c, 0x6022, 0x007c, 0x0e7e,
-+ 0x2071, 0x4d40, 0x704c, 0xa08c, 0x0200, 0x00c0, 0x1925, 0xa088,
-+ 0x4d80, 0x2d0a, 0x8000, 0x704e, 0xa006, 0x0e7f, 0x007c, 0x1078,
-+ 0x18b9, 0x2091, 0x8000, 0x6804, 0x781e, 0xa065, 0x0040, 0x1970,
-+ 0x0078, 0x1938, 0x2c00, 0x781e, 0x6000, 0xa065, 0x0040, 0x1970,
-+ 0x6010, 0xa306, 0x00c0, 0x1932, 0x600c, 0xa206, 0x00c0, 0x1932,
-+ 0x2c28, 0x2001, 0x4d52, 0x2004, 0xac06, 0x00c0, 0x1949, 0x0078,
-+ 0x196e, 0x6804, 0xac06, 0x00c0, 0x1956, 0x6000, 0xa065, 0x6806,
-+ 0x00c0, 0x1960, 0x6803, 0x0000, 0x0078, 0x1960, 0x6400, 0x781c,
-+ 0x2060, 0x6402, 0xa486, 0x0000, 0x00c0, 0x1960, 0x2c00, 0x6802,
-+ 0x2560, 0x1078, 0x1906, 0x601b, 0x0005, 0x6023, 0x0020, 0x1078,
-+ 0x1b7d, 0x6810, 0x8001, 0x1050, 0x22ac, 0x6812, 0xa085, 0xffff,
-+ 0x007c, 0x2039, 0x0000, 0x2041, 0x0021, 0x2049, 0x0004, 0x2051,
-+ 0x0008, 0x2091, 0x8000, 0x1078, 0x18c6, 0x8738, 0xa784, 0x001f,
-+ 0x00c0, 0x197b, 0xa7bc, 0xff00, 0x873f, 0x8738, 0x873f, 0xa784,
-+ 0x0f00, 0x00c0, 0x197b, 0x2091, 0x8001, 0x007c, 0x2061, 0x0000,
-+ 0x6018, 0xa084, 0x0001, 0x00c0, 0x199f, 0x2091, 0x8000, 0x78e0,
-+ 0x78e3, 0x0000, 0x2091, 0x8001, 0xa005, 0x00c0, 0x19a0, 0x007c,
-+ 0xa08c, 0xfff0, 0x0040, 0x19a6, 0x1078, 0x22ac, 0x0079, 0x19a8,
-+ 0x19b8, 0x19bb, 0x19c1, 0x19c5, 0x19b9, 0x19c9, 0x19cf, 0x19b9,
-+ 0x19b9, 0x1b47, 0x1b6b, 0x1b6f, 0x19b9, 0x19b9, 0x19b9, 0x19b9,
-+ 0x007c, 0x1078, 0x22ac, 0x1078, 0x1971, 0x2001, 0x8001, 0x0078,
-+ 0x1b75, 0x2001, 0x8003, 0x0078, 0x1b75, 0x2001, 0x8004, 0x0078,
-+ 0x1b75, 0x1078, 0x1971, 0x2001, 0x8006, 0x0078, 0x1b75, 0x2001,
-+ 0x8007, 0x0078, 0x1b75, 0x2030, 0x2138, 0xa782, 0x0021, 0x0048,
-+ 0x19db, 0x2009, 0x0020, 0x2600, 0x1078, 0x19f1, 0x00c0, 0x19f0,
-+ 0xa7ba, 0x0020, 0x0048, 0x19ef, 0x0040, 0x19ef, 0x2708, 0xa6b0,
-+ 0x0020, 0xa290, 0x0040, 0xa399, 0x0000, 0x0078, 0x19d5, 0xa006,
-+ 0x007c, 0x81ff, 0x0040, 0x1a1c, 0x2099, 0x0030, 0x20a0, 0x700c,
-+ 0xa084, 0x00ff, 0x0040, 0x1a03, 0x7007, 0x0004, 0x7004, 0xa084,
-+ 0x0004, 0x00c0, 0x19fe, 0x21a8, 0x7017, 0x0000, 0x810b, 0x7112,
-+ 0x721a, 0x731e, 0x780c, 0xa085, 0x0001, 0x7002, 0x7007, 0x0001,
-+ 0x7008, 0x800c, 0x00c8, 0x1a10, 0x7007, 0x0002, 0xa08c, 0x000c,
-+ 0x00c0, 0x1a1c, 0x53a5, 0xa006, 0x7003, 0x0000, 0x007c, 0x2030,
-+ 0x2138, 0xa782, 0x0021, 0x0048, 0x1a27, 0x2009, 0x0020, 0x2600,
-+ 0x1078, 0x1a3d, 0x00c0, 0x1a3c, 0xa7ba, 0x0020, 0x0048, 0x1a3b,
-+ 0x0040, 0x1a3b, 0x2708, 0xa6b0, 0x0020, 0xa290, 0x0040, 0xa399,
-+ 0x0000, 0x0078, 0x1a21, 0xa006, 0x007c, 0x81ff, 0x0040, 0x1a6e,
-+ 0x2098, 0x20a1, 0x0030, 0x700c, 0xa084, 0x00ff, 0x0040, 0x1a4f,
-+ 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, 0x1a4a, 0x21a8,
-+ 0x7017, 0x0000, 0x810b, 0x7112, 0x721a, 0x731e, 0x780c, 0xa085,
-+ 0x0000, 0x7002, 0x53a6, 0x7007, 0x0001, 0x7010, 0xa084, 0xf000,
-+ 0x0040, 0x1a66, 0x7007, 0x0008, 0x0078, 0x1a6a, 0x7108, 0x8104,
-+ 0x00c8, 0x1a5d, 0x7007, 0x0002, 0xa184, 0x000c, 0x7003, 0x0000,
-+ 0x007c, 0x2001, 0x04fd, 0x2004, 0xa082, 0x0004, 0x00c8, 0x1a7a,
-+ 0x0078, 0x1a7d, 0xa006, 0x0078, 0x1a7f, 0xa085, 0x0001, 0x007c,
-+ 0x0e7e, 0x2071, 0x4d00, 0x2d08, 0x7058, 0x6802, 0xa005, 0x00c0,
-+ 0x1a8a, 0x715e, 0x715a, 0x0e7f, 0x007c, 0x2c08, 0x7858, 0x6002,
-+ 0xa005, 0x00c0, 0x1a94, 0x795e, 0x795a, 0x007c, 0x2091, 0x8000,
-+ 0x6003, 0x0000, 0x2c08, 0x785c, 0xa065, 0x00c0, 0x1aa2, 0x795a,
-+ 0x0078, 0x1aa3, 0x6102, 0x795e, 0x2091, 0x8001, 0x1078, 0x20bd,
-+ 0x007c, 0x0e7e, 0x2071, 0x4d00, 0x7058, 0xa06d, 0x0040, 0x1ab7,
-+ 0x6800, 0x705a, 0xa005, 0x00c0, 0x1ab6, 0x705e, 0x8dff, 0x0e7f,
-+ 0x007c, 0x0d7e, 0x0c7e, 0x0f7e, 0x2079, 0x4d00, 0xaf80, 0x0016,
-+ 0x2060, 0x6000, 0xa005, 0x0040, 0x1ae7, 0x2068, 0x6814, 0xa306,
-+ 0x00c0, 0x1ad0, 0x6828, 0xa084, 0x00ff, 0xa406, 0x0040, 0x1ad3,
-+ 0x2d60, 0x0078, 0x1ac1, 0x6800, 0xa005, 0x6002, 0x00c0, 0x1adf,
-+ 0xaf80, 0x0016, 0xac06, 0x0040, 0x1ade, 0x2c00, 0x785e, 0x0d7e,
-+ 0x689c, 0xa005, 0x0040, 0x1ae6, 0x1078, 0x18f9, 0x007f, 0x0f7f,
-+ 0x0c7f, 0x0d7f, 0xa005, 0x007c, 0x0d7e, 0x0c7e, 0x0f7e, 0x2079,
-+ 0x4d00, 0xaf80, 0x0016, 0x2060, 0x6000, 0xa005, 0x0040, 0x1b16,
-+ 0x2068, 0x6814, 0xa084, 0x00ff, 0xa306, 0x0040, 0x1b02, 0x2d60,
-+ 0x0078, 0x1af4, 0x6800, 0xa005, 0x6002, 0x00c0, 0x1b0e, 0xaf80,
-+ 0x0016, 0xac06, 0x0040, 0x1b0d, 0x2c00, 0x785e, 0x0d7e, 0x689c,
-+ 0xa005, 0x0040, 0x1b15, 0x1078, 0x18f9, 0x007f, 0x0f7f, 0x0c7f,
-+ 0x0d7f, 0xa005, 0x007c, 0x0d7e, 0x0c7e, 0x0f7e, 0x2079, 0x4d00,
-+ 0xaf80, 0x0016, 0x2060, 0x6000, 0xa06d, 0x0040, 0x1b42, 0x6814,
-+ 0xa306, 0x0040, 0x1b2e, 0x2d60, 0x0078, 0x1b23, 0x6800, 0xa005,
-+ 0x6002, 0x00c0, 0x1b3a, 0xaf80, 0x0016, 0xac06, 0x0040, 0x1b39,
-+ 0x2c00, 0x785e, 0x0d7e, 0x689c, 0xa005, 0x0040, 0x1b41, 0x1078,
-+ 0x18f9, 0x007f, 0x0f7f, 0x0c7f, 0x0d7f, 0xa005, 0x007c, 0x2091,
-+ 0x8000, 0x2069, 0x4d40, 0x6800, 0xa086, 0x0000, 0x0040, 0x1b55,
-+ 0x2091, 0x8001, 0x78e3, 0x0009, 0x007c, 0x6880, 0xa0bc, 0xff00,
-+ 0x2041, 0x0021, 0x2049, 0x0004, 0x2051, 0x0010, 0x1078, 0x18c6,
-+ 0x8738, 0xa784, 0x001f, 0x00c0, 0x1b5e, 0x2091, 0x8001, 0x2001,
-+ 0x800a, 0x0078, 0x1b75, 0x2001, 0x800c, 0x0078, 0x1b75, 0x1078,
-+ 0x1971, 0x2001, 0x800d, 0x0078, 0x1b75, 0x70c2, 0x2061, 0x0000,
-+ 0x601b, 0x0001, 0x2091, 0x4080, 0x007c, 0x6004, 0x2c08, 0x2063,
-+ 0x0000, 0x7884, 0x8000, 0x7886, 0x7888, 0xa005, 0x798a, 0x0040,
-+ 0x1b8c, 0x2c02, 0x0078, 0x1b8d, 0x798e, 0x007c, 0x6807, 0x0103,
-+ 0x0c7e, 0x2061, 0x4d00, 0x2d08, 0x206b, 0x0000, 0x6084, 0x8000,
-+ 0x6086, 0x6088, 0xa005, 0x618a, 0x0040, 0x1ba1, 0x2d02, 0x0078,
-+ 0x1ba2, 0x618e, 0x0c7f, 0x007c, 0x1078, 0x1bb5, 0x0040, 0x1bb4,
-+ 0x0c7e, 0x609c, 0xa065, 0x0040, 0x1baf, 0x1078, 0x18f9, 0x0c7f,
-+ 0x609f, 0x0000, 0x1078, 0x188e, 0x007c, 0x788c, 0xa065, 0x0040,
-+ 0x1bc7, 0x2091, 0x8000, 0x7884, 0x8001, 0x7886, 0x2c04, 0x788e,
-+ 0xa005, 0x00c0, 0x1bc5, 0x788a, 0x8000, 0x2091, 0x8001, 0x007c,
-+ 0x20a9, 0x0010, 0xa006, 0x8004, 0x8086, 0x818e, 0x00c8, 0x1bd1,
-+ 0xa200, 0x0070, 0x1bd5, 0x0078, 0x1bcc, 0x8086, 0x818e, 0x007c,
-+ 0x157e, 0x20a9, 0x0010, 0xa005, 0x0040, 0x1bfb, 0xa11a, 0x00c8,
-+ 0x1bfb, 0x8213, 0x818d, 0x0048, 0x1bec, 0xa11a, 0x00c8, 0x1bed,
-+ 0x0070, 0x1bf3, 0x0078, 0x1be1, 0xa11a, 0x2308, 0x8210, 0x0070,
-+ 0x1bf3, 0x0078, 0x1be1, 0x007e, 0x3200, 0xa084, 0xf7ff, 0x2080,
-+ 0x007f, 0x157f, 0x007c, 0x007e, 0x3200, 0xa085, 0x0800, 0x0078,
-+ 0x1bf7, 0x7994, 0x70d0, 0xa106, 0x0040, 0x1c6d, 0x2091, 0x8000,
-+ 0x2071, 0x0020, 0x7004, 0xa005, 0x00c0, 0x1c6d, 0x7008, 0x7208,
-+ 0xa206, 0x00c0, 0x1c6d, 0xa286, 0x0002, 0x00c0, 0x1c6d, 0x2071,
-+ 0x0010, 0x1078, 0x1874, 0x0040, 0x1c6d, 0x7a9c, 0x7b98, 0xa184,
-+ 0xff00, 0x0040, 0x1c3b, 0x2031, 0x0000, 0x810b, 0x86b5, 0x810b,
-+ 0x86b5, 0x810b, 0x86b5, 0x810b, 0x86b5, 0x810b, 0x86b5, 0x810b,
-+ 0x86b5, 0x2100, 0xa210, 0x2600, 0xa319, 0xa4a1, 0x0000, 0xa5a9,
-+ 0x0000, 0x0078, 0x1c45, 0x8107, 0x8004, 0x8004, 0xa210, 0xa399,
-+ 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x2009, 0x0020, 0x1078,
-+ 0x186f, 0x2091, 0x8001, 0x0040, 0x1c64, 0x1078, 0x188e, 0x78a8,
-+ 0x8000, 0x78aa, 0xa086, 0x0002, 0x00c0, 0x1c6d, 0x2091, 0x8000,
-+ 0x78e3, 0x0002, 0x78ab, 0x0000, 0x78cc, 0xa085, 0x0003, 0x78ce,
-+ 0x2091, 0x8001, 0x0078, 0x1c6d, 0x78ab, 0x0000, 0x1078, 0x1fa1,
-+ 0x6004, 0xa084, 0x000f, 0x0079, 0x1c72, 0x2071, 0x0010, 0x2091,
-+ 0x8001, 0x007c, 0x1c82, 0x1c91, 0x1cb1, 0x1c82, 0x1cce, 0x1c82,
-+ 0x1e29, 0x1e40, 0x1c82, 0x1c82, 0x1c82, 0x1d16, 0x1d7f, 0x1dcf,
-+ 0x1de1, 0x1c82, 0x2039, 0x0400, 0x78dc, 0xa705, 0x78de, 0x6008,
-+ 0xa705, 0x600a, 0x1078, 0x1ebc, 0x609c, 0x78da, 0x1078, 0x1f89,
-+ 0x007c, 0x78dc, 0xa084, 0x0100, 0x0040, 0x1c98, 0x0078, 0x1c82,
-+ 0x78df, 0x0000, 0x6004, 0x8007, 0xa084, 0x00ff, 0x78d2, 0x8001,
-+ 0x609f, 0x0000, 0x0040, 0x1cae, 0x1078, 0x1ebc, 0x0040, 0x1cae,
-+ 0x78dc, 0xa085, 0x0100, 0x78de, 0x0078, 0x1cb0, 0x1078, 0x1ee0,
-+ 0x007c, 0x78dc, 0xa08c, 0x0e00, 0x00c0, 0x1cba, 0xa084, 0x0100,
-+ 0x00c0, 0x1cbc, 0x0078, 0x1c82, 0x1078, 0x1ebc, 0x00c0, 0x1ccd,
-+ 0x6104, 0xa18c, 0x00ff, 0xa186, 0x0007, 0x0040, 0x1e72, 0xa186,
-+ 0x000f, 0x0040, 0x1e72, 0x1078, 0x1ee0, 0x007c, 0x78dc, 0xa084,
-+ 0x0100, 0x0040, 0x1cd5, 0x0078, 0x1c82, 0x78df, 0x0000, 0x6714,
-+ 0x2011, 0x0001, 0x20a9, 0x0001, 0x6018, 0xa084, 0x00ff, 0xa005,
-+ 0x0040, 0x1cf8, 0x2011, 0x0001, 0xa7bc, 0xff00, 0x20a9, 0x0020,
-+ 0xa08e, 0x0001, 0x0040, 0x1cf8, 0x2039, 0x0000, 0x2011, 0x0002,
-+ 0x20a9, 0x0100, 0xa08e, 0x0002, 0x0040, 0x1cf8, 0x0078, 0x1d13,
-+ 0x1078, 0x18b9, 0x2091, 0x8000, 0x682b, 0x0000, 0x682f, 0x0000,
-+ 0x6808, 0xa084, 0xffde, 0x680a, 0xade8, 0x0010, 0x2091, 0x8001,
-+ 0x0070, 0x1d0c, 0x0078, 0x1cfa, 0x8211, 0x0040, 0x1d13, 0x20a9,
-+ 0x0100, 0x0078, 0x1cfa, 0x1078, 0x188e, 0x007c, 0x2001, 0x4d67,
-+ 0x2004, 0xa084, 0x8000, 0x0040, 0x1ea1, 0x6114, 0x1078, 0x1fb7,
-+ 0x6900, 0xa184, 0x0001, 0x0040, 0x1d37, 0x6028, 0xa084, 0x00ff,
-+ 0x00c0, 0x1e99, 0x6800, 0xa084, 0x0001, 0x0040, 0x1ea1, 0x6803,
-+ 0x0000, 0x680b, 0x0000, 0x6807, 0x0000, 0x0078, 0x1ea9, 0x2011,
-+ 0x0001, 0x601c, 0xa084, 0x4000, 0x0040, 0x1d40, 0xa295, 0x0002,
-+ 0x601c, 0xa084, 0x0100, 0x0040, 0x1d47, 0xa295, 0x0008, 0x6020,
-+ 0xa084, 0x0002, 0x0040, 0x1d4e, 0xa295, 0x0004, 0x602c, 0xa08c,
-+ 0x00ff, 0xa182, 0x0002, 0x0048, 0x1ea5, 0xa182, 0x0019, 0x00c8,
-+ 0x1ea5, 0x690e, 0x602c, 0x8007, 0xa08c, 0x00ff, 0xa182, 0x0002,
-+ 0x0048, 0x1ea5, 0xa182, 0x0019, 0x00c8, 0x1ea5, 0x6912, 0x6030,
-+ 0xa005, 0x00c0, 0x1d6d, 0x2001, 0x001e, 0x8000, 0x6816, 0x6028,
-+ 0xa084, 0x00ff, 0x0040, 0x1ea1, 0x6806, 0x6028, 0x8007, 0xa084,
-+ 0x00ff, 0x0040, 0x1ea1, 0x680a, 0x6a02, 0x0078, 0x1ea9, 0x2001,
-+ 0x4d67, 0x2004, 0xa084, 0x8000, 0x0040, 0x1ea1, 0x6114, 0x1078,
-+ 0x1fb7, 0x2091, 0x8000, 0x6a04, 0x6b08, 0x6418, 0xa484, 0x0003,
-+ 0x0040, 0x1da5, 0x6128, 0xa18c, 0x00ff, 0x8001, 0x00c0, 0x1d9e,
-+ 0x2100, 0xa210, 0x0048, 0x1dcb, 0x0078, 0x1da5, 0x8001, 0x00c0,
-+ 0x1dcb, 0x2100, 0xa212, 0x0048, 0x1dcb, 0xa484, 0x000c, 0x0040,
-+ 0x1dbf, 0x6128, 0x810f, 0xa18c, 0x00ff, 0xa082, 0x0004, 0x00c0,
-+ 0x1db7, 0x2100, 0xa318, 0x0048, 0x1dcb, 0x0078, 0x1dbf, 0xa082,
-+ 0x0004, 0x00c0, 0x1dcb, 0x2100, 0xa31a, 0x0048, 0x1dcb, 0x6030,
-+ 0xa005, 0x0040, 0x1dc5, 0x8000, 0x6816, 0x6a06, 0x6b0a, 0x2091,
-+ 0x8001, 0x0078, 0x1ea9, 0x2091, 0x8001, 0x0078, 0x1ea5, 0x6114,
-+ 0x1078, 0x1fb7, 0x2091, 0x8000, 0x6b08, 0x8318, 0x0048, 0x1ddd,
-+ 0x6b0a, 0x2091, 0x8001, 0x0078, 0x1eb8, 0x2091, 0x8001, 0x0078,
-+ 0x1ea5, 0x6024, 0x8007, 0xa084, 0x00ff, 0x0040, 0x1dff, 0xa086,
-+ 0x0080, 0x00c0, 0x1e27, 0x20a9, 0x0008, 0x2069, 0x7110, 0x2091,
-+ 0x8000, 0x6800, 0xa084, 0xfcff, 0x6802, 0xade8, 0x0008, 0x0070,
-+ 0x1dfb, 0x0078, 0x1df1, 0x2091, 0x8001, 0x0078, 0x1ea9, 0x6028,
-+ 0xa015, 0x0040, 0x1e27, 0x6114, 0x1078, 0x1fb7, 0x0d7e, 0xade8,
-+ 0x0007, 0x2091, 0x8000, 0x6800, 0xa00d, 0x0040, 0x1e24, 0xa206,
-+ 0x0040, 0x1e15, 0x2168, 0x0078, 0x1e0b, 0x0c7e, 0x2160, 0x6000,
-+ 0x6802, 0x1078, 0x188e, 0x0c7f, 0x0d7f, 0x6808, 0x8000, 0x680a,
-+ 0x2091, 0x8001, 0x0078, 0x1eb8, 0x2091, 0x8001, 0x0d7f, 0x0078,
-+ 0x1ea1, 0x6114, 0x1078, 0x1fb7, 0x6800, 0xa084, 0x0001, 0x0040,
-+ 0x1e91, 0x2091, 0x8000, 0x6a04, 0x8210, 0x0048, 0x1e3c, 0x6a06,
-+ 0x2091, 0x8001, 0x0078, 0x1eb8, 0x2091, 0x8001, 0x0078, 0x1ea5,
-+ 0x6114, 0x1078, 0x1fb7, 0x60be, 0x6900, 0xa184, 0x0008, 0x0040,
-+ 0x1e4d, 0x601c, 0xa085, 0x0100, 0x601e, 0xa184, 0x0001, 0x0040,
-+ 0x1ea1, 0xa184, 0x0100, 0x00c0, 0x1e8d, 0xa184, 0x0200, 0x00c0,
-+ 0x1e89, 0x681c, 0xa005, 0x00c0, 0x1e95, 0x78df, 0x0000, 0x6004,
-+ 0x8007, 0xa084, 0x00ff, 0x78d2, 0x8001, 0x609f, 0x0000, 0x0040,
-+ 0x1e72, 0x1078, 0x1ebc, 0x0040, 0x1e72, 0x78dc, 0xa085, 0x0100,
-+ 0x78de, 0x007c, 0x78d7, 0x0000, 0x78db, 0x0000, 0x6024, 0xa084,
-+ 0xff00, 0x6026, 0x6020, 0xa084, 0x8000, 0x0040, 0x1e85, 0x1078,
-+ 0x37e7, 0x0040, 0x1c01, 0x0078, 0x1e91, 0x1078, 0x1a96, 0x0078,
-+ 0x1c01, 0x2009, 0x0017, 0x0078, 0x1eab, 0x2009, 0x000e, 0x0078,
-+ 0x1eab, 0x2009, 0x0007, 0x0078, 0x1eab, 0x2009, 0x0035, 0x0078,
-+ 0x1eab, 0x2009, 0x003e, 0x0078, 0x1eab, 0x2009, 0x0004, 0x0078,
-+ 0x1eab, 0x2009, 0x0006, 0x0078, 0x1eab, 0x2009, 0x0016, 0x0078,
-+ 0x1eab, 0x2009, 0x0001, 0x6024, 0xa084, 0xff00, 0xa105, 0x6026,
-+ 0x2091, 0x8000, 0x1078, 0x1b7d, 0x2091, 0x8001, 0x0078, 0x1c01,
-+ 0x1078, 0x188e, 0x0078, 0x1c01, 0x78d4, 0xa06d, 0x00c0, 0x1ec7,
-+ 0x2c00, 0x78d6, 0x78da, 0x609f, 0x0000, 0x0078, 0x1ed3, 0x2c00,
-+ 0x689e, 0x609f, 0x0000, 0x78d6, 0x2d00, 0x6002, 0x78d8, 0xad06,
-+ 0x00c0, 0x1ed3, 0x6002, 0x78d0, 0x8001, 0x78d2, 0x00c0, 0x1edf,
-+ 0x78dc, 0xa084, 0xfeff, 0x78de, 0x78d8, 0x2060, 0xa006, 0x007c,
-+ 0xa02e, 0x2530, 0x611c, 0x61a2, 0xa184, 0xe1ff, 0x601e, 0xa184,
-+ 0x0060, 0x0040, 0x1eef, 0x0e7e, 0x1078, 0x4367, 0x0e7f, 0x6596,
-+ 0x65a6, 0x669a, 0x66aa, 0x60af, 0x0000, 0x60b3, 0x0000, 0x6714,
-+ 0x1078, 0x18b9, 0x2091, 0x8000, 0x60a0, 0xa084, 0x8000, 0x00c0,
-+ 0x1f16, 0x6808, 0xa084, 0x0001, 0x0040, 0x1f16, 0x2091, 0x8001,
-+ 0x1078, 0x1906, 0x2091, 0x8000, 0x1078, 0x1b7d, 0x2091, 0x8001,
-+ 0x78d7, 0x0000, 0x78db, 0x0000, 0x0078, 0x1f88, 0x6024, 0xa096,
-+ 0x0001, 0x00c0, 0x1f1d, 0x8000, 0x6026, 0x6a10, 0x6814, 0x2091,
-+ 0x8001, 0xa202, 0x0048, 0x1f2c, 0x0040, 0x1f2c, 0x2039, 0x0200,
-+ 0x1078, 0x1f89, 0x0078, 0x1f88, 0x2c08, 0x2091, 0x8000, 0x60a0,
-+ 0xa084, 0x8000, 0x0040, 0x1f59, 0x6800, 0xa065, 0x0040, 0x1f5e,
-+ 0x6a04, 0x0e7e, 0x2071, 0x4d40, 0x7000, 0xa084, 0x0001, 0x0040,
-+ 0x1f53, 0x7048, 0xa206, 0x00c0, 0x1f53, 0x6b04, 0x231c, 0x2160,
-+ 0x6302, 0x2300, 0xa005, 0x00c0, 0x1f4e, 0x6902, 0x2260, 0x6102,
-+ 0x0e7f, 0x0078, 0x1f65, 0x2160, 0x6202, 0x6906, 0x0e7f, 0x0078,
-+ 0x1f65, 0x6800, 0xa065, 0x0040, 0x1f5e, 0x6102, 0x6902, 0x00c0,
-+ 0x1f62, 0x6906, 0x2160, 0x6003, 0x0000, 0x2160, 0x60a0, 0xa084,
-+ 0x8000, 0x0040, 0x1f6f, 0x6808, 0xa084, 0xfffc, 0x680a, 0x6810,
-+ 0x8000, 0x6812, 0x2091, 0x8001, 0x6808, 0xa08c, 0x0040, 0x0040,
-+ 0x1f7e, 0xa086, 0x0040, 0x680a, 0x1078, 0x1917, 0x2091, 0x8000,
-+ 0x1078, 0x20a0, 0x2091, 0x8001, 0x78db, 0x0000, 0x78d7, 0x0000,
-+ 0x007c, 0x6008, 0xa705, 0x600a, 0x2091, 0x8000, 0x1078, 0x1b7d,
-+ 0x2091, 0x8001, 0x78d8, 0xa065, 0x0040, 0x1f9c, 0x609c, 0x78da,
-+ 0x609f, 0x0000, 0x0078, 0x1f8c, 0x78d7, 0x0000, 0x78db, 0x0000,
-+ 0x007c, 0x7990, 0x7894, 0x8000, 0xa10a, 0x00c8, 0x1fa8, 0xa006,
-+ 0x7896, 0x70d2, 0x7804, 0xa005, 0x0040, 0x1fb6, 0x8001, 0x7806,
-+ 0x00c0, 0x1fb6, 0x0068, 0x1fb6, 0x2091, 0x4080, 0x007c, 0x0c7e,
-+ 0x1078, 0x3977, 0x2c68, 0x0c7f, 0x007c, 0x0010, 0x202e, 0x0068,
-+ 0x202e, 0x2029, 0x0000, 0x78cb, 0x0000, 0x788c, 0xa065, 0x0040,
-+ 0x2027, 0x2009, 0x4d74, 0x2104, 0xa084, 0x0001, 0x0040, 0x1ff5,
-+ 0x6004, 0xa086, 0x0103, 0x00c0, 0x1ff5, 0x6018, 0xa005, 0x00c0,
-+ 0x1ff5, 0x6014, 0xa005, 0x00c0, 0x1ff5, 0x0d7e, 0x2069, 0x0000,
-+ 0x6818, 0xa084, 0x0001, 0x00c0, 0x1ff4, 0x6010, 0x70c6, 0x600c,
-+ 0x70ca, 0x70c3, 0x8020, 0x681b, 0x0001, 0x2091, 0x4080, 0x0d7f,
-+ 0x1078, 0x1ba4, 0x0078, 0x202c, 0x0d7f, 0x1078, 0x202f, 0x0040,
-+ 0x2027, 0x6204, 0xa294, 0x00ff, 0xa296, 0x0003, 0x0040, 0x2007,
-+ 0x6204, 0xa296, 0x0110, 0x00c0, 0x2015, 0x78cb, 0x0001, 0x6204,
-+ 0xa294, 0xff00, 0x8217, 0x8211, 0x0040, 0x2015, 0x85ff, 0x00c0,
-+ 0x2027, 0x8210, 0xa202, 0x00c8, 0x2027, 0x057e, 0x1078, 0x203e,
-+ 0x057f, 0x0040, 0x2022, 0x78e0, 0xa086, 0x0003, 0x0040, 0x2027,
-+ 0x0078, 0x2015, 0x8528, 0x78c8, 0xa005, 0x0040, 0x1fc5, 0x85ff,
-+ 0x0040, 0x202e, 0x2091, 0x4080, 0x78b0, 0x70d6, 0x007c, 0x7bac,
-+ 0x79b0, 0x70d4, 0xa102, 0x00c0, 0x2038, 0x2300, 0xa005, 0x007c,
-+ 0x0048, 0x203c, 0xa302, 0x007c, 0x8002, 0x007c, 0x2001, 0x04fd,
-+ 0x2004, 0xa082, 0x0005, 0x00c8, 0x2058, 0x2091, 0x8000, 0x2071,
-+ 0x0020, 0x7004, 0xa005, 0x00c0, 0x208d, 0x7008, 0x7208, 0xa206,
-+ 0x00c0, 0x208d, 0xa286, 0x0002, 0x00c0, 0x208d, 0x2071, 0x0010,
-+ 0x1078, 0x2092, 0x2009, 0x0020, 0x6004, 0xa086, 0x0103, 0x00c0,
-+ 0x2067, 0x6028, 0xa005, 0x00c0, 0x2067, 0x2009, 0x000e, 0x1078,
-+ 0x186a, 0x0040, 0x2080, 0x78c4, 0x8000, 0x78c6, 0xa086, 0x0002,
-+ 0x00c0, 0x208d, 0x2091, 0x8000, 0x78e3, 0x0003, 0x78c7, 0x0000,
-+ 0x78cc, 0xa085, 0x0300, 0x78ce, 0x2091, 0x8001, 0x0078, 0x208d,
-+ 0x78c7, 0x0000, 0x1078, 0x1ba4, 0x79ac, 0x78b0, 0x8000, 0xa10a,
-+ 0x00c8, 0x208b, 0xa006, 0x78b2, 0xa006, 0x2071, 0x0010, 0x2091,
-+ 0x8001, 0x007c, 0x8107, 0x8004, 0x8004, 0x7ab8, 0x7bb4, 0xa210,
-+ 0xa399, 0x0000, 0x007c, 0x2009, 0x4d5b, 0x2091, 0x8000, 0x200a,
-+ 0x0f7e, 0x0e7e, 0x2071, 0x4d40, 0x7000, 0xa086, 0x0000, 0x00c0,
-+ 0x20ba, 0x2009, 0x4d12, 0x2104, 0xa005, 0x00c0, 0x20ba, 0x2079,
-+ 0x0100, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x20ba, 0x0018, 0x20ba,
-+ 0x781b, 0x004b, 0x0e7f, 0x0f7f, 0x007c, 0x0f7e, 0x0e7e, 0x2071,
-+ 0x4d40, 0x2091, 0x8000, 0x7000, 0xa086, 0x0000, 0x00c0, 0x20d3,
-+ 0x2079, 0x0100, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x20d3, 0x0018,
-+ 0x20d3, 0x781b, 0x004d, 0x2091, 0x8001, 0x0e7f, 0x0f7f, 0x007c,
-+ 0x127e, 0x2091, 0x2300, 0x2071, 0x4d40, 0x2079, 0x0100, 0x784b,
-+ 0x000f, 0x0098, 0x20e6, 0x7838, 0x0078, 0x20df, 0x20a9, 0x0040,
-+ 0x7800, 0xa082, 0x0004, 0x0048, 0x20ef, 0x20a9, 0x0060, 0x789b,
-+ 0x0000, 0x78af, 0x0000, 0x78af, 0x0000, 0x0070, 0x20f9, 0x0078,
-+ 0x20f1, 0x7800, 0xa082, 0x0004, 0x0048, 0x2108, 0x70bf, 0x009f,
-+ 0x2019, 0x4ab1, 0x1078, 0x2137, 0x702f, 0x8001, 0x0078, 0x2114,
-+ 0x70bf, 0x0000, 0x2019, 0x4916, 0x1078, 0x2137, 0x2019, 0x4955,
-+ 0x1078, 0x2137, 0x702f, 0x8000, 0x7003, 0x0000, 0x1078, 0x2240,
-+ 0x7004, 0xa084, 0x000f, 0x017e, 0x0028, 0x2122, 0xa085, 0x6280,
-+ 0x0078, 0x2124, 0xa085, 0x62c0, 0x017f, 0x7806, 0x780f, 0xb204,
-+ 0x7843, 0x00d8, 0x7853, 0x0080, 0x780b, 0x0008, 0x7047, 0x0008,
-+ 0x7053, 0x4d7f, 0x704f, 0x0000, 0x127f, 0x2000, 0x007c, 0x137e,
-+ 0x147e, 0x157e, 0x047e, 0x20a1, 0x012b, 0x2304, 0xa005, 0x789a,
-+ 0x0040, 0x2157, 0x8318, 0x2324, 0x8318, 0x2398, 0x24a8, 0xa484,
-+ 0xff00, 0x0040, 0x214f, 0xa482, 0x0100, 0x20a9, 0x0100, 0x2020,
-+ 0x53a6, 0xa005, 0x00c0, 0x2146, 0x3318, 0x0078, 0x213d, 0x047f,
-+ 0x157f, 0x147f, 0x137f, 0x007c, 0xa18c, 0x000f, 0x2011, 0x0101,
-+ 0x2204, 0xa084, 0xfff0, 0xa105, 0x2012, 0x1078, 0x2240, 0x007c,
-+ 0x2011, 0x0101, 0x20a9, 0x0009, 0x810b, 0x0070, 0x2171, 0x0078,
-+ 0x216c, 0xa18c, 0x0e00, 0x2204, 0xa084, 0xf1ff, 0xa105, 0x2012,
-+ 0x007c, 0x2009, 0x0101, 0x20a9, 0x0005, 0x8213, 0x0070, 0x2182,
-+ 0x0078, 0x217d, 0xa294, 0x00e0, 0x2104, 0xa084, 0xff1f, 0xa205,
-+ 0x200a, 0x007c, 0x2011, 0x0101, 0x20a9, 0x000c, 0x810b, 0x0070,
-+ 0x2193, 0x0078, 0x218e, 0xa18c, 0xf000, 0x2204, 0xa084, 0x0fff,
-+ 0xa105, 0x2012, 0x007c, 0x2011, 0x0102, 0x2204, 0xa084, 0xffcf,
-+ 0xa105, 0x2012, 0x007c, 0x8103, 0x8003, 0xa080, 0x0020, 0x0c7e,
-+ 0x2061, 0x0100, 0x609a, 0x62ac, 0x63ac, 0x0c7f, 0x007c, 0x8103,
-+ 0x8003, 0xa080, 0x0022, 0x0c7e, 0x2061, 0x0100, 0x609a, 0x60a4,
-+ 0xa084, 0xffdf, 0x60ae, 0x0c7f, 0x007c, 0x8103, 0x8003, 0xa080,
-+ 0x0022, 0x0c7e, 0x2061, 0x0100, 0x609a, 0x60a4, 0xa085, 0x0020,
-+ 0x60ae, 0x0c7f, 0x007c, 0x8103, 0x8003, 0xa080, 0x0020, 0x0c7e,
-+ 0x2061, 0x0100, 0x609a, 0x60a4, 0x62ae, 0x2010, 0x60a4, 0x63ae,
-+ 0x2018, 0x0c7f, 0x007c, 0x2091, 0x8000, 0x0c7e, 0x0e7e, 0x6818,
-+ 0xa005, 0x0040, 0x221e, 0x2061, 0x7100, 0x1078, 0x2226, 0x0040,
-+ 0x220a, 0x20a9, 0x0000, 0x2061, 0x7000, 0x0c7e, 0x1078, 0x2226,
-+ 0x0040, 0x21fa, 0x0c7f, 0x8c60, 0x0070, 0x21f8, 0x0078, 0x21ed,
-+ 0x0078, 0x221e, 0x007f, 0xa082, 0x7000, 0x2071, 0x4d40, 0x7086,
-+ 0x7182, 0x2001, 0x0004, 0x706e, 0x7093, 0x000f, 0x1078, 0x209b,
-+ 0x0078, 0x221a, 0x60c0, 0xa005, 0x00c0, 0x221e, 0x2071, 0x4d40,
-+ 0x7182, 0x2c00, 0x708a, 0x2001, 0x0006, 0x706e, 0x7093, 0x000f,
-+ 0x1078, 0x209b, 0x2001, 0x0000, 0x0078, 0x2220, 0x2001, 0x0001,
-+ 0x2091, 0x8001, 0xa005, 0x0e7f, 0x0c7f, 0x007c, 0x2c04, 0xa005,
-+ 0x0040, 0x223d, 0x2060, 0x6010, 0xa306, 0x00c0, 0x223a, 0x600c,
-+ 0xa206, 0x00c0, 0x223a, 0x6014, 0xa106, 0x00c0, 0x223a, 0xa006,
-+ 0x0078, 0x223f, 0x6000, 0x0078, 0x2227, 0xa085, 0x0001, 0x007c,
-+ 0x2011, 0x4d41, 0x220c, 0xa18c, 0x000f, 0x2011, 0x013b, 0x2204,
-+ 0xa084, 0x0100, 0x0040, 0x2256, 0x2021, 0xff04, 0x2122, 0x810b,
-+ 0x810b, 0x810b, 0x810b, 0xa18d, 0x0f00, 0x2104, 0x007c, 0x0e7e,
-+ 0x68e4, 0xa08c, 0x0020, 0x0040, 0x22aa, 0xa084, 0x0006, 0x00c0,
-+ 0x22aa, 0x6014, 0x8007, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003,
-+ 0xa0f0, 0x4f80, 0x7004, 0xa084, 0x000a, 0x00c0, 0x22aa, 0x7108,
-+ 0xa194, 0xff00, 0x0040, 0x22aa, 0xa18c, 0x00ff, 0x2001, 0x000c,
-+ 0xa106, 0x0040, 0x2291, 0x2001, 0x0012, 0xa106, 0x0040, 0x2295,
-+ 0x2001, 0x0014, 0xa106, 0x0040, 0x2299, 0x2001, 0x0019, 0xa106,
-+ 0x0040, 0x229d, 0x2001, 0x0032, 0xa106, 0x0040, 0x22a1, 0x0078,
-+ 0x22a5, 0x2009, 0x0012, 0x0078, 0x22a7, 0x2009, 0x0014, 0x0078,
-+ 0x22a7, 0x2009, 0x0019, 0x0078, 0x22a7, 0x2009, 0x0020, 0x0078,
-+ 0x22a7, 0x2009, 0x003f, 0x0078, 0x22a7, 0x2011, 0x0000, 0x2100,
-+ 0xa205, 0x700a, 0x0e7f, 0x007c, 0x0068, 0x22ac, 0x2091, 0x8000,
-+ 0x2071, 0x0000, 0x007e, 0x7018, 0xa084, 0x0001, 0x00c0, 0x22b3,
-+ 0x007f, 0x2071, 0x0010, 0x70ca, 0x007f, 0x70c6, 0x70c3, 0x8002,
-+ 0x70db, 0x0737, 0x70df, 0x0000, 0x2071, 0x0000, 0x701b, 0x0001,
-+ 0x2091, 0x4080, 0x0078, 0x22ca, 0x107e, 0x007e, 0x127e, 0x2091,
-+ 0x2300, 0x7f3c, 0x7e58, 0x7c30, 0x7d38, 0x77c2, 0x74c6, 0x76ca,
-+ 0x75ce, 0xa594, 0x003f, 0xa49c, 0x0003, 0xa484, 0x000f, 0x0079,
-+ 0x22e1, 0x22f3, 0x22f3, 0x22f3, 0x2624, 0x3741, 0x22f1, 0x2322,
-+ 0x232c, 0x22f1, 0x22f1, 0x22f1, 0x22f1, 0x22f1, 0x22f1, 0x22f1,
-+ 0x22f1, 0x1078, 0x22ac, 0x8507, 0xa084, 0x001f, 0x0079, 0x22f8,
-+ 0x2336, 0x2624, 0x27d8, 0x28d5, 0x28fd, 0x2b6d, 0x2e18, 0x2e5b,
-+ 0x2ea6, 0x2f2b, 0x2fb1, 0x3056, 0x2322, 0x26fc, 0x2ded, 0x2318,
-+ 0x3a92, 0x3ab2, 0x3be5, 0x3bf1, 0x3ca2, 0x2318, 0x2318, 0x3d53,
-+ 0x3d57, 0x3a90, 0x2318, 0x3b8c, 0x2318, 0x399a, 0x232c, 0x2318,
-+ 0x1078, 0x22ac, 0x0018, 0x22d1, 0x127f, 0x2091, 0x8001, 0x007f,
-+ 0x107f, 0x007c, 0x2019, 0x4a07, 0x1078, 0x2137, 0x702f, 0x0001,
-+ 0x781b, 0x004f, 0x0078, 0x231a, 0x2019, 0x4955, 0x1078, 0x2137,
-+ 0x702f, 0x8000, 0x781b, 0x00e1, 0x0078, 0x231a, 0x7242, 0x2009,
-+ 0x4d0f, 0x200b, 0x0000, 0xa584, 0x0001, 0x00c0, 0x39a6, 0x0040,
-+ 0x2353, 0x1078, 0x22ac, 0x7003, 0x0000, 0x704b, 0x0000, 0x7043,
-+ 0x0000, 0x7037, 0x0000, 0x1078, 0x371d, 0x0018, 0x22d1, 0x2009,
-+ 0x4d0f, 0x200b, 0x0000, 0x7068, 0xa005, 0x00c0, 0x2426, 0x706c,
-+ 0xa084, 0x0007, 0x0079, 0x235c, 0x245d, 0x2364, 0x2370, 0x238f,
-+ 0x23b3, 0x2404, 0x23db, 0x2364, 0x1078, 0x3705, 0x2009, 0x0048,
-+ 0x1078, 0x2cc3, 0x00c0, 0x236e, 0x7003, 0x0004, 0x0078, 0x231a,
-+ 0x1078, 0x3705, 0x00c0, 0x238d, 0x7080, 0x8007, 0x789b, 0x0080,
-+ 0x78aa, 0x789b, 0x0010, 0x78ab, 0x000c, 0x789b, 0x0060, 0x78ab,
-+ 0x0001, 0x785b, 0x0004, 0x2009, 0x00f2, 0x1078, 0x2cb7, 0x00c0,
-+ 0x238d, 0x7003, 0x0004, 0x7093, 0x000f, 0x0078, 0x231a, 0x1078,
-+ 0x3705, 0x00c0, 0x23b1, 0x7180, 0x8107, 0x789b, 0x0080, 0x78aa,
-+ 0x789b, 0x0010, 0xa18c, 0x001f, 0xa18d, 0x00c0, 0x79aa, 0x78ab,
-+ 0x0006, 0x789b, 0x0060, 0x78ab, 0x0002, 0x785b, 0x0004, 0x2009,
-+ 0x00f2, 0x1078, 0x2cb7, 0x00c0, 0x23b1, 0x7003, 0x0004, 0x7093,
-+ 0x000f, 0x0078, 0x231a, 0x1078, 0x3705, 0x00c0, 0x23d9, 0x7180,
-+ 0x8107, 0x789b, 0x0080, 0x78aa, 0x789b, 0x0010, 0xa18c, 0x001f,
-+ 0xa18d, 0x00c0, 0x79aa, 0x78ab, 0x0020, 0x7184, 0x79aa, 0x78ab,
-+ 0x000d, 0x789b, 0x0060, 0x78ab, 0x0004, 0x785b, 0x0004, 0x2009,
-+ 0x00f2, 0x1078, 0x2cb7, 0x00c0, 0x23d9, 0x7003, 0x0004, 0x7093,
-+ 0x000f, 0x0078, 0x231a, 0x1078, 0x3705, 0x00c0, 0x2402, 0x7180,
-+ 0x8107, 0x789b, 0x0080, 0x78aa, 0x789b, 0x0010, 0xa18c, 0x001f,
-+ 0xa18d, 0x00c0, 0x79aa, 0x78ab, 0x0006, 0x789b, 0x0060, 0x78ab,
-+ 0x0002, 0x785b, 0x0004, 0x2009, 0x00f2, 0x1078, 0x2cb7, 0x00c0,
-+ 0x2402, 0x7088, 0x708b, 0x0000, 0x2068, 0x704a, 0x7003, 0x0002,
-+ 0x7093, 0x000f, 0x0078, 0x231a, 0x1078, 0x3705, 0x00c0, 0x231a,
-+ 0x7088, 0x2068, 0x6f14, 0x1078, 0x35fc, 0x2c50, 0x1078, 0x37b5,
-+ 0x789b, 0x0010, 0x6814, 0xa084, 0x001f, 0xa085, 0x0080, 0x78aa,
-+ 0x6e1c, 0x2041, 0x0001, 0x708c, 0xa084, 0x0400, 0x2001, 0x0004,
-+ 0x0040, 0x2424, 0x2001, 0x0006, 0x0078, 0x2545, 0x1078, 0x3705,
-+ 0x00c0, 0x231a, 0x789b, 0x0010, 0x7068, 0x2068, 0x6f14, 0x1078,
-+ 0x35fc, 0x2c50, 0x1078, 0x37b5, 0x6008, 0xa085, 0x0010, 0x600a,
-+ 0x6824, 0xa005, 0x0040, 0x2444, 0xa082, 0x0006, 0x0048, 0x2442,
-+ 0x0078, 0x2444, 0x6827, 0x0005, 0x6b14, 0xa39c, 0x001f, 0xa39d,
-+ 0x00c0, 0x7058, 0xa084, 0x8000, 0x0040, 0x2452, 0xa684, 0x0001,
-+ 0x0040, 0x2454, 0xa39c, 0xffbf, 0x7baa, 0x2031, 0x0020, 0x2041,
-+ 0x0001, 0x2001, 0x0003, 0x0078, 0x2545, 0x0018, 0x22d1, 0x744c,
-+ 0xa485, 0x0000, 0x0040, 0x2477, 0xa080, 0x4d80, 0x2030, 0x7150,
-+ 0x8108, 0xa12a, 0x0048, 0x246e, 0x2009, 0x4d80, 0x2164, 0x6504,
-+ 0x85ff, 0x00c0, 0x2488, 0x8421, 0x00c0, 0x2468, 0x7152, 0x7003,
-+ 0x0000, 0x704b, 0x0000, 0x7040, 0xa005, 0x0040, 0x39a6, 0x0078,
-+ 0x231a, 0x764c, 0xa6b0, 0x4d80, 0x7150, 0x2600, 0x0078, 0x2473,
-+ 0x7152, 0x2568, 0x2558, 0x754a, 0x2c50, 0x6034, 0xa085, 0x0000,
-+ 0x00c0, 0x2485, 0x6708, 0x773a, 0xa784, 0x033f, 0x0040, 0x24be,
-+ 0xa784, 0x0021, 0x00c0, 0x2485, 0xa784, 0x0002, 0x0040, 0x24a7,
-+ 0xa784, 0x0004, 0x0040, 0x2485, 0xa7bc, 0xfffb, 0x670a, 0xa784,
-+ 0x0008, 0x00c0, 0x2485, 0xa784, 0x0010, 0x00c0, 0x2485, 0xa784,
-+ 0x0200, 0x00c0, 0x2485, 0xa784, 0x0100, 0x0040, 0x24be, 0x6018,
-+ 0xa005, 0x00c0, 0x2485, 0xa7bc, 0xfeff, 0x670a, 0x6823, 0x0000,
-+ 0x6e1c, 0xa684, 0x000e, 0x6118, 0x0040, 0x24ce, 0x601c, 0xa102,
-+ 0x0048, 0x24d1, 0x0040, 0x24d1, 0x0078, 0x2481, 0x81ff, 0x00c0,
-+ 0x2481, 0x68c3, 0x0000, 0xa784, 0x0080, 0x00c0, 0x24d9, 0x700c,
-+ 0x6022, 0xa7bc, 0xff7f, 0x670a, 0x1078, 0x37b5, 0x0018, 0x22d1,
-+ 0x789b, 0x0010, 0xa046, 0x1078, 0x3705, 0x00c0, 0x231a, 0x6b14,
-+ 0xa39c, 0x001f, 0xa39d, 0x00c0, 0x7058, 0xa084, 0x8000, 0x0040,
-+ 0x24f5, 0xa684, 0x0001, 0x0040, 0x24f7, 0xa39c, 0xffbf, 0xa684,
-+ 0x0010, 0x0040, 0x24fd, 0xa39d, 0x0020, 0x7baa, 0x8840, 0xa684,
-+ 0x000e, 0x00c0, 0x2508, 0xa7bd, 0x0010, 0x670a, 0x0078, 0x2543,
-+ 0x7158, 0xa18c, 0x0800, 0x0040, 0x322a, 0x2011, 0x0020, 0xa684,
-+ 0x0008, 0x00c0, 0x2519, 0x8210, 0xa684, 0x0002, 0x00c0, 0x2519,
-+ 0x8210, 0x7aaa, 0x8840, 0x1078, 0x371d, 0x6a14, 0x610c, 0x8108,
-+ 0xa18c, 0x00ff, 0xa1e0, 0x7000, 0x2c64, 0x8cff, 0x0040, 0x253a,
-+ 0x6014, 0xa206, 0x00c0, 0x2524, 0x60b8, 0x8001, 0x60ba, 0x00c0,
-+ 0x251f, 0x0c7e, 0x2a60, 0x6008, 0xa085, 0x0100, 0x600a, 0x0c7f,
-+ 0x0078, 0x245d, 0x1078, 0x3705, 0x00c0, 0x231a, 0x2a60, 0x610e,
-+ 0x79aa, 0x8840, 0x7132, 0x2001, 0x0001, 0x007e, 0x715c, 0xa184,
-+ 0x0018, 0x0040, 0x2560, 0xa184, 0x0010, 0x0040, 0x2553, 0x1078,
-+ 0x3429, 0x00c0, 0x2583, 0xa184, 0x0008, 0x0040, 0x2560, 0x69a0,
-+ 0xa184, 0x0600, 0x00c0, 0x2560, 0x1078, 0x331a, 0x0078, 0x2583,
-+ 0x69a0, 0xa184, 0x0800, 0x0040, 0x2577, 0x0c7e, 0x027e, 0x2960,
-+ 0x6000, 0xa085, 0x2000, 0x6002, 0x6104, 0xa18d, 0x0010, 0x6106,
-+ 0x027f, 0x0c7f, 0x1078, 0x3429, 0x00c0, 0x2583, 0x69a0, 0xa184,
-+ 0x0200, 0x0040, 0x257f, 0x1078, 0x3369, 0x0078, 0x2583, 0xa184,
-+ 0x0400, 0x00c0, 0x255c, 0x69a0, 0xa184, 0x1000, 0x0040, 0x258e,
-+ 0x6914, 0xa18c, 0xff00, 0x810f, 0x1078, 0x21af, 0x007f, 0x7002,
-+ 0xa68c, 0x0060, 0xa684, 0x0060, 0x0040, 0x259c, 0xa086, 0x0060,
-+ 0x00c0, 0x259c, 0xa18d, 0x4000, 0x88ff, 0x0040, 0x25a1, 0xa18d,
-+ 0x0004, 0x795a, 0x69b6, 0x789b, 0x0060, 0x2800, 0x78aa, 0x789b,
-+ 0x0061, 0x6818, 0xa085, 0x8000, 0x681a, 0x78aa, 0x8008, 0x810c,
-+ 0x0040, 0x3230, 0xa18c, 0x00f8, 0x00c0, 0x3230, 0x157e, 0x137e,
-+ 0x147e, 0x20a1, 0x012c, 0x789b, 0x0000, 0x8000, 0x80ac, 0xad80,
-+ 0x000b, 0x2098, 0x53a6, 0x147f, 0x137f, 0x157f, 0x6814, 0x8007,
-+ 0x789b, 0x0080, 0x78aa, 0x6d94, 0x7dd6, 0x7dde, 0x6e98, 0x7ed2,
-+ 0x7eda, 0x1078, 0x3705, 0x00c0, 0x25e6, 0x702c, 0x8003, 0x0048,
-+ 0x25df, 0x2019, 0x4955, 0x1078, 0x2137, 0x702f, 0x8000, 0x7830,
-+ 0xa084, 0x00c0, 0x00c0, 0x25e6, 0x0098, 0x25ee, 0x6008, 0xa084,
-+ 0xffef, 0x600a, 0x1078, 0x371d, 0x0078, 0x2343, 0x7200, 0xa284,
-+ 0x0007, 0xa086, 0x0001, 0x00c0, 0x25fb, 0x781b, 0x004f, 0x1078,
-+ 0x371d, 0x0078, 0x260c, 0x6ab4, 0xa295, 0x2000, 0x7a5a, 0x781b,
-+ 0x004f, 0x1078, 0x371d, 0x7200, 0x2500, 0xa605, 0x0040, 0x260c,
-+ 0xa284, 0x0007, 0x1079, 0x261a, 0xad80, 0x0009, 0x7036, 0xa284,
-+ 0x0007, 0xa086, 0x0001, 0x00c0, 0x231a, 0x6018, 0x8000, 0x601a,
-+ 0x0078, 0x231a, 0x2622, 0x45ed, 0x45ed, 0x45dc, 0x45ed, 0x2622,
-+ 0x45dc, 0x2622, 0x1078, 0x22ac, 0x1078, 0x3705, 0x0f7e, 0x2079,
-+ 0x4d00, 0x78cc, 0x0f7f, 0xa084, 0x0001, 0x0040, 0x2648, 0x706c,
-+ 0xa086, 0x0001, 0x00c0, 0x2637, 0x706e, 0x0078, 0x26d9, 0x706c,
-+ 0xa086, 0x0005, 0x00c0, 0x2646, 0x7088, 0x2068, 0x681b, 0x0004,
-+ 0x6817, 0x0000, 0x6820, 0xa085, 0x0008, 0x6822, 0x706f, 0x0000,
-+ 0x2011, 0x0004, 0x716c, 0xa186, 0x0001, 0x0040, 0x2669, 0xa186,
-+ 0x0007, 0x00c0, 0x2659, 0x2009, 0x4d38, 0x200b, 0x0005, 0x0078,
-+ 0x2669, 0x2009, 0x4d13, 0x2104, 0x2009, 0x4d12, 0x200a, 0x2009,
-+ 0x4d38, 0x200b, 0x0001, 0x706f, 0x0000, 0x7073, 0x0001, 0x0078,
-+ 0x266b, 0x706f, 0x0000, 0x1078, 0x431b, 0x157e, 0x20a9, 0x0010,
-+ 0x2039, 0x0000, 0x1078, 0x34f9, 0xa7b8, 0x0100, 0x0070, 0x267a,
-+ 0x0078, 0x2672, 0x157f, 0x7000, 0x0079, 0x267e, 0x26aa, 0x2693,
-+ 0x2693, 0x2686, 0x26aa, 0x26aa, 0x26aa, 0x26aa, 0x2021, 0x4d5a,
-+ 0x2404, 0xa005, 0x0040, 0x26aa, 0xad06, 0x00c0, 0x2693, 0x6800,
-+ 0x2022, 0x0078, 0x26a3, 0x6820, 0xa084, 0x0001, 0x00c0, 0x269f,
-+ 0x6f14, 0x1078, 0x35fc, 0x1078, 0x3201, 0x0078, 0x26a3, 0x7060,
-+ 0x2060, 0x6800, 0x6002, 0x6a1a, 0x6820, 0xa085, 0x0008, 0x6822,
-+ 0x1078, 0x1b8e, 0x2021, 0x7100, 0x1078, 0x26e6, 0x2021, 0x4d5a,
-+ 0x1078, 0x26e6, 0x157e, 0x20a9, 0x0000, 0x2021, 0x7000, 0x1078,
-+ 0x26e6, 0x8420, 0x0070, 0x26be, 0x0078, 0x26b7, 0x2061, 0x5000,
-+ 0x2021, 0x0002, 0x20a9, 0x0100, 0x6018, 0x6110, 0x81ff, 0x0040,
-+ 0x26cd, 0xa102, 0x0050, 0x26cd, 0x6012, 0x601b, 0x0000, 0xace0,
-+ 0x0010, 0x0070, 0x26d5, 0x0078, 0x26c4, 0x8421, 0x00c0, 0x26c2,
-+ 0x157f, 0x709c, 0xa084, 0x8000, 0x0040, 0x26e0, 0x1078, 0x3810,
-+ 0x7003, 0x0000, 0x704b, 0x0000, 0x0078, 0x231a, 0x047e, 0x2404,
-+ 0xa005, 0x0040, 0x26f8, 0x2068, 0x6800, 0x007e, 0x6a1a, 0x6820,
-+ 0xa085, 0x0008, 0x6822, 0x1078, 0x1b8e, 0x007f, 0x0078, 0x26e8,
-+ 0x047f, 0x2023, 0x0000, 0x007c, 0xa282, 0x0003, 0x0050, 0x2702,
-+ 0x1078, 0x22ac, 0x2300, 0x0079, 0x2705, 0x2708, 0x277b, 0x2798,
-+ 0xa282, 0x0002, 0x0040, 0x270e, 0x1078, 0x22ac, 0x706c, 0x706f,
-+ 0x0000, 0x7093, 0x0000, 0x0079, 0x2715, 0x271d, 0x271d, 0x271f,
-+ 0x2753, 0x3236, 0x271d, 0x2753, 0x271d, 0x1078, 0x22ac, 0x7780,
-+ 0x1078, 0x34f9, 0x7780, 0xa7bc, 0x0f00, 0x1078, 0x35fc, 0x6018,
-+ 0xa005, 0x0040, 0x274a, 0x2021, 0x7100, 0x2009, 0x0004, 0x2011,
-+ 0x0010, 0x1078, 0x27b3, 0x0040, 0x274a, 0x157e, 0x20a9, 0x0000,
-+ 0x2021, 0x7000, 0x047e, 0x2009, 0x0004, 0x2011, 0x0010, 0x1078,
-+ 0x27b3, 0x047f, 0x0040, 0x2749, 0x8420, 0x0070, 0x2749, 0x0078,
-+ 0x273a, 0x157f, 0x8738, 0xa784, 0x001f, 0x00c0, 0x2725, 0x0078,
-+ 0x2343, 0x0078, 0x2343, 0x7780, 0x1078, 0x35fc, 0x6018, 0xa005,
-+ 0x0040, 0x2779, 0x2021, 0x7100, 0x2009, 0x0005, 0x2011, 0x0020,
-+ 0x1078, 0x27b3, 0x0040, 0x2779, 0x157e, 0x20a9, 0x0000, 0x2021,
-+ 0x7000, 0x047e, 0x2009, 0x0005, 0x2011, 0x0020, 0x1078, 0x27b3,
-+ 0x047f, 0x0040, 0x2778, 0x8420, 0x0070, 0x2778, 0x0078, 0x2769,
-+ 0x157f, 0x0078, 0x2343, 0x2200, 0x0079, 0x277e, 0x2781, 0x2783,
-+ 0x2783, 0x1078, 0x22ac, 0x2009, 0x0012, 0x706c, 0xa086, 0x0002,
-+ 0x0040, 0x278c, 0x2009, 0x000e, 0x6818, 0xa084, 0x8000, 0x0040,
-+ 0x2792, 0x691a, 0x706f, 0x0000, 0x7073, 0x0001, 0x0078, 0x3693,
-+ 0x2200, 0x0079, 0x279b, 0x27a0, 0x2783, 0x279e, 0x1078, 0x22ac,
-+ 0x1078, 0x431b, 0x7000, 0xa086, 0x0001, 0x00c0, 0x31c6, 0x1078,
-+ 0x3217, 0x6008, 0xa084, 0xffef, 0x600a, 0x1078, 0x31b9, 0x0040,
-+ 0x31c6, 0x0078, 0x245d, 0x2404, 0xa005, 0x0040, 0x27d4, 0x2068,
-+ 0x2d04, 0x007e, 0x6814, 0xa706, 0x0040, 0x27c2, 0x2d20, 0x007f,
-+ 0x0078, 0x27b4, 0x007f, 0x2022, 0x691a, 0x6820, 0xa205, 0x6822,
-+ 0x1078, 0x1b8e, 0x6010, 0x8001, 0x6012, 0x6008, 0xa084, 0xffef,
-+ 0x600a, 0x1078, 0x3217, 0x007c, 0xa085, 0x0001, 0x0078, 0x27d3,
-+ 0x2300, 0x0079, 0x27db, 0x27e0, 0x27de, 0x2879, 0x1078, 0x22ac,
-+ 0x78ec, 0xa084, 0x0001, 0x00c0, 0x27f4, 0x7000, 0xa086, 0x0004,
-+ 0x00c0, 0x27ec, 0x0078, 0x2817, 0x1078, 0x3217, 0x6008, 0xa084,
-+ 0xffef, 0x600a, 0x0078, 0x31c6, 0x78e4, 0xa005, 0x00d0, 0x2817,
-+ 0x0018, 0x2817, 0x2008, 0xa084, 0x0030, 0x00c0, 0x2803, 0x781b,
-+ 0x004f, 0x0078, 0x231a, 0x78ec, 0xa084, 0x0003, 0x0040, 0x27ff,
-+ 0x2100, 0xa084, 0x0007, 0x0079, 0x280d, 0x2850, 0x285b, 0x2841,
-+ 0x2815, 0x36f8, 0x36f8, 0x2815, 0x286a, 0x1078, 0x22ac, 0x7000,
-+ 0xa086, 0x0004, 0x00c0, 0x2831, 0x706c, 0xa086, 0x0002, 0x00c0,
-+ 0x2827, 0x2011, 0x0002, 0x2019, 0x0000, 0x0078, 0x26fc, 0x706c,
-+ 0xa086, 0x0006, 0x0040, 0x2821, 0x706c, 0xa086, 0x0004, 0x0040,
-+ 0x2821, 0x79e4, 0xa184, 0x0030, 0x0040, 0x283b, 0x78ec, 0xa084,
-+ 0x0003, 0x00c0, 0x283d, 0x0078, 0x2ded, 0x2001, 0x0003, 0x0078,
-+ 0x2b81, 0x6818, 0xa084, 0x8000, 0x0040, 0x2848, 0x681b, 0x001d,
-+ 0x1078, 0x34d8, 0x782b, 0x3008, 0x781b, 0x005b, 0x0078, 0x231a,
-+ 0x6818, 0xa084, 0x8000, 0x0040, 0x2857, 0x681b, 0x001d, 0x1078,
-+ 0x34d8, 0x0078, 0x36c3, 0x6818, 0xa084, 0x8000, 0x0040, 0x2862,
-+ 0x681b, 0x001d, 0x1078, 0x34d8, 0x782b, 0x3008, 0x781b, 0x00de,
-+ 0x0078, 0x231a, 0x6818, 0xa084, 0x8000, 0x0040, 0x2871, 0x681b,
-+ 0x001d, 0x1078, 0x34d8, 0x782b, 0x3008, 0x781b, 0x009c, 0x0078,
-+ 0x231a, 0xa584, 0x000f, 0x00c0, 0x2896, 0x7000, 0x0079, 0x2880,
-+ 0x2343, 0x288a, 0x2888, 0x31c6, 0x31c6, 0x31c6, 0x31c6, 0x2888,
-+ 0x1078, 0x22ac, 0x1078, 0x3217, 0x6008, 0xa084, 0xffef, 0x600a,
-+ 0x1078, 0x31b9, 0x0040, 0x31c6, 0x0078, 0x245d, 0x78e4, 0xa005,
-+ 0x00d0, 0x2817, 0x0018, 0x2817, 0x2008, 0xa084, 0x0030, 0x00c0,
-+ 0x28a5, 0x781b, 0x004f, 0x0078, 0x231a, 0x78ec, 0xa084, 0x0003,
-+ 0x0040, 0x28a1, 0x2100, 0xa184, 0x0007, 0x0079, 0x28af, 0x28c1,
-+ 0x28c5, 0x28b9, 0x28b7, 0x36f8, 0x36f8, 0x28b7, 0x36ee, 0x1078,
-+ 0x22ac, 0x1078, 0x34e0, 0x782b, 0x3008, 0x781b, 0x005b, 0x0078,
-+ 0x231a, 0x1078, 0x34e0, 0x0078, 0x36c3, 0x1078, 0x34e0, 0x782b,
-+ 0x3008, 0x781b, 0x00de, 0x0078, 0x231a, 0x1078, 0x34e0, 0x782b,
-+ 0x3008, 0x781b, 0x009c, 0x0078, 0x231a, 0x2300, 0x0079, 0x28d8,
-+ 0x28dd, 0x28db, 0x28df, 0x1078, 0x22ac, 0x0078, 0x2f2b, 0x681b,
-+ 0x0008, 0x78a3, 0x0000, 0x79e4, 0xa184, 0x0030, 0x0040, 0x2f2b,
-+ 0x78ec, 0xa084, 0x0003, 0x0040, 0x2f2b, 0xa184, 0x0007, 0x0079,
-+ 0x28f1, 0x28f9, 0x28c5, 0x2841, 0x3693, 0x36f8, 0x36f8, 0x28f9,
-+ 0x36ee, 0x1078, 0x36a7, 0x0078, 0x231a, 0xa282, 0x0005, 0x0050,
-+ 0x2903, 0x1078, 0x22ac, 0x2300, 0x0079, 0x2906, 0x2909, 0x2b2e,
-+ 0x2b3c, 0x2200, 0x0079, 0x290c, 0x2926, 0x2913, 0x2926, 0x2911,
-+ 0x2b13, 0x1078, 0x22ac, 0x789b, 0x0018, 0x78a8, 0xa084, 0x00ff,
-+ 0xa082, 0x0020, 0x0048, 0x34be, 0xa08a, 0x0004, 0x00c8, 0x34be,
-+ 0x0079, 0x2922, 0x34be, 0x34be, 0x34be, 0x346c, 0x789b, 0x0018,
-+ 0x79a8, 0xa184, 0x0080, 0x0040, 0x2937, 0x0078, 0x34be, 0x7000,
-+ 0xa005, 0x00c0, 0x292d, 0x2011, 0x0004, 0x0078, 0x3069, 0xa184,
-+ 0x00ff, 0xa08a, 0x0010, 0x00c8, 0x34be, 0x0079, 0x293f, 0x2951,
-+ 0x294f, 0x2969, 0x296d, 0x29ff, 0x34be, 0x34be, 0x2a01, 0x34be,
-+ 0x34be, 0x2b0f, 0x2b0f, 0x34be, 0x34be, 0x34be, 0x2b11, 0x1078,
-+ 0x22ac, 0xa684, 0x1000, 0x0040, 0x295e, 0x2001, 0x0500, 0x8000,
-+ 0x8000, 0x783a, 0x781b, 0x009a, 0x0078, 0x231a, 0x6818, 0xa084,
-+ 0x8000, 0x0040, 0x2967, 0x681b, 0x001d, 0x0078, 0x2955, 0x0078,
-+ 0x3693, 0x681b, 0x001d, 0x0078, 0x34ce, 0x6920, 0x6922, 0xa684,
-+ 0x1800, 0x00c0, 0x2987, 0x6820, 0xa084, 0x0001, 0x00c0, 0x298d,
-+ 0x6818, 0xa086, 0x0008, 0x00c0, 0x297f, 0x681b, 0x0000, 0xa684,
-+ 0x0400, 0x0040, 0x29fb, 0x781b, 0x005d, 0x0078, 0x231a, 0xa684,
-+ 0x1000, 0x0040, 0x298d, 0x0078, 0x231a, 0xa684, 0x0060, 0x0040,
-+ 0x29f7, 0xa684, 0x0800, 0x0040, 0x29f7, 0xa684, 0x8000, 0x00c0,
-+ 0x299b, 0x0078, 0x29b5, 0xa6b4, 0x7fff, 0x7e5a, 0x6eb6, 0x789b,
-+ 0x0076, 0x7aac, 0x79ac, 0x78ac, 0x801b, 0x00c8, 0x29a8, 0x8000,
-+ 0xa084, 0x003f, 0xa108, 0xa291, 0x0000, 0x6b98, 0x2100, 0xa302,
-+ 0x68b2, 0x6b94, 0x2200, 0xa303, 0x68ae, 0xa684, 0x4000, 0x0040,
-+ 0x29bd, 0xa6b4, 0xbfff, 0x7e5a, 0x6eb6, 0x7000, 0xa086, 0x0003,
-+ 0x00c0, 0x29ca, 0x1078, 0x43d1, 0x1078, 0x45dc, 0x781b, 0x006c,
-+ 0x0078, 0x231a, 0xa006, 0x1078, 0x46d8, 0x6ab0, 0x69ac, 0x6c98,
-+ 0x6b94, 0x2200, 0xa105, 0x0040, 0x29d9, 0x2200, 0xa422, 0x2100,
-+ 0xa31b, 0x6caa, 0x7cd2, 0x6ba6, 0x7bd6, 0x2300, 0xa405, 0x00c0,
-+ 0x29e9, 0xa6b5, 0x4000, 0x7e5a, 0x6eb6, 0x781b, 0x006c, 0x0078,
-+ 0x231a, 0x781b, 0x006c, 0x2200, 0xa115, 0x00c0, 0x29f3, 0x1078,
-+ 0x45ed, 0x0078, 0x231a, 0x1078, 0x4638, 0x0078, 0x231a, 0x781b,
-+ 0x006d, 0x0078, 0x231a, 0x781b, 0x005d, 0x0078, 0x231a, 0x1078,
-+ 0x22ac, 0x0078, 0x2a62, 0x6920, 0xa184, 0x0100, 0x0040, 0x2a19,
-+ 0xa18c, 0xfeff, 0x6922, 0x0c7e, 0x7054, 0x2060, 0x6000, 0xa084,
-+ 0xefff, 0x6002, 0x6004, 0xa084, 0xfff5, 0x6006, 0x0c7f, 0x0078,
-+ 0x2a51, 0xa184, 0x0200, 0x0040, 0x2a51, 0xa18c, 0xfdff, 0x6922,
-+ 0x0c7e, 0x7054, 0x2060, 0x6000, 0xa084, 0xdfff, 0x6002, 0x6004,
-+ 0xa084, 0xffef, 0x6006, 0x2008, 0x2c48, 0x0c7f, 0xa184, 0x0008,
-+ 0x0040, 0x2a51, 0x1078, 0x35f8, 0x1078, 0x331a, 0x88ff, 0x0040,
-+ 0x2a51, 0x789b, 0x0060, 0x2800, 0x78aa, 0x7e58, 0xa6b5, 0x0004,
-+ 0x7e5a, 0xa684, 0x0400, 0x00c0, 0x2a4b, 0x782b, 0x3008, 0x781b,
-+ 0x005b, 0x0078, 0x231a, 0x782b, 0x3008, 0x781b, 0x006d, 0x0078,
-+ 0x231a, 0x7e58, 0xa684, 0x0400, 0x00c0, 0x2a5a, 0x781b, 0x005d,
-+ 0x0078, 0x231a, 0x781b, 0x006d, 0x0078, 0x231a, 0x0078, 0x34c6,
-+ 0x0078, 0x34c6, 0x2019, 0x0000, 0x7990, 0xa18c, 0x0007, 0x0040,
-+ 0x2a60, 0x789b, 0x0010, 0x78a8, 0xa094, 0x00ff, 0xa286, 0x0001,
-+ 0x00c0, 0x2aa0, 0x2300, 0x7ca8, 0xa400, 0x2018, 0xa102, 0x0040,
-+ 0x2a98, 0x0048, 0x2a7d, 0x0078, 0x2a9a, 0xa380, 0x0002, 0xa102,
-+ 0x00c8, 0x2a98, 0x6920, 0xa18c, 0xfcff, 0x6922, 0x0c7e, 0x7054,
-+ 0x2060, 0x6000, 0xa084, 0xefef, 0x6002, 0x6004, 0xa084, 0xffe5,
-+ 0x6006, 0x0c7f, 0x7e58, 0xa6b4, 0xfffb, 0x7e5a, 0x0078, 0x2a52,
-+ 0x0078, 0x2a03, 0x24a8, 0x7aa8, 0x00f0, 0x2a9a, 0x0078, 0x2a6b,
-+ 0xa284, 0x00f0, 0xa086, 0x0020, 0x00c0, 0x2b00, 0x8318, 0x8318,
-+ 0x2300, 0xa102, 0x0040, 0x2ab0, 0x0048, 0x2ab0, 0x0078, 0x2afd,
-+ 0xa286, 0x0023, 0x0040, 0x2a60, 0x681c, 0xa084, 0xfff1, 0x681e,
-+ 0x7e58, 0xa684, 0xfff1, 0xa085, 0x0010, 0x2030, 0x7e5a, 0x6008,
-+ 0xa085, 0x0010, 0x600a, 0x0c7e, 0x7054, 0x2060, 0x6004, 0x2008,
-+ 0x2c48, 0x0c7f, 0xa184, 0x0010, 0x0040, 0x2ad4, 0x1078, 0x35f8,
-+ 0x1078, 0x3429, 0x0078, 0x2ae3, 0x0c7e, 0x7054, 0x2060, 0x6004,
-+ 0x2008, 0x2c48, 0x0c7f, 0xa184, 0x0008, 0x0040, 0x2a51, 0x1078,
-+ 0x35f8, 0x1078, 0x331a, 0x88ff, 0x0040, 0x2a51, 0x789b, 0x0060,
-+ 0x2800, 0x78aa, 0xa6b5, 0x0004, 0x7e5a, 0xa684, 0x0400, 0x00c0,
-+ 0x2af7, 0x782b, 0x3008, 0x781b, 0x005b, 0x0078, 0x231a, 0x782b,
-+ 0x3008, 0x781b, 0x006d, 0x0078, 0x231a, 0x7aa8, 0x0078, 0x2a6b,
-+ 0x8318, 0x2300, 0xa102, 0x0040, 0x2b09, 0x0048, 0x2b09, 0x0078,
-+ 0x2a6b, 0xa284, 0x0080, 0x00c0, 0x34ce, 0x0078, 0x34c6, 0x0078,
-+ 0x34ce, 0x0078, 0x34be, 0x789b, 0x0018, 0x78a8, 0xa084, 0x00ff,
-+ 0xa08e, 0x0001, 0x0040, 0x2b1e, 0x1078, 0x22ac, 0x7aa8, 0xa294,
-+ 0x00ff, 0x78a8, 0xa084, 0x00ff, 0xa08a, 0x0004, 0x00c8, 0x34be,
-+ 0x0079, 0x2b2a, 0x34be, 0x3267, 0x34be, 0x33be, 0xa282, 0x0000,
-+ 0x00c0, 0x2b34, 0x1078, 0x22ac, 0x1078, 0x34d8, 0x782b, 0x3008,
-+ 0x781b, 0x006d, 0x0078, 0x231a, 0xa282, 0x0003, 0x00c0, 0x2b42,
-+ 0x1078, 0x22ac, 0xa484, 0x8000, 0x00c0, 0x2b65, 0x706c, 0xa005,
-+ 0x0040, 0x2b4c, 0x1078, 0x22ac, 0x6f14, 0x7782, 0xa7bc, 0x0f00,
-+ 0x1078, 0x35fc, 0x6008, 0xa085, 0x0021, 0x600a, 0x8738, 0xa784,
-+ 0x001f, 0x00c0, 0x2b50, 0x1078, 0x34dc, 0x706f, 0x0002, 0x2009,
-+ 0x4d38, 0x200b, 0x0009, 0x0078, 0x2b67, 0x1078, 0x34e8, 0x782b,
-+ 0x3008, 0x781b, 0x006d, 0x0078, 0x231a, 0xa282, 0x0004, 0x0050,
-+ 0x2b73, 0x1078, 0x22ac, 0x2300, 0x0079, 0x2b76, 0x2b79, 0x2c6c,
-+ 0x2c9f, 0xa286, 0x0003, 0x0040, 0x2b7f, 0x1078, 0x22ac, 0x2001,
-+ 0x0000, 0x007e, 0x68c0, 0xa005, 0x0040, 0x2b88, 0x7003, 0x0003,
-+ 0x68a0, 0xa084, 0x2000, 0x0040, 0x2b91, 0x6008, 0xa085, 0x0002,
-+ 0x600a, 0x007f, 0x703e, 0x7000, 0xa084, 0x0007, 0x0079, 0x2b98,
-+ 0x2343, 0x2ba2, 0x2ba2, 0x2d97, 0x2dd3, 0x2343, 0x2dd3, 0x2ba0,
-+ 0x1078, 0x22ac, 0xa684, 0x1000, 0x00c0, 0x2baa, 0x1078, 0x431b,
-+ 0x0040, 0x2c46, 0x7868, 0xa08c, 0x00ff, 0x0040, 0x2bf2, 0xa186,
-+ 0x0008, 0x00c0, 0x2bc1, 0x1078, 0x3217, 0x6008, 0xa084, 0xffef,
-+ 0x600a, 0x1078, 0x31b9, 0x0040, 0x2bf2, 0x1078, 0x431b, 0x0078,
-+ 0x2bd9, 0xa186, 0x0028, 0x00c0, 0x2bf2, 0x1078, 0x431b, 0x6008,
-+ 0xa084, 0xffef, 0x600a, 0x6018, 0xa005, 0x0040, 0x2bd9, 0x8001,
-+ 0x601a, 0xa005, 0x0040, 0x2bd9, 0x8001, 0xa005, 0x0040, 0x2bd9,
-+ 0x601e, 0x6820, 0xa084, 0x0001, 0x0040, 0x2343, 0x6820, 0xa084,
-+ 0xfffe, 0x6822, 0x7060, 0x0c7e, 0x2060, 0x6800, 0x6002, 0x0c7f,
-+ 0x6004, 0x6802, 0xa005, 0x2d00, 0x00c0, 0x2bef, 0x6002, 0x6006,
-+ 0x0078, 0x2343, 0x017e, 0x1078, 0x2cd0, 0x017f, 0xa684, 0xdf00,
-+ 0x681e, 0x682b, 0x0000, 0x6f14, 0x81ff, 0x0040, 0x2c46, 0xa186,
-+ 0x0002, 0x00c0, 0x2c3e, 0xa684, 0x0800, 0x00c0, 0x2c0f, 0xa684,
-+ 0x0060, 0x0040, 0x2c0f, 0x78d8, 0x7adc, 0x6832, 0x6a2e, 0x6820,
-+ 0xa084, 0x0800, 0x00c0, 0x2c46, 0x8717, 0xa294, 0x000f, 0x8213,
-+ 0x8213, 0x8213, 0xa290, 0x4f80, 0xa290, 0x0000, 0x221c, 0xa384,
-+ 0x0100, 0x00c0, 0x2c25, 0x0078, 0x2c2b, 0x8210, 0x2204, 0xa085,
-+ 0x0018, 0x2012, 0x8211, 0xa384, 0x0400, 0x0040, 0x2c38, 0x68a0,
-+ 0xa084, 0x0100, 0x00c0, 0x2c38, 0x1078, 0x2d4a, 0x0078, 0x2343,
-+ 0x6008, 0xa085, 0x0002, 0x600a, 0x0078, 0x2c46, 0xa186, 0x0018,
-+ 0x0040, 0x2c46, 0xa186, 0x0014, 0x0040, 0x2343, 0x6916, 0x6818,
-+ 0xa084, 0x8000, 0x0040, 0x2c4e, 0x703c, 0x681a, 0xa68c, 0xdf00,
-+ 0x691e, 0x1078, 0x3208, 0x1078, 0x3217, 0x00c0, 0x2c5b, 0x6008,
-+ 0xa084, 0xffef, 0x600a, 0x6820, 0xa084, 0x0001, 0x00c0, 0x2c64,
-+ 0x1078, 0x3201, 0x0078, 0x2c68, 0x7060, 0x2060, 0x6800, 0x6002,
-+ 0x1078, 0x1b8e, 0x0078, 0x2343, 0xa282, 0x0004, 0x0048, 0x2c72,
-+ 0x1078, 0x22ac, 0x2200, 0x0079, 0x2c75, 0x2c70, 0x2c79, 0x2c86,
-+ 0x2c79, 0x7000, 0xa086, 0x0005, 0x0040, 0x2c82, 0x1078, 0x34d8,
-+ 0x782b, 0x3008, 0x781b, 0x006d, 0x0078, 0x231a, 0x7890, 0x8007,
-+ 0x8001, 0xa084, 0x0007, 0xa080, 0x0018, 0x789a, 0x79a8, 0xa18c,
-+ 0x00ff, 0xa186, 0x0003, 0x0040, 0x2c9b, 0xa186, 0x0000, 0x0040,
-+ 0x2c9b, 0x0078, 0x34be, 0x781b, 0x006d, 0x0078, 0x231a, 0x6820,
-+ 0xa085, 0x0004, 0x6822, 0x82ff, 0x00c0, 0x2caa, 0x1078, 0x34d8,
-+ 0x0078, 0x2cb1, 0x8211, 0x0040, 0x2caf, 0x1078, 0x22ac, 0x1078,
-+ 0x34e8, 0x782b, 0x3008, 0x781b, 0x006d, 0x0078, 0x231a, 0x702c,
-+ 0x8003, 0x0048, 0x2cc1, 0x2019, 0x4955, 0x1078, 0x2137, 0x702f,
-+ 0x8000, 0x1078, 0x371d, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x2ccd,
-+ 0x0018, 0x2ccd, 0x791a, 0xa006, 0x007c, 0xa085, 0x0001, 0x007c,
-+ 0xa684, 0x0060, 0x00c0, 0x2cda, 0x6833, 0x0000, 0x682f, 0x0000,
-+ 0x0078, 0x2d49, 0xa684, 0x0800, 0x00c0, 0x2cf2, 0x68b4, 0xa084,
-+ 0x4800, 0xa635, 0xa684, 0x0800, 0x00c0, 0x2cf2, 0x6998, 0x6a94,
-+ 0x6932, 0x6a2e, 0x7000, 0xa086, 0x0006, 0x0040, 0x2cf1, 0x1078,
-+ 0x431b, 0x007c, 0xa684, 0x0020, 0x0040, 0x2d14, 0xa684, 0x4000,
-+ 0x0040, 0x2d00, 0x6833, 0x0000, 0x682f, 0x0000, 0x0078, 0x2cea,
-+ 0x68b4, 0xa084, 0x4800, 0xa635, 0xa684, 0x4000, 0x00c0, 0x2cfa,
-+ 0x703c, 0xa005, 0x00c0, 0x2d0e, 0x703f, 0x0015, 0x79d8, 0x7adc,
-+ 0x6932, 0x6a2e, 0x0078, 0x2cea, 0xa684, 0x4000, 0x0040, 0x2d1e,
-+ 0x6833, 0x0000, 0x682f, 0x0000, 0x0078, 0x2cea, 0x68b4, 0xa084,
-+ 0x4800, 0xa635, 0xa684, 0x4000, 0x00c0, 0x2d18, 0x703c, 0xa005,
-+ 0x00c0, 0x2d2c, 0x703f, 0x0015, 0x79d8, 0x7adc, 0x78d0, 0x80fb,
-+ 0x00c8, 0x2d33, 0x8000, 0xa084, 0x003f, 0xa108, 0xa291, 0x0000,
-+ 0x6932, 0x6a2e, 0x2100, 0xa205, 0x00c0, 0x2d40, 0x0078, 0x2cea,
-+ 0x7000, 0xa086, 0x0006, 0x0040, 0x2d49, 0x1078, 0x46d8, 0x0078,
-+ 0x2cea, 0x007c, 0x6008, 0xa085, 0x0200, 0x600a, 0xa384, 0x0200,
-+ 0x0040, 0x2d56, 0x6008, 0xa085, 0x0002, 0x600a, 0x681b, 0x0006,
-+ 0x688f, 0x0000, 0x6893, 0x0000, 0x6a2c, 0x6930, 0x6a3e, 0x6942,
-+ 0x682f, 0x0300, 0x6833, 0x0000, 0x6837, 0x2000, 0x6897, 0x0000,
-+ 0x689b, 0x0020, 0x68b3, 0x0000, 0x68af, 0x0000, 0x7000, 0x0079,
-+ 0x2d71, 0x2343, 0x2d7b, 0x2d84, 0x2d79, 0x2d79, 0x2d79, 0x2d79,
-+ 0x2d79, 0x1078, 0x22ac, 0x6820, 0xa084, 0x0001, 0x00c0, 0x2d84,
-+ 0x1078, 0x3201, 0x0078, 0x2d8a, 0x7060, 0x2c50, 0x2060, 0x6800,
-+ 0x6002, 0x2a60, 0x2021, 0x4d5a, 0x2404, 0xa005, 0x0040, 0x2d93,
-+ 0x2020, 0x0078, 0x2d8c, 0x2d22, 0x206b, 0x0000, 0x007c, 0x1078,
-+ 0x3208, 0x1078, 0x3217, 0x6008, 0xa084, 0xfdff, 0x600a, 0x682b,
-+ 0x0000, 0x789b, 0x000e, 0x6f14, 0x6817, 0x0002, 0x1078, 0x472f,
-+ 0xa684, 0x0800, 0x0040, 0x2db0, 0x691c, 0xa18d, 0x2000, 0x691e,
-+ 0x6818, 0xa084, 0x8000, 0x0040, 0x2dc0, 0x7868, 0xa08c, 0x00ff,
-+ 0x0040, 0x2dbe, 0x681b, 0x001e, 0x0078, 0x2dc0, 0x681b, 0x0000,
-+ 0x2021, 0x4d5a, 0x2404, 0xad06, 0x0040, 0x2dc7, 0x7460, 0x6800,
-+ 0x2022, 0x68c3, 0x0000, 0x6a3c, 0x6940, 0x6a2e, 0x6932, 0x1078,
-+ 0x1b8e, 0x0078, 0x2343, 0x1078, 0x2cd0, 0x682b, 0x0000, 0x789b,
-+ 0x000e, 0x6f14, 0x1078, 0x3723, 0xa08c, 0x00ff, 0x6916, 0x6818,
-+ 0xa084, 0x8000, 0x0040, 0x2de6, 0x703c, 0x681a, 0xa68c, 0xdf00,
-+ 0x691e, 0x706f, 0x0000, 0x0078, 0x2343, 0x7000, 0xa005, 0x00c0,
-+ 0x2df3, 0x0078, 0x2343, 0xa006, 0x1078, 0x431b, 0x6817, 0x0000,
-+ 0x681b, 0x0014, 0xa68c, 0xdf00, 0x691e, 0x682b, 0x0000, 0x6820,
-+ 0xa085, 0x00ff, 0x6822, 0x7000, 0x0079, 0x2e06, 0x2343, 0x2e10,
-+ 0x2e10, 0x2e12, 0x2e12, 0x2e12, 0x2e12, 0x2e0e, 0x1078, 0x22ac,
-+ 0x1078, 0x3217, 0x6008, 0xa084, 0xffef, 0x600a, 0x0078, 0x31d1,
-+ 0x2300, 0x0079, 0x2e1b, 0x2e1e, 0x2e20, 0x2e59, 0x1078, 0x22ac,
-+ 0x7000, 0x0079, 0x2e23, 0x2343, 0x2e2d, 0x2e2d, 0x2e48, 0x2e2d,
-+ 0x2e55, 0x2e48, 0x2e2b, 0x1078, 0x22ac, 0xa684, 0x0060, 0xa086,
-+ 0x0060, 0x00c0, 0x2e44, 0xa6b4, 0xffdf, 0xa6b4, 0xbfff, 0xa6b5,
-+ 0x2000, 0x7e5a, 0x681c, 0xa084, 0xffdf, 0x681e, 0x1078, 0x431b,
-+ 0x1078, 0x45ed, 0x0078, 0x3693, 0xa684, 0x2000, 0x0040, 0x2e37,
-+ 0x6818, 0xa084, 0x8000, 0x0040, 0x2e55, 0x681b, 0x0015, 0xa684,
-+ 0x4000, 0x0040, 0x2e55, 0x681b, 0x0007, 0x1078, 0x36a7, 0x0078,
-+ 0x231a, 0x1078, 0x22ac, 0x2300, 0x0079, 0x2e5e, 0x2e61, 0x2e63,
-+ 0x2e96, 0x1078, 0x22ac, 0x7000, 0x0079, 0x2e66, 0x2343, 0x2e70,
-+ 0x2e70, 0x2e8b, 0x2e70, 0x2e92, 0x2e8b, 0x2e6e, 0x1078, 0x22ac,
-+ 0xa684, 0x0060, 0xa086, 0x0060, 0x00c0, 0x2e87, 0xa6b4, 0xffbf,
-+ 0xa6b4, 0xbfff, 0xa6b5, 0x2000, 0x7e5a, 0x681c, 0xa084, 0xffbf,
-+ 0x681e, 0x1078, 0x431b, 0x1078, 0x45ed, 0x0078, 0x3693, 0xa684,
-+ 0x2000, 0x0040, 0x2e7a, 0x6818, 0xa084, 0x8000, 0x0040, 0x2e92,
-+ 0x681b, 0x0007, 0x781b, 0x00de, 0x0078, 0x231a, 0x6820, 0xa085,
-+ 0x0004, 0x6822, 0x1078, 0x365e, 0xa6b5, 0x0800, 0x1078, 0x34d8,
-+ 0x782b, 0x3008, 0x781b, 0x006d, 0x0078, 0x231a, 0x2300, 0x0079,
-+ 0x2ea9, 0x2eac, 0x2eae, 0x2eb0, 0x1078, 0x22ac, 0x1078, 0x22ac,
-+ 0xa684, 0x0400, 0x00c0, 0x2ed9, 0x79e4, 0xa184, 0x0020, 0x0040,
-+ 0x2ec0, 0x78ec, 0xa084, 0x0003, 0x0040, 0x2ec0, 0x782b, 0x3009,
-+ 0x789b, 0x0060, 0x78ab, 0x0000, 0xa684, 0xfffb, 0x785a, 0x79e4,
-+ 0xa184, 0x0020, 0x0040, 0x2ed1, 0x78ec, 0xa084, 0x0003, 0x00c0,
-+ 0x2ed5, 0x2001, 0x0014, 0x0078, 0x2b81, 0xa184, 0x0007, 0x0079,
-+ 0x2f11, 0x7a90, 0xa294, 0x0007, 0x789b, 0x0060, 0x79a8, 0x81ff,
-+ 0x0040, 0x2f0f, 0x789b, 0x0010, 0x7ba8, 0xa384, 0x0001, 0x00c0,
-+ 0x2f00, 0x7ba8, 0x7ba8, 0xa386, 0x0001, 0x00c0, 0x2ef3, 0x2009,
-+ 0xfff7, 0x0078, 0x2ef9, 0xa386, 0x0003, 0x00c0, 0x2f00, 0x2009,
-+ 0xffef, 0x0c7e, 0x7054, 0x2060, 0x6004, 0xa104, 0x6006, 0x0c7f,
-+ 0x789b, 0x0060, 0x78ab, 0x0000, 0xa684, 0xfffb, 0x785a, 0x782b,
-+ 0x3009, 0x6920, 0xa18c, 0xfdff, 0xa18c, 0xfeff, 0x6922, 0x0078,
-+ 0x3693, 0x2850, 0x285b, 0x2f1b, 0x2f23, 0x2f19, 0x2f19, 0x2f19,
-+ 0x3693, 0x1078, 0x22ac, 0x6920, 0xa18c, 0xfdff, 0xa18c, 0xfeff,
-+ 0x6922, 0x0078, 0x369d, 0x6920, 0xa18c, 0xfdff, 0xa18c, 0xfeff,
-+ 0x6922, 0x0078, 0x3693, 0x79e4, 0xa184, 0x0030, 0x0040, 0x2f35,
-+ 0x78ec, 0xa084, 0x0003, 0x00c0, 0x2f57, 0x7000, 0xa086, 0x0004,
-+ 0x00c0, 0x2f4f, 0x706c, 0xa086, 0x0002, 0x00c0, 0x2f45, 0x2011,
-+ 0x0002, 0x2019, 0x0000, 0x0078, 0x26fc, 0x706c, 0xa086, 0x0006,
-+ 0x0040, 0x2f3f, 0x706c, 0xa086, 0x0004, 0x0040, 0x2f3f, 0x6818,
-+ 0xa085, 0x8000, 0x681a, 0x2001, 0x0014, 0x0078, 0x2b81, 0xa184,
-+ 0x0007, 0x0079, 0x2f5b, 0x3693, 0x3693, 0x2f63, 0x3693, 0x36f8,
-+ 0x36f8, 0x3693, 0x3693, 0xa684, 0x0400, 0x00c0, 0x2fa6, 0x6820,
-+ 0xa084, 0x0001, 0x0040, 0x369d, 0xa68c, 0x0060, 0xa684, 0x0060,
-+ 0x0040, 0x2f78, 0xa086, 0x0060, 0x00c0, 0x2f78, 0xa18d, 0x4000,
-+ 0xa18c, 0xfffb, 0x795a, 0x69b6, 0x789b, 0x0060, 0x78ab, 0x0000,
-+ 0x789b, 0x0061, 0x6818, 0xa085, 0x8000, 0x681a, 0x78aa, 0x8008,
-+ 0x810c, 0x0040, 0x3230, 0xa18c, 0x00f8, 0x00c0, 0x3230, 0x157e,
-+ 0x137e, 0x147e, 0x20a1, 0x012c, 0x789b, 0x0000, 0x8000, 0x80ac,
-+ 0xad80, 0x000b, 0x2098, 0x53a6, 0x147f, 0x137f, 0x157f, 0x6814,
-+ 0x8007, 0x789b, 0x0080, 0x78aa, 0x0078, 0x369d, 0x6818, 0xa084,
-+ 0x8000, 0x0040, 0x2fad, 0x681b, 0x0008, 0x781b, 0x00d4, 0x0078,
-+ 0x231a, 0x2300, 0x0079, 0x2fb4, 0x2fb9, 0x3054, 0x2fb7, 0x1078,
-+ 0x22ac, 0x7000, 0xa084, 0x0007, 0x0079, 0x2fbe, 0x2343, 0x2fc8,
-+ 0x2ffd, 0x2fd3, 0x2fc6, 0x2343, 0x2fc6, 0x2fc6, 0x1078, 0x22ac,
-+ 0x681c, 0xa084, 0x2000, 0x0040, 0x2fe1, 0x6008, 0xa085, 0x0002,
-+ 0x600a, 0x0078, 0x2fe1, 0x68c0, 0xa005, 0x00c0, 0x2ffd, 0x6920,
-+ 0xa18d, 0x0001, 0x6922, 0x68c3, 0x0001, 0x6800, 0x706a, 0x0078,
-+ 0x2ff7, 0x6920, 0xa18d, 0x0001, 0x6922, 0x6800, 0x6006, 0xa005,
-+ 0x00c0, 0x2feb, 0x6002, 0x681c, 0xa084, 0x000e, 0x0040, 0x2ff7,
-+ 0x7014, 0x68ba, 0x7130, 0xa188, 0x7000, 0x0078, 0x2ff9, 0x2009,
-+ 0x7100, 0x2104, 0x6802, 0x2d0a, 0x7162, 0x6eb6, 0xa684, 0x0060,
-+ 0x0040, 0x3052, 0xa684, 0x0800, 0x00c0, 0x3011, 0xa684, 0x7fff,
-+ 0x68b6, 0x6894, 0x68a6, 0x6898, 0x68aa, 0x1078, 0x431b, 0x0078,
-+ 0x3052, 0xa684, 0x0020, 0x0040, 0x3026, 0x68c0, 0xa005, 0x0040,
-+ 0x301d, 0x1078, 0x472f, 0x0078, 0x3020, 0xa006, 0x1078, 0x46d8,
-+ 0x79d8, 0x7adc, 0x69aa, 0x6aa6, 0x0078, 0x302c, 0x1078, 0x3609,
-+ 0x69aa, 0x6aa6, 0x1078, 0x46d8, 0xa684, 0x8000, 0x0040, 0x3052,
-+ 0xa684, 0x7fff, 0x68b6, 0x789b, 0x0076, 0x1078, 0x3723, 0x2010,
-+ 0x1078, 0x3723, 0x2008, 0xa684, 0x0020, 0x00c0, 0x304a, 0x1078,
-+ 0x3723, 0x801b, 0x00c8, 0x3045, 0x8000, 0xa084, 0x003f, 0xa108,
-+ 0xa291, 0x0000, 0x6b98, 0x2100, 0xa302, 0x68b2, 0x6b94, 0x2200,
-+ 0xa303, 0x68ae, 0x0078, 0x2343, 0x0078, 0x34ce, 0x7037, 0x0000,
-+ 0xa282, 0x0006, 0x0050, 0x305e, 0x1078, 0x22ac, 0x7000, 0xa084,
-+ 0x0007, 0x10c0, 0x37c7, 0x2300, 0x0079, 0x3066, 0x3069, 0x308f,
-+ 0x30a1, 0x2200, 0x0079, 0x306c, 0x308d, 0x34ce, 0x3072, 0x308d,
-+ 0x30bb, 0x30fa, 0x7003, 0x0005, 0x2001, 0x7210, 0x2068, 0x704a,
-+ 0x157e, 0x20a9, 0x0031, 0x2003, 0x0000, 0x8000, 0x0070, 0x3082,
-+ 0x0078, 0x307b, 0x157f, 0x6817, 0x0000, 0x68b7, 0x0700, 0x6823,
-+ 0x0800, 0x6827, 0x0003, 0x0078, 0x34be, 0x1078, 0x22ac, 0x7003,
-+ 0x0005, 0x2001, 0x7210, 0x2068, 0x704a, 0x7036, 0x2200, 0x0079,
-+ 0x3099, 0x34ce, 0x309f, 0x309f, 0x30bb, 0x309f, 0x34ce, 0x1078,
-+ 0x22ac, 0x7003, 0x0005, 0x2001, 0x7210, 0x2068, 0x704a, 0x7036,
-+ 0x2200, 0x0079, 0x30ab, 0x30b3, 0x30b1, 0x30b1, 0x30b3, 0x30b1,
-+ 0x30b3, 0x1078, 0x22ac, 0x1078, 0x34e8, 0x782b, 0x3008, 0x781b,
-+ 0x006d, 0x0078, 0x231a, 0x7003, 0x0002, 0x7a80, 0xa294, 0x0f00,
-+ 0x789b, 0x0018, 0x7ca8, 0xa484, 0x001f, 0xa215, 0x2069, 0x7100,
-+ 0x2d04, 0x2d08, 0x7162, 0x2068, 0xa005, 0x0040, 0x30d6, 0x6814,
-+ 0xa206, 0x0040, 0x30ef, 0x6800, 0x0078, 0x30c9, 0x7003, 0x0005,
-+ 0x2001, 0x7210, 0x2068, 0x704a, 0x7036, 0x157e, 0x20a9, 0x0031,
-+ 0x2003, 0x0000, 0x8000, 0x0070, 0x30e7, 0x0078, 0x30e0, 0x157f,
-+ 0x6a16, 0x68b7, 0x0700, 0x6823, 0x0800, 0x6827, 0x0003, 0x6eb4,
-+ 0x7e5a, 0x6820, 0xa084, 0x0c00, 0x0040, 0x3146, 0x1078, 0x34e0,
-+ 0x0078, 0x3146, 0x7003, 0x0002, 0x7a80, 0xa294, 0x0f00, 0x789b,
-+ 0x0018, 0x7ca8, 0xa484, 0x001f, 0xa215, 0x79a8, 0x79a8, 0xa18c,
-+ 0x00ff, 0xa1e8, 0x7000, 0x2d04, 0x2d08, 0x7162, 0x2068, 0xa005,
-+ 0x0040, 0x3119, 0x6814, 0xa206, 0x0040, 0x3131, 0x6800, 0x0078,
-+ 0x310c, 0x7003, 0x0005, 0x2001, 0x7210, 0x2068, 0x704a, 0x157e,
-+ 0x20a9, 0x0031, 0x2003, 0x0000, 0x8000, 0x0070, 0x3129, 0x0078,
-+ 0x3122, 0x157f, 0x6a16, 0x68b7, 0x0700, 0x6823, 0x0800, 0x6827,
-+ 0x0003, 0x6eb4, 0x7e5a, 0x6820, 0xa084, 0x0c00, 0x0040, 0x3146,
-+ 0xa084, 0x0800, 0x0040, 0x3140, 0x1078, 0x34e4, 0x0078, 0x3146,
-+ 0x1078, 0x34e0, 0x708b, 0x0000, 0x0078, 0x3146, 0x027e, 0x8207,
-+ 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa080, 0x4f80, 0x2060,
-+ 0x7056, 0x6000, 0x705a, 0x6004, 0x705e, 0xa684, 0x0060, 0x0040,
-+ 0x319e, 0x6b98, 0x6c94, 0x69ac, 0x68b0, 0xa105, 0x00c0, 0x3180,
-+ 0x7bd2, 0x7bda, 0x7cd6, 0x7cde, 0xa6b4, 0xb7ff, 0x7e5a, 0xa684,
-+ 0x0060, 0xa086, 0x0060, 0x0040, 0x319e, 0x68c0, 0xa005, 0x0040,
-+ 0x3179, 0x7003, 0x0003, 0x682b, 0x0000, 0x1078, 0x45dc, 0x0078,
-+ 0x317b, 0x1078, 0x45ed, 0xa6b5, 0x2000, 0x7e5a, 0x0078, 0x319e,
-+ 0x68b0, 0xa31a, 0x2100, 0xa423, 0x2400, 0xa305, 0x0040, 0x319e,
-+ 0x7bd2, 0x7bda, 0x7cd6, 0x7cde, 0x68b0, 0xa6b4, 0xbfff, 0x7e5a,
-+ 0x007e, 0x68c0, 0xa005, 0x007f, 0x0040, 0x319c, 0x7003, 0x0003,
-+ 0x1078, 0x45dc, 0x0078, 0x319e, 0x1078, 0x4638, 0x077f, 0x1078,
-+ 0x35fc, 0x2009, 0x006d, 0xa684, 0x0004, 0x0040, 0x31ab, 0x782b,
-+ 0x3008, 0x2009, 0x006d, 0x791a, 0x2d00, 0x704a, 0x8207, 0xa084,
-+ 0x000f, 0x8003, 0x8003, 0x8003, 0xa080, 0x4f80, 0x2048, 0x0078,
-+ 0x231a, 0x6020, 0xa005, 0x0040, 0x31c5, 0x8001, 0x6022, 0x6008,
-+ 0xa085, 0x0008, 0x600a, 0x7010, 0x6026, 0x007c, 0xa006, 0x1078,
-+ 0x431b, 0x6817, 0x0000, 0x681b, 0x0001, 0x6823, 0x0040, 0x681f,
-+ 0x0100, 0x7000, 0xa084, 0x0007, 0x0079, 0x31d6, 0x2343, 0x31e0,
-+ 0x31e0, 0x31fd, 0x31e8, 0x31e6, 0x31e8, 0x31de, 0x1078, 0x22ac,
-+ 0x1078, 0x3208, 0x1078, 0x3201, 0x1078, 0x1b8e, 0x0078, 0x2343,
-+ 0x706c, 0x706f, 0x0000, 0x7093, 0x0000, 0x0079, 0x31ef, 0x31f9,
-+ 0x31f9, 0x31f7, 0x31f7, 0x31f7, 0x31f9, 0x31f7, 0x31f9, 0x0079,
-+ 0x2715, 0x706f, 0x0000, 0x0078, 0x2343, 0x681b, 0x0000, 0x0078,
-+ 0x2d97, 0x6800, 0xa005, 0x00c0, 0x3206, 0x6002, 0x6006, 0x007c,
-+ 0x6010, 0xa005, 0x0040, 0x3211, 0x8001, 0x00d0, 0x3211, 0x1078,
-+ 0x22ac, 0x6012, 0x6008, 0xa084, 0xffef, 0x600a, 0x007c, 0x6018,
-+ 0xa005, 0x0040, 0x321d, 0x8001, 0x601a, 0x007c, 0x1078, 0x371d,
-+ 0x681b, 0x0018, 0x0078, 0x3254, 0x1078, 0x371d, 0x681b, 0x0019,
-+ 0x0078, 0x3254, 0x1078, 0x371d, 0x681b, 0x001a, 0x0078, 0x3254,
-+ 0x1078, 0x371d, 0x681b, 0x0003, 0x0078, 0x3254, 0x7780, 0x1078,
-+ 0x35fc, 0x7184, 0xa18c, 0x00ff, 0xa1e8, 0x7000, 0x2d04, 0x2d08,
-+ 0x2068, 0xa005, 0x00c0, 0x3246, 0x0078, 0x2343, 0x6814, 0x7280,
-+ 0xa206, 0x0040, 0x324e, 0x6800, 0x0078, 0x323f, 0x6800, 0x200a,
-+ 0x681b, 0x0005, 0x708b, 0x0000, 0x1078, 0x3208, 0x6820, 0xa084,
-+ 0x0001, 0x00c0, 0x325d, 0x1078, 0x3201, 0x1078, 0x3217, 0x681f,
-+ 0x0000, 0x6823, 0x0020, 0x1078, 0x1b8e, 0x0078, 0x2343, 0xa282,
-+ 0x0003, 0x00c0, 0x34be, 0x7da8, 0xa5ac, 0x00ff, 0x7ca8, 0xa4a4,
-+ 0x00ff, 0x6920, 0xa18d, 0x0080, 0x6922, 0xa184, 0x0100, 0x0040,
-+ 0x32cb, 0xa18c, 0xfeff, 0x6922, 0xa4a4, 0x00ff, 0x0040, 0x32b5,
-+ 0xa482, 0x000c, 0x0048, 0x3288, 0x0040, 0x3288, 0x2021, 0x000c,
-+ 0x852b, 0x852b, 0x1078, 0x3577, 0x0040, 0x3292, 0x1078, 0x3384,
-+ 0x0078, 0x32be, 0x1078, 0x3532, 0x0c7e, 0x2960, 0x6004, 0xa084,
-+ 0xfff5, 0x6006, 0x1078, 0x33ab, 0x0c7f, 0x6920, 0xa18d, 0x0100,
-+ 0x6922, 0x7e58, 0xa6b5, 0x0004, 0x7e5a, 0xa684, 0x0400, 0x00c0,
-+ 0x32af, 0x782b, 0x3008, 0x781b, 0x005b, 0x0078, 0x231a, 0x782b,
-+ 0x3008, 0x781b, 0x006d, 0x0078, 0x231a, 0x0c7e, 0x2960, 0x6004,
-+ 0xa084, 0xfff5, 0x6006, 0x1078, 0x33ab, 0x0c7f, 0x7e58, 0xa684,
-+ 0x0400, 0x00c0, 0x32c7, 0x781b, 0x005d, 0x0078, 0x231a, 0x781b,
-+ 0x006d, 0x0078, 0x231a, 0x0c7e, 0x7054, 0x2060, 0x6100, 0xa18c,
-+ 0x1000, 0x0040, 0x330b, 0x6208, 0x8217, 0xa294, 0x00ff, 0xa282,
-+ 0x000c, 0x0048, 0x32df, 0x0040, 0x32df, 0x2011, 0x000c, 0x2400,
-+ 0xa202, 0x00c8, 0x32e4, 0x2220, 0x6208, 0xa294, 0x00ff, 0x7018,
-+ 0xa086, 0x0028, 0x00c0, 0x32f4, 0xa282, 0x0019, 0x00c8, 0x32fa,
-+ 0x2011, 0x0019, 0x0078, 0x32fa, 0xa282, 0x000c, 0x00c8, 0x32fa,
-+ 0x2011, 0x000c, 0x2200, 0xa502, 0x00c8, 0x32ff, 0x2228, 0x1078,
-+ 0x3536, 0x852b, 0x852b, 0x1078, 0x3577, 0x0040, 0x330b, 0x1078,
-+ 0x3384, 0x0078, 0x330f, 0x1078, 0x3532, 0x1078, 0x33ab, 0x7858,
-+ 0xa085, 0x0004, 0x785a, 0x0c7f, 0x782b, 0x3008, 0x781b, 0x006d,
-+ 0x0078, 0x231a, 0x0c7e, 0x2960, 0x6000, 0xa084, 0x1000, 0x00c0,
-+ 0x3332, 0x6010, 0xa084, 0x000f, 0x00c0, 0x332c, 0x6104, 0xa18c,
-+ 0xfff5, 0x6106, 0x0c7f, 0x007c, 0x2011, 0x0032, 0x2019, 0x0000,
-+ 0x0078, 0x3359, 0x68a0, 0xa084, 0x0200, 0x00c0, 0x332c, 0x6208,
-+ 0xa294, 0x00ff, 0x7018, 0xa086, 0x0028, 0x00c0, 0x3347, 0xa282,
-+ 0x0019, 0x00c8, 0x334d, 0x2011, 0x0019, 0x0078, 0x334d, 0xa282,
-+ 0x000c, 0x00c8, 0x334d, 0x2011, 0x000c, 0x6308, 0x831f, 0xa39c,
-+ 0x00ff, 0xa382, 0x000c, 0x0048, 0x3359, 0x0040, 0x3359, 0x2019,
-+ 0x000c, 0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab, 0x0001, 0x7aaa,
-+ 0x7baa, 0xa8c0, 0x0005, 0x6820, 0xa085, 0x0100, 0x6822, 0x0c7f,
-+ 0x007c, 0x0c7e, 0x2960, 0xa18c, 0xfff5, 0x6106, 0x2011, 0x0032,
-+ 0x2019, 0x0000, 0x0078, 0x3374, 0x78ab, 0x0001, 0x78ab, 0x0003,
-+ 0x78ab, 0x0001, 0x7aaa, 0x7baa, 0xa8c0, 0x0005, 0x6820, 0xa085,
-+ 0x0100, 0x6822, 0x0c7f, 0x007c, 0x0c7e, 0x7154, 0x2160, 0x1078,
-+ 0x338b, 0x0c7f, 0x007c, 0x2008, 0xa084, 0xfff0, 0xa425, 0x7c86,
-+ 0x6018, 0x789a, 0x7cae, 0x6412, 0x78a4, 0xa084, 0xfff8, 0xa18c,
-+ 0x0007, 0xa105, 0x78a6, 0x6016, 0x788a, 0xa4a4, 0x000f, 0x8427,
-+ 0x8204, 0x8004, 0xa084, 0x00ff, 0xa405, 0x600e, 0x6004, 0xa084,
-+ 0xfff5, 0x6006, 0x007c, 0x0c7e, 0x7054, 0x2060, 0x1078, 0x33b2,
-+ 0x0c7f, 0x007c, 0x6018, 0x789a, 0x78a4, 0xa084, 0xfff0, 0x78a6,
-+ 0x6012, 0x7884, 0xa084, 0xfff0, 0x7886, 0x007c, 0xa282, 0x0002,
-+ 0x00c0, 0x34be, 0x7aa8, 0x6920, 0xa18d, 0x0080, 0x6922, 0xa184,
-+ 0x0200, 0x0040, 0x3407, 0xa18c, 0xfdff, 0x6922, 0xa294, 0x00ff,
-+ 0xa282, 0x0002, 0x00c8, 0x34be, 0x1078, 0x3450, 0x1078, 0x33ab,
-+ 0xa980, 0x0001, 0x200c, 0x1078, 0x35f8, 0x1078, 0x331a, 0x88ff,
-+ 0x0040, 0x33fa, 0x789b, 0x0060, 0x2800, 0x78aa, 0x7e58, 0xa6b5,
-+ 0x0004, 0x7e5a, 0xa684, 0x0400, 0x00c0, 0x33f4, 0x782b, 0x3008,
-+ 0x781b, 0x005b, 0x0078, 0x231a, 0x782b, 0x3008, 0x781b, 0x006d,
-+ 0x0078, 0x231a, 0x7e58, 0xa684, 0x0400, 0x00c0, 0x3403, 0x781b,
-+ 0x005d, 0x0078, 0x231a, 0x781b, 0x006d, 0x0078, 0x231a, 0xa282,
-+ 0x0002, 0x00c8, 0x340f, 0xa284, 0x0001, 0x0040, 0x3419, 0x7154,
-+ 0xa188, 0x0000, 0x210c, 0xa18c, 0x2000, 0x00c0, 0x3419, 0x2011,
-+ 0x0000, 0x1078, 0x3524, 0x1078, 0x3450, 0x1078, 0x33ab, 0x7858,
-+ 0xa085, 0x0004, 0x785a, 0x782b, 0x3008, 0x781b, 0x006d, 0x0078,
-+ 0x231a, 0x0c7e, 0x027e, 0x2960, 0x6000, 0x2011, 0x0001, 0xa084,
-+ 0x2000, 0x00c0, 0x3440, 0x6014, 0xa084, 0x0040, 0x00c0, 0x343e,
-+ 0xa18c, 0xffef, 0x6106, 0xa006, 0x0078, 0x344d, 0x2011, 0x0000,
-+ 0x78ab, 0x0001, 0x78ab, 0x0002, 0x78ab, 0x0003, 0x7aaa, 0xa8c0,
-+ 0x0004, 0x6820, 0xa085, 0x0200, 0x6822, 0x027f, 0x0c7f, 0x007c,
-+ 0x0c7e, 0x7054, 0x2060, 0x1078, 0x3457, 0x0c7f, 0x007c, 0x82ff,
-+ 0x0040, 0x345c, 0x2011, 0x0040, 0x6018, 0xa080, 0x0002, 0x789a,
-+ 0x78a4, 0xa084, 0xffbf, 0xa205, 0x78a6, 0x788a, 0x6016, 0x6004,
-+ 0xa084, 0xffef, 0x6006, 0x007c, 0x007e, 0x7000, 0xa086, 0x0003,
-+ 0x0040, 0x3475, 0x007f, 0x0078, 0x3478, 0x007f, 0x0078, 0x34ba,
-+ 0xa684, 0x0020, 0x0040, 0x34ba, 0x7888, 0xa084, 0x0040, 0x0040,
-+ 0x34ba, 0x7bb8, 0xa384, 0x003f, 0x831b, 0x00c8, 0x3488, 0x8000,
-+ 0xa005, 0x0040, 0x349e, 0x831b, 0x00c8, 0x3491, 0x8001, 0x0040,
-+ 0x34b6, 0xa684, 0x4000, 0x0040, 0x349e, 0x78b8, 0x801b, 0x00c8,
-+ 0x349a, 0x8000, 0xa084, 0x003f, 0x00c0, 0x34b6, 0xa6b4, 0xbfff,
-+ 0x7e5a, 0x79d8, 0x7adc, 0x2001, 0x0001, 0xa108, 0x00c8, 0x34aa,
-+ 0xa291, 0x0000, 0x79d2, 0x79da, 0x7ad6, 0x7ade, 0x1078, 0x46d8,
-+ 0x781b, 0x006c, 0x1078, 0x4568, 0x0078, 0x231a, 0x781b, 0x006c,
-+ 0x0078, 0x231a, 0x781b, 0x006d, 0x0078, 0x231a, 0x1078, 0x34ec,
-+ 0x782b, 0x3008, 0x781b, 0x006d, 0x0078, 0x231a, 0x1078, 0x34d8,
-+ 0x782b, 0x3008, 0x781b, 0x006d, 0x0078, 0x231a, 0x6827, 0x0002,
-+ 0x1078, 0x34e0, 0x782b, 0x3008, 0x781b, 0x006d, 0x0078, 0x231a,
-+ 0x2001, 0x0005, 0x0078, 0x34ee, 0x2001, 0x000c, 0x0078, 0x34ee,
-+ 0x2001, 0x0006, 0x0078, 0x34ee, 0x2001, 0x000d, 0x0078, 0x34ee,
-+ 0x2001, 0x0009, 0x0078, 0x34ee, 0x2001, 0x0007, 0x789b, 0x0010,
-+ 0x78aa, 0x789b, 0x0060, 0x78ab, 0x0001, 0xa6b5, 0x0004, 0x7e5a,
-+ 0x007c, 0x077e, 0x873f, 0xa7bc, 0x000f, 0x873b, 0x873b, 0x8703,
-+ 0xa0e0, 0x4f80, 0xa7b8, 0x0020, 0x7f9a, 0x79a4, 0xa184, 0x000f,
-+ 0x0040, 0x3512, 0xa184, 0xfff0, 0x78a6, 0x6012, 0x6004, 0xa085,
-+ 0x0008, 0x6006, 0x8738, 0x8738, 0x7f9a, 0x79a4, 0xa184, 0x0040,
-+ 0x0040, 0x3522, 0xa184, 0xffbf, 0x78a6, 0x6016, 0x6004, 0xa085,
-+ 0x0010, 0x6006, 0x077f, 0x007c, 0x789b, 0x0010, 0x78ab, 0x0001,
-+ 0x78ab, 0x0002, 0x78ab, 0x0003, 0x7aaa, 0x789b, 0x0060, 0x78ab,
-+ 0x0004, 0x007c, 0x2021, 0x0000, 0x2029, 0x0032, 0x789b, 0x0010,
-+ 0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab, 0x0001, 0x7daa, 0x7caa,
-+ 0x789b, 0x0060, 0x78ab, 0x0005, 0x007c, 0x157e, 0x8007, 0xa084,
-+ 0x00ff, 0x8003, 0x8003, 0xa080, 0x0020, 0x789a, 0x79a4, 0xa18c,
-+ 0xfff0, 0x2001, 0x4d46, 0x2004, 0xa082, 0x0028, 0x0040, 0x3560,
-+ 0x2021, 0x35df, 0x2019, 0x0014, 0x20a9, 0x000c, 0x0078, 0x3566,
-+ 0x2021, 0x35eb, 0x2019, 0x0019, 0x20a9, 0x000d, 0x2011, 0x0064,
-+ 0x2404, 0xa084, 0xfff0, 0xa106, 0x0040, 0x3575, 0x8420, 0x2300,
-+ 0xa210, 0x0070, 0x3575, 0x0078, 0x3568, 0x157f, 0x007c, 0x157e,
-+ 0x2009, 0x4d46, 0x210c, 0xa182, 0x0032, 0x0048, 0x358b, 0x0040,
-+ 0x358f, 0x2009, 0x35d1, 0x2019, 0x0011, 0x20a9, 0x000e, 0x2011,
-+ 0x0032, 0x0078, 0x35a1, 0xa182, 0x0028, 0x0040, 0x3599, 0x2009,
-+ 0x35df, 0x2019, 0x0014, 0x20a9, 0x000c, 0x2011, 0x0064, 0x0078,
-+ 0x35a1, 0x2009, 0x35eb, 0x2019, 0x0019, 0x20a9, 0x000d, 0x2011,
-+ 0x0064, 0x2200, 0xa502, 0x0040, 0x35b1, 0x0048, 0x35b1, 0x8108,
-+ 0x2300, 0xa210, 0x0070, 0x35ae, 0x0078, 0x35a1, 0x157f, 0xa006,
-+ 0x007c, 0x157f, 0xa582, 0x0064, 0x00c8, 0x35c0, 0x7808, 0xa085,
-+ 0x0070, 0x780a, 0x7044, 0xa085, 0x0070, 0x7046, 0x0078, 0x35c0,
-+ 0x78ec, 0xa084, 0x0300, 0x0040, 0x35ce, 0x2104, 0xa09e, 0x1201,
-+ 0x00c0, 0x35ce, 0x2001, 0x2101, 0x0078, 0x35cf, 0x2104, 0xa005,
-+ 0x007c, 0x1201, 0x3002, 0x3202, 0x4203, 0x4403, 0x5404, 0x5604,
-+ 0x6605, 0x6805, 0x7806, 0x7a06, 0x0c07, 0x0c07, 0x0e07, 0x3202,
-+ 0x4202, 0x5202, 0x6202, 0x7202, 0x6605, 0x7605, 0x7805, 0x7a05,
-+ 0x7c05, 0x7e05, 0x7f05, 0x2202, 0x3202, 0x4202, 0x5202, 0x5404,
-+ 0x6404, 0x7404, 0x7604, 0x7804, 0x7a04, 0x7c04, 0x7e04, 0x7f04,
-+ 0x789b, 0x0010, 0xa046, 0x007c, 0xa784, 0x0f00, 0x800b, 0xa784,
-+ 0x001f, 0x8003, 0x8003, 0x8003, 0x8003, 0xa105, 0xa0e0, 0x5000,
-+ 0x007c, 0x79d8, 0x7adc, 0x78d0, 0x801b, 0x00c8, 0x3610, 0x8000,
-+ 0xa084, 0x003f, 0xa108, 0xa291, 0x0000, 0x007c, 0x0f7e, 0x2079,
-+ 0x0100, 0x2009, 0x4d40, 0x2091, 0x8000, 0x2104, 0x0079, 0x3620,
-+ 0x3656, 0x362a, 0x362a, 0x362a, 0x362a, 0x362a, 0x362a, 0x365a,
-+ 0x1078, 0x22ac, 0x784b, 0x0004, 0x7848, 0xa084, 0x0004, 0x00c0,
-+ 0x362c, 0x784b, 0x0008, 0x7848, 0xa084, 0x0008, 0x00c0, 0x3633,
-+ 0x68b4, 0xa085, 0x4000, 0x68b6, 0x7858, 0xa085, 0x4000, 0x785a,
-+ 0x7830, 0xa084, 0x0080, 0x00c0, 0x3656, 0x0018, 0x3656, 0x681c,
-+ 0xa084, 0x0020, 0x00c0, 0x3654, 0x0e7e, 0x2071, 0x4d40, 0x1078,
-+ 0x36a7, 0x0e7f, 0x0078, 0x3656, 0x781b, 0x00de, 0x2091, 0x8001,
-+ 0x0f7f, 0x007c, 0x1078, 0x3886, 0x0078, 0x3656, 0x0c7e, 0x6814,
-+ 0x8007, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa0e0, 0x4f80,
-+ 0x6004, 0xa084, 0x000a, 0x00c0, 0x3691, 0x6108, 0xa194, 0xff00,
-+ 0x0040, 0x3691, 0xa18c, 0x00ff, 0x2001, 0x0019, 0xa106, 0x0040,
-+ 0x3680, 0x2001, 0x0032, 0xa106, 0x0040, 0x3684, 0x0078, 0x3688,
-+ 0x2009, 0x0020, 0x0078, 0x368a, 0x2009, 0x003f, 0x0078, 0x368a,
-+ 0x2011, 0x0000, 0x2100, 0xa205, 0x600a, 0x6004, 0xa085, 0x0002,
-+ 0x6006, 0x0c7f, 0x007c, 0x781b, 0x006d, 0x0078, 0x231a, 0x782b,
-+ 0x3008, 0x781b, 0x006d, 0x0078, 0x231a, 0x781b, 0x005d, 0x0078,
-+ 0x231a, 0x782b, 0x3008, 0x781b, 0x005b, 0x0078, 0x231a, 0x2009,
-+ 0x4d20, 0x210c, 0xa186, 0x0000, 0x0040, 0x36bb, 0xa186, 0x0001,
-+ 0x0040, 0x36be, 0x2009, 0x4d38, 0x200b, 0x000b, 0x706f, 0x0001,
-+ 0x781b, 0x0048, 0x007c, 0x781b, 0x00d8, 0x007c, 0x2009, 0x4d38,
-+ 0x200b, 0x000a, 0x007c, 0x2009, 0x4d20, 0x210c, 0xa186, 0x0000,
-+ 0x0040, 0x36de, 0xa186, 0x0001, 0x0040, 0x36d8, 0x2009, 0x4d38,
-+ 0x200b, 0x000b, 0x706f, 0x0001, 0x781b, 0x0048, 0x0078, 0x231a,
-+ 0x2009, 0x4d38, 0x200b, 0x000a, 0x0078, 0x231a, 0x782b, 0x3008,
-+ 0x781b, 0x00d8, 0x0078, 0x231a, 0x781b, 0x00de, 0x0078, 0x231a,
-+ 0x782b, 0x3008, 0x781b, 0x00de, 0x0078, 0x231a, 0x781b, 0x009c,
-+ 0x0078, 0x231a, 0x782b, 0x3008, 0x781b, 0x009c, 0x0078, 0x231a,
-+ 0x6818, 0xa084, 0x8000, 0x0040, 0x36ff, 0x681b, 0x001d, 0x706f,
-+ 0x0001, 0x781b, 0x0048, 0x0078, 0x231a, 0x007e, 0x7830, 0xa084,
-+ 0x00c0, 0x00c0, 0x371b, 0x7808, 0xa084, 0xfffc, 0x780a, 0x0005,
-+ 0x0005, 0x0005, 0x0005, 0x78ec, 0xa084, 0x0021, 0x0040, 0x371b,
-+ 0x7044, 0x780a, 0xa005, 0x007f, 0x007c, 0x7044, 0xa085, 0x0002,
-+ 0x7046, 0x780a, 0x007c, 0x7830, 0xa084, 0x0040, 0x00c0, 0x3723,
-+ 0x0098, 0x372c, 0x78ac, 0x007c, 0x7808, 0xa084, 0xfffd, 0x780a,
-+ 0x0005, 0x0005, 0x0005, 0x0005, 0x78ec, 0xa084, 0x0021, 0x0040,
-+ 0x373b, 0x0098, 0x3739, 0x78ac, 0x007e, 0x7044, 0x780a, 0x007f,
-+ 0x007c, 0xa784, 0x007d, 0x00c0, 0x3748, 0x2700, 0x1078, 0x22ac,
-+ 0xa784, 0x0001, 0x00c0, 0x2ded, 0xa784, 0x0070, 0x0040, 0x3758,
-+ 0x0c7e, 0x2d60, 0x2f68, 0x1078, 0x2257, 0x2d78, 0x2c68, 0x0c7f,
-+ 0xa784, 0x0008, 0x0040, 0x3765, 0x784b, 0x0008, 0x78ec, 0xa084,
-+ 0x0003, 0x0040, 0x2343, 0x0078, 0x3693, 0xa784, 0x0004, 0x0040,
-+ 0x3798, 0x78b8, 0xa084, 0x4001, 0x0040, 0x3798, 0x784b, 0x0008,
-+ 0x78ec, 0xa084, 0x0003, 0x0040, 0x2343, 0x78e4, 0xa084, 0x0007,
-+ 0xa086, 0x0001, 0x00c0, 0x3798, 0x78c0, 0xa085, 0x4800, 0x2030,
-+ 0x7e5a, 0x781b, 0x00de, 0x0078, 0x231a, 0x784b, 0x0008, 0x6818,
-+ 0xa084, 0x8000, 0x0040, 0x3794, 0x681b, 0x0015, 0xa684, 0x4000,
-+ 0x0040, 0x3794, 0x681b, 0x0007, 0x1078, 0x36a7, 0x0078, 0x231a,
-+ 0x681b, 0x0003, 0x7858, 0xa084, 0x3f00, 0x681e, 0x6833, 0x0000,
-+ 0x682f, 0x0000, 0x784b, 0x0008, 0x78e4, 0xa005, 0x00d0, 0x2817,
-+ 0xa084, 0x0020, 0x0040, 0x2817, 0x78ec, 0xa084, 0x0003, 0x0040,
-+ 0x2817, 0x0018, 0x2817, 0x0078, 0x34c6, 0x6b14, 0x8307, 0xa084,
-+ 0x000f, 0x8003, 0x8003, 0x8003, 0xa080, 0x4f80, 0x2060, 0x2048,
-+ 0x7056, 0x6000, 0x705a, 0x6004, 0x705e, 0x2a60, 0x007c, 0x0079,
-+ 0x37c9, 0x37d1, 0x37d2, 0x37d1, 0x37d4, 0x37d1, 0x37d1, 0x37d1,
-+ 0x37d9, 0x007c, 0x1078, 0x3217, 0x1078, 0x431b, 0x7038, 0x600a,
-+ 0x007c, 0x70a0, 0xa005, 0x0040, 0x37e6, 0x2068, 0x1078, 0x1a80,
-+ 0x1078, 0x42d4, 0x1078, 0x42db, 0x70a3, 0x0000, 0x007c, 0x0e7e,
-+ 0x2091, 0x8000, 0x2071, 0x4d40, 0x7000, 0xa086, 0x0007, 0x00c0,
-+ 0x3804, 0x6114, 0x70ac, 0xa106, 0x00c0, 0x3804, 0x6128, 0x70b0,
-+ 0xa106, 0x00c0, 0x3804, 0x2c00, 0x70a2, 0x0e7f, 0x1078, 0x1a8d,
-+ 0x1078, 0x380a, 0xa006, 0x007c, 0x2091, 0x8001, 0x0e7f, 0xa085,
-+ 0x0001, 0x007c, 0x0f7e, 0x0e7e, 0x2071, 0x4d40, 0x0078, 0x20c8,
-+ 0x785b, 0x0000, 0x70b7, 0x000e, 0x2009, 0x0100, 0x017e, 0x70a0,
-+ 0xa06d, 0x0040, 0x381f, 0x70a3, 0x0000, 0x0078, 0x3825, 0x70bb,
-+ 0x0000, 0x1078, 0x1aa9, 0x0040, 0x382b, 0x70b4, 0x6826, 0x1078,
-+ 0x3906, 0x0078, 0x381f, 0x017f, 0x157e, 0x0c7e, 0x0d7e, 0x20a9,
-+ 0x0008, 0x2061, 0x7110, 0x6000, 0xa105, 0x6002, 0x601c, 0xa06d,
-+ 0x0040, 0x3843, 0x6800, 0x601e, 0x1078, 0x18a0, 0x6008, 0x8000,
-+ 0x600a, 0x0078, 0x3836, 0x6018, 0xa06d, 0x0040, 0x384d, 0x6800,
-+ 0x601a, 0x1078, 0x18a0, 0x0078, 0x3843, 0xace0, 0x0008, 0x0070,
-+ 0x3853, 0x0078, 0x3833, 0x709c, 0xa084, 0x8000, 0x0040, 0x385a,
-+ 0x1078, 0x3980, 0x0d7f, 0x0c7f, 0x157f, 0x007c, 0x127e, 0x2091,
-+ 0x2300, 0x6804, 0xa084, 0x000f, 0x0079, 0x3866, 0x3876, 0x3876,
-+ 0x3876, 0x3876, 0x3876, 0x3876, 0x3878, 0x387e, 0x3876, 0x3876,
-+ 0x3876, 0x3876, 0x3876, 0x3880, 0x3876, 0x3878, 0x1078, 0x22ac,
-+ 0x1078, 0x4172, 0x1078, 0x18a0, 0x0078, 0x3884, 0x6827, 0x000b,
-+ 0x1078, 0x4172, 0x1078, 0x3906, 0x127f, 0x007c, 0x127e, 0x2091,
-+ 0x2300, 0x0098, 0x38a2, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x38a2,
-+ 0x0d7e, 0x1078, 0x42e4, 0x2d00, 0x682e, 0x2009, 0x0004, 0x2001,
-+ 0x0000, 0x6827, 0x0084, 0x1078, 0x429c, 0x1078, 0x3906, 0x0d7f,
-+ 0x0078, 0x38d4, 0x7948, 0xa185, 0x4000, 0x784a, 0x0098, 0x38ab,
-+ 0x794a, 0x0078, 0x3890, 0x7828, 0xa086, 0x1834, 0x00c0, 0x38b4,
-+ 0xa185, 0x0004, 0x0078, 0x38bb, 0x7828, 0xa186, 0x1814, 0x00c0,
-+ 0x38a8, 0xa185, 0x000c, 0x784a, 0x789b, 0x000e, 0x78ab, 0x0002,
-+ 0x7858, 0xa084, 0x00ff, 0xa085, 0x0400, 0x785a, 0x70bc, 0xa080,
-+ 0x008d, 0x781a, 0x6827, 0x0002, 0x6827, 0x0084, 0x2009, 0x0004,
-+ 0x2001, 0x0000, 0x1078, 0x429c, 0x127f, 0x007c, 0x0d7e, 0x6b14,
-+ 0x1078, 0x1b1b, 0x0040, 0x38e3, 0x2068, 0x6827, 0x0002, 0x1078,
-+ 0x3906, 0x0078, 0x38d8, 0x0d7f, 0x007c, 0x0d7e, 0x6b14, 0x6c28,
-+ 0xa4a4, 0x00ff, 0x1078, 0x1ab9, 0x0040, 0x38f3, 0x2068, 0x6827,
-+ 0x0002, 0x1078, 0x3906, 0x0d7f, 0x007c, 0x0d7e, 0x6b14, 0xa39c,
-+ 0x00ff, 0x1078, 0x1aec, 0x0040, 0x3904, 0x2068, 0x6827, 0x0002,
-+ 0x1078, 0x3906, 0x0078, 0x38f9, 0x0d7f, 0x007c, 0x0c7e, 0x6914,
-+ 0x1078, 0x3977, 0x6904, 0xa18c, 0x00ff, 0xa186, 0x0006, 0x0040,
-+ 0x3921, 0xa186, 0x000d, 0x0040, 0x3940, 0xa186, 0x0017, 0x00c0,
-+ 0x391d, 0x1078, 0x18a0, 0x0078, 0x391f, 0x1078, 0x1b90, 0x0c7f,
-+ 0x007c, 0x6004, 0x8001, 0x0048, 0x393e, 0x6006, 0x2009, 0x0000,
-+ 0xa684, 0x0001, 0x00c0, 0x392e, 0xa18d, 0x8000, 0xa684, 0x0004,
-+ 0x0040, 0x3934, 0xa18d, 0x0002, 0x6922, 0x681f, 0x0000, 0x7104,
-+ 0x810f, 0x6818, 0xa105, 0x681a, 0x0078, 0x391d, 0x1078, 0x22ac,
-+ 0x6018, 0xa005, 0x00c0, 0x394f, 0x6008, 0x8001, 0x0048, 0x394f,
-+ 0x600a, 0x601c, 0x6802, 0x2d00, 0x601e, 0x0078, 0x3965, 0xac88,
-+ 0x0006, 0x2104, 0xa005, 0x0040, 0x3958, 0x2008, 0x0078, 0x3951,
-+ 0x6802, 0x2d0a, 0x6008, 0x8001, 0x0048, 0x391f, 0x600a, 0x6018,
-+ 0x2068, 0x6800, 0x601a, 0x0078, 0x3949, 0x157e, 0x137e, 0x147e,
-+ 0x0c7e, 0x0d7e, 0x1078, 0x187d, 0x2da0, 0x137f, 0x20a9, 0x0031,
-+ 0x53a3, 0x0c7f, 0x147f, 0x137f, 0x157f, 0x0078, 0x391d, 0xa184,
-+ 0x001f, 0x8003, 0x8003, 0x8003, 0xa080, 0x7110, 0x2060, 0x007c,
-+ 0x2019, 0x4d51, 0x2304, 0xa085, 0x0001, 0x201a, 0x2019, 0x0102,
-+ 0x2304, 0xa085, 0x0001, 0x201a, 0x007c, 0x2019, 0x4d51, 0x2304,
-+ 0xa084, 0xfffe, 0x201a, 0x2019, 0x0102, 0x2304, 0xa084, 0xfffe,
-+ 0x201a, 0x007c, 0x0078, 0x231a, 0x70a3, 0x0000, 0x7003, 0x0000,
-+ 0x7043, 0x0001, 0x7037, 0x0000, 0x0018, 0x22d1, 0x1078, 0x1aa9,
-+ 0x0040, 0x39cf, 0x2009, 0x4d0f, 0x200b, 0x0000, 0x68bc, 0x2060,
-+ 0x6100, 0xa184, 0x0300, 0x0040, 0x39c1, 0x6827, 0x000e, 0xa084,
-+ 0x0200, 0x0040, 0x39bd, 0x6827, 0x0017, 0x1078, 0x3906, 0x0078,
-+ 0x399c, 0x6820, 0xa084, 0x8000, 0x0040, 0x3a11, 0x7000, 0xa086,
-+ 0x0007, 0x10c0, 0x22ac, 0x2d00, 0x70a2, 0x0078, 0x39d6, 0x7040,
-+ 0xa086, 0x0001, 0x0040, 0x2353, 0x0078, 0x231a, 0x2031, 0x0000,
-+ 0x6920, 0xa184, 0x0002, 0x0040, 0x39df, 0xa6b5, 0x0004, 0xa184,
-+ 0x00c0, 0x8003, 0x8003, 0x8007, 0xa080, 0x3a8c, 0x2004, 0xa635,
-+ 0x681c, 0xa084, 0x0400, 0x0040, 0x39f7, 0x789b, 0x0018, 0x78ab,
-+ 0x0003, 0x789b, 0x0081, 0x78ab, 0x0001, 0xa6b5, 0x1000, 0x681c,
-+ 0xa084, 0x8000, 0x0040, 0x3a03, 0xa6b5, 0x0400, 0x789b, 0x000e,
-+ 0x6824, 0x8007, 0x78aa, 0xa684, 0x0200, 0x0040, 0x3a0d, 0x6830,
-+ 0x78d2, 0x682c, 0x78d6, 0x1078, 0x42cc, 0x7e5a, 0x6eb6, 0x0078,
-+ 0x4303, 0x1078, 0x3705, 0x00c0, 0x3a86, 0x702c, 0x8004, 0x0048,
-+ 0x3a1f, 0x2019, 0x4a07, 0x1078, 0x2137, 0x702f, 0x0001, 0x2011,
-+ 0x0001, 0x2031, 0x1000, 0x789b, 0x0018, 0x6814, 0xa084, 0x001f,
-+ 0xa085, 0x0080, 0x78aa, 0x6920, 0xa184, 0x0002, 0x0040, 0x3a38,
-+ 0xa6b5, 0x0004, 0x78ab, 0x0020, 0x6828, 0x78aa, 0xa290, 0x0002,
-+ 0x681c, 0xa084, 0x8000, 0x0040, 0x3a46, 0xa6b5, 0x0400, 0x789b,
-+ 0x000e, 0x6824, 0x8007, 0x78aa, 0x0078, 0x3a54, 0x6820, 0xa084,
-+ 0x8000, 0x00c0, 0x3a54, 0xa6b5, 0x0800, 0x681c, 0xa084, 0x0100,
-+ 0x0040, 0x3a54, 0xa6b5, 0x4000, 0x6820, 0xa084, 0x00c0, 0x8003,
-+ 0x8003, 0x8007, 0xa080, 0x3a8c, 0x2004, 0xa635, 0x789b, 0x007e,
-+ 0x7eae, 0x6eb6, 0x6814, 0x8007, 0x78aa, 0x7aaa, 0x7830, 0xa084,
-+ 0x00c0, 0x00c0, 0x3a86, 0x0018, 0x3a86, 0x70bc, 0xa080, 0x00dd,
-+ 0x781a, 0x1078, 0x371d, 0xa684, 0x0200, 0x0040, 0x3a7d, 0x6830,
-+ 0x78d2, 0x682c, 0x78d6, 0x1078, 0x42cc, 0x2d00, 0x70a2, 0x7003,
-+ 0x0007, 0xad80, 0x000f, 0x7036, 0x0078, 0x231a, 0x1078, 0x1a80,
-+ 0x1078, 0x371d, 0x0078, 0x231a, 0x0000, 0x0300, 0x0200, 0x0000,
-+ 0x1078, 0x22ac, 0x2300, 0x0079, 0x3a95, 0x3a98, 0x3a98, 0x3a9a,
-+ 0x1078, 0x22ac, 0x1078, 0x42db, 0x6924, 0xa184, 0x00ff, 0xa086,
-+ 0x000a, 0x0040, 0x3aac, 0xa184, 0xff00, 0xa085, 0x000a, 0x6826,
-+ 0x1078, 0x1a80, 0x0078, 0x399c, 0x2001, 0x000a, 0x1078, 0x4254,
-+ 0x0078, 0x399c, 0xa282, 0x0005, 0x0050, 0x3ab8, 0x1078, 0x22ac,
-+ 0x7000, 0xa084, 0x0007, 0x10c0, 0x37c7, 0x1078, 0x187d, 0x6807,
-+ 0x0106, 0x680b, 0x0000, 0x689f, 0x0000, 0x6827, 0x0000, 0x1078,
-+ 0x3e02, 0x2d00, 0x70a2, 0x7003, 0x0007, 0x6014, 0x68ba, 0xad80,
-+ 0x002e, 0x7036, 0x6824, 0xa084, 0x0080, 0x0040, 0x3adb, 0x1078,
-+ 0x3ea9, 0x0078, 0x231a, 0x2300, 0x0079, 0x3ade, 0x3ae1, 0x3b59,
-+ 0x3b78, 0x2200, 0x0079, 0x3ae4, 0x3ae9, 0x3af9, 0x3b1f, 0x3b29,
-+ 0x3b4a, 0x2029, 0x0001, 0xa026, 0x2011, 0x0000, 0x1078, 0x3f97,
-+ 0x0079, 0x3af2, 0x3af7, 0x231a, 0x399c, 0x3af7, 0x3af7, 0x1078,
-+ 0x22ac, 0x7990, 0xa18c, 0x0007, 0x00c0, 0x3b00, 0x2009, 0x0008,
-+ 0x2011, 0x0001, 0xa684, 0x0004, 0x0040, 0x3b08, 0x2011, 0x0003,
-+ 0x2220, 0xa12a, 0x2011, 0x0001, 0x1078, 0x3f97, 0x0079, 0x3b10,
-+ 0x3b15, 0x231a, 0x399c, 0x3b1d, 0x3b17, 0x0078, 0x4309, 0x70ab,
-+ 0x3b1b, 0x0078, 0x231a, 0x0078, 0x3b15, 0x1078, 0x22ac, 0xa684,
-+ 0x0010, 0x0040, 0x3b27, 0x1078, 0x3e79, 0x0078, 0x231a, 0x0078,
-+ 0x3eda, 0x6000, 0xa084, 0x0002, 0x0040, 0x3b44, 0x70bc, 0xa080,
-+ 0x00c4, 0x781a, 0x0d7e, 0x1078, 0x42e4, 0x2d00, 0x682e, 0x6827,
-+ 0x0000, 0x1078, 0x3906, 0x0d7f, 0x1078, 0x18a0, 0x7003, 0x0000,
-+ 0x7037, 0x0000, 0x0078, 0x399c, 0xa684, 0x0004, 0x00c0, 0x3b4a,
-+ 0x0078, 0x4309, 0x6000, 0xa084, 0x0004, 0x00c0, 0x3b57, 0x70ab,
-+ 0x3b57, 0x2001, 0x0007, 0x1078, 0x424c, 0x0078, 0x430f, 0x0078,
-+ 0x4309, 0x2200, 0x0079, 0x3b5c, 0x3b61, 0x3b61, 0x3b61, 0x3b63,
-+ 0x3b61, 0x1078, 0x22ac, 0x70a7, 0x3b67, 0x0078, 0x4315, 0x2011,
-+ 0x0018, 0x1078, 0x3f91, 0x0079, 0x3b6d, 0x3b72, 0x231a, 0x399c,
-+ 0x3b74, 0x3b76, 0x1078, 0x22ac, 0x1078, 0x22ac, 0x1078, 0x22ac,
-+ 0x2200, 0x0079, 0x3b7b, 0x3b80, 0x3b80, 0x3b82, 0x3b80, 0x3b80,
-+ 0x1078, 0x22ac, 0x70ab, 0x3b8a, 0x2001, 0x0003, 0x1078, 0x424c,
-+ 0x0078, 0x430f, 0x0078, 0x4309, 0xa282, 0x0003, 0x0050, 0x3b92,
-+ 0x1078, 0x22ac, 0xa684, 0x0008, 0x0040, 0x3b98, 0x1078, 0x3e57,
-+ 0x7003, 0x0007, 0x2300, 0x0079, 0x3b9d, 0x3ba0, 0x3bcb, 0x3bd3,
-+ 0x2200, 0x0079, 0x3ba3, 0x3ba8, 0x3ba6, 0x3bc1, 0x1078, 0x22ac,
-+ 0x7990, 0xa1ac, 0x0007, 0xa026, 0x2011, 0x0001, 0x1078, 0x3f97,
-+ 0x0079, 0x3bb2, 0x3bb7, 0x231a, 0x399c, 0x3bbf, 0x3bb9, 0x0078,
-+ 0x4309, 0x70ab, 0x3bbd, 0x0078, 0x231a, 0x0078, 0x3bb7, 0x1078,
-+ 0x22ac, 0xa684, 0x0010, 0x0040, 0x3bc9, 0x1078, 0x3e79, 0x0078,
-+ 0x231a, 0x0078, 0x3eda, 0x2200, 0x0079, 0x3bce, 0x3bd1, 0x3bd1,
-+ 0x3bd1, 0x1078, 0x22ac, 0x2200, 0x0079, 0x3bd6, 0x3bd9, 0x3bd9,
-+ 0x3bdb, 0x1078, 0x22ac, 0x70ab, 0x3be3, 0x2001, 0x0003, 0x1078,
-+ 0x424c, 0x0078, 0x430f, 0x0078, 0x4309, 0x2300, 0x0079, 0x3be8,
-+ 0x3bed, 0x3bef, 0x3beb, 0x1078, 0x22ac, 0x70a4, 0x007a, 0x70a4,
-+ 0x007a, 0xa282, 0x0002, 0x0050, 0x3bf7, 0x1078, 0x22ac, 0xa684,
-+ 0x0200, 0x0040, 0x3c01, 0x1078, 0x42d4, 0x1078, 0x3f79, 0x1078,
-+ 0x42db, 0x2300, 0x0079, 0x3c04, 0x3c07, 0x3c1d, 0x3c77, 0xa286,
-+ 0x0001, 0x0040, 0x3c0d, 0x1078, 0x22ac, 0xa684, 0x0200, 0x0040,
-+ 0x3c15, 0x1078, 0x42d4, 0x1078, 0x42db, 0x2001, 0x0001, 0x1078,
-+ 0x4254, 0x7003, 0x0000, 0x0078, 0x399c, 0x2200, 0x0079, 0x3c20,
-+ 0x3c22, 0x3c47, 0x70a7, 0x3c26, 0x0078, 0x4315, 0x2011, 0x000d,
-+ 0x1078, 0x3f91, 0x0079, 0x3c2c, 0x3c31, 0x231a, 0x399c, 0x3c39,
-+ 0x3c41, 0xa6b4, 0x00ff, 0xa6b5, 0x0400, 0x6eb6, 0x7e5a, 0x0078,
-+ 0x4303, 0xa6b4, 0x00ff, 0xa6b5, 0x0400, 0x6eb6, 0x7e5a, 0x0078,
-+ 0x4303, 0x70ab, 0x3c45, 0x0078, 0x231a, 0x0078, 0x3c31, 0x70a7,
-+ 0x3c4b, 0x0078, 0x4315, 0x2011, 0x0012, 0x1078, 0x3f91, 0x0079,
-+ 0x3c51, 0x3c57, 0x231a, 0x399c, 0x3c63, 0x3c6b, 0x3c71, 0xa6b4,
-+ 0x00ff, 0xa6b5, 0x0400, 0x6eb6, 0x7e5a, 0x70bc, 0xa080, 0x00a1,
-+ 0x781a, 0x0078, 0x231a, 0xa6b4, 0x00ff, 0xa6b5, 0x0400, 0x6eb6,
-+ 0x7e5a, 0x0078, 0x4303, 0x70ab, 0x3c6f, 0x0078, 0x231a, 0x0078,
-+ 0x3c57, 0x70ab, 0x3c75, 0x0078, 0x231a, 0x0078, 0x3c63, 0xa286,
-+ 0x0001, 0x0040, 0x3c7d, 0x1078, 0x22ac, 0x70a7, 0x3c81, 0x0078,
-+ 0x4315, 0x2011, 0x0015, 0x1078, 0x3f91, 0x0079, 0x3c87, 0x3c8c,
-+ 0x231a, 0x399c, 0x3c94, 0x3c9c, 0xa6b4, 0x00ff, 0xa6b5, 0x0400,
-+ 0x6eb6, 0x7e5a, 0x0078, 0x4303, 0xa6b4, 0x00ff, 0xa6b5, 0x0400,
-+ 0x6eb6, 0x7e5a, 0x0078, 0x4303, 0x70ab, 0x3ca0, 0x0078, 0x231a,
-+ 0x0078, 0x3c8c, 0xa282, 0x0002, 0x0050, 0x3ca8, 0x1078, 0x22ac,
-+ 0x2300, 0x0079, 0x3cab, 0x3cae, 0x3cd7, 0x3d26, 0xa286, 0x0001,
-+ 0x0040, 0x3cb4, 0x1078, 0x22ac, 0x6804, 0xa084, 0x00ff, 0xa086,
-+ 0x0006, 0x00c0, 0x3cc1, 0x1078, 0x3906, 0x7003, 0x0000, 0x0078,
-+ 0x399c, 0x6837, 0x0000, 0x683b, 0x0000, 0xa684, 0x0200, 0x0040,
-+ 0x3ccf, 0x1078, 0x42d4, 0x1078, 0x3f79, 0x1078, 0x42db, 0x2001,
-+ 0x0001, 0x1078, 0x4254, 0x7003, 0x0000, 0x0078, 0x399c, 0x2200,
-+ 0x0079, 0x3cda, 0x3cdc, 0x3d01, 0x70a7, 0x3ce0, 0x0078, 0x4315,
-+ 0x2011, 0x000d, 0x1078, 0x3f91, 0x0079, 0x3ce6, 0x3ceb, 0x231a,
-+ 0x399c, 0x3cf3, 0x3cfb, 0xa6b4, 0x00ff, 0xa6b5, 0x0800, 0x6eb6,
-+ 0x7e5a, 0x0078, 0x4303, 0xa6b4, 0x00ff, 0xa6b5, 0x0800, 0x6eb6,
-+ 0x7e5a, 0x0078, 0x4303, 0x70ab, 0x3cff, 0x0078, 0x231a, 0x0078,
-+ 0x3ceb, 0x70a7, 0x3d05, 0x0078, 0x4315, 0x2011, 0x0005, 0x1078,
-+ 0x3f91, 0x0079, 0x3d0b, 0x3d10, 0x231a, 0x399c, 0x3d18, 0x3d20,
-+ 0xa6b4, 0x00ff, 0xa6b5, 0x0800, 0x6eb6, 0x7e5a, 0x0078, 0x4303,
-+ 0xa6b4, 0x00ff, 0xa6b5, 0x0800, 0x6eb6, 0x7e5a, 0x0078, 0x4303,
-+ 0x70ab, 0x3d24, 0x0078, 0x231a, 0x0078, 0x3d10, 0xa286, 0x0001,
-+ 0x0040, 0x3d2c, 0x1078, 0x22ac, 0x70a7, 0x3d30, 0x0078, 0x4315,
-+ 0x2011, 0x0006, 0x1078, 0x3f91, 0x0079, 0x3d36, 0x3d3b, 0x231a,
-+ 0x399c, 0x3d41, 0x3d43, 0xa6b5, 0x0800, 0x6eb6, 0x7e5a, 0x0078,
-+ 0x4303, 0x1078, 0x22ac, 0x70ab, 0x3d47, 0x0078, 0x231a, 0x0078,
-+ 0x3d3b, 0x2300, 0x0079, 0x3d4c, 0x3d51, 0x3d4f, 0x3d4f, 0x1078,
-+ 0x22ac, 0x1078, 0x22ac, 0x2300, 0x71a8, 0xa005, 0x017a, 0xa282,
-+ 0x0002, 0x0050, 0x3d5d, 0x1078, 0x22ac, 0x2300, 0x0079, 0x3d60,
-+ 0x3d63, 0x3d76, 0x3d94, 0x82ff, 0x00c0, 0x3d68, 0x1078, 0x22ac,
-+ 0xa684, 0x0200, 0x0040, 0x3d70, 0x1078, 0x42d4, 0x1078, 0x42db,
-+ 0x2001, 0x0001, 0x1078, 0x4254, 0x0078, 0x231a, 0x82ff, 0x0040,
-+ 0x3d7b, 0x1078, 0x22ac, 0x70a7, 0x3d7f, 0x0078, 0x4315, 0x2011,
-+ 0x0018, 0x1078, 0x3f91, 0x0079, 0x3d85, 0x3d8a, 0x231a, 0x399c,
-+ 0x3d8c, 0x3d8e, 0x0078, 0x4303, 0x0078, 0x4303, 0x70ab, 0x3d92,
-+ 0x0078, 0x231a, 0x0078, 0x3d8a, 0x2200, 0x0079, 0x3d97, 0x3d99,
-+ 0x3db2, 0x70a7, 0x3d9d, 0x0078, 0x4315, 0x2011, 0x0018, 0x1078,
-+ 0x3f91, 0x0079, 0x3da3, 0x3da8, 0x231a, 0x399c, 0x3daa, 0x3dac,
-+ 0x0078, 0x4303, 0x0078, 0x4303, 0x70ab, 0x3db0, 0x0078, 0x231a,
-+ 0x0078, 0x3da8, 0xa484, 0x8000, 0x00c0, 0x3df0, 0xa684, 0x0100,
-+ 0x0040, 0x3dc6, 0x1078, 0x42d4, 0x1078, 0x3f79, 0x1078, 0x42db,
-+ 0x7848, 0xa085, 0x000c, 0x784a, 0x0078, 0x3dca, 0x78d8, 0x78d2,
-+ 0x78dc, 0x78d6, 0xa6b4, 0xefff, 0x7e5a, 0x70a7, 0x3dd1, 0x0078,
-+ 0x4315, 0x2011, 0x000d, 0x1078, 0x3f91, 0x0079, 0x3dd7, 0x3ddc,
-+ 0x231a, 0x399c, 0x3ddc, 0x3dea, 0xa684, 0x0100, 0x0040, 0x3de8,
-+ 0x1078, 0x4291, 0x6830, 0x78d2, 0x682c, 0x78d6, 0x1078, 0x42cc,
-+ 0x0078, 0x4303, 0x70ab, 0x3dee, 0x0078, 0x231a, 0x0078, 0x3ddc,
-+ 0x1078, 0x42db, 0x70ab, 0x3dfa, 0x2001, 0x0003, 0x1078, 0x424c,
-+ 0x0078, 0x430f, 0x1078, 0x42cc, 0x6830, 0x78d2, 0x682c, 0x78d6,
-+ 0x0078, 0x4303, 0x681b, 0x0000, 0xa684, 0x0008, 0x0040, 0x3e20,
-+ 0x157e, 0x137e, 0x147e, 0x7890, 0x8004, 0x8004, 0x8004, 0x8004,
-+ 0xa084, 0x000f, 0x681a, 0x80ac, 0x789b, 0x0000, 0xaf80, 0x002c,
-+ 0x2098, 0xad80, 0x000b, 0x20a0, 0x53a5, 0x147f, 0x137f, 0x157f,
-+ 0xa6c4, 0x0f00, 0xa684, 0x0002, 0x00c0, 0x3e2d, 0x692c, 0x810f,
-+ 0x810d, 0x810d, 0x810d, 0x0078, 0x3e3a, 0x789b, 0x0010, 0x79ac,
-+ 0x0078, 0x3e3a, 0x017e, 0x2009, 0x0005, 0x2001, 0x3d00, 0x1078,
-+ 0x429c, 0x017f, 0xa184, 0x001f, 0xa805, 0x6816, 0x1078, 0x3977,
-+ 0x68be, 0xa684, 0x0004, 0x0040, 0x3e4b, 0xa18c, 0xff00, 0x78a8,
-+ 0xa084, 0x00ff, 0xa105, 0x682a, 0xa6b4, 0x00ff, 0x6000, 0xa084,
-+ 0x0008, 0x0040, 0x3e55, 0xa6b5, 0x4000, 0x6eb6, 0x007c, 0x157e,
-+ 0x137e, 0x147e, 0x6918, 0x7890, 0x8004, 0x8004, 0x8004, 0x8004,
-+ 0xa084, 0x000f, 0x007e, 0xa100, 0x681a, 0x007f, 0x8004, 0x0040,
-+ 0x3e75, 0x20a8, 0x8104, 0xa080, 0x000b, 0xad00, 0x20a0, 0x789b,
-+ 0x0000, 0xaf80, 0x002c, 0x2098, 0x53a5, 0x147f, 0x137f, 0x157f,
-+ 0x007c, 0x682c, 0xa084, 0x2000, 0x00c0, 0x3e81, 0x620c, 0x0078,
-+ 0x3e82, 0x6210, 0x6b18, 0x2300, 0xa202, 0x0040, 0x3ea0, 0x2018,
-+ 0xa382, 0x000e, 0x0048, 0x3e92, 0x0040, 0x3e92, 0x2019, 0x000e,
-+ 0x0078, 0x3e96, 0x7858, 0xa084, 0xffef, 0x785a, 0x783b, 0x1b02,
-+ 0x7893, 0x0000, 0x7ba2, 0x70bc, 0xa080, 0x008a, 0x781a, 0x007c,
-+ 0x7858, 0xa084, 0xffef, 0x785a, 0x783b, 0x1b02, 0x7893, 0x0000,
-+ 0x007c, 0x6807, 0x0117, 0x6914, 0x1078, 0x3977, 0x6100, 0x8104,
-+ 0x00c8, 0x3ec6, 0x601c, 0xa005, 0x0040, 0x3eba, 0x2001, 0x0800,
-+ 0x0078, 0x3ec8, 0x0d7e, 0x6824, 0x007e, 0x1078, 0x42e4, 0x007f,
-+ 0x6826, 0x2d00, 0x682e, 0x1078, 0x3906, 0x0d7f, 0x2001, 0x0200,
-+ 0x6826, 0x8007, 0x789b, 0x000e, 0x78aa, 0x681c, 0xa085, 0x8000,
-+ 0x681e, 0x2031, 0x0400, 0x6eb6, 0x7e5a, 0x71bc, 0xa188, 0x008d,
-+ 0x791a, 0x007c, 0x6914, 0x1078, 0x3977, 0x6100, 0x8104, 0x00c8,
-+ 0x3f27, 0xa184, 0x0300, 0x0040, 0x3ee9, 0x6807, 0x0117, 0x0078,
-+ 0x3f07, 0x6004, 0xa005, 0x00c0, 0x3f10, 0x6807, 0x0117, 0x601c,
-+ 0xa005, 0x00c0, 0x3efd, 0x0d7e, 0x1078, 0x42e4, 0x6827, 0x0034,
-+ 0x2d00, 0x682e, 0x1078, 0x3906, 0x0d7f, 0xa684, 0x0004, 0x0040,
-+ 0x3f07, 0x2031, 0x0400, 0x2001, 0x2800, 0x0078, 0x3f0b, 0x2031,
-+ 0x0400, 0x2001, 0x0800, 0x71bc, 0xa188, 0x008d, 0x0078, 0x3f56,
-+ 0x6018, 0xa005, 0x00c0, 0x3efd, 0x601c, 0xa005, 0x00c0, 0x3efd,
-+ 0x689f, 0x0000, 0x6827, 0x003d, 0xa684, 0x0001, 0x0040, 0x3f64,
-+ 0xa6b5, 0x0800, 0x71bc, 0xa188, 0x00a5, 0x0078, 0x3f5f, 0x6807,
-+ 0x0117, 0x2031, 0x0400, 0x692c, 0x810f, 0xa18c, 0x00ff, 0xa186,
-+ 0x0012, 0x00c0, 0x3f39, 0x2001, 0x3f6f, 0x2009, 0x0001, 0x0078,
-+ 0x3f4a, 0xa186, 0x0003, 0x00c0, 0x3f43, 0x2001, 0x3f70, 0x2009,
-+ 0x0012, 0x0078, 0x3f4a, 0x2001, 0x0200, 0x71bc, 0xa188, 0x008d,
-+ 0x0078, 0x3f56, 0x1078, 0x42b7, 0x78a3, 0x0000, 0x6820, 0xa085,
-+ 0x0040, 0x6822, 0x71bc, 0xa188, 0x00da, 0xa006, 0x6826, 0x8007,
-+ 0x789b, 0x000e, 0x78aa, 0x681c, 0xa085, 0x8000, 0x681e, 0x6eb6,
-+ 0x7e5a, 0x791a, 0x0078, 0x231a, 0x6eb6, 0x1078, 0x3906, 0x6814,
-+ 0x70ae, 0x6828, 0x70b2, 0x7003, 0x0007, 0x0078, 0x231a, 0x0023,
-+ 0x0070, 0x0005, 0x0000, 0x0a00, 0x0000, 0x0000, 0x0025, 0x0000,
-+ 0x0000, 0x6837, 0x0000, 0x683b, 0x0000, 0xa684, 0x0200, 0x0040,
-+ 0x3f90, 0x78b8, 0xa08c, 0x001f, 0xa084, 0x8000, 0x0040, 0x3f89,
-+ 0x8108, 0x78d8, 0xa100, 0x683a, 0x78dc, 0xa081, 0x0000, 0x6836,
-+ 0x007c, 0x7990, 0x810f, 0xa5ac, 0x0007, 0x2021, 0x0000, 0xa480,
-+ 0x0010, 0x789a, 0x79a8, 0xa18c, 0x00ff, 0xa184, 0x0080, 0x00c0,
-+ 0x3fbf, 0xa182, 0x0020, 0x00c8, 0x3fd9, 0xa182, 0x0012, 0x00c8,
-+ 0x4241, 0x2100, 0x1079, 0x3fad, 0x007c, 0x4241, 0x418a, 0x4241,
-+ 0x4241, 0x3fe6, 0x3fe9, 0x4023, 0x4063, 0x4093, 0x4096, 0x4241,
-+ 0x4241, 0x4045, 0x40b8, 0x40f3, 0x4241, 0x4241, 0x411b, 0xa18c,
-+ 0x001f, 0x6814, 0xa084, 0x001f, 0xa106, 0x0040, 0x3fd6, 0x70bc,
-+ 0xa080, 0x00c4, 0x781a, 0x2001, 0x0014, 0x1078, 0x4254, 0x1078,
-+ 0x42db, 0x7003, 0x0000, 0x2001, 0x0002, 0x007c, 0x2001, 0x0000,
-+ 0x007c, 0xa182, 0x0024, 0x00c8, 0x4241, 0xa184, 0x0003, 0x1079,
-+ 0x3fad, 0x007c, 0x4241, 0x4241, 0x4241, 0x4241, 0x1078, 0x4241,
-+ 0x007c, 0x2200, 0x0079, 0x3fec, 0x411e, 0x411e, 0x4010, 0x4010,
-+ 0x4010, 0x4010, 0x4010, 0x4010, 0x4010, 0x4010, 0x400e, 0x4010,
-+ 0x4005, 0x4010, 0x4010, 0x4010, 0x4010, 0x4010, 0x4018, 0x401b,
-+ 0x411e, 0x401b, 0x4010, 0x4010, 0x4010, 0x0c7e, 0x077e, 0x6f14,
-+ 0x1078, 0x34f9, 0x077f, 0x0c7f, 0x0078, 0x4010, 0x1078, 0x41df,
-+ 0x6827, 0x02b3, 0x2009, 0x000b, 0x2001, 0x4800, 0x0078, 0x414e,
-+ 0x1078, 0x4236, 0x007c, 0x6827, 0x0293, 0x2009, 0x000b, 0x2001,
-+ 0x4800, 0x0078, 0x413a, 0x2d58, 0x6804, 0xa084, 0x00ff, 0xa086,
-+ 0x0006, 0x00c0, 0x402d, 0x6807, 0x0117, 0x6827, 0x0002, 0x1078,
-+ 0x42e4, 0x6827, 0x0036, 0x810f, 0x6932, 0x2d00, 0x682e, 0x0d7e,
-+ 0x1078, 0x38d6, 0x1078, 0x4172, 0x2b68, 0x1078, 0x3906, 0x0d7f,
-+ 0x1078, 0x3906, 0x2001, 0x0002, 0x007c, 0x1078, 0x4172, 0x6904,
-+ 0xa18c, 0x00ff, 0xa186, 0x0007, 0x0040, 0x4056, 0xa186, 0x000f,
-+ 0x0040, 0x4056, 0x1078, 0x18a0, 0x70a3, 0x0000, 0x2009, 0x4d38,
-+ 0x200b, 0x0006, 0x70b7, 0x0017, 0x2009, 0x0200, 0x1078, 0x3816,
-+ 0x2001, 0x0001, 0x007c, 0x2200, 0x0079, 0x4066, 0x411e, 0x414b,
-+ 0x414b, 0x414b, 0x4085, 0x415b, 0x415b, 0x415b, 0x415b, 0x415e,
-+ 0x415e, 0x4163, 0x4163, 0x407f, 0x407f, 0x414b, 0x414b, 0x415b,
-+ 0x414b, 0x408b, 0x411e, 0x408b, 0x408b, 0x415b, 0x408b, 0x2009,
-+ 0x000b, 0x2001, 0x4300, 0x0078, 0x416d, 0x2009, 0x000b, 0x2001,
-+ 0x4300, 0x0078, 0x414e, 0x6827, 0x0293, 0x2009, 0x000b, 0x2001,
-+ 0x4300, 0x0078, 0x413a, 0x2001, 0x0000, 0x007c, 0x2200, 0x0079,
-+ 0x4099, 0x411e, 0x40b2, 0x40b2, 0x40b2, 0x40b2, 0x415b, 0x415b,
-+ 0x415b, 0x415b, 0x415b, 0x415b, 0x415b, 0x415b, 0x40b2, 0x40b2,
-+ 0x40b2, 0x40b2, 0x415b, 0x40b2, 0x40b2, 0x415b, 0x415b, 0x415b,
-+ 0x415b, 0x411e, 0x2009, 0x000b, 0x2001, 0x4300, 0x0078, 0x413a,
-+ 0xa684, 0x0004, 0x00c0, 0x40cc, 0x6804, 0xa084, 0x00ff, 0xa086,
-+ 0x0006, 0x00c0, 0x4241, 0x1078, 0x4172, 0x6807, 0x0117, 0x1078,
-+ 0x3906, 0x2001, 0x0002, 0x007c, 0x6000, 0xa084, 0x0004, 0x0040,
-+ 0x4241, 0x2d58, 0x6804, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0,
-+ 0x40db, 0x6807, 0x0117, 0x6827, 0x0002, 0x1078, 0x42e4, 0x6827,
-+ 0x0036, 0x810f, 0x6932, 0x2d00, 0x682e, 0x0d7e, 0x1078, 0x38e5,
-+ 0x1078, 0x4172, 0x2b68, 0x1078, 0x3906, 0x0d7f, 0x1078, 0x3906,
-+ 0x2001, 0x0002, 0x007c, 0x6000, 0xa084, 0x0004, 0x0040, 0x4241,
-+ 0x2d58, 0x6a04, 0xa294, 0x00ff, 0xa286, 0x0006, 0x00c0, 0x4102,
-+ 0x6807, 0x0117, 0x6827, 0x0002, 0x2d58, 0x1078, 0x42e4, 0x6827,
-+ 0x0036, 0x810f, 0x6932, 0x2d00, 0x682e, 0x0d7e, 0x1078, 0x38f5,
-+ 0x1078, 0x4172, 0x2b68, 0x1078, 0x3906, 0x0d7f, 0x1078, 0x3906,
-+ 0x2001, 0x0002, 0x007c, 0x1078, 0x4241, 0x007c, 0x70bc, 0xa080,
-+ 0x00c4, 0x781a, 0x2001, 0x0001, 0x1078, 0x4254, 0x1078, 0x42db,
-+ 0x7003, 0x0000, 0x2001, 0x0002, 0x007c, 0x1078, 0x429c, 0x1078,
-+ 0x42d4, 0x1078, 0x3f79, 0x1078, 0x3ea9, 0x1078, 0x42db, 0x2001,
-+ 0x0001, 0x007c, 0x1078, 0x429c, 0x1078, 0x42d4, 0x1078, 0x3f79,
-+ 0x70bc, 0xa080, 0x00c4, 0x781a, 0x1078, 0x42db, 0x7003, 0x0000,
-+ 0x2001, 0x0002, 0x007c, 0x1078, 0x4241, 0x007c, 0x1078, 0x429c,
-+ 0x1078, 0x42d4, 0x1078, 0x3f79, 0x1078, 0x3ea9, 0x1078, 0x42db,
-+ 0x2001, 0x0001, 0x007c, 0x2001, 0x0003, 0x007c, 0x1078, 0x41df,
-+ 0x2001, 0x0000, 0x007c, 0x0c7e, 0x077e, 0x6f14, 0x1078, 0x34f9,
-+ 0x077f, 0x0c7f, 0x2001, 0x0000, 0x007c, 0x1078, 0x429c, 0x1078,
-+ 0x4241, 0x007c, 0x6904, 0xa18c, 0x00ff, 0xa186, 0x0007, 0x0040,
-+ 0x417d, 0xa186, 0x000f, 0x00c0, 0x4181, 0x1078, 0x42d4, 0x1078,
-+ 0x3f79, 0x70bc, 0xa080, 0x00c4, 0x781a, 0x1078, 0x42db, 0x7003,
-+ 0x0000, 0x007c, 0x7aa8, 0xa294, 0x00ff, 0x78a8, 0xa084, 0x00ff,
-+ 0xa08a, 0x0004, 0x00c8, 0x4241, 0x1079, 0x4197, 0x007c, 0x4241,
-+ 0x419b, 0x4241, 0x41ed, 0xa282, 0x0003, 0x0040, 0x41a2, 0x1078,
-+ 0x4241, 0x007c, 0x7da8, 0xa5ac, 0x00ff, 0x7ca8, 0xa4a4, 0x00ff,
-+ 0xa482, 0x000c, 0x0048, 0x41b0, 0x0040, 0x41b0, 0x2021, 0x000c,
-+ 0x701c, 0xa502, 0x00c8, 0x41b5, 0x751c, 0x1078, 0x4227, 0x852b,
-+ 0x852b, 0x1078, 0x3577, 0x0040, 0x41c1, 0x1078, 0x41d1, 0x0078,
-+ 0x41c5, 0x1078, 0x4223, 0x1078, 0x41df, 0xa6b5, 0x1000, 0x789b,
-+ 0x007e, 0x7ea6, 0x70bc, 0xa080, 0x00b0, 0x781a, 0x2001, 0x0004,
-+ 0x007c, 0x0c7e, 0x6914, 0x810f, 0xa18c, 0x000f, 0x810b, 0x810b,
-+ 0x810b, 0xa1e0, 0x4f80, 0x1078, 0x338b, 0x0c7f, 0x007c, 0x0c7e,
-+ 0x6814, 0x8007, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa0e0,
-+ 0x4f80, 0x1078, 0x33b2, 0x0c7f, 0x007c, 0xa282, 0x0002, 0x00c0,
-+ 0x4241, 0x7aa8, 0xa294, 0x00ff, 0xa284, 0xfffe, 0x0040, 0x41fa,
-+ 0x2011, 0x0001, 0x1078, 0x4215, 0x1078, 0x4207, 0x1078, 0x41df,
-+ 0x70bc, 0xa080, 0x00b0, 0x781a, 0x2001, 0x0004, 0x007c, 0x0c7e,
-+ 0x6814, 0x8007, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa0e0,
-+ 0x4f80, 0x1078, 0x3457, 0x0c7f, 0x007c, 0x789b, 0x0018, 0x78ab,
-+ 0x0001, 0x78ab, 0x0002, 0x78ab, 0x0003, 0x7aaa, 0x789b, 0x0081,
-+ 0x78ab, 0x0004, 0x007c, 0x2021, 0x0000, 0x2029, 0x0032, 0x789b,
-+ 0x0018, 0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab, 0x0001, 0x7daa,
-+ 0x7caa, 0x789b, 0x0081, 0x78ab, 0x0005, 0x007c, 0x2001, 0x0003,
-+ 0x1078, 0x424c, 0x70bc, 0xa080, 0x00b0, 0x781a, 0x2001, 0x0005,
-+ 0x007c, 0x2001, 0x0007, 0x1078, 0x424c, 0x70bc, 0xa080, 0x00b0,
-+ 0x781a, 0x2001, 0x0004, 0x007c, 0x789b, 0x0018, 0x78aa, 0x789b,
-+ 0x0081, 0x78ab, 0x0001, 0x007c, 0x6904, 0xa18c, 0x00ff, 0xa196,
-+ 0x0007, 0x0040, 0x4262, 0xa196, 0x000f, 0x0040, 0x4262, 0x1078,
-+ 0x18a0, 0x007c, 0x6924, 0xa194, 0x003f, 0x00c0, 0x426b, 0xa18c,
-+ 0xffc0, 0xa105, 0x6826, 0x1078, 0x3906, 0x6920, 0xa184, 0x0100,
-+ 0x0040, 0x4290, 0x6824, 0xa084, 0x0001, 0x0040, 0x4290, 0x6b14,
-+ 0xa184, 0x0002, 0x00c0, 0x4280, 0x1078, 0x1b1b, 0x0078, 0x4285,
-+ 0x6c28, 0xa4a4, 0x00ff, 0x1078, 0x1ab9, 0x0d7e, 0x2068, 0x1078,
-+ 0x18a0, 0x0d7f, 0x6914, 0x1078, 0x3977, 0x6204, 0x8210, 0x6206,
-+ 0x007c, 0x6930, 0x6838, 0x6832, 0xa112, 0x692c, 0x6834, 0x682e,
-+ 0xa11b, 0xa200, 0xa301, 0x007c, 0x0c7e, 0xade0, 0x0018, 0x6003,
-+ 0x7000, 0x810f, 0x6106, 0x600b, 0x0000, 0x600f, 0x000a, 0x6013,
-+ 0x0000, 0x6017, 0x0000, 0x8007, 0x601a, 0x601f, 0x0000, 0x6023,
-+ 0x0000, 0x0c7f, 0x6824, 0xa085, 0x0080, 0x6826, 0x007c, 0x157e,
-+ 0x137e, 0x147e, 0x2098, 0xaf80, 0x002d, 0x20a0, 0x81ac, 0x0040,
-+ 0x42c2, 0x53a6, 0xa184, 0x0001, 0x0040, 0x42c8, 0x3304, 0x78be,
-+ 0x147f, 0x137f, 0x157f, 0x007c, 0x70b8, 0xa005, 0x10c0, 0x22ac,
-+ 0x70bb, 0x8000, 0x0078, 0x45ed, 0x71b8, 0x81ff, 0x0040, 0x42da,
-+ 0x1078, 0x46d8, 0x007c, 0x71b8, 0x81ff, 0x0040, 0x42e3, 0x70bb,
-+ 0x0000, 0x1078, 0x431b, 0x007c, 0x0c7e, 0x0d7e, 0x1078, 0x187d,
-+ 0x0c7f, 0x157e, 0x137e, 0x147e, 0x2da0, 0x2c98, 0x20a9, 0x0031,
-+ 0x53a3, 0x147f, 0x137f, 0x157f, 0x6807, 0x010d, 0x680b, 0x0000,
-+ 0x7004, 0x8007, 0x681a, 0x681f, 0x0000, 0x6823, 0x0000, 0x689f,
-+ 0x0000, 0x0c7f, 0x007c, 0x70bc, 0xa080, 0x008d, 0x781a, 0x0078,
-+ 0x231a, 0x70bc, 0xa080, 0x007d, 0x781a, 0x0078, 0x231a, 0x70bc,
-+ 0xa080, 0x00b0, 0x781a, 0x0078, 0x231a, 0x70bc, 0xa080, 0x00ba,
-+ 0x781a, 0x0078, 0x231a, 0x127e, 0x2091, 0x2200, 0x2049, 0x431b,
-+ 0x7000, 0x7204, 0xa205, 0x720c, 0xa215, 0x7008, 0xa084, 0xfffd,
-+ 0xa205, 0x0040, 0x432d, 0x0078, 0x4332, 0x7003, 0x0000, 0x127f,
-+ 0x2000, 0x007c, 0x7000, 0xa084, 0x0001, 0x00c0, 0x4360, 0x7108,
-+ 0x8104, 0x00c8, 0x433f, 0x1078, 0x4462, 0x0078, 0x4337, 0x700c,
-+ 0xa08c, 0x00ff, 0x0040, 0x4360, 0x7004, 0x8004, 0x00c8, 0x4357,
-+ 0x7014, 0xa005, 0x00c0, 0x4353, 0x7010, 0xa005, 0x0040, 0x4357,
-+ 0xa102, 0x00c8, 0x4337, 0x7007, 0x0010, 0x0078, 0x4360, 0x8aff,
-+ 0x0040, 0x4360, 0x1078, 0x46ba, 0x00c0, 0x435a, 0x0040, 0x4337,
-+ 0x1078, 0x43eb, 0x7003, 0x0000, 0x127f, 0x2000, 0x007c, 0x017e,
-+ 0x6104, 0xa18c, 0x00ff, 0xa186, 0x0007, 0x0040, 0x4373, 0xa18e,
-+ 0x000f, 0x00c0, 0x4376, 0x6040, 0x0078, 0x4377, 0x6428, 0x017f,
-+ 0x84ff, 0x0040, 0x43a1, 0x2c70, 0x7004, 0xa0bc, 0x000f, 0xa7b8,
-+ 0x43b1, 0x273c, 0x87fb, 0x00c0, 0x438f, 0x0048, 0x4389, 0x1078,
-+ 0x22ac, 0x609c, 0xa075, 0x0040, 0x43a1, 0x0078, 0x437c, 0x2704,
-+ 0xae68, 0x680c, 0xa630, 0x6808, 0xa529, 0x8421, 0x0040, 0x43a1,
-+ 0x8738, 0x2704, 0xa005, 0x00c0, 0x4390, 0x709c, 0xa075, 0x00c0,
-+ 0x437c, 0x007c, 0x0000, 0x0005, 0x0009, 0x000d, 0x0011, 0x0015,
-+ 0x0019, 0x001d, 0x0000, 0x0003, 0x0009, 0x000f, 0x0015, 0x001b,
-+ 0x0000, 0x0000, 0x43a6, 0x43a3, 0x0000, 0x0000, 0x8000, 0x0000,
-+ 0x43a6, 0x0000, 0x43ae, 0x43ab, 0x0000, 0x0000, 0x0000, 0x0000,
-+ 0x43ae, 0x0000, 0x43a9, 0x43a9, 0x0000, 0x0000, 0x8000, 0x0000,
-+ 0x43a9, 0x0000, 0x43af, 0x43af, 0x0000, 0x0000, 0x0000, 0x0000,
-+ 0x43af, 0x127e, 0x2091, 0x2200, 0x2079, 0x4d00, 0x2071, 0x0010,
-+ 0x7007, 0x000a, 0x7007, 0x0002, 0x7003, 0x0000, 0x2071, 0x0020,
-+ 0x7007, 0x000a, 0x7007, 0x0002, 0x7003, 0x0000, 0x2049, 0x0000,
-+ 0x127f, 0x2000, 0x007c, 0x2049, 0x43eb, 0x2019, 0x0000, 0x7004,
-+ 0x8004, 0x00c8, 0x443e, 0x7007, 0x0012, 0x7108, 0x7008, 0xa106,
-+ 0x00c0, 0x43f5, 0xa184, 0x000c, 0x0040, 0x4400, 0x1078, 0x22ac,
-+ 0x2001, 0x04fd, 0x2004, 0xa082, 0x0005, 0x00c8, 0x440b, 0xa184,
-+ 0x0000, 0x00c0, 0x43f5, 0xa19c, 0x0032, 0xa386, 0x0030, 0x0040,
-+ 0x4419, 0xa386, 0x0002, 0x0040, 0x4424, 0xa386, 0x0032, 0x00c0,
-+ 0x43f5, 0x7200, 0x8204, 0x0048, 0x4424, 0x730c, 0xa384, 0x00ff,
-+ 0x0040, 0x4424, 0x1078, 0x22ac, 0x7007, 0x0012, 0x7000, 0xa084,
-+ 0x0001, 0x00c0, 0x443e, 0x7008, 0xa084, 0x000c, 0x00c0, 0x443e,
-+ 0x7310, 0x7014, 0xa305, 0x0040, 0x443e, 0x710c, 0xa184, 0x0300,
-+ 0x00c0, 0x443e, 0xa184, 0x00ff, 0x00c0, 0x43eb, 0x7007, 0x0012,
-+ 0x7007, 0x0008, 0x7004, 0xa084, 0x0008, 0x00c0, 0x4442, 0x7007,
-+ 0x0012, 0x7108, 0x8104, 0x0048, 0x4447, 0x7003, 0x0000, 0x2049,
-+ 0x0000, 0x007c, 0x107e, 0x007e, 0x127e, 0x157e, 0x2091, 0x2200,
-+ 0x7108, 0x1078, 0x4462, 0x157f, 0x127f, 0x2091, 0x8001, 0x007f,
-+ 0x107f, 0x007c, 0x7204, 0x7500, 0x730c, 0xa384, 0x0300, 0x00c0,
-+ 0x4497, 0xa184, 0x000c, 0x00c0, 0x44bb, 0x7108, 0xa184, 0x000c,
-+ 0x00c0, 0x44bb, 0x2001, 0x04fd, 0x2004, 0xa082, 0x0005, 0x00c8,
-+ 0x447d, 0xa184, 0x0000, 0x00c0, 0x446d, 0xa184, 0x00c0, 0x8004,
-+ 0x8004, 0x8004, 0x8004, 0x8004, 0x8004, 0xa18c, 0x0030, 0xa18e,
-+ 0x0030, 0x00c0, 0x448d, 0xa085, 0x0004, 0x0079, 0x448f, 0x4499,
-+ 0x44ab, 0x4497, 0x44ab, 0x4497, 0x44f7, 0x4497, 0x44f5, 0x1078,
-+ 0x22ac, 0x7004, 0xa084, 0x0010, 0xa085, 0x0002, 0x7006, 0x8aff,
-+ 0x00c0, 0x44a6, 0x2049, 0x0000, 0x0078, 0x44aa, 0x1078, 0x46ba,
-+ 0x00c0, 0x44a6, 0x007c, 0x7004, 0xa084, 0x0010, 0xa085, 0x0002,
-+ 0x7006, 0x8aff, 0x00c0, 0x44b6, 0x0078, 0x44ba, 0x1078, 0x46ba,
-+ 0x00c0, 0x44b6, 0x007c, 0x7007, 0x0012, 0x7108, 0x00e0, 0x44be,
-+ 0x2091, 0x6000, 0x00e0, 0x44c2, 0x2091, 0x6000, 0x7007, 0x0012,
-+ 0x7007, 0x0008, 0x7004, 0xa084, 0x0008, 0x00c0, 0x44ca, 0x7007,
-+ 0x0012, 0x7108, 0x8104, 0x0048, 0x44cf, 0x7003, 0x0000, 0x7000,
-+ 0xa005, 0x00c0, 0x44e3, 0x7004, 0xa005, 0x00c0, 0x44e3, 0x700c,
-+ 0xa005, 0x0040, 0x44e5, 0x0078, 0x44c6, 0x2049, 0x0000, 0x1078,
-+ 0x3616, 0x6818, 0xa084, 0x8000, 0x0040, 0x44f0, 0x681b, 0x0002,
-+ 0x007c, 0x1078, 0x22ac, 0x1078, 0x22ac, 0x1078, 0x4553, 0x7210,
-+ 0x7114, 0x700c, 0xa09c, 0x00ff, 0x2800, 0xa300, 0xa211, 0xa189,
-+ 0x0000, 0x1078, 0x4553, 0x2704, 0x2c58, 0xac60, 0x630c, 0x2200,
-+ 0xa322, 0x6308, 0x2100, 0xa31b, 0x2400, 0xa305, 0x0040, 0x451a,
-+ 0x00c8, 0x451a, 0x8412, 0x8210, 0x830a, 0xa189, 0x0000, 0x2b60,
-+ 0x0078, 0x4501, 0x2b60, 0x8a07, 0x007e, 0x6004, 0xa084, 0x0008,
-+ 0x0040, 0x4526, 0xa7ba, 0x43ab, 0x0078, 0x4528, 0xa7ba, 0x43a3,
-+ 0x007f, 0xa73d, 0x2c00, 0x6886, 0x6f8a, 0x6c92, 0x6b8e, 0x7007,
-+ 0x0012, 0x1078, 0x43eb, 0x007c, 0x8738, 0x2704, 0xa005, 0x00c0,
-+ 0x4547, 0x609c, 0xa005, 0x0040, 0x4550, 0x2060, 0x6004, 0xa084,
-+ 0x000f, 0xa080, 0x43b1, 0x203c, 0x87fb, 0x1040, 0x22ac, 0x8a51,
-+ 0x0040, 0x454f, 0x7008, 0xa084, 0x00c0, 0xa086, 0x00c0, 0x007c,
-+ 0x2051, 0x0000, 0x007c, 0x8a50, 0x8739, 0x2704, 0xa004, 0x00c0,
-+ 0x4567, 0x6000, 0xa064, 0x00c0, 0x455e, 0x2d60, 0x6004, 0xa084,
-+ 0x000f, 0xa080, 0x43c1, 0x203c, 0x87fb, 0x1040, 0x22ac, 0x007c,
-+ 0x127e, 0x0d7e, 0x2091, 0x2200, 0x0d7f, 0x6884, 0x2060, 0x6888,
-+ 0x6b8c, 0x6c90, 0x8057, 0xaad4, 0x00ff, 0xa084, 0x00ff, 0x007e,
-+ 0x6804, 0xa084, 0x0008, 0x007f, 0x0040, 0x4582, 0xa0b8, 0x43ab,
-+ 0x0078, 0x4584, 0xa0b8, 0x43a3, 0x7e08, 0xa6b5, 0x000c, 0x6904,
-+ 0xa18c, 0x00ff, 0xa186, 0x0007, 0x0040, 0x4592, 0xa18e, 0x000f,
-+ 0x00c0, 0x459b, 0x6820, 0xa084, 0x0040, 0x0040, 0x45a2, 0xa6b5,
-+ 0x0001, 0x0078, 0x45a2, 0x681c, 0xa084, 0x0040, 0x0040, 0x45a2,
-+ 0xa6b5, 0x0001, 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0,
-+ 0x45a4, 0x2400, 0xa305, 0x00c0, 0x45af, 0x0078, 0x45d5, 0x2c58,
-+ 0x2704, 0x6104, 0xac60, 0x6004, 0xa400, 0x701a, 0x6000, 0xa301,
-+ 0x701e, 0xa184, 0x0008, 0x0040, 0x45c5, 0x6014, 0xa081, 0x0000,
-+ 0x7022, 0x6010, 0xa081, 0x0000, 0x7026, 0x620c, 0x2400, 0xa202,
-+ 0x7012, 0x6208, 0x2300, 0xa203, 0x7016, 0x7602, 0x7007, 0x0001,
-+ 0x2b60, 0x1078, 0x4534, 0x0078, 0x45d7, 0x1078, 0x46ba, 0x00c0,
-+ 0x45d5, 0x127f, 0x2000, 0x007c, 0x127e, 0x0d7e, 0x2091, 0x2200,
-+ 0x0d7f, 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, 0x45e3,
-+ 0x7003, 0x0008, 0x127f, 0x2000, 0x007c, 0x127e, 0x0d7e, 0x2091,
-+ 0x2200, 0x0d7f, 0x2049, 0x45ed, 0x7007, 0x0004, 0x7004, 0xa084,
-+ 0x0004, 0x00c0, 0x45f6, 0x7e08, 0xa6b5, 0x000c, 0x6904, 0xa18c,
-+ 0x00ff, 0xa186, 0x0007, 0x0040, 0x4609, 0xa18e, 0x000f, 0x00c0,
-+ 0x4614, 0x6820, 0xa084, 0x0040, 0x0040, 0x4610, 0xa6b5, 0x0001,
-+ 0x6840, 0x2050, 0x0078, 0x461d, 0x681c, 0xa084, 0x0020, 0x00c0,
-+ 0x461b, 0xa6b5, 0x0001, 0x6828, 0x2050, 0x2d60, 0x6004, 0xa0bc,
-+ 0x000f, 0xa7b8, 0x43b1, 0x273c, 0x87fb, 0x00c0, 0x4631, 0x0048,
-+ 0x462b, 0x1078, 0x22ac, 0x689c, 0xa065, 0x0040, 0x4635, 0x0078,
-+ 0x461e, 0x1078, 0x46ba, 0x00c0, 0x4631, 0x127f, 0x2000, 0x007c,
-+ 0x127e, 0x007e, 0x017e, 0x0d7e, 0x2091, 0x2200, 0x0d7f, 0x037f,
-+ 0x047f, 0x7e08, 0xa6b5, 0x000c, 0x6904, 0xa18c, 0x00ff, 0xa186,
-+ 0x0007, 0x0040, 0x464f, 0xa18e, 0x000f, 0x00c0, 0x4658, 0x6820,
-+ 0xa084, 0x0040, 0x0040, 0x465f, 0xa6b5, 0x0001, 0x0078, 0x465f,
-+ 0x681c, 0xa084, 0x0040, 0x0040, 0x465f, 0xa6b5, 0x0001, 0x2049,
-+ 0x4638, 0x017e, 0x6904, 0xa18c, 0x00ff, 0xa186, 0x0007, 0x0040,
-+ 0x466d, 0xa18e, 0x000f, 0x00c0, 0x4670, 0x6840, 0x0078, 0x4671,
-+ 0x6828, 0x017f, 0xa055, 0x0040, 0x46b7, 0x2d70, 0x2e60, 0x7004,
-+ 0xa0bc, 0x000f, 0xa7b8, 0x43b1, 0x273c, 0x87fb, 0x00c0, 0x468b,
-+ 0x0048, 0x4684, 0x1078, 0x22ac, 0x709c, 0xa075, 0x2060, 0x0040,
-+ 0x46b7, 0x0078, 0x4677, 0x2704, 0xae68, 0x680c, 0xa422, 0x6808,
-+ 0xa31b, 0x0048, 0x46a4, 0x8a51, 0x00c0, 0x4698, 0x1078, 0x22ac,
-+ 0x8738, 0x2704, 0xa005, 0x00c0, 0x468c, 0x709c, 0xa075, 0x2060,
-+ 0x0040, 0x46b7, 0x0078, 0x4677, 0x8422, 0x8420, 0x831a, 0xa399,
-+ 0x0000, 0x690c, 0x2400, 0xa122, 0x6908, 0x2300, 0xa11b, 0x00c8,
-+ 0x46b3, 0x1078, 0x22ac, 0x2071, 0x0020, 0x0078, 0x45a2, 0x127f,
-+ 0x2000, 0x007c, 0x7008, 0xa084, 0x00c0, 0xa086, 0x00c0, 0x0040,
-+ 0x46d7, 0x2704, 0xac08, 0x2104, 0x701e, 0x8108, 0x2104, 0x701a,
-+ 0x8108, 0x2104, 0x7016, 0x8108, 0x2104, 0x7012, 0x7602, 0x7004,
-+ 0xa084, 0x0010, 0xa085, 0x0001, 0x7006, 0x1078, 0x4534, 0x007c,
-+ 0x127e, 0x007e, 0x0d7e, 0x2091, 0x2200, 0x2049, 0x46d8, 0x0d7f,
-+ 0x087f, 0x7108, 0xa184, 0x00c0, 0x00c0, 0x4702, 0x017e, 0x6904,
-+ 0xa18c, 0x00ff, 0xa186, 0x0007, 0x0040, 0x46f2, 0xa18e, 0x000f,
-+ 0x00c0, 0x46f5, 0x6840, 0x0078, 0x46f6, 0x6828, 0x017f, 0xa005,
-+ 0x0040, 0x471f, 0x0078, 0x4332, 0x0020, 0x4702, 0x1078, 0x44f7,
-+ 0x0078, 0x471f, 0x7108, 0x7008, 0xa106, 0x00c0, 0x4702, 0x017e,
-+ 0x017f, 0x810c, 0x00c8, 0x4711, 0x7108, 0x1078, 0x4462, 0x0078,
-+ 0x46e1, 0x7007, 0x0010, 0x7108, 0x7008, 0xa106, 0x00c0, 0x4713,
-+ 0x017e, 0x017f, 0x810c, 0x00c8, 0x4713, 0x1078, 0x4462, 0x7008,
-+ 0xa086, 0x0002, 0x00c0, 0x46e1, 0x7000, 0xa005, 0x00c0, 0x46e1,
-+ 0x7003, 0x0000, 0x2049, 0x0000, 0x127f, 0x2000, 0x007c, 0x127e,
-+ 0x147e, 0x137e, 0x157e, 0x0c7e, 0x0d7e, 0x2091, 0x2200, 0x0d7f,
-+ 0x2049, 0x472f, 0xad80, 0x0011, 0x20a0, 0x2099, 0x0031, 0x700c,
-+ 0xa084, 0x00ff, 0x682a, 0x7007, 0x0008, 0x7007, 0x0002, 0x7003,
-+ 0x0001, 0x0040, 0x474e, 0x8000, 0x80ac, 0x53a5, 0x7007, 0x0004,
-+ 0x7004, 0xa084, 0x0004, 0x00c0, 0x4750, 0x0c7f, 0x2049, 0x0000,
-+ 0x7003, 0x0000, 0x157f, 0x137f, 0x147f, 0x127f, 0x2000, 0x007c,
-+ 0x2091, 0x6000, 0x2091, 0x8000, 0x78cc, 0xa005, 0x0040, 0x4777,
-+ 0x7994, 0x70d0, 0xa106, 0x00c0, 0x4777, 0x7804, 0xa005, 0x0040,
-+ 0x4777, 0x7807, 0x0000, 0x0068, 0x4777, 0x2091, 0x4080, 0x7820,
-+ 0x8001, 0x7822, 0x00c0, 0x47d2, 0x7824, 0x7822, 0x2069, 0x4d40,
-+ 0x6800, 0xa084, 0x0007, 0x0040, 0x4795, 0xa086, 0x0002, 0x0040,
-+ 0x4795, 0x6834, 0xa00d, 0x0040, 0x4795, 0x2104, 0xa005, 0x0040,
-+ 0x4795, 0x8001, 0x200a, 0x0040, 0x487a, 0x7848, 0xa005, 0x0040,
-+ 0x47a3, 0x8001, 0x784a, 0x00c0, 0x47a3, 0x2009, 0x0102, 0x6844,
-+ 0x200a, 0x1078, 0x20a0, 0x6890, 0xa005, 0x0040, 0x47af, 0x8001,
-+ 0x6892, 0x00c0, 0x47af, 0x686f, 0x0000, 0x6873, 0x0001, 0x2061,
-+ 0x5000, 0x20a9, 0x0100, 0x2009, 0x0002, 0x6034, 0xa005, 0x0040,
-+ 0x47c5, 0x8001, 0x6036, 0x00c0, 0x47c5, 0x6010, 0xa005, 0x0040,
-+ 0x47c5, 0x017e, 0x1078, 0x20a0, 0x017f, 0xace0, 0x0010, 0x0070,
-+ 0x47cb, 0x0078, 0x47b5, 0x8109, 0x0040, 0x47d2, 0x20a9, 0x0100,
-+ 0x0078, 0x47b5, 0x1078, 0x47df, 0x1078, 0x4804, 0x2009, 0x4d51,
-+ 0x2104, 0x2009, 0x0102, 0x200a, 0x2091, 0x8001, 0x007c, 0x7834,
-+ 0x8001, 0x7836, 0x00c0, 0x4803, 0x7838, 0x7836, 0x2091, 0x8000,
-+ 0x7844, 0xa005, 0x00c0, 0x47ee, 0x2001, 0x0101, 0x8001, 0x7846,
-+ 0xa080, 0x7000, 0x2040, 0x2004, 0xa065, 0x0040, 0x4803, 0x6024,
-+ 0xa005, 0x0040, 0x47ff, 0x8001, 0x6026, 0x0040, 0x4833, 0x6000,
-+ 0x2c40, 0x0078, 0x47f4, 0x007c, 0x7828, 0x8001, 0x782a, 0x00c0,
-+ 0x4832, 0x782c, 0x782a, 0x7830, 0xa005, 0x00c0, 0x4811, 0x2001,
-+ 0x0200, 0x8001, 0x7832, 0x8003, 0x8003, 0x8003, 0x8003, 0xa090,
-+ 0x5000, 0xa298, 0x0002, 0x2304, 0xa084, 0x0008, 0x0040, 0x4832,
-+ 0xa290, 0x0009, 0x2204, 0xa005, 0x0040, 0x482a, 0x8001, 0x2012,
-+ 0x00c0, 0x4832, 0x2304, 0xa084, 0xfff7, 0xa085, 0x0080, 0x201a,
-+ 0x1078, 0x20a0, 0x007c, 0x2069, 0x4d40, 0x6800, 0xa005, 0x0040,
-+ 0x483d, 0x6848, 0xac06, 0x0040, 0x487a, 0x601b, 0x0006, 0x60b4,
-+ 0xa084, 0x3f00, 0x601e, 0x6020, 0xa084, 0x00ff, 0xa085, 0x0060,
-+ 0x6022, 0x6000, 0x2042, 0x6714, 0x6f82, 0x1078, 0x18b9, 0x6818,
-+ 0xa005, 0x0040, 0x4855, 0x8001, 0x681a, 0x6808, 0xa084, 0xffef,
-+ 0x680a, 0x6810, 0x8001, 0x00d0, 0x485f, 0x1078, 0x22ac, 0x6812,
-+ 0x6033, 0x0000, 0x602f, 0x0000, 0x2c68, 0x1078, 0x1b8e, 0x2069,
-+ 0x4d40, 0x7944, 0xa184, 0x0100, 0x2001, 0x0006, 0x686e, 0x00c0,
-+ 0x4875, 0x6986, 0x2001, 0x0004, 0x686e, 0x1078, 0x209b, 0x2091,
-+ 0x8001, 0x007c, 0x2069, 0x0100, 0x2009, 0x4d40, 0x2104, 0xa084,
-+ 0x0007, 0x0040, 0x48d6, 0xa086, 0x0007, 0x00c0, 0x4890, 0x0d7e,
-+ 0x2009, 0x4d52, 0x216c, 0x1078, 0x385e, 0x0d7f, 0x0078, 0x48d6,
-+ 0x2009, 0x4d52, 0x2164, 0x1078, 0x2257, 0x601b, 0x0006, 0x6858,
-+ 0xa084, 0x3f00, 0x601e, 0x6020, 0xa084, 0x00ff, 0xa085, 0x0048,
-+ 0x6022, 0x6033, 0x0000, 0x602f, 0x0000, 0x6830, 0xa084, 0x0040,
-+ 0x0040, 0x48ca, 0x684b, 0x0004, 0x20a9, 0x0014, 0x6848, 0xa084,
-+ 0x0004, 0x0040, 0x48b7, 0x0070, 0x48b7, 0x0078, 0x48ae, 0x684b,
-+ 0x0009, 0x20a9, 0x0014, 0x6848, 0xa084, 0x0001, 0x0040, 0x48c4,
-+ 0x0070, 0x48c4, 0x0078, 0x48bb, 0x20a9, 0x00fa, 0x0070, 0x48ca,
-+ 0x0078, 0x48c6, 0x6808, 0xa084, 0xfffd, 0x680a, 0x681b, 0x0048,
-+ 0x2009, 0x4d5b, 0x200b, 0x0007, 0x784c, 0x784a, 0x2091, 0x8001,
-+ 0x007c, 0x2079, 0x4d00, 0x1078, 0x4904, 0x1078, 0x48e8, 0x1078,
-+ 0x48f6, 0x7833, 0x0000, 0x7847, 0x0000, 0x784b, 0x0000, 0x007c,
-+ 0x2019, 0x0003, 0x2011, 0x4d46, 0x2204, 0xa086, 0x003c, 0x0040,
-+ 0x48f3, 0x2019, 0x0002, 0x7b2a, 0x7b2e, 0x007c, 0x2019, 0x0039,
-+ 0x2011, 0x4d46, 0x2204, 0xa086, 0x003c, 0x0040, 0x4901, 0x2019,
-+ 0x0027, 0x7b36, 0x7b3a, 0x007c, 0x2019, 0x3971, 0x2011, 0x4d46,
-+ 0x2204, 0xa086, 0x003c, 0x0040, 0x490f, 0x2019, 0x2626, 0x7b22,
-+ 0x7b26, 0x783f, 0x0000, 0x7843, 0x000a, 0x007c, 0x0020, 0x002b,
-+ 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020,
-+ 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020,
-+ 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020,
-+ 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020,
-+ 0x0000, 0x0014, 0x0014, 0x9849, 0x0014, 0x0014, 0x0014, 0x0014,
-+ 0x0014, 0x0014, 0x0014, 0x0080, 0x000f, 0x0000, 0x0201, 0x0604,
-+ 0x0c08, 0x2120, 0x4022, 0xf880, 0x0018, 0x300b, 0xa201, 0x0014,
-+ 0xa200, 0x0014, 0xa200, 0x0214, 0x0000, 0x006c, 0x0002, 0x0014,
-+ 0x98e1, 0x009e, 0x00ab, 0xa202, 0x8838, 0x8180, 0x842a, 0x84a0,
-+ 0x3806, 0x8839, 0x28c2, 0x9cc1, 0x985d, 0x0864, 0x9891, 0x28c1,
-+ 0x9cc1, 0xa203, 0x300c, 0x2847, 0x8161, 0x846a, 0x8000, 0x84a4,
-+ 0x1856, 0x883a, 0x986d, 0x28e2, 0x9c9e, 0x985d, 0x0864, 0x9891,
-+ 0x300c, 0x28e1, 0x9c9e, 0x2809, 0xa206, 0x64c0, 0x67a0, 0x6fc0,
-+ 0x1814, 0x883b, 0x782c, 0x786d, 0x9881, 0x282b, 0xa207, 0x64a0,
-+ 0x67a0, 0x6fc0, 0x1814, 0x883b, 0x7822, 0x883e, 0x9885, 0x8576,
-+ 0x8677, 0x206b, 0x28c1, 0x9cc1, 0x2044, 0x2103, 0x20a2, 0x2081,
-+ 0x986d, 0xa209, 0x2901, 0x989a, 0x0014, 0xa205, 0x8000, 0x85a4,
-+ 0x1872, 0x879a, 0x883c, 0x1fe2, 0xc601, 0xa20a, 0x856e, 0x0704,
-+ 0x9c9e, 0x0014, 0xa204, 0x8000, 0x85a4, 0x84a8, 0x3009, 0x19e2,
-+ 0xf868, 0x8176, 0x86eb, 0x85eb, 0x872e, 0x87a9, 0x883f, 0x08e6,
-+ 0x989e, 0xf881, 0x9899, 0xc801, 0x0014, 0xf8c1, 0x0016, 0x85b2,
-+ 0x80f0, 0x9532, 0xfb02, 0x1de2, 0x0014, 0x8532, 0xf241, 0x0014,
-+ 0x1de2, 0x84a8, 0xd7a0, 0x1fe6, 0x0014, 0xa208, 0x6043, 0x8008,
-+ 0x1dc1, 0x0016, 0x8000, 0x84a4, 0x8160, 0x842a, 0xf041, 0x3008,
-+ 0x84a8, 0x11d6, 0x7042, 0x20dd, 0x0011, 0x20d4, 0x8822, 0x0016,
-+ 0x8000, 0x2847, 0x1011, 0x98d4, 0x8000, 0xa000, 0x2802, 0x1011,
-+ 0x98da, 0x986d, 0x283e, 0x1011, 0x98de, 0xa20b, 0x0017, 0x300c,
-+ 0x8000, 0x85a4, 0x1de2, 0xdb81, 0x0014, 0x0210, 0x98ec, 0x0014,
-+ 0x26e0, 0x873a, 0xfb02, 0x19f2, 0x1fe2, 0x0014, 0xa20d, 0x8180,
-+ 0x842a, 0x84a0, 0x3806, 0x0210, 0x9cc6, 0x0704, 0x0000, 0x006c,
-+ 0x0002, 0x984f, 0x0014, 0x009e, 0x00a3, 0x0017, 0x60ff, 0x300c,
-+ 0x8720, 0xa211, 0x9cc7, 0x8772, 0x8837, 0x2007, 0x10d2, 0x78e2,
-+ 0x9ccb, 0x9858, 0xd984, 0xf0e2, 0xf0a1, 0x98c4, 0x0014, 0x8831,
-+ 0xd167, 0x8830, 0x8830, 0x800f, 0x9401, 0xb520, 0xc802, 0x8820,
-+ 0x9878, 0x2301, 0x9878, 0x10d2, 0x78e2, 0x9ccb, 0x986d, 0xf123,
-+ 0xf142, 0xf101, 0x98bd, 0x10d2, 0x70f8, 0x8832, 0x8203, 0x6001,
-+ 0x0014, 0x6845, 0x0214, 0xa21b, 0x9cc7, 0x2001, 0x98bc, 0x8202,
-+ 0x1852, 0xd184, 0xd163, 0x8834, 0x8001, 0x9889, 0x3027, 0x84a8,
-+ 0x1856, 0x8833, 0x0014, 0xa218, 0x6981, 0x9cb3, 0x6b2a, 0x6902,
-+ 0x1834, 0x9899, 0x1814, 0x8010, 0x8592, 0x8026, 0x84b9, 0x7021,
-+ 0x0014, 0x8000, 0x85a4, 0x84a8, 0x6946, 0xa213, 0x1462, 0xa213,
-+ 0x8000, 0x16e1, 0x98ac, 0x6969, 0xa214, 0x61c2, 0x8002, 0x14e1,
-+ 0x8004, 0x16e1, 0x0101, 0x300a, 0x8827, 0x0014, 0xa217, 0x9cb3,
-+ 0x0014, 0x8000, 0x85a4, 0x8181, 0x842a, 0x84a8, 0x1ce6, 0x0016,
-+ 0xa212, 0x9cc7, 0x10d2, 0x70e4, 0x0004, 0x8007, 0x9424, 0xcc1a,
-+ 0x9ccb, 0x98bc, 0x8827, 0x300a, 0x0013, 0x8000, 0x84a4, 0x84a8,
-+ 0x0016, 0x2002, 0x10d2, 0x98cb, 0x870e, 0xa21d, 0x0012, 0x878e,
-+ 0x85b2, 0x80f8, 0x9424, 0xa532, 0x84a4, 0x8000, 0x84a8, 0x0016,
-+ 0xa21c, 0x1035, 0x988d, 0xa210, 0x8180, 0x842a, 0x84a0, 0xa000,
-+ 0x8010, 0x8592, 0x853b, 0xd044, 0x8022, 0x3807, 0x84bb, 0x98ed,
-+ 0x8021, 0x3807, 0x84b9, 0x300c, 0x817e, 0x872b, 0x8772, 0x988d,
-+ 0x0000, 0x0020, 0x002b, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000,
-+ 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000,
-+ 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000,
-+ 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000,
-+ 0x0020, 0x0000, 0x0020, 0x0000, 0x0014, 0x0014, 0x9849, 0x0014,
-+ 0x0014, 0x98ee, 0x98d9, 0x0014, 0x0014, 0x0014, 0x0080, 0x013d,
-+ 0x0000, 0x0201, 0x0604, 0x0c08, 0x2120, 0x4022, 0xf880, 0x0018,
-+ 0x300b, 0xa201, 0x0014, 0xa200, 0x0014, 0xa200, 0x0214, 0xa202,
-+ 0x8838, 0x3806, 0x8839, 0x28c2, 0x9cba, 0xa804, 0x0864, 0xa835,
-+ 0x28c1, 0x9cba, 0xa203, 0x300c, 0x2846, 0x8161, 0x846a, 0x8300,
-+ 0x1856, 0x883a, 0xa806, 0x28e2, 0x9c99, 0xa8f4, 0x0864, 0xa825,
-+ 0x300c, 0x28e1, 0x9c99, 0x2809, 0xa206, 0x64c0, 0x67a0, 0x6fc0,
-+ 0x1814, 0x883b, 0x782c, 0x786d, 0xa808, 0x282b, 0xa207, 0x64a0,
-+ 0x67a0, 0x6fc0, 0x1814, 0x883b, 0x7822, 0x883e, 0xa802, 0x8576,
-+ 0x8677, 0x206b, 0x28c1, 0x9cba, 0x2044, 0x2103, 0x20a2, 0x2081,
-+ 0xa8e0, 0xa209, 0x2901, 0xa809, 0x0014, 0xa205, 0xa300, 0x1872,
-+ 0x879a, 0x883c, 0x1fe2, 0xc601, 0xa20a, 0x856e, 0x0704, 0x9c99,
-+ 0x0014, 0xa204, 0xa300, 0x3009, 0x19e2, 0xf868, 0x8176, 0x86eb,
-+ 0x85eb, 0x872e, 0x87a9, 0x883f, 0x08e6, 0xa8f3, 0xf881, 0xa8ec,
-+ 0xc801, 0x0014, 0xf8c1, 0x0016, 0x85b2, 0x80f0, 0x9532, 0xfb02,
-+ 0x1de2, 0x0014, 0x8532, 0xf241, 0x0014, 0x1de2, 0x84a8, 0xd7a0,
-+ 0x1fe6, 0x0014, 0xa208, 0x6043, 0x8008, 0x1dc1, 0x0016, 0x8300,
-+ 0x8160, 0x842a, 0xf041, 0x3008, 0x84a8, 0x11d6, 0x7042, 0x20dd,
-+ 0x0011, 0x20d5, 0x8822, 0x0016, 0x8000, 0x2847, 0x1011, 0xa8fc,
-+ 0x8000, 0xa000, 0x2802, 0x1011, 0xa8fd, 0xa893, 0x283e, 0x1011,
-+ 0xa8fd, 0xa20b, 0x0017, 0x300c, 0xa300, 0x1de2, 0xdb81, 0x0014,
-+ 0x0210, 0xa801, 0x0014, 0x26e0, 0x873a, 0xfb02, 0x19f2, 0x1fe2,
-+ 0x0014, 0xa20d, 0x3806, 0x0210, 0x9cbf, 0x0704, 0x0017, 0x60ff,
-+ 0x300c, 0x8720, 0xa211, 0x9d63, 0x8772, 0x8837, 0x2007, 0x10d2,
-+ 0x78e2, 0x9d66, 0xa8fc, 0xd984, 0xf0e2, 0xf0a1, 0xa861, 0x0014,
-+ 0x8831, 0xd167, 0x8830, 0x8830, 0x800f, 0x9401, 0xb520, 0xc802,
-+ 0x8820, 0xa80d, 0x2301, 0xa80b, 0x10d2, 0x78e2, 0x9d66, 0xa8fc,
-+ 0xf123, 0xf142, 0xf101, 0xa845, 0x10d2, 0x70f8, 0x8832, 0x8203,
-+ 0x6001, 0x0014, 0x6845, 0x0214, 0xa21b, 0x9d63, 0x2001, 0xa838,
-+ 0x8202, 0x1852, 0xd184, 0xd163, 0x8834, 0x8001, 0xa801, 0x3027,
-+ 0x84a8, 0x1856, 0x8833, 0x0014, 0xa218, 0x6981, 0x9d50, 0x6b2a,
-+ 0x6902, 0x1834, 0xa805, 0x1814, 0x8010, 0x8592, 0x8026, 0x84b9,
-+ 0x7021, 0x0014, 0xa300, 0x6946, 0xa213, 0x1462, 0xa213, 0x8000,
-+ 0x16e1, 0xa807, 0x6969, 0xa214, 0x61c2, 0x8002, 0x14e1, 0x8004,
-+ 0x16e1, 0x0101, 0x300a, 0x8827, 0x0014, 0xa217, 0x9d50, 0x0014,
-+ 0xa300, 0x8181, 0x842a, 0x84a8, 0x1ce6, 0x0016, 0xa212, 0x9d63,
-+ 0x10d2, 0x70e4, 0x0004, 0x8007, 0x9424, 0xcc1a, 0x9d66, 0xa8f8,
-+ 0x8827, 0x300a, 0x0013, 0x8000, 0x84a4, 0x0016, 0x2002, 0x10d2,
-+ 0xa8fd, 0x870e, 0xa21d, 0x0012, 0x878e, 0x85b2, 0x80f8, 0x9424,
-+ 0xa532, 0x84a4, 0x0016, 0xa21c, 0x1035, 0xa8b6, 0xa210, 0x3807,
-+ 0x300c, 0x817e, 0x872b, 0x8772, 0xa8af, 0x0000, 0xd66f
-+};
-+#endif
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/scsi/isp/asm_1040.h 2003-07-19 17:06:32.000000000 -0700
-@@ -0,0 +1,3545 @@
-+/* @(#)asm_1040.h 1.2 */
-+/*
-+ * Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000 Qlogic, Inc.
-+ * All rights reserved.
-+ *
-+ * Redistribution and use in source and binary forms are permitted provided
-+ * that the following conditions are met:
-+ * 1. Redistribution of source code must retain the above copyright
-+ * notice, this list of conditions and the following disclaimer.
-+ * 2. Redistribution in binary form must reproduce the above copyright
-+ * notice, this list of conditions and the following disclaimer in the
-+ * documentation and/or other materials provided with the distribution.
-+ * 3. The name of the author may not be used to endorse or promote products
-+ * derived from this software without specific prior written permission
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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, 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) HOWEVER CAUSED AND ON ANY
-+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-+ */
-+
-+/************************************************************************
-+ * *
-+ * --- ISP1040 Initiator Firmware --- *
-+ * 32 LUN Support *
-+ * *
-+ ************************************************************************/
-+#ifndef ISP_TARGET_MODE
-+/*
-+ * Firmware Version 4.66.00 (14:49 Sep 05, 2000)
-+ */
-+static const u_int16_t isp_1040_risc_code[] = {
-+ 0x0078, 0x1041, 0x0000, 0x2cd0, 0x0000, 0x2043, 0x4f50, 0x5952,
-+ 0x4947, 0x4854, 0x2031, 0x3939, 0x312c, 0x3139, 0x3932, 0x2c31,
-+ 0x3939, 0x332c, 0x3139, 0x3934, 0x2051, 0x4c4f, 0x4749, 0x4320,
-+ 0x434f, 0x5250, 0x4f52, 0x4154, 0x494f, 0x4e00, 0x2049, 0x5350,
-+ 0x3130, 0x3230, 0x2046, 0x6972, 0x6d77, 0x6172, 0x6520, 0x2056,
-+ 0x6572, 0x7369, 0x6f6e, 0x2030, 0x342e, 0x3636, 0x2020, 0x2043,
-+ 0x7573, 0x746f, 0x6d65, 0x7220, 0x4e6f, 0x2e20, 0x3030, 0x2050,
-+ 0x726f, 0x6475, 0x6374, 0x204e, 0x6f2e, 0x2020, 0x3030, 0x2020,
-+ 0x2400, 0x2001, 0x04fd, 0x2004, 0xa082, 0x0005, 0x0048, 0x104c,
-+ 0x0038, 0x1052, 0x0078, 0x104e, 0x0028, 0x1052, 0x20b9, 0x1212,
-+ 0x0078, 0x1054, 0x20b9, 0x1313, 0x2071, 0x0010, 0x70c3, 0x0004,
-+ 0x20c9, 0x62ff, 0x2089, 0x1185, 0x70c7, 0x4953, 0x70cb, 0x5020,
-+ 0x70cf, 0x2020, 0x70d3, 0x0004, 0x3f00, 0x70d6, 0x20c1, 0x0008,
-+ 0x2019, 0x0000, 0x2009, 0xfeff, 0x2100, 0x200b, 0xa5a5, 0xa1ec,
-+ 0x7fff, 0x2d64, 0x206b, 0x0a0a, 0xaddc, 0x3fff, 0x2b54, 0x205b,
-+ 0x5050, 0x2114, 0xa286, 0xa5a5, 0x0040, 0x10c4, 0xa386, 0x000f,
-+ 0x0040, 0x108a, 0x2c6a, 0x2a5a, 0x20c1, 0x0000, 0x2019, 0x000f,
-+ 0x0078, 0x106a, 0x2c6a, 0x2a5a, 0x20c1, 0x0008, 0x2009, 0x7fff,
-+ 0x2148, 0x2944, 0x204b, 0x0a0a, 0xa9bc, 0x3fff, 0x2734, 0x203b,
-+ 0x5050, 0x2114, 0xa286, 0x0a0a, 0x0040, 0x10ae, 0x284a, 0x263a,
-+ 0x20c1, 0x0004, 0x2009, 0x3fff, 0x2134, 0x200b, 0x5050, 0x2114,
-+ 0xa286, 0x5050, 0x0040, 0x10af, 0x0078, 0x118d, 0x284a, 0x263a,
-+ 0x98c0, 0xa188, 0x1000, 0x212c, 0x200b, 0xa5a5, 0x2114, 0xa286,
-+ 0xa5a5, 0x0040, 0x10c1, 0x250a, 0xa18a, 0x1000, 0x98c1, 0x0078,
-+ 0x10c6, 0x250a, 0x0078, 0x10c6, 0x2c6a, 0x2a5a, 0x2130, 0xa18a,
-+ 0x0040, 0x2128, 0xa1a2, 0x3d00, 0x8424, 0x8424, 0x8424, 0x8424,
-+ 0x8424, 0x8424, 0xa192, 0x6300, 0x2009, 0x0000, 0x2001, 0x002f,
-+ 0x1078, 0x1bc9, 0x2218, 0x2079, 0x3d00, 0x2fa0, 0x2408, 0x2011,
-+ 0x0000, 0x20a9, 0x0040, 0x42a4, 0x8109, 0x00c0, 0x10e1, 0x7ee6,
-+ 0x8528, 0x7dda, 0x7cde, 0x7be2, 0x787b, 0x0000, 0x2031, 0x0030,
-+ 0x78c3, 0x0101, 0x780b, 0x0002, 0x780f, 0x0002, 0x784f, 0x0003,
-+ 0x7803, 0x0002, 0x2069, 0x3d40, 0x2001, 0x04fd, 0x2004, 0xa082,
-+ 0x0005, 0x0048, 0x1107, 0x0038, 0x1109, 0x0078, 0x110d, 0x00a8,
-+ 0x110d, 0x681b, 0x003c, 0x0078, 0x110f, 0x681b, 0x0028, 0x6807,
-+ 0x0007, 0x680b, 0x00fa, 0x680f, 0x0008, 0x6813, 0x0005, 0x681f,
-+ 0x0000, 0x6823, 0x0006, 0x6817, 0x0008, 0x6827, 0x0000, 0x2069,
-+ 0x3f80, 0x2011, 0x0020, 0x2009, 0x0010, 0x680b, 0x0c19, 0x680f,
-+ 0x0019, 0x6803, 0xfd00, 0x6807, 0x0018, 0x6a1a, 0x2d00, 0xa0e8,
-+ 0x0008, 0xa290, 0x0004, 0x8109, 0x00c0, 0x1125, 0x2069, 0x4000,
-+ 0x2009, 0x0002, 0x20a9, 0x0100, 0x6837, 0x0000, 0x680b, 0x0040,
-+ 0x7be4, 0xa386, 0xfeff, 0x00c0, 0x114b, 0x6817, 0x0100, 0x681f,
-+ 0x0064, 0x0078, 0x114f, 0x6817, 0x0064, 0x681f, 0x0002, 0xade8,
-+ 0x0010, 0x0070, 0x1155, 0x0078, 0x113c, 0x8109, 0x00c0, 0x113a,
-+ 0x1078, 0x1f20, 0x1078, 0x3792, 0x1078, 0x19e0, 0x1078, 0x3c4a,
-+ 0x3200, 0xa085, 0x000d, 0x2090, 0x70c3, 0x0000, 0x0090, 0x116f,
-+ 0x70c0, 0xa086, 0x0002, 0x00c0, 0x116f, 0x1078, 0x12a4, 0x1078,
-+ 0x11b6, 0x78c0, 0xa005, 0x00c0, 0x117b, 0x1078, 0x1bf2, 0x0068,
-+ 0x117f, 0x1078, 0x1e44, 0x0068, 0x117f, 0x1078, 0x1adf, 0x00e0,
-+ 0x116f, 0x1078, 0x3ac1, 0x0078, 0x116f, 0x118d, 0x1192, 0x20e8,
-+ 0x20e8, 0x380c, 0x380c, 0x20e8, 0x20e8, 0x0088, 0x118d, 0x2091,
-+ 0x8001, 0x007c, 0x0088, 0x1192, 0x2091, 0x8001, 0x007c, 0x0078,
-+ 0x1197, 0x0078, 0x1199, 0x2009, 0x0022, 0x2104, 0xa086, 0x4000,
-+ 0x0040, 0x11b1, 0x7008, 0x800b, 0x00c8, 0x11b1, 0x7007, 0x0002,
-+ 0xa08c, 0x01e0, 0x00c0, 0x11b2, 0xa084, 0x0008, 0x0040, 0x11b1,
-+ 0x087a, 0x097a, 0x70c3, 0x4002, 0x0078, 0x12a7, 0x0068, 0x1221,
-+ 0x2061, 0x0000, 0x6018, 0xa084, 0x0001, 0x00c0, 0x1221, 0x7814,
-+ 0xa005, 0x00c0, 0x11c7, 0x0010, 0x1222, 0x0078, 0x1221, 0x2009,
-+ 0x3d68, 0x2104, 0xa005, 0x00c0, 0x1221, 0x2009, 0x3d71, 0x200b,
-+ 0x0000, 0x7914, 0xa186, 0x0042, 0x00c0, 0x11ec, 0x7816, 0x2009,
-+ 0x3d6f, 0x2164, 0x200b, 0x0000, 0x6018, 0x70c6, 0x6014, 0x70ca,
-+ 0x611c, 0xa18c, 0xff00, 0x6020, 0xa084, 0x00ff, 0xa105, 0x70ce,
-+ 0x1078, 0x19d2, 0x0078, 0x121f, 0x7814, 0xa086, 0x0018, 0x00c0,
-+ 0x11f3, 0x1078, 0x16cd, 0x7817, 0x0000, 0x2009, 0x3d6f, 0x2104,
-+ 0xa065, 0x0040, 0x120f, 0x0c7e, 0x609c, 0x2060, 0x1078, 0x1a30,
-+ 0x0c7f, 0x609f, 0x0000, 0x1078, 0x17b3, 0x2009, 0x0018, 0x6087,
-+ 0x0103, 0x1078, 0x1959, 0x00c0, 0x121b, 0x1078, 0x19d2, 0x2009,
-+ 0x3d6f, 0x200b, 0x0000, 0x2009, 0x3d69, 0x2104, 0x200b, 0x0000,
-+ 0xa005, 0x0040, 0x121f, 0x2001, 0x4005, 0x0078, 0x12a6, 0x0078,
-+ 0x12a4, 0x007c, 0x70c3, 0x0000, 0x70c7, 0x0000, 0x70cb, 0x0000,
-+ 0x70cf, 0x0000, 0x70c0, 0xa0bc, 0xffc0, 0x00c0, 0x1272, 0x2038,
-+ 0x0079, 0x1232, 0x12a4, 0x12ff, 0x12c3, 0x12ff, 0x1368, 0x1368,
-+ 0x12ba, 0x17cb, 0x1373, 0x12b2, 0x12c7, 0x12c9, 0x12cb, 0x12cd,
-+ 0x17d0, 0x12b2, 0x1385, 0x13c1, 0x16e5, 0x17c5, 0x12cf, 0x15fa,
-+ 0x161c, 0x163a, 0x1667, 0x15b3, 0x15c1, 0x15d5, 0x15e9, 0x1445,
-+ 0x12b2, 0x13f3, 0x13f9, 0x13fe, 0x1403, 0x1409, 0x140e, 0x1413,
-+ 0x1418, 0x141d, 0x1421, 0x1436, 0x1442, 0x12b2, 0x12b2, 0x12b2,
-+ 0x12b2, 0x1451, 0x145a, 0x1469, 0x148f, 0x1499, 0x14a0, 0x14e0,
-+ 0x14ef, 0x14fe, 0x1510, 0x1593, 0x15a3, 0x12b2, 0x12b2, 0x12b2,
-+ 0x12b2, 0x15a8, 0xa0bc, 0xffa0, 0x00c0, 0x12b2, 0x2038, 0xa084,
-+ 0x001f, 0x0079, 0x127b, 0x17e7, 0x17ea, 0x17fa, 0x189f, 0x18d8,
-+ 0x1914, 0x1931, 0x1886, 0x12b2, 0x12b2, 0x1935, 0x193d, 0x12b2,
-+ 0x12b2, 0x12b2, 0x12b2, 0x12f5, 0x135e, 0x137b, 0x13b7, 0x16db,
-+ 0x12b2, 0x12b2, 0x12b2, 0x12b2, 0x1943, 0x18f0, 0x18fa, 0x18fe,
-+ 0x190c, 0x12b2, 0x12b2, 0x72ca, 0x71c6, 0x2001, 0x4006, 0x0078,
-+ 0x12a6, 0x73ce, 0x72ca, 0x71c6, 0x2001, 0x4000, 0x70c2, 0x0068,
-+ 0x12a7, 0x2061, 0x0000, 0x601b, 0x0001, 0x2091, 0x5000, 0x2091,
-+ 0x4080, 0x007c, 0x70c3, 0x4001, 0x0078, 0x12a7, 0x70c3, 0x4006,
-+ 0x0078, 0x12a7, 0x2099, 0x0041, 0x20a1, 0x0041, 0x20a9, 0x0005,
-+ 0x53a3, 0x0078, 0x12a4, 0x70c4, 0x70c3, 0x0004, 0x007a, 0x0078,
-+ 0x12a4, 0x0078, 0x12a4, 0x0078, 0x12a4, 0x0078, 0x12a4, 0x2091,
-+ 0x8000, 0x70c3, 0x0000, 0x70c7, 0x4953, 0x70cb, 0x5020, 0x70cf,
-+ 0x2020, 0x70d3, 0x0004, 0x3f00, 0x70d6, 0x2079, 0x0000, 0x781b,
-+ 0x0001, 0x2031, 0x0030, 0x2059, 0x1000, 0x2029, 0x0457, 0x2051,
-+ 0x0470, 0x2061, 0x0472, 0x20b9, 0xffff, 0x20c1, 0x0000, 0x2091,
-+ 0x5000, 0x2091, 0x4080, 0x0078, 0x0455, 0x1078, 0x1b4c, 0x00c0,
-+ 0x12b6, 0x75d8, 0x74dc, 0x75da, 0x74de, 0x0078, 0x1302, 0x2029,
-+ 0x0000, 0x2520, 0x71d0, 0x72c8, 0x73cc, 0x70c4, 0x20a0, 0x2098,
-+ 0x2031, 0x0030, 0x81ff, 0x0040, 0x12a4, 0x7007, 0x0004, 0x731a,
-+ 0x721e, 0x7422, 0x7526, 0x2051, 0x0012, 0x2049, 0x133d, 0x2041,
-+ 0x12a4, 0x7003, 0x0002, 0xa786, 0x0001, 0x0040, 0x1325, 0xa786,
-+ 0x0050, 0x0040, 0x1325, 0x0078, 0x132b, 0x2049, 0x134a, 0x2041,
-+ 0x1356, 0x7003, 0x0003, 0x7017, 0x0000, 0x810b, 0x7112, 0x00c8,
-+ 0x1333, 0x7017, 0x0001, 0x7007, 0x0001, 0xa786, 0x0001, 0x0040,
-+ 0x134a, 0xa786, 0x0050, 0x0040, 0x134a, 0x700c, 0xa084, 0x007f,
-+ 0x2009, 0x0040, 0xa102, 0x8004, 0x094a, 0x20a8, 0x26a0, 0x53a6,
-+ 0x0078, 0x119b, 0x700c, 0xa084, 0x007f, 0x0040, 0x134a, 0x80ac,
-+ 0x0048, 0x134a, 0x2698, 0x53a5, 0x0078, 0x119b, 0x700c, 0xa084,
-+ 0x007f, 0x80ac, 0x2698, 0x53a5, 0x0078, 0x12a4, 0x1078, 0x1b4c,
-+ 0x00c0, 0x12b6, 0x75d8, 0x74dc, 0x75da, 0x74de, 0x0078, 0x1302,
-+ 0x71c4, 0x70c8, 0x2114, 0xa79e, 0x0004, 0x00c0, 0x1370, 0x200a,
-+ 0x72ca, 0x0078, 0x12a3, 0x70c7, 0x0004, 0x70cb, 0x0042, 0x70cf,
-+ 0x0000, 0x0078, 0x12a4, 0x1078, 0x1b4c, 0x00c0, 0x12b6, 0x75d8,
-+ 0x76dc, 0x75da, 0x76de, 0x0078, 0x1388, 0x2029, 0x0000, 0x2530,
-+ 0x70c4, 0x72c8, 0x73cc, 0x74d0, 0x70c6, 0x72ca, 0x73ce, 0x74d2,
-+ 0xa005, 0x0040, 0x13b1, 0xa40a, 0x0040, 0x1398, 0x00c8, 0x13a2,
-+ 0x8001, 0x788a, 0xa084, 0xfc00, 0x0040, 0x13a6, 0x78c0, 0xa085,
-+ 0x0001, 0x78c2, 0x2001, 0x4005, 0x0078, 0x12a6, 0x7a92, 0x7b96,
-+ 0x7d9a, 0x7e9e, 0x7c8e, 0x78c0, 0xa084, 0xfffc, 0x78c2, 0x0078,
-+ 0x13b5, 0x78c0, 0xa085, 0x0001, 0x78c2, 0x0078, 0x12a4, 0x1078,
-+ 0x1b4c, 0x00c0, 0x12b6, 0x75d8, 0x76dc, 0x75da, 0x76de, 0x0078,
-+ 0x13c4, 0x2029, 0x0000, 0x2530, 0x70c4, 0x72c8, 0x73cc, 0x74d4,
-+ 0x70c6, 0x72ca, 0x73ce, 0x74d6, 0xa005, 0x0040, 0x13ed, 0xa40a,
-+ 0x0040, 0x13d4, 0x00c8, 0x13de, 0x8001, 0x78a6, 0xa084, 0xfc00,
-+ 0x0040, 0x13e2, 0x78c0, 0xa085, 0x0100, 0x78c2, 0x2001, 0x4005,
-+ 0x0078, 0x12a6, 0x7aae, 0x7bb2, 0x7db6, 0x7eba, 0x7caa, 0x78c0,
-+ 0xa084, 0xfcff, 0x78c2, 0x0078, 0x13f1, 0x78c0, 0xa085, 0x0100,
-+ 0x78c2, 0x0078, 0x12a4, 0x2009, 0x3d5f, 0x210c, 0x7ae0, 0x0078,
-+ 0x12a2, 0x2009, 0x3d41, 0x210c, 0x0078, 0x12a3, 0x2009, 0x3d42,
-+ 0x210c, 0x0078, 0x12a3, 0x2061, 0x3d40, 0x610c, 0x6210, 0x0078,
-+ 0x12a2, 0x2009, 0x3d45, 0x210c, 0x0078, 0x12a3, 0x2009, 0x3d46,
-+ 0x210c, 0x0078, 0x12a3, 0x2009, 0x3d47, 0x210c, 0x0078, 0x12a3,
-+ 0x2009, 0x3d48, 0x210c, 0x0078, 0x12a3, 0x7908, 0x7a0c, 0x0078,
-+ 0x12a2, 0x71c4, 0x8107, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003,
-+ 0xa0e8, 0x3f80, 0x6a00, 0x6804, 0xa084, 0x0008, 0x0040, 0x1433,
-+ 0x6b08, 0x0078, 0x1434, 0x6b0c, 0x0078, 0x12a1, 0x77c4, 0x1078,
-+ 0x19f0, 0x2091, 0x8000, 0x6b1c, 0x6a14, 0x2091, 0x8001, 0x2708,
-+ 0x0078, 0x12a1, 0x794c, 0x0078, 0x12a3, 0x77c4, 0x1078, 0x19f0,
-+ 0x2091, 0x8000, 0x6908, 0x6a18, 0x6b10, 0x2091, 0x8001, 0x0078,
-+ 0x12a1, 0x71c4, 0xa182, 0x0010, 0x00c8, 0x129c, 0x1078, 0x1fb7,
-+ 0x0078, 0x12a1, 0x71c4, 0xa182, 0x0010, 0x00c8, 0x129c, 0x2011,
-+ 0x3d41, 0x2204, 0x007e, 0x2112, 0x1078, 0x1f70, 0x017f, 0x0078,
-+ 0x12a3, 0x71c4, 0x2011, 0x1487, 0x20a9, 0x0008, 0x2204, 0xa106,
-+ 0x0040, 0x1479, 0x8210, 0x0070, 0x1477, 0x0078, 0x146e, 0x0078,
-+ 0x129c, 0xa292, 0x1487, 0x027e, 0x2011, 0x3d42, 0x2204, 0x2112,
-+ 0x017f, 0x007e, 0x1078, 0x1f7c, 0x017f, 0x0078, 0x12a3, 0x03e8,
-+ 0x00fa, 0x01f4, 0x02ee, 0x0064, 0x0019, 0x0032, 0x004b, 0x2061,
-+ 0x3d40, 0x610c, 0x6210, 0x70c4, 0x600e, 0x70c8, 0x6012, 0x0078,
-+ 0x12a2, 0x2061, 0x3d40, 0x6114, 0x70c4, 0x6016, 0x0078, 0x12a3,
-+ 0x71c4, 0x2011, 0x0004, 0x2019, 0x1212, 0xa186, 0x0028, 0x0040,
-+ 0x14b9, 0x2011, 0x0005, 0x2019, 0x1212, 0xa186, 0x0032, 0x0040,
-+ 0x14b9, 0x2011, 0x0006, 0x2019, 0x1313, 0xa186, 0x003c, 0x00c0,
-+ 0x129c, 0x2061, 0x3d40, 0x6018, 0x007e, 0x611a, 0x7800, 0xa084,
-+ 0x0001, 0x00c0, 0x14d6, 0x2001, 0x04fd, 0x2004, 0xa082, 0x0005,
-+ 0x0048, 0x14ce, 0x0038, 0x14d2, 0x0078, 0x14d6, 0x0028, 0x14d2,
-+ 0x0078, 0x14d6, 0x2019, 0x1313, 0x0078, 0x14d8, 0x2019, 0x1212,
-+ 0x23b8, 0x1078, 0x1f8d, 0x1078, 0x3c4a, 0x017f, 0x0078, 0x12a3,
-+ 0x71c4, 0xa184, 0xffcf, 0x00c0, 0x129c, 0x2011, 0x3d47, 0x2204,
-+ 0x2112, 0x007e, 0x1078, 0x1faf, 0x017f, 0x0078, 0x12a3, 0x71c4,
-+ 0xa182, 0x0010, 0x00c8, 0x129c, 0x2011, 0x3d48, 0x2204, 0x007e,
-+ 0x2112, 0x1078, 0x1f9e, 0x017f, 0x0078, 0x12a3, 0x71c4, 0x72c8,
-+ 0xa184, 0xfffd, 0x00c0, 0x129b, 0xa284, 0xfffd, 0x00c0, 0x129b,
-+ 0x2100, 0x7908, 0x780a, 0x2200, 0x7a0c, 0x780e, 0x0078, 0x12a2,
-+ 0x71c4, 0x8107, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa0e8,
-+ 0x3f80, 0x2019, 0x0000, 0x72c8, 0xa284, 0x0080, 0x0040, 0x1526,
-+ 0x6c14, 0x84ff, 0x00c0, 0x1526, 0x6817, 0x0040, 0xa284, 0x0040,
-+ 0x0040, 0x1530, 0x6c10, 0x84ff, 0x00c0, 0x1530, 0x6813, 0x0001,
-+ 0x6800, 0x007e, 0xa226, 0x0040, 0x155c, 0xa284, 0x0001, 0x0040,
-+ 0x153e, 0x2220, 0xa39d, 0x0002, 0xa294, 0xfffe, 0x6a02, 0xa484,
-+ 0x2000, 0x0040, 0x1545, 0xa39d, 0x0010, 0xa484, 0x1000, 0x0040,
-+ 0x154b, 0xa39d, 0x0008, 0xa484, 0x4000, 0x0040, 0x155c, 0x810f,
-+ 0xa284, 0x4000, 0x0040, 0x1558, 0x1078, 0x1fd1, 0x0078, 0x155c,
-+ 0x1078, 0x1fc3, 0x0078, 0x155c, 0x72cc, 0x6808, 0xa206, 0x0040,
-+ 0x158b, 0xa2a4, 0x00ff, 0x2061, 0x3d40, 0x6118, 0xa186, 0x0028,
-+ 0x0040, 0x1572, 0xa186, 0x0032, 0x0040, 0x1578, 0xa186, 0x003c,
-+ 0x0040, 0x157e, 0xa482, 0x0064, 0x0048, 0x1588, 0x0078, 0x1582,
-+ 0xa482, 0x0050, 0x0048, 0x1588, 0x0078, 0x1582, 0xa482, 0x0043,
-+ 0x0048, 0x1588, 0x71c4, 0x71c6, 0x027f, 0x72ca, 0x0078, 0x129d,
-+ 0x6a0a, 0xa39d, 0x000a, 0x6804, 0xa305, 0x6806, 0x027f, 0x6b0c,
-+ 0x71c4, 0x0078, 0x12a1, 0x77c4, 0x1078, 0x19f0, 0x2091, 0x8000,
-+ 0x6a14, 0x6b1c, 0x2091, 0x8001, 0x70c8, 0x6816, 0x70cc, 0x681e,
-+ 0x2708, 0x0078, 0x12a1, 0x70c4, 0x794c, 0x784e, 0x0078, 0x12a3,
-+ 0x71c4, 0x72c8, 0x73cc, 0xa182, 0x0010, 0x00c8, 0x129c, 0x1078,
-+ 0x1fdf, 0x0078, 0x12a1, 0x77c4, 0x1078, 0x19f0, 0x2091, 0x8000,
-+ 0x6a08, 0xa295, 0x0002, 0x6a0a, 0x2091, 0x8001, 0x2708, 0x0078,
-+ 0x12a2, 0x77c4, 0x1078, 0x19f0, 0x2091, 0x8000, 0x6a08, 0xa294,
-+ 0xfff9, 0x6a0a, 0x6804, 0xa005, 0x0040, 0x15d0, 0x1078, 0x1f05,
-+ 0x2091, 0x8001, 0x2708, 0x0078, 0x12a2, 0x77c4, 0x1078, 0x19f0,
-+ 0x2091, 0x8000, 0x6a08, 0xa295, 0x0004, 0x6a0a, 0x6804, 0xa005,
-+ 0x0040, 0x15e4, 0x1078, 0x1f05, 0x2091, 0x8001, 0x2708, 0x0078,
-+ 0x12a2, 0x77c4, 0x2041, 0x0001, 0x2049, 0x0005, 0x2051, 0x0020,
-+ 0x2091, 0x8000, 0x1078, 0x19fd, 0x2091, 0x8001, 0x2708, 0x6a08,
-+ 0x0078, 0x12a2, 0x77c4, 0x73c8, 0x72cc, 0x77c6, 0x73ca, 0x72ce,
-+ 0x1078, 0x1a78, 0x00c0, 0x1618, 0x6818, 0xa005, 0x0040, 0x1612,
-+ 0x2708, 0x1078, 0x1fef, 0x00c0, 0x1612, 0x7817, 0x0015, 0x2091,
-+ 0x8001, 0x007c, 0x2091, 0x8001, 0x2001, 0x4005, 0x0078, 0x12a6,
-+ 0x2091, 0x8001, 0x0078, 0x12a4, 0x77c4, 0x77c6, 0x2041, 0x0021,
-+ 0x2049, 0x0005, 0x2051, 0x0020, 0x2091, 0x8000, 0x1078, 0x19fd,
-+ 0x2061, 0x3d40, 0x60a3, 0x0003, 0x67b6, 0x60c7, 0x000f, 0x60a7,
-+ 0x0000, 0x7817, 0x0016, 0x2091, 0x8000, 0x1078, 0x1f05, 0x2091,
-+ 0x8001, 0x007c, 0x77c8, 0x77ca, 0x77c4, 0x77c6, 0xa7bc, 0xff00,
-+ 0x2091, 0x8000, 0x2061, 0x3d40, 0x60a3, 0x0002, 0x60a7, 0x0000,
-+ 0x67b6, 0x60c7, 0x000f, 0x7817, 0x0017, 0x2091, 0x8000, 0x1078,
-+ 0x1f05, 0x2091, 0x8001, 0x2041, 0x0021, 0x2049, 0x0004, 0x2051,
-+ 0x0010, 0x2091, 0x8000, 0x1078, 0x19fd, 0x70c8, 0x6836, 0x8738,
-+ 0xa784, 0x001f, 0x00c0, 0x165b, 0x2091, 0x8001, 0x007c, 0x78c0,
-+ 0xa084, 0x0003, 0x00c0, 0x168b, 0x2039, 0x0000, 0x2041, 0x0021,
-+ 0x2049, 0x0004, 0x2051, 0x0008, 0x1078, 0x19f0, 0x2091, 0x8000,
-+ 0x6808, 0xa80d, 0x690a, 0x2091, 0x8001, 0x8738, 0xa784, 0x001f,
-+ 0x00c0, 0x1674, 0xa7bc, 0xff00, 0x873f, 0x8738, 0x873f, 0xa784,
-+ 0x0f00, 0x00c0, 0x1674, 0x2091, 0x8000, 0x2069, 0x0100, 0x6830,
-+ 0xa084, 0x0040, 0x0040, 0x16b4, 0x684b, 0x0004, 0x20a9, 0x0014,
-+ 0x6848, 0xa084, 0x0004, 0x0040, 0x16a1, 0x0070, 0x16a1, 0x0078,
-+ 0x1698, 0x684b, 0x0009, 0x20a9, 0x0014, 0x6848, 0xa084, 0x0001,
-+ 0x0040, 0x16ae, 0x0070, 0x16ae, 0x0078, 0x16a5, 0x20a9, 0x00fa,
-+ 0x0070, 0x16b4, 0x0078, 0x16b0, 0x2079, 0x3d00, 0x7817, 0x0018,
-+ 0x2061, 0x3d40, 0x60a3, 0x0001, 0x60a7, 0x0000, 0x60c7, 0x000f,
-+ 0x78c0, 0xa085, 0x0002, 0x78c2, 0x6808, 0xa084, 0xfffd, 0x680a,
-+ 0x681b, 0x0047, 0x2091, 0x8001, 0x007c, 0x78c0, 0xa084, 0xfffd,
-+ 0x78c2, 0xa084, 0x0001, 0x00c0, 0x16d7, 0x1078, 0x1ac2, 0x71c4,
-+ 0x71c6, 0x794a, 0x007c, 0x1078, 0x1b4c, 0x00c0, 0x12b6, 0x75d8,
-+ 0x74dc, 0x75da, 0x74de, 0x0078, 0x16e8, 0x2029, 0x0000, 0x2520,
-+ 0x71c4, 0x73c8, 0x72cc, 0x71c6, 0x73ca, 0x72ce, 0x2079, 0x3d00,
-+ 0x1078, 0x19c9, 0x0040, 0x17af, 0x20a9, 0x0005, 0x20a1, 0x3d16,
-+ 0x2091, 0x8000, 0x41a1, 0x2091, 0x8001, 0x2009, 0x0040, 0x1078,
-+ 0x1993, 0x0040, 0x1707, 0x1078, 0x19d2, 0x0078, 0x17af, 0x6004,
-+ 0xa08c, 0x00ff, 0xa18e, 0x0009, 0x00c0, 0x1712, 0x007e, 0x1078,
-+ 0x1e27, 0x007f, 0xa084, 0xff00, 0x8007, 0x8009, 0x0040, 0x177d,
-+ 0x0c7e, 0x2c68, 0x1078, 0x19c9, 0x0040, 0x174c, 0x2c00, 0x689e,
-+ 0x8109, 0x00c0, 0x1719, 0x609f, 0x0000, 0x0c7f, 0x0c7e, 0x7218,
-+ 0x731c, 0x7420, 0x7524, 0x2c68, 0x689c, 0xa065, 0x0040, 0x177c,
-+ 0x2009, 0x0040, 0x1078, 0x1993, 0x00c0, 0x1765, 0x6004, 0xa084,
-+ 0x00ff, 0xa086, 0x0002, 0x00c0, 0x174c, 0x6004, 0xa084, 0x00ff,
-+ 0xa086, 0x000a, 0x00c0, 0x1748, 0x017e, 0x1078, 0x1e23, 0x017f,
-+ 0x2d00, 0x6002, 0x0078, 0x1727, 0x0c7f, 0x0c7e, 0x609c, 0x2060,
-+ 0x1078, 0x1a30, 0x0c7f, 0x609f, 0x0000, 0x1078, 0x17b3, 0x2009,
-+ 0x0018, 0x6008, 0xa085, 0x0200, 0x600a, 0x6004, 0x6086, 0x1078,
-+ 0x1959, 0x1078, 0x19d2, 0x0078, 0x17af, 0x0c7f, 0x0c7e, 0x609c,
-+ 0x2060, 0x1078, 0x1a30, 0x0c7f, 0x609f, 0x0000, 0x1078, 0x17b3,
-+ 0x2009, 0x0018, 0x6087, 0x0103, 0x601b, 0x0003, 0x1078, 0x1959,
-+ 0x1078, 0x19d2, 0x0078, 0x17af, 0x0c7f, 0x74c4, 0x73c8, 0x72cc,
-+ 0x6014, 0x2091, 0x8000, 0x7817, 0x0012, 0x0e7e, 0x2071, 0x3d40,
-+ 0x70a3, 0x0005, 0x70a7, 0x0000, 0x73aa, 0x72ae, 0x74b2, 0x70b6,
-+ 0x70bb, 0x0000, 0x2c00, 0x70be, 0x70c3, 0x0000, 0xa02e, 0x2530,
-+ 0x611c, 0xa184, 0x0060, 0x0040, 0x179f, 0x1078, 0x3736, 0x0e7f,
-+ 0x6596, 0x65a6, 0x669a, 0x66aa, 0x60af, 0x0000, 0x60b3, 0x0000,
-+ 0x2091, 0x8000, 0x1078, 0x1f05, 0x2091, 0x8001, 0x007c, 0x70c3,
-+ 0x4005, 0x0078, 0x12a7, 0x20a9, 0x0005, 0x2099, 0x3d16, 0x2091,
-+ 0x8000, 0x530a, 0x2091, 0x8001, 0x2100, 0xa210, 0xa399, 0x0000,
-+ 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x007c, 0x71c4, 0x70c7, 0x0000,
-+ 0x7906, 0x0078, 0x12a4, 0x71c4, 0x71c6, 0x2168, 0x0078, 0x17d2,
-+ 0x2069, 0x1000, 0x690c, 0xa016, 0x2d04, 0xa210, 0x8d68, 0x8109,
-+ 0x00c0, 0x17d4, 0xa285, 0x0000, 0x00c0, 0x17e2, 0x70c3, 0x4000,
-+ 0x0078, 0x17e4, 0x70c3, 0x4003, 0x70ca, 0x0078, 0x12a7, 0x79d8,
-+ 0x0078, 0x12a3, 0x71c4, 0x71c6, 0x2198, 0x20a1, 0x0042, 0x20a9,
-+ 0x0004, 0x53a3, 0x21a0, 0x2099, 0x0042, 0x20a9, 0x0004, 0x53a3,
-+ 0x0078, 0x12a4, 0x70c4, 0x2068, 0x2079, 0x3d00, 0x1078, 0x19c9,
-+ 0x00c0, 0x1806, 0x70c3, 0x4005, 0x0078, 0x12a7, 0x6007, 0x0001,
-+ 0x600b, 0x0000, 0x602b, 0x0000, 0x601b, 0x0006, 0x6a10, 0xa28c,
-+ 0x000f, 0xa284, 0x00f0, 0x8003, 0x8003, 0x8003, 0x8003, 0xa105,
-+ 0x6016, 0xa284, 0x0800, 0x0040, 0x1821, 0x601b, 0x000a, 0x0078,
-+ 0x1827, 0xa284, 0x1000, 0x0040, 0x1827, 0x601b, 0x000c, 0xa284,
-+ 0x0300, 0x0040, 0x1830, 0x602b, 0x0001, 0x8004, 0x8004, 0x8004,
-+ 0xa085, 0x0001, 0x601e, 0x6023, 0x0000, 0x6027, 0x0000, 0xa284,
-+ 0x0400, 0x0040, 0x183d, 0x602b, 0x0000, 0x20a9, 0x0006, 0xac80,
-+ 0x000b, 0x20a0, 0xad80, 0x0005, 0x2098, 0x53a3, 0xa284, 0x0300,
-+ 0x00c0, 0x1852, 0x6046, 0x604a, 0x604e, 0x6052, 0x6096, 0x609a,
-+ 0x0078, 0x185c, 0x6800, 0x6046, 0x6804, 0x604a, 0x6e08, 0x664e,
-+ 0x6d0c, 0x6552, 0x6596, 0x669a, 0x6014, 0x2091, 0x8000, 0x7817,
-+ 0x0042, 0x2c08, 0x2061, 0x3d40, 0x60a3, 0x0005, 0x60a7, 0x0000,
-+ 0x60ab, 0x0000, 0x60af, 0x0000, 0x60b3, 0x0000, 0x60b6, 0x61be,
-+ 0xa284, 0x0400, 0x60c2, 0x2091, 0x8001, 0x0e7e, 0x2071, 0x0020,
-+ 0x7007, 0x000a, 0x7007, 0x0002, 0x7003, 0x0000, 0x0e7f, 0x2091,
-+ 0x8000, 0x1078, 0x1f05, 0x2091, 0x8001, 0x007c, 0x70c4, 0x2068,
-+ 0x2079, 0x3d00, 0x1078, 0x19c9, 0x0040, 0x189b, 0x6007, 0x0001,
-+ 0x600b, 0x0000, 0x602b, 0x0000, 0x601b, 0x0006, 0x70c8, 0x6016,
-+ 0x6a10, 0x0078, 0x1819, 0x70c3, 0x4005, 0x0078, 0x12a7, 0x78ec,
-+ 0xa005, 0x0040, 0x12b2, 0x2091, 0x8000, 0x70c4, 0x800a, 0x2011,
-+ 0x0010, 0x810c, 0x0048, 0x18b1, 0x3a00, 0xa084, 0xfff7, 0x0078,
-+ 0x18b4, 0x3a00, 0xa085, 0x0008, 0x20d0, 0x0005, 0x0005, 0xa084,
-+ 0xfffb, 0x20d0, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005,
-+ 0x0005, 0x0005, 0xa085, 0x0004, 0x20d0, 0x0005, 0x0005, 0x0005,
-+ 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x8211, 0x00c0, 0x18a9,
-+ 0x3a00, 0xa085, 0x0008, 0x20d0, 0x2091, 0x8001, 0x0078, 0x12a4,
-+ 0x2011, 0x04fd, 0x2204, 0xa082, 0x0004, 0x0048, 0x18ec, 0x78ef,
-+ 0x0001, 0x2009, 0xff01, 0x200a, 0x2001, 0x000c, 0x20d8, 0x2001,
-+ 0x000c, 0x20d0, 0x0078, 0x12a4, 0x2001, 0x4005, 0x0078, 0x12a6,
-+ 0x7978, 0x71c6, 0x71c4, 0xa182, 0x0003, 0x00c8, 0x129c, 0x797a,
-+ 0x0078, 0x12a4, 0x7978, 0x71c6, 0x0078, 0x12a4, 0x796c, 0x71c6,
-+ 0x71c4, 0x796e, 0x7970, 0x71ca, 0x71c8, 0x7972, 0x7974, 0x71ce,
-+ 0x71cc, 0x7976, 0x0078, 0x12a4, 0x796c, 0x71c6, 0x7970, 0x71ca,
-+ 0x7974, 0x71ce, 0x0078, 0x12a4, 0x7900, 0x71c6, 0x71c4, 0x7902,
-+ 0x2001, 0x04fd, 0x2004, 0xa082, 0x0005, 0x0048, 0x1923, 0x0038,
-+ 0x1925, 0x0078, 0x192f, 0x00a8, 0x192f, 0xa18c, 0x0001, 0x00c0,
-+ 0x192d, 0x20b9, 0x1313, 0x0078, 0x192f, 0x20b9, 0x1212, 0x0078,
-+ 0x12a4, 0x7900, 0x71c6, 0x0078, 0x12a4, 0x2009, 0x3d79, 0x2104,
-+ 0x70c6, 0x70c4, 0x200a, 0x0078, 0x12a4, 0x2009, 0x3d79, 0x2104,
-+ 0x70c6, 0x0078, 0x12a4, 0x71c4, 0x8107, 0xa084, 0x000f, 0x8003,
-+ 0x8003, 0x8003, 0xa0e8, 0x3f80, 0x6a14, 0xd2b4, 0x0040, 0x1954,
-+ 0x2011, 0x0001, 0x0078, 0x1956, 0x2011, 0x0000, 0x6b0c, 0x0078,
-+ 0x12a1, 0x700c, 0xa084, 0x00ff, 0x0040, 0x1965, 0x7007, 0x0004,
-+ 0x7004, 0xa084, 0x0004, 0x00c0, 0x1960, 0x7017, 0x0000, 0x7112,
-+ 0x721a, 0x731e, 0x7422, 0x7526, 0xac80, 0x0001, 0x8108, 0x810c,
-+ 0x81a9, 0x8098, 0x20a1, 0x0030, 0x6084, 0x20a2, 0x53a6, 0x780c,
-+ 0xa085, 0x0000, 0x7002, 0x7007, 0x0001, 0x2009, 0x0022, 0x2104,
-+ 0xa084, 0x4000, 0x00c0, 0x197d, 0x7108, 0x8103, 0x00c8, 0x197d,
-+ 0x7014, 0xa005, 0x0040, 0x197d, 0x7007, 0x0002, 0xa184, 0x01e0,
-+ 0x7003, 0x0000, 0x007c, 0x700c, 0xa084, 0x00ff, 0x0040, 0x199f,
-+ 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, 0x199a, 0x7017,
-+ 0x0000, 0x7112, 0x721a, 0x7422, 0x7526, 0x731e, 0x2099, 0x0030,
-+ 0x8108, 0x81ac, 0x780c, 0xa085, 0x0001, 0x7002, 0x7007, 0x0001,
-+ 0x2009, 0x0022, 0x2104, 0xa084, 0x4000, 0x00c0, 0x19b0, 0x7008,
-+ 0x800b, 0x00c8, 0x19b0, 0x7007, 0x0002, 0xa08c, 0x01e0, 0x00c0,
-+ 0x19c6, 0xac80, 0x0001, 0x20a0, 0x53a5, 0xa006, 0x7003, 0x0000,
-+ 0x007c, 0x7850, 0xa065, 0x0040, 0x19d1, 0x2c04, 0x7852, 0x2063,
-+ 0x0000, 0x007c, 0x0f7e, 0x2079, 0x3d00, 0x7850, 0x2062, 0x2c00,
-+ 0xa005, 0x00c0, 0x19dd, 0x1078, 0x20c8, 0x7852, 0x0f7f, 0x007c,
-+ 0x2011, 0x6300, 0x7a52, 0x7be0, 0x8319, 0x0040, 0x19ed, 0xa280,
-+ 0x002f, 0x2012, 0x2010, 0x0078, 0x19e4, 0x2013, 0x0000, 0x007c,
-+ 0xa784, 0x0f00, 0x800b, 0xa784, 0x001f, 0x8003, 0x8003, 0x8003,
-+ 0x8003, 0xa105, 0xa0e8, 0x4000, 0x007c, 0x1078, 0x19f0, 0x2900,
-+ 0x682a, 0x2a00, 0x682e, 0x6808, 0xa084, 0xffef, 0xa80d, 0x690a,
-+ 0x2009, 0x3d4f, 0x210c, 0x6804, 0xa005, 0x0040, 0x1a1a, 0xa116,
-+ 0x00c0, 0x1a1a, 0x2060, 0x6000, 0x6806, 0x017e, 0x200b, 0x0000,
-+ 0x0078, 0x1a1d, 0x2009, 0x0000, 0x017e, 0x6804, 0xa065, 0x0040,
-+ 0x1a2c, 0x6000, 0x6806, 0x1078, 0x1a3d, 0x1078, 0x1b6d, 0x6810,
-+ 0x8001, 0x6812, 0x00c0, 0x1a1d, 0x017f, 0x6902, 0x6906, 0x007c,
-+ 0xa065, 0x0040, 0x1a3c, 0x609c, 0x609f, 0x0000, 0x2008, 0x1078,
-+ 0x19d2, 0x2100, 0x0078, 0x1a30, 0x007c, 0x6007, 0x0103, 0x608f,
-+ 0x0000, 0x20a9, 0x001c, 0xac80, 0x0005, 0x20a0, 0x2001, 0x0000,
-+ 0x40a4, 0x6828, 0x601a, 0x682c, 0x6022, 0x007c, 0x0e7e, 0x2071,
-+ 0x3d40, 0x7040, 0xa08c, 0x0200, 0x00c0, 0x1a5c, 0xa088, 0x3d80,
-+ 0x2d0a, 0x8000, 0x7042, 0xa006, 0x0e7f, 0x007c, 0x0e7e, 0x2071,
-+ 0x3d40, 0x2009, 0x3d80, 0x7240, 0x8221, 0x8211, 0x0048, 0x1a76,
-+ 0x2104, 0x8108, 0xad06, 0x00c0, 0x1a65, 0x8119, 0x211e, 0x8108,
-+ 0x8318, 0x8211, 0x00c8, 0x1a6e, 0x7442, 0xa006, 0x0e7f, 0x007c,
-+ 0x1078, 0x19f0, 0x2091, 0x8000, 0x6804, 0x781e, 0xa065, 0x0040,
-+ 0x1ac1, 0x0078, 0x1a89, 0x2c00, 0x781e, 0x6000, 0xa065, 0x0040,
-+ 0x1ac1, 0x6010, 0xa306, 0x00c0, 0x1a83, 0x600c, 0xa206, 0x00c0,
-+ 0x1a83, 0x2c28, 0x2001, 0x3d4f, 0x2004, 0xac06, 0x00c0, 0x1a9a,
-+ 0x0078, 0x1abe, 0x6804, 0xac06, 0x00c0, 0x1aa8, 0x6000, 0x2060,
-+ 0x6806, 0xa005, 0x00c0, 0x1aa8, 0x6803, 0x0000, 0x0078, 0x1ab2,
-+ 0x6400, 0x781c, 0x2060, 0x6402, 0xa486, 0x0000, 0x00c0, 0x1ab2,
-+ 0x2c00, 0x6802, 0x2560, 0x1078, 0x1a3d, 0x601b, 0x0005, 0x6023,
-+ 0x0020, 0x1078, 0x1b6d, 0x6810, 0x8001, 0x6812, 0x2001, 0xffff,
-+ 0xa005, 0x007c, 0x2039, 0x0000, 0x2041, 0x0021, 0x2049, 0x0004,
-+ 0x2051, 0x0008, 0x2091, 0x8000, 0x1078, 0x19fd, 0x8738, 0xa784,
-+ 0x001f, 0x00c0, 0x1acc, 0xa7bc, 0xff00, 0x873f, 0x8738, 0x873f,
-+ 0xa784, 0x0f00, 0x00c0, 0x1acc, 0x2091, 0x8001, 0x007c, 0x2061,
-+ 0x0000, 0x6018, 0xa084, 0x0001, 0x00c0, 0x1af0, 0x2091, 0x8000,
-+ 0x78d4, 0x78d7, 0x0000, 0x2091, 0x8001, 0xa005, 0x00c0, 0x1af1,
-+ 0x007c, 0xa08c, 0xfff0, 0x0040, 0x1af7, 0x1078, 0x20c8, 0x0079,
-+ 0x1af9, 0x1b09, 0x1b0c, 0x1b12, 0x1b16, 0x1b0a, 0x1b1a, 0x1b0a,
-+ 0x1b20, 0x1b24, 0x1b28, 0x1b5b, 0x1b5f, 0x1b0a, 0x1b0a, 0x1b0a,
-+ 0x1b0a, 0x007c, 0x1078, 0x20c8, 0x1078, 0x1ac2, 0x2001, 0x8001,
-+ 0x0078, 0x1b65, 0x2001, 0x8003, 0x0078, 0x1b65, 0x2001, 0x8004,
-+ 0x0078, 0x1b65, 0x1078, 0x1ac2, 0x2001, 0x8006, 0x0078, 0x1b65,
-+ 0x2001, 0x8008, 0x0078, 0x1b65, 0x2001, 0x8009, 0x0078, 0x1b65,
-+ 0x2091, 0x8000, 0x2069, 0x3d40, 0x6800, 0xa086, 0x0000, 0x0040,
-+ 0x1b36, 0x2091, 0x8001, 0x78d7, 0x0009, 0x007c, 0x68b4, 0xa0bc,
-+ 0xff00, 0x2041, 0x0021, 0x2049, 0x0004, 0x2051, 0x0010, 0x1078,
-+ 0x19fd, 0x8738, 0xa784, 0x001f, 0x00c0, 0x1b3f, 0x2091, 0x8001,
-+ 0x2001, 0x800a, 0x0078, 0x1b65, 0x2001, 0x04fd, 0x2004, 0xa082,
-+ 0x0004, 0x00c8, 0x1b55, 0x0078, 0x1b58, 0xa006, 0x0078, 0x1b5a,
-+ 0xa085, 0x0001, 0x007c, 0x2001, 0x800c, 0x0078, 0x1b65, 0x1078,
-+ 0x1ac2, 0x2001, 0x800d, 0x0078, 0x1b65, 0x70c2, 0x2061, 0x0000,
-+ 0x601b, 0x0001, 0x2091, 0x4080, 0x007c, 0x6004, 0x6086, 0x2c08,
-+ 0x2063, 0x0000, 0x787c, 0x8000, 0x787e, 0x7880, 0xa005, 0x7982,
-+ 0x0040, 0x1b7d, 0x2c02, 0x0078, 0x1b7e, 0x7986, 0x007c, 0x0c7e,
-+ 0x2061, 0x3d00, 0x6887, 0x0103, 0x2d08, 0x206b, 0x0000, 0x607c,
-+ 0x8000, 0x607e, 0x6080, 0xa005, 0x6182, 0x0040, 0x1b92, 0x2d02,
-+ 0x0078, 0x1b93, 0x6186, 0x0c7f, 0x007c, 0x1078, 0x1ba6, 0x0040,
-+ 0x1ba5, 0x0c7e, 0x609c, 0xa065, 0x0040, 0x1ba0, 0x1078, 0x1a30,
-+ 0x0c7f, 0x609f, 0x0000, 0x1078, 0x19d2, 0x007c, 0x7884, 0xa065,
-+ 0x0040, 0x1bb8, 0x2091, 0x8000, 0x787c, 0x8001, 0x787e, 0x2c04,
-+ 0x7886, 0xa005, 0x00c0, 0x1bb6, 0x7882, 0x8000, 0x2091, 0x8001,
-+ 0x007c, 0x20a9, 0x0010, 0xa006, 0x8004, 0x8086, 0x818e, 0x00c8,
-+ 0x1bc2, 0xa200, 0x0070, 0x1bc6, 0x0078, 0x1bbd, 0x8086, 0x818e,
-+ 0x007c, 0x157e, 0x20a9, 0x0010, 0xa005, 0x0040, 0x1bec, 0xa11a,
-+ 0x00c8, 0x1bec, 0x8213, 0x818d, 0x0048, 0x1bdd, 0xa11a, 0x00c8,
-+ 0x1bde, 0x0070, 0x1be4, 0x0078, 0x1bd2, 0xa11a, 0x2308, 0x8210,
-+ 0x0070, 0x1be4, 0x0078, 0x1bd2, 0x007e, 0x3200, 0xa084, 0xf7ff,
-+ 0x2080, 0x007f, 0x157f, 0x007c, 0x007e, 0x3200, 0xa085, 0x0800,
-+ 0x0078, 0x1be8, 0x798c, 0x70d0, 0x007e, 0x007f, 0xa106, 0x0040,
-+ 0x1c6e, 0x7800, 0xa084, 0x0002, 0x0040, 0x1c05, 0x2011, 0x04fd,
-+ 0x2204, 0xa082, 0x0005, 0x00c8, 0x1c18, 0x2091, 0x8000, 0x2071,
-+ 0x0020, 0x7004, 0xa005, 0x00c0, 0x1c6e, 0x7008, 0x7208, 0xa206,
-+ 0x00c0, 0x1c6e, 0xa286, 0x0008, 0x00c0, 0x1c6e, 0x2071, 0x0010,
-+ 0x1078, 0x19c9, 0x0040, 0x1c6e, 0x7a94, 0x7b90, 0x7c9c, 0x7d98,
-+ 0xa184, 0xff00, 0x0040, 0x1c3c, 0x2031, 0x0000, 0x810b, 0x86b5,
-+ 0x810b, 0x86b5, 0x810b, 0x86b5, 0x810b, 0x86b5, 0x810b, 0x86b5,
-+ 0x810b, 0x86b5, 0x2100, 0xa210, 0x2600, 0xa319, 0xa4a1, 0x0000,
-+ 0xa5a9, 0x0000, 0x0078, 0x1c46, 0x8107, 0x8004, 0x8004, 0xa210,
-+ 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x2009, 0x0040,
-+ 0x1078, 0x1993, 0x2091, 0x8001, 0x0040, 0x1c65, 0x1078, 0x19d2,
-+ 0x78a0, 0x8000, 0x78a2, 0xa086, 0x0002, 0x00c0, 0x1c6e, 0x2091,
-+ 0x8000, 0x78d7, 0x0002, 0x78a3, 0x0000, 0x78c0, 0xa085, 0x0003,
-+ 0x78c2, 0x2091, 0x8001, 0x0078, 0x1c6e, 0x78a3, 0x0000, 0x1078,
-+ 0x1e0d, 0x6004, 0xa084, 0x000f, 0x0079, 0x1c73, 0x2071, 0x0010,
-+ 0x2091, 0x8001, 0x007c, 0x1c83, 0x1ca5, 0x1ccb, 0x1c83, 0x1cdd,
-+ 0x1c92, 0x1c83, 0x1c83, 0x1c83, 0x1c9f, 0x1cc5, 0x1c83, 0x1c83,
-+ 0x1c83, 0x1c83, 0x1c83, 0x2039, 0x0400, 0x78d0, 0xa705, 0x78d2,
-+ 0x6008, 0xa705, 0x600a, 0x1078, 0x1d28, 0x609c, 0x78ce, 0x1078,
-+ 0x1df5, 0x007c, 0x78d0, 0xa084, 0x0100, 0x0040, 0x1c99, 0x0078,
-+ 0x1c83, 0x601c, 0xa085, 0x0080, 0x601e, 0x0078, 0x1cac, 0x1078,
-+ 0x1b4c, 0x00c0, 0x1c83, 0x1078, 0x1e27, 0x78d0, 0xa084, 0x0100,
-+ 0x0040, 0x1cac, 0x0078, 0x1c83, 0x78d3, 0x0000, 0x6004, 0x8007,
-+ 0xa084, 0x00ff, 0x78c6, 0x8001, 0x609f, 0x0000, 0x0040, 0x1cc2,
-+ 0x1078, 0x1d28, 0x0040, 0x1cc2, 0x78d0, 0xa085, 0x0100, 0x78d2,
-+ 0x0078, 0x1cc4, 0x1078, 0x1d4c, 0x007c, 0x1078, 0x1b4c, 0x00c0,
-+ 0x1c83, 0x1078, 0x1e23, 0x78d0, 0xa08c, 0x0e00, 0x00c0, 0x1cd4,
-+ 0xa084, 0x0100, 0x00c0, 0x1cd6, 0x0078, 0x1c83, 0x1078, 0x1d28,
-+ 0x00c0, 0x1cdc, 0x1078, 0x1d4c, 0x007c, 0x78d0, 0xa084, 0x0100,
-+ 0x0040, 0x1ce4, 0x0078, 0x1c83, 0x78d3, 0x0000, 0x6714, 0x2011,
-+ 0x0001, 0x20a9, 0x0001, 0x6018, 0xa084, 0x00ff, 0xa005, 0x0040,
-+ 0x1d07, 0x2011, 0x0001, 0xa7bc, 0xff00, 0x20a9, 0x0020, 0xa08e,
-+ 0x0001, 0x0040, 0x1d07, 0x2039, 0x0000, 0x2011, 0x0002, 0x20a9,
-+ 0x0100, 0xa08e, 0x0002, 0x0040, 0x1d07, 0x0078, 0x1d25, 0x1078,
-+ 0x19f0, 0x2d00, 0x2091, 0x8000, 0x682b, 0x0000, 0x682f, 0x0000,
-+ 0x6808, 0xa084, 0xffde, 0x680a, 0x2d00, 0xa080, 0x0010, 0x2068,
-+ 0x2091, 0x8001, 0x0070, 0x1d1e, 0x0078, 0x1d0a, 0x8211, 0x0040,
-+ 0x1d25, 0x20a9, 0x0100, 0x0078, 0x1d0a, 0x1078, 0x19d2, 0x007c,
-+ 0x78c8, 0xa06d, 0x00c0, 0x1d33, 0x2c00, 0x78ca, 0x78ce, 0x609f,
-+ 0x0000, 0x0078, 0x1d3f, 0x2c00, 0x689e, 0x609f, 0x0000, 0x78ca,
-+ 0x2d00, 0x6002, 0x78cc, 0xad06, 0x00c0, 0x1d3f, 0x6002, 0x78c4,
-+ 0x8001, 0x78c6, 0x00c0, 0x1d4b, 0x78d0, 0xa084, 0x0000, 0x78d2,
-+ 0x78cc, 0x2060, 0xa006, 0x007c, 0xa02e, 0x2530, 0x611c, 0x61a2,
-+ 0xa184, 0xe1ff, 0x601e, 0xa184, 0x0060, 0x0040, 0x1d5b, 0x0e7e,
-+ 0x1078, 0x3736, 0x0e7f, 0x6596, 0x65a6, 0x669a, 0x66aa, 0x60af,
-+ 0x0000, 0x60b3, 0x0000, 0x6714, 0x1078, 0x19f0, 0x2091, 0x8000,
-+ 0x60a0, 0xa084, 0x8000, 0x00c0, 0x1d82, 0x6808, 0xa084, 0x0001,
-+ 0x0040, 0x1d82, 0x2091, 0x8001, 0x1078, 0x1a3d, 0x2091, 0x8000,
-+ 0x1078, 0x1b6d, 0x2091, 0x8001, 0x78cb, 0x0000, 0x78cf, 0x0000,
-+ 0x0078, 0x1df4, 0x6024, 0xa096, 0x0001, 0x00c0, 0x1d89, 0x8000,
-+ 0x6026, 0x6a10, 0x6814, 0x2091, 0x8001, 0xa202, 0x0048, 0x1d98,
-+ 0x0040, 0x1d98, 0x2039, 0x0200, 0x1078, 0x1df5, 0x0078, 0x1df4,
-+ 0x2c08, 0x2091, 0x8000, 0x60a0, 0xa084, 0x8000, 0x0040, 0x1dc5,
-+ 0x6800, 0xa065, 0x0040, 0x1dca, 0x6a04, 0x0e7e, 0x2071, 0x3d40,
-+ 0x7000, 0xa084, 0x0001, 0x0040, 0x1dbf, 0x703c, 0xa206, 0x00c0,
-+ 0x1dbf, 0x6b04, 0x231c, 0x2160, 0x6302, 0x2300, 0xa005, 0x00c0,
-+ 0x1dba, 0x6902, 0x2260, 0x6102, 0x0e7f, 0x0078, 0x1dd1, 0x2160,
-+ 0x6202, 0x6906, 0x0e7f, 0x0078, 0x1dd1, 0x6800, 0xa065, 0x0040,
-+ 0x1dca, 0x6102, 0x6902, 0x00c0, 0x1dce, 0x6906, 0x2160, 0x6003,
-+ 0x0000, 0x2160, 0x60a0, 0xa084, 0x8000, 0x0040, 0x1ddb, 0x6808,
-+ 0xa084, 0xfffc, 0x680a, 0x6810, 0x8000, 0x6812, 0x2091, 0x8001,
-+ 0x6808, 0xa08c, 0x0040, 0x0040, 0x1dea, 0xa086, 0x0040, 0x680a,
-+ 0x1078, 0x1a4e, 0x2091, 0x8000, 0x1078, 0x1f05, 0x2091, 0x8001,
-+ 0x78cf, 0x0000, 0x78cb, 0x0000, 0x007c, 0x6008, 0xa705, 0x600a,
-+ 0x2091, 0x8000, 0x1078, 0x1b6d, 0x2091, 0x8001, 0x78cc, 0xa065,
-+ 0x0040, 0x1e08, 0x609c, 0x78ce, 0x609f, 0x0000, 0x0078, 0x1df8,
-+ 0x78cb, 0x0000, 0x78cf, 0x0000, 0x007c, 0x7988, 0x788c, 0x8000,
-+ 0xa10a, 0x00c8, 0x1e14, 0xa006, 0x788e, 0x70d2, 0x7804, 0xa005,
-+ 0x0040, 0x1e22, 0x8001, 0x7806, 0x00c0, 0x1e22, 0x0068, 0x1e22,
-+ 0x2091, 0x4080, 0x007c, 0x2039, 0x1e3b, 0x0078, 0x1e29, 0x2039,
-+ 0x1e41, 0x2704, 0xa005, 0x0040, 0x1e3a, 0xac00, 0x2068, 0x6b08,
-+ 0x6c0c, 0x6910, 0x6a14, 0x690a, 0x6a0e, 0x6b12, 0x6c16, 0x8738,
-+ 0x0078, 0x1e29, 0x007c, 0x0003, 0x0009, 0x000f, 0x0015, 0x001b,
-+ 0x0000, 0x0015, 0x001b, 0x0000, 0x0068, 0x1e8a, 0x2029, 0x0000,
-+ 0x7884, 0xa065, 0x0040, 0x1e85, 0x2009, 0x3d79, 0x2104, 0xa084,
-+ 0x0001, 0x0040, 0x1e78, 0x6084, 0xa086, 0x0103, 0x00c0, 0x1e78,
-+ 0x6018, 0xa005, 0x00c0, 0x1e78, 0x6014, 0xa005, 0x00c0, 0x1e78,
-+ 0x0d7e, 0x2069, 0x0000, 0x6818, 0xa084, 0x0001, 0x00c0, 0x1e77,
-+ 0x600c, 0x70c6, 0x6010, 0x70ca, 0x70c3, 0x8020, 0x681b, 0x0001,
-+ 0x2091, 0x4080, 0x0d7f, 0x1078, 0x1b95, 0x0078, 0x1e85, 0x0d7f,
-+ 0x1078, 0x1e8b, 0x0040, 0x1e85, 0x057e, 0x1078, 0x1e9c, 0x057f,
-+ 0x00c0, 0x1e85, 0x8528, 0x0078, 0x1e48, 0x85ff, 0x0040, 0x1e8a,
-+ 0x2091, 0x4080, 0x007c, 0x7ba4, 0x79a8, 0x70d4, 0x007e, 0x007f,
-+ 0xa102, 0x00c0, 0x1e96, 0x2300, 0xa005, 0x007c, 0x0048, 0x1e9a,
-+ 0xa302, 0x007c, 0x8002, 0x007c, 0x7800, 0xa084, 0x0002, 0x0040,
-+ 0x1ea8, 0x2011, 0x04fd, 0x2204, 0xa082, 0x0005, 0x00c8, 0x1ebb,
-+ 0x2091, 0x8000, 0x2071, 0x0020, 0x7004, 0xa005, 0x00c0, 0x1eec,
-+ 0x7008, 0x7208, 0xa206, 0x00c0, 0x1eec, 0xa286, 0x0008, 0x00c0,
-+ 0x1eec, 0x2071, 0x0010, 0x1078, 0x1ef1, 0x2009, 0x0018, 0x6028,
-+ 0xa005, 0x0040, 0x1ec5, 0x2009, 0x0040, 0x1078, 0x1959, 0x0040,
-+ 0x1ede, 0x78bc, 0x8000, 0x78be, 0xa086, 0x0002, 0x00c0, 0x1eec,
-+ 0x2091, 0x8000, 0x78d7, 0x0003, 0x78bf, 0x0000, 0x78c0, 0xa085,
-+ 0x0300, 0x78c2, 0x2091, 0x8001, 0x0078, 0x1eec, 0x78bf, 0x0000,
-+ 0x1078, 0x1b95, 0x79a4, 0x78a8, 0x8000, 0xa10a, 0x00c8, 0x1ee9,
-+ 0xa006, 0x78aa, 0x70d6, 0xa006, 0x2071, 0x0010, 0x2091, 0x8001,
-+ 0x007c, 0x8107, 0x8004, 0x8004, 0x7ab0, 0x7bac, 0x7cb8, 0x7db4,
-+ 0xa210, 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x007c,
-+ 0x2009, 0x3d68, 0x2091, 0x8000, 0x200a, 0x0f7e, 0x2079, 0x0100,
-+ 0x2009, 0x3d40, 0x2104, 0xa086, 0x0000, 0x00c0, 0x1f1e, 0x2009,
-+ 0x3d12, 0x2104, 0xa005, 0x00c0, 0x1f1e, 0x7830, 0xa084, 0x00c0,
-+ 0x00c0, 0x1f1e, 0x0018, 0x1f1e, 0x781b, 0x0045, 0x0f7f, 0x007c,
-+ 0x127e, 0x2091, 0x2300, 0x2071, 0x3d40, 0x2079, 0x0100, 0x784b,
-+ 0x000f, 0x2019, 0x35fc, 0x20a1, 0x012b, 0x2304, 0xa005, 0x0040,
-+ 0x1f3a, 0x789a, 0x8318, 0x23ac, 0x8318, 0x2398, 0x53a6, 0x3318,
-+ 0x0078, 0x1f2d, 0x789b, 0x0020, 0x20a9, 0x0010, 0x78af, 0x0000,
-+ 0x78af, 0x0020, 0x0070, 0x1f46, 0x0078, 0x1f3e, 0x7003, 0x0000,
-+ 0x1078, 0x205c, 0x7004, 0xa084, 0x000f, 0x017e, 0x2009, 0x04fd,
-+ 0x210c, 0xa18a, 0x0005, 0x0048, 0x1f5d, 0x0038, 0x1f59, 0x0078,
-+ 0x1f5d, 0xa085, 0x62c0, 0x0078, 0x1f5f, 0xa085, 0x6280, 0x017f,
-+ 0x7806, 0x780f, 0x9200, 0x7843, 0x00d8, 0x7853, 0x0080, 0x780b,
-+ 0x0008, 0x7047, 0x3d7f, 0x7043, 0x0000, 0x127f, 0x2000, 0x007c,
-+ 0xa18c, 0x000f, 0x2011, 0x0101, 0x2204, 0xa084, 0xfff0, 0xa105,
-+ 0x2012, 0x1078, 0x205c, 0x007c, 0x2011, 0x0101, 0x20a9, 0x0009,
-+ 0x810b, 0x0070, 0x1f85, 0x0078, 0x1f80, 0xa18c, 0x0e00, 0x2204,
-+ 0xa084, 0xf1ff, 0xa105, 0x2012, 0x007c, 0x2009, 0x0101, 0x20a9,
-+ 0x0005, 0x8213, 0x0070, 0x1f96, 0x0078, 0x1f91, 0xa294, 0x00e0,
-+ 0x2104, 0xa084, 0xff1f, 0xa205, 0x200a, 0x007c, 0x2011, 0x0101,
-+ 0x20a9, 0x000c, 0x810b, 0x0070, 0x1fa7, 0x0078, 0x1fa2, 0xa18c,
-+ 0xf000, 0x2204, 0xa084, 0x0fff, 0xa105, 0x2012, 0x007c, 0x2011,
-+ 0x0102, 0x2204, 0xa084, 0xffcf, 0xa105, 0x2012, 0x007c, 0x8103,
-+ 0x8003, 0xa080, 0x0020, 0x0c7e, 0x2061, 0x0100, 0x609a, 0x62ac,
-+ 0x63ac, 0x0c7f, 0x007c, 0x8103, 0x8003, 0xa080, 0x0022, 0x0c7e,
-+ 0x2061, 0x0100, 0x609a, 0x60a4, 0xa084, 0xffdf, 0x60ae, 0x0c7f,
-+ 0x007c, 0x8103, 0x8003, 0xa080, 0x0022, 0x0c7e, 0x2061, 0x0100,
-+ 0x609a, 0x60a4, 0xa085, 0x0020, 0x60ae, 0x0c7f, 0x007c, 0x8103,
-+ 0x8003, 0xa080, 0x0020, 0x0c7e, 0x2061, 0x0100, 0x609a, 0x60a4,
-+ 0x62ae, 0x2010, 0x60a4, 0x63ae, 0x2018, 0x0c7f, 0x007c, 0x2091,
-+ 0x8000, 0x0c7e, 0x0e7e, 0x6818, 0xa005, 0x0040, 0x203a, 0x2061,
-+ 0x6100, 0x1078, 0x2042, 0x0040, 0x2024, 0x20a9, 0x0000, 0x2061,
-+ 0x6000, 0x0c7e, 0x1078, 0x2042, 0x0040, 0x200e, 0x0c7f, 0x8c60,
-+ 0x0070, 0x200c, 0x0078, 0x2001, 0x0078, 0x203a, 0x007f, 0xa082,
-+ 0x6000, 0x2071, 0x3d40, 0x70ba, 0x6020, 0xa085, 0x0800, 0x6022,
-+ 0x71b6, 0x2001, 0x0004, 0x70a2, 0x70c7, 0x000f, 0x70a7, 0x0000,
-+ 0x1078, 0x1f00, 0x0078, 0x2036, 0x2071, 0x3d40, 0x6020, 0xa085,
-+ 0x0800, 0x6022, 0x71b6, 0x2c00, 0x70be, 0x2001, 0x0006, 0x70a2,
-+ 0x70c7, 0x000f, 0x70a7, 0x0000, 0x1078, 0x1f00, 0x2001, 0x0000,
-+ 0x0078, 0x203c, 0x2001, 0x0001, 0x2091, 0x8001, 0xa005, 0x0e7f,
-+ 0x0c7f, 0x007c, 0x2c04, 0xa005, 0x0040, 0x2059, 0x2060, 0x6010,
-+ 0xa306, 0x00c0, 0x2056, 0x600c, 0xa206, 0x00c0, 0x2056, 0x6014,
-+ 0xa106, 0x00c0, 0x2056, 0xa006, 0x0078, 0x205b, 0x6000, 0x0078,
-+ 0x2043, 0xa085, 0x0001, 0x007c, 0x2011, 0x3d41, 0x220c, 0xa18c,
-+ 0x000f, 0x2011, 0x013b, 0x2204, 0xa084, 0x0100, 0x0040, 0x2072,
-+ 0x2021, 0xff04, 0x2122, 0x810b, 0x810b, 0x810b, 0x810b, 0xa18d,
-+ 0x0f00, 0x2104, 0x007c, 0x0e7e, 0x68e4, 0xa08c, 0x0020, 0x0040,
-+ 0x20c6, 0xa084, 0x0006, 0x00c0, 0x20c6, 0x6014, 0x8007, 0xa084,
-+ 0x000f, 0x8003, 0x8003, 0x8003, 0xa0f0, 0x3f80, 0x7004, 0xa084,
-+ 0x000a, 0x00c0, 0x20c6, 0x7108, 0xa194, 0xff00, 0x0040, 0x20c6,
-+ 0xa18c, 0x00ff, 0x2001, 0x000c, 0xa106, 0x0040, 0x20ad, 0x2001,
-+ 0x0012, 0xa106, 0x0040, 0x20b1, 0x2001, 0x0014, 0xa106, 0x0040,
-+ 0x20b5, 0x2001, 0x0019, 0xa106, 0x0040, 0x20b9, 0x2001, 0x0032,
-+ 0xa106, 0x0040, 0x20bd, 0x0078, 0x20c1, 0x2009, 0x0012, 0x0078,
-+ 0x20c3, 0x2009, 0x0014, 0x0078, 0x20c3, 0x2009, 0x0019, 0x0078,
-+ 0x20c3, 0x2009, 0x0020, 0x0078, 0x20c3, 0x2009, 0x003f, 0x0078,
-+ 0x20c3, 0x2011, 0x0000, 0x2100, 0xa205, 0x700a, 0x0e7f, 0x007c,
-+ 0x0068, 0x20c8, 0x2091, 0x8000, 0x2071, 0x0000, 0x007e, 0x7018,
-+ 0xa084, 0x0001, 0x00c0, 0x20cf, 0x007f, 0x2071, 0x0010, 0x70ca,
-+ 0x007f, 0x70c6, 0x70c3, 0x8002, 0x70db, 0x0442, 0x70df, 0x0000,
-+ 0x2071, 0x0000, 0x701b, 0x0001, 0x2091, 0x4080, 0x0078, 0x20e6,
-+ 0x107e, 0x007e, 0x127e, 0x2091, 0x2300, 0x7f3c, 0x7e58, 0x7c30,
-+ 0x7d38, 0x2009, 0x3d74, 0x78a0, 0x200a, 0x8108, 0x250a, 0x8108,
-+ 0x240a, 0x8108, 0x260a, 0x8108, 0x270a, 0xa594, 0x003f, 0xa484,
-+ 0x4000, 0x0040, 0x210c, 0xa784, 0x007d, 0x00c0, 0x3585, 0xd784,
-+ 0x00c0, 0x2d06, 0x1078, 0x20c8, 0xa49c, 0x000f, 0xa382, 0x0004,
-+ 0x0050, 0x2114, 0x1078, 0x20c8, 0x8507, 0xa084, 0x000f, 0x0079,
-+ 0x2119, 0x25cf, 0x268a, 0x26b2, 0x2946, 0x2bc0, 0x2c23, 0x2c81,
-+ 0x2d06, 0x2dad, 0x2e33, 0x2141, 0x2129, 0x2418, 0x24ef, 0x2b9b,
-+ 0x2129, 0x1078, 0x20c8, 0x0018, 0x20ed, 0x127f, 0x2091, 0x8001,
-+ 0x007f, 0x107f, 0x007c, 0x7003, 0x0000, 0x703f, 0x0000, 0x7030,
-+ 0xa005, 0x0040, 0x213d, 0x7033, 0x0000, 0x1078, 0x355b, 0x0018,
-+ 0x20ed, 0x2009, 0x3d0f, 0x200b, 0x0000, 0x705c, 0xa005, 0x00c0,
-+ 0x2216, 0x70a0, 0xa084, 0x0007, 0x0079, 0x214e, 0x2242, 0x2156,
-+ 0x2164, 0x2181, 0x21a3, 0x21f0, 0x21c9, 0x2156, 0x7808, 0xa084,
-+ 0xfffd, 0x780a, 0x2009, 0x0047, 0x1078, 0x2a7a, 0x00c0, 0x2162,
-+ 0x7003, 0x0004, 0x0078, 0x212b, 0x1078, 0x3542, 0x00c0, 0x217f,
-+ 0x70b4, 0x8007, 0x7882, 0x789b, 0x0010, 0x78ab, 0x000c, 0x789b,
-+ 0x0060, 0x78ab, 0x0001, 0x785b, 0x0004, 0x2009, 0x00fa, 0x1078,
-+ 0x2a78, 0x00c0, 0x217f, 0x7003, 0x0004, 0x70c7, 0x000f, 0x0078,
-+ 0x212b, 0x1078, 0x3542, 0x00c0, 0x21a1, 0x71b4, 0x8107, 0x7882,
-+ 0x789b, 0x0010, 0xa18c, 0x001f, 0xa18d, 0x00c0, 0x79aa, 0x78ab,
-+ 0x0006, 0x789b, 0x0060, 0x78ab, 0x0002, 0x785b, 0x0004, 0x2009,
-+ 0x00fa, 0x1078, 0x2a78, 0x00c0, 0x21a1, 0x7003, 0x0004, 0x70c7,
-+ 0x000f, 0x0078, 0x212b, 0x1078, 0x3542, 0x00c0, 0x21c7, 0x71b4,
-+ 0x8107, 0x7882, 0x789b, 0x0010, 0xa18c, 0x001f, 0xa18d, 0x00c0,
-+ 0x79aa, 0x78ab, 0x0020, 0x71b8, 0x79aa, 0x78ab, 0x000d, 0x789b,
-+ 0x0060, 0x78ab, 0x0004, 0x785b, 0x0004, 0x2009, 0x00fa, 0x1078,
-+ 0x2a78, 0x00c0, 0x21c7, 0x7003, 0x0004, 0x70c7, 0x000f, 0x0078,
-+ 0x212b, 0x1078, 0x3542, 0x00c0, 0x21ee, 0x71b4, 0x8107, 0x7882,
-+ 0x789b, 0x0010, 0xa18c, 0x001f, 0xa18d, 0x00c0, 0x79aa, 0x78ab,
-+ 0x0006, 0x789b, 0x0060, 0x78ab, 0x0002, 0x785b, 0x0004, 0x2009,
-+ 0x00fa, 0x1078, 0x2a78, 0x00c0, 0x21ee, 0x70bc, 0x70bf, 0x0000,
-+ 0x2068, 0x703e, 0x7003, 0x0002, 0x70c7, 0x000f, 0x0078, 0x212b,
-+ 0x1078, 0x3542, 0x00c0, 0x212b, 0x70bc, 0x2068, 0x6f14, 0x1078,
-+ 0x3449, 0x2c50, 0x1078, 0x35ea, 0x789b, 0x0010, 0x6814, 0xa084,
-+ 0x001f, 0xa085, 0x0080, 0x007e, 0x007f, 0x78aa, 0x6e1c, 0x067e,
-+ 0x067f, 0x2041, 0x0001, 0x70c0, 0xa084, 0x0400, 0x2001, 0x0004,
-+ 0x0040, 0x2214, 0x2001, 0x0006, 0x0078, 0x2334, 0x1078, 0x3542,
-+ 0x00c0, 0x212b, 0x789b, 0x0010, 0x705c, 0x2068, 0x6f14, 0x1078,
-+ 0x3449, 0x2c50, 0x1078, 0x35ea, 0x6008, 0xa085, 0x0010, 0x600a,
-+ 0x6824, 0xa005, 0x0040, 0x2234, 0xa082, 0x0006, 0x0048, 0x2232,
-+ 0x0078, 0x2234, 0x6827, 0x0005, 0x6814, 0xa084, 0x001f, 0xa085,
-+ 0x0080, 0x78aa, 0x2031, 0x0020, 0x2041, 0x0001, 0x2001, 0x0003,
-+ 0x0078, 0x2334, 0x0018, 0x20ed, 0x7440, 0xa485, 0x0000, 0x0040,
-+ 0x226c, 0xa080, 0x3d80, 0x2030, 0x7144, 0x0018, 0x20ed, 0x8108,
-+ 0xa12a, 0x0048, 0x2255, 0x2009, 0x3d80, 0x2164, 0x6504, 0x85ff,
-+ 0x00c0, 0x2279, 0x8421, 0x00c0, 0x224d, 0x017e, 0x2009, 0x3d0f,
-+ 0x2104, 0xa005, 0x00c0, 0x226a, 0x017e, 0x2009, 0x3d10, 0x2104,
-+ 0x017f, 0x200a, 0x017f, 0x7146, 0x7003, 0x0000, 0x703f, 0x0000,
-+ 0x0078, 0x212b, 0x7640, 0xa6b0, 0x3d80, 0x7144, 0x2600, 0x0078,
-+ 0x225a, 0x7146, 0x2568, 0x2558, 0x753e, 0x2c50, 0x6034, 0xa085,
-+ 0x0000, 0x00c0, 0x2276, 0x6708, 0x7736, 0xa784, 0x013f, 0x0040,
-+ 0x22a7, 0xa784, 0x0021, 0x00c0, 0x2276, 0xa784, 0x0002, 0x0040,
-+ 0x2298, 0xa784, 0x0004, 0x0040, 0x2276, 0xa7bc, 0xfffb, 0x670a,
-+ 0xa784, 0x0018, 0x00c0, 0x2276, 0xa784, 0x0100, 0x0040, 0x22a7,
-+ 0x6018, 0xa005, 0x00c0, 0x2276, 0xa7bc, 0xfeff, 0x670a, 0x6823,
-+ 0x0000, 0x6e1c, 0xa684, 0x000e, 0x6118, 0x0040, 0x22b7, 0x601c,
-+ 0xa102, 0x0048, 0x22ba, 0x0040, 0x22ba, 0x0078, 0x2272, 0x81ff,
-+ 0x00c0, 0x2272, 0xa784, 0x0080, 0x00c0, 0x22c0, 0x700c, 0x6022,
-+ 0xa7bc, 0xff7f, 0x670a, 0x1078, 0x35ea, 0x0018, 0x20ed, 0x789b,
-+ 0x0010, 0xa046, 0x1078, 0x3542, 0x00c0, 0x212b, 0x6b14, 0xa39c,
-+ 0x001f, 0xa39d, 0x00c0, 0x704c, 0xa084, 0x8000, 0x0040, 0x22dc,
-+ 0xa684, 0x0001, 0x0040, 0x22de, 0xa39c, 0xffbf, 0xa684, 0x0010,
-+ 0x0040, 0x22e4, 0xa39d, 0x0020, 0x7baa, 0x8840, 0xa684, 0x000e,
-+ 0x00c0, 0x22ef, 0xa7bd, 0x0010, 0x670a, 0x0078, 0x2330, 0x714c,
-+ 0xa18c, 0x0800, 0x0040, 0x304e, 0x2011, 0x0021, 0x8004, 0x8004,
-+ 0x0048, 0x2306, 0x2011, 0x0022, 0x8004, 0x0048, 0x2306, 0x2011,
-+ 0x0020, 0x8004, 0x0048, 0x2306, 0x0040, 0x2330, 0x7aaa, 0x8840,
-+ 0x1078, 0x355b, 0x6a14, 0x610c, 0x8108, 0xa18c, 0x00ff, 0xa1e0,
-+ 0x6000, 0x2c64, 0x8cff, 0x0040, 0x2327, 0x6014, 0xa206, 0x00c0,
-+ 0x2311, 0x60b8, 0x8001, 0x60ba, 0x00c0, 0x230c, 0x0c7e, 0x2a60,
-+ 0x6008, 0xa085, 0x0100, 0x600a, 0x0c7f, 0x0078, 0x2242, 0x1078,
-+ 0x3542, 0x00c0, 0x212b, 0x2a60, 0x610e, 0x79aa, 0x8840, 0x712e,
-+ 0x0018, 0x20ed, 0x2001, 0x0001, 0x007e, 0x7150, 0xa184, 0x0018,
-+ 0x0040, 0x234f, 0xa184, 0x0010, 0x0040, 0x2342, 0x1078, 0x3273,
-+ 0x00c0, 0x2372, 0xa184, 0x0008, 0x0040, 0x234f, 0x69a0, 0xa184,
-+ 0x0600, 0x00c0, 0x234f, 0x1078, 0x316f, 0x0078, 0x2372, 0x69a0,
-+ 0xa184, 0x0800, 0x0040, 0x2366, 0x0c7e, 0x027e, 0x2960, 0x6000,
-+ 0xa085, 0x2000, 0x6002, 0x6104, 0xa18d, 0x0010, 0x6106, 0x027f,
-+ 0x0c7f, 0x1078, 0x3273, 0x00c0, 0x2372, 0x69a0, 0xa184, 0x0200,
-+ 0x0040, 0x236e, 0x1078, 0x31be, 0x0078, 0x2372, 0xa184, 0x0400,
-+ 0x00c0, 0x234b, 0x69a0, 0xa184, 0x1000, 0x0040, 0x237d, 0x6914,
-+ 0xa18c, 0xff00, 0x810f, 0x1078, 0x1fc3, 0x007f, 0x0018, 0x20ed,
-+ 0x7002, 0xa68c, 0x00e0, 0xa684, 0x0060, 0x0040, 0x238d, 0xa086,
-+ 0x0060, 0x00c0, 0x238d, 0xa18d, 0x4000, 0x88ff, 0x0040, 0x2392,
-+ 0xa18d, 0x0004, 0x795a, 0x69b6, 0x789b, 0x0060, 0x2800, 0x78aa,
-+ 0x789b, 0x0061, 0x6818, 0xa08d, 0x8000, 0xa084, 0x7fff, 0x691a,
-+ 0xa68c, 0x0080, 0x0040, 0x23b1, 0x70cb, 0x0000, 0xa08a, 0x000d,
-+ 0x0050, 0x23af, 0xa08a, 0x000c, 0x71ca, 0x2001, 0x000c, 0x800c,
-+ 0x71ce, 0x78aa, 0x8008, 0x810c, 0x0040, 0x3054, 0xa18c, 0x00f8,
-+ 0x00c0, 0x3054, 0x157e, 0x137e, 0x147e, 0x20a1, 0x012b, 0x789b,
-+ 0x0000, 0x8000, 0x80ac, 0xad80, 0x000b, 0x2098, 0x53a6, 0x147f,
-+ 0x137f, 0x157f, 0x6814, 0x8007, 0x7882, 0x6d94, 0x7dd6, 0x7dde,
-+ 0x6e98, 0x7ed2, 0x7eda, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x23da,
-+ 0x0098, 0x23e2, 0x6008, 0xa084, 0xffef, 0x600a, 0x1078, 0x355b,
-+ 0x0078, 0x2133, 0x7200, 0xa284, 0x0007, 0xa086, 0x0001, 0x00c0,
-+ 0x23ef, 0x781b, 0x004a, 0x1078, 0x355b, 0x0078, 0x2400, 0x6ab4,
-+ 0xa295, 0x2000, 0x7a5a, 0x781b, 0x004a, 0x1078, 0x355b, 0x7200,
-+ 0x2500, 0xa605, 0x0040, 0x2400, 0xa284, 0x0007, 0x1079, 0x240e,
-+ 0xad80, 0x0009, 0x7032, 0xa284, 0x0007, 0xa086, 0x0001, 0x00c0,
-+ 0x212b, 0x6018, 0x8000, 0x601a, 0x0078, 0x212b, 0x2416, 0x39a0,
-+ 0x39a0, 0x398f, 0x39a0, 0x2416, 0x398f, 0x2416, 0x1078, 0x20c8,
-+ 0x7808, 0xa084, 0xfffd, 0x780a, 0x0f7e, 0x2079, 0x3d00, 0x78c0,
-+ 0x0f7f, 0xa084, 0x0001, 0x0040, 0x243e, 0x70a0, 0xa086, 0x0001,
-+ 0x00c0, 0x242d, 0x70a2, 0x0078, 0x24d1, 0x70a0, 0xa086, 0x0005,
-+ 0x00c0, 0x243c, 0x70bc, 0x2068, 0x681b, 0x0004, 0x6817, 0x0000,
-+ 0x6820, 0xa085, 0x0008, 0x6822, 0x70a3, 0x0000, 0x157e, 0x2011,
-+ 0x0004, 0x71a0, 0xa186, 0x0001, 0x0040, 0x2460, 0xa186, 0x0007,
-+ 0x00c0, 0x2450, 0x2009, 0x3d35, 0x200b, 0x0005, 0x0078, 0x2460,
-+ 0x2009, 0x3d13, 0x2104, 0x2009, 0x3d12, 0x200a, 0x2009, 0x3d35,
-+ 0x200b, 0x0001, 0x70a3, 0x0000, 0x70a7, 0x0001, 0x0078, 0x2462,
-+ 0x70a3, 0x0000, 0x1078, 0x36ec, 0x20a9, 0x0010, 0x2039, 0x0000,
-+ 0x1078, 0x3340, 0xa7b8, 0x0100, 0x0070, 0x2470, 0x0078, 0x2468,
-+ 0x7000, 0x0079, 0x2473, 0x24a3, 0x248a, 0x248a, 0x247d, 0x24a3,
-+ 0x24a3, 0x24a3, 0x247b, 0x1078, 0x20c8, 0x2021, 0x3d57, 0x2404,
-+ 0xa005, 0x0040, 0x24a3, 0xad06, 0x00c0, 0x248a, 0x6800, 0x2022,
-+ 0x0078, 0x249a, 0x6820, 0xa084, 0x0001, 0x00c0, 0x2496, 0x6f14,
-+ 0x1078, 0x3449, 0x1078, 0x3025, 0x0078, 0x249a, 0x7054, 0x2060,
-+ 0x6800, 0x6002, 0x6a1a, 0x6817, 0x0000, 0x6820, 0xa085, 0x0008,
-+ 0x6822, 0x1078, 0x1b7f, 0x2021, 0x6100, 0x1078, 0x24d7, 0x2021,
-+ 0x3d57, 0x1078, 0x24d7, 0x20a9, 0x0000, 0x2021, 0x6000, 0x1078,
-+ 0x24d7, 0x8420, 0x0070, 0x24b6, 0x0078, 0x24af, 0x2061, 0x4000,
-+ 0x2021, 0x0002, 0x20a9, 0x0100, 0x6018, 0x6110, 0x81ff, 0x0040,
-+ 0x24c5, 0xa102, 0x0050, 0x24c5, 0x6012, 0x601b, 0x0000, 0xace0,
-+ 0x0010, 0x0070, 0x24cd, 0x0078, 0x24bc, 0x8421, 0x00c0, 0x24ba,
-+ 0x157f, 0x7003, 0x0000, 0x703f, 0x0000, 0x0078, 0x212b, 0x047e,
-+ 0x2404, 0xa005, 0x0040, 0x24eb, 0x2068, 0x6800, 0x007e, 0x6a1a,
-+ 0x6817, 0x0000, 0x6820, 0xa085, 0x0008, 0x6822, 0x1078, 0x1b7f,
-+ 0x007f, 0x0078, 0x24d9, 0x047f, 0x2023, 0x0000, 0x007c, 0xa282,
-+ 0x0003, 0x0050, 0x24f5, 0x1078, 0x20c8, 0x2300, 0x0079, 0x24f8,
-+ 0x24fb, 0x256e, 0x258b, 0xa282, 0x0002, 0x0040, 0x2501, 0x1078,
-+ 0x20c8, 0x70a0, 0x70a3, 0x0000, 0x70c7, 0x0000, 0x0079, 0x2508,
-+ 0x2510, 0x2510, 0x2512, 0x2546, 0x305a, 0x2510, 0x2546, 0x2510,
-+ 0x1078, 0x20c8, 0x77b4, 0x1078, 0x3340, 0x77b4, 0xa7bc, 0x0f00,
-+ 0x1078, 0x3449, 0x6018, 0xa005, 0x0040, 0x253d, 0x2021, 0x6100,
-+ 0x2009, 0x0004, 0x2011, 0x0010, 0x1078, 0x25a8, 0x0040, 0x253d,
-+ 0x157e, 0x20a9, 0x0000, 0x2021, 0x6000, 0x047e, 0x2009, 0x0004,
-+ 0x2011, 0x0010, 0x1078, 0x25a8, 0x047f, 0x0040, 0x253c, 0x8420,
-+ 0x0070, 0x253c, 0x0078, 0x252d, 0x157f, 0x8738, 0xa784, 0x001f,
-+ 0x00c0, 0x2518, 0x0078, 0x2133, 0x0078, 0x2133, 0x77b4, 0x1078,
-+ 0x3449, 0x6018, 0xa005, 0x0040, 0x256c, 0x2021, 0x6100, 0x2009,
-+ 0x0005, 0x2011, 0x0020, 0x1078, 0x25a8, 0x0040, 0x256c, 0x157e,
-+ 0x20a9, 0x0000, 0x2021, 0x6000, 0x047e, 0x2009, 0x0005, 0x2011,
-+ 0x0020, 0x1078, 0x25a8, 0x047f, 0x0040, 0x256b, 0x8420, 0x0070,
-+ 0x256b, 0x0078, 0x255c, 0x157f, 0x0078, 0x2133, 0x2200, 0x0079,
-+ 0x2571, 0x2574, 0x2576, 0x2576, 0x1078, 0x20c8, 0x2009, 0x0012,
-+ 0x70a0, 0xa086, 0x0002, 0x0040, 0x257f, 0x2009, 0x000e, 0x6818,
-+ 0xa084, 0x8000, 0x0040, 0x2585, 0x691a, 0x70a3, 0x0000, 0x70a7,
-+ 0x0001, 0x0078, 0x34da, 0x2200, 0x0079, 0x258e, 0x2593, 0x2576,
-+ 0x2591, 0x1078, 0x20c8, 0x7000, 0xa086, 0x0001, 0x00c0, 0x25a4,
-+ 0x1078, 0x303b, 0x6008, 0xa084, 0xffef, 0x600a, 0x1078, 0x2fdd,
-+ 0x0040, 0x25a4, 0x0078, 0x2242, 0x1078, 0x2a87, 0x0078, 0x2fea,
-+ 0x2404, 0xa005, 0x0040, 0x25cb, 0x2068, 0x2d04, 0x007e, 0x6814,
-+ 0xa706, 0x0040, 0x25b7, 0x2d20, 0x007f, 0x0078, 0x25a9, 0x007f,
-+ 0x2022, 0x691a, 0x6817, 0x0000, 0x6820, 0xa205, 0x6822, 0x1078,
-+ 0x1b7f, 0x6010, 0x8001, 0x6012, 0x6008, 0xa084, 0xffef, 0x600a,
-+ 0x1078, 0x303b, 0x007c, 0xa085, 0x0001, 0x0078, 0x25ca, 0x2300,
-+ 0x0079, 0x25d2, 0x25d7, 0x25d5, 0x2630, 0x1078, 0x20c8, 0x78e4,
-+ 0xa005, 0x00d0, 0x25fa, 0x0018, 0x212b, 0x2008, 0xa084, 0x0030,
-+ 0x00c0, 0x25e6, 0x781b, 0x004a, 0x0078, 0x212b, 0x78ec, 0xa084,
-+ 0x0003, 0x0040, 0x25e2, 0x2100, 0xa084, 0x0007, 0x0079, 0x25f0,
-+ 0x260b, 0x2616, 0x25fe, 0x25f8, 0x3535, 0x3535, 0x25f8, 0x2623,
-+ 0x1078, 0x20c8, 0x2001, 0x0003, 0x0078, 0x295a, 0x6818, 0xa084,
-+ 0x8000, 0x0040, 0x2605, 0x681b, 0x001d, 0x1078, 0x3323, 0x781b,
-+ 0x0053, 0x0078, 0x212b, 0x6818, 0xa084, 0x8000, 0x0040, 0x2612,
-+ 0x681b, 0x001d, 0x1078, 0x3323, 0x0078, 0x3506, 0x6818, 0xa084,
-+ 0x8000, 0x0040, 0x261d, 0x681b, 0x001d, 0x1078, 0x3323, 0x781b,
-+ 0x00e3, 0x0078, 0x212b, 0x6818, 0xa084, 0x8000, 0x0040, 0x262a,
-+ 0x681b, 0x001d, 0x1078, 0x3323, 0x781b, 0x009e, 0x0078, 0x212b,
-+ 0xa584, 0x000f, 0x00c0, 0x2651, 0x7000, 0x0079, 0x2637, 0x263f,
-+ 0x2641, 0x263f, 0x264d, 0x264d, 0x264d, 0x264d, 0x263f, 0x1078,
-+ 0x20c8, 0x1078, 0x303b, 0x6008, 0xa084, 0xffef, 0x600a, 0x1078,
-+ 0x2fdd, 0x0040, 0x264d, 0x0078, 0x2242, 0x1078, 0x2a87, 0x0078,
-+ 0x2fea, 0x78e4, 0xa005, 0x00d0, 0x25fa, 0x0018, 0x25fa, 0x2008,
-+ 0xa084, 0x0030, 0x00c0, 0x2660, 0x781b, 0x004a, 0x0078, 0x212b,
-+ 0x78ec, 0xa084, 0x0003, 0x0040, 0x265c, 0x2100, 0xa184, 0x0007,
-+ 0x0079, 0x266a, 0x267a, 0x267e, 0x2674, 0x2672, 0x3535, 0x3535,
-+ 0x2672, 0x352d, 0x1078, 0x20c8, 0x1078, 0x332b, 0x781b, 0x0053,
-+ 0x0078, 0x212b, 0x1078, 0x332b, 0x0078, 0x3506, 0x1078, 0x332b,
-+ 0x781b, 0x00e3, 0x0078, 0x212b, 0x1078, 0x332b, 0x781b, 0x009e,
-+ 0x0078, 0x212b, 0x2300, 0x0079, 0x268d, 0x2692, 0x2690, 0x2694,
-+ 0x1078, 0x20c8, 0x0078, 0x2d06, 0x681b, 0x0008, 0x78a3, 0x0000,
-+ 0x79e4, 0xa184, 0x0030, 0x0040, 0x2d06, 0x78ec, 0xa084, 0x0003,
-+ 0x0040, 0x2d06, 0xa184, 0x0007, 0x0079, 0x26a6, 0x26ae, 0x267e,
-+ 0x25fe, 0x34da, 0x3535, 0x3535, 0x26ae, 0x352d, 0x1078, 0x34ea,
-+ 0x0078, 0x212b, 0xa282, 0x0005, 0x0050, 0x26b8, 0x1078, 0x20c8,
-+ 0x2300, 0x0079, 0x26bb, 0x26be, 0x290b, 0x2917, 0x2200, 0x0079,
-+ 0x26c1, 0x26db, 0x26c8, 0x26db, 0x26c6, 0x28f0, 0x1078, 0x20c8,
-+ 0x789b, 0x0018, 0x78a8, 0xa084, 0x00ff, 0xa082, 0x0020, 0x0048,
-+ 0x3305, 0xa08a, 0x0004, 0x00c8, 0x3305, 0x0079, 0x26d7, 0x3305,
-+ 0x3305, 0x3305, 0x32b3, 0x789b, 0x0018, 0x79a8, 0xa184, 0x0080,
-+ 0x0040, 0x26ec, 0x0078, 0x3305, 0x7000, 0xa005, 0x00c0, 0x26e2,
-+ 0x2011, 0x0004, 0x0078, 0x2e41, 0xa184, 0x00ff, 0xa08a, 0x0010,
-+ 0x00c8, 0x3305, 0x0079, 0x26f4, 0x2706, 0x2704, 0x271e, 0x2722,
-+ 0x27dd, 0x3305, 0x3305, 0x27df, 0x3305, 0x3305, 0x28ec, 0x28ec,
-+ 0x3305, 0x3305, 0x3305, 0x28ee, 0x1078, 0x20c8, 0xa684, 0x1000,
-+ 0x0040, 0x2713, 0x2001, 0x0300, 0x8000, 0x8000, 0x783a, 0x781b,
-+ 0x009b, 0x0078, 0x212b, 0x6818, 0xa084, 0x8000, 0x0040, 0x271c,
-+ 0x681b, 0x001d, 0x0078, 0x270a, 0x0078, 0x34da, 0x681b, 0x001d,
-+ 0x0078, 0x3311, 0x6920, 0x6922, 0xa684, 0x1800, 0x00c0, 0x2763,
-+ 0x6820, 0xa084, 0x0001, 0x00c0, 0x276b, 0x6818, 0xa086, 0x0008,
-+ 0x00c0, 0x2734, 0x681b, 0x0000, 0xa684, 0x0400, 0x0040, 0x27d9,
-+ 0xa684, 0x0080, 0x0040, 0x275f, 0x70cb, 0x0000, 0x6818, 0xa084,
-+ 0x003f, 0xa08a, 0x000d, 0x0050, 0x275f, 0xa08a, 0x000c, 0x71ca,
-+ 0x2001, 0x000c, 0x800c, 0x71ce, 0x789b, 0x0061, 0x78aa, 0x157e,
-+ 0x137e, 0x147e, 0x20a1, 0x012b, 0x789b, 0x0000, 0x8000, 0x80ac,
-+ 0xad80, 0x000b, 0x2098, 0x53a6, 0x147f, 0x137f, 0x157f, 0x781b,
-+ 0x0056, 0x0078, 0x212b, 0xa684, 0x1000, 0x0040, 0x276b, 0x781b,
-+ 0x0068, 0x0078, 0x212b, 0xa684, 0x0060, 0x0040, 0x27d5, 0xa684,
-+ 0x0800, 0x0040, 0x27d5, 0xa684, 0x8000, 0x00c0, 0x2779, 0x0078,
-+ 0x2791, 0xa6b4, 0x7fff, 0x7e5a, 0x6eb6, 0x7adc, 0x79d8, 0x78d0,
-+ 0x801b, 0x00c8, 0x2784, 0x8000, 0xa084, 0x003f, 0xa108, 0xa291,
-+ 0x0000, 0x6b98, 0x2100, 0xa302, 0x68b2, 0x6b94, 0x2200, 0xa303,
-+ 0x68ae, 0xa684, 0x4000, 0x0040, 0x2799, 0xa6b4, 0xbfff, 0x7e5a,
-+ 0x6eb6, 0x7000, 0xa086, 0x0003, 0x00c0, 0x27a6, 0x1078, 0x3792,
-+ 0x1078, 0x398f, 0x781b, 0x0065, 0x0078, 0x212b, 0xa006, 0x1078,
-+ 0x3a5e, 0x6ab0, 0x69ac, 0x6c98, 0x6b94, 0x2200, 0xa105, 0x0040,
-+ 0x27b5, 0x2200, 0xa422, 0x2100, 0xa31b, 0x6caa, 0x7cd2, 0x7cda,
-+ 0x6ba6, 0x7bd6, 0x7bde, 0x2300, 0xa405, 0x00c0, 0x27c7, 0xa6b5,
-+ 0x4000, 0x7e5a, 0x6eb6, 0x781b, 0x0065, 0x0078, 0x212b, 0x781b,
-+ 0x0065, 0x2200, 0xa115, 0x00c0, 0x27d1, 0x1078, 0x39a0, 0x0078,
-+ 0x212b, 0x1078, 0x39d5, 0x0078, 0x212b, 0x781b, 0x0068, 0x0078,
-+ 0x212b, 0x781b, 0x0056, 0x0078, 0x212b, 0x1078, 0x20c8, 0x0078,
-+ 0x283c, 0x6920, 0xa184, 0x0100, 0x0040, 0x27f7, 0xa18c, 0xfeff,
-+ 0x6922, 0x0c7e, 0x7048, 0x2060, 0x6000, 0xa084, 0xefff, 0x6002,
-+ 0x6004, 0xa084, 0xfff5, 0x6006, 0x0c7f, 0x0078, 0x282b, 0xa184,
-+ 0x0200, 0x0040, 0x282b, 0xa18c, 0xfdff, 0x6922, 0x0c7e, 0x7048,
-+ 0x2060, 0x6000, 0xa084, 0xdfff, 0x6002, 0x6004, 0xa084, 0xffef,
-+ 0x6006, 0x2008, 0x2c48, 0x0c7f, 0xa184, 0x0008, 0x0040, 0x282b,
-+ 0x1078, 0x3445, 0x1078, 0x316f, 0x88ff, 0x0040, 0x282b, 0x789b,
-+ 0x0060, 0x2800, 0x78aa, 0x7e58, 0xa6b5, 0x0004, 0x7e5a, 0xa684,
-+ 0x0400, 0x00c0, 0x2827, 0x781b, 0x0053, 0x0078, 0x212b, 0x781b,
-+ 0x0067, 0x0078, 0x212b, 0x7e58, 0xa684, 0x0400, 0x00c0, 0x2834,
-+ 0x781b, 0x0056, 0x0078, 0x212b, 0x781b, 0x0068, 0x0078, 0x212b,
-+ 0x0078, 0x330b, 0x0078, 0x330b, 0x2019, 0x0000, 0x7990, 0xa18c,
-+ 0x0007, 0x00c0, 0x284a, 0x6820, 0xa084, 0x0100, 0x0040, 0x283a,
-+ 0x2009, 0x0008, 0x789b, 0x0010, 0x78a8, 0xa094, 0x00ff, 0xa286,
-+ 0x0001, 0x00c0, 0x2881, 0x2300, 0x7ca8, 0xa400, 0x2018, 0xa102,
-+ 0x0040, 0x2879, 0x0048, 0x285e, 0x0078, 0x287b, 0xa380, 0x0002,
-+ 0xa102, 0x00c8, 0x2879, 0x6920, 0xa18c, 0xfcff, 0x6922, 0x0c7e,
-+ 0x7048, 0x2060, 0x6000, 0xa084, 0xefef, 0x6002, 0x6004, 0xa084,
-+ 0xffe5, 0x6006, 0x0c7f, 0x7e58, 0xa6b4, 0xfffb, 0x7e5a, 0x0078,
-+ 0x282c, 0x0078, 0x27e1, 0x24a8, 0x7aa8, 0x00f0, 0x287b, 0x0078,
-+ 0x284c, 0xa284, 0x00f0, 0xa086, 0x0020, 0x00c0, 0x28dd, 0x8318,
-+ 0x8318, 0x2300, 0xa102, 0x0040, 0x2891, 0x0048, 0x2891, 0x0078,
-+ 0x28da, 0xa286, 0x0023, 0x0040, 0x283a, 0x681c, 0xa084, 0xfff1,
-+ 0x681e, 0x7e58, 0xa684, 0xfff1, 0xa085, 0x0010, 0x2030, 0x7e5a,
-+ 0x6008, 0xa085, 0x0010, 0x600a, 0x0c7e, 0x7048, 0x2060, 0x6004,
-+ 0x2008, 0x2c48, 0x0c7f, 0xa184, 0x0010, 0x0040, 0x28b5, 0x1078,
-+ 0x3445, 0x1078, 0x3273, 0x0078, 0x28c4, 0x0c7e, 0x7048, 0x2060,
-+ 0x6004, 0x2008, 0x2c48, 0x0c7f, 0xa184, 0x0008, 0x0040, 0x282b,
-+ 0x1078, 0x3445, 0x1078, 0x316f, 0x88ff, 0x0040, 0x282b, 0x789b,
-+ 0x0060, 0x2800, 0x78aa, 0xa6b5, 0x0004, 0x7e5a, 0xa684, 0x0400,
-+ 0x00c0, 0x28d6, 0x781b, 0x0053, 0x0078, 0x212b, 0x781b, 0x0067,
-+ 0x0078, 0x212b, 0x7aa8, 0x0078, 0x284c, 0x8318, 0x2300, 0xa102,
-+ 0x0040, 0x28e6, 0x0048, 0x28e6, 0x0078, 0x284c, 0xa284, 0x0080,
-+ 0x00c0, 0x3311, 0x0078, 0x330b, 0x0078, 0x3311, 0x0078, 0x3305,
-+ 0x789b, 0x0018, 0x78a8, 0xa084, 0x00ff, 0xa08e, 0x0001, 0x0040,
-+ 0x28fb, 0x1078, 0x20c8, 0x7aa8, 0xa294, 0x00ff, 0x78a8, 0xa084,
-+ 0x00ff, 0xa08a, 0x0004, 0x00c8, 0x3305, 0x0079, 0x2907, 0x308b,
-+ 0x30c2, 0x3305, 0x320e, 0xa282, 0x0000, 0x00c0, 0x2911, 0x1078,
-+ 0x20c8, 0x1078, 0x3323, 0x781b, 0x0067, 0x0078, 0x212b, 0xa282,
-+ 0x0003, 0x00c0, 0x291d, 0x1078, 0x20c8, 0xa484, 0x8000, 0x00c0,
-+ 0x2940, 0x70a0, 0xa005, 0x0040, 0x2927, 0x1078, 0x20c8, 0x6f14,
-+ 0x77b6, 0xa7bc, 0x0f00, 0x1078, 0x3449, 0x6008, 0xa085, 0x0021,
-+ 0x600a, 0x8738, 0xa784, 0x001f, 0x00c0, 0x292b, 0x1078, 0x3327,
-+ 0x70a3, 0x0002, 0x2009, 0x3d35, 0x200b, 0x0009, 0x0078, 0x2942,
-+ 0x1078, 0x3333, 0x781b, 0x0067, 0x0078, 0x212b, 0xa282, 0x0004,
-+ 0x0050, 0x294c, 0x1078, 0x20c8, 0x2300, 0x0079, 0x294f, 0x2952,
-+ 0x2a33, 0x2a62, 0xa286, 0x0003, 0x0040, 0x2958, 0x1078, 0x20c8,
-+ 0x2001, 0x0000, 0x007e, 0x68a0, 0xa084, 0x2000, 0x0040, 0x2964,
-+ 0x6008, 0xa085, 0x0002, 0x600a, 0x007f, 0x703a, 0x7000, 0xa084,
-+ 0x0007, 0x0079, 0x296b, 0x2133, 0x2975, 0x2975, 0x2b50, 0x2b81,
-+ 0x2133, 0x2b81, 0x2973, 0x1078, 0x20c8, 0xa684, 0x1000, 0x00c0,
-+ 0x297d, 0x1078, 0x36ec, 0x0040, 0x2a0d, 0x7868, 0xa08c, 0x00ff,
-+ 0x0040, 0x29c3, 0xa186, 0x0008, 0x00c0, 0x2994, 0x6008, 0xa084,
-+ 0xffef, 0x600a, 0x1078, 0x2fdd, 0x0040, 0x29c3, 0x1078, 0x303b,
-+ 0x1078, 0x36ec, 0x0078, 0x29aa, 0xa186, 0x0028, 0x00c0, 0x29c3,
-+ 0x1078, 0x36ec, 0x6008, 0xa084, 0xffef, 0x600a, 0x6018, 0xa005,
-+ 0x0040, 0x29aa, 0x8001, 0x601a, 0x6008, 0xa085, 0x0008, 0x600a,
-+ 0x7010, 0x6026, 0x6820, 0xa084, 0x0001, 0x0040, 0x2133, 0x6820,
-+ 0xa084, 0xfffe, 0x6822, 0x7054, 0x0c7e, 0x2060, 0x6800, 0x6002,
-+ 0x0c7f, 0x6004, 0x6802, 0xa005, 0x2d00, 0x00c0, 0x29c0, 0x6002,
-+ 0x6006, 0x0078, 0x2133, 0x017e, 0x1078, 0x2a87, 0x017f, 0xa684,
-+ 0xdf00, 0x681e, 0x682b, 0x0000, 0x6f14, 0x81ff, 0x0040, 0x2a0d,
-+ 0xa186, 0x0002, 0x00c0, 0x2a0d, 0xa684, 0x0800, 0x00c0, 0x29e0,
-+ 0xa684, 0x0060, 0x0040, 0x29e0, 0x78d8, 0x7adc, 0x682e, 0x6a32,
-+ 0x6820, 0xa084, 0x0800, 0x00c0, 0x2a0d, 0x8717, 0xa294, 0x000f,
-+ 0x8213, 0x8213, 0x8213, 0xa290, 0x3f80, 0xa290, 0x0000, 0x221c,
-+ 0xa384, 0x0100, 0x00c0, 0x29f6, 0x0078, 0x29fc, 0x8210, 0x2204,
-+ 0xa085, 0x0018, 0x2012, 0x8211, 0xa384, 0x0400, 0x0040, 0x2a09,
-+ 0x68a0, 0xa084, 0x0100, 0x00c0, 0x2a09, 0x1078, 0x2b0b, 0x0078,
-+ 0x2133, 0x6008, 0xa085, 0x0002, 0x600a, 0x6916, 0x6818, 0xa084,
-+ 0x8000, 0x0040, 0x2a15, 0x7038, 0x681a, 0xa68c, 0xdf00, 0x691e,
-+ 0x1078, 0x302c, 0x1078, 0x303b, 0x00c0, 0x2a22, 0x6008, 0xa084,
-+ 0xffef, 0x600a, 0x6820, 0xa084, 0x0001, 0x00c0, 0x2a2b, 0x1078,
-+ 0x3025, 0x0078, 0x2a2f, 0x7054, 0x2060, 0x6800, 0x6002, 0x1078,
-+ 0x1b7f, 0x0078, 0x2133, 0xa282, 0x0004, 0x0048, 0x2a39, 0x1078,
-+ 0x20c8, 0x2200, 0x0079, 0x2a3c, 0x2a37, 0x2a40, 0x2a4d, 0x2a40,
-+ 0x7000, 0xa086, 0x0005, 0x0040, 0x2a49, 0x1078, 0x3323, 0x781b,
-+ 0x0067, 0x781b, 0x0068, 0x0078, 0x212b, 0x7890, 0x8007, 0x8001,
-+ 0xa084, 0x0007, 0xa080, 0x0018, 0x789a, 0x79a8, 0xa18c, 0x00ff,
-+ 0xa186, 0x0003, 0x0040, 0x2a5e, 0x0078, 0x3305, 0x781b, 0x0068,
-+ 0x0078, 0x212b, 0x6820, 0xa085, 0x0004, 0x6822, 0x82ff, 0x00c0,
-+ 0x2a6d, 0x1078, 0x3323, 0x0078, 0x2a74, 0x8211, 0x0040, 0x2a72,
-+ 0x1078, 0x20c8, 0x1078, 0x3333, 0x781b, 0x0067, 0x0078, 0x212b,
-+ 0x1078, 0x355b, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x2a84, 0x0018,
-+ 0x2a84, 0x791a, 0xa006, 0x007c, 0xa085, 0x0001, 0x007c, 0xa684,
-+ 0x0060, 0x00c0, 0x2a91, 0x682f, 0x0000, 0x6833, 0x0000, 0x0078,
-+ 0x2b0a, 0xa684, 0x0800, 0x00c0, 0x2ab3, 0x68b4, 0xa084, 0x4800,
-+ 0xa635, 0xa684, 0x0800, 0x00c0, 0x2ab3, 0x6998, 0x6a94, 0x692e,
-+ 0x6a32, 0x7038, 0xa005, 0x00c0, 0x2aab, 0x2200, 0xa105, 0x0040,
-+ 0x2ab2, 0x703b, 0x0015, 0x7000, 0xa086, 0x0006, 0x0040, 0x2ab2,
-+ 0x1078, 0x36ec, 0x007c, 0xa684, 0x0020, 0x0040, 0x2ad5, 0xa684,
-+ 0x4000, 0x0040, 0x2ac1, 0x682f, 0x0000, 0x6833, 0x0000, 0x0078,
-+ 0x2aab, 0x68b4, 0xa084, 0x4800, 0xa635, 0xa684, 0x4000, 0x00c0,
-+ 0x2abb, 0x7038, 0xa005, 0x00c0, 0x2acf, 0x703b, 0x0015, 0x79d8,
-+ 0x7adc, 0x692e, 0x6a32, 0x0078, 0x2aab, 0xa684, 0x4000, 0x0040,
-+ 0x2adf, 0x682f, 0x0000, 0x6833, 0x0000, 0x0078, 0x2aab, 0x68b4,
-+ 0xa084, 0x4800, 0xa635, 0xa684, 0x4000, 0x00c0, 0x2ad9, 0x7038,
-+ 0xa005, 0x00c0, 0x2aed, 0x703b, 0x0015, 0x79d8, 0x7adc, 0x78d0,
-+ 0x80fb, 0x00c8, 0x2af4, 0x8000, 0xa084, 0x003f, 0xa108, 0xa291,
-+ 0x0000, 0x692e, 0x6a32, 0x2100, 0xa205, 0x00c0, 0x2b01, 0x0078,
-+ 0x2aab, 0x7000, 0xa086, 0x0006, 0x0040, 0x2b0a, 0x1078, 0x3a5e,
-+ 0x0078, 0x2aab, 0x007c, 0xa384, 0x0200, 0x0040, 0x2b13, 0x6008,
-+ 0xa085, 0x0002, 0x600a, 0x681b, 0x0006, 0x688f, 0x0000, 0x6893,
-+ 0x0000, 0x6a30, 0x692c, 0x6a3e, 0x6942, 0x682f, 0x0003, 0x6833,
-+ 0x0000, 0x6837, 0x0020, 0x6897, 0x0000, 0x689b, 0x0020, 0x7000,
-+ 0x0079, 0x2b2a, 0x2b32, 0x2b34, 0x2b3d, 0x2b32, 0x2b32, 0x2b32,
-+ 0x2b32, 0x2b32, 0x1078, 0x20c8, 0x6820, 0xa084, 0x0001, 0x00c0,
-+ 0x2b3d, 0x1078, 0x3025, 0x0078, 0x2b43, 0x7054, 0x2c50, 0x2060,
-+ 0x6800, 0x6002, 0x2a60, 0x2021, 0x3d57, 0x2404, 0xa005, 0x0040,
-+ 0x2b4c, 0x2020, 0x0078, 0x2b45, 0x2d22, 0x206b, 0x0000, 0x007c,
-+ 0x1078, 0x302c, 0x1078, 0x303b, 0x682b, 0x0000, 0x789b, 0x000e,
-+ 0x6f14, 0x1078, 0x3a90, 0x6817, 0x0002, 0xa684, 0x0800, 0x0040,
-+ 0x2b65, 0x691c, 0xa18d, 0x2000, 0x691e, 0x6818, 0xa084, 0x8000,
-+ 0x0040, 0x2b75, 0x7868, 0xa08c, 0x00ff, 0x0040, 0x2b73, 0x681b,
-+ 0x001e, 0x0078, 0x2b75, 0x681b, 0x0000, 0x2021, 0x3d57, 0x6800,
-+ 0x2022, 0x6a3c, 0x6940, 0x6a32, 0x692e, 0x1078, 0x1b7f, 0x0078,
-+ 0x2133, 0x1078, 0x2a87, 0x682b, 0x0000, 0x2001, 0x000e, 0x6f14,
-+ 0x1078, 0x3560, 0xa08c, 0x00ff, 0x6916, 0x6818, 0xa084, 0x8000,
-+ 0x0040, 0x2b94, 0x7038, 0x681a, 0xa68c, 0xdf00, 0x691e, 0x70a3,
-+ 0x0000, 0x0078, 0x2133, 0xa006, 0x1078, 0x36ec, 0x6817, 0x0000,
-+ 0x681b, 0x0014, 0xa68c, 0xdf00, 0x691e, 0x682b, 0x0000, 0x6820,
-+ 0xa085, 0x00ff, 0x6822, 0x7000, 0x0079, 0x2bae, 0x2bb6, 0x2bb8,
-+ 0x2bb8, 0x2bba, 0x2bba, 0x2bba, 0x2bba, 0x2bb6, 0x1078, 0x20c8,
-+ 0x1078, 0x303b, 0x6008, 0xa084, 0xffef, 0x600a, 0x0078, 0x2ff5,
-+ 0x2300, 0x0079, 0x2bc3, 0x2bc6, 0x2bc8, 0x2c21, 0x1078, 0x20c8,
-+ 0xa684, 0x8000, 0x00c0, 0x2c06, 0x7000, 0x0079, 0x2bcf, 0x2bd7,
-+ 0x2bd9, 0x2bd9, 0x2bf5, 0x2bd9, 0x2c02, 0x2bf5, 0x2bd7, 0x1078,
-+ 0x20c8, 0xa684, 0x0060, 0xa086, 0x0060, 0x00c0, 0x2bf1, 0xa6b4,
-+ 0xffdf, 0xa6b4, 0xbfff, 0xa6b5, 0x2000, 0x7e5a, 0x6eb6, 0x681c,
-+ 0xa084, 0xffdf, 0x681e, 0x1078, 0x36ec, 0x1078, 0x39a0, 0x0078,
-+ 0x34da, 0xa684, 0x2000, 0x0040, 0x2be3, 0x6818, 0xa084, 0x8000,
-+ 0x0040, 0x2c02, 0x681b, 0x0015, 0xa684, 0x4000, 0x0040, 0x2c02,
-+ 0x681b, 0x0007, 0x1078, 0x34ea, 0x0078, 0x212b, 0xa6b4, 0x7fff,
-+ 0x7e5a, 0x7adc, 0x79d8, 0x78d0, 0x79d2, 0x801b, 0x00c8, 0x2c11,
-+ 0x8000, 0xa084, 0x003f, 0xa108, 0xa291, 0x0000, 0x6b98, 0x2100,
-+ 0xa302, 0x68b2, 0x6b94, 0x2200, 0xa303, 0x68ae, 0x781b, 0x0068,
-+ 0x007c, 0x1078, 0x20c8, 0x2300, 0x0079, 0x2c26, 0x2c29, 0x2c2b,
-+ 0x2c73, 0x1078, 0x20c8, 0xa684, 0x8000, 0x00c0, 0x2c62, 0x7000,
-+ 0x0079, 0x2c32, 0x2c39, 0x2c3b, 0x2c3b, 0x2c57, 0x2c3b, 0x2c57,
-+ 0x2c39, 0x1078, 0x20c8, 0xa684, 0x0060, 0xa086, 0x0060, 0x00c0,
-+ 0x2c53, 0xa6b4, 0xffbf, 0xa6b4, 0xbfff, 0xa6b5, 0x2000, 0x7e5a,
-+ 0x6eb6, 0x681c, 0xa084, 0xffbf, 0x681e, 0x1078, 0x36ec, 0x1078,
-+ 0x39a0, 0x0078, 0x34da, 0xa684, 0x2000, 0x0040, 0x2c45, 0x6818,
-+ 0xa084, 0x8000, 0x0040, 0x2c5e, 0x681b, 0x0007, 0x781b, 0x00e4,
-+ 0x0078, 0x212b, 0xa6b4, 0x7fff, 0x7e5a, 0x7adc, 0x79d8, 0x6b98,
-+ 0x2100, 0xa302, 0x68b2, 0x6b94, 0x2200, 0xa303, 0x68ae, 0x79d2,
-+ 0x781b, 0x0068, 0x007c, 0x6820, 0xa085, 0x0004, 0x6822, 0x1078,
-+ 0x34a7, 0xa6b5, 0x0800, 0x1078, 0x3323, 0x781b, 0x0067, 0x0078,
-+ 0x212b, 0x2300, 0x0079, 0x2c84, 0x2c87, 0x2c89, 0x2c8b, 0x1078,
-+ 0x20c8, 0x0078, 0x3311, 0xa684, 0x0400, 0x00c0, 0x2cb4, 0x79e4,
-+ 0xa184, 0x0020, 0x0040, 0x2c9b, 0x78ec, 0xa084, 0x0003, 0x0040,
-+ 0x2c9b, 0x782b, 0x3009, 0x789b, 0x0060, 0x78ab, 0x0000, 0xa684,
-+ 0xfffb, 0x785a, 0x79e4, 0xa184, 0x0020, 0x0040, 0x2cac, 0x78ec,
-+ 0xa084, 0x0003, 0x00c0, 0x2cb0, 0x2001, 0x0014, 0x0078, 0x295a,
-+ 0xa184, 0x0007, 0x0079, 0x2cec, 0x7a90, 0xa294, 0x0007, 0x789b,
-+ 0x0060, 0x79a8, 0x81ff, 0x0040, 0x2cea, 0x789b, 0x0010, 0x7ba8,
-+ 0xa384, 0x0001, 0x00c0, 0x2cdb, 0x7ba8, 0x7ba8, 0xa386, 0x0001,
-+ 0x00c0, 0x2cce, 0x2009, 0xfff7, 0x0078, 0x2cd4, 0xa386, 0x0003,
-+ 0x00c0, 0x2cdb, 0x2009, 0xffef, 0x0c7e, 0x7048, 0x2060, 0x6004,
-+ 0xa104, 0x6006, 0x0c7f, 0x789b, 0x0060, 0x78ab, 0x0000, 0xa684,
-+ 0xfffb, 0x785a, 0x782b, 0x3009, 0x6920, 0xa18c, 0xfdff, 0xa18c,
-+ 0xfeff, 0x6922, 0x0078, 0x34da, 0x260b, 0x2616, 0x2cf6, 0x2cfe,
-+ 0x2cf4, 0x2cf4, 0x34da, 0x34da, 0x1078, 0x20c8, 0x6920, 0xa18c,
-+ 0xfdff, 0xa18c, 0xfeff, 0x6922, 0x0078, 0x34e2, 0x6920, 0xa18c,
-+ 0xfdff, 0xa18c, 0xfeff, 0x6922, 0x0078, 0x34da, 0x79e4, 0xa184,
-+ 0x0030, 0x0040, 0x2d10, 0x78ec, 0xa084, 0x0003, 0x00c0, 0x2d26,
-+ 0x70a0, 0xa086, 0x0002, 0x00c0, 0x2d19, 0x2011, 0x0002, 0x0078,
-+ 0x24ef, 0x7000, 0xa086, 0x0000, 0x0040, 0x212b, 0x6818, 0xa085,
-+ 0x8000, 0x681a, 0x2001, 0x0014, 0x0078, 0x295a, 0xa184, 0x0007,
-+ 0x0079, 0x2d2a, 0x34da, 0x34da, 0x2d32, 0x34da, 0x3535, 0x3535,
-+ 0x34da, 0x34da, 0xa684, 0x0080, 0x0040, 0x2d61, 0x71c8, 0x81ff,
-+ 0x0040, 0x2d61, 0xa182, 0x000d, 0x00d0, 0x2d42, 0x70cb, 0x0000,
-+ 0x0078, 0x2d47, 0xa182, 0x000c, 0x70ca, 0x2009, 0x000c, 0x789b,
-+ 0x0061, 0x79aa, 0x157e, 0x137e, 0x147e, 0x70cc, 0x8114, 0xa210,
-+ 0x72ce, 0xa080, 0x000b, 0xad00, 0x2098, 0x20a1, 0x012b, 0x789b,
-+ 0x0000, 0x8108, 0x81ac, 0x53a6, 0x147f, 0x137f, 0x157f, 0x0078,
-+ 0x34e2, 0xa684, 0x0400, 0x00c0, 0x2da2, 0x6820, 0xa084, 0x0001,
-+ 0x0040, 0x34e2, 0xa68c, 0x0060, 0xa684, 0x0060, 0x0040, 0x2d76,
-+ 0xa086, 0x0060, 0x00c0, 0x2d76, 0xa18d, 0x4000, 0xa18c, 0xfffb,
-+ 0x795a, 0x69b6, 0x789b, 0x0060, 0x78ab, 0x0000, 0x789b, 0x0061,
-+ 0x6818, 0xa085, 0x8000, 0x681a, 0x78aa, 0x8008, 0x810c, 0x0040,
-+ 0x3054, 0xa18c, 0x00f8, 0x00c0, 0x3054, 0x157e, 0x137e, 0x147e,
-+ 0x20a1, 0x012b, 0x789b, 0x0000, 0x8000, 0x80ac, 0xad80, 0x000b,
-+ 0x2098, 0x53a6, 0x147f, 0x137f, 0x157f, 0x6814, 0x8007, 0x7882,
-+ 0x0078, 0x34e2, 0x6818, 0xa084, 0x8000, 0x0040, 0x2da9, 0x681b,
-+ 0x0008, 0x781b, 0x00d8, 0x0078, 0x212b, 0x2300, 0x0079, 0x2db0,
-+ 0x2db5, 0x2e31, 0x2db3, 0x1078, 0x20c8, 0x7000, 0xa084, 0x0007,
-+ 0x0079, 0x2dba, 0x2dc2, 0x2dc4, 0x2de9, 0x2958, 0x2dc2, 0x2133,
-+ 0x2dc2, 0x2dc2, 0x1078, 0x20c8, 0x681c, 0xa084, 0x2000, 0x0040,
-+ 0x2dcd, 0x6008, 0xa085, 0x0002, 0x600a, 0x6920, 0xa18d, 0x0001,
-+ 0x6922, 0x6800, 0x6006, 0xa005, 0x00c0, 0x2dd7, 0x6002, 0x681c,
-+ 0xa084, 0x000e, 0x0040, 0x2de3, 0x7014, 0x68ba, 0x712c, 0xa188,
-+ 0x6000, 0x0078, 0x2de5, 0x2009, 0x6100, 0x2104, 0x6802, 0x2d0a,
-+ 0x7156, 0x6eb6, 0xa684, 0x0060, 0x0040, 0x2e2f, 0xa684, 0x0800,
-+ 0x00c0, 0x2dfd, 0xa684, 0x7fff, 0x68b6, 0x6894, 0x68a6, 0x6898,
-+ 0x68aa, 0x1078, 0x36ec, 0x0078, 0x2e2f, 0xa684, 0x0020, 0x0040,
-+ 0x2e0a, 0xa006, 0x1078, 0x3a5e, 0x79d8, 0x7adc, 0x69aa, 0x6aa6,
-+ 0x0078, 0x2e10, 0x1078, 0x3456, 0x69aa, 0x6aa6, 0x1078, 0x3a5e,
-+ 0xa684, 0x8000, 0x0040, 0x2e2f, 0xa684, 0x7fff, 0x68b6, 0x7adc,
-+ 0x79d8, 0xa684, 0x0020, 0x00c0, 0x2e27, 0x78d0, 0x801b, 0x00c8,
-+ 0x2e22, 0x8000, 0xa084, 0x003f, 0xa108, 0xa291, 0x0000, 0x6b98,
-+ 0x2100, 0xa302, 0x68b2, 0x6b94, 0x2200, 0xa303, 0x68ae, 0x0078,
-+ 0x2133, 0x0078, 0x3311, 0x7033, 0x0000, 0xa282, 0x0006, 0x0050,
-+ 0x2e3b, 0x1078, 0x20c8, 0x2300, 0x0079, 0x2e3e, 0x2e41, 0x2e6a,
-+ 0x2e90, 0x2200, 0x0079, 0x2e44, 0x2e4a, 0x3311, 0x2e4c, 0x2e4a,
-+ 0x2ebc, 0x2f0f, 0x1078, 0x20c8, 0x7003, 0x0005, 0x2001, 0x6110,
-+ 0x2068, 0x703e, 0x157e, 0x20a9, 0x002f, 0x2003, 0x0000, 0x8000,
-+ 0x0070, 0x2e5c, 0x0078, 0x2e55, 0x157f, 0xad80, 0x0009, 0x7032,
-+ 0x6817, 0x0000, 0x68b7, 0x0700, 0x6823, 0x0800, 0x6827, 0x0003,
-+ 0x0078, 0x3305, 0x7000, 0xa086, 0x0001, 0x00c0, 0x2e77, 0x1078,
-+ 0x303b, 0x1078, 0x36ec, 0x7034, 0x600a, 0x0078, 0x2e7c, 0x7000,
-+ 0xa086, 0x0003, 0x0040, 0x2e71, 0x7003, 0x0005, 0x2001, 0x6110,
-+ 0x2068, 0x703e, 0xad80, 0x0009, 0x7032, 0x2200, 0x0079, 0x2e88,
-+ 0x3311, 0x2e8e, 0x2e8e, 0x2ebc, 0x2e8e, 0x3311, 0x1078, 0x20c8,
-+ 0x7000, 0xa086, 0x0001, 0x00c0, 0x2e9d, 0x1078, 0x303b, 0x1078,
-+ 0x36ec, 0x7034, 0x600a, 0x0078, 0x2ea2, 0x7000, 0xa086, 0x0003,
-+ 0x0040, 0x2e97, 0x7003, 0x0005, 0x2001, 0x6110, 0x2068, 0x703e,
-+ 0xad80, 0x0009, 0x7032, 0x2200, 0x0079, 0x2eae, 0x2eb6, 0x2eb4,
-+ 0x2eb4, 0x2eb6, 0x2eb4, 0x2eb6, 0x1078, 0x20c8, 0x1078, 0x3333,
-+ 0x781b, 0x0067, 0x0078, 0x212b, 0x7000, 0xa086, 0x0001, 0x00c0,
-+ 0x2ec9, 0x1078, 0x303b, 0x1078, 0x36ec, 0x7034, 0x600a, 0x0078,
-+ 0x2ece, 0x7000, 0xa086, 0x0003, 0x0040, 0x2ec3, 0x7003, 0x0002,
-+ 0x7a80, 0xa294, 0x0f00, 0x789b, 0x0018, 0x7ca8, 0xa484, 0x001f,
-+ 0xa215, 0x2069, 0x6100, 0x2d04, 0x2d08, 0x7156, 0x2068, 0xa005,
-+ 0x0040, 0x2ee9, 0x6814, 0xa206, 0x0040, 0x2f04, 0x6800, 0x0078,
-+ 0x2edc, 0x7003, 0x0005, 0x2001, 0x6110, 0x2068, 0x703e, 0x157e,
-+ 0x20a9, 0x002f, 0x2003, 0x0000, 0x8000, 0x0070, 0x2ef9, 0x0078,
-+ 0x2ef2, 0x157f, 0xad80, 0x0009, 0x7032, 0x6a16, 0x68b7, 0x0700,
-+ 0x6823, 0x0800, 0x6827, 0x0003, 0x6eb4, 0x7e5a, 0x6820, 0xa084,
-+ 0x0c00, 0x0040, 0x2f70, 0x1078, 0x332b, 0x0078, 0x2f70, 0x7000,
-+ 0xa086, 0x0001, 0x00c0, 0x2f1c, 0x1078, 0x303b, 0x1078, 0x36ec,
-+ 0x7034, 0x600a, 0x0078, 0x2f21, 0x7000, 0xa086, 0x0003, 0x0040,
-+ 0x2f16, 0x7003, 0x0002, 0x7a80, 0xa294, 0x0f00, 0x789b, 0x0018,
-+ 0x7ca8, 0xa484, 0x001f, 0xa215, 0x79a8, 0x79a8, 0xa18c, 0x00ff,
-+ 0xa1e8, 0x6000, 0x2d04, 0x2d08, 0x7156, 0x2068, 0xa005, 0x0040,
-+ 0x2f40, 0x6814, 0xa206, 0x0040, 0x2f5b, 0x6800, 0x0078, 0x2f33,
-+ 0x7003, 0x0005, 0x2001, 0x6110, 0x2068, 0x703e, 0x157e, 0x20a9,
-+ 0x002f, 0x2003, 0x0000, 0x8000, 0x0070, 0x2f50, 0x0078, 0x2f49,
-+ 0x157f, 0xad80, 0x0009, 0x7032, 0x6a16, 0x68b7, 0x0700, 0x6823,
-+ 0x0800, 0x6827, 0x0003, 0x6eb4, 0x7e5a, 0x6820, 0xa084, 0x0c00,
-+ 0x0040, 0x2f70, 0xa084, 0x0800, 0x0040, 0x2f6a, 0x1078, 0x332f,
-+ 0x0078, 0x2f70, 0x1078, 0x332b, 0x70bf, 0x0000, 0x0078, 0x2f70,
-+ 0x027e, 0x8207, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa080,
-+ 0x3f80, 0x2060, 0x704a, 0x6000, 0x704e, 0x6004, 0x7052, 0xa684,
-+ 0x0060, 0x0040, 0x2fb0, 0x6b98, 0x6c94, 0x69ac, 0x68b0, 0xa105,
-+ 0x00c0, 0x2f9e, 0x7bd2, 0x7bda, 0x7cd6, 0x7cde, 0xa6b4, 0xb7ff,
-+ 0x7e5a, 0xa684, 0x0060, 0xa086, 0x0060, 0x0040, 0x2fb0, 0x1078,
-+ 0x39a0, 0xa6b5, 0x2000, 0x7e5a, 0x0078, 0x2fb0, 0x68b0, 0xa31a,
-+ 0x2100, 0xa423, 0x2400, 0xa305, 0x0040, 0x2fb0, 0x7bd2, 0x7bda,
-+ 0x7cd6, 0x7cde, 0x68b0, 0xa6b4, 0xbfff, 0x7e5a, 0x1078, 0x39d5,
-+ 0x077f, 0x1078, 0x3449, 0x2009, 0x0068, 0xa684, 0x0008, 0x0040,
-+ 0x2fcf, 0x78e4, 0xa084, 0x0030, 0x0040, 0x2fc7, 0x78ec, 0xa084,
-+ 0x0003, 0x0040, 0x2fc7, 0x2009, 0x0067, 0x0078, 0x2fcf, 0x0f7e,
-+ 0x2079, 0x3d00, 0x1078, 0x36ec, 0x0f7f, 0x0078, 0x2133, 0x791a,
-+ 0x2d00, 0x703e, 0x8207, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003,
-+ 0xa080, 0x3f80, 0x2048, 0x0078, 0x212b, 0x6020, 0xa005, 0x0040,
-+ 0x2fe9, 0x8001, 0x6022, 0x6008, 0xa085, 0x0008, 0x600a, 0x7010,
-+ 0x6026, 0x007c, 0xa006, 0x1078, 0x36ec, 0x6817, 0x0000, 0x681b,
-+ 0x0001, 0x6823, 0x0040, 0x681f, 0x0100, 0x7000, 0xa084, 0x0007,
-+ 0x0079, 0x2ffa, 0x3002, 0x3004, 0x3004, 0x3021, 0x300c, 0x3002,
-+ 0x300c, 0x3002, 0x1078, 0x20c8, 0x1078, 0x302c, 0x1078, 0x3025,
-+ 0x1078, 0x1b7f, 0x0078, 0x2133, 0x70a0, 0x70a3, 0x0000, 0x70c7,
-+ 0x0000, 0x0079, 0x3013, 0x301d, 0x301d, 0x301b, 0x301b, 0x301b,
-+ 0x301d, 0x301b, 0x301d, 0x0079, 0x2508, 0x70a3, 0x0000, 0x0078,
-+ 0x2133, 0x681b, 0x0000, 0x0078, 0x2b50, 0x6800, 0xa005, 0x00c0,
-+ 0x302a, 0x6002, 0x6006, 0x007c, 0x6010, 0xa005, 0x0040, 0x3035,
-+ 0x8001, 0x00d0, 0x3035, 0x1078, 0x20c8, 0x6012, 0x6008, 0xa084,
-+ 0xffef, 0x600a, 0x007c, 0x6018, 0xa005, 0x0040, 0x3041, 0x8001,
-+ 0x601a, 0x007c, 0x1078, 0x355b, 0x681b, 0x0018, 0x0078, 0x3078,
-+ 0x1078, 0x355b, 0x681b, 0x0019, 0x0078, 0x3078, 0x1078, 0x355b,
-+ 0x681b, 0x001a, 0x0078, 0x3078, 0x1078, 0x355b, 0x681b, 0x0003,
-+ 0x0078, 0x3078, 0x77b4, 0x1078, 0x3449, 0x71b8, 0xa18c, 0x00ff,
-+ 0xa1e8, 0x6000, 0x2d04, 0x2d08, 0x2068, 0xa005, 0x00c0, 0x306a,
-+ 0x0078, 0x2133, 0x6814, 0x72b4, 0xa206, 0x0040, 0x3072, 0x6800,
-+ 0x0078, 0x3063, 0x6800, 0x200a, 0x681b, 0x0005, 0x70bf, 0x0000,
-+ 0x1078, 0x302c, 0x6820, 0xa084, 0x0001, 0x00c0, 0x3081, 0x1078,
-+ 0x3025, 0x1078, 0x303b, 0x681f, 0x0000, 0x6823, 0x0020, 0x1078,
-+ 0x1b7f, 0x0078, 0x2133, 0xa282, 0x0005, 0x00c0, 0x3305, 0x78a8,
-+ 0xa084, 0x00ff, 0x802f, 0x78a8, 0xa084, 0x00ff, 0xa52d, 0x78a8,
-+ 0xa084, 0x00ff, 0x8037, 0x78a8, 0xa084, 0x00ff, 0xa635, 0x7cd8,
-+ 0x2600, 0xa420, 0x7bdc, 0x2500, 0xa319, 0x0048, 0x3305, 0x7cda,
-+ 0x7bde, 0x6caa, 0x7cd2, 0x6ba6, 0x7bd6, 0x1078, 0x3792, 0x1078,
-+ 0x398f, 0x781b, 0x0065, 0x0078, 0x212b, 0xa006, 0x1078, 0x3a5e,
-+ 0x781b, 0x0065, 0x0078, 0x212b, 0x78d0, 0x79d4, 0x1078, 0x39d5,
-+ 0x0078, 0x212b, 0xa282, 0x0003, 0x00c0, 0x3305, 0x7da8, 0xa5ac,
-+ 0x00ff, 0x7ea8, 0xa6b4, 0x00ff, 0x6920, 0xa18d, 0x0080, 0x6922,
-+ 0xa184, 0x0100, 0x0040, 0x3122, 0xa18c, 0xfeff, 0x6922, 0xa6b4,
-+ 0x00ff, 0x0040, 0x310c, 0xa682, 0x000c, 0x0048, 0x30e3, 0x0040,
-+ 0x30e3, 0x2031, 0x000c, 0x852b, 0x852b, 0x1078, 0x33be, 0x0040,
-+ 0x30ed, 0x1078, 0x31da, 0x0078, 0x3115, 0x1078, 0x3379, 0x0c7e,
-+ 0x2960, 0x6004, 0xa084, 0xfff5, 0x6006, 0x1078, 0x31fe, 0x0c7f,
-+ 0x6920, 0xa18d, 0x0100, 0x6922, 0x7e58, 0xa6b5, 0x0004, 0x7e5a,
-+ 0xa684, 0x0400, 0x00c0, 0x3108, 0x781b, 0x0053, 0x0078, 0x212b,
-+ 0x781b, 0x0067, 0x0078, 0x212b, 0x0c7e, 0x2960, 0x6004, 0xa084,
-+ 0xfff5, 0x6006, 0x1078, 0x31fe, 0x0c7f, 0x7e58, 0xa684, 0x0400,
-+ 0x00c0, 0x311e, 0x781b, 0x0056, 0x0078, 0x212b, 0x781b, 0x0068,
-+ 0x0078, 0x212b, 0x0c7e, 0x7048, 0x2060, 0x6100, 0xa18c, 0x1000,
-+ 0x0040, 0x3162, 0x6208, 0x8217, 0xa294, 0x00ff, 0xa282, 0x000c,
-+ 0x0048, 0x3136, 0x0040, 0x3136, 0x2011, 0x000c, 0x2600, 0xa202,
-+ 0x00c8, 0x313b, 0x2230, 0x6208, 0xa294, 0x00ff, 0x7018, 0xa086,
-+ 0x0028, 0x00c0, 0x314b, 0xa282, 0x0019, 0x00c8, 0x3151, 0x2011,
-+ 0x0019, 0x0078, 0x3151, 0xa282, 0x000c, 0x00c8, 0x3151, 0x2011,
-+ 0x000c, 0x2200, 0xa502, 0x00c8, 0x3156, 0x2228, 0x1078, 0x337d,
-+ 0x852b, 0x852b, 0x1078, 0x33be, 0x0040, 0x3162, 0x1078, 0x31da,
-+ 0x0078, 0x3166, 0x1078, 0x3379, 0x1078, 0x31fe, 0x7858, 0xa085,
-+ 0x0004, 0x785a, 0x0c7f, 0x781b, 0x0067, 0x0078, 0x212b, 0x0c7e,
-+ 0x2960, 0x6000, 0xa084, 0x1000, 0x00c0, 0x3187, 0x6010, 0xa084,
-+ 0x000f, 0x00c0, 0x3181, 0x6104, 0xa18c, 0xfff5, 0x6106, 0x0c7f,
-+ 0x007c, 0x2011, 0x0032, 0x2019, 0x0000, 0x0078, 0x31ae, 0x68a0,
-+ 0xa084, 0x0200, 0x00c0, 0x3181, 0x6208, 0xa294, 0x00ff, 0x7018,
-+ 0xa086, 0x0028, 0x00c0, 0x319c, 0xa282, 0x0019, 0x00c8, 0x31a2,
-+ 0x2011, 0x0019, 0x0078, 0x31a2, 0xa282, 0x000c, 0x00c8, 0x31a2,
-+ 0x2011, 0x000c, 0x6308, 0x831f, 0xa39c, 0x00ff, 0xa382, 0x000c,
-+ 0x0048, 0x31ae, 0x0040, 0x31ae, 0x2019, 0x000c, 0x78ab, 0x0001,
-+ 0x78ab, 0x0003, 0x78ab, 0x0001, 0x7aaa, 0x7baa, 0xa8c0, 0x0005,
-+ 0x6820, 0xa085, 0x0100, 0x6822, 0x0c7f, 0x007c, 0x0c7e, 0x2960,
-+ 0x6104, 0xa18c, 0xfff5, 0x6106, 0x2011, 0x0032, 0x2019, 0x0000,
-+ 0x0078, 0x31ca, 0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab, 0x0001,
-+ 0x7aaa, 0x7baa, 0xa8c0, 0x0005, 0x6820, 0xa085, 0x0100, 0x6822,
-+ 0x0c7f, 0x007c, 0x0c7e, 0x7148, 0x2160, 0x2008, 0xa084, 0xfff0,
-+ 0xa635, 0x7e86, 0x6018, 0x789a, 0x7eae, 0x6612, 0x78a4, 0xa084,
-+ 0xfff8, 0xa18c, 0x0007, 0xa105, 0x78a6, 0x6016, 0x788a, 0xa6b4,
-+ 0x000f, 0x8637, 0x8204, 0x8004, 0xa084, 0x00ff, 0xa605, 0x600e,
-+ 0x6004, 0xa084, 0xfff5, 0x6006, 0x0c7f, 0x007c, 0x0c7e, 0x7048,
-+ 0x2060, 0x6018, 0x789a, 0x78a4, 0xa084, 0xfff0, 0x78a6, 0x6012,
-+ 0x7884, 0xa084, 0xfff0, 0x7886, 0x0c7f, 0x007c, 0xa282, 0x0002,
-+ 0x00c0, 0x3305, 0x7aa8, 0x6920, 0xa18d, 0x0080, 0x6922, 0xa184,
-+ 0x0200, 0x0040, 0x3253, 0xa18c, 0xfdff, 0x6922, 0xa294, 0x00ff,
-+ 0xa282, 0x0002, 0x00c8, 0x3305, 0x1078, 0x329a, 0x1078, 0x31fe,
-+ 0xa980, 0x0001, 0x200c, 0x1078, 0x3445, 0x1078, 0x316f, 0x88ff,
-+ 0x0040, 0x3246, 0x789b, 0x0060, 0x2800, 0x78aa, 0x7e58, 0xa6b5,
-+ 0x0004, 0x7e5a, 0xa684, 0x0400, 0x00c0, 0x3242, 0x781b, 0x0053,
-+ 0x0078, 0x212b, 0x781b, 0x0067, 0x0078, 0x212b, 0x7e58, 0xa684,
-+ 0x0400, 0x00c0, 0x324f, 0x781b, 0x0056, 0x0078, 0x212b, 0x781b,
-+ 0x0068, 0x0078, 0x212b, 0xa282, 0x0002, 0x00c8, 0x325b, 0xa284,
-+ 0x0001, 0x0040, 0x3265, 0x7148, 0xa188, 0x0000, 0x210c, 0xa18c,
-+ 0x2000, 0x00c0, 0x3265, 0x2011, 0x0000, 0x1078, 0x336b, 0x1078,
-+ 0x329a, 0x1078, 0x31fe, 0x7858, 0xa085, 0x0004, 0x785a, 0x781b,
-+ 0x0067, 0x0078, 0x212b, 0x0c7e, 0x027e, 0x2960, 0x6000, 0x2011,
-+ 0x0001, 0xa084, 0x2000, 0x00c0, 0x328a, 0x6014, 0xa084, 0x0040,
-+ 0x00c0, 0x3288, 0xa18c, 0xffef, 0x6106, 0xa006, 0x0078, 0x3297,
-+ 0x2011, 0x0000, 0x78ab, 0x0001, 0x78ab, 0x0002, 0x78ab, 0x0003,
-+ 0x7aaa, 0xa8c0, 0x0004, 0x6820, 0xa085, 0x0200, 0x6822, 0x027f,
-+ 0x0c7f, 0x007c, 0x0c7e, 0x7048, 0x2060, 0x82ff, 0x0040, 0x32a2,
-+ 0x2011, 0x0040, 0x6018, 0xa080, 0x0002, 0x789a, 0x78a4, 0xa084,
-+ 0xffbf, 0xa205, 0x78a6, 0x6016, 0x788a, 0x6004, 0xa084, 0xffef,
-+ 0x6006, 0x0c7f, 0x007c, 0x007e, 0x7000, 0xa086, 0x0003, 0x0040,
-+ 0x32bc, 0x007f, 0x0078, 0x32bf, 0x007f, 0x0078, 0x3301, 0xa684,
-+ 0x0020, 0x0040, 0x3301, 0x7888, 0xa084, 0x0040, 0x0040, 0x3301,
-+ 0x7bb8, 0xa384, 0x003f, 0x831b, 0x00c8, 0x32cf, 0x8000, 0xa005,
-+ 0x0040, 0x32e5, 0x831b, 0x00c8, 0x32d8, 0x8001, 0x0040, 0x32fd,
-+ 0xa684, 0x4000, 0x0040, 0x32e5, 0x78b8, 0x801b, 0x00c8, 0x32e1,
-+ 0x8000, 0xa084, 0x003f, 0x00c0, 0x32fd, 0xa6b4, 0xbfff, 0x7e5a,
-+ 0x79d8, 0x7adc, 0x2001, 0x0001, 0xa108, 0x00c8, 0x32f1, 0xa291,
-+ 0x0000, 0x79d2, 0x79da, 0x7ad6, 0x7ade, 0x1078, 0x3a5e, 0x781b,
-+ 0x0065, 0x1078, 0x392f, 0x0078, 0x212b, 0x781b, 0x0065, 0x0078,
-+ 0x212b, 0x781b, 0x0068, 0x0078, 0x212b, 0x1078, 0x3337, 0x781b,
-+ 0x0067, 0x0078, 0x212b, 0x1078, 0x3323, 0x781b, 0x0067, 0x0078,
-+ 0x212b, 0x6827, 0x0002, 0x1078, 0x332b, 0x78e4, 0xa084, 0x0030,
-+ 0x0040, 0x2133, 0x78ec, 0xa084, 0x0003, 0x0040, 0x2133, 0x781b,
-+ 0x0067, 0x0078, 0x212b, 0x2001, 0x0005, 0x0078, 0x3339, 0x2001,
-+ 0x000c, 0x0078, 0x3339, 0x2001, 0x0006, 0x0078, 0x3339, 0x2001,
-+ 0x000d, 0x0078, 0x3339, 0x2001, 0x0009, 0x0078, 0x3339, 0x2001,
-+ 0x0007, 0x789b, 0x007e, 0x78aa, 0xa6b5, 0x0008, 0x7e5a, 0x007c,
-+ 0x077e, 0x873f, 0xa7bc, 0x000f, 0x873b, 0x873b, 0x8703, 0xa0e0,
-+ 0x3f80, 0xa7b8, 0x0020, 0x7f9a, 0x79a4, 0xa184, 0x000f, 0x0040,
-+ 0x3359, 0xa184, 0xfff0, 0x78a6, 0x6012, 0x6004, 0xa085, 0x0008,
-+ 0x6006, 0x8738, 0x8738, 0x7f9a, 0x79a4, 0xa184, 0x0040, 0x0040,
-+ 0x3369, 0xa184, 0xffbf, 0x78a6, 0x6016, 0x6004, 0xa085, 0x0010,
-+ 0x6006, 0x077f, 0x007c, 0x789b, 0x0010, 0x78ab, 0x0001, 0x78ab,
-+ 0x0002, 0x78ab, 0x0003, 0x7aaa, 0x789b, 0x0060, 0x78ab, 0x0004,
-+ 0x007c, 0x2031, 0x0000, 0x2029, 0x0032, 0x789b, 0x0010, 0x78ab,
-+ 0x0001, 0x78ab, 0x0003, 0x78ab, 0x0001, 0x7daa, 0x7eaa, 0x789b,
-+ 0x0060, 0x78ab, 0x0005, 0x007c, 0x157e, 0x8007, 0xa084, 0x00ff,
-+ 0x8003, 0x8003, 0xa080, 0x0020, 0x789a, 0x79a4, 0xa18c, 0xfff0,
-+ 0x2001, 0x3d46, 0x2004, 0xa082, 0x0028, 0x0040, 0x33a7, 0x2021,
-+ 0x342c, 0x2019, 0x0014, 0x20a9, 0x000c, 0x0078, 0x33ad, 0x2021,
-+ 0x3438, 0x2019, 0x0019, 0x20a9, 0x000d, 0x2011, 0x0064, 0x2404,
-+ 0xa084, 0xfff0, 0xa106, 0x0040, 0x33bc, 0x8420, 0x2300, 0xa210,
-+ 0x0070, 0x33bc, 0x0078, 0x33af, 0x157f, 0x007c, 0x157e, 0x2011,
-+ 0x3d46, 0x2214, 0xa282, 0x0032, 0x0048, 0x33d2, 0x0040, 0x33d6,
-+ 0x2021, 0x341e, 0x2019, 0x0011, 0x20a9, 0x000e, 0x2011, 0x0032,
-+ 0x0078, 0x33e8, 0xa282, 0x0028, 0x0040, 0x33e0, 0x2021, 0x342c,
-+ 0x2019, 0x0014, 0x20a9, 0x000c, 0x2011, 0x0064, 0x0078, 0x33e8,
-+ 0x2021, 0x3438, 0x2019, 0x0019, 0x20a9, 0x000d, 0x2011, 0x0064,
-+ 0x2200, 0xa502, 0x0040, 0x33f8, 0x0048, 0x33f8, 0x8420, 0x2300,
-+ 0xa210, 0x0070, 0x33f5, 0x0078, 0x33e8, 0x157f, 0xa006, 0x007c,
-+ 0x157f, 0xa582, 0x0064, 0x00c8, 0x3403, 0x7808, 0xa085, 0x0070,
-+ 0x780a, 0x0078, 0x3403, 0x78ec, 0xa084, 0x0300, 0x0040, 0x340b,
-+ 0x2404, 0x0078, 0x341c, 0x2404, 0xa09e, 0x1102, 0x00c0, 0x341c,
-+ 0x2001, 0x04fd, 0x2004, 0xa082, 0x0005, 0x0048, 0x341b, 0x2001,
-+ 0x1201, 0x0078, 0x341c, 0x2404, 0xa005, 0x007c, 0x1102, 0x3002,
-+ 0x3202, 0x4203, 0x4403, 0x5404, 0x5604, 0x6605, 0x6805, 0x7806,
-+ 0x7a06, 0x0c07, 0x0c07, 0x0e07, 0x3202, 0x4202, 0x5202, 0x6202,
-+ 0x7202, 0x6605, 0x7605, 0x7805, 0x7a05, 0x7c05, 0x7e05, 0x7f05,
-+ 0x2202, 0x3202, 0x4202, 0x5202, 0x5404, 0x6404, 0x7404, 0x7604,
-+ 0x7804, 0x7a04, 0x7c04, 0x7e04, 0x7f04, 0x789b, 0x0010, 0xa046,
-+ 0x007c, 0xa784, 0x0f00, 0x800b, 0xa784, 0x001f, 0x8003, 0x8003,
-+ 0x8003, 0x8003, 0xa105, 0xa0e0, 0x4000, 0x007c, 0x79d8, 0x7adc,
-+ 0x78d0, 0x801b, 0x00c8, 0x345d, 0x8000, 0xa084, 0x003f, 0xa108,
-+ 0xa291, 0x0000, 0x007c, 0x0f7e, 0x2079, 0x0100, 0x2009, 0x3d40,
-+ 0x2091, 0x8000, 0x2104, 0x0079, 0x346d, 0x34a3, 0x3477, 0x3477,
-+ 0x3477, 0x3477, 0x3477, 0x3477, 0x3475, 0x1078, 0x20c8, 0x784b,
-+ 0x0004, 0x7848, 0xa084, 0x0004, 0x00c0, 0x3479, 0x784b, 0x0008,
-+ 0x7848, 0xa084, 0x0008, 0x00c0, 0x3480, 0x68b4, 0xa085, 0x4000,
-+ 0x68b6, 0x7858, 0xa085, 0x4000, 0x785a, 0x7830, 0xa084, 0x0080,
-+ 0x00c0, 0x34a3, 0x0018, 0x34a3, 0x681c, 0xa084, 0x0020, 0x00c0,
-+ 0x34a1, 0x0e7e, 0x2071, 0x3d40, 0x1078, 0x34ea, 0x0e7f, 0x0078,
-+ 0x34a3, 0x781b, 0x00e4, 0x2091, 0x8001, 0x0f7f, 0x007c, 0x0c7e,
-+ 0x6814, 0x8007, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa0e0,
-+ 0x3f80, 0x6004, 0xa084, 0x000a, 0x00c0, 0x34d8, 0x6108, 0xa194,
-+ 0xff00, 0x0040, 0x34d8, 0xa18c, 0x00ff, 0x2001, 0x0019, 0xa106,
-+ 0x0040, 0x34c9, 0x2001, 0x0032, 0xa106, 0x0040, 0x34cd, 0x0078,
-+ 0x34d1, 0x2009, 0x0020, 0x0078, 0x34d3, 0x2009, 0x003f, 0x0078,
-+ 0x34d3, 0x2011, 0x0000, 0x2100, 0xa205, 0x600a, 0x6004, 0x6006,
-+ 0x0c7f, 0x007c, 0x781b, 0x0068, 0x0078, 0x212b, 0x781b, 0x0067,
-+ 0x0078, 0x212b, 0x781b, 0x0056, 0x0078, 0x212b, 0x781b, 0x0053,
-+ 0x0078, 0x212b, 0x2009, 0x3d1e, 0x210c, 0xa186, 0x0000, 0x0040,
-+ 0x34fe, 0xa186, 0x0001, 0x0040, 0x3501, 0x2009, 0x3d35, 0x200b,
-+ 0x000b, 0x70a3, 0x0001, 0x781b, 0x0047, 0x007c, 0x781b, 0x00dd,
-+ 0x007c, 0x2009, 0x3d35, 0x200b, 0x000a, 0x007c, 0x2009, 0x3d1e,
-+ 0x210c, 0xa186, 0x0000, 0x0040, 0x3521, 0xa186, 0x0001, 0x0040,
-+ 0x351b, 0x2009, 0x3d35, 0x200b, 0x000b, 0x70a3, 0x0001, 0x781b,
-+ 0x0047, 0x0078, 0x212b, 0x2009, 0x3d35, 0x200b, 0x000a, 0x0078,
-+ 0x212b, 0x781b, 0x00dc, 0x0078, 0x212b, 0x781b, 0x00e4, 0x0078,
-+ 0x212b, 0x781b, 0x00e3, 0x0078, 0x212b, 0x781b, 0x009f, 0x0078,
-+ 0x212b, 0x781b, 0x009e, 0x0078, 0x212b, 0x6818, 0xa084, 0x8000,
-+ 0x0040, 0x353c, 0x681b, 0x001d, 0x70a3, 0x0001, 0x781b, 0x0047,
-+ 0x0078, 0x212b, 0x007e, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x3559,
-+ 0x7808, 0xa084, 0xfffd, 0x780a, 0x0005, 0x0005, 0x0005, 0x0005,
-+ 0x78ec, 0xa084, 0x0021, 0x0040, 0x3559, 0x7808, 0xa085, 0x0002,
-+ 0x780a, 0x007f, 0x007c, 0x7808, 0xa085, 0x0002, 0x780a, 0x007c,
-+ 0x007e, 0x7830, 0xa084, 0x0040, 0x00c0, 0x3561, 0x0098, 0x356c,
-+ 0x007f, 0x789a, 0x78ac, 0x007c, 0x7808, 0xa084, 0xfffd, 0x780a,
-+ 0x0005, 0x0005, 0x0005, 0x0005, 0x78ec, 0xa084, 0x0021, 0x0040,
-+ 0x357b, 0x0098, 0x3579, 0x007f, 0x789a, 0x78ac, 0x007e, 0x7808,
-+ 0xa085, 0x0002, 0x780a, 0x007f, 0x007c, 0xa784, 0x0001, 0x00c0,
-+ 0x2b9b, 0xa784, 0x0070, 0x0040, 0x3595, 0x0c7e, 0x2d60, 0x2f68,
-+ 0x1078, 0x2073, 0x2d78, 0x2c68, 0x0c7f, 0xa784, 0x0008, 0x0040,
-+ 0x35a2, 0x784b, 0x0008, 0x78ec, 0xa084, 0x0003, 0x0040, 0x2133,
-+ 0x0078, 0x34da, 0xa784, 0x0004, 0x0040, 0x35d5, 0x78b8, 0xa084,
-+ 0x4001, 0x0040, 0x35d5, 0x784b, 0x0008, 0x78ec, 0xa084, 0x0003,
-+ 0x0040, 0x2133, 0x78e4, 0xa084, 0x0007, 0xa086, 0x0001, 0x00c0,
-+ 0x35d5, 0x78c0, 0xa685, 0x4800, 0x2030, 0x7e5a, 0x781b, 0x00e4,
-+ 0x0078, 0x212b, 0x784b, 0x0008, 0x6818, 0xa084, 0x8000, 0x0040,
-+ 0x35d1, 0x681b, 0x0015, 0xa684, 0x4000, 0x0040, 0x35d1, 0x681b,
-+ 0x0007, 0x1078, 0x34ea, 0x0078, 0x212b, 0x681b, 0x0003, 0x7858,
-+ 0xa084, 0x3f00, 0x681e, 0x682f, 0x0000, 0x6833, 0x0000, 0x784b,
-+ 0x0008, 0x78ec, 0xa084, 0x0003, 0x0040, 0x25fa, 0x0018, 0x212b,
-+ 0x0078, 0x330b, 0x6b14, 0x8307, 0xa084, 0x000f, 0x8003, 0x8003,
-+ 0x8003, 0xa080, 0x3f80, 0x2060, 0x2048, 0x704a, 0x6000, 0x704e,
-+ 0x6004, 0x7052, 0x2a60, 0x007c, 0x0020, 0x0020, 0x0000, 0x0020,
-+ 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020,
-+ 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020,
-+ 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020,
-+ 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0062, 0x000a,
-+ 0x0014, 0x0014, 0x9848, 0x0014, 0x0014, 0x98f8, 0x98e7, 0x0014,
-+ 0x0014, 0x0014, 0x0080, 0x00bf, 0x0100, 0x0402, 0x2008, 0xf880,
-+ 0x0018, 0xa20a, 0x0014, 0x300b, 0xa20c, 0x0014, 0xa200, 0x8838,
-+ 0x3806, 0x8839, 0x28c2, 0x9cc0, 0xa805, 0x0864, 0xa83f, 0x3008,
-+ 0x28c1, 0x9cc0, 0xa201, 0x300c, 0x2847, 0x8161, 0x846a, 0x8000,
-+ 0x84a4, 0x1856, 0x883a, 0xa808, 0x28e2, 0x9ca1, 0xa8f3, 0x0864,
-+ 0xa82d, 0x300c, 0xa801, 0x3008, 0x28e1, 0x9ca1, 0x280e, 0xa204,
-+ 0x64c0, 0x6de0, 0x67a0, 0x6fc0, 0x1814, 0x883b, 0x7023, 0x8576,
-+ 0x8677, 0xa810, 0x7861, 0x883e, 0xa80d, 0x282c, 0xa205, 0x64a0,
-+ 0x6de0, 0x67a0, 0x6fc0, 0x1814, 0x883b, 0x7023, 0x8576, 0x8677,
-+ 0xa801, 0x883e, 0x206b, 0x28c1, 0x9cc0, 0x2044, 0x2103, 0x20a2,
-+ 0x2081, 0xa8da, 0xa207, 0x2901, 0xa80a, 0x0014, 0xa203, 0x8000,
-+ 0x85a4, 0x1872, 0x879a, 0x883c, 0x1fe2, 0xf601, 0xa208, 0x856e,
-+ 0x866f, 0x0704, 0x3008, 0x9ca1, 0x0014, 0xa202, 0x8000, 0x85a4,
-+ 0x3009, 0x84a8, 0x19e2, 0xf844, 0x856e, 0x883f, 0x08e6, 0xa8f5,
-+ 0xf861, 0xa8ec, 0xf801, 0x0014, 0xf881, 0x0016, 0x85b2, 0x80f0,
-+ 0x9532, 0xfaa2, 0x1de2, 0x0014, 0x8532, 0xf221, 0x0014, 0x1de2,
-+ 0x84a8, 0xd6e0, 0x1fe6, 0x0014, 0xa206, 0x6865, 0x817e, 0x842a,
-+ 0x1dc1, 0x8823, 0x0016, 0x6042, 0x8008, 0xa8fa, 0x8000, 0x84a4,
-+ 0x8160, 0x842a, 0xf021, 0x3008, 0x84a8, 0x11d6, 0x7042, 0x20dd,
-+ 0x0011, 0x20d4, 0x8822, 0x0016, 0x8000, 0x2848, 0x1011, 0xa8fc,
-+ 0x3008, 0x8000, 0xa000, 0x2802, 0x1011, 0xa8fd, 0xa885, 0x3008,
-+ 0x283d, 0x1011, 0xa8fd, 0xa209, 0x0017, 0x300c, 0x8000, 0x85a4,
-+ 0x1de2, 0xdac1, 0x0014, 0x0210, 0xa801, 0x0014, 0x26e0, 0x873a,
-+ 0xfaa2, 0x19f2, 0x1fe2, 0x0014, 0xa20b, 0x0014, 0xa20d, 0x3806,
-+ 0x0210, 0x9cca, 0x0704, 0x0000, 0x127e, 0x2091, 0x2200, 0x2049,
-+ 0x36ec, 0x7000, 0x7204, 0xa205, 0x720c, 0xa215, 0x7008, 0xa084,
-+ 0xfff7, 0xa205, 0x0040, 0x36fe, 0x0078, 0x3701, 0x127f, 0x2000,
-+ 0x007c, 0x7000, 0xa084, 0x0001, 0x00c0, 0x372f, 0x7108, 0x8103,
-+ 0x00c8, 0x370e, 0x1078, 0x381c, 0x0078, 0x3706, 0x700c, 0xa08c,
-+ 0x00ff, 0x0040, 0x372f, 0x7004, 0x8004, 0x00c8, 0x3726, 0x7014,
-+ 0xa005, 0x00c0, 0x3722, 0x7010, 0xa005, 0x0040, 0x3726, 0xa102,
-+ 0x00c8, 0x3706, 0x7007, 0x0010, 0x0078, 0x372f, 0x8aff, 0x0040,
-+ 0x372f, 0x1078, 0x3a35, 0x00c0, 0x3729, 0x0040, 0x3706, 0x1078,
-+ 0x37ac, 0x7003, 0x0000, 0x127f, 0x2000, 0x007c, 0x6428, 0x84ff,
-+ 0x0040, 0x3762, 0x2c70, 0x7004, 0xa0bc, 0x000f, 0xa7b8, 0x3772,
-+ 0x273c, 0x87fb, 0x00c0, 0x3750, 0x0048, 0x3748, 0x1078, 0x20c8,
-+ 0x609c, 0xa075, 0x0040, 0x3762, 0x0078, 0x373b, 0x2039, 0x3767,
-+ 0x2704, 0xae68, 0x6808, 0xa630, 0x680c, 0xa529, 0x8421, 0x0040,
-+ 0x3762, 0x8738, 0x2704, 0xa005, 0x00c0, 0x3751, 0x709c, 0xa075,
-+ 0x00c0, 0x373b, 0x007c, 0x0000, 0x0005, 0x0009, 0x000d, 0x0011,
-+ 0x0015, 0x0019, 0x001d, 0x0000, 0x0003, 0x0009, 0x000f, 0x0015,
-+ 0x001b, 0x0000, 0x0000, 0x3767, 0x3764, 0x0000, 0x0000, 0x8000,
-+ 0x0000, 0x3767, 0x0000, 0x376f, 0x376c, 0x0000, 0x0000, 0x0000,
-+ 0x0000, 0x376f, 0x0000, 0x376a, 0x376a, 0x0000, 0x0000, 0x8000,
-+ 0x0000, 0x376a, 0x0000, 0x3770, 0x3770, 0x0000, 0x0000, 0x0000,
-+ 0x0000, 0x3770, 0x127e, 0x2091, 0x2200, 0x2079, 0x3d00, 0x2071,
-+ 0x0010, 0x7007, 0x000a, 0x7007, 0x0002, 0x7003, 0x0000, 0x2071,
-+ 0x0020, 0x7007, 0x000a, 0x7007, 0x0002, 0x7003, 0x0000, 0x2049,
-+ 0x0000, 0x127f, 0x2000, 0x007c, 0x2049, 0x37ac, 0x2019, 0x0000,
-+ 0x7004, 0x8004, 0x00c8, 0x37f8, 0x7007, 0x0012, 0x7108, 0x7008,
-+ 0xa106, 0x00c0, 0x37b6, 0xa184, 0x01e0, 0x0040, 0x37c1, 0x1078,
-+ 0x20c8, 0xa184, 0x4000, 0x00c0, 0x37b6, 0xa19c, 0x300c, 0xa386,
-+ 0x2004, 0x0040, 0x37d3, 0xa386, 0x0008, 0x0040, 0x37de, 0xa386,
-+ 0x200c, 0x00c0, 0x37b6, 0x7200, 0x8204, 0x0048, 0x37de, 0x730c,
-+ 0xa384, 0x00ff, 0x0040, 0x37de, 0x1078, 0x20c8, 0x7007, 0x0012,
-+ 0x7000, 0xa084, 0x0001, 0x00c0, 0x37f8, 0x7008, 0xa084, 0x01e0,
-+ 0x00c0, 0x37f8, 0x7310, 0x7014, 0xa305, 0x0040, 0x37f8, 0x710c,
-+ 0xa184, 0x0300, 0x00c0, 0x37f8, 0xa184, 0x00ff, 0x00c0, 0x37ac,
-+ 0x7007, 0x0012, 0x7007, 0x0008, 0x7004, 0xa084, 0x0008, 0x00c0,
-+ 0x37fc, 0x7007, 0x0012, 0x7108, 0x8103, 0x0048, 0x3801, 0x7003,
-+ 0x0000, 0x2049, 0x0000, 0x007c, 0x107e, 0x007e, 0x127e, 0x157e,
-+ 0x2091, 0x2200, 0x7108, 0x1078, 0x381c, 0x157f, 0x127f, 0x2091,
-+ 0x8001, 0x007f, 0x107f, 0x007c, 0x7204, 0x7500, 0x730c, 0xa384,
-+ 0x0300, 0x00c0, 0x385e, 0xa184, 0x01e0, 0x00c0, 0x3882, 0x7108,
-+ 0xa184, 0x01e0, 0x00c0, 0x3882, 0x2001, 0x04fd, 0x2004, 0xa082,
-+ 0x0005, 0x00c8, 0x3852, 0xa184, 0x4000, 0x00c0, 0x3827, 0xa986,
-+ 0x3a5e, 0x00c0, 0x3852, 0xa19c, 0x300c, 0xa386, 0x2004, 0x0040,
-+ 0x3849, 0xa386, 0x0008, 0x0040, 0x3852, 0xa386, 0x200c, 0x00c0,
-+ 0x3827, 0x7200, 0x8204, 0x0048, 0x3852, 0x730c, 0xa384, 0x00ff,
-+ 0x00c0, 0x385e, 0xa184, 0x0007, 0x0079, 0x3856, 0x3860, 0x3872,
-+ 0x385e, 0x3872, 0x385e, 0x38be, 0x385e, 0x38bc, 0x1078, 0x20c8,
-+ 0x7004, 0xa084, 0x0010, 0xa085, 0x0002, 0x7006, 0x8aff, 0x00c0,
-+ 0x386d, 0x2049, 0x0000, 0x0078, 0x3871, 0x1078, 0x3a35, 0x00c0,
-+ 0x386d, 0x007c, 0x7004, 0xa084, 0x0010, 0xa085, 0x0002, 0x7006,
-+ 0x8aff, 0x00c0, 0x387d, 0x0078, 0x3881, 0x1078, 0x3a35, 0x00c0,
-+ 0x387d, 0x007c, 0x7007, 0x0012, 0x7108, 0x00e0, 0x3885, 0x2091,
-+ 0x6000, 0x00e0, 0x3889, 0x2091, 0x6000, 0x7007, 0x0012, 0x7007,
-+ 0x0008, 0x7004, 0xa084, 0x0008, 0x00c0, 0x3891, 0x7007, 0x0012,
-+ 0x7108, 0x8103, 0x0048, 0x3896, 0x7003, 0x0000, 0x7000, 0xa005,
-+ 0x00c0, 0x38aa, 0x7004, 0xa005, 0x00c0, 0x38aa, 0x700c, 0xa005,
-+ 0x0040, 0x38ac, 0x0078, 0x388d, 0x2049, 0x0000, 0x1078, 0x3463,
-+ 0x6818, 0xa084, 0x8000, 0x0040, 0x38b7, 0x681b, 0x0002, 0x007c,
-+ 0x1078, 0x20c8, 0x1078, 0x20c8, 0x1078, 0x391a, 0x7210, 0x7114,
-+ 0x700c, 0xa09c, 0x00ff, 0x2800, 0xa300, 0xa211, 0xa189, 0x0000,
-+ 0x1078, 0x391a, 0x2704, 0x2c58, 0xac60, 0x6308, 0x2200, 0xa322,
-+ 0x630c, 0x2100, 0xa31b, 0x2400, 0xa305, 0x0040, 0x38e1, 0x00c8,
-+ 0x38e1, 0x8412, 0x8210, 0x830a, 0xa189, 0x0000, 0x2b60, 0x0078,
-+ 0x38c8, 0x2b60, 0x8a07, 0x007e, 0x6004, 0xa084, 0x0008, 0x0040,
-+ 0x38ed, 0xa7ba, 0x376c, 0x0078, 0x38ef, 0xa7ba, 0x3764, 0x007f,
-+ 0xa73d, 0x2c00, 0x6886, 0x6f8a, 0x6c92, 0x6b8e, 0x7007, 0x0012,
-+ 0x1078, 0x37ac, 0x007c, 0x8738, 0x2704, 0xa005, 0x00c0, 0x390e,
-+ 0x609c, 0xa005, 0x0040, 0x3917, 0x2060, 0x6004, 0xa084, 0x000f,
-+ 0xa080, 0x3772, 0x203c, 0x87fb, 0x1040, 0x20c8, 0x8a51, 0x0040,
-+ 0x3916, 0x7008, 0xa084, 0x0003, 0xa086, 0x0003, 0x007c, 0x2051,
-+ 0x0000, 0x007c, 0x8a50, 0x8739, 0x2704, 0xa004, 0x00c0, 0x392e,
-+ 0x6000, 0xa064, 0x00c0, 0x3925, 0x2d60, 0x6004, 0xa084, 0x000f,
-+ 0xa080, 0x3782, 0x203c, 0x87fb, 0x1040, 0x20c8, 0x007c, 0x127e,
-+ 0x0d7e, 0x2091, 0x2200, 0x0d7f, 0x6884, 0x2060, 0x6888, 0x6b8c,
-+ 0x6c90, 0x8057, 0xaad4, 0x00ff, 0xa084, 0x00ff, 0x007e, 0x6804,
-+ 0xa084, 0x0008, 0x007f, 0x0040, 0x3949, 0xa0b8, 0x376c, 0x0078,
-+ 0x394b, 0xa0b8, 0x3764, 0x7e08, 0xa6b5, 0x000c, 0x681c, 0xa084,
-+ 0x0040, 0x0040, 0x3955, 0xa6b5, 0x0001, 0x7007, 0x0004, 0x7004,
-+ 0xa084, 0x0004, 0x00c0, 0x3957, 0x2400, 0xa305, 0x00c0, 0x3962,
-+ 0x0078, 0x3988, 0x2c58, 0x2704, 0x6104, 0xac60, 0x6000, 0xa400,
-+ 0x701a, 0x6004, 0xa301, 0x701e, 0xa184, 0x0008, 0x0040, 0x3978,
-+ 0x6010, 0xa081, 0x0000, 0x7022, 0x6014, 0xa081, 0x0000, 0x7026,
-+ 0x6208, 0x2400, 0xa202, 0x7012, 0x620c, 0x2300, 0xa203, 0x7016,
-+ 0x7602, 0x7007, 0x0001, 0x2b60, 0x1078, 0x38fb, 0x0078, 0x398a,
-+ 0x1078, 0x3a35, 0x00c0, 0x3988, 0x127f, 0x2000, 0x007c, 0x127e,
-+ 0x0d7e, 0x2091, 0x2200, 0x0d7f, 0x7007, 0x0004, 0x7004, 0xa084,
-+ 0x0004, 0x00c0, 0x3996, 0x7003, 0x0008, 0x127f, 0x2000, 0x007c,
-+ 0x127e, 0x0d7e, 0x2091, 0x2200, 0x0d7f, 0x2049, 0x39a0, 0x7007,
-+ 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, 0x39a9, 0x7e08, 0xa6b5,
-+ 0x000c, 0x681c, 0xa084, 0x0020, 0x00c0, 0x39b8, 0xa6b5, 0x0001,
-+ 0x6828, 0x2050, 0x2d60, 0x6004, 0xa0bc, 0x000f, 0xa7b8, 0x3772,
-+ 0x273c, 0x87fb, 0x00c0, 0x39ce, 0x0048, 0x39c8, 0x1078, 0x20c8,
-+ 0x689c, 0xa065, 0x0040, 0x39d2, 0x0078, 0x39bb, 0x1078, 0x3a35,
-+ 0x00c0, 0x39ce, 0x127f, 0x2000, 0x007c, 0x127e, 0x007e, 0x017e,
-+ 0x0d7e, 0x2091, 0x2200, 0x0d7f, 0x037f, 0x047f, 0x7e08, 0xa6b5,
-+ 0x000c, 0x681c, 0xa084, 0x0040, 0x0040, 0x39e8, 0xa6b5, 0x0001,
-+ 0x2049, 0x39d5, 0x6828, 0xa055, 0x0040, 0x3a32, 0x2d70, 0x2e60,
-+ 0x7004, 0xa0bc, 0x000f, 0xa7b8, 0x3772, 0x273c, 0x87fb, 0x00c0,
-+ 0x3a04, 0x0048, 0x39fd, 0x1078, 0x20c8, 0x709c, 0xa075, 0x2060,
-+ 0x0040, 0x3a32, 0x0078, 0x39f0, 0x2704, 0xae68, 0x6808, 0xa422,
-+ 0x680c, 0xa31b, 0x0048, 0x3a1f, 0x8a51, 0x00c0, 0x3a11, 0x1078,
-+ 0x20c8, 0x8738, 0x2704, 0xa005, 0x00c0, 0x3a05, 0x709c, 0xa075,
-+ 0x2060, 0x0040, 0x3a32, 0x2039, 0x3764, 0x0078, 0x39f0, 0x8422,
-+ 0x8420, 0x831a, 0xa399, 0x0000, 0x6908, 0x2400, 0xa122, 0x690c,
-+ 0x2300, 0xa11b, 0x00c8, 0x3a2e, 0x1078, 0x20c8, 0x2071, 0x0020,
-+ 0x0078, 0x3955, 0x127f, 0x2000, 0x007c, 0x7008, 0xa084, 0x0003,
-+ 0xa086, 0x0003, 0x0040, 0x3a5d, 0x2704, 0xac08, 0x2104, 0x701a,
-+ 0x8108, 0x2104, 0x701e, 0x8108, 0x2104, 0x7012, 0x8108, 0x2104,
-+ 0x7016, 0x6004, 0xa084, 0x0008, 0x0040, 0x3a54, 0x8108, 0x2104,
-+ 0x7022, 0x8108, 0x2104, 0x7026, 0x7602, 0x7004, 0xa084, 0x0010,
-+ 0xa085, 0x0001, 0x7006, 0x1078, 0x38fb, 0x007c, 0x127e, 0x007e,
-+ 0x0d7e, 0x2091, 0x2200, 0x2049, 0x3a5e, 0x0d7f, 0x087f, 0x7108,
-+ 0xa184, 0x0003, 0x00c0, 0x3a72, 0x6828, 0xa005, 0x0040, 0x3a80,
-+ 0x0078, 0x3701, 0x00a0, 0x3a79, 0x7108, 0x1078, 0x381c, 0x0078,
-+ 0x3a67, 0x7007, 0x0010, 0x00a0, 0x3a7b, 0x7108, 0x1078, 0x381c,
-+ 0x7008, 0xa086, 0x0008, 0x00c0, 0x3a67, 0x7000, 0xa005, 0x00c0,
-+ 0x3a67, 0x7003, 0x0000, 0x2049, 0x0000, 0x127f, 0x2000, 0x007c,
-+ 0x127e, 0x147e, 0x137e, 0x157e, 0x0c7e, 0x0d7e, 0x2091, 0x2200,
-+ 0x0d7f, 0x2049, 0x3a90, 0xad80, 0x0011, 0x20a0, 0x2099, 0x0031,
-+ 0x700c, 0xa084, 0x00ff, 0x682a, 0x7007, 0x0008, 0x7007, 0x0002,
-+ 0x7003, 0x0001, 0x0040, 0x3aaf, 0x8000, 0x80ac, 0x53a5, 0x7007,
-+ 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, 0x3ab1, 0x0c7f, 0x2049,
-+ 0x0000, 0x7003, 0x0000, 0x157f, 0x137f, 0x147f, 0x127f, 0x2000,
-+ 0x007c, 0x2091, 0x6000, 0x2091, 0x8000, 0x78c0, 0xa005, 0x00c0,
-+ 0x3ad8, 0x798c, 0x70d0, 0xa106, 0x00c0, 0x3ad8, 0x7804, 0xa005,
-+ 0x0040, 0x3ad8, 0x7807, 0x0000, 0x0068, 0x3ad8, 0x2091, 0x4080,
-+ 0x7820, 0x8001, 0x7822, 0x00c0, 0x3b5d, 0x7824, 0x7822, 0x783c,
-+ 0xa005, 0x0040, 0x3ae9, 0x8001, 0x783e, 0x00c0, 0x3ae9, 0x1078,
-+ 0x3c87, 0x78ec, 0xa005, 0x0040, 0x3b0d, 0x78d4, 0xa005, 0x00c0,
-+ 0x3b0d, 0x3a10, 0xa284, 0x0002, 0x00c0, 0x3afd, 0x78d7, 0x0007,
-+ 0x2009, 0xff01, 0x200a, 0x0078, 0x3b0d, 0xa284, 0x0001, 0x00c0,
-+ 0x3b05, 0x78eb, 0x0000, 0x0078, 0x3b0d, 0x78e8, 0xa005, 0x00c0,
-+ 0x3b0d, 0x78d7, 0x0008, 0x78eb, 0x0001, 0x2069, 0x3d40, 0x6800,
-+ 0xa084, 0x0007, 0x0040, 0x3b24, 0xa086, 0x0002, 0x0040, 0x3b24,
-+ 0x6830, 0xa00d, 0x0040, 0x3b24, 0x2104, 0xa005, 0x0040, 0x3b24,
-+ 0x8001, 0x200a, 0x0040, 0x3bff, 0x7848, 0xa005, 0x0040, 0x3b2e,
-+ 0x8001, 0x784a, 0x00c0, 0x3b2e, 0x1078, 0x1f05, 0x68c4, 0xa005,
-+ 0x0040, 0x3b3a, 0x8001, 0x68c6, 0x00c0, 0x3b3a, 0x68a3, 0x0000,
-+ 0x68a7, 0x0001, 0x2061, 0x4000, 0x2009, 0x0002, 0x20a9, 0x0100,
-+ 0x6034, 0xa005, 0x0040, 0x3b50, 0x8001, 0x6036, 0x00c0, 0x3b50,
-+ 0x6010, 0xa005, 0x0040, 0x3b50, 0x017e, 0x1078, 0x1f05, 0x017f,
-+ 0xace0, 0x0010, 0x0070, 0x3b56, 0x0078, 0x3b40, 0x8109, 0x0040,
-+ 0x3b5d, 0x20a9, 0x0100, 0x0078, 0x3b40, 0x1078, 0x3b64, 0x1078,
-+ 0x3b89, 0x2091, 0x8001, 0x007c, 0x7834, 0x8001, 0x7836, 0x00c0,
-+ 0x3b88, 0x7838, 0x7836, 0x2091, 0x8000, 0x7844, 0xa005, 0x00c0,
-+ 0x3b73, 0x2001, 0x0101, 0x8001, 0x7846, 0xa080, 0x6000, 0x2040,
-+ 0x2004, 0xa065, 0x0040, 0x3b88, 0x6024, 0xa005, 0x0040, 0x3b84,
-+ 0x8001, 0x6026, 0x0040, 0x3bb8, 0x6000, 0x2c40, 0x0078, 0x3b79,
-+ 0x007c, 0x7828, 0x8001, 0x782a, 0x00c0, 0x3bb7, 0x782c, 0x782a,
-+ 0x7830, 0xa005, 0x00c0, 0x3b96, 0x2001, 0x0200, 0x8001, 0x7832,
-+ 0x8003, 0x8003, 0x8003, 0x8003, 0xa090, 0x4000, 0xa298, 0x0002,
-+ 0x2304, 0xa084, 0x0008, 0x0040, 0x3bb7, 0xa290, 0x0009, 0x2204,
-+ 0xa005, 0x0040, 0x3baf, 0x8001, 0x2012, 0x00c0, 0x3bb7, 0x2304,
-+ 0xa084, 0xfff7, 0xa085, 0x0080, 0x201a, 0x1078, 0x1f05, 0x007c,
-+ 0x2069, 0x3d40, 0x6800, 0xa005, 0x0040, 0x3bc2, 0x683c, 0xac06,
-+ 0x0040, 0x3bff, 0x601b, 0x0006, 0x60b4, 0xa084, 0x3f00, 0x601e,
-+ 0x6020, 0xa084, 0x00ff, 0xa085, 0x0060, 0x6022, 0x6000, 0x2042,
-+ 0x6714, 0x6fb6, 0x1078, 0x19f0, 0x6818, 0xa005, 0x0040, 0x3bda,
-+ 0x8001, 0x681a, 0x6808, 0xa084, 0xffef, 0x680a, 0x6810, 0x8001,
-+ 0x00d0, 0x3be4, 0x1078, 0x20c8, 0x6812, 0x602f, 0x0000, 0x6033,
-+ 0x0000, 0x2c68, 0x1078, 0x1b7f, 0x2069, 0x3d40, 0x7944, 0xa184,
-+ 0x0100, 0x2001, 0x0006, 0x68a2, 0x00c0, 0x3bfa, 0x69ba, 0x2001,
-+ 0x0004, 0x68a2, 0x1078, 0x1f00, 0x2091, 0x8001, 0x007c, 0x2009,
-+ 0x3d4f, 0x2164, 0x2069, 0x0100, 0x1078, 0x2073, 0x601b, 0x0006,
-+ 0x6858, 0xa084, 0x3f00, 0x601e, 0x6020, 0xa084, 0x00ff, 0xa085,
-+ 0x0048, 0x6022, 0x602f, 0x0000, 0x6033, 0x0000, 0x6830, 0xa084,
-+ 0x0040, 0x0040, 0x3c3b, 0x684b, 0x0004, 0x20a9, 0x0014, 0x6848,
-+ 0xa084, 0x0004, 0x0040, 0x3c28, 0x0070, 0x3c28, 0x0078, 0x3c1f,
-+ 0x684b, 0x0009, 0x20a9, 0x0014, 0x6848, 0xa084, 0x0001, 0x0040,
-+ 0x3c35, 0x0070, 0x3c35, 0x0078, 0x3c2c, 0x20a9, 0x00fa, 0x0070,
-+ 0x3c3b, 0x0078, 0x3c37, 0x6808, 0xa084, 0xfffd, 0x680a, 0x681b,
-+ 0x0047, 0x2009, 0x3d68, 0x200b, 0x0007, 0x784c, 0x784a, 0x2091,
-+ 0x8001, 0x007c, 0x2079, 0x3d00, 0x1078, 0x3c75, 0x1078, 0x3c59,
-+ 0x1078, 0x3c67, 0x7833, 0x0000, 0x7847, 0x0000, 0x784b, 0x0000,
-+ 0x007c, 0x2019, 0x0003, 0x2011, 0x3d46, 0x2204, 0xa086, 0x003c,
-+ 0x0040, 0x3c64, 0x2019, 0x0002, 0x7b2a, 0x7b2e, 0x007c, 0x2019,
-+ 0x0039, 0x2011, 0x3d46, 0x2204, 0xa086, 0x003c, 0x0040, 0x3c72,
-+ 0x2019, 0x0027, 0x7b36, 0x7b3a, 0x007c, 0x2019, 0x3971, 0x2011,
-+ 0x3d46, 0x2204, 0xa086, 0x003c, 0x0040, 0x3c80, 0x2019, 0x2626,
-+ 0x7b22, 0x7b26, 0x783f, 0x0000, 0x7843, 0x000a, 0x007c, 0x2069,
-+ 0x3d40, 0x6a40, 0xa285, 0x0000, 0x0040, 0x3cce, 0x6944, 0xa080,
-+ 0x3d80, 0x2164, 0x6304, 0x83ff, 0x00c0, 0x3ca1, 0x8211, 0x0040,
-+ 0x3ca4, 0x8108, 0xa11a, 0x0048, 0x3c91, 0x2009, 0x3d80, 0x0078,
-+ 0x3c91, 0x7940, 0x793e, 0x007c, 0x2011, 0x0002, 0x2039, 0x0000,
-+ 0x20a9, 0x0100, 0x1078, 0x19f0, 0x2d00, 0xa088, 0x0002, 0x2168,
-+ 0x682b, 0x0000, 0x682f, 0x0000, 0x2104, 0xa085, 0x0040, 0x200a,
-+ 0x2100, 0xa088, 0x0010, 0x0070, 0x3cbf, 0x0078, 0x3caf, 0x8211,
-+ 0x0040, 0x3cc6, 0x20a9, 0x0100, 0x0078, 0x3caf, 0x2009, 0x3d51,
-+ 0x200b, 0x3d7f, 0x2009, 0x3d50, 0x200b, 0x0000, 0x007c, 0x4de2
-+};
-+#else
-+/************************************************************************
-+ * *
-+ * --- ISP1040 Initiator/Target Firmware --- *
-+ * 32 LUN Support *
-+ * *
-+ ************************************************************************/
-+/*
-+ * Firmware Version 7.65.00 (14:17 Jul 20, 1999)
-+ */
-+static const u_int16_t isp_1040_risc_code[] = {
-+ 0x0078, 0x103a, 0x0000, 0x4057, 0x0000, 0x2043, 0x4f50, 0x5952,
-+ 0x4947, 0x4854, 0x2031, 0x3939, 0x3520, 0x514c, 0x4f47, 0x4943,
-+ 0x2043, 0x4f52, 0x504f, 0x5241, 0x5449, 0x4f4e, 0x2049, 0x5350,
-+ 0x3130, 0x3230, 0x2049, 0x2f54, 0x2046, 0x6972, 0x6d77, 0x6172,
-+ 0x6520, 0x2056, 0x6572, 0x7369, 0x6f6e, 0x2030, 0x372e, 0x3635,
-+ 0x2020, 0x2043, 0x7573, 0x746f, 0x6d65, 0x7220, 0x4e6f, 0x2e20,
-+ 0x3030, 0x2050, 0x726f, 0x6475, 0x6374, 0x204e, 0x6f2e, 0x2020,
-+ 0x3031, 0x2024, 0x2001, 0x04fd, 0x2004, 0xa082, 0x0005, 0x0048,
-+ 0x1045, 0x0038, 0x104b, 0x0078, 0x1047, 0x0028, 0x104b, 0x20b9,
-+ 0x1212, 0x0078, 0x104d, 0x20b9, 0x2222, 0x20c1, 0x0008, 0x2071,
-+ 0x0010, 0x70c3, 0x0004, 0x20c9, 0x77ff, 0x2089, 0x1186, 0x70c7,
-+ 0x4953, 0x70cb, 0x5020, 0x70cf, 0x2020, 0x70d3, 0x0007, 0x3f00,
-+ 0x70d6, 0x20c1, 0x0008, 0x2019, 0x0000, 0x2009, 0xfeff, 0x2100,
-+ 0x200b, 0xa5a5, 0xa1ec, 0x7fff, 0x2d64, 0x206b, 0x0a0a, 0xaddc,
-+ 0x3fff, 0x2b54, 0x205b, 0x5050, 0x2114, 0xa286, 0xa5a5, 0x0040,
-+ 0x10bf, 0xa386, 0x000f, 0x0040, 0x1085, 0x2c6a, 0x2a5a, 0x20c1,
-+ 0x0000, 0x2019, 0x000f, 0x0078, 0x1065, 0x2c6a, 0x2a5a, 0x20c1,
-+ 0x0008, 0x2009, 0x7fff, 0x2148, 0x2944, 0x204b, 0x0a0a, 0xa9bc,
-+ 0x3fff, 0x2734, 0x203b, 0x5050, 0x2114, 0xa286, 0x0a0a, 0x0040,
-+ 0x10a9, 0x284a, 0x263a, 0x20c1, 0x0004, 0x2009, 0x3fff, 0x2134,
-+ 0x200b, 0x5050, 0x2114, 0xa286, 0x5050, 0x0040, 0x10aa, 0x0078,
-+ 0x118e, 0x284a, 0x263a, 0x98c0, 0xa188, 0x1000, 0x212c, 0x200b,
-+ 0xa5a5, 0x2114, 0xa286, 0xa5a5, 0x0040, 0x10bc, 0x250a, 0xa18a,
-+ 0x1000, 0x98c1, 0x0078, 0x10c1, 0x250a, 0x0078, 0x10c1, 0x2c6a,
-+ 0x2a5a, 0x2130, 0xa18a, 0x0040, 0x2128, 0xa1a2, 0x5100, 0x8424,
-+ 0x8424, 0x8424, 0x8424, 0x8424, 0x8424, 0xa192, 0x7800, 0x2009,
-+ 0x0000, 0x2001, 0x0031, 0x1078, 0x1cba, 0x2218, 0x2079, 0x5100,
-+ 0x2fa0, 0x2408, 0x2011, 0x0000, 0x20a9, 0x0040, 0x42a4, 0x8109,
-+ 0x00c0, 0x10dc, 0x7ef2, 0x8528, 0x7de6, 0x7cea, 0x7bee, 0x7883,
-+ 0x0000, 0x2031, 0x0030, 0x78cf, 0x0101, 0x780b, 0x0002, 0x780f,
-+ 0x0002, 0x784f, 0x0003, 0x2069, 0x5140, 0x2001, 0x04fd, 0x2004,
-+ 0xa082, 0x0005, 0x0048, 0x1104, 0x0038, 0x1100, 0x0078, 0x1108,
-+ 0x681b, 0x003c, 0x0078, 0x110a, 0x00a8, 0x1108, 0x681b, 0x003c,
-+ 0x681b, 0x0028, 0x6807, 0x0007, 0x680b, 0x00fa, 0x680f, 0x0008,
-+ 0x6813, 0x0005, 0x6823, 0x0000, 0x6827, 0x0006, 0x6817, 0x0008,
-+ 0x682b, 0x0000, 0x681f, 0x0019, 0x2069, 0x5380, 0x2011, 0x0020,
-+ 0x2009, 0x0010, 0x680b, 0x080c, 0x680f, 0x0019, 0x6803, 0xfd00,
-+ 0x6807, 0x0018, 0x6a1a, 0x2d00, 0xa0e8, 0x0008, 0xa290, 0x0004,
-+ 0x8109, 0x00c0, 0x1122, 0x2069, 0x5400, 0x2009, 0x0002, 0x20a9,
-+ 0x0100, 0x6837, 0x0000, 0x680b, 0x0040, 0x7bf0, 0xa386, 0xfeff,
-+ 0x00c0, 0x1148, 0x6817, 0x0100, 0x681f, 0x0064, 0x0078, 0x114c,
-+ 0x6817, 0x0064, 0x681f, 0x0002, 0xade8, 0x0010, 0x0070, 0x1152,
-+ 0x0078, 0x1139, 0x8109, 0x00c0, 0x1137, 0x1078, 0x220a, 0x1078,
-+ 0x482c, 0x1078, 0x1963, 0x1078, 0x4d22, 0x3200, 0xa085, 0x000d,
-+ 0x2090, 0x70c3, 0x0000, 0x0090, 0x116c, 0x70c0, 0xa086, 0x0002,
-+ 0x00c0, 0x116c, 0x1078, 0x1284, 0x1078, 0x1196, 0x78cc, 0xa005,
-+ 0x00c0, 0x117a, 0x1078, 0x1ce3, 0x0010, 0x1180, 0x0068, 0x1180,
-+ 0x1078, 0x20e9, 0x0010, 0x1180, 0x0068, 0x1180, 0x1078, 0x1a48,
-+ 0x00e0, 0x116c, 0x1078, 0x4ba9, 0x0078, 0x116c, 0x118e, 0x1190,
-+ 0x240b, 0x240b, 0x48ad, 0x48ad, 0x240b, 0x240b, 0x0078, 0x118e,
-+ 0x0078, 0x1190, 0x0078, 0x1192, 0x0078, 0x1194, 0x0068, 0x1201,
-+ 0x2061, 0x0000, 0x6018, 0xa084, 0x0001, 0x00c0, 0x1201, 0x7814,
-+ 0xa005, 0x00c0, 0x11a7, 0x0010, 0x1202, 0x0078, 0x1201, 0x2009,
-+ 0x515b, 0x2104, 0xa005, 0x00c0, 0x1201, 0x2009, 0x5164, 0x200b,
-+ 0x0000, 0x7914, 0xa186, 0x0042, 0x00c0, 0x11cc, 0x7816, 0x2009,
-+ 0x5162, 0x2164, 0x200b, 0x0000, 0x6018, 0x70c6, 0x6014, 0x70ca,
-+ 0x611c, 0xa18c, 0xff00, 0x6020, 0xa084, 0x00ff, 0xa105, 0x70ce,
-+ 0x1078, 0x1948, 0x0078, 0x11ff, 0x7814, 0xa086, 0x0018, 0x00c0,
-+ 0x11d3, 0x1078, 0x165a, 0x7817, 0x0000, 0x2009, 0x5162, 0x2104,
-+ 0xa065, 0x0040, 0x11ef, 0x0c7e, 0x609c, 0x2060, 0x1078, 0x19b3,
-+ 0x0c7f, 0x609f, 0x0000, 0x1078, 0x1730, 0x2009, 0x000c, 0x6007,
-+ 0x0103, 0x1078, 0x1924, 0x00c0, 0x11fb, 0x1078, 0x1948, 0x2009,
-+ 0x5162, 0x200b, 0x0000, 0x2009, 0x515c, 0x2104, 0x200b, 0x0000,
-+ 0xa005, 0x0040, 0x11ff, 0x2001, 0x4005, 0x0078, 0x1286, 0x0078,
-+ 0x1284, 0x007c, 0x70c3, 0x0000, 0x70c7, 0x0000, 0x70cb, 0x0000,
-+ 0x70cf, 0x0000, 0x70c0, 0xa0bc, 0xffc0, 0x00c0, 0x1252, 0x2038,
-+ 0x0079, 0x1212, 0x1284, 0x12e5, 0x12a9, 0x12fe, 0x130d, 0x1313,
-+ 0x12a0, 0x1748, 0x1317, 0x1298, 0x12ad, 0x12af, 0x12b1, 0x12b3,
-+ 0x174d, 0x1298, 0x1329, 0x1360, 0x1672, 0x1742, 0x12b5, 0x1591,
-+ 0x15ad, 0x15c9, 0x15f4, 0x154a, 0x1558, 0x156c, 0x1580, 0x13df,
-+ 0x1298, 0x138d, 0x1393, 0x1398, 0x139d, 0x13a3, 0x13a8, 0x13ad,
-+ 0x13b2, 0x13b7, 0x13bb, 0x13d0, 0x13dc, 0x1298, 0x1298, 0x1298,
-+ 0x1298, 0x13eb, 0x13f4, 0x1403, 0x1429, 0x1433, 0x143a, 0x1480,
-+ 0x148f, 0x149e, 0x14b0, 0x152a, 0x153a, 0x1298, 0x1298, 0x1298,
-+ 0x1298, 0x153f, 0xa0bc, 0xffa0, 0x00c0, 0x1298, 0x2038, 0xa084,
-+ 0x001f, 0x0079, 0x125b, 0x1786, 0x1789, 0x1799, 0x1298, 0x1298,
-+ 0x18df, 0x18fc, 0x1298, 0x1298, 0x1298, 0x1900, 0x1908, 0x1298,
-+ 0x1298, 0x1298, 0x1298, 0x12db, 0x12f4, 0x131f, 0x1356, 0x1668,
-+ 0x1764, 0x1778, 0x1298, 0x1829, 0x190e, 0x18bb, 0x18c5, 0x18c9,
-+ 0x18d7, 0x1298, 0x1298, 0x72ca, 0x71c6, 0x2001, 0x4006, 0x0078,
-+ 0x1286, 0x73ce, 0x72ca, 0x71c6, 0x2001, 0x4000, 0x70c2, 0x0068,
-+ 0x1287, 0x2061, 0x0000, 0x601b, 0x0001, 0x2091, 0x5000, 0x00e0,
-+ 0x128f, 0x00e0, 0x1291, 0x0068, 0x1291, 0x2091, 0x4080, 0x007c,
-+ 0x70c3, 0x4001, 0x0078, 0x1287, 0x70c3, 0x4006, 0x0078, 0x1287,
-+ 0x2099, 0x0041, 0x20a1, 0x0041, 0x20a9, 0x0005, 0x53a3, 0x0078,
-+ 0x1284, 0x70c4, 0x70c3, 0x0004, 0x007a, 0x0078, 0x1284, 0x0078,
-+ 0x1284, 0x0078, 0x1284, 0x0078, 0x1284, 0x2091, 0x8000, 0x70c3,
-+ 0x0000, 0x70c7, 0x4953, 0x70cb, 0x5020, 0x70cf, 0x2020, 0x70d3,
-+ 0x0007, 0x3f00, 0x70d6, 0x2079, 0x0000, 0x781b, 0x0001, 0x2031,
-+ 0x0030, 0x2059, 0x1000, 0x2029, 0x0457, 0x2051, 0x0470, 0x2061,
-+ 0x0472, 0x20b9, 0xffff, 0x20c1, 0x0000, 0x2091, 0x5000, 0x2091,
-+ 0x4080, 0x0078, 0x0455, 0x1078, 0x1b53, 0x00c0, 0x129c, 0x75d8,
-+ 0x74dc, 0x75da, 0x74de, 0x0078, 0x12e8, 0x2029, 0x0000, 0x2520,
-+ 0x71d0, 0x73c8, 0x72cc, 0x70c4, 0x1078, 0x1a8d, 0x0040, 0x1284,
-+ 0x70c3, 0x4002, 0x0078, 0x1284, 0x1078, 0x1b53, 0x00c0, 0x129c,
-+ 0x75d8, 0x74dc, 0x75da, 0x74de, 0x0078, 0x1301, 0x2029, 0x0000,
-+ 0x2520, 0x71d0, 0x73c8, 0x72cc, 0x70c4, 0x1078, 0x1aed, 0x0040,
-+ 0x1284, 0x70c3, 0x4002, 0x0078, 0x1284, 0x71c4, 0x70c8, 0x2114,
-+ 0x200a, 0x0078, 0x1282, 0x71c4, 0x2114, 0x0078, 0x1282, 0x70c7,
-+ 0x0007, 0x70cb, 0x0041, 0x70cf, 0x0000, 0x0078, 0x1284, 0x1078,
-+ 0x1b53, 0x00c0, 0x129c, 0x75d8, 0x76dc, 0x75da, 0x76de, 0x0078,
-+ 0x132c, 0x2029, 0x0000, 0x2530, 0x70c4, 0x72c8, 0x73cc, 0x74d0,
-+ 0x70c6, 0x72ca, 0x73ce, 0x74d2, 0xa005, 0x0040, 0x1350, 0x8001,
-+ 0x7892, 0xa084, 0xfc00, 0x0040, 0x1345, 0x78cc, 0xa085, 0x0001,
-+ 0x78ce, 0x2001, 0x4005, 0x0078, 0x1286, 0x7a9a, 0x7b9e, 0x7da2,
-+ 0x7ea6, 0x7c96, 0x78cc, 0xa084, 0xfffc, 0x78ce, 0x0078, 0x1354,
-+ 0x78cc, 0xa085, 0x0001, 0x78ce, 0x0078, 0x1284, 0x1078, 0x1b53,
-+ 0x00c0, 0x129c, 0x75d8, 0x76dc, 0x75da, 0x76de, 0x0078, 0x1363,
-+ 0x2029, 0x0000, 0x2530, 0x70c4, 0x72c8, 0x73cc, 0x74d4, 0x70c6,
-+ 0x72ca, 0x73ce, 0x74d6, 0xa005, 0x0040, 0x1387, 0x8001, 0x78ae,
-+ 0xa084, 0xfc00, 0x0040, 0x137c, 0x78cc, 0xa085, 0x0100, 0x78ce,
-+ 0x2001, 0x4005, 0x0078, 0x1286, 0x7ab6, 0x7bba, 0x7dbe, 0x7ec2,
-+ 0x7cb2, 0x78cc, 0xa084, 0xfcff, 0x78ce, 0x0078, 0x138b, 0x78cc,
-+ 0xa085, 0x0100, 0x78ce, 0x0078, 0x1284, 0x2009, 0x5161, 0x210c,
-+ 0x7aec, 0x0078, 0x1282, 0x2009, 0x5141, 0x210c, 0x0078, 0x1283,
-+ 0x2009, 0x5142, 0x210c, 0x0078, 0x1283, 0x2061, 0x5140, 0x610c,
-+ 0x6210, 0x0078, 0x1282, 0x2009, 0x5145, 0x210c, 0x0078, 0x1283,
-+ 0x2009, 0x5146, 0x210c, 0x0078, 0x1283, 0x2009, 0x5148, 0x210c,
-+ 0x0078, 0x1283, 0x2009, 0x5149, 0x210c, 0x0078, 0x1283, 0x7908,
-+ 0x7a0c, 0x0078, 0x1282, 0x71c4, 0x8107, 0xa084, 0x000f, 0x8003,
-+ 0x8003, 0x8003, 0xa0e8, 0x5380, 0x6a00, 0x6804, 0xa084, 0x0008,
-+ 0x0040, 0x13cd, 0x6b08, 0x0078, 0x13ce, 0x6b0c, 0x0078, 0x1281,
-+ 0x77c4, 0x1078, 0x1973, 0x2091, 0x8000, 0x6b1c, 0x6a14, 0x2091,
-+ 0x8001, 0x2708, 0x0078, 0x1281, 0x794c, 0x0078, 0x1283, 0x77c4,
-+ 0x1078, 0x1973, 0x2091, 0x8000, 0x6908, 0x6a18, 0x6b10, 0x2091,
-+ 0x8001, 0x0078, 0x1281, 0x71c4, 0xa182, 0x0010, 0x00c8, 0x127c,
-+ 0x1078, 0x22e2, 0x0078, 0x1281, 0x71c4, 0xa182, 0x0010, 0x00c8,
-+ 0x127c, 0x2011, 0x5141, 0x2204, 0x007e, 0x2112, 0x1078, 0x229b,
-+ 0x017f, 0x0078, 0x1283, 0x71c4, 0x2011, 0x1421, 0x20a9, 0x0008,
-+ 0x2204, 0xa106, 0x0040, 0x1413, 0x8210, 0x0070, 0x1411, 0x0078,
-+ 0x1408, 0x0078, 0x127c, 0xa292, 0x1421, 0x027e, 0x2011, 0x5142,
-+ 0x2204, 0x2112, 0x017f, 0x007e, 0x1078, 0x22a7, 0x017f, 0x0078,
-+ 0x1283, 0x03e8, 0x00fa, 0x01f4, 0x02ee, 0x0064, 0x0019, 0x0032,
-+ 0x004b, 0x2061, 0x5140, 0x610c, 0x6210, 0x70c4, 0x600e, 0x70c8,
-+ 0x6012, 0x0078, 0x1282, 0x2061, 0x5140, 0x6114, 0x70c4, 0x6016,
-+ 0x0078, 0x1283, 0x2061, 0x5140, 0x71c4, 0x2011, 0x0004, 0x601f,
-+ 0x0019, 0x2019, 0x1212, 0xa186, 0x0028, 0x0040, 0x145b, 0x2011,
-+ 0x0005, 0x601f, 0x0019, 0x2019, 0x1212, 0xa186, 0x0032, 0x0040,
-+ 0x145b, 0x2011, 0x0006, 0x601f, 0x000c, 0x2019, 0x2222, 0xa186,
-+ 0x003c, 0x00c0, 0x127c, 0x6018, 0x007e, 0x611a, 0x7800, 0xa084,
-+ 0x0001, 0x00c0, 0x1476, 0x2001, 0x04fd, 0x2004, 0xa082, 0x0005,
-+ 0x0048, 0x146e, 0x0038, 0x1472, 0x0078, 0x1476, 0x0028, 0x1472,
-+ 0x0078, 0x1476, 0x2019, 0x2222, 0x0078, 0x1478, 0x2019, 0x1212,
-+ 0x23b8, 0x1078, 0x22b8, 0x1078, 0x4d22, 0x017f, 0x0078, 0x1283,
-+ 0x71c4, 0xa184, 0xffcf, 0x00c0, 0x127c, 0x2011, 0x5148, 0x2204,
-+ 0x2112, 0x007e, 0x1078, 0x22da, 0x017f, 0x0078, 0x1283, 0x71c4,
-+ 0xa182, 0x0010, 0x00c8, 0x127c, 0x2011, 0x5149, 0x2204, 0x007e,
-+ 0x2112, 0x1078, 0x22c9, 0x017f, 0x0078, 0x1283, 0x71c4, 0x72c8,
-+ 0xa184, 0xfffd, 0x00c0, 0x127b, 0xa284, 0xfffd, 0x00c0, 0x127b,
-+ 0x2100, 0x7908, 0x780a, 0x2200, 0x7a0c, 0x780e, 0x0078, 0x1282,
-+ 0x71c4, 0x8107, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa0e8,
-+ 0x5380, 0x2019, 0x0000, 0x72c8, 0xa284, 0x0080, 0x0040, 0x14c6,
-+ 0x6c14, 0x84ff, 0x00c0, 0x14c6, 0x6817, 0x0040, 0xa284, 0x0040,
-+ 0x0040, 0x14d0, 0x6c10, 0x84ff, 0x00c0, 0x14d0, 0x6813, 0x0001,
-+ 0x6800, 0x007e, 0xa226, 0x0040, 0x14f3, 0x6a02, 0xa484, 0x2000,
-+ 0x0040, 0x14dc, 0xa39d, 0x0010, 0xa484, 0x1000, 0x0040, 0x14e2,
-+ 0xa39d, 0x0008, 0xa484, 0x4000, 0x0040, 0x14f3, 0x810f, 0xa284,
-+ 0x4000, 0x0040, 0x14ef, 0x1078, 0x22fc, 0x0078, 0x14f3, 0x1078,
-+ 0x22ee, 0x0078, 0x14f3, 0x72cc, 0x6808, 0xa206, 0x0040, 0x1522,
-+ 0xa2a4, 0x00ff, 0x2061, 0x5140, 0x6118, 0xa186, 0x0028, 0x0040,
-+ 0x1509, 0xa186, 0x0032, 0x0040, 0x150f, 0xa186, 0x003c, 0x0040,
-+ 0x1515, 0xa482, 0x0064, 0x0048, 0x151f, 0x0078, 0x1519, 0xa482,
-+ 0x0050, 0x0048, 0x151f, 0x0078, 0x1519, 0xa482, 0x0043, 0x0048,
-+ 0x151f, 0x71c4, 0x71c6, 0x027f, 0x72ca, 0x0078, 0x127d, 0x6a0a,
-+ 0xa39d, 0x000a, 0x6804, 0xa305, 0x6806, 0x027f, 0x6b0c, 0x71c4,
-+ 0x0078, 0x1281, 0x77c4, 0x1078, 0x1973, 0x2091, 0x8000, 0x6a14,
-+ 0x6b1c, 0x2091, 0x8001, 0x70c8, 0x6816, 0x70cc, 0x681e, 0x2708,
-+ 0x0078, 0x1281, 0x70c4, 0x794c, 0x784e, 0x0078, 0x1283, 0x71c4,
-+ 0x72c8, 0x73cc, 0xa182, 0x0010, 0x00c8, 0x127c, 0x1078, 0x230a,
-+ 0x0078, 0x1281, 0x77c4, 0x1078, 0x1973, 0x2091, 0x8000, 0x6a08,
-+ 0xa295, 0x0002, 0x6a0a, 0x2091, 0x8001, 0x2708, 0x0078, 0x1282,
-+ 0x77c4, 0x1078, 0x1973, 0x2091, 0x8000, 0x6a08, 0xa294, 0xfff9,
-+ 0x6a0a, 0x6804, 0xa005, 0x0040, 0x1567, 0x1078, 0x21d2, 0x2091,
-+ 0x8001, 0x2708, 0x0078, 0x1282, 0x77c4, 0x1078, 0x1973, 0x2091,
-+ 0x8000, 0x6a08, 0xa295, 0x0004, 0x6a0a, 0x6804, 0xa005, 0x0040,
-+ 0x157b, 0x1078, 0x21d2, 0x2091, 0x8001, 0x2708, 0x0078, 0x1282,
-+ 0x77c4, 0x2041, 0x0001, 0x2049, 0x0005, 0x2051, 0x0020, 0x2091,
-+ 0x8000, 0x1078, 0x1980, 0x2091, 0x8001, 0x2708, 0x6a08, 0x0078,
-+ 0x1282, 0x77c4, 0x72c8, 0x73cc, 0x77c6, 0x72ca, 0x73ce, 0x1078,
-+ 0x19e1, 0x00c0, 0x15a9, 0x6818, 0xa005, 0x0040, 0x15a9, 0x2708,
-+ 0x1078, 0x231a, 0x00c0, 0x15a9, 0x7817, 0x0015, 0x2091, 0x8001,
-+ 0x007c, 0x2091, 0x8001, 0x0078, 0x1284, 0x77c4, 0x77c6, 0x2041,
-+ 0x0021, 0x2049, 0x0005, 0x2051, 0x0020, 0x2091, 0x8000, 0x1078,
-+ 0x1980, 0x2061, 0x5140, 0x606f, 0x0003, 0x6782, 0x6093, 0x000f,
-+ 0x6073, 0x0000, 0x7817, 0x0016, 0x1078, 0x21d2, 0x2091, 0x8001,
-+ 0x007c, 0x77c8, 0x77ca, 0x77c4, 0x77c6, 0xa7bc, 0xff00, 0x2091,
-+ 0x8000, 0x2061, 0x5140, 0x606f, 0x0002, 0x6073, 0x0000, 0x6782,
-+ 0x6093, 0x000f, 0x7817, 0x0017, 0x1078, 0x21d2, 0x2091, 0x8001,
-+ 0x2041, 0x0021, 0x2049, 0x0004, 0x2051, 0x0010, 0x2091, 0x8000,
-+ 0x1078, 0x1980, 0x70c8, 0x6836, 0x8738, 0xa784, 0x001f, 0x00c0,
-+ 0x15e8, 0x2091, 0x8001, 0x007c, 0x78cc, 0xa084, 0x0003, 0x00c0,
-+ 0x1618, 0x2039, 0x0000, 0x2041, 0x0021, 0x2049, 0x0004, 0x2051,
-+ 0x0008, 0x1078, 0x1973, 0x2091, 0x8000, 0x6808, 0xa80d, 0x690a,
-+ 0x2091, 0x8001, 0x8738, 0xa784, 0x001f, 0x00c0, 0x1601, 0xa7bc,
-+ 0xff00, 0x873f, 0x8738, 0x873f, 0xa784, 0x0f00, 0x00c0, 0x1601,
-+ 0x2091, 0x8000, 0x2069, 0x0100, 0x6830, 0xa084, 0x0040, 0x0040,
-+ 0x1641, 0x684b, 0x0004, 0x20a9, 0x0014, 0x6848, 0xa084, 0x0004,
-+ 0x0040, 0x162e, 0x0070, 0x162e, 0x0078, 0x1625, 0x684b, 0x0009,
-+ 0x20a9, 0x0014, 0x6848, 0xa084, 0x0001, 0x0040, 0x163b, 0x0070,
-+ 0x163b, 0x0078, 0x1632, 0x20a9, 0x00fa, 0x0070, 0x1641, 0x0078,
-+ 0x163d, 0x2079, 0x5100, 0x7817, 0x0018, 0x2061, 0x5140, 0x606f,
-+ 0x0001, 0x6073, 0x0000, 0x6093, 0x000f, 0x78cc, 0xa085, 0x0002,
-+ 0x78ce, 0x6808, 0xa084, 0xfffd, 0x680a, 0x681b, 0x0048, 0x2091,
-+ 0x8001, 0x007c, 0x78cc, 0xa084, 0xfffd, 0x78ce, 0xa084, 0x0001,
-+ 0x00c0, 0x1664, 0x1078, 0x1a2b, 0x71c4, 0x71c6, 0x794a, 0x007c,
-+ 0x1078, 0x1b53, 0x00c0, 0x129c, 0x75d8, 0x74dc, 0x75da, 0x74de,
-+ 0x0078, 0x1675, 0x2029, 0x0000, 0x2520, 0x71c4, 0x73c8, 0x72cc,
-+ 0x71c6, 0x73ca, 0x72ce, 0x2079, 0x5100, 0x2091, 0x8000, 0x1078,
-+ 0x192e, 0x2091, 0x8001, 0x0040, 0x172c, 0x20a9, 0x0005, 0x20a1,
-+ 0x5118, 0x2091, 0x8000, 0x41a1, 0x2091, 0x8001, 0x2009, 0x0020,
-+ 0x1078, 0x1929, 0x0040, 0x1698, 0x1078, 0x1948, 0x0078, 0x172c,
-+ 0x6004, 0xa084, 0xff00, 0x8007, 0x8009, 0x0040, 0x16fb, 0x0c7e,
-+ 0x2c68, 0x2091, 0x8000, 0x1078, 0x192e, 0x2091, 0x8001, 0x0040,
-+ 0x16cc, 0x2c00, 0x689e, 0x8109, 0x00c0, 0x16a0, 0x609f, 0x0000,
-+ 0x0c7f, 0x0c7e, 0x7218, 0x731c, 0x7420, 0x7524, 0x2c68, 0x689c,
-+ 0xa065, 0x0040, 0x16fa, 0x2009, 0x0020, 0x1078, 0x1929, 0x00c0,
-+ 0x16e3, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0002, 0x00c0, 0x16cc,
-+ 0x2d00, 0x6002, 0x0078, 0x16b2, 0x0c7f, 0x0c7e, 0x609c, 0x2060,
-+ 0x1078, 0x19b3, 0x0c7f, 0x609f, 0x0000, 0x1078, 0x1730, 0x2009,
-+ 0x000c, 0x6008, 0xa085, 0x0200, 0x600a, 0x1078, 0x1924, 0x1078,
-+ 0x1948, 0x0078, 0x172c, 0x0c7f, 0x0c7e, 0x609c, 0x2060, 0x1078,
-+ 0x19b3, 0x0c7f, 0x609f, 0x0000, 0x1078, 0x1730, 0x2009, 0x000c,
-+ 0x6007, 0x0103, 0x601b, 0x0003, 0x1078, 0x1924, 0x1078, 0x1948,
-+ 0x0078, 0x172c, 0x0c7f, 0x74c4, 0x73c8, 0x72cc, 0x6014, 0x2091,
-+ 0x8000, 0x7817, 0x0012, 0x0e7e, 0x2071, 0x5140, 0x706f, 0x0005,
-+ 0x7073, 0x0000, 0x7376, 0x727a, 0x747e, 0x7082, 0x7087, 0x0000,
-+ 0x2c00, 0x708a, 0x708f, 0x0000, 0xa02e, 0x2530, 0x611c, 0x61a2,
-+ 0xa184, 0x0060, 0x0040, 0x171e, 0x1078, 0x47c2, 0x0e7f, 0x6596,
-+ 0x65a6, 0x669a, 0x66aa, 0x60af, 0x0000, 0x60b3, 0x0000, 0x1078,
-+ 0x21d2, 0x2091, 0x8001, 0x007c, 0x70c3, 0x4005, 0x0078, 0x1287,
-+ 0x20a9, 0x0005, 0x2099, 0x5118, 0x2091, 0x8000, 0x530a, 0x2091,
-+ 0x8001, 0x2100, 0xa210, 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9,
-+ 0x0000, 0x007c, 0x71c4, 0x70c7, 0x0000, 0x7906, 0x0078, 0x1284,
-+ 0x71c4, 0x71c6, 0x2168, 0x0078, 0x174f, 0x2069, 0x1000, 0x690c,
-+ 0xa016, 0x2d04, 0xa210, 0x8d68, 0x8109, 0x00c0, 0x1751, 0xa285,
-+ 0x0000, 0x00c0, 0x175f, 0x70c3, 0x4000, 0x0078, 0x1761, 0x70c3,
-+ 0x4003, 0x70ca, 0x0078, 0x1287, 0x2011, 0x5167, 0x220c, 0x70c4,
-+ 0x8003, 0x0048, 0x1771, 0x1078, 0x3b7f, 0xa184, 0x7fff, 0x0078,
-+ 0x1775, 0x1078, 0x3b72, 0xa185, 0x8000, 0x2012, 0x0078, 0x1283,
-+ 0x71c4, 0x1078, 0x3b69, 0x6100, 0x2001, 0x5167, 0x2004, 0xa084,
-+ 0x8000, 0xa10d, 0x6204, 0x6308, 0x0078, 0x1281, 0x79e4, 0x0078,
-+ 0x1283, 0x71c4, 0x71c6, 0x2198, 0x20a1, 0x0042, 0x20a9, 0x0004,
-+ 0x53a3, 0x21a0, 0x2099, 0x0042, 0x20a9, 0x0004, 0x53a3, 0x0078,
-+ 0x1284, 0x70c4, 0x2068, 0x2079, 0x5100, 0x2091, 0x8000, 0x1078,
-+ 0x192e, 0x2091, 0x8001, 0x0040, 0x1825, 0x6007, 0x0001, 0x600b,
-+ 0x0000, 0x602b, 0x0000, 0x601b, 0x0006, 0x6a10, 0xa28c, 0x000f,
-+ 0xa284, 0x00f0, 0x8003, 0x8003, 0x8003, 0x8003, 0xa105, 0x6016,
-+ 0xa284, 0x0800, 0x0040, 0x17c0, 0x601b, 0x000a, 0x0078, 0x17c6,
-+ 0xa284, 0x1000, 0x0040, 0x17c6, 0x601b, 0x000c, 0xa284, 0x0300,
-+ 0x0040, 0x17cf, 0x602b, 0x0001, 0x8004, 0x8004, 0x8004, 0xa085,
-+ 0x0001, 0x601e, 0x6023, 0x0000, 0x6027, 0x0000, 0xa284, 0x0400,
-+ 0x0040, 0x17dc, 0x602b, 0x0000, 0x20a9, 0x0006, 0xac80, 0x000b,
-+ 0x20a0, 0xad80, 0x0005, 0x2098, 0x53a3, 0xa284, 0x0300, 0x00c0,
-+ 0x17f1, 0x6046, 0x604a, 0x604e, 0x6052, 0x6096, 0x609a, 0x0078,
-+ 0x17fb, 0x6800, 0x6046, 0x6804, 0x604a, 0x6e08, 0x664e, 0x6d0c,
-+ 0x6552, 0x6596, 0x669a, 0x6014, 0x2091, 0x8000, 0x7817, 0x0042,
-+ 0x2c08, 0x2061, 0x5140, 0x606f, 0x0005, 0x6073, 0x0000, 0x6077,
-+ 0x0000, 0x607b, 0x0000, 0x607f, 0x0000, 0x6082, 0x618a, 0xa284,
-+ 0x0400, 0x608e, 0x2091, 0x8001, 0x0e7e, 0x2071, 0x0020, 0x7007,
-+ 0x000a, 0x7007, 0x0002, 0x7003, 0x0000, 0x0e7f, 0x2091, 0x8000,
-+ 0x1078, 0x21d2, 0x2091, 0x8001, 0x007c, 0x70c3, 0x4005, 0x0078,
-+ 0x1287, 0x0c7e, 0x0d7e, 0x0e7e, 0x0f7e, 0x2091, 0x8000, 0x2071,
-+ 0x5140, 0x2079, 0x0100, 0x2061, 0x0010, 0x70a0, 0xa06d, 0x0040,
-+ 0x18b1, 0x6a04, 0xa294, 0x00ff, 0xa286, 0x0007, 0x0040, 0x1844,
-+ 0xa286, 0x000f, 0x00c0, 0x18b1, 0x691c, 0xa184, 0x0080, 0x00c0,
-+ 0x18b1, 0x6824, 0xa18c, 0xff00, 0xa085, 0x0019, 0x6826, 0x71b0,
-+ 0x81ff, 0x0040, 0x1867, 0x0d7e, 0x2069, 0x0020, 0x6807, 0x0010,
-+ 0x6908, 0x6808, 0xa106, 0x00c0, 0x1858, 0x690c, 0x680c, 0xa106,
-+ 0x00c0, 0x185d, 0xa184, 0x00ff, 0x00c0, 0x185d, 0x0d7f, 0x78b8,
-+ 0xa084, 0x801f, 0x00c0, 0x1867, 0x7848, 0xa085, 0x000c, 0x784a,
-+ 0x71b0, 0x81ff, 0x0040, 0x188a, 0x70b3, 0x0000, 0x0d7e, 0x2069,
-+ 0x0020, 0x6807, 0x0018, 0x6804, 0xa084, 0x0008, 0x00c0, 0x187b,
-+ 0x6807, 0x0008, 0x6804, 0xa084, 0x0008, 0x00c0, 0x1882, 0x6807,
-+ 0x0002, 0x0d7f, 0x61c4, 0x62c8, 0x63cc, 0x61c6, 0x62ca, 0x63ce,
-+ 0x0e7e, 0x2071, 0x5100, 0x7266, 0x736a, 0xae80, 0x0019, 0x0e7f,
-+ 0x7848, 0xa084, 0x000c, 0x00c0, 0x1898, 0x1078, 0x46db, 0x78a3,
-+ 0x0000, 0x7858, 0xa084, 0xedff, 0x785a, 0x70b4, 0xa080, 0x00df,
-+ 0x781a, 0x0f7f, 0x0e7f, 0x0d7f, 0x0c7f, 0x2091, 0x8001, 0x0078,
-+ 0x1284, 0x0f7f, 0x0e7f, 0x0d7f, 0x0c7f, 0x2091, 0x8001, 0x2001,
-+ 0x4005, 0x0078, 0x1286, 0x7980, 0x71c6, 0x71c4, 0xa182, 0x0003,
-+ 0x00c8, 0x127c, 0x7982, 0x0078, 0x1284, 0x7980, 0x71c6, 0x0078,
-+ 0x1284, 0x7974, 0x71c6, 0x71c4, 0x7976, 0x7978, 0x71ca, 0x71c8,
-+ 0x797a, 0x797c, 0x71ce, 0x71cc, 0x797e, 0x0078, 0x1284, 0x7974,
-+ 0x71c6, 0x7978, 0x71ca, 0x797c, 0x71ce, 0x0078, 0x1284, 0x7900,
-+ 0x71c6, 0x71c4, 0x7902, 0x2001, 0x04fd, 0x2004, 0xa082, 0x0005,
-+ 0x0048, 0x18ee, 0x0038, 0x18f0, 0x0078, 0x18fa, 0x00a8, 0x18fa,
-+ 0xa18c, 0x0001, 0x00c0, 0x18f8, 0x20b9, 0x2222, 0x0078, 0x18fa,
-+ 0x20b9, 0x1212, 0x0078, 0x1284, 0x7900, 0x71c6, 0x0078, 0x1284,
-+ 0x2009, 0x5174, 0x2104, 0x70c6, 0x70c4, 0x200a, 0x0078, 0x1284,
-+ 0x2009, 0x5174, 0x2104, 0x70c6, 0x0078, 0x1284, 0x71c4, 0x8107,
-+ 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa0e8, 0x5380, 0x6a14,
-+ 0xd2b4, 0x0040, 0x191f, 0x2011, 0x0001, 0x0078, 0x1921, 0x2011,
-+ 0x0000, 0x6b0c, 0x0078, 0x1281, 0xac80, 0x0001, 0x1078, 0x1b0f,
-+ 0x007c, 0xac80, 0x0001, 0x1078, 0x1aaf, 0x007c, 0x7850, 0xa065,
-+ 0x0040, 0x1936, 0x2c04, 0x7852, 0x2063, 0x0000, 0x007c, 0x0f7e,
-+ 0x2079, 0x5100, 0x7850, 0xa06d, 0x0040, 0x1946, 0x2d04, 0x7852,
-+ 0x6803, 0x0000, 0x6807, 0x0000, 0x680b, 0x0000, 0x0f7f, 0x007c,
-+ 0x2091, 0x8000, 0x0f7e, 0x2079, 0x5100, 0x7850, 0x2062, 0x2c00,
-+ 0xa005, 0x00c0, 0x1955, 0x1078, 0x23eb, 0x7852, 0x0f7f, 0x2091,
-+ 0x8001, 0x007c, 0x0f7e, 0x2079, 0x5100, 0x7850, 0x206a, 0x2d00,
-+ 0x7852, 0x0f7f, 0x007c, 0x2011, 0x7800, 0x7a52, 0x7bec, 0x8319,
-+ 0x0040, 0x1970, 0xa280, 0x0031, 0x2012, 0x2010, 0x0078, 0x1967,
-+ 0x2013, 0x0000, 0x007c, 0xa784, 0x0f00, 0x800b, 0xa784, 0x001f,
-+ 0x8003, 0x8003, 0x8003, 0x8003, 0xa105, 0xa0e8, 0x5400, 0x007c,
-+ 0x1078, 0x1973, 0x2900, 0x682a, 0x2a00, 0x682e, 0x6808, 0xa084,
-+ 0xffef, 0xa80d, 0x690a, 0x2009, 0x5152, 0x210c, 0x6804, 0xa005,
-+ 0x0040, 0x19b2, 0xa116, 0x00c0, 0x199d, 0x2060, 0x6000, 0x6806,
-+ 0x017e, 0x200b, 0x0000, 0x0078, 0x19a0, 0x2009, 0x0000, 0x017e,
-+ 0x6804, 0xa065, 0x0040, 0x19af, 0x6000, 0x6806, 0x1078, 0x19c0,
-+ 0x1078, 0x1c5f, 0x6810, 0x8001, 0x6812, 0x00c0, 0x19a0, 0x017f,
-+ 0x6902, 0x6906, 0x007c, 0xa065, 0x0040, 0x19bf, 0x609c, 0x609f,
-+ 0x0000, 0x2008, 0x1078, 0x1948, 0x2100, 0x0078, 0x19b3, 0x007c,
-+ 0x6007, 0x0103, 0x608f, 0x0000, 0x20a9, 0x001c, 0xac80, 0x0005,
-+ 0x20a0, 0x2001, 0x0000, 0x40a4, 0x6828, 0x601a, 0x682c, 0x6022,
-+ 0x007c, 0x0e7e, 0x2071, 0x5140, 0x704c, 0xa08c, 0x0200, 0x00c0,
-+ 0x19df, 0xa088, 0x5180, 0x2d0a, 0x8000, 0x704e, 0xa006, 0x0e7f,
-+ 0x007c, 0x1078, 0x1973, 0x2091, 0x8000, 0x6804, 0x781e, 0xa065,
-+ 0x0040, 0x1a2a, 0x0078, 0x19f2, 0x2c00, 0x781e, 0x6000, 0xa065,
-+ 0x0040, 0x1a2a, 0x600c, 0xa306, 0x00c0, 0x19ec, 0x6010, 0xa206,
-+ 0x00c0, 0x19ec, 0x2c28, 0x2001, 0x5152, 0x2004, 0xac06, 0x00c0,
-+ 0x1a03, 0x0078, 0x1a28, 0x6804, 0xac06, 0x00c0, 0x1a10, 0x6000,
-+ 0xa065, 0x6806, 0x00c0, 0x1a1a, 0x6803, 0x0000, 0x0078, 0x1a1a,
-+ 0x6400, 0x781c, 0x2060, 0x6402, 0xa486, 0x0000, 0x00c0, 0x1a1a,
-+ 0x2c00, 0x6802, 0x2560, 0x1078, 0x19c0, 0x601b, 0x0005, 0x6023,
-+ 0x0020, 0x1078, 0x1c5f, 0x6810, 0x8001, 0x1050, 0x23eb, 0x6812,
-+ 0xa085, 0xffff, 0x007c, 0x2039, 0x0000, 0x2041, 0x0021, 0x2049,
-+ 0x0004, 0x2051, 0x0008, 0x2091, 0x8000, 0x1078, 0x1980, 0x8738,
-+ 0xa784, 0x001f, 0x00c0, 0x1a35, 0xa7bc, 0xff00, 0x873f, 0x8738,
-+ 0x873f, 0xa784, 0x0f00, 0x00c0, 0x1a35, 0x2091, 0x8001, 0x007c,
-+ 0x2061, 0x0000, 0x6018, 0xa084, 0x0001, 0x00c0, 0x1a59, 0x2091,
-+ 0x8000, 0x78e0, 0x78e3, 0x0000, 0x2091, 0x8001, 0xa005, 0x00c0,
-+ 0x1a5a, 0x007c, 0xa08c, 0xfff0, 0x0040, 0x1a60, 0x1078, 0x23eb,
-+ 0x0079, 0x1a62, 0x1a72, 0x1a75, 0x1a7b, 0x1a7f, 0x1a73, 0x1a83,
-+ 0x1a89, 0x1a73, 0x1a73, 0x1c29, 0x1c4d, 0x1c51, 0x1a73, 0x1a73,
-+ 0x1a73, 0x1a73, 0x007c, 0x1078, 0x23eb, 0x1078, 0x1a2b, 0x2001,
-+ 0x8001, 0x0078, 0x1c57, 0x2001, 0x8003, 0x0078, 0x1c57, 0x2001,
-+ 0x8004, 0x0078, 0x1c57, 0x1078, 0x1a2b, 0x2001, 0x8006, 0x0078,
-+ 0x1c57, 0x2001, 0x8007, 0x0078, 0x1c57, 0x2030, 0x2138, 0xa782,
-+ 0x0021, 0x0048, 0x1a95, 0x2009, 0x0020, 0x2600, 0x1078, 0x1aaf,
-+ 0x00c0, 0x1aae, 0xa7ba, 0x0020, 0x0048, 0x1aad, 0x0040, 0x1aad,
-+ 0x2708, 0xa6b0, 0x0020, 0xa290, 0x0040, 0xa399, 0x0000, 0xa4a1,
-+ 0x0000, 0xa5a9, 0x0000, 0x0078, 0x1a8f, 0xa006, 0x007c, 0x81ff,
-+ 0x0040, 0x1aea, 0x2099, 0x0030, 0x20a0, 0x700c, 0xa084, 0x00ff,
-+ 0x0040, 0x1ac1, 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0,
-+ 0x1abc, 0x21a8, 0x7017, 0x0000, 0x810b, 0x7112, 0x721a, 0x731e,
-+ 0x7422, 0x7526, 0x780c, 0xa085, 0x0001, 0x7002, 0x7007, 0x0001,
-+ 0x2001, 0x04fd, 0x2004, 0xa082, 0x0005, 0x00c8, 0x1ade, 0x2009,
-+ 0x0022, 0x2104, 0xa084, 0x4000, 0x00c0, 0x1ad0, 0x7008, 0x800b,
-+ 0x00c8, 0x1ad0, 0x7007, 0x0002, 0xa08c, 0x01e0, 0x00c0, 0x1aea,
-+ 0x53a5, 0xa006, 0x7003, 0x0000, 0x007c, 0x2030, 0x2138, 0xa782,
-+ 0x0021, 0x0048, 0x1af5, 0x2009, 0x0020, 0x2600, 0x1078, 0x1b0f,
-+ 0x00c0, 0x1b0e, 0xa7ba, 0x0020, 0x0048, 0x1b0d, 0x0040, 0x1b0d,
-+ 0x2708, 0xa6b0, 0x0020, 0xa290, 0x0040, 0xa399, 0x0000, 0xa4a1,
-+ 0x0000, 0xa5a9, 0x0000, 0x0078, 0x1aef, 0xa006, 0x007c, 0x81ff,
-+ 0x0040, 0x1b50, 0x2098, 0x20a1, 0x0030, 0x700c, 0xa084, 0x00ff,
-+ 0x0040, 0x1b21, 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0,
-+ 0x1b1c, 0x21a8, 0x7017, 0x0000, 0x810b, 0x7112, 0x721a, 0x731e,
-+ 0x7422, 0x7526, 0x780c, 0xa085, 0x0000, 0x7002, 0x53a6, 0x7007,
-+ 0x0001, 0x2001, 0x04fd, 0x2004, 0xa082, 0x0005, 0x00c8, 0x1b3f,
-+ 0x2009, 0x0022, 0x2104, 0xa084, 0x4000, 0x00c0, 0x1b31, 0x7010,
-+ 0xa084, 0xf000, 0x0040, 0x1b48, 0x7007, 0x0008, 0x0078, 0x1b4c,
-+ 0x7108, 0x8103, 0x00c8, 0x1b31, 0x7007, 0x0002, 0xa184, 0x01e0,
-+ 0x7003, 0x0000, 0x007c, 0x2001, 0x04fd, 0x2004, 0xa082, 0x0004,
-+ 0x00c8, 0x1b5c, 0x0078, 0x1b5f, 0xa006, 0x0078, 0x1b61, 0xa085,
-+ 0x0001, 0x007c, 0x0e7e, 0x2071, 0x5100, 0x2d08, 0x7058, 0x6802,
-+ 0xa005, 0x00c0, 0x1b6c, 0x715e, 0x715a, 0x0e7f, 0x007c, 0x2c08,
-+ 0x7858, 0x6002, 0xa005, 0x00c0, 0x1b76, 0x795e, 0x795a, 0x007c,
-+ 0x2091, 0x8000, 0x6003, 0x0000, 0x2c08, 0x785c, 0xa065, 0x00c0,
-+ 0x1b84, 0x795a, 0x0078, 0x1b85, 0x6102, 0x795e, 0x2091, 0x8001,
-+ 0x1078, 0x21ef, 0x007c, 0x0e7e, 0x2071, 0x5100, 0x7058, 0xa06d,
-+ 0x0040, 0x1b99, 0x6800, 0x705a, 0xa005, 0x00c0, 0x1b98, 0x705e,
-+ 0x8dff, 0x0e7f, 0x007c, 0x0d7e, 0x0c7e, 0x0f7e, 0x2079, 0x5100,
-+ 0xaf80, 0x0016, 0x2060, 0x6000, 0xa005, 0x0040, 0x1bc9, 0x2068,
-+ 0x6814, 0xa306, 0x00c0, 0x1bb2, 0x6828, 0xa084, 0x00ff, 0xa406,
-+ 0x0040, 0x1bb5, 0x2d60, 0x0078, 0x1ba3, 0x6800, 0xa005, 0x6002,
-+ 0x00c0, 0x1bc1, 0xaf80, 0x0016, 0xac06, 0x0040, 0x1bc0, 0x2c00,
-+ 0x785e, 0x0d7e, 0x689c, 0xa005, 0x0040, 0x1bc8, 0x1078, 0x19b3,
-+ 0x007f, 0x0f7f, 0x0c7f, 0x0d7f, 0xa005, 0x007c, 0x0d7e, 0x0c7e,
-+ 0x0f7e, 0x2079, 0x5100, 0xaf80, 0x0016, 0x2060, 0x6000, 0xa005,
-+ 0x0040, 0x1bf8, 0x2068, 0x6814, 0xa084, 0x00ff, 0xa306, 0x0040,
-+ 0x1be4, 0x2d60, 0x0078, 0x1bd6, 0x6800, 0xa005, 0x6002, 0x00c0,
-+ 0x1bf0, 0xaf80, 0x0016, 0xac06, 0x0040, 0x1bef, 0x2c00, 0x785e,
-+ 0x0d7e, 0x689c, 0xa005, 0x0040, 0x1bf7, 0x1078, 0x19b3, 0x007f,
-+ 0x0f7f, 0x0c7f, 0x0d7f, 0xa005, 0x007c, 0x0d7e, 0x0c7e, 0x0f7e,
-+ 0x2079, 0x5100, 0xaf80, 0x0016, 0x2060, 0x6000, 0xa06d, 0x0040,
-+ 0x1c24, 0x6814, 0xa306, 0x0040, 0x1c10, 0x2d60, 0x0078, 0x1c05,
-+ 0x6800, 0xa005, 0x6002, 0x00c0, 0x1c1c, 0xaf80, 0x0016, 0xac06,
-+ 0x0040, 0x1c1b, 0x2c00, 0x785e, 0x0d7e, 0x689c, 0xa005, 0x0040,
-+ 0x1c23, 0x1078, 0x19b3, 0x007f, 0x0f7f, 0x0c7f, 0x0d7f, 0xa005,
-+ 0x007c, 0x2091, 0x8000, 0x2069, 0x5140, 0x6800, 0xa086, 0x0000,
-+ 0x0040, 0x1c37, 0x2091, 0x8001, 0x78e3, 0x0009, 0x007c, 0x6880,
-+ 0xa0bc, 0xff00, 0x2041, 0x0021, 0x2049, 0x0004, 0x2051, 0x0010,
-+ 0x1078, 0x1980, 0x8738, 0xa784, 0x001f, 0x00c0, 0x1c40, 0x2091,
-+ 0x8001, 0x2001, 0x800a, 0x0078, 0x1c57, 0x2001, 0x800c, 0x0078,
-+ 0x1c57, 0x1078, 0x1a2b, 0x2001, 0x800d, 0x0078, 0x1c57, 0x70c2,
-+ 0x2061, 0x0000, 0x601b, 0x0001, 0x2091, 0x4080, 0x007c, 0x6004,
-+ 0x2c08, 0x2063, 0x0000, 0x7884, 0x8000, 0x7886, 0x7888, 0xa005,
-+ 0x798a, 0x0040, 0x1c6e, 0x2c02, 0x0078, 0x1c6f, 0x798e, 0x007c,
-+ 0x6807, 0x0103, 0x0c7e, 0x2061, 0x5100, 0x2d08, 0x206b, 0x0000,
-+ 0x6084, 0x8000, 0x6086, 0x6088, 0xa005, 0x618a, 0x0040, 0x1c83,
-+ 0x2d02, 0x0078, 0x1c84, 0x618e, 0x0c7f, 0x007c, 0x1078, 0x1c97,
-+ 0x0040, 0x1c96, 0x0c7e, 0x609c, 0xa065, 0x0040, 0x1c91, 0x1078,
-+ 0x19b3, 0x0c7f, 0x609f, 0x0000, 0x1078, 0x1948, 0x007c, 0x788c,
-+ 0xa065, 0x0040, 0x1ca9, 0x2091, 0x8000, 0x7884, 0x8001, 0x7886,
-+ 0x2c04, 0x788e, 0xa005, 0x00c0, 0x1ca7, 0x788a, 0x8000, 0x2091,
-+ 0x8001, 0x007c, 0x20a9, 0x0010, 0xa006, 0x8004, 0x8086, 0x818e,
-+ 0x00c8, 0x1cb3, 0xa200, 0x0070, 0x1cb7, 0x0078, 0x1cae, 0x8086,
-+ 0x818e, 0x007c, 0x157e, 0x20a9, 0x0010, 0xa005, 0x0040, 0x1cdd,
-+ 0xa11a, 0x00c8, 0x1cdd, 0x8213, 0x818d, 0x0048, 0x1cce, 0xa11a,
-+ 0x00c8, 0x1ccf, 0x0070, 0x1cd5, 0x0078, 0x1cc3, 0xa11a, 0x2308,
-+ 0x8210, 0x0070, 0x1cd5, 0x0078, 0x1cc3, 0x007e, 0x3200, 0xa084,
-+ 0xf7ff, 0x2080, 0x007f, 0x157f, 0x007c, 0x007e, 0x3200, 0xa085,
-+ 0x0800, 0x0078, 0x1cd9, 0x7994, 0x70d0, 0xa106, 0x0040, 0x1d51,
-+ 0x2091, 0x8000, 0x2071, 0x0020, 0x7004, 0xa005, 0x00c0, 0x1d51,
-+ 0x7008, 0x7208, 0xa206, 0x00c0, 0x1d51, 0xa286, 0x0008, 0x00c0,
-+ 0x1d51, 0x2071, 0x0010, 0x1078, 0x192e, 0x0040, 0x1d51, 0x7a9c,
-+ 0x7b98, 0x7ca4, 0x7da0, 0xa184, 0xff00, 0x0040, 0x1d1f, 0x2031,
-+ 0x0000, 0x810b, 0x86b5, 0x810b, 0x86b5, 0x810b, 0x86b5, 0x810b,
-+ 0x86b5, 0x810b, 0x86b5, 0x810b, 0x86b5, 0x2100, 0xa210, 0x2600,
-+ 0xa319, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x0078, 0x1d29, 0x8107,
-+ 0x8004, 0x8004, 0xa210, 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9,
-+ 0x0000, 0x2009, 0x0020, 0x1078, 0x1929, 0x2091, 0x8001, 0x0040,
-+ 0x1d48, 0x1078, 0x1948, 0x78a8, 0x8000, 0x78aa, 0xa086, 0x0002,
-+ 0x00c0, 0x1d51, 0x2091, 0x8000, 0x78e3, 0x0002, 0x78ab, 0x0000,
-+ 0x78cc, 0xa085, 0x0003, 0x78ce, 0x2091, 0x8001, 0x0078, 0x1d51,
-+ 0x78ab, 0x0000, 0x1078, 0x20ac, 0x6004, 0xa084, 0x000f, 0x0079,
-+ 0x1d56, 0x2071, 0x0010, 0x2091, 0x8001, 0x007c, 0x1d66, 0x1d88,
-+ 0x1dae, 0x1d66, 0x1dcb, 0x1d75, 0x1f2c, 0x1f47, 0x1d66, 0x1d82,
-+ 0x1da8, 0x1e13, 0x1e82, 0x1ed2, 0x1ee4, 0x1f43, 0x2039, 0x0400,
-+ 0x78dc, 0xa705, 0x78de, 0x6008, 0xa705, 0x600a, 0x1078, 0x1fc7,
-+ 0x609c, 0x78da, 0x1078, 0x2094, 0x007c, 0x78dc, 0xa084, 0x0100,
-+ 0x0040, 0x1d7c, 0x0078, 0x1d66, 0x601c, 0xa085, 0x0080, 0x601e,
-+ 0x0078, 0x1d8f, 0x1078, 0x1b53, 0x00c0, 0x1d66, 0x1078, 0x20c6,
-+ 0x78dc, 0xa084, 0x0100, 0x0040, 0x1d8f, 0x0078, 0x1d66, 0x78df,
-+ 0x0000, 0x6004, 0x8007, 0xa084, 0x00ff, 0x78d2, 0x8001, 0x609f,
-+ 0x0000, 0x0040, 0x1da5, 0x1078, 0x1fc7, 0x0040, 0x1da5, 0x78dc,
-+ 0xa085, 0x0100, 0x78de, 0x0078, 0x1da7, 0x1078, 0x1feb, 0x007c,
-+ 0x1078, 0x1b53, 0x00c0, 0x1d66, 0x1078, 0x20c2, 0x78dc, 0xa08c,
-+ 0x0e00, 0x00c0, 0x1db7, 0xa084, 0x0100, 0x00c0, 0x1db9, 0x0078,
-+ 0x1d66, 0x1078, 0x1fc7, 0x00c0, 0x1dca, 0x6104, 0xa18c, 0x00ff,
-+ 0xa186, 0x0007, 0x0040, 0x1f84, 0xa186, 0x000f, 0x0040, 0x1f84,
-+ 0x1078, 0x1feb, 0x007c, 0x78dc, 0xa084, 0x0100, 0x0040, 0x1dd2,
-+ 0x0078, 0x1d66, 0x78df, 0x0000, 0x6714, 0x2011, 0x0001, 0x20a9,
-+ 0x0001, 0x6018, 0xa084, 0x00ff, 0xa005, 0x0040, 0x1df5, 0x2011,
-+ 0x0001, 0xa7bc, 0xff00, 0x20a9, 0x0020, 0xa08e, 0x0001, 0x0040,
-+ 0x1df5, 0x2039, 0x0000, 0x2011, 0x0002, 0x20a9, 0x0100, 0xa08e,
-+ 0x0002, 0x0040, 0x1df5, 0x0078, 0x1e10, 0x1078, 0x1973, 0x2091,
-+ 0x8000, 0x682b, 0x0000, 0x682f, 0x0000, 0x6808, 0xa084, 0xffde,
-+ 0x680a, 0xade8, 0x0010, 0x2091, 0x8001, 0x0070, 0x1e09, 0x0078,
-+ 0x1df7, 0x8211, 0x0040, 0x1e10, 0x20a9, 0x0100, 0x0078, 0x1df7,
-+ 0x1078, 0x1948, 0x007c, 0x2001, 0x5167, 0x2004, 0xa084, 0x8000,
-+ 0x0040, 0x1fac, 0x6114, 0x1078, 0x20e3, 0x6900, 0xa184, 0x0001,
-+ 0x0040, 0x1e34, 0x6028, 0xa084, 0x00ff, 0x00c0, 0x1fa4, 0x6800,
-+ 0xa084, 0x0001, 0x0040, 0x1fac, 0x6803, 0x0000, 0x680b, 0x0000,
-+ 0x6807, 0x0000, 0x0078, 0x1fb4, 0x2011, 0x0001, 0x6020, 0xd0f4,
-+ 0x0040, 0x1e3c, 0xa295, 0x0002, 0xd0c4, 0x0040, 0x1e41, 0xa295,
-+ 0x0008, 0xd0cc, 0x0040, 0x1e46, 0xa295, 0x0400, 0x601c, 0xa084,
-+ 0x0002, 0x0040, 0x1e4d, 0xa295, 0x0004, 0x602c, 0xa08c, 0x00ff,
-+ 0xa182, 0x0002, 0x0048, 0x1fb0, 0xa182, 0x001b, 0x00c8, 0x1fb0,
-+ 0x0040, 0x1fb0, 0x690e, 0x602c, 0x8007, 0xa08c, 0x00ff, 0xa182,
-+ 0x0002, 0x0048, 0x1fb0, 0xa182, 0x001b, 0x00c8, 0x1fb0, 0x0040,
-+ 0x1fb0, 0x6912, 0x6030, 0xa005, 0x00c0, 0x1e70, 0x2001, 0x001e,
-+ 0x8000, 0x6816, 0x6028, 0xa084, 0x00ff, 0x0040, 0x1fac, 0x6806,
-+ 0x6028, 0x8007, 0xa084, 0x00ff, 0x0040, 0x1fac, 0x680a, 0x6a02,
-+ 0x0078, 0x1fb4, 0x2001, 0x5167, 0x2004, 0xa084, 0x8000, 0x0040,
-+ 0x1fac, 0x6114, 0x1078, 0x20e3, 0x2091, 0x8000, 0x6a04, 0x6b08,
-+ 0x6418, 0xa484, 0x0003, 0x0040, 0x1ea8, 0x6128, 0xa18c, 0x00ff,
-+ 0x8001, 0x00c0, 0x1ea1, 0x2100, 0xa210, 0x0048, 0x1ece, 0x0078,
-+ 0x1ea8, 0x8001, 0x00c0, 0x1ece, 0x2100, 0xa212, 0x0048, 0x1ece,
-+ 0xa484, 0x000c, 0x0040, 0x1ec2, 0x6128, 0x810f, 0xa18c, 0x00ff,
-+ 0xa082, 0x0004, 0x00c0, 0x1eba, 0x2100, 0xa318, 0x0048, 0x1ece,
-+ 0x0078, 0x1ec2, 0xa082, 0x0004, 0x00c0, 0x1ece, 0x2100, 0xa31a,
-+ 0x0048, 0x1ece, 0x6030, 0xa005, 0x0040, 0x1ec8, 0x8000, 0x6816,
-+ 0x6a06, 0x6b0a, 0x2091, 0x8001, 0x0078, 0x1fb4, 0x2091, 0x8001,
-+ 0x0078, 0x1fb0, 0x6114, 0x1078, 0x20e3, 0x2091, 0x8000, 0x6b08,
-+ 0x8318, 0x0048, 0x1ee0, 0x6b0a, 0x2091, 0x8001, 0x0078, 0x1fc3,
-+ 0x2091, 0x8001, 0x0078, 0x1fb0, 0x6024, 0x8007, 0xa084, 0x00ff,
-+ 0x0040, 0x1f02, 0xa086, 0x0080, 0x00c0, 0x1f2a, 0x20a9, 0x0008,
-+ 0x2069, 0x7510, 0x2091, 0x8000, 0x6800, 0xa084, 0xfcff, 0x6802,
-+ 0xade8, 0x0008, 0x0070, 0x1efe, 0x0078, 0x1ef4, 0x2091, 0x8001,
-+ 0x0078, 0x1fb4, 0x6028, 0xa015, 0x0040, 0x1f2a, 0x6114, 0x1078,
-+ 0x20e3, 0x0d7e, 0xade8, 0x0007, 0x2091, 0x8000, 0x6800, 0xa00d,
-+ 0x0040, 0x1f27, 0xa206, 0x0040, 0x1f18, 0x2168, 0x0078, 0x1f0e,
-+ 0x0c7e, 0x2160, 0x6000, 0x6802, 0x1078, 0x1948, 0x0c7f, 0x0d7f,
-+ 0x6808, 0x8000, 0x680a, 0x2091, 0x8001, 0x0078, 0x1fc3, 0x2091,
-+ 0x8001, 0x0d7f, 0x0078, 0x1fac, 0x6114, 0x1078, 0x20e3, 0x6800,
-+ 0xa084, 0x0001, 0x0040, 0x1f9c, 0x2091, 0x8000, 0x6a04, 0x8210,
-+ 0x0048, 0x1f3f, 0x6a06, 0x2091, 0x8001, 0x0078, 0x1fc3, 0x2091,
-+ 0x8001, 0x0078, 0x1fb0, 0x1078, 0x1b53, 0x00c0, 0x1d66, 0x6114,
-+ 0x1078, 0x20e3, 0x60be, 0x60bb, 0x0000, 0x6900, 0xa184, 0x0008,
-+ 0x0040, 0x1f56, 0x6020, 0xa085, 0x0100, 0x6022, 0xa184, 0x0001,
-+ 0x0040, 0x1fac, 0xa184, 0x0100, 0x00c0, 0x1f98, 0xa184, 0x0200,
-+ 0x00c0, 0x1f94, 0x681c, 0xa005, 0x00c0, 0x1fa0, 0x6004, 0xa084,
-+ 0x00ff, 0xa086, 0x000f, 0x00c0, 0x1f6f, 0x1078, 0x20c6, 0x78df,
-+ 0x0000, 0x6004, 0x8007, 0xa084, 0x00ff, 0x78d2, 0x8001, 0x609f,
-+ 0x0000, 0x0040, 0x1f84, 0x1078, 0x1fc7, 0x0040, 0x1f84, 0x78dc,
-+ 0xa085, 0x0100, 0x78de, 0x007c, 0x78d7, 0x0000, 0x78db, 0x0000,
-+ 0x6024, 0xa084, 0xff00, 0x6026, 0x1078, 0x39de, 0x0040, 0x1ce3,
-+ 0x1078, 0x1b78, 0x0078, 0x1ce3, 0x2009, 0x0017, 0x0078, 0x1fb6,
-+ 0x2009, 0x000e, 0x0078, 0x1fb6, 0x2009, 0x0007, 0x0078, 0x1fb6,
-+ 0x2009, 0x0035, 0x0078, 0x1fb6, 0x2009, 0x003e, 0x0078, 0x1fb6,
-+ 0x2009, 0x0004, 0x0078, 0x1fb6, 0x2009, 0x0006, 0x0078, 0x1fb6,
-+ 0x2009, 0x0016, 0x0078, 0x1fb6, 0x2009, 0x0001, 0x6024, 0xa084,
-+ 0xff00, 0xa105, 0x6026, 0x2091, 0x8000, 0x1078, 0x1c5f, 0x2091,
-+ 0x8001, 0x0078, 0x1ce3, 0x1078, 0x1948, 0x0078, 0x1ce3, 0x78d4,
-+ 0xa06d, 0x00c0, 0x1fd2, 0x2c00, 0x78d6, 0x78da, 0x609f, 0x0000,
-+ 0x0078, 0x1fde, 0x2c00, 0x689e, 0x609f, 0x0000, 0x78d6, 0x2d00,
-+ 0x6002, 0x78d8, 0xad06, 0x00c0, 0x1fde, 0x6002, 0x78d0, 0x8001,
-+ 0x78d2, 0x00c0, 0x1fea, 0x78dc, 0xa084, 0xfeff, 0x78de, 0x78d8,
-+ 0x2060, 0xa006, 0x007c, 0xa02e, 0x2530, 0x611c, 0x61a2, 0xa184,
-+ 0xe1ff, 0x601e, 0xa184, 0x0060, 0x0040, 0x1ffa, 0x0e7e, 0x1078,
-+ 0x47c2, 0x0e7f, 0x6596, 0x65a6, 0x669a, 0x66aa, 0x60af, 0x0000,
-+ 0x60b3, 0x0000, 0x6714, 0x1078, 0x1973, 0x2091, 0x8000, 0x60a0,
-+ 0xa084, 0x8000, 0x00c0, 0x2021, 0x6808, 0xa084, 0x0001, 0x0040,
-+ 0x2021, 0x2091, 0x8001, 0x1078, 0x19c0, 0x2091, 0x8000, 0x1078,
-+ 0x1c5f, 0x2091, 0x8001, 0x78d7, 0x0000, 0x78db, 0x0000, 0x0078,
-+ 0x2093, 0x6024, 0xa096, 0x0001, 0x00c0, 0x2028, 0x8000, 0x6026,
-+ 0x6a10, 0x6814, 0x2091, 0x8001, 0xa202, 0x0048, 0x2037, 0x0040,
-+ 0x2037, 0x2039, 0x0200, 0x1078, 0x2094, 0x0078, 0x2093, 0x2c08,
-+ 0x2091, 0x8000, 0x60a0, 0xa084, 0x8000, 0x0040, 0x2064, 0x6800,
-+ 0xa065, 0x0040, 0x2069, 0x6a04, 0x0e7e, 0x2071, 0x5140, 0x7000,
-+ 0xa084, 0x0001, 0x0040, 0x205e, 0x7048, 0xa206, 0x00c0, 0x205e,
-+ 0x6b04, 0x231c, 0x2160, 0x6302, 0x2300, 0xa005, 0x00c0, 0x2059,
-+ 0x6902, 0x2260, 0x6102, 0x0e7f, 0x0078, 0x2070, 0x2160, 0x6202,
-+ 0x6906, 0x0e7f, 0x0078, 0x2070, 0x6800, 0xa065, 0x0040, 0x2069,
-+ 0x6102, 0x6902, 0x00c0, 0x206d, 0x6906, 0x2160, 0x6003, 0x0000,
-+ 0x2160, 0x60a0, 0xa084, 0x8000, 0x0040, 0x207a, 0x6808, 0xa084,
-+ 0xfffc, 0x680a, 0x6810, 0x8000, 0x6812, 0x2091, 0x8001, 0x6808,
-+ 0xa08c, 0x0040, 0x0040, 0x2089, 0xa086, 0x0040, 0x680a, 0x1078,
-+ 0x19d1, 0x2091, 0x8000, 0x1078, 0x21d2, 0x2091, 0x8001, 0x78db,
-+ 0x0000, 0x78d7, 0x0000, 0x007c, 0x6008, 0xa705, 0x600a, 0x2091,
-+ 0x8000, 0x1078, 0x1c5f, 0x2091, 0x8001, 0x78d8, 0xa065, 0x0040,
-+ 0x20a7, 0x609c, 0x78da, 0x609f, 0x0000, 0x0078, 0x2097, 0x78d7,
-+ 0x0000, 0x78db, 0x0000, 0x007c, 0x7990, 0x7894, 0x8000, 0xa10a,
-+ 0x00c8, 0x20b3, 0xa006, 0x7896, 0x70d2, 0x7804, 0xa005, 0x0040,
-+ 0x20c1, 0x8001, 0x7806, 0x00c0, 0x20c1, 0x0068, 0x20c1, 0x2091,
-+ 0x4080, 0x007c, 0x2039, 0x20da, 0x0078, 0x20c8, 0x2039, 0x20e0,
-+ 0x2704, 0xa005, 0x0040, 0x20d9, 0xac00, 0x2068, 0x6b08, 0x6c0c,
-+ 0x6910, 0x6a14, 0x690a, 0x6a0e, 0x6b12, 0x6c16, 0x8738, 0x0078,
-+ 0x20c8, 0x007c, 0x0003, 0x0009, 0x000f, 0x0015, 0x001b, 0x0000,
-+ 0x0015, 0x001b, 0x0000, 0x0c7e, 0x1078, 0x3b69, 0x2c68, 0x0c7f,
-+ 0x007c, 0x0010, 0x215a, 0x0068, 0x215a, 0x2029, 0x0000, 0x78cb,
-+ 0x0000, 0x788c, 0xa065, 0x0040, 0x2153, 0x2009, 0x5174, 0x2104,
-+ 0xa084, 0x0001, 0x0040, 0x2121, 0x6004, 0xa086, 0x0103, 0x00c0,
-+ 0x2121, 0x6018, 0xa005, 0x00c0, 0x2121, 0x6014, 0xa005, 0x00c0,
-+ 0x2121, 0x0d7e, 0x2069, 0x0000, 0x6818, 0xa084, 0x0001, 0x00c0,
-+ 0x2120, 0x600c, 0x70c6, 0x6010, 0x70ca, 0x70c3, 0x8020, 0x681b,
-+ 0x0001, 0x2091, 0x4080, 0x0d7f, 0x1078, 0x1c86, 0x0078, 0x2158,
-+ 0x0d7f, 0x1078, 0x215b, 0x0040, 0x2153, 0x6204, 0xa294, 0x00ff,
-+ 0xa296, 0x0003, 0x0040, 0x2133, 0x6204, 0xa296, 0x0110, 0x00c0,
-+ 0x2141, 0x78cb, 0x0001, 0x6204, 0xa294, 0xff00, 0x8217, 0x8211,
-+ 0x0040, 0x2141, 0x85ff, 0x00c0, 0x2153, 0x8210, 0xa202, 0x00c8,
-+ 0x2153, 0x057e, 0x1078, 0x216a, 0x057f, 0x0040, 0x214e, 0x78e0,
-+ 0xa086, 0x0003, 0x0040, 0x2153, 0x0078, 0x2141, 0x8528, 0x78c8,
-+ 0xa005, 0x0040, 0x20f1, 0x85ff, 0x0040, 0x215a, 0x2091, 0x4080,
-+ 0x78b0, 0x70d6, 0x007c, 0x7bac, 0x79b0, 0x70d4, 0xa102, 0x00c0,
-+ 0x2164, 0x2300, 0xa005, 0x007c, 0x0048, 0x2168, 0xa302, 0x007c,
-+ 0x8002, 0x007c, 0x2001, 0x04fd, 0x2004, 0xa082, 0x0005, 0x00c8,
-+ 0x2184, 0x2091, 0x8000, 0x2071, 0x0020, 0x7004, 0xa005, 0x00c0,
-+ 0x21b9, 0x7008, 0x7208, 0xa206, 0x00c0, 0x21b9, 0xa286, 0x0008,
-+ 0x00c0, 0x21b9, 0x2071, 0x0010, 0x1078, 0x21be, 0x2009, 0x0020,
-+ 0x6004, 0xa086, 0x0103, 0x00c0, 0x2193, 0x6028, 0xa005, 0x00c0,
-+ 0x2193, 0x2009, 0x000c, 0x1078, 0x1924, 0x0040, 0x21ac, 0x78c4,
-+ 0x8000, 0x78c6, 0xa086, 0x0002, 0x00c0, 0x21b9, 0x2091, 0x8000,
-+ 0x78e3, 0x0003, 0x78c7, 0x0000, 0x78cc, 0xa085, 0x0300, 0x78ce,
-+ 0x2091, 0x8001, 0x0078, 0x21b9, 0x78c7, 0x0000, 0x1078, 0x1c86,
-+ 0x79ac, 0x78b0, 0x8000, 0xa10a, 0x00c8, 0x21b7, 0xa006, 0x78b2,
-+ 0xa006, 0x2071, 0x0010, 0x2091, 0x8001, 0x007c, 0x8107, 0x8004,
-+ 0x8004, 0x7ab8, 0x7bb4, 0x7cc0, 0x7dbc, 0xa210, 0xa399, 0x0000,
-+ 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x007c, 0x2009, 0x515b, 0x2091,
-+ 0x8000, 0x200a, 0x0f7e, 0x0e7e, 0x2071, 0x5140, 0x7000, 0xa086,
-+ 0x0000, 0x00c0, 0x21ec, 0x2009, 0x5112, 0x2104, 0xa005, 0x00c0,
-+ 0x21ec, 0x2079, 0x0100, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x21ec,
-+ 0x0018, 0x21ec, 0x781b, 0x004b, 0x0e7f, 0x0f7f, 0x007c, 0x0f7e,
-+ 0x0e7e, 0x2071, 0x5140, 0x2091, 0x8000, 0x7000, 0xa086, 0x0000,
-+ 0x00c0, 0x2205, 0x2079, 0x0100, 0x7830, 0xa084, 0x00c0, 0x00c0,
-+ 0x2205, 0x0018, 0x2205, 0x781b, 0x004d, 0x2091, 0x8001, 0x0e7f,
-+ 0x0f7f, 0x007c, 0x127e, 0x2091, 0x2300, 0x2071, 0x5140, 0x2079,
-+ 0x0100, 0x784b, 0x000f, 0x0098, 0x2218, 0x7838, 0x0078, 0x2211,
-+ 0x20a9, 0x0040, 0x7800, 0xa082, 0x0004, 0x0048, 0x2221, 0x20a9,
-+ 0x0060, 0x789b, 0x0000, 0x78af, 0x0000, 0x78af, 0x0000, 0x0070,
-+ 0x222b, 0x0078, 0x2223, 0x7800, 0xa082, 0x0004, 0x0048, 0x223a,
-+ 0x70b7, 0x0096, 0x2019, 0x4ee7, 0x1078, 0x2276, 0x702f, 0x8001,
-+ 0x0078, 0x2246, 0x70b7, 0x0000, 0x2019, 0x4d5f, 0x1078, 0x2276,
-+ 0x2019, 0x4d9e, 0x1078, 0x2276, 0x702f, 0x8000, 0x7003, 0x0000,
-+ 0x1078, 0x237f, 0x7004, 0xa084, 0x000f, 0x017e, 0x2009, 0x04fd,
-+ 0x210c, 0xa18a, 0x0005, 0x0048, 0x225b, 0x0038, 0x2261, 0xa085,
-+ 0x6280, 0x0078, 0x2263, 0x0028, 0x2261, 0xa085, 0x6280, 0x0078,
-+ 0x2263, 0xa085, 0x62c0, 0x017f, 0x7806, 0x780f, 0xb204, 0x7843,
-+ 0x00d8, 0x7853, 0x0080, 0x780b, 0x0008, 0x7047, 0x0008, 0x7053,
-+ 0x517f, 0x704f, 0x0000, 0x127f, 0x2000, 0x007c, 0x137e, 0x147e,
-+ 0x157e, 0x047e, 0x20a1, 0x012b, 0x2304, 0xa005, 0x789a, 0x0040,
-+ 0x2296, 0x8318, 0x2324, 0x8318, 0x2398, 0x24a8, 0xa484, 0xff00,
-+ 0x0040, 0x228e, 0xa482, 0x0100, 0x20a9, 0x0100, 0x2020, 0x53a6,
-+ 0xa005, 0x00c0, 0x2285, 0x3318, 0x0078, 0x227c, 0x047f, 0x157f,
-+ 0x147f, 0x137f, 0x007c, 0xa18c, 0x000f, 0x2011, 0x0101, 0x2204,
-+ 0xa084, 0xfff0, 0xa105, 0x2012, 0x1078, 0x237f, 0x007c, 0x2011,
-+ 0x0101, 0x20a9, 0x0009, 0x810b, 0x0070, 0x22b0, 0x0078, 0x22ab,
-+ 0xa18c, 0x0e00, 0x2204, 0xa084, 0xf1ff, 0xa105, 0x2012, 0x007c,
-+ 0x2009, 0x0101, 0x20a9, 0x0005, 0x8213, 0x0070, 0x22c1, 0x0078,
-+ 0x22bc, 0xa294, 0x00e0, 0x2104, 0xa084, 0xff1f, 0xa205, 0x200a,
-+ 0x007c, 0x2011, 0x0101, 0x20a9, 0x000c, 0x810b, 0x0070, 0x22d2,
-+ 0x0078, 0x22cd, 0xa18c, 0xf000, 0x2204, 0xa084, 0x0fff, 0xa105,
-+ 0x2012, 0x007c, 0x2011, 0x0102, 0x2204, 0xa084, 0xffcf, 0xa105,
-+ 0x2012, 0x007c, 0x8103, 0x8003, 0xa080, 0x0020, 0x0c7e, 0x2061,
-+ 0x0100, 0x609a, 0x62ac, 0x63ac, 0x0c7f, 0x007c, 0x8103, 0x8003,
-+ 0xa080, 0x0022, 0x0c7e, 0x2061, 0x0100, 0x609a, 0x60a4, 0xa084,
-+ 0xffdf, 0x60ae, 0x0c7f, 0x007c, 0x8103, 0x8003, 0xa080, 0x0022,
-+ 0x0c7e, 0x2061, 0x0100, 0x609a, 0x60a4, 0xa085, 0x0020, 0x60ae,
-+ 0x0c7f, 0x007c, 0x8103, 0x8003, 0xa080, 0x0020, 0x0c7e, 0x2061,
-+ 0x0100, 0x609a, 0x60a4, 0x62ae, 0x2010, 0x60a4, 0x63ae, 0x2018,
-+ 0x0c7f, 0x007c, 0x2091, 0x8000, 0x0c7e, 0x0e7e, 0x6818, 0xa005,
-+ 0x0040, 0x235d, 0x2061, 0x7500, 0x1078, 0x2365, 0x0040, 0x2349,
-+ 0x20a9, 0x0000, 0x2061, 0x7400, 0x0c7e, 0x1078, 0x2365, 0x0040,
-+ 0x2339, 0x0c7f, 0x8c60, 0x0070, 0x2337, 0x0078, 0x232c, 0x0078,
-+ 0x235d, 0x007f, 0xa082, 0x7400, 0x2071, 0x5140, 0x7086, 0x7182,
-+ 0x2001, 0x0004, 0x706e, 0x7093, 0x000f, 0x1078, 0x21cd, 0x0078,
-+ 0x2359, 0x60c0, 0xa005, 0x00c0, 0x235d, 0x2071, 0x5140, 0x7182,
-+ 0x2c00, 0x708a, 0x2001, 0x0006, 0x706e, 0x7093, 0x000f, 0x1078,
-+ 0x21cd, 0x2001, 0x0000, 0x0078, 0x235f, 0x2001, 0x0001, 0x2091,
-+ 0x8001, 0xa005, 0x0e7f, 0x0c7f, 0x007c, 0x2c04, 0xa005, 0x0040,
-+ 0x237c, 0x2060, 0x600c, 0xa306, 0x00c0, 0x2379, 0x6010, 0xa206,
-+ 0x00c0, 0x2379, 0x6014, 0xa106, 0x00c0, 0x2379, 0xa006, 0x0078,
-+ 0x237e, 0x6000, 0x0078, 0x2366, 0xa085, 0x0001, 0x007c, 0x2011,
-+ 0x5141, 0x220c, 0xa18c, 0x000f, 0x2011, 0x013b, 0x2204, 0xa084,
-+ 0x0100, 0x0040, 0x2395, 0x2021, 0xff04, 0x2122, 0x810b, 0x810b,
-+ 0x810b, 0x810b, 0xa18d, 0x0f00, 0x2104, 0x007c, 0x0e7e, 0x68e4,
-+ 0xa08c, 0x0020, 0x0040, 0x23e9, 0xa084, 0x0006, 0x00c0, 0x23e9,
-+ 0x6014, 0x8007, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa0f0,
-+ 0x5380, 0x7004, 0xa084, 0x000a, 0x00c0, 0x23e9, 0x7108, 0xa194,
-+ 0xff00, 0x0040, 0x23e9, 0xa18c, 0x00ff, 0x2001, 0x000c, 0xa106,
-+ 0x0040, 0x23d0, 0x2001, 0x0012, 0xa106, 0x0040, 0x23d4, 0x2001,
-+ 0x0014, 0xa106, 0x0040, 0x23d8, 0x2001, 0x0019, 0xa106, 0x0040,
-+ 0x23dc, 0x2001, 0x0032, 0xa106, 0x0040, 0x23e0, 0x0078, 0x23e4,
-+ 0x2009, 0x0012, 0x0078, 0x23e6, 0x2009, 0x0014, 0x0078, 0x23e6,
-+ 0x2009, 0x0019, 0x0078, 0x23e6, 0x2009, 0x0020, 0x0078, 0x23e6,
-+ 0x2009, 0x003f, 0x0078, 0x23e6, 0x2011, 0x0000, 0x2100, 0xa205,
-+ 0x700a, 0x0e7f, 0x007c, 0x0068, 0x23eb, 0x2091, 0x8000, 0x2071,
-+ 0x0000, 0x007e, 0x7018, 0xa084, 0x0001, 0x00c0, 0x23f2, 0x007f,
-+ 0x2071, 0x0010, 0x70ca, 0x007f, 0x70c6, 0x70c3, 0x8002, 0x70db,
-+ 0x0741, 0x70df, 0x0000, 0x2071, 0x0000, 0x701b, 0x0001, 0x2091,
-+ 0x4080, 0x0078, 0x2409, 0x107e, 0x007e, 0x127e, 0x2091, 0x2300,
-+ 0x7f3c, 0x7e58, 0x7c30, 0x7d38, 0x77c2, 0x74c6, 0x76ca, 0x75ce,
-+ 0xa594, 0x003f, 0xa49c, 0x0003, 0xa484, 0x000f, 0x0079, 0x2420,
-+ 0x2432, 0x2432, 0x2432, 0x276c, 0x393b, 0x2430, 0x2461, 0x246b,
-+ 0x2430, 0x2430, 0x2430, 0x2430, 0x2430, 0x2430, 0x2430, 0x2430,
-+ 0x1078, 0x23eb, 0x8507, 0xa084, 0x001f, 0x0079, 0x2437, 0x2475,
-+ 0x276c, 0x2926, 0x2a23, 0x2a4b, 0x2ced, 0x2f98, 0x2fdb, 0x3026,
-+ 0x30ab, 0x3163, 0x320c, 0x2461, 0x2848, 0x2f6d, 0x2457, 0x3cc8,
-+ 0x3ce8, 0x3eae, 0x3eba, 0x3f8f, 0x2457, 0x2457, 0x4062, 0x4066,
-+ 0x3cc6, 0x2457, 0x3e19, 0x2457, 0x3b8c, 0x246b, 0x2457, 0x1078,
-+ 0x23eb, 0x0018, 0x2410, 0x127f, 0x2091, 0x8001, 0x007f, 0x107f,
-+ 0x007c, 0x2019, 0x4e3b, 0x1078, 0x2276, 0x702f, 0x0001, 0x781b,
-+ 0x004f, 0x0078, 0x2459, 0x2019, 0x4d9e, 0x1078, 0x2276, 0x702f,
-+ 0x8000, 0x781b, 0x00d0, 0x0078, 0x2459, 0x7242, 0x2009, 0x510f,
-+ 0x200b, 0x0000, 0xa584, 0x0001, 0x00c0, 0x3ba0, 0x0040, 0x2492,
-+ 0x1078, 0x23eb, 0x7003, 0x0000, 0x704b, 0x0000, 0x7043, 0x0000,
-+ 0x7037, 0x0000, 0x1078, 0x3912, 0x0018, 0x2410, 0x2009, 0x510f,
-+ 0x200b, 0x0000, 0x7068, 0xa005, 0x00c0, 0x255d, 0x706c, 0xa084,
-+ 0x0007, 0x0079, 0x249b, 0x2594, 0x24a3, 0x24af, 0x24cc, 0x24ee,
-+ 0x253b, 0x2514, 0x24a3, 0x1078, 0x38fa, 0x2009, 0x0048, 0x1078,
-+ 0x2e39, 0x00c0, 0x24ad, 0x7003, 0x0004, 0x0078, 0x2459, 0x1078,
-+ 0x38fa, 0x00c0, 0x24ca, 0x7080, 0x8007, 0x7882, 0x789b, 0x0010,
-+ 0x78ab, 0x000c, 0x789b, 0x0060, 0x78ab, 0x0001, 0x785b, 0x0004,
-+ 0x2009, 0x00e0, 0x1078, 0x2e2d, 0x00c0, 0x24ca, 0x7003, 0x0004,
-+ 0x7093, 0x000f, 0x0078, 0x2459, 0x1078, 0x38fa, 0x00c0, 0x24ec,
-+ 0x7180, 0x8107, 0x7882, 0x789b, 0x0010, 0xa18c, 0x001f, 0xa18d,
-+ 0x00c0, 0x79aa, 0x78ab, 0x0006, 0x789b, 0x0060, 0x78ab, 0x0002,
-+ 0x785b, 0x0004, 0x2009, 0x00e0, 0x1078, 0x2e2d, 0x00c0, 0x24ec,
-+ 0x7003, 0x0004, 0x7093, 0x000f, 0x0078, 0x2459, 0x1078, 0x38fa,
-+ 0x00c0, 0x2512, 0x7180, 0x8107, 0x7882, 0x789b, 0x0010, 0xa18c,
-+ 0x001f, 0xa18d, 0x00c0, 0x79aa, 0x78ab, 0x0020, 0x7184, 0x79aa,
-+ 0x78ab, 0x000d, 0x789b, 0x0060, 0x78ab, 0x0004, 0x785b, 0x0004,
-+ 0x2009, 0x00e0, 0x1078, 0x2e2d, 0x00c0, 0x2512, 0x7003, 0x0004,
-+ 0x7093, 0x000f, 0x0078, 0x2459, 0x1078, 0x38fa, 0x00c0, 0x2539,
-+ 0x7180, 0x8107, 0x7882, 0x789b, 0x0010, 0xa18c, 0x001f, 0xa18d,
-+ 0x00c0, 0x79aa, 0x78ab, 0x0006, 0x789b, 0x0060, 0x78ab, 0x0002,
-+ 0x785b, 0x0004, 0x2009, 0x00e0, 0x1078, 0x2e2d, 0x00c0, 0x2539,
-+ 0x7088, 0x708b, 0x0000, 0x2068, 0x704a, 0x7003, 0x0002, 0x7093,
-+ 0x000f, 0x0078, 0x2459, 0x1078, 0x38fa, 0x00c0, 0x2459, 0x7088,
-+ 0x2068, 0x6f14, 0x1078, 0x37ef, 0x2c50, 0x1078, 0x39ac, 0x789b,
-+ 0x0010, 0x6814, 0xa084, 0x001f, 0xa085, 0x0080, 0x78aa, 0x6e1c,
-+ 0x2041, 0x0001, 0x708c, 0xa084, 0x0400, 0x2001, 0x0004, 0x0040,
-+ 0x255b, 0x2001, 0x0006, 0x0078, 0x267c, 0x1078, 0x38fa, 0x00c0,
-+ 0x2459, 0x789b, 0x0010, 0x7068, 0x2068, 0x6f14, 0x1078, 0x37ef,
-+ 0x2c50, 0x1078, 0x39ac, 0x6008, 0xa085, 0x0010, 0x600a, 0x6824,
-+ 0xa005, 0x0040, 0x257b, 0xa082, 0x0006, 0x0048, 0x2579, 0x0078,
-+ 0x257b, 0x6827, 0x0005, 0x6b14, 0xa39c, 0x001f, 0xa39d, 0x00c0,
-+ 0x7058, 0xa084, 0x8000, 0x0040, 0x2589, 0xa684, 0x0001, 0x0040,
-+ 0x258b, 0xa39c, 0xffbf, 0x7baa, 0x2031, 0x0020, 0x2041, 0x0001,
-+ 0x2001, 0x0003, 0x0078, 0x267c, 0x0018, 0x2410, 0x744c, 0xa485,
-+ 0x0000, 0x0040, 0x25ae, 0xa080, 0x5180, 0x2030, 0x7150, 0x8108,
-+ 0xa12a, 0x0048, 0x25a5, 0x2009, 0x5180, 0x2164, 0x6504, 0x85ff,
-+ 0x00c0, 0x25bf, 0x8421, 0x00c0, 0x259f, 0x7152, 0x7003, 0x0000,
-+ 0x704b, 0x0000, 0x7040, 0xa005, 0x0040, 0x3ba0, 0x0078, 0x2459,
-+ 0x764c, 0xa6b0, 0x5180, 0x7150, 0x2600, 0x0078, 0x25aa, 0x7152,
-+ 0x2568, 0x2558, 0x754a, 0x2c50, 0x6034, 0xa085, 0x0000, 0x00c0,
-+ 0x25bc, 0x6708, 0x773a, 0xa784, 0x033f, 0x0040, 0x25f5, 0xa784,
-+ 0x0021, 0x00c0, 0x25bc, 0xa784, 0x0002, 0x0040, 0x25de, 0xa784,
-+ 0x0004, 0x0040, 0x25bc, 0xa7bc, 0xfffb, 0x670a, 0xa784, 0x0008,
-+ 0x00c0, 0x25bc, 0xa784, 0x0010, 0x00c0, 0x25bc, 0xa784, 0x0200,
-+ 0x00c0, 0x25bc, 0xa784, 0x0100, 0x0040, 0x25f5, 0x6018, 0xa005,
-+ 0x00c0, 0x25bc, 0xa7bc, 0xfeff, 0x670a, 0x6823, 0x0000, 0x6e1c,
-+ 0xa684, 0x000e, 0x6118, 0x0040, 0x2605, 0x601c, 0xa102, 0x0048,
-+ 0x2608, 0x0040, 0x2608, 0x0078, 0x25b8, 0x81ff, 0x00c0, 0x25b8,
-+ 0x68c3, 0x0000, 0xa784, 0x0080, 0x00c0, 0x2610, 0x700c, 0x6022,
-+ 0xa7bc, 0xff7f, 0x670a, 0x1078, 0x39ac, 0x0018, 0x2410, 0x789b,
-+ 0x0010, 0xa046, 0x1078, 0x38fa, 0x00c0, 0x2459, 0x6b14, 0xa39c,
-+ 0x001f, 0xa39d, 0x00c0, 0x7058, 0xa084, 0x8000, 0x0040, 0x262c,
-+ 0xa684, 0x0001, 0x0040, 0x262e, 0xa39c, 0xffbf, 0xa684, 0x0010,
-+ 0x0040, 0x2634, 0xa39d, 0x0020, 0x7baa, 0x8840, 0xa684, 0x000e,
-+ 0x00c0, 0x263f, 0xa7bd, 0x0010, 0x670a, 0x0078, 0x267a, 0x7158,
-+ 0xa18c, 0x0800, 0x0040, 0x3401, 0x2011, 0x0020, 0xa684, 0x0008,
-+ 0x00c0, 0x2650, 0x8210, 0xa684, 0x0002, 0x00c0, 0x2650, 0x8210,
-+ 0x7aaa, 0x8840, 0x1078, 0x3912, 0x6a14, 0x610c, 0x8108, 0xa18c,
-+ 0x00ff, 0xa1e0, 0x7400, 0x2c64, 0x8cff, 0x0040, 0x2671, 0x6014,
-+ 0xa206, 0x00c0, 0x265b, 0x60b8, 0x8001, 0x60ba, 0x00c0, 0x2656,
-+ 0x0c7e, 0x2a60, 0x6008, 0xa085, 0x0100, 0x600a, 0x0c7f, 0x0078,
-+ 0x2594, 0x1078, 0x38fa, 0x00c0, 0x2459, 0x2a60, 0x610e, 0x79aa,
-+ 0x8840, 0x7132, 0x2001, 0x0001, 0x007e, 0x715c, 0xa184, 0x0018,
-+ 0x0040, 0x2697, 0xa184, 0x0010, 0x0040, 0x268a, 0x1078, 0x3604,
-+ 0x00c0, 0x26ba, 0xa184, 0x0008, 0x0040, 0x2697, 0x69a0, 0xa184,
-+ 0x0600, 0x00c0, 0x2697, 0x1078, 0x34f1, 0x0078, 0x26ba, 0x69a0,
-+ 0xa184, 0x0800, 0x0040, 0x26ae, 0x0c7e, 0x027e, 0x2960, 0x6000,
-+ 0xa085, 0x2000, 0x6002, 0x6104, 0xa18d, 0x0010, 0x6106, 0x027f,
-+ 0x0c7f, 0x1078, 0x3604, 0x00c0, 0x26ba, 0x69a0, 0xa184, 0x0200,
-+ 0x0040, 0x26b6, 0x1078, 0x3540, 0x0078, 0x26ba, 0xa184, 0x0400,
-+ 0x00c0, 0x2693, 0x69a0, 0xa184, 0x1000, 0x0040, 0x26c5, 0x6914,
-+ 0xa18c, 0xff00, 0x810f, 0x1078, 0x22ee, 0x007f, 0x7002, 0xa68c,
-+ 0x00e0, 0xa684, 0x0060, 0x0040, 0x26d3, 0xa086, 0x0060, 0x00c0,
-+ 0x26d3, 0xa18d, 0x4000, 0x88ff, 0x0040, 0x26d8, 0xa18d, 0x0004,
-+ 0x795a, 0x69b6, 0x789b, 0x0060, 0x2800, 0x78aa, 0x789b, 0x0061,
-+ 0x6818, 0xa08d, 0x8000, 0xa084, 0x7fff, 0x691a, 0xa68c, 0x0080,
-+ 0x0040, 0x26f7, 0x7097, 0x0000, 0xa08a, 0x000d, 0x0050, 0x26f5,
-+ 0xa08a, 0x000c, 0x7196, 0x2001, 0x000c, 0x800c, 0x719a, 0x78aa,
-+ 0x8008, 0x810c, 0x0040, 0x3407, 0xa18c, 0x00f8, 0x00c0, 0x3407,
-+ 0x157e, 0x137e, 0x147e, 0x20a1, 0x012b, 0x789b, 0x0000, 0x8000,
-+ 0x80ac, 0xad80, 0x000b, 0x2098, 0x53a6, 0x147f, 0x137f, 0x157f,
-+ 0x6814, 0x8007, 0x7882, 0x6d94, 0x7dd6, 0x7dde, 0x6e98, 0x7ed2,
-+ 0x7eda, 0x1078, 0x38fa, 0x00c0, 0x272e, 0x702c, 0x8003, 0x0048,
-+ 0x2727, 0x2019, 0x4d9e, 0x1078, 0x2276, 0x702f, 0x8000, 0x7830,
-+ 0xa084, 0x00c0, 0x00c0, 0x272e, 0x0098, 0x2736, 0x6008, 0xa084,
-+ 0xffef, 0x600a, 0x1078, 0x3912, 0x0078, 0x2482, 0x7200, 0xa284,
-+ 0x0007, 0xa086, 0x0001, 0x00c0, 0x2743, 0x781b, 0x004f, 0x1078,
-+ 0x3912, 0x0078, 0x2754, 0x6ab4, 0xa295, 0x2000, 0x7a5a, 0x781b,
-+ 0x004f, 0x1078, 0x3912, 0x7200, 0x2500, 0xa605, 0x0040, 0x2754,
-+ 0xa284, 0x0007, 0x1079, 0x2762, 0xad80, 0x0009, 0x7036, 0xa284,
-+ 0x0007, 0xa086, 0x0001, 0x00c0, 0x2459, 0x6018, 0x8000, 0x601a,
-+ 0x0078, 0x2459, 0x276a, 0x4a3a, 0x4a3a, 0x4a29, 0x4a3a, 0x276a,
-+ 0x4a29, 0x276a, 0x1078, 0x23eb, 0x1078, 0x38fa, 0x0f7e, 0x2079,
-+ 0x5100, 0x78cc, 0x0f7f, 0xa084, 0x0001, 0x0040, 0x2790, 0x706c,
-+ 0xa086, 0x0001, 0x00c0, 0x277f, 0x706e, 0x0078, 0x2823, 0x706c,
-+ 0xa086, 0x0005, 0x00c0, 0x278e, 0x7088, 0x2068, 0x681b, 0x0004,
-+ 0x6817, 0x0000, 0x6820, 0xa085, 0x0008, 0x6822, 0x706f, 0x0000,
-+ 0x2011, 0x0004, 0x716c, 0xa186, 0x0001, 0x0040, 0x27b1, 0xa186,
-+ 0x0007, 0x00c0, 0x27a1, 0x2009, 0x5138, 0x200b, 0x0005, 0x0078,
-+ 0x27b1, 0x2009, 0x5113, 0x2104, 0x2009, 0x5112, 0x200a, 0x2009,
-+ 0x5138, 0x200b, 0x0001, 0x706f, 0x0000, 0x7073, 0x0001, 0x0078,
-+ 0x27b3, 0x706f, 0x0000, 0x1078, 0x4776, 0x157e, 0x20a9, 0x0010,
-+ 0x2039, 0x0000, 0x1078, 0x36e2, 0xa7b8, 0x0100, 0x0070, 0x27c2,
-+ 0x0078, 0x27ba, 0x157f, 0x7000, 0x0079, 0x27c6, 0x27f4, 0x27db,
-+ 0x27db, 0x27ce, 0x27f4, 0x27f4, 0x27f4, 0x27f4, 0x2021, 0x515a,
-+ 0x2404, 0xa005, 0x0040, 0x27f4, 0xad06, 0x00c0, 0x27db, 0x6800,
-+ 0x2022, 0x0078, 0x27eb, 0x6820, 0xa084, 0x0001, 0x00c0, 0x27e7,
-+ 0x6f14, 0x1078, 0x37ef, 0x1078, 0x33d8, 0x0078, 0x27eb, 0x7060,
-+ 0x2060, 0x6800, 0x6002, 0x6a1a, 0x6817, 0x0000, 0x6820, 0xa085,
-+ 0x0008, 0x6822, 0x1078, 0x1c70, 0x2021, 0x7500, 0x1078, 0x2830,
-+ 0x2021, 0x515a, 0x1078, 0x2830, 0x157e, 0x20a9, 0x0000, 0x2021,
-+ 0x7400, 0x1078, 0x2830, 0x8420, 0x0070, 0x2808, 0x0078, 0x2801,
-+ 0x2061, 0x5400, 0x2021, 0x0002, 0x20a9, 0x0100, 0x6018, 0x6110,
-+ 0x81ff, 0x0040, 0x2817, 0xa102, 0x0050, 0x2817, 0x6012, 0x601b,
-+ 0x0000, 0xace0, 0x0010, 0x0070, 0x281f, 0x0078, 0x280e, 0x8421,
-+ 0x00c0, 0x280c, 0x157f, 0x709c, 0xa084, 0x8000, 0x0040, 0x282a,
-+ 0x1078, 0x3a00, 0x7003, 0x0000, 0x704b, 0x0000, 0x0078, 0x2459,
-+ 0x047e, 0x2404, 0xa005, 0x0040, 0x2844, 0x2068, 0x6800, 0x007e,
-+ 0x6a1a, 0x6817, 0x0000, 0x6820, 0xa085, 0x0008, 0x6822, 0x1078,
-+ 0x1c70, 0x007f, 0x0078, 0x2832, 0x047f, 0x2023, 0x0000, 0x007c,
-+ 0xa282, 0x0003, 0x0050, 0x284e, 0x1078, 0x23eb, 0x2300, 0x0079,
-+ 0x2851, 0x2854, 0x28c7, 0x28e4, 0xa282, 0x0002, 0x0040, 0x285a,
-+ 0x1078, 0x23eb, 0x706c, 0x706f, 0x0000, 0x7093, 0x0000, 0x0079,
-+ 0x2861, 0x2869, 0x2869, 0x286b, 0x289f, 0x340d, 0x2869, 0x289f,
-+ 0x2869, 0x1078, 0x23eb, 0x7780, 0x1078, 0x36e2, 0x7780, 0xa7bc,
-+ 0x0f00, 0x1078, 0x37ef, 0x6018, 0xa005, 0x0040, 0x2896, 0x2021,
-+ 0x7500, 0x2009, 0x0004, 0x2011, 0x0010, 0x1078, 0x28ff, 0x0040,
-+ 0x2896, 0x157e, 0x20a9, 0x0000, 0x2021, 0x7400, 0x047e, 0x2009,
-+ 0x0004, 0x2011, 0x0010, 0x1078, 0x28ff, 0x047f, 0x0040, 0x2895,
-+ 0x8420, 0x0070, 0x2895, 0x0078, 0x2886, 0x157f, 0x8738, 0xa784,
-+ 0x001f, 0x00c0, 0x2871, 0x0078, 0x2482, 0x0078, 0x2482, 0x7780,
-+ 0x1078, 0x37ef, 0x6018, 0xa005, 0x0040, 0x28c5, 0x2021, 0x7500,
-+ 0x2009, 0x0005, 0x2011, 0x0020, 0x1078, 0x28ff, 0x0040, 0x28c5,
-+ 0x157e, 0x20a9, 0x0000, 0x2021, 0x7400, 0x047e, 0x2009, 0x0005,
-+ 0x2011, 0x0020, 0x1078, 0x28ff, 0x047f, 0x0040, 0x28c4, 0x8420,
-+ 0x0070, 0x28c4, 0x0078, 0x28b5, 0x157f, 0x0078, 0x2482, 0x2200,
-+ 0x0079, 0x28ca, 0x28cd, 0x28cf, 0x28cf, 0x1078, 0x23eb, 0x2009,
-+ 0x0012, 0x706c, 0xa086, 0x0002, 0x0040, 0x28d8, 0x2009, 0x000e,
-+ 0x6818, 0xa084, 0x8000, 0x0040, 0x28de, 0x691a, 0x706f, 0x0000,
-+ 0x7073, 0x0001, 0x0078, 0x3888, 0x2200, 0x0079, 0x28e7, 0x28ec,
-+ 0x28cf, 0x28ea, 0x1078, 0x23eb, 0x1078, 0x4776, 0x7000, 0xa086,
-+ 0x0001, 0x00c0, 0x339d, 0x1078, 0x33ee, 0x6008, 0xa084, 0xffef,
-+ 0x600a, 0x1078, 0x3390, 0x0040, 0x339d, 0x0078, 0x2594, 0x2404,
-+ 0xa005, 0x0040, 0x2922, 0x2068, 0x2d04, 0x007e, 0x6814, 0xa706,
-+ 0x0040, 0x290e, 0x2d20, 0x007f, 0x0078, 0x2900, 0x007f, 0x2022,
-+ 0x691a, 0x6817, 0x0000, 0x6820, 0xa205, 0x6822, 0x1078, 0x1c70,
-+ 0x6010, 0x8001, 0x6012, 0x6008, 0xa084, 0xffef, 0x600a, 0x1078,
-+ 0x33ee, 0x007c, 0xa085, 0x0001, 0x0078, 0x2921, 0x2300, 0x0079,
-+ 0x2929, 0x292e, 0x292c, 0x29c7, 0x1078, 0x23eb, 0x78ec, 0xa084,
-+ 0x0001, 0x00c0, 0x2942, 0x7000, 0xa086, 0x0004, 0x00c0, 0x293a,
-+ 0x0078, 0x2965, 0x1078, 0x33ee, 0x6008, 0xa084, 0xffef, 0x600a,
-+ 0x0078, 0x339d, 0x78e4, 0xa005, 0x00d0, 0x2965, 0x0018, 0x2459,
-+ 0x2008, 0xa084, 0x0030, 0x00c0, 0x2951, 0x781b, 0x004f, 0x0078,
-+ 0x2459, 0x78ec, 0xa084, 0x0003, 0x0040, 0x294d, 0x2100, 0xa084,
-+ 0x0007, 0x0079, 0x295b, 0x299e, 0x29a9, 0x298f, 0x2963, 0x38ed,
-+ 0x38ed, 0x2963, 0x29b8, 0x1078, 0x23eb, 0x7000, 0xa086, 0x0004,
-+ 0x00c0, 0x297f, 0x706c, 0xa086, 0x0002, 0x00c0, 0x2975, 0x2011,
-+ 0x0002, 0x2019, 0x0000, 0x0078, 0x2848, 0x706c, 0xa086, 0x0006,
-+ 0x0040, 0x296f, 0x706c, 0xa086, 0x0004, 0x0040, 0x296f, 0x79e4,
-+ 0xa184, 0x0030, 0x0040, 0x2989, 0x78ec, 0xa084, 0x0003, 0x00c0,
-+ 0x298b, 0x0078, 0x2f6d, 0x2001, 0x0003, 0x0078, 0x2d01, 0x6818,
-+ 0xa084, 0x8000, 0x0040, 0x2996, 0x681b, 0x001d, 0x1078, 0x36c1,
-+ 0x782b, 0x3008, 0x781b, 0x0056, 0x0078, 0x2459, 0x6818, 0xa084,
-+ 0x8000, 0x0040, 0x29a5, 0x681b, 0x001d, 0x1078, 0x36c1, 0x0078,
-+ 0x38b8, 0x6818, 0xa084, 0x8000, 0x0040, 0x29b0, 0x681b, 0x001d,
-+ 0x1078, 0x36c1, 0x782b, 0x3008, 0x781b, 0x00cd, 0x0078, 0x2459,
-+ 0x6818, 0xa084, 0x8000, 0x0040, 0x29bf, 0x681b, 0x001d, 0x1078,
-+ 0x36c1, 0x782b, 0x3008, 0x781b, 0x008e, 0x0078, 0x2459, 0xa584,
-+ 0x000f, 0x00c0, 0x29e4, 0x7000, 0x0079, 0x29ce, 0x2482, 0x29d8,
-+ 0x29d6, 0x339d, 0x339d, 0x339d, 0x339d, 0x29d6, 0x1078, 0x23eb,
-+ 0x1078, 0x33ee, 0x6008, 0xa084, 0xffef, 0x600a, 0x1078, 0x3390,
-+ 0x0040, 0x339d, 0x0078, 0x2594, 0x78e4, 0xa005, 0x00d0, 0x2965,
-+ 0x0018, 0x2965, 0x2008, 0xa084, 0x0030, 0x00c0, 0x29f3, 0x781b,
-+ 0x004f, 0x0078, 0x2459, 0x78ec, 0xa084, 0x0003, 0x0040, 0x29ef,
-+ 0x2100, 0xa184, 0x0007, 0x0079, 0x29fd, 0x2a0f, 0x2a13, 0x2a07,
-+ 0x2a05, 0x38ed, 0x38ed, 0x2a05, 0x38e3, 0x1078, 0x23eb, 0x1078,
-+ 0x36c9, 0x782b, 0x3008, 0x781b, 0x0056, 0x0078, 0x2459, 0x1078,
-+ 0x36c9, 0x0078, 0x38b8, 0x1078, 0x36c9, 0x782b, 0x3008, 0x781b,
-+ 0x00cd, 0x0078, 0x2459, 0x1078, 0x36c9, 0x782b, 0x3008, 0x781b,
-+ 0x008e, 0x0078, 0x2459, 0x2300, 0x0079, 0x2a26, 0x2a2b, 0x2a29,
-+ 0x2a2d, 0x1078, 0x23eb, 0x0078, 0x30ab, 0x681b, 0x0008, 0x78a3,
-+ 0x0000, 0x79e4, 0xa184, 0x0030, 0x0040, 0x30ab, 0x78ec, 0xa084,
-+ 0x0003, 0x0040, 0x30ab, 0xa184, 0x0007, 0x0079, 0x2a3f, 0x2a47,
-+ 0x2a13, 0x298f, 0x3888, 0x38ed, 0x38ed, 0x2a47, 0x38e3, 0x1078,
-+ 0x389c, 0x0078, 0x2459, 0xa282, 0x0005, 0x0050, 0x2a51, 0x1078,
-+ 0x23eb, 0x2300, 0x0079, 0x2a54, 0x2a57, 0x2cae, 0x2cbc, 0x2200,
-+ 0x0079, 0x2a5a, 0x2a74, 0x2a61, 0x2a74, 0x2a5f, 0x2c93, 0x1078,
-+ 0x23eb, 0x789b, 0x0018, 0x78a8, 0xa084, 0x00ff, 0xa082, 0x0020,
-+ 0x0048, 0x369d, 0xa08a, 0x0004, 0x00c8, 0x369d, 0x0079, 0x2a70,
-+ 0x369d, 0x369d, 0x369d, 0x364b, 0x789b, 0x0018, 0x79a8, 0xa184,
-+ 0x0080, 0x0040, 0x2a85, 0x0078, 0x369d, 0x7000, 0xa005, 0x00c0,
-+ 0x2a7b, 0x2011, 0x0004, 0x0078, 0x321f, 0xa184, 0x00ff, 0xa08a,
-+ 0x0010, 0x00c8, 0x369d, 0x0079, 0x2a8d, 0x2a9f, 0x2a9d, 0x2ab7,
-+ 0x2abb, 0x2b78, 0x369d, 0x369d, 0x2b7a, 0x369d, 0x369d, 0x2c8f,
-+ 0x2c8f, 0x369d, 0x369d, 0x369d, 0x2c91, 0x1078, 0x23eb, 0xa684,
-+ 0x1000, 0x0040, 0x2aac, 0x2001, 0x0500, 0x8000, 0x8000, 0x783a,
-+ 0x781b, 0x008c, 0x0078, 0x2459, 0x6818, 0xa084, 0x8000, 0x0040,
-+ 0x2ab5, 0x681b, 0x001d, 0x0078, 0x2aa3, 0x0078, 0x3888, 0x681b,
-+ 0x001d, 0x0078, 0x36ad, 0x6920, 0x6922, 0xa684, 0x1800, 0x00c0,
-+ 0x2afc, 0x6820, 0xa084, 0x0001, 0x00c0, 0x2b04, 0x6818, 0xa086,
-+ 0x0008, 0x00c0, 0x2acd, 0x681b, 0x0000, 0xa684, 0x0400, 0x0040,
-+ 0x2b74, 0xa684, 0x0080, 0x0040, 0x2af8, 0x7097, 0x0000, 0x6818,
-+ 0xa084, 0x003f, 0xa08a, 0x000d, 0x0050, 0x2af8, 0xa08a, 0x000c,
-+ 0x7196, 0x2001, 0x000c, 0x800c, 0x719a, 0x789b, 0x0061, 0x78aa,
-+ 0x157e, 0x137e, 0x147e, 0x20a1, 0x012b, 0x789b, 0x0000, 0x8000,
-+ 0x80ac, 0xad80, 0x000b, 0x2098, 0x53a6, 0x147f, 0x137f, 0x157f,
-+ 0x781b, 0x0058, 0x0078, 0x2459, 0xa684, 0x1000, 0x0040, 0x2b04,
-+ 0x781b, 0x0065, 0x0078, 0x2459, 0xa684, 0x0060, 0x0040, 0x2b70,
-+ 0xa684, 0x0800, 0x0040, 0x2b70, 0xa684, 0x8000, 0x00c0, 0x2b12,
-+ 0x0078, 0x2b2c, 0xa6b4, 0x7fff, 0x7e5a, 0x6eb6, 0x789b, 0x0076,
-+ 0x7aac, 0x79ac, 0x78ac, 0x801b, 0x00c8, 0x2b1f, 0x8000, 0xa084,
-+ 0x003f, 0xa108, 0xa291, 0x0000, 0x6b98, 0x2100, 0xa302, 0x68b2,
-+ 0x6b94, 0x2200, 0xa303, 0x68ae, 0xa684, 0x4000, 0x0040, 0x2b34,
-+ 0xa6b4, 0xbfff, 0x7e5a, 0x6eb6, 0x7000, 0xa086, 0x0003, 0x00c0,
-+ 0x2b41, 0x1078, 0x482c, 0x1078, 0x4a29, 0x781b, 0x0064, 0x0078,
-+ 0x2459, 0xa006, 0x1078, 0x4b30, 0x6ab0, 0x69ac, 0x6c98, 0x6b94,
-+ 0x2200, 0xa105, 0x0040, 0x2b50, 0x2200, 0xa422, 0x2100, 0xa31b,
-+ 0x6caa, 0x7cd2, 0x7cda, 0x6ba6, 0x7bd6, 0x7bde, 0x2300, 0xa405,
-+ 0x00c0, 0x2b62, 0xa6b5, 0x4000, 0x7e5a, 0x6eb6, 0x781b, 0x0064,
-+ 0x0078, 0x2459, 0x781b, 0x0064, 0x2200, 0xa115, 0x00c0, 0x2b6c,
-+ 0x1078, 0x4a3a, 0x0078, 0x2459, 0x1078, 0x4a85, 0x0078, 0x2459,
-+ 0x781b, 0x0065, 0x0078, 0x2459, 0x781b, 0x0058, 0x0078, 0x2459,
-+ 0x1078, 0x23eb, 0x0078, 0x2bdb, 0x6920, 0xa184, 0x0100, 0x0040,
-+ 0x2b92, 0xa18c, 0xfeff, 0x6922, 0x0c7e, 0x7054, 0x2060, 0x6000,
-+ 0xa084, 0xefff, 0x6002, 0x6004, 0xa084, 0xfff5, 0x6006, 0x0c7f,
-+ 0x0078, 0x2bca, 0xa184, 0x0200, 0x0040, 0x2bca, 0xa18c, 0xfdff,
-+ 0x6922, 0x0c7e, 0x7054, 0x2060, 0x6000, 0xa084, 0xdfff, 0x6002,
-+ 0x6004, 0xa084, 0xffef, 0x6006, 0x2008, 0x2c48, 0x0c7f, 0xa184,
-+ 0x0008, 0x0040, 0x2bca, 0x1078, 0x37eb, 0x1078, 0x34f1, 0x88ff,
-+ 0x0040, 0x2bca, 0x789b, 0x0060, 0x2800, 0x78aa, 0x7e58, 0xa6b5,
-+ 0x0004, 0x7e5a, 0xa684, 0x0400, 0x00c0, 0x2bc4, 0x782b, 0x3008,
-+ 0x781b, 0x0056, 0x0078, 0x2459, 0x782b, 0x3008, 0x781b, 0x0065,
-+ 0x0078, 0x2459, 0x7e58, 0xa684, 0x0400, 0x00c0, 0x2bd3, 0x781b,
-+ 0x0058, 0x0078, 0x2459, 0x781b, 0x0065, 0x0078, 0x2459, 0x0078,
-+ 0x36a5, 0x0078, 0x36a5, 0x2019, 0x0000, 0x7990, 0xa18c, 0x0007,
-+ 0x00c0, 0x2be9, 0x6820, 0xa084, 0x0100, 0x0040, 0x2bd9, 0x2009,
-+ 0x0008, 0x789b, 0x0010, 0x78a8, 0xa094, 0x00ff, 0xa286, 0x0001,
-+ 0x00c0, 0x2c20, 0x2300, 0x7ca8, 0xa400, 0x2018, 0xa102, 0x0040,
-+ 0x2c18, 0x0048, 0x2bfd, 0x0078, 0x2c1a, 0xa380, 0x0002, 0xa102,
-+ 0x00c8, 0x2c18, 0x6920, 0xa18c, 0xfcff, 0x6922, 0x0c7e, 0x7054,
-+ 0x2060, 0x6000, 0xa084, 0xefef, 0x6002, 0x6004, 0xa084, 0xffe5,
-+ 0x6006, 0x0c7f, 0x7e58, 0xa6b4, 0xfffb, 0x7e5a, 0x0078, 0x2bcb,
-+ 0x0078, 0x2b7c, 0x24a8, 0x7aa8, 0x00f0, 0x2c1a, 0x0078, 0x2beb,
-+ 0xa284, 0x00f0, 0xa086, 0x0020, 0x00c0, 0x2c80, 0x8318, 0x8318,
-+ 0x2300, 0xa102, 0x0040, 0x2c30, 0x0048, 0x2c30, 0x0078, 0x2c7d,
-+ 0xa286, 0x0023, 0x0040, 0x2bd9, 0x681c, 0xa084, 0xfff1, 0x681e,
-+ 0x7e58, 0xa684, 0xfff1, 0xa085, 0x0010, 0x2030, 0x7e5a, 0x6008,
-+ 0xa085, 0x0010, 0x600a, 0x0c7e, 0x7054, 0x2060, 0x6004, 0x2008,
-+ 0x2c48, 0x0c7f, 0xa184, 0x0010, 0x0040, 0x2c54, 0x1078, 0x37eb,
-+ 0x1078, 0x3604, 0x0078, 0x2c63, 0x0c7e, 0x7054, 0x2060, 0x6004,
-+ 0x2008, 0x2c48, 0x0c7f, 0xa184, 0x0008, 0x0040, 0x2bca, 0x1078,
-+ 0x37eb, 0x1078, 0x34f1, 0x88ff, 0x0040, 0x2bca, 0x789b, 0x0060,
-+ 0x2800, 0x78aa, 0xa6b5, 0x0004, 0x7e5a, 0xa684, 0x0400, 0x00c0,
-+ 0x2c77, 0x782b, 0x3008, 0x781b, 0x0056, 0x0078, 0x2459, 0x782b,
-+ 0x3008, 0x781b, 0x0065, 0x0078, 0x2459, 0x7aa8, 0x0078, 0x2beb,
-+ 0x8318, 0x2300, 0xa102, 0x0040, 0x2c89, 0x0048, 0x2c89, 0x0078,
-+ 0x2beb, 0xa284, 0x0080, 0x00c0, 0x36ad, 0x0078, 0x36a5, 0x0078,
-+ 0x36ad, 0x0078, 0x369d, 0x789b, 0x0018, 0x78a8, 0xa084, 0x00ff,
-+ 0xa08e, 0x0001, 0x0040, 0x2c9e, 0x1078, 0x23eb, 0x7aa8, 0xa294,
-+ 0x00ff, 0x78a8, 0xa084, 0x00ff, 0xa08a, 0x0004, 0x00c8, 0x369d,
-+ 0x0079, 0x2caa, 0x369d, 0x343e, 0x369d, 0x3599, 0xa282, 0x0000,
-+ 0x00c0, 0x2cb4, 0x1078, 0x23eb, 0x1078, 0x36c1, 0x782b, 0x3008,
-+ 0x781b, 0x0065, 0x0078, 0x2459, 0xa282, 0x0003, 0x00c0, 0x2cc2,
-+ 0x1078, 0x23eb, 0xa484, 0x8000, 0x00c0, 0x2ce5, 0x706c, 0xa005,
-+ 0x0040, 0x2ccc, 0x1078, 0x23eb, 0x6f14, 0x7782, 0xa7bc, 0x0f00,
-+ 0x1078, 0x37ef, 0x6008, 0xa085, 0x0021, 0x600a, 0x8738, 0xa784,
-+ 0x001f, 0x00c0, 0x2cd0, 0x1078, 0x36c5, 0x706f, 0x0002, 0x2009,
-+ 0x5138, 0x200b, 0x0009, 0x0078, 0x2ce7, 0x1078, 0x36d1, 0x782b,
-+ 0x3008, 0x781b, 0x0065, 0x0078, 0x2459, 0xa282, 0x0004, 0x0050,
-+ 0x2cf3, 0x1078, 0x23eb, 0x2300, 0x0079, 0x2cf6, 0x2cf9, 0x2de2,
-+ 0x2e15, 0xa286, 0x0003, 0x0040, 0x2cff, 0x1078, 0x23eb, 0x2001,
-+ 0x0000, 0x007e, 0x68c0, 0xa005, 0x0040, 0x2d08, 0x7003, 0x0003,
-+ 0x68a0, 0xa084, 0x2000, 0x0040, 0x2d11, 0x6008, 0xa085, 0x0002,
-+ 0x600a, 0x007f, 0x703e, 0x7000, 0xa084, 0x0007, 0x0079, 0x2d18,
-+ 0x2482, 0x2d22, 0x2d22, 0x2f17, 0x2f53, 0x2482, 0x2f53, 0x2d20,
-+ 0x1078, 0x23eb, 0xa684, 0x1000, 0x00c0, 0x2d2a, 0x1078, 0x4776,
-+ 0x0040, 0x2dbc, 0x7868, 0xa08c, 0x00ff, 0x0040, 0x2d72, 0xa186,
-+ 0x0008, 0x00c0, 0x2d41, 0x1078, 0x33ee, 0x6008, 0xa084, 0xffef,
-+ 0x600a, 0x1078, 0x3390, 0x0040, 0x2d72, 0x1078, 0x4776, 0x0078,
-+ 0x2d59, 0xa186, 0x0028, 0x00c0, 0x2d72, 0x1078, 0x4776, 0x6008,
-+ 0xa084, 0xffef, 0x600a, 0x6018, 0xa005, 0x0040, 0x2d59, 0x8001,
-+ 0x601a, 0xa005, 0x0040, 0x2d59, 0x8001, 0xa005, 0x0040, 0x2d59,
-+ 0x601e, 0x6820, 0xa084, 0x0001, 0x0040, 0x2482, 0x6820, 0xa084,
-+ 0xfffe, 0x6822, 0x7060, 0x0c7e, 0x2060, 0x6800, 0x6002, 0x0c7f,
-+ 0x6004, 0x6802, 0xa005, 0x2d00, 0x00c0, 0x2d6f, 0x6002, 0x6006,
-+ 0x0078, 0x2482, 0x017e, 0x1078, 0x2e46, 0x017f, 0xa684, 0xdf00,
-+ 0x681e, 0x682b, 0x0000, 0x6f14, 0x81ff, 0x0040, 0x2dbc, 0xa186,
-+ 0x0002, 0x00c0, 0x2dbc, 0xa684, 0x0800, 0x00c0, 0x2d8f, 0xa684,
-+ 0x0060, 0x0040, 0x2d8f, 0x78d8, 0x7adc, 0x682e, 0x6a32, 0x6820,
-+ 0xa084, 0x0800, 0x00c0, 0x2dbc, 0x8717, 0xa294, 0x000f, 0x8213,
-+ 0x8213, 0x8213, 0xa290, 0x5380, 0xa290, 0x0000, 0x221c, 0xa384,
-+ 0x0100, 0x00c0, 0x2da5, 0x0078, 0x2dab, 0x8210, 0x2204, 0xa085,
-+ 0x0018, 0x2012, 0x8211, 0xa384, 0x0400, 0x0040, 0x2db8, 0x68a0,
-+ 0xa084, 0x0100, 0x00c0, 0x2db8, 0x1078, 0x2eca, 0x0078, 0x2482,
-+ 0x6008, 0xa085, 0x0002, 0x600a, 0x6916, 0x6818, 0xa084, 0x8000,
-+ 0x0040, 0x2dc4, 0x703c, 0x681a, 0xa68c, 0xdf00, 0x691e, 0x1078,
-+ 0x33df, 0x1078, 0x33ee, 0x00c0, 0x2dd1, 0x6008, 0xa084, 0xffef,
-+ 0x600a, 0x6820, 0xa084, 0x0001, 0x00c0, 0x2dda, 0x1078, 0x33d8,
-+ 0x0078, 0x2dde, 0x7060, 0x2060, 0x6800, 0x6002, 0x1078, 0x1c70,
-+ 0x0078, 0x2482, 0xa282, 0x0004, 0x0048, 0x2de8, 0x1078, 0x23eb,
-+ 0x2200, 0x0079, 0x2deb, 0x2de6, 0x2def, 0x2dfc, 0x2def, 0x7000,
-+ 0xa086, 0x0005, 0x0040, 0x2df8, 0x1078, 0x36c1, 0x782b, 0x3008,
-+ 0x781b, 0x0065, 0x0078, 0x2459, 0x7890, 0x8007, 0x8001, 0xa084,
-+ 0x0007, 0xa080, 0x0018, 0x789a, 0x79a8, 0xa18c, 0x00ff, 0xa186,
-+ 0x0003, 0x0040, 0x2e11, 0xa186, 0x0000, 0x0040, 0x2e11, 0x0078,
-+ 0x369d, 0x781b, 0x0065, 0x0078, 0x2459, 0x6820, 0xa085, 0x0004,
-+ 0x6822, 0x82ff, 0x00c0, 0x2e20, 0x1078, 0x36c1, 0x0078, 0x2e27,
-+ 0x8211, 0x0040, 0x2e25, 0x1078, 0x23eb, 0x1078, 0x36d1, 0x782b,
-+ 0x3008, 0x781b, 0x0065, 0x0078, 0x2459, 0x702c, 0x8003, 0x0048,
-+ 0x2e37, 0x2019, 0x4d9e, 0x1078, 0x2276, 0x702f, 0x8000, 0x1078,
-+ 0x3912, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x2e43, 0x0018, 0x2e43,
-+ 0x791a, 0xa006, 0x007c, 0xa085, 0x0001, 0x007c, 0xa684, 0x0060,
-+ 0x00c0, 0x2e50, 0x682f, 0x0000, 0x6833, 0x0000, 0x0078, 0x2ec9,
-+ 0xa684, 0x0800, 0x00c0, 0x2e72, 0x68b4, 0xa084, 0x4800, 0xa635,
-+ 0xa684, 0x0800, 0x00c0, 0x2e72, 0x6998, 0x6a94, 0x692e, 0x6a32,
-+ 0x703c, 0xa005, 0x00c0, 0x2e6a, 0x2200, 0xa105, 0x0040, 0x2e71,
-+ 0x703f, 0x0015, 0x7000, 0xa086, 0x0006, 0x0040, 0x2e71, 0x1078,
-+ 0x4776, 0x007c, 0xa684, 0x0020, 0x0040, 0x2e94, 0xa684, 0x4000,
-+ 0x0040, 0x2e80, 0x682f, 0x0000, 0x6833, 0x0000, 0x0078, 0x2e6a,
-+ 0x68b4, 0xa084, 0x4800, 0xa635, 0xa684, 0x4000, 0x00c0, 0x2e7a,
-+ 0x703c, 0xa005, 0x00c0, 0x2e8e, 0x703f, 0x0015, 0x79d8, 0x7adc,
-+ 0x692e, 0x6a32, 0x0078, 0x2e6a, 0xa684, 0x4000, 0x0040, 0x2e9e,
-+ 0x682f, 0x0000, 0x6833, 0x0000, 0x0078, 0x2e6a, 0x68b4, 0xa084,
-+ 0x4800, 0xa635, 0xa684, 0x4000, 0x00c0, 0x2e98, 0x703c, 0xa005,
-+ 0x00c0, 0x2eac, 0x703f, 0x0015, 0x79d8, 0x7adc, 0x78d0, 0x80fb,
-+ 0x00c8, 0x2eb3, 0x8000, 0xa084, 0x003f, 0xa108, 0xa291, 0x0000,
-+ 0x692e, 0x6a32, 0x2100, 0xa205, 0x00c0, 0x2ec0, 0x0078, 0x2e6a,
-+ 0x7000, 0xa086, 0x0006, 0x0040, 0x2ec9, 0x1078, 0x4b30, 0x0078,
-+ 0x2e6a, 0x007c, 0x6008, 0xa085, 0x0200, 0x600a, 0xa384, 0x0200,
-+ 0x0040, 0x2ed6, 0x6008, 0xa085, 0x0002, 0x600a, 0x681b, 0x0006,
-+ 0x688f, 0x0000, 0x6893, 0x0000, 0x6a30, 0x692c, 0x6a3e, 0x6942,
-+ 0x682f, 0x0003, 0x6833, 0x0000, 0x6837, 0x0020, 0x6897, 0x0000,
-+ 0x689b, 0x0020, 0x68b3, 0x0000, 0x68af, 0x0000, 0x7000, 0x0079,
-+ 0x2ef1, 0x2482, 0x2efb, 0x2f04, 0x2ef9, 0x2ef9, 0x2ef9, 0x2ef9,
-+ 0x2ef9, 0x1078, 0x23eb, 0x6820, 0xa084, 0x0001, 0x00c0, 0x2f04,
-+ 0x1078, 0x33d8, 0x0078, 0x2f0a, 0x7060, 0x2c50, 0x2060, 0x6800,
-+ 0x6002, 0x2a60, 0x2021, 0x515a, 0x2404, 0xa005, 0x0040, 0x2f13,
-+ 0x2020, 0x0078, 0x2f0c, 0x2d22, 0x206b, 0x0000, 0x007c, 0x1078,
-+ 0x33df, 0x1078, 0x33ee, 0x6008, 0xa084, 0xfdff, 0x600a, 0x682b,
-+ 0x0000, 0x789b, 0x000e, 0x6f14, 0x6817, 0x0002, 0x1078, 0x4b78,
-+ 0xa684, 0x0800, 0x0040, 0x2f30, 0x691c, 0xa18d, 0x2000, 0x691e,
-+ 0x6818, 0xa084, 0x8000, 0x0040, 0x2f40, 0x7868, 0xa08c, 0x00ff,
-+ 0x0040, 0x2f3e, 0x681b, 0x001e, 0x0078, 0x2f40, 0x681b, 0x0000,
-+ 0x2021, 0x515a, 0x2404, 0xad06, 0x0040, 0x2f47, 0x7460, 0x6800,
-+ 0x2022, 0x68c3, 0x0000, 0x6a3c, 0x6940, 0x6a32, 0x692e, 0x1078,
-+ 0x1c70, 0x0078, 0x2482, 0x1078, 0x2e46, 0x682b, 0x0000, 0x2001,
-+ 0x000e, 0x6f14, 0x1078, 0x3918, 0xa08c, 0x00ff, 0x6916, 0x6818,
-+ 0xa084, 0x8000, 0x0040, 0x2f66, 0x703c, 0x681a, 0xa68c, 0xdf00,
-+ 0x691e, 0x706f, 0x0000, 0x0078, 0x2482, 0x7000, 0xa005, 0x00c0,
-+ 0x2f73, 0x0078, 0x2482, 0xa006, 0x1078, 0x4776, 0x6817, 0x0000,
-+ 0x681b, 0x0014, 0xa68c, 0xdf00, 0x691e, 0x682b, 0x0000, 0x6820,
-+ 0xa085, 0x00ff, 0x6822, 0x7000, 0x0079, 0x2f86, 0x2482, 0x2f90,
-+ 0x2f90, 0x2f92, 0x2f92, 0x2f92, 0x2f92, 0x2f8e, 0x1078, 0x23eb,
-+ 0x1078, 0x33ee, 0x6008, 0xa084, 0xffef, 0x600a, 0x0078, 0x33a8,
-+ 0x2300, 0x0079, 0x2f9b, 0x2f9e, 0x2fa0, 0x2fd9, 0x1078, 0x23eb,
-+ 0x7000, 0x0079, 0x2fa3, 0x2482, 0x2fad, 0x2fad, 0x2fc8, 0x2fad,
-+ 0x2fd5, 0x2fc8, 0x2fab, 0x1078, 0x23eb, 0xa684, 0x0060, 0xa086,
-+ 0x0060, 0x00c0, 0x2fc4, 0xa6b4, 0xffdf, 0xa6b4, 0xbfff, 0xa6b5,
-+ 0x2000, 0x7e5a, 0x681c, 0xa084, 0xffdf, 0x681e, 0x1078, 0x4776,
-+ 0x1078, 0x4a3a, 0x0078, 0x3888, 0xa684, 0x2000, 0x0040, 0x2fb7,
-+ 0x6818, 0xa084, 0x8000, 0x0040, 0x2fd5, 0x681b, 0x0015, 0xa684,
-+ 0x4000, 0x0040, 0x2fd5, 0x681b, 0x0007, 0x1078, 0x389c, 0x0078,
-+ 0x2459, 0x1078, 0x23eb, 0x2300, 0x0079, 0x2fde, 0x2fe1, 0x2fe3,
-+ 0x3016, 0x1078, 0x23eb, 0x7000, 0x0079, 0x2fe6, 0x2482, 0x2ff0,
-+ 0x2ff0, 0x300b, 0x2ff0, 0x3012, 0x300b, 0x2fee, 0x1078, 0x23eb,
-+ 0xa684, 0x0060, 0xa086, 0x0060, 0x00c0, 0x3007, 0xa6b4, 0xffbf,
-+ 0xa6b4, 0xbfff, 0xa6b5, 0x2000, 0x7e5a, 0x681c, 0xa084, 0xffbf,
-+ 0x681e, 0x1078, 0x4776, 0x1078, 0x4a3a, 0x0078, 0x3888, 0xa684,
-+ 0x2000, 0x0040, 0x2ffa, 0x6818, 0xa084, 0x8000, 0x0040, 0x3012,
-+ 0x681b, 0x0007, 0x781b, 0x00cd, 0x0078, 0x2459, 0x6820, 0xa085,
-+ 0x0004, 0x6822, 0x1078, 0x3853, 0xa6b5, 0x0800, 0x1078, 0x36c1,
-+ 0x782b, 0x3008, 0x781b, 0x0065, 0x0078, 0x2459, 0x2300, 0x0079,
-+ 0x3029, 0x302c, 0x302e, 0x3030, 0x1078, 0x23eb, 0x0078, 0x36ad,
-+ 0xa684, 0x0400, 0x00c0, 0x3059, 0x79e4, 0xa184, 0x0020, 0x0040,
-+ 0x3040, 0x78ec, 0xa084, 0x0003, 0x0040, 0x3040, 0x782b, 0x3009,
-+ 0x789b, 0x0060, 0x78ab, 0x0000, 0xa684, 0xfffb, 0x785a, 0x79e4,
-+ 0xa184, 0x0020, 0x0040, 0x3051, 0x78ec, 0xa084, 0x0003, 0x00c0,
-+ 0x3055, 0x2001, 0x0014, 0x0078, 0x2d01, 0xa184, 0x0007, 0x0079,
-+ 0x3091, 0x7a90, 0xa294, 0x0007, 0x789b, 0x0060, 0x79a8, 0x81ff,
-+ 0x0040, 0x308f, 0x789b, 0x0010, 0x7ba8, 0xa384, 0x0001, 0x00c0,
-+ 0x3080, 0x7ba8, 0x7ba8, 0xa386, 0x0001, 0x00c0, 0x3073, 0x2009,
-+ 0xfff7, 0x0078, 0x3079, 0xa386, 0x0003, 0x00c0, 0x3080, 0x2009,
-+ 0xffef, 0x0c7e, 0x7054, 0x2060, 0x6004, 0xa104, 0x6006, 0x0c7f,
-+ 0x789b, 0x0060, 0x78ab, 0x0000, 0xa684, 0xfffb, 0x785a, 0x782b,
-+ 0x3009, 0x6920, 0xa18c, 0xfdff, 0xa18c, 0xfeff, 0x6922, 0x0078,
-+ 0x3888, 0x299e, 0x29a9, 0x309b, 0x30a3, 0x3099, 0x3099, 0x3888,
-+ 0x3888, 0x1078, 0x23eb, 0x6920, 0xa18c, 0xfdff, 0xa18c, 0xfeff,
-+ 0x6922, 0x0078, 0x3892, 0x6920, 0xa18c, 0xfdff, 0xa18c, 0xfeff,
-+ 0x6922, 0x0078, 0x3888, 0x79e4, 0xa184, 0x0030, 0x0040, 0x30b5,
-+ 0x78ec, 0xa084, 0x0003, 0x00c0, 0x30dc, 0x7000, 0xa086, 0x0004,
-+ 0x00c0, 0x30cf, 0x706c, 0xa086, 0x0002, 0x00c0, 0x30c5, 0x2011,
-+ 0x0002, 0x2019, 0x0000, 0x0078, 0x2848, 0x706c, 0xa086, 0x0006,
-+ 0x0040, 0x30bf, 0x706c, 0xa086, 0x0004, 0x0040, 0x30bf, 0x7000,
-+ 0xa086, 0x0000, 0x0040, 0x2459, 0x6818, 0xa085, 0x8000, 0x681a,
-+ 0x2001, 0x0014, 0x0078, 0x2d01, 0xa184, 0x0007, 0x0079, 0x30e0,
-+ 0x3888, 0x3888, 0x30e8, 0x3888, 0x38ed, 0x38ed, 0x3888, 0x3888,
-+ 0xa684, 0x0080, 0x0040, 0x3117, 0x7194, 0x81ff, 0x0040, 0x3117,
-+ 0xa182, 0x000d, 0x00d0, 0x30f8, 0x7097, 0x0000, 0x0078, 0x30fd,
-+ 0xa182, 0x000c, 0x7096, 0x2009, 0x000c, 0x789b, 0x0061, 0x79aa,
-+ 0x157e, 0x137e, 0x147e, 0x7098, 0x8114, 0xa210, 0x729a, 0xa080,
-+ 0x000b, 0xad00, 0x2098, 0x20a1, 0x012b, 0x789b, 0x0000, 0x8108,
-+ 0x81ac, 0x53a6, 0x147f, 0x137f, 0x157f, 0x0078, 0x3892, 0xa684,
-+ 0x0400, 0x00c0, 0x3158, 0x6820, 0xa084, 0x0001, 0x0040, 0x3892,
-+ 0xa68c, 0x0060, 0xa684, 0x0060, 0x0040, 0x312c, 0xa086, 0x0060,
-+ 0x00c0, 0x312c, 0xa18d, 0x4000, 0xa18c, 0xfffb, 0x795a, 0x69b6,
-+ 0x789b, 0x0060, 0x78ab, 0x0000, 0x789b, 0x0061, 0x6818, 0xa085,
-+ 0x8000, 0x681a, 0x78aa, 0x8008, 0x810c, 0x0040, 0x3407, 0xa18c,
-+ 0x00f8, 0x00c0, 0x3407, 0x157e, 0x137e, 0x147e, 0x20a1, 0x012b,
-+ 0x789b, 0x0000, 0x8000, 0x80ac, 0xad80, 0x000b, 0x2098, 0x53a6,
-+ 0x147f, 0x137f, 0x157f, 0x6814, 0x8007, 0x7882, 0x0078, 0x3892,
-+ 0x6818, 0xa084, 0x8000, 0x0040, 0x315f, 0x681b, 0x0008, 0x781b,
-+ 0x00c3, 0x0078, 0x2459, 0x2300, 0x0079, 0x3166, 0x316b, 0x320a,
-+ 0x3169, 0x1078, 0x23eb, 0x7000, 0xa084, 0x0007, 0x0079, 0x3170,
-+ 0x2482, 0x317a, 0x31af, 0x3185, 0x3178, 0x2482, 0x3178, 0x3178,
-+ 0x1078, 0x23eb, 0x681c, 0xa084, 0x2000, 0x0040, 0x3193, 0x6008,
-+ 0xa085, 0x0002, 0x600a, 0x0078, 0x3193, 0x68c0, 0xa005, 0x00c0,
-+ 0x31af, 0x6920, 0xa18d, 0x0001, 0x6922, 0x68c3, 0x0001, 0x6800,
-+ 0x706a, 0x0078, 0x31a9, 0x6920, 0xa18d, 0x0001, 0x6922, 0x6800,
-+ 0x6006, 0xa005, 0x00c0, 0x319d, 0x6002, 0x681c, 0xa084, 0x000e,
-+ 0x0040, 0x31a9, 0x7014, 0x68ba, 0x7130, 0xa188, 0x7400, 0x0078,
-+ 0x31ab, 0x2009, 0x7500, 0x2104, 0x6802, 0x2d0a, 0x7162, 0x6eb6,
-+ 0xa684, 0x0060, 0x0040, 0x3208, 0xa684, 0x0800, 0x00c0, 0x31c3,
-+ 0xa684, 0x7fff, 0x68b6, 0x6894, 0x68a6, 0x6898, 0x68aa, 0x1078,
-+ 0x4776, 0x0078, 0x3208, 0xa684, 0x0020, 0x0040, 0x31d8, 0x68c0,
-+ 0xa005, 0x0040, 0x31cf, 0x1078, 0x4b78, 0x0078, 0x31d2, 0xa006,
-+ 0x1078, 0x4b30, 0x79d8, 0x7adc, 0x69aa, 0x6aa6, 0x0078, 0x31de,
-+ 0x1078, 0x37fc, 0x69aa, 0x6aa6, 0x1078, 0x4b30, 0xa684, 0x8000,
-+ 0x0040, 0x3208, 0xa684, 0x7fff, 0x68b6, 0x2001, 0x0076, 0x1078,
-+ 0x3918, 0x2010, 0x2001, 0x0078, 0x1078, 0x3918, 0x2008, 0xa684,
-+ 0x0020, 0x00c0, 0x3200, 0x2001, 0x007a, 0x1078, 0x3918, 0x801b,
-+ 0x00c8, 0x31fb, 0x8000, 0xa084, 0x003f, 0xa108, 0xa291, 0x0000,
-+ 0x6b98, 0x2100, 0xa302, 0x68b2, 0x6b94, 0x2200, 0xa303, 0x68ae,
-+ 0x0078, 0x2482, 0x0078, 0x36ad, 0x7037, 0x0000, 0xa282, 0x0006,
-+ 0x0050, 0x3214, 0x1078, 0x23eb, 0x7000, 0xa084, 0x0007, 0x10c0,
-+ 0x39be, 0x2300, 0x0079, 0x321c, 0x321f, 0x3248, 0x325c, 0x2200,
-+ 0x0079, 0x3222, 0x3246, 0x36ad, 0x3228, 0x3246, 0x3278, 0x32ba,
-+ 0x7003, 0x0005, 0x2001, 0x7610, 0x2068, 0x704a, 0x157e, 0x20a9,
-+ 0x0031, 0x2003, 0x0000, 0x8000, 0x0070, 0x3238, 0x0078, 0x3231,
-+ 0x157f, 0xad80, 0x0009, 0x7036, 0x6817, 0x0000, 0x68b7, 0x0700,
-+ 0x6823, 0x0800, 0x6827, 0x0003, 0x0078, 0x369d, 0x1078, 0x23eb,
-+ 0x7003, 0x0005, 0x2001, 0x7610, 0x2068, 0x704a, 0xad80, 0x0009,
-+ 0x7036, 0x2200, 0x0079, 0x3254, 0x36ad, 0x325a, 0x325a, 0x3278,
-+ 0x325a, 0x36ad, 0x1078, 0x23eb, 0x7003, 0x0005, 0x2001, 0x7610,
-+ 0x2068, 0x704a, 0xad80, 0x0009, 0x7036, 0x2200, 0x0079, 0x3268,
-+ 0x3270, 0x326e, 0x326e, 0x3270, 0x326e, 0x3270, 0x1078, 0x23eb,
-+ 0x1078, 0x36d1, 0x782b, 0x3008, 0x781b, 0x0065, 0x0078, 0x2459,
-+ 0x7003, 0x0002, 0x7a80, 0xa294, 0x0f00, 0x789b, 0x0018, 0x7ca8,
-+ 0xa484, 0x001f, 0xa215, 0x2069, 0x7500, 0x2d04, 0x2d08, 0x7162,
-+ 0x2068, 0xa005, 0x0040, 0x3293, 0x6814, 0xa206, 0x0040, 0x32af,
-+ 0x6800, 0x0078, 0x3286, 0x7003, 0x0005, 0x2001, 0x7610, 0x2068,
-+ 0x704a, 0x7036, 0x157e, 0x20a9, 0x0031, 0x2003, 0x0000, 0x8000,
-+ 0x0070, 0x32a4, 0x0078, 0x329d, 0x157f, 0xad80, 0x0009, 0x7036,
-+ 0x6a16, 0x68b7, 0x0700, 0x6823, 0x0800, 0x6827, 0x0003, 0x6eb4,
-+ 0x7e5a, 0x6820, 0xa084, 0x0c00, 0x0040, 0x3309, 0x1078, 0x36c9,
-+ 0x0078, 0x3309, 0x7003, 0x0002, 0x7a80, 0xa294, 0x0f00, 0x789b,
-+ 0x0018, 0x7ca8, 0xa484, 0x001f, 0xa215, 0x79a8, 0x79a8, 0xa18c,
-+ 0x00ff, 0xa1e8, 0x7400, 0x2d04, 0x2d08, 0x7162, 0x2068, 0xa005,
-+ 0x0040, 0x32d9, 0x6814, 0xa206, 0x0040, 0x32f4, 0x6800, 0x0078,
-+ 0x32cc, 0x7003, 0x0005, 0x2001, 0x7610, 0x2068, 0x704a, 0x157e,
-+ 0x20a9, 0x0031, 0x2003, 0x0000, 0x8000, 0x0070, 0x32e9, 0x0078,
-+ 0x32e2, 0x157f, 0xad80, 0x0009, 0x7036, 0x6a16, 0x68b7, 0x0700,
-+ 0x6823, 0x0800, 0x6827, 0x0003, 0x6eb4, 0x7e5a, 0x6820, 0xa084,
-+ 0x0c00, 0x0040, 0x3309, 0xa084, 0x0800, 0x0040, 0x3303, 0x1078,
-+ 0x36cd, 0x0078, 0x3309, 0x1078, 0x36c9, 0x708b, 0x0000, 0x0078,
-+ 0x3309, 0x027e, 0x8207, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003,
-+ 0xa080, 0x5380, 0x2060, 0x7056, 0x6000, 0x705a, 0x6004, 0x705e,
-+ 0xa684, 0x0060, 0x0040, 0x3361, 0x6b98, 0x6c94, 0x69ac, 0x68b0,
-+ 0xa105, 0x00c0, 0x3343, 0x7bd2, 0x7bda, 0x7cd6, 0x7cde, 0xa6b4,
-+ 0xb7ff, 0x7e5a, 0xa684, 0x0060, 0xa086, 0x0060, 0x0040, 0x3361,
-+ 0x68c0, 0xa005, 0x0040, 0x333c, 0x7003, 0x0003, 0x682b, 0x0000,
-+ 0x1078, 0x4a29, 0x0078, 0x333e, 0x1078, 0x4a3a, 0xa6b5, 0x2000,
-+ 0x7e5a, 0x0078, 0x3361, 0x68b0, 0xa31a, 0x2100, 0xa423, 0x2400,
-+ 0xa305, 0x0040, 0x3361, 0x7bd2, 0x7bda, 0x7cd6, 0x7cde, 0x68b0,
-+ 0xa6b4, 0xbfff, 0x7e5a, 0x007e, 0x68c0, 0xa005, 0x007f, 0x0040,
-+ 0x335f, 0x7003, 0x0003, 0x1078, 0x4a29, 0x0078, 0x3361, 0x1078,
-+ 0x4a85, 0x077f, 0x1078, 0x37ef, 0x2009, 0x0065, 0xa684, 0x0004,
-+ 0x0040, 0x3382, 0x78e4, 0xa084, 0x0030, 0x0040, 0x337a, 0x78ec,
-+ 0xa084, 0x0003, 0x0040, 0x337a, 0x782b, 0x3008, 0x2009, 0x0065,
-+ 0x0078, 0x3382, 0x0f7e, 0x2079, 0x5100, 0x1078, 0x4776, 0x0f7f,
-+ 0x0040, 0x2482, 0x791a, 0x2d00, 0x704a, 0x8207, 0xa084, 0x000f,
-+ 0x8003, 0x8003, 0x8003, 0xa080, 0x5380, 0x2048, 0x0078, 0x2459,
-+ 0x6020, 0xa005, 0x0040, 0x339c, 0x8001, 0x6022, 0x6008, 0xa085,
-+ 0x0008, 0x600a, 0x7010, 0x6026, 0x007c, 0xa006, 0x1078, 0x4776,
-+ 0x6817, 0x0000, 0x681b, 0x0001, 0x6823, 0x0040, 0x681f, 0x0100,
-+ 0x7000, 0xa084, 0x0007, 0x0079, 0x33ad, 0x2482, 0x33b7, 0x33b7,
-+ 0x33d4, 0x33bf, 0x33bd, 0x33bf, 0x33b5, 0x1078, 0x23eb, 0x1078,
-+ 0x33df, 0x1078, 0x33d8, 0x1078, 0x1c70, 0x0078, 0x2482, 0x706c,
-+ 0x706f, 0x0000, 0x7093, 0x0000, 0x0079, 0x33c6, 0x33d0, 0x33d0,
-+ 0x33ce, 0x33ce, 0x33ce, 0x33d0, 0x33ce, 0x33d0, 0x0079, 0x2861,
-+ 0x706f, 0x0000, 0x0078, 0x2482, 0x681b, 0x0000, 0x0078, 0x2f17,
-+ 0x6800, 0xa005, 0x00c0, 0x33dd, 0x6002, 0x6006, 0x007c, 0x6010,
-+ 0xa005, 0x0040, 0x33e8, 0x8001, 0x00d0, 0x33e8, 0x1078, 0x23eb,
-+ 0x6012, 0x6008, 0xa084, 0xffef, 0x600a, 0x007c, 0x6018, 0xa005,
-+ 0x0040, 0x33f4, 0x8001, 0x601a, 0x007c, 0x1078, 0x3912, 0x681b,
-+ 0x0018, 0x0078, 0x342b, 0x1078, 0x3912, 0x681b, 0x0019, 0x0078,
-+ 0x342b, 0x1078, 0x3912, 0x681b, 0x001a, 0x0078, 0x342b, 0x1078,
-+ 0x3912, 0x681b, 0x0003, 0x0078, 0x342b, 0x7780, 0x1078, 0x37ef,
-+ 0x7184, 0xa18c, 0x00ff, 0xa1e8, 0x7400, 0x2d04, 0x2d08, 0x2068,
-+ 0xa005, 0x00c0, 0x341d, 0x0078, 0x2482, 0x6814, 0x7280, 0xa206,
-+ 0x0040, 0x3425, 0x6800, 0x0078, 0x3416, 0x6800, 0x200a, 0x681b,
-+ 0x0005, 0x708b, 0x0000, 0x1078, 0x33df, 0x6820, 0xa084, 0x0001,
-+ 0x00c0, 0x3434, 0x1078, 0x33d8, 0x1078, 0x33ee, 0x681f, 0x0000,
-+ 0x6823, 0x0020, 0x1078, 0x1c70, 0x0078, 0x2482, 0xa282, 0x0003,
-+ 0x00c0, 0x369d, 0x7da8, 0xa5ac, 0x00ff, 0x7ca8, 0xa4a4, 0x00ff,
-+ 0x6920, 0xa18d, 0x0080, 0x6922, 0xa184, 0x0100, 0x0040, 0x34a2,
-+ 0xa18c, 0xfeff, 0x6922, 0xa4a4, 0x00ff, 0x0040, 0x348c, 0xa482,
-+ 0x000c, 0x0048, 0x345f, 0x0040, 0x345f, 0x2021, 0x000c, 0x852b,
-+ 0x852b, 0x1078, 0x3760, 0x0040, 0x3469, 0x1078, 0x355b, 0x0078,
-+ 0x3495, 0x1078, 0x371b, 0x0c7e, 0x2960, 0x6004, 0xa084, 0xfff5,
-+ 0x6006, 0x1078, 0x3586, 0x0c7f, 0x6920, 0xa18d, 0x0100, 0x6922,
-+ 0x7e58, 0xa6b5, 0x0004, 0x7e5a, 0xa684, 0x0400, 0x00c0, 0x3486,
-+ 0x782b, 0x3008, 0x781b, 0x0056, 0x0078, 0x2459, 0x782b, 0x3008,
-+ 0x781b, 0x0065, 0x0078, 0x2459, 0x0c7e, 0x2960, 0x6004, 0xa084,
-+ 0xfff5, 0x6006, 0x1078, 0x3586, 0x0c7f, 0x7e58, 0xa684, 0x0400,
-+ 0x00c0, 0x349e, 0x781b, 0x0058, 0x0078, 0x2459, 0x781b, 0x0065,
-+ 0x0078, 0x2459, 0x0c7e, 0x7054, 0x2060, 0x6100, 0xa18c, 0x1000,
-+ 0x0040, 0x34e2, 0x6208, 0x8217, 0xa294, 0x00ff, 0xa282, 0x000c,
-+ 0x0048, 0x34b6, 0x0040, 0x34b6, 0x2011, 0x000c, 0x2400, 0xa202,
-+ 0x00c8, 0x34bb, 0x2220, 0x6208, 0xa294, 0x00ff, 0x7018, 0xa086,
-+ 0x0028, 0x00c0, 0x34cb, 0xa282, 0x0019, 0x00c8, 0x34d1, 0x2011,
-+ 0x0019, 0x0078, 0x34d1, 0xa282, 0x000c, 0x00c8, 0x34d1, 0x2011,
-+ 0x000c, 0x2200, 0xa502, 0x00c8, 0x34d6, 0x2228, 0x1078, 0x371f,
-+ 0x852b, 0x852b, 0x1078, 0x3760, 0x0040, 0x34e2, 0x1078, 0x355b,
-+ 0x0078, 0x34e6, 0x1078, 0x371b, 0x1078, 0x3586, 0x7858, 0xa085,
-+ 0x0004, 0x785a, 0x0c7f, 0x782b, 0x3008, 0x781b, 0x0065, 0x0078,
-+ 0x2459, 0x0c7e, 0x2960, 0x6000, 0xa084, 0x1000, 0x00c0, 0x3509,
-+ 0x6010, 0xa084, 0x000f, 0x00c0, 0x3503, 0x6104, 0xa18c, 0xfff5,
-+ 0x6106, 0x0c7f, 0x007c, 0x2011, 0x0032, 0x2019, 0x0000, 0x0078,
-+ 0x3530, 0x68a0, 0xa084, 0x0200, 0x00c0, 0x3503, 0x6208, 0xa294,
-+ 0x00ff, 0x7018, 0xa086, 0x0028, 0x00c0, 0x351e, 0xa282, 0x0019,
-+ 0x00c8, 0x3524, 0x2011, 0x0019, 0x0078, 0x3524, 0xa282, 0x000c,
-+ 0x00c8, 0x3524, 0x2011, 0x000c, 0x6308, 0x831f, 0xa39c, 0x00ff,
-+ 0xa382, 0x000c, 0x0048, 0x3530, 0x0040, 0x3530, 0x2019, 0x000c,
-+ 0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab, 0x0001, 0x7aaa, 0x7baa,
-+ 0xa8c0, 0x0005, 0x6820, 0xa085, 0x0100, 0x6822, 0x0c7f, 0x007c,
-+ 0x0c7e, 0x2960, 0xa18c, 0xfff5, 0x6106, 0x2011, 0x0032, 0x2019,
-+ 0x0000, 0x0078, 0x354b, 0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab,
-+ 0x0001, 0x7aaa, 0x7baa, 0xa8c0, 0x0005, 0x6820, 0xa085, 0x0100,
-+ 0x6822, 0x0c7f, 0x007c, 0x0c7e, 0x7154, 0x2160, 0x1078, 0x3562,
-+ 0x0c7f, 0x007c, 0x2008, 0xa084, 0xfff0, 0xa425, 0x7c86, 0x6018,
-+ 0x789a, 0x7cae, 0x6412, 0x78a4, 0xa084, 0xfff8, 0xa18c, 0x0007,
-+ 0xa105, 0x78a6, 0x6016, 0x788a, 0xa4a4, 0x000f, 0x8427, 0x8204,
-+ 0x8004, 0xa084, 0x00ff, 0xa405, 0x600e, 0x78ec, 0xd08c, 0x00c0,
-+ 0x3585, 0x6004, 0xa084, 0xfff5, 0x6006, 0x007c, 0x0c7e, 0x7054,
-+ 0x2060, 0x1078, 0x358d, 0x0c7f, 0x007c, 0x6018, 0x789a, 0x78a4,
-+ 0xa084, 0xfff0, 0x78a6, 0x6012, 0x7884, 0xa084, 0xfff0, 0x7886,
-+ 0x007c, 0xa282, 0x0002, 0x00c0, 0x369d, 0x7aa8, 0x6920, 0xa18d,
-+ 0x0080, 0x6922, 0xa184, 0x0200, 0x0040, 0x35e2, 0xa18c, 0xfdff,
-+ 0x6922, 0xa294, 0x00ff, 0xa282, 0x0002, 0x00c8, 0x369d, 0x1078,
-+ 0x362b, 0x1078, 0x3586, 0xa980, 0x0001, 0x200c, 0x1078, 0x37eb,
-+ 0x1078, 0x34f1, 0x88ff, 0x0040, 0x35d5, 0x789b, 0x0060, 0x2800,
-+ 0x78aa, 0x7e58, 0xa6b5, 0x0004, 0x7e5a, 0xa684, 0x0400, 0x00c0,
-+ 0x35cf, 0x782b, 0x3008, 0x781b, 0x0056, 0x0078, 0x2459, 0x782b,
-+ 0x3008, 0x781b, 0x0065, 0x0078, 0x2459, 0x7e58, 0xa684, 0x0400,
-+ 0x00c0, 0x35de, 0x781b, 0x0058, 0x0078, 0x2459, 0x781b, 0x0065,
-+ 0x0078, 0x2459, 0xa282, 0x0002, 0x00c8, 0x35ea, 0xa284, 0x0001,
-+ 0x0040, 0x35f4, 0x7154, 0xa188, 0x0000, 0x210c, 0xa18c, 0x2000,
-+ 0x00c0, 0x35f4, 0x2011, 0x0000, 0x1078, 0x370d, 0x1078, 0x362b,
-+ 0x1078, 0x3586, 0x7858, 0xa085, 0x0004, 0x785a, 0x782b, 0x3008,
-+ 0x781b, 0x0065, 0x0078, 0x2459, 0x0c7e, 0x027e, 0x2960, 0x6000,
-+ 0x2011, 0x0001, 0xa084, 0x2000, 0x00c0, 0x361b, 0x6014, 0xa084,
-+ 0x0040, 0x00c0, 0x3619, 0xa18c, 0xffef, 0x6106, 0xa006, 0x0078,
-+ 0x3628, 0x2011, 0x0000, 0x78ab, 0x0001, 0x78ab, 0x0002, 0x78ab,
-+ 0x0003, 0x7aaa, 0xa8c0, 0x0004, 0x6820, 0xa085, 0x0200, 0x6822,
-+ 0x027f, 0x0c7f, 0x007c, 0x0c7e, 0x7054, 0x2060, 0x1078, 0x3632,
-+ 0x0c7f, 0x007c, 0x82ff, 0x0040, 0x3637, 0x2011, 0x0040, 0x6018,
-+ 0xa080, 0x0002, 0x789a, 0x78a4, 0xa084, 0xffbf, 0xa205, 0x78a6,
-+ 0x788a, 0x6016, 0x78ec, 0xd08c, 0x00c0, 0x364a, 0x6004, 0xa084,
-+ 0xffef, 0x6006, 0x007c, 0x007e, 0x7000, 0xa086, 0x0003, 0x0040,
-+ 0x3654, 0x007f, 0x0078, 0x3657, 0x007f, 0x0078, 0x3699, 0xa684,
-+ 0x0020, 0x0040, 0x3699, 0x7888, 0xa084, 0x0040, 0x0040, 0x3699,
-+ 0x7bb8, 0xa384, 0x003f, 0x831b, 0x00c8, 0x3667, 0x8000, 0xa005,
-+ 0x0040, 0x367d, 0x831b, 0x00c8, 0x3670, 0x8001, 0x0040, 0x3695,
-+ 0xa684, 0x4000, 0x0040, 0x367d, 0x78b8, 0x801b, 0x00c8, 0x3679,
-+ 0x8000, 0xa084, 0x003f, 0x00c0, 0x3695, 0xa6b4, 0xbfff, 0x7e5a,
-+ 0x79d8, 0x7adc, 0x2001, 0x0001, 0xa108, 0x00c8, 0x3689, 0xa291,
-+ 0x0000, 0x79d2, 0x79da, 0x7ad6, 0x7ade, 0x1078, 0x4b30, 0x781b,
-+ 0x0064, 0x1078, 0x49b5, 0x0078, 0x2459, 0x781b, 0x0064, 0x0078,
-+ 0x2459, 0x781b, 0x0065, 0x0078, 0x2459, 0x1078, 0x36d5, 0x782b,
-+ 0x3008, 0x781b, 0x0065, 0x0078, 0x2459, 0x1078, 0x36c1, 0x782b,
-+ 0x3008, 0x781b, 0x0065, 0x0078, 0x2459, 0x6827, 0x0002, 0x1078,
-+ 0x36c9, 0x78e4, 0xa084, 0x0030, 0x0040, 0x2482, 0x78ec, 0xa084,
-+ 0x0003, 0x0040, 0x2482, 0x782b, 0x3008, 0x781b, 0x0065, 0x0078,
-+ 0x2459, 0x2001, 0x0005, 0x0078, 0x36d7, 0x2001, 0x000c, 0x0078,
-+ 0x36d7, 0x2001, 0x0006, 0x0078, 0x36d7, 0x2001, 0x000d, 0x0078,
-+ 0x36d7, 0x2001, 0x0009, 0x0078, 0x36d7, 0x2001, 0x0007, 0x789b,
-+ 0x0010, 0x78aa, 0x789b, 0x0060, 0x78ab, 0x0001, 0xa6b5, 0x0004,
-+ 0x7e5a, 0x007c, 0x077e, 0x873f, 0xa7bc, 0x000f, 0x873b, 0x873b,
-+ 0x8703, 0xa0e0, 0x5380, 0xa7b8, 0x0020, 0x7f9a, 0x79a4, 0xa184,
-+ 0x000f, 0x0040, 0x36fb, 0xa184, 0xfff0, 0x78a6, 0x6012, 0x6004,
-+ 0xa085, 0x0008, 0x6006, 0x8738, 0x8738, 0x7f9a, 0x79a4, 0xa184,
-+ 0x0040, 0x0040, 0x370b, 0xa184, 0xffbf, 0x78a6, 0x6016, 0x6004,
-+ 0xa085, 0x0010, 0x6006, 0x077f, 0x007c, 0x789b, 0x0010, 0x78ab,
-+ 0x0001, 0x78ab, 0x0002, 0x78ab, 0x0003, 0x7aaa, 0x789b, 0x0060,
-+ 0x78ab, 0x0004, 0x007c, 0x2021, 0x0000, 0x2029, 0x0032, 0x789b,
-+ 0x0010, 0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab, 0x0001, 0x7daa,
-+ 0x7caa, 0x789b, 0x0060, 0x78ab, 0x0005, 0x007c, 0x157e, 0x8007,
-+ 0xa084, 0x00ff, 0x8003, 0x8003, 0xa080, 0x0020, 0x789a, 0x79a4,
-+ 0xa18c, 0xfff0, 0x2001, 0x5146, 0x2004, 0xa082, 0x0028, 0x0040,
-+ 0x3749, 0x2021, 0x37d2, 0x2019, 0x0014, 0x20a9, 0x000c, 0x0078,
-+ 0x374f, 0x2021, 0x37de, 0x2019, 0x0019, 0x20a9, 0x000d, 0x2011,
-+ 0x0064, 0x2404, 0xa084, 0xfff0, 0xa106, 0x0040, 0x375e, 0x8420,
-+ 0x2300, 0xa210, 0x0070, 0x375e, 0x0078, 0x3751, 0x157f, 0x007c,
-+ 0x157e, 0x2009, 0x5146, 0x210c, 0xa182, 0x0032, 0x0048, 0x3774,
-+ 0x0040, 0x3778, 0x2009, 0x37c4, 0x2019, 0x0011, 0x20a9, 0x000e,
-+ 0x2011, 0x0032, 0x0078, 0x378a, 0xa182, 0x0028, 0x0040, 0x3782,
-+ 0x2009, 0x37d2, 0x2019, 0x0014, 0x20a9, 0x000c, 0x2011, 0x0064,
-+ 0x0078, 0x378a, 0x2009, 0x37de, 0x2019, 0x0019, 0x20a9, 0x000d,
-+ 0x2011, 0x0064, 0x2200, 0xa502, 0x0040, 0x379a, 0x0048, 0x379a,
-+ 0x8108, 0x2300, 0xa210, 0x0070, 0x3797, 0x0078, 0x378a, 0x157f,
-+ 0xa006, 0x007c, 0x157f, 0xa582, 0x0064, 0x00c8, 0x37a9, 0x7808,
-+ 0xa085, 0x0070, 0x780a, 0x7044, 0xa085, 0x0070, 0x7046, 0x0078,
-+ 0x37a9, 0x78ec, 0xa084, 0x0300, 0x0040, 0x37b1, 0x2104, 0x0078,
-+ 0x37c2, 0x2104, 0xa09e, 0x1102, 0x00c0, 0x37c2, 0x2001, 0x04fd,
-+ 0x2004, 0xa082, 0x0005, 0x0048, 0x37c1, 0x2001, 0x1201, 0x0078,
-+ 0x37c2, 0x2104, 0xa005, 0x007c, 0x1102, 0x3002, 0x3202, 0x4203,
-+ 0x4403, 0x5404, 0x5604, 0x6605, 0x6805, 0x7806, 0x7a06, 0x0c07,
-+ 0x0c07, 0x0e07, 0x3202, 0x4202, 0x5202, 0x6202, 0x7202, 0x6605,
-+ 0x7605, 0x7805, 0x7a05, 0x7c05, 0x7e05, 0x7f05, 0x2202, 0x3202,
-+ 0x4202, 0x5202, 0x5404, 0x6404, 0x7404, 0x7604, 0x7804, 0x7a04,
-+ 0x7c04, 0x7e04, 0x7f04, 0x789b, 0x0010, 0xa046, 0x007c, 0xa784,
-+ 0x0f00, 0x800b, 0xa784, 0x001f, 0x8003, 0x8003, 0x8003, 0x8003,
-+ 0xa105, 0xa0e0, 0x5400, 0x007c, 0x79d8, 0x7adc, 0x78d0, 0x801b,
-+ 0x00c8, 0x3803, 0x8000, 0xa084, 0x003f, 0xa108, 0xa291, 0x0000,
-+ 0x007c, 0x0f7e, 0x2079, 0x0100, 0x2009, 0x5140, 0x2091, 0x8000,
-+ 0x2104, 0x0079, 0x3813, 0x3849, 0x381d, 0x381d, 0x381d, 0x381d,
-+ 0x381d, 0x381d, 0x384d, 0x1078, 0x23eb, 0x784b, 0x0004, 0x7848,
-+ 0xa084, 0x0004, 0x00c0, 0x381f, 0x784b, 0x0008, 0x7848, 0xa084,
-+ 0x0008, 0x00c0, 0x3826, 0x68b4, 0xa085, 0x4000, 0x68b6, 0x7858,
-+ 0xa085, 0x4000, 0x785a, 0x7830, 0xa084, 0x0080, 0x00c0, 0x3849,
-+ 0x0018, 0x3849, 0x681c, 0xa084, 0x0020, 0x00c0, 0x3847, 0x0e7e,
-+ 0x2071, 0x5140, 0x1078, 0x389c, 0x0e7f, 0x0078, 0x3849, 0x781b,
-+ 0x00cd, 0x2091, 0x8001, 0x0f7f, 0x007c, 0x70b3, 0x0000, 0x1078,
-+ 0x3a76, 0x0078, 0x3849, 0x0c7e, 0x6814, 0x8007, 0xa084, 0x000f,
-+ 0x8003, 0x8003, 0x8003, 0xa0e0, 0x5380, 0x6004, 0xa084, 0x000a,
-+ 0x00c0, 0x3886, 0x6108, 0xa194, 0xff00, 0x0040, 0x3886, 0xa18c,
-+ 0x00ff, 0x2001, 0x0019, 0xa106, 0x0040, 0x3875, 0x2001, 0x0032,
-+ 0xa106, 0x0040, 0x3879, 0x0078, 0x387d, 0x2009, 0x0020, 0x0078,
-+ 0x387f, 0x2009, 0x003f, 0x0078, 0x387f, 0x2011, 0x0000, 0x2100,
-+ 0xa205, 0x600a, 0x6004, 0xa085, 0x0002, 0x6006, 0x0c7f, 0x007c,
-+ 0x781b, 0x0065, 0x0078, 0x2459, 0x782b, 0x3008, 0x781b, 0x0065,
-+ 0x0078, 0x2459, 0x781b, 0x0058, 0x0078, 0x2459, 0x782b, 0x3008,
-+ 0x781b, 0x0056, 0x0078, 0x2459, 0x2009, 0x5120, 0x210c, 0xa186,
-+ 0x0000, 0x0040, 0x38b0, 0xa186, 0x0001, 0x0040, 0x38b3, 0x2009,
-+ 0x5138, 0x200b, 0x000b, 0x706f, 0x0001, 0x781b, 0x0048, 0x007c,
-+ 0x781b, 0x00c7, 0x007c, 0x2009, 0x5138, 0x200b, 0x000a, 0x007c,
-+ 0x2009, 0x5120, 0x210c, 0xa186, 0x0000, 0x0040, 0x38d3, 0xa186,
-+ 0x0001, 0x0040, 0x38cd, 0x2009, 0x5138, 0x200b, 0x000b, 0x706f,
-+ 0x0001, 0x781b, 0x0048, 0x0078, 0x2459, 0x2009, 0x5138, 0x200b,
-+ 0x000a, 0x0078, 0x2459, 0x782b, 0x3008, 0x781b, 0x00c7, 0x0078,
-+ 0x2459, 0x781b, 0x00cd, 0x0078, 0x2459, 0x782b, 0x3008, 0x781b,
-+ 0x00cd, 0x0078, 0x2459, 0x781b, 0x008e, 0x0078, 0x2459, 0x782b,
-+ 0x3008, 0x781b, 0x008e, 0x0078, 0x2459, 0x6818, 0xa084, 0x8000,
-+ 0x0040, 0x38f4, 0x681b, 0x001d, 0x706f, 0x0001, 0x781b, 0x0048,
-+ 0x0078, 0x2459, 0x007e, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x3910,
-+ 0x7808, 0xa084, 0xfffc, 0x780a, 0x0005, 0x0005, 0x0005, 0x0005,
-+ 0x78ec, 0xa084, 0x0021, 0x0040, 0x3910, 0x7044, 0x780a, 0xa005,
-+ 0x007f, 0x007c, 0x7044, 0xa085, 0x0002, 0x7046, 0x780a, 0x007c,
-+ 0x007e, 0x7830, 0xa084, 0x0040, 0x00c0, 0x3919, 0x0098, 0x3924,
-+ 0x007f, 0x789a, 0x78ac, 0x007c, 0x7808, 0xa084, 0xfffd, 0x780a,
-+ 0x0005, 0x0005, 0x0005, 0x0005, 0x78ec, 0xa084, 0x0021, 0x0040,
-+ 0x3933, 0x0098, 0x3931, 0x007f, 0x789a, 0x78ac, 0x007e, 0x7044,
-+ 0x780a, 0x007f, 0x007c, 0x78ec, 0xa084, 0x0002, 0x00c0, 0x4760,
-+ 0xa784, 0x007d, 0x00c0, 0x3947, 0x2700, 0x1078, 0x23eb, 0xa784,
-+ 0x0001, 0x00c0, 0x2f6d, 0xa784, 0x0070, 0x0040, 0x3957, 0x0c7e,
-+ 0x2d60, 0x2f68, 0x1078, 0x2396, 0x2d78, 0x2c68, 0x0c7f, 0xa784,
-+ 0x0008, 0x0040, 0x3964, 0x784b, 0x0008, 0x78ec, 0xa084, 0x0003,
-+ 0x0040, 0x2482, 0x0078, 0x3888, 0xa784, 0x0004, 0x0040, 0x3997,
-+ 0x78b8, 0xa084, 0x4001, 0x0040, 0x3997, 0x784b, 0x0008, 0x78ec,
-+ 0xa084, 0x0003, 0x0040, 0x2482, 0x78e4, 0xa084, 0x0007, 0xa086,
-+ 0x0001, 0x00c0, 0x3997, 0x78c0, 0xa085, 0x4800, 0x2030, 0x7e5a,
-+ 0x781b, 0x00cd, 0x0078, 0x2459, 0x784b, 0x0008, 0x6818, 0xa084,
-+ 0x8000, 0x0040, 0x3993, 0x681b, 0x0015, 0xa684, 0x4000, 0x0040,
-+ 0x3993, 0x681b, 0x0007, 0x1078, 0x389c, 0x0078, 0x2459, 0x681b,
-+ 0x0003, 0x7858, 0xa084, 0x3f00, 0x681e, 0x682f, 0x0000, 0x6833,
-+ 0x0000, 0x784b, 0x0008, 0x78ec, 0xa084, 0x0003, 0x0040, 0x2965,
-+ 0x0018, 0x2459, 0x0078, 0x36a5, 0x6b14, 0x8307, 0xa084, 0x000f,
-+ 0x8003, 0x8003, 0x8003, 0xa080, 0x5380, 0x2060, 0x2048, 0x7056,
-+ 0x6000, 0x705a, 0x6004, 0x705e, 0x2a60, 0x007c, 0x0079, 0x39c0,
-+ 0x39c8, 0x39c9, 0x39c8, 0x39cb, 0x39c8, 0x39c8, 0x39c8, 0x39d0,
-+ 0x007c, 0x1078, 0x33ee, 0x1078, 0x4776, 0x7038, 0x600a, 0x007c,
-+ 0x70a0, 0xa005, 0x0040, 0x39dd, 0x2068, 0x1078, 0x1b62, 0x1078,
-+ 0x46f8, 0x1078, 0x46ff, 0x70a3, 0x0000, 0x007c, 0x0e7e, 0x2091,
-+ 0x8000, 0x2071, 0x5140, 0x7000, 0xa086, 0x0007, 0x00c0, 0x39f4,
-+ 0x6110, 0x70bc, 0xa106, 0x00c0, 0x39f4, 0x0e7f, 0x1078, 0x1b6f,
-+ 0x1078, 0x39fa, 0xa006, 0x007c, 0x2091, 0x8001, 0x0e7f, 0xa085,
-+ 0x0001, 0x007c, 0x0f7e, 0x0e7e, 0x2071, 0x5140, 0x0078, 0x21fa,
-+ 0x785b, 0x0000, 0x70af, 0x000e, 0x2009, 0x0100, 0x017e, 0x70a0,
-+ 0xa06d, 0x0040, 0x3a0f, 0x70a3, 0x0000, 0x0078, 0x3a15, 0x70b3,
-+ 0x0000, 0x1078, 0x1b8b, 0x0040, 0x3a1b, 0x70ac, 0x6826, 0x1078,
-+ 0x3af8, 0x0078, 0x3a0f, 0x017f, 0x157e, 0x0c7e, 0x0d7e, 0x20a9,
-+ 0x0008, 0x2061, 0x7510, 0x6000, 0xa105, 0x6002, 0x601c, 0xa06d,
-+ 0x0040, 0x3a33, 0x6800, 0x601e, 0x1078, 0x195a, 0x6008, 0x8000,
-+ 0x600a, 0x0078, 0x3a26, 0x6018, 0xa06d, 0x0040, 0x3a3d, 0x6800,
-+ 0x601a, 0x1078, 0x195a, 0x0078, 0x3a33, 0xace0, 0x0008, 0x0070,
-+ 0x3a43, 0x0078, 0x3a23, 0x709c, 0xa084, 0x8000, 0x0040, 0x3a4a,
-+ 0x1078, 0x3b72, 0x0d7f, 0x0c7f, 0x157f, 0x007c, 0x127e, 0x2091,
-+ 0x2300, 0x6804, 0xa084, 0x000f, 0x0079, 0x3a56, 0x3a66, 0x3a66,
-+ 0x3a66, 0x3a66, 0x3a66, 0x3a66, 0x3a68, 0x3a6e, 0x3a66, 0x3a66,
-+ 0x3a66, 0x3a66, 0x3a66, 0x3a70, 0x3a66, 0x3a68, 0x1078, 0x23eb,
-+ 0x1078, 0x44d0, 0x1078, 0x195a, 0x0078, 0x3a74, 0x6827, 0x000b,
-+ 0x1078, 0x44d0, 0x1078, 0x3af8, 0x127f, 0x007c, 0x127e, 0x2091,
-+ 0x2300, 0x0098, 0x3a92, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x3a92,
-+ 0x0d7e, 0x1078, 0x4708, 0x2d00, 0x682e, 0x2009, 0x0004, 0x2001,
-+ 0x0000, 0x6827, 0x0084, 0x1078, 0x46c1, 0x1078, 0x3af8, 0x0d7f,
-+ 0x0078, 0x3ac6, 0x7948, 0xa185, 0x4000, 0x784a, 0x0098, 0x3a9b,
-+ 0x794a, 0x0078, 0x3a80, 0x7828, 0xa086, 0x1834, 0x00c0, 0x3aa4,
-+ 0xa185, 0x0004, 0x0078, 0x3aab, 0x7828, 0xa086, 0x1814, 0x00c0,
-+ 0x3a98, 0xa185, 0x000c, 0x784a, 0x789b, 0x000e, 0x78ab, 0x0002,
-+ 0x7858, 0xa084, 0x00ff, 0xa085, 0x0400, 0x785a, 0x70b4, 0xa080,
-+ 0x0091, 0x781a, 0x6827, 0x0284, 0x682c, 0x6836, 0x6830, 0x683a,
-+ 0x2009, 0x0004, 0x2001, 0x0000, 0x1078, 0x46c1, 0x127f, 0x007c,
-+ 0x0d7e, 0x6b14, 0x1078, 0x1bfd, 0x0040, 0x3ad5, 0x2068, 0x6827,
-+ 0x0002, 0x1078, 0x3af8, 0x0078, 0x3aca, 0x0d7f, 0x007c, 0x0d7e,
-+ 0x6b14, 0x6c28, 0xa4a4, 0x00ff, 0x1078, 0x1b9b, 0x0040, 0x3ae5,
-+ 0x2068, 0x6827, 0x0002, 0x1078, 0x3af8, 0x0d7f, 0x007c, 0x0d7e,
-+ 0x6b14, 0xa39c, 0x00ff, 0x1078, 0x1bce, 0x0040, 0x3af6, 0x2068,
-+ 0x6827, 0x0002, 0x1078, 0x3af8, 0x0078, 0x3aeb, 0x0d7f, 0x007c,
-+ 0x0c7e, 0x6914, 0x1078, 0x3b69, 0x6904, 0xa18c, 0x00ff, 0xa186,
-+ 0x0006, 0x0040, 0x3b13, 0xa186, 0x000d, 0x0040, 0x3b32, 0xa186,
-+ 0x0017, 0x00c0, 0x3b0f, 0x1078, 0x195a, 0x0078, 0x3b11, 0x1078,
-+ 0x1c72, 0x0c7f, 0x007c, 0x6004, 0x8001, 0x0048, 0x3b30, 0x6006,
-+ 0x2009, 0x0000, 0xa684, 0x0001, 0x00c0, 0x3b20, 0xa18d, 0x8000,
-+ 0xa684, 0x0004, 0x0040, 0x3b26, 0xa18d, 0x0002, 0x691e, 0x6823,
-+ 0x0000, 0x7104, 0x810f, 0x6818, 0xa105, 0x681a, 0x0078, 0x3b0f,
-+ 0x1078, 0x23eb, 0x6018, 0xa005, 0x00c0, 0x3b41, 0x6008, 0x8001,
-+ 0x0048, 0x3b41, 0x600a, 0x601c, 0x6802, 0x2d00, 0x601e, 0x0078,
-+ 0x3b57, 0xac88, 0x0006, 0x2104, 0xa005, 0x0040, 0x3b4a, 0x2008,
-+ 0x0078, 0x3b43, 0x6802, 0x2d0a, 0x6008, 0x8001, 0x0048, 0x3b11,
-+ 0x600a, 0x6018, 0x2068, 0x6800, 0x601a, 0x0078, 0x3b3b, 0x157e,
-+ 0x137e, 0x147e, 0x0c7e, 0x0d7e, 0x1078, 0x1937, 0x2da0, 0x137f,
-+ 0x20a9, 0x0031, 0x53a3, 0x0c7f, 0x147f, 0x137f, 0x157f, 0x0078,
-+ 0x3b0f, 0xa184, 0x001f, 0x8003, 0x8003, 0x8003, 0xa080, 0x7510,
-+ 0x2060, 0x007c, 0x2019, 0x5151, 0x2304, 0xa085, 0x0001, 0x201a,
-+ 0x2019, 0x0102, 0x2304, 0xa085, 0x0001, 0x201a, 0x007c, 0x2019,
-+ 0x5151, 0x2304, 0xa084, 0xfffe, 0x201a, 0x2019, 0x0102, 0x2304,
-+ 0xa084, 0xfffe, 0x201a, 0x007c, 0x7990, 0xa18c, 0xfff8, 0x7992,
-+ 0x70b4, 0xa080, 0x00dd, 0x781a, 0x0078, 0x2459, 0x70a3, 0x0000,
-+ 0x7003, 0x0000, 0x7043, 0x0001, 0x7037, 0x0000, 0x0018, 0x2410,
-+ 0x1078, 0x1b8b, 0x0040, 0x3bc7, 0x2009, 0x510f, 0x200b, 0x0000,
-+ 0x68bc, 0x2060, 0x6100, 0xa184, 0x0300, 0x0040, 0x3bbb, 0x6827,
-+ 0x000e, 0xa084, 0x0200, 0x0040, 0x3bb7, 0x6827, 0x0017, 0x1078,
-+ 0x3af8, 0x0078, 0x3b96, 0x7000, 0xa086, 0x0007, 0x00c0, 0x3c29,
-+ 0x2d00, 0x70a2, 0xad80, 0x000f, 0x7036, 0x0078, 0x3bce, 0x7040,
-+ 0xa086, 0x0001, 0x0040, 0x2492, 0x0078, 0x2459, 0x2031, 0x0000,
-+ 0x691c, 0xa184, 0x0002, 0x0040, 0x3bd7, 0xa6b5, 0x0004, 0xa184,
-+ 0x00c0, 0x8003, 0x8003, 0x8007, 0xa080, 0x3cc2, 0x2004, 0xa635,
-+ 0x6820, 0xa084, 0x0400, 0x0040, 0x3bef, 0x789b, 0x0018, 0x78ab,
-+ 0x0003, 0x789b, 0x0081, 0x78ab, 0x0001, 0xa6b5, 0x1000, 0x6820,
-+ 0xa084, 0x8000, 0x00c0, 0x3bfd, 0x681c, 0xa084, 0x8000, 0x00c0,
-+ 0x3c04, 0xa6b5, 0x0800, 0x0078, 0x3c04, 0xa6b5, 0x0400, 0x789b,
-+ 0x000e, 0x6824, 0x8007, 0x78aa, 0x6820, 0xa084, 0x0100, 0x0040,
-+ 0x3c0b, 0xa6b5, 0x4000, 0xa684, 0x0200, 0x0040, 0x3c25, 0x682c,
-+ 0x78d2, 0x6830, 0x78d6, 0xa684, 0x0100, 0x0040, 0x3c23, 0x682c,
-+ 0xa084, 0x0001, 0x0040, 0x3c23, 0x7888, 0xa084, 0x0040, 0x0040,
-+ 0x3c23, 0xa6b5, 0x8000, 0x1078, 0x46f0, 0x7e5a, 0x6eb6, 0x0078,
-+ 0x4727, 0x1078, 0x38fa, 0x00c0, 0x3cbc, 0x702c, 0x8004, 0x0048,
-+ 0x3c37, 0x2019, 0x4e3b, 0x1078, 0x2276, 0x702f, 0x0001, 0x2041,
-+ 0x0001, 0x2031, 0x1000, 0x789b, 0x0018, 0x6814, 0xa084, 0x001f,
-+ 0xa085, 0x0080, 0x78aa, 0x691c, 0xa184, 0x0002, 0x0040, 0x3c50,
-+ 0xa6b5, 0x0004, 0x78ab, 0x0020, 0x6828, 0x78aa, 0xa8c0, 0x0002,
-+ 0x681c, 0xd0f4, 0x0040, 0x3c59, 0x2c50, 0x1078, 0x39ac, 0x1078,
-+ 0x45ff, 0x6820, 0xa084, 0x8000, 0x0040, 0x3c67, 0xa6b5, 0x0400,
-+ 0x789b, 0x000e, 0x6824, 0x8007, 0x78aa, 0x0078, 0x3c6e, 0x681c,
-+ 0xa084, 0x8000, 0x00c0, 0x3c6e, 0xa6b5, 0x0800, 0x6820, 0xa084,
-+ 0x0100, 0x0040, 0x3c75, 0xa6b5, 0x4000, 0x681c, 0xa084, 0x00c0,
-+ 0x8003, 0x8003, 0x8007, 0xa080, 0x3cc2, 0x2004, 0xa635, 0xa684,
-+ 0x0100, 0x0040, 0x3c8f, 0x682c, 0xa084, 0x0001, 0x0040, 0x3c8f,
-+ 0x7888, 0xa084, 0x0040, 0x0040, 0x3c8f, 0xa6b5, 0x8000, 0x789b,
-+ 0x007e, 0x7eae, 0x6eb6, 0x6814, 0x8007, 0x78aa, 0x7882, 0x2810,
-+ 0x7aaa, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x3cbc, 0x0018, 0x3cbc,
-+ 0x70b4, 0xa080, 0x00e2, 0x781a, 0x1078, 0x3912, 0xa684, 0x0200,
-+ 0x0040, 0x3cb0, 0x682c, 0x78d2, 0x6830, 0x78d6, 0x1078, 0x46f0,
-+ 0x2d00, 0x70a2, 0x704a, 0x6810, 0x70be, 0x7003, 0x0007, 0xad80,
-+ 0x000f, 0x7036, 0x0078, 0x2459, 0x1078, 0x1b62, 0x1078, 0x3912,
-+ 0x0078, 0x2459, 0x0000, 0x0300, 0x0200, 0x0000, 0x1078, 0x23eb,
-+ 0x2300, 0x0079, 0x3ccb, 0x3cce, 0x3cce, 0x3cd0, 0x1078, 0x23eb,
-+ 0x1078, 0x46ff, 0x6924, 0xa184, 0x00ff, 0xa086, 0x000a, 0x0040,
-+ 0x3ce2, 0xa184, 0xff00, 0xa085, 0x000a, 0x6826, 0x1078, 0x1b62,
-+ 0x0078, 0x3b96, 0x2001, 0x000a, 0x1078, 0x4691, 0x0078, 0x3b96,
-+ 0xa282, 0x0005, 0x0050, 0x3cee, 0x1078, 0x23eb, 0x7000, 0xa084,
-+ 0x0007, 0x10c0, 0x39be, 0x1078, 0x1937, 0x00c0, 0x3d0d, 0xa684,
-+ 0x0004, 0x0040, 0x3cff, 0x2001, 0x2800, 0x0078, 0x3d01, 0x2001,
-+ 0x0800, 0x71b4, 0xa188, 0x0091, 0x789b, 0x000e, 0x78aa, 0x2031,
-+ 0x0400, 0x7e5a, 0x791a, 0x0078, 0x2459, 0x6807, 0x0106, 0x680b,
-+ 0x0000, 0x689f, 0x0000, 0x6827, 0x0000, 0xa386, 0x0002, 0x00c0,
-+ 0x3d2e, 0xa286, 0x0002, 0x00c0, 0x3d2e, 0x78a0, 0xa005, 0x00c0,
-+ 0x3d2e, 0xa484, 0x8000, 0x00c0, 0x3d2e, 0x78e4, 0xa084, 0x0008,
-+ 0x0040, 0x3d2e, 0xa6b5, 0x0008, 0x2019, 0x0000, 0x1078, 0x411e,
-+ 0x2d00, 0x70a2, 0x704a, 0x7003, 0x0007, 0x7037, 0x0000, 0x6824,
-+ 0xa084, 0x0080, 0x0040, 0x3d40, 0x1078, 0x41d0, 0x0078, 0x2459,
-+ 0x2300, 0x0079, 0x3d43, 0x3d46, 0x3dc7, 0x3de6, 0x2200, 0x0079,
-+ 0x3d49, 0x3d4e, 0x3d5e, 0x3d84, 0x3d90, 0x3db3, 0x2029, 0x0001,
-+ 0xa026, 0x2011, 0x0000, 0x1078, 0x42f1, 0x0079, 0x3d57, 0x3d5c,
-+ 0x2459, 0x3b96, 0x3d5c, 0x3d5c, 0x1078, 0x23eb, 0x7990, 0xa18c,
-+ 0x0007, 0x00c0, 0x3d65, 0x2009, 0x0008, 0x2011, 0x0001, 0xa684,
-+ 0x0004, 0x0040, 0x3d6d, 0x2011, 0x0003, 0x2220, 0xa12a, 0x2011,
-+ 0x0001, 0x1078, 0x42f1, 0x0079, 0x3d75, 0x3d7a, 0x2459, 0x3b96,
-+ 0x3d82, 0x3d7c, 0x0078, 0x472d, 0x70ab, 0x3d80, 0x0078, 0x2459,
-+ 0x0078, 0x3d7a, 0x1078, 0x23eb, 0xa684, 0x0010, 0x0040, 0x3d8e,
-+ 0x1078, 0x419f, 0x0040, 0x3d8e, 0x0078, 0x2459, 0x0078, 0x420c,
-+ 0x6000, 0xa084, 0x0002, 0x0040, 0x3dad, 0x70b4, 0xa080, 0x00d2,
-+ 0x781a, 0x0d7e, 0x1078, 0x4708, 0x2d00, 0x682e, 0x6827, 0x0000,
-+ 0x1078, 0x3af8, 0x0d7f, 0x1078, 0x195a, 0x7003, 0x0000, 0x7037,
-+ 0x0000, 0x704b, 0x0000, 0x0078, 0x3b96, 0xa684, 0x0004, 0x00c0,
-+ 0x3db3, 0x0078, 0x472d, 0x6000, 0xa084, 0x0004, 0x00c0, 0x3dc5,
-+ 0x6000, 0xa084, 0x0001, 0x0040, 0x3dc5, 0x70ab, 0x3dc5, 0x2001,
-+ 0x0007, 0x1078, 0x4689, 0x0078, 0x4733, 0x0078, 0x472d, 0x2200,
-+ 0x0079, 0x3dca, 0x3dcf, 0x3dcf, 0x3dcf, 0x3dd1, 0x3dcf, 0x1078,
-+ 0x23eb, 0x70a7, 0x3dd5, 0x0078, 0x4739, 0x2011, 0x0018, 0x1078,
-+ 0x42eb, 0x0079, 0x3ddb, 0x3de0, 0x2459, 0x3b96, 0x3de2, 0x3de4,
-+ 0x1078, 0x23eb, 0x1078, 0x23eb, 0x1078, 0x23eb, 0x2200, 0x0079,
-+ 0x3de9, 0x3dee, 0x3df0, 0x3df0, 0x3dee, 0x3dee, 0x1078, 0x23eb,
-+ 0x78e4, 0xa084, 0x0008, 0x0040, 0x3e05, 0x70a7, 0x3df9, 0x0078,
-+ 0x4739, 0x2011, 0x0004, 0x1078, 0x42eb, 0x0079, 0x3dff, 0x3e05,
-+ 0x2459, 0x3b96, 0x3e05, 0x3e0f, 0x3e13, 0x70ab, 0x3e0d, 0x2001,
-+ 0x0003, 0x1078, 0x4689, 0x0078, 0x4733, 0x0078, 0x472d, 0x70ab,
-+ 0x3e05, 0x0078, 0x2459, 0x70ab, 0x3e17, 0x0078, 0x2459, 0x0078,
-+ 0x3e0d, 0xa282, 0x0003, 0x0050, 0x3e1f, 0x1078, 0x23eb, 0xa386,
-+ 0x0002, 0x00c0, 0x3e38, 0xa286, 0x0002, 0x00c0, 0x3e3e, 0x78a0,
-+ 0xa005, 0x00c0, 0x3e3e, 0xa484, 0x8000, 0x00c0, 0x3e3e, 0x78e4,
-+ 0xa084, 0x0008, 0x0040, 0x3e38, 0xa6b5, 0x0008, 0x2019, 0x0000,
-+ 0xa684, 0x0008, 0x0040, 0x3e3e, 0x1078, 0x417c, 0x6810, 0x70be,
-+ 0x7003, 0x0007, 0x2300, 0x0079, 0x3e45, 0x3e48, 0x3e75, 0x3e7d,
-+ 0x2200, 0x0079, 0x3e4b, 0x3e50, 0x3e4e, 0x3e69, 0x1078, 0x23eb,
-+ 0x7990, 0xa1ac, 0x0007, 0xa026, 0x2011, 0x0001, 0x1078, 0x42f1,
-+ 0x0079, 0x3e5a, 0x3e5f, 0x2459, 0x3b96, 0x3e67, 0x3e61, 0x0078,
-+ 0x472d, 0x70ab, 0x3e65, 0x0078, 0x2459, 0x0078, 0x3e5f, 0x1078,
-+ 0x23eb, 0xa684, 0x0010, 0x0040, 0x3e73, 0x1078, 0x419f, 0x0040,
-+ 0x3e73, 0x0078, 0x2459, 0x0078, 0x420c, 0x2200, 0x0079, 0x3e78,
-+ 0x3e7b, 0x3e7b, 0x3e7b, 0x1078, 0x23eb, 0x2200, 0x0079, 0x3e80,
-+ 0x3e83, 0x3e85, 0x3e85, 0x1078, 0x23eb, 0x78e4, 0xa084, 0x0008,
-+ 0x0040, 0x3e9a, 0x70a7, 0x3e8e, 0x0078, 0x4739, 0x2011, 0x0004,
-+ 0x1078, 0x42eb, 0x0079, 0x3e94, 0x3e9a, 0x2459, 0x3b96, 0x3e9a,
-+ 0x3ea4, 0x3ea8, 0x70ab, 0x3ea2, 0x2001, 0x0003, 0x1078, 0x4689,
-+ 0x0078, 0x4733, 0x0078, 0x472d, 0x70ab, 0x3e9a, 0x0078, 0x2459,
-+ 0x70ab, 0x3eac, 0x0078, 0x2459, 0x0078, 0x3ea2, 0x2300, 0x0079,
-+ 0x3eb1, 0x3eb6, 0x3eb8, 0x3eb4, 0x1078, 0x23eb, 0x70a4, 0x007a,
-+ 0x70a4, 0x007a, 0xa282, 0x0002, 0x0050, 0x3ec0, 0x1078, 0x23eb,
-+ 0xa684, 0x0200, 0x0040, 0x3eca, 0x1078, 0x46f8, 0x1078, 0x42d3,
-+ 0x1078, 0x46ff, 0x2300, 0x0079, 0x3ecd, 0x3ed0, 0x3ef4, 0x3f5a,
-+ 0xa286, 0x0001, 0x0040, 0x3ed6, 0x1078, 0x23eb, 0xa684, 0x0200,
-+ 0x0040, 0x3ede, 0x1078, 0x46f8, 0x1078, 0x46ff, 0x2001, 0x0001,
-+ 0x1078, 0x4691, 0x78b8, 0xa084, 0xc001, 0x0040, 0x3ef0, 0x7848,
-+ 0xa085, 0x0008, 0x784a, 0x7848, 0xa084, 0x0008, 0x00c0, 0x3eeb,
-+ 0x7003, 0x0000, 0x0078, 0x3b96, 0x2200, 0x0079, 0x3ef7, 0x3ef9,
-+ 0x3f2a, 0x70a7, 0x3efd, 0x0078, 0x4739, 0x2011, 0x000d, 0x1078,
-+ 0x42eb, 0x0079, 0x3f03, 0x3f0a, 0x2459, 0x3b96, 0x3f12, 0x3f1a,
-+ 0x3f20, 0x3f22, 0xa6b4, 0x00ff, 0xa6b5, 0x0400, 0x6eb6, 0x7e5a,
-+ 0x0078, 0x4727, 0xa6b4, 0x00ff, 0xa6b5, 0x0400, 0x6eb6, 0x7e5a,
-+ 0x0078, 0x4727, 0x70ab, 0x3f1e, 0x0078, 0x2459, 0x0078, 0x3f0a,
-+ 0x1078, 0x23eb, 0x70ab, 0x3f26, 0x0078, 0x2459, 0x1078, 0x473f,
-+ 0x0078, 0x2459, 0x70a7, 0x3f2e, 0x0078, 0x4739, 0x2011, 0x0012,
-+ 0x1078, 0x42eb, 0x0079, 0x3f34, 0x3f3a, 0x2459, 0x3b96, 0x3f46,
-+ 0x3f4e, 0x3f54, 0xa6b4, 0x00ff, 0xa6b5, 0x0400, 0x6eb6, 0x7e5a,
-+ 0x70b4, 0xa080, 0x00a6, 0x781a, 0x0078, 0x2459, 0xa6b4, 0x00ff,
-+ 0xa6b5, 0x0400, 0x6eb6, 0x7e5a, 0x0078, 0x4727, 0x70ab, 0x3f52,
-+ 0x0078, 0x2459, 0x0078, 0x3f3a, 0x70ab, 0x3f58, 0x0078, 0x2459,
-+ 0x0078, 0x3f46, 0xa286, 0x0001, 0x0040, 0x3f60, 0x1078, 0x23eb,
-+ 0x70a7, 0x3f64, 0x0078, 0x4739, 0x2011, 0x0015, 0x1078, 0x42eb,
-+ 0x0079, 0x3f6a, 0x3f6f, 0x2459, 0x3b96, 0x3f7d, 0x3f89, 0xa6b4,
-+ 0x00ff, 0xa6b5, 0x0400, 0x6eb6, 0x7e5a, 0x783b, 0x1301, 0x70b4,
-+ 0xa080, 0x00b4, 0x781a, 0x0078, 0x2459, 0xa6b4, 0x00ff, 0xa6b5,
-+ 0x0400, 0x6eb6, 0x7e5a, 0x70b4, 0xa080, 0x00a6, 0x781a, 0x0078,
-+ 0x2459, 0x70ab, 0x3f8d, 0x0078, 0x2459, 0x0078, 0x3f6f, 0xa282,
-+ 0x0003, 0x0050, 0x3f95, 0x1078, 0x23eb, 0x2300, 0x0079, 0x3f98,
-+ 0x3f9b, 0x3fd2, 0x402d, 0xa286, 0x0001, 0x0040, 0x3fa1, 0x1078,
-+ 0x23eb, 0x6804, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x3fae,
-+ 0x1078, 0x3af8, 0x7003, 0x0000, 0x0078, 0x3b96, 0x683b, 0x0000,
-+ 0x6837, 0x0000, 0xa684, 0x0200, 0x0040, 0x3fbc, 0x1078, 0x46f8,
-+ 0x1078, 0x42d3, 0x1078, 0x46ff, 0x2001, 0x0001, 0x1078, 0x4691,
-+ 0x78b8, 0xa084, 0xc001, 0x0040, 0x3fce, 0x7848, 0xa085, 0x0008,
-+ 0x784a, 0x7848, 0xa084, 0x0008, 0x00c0, 0x3fc9, 0x7003, 0x0000,
-+ 0x0078, 0x3b96, 0x2200, 0x0079, 0x3fd5, 0x3fd7, 0x4008, 0x70a7,
-+ 0x3fdb, 0x0078, 0x4739, 0x2011, 0x000d, 0x1078, 0x42eb, 0x0079,
-+ 0x3fe1, 0x3fe8, 0x2459, 0x3b96, 0x3ff0, 0x3ff8, 0x3ffe, 0x4000,
-+ 0xa6b4, 0x00ff, 0xa6b5, 0x0800, 0x6eb6, 0x7e5a, 0x0078, 0x4727,
-+ 0xa6b4, 0x00ff, 0xa6b5, 0x0800, 0x6eb6, 0x7e5a, 0x0078, 0x4727,
-+ 0x70ab, 0x3ffc, 0x0078, 0x2459, 0x0078, 0x3fe8, 0x1078, 0x23eb,
-+ 0x70ab, 0x4004, 0x0078, 0x2459, 0x1078, 0x473f, 0x0078, 0x2459,
-+ 0x70a7, 0x400c, 0x0078, 0x4739, 0x2011, 0x0005, 0x1078, 0x42eb,
-+ 0x0079, 0x4012, 0x4017, 0x2459, 0x3b96, 0x401f, 0x4027, 0xa6b4,
-+ 0x00ff, 0xa6b5, 0x0800, 0x6eb6, 0x7e5a, 0x0078, 0x4727, 0xa6b4,
-+ 0x00ff, 0xa6b5, 0x0800, 0x6eb6, 0x7e5a, 0x0078, 0x4727, 0x70ab,
-+ 0x402b, 0x0078, 0x2459, 0x0078, 0x4017, 0xa286, 0x0001, 0x0040,
-+ 0x4033, 0x1078, 0x23eb, 0x70a7, 0x4037, 0x0078, 0x4739, 0x2011,
-+ 0x0006, 0x1078, 0x42eb, 0x0079, 0x403d, 0x4042, 0x2459, 0x3b96,
-+ 0x4048, 0x4052, 0xa6b5, 0x0800, 0x6eb6, 0x7e5a, 0x0078, 0x4727,
-+ 0xa6b4, 0x00ff, 0xa6b5, 0x0800, 0x6eb6, 0xa6b5, 0x4000, 0x7e5a,
-+ 0x0078, 0x4727, 0x70ab, 0x4056, 0x0078, 0x2459, 0x0078, 0x4042,
-+ 0x2300, 0x0079, 0x405b, 0x4060, 0x405e, 0x405e, 0x1078, 0x23eb,
-+ 0x1078, 0x23eb, 0x2300, 0x71a8, 0xa005, 0x017a, 0x6810, 0x70be,
-+ 0xa282, 0x0003, 0x0050, 0x406e, 0x1078, 0x23eb, 0x2300, 0x0079,
-+ 0x4071, 0x4074, 0x4082, 0x40a4, 0xa684, 0x0200, 0x0040, 0x407c,
-+ 0x1078, 0x46f8, 0x1078, 0x46ff, 0x2001, 0x0001, 0x1078, 0x4691,
-+ 0x0078, 0x2459, 0xa296, 0x0002, 0x0040, 0x408b, 0x82ff, 0x0040,
-+ 0x408b, 0x1078, 0x23eb, 0x70a7, 0x408f, 0x0078, 0x4739, 0x2011,
-+ 0x0018, 0x1078, 0x42eb, 0x0079, 0x4095, 0x409a, 0x2459, 0x3b96,
-+ 0x409c, 0x409e, 0x0078, 0x4727, 0x0078, 0x4727, 0x70ab, 0x40a2,
-+ 0x0078, 0x2459, 0x0078, 0x409a, 0x2200, 0x0079, 0x40a7, 0x40a9,
-+ 0x40c2, 0x70a7, 0x40ad, 0x0078, 0x4739, 0x2011, 0x0017, 0x1078,
-+ 0x42eb, 0x0079, 0x40b3, 0x40b8, 0x2459, 0x3b96, 0x40ba, 0x40bc,
-+ 0x0078, 0x4727, 0x0078, 0x4727, 0x70ab, 0x40c0, 0x0078, 0x2459,
-+ 0x0078, 0x40b8, 0xa484, 0x8000, 0x00c0, 0x410c, 0xa684, 0x0100,
-+ 0x0040, 0x40d6, 0x1078, 0x46f8, 0x1078, 0x42d3, 0x1078, 0x46ff,
-+ 0x7848, 0xa085, 0x000c, 0x784a, 0x0078, 0x40da, 0x78d8, 0x78d2,
-+ 0x78dc, 0x78d6, 0xa6b4, 0xefff, 0x7e5a, 0x70a7, 0x40e1, 0x0078,
-+ 0x4739, 0x2011, 0x000d, 0x1078, 0x42eb, 0x0079, 0x40e7, 0x40ee,
-+ 0x2459, 0x3b96, 0x40ee, 0x40fc, 0x4102, 0x4104, 0xa684, 0x0100,
-+ 0x0040, 0x40fa, 0x1078, 0x46b6, 0x682c, 0x78d2, 0x6830, 0x78d6,
-+ 0x1078, 0x46f0, 0x0078, 0x4727, 0x70ab, 0x4100, 0x0078, 0x2459,
-+ 0x0078, 0x40ee, 0x1078, 0x23eb, 0x70ab, 0x4108, 0x0078, 0x2459,
-+ 0x1078, 0x473f, 0x0078, 0x2459, 0x1078, 0x46ff, 0x70ab, 0x4116,
-+ 0x2001, 0x0003, 0x1078, 0x4689, 0x0078, 0x4733, 0x1078, 0x46f0,
-+ 0x682c, 0x78d2, 0x6830, 0x78d6, 0x0078, 0x4727, 0x70b8, 0x6812,
-+ 0x70be, 0x8000, 0x70ba, 0x681b, 0x0000, 0xa684, 0x0008, 0x0040,
-+ 0x4141, 0x157e, 0x137e, 0x147e, 0x7890, 0x8004, 0x8004, 0x8004,
-+ 0x8004, 0xa084, 0x000f, 0x681a, 0x80ac, 0x789b, 0x0000, 0xaf80,
-+ 0x002b, 0x2098, 0xad80, 0x000b, 0x20a0, 0x53a5, 0x147f, 0x137f,
-+ 0x157f, 0xa6c4, 0x0f00, 0xa684, 0x0002, 0x00c0, 0x4150, 0x692c,
-+ 0x810d, 0x810d, 0x810d, 0xa184, 0x0007, 0x2008, 0x0078, 0x415f,
-+ 0x789b, 0x0010, 0x79ac, 0xa184, 0x0020, 0x0040, 0x415f, 0x017e,
-+ 0x2009, 0x0005, 0x2001, 0x3d00, 0x1078, 0x46c1, 0x017f, 0xa184,
-+ 0x001f, 0xa805, 0x6816, 0x1078, 0x3b69, 0x68be, 0xa684, 0x0004,
-+ 0x0040, 0x4170, 0xa18c, 0xff00, 0x78a8, 0xa084, 0x00ff, 0xa105,
-+ 0x682a, 0xa6b4, 0x00ff, 0x6000, 0xa084, 0x0008, 0x0040, 0x417a,
-+ 0xa6b5, 0x4000, 0x6eb6, 0x007c, 0x157e, 0x137e, 0x147e, 0x6918,
-+ 0x7890, 0x8004, 0x8004, 0x8004, 0x8004, 0xa084, 0x000f, 0x007e,
-+ 0xa100, 0x681a, 0x007f, 0x8000, 0x8004, 0x0040, 0x419b, 0x20a8,
-+ 0x8104, 0xa080, 0x000b, 0xad00, 0x20a0, 0x789b, 0x0000, 0xaf80,
-+ 0x002b, 0x2098, 0x53a5, 0x147f, 0x137f, 0x157f, 0x007c, 0x682c,
-+ 0xa084, 0x0020, 0x00c0, 0x41a7, 0x620c, 0x0078, 0x41a8, 0x6210,
-+ 0x6b18, 0x2300, 0xa202, 0x0040, 0x41c8, 0x2018, 0xa382, 0x000e,
-+ 0x0048, 0x41b8, 0x0040, 0x41b8, 0x2019, 0x000e, 0x0078, 0x41bc,
-+ 0x7858, 0xa084, 0xffef, 0x785a, 0x783b, 0x1b01, 0x7893, 0x0000,
-+ 0x7ba2, 0x70b4, 0xa080, 0x008e, 0x781a, 0xa085, 0x0001, 0x007c,
-+ 0x7858, 0xa084, 0xffef, 0x785a, 0x7893, 0x0000, 0xa006, 0x007c,
-+ 0x6904, 0xa18c, 0x00ff, 0xa196, 0x0007, 0x0040, 0x41dd, 0xa196,
-+ 0x000f, 0x0040, 0x41dd, 0x6807, 0x0117, 0x6914, 0x1078, 0x3b69,
-+ 0x6100, 0x8104, 0x00c8, 0x41f8, 0x601c, 0xa005, 0x0040, 0x41ec,
-+ 0x2001, 0x0800, 0x0078, 0x41fa, 0x0d7e, 0x6824, 0x007e, 0x1078,
-+ 0x4708, 0x007f, 0x6826, 0x2d00, 0x682e, 0x1078, 0x3af8, 0x0d7f,
-+ 0x2001, 0x0200, 0x6826, 0x8007, 0x789b, 0x000e, 0x78aa, 0x6820,
-+ 0xa085, 0x8000, 0x6822, 0x2031, 0x0400, 0x6eb6, 0x7e5a, 0x71b4,
-+ 0xa188, 0x0091, 0x791a, 0x007c, 0xa6c4, 0x0f00, 0xa684, 0x0002,
-+ 0x00c0, 0x4220, 0x692c, 0x810d, 0x810d, 0x810d, 0xa184, 0x0007,
-+ 0x2008, 0xa805, 0x6816, 0x1078, 0x3b69, 0x68be, 0x0078, 0x4223,
-+ 0x6914, 0x1078, 0x3b69, 0x6100, 0x8104, 0x00c8, 0x4280, 0xa184,
-+ 0x0300, 0x0040, 0x422f, 0x6807, 0x0117, 0x0078, 0x424d, 0x6004,
-+ 0xa005, 0x00c0, 0x4256, 0x6807, 0x0117, 0x601c, 0xa005, 0x00c0,
-+ 0x4243, 0x0d7e, 0x1078, 0x4708, 0x6827, 0x0034, 0x2d00, 0x682e,
-+ 0x1078, 0x3af8, 0x0d7f, 0xa684, 0x0004, 0x0040, 0x424d, 0x2031,
-+ 0x0400, 0x2001, 0x2800, 0x0078, 0x4251, 0x2031, 0x0400, 0x2001,
-+ 0x0800, 0x71b4, 0xa188, 0x0091, 0x0078, 0x42ae, 0x6018, 0xa005,
-+ 0x00c0, 0x4243, 0x601c, 0xa005, 0x00c0, 0x4243, 0x689f, 0x0000,
-+ 0x6827, 0x003d, 0xa684, 0x0001, 0x0040, 0x42bc, 0xd694, 0x00c0,
-+ 0x4279, 0x6100, 0xd1d4, 0x0040, 0x4279, 0x692c, 0x81ff, 0x0040,
-+ 0x42bc, 0xa186, 0x0003, 0x0040, 0x42bc, 0xa186, 0x0012, 0x0040,
-+ 0x42bc, 0xa6b5, 0x0800, 0x71b4, 0xa188, 0x00af, 0x0078, 0x42b7,
-+ 0x6807, 0x0117, 0x2031, 0x0400, 0x692c, 0xa18c, 0x00ff, 0xa186,
-+ 0x0012, 0x00c0, 0x4291, 0x2001, 0x42c9, 0x2009, 0x0001, 0x0078,
-+ 0x42a2, 0xa186, 0x0003, 0x00c0, 0x429b, 0x2001, 0x42ca, 0x2009,
-+ 0x0012, 0x0078, 0x42a2, 0x2001, 0x0200, 0x71b4, 0xa188, 0x0091,
-+ 0x0078, 0x42ae, 0x1078, 0x46db, 0x78a3, 0x0000, 0x681c, 0xa085,
-+ 0x0040, 0x681e, 0x71b4, 0xa188, 0x00df, 0xa006, 0x6826, 0x8007,
-+ 0x789b, 0x000e, 0x78aa, 0x6820, 0xa085, 0x8000, 0x6822, 0x6eb6,
-+ 0x7e5a, 0x791a, 0x0078, 0x2459, 0x6eb6, 0x1078, 0x3af8, 0x6810,
-+ 0x70be, 0x7003, 0x0007, 0x70a3, 0x0000, 0x704b, 0x0000, 0x0078,
-+ 0x2459, 0x0023, 0x0070, 0x0005, 0x0000, 0x0a00, 0x0000, 0x0000,
-+ 0x0025, 0x0000, 0x0000, 0x683b, 0x0000, 0x6837, 0x0000, 0xa684,
-+ 0x0200, 0x0040, 0x42ea, 0x78b8, 0xa08c, 0x001f, 0xa084, 0x8000,
-+ 0x0040, 0x42e3, 0x8108, 0x78d8, 0xa100, 0x6836, 0x78dc, 0xa081,
-+ 0x0000, 0x683a, 0x007c, 0x7990, 0x810f, 0xa5ac, 0x0007, 0x2021,
-+ 0x0000, 0xa480, 0x0010, 0x789a, 0x79a8, 0xa18c, 0x00ff, 0xa184,
-+ 0x0080, 0x00c0, 0x4319, 0xa182, 0x0020, 0x00c8, 0x4337, 0xa182,
-+ 0x0012, 0x00c8, 0x467b, 0x2100, 0x1079, 0x4307, 0x007c, 0x467b,
-+ 0x44e8, 0x467b, 0x467b, 0x4344, 0x4347, 0x4381, 0x43b7, 0x43eb,
-+ 0x43ee, 0x467b, 0x467b, 0x43a2, 0x4412, 0x444c, 0x467b, 0x467b,
-+ 0x4473, 0xa184, 0x0020, 0x00c0, 0x44a7, 0xa18c, 0x001f, 0x6814,
-+ 0xa084, 0x001f, 0xa106, 0x0040, 0x4334, 0x70b4, 0xa080, 0x00d2,
-+ 0x781a, 0x2001, 0x0014, 0x1078, 0x4691, 0x1078, 0x46ff, 0x7003,
-+ 0x0000, 0x2001, 0x0002, 0x007c, 0x2001, 0x0000, 0x007c, 0xa182,
-+ 0x0024, 0x00c8, 0x467b, 0xa184, 0x0003, 0x1079, 0x4307, 0x007c,
-+ 0x467b, 0x467b, 0x467b, 0x467b, 0x1078, 0x467b, 0x007c, 0x2200,
-+ 0x0079, 0x434a, 0x4476, 0x4476, 0x436e, 0x436e, 0x436e, 0x436e,
-+ 0x436e, 0x436e, 0x436e, 0x436e, 0x436c, 0x436e, 0x4363, 0x436e,
-+ 0x436e, 0x436e, 0x436e, 0x436e, 0x4376, 0x4379, 0x4476, 0x4379,
-+ 0x436e, 0x436e, 0x436e, 0x0c7e, 0x077e, 0x6f14, 0x1078, 0x36e2,
-+ 0x077f, 0x0c7f, 0x0078, 0x436e, 0x1078, 0x458b, 0x6827, 0x02b3,
-+ 0x2009, 0x000b, 0x2001, 0x4800, 0x0078, 0x44aa, 0x1078, 0x4670,
-+ 0x007c, 0x6827, 0x0093, 0x2009, 0x000b, 0x2001, 0x4800, 0x0078,
-+ 0x4492, 0x2d58, 0x6804, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0,
-+ 0x438b, 0x6807, 0x0117, 0x6827, 0x0002, 0x1078, 0x4708, 0x6827,
-+ 0x0036, 0x6932, 0x2d00, 0x682e, 0x0d7e, 0x1078, 0x3ac8, 0x1078,
-+ 0x44d0, 0x2b68, 0x1078, 0x3af8, 0x0d7f, 0x1078, 0x3af8, 0x2001,
-+ 0x0002, 0x007c, 0x1078, 0x44d0, 0x2001, 0x0017, 0x1078, 0x4691,
-+ 0x70a3, 0x0000, 0x2009, 0x5138, 0x200b, 0x0006, 0x70af, 0x0017,
-+ 0x2009, 0x0200, 0x1078, 0x3a06, 0x2001, 0x0001, 0x007c, 0x2200,
-+ 0x0079, 0x43ba, 0x4476, 0x44a7, 0x44a7, 0x44a7, 0x43db, 0x44b7,
-+ 0x43e3, 0x44b7, 0x44b7, 0x44ba, 0x44ba, 0x44bf, 0x44bf, 0x43d3,
-+ 0x43d3, 0x44a7, 0x44a7, 0x44b7, 0x44a7, 0x43e3, 0x4476, 0x43e3,
-+ 0x43e3, 0x43e3, 0x43e3, 0x6827, 0x0084, 0x2009, 0x000b, 0x2001,
-+ 0x4300, 0x0078, 0x44c9, 0x6827, 0x000d, 0x2009, 0x000b, 0x2001,
-+ 0x4300, 0x0078, 0x44aa, 0x6827, 0x0093, 0x2009, 0x000b, 0x2001,
-+ 0x4300, 0x0078, 0x4492, 0x2001, 0x0000, 0x007c, 0x2200, 0x0079,
-+ 0x43f1, 0x4476, 0x440a, 0x440a, 0x440a, 0x440a, 0x44b7, 0x44b7,
-+ 0x44b7, 0x44b7, 0x44b7, 0x44b7, 0x44b7, 0x44b7, 0x440a, 0x440a,
-+ 0x440a, 0x440a, 0x44b7, 0x440a, 0x440a, 0x44b7, 0x44b7, 0x44b7,
-+ 0x44b7, 0x4476, 0x6827, 0x0093, 0x2009, 0x000b, 0x2001, 0x4300,
-+ 0x0078, 0x4492, 0xa684, 0x0004, 0x00c0, 0x4426, 0x6804, 0xa084,
-+ 0x00ff, 0xa086, 0x0006, 0x00c0, 0x467b, 0x1078, 0x44d0, 0x6807,
-+ 0x0117, 0x1078, 0x3af8, 0x2001, 0x0002, 0x007c, 0x6000, 0xa084,
-+ 0x0004, 0x0040, 0x467b, 0x2d58, 0x6804, 0xa084, 0x00ff, 0xa086,
-+ 0x0006, 0x00c0, 0x4435, 0x6807, 0x0117, 0x6827, 0x0002, 0x1078,
-+ 0x4708, 0x6827, 0x0036, 0x6932, 0x2d00, 0x682e, 0x0d7e, 0x1078,
-+ 0x3ad7, 0x1078, 0x44d0, 0x2b68, 0x1078, 0x3af8, 0x0d7f, 0x1078,
-+ 0x3af8, 0x2001, 0x0002, 0x007c, 0x6000, 0xa084, 0x0004, 0x0040,
-+ 0x467b, 0x2d58, 0x6a04, 0xa294, 0x00ff, 0xa286, 0x0006, 0x00c0,
-+ 0x445b, 0x6807, 0x0117, 0x6827, 0x0002, 0x2d58, 0x1078, 0x4708,
-+ 0x6827, 0x0036, 0x6932, 0x2d00, 0x682e, 0x0d7e, 0x1078, 0x3ae7,
-+ 0x1078, 0x44d0, 0x2b68, 0x1078, 0x3af8, 0x0d7f, 0x1078, 0x3af8,
-+ 0x2001, 0x0002, 0x007c, 0x1078, 0x467b, 0x007c, 0x70b4, 0xa080,
-+ 0x00d2, 0x781a, 0x2001, 0x0001, 0x1078, 0x4691, 0x1078, 0x46ff,
-+ 0x7003, 0x0000, 0x2001, 0x0002, 0x007c, 0x1078, 0x46c1, 0x1078,
-+ 0x46f8, 0x1078, 0x42d3, 0x1078, 0x41d0, 0x1078, 0x46ff, 0x2001,
-+ 0x0001, 0x007c, 0x1078, 0x46c1, 0x1078, 0x46f8, 0x1078, 0x42d3,
-+ 0x70b4, 0xa080, 0x00d2, 0x781a, 0x2001, 0x0013, 0x1078, 0x4691,
-+ 0x1078, 0x46ff, 0x7003, 0x0000, 0x2001, 0x0002, 0x007c, 0x1078,
-+ 0x467b, 0x007c, 0x1078, 0x46c1, 0x1078, 0x46f8, 0x1078, 0x42d3,
-+ 0x1078, 0x41d0, 0x1078, 0x46ff, 0x2001, 0x0001, 0x007c, 0x2001,
-+ 0x0003, 0x007c, 0x1078, 0x458b, 0x2001, 0x0000, 0x007c, 0x0c7e,
-+ 0x077e, 0x6f14, 0x1078, 0x36e2, 0x077f, 0x0c7f, 0x2001, 0x0000,
-+ 0x007c, 0x1078, 0x46c1, 0x1078, 0x467b, 0x2001, 0x0006, 0x007c,
-+ 0x6904, 0xa18c, 0x00ff, 0xa186, 0x0007, 0x0040, 0x44db, 0xa186,
-+ 0x000f, 0x00c0, 0x44df, 0x1078, 0x46f8, 0x1078, 0x42d3, 0x70b4,
-+ 0xa080, 0x00d2, 0x781a, 0x1078, 0x46ff, 0x7003, 0x0000, 0x007c,
-+ 0x7aa8, 0xa294, 0x00ff, 0x78a8, 0xa084, 0x00ff, 0xa08a, 0x0004,
-+ 0x00c8, 0x467b, 0x1079, 0x44f5, 0x007c, 0x467b, 0x44f9, 0x467b,
-+ 0x4592, 0xa282, 0x0003, 0x0040, 0x4500, 0x1078, 0x467b, 0x007c,
-+ 0x7da8, 0xa5ac, 0x00ff, 0x7ca8, 0xa4a4, 0x00ff, 0x69b8, 0xa184,
-+ 0x0100, 0x0040, 0x453f, 0xa18c, 0xfeff, 0x69ba, 0x78a0, 0xa005,
-+ 0x00c0, 0x453f, 0xa4a4, 0x00ff, 0x0040, 0x4533, 0xa482, 0x000c,
-+ 0x0040, 0x451c, 0x00c8, 0x4526, 0x852b, 0x852b, 0x1078, 0x3760,
-+ 0x0040, 0x4526, 0x1078, 0x355b, 0x0078, 0x4535, 0x1078, 0x465d,
-+ 0x1078, 0x3586, 0x69b8, 0xa18d, 0x0100, 0x69ba, 0xa6b5, 0x1000,
-+ 0x7e5a, 0x0078, 0x4538, 0x1078, 0x3586, 0xa6b4, 0xefff, 0x7e5a,
-+ 0x70b4, 0xa080, 0x0091, 0x781a, 0x2001, 0x0001, 0x007c, 0x0c7e,
-+ 0x1078, 0x457f, 0x6200, 0xd2e4, 0x0040, 0x4570, 0x6208, 0x8217,
-+ 0xa294, 0x00ff, 0xa282, 0x000c, 0x0048, 0x4552, 0x0040, 0x4552,
-+ 0x2011, 0x000c, 0x2400, 0xa202, 0x00c8, 0x4557, 0x2220, 0x6208,
-+ 0xa294, 0x00ff, 0x701c, 0xa202, 0x00c8, 0x455f, 0x721c, 0x2200,
-+ 0xa502, 0x00c8, 0x4564, 0x2228, 0x1078, 0x4661, 0x852b, 0x852b,
-+ 0x1078, 0x3760, 0x0040, 0x4570, 0x1078, 0x3562, 0x0078, 0x4574,
-+ 0x1078, 0x465d, 0x1078, 0x358d, 0xa6b5, 0x1000, 0x7e5a, 0x70b4,
-+ 0xa080, 0x00be, 0x781a, 0x2001, 0x0004, 0x0c7f, 0x007c, 0x007e,
-+ 0x6814, 0x8007, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa0e0,
-+ 0x5380, 0x007f, 0x007c, 0x0c7e, 0x1078, 0x457f, 0x1078, 0x358d,
-+ 0x0c7f, 0x007c, 0xa282, 0x0002, 0x00c0, 0x467b, 0x7aa8, 0xa294,
-+ 0x00ff, 0x69b8, 0xa184, 0x0200, 0x0040, 0x45c9, 0xa18c, 0xfdff,
-+ 0x69ba, 0x78a0, 0xa005, 0x00c0, 0x45c9, 0xa282, 0x0002, 0x00c8,
-+ 0x369d, 0x1078, 0x4627, 0x1078, 0x362b, 0x1078, 0x3586, 0xa684,
-+ 0x0100, 0x0040, 0x45bf, 0x682c, 0xa084, 0x0001, 0x0040, 0x45bf,
-+ 0xc6fc, 0x7888, 0xa084, 0x0040, 0x0040, 0x45bf, 0xc6fd, 0xa6b5,
-+ 0x1000, 0x7e5a, 0x70b4, 0xa080, 0x0091, 0x781a, 0x2001, 0x0001,
-+ 0x007c, 0x0c7e, 0x1078, 0x457f, 0xa284, 0xfffe, 0x0040, 0x45d4,
-+ 0x2011, 0x0001, 0x0078, 0x45d8, 0xa284, 0x0001, 0x0040, 0x45de,
-+ 0x6100, 0xd1ec, 0x00c0, 0x45de, 0x2011, 0x0000, 0x1078, 0x4619,
-+ 0x1078, 0x3632, 0x1078, 0x358d, 0xa684, 0x0100, 0x0040, 0x45f4,
-+ 0x682c, 0xa084, 0x0001, 0x0040, 0x45f4, 0xc6fc, 0x7888, 0xa084,
-+ 0x0040, 0x0040, 0x45f4, 0xc6fd, 0xa6b5, 0x1000, 0x7e5a, 0x70b4,
-+ 0xa080, 0x00be, 0x781a, 0x2001, 0x0004, 0x0c7f, 0x007c, 0x0c7e,
-+ 0x2960, 0x6000, 0x2011, 0x0001, 0xa084, 0x2000, 0x00c0, 0x460a,
-+ 0x2011, 0x0000, 0x78ab, 0x0001, 0x78ab, 0x0002, 0x78ab, 0x0003,
-+ 0x7aaa, 0xa8c0, 0x0004, 0x68b8, 0xa085, 0x0200, 0x68ba, 0x0c7f,
-+ 0x007c, 0x789b, 0x0018, 0x78ab, 0x0001, 0x78ab, 0x0002, 0x78ab,
-+ 0x0003, 0x7aaa, 0x789b, 0x0081, 0x78ab, 0x0004, 0x007c, 0x0c7e,
-+ 0x7054, 0x2060, 0x6000, 0xa084, 0x1000, 0x00c0, 0x4635, 0x2029,
-+ 0x0032, 0x2021, 0x0000, 0x0078, 0x4655, 0x6508, 0xa5ac, 0x00ff,
-+ 0x7018, 0xa086, 0x0028, 0x00c0, 0x4645, 0xa582, 0x0019, 0x00c8,
-+ 0x464b, 0x2029, 0x0019, 0x0078, 0x464b, 0xa582, 0x000c, 0x00c8,
-+ 0x464b, 0x2029, 0x000c, 0x6408, 0x8427, 0xa4a4, 0x00ff, 0xa482,
-+ 0x000c, 0x0048, 0x4655, 0x2021, 0x000c, 0x1078, 0x4661, 0x68b8,
-+ 0xa085, 0x0100, 0x68ba, 0x0c7f, 0x007c, 0x2021, 0x0000, 0x2029,
-+ 0x0032, 0x789b, 0x0018, 0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab,
-+ 0x0001, 0x7daa, 0x7caa, 0x789b, 0x0081, 0x78ab, 0x0005, 0x007c,
-+ 0x2001, 0x0003, 0x1078, 0x4689, 0x70b4, 0xa080, 0x00be, 0x781a,
-+ 0x2001, 0x0005, 0x007c, 0x2001, 0x0007, 0x1078, 0x4689, 0xa6b5,
-+ 0x1000, 0x7e5a, 0x70b4, 0xa080, 0x00be, 0x781a, 0x2001, 0x0004,
-+ 0x007c, 0x789b, 0x0018, 0x78aa, 0x789b, 0x0081, 0x78ab, 0x0001,
-+ 0x007c, 0x6904, 0xa18c, 0x00ff, 0xa196, 0x0007, 0x0040, 0x469f,
-+ 0xa196, 0x000f, 0x0040, 0x469f, 0x1078, 0x195a, 0x007c, 0x6924,
-+ 0xa194, 0x003f, 0x00c0, 0x46a8, 0xa18c, 0xffc0, 0xa105, 0x6826,
-+ 0x1078, 0x3af8, 0x691c, 0xa184, 0x0100, 0x0040, 0x46b5, 0x6914,
-+ 0x1078, 0x3b69, 0x6204, 0x8210, 0x6206, 0x007c, 0x692c, 0x6834,
-+ 0x682e, 0xa112, 0x6930, 0x6838, 0x6832, 0xa11b, 0xa200, 0xa301,
-+ 0x007c, 0x0c7e, 0xade0, 0x0018, 0x6003, 0x0070, 0x6106, 0x600b,
-+ 0x0000, 0x600f, 0x0a00, 0x6013, 0x0000, 0x6017, 0x0000, 0x8007,
-+ 0x601a, 0x601f, 0x0000, 0x6023, 0x0000, 0x0c7f, 0x6824, 0xa085,
-+ 0x0080, 0x6826, 0x007c, 0x157e, 0x137e, 0x147e, 0x2098, 0xaf80,
-+ 0x002d, 0x20a0, 0x81ac, 0x0040, 0x46e6, 0x53a6, 0xa184, 0x0001,
-+ 0x0040, 0x46ec, 0x3304, 0x78be, 0x147f, 0x137f, 0x157f, 0x007c,
-+ 0x70b0, 0xa005, 0x10c0, 0x23eb, 0x70b3, 0x8000, 0x0078, 0x4a3a,
-+ 0x71b0, 0x81ff, 0x0040, 0x46fe, 0x1078, 0x4b30, 0x007c, 0x71b0,
-+ 0x81ff, 0x0040, 0x4707, 0x70b3, 0x0000, 0x1078, 0x4776, 0x007c,
-+ 0x0c7e, 0x0d7e, 0x1078, 0x1937, 0x0c7f, 0x157e, 0x137e, 0x147e,
-+ 0x2da0, 0x2c98, 0x20a9, 0x0031, 0x53a3, 0x147f, 0x137f, 0x157f,
-+ 0x6807, 0x010d, 0x680b, 0x0000, 0x7004, 0x8007, 0x681a, 0x6823,
-+ 0x0000, 0x681f, 0x0000, 0x689f, 0x0000, 0x0c7f, 0x007c, 0x70b4,
-+ 0xa080, 0x0091, 0x781a, 0x0078, 0x2459, 0x70b4, 0xa080, 0x0081,
-+ 0x781a, 0x0078, 0x2459, 0x70b4, 0xa080, 0x00be, 0x781a, 0x0078,
-+ 0x2459, 0x70b4, 0xa080, 0x00c8, 0x781a, 0x0078, 0x2459, 0x6904,
-+ 0xa18c, 0x00ff, 0xa196, 0x0007, 0x0040, 0x474c, 0xa196, 0x000f,
-+ 0x0040, 0x474c, 0x6807, 0x0117, 0x2001, 0x0200, 0x6826, 0x8007,
-+ 0x789b, 0x000e, 0x78aa, 0x6820, 0xa085, 0x8000, 0x6822, 0x2031,
-+ 0x0400, 0x6eb6, 0x7e5a, 0x71b4, 0xa188, 0x0091, 0x791a, 0x007c,
-+ 0x1078, 0x46ff, 0x7848, 0xa085, 0x000c, 0x784a, 0x70b4, 0xa080,
-+ 0x00d2, 0x781a, 0x2009, 0x000b, 0x2001, 0x4400, 0x1078, 0x46c1,
-+ 0x2001, 0x0013, 0x1078, 0x4691, 0x0078, 0x3b96, 0x127e, 0x2091,
-+ 0x2200, 0x2049, 0x4776, 0x7000, 0x7204, 0xa205, 0x720c, 0xa215,
-+ 0x7008, 0xa084, 0xfff7, 0xa205, 0x0040, 0x4788, 0x0078, 0x478d,
-+ 0x7003, 0x0000, 0x127f, 0x2000, 0x007c, 0x7000, 0xa084, 0x0001,
-+ 0x00c0, 0x47bb, 0x7108, 0x8103, 0x00c8, 0x479a, 0x1078, 0x48bd,
-+ 0x0078, 0x4792, 0x700c, 0xa08c, 0x00ff, 0x0040, 0x47bb, 0x7004,
-+ 0x8004, 0x00c8, 0x47b2, 0x7014, 0xa005, 0x00c0, 0x47ae, 0x7010,
-+ 0xa005, 0x0040, 0x47b2, 0xa102, 0x00c8, 0x4792, 0x7007, 0x0010,
-+ 0x0078, 0x47bb, 0x8aff, 0x0040, 0x47bb, 0x1078, 0x4b07, 0x00c0,
-+ 0x47b5, 0x0040, 0x4792, 0x1078, 0x4846, 0x7003, 0x0000, 0x127f,
-+ 0x2000, 0x007c, 0x017e, 0x6104, 0xa18c, 0x00ff, 0xa186, 0x0007,
-+ 0x0040, 0x47ce, 0xa18e, 0x000f, 0x00c0, 0x47d1, 0x6040, 0x0078,
-+ 0x47d2, 0x6428, 0x017f, 0x84ff, 0x0040, 0x47fc, 0x2c70, 0x7004,
-+ 0xa0bc, 0x000f, 0xa7b8, 0x480c, 0x273c, 0x87fb, 0x00c0, 0x47ea,
-+ 0x0048, 0x47e4, 0x1078, 0x23eb, 0x609c, 0xa075, 0x0040, 0x47fc,
-+ 0x0078, 0x47d7, 0x2704, 0xae68, 0x6808, 0xa630, 0x680c, 0xa529,
-+ 0x8421, 0x0040, 0x47fc, 0x8738, 0x2704, 0xa005, 0x00c0, 0x47eb,
-+ 0x709c, 0xa075, 0x00c0, 0x47d7, 0x007c, 0x0000, 0x0005, 0x0009,
-+ 0x000d, 0x0011, 0x0015, 0x0019, 0x001d, 0x0000, 0x0003, 0x0009,
-+ 0x000f, 0x0015, 0x001b, 0x0000, 0x0000, 0x4801, 0x47fe, 0x0000,
-+ 0x0000, 0x8000, 0x0000, 0x4801, 0x0000, 0x4809, 0x4806, 0x0000,
-+ 0x0000, 0x0000, 0x0000, 0x4809, 0x0000, 0x4804, 0x4804, 0x0000,
-+ 0x0000, 0x8000, 0x0000, 0x4804, 0x0000, 0x480a, 0x480a, 0x0000,
-+ 0x0000, 0x0000, 0x0000, 0x480a, 0x127e, 0x2091, 0x2200, 0x2079,
-+ 0x5100, 0x2071, 0x0010, 0x7007, 0x000a, 0x7007, 0x0002, 0x7003,
-+ 0x0000, 0x2071, 0x0020, 0x7007, 0x000a, 0x7007, 0x0002, 0x7003,
-+ 0x0000, 0x2049, 0x0000, 0x127f, 0x2000, 0x007c, 0x2049, 0x4846,
-+ 0x2019, 0x0000, 0x7004, 0x8004, 0x00c8, 0x4899, 0x7007, 0x0012,
-+ 0x7108, 0x7008, 0xa106, 0x00c0, 0x4850, 0xa184, 0x01e0, 0x0040,
-+ 0x485b, 0x1078, 0x23eb, 0x2001, 0x04fd, 0x2004, 0xa082, 0x0005,
-+ 0x00c8, 0x4866, 0xa184, 0x4000, 0x00c0, 0x4850, 0xa19c, 0x300c,
-+ 0xa386, 0x2004, 0x0040, 0x4874, 0xa386, 0x0008, 0x0040, 0x487f,
-+ 0xa386, 0x200c, 0x00c0, 0x4850, 0x7200, 0x8204, 0x0048, 0x487f,
-+ 0x730c, 0xa384, 0x00ff, 0x0040, 0x487f, 0x1078, 0x23eb, 0x7007,
-+ 0x0012, 0x7000, 0xa084, 0x0001, 0x00c0, 0x4899, 0x7008, 0xa084,
-+ 0x01e0, 0x00c0, 0x4899, 0x7310, 0x7014, 0xa305, 0x0040, 0x4899,
-+ 0x710c, 0xa184, 0x0300, 0x00c0, 0x4899, 0xa184, 0x00ff, 0x00c0,
-+ 0x4846, 0x7007, 0x0012, 0x7007, 0x0008, 0x7004, 0xa084, 0x0008,
-+ 0x00c0, 0x489d, 0x7007, 0x0012, 0x7108, 0x8103, 0x0048, 0x48a2,
-+ 0x7003, 0x0000, 0x2049, 0x0000, 0x007c, 0x107e, 0x007e, 0x127e,
-+ 0x157e, 0x2091, 0x2200, 0x7108, 0x1078, 0x48bd, 0x157f, 0x127f,
-+ 0x2091, 0x8001, 0x007f, 0x107f, 0x007c, 0x7204, 0x7500, 0x730c,
-+ 0xa384, 0x0300, 0x00c0, 0x48e4, 0xa184, 0x01e0, 0x00c0, 0x4908,
-+ 0x7108, 0xa184, 0x01e0, 0x00c0, 0x4908, 0x2001, 0x04fd, 0x2004,
-+ 0xa082, 0x0005, 0x00c8, 0x48d8, 0xa184, 0x4000, 0x00c0, 0x48c8,
-+ 0xa184, 0x0007, 0x0079, 0x48dc, 0x48e6, 0x48f8, 0x48e4, 0x48f8,
-+ 0x48e4, 0x4944, 0x48e4, 0x4942, 0x1078, 0x23eb, 0x7004, 0xa084,
-+ 0x0010, 0xa085, 0x0002, 0x7006, 0x8aff, 0x00c0, 0x48f3, 0x2049,
-+ 0x0000, 0x0078, 0x48f7, 0x1078, 0x4b07, 0x00c0, 0x48f3, 0x007c,
-+ 0x7004, 0xa084, 0x0010, 0xa085, 0x0002, 0x7006, 0x8aff, 0x00c0,
-+ 0x4903, 0x0078, 0x4907, 0x1078, 0x4b07, 0x00c0, 0x4903, 0x007c,
-+ 0x7007, 0x0012, 0x7108, 0x00e0, 0x490b, 0x2091, 0x6000, 0x00e0,
-+ 0x490f, 0x2091, 0x6000, 0x7007, 0x0012, 0x7007, 0x0008, 0x7004,
-+ 0xa084, 0x0008, 0x00c0, 0x4917, 0x7007, 0x0012, 0x7108, 0x8103,
-+ 0x0048, 0x491c, 0x7003, 0x0000, 0x7000, 0xa005, 0x00c0, 0x4930,
-+ 0x7004, 0xa005, 0x00c0, 0x4930, 0x700c, 0xa005, 0x0040, 0x4932,
-+ 0x0078, 0x4913, 0x2049, 0x0000, 0x1078, 0x3809, 0x6818, 0xa084,
-+ 0x8000, 0x0040, 0x493d, 0x681b, 0x0002, 0x007c, 0x1078, 0x23eb,
-+ 0x1078, 0x23eb, 0x1078, 0x49a0, 0x7210, 0x7114, 0x700c, 0xa09c,
-+ 0x00ff, 0x2800, 0xa300, 0xa211, 0xa189, 0x0000, 0x1078, 0x49a0,
-+ 0x2704, 0x2c58, 0xac60, 0x6308, 0x2200, 0xa322, 0x630c, 0x2100,
-+ 0xa31b, 0x2400, 0xa305, 0x0040, 0x4967, 0x00c8, 0x4967, 0x8412,
-+ 0x8210, 0x830a, 0xa189, 0x0000, 0x2b60, 0x0078, 0x494e, 0x2b60,
-+ 0x8a07, 0x007e, 0x6004, 0xa084, 0x0008, 0x0040, 0x4973, 0xa7ba,
-+ 0x4806, 0x0078, 0x4975, 0xa7ba, 0x47fe, 0x007f, 0xa73d, 0x2c00,
-+ 0x6886, 0x6f8a, 0x6c92, 0x6b8e, 0x7007, 0x0012, 0x1078, 0x4846,
-+ 0x007c, 0x8738, 0x2704, 0xa005, 0x00c0, 0x4994, 0x609c, 0xa005,
-+ 0x0040, 0x499d, 0x2060, 0x6004, 0xa084, 0x000f, 0xa080, 0x480c,
-+ 0x203c, 0x87fb, 0x1040, 0x23eb, 0x8a51, 0x0040, 0x499c, 0x7008,
-+ 0xa084, 0x0003, 0xa086, 0x0003, 0x007c, 0x2051, 0x0000, 0x007c,
-+ 0x8a50, 0x8739, 0x2704, 0xa004, 0x00c0, 0x49b4, 0x6000, 0xa064,
-+ 0x00c0, 0x49ab, 0x2d60, 0x6004, 0xa084, 0x000f, 0xa080, 0x481c,
-+ 0x203c, 0x87fb, 0x1040, 0x23eb, 0x007c, 0x127e, 0x0d7e, 0x2091,
-+ 0x2200, 0x0d7f, 0x6884, 0x2060, 0x6888, 0x6b8c, 0x6c90, 0x8057,
-+ 0xaad4, 0x00ff, 0xa084, 0x00ff, 0x007e, 0x6804, 0xa084, 0x0008,
-+ 0x007f, 0x0040, 0x49cf, 0xa0b8, 0x4806, 0x0078, 0x49d1, 0xa0b8,
-+ 0x47fe, 0x7e08, 0xa6b5, 0x000c, 0x6904, 0xa18c, 0x00ff, 0xa186,
-+ 0x0007, 0x0040, 0x49df, 0xa18e, 0x000f, 0x00c0, 0x49e8, 0x681c,
-+ 0xa084, 0x0040, 0x0040, 0x49ef, 0xa6b5, 0x0001, 0x0078, 0x49ef,
-+ 0x681c, 0xa084, 0x0040, 0x0040, 0x49ef, 0xa6b5, 0x0001, 0x7007,
-+ 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, 0x49f1, 0x2400, 0xa305,
-+ 0x00c0, 0x49fc, 0x0078, 0x4a22, 0x2c58, 0x2704, 0x6104, 0xac60,
-+ 0x6000, 0xa400, 0x701a, 0x6004, 0xa301, 0x701e, 0xa184, 0x0008,
-+ 0x0040, 0x4a12, 0x6010, 0xa081, 0x0000, 0x7022, 0x6014, 0xa081,
-+ 0x0000, 0x7026, 0x6208, 0x2400, 0xa202, 0x7012, 0x620c, 0x2300,
-+ 0xa203, 0x7016, 0x7602, 0x7007, 0x0001, 0x2b60, 0x1078, 0x4981,
-+ 0x0078, 0x4a24, 0x1078, 0x4b07, 0x00c0, 0x4a22, 0x127f, 0x2000,
-+ 0x007c, 0x127e, 0x0d7e, 0x2091, 0x2200, 0x0d7f, 0x7007, 0x0004,
-+ 0x7004, 0xa084, 0x0004, 0x00c0, 0x4a30, 0x7003, 0x0008, 0x127f,
-+ 0x2000, 0x007c, 0x127e, 0x0d7e, 0x2091, 0x2200, 0x0d7f, 0x2049,
-+ 0x4a3a, 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, 0x4a43,
-+ 0x7e08, 0xa6b5, 0x000c, 0x6904, 0xa18c, 0x00ff, 0xa186, 0x0007,
-+ 0x0040, 0x4a56, 0xa18e, 0x000f, 0x00c0, 0x4a61, 0x681c, 0xa084,
-+ 0x0040, 0x0040, 0x4a5d, 0xa6b5, 0x0001, 0x6840, 0x2050, 0x0078,
-+ 0x4a6a, 0x681c, 0xa084, 0x0020, 0x00c0, 0x4a68, 0xa6b5, 0x0001,
-+ 0x6828, 0x2050, 0x2d60, 0x6004, 0xa0bc, 0x000f, 0xa7b8, 0x480c,
-+ 0x273c, 0x87fb, 0x00c0, 0x4a7e, 0x0048, 0x4a78, 0x1078, 0x23eb,
-+ 0x689c, 0xa065, 0x0040, 0x4a82, 0x0078, 0x4a6b, 0x1078, 0x4b07,
-+ 0x00c0, 0x4a7e, 0x127f, 0x2000, 0x007c, 0x127e, 0x007e, 0x017e,
-+ 0x0d7e, 0x2091, 0x2200, 0x0d7f, 0x037f, 0x047f, 0x7e08, 0xa6b5,
-+ 0x000c, 0x6904, 0xa18c, 0x00ff, 0xa186, 0x0007, 0x0040, 0x4a9c,
-+ 0xa18e, 0x000f, 0x00c0, 0x4aa5, 0x681c, 0xa084, 0x0040, 0x0040,
-+ 0x4aac, 0xa6b5, 0x0001, 0x0078, 0x4aac, 0x681c, 0xa084, 0x0040,
-+ 0x0040, 0x4aac, 0xa6b5, 0x0001, 0x2049, 0x4a85, 0x017e, 0x6904,
-+ 0xa18c, 0x00ff, 0xa186, 0x0007, 0x0040, 0x4aba, 0xa18e, 0x000f,
-+ 0x00c0, 0x4abd, 0x6840, 0x0078, 0x4abe, 0x6828, 0x017f, 0xa055,
-+ 0x0040, 0x4b04, 0x2d70, 0x2e60, 0x7004, 0xa0bc, 0x000f, 0xa7b8,
-+ 0x480c, 0x273c, 0x87fb, 0x00c0, 0x4ad8, 0x0048, 0x4ad1, 0x1078,
-+ 0x23eb, 0x709c, 0xa075, 0x2060, 0x0040, 0x4b04, 0x0078, 0x4ac4,
-+ 0x2704, 0xae68, 0x6808, 0xa422, 0x680c, 0xa31b, 0x0048, 0x4af1,
-+ 0x8a51, 0x00c0, 0x4ae5, 0x1078, 0x23eb, 0x8738, 0x2704, 0xa005,
-+ 0x00c0, 0x4ad9, 0x709c, 0xa075, 0x2060, 0x0040, 0x4b04, 0x0078,
-+ 0x4ac4, 0x8422, 0x8420, 0x831a, 0xa399, 0x0000, 0x6908, 0x2400,
-+ 0xa122, 0x690c, 0x2300, 0xa11b, 0x00c8, 0x4b00, 0x1078, 0x23eb,
-+ 0x2071, 0x0020, 0x0078, 0x49ef, 0x127f, 0x2000, 0x007c, 0x7008,
-+ 0xa084, 0x0003, 0xa086, 0x0003, 0x0040, 0x4b2f, 0x2704, 0xac08,
-+ 0x2104, 0x701a, 0x8108, 0x2104, 0x701e, 0x8108, 0x2104, 0x7012,
-+ 0x8108, 0x2104, 0x7016, 0x6004, 0xa084, 0x0008, 0x0040, 0x4b26,
-+ 0x8108, 0x2104, 0x7022, 0x8108, 0x2104, 0x7026, 0x7602, 0x7004,
-+ 0xa084, 0x0010, 0xa085, 0x0001, 0x7006, 0x1078, 0x4981, 0x007c,
-+ 0x127e, 0x007e, 0x0d7e, 0x2091, 0x2200, 0x2049, 0x4b30, 0x0d7f,
-+ 0x087f, 0x7108, 0xa184, 0x0003, 0x00c0, 0x4b5a, 0x017e, 0x6904,
-+ 0xa18c, 0x00ff, 0xa186, 0x0007, 0x0040, 0x4b4a, 0xa18e, 0x000f,
-+ 0x00c0, 0x4b4d, 0x6840, 0x0078, 0x4b4e, 0x6828, 0x017f, 0xa005,
-+ 0x0040, 0x4b68, 0x0078, 0x478d, 0x0020, 0x4b5a, 0x1078, 0x4944,
-+ 0x0078, 0x4b68, 0x00a0, 0x4b61, 0x7108, 0x1078, 0x48bd, 0x0078,
-+ 0x4b39, 0x7007, 0x0010, 0x00a0, 0x4b63, 0x7108, 0x1078, 0x48bd,
-+ 0x7008, 0xa086, 0x0008, 0x00c0, 0x4b39, 0x7000, 0xa005, 0x00c0,
-+ 0x4b39, 0x7003, 0x0000, 0x2049, 0x0000, 0x127f, 0x2000, 0x007c,
-+ 0x127e, 0x147e, 0x137e, 0x157e, 0x0c7e, 0x0d7e, 0x2091, 0x2200,
-+ 0x0d7f, 0x2049, 0x4b78, 0xad80, 0x0011, 0x20a0, 0x2099, 0x0031,
-+ 0x700c, 0xa084, 0x00ff, 0x682a, 0x7007, 0x0008, 0x7007, 0x0002,
-+ 0x7003, 0x0001, 0x0040, 0x4b97, 0x8000, 0x80ac, 0x53a5, 0x7007,
-+ 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, 0x4b99, 0x0c7f, 0x2049,
-+ 0x0000, 0x7003, 0x0000, 0x157f, 0x137f, 0x147f, 0x127f, 0x2000,
-+ 0x007c, 0x2091, 0x6000, 0x2091, 0x8000, 0x78cc, 0xa005, 0x0040,
-+ 0x4bc0, 0x7994, 0x70d0, 0xa106, 0x00c0, 0x4bc0, 0x7804, 0xa005,
-+ 0x0040, 0x4bc0, 0x7807, 0x0000, 0x0068, 0x4bc0, 0x2091, 0x4080,
-+ 0x7820, 0x8001, 0x7822, 0x00c0, 0x4c1b, 0x7824, 0x7822, 0x2069,
-+ 0x5140, 0x6800, 0xa084, 0x0007, 0x0040, 0x4bde, 0xa086, 0x0002,
-+ 0x0040, 0x4bde, 0x6834, 0xa00d, 0x0040, 0x4bde, 0x2104, 0xa005,
-+ 0x0040, 0x4bde, 0x8001, 0x200a, 0x0040, 0x4cc3, 0x7848, 0xa005,
-+ 0x0040, 0x4bec, 0x8001, 0x784a, 0x00c0, 0x4bec, 0x2009, 0x0102,
-+ 0x6844, 0x200a, 0x1078, 0x21d2, 0x6890, 0xa005, 0x0040, 0x4bf8,
-+ 0x8001, 0x6892, 0x00c0, 0x4bf8, 0x686f, 0x0000, 0x6873, 0x0001,
-+ 0x2061, 0x5400, 0x20a9, 0x0100, 0x2009, 0x0002, 0x6034, 0xa005,
-+ 0x0040, 0x4c0e, 0x8001, 0x6036, 0x00c0, 0x4c0e, 0x6010, 0xa005,
-+ 0x0040, 0x4c0e, 0x017e, 0x1078, 0x21d2, 0x017f, 0xace0, 0x0010,
-+ 0x0070, 0x4c14, 0x0078, 0x4bfe, 0x8109, 0x0040, 0x4c1b, 0x20a9,
-+ 0x0100, 0x0078, 0x4bfe, 0x1078, 0x4c28, 0x1078, 0x4c4d, 0x2009,
-+ 0x5151, 0x2104, 0x2009, 0x0102, 0x200a, 0x2091, 0x8001, 0x007c,
-+ 0x7834, 0x8001, 0x7836, 0x00c0, 0x4c4c, 0x7838, 0x7836, 0x2091,
-+ 0x8000, 0x7844, 0xa005, 0x00c0, 0x4c37, 0x2001, 0x0101, 0x8001,
-+ 0x7846, 0xa080, 0x7400, 0x2040, 0x2004, 0xa065, 0x0040, 0x4c4c,
-+ 0x6024, 0xa005, 0x0040, 0x4c48, 0x8001, 0x6026, 0x0040, 0x4c7c,
-+ 0x6000, 0x2c40, 0x0078, 0x4c3d, 0x007c, 0x7828, 0x8001, 0x782a,
-+ 0x00c0, 0x4c7b, 0x782c, 0x782a, 0x7830, 0xa005, 0x00c0, 0x4c5a,
-+ 0x2001, 0x0200, 0x8001, 0x7832, 0x8003, 0x8003, 0x8003, 0x8003,
-+ 0xa090, 0x5400, 0xa298, 0x0002, 0x2304, 0xa084, 0x0008, 0x0040,
-+ 0x4c7b, 0xa290, 0x0009, 0x2204, 0xa005, 0x0040, 0x4c73, 0x8001,
-+ 0x2012, 0x00c0, 0x4c7b, 0x2304, 0xa084, 0xfff7, 0xa085, 0x0080,
-+ 0x201a, 0x1078, 0x21d2, 0x007c, 0x2069, 0x5140, 0x6800, 0xa005,
-+ 0x0040, 0x4c86, 0x6848, 0xac06, 0x0040, 0x4cc3, 0x601b, 0x0006,
-+ 0x60b4, 0xa084, 0x3f00, 0x601e, 0x6020, 0xa084, 0x00ff, 0xa085,
-+ 0x0060, 0x6022, 0x6000, 0x2042, 0x6714, 0x6f82, 0x1078, 0x1973,
-+ 0x6818, 0xa005, 0x0040, 0x4c9e, 0x8001, 0x681a, 0x6808, 0xa084,
-+ 0xffef, 0x680a, 0x6810, 0x8001, 0x00d0, 0x4ca8, 0x1078, 0x23eb,
-+ 0x6812, 0x602f, 0x0000, 0x6033, 0x0000, 0x2c68, 0x1078, 0x1c70,
-+ 0x2069, 0x5140, 0x7944, 0xa184, 0x0100, 0x2001, 0x0006, 0x686e,
-+ 0x00c0, 0x4cbe, 0x6986, 0x2001, 0x0004, 0x686e, 0x1078, 0x21cd,
-+ 0x2091, 0x8001, 0x007c, 0x2069, 0x0100, 0x2009, 0x5140, 0x2104,
-+ 0xa084, 0x0007, 0x0040, 0x4d1f, 0xa086, 0x0007, 0x00c0, 0x4cd9,
-+ 0x0d7e, 0x2009, 0x5152, 0x216c, 0x1078, 0x3a4e, 0x0d7f, 0x0078,
-+ 0x4d1f, 0x2009, 0x5152, 0x2164, 0x1078, 0x2396, 0x601b, 0x0006,
-+ 0x6858, 0xa084, 0x3f00, 0x601e, 0x6020, 0xa084, 0x00ff, 0xa085,
-+ 0x0048, 0x6022, 0x602f, 0x0000, 0x6033, 0x0000, 0x6830, 0xa084,
-+ 0x0040, 0x0040, 0x4d13, 0x684b, 0x0004, 0x20a9, 0x0014, 0x6848,
-+ 0xa084, 0x0004, 0x0040, 0x4d00, 0x0070, 0x4d00, 0x0078, 0x4cf7,
-+ 0x684b, 0x0009, 0x20a9, 0x0014, 0x6848, 0xa084, 0x0001, 0x0040,
-+ 0x4d0d, 0x0070, 0x4d0d, 0x0078, 0x4d04, 0x20a9, 0x00fa, 0x0070,
-+ 0x4d13, 0x0078, 0x4d0f, 0x6808, 0xa084, 0xfffd, 0x680a, 0x681b,
-+ 0x0048, 0x2009, 0x515b, 0x200b, 0x0007, 0x784c, 0x784a, 0x2091,
-+ 0x8001, 0x007c, 0x2079, 0x5100, 0x1078, 0x4d4d, 0x1078, 0x4d31,
-+ 0x1078, 0x4d3f, 0x7833, 0x0000, 0x7847, 0x0000, 0x784b, 0x0000,
-+ 0x007c, 0x2019, 0x0003, 0x2011, 0x5146, 0x2204, 0xa086, 0x003c,
-+ 0x0040, 0x4d3c, 0x2019, 0x0002, 0x7b2a, 0x7b2e, 0x007c, 0x2019,
-+ 0x0039, 0x2011, 0x5146, 0x2204, 0xa086, 0x003c, 0x0040, 0x4d4a,
-+ 0x2019, 0x0027, 0x7b36, 0x7b3a, 0x007c, 0x2019, 0x3971, 0x2011,
-+ 0x5146, 0x2204, 0xa086, 0x003c, 0x0040, 0x4d58, 0x2019, 0x2626,
-+ 0x7b22, 0x7b26, 0x783f, 0x0000, 0x7843, 0x000a, 0x007c, 0x0020,
-+ 0x002b, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000,
-+ 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000,
-+ 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000,
-+ 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000,
-+ 0x0020, 0x0000, 0x0014, 0x0014, 0x9849, 0x0014, 0x0014, 0x0014,
-+ 0x0014, 0x0014, 0x0014, 0x0014, 0x0080, 0x000f, 0x0000, 0x0201,
-+ 0x0604, 0x0c08, 0x2120, 0x4022, 0xf880, 0x0018, 0x300b, 0xa201,
-+ 0x0014, 0xa200, 0x0014, 0xa200, 0x0214, 0x0000, 0x006c, 0x0002,
-+ 0x0014, 0x98d0, 0x009e, 0x0096, 0xa202, 0x8838, 0x3806, 0x8839,
-+ 0x20c3, 0x0864, 0x9884, 0x28c1, 0x9cb1, 0xa203, 0x300c, 0x2846,
-+ 0x8161, 0x846a, 0x8300, 0x1856, 0x883a, 0x9865, 0x28f2, 0x9c90,
-+ 0x9858, 0x300c, 0x28e1, 0x9c90, 0x2802, 0xa206, 0x64c3, 0x282d,
-+ 0xa207, 0x64a0, 0x67a0, 0x6fc0, 0x1814, 0x883b, 0x7824, 0x68c1,
-+ 0x7864, 0x883e, 0x9878, 0x8576, 0x8677, 0x206b, 0x28c1, 0x9cb1,
-+ 0x2044, 0x2103, 0x20a2, 0x2081, 0x9865, 0xa209, 0x2901, 0x988c,
-+ 0x0014, 0xa205, 0xa300, 0x1872, 0x879a, 0x883c, 0x1fe2, 0xc601,
-+ 0xa20a, 0x856e, 0x0704, 0x9c90, 0x0014, 0xa204, 0xa300, 0x3009,
-+ 0x19e2, 0xf868, 0x8176, 0x86eb, 0x85eb, 0x872e, 0x87a9, 0x883f,
-+ 0x08e6, 0x9890, 0xf881, 0x988b, 0xc801, 0x0014, 0xf8c1, 0x0016,
-+ 0x85b2, 0x80f0, 0x9532, 0xfb02, 0x1de2, 0x0014, 0x8532, 0xf241,
-+ 0x0014, 0x1de2, 0x84a8, 0xd7a0, 0x1fe6, 0x0014, 0xa208, 0x6043,
-+ 0x8008, 0x1dc1, 0x0016, 0x8300, 0x8160, 0x842a, 0xf041, 0x3008,
-+ 0x84a8, 0x11d6, 0x7042, 0x20dd, 0x0011, 0x20d5, 0x8822, 0x0016,
-+ 0x8000, 0x2847, 0x1011, 0x98c3, 0x8000, 0xa000, 0x2802, 0x1011,
-+ 0x98c9, 0x9865, 0x283e, 0x1011, 0x98cd, 0xa20b, 0x0017, 0x300c,
-+ 0xa300, 0x1de2, 0xdb81, 0x0014, 0x0210, 0x98da, 0x0014, 0x26e0,
-+ 0x873a, 0xfb02, 0x19f2, 0x1fe2, 0x0014, 0xa20d, 0x3806, 0x0210,
-+ 0x9cb6, 0x0704, 0x0000, 0x006c, 0x0002, 0x984f, 0x0014, 0x009e,
-+ 0x00a5, 0x0017, 0x60ff, 0x300c, 0x8720, 0xa211, 0x9cd5, 0x8772,
-+ 0x8837, 0x2101, 0x987a, 0x10d2, 0x78e2, 0x9cd8, 0x9859, 0xd984,
-+ 0xf0e2, 0xf0a1, 0x98d2, 0x0014, 0x8831, 0xd166, 0x8830, 0x800f,
-+ 0x9401, 0xb520, 0xc802, 0x8820, 0x987a, 0x2301, 0x987a, 0x10d2,
-+ 0x78e4, 0x9cd8, 0x8821, 0x8820, 0x9859, 0xf123, 0xf142, 0xf101,
-+ 0x98cb, 0x10d2, 0x70f6, 0x8832, 0x8203, 0x870c, 0xd99e, 0x6001,
-+ 0x0014, 0x6845, 0x0214, 0xa21b, 0x9cd5, 0x2001, 0x98ca, 0x8201,
-+ 0x1852, 0xd184, 0xd163, 0x8834, 0x8001, 0x988d, 0x3027, 0x84a8,
-+ 0x1a56, 0x8833, 0x0014, 0xa218, 0x6981, 0x9cc1, 0x692a, 0x6902,
-+ 0x1834, 0x989d, 0x1a14, 0x8010, 0x8592, 0x8026, 0x84b9, 0x7021,
-+ 0x0014, 0xa300, 0x69e1, 0x9caa, 0x694c, 0xa213, 0x9cba, 0x1462,
-+ 0xa213, 0x8000, 0x16e1, 0x98b4, 0x8023, 0x16e1, 0x8001, 0x10f1,
-+ 0x0016, 0x6968, 0xa214, 0x9cba, 0x8004, 0x16e1, 0x0101, 0x300a,
-+ 0x8827, 0x0014, 0x9cba, 0x0014, 0x61c2, 0x8002, 0x14e1, 0x0016,
-+ 0xa217, 0x9cc1, 0x0014, 0xa300, 0x8181, 0x842a, 0x84a8, 0x1ce6,
-+ 0x882c, 0x0016, 0xa212, 0x9cd5, 0x10d2, 0x70e4, 0x0004, 0x8007,
-+ 0x9424, 0xcc1a, 0x9cd8, 0x98ca, 0x8827, 0x300a, 0x0013, 0x8000,
-+ 0x84a4, 0x0016, 0x11c2, 0x211e, 0x870e, 0xa21d, 0x0014, 0x878e,
-+ 0x0016, 0xa21c, 0x1035, 0x9891, 0xa210, 0xa000, 0x8010, 0x8592,
-+ 0x853b, 0xd044, 0x8022, 0x3807, 0x84bb, 0x98ef, 0x8021, 0x3807,
-+ 0x84b9, 0x300c, 0x817e, 0x872b, 0x8772, 0x9891, 0x0000, 0x0020,
-+ 0x002b, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000,
-+ 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000,
-+ 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000,
-+ 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000,
-+ 0x0020, 0x0000, 0x0014, 0x0014, 0x9849, 0x0014, 0x0014, 0x98e5,
-+ 0x98d0, 0x0014, 0x0014, 0x0014, 0x0080, 0x013f, 0x0000, 0x0201,
-+ 0x0604, 0x0c08, 0x2120, 0x4022, 0xf880, 0x0018, 0x300b, 0xa201,
-+ 0x0014, 0xa200, 0x0014, 0xa200, 0x0214, 0xa202, 0x8838, 0x3806,
-+ 0x8839, 0x20c3, 0x0864, 0xa82e, 0x28c1, 0x9cb1, 0xa203, 0x300c,
-+ 0x2846, 0x8161, 0x846a, 0x8300, 0x1856, 0x883a, 0xa804, 0x28f2,
-+ 0x9c90, 0xa8f4, 0x300c, 0x28e1, 0x9c90, 0x2802, 0xa206, 0x64c3,
-+ 0x282d, 0xa207, 0x64a0, 0x67a0, 0x6fc0, 0x1814, 0x883b, 0x7824,
-+ 0x68c1, 0x7864, 0x883e, 0xa802, 0x8576, 0x8677, 0x206b, 0x28c1,
-+ 0x9cb1, 0x2044, 0x2103, 0x20a2, 0x2081, 0xa8e5, 0xa209, 0x2901,
-+ 0xa809, 0x0014, 0xa205, 0xa300, 0x1872, 0x879a, 0x883c, 0x1fe2,
-+ 0xc601, 0xa20a, 0x856e, 0x0704, 0x9c90, 0x0014, 0xa204, 0xa300,
-+ 0x3009, 0x19e2, 0xf868, 0x8176, 0x86eb, 0x85eb, 0x872e, 0x87a9,
-+ 0x883f, 0x08e6, 0xa8f3, 0xf881, 0xa8ec, 0xc801, 0x0014, 0xf8c1,
-+ 0x0016, 0x85b2, 0x80f0, 0x9532, 0xfb02, 0x1de2, 0x0014, 0x8532,
-+ 0xf241, 0x0014, 0x1de2, 0x84a8, 0xd7a0, 0x1fe6, 0x0014, 0xa208,
-+ 0x6043, 0x8008, 0x1dc1, 0x0016, 0x8300, 0x8160, 0x842a, 0xf041,
-+ 0x3008, 0x84a8, 0x11d6, 0x7042, 0x20dd, 0x0011, 0x20d5, 0x8822,
-+ 0x0016, 0x8000, 0x2847, 0x1011, 0xa8fc, 0x8000, 0xa000, 0x2802,
-+ 0x1011, 0xa8fd, 0xa898, 0x283e, 0x1011, 0xa8fd, 0xa20b, 0x0017,
-+ 0x300c, 0xa300, 0x1de2, 0xdb81, 0x0014, 0x0210, 0xa801, 0x0014,
-+ 0x26e0, 0x873a, 0xfb02, 0x19f2, 0x1fe2, 0x0014, 0xa20d, 0x3806,
-+ 0x0210, 0x9cb6, 0x0704, 0x0017, 0x60ff, 0x300c, 0x8720, 0xa211,
-+ 0x9d6b, 0x8772, 0x8837, 0x2101, 0xa821, 0x10d2, 0x78e2, 0x9d6e,
-+ 0xa8fc, 0xd984, 0xf0e2, 0xf0a1, 0xa871, 0x0014, 0x8831, 0xd166,
-+ 0x8830, 0x800f, 0x9401, 0xb520, 0xc802, 0x8820, 0xa80f, 0x2301,
-+ 0xa80d, 0x10d2, 0x78e4, 0x9d6e, 0x8821, 0x8820, 0xa8e6, 0xf123,
-+ 0xf142, 0xf101, 0xa854, 0x10d2, 0x70f6, 0x8832, 0x8203, 0x870c,
-+ 0xd99e, 0x6001, 0x0014, 0x6845, 0x0214, 0xa21b, 0x9d6b, 0x2001,
-+ 0xa845, 0x8201, 0x1852, 0xd184, 0xd163, 0x8834, 0x8001, 0xa801,
-+ 0x3027, 0x84a8, 0x1a56, 0x8833, 0x0014, 0xa218, 0x6981, 0x9d57,
-+ 0x692a, 0x6902, 0x1834, 0xa805, 0x1a14, 0x8010, 0x8592, 0x8026,
-+ 0x84b9, 0x7021, 0x0014, 0xa300, 0x69e1, 0x9d40, 0x694c, 0xa213,
-+ 0x9d50, 0x1462, 0xa213, 0x8000, 0x16e1, 0xa80a, 0x8023, 0x16e1,
-+ 0x8001, 0x10f1, 0x0016, 0x6968, 0xa214, 0x9d50, 0x8004, 0x16e1,
-+ 0x0101, 0x300a, 0x8827, 0x0014, 0x9d50, 0x0014, 0x61c2, 0x8002,
-+ 0x14e1, 0x0016, 0xa217, 0x9d57, 0x0014, 0xa300, 0x8181, 0x842a,
-+ 0x84a8, 0x1ce6, 0x882c, 0x0016, 0xa212, 0x9d6b, 0x10d2, 0x70e4,
-+ 0x0004, 0x8007, 0x9424, 0xcc1a, 0x9d6e, 0xa8f8, 0x8827, 0x300a,
-+ 0x0013, 0x8000, 0x84a4, 0x0016, 0x11c2, 0x211e, 0x870e, 0xa21d,
-+ 0x0014, 0x878e, 0x0016, 0xa21c, 0x1035, 0xa8af, 0xa210, 0x3807,
-+ 0x300c, 0x817e, 0x872b, 0x8772, 0xa8a8, 0x0000, 0xdf21
-+};
-+#endif
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/scsi/isp/asm_1080.h 2003-07-19 17:06:32.000000000 -0700
-@@ -0,0 +1,4554 @@
-+/* @(#)asm_1080.h 1.2 */
-+/*
-+ * Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000 Qlogic, Inc.
-+ * All rights reserved.
-+ *
-+ * Redistribution and use in source and binary forms are permitted provided
-+ * that the following conditions are met:
-+ * 1. Redistribution of source code must retain the above copyright
-+ * notice, this list of conditions and the following disclaimer.
-+ * 2. Redistribution in binary form must reproduce the above copyright
-+ * notice, this list of conditions and the following disclaimer in the
-+ * documentation and/or other materials provided with the distribution.
-+ * 3. The name of the author may not be used to endorse or promote products
-+ * derived from this software without specific prior written permission
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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, 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) HOWEVER CAUSED AND ON ANY
-+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-+ */
-+
-+#ifndef ISP_TARGET_MODE
-+/************************************************************************
-+ * *
-+ * --- ISP1240/ISP1080/ISP1280 Initiator Firmware --- *
-+ * 32 LUN Support *
-+ * *
-+ ************************************************************************/
-+/*
-+ * Firmware Version 8.15.00 (14:35 Aug 22, 2000)
-+ */
-+static const u_int16_t isp_1080_risc_code[] = {
-+ 0x0078, 0x1041, 0x0000, 0x3d3b, 0x0000, 0x2043, 0x4f50, 0x5952,
-+ 0x4947, 0x4854, 0x2031, 0x3939, 0x312c, 0x3139, 0x3932, 0x2c31,
-+ 0x3939, 0x332c, 0x3139, 0x3934, 0x2051, 0x4c4f, 0x4749, 0x4320,
-+ 0x434f, 0x5250, 0x4f52, 0x4154, 0x494f, 0x4e00, 0x2049, 0x5350,
-+ 0x3132, 0x3430, 0x2046, 0x6972, 0x6d77, 0x6172, 0x6520, 0x2056,
-+ 0x6572, 0x7369, 0x6f6e, 0x2030, 0x382e, 0x3135, 0x2020, 0x2043,
-+ 0x7573, 0x746f, 0x6d65, 0x7220, 0x4e6f, 0x2e20, 0x3030, 0x2050,
-+ 0x726f, 0x6475, 0x6374, 0x204e, 0x6f2e, 0x2020, 0x3030, 0x2020,
-+ 0x2400, 0x20c9, 0x97ff, 0x2001, 0x04fc, 0x2004, 0xa086, 0x1080,
-+ 0x00c0, 0x1054, 0x2071, 0x0100, 0x70a0, 0x70a2, 0x20c1, 0x0010,
-+ 0x2089, 0x1374, 0x0078, 0x106d, 0x2001, 0x04fc, 0x2004, 0xa086,
-+ 0x1280, 0x00c0, 0x1069, 0x2071, 0x0200, 0x70a0, 0x70a2, 0x2071,
-+ 0x0100, 0x70a0, 0x70a2, 0x20c1, 0x0010, 0x2089, 0x13f8, 0x0078,
-+ 0x106d, 0x20c1, 0x0020, 0x2089, 0x131c, 0x2071, 0x0010, 0x70c3,
-+ 0x0004, 0x70c7, 0x4953, 0x70cb, 0x5020, 0x70cf, 0x2020, 0x70d3,
-+ 0x0008, 0x2001, 0x04fe, 0x70d6, 0x20c1, 0x0021, 0x2019, 0x0000,
-+ 0x2009, 0xfeff, 0x2100, 0x200b, 0xa5a5, 0xa1ec, 0x7fff, 0x2d64,
-+ 0x206b, 0x0a0a, 0xaddc, 0x3fff, 0x2b54, 0x205b, 0x5050, 0x2114,
-+ 0xa286, 0xa5a5, 0x0040, 0x10a4, 0xa386, 0x000f, 0x0040, 0x10a0,
-+ 0x2c6a, 0x2a5a, 0x20c1, 0x0020, 0x2019, 0x000f, 0x0078, 0x1080,
-+ 0x2c6a, 0x2a5a, 0x0078, 0x10a2, 0x2c6a, 0x2a5a, 0x2130, 0x2128,
-+ 0xa1a2, 0x4e00, 0x8424, 0x8424, 0x8424, 0x8424, 0x8424, 0x8424,
-+ 0xa192, 0x9800, 0x2009, 0x0000, 0x2001, 0x0032, 0x1078, 0x207a,
-+ 0x2218, 0x2079, 0x4e00, 0x2fa0, 0x2408, 0x2011, 0x0000, 0x20a9,
-+ 0x0040, 0x42a4, 0x8109, 0x00c0, 0x10bf, 0x2009, 0xff00, 0x3400,
-+ 0xa102, 0x0048, 0x10cf, 0x0040, 0x10cf, 0x20a8, 0x42a4, 0x2001,
-+ 0x04fc, 0x2004, 0xa086, 0x1080, 0x00c0, 0x10e5, 0x2071, 0x0100,
-+ 0x0d7e, 0x2069, 0x4e40, 0x1078, 0x4cdd, 0x0d7f, 0x7810, 0xc0ed,
-+ 0x7812, 0x781b, 0x0064, 0x0078, 0x110a, 0x2001, 0x04fc, 0x2004,
-+ 0xa086, 0x1280, 0x00c0, 0x1105, 0x7814, 0xc0ed, 0xc0d5, 0x7816,
-+ 0x781b, 0x0064, 0x2071, 0x0200, 0x0d7e, 0x2069, 0x4e40, 0x1078,
-+ 0x4cdd, 0x2069, 0x4e80, 0x2071, 0x0100, 0x1078, 0x4cdd, 0x7814,
-+ 0xc0d4, 0x7816, 0x0d7f, 0x0078, 0x110a, 0x7814, 0xc0e5, 0x7816,
-+ 0x781b, 0x003c, 0x7eca, 0x7cc2, 0x7bc6, 0x7867, 0x0000, 0x7800,
-+ 0xc08d, 0x7802, 0x2031, 0x0030, 0x78af, 0x0101, 0x7823, 0x0002,
-+ 0x7827, 0x0002, 0x2009, 0x0002, 0x2069, 0x4e40, 0x681b, 0x0003,
-+ 0x6823, 0x0007, 0x6827, 0x00fa, 0x682b, 0x0008, 0x682f, 0x0028,
-+ 0x6837, 0x0000, 0x683b, 0x0006, 0x6833, 0x0008, 0x683f, 0x0000,
-+ 0x8109, 0x0040, 0x115e, 0x68d3, 0x000a, 0x68c3, 0x4ec0, 0x2079,
-+ 0x4e00, 0x7814, 0xd0e4, 0x00c0, 0x1144, 0xd0ec, 0x00c0, 0x1148,
-+ 0x68d7, 0x7329, 0x0078, 0x114a, 0x68d7, 0x730d, 0x0078, 0x114a,
-+ 0x68d7, 0x732d, 0x68c7, 0x53c0, 0x68cb, 0x52c0, 0x68cf, 0x93c0,
-+ 0x68ab, 0x9644, 0x68af, 0x9649, 0x68b3, 0x9644, 0x68b7, 0x9644,
-+ 0x68a7, 0x0001, 0x2069, 0x4e80, 0x0078, 0x111e, 0x68d3, 0x000a,
-+ 0x68c3, 0x50c0, 0x7814, 0xd0e4, 0x00c0, 0x116a, 0x68d7, 0x7439,
-+ 0x0078, 0x116c, 0x68d7, 0x7419, 0x68c7, 0x73c0, 0x68cb, 0x5340,
-+ 0x68cf, 0x94d0, 0x68ab, 0x9649, 0x68af, 0x964e, 0x68b3, 0x9649,
-+ 0x68b7, 0x9649, 0x68a7, 0x0001, 0x7810, 0xd0ec, 0x00c0, 0x11c2,
-+ 0x7814, 0xd0e4, 0x00c0, 0x11b4, 0x0e7e, 0x2069, 0x52c0, 0x2071,
-+ 0x0200, 0x70ec, 0xd0e4, 0x00c0, 0x1195, 0x2019, 0x0c0c, 0x2021,
-+ 0x000c, 0x1078, 0x2009, 0x0078, 0x119b, 0x2019, 0x0c0a, 0x2021,
-+ 0x000a, 0x1078, 0x2009, 0x2069, 0x5340, 0x2071, 0x0100, 0x70ec,
-+ 0xd0e4, 0x00c0, 0x11ab, 0x2019, 0x0c0c, 0x2021, 0x000c, 0x1078,
-+ 0x2009, 0x0078, 0x11b1, 0x2019, 0x0c0a, 0x2021, 0x000a, 0x1078,
-+ 0x2009, 0x0e7f, 0x0078, 0x11db, 0x2019, 0x0c0c, 0x2021, 0x000c,
-+ 0x2069, 0x52c0, 0x1078, 0x2009, 0x2069, 0x5340, 0x1078, 0x2009,
-+ 0x0078, 0x11db, 0x2069, 0x52c0, 0x0e7e, 0x2071, 0x0100, 0x70ec,
-+ 0xd0e4, 0x00c0, 0x11d4, 0x2019, 0x0c0c, 0x2021, 0x000c, 0x1078,
-+ 0x2009, 0x0e7f, 0x0078, 0x11db, 0x2019, 0x0c0a, 0x2021, 0x000a,
-+ 0x1078, 0x2009, 0x0e7f, 0x2011, 0x0002, 0x2069, 0x53c0, 0x2009,
-+ 0x0002, 0x20a9, 0x0100, 0x6837, 0x0000, 0x680b, 0x0040, 0x7bc8,
-+ 0xa386, 0xfeff, 0x00c0, 0x11f2, 0x6817, 0x0100, 0x681f, 0x0064,
-+ 0x0078, 0x11f6, 0x6817, 0x0064, 0x681f, 0x0002, 0xade8, 0x0010,
-+ 0x00f0, 0x11e3, 0x8109, 0x00c0, 0x11e1, 0x8211, 0x0040, 0x1204,
-+ 0x2069, 0x73c0, 0x0078, 0x11df, 0x1078, 0x265b, 0x1078, 0x468e,
-+ 0x1078, 0x1dd4, 0x1078, 0x4c6f, 0x2091, 0x2100, 0x2079, 0x4e00,
-+ 0x7810, 0xd0ec, 0x0040, 0x1218, 0x2071, 0x0020, 0x0078, 0x121a,
-+ 0x2071, 0x0050, 0x2091, 0x2200, 0x2079, 0x4e00, 0x2071, 0x0020,
-+ 0x2091, 0x2300, 0x2079, 0x4e00, 0x7810, 0xd0ec, 0x0040, 0x122c,
-+ 0x2079, 0x0100, 0x0078, 0x122e, 0x2079, 0x0200, 0x2071, 0x4e40,
-+ 0x2091, 0x2400, 0x2079, 0x0100, 0x2071, 0x4e80, 0x2091, 0x2000,
-+ 0x2079, 0x4e00, 0x2071, 0x0010, 0x3200, 0xa085, 0x303d, 0x2090,
-+ 0x2071, 0x0010, 0x70c3, 0x0000, 0x0090, 0x124d, 0x70c0, 0xa086,
-+ 0x0002, 0x00c0, 0x124d, 0x1078, 0x15ba, 0x2039, 0x0000, 0x7810,
-+ 0xd0ec, 0x00c0, 0x12cf, 0x1078, 0x148e, 0x78ac, 0xa005, 0x00c0,
-+ 0x126b, 0x0068, 0x1261, 0x786c, 0xa065, 0x0040, 0x1261, 0x1078,
-+ 0x2395, 0x1078, 0x20a1, 0x0068, 0x1278, 0x786c, 0xa065, 0x0040,
-+ 0x126b, 0x1078, 0x2395, 0x0068, 0x1278, 0x2009, 0x4e47, 0x2011,
-+ 0x4e87, 0x2104, 0x220c, 0xa105, 0x0040, 0x1278, 0x1078, 0x1f0a,
-+ 0x2071, 0x4e40, 0x70a4, 0xa005, 0x0040, 0x129d, 0x7450, 0xa485,
-+ 0x0000, 0x0040, 0x129d, 0x2079, 0x0200, 0x2091, 0x8000, 0x72d4,
-+ 0xa28c, 0x303d, 0x2190, 0x1078, 0x2b6a, 0x2091, 0x8000, 0x2091,
-+ 0x303d, 0x0068, 0x129d, 0x2079, 0x4e00, 0x786c, 0xa065, 0x0040,
-+ 0x129d, 0x2071, 0x0010, 0x1078, 0x2395, 0x00e0, 0x12a5, 0x2079,
-+ 0x4e00, 0x2071, 0x0010, 0x1078, 0x4a43, 0x2071, 0x4e80, 0x70a4,
-+ 0xa005, 0x0040, 0x12bd, 0x7050, 0xa025, 0x0040, 0x12bd, 0x2079,
-+ 0x0100, 0x2091, 0x8000, 0x72d4, 0xa28c, 0x303d, 0x2190, 0x1078,
-+ 0x2b6a, 0x2091, 0x8000, 0x2091, 0x303d, 0x2079, 0x4e00, 0x2071,
-+ 0x0010, 0x0068, 0x12c9, 0x786c, 0xa065, 0x0040, 0x12c9, 0x1078,
-+ 0x2395, 0x00e0, 0x1253, 0x1078, 0x4a43, 0x0078, 0x1253, 0x1078,
-+ 0x148e, 0x78ac, 0xa005, 0x00c0, 0x12e7, 0x0068, 0x12dd, 0x786c,
-+ 0xa065, 0x0040, 0x12dd, 0x1078, 0x2395, 0x1078, 0x20a1, 0x0068,
-+ 0x12f1, 0x786c, 0xa065, 0x0040, 0x12e7, 0x1078, 0x2395, 0x0068,
-+ 0x12f1, 0x2009, 0x4e47, 0x2104, 0xa005, 0x0040, 0x12f1, 0x1078,
-+ 0x1f0a, 0x2071, 0x4e40, 0x70a4, 0xa005, 0x0040, 0x130c, 0x7450,
-+ 0xa485, 0x0000, 0x0040, 0x130c, 0x2079, 0x0100, 0x2091, 0x8000,
-+ 0x72d4, 0xa28c, 0x303d, 0x2190, 0x1078, 0x2b6a, 0x2091, 0x8000,
-+ 0x2091, 0x303d, 0x2079, 0x4e00, 0x2071, 0x0010, 0x0068, 0x1316,
-+ 0x786c, 0xa065, 0x0040, 0x1316, 0x1078, 0x2395, 0x00e0, 0x12cf,
-+ 0x1078, 0x4a43, 0x0078, 0x12cf, 0x133c, 0x133c, 0x133e, 0x133e,
-+ 0x134b, 0x134b, 0x134b, 0x134b, 0x1356, 0x1356, 0x1363, 0x1363,
-+ 0x134b, 0x134b, 0x134b, 0x134b, 0x133c, 0x133c, 0x133e, 0x133e,
-+ 0x134b, 0x134b, 0x134b, 0x134b, 0x1356, 0x1356, 0x1363, 0x1363,
-+ 0x134b, 0x134b, 0x134b, 0x134b, 0x0078, 0x133c, 0x007e, 0x107e,
-+ 0x127e, 0x2091, 0x2400, 0x1078, 0x298a, 0x127f, 0x107f, 0x007f,
-+ 0x2091, 0x8001, 0x007c, 0x007e, 0x107e, 0x127e, 0x1078, 0x13c8,
-+ 0x127f, 0x107f, 0x007f, 0x2091, 0x8001, 0x007c, 0x007e, 0x107e,
-+ 0x127e, 0x2091, 0x2300, 0x1078, 0x298a, 0x127f, 0x107f, 0x007f,
-+ 0x2091, 0x8001, 0x007c, 0x007e, 0x107e, 0x127e, 0x2091, 0x2300,
-+ 0x1078, 0x298a, 0x2091, 0x2400, 0x1078, 0x298a, 0x127f, 0x107f,
-+ 0x007f, 0x2091, 0x8001, 0x007c, 0x1394, 0x1394, 0x1396, 0x1396,
-+ 0x13a3, 0x13a3, 0x13a3, 0x13a3, 0x13ae, 0x13ae, 0x1396, 0x1396,
-+ 0x13a3, 0x13a3, 0x13a3, 0x13a3, 0x13af, 0x13af, 0x13af, 0x13af,
-+ 0x13af, 0x13af, 0x13af, 0x13af, 0x13af, 0x13af, 0x13af, 0x13af,
-+ 0x13af, 0x13af, 0x13af, 0x13af, 0x0078, 0x1394, 0x007e, 0x107e,
-+ 0x127e, 0x2091, 0x2300, 0x1078, 0x298a, 0x127f, 0x107f, 0x007f,
-+ 0x2091, 0x8001, 0x007c, 0x007e, 0x107e, 0x127e, 0x1078, 0x13d5,
-+ 0x127f, 0x107f, 0x007f, 0x2091, 0x8001, 0x007c, 0x007c, 0x107e,
-+ 0x127e, 0x0d7e, 0x0e7e, 0x0f7e, 0x007e, 0x2071, 0x0100, 0x2069,
-+ 0x4e40, 0x2079, 0x4e00, 0x70ec, 0xa084, 0x1c00, 0x78e2, 0x1078,
-+ 0x4cdd, 0x007f, 0x0f7f, 0x0e7f, 0x0d7f, 0x127f, 0x107f, 0x007c,
-+ 0x3c00, 0xa084, 0x0007, 0x0079, 0x13cd, 0x13de, 0x13de, 0x13e0,
-+ 0x13e0, 0x13e5, 0x13e5, 0x13ea, 0x13ea, 0x3c00, 0xa084, 0x0003,
-+ 0x0079, 0x13da, 0x13de, 0x13de, 0x13f3, 0x13f3, 0x1078, 0x296b,
-+ 0x2091, 0x2200, 0x1078, 0x4768, 0x007c, 0x2091, 0x2100, 0x1078,
-+ 0x4768, 0x007c, 0x2091, 0x2100, 0x1078, 0x4768, 0x2091, 0x2200,
-+ 0x1078, 0x4768, 0x007c, 0x2091, 0x2100, 0x1078, 0x4768, 0x007c,
-+ 0x1418, 0x1418, 0x141a, 0x141a, 0x1427, 0x1427, 0x1427, 0x1427,
-+ 0x1432, 0x1432, 0x143f, 0x143f, 0x1427, 0x1427, 0x1427, 0x1427,
-+ 0x1450, 0x1450, 0x1450, 0x1450, 0x1450, 0x1450, 0x1450, 0x1450,
-+ 0x1450, 0x1450, 0x1450, 0x1450, 0x1450, 0x1450, 0x1450, 0x1450,
-+ 0x0078, 0x1418, 0x007e, 0x107e, 0x127e, 0x2091, 0x2400, 0x1078,
-+ 0x298a, 0x127f, 0x107f, 0x007f, 0x2091, 0x8001, 0x007c, 0x007e,
-+ 0x107e, 0x127e, 0x1078, 0x13c8, 0x127f, 0x107f, 0x007f, 0x2091,
-+ 0x8001, 0x007c, 0x007e, 0x107e, 0x127e, 0x2091, 0x2300, 0x1078,
-+ 0x298a, 0x127f, 0x107f, 0x007f, 0x2091, 0x8001, 0x007c, 0x007e,
-+ 0x107e, 0x127e, 0x2091, 0x2300, 0x1078, 0x298a, 0x2091, 0x2400,
-+ 0x1078, 0x298a, 0x127f, 0x107f, 0x007f, 0x2091, 0x8001, 0x007c,
-+ 0x007e, 0x107e, 0x127e, 0x0d7e, 0x0e7e, 0x0f7e, 0x2079, 0x4e00,
-+ 0x2071, 0x0200, 0x2069, 0x4e40, 0x3d00, 0xd08c, 0x0040, 0x1466,
-+ 0x70ec, 0xa084, 0x1c00, 0x78e2, 0x1078, 0x4cdd, 0x3d00, 0xd084,
-+ 0x0040, 0x1474, 0x2069, 0x4e80, 0x2071, 0x0100, 0x70ec, 0xa084,
-+ 0x1c00, 0x78e6, 0x1078, 0x4cdd, 0x0f7f, 0x0e7f, 0x0d7f, 0x127f,
-+ 0x107f, 0x007f, 0x007c, 0x7008, 0x800b, 0x00c8, 0x1489, 0x7007,
-+ 0x0002, 0xa08c, 0x01e0, 0x00c0, 0x148a, 0xd09c, 0x0040, 0x1489,
-+ 0x087a, 0x097a, 0x70c3, 0x4002, 0x0078, 0x15bd, 0x0068, 0x1513,
-+ 0x2061, 0x0000, 0x6018, 0xd084, 0x00c0, 0x1513, 0x7828, 0xa005,
-+ 0x00c0, 0x149e, 0x0010, 0x1514, 0x0078, 0x1513, 0x7910, 0xd1f4,
-+ 0x0040, 0x14a6, 0x2001, 0x4007, 0x0078, 0x15bc, 0x7914, 0xd1ec,
-+ 0x0040, 0x14c1, 0xd0fc, 0x0040, 0x14b7, 0x007e, 0x1078, 0x1d64,
-+ 0x007f, 0x0040, 0x14c1, 0x2001, 0x4007, 0x0078, 0x15bc, 0x007e,
-+ 0x1078, 0x1d54, 0x007f, 0x0040, 0x14c1, 0x2001, 0x4007, 0x0078,
-+ 0x15bc, 0x7910, 0xd0fc, 0x00c0, 0x14cb, 0x2061, 0x4e40, 0xc19c,
-+ 0xc7fc, 0x0078, 0x14cf, 0x2061, 0x4e80, 0xc19d, 0xc7fd, 0x6064,
-+ 0xa005, 0x00c0, 0x1513, 0x7912, 0x6083, 0x0000, 0x7828, 0xc0fc,
-+ 0xa086, 0x0018, 0x00c0, 0x14e0, 0x0c7e, 0x1078, 0x1b5b, 0x0c7f,
-+ 0x782b, 0x0000, 0x607c, 0xa065, 0x0040, 0x14f9, 0x0c7e, 0x609c,
-+ 0x1078, 0x1e49, 0x0c7f, 0x609f, 0x0000, 0x1078, 0x1c84, 0x2009,
-+ 0x0018, 0x6087, 0x0103, 0x1078, 0x1d74, 0x00c0, 0x150d, 0x1078,
-+ 0x1dc6, 0x7810, 0xd09c, 0x00c0, 0x1501, 0x2061, 0x4e40, 0x0078,
-+ 0x1505, 0x2061, 0x4e80, 0xc09c, 0x7812, 0x607f, 0x0000, 0x60d4,
-+ 0xd0dc, 0x0040, 0x1511, 0xc0dc, 0x60d6, 0x2001, 0x4005, 0x0078,
-+ 0x15bc, 0x0078, 0x15ba, 0x007c, 0x7810, 0xd0f4, 0x0040, 0x151c,
-+ 0x2001, 0x4007, 0x0078, 0x15bc, 0xa006, 0x70c2, 0x70c6, 0x70ca,
-+ 0x70ce, 0x70da, 0x70c0, 0xa03d, 0xa08a, 0x0040, 0x00c8, 0x152a,
-+ 0x0079, 0x1531, 0x2100, 0xa08a, 0x0040, 0x00c8, 0x15c8, 0x0079,
-+ 0x1571, 0x15ba, 0x1610, 0x15d9, 0x1648, 0x1680, 0x1680, 0x15d0,
-+ 0x1c9c, 0x168b, 0x15c8, 0x15dd, 0x15df, 0x15e1, 0x15e3, 0x1ca1,
-+ 0x15c8, 0x1699, 0x16f6, 0x1b7b, 0x1c96, 0x15e5, 0x19c0, 0x1a02,
-+ 0x1a3d, 0x1a8e, 0x197b, 0x1988, 0x199c, 0x19af, 0x17cb, 0x15c8,
-+ 0x172d, 0x173a, 0x1746, 0x1752, 0x1768, 0x1774, 0x1777, 0x1783,
-+ 0x178f, 0x1797, 0x17b3, 0x17bf, 0x15c8, 0x15c8, 0x15c8, 0x15c8,
-+ 0x17d8, 0x17ea, 0x1806, 0x183c, 0x1864, 0x1874, 0x1877, 0x18a8,
-+ 0x18d9, 0x18eb, 0x194a, 0x195a, 0x15c8, 0x15c8, 0x15c8, 0x15c8,
-+ 0x196a, 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x1cc6, 0x1ccc,
-+ 0x15c8, 0x15c8, 0x15c8, 0x1cd0, 0x1d15, 0x15c8, 0x15c8, 0x15c8,
-+ 0x15c8, 0x160a, 0x167a, 0x1693, 0x16f0, 0x1b75, 0x15c8, 0x15c8,
-+ 0x1b3e, 0x15c8, 0x1d19, 0x1cb8, 0x1cc2, 0x15c8, 0x15c8, 0x15c8,
-+ 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8,
-+ 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8,
-+ 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8,
-+ 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8,
-+ 0x15c8, 0x72ca, 0x71c6, 0x2001, 0x4006, 0x0078, 0x15bc, 0x73ce,
-+ 0x72ca, 0x71c6, 0x2001, 0x4000, 0x70c2, 0x0068, 0x15bd, 0x2061,
-+ 0x0000, 0x601b, 0x0001, 0x2091, 0x5000, 0x2091, 0x4080, 0x007c,
-+ 0x70c3, 0x4001, 0x0078, 0x15bd, 0x70c3, 0x4006, 0x0078, 0x15bd,
-+ 0x2099, 0x0041, 0x20a1, 0x0041, 0x20a9, 0x0005, 0x53a3, 0x0078,
-+ 0x15ba, 0x70c4, 0x70c3, 0x0004, 0x007a, 0x0078, 0x15ba, 0x0078,
-+ 0x15ba, 0x0078, 0x15ba, 0x0078, 0x15ba, 0x2091, 0x8000, 0x70c3,
-+ 0x0004, 0x70c7, 0x4953, 0x70cb, 0x5020, 0x70cf, 0x2020, 0x70d3,
-+ 0x0008, 0x2001, 0x000f, 0x70d6, 0x2079, 0x0000, 0x781b, 0x0001,
-+ 0x2031, 0x0030, 0x2059, 0x1000, 0x2029, 0x041a, 0x2051, 0x0445,
-+ 0x2061, 0x0447, 0x20c1, 0x0020, 0x2091, 0x5000, 0x2091, 0x4080,
-+ 0x0078, 0x0418, 0x75d8, 0x74dc, 0x75da, 0x74de, 0x0078, 0x1613,
-+ 0x2029, 0x0000, 0x2520, 0x71d0, 0x72c8, 0x73cc, 0x70c4, 0x20a0,
-+ 0x2099, 0x0030, 0x7003, 0x0001, 0x7007, 0x0006, 0x731a, 0x721e,
-+ 0x7422, 0x7526, 0x2021, 0x0040, 0x81ff, 0x0040, 0x15ba, 0xa182,
-+ 0x0040, 0x00c8, 0x162d, 0x2120, 0xa006, 0x2008, 0x8403, 0x7012,
-+ 0x7007, 0x0004, 0x7007, 0x0001, 0x7008, 0xd0fc, 0x0040, 0x1634,
-+ 0x7007, 0x0002, 0xa084, 0x01e0, 0x0040, 0x1642, 0x70c3, 0x4002,
-+ 0x0078, 0x15bd, 0x24a8, 0x53a5, 0x0078, 0x1624, 0x0078, 0x15ba,
-+ 0x2029, 0x0000, 0x2520, 0x71d0, 0x72c8, 0x73cc, 0x70c4, 0x2098,
-+ 0x20a1, 0x0030, 0x7003, 0x0000, 0x7007, 0x0006, 0x731a, 0x721e,
-+ 0x7422, 0x7526, 0x2021, 0x0040, 0x7007, 0x0006, 0x81ff, 0x0040,
-+ 0x15ba, 0xa182, 0x0040, 0x00c8, 0x1667, 0x2120, 0xa006, 0x2008,
-+ 0x8403, 0x7012, 0x24a8, 0x53a6, 0x7007, 0x0001, 0x7008, 0xd0fc,
-+ 0x0040, 0x166e, 0xa084, 0x01e0, 0x0040, 0x165c, 0x70c3, 0x4002,
-+ 0x0078, 0x15bd, 0x75d8, 0x74dc, 0x75da, 0x74de, 0x0078, 0x164b,
-+ 0x71c4, 0x70c8, 0x2114, 0xa79e, 0x0004, 0x00c0, 0x1688, 0x200a,
-+ 0x72ca, 0x0078, 0x15b9, 0x70c7, 0x0008, 0x70cb, 0x000f, 0x70cf,
-+ 0x0000, 0x0078, 0x15ba, 0x75d8, 0x76dc, 0x75da, 0x76de, 0x0078,
-+ 0x169c, 0x2029, 0x0000, 0x2530, 0x70c4, 0x72c8, 0x73cc, 0x74d0,
-+ 0x70c6, 0x72ca, 0x73ce, 0x74d2, 0xa005, 0x0040, 0x16eb, 0xa40a,
-+ 0x0040, 0x16ac, 0x00c8, 0x16b5, 0x8001, 0x7872, 0xa084, 0xfc00,
-+ 0x0040, 0x16b9, 0x78ac, 0xc085, 0x78ae, 0x2001, 0x4005, 0x0078,
-+ 0x15bc, 0x7b7e, 0x7a7a, 0x7e86, 0x7d82, 0x7c76, 0xa48c, 0xff00,
-+ 0x0040, 0x16d1, 0x8407, 0x8004, 0x8004, 0x810c, 0x810c, 0x810f,
-+ 0xa118, 0xa291, 0x0000, 0xa6b1, 0x0000, 0xa581, 0x0000, 0x0078,
-+ 0x16db, 0x8407, 0x8004, 0x8004, 0xa318, 0xa291, 0x0000, 0xa6b1,
-+ 0x0000, 0xa581, 0x0000, 0x731a, 0x721e, 0x7622, 0x7026, 0xa605,
-+ 0x0040, 0x16e5, 0x7a10, 0xc2c5, 0x7a12, 0x78ac, 0xa084, 0xfffc,
-+ 0x78ae, 0x0078, 0x16ee, 0x78ac, 0xc085, 0x78ae, 0x0078, 0x15ba,
-+ 0x75d8, 0x76dc, 0x75da, 0x76de, 0x0078, 0x16f9, 0x2029, 0x0000,
-+ 0x2530, 0x70c4, 0x72c8, 0x73cc, 0x74d4, 0x70c6, 0x72ca, 0x73ce,
-+ 0x74d6, 0xa005, 0x0040, 0x1728, 0xa40a, 0x0040, 0x1709, 0x00c8,
-+ 0x15bc, 0x8001, 0x7892, 0xa084, 0xfc00, 0x0040, 0x1716, 0x78ac,
-+ 0xc0c5, 0x78ae, 0x2001, 0x4005, 0x0078, 0x15bc, 0x7a9a, 0x7b9e,
-+ 0x7da2, 0x7ea6, 0x2600, 0xa505, 0x0040, 0x1721, 0x7a10, 0xc2c5,
-+ 0x7a12, 0x7c96, 0x78ac, 0xa084, 0xfcff, 0x78ae, 0x0078, 0x172b,
-+ 0x78ac, 0xc0c5, 0x78ae, 0x0078, 0x15ba, 0x2009, 0x0000, 0x786c,
-+ 0xa065, 0x0040, 0x1737, 0x8108, 0x6000, 0x0078, 0x1730, 0x7ac4,
-+ 0x0078, 0x15b8, 0x2009, 0x4e48, 0x210c, 0x7810, 0xd0ec, 0x00c0,
-+ 0x15b9, 0x2011, 0x4e88, 0x2214, 0x0078, 0x15b8, 0x2009, 0x4e49,
-+ 0x210c, 0x7810, 0xd0ec, 0x00c0, 0x15b9, 0x2011, 0x4e89, 0x2214,
-+ 0x0078, 0x15b8, 0x2061, 0x4e40, 0x6128, 0x622c, 0x8214, 0x8214,
-+ 0x8214, 0x7810, 0xd0ec, 0x00c0, 0x1766, 0x2061, 0x4e80, 0x6328,
-+ 0x73da, 0x632c, 0x831c, 0x831c, 0x831c, 0x73de, 0x0078, 0x15b8,
-+ 0x2009, 0x4e4c, 0x210c, 0x7810, 0xd0ec, 0x00c0, 0x15b9, 0x2011,
-+ 0x4e8c, 0x2214, 0x0078, 0x15b8, 0x7918, 0x0078, 0x15b9, 0x2009,
-+ 0x4e4d, 0x210c, 0x7810, 0xd0ec, 0x00c0, 0x15b9, 0x2011, 0x4e8d,
-+ 0x2214, 0x0078, 0x15b8, 0x2009, 0x4e4e, 0x210c, 0x7810, 0xd0ec,
-+ 0x00c0, 0x15b9, 0x2011, 0x4e8e, 0x2214, 0x0078, 0x15b8, 0x7920,
-+ 0x7810, 0xd0ec, 0x00c0, 0x15b9, 0x7a24, 0x0078, 0x15b8, 0x71c4,
-+ 0xd1fc, 0x00c0, 0x179f, 0x2011, 0x52c0, 0x0078, 0x17a1, 0x2011,
-+ 0x5340, 0x8107, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa268,
-+ 0x6a00, 0x6804, 0xd09c, 0x0040, 0x17b0, 0x6b08, 0x0078, 0x17b1,
-+ 0x6b0c, 0x0078, 0x15b7, 0x77c4, 0x1078, 0x1de4, 0x2091, 0x8000,
-+ 0x6b1c, 0x6a14, 0x2091, 0x8001, 0x2708, 0x0078, 0x15b7, 0x2061,
-+ 0x4e40, 0x6118, 0x7810, 0xd0ec, 0x00c0, 0x15b9, 0x2061, 0x4e80,
-+ 0x6218, 0x0078, 0x15b8, 0x77c4, 0x1078, 0x1de4, 0x2091, 0x8000,
-+ 0x6908, 0x6a18, 0x6b10, 0x77da, 0x2091, 0x8001, 0x0078, 0x15b7,
-+ 0x71c4, 0x2110, 0xa294, 0x000f, 0xa282, 0x0010, 0x00c8, 0x15b2,
-+ 0x1078, 0x277f, 0xa384, 0x4000, 0x0040, 0x17e8, 0xa295, 0x0020,
-+ 0x0078, 0x15b7, 0x71c4, 0x2100, 0xc0bc, 0xa082, 0x0010, 0x00c8,
-+ 0x15b2, 0xd1bc, 0x00c0, 0x17f9, 0x2011, 0x4e48, 0x2204, 0x0078,
-+ 0x17fd, 0x2011, 0x4e88, 0x2204, 0xc0bd, 0x007e, 0x2100, 0xc0bc,
-+ 0x2012, 0x1078, 0x26dc, 0x017f, 0x0078, 0x15b9, 0x71c4, 0x2021,
-+ 0x4e49, 0x2404, 0x70c6, 0x2019, 0x0000, 0x0078, 0x1815, 0x71c8,
-+ 0x2021, 0x4e89, 0x2404, 0x70ca, 0xc3fd, 0x2011, 0x1834, 0x20a9,
-+ 0x0008, 0x2204, 0xa106, 0x0040, 0x1824, 0x8210, 0x00f0, 0x1819,
-+ 0x71c4, 0x72c8, 0x0078, 0x15b1, 0xa292, 0x1834, 0x027e, 0x2122,
-+ 0x017f, 0x1078, 0x26fd, 0x7810, 0xd0ec, 0x00c0, 0x1832, 0xd3fc,
-+ 0x0040, 0x180f, 0x0078, 0x15ba, 0x03e8, 0x00fa, 0x01f4, 0x02ee,
-+ 0x0004, 0x0001, 0x0002, 0x0003, 0x2061, 0x4e40, 0x6128, 0x622c,
-+ 0x8214, 0x8214, 0x8214, 0x70c4, 0x602a, 0x70c8, 0x8003, 0x8003,
-+ 0x8003, 0x602e, 0x7810, 0xd0ec, 0x00c0, 0x1862, 0x027e, 0x017e,
-+ 0x2061, 0x4e80, 0x6128, 0x622c, 0x8214, 0x8214, 0x8214, 0x70d8,
-+ 0x602a, 0x70dc, 0x8003, 0x8003, 0x8003, 0x602e, 0x71da, 0x72de,
-+ 0x017f, 0x027f, 0x0078, 0x15b8, 0x2061, 0x4e40, 0x6130, 0x70c4,
-+ 0x6032, 0x7810, 0xd0ec, 0x00c0, 0x15b9, 0x2061, 0x4e80, 0x6230,
-+ 0x70c8, 0x6032, 0x0078, 0x15b8, 0x7918, 0x0078, 0x15b9, 0x71c4,
-+ 0xa184, 0xffcf, 0x0040, 0x1883, 0x7810, 0xd0ec, 0x00c0, 0x15b2,
-+ 0x72c8, 0x0078, 0x15b1, 0x2011, 0x4e4d, 0x2204, 0x2112, 0x007e,
-+ 0x2019, 0x0000, 0x1078, 0x2764, 0x7810, 0xd0ec, 0x0040, 0x1893,
-+ 0x017f, 0x0078, 0x15b9, 0x71c8, 0xa184, 0xffcf, 0x0040, 0x189c,
-+ 0x2110, 0x71c4, 0x0078, 0x15b1, 0x2011, 0x4e8d, 0x2204, 0x2112,
-+ 0x007e, 0xc3fd, 0x1078, 0x2764, 0x027f, 0x017f, 0x0078, 0x15b8,
-+ 0x71c4, 0xa182, 0x0010, 0x0048, 0x18b4, 0x7810, 0xd0ec, 0x00c0,
-+ 0x15b2, 0x72c8, 0x0078, 0x15b1, 0x2011, 0x4e4e, 0x2204, 0x007e,
-+ 0x2112, 0x2019, 0x0000, 0x1078, 0x2742, 0x7810, 0xd0ec, 0x0040,
-+ 0x18c4, 0x017f, 0x0078, 0x15b9, 0x71c8, 0xa182, 0x0010, 0x0048,
-+ 0x18cd, 0x2110, 0x71c4, 0x0078, 0x15b1, 0x2011, 0x4e8e, 0x2204,
-+ 0x007e, 0x2112, 0xc3fd, 0x1078, 0x2742, 0x027f, 0x017f, 0x0078,
-+ 0x15b8, 0x71c4, 0x72c8, 0xa184, 0xfffd, 0x00c0, 0x15b1, 0xa284,
-+ 0xfffd, 0x00c0, 0x15b1, 0x2100, 0x7920, 0x7822, 0x2200, 0x7a24,
-+ 0x7826, 0x0078, 0x15b8, 0x71c4, 0xd1fc, 0x00c0, 0x18f3, 0x2011,
-+ 0x52c0, 0x0078, 0x18f5, 0x2011, 0x5340, 0x8107, 0xa084, 0x000f,
-+ 0x8003, 0x8003, 0x8003, 0xa268, 0x2019, 0x0000, 0x72c8, 0x2091,
-+ 0x8000, 0x6800, 0x007e, 0xa226, 0x0040, 0x191e, 0x6a02, 0xd4ec,
-+ 0x0040, 0x190b, 0xc3a5, 0xd4e4, 0x0040, 0x190f, 0xc39d, 0xd4f4,
-+ 0x0040, 0x191e, 0x810f, 0xd2f4, 0x0040, 0x191a, 0x1078, 0x27c1,
-+ 0x0078, 0x191e, 0x1078, 0x279f, 0x0078, 0x191e, 0x72cc, 0x6808,
-+ 0xa206, 0x0040, 0x1940, 0xa2a4, 0x00ff, 0x7814, 0xd0e4, 0x00c0,
-+ 0x1931, 0xa482, 0x0028, 0x0048, 0x193d, 0x0040, 0x193d, 0x0078,
-+ 0x1935, 0xa482, 0x0043, 0x0048, 0x193d, 0x71c4, 0x71c6, 0x027f,
-+ 0x72ca, 0x2091, 0x8001, 0x0078, 0x15b3, 0x6a0a, 0xa39d, 0x000a,
-+ 0x6804, 0xa305, 0x6806, 0x027f, 0x6b0c, 0x71c4, 0x2091, 0x8001,
-+ 0x0078, 0x15b7, 0x77c4, 0x1078, 0x1de4, 0x2091, 0x8000, 0x6a14,
-+ 0x6b1c, 0x2091, 0x8001, 0x70c8, 0x6816, 0x70cc, 0x681e, 0x2708,
-+ 0x0078, 0x15b7, 0x70c4, 0x2061, 0x4e40, 0x6118, 0x601a, 0x7810,
-+ 0xd0ec, 0x00c0, 0x15b9, 0x70c8, 0x2061, 0x4e80, 0x6218, 0x601a,
-+ 0x0078, 0x15b8, 0x71c4, 0x72c8, 0x73cc, 0xa182, 0x0010, 0x00c8,
-+ 0x15b2, 0x1078, 0x27e3, 0xa384, 0x4000, 0x0040, 0x1979, 0xa295,
-+ 0x0020, 0x0078, 0x15b7, 0x77c4, 0x1078, 0x1de4, 0x2091, 0x8000,
-+ 0x6a08, 0xc28d, 0x6a0a, 0x2091, 0x8001, 0x2708, 0x0078, 0x15b8,
-+ 0x77c4, 0x1078, 0x1de4, 0x2091, 0x8000, 0x6a08, 0xa294, 0xfff9,
-+ 0x6a0a, 0x6804, 0xa005, 0x0040, 0x1997, 0x1078, 0x2628, 0x2091,
-+ 0x8001, 0x2708, 0x0078, 0x15b8, 0x77c4, 0x1078, 0x1de4, 0x2091,
-+ 0x8000, 0x6a08, 0xc295, 0x6a0a, 0x6804, 0xa005, 0x0040, 0x19aa,
-+ 0x1078, 0x2628, 0x2091, 0x8001, 0x2708, 0x0078, 0x15b8, 0x77c4,
-+ 0x2041, 0x0001, 0x2049, 0x0005, 0x2051, 0x0020, 0x2091, 0x8000,
-+ 0x1078, 0x1dff, 0x2091, 0x8001, 0x2708, 0x6a08, 0x0078, 0x15b8,
-+ 0x77c4, 0x7814, 0xd0e4, 0x00c0, 0x19d4, 0xd7fc, 0x0040, 0x19ce,
-+ 0x1078, 0x1d64, 0x0040, 0x19d4, 0x0078, 0x15bc, 0x1078, 0x1d54,
-+ 0x0040, 0x19d4, 0x0078, 0x15bc, 0x73c8, 0x72cc, 0x77c6, 0x73ca,
-+ 0x72ce, 0x1078, 0x1e86, 0x00c0, 0x19fe, 0x6818, 0xa005, 0x0040,
-+ 0x19f8, 0x2708, 0x077e, 0x1078, 0x2813, 0x077f, 0x00c0, 0x19f8,
-+ 0x2001, 0x0015, 0xd7fc, 0x00c0, 0x19f1, 0x2061, 0x4e40, 0x0078,
-+ 0x19f4, 0xc0fd, 0x2061, 0x4e80, 0x782a, 0x2091, 0x8001, 0x007c,
-+ 0x2091, 0x8001, 0x2001, 0x4005, 0x0078, 0x15bc, 0x2091, 0x8001,
-+ 0x0078, 0x15ba, 0x77c4, 0x7814, 0xd0e4, 0x00c0, 0x1a16, 0xd7fc,
-+ 0x0040, 0x1a10, 0x1078, 0x1d64, 0x0040, 0x1a16, 0x0078, 0x15bc,
-+ 0x1078, 0x1d54, 0x0040, 0x1a16, 0x0078, 0x15bc, 0x77c6, 0x2041,
-+ 0x0021, 0x2049, 0x0005, 0x2051, 0x0020, 0x2091, 0x8000, 0x1078,
-+ 0x1dff, 0x2009, 0x0016, 0xd7fc, 0x00c0, 0x1a2a, 0x2061, 0x4e40,
-+ 0x0078, 0x1a2d, 0x2061, 0x4e80, 0xc1fd, 0x6067, 0x0003, 0x607f,
-+ 0x0000, 0x6776, 0x6083, 0x000f, 0x792a, 0x61d4, 0xc1dc, 0x61d6,
-+ 0x1078, 0x2628, 0x2091, 0x8001, 0x007c, 0x77c8, 0x77ca, 0x77c4,
-+ 0x77c6, 0x7814, 0xd0e4, 0x00c0, 0x1a54, 0xd7fc, 0x0040, 0x1a4e,
-+ 0x1078, 0x1d64, 0x0040, 0x1a54, 0x0078, 0x15bc, 0x1078, 0x1d54,
-+ 0x0040, 0x1a54, 0x0078, 0x15bc, 0xa7bc, 0xff00, 0x2091, 0x8000,
-+ 0x2009, 0x0017, 0xd7fc, 0x00c0, 0x1a61, 0x2061, 0x4e40, 0x0078,
-+ 0x1a64, 0x2061, 0x4e80, 0xc1fd, 0x607f, 0x0000, 0x6067, 0x0002,
-+ 0x6776, 0x6083, 0x000f, 0x792a, 0x61d4, 0xc1dc, 0x61d6, 0x1078,
-+ 0x2628, 0x2091, 0x8001, 0x2041, 0x0021, 0x2049, 0x0005, 0x2051,
-+ 0x0010, 0x2091, 0x8000, 0x70c8, 0xa005, 0x0040, 0x1a82, 0x60d4,
-+ 0xc0fd, 0x60d6, 0x1078, 0x1dff, 0x70c8, 0x6836, 0x8738, 0xa784,
-+ 0x001f, 0x00c0, 0x1a82, 0x2091, 0x8001, 0x007c, 0x2019, 0x0000,
-+ 0x7814, 0xd0e4, 0x00c0, 0x1aa4, 0x72c8, 0xd284, 0x0040, 0x1a9e,
-+ 0x1078, 0x1d64, 0x0040, 0x1aa4, 0x0078, 0x15bc, 0x1078, 0x1d54,
-+ 0x0040, 0x1aa4, 0x0078, 0x15bc, 0x72c8, 0x72ca, 0x78ac, 0xa084,
-+ 0x0003, 0x00c0, 0x1acf, 0x2039, 0x0000, 0xd284, 0x0040, 0x1ab1,
-+ 0xc7fd, 0x2041, 0x0021, 0x2049, 0x0004, 0x2051, 0x0008, 0x1078,
-+ 0x1de4, 0x2091, 0x8000, 0x6808, 0xc0d4, 0xa80d, 0x690a, 0x2091,
-+ 0x8001, 0x8738, 0xa784, 0x001f, 0x00c0, 0x1ab7, 0xa7bc, 0xff00,
-+ 0x873f, 0x8738, 0x873f, 0xa784, 0x0f00, 0x00c0, 0x1ab7, 0x2091,
-+ 0x8000, 0x72c8, 0xd284, 0x00c0, 0x1ae1, 0x7810, 0xd0ec, 0x0040,
-+ 0x1add, 0x2069, 0x0100, 0x0078, 0x1ae3, 0x2069, 0x0200, 0x0078,
-+ 0x1ae3, 0x2069, 0x0100, 0x6808, 0xa084, 0xfffd, 0x680a, 0x6830,
-+ 0xd0b4, 0x0040, 0x1b03, 0x684b, 0x0004, 0x20a9, 0x0014, 0x6848,
-+ 0xd094, 0x0040, 0x1af5, 0x00f0, 0x1aef, 0x684b, 0x0009, 0x20a9,
-+ 0x0014, 0x6848, 0xd084, 0x0040, 0x1aff, 0x00f0, 0x1af9, 0x20a9,
-+ 0x00fa, 0x00f0, 0x1b01, 0x2079, 0x4e00, 0x2009, 0x0018, 0x72c8,
-+ 0xd284, 0x00c0, 0x1b0f, 0x2061, 0x4e40, 0x0078, 0x1b12, 0x2061,
-+ 0x4e80, 0xc1fd, 0x607f, 0x0000, 0x792a, 0x6067, 0x0001, 0x6083,
-+ 0x000f, 0x60a7, 0x0000, 0x60a8, 0x60b2, 0x60b6, 0x60d4, 0xd0b4,
-+ 0x0040, 0x1b2e, 0xc0b4, 0x60d6, 0x0c7e, 0x60b8, 0xa065, 0x6008,
-+ 0xc0d4, 0x600a, 0x6018, 0x8001, 0x601a, 0x0c7f, 0x60d4, 0xa084,
-+ 0x77ff, 0x60d6, 0x78ac, 0xc08d, 0x78ae, 0x83ff, 0x0040, 0x1b39,
-+ 0x007c, 0x681b, 0x0047, 0x2091, 0x8001, 0x007c, 0x73cc, 0x1078,
-+ 0x1a90, 0x69ec, 0x6a48, 0xa185, 0x1800, 0x684a, 0xa185, 0x0040,
-+ 0x68ee, 0x73cc, 0x2021, 0x0004, 0x20a9, 0x09ff, 0x00f0, 0x1b4e,
-+ 0x8421, 0x00c0, 0x1b4c, 0x8319, 0x00c0, 0x1b4a, 0x69ee, 0x6a4a,
-+ 0x2091, 0x8001, 0x007c, 0xd7fc, 0x00c0, 0x1b62, 0x2069, 0x4e40,
-+ 0x0078, 0x1b64, 0x2069, 0x4e80, 0x71c4, 0x71c6, 0x6916, 0x81ff,
-+ 0x00c0, 0x1b6c, 0x68a7, 0x0001, 0x78ac, 0xc08c, 0x78ae, 0xd084,
-+ 0x00c0, 0x1b74, 0x1078, 0x1ee6, 0x007c, 0x75d8, 0x74dc, 0x75da,
-+ 0x74de, 0x0078, 0x1b7e, 0x2029, 0x0000, 0x2520, 0x71c4, 0x73c8,
-+ 0x72cc, 0x71c6, 0x73ca, 0x72ce, 0x2079, 0x4e00, 0x7dde, 0x7cda,
-+ 0x7bd6, 0x7ad2, 0x1078, 0x1dbd, 0x0040, 0x1c80, 0x20a9, 0x0005,
-+ 0x20a1, 0x4e14, 0x2091, 0x8000, 0x41a1, 0x2091, 0x8001, 0x2009,
-+ 0x0040, 0x1078, 0x1fd1, 0x0040, 0x1ba1, 0x1078, 0x1dc6, 0x0078,
-+ 0x1c80, 0x6004, 0xa08c, 0x00ff, 0xa18e, 0x0009, 0x00c0, 0x1bac,
-+ 0x007e, 0x1078, 0x2378, 0x007f, 0xa084, 0xff00, 0x8007, 0x8009,
-+ 0x0040, 0x1c20, 0x0c7e, 0x2c68, 0x1078, 0x1dbd, 0x0040, 0x1bf2,
-+ 0x2c00, 0x689e, 0x8109, 0x00c0, 0x1bb3, 0x609f, 0x0000, 0x0c7f,
-+ 0x0c7e, 0x7ddc, 0x7cd8, 0x7bd4, 0x7ad0, 0xa290, 0x0040, 0xa399,
-+ 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x7dde, 0x7cda, 0x7bd6,
-+ 0x7ad2, 0x2c68, 0x689c, 0xa065, 0x0040, 0x1c1f, 0x2009, 0x0040,
-+ 0x1078, 0x1fd1, 0x00c0, 0x1c09, 0x6004, 0xa084, 0x00ff, 0xa086,
-+ 0x0002, 0x00c0, 0x1bf2, 0x6004, 0xa084, 0x00ff, 0xa086, 0x000a,
-+ 0x00c0, 0x1bee, 0x017e, 0x1078, 0x2374, 0x017f, 0x2d00, 0x6002,
-+ 0x0078, 0x1bc1, 0x0c7f, 0x0c7e, 0x609c, 0x1078, 0x1e49, 0x0c7f,
-+ 0x609f, 0x0000, 0x1078, 0x1c84, 0x2009, 0x0018, 0x6008, 0xc0cd,
-+ 0x600a, 0x6004, 0x6086, 0x1078, 0x1d74, 0x1078, 0x1dc6, 0x0078,
-+ 0x1c80, 0x0c7f, 0x0c7e, 0x609c, 0x1078, 0x1e49, 0x0c7f, 0x609f,
-+ 0x0000, 0x1078, 0x1c84, 0x2009, 0x0018, 0x6087, 0x0103, 0x601b,
-+ 0x0003, 0x1078, 0x1d74, 0x1078, 0x1dc6, 0x0078, 0x1c80, 0x0c7f,
-+ 0x7814, 0xd0e4, 0x00c0, 0x1c45, 0x6114, 0xd1fc, 0x0040, 0x1c2e,
-+ 0x1078, 0x1d64, 0x0040, 0x1c45, 0x0078, 0x1c32, 0x1078, 0x1d54,
-+ 0x0040, 0x1c45, 0x2029, 0x0000, 0x2520, 0x2009, 0x0018, 0x73c8,
-+ 0x72cc, 0x6087, 0x0103, 0x601b, 0x0021, 0x1078, 0x1d74, 0x1078,
-+ 0x1dc6, 0x2001, 0x4007, 0x0078, 0x15bc, 0x74c4, 0x73c8, 0x72cc,
-+ 0x6014, 0x2091, 0x8000, 0x0e7e, 0x2009, 0x0012, 0xd0fc, 0x00c0,
-+ 0x1c55, 0x2071, 0x4e40, 0x0078, 0x1c58, 0x2071, 0x4e80, 0xc1fd,
-+ 0x792a, 0x7067, 0x0005, 0x71d4, 0xc1dc, 0x71d6, 0x736a, 0x726e,
-+ 0x7472, 0x7076, 0x707b, 0x0000, 0x2c00, 0x707e, 0xa02e, 0x2530,
-+ 0x611c, 0xa184, 0x0060, 0x0040, 0x1c6f, 0x1078, 0x4632, 0x0e7f,
-+ 0x6596, 0x65a6, 0x669a, 0x66aa, 0x60af, 0x0000, 0x60b3, 0x0000,
-+ 0x6714, 0x6023, 0x0000, 0x1078, 0x2628, 0x2091, 0x8001, 0x007c,
-+ 0x70c3, 0x4005, 0x0078, 0x15bd, 0x20a9, 0x0005, 0x2099, 0x4e14,
-+ 0x2091, 0x8000, 0x530a, 0x2091, 0x8001, 0x2100, 0xa210, 0xa399,
-+ 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x007c, 0x71c4, 0x70c7,
-+ 0x0000, 0x791e, 0x0078, 0x15ba, 0x71c4, 0x71c6, 0x2168, 0x0078,
-+ 0x1ca3, 0x2069, 0x1000, 0x690c, 0xa016, 0x2d04, 0xa210, 0x8d68,
-+ 0x8109, 0x00c0, 0x1ca5, 0xa285, 0x0000, 0x00c0, 0x1cb3, 0x70c3,
-+ 0x4000, 0x0078, 0x1cb5, 0x70c3, 0x4003, 0x70ca, 0x0078, 0x15bd,
-+ 0x7964, 0x71c6, 0x71c4, 0xa182, 0x0003, 0x00c8, 0x15b2, 0x7966,
-+ 0x0078, 0x15ba, 0x7964, 0x71c6, 0x0078, 0x15ba, 0x7900, 0x71c6,
-+ 0x71c4, 0x7902, 0x0078, 0x15ba, 0x7900, 0x71c6, 0x0078, 0x15ba,
-+ 0x70c4, 0x2011, 0x0000, 0xa08c, 0x000d, 0x0040, 0x1ce5, 0x810c,
-+ 0x0048, 0x1ce1, 0x8210, 0x810c, 0x810c, 0x0048, 0x1ce1, 0x8210,
-+ 0x810c, 0x81ff, 0x00c0, 0x15b3, 0x8210, 0x7a0e, 0xd28c, 0x0040,
-+ 0x1d11, 0x7910, 0xc1cd, 0x7912, 0x2009, 0x0021, 0x2019, 0x0003,
-+ 0xd284, 0x0040, 0x1d0b, 0x8108, 0x2019, 0x0041, 0x2011, 0x964e,
-+ 0x2312, 0x2019, 0x0042, 0x8210, 0x2312, 0x2019, 0x0043, 0x8210,
-+ 0x2312, 0x2019, 0x0046, 0x8210, 0x2312, 0x2019, 0x0047, 0x8210,
-+ 0x2312, 0x2019, 0x0006, 0x2011, 0x9653, 0x2112, 0x2011, 0x9673,
-+ 0x2312, 0x7904, 0x7806, 0x0078, 0x15b9, 0x7804, 0x70c6, 0x0078,
-+ 0x15ba, 0x71c4, 0xd1fc, 0x00c0, 0x1d21, 0x2011, 0x52c0, 0x0078,
-+ 0x1d23, 0x2011, 0x5340, 0x8107, 0xa084, 0x000f, 0x8003, 0x8003,
-+ 0x8003, 0xa268, 0x6a14, 0xd2b4, 0x0040, 0x1d32, 0x2011, 0x0001,
-+ 0x0078, 0x1d34, 0x2011, 0x0000, 0x6b0c, 0x6800, 0x70da, 0x0078,
-+ 0x15b7, 0x017e, 0x7814, 0xd0f4, 0x0040, 0x1d46, 0x2001, 0x4007,
-+ 0x70db, 0x0000, 0xa18d, 0x0001, 0x0078, 0x1d52, 0xd0fc, 0x0040,
-+ 0x1d51, 0x2001, 0x4007, 0x70db, 0x0001, 0xa18d, 0x0001, 0x0078,
-+ 0x1d52, 0xa006, 0x017f, 0x007c, 0x017e, 0x7814, 0xd0f4, 0x0040,
-+ 0x1d61, 0x2001, 0x4007, 0x70db, 0x0000, 0xa18d, 0x0001, 0x0078,
-+ 0x1d62, 0xa006, 0x017f, 0x007c, 0x017e, 0x7814, 0xd0fc, 0x0040,
-+ 0x1d71, 0x2001, 0x4007, 0x70db, 0x0001, 0xa18d, 0x0001, 0x0078,
-+ 0x1d72, 0xa006, 0x017f, 0x007c, 0x7112, 0x721a, 0x731e, 0x7810,
-+ 0xd0c4, 0x0040, 0x1d7d, 0x7422, 0x7526, 0xac80, 0x0001, 0x8108,
-+ 0x810c, 0x81a9, 0x8098, 0x20a1, 0x0030, 0x7003, 0x0000, 0x6084,
-+ 0x20a2, 0x53a6, 0x7007, 0x0001, 0x7974, 0xa184, 0xff00, 0x0040,
-+ 0x1d9a, 0x810f, 0x810c, 0x810c, 0x8004, 0x8004, 0x8007, 0xa100,
-+ 0x0078, 0x1d9d, 0x8107, 0x8004, 0x8004, 0x797c, 0xa108, 0x7a78,
-+ 0xa006, 0xa211, 0x7d10, 0xd5c4, 0x0040, 0x1daa, 0x7b84, 0xa319,
-+ 0x7c80, 0xa421, 0x7008, 0xd0fc, 0x0040, 0x1daa, 0x7003, 0x0001,
-+ 0x7007, 0x0006, 0x711a, 0x721e, 0x7d10, 0xd5c4, 0x0040, 0x1dba,
-+ 0x7322, 0x7426, 0xa084, 0x01e0, 0x007c, 0x7848, 0xa065, 0x0040,
-+ 0x1dc5, 0x2c04, 0x784a, 0x2063, 0x0000, 0x007c, 0x0f7e, 0x2079,
-+ 0x4e00, 0x7848, 0x2062, 0x2c00, 0xa005, 0x00c0, 0x1dd1, 0x1078,
-+ 0x296b, 0x784a, 0x0f7f, 0x007c, 0x2011, 0x9800, 0x7a4a, 0x7bc4,
-+ 0x8319, 0x0040, 0x1de1, 0xa280, 0x0032, 0x2012, 0x2010, 0x0078,
-+ 0x1dd8, 0x2013, 0x0000, 0x007c, 0x017e, 0x027e, 0xd7fc, 0x00c0,
-+ 0x1ded, 0x2011, 0x53c0, 0x0078, 0x1def, 0x2011, 0x73c0, 0xa784,
-+ 0x0f00, 0x800b, 0xa784, 0x001f, 0x0040, 0x1dfa, 0x8003, 0x8003,
-+ 0x8003, 0x8003, 0xa105, 0xa268, 0x027f, 0x017f, 0x007c, 0x1078,
-+ 0x1de4, 0x2900, 0x682a, 0x2a00, 0x682e, 0x6808, 0xa084, 0xf9ef,
-+ 0xa80d, 0x690a, 0x0e7e, 0xd7fc, 0x00c0, 0x1e14, 0x2009, 0x4e53,
-+ 0x2071, 0x4e40, 0x0078, 0x1e18, 0x2009, 0x4e93, 0x2071, 0x4e80,
-+ 0x210c, 0x6804, 0xa005, 0x0040, 0x1e28, 0xa116, 0x00c0, 0x1e28,
-+ 0x2060, 0x6000, 0x6806, 0x017e, 0x200b, 0x0000, 0x0078, 0x1e2b,
-+ 0x2009, 0x0000, 0x017e, 0x6804, 0xa065, 0x0040, 0x1e40, 0x6000,
-+ 0x6806, 0x1078, 0x1e5b, 0x1078, 0x201d, 0x6810, 0x7908, 0x8109,
-+ 0x790a, 0x8001, 0x6812, 0x00c0, 0x1e2b, 0x7910, 0xc1a5, 0x7912,
-+ 0x017f, 0x6902, 0x6906, 0x2d00, 0x2060, 0x1078, 0x2acc, 0x0e7f,
-+ 0x007c, 0xa065, 0x0040, 0x1e5a, 0x2008, 0x609c, 0xa005, 0x0040,
-+ 0x1e57, 0x2062, 0x609f, 0x0000, 0xa065, 0x0078, 0x1e4d, 0x7848,
-+ 0x794a, 0x2062, 0x007c, 0x6007, 0x0103, 0x608f, 0x0000, 0x20a9,
-+ 0x001c, 0xac80, 0x0005, 0x20a0, 0x2001, 0x0000, 0x40a4, 0x6828,
-+ 0x601a, 0x682c, 0x6022, 0x007c, 0x0e7e, 0xd7fc, 0x00c0, 0x1e76,
-+ 0x2071, 0x4e40, 0x2031, 0x4ec0, 0x0078, 0x1e7a, 0x2071, 0x4e80,
-+ 0x2031, 0x50c0, 0x7050, 0xa08c, 0x0200, 0x00c0, 0x1e84, 0xa608,
-+ 0x2d0a, 0x8000, 0x7052, 0xa006, 0x0e7f, 0x007c, 0x0f7e, 0xd7fc,
-+ 0x00c0, 0x1e8e, 0x2079, 0x4e40, 0x0078, 0x1e90, 0x2079, 0x4e80,
-+ 0x1078, 0x1de4, 0x2091, 0x8000, 0x6804, 0x780a, 0xa065, 0x0040,
-+ 0x1ee4, 0x0078, 0x1ea2, 0x2c00, 0x780a, 0x2060, 0x6000, 0xa065,
-+ 0x0040, 0x1ee4, 0x6010, 0xa306, 0x00c0, 0x1e9b, 0x600c, 0xa206,
-+ 0x00c0, 0x1e9b, 0x2c28, 0x784c, 0xac06, 0x00c0, 0x1eb1, 0x0078,
-+ 0x1ee1, 0x6804, 0xac06, 0x00c0, 0x1ebf, 0x6000, 0x2060, 0x6806,
-+ 0xa005, 0x00c0, 0x1ebf, 0x6803, 0x0000, 0x0078, 0x1ec9, 0x6400,
-+ 0x7808, 0x2060, 0x6402, 0xa486, 0x0000, 0x00c0, 0x1ec9, 0x2c00,
-+ 0x6802, 0x2560, 0x0f7f, 0x1078, 0x1e5b, 0x0f7e, 0x601b, 0x0005,
-+ 0x6023, 0x0020, 0x0f7f, 0x1078, 0x201d, 0x0f7e, 0x7908, 0x8109,
-+ 0x790a, 0x6810, 0x8001, 0x6812, 0x00c0, 0x1ee1, 0x7810, 0xc0a5,
-+ 0x7812, 0x2001, 0xffff, 0xa005, 0x0f7f, 0x007c, 0x077e, 0x2700,
-+ 0x2039, 0x0000, 0xd0fc, 0x0040, 0x1eee, 0xc7fd, 0x2041, 0x0021,
-+ 0x2049, 0x0004, 0x2051, 0x0008, 0x2091, 0x8000, 0x1078, 0x1dff,
-+ 0x8738, 0xa784, 0x001f, 0x00c0, 0x1ef6, 0xa7bc, 0xff00, 0x873f,
-+ 0x8738, 0x873f, 0xa784, 0x0f00, 0x00c0, 0x1ef6, 0x2091, 0x8001,
-+ 0x077f, 0x007c, 0x786c, 0x2009, 0x9674, 0x210c, 0xa10d, 0x0040,
-+ 0x1f14, 0xa065, 0x0078, 0x2395, 0x2061, 0x0000, 0x6018, 0xd084,
-+ 0x00c0, 0x1f34, 0x7810, 0xd08c, 0x0040, 0x1f25, 0xc08c, 0x7812,
-+ 0xc7fc, 0x2069, 0x4e40, 0x0078, 0x1f2a, 0xc08d, 0x7812, 0x2069,
-+ 0x4e80, 0xc7fd, 0x2091, 0x8000, 0x681c, 0x681f, 0x0000, 0x2091,
-+ 0x8001, 0xa005, 0x00c0, 0x1f35, 0x007c, 0xa08c, 0xfff0, 0x0040,
-+ 0x1f3b, 0x1078, 0x296b, 0x0079, 0x1f3d, 0x1f4d, 0x1f50, 0x1f56,
-+ 0x1f5a, 0x1f4e, 0x1f5e, 0x1f4e, 0x1f4e, 0x1f4e, 0x1f64, 0x1f95,
-+ 0x1f99, 0x1f9f, 0x1fb4, 0x1f4e, 0x1f4e, 0x007c, 0x1078, 0x296b,
-+ 0x1078, 0x1ee6, 0x2001, 0x8001, 0x0078, 0x1fc0, 0x2001, 0x8003,
-+ 0x0078, 0x1fc0, 0x2001, 0x8004, 0x0078, 0x1fc0, 0x1078, 0x1ee6,
-+ 0x2001, 0x8006, 0x0078, 0x1fc0, 0x2091, 0x8000, 0x077e, 0xd7fc,
-+ 0x00c0, 0x1f70, 0x2069, 0x4e40, 0x2039, 0x0009, 0x0078, 0x1f74,
-+ 0x2069, 0x4e80, 0x2039, 0x0009, 0x6800, 0xa086, 0x0000, 0x0040,
-+ 0x1f7e, 0x007f, 0x6f1e, 0x2091, 0x8001, 0x007c, 0x6874, 0x077f,
-+ 0xa0bc, 0xff00, 0x2041, 0x0021, 0x2049, 0x0004, 0x2051, 0x0010,
-+ 0x1078, 0x1dff, 0x8738, 0xa784, 0x001f, 0x00c0, 0x1f88, 0x2091,
-+ 0x8001, 0x2001, 0x800a, 0x0078, 0x1fc0, 0x2001, 0x800c, 0x0078,
-+ 0x1fc0, 0x1078, 0x1ee6, 0x2001, 0x800d, 0x0078, 0x1fc0, 0x7814,
-+ 0xd0e4, 0x00c0, 0x1fb2, 0xd0ec, 0x0040, 0x1fac, 0xd7fc, 0x0040,
-+ 0x1fac, 0x78e4, 0x0078, 0x1fad, 0x78e0, 0x70c6, 0x2001, 0x800e,
-+ 0x0078, 0x1fc0, 0x0078, 0x1f4e, 0xd7fc, 0x0040, 0x1fba, 0x78ec,
-+ 0x0078, 0x1fbb, 0x78e8, 0x70c6, 0x2001, 0x800f, 0x0078, 0x1fc0,
-+ 0x70c2, 0xd7fc, 0x00c0, 0x1fc8, 0x70db, 0x0000, 0x0078, 0x1fca,
-+ 0x70db, 0x0001, 0x2061, 0x0000, 0x601b, 0x0001, 0x2091, 0x4080,
-+ 0x007c, 0xac80, 0x0001, 0x81ff, 0x0040, 0x1ffc, 0x2099, 0x0030,
-+ 0x20a0, 0x700c, 0xa084, 0x03ff, 0x0040, 0x1fde, 0x7018, 0x007e,
-+ 0x701c, 0x007e, 0x7020, 0x007e, 0x7024, 0x007e, 0x7112, 0x81ac,
-+ 0x721a, 0x731e, 0x7422, 0x7526, 0x7003, 0x0001, 0x7007, 0x0001,
-+ 0x7008, 0x800b, 0x00c8, 0x1ff0, 0x7007, 0x0002, 0xa08c, 0x01e0,
-+ 0x00c0, 0x1ffc, 0x53a5, 0xa006, 0x7003, 0x0000, 0x7007, 0x0004,
-+ 0x007f, 0x7026, 0x007f, 0x7022, 0x007f, 0x701e, 0x007f, 0x701a,
-+ 0x007c, 0x2011, 0x0020, 0x2009, 0x0010, 0x6b0a, 0x6c0e, 0x6803,
-+ 0xfd00, 0x6807, 0x0018, 0x6a1a, 0x2d00, 0xa0e8, 0x0008, 0xa290,
-+ 0x0004, 0x8109, 0x00c0, 0x200d, 0x007c, 0x6004, 0x6086, 0x2c08,
-+ 0x2063, 0x0000, 0x7868, 0xa005, 0x796a, 0x0040, 0x202a, 0x2c02,
-+ 0x0078, 0x202b, 0x796e, 0x007c, 0x0c7e, 0x2061, 0x4e00, 0x6887,
-+ 0x0103, 0x2d08, 0x206b, 0x0000, 0x6068, 0xa005, 0x616a, 0x0040,
-+ 0x203c, 0x2d02, 0x0078, 0x203d, 0x616e, 0x0c7f, 0x007c, 0x2091,
-+ 0x8000, 0x2c04, 0x786e, 0xa005, 0x00c0, 0x2047, 0x786a, 0x2091,
-+ 0x8001, 0x609c, 0xa005, 0x0040, 0x2060, 0x0c7e, 0x2060, 0x2008,
-+ 0x609c, 0xa005, 0x0040, 0x205c, 0x2062, 0x609f, 0x0000, 0xa065,
-+ 0x609c, 0xa005, 0x00c0, 0x2054, 0x7848, 0x794a, 0x2062, 0x0c7f,
-+ 0x7848, 0x2062, 0x609f, 0x0000, 0xac85, 0x0000, 0x00c0, 0x206a,
-+ 0x1078, 0x296b, 0x784a, 0x007c, 0x20a9, 0x0010, 0xa006, 0x8004,
-+ 0x8086, 0x818e, 0x00c8, 0x2075, 0xa200, 0x00f0, 0x2070, 0x8086,
-+ 0x818e, 0x007c, 0x157e, 0x20a9, 0x0010, 0xa005, 0x0040, 0x209b,
-+ 0xa11a, 0x00c8, 0x209b, 0x8213, 0x818d, 0x0048, 0x208e, 0xa11a,
-+ 0x00c8, 0x208f, 0x00f0, 0x2083, 0x0078, 0x2093, 0xa11a, 0x2308,
-+ 0x8210, 0x00f0, 0x2083, 0x007e, 0x3200, 0xa084, 0xf7ff, 0x2080,
-+ 0x007f, 0x157f, 0x007c, 0x007e, 0x3200, 0xa085, 0x0800, 0x0078,
-+ 0x2097, 0x7d74, 0x70d0, 0xa506, 0x0040, 0x2187, 0x7810, 0x2050,
-+ 0x7800, 0xd08c, 0x0040, 0x20c3, 0xdaec, 0x0040, 0x20c3, 0x0e7e,
-+ 0x2091, 0x8000, 0x2071, 0x0020, 0x7004, 0xa005, 0x00c0, 0x20c0,
-+ 0x7008, 0x0e7f, 0xa086, 0x0008, 0x0040, 0x20c3, 0x0078, 0x2187,
-+ 0x0e7f, 0x0078, 0x2187, 0x1078, 0x1dbd, 0x0040, 0x2187, 0xa046,
-+ 0x7970, 0x2500, 0x8000, 0xa112, 0x2009, 0x0040, 0x00c8, 0x20d2,
-+ 0x0078, 0x20d9, 0x72d0, 0xa206, 0x0040, 0x20d9, 0x8840, 0x2009,
-+ 0x0080, 0x0c7e, 0x7112, 0x7007, 0x0001, 0x2099, 0x0030, 0x20a9,
-+ 0x0020, 0xac80, 0x0001, 0x20a0, 0x2061, 0x0000, 0x88ff, 0x0040,
-+ 0x20eb, 0x1078, 0x1dbd, 0x7008, 0xd0fc, 0x0040, 0x20eb, 0x7007,
-+ 0x0002, 0x2091, 0x8001, 0xa08c, 0x01e0, 0x00c0, 0x2122, 0x53a5,
-+ 0x8cff, 0x00c0, 0x2100, 0x88ff, 0x0040, 0x2171, 0x0078, 0x210a,
-+ 0x2c00, 0x788e, 0x20a9, 0x0020, 0xac80, 0x0001, 0x20a0, 0x53a5,
-+ 0x0078, 0x2171, 0xa046, 0x7218, 0x731c, 0xdac4, 0x0040, 0x2112,
-+ 0x7420, 0x7524, 0xa292, 0x0040, 0xa39b, 0x0000, 0xa4a3, 0x0000,
-+ 0xa5ab, 0x0000, 0x721a, 0x731e, 0xdac4, 0x0040, 0x2122, 0x7422,
-+ 0x7526, 0xa006, 0x7007, 0x0004, 0x0040, 0x2171, 0x8cff, 0x0040,
-+ 0x212b, 0x1078, 0x1dc6, 0x0c7f, 0x1078, 0x1dc6, 0xa046, 0x7888,
-+ 0x8000, 0x788a, 0xa086, 0x0002, 0x0040, 0x2151, 0x7a7c, 0x7b78,
-+ 0xdac4, 0x0040, 0x213d, 0x7c84, 0x7d80, 0x7974, 0x8107, 0x8004,
-+ 0x8004, 0xa210, 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000,
-+ 0x721a, 0x731e, 0xdac4, 0x0040, 0x2187, 0x7422, 0x7526, 0x0078,
-+ 0x2187, 0x6014, 0xd0fc, 0x00c0, 0x2159, 0x2069, 0x4e40, 0x0078,
-+ 0x215b, 0x2069, 0x4e80, 0x2091, 0x8000, 0x681f, 0x0002, 0x88ff,
-+ 0x0040, 0x2167, 0xa046, 0x788c, 0x2060, 0x0078, 0x2151, 0x788b,
-+ 0x0000, 0x78ac, 0xa085, 0x0003, 0x78ae, 0x2091, 0x8001, 0x0078,
-+ 0x2187, 0x0c7f, 0x788b, 0x0000, 0x1078, 0x2346, 0x6004, 0xa084,
-+ 0x000f, 0x1078, 0x2188, 0x88ff, 0x0040, 0x2185, 0x788c, 0x2060,
-+ 0x6004, 0xa084, 0x000f, 0x1078, 0x2188, 0x0078, 0x20a1, 0x007c,
-+ 0x0079, 0x218a, 0x219a, 0x21b8, 0x21d6, 0x219a, 0x21e7, 0x21ab,
-+ 0x219a, 0x219a, 0x219a, 0x21b6, 0x21d4, 0x219a, 0x219a, 0x219a,
-+ 0x219a, 0x219a, 0x2039, 0x0400, 0x78bc, 0xa705, 0x78be, 0x6008,
-+ 0xa705, 0x600a, 0x1078, 0x222a, 0x609c, 0x78ba, 0x609f, 0x0000,
-+ 0x1078, 0x2330, 0x007c, 0x78bc, 0xd0c4, 0x0040, 0x21b1, 0x0078,
-+ 0x219a, 0x601c, 0xc0bd, 0x601e, 0x0078, 0x21be, 0x1078, 0x2378,
-+ 0x78bc, 0xd0c4, 0x0040, 0x21be, 0x0078, 0x219a, 0x78bf, 0x0000,
-+ 0x6004, 0x8007, 0xa084, 0x00ff, 0x78b2, 0x8001, 0x0040, 0x21d1,
-+ 0x1078, 0x222a, 0x0040, 0x21d1, 0x78bc, 0xc0c5, 0x78be, 0x0078,
-+ 0x21d3, 0x0078, 0x2249, 0x007c, 0x1078, 0x2374, 0x78bc, 0xa08c,
-+ 0x0e00, 0x00c0, 0x21de, 0xd0c4, 0x00c0, 0x21e0, 0x0078, 0x219a,
-+ 0x1078, 0x222a, 0x00c0, 0x21e6, 0x0078, 0x2249, 0x007c, 0x78bc,
-+ 0xd0c4, 0x0040, 0x21ed, 0x0078, 0x219a, 0x78bf, 0x0000, 0x6714,
-+ 0x2011, 0x0001, 0x22a8, 0x6018, 0xa084, 0x00ff, 0xa005, 0x0040,
-+ 0x220d, 0xa7bc, 0xff00, 0x20a9, 0x0020, 0xa08e, 0x0001, 0x0040,
-+ 0x220d, 0xa7bc, 0x8000, 0x2011, 0x0002, 0x20a9, 0x0100, 0xa08e,
-+ 0x0002, 0x0040, 0x220d, 0x0078, 0x2227, 0x1078, 0x1de4, 0x2d00,
-+ 0x2091, 0x8000, 0x682b, 0x0000, 0x682f, 0x0000, 0x6808, 0xa084,
-+ 0xffde, 0x680a, 0xade8, 0x0010, 0x2091, 0x8001, 0x00f0, 0x2210,
-+ 0x8211, 0x0040, 0x2227, 0x20a9, 0x0100, 0x0078, 0x2210, 0x1078,
-+ 0x1dc6, 0x007c, 0x609f, 0x0000, 0x78b4, 0xa06d, 0x2c00, 0x78b6,
-+ 0x00c0, 0x2235, 0x78ba, 0x0078, 0x223d, 0x689e, 0x2d00, 0x6002,
-+ 0x78b8, 0xad06, 0x00c0, 0x223d, 0x6002, 0x78b0, 0x8001, 0x78b2,
-+ 0x00c0, 0x2248, 0x78bc, 0xc0c4, 0x78be, 0x78b8, 0x2060, 0xa006,
-+ 0x007c, 0x0e7e, 0xa02e, 0x2530, 0x7dba, 0x7db6, 0x65ae, 0x65b2,
-+ 0x601c, 0x60a2, 0x2048, 0xa984, 0xe1ff, 0x601e, 0xa984, 0x0060,
-+ 0x0040, 0x225c, 0x1078, 0x4632, 0x6596, 0x65a6, 0x669a, 0x66aa,
-+ 0x6714, 0x2071, 0x4e80, 0xd7fc, 0x00c0, 0x2268, 0x2071, 0x4e40,
-+ 0xa784, 0x0f00, 0x800b, 0xa784, 0x001f, 0x0040, 0x2273, 0x8003,
-+ 0x8003, 0x8003, 0x8003, 0xa105, 0x71c4, 0xa168, 0x2700, 0x8007,
-+ 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0x71c8, 0xa100, 0x60c2,
-+ 0x2091, 0x8000, 0x7814, 0xd0c4, 0x0040, 0x2298, 0xd0ec, 0x0040,
-+ 0x2294, 0xd7fc, 0x00c0, 0x2291, 0xd0f4, 0x00c0, 0x229f, 0x0078,
-+ 0x2298, 0xd0fc, 0x00c0, 0x229f, 0x7810, 0xd0f4, 0x00c0, 0x229f,
-+ 0x6e08, 0xd684, 0x0040, 0x22c9, 0xd9fc, 0x00c0, 0x22c9, 0x2091,
-+ 0x8001, 0x1078, 0x1e5b, 0x2091, 0x8000, 0x1078, 0x201d, 0x2091,
-+ 0x8001, 0x7814, 0xd0e4, 0x00c0, 0x232e, 0x7814, 0xd0c4, 0x0040,
-+ 0x232e, 0xd0ec, 0x0040, 0x22c1, 0xd7fc, 0x00c0, 0x22bc, 0xd0f4,
-+ 0x00c0, 0x22c5, 0x0078, 0x232e, 0xd0fc, 0x00c0, 0x22c5, 0x0078,
-+ 0x232e, 0x7810, 0xd0f4, 0x0040, 0x232e, 0x601b, 0x0021, 0x0078,
-+ 0x232e, 0x6024, 0xa096, 0x0001, 0x00c0, 0x22d0, 0x8000, 0x6026,
-+ 0x6a10, 0x6814, 0xa202, 0x0048, 0x22e3, 0x0040, 0x22e3, 0x2091,
-+ 0x8001, 0x2039, 0x0200, 0x609c, 0x78ba, 0x609f, 0x0000, 0x1078,
-+ 0x2330, 0x0078, 0x232e, 0x2c08, 0xd9fc, 0x0040, 0x230b, 0x6800,
-+ 0xa065, 0x0040, 0x230b, 0x6a04, 0x7000, 0xa084, 0x0002, 0x0040,
-+ 0x2301, 0x704c, 0xa206, 0x00c0, 0x2301, 0x6b04, 0x2160, 0x2304,
-+ 0x6002, 0xa005, 0x00c0, 0x22fd, 0x6902, 0x2260, 0x6102, 0x0078,
-+ 0x2317, 0x2d00, 0x2060, 0x1078, 0x2acc, 0x6e08, 0x2160, 0x6202,
-+ 0x6906, 0x0078, 0x2317, 0x6800, 0x6902, 0xa065, 0x0040, 0x2313,
-+ 0x6102, 0x0078, 0x2314, 0x6906, 0x2160, 0x6003, 0x0000, 0x2160,
-+ 0xd9fc, 0x0040, 0x231e, 0xa6b4, 0xfffc, 0x6e0a, 0x6810, 0x7d08,
-+ 0x8528, 0x7d0a, 0x8000, 0x6812, 0x2091, 0x8001, 0xd6b4, 0x0040,
-+ 0x232e, 0xa6b6, 0x0040, 0x6e0a, 0x1078, 0x1e6c, 0x0e7f, 0x007c,
-+ 0x6008, 0xa705, 0x600a, 0x2091, 0x8000, 0x1078, 0x201d, 0x2091,
-+ 0x8001, 0x78b8, 0xa065, 0x0040, 0x2343, 0x609c, 0x78ba, 0x609f,
-+ 0x0000, 0x0078, 0x2330, 0x78b6, 0x78ba, 0x007c, 0x7970, 0x7874,
-+ 0x2818, 0xd384, 0x0040, 0x2350, 0x8000, 0xa112, 0x0048, 0x2355,
-+ 0x8000, 0xa112, 0x00c8, 0x2365, 0xc384, 0x7a7c, 0x721a, 0x7a78,
-+ 0x721e, 0xdac4, 0x0040, 0x2360, 0x7a84, 0x7222, 0x7a80, 0x7226,
-+ 0xa006, 0xd384, 0x0040, 0x2365, 0x8000, 0x7876, 0x70d2, 0x781c,
-+ 0xa005, 0x0040, 0x2373, 0x8001, 0x781e, 0x00c0, 0x2373, 0x0068,
-+ 0x2373, 0x2091, 0x4080, 0x007c, 0x2039, 0x238c, 0x0078, 0x237a,
-+ 0x2039, 0x2392, 0x2704, 0xa005, 0x0040, 0x238b, 0xac00, 0x2068,
-+ 0x6908, 0x6810, 0x6912, 0x680a, 0x690c, 0x6814, 0x6916, 0x680e,
-+ 0x8738, 0x0078, 0x237a, 0x007c, 0x0003, 0x0009, 0x000f, 0x0015,
-+ 0x001b, 0x0000, 0x0015, 0x001b, 0x0000, 0x2041, 0x0000, 0x780c,
-+ 0x0079, 0x239a, 0x256c, 0x253f, 0x239e, 0x2417, 0x2039, 0x9674,
-+ 0x2734, 0x7d10, 0x0078, 0x23be, 0x6084, 0xa086, 0x0103, 0x00c0,
-+ 0x2400, 0x6114, 0x6018, 0xa105, 0x0040, 0x23b3, 0x86ff, 0x00c0,
-+ 0x23cf, 0x0078, 0x2400, 0x8603, 0xa080, 0x9655, 0x620c, 0x2202,
-+ 0x8000, 0x6210, 0x2202, 0x1078, 0x203f, 0x8630, 0xa68e, 0x000f,
-+ 0x0040, 0x248b, 0x786c, 0xa065, 0x00c0, 0x23a4, 0x7808, 0xa602,
-+ 0x00c8, 0x23cf, 0xd5ac, 0x00c0, 0x23cf, 0x263a, 0x007c, 0xa682,
-+ 0x0003, 0x00c8, 0x248b, 0x2091, 0x8000, 0x2069, 0x0000, 0x6818,
-+ 0xd084, 0x00c0, 0x23fb, 0x2011, 0x9655, 0x2204, 0x70c6, 0x8210,
-+ 0x2204, 0x70ca, 0xd684, 0x00c0, 0x23eb, 0x8210, 0x2204, 0x70da,
-+ 0x8210, 0x2204, 0x70de, 0xa685, 0x8020, 0x70c2, 0x681b, 0x0001,
-+ 0x2091, 0x4080, 0x7810, 0xa084, 0xffcf, 0x7812, 0x2091, 0x8001,
-+ 0x203b, 0x0000, 0x007c, 0x7810, 0xc0ad, 0x7812, 0x0078, 0x248b,
-+ 0x263a, 0x1078, 0x2576, 0x00c0, 0x2599, 0x786c, 0xa065, 0x00c0,
-+ 0x23a4, 0x2091, 0x8000, 0x7810, 0xa084, 0xffcf, 0x86ff, 0x0040,
-+ 0x2412, 0xc0ad, 0x7812, 0x2091, 0x8001, 0x0078, 0x2599, 0x2039,
-+ 0x9674, 0x2734, 0x7d10, 0x0078, 0x2433, 0x6084, 0xa086, 0x0103,
-+ 0x00c0, 0x2474, 0x6114, 0x6018, 0xa105, 0x0040, 0x242c, 0x86ff,
-+ 0x00c0, 0x2444, 0x0078, 0x2474, 0xa680, 0x9655, 0x620c, 0x2202,
-+ 0x1078, 0x203f, 0x8630, 0xa68e, 0x001e, 0x0040, 0x248b, 0x786c,
-+ 0xa065, 0x00c0, 0x241d, 0x7808, 0xa602, 0x00c8, 0x2444, 0xd5ac,
-+ 0x00c0, 0x2444, 0x263a, 0x007c, 0xa682, 0x0006, 0x00c8, 0x248b,
-+ 0x2091, 0x8000, 0x2069, 0x0000, 0x6818, 0xd084, 0x00c0, 0x246f,
-+ 0x2011, 0x9655, 0x2009, 0x964e, 0x26a8, 0x211c, 0x2204, 0x201a,
-+ 0x8108, 0x8210, 0x00f0, 0x2455, 0xa685, 0x8030, 0x70c2, 0x681b,
-+ 0x0001, 0x2091, 0x4080, 0x7810, 0xa084, 0xffcf, 0x7812, 0x2091,
-+ 0x8001, 0xa006, 0x2009, 0x9675, 0x200a, 0x203a, 0x007c, 0x7810,
-+ 0xc0ad, 0x7812, 0x0078, 0x248b, 0x263a, 0x1078, 0x2576, 0x00c0,
-+ 0x2599, 0x786c, 0xa065, 0x00c0, 0x241d, 0x2091, 0x8000, 0x7810,
-+ 0xa084, 0xffcf, 0x86ff, 0x0040, 0x2486, 0xc0ad, 0x7812, 0x2091,
-+ 0x8001, 0x0078, 0x2599, 0x2091, 0x8000, 0x7007, 0x0004, 0x7994,
-+ 0x70d4, 0xa102, 0x0048, 0x249c, 0x0040, 0x24a6, 0x7b90, 0xa302,
-+ 0x00c0, 0x24a6, 0x0078, 0x249f, 0x8002, 0x00c0, 0x24a6, 0x263a,
-+ 0x7810, 0xc0ad, 0x7812, 0x2091, 0x8001, 0x007c, 0xa184, 0xff00,
-+ 0x0040, 0x24b3, 0x810f, 0x810c, 0x810c, 0x8004, 0x8004, 0x8007,
-+ 0xa100, 0x0078, 0x24b6, 0x8107, 0x8004, 0x8004, 0x7a9c, 0xa210,
-+ 0x721a, 0x7a98, 0xa006, 0xa211, 0x721e, 0xd4c4, 0x0040, 0x24c6,
-+ 0x7aa4, 0xa211, 0x7222, 0x7aa0, 0xa211, 0x7226, 0x20a1, 0x0030,
-+ 0x7003, 0x0000, 0x2009, 0x9654, 0x260a, 0x8109, 0x2198, 0x2104,
-+ 0xd084, 0x0040, 0x24d4, 0x8633, 0xa6b0, 0x0002, 0x26a8, 0x53a6,
-+ 0x8603, 0x7012, 0x7007, 0x0001, 0x7990, 0x7894, 0x8000, 0xa10a,
-+ 0x00c8, 0x24e3, 0xa006, 0x2028, 0x7974, 0xa184, 0xff00, 0x0040,
-+ 0x24f2, 0x810f, 0x810c, 0x810c, 0x8004, 0x8004, 0x8007, 0xa100,
-+ 0x0078, 0x24f5, 0x8107, 0x8004, 0x8004, 0x797c, 0xa108, 0x7a78,
-+ 0xa006, 0xa211, 0xd4c4, 0x0040, 0x2501, 0x7b84, 0xa319, 0x7c80,
-+ 0xa421, 0x7008, 0xd0fc, 0x0040, 0x2501, 0xa084, 0x01e0, 0x0040,
-+ 0x2526, 0x7d10, 0x2031, 0x9654, 0x2634, 0x78a8, 0x8000, 0x78aa,
-+ 0xd08c, 0x00c0, 0x251b, 0x7007, 0x0006, 0x7004, 0xd094, 0x00c0,
-+ 0x2515, 0x0078, 0x248d, 0x2069, 0x4e47, 0x206b, 0x0003, 0x78ac,
-+ 0xa085, 0x0300, 0x78ae, 0xa006, 0x0078, 0x252f, 0x2030, 0x75d6,
-+ 0x2091, 0x4080, 0x7d96, 0x7d10, 0xa5ac, 0xffcf, 0x7d12, 0x2091,
-+ 0x8001, 0x78aa, 0x7007, 0x0006, 0x263a, 0x7003, 0x0001, 0x711a,
-+ 0x721e, 0xd5c4, 0x0040, 0x253e, 0x7322, 0x7426, 0x007c, 0x6084,
-+ 0xa086, 0x0103, 0x00c0, 0x2562, 0x6114, 0x6018, 0xa105, 0x00c0,
-+ 0x2562, 0x2069, 0x0000, 0x6818, 0xd084, 0x00c0, 0x2562, 0x600c,
-+ 0x70c6, 0x6010, 0x70ca, 0x70c3, 0x8020, 0x681b, 0x0001, 0x2091,
-+ 0x4080, 0x1078, 0x203f, 0x0068, 0x2561, 0x786c, 0xa065, 0x00c0,
-+ 0x253f, 0x007c, 0x1078, 0x2576, 0x00c0, 0x2599, 0x786c, 0xa065,
-+ 0x00c0, 0x253f, 0x0078, 0x2599, 0x1078, 0x2576, 0x00c0, 0x2599,
-+ 0x786c, 0xa065, 0x00c0, 0x256c, 0x0078, 0x2599, 0x6084, 0xa086,
-+ 0x0103, 0x00c0, 0x258a, 0x6018, 0xc0fc, 0x601a, 0xa086, 0x0004,
-+ 0x00c0, 0x258a, 0x7804, 0xd0a4, 0x0040, 0x258a, 0x1078, 0x203f,
-+ 0xa006, 0x007c, 0x1078, 0x259f, 0x00c0, 0x2591, 0xa085, 0x0001,
-+ 0x007c, 0x1078, 0x25ae, 0x00c0, 0x2597, 0x2041, 0x0001, 0x7d10,
-+ 0x007c, 0x88ff, 0x0040, 0x259e, 0x2091, 0x4080, 0x007c, 0x7b90,
-+ 0x7994, 0x70d4, 0xa102, 0x00c0, 0x25a8, 0xa385, 0x0000, 0x007c,
-+ 0x0048, 0x25ac, 0xa302, 0x007c, 0x8002, 0x007c, 0x7810, 0xd0ec,
-+ 0x0040, 0x25c6, 0x0e7e, 0x2091, 0x8000, 0x2071, 0x0020, 0x7004,
-+ 0xa005, 0x00c0, 0x25c3, 0x7008, 0x0e7f, 0xa086, 0x0008, 0x0040,
-+ 0x25c6, 0x0078, 0x2617, 0x0e7f, 0x0078, 0x2617, 0xa184, 0xff00,
-+ 0x0040, 0x25d3, 0x810f, 0x810c, 0x810c, 0x8004, 0x8004, 0x8007,
-+ 0xa100, 0x0078, 0x25d6, 0x8107, 0x8004, 0x8004, 0x7a9c, 0x7b98,
-+ 0x7ca4, 0x7da0, 0xa210, 0xa006, 0xa319, 0xa421, 0xa529, 0x2009,
-+ 0x0018, 0x6028, 0xa005, 0x0040, 0x25e7, 0x2009, 0x0040, 0x1078,
-+ 0x1d74, 0x0040, 0x2609, 0x78a8, 0x8000, 0x78aa, 0xd08c, 0x00c0,
-+ 0x2617, 0x6014, 0xd0fc, 0x00c0, 0x25f9, 0x2069, 0x4e40, 0x0078,
-+ 0x25fb, 0x2069, 0x4e80, 0x2091, 0x8000, 0x681f, 0x0003, 0x78ab,
-+ 0x0000, 0x78ac, 0xa085, 0x0300, 0x78ae, 0x2091, 0x8001, 0x0078,
-+ 0x2617, 0x78ab, 0x0000, 0x1078, 0x203f, 0x7990, 0x7894, 0x8000,
-+ 0xa10a, 0x00c8, 0x2614, 0xa006, 0x7896, 0x70d6, 0xa006, 0x2071,
-+ 0x0010, 0x2091, 0x8001, 0x007c, 0xd7fc, 0x00c0, 0x2623, 0x2009,
-+ 0x4e59, 0x0078, 0x2625, 0x2009, 0x4e99, 0x2091, 0x8000, 0x200a,
-+ 0x0f7e, 0xd7fc, 0x00c0, 0x263c, 0x2009, 0x4e40, 0x2001, 0x4e04,
-+ 0x2004, 0xd0ec, 0x0040, 0x2638, 0x2079, 0x0100, 0x0078, 0x2640,
-+ 0x2079, 0x0200, 0x0078, 0x2640, 0x2009, 0x4e80, 0x2079, 0x0100,
-+ 0x2104, 0xa086, 0x0000, 0x00c0, 0x2659, 0xd7fc, 0x00c0, 0x264c,
-+ 0x2009, 0x4e45, 0x0078, 0x264e, 0x2009, 0x4e85, 0x2104, 0xa005,
-+ 0x00c0, 0x2659, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x2659, 0x781b,
-+ 0x0045, 0x0f7f, 0x007c, 0x2009, 0x0002, 0x2069, 0x4e00, 0x6810,
-+ 0xd0ec, 0x00c0, 0x26c8, 0x2071, 0x4e80, 0x2079, 0x0100, 0x2021,
-+ 0x50bf, 0x784b, 0x000f, 0x2019, 0x4457, 0xd184, 0x0040, 0x267c,
-+ 0x6810, 0xd0ec, 0x0040, 0x2678, 0x20a1, 0x012b, 0x0078, 0x267e,
-+ 0x20a1, 0x022b, 0x0078, 0x267e, 0x20a1, 0x012b, 0x2304, 0xa005,
-+ 0x0040, 0x268b, 0x789a, 0x8318, 0x23ac, 0x8318, 0x2398, 0x53a6,
-+ 0x3318, 0x0078, 0x267e, 0x789b, 0x0020, 0x20a9, 0x0010, 0x6814,
-+ 0xd0e4, 0x0040, 0x269b, 0x78af, 0x0000, 0x78af, 0x9020, 0x00f0,
-+ 0x2693, 0x0078, 0x26a1, 0x78af, 0x0000, 0x78af, 0x8020, 0x00f0,
-+ 0x269b, 0x7003, 0x0000, 0x017e, 0xd18c, 0x2009, 0x0000, 0x0040,
-+ 0x26aa, 0xc1bd, 0x1078, 0x289b, 0x017f, 0x7020, 0xa084, 0x000f,
-+ 0x007e, 0x6814, 0xd0e4, 0x007f, 0x00c0, 0x26ba, 0xa085, 0x6340,
-+ 0x0078, 0x26bc, 0xa085, 0x62c0, 0x7806, 0x780f, 0x9200, 0x7843,
-+ 0x00d8, 0x7853, 0x0080, 0x780b, 0x0008, 0x7456, 0x7053, 0x0000,
-+ 0x8109, 0x0040, 0x26db, 0x2071, 0x4e40, 0x6810, 0xd0ec, 0x0040,
-+ 0x26d5, 0x2079, 0x0100, 0x0078, 0x26d7, 0x2079, 0x0200, 0x2021,
-+ 0x4ebf, 0x0078, 0x2669, 0x007c, 0x017e, 0xd1bc, 0x00c0, 0x26f0,
-+ 0x007e, 0x2001, 0x4e04, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x26ec,
-+ 0x2011, 0x0101, 0x0078, 0x26f2, 0x2011, 0x0201, 0x0078, 0x26f2,
-+ 0x2011, 0x0101, 0xa18c, 0x000f, 0x2204, 0xa084, 0xfff0, 0xa105,
-+ 0x2012, 0x017f, 0x1078, 0x289b, 0x007c, 0xd3fc, 0x00c0, 0x2710,
-+ 0x007e, 0x2001, 0x4e04, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x270c,
-+ 0x2011, 0x0101, 0x0078, 0x2712, 0x2011, 0x0201, 0x0078, 0x2712,
-+ 0x2011, 0x0101, 0x20a9, 0x0009, 0x810b, 0x00f0, 0x2714, 0xa18c,
-+ 0x0e00, 0x2204, 0xa084, 0xf1ff, 0xa105, 0x2012, 0x007c, 0x2019,
-+ 0x0002, 0x2001, 0x4e04, 0x2004, 0xd0ec, 0x0040, 0x272c, 0x8319,
-+ 0x2009, 0x0101, 0x0078, 0x272e, 0x2009, 0x0101, 0x20a9, 0x0005,
-+ 0x8213, 0x00f0, 0x2730, 0xa294, 0x00e0, 0x2104, 0xa084, 0xff1f,
-+ 0xa205, 0x200a, 0x8319, 0x0040, 0x2741, 0x2009, 0x0201, 0x0078,
-+ 0x272e, 0x007c, 0xd3fc, 0x00c0, 0x2755, 0x007e, 0x2001, 0x4e04,
-+ 0x2004, 0xd0ec, 0x007f, 0x0040, 0x2751, 0x2011, 0x0101, 0x0078,
-+ 0x2757, 0x2011, 0x0201, 0x0078, 0x2757, 0x2011, 0x0101, 0x20a9,
-+ 0x000c, 0x810b, 0x00f0, 0x2759, 0xa18c, 0xf000, 0x2204, 0xa084,
-+ 0x0fff, 0xa105, 0x2012, 0x007c, 0xd3fc, 0x00c0, 0x2777, 0x007e,
-+ 0x2001, 0x4e04, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x2773, 0x2011,
-+ 0x0102, 0x0078, 0x2779, 0x2011, 0x0202, 0x0078, 0x2779, 0x2011,
-+ 0x0102, 0x2204, 0xa084, 0xffcf, 0xa105, 0x2012, 0x007c, 0x0c7e,
-+ 0xd1bc, 0x00c0, 0x2793, 0x007e, 0x2001, 0x4e04, 0x2004, 0xd0ec,
-+ 0x007f, 0x0040, 0x278f, 0x2061, 0x0100, 0x0078, 0x2795, 0x2061,
-+ 0x0200, 0x0078, 0x2795, 0x2061, 0x0100, 0xc1bc, 0x8103, 0x8003,
-+ 0xa080, 0x0020, 0x609a, 0x62ac, 0x63ac, 0x0c7f, 0x007c, 0x0c7e,
-+ 0xd1bc, 0x00c0, 0x27b3, 0x007e, 0x2001, 0x4e04, 0x2004, 0xd0ec,
-+ 0x007f, 0x0040, 0x27af, 0x2061, 0x0100, 0x0078, 0x27b5, 0x2061,
-+ 0x0200, 0x0078, 0x27b5, 0x2061, 0x0100, 0xc1bc, 0x8103, 0x8003,
-+ 0xa080, 0x0022, 0x609a, 0x60a4, 0xa084, 0xffdf, 0x60ae, 0x0c7f,
-+ 0x007c, 0x0c7e, 0xd1bc, 0x00c0, 0x27d5, 0x007e, 0x2001, 0x4e04,
-+ 0x2004, 0xd0ec, 0x007f, 0x0040, 0x27d1, 0x2061, 0x0100, 0x0078,
-+ 0x27d7, 0x2061, 0x0200, 0x0078, 0x27d7, 0x2061, 0x0100, 0xc1bc,
-+ 0x8103, 0x8003, 0xa080, 0x0022, 0x609a, 0x60a4, 0xa085, 0x0020,
-+ 0x60ae, 0x0c7f, 0x007c, 0x0c7e, 0xd1bc, 0x00c0, 0x27f7, 0x007e,
-+ 0x2001, 0x4e04, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x27f3, 0x2061,
-+ 0x0100, 0x0078, 0x27f9, 0x2061, 0x0200, 0x0078, 0x27f9, 0x2061,
-+ 0x0100, 0xc1bc, 0x8103, 0x8003, 0xa080, 0x0020, 0x609a, 0x60a4,
-+ 0xa28c, 0x0020, 0x0040, 0x2807, 0xc2ac, 0xa39d, 0x4000, 0xc3fc,
-+ 0xd3b4, 0x00c0, 0x280c, 0xc3fd, 0x62ae, 0x2010, 0x60a4, 0x63ae,
-+ 0x2018, 0x0c7f, 0x007c, 0x2091, 0x8000, 0x0c7e, 0x0e7e, 0x6818,
-+ 0xa005, 0x0040, 0x2879, 0xd1fc, 0x0040, 0x2822, 0x2061, 0x95d0,
-+ 0x0078, 0x2824, 0x2061, 0x94c0, 0x1078, 0x2881, 0x0040, 0x285b,
-+ 0x20a9, 0x0101, 0xd1fc, 0x0040, 0x2831, 0x2061, 0x94d0, 0x0078,
-+ 0x2833, 0x2061, 0x93c0, 0x0c7e, 0x1078, 0x2881, 0x0040, 0x283e,
-+ 0x0c7f, 0x8c60, 0x00f0, 0x2833, 0x0078, 0x2879, 0x007f, 0xd1fc,
-+ 0x0040, 0x2848, 0xa082, 0x94d0, 0x2071, 0x4e80, 0x0078, 0x284c,
-+ 0xa082, 0x93c0, 0x2071, 0x4e40, 0x707a, 0x7176, 0x2138, 0x2001,
-+ 0x0004, 0x7066, 0x7083, 0x000f, 0x71d4, 0xc1dc, 0x71d6, 0x1078,
-+ 0x261c, 0x0078, 0x2875, 0xd1fc, 0x00c0, 0x2862, 0x2071, 0x4e40,
-+ 0x0078, 0x2864, 0x2071, 0x4e80, 0x6020, 0xc0dd, 0x6022, 0x7176,
-+ 0x2138, 0x2c00, 0x707e, 0x2001, 0x0006, 0x7066, 0x7083, 0x000f,
-+ 0x71d4, 0xc1dc, 0x71d6, 0x1078, 0x261c, 0x2001, 0x0000, 0x0078,
-+ 0x287b, 0x2001, 0x0001, 0x2091, 0x8001, 0xa005, 0x0e7f, 0x0c7f,
-+ 0x007c, 0x2c04, 0xa005, 0x0040, 0x2898, 0x2060, 0x6010, 0xa306,
-+ 0x00c0, 0x2895, 0x600c, 0xa206, 0x00c0, 0x2895, 0x6014, 0xa106,
-+ 0x00c0, 0x2895, 0xa006, 0x0078, 0x289a, 0x6000, 0x0078, 0x2882,
-+ 0xa085, 0x0001, 0x007c, 0x0f7e, 0x0e7e, 0x017e, 0xd1bc, 0x00c0,
-+ 0x28b3, 0x2079, 0x4e40, 0x007e, 0x2001, 0x4e04, 0x2004, 0xd0ec,
-+ 0x007f, 0x0040, 0x28af, 0x2071, 0x0100, 0x0078, 0x28b7, 0x2071,
-+ 0x0200, 0x0078, 0x28b7, 0x2079, 0x4e80, 0x2071, 0x0100, 0x7920,
-+ 0xa18c, 0x000f, 0x70ec, 0xd0c4, 0x00c0, 0x28c1, 0x017f, 0x0078,
-+ 0x28dc, 0x810b, 0x810b, 0x810b, 0x810b, 0x007f, 0xd0bc, 0x00c0,
-+ 0x28d9, 0x007e, 0x2001, 0x4e04, 0x2004, 0xd0ec, 0x007f, 0x0040,
-+ 0x28d5, 0xa18d, 0x0f00, 0x0078, 0x28db, 0xa18d, 0x0f00, 0x0078,
-+ 0x28db, 0xa18d, 0x0800, 0x2104, 0x0e7f, 0x0f7f, 0x007c, 0x0e7e,
-+ 0x2001, 0x4e01, 0x2004, 0xd0ac, 0x00c0, 0x295c, 0x68e4, 0xd0ac,
-+ 0x0040, 0x295c, 0xa084, 0x0006, 0x00c0, 0x295c, 0x6014, 0xd0fc,
-+ 0x00c0, 0x28f6, 0x2071, 0x52c0, 0x0078, 0x28f8, 0x2071, 0x5340,
-+ 0x8007, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xae70, 0x7004,
-+ 0xa084, 0x000a, 0x00c0, 0x295c, 0x7108, 0xa194, 0xff00, 0x0040,
-+ 0x295c, 0xa18c, 0x00ff, 0x2001, 0x000a, 0xa106, 0x0040, 0x292b,
-+ 0x2001, 0x000c, 0xa106, 0x0040, 0x292f, 0x2001, 0x0012, 0xa106,
-+ 0x0040, 0x2933, 0x2001, 0x0014, 0xa106, 0x0040, 0x2937, 0x2001,
-+ 0x0019, 0xa106, 0x0040, 0x293b, 0x2001, 0x0032, 0xa106, 0x0040,
-+ 0x293f, 0x0078, 0x2943, 0x2009, 0x000c, 0x0078, 0x2945, 0x2009,
-+ 0x0012, 0x0078, 0x2945, 0x2009, 0x0014, 0x0078, 0x2945, 0x2009,
-+ 0x0019, 0x0078, 0x2945, 0x2009, 0x0020, 0x0078, 0x2945, 0x2009,
-+ 0x003f, 0x0078, 0x2945, 0x2011, 0x0000, 0x2100, 0xa205, 0x700a,
-+ 0x2071, 0x4e00, 0x7004, 0xd0bc, 0x0040, 0x295c, 0x6014, 0xd0fc,
-+ 0x00c0, 0x2957, 0x70ea, 0x2071, 0x4e40, 0x0078, 0x295a, 0x70ee,
-+ 0x2071, 0x4e80, 0x701f, 0x000d, 0x0e7f, 0x007c, 0x2001, 0x4e05,
-+ 0x2004, 0xd0e4, 0x00c0, 0x296a, 0x7804, 0xa084, 0xff1f, 0xa085,
-+ 0x6340, 0x7806, 0x007c, 0x0068, 0x296b, 0x2091, 0x8000, 0x2071,
-+ 0x0000, 0x007e, 0x7018, 0xd084, 0x00c0, 0x2972, 0x007f, 0x2071,
-+ 0x0010, 0x70ca, 0x007f, 0x70c6, 0x70c3, 0x8002, 0x70db, 0x080f,
-+ 0x70df, 0x0000, 0x2071, 0x0000, 0x701b, 0x0001, 0x2091, 0x4080,
-+ 0x0078, 0x2988, 0x7f3c, 0x7e58, 0x7c30, 0x7d38, 0x78a0, 0x708e,
-+ 0x7592, 0x7496, 0x769a, 0x779e, 0xa594, 0x003f, 0xd4f4, 0x0040,
-+ 0x299f, 0xa784, 0x007d, 0x00c0, 0x43cd, 0x1078, 0x296b, 0xa49c,
-+ 0x000f, 0xa382, 0x0004, 0x0050, 0x29aa, 0xa3a6, 0x0007, 0x00c0,
-+ 0x296b, 0x2418, 0x8507, 0xa084, 0x000f, 0x0079, 0x29af, 0x3028,
-+ 0x3119, 0x3144, 0x33b6, 0x379f, 0x3819, 0x38ce, 0x395f, 0x3a4d,
-+ 0x3b3c, 0x29c2, 0x29bf, 0x2df9, 0x2f1c, 0x3770, 0x29bf, 0x1078,
-+ 0x296b, 0x007c, 0xa006, 0x0078, 0x29cc, 0x7808, 0xc08d, 0x780a,
-+ 0xa006, 0x7002, 0x704e, 0x7046, 0x70d2, 0x7060, 0xa005, 0x00c0,
-+ 0x2b32, 0x7064, 0xa084, 0x0007, 0x0079, 0x29d6, 0x29de, 0x2a51,
-+ 0x2a5a, 0x2a65, 0x2a70, 0x2b18, 0x2a7b, 0x2a51, 0x7830, 0xd0bc,
-+ 0x00c0, 0x29c1, 0x71d4, 0xd1bc, 0x00c0, 0x29c1, 0xd1b4, 0x00c0,
-+ 0x2a2e, 0x70a4, 0xa086, 0x0001, 0x0040, 0x29c1, 0x70b4, 0xa06d,
-+ 0x6800, 0xa065, 0xa055, 0x789b, 0x0010, 0x6b0c, 0x7baa, 0x6808,
-+ 0xa045, 0x6d10, 0x6804, 0xa06d, 0xa05d, 0xa886, 0x0001, 0x0040,
-+ 0x2a04, 0x69bc, 0x7daa, 0x79aa, 0x68c0, 0xa04d, 0x6e1c, 0x2001,
-+ 0x0010, 0x0078, 0x2c8c, 0x7060, 0xa005, 0x00c0, 0x29c1, 0x0c7e,
-+ 0x0d7e, 0x70b4, 0xa06d, 0x6800, 0xa065, 0xa055, 0x789b, 0x0010,
-+ 0x6b0c, 0x7baa, 0x6808, 0xa045, 0x6d10, 0x6804, 0xa06d, 0xa05d,
-+ 0xa886, 0x0001, 0x0040, 0x2a27, 0x69bc, 0x7daa, 0x79aa, 0x68c0,
-+ 0xa04d, 0x6e1c, 0x2001, 0x0020, 0x0078, 0x2c8c, 0x1078, 0x4360,
-+ 0x00c0, 0x29c1, 0x781b, 0x005b, 0x70bc, 0xa06d, 0x68b4, 0x785a,
-+ 0x6894, 0x78d6, 0x78de, 0x6898, 0x78d2, 0x78da, 0x7808, 0xc08d,
-+ 0x780a, 0x68bc, 0x7042, 0xc1b4, 0x71d6, 0x70b8, 0xa065, 0x68c0,
-+ 0x705a, 0x7003, 0x0002, 0x2d00, 0x704e, 0xad80, 0x0009, 0x7046,
-+ 0x007c, 0x1078, 0x4360, 0x00c0, 0x2a59, 0x781b, 0x0047, 0x7003,
-+ 0x0004, 0x007c, 0x1078, 0x4360, 0x00c0, 0x2a64, 0x2011, 0x000c,
-+ 0x1078, 0x2a8b, 0x7003, 0x0004, 0x007c, 0x1078, 0x4360, 0x00c0,
-+ 0x2a6f, 0x2011, 0x0006, 0x1078, 0x2a8b, 0x7003, 0x0004, 0x007c,
-+ 0x1078, 0x4360, 0x00c0, 0x2a7a, 0x2011, 0x000d, 0x1078, 0x2a8b,
-+ 0x7003, 0x0004, 0x007c, 0x1078, 0x4360, 0x00c0, 0x2a8a, 0x2011,
-+ 0x0006, 0x1078, 0x2a8b, 0x707c, 0x707f, 0x0000, 0x2068, 0x704e,
-+ 0x7003, 0x0001, 0x007c, 0x7174, 0xc1fc, 0x8107, 0x7882, 0x789b,
-+ 0x0010, 0xa286, 0x000c, 0x00c0, 0x2a9a, 0x7aaa, 0x2001, 0x0001,
-+ 0x0078, 0x2aaf, 0xa18c, 0x001f, 0xa18d, 0x00c0, 0x79aa, 0xa286,
-+ 0x000d, 0x0040, 0x2aa8, 0x7aaa, 0x2001, 0x0002, 0x0078, 0x2aaf,
-+ 0x78ab, 0x0020, 0x7178, 0x79aa, 0x7aaa, 0x2001, 0x0004, 0x789b,
-+ 0x0060, 0x78aa, 0x785b, 0x0004, 0x781b, 0x0116, 0x1078, 0x4383,
-+ 0x7083, 0x000f, 0x70d4, 0xd0b4, 0x0040, 0x2acb, 0xc0b4, 0x70d6,
-+ 0x0c7e, 0x70b8, 0xa065, 0x6008, 0xa084, 0xfbef, 0x600a, 0x6018,
-+ 0x8001, 0x601a, 0x0c7f, 0x007c, 0x7014, 0xa005, 0x00c0, 0x2ada,
-+ 0x70d4, 0xd0b4, 0x0040, 0x2adb, 0x70b8, 0xac06, 0x00c0, 0x2adb,
-+ 0x1078, 0x2aba, 0x007c, 0x017e, 0x71a4, 0xa186, 0x0001, 0x0040,
-+ 0x2b0d, 0x0d7e, 0x027e, 0x2100, 0x2011, 0x0001, 0xa212, 0x70b4,
-+ 0x2068, 0x6800, 0xac06, 0x0040, 0x2af4, 0x8211, 0x0040, 0x2b0b,
-+ 0x1078, 0x2b0f, 0x0078, 0x2ae9, 0x0c7e, 0x2100, 0x2011, 0x0001,
-+ 0xa212, 0x70b4, 0x2068, 0x6800, 0x2060, 0x6008, 0xa084, 0xfbef,
-+ 0x600a, 0x8211, 0x0040, 0x2b08, 0x1078, 0x2b0f, 0x0078, 0x2afb,
-+ 0x70a7, 0x0001, 0x0c7f, 0x027f, 0x0d7f, 0x017f, 0x007c, 0xade8,
-+ 0x0005, 0x70ac, 0xad06, 0x00c0, 0x2b17, 0x70a8, 0x2068, 0x007c,
-+ 0x1078, 0x4360, 0x00c0, 0x29c1, 0x707c, 0x2068, 0x7774, 0x1078,
-+ 0x41fe, 0x2c50, 0x1078, 0x4442, 0x789b, 0x0010, 0x6814, 0xa084,
-+ 0x001f, 0xc0bd, 0x78aa, 0x6e1c, 0x2041, 0x0001, 0x2001, 0x0004,
-+ 0x0078, 0x2c92, 0x1078, 0x4360, 0x00c0, 0x29c1, 0x789b, 0x0010,
-+ 0x7060, 0x2068, 0x6f14, 0x70d4, 0xd0b4, 0x0040, 0x2b4c, 0xc0b4,
-+ 0x70d6, 0x0c7e, 0x70b8, 0xa065, 0x6008, 0xa084, 0xfbef, 0x600a,
-+ 0x6018, 0x8001, 0x601a, 0x0c7f, 0x1078, 0x41fe, 0x2c50, 0x1078,
-+ 0x4442, 0x6824, 0xa005, 0x0040, 0x2b5d, 0xa082, 0x0006, 0x0048,
-+ 0x2b5b, 0x0078, 0x2b5d, 0x6827, 0x0005, 0x6814, 0xa084, 0x001f,
-+ 0xc0bd, 0x78aa, 0x2031, 0x0020, 0x2041, 0x0001, 0x2001, 0x0003,
-+ 0x0078, 0x2c92, 0xc28d, 0x72d6, 0x72c0, 0xa200, 0xa015, 0x7154,
-+ 0x8108, 0xa12a, 0x0048, 0x2b75, 0x71c0, 0x2164, 0x6504, 0x85ff,
-+ 0x00c0, 0x2b8c, 0x7156, 0x8421, 0x00c0, 0x2b70, 0x70d4, 0xd08c,
-+ 0x0040, 0x2b88, 0x70d0, 0xa005, 0x00c0, 0x2b88, 0x70d3, 0x000a,
-+ 0x007c, 0x2200, 0x0078, 0x2b7a, 0x70d4, 0xc08c, 0x70d6, 0x70d3,
-+ 0x0000, 0x6034, 0xa005, 0x00c0, 0x2b89, 0x6708, 0xa784, 0x073f,
-+ 0x0040, 0x2bbb, 0xd7d4, 0x00c0, 0x2b89, 0xa784, 0x0021, 0x00c0,
-+ 0x2b89, 0xa784, 0x0002, 0x0040, 0x2bac, 0xa784, 0x0004, 0x0040,
-+ 0x2b89, 0xa7bc, 0xfffb, 0x670a, 0xa784, 0x0218, 0x00c0, 0x2b89,
-+ 0xa784, 0x0100, 0x0040, 0x2bbb, 0x6018, 0xa005, 0x00c0, 0x2b89,
-+ 0xa7bc, 0xfeff, 0x670a, 0x2568, 0x6823, 0x0000, 0x6e1c, 0xa684,
-+ 0x000e, 0x6318, 0x0040, 0x2bcc, 0x601c, 0xa302, 0x0048, 0x2bcf,
-+ 0x0040, 0x2bcf, 0x0078, 0x2b89, 0x83ff, 0x00c0, 0x2b89, 0x2d58,
-+ 0x2c50, 0x7156, 0xd7bc, 0x00c0, 0x2bd8, 0x7028, 0x6022, 0x603a,
-+ 0xc7bc, 0x670a, 0x68c0, 0xa065, 0xa04d, 0x6100, 0x2a60, 0x2041,
-+ 0x0001, 0x6b14, 0xa39c, 0x001f, 0xa39d, 0x00c0, 0xd1fc, 0x0040,
-+ 0x2bec, 0xd684, 0x0040, 0x2bee, 0xa39c, 0xffbf, 0xd6a4, 0x0040,
-+ 0x2bf3, 0xa39d, 0x0020, 0xa684, 0x000e, 0x00c0, 0x2c3e, 0xc7a5,
-+ 0x670a, 0x2c00, 0x68c6, 0x77a4, 0xa786, 0x0001, 0x00c0, 0x2c12,
-+ 0x70d4, 0xd0b4, 0x00c0, 0x2c12, 0x7000, 0xa082, 0x0002, 0x00c8,
-+ 0x2c12, 0x7830, 0xd0bc, 0x00c0, 0x2c12, 0x789b, 0x0010, 0x7baa,
-+ 0x0078, 0x2c8a, 0x8739, 0x77a6, 0x2750, 0x77b0, 0xa7b0, 0x0005,
-+ 0x70ac, 0xa606, 0x00c0, 0x2c1d, 0x76a8, 0x76b2, 0x2c3a, 0x8738,
-+ 0x2d3a, 0x8738, 0x283a, 0x8738, 0x233a, 0x8738, 0x253a, 0x7830,
-+ 0xd0bc, 0x0040, 0x2c35, 0x2091, 0x8000, 0x2091, 0x303d, 0x70d4,
-+ 0xa084, 0x303d, 0x2091, 0x8000, 0x2090, 0xaad5, 0x0000, 0x0040,
-+ 0x2c3d, 0x8421, 0x2200, 0x00c0, 0x2b6f, 0x007c, 0xd1dc, 0x0040,
-+ 0x3e00, 0x2029, 0x0020, 0xd69c, 0x00c0, 0x2c4b, 0x8528, 0xd68c,
-+ 0x00c0, 0x2c4b, 0x8528, 0x8840, 0x6f14, 0x610c, 0x8108, 0xa18c,
-+ 0x00ff, 0x70cc, 0xa160, 0x2c64, 0x8cff, 0x0040, 0x2c6a, 0x6014,
-+ 0xa706, 0x00c0, 0x2c53, 0x60b8, 0x8001, 0x60ba, 0x00c0, 0x2c4e,
-+ 0x2a60, 0x6008, 0xa085, 0x0100, 0x600a, 0x2200, 0x8421, 0x00c0,
-+ 0x2b6f, 0x007c, 0x2a60, 0x610e, 0x69be, 0x2c00, 0x68c6, 0x8840,
-+ 0x6008, 0xc0d5, 0x600a, 0x77a4, 0xa786, 0x0001, 0x00c0, 0x2c12,
-+ 0x70d4, 0xd0b4, 0x00c0, 0x2c12, 0x7000, 0xa082, 0x0002, 0x00c8,
-+ 0x2c12, 0x7830, 0xd0bc, 0x00c0, 0x2c12, 0x789b, 0x0010, 0x7baa,
-+ 0x7daa, 0x79aa, 0x2001, 0x0002, 0x007e, 0x6018, 0x8000, 0x601a,
-+ 0x0078, 0x2c93, 0x007e, 0x2960, 0x6104, 0x2a60, 0xa184, 0x0018,
-+ 0x0040, 0x2caf, 0xa184, 0x0010, 0x0040, 0x2ca2, 0x1078, 0x4011,
-+ 0x00c0, 0x2cd4, 0xa184, 0x0008, 0x0040, 0x2caf, 0x69a0, 0xa184,
-+ 0x0600, 0x00c0, 0x2caf, 0x1078, 0x3ef5, 0x0078, 0x2cd4, 0x69a0,
-+ 0xa184, 0x1e00, 0x0040, 0x2cdf, 0xa184, 0x0800, 0x0040, 0x2cc8,
-+ 0x0c7e, 0x2960, 0x6000, 0xa085, 0x2000, 0x6002, 0x6104, 0xa18d,
-+ 0x0010, 0x6106, 0x0c7f, 0x1078, 0x4011, 0x00c0, 0x2cd4, 0x69a0,
-+ 0xa184, 0x0200, 0x0040, 0x2cd0, 0x1078, 0x3f54, 0x0078, 0x2cd4,
-+ 0xa184, 0x0400, 0x00c0, 0x2cab, 0x69a0, 0xa184, 0x1000, 0x0040,
-+ 0x2cdf, 0x6914, 0xa18c, 0xff00, 0x810f, 0x1078, 0x279f, 0x027f,
-+ 0xa68c, 0x00e0, 0xa684, 0x0060, 0x0040, 0x2cec, 0xa086, 0x0060,
-+ 0x00c0, 0x2cec, 0xa18d, 0x4000, 0xa18d, 0x0104, 0x69b6, 0x789b,
-+ 0x0060, 0x2800, 0x78aa, 0x6818, 0xc0fd, 0x681a, 0xd6bc, 0x0040,
-+ 0x2d07, 0xc0fc, 0x7087, 0x0000, 0xa08a, 0x000d, 0x0050, 0x2d05,
-+ 0xa08a, 0x000c, 0x7186, 0x2001, 0x000c, 0x800c, 0x718a, 0x78aa,
-+ 0x3518, 0x3340, 0x3428, 0x8000, 0x80ac, 0xaf80, 0x002b, 0x20a0,
-+ 0x789b, 0x0000, 0xad80, 0x000b, 0x2098, 0x53a6, 0x23a8, 0x2898,
-+ 0x25a0, 0xa286, 0x0020, 0x00c0, 0x2d3f, 0x70d4, 0xc0b5, 0x70d6,
-+ 0x2c00, 0x70ba, 0x2d00, 0x70be, 0x6814, 0xc0fc, 0x8007, 0x7882,
-+ 0xa286, 0x0002, 0x0040, 0x2d75, 0x70a4, 0x8000, 0x70a6, 0x74b4,
-+ 0xa498, 0x0005, 0x70ac, 0xa306, 0x00c0, 0x2d37, 0x73a8, 0x73b6,
-+ 0xa286, 0x0010, 0x0040, 0x29c1, 0x0d7f, 0x0c7f, 0x007c, 0x7000,
-+ 0xa005, 0x00c0, 0x2d1d, 0xa286, 0x0002, 0x00c0, 0x2d8f, 0x1078,
-+ 0x4360, 0x00c0, 0x2d1d, 0x6814, 0xc0fc, 0x8007, 0x7882, 0x2091,
-+ 0x8000, 0x781b, 0x005b, 0x68b4, 0x785a, 0x6894, 0x78d6, 0x78de,
-+ 0x6898, 0x78d2, 0x78da, 0x2091, 0x8001, 0x7808, 0xc08d, 0x780a,
-+ 0x127e, 0x0d7e, 0x0c7e, 0x70d4, 0xa084, 0x2700, 0x2090, 0x0c7f,
-+ 0x0d7f, 0x127f, 0x2900, 0x705a, 0x68bc, 0x7042, 0x7003, 0x0002,
-+ 0x2d00, 0x704e, 0xad80, 0x0009, 0x7046, 0x7830, 0xd0bc, 0x0040,
-+ 0x2d81, 0x2091, 0x303d, 0x70d4, 0xa084, 0x303d, 0x2091, 0x8000,
-+ 0x2090, 0x70a4, 0xa005, 0x00c0, 0x2d86, 0x007c, 0x8421, 0x0040,
-+ 0x2d85, 0x7250, 0x70c0, 0xa200, 0xa015, 0x0078, 0x2b6f, 0xa286,
-+ 0x0010, 0x00c0, 0x2dc0, 0x1078, 0x4360, 0x00c0, 0x2d1d, 0x6814,
-+ 0xc0fc, 0x8007, 0x7882, 0x781b, 0x005b, 0x68b4, 0x785a, 0x6894,
-+ 0x78d6, 0x78de, 0x6898, 0x78d2, 0x78da, 0x7808, 0xc08d, 0x780a,
-+ 0x70a4, 0x8000, 0x70a6, 0x74b4, 0xa490, 0x0005, 0x70ac, 0xa206,
-+ 0x00c0, 0x2db3, 0x72a8, 0x72b6, 0x2900, 0x705a, 0x68bc, 0x7042,
-+ 0x7003, 0x0002, 0x2d00, 0x704e, 0xad80, 0x0009, 0x7046, 0x007c,
-+ 0x6bb4, 0xa39d, 0x2000, 0x7b5a, 0x6814, 0xc0fc, 0x8007, 0x7882,
-+ 0x6b94, 0x7bd6, 0x7bde, 0x6e98, 0x7ed2, 0x7eda, 0x781b, 0x005b,
-+ 0x2900, 0x705a, 0x7202, 0x7808, 0xc08d, 0x780a, 0x2300, 0xa605,
-+ 0x0040, 0x2deb, 0x70d4, 0xa084, 0x2700, 0xa086, 0x2300, 0x00c0,
-+ 0x2de5, 0x2009, 0x0000, 0x0078, 0x2de7, 0x2009, 0x0001, 0xa284,
-+ 0x000f, 0x1079, 0x2def, 0xad80, 0x0009, 0x7046, 0x007c, 0x2df7,
-+ 0x48bd, 0x48bd, 0x48aa, 0x48bd, 0x2df7, 0x2df7, 0x2df7, 0x1078,
-+ 0x296b, 0x7808, 0xa084, 0xfffd, 0x780a, 0x1078, 0x295e, 0x0f7e,
-+ 0x2079, 0x4e00, 0x78ac, 0x0f7f, 0xd084, 0x0040, 0x2e21, 0x7064,
-+ 0xa086, 0x0001, 0x00c0, 0x2e0f, 0x7066, 0x0078, 0x2ef8, 0x7064,
-+ 0xa086, 0x0005, 0x00c0, 0x2e1f, 0x707c, 0x2068, 0x681b, 0x0004,
-+ 0x6817, 0x0000, 0x6820, 0xa084, 0x00ff, 0xc09d, 0x6822, 0x7067,
-+ 0x0000, 0x70a7, 0x0000, 0x70a8, 0x70b2, 0x70b6, 0x1078, 0x2aba,
-+ 0x157e, 0x2011, 0x0004, 0x7164, 0xa186, 0x0001, 0x0040, 0x2e41,
-+ 0xa186, 0x0007, 0x00c0, 0x2e38, 0x701f, 0x0005, 0x0078, 0x2e41,
-+ 0x701f, 0x0001, 0x7067, 0x0000, 0x70d4, 0xc0dd, 0x70d6, 0x0078,
-+ 0x2e43, 0x7067, 0x0000, 0x2001, 0x4e0a, 0x2004, 0xa084, 0x00ff,
-+ 0xa086, 0x0018, 0x0040, 0x2e53, 0x7018, 0x7016, 0xa005, 0x00c0,
-+ 0x2e53, 0x70a7, 0x0001, 0x067e, 0x1078, 0x4586, 0x20a9, 0x0010,
-+ 0x2039, 0x0000, 0x1078, 0x40f8, 0xa7b8, 0x0100, 0x00f0, 0x2e5a,
-+ 0x067f, 0x7000, 0x0079, 0x2e64, 0x2e9e, 0x2e79, 0x2e79, 0x2e6e,
-+ 0x2e9e, 0x2e9e, 0x2e9e, 0x2e6c, 0x1078, 0x296b, 0x7060, 0xa005,
-+ 0x0040, 0x2e9e, 0xad06, 0x00c0, 0x2e79, 0x6800, 0x7062, 0x0078,
-+ 0x2e8b, 0x6820, 0xd084, 0x00c0, 0x2e87, 0x6f14, 0x1078, 0x41fe,
-+ 0x6008, 0xc0d4, 0x600a, 0x1078, 0x3dd0, 0x0078, 0x2e8b, 0x705c,
-+ 0x2060, 0x6800, 0x6002, 0xa684, 0x5f00, 0x681e, 0x6818, 0xd0fc,
-+ 0x0040, 0x2e93, 0x6a1a, 0x6817, 0x0000, 0x682b, 0x0000, 0x6820,
-+ 0xa084, 0x00ff, 0xc09d, 0x6822, 0x1078, 0x202c, 0xb284, 0x0400,
-+ 0x0040, 0x2ea6, 0x2021, 0x95d0, 0x0078, 0x2ea8, 0x2021, 0x94c0,
-+ 0x1078, 0x2efd, 0xb284, 0x0400, 0x0040, 0x2eb2, 0x2021, 0x4e98,
-+ 0x0078, 0x2eb4, 0x2021, 0x4e58, 0x1078, 0x2efd, 0x20a9, 0x0101,
-+ 0xb284, 0x0400, 0x0040, 0x2ec0, 0x2021, 0x94d0, 0x0078, 0x2ec2,
-+ 0x2021, 0x93c0, 0x1078, 0x2efd, 0x8420, 0x00f0, 0x2ec2, 0xb284,
-+ 0x0300, 0x0040, 0x2ecf, 0x2061, 0x53c0, 0x0078, 0x2ed1, 0x2061,
-+ 0x73c0, 0x2021, 0x0002, 0x20a9, 0x0100, 0x6110, 0x81ff, 0x0040,
-+ 0x2eee, 0x6018, 0x017e, 0x007e, 0x2011, 0x4e02, 0x220c, 0xa102,
-+ 0x2012, 0x007f, 0x017f, 0xa102, 0x0050, 0x2eee, 0x6012, 0x00c0,
-+ 0x2eee, 0x2011, 0x4e04, 0x2204, 0xc0a5, 0x2012, 0x601b, 0x0000,
-+ 0xace0, 0x0010, 0x00f0, 0x2ed5, 0x8421, 0x00c0, 0x2ed3, 0x157f,
-+ 0x7003, 0x0000, 0x704f, 0x0000, 0x007c, 0x047e, 0x2404, 0xa005,
-+ 0x0040, 0x2f18, 0x2068, 0x6800, 0x007e, 0x6a1a, 0x6817, 0x0000,
-+ 0x682b, 0x0000, 0x68b4, 0xa084, 0x5f00, 0x681e, 0x6820, 0xa084,
-+ 0x00ff, 0xc09d, 0x6822, 0x1078, 0x202c, 0x007f, 0x0078, 0x2eff,
-+ 0x047f, 0x2023, 0x0000, 0x007c, 0xa282, 0x0003, 0x0050, 0x2f22,
-+ 0x1078, 0x296b, 0x2300, 0x0079, 0x2f25, 0x2f28, 0x2fb3, 0x2fd0,
-+ 0xa282, 0x0002, 0x0040, 0x2f2e, 0x1078, 0x296b, 0x7064, 0x7067,
-+ 0x0000, 0x7083, 0x0000, 0x0079, 0x2f35, 0x2f3d, 0x2f3d, 0x2f3f,
-+ 0x2f7f, 0x3e0c, 0x2f3d, 0x2f7f, 0x2f3d, 0x1078, 0x296b, 0x7774,
-+ 0x1078, 0x40f8, 0x7774, 0xa7bc, 0x8f00, 0x1078, 0x41fe, 0x6018,
-+ 0xa005, 0x0040, 0x2f76, 0xd7fc, 0x00c0, 0x2f52, 0x2021, 0x94c0,
-+ 0x0078, 0x2f54, 0x2021, 0x95d0, 0x2009, 0x0005, 0x2011, 0x0010,
-+ 0x1078, 0x2feb, 0x0040, 0x2f76, 0x157e, 0x20a9, 0x0101, 0xd7fc,
-+ 0x00c0, 0x2f66, 0x2021, 0x93c0, 0x0078, 0x2f68, 0x2021, 0x94d0,
-+ 0x047e, 0x2009, 0x0005, 0x2011, 0x0010, 0x1078, 0x2feb, 0x047f,
-+ 0x0040, 0x2f75, 0x8420, 0x00f0, 0x2f68, 0x157f, 0x8738, 0xa784,
-+ 0x001f, 0x00c0, 0x2f45, 0x0078, 0x29c5, 0x0078, 0x29c5, 0x7774,
-+ 0x1078, 0x41fe, 0x6018, 0xa005, 0x0040, 0x2fb1, 0xd7fc, 0x00c0,
-+ 0x2f8d, 0x2021, 0x94c0, 0x0078, 0x2f8f, 0x2021, 0x95d0, 0x2009,
-+ 0x0005, 0x2011, 0x0020, 0x1078, 0x2feb, 0x0040, 0x2fb1, 0x157e,
-+ 0x20a9, 0x0101, 0xd7fc, 0x00c0, 0x2fa1, 0x2021, 0x93c0, 0x0078,
-+ 0x2fa3, 0x2021, 0x94d0, 0x047e, 0x2009, 0x0005, 0x2011, 0x0020,
-+ 0x1078, 0x2feb, 0x047f, 0x0040, 0x2fb0, 0x8420, 0x00f0, 0x2fa3,
-+ 0x157f, 0x0078, 0x29c5, 0x2200, 0x0079, 0x2fb6, 0x2fb9, 0x2fbb,
-+ 0x2fbb, 0x1078, 0x296b, 0x2009, 0x0012, 0x7064, 0xa086, 0x0002,
-+ 0x0040, 0x2fc4, 0x2009, 0x000e, 0x6818, 0xd0fc, 0x0040, 0x2fc9,
-+ 0x691a, 0x7067, 0x0000, 0x70d4, 0xc0dd, 0x70d6, 0x0078, 0x430d,
-+ 0x2200, 0x0079, 0x2fd3, 0x2fd8, 0x2fbb, 0x2fd6, 0x1078, 0x296b,
-+ 0x1078, 0x4586, 0x7000, 0xa086, 0x0002, 0x00c0, 0x3d7e, 0x1078,
-+ 0x3ded, 0x6008, 0xa084, 0xfbef, 0x600a, 0x1078, 0x3d6f, 0x0040,
-+ 0x3d7e, 0x0078, 0x29c5, 0x2404, 0xa005, 0x0040, 0x3024, 0x2068,
-+ 0x2d04, 0x007e, 0x6814, 0xa706, 0x0040, 0x2ffa, 0x2d20, 0x007f,
-+ 0x0078, 0x2fec, 0x007f, 0x2022, 0x691a, 0x6817, 0x0000, 0x682b,
-+ 0x0000, 0x68b4, 0xa084, 0x5f00, 0x681e, 0x6820, 0xa084, 0x00ff,
-+ 0xa205, 0x6822, 0x1078, 0x202c, 0x2021, 0x4e02, 0x241c, 0x8319,
-+ 0x2322, 0x6010, 0x8001, 0x6012, 0x00c0, 0x301b, 0x2021, 0x4e04,
-+ 0x2404, 0xc0a5, 0x2022, 0x6008, 0xa084, 0xf9ef, 0x600a, 0x1078,
-+ 0x2adb, 0x1078, 0x3ded, 0x007c, 0xa085, 0x0001, 0x0078, 0x3023,
-+ 0x2300, 0x0079, 0x302b, 0x3030, 0x302e, 0x30b0, 0x1078, 0x296b,
-+ 0x78e4, 0xa005, 0x00d0, 0x3066, 0x3208, 0x007e, 0x2001, 0x4e04,
-+ 0x2004, 0xd0ec, 0x007f, 0x0040, 0x3041, 0xa18c, 0x0300, 0x0078,
-+ 0x3043, 0xa18c, 0x0400, 0x0040, 0x3049, 0x0018, 0x29c1, 0x0078,
-+ 0x304b, 0x0028, 0x29c1, 0x2008, 0xa084, 0x0030, 0x00c0, 0x3052,
-+ 0x0078, 0x3770, 0x78ec, 0xa084, 0x0003, 0x0040, 0x3050, 0x2100,
-+ 0xa084, 0x0007, 0x0079, 0x305c, 0x3090, 0x309a, 0x3085, 0x3064,
-+ 0x4355, 0x4355, 0x3064, 0x30a5, 0x1078, 0x296b, 0x7000, 0xa086,
-+ 0x0004, 0x00c0, 0x3080, 0x7064, 0xa086, 0x0002, 0x00c0, 0x3076,
-+ 0x2011, 0x0002, 0x2019, 0x0000, 0x0078, 0x2f1c, 0x7064, 0xa086,
-+ 0x0006, 0x0040, 0x3070, 0x7064, 0xa086, 0x0004, 0x0040, 0x3070,
-+ 0x79e4, 0x2001, 0x0003, 0x0078, 0x33fa, 0x6818, 0xd0fc, 0x0040,
-+ 0x308b, 0x681b, 0x001d, 0x1078, 0x40c8, 0x781b, 0x0064, 0x007c,
-+ 0x6818, 0xd0fc, 0x0040, 0x3096, 0x681b, 0x001d, 0x1078, 0x40c8,
-+ 0x0078, 0x4331, 0x6818, 0xd0fc, 0x0040, 0x30a0, 0x681b, 0x001d,
-+ 0x1078, 0x40c8, 0x781b, 0x00f8, 0x007c, 0x6818, 0xd0fc, 0x0040,
-+ 0x30ab, 0x681b, 0x001d, 0x1078, 0x40c8, 0x781b, 0x00c8, 0x007c,
-+ 0xa584, 0x000f, 0x00c0, 0x30cf, 0x1078, 0x295e, 0x7000, 0x0079,
-+ 0x30b9, 0x29c5, 0x30c1, 0x30c3, 0x3d7e, 0x3d7e, 0x3d7e, 0x30c1,
-+ 0x30c1, 0x1078, 0x296b, 0x1078, 0x3ded, 0x6008, 0xa084, 0xfbef,
-+ 0x600a, 0x1078, 0x3d6f, 0x0040, 0x3d7e, 0x0078, 0x29c5, 0x78e4,
-+ 0xa005, 0x00d0, 0x3066, 0x3208, 0x007e, 0x2001, 0x4e04, 0x2004,
-+ 0xd0ec, 0x007f, 0x0040, 0x30e0, 0xa18c, 0x0300, 0x0078, 0x30e2,
-+ 0xa18c, 0x0400, 0x0040, 0x30e8, 0x0018, 0x3066, 0x0078, 0x30ea,
-+ 0x0028, 0x3066, 0x2008, 0xa084, 0x0030, 0x00c0, 0x30f2, 0x781b,
-+ 0x005b, 0x007c, 0x78ec, 0xa084, 0x0003, 0x0040, 0x30ef, 0x2100,
-+ 0xa184, 0x0007, 0x0079, 0x30fc, 0x310b, 0x310f, 0x3106, 0x3104,
-+ 0x4355, 0x4355, 0x3104, 0x434f, 0x1078, 0x296b, 0x1078, 0x40d0,
-+ 0x781b, 0x0064, 0x007c, 0x1078, 0x40d0, 0x0078, 0x4331, 0x1078,
-+ 0x40d0, 0x781b, 0x00f8, 0x007c, 0x1078, 0x40d0, 0x781b, 0x00c8,
-+ 0x007c, 0x2300, 0x0079, 0x311c, 0x3121, 0x311f, 0x3123, 0x1078,
-+ 0x296b, 0x0078, 0x395f, 0x681b, 0x0016, 0x78a3, 0x0000, 0x79e4,
-+ 0xa184, 0x0030, 0x0040, 0x395f, 0x78ec, 0xa084, 0x0003, 0x0040,
-+ 0x395f, 0xa184, 0x0100, 0x0040, 0x3127, 0xa184, 0x0007, 0x0079,
-+ 0x3139, 0x3141, 0x310f, 0x3085, 0x430d, 0x4355, 0x4355, 0x430d,
-+ 0x434f, 0x1078, 0x4319, 0x007c, 0xa282, 0x0005, 0x0050, 0x314a,
-+ 0x1078, 0x296b, 0x2300, 0x0079, 0x314d, 0x3150, 0x3380, 0x338b,
-+ 0x2200, 0x0079, 0x3153, 0x316d, 0x315a, 0x316d, 0x3158, 0x3363,
-+ 0x1078, 0x296b, 0x789b, 0x0018, 0x78a8, 0xa084, 0x00ff, 0xa082,
-+ 0x0020, 0x0048, 0x40b7, 0xa08a, 0x0004, 0x00c8, 0x40b7, 0x0079,
-+ 0x3169, 0x40b7, 0x40b7, 0x40b7, 0x4061, 0x789b, 0x0018, 0x79a8,
-+ 0xa184, 0x0080, 0x0040, 0x317e, 0x0078, 0x40b7, 0x7000, 0xa005,
-+ 0x00c0, 0x3174, 0x2011, 0x0004, 0x0078, 0x3b4a, 0xa184, 0x00ff,
-+ 0xa08a, 0x0010, 0x00c8, 0x40b7, 0x0079, 0x3186, 0x3198, 0x3196,
-+ 0x31ad, 0x31b1, 0x3284, 0x40b7, 0x40b7, 0x3286, 0x40b7, 0x40b7,
-+ 0x335f, 0x335f, 0x40b7, 0x40b7, 0x40b7, 0x3361, 0x1078, 0x296b,
-+ 0xd6e4, 0x0040, 0x31a3, 0x2001, 0x0300, 0x8000, 0x8000, 0x783a,
-+ 0x781b, 0x00c3, 0x007c, 0x6818, 0xd0fc, 0x0040, 0x31ab, 0x681b,
-+ 0x001d, 0x0078, 0x319b, 0x0078, 0x430d, 0x681b, 0x001d, 0x0078,
-+ 0x40c1, 0x6920, 0x6922, 0xa684, 0x1800, 0x00c0, 0x3216, 0x6820,
-+ 0xd084, 0x00c0, 0x321c, 0x6818, 0xa086, 0x0008, 0x00c0, 0x31c2,
-+ 0x681b, 0x0000, 0xd6d4, 0x0040, 0x3281, 0xd6bc, 0x0040, 0x3202,
-+ 0x7087, 0x0000, 0x6818, 0xa084, 0x003f, 0xa08a, 0x000d, 0x0050,
-+ 0x3202, 0xa08a, 0x000c, 0x7186, 0x2001, 0x000c, 0x800c, 0x718a,
-+ 0x789b, 0x0061, 0x78aa, 0x157e, 0x137e, 0x147e, 0x017e, 0x3208,
-+ 0xa18c, 0x0300, 0x0040, 0x31f4, 0x007e, 0x2001, 0x4e04, 0x2004,
-+ 0xd0ec, 0x007f, 0x0040, 0x31f0, 0x20a1, 0x012b, 0x0078, 0x31f6,
-+ 0x20a1, 0x022b, 0x0078, 0x31f6, 0x20a1, 0x012b, 0x017f, 0x789b,
-+ 0x0000, 0x8000, 0x80ac, 0xad80, 0x000b, 0x2098, 0x53a6, 0x147f,
-+ 0x137f, 0x157f, 0x6038, 0xa005, 0x00c0, 0x3211, 0x681c, 0xa084,
-+ 0x000e, 0x0040, 0x40c1, 0x1078, 0x40d7, 0x782b, 0x3008, 0x0078,
-+ 0x3213, 0x8001, 0x603a, 0x781b, 0x0067, 0x007c, 0xd6e4, 0x0040,
-+ 0x321c, 0x781b, 0x0079, 0x007c, 0xa684, 0x0060, 0x0040, 0x327e,
-+ 0xd6dc, 0x0040, 0x327e, 0xd6fc, 0x00c0, 0x3228, 0x0078, 0x323f,
-+ 0xc6fc, 0x7e5a, 0x6eb6, 0x7adc, 0x79d8, 0x78d0, 0x801b, 0x00c8,
-+ 0x3232, 0x8000, 0xa084, 0x003f, 0xa108, 0xa291, 0x0000, 0x6b98,
-+ 0x2100, 0xa302, 0x68b2, 0x6b94, 0x2200, 0xa303, 0x68ae, 0xd6f4,
-+ 0x0040, 0x3245, 0xc6f4, 0x7e5a, 0x6eb6, 0x7000, 0xa086, 0x0003,
-+ 0x00c0, 0x3253, 0x007e, 0x1078, 0x4586, 0x1078, 0x48bd, 0x007f,
-+ 0x781b, 0x0076, 0x007c, 0xa006, 0x1078, 0x49c3, 0x6ab0, 0x69ac,
-+ 0x6c98, 0x6b94, 0x2200, 0xa105, 0x0040, 0x3262, 0x2200, 0xa422,
-+ 0x2100, 0xa31b, 0x6caa, 0x7cd2, 0x7cda, 0x6ba6, 0x7bd6, 0x7bde,
-+ 0x2300, 0xa405, 0x00c0, 0x3272, 0xc6f5, 0x7e5a, 0x6eb6, 0x781b,
-+ 0x0076, 0x007c, 0x781b, 0x0076, 0x2200, 0xa115, 0x00c0, 0x327b,
-+ 0x1078, 0x48bd, 0x007c, 0x1078, 0x48f5, 0x007c, 0x781b, 0x0079,
-+ 0x007c, 0x781b, 0x0067, 0x007c, 0x1078, 0x296b, 0x0078, 0x32d2,
-+ 0x6920, 0xd1c4, 0x0040, 0x329b, 0xc1c4, 0x6922, 0x0c7e, 0x7058,
-+ 0x2060, 0x6000, 0xc0e4, 0x6002, 0x6004, 0xa084, 0xfff5, 0x6006,
-+ 0x0c7f, 0x0078, 0x32c6, 0xd1cc, 0x0040, 0x32c6, 0xc1cc, 0x6922,
-+ 0x0c7e, 0x7058, 0x2060, 0x6000, 0xc0ec, 0x6002, 0x6004, 0xc0a4,
-+ 0x6006, 0x2008, 0x2c48, 0x0c7f, 0xd19c, 0x0040, 0x32c6, 0x1078,
-+ 0x41fa, 0x1078, 0x3ef5, 0x88ff, 0x0040, 0x32c6, 0x789b, 0x0060,
-+ 0x2800, 0x78aa, 0x7e58, 0xc695, 0x7e5a, 0xd6d4, 0x00c0, 0x32c3,
-+ 0x781b, 0x0064, 0x007c, 0x781b, 0x0078, 0x007c, 0x7e58, 0xd6d4,
-+ 0x00c0, 0x32cd, 0x781b, 0x0067, 0x007c, 0x781b, 0x0079, 0x007c,
-+ 0x0078, 0x40bc, 0x2019, 0x0000, 0x7990, 0xa18c, 0x0007, 0x00c0,
-+ 0x32e0, 0x6820, 0xa084, 0x0100, 0x0040, 0x32d0, 0x2009, 0x0008,
-+ 0x789b, 0x0010, 0x78a8, 0xa094, 0x00ff, 0xa286, 0x0001, 0x00c0,
-+ 0x32fc, 0x2300, 0x7ca8, 0xa400, 0x2018, 0xa102, 0x0040, 0x32f4,
-+ 0x0048, 0x32f4, 0x0078, 0x32f6, 0x0078, 0x3288, 0x24a8, 0x7aa8,
-+ 0x00f0, 0x32f6, 0x0078, 0x32e2, 0xa284, 0x00f0, 0xa086, 0x0020,
-+ 0x00c0, 0x3350, 0x8318, 0x8318, 0x2300, 0xa102, 0x0040, 0x330c,
-+ 0x0048, 0x330c, 0x0078, 0x334d, 0xa286, 0x0023, 0x0040, 0x32d0,
-+ 0x681c, 0xa084, 0xfff1, 0x681e, 0x7e58, 0xa684, 0xfff1, 0xc0a5,
-+ 0x2030, 0x7e5a, 0x6008, 0xc0a5, 0x600a, 0x0c7e, 0x7058, 0x2060,
-+ 0x6004, 0x2008, 0x2c48, 0x0c7f, 0xd1a4, 0x0040, 0x332d, 0x1078,
-+ 0x41fa, 0x1078, 0x4011, 0x0078, 0x333b, 0x0c7e, 0x7058, 0x2060,
-+ 0x6004, 0x2008, 0x2c48, 0x0c7f, 0xd19c, 0x0040, 0x32c6, 0x1078,
-+ 0x41fa, 0x1078, 0x3ef5, 0x88ff, 0x0040, 0x32c6, 0x789b, 0x0060,
-+ 0x2800, 0x78aa, 0xc695, 0x7e5a, 0xd6d4, 0x00c0, 0x334a, 0x781b,
-+ 0x0064, 0x007c, 0x781b, 0x0078, 0x007c, 0x7aa8, 0x0078, 0x32e2,
-+ 0x8318, 0x2300, 0xa102, 0x0040, 0x3359, 0x0048, 0x3359, 0x0078,
-+ 0x32e2, 0xa284, 0x0080, 0x00c0, 0x40c1, 0x0078, 0x40bc, 0x0078,
-+ 0x40c1, 0x0078, 0x40b7, 0x7058, 0xa04d, 0x789b, 0x0018, 0x78a8,
-+ 0xa084, 0x00ff, 0xa08e, 0x0001, 0x0040, 0x3370, 0x1078, 0x296b,
-+ 0x7aa8, 0xa294, 0x00ff, 0x78a8, 0xa084, 0x00ff, 0xa08a, 0x0004,
-+ 0x00c8, 0x40b7, 0x0079, 0x337c, 0x40b7, 0x3e46, 0x40b7, 0x3fb9,
-+ 0xa282, 0x0000, 0x00c0, 0x3386, 0x1078, 0x296b, 0x1078, 0x40c8,
-+ 0x781b, 0x0078, 0x007c, 0xa282, 0x0003, 0x00c0, 0x3391, 0x1078,
-+ 0x296b, 0xd4fc, 0x00c0, 0x33b1, 0x7064, 0xa005, 0x0040, 0x339a,
-+ 0x1078, 0x296b, 0x6f14, 0x7776, 0xa7bc, 0x8f00, 0x1078, 0x41fe,
-+ 0x6008, 0xa085, 0x0021, 0x600a, 0x8738, 0xa784, 0x001f, 0x00c0,
-+ 0x339e, 0x1078, 0x40cc, 0x7067, 0x0002, 0x701f, 0x0009, 0x0078,
-+ 0x33b3, 0x1078, 0x40db, 0x781b, 0x0078, 0x007c, 0xa282, 0x0004,
-+ 0x0050, 0x33bc, 0x1078, 0x296b, 0x2300, 0x0079, 0x33bf, 0x33c2,
-+ 0x3582, 0x35c5, 0xa286, 0x0003, 0x0040, 0x33fa, 0x7200, 0x7cd8,
-+ 0x7ddc, 0x7fd0, 0x71d4, 0xd1bc, 0x00c0, 0x33f2, 0xd1b4, 0x0040,
-+ 0x33f2, 0x7868, 0xa084, 0x00ff, 0x00c0, 0x33f2, 0xa282, 0x0002,
-+ 0x00c8, 0x33f2, 0x0d7e, 0x783b, 0x8300, 0x781b, 0x004c, 0x70bc,
-+ 0xa06d, 0x68b4, 0x785a, 0x6894, 0x78d6, 0x78de, 0x6898, 0x78d2,
-+ 0x78da, 0xc1b4, 0x71d6, 0x7003, 0x0030, 0x0d7f, 0x2001, 0x0000,
-+ 0x0078, 0x33fe, 0x783b, 0x1300, 0x781b, 0x004a, 0x2001, 0x0000,
-+ 0x0078, 0x33fe, 0x7200, 0x7cd8, 0x7ddc, 0x7fd0, 0x704a, 0x68a0,
-+ 0xd0ec, 0x0040, 0x3406, 0x6008, 0xc08d, 0x600a, 0xa284, 0x000f,
-+ 0x0079, 0x340a, 0x3562, 0x3417, 0x3414, 0x36c8, 0x3754, 0x29c5,
-+ 0x3412, 0x3412, 0x1078, 0x296b, 0x6008, 0xc0d4, 0x600a, 0xd6e4,
-+ 0x0040, 0x341f, 0x7048, 0xa086, 0x0014, 0x00c0, 0x343f, 0x1078,
-+ 0x4586, 0x2009, 0x0000, 0x6818, 0xd0fc, 0x0040, 0x3428, 0x7048,
-+ 0xa086, 0x0014, 0x0040, 0x3439, 0x6818, 0xa086, 0x0008, 0x00c0,
-+ 0x351a, 0x7858, 0xd09c, 0x0040, 0x351a, 0x6820, 0xd0ac, 0x0040,
-+ 0x351a, 0x681b, 0x0014, 0x2009, 0x0002, 0x0078, 0x347e, 0x7868,
-+ 0xa08c, 0x00ff, 0x0040, 0x347e, 0xa186, 0x0008, 0x00c0, 0x3455,
-+ 0x6008, 0xc0a4, 0x600a, 0x1078, 0x3d6f, 0x0040, 0x347e, 0x1078,
-+ 0x3ded, 0x1078, 0x4586, 0x0078, 0x3466, 0xa186, 0x0028, 0x00c0,
-+ 0x347e, 0x6018, 0xa005, 0x0040, 0x3448, 0x8001, 0x0040, 0x3448,
-+ 0x8001, 0x0040, 0x3448, 0x601e, 0x0078, 0x3448, 0x6820, 0xd084,
-+ 0x0040, 0x29c5, 0xc084, 0x6822, 0x1078, 0x2acc, 0x705c, 0x0c7e,
-+ 0x2060, 0x6800, 0x6002, 0x0c7f, 0x6004, 0x6802, 0xa005, 0x2d00,
-+ 0x00c0, 0x347b, 0x6002, 0x6006, 0x0078, 0x29c5, 0x017e, 0x81ff,
-+ 0x00c0, 0x34c8, 0x7000, 0xa086, 0x0030, 0x0040, 0x34c8, 0x71d4,
-+ 0xd1bc, 0x00c0, 0x34c8, 0xd1b4, 0x00c0, 0x34af, 0x7060, 0xa005,
-+ 0x00c0, 0x34c8, 0x70a4, 0xa086, 0x0001, 0x0040, 0x34c8, 0x7003,
-+ 0x0000, 0x047e, 0x057e, 0x077e, 0x067e, 0x0c7e, 0x0d7e, 0x1078,
-+ 0x29ee, 0x0d7f, 0x0c7f, 0x067f, 0x077f, 0x057f, 0x047f, 0x71d4,
-+ 0xd1b4, 0x00c0, 0x34c8, 0x7003, 0x0040, 0x0078, 0x34c8, 0x1078,
-+ 0x4360, 0x00c0, 0x34c8, 0x781b, 0x005b, 0x0d7e, 0x70bc, 0xa06d,
-+ 0x68b4, 0x785a, 0x6894, 0x78d6, 0x78de, 0x6898, 0x78d2, 0x78da,
-+ 0xc1b4, 0x71d6, 0x7003, 0x0030, 0x7808, 0xc08d, 0x780a, 0x0d7f,
-+ 0x1078, 0x35ff, 0x017f, 0x81ff, 0x0040, 0x351a, 0xa684, 0xdf00,
-+ 0x681e, 0x682b, 0x0000, 0x6f14, 0xa186, 0x0002, 0x00c0, 0x351b,
-+ 0x6818, 0xa086, 0x0014, 0x00c0, 0x34e4, 0x2008, 0xd6e4, 0x0040,
-+ 0x34e4, 0x7868, 0xa08c, 0x00ff, 0x1078, 0x2aba, 0x1078, 0x2adb,
-+ 0x6820, 0xd0dc, 0x00c0, 0x351b, 0x8717, 0xa294, 0x000f, 0x8213,
-+ 0x8213, 0x8213, 0xb284, 0x0300, 0x0040, 0x34fa, 0xa290, 0x52c0,
-+ 0x0078, 0x34fc, 0xa290, 0x5340, 0xa290, 0x0000, 0x221c, 0xd3c4,
-+ 0x00c0, 0x3504, 0x0078, 0x350a, 0x8210, 0x2204, 0xa085, 0x0018,
-+ 0x2012, 0x8211, 0xd3d4, 0x0040, 0x3515, 0x68a0, 0xd0c4, 0x00c0,
-+ 0x3515, 0x1078, 0x3679, 0x0078, 0x29c5, 0x6008, 0xc08d, 0x600a,
-+ 0x0078, 0x351b, 0x692a, 0x6916, 0x6818, 0xd0fc, 0x0040, 0x3522,
-+ 0x7048, 0x681a, 0xa68c, 0xdf00, 0x691e, 0x6410, 0x84ff, 0x0040,
-+ 0x3537, 0x2009, 0x4e02, 0x2104, 0x8001, 0x200a, 0x8421, 0x6412,
-+ 0x00c0, 0x3537, 0x2021, 0x4e04, 0x2404, 0xc0a5, 0x2022, 0x6018,
-+ 0xa005, 0x0040, 0x353f, 0x8001, 0x601a, 0x00c0, 0x3542, 0x6008,
-+ 0xc0a4, 0x600a, 0x6820, 0xd084, 0x00c0, 0x354e, 0x6800, 0xa005,
-+ 0x00c0, 0x354b, 0x6002, 0x6006, 0x0078, 0x3552, 0x705c, 0x2060,
-+ 0x6800, 0x6002, 0x2061, 0x4e00, 0x6887, 0x0103, 0x2d08, 0x206b,
-+ 0x0000, 0x6068, 0xa005, 0x616a, 0x0040, 0x3561, 0x2d02, 0x0078,
-+ 0x3562, 0x616e, 0x7200, 0xa286, 0x0030, 0x0040, 0x3572, 0xa286,
-+ 0x0040, 0x00c0, 0x29c5, 0x7003, 0x0002, 0x704c, 0x2068, 0x68c4,
-+ 0x2060, 0x007c, 0x7003, 0x0002, 0x70bc, 0xa06d, 0x68bc, 0x7042,
-+ 0x70b8, 0xa065, 0x68c0, 0x705a, 0x2d00, 0x704e, 0xad80, 0x0009,
-+ 0x7046, 0x007c, 0xa282, 0x0004, 0x0048, 0x3588, 0x1078, 0x296b,
-+ 0x2200, 0x0079, 0x358b, 0x358f, 0x35a0, 0x35ad, 0x35a0, 0xa586,
-+ 0x1300, 0x0040, 0x35a0, 0xa586, 0x8300, 0x00c0, 0x3586, 0x7003,
-+ 0x0000, 0x6018, 0x8001, 0x601a, 0x6008, 0xa084, 0xfbef, 0x600a,
-+ 0x7000, 0xa086, 0x0005, 0x0040, 0x35aa, 0x1078, 0x40c8, 0x781b,
-+ 0x0078, 0x007c, 0x781b, 0x0079, 0x007c, 0x7890, 0x8007, 0x8001,
-+ 0xa084, 0x0007, 0xa080, 0x0018, 0x789a, 0x79a8, 0xa18c, 0x00ff,
-+ 0xa186, 0x0003, 0x0040, 0x35c2, 0xa186, 0x0000, 0x0040, 0x35c2,
-+ 0x0078, 0x40b7, 0x781b, 0x0079, 0x007c, 0x6820, 0xc095, 0x6822,
-+ 0x82ff, 0x00c0, 0x35cf, 0x1078, 0x40c8, 0x0078, 0x35d6, 0x8211,
-+ 0x0040, 0x35d4, 0x1078, 0x296b, 0x1078, 0x40db, 0x781b, 0x0078,
-+ 0x007c, 0x1078, 0x4383, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x35fc,
-+ 0x017e, 0x3208, 0x007e, 0x2001, 0x4e04, 0x2004, 0xd0ec, 0x007f,
-+ 0x0040, 0x35ee, 0xa18c, 0x0300, 0x0078, 0x35f0, 0xa18c, 0x0400,
-+ 0x017f, 0x0040, 0x35f7, 0x0018, 0x35fc, 0x0078, 0x35f9, 0x0028,
-+ 0x35fc, 0x791a, 0xa006, 0x007c, 0xa085, 0x0001, 0x007c, 0xa684,
-+ 0x0060, 0x00c0, 0x3609, 0x682f, 0x0000, 0x6833, 0x0000, 0x0078,
-+ 0x3678, 0xd6dc, 0x00c0, 0x3621, 0x68b4, 0xd0dc, 0x00c0, 0x3621,
-+ 0x6998, 0x6a94, 0x692e, 0x6a32, 0x7048, 0xa005, 0x00c0, 0x361e,
-+ 0x2200, 0xa105, 0x0040, 0x4586, 0x704b, 0x0015, 0x0078, 0x4586,
-+ 0x007c, 0xd6ac, 0x0040, 0x3647, 0xd6f4, 0x0040, 0x362d, 0x682f,
-+ 0x0000, 0x6833, 0x0000, 0x0078, 0x4586, 0x68b4, 0xa084, 0x4000,
-+ 0xa635, 0xd6f4, 0x00c0, 0x3627, 0x7048, 0xa005, 0x00c0, 0x363a,
-+ 0x704b, 0x0015, 0xd6dc, 0x00c0, 0x3643, 0x68b4, 0xd0dc, 0x0040,
-+ 0x3643, 0x6ca8, 0x6da4, 0x6c2e, 0x6d32, 0x0078, 0x4586, 0xd6f4,
-+ 0x0040, 0x3650, 0x682f, 0x0000, 0x6833, 0x0000, 0x0078, 0x4586,
-+ 0x68b4, 0xa084, 0x4800, 0xa635, 0xd6f4, 0x00c0, 0x364a, 0x7048,
-+ 0xa005, 0x00c0, 0x365d, 0x704b, 0x0015, 0x2408, 0x2510, 0x2700,
-+ 0x80fb, 0x00c8, 0x3664, 0x8000, 0xa084, 0x003f, 0xa108, 0xa291,
-+ 0x0000, 0x692e, 0x6a32, 0x2100, 0xa205, 0x00c0, 0x3671, 0x0078,
-+ 0x4586, 0x7000, 0xa086, 0x0006, 0x0040, 0x3678, 0x0078, 0x4586,
-+ 0x007c, 0x6946, 0x6008, 0xc0cd, 0xd3cc, 0x0040, 0x3680, 0xc08d,
-+ 0x600a, 0x6818, 0x683a, 0x681b, 0x0006, 0x688f, 0x0000, 0x6893,
-+ 0x0000, 0x6a30, 0x692c, 0x6a3e, 0x6942, 0x682f, 0x0003, 0x6833,
-+ 0x0000, 0x6837, 0x0020, 0x6897, 0x0000, 0x689b, 0x0020, 0x7000,
-+ 0x0079, 0x369a, 0x29c5, 0x36ac, 0x36a4, 0x36a2, 0x36a2, 0x36a2,
-+ 0x36a2, 0x36a2, 0x1078, 0x296b, 0x6820, 0xd084, 0x00c0, 0x36ac,
-+ 0x1078, 0x3dd0, 0x0078, 0x36b2, 0x705c, 0x2c50, 0x2060, 0x6800,
-+ 0x6002, 0x2a60, 0x3208, 0xa18c, 0x0300, 0x0040, 0x36bb, 0x2021,
-+ 0x4e58, 0x0078, 0x36bd, 0x2021, 0x4e98, 0x2404, 0xa005, 0x0040,
-+ 0x36c4, 0x2020, 0x0078, 0x36bd, 0x2d22, 0x206b, 0x0000, 0x007c,
-+ 0x1078, 0x3dd7, 0x1078, 0x3ded, 0x6008, 0xc0cc, 0x600a, 0x682b,
-+ 0x0000, 0x789b, 0x000e, 0x6f14, 0x6938, 0x691a, 0x6944, 0x6916,
-+ 0x3208, 0xa18c, 0x0300, 0x0040, 0x36e1, 0x2009, 0x0000, 0x0078,
-+ 0x36e3, 0x2009, 0x0001, 0x1078, 0x49f8, 0xd6dc, 0x0040, 0x36eb,
-+ 0x691c, 0xc1ed, 0x691e, 0x6818, 0xd0fc, 0x0040, 0x36fa, 0x7868,
-+ 0xa08c, 0x00ff, 0x0040, 0x36f8, 0x681b, 0x001e, 0x0078, 0x36fa,
-+ 0x681b, 0x0000, 0xb284, 0x0300, 0x00c0, 0x3702, 0x2021, 0x4e98,
-+ 0x0078, 0x3704, 0x2021, 0x4e58, 0x6800, 0x2022, 0x6a3c, 0x6940,
-+ 0x6a32, 0x692e, 0x68c0, 0x2060, 0x6000, 0xd0a4, 0x0040, 0x3744,
-+ 0x2041, 0x0021, 0x2049, 0x0005, 0x2051, 0x0020, 0x0d7e, 0x0f7e,
-+ 0x157e, 0x147e, 0x2079, 0x4e00, 0x1078, 0x1dff, 0x147f, 0x157f,
-+ 0x0f7f, 0x70cc, 0x2010, 0x2009, 0x0101, 0x027e, 0x2204, 0xa06d,
-+ 0x0040, 0x3734, 0x6814, 0xa706, 0x0040, 0x3731, 0x6800, 0x0078,
-+ 0x3727, 0x6820, 0xc0d5, 0x6822, 0x027f, 0x8210, 0x8109, 0x00c0,
-+ 0x3725, 0x0d7f, 0x7067, 0x0003, 0x707f, 0x0000, 0x7776, 0x7083,
-+ 0x000f, 0x71d4, 0xc1dc, 0x71d6, 0x6818, 0xa086, 0x0002, 0x00c0,
-+ 0x3750, 0x6817, 0x0000, 0x682b, 0x0000, 0x681c, 0xc0ec, 0x681e,
-+ 0x1078, 0x202c, 0x0078, 0x29c5, 0x7cd8, 0x7ddc, 0x7fd0, 0x1078,
-+ 0x35ff, 0x682b, 0x0000, 0x789b, 0x000e, 0x6f14, 0x1078, 0x4387,
-+ 0xa08c, 0x00ff, 0x6916, 0x6818, 0xd0fc, 0x0040, 0x3769, 0x7048,
-+ 0x681a, 0xa68c, 0xdf00, 0x691e, 0x7067, 0x0000, 0x0078, 0x29c5,
-+ 0x7000, 0xa005, 0x00c0, 0x3776, 0x0078, 0x29c5, 0xa006, 0x1078,
-+ 0x4586, 0x6920, 0xd1ac, 0x00c0, 0x377f, 0x681b, 0x0014, 0xa68c,
-+ 0xdf00, 0x691e, 0x682b, 0x0000, 0x6820, 0xa084, 0x00ff, 0x6822,
-+ 0x7000, 0x0079, 0x378b, 0x29c5, 0x3795, 0x3795, 0x3798, 0x3798,
-+ 0x3798, 0x3793, 0x3793, 0x1078, 0x296b, 0x6818, 0x0078, 0x33fa,
-+ 0x6008, 0xc0a4, 0x600a, 0x6817, 0x0000, 0x0078, 0x3d95, 0x2300,
-+ 0x0079, 0x37a2, 0x37a5, 0x37a7, 0x3817, 0x1078, 0x296b, 0xd6fc,
-+ 0x00c0, 0x37fe, 0x7000, 0xa00d, 0x0079, 0x37ae, 0x29c5, 0x37b8,
-+ 0x37b8, 0x37e8, 0x37b8, 0x37fb, 0x37b6, 0x37b6, 0x1078, 0x296b,
-+ 0xa684, 0x0060, 0x0040, 0x37e8, 0xa086, 0x0060, 0x00c0, 0x37e5,
-+ 0xc6ac, 0xc6f4, 0xc6ed, 0x7e5a, 0x6eb6, 0x681c, 0xc0ac, 0x681e,
-+ 0xa186, 0x0002, 0x0040, 0x37d7, 0x1078, 0x4586, 0x69ac, 0x68b0,
-+ 0xa115, 0x0040, 0x37d7, 0x1078, 0x48f5, 0x0078, 0x37d9, 0x1078,
-+ 0x48bd, 0x781b, 0x0079, 0x71d4, 0xd1b4, 0x00c0, 0x29c1, 0x70a4,
-+ 0xa086, 0x0001, 0x00c0, 0x2a0b, 0x007c, 0xd6ec, 0x0040, 0x37c2,
-+ 0x6818, 0xd0fc, 0x0040, 0x37fb, 0xd6f4, 0x00c0, 0x37f5, 0x681b,
-+ 0x0015, 0x781b, 0x0079, 0x0078, 0x29c1, 0x681b, 0x0007, 0x682f,
-+ 0x0000, 0x6833, 0x0000, 0x1078, 0x4319, 0x007c, 0xc6fc, 0x7e5a,
-+ 0x7adc, 0x79d8, 0x78d0, 0x801b, 0x00c8, 0x3807, 0x8000, 0xa084,
-+ 0x003f, 0xa108, 0xa291, 0x0000, 0x6b98, 0x2100, 0xa302, 0x68b2,
-+ 0x6b94, 0x2200, 0xa303, 0x68ae, 0x781b, 0x0079, 0x007c, 0x1078,
-+ 0x296b, 0x2300, 0x0079, 0x381c, 0x3821, 0x3846, 0x38a6, 0x1078,
-+ 0x296b, 0x7000, 0x0079, 0x3824, 0x382c, 0x382e, 0x3837, 0x382c,
-+ 0x382c, 0x382c, 0x382c, 0x382c, 0x1078, 0x296b, 0x69ac, 0x68b0,
-+ 0xa115, 0x0040, 0x3837, 0x1078, 0x48f5, 0x0078, 0x3839, 0x1078,
-+ 0x48bd, 0x681c, 0xc0b4, 0x681e, 0x70d4, 0xd0b4, 0x00c0, 0x29c1,
-+ 0x70a4, 0xa086, 0x0001, 0x00c0, 0x2a0b, 0x007c, 0xd6fc, 0x00c0,
-+ 0x3896, 0x7000, 0xa00d, 0x0079, 0x384d, 0x29c5, 0x385d, 0x3857,
-+ 0x388d, 0x385d, 0x3893, 0x3855, 0x3855, 0x1078, 0x296b, 0x6894,
-+ 0x78d6, 0x78de, 0x6898, 0x78d2, 0x78da, 0xa684, 0x0060, 0x0040,
-+ 0x388d, 0xa086, 0x0060, 0x00c0, 0x388a, 0xa6b4, 0xbfbf, 0xc6ed,
-+ 0x7e5a, 0x6eb6, 0xa186, 0x0002, 0x0040, 0x3879, 0x1078, 0x4586,
-+ 0x69ac, 0x68b0, 0xa115, 0x0040, 0x3879, 0x1078, 0x48f5, 0x0078,
-+ 0x387b, 0x1078, 0x48bd, 0x781b, 0x0079, 0x681c, 0xc0b4, 0x681e,
-+ 0x71d4, 0xd1b4, 0x00c0, 0x29c1, 0x70a4, 0xa086, 0x0001, 0x00c0,
-+ 0x2a0b, 0x007c, 0xd6ec, 0x0040, 0x3867, 0x6818, 0xd0fc, 0x0040,
-+ 0x3893, 0x681b, 0x0007, 0x781b, 0x00f9, 0x007c, 0xc6fc, 0x7e5a,
-+ 0x7adc, 0x79d8, 0x6b98, 0x2100, 0xa302, 0x68b2, 0x6b94, 0x2200,
-+ 0xa303, 0x68ae, 0x79d2, 0x781b, 0x0079, 0x007c, 0xd6dc, 0x0040,
-+ 0x38af, 0x782b, 0x3009, 0x781b, 0x0079, 0x0078, 0x29c1, 0x7884,
-+ 0xc0ac, 0x7886, 0x78e4, 0xa084, 0x0008, 0x00c0, 0x38c2, 0xa484,
-+ 0x0200, 0x0040, 0x38bc, 0xc6f5, 0xc6dd, 0x7e5a, 0x781b, 0x0079,
-+ 0x0078, 0x29c1, 0x6820, 0xc095, 0x6822, 0x1078, 0x4292, 0xc6dd,
-+ 0x1078, 0x40c8, 0x781b, 0x0078, 0x0078, 0x29c1, 0x2300, 0x0079,
-+ 0x38d1, 0x38d4, 0x38d6, 0x38d8, 0x1078, 0x296b, 0x0078, 0x40c1,
-+ 0xd6d4, 0x00c0, 0x3913, 0x79e4, 0xd1ac, 0x0040, 0x38e6, 0x78ec,
-+ 0xa084, 0x0003, 0x0040, 0x38e6, 0x782b, 0x3009, 0x789b, 0x0060,
-+ 0x78ab, 0x0000, 0xa684, 0xfffb, 0x785a, 0x79e4, 0xd1ac, 0x0040,
-+ 0x38f6, 0x78ec, 0xa084, 0x0003, 0x00c0, 0x390f, 0x2001, 0x4e04,
-+ 0x2004, 0xd0e4, 0x00c0, 0x390b, 0x6820, 0xd0c4, 0x0040, 0x390b,
-+ 0x0c7e, 0x7058, 0x2060, 0x6004, 0xc09d, 0x6006, 0x6008, 0xa084,
-+ 0x00ff, 0x600a, 0x0c7f, 0x2001, 0x0014, 0x0078, 0x33fa, 0xa184,
-+ 0x0007, 0x0079, 0x3949, 0x7a90, 0xa294, 0x0007, 0x789b, 0x0060,
-+ 0x79a8, 0x81ff, 0x0040, 0x3947, 0x789b, 0x0010, 0x7ba8, 0xa384,
-+ 0x0001, 0x00c0, 0x393a, 0x7ba8, 0x7ba8, 0xa386, 0x0001, 0x00c0,
-+ 0x392d, 0x2009, 0xfff7, 0x0078, 0x3933, 0xa386, 0x0003, 0x00c0,
-+ 0x393a, 0x2009, 0xffef, 0x0c7e, 0x7058, 0x2060, 0x6004, 0xa104,
-+ 0x6006, 0x0c7f, 0x789b, 0x0060, 0x78ab, 0x0000, 0xa684, 0xfffb,
-+ 0x785a, 0x782b, 0x3009, 0x6920, 0xa18c, 0xfcff, 0x6922, 0x0078,
-+ 0x430d, 0x3090, 0x309a, 0x3953, 0x3959, 0x3951, 0x3951, 0x430d,
-+ 0x430d, 0x1078, 0x296b, 0x6920, 0xa18c, 0xfcff, 0x6922, 0x0078,
-+ 0x4313, 0x6920, 0xa18c, 0xfcff, 0x6922, 0x0078, 0x430d, 0x79e4,
-+ 0xa184, 0x0030, 0x0040, 0x3969, 0x78ec, 0xa084, 0x0003, 0x00c0,
-+ 0x399d, 0x7000, 0xa086, 0x0004, 0x00c0, 0x3983, 0x7064, 0xa086,
-+ 0x0002, 0x00c0, 0x3979, 0x2011, 0x0002, 0x2019, 0x0000, 0x0078,
-+ 0x2f1c, 0x7064, 0xa086, 0x0006, 0x0040, 0x3973, 0x7064, 0xa086,
-+ 0x0004, 0x0040, 0x3973, 0x7000, 0xa086, 0x0000, 0x0040, 0x29c1,
-+ 0x6920, 0xa184, 0x0420, 0x0040, 0x3992, 0xc1d4, 0x6922, 0x6818,
-+ 0x0078, 0x33fa, 0x6818, 0xa08e, 0x0002, 0x0040, 0x399b, 0xc0fd,
-+ 0x681a, 0x2001, 0x0014, 0x0078, 0x33fa, 0xa184, 0x0007, 0x0079,
-+ 0x39a1, 0x430d, 0x430d, 0x39a9, 0x430d, 0x4355, 0x4355, 0x430d,
-+ 0x430d, 0xd6bc, 0x0040, 0x39eb, 0x7184, 0x81ff, 0x0040, 0x39eb,
-+ 0xa182, 0x000d, 0x00d0, 0x39b8, 0x7087, 0x0000, 0x0078, 0x39bd,
-+ 0xa182, 0x000c, 0x7086, 0x2009, 0x000c, 0x789b, 0x0061, 0x79aa,
-+ 0x157e, 0x137e, 0x147e, 0x7088, 0x8114, 0xa210, 0x728a, 0xa080,
-+ 0x000b, 0xad00, 0x2098, 0xb284, 0x0300, 0x0040, 0x39df, 0x007e,
-+ 0x2001, 0x4e04, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x39db, 0x20a1,
-+ 0x012b, 0x0078, 0x39e1, 0x20a1, 0x022b, 0x0078, 0x39e1, 0x20a1,
-+ 0x012b, 0x789b, 0x0000, 0x8108, 0x81ac, 0x53a6, 0x147f, 0x137f,
-+ 0x157f, 0x0078, 0x4313, 0xd6d4, 0x00c0, 0x3a3f, 0x6820, 0xd084,
-+ 0x0040, 0x4313, 0xa68c, 0x0060, 0xa684, 0x0060, 0x0040, 0x39fd,
-+ 0xa086, 0x0060, 0x00c0, 0x39fd, 0xc1f5, 0xc194, 0x795a, 0x69b6,
-+ 0x789b, 0x0060, 0x78ab, 0x0000, 0x789b, 0x0061, 0x6818, 0xc0fd,
-+ 0x681a, 0x78aa, 0x8008, 0x810c, 0x0040, 0x3e06, 0xa18c, 0x00f8,
-+ 0x00c0, 0x3e06, 0x157e, 0x137e, 0x147e, 0x017e, 0x3208, 0xa18c,
-+ 0x0300, 0x0040, 0x3a2b, 0x007e, 0x2001, 0x4e04, 0x2004, 0xd0ec,
-+ 0x007f, 0x0040, 0x3a27, 0x20a1, 0x012b, 0x0078, 0x3a2d, 0x20a1,
-+ 0x022b, 0x0078, 0x3a2d, 0x20a1, 0x012b, 0x017f, 0x789b, 0x0000,
-+ 0x8000, 0x80ac, 0xad80, 0x000b, 0x2098, 0x53a6, 0x147f, 0x137f,
-+ 0x157f, 0x6814, 0xc0fc, 0x8007, 0x7882, 0x0078, 0x4313, 0x6818,
-+ 0xd0fc, 0x0040, 0x3a45, 0x681b, 0x0008, 0x6820, 0xc0ad, 0x6822,
-+ 0x1078, 0x40d0, 0x781b, 0x00ea, 0x007c, 0x2300, 0x0079, 0x3a50,
-+ 0x3a55, 0x3b2d, 0x3a53, 0x1078, 0x296b, 0x7cd8, 0x7ddc, 0x7fd0,
-+ 0x82ff, 0x00c0, 0x3a7e, 0x7200, 0xa286, 0x0003, 0x0040, 0x33c7,
-+ 0x71d4, 0xd1bc, 0x00c0, 0x3a81, 0xd1b4, 0x0040, 0x3a81, 0x0d7e,
-+ 0x783b, 0x8800, 0x781b, 0x004c, 0x70bc, 0xa06d, 0x68b4, 0xc0a5,
-+ 0x785a, 0x6894, 0x78d6, 0x78de, 0x6898, 0x78d2, 0x78da, 0xc1b4,
-+ 0x71d6, 0x7003, 0x0030, 0x0d7f, 0x0078, 0x3a85, 0x7200, 0x0078,
-+ 0x3a85, 0x783b, 0x1800, 0x781b, 0x004a, 0xa284, 0x000f, 0x0079,
-+ 0x3a89, 0x3b18, 0x3ac7, 0x3a93, 0x33f6, 0x3a91, 0x3b18, 0x3a91,
-+ 0x3a91, 0x1078, 0x296b, 0x681c, 0xd0ec, 0x0040, 0x3a9a, 0x6008,
-+ 0xc08d, 0x600a, 0x6920, 0xc185, 0x6922, 0x6800, 0x6006, 0xa005,
-+ 0x00c0, 0x3aa3, 0x6002, 0x6008, 0xc0d4, 0x600a, 0x681c, 0xa084,
-+ 0x000e, 0x00c0, 0x3ab7, 0xb284, 0x0300, 0x0040, 0x3ab3, 0x2009,
-+ 0x94c0, 0x0078, 0x3abc, 0x2009, 0x95d0, 0x0078, 0x3abc, 0x7030,
-+ 0x68ba, 0x7140, 0x70cc, 0xa108, 0x2104, 0x6802, 0x2d0a, 0x715e,
-+ 0xd6dc, 0x00c0, 0x3ac7, 0xc6fc, 0x6eb6, 0x0078, 0x3b18, 0x6eb6,
-+ 0xa684, 0x0060, 0x00c0, 0x3ad1, 0xa684, 0x7fff, 0x68b6, 0x0078,
-+ 0x3b18, 0xd6dc, 0x00c0, 0x3adf, 0xa684, 0x7fff, 0x68b6, 0x6894,
-+ 0x68a6, 0x6898, 0x68aa, 0x1078, 0x4586, 0x0078, 0x3b18, 0xd6ac,
-+ 0x0040, 0x3aeb, 0xa006, 0x1078, 0x4586, 0x2408, 0x2510, 0x69aa,
-+ 0x6aa6, 0x0078, 0x3afb, 0x2408, 0x2510, 0x2700, 0x801b, 0x00c8,
-+ 0x3af2, 0x8000, 0xa084, 0x003f, 0xa108, 0xa291, 0x0000, 0x69aa,
-+ 0x6aa6, 0x1078, 0x4586, 0xd6fc, 0x0040, 0x3b18, 0xa684, 0x7fff,
-+ 0x68b6, 0x2510, 0x2408, 0xd6ac, 0x00c0, 0x3b10, 0x2700, 0x801b,
-+ 0x00c8, 0x3b0b, 0x8000, 0xa084, 0x003f, 0xa108, 0xa291, 0x0000,
-+ 0x6b98, 0x2100, 0xa302, 0x68b2, 0x6b94, 0x2200, 0xa303, 0x68ae,
-+ 0x7000, 0xa086, 0x0030, 0x00c0, 0x29c5, 0x7003, 0x0002, 0x70bc,
-+ 0xa06d, 0x68bc, 0x7042, 0x70b8, 0xa065, 0x68c0, 0x705a, 0x2d00,
-+ 0x704e, 0xad80, 0x0009, 0x7046, 0x007c, 0xa586, 0x8800, 0x00c0,
-+ 0x3b3a, 0x7003, 0x0000, 0x6018, 0x8001, 0x601a, 0x6008, 0xa084,
-+ 0xfbef, 0x600a, 0x0078, 0x40c1, 0x7047, 0x0000, 0xa282, 0x0006,
-+ 0x0050, 0x3b44, 0x1078, 0x296b, 0x2300, 0x0079, 0x3b47, 0x3b4a,
-+ 0x3b5c, 0x3b68, 0x2200, 0x0079, 0x3b4d, 0x3b53, 0x40c1, 0x3b55,
-+ 0x3b53, 0x3ba2, 0x3bf7, 0x1078, 0x296b, 0x7a80, 0xa294, 0x0f00,
-+ 0x1078, 0x3c81, 0x0078, 0x40b7, 0x1078, 0x3b79, 0x0079, 0x3b60,
-+ 0x40c1, 0x3b66, 0x3b66, 0x3ba2, 0x3b66, 0x40c1, 0x1078, 0x296b,
-+ 0x1078, 0x3b79, 0x0079, 0x3b6c, 0x3b74, 0x3b72, 0x3b72, 0x3b74,
-+ 0x3b72, 0x3b74, 0x1078, 0x296b, 0x1078, 0x40db, 0x781b, 0x0078,
-+ 0x007c, 0x7000, 0xa086, 0x0002, 0x00c0, 0x3b8a, 0x1078, 0x3ded,
-+ 0x0078, 0x3b84, 0x1078, 0x4586, 0x6008, 0xa084, 0xfbef, 0x600a,
-+ 0x0078, 0x3b8f, 0x7000, 0xa086, 0x0003, 0x0040, 0x3b82, 0x7003,
-+ 0x0005, 0xb284, 0x0300, 0x0040, 0x3b99, 0x2001, 0x95e0, 0x0078,
-+ 0x3b9b, 0x2001, 0x9612, 0x2068, 0x704e, 0xad80, 0x0009, 0x7046,
-+ 0x2200, 0x007c, 0x7000, 0xa086, 0x0002, 0x00c0, 0x3bb4, 0x70d4,
-+ 0xc0b5, 0x70d6, 0x2c00, 0x70ba, 0x2d00, 0x70be, 0x0078, 0x3bb9,
-+ 0x1078, 0x4586, 0x0078, 0x3bb9, 0x7000, 0xa086, 0x0003, 0x0040,
-+ 0x3bb0, 0x7003, 0x0001, 0x7a80, 0xa294, 0x0f00, 0x789b, 0x0018,
-+ 0x7ca8, 0xa484, 0x001f, 0xa215, 0x2069, 0x94c0, 0xb284, 0x0300,
-+ 0x00c0, 0x3bcd, 0xc2fd, 0x2069, 0x95d0, 0x2d04, 0x2d08, 0x715e,
-+ 0xa06d, 0x0040, 0x3bda, 0x6814, 0xa206, 0x0040, 0x3bdc, 0x6800,
-+ 0x0078, 0x3bce, 0x1078, 0x3c81, 0x6eb4, 0x7e5a, 0x6920, 0xa184,
-+ 0x0c00, 0x0040, 0x3cab, 0x7064, 0xa086, 0x0006, 0x00c0, 0x3bee,
-+ 0x7074, 0xa206, 0x00c0, 0x3bee, 0x7066, 0x707e, 0x681b, 0x0005,
-+ 0xc1ad, 0xc1d4, 0x6922, 0x1078, 0x40d0, 0x0078, 0x3cab, 0x7200,
-+ 0xa286, 0x0002, 0x00c0, 0x3c09, 0x70d4, 0xc0b5, 0x70d6, 0x2c00,
-+ 0x70ba, 0x2d00, 0x70be, 0x0078, 0x3c0d, 0x1078, 0x4586, 0x0078,
-+ 0x3c0d, 0xa286, 0x0003, 0x0040, 0x3c05, 0x7003, 0x0001, 0x7a80,
-+ 0xa294, 0x0f00, 0x789b, 0x0018, 0x7ca8, 0xa484, 0x001f, 0xa215,
-+ 0xb284, 0x0300, 0x00c0, 0x3c1d, 0xc2fd, 0x79a8, 0x79a8, 0xa18c,
-+ 0x00ff, 0x2118, 0x70cc, 0xa168, 0x2d04, 0x2d08, 0x715e, 0xa06d,
-+ 0x0040, 0x3c31, 0x6814, 0xa206, 0x0040, 0x3c5a, 0x6800, 0x0078,
-+ 0x3c25, 0x7003, 0x0005, 0xb284, 0x0300, 0x0040, 0x3c3b, 0x2001,
-+ 0x95e0, 0x0078, 0x3c3d, 0x2001, 0x9612, 0x2068, 0x704e, 0x157e,
-+ 0x20a9, 0x0032, 0x2003, 0x0000, 0x8000, 0x00f0, 0x3c42, 0x157f,
-+ 0xb284, 0x0300, 0x0040, 0x3c4f, 0xc2fc, 0x0078, 0x3c50, 0xc2fd,
-+ 0x6a16, 0xad80, 0x0009, 0x7046, 0x68b7, 0x0700, 0x6823, 0x0800,
-+ 0x6827, 0x0003, 0x6eb4, 0x6920, 0xa184, 0x0c00, 0x0040, 0x3cab,
-+ 0xd0dc, 0x0040, 0x3c76, 0x7064, 0xa086, 0x0004, 0x00c0, 0x3c72,
-+ 0x7074, 0xa206, 0x00c0, 0x3c72, 0x7078, 0xa306, 0x00c0, 0x3c72,
-+ 0x7066, 0x707e, 0x1078, 0x40d7, 0x0078, 0x3cab, 0x681b, 0x0005,
-+ 0xc1ad, 0xc1d4, 0x6922, 0x1078, 0x40d0, 0x707f, 0x0000, 0x0078,
-+ 0x3cab, 0x7003, 0x0005, 0xb284, 0x0300, 0x0040, 0x3c8b, 0x2001,
-+ 0x95e0, 0x0078, 0x3c8d, 0x2001, 0x9612, 0x2068, 0x704e, 0x157e,
-+ 0x20a9, 0x0032, 0x2003, 0x0000, 0x8000, 0x00f0, 0x3c92, 0x157f,
-+ 0xb284, 0x0300, 0x0040, 0x3c9f, 0xc2fc, 0x0078, 0x3ca0, 0xc2fd,
-+ 0x6a16, 0xad80, 0x0009, 0x7046, 0x68b7, 0x0700, 0x6823, 0x0800,
-+ 0x6827, 0x0003, 0x007c, 0xc6ec, 0xa6ac, 0x0060, 0x0040, 0x3cfd,
-+ 0x6b98, 0x6c94, 0x69ac, 0x68b0, 0xa105, 0x00c0, 0x3cd8, 0x7bd2,
-+ 0x7bda, 0x7cd6, 0x7cde, 0xa586, 0x0060, 0x0040, 0x3d02, 0xd6f4,
-+ 0x00c0, 0x3cc3, 0xc6ed, 0xa6b4, 0xb7ff, 0x7e5a, 0x2009, 0x0079,
-+ 0xd69c, 0x0040, 0x3cd0, 0x2009, 0x0078, 0x2019, 0x0000, 0x2320,
-+ 0x791a, 0xd6ec, 0x0040, 0x3d0d, 0x1078, 0x48bd, 0x0078, 0x3d0d,
-+ 0x68b0, 0xa31a, 0x2100, 0xa423, 0x2400, 0xa305, 0x0040, 0x3d04,
-+ 0x7bd2, 0x7bda, 0x7cd6, 0x7cde, 0x68b0, 0xd6f4, 0x00c0, 0x3ce9,
-+ 0xc6ed, 0xc6f4, 0x7e5a, 0x2011, 0x0079, 0xd69c, 0x0040, 0x3cf5,
-+ 0x2011, 0x0078, 0x2019, 0x0000, 0x2320, 0x7a1a, 0xd6ec, 0x0040,
-+ 0x3d0d, 0x1078, 0x48f5, 0x0078, 0x3d0d, 0x2019, 0x0000, 0x2320,
-+ 0x0078, 0x3d04, 0xa6b4, 0xb7ff, 0x7e5a, 0x2009, 0x0079, 0xd69c,
-+ 0x0040, 0x3d0c, 0x2009, 0x0078, 0x791a, 0x68c0, 0x705a, 0x2d00,
-+ 0x704e, 0x68c4, 0x2060, 0x71d4, 0x2001, 0x4e01, 0x2004, 0xd0c4,
-+ 0x00c0, 0x3d62, 0x70d8, 0xa02d, 0x0040, 0x3d3b, 0xd1bc, 0x0040,
-+ 0x3d55, 0x7a80, 0xa294, 0x0f00, 0x70dc, 0xa206, 0x0040, 0x3d2c,
-+ 0x78e0, 0xa504, 0x00c0, 0x3d62, 0x70da, 0xc1bc, 0x71d6, 0x0078,
-+ 0x3d62, 0x2031, 0x0001, 0x852c, 0x0048, 0x3d3a, 0x8633, 0x8210,
-+ 0x0078, 0x3d33, 0x007c, 0x7de0, 0xa594, 0xff00, 0x0040, 0x3d48,
-+ 0x2011, 0x0008, 0x852f, 0x1078, 0x3d31, 0x8637, 0x0078, 0x3d4a,
-+ 0x1078, 0x3d31, 0x8217, 0x7880, 0xa084, 0x0f00, 0xa206, 0x0040,
-+ 0x3d62, 0x72de, 0x76da, 0x0078, 0x3d62, 0x7a80, 0xa294, 0x0f00,
-+ 0x70dc, 0xa236, 0x0040, 0x3d52, 0x78e0, 0xa534, 0x0040, 0x3d52,
-+ 0xc1bd, 0x71d6, 0xd1b4, 0x00c0, 0x29c1, 0x2300, 0xa405, 0x0040,
-+ 0x29c1, 0x70a4, 0xa086, 0x0001, 0x00c0, 0x2a0b, 0x007c, 0x6020,
-+ 0xa005, 0x0040, 0x3d7d, 0x8001, 0x6022, 0x6008, 0xa085, 0x0008,
-+ 0x600a, 0x700f, 0x0100, 0x702c, 0x6026, 0x007c, 0xa006, 0x1078,
-+ 0x4586, 0x7000, 0xa086, 0x0002, 0x0040, 0x3d8b, 0x7064, 0xa086,
-+ 0x0005, 0x00c0, 0x3d95, 0x682b, 0x0000, 0x6817, 0x0000, 0x681b,
-+ 0x0001, 0x6823, 0x0040, 0x681f, 0x0100, 0x7000, 0xa084, 0x000f,
-+ 0x0079, 0x3d9a, 0x29c5, 0x3daa, 0x3da4, 0x3dcc, 0x3db4, 0x29c5,
-+ 0x3da2, 0x3da2, 0x1078, 0x296b, 0x1078, 0x3dd7, 0x1078, 0x3dd0,
-+ 0x0078, 0x3db0, 0x1078, 0x3dd7, 0x705c, 0x2060, 0x6800, 0x6002,
-+ 0x1078, 0x202c, 0x0078, 0x29c5, 0x7064, 0x7067, 0x0000, 0x7083,
-+ 0x0000, 0x0079, 0x3dbb, 0x3dc8, 0x3dc8, 0x3dc3, 0x3dc3, 0x3dc3,
-+ 0x3dc8, 0x3dc3, 0x3dc8, 0x77d4, 0xc7dd, 0x77d6, 0x0079, 0x2f35,
-+ 0x7067, 0x0000, 0x0078, 0x29c5, 0x681b, 0x0000, 0x0078, 0x36c8,
-+ 0x6800, 0xa005, 0x00c0, 0x3dd5, 0x6002, 0x6006, 0x007c, 0x6410,
-+ 0x84ff, 0x0040, 0x3de9, 0x2009, 0x4e02, 0x2104, 0x8001, 0x200a,
-+ 0x8421, 0x6412, 0x00c0, 0x3de9, 0x2021, 0x4e04, 0x2404, 0xc0a5,
-+ 0x2022, 0x6008, 0xc0a4, 0x600a, 0x007c, 0x6018, 0xa005, 0x0040,
-+ 0x3df3, 0x8001, 0x601a, 0x007c, 0x1078, 0x4383, 0x681b, 0x0018,
-+ 0x0078, 0x3e34, 0x1078, 0x4383, 0x681b, 0x0019, 0x0078, 0x3e34,
-+ 0x1078, 0x4383, 0x681b, 0x001a, 0x0078, 0x3e34, 0x1078, 0x4383,
-+ 0x681b, 0x0003, 0x0078, 0x3e34, 0x7774, 0x1078, 0x41fe, 0x7178,
-+ 0xa18c, 0x00ff, 0x3210, 0xa294, 0x0300, 0x0040, 0x3e1b, 0xa1e8,
-+ 0x93c0, 0x0078, 0x3e1d, 0xa1e8, 0x94d0, 0x2d04, 0x2d08, 0x2068,
-+ 0xa005, 0x00c0, 0x3e26, 0x707e, 0x0078, 0x29c5, 0x6814, 0x7274,
-+ 0xa206, 0x0040, 0x3e2e, 0x6800, 0x0078, 0x3e1e, 0x6800, 0x200a,
-+ 0x681b, 0x0005, 0x707f, 0x0000, 0x1078, 0x3dd7, 0x6820, 0xd084,
-+ 0x00c0, 0x3e3c, 0x1078, 0x3dd0, 0x1078, 0x3ded, 0x681f, 0x0000,
-+ 0x6823, 0x0020, 0x1078, 0x202c, 0x0078, 0x29c5, 0xa282, 0x0003,
-+ 0x00c0, 0x40b7, 0x7da8, 0xa5ac, 0x00ff, 0x7e5a, 0x7ea8, 0xa6b4,
-+ 0x00ff, 0x6920, 0xc1bd, 0x6922, 0xd1c4, 0x0040, 0x3ea1, 0xc1c4,
-+ 0x6922, 0xa6b4, 0x00ff, 0x0040, 0x3e8e, 0xa682, 0x000c, 0x0048,
-+ 0x3e65, 0x0040, 0x3e65, 0x2031, 0x000c, 0x2500, 0xa086, 0x000a,
-+ 0x0040, 0x3e6c, 0x852b, 0x852b, 0x1078, 0x4190, 0x0040, 0x3e74,
-+ 0x1078, 0x3f6f, 0x0078, 0x3e97, 0x1078, 0x414b, 0x0c7e, 0x2960,
-+ 0x6004, 0xa084, 0xfff5, 0x6006, 0x1078, 0x3fa5, 0x0c7f, 0x6920,
-+ 0xc1c5, 0x6922, 0x7e58, 0xc695, 0x7e5a, 0xd6d4, 0x00c0, 0x3e8b,
-+ 0x781b, 0x0064, 0x007c, 0x781b, 0x0078, 0x007c, 0x0c7e, 0x2960,
-+ 0x6004, 0xa084, 0xfff5, 0x6006, 0x1078, 0x3fa5, 0x0c7f, 0x7e58,
-+ 0xd6d4, 0x00c0, 0x3e9e, 0x781b, 0x0067, 0x007c, 0x781b, 0x0079,
-+ 0x007c, 0x0c7e, 0x7058, 0x2060, 0x6100, 0xd1e4, 0x0040, 0x3eea,
-+ 0x6208, 0x8217, 0xa294, 0x00ff, 0xa282, 0x000c, 0x0048, 0x3eb4,
-+ 0x0040, 0x3eb4, 0x2011, 0x000c, 0x2600, 0xa202, 0x00c8, 0x3eb9,
-+ 0x2230, 0x6208, 0xa294, 0x00ff, 0x2001, 0x4e05, 0x2004, 0xd0e4,
-+ 0x00c0, 0x3ece, 0x78ec, 0xd0e4, 0x0040, 0x3ece, 0xa282, 0x000a,
-+ 0x00c8, 0x3ed4, 0x2011, 0x000a, 0x0078, 0x3ed4, 0xa282, 0x000c,
-+ 0x00c8, 0x3ed4, 0x2011, 0x000c, 0x2200, 0xa502, 0x00c8, 0x3ed9,
-+ 0x2228, 0x1078, 0x414f, 0x2500, 0xa086, 0x000a, 0x0040, 0x3ee2,
-+ 0x852b, 0x852b, 0x1078, 0x4190, 0x0040, 0x3eea, 0x1078, 0x3f6f,
-+ 0x0078, 0x3eee, 0x1078, 0x414b, 0x1078, 0x3fa5, 0x7858, 0xc095,
-+ 0x785a, 0x0c7f, 0x781b, 0x0078, 0x007c, 0x0c7e, 0x2960, 0x6000,
-+ 0xd0e4, 0x00c0, 0x3f0b, 0xa084, 0x0040, 0x00c0, 0x3f05, 0x6104,
-+ 0xa18c, 0xfff5, 0x6106, 0x0c7f, 0x007c, 0x2011, 0x0032, 0x2019,
-+ 0x0000, 0x0078, 0x3f36, 0x68a0, 0xd0cc, 0x00c0, 0x3f05, 0x6208,
-+ 0xa294, 0x00ff, 0x2001, 0x4e05, 0x2004, 0xd0e4, 0x00c0, 0x3f24,
-+ 0x78ec, 0xd0e4, 0x0040, 0x3f24, 0xa282, 0x000b, 0x00c8, 0x3f24,
-+ 0x2011, 0x000a, 0x0078, 0x3f2a, 0xa282, 0x000c, 0x00c8, 0x3f2a,
-+ 0x2011, 0x000c, 0x6308, 0x831f, 0xa39c, 0x00ff, 0xa382, 0x000c,
-+ 0x0048, 0x3f36, 0x0040, 0x3f36, 0x2019, 0x000c, 0x78ab, 0x0001,
-+ 0x78ab, 0x0003, 0x78ab, 0x0001, 0x7aaa, 0x7baa, 0xa8c0, 0x0005,
-+ 0x6820, 0xc0c5, 0x6822, 0x70d4, 0xd0b4, 0x0040, 0x3f52, 0xc0b4,
-+ 0x70d6, 0x70b8, 0xa065, 0x6008, 0xa084, 0xfbef, 0x600a, 0x6018,
-+ 0x8001, 0x601a, 0x0c7f, 0x007c, 0x0c7e, 0x2960, 0x6104, 0xa18c,
-+ 0xfff5, 0x6106, 0x2011, 0x0032, 0x2019, 0x0000, 0x0078, 0x3f60,
-+ 0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab, 0x0001, 0x7aaa, 0x7baa,
-+ 0xa8c0, 0x0005, 0x6820, 0xc0c5, 0x6822, 0x0c7f, 0x007c, 0x0c7e,
-+ 0x7158, 0x2160, 0x2018, 0xa08c, 0x0020, 0x0040, 0x3f78, 0xc0ac,
-+ 0x2008, 0xa084, 0xfff0, 0xa635, 0x7e86, 0x6018, 0x789a, 0x7eae,
-+ 0x6612, 0x78a4, 0xa084, 0xfff0, 0xa18c, 0x000f, 0xa105, 0xc0f4,
-+ 0xa39c, 0x0020, 0x0040, 0x3f8e, 0xa085, 0x4000, 0xc0fc, 0xd0b4,
-+ 0x00c0, 0x3f93, 0xc0fd, 0x78a6, 0x6016, 0x788a, 0xa6b4, 0x000f,
-+ 0x8637, 0x8204, 0x8004, 0xa084, 0x00ff, 0xa605, 0x600e, 0x6004,
-+ 0xa084, 0xfff5, 0x6006, 0x0c7f, 0x007c, 0x0c7e, 0x7058, 0x2060,
-+ 0x6018, 0x789a, 0x78a4, 0xa084, 0xfff0, 0x78a6, 0x6012, 0x7884,
-+ 0xa084, 0xfff0, 0x7886, 0x600c, 0xa084, 0x00ff, 0x600e, 0x0c7f,
-+ 0x007c, 0xa282, 0x0002, 0x00c0, 0x40b7, 0x7aa8, 0x6920, 0xc1bd,
-+ 0x6922, 0xd1cc, 0x0040, 0x3ff4, 0xc1cc, 0x6922, 0xa294, 0x00ff,
-+ 0xa282, 0x0002, 0x00c8, 0x40b7, 0x1078, 0x4044, 0x1078, 0x3fa5,
-+ 0xa980, 0x0001, 0x200c, 0x1078, 0x41fa, 0x1078, 0x3ef5, 0x88ff,
-+ 0x0040, 0x3fea, 0x789b, 0x0060, 0x2800, 0x78aa, 0x7e58, 0xc695,
-+ 0x7e5a, 0xd6d4, 0x00c0, 0x3fe7, 0x781b, 0x0064, 0x007c, 0x781b,
-+ 0x0078, 0x007c, 0x7e58, 0xd6d4, 0x00c0, 0x3ff1, 0x781b, 0x0067,
-+ 0x007c, 0x781b, 0x0079, 0x007c, 0xa282, 0x0002, 0x00c8, 0x3ffc,
-+ 0xa284, 0x0001, 0x0040, 0x4005, 0x7158, 0xa188, 0x0000, 0x210c,
-+ 0xd1ec, 0x00c0, 0x4005, 0x2011, 0x0000, 0x1078, 0x412c, 0x1078,
-+ 0x4044, 0x1078, 0x3fa5, 0x7858, 0xc095, 0x785a, 0x781b, 0x0078,
-+ 0x007c, 0x0c7e, 0x027e, 0x2960, 0x6000, 0x2011, 0x0001, 0xd0ec,
-+ 0x00c0, 0x4025, 0xa084, 0x0080, 0x00c0, 0x4023, 0xc1a4, 0x6106,
-+ 0xa006, 0x0078, 0x4041, 0x2011, 0x0000, 0x78ab, 0x0001, 0x78ab,
-+ 0x0002, 0x78ab, 0x0003, 0x7aaa, 0xa8c0, 0x0004, 0x70d4, 0xd0b4,
-+ 0x0040, 0x403d, 0xc0b4, 0x70d6, 0x70b8, 0xa065, 0x6008, 0xa084,
-+ 0xfbef, 0x600a, 0x6018, 0x8001, 0x601a, 0x6820, 0xa085, 0x0200,
-+ 0x6822, 0x027f, 0x0c7f, 0x007c, 0x0c7e, 0x7058, 0x2060, 0x82ff,
-+ 0x0040, 0x404c, 0x2011, 0x0040, 0x6018, 0xa080, 0x0002, 0x789a,
-+ 0x78a4, 0xa084, 0xffbf, 0xa205, 0xc0fc, 0xd0b4, 0x00c0, 0x4059,
-+ 0xc0fd, 0x78a6, 0x6016, 0x788a, 0x6004, 0xc0a4, 0x6006, 0x0c7f,
-+ 0x007c, 0x007e, 0x7000, 0xa086, 0x0003, 0x0040, 0x406a, 0x007f,
-+ 0x0078, 0x406d, 0x007f, 0x0078, 0x40b4, 0xd6ac, 0x0040, 0x40b4,
-+ 0x7888, 0xa084, 0x0040, 0x0040, 0x40b4, 0x7bb8, 0xa384, 0x003f,
-+ 0x831b, 0x00c8, 0x407c, 0x8000, 0xa005, 0x0040, 0x4091, 0x831b,
-+ 0x00c8, 0x4085, 0x8001, 0x0040, 0x40b1, 0xd6f4, 0x0040, 0x4091,
-+ 0x78b8, 0x801b, 0x00c8, 0x408d, 0x8000, 0xa084, 0x003f, 0x00c0,
-+ 0x40b1, 0xc6f4, 0x7e5a, 0x79d8, 0x7adc, 0x2001, 0x0001, 0xa108,
-+ 0x00c8, 0x409c, 0xa291, 0x0000, 0x79d2, 0x79da, 0x7ad6, 0x7ade,
-+ 0x1078, 0x49c3, 0x781b, 0x0076, 0xb284, 0x0300, 0x0040, 0x40ac,
-+ 0x2001, 0x0000, 0x0078, 0x40ae, 0x2001, 0x0001, 0x1078, 0x484b,
-+ 0x007c, 0x781b, 0x0076, 0x007c, 0x781b, 0x0079, 0x007c, 0x1078,
-+ 0x40df, 0x781b, 0x0078, 0x007c, 0x1078, 0x40c8, 0x781b, 0x0078,
-+ 0x007c, 0x6827, 0x0002, 0x1078, 0x40d0, 0x781b, 0x0078, 0x007c,
-+ 0x2001, 0x0005, 0x0078, 0x40e1, 0x2001, 0x000c, 0x0078, 0x40e1,
-+ 0x6820, 0xc0d5, 0x6822, 0x2001, 0x0006, 0x0078, 0x40e1, 0x2001,
-+ 0x000d, 0x0078, 0x40e1, 0x2001, 0x0009, 0x0078, 0x40e1, 0x2001,
-+ 0x0007, 0x789b, 0x007e, 0x78aa, 0xc69d, 0x7e5a, 0x70d4, 0xd0b4,
-+ 0x0040, 0x40f7, 0xc0b4, 0x70d6, 0x0c7e, 0x70b8, 0xa065, 0x6008,
-+ 0xa084, 0xfbef, 0x600a, 0x6018, 0x8001, 0x601a, 0x0c7f, 0x007c,
-+ 0x077e, 0x873f, 0xa7bc, 0x000f, 0x873b, 0x873b, 0x8703, 0x017e,
-+ 0xb28c, 0x0300, 0x0040, 0x4108, 0xa0e0, 0x52c0, 0x0078, 0x410a,
-+ 0xa0e0, 0x5340, 0x017f, 0xa7b8, 0x0020, 0x7f9a, 0x79a4, 0xa184,
-+ 0x000f, 0x0040, 0x411a, 0xa184, 0xfff0, 0x78a6, 0x6012, 0x6004,
-+ 0xc09d, 0x6006, 0x8738, 0x8738, 0x7f9a, 0x79a4, 0xa184, 0x0040,
-+ 0x0040, 0x412a, 0xa184, 0xffbf, 0xc0fd, 0x78a6, 0x6016, 0x6004,
-+ 0xc0a5, 0x6006, 0x077f, 0x007c, 0x789b, 0x0010, 0x78ab, 0x0001,
-+ 0x78ab, 0x0002, 0x78ab, 0x0003, 0x7aaa, 0x789b, 0x0060, 0x78ab,
-+ 0x0004, 0x70d4, 0xd0b4, 0x0040, 0x414a, 0xc0b4, 0x70d6, 0x0c7e,
-+ 0x70b8, 0xa065, 0x6008, 0xa084, 0xfbef, 0x600a, 0x6018, 0x8001,
-+ 0x601a, 0x0c7f, 0x007c, 0x2031, 0x0000, 0x2029, 0x0032, 0x789b,
-+ 0x0010, 0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab, 0x0001, 0x7daa,
-+ 0x7eaa, 0x789b, 0x0060, 0x78ab, 0x0005, 0x70d4, 0xd0b4, 0x0040,
-+ 0x416e, 0xc0b4, 0x70d6, 0x0c7e, 0x70b8, 0xa065, 0x6008, 0xa084,
-+ 0xfbef, 0x600a, 0x6018, 0x8001, 0x601a, 0x0c7f, 0x007c, 0x157e,
-+ 0x8007, 0xa084, 0x00ff, 0x8003, 0x8003, 0xa080, 0x0020, 0x789a,
-+ 0x79a4, 0xa18c, 0xfff0, 0x2021, 0x41e3, 0x2019, 0x0011, 0x20a9,
-+ 0x000e, 0x2011, 0x0032, 0x2404, 0xa084, 0xfff0, 0xa106, 0x0040,
-+ 0x418e, 0x8420, 0x2300, 0xa210, 0x00f0, 0x4183, 0x157f, 0x007c,
-+ 0x157e, 0x2001, 0x4e05, 0x2004, 0xd0e4, 0x00c0, 0x41c1, 0x2021,
-+ 0x41f1, 0x20a9, 0x0009, 0x2011, 0x0028, 0xa582, 0x0019, 0x0040,
-+ 0x41d7, 0x0048, 0x41d7, 0x8420, 0x95a9, 0x2011, 0x0032, 0xa582,
-+ 0x0032, 0x0040, 0x41d7, 0x0048, 0x41d7, 0x8420, 0x95a9, 0x2019,
-+ 0x000a, 0x2011, 0x0064, 0x2200, 0xa502, 0x0040, 0x41d7, 0x0048,
-+ 0x41d7, 0x8420, 0x2300, 0xa210, 0x00f0, 0x41b3, 0x157f, 0x0078,
-+ 0x41d5, 0x2021, 0x41e3, 0x2019, 0x0011, 0x20a9, 0x000e, 0x2011,
-+ 0x0032, 0x2200, 0xa502, 0x0040, 0x41d7, 0x0048, 0x41d7, 0x8420,
-+ 0x2300, 0xa210, 0x00f0, 0x41c9, 0x157f, 0xa006, 0x007c, 0x157f,
-+ 0xa582, 0x0064, 0x00c8, 0x41e0, 0x7808, 0xa085, 0x0070, 0x780a,
-+ 0x2404, 0xa005, 0x007c, 0x1209, 0x3002, 0x3202, 0x4203, 0x4403,
-+ 0x5404, 0x5604, 0x6605, 0x6805, 0x7806, 0x7a06, 0x0c07, 0x0c07,
-+ 0x0e07, 0x10e1, 0x330a, 0x5805, 0x5a05, 0x6a06, 0x6c06, 0x7c07,
-+ 0x7e07, 0x0e00, 0x789b, 0x0010, 0xa046, 0x007c, 0xa784, 0x0f00,
-+ 0x800b, 0xa784, 0x001f, 0x8003, 0x8003, 0x8003, 0x8003, 0xa105,
-+ 0xd7fc, 0x0040, 0x420f, 0xa0e0, 0x73c0, 0x0078, 0x4211, 0xa0e0,
-+ 0x53c0, 0x007c, 0x0e7e, 0x0f7e, 0xd084, 0x0040, 0x421f, 0x2079,
-+ 0x0100, 0x2009, 0x4e80, 0x2071, 0x4e80, 0x0078, 0x422f, 0x2009,
-+ 0x4e40, 0x2071, 0x4e40, 0x2001, 0x4e04, 0x2004, 0xd0ec, 0x0040,
-+ 0x422d, 0x2079, 0x0100, 0x0078, 0x422f, 0x2079, 0x0200, 0x2091,
-+ 0x8000, 0x2104, 0xa084, 0x000f, 0x0079, 0x4236, 0x4240, 0x4240,
-+ 0x4240, 0x4240, 0x4240, 0x4240, 0x423e, 0x423e, 0x1078, 0x296b,
-+ 0x69b4, 0xc1f5, 0xa18c, 0xff9f, 0x69b6, 0xa005, 0x0040, 0x428f,
-+ 0x7858, 0xa084, 0xff9f, 0xa085, 0x6000, 0x785a, 0x7828, 0xa086,
-+ 0x1814, 0x00c0, 0x428f, 0x784b, 0x0004, 0x7848, 0xa084, 0x0004,
-+ 0x00c0, 0x4255, 0x784b, 0x0008, 0x7848, 0xa084, 0x0008, 0x00c0,
-+ 0x425c, 0x7830, 0xd0bc, 0x00c0, 0x428f, 0x007e, 0x2001, 0x4e04,
-+ 0x2004, 0xd0ec, 0x007f, 0x0040, 0x4271, 0xb284, 0x0300, 0x0078,
-+ 0x4273, 0xb284, 0x0400, 0x0040, 0x4279, 0x0018, 0x428f, 0x0078,
-+ 0x427b, 0x0028, 0x428f, 0x79e4, 0xa184, 0x0030, 0x0040, 0x428f,
-+ 0x78ec, 0xa084, 0x0003, 0x0040, 0x428f, 0x681c, 0xd0ac, 0x00c0,
-+ 0x428d, 0x1078, 0x4319, 0x0078, 0x428f, 0x781b, 0x00f9, 0x0f7f,
-+ 0x0e7f, 0x007c, 0x0c7e, 0x2001, 0x4e01, 0x2004, 0xd0ac, 0x00c0,
-+ 0x430b, 0x6814, 0x8007, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003,
-+ 0xb28c, 0x0300, 0x0040, 0x42a8, 0xa0e0, 0x52c0, 0x0078, 0x42aa,
-+ 0xa0e0, 0x5340, 0x6004, 0xa084, 0x000a, 0x00c0, 0x430b, 0x6108,
-+ 0xa194, 0xff00, 0x0040, 0x430b, 0xa18c, 0x00ff, 0x2001, 0x000a,
-+ 0xa106, 0x0040, 0x42d6, 0x2001, 0x000c, 0xa106, 0x0040, 0x42da,
-+ 0x2001, 0x0012, 0xa106, 0x0040, 0x42de, 0x2001, 0x0014, 0xa106,
-+ 0x0040, 0x42e2, 0x2001, 0x0019, 0xa106, 0x0040, 0x42e6, 0x2001,
-+ 0x0032, 0xa106, 0x0040, 0x42ea, 0x0078, 0x42ee, 0x2009, 0x000c,
-+ 0x0078, 0x42f0, 0x2009, 0x0012, 0x0078, 0x42f0, 0x2009, 0x0014,
-+ 0x0078, 0x42f0, 0x2009, 0x0019, 0x0078, 0x42f0, 0x2009, 0x0020,
-+ 0x0078, 0x42f0, 0x2009, 0x003f, 0x0078, 0x42f0, 0x2011, 0x0000,
-+ 0x2100, 0xa205, 0x600a, 0x6004, 0xa085, 0x0002, 0x6006, 0x2061,
-+ 0x4e00, 0x6004, 0xd0bc, 0x0040, 0x430b, 0x6814, 0xd0fc, 0x00c0,
-+ 0x4306, 0x60ea, 0x2061, 0x4e40, 0x0078, 0x4309, 0x60ee, 0x2061,
-+ 0x4e80, 0x601f, 0x800f, 0x0c7f, 0x007c, 0x781b, 0x0079, 0x007c,
-+ 0x781b, 0x0078, 0x007c, 0x781b, 0x0067, 0x007c, 0x781b, 0x0064,
-+ 0x007c, 0x2009, 0x4e19, 0x210c, 0xa186, 0x0000, 0x0040, 0x432b,
-+ 0xa186, 0x0001, 0x0040, 0x432e, 0x701f, 0x000b, 0x7067, 0x0001,
-+ 0x781b, 0x0047, 0x007c, 0x781b, 0x00f0, 0x007c, 0x701f, 0x000a,
-+ 0x007c, 0x2009, 0x4e19, 0x210c, 0xa186, 0x0000, 0x0040, 0x4346,
-+ 0xa186, 0x0001, 0x0040, 0x4343, 0x701f, 0x000b, 0x7067, 0x0001,
-+ 0x781b, 0x0047, 0x007c, 0x701f, 0x000a, 0x007c, 0x781b, 0x00ef,
-+ 0x007c, 0x781b, 0x00f9, 0x007c, 0x781b, 0x00f8, 0x007c, 0x781b,
-+ 0x00c9, 0x007c, 0x781b, 0x00c8, 0x007c, 0x6818, 0xd0fc, 0x0040,
-+ 0x435b, 0x681b, 0x001d, 0x7067, 0x0001, 0x781b, 0x0047, 0x007c,
-+ 0x7830, 0xa084, 0x00c0, 0x00c0, 0x4382, 0x7808, 0xc08c, 0x780a,
-+ 0x0005, 0x0005, 0x0005, 0x0005, 0x78ec, 0xa084, 0x0021, 0x00c0,
-+ 0x437f, 0x2001, 0x4e05, 0x2004, 0xd0e4, 0x00c0, 0x437d, 0x7804,
-+ 0xa084, 0xff1f, 0xa085, 0x00e0, 0x7806, 0xa006, 0x007c, 0x7808,
-+ 0xc08d, 0x780a, 0x007c, 0x7808, 0xc08d, 0x780a, 0x007c, 0x7830,
-+ 0xa084, 0x0040, 0x00c0, 0x4387, 0x2001, 0x4e04, 0x2004, 0xd0ec,
-+ 0x0040, 0x4396, 0xb284, 0x0300, 0x0078, 0x4398, 0xb284, 0x0400,
-+ 0x0040, 0x439e, 0x0098, 0x43a2, 0x0078, 0x43a0, 0x00a8, 0x43a2,
-+ 0x78ac, 0x007c, 0x7808, 0xa084, 0xfffd, 0x780a, 0x0005, 0x0005,
-+ 0x0005, 0x0005, 0x78ec, 0xa084, 0x0021, 0x0040, 0x43c5, 0x007e,
-+ 0x2001, 0x4e04, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x43bb, 0xb284,
-+ 0x0300, 0x0078, 0x43bd, 0xb284, 0x0400, 0x0040, 0x43c3, 0x0098,
-+ 0x43bf, 0x0078, 0x43c5, 0x00a8, 0x43c3, 0x78ac, 0x007e, 0x7808,
-+ 0xa085, 0x0002, 0x780a, 0x007f, 0x007c, 0xa784, 0x0001, 0x00c0,
-+ 0x3770, 0xa784, 0x0070, 0x0040, 0x43dd, 0x0c7e, 0x2d60, 0x2f68,
-+ 0x1078, 0x28df, 0x2d78, 0x2c68, 0x0c7f, 0xa784, 0x0008, 0x0040,
-+ 0x43ea, 0x784b, 0x0008, 0x78ec, 0xa084, 0x0003, 0x0040, 0x3770,
-+ 0x0078, 0x430d, 0xa784, 0x0004, 0x0040, 0x4419, 0x78b8, 0xa084,
-+ 0x4001, 0x0040, 0x4419, 0x784b, 0x0008, 0x78ec, 0xa084, 0x0003,
-+ 0x0040, 0x3770, 0x78e4, 0xa084, 0x0007, 0xa086, 0x0001, 0x00c0,
-+ 0x4419, 0x78c0, 0xa685, 0x4800, 0x2030, 0x7e5a, 0x781b, 0x00f9,
-+ 0x007c, 0x784b, 0x0008, 0x6818, 0xd0fc, 0x0040, 0x4416, 0x681b,
-+ 0x0015, 0xd6f4, 0x0040, 0x4416, 0x681b, 0x0007, 0x1078, 0x4319,
-+ 0x007c, 0x681b, 0x0003, 0x7858, 0xa084, 0x3f00, 0x681e, 0x682f,
-+ 0x0000, 0x6833, 0x0000, 0x784b, 0x0008, 0x78ec, 0xa084, 0x0003,
-+ 0x0040, 0x3066, 0x007e, 0x2001, 0x4e04, 0x2004, 0xd0ec, 0x007f,
-+ 0x0040, 0x4436, 0xb284, 0x0300, 0x0078, 0x4438, 0xb284, 0x0400,
-+ 0x0040, 0x443e, 0x0018, 0x29c1, 0x0078, 0x4440, 0x0028, 0x29c1,
-+ 0x0078, 0x40bc, 0x6b14, 0x8307, 0xa084, 0x000f, 0x8003, 0x8003,
-+ 0x8003, 0xd3fc, 0x0040, 0x4450, 0xa080, 0x5340, 0x0078, 0x4452,
-+ 0xa080, 0x52c0, 0x2060, 0x2048, 0x705a, 0x2a60, 0x007c, 0x0020,
-+ 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000,
-+ 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000,
-+ 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000,
-+ 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000,
-+ 0x0020, 0x0062, 0x0009, 0x0014, 0x0014, 0x9848, 0x0014, 0x0014,
-+ 0x9914, 0x98fd, 0x0014, 0x0014, 0x0080, 0x00ff, 0x0100, 0x0402,
-+ 0x2008, 0xf880, 0x0018, 0xa20a, 0x0014, 0x300b, 0xa20c, 0x0014,
-+ 0x2500, 0x0013, 0x2500, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010,
-+ 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010,
-+ 0x0010, 0xa200, 0x3806, 0x7102, 0x805f, 0x9481, 0x8839, 0x20c4,
-+ 0x0864, 0xa856, 0x3008, 0x28c1, 0x9d1b, 0xa201, 0x300c, 0x2847,
-+ 0x8161, 0x846a, 0x8000, 0x84a4, 0x1856, 0x883a, 0xa808, 0x28e2,
-+ 0x9ccb, 0xa8f3, 0x0864, 0xa844, 0x300c, 0xa801, 0x3008, 0x28e1,
-+ 0x9ccb, 0x2021, 0xa81d, 0xa205, 0x870c, 0xd8de, 0x64a0, 0x6de0,
-+ 0x6fc0, 0x63a4, 0x6c80, 0x0212, 0xa205, 0x883d, 0x7942, 0x8020,
-+ 0xa4a1, 0x882b, 0x1814, 0x883b, 0x80df, 0x94a1, 0x7027, 0x85f2,
-+ 0xa737, 0xa532, 0xf003, 0x8576, 0x8677, 0xa816, 0x883e, 0xa814,
-+ 0x2001, 0xa812, 0xa204, 0x64c0, 0x6de0, 0x67a0, 0x6fc0, 0x7942,
-+ 0x8020, 0xa4a1, 0x1814, 0x80df, 0x94a1, 0x883b, 0x7023, 0x8576,
-+ 0x8677, 0xa802, 0x7861, 0x883e, 0x206b, 0x28c1, 0x9d1b, 0x2044,
-+ 0x2103, 0x20a2, 0x2081, 0xa8c3, 0xa207, 0x0904, 0xa20e, 0xa809,
-+ 0xa203, 0x8000, 0x85a4, 0x1872, 0x879a, 0x883c, 0x1fe2, 0xf601,
-+ 0xa208, 0x856e, 0x866f, 0x7161, 0x0014, 0x0704, 0x3008, 0x9ccb,
-+ 0x0014, 0xa202, 0x8000, 0x85a4, 0x3009, 0x84a8, 0x19e2, 0xf844,
-+ 0x856e, 0x883f, 0x08e6, 0xa8f5, 0xf861, 0xa8ea, 0xf801, 0x0014,
-+ 0xf881, 0x0016, 0x85b2, 0x80f0, 0x9532, 0xfaa2, 0x1de2, 0x0014,
-+ 0x8532, 0xf221, 0x0014, 0x1de2, 0x84a8, 0xd6e0, 0x1fe6, 0x0014,
-+ 0x3008, 0x8000, 0x284a, 0x1011, 0xa8fc, 0x3008, 0x9d33, 0x8000,
-+ 0xa000, 0x2802, 0x1011, 0xa8fd, 0x9d39, 0xa8bd, 0x3008, 0x9d33,
-+ 0x283b, 0x1011, 0xa8fd, 0xa209, 0x7102, 0x805f, 0x9481, 0x0017,
-+ 0x300c, 0xa209, 0x8000, 0x85a4, 0x1de2, 0xa209, 0xdac1, 0x0014,
-+ 0x0210, 0xa801, 0x0014, 0x26e0, 0x873a, 0xfaa3, 0x19f2, 0x26e0,
-+ 0x18f2, 0x0014, 0xa20b, 0x0014, 0xa20d, 0x3806, 0x0210, 0x9d25,
-+ 0x0704, 0xa206, 0x6865, 0x817e, 0x842a, 0x1dc1, 0x8823, 0x0016,
-+ 0x6042, 0x8008, 0xa8fa, 0x8000, 0x84a4, 0x8160, 0x842a, 0xf021,
-+ 0x3008, 0x84a8, 0x11d6, 0x7042, 0x20dd, 0x0011, 0x20d4, 0x8822,
-+ 0x0016, 0x7944, 0x8421, 0xa020, 0xa532, 0x84a1, 0x0016, 0x7944,
-+ 0x8421, 0xa0df, 0x9532, 0x84a1, 0x0016, 0x0000, 0x127e, 0x70d4,
-+ 0xa084, 0x4600, 0x8004, 0x2090, 0x7204, 0x7008, 0xc09c, 0xa205,
-+ 0x00c0, 0x45a2, 0x720c, 0x82ff, 0x0040, 0x459d, 0x8aff, 0x00c0,
-+ 0x45a2, 0x7200, 0xd284, 0x00c0, 0x45a2, 0x7003, 0x0008, 0x127f,
-+ 0x2000, 0x007c, 0x7000, 0xa084, 0x0003, 0x7002, 0xc69c, 0xd084,
-+ 0x0040, 0x45e5, 0x7108, 0x0005, 0x7008, 0xa106, 0x00c0, 0x45aa,
-+ 0xa184, 0x0003, 0x0040, 0x4616, 0xa184, 0x01e0, 0x00c0, 0x4616,
-+ 0xd1f4, 0x00c0, 0x45aa, 0xa184, 0x3000, 0xa086, 0x1000, 0x0040,
-+ 0x45aa, 0x2011, 0x0180, 0x710c, 0x8211, 0x0040, 0x45cf, 0x7008,
-+ 0xd0f4, 0x00c0, 0x45aa, 0x700c, 0xa106, 0x0040, 0x45c4, 0x7007,
-+ 0x0012, 0x7108, 0x0005, 0x7008, 0xa106, 0x00c0, 0x45d1, 0xa184,
-+ 0x0003, 0x0040, 0x4616, 0xd194, 0x0040, 0x45d1, 0xd1f4, 0x0040,
-+ 0x4616, 0x7007, 0x0002, 0x0078, 0x45aa, 0x7108, 0xd1fc, 0x0040,
-+ 0x45f0, 0x1078, 0x4769, 0x8aff, 0x0040, 0x458c, 0x0078, 0x45e5,
-+ 0x700c, 0xa08c, 0x03ff, 0x0040, 0x461b, 0x7004, 0xd084, 0x0040,
-+ 0x460d, 0x7014, 0xa005, 0x00c0, 0x4609, 0x7010, 0x7310, 0xa306,
-+ 0x00c0, 0x45fd, 0x2300, 0xa005, 0x0040, 0x460d, 0xa102, 0x00c8,
-+ 0x45e5, 0x7007, 0x0010, 0x0078, 0x4616, 0x8aff, 0x0040, 0x461b,
-+ 0x1078, 0x4970, 0x00c0, 0x4610, 0x0040, 0x45e5, 0x1078, 0x46b4,
-+ 0x127f, 0x2000, 0x007c, 0x7204, 0x7108, 0xc19c, 0x8103, 0x00c8,
-+ 0x462a, 0x7007, 0x0002, 0x0078, 0x461b, 0x7003, 0x0008, 0x127f,
-+ 0x2000, 0x007c, 0xa205, 0x00c0, 0x4616, 0x7003, 0x0008, 0x127f,
-+ 0x2000, 0x007c, 0x6428, 0x84ff, 0x0040, 0x465e, 0x2c70, 0x7004,
-+ 0xa0bc, 0x000f, 0xa7b8, 0x466e, 0x273c, 0x87fb, 0x00c0, 0x464c,
-+ 0x0048, 0x4644, 0x1078, 0x296b, 0x609c, 0xa075, 0x0040, 0x465e,
-+ 0x0078, 0x4637, 0x2039, 0x4663, 0x2704, 0xae68, 0x6808, 0xa630,
-+ 0x680c, 0xa529, 0x8421, 0x0040, 0x465e, 0x8738, 0x2704, 0xa005,
-+ 0x00c0, 0x464d, 0x709c, 0xa075, 0x00c0, 0x4637, 0x007c, 0x0000,
-+ 0x0005, 0x0009, 0x000d, 0x0011, 0x0015, 0x0019, 0x001d, 0x0000,
-+ 0x0003, 0x0009, 0x000f, 0x0015, 0x001b, 0x0000, 0x0000, 0x4663,
-+ 0x4660, 0x0000, 0x0000, 0x8000, 0x0000, 0x4663, 0x0000, 0x466b,
-+ 0x4668, 0x0000, 0x0000, 0x0000, 0x0000, 0x466b, 0x0000, 0x4666,
-+ 0x4666, 0x0000, 0x0000, 0x8000, 0x0000, 0x4666, 0x0000, 0x466c,
-+ 0x466c, 0x0000, 0x0000, 0x0000, 0x0000, 0x466c, 0x2079, 0x4e00,
-+ 0x2071, 0x0010, 0x7007, 0x000a, 0x7007, 0x0002, 0x7003, 0x0001,
-+ 0x7810, 0xd0ec, 0x0040, 0x46a2, 0x2009, 0x0001, 0x2071, 0x0020,
-+ 0x0078, 0x46a6, 0x2009, 0x0002, 0x2071, 0x0050, 0x7007, 0x000a,
-+ 0x7007, 0x0002, 0x7003, 0x0000, 0x8109, 0x0040, 0x46b3, 0x2071,
-+ 0x0020, 0x0078, 0x46a6, 0x007c, 0x7004, 0x8004, 0x00c8, 0x473d,
-+ 0x7108, 0x7008, 0xa106, 0x00c0, 0x46b8, 0xa184, 0x01e0, 0x0040,
-+ 0x46c5, 0x1078, 0x47ac, 0x0078, 0x4765, 0x7007, 0x0012, 0x2019,
-+ 0x0000, 0x7108, 0x7008, 0xa106, 0x00c0, 0x46c9, 0xa184, 0x01e0,
-+ 0x0040, 0x46d6, 0x1078, 0x47ac, 0x0078, 0x4765, 0x7810, 0xd0ec,
-+ 0x0040, 0x46f0, 0x2001, 0x04fd, 0x2004, 0xa086, 0x0003, 0x00c0,
-+ 0x46f4, 0xa184, 0x4000, 0x0040, 0x46f8, 0xa382, 0x0003, 0x00c8,
-+ 0x46f8, 0xa184, 0x0004, 0x0040, 0x46c9, 0x8318, 0x0078, 0x46c9,
-+ 0x7814, 0xd0ec, 0x00c0, 0x46f8, 0xa184, 0x4000, 0x00c0, 0x46c9,
-+ 0xa19c, 0x300c, 0xa386, 0x2004, 0x0040, 0x4715, 0xa386, 0x0008,
-+ 0x0040, 0x4720, 0x7004, 0xd084, 0x00c0, 0x4711, 0x7108, 0x7008,
-+ 0xa106, 0x00c0, 0x4706, 0xa184, 0x0003, 0x0040, 0x4711, 0x0078,
-+ 0x47ac, 0xa386, 0x200c, 0x00c0, 0x46c9, 0x7200, 0x8204, 0x0048,
-+ 0x4720, 0x730c, 0xa384, 0x03ff, 0x0040, 0x4720, 0x1078, 0x296b,
-+ 0x7108, 0x7008, 0xa106, 0x00c0, 0x4720, 0xa184, 0x01e0, 0x0040,
-+ 0x472d, 0x1078, 0x47ac, 0x0078, 0x4765, 0x7007, 0x0012, 0x7000,
-+ 0xd084, 0x00c0, 0x473d, 0x7310, 0x7014, 0xa305, 0x0040, 0x473d,
-+ 0x710c, 0xa184, 0x03ff, 0x00c0, 0x46b4, 0x7108, 0x7008, 0xa106,
-+ 0x00c0, 0x473d, 0xa184, 0x01e0, 0x0040, 0x474a, 0x1078, 0x47ac,
-+ 0x0078, 0x4765, 0x7007, 0x0012, 0x7007, 0x0008, 0x7004, 0xd09c,
-+ 0x00c0, 0x474e, 0x7108, 0x7008, 0xa106, 0x00c0, 0x4752, 0xa184,
-+ 0x01e0, 0x0040, 0x475f, 0x1078, 0x47ac, 0x0078, 0x4765, 0x7007,
-+ 0x0012, 0x7108, 0x8103, 0x0048, 0x4752, 0x7003, 0x0008, 0x007c,
-+ 0x7108, 0xa184, 0x01e0, 0x00c0, 0x47ac, 0x7108, 0xa184, 0x01e0,
-+ 0x00c0, 0x47ac, 0xa184, 0x0007, 0x0079, 0x4776, 0x4780, 0x4790,
-+ 0x477e, 0x4790, 0x477e, 0x47ee, 0x477e, 0x47ec, 0x1078, 0x296b,
-+ 0x7004, 0xa084, 0x0010, 0xc08d, 0x7006, 0x8aff, 0x00c0, 0x478b,
-+ 0x2049, 0x0000, 0x007c, 0x1078, 0x4970, 0x00c0, 0x478b, 0x007c,
-+ 0x7004, 0xa084, 0x0010, 0xc08d, 0x7006, 0x7004, 0xd084, 0x00c0,
-+ 0x47a4, 0x7108, 0x7008, 0xa106, 0x00c0, 0x4799, 0xa184, 0x0003,
-+ 0x0040, 0x47a4, 0x0078, 0x47ac, 0x8aff, 0x0040, 0x47ab, 0x1078,
-+ 0x4970, 0x00c0, 0x47a7, 0x007c, 0x7007, 0x0012, 0x7108, 0x00e0,
-+ 0x47af, 0x2091, 0x6000, 0x00e0, 0x47b3, 0x2091, 0x6000, 0x7007,
-+ 0x0012, 0x7007, 0x0008, 0x7004, 0xd09c, 0x00c0, 0x47bb, 0x7007,
-+ 0x0012, 0x7108, 0xd1fc, 0x00c0, 0x47bf, 0x7003, 0x0000, 0x7000,
-+ 0xa005, 0x00c0, 0x47d3, 0x7004, 0xa005, 0x00c0, 0x47d3, 0x700c,
-+ 0xa005, 0x0040, 0x47d5, 0x0078, 0x47b7, 0x2049, 0x0000, 0xb284,
-+ 0x0100, 0x0040, 0x47df, 0x2001, 0x0000, 0x0078, 0x47e1, 0x2001,
-+ 0x0001, 0x1078, 0x4212, 0x681b, 0x0002, 0x2051, 0x0000, 0x007c,
-+ 0x1078, 0x296b, 0x1078, 0x296b, 0x1078, 0x4836, 0x7210, 0x7114,
-+ 0x700c, 0xa09c, 0x03ff, 0x2800, 0xa300, 0xa211, 0xa189, 0x0000,
-+ 0x1078, 0x4836, 0x2704, 0x2c58, 0xac60, 0x6308, 0x2200, 0xa322,
-+ 0x630c, 0x2100, 0xa31b, 0x2400, 0xa305, 0x0040, 0x4811, 0x00c8,
-+ 0x4811, 0x8412, 0x8210, 0x830a, 0xa189, 0x0000, 0x2b60, 0x0078,
-+ 0x47f8, 0x2b60, 0x8a07, 0x007e, 0x6004, 0xa084, 0x0008, 0x0040,
-+ 0x481d, 0xa7ba, 0x4668, 0x0078, 0x481f, 0xa7ba, 0x4660, 0x007f,
-+ 0xa73d, 0x2c00, 0x6886, 0x6f8a, 0x6c92, 0x6b8e, 0x7108, 0x7008,
-+ 0xa106, 0x00c0, 0x4826, 0xa184, 0x01e0, 0x0040, 0x4831, 0x1078,
-+ 0x47ac, 0x7007, 0x0012, 0x1078, 0x46b4, 0x007c, 0x8a50, 0x8739,
-+ 0x2704, 0xa004, 0x00c0, 0x484a, 0x6000, 0xa064, 0x00c0, 0x4841,
-+ 0x2d60, 0x6004, 0xa084, 0x000f, 0xa080, 0x467e, 0x203c, 0x87fb,
-+ 0x1040, 0x296b, 0x007c, 0x127e, 0x0d7e, 0x70d4, 0xa084, 0x4600,
-+ 0x8004, 0x2090, 0x0d7f, 0x6884, 0x2060, 0x6888, 0x6b8c, 0x6c90,
-+ 0x8057, 0xaad4, 0x00ff, 0xa084, 0x00ff, 0x007e, 0x6804, 0xa084,
-+ 0x0008, 0x007f, 0x0040, 0x4868, 0xa0b8, 0x4668, 0x0078, 0x486a,
-+ 0xa0b8, 0x4660, 0xb284, 0x0100, 0x0040, 0x4871, 0x7e20, 0x0078,
-+ 0x4872, 0x7e24, 0xa6b5, 0x000c, 0x681c, 0xd0b4, 0x0040, 0x4879,
-+ 0xc685, 0x2400, 0xa305, 0x0040, 0x48a3, 0x2c58, 0x2704, 0x6104,
-+ 0xac60, 0x6000, 0xa400, 0x701a, 0x6004, 0xa301, 0x701e, 0xa184,
-+ 0x0008, 0x0040, 0x4893, 0x6010, 0xa081, 0x0000, 0x7022, 0x6014,
-+ 0xa081, 0x0000, 0x7026, 0x6208, 0x2400, 0xa202, 0x7012, 0x620c,
-+ 0x2300, 0xa203, 0x7016, 0x7602, 0x7007, 0x0001, 0x2b60, 0x1078,
-+ 0x499b, 0x0078, 0x48a5, 0x1078, 0x4970, 0x00c0, 0x48a3, 0x127f,
-+ 0x2000, 0x007c, 0x127e, 0x0d7e, 0x70d4, 0xa084, 0x4600, 0x8004,
-+ 0x2090, 0x0d7f, 0x7007, 0x0004, 0x7004, 0xd094, 0x00c0, 0x48b4,
-+ 0x7003, 0x0008, 0x127f, 0x2000, 0x007c, 0x127e, 0x0d7e, 0x70d4,
-+ 0xa084, 0x4600, 0x8004, 0x007e, 0x2090, 0x007f, 0x0d7f, 0x7e20,
-+ 0xb284, 0x0100, 0x00c0, 0x48cd, 0x7e24, 0xa6b5, 0x000c, 0x681c,
-+ 0xd0ac, 0x00c0, 0x48d8, 0xc685, 0x7003, 0x0000, 0x7007, 0x0004,
-+ 0x6828, 0x2050, 0x2d60, 0x6004, 0xa0bc, 0x000f, 0xa7b8, 0x466e,
-+ 0x273c, 0x87fb, 0x00c0, 0x48ee, 0x0048, 0x48e8, 0x1078, 0x296b,
-+ 0x689c, 0xa065, 0x0040, 0x48f2, 0x0078, 0x48db, 0x1078, 0x4970,
-+ 0x00c0, 0x48ee, 0x127f, 0x2000, 0x007c, 0x127e, 0x007e, 0x017e,
-+ 0x0d7e, 0x70d4, 0xa084, 0x4600, 0x8004, 0x007e, 0x2090, 0x007f,
-+ 0x7e20, 0xb284, 0x0100, 0x00c0, 0x4906, 0x7e24, 0x0d7f, 0x037f,
-+ 0x047f, 0xa6b5, 0x000c, 0x681c, 0xd0b4, 0x0040, 0x4914, 0xc685,
-+ 0x7003, 0x0000, 0x7007, 0x0004, 0x2049, 0x48f5, 0x6828, 0xa055,
-+ 0x0d7e, 0x0040, 0x496c, 0x2d70, 0x2e60, 0x7004, 0xa0bc, 0x000f,
-+ 0xa7b8, 0x466e, 0x273c, 0x87fb, 0x00c0, 0x4931, 0x0048, 0x492a,
-+ 0x1078, 0x296b, 0x709c, 0xa075, 0x2060, 0x0040, 0x496c, 0x0078,
-+ 0x491d, 0x2704, 0xae68, 0x6808, 0xa422, 0x680c, 0xa31b, 0x0048,
-+ 0x494a, 0x8a51, 0x00c0, 0x493e, 0x1078, 0x296b, 0x8738, 0x2704,
-+ 0xa005, 0x00c0, 0x4932, 0x709c, 0xa075, 0x2060, 0x0040, 0x496c,
-+ 0x0078, 0x491d, 0x8422, 0x8420, 0x831a, 0xa399, 0x0000, 0x6908,
-+ 0x2400, 0xa122, 0x690c, 0x2300, 0xa11b, 0x00c8, 0x4959, 0x1078,
-+ 0x296b, 0xb284, 0x0100, 0x0040, 0x4967, 0x2001, 0x4e04, 0x2004,
-+ 0xd0ec, 0x00c0, 0x4967, 0x2071, 0x0050, 0x0078, 0x4969, 0x2071,
-+ 0x0020, 0x0d7f, 0x0078, 0x4879, 0x0d7f, 0x127f, 0x2000, 0x007c,
-+ 0x7008, 0x007e, 0xa084, 0x01e0, 0x007f, 0x0040, 0x4979, 0xa006,
-+ 0x007c, 0xa084, 0x0003, 0xa086, 0x0003, 0x00c0, 0x4980, 0x007c,
-+ 0x2704, 0xac78, 0x7800, 0x701a, 0x7804, 0x701e, 0x7808, 0x7012,
-+ 0x780c, 0x7016, 0x6004, 0xa084, 0x0008, 0x0040, 0x4993, 0x7810,
-+ 0x7022, 0x7814, 0x7026, 0x7602, 0x7004, 0xa084, 0x0010, 0xc085,
-+ 0x7006, 0x2079, 0x4e00, 0x8a51, 0x0040, 0x49bf, 0x8738, 0x2704,
-+ 0xa005, 0x00c0, 0x49b1, 0x609c, 0xa005, 0x0040, 0x49c0, 0x2060,
-+ 0x6004, 0xa084, 0x000f, 0xa080, 0x466e, 0x203c, 0x87fb, 0x1040,
-+ 0x296b, 0x7008, 0x007e, 0xa084, 0x01e0, 0x007f, 0x0040, 0x49bb,
-+ 0xa006, 0x0078, 0x49c0, 0xa084, 0x0003, 0xa086, 0x0003, 0x007c,
-+ 0x2051, 0x0000, 0x007c, 0x127e, 0x007e, 0x0d7e, 0x70d4, 0xa084,
-+ 0x4600, 0x8004, 0x2090, 0x0d7f, 0x087f, 0x7108, 0xa184, 0x0003,
-+ 0x00c0, 0x49d8, 0x6828, 0xa005, 0x0040, 0x49e8, 0x0078, 0x45a2,
-+ 0x7108, 0xd1fc, 0x0040, 0x49e0, 0x1078, 0x4769, 0x0078, 0x49cd,
-+ 0x7007, 0x0010, 0x7108, 0xd1fc, 0x0040, 0x49e2, 0x1078, 0x4769,
-+ 0x7008, 0xa086, 0x0008, 0x00c0, 0x49cd, 0x7000, 0xa005, 0x00c0,
-+ 0x49cd, 0x7003, 0x0000, 0x2049, 0x0000, 0x127f, 0x2000, 0x007c,
-+ 0x127e, 0x147e, 0x137e, 0x157e, 0x0c7e, 0x0d7e, 0x70d4, 0xa084,
-+ 0x4600, 0x8004, 0x2090, 0x0d7f, 0x2049, 0x49f8, 0xad80, 0x0011,
-+ 0x20a0, 0xb284, 0x0100, 0x0040, 0x4a1b, 0x2001, 0x4e04, 0x2004,
-+ 0xd0ec, 0x0040, 0x4a17, 0x2099, 0x0031, 0x0078, 0x4a1d, 0x2099,
-+ 0x0032, 0x0078, 0x4a1d, 0x2099, 0x0031, 0x700c, 0xa084, 0x03ff,
-+ 0x682a, 0x7007, 0x0008, 0x7007, 0x0002, 0x7003, 0x0001, 0x0040,
-+ 0x4a2c, 0x8000, 0x80ac, 0x53a5, 0x700c, 0xa084, 0x03ff, 0x0040,
-+ 0x4a38, 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, 0x4a33,
-+ 0x0c7f, 0x2049, 0x0000, 0x7003, 0x0000, 0x157f, 0x137f, 0x147f,
-+ 0x127f, 0x2000, 0x007c, 0x2091, 0x8000, 0x2091, 0x6000, 0x78ac,
-+ 0xa005, 0x00c0, 0x4a5a, 0x7974, 0x70d0, 0xa106, 0x00c0, 0x4a5a,
-+ 0x781c, 0xa005, 0x0040, 0x4a5a, 0x781f, 0x0000, 0x0068, 0x4a5a,
-+ 0x2091, 0x4080, 0x7830, 0x8001, 0x7832, 0x00c0, 0x4ae2, 0x7834,
-+ 0x7832, 0x7810, 0xd0ec, 0x00c0, 0x4adb, 0x2061, 0x73c0, 0x2069,
-+ 0x4e80, 0xc7fd, 0x68d0, 0xa005, 0x0040, 0x4a74, 0x8001, 0x68d2,
-+ 0x00c0, 0x4a74, 0x1078, 0x4cb0, 0x6800, 0xa084, 0x000f, 0x0040,
-+ 0x4a89, 0xa086, 0x0001, 0x0040, 0x4a89, 0x6844, 0xa00d, 0x0040,
-+ 0x4a89, 0x2104, 0xa005, 0x0040, 0x4a89, 0x8001, 0x200a, 0x0040,
-+ 0x4c23, 0x6814, 0xa005, 0x0040, 0x4aae, 0x8001, 0x6816, 0x00c0,
-+ 0x4aae, 0x68a7, 0x0001, 0x0f7e, 0xd7fc, 0x00c0, 0x4aa3, 0x7810,
-+ 0xd0ec, 0x0040, 0x4a9f, 0x2079, 0x0100, 0x0078, 0x4aa5, 0x2079,
-+ 0x0200, 0x0078, 0x4aa5, 0x2079, 0x0100, 0x1078, 0x4383, 0x0f7f,
-+ 0x6864, 0xa005, 0x0040, 0x4aae, 0x1078, 0x2628, 0x6880, 0xa005,
-+ 0x0040, 0x4abb, 0x8001, 0x6882, 0x00c0, 0x4abb, 0x6867, 0x0000,
-+ 0x68d4, 0xc0dd, 0x68d6, 0x68d4, 0xd0fc, 0x0040, 0x4ad8, 0xc0fc,
-+ 0x68d6, 0x20a9, 0x0200, 0x6034, 0xa005, 0x0040, 0x4ad4, 0x8001,
-+ 0x6036, 0x68d4, 0xc0fd, 0x68d6, 0x00c0, 0x4ad4, 0x6010, 0xa005,
-+ 0x0040, 0x4ad4, 0x1078, 0x2628, 0xace0, 0x0010, 0x00f0, 0x4ac3,
-+ 0xd7fc, 0x0040, 0x4ae2, 0x2061, 0x53c0, 0x2069, 0x4e40, 0xc7fc,
-+ 0x0078, 0x4a6a, 0x1078, 0x4b1e, 0x7838, 0x8001, 0x783a, 0x00c0,
-+ 0x4b04, 0x783c, 0x783a, 0x2061, 0x53c0, 0x2069, 0x4e40, 0xc7fc,
-+ 0x680c, 0xa005, 0x0040, 0x4af6, 0x1078, 0x4b88, 0xd7fc, 0x00c0,
-+ 0x4b04, 0x7810, 0xd0ec, 0x00c0, 0x4b04, 0x2061, 0x73c0, 0x2069,
-+ 0x4e80, 0xc7fd, 0x0078, 0x4af0, 0x7814, 0xd0e4, 0x00c0, 0x4b08,
-+ 0x7810, 0xd0cc, 0x0040, 0x4b1b, 0xd0ac, 0x00c0, 0x4b14, 0xd0a4,
-+ 0x0040, 0x4b1b, 0xc0ad, 0x7812, 0x2091, 0x8001, 0x0068, 0x4b1a,
-+ 0x1078, 0x2395, 0x007c, 0x2091, 0x8001, 0x007c, 0x7840, 0x8001,
-+ 0x7842, 0x00c0, 0x4b87, 0x7844, 0x7842, 0x2069, 0x4e40, 0xc7fc,
-+ 0x7810, 0x2079, 0x0200, 0xd0ec, 0x0040, 0x4b30, 0x2079, 0x0100,
-+ 0x68d8, 0xa005, 0x0040, 0x4b3c, 0x7de0, 0xa504, 0x00c0, 0x4b3c,
-+ 0x68da, 0x68d4, 0xc0bc, 0x68d6, 0x2079, 0x4e00, 0x6810, 0xa005,
-+ 0x00c0, 0x4b44, 0x2001, 0x0101, 0x8001, 0x6812, 0xd7fc, 0x0040,
-+ 0x4b4d, 0xa080, 0x94d0, 0x0078, 0x4b4f, 0xa080, 0x93c0, 0x2040,
-+ 0x2004, 0xa065, 0x0040, 0x4b79, 0x6024, 0xa005, 0x0040, 0x4b75,
-+ 0x8001, 0x6026, 0x00c0, 0x4b75, 0x6800, 0xa005, 0x0040, 0x4b68,
-+ 0x684c, 0xac06, 0x00c0, 0x4b68, 0x1078, 0x4c23, 0x0078, 0x4b79,
-+ 0x6864, 0xa005, 0x0040, 0x4b70, 0x6027, 0x0001, 0x0078, 0x4b75,
-+ 0x1078, 0x4bd6, 0x2804, 0x0078, 0x4b51, 0x6000, 0x2c40, 0x0078,
-+ 0x4b51, 0xd7fc, 0x00c0, 0x4b87, 0x7810, 0xd0ec, 0x00c0, 0x4b87,
-+ 0x2069, 0x4e80, 0xc7fd, 0x2079, 0x0100, 0x0078, 0x4b30, 0x007c,
-+ 0x2009, 0x0000, 0x20a9, 0x0200, 0x6008, 0xd09c, 0x0040, 0x4bc2,
-+ 0x6024, 0xa005, 0x0040, 0x4b98, 0x8001, 0x6026, 0x0078, 0x4bc0,
-+ 0x6008, 0xc09c, 0xd084, 0x00c0, 0x4ba0, 0xd0ac, 0x0040, 0x4bba,
-+ 0x600a, 0x6004, 0xa005, 0x0040, 0x4bc2, 0x0d7e, 0x0c7e, 0x017e,
-+ 0x2068, 0x6010, 0x8001, 0x6012, 0x1078, 0x3dd0, 0x2d00, 0x2c68,
-+ 0x2060, 0x1078, 0x1e5b, 0x1078, 0x201d, 0x017f, 0x0c7f, 0x0d7f,
-+ 0x0078, 0x4bc2, 0xc0bd, 0x600a, 0xa18d, 0x0001, 0x0078, 0x4bc2,
-+ 0xa18d, 0x0100, 0xace0, 0x0010, 0x00f0, 0x4b8c, 0xa184, 0x0001,
-+ 0x0040, 0x4bd1, 0xa18c, 0xfffe, 0x690e, 0x1078, 0x2628, 0x0078,
-+ 0x4bd2, 0x690e, 0x007c, 0x00c0, 0x4bd2, 0x786c, 0x2c00, 0x687e,
-+ 0x6714, 0x6f76, 0x6017, 0x0000, 0x602b, 0x0000, 0x601b, 0x0006,
-+ 0x60b4, 0xa084, 0x3f00, 0x601e, 0x6020, 0xa084, 0x00ff, 0xa085,
-+ 0x0060, 0x6022, 0x6000, 0x2042, 0x1078, 0x1de4, 0x6818, 0xa005,
-+ 0x0040, 0x4bf4, 0x8001, 0x681a, 0x6808, 0xc0a4, 0x680a, 0x6810,
-+ 0x7908, 0x8109, 0x790a, 0x8001, 0x00d0, 0x4c00, 0x1078, 0x296b,
-+ 0x6812, 0x00c0, 0x4c06, 0x7910, 0xc1a5, 0x7912, 0x602f, 0x0000,
-+ 0x6033, 0x0000, 0x2c68, 0x1078, 0x202c, 0xd7fc, 0x00c0, 0x4c14,
-+ 0x2069, 0x4e40, 0x0078, 0x4c16, 0x2069, 0x4e80, 0x6910, 0xa184,
-+ 0x0100, 0x2001, 0x0006, 0x00c0, 0x4c20, 0x697a, 0x2001, 0x0004,
-+ 0x1078, 0x261c, 0x007c, 0x0d7e, 0x694c, 0x2160, 0xd7fc, 0x00c0,
-+ 0x4c35, 0x7810, 0xd0ec, 0x0040, 0x4c31, 0x2069, 0x0100, 0x0078,
-+ 0x4c37, 0x2069, 0x0200, 0x0078, 0x4c37, 0x2069, 0x0100, 0x1078,
-+ 0x28df, 0x601b, 0x0006, 0x6858, 0xa084, 0x3f00, 0x601e, 0x6020,
-+ 0xa084, 0x00ff, 0xa085, 0x0048, 0x6022, 0x602f, 0x0000, 0x6033,
-+ 0x0000, 0x6808, 0xa084, 0xfffd, 0x680a, 0x6830, 0xd0b4, 0x0040,
-+ 0x4c69, 0x684b, 0x0004, 0x20a9, 0x0014, 0x6848, 0xd094, 0x0040,
-+ 0x4c5b, 0x00f0, 0x4c55, 0x684b, 0x0009, 0x20a9, 0x0014, 0x6848,
-+ 0xd084, 0x0040, 0x4c65, 0x00f0, 0x4c5f, 0x20a9, 0x00fa, 0x00f0,
-+ 0x4c67, 0x681b, 0x0047, 0x0d7f, 0x6867, 0x0007, 0x007c, 0x2079,
-+ 0x4e00, 0x1078, 0x4ca3, 0x1078, 0x4c89, 0x1078, 0x4c96, 0x2009,
-+ 0x0002, 0x2069, 0x4e80, 0x680f, 0x0000, 0x6813, 0x0000, 0x6817,
-+ 0x0000, 0x8109, 0x0040, 0x4c88, 0x2069, 0x4e40, 0x0078, 0x4c7b,
-+ 0x007c, 0x7810, 0xd0ec, 0x0040, 0x4c91, 0x2019, 0x00cc, 0x0078,
-+ 0x4c93, 0x2019, 0x007b, 0x7b3a, 0x7b3e, 0x007c, 0x7814, 0xd0e4,
-+ 0x00c0, 0x4c9e, 0x2019, 0x0040, 0x0078, 0x4ca0, 0x2019, 0x0026,
-+ 0x7b42, 0x7b46, 0x007c, 0x7814, 0xd0e4, 0x00c0, 0x4cab, 0x2019,
-+ 0x3f94, 0x0078, 0x4cad, 0x2019, 0x2624, 0x7b32, 0x7b36, 0x007c,
-+ 0x6a50, 0xa285, 0x0000, 0x0040, 0x4cdc, 0x6954, 0x6bc0, 0xa300,
-+ 0x0c7e, 0x2164, 0x6304, 0x83ff, 0x00c0, 0x4cc8, 0x8211, 0x0040,
-+ 0x4ccc, 0x8108, 0xa11a, 0x0048, 0x4cb9, 0x69c0, 0x0078, 0x4cb9,
-+ 0x68d3, 0x000a, 0x0c7f, 0x007c, 0x6950, 0x6ac0, 0x2264, 0x602b,
-+ 0x0000, 0x602f, 0x0000, 0x6008, 0xc0b5, 0x600a, 0x8210, 0x8109,
-+ 0x00c0, 0x4cce, 0x6952, 0x0c7f, 0x007c, 0x00e0, 0x4cdd, 0x2091,
-+ 0x6000, 0x00e0, 0x4ce1, 0x2091, 0x6000, 0x70ec, 0xd0dc, 0x00c0,
-+ 0x4cee, 0xd0d4, 0x0040, 0x4d17, 0x0078, 0x4d1a, 0x2008, 0x7810,
-+ 0xd0ec, 0x0040, 0x4d01, 0xd1c4, 0x00c0, 0x4d39, 0x7814, 0xc0c5,
-+ 0x7816, 0x7810, 0xc0f5, 0x7812, 0xd0ec, 0x0040, 0x4d35, 0x0078,
-+ 0x4d31, 0xae8e, 0x0100, 0x0040, 0x4d0e, 0x7814, 0xc0f5, 0xc0c5,
-+ 0x7816, 0xd0d4, 0x00c0, 0x4d35, 0x0078, 0x4d31, 0x7814, 0xc0fd,
-+ 0xc0c5, 0x7816, 0xd0d4, 0x00c0, 0x4d35, 0x0078, 0x4d31, 0xd0e4,
-+ 0x0040, 0x4d37, 0x00e0, 0x4d1a, 0x2091, 0x6000, 0x2009, 0x000c,
-+ 0x00e0, 0x4d20, 0x2091, 0x6000, 0x8109, 0x00c0, 0x4d20, 0x70e4,
-+ 0xa084, 0x01ff, 0xa086, 0x01ff, 0x00c0, 0x4d31, 0x70ec, 0x0078,
-+ 0x4cee, 0x7804, 0xd08c, 0x0040, 0x4d37, 0x681f, 0x000c, 0x70a0,
-+ 0x70a2, 0x007c, 0x205b
-+};
-+#else
-+/************************************************************************
-+ * *
-+ * --- ISP1240/ISP1080/ISP1280 Initiator/Target Firmware --- *
-+ * 32 LUN Support *
-+ * *
-+ ************************************************************************/
-+/*
-+ * Firmware Version 9.11.01 (15:46 May 23, 2000)
-+ */
-+
-+static const u_int16_t isp_1080_risc_code[] = {
-+ 0x0078, 0x103a, 0x0000, 0x4f62, 0x0000, 0x2043, 0x4f50, 0x5952,
-+ 0x4947, 0x4854, 0x2031, 0x3939, 0x3520, 0x514c, 0x4f47, 0x4943,
-+ 0x2043, 0x4f52, 0x504f, 0x5241, 0x5449, 0x4f4e, 0x2049, 0x5350,
-+ 0x3132, 0x3430, 0x2049, 0x2f54, 0x2046, 0x6972, 0x6d77, 0x6172,
-+ 0x6520, 0x2056, 0x6572, 0x7369, 0x6f6e, 0x2030, 0x392e, 0x3131,
-+ 0x2020, 0x2043, 0x7573, 0x746f, 0x6d65, 0x7220, 0x4e6f, 0x2e20,
-+ 0x3030, 0x2050, 0x726f, 0x6475, 0x6374, 0x204e, 0x6f2e, 0x2020,
-+ 0x3031, 0x2024, 0x20c9, 0xabff, 0x2001, 0x04fc, 0x2004, 0xa086,
-+ 0x1080, 0x00c0, 0x104d, 0x2071, 0x0100, 0x70a0, 0x70a2, 0x20c1,
-+ 0x0010, 0x2089, 0x136f, 0x0078, 0x1066, 0x2001, 0x04fc, 0x2004,
-+ 0xa086, 0x1280, 0x00c0, 0x1062, 0x2071, 0x0200, 0x70a0, 0x70a2,
-+ 0x2071, 0x0100, 0x70a0, 0x70a2, 0x20c1, 0x0010, 0x2089, 0x13f3,
-+ 0x0078, 0x1066, 0x20c1, 0x0020, 0x2089, 0x1317, 0x2071, 0x0010,
-+ 0x70c3, 0x0004, 0x70c7, 0x4953, 0x70cb, 0x5020, 0x70cf, 0x2020,
-+ 0x70d3, 0x0009, 0x2001, 0x04fd, 0x70d6, 0x20c1, 0x0021, 0x2019,
-+ 0x0000, 0x2009, 0xfeff, 0x2100, 0x200b, 0xa5a5, 0xa1ec, 0x7fff,
-+ 0x2d64, 0x206b, 0x0a0a, 0xaddc, 0x3fff, 0x2b54, 0x205b, 0x5050,
-+ 0x2114, 0xa286, 0xa5a5, 0x0040, 0x109d, 0xa386, 0x000f, 0x0040,
-+ 0x1099, 0x2c6a, 0x2a5a, 0x20c1, 0x0020, 0x2019, 0x000f, 0x0078,
-+ 0x1079, 0x2c6a, 0x2a5a, 0x0078, 0x109b, 0x2c6a, 0x2a5a, 0x2130,
-+ 0x2128, 0xa1a2, 0x6000, 0x8424, 0x8424, 0x8424, 0x8424, 0x8424,
-+ 0x8424, 0xa192, 0xac00, 0x2009, 0x0000, 0x2001, 0x0037, 0x1078,
-+ 0x22c0, 0x2218, 0x2079, 0x6000, 0x2fa0, 0x2408, 0x2011, 0x0000,
-+ 0x20a9, 0x0040, 0x42a4, 0x8109, 0x00c0, 0x10b8, 0x2009, 0xff00,
-+ 0x3400, 0xa102, 0x0048, 0x10c8, 0x0040, 0x10c8, 0x20a8, 0x42a4,
-+ 0x2001, 0x04fc, 0x2004, 0xa086, 0x1080, 0x00c0, 0x10e0, 0x2071,
-+ 0x0100, 0x0d7e, 0x2069, 0x6040, 0x1078, 0x5d94, 0x0d7f, 0x7808,
-+ 0xc0ed, 0x780a, 0x7813, 0x0064, 0x2011, 0x000a, 0x0078, 0x1107,
-+ 0x2001, 0x04fc, 0x2004, 0xa086, 0x1280, 0x00c0, 0x1100, 0x780c,
-+ 0xc0ed, 0xc0d5, 0x780e, 0x7813, 0x0064, 0x2071, 0x0200, 0x0d7e,
-+ 0x2069, 0x6040, 0x1078, 0x5d94, 0x2069, 0x6080, 0x2071, 0x0100,
-+ 0x1078, 0x5d94, 0x780c, 0xc0d4, 0x780e, 0x0d7f, 0x0078, 0x1107,
-+ 0x780c, 0xc0e5, 0x780e, 0x7813, 0x003c, 0x2011, 0x000c, 0x2009,
-+ 0x604c, 0x220a, 0x2009, 0x608c, 0x220a, 0x7ece, 0x7cc6, 0x7bca,
-+ 0x785f, 0x0000, 0x7800, 0xc08d, 0x7802, 0x2031, 0x0030, 0x78b3,
-+ 0x0101, 0x781b, 0x0002, 0x781f, 0x0002, 0x2009, 0x0002, 0x2069,
-+ 0x6040, 0x6817, 0x0003, 0x681f, 0x0007, 0x6823, 0x00fa, 0x6827,
-+ 0x0008, 0x682b, 0x0028, 0x6837, 0x0006, 0x682f, 0x0008, 0x683b,
-+ 0x0000, 0x8109, 0x0040, 0x1158, 0x68ef, 0x000a, 0x68df, 0x60c0,
-+ 0x2079, 0x6000, 0x780c, 0xd0e4, 0x00c0, 0x1142, 0x68f3, 0x7329,
-+ 0x0078, 0x1144, 0x68f3, 0x730d, 0x68e3, 0x65c0, 0x68e7, 0x64c0,
-+ 0x68eb, 0xa5c0, 0x68c7, 0xaa8e, 0x68cb, 0xaa93, 0x68cf, 0xaa8e,
-+ 0x68d3, 0xaa8e, 0x68c3, 0x0001, 0x2069, 0x6080, 0x0078, 0x1121,
-+ 0x68ef, 0x000a, 0x68df, 0x62c0, 0x68f3, 0x7419, 0x68e3, 0x85c0,
-+ 0x68e7, 0x6540, 0x68eb, 0xa6d0, 0x68c7, 0xaa93, 0x68cb, 0xaa98,
-+ 0x68cf, 0xaa93, 0x68d3, 0xaa93, 0x68c3, 0x0001, 0x7808, 0xd0ec,
-+ 0x00c0, 0x11b4, 0x780c, 0xd0e4, 0x00c0, 0x11a6, 0x0e7e, 0x2069,
-+ 0x64c0, 0x2071, 0x0200, 0x70ec, 0xd0e4, 0x00c0, 0x1187, 0x2019,
-+ 0x0c0c, 0x2021, 0x000c, 0x1078, 0x222c, 0x0078, 0x118d, 0x2019,
-+ 0x0c0a, 0x2021, 0x000a, 0x1078, 0x222c, 0x2069, 0x6540, 0x2071,
-+ 0x0100, 0x70ec, 0xd0e4, 0x00c0, 0x119d, 0x2019, 0x0c0c, 0x2021,
-+ 0x000c, 0x1078, 0x222c, 0x0078, 0x11a3, 0x2019, 0x0c0a, 0x2021,
-+ 0x000a, 0x1078, 0x222c, 0x0e7f, 0x0078, 0x11cd, 0x2019, 0x0c0c,
-+ 0x2021, 0x000c, 0x2069, 0x64c0, 0x1078, 0x222c, 0x2069, 0x6540,
-+ 0x1078, 0x222c, 0x0078, 0x11cd, 0x2069, 0x64c0, 0x0e7e, 0x2071,
-+ 0x0100, 0x70ec, 0xd0e4, 0x00c0, 0x11c6, 0x2019, 0x0c0c, 0x2021,
-+ 0x000c, 0x1078, 0x222c, 0x0e7f, 0x0078, 0x11cd, 0x2019, 0x0c0a,
-+ 0x2021, 0x000a, 0x1078, 0x222c, 0x0e7f, 0x2011, 0x0002, 0x2069,
-+ 0x65c0, 0x2009, 0x0002, 0x20a9, 0x0100, 0x6837, 0x0000, 0x680b,
-+ 0x0040, 0x7bcc, 0xa386, 0xfeff, 0x00c0, 0x11e4, 0x6817, 0x0100,
-+ 0x681f, 0x0064, 0x0078, 0x11e8, 0x6817, 0x0064, 0x681f, 0x0002,
-+ 0xade8, 0x0010, 0x00f0, 0x11d5, 0x8109, 0x00c0, 0x11d3, 0x8211,
-+ 0x0040, 0x11f6, 0x2069, 0x85c0, 0x0078, 0x11d1, 0x1078, 0x28df,
-+ 0x1078, 0x56b4, 0x1078, 0x1e5e, 0x1078, 0x5d2a, 0x2091, 0x2100,
-+ 0x2079, 0x6000, 0x7808, 0xd0ec, 0x0040, 0x120a, 0x2071, 0x0020,
-+ 0x0078, 0x120c, 0x2071, 0x0050, 0x2091, 0x2200, 0x2079, 0x6000,
-+ 0x2071, 0x0020, 0x2091, 0x2300, 0x2079, 0x6000, 0x7808, 0xd0ec,
-+ 0x0040, 0x121e, 0x2079, 0x0100, 0x0078, 0x1220, 0x2079, 0x0200,
-+ 0x2071, 0x6040, 0x2091, 0x2400, 0x2079, 0x0100, 0x2071, 0x6080,
-+ 0x2091, 0x2000, 0x2079, 0x6000, 0x2071, 0x0010, 0x3200, 0xa085,
-+ 0x303d, 0x2090, 0x70c3, 0x0000, 0x0090, 0x123d, 0x70c0, 0xa086,
-+ 0x0002, 0x00c0, 0x123d, 0x1078, 0x15ae, 0x2039, 0x0000, 0x7808,
-+ 0xd0ec, 0x00c0, 0x12c7, 0x1078, 0x1477, 0x78b0, 0xa005, 0x00c0,
-+ 0x125f, 0x0068, 0x1253, 0x7868, 0xa065, 0x0040, 0x1253, 0x2029,
-+ 0x0000, 0x1078, 0x2774, 0x1078, 0x22e7, 0x0068, 0x126c, 0x7868,
-+ 0xa065, 0x0040, 0x125f, 0x2029, 0x0000, 0x1078, 0x2774, 0x0068,
-+ 0x126c, 0x2009, 0x6046, 0x2011, 0x6086, 0x2104, 0x220c, 0xa105,
-+ 0x0040, 0x126c, 0x1078, 0x1f9d, 0x0e7e, 0x0f7e, 0x2071, 0x6040,
-+ 0x70c0, 0xa005, 0x0040, 0x1295, 0x7454, 0xa485, 0x0000, 0x0040,
-+ 0x1295, 0x2079, 0x0200, 0x2091, 0x8000, 0x72f0, 0xa28c, 0x303d,
-+ 0x2190, 0x1078, 0x2e28, 0x2091, 0x8000, 0x2091, 0x303d, 0x0068,
-+ 0x1295, 0x0f7f, 0x7868, 0xa065, 0x0040, 0x1294, 0x0e7f, 0x2029,
-+ 0x0000, 0x1078, 0x2774, 0x0e7e, 0x0f7e, 0x00e0, 0x129d, 0x0f7f,
-+ 0x0e7f, 0x1078, 0x5b00, 0x0e7e, 0x0f7e, 0x2071, 0x6080, 0x70c0,
-+ 0xa005, 0x0040, 0x12b6, 0x7454, 0xa485, 0x0000, 0x0040, 0x12b6,
-+ 0x2079, 0x0100, 0x2091, 0x8000, 0x72f0, 0xa28c, 0x303d, 0x2190,
-+ 0x1078, 0x2e28, 0x2091, 0x8000, 0x2091, 0x303d, 0x0f7f, 0x0e7f,
-+ 0x0068, 0x12c1, 0x7868, 0xa065, 0x0040, 0x12c1, 0xa02e, 0x1078,
-+ 0x2774, 0x00e0, 0x1243, 0x1078, 0x5b00, 0x0078, 0x1243, 0x1078,
-+ 0x1477, 0x78b0, 0xa005, 0x00c0, 0x12e3, 0x0068, 0x12d7, 0x7868,
-+ 0xa065, 0x0040, 0x12d7, 0x2029, 0x0000, 0x1078, 0x2774, 0x1078,
-+ 0x22e7, 0x0068, 0x12ed, 0x7868, 0xa065, 0x0040, 0x12e3, 0x2029,
-+ 0x0000, 0x1078, 0x2774, 0x0068, 0x12ed, 0x2009, 0x6046, 0x2104,
-+ 0xa005, 0x0040, 0x12ed, 0x1078, 0x1f9d, 0x0e7e, 0x0f7e, 0x2071,
-+ 0x6040, 0x70c0, 0xa005, 0x0040, 0x1305, 0x7454, 0xa485, 0x0000,
-+ 0x0040, 0x1305, 0x2079, 0x0100, 0x2091, 0x8000, 0x72f0, 0x1078,
-+ 0x2e28, 0x2091, 0x8000, 0x2091, 0x303d, 0x0f7f, 0x0e7f, 0x0068,
-+ 0x1311, 0x7868, 0xa065, 0x0040, 0x1311, 0x2029, 0x0000, 0x1078,
-+ 0x2774, 0x00e0, 0x12c7, 0x1078, 0x5b00, 0x0078, 0x12c7, 0x1337,
-+ 0x1337, 0x1339, 0x1339, 0x1346, 0x1346, 0x1346, 0x1346, 0x1351,
-+ 0x1351, 0x135e, 0x135e, 0x1346, 0x1346, 0x1346, 0x1346, 0x1337,
-+ 0x1337, 0x1339, 0x1339, 0x1346, 0x1346, 0x1346, 0x1346, 0x1351,
-+ 0x1351, 0x135e, 0x135e, 0x1346, 0x1346, 0x1346, 0x1346, 0x0078,
-+ 0x1337, 0x007e, 0x107e, 0x127e, 0x2091, 0x2400, 0x1078, 0x2c19,
-+ 0x127f, 0x107f, 0x007f, 0x2091, 0x8001, 0x007c, 0x007e, 0x107e,
-+ 0x127e, 0x1078, 0x13c3, 0x127f, 0x107f, 0x007f, 0x2091, 0x8001,
-+ 0x007c, 0x007e, 0x107e, 0x127e, 0x2091, 0x2300, 0x1078, 0x2c19,
-+ 0x127f, 0x107f, 0x007f, 0x2091, 0x8001, 0x007c, 0x007e, 0x107e,
-+ 0x127e, 0x2091, 0x2300, 0x1078, 0x2c19, 0x2091, 0x2400, 0x1078,
-+ 0x2c19, 0x127f, 0x107f, 0x007f, 0x2091, 0x8001, 0x007c, 0x138f,
-+ 0x138f, 0x1391, 0x1391, 0x139e, 0x139e, 0x139e, 0x139e, 0x13a9,
-+ 0x13a9, 0x1391, 0x1391, 0x139e, 0x139e, 0x139e, 0x139e, 0x13aa,
-+ 0x13aa, 0x13aa, 0x13aa, 0x13aa, 0x13aa, 0x13aa, 0x13aa, 0x13aa,
-+ 0x13aa, 0x13aa, 0x13aa, 0x13aa, 0x13aa, 0x13aa, 0x13aa, 0x0078,
-+ 0x138f, 0x007e, 0x107e, 0x127e, 0x2091, 0x2300, 0x1078, 0x2c19,
-+ 0x127f, 0x107f, 0x007f, 0x2091, 0x8001, 0x007c, 0x007e, 0x107e,
-+ 0x127e, 0x1078, 0x13d0, 0x127f, 0x107f, 0x007f, 0x2091, 0x8001,
-+ 0x007c, 0x007c, 0x107e, 0x127e, 0x0d7e, 0x0e7e, 0x0f7e, 0x007e,
-+ 0x2071, 0x0100, 0x2069, 0x6040, 0x2079, 0x6000, 0x70ec, 0xa084,
-+ 0x1c00, 0x78e6, 0x1078, 0x5d94, 0x007f, 0x0f7f, 0x0e7f, 0x0d7f,
-+ 0x127f, 0x107f, 0x007c, 0x3c00, 0xa084, 0x0007, 0x0079, 0x13c8,
-+ 0x13d9, 0x13d9, 0x13db, 0x13db, 0x13e0, 0x13e0, 0x13e5, 0x13e5,
-+ 0x3c00, 0xa084, 0x0003, 0x0079, 0x13d5, 0x13d9, 0x13d9, 0x13ee,
-+ 0x13ee, 0x1078, 0x2bfa, 0x2091, 0x2200, 0x1078, 0x578c, 0x007c,
-+ 0x2091, 0x2100, 0x1078, 0x578c, 0x007c, 0x2091, 0x2100, 0x1078,
-+ 0x578c, 0x2091, 0x2200, 0x1078, 0x578c, 0x007c, 0x2091, 0x2100,
-+ 0x1078, 0x578c, 0x007c, 0x1413, 0x1413, 0x1415, 0x1415, 0x1422,
-+ 0x1422, 0x1422, 0x1422, 0x142d, 0x142d, 0x143a, 0x143a, 0x1422,
-+ 0x1422, 0x1422, 0x1422, 0x144b, 0x144b, 0x144b, 0x144b, 0x144b,
-+ 0x144b, 0x144b, 0x144b, 0x144b, 0x144b, 0x144b, 0x144b, 0x144b,
-+ 0x144b, 0x144b, 0x144b, 0x0078, 0x1413, 0x007e, 0x107e, 0x127e,
-+ 0x2091, 0x2400, 0x1078, 0x2c19, 0x127f, 0x107f, 0x007f, 0x2091,
-+ 0x8001, 0x007c, 0x007e, 0x107e, 0x127e, 0x1078, 0x13c3, 0x127f,
-+ 0x107f, 0x007f, 0x2091, 0x8001, 0x007c, 0x007e, 0x107e, 0x127e,
-+ 0x2091, 0x2300, 0x1078, 0x2c19, 0x127f, 0x107f, 0x007f, 0x2091,
-+ 0x8001, 0x007c, 0x007e, 0x107e, 0x127e, 0x2091, 0x2300, 0x1078,
-+ 0x2c19, 0x2091, 0x2400, 0x1078, 0x2c19, 0x127f, 0x107f, 0x007f,
-+ 0x2091, 0x8001, 0x007c, 0x007e, 0x107e, 0x127e, 0x0d7e, 0x0e7e,
-+ 0x0f7e, 0x2079, 0x6000, 0x2071, 0x0200, 0x2069, 0x6040, 0x3d00,
-+ 0xd08c, 0x0040, 0x1461, 0x70ec, 0xa084, 0x1c00, 0x78e6, 0x1078,
-+ 0x5d94, 0x3d00, 0xd084, 0x0040, 0x146f, 0x2069, 0x6080, 0x2071,
-+ 0x0100, 0x70ec, 0xa084, 0x1c00, 0x78ea, 0x1078, 0x5d94, 0x0f7f,
-+ 0x0e7f, 0x0d7f, 0x127f, 0x107f, 0x007f, 0x007c, 0x007c, 0x0068,
-+ 0x14fd, 0x2061, 0x0000, 0x6018, 0xa084, 0x0001, 0x00c0, 0x14fd,
-+ 0x7820, 0xa005, 0x00c0, 0x1488, 0x0010, 0x14fe, 0x0078, 0x14fd,
-+ 0x7908, 0xd1f4, 0x0040, 0x1490, 0x2001, 0x4007, 0x0078, 0x15b0,
-+ 0x790c, 0xd1ec, 0x0040, 0x14ab, 0xd0fc, 0x0040, 0x14a1, 0x007e,
-+ 0x1078, 0x1dd3, 0x007f, 0x0040, 0x14ab, 0x2001, 0x4007, 0x0078,
-+ 0x15b0, 0x007e, 0x1078, 0x1dc7, 0x007f, 0x0040, 0x14ab, 0x2001,
-+ 0x4007, 0x0078, 0x15b0, 0x7908, 0xd0fc, 0x00c0, 0x14b5, 0x2061,
-+ 0x6040, 0xc19c, 0xc7fc, 0x0078, 0x14b9, 0x2061, 0x6080, 0xc19d,
-+ 0xc7fd, 0x6068, 0xa005, 0x00c0, 0x14fd, 0x790a, 0x6087, 0x0000,
-+ 0x7820, 0xc0fc, 0xa086, 0x0018, 0x00c0, 0x14ca, 0x0c7e, 0x1078,
-+ 0x1aed, 0x0c7f, 0x7823, 0x0000, 0x6080, 0xa065, 0x0040, 0x14e3,
-+ 0x0c7e, 0x609c, 0x1078, 0x1edb, 0x0c7f, 0x609f, 0x0000, 0x1078,
-+ 0x1c18, 0x2009, 0x000c, 0x6007, 0x0103, 0x1078, 0x1ddf, 0x00c0,
-+ 0x14f7, 0x1078, 0x1e43, 0x7808, 0xd09c, 0x00c0, 0x14eb, 0x2061,
-+ 0x6040, 0x0078, 0x14ee, 0x2061, 0x6080, 0xc09c, 0x6083, 0x0000,
-+ 0x780a, 0x60f0, 0xd0dc, 0x0040, 0x14fb, 0xc0dc, 0x60f2, 0x2001,
-+ 0x4005, 0x0078, 0x15b0, 0x0078, 0x15ae, 0x007c, 0x7808, 0xd0f4,
-+ 0x0040, 0x1506, 0x2001, 0x4007, 0x0078, 0x15b0, 0x70c3, 0x0000,
-+ 0x70c7, 0x0000, 0x70cb, 0x0000, 0x70cf, 0x0000, 0x70db, 0x0000,
-+ 0x71c4, 0x7a08, 0xd2ec, 0x0040, 0x1516, 0xc1fc, 0x70c0, 0xa03d,
-+ 0xa092, 0x0030, 0x00c8, 0x151e, 0x0079, 0x1525, 0x2200, 0xa092,
-+ 0x0050, 0x00c8, 0x15bc, 0x0079, 0x1555, 0x15ae, 0x1604, 0x15cd,
-+ 0x1619, 0x1628, 0x162e, 0x15c4, 0x1c30, 0x1632, 0x15bc, 0x15d1,
-+ 0x15d3, 0x15d5, 0x15d7, 0x1c35, 0x15bc, 0x1640, 0x1698, 0x1b0f,
-+ 0x1c2a, 0x15d9, 0x1949, 0x198b, 0x19c6, 0x1a13, 0x1902, 0x1910,
-+ 0x1924, 0x1938, 0x175e, 0x15bc, 0x16c9, 0x16cd, 0x16d9, 0x16e5,
-+ 0x16fb, 0x1707, 0x170a, 0x1716, 0x1722, 0x172a, 0x1746, 0x1752,
-+ 0x15bc, 0x15bc, 0x15bc, 0x15bc, 0x176b, 0x177a, 0x1795, 0x17cb,
-+ 0x17f3, 0x1803, 0x1806, 0x182f, 0x1860, 0x1872, 0x18d4, 0x18e4,
-+ 0x15bc, 0x15bc, 0x15bc, 0x15bc, 0x18f4, 0x15bc, 0x15bc, 0x15bc,
-+ 0x15bc, 0x15bc, 0x1d7e, 0x1d84, 0x15bc, 0x15bc, 0x15bc, 0x1d88,
-+ 0x1d8d, 0x15bc, 0x15bc, 0x15bc, 0x15bc, 0x15fe, 0x1613, 0x163a,
-+ 0x1692, 0x1b09, 0x1c4c, 0x1c72, 0x1ad0, 0x1c8a, 0x1d91, 0x1d70,
-+ 0x1d7a, 0x15bc, 0x15bc, 0x15bc, 0x15bc, 0x15bc, 0x15bc, 0x15bc,
-+ 0x15bc, 0x15bc, 0x15bc, 0x15bc, 0x15bc, 0x15bc, 0x15bc, 0x15bc,
-+ 0x15bc, 0x15bc, 0x15bc, 0x15bc, 0x15bc, 0x15bc, 0x15bc, 0x15bc,
-+ 0x15bc, 0x15bc, 0x15bc, 0x15bc, 0x15bc, 0x15bc, 0x15bc, 0x15bc,
-+ 0x15bc, 0x15bc, 0x15bc, 0x15bc, 0x15bc, 0x72ca, 0x71c6, 0x2001,
-+ 0x4006, 0x0078, 0x15b0, 0x73ce, 0x72ca, 0x71c6, 0x2001, 0x4000,
-+ 0x70c2, 0x0068, 0x15b1, 0x2061, 0x0000, 0x601b, 0x0001, 0x2091,
-+ 0x5000, 0x2091, 0x4080, 0x007c, 0x70c3, 0x4001, 0x0078, 0x15b1,
-+ 0x70c3, 0x4006, 0x0078, 0x15b1, 0x2099, 0x0041, 0x20a1, 0x0041,
-+ 0x20a9, 0x0005, 0x53a3, 0x0078, 0x15ae, 0x70c4, 0x70c3, 0x0004,
-+ 0x007a, 0x0078, 0x15ae, 0x0078, 0x15ae, 0x0078, 0x15ae, 0x0078,
-+ 0x15ae, 0x2091, 0x8000, 0x70c3, 0x0000, 0x70c7, 0x4953, 0x70cb,
-+ 0x5020, 0x70cf, 0x2020, 0x70d3, 0x0009, 0x2001, 0x000b, 0x70d6,
-+ 0x2079, 0x0000, 0x781b, 0x0001, 0x2031, 0x0030, 0x2059, 0x1000,
-+ 0x2029, 0x041a, 0x2051, 0x0445, 0x2061, 0x0447, 0x20c1, 0x0020,
-+ 0x2091, 0x5000, 0x2091, 0x4080, 0x0078, 0x0418, 0x75d8, 0x74dc,
-+ 0x75da, 0x74de, 0x0078, 0x1607, 0x2029, 0x0000, 0x2520, 0x71d0,
-+ 0x73c8, 0x72cc, 0x70c4, 0x1078, 0x1ff2, 0x0040, 0x15ae, 0x70c3,
-+ 0x4002, 0x0078, 0x15ae, 0x75d8, 0x74dc, 0x75da, 0x74de, 0x0078,
-+ 0x161c, 0x2029, 0x0000, 0x2520, 0x71d0, 0x73c8, 0x72cc, 0x70c4,
-+ 0x1078, 0x203c, 0x0040, 0x15ae, 0x70c3, 0x4002, 0x0078, 0x15ae,
-+ 0x71c4, 0x70c8, 0x2114, 0x200a, 0x0078, 0x15ac, 0x71c4, 0x2114,
-+ 0x0078, 0x15ac, 0x70c7, 0x0009, 0x70cb, 0x000b, 0x70cf, 0x0001,
-+ 0x0078, 0x15ae, 0x75d8, 0x76dc, 0x75da, 0x76de, 0x0078, 0x1643,
-+ 0x2029, 0x0000, 0x2530, 0x70c4, 0x72c8, 0x73cc, 0x74d0, 0x70c6,
-+ 0x72ca, 0x73ce, 0x74d2, 0xa005, 0x0040, 0x168c, 0xa40a, 0x0040,
-+ 0x1653, 0x00c8, 0x15b0, 0x8001, 0x786e, 0xa084, 0xfc00, 0x0040,
-+ 0x1660, 0x78b0, 0xc085, 0x78b2, 0x2001, 0x4005, 0x0078, 0x15b0,
-+ 0x7a76, 0x7b7a, 0x7d7e, 0x7e82, 0x7c72, 0xa48c, 0xff00, 0x0040,
-+ 0x1678, 0x8407, 0x8004, 0x8004, 0x810c, 0x810c, 0x810f, 0xa118,
-+ 0xa291, 0x0000, 0xa6b1, 0x0000, 0xa5a9, 0x0000, 0x0078, 0x1682,
-+ 0x8407, 0x8004, 0x8004, 0xa318, 0xa291, 0x0000, 0xa6b1, 0x0000,
-+ 0xa5a9, 0x0000, 0x731a, 0x721e, 0x7622, 0x7526, 0x78b0, 0xa084,
-+ 0xfffc, 0x78b2, 0x0078, 0x1690, 0x78b0, 0xa085, 0x0001, 0x78b2,
-+ 0x0078, 0x15ae, 0x75d8, 0x76dc, 0x75da, 0x76de, 0x0078, 0x169b,
-+ 0x2029, 0x0000, 0x2530, 0x70c4, 0x72c8, 0x73cc, 0x74d4, 0x70c6,
-+ 0x72ca, 0x73ce, 0x74d6, 0xa005, 0x0040, 0x16c3, 0xa40a, 0x0040,
-+ 0x16ab, 0x00c8, 0x15b0, 0x8001, 0x7892, 0xa084, 0xfc00, 0x0040,
-+ 0x16b8, 0x78b0, 0xc0c5, 0x78b2, 0x2001, 0x4005, 0x0078, 0x15b0,
-+ 0x7a9a, 0x7b9e, 0x7da2, 0x7ea6, 0x7c96, 0x78b0, 0xa084, 0xfcff,
-+ 0x78b2, 0x0078, 0x16c7, 0x78b0, 0xa085, 0x0100, 0x78b2, 0x0078,
-+ 0x15ae, 0x7960, 0x7ac8, 0x0078, 0x15ac, 0x2009, 0x6047, 0x210c,
-+ 0x7808, 0xd0ec, 0x00c0, 0x15ad, 0x2011, 0x6087, 0x2214, 0x0078,
-+ 0x15ac, 0x2009, 0x6048, 0x210c, 0x7808, 0xd0ec, 0x00c0, 0x15ad,
-+ 0x2011, 0x6088, 0x2214, 0x0078, 0x15ac, 0x2061, 0x6040, 0x6124,
-+ 0x6228, 0x8214, 0x8214, 0x8214, 0x7808, 0xd0ec, 0x00c0, 0x16f9,
-+ 0x2061, 0x6080, 0x6324, 0x73da, 0x6328, 0x831c, 0x831c, 0x831c,
-+ 0x73de, 0x0078, 0x15ac, 0x2009, 0x604b, 0x210c, 0x7808, 0xd0ec,
-+ 0x00c0, 0x15ad, 0x2011, 0x608b, 0x2214, 0x0078, 0x15ac, 0x7910,
-+ 0x0078, 0x15ad, 0x2009, 0x0202, 0x210c, 0x7808, 0xd0ec, 0x00c0,
-+ 0x15ad, 0x2011, 0x0102, 0x2214, 0x0078, 0x15ac, 0x2009, 0x604d,
-+ 0x210c, 0x7808, 0xd0ec, 0x00c0, 0x15ad, 0x2011, 0x608d, 0x2214,
-+ 0x0078, 0x15ac, 0x7918, 0x7808, 0xd0ec, 0x00c0, 0x15ad, 0x7a1c,
-+ 0x0078, 0x15ac, 0xd1fc, 0x00c0, 0x1731, 0x2011, 0x64c0, 0x0078,
-+ 0x1733, 0x2011, 0x6540, 0x8107, 0xa084, 0x000f, 0x8003, 0x8003,
-+ 0x8003, 0xa268, 0x6a00, 0x6804, 0xa084, 0x0008, 0x0040, 0x1743,
-+ 0x6b08, 0x0078, 0x1744, 0x6b0c, 0x0078, 0x15ab, 0x2138, 0x1078,
-+ 0x1e6e, 0x2091, 0x8000, 0x6b1c, 0x6a14, 0x2091, 0x8001, 0x2708,
-+ 0x0078, 0x15ab, 0x2061, 0x6040, 0x6114, 0x7808, 0xd0ec, 0x00c0,
-+ 0x15ad, 0x2061, 0x6080, 0x6214, 0x0078, 0x15ac, 0x2138, 0x1078,
-+ 0x1e6e, 0x2091, 0x8000, 0x6908, 0x6a18, 0x6b10, 0x77da, 0x2091,
-+ 0x8001, 0x0078, 0x15ab, 0x2110, 0xa294, 0x000f, 0xa282, 0x0010,
-+ 0x00c8, 0x15a6, 0x1078, 0x2a23, 0xd3f4, 0x0040, 0x1778, 0xc2ad,
-+ 0x0078, 0x15ab, 0x2100, 0xc0bc, 0xa082, 0x0010, 0x00c8, 0x15a6,
-+ 0xd1bc, 0x00c0, 0x1788, 0x2011, 0x6047, 0x2204, 0x0078, 0x178c,
-+ 0x2011, 0x6087, 0x2204, 0xc0bd, 0x007e, 0x2100, 0xc0bc, 0x2012,
-+ 0x1078, 0x297e, 0x017f, 0x0078, 0x15ad, 0x71c4, 0x2021, 0x6048,
-+ 0x2404, 0x70c6, 0x2019, 0x0000, 0x0078, 0x17a4, 0x71c8, 0x2021,
-+ 0x6088, 0x2404, 0x70ca, 0xc3fd, 0x2011, 0x17c3, 0x20a9, 0x0008,
-+ 0x2204, 0xa106, 0x0040, 0x17b3, 0x8210, 0x00f0, 0x17a8, 0x71c4,
-+ 0x72c8, 0x0078, 0x15a5, 0xa292, 0x17c3, 0x027e, 0x2122, 0x017f,
-+ 0x1078, 0x29a1, 0x7808, 0xd0ec, 0x00c0, 0x17c1, 0xd3fc, 0x0040,
-+ 0x179e, 0x0078, 0x15ae, 0x03e8, 0x00fa, 0x01f4, 0x02ee, 0x0004,
-+ 0x0001, 0x0002, 0x0003, 0x2061, 0x6040, 0x6124, 0x6228, 0x8214,
-+ 0x8214, 0x8214, 0x70c4, 0x6026, 0x70c8, 0x8003, 0x8003, 0x8003,
-+ 0x602a, 0x7808, 0xd0ec, 0x00c0, 0x17f1, 0x027e, 0x017e, 0x2061,
-+ 0x6080, 0x6124, 0x6228, 0x8214, 0x8214, 0x8214, 0x70d8, 0x6026,
-+ 0x70dc, 0x8003, 0x8003, 0x8003, 0x602a, 0x71da, 0x72de, 0x017f,
-+ 0x027f, 0x0078, 0x15ac, 0x2061, 0x6040, 0x612c, 0x70c4, 0x602e,
-+ 0x7808, 0xd0ec, 0x00c0, 0x15ad, 0x2061, 0x6080, 0x622c, 0x70c8,
-+ 0x602e, 0x0078, 0x15ac, 0x7910, 0x0078, 0x15ad, 0x71c4, 0xa184,
-+ 0xffcf, 0x0040, 0x1812, 0x7808, 0xd0ec, 0x00c0, 0x15a6, 0x72c8,
-+ 0x0078, 0x15a5, 0x007e, 0x2019, 0x0000, 0x1078, 0x2a08, 0x7808,
-+ 0xd0ec, 0x0040, 0x181e, 0x017f, 0x0078, 0x15ad, 0x71c8, 0xa184,
-+ 0xffcf, 0x0040, 0x1827, 0x2110, 0x71c4, 0x0078, 0x15a5, 0x007e,
-+ 0xc3fd, 0x1078, 0x2a08, 0x027f, 0x017f, 0x0078, 0x15ac, 0x71c4,
-+ 0xa182, 0x0010, 0x0048, 0x183b, 0x7808, 0xd0ec, 0x00c0, 0x15a6,
-+ 0x72c8, 0x0078, 0x15a5, 0x2011, 0x604d, 0x2204, 0x007e, 0x2112,
-+ 0x2019, 0x0000, 0x1078, 0x29e6, 0x7808, 0xd0ec, 0x0040, 0x184b,
-+ 0x017f, 0x0078, 0x15ad, 0x71c8, 0xa182, 0x0010, 0x0048, 0x1854,
-+ 0x2110, 0x71c4, 0x0078, 0x15a5, 0x2011, 0x608d, 0x2204, 0x007e,
-+ 0x2112, 0xc3fd, 0x1078, 0x29e6, 0x027f, 0x017f, 0x0078, 0x15ac,
-+ 0x71c4, 0x72c8, 0xa184, 0xfffd, 0x00c0, 0x15a5, 0xa284, 0xfffd,
-+ 0x00c0, 0x15a5, 0x2100, 0x7918, 0x781a, 0x2200, 0x7a1c, 0x781e,
-+ 0x0078, 0x15ac, 0x017e, 0xd1fc, 0x00c0, 0x187a, 0x2011, 0x64c0,
-+ 0x0078, 0x187c, 0x2011, 0x6540, 0x8107, 0xa084, 0x000f, 0x8003,
-+ 0x8003, 0x8003, 0xa268, 0xa01e, 0x72c8, 0x2091, 0x8000, 0x6800,
-+ 0x007e, 0xa226, 0x0040, 0x18a8, 0x6a02, 0xa484, 0x2000, 0x0040,
-+ 0x1893, 0xa39d, 0x0010, 0xa484, 0x1000, 0x0040, 0x1899, 0xa39d,
-+ 0x0008, 0xa484, 0x4000, 0x0040, 0x18a8, 0x810f, 0xa284, 0x4000,
-+ 0x0040, 0x18a6, 0x1078, 0x2a65, 0x0078, 0x18a8, 0x1078, 0x2a43,
-+ 0x72cc, 0x6808, 0xa206, 0x0040, 0x18ca, 0xa2a4, 0x00ff, 0x780c,
-+ 0xd0e4, 0x00c0, 0x18bb, 0xa482, 0x0028, 0x0048, 0x18c7, 0x0040,
-+ 0x18c7, 0x0078, 0x18bf, 0xa482, 0x0043, 0x0048, 0x18c7, 0x027f,
-+ 0x72ca, 0x017f, 0x71c6, 0x2091, 0x8001, 0x0078, 0x15a7, 0x6a0a,
-+ 0xa39d, 0x000a, 0x6804, 0xa305, 0x6806, 0x027f, 0x6b0c, 0x017f,
-+ 0x2091, 0x8001, 0x0078, 0x15ab, 0x2138, 0x1078, 0x1e6e, 0x2091,
-+ 0x8000, 0x6a14, 0x6b1c, 0x2091, 0x8001, 0x70c8, 0x6816, 0x70cc,
-+ 0x681e, 0x2708, 0x0078, 0x15ab, 0x70c4, 0x2061, 0x6040, 0x6114,
-+ 0x6016, 0x7808, 0xd0ec, 0x00c0, 0x15ad, 0x70c8, 0x2061, 0x6080,
-+ 0x6214, 0x6016, 0x0078, 0x15ac, 0x72c8, 0x73cc, 0xa182, 0x0010,
-+ 0x00c8, 0x15a6, 0x1078, 0x2a87, 0xd3f4, 0x0040, 0x1900, 0xc2ad,
-+ 0x0078, 0x15ab, 0x2138, 0x1078, 0x1e6e, 0x2091, 0x8000, 0x6a08,
-+ 0xa295, 0x0002, 0x6a0a, 0x2091, 0x8001, 0x2708, 0x0078, 0x15ac,
-+ 0x2138, 0x1078, 0x1e6e, 0x2091, 0x8000, 0x6a08, 0xa294, 0xfff9,
-+ 0x6a0a, 0x6804, 0xa005, 0x0040, 0x191f, 0x1078, 0x2852, 0x2091,
-+ 0x8001, 0x2708, 0x0078, 0x15ac, 0x2138, 0x1078, 0x1e6e, 0x2091,
-+ 0x8000, 0x6a08, 0xa295, 0x0004, 0x6a0a, 0x6804, 0xa005, 0x0040,
-+ 0x1933, 0x1078, 0x2852, 0x2091, 0x8001, 0x2708, 0x0078, 0x15ac,
-+ 0x2138, 0x2041, 0x0001, 0x2049, 0x0005, 0x2051, 0x0020, 0x2091,
-+ 0x8000, 0x1078, 0x1e83, 0x2091, 0x8001, 0x2708, 0x6a08, 0x0078,
-+ 0x15ac, 0x2138, 0x780c, 0xd0e4, 0x00c0, 0x195d, 0xd7fc, 0x0040,
-+ 0x1957, 0x1078, 0x1dd3, 0x0040, 0x195d, 0x0078, 0x15b0, 0x1078,
-+ 0x1dc7, 0x0040, 0x195d, 0x0078, 0x15b0, 0x73c8, 0x72cc, 0x77c6,
-+ 0x73ca, 0x72ce, 0x1078, 0x1f20, 0x00c0, 0x1987, 0x6818, 0xa005,
-+ 0x0040, 0x1981, 0x2708, 0x077e, 0x1078, 0x2ab0, 0x077f, 0x00c0,
-+ 0x1981, 0x2001, 0x0015, 0xd7fc, 0x00c0, 0x197a, 0x2061, 0x6040,
-+ 0x0078, 0x197d, 0xc0fd, 0x2061, 0x6080, 0x7822, 0x2091, 0x8001,
-+ 0x007c, 0x2091, 0x8001, 0x2001, 0x4005, 0x0078, 0x15b0, 0x2091,
-+ 0x8001, 0x0078, 0x15ae, 0x2138, 0x780c, 0xd0e4, 0x00c0, 0x199f,
-+ 0xd7fc, 0x0040, 0x1999, 0x1078, 0x1dd3, 0x0040, 0x199f, 0x0078,
-+ 0x15b0, 0x1078, 0x1dc7, 0x0040, 0x199f, 0x0078, 0x15b0, 0x77c6,
-+ 0x2041, 0x0021, 0x2049, 0x0005, 0x2051, 0x0020, 0x2091, 0x8000,
-+ 0x1078, 0x1e83, 0x2009, 0x0016, 0xd7fc, 0x00c0, 0x19b3, 0x2061,
-+ 0x6040, 0x0078, 0x19b6, 0x2061, 0x6080, 0xc1fd, 0x606b, 0x0003,
-+ 0x6083, 0x0000, 0x677a, 0x6087, 0x000f, 0x7922, 0x61f0, 0xc1dc,
-+ 0x61f2, 0x1078, 0x2852, 0x2091, 0x8001, 0x007c, 0x77c8, 0x77ca,
-+ 0x2138, 0x77c6, 0x780c, 0xd0e4, 0x00c0, 0x19dd, 0xd7fc, 0x0040,
-+ 0x19d7, 0x1078, 0x1dd3, 0x0040, 0x19dd, 0x0078, 0x15b0, 0x1078,
-+ 0x1dc7, 0x0040, 0x19dd, 0x0078, 0x15b0, 0xa7bc, 0xff00, 0x2091,
-+ 0x8000, 0x2009, 0x0017, 0xd7fc, 0x00c0, 0x19ea, 0x2061, 0x6040,
-+ 0x0078, 0x19ed, 0x2061, 0x6080, 0xc1fd, 0x6083, 0x0000, 0x606b,
-+ 0x0002, 0x677a, 0x6087, 0x000f, 0x7922, 0x61f0, 0xc1dc, 0x61f2,
-+ 0x1078, 0x2852, 0x2041, 0x0021, 0x2049, 0x0005, 0x2051, 0x0010,
-+ 0x70c8, 0xa005, 0x0040, 0x1a07, 0x60f0, 0xc0fd, 0x60f2, 0x1078,
-+ 0x1e83, 0x70c8, 0x6836, 0x8738, 0xa784, 0x001f, 0x00c0, 0x1a07,
-+ 0x2091, 0x8001, 0x007c, 0x2019, 0x0000, 0x2011, 0x0000, 0x7808,
-+ 0xd0ec, 0x00c0, 0x1a2f, 0x72c8, 0x780c, 0xd0e4, 0x00c0, 0x1a2f,
-+ 0xd284, 0x0040, 0x1a29, 0x1078, 0x1dd3, 0x0040, 0x1a2f, 0x0078,
-+ 0x15b0, 0x1078, 0x1dc7, 0x0040, 0x1a2f, 0x0078, 0x15b0, 0x72ca,
-+ 0x78b0, 0xa084, 0x0003, 0x00c0, 0x1a59, 0x2039, 0x0000, 0xd284,
-+ 0x0040, 0x1a3b, 0xc7fd, 0x2041, 0x0021, 0x2049, 0x0004, 0x2051,
-+ 0x0008, 0x1078, 0x1e6e, 0x2091, 0x8000, 0x6808, 0xc0d4, 0xa80d,
-+ 0x690a, 0x2091, 0x8001, 0x8738, 0xa784, 0x001f, 0x00c0, 0x1a41,
-+ 0xa7bc, 0xff00, 0x873f, 0x8738, 0x873f, 0xa784, 0x0f00, 0x00c0,
-+ 0x1a41, 0x2091, 0x8000, 0x7808, 0xd0ec, 0x0040, 0x1a63, 0x2069,
-+ 0x0100, 0x0078, 0x1a6d, 0x72c8, 0xd284, 0x00c0, 0x1a6b, 0x2069,
-+ 0x0200, 0x0078, 0x1a6d, 0x2069, 0x0100, 0x6808, 0xa084, 0xfffd,
-+ 0x680a, 0x6830, 0xa084, 0x0040, 0x0040, 0x1a90, 0x684b, 0x0004,
-+ 0x20a9, 0x0014, 0x6848, 0xa084, 0x0004, 0x0040, 0x1a81, 0x00f0,
-+ 0x1a7a, 0x684b, 0x0009, 0x20a9, 0x0014, 0x6848, 0xa084, 0x0001,
-+ 0x0040, 0x1a8c, 0x00f0, 0x1a85, 0x20a9, 0x00fa, 0x00f0, 0x1a8e,
-+ 0x2079, 0x6000, 0x2009, 0x0018, 0x7808, 0xd0ec, 0x00c0, 0x1a9c,
-+ 0x72c8, 0xd284, 0x00c0, 0x1aa0, 0x2061, 0x6040, 0x0078, 0x1aa3,
-+ 0x2061, 0x6080, 0xc1fd, 0x6083, 0x0000, 0x7922, 0x606b, 0x0001,
-+ 0x6087, 0x000f, 0x60c3, 0x0000, 0x60c4, 0x60ce, 0x60d2, 0x60f0,
-+ 0xd0b4, 0x0040, 0x1abf, 0xc0b4, 0x60f2, 0x0c7e, 0x60d4, 0xa065,
-+ 0x6008, 0xc0d4, 0x600a, 0x6018, 0x8001, 0x601a, 0x0c7f, 0x60f0,
-+ 0xa084, 0x77ff, 0x60f2, 0x78b0, 0xa085, 0x0002, 0x78b2, 0x83ff,
-+ 0x0040, 0x1acb, 0x007c, 0x681b, 0x0048, 0x2091, 0x8001, 0x007c,
-+ 0x73cc, 0x1078, 0x1a15, 0x69ec, 0x6a48, 0xa185, 0x1800, 0x684a,
-+ 0xa185, 0x0040, 0x68ee, 0x73cc, 0x2021, 0x0004, 0x20a9, 0x09ff,
-+ 0x00f0, 0x1ae0, 0x8421, 0x00c0, 0x1ade, 0x8319, 0x00c0, 0x1adc,
-+ 0x69ee, 0x6a4a, 0x2091, 0x8001, 0x007c, 0xd7fc, 0x00c0, 0x1af4,
-+ 0x2069, 0x6040, 0x0078, 0x1af6, 0x2069, 0x6080, 0x71c4, 0x71c6,
-+ 0x6912, 0x81ff, 0x00c0, 0x1afe, 0x68c3, 0x0001, 0x78b0, 0xa084,
-+ 0xfffd, 0x78b2, 0xa084, 0x0001, 0x00c0, 0x1b08, 0x1078, 0x1f79,
-+ 0x007c, 0x75d8, 0x74dc, 0x75da, 0x74de, 0x0078, 0x1b12, 0x2029,
-+ 0x0000, 0x2520, 0x71c4, 0x73c8, 0x72cc, 0x71c6, 0x73ca, 0x72ce,
-+ 0x2079, 0x6000, 0x7de2, 0x7cde, 0x7bda, 0x7ad6, 0x1078, 0x1e25,
-+ 0x0040, 0x1c14, 0x20a9, 0x0005, 0x20a1, 0x6012, 0x2091, 0x8000,
-+ 0x41a1, 0x2091, 0x8001, 0x2009, 0x0040, 0x1078, 0x21f4, 0x0040,
-+ 0x1b35, 0x1078, 0x1e43, 0x0078, 0x1c14, 0x6004, 0xa08c, 0x00ff,
-+ 0xa18e, 0x0009, 0x00c0, 0x1b40, 0x007e, 0x1078, 0x2750, 0x007f,
-+ 0xa084, 0xff00, 0x8007, 0x8009, 0x0040, 0x1bb3, 0x0c7e, 0x2c68,
-+ 0x1078, 0x1e25, 0x0040, 0x1b86, 0x2c00, 0x689e, 0x8109, 0x00c0,
-+ 0x1b47, 0x609f, 0x0000, 0x0c7f, 0x0c7e, 0x7de0, 0x7cdc, 0x7bd8,
-+ 0x7ad4, 0xa290, 0x0040, 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9,
-+ 0x0000, 0x7de2, 0x7cde, 0x7bda, 0x7ad6, 0x2c68, 0x689c, 0xa065,
-+ 0x0040, 0x1bb2, 0x2009, 0x0040, 0x1078, 0x21f4, 0x00c0, 0x1b9c,
-+ 0x6004, 0xa084, 0x00ff, 0xa086, 0x0002, 0x00c0, 0x1b86, 0x6004,
-+ 0xa084, 0x00ff, 0xa086, 0x000a, 0x00c0, 0x1b82, 0x017e, 0x1078,
-+ 0x274c, 0x017f, 0x2d00, 0x6002, 0x0078, 0x1b55, 0x0c7f, 0x0c7e,
-+ 0x609c, 0x1078, 0x1edb, 0x0c7f, 0x609f, 0x0000, 0x1078, 0x1c18,
-+ 0x2009, 0x000c, 0x6008, 0xa085, 0x0200, 0x600a, 0x1078, 0x1ddf,
-+ 0x1078, 0x1e43, 0x0078, 0x1c14, 0x0c7f, 0x0c7e, 0x609c, 0x1078,
-+ 0x1edb, 0x0c7f, 0x609f, 0x0000, 0x1078, 0x1c18, 0x2009, 0x000c,
-+ 0x6007, 0x0103, 0x601b, 0x0003, 0x1078, 0x1ddf, 0x1078, 0x1e43,
-+ 0x0078, 0x1c14, 0x0c7f, 0x780c, 0xd0e4, 0x00c0, 0x1bd8, 0x6114,
-+ 0xd1fc, 0x0040, 0x1bc1, 0x1078, 0x1dd3, 0x0040, 0x1bd8, 0x0078,
-+ 0x1bc5, 0x1078, 0x1dc7, 0x0040, 0x1bd8, 0x2029, 0x0000, 0x2520,
-+ 0x2009, 0x0018, 0x73c8, 0x72cc, 0x6087, 0x0103, 0x601b, 0x0021,
-+ 0x1078, 0x1ddf, 0x1078, 0x1e43, 0x2001, 0x4007, 0x0078, 0x15b0,
-+ 0x74c4, 0x73c8, 0x72cc, 0x6014, 0x2091, 0x8000, 0x0e7e, 0x2009,
-+ 0x0012, 0xd0fc, 0x00c0, 0x1be8, 0x2071, 0x6040, 0x0078, 0x1beb,
-+ 0x2071, 0x6080, 0xc1fd, 0x7922, 0x706b, 0x0005, 0x71f0, 0xc1dc,
-+ 0x71f2, 0x736e, 0x7272, 0x7476, 0x707a, 0x707f, 0x0000, 0x2c00,
-+ 0x7082, 0xa02e, 0x2530, 0x611c, 0x61a2, 0xa184, 0x0060, 0x0040,
-+ 0x1c03, 0x1078, 0x564a, 0x0e7f, 0x6596, 0x65a6, 0x669a, 0x66aa,
-+ 0x60af, 0x0000, 0x60b3, 0x0000, 0x6714, 0x6023, 0x0000, 0x1078,
-+ 0x2852, 0x2091, 0x8001, 0x007c, 0x70c3, 0x4005, 0x0078, 0x15b1,
-+ 0x20a9, 0x0005, 0x2099, 0x6012, 0x2091, 0x8000, 0x530a, 0x2091,
-+ 0x8001, 0x2100, 0xa210, 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9,
-+ 0x0000, 0x007c, 0x71c4, 0x70c7, 0x0000, 0x7916, 0x0078, 0x15ae,
-+ 0x71c4, 0x71c6, 0x2168, 0x0078, 0x1c37, 0x2069, 0x1000, 0x690c,
-+ 0xa016, 0x2d04, 0xa210, 0x8d68, 0x8109, 0x00c0, 0x1c39, 0xa285,
-+ 0x0000, 0x00c0, 0x1c47, 0x70c3, 0x4000, 0x0078, 0x1c49, 0x70c3,
-+ 0x4003, 0x70ca, 0x0078, 0x15b1, 0x2011, 0x6064, 0xa03e, 0x7908,
-+ 0xd1ec, 0x00c0, 0x1c6a, 0x77c8, 0xd7fc, 0x0040, 0x1c59, 0x2011,
-+ 0x60a4, 0x220c, 0x007e, 0x037e, 0x047e, 0x1078, 0x482c, 0x70c4,
-+ 0xd0fc, 0x047f, 0x037f, 0x007f, 0x00c0, 0x1c6a, 0xa184, 0x7fff,
-+ 0x0078, 0x1c6e, 0x1078, 0x480c, 0xa185, 0x8000, 0x2012, 0x2710,
-+ 0x0078, 0x15ac, 0x017e, 0x2100, 0xc1fc, 0x1078, 0x47fa, 0x017f,
-+ 0xd1fc, 0x00c0, 0x1c7f, 0x2001, 0x6064, 0x0078, 0x1c81, 0x2001,
-+ 0x60a4, 0x2004, 0xa084, 0x8000, 0x6100, 0xa10d, 0x6204, 0x6308,
-+ 0x0078, 0x15ab, 0x0c7e, 0x0d7e, 0x0e7e, 0x0f7e, 0x2091, 0x8000,
-+ 0x2061, 0x0010, 0x60c4, 0xd0fc, 0x00c0, 0x1ca8, 0x2071, 0x6040,
-+ 0x7808, 0xd0ec, 0x0040, 0x1ca2, 0x2079, 0x0100, 0x2019, 0x0020,
-+ 0x0078, 0x1cae, 0x2079, 0x0200, 0x2019, 0x0050, 0x0078, 0x1cae,
-+ 0x2071, 0x6080, 0x2079, 0x0100, 0x2019, 0x0020, 0x7094, 0xa06d,
-+ 0x0040, 0x1d66, 0x6a04, 0xa294, 0x00ff, 0xa286, 0x0007, 0x0040,
-+ 0x1cbd, 0xa286, 0x000f, 0x00c0, 0x1d66, 0x691c, 0xa184, 0x00c0,
-+ 0x0040, 0x1d66, 0xa186, 0x00c0, 0x0040, 0x1d66, 0x6824, 0xa084,
-+ 0xff00, 0xa085, 0x0019, 0x6826, 0x2368, 0x7830, 0xa084, 0x0040,
-+ 0x00c0, 0x1ccd, 0xa184, 0x0080, 0x00c0, 0x1d36, 0x78e4, 0xa084,
-+ 0x0007, 0x8001, 0x00c0, 0x1cd6, 0x71a4, 0x81ff, 0x0040, 0x1cec,
-+ 0x6807, 0x0010, 0x6908, 0x6808, 0xa106, 0x00c0, 0x1ce2, 0x6804,
-+ 0xa084, 0x0010, 0x00c0, 0x1ce7, 0x78b8, 0xa084, 0x801f, 0x00c0,
-+ 0x1cec, 0x7848, 0xa085, 0x000c, 0x784a, 0x71a4, 0x81ff, 0x0040,
-+ 0x1d0b, 0x70a7, 0x0000, 0x6807, 0x0018, 0x6804, 0xa084, 0x0008,
-+ 0x00c0, 0x1cfd, 0x6807, 0x0008, 0x6804, 0xa084, 0x0008, 0x00c0,
-+ 0x1d04, 0x6807, 0x0002, 0x61c4, 0xa18c, 0x0003, 0x0040, 0x1d61,
-+ 0x62c8, 0x63cc, 0x61c6, 0x62ca, 0x63ce, 0x7848, 0xa084, 0x000c,
-+ 0x00c0, 0x1d15, 0x0e7e, 0x2071, 0x6000, 0x724e, 0x7352, 0xae80,
-+ 0x0013, 0x0e7f, 0x1078, 0x54f9, 0x78a3, 0x0000, 0x7858, 0xa084,
-+ 0xedff, 0x785a, 0x70a8, 0xa080, 0x00d9, 0x781a, 0x0f7f, 0x0e7f,
-+ 0x0d7f, 0x0c7f, 0x2091, 0x8001, 0x0078, 0x15ae, 0x78e4, 0xa084,
-+ 0x0007, 0x00c0, 0x1d36, 0x78b8, 0xa084, 0x801f, 0x00c0, 0x1d3b,
-+ 0x7848, 0xa085, 0x000c, 0x784a, 0x7848, 0xa084, 0x000c, 0x00c0,
-+ 0x1d44, 0x71a4, 0x81ff, 0x0040, 0x1d61, 0x6807, 0x0010, 0x70a7,
-+ 0x0000, 0x6807, 0x0018, 0x6804, 0xa084, 0x0008, 0x00c0, 0x1d53,
-+ 0x6807, 0x0008, 0x6804, 0xa084, 0x0008, 0x00c0, 0x1d5a, 0x6807,
-+ 0x0002, 0x70a8, 0xa080, 0x00a7, 0x0078, 0x1d2d, 0x0f7f, 0x0e7f,
-+ 0x0d7f, 0x0c7f, 0x2091, 0x8001, 0x2001, 0x4005, 0x0078, 0x15b0,
-+ 0x795c, 0x71c6, 0x71c4, 0xa182, 0x0003, 0x00c8, 0x15a6, 0x795e,
-+ 0x0078, 0x15ae, 0x795c, 0x71c6, 0x0078, 0x15ae, 0x7900, 0x71c6,
-+ 0x71c4, 0x7902, 0x0078, 0x15ae, 0x7900, 0x71c6, 0x0078, 0x15ae,
-+ 0x7904, 0x70c4, 0x7806, 0x0078, 0x15ad, 0x7804, 0x70c6, 0x0078,
-+ 0x15ae, 0xd1fc, 0x00c0, 0x1d98, 0x2011, 0x64c0, 0x0078, 0x1d9a,
-+ 0x2011, 0x6540, 0x8107, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003,
-+ 0xa268, 0x6a14, 0xd2b4, 0x0040, 0x1da9, 0x2011, 0x0001, 0x0078,
-+ 0x1dab, 0x2011, 0x0000, 0x6b0c, 0x6800, 0x70da, 0x0078, 0x15ab,
-+ 0x780c, 0xd0f4, 0x0040, 0x1dbb, 0x2001, 0x4007, 0x70db, 0x0000,
-+ 0xa005, 0x0078, 0x1dc6, 0xd0fc, 0x0040, 0x1dc5, 0x2001, 0x4007,
-+ 0x70db, 0x0001, 0xa005, 0x0078, 0x1dc6, 0xa006, 0x007c, 0x780c,
-+ 0xd0f4, 0x0040, 0x1dd1, 0x2001, 0x4007, 0x70db, 0x0000, 0x0078,
-+ 0x1dd2, 0xa006, 0x007c, 0x780c, 0xd0fc, 0x0040, 0x1ddd, 0x2001,
-+ 0x4007, 0x70db, 0x0001, 0x0078, 0x1dde, 0xa006, 0x007c, 0xac80,
-+ 0x0001, 0x1078, 0x205e, 0x007c, 0x7112, 0x7003, 0x0001, 0x7007,
-+ 0x0001, 0x2099, 0x0030, 0x20a9, 0x0020, 0xac80, 0x0001, 0x20a0,
-+ 0x7008, 0xd0fc, 0x0040, 0x1df0, 0x7007, 0x0002, 0xa08c, 0x01e0,
-+ 0x00c0, 0x1e20, 0x53a5, 0x7888, 0xa005, 0x0040, 0x1e1f, 0x1078,
-+ 0x1e25, 0x0040, 0x1e0d, 0x2c00, 0x788e, 0x20a9, 0x0020, 0xac80,
-+ 0x0001, 0x20a0, 0x53a5, 0x0078, 0x1e1f, 0x788b, 0x0000, 0x7218,
-+ 0x731c, 0x7420, 0x7524, 0xa292, 0x0040, 0xa39b, 0x0000, 0xa4a3,
-+ 0x0000, 0xa5ab, 0x0000, 0x721a, 0x731e, 0x7422, 0x7526, 0xa006,
-+ 0x7003, 0x0000, 0x7007, 0x0004, 0x007c, 0x2091, 0x8000, 0x7840,
-+ 0xa065, 0x0040, 0x1e2f, 0x2c04, 0x7842, 0x2063, 0x0000, 0x2091,
-+ 0x8001, 0x007c, 0x0f7e, 0x2079, 0x6000, 0x7840, 0xa06d, 0x0040,
-+ 0x1e41, 0x2d04, 0x7842, 0x6803, 0x0000, 0x6807, 0x0000, 0x680b,
-+ 0x0000, 0x0f7f, 0x007c, 0x2091, 0x8000, 0x0f7e, 0x2079, 0x6000,
-+ 0x7840, 0x2062, 0x2c00, 0xa005, 0x00c0, 0x1e50, 0x1078, 0x2bfa,
-+ 0x7842, 0x0f7f, 0x2091, 0x8001, 0x007c, 0x0f7e, 0x2079, 0x6000,
-+ 0x7840, 0x206a, 0x2d00, 0x7842, 0x0f7f, 0x007c, 0x2011, 0xac00,
-+ 0x7a42, 0x7bc8, 0x8319, 0x0040, 0x1e6b, 0xa280, 0x0037, 0x2012,
-+ 0x2010, 0x0078, 0x1e62, 0x2013, 0x0000, 0x007c, 0x017e, 0x2069,
-+ 0x85c0, 0xd7fc, 0x00c0, 0x1e76, 0x2069, 0x65c0, 0xa784, 0x0f00,
-+ 0x800b, 0xa784, 0x001f, 0x8003, 0x8003, 0x8003, 0x8003, 0xa105,
-+ 0xad68, 0x017f, 0x007c, 0x1078, 0x1e6e, 0x2900, 0x682a, 0x2a00,
-+ 0x682e, 0x6808, 0xa084, 0xf9ef, 0xa80d, 0x690a, 0x0e7e, 0xd7fc,
-+ 0x00c0, 0x1e98, 0x2009, 0x6054, 0x2071, 0x6040, 0x0078, 0x1e9c,
-+ 0x2009, 0x6094, 0x2071, 0x6080, 0x210c, 0x6804, 0xa005, 0x0040,
-+ 0x1eac, 0xa116, 0x00c0, 0x1eac, 0x2060, 0x6000, 0x6806, 0x017e,
-+ 0x200b, 0x0000, 0x0078, 0x1eaf, 0x2009, 0x0000, 0x017e, 0x6804,
-+ 0xa065, 0x0040, 0x1ebe, 0x6000, 0x6806, 0x1078, 0x1ef5, 0x1078,
-+ 0x2240, 0x6810, 0x8001, 0x6812, 0x00c0, 0x1eaf, 0x017f, 0x6902,
-+ 0x6906, 0x2d00, 0x2060, 0x1078, 0x2d8b, 0x0e7f, 0x007c, 0xa065,
-+ 0x0040, 0x1eda, 0x2008, 0x609c, 0xa005, 0x0040, 0x1ed5, 0x2062,
-+ 0x609f, 0x0000, 0xa065, 0x0078, 0x1ecb, 0x2079, 0x6000, 0x7840,
-+ 0x7942, 0x2062, 0x007c, 0xa065, 0x0040, 0x1ef4, 0x2008, 0x609c,
-+ 0xa005, 0x0040, 0x1ee9, 0x2062, 0x609f, 0x0000, 0xa065, 0x0078,
-+ 0x1edf, 0x0f7e, 0x2079, 0x6000, 0x2091, 0x8000, 0x7840, 0x7942,
-+ 0x0f7f, 0x2062, 0x2091, 0x8001, 0x007c, 0x6007, 0x0103, 0x608f,
-+ 0x0000, 0x20a9, 0x001c, 0xac80, 0x0005, 0x20a0, 0x2001, 0x0000,
-+ 0x40a4, 0x6828, 0x601a, 0x682c, 0x6022, 0x007c, 0x0e7e, 0xd7fc,
-+ 0x00c0, 0x1f10, 0x2071, 0x6040, 0x2031, 0x60c0, 0x0078, 0x1f14,
-+ 0x2071, 0x6080, 0x2031, 0x62c0, 0x7054, 0xa08c, 0x0200, 0x00c0,
-+ 0x1f1e, 0xa608, 0x2d0a, 0x8000, 0x7056, 0xa006, 0x0e7f, 0x007c,
-+ 0x0f7e, 0xd7fc, 0x00c0, 0x1f28, 0x2079, 0x6040, 0x0078, 0x1f2a,
-+ 0x2079, 0x6080, 0x1078, 0x1e6e, 0x2091, 0x8000, 0x6804, 0x7806,
-+ 0xa065, 0x0040, 0x1f77, 0x0078, 0x1f3b, 0x2c00, 0x7806, 0x6000,
-+ 0xa065, 0x0040, 0x1f77, 0x6010, 0xa306, 0x00c0, 0x1f35, 0x600c,
-+ 0xa206, 0x00c0, 0x1f35, 0x2c28, 0x7850, 0xac06, 0x00c0, 0x1f4a,
-+ 0x0078, 0x1f74, 0x6804, 0xac06, 0x00c0, 0x1f58, 0x6000, 0x2060,
-+ 0x6806, 0xa005, 0x00c0, 0x1f58, 0x6803, 0x0000, 0x0078, 0x1f62,
-+ 0x6400, 0x7804, 0x2060, 0x6402, 0xa486, 0x0000, 0x00c0, 0x1f62,
-+ 0x2c00, 0x6802, 0x2560, 0x0f7f, 0x1078, 0x1ef5, 0x0f7e, 0x601b,
-+ 0x0005, 0x6023, 0x0020, 0x0f7f, 0x1078, 0x2240, 0x0f7e, 0x6810,
-+ 0x8001, 0x1050, 0x2bfa, 0x6812, 0xa085, 0xffff, 0xa005, 0x0f7f,
-+ 0x007c, 0x077e, 0x2700, 0x2039, 0x0000, 0xd0fc, 0x0040, 0x1f81,
-+ 0xc7fd, 0x2041, 0x0021, 0x2049, 0x0004, 0x2051, 0x0008, 0x2091,
-+ 0x8000, 0x1078, 0x1e83, 0x8738, 0xa784, 0x001f, 0x00c0, 0x1f89,
-+ 0xa7bc, 0xff00, 0x873f, 0x8738, 0x873f, 0xa784, 0x0f00, 0x00c0,
-+ 0x1f89, 0x2091, 0x8001, 0x077f, 0x007c, 0x2061, 0x0000, 0x6018,
-+ 0xa084, 0x0001, 0x00c0, 0x1fbe, 0x7808, 0xd08c, 0x0040, 0x1faf,
-+ 0xc08c, 0x780a, 0xc7fc, 0x2069, 0x6040, 0x0078, 0x1fb4, 0xc08d,
-+ 0x780a, 0x2069, 0x6080, 0xc7fd, 0x2091, 0x8000, 0x6818, 0x681b,
-+ 0x0000, 0x2091, 0x8001, 0xa005, 0x00c0, 0x1fbf, 0x007c, 0xa08c,
-+ 0xfff0, 0x0040, 0x1fc5, 0x1078, 0x2bfa, 0x0079, 0x1fc7, 0x1fd7,
-+ 0x1fda, 0x1fe0, 0x1fe4, 0x1fd8, 0x1fe8, 0x1fee, 0x1fd8, 0x1fd8,
-+ 0x2193, 0x21c4, 0x21c8, 0x21ce, 0x1fd8, 0x1fd8, 0x1fd8, 0x007c,
-+ 0x1078, 0x2bfa, 0x1078, 0x1f79, 0x2001, 0x8001, 0x0078, 0x21e3,
-+ 0x2001, 0x8003, 0x0078, 0x21e3, 0x2001, 0x8004, 0x0078, 0x21e3,
-+ 0x1078, 0x1f79, 0x2001, 0x8006, 0x0078, 0x21e3, 0x2001, 0x8007,
-+ 0x0078, 0x21e3, 0x2030, 0x2138, 0xa782, 0x0021, 0x0048, 0x1ffa,
-+ 0x2009, 0x0020, 0x2600, 0x1078, 0x2014, 0x00c0, 0x2013, 0xa7ba,
-+ 0x0020, 0x0048, 0x2012, 0x0040, 0x2012, 0x2708, 0xa6b0, 0x0020,
-+ 0xa290, 0x0040, 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000,
-+ 0x0078, 0x1ff4, 0xa006, 0x007c, 0x81ff, 0x0040, 0x2039, 0x2099,
-+ 0x0030, 0x20a0, 0x700c, 0xa084, 0x03ff, 0x0040, 0x2026, 0x7007,
-+ 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, 0x2021, 0x21a8, 0x810b,
-+ 0x7112, 0x7003, 0x0001, 0x7007, 0x0001, 0x7008, 0x800b, 0x00c8,
-+ 0x202d, 0x7007, 0x0002, 0xa08c, 0x01e0, 0x00c0, 0x2039, 0x53a5,
-+ 0xa006, 0x7003, 0x0000, 0x007c, 0x2030, 0x2138, 0xa782, 0x0021,
-+ 0x0048, 0x2044, 0x2009, 0x0020, 0x2600, 0x1078, 0x205e, 0x00c0,
-+ 0x205d, 0xa7ba, 0x0020, 0x0048, 0x205c, 0x0040, 0x205c, 0x2708,
-+ 0xa6b0, 0x0020, 0xa290, 0x0040, 0xa399, 0x0000, 0xa4a1, 0x0000,
-+ 0xa5a9, 0x0000, 0x0078, 0x203e, 0xa006, 0x007c, 0x81ff, 0x0040,
-+ 0x2096, 0x2098, 0x20a1, 0x0030, 0x700c, 0xa084, 0x03ff, 0x0040,
-+ 0x2069, 0x21a8, 0x810b, 0x7112, 0x7018, 0x007e, 0x701c, 0x007e,
-+ 0x7020, 0x007e, 0x7024, 0x007e, 0x721a, 0x731e, 0x7422, 0x7526,
-+ 0x7003, 0x0000, 0x53a6, 0x7007, 0x0001, 0x7010, 0xa084, 0xf000,
-+ 0x0040, 0x2086, 0x7007, 0x0008, 0x0078, 0x208a, 0x7108, 0x8103,
-+ 0x00c8, 0x207d, 0x007f, 0x7026, 0x007f, 0x7022, 0x007f, 0x701e,
-+ 0x007f, 0x701a, 0x7007, 0x0002, 0xa184, 0x01e0, 0x7003, 0x0000,
-+ 0x7007, 0x0004, 0x007c, 0x0e7e, 0x6914, 0xd1fc, 0x0040, 0x20a4,
-+ 0x2071, 0x6080, 0x0078, 0x20a6, 0x2071, 0x6040, 0x2d08, 0x70b4,
-+ 0x6802, 0xa005, 0x00c0, 0x20ad, 0x71ba, 0x71b6, 0x0e7f, 0x007c,
-+ 0x0f7e, 0x6114, 0xd1fc, 0x0040, 0x20b9, 0x2079, 0x6080, 0x0078,
-+ 0x20bb, 0x2079, 0x6040, 0x2c08, 0x78b4, 0x6002, 0xa005, 0x00c0,
-+ 0x20c2, 0x79ba, 0x79b6, 0x0f7f, 0x007c, 0x2091, 0x8000, 0x0f7e,
-+ 0x6114, 0xd1fc, 0x0040, 0x20d0, 0x2079, 0x6080, 0x0078, 0x20d2,
-+ 0x2079, 0x6040, 0x6003, 0x0000, 0x2c08, 0x78b8, 0xa065, 0x00c0,
-+ 0x20dc, 0x79b6, 0x0078, 0x20dd, 0x6102, 0x79ba, 0x0f7f, 0x2091,
-+ 0x8001, 0x1078, 0x2885, 0x007c, 0x70b4, 0xa06d, 0x0040, 0x20ef,
-+ 0x6800, 0x70b6, 0xa005, 0x00c0, 0x20ee, 0x70ba, 0x8dff, 0x007c,
-+ 0x0d7e, 0x0c7e, 0x0f7e, 0xd3fc, 0x0040, 0x20fa, 0x2079, 0x6080,
-+ 0x0078, 0x20fc, 0x2079, 0x6040, 0xaf80, 0x002d, 0x2060, 0x6000,
-+ 0xa005, 0x0040, 0x2125, 0x2068, 0x6814, 0xa306, 0x00c0, 0x210e,
-+ 0x6828, 0xa084, 0x00ff, 0xa406, 0x0040, 0x2111, 0x2d60, 0x0078,
-+ 0x20ff, 0x6800, 0xa005, 0x6002, 0x00c0, 0x211d, 0xaf80, 0x002d,
-+ 0xac06, 0x0040, 0x211c, 0x2c00, 0x78ba, 0x0d7e, 0x689c, 0xa005,
-+ 0x0040, 0x2124, 0x1078, 0x1ec7, 0x007f, 0x0f7f, 0x0c7f, 0x0d7f,
-+ 0xa005, 0x007c, 0x0d7e, 0x0c7e, 0x0f7e, 0xd0fc, 0x0040, 0x2134,
-+ 0x2079, 0x6080, 0x0078, 0x2136, 0x2079, 0x6040, 0xaf80, 0x002d,
-+ 0x2060, 0x6000, 0xa005, 0x0040, 0x215b, 0x2068, 0x6814, 0xa084,
-+ 0x00ff, 0xa306, 0x0040, 0x2147, 0x2d60, 0x0078, 0x2139, 0x6800,
-+ 0xa005, 0x6002, 0x00c0, 0x2153, 0xaf80, 0x002d, 0xac06, 0x0040,
-+ 0x2152, 0x2c00, 0x78ba, 0x0d7e, 0x689c, 0xa005, 0x0040, 0x215a,
-+ 0x1078, 0x1ec7, 0x007f, 0x0f7f, 0x0c7f, 0x0d7f, 0xa005, 0x007c,
-+ 0x0d7e, 0x0c7e, 0x0f7e, 0xd3fc, 0x0040, 0x216a, 0x2079, 0x6080,
-+ 0x0078, 0x216c, 0x2079, 0x6040, 0xaf80, 0x002d, 0x2060, 0x6000,
-+ 0xa06d, 0x0040, 0x218e, 0x6814, 0xa306, 0x0040, 0x217a, 0x2d60,
-+ 0x0078, 0x216f, 0x6800, 0xa005, 0x6002, 0x00c0, 0x2186, 0xaf80,
-+ 0x002d, 0xac06, 0x0040, 0x2185, 0x2c00, 0x78ba, 0x0d7e, 0x689c,
-+ 0xa005, 0x0040, 0x218d, 0x1078, 0x1ec7, 0x007f, 0x0f7f, 0x0c7f,
-+ 0x0d7f, 0xa005, 0x007c, 0x2091, 0x8000, 0xd7fc, 0x00c0, 0x219c,
-+ 0x2069, 0x6040, 0x0078, 0x219e, 0x2069, 0x6080, 0x6800, 0xa086,
-+ 0x0000, 0x0040, 0x21a8, 0x2091, 0x8001, 0x681b, 0x0009, 0x007c,
-+ 0x6878, 0xd7fc, 0x00c0, 0x21ae, 0x0078, 0x21af, 0xc0fd, 0xa0bc,
-+ 0xff00, 0x2041, 0x0021, 0x2049, 0x0004, 0x2051, 0x0010, 0x1078,
-+ 0x1e83, 0x8738, 0xa784, 0x001f, 0x00c0, 0x21b7, 0x2091, 0x8001,
-+ 0x2001, 0x800a, 0x0078, 0x21e3, 0x2001, 0x800c, 0x0078, 0x21e3,
-+ 0x1078, 0x1f79, 0x2001, 0x800d, 0x0078, 0x21e3, 0x780c, 0xd0e4,
-+ 0x00c0, 0x21e1, 0xd0ec, 0x0040, 0x21db, 0xd7fc, 0x0040, 0x21db,
-+ 0x78e8, 0x0078, 0x21dc, 0x78e4, 0x70c6, 0x2001, 0x800e, 0x0078,
-+ 0x21e3, 0x0078, 0x1fd8, 0x70c2, 0xd7fc, 0x00c0, 0x21eb, 0x70db,
-+ 0x0000, 0x0078, 0x21ed, 0x70db, 0x0001, 0x2061, 0x0000, 0x601b,
-+ 0x0001, 0x2091, 0x4080, 0x007c, 0xac80, 0x0001, 0x81ff, 0x0040,
-+ 0x221f, 0x2099, 0x0030, 0x20a0, 0x700c, 0xa084, 0x03ff, 0x0040,
-+ 0x2201, 0x7018, 0x007e, 0x701c, 0x007e, 0x7020, 0x007e, 0x7024,
-+ 0x007e, 0x7112, 0x81ac, 0x721a, 0x731e, 0x7422, 0x7526, 0x7003,
-+ 0x0001, 0x7007, 0x0001, 0x7008, 0x800b, 0x00c8, 0x2213, 0x7007,
-+ 0x0002, 0xa08c, 0x01e0, 0x00c0, 0x221f, 0x53a5, 0xa006, 0x7003,
-+ 0x0000, 0x7007, 0x0004, 0x007f, 0x7026, 0x007f, 0x7022, 0x007f,
-+ 0x701e, 0x007f, 0x701a, 0x007c, 0x2011, 0x0020, 0x2009, 0x0010,
-+ 0x6b0a, 0x6c0e, 0x6803, 0xfd00, 0x6807, 0x0018, 0x6a1a, 0x2d00,
-+ 0xa0e8, 0x0008, 0xa290, 0x0004, 0x8109, 0x00c0, 0x2230, 0x007c,
-+ 0x6004, 0x2c08, 0x2063, 0x0000, 0x7860, 0x8000, 0x7862, 0x7864,
-+ 0xa005, 0x7966, 0x0040, 0x224f, 0x2c02, 0x0078, 0x2250, 0x796a,
-+ 0x007c, 0x6807, 0x0103, 0x0c7e, 0x2061, 0x6000, 0x2d08, 0x206b,
-+ 0x0000, 0x6060, 0x8000, 0x6062, 0x6064, 0xa005, 0x6166, 0x0040,
-+ 0x2264, 0x2d02, 0x0078, 0x2265, 0x616a, 0x0c7f, 0x007c, 0x2091,
-+ 0x8000, 0x7860, 0x8001, 0x7862, 0x2c04, 0x786a, 0xa005, 0x00c0,
-+ 0x2272, 0x7866, 0x2091, 0x8001, 0x609c, 0xa005, 0x0040, 0x228f,
-+ 0x0c7e, 0x2060, 0x2008, 0x609c, 0xa005, 0x0040, 0x2287, 0x2062,
-+ 0x609f, 0x0000, 0xa065, 0x609c, 0xa005, 0x00c0, 0x227f, 0x2091,
-+ 0x8000, 0x7840, 0x7942, 0x2062, 0x2091, 0x8001, 0x0c7f, 0x2091,
-+ 0x8000, 0x7840, 0x2062, 0x609f, 0x0000, 0x2c00, 0xa005, 0x00c0,
-+ 0x229b, 0x1078, 0x2bfa, 0x7842, 0x2091, 0x8001, 0x007c, 0x7868,
-+ 0xa065, 0x0040, 0x22b1, 0x2091, 0x8000, 0x7860, 0x8001, 0x7862,
-+ 0x2c04, 0x786a, 0xa005, 0x00c0, 0x22af, 0x7866, 0x8000, 0x2091,
-+ 0x8001, 0x007c, 0x20a9, 0x0010, 0xa006, 0x8004, 0x8086, 0x818e,
-+ 0x00c8, 0x22bb, 0xa200, 0x00f0, 0x22b6, 0x8086, 0x818e, 0x007c,
-+ 0x157e, 0x20a9, 0x0010, 0xa005, 0x0040, 0x22e1, 0xa11a, 0x00c8,
-+ 0x22e1, 0x8213, 0x818d, 0x0048, 0x22d4, 0xa11a, 0x00c8, 0x22d5,
-+ 0x00f0, 0x22c9, 0x0078, 0x22d9, 0xa11a, 0x2308, 0x8210, 0x00f0,
-+ 0x22c9, 0x007e, 0x3200, 0xa084, 0xf7ff, 0x2080, 0x007f, 0x157f,
-+ 0x007c, 0x007e, 0x3200, 0xa085, 0x0800, 0x0078, 0x22dd, 0x7d70,
-+ 0x70d0, 0xa506, 0x0040, 0x237c, 0x7808, 0xd0ec, 0x0040, 0x2304,
-+ 0x0e7e, 0x2091, 0x8000, 0x2071, 0x0020, 0x7004, 0xa005, 0x00c0,
-+ 0x2301, 0x7008, 0x0e7f, 0xa086, 0x0008, 0x0040, 0x2304, 0x0078,
-+ 0x237c, 0x0e7f, 0x0078, 0x237c, 0x1078, 0x1e25, 0x0040, 0x237c,
-+ 0x796c, 0x2500, 0x8000, 0xa112, 0x2009, 0x0040, 0x00c8, 0x2313,
-+ 0xa006, 0x0078, 0x231b, 0x72d0, 0xa206, 0x0040, 0x231b, 0x788b,
-+ 0x0001, 0x2009, 0x0080, 0x0c7e, 0x1078, 0x1de4, 0x0c7f, 0x0040,
-+ 0x2364, 0x1078, 0x1e43, 0x788b, 0x0000, 0x7884, 0x8000, 0x7886,
-+ 0xa086, 0x0002, 0x0040, 0x2342, 0x8507, 0x8004, 0x8004, 0x7978,
-+ 0xa108, 0x711a, 0x00c8, 0x2340, 0x7974, 0xa189, 0x0000, 0x711e,
-+ 0x7980, 0xa189, 0x0000, 0x7122, 0x797c, 0xa189, 0x0000, 0x7126,
-+ 0x0078, 0x237c, 0x6014, 0xd0fc, 0x00c0, 0x234a, 0x2069, 0x6040,
-+ 0x0078, 0x234c, 0x2069, 0x6080, 0x2091, 0x8000, 0x681b, 0x0002,
-+ 0x7888, 0xa005, 0x0040, 0x235a, 0x788b, 0x0000, 0x788c, 0x2060,
-+ 0x0078, 0x2342, 0x7887, 0x0000, 0x78b0, 0xa085, 0x0003, 0x78b2,
-+ 0x2091, 0x8001, 0x0078, 0x237c, 0x7887, 0x0000, 0x1078, 0x2721,
-+ 0x6004, 0xa084, 0x000f, 0x1078, 0x237d, 0x7888, 0xa005, 0x0040,
-+ 0x2378, 0x788c, 0x2060, 0x6004, 0xa084, 0x000f, 0x1078, 0x237d,
-+ 0x788b, 0x0000, 0x0078, 0x22e7, 0x007c, 0x0079, 0x237f, 0x238f,
-+ 0x23ad, 0x23cd, 0x238f, 0x23ea, 0x239e, 0x2564, 0x257b, 0x238f,
-+ 0x23ab, 0x23cb, 0x2434, 0x24aa, 0x2502, 0x2514, 0x257b, 0x2039,
-+ 0x0400, 0x78c0, 0xa705, 0x78c2, 0x6008, 0xa705, 0x600a, 0x1078,
-+ 0x25ff, 0x609c, 0x78be, 0x1078, 0x2709, 0x007c, 0x78c0, 0xa084,
-+ 0x0100, 0x0040, 0x23a5, 0x0078, 0x238f, 0x601c, 0xa085, 0x0080,
-+ 0x601e, 0x0078, 0x23b4, 0x1078, 0x2750, 0x78c0, 0xa084, 0x0100,
-+ 0x0040, 0x23b4, 0x0078, 0x238f, 0x78c3, 0x0000, 0x6004, 0x8007,
-+ 0xa084, 0x00ff, 0x78b6, 0x8001, 0x0040, 0x23c8, 0x1078, 0x25ff,
-+ 0x0040, 0x23c8, 0x78c0, 0xa085, 0x0100, 0x78c2, 0x0078, 0x23ca,
-+ 0x0078, 0x261f, 0x007c, 0x1078, 0x274c, 0x78c0, 0xa08c, 0x0e00,
-+ 0x00c0, 0x23d6, 0xa084, 0x0100, 0x00c0, 0x23d8, 0x0078, 0x238f,
-+ 0x1078, 0x25ff, 0x00c0, 0x23e9, 0x6104, 0xa18c, 0x00ff, 0xa186,
-+ 0x0007, 0x0040, 0x25c0, 0xa186, 0x000f, 0x0040, 0x25c0, 0x0078,
-+ 0x261f, 0x007c, 0x78c0, 0xa084, 0x0100, 0x0040, 0x23f1, 0x0078,
-+ 0x238f, 0x78c3, 0x0000, 0x6714, 0x1078, 0x1e6e, 0x2011, 0x0001,
-+ 0x20a9, 0x0001, 0x6018, 0xa084, 0x00ff, 0xa005, 0x0040, 0x2416,
-+ 0x2011, 0x0001, 0xa7bc, 0xff00, 0x20a9, 0x0020, 0xa08e, 0x0001,
-+ 0x0040, 0x2416, 0xa7bc, 0x8000, 0x2011, 0x0002, 0x20a9, 0x0100,
-+ 0xa08e, 0x0002, 0x0040, 0x2416, 0x0078, 0x2431, 0x157e, 0x1078,
-+ 0x1e6e, 0x157f, 0x2091, 0x8000, 0x682b, 0x0000, 0x682f, 0x0000,
-+ 0x6808, 0xa084, 0xffde, 0x680a, 0xade8, 0x0010, 0x2091, 0x8001,
-+ 0x00f0, 0x241a, 0x8211, 0x0040, 0x2431, 0x20a9, 0x0100, 0x0078,
-+ 0x241a, 0x1078, 0x1e43, 0x007c, 0x6114, 0x1078, 0x276d, 0x6900,
-+ 0xa184, 0x0001, 0x0040, 0x244e, 0x6028, 0xa084, 0x00ff, 0x00c0,
-+ 0x25df, 0x6800, 0xa084, 0x0001, 0x0040, 0x25e7, 0x6803, 0x0000,
-+ 0x680b, 0x0000, 0x6807, 0x0000, 0x0078, 0x25ef, 0x2011, 0x0001,
-+ 0x6020, 0xd0f4, 0x0040, 0x2456, 0xa295, 0x0002, 0xd0c4, 0x0040,
-+ 0x245b, 0xa295, 0x0008, 0xd0cc, 0x0040, 0x2460, 0xa295, 0x0400,
-+ 0x601c, 0xa084, 0x0002, 0x0040, 0x2467, 0xa295, 0x0004, 0x602c,
-+ 0xa08c, 0x00ff, 0xa182, 0x0002, 0x0048, 0x25eb, 0xa182, 0x001b,
-+ 0x00c8, 0x25eb, 0x0040, 0x25eb, 0x690e, 0x602c, 0x8007, 0xa08c,
-+ 0x00ff, 0xa182, 0x0002, 0x0048, 0x25eb, 0xa182, 0x001b, 0x00c8,
-+ 0x25eb, 0x0040, 0x25eb, 0x6912, 0x6134, 0xa184, 0x000f, 0x0040,
-+ 0x2491, 0x8000, 0xd0a4, 0x0040, 0x248e, 0x8001, 0xa18c, 0xfff0,
-+ 0xa10d, 0x6922, 0x6030, 0xa005, 0x00c0, 0x2498, 0x2001, 0x001e,
-+ 0x8000, 0x6816, 0x6028, 0xa084, 0x00ff, 0x0040, 0x25e7, 0x6806,
-+ 0x6028, 0x8007, 0xa084, 0x00ff, 0x0040, 0x25e7, 0x680a, 0x6a02,
-+ 0x0078, 0x25ef, 0x6014, 0xd0fc, 0x00c0, 0x24b2, 0x2001, 0x6064,
-+ 0x0078, 0x24b4, 0x2001, 0x60a4, 0x2004, 0xa084, 0x8000, 0x0040,
-+ 0x25e7, 0x6114, 0x1078, 0x276d, 0x2091, 0x8000, 0x6a04, 0x6b08,
-+ 0x6418, 0xa484, 0x0003, 0x0040, 0x24d8, 0x6128, 0xa18c, 0x00ff,
-+ 0x8001, 0x00c0, 0x24d1, 0x2100, 0xa210, 0x0048, 0x24fe, 0x0078,
-+ 0x24d8, 0x8001, 0x00c0, 0x24fe, 0x2100, 0xa212, 0x0048, 0x24fe,
-+ 0xa484, 0x000c, 0x0040, 0x24f2, 0x6128, 0x810f, 0xa18c, 0x00ff,
-+ 0xa082, 0x0004, 0x00c0, 0x24ea, 0x2100, 0xa318, 0x0048, 0x24fe,
-+ 0x0078, 0x24f2, 0xa082, 0x0004, 0x00c0, 0x24fe, 0x2100, 0xa31a,
-+ 0x0048, 0x24fe, 0x6030, 0xa005, 0x0040, 0x24f8, 0x8000, 0x6816,
-+ 0x6a06, 0x6b0a, 0x2091, 0x8001, 0x0078, 0x25ef, 0x2091, 0x8001,
-+ 0x0078, 0x25eb, 0x6114, 0x1078, 0x276d, 0x2091, 0x8000, 0x6b08,
-+ 0x8318, 0x0048, 0x2510, 0x6b0a, 0x2091, 0x8001, 0x0078, 0x25fd,
-+ 0x2091, 0x8001, 0x0078, 0x25eb, 0x6024, 0x8007, 0xa084, 0x00ff,
-+ 0x0040, 0x253a, 0xa086, 0x0080, 0x00c0, 0x2562, 0x20a9, 0x0008,
-+ 0x6014, 0xd0fc, 0x00c0, 0x2528, 0x2069, 0xa7e0, 0x0078, 0x252a,
-+ 0x2069, 0xa900, 0x2091, 0x8000, 0x6800, 0xa084, 0xfcff, 0x6802,
-+ 0xade8, 0x0009, 0x0070, 0x2536, 0x0078, 0x252c, 0x2091, 0x8001,
-+ 0x0078, 0x25ef, 0x6028, 0xa015, 0x0040, 0x2562, 0x6114, 0x1078,
-+ 0x276d, 0x0d7e, 0xade8, 0x0007, 0x2091, 0x8000, 0x6800, 0xa00d,
-+ 0x0040, 0x255f, 0xa206, 0x0040, 0x2550, 0x2168, 0x0078, 0x2546,
-+ 0x0c7e, 0x2160, 0x6000, 0x6802, 0x1078, 0x1e43, 0x0c7f, 0x0d7f,
-+ 0x6808, 0x8000, 0x680a, 0x2091, 0x8001, 0x0078, 0x25fd, 0x2091,
-+ 0x8001, 0x0d7f, 0x0078, 0x25e7, 0x6114, 0x1078, 0x276d, 0x6800,
-+ 0xa084, 0x0001, 0x0040, 0x25d7, 0x2091, 0x8000, 0x6a04, 0x8210,
-+ 0x0048, 0x2577, 0x6a06, 0x2091, 0x8001, 0x0078, 0x25fd, 0x2091,
-+ 0x8001, 0x0078, 0x25eb, 0x6114, 0x1078, 0x276d, 0x60ce, 0x60bb,
-+ 0x0000, 0x6018, 0xa08c, 0xff00, 0x6820, 0xa084, 0x00ff, 0xa105,
-+ 0x601a, 0x6900, 0xa184, 0x0008, 0x0040, 0x2592, 0x6020, 0xa085,
-+ 0x0100, 0x6022, 0xa184, 0x0001, 0x0040, 0x25e7, 0xa184, 0x0100,
-+ 0x00c0, 0x25d3, 0xa184, 0x0200, 0x00c0, 0x25cf, 0x681c, 0xa005,
-+ 0x00c0, 0x25db, 0x6004, 0xa084, 0x00ff, 0xa086, 0x000f, 0x00c0,
-+ 0x25ab, 0x1078, 0x2750, 0x78c3, 0x0000, 0x6004, 0x8007, 0xa084,
-+ 0x00ff, 0x78b6, 0x8001, 0x609f, 0x0000, 0x0040, 0x25c0, 0x1078,
-+ 0x25ff, 0x0040, 0x25c0, 0x78c0, 0xa085, 0x0100, 0x78c2, 0x007c,
-+ 0x78bb, 0x0000, 0x78bf, 0x0000, 0x6024, 0xa084, 0xff00, 0x6026,
-+ 0x1078, 0x4611, 0x00c0, 0x25cd, 0x007c, 0x0078, 0x20c5, 0x2009,
-+ 0x0017, 0x0078, 0x25f1, 0x2009, 0x000e, 0x0078, 0x25f1, 0x2009,
-+ 0x0007, 0x0078, 0x25f1, 0x2009, 0x0035, 0x0078, 0x25f1, 0x2009,
-+ 0x003e, 0x0078, 0x25f1, 0x2009, 0x0004, 0x0078, 0x25f1, 0x2009,
-+ 0x0006, 0x0078, 0x25f1, 0x2009, 0x0016, 0x0078, 0x25f1, 0x2009,
-+ 0x0001, 0x6024, 0xa084, 0xff00, 0xa105, 0x6026, 0x2091, 0x8000,
-+ 0x1078, 0x2240, 0x2091, 0x8001, 0x007c, 0x0078, 0x1e43, 0x609f,
-+ 0x0000, 0x78b8, 0xa06d, 0x2c00, 0x78ba, 0x00c0, 0x260a, 0x78be,
-+ 0x0078, 0x2612, 0x689e, 0x2d00, 0x6002, 0x78bc, 0xad06, 0x00c0,
-+ 0x2612, 0x6002, 0x78b4, 0x8001, 0x78b6, 0x00c0, 0x261e, 0x78c0,
-+ 0xa084, 0xfeff, 0x78c2, 0x78bc, 0x2060, 0xa006, 0x007c, 0x0e7e,
-+ 0xa02e, 0x2530, 0x65ae, 0x65b2, 0x601c, 0x60a2, 0x2048, 0xa984,
-+ 0xe1ff, 0x601e, 0xa984, 0x0060, 0x0040, 0x2630, 0x1078, 0x564a,
-+ 0x6596, 0x65a6, 0x669a, 0x66aa, 0x6714, 0x2071, 0x6080, 0xd7fc,
-+ 0x00c0, 0x263c, 0x2071, 0x6040, 0xa784, 0x0f00, 0x800b, 0xa784,
-+ 0x001f, 0x0040, 0x2647, 0x8003, 0x8003, 0x8003, 0x8003, 0xa105,
-+ 0x71e0, 0xa168, 0x2700, 0x8007, 0xa084, 0x000f, 0x8003, 0x8003,
-+ 0x8003, 0x71e4, 0xa100, 0x60c6, 0x2091, 0x8000, 0x780c, 0xd0c4,
-+ 0x0040, 0x266c, 0xd0ec, 0x0040, 0x2668, 0xd7fc, 0x00c0, 0x2665,
-+ 0xd0f4, 0x00c0, 0x2673, 0x0078, 0x266c, 0xd0fc, 0x00c0, 0x2673,
-+ 0x7808, 0xd0f4, 0x00c0, 0x2673, 0x6e08, 0xd684, 0x0040, 0x26a1,
-+ 0xd9fc, 0x00c0, 0x26a1, 0x2091, 0x8001, 0x1078, 0x1ef5, 0x2091,
-+ 0x8000, 0x1078, 0x2240, 0x2091, 0x8001, 0x78bb, 0x0000, 0x78bf,
-+ 0x0000, 0x780c, 0xd0e4, 0x00c0, 0x2707, 0x780c, 0xd0c4, 0x0040,
-+ 0x2707, 0xd0ec, 0x0040, 0x2699, 0xd7fc, 0x00c0, 0x2694, 0xd0f4,
-+ 0x00c0, 0x269d, 0x0078, 0x2707, 0xd0fc, 0x00c0, 0x269d, 0x0078,
-+ 0x2707, 0x7808, 0xd0f4, 0x0040, 0x2707, 0x601b, 0x0021, 0x0078,
-+ 0x2707, 0x6024, 0xa096, 0x0001, 0x00c0, 0x26a8, 0x8000, 0x6026,
-+ 0x6a10, 0x6814, 0xa202, 0x0048, 0x26b7, 0x0040, 0x26b7, 0x2091,
-+ 0x8001, 0x2039, 0x0200, 0x1078, 0x2709, 0x0078, 0x2707, 0x2c08,
-+ 0xd9fc, 0x0040, 0x26df, 0x6800, 0xa065, 0x0040, 0x26df, 0x6a04,
-+ 0x7000, 0xa084, 0x0002, 0x0040, 0x26d5, 0x7050, 0xa206, 0x00c0,
-+ 0x26d5, 0x6b04, 0x2160, 0x2304, 0x6002, 0xa005, 0x00c0, 0x26d1,
-+ 0x6902, 0x2260, 0x6102, 0x0078, 0x26eb, 0x2d00, 0x2060, 0x1078,
-+ 0x2d8b, 0x6e08, 0x2160, 0x6202, 0x6906, 0x0078, 0x26eb, 0x6800,
-+ 0x6902, 0xa065, 0x0040, 0x26e7, 0x6102, 0x0078, 0x26e8, 0x6906,
-+ 0x2160, 0x6003, 0x0000, 0x2160, 0xd9fc, 0x0040, 0x26f6, 0xa6b4,
-+ 0xffdc, 0x6e0a, 0x682b, 0x0000, 0x682f, 0x0000, 0x6810, 0x8000,
-+ 0x6812, 0x2091, 0x8001, 0xd6b4, 0x0040, 0x2703, 0xa6b6, 0x0040,
-+ 0x6e0a, 0x1078, 0x1f06, 0x78bf, 0x0000, 0x78bb, 0x0000, 0x0e7f,
-+ 0x007c, 0x6008, 0xa705, 0x600a, 0x2091, 0x8000, 0x1078, 0x2240,
-+ 0x2091, 0x8001, 0x78bc, 0xa065, 0x0040, 0x271c, 0x609c, 0x78be,
-+ 0x609f, 0x0000, 0x0078, 0x270c, 0x78bb, 0x0000, 0x78bf, 0x0000,
-+ 0x007c, 0x796c, 0x7870, 0x7b88, 0xd384, 0x0040, 0x272b, 0x8000,
-+ 0xa112, 0x0048, 0x2730, 0xc384, 0x8000, 0xa112, 0x00c8, 0x273d,
-+ 0x7a78, 0x721a, 0x7a74, 0x721e, 0x7a80, 0x7222, 0x7a7c, 0x7226,
-+ 0xa006, 0xd384, 0x0040, 0x273d, 0x8000, 0x7872, 0x70d2, 0x7814,
-+ 0xa005, 0x0040, 0x274b, 0x8001, 0x7816, 0x00c0, 0x274b, 0x0068,
-+ 0x274b, 0x2091, 0x4080, 0x007c, 0x2039, 0x2764, 0x0078, 0x2752,
-+ 0x2039, 0x276a, 0x2704, 0xa005, 0x0040, 0x2763, 0xac00, 0x2068,
-+ 0x6908, 0x6810, 0x6912, 0x680a, 0x690c, 0x6814, 0x6916, 0x680e,
-+ 0x8738, 0x0078, 0x2752, 0x007c, 0x0003, 0x0009, 0x000f, 0x0015,
-+ 0x001b, 0x0000, 0x0015, 0x001b, 0x0000, 0x0c7e, 0x6014, 0x1078,
-+ 0x47fa, 0x2c68, 0x0c7f, 0x007c, 0x78af, 0x0000, 0x2009, 0x6001,
-+ 0x2104, 0xd084, 0x0040, 0x27a3, 0x6004, 0xa086, 0x0103, 0x00c0,
-+ 0x27a3, 0x6114, 0x6018, 0xa105, 0x00c0, 0x27a3, 0x0d7e, 0x2069,
-+ 0x0000, 0x6818, 0xd084, 0x00c0, 0x27a2, 0x600c, 0x70c6, 0x6010,
-+ 0x70ca, 0x70c3, 0x8020, 0x681b, 0x0001, 0x2091, 0x4080, 0x0d7f,
-+ 0x1078, 0x2267, 0x0068, 0x27d7, 0x7868, 0xa065, 0x00c0, 0x2776,
-+ 0x0078, 0x27d7, 0x0d7f, 0x1078, 0x27da, 0x0040, 0x27d2, 0x6204,
-+ 0xa294, 0x00ff, 0xa296, 0x0003, 0x0040, 0x27b5, 0x6204, 0xa296,
-+ 0x0110, 0x00c0, 0x27c3, 0x78af, 0x0001, 0x6204, 0xa294, 0xff00,
-+ 0x8217, 0x8211, 0x0040, 0x27c3, 0x85ff, 0x00c0, 0x27d2, 0x8210,
-+ 0xa202, 0x00c8, 0x27d2, 0x057e, 0x1078, 0x27e9, 0x057f, 0x00c0,
-+ 0x27d2, 0x8528, 0x78ac, 0xa005, 0x00c0, 0x27d2, 0x7868, 0xa065,
-+ 0x00c0, 0x2776, 0x85ff, 0x0040, 0x27d9, 0x2091, 0x4080, 0x7894,
-+ 0x70d6, 0x007c, 0x7b90, 0x7994, 0x70d4, 0xa102, 0x00c0, 0x27e3,
-+ 0x2300, 0xa005, 0x007c, 0x0048, 0x27e7, 0xa302, 0x007c, 0x8002,
-+ 0x007c, 0xa184, 0xff00, 0x0040, 0x27f6, 0x810f, 0x810c, 0x810c,
-+ 0x8004, 0x8004, 0x8007, 0xa100, 0x0078, 0x27f9, 0x8107, 0x8004,
-+ 0x8004, 0x7a9c, 0x7b98, 0x7ca4, 0x7da0, 0xa210, 0xa006, 0xa319,
-+ 0xa421, 0xa529, 0x2009, 0x0020, 0x6004, 0xa086, 0x0103, 0x00c0,
-+ 0x280f, 0x6028, 0xa005, 0x00c0, 0x280f, 0x2009, 0x000c, 0x1078,
-+ 0x1ddf, 0x0040, 0x2832, 0x78a8, 0x8000, 0x78aa, 0xa086, 0x0002,
-+ 0x00c0, 0x2840, 0x6014, 0xd0fc, 0x00c0, 0x2822, 0x2069, 0x6040,
-+ 0x0078, 0x2824, 0x2069, 0x6080, 0x2091, 0x8000, 0x681b, 0x0003,
-+ 0x78ab, 0x0000, 0x78b0, 0xa085, 0x0300, 0x78b2, 0x2091, 0x8001,
-+ 0x0078, 0x2840, 0x78ab, 0x0000, 0x1078, 0x2267, 0x7990, 0x7894,
-+ 0x8000, 0xa10a, 0x00c8, 0x283d, 0xa006, 0x7896, 0x70d6, 0xa006,
-+ 0x2071, 0x0010, 0x2091, 0x8001, 0x007c, 0x2138, 0xd7fc, 0x00c0,
-+ 0x284d, 0x2009, 0x605a, 0x0078, 0x284f, 0x2009, 0x609a, 0x2091,
-+ 0x8000, 0x200a, 0x0f7e, 0xd7fc, 0x00c0, 0x2866, 0x2009, 0x6040,
-+ 0x2001, 0x6002, 0x2004, 0xd0ec, 0x0040, 0x2862, 0x2079, 0x0100,
-+ 0x0078, 0x286a, 0x2079, 0x0200, 0x0078, 0x286a, 0x2009, 0x6080,
-+ 0x2079, 0x0100, 0x2104, 0xa086, 0x0000, 0x00c0, 0x2883, 0xd7fc,
-+ 0x00c0, 0x2876, 0x2009, 0x6044, 0x0078, 0x2878, 0x2009, 0x6084,
-+ 0x2104, 0xa005, 0x00c0, 0x2883, 0x7830, 0xa084, 0x00c0, 0x00c0,
-+ 0x2883, 0x781b, 0x004b, 0x0f7f, 0x007c, 0x0f7e, 0x0e7e, 0x2c00,
-+ 0xa005, 0x00c0, 0x2890, 0xa188, 0x0005, 0x2104, 0x0078, 0x2891,
-+ 0x6014, 0xd0fc, 0x00c0, 0x28a4, 0x2071, 0x6040, 0x2001, 0x6002,
-+ 0x2004, 0xd0ec, 0x0040, 0x28a0, 0x2079, 0x0100, 0x0078, 0x28a8,
-+ 0x2079, 0x0200, 0x0078, 0x28a8, 0x2071, 0x6080, 0x2079, 0x0100,
-+ 0x2091, 0x8000, 0x7000, 0xa086, 0x0000, 0x00c0, 0x28da, 0x0078,
-+ 0x28ce, 0x2c00, 0xa005, 0x00c0, 0x28ba, 0xa188, 0x0005, 0x2104,
-+ 0x0078, 0x28bb, 0x6014, 0xd0fc, 0x00c0, 0x28cc, 0x2001, 0x6002,
-+ 0x2004, 0xd0ec, 0x0040, 0x28c8, 0x2079, 0x0100, 0x0078, 0x28ce,
-+ 0x2079, 0x0200, 0x0078, 0x28ce, 0x2079, 0x0100, 0x7830, 0xa084,
-+ 0x00c0, 0x00c0, 0x28da, 0x2c00, 0xa005, 0x00c0, 0x28d8, 0x2104,
-+ 0x781b, 0x004d, 0x2091, 0x8001, 0x0e7f, 0x0f7f, 0x007c, 0x2009,
-+ 0x0002, 0x2069, 0x6000, 0x6808, 0xd0ec, 0x00c0, 0x2942, 0x2071,
-+ 0x6080, 0x2079, 0x0100, 0x2021, 0x62bf, 0x784b, 0x000f, 0x0098,
-+ 0x28fb, 0x7838, 0x0078, 0x28ed, 0x784b, 0x000f, 0x00a8, 0x28fb,
-+ 0x7838, 0x0078, 0x28f4, 0x20a9, 0x0060, 0x789b, 0x0000, 0x78af,
-+ 0x0000, 0x78af, 0x0000, 0x00f0, 0x28ff, 0x70ab, 0x009d, 0x2019,
-+ 0x5df1, 0x1078, 0x2958, 0x680c, 0xd0e4, 0x0040, 0x2919, 0x789b,
-+ 0x0020, 0x20a9, 0x0010, 0x78af, 0x0000, 0x78af, 0x1020, 0x00f0,
-+ 0x2913, 0x7003, 0x0000, 0x017e, 0xd18c, 0x2009, 0x0000, 0x0040,
-+ 0x2922, 0xc1bd, 0x1078, 0x2b31, 0x017f, 0x701c, 0xa084, 0x000f,
-+ 0x007e, 0x680c, 0xd0e4, 0x007f, 0x00c0, 0x2932, 0xa085, 0x6340,
-+ 0x0078, 0x2934, 0xa085, 0x62c0, 0x7806, 0x780f, 0xb204, 0x7843,
-+ 0x00d8, 0x7853, 0x0080, 0x780b, 0x0008, 0x704f, 0x0008, 0x745a,
-+ 0x7057, 0x0000, 0x8109, 0x0040, 0x2957, 0x2071, 0x6040, 0x6808,
-+ 0xd0ec, 0x0040, 0x2951, 0x2079, 0x0100, 0x2021, 0x60bf, 0x0078,
-+ 0x28ed, 0x2079, 0x0200, 0x2021, 0x60bf, 0x0078, 0x28f4, 0x007c,
-+ 0x137e, 0x147e, 0x157e, 0x047e, 0xaf80, 0x002b, 0x20a0, 0x2304,
-+ 0xa005, 0x789a, 0x0040, 0x2979, 0x8318, 0x2324, 0x8318, 0x2398,
-+ 0x24a8, 0xa484, 0xff00, 0x0040, 0x2971, 0xa482, 0x0100, 0x20a9,
-+ 0x0100, 0x2020, 0x53a6, 0xa005, 0x00c0, 0x2968, 0x3318, 0x0078,
-+ 0x295f, 0x047f, 0x157f, 0x147f, 0x137f, 0x007c, 0x017e, 0x0f7e,
-+ 0xd1bc, 0x00c0, 0x2993, 0x007e, 0x2001, 0x6002, 0x2004, 0xd0ec,
-+ 0x007f, 0x0040, 0x298f, 0x2079, 0x0100, 0x0078, 0x2995, 0x2079,
-+ 0x0200, 0x0078, 0x2995, 0x2079, 0x0100, 0xa18c, 0x000f, 0x7804,
-+ 0xa084, 0xfff0, 0xa105, 0x7806, 0x0f7f, 0x017f, 0x1078, 0x2b31,
-+ 0x007c, 0xd3fc, 0x00c0, 0x29b4, 0x007e, 0x2001, 0x6002, 0x2004,
-+ 0xd0ec, 0x007f, 0x0040, 0x29b0, 0x2011, 0x0101, 0x0078, 0x29b6,
-+ 0x2011, 0x0201, 0x0078, 0x29b6, 0x2011, 0x0101, 0x20a9, 0x0009,
-+ 0x810b, 0x00f0, 0x29b8, 0xa18c, 0x0e00, 0x2204, 0xa084, 0xf1ff,
-+ 0xa105, 0x2012, 0x007c, 0x2019, 0x0002, 0x2001, 0x6002, 0x2004,
-+ 0xd0ec, 0x0040, 0x29d0, 0x8319, 0x2009, 0x0101, 0x0078, 0x29d2,
-+ 0x2009, 0x0101, 0x20a9, 0x0005, 0x8213, 0x00f0, 0x29d4, 0xa294,
-+ 0x00e0, 0x2104, 0xa084, 0xff1f, 0xa205, 0x200a, 0x8319, 0x0040,
-+ 0x29e5, 0x2009, 0x0201, 0x0078, 0x29d2, 0x007c, 0xd3fc, 0x00c0,
-+ 0x29f9, 0x007e, 0x2001, 0x6002, 0x2004, 0xd0ec, 0x007f, 0x0040,
-+ 0x29f5, 0x2011, 0x0101, 0x0078, 0x29fb, 0x2011, 0x0201, 0x0078,
-+ 0x29fb, 0x2011, 0x0101, 0x20a9, 0x000c, 0x810b, 0x00f0, 0x29fd,
-+ 0xa18c, 0xf000, 0x2204, 0xa084, 0x0fff, 0xa105, 0x2012, 0x007c,
-+ 0xd3fc, 0x00c0, 0x2a1b, 0x007e, 0x2001, 0x6002, 0x2004, 0xd0ec,
-+ 0x007f, 0x0040, 0x2a17, 0x2011, 0x0102, 0x0078, 0x2a1d, 0x2011,
-+ 0x0202, 0x0078, 0x2a1d, 0x2011, 0x0102, 0x2204, 0xa084, 0xffcf,
-+ 0xa105, 0x2012, 0x007c, 0x0c7e, 0xd1bc, 0x00c0, 0x2a37, 0x007e,
-+ 0x2001, 0x6002, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x2a33, 0x2061,
-+ 0x0100, 0x0078, 0x2a39, 0x2061, 0x0200, 0x0078, 0x2a39, 0x2061,
-+ 0x0100, 0xc1bc, 0x8103, 0x8003, 0xa080, 0x0020, 0x609a, 0x62ac,
-+ 0x63ac, 0x0c7f, 0x007c, 0x0c7e, 0xd1bc, 0x00c0, 0x2a57, 0x007e,
-+ 0x2001, 0x6002, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x2a53, 0x2061,
-+ 0x0100, 0x0078, 0x2a59, 0x2061, 0x0200, 0x0078, 0x2a59, 0x2061,
-+ 0x0100, 0xc1bc, 0x8103, 0x8003, 0xa080, 0x0022, 0x609a, 0x60a4,
-+ 0xa084, 0xffdf, 0x60ae, 0x0c7f, 0x007c, 0x0c7e, 0xd1bc, 0x00c0,
-+ 0x2a79, 0x007e, 0x2001, 0x6002, 0x2004, 0xd0ec, 0x007f, 0x0040,
-+ 0x2a75, 0x2061, 0x0100, 0x0078, 0x2a7b, 0x2061, 0x0200, 0x0078,
-+ 0x2a7b, 0x2061, 0x0100, 0xc1bc, 0x8103, 0x8003, 0xa080, 0x0022,
-+ 0x609a, 0x60a4, 0xa085, 0x0020, 0x60ae, 0x0c7f, 0x007c, 0x0c7e,
-+ 0xd1bc, 0x00c0, 0x2a9b, 0x007e, 0x2001, 0x6002, 0x2004, 0xd0ec,
-+ 0x007f, 0x0040, 0x2a97, 0x2061, 0x0100, 0x0078, 0x2a9d, 0x2061,
-+ 0x0200, 0x0078, 0x2a9d, 0x2061, 0x0100, 0xc1bc, 0x8103, 0x8003,
-+ 0xa080, 0x0020, 0x609a, 0x60a4, 0xd2ac, 0x0040, 0x2aa9, 0xc2ac,
-+ 0xc3f5, 0x62ae, 0x2010, 0x60a4, 0x63ae, 0x2018, 0x0c7f, 0x007c,
-+ 0x2091, 0x8000, 0x0c7e, 0x0e7e, 0x6818, 0xa005, 0x0040, 0x2b0f,
-+ 0xd1fc, 0x00c0, 0x2abf, 0x2061, 0xa6c0, 0x0078, 0x2ac1, 0x2061,
-+ 0xa7d0, 0x1078, 0x2b17, 0x0040, 0x2af4, 0x20a9, 0x0101, 0xd1fc,
-+ 0x00c0, 0x2ace, 0x2061, 0xa5c0, 0x0078, 0x2ad0, 0x2061, 0xa6d0,
-+ 0x0c7e, 0x1078, 0x2b17, 0x0040, 0x2adb, 0x0c7f, 0x8c60, 0x00f0,
-+ 0x2ad0, 0x0078, 0x2b0f, 0x007f, 0xd1fc, 0x00c0, 0x2ae5, 0x2071,
-+ 0x6040, 0xa082, 0xa5c0, 0x0078, 0x2ae9, 0x2071, 0x6080, 0xa082,
-+ 0xa6d0, 0x707e, 0x717a, 0x2001, 0x0004, 0x706a, 0x7087, 0x000f,
-+ 0x1078, 0x2845, 0x0078, 0x2b0b, 0x60d0, 0xa005, 0x00c0, 0x2b0f,
-+ 0xd1fc, 0x00c0, 0x2aff, 0x2071, 0x6040, 0x0078, 0x2b01, 0x2071,
-+ 0x6080, 0x717a, 0x2c00, 0x7082, 0x2001, 0x0006, 0x706a, 0x7087,
-+ 0x000f, 0x1078, 0x2845, 0x2001, 0x0000, 0x0078, 0x2b11, 0x2001,
-+ 0x0001, 0x2091, 0x8001, 0xa005, 0x0e7f, 0x0c7f, 0x007c, 0x2c04,
-+ 0xa005, 0x0040, 0x2b2e, 0x2060, 0x6010, 0xa306, 0x00c0, 0x2b2b,
-+ 0x600c, 0xa206, 0x00c0, 0x2b2b, 0x6014, 0xa106, 0x00c0, 0x2b2b,
-+ 0xa006, 0x0078, 0x2b30, 0x6000, 0x0078, 0x2b18, 0xa085, 0x0001,
-+ 0x007c, 0x0f7e, 0x0e7e, 0x017e, 0xd1bc, 0x00c0, 0x2b49, 0x2079,
-+ 0x6040, 0x007e, 0x2001, 0x6002, 0x2004, 0xd0ec, 0x007f, 0x0040,
-+ 0x2b45, 0x2071, 0x0100, 0x0078, 0x2b4d, 0x2071, 0x0200, 0x0078,
-+ 0x2b4d, 0x2079, 0x6080, 0x2071, 0x0100, 0x791c, 0xa18c, 0x000f,
-+ 0x70ec, 0xa084, 0x0100, 0x007f, 0x0040, 0x2b64, 0x810b, 0x810b,
-+ 0x810b, 0x810b, 0xd0bc, 0x00c0, 0x2b61, 0xa18d, 0x0f00, 0x0078,
-+ 0x2b63, 0xa18d, 0x0800, 0x2104, 0x0e7f, 0x0f7f, 0x007c, 0x2001,
-+ 0x6001, 0x2004, 0xd0ac, 0x00c0, 0x2b78, 0x68e4, 0xa08c, 0x0020,
-+ 0x0040, 0x2b78, 0xa084, 0x0006, 0x00c0, 0x2b78, 0x1078, 0x2b79,
-+ 0x007c, 0x6014, 0x0e7e, 0x037e, 0x2018, 0x2071, 0x6540, 0xd0fc,
-+ 0x00c0, 0x2b84, 0x2071, 0x64c0, 0x8007, 0xa084, 0x000f, 0x8003,
-+ 0x8003, 0x8003, 0xae70, 0x7004, 0xa084, 0x000a, 0x00c0, 0x2bea,
-+ 0x7108, 0xa194, 0xff00, 0x0040, 0x2bea, 0xa18c, 0x00ff, 0x2001,
-+ 0x000a, 0xa106, 0x0040, 0x2bb7, 0x2001, 0x000c, 0xa106, 0x0040,
-+ 0x2bbb, 0x2001, 0x0012, 0xa106, 0x0040, 0x2bbf, 0x2001, 0x0014,
-+ 0xa106, 0x0040, 0x2bc3, 0x2001, 0x0019, 0xa106, 0x0040, 0x2bc7,
-+ 0x2001, 0x0032, 0xa106, 0x0040, 0x2bcb, 0x0078, 0x2bcf, 0x2009,
-+ 0x000c, 0x0078, 0x2bd0, 0x2009, 0x0012, 0x0078, 0x2bd0, 0x2009,
-+ 0x0014, 0x0078, 0x2bd0, 0x2009, 0x0019, 0x0078, 0x2bd0, 0x2009,
-+ 0x0020, 0x0078, 0x2bd0, 0x2009, 0x003f, 0x0078, 0x2bd0, 0xa016,
-+ 0x2100, 0xa205, 0x700a, 0x7004, 0xa085, 0x000a, 0x7006, 0x2071,
-+ 0x6000, 0x7004, 0xd0bc, 0x0040, 0x2bea, 0xd3fc, 0x00c0, 0x2be5,
-+ 0x73ee, 0x2071, 0x6040, 0x0078, 0x2be8, 0x73f2, 0x2071, 0x6080,
-+ 0x701b, 0x800f, 0x037f, 0x0e7f, 0x007c, 0x2001, 0x6003, 0x2004,
-+ 0xd0e4, 0x00c0, 0x2bf9, 0x7804, 0xa084, 0xff1f, 0xa085, 0x6340,
-+ 0x7806, 0x007c, 0x0068, 0x2bfa, 0x2091, 0x8000, 0x2071, 0x0000,
-+ 0x007e, 0x7018, 0xd084, 0x00c0, 0x2c01, 0x007f, 0x2071, 0x0010,
-+ 0x70ca, 0x007f, 0x70c6, 0x70c3, 0x8002, 0x70db, 0x090b, 0x70df,
-+ 0x0001, 0x2071, 0x0000, 0x701b, 0x0001, 0x2091, 0x4080, 0x0078,
-+ 0x2c17, 0x7f3c, 0x7e58, 0x7c30, 0x7d38, 0xa594, 0x003f, 0xa49c,
-+ 0x0003, 0xa484, 0x000f, 0x0079, 0x2c25, 0x2c37, 0x2c37, 0x2c37,
-+ 0x30a9, 0x4547, 0x2c35, 0x2c5f, 0x2c62, 0x2c35, 0x2c35, 0x2c35,
-+ 0x2c35, 0x2c35, 0x2c35, 0x2c35, 0x2c35, 0x1078, 0x2bfa, 0x8507,
-+ 0xa084, 0x001f, 0x0079, 0x2c3c, 0x2c65, 0x30a9, 0x32d8, 0x33f3,
-+ 0x341e, 0x36b7, 0x39f0, 0x3a6f, 0x3aed, 0x3b81, 0x3c6c, 0x3d13,
-+ 0x2c5f, 0x31d4, 0x39bf, 0x2c5c, 0x49b9, 0x49e0, 0x4bd7, 0x4be3,
-+ 0x4cc7, 0x2c5c, 0x2c5c, 0x4dae, 0x4db2, 0x49b7, 0x2c5c, 0x4b1d,
-+ 0x2c5c, 0x484c, 0x2c62, 0x2c5c, 0x1078, 0x2bfa, 0x007c, 0x781b,
-+ 0x004f, 0x007c, 0x781b, 0x00d6, 0x007c, 0x724a, 0xa584, 0x0001,
-+ 0x00c0, 0x485e, 0x0040, 0x2c78, 0x1078, 0x2bfa, 0x7003, 0x0000,
-+ 0x7053, 0x0000, 0x704b, 0x0000, 0x7043, 0x0000, 0x1078, 0x44fa,
-+ 0x7064, 0xa06d, 0x0040, 0x2c85, 0x70f4, 0xa084, 0x0001, 0x7168,
-+ 0xa105, 0x00c0, 0x2c85, 0x0078, 0x2df1, 0x7068, 0xa084, 0x0007,
-+ 0x0079, 0x2c8a, 0x2c92, 0x2d10, 0x2d19, 0x2d24, 0x2d2f, 0x2dd7,
-+ 0x2d3a, 0x2d10, 0x7830, 0xd0bc, 0x00c0, 0x2c5e, 0x71f0, 0xd1bc,
-+ 0x00c0, 0x2c5e, 0xd1b4, 0x00c0, 0x2cee, 0x70c0, 0xa086, 0x0001,
-+ 0x0040, 0x2c5e, 0x1078, 0x44e0, 0x00c0, 0x2c5e, 0x70d0, 0xa06d,
-+ 0x6800, 0xa065, 0xa055, 0x789b, 0x0010, 0x6b0c, 0x7baa, 0x6808,
-+ 0xa045, 0x6d10, 0x6804, 0xa06d, 0xa05d, 0xa886, 0x0001, 0x0040,
-+ 0x2cbc, 0x69c0, 0x7daa, 0x79aa, 0x68c4, 0xa04d, 0x6e1c, 0x7830,
-+ 0xd0bc, 0x00c0, 0x2c5e, 0x2001, 0x0010, 0x0078, 0x2f58, 0x7064,
-+ 0xa005, 0x00c0, 0x2c5e, 0x1078, 0x44e0, 0x00c0, 0x2c5e, 0x0c7e,
-+ 0x0d7e, 0x70d0, 0xa06d, 0x6800, 0xa065, 0xa055, 0x789b, 0x0010,
-+ 0x6b0c, 0x7baa, 0x6808, 0xa045, 0x6d10, 0x6804, 0xa06d, 0xa05d,
-+ 0xa886, 0x0001, 0x0040, 0x2ce7, 0x69c0, 0x7daa, 0x79aa, 0x68c4,
-+ 0xa04d, 0x6e1c, 0x2001, 0x0020, 0x0078, 0x2f58, 0x1078, 0x44bc,
-+ 0x00c0, 0x2c5e, 0x70d8, 0xa06d, 0x6814, 0xc0fc, 0x8007, 0x7882,
-+ 0x68b4, 0x785a, 0x781b, 0x004f, 0x704c, 0xc08d, 0x780a, 0x68c0,
-+ 0x703e, 0x70f0, 0xc0b4, 0x70f2, 0x70d4, 0xa065, 0x68c4, 0x705e,
-+ 0x7003, 0x0002, 0x2d00, 0x7052, 0xad80, 0x0009, 0x7042, 0x007c,
-+ 0x1078, 0x44bc, 0x00c0, 0x2d18, 0x781b, 0x0048, 0x7003, 0x0004,
-+ 0x007c, 0x1078, 0x44bc, 0x00c0, 0x2d23, 0x2011, 0x000c, 0x1078,
-+ 0x2d4a, 0x7003, 0x0004, 0x007c, 0x1078, 0x44bc, 0x00c0, 0x2d2e,
-+ 0x2011, 0x0006, 0x1078, 0x2d4a, 0x7003, 0x0004, 0x007c, 0x1078,
-+ 0x44bc, 0x00c0, 0x2d39, 0x2011, 0x000d, 0x1078, 0x2d4a, 0x7003,
-+ 0x0004, 0x007c, 0x1078, 0x44bc, 0x00c0, 0x2d49, 0x2011, 0x0006,
-+ 0x1078, 0x2d4a, 0x7080, 0x7083, 0x0000, 0x2068, 0x7052, 0x7003,
-+ 0x0001, 0x007c, 0x7178, 0xc1fc, 0x8107, 0x7882, 0x789b, 0x0010,
-+ 0xa286, 0x000c, 0x00c0, 0x2d59, 0x7aaa, 0x2001, 0x0001, 0x0078,
-+ 0x2d6e, 0xa18c, 0x001f, 0xa18d, 0x00c0, 0x79aa, 0xa286, 0x000d,
-+ 0x0040, 0x2d67, 0x7aaa, 0x2001, 0x0002, 0x0078, 0x2d6e, 0x78ab,
-+ 0x0020, 0x717c, 0x79aa, 0x7aaa, 0x2001, 0x0004, 0x789b, 0x0060,
-+ 0x78aa, 0x785b, 0x0004, 0x781b, 0x00e7, 0x1078, 0x44fa, 0x7087,
-+ 0x000f, 0x70f0, 0xd0b4, 0x0040, 0x2d8a, 0xc0b4, 0x70f2, 0x0c7e,
-+ 0x70d4, 0xa065, 0x6008, 0xa084, 0xfbef, 0x600a, 0x6018, 0x8001,
-+ 0x601a, 0x0c7f, 0x007c, 0x7010, 0xa005, 0x00c0, 0x2d99, 0x70f0,
-+ 0xd0b4, 0x0040, 0x2d9a, 0x70d4, 0xac06, 0x00c0, 0x2d9a, 0x1078,
-+ 0x2d79, 0x007c, 0x017e, 0x71c0, 0xa186, 0x0001, 0x0040, 0x2dcc,
-+ 0x0d7e, 0x027e, 0x2100, 0x2011, 0x0001, 0xa212, 0x70d0, 0x2068,
-+ 0x6800, 0xac06, 0x0040, 0x2db3, 0x8211, 0x0040, 0x2dca, 0x1078,
-+ 0x2dce, 0x0078, 0x2da8, 0x0c7e, 0x2100, 0x2011, 0x0001, 0xa212,
-+ 0x70d0, 0x2068, 0x6800, 0x2060, 0x6008, 0xa084, 0xfbef, 0x600a,
-+ 0x8211, 0x0040, 0x2dc7, 0x1078, 0x2dce, 0x0078, 0x2dba, 0x70c3,
-+ 0x0001, 0x0c7f, 0x027f, 0x0d7f, 0x017f, 0x007c, 0xade8, 0x0005,
-+ 0x70c8, 0xad06, 0x00c0, 0x2dd6, 0x70c4, 0x2068, 0x007c, 0x1078,
-+ 0x44bc, 0x00c0, 0x2c5e, 0x7080, 0x2068, 0x7778, 0x1078, 0x43a8,
-+ 0x2c50, 0x1078, 0x45c9, 0x789b, 0x0010, 0x6814, 0xa084, 0x001f,
-+ 0xc0bd, 0x78aa, 0x6e1c, 0x2041, 0x0001, 0x2001, 0x0004, 0x0078,
-+ 0x2f5e, 0x1078, 0x44bc, 0x00c0, 0x2c5e, 0x789b, 0x0010, 0x7064,
-+ 0x2068, 0x6f14, 0x1078, 0x2d79, 0x1078, 0x43a8, 0x2c50, 0x1078,
-+ 0x45c9, 0x6824, 0xa005, 0x0040, 0x2e0d, 0xa082, 0x0006, 0x0048,
-+ 0x2e0b, 0x0078, 0x2e0d, 0x6827, 0x0005, 0x6b14, 0xa39c, 0x001f,
-+ 0xa39d, 0x00c0, 0x2960, 0x6000, 0x2a60, 0xa084, 0x8000, 0x0040,
-+ 0x2e1d, 0xa684, 0x0001, 0x0040, 0x2e1f, 0xa39c, 0xffbf, 0x7baa,
-+ 0x2031, 0x0020, 0x2041, 0x0001, 0x2001, 0x0003, 0x0078, 0x2f5e,
-+ 0xc28d, 0x72f2, 0x72dc, 0xa200, 0xa015, 0x7158, 0x8108, 0xa12a,
-+ 0x0048, 0x2e33, 0x71dc, 0x2164, 0x6504, 0x85ff, 0x00c0, 0x2e4e,
-+ 0x715a, 0x8421, 0x00c0, 0x2e2e, 0x70f0, 0xd08c, 0x0040, 0x2e46,
-+ 0x70ec, 0xa005, 0x00c0, 0x2e46, 0x70ef, 0x000a, 0x7048, 0xa005,
-+ 0x0040, 0x485e, 0x007c, 0x2200, 0x0078, 0x2e38, 0x70f0, 0xc08c,
-+ 0x70f2, 0x70ef, 0x0000, 0x6034, 0xa005, 0x00c0, 0x2e4b, 0x6708,
-+ 0xa784, 0x073f, 0x0040, 0x2e78, 0xd7d4, 0x00c0, 0x2e4b, 0xa784,
-+ 0x0021, 0x00c0, 0x2e4b, 0xd78c, 0x0040, 0x2e6b, 0xd794, 0x0040,
-+ 0x2e4b, 0xc794, 0x670a, 0xa784, 0x0218, 0x00c0, 0x2e4b, 0xd7c4,
-+ 0x0040, 0x2e78, 0x6018, 0xa005, 0x00c0, 0x2e4b, 0xc7c4, 0x670a,
-+ 0x2568, 0x6823, 0x0000, 0x6e1c, 0xa684, 0x000e, 0x6318, 0x0040,
-+ 0x2e89, 0x601c, 0xa302, 0x0048, 0x2e8c, 0x0040, 0x2e8c, 0x0078,
-+ 0x2e4b, 0x83ff, 0x00c0, 0x2e4b, 0x2d58, 0x2c50, 0x715a, 0x68d3,
-+ 0x0000, 0xd7bc, 0x00c0, 0x2e97, 0x7024, 0x6022, 0x603a, 0xc7bc,
-+ 0x670a, 0x68c4, 0xa065, 0xa04d, 0x6100, 0x2a60, 0x2041, 0x0001,
-+ 0x6b14, 0xa39c, 0x001f, 0xa39d, 0x00c0, 0xd1fc, 0x0040, 0x2eab,
-+ 0xd684, 0x0040, 0x2ead, 0xa39c, 0xffbf, 0xd6a4, 0x0040, 0x2eb2,
-+ 0xa39d, 0x0020, 0xa684, 0x000e, 0x00c0, 0x2f03, 0xc7a5, 0x670a,
-+ 0x2c00, 0x68ca, 0x77c0, 0xa786, 0x0001, 0x00c0, 0x2ed9, 0x70f0,
-+ 0xd0b4, 0x00c0, 0x2ed9, 0x7000, 0xa082, 0x0001, 0x00c8, 0x2ed9,
-+ 0x7010, 0xa005, 0x00c0, 0x2ed9, 0x1078, 0x44e0, 0x00c0, 0x2ed9,
-+ 0x7830, 0xd0bc, 0x00c0, 0x2ed9, 0x789b, 0x0010, 0x7baa, 0x0078,
-+ 0x2f56, 0x8739, 0x77c2, 0x2750, 0x77cc, 0xa7b0, 0x0005, 0x70c8,
-+ 0xa606, 0x00c0, 0x2ee4, 0x76c4, 0x76ce, 0x2c3a, 0x8738, 0x2d3a,
-+ 0x8738, 0x283a, 0x8738, 0x233a, 0x8738, 0x253a, 0x7830, 0xd0bc,
-+ 0x0040, 0x2efa, 0x2091, 0x303d, 0x70f0, 0xa084, 0x303d, 0x2091,
-+ 0x8000, 0x2090, 0xaad5, 0x0000, 0x0040, 0x2f02, 0x8421, 0x2200,
-+ 0x00c0, 0x2e2d, 0x007c, 0xd1dc, 0x0040, 0x3ffb, 0x2029, 0x0020,
-+ 0xd69c, 0x00c0, 0x2f10, 0x8528, 0xd68c, 0x00c0, 0x2f10, 0x8528,
-+ 0x8840, 0x6f14, 0x610c, 0x8108, 0xa18c, 0x00ff, 0x70e8, 0xa160,
-+ 0x2c64, 0x8cff, 0x0040, 0x2f2e, 0x6014, 0xa706, 0x00c0, 0x2f18,
-+ 0x60bc, 0x8001, 0x60be, 0x00c0, 0x2f13, 0x2a60, 0x6008, 0xc0c5,
-+ 0x600a, 0x2200, 0x8421, 0x00c0, 0x2e2d, 0x007c, 0x2a60, 0x610e,
-+ 0x69c2, 0x2c00, 0x68ca, 0x8840, 0x6008, 0xc0d5, 0x600a, 0x77c0,
-+ 0xa786, 0x0001, 0x00c0, 0x2ed9, 0x70f0, 0xd0b4, 0x00c0, 0x2ed9,
-+ 0x7000, 0xa082, 0x0001, 0x00c8, 0x2ed9, 0x7010, 0xa005, 0x00c0,
-+ 0x2ed9, 0x1078, 0x44e0, 0x00c0, 0x2ed9, 0x7830, 0xd0bc, 0x00c0,
-+ 0x2ed9, 0x789b, 0x0010, 0x7baa, 0x7daa, 0x79aa, 0x2001, 0x0002,
-+ 0x007e, 0x6018, 0x8000, 0x601a, 0x0078, 0x2f5f, 0x007e, 0x2960,
-+ 0x6104, 0x2a60, 0xa184, 0x0018, 0x0040, 0x2f7a, 0xa184, 0x0010,
-+ 0x0040, 0x2f6e, 0x1078, 0x4201, 0x00c0, 0x2f9a, 0xd19c, 0x0040,
-+ 0x2f7a, 0x69a0, 0xa184, 0x0600, 0x00c0, 0x2f7a, 0x1078, 0x40f5,
-+ 0x0078, 0x2f9a, 0x69a0, 0xa184, 0x1e00, 0x0040, 0x2fa4, 0xd1dc,
-+ 0x0040, 0x2f90, 0x0c7e, 0x2960, 0x6000, 0xc0ed, 0x6002, 0x6104,
-+ 0xc1a5, 0x6106, 0x0c7f, 0x1078, 0x4201, 0x00c0, 0x2f9a, 0x69a0,
-+ 0xd1cc, 0x0040, 0x2f97, 0x1078, 0x4147, 0x0078, 0x2f9a, 0xd1d4,
-+ 0x00c0, 0x2f76, 0x69a0, 0xd1e4, 0x0040, 0x2fa4, 0x6914, 0xa18c,
-+ 0xff00, 0x810f, 0x1078, 0x2a43, 0x027f, 0xa68c, 0x00e0, 0xa684,
-+ 0x0060, 0x0040, 0x2fb0, 0xa086, 0x0060, 0x00c0, 0x2fb0, 0xc1f5,
-+ 0xa18d, 0x0104, 0x69b6, 0x789b, 0x0060, 0x2800, 0x78aa, 0x6818,
-+ 0xc0fd, 0x681a, 0xd6bc, 0x0040, 0x2fcb, 0xc0fc, 0x708b, 0x0000,
-+ 0xa08a, 0x000d, 0x0050, 0x2fc9, 0xa08a, 0x000c, 0x718a, 0x2001,
-+ 0x000c, 0x800c, 0x718e, 0x78aa, 0x3518, 0x3340, 0x3428, 0x80ac,
-+ 0xaf80, 0x002b, 0x20a0, 0x789b, 0x0000, 0xad80, 0x000b, 0x2098,
-+ 0x53a6, 0x23a8, 0x2898, 0x25a0, 0xa286, 0x0020, 0x00c0, 0x2ffe,
-+ 0x70f0, 0xc0b5, 0x70f2, 0x2c00, 0x70d6, 0x2d00, 0x70da, 0xa286,
-+ 0x0002, 0x0040, 0x302a, 0x70c0, 0x8000, 0x70c2, 0x74d0, 0xa498,
-+ 0x0005, 0x70c8, 0xa306, 0x00c0, 0x2ff6, 0x73c4, 0x73d2, 0xa286,
-+ 0x0010, 0x0040, 0x2c5e, 0x0d7f, 0x0c7f, 0x007c, 0x7000, 0xa005,
-+ 0x00c0, 0x2fe0, 0xa286, 0x0002, 0x00c0, 0x3044, 0x1078, 0x44bc,
-+ 0x00c0, 0x2fe0, 0x6814, 0xc0fc, 0x8007, 0x7882, 0x68b4, 0x785a,
-+ 0x781b, 0x004f, 0x704c, 0xc08d, 0x780a, 0x127e, 0x0d7e, 0x0c7e,
-+ 0x70f0, 0xa084, 0x2700, 0x2090, 0x0c7f, 0x0d7f, 0x127f, 0x2900,
-+ 0x705e, 0x68c0, 0x703e, 0x7003, 0x0002, 0x2d00, 0x7052, 0xad80,
-+ 0x0009, 0x7042, 0x7830, 0xd0bc, 0x0040, 0x3036, 0x2091, 0x303d,
-+ 0x70f0, 0xa084, 0x303d, 0x2091, 0x8000, 0x2090, 0x70c0, 0xa005,
-+ 0x00c0, 0x303b, 0x007c, 0x8421, 0x0040, 0x303a, 0x7254, 0x70dc,
-+ 0xa200, 0xa015, 0x0078, 0x2e2d, 0xa286, 0x0010, 0x00c0, 0x306f,
-+ 0x1078, 0x44bc, 0x00c0, 0x2fe0, 0x6814, 0xc0fc, 0x8007, 0x7882,
-+ 0x68b4, 0x785a, 0x781b, 0x004f, 0x704c, 0xc08d, 0x780a, 0x70c0,
-+ 0x8000, 0x70c2, 0x74d0, 0xa490, 0x0005, 0x70c8, 0xa206, 0x00c0,
-+ 0x3062, 0x72c4, 0x72d2, 0x2900, 0x705e, 0x68c0, 0x703e, 0x7003,
-+ 0x0002, 0x2d00, 0x7052, 0xad80, 0x0009, 0x7042, 0x007c, 0x6bb4,
-+ 0xa39d, 0x2000, 0x7b5a, 0x6814, 0xc0fc, 0x8007, 0x7882, 0x6b94,
-+ 0x7bd6, 0x7bde, 0x6e98, 0x7ed2, 0x7eda, 0x781b, 0x004f, 0x2900,
-+ 0x705e, 0x7202, 0x704c, 0xc08d, 0x780a, 0x7200, 0x2300, 0xa605,
-+ 0x0040, 0x309b, 0x70f0, 0xa084, 0x2700, 0xa086, 0x2300, 0x00c0,
-+ 0x3095, 0x2009, 0x0000, 0x0078, 0x3097, 0x2009, 0x0001, 0xa284,
-+ 0x000f, 0x1079, 0x309f, 0xad80, 0x0009, 0x7042, 0x007c, 0x30a7,
-+ 0x591e, 0x591e, 0x590b, 0x591e, 0x30a7, 0x30a7, 0x30a7, 0x1078,
-+ 0x2bfa, 0x1078, 0x44bc, 0x1078, 0x2bed, 0x7808, 0xa084, 0xfffc,
-+ 0x780a, 0x0f7e, 0x2079, 0x6000, 0x78b0, 0x0f7f, 0xd084, 0x0040,
-+ 0x30d2, 0x7068, 0xa086, 0x0001, 0x00c0, 0x30c0, 0x0078, 0x31a7,
-+ 0x7068, 0xa086, 0x0005, 0x00c0, 0x30d0, 0x7080, 0x2068, 0x681b,
-+ 0x0004, 0x6817, 0x0000, 0x6820, 0xa084, 0x00ff, 0xc09d, 0x6822,
-+ 0x706b, 0x0000, 0x70c3, 0x0000, 0x70c4, 0x70ce, 0x70d2, 0x70f4,
-+ 0xc084, 0x70f6, 0x1078, 0x2d79, 0x2011, 0x0004, 0x7168, 0xa186,
-+ 0x0001, 0x0040, 0x30f2, 0xa186, 0x0007, 0x00c0, 0x30eb, 0x701b,
-+ 0x0005, 0x0078, 0x30f2, 0x701b, 0x0001, 0x70f0, 0xc0dd, 0x70f2,
-+ 0x0078, 0x30f2, 0x2001, 0x6008, 0x203c, 0xd7fc, 0x00c0, 0x30fe,
-+ 0xae86, 0x6040, 0x0040, 0x3102, 0x0078, 0x3108, 0xae86, 0x6080,
-+ 0x00c0, 0x3108, 0xa784, 0x00ff, 0xa086, 0x0018, 0x0040, 0x310f,
-+ 0x7014, 0x7012, 0xa005, 0x00c0, 0x310f, 0x70c3, 0x0001, 0x067e,
-+ 0x1078, 0x55ac, 0x157e, 0x20a9, 0x0010, 0x2039, 0x0000, 0x1078,
-+ 0x42de, 0xa7b8, 0x0100, 0x00f0, 0x3117, 0x157f, 0x067f, 0x7000,
-+ 0x0079, 0x3122, 0x315a, 0x3135, 0x3135, 0x312a, 0x315a, 0x315a,
-+ 0x315a, 0x315a, 0x7064, 0xa005, 0x0040, 0x315a, 0xad06, 0x00c0,
-+ 0x3135, 0x6800, 0x7066, 0x0078, 0x3147, 0x6820, 0xd084, 0x00c0,
-+ 0x3143, 0x6f14, 0x1078, 0x43a8, 0x6008, 0xc0d4, 0x600a, 0x1078,
-+ 0x3fd3, 0x0078, 0x3147, 0x7060, 0x2060, 0x6800, 0x6002, 0xa684,
-+ 0x5f00, 0x681e, 0x6818, 0xd0fc, 0x0040, 0x314f, 0x6a1a, 0x6817,
-+ 0x0000, 0x682b, 0x0000, 0x6820, 0xa084, 0x00ff, 0xc09d, 0x6822,
-+ 0x1078, 0x2251, 0x2011, 0x0004, 0xb284, 0x0400, 0x00c0, 0x3164,
-+ 0x2021, 0xa6c0, 0x0078, 0x3166, 0x2021, 0xa7d0, 0x1078, 0x31b5,
-+ 0xb284, 0x0400, 0x0040, 0x3170, 0x2021, 0x6099, 0x0078, 0x3172,
-+ 0x2021, 0x6059, 0x1078, 0x31b5, 0x157e, 0x20a9, 0x0101, 0xb284,
-+ 0x0400, 0x00c0, 0x317f, 0x2021, 0xa5c0, 0x0078, 0x3181, 0x2021,
-+ 0xa6d0, 0x1078, 0x31b5, 0x8420, 0x00f0, 0x3181, 0xb284, 0x0300,
-+ 0x0040, 0x318e, 0x2061, 0x65c0, 0x0078, 0x3190, 0x2061, 0x85c0,
-+ 0x2021, 0x0002, 0x20a9, 0x0100, 0x6018, 0x6110, 0x81ff, 0x0040,
-+ 0x319d, 0xa102, 0x0050, 0x319d, 0x6012, 0x601b, 0x0000, 0xace0,
-+ 0x0010, 0x00f0, 0x3194, 0x8421, 0x00c0, 0x3192, 0x157f, 0x7090,
-+ 0xa084, 0x8000, 0x0040, 0x31ae, 0x1078, 0x4639, 0x706b, 0x0000,
-+ 0x7003, 0x0000, 0x7053, 0x0000, 0x007c, 0x047e, 0x2404, 0xa005,
-+ 0x0040, 0x31d0, 0x2068, 0x6800, 0x007e, 0x6a1a, 0x6817, 0x0000,
-+ 0x682b, 0x0000, 0x68b4, 0xa084, 0x5f00, 0x681e, 0x6820, 0xa084,
-+ 0x00ff, 0xc09d, 0x6822, 0x1078, 0x2251, 0x007f, 0x0078, 0x31b7,
-+ 0x047f, 0x2023, 0x0000, 0x007c, 0xa282, 0x0003, 0x0050, 0x31da,
-+ 0x1078, 0x2bfa, 0x1078, 0x2bed, 0x2300, 0x0079, 0x31df, 0x31e2,
-+ 0x326d, 0x328a, 0xa282, 0x0002, 0x0040, 0x31e8, 0x1078, 0x2bfa,
-+ 0x7068, 0x706b, 0x0000, 0x7087, 0x0000, 0x0079, 0x31ef, 0x31f7,
-+ 0x31f7, 0x31f9, 0x3239, 0x4007, 0x31f7, 0x3239, 0x31f7, 0x1078,
-+ 0x2bfa, 0x7778, 0x1078, 0x42de, 0x7778, 0xa7bc, 0x8f00, 0x1078,
-+ 0x43a8, 0x6018, 0xa005, 0x0040, 0x3230, 0xd7fc, 0x00c0, 0x320c,
-+ 0x2021, 0xa6c0, 0x0078, 0x320e, 0x2021, 0xa7d0, 0x2009, 0x0005,
-+ 0x2011, 0x0010, 0x1078, 0x32a5, 0x0040, 0x3230, 0x157e, 0x20a9,
-+ 0x0101, 0xd7fc, 0x00c0, 0x3220, 0x2021, 0xa5c0, 0x0078, 0x3222,
-+ 0x2021, 0xa6d0, 0x047e, 0x2009, 0x0005, 0x2011, 0x0010, 0x1078,
-+ 0x32a5, 0x047f, 0x0040, 0x322f, 0x8420, 0x00f0, 0x3222, 0x157f,
-+ 0x8738, 0xa784, 0x001f, 0x00c0, 0x31ff, 0x0078, 0x2c6e, 0x0078,
-+ 0x2c6e, 0x7778, 0x1078, 0x43a8, 0x6018, 0xa005, 0x0040, 0x326b,
-+ 0xd7fc, 0x00c0, 0x3247, 0x2021, 0xa6c0, 0x0078, 0x3249, 0x2021,
-+ 0xa7d0, 0x2009, 0x0005, 0x2011, 0x0020, 0x1078, 0x32a5, 0x0040,
-+ 0x326b, 0x157e, 0x20a9, 0x0101, 0xd7fc, 0x00c0, 0x325b, 0x2021,
-+ 0xa5c0, 0x0078, 0x325d, 0x2021, 0xa6d0, 0x047e, 0x2009, 0x0005,
-+ 0x2011, 0x0020, 0x1078, 0x32a5, 0x047f, 0x0040, 0x326a, 0x8420,
-+ 0x00f0, 0x325d, 0x157f, 0x0078, 0x2c6e, 0x2200, 0x0079, 0x3270,
-+ 0x3273, 0x3275, 0x3275, 0x1078, 0x2bfa, 0x2009, 0x0012, 0x7068,
-+ 0xa086, 0x0002, 0x0040, 0x327e, 0x2009, 0x000e, 0x6818, 0xd0fc,
-+ 0x0040, 0x3283, 0x691a, 0x706b, 0x0000, 0x70f0, 0xc0dd, 0x70f2,
-+ 0x0078, 0x445a, 0x2200, 0x0079, 0x328d, 0x3292, 0x3275, 0x3290,
-+ 0x1078, 0x2bfa, 0x1078, 0x55ac, 0x7000, 0xa086, 0x0002, 0x00c0,
-+ 0x3f81, 0x1078, 0x3fe8, 0x6008, 0xa084, 0xfbef, 0x600a, 0x1078,
-+ 0x3f72, 0x0040, 0x3f81, 0x0078, 0x2c6e, 0x2404, 0xa005, 0x0040,
-+ 0x32d4, 0x2068, 0x2d04, 0x007e, 0x6814, 0xa706, 0x0040, 0x32b4,
-+ 0x2d20, 0x007f, 0x0078, 0x32a6, 0x007f, 0x2022, 0x6817, 0x0000,
-+ 0x682b, 0x0000, 0x68b4, 0xa084, 0x5f00, 0x681e, 0x691a, 0x6820,
-+ 0xa084, 0x00ff, 0xa205, 0x6822, 0x682b, 0x0000, 0x1078, 0x2251,
-+ 0x6010, 0x8001, 0x6012, 0x6008, 0xa084, 0xf9ef, 0x600a, 0x1078,
-+ 0x2d9a, 0x1078, 0x3fe8, 0x007c, 0xa085, 0x0001, 0x0078, 0x32d3,
-+ 0x2300, 0x0079, 0x32db, 0x32e0, 0x32de, 0x3385, 0x1078, 0x2bfa,
-+ 0x78ec, 0xa084, 0x0001, 0x00c0, 0x32f4, 0x7000, 0xa086, 0x0004,
-+ 0x00c0, 0x32ec, 0x0078, 0x332a, 0x1078, 0x3fe8, 0x6008, 0xa084,
-+ 0xf9ef, 0x600a, 0x0078, 0x3f81, 0x78e4, 0xa005, 0x00d0, 0x332a,
-+ 0x3208, 0x007e, 0x2001, 0x6002, 0x2004, 0xd0ec, 0x007f, 0x0040,
-+ 0x3305, 0xa18c, 0x0300, 0x0078, 0x3307, 0xa18c, 0x0400, 0x0040,
-+ 0x330d, 0x0018, 0x2c5e, 0x0078, 0x330f, 0x0028, 0x2c5e, 0x2008,
-+ 0xa084, 0x0030, 0x00c0, 0x3317, 0x781b, 0x004f, 0x007c, 0x78ec,
-+ 0xa084, 0x0003, 0x0040, 0x3314, 0xa184, 0x0007, 0x0079, 0x3320,
-+ 0x3361, 0x336b, 0x3354, 0x3328, 0x44b1, 0x44b1, 0x3328, 0x3378,
-+ 0x1078, 0x2bfa, 0x7000, 0xa086, 0x0004, 0x00c0, 0x3344, 0x7068,
-+ 0xa086, 0x0002, 0x00c0, 0x333a, 0x2011, 0x0002, 0x2019, 0x0000,
-+ 0x0078, 0x31d4, 0x7068, 0xa086, 0x0006, 0x0040, 0x3334, 0x7068,
-+ 0xa086, 0x0004, 0x0040, 0x3334, 0x79e4, 0xa184, 0x0030, 0x0040,
-+ 0x334e, 0x78ec, 0xa084, 0x0003, 0x00c0, 0x3350, 0x0078, 0x39bf,
-+ 0x2001, 0x0003, 0x0078, 0x36cb, 0x6818, 0xd0fc, 0x0040, 0x335a,
-+ 0x681b, 0x001d, 0x1078, 0x42bd, 0x782b, 0x3008, 0x781b, 0x0058,
-+ 0x007c, 0x6818, 0xd0fc, 0x0040, 0x3367, 0x681b, 0x001d, 0x1078,
-+ 0x42bd, 0x0078, 0x4484, 0x6818, 0xd0fc, 0x0040, 0x3371, 0x681b,
-+ 0x001d, 0x1078, 0x42bd, 0x782b, 0x3008, 0x781b, 0x00d3, 0x007c,
-+ 0x6818, 0xd0fc, 0x0040, 0x337e, 0x681b, 0x001d, 0x1078, 0x42bd,
-+ 0x782b, 0x3008, 0x781b, 0x009b, 0x007c, 0xa584, 0x000f, 0x00c0,
-+ 0x33a4, 0x1078, 0x2bed, 0x7000, 0x0079, 0x338e, 0x2c6e, 0x3396,
-+ 0x3398, 0x3f81, 0x3f81, 0x3f81, 0x3396, 0x3396, 0x1078, 0x2bfa,
-+ 0x1078, 0x3fe8, 0x6008, 0xa084, 0xfbef, 0x600a, 0x1078, 0x3f72,
-+ 0x0040, 0x3f81, 0x0078, 0x2c6e, 0x78e4, 0xa005, 0x00d0, 0x332a,
-+ 0x3208, 0x007e, 0x2001, 0x6002, 0x2004, 0xd0ec, 0x007f, 0x0040,
-+ 0x33b5, 0xa18c, 0x0300, 0x0078, 0x33b7, 0xa18c, 0x0400, 0x0040,
-+ 0x33bd, 0x0018, 0x332a, 0x0078, 0x33bf, 0x0028, 0x332a, 0x2008,
-+ 0xa084, 0x0030, 0x00c0, 0x33c7, 0x781b, 0x004f, 0x007c, 0x78ec,
-+ 0xa084, 0x0003, 0x0040, 0x33c4, 0xa184, 0x0007, 0x0079, 0x33d0,
-+ 0x33e1, 0x33e5, 0x33da, 0x33d8, 0x44b1, 0x44b1, 0x33d8, 0x44a9,
-+ 0x1078, 0x2bfa, 0x1078, 0x42c5, 0x782b, 0x3008, 0x781b, 0x0058,
-+ 0x007c, 0x1078, 0x42c5, 0x0078, 0x4484, 0x1078, 0x42c5, 0x782b,
-+ 0x3008, 0x781b, 0x00d3, 0x007c, 0x1078, 0x42c5, 0x782b, 0x3008,
-+ 0x781b, 0x009b, 0x007c, 0x2300, 0x0079, 0x33f6, 0x33fb, 0x33f9,
-+ 0x33fd, 0x1078, 0x2bfa, 0x0078, 0x3b81, 0x681b, 0x0016, 0x78a3,
-+ 0x0000, 0x79e4, 0xa184, 0x0030, 0x0040, 0x3b81, 0x78ec, 0xa084,
-+ 0x0003, 0x0040, 0x3b81, 0xa184, 0x0100, 0x0040, 0x3401, 0xa184,
-+ 0x0007, 0x0079, 0x3413, 0x341b, 0x33e5, 0x3354, 0x445a, 0x44b1,
-+ 0x44b1, 0x445a, 0x44a9, 0x1078, 0x446a, 0x007c, 0xa282, 0x0005,
-+ 0x0050, 0x3424, 0x1078, 0x2bfa, 0x2300, 0x0079, 0x3427, 0x342a,
-+ 0x367d, 0x368a, 0x2200, 0x0079, 0x342d, 0x3447, 0x3434, 0x3447,
-+ 0x3432, 0x3660, 0x1078, 0x2bfa, 0x789b, 0x0018, 0x78a8, 0xa084,
-+ 0x00ff, 0xa082, 0x0020, 0x0048, 0x429c, 0xa08a, 0x0004, 0x00c8,
-+ 0x429c, 0x0079, 0x3443, 0x429c, 0x429c, 0x429c, 0x4246, 0x789b,
-+ 0x0018, 0x79a8, 0xa184, 0x0080, 0x0040, 0x3458, 0x0078, 0x429c,
-+ 0x7000, 0xa005, 0x00c0, 0x344e, 0x2011, 0x0004, 0x0078, 0x3d26,
-+ 0xa184, 0x00ff, 0xa08a, 0x0010, 0x00c8, 0x429c, 0x0079, 0x3460,
-+ 0x3472, 0x3470, 0x3488, 0x348c, 0x355f, 0x429c, 0x429c, 0x3561,
-+ 0x429c, 0x429c, 0x365c, 0x365c, 0x429c, 0x429c, 0x429c, 0x365e,
-+ 0x1078, 0x2bfa, 0xa684, 0x1000, 0x0040, 0x347e, 0x2001, 0x0500,
-+ 0x8000, 0x8000, 0x783a, 0x781b, 0x0094, 0x007c, 0x6818, 0xd0fc,
-+ 0x0040, 0x3486, 0x681b, 0x001d, 0x0078, 0x3476, 0x0078, 0x445a,
-+ 0x681b, 0x001d, 0x0078, 0x42aa, 0x6920, 0x6922, 0xa684, 0x1800,
-+ 0x00c0, 0x34f1, 0x6820, 0xa084, 0x0001, 0x00c0, 0x34f7, 0x6818,
-+ 0xa086, 0x0008, 0x00c0, 0x349e, 0x681b, 0x0000, 0xd6d4, 0x0040,
-+ 0x355c, 0xd6bc, 0x0040, 0x34dd, 0x708b, 0x0000, 0x6818, 0xa084,
-+ 0x003f, 0xa08a, 0x000d, 0x0050, 0x34dd, 0xa08a, 0x000c, 0x718a,
-+ 0x2001, 0x000c, 0x800c, 0x718e, 0x789b, 0x0061, 0x78aa, 0x157e,
-+ 0x137e, 0x147e, 0x017e, 0xb28c, 0x0300, 0x0040, 0x34cf, 0x007e,
-+ 0x2001, 0x6002, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x34cb, 0x20a1,
-+ 0x012b, 0x0078, 0x34d1, 0x20a1, 0x022b, 0x0078, 0x34d1, 0x20a1,
-+ 0x012b, 0x017f, 0x789b, 0x0000, 0x8000, 0x80ac, 0xad80, 0x000b,
-+ 0x2098, 0x53a6, 0x147f, 0x137f, 0x157f, 0x6038, 0xa005, 0x00c0,
-+ 0x34ec, 0x681c, 0xa084, 0x000e, 0x0040, 0x42aa, 0x1078, 0x42c9,
-+ 0x782b, 0x3008, 0x0078, 0x34ee, 0x8001, 0x603a, 0x781b, 0x005a,
-+ 0x007c, 0xd6e4, 0x0040, 0x34f7, 0x781b, 0x0067, 0x007c, 0xa684,
-+ 0x0060, 0x0040, 0x3559, 0xd6dc, 0x0040, 0x3559, 0xd6fc, 0x00c0,
-+ 0x3503, 0x0078, 0x351a, 0xc6fc, 0x7e5a, 0x6eb6, 0x7adc, 0x79d8,
-+ 0x78d0, 0x801b, 0x00c8, 0x350d, 0x8000, 0xa084, 0x003f, 0xa108,
-+ 0xa291, 0x0000, 0x6b98, 0x2100, 0xa302, 0x68b2, 0x6b94, 0x2200,
-+ 0xa303, 0x68ae, 0xd6f4, 0x0040, 0x3520, 0xc6f4, 0x7e5a, 0x6eb6,
-+ 0x7000, 0xa086, 0x0003, 0x00c0, 0x352e, 0x007e, 0x1078, 0x55ac,
-+ 0x1078, 0x591e, 0x007f, 0x781b, 0x0066, 0x007c, 0xa006, 0x1078,
-+ 0x5a6b, 0x6ab0, 0x69ac, 0x6c98, 0x6b94, 0x2200, 0xa105, 0x0040,
-+ 0x353d, 0x2200, 0xa422, 0x2100, 0xa31b, 0x6caa, 0x7cd2, 0x7cda,
-+ 0x6ba6, 0x7bd6, 0x7bde, 0x2300, 0xa405, 0x00c0, 0x354d, 0xc6f5,
-+ 0x7e5a, 0x6eb6, 0x781b, 0x0066, 0x007c, 0x781b, 0x0066, 0x2200,
-+ 0xa115, 0x00c0, 0x3556, 0x1078, 0x591e, 0x007c, 0x1078, 0x5972,
-+ 0x007c, 0x781b, 0x0067, 0x007c, 0x781b, 0x005a, 0x007c, 0x1078,
-+ 0x2bfa, 0x0078, 0x35b1, 0x6920, 0xd1c4, 0x0040, 0x3576, 0xc1c4,
-+ 0x6922, 0x0c7e, 0x705c, 0x2060, 0x6000, 0xc0e4, 0x6002, 0x6004,
-+ 0xa084, 0xfff5, 0x6006, 0x0c7f, 0x0078, 0x35a5, 0xd1cc, 0x0040,
-+ 0x35a5, 0xc1cc, 0x6922, 0x0c7e, 0x705c, 0x2060, 0x6000, 0xc0ec,
-+ 0x6002, 0x6004, 0xc0a4, 0x6006, 0x2008, 0x2c48, 0x0c7f, 0xd19c,
-+ 0x0040, 0x35a5, 0x1078, 0x43a4, 0x1078, 0x40f5, 0x88ff, 0x0040,
-+ 0x35a5, 0x789b, 0x0060, 0x2800, 0x78aa, 0x7e58, 0xc695, 0x7e5a,
-+ 0xd6d4, 0x00c0, 0x35a0, 0x782b, 0x3008, 0x781b, 0x0058, 0x007c,
-+ 0x782b, 0x3008, 0x781b, 0x0067, 0x007c, 0x7e58, 0xd6d4, 0x00c0,
-+ 0x35ac, 0x781b, 0x005a, 0x007c, 0x781b, 0x0067, 0x007c, 0x0078,
-+ 0x42a3, 0xa01e, 0x7990, 0xa18c, 0x0007, 0x00c0, 0x35be, 0x6820,
-+ 0xa084, 0x0100, 0x0040, 0x35af, 0x2009, 0x0008, 0x789b, 0x0010,
-+ 0x78a8, 0xa094, 0x00ff, 0xa286, 0x0001, 0x00c0, 0x35f5, 0x2300,
-+ 0x7ca8, 0xa400, 0x2018, 0xa102, 0x0040, 0x35ed, 0x0048, 0x35d2,
-+ 0x0078, 0x35ef, 0xa380, 0x0002, 0xa102, 0x00c8, 0x35ed, 0x6920,
-+ 0xa18c, 0xfcff, 0x6922, 0x0c7e, 0x705c, 0x2060, 0x6000, 0xa084,
-+ 0xefef, 0x6002, 0x6004, 0xa084, 0xffe5, 0x6006, 0x0c7f, 0x7e58,
-+ 0xa6b4, 0xfffb, 0x7e5a, 0x0078, 0x35a6, 0x0078, 0x3563, 0x24a8,
-+ 0x7aa8, 0x00f0, 0x35ef, 0x0078, 0x35c0, 0xa284, 0x00f0, 0xa086,
-+ 0x0020, 0x00c0, 0x364d, 0x8318, 0x8318, 0x2300, 0xa102, 0x0040,
-+ 0x3605, 0x0048, 0x3605, 0x0078, 0x364a, 0xa286, 0x0023, 0x0040,
-+ 0x35af, 0x681c, 0xa084, 0xfff1, 0x681e, 0x7e58, 0xa684, 0xfff1,
-+ 0xc0a5, 0x2030, 0x7e5a, 0x6008, 0xc0a5, 0x600a, 0x0c7e, 0x705c,
-+ 0x2060, 0x6004, 0x2008, 0x2c48, 0x0c7f, 0xd1a4, 0x0040, 0x3626,
-+ 0x1078, 0x43a4, 0x1078, 0x4201, 0x0078, 0x3634, 0x0c7e, 0x705c,
-+ 0x2060, 0x6004, 0x2008, 0x2c48, 0x0c7f, 0xd19c, 0x0040, 0x35a5,
-+ 0x1078, 0x43a4, 0x1078, 0x40f5, 0x88ff, 0x0040, 0x35a5, 0x789b,
-+ 0x0060, 0x2800, 0x78aa, 0xc695, 0x7e5a, 0xd6d4, 0x00c0, 0x3645,
-+ 0x782b, 0x3008, 0x781b, 0x0058, 0x007c, 0x782b, 0x3008, 0x781b,
-+ 0x0067, 0x007c, 0x7aa8, 0x0078, 0x35c0, 0x8318, 0x2300, 0xa102,
-+ 0x0040, 0x3656, 0x0048, 0x3656, 0x0078, 0x35c0, 0xa284, 0x0080,
-+ 0x00c0, 0x42aa, 0x0078, 0x42a3, 0x0078, 0x42aa, 0x0078, 0x429c,
-+ 0x705c, 0xa04d, 0x789b, 0x0018, 0x78a8, 0xa084, 0x00ff, 0xa08e,
-+ 0x0001, 0x0040, 0x366d, 0x1078, 0x2bfa, 0x7aa8, 0xa294, 0x00ff,
-+ 0x78a8, 0xa084, 0x00ff, 0xa08a, 0x0004, 0x00c8, 0x429c, 0x0079,
-+ 0x3679, 0x429c, 0x4041, 0x429c, 0x41a4, 0xa282, 0x0000, 0x00c0,
-+ 0x3683, 0x1078, 0x2bfa, 0x1078, 0x42bd, 0x782b, 0x3008, 0x781b,
-+ 0x0067, 0x007c, 0xa282, 0x0003, 0x00c0, 0x3690, 0x1078, 0x2bfa,
-+ 0xd4fc, 0x00c0, 0x36b0, 0x7068, 0xa005, 0x0040, 0x3699, 0x1078,
-+ 0x2bfa, 0x6f14, 0x777a, 0xa7bc, 0x8f00, 0x1078, 0x43a8, 0x6008,
-+ 0xa085, 0x0021, 0x600a, 0x8738, 0xa784, 0x001f, 0x00c0, 0x369d,
-+ 0x1078, 0x42c1, 0x706b, 0x0002, 0x701b, 0x0009, 0x0078, 0x36b2,
-+ 0x1078, 0x42cd, 0x782b, 0x3008, 0x781b, 0x0067, 0x007c, 0xa282,
-+ 0x0004, 0x0050, 0x36bd, 0x1078, 0x2bfa, 0x2300, 0x0079, 0x36c0,
-+ 0x36c3, 0x37f4, 0x3825, 0xa286, 0x0003, 0x0040, 0x36c9, 0x1078,
-+ 0x2bfa, 0x2001, 0x0000, 0x7046, 0x68d0, 0xa005, 0x0040, 0x36d2,
-+ 0x7003, 0x0003, 0x68a0, 0xd0ec, 0x0040, 0x36d9, 0x6008, 0xc08d,
-+ 0x600a, 0x7000, 0xa084, 0x000f, 0x0079, 0x36de, 0x2c6e, 0x36eb,
-+ 0x36e8, 0x390e, 0x39a6, 0x2c6e, 0x36e6, 0x36e6, 0x1078, 0x2bfa,
-+ 0x6008, 0xc0d4, 0x600a, 0xd6e4, 0x00c0, 0x36f4, 0x1078, 0x55ac,
-+ 0x2009, 0x0000, 0x0078, 0x379c, 0x7868, 0xa08c, 0x00ff, 0x0040,
-+ 0x3733, 0xa186, 0x0008, 0x00c0, 0x370a, 0x6008, 0xc0a4, 0x600a,
-+ 0x1078, 0x3f72, 0x0040, 0x3733, 0x1078, 0x3fe8, 0x1078, 0x55ac,
-+ 0x0078, 0x371b, 0xa186, 0x0028, 0x00c0, 0x3733, 0x6018, 0xa005,
-+ 0x0040, 0x36fd, 0x8001, 0x0040, 0x36fd, 0x8001, 0x0040, 0x36fd,
-+ 0x601e, 0x0078, 0x36fd, 0x6820, 0xd084, 0x0040, 0x2c6e, 0xc084,
-+ 0x6822, 0x1078, 0x2d8b, 0x7060, 0x0c7e, 0x2060, 0x6800, 0x6002,
-+ 0x0c7f, 0x6004, 0x6802, 0xa005, 0x2d00, 0x00c0, 0x3730, 0x6002,
-+ 0x6006, 0x0078, 0x2c6e, 0x017e, 0x81ff, 0x00c0, 0x3755, 0x71f0,
-+ 0xd1bc, 0x00c0, 0x3755, 0xd1b4, 0x0040, 0x3755, 0x1078, 0x44bc,
-+ 0x00c0, 0x3755, 0x0d7e, 0x70d8, 0xa06d, 0x6814, 0xc0fc, 0x8007,
-+ 0x7882, 0x68b4, 0x785a, 0x781b, 0x004f, 0x704c, 0xc08d, 0x780a,
-+ 0xc1b4, 0x71f2, 0x7003, 0x0030, 0x0d7f, 0x1078, 0x383b, 0x017f,
-+ 0x81ff, 0x0040, 0x379c, 0xa684, 0x5f00, 0x681e, 0x682b, 0x0000,
-+ 0x6f14, 0xa186, 0x0002, 0x00c0, 0x379d, 0x1078, 0x2d79, 0x1078,
-+ 0x2d9a, 0x6820, 0xa084, 0x0800, 0x00c0, 0x379d, 0x8717, 0xa294,
-+ 0x000f, 0x8213, 0x8213, 0x8213, 0xb284, 0x0300, 0x0040, 0x377c,
-+ 0xa290, 0x64c0, 0x0078, 0x377e, 0xa290, 0x6540, 0xa290, 0x0000,
-+ 0x221c, 0xd3c4, 0x00c0, 0x3786, 0x0078, 0x378c, 0x8210, 0x2204,
-+ 0xa085, 0x0018, 0x2012, 0x8211, 0xd3d4, 0x0040, 0x3797, 0x68a0,
-+ 0xd0c4, 0x00c0, 0x3797, 0x1078, 0x38bd, 0x0078, 0x2c6e, 0x6008,
-+ 0xc08d, 0x600a, 0x0078, 0x379d, 0x692a, 0x6916, 0x6818, 0xd0fc,
-+ 0x0040, 0x37a4, 0x7044, 0x681a, 0xa68c, 0x5f00, 0x691e, 0x6010,
-+ 0xa005, 0x0040, 0x37b0, 0x8001, 0x00d0, 0x37b0, 0x1078, 0x2bfa,
-+ 0x6012, 0x6018, 0xa005, 0x0040, 0x37b9, 0x8001, 0x601a, 0x00c0,
-+ 0x37bc, 0x6008, 0xc0a4, 0x600a, 0x6820, 0xd084, 0x00c0, 0x37c8,
-+ 0x6800, 0xa005, 0x00c0, 0x37c5, 0x6002, 0x6006, 0x0078, 0x37cc,
-+ 0x7060, 0x2060, 0x6800, 0x6002, 0x2061, 0x6000, 0x6807, 0x0103,
-+ 0x2d08, 0x206b, 0x0000, 0x6060, 0x8000, 0x6062, 0x6064, 0xa005,
-+ 0x6166, 0x0040, 0x37de, 0x2d02, 0x0078, 0x37df, 0x616a, 0x7000,
-+ 0xa086, 0x0030, 0x00c0, 0x2c6e, 0x7003, 0x0002, 0x70d8, 0xa06d,
-+ 0x68c0, 0x703e, 0x70d4, 0xa065, 0x68c4, 0x705e, 0x2d00, 0x7052,
-+ 0xad80, 0x0009, 0x7042, 0x007c, 0xa282, 0x0004, 0x0048, 0x37fa,
-+ 0x1078, 0x2bfa, 0x2200, 0x0079, 0x37fd, 0x37f8, 0x3801, 0x380d,
-+ 0x3801, 0x7000, 0xa086, 0x0005, 0x0040, 0x380a, 0x1078, 0x42bd,
-+ 0x782b, 0x3008, 0x781b, 0x0067, 0x007c, 0x7890, 0x8007, 0x8001,
-+ 0xa084, 0x0007, 0xa080, 0x0018, 0x789a, 0x79a8, 0xa18c, 0x00ff,
-+ 0xa186, 0x0003, 0x0040, 0x3822, 0xa186, 0x0000, 0x0040, 0x3822,
-+ 0x0078, 0x429c, 0x781b, 0x0067, 0x007c, 0x6820, 0xc095, 0x6822,
-+ 0x82ff, 0x00c0, 0x382f, 0x1078, 0x42bd, 0x0078, 0x3836, 0x8211,
-+ 0x0040, 0x3834, 0x1078, 0x2bfa, 0x1078, 0x42cd, 0x782b, 0x3008,
-+ 0x781b, 0x0067, 0x007c, 0xa684, 0x0060, 0x00c0, 0x3849, 0x2d00,
-+ 0xa005, 0x0040, 0x38bc, 0x682f, 0x0000, 0x6833, 0x0000, 0x0078,
-+ 0x38bc, 0xd6dc, 0x00c0, 0x3861, 0x68b4, 0xd0dc, 0x00c0, 0x3861,
-+ 0x6998, 0x6a94, 0x692e, 0x6a32, 0x7044, 0xa005, 0x00c0, 0x385e,
-+ 0x2200, 0xa105, 0x0040, 0x3860, 0x7047, 0x0015, 0x0078, 0x55ac,
-+ 0x007c, 0xd6ac, 0x0040, 0x388b, 0xd6f4, 0x0040, 0x386d, 0x682f,
-+ 0x0000, 0x6833, 0x0000, 0x0078, 0x55ac, 0x68b4, 0xa084, 0x4000,
-+ 0xa635, 0xd6f4, 0x00c0, 0x3867, 0x7044, 0xa005, 0x00c0, 0x387a,
-+ 0x7047, 0x0015, 0xd6dc, 0x00c0, 0x3885, 0x68b4, 0xd0dc, 0x0040,
-+ 0x3885, 0x69a8, 0x6aa4, 0x0078, 0x3887, 0x79d8, 0x7adc, 0x692e,
-+ 0x6a32, 0x0078, 0x55ac, 0xd6f4, 0x0040, 0x3894, 0x682f, 0x0000,
-+ 0x6833, 0x0000, 0x0078, 0x55ac, 0x68b4, 0xa084, 0x4800, 0xa635,
-+ 0xd6f4, 0x00c0, 0x388e, 0x7044, 0xa005, 0x00c0, 0x38a1, 0x7047,
-+ 0x0015, 0x79d8, 0x7adc, 0x78d0, 0x80fb, 0x00c8, 0x38a8, 0x8000,
-+ 0xa084, 0x003f, 0xa108, 0xa291, 0x0000, 0x692e, 0x6a32, 0x2100,
-+ 0xa205, 0x00c0, 0x38b5, 0x0078, 0x55ac, 0x7000, 0xa086, 0x0006,
-+ 0x0040, 0x38bc, 0x0078, 0x55ac, 0x007c, 0x6008, 0xc0cd, 0xd3cc,
-+ 0x0040, 0x38c3, 0xc08d, 0x600a, 0x6818, 0x68ba, 0x681b, 0x0006,
-+ 0x688f, 0x0000, 0x6893, 0x0000, 0x6a30, 0x692c, 0x6a3e, 0x6942,
-+ 0x682f, 0x0003, 0x6833, 0x0000, 0x6837, 0x0020, 0x6897, 0x0000,
-+ 0x689b, 0x0020, 0x68b3, 0x0000, 0x68af, 0x0000, 0x7000, 0x0079,
-+ 0x38e1, 0x2c6e, 0x38f3, 0x38eb, 0x38e9, 0x38e9, 0x38e9, 0x38e9,
-+ 0x38e9, 0x1078, 0x2bfa, 0x6820, 0xd084, 0x00c0, 0x38f3, 0x1078,
-+ 0x3fd3, 0x0078, 0x38f9, 0x7060, 0x2c50, 0x2060, 0x6800, 0x6002,
-+ 0x2a60, 0xb28c, 0x0300, 0x0040, 0x3901, 0x2021, 0x6059, 0x0078,
-+ 0x3903, 0x2021, 0x6099, 0x2404, 0xa005, 0x0040, 0x390a, 0x2020,
-+ 0x0078, 0x3903, 0x2d22, 0x206b, 0x0000, 0x007c, 0x1078, 0x3fda,
-+ 0x1078, 0x3fe8, 0x6008, 0xc0cc, 0x600a, 0x789b, 0x000e, 0x6f14,
-+ 0x6817, 0x0002, 0xb28c, 0x0300, 0x0040, 0x3922, 0x2009, 0x0000,
-+ 0x0078, 0x3924, 0x2009, 0x0001, 0x1078, 0x5ab0, 0xd6dc, 0x0040,
-+ 0x392c, 0x691c, 0xc1ed, 0x691e, 0x68b8, 0xd0fc, 0x00c0, 0x3933,
-+ 0x681a, 0x0078, 0x3942, 0x6818, 0xd0fc, 0x0040, 0x3942, 0x7868,
-+ 0xa08c, 0x00ff, 0x0040, 0x3940, 0x681b, 0x001e, 0x0078, 0x3942,
-+ 0x681b, 0x0000, 0xb284, 0x0300, 0x00c0, 0x394a, 0x2021, 0x6099,
-+ 0x0078, 0x394c, 0x2021, 0x6059, 0x2404, 0xad06, 0x0040, 0x3951,
-+ 0x7460, 0x6800, 0x2022, 0x68d3, 0x0000, 0x70f4, 0xc084, 0x70f6,
-+ 0x6a3c, 0x6940, 0x6a32, 0x692e, 0x68c4, 0x2060, 0x6000, 0xd0a4,
-+ 0x0040, 0x3996, 0x2041, 0x0021, 0x2049, 0x0005, 0x2051, 0x0020,
-+ 0x0d7e, 0x0f7e, 0x157e, 0x147e, 0x2079, 0x6000, 0x1078, 0x1e83,
-+ 0x147f, 0x157f, 0x0f7f, 0x70e8, 0x2010, 0x2009, 0x0101, 0x027e,
-+ 0x2204, 0xa06d, 0x0040, 0x3986, 0x6814, 0xa706, 0x0040, 0x3983,
-+ 0x6800, 0x0078, 0x3979, 0x6820, 0xc0d5, 0x6822, 0x027f, 0x8210,
-+ 0x8109, 0x00c0, 0x3977, 0x0d7f, 0x706b, 0x0003, 0x7083, 0x0000,
-+ 0x777a, 0x7087, 0x000f, 0x71f0, 0xc1dc, 0x71f2, 0x6818, 0xa086,
-+ 0x0002, 0x00c0, 0x39a2, 0x6817, 0x0000, 0x682b, 0x0000, 0x681c,
-+ 0xc0ec, 0x681e, 0x1078, 0x2251, 0x0078, 0x2c6e, 0x1078, 0x383b,
-+ 0x682b, 0x0000, 0x789b, 0x000e, 0x6f14, 0x1078, 0x44ff, 0xa08c,
-+ 0x00ff, 0x6916, 0x6818, 0xd0fc, 0x0040, 0x39b8, 0x7044, 0x681a,
-+ 0xa68c, 0x5f00, 0x691e, 0x706b, 0x0000, 0x0078, 0x2c6e, 0x7000,
-+ 0xa005, 0x00c0, 0x39c5, 0x0078, 0x2c6e, 0xa006, 0x1078, 0x55ac,
-+ 0x6817, 0x0000, 0x6920, 0xd1ac, 0x00c0, 0x39d0, 0x681b, 0x0014,
-+ 0xa68c, 0x5f00, 0x691e, 0x682b, 0x0000, 0x6820, 0xa084, 0x00ff,
-+ 0x6822, 0x7000, 0x0079, 0x39dc, 0x2c6e, 0x39e9, 0x39e6, 0x39eb,
-+ 0x39eb, 0x39eb, 0x39e4, 0x39e4, 0x1078, 0x2bfa, 0x6008, 0xc0d4,
-+ 0x600a, 0x1078, 0x3fe8, 0x6008, 0xc0a4, 0x600a, 0x0078, 0x3f98,
-+ 0x2300, 0x0079, 0x39f3, 0x39f6, 0x39f8, 0x3a6d, 0x1078, 0x2bfa,
-+ 0xd6fc, 0x00c0, 0x3a53, 0x7000, 0xa00d, 0x0079, 0x39ff, 0x2c6e,
-+ 0x3a0f, 0x3a09, 0x3a3f, 0x3a0f, 0x3a4a, 0x3a07, 0x3a07, 0x1078,
-+ 0x2bfa, 0x6894, 0x78d6, 0x78de, 0x6898, 0x78d2, 0x78da, 0xa684,
-+ 0x0060, 0x0040, 0x3a3f, 0xa086, 0x0060, 0x00c0, 0x3a3c, 0xc6ac,
-+ 0xc6f4, 0xc6ed, 0x7e5a, 0x6eb6, 0x681c, 0xc0ac, 0x681e, 0xa186,
-+ 0x0002, 0x0040, 0x3a2e, 0x1078, 0x55ac, 0x69ac, 0x68b0, 0xa115,
-+ 0x0040, 0x3a2e, 0x1078, 0x5972, 0x0078, 0x3a30, 0x1078, 0x591e,
-+ 0x781b, 0x0067, 0x71f0, 0xd1b4, 0x00c0, 0x2c5e, 0x70c0, 0xa086,
-+ 0x0001, 0x00c0, 0x2cc7, 0x007c, 0xd6ec, 0x0040, 0x3a19, 0x6818,
-+ 0xd0fc, 0x0040, 0x3a4a, 0x681b, 0x0015, 0xd6f4, 0x0040, 0x3a4a,
-+ 0x681b, 0x0007, 0x1078, 0x446a, 0x007c, 0x78cb, 0x0000, 0x781b,
-+ 0x00cf, 0x0078, 0x2c5e, 0xc6fc, 0x7e5a, 0x7adc, 0x79d8, 0x78d0,
-+ 0x79d2, 0x801b, 0x00c8, 0x3a5d, 0x8000, 0xa084, 0x003f, 0xa108,
-+ 0xa291, 0x0000, 0x6b98, 0x2100, 0xa302, 0x68b2, 0x6b94, 0x2200,
-+ 0xa303, 0x68ae, 0x781b, 0x0067, 0x007c, 0x1078, 0x2bfa, 0x2300,
-+ 0x0079, 0x3a72, 0x3a75, 0x3a77, 0x3ad7, 0x1078, 0x2bfa, 0xd6fc,
-+ 0x00c0, 0x3ac7, 0x7000, 0xa00d, 0x0079, 0x3a7e, 0x2c6e, 0x3a8e,
-+ 0x3a88, 0x3abe, 0x3a8e, 0x3ac4, 0x3a86, 0x3a86, 0x1078, 0x2bfa,
-+ 0x6894, 0x78d6, 0x78de, 0x6898, 0x78d2, 0x78da, 0xa684, 0x0060,
-+ 0x0040, 0x3abe, 0xa086, 0x0060, 0x00c0, 0x3abb, 0xa6b4, 0xbfbf,
-+ 0xc6ed, 0x7e5a, 0x6eb6, 0xa186, 0x0002, 0x0040, 0x3aaa, 0x1078,
-+ 0x55ac, 0x69ac, 0x68b0, 0xa115, 0x0040, 0x3aaa, 0x1078, 0x5972,
-+ 0x0078, 0x3aac, 0x1078, 0x591e, 0x781b, 0x0067, 0x681c, 0xc0b4,
-+ 0x681e, 0x71f0, 0xd1b4, 0x00c0, 0x2c5e, 0x70c0, 0xa086, 0x0001,
-+ 0x00c0, 0x2cc7, 0x007c, 0xd6ec, 0x0040, 0x3a98, 0x6818, 0xd0fc,
-+ 0x0040, 0x3ac4, 0x681b, 0x0007, 0x781b, 0x00d3, 0x007c, 0xc6fc,
-+ 0x7e5a, 0x7adc, 0x79d8, 0x6b98, 0x2100, 0xa302, 0x68b2, 0x6b94,
-+ 0x2200, 0xa303, 0x68ae, 0x79d2, 0x781b, 0x0067, 0x007c, 0xd6dc,
-+ 0x0040, 0x3ae0, 0x782b, 0x3009, 0x781b, 0x0067, 0x0078, 0x2c5e,
-+ 0x6820, 0xc095, 0x6822, 0x1078, 0x4450, 0xc6dd, 0x1078, 0x42bd,
-+ 0x782b, 0x3008, 0x781b, 0x0067, 0x007c, 0x2300, 0x0079, 0x3af0,
-+ 0x3af3, 0x3af5, 0x3af7, 0x1078, 0x2bfa, 0x0078, 0x42aa, 0x7d98,
-+ 0xd6d4, 0x00c0, 0x3b34, 0x79e4, 0xd1ac, 0x0040, 0x3b06, 0x78ec,
-+ 0xa084, 0x0003, 0x0040, 0x3b06, 0x782b, 0x3009, 0x789b, 0x0060,
-+ 0x78ab, 0x0000, 0xa684, 0xfffb, 0x785a, 0x7d9a, 0x79e4, 0xd1ac,
-+ 0x0040, 0x3b17, 0x78ec, 0xa084, 0x0003, 0x00c0, 0x3b30, 0x2001,
-+ 0x6002, 0x2004, 0xd0e4, 0x00c0, 0x3b2c, 0x6820, 0xd0c4, 0x0040,
-+ 0x3b2c, 0x0c7e, 0x705c, 0x2060, 0x6004, 0xc09d, 0x6006, 0x6008,
-+ 0xa084, 0x00ff, 0x600a, 0x0c7f, 0x2001, 0x0014, 0x0078, 0x36cb,
-+ 0xa184, 0x0007, 0x0079, 0x3b6b, 0x7a90, 0xa294, 0x0007, 0x789b,
-+ 0x0060, 0x79a8, 0x81ff, 0x0040, 0x3b68, 0x789b, 0x0010, 0x7ba8,
-+ 0xa384, 0x0001, 0x00c0, 0x3b5b, 0x7ba8, 0x7ba8, 0xa386, 0x0001,
-+ 0x00c0, 0x3b4e, 0x2009, 0xfff7, 0x0078, 0x3b54, 0xa386, 0x0003,
-+ 0x00c0, 0x3b5b, 0x2009, 0xffef, 0x0c7e, 0x705c, 0x2060, 0x6004,
-+ 0xa104, 0x6006, 0x0c7f, 0x789b, 0x0060, 0x78ab, 0x0000, 0xa684,
-+ 0xfffb, 0x785a, 0x782b, 0x3009, 0x6920, 0xa18c, 0xfcff, 0x6922,
-+ 0x7d9a, 0x0078, 0x445a, 0x3361, 0x336b, 0x3b75, 0x3b7b, 0x3b73,
-+ 0x3b73, 0x445a, 0x445a, 0x1078, 0x2bfa, 0x6920, 0xa18c, 0xfcff,
-+ 0x6922, 0x0078, 0x4462, 0x6920, 0xa18c, 0xfcff, 0x6922, 0x0078,
-+ 0x445a, 0x79e4, 0xa184, 0x0030, 0x0040, 0x3b8b, 0x78ec, 0xa084,
-+ 0x0003, 0x00c0, 0x3bb9, 0x7000, 0xa086, 0x0004, 0x00c0, 0x3ba5,
-+ 0x7068, 0xa086, 0x0002, 0x00c0, 0x3b9b, 0x2011, 0x0002, 0x2019,
-+ 0x0000, 0x0078, 0x31d4, 0x7068, 0xa086, 0x0006, 0x0040, 0x3b95,
-+ 0x7068, 0xa086, 0x0004, 0x0040, 0x3b95, 0x7000, 0xa086, 0x0000,
-+ 0x0040, 0x2c5e, 0x6820, 0xd0ac, 0x00c0, 0x36cb, 0x6818, 0xa08e,
-+ 0x0002, 0x0040, 0x3bb7, 0xc0fd, 0x681a, 0x2001, 0x0014, 0x0078,
-+ 0x36cb, 0xa184, 0x0007, 0x0079, 0x3bbd, 0x445a, 0x445a, 0x3bc5,
-+ 0x445a, 0x44b1, 0x44b1, 0x445a, 0x445a, 0xd6bc, 0x0040, 0x3c09,
-+ 0x7188, 0x81ff, 0x0040, 0x3c09, 0xa182, 0x000d, 0x00d0, 0x3bd4,
-+ 0x708b, 0x0000, 0x0078, 0x3bd9, 0xa182, 0x000c, 0x708a, 0x2009,
-+ 0x000c, 0x789b, 0x0061, 0x79aa, 0x157e, 0x137e, 0x147e, 0x708c,
-+ 0x8114, 0xa210, 0x728e, 0xa080, 0x000b, 0xad00, 0x2098, 0x017e,
-+ 0xb28c, 0x0300, 0x0040, 0x3bfc, 0x007e, 0x2001, 0x6002, 0x2004,
-+ 0xd0ec, 0x007f, 0x0040, 0x3bf8, 0x20a1, 0x012b, 0x0078, 0x3bfe,
-+ 0x20a1, 0x022b, 0x0078, 0x3bfe, 0x20a1, 0x012b, 0x017f, 0x789b,
-+ 0x0000, 0x8108, 0x81ac, 0x53a6, 0x147f, 0x137f, 0x157f, 0x0078,
-+ 0x4462, 0xd6d4, 0x00c0, 0x3c5c, 0x6820, 0xd084, 0x0040, 0x4462,
-+ 0xa68c, 0x0060, 0xa684, 0x0060, 0x0040, 0x3c1b, 0xa086, 0x0060,
-+ 0x00c0, 0x3c1b, 0xc1f5, 0xc194, 0x795a, 0x69b6, 0x789b, 0x0060,
-+ 0x78ab, 0x0000, 0x789b, 0x0061, 0x6818, 0xc0fd, 0x681a, 0x78aa,
-+ 0x8008, 0x810c, 0x0040, 0x4001, 0xa18c, 0x00f8, 0x00c0, 0x4001,
-+ 0x157e, 0x137e, 0x147e, 0x017e, 0xb28c, 0x0300, 0x0040, 0x3c48,
-+ 0x007e, 0x2001, 0x6002, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x3c44,
-+ 0x20a1, 0x012b, 0x0078, 0x3c4a, 0x20a1, 0x022b, 0x0078, 0x3c4a,
-+ 0x20a1, 0x012b, 0x017f, 0x789b, 0x0000, 0x8000, 0x80ac, 0xad80,
-+ 0x000b, 0x2098, 0x53a6, 0x147f, 0x137f, 0x157f, 0x6814, 0xc0fc,
-+ 0x8007, 0x7882, 0x0078, 0x4462, 0x6818, 0xd0fc, 0x0040, 0x3c62,
-+ 0x681b, 0x0008, 0x6820, 0xc0ad, 0x6822, 0x1078, 0x42c5, 0x78cb,
-+ 0x0000, 0x781b, 0x00cb, 0x007c, 0x2300, 0x0079, 0x3c6f, 0x3c74,
-+ 0x3d11, 0x3c72, 0x1078, 0x2bfa, 0x7000, 0xa084, 0x000f, 0x0079,
-+ 0x3c79, 0x2c6e, 0x3cc1, 0x3c83, 0x3c8c, 0x3c81, 0x2c6e, 0x3c81,
-+ 0x3c81, 0x1078, 0x2bfa, 0x681c, 0xd0ec, 0x0040, 0x3c9d, 0x6008,
-+ 0xc08d, 0x600a, 0x0078, 0x3c9d, 0x68d0, 0xa005, 0x00c0, 0x3cc1,
-+ 0x6920, 0xa18d, 0x0001, 0x6922, 0x68d3, 0x0001, 0x70f4, 0xc085,
-+ 0x70f6, 0x6800, 0x7066, 0x0078, 0x3cae, 0x6920, 0xc185, 0x6922,
-+ 0x6800, 0x6006, 0xa005, 0x00c0, 0x3ca6, 0x6002, 0x6008, 0xc0d4,
-+ 0x600a, 0x681c, 0xa084, 0x000e, 0x00c0, 0x3cb8, 0x2009, 0xa7d0,
-+ 0xb284, 0x0300, 0x0040, 0x3cbd, 0x2009, 0xa6c0, 0x0078, 0x3cbd,
-+ 0x702c, 0x68be, 0x713c, 0x70e8, 0xa108, 0x2104, 0x6802, 0x2d0a,
-+ 0x7162, 0x6eb6, 0xa684, 0x0060, 0x00c0, 0x3ccb, 0xa684, 0x7fff,
-+ 0x68b6, 0x0078, 0x3d0f, 0xd6dc, 0x00c0, 0x3cd9, 0xa684, 0x7fff,
-+ 0x68b6, 0x6894, 0x68a6, 0x6898, 0x68aa, 0x1078, 0x55ac, 0x0078,
-+ 0x3d0f, 0xd6ac, 0x0040, 0x3cec, 0x68d0, 0xa005, 0x0040, 0x3ce4,
-+ 0x1078, 0x5ab0, 0x0078, 0x3ce6, 0x1078, 0x55ac, 0x79d8, 0x7adc,
-+ 0x69aa, 0x6aa6, 0x0078, 0x3cf2, 0x1078, 0x43bc, 0x69aa, 0x6aa6,
-+ 0x1078, 0x55ac, 0xd6fc, 0x0040, 0x3d0f, 0xa684, 0x7fff, 0x68b6,
-+ 0x7adc, 0x79d8, 0xd6ac, 0x00c0, 0x3d07, 0x78d0, 0x801b, 0x00c8,
-+ 0x3d02, 0x8000, 0xa084, 0x003f, 0xa108, 0xa291, 0x0000, 0x6b98,
-+ 0x2100, 0xa302, 0x68b2, 0x6b94, 0x2200, 0xa303, 0x68ae, 0x0078,
-+ 0x2c6e, 0x0078, 0x42aa, 0x7043, 0x0000, 0xa282, 0x0006, 0x0050,
-+ 0x3d1b, 0x1078, 0x2bfa, 0x7000, 0xa086, 0x0007, 0x1040, 0x45de,
-+ 0x2300, 0x0079, 0x3d23, 0x3d26, 0x3d5d, 0x3d7e, 0x2200, 0x0079,
-+ 0x3d29, 0x3d5b, 0x42aa, 0x3d2f, 0x3d5b, 0x3da1, 0x3e14, 0x7003,
-+ 0x0005, 0xb284, 0x0300, 0x0040, 0x3d39, 0x2001, 0xaa20, 0x0078,
-+ 0x3d3b, 0x2001, 0xaa57, 0x2068, 0x7052, 0x157e, 0x20a9, 0x0037,
-+ 0x2003, 0x0000, 0x8000, 0x00f0, 0x3d40, 0x157f, 0xad80, 0x0009,
-+ 0x7042, 0xb284, 0x0300, 0x0040, 0x3d51, 0x6817, 0x0000, 0x0078,
-+ 0x3d53, 0x6817, 0x8000, 0x68b7, 0x0700, 0x6823, 0x0800, 0x6827,
-+ 0x0003, 0x0078, 0x429c, 0x1078, 0x2bfa, 0x2200, 0xa086, 0x0003,
-+ 0x0040, 0x3da1, 0x7003, 0x0005, 0xb284, 0x0300, 0x0040, 0x3d6c,
-+ 0x2001, 0xaa20, 0x0078, 0x3d6e, 0x2001, 0xaa57, 0x2068, 0x7052,
-+ 0xad80, 0x0009, 0x7042, 0x2200, 0x0079, 0x3d76, 0x42aa, 0x3d7c,
-+ 0x3d7c, 0x3da1, 0x3d7c, 0x42aa, 0x1078, 0x2bfa, 0x7003, 0x0005,
-+ 0xb284, 0x0300, 0x0040, 0x3d88, 0x2001, 0xaa20, 0x0078, 0x3d8a,
-+ 0x2001, 0xaa57, 0x2068, 0x7052, 0xad80, 0x0009, 0x7042, 0x2200,
-+ 0x0079, 0x3d92, 0x3d9a, 0x3d98, 0x3d98, 0x3d9a, 0x3d98, 0x3d9a,
-+ 0x1078, 0x2bfa, 0x1078, 0x42cd, 0x782b, 0x3008, 0x781b, 0x0067,
-+ 0x007c, 0x7000, 0xa086, 0x0002, 0x00c0, 0x3db3, 0x70f0, 0xc0b5,
-+ 0x70f2, 0x2c00, 0x70d6, 0x2d00, 0x70da, 0x0078, 0x3db8, 0x1078,
-+ 0x55ac, 0x0078, 0x3db8, 0x7000, 0xa086, 0x0003, 0x0040, 0x3daf,
-+ 0x7003, 0x0001, 0x7a80, 0xa294, 0x0f00, 0x789b, 0x0018, 0x7ca8,
-+ 0xa484, 0x001f, 0xa215, 0x2069, 0xa6c0, 0xb284, 0x0300, 0x00c0,
-+ 0x3dcc, 0xc2fd, 0x2069, 0xa7d0, 0x2d04, 0x2d08, 0x7162, 0xa06d,
-+ 0x0040, 0x3dd9, 0x6814, 0xa206, 0x0040, 0x3df9, 0x6800, 0x0078,
-+ 0x3dcd, 0x7003, 0x0005, 0xd2fc, 0x00c0, 0x3de2, 0x2001, 0xaa20,
-+ 0x0078, 0x3de4, 0x2001, 0xaa57, 0x2068, 0x7052, 0x157e, 0x20a9,
-+ 0x0037, 0x2003, 0x0000, 0x8000, 0x00f0, 0x3de9, 0x157f, 0xad80,
-+ 0x0009, 0x7042, 0x6a16, 0x68b7, 0x0700, 0x6823, 0x0800, 0x6827,
-+ 0x0003, 0x6eb4, 0x7e5a, 0x6920, 0xa184, 0x0c00, 0x0040, 0x3e9e,
-+ 0x7068, 0xa086, 0x0006, 0x00c0, 0x3e0b, 0x7078, 0xa206, 0x00c0,
-+ 0x3e0b, 0x706a, 0x7082, 0x681b, 0x0005, 0xc1ad, 0xc1d4, 0x6922,
-+ 0x1078, 0x42c5, 0x0078, 0x3e9e, 0x7200, 0xa286, 0x0002, 0x00c0,
-+ 0x3e26, 0x70f0, 0xc0b5, 0x70f2, 0x2c00, 0x70d6, 0x2d00, 0x70da,
-+ 0x0078, 0x3e2a, 0x1078, 0x55ac, 0x0078, 0x3e2a, 0xa286, 0x0003,
-+ 0x0040, 0x3e22, 0x7003, 0x0001, 0x7a80, 0xa294, 0x0f00, 0x789b,
-+ 0x0018, 0x7ca8, 0xa484, 0x001f, 0xa215, 0xb284, 0x0300, 0x00c0,
-+ 0x3e3a, 0xc2fd, 0x79a8, 0x79a8, 0xa18c, 0x00ff, 0x2118, 0x70e8,
-+ 0xa168, 0x2d04, 0x2d08, 0x7162, 0xa06d, 0x0040, 0x3e4e, 0x6814,
-+ 0xa206, 0x0040, 0x3e77, 0x6800, 0x0078, 0x3e42, 0x7003, 0x0005,
-+ 0xb284, 0x0300, 0x0040, 0x3e58, 0x2001, 0xaa20, 0x0078, 0x3e5a,
-+ 0x2001, 0xaa57, 0x2068, 0x7052, 0x157e, 0x20a9, 0x0037, 0x2003,
-+ 0x0000, 0x8000, 0x00f0, 0x3e5f, 0x157f, 0xad80, 0x0009, 0x7042,
-+ 0xb284, 0x0300, 0x0040, 0x3e6f, 0xc2fc, 0x0078, 0x3e70, 0xc2fd,
-+ 0x6a16, 0x68b7, 0x0700, 0x6823, 0x0800, 0x6827, 0x0003, 0x6eb4,
-+ 0x6920, 0xa184, 0x0c00, 0x0040, 0x3e9e, 0xd0dc, 0x0040, 0x3e93,
-+ 0x7068, 0xa086, 0x0004, 0x00c0, 0x3e8f, 0x7078, 0xa206, 0x00c0,
-+ 0x3e8f, 0x707c, 0xa306, 0x00c0, 0x3e8f, 0x706a, 0x7082, 0x1078,
-+ 0x42c9, 0x0078, 0x3e9e, 0x681b, 0x0005, 0xc1ad, 0xc1d4, 0x6922,
-+ 0x1078, 0x42c5, 0x7083, 0x0000, 0x0078, 0x3e9e, 0x68c4, 0x705e,
-+ 0xc6ec, 0xa684, 0x0060, 0x0040, 0x3ee9, 0x6b98, 0x6c94, 0x69ac,
-+ 0x68b0, 0xa105, 0x00c0, 0x3ecb, 0x7bd2, 0x7bda, 0x7cd6, 0x7cde,
-+ 0xa684, 0x0060, 0xa086, 0x0060, 0x0040, 0x3eef, 0x68d0, 0xa005,
-+ 0x0040, 0x3ec3, 0x7003, 0x0003, 0x682b, 0x0000, 0xc6ed, 0x1078,
-+ 0x590b, 0x0078, 0x3eef, 0xd6f4, 0x00c0, 0x3eef, 0xc6ed, 0x1078,
-+ 0x591e, 0x0078, 0x3eef, 0x68b0, 0xa31a, 0x2100, 0xa423, 0x2400,
-+ 0xa305, 0x0040, 0x3ef1, 0x7bd2, 0x7bda, 0x7cd6, 0x7cde, 0x68d0,
-+ 0xa005, 0x0040, 0x3ee1, 0x7003, 0x0003, 0x1078, 0x590b, 0x0078,
-+ 0x3ef1, 0xd6f4, 0x00c0, 0x3ee8, 0xc6ed, 0x68b0, 0x1078, 0x5972,
-+ 0xc6f4, 0x2019, 0x0000, 0x2021, 0x0000, 0x0078, 0x3ef1, 0xa6b4,
-+ 0xb7ff, 0x7e5a, 0x2009, 0x0067, 0xa684, 0x0004, 0x0040, 0x3f11,
-+ 0x78e4, 0xa084, 0x0030, 0x0040, 0x3f09, 0x78ec, 0xa084, 0x0003,
-+ 0x0040, 0x3f09, 0x782b, 0x3008, 0x2019, 0x0000, 0x2320, 0x0078,
-+ 0x3f11, 0x0f7e, 0x2079, 0x6000, 0x1078, 0x55ac, 0x0f7f, 0x0040,
-+ 0x2c6e, 0x791a, 0x2d00, 0x7052, 0x68c8, 0x2060, 0x71f0, 0x2001,
-+ 0x6001, 0x2004, 0xd0c4, 0x00c0, 0x3f65, 0x70f8, 0xa02d, 0x0040,
-+ 0x3f3e, 0xd1bc, 0x0040, 0x3f58, 0x7a80, 0xa294, 0x0f00, 0x70fc,
-+ 0xa206, 0x0040, 0x3f2f, 0x78e0, 0xa504, 0x00c0, 0x3f65, 0x70fa,
-+ 0xc1bc, 0x71f2, 0x0078, 0x3f65, 0x2031, 0x0001, 0x852c, 0x0048,
-+ 0x3f3d, 0x8633, 0x8210, 0x0078, 0x3f36, 0x007c, 0x7de0, 0xa594,
-+ 0xff00, 0x0040, 0x3f4b, 0x2011, 0x0008, 0x852f, 0x1078, 0x3f34,
-+ 0x8637, 0x0078, 0x3f4d, 0x1078, 0x3f34, 0x8217, 0x7880, 0xa084,
-+ 0x0f00, 0xa206, 0x0040, 0x3f65, 0x72fe, 0x76fa, 0x0078, 0x3f65,
-+ 0x7a80, 0xa294, 0x0f00, 0x70fc, 0xa236, 0x0040, 0x3f55, 0x78e0,
-+ 0xa534, 0x0040, 0x3f55, 0xc1bd, 0x71f2, 0xd1b4, 0x00c0, 0x2c5e,
-+ 0x2300, 0xa405, 0x0040, 0x2c5e, 0x70c0, 0xa086, 0x0001, 0x00c0,
-+ 0x2cc7, 0x007c, 0x6020, 0xa005, 0x0040, 0x3f80, 0x8001, 0x6022,
-+ 0x6008, 0xa085, 0x0008, 0x600a, 0x700b, 0x0100, 0x7028, 0x6026,
-+ 0x007c, 0xa006, 0x1078, 0x55ac, 0x7000, 0xa086, 0x0002, 0x0040,
-+ 0x3f8e, 0x7068, 0xa086, 0x0005, 0x00c0, 0x3f98, 0x682b, 0x0000,
-+ 0x6817, 0x0000, 0x681b, 0x0001, 0x6823, 0x0040, 0x681f, 0x0100,
-+ 0x7000, 0xa084, 0x000f, 0x0079, 0x3f9d, 0x2c6e, 0x3fad, 0x3fa7,
-+ 0x3fcf, 0x3fb7, 0x3fb5, 0x3fa5, 0x3fa5, 0x1078, 0x2bfa, 0x1078,
-+ 0x3fda, 0x1078, 0x3fd3, 0x0078, 0x3fb3, 0x1078, 0x3fda, 0x7060,
-+ 0x2060, 0x6800, 0x6002, 0x1078, 0x2251, 0x0078, 0x2c6e, 0x7068,
-+ 0x706b, 0x0000, 0x7087, 0x0000, 0x0079, 0x3fbe, 0x3fcb, 0x3fcb,
-+ 0x3fc6, 0x3fc6, 0x3fc6, 0x3fcb, 0x3fc6, 0x3fcb, 0x77f0, 0xc7dd,
-+ 0x77f2, 0x0079, 0x31ef, 0x706b, 0x0000, 0x0078, 0x2c6e, 0x681b,
-+ 0x0000, 0x0078, 0x390e, 0x6800, 0xa005, 0x00c0, 0x3fd8, 0x6002,
-+ 0x6006, 0x007c, 0x6010, 0xa005, 0x0040, 0x3fe3, 0x8001, 0x00d0,
-+ 0x3fe3, 0x1078, 0x2bfa, 0x6012, 0x6008, 0xc0a4, 0x600a, 0x007c,
-+ 0x6018, 0xa005, 0x0040, 0x3fee, 0x8001, 0x601a, 0x007c, 0x1078,
-+ 0x44fa, 0x681b, 0x0018, 0x0078, 0x402d, 0x1078, 0x44fa, 0x681b,
-+ 0x0019, 0x0078, 0x402d, 0x1078, 0x44fa, 0x681b, 0x001a, 0x0078,
-+ 0x402d, 0x1078, 0x44fa, 0x681b, 0x0003, 0x0078, 0x402d, 0x7778,
-+ 0x1078, 0x43a8, 0x717c, 0xa18c, 0x00ff, 0xd7fc, 0x00c0, 0x4014,
-+ 0xa1e8, 0xa5c0, 0x0078, 0x4016, 0xa1e8, 0xa6d0, 0x2d04, 0x2d08,
-+ 0x2068, 0xa005, 0x00c0, 0x401f, 0x7082, 0x0078, 0x2c6e, 0x6814,
-+ 0x7278, 0xa206, 0x0040, 0x4027, 0x6800, 0x0078, 0x4017, 0x6800,
-+ 0x200a, 0x681b, 0x0005, 0x7083, 0x0000, 0x1078, 0x3fda, 0x6820,
-+ 0xd084, 0x00c0, 0x4035, 0x1078, 0x3fd3, 0x1078, 0x3fe8, 0x681f,
-+ 0x0000, 0x6823, 0x0020, 0x682b, 0x0000, 0x1078, 0x2251, 0x0078,
-+ 0x2c6e, 0xa282, 0x0003, 0x00c0, 0x429c, 0x7da8, 0xa5ac, 0x00ff,
-+ 0x7ca8, 0xa4a4, 0x00ff, 0x6920, 0xc1bd, 0x6922, 0xd1c4, 0x0040,
-+ 0x409f, 0xc1c4, 0x6922, 0xa4a4, 0x00ff, 0x0040, 0x408c, 0xa482,
-+ 0x000c, 0x0048, 0x405f, 0x0040, 0x405f, 0x2021, 0x000c, 0x2500,
-+ 0xa086, 0x000a, 0x0040, 0x4066, 0x852b, 0x852b, 0x1078, 0x4334,
-+ 0x0040, 0x406e, 0x1078, 0x4162, 0x0078, 0x4095, 0x1078, 0x4320,
-+ 0x0c7e, 0x2960, 0x6004, 0xa084, 0xfff5, 0x6006, 0x1078, 0x418d,
-+ 0x0c7f, 0x6920, 0xc1c5, 0x6922, 0x7e58, 0xc695, 0x7e5a, 0xd6d4,
-+ 0x00c0, 0x4087, 0x782b, 0x3008, 0x781b, 0x0058, 0x007c, 0x782b,
-+ 0x3008, 0x781b, 0x0067, 0x007c, 0x0c7e, 0x2960, 0x6004, 0xa084,
-+ 0xfff5, 0x6006, 0x1078, 0x418d, 0x0c7f, 0x7e58, 0xd6d4, 0x00c0,
-+ 0x409c, 0x781b, 0x005a, 0x007c, 0x781b, 0x0067, 0x007c, 0x0c7e,
-+ 0x705c, 0x2060, 0x6100, 0xd1e4, 0x0040, 0x40e8, 0x6208, 0x8217,
-+ 0xa294, 0x00ff, 0xa282, 0x000c, 0x0048, 0x40b2, 0x0040, 0x40b2,
-+ 0x2011, 0x000c, 0x2400, 0xa202, 0x00c8, 0x40b7, 0x2220, 0x6208,
-+ 0xa294, 0x00ff, 0x2001, 0x6003, 0x2004, 0xd0e4, 0x00c0, 0x40cc,
-+ 0x78ec, 0xd0e4, 0x0040, 0x40cc, 0xa282, 0x000a, 0x00c8, 0x40d2,
-+ 0x2011, 0x000a, 0x0078, 0x40d2, 0xa282, 0x000c, 0x00c8, 0x40d2,
-+ 0x2011, 0x000c, 0x2200, 0xa502, 0x00c8, 0x40d7, 0x2228, 0x1078,
-+ 0x4324, 0x2500, 0xa086, 0x000a, 0x0040, 0x40e0, 0x852b, 0x852b,
-+ 0x1078, 0x4334, 0x0040, 0x40e8, 0x1078, 0x4162, 0x0078, 0x40ec,
-+ 0x1078, 0x4320, 0x1078, 0x418d, 0x7858, 0xc095, 0x785a, 0x0c7f,
-+ 0x782b, 0x3008, 0x781b, 0x0067, 0x007c, 0x0c7e, 0x2960, 0x6000,
-+ 0xd0e4, 0x00c0, 0x410b, 0xa084, 0x0040, 0x00c0, 0x4105, 0x6104,
-+ 0xa18c, 0xfff5, 0x6106, 0x0c7f, 0x007c, 0x2011, 0x0032, 0x2019,
-+ 0x0000, 0x0078, 0x4136, 0x68a0, 0xd0cc, 0x00c0, 0x4105, 0x6208,
-+ 0xa294, 0x00ff, 0x2001, 0x6003, 0x2004, 0xd0e4, 0x00c0, 0x4124,
-+ 0x78ec, 0xd0e4, 0x0040, 0x4124, 0xa282, 0x000b, 0x00c8, 0x4124,
-+ 0x2011, 0x000a, 0x0078, 0x412a, 0xa282, 0x000c, 0x00c8, 0x412a,
-+ 0x2011, 0x000c, 0x6308, 0x831f, 0xa39c, 0x00ff, 0xa382, 0x000c,
-+ 0x0048, 0x4136, 0x0040, 0x4136, 0x2019, 0x000c, 0x78ab, 0x0001,
-+ 0x78ab, 0x0003, 0x78ab, 0x0001, 0x7aaa, 0x7baa, 0xa8c0, 0x0005,
-+ 0x6820, 0xc0c5, 0x6822, 0x1078, 0x2d79, 0x0c7f, 0x007c, 0x0c7e,
-+ 0x2960, 0x6104, 0xa18c, 0xfff5, 0x6106, 0x2011, 0x0032, 0x2019,
-+ 0x0000, 0x0078, 0x4153, 0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab,
-+ 0x0001, 0x7aaa, 0x7baa, 0xa8c0, 0x0005, 0x6820, 0xc0c5, 0x6822,
-+ 0x0c7f, 0x007c, 0x0c7e, 0x715c, 0x2160, 0x1078, 0x4169, 0x0c7f,
-+ 0x007c, 0x2008, 0xa084, 0xfff0, 0xa425, 0x7c86, 0x6018, 0x789a,
-+ 0x7cae, 0x6412, 0x78a4, 0xa084, 0xfff0, 0xa18c, 0x000f, 0xa105,
-+ 0x78a6, 0x6016, 0x788a, 0xa4a4, 0x000f, 0x8427, 0x8204, 0x8004,
-+ 0xa084, 0x00ff, 0xa405, 0x600e, 0x78ec, 0xd08c, 0x00c0, 0x418c,
-+ 0x6004, 0xa084, 0xfff5, 0x6006, 0x007c, 0x0c7e, 0x705c, 0x2060,
-+ 0x1078, 0x4194, 0x0c7f, 0x007c, 0x6018, 0x789a, 0x78a4, 0xa084,
-+ 0xfff0, 0x78a6, 0x6012, 0x7884, 0xa084, 0xfff0, 0x7886, 0x600c,
-+ 0xa084, 0x00ff, 0x600e, 0x007c, 0xa282, 0x0002, 0x00c0, 0x429c,
-+ 0x7aa8, 0x6920, 0xc1bd, 0x6922, 0xd1cc, 0x0040, 0x41e3, 0xc1cc,
-+ 0x6922, 0xa294, 0x00ff, 0xa282, 0x0002, 0x00c8, 0x429c, 0x1078,
-+ 0x4227, 0x1078, 0x418d, 0xa980, 0x0001, 0x200c, 0x1078, 0x43a4,
-+ 0x1078, 0x40f5, 0x88ff, 0x0040, 0x41d9, 0x789b, 0x0060, 0x2800,
-+ 0x78aa, 0x7e58, 0xc695, 0x7e5a, 0xd6d4, 0x00c0, 0x41d4, 0x782b,
-+ 0x3008, 0x781b, 0x0058, 0x007c, 0x782b, 0x3008, 0x781b, 0x0067,
-+ 0x007c, 0x7e58, 0xd6d4, 0x00c0, 0x41e0, 0x781b, 0x005a, 0x007c,
-+ 0x781b, 0x0067, 0x007c, 0xa282, 0x0002, 0x00c8, 0x41eb, 0xa284,
-+ 0x0001, 0x0040, 0x41f3, 0x715c, 0xa188, 0x0000, 0x210c, 0xd1ec,
-+ 0x00c0, 0x41f3, 0xa016, 0x1078, 0x4311, 0x1078, 0x4227, 0x1078,
-+ 0x418d, 0x7858, 0xc095, 0x785a, 0x782b, 0x3008, 0x781b, 0x0067,
-+ 0x007c, 0x0c7e, 0x027e, 0x2960, 0x6000, 0x2011, 0x0001, 0xd0ec,
-+ 0x00c0, 0x4215, 0xa084, 0x0080, 0x00c0, 0x4213, 0xc1a4, 0x6106,
-+ 0xa006, 0x0078, 0x4224, 0x2011, 0x0000, 0x78ab, 0x0001, 0x78ab,
-+ 0x0002, 0x78ab, 0x0003, 0x7aaa, 0xa8c0, 0x0004, 0x1078, 0x2d79,
-+ 0x6820, 0xa085, 0x0200, 0x6822, 0x027f, 0x0c7f, 0x007c, 0x0c7e,
-+ 0x705c, 0x2060, 0x1078, 0x422e, 0x0c7f, 0x007c, 0x82ff, 0x0040,
-+ 0x4233, 0x2011, 0x0040, 0x6018, 0xa080, 0x0002, 0x789a, 0x78a4,
-+ 0xa084, 0xffbf, 0xa205, 0x78a6, 0x788a, 0x6016, 0x6004, 0x78ec,
-+ 0xd08c, 0x00c0, 0x4245, 0xc0a4, 0x6006, 0x007c, 0x007e, 0x7000,
-+ 0xa086, 0x0003, 0x0040, 0x424f, 0x007f, 0x0078, 0x4252, 0x007f,
-+ 0x0078, 0x4299, 0xd6ac, 0x0040, 0x4299, 0x7888, 0xa084, 0x0040,
-+ 0x0040, 0x4299, 0x7bb8, 0xa384, 0x003f, 0x831b, 0x00c8, 0x4261,
-+ 0x8000, 0xa005, 0x0040, 0x4276, 0x831b, 0x00c8, 0x426a, 0x8001,
-+ 0x0040, 0x4296, 0xd6f4, 0x0040, 0x4276, 0x78b8, 0x801b, 0x00c8,
-+ 0x4272, 0x8000, 0xa084, 0x003f, 0x00c0, 0x4296, 0xc6f4, 0x7e5a,
-+ 0x79d8, 0x7adc, 0x2001, 0x0001, 0xa108, 0x00c8, 0x4281, 0xa291,
-+ 0x0000, 0x79d2, 0x79da, 0x7ad6, 0x7ade, 0x1078, 0x5a6b, 0x781b,
-+ 0x0066, 0xb284, 0x0300, 0x0040, 0x4291, 0x2001, 0x0000, 0x0078,
-+ 0x4293, 0x2001, 0x0001, 0x1078, 0x588c, 0x007c, 0x781b, 0x0066,
-+ 0x007c, 0x781b, 0x0067, 0x007c, 0x1078, 0x42d1, 0x782b, 0x3008,
-+ 0x781b, 0x0067, 0x007c, 0x1078, 0x42bd, 0x782b, 0x3008, 0x781b,
-+ 0x0067, 0x007c, 0x6827, 0x0002, 0x1078, 0x42c5, 0x78e4, 0xa084,
-+ 0x0030, 0x0040, 0x2c6e, 0x78ec, 0xa084, 0x0003, 0x0040, 0x2c6e,
-+ 0x782b, 0x3008, 0x781b, 0x0067, 0x007c, 0x2001, 0x0005, 0x0078,
-+ 0x42d3, 0x2001, 0x000c, 0x0078, 0x42d3, 0x2001, 0x0006, 0x0078,
-+ 0x42d3, 0x2001, 0x000d, 0x0078, 0x42d3, 0x2001, 0x0009, 0x0078,
-+ 0x42d3, 0x2001, 0x0007, 0x789b, 0x0010, 0x78aa, 0x789b, 0x0060,
-+ 0x78ab, 0x0001, 0xc695, 0x7e5a, 0x0078, 0x2d79, 0x077e, 0x873f,
-+ 0xa7bc, 0x000f, 0x873b, 0x873b, 0x8703, 0x017e, 0xb28c, 0x0300,
-+ 0x0040, 0x42ee, 0xa0e0, 0x64c0, 0x0078, 0x42f0, 0xa0e0, 0x6540,
-+ 0x017f, 0xa7b8, 0x0020, 0x7f9a, 0x79a4, 0xa184, 0x000f, 0x0040,
-+ 0x4300, 0xa184, 0xfff0, 0x78a6, 0x6012, 0x6004, 0xc09d, 0x6006,
-+ 0x8738, 0x8738, 0x7f9a, 0x79a4, 0xa184, 0x0040, 0x0040, 0x430f,
-+ 0xa184, 0xffbf, 0x78a6, 0x6016, 0x6004, 0xc0a5, 0x6006, 0x077f,
-+ 0x007c, 0x789b, 0x0010, 0x78ab, 0x0001, 0x78ab, 0x0002, 0x78ab,
-+ 0x0003, 0x7aaa, 0x789b, 0x0060, 0x78ab, 0x0004, 0x0078, 0x2d79,
-+ 0x2021, 0x0000, 0x2029, 0x0032, 0x789b, 0x0010, 0x78ab, 0x0001,
-+ 0x78ab, 0x0003, 0x78ab, 0x0001, 0x7daa, 0x7caa, 0x789b, 0x0060,
-+ 0x78ab, 0x0005, 0x0078, 0x2d79, 0x157e, 0x2001, 0x6003, 0x2004,
-+ 0xd0e4, 0x00c0, 0x4367, 0x2009, 0x439b, 0x20a9, 0x0009, 0x2510,
-+ 0xa582, 0x000a, 0x0040, 0x4362, 0x0048, 0x4362, 0x8108, 0x95a9,
-+ 0xa582, 0x0030, 0x0040, 0x437d, 0x0048, 0x437d, 0x8108, 0x95a9,
-+ 0x2019, 0x000a, 0x2011, 0x0064, 0x2200, 0xa502, 0x0040, 0x437d,
-+ 0x0048, 0x437d, 0x8108, 0x2300, 0xa210, 0x00f0, 0x4354, 0x157f,
-+ 0x0078, 0x437b, 0x2510, 0x8213, 0x8213, 0x0078, 0x437d, 0x2009,
-+ 0x438d, 0x2019, 0x0011, 0x20a9, 0x000e, 0x2011, 0x0032, 0x2200,
-+ 0xa502, 0x0040, 0x437d, 0x0048, 0x437d, 0x8108, 0x2300, 0xa210,
-+ 0x00f0, 0x436f, 0x157f, 0xa006, 0x007c, 0x157f, 0xa582, 0x0064,
-+ 0x00c8, 0x438a, 0x7808, 0xa085, 0x0070, 0x780a, 0x704c, 0xa085,
-+ 0x0070, 0x704e, 0x2104, 0xa005, 0x007c, 0x1209, 0x3002, 0x3202,
-+ 0x4203, 0x4403, 0x5404, 0x5604, 0x6605, 0x6805, 0x7806, 0x7a06,
-+ 0x0c07, 0x0c07, 0x0e07, 0x10e1, 0x330a, 0x5805, 0x5a05, 0x6a06,
-+ 0x6c06, 0x7c07, 0x7e07, 0x0e00, 0x789b, 0x0010, 0xa046, 0x007c,
-+ 0xa784, 0x0f00, 0x800b, 0xa784, 0x001f, 0x8003, 0x8003, 0x8003,
-+ 0x8003, 0xa105, 0xd7fc, 0x0040, 0x43b9, 0xa0e0, 0x85c0, 0x0078,
-+ 0x43bb, 0xa0e0, 0x65c0, 0x007c, 0x79d8, 0x7adc, 0x78d0, 0x801b,
-+ 0x00c8, 0x43c3, 0x8000, 0xa084, 0x003f, 0xa108, 0xa291, 0x0000,
-+ 0x007c, 0x0e7e, 0x0f7e, 0xd084, 0x0040, 0x43d6, 0x2079, 0x0100,
-+ 0x2009, 0x6080, 0x2071, 0x6080, 0x0078, 0x43e6, 0x2001, 0x6002,
-+ 0x2004, 0xd0ec, 0x0040, 0x43e0, 0x2079, 0x0100, 0x0078, 0x43e2,
-+ 0x2079, 0x0200, 0x2009, 0x6040, 0x2071, 0x6040, 0x2091, 0x8000,
-+ 0x2104, 0xa084, 0x000f, 0x0079, 0x43ed, 0x43f7, 0x43f7, 0x43f7,
-+ 0x43f7, 0x43f7, 0x43f7, 0x43f5, 0x444a, 0x1078, 0x2bfa, 0x69b4,
-+ 0xc1f5, 0xa18c, 0xff9f, 0x69b6, 0xa005, 0x0040, 0x4447, 0x7858,
-+ 0xa084, 0xff9f, 0xa085, 0x6000, 0x785a, 0x7828, 0xa086, 0x1814,
-+ 0x00c0, 0x4447, 0x784b, 0x0004, 0x7848, 0xa084, 0x0004, 0x00c0,
-+ 0x440c, 0x784b, 0x0008, 0x7848, 0xa084, 0x0008, 0x00c0, 0x4413,
-+ 0x7830, 0xd0bc, 0x00c0, 0x4447, 0x3200, 0x007e, 0x2001, 0x6002,
-+ 0x2004, 0xd0ec, 0x007f, 0x0040, 0x4429, 0xa084, 0x0300, 0x0078,
-+ 0x442b, 0xa084, 0x0400, 0x0040, 0x4431, 0x0018, 0x4447, 0x0078,
-+ 0x4433, 0x0028, 0x4447, 0x79e4, 0xa184, 0x0030, 0x0040, 0x4447,
-+ 0x78ec, 0xa084, 0x0003, 0x0040, 0x4447, 0x681c, 0xd0ac, 0x00c0,
-+ 0x4445, 0x1078, 0x446a, 0x0078, 0x4447, 0x781b, 0x00d3, 0x0f7f,
-+ 0x0e7f, 0x007c, 0x70a7, 0x0000, 0x1078, 0x46d0, 0x0078, 0x4447,
-+ 0x2001, 0x6001, 0x2004, 0xd0ac, 0x00c0, 0x4459, 0x6814, 0x1078,
-+ 0x2b7a, 0x007c, 0x781b, 0x0067, 0x007c, 0x782b, 0x3008, 0x781b,
-+ 0x0067, 0x007c, 0x781b, 0x005a, 0x007c, 0x782b, 0x3008, 0x781b,
-+ 0x0058, 0x007c, 0x2009, 0x6017, 0x210c, 0xa186, 0x0000, 0x0040,
-+ 0x447c, 0xa186, 0x0001, 0x0040, 0x4481, 0x701b, 0x000b, 0x706b,
-+ 0x0001, 0x781b, 0x0048, 0x007c, 0x78cb, 0x0000, 0x781b, 0x00cf,
-+ 0x007c, 0x701b, 0x000a, 0x007c, 0x2009, 0x6017, 0x210c, 0xa186,
-+ 0x0000, 0x0040, 0x449a, 0xa186, 0x0001, 0x0040, 0x4497, 0x701b,
-+ 0x000b, 0x706b, 0x0001, 0x781b, 0x0048, 0x0078, 0x2c5e, 0x701b,
-+ 0x000a, 0x007c, 0x782b, 0x3008, 0x78cb, 0x0000, 0x781b, 0x00cf,
-+ 0x007c, 0x781b, 0x00d3, 0x007c, 0x782b, 0x3008, 0x781b, 0x00d3,
-+ 0x007c, 0x781b, 0x009b, 0x007c, 0x782b, 0x3008, 0x781b, 0x009b,
-+ 0x007c, 0x6818, 0xd0fc, 0x0040, 0x44b7, 0x681b, 0x001d, 0x706b,
-+ 0x0001, 0x781b, 0x0048, 0x007c, 0x7830, 0xa084, 0x00c0, 0x00c0,
-+ 0x44df, 0x7808, 0xa084, 0xfffc, 0x780a, 0x0005, 0x0005, 0x0005,
-+ 0x0005, 0x78ec, 0xa084, 0x0021, 0x00c0, 0x44dc, 0x2001, 0x6003,
-+ 0x2004, 0xd0e4, 0x00c0, 0x44da, 0x7804, 0xa084, 0xff1f, 0xa085,
-+ 0x00e0, 0x7806, 0xa006, 0x007c, 0x704c, 0xc08d, 0x780a, 0x007c,
-+ 0x7830, 0xa084, 0x0080, 0x00c0, 0x44f9, 0x78ec, 0xa084, 0x0002,
-+ 0x00c0, 0x44f9, 0x7808, 0xc08c, 0x780a, 0x0005, 0x0005, 0x0005,
-+ 0x0005, 0x78ec, 0xa084, 0x0002, 0x0040, 0x44f9, 0x7808, 0xc08d,
-+ 0x780a, 0x007c, 0x704c, 0xc08d, 0x704e, 0x780a, 0x007c, 0x7830,
-+ 0xa084, 0x0040, 0x00c0, 0x44ff, 0x3200, 0x007e, 0x2001, 0x6002,
-+ 0x2004, 0xd0ec, 0x007f, 0x0040, 0x4511, 0xa084, 0x0300, 0x0078,
-+ 0x4513, 0xa084, 0x0400, 0x0040, 0x4519, 0x0098, 0x451d, 0x0078,
-+ 0x451b, 0x00a8, 0x451d, 0x78ac, 0x007c, 0x7808, 0xa084, 0xfffd,
-+ 0x780a, 0x0005, 0x0005, 0x0005, 0x0005, 0x78ec, 0xa084, 0x0021,
-+ 0x0040, 0x4541, 0x3200, 0x007e, 0x2001, 0x6002, 0x2004, 0xd0ec,
-+ 0x007f, 0x0040, 0x4537, 0xa084, 0x0300, 0x0078, 0x4539, 0xa084,
-+ 0x0400, 0x0040, 0x453f, 0x0098, 0x453b, 0x0078, 0x4541, 0x00a8,
-+ 0x453f, 0x78ac, 0x007e, 0x704c, 0x780a, 0x007f, 0x007c, 0x78ec,
-+ 0xa084, 0x0002, 0x00c0, 0x5596, 0xa784, 0x007d, 0x00c0, 0x4553,
-+ 0x2700, 0x1078, 0x2bfa, 0xa784, 0x0001, 0x00c0, 0x39bf, 0xa784,
-+ 0x0070, 0x0040, 0x4563, 0x0c7e, 0x2d60, 0x2f68, 0x1078, 0x2b67,
-+ 0x2d78, 0x2c68, 0x0c7f, 0xa784, 0x0008, 0x0040, 0x4570, 0x784b,
-+ 0x0008, 0x78ec, 0xa084, 0x0003, 0x0040, 0x39bf, 0x0078, 0x445a,
-+ 0xa784, 0x0004, 0x0040, 0x459f, 0x78b8, 0xa084, 0x4001, 0x0040,
-+ 0x459f, 0x784b, 0x0008, 0x78ec, 0xa084, 0x0003, 0x0040, 0x39bf,
-+ 0x78e4, 0xa084, 0x0007, 0xa086, 0x0001, 0x00c0, 0x459f, 0x78c0,
-+ 0xa085, 0x4800, 0x2030, 0x7e5a, 0x781b, 0x00d3, 0x007c, 0x784b,
-+ 0x0008, 0x6818, 0xd0fc, 0x0040, 0x459c, 0x681b, 0x0015, 0xd6f4,
-+ 0x0040, 0x459c, 0x681b, 0x0007, 0x1078, 0x446a, 0x007c, 0x681b,
-+ 0x0003, 0x7858, 0xa084, 0x5f00, 0x681e, 0x682f, 0x0000, 0x6833,
-+ 0x0000, 0x784b, 0x0008, 0x78ec, 0xa084, 0x0003, 0x0040, 0x332a,
-+ 0x3200, 0x007e, 0x2001, 0x6002, 0x2004, 0xd0ec, 0x007f, 0x0040,
-+ 0x45bd, 0xa084, 0x0300, 0x0078, 0x45bf, 0xa084, 0x0400, 0x0040,
-+ 0x45c5, 0x0018, 0x2c5e, 0x0078, 0x45c7, 0x0028, 0x2c5e, 0x0078,
-+ 0x42a3, 0x6b14, 0x8307, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003,
-+ 0xd3fc, 0x0040, 0x45d7, 0xa080, 0x6540, 0x0078, 0x45d9, 0xa080,
-+ 0x64c0, 0x2060, 0x2048, 0x705e, 0x2a60, 0x007c, 0x7000, 0x0079,
-+ 0x45e1, 0x45e9, 0x45e9, 0x45ea, 0x45f2, 0x45e9, 0x45e9, 0x45e9,
-+ 0x45f5, 0x007c, 0x6008, 0xa084, 0xfbef, 0x600a, 0x6018, 0x8001,
-+ 0x601a, 0x007c, 0x1078, 0x55ac, 0x007c, 0x7094, 0xa005, 0x0040,
-+ 0x4610, 0x2068, 0xb284, 0x0300, 0x0040, 0x4602, 0x2009, 0x0000,
-+ 0x0078, 0x4604, 0x2009, 0x0001, 0x017e, 0x1078, 0x209b, 0x017f,
-+ 0x017e, 0x1078, 0x552b, 0x017f, 0x1078, 0x552c, 0x7097, 0x0000,
-+ 0x007c, 0x0e7e, 0x2091, 0x8000, 0x6014, 0xd0fc, 0x00c0, 0x461c,
-+ 0x2071, 0x6040, 0x0078, 0x461e, 0x2071, 0x6080, 0x7000, 0xa086,
-+ 0x0007, 0x00c0, 0x462f, 0x6110, 0x70b0, 0xa106, 0x00c0, 0x462f,
-+ 0x0e7f, 0x1078, 0x20b0, 0x1078, 0x4635, 0xa006, 0x007c, 0x2091,
-+ 0x8001, 0x0e7f, 0xa085, 0x0001, 0x007c, 0x0f7e, 0x0e7e, 0x0078,
-+ 0x28b1, 0x785b, 0x0000, 0x70a3, 0x000e, 0x2009, 0x0100, 0x017e,
-+ 0x7094, 0xa06d, 0x0040, 0x4648, 0x7097, 0x0000, 0x0078, 0x464e,
-+ 0x70a7, 0x0000, 0x1078, 0x20e4, 0x0040, 0x4654, 0x70a0, 0x6826,
-+ 0x1078, 0x4781, 0x0078, 0x4648, 0x017f, 0x077e, 0x157e, 0x0c7e,
-+ 0x0d7e, 0x20a9, 0x0020, 0x3238, 0xa7bc, 0x0300, 0x0040, 0x4665,
-+ 0x2061, 0xa7e0, 0xc7fc, 0x0078, 0x4668, 0x2061, 0xa900, 0xc7fd,
-+ 0x6000, 0xa105, 0x6002, 0x601c, 0xa06d, 0x0040, 0x4678, 0x6800,
-+ 0x601e, 0x1078, 0x1e55, 0x6008, 0x8000, 0x600a, 0x0078, 0x466b,
-+ 0x6018, 0xa06d, 0x0040, 0x4682, 0x6800, 0x601a, 0x1078, 0x1e55,
-+ 0x0078, 0x4678, 0xace0, 0x0009, 0x0070, 0x4688, 0x0078, 0x4668,
-+ 0x7090, 0xa084, 0x8000, 0x0040, 0x468f, 0x1078, 0x480c, 0x0d7f,
-+ 0x0c7f, 0x157f, 0x077f, 0x007c, 0x6804, 0xa084, 0x000f, 0x0079,
-+ 0x4699, 0x46a9, 0x46a9, 0x46a9, 0x46a9, 0x46a9, 0x46a9, 0x46ab,
-+ 0x46bd, 0x46a9, 0x46a9, 0x46a9, 0x46a9, 0x46a9, 0x46cb, 0x46a9,
-+ 0x46ab, 0x1078, 0x2bfa, 0x007e, 0x7830, 0xd0b4, 0x0040, 0x46b6,
-+ 0x784b, 0x0004, 0x7848, 0xd094, 0x00c0, 0x46b2, 0x007f, 0x1078,
-+ 0x52d3, 0x1078, 0x1e55, 0x0078, 0x46cf, 0x6827, 0x000b, 0x007e,
-+ 0x7830, 0xd0b4, 0x0040, 0x46ca, 0x784b, 0x0004, 0x7848, 0xd094,
-+ 0x00c0, 0x46c6, 0x007f, 0x1078, 0x52d3, 0x1078, 0x4781, 0x007c,
-+ 0x0f7e, 0x6814, 0xd0fc, 0x00c0, 0x46e7, 0x2001, 0x6002, 0x2004,
-+ 0xd0ec, 0x0040, 0x46e1, 0x2079, 0x0100, 0x0098, 0x4706, 0x0078,
-+ 0x46eb, 0x2079, 0x0200, 0x00a8, 0x4706, 0x0078, 0x46eb, 0x2079,
-+ 0x0100, 0x0098, 0x4706, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x4706,
-+ 0x0d7e, 0x1078, 0x5539, 0x2d00, 0x682e, 0x2009, 0x0004, 0x2001,
-+ 0x0000, 0x6827, 0x0084, 0x1078, 0x54df, 0x1078, 0x4781, 0x0d7f,
-+ 0x70a8, 0xa080, 0x00af, 0x781a, 0x0078, 0x474f, 0x7948, 0x6814,
-+ 0xd0fc, 0x00c0, 0x4719, 0x2001, 0x6002, 0x2004, 0xd0ec, 0x0040,
-+ 0x4715, 0x0098, 0x471e, 0x0078, 0x471b, 0x00a8, 0x471e, 0x0078,
-+ 0x471b, 0x0098, 0x471e, 0x794a, 0x0078, 0x46f0, 0x7948, 0x7828,
-+ 0x007e, 0xa084, 0xf000, 0xa086, 0x1000, 0x007f, 0x00c0, 0x471b,
-+ 0xd0b4, 0x00c0, 0x471b, 0xd0ac, 0x0040, 0x4732, 0xa185, 0x0004,
-+ 0x0078, 0x4734, 0xa185, 0x000c, 0x784a, 0x789b, 0x000e, 0x78ab,
-+ 0x0002, 0x7858, 0xa084, 0x00ff, 0xa085, 0x0400, 0x785a, 0x70a8,
-+ 0xa080, 0x0097, 0x781a, 0x6827, 0x0284, 0x682c, 0x6836, 0x6830,
-+ 0x683a, 0x2009, 0x0004, 0x2001, 0x0000, 0x1078, 0x54df, 0x0f7f,
-+ 0x007c, 0x0d7e, 0x6b14, 0x1078, 0x2160, 0x0040, 0x475e, 0x2068,
-+ 0x6827, 0x0002, 0x1078, 0x4781, 0x0078, 0x4753, 0x0d7f, 0x007c,
-+ 0x0d7e, 0x6b14, 0x6c28, 0xa4a4, 0x00ff, 0x1078, 0x20f0, 0x0040,
-+ 0x476e, 0x2068, 0x6827, 0x0002, 0x1078, 0x4781, 0x0d7f, 0x007c,
-+ 0x0d7e, 0x6814, 0xa09c, 0x00ff, 0x1078, 0x212a, 0x0040, 0x477f,
-+ 0x2068, 0x6827, 0x0002, 0x1078, 0x4781, 0x0078, 0x4774, 0x0d7f,
-+ 0x007c, 0x0c7e, 0x6914, 0x6814, 0x1078, 0x47fa, 0x6904, 0xa18c,
-+ 0x00ff, 0xa186, 0x0006, 0x0040, 0x479d, 0xa186, 0x000d, 0x0040,
-+ 0x47c1, 0xa186, 0x0017, 0x00c0, 0x4799, 0x1078, 0x1e55, 0x0c7f,
-+ 0x007c, 0x1078, 0x2253, 0x0c7f, 0x007c, 0x6004, 0x8001, 0x0048,
-+ 0x47ba, 0x6006, 0x2009, 0x0000, 0xa684, 0x0001, 0x00c0, 0x47aa,
-+ 0xa18d, 0x8000, 0xa684, 0x0004, 0x0040, 0x47b0, 0xa18d, 0x0002,
-+ 0x691e, 0x6823, 0x0000, 0x711c, 0x810f, 0x6818, 0xa105, 0x681a,
-+ 0x0078, 0x4799, 0x6100, 0xa184, 0x0001, 0x0040, 0x4795, 0x1078,
-+ 0x2bfa, 0x6018, 0xa005, 0x00c0, 0x47d0, 0x6008, 0x8001, 0x0048,
-+ 0x47d0, 0x600a, 0x601c, 0x6802, 0x2d00, 0x601e, 0x0078, 0x47e8,
-+ 0xac88, 0x0006, 0x2104, 0xa005, 0x0040, 0x47d9, 0x2008, 0x0078,
-+ 0x47d2, 0x6802, 0x2d0a, 0x6008, 0x8001, 0x0048, 0x47e6, 0x600a,
-+ 0x6018, 0x2068, 0x6800, 0x601a, 0x0078, 0x47ca, 0x0c7f, 0x007c,
-+ 0x157e, 0x137e, 0x147e, 0x0c7e, 0x0d7e, 0x1078, 0x1e32, 0x2da0,
-+ 0x137f, 0x20a9, 0x0037, 0x53a3, 0x0c7f, 0x147f, 0x137f, 0x157f,
-+ 0x0078, 0x4799, 0xd0fc, 0x00c0, 0x4801, 0x2061, 0xa7e0, 0x0078,
-+ 0x4803, 0x2061, 0xa900, 0xa184, 0x001f, 0xac60, 0x8003, 0x8003,
-+ 0x8003, 0xac00, 0x2060, 0x007c, 0xd7fc, 0x00c0, 0x481f, 0x2019,
-+ 0x6053, 0x2001, 0x6002, 0x2004, 0xd0ec, 0x0040, 0x481b, 0x2021,
-+ 0x0102, 0x0078, 0x4823, 0x2021, 0x0202, 0x0078, 0x4823, 0x2019,
-+ 0x6093, 0x2021, 0x0102, 0x2304, 0xa085, 0x0001, 0x201a, 0x2404,
-+ 0xa085, 0x0001, 0x2022, 0x007c, 0xd7fc, 0x00c0, 0x483f, 0x2019,
-+ 0x6053, 0x2001, 0x6002, 0x2004, 0xd0ec, 0x0040, 0x483b, 0x2021,
-+ 0x0102, 0x0078, 0x4843, 0x2021, 0x0202, 0x0078, 0x4843, 0x2019,
-+ 0x6093, 0x2021, 0x0102, 0x2304, 0xa084, 0xfffe, 0x201a, 0x2404,
-+ 0xa084, 0xfffe, 0x2022, 0x007c, 0x7990, 0xa18c, 0xfff8, 0x7992,
-+ 0x70a8, 0xa080, 0x00d7, 0x781a, 0x0078, 0x2c5e, 0x7097, 0x0000,
-+ 0x7003, 0x0000, 0x704b, 0x0001, 0x7043, 0x0000, 0x1078, 0x20e4,
-+ 0x0040, 0x488c, 0x70ef, 0x0000, 0x68cc, 0x2060, 0x6100, 0xa184,
-+ 0x0300, 0x0040, 0x4877, 0x6827, 0x000e, 0xa084, 0x0200, 0x0040,
-+ 0x4873, 0x6827, 0x0017, 0x1078, 0x4781, 0x0078, 0x4856, 0x7000,
-+ 0xa086, 0x0007, 0x00c0, 0x4905, 0x6910, 0x70b0, 0xa106, 0x0040,
-+ 0x4885, 0x2d60, 0x1078, 0x20b0, 0x007c, 0x2d00, 0x7096, 0xad80,
-+ 0x000f, 0x7042, 0x0078, 0x4897, 0x7010, 0xa005, 0x00c0, 0x4895,
-+ 0x7048, 0xa086, 0x0001, 0x0040, 0x2c78, 0x0078, 0x2c5e, 0xa036,
-+ 0x691c, 0xa184, 0x0002, 0x0040, 0x489f, 0xa6b5, 0x0004, 0xa184,
-+ 0x00c0, 0x8003, 0x8003, 0x8007, 0xa080, 0x49b3, 0x2004, 0xa635,
-+ 0x1078, 0x2d79, 0x6820, 0xa084, 0x0400, 0x0040, 0x48b9, 0x789b,
-+ 0x0018, 0x78ab, 0x0003, 0x789b, 0x0081, 0x78ab, 0x0001, 0xa6b5,
-+ 0x5000, 0x6820, 0xa084, 0x8000, 0x0040, 0x48c7, 0xa6b5, 0x0400,
-+ 0x789b, 0x000e, 0x6824, 0x8007, 0x78aa, 0x0078, 0x48e7, 0x681c,
-+ 0xd0fc, 0x00c0, 0x48d5, 0xa6b5, 0x0800, 0x6820, 0xd0c4, 0x0040,
-+ 0x48e7, 0xa6b5, 0x4000, 0x0078, 0x48e7, 0x6820, 0xd0c4, 0x0040,
-+ 0x48dd, 0xa6b5, 0x4000, 0x0078, 0x48e7, 0x789b, 0x0018, 0x78ab,
-+ 0x0002, 0x789b, 0x0081, 0x78ab, 0x0001, 0xa6b5, 0x1000, 0xa684,
-+ 0x0200, 0x0040, 0x4901, 0x682c, 0x78d2, 0x6830, 0x78d6, 0xa684,
-+ 0x0100, 0x0040, 0x48ff, 0x682c, 0xa084, 0x0001, 0x0040, 0x48ff,
-+ 0x7888, 0xa084, 0x0040, 0x0040, 0x48ff, 0xa6b5, 0x8000, 0x1078,
-+ 0x550e, 0x7e5a, 0x6eb6, 0x0078, 0x5558, 0x1078, 0x44bc, 0x00c0,
-+ 0x49ad, 0x2041, 0x0001, 0x2031, 0x1000, 0x1078, 0x2d79, 0x789b,
-+ 0x0018, 0x6814, 0xa084, 0x001f, 0xa085, 0x0080, 0x78aa, 0x691c,
-+ 0xa184, 0x0002, 0x0040, 0x4924, 0xa6b5, 0x0004, 0x78ab, 0x0020,
-+ 0x6828, 0x78aa, 0xa8c0, 0x0002, 0x681c, 0xd0f4, 0x0040, 0x492d,
-+ 0x2c50, 0x1078, 0x45c9, 0x1078, 0x5424, 0x6820, 0xa084, 0x8000,
-+ 0x0040, 0x493b, 0xa6b5, 0x0400, 0x789b, 0x000e, 0x6824, 0x8007,
-+ 0x78aa, 0x0078, 0x4949, 0x681c, 0xa084, 0x8000, 0x00c0, 0x4949,
-+ 0xa6b5, 0x0800, 0x6820, 0xa084, 0x0100, 0x0040, 0x4949, 0xa6b5,
-+ 0x4000, 0x681c, 0xa084, 0x00c0, 0x8003, 0x8003, 0x8007, 0xa080,
-+ 0x49b3, 0x2004, 0xa635, 0xa684, 0x0100, 0x0040, 0x4963, 0x682c,
-+ 0xa084, 0x0001, 0x0040, 0x4963, 0x7888, 0xa084, 0x0040, 0x0040,
-+ 0x4963, 0xa6b5, 0x8000, 0x789b, 0x007e, 0x7eae, 0x6eb6, 0x6814,
-+ 0xc0fc, 0x8007, 0x78aa, 0x7882, 0x2810, 0x7aaa, 0x7830, 0xa084,
-+ 0x00c0, 0x00c0, 0x49ad, 0x6914, 0xd1fc, 0x00c0, 0x4985, 0x2001,
-+ 0x6002, 0x2004, 0xd0ec, 0x0040, 0x4981, 0x0018, 0x49ad, 0x0078,
-+ 0x4987, 0x0028, 0x49ad, 0x0078, 0x4987, 0x0018, 0x49ad, 0x127e,
-+ 0x0d7e, 0x0c7e, 0x70f0, 0xa084, 0x2700, 0x2090, 0x0c7f, 0x0d7f,
-+ 0x127f, 0xa684, 0x0200, 0x0040, 0x499b, 0x682c, 0x78d2, 0x6830,
-+ 0x78d6, 0x1078, 0x550e, 0x70a8, 0xa080, 0x00dc, 0x781a, 0x1078,
-+ 0x44fa, 0x2d00, 0x7096, 0x7052, 0x6810, 0x70b2, 0x7003, 0x0007,
-+ 0xad80, 0x000f, 0x7042, 0x0078, 0x2c5e, 0x1078, 0x209b, 0x1078,
-+ 0x44fa, 0x0078, 0x2c5e, 0x0000, 0x0300, 0x0200, 0x0000, 0x1078,
-+ 0x2bfa, 0x1078, 0x2bed, 0x2300, 0x0079, 0x49be, 0x49c3, 0x49c1,
-+ 0x49c8, 0x1078, 0x2bfa, 0x71a8, 0xa188, 0x0097, 0x791a, 0x007c,
-+ 0x1078, 0x552c, 0x6924, 0xa184, 0x00ff, 0xa086, 0x000a, 0x0040,
-+ 0x49da, 0xa184, 0xff00, 0xa085, 0x000a, 0x6826, 0x1078, 0x209b,
-+ 0x0078, 0x4856, 0x2001, 0x000a, 0x1078, 0x54ae, 0x0078, 0x4856,
-+ 0xa282, 0x0005, 0x0050, 0x49e6, 0x1078, 0x2bfa, 0x7000, 0xa084,
-+ 0x000f, 0x10c0, 0x45de, 0x1078, 0x1e32, 0x00c0, 0x4a08, 0x2069,
-+ 0xffff, 0xa684, 0x0004, 0x0040, 0x49f9, 0x2001, 0x2800, 0x0078,
-+ 0x49fb, 0x2001, 0x0800, 0x71a8, 0xa188, 0x0097, 0x789b, 0x000e,
-+ 0x8007, 0x78aa, 0x2031, 0x0400, 0x7e5a, 0x791a, 0x0078, 0x2c5e,
-+ 0x6807, 0x0106, 0x680b, 0x0000, 0x689f, 0x0000, 0x6827, 0x0000,
-+ 0xa386, 0x0002, 0x00c0, 0x4a28, 0xa286, 0x0002, 0x00c0, 0x4a28,
-+ 0x78a0, 0xa005, 0x00c0, 0x4a28, 0xd4fc, 0x00c0, 0x4a28, 0x78e4,
-+ 0xa084, 0x0008, 0x0040, 0x4a28, 0xa6b5, 0x0008, 0x2019, 0x0000,
-+ 0x1078, 0x4e89, 0x2d00, 0x7096, 0x7052, 0x7003, 0x0007, 0x7043,
-+ 0x0000, 0x6020, 0xa084, 0x000f, 0x680e, 0x6824, 0xa084, 0x0080,
-+ 0x0040, 0x4a3e, 0x1078, 0x4f59, 0x0078, 0x2c5e, 0x2300, 0x0079,
-+ 0x4a41, 0x4a44, 0x4ac5, 0x4ade, 0x2200, 0x0079, 0x4a47, 0x4a4c,
-+ 0x4a5c, 0x4a82, 0x4a8e, 0x4ab1, 0x2029, 0x0001, 0xa026, 0x2011,
-+ 0x0000, 0x1078, 0x5092, 0x0079, 0x4a55, 0x4a5a, 0x2c5e, 0x4856,
-+ 0x4a5a, 0x4a5a, 0x1078, 0x2bfa, 0x7990, 0xa18c, 0x0007, 0x00c0,
-+ 0x4a63, 0x2009, 0x0008, 0x2011, 0x0001, 0xa684, 0x0004, 0x0040,
-+ 0x4a6b, 0x2011, 0x0003, 0x2220, 0xa12a, 0x2011, 0x0001, 0x1078,
-+ 0x5092, 0x0079, 0x4a73, 0x4a78, 0x2c5e, 0x4856, 0x4a80, 0x4a7a,
-+ 0x0078, 0x555e, 0x709f, 0x4a7e, 0x0078, 0x2c5e, 0x0078, 0x4a78,
-+ 0x1078, 0x2bfa, 0xa684, 0x0010, 0x0040, 0x4a8c, 0x1078, 0x4f1a,
-+ 0x0040, 0x4a8c, 0x0078, 0x2c5e, 0x0078, 0x4f9a, 0x6000, 0xa084,
-+ 0x0002, 0x0040, 0x4aab, 0x70a8, 0xa080, 0x0085, 0x781a, 0x0d7e,
-+ 0x1078, 0x5539, 0x2d00, 0x682e, 0x6827, 0x0000, 0x1078, 0x4781,
-+ 0x0d7f, 0x1078, 0x1e55, 0x7003, 0x0000, 0x7043, 0x0000, 0x7053,
-+ 0x0000, 0x0078, 0x4856, 0xa684, 0x0004, 0x00c0, 0x4ab1, 0x0078,
-+ 0x555e, 0x6000, 0xa084, 0x0004, 0x00c0, 0x4ac3, 0x6000, 0xa084,
-+ 0x0001, 0x0040, 0x4ac3, 0x709f, 0x4ac3, 0x2001, 0x0007, 0x1078,
-+ 0x54a6, 0x0078, 0x5564, 0x0078, 0x555e, 0x2200, 0x0079, 0x4ac8,
-+ 0x4acd, 0x4acf, 0x4acd, 0x4acd, 0x4acd, 0x1078, 0x2bfa, 0x709b,
-+ 0x4ad3, 0x0078, 0x556c, 0x78e4, 0xa084, 0x0008, 0x00c0, 0x4acf,
-+ 0x1078, 0x5496, 0x709f, 0x4adc, 0x0078, 0x555e, 0x2200, 0x0079,
-+ 0x4ae1, 0x4ae6, 0x4ae8, 0x4ae8, 0x4ae6, 0x4ae6, 0x1078, 0x2bfa,
-+ 0x78e4, 0xa084, 0x0008, 0x0040, 0x4afd, 0x709b, 0x4af1, 0x0078,
-+ 0x556c, 0x2011, 0x0004, 0x1078, 0x508c, 0x0079, 0x4af7, 0x4b09,
-+ 0x2c5e, 0x4856, 0x4b09, 0x4b13, 0x4b17, 0x690c, 0x81ff, 0x0040,
-+ 0x4b09, 0x8109, 0x00c0, 0x4b08, 0x6827, 0x000f, 0x0078, 0x4bbd,
-+ 0x690e, 0x709f, 0x4b11, 0x2001, 0x0003, 0x1078, 0x54a6, 0x0078,
-+ 0x5564, 0x0078, 0x555e, 0x709f, 0x4b09, 0x0078, 0x2c5e, 0x709f,
-+ 0x4b1b, 0x0078, 0x2c5e, 0x0078, 0x4b11, 0xa282, 0x0003, 0x0050,
-+ 0x4b23, 0x1078, 0x2bfa, 0xa386, 0x0002, 0x00c0, 0x4b3b, 0xa286,
-+ 0x0002, 0x00c0, 0x4b41, 0x78a0, 0xa005, 0x00c0, 0x4b41, 0xd4fc,
-+ 0x00c0, 0x4b41, 0x78e4, 0xa084, 0x0008, 0x0040, 0x4b3b, 0xa6b5,
-+ 0x0008, 0x2019, 0x0000, 0xa684, 0x0008, 0x0040, 0x4b41, 0x1078,
-+ 0x4ef7, 0x6810, 0x70b2, 0x7003, 0x0007, 0x2300, 0x0079, 0x4b48,
-+ 0x4b4b, 0x4b78, 0x4b80, 0x2200, 0x0079, 0x4b4e, 0x4b53, 0x4b51,
-+ 0x4b6c, 0x1078, 0x2bfa, 0x7990, 0xa1ac, 0x0007, 0xa026, 0x2011,
-+ 0x0001, 0x1078, 0x5092, 0x0079, 0x4b5d, 0x4b62, 0x2c5e, 0x4856,
-+ 0x4b6a, 0x4b64, 0x0078, 0x555e, 0x709f, 0x4b68, 0x0078, 0x2c5e,
-+ 0x0078, 0x4b62, 0x1078, 0x2bfa, 0xa684, 0x0010, 0x0040, 0x4b76,
-+ 0x1078, 0x4f1a, 0x0040, 0x4b76, 0x0078, 0x2c5e, 0x0078, 0x4f9a,
-+ 0x2200, 0x0079, 0x4b7b, 0x4b7e, 0x4b7e, 0x4b7e, 0x1078, 0x2bfa,
-+ 0x2200, 0x0079, 0x4b83, 0x4b86, 0x4b88, 0x4b88, 0x1078, 0x2bfa,
-+ 0x78e4, 0xa084, 0x0008, 0x0040, 0x4b9d, 0x709b, 0x4b91, 0x0078,
-+ 0x556c, 0x2011, 0x0004, 0x1078, 0x508c, 0x0079, 0x4b97, 0x4ba9,
-+ 0x2c5e, 0x4856, 0x4ba9, 0x4bb3, 0x4bb7, 0x690c, 0x81ff, 0x0040,
-+ 0x4ba9, 0x8109, 0x00c0, 0x4ba8, 0x6827, 0x000f, 0x0078, 0x4bbd,
-+ 0x690e, 0x709f, 0x4bb1, 0x2001, 0x0003, 0x1078, 0x54a6, 0x0078,
-+ 0x5564, 0x0078, 0x555e, 0x709f, 0x4ba9, 0x0078, 0x2c5e, 0x709f,
-+ 0x4bbb, 0x0078, 0x2c5e, 0x0078, 0x4bb1, 0x70a8, 0xa080, 0x0085,
-+ 0x781a, 0x0d7e, 0x6824, 0x007e, 0x1078, 0x5539, 0x007f, 0x6826,
-+ 0x2d00, 0x682e, 0x1078, 0x4781, 0x0d7f, 0x1078, 0x54ae, 0x7003,
-+ 0x0000, 0x7043, 0x0000, 0x7053, 0x0000, 0x0078, 0x4856, 0x2300,
-+ 0x0079, 0x4bda, 0x4bdf, 0x4be1, 0x4bdd, 0x1078, 0x2bfa, 0x7098,
-+ 0x007a, 0x7098, 0x007a, 0xa282, 0x0002, 0x0050, 0x4be9, 0x1078,
-+ 0x2bfa, 0xa684, 0x0200, 0x0040, 0x4bf3, 0x1078, 0x552b, 0x1078,
-+ 0x5074, 0x1078, 0x552c, 0x2300, 0x0079, 0x4bf6, 0x4bf9, 0x4c2c,
-+ 0x4c92, 0xad86, 0xffff, 0x00c0, 0x4bfe, 0x007c, 0xa286, 0x0001,
-+ 0x0040, 0x4c04, 0x1078, 0x2bfa, 0xa684, 0x0200, 0x0040, 0x4c0c,
-+ 0x1078, 0x552b, 0x1078, 0x552c, 0x6924, 0xa184, 0x00ff, 0xa086,
-+ 0x000a, 0x00c0, 0x4c16, 0xa184, 0xff00, 0x6826, 0x2001, 0x0001,
-+ 0x1078, 0x54ae, 0x78b8, 0xa084, 0xc001, 0x0040, 0x4c28, 0x7848,
-+ 0xa085, 0x0008, 0x784a, 0x7848, 0xa084, 0x0008, 0x00c0, 0x4c23,
-+ 0x7003, 0x0000, 0x0078, 0x4856, 0x2200, 0x0079, 0x4c2f, 0x4c31,
-+ 0x4c62, 0x709b, 0x4c35, 0x0078, 0x556c, 0x2011, 0x000d, 0x1078,
-+ 0x508c, 0x0079, 0x4c3b, 0x4c42, 0x2c5e, 0x4856, 0x4c4a, 0x4c52,
-+ 0x4c58, 0x4c5a, 0xa6b4, 0x00ff, 0xa6b5, 0x0400, 0x6eb6, 0x7e5a,
-+ 0x0078, 0x5558, 0xa6b4, 0x00ff, 0xa6b5, 0x0400, 0x6eb6, 0x7e5a,
-+ 0x0078, 0x5558, 0x709f, 0x4c56, 0x0078, 0x2c5e, 0x0078, 0x4c42,
-+ 0x1078, 0x2bfa, 0x709f, 0x4c5e, 0x0078, 0x2c5e, 0x1078, 0x5572,
-+ 0x0078, 0x2c5e, 0x709b, 0x4c66, 0x0078, 0x556c, 0x2011, 0x0012,
-+ 0x1078, 0x508c, 0x0079, 0x4c6c, 0x4c72, 0x2c5e, 0x4856, 0x4c7e,
-+ 0x4c86, 0x4c8c, 0xa6b4, 0x00ff, 0xa6b5, 0x0400, 0x6eb6, 0x7e5a,
-+ 0x70a8, 0xa080, 0x00af, 0x781a, 0x0078, 0x2c5e, 0xa6b4, 0x00ff,
-+ 0xa6b5, 0x0400, 0x6eb6, 0x7e5a, 0x0078, 0x5558, 0x709f, 0x4c8a,
-+ 0x0078, 0x2c5e, 0x0078, 0x4c72, 0x709f, 0x4c90, 0x0078, 0x2c5e,
-+ 0x0078, 0x4c7e, 0xa286, 0x0001, 0x0040, 0x4c98, 0x1078, 0x2bfa,
-+ 0x709b, 0x4c9c, 0x0078, 0x556c, 0x2011, 0x0015, 0x1078, 0x508c,
-+ 0x0079, 0x4ca2, 0x4ca7, 0x2c5e, 0x4856, 0x4cb5, 0x4cc1, 0xa6b4,
-+ 0x00ff, 0xa6b5, 0x0400, 0x6eb6, 0x7e5a, 0x783b, 0x1301, 0x70a8,
-+ 0xa080, 0x00bb, 0x781a, 0x0078, 0x2c5e, 0xa6b4, 0x00ff, 0xa6b5,
-+ 0x0400, 0x6eb6, 0x7e5a, 0x70a8, 0xa080, 0x00af, 0x781a, 0x0078,
-+ 0x2c5e, 0x709f, 0x4cc5, 0x0078, 0x2c5e, 0x0078, 0x4ca7, 0xa282,
-+ 0x0003, 0x0050, 0x4ccd, 0x1078, 0x2bfa, 0x2300, 0x0079, 0x4cd0,
-+ 0x4cd3, 0x4d14, 0x4d79, 0xa286, 0x0001, 0x0040, 0x4cd9, 0x1078,
-+ 0x2bfa, 0x6804, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x4ce6,
-+ 0x1078, 0x4781, 0x7003, 0x0000, 0x0078, 0x4856, 0x683b, 0x0000,
-+ 0x6837, 0x0000, 0xa684, 0x0200, 0x0040, 0x4cf4, 0x1078, 0x552b,
-+ 0x1078, 0x5074, 0x1078, 0x552c, 0x6924, 0xa184, 0x00ff, 0xa086,
-+ 0x000a, 0x00c0, 0x4cfe, 0xa184, 0xff00, 0x6826, 0x2001, 0x0001,
-+ 0x1078, 0x54ae, 0x78b8, 0xa084, 0xc001, 0x0040, 0x4d10, 0x7848,
-+ 0xa085, 0x0008, 0x784a, 0x7848, 0xa084, 0x0008, 0x00c0, 0x4d0b,
-+ 0x7003, 0x0000, 0x0078, 0x4856, 0xa684, 0x0200, 0x0040, 0x4d1c,
-+ 0x1078, 0x5074, 0x1078, 0x552c, 0x2200, 0x0079, 0x4d1f, 0x4d21,
-+ 0x4d54, 0x709b, 0x4d25, 0x0078, 0x556c, 0x2011, 0x000d, 0x1078,
-+ 0x508c, 0x0079, 0x4d2b, 0x4d32, 0x2c5e, 0x4856, 0x4d3a, 0x4d42,
-+ 0x4d48, 0x4d4a, 0xa6b4, 0x00ff, 0xa6b5, 0x0800, 0x6eb6, 0x7e5a,
-+ 0x0078, 0x5558, 0xa6b4, 0x00ff, 0xa6b5, 0x0800, 0x6eb6, 0x7e5a,
-+ 0x0078, 0x5558, 0x709f, 0x4d46, 0x0078, 0x2c5e, 0x0078, 0x4d32,
-+ 0x1078, 0x2bfa, 0x709f, 0x4d50, 0x1078, 0x552c, 0x0078, 0x2c5e,
-+ 0x1078, 0x5572, 0x0078, 0x2c5e, 0x709b, 0x4d58, 0x0078, 0x556c,
-+ 0x2011, 0x0005, 0x1078, 0x508c, 0x0079, 0x4d5e, 0x4d63, 0x2c5e,
-+ 0x4856, 0x4d6b, 0x4d73, 0xa6b4, 0x00ff, 0xa6b5, 0x0800, 0x6eb6,
-+ 0x7e5a, 0x0078, 0x5558, 0xa6b4, 0x00ff, 0xa6b5, 0x0800, 0x6eb6,
-+ 0x7e5a, 0x0078, 0x5558, 0x709f, 0x4d77, 0x0078, 0x2c5e, 0x0078,
-+ 0x4d63, 0xa286, 0x0001, 0x0040, 0x4d7f, 0x1078, 0x2bfa, 0x709b,
-+ 0x4d83, 0x0078, 0x556c, 0x2011, 0x0006, 0x1078, 0x508c, 0x0079,
-+ 0x4d89, 0x4d8e, 0x2c5e, 0x4856, 0x4d94, 0x4d9e, 0xa6b5, 0x0800,
-+ 0x6eb6, 0x7e5a, 0x0078, 0x5558, 0xa6b4, 0x00ff, 0xa6b5, 0x0800,
-+ 0x6eb6, 0xa6b5, 0x4000, 0x7e5a, 0x0078, 0x5558, 0x709f, 0x4da2,
-+ 0x0078, 0x2c5e, 0x0078, 0x4d8e, 0x2300, 0x0079, 0x4da7, 0x4dac,
-+ 0x4daa, 0x4daa, 0x1078, 0x2bfa, 0x1078, 0x2bfa, 0x2300, 0x719c,
-+ 0xa005, 0x017a, 0x6810, 0x70b2, 0xa282, 0x0003, 0x0050, 0x4dba,
-+ 0x1078, 0x2bfa, 0x2300, 0x0079, 0x4dbd, 0x4dc0, 0x4dce, 0x4df0,
-+ 0xa684, 0x0200, 0x0040, 0x4dc8, 0x1078, 0x552b, 0x1078, 0x552c,
-+ 0x2001, 0x0001, 0x1078, 0x54ae, 0x0078, 0x2c5e, 0xa286, 0x0002,
-+ 0x0040, 0x4dd7, 0x82ff, 0x0040, 0x4dd7, 0x1078, 0x2bfa, 0x709b,
-+ 0x4ddb, 0x0078, 0x556c, 0x2011, 0x0018, 0x1078, 0x508c, 0x0079,
-+ 0x4de1, 0x4de6, 0x2c5e, 0x4856, 0x4de8, 0x4dea, 0x0078, 0x5558,
-+ 0x0078, 0x5558, 0x709f, 0x4dee, 0x0078, 0x2c5e, 0x0078, 0x4de6,
-+ 0x2200, 0x0079, 0x4df3, 0x4df5, 0x4e0e, 0x709b, 0x4df9, 0x0078,
-+ 0x556c, 0x2011, 0x0017, 0x1078, 0x508c, 0x0079, 0x4dff, 0x4e04,
-+ 0x2c5e, 0x4856, 0x4e06, 0x4e08, 0x0078, 0x5558, 0x0078, 0x5558,
-+ 0x709f, 0x4e0c, 0x0078, 0x2c5e, 0x0078, 0x4e04, 0xd4fc, 0x00c0,
-+ 0x4e6b, 0xa684, 0x0100, 0x0040, 0x4e19, 0x1078, 0x552b, 0x1078,
-+ 0x5074, 0x78d8, 0x78d2, 0x78dc, 0x78d6, 0xa6b4, 0xefff, 0x7e5a,
-+ 0x709b, 0x4e24, 0x0078, 0x556c, 0x2011, 0x000d, 0x1078, 0x508c,
-+ 0x0079, 0x4e2a, 0x4e31, 0x2c5e, 0x4856, 0x4e31, 0x4e59, 0x4e5f,
-+ 0x4e61, 0x78d8, 0x79dc, 0xa105, 0x00c0, 0x4e43, 0x78b8, 0xa084,
-+ 0x801f, 0x00c0, 0x4e43, 0x70a7, 0x0000, 0x7858, 0xa084, 0xfdff,
-+ 0x785a, 0x0078, 0x5558, 0xa684, 0x0100, 0x0040, 0x4e57, 0x1078,
-+ 0x552c, 0x1078, 0x54d4, 0x027e, 0x037e, 0x682c, 0x78d2, 0x6830,
-+ 0x78d6, 0x70a7, 0x0000, 0x017f, 0x007f, 0x1078, 0x5972, 0x0078,
-+ 0x5558, 0x709f, 0x4e5d, 0x0078, 0x2c5e, 0x0078, 0x4e31, 0x1078,
-+ 0x2bfa, 0x709f, 0x4e67, 0x1078, 0x552c, 0x0078, 0x2c5e, 0x1078,
-+ 0x5572, 0x0078, 0x2c5e, 0x1078, 0x552c, 0x6918, 0xd1a4, 0x0040,
-+ 0x4e79, 0x6827, 0x000f, 0x1078, 0x54ae, 0x1078, 0x552c, 0x0078,
-+ 0x2c5e, 0x709f, 0x4e81, 0x2001, 0x0003, 0x1078, 0x54a6, 0x0078,
-+ 0x5564, 0x1078, 0x550e, 0x682c, 0x78d2, 0x6830, 0x78d6, 0x0078,
-+ 0x5558, 0x70ac, 0x6812, 0x70b2, 0x8000, 0x70ae, 0x681b, 0x0000,
-+ 0xa684, 0x0008, 0x0040, 0x4eac, 0x157e, 0x137e, 0x147e, 0x7890,
-+ 0x8004, 0x8004, 0x8004, 0x8004, 0xa084, 0x000f, 0x681a, 0x80ac,
-+ 0x789b, 0x0000, 0xaf80, 0x002b, 0x2098, 0xad80, 0x000b, 0x20a0,
-+ 0x53a5, 0x147f, 0x137f, 0x157f, 0xa6c4, 0x0f00, 0xa684, 0x0002,
-+ 0x00c0, 0x4ebb, 0x692c, 0x810d, 0x810d, 0x810d, 0xa184, 0x0007,
-+ 0x2008, 0x0078, 0x4ece, 0x789b, 0x0010, 0x79ac, 0xa184, 0x0020,
-+ 0x0040, 0x4ece, 0x017e, 0x2009, 0x0005, 0x2001, 0x3d00, 0x1078,
-+ 0x54df, 0x6824, 0xa085, 0x003b, 0x6826, 0x017f, 0xa184, 0x001f,
-+ 0xa805, 0x017e, 0x3208, 0xa18c, 0x0300, 0x0040, 0x4eda, 0xc0fc,
-+ 0x0078, 0x4edb, 0xc0fd, 0x017f, 0x6816, 0x1078, 0x47fa, 0x68ce,
-+ 0xa684, 0x0004, 0x0040, 0x4eea, 0xa18c, 0xff00, 0x78a8, 0xa084,
-+ 0x00ff, 0xa105, 0x682a, 0xa6b4, 0x00ff, 0x6000, 0xa084, 0x0008,
-+ 0x0040, 0x4ef4, 0xa6b5, 0x4000, 0x6eb6, 0x7e5a, 0x007c, 0x157e,
-+ 0x137e, 0x147e, 0x6918, 0x7890, 0x8004, 0x8004, 0x8004, 0x8004,
-+ 0xa084, 0x000f, 0x007e, 0xa100, 0x681a, 0x007f, 0x8000, 0x8004,
-+ 0x0040, 0x4f16, 0x20a8, 0x8104, 0xa080, 0x000b, 0xad00, 0x20a0,
-+ 0x789b, 0x0000, 0xaf80, 0x002b, 0x2098, 0x53a5, 0x147f, 0x137f,
-+ 0x157f, 0x007c, 0x682c, 0xd0b4, 0x00c0, 0x4f29, 0xd0ac, 0x00c0,
-+ 0x4f25, 0x2011, 0x0010, 0x0078, 0x4f31, 0x2011, 0x000c, 0x0078,
-+ 0x4f31, 0xa084, 0x0020, 0x00c0, 0x4f30, 0x620c, 0x0078, 0x4f31,
-+ 0x6210, 0x6b18, 0x2300, 0xa202, 0x0040, 0x4f51, 0x2018, 0xa382,
-+ 0x000e, 0x0048, 0x4f41, 0x0040, 0x4f41, 0x2019, 0x000e, 0x0078,
-+ 0x4f45, 0x7858, 0xa084, 0xffef, 0x785a, 0x783b, 0x1b01, 0x7893,
-+ 0x0000, 0x7ba2, 0x70a8, 0xa080, 0x0094, 0x781a, 0xa085, 0x0001,
-+ 0x007c, 0x7858, 0xa084, 0xffef, 0x785a, 0x7893, 0x0000, 0xa006,
-+ 0x007c, 0x6904, 0xa18c, 0x00ff, 0xa196, 0x0007, 0x0040, 0x4f66,
-+ 0xa196, 0x000f, 0x0040, 0x4f66, 0x6807, 0x0117, 0x6914, 0x6814,
-+ 0x1078, 0x47fa, 0x6100, 0x8104, 0x00c8, 0x4f82, 0x601c, 0xa005,
-+ 0x0040, 0x4f76, 0x2001, 0x0800, 0x0078, 0x4f84, 0x0d7e, 0x6824,
-+ 0x007e, 0x1078, 0x5539, 0x007f, 0x6826, 0x2d00, 0x682e, 0x1078,
-+ 0x4781, 0x0d7f, 0x2001, 0x0200, 0x6924, 0xa18c, 0x00ff, 0xa10d,
-+ 0x6926, 0x8007, 0x789b, 0x000e, 0x78aa, 0x6820, 0xa085, 0x8000,
-+ 0x6822, 0x2031, 0x0400, 0x6eb6, 0x7e5a, 0x71a8, 0xa188, 0x0097,
-+ 0x791a, 0x007c, 0x1078, 0x2d79, 0x6814, 0x2040, 0xa684, 0x0002,
-+ 0x00c0, 0x4fb0, 0x692c, 0x810d, 0x810d, 0x810d, 0xa184, 0x0007,
-+ 0x2008, 0xa805, 0x6816, 0x1078, 0x47fa, 0x68ce, 0x0078, 0x4fb4,
-+ 0x6914, 0x6814, 0x1078, 0x47fa, 0x6100, 0x8104, 0x00c8, 0x5012,
-+ 0xa184, 0x0300, 0x0040, 0x4fc0, 0x6807, 0x0117, 0x0078, 0x4fde,
-+ 0x6004, 0xa005, 0x00c0, 0x4fe7, 0x6807, 0x0117, 0x601c, 0xa005,
-+ 0x00c0, 0x4fd4, 0x0d7e, 0x1078, 0x5539, 0x6827, 0x0034, 0x2d00,
-+ 0x682e, 0x1078, 0x4781, 0x0d7f, 0xa684, 0x0004, 0x0040, 0x4fde,
-+ 0x2031, 0x0400, 0x2001, 0x2800, 0x0078, 0x4fe2, 0x2031, 0x0400,
-+ 0x2001, 0x0800, 0x71a8, 0xa188, 0x0097, 0x0078, 0x504f, 0x6018,
-+ 0xa005, 0x00c0, 0x4fd4, 0x601c, 0xa005, 0x00c0, 0x4fd4, 0x689f,
-+ 0x0000, 0x6827, 0x003d, 0xa684, 0x0001, 0x0040, 0x505d, 0xd694,
-+ 0x00c0, 0x500b, 0x6100, 0xd1d4, 0x0040, 0x500b, 0x692c, 0xa18c,
-+ 0x00ff, 0x0040, 0x505d, 0xa186, 0x0003, 0x0040, 0x505d, 0xa186,
-+ 0x0012, 0x0040, 0x505d, 0xa6b5, 0x0800, 0x71a8, 0xa188, 0x00b3,
-+ 0x0078, 0x5058, 0x6807, 0x0117, 0x2031, 0x0400, 0x692c, 0xa18c,
-+ 0x00ff, 0xa186, 0x0012, 0x00c0, 0x5023, 0x2001, 0x506a, 0x2009,
-+ 0x0001, 0x0078, 0x5034, 0xa186, 0x0003, 0x00c0, 0x502d, 0x2001,
-+ 0x506b, 0x2009, 0x0012, 0x0078, 0x5034, 0x2001, 0x0200, 0x71a8,
-+ 0xa188, 0x0097, 0x0078, 0x504f, 0x6a34, 0xa29d, 0x0000, 0x00c0,
-+ 0x503c, 0xa006, 0x0078, 0x502f, 0x007e, 0x2100, 0xa21a, 0x007f,
-+ 0x00c8, 0x5043, 0x2208, 0x1078, 0x54f9, 0x78a3, 0x0000, 0x681c,
-+ 0xa085, 0x0040, 0x681e, 0x71a8, 0xa188, 0x00d9, 0xa006, 0x6826,
-+ 0x8007, 0x789b, 0x000e, 0x78aa, 0x6820, 0xa085, 0x8000, 0x6822,
-+ 0x6eb6, 0x7e5a, 0x791a, 0x0078, 0x2c5e, 0x6eb6, 0x1078, 0x4781,
-+ 0x6810, 0x70b2, 0x7003, 0x0007, 0x7097, 0x0000, 0x7053, 0x0000,
-+ 0x0078, 0x2c5e, 0x0023, 0x0070, 0x0005, 0x0000, 0x0a00, 0x0000,
-+ 0x0000, 0x0025, 0x0000, 0x0000, 0x683b, 0x0000, 0x6837, 0x0000,
-+ 0xa684, 0x0200, 0x0040, 0x508b, 0x78b8, 0xa08c, 0x001f, 0xa084,
-+ 0x8000, 0x0040, 0x5084, 0x8108, 0x78d8, 0xa100, 0x6836, 0x78dc,
-+ 0xa081, 0x0000, 0x683a, 0x007c, 0x7990, 0x810f, 0xa5ac, 0x0007,
-+ 0x2021, 0x0000, 0xa480, 0x0010, 0x789a, 0x79a8, 0xa18c, 0x00ff,
-+ 0xa184, 0x0080, 0x00c0, 0x50ba, 0xa182, 0x0020, 0x00c8, 0x50d8,
-+ 0xa182, 0x0012, 0x00c8, 0x5496, 0x2100, 0x1079, 0x50a8, 0x007c,
-+ 0x5496, 0x52eb, 0x5496, 0x5496, 0x50e5, 0x50e8, 0x512f, 0x516d,
-+ 0x51a1, 0x51a4, 0x5496, 0x5496, 0x5150, 0x5213, 0x524d, 0x5496,
-+ 0x5496, 0x5274, 0xa184, 0x0020, 0x00c0, 0x52a8, 0xa18c, 0x001f,
-+ 0x6814, 0xa084, 0x001f, 0xa106, 0x0040, 0x50d5, 0x70a8, 0xa080,
-+ 0x0085, 0x781a, 0x2001, 0x0014, 0x1078, 0x54ae, 0x1078, 0x552c,
-+ 0x7003, 0x0000, 0x2001, 0x0002, 0x007c, 0x2001, 0x0000, 0x007c,
-+ 0xa182, 0x0024, 0x00c8, 0x5496, 0xa184, 0x0003, 0x1079, 0x50a8,
-+ 0x007c, 0x5496, 0x5496, 0x5496, 0x5496, 0x1078, 0x5496, 0x007c,
-+ 0x2200, 0x0079, 0x50eb, 0x5277, 0x5277, 0x511c, 0x511c, 0x511c,
-+ 0x511c, 0x511c, 0x511c, 0x511c, 0x511c, 0x511a, 0x511c, 0x5104,
-+ 0x510d, 0x510d, 0x510d, 0x511c, 0x511c, 0x5124, 0x5127, 0x5277,
-+ 0x5127, 0x511c, 0x511c, 0x511c, 0x0c7e, 0x077e, 0x6f14, 0x1078,
-+ 0x42de, 0x077f, 0x0c7f, 0x0078, 0x511c, 0x6818, 0xd0a4, 0x0040,
-+ 0x511c, 0x6827, 0x0033, 0x1078, 0x54ae, 0x1078, 0x552c, 0x2001,
-+ 0x0001, 0x007c, 0x1078, 0x53ae, 0x6827, 0x02b3, 0x2009, 0x000b,
-+ 0x2001, 0x4800, 0x0078, 0x52ab, 0x1078, 0x5486, 0x007c, 0x6827,
-+ 0x0093, 0x2009, 0x000b, 0x2001, 0x4800, 0x0078, 0x5293, 0x2d58,
-+ 0x6804, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x5139, 0x6807,
-+ 0x0117, 0x6827, 0x0002, 0x1078, 0x5539, 0x6827, 0x0036, 0x6932,
-+ 0x2d00, 0x682e, 0x0d7e, 0x1078, 0x4751, 0x1078, 0x52d3, 0x2b68,
-+ 0x1078, 0x4781, 0x0d7f, 0x1078, 0x4781, 0x2001, 0x0002, 0x007c,
-+ 0x1078, 0x52d3, 0x2001, 0x0017, 0x1078, 0x54ae, 0x7097, 0x0000,
-+ 0x6914, 0xd1fc, 0x0040, 0x5160, 0x2009, 0x6086, 0x0078, 0x5162,
-+ 0x2009, 0x6046, 0x200b, 0x0006, 0x70a3, 0x0017, 0x2009, 0x0200,
-+ 0x1078, 0x463f, 0x2001, 0x0001, 0x007c, 0x2200, 0x0079, 0x5170,
-+ 0x5277, 0x52a8, 0x52a8, 0x52a8, 0x5191, 0x52ba, 0x5199, 0x52ba,
-+ 0x52ba, 0x52bd, 0x52bd, 0x52c2, 0x52c2, 0x5189, 0x5189, 0x52a8,
-+ 0x52a8, 0x52ba, 0x52a8, 0x5199, 0x5277, 0x5199, 0x5199, 0x5199,
-+ 0x5199, 0x6827, 0x0084, 0x2009, 0x000b, 0x2001, 0x4300, 0x0078,
-+ 0x52cc, 0x6827, 0x000d, 0x2009, 0x000b, 0x2001, 0x4300, 0x0078,
-+ 0x52ab, 0x6827, 0x0093, 0x2009, 0x000b, 0x2001, 0x4300, 0x0078,
-+ 0x5293, 0x2001, 0x0000, 0x007c, 0x2200, 0x0079, 0x51a7, 0x5277,
-+ 0x520b, 0x520b, 0x520b, 0x520b, 0x51c0, 0x51c0, 0x51c0, 0x51c0,
-+ 0x51c0, 0x51c0, 0x51c0, 0x51c0, 0x520b, 0x520b, 0x520b, 0x520b,
-+ 0x51e8, 0x520b, 0x520b, 0x51e8, 0x51e8, 0x51e8, 0x51e8, 0x5277,
-+ 0x6804, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x51e8, 0x690c,
-+ 0xa184, 0x000f, 0x0040, 0x52ba, 0x8001, 0x0040, 0x51d5, 0xa18c,
-+ 0xfff0, 0xa105, 0x680e, 0x0078, 0x52ba, 0x70a8, 0xa080, 0x0085,
-+ 0x781a, 0x6827, 0x000f, 0x1078, 0x4f59, 0x1078, 0x54ae, 0x7003,
-+ 0x0000, 0x7043, 0x0000, 0x7053, 0x0000, 0x2001, 0x0002, 0x007c,
-+ 0x6918, 0xa184, 0x000f, 0x0040, 0x52ba, 0x8001, 0x0040, 0x51f6,
-+ 0xa18c, 0xfff0, 0xa105, 0x681a, 0x0078, 0x52ba, 0x70a8, 0xa080,
-+ 0x0085, 0x781a, 0x6827, 0x008f, 0x2009, 0x000b, 0x2001, 0x4300,
-+ 0x1078, 0x54df, 0x1078, 0x54ae, 0x1078, 0x552c, 0x7003, 0x0000,
-+ 0x2001, 0x0002, 0x007c, 0x6827, 0x0093, 0x2009, 0x000b, 0x2001,
-+ 0x4300, 0x0078, 0x5293, 0xa684, 0x0004, 0x00c0, 0x5227, 0x6804,
-+ 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x5496, 0x1078, 0x52d3,
-+ 0x6807, 0x0117, 0x1078, 0x4781, 0x2001, 0x0002, 0x007c, 0x6000,
-+ 0xa084, 0x0004, 0x0040, 0x5496, 0x2d58, 0x6804, 0xa084, 0x00ff,
-+ 0xa086, 0x0006, 0x00c0, 0x5236, 0x6807, 0x0117, 0x6827, 0x0002,
-+ 0x1078, 0x5539, 0x6827, 0x0036, 0x6932, 0x2d00, 0x682e, 0x0d7e,
-+ 0x1078, 0x4760, 0x1078, 0x52d3, 0x2b68, 0x1078, 0x4781, 0x0d7f,
-+ 0x1078, 0x4781, 0x2001, 0x0002, 0x007c, 0x6000, 0xa084, 0x0004,
-+ 0x0040, 0x5496, 0x2d58, 0x6a04, 0xa294, 0x00ff, 0xa286, 0x0006,
-+ 0x00c0, 0x525c, 0x6807, 0x0117, 0x6827, 0x0002, 0x2d58, 0x1078,
-+ 0x5539, 0x6827, 0x0036, 0x6932, 0x2d00, 0x682e, 0x0d7e, 0x1078,
-+ 0x4770, 0x1078, 0x52d3, 0x2b68, 0x1078, 0x4781, 0x0d7f, 0x1078,
-+ 0x4781, 0x2001, 0x0002, 0x007c, 0x1078, 0x5496, 0x007c, 0x70a8,
-+ 0xa080, 0x0085, 0x781a, 0x2001, 0x0001, 0x1078, 0x54ae, 0x1078,
-+ 0x552c, 0x7003, 0x0000, 0x2001, 0x0002, 0x007c, 0x1078, 0x54df,
-+ 0x1078, 0x552b, 0x1078, 0x5074, 0x1078, 0x4f59, 0x1078, 0x552c,
-+ 0x2001, 0x0001, 0x007c, 0x1078, 0x54df, 0x1078, 0x552b, 0x1078,
-+ 0x5074, 0x70a8, 0xa080, 0x0085, 0x781a, 0x2001, 0x0013, 0x1078,
-+ 0x54ae, 0x1078, 0x552c, 0x7003, 0x0000, 0x2001, 0x0002, 0x007c,
-+ 0x1078, 0x5496, 0x007c, 0x1078, 0x54df, 0x1078, 0x552b, 0x1078,
-+ 0x5074, 0x1078, 0x4f59, 0x1078, 0x552c, 0x1078, 0x5572, 0x2001,
-+ 0x0001, 0x007c, 0x2001, 0x0003, 0x007c, 0x1078, 0x53ae, 0x2001,
-+ 0x0000, 0x007c, 0x0c7e, 0x077e, 0x6f14, 0x1078, 0x42de, 0x077f,
-+ 0x0c7f, 0x2001, 0x0000, 0x007c, 0x1078, 0x54df, 0x1078, 0x5496,
-+ 0x2001, 0x0006, 0x007c, 0x6904, 0xa18c, 0x00ff, 0xa186, 0x0007,
-+ 0x0040, 0x52de, 0xa186, 0x000f, 0x00c0, 0x52e2, 0x1078, 0x552b,
-+ 0x1078, 0x5074, 0x70a8, 0xa080, 0x0085, 0x781a, 0x1078, 0x552c,
-+ 0x7003, 0x0000, 0x007c, 0x7aa8, 0xa294, 0x00ff, 0x78a8, 0xa084,
-+ 0x00ff, 0xa08a, 0x0004, 0x00c8, 0x5496, 0x1079, 0x52f8, 0x007c,
-+ 0x5496, 0x52fc, 0x5496, 0x53b5, 0xa282, 0x0003, 0x0040, 0x5303,
-+ 0x1078, 0x5496, 0x007c, 0x7da8, 0xa5ac, 0x00ff, 0x7ca8, 0xa4a4,
-+ 0x00ff, 0x69b8, 0xa184, 0x0100, 0x0040, 0x5342, 0xa18c, 0xfeff,
-+ 0x69ba, 0x78a0, 0xa005, 0x00c0, 0x5342, 0xa4a4, 0x00ff, 0x0040,
-+ 0x5336, 0xa482, 0x000c, 0x0040, 0x531f, 0x00c8, 0x5329, 0x852b,
-+ 0x852b, 0x1078, 0x4334, 0x0040, 0x5329, 0x1078, 0x4162, 0x0078,
-+ 0x5338, 0x1078, 0x5474, 0x1078, 0x418d, 0x69b8, 0xa18d, 0x0100,
-+ 0x69ba, 0xa6b5, 0x1000, 0x7e5a, 0x0078, 0x533b, 0x1078, 0x418d,
-+ 0xa6b4, 0xefff, 0x7e5a, 0x70a8, 0xa080, 0x0097, 0x781a, 0x2001,
-+ 0x0001, 0x007c, 0x0c7e, 0x1078, 0x539c, 0x6200, 0xd2e4, 0x0040,
-+ 0x538b, 0x6208, 0x8217, 0xa294, 0x00ff, 0xa282, 0x000c, 0x0048,
-+ 0x5355, 0x0040, 0x5355, 0x2011, 0x000c, 0x2400, 0xa202, 0x00c8,
-+ 0x535a, 0x2220, 0x6208, 0xa294, 0x00ff, 0x2001, 0x6003, 0x2004,
-+ 0xd0e4, 0x00c0, 0x536f, 0x78ec, 0xd0e4, 0x0040, 0x536f, 0xa282,
-+ 0x000a, 0x00c8, 0x5375, 0x2011, 0x000a, 0x0078, 0x5375, 0xa282,
-+ 0x000c, 0x00c8, 0x5375, 0x2011, 0x000c, 0x2200, 0xa502, 0x00c8,
-+ 0x537a, 0x2228, 0x1078, 0x5477, 0x2500, 0xa086, 0x000a, 0x0040,
-+ 0x5383, 0x852b, 0x852b, 0x1078, 0x4334, 0x0040, 0x538b, 0x1078,
-+ 0x4169, 0x0078, 0x538f, 0x1078, 0x5474, 0x1078, 0x4194, 0xa6b5,
-+ 0x1000, 0x7e5a, 0x783b, 0x1700, 0x70a8, 0xa080, 0x00c4, 0x781a,
-+ 0x2001, 0x0004, 0x0c7f, 0x007c, 0x6814, 0x8007, 0xa084, 0x000f,
-+ 0x8003, 0x8003, 0x8003, 0x6914, 0xd1fc, 0x00c0, 0x53ab, 0xa0e0,
-+ 0x64c0, 0x0078, 0x53ad, 0xa0e0, 0x6540, 0x007c, 0x0c7e, 0x1078,
-+ 0x539c, 0x1078, 0x4194, 0x0c7f, 0x007c, 0xa282, 0x0002, 0x00c0,
-+ 0x5496, 0x7aa8, 0xa294, 0x00ff, 0x69b8, 0xa184, 0x0200, 0x0040,
-+ 0x53ec, 0xa18c, 0xfdff, 0x69ba, 0x78a0, 0xa005, 0x00c0, 0x53ec,
-+ 0xa282, 0x0002, 0x00c8, 0x429c, 0x1078, 0x544c, 0x1078, 0x4227,
-+ 0x1078, 0x418d, 0xa684, 0x0100, 0x0040, 0x53e2, 0x682c, 0xa084,
-+ 0x0001, 0x0040, 0x53e2, 0xc6fc, 0x7888, 0xa084, 0x0040, 0x0040,
-+ 0x53e2, 0xc6fd, 0xa6b5, 0x1000, 0x7e5a, 0x70a8, 0xa080, 0x0097,
-+ 0x781a, 0x2001, 0x0001, 0x007c, 0x0c7e, 0x1078, 0x539c, 0xa284,
-+ 0xfffe, 0x0040, 0x53f7, 0x2011, 0x0001, 0x0078, 0x53fb, 0xa284,
-+ 0x0001, 0x0040, 0x5401, 0x6100, 0xd1ec, 0x00c0, 0x5401, 0x2011,
-+ 0x0000, 0x1078, 0x543e, 0x1078, 0x422e, 0x1078, 0x4194, 0xa684,
-+ 0x0100, 0x0040, 0x5417, 0x682c, 0xa084, 0x0001, 0x0040, 0x5417,
-+ 0xc6fc, 0x7888, 0xa084, 0x0040, 0x0040, 0x5417, 0xc6fd, 0xa6b5,
-+ 0x1000, 0x7e5a, 0x783b, 0x1700, 0x70a8, 0xa080, 0x00c4, 0x781a,
-+ 0x2001, 0x0004, 0x0c7f, 0x007c, 0x0c7e, 0x2960, 0x6000, 0x2011,
-+ 0x0001, 0xa084, 0x2000, 0x00c0, 0x542f, 0x2011, 0x0000, 0x78ab,
-+ 0x0001, 0x78ab, 0x0002, 0x78ab, 0x0003, 0x7aaa, 0xa8c0, 0x0004,
-+ 0x68b8, 0xa085, 0x0200, 0x68ba, 0x0c7f, 0x007c, 0x789b, 0x0018,
-+ 0x78ab, 0x0001, 0x78ab, 0x0002, 0x78ab, 0x0003, 0x7aaa, 0x789b,
-+ 0x0081, 0x78ab, 0x0004, 0x007c, 0x0c7e, 0x705c, 0x2060, 0x6000,
-+ 0xa084, 0x1000, 0x00c0, 0x545a, 0x2029, 0x0032, 0x2021, 0x0000,
-+ 0x0078, 0x546c, 0x6408, 0xa4ac, 0x00ff, 0xa582, 0x000c, 0x00c8,
-+ 0x5463, 0x2029, 0x000c, 0x8427, 0xa4a4, 0x00ff, 0xa482, 0x000c,
-+ 0x0048, 0x546c, 0x2021, 0x000c, 0x1078, 0x5477, 0x68b8, 0xa085,
-+ 0x0100, 0x68ba, 0x0c7f, 0x007c, 0xa026, 0x2029, 0x0032, 0x789b,
-+ 0x0018, 0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab, 0x0001, 0x7daa,
-+ 0x7caa, 0x789b, 0x0081, 0x78ab, 0x0005, 0x007c, 0x2001, 0x0003,
-+ 0x1078, 0x54a6, 0xa6b5, 0x1000, 0x7e5a, 0x783b, 0x1700, 0x70a8,
-+ 0xa080, 0x00c4, 0x781a, 0x2001, 0x0005, 0x007c, 0x2001, 0x0007,
-+ 0x1078, 0x54a6, 0xa6b5, 0x1000, 0x7e5a, 0x783b, 0x1700, 0x70a8,
-+ 0xa080, 0x00c4, 0x781a, 0x2001, 0x0004, 0x007c, 0x789b, 0x0018,
-+ 0x78aa, 0x789b, 0x0081, 0x78ab, 0x0001, 0x007c, 0x6904, 0xa18c,
-+ 0x00ff, 0xa196, 0x0007, 0x0040, 0x54bc, 0xa196, 0x000f, 0x0040,
-+ 0x54bc, 0x1078, 0x1e55, 0x007c, 0x6924, 0xa194, 0x003f, 0x00c0,
-+ 0x54c5, 0xa18c, 0xffc0, 0xa105, 0x6826, 0x1078, 0x4781, 0x691c,
-+ 0xa184, 0x0100, 0x0040, 0x54d3, 0x6914, 0x2100, 0x1078, 0x47fa,
-+ 0x6204, 0x8210, 0x6206, 0x007c, 0x692c, 0x6834, 0x682e, 0xa112,
-+ 0x6930, 0x6838, 0x6832, 0xa11b, 0xa200, 0xa301, 0x007c, 0x0c7e,
-+ 0xade0, 0x0018, 0x6003, 0x0070, 0x6106, 0x600b, 0x0000, 0x600f,
-+ 0x0a00, 0x6013, 0x0000, 0x6017, 0x0000, 0x8007, 0x601a, 0x601f,
-+ 0x0000, 0x6023, 0x0000, 0x0c7f, 0x6824, 0xa085, 0x0080, 0x6826,
-+ 0x007c, 0x157e, 0x137e, 0x147e, 0x2098, 0xaf80, 0x002d, 0x20a0,
-+ 0x81ac, 0x0040, 0x5504, 0x53a6, 0xa184, 0x0001, 0x0040, 0x550a,
-+ 0x3304, 0x78be, 0x147f, 0x137f, 0x157f, 0x007c, 0x70a4, 0x0e7e,
-+ 0x007e, 0x007f, 0x0e7f, 0xa005, 0x6918, 0x017e, 0x6914, 0x017e,
-+ 0x6928, 0x017e, 0x017f, 0x017f, 0x017f, 0x10c0, 0x2bfa, 0x70a7,
-+ 0x8000, 0x6814, 0xd0fc, 0x0040, 0x5528, 0xc185, 0x0078, 0x5529,
-+ 0xc184, 0x0078, 0x591e, 0x007c, 0x71a4, 0x81ff, 0x0040, 0x5538,
-+ 0x7848, 0xa085, 0x0008, 0x784a, 0x70a7, 0x0000, 0x1078, 0x55ac,
-+ 0x007c, 0x0c7e, 0x0d7e, 0x1078, 0x1e32, 0x0c7f, 0x157e, 0x137e,
-+ 0x147e, 0x2da0, 0x2c98, 0x20a9, 0x0037, 0x53a3, 0x147f, 0x137f,
-+ 0x157f, 0x6807, 0x010d, 0x680b, 0x0000, 0x701c, 0x8007, 0x681a,
-+ 0x6823, 0x0000, 0x681f, 0x0000, 0x689f, 0x0000, 0x0c7f, 0x007c,
-+ 0x70a8, 0xa080, 0x0097, 0x781a, 0x0078, 0x2c5e, 0x70a8, 0xa080,
-+ 0x0088, 0x781a, 0x0078, 0x2c5e, 0x783b, 0x1700, 0x70a8, 0xa080,
-+ 0x00c4, 0x781a, 0x0078, 0x2c5e, 0x70a8, 0xa080, 0x00cd, 0x781a,
-+ 0x0078, 0x2c5e, 0x6904, 0xa18c, 0x00ff, 0xa196, 0x0007, 0x0040,
-+ 0x557f, 0xa196, 0x000f, 0x0040, 0x557f, 0x6807, 0x0117, 0x6824,
-+ 0xa084, 0x00ff, 0xa085, 0x0200, 0x6826, 0x8007, 0x789b, 0x000e,
-+ 0x78aa, 0x6820, 0xa085, 0x8000, 0x6822, 0x2031, 0x0400, 0x6eb6,
-+ 0x7e5a, 0x71a8, 0xa188, 0x0097, 0x791a, 0x007c, 0x1078, 0x552c,
-+ 0x7848, 0xa085, 0x000c, 0x784a, 0x70a8, 0xa080, 0x0085, 0x781a,
-+ 0x2009, 0x000b, 0x2001, 0x4400, 0x1078, 0x54df, 0x2001, 0x0013,
-+ 0x1078, 0x54ae, 0x0078, 0x4856, 0x127e, 0x70f0, 0xa084, 0x4600,
-+ 0x8004, 0x2090, 0x7204, 0x700c, 0xa215, 0x7008, 0xc09c, 0xa205,
-+ 0x00c0, 0x55c1, 0x7007, 0x0004, 0x7003, 0x0000, 0x127f, 0x2000,
-+ 0x007c, 0x7000, 0xd084, 0x0040, 0x5600, 0x7108, 0x0005, 0x7008,
-+ 0xa106, 0x00c0, 0x55c5, 0xa184, 0x0003, 0x0040, 0x562c, 0xa184,
-+ 0x01e0, 0x00c0, 0x562c, 0xd1f4, 0x00c0, 0x55c5, 0xa184, 0x3000,
-+ 0xa086, 0x1000, 0x0040, 0x55c5, 0x2011, 0x0180, 0x710c, 0x8211,
-+ 0x0040, 0x55ea, 0x7008, 0xd0f4, 0x00c0, 0x55c5, 0x700c, 0xa106,
-+ 0x0040, 0x55df, 0x7007, 0x0012, 0x7108, 0x0005, 0x7008, 0xa106,
-+ 0x00c0, 0x55ec, 0xa184, 0x0003, 0x0040, 0x562c, 0xd194, 0x0040,
-+ 0x55ec, 0xd1f4, 0x0040, 0x562c, 0x7007, 0x0002, 0x0078, 0x55c5,
-+ 0x7108, 0xd1fc, 0x0040, 0x560b, 0x1078, 0x5792, 0x8aff, 0x0040,
-+ 0x55b2, 0x0078, 0x5600, 0x700c, 0xa08c, 0x03ff, 0x0040, 0x5631,
-+ 0x7004, 0xd084, 0x0040, 0x5623, 0x7014, 0xa005, 0x00c0, 0x561f,
-+ 0x7010, 0xa005, 0x0040, 0x5623, 0xa102, 0x00c8, 0x5600, 0x7007,
-+ 0x0010, 0x0078, 0x562c, 0x8aff, 0x0040, 0x5631, 0x1078, 0x5a15,
-+ 0x00c0, 0x5626, 0x0040, 0x5600, 0x1078, 0x56da, 0x127f, 0x2000,
-+ 0x007c, 0x7204, 0x700c, 0xa215, 0x7108, 0xc19c, 0x8103, 0x00c8,
-+ 0x5640, 0xa205, 0x00c0, 0x562c, 0x7007, 0x0002, 0x0078, 0x5631,
-+ 0xa205, 0x00c0, 0x562c, 0x7003, 0x0000, 0x7007, 0x0004, 0x127f,
-+ 0x2000, 0x007c, 0x017e, 0x6104, 0xa18c, 0x00ff, 0xa186, 0x0007,
-+ 0x0040, 0x5656, 0xa18e, 0x000f, 0x00c0, 0x5659, 0x6040, 0x0078,
-+ 0x565a, 0x6428, 0x017f, 0x84ff, 0x0040, 0x5684, 0x2c70, 0x7004,
-+ 0xa0bc, 0x000f, 0xa7b8, 0x5694, 0x273c, 0x87fb, 0x00c0, 0x5672,
-+ 0x0048, 0x566c, 0x1078, 0x2bfa, 0x609c, 0xa075, 0x0040, 0x5684,
-+ 0x0078, 0x565f, 0x2704, 0xae68, 0x6808, 0xa630, 0x680c, 0xa529,
-+ 0x8421, 0x0040, 0x5684, 0x8738, 0x2704, 0xa005, 0x00c0, 0x5673,
-+ 0x709c, 0xa075, 0x00c0, 0x565f, 0x007c, 0x0000, 0x0005, 0x0009,
-+ 0x000d, 0x0011, 0x0015, 0x0019, 0x001d, 0x0000, 0x0003, 0x0009,
-+ 0x000f, 0x0015, 0x001b, 0x0000, 0x0000, 0x5689, 0x5686, 0x0000,
-+ 0x0000, 0x8000, 0x0000, 0x5689, 0x0000, 0x5691, 0x568e, 0x0000,
-+ 0x0000, 0x0000, 0x0000, 0x5691, 0x0000, 0x568c, 0x568c, 0x0000,
-+ 0x0000, 0x8000, 0x0000, 0x568c, 0x0000, 0x5692, 0x5692, 0x0000,
-+ 0x0000, 0x0000, 0x0000, 0x5692, 0x2079, 0x6000, 0x2071, 0x0010,
-+ 0x7007, 0x000a, 0x7007, 0x0002, 0x7003, 0x0000, 0x7808, 0xd0ec,
-+ 0x0040, 0x56c8, 0x2009, 0x0001, 0x2071, 0x0020, 0x0078, 0x56cc,
-+ 0x2009, 0x0002, 0x2071, 0x0050, 0x7007, 0x000a, 0x7007, 0x0002,
-+ 0x7003, 0x0000, 0x8109, 0x0040, 0x56d9, 0x2071, 0x0020, 0x0078,
-+ 0x56cc, 0x007c, 0x2019, 0x0000, 0x7004, 0x8004, 0x00c8, 0x5761,
-+ 0x7108, 0x7008, 0xa106, 0x00c0, 0x56e0, 0xa184, 0x01e0, 0x0040,
-+ 0x56ed, 0x1078, 0x57d8, 0x0078, 0x5789, 0x7007, 0x0012, 0x7108,
-+ 0x7008, 0xa106, 0x00c0, 0x56ef, 0xa184, 0x01e0, 0x0040, 0x56fa,
-+ 0x1078, 0x57d8, 0x7808, 0xd0ec, 0x0040, 0x5714, 0x2001, 0x04fd,
-+ 0x2004, 0xa086, 0x0003, 0x00c0, 0x5718, 0xa184, 0x4000, 0x0040,
-+ 0x571c, 0xa382, 0x0003, 0x00c8, 0x571c, 0xa184, 0x0004, 0x0040,
-+ 0x56ef, 0x8318, 0x0078, 0x56ef, 0x780c, 0xd0ec, 0x00c0, 0x571c,
-+ 0xa184, 0x4000, 0x00c0, 0x56ef, 0xa19c, 0x300c, 0xa386, 0x2004,
-+ 0x0040, 0x5739, 0xa386, 0x0008, 0x0040, 0x5744, 0x7004, 0xd084,
-+ 0x00c0, 0x5735, 0x7108, 0x7008, 0xa106, 0x00c0, 0x572a, 0xa184,
-+ 0x0003, 0x0040, 0x5735, 0x0078, 0x57d8, 0xa386, 0x200c, 0x00c0,
-+ 0x56ef, 0x7200, 0x8204, 0x0048, 0x5744, 0x730c, 0xa384, 0x03ff,
-+ 0x0040, 0x5744, 0x1078, 0x2bfa, 0x7108, 0x7008, 0xa106, 0x00c0,
-+ 0x5744, 0xa184, 0x01e0, 0x0040, 0x5751, 0x1078, 0x57d8, 0x0078,
-+ 0x5789, 0x7007, 0x0012, 0x7000, 0xd084, 0x00c0, 0x5761, 0x7310,
-+ 0x7014, 0xa305, 0x0040, 0x5761, 0x710c, 0xa184, 0x03ff, 0x00c0,
-+ 0x56da, 0x7108, 0x7008, 0xa106, 0x00c0, 0x5761, 0xa184, 0x01e0,
-+ 0x0040, 0x576e, 0x1078, 0x57d8, 0x0078, 0x5789, 0x7007, 0x0012,
-+ 0x7007, 0x0008, 0x7004, 0xd09c, 0x00c0, 0x5772, 0x7108, 0x7008,
-+ 0xa106, 0x00c0, 0x5776, 0xa184, 0x01e0, 0x0040, 0x5783, 0x1078,
-+ 0x57d8, 0x0078, 0x5789, 0x7007, 0x0012, 0x7108, 0xd1fc, 0x00c0,
-+ 0x5776, 0x7003, 0x0000, 0x007c, 0x157e, 0x7108, 0x1078, 0x5792,
-+ 0x157f, 0x007c, 0x7204, 0x7500, 0xa184, 0x01e0, 0x00c0, 0x57d8,
-+ 0x7108, 0xa184, 0x01e0, 0x00c0, 0x57d8, 0xa184, 0x0007, 0x0079,
-+ 0x57a1, 0x57ab, 0x57bc, 0x57a9, 0x57bc, 0x57a9, 0x582f, 0x57a9,
-+ 0x582d, 0x1078, 0x2bfa, 0x7004, 0xa084, 0x0010, 0xc08d, 0x7006,
-+ 0x8aff, 0x00c0, 0x57b7, 0x2049, 0x0000, 0x0078, 0x57bb, 0x1078,
-+ 0x5a15, 0x00c0, 0x57b7, 0x007c, 0x7004, 0xa084, 0x0010, 0xc08d,
-+ 0x7006, 0x7004, 0xd084, 0x00c0, 0x57d0, 0x7108, 0x7008, 0xa106,
-+ 0x00c0, 0x57c5, 0xa184, 0x0003, 0x0040, 0x57d0, 0x0078, 0x57d8,
-+ 0x8aff, 0x0040, 0x57d7, 0x1078, 0x5a15, 0x00c0, 0x57d3, 0x007c,
-+ 0x7007, 0x0012, 0x7108, 0x00e0, 0x57db, 0x2091, 0x6000, 0x00e0,
-+ 0x57df, 0x2091, 0x6000, 0x7007, 0x0012, 0x7007, 0x0008, 0x7004,
-+ 0xd09c, 0x00c0, 0x57e7, 0x7007, 0x0012, 0x7108, 0xd1fc, 0x00c0,
-+ 0x57eb, 0x7003, 0x0000, 0x7000, 0xa005, 0x00c0, 0x57ff, 0x7004,
-+ 0xa005, 0x00c0, 0x57ff, 0x700c, 0xa005, 0x0040, 0x5801, 0x0078,
-+ 0x57e3, 0x2049, 0x0000, 0xb284, 0x0100, 0x0040, 0x580b, 0x2001,
-+ 0x0000, 0x0078, 0x580d, 0x2001, 0x0001, 0x1078, 0x43c9, 0xb284,
-+ 0x0100, 0x0040, 0x5817, 0x2001, 0x6064, 0x0078, 0x5819, 0x2001,
-+ 0x60a4, 0x2004, 0xa084, 0x8000, 0x0040, 0x5826, 0x6824, 0xa005,
-+ 0x00c0, 0x5828, 0x6827, 0x0004, 0x0078, 0x5828, 0x681b, 0x0002,
-+ 0x007c, 0x1078, 0x2bfa, 0x1078, 0x2bfa, 0x1078, 0x5877, 0x7210,
-+ 0x7114, 0x700c, 0xa09c, 0x03ff, 0x2800, 0xa300, 0xa211, 0xa189,
-+ 0x0000, 0x1078, 0x5877, 0x2704, 0x2c58, 0xac60, 0x6308, 0x2200,
-+ 0xa322, 0x630c, 0x2100, 0xa31b, 0x2400, 0xa305, 0x0040, 0x5852,
-+ 0x00c8, 0x5852, 0x8412, 0x8210, 0x830a, 0xa189, 0x0000, 0x2b60,
-+ 0x0078, 0x5839, 0x2b60, 0x8a07, 0x007e, 0x6004, 0xa084, 0x0008,
-+ 0x0040, 0x585e, 0xa7ba, 0x568e, 0x0078, 0x5860, 0xa7ba, 0x5686,
-+ 0x007f, 0xa73d, 0x2c00, 0x6886, 0x6f8a, 0x6c92, 0x6b8e, 0x7108,
-+ 0x7008, 0xa106, 0x00c0, 0x5867, 0xa184, 0x01e0, 0x0040, 0x5872,
-+ 0x1078, 0x57d8, 0x7007, 0x0012, 0x1078, 0x56da, 0x007c, 0x8a50,
-+ 0x8739, 0x2704, 0xa004, 0x00c0, 0x588b, 0x6000, 0xa064, 0x00c0,
-+ 0x5882, 0x2d60, 0x6004, 0xa084, 0x000f, 0xa080, 0x56a4, 0x203c,
-+ 0x87fb, 0x1040, 0x2bfa, 0x007c, 0x127e, 0x0d7e, 0x70f0, 0xa084,
-+ 0x4600, 0x8004, 0x2090, 0x0d7f, 0x6884, 0x2060, 0x6888, 0x6b8c,
-+ 0x6c90, 0x8057, 0xaad4, 0x00ff, 0xa084, 0x00ff, 0x007e, 0x6804,
-+ 0xa084, 0x0008, 0x007f, 0x0040, 0x58a9, 0xa0b8, 0x568e, 0x0078,
-+ 0x58ab, 0xa0b8, 0x5686, 0xb284, 0x0100, 0x0040, 0x58b2, 0x7e18,
-+ 0x0078, 0x58b3, 0x7e1c, 0xa6b5, 0x000c, 0x6904, 0xa18c, 0x00ff,
-+ 0xa186, 0x0007, 0x0040, 0x58c0, 0xa18e, 0x000f, 0x00c0, 0x58c8,
-+ 0x681c, 0xa084, 0x0040, 0x0040, 0x58cd, 0xc685, 0x0078, 0x58cd,
-+ 0x681c, 0xd0b4, 0x0040, 0x58cd, 0xc685, 0x700c, 0xa084, 0x03ff,
-+ 0x0040, 0x58d8, 0x7007, 0x0004, 0x7004, 0xd094, 0x00c0, 0x58d4,
-+ 0x2400, 0xa305, 0x00c0, 0x58de, 0x0078, 0x5904, 0x2c58, 0x2704,
-+ 0x6104, 0xac60, 0x6000, 0xa400, 0x701a, 0x6004, 0xa301, 0x701e,
-+ 0xa184, 0x0008, 0x0040, 0x58f4, 0x6010, 0xa081, 0x0000, 0x7022,
-+ 0x6014, 0xa081, 0x0000, 0x7026, 0x6208, 0x2400, 0xa202, 0x7012,
-+ 0x620c, 0x2300, 0xa203, 0x7016, 0x7602, 0x7007, 0x0001, 0x2b60,
-+ 0x1078, 0x5a43, 0x0078, 0x5906, 0x1078, 0x5a15, 0x00c0, 0x5904,
-+ 0x127f, 0x2000, 0x007c, 0x127e, 0x0d7e, 0x70f0, 0xa084, 0x4600,
-+ 0x8004, 0x2090, 0x0d7f, 0x7007, 0x0004, 0x7004, 0xd094, 0x00c0,
-+ 0x5915, 0x7003, 0x0008, 0x127f, 0x2000, 0x007c, 0x127e, 0x0d7e,
-+ 0x70f0, 0xa084, 0x4600, 0x8004, 0x2090, 0x0d7f, 0x700c, 0xa084,
-+ 0x03ff, 0x0040, 0x5931, 0x7007, 0x0004, 0x7004, 0xd094, 0x00c0,
-+ 0x592d, 0x6814, 0xd0fc, 0x0040, 0x5938, 0x7e1c, 0x0078, 0x5939,
-+ 0x7e18, 0xa6b5, 0x000c, 0x6904, 0xa18c, 0x00ff, 0xa186, 0x0007,
-+ 0x0040, 0x5946, 0xa18e, 0x000f, 0x00c0, 0x5950, 0x681c, 0xa084,
-+ 0x0040, 0x0040, 0x594c, 0xc685, 0x6840, 0x2050, 0x0078, 0x5957,
-+ 0x681c, 0xd0ac, 0x00c0, 0x5955, 0xc685, 0x6828, 0x2050, 0x2d60,
-+ 0x6004, 0xa0bc, 0x000f, 0xa7b8, 0x5694, 0x273c, 0x87fb, 0x00c0,
-+ 0x596b, 0x0048, 0x5965, 0x1078, 0x2bfa, 0x689c, 0xa065, 0x0040,
-+ 0x596f, 0x0078, 0x5958, 0x1078, 0x5a15, 0x00c0, 0x596b, 0x127f,
-+ 0x2000, 0x007c, 0x127e, 0x007e, 0x017e, 0x0d7e, 0x70f0, 0xa084,
-+ 0x4600, 0x8004, 0x2090, 0xb284, 0x0100, 0x0040, 0x5982, 0x7e18,
-+ 0x0078, 0x5983, 0x7e1c, 0x0d7f, 0x037f, 0x047f, 0xa6b5, 0x000c,
-+ 0x6904, 0xa18c, 0x00ff, 0xa186, 0x0007, 0x0040, 0x5993, 0xa18e,
-+ 0x000f, 0x00c0, 0x599b, 0x681c, 0xa084, 0x0040, 0x0040, 0x59a0,
-+ 0xc685, 0x0078, 0x59a0, 0x681c, 0xd0b4, 0x0040, 0x59a0, 0xc685,
-+ 0x2049, 0x5972, 0x017e, 0x6904, 0xa18c, 0x00ff, 0xa186, 0x0007,
-+ 0x0040, 0x59ae, 0xa18e, 0x000f, 0x00c0, 0x59b1, 0x6840, 0x0078,
-+ 0x59b2, 0x6828, 0x017f, 0xa055, 0x0d7e, 0x0040, 0x5a11, 0x2d70,
-+ 0x2e60, 0x7004, 0xa0bc, 0x000f, 0xa7b8, 0x5694, 0x273c, 0x87fb,
-+ 0x00c0, 0x59cd, 0x0048, 0x59c6, 0x1078, 0x2bfa, 0x709c, 0xa075,
-+ 0x2060, 0x0040, 0x5a11, 0x0078, 0x59b9, 0x2704, 0xae68, 0x6808,
-+ 0xa422, 0x680c, 0xa31b, 0x0048, 0x59e6, 0x8a51, 0x00c0, 0x59da,
-+ 0x1078, 0x2bfa, 0x8738, 0x2704, 0xa005, 0x00c0, 0x59ce, 0x709c,
-+ 0xa075, 0x2060, 0x0040, 0x5a11, 0x0078, 0x59b9, 0x8422, 0x8420,
-+ 0x831a, 0xa399, 0x0000, 0x6908, 0x2400, 0xa122, 0x690c, 0x2300,
-+ 0xa11b, 0x00c8, 0x59f5, 0x1078, 0x2bfa, 0x017e, 0x3208, 0xa18c,
-+ 0x0100, 0x0040, 0x5a0b, 0x007e, 0x2001, 0x6002, 0x2004, 0xd0ec,
-+ 0x007f, 0x0040, 0x5a07, 0x2071, 0x0020, 0x0078, 0x5a0d, 0x2071,
-+ 0x0050, 0x0078, 0x5a0d, 0x2071, 0x0020, 0x017f, 0x0d7f, 0x0078,
-+ 0x58cd, 0x0d7f, 0x127f, 0x2000, 0x007c, 0x7008, 0x007e, 0xa084,
-+ 0x01e0, 0x007f, 0x0040, 0x5a1e, 0xa006, 0x007c, 0xa084, 0x0003,
-+ 0xa086, 0x0003, 0x00c0, 0x5a25, 0x007c, 0x2704, 0xac08, 0x2104,
-+ 0x701a, 0x8108, 0x2104, 0x701e, 0x8108, 0x2104, 0x7012, 0x8108,
-+ 0x2104, 0x7016, 0x6004, 0xa084, 0x0008, 0x0040, 0x5a3d, 0x8108,
-+ 0x2104, 0x7022, 0x8108, 0x2104, 0x7026, 0x7602, 0x7004, 0xa084,
-+ 0x0010, 0xc085, 0x7006, 0x8738, 0x2704, 0xa005, 0x00c0, 0x5a56,
-+ 0x609c, 0xa005, 0x0040, 0x5a68, 0x2060, 0x6004, 0xa084, 0x000f,
-+ 0xa080, 0x5694, 0x203c, 0x87fb, 0x1040, 0x2bfa, 0x8a51, 0x0040,
-+ 0x5a67, 0x7008, 0x007e, 0xa084, 0x01e0, 0x007f, 0x0040, 0x5a63,
-+ 0xa006, 0x0078, 0x5a68, 0xa084, 0x0003, 0xa086, 0x0003, 0x007c,
-+ 0x2051, 0x0000, 0x007c, 0x127e, 0x007e, 0x0d7e, 0x70f0, 0xa084,
-+ 0x4600, 0x8004, 0x2090, 0x0d7f, 0x087f, 0x7108, 0xa184, 0x0003,
-+ 0x00c0, 0x5a90, 0x017e, 0x6904, 0xa18c, 0x00ff, 0xa186, 0x0007,
-+ 0x0040, 0x5a86, 0xa18e, 0x000f, 0x00c0, 0x5a89, 0x6840, 0x0078,
-+ 0x5a8a, 0x6828, 0x017f, 0xa005, 0x0040, 0x5aa0, 0x0078, 0x55c1,
-+ 0x7108, 0xd1fc, 0x0040, 0x5a98, 0x1078, 0x5792, 0x0078, 0x5a75,
-+ 0x7007, 0x0010, 0x7108, 0xd1fc, 0x0040, 0x5a9a, 0x1078, 0x5792,
-+ 0x7008, 0xa086, 0x0008, 0x00c0, 0x5a75, 0x7000, 0xa005, 0x00c0,
-+ 0x5a75, 0x7003, 0x0000, 0x2049, 0x0000, 0x127f, 0x2000, 0x007c,
-+ 0x127e, 0x147e, 0x137e, 0x157e, 0x0c7e, 0x0d7e, 0x70f0, 0xa084,
-+ 0x4600, 0x8004, 0x2090, 0x0d7f, 0x2049, 0x5ab0, 0x69b0, 0xad80,
-+ 0x0011, 0xa100, 0x20a0, 0xb284, 0x0100, 0x0040, 0x5ad5, 0x2001,
-+ 0x6002, 0x2004, 0xd0ec, 0x0040, 0x5ad1, 0x2099, 0x0031, 0x0078,
-+ 0x5ad7, 0x2099, 0x0032, 0x0078, 0x5ad7, 0x2099, 0x0031, 0x700c,
-+ 0xa084, 0x03ff, 0x0040, 0x5af5, 0x6928, 0xa100, 0x682a, 0x7007,
-+ 0x0008, 0x7007, 0x0002, 0x7003, 0x0001, 0x0040, 0x5aea, 0x8000,
-+ 0x80ac, 0x53a5, 0x700c, 0xa084, 0x03ff, 0x0040, 0x5af5, 0x7007,
-+ 0x0004, 0x7004, 0xd094, 0x00c0, 0x5af1, 0x0c7f, 0x2049, 0x0000,
-+ 0x7003, 0x0000, 0x157f, 0x137f, 0x147f, 0x127f, 0x2000, 0x007c,
-+ 0x2091, 0x6000, 0x2091, 0x8000, 0x78b0, 0xa005, 0x00c0, 0x5b17,
-+ 0x7970, 0x70d0, 0xa106, 0x00c0, 0x5b17, 0x7814, 0xa005, 0x0040,
-+ 0x5b17, 0x7817, 0x0000, 0x0068, 0x5b17, 0x2091, 0x4080, 0x7828,
-+ 0x8001, 0x782a, 0x00c0, 0x5b9f, 0x782c, 0x782a, 0x7808, 0xd0ec,
-+ 0x00c0, 0x5b98, 0x2061, 0x85c0, 0x2069, 0x6080, 0xc7fd, 0x68ec,
-+ 0xa005, 0x0040, 0x5b32, 0x8001, 0x68ee, 0xa005, 0x00c0, 0x5b32,
-+ 0x1078, 0x5d6b, 0x6800, 0xa084, 0x000f, 0x0040, 0x5b47, 0xa086,
-+ 0x0001, 0x0040, 0x5b47, 0x6840, 0xa00d, 0x0040, 0x5b47, 0x2104,
-+ 0xa005, 0x0040, 0x5b47, 0x8001, 0x200a, 0x0040, 0x5cc9, 0x6810,
-+ 0xa005, 0x0040, 0x5b6b, 0x8001, 0x6812, 0x00c0, 0x5b6b, 0x68c3,
-+ 0x0001, 0xd7fc, 0x00c0, 0x5b60, 0x7808, 0xd0ec, 0x0040, 0x5b5c,
-+ 0x2009, 0x0102, 0x0078, 0x5b62, 0x2009, 0x0202, 0x0078, 0x5b62,
-+ 0x2009, 0x0102, 0x684c, 0xc08d, 0x200a, 0x6868, 0xa005, 0x0040,
-+ 0x5b6b, 0x1078, 0x2852, 0x6884, 0xa005, 0x0040, 0x5b78, 0x8001,
-+ 0x6886, 0x00c0, 0x5b78, 0x686b, 0x0000, 0x68f0, 0xc0dd, 0x68f2,
-+ 0x68f0, 0xd0fc, 0x0040, 0x5b95, 0xc0fc, 0x68f2, 0x20a9, 0x0200,
-+ 0x6034, 0xa005, 0x0040, 0x5b91, 0x8001, 0x6036, 0x68f0, 0xc0fd,
-+ 0x68f2, 0x00c0, 0x5b91, 0x6010, 0xa005, 0x0040, 0x5b91, 0x1078,
-+ 0x2852, 0xace0, 0x0010, 0x00f0, 0x5b80, 0xd7fc, 0x0040, 0x5b9f,
-+ 0x2061, 0x65c0, 0x2069, 0x6040, 0xc7fc, 0x0078, 0x5b27, 0x1078,
-+ 0x5bc8, 0x7830, 0x8001, 0x7832, 0x00c0, 0x5bc1, 0x7834, 0x7832,
-+ 0x2061, 0x65c0, 0x2069, 0x6040, 0xc7fc, 0x6808, 0xa005, 0x0040,
-+ 0x5bb3, 0x1078, 0x5c32, 0xd7fc, 0x00c0, 0x5bc1, 0x7808, 0xd0ec,
-+ 0x00c0, 0x5bc1, 0x2061, 0x85c0, 0x2069, 0x6080, 0xc7fd, 0x0078,
-+ 0x5bad, 0x780c, 0xd0e4, 0x00c0, 0x5bc5, 0x2091, 0x8001, 0x007c,
-+ 0x7838, 0x8001, 0x783a, 0x00c0, 0x5c31, 0x783c, 0x783a, 0x2069,
-+ 0x6040, 0xc7fc, 0x7808, 0x2079, 0x0200, 0xd0ec, 0x0040, 0x5bda,
-+ 0x2079, 0x0100, 0x68f8, 0xa005, 0x0040, 0x5be6, 0x7de0, 0xa504,
-+ 0x00c0, 0x5be6, 0x68fa, 0x68f0, 0xc0bc, 0x68f2, 0x2079, 0x6000,
-+ 0x680c, 0xa005, 0x00c0, 0x5bee, 0x2001, 0x0101, 0x8001, 0x680e,
-+ 0xd7fc, 0x00c0, 0x5bf7, 0xa080, 0xa5c0, 0x0078, 0x5bf9, 0xa080,
-+ 0xa6d0, 0x2040, 0x2004, 0xa065, 0x0040, 0x5c23, 0x6024, 0xa005,
-+ 0x0040, 0x5c1f, 0x8001, 0x6026, 0x00c0, 0x5c1f, 0x6800, 0xa005,
-+ 0x0040, 0x5c12, 0x6850, 0xac06, 0x00c0, 0x5c12, 0x1078, 0x5cc9,
-+ 0x0078, 0x5c23, 0x6868, 0xa005, 0x0040, 0x5c1a, 0x6027, 0x0001,
-+ 0x0078, 0x5c1f, 0x1078, 0x5c7c, 0x2804, 0x0078, 0x5bfb, 0x6000,
-+ 0x2c40, 0x0078, 0x5bfb, 0xd7fc, 0x00c0, 0x5c31, 0x7808, 0xd0ec,
-+ 0x00c0, 0x5c31, 0x2069, 0x6080, 0xc7fd, 0x2079, 0x0100, 0x0078,
-+ 0x5bda, 0x007c, 0xa00e, 0x20a9, 0x0200, 0x6008, 0xd09c, 0x0040,
-+ 0x5c6b, 0x6024, 0xa005, 0x0040, 0x5c41, 0x8001, 0x6026, 0x0078,
-+ 0x5c69, 0x6008, 0xc09c, 0xd084, 0x00c0, 0x5c49, 0xd0ac, 0x0040,
-+ 0x5c63, 0x600a, 0x6004, 0xa005, 0x0040, 0x5c6b, 0x0d7e, 0x0c7e,
-+ 0x017e, 0x2068, 0x6010, 0x8001, 0x6012, 0x1078, 0x3fd3, 0x2d00,
-+ 0x2c68, 0x2060, 0x1078, 0x1ef5, 0x1078, 0x2240, 0x017f, 0x0c7f,
-+ 0x0d7f, 0x0078, 0x5c6b, 0xc0bd, 0x600a, 0xa18d, 0x0001, 0x0078,
-+ 0x5c6b, 0xa18d, 0x0100, 0xace0, 0x0010, 0x00f0, 0x5c35, 0xa184,
-+ 0x0001, 0x0040, 0x5c7a, 0xa18c, 0xfffe, 0x690a, 0x1078, 0x2852,
-+ 0x0078, 0x5c7b, 0x690a, 0x007c, 0x2c00, 0x6882, 0x6714, 0x6f7a,
-+ 0x6017, 0x0000, 0x602b, 0x0000, 0x601b, 0x0006, 0x60b4, 0xa084,
-+ 0x5f00, 0x601e, 0x6020, 0xa084, 0x00ff, 0xa085, 0x0060, 0x6022,
-+ 0x6000, 0x2042, 0x6860, 0xac06, 0x00c0, 0x5c98, 0x2800, 0x6862,
-+ 0x1078, 0x1e6e, 0x6818, 0xa005, 0x0040, 0x5cc8, 0x8001, 0x681a,
-+ 0x681a, 0x6808, 0xc0a4, 0x680a, 0x6810, 0x8001, 0x0050, 0x5cc8,
-+ 0x6812, 0x602f, 0x0000, 0x6033, 0x0000, 0x2c68, 0x1078, 0x2251,
-+ 0xd7fc, 0x00c0, 0x5cb7, 0x2069, 0x6040, 0x0078, 0x5cb9, 0x2069,
-+ 0x6080, 0x690c, 0xa184, 0x0100, 0x2001, 0x0006, 0x00c0, 0x5cc5,
-+ 0x6883, 0x0000, 0x697e, 0x2001, 0x0004, 0x2708, 0x1078, 0x2845,
-+ 0x007c, 0x0d7e, 0x0e7e, 0x2d70, 0xd7fc, 0x00c0, 0x5cdb, 0x7808,
-+ 0xd0ec, 0x0040, 0x5cd7, 0x2069, 0x0100, 0x0078, 0x5cdd, 0x2069,
-+ 0x0200, 0x0078, 0x5cdd, 0x2069, 0x0100, 0x7000, 0xa084, 0x000f,
-+ 0x0040, 0x5d27, 0xa086, 0x0007, 0x00c0, 0x5cef, 0x0f7e, 0x2d78,
-+ 0x7094, 0x2068, 0x1078, 0x4694, 0x0f7f, 0x0078, 0x5d27, 0x7050,
-+ 0x2060, 0x1078, 0x2b67, 0x601b, 0x0006, 0x6858, 0xa084, 0x5f00,
-+ 0x601e, 0x6020, 0xa084, 0x00ff, 0xa085, 0x0048, 0x6022, 0x602f,
-+ 0x0000, 0x6033, 0x0000, 0x6808, 0xa084, 0xfffd, 0x680a, 0x6830,
-+ 0xd0b4, 0x0040, 0x5d23, 0x684b, 0x0004, 0x20a9, 0x0014, 0x6848,
-+ 0xd094, 0x0040, 0x5d15, 0x00f0, 0x5d0f, 0x684b, 0x0009, 0x20a9,
-+ 0x0014, 0x6848, 0xd084, 0x0040, 0x5d1f, 0x00f0, 0x5d19, 0x20a9,
-+ 0x00fa, 0x00f0, 0x5d21, 0x681b, 0x0048, 0x706b, 0x0007, 0x0e7f,
-+ 0x0d7f, 0x007c, 0x2079, 0x6000, 0x1078, 0x5d5e, 0x1078, 0x5d44,
-+ 0x1078, 0x5d51, 0x2009, 0x0002, 0x2069, 0x6080, 0x680b, 0x0000,
-+ 0x680f, 0x0000, 0x6813, 0x0000, 0x8109, 0x0040, 0x5d43, 0x2069,
-+ 0x6040, 0x0078, 0x5d36, 0x007c, 0x7808, 0xd0ec, 0x0040, 0x5d4c,
-+ 0x2019, 0x00cc, 0x0078, 0x5d4e, 0x2019, 0x007b, 0x7b32, 0x7b36,
-+ 0x007c, 0x780c, 0xd0e4, 0x00c0, 0x5d59, 0x2019, 0x0040, 0x0078,
-+ 0x5d5b, 0x2019, 0x0026, 0x7b3a, 0x7b3e, 0x007c, 0x780c, 0xd0e4,
-+ 0x00c0, 0x5d66, 0x2019, 0x3f94, 0x0078, 0x5d68, 0x2019, 0x2626,
-+ 0x7b2a, 0x7b2e, 0x007c, 0x6a54, 0xa285, 0x0000, 0x0040, 0x5d93,
-+ 0x6958, 0x6bdc, 0xa300, 0x0c7e, 0x2164, 0x6304, 0x83ff, 0x00c0,
-+ 0x5d83, 0x8211, 0x0040, 0x5d87, 0x8108, 0xa11a, 0x0048, 0x5d74,
-+ 0x69dc, 0x0078, 0x5d74, 0x68ef, 0x000a, 0x0c7f, 0x007c, 0x6954,
-+ 0x6adc, 0x2264, 0x6008, 0xc0b5, 0x600a, 0x8210, 0x8109, 0x00c0,
-+ 0x5d89, 0x6956, 0x0c7f, 0x007c, 0x00e0, 0x5d94, 0x2091, 0x6000,
-+ 0x00e0, 0x5d98, 0x2091, 0x6000, 0x70ec, 0xd0dc, 0x00c0, 0x5da5,
-+ 0xd0d4, 0x0040, 0x5dce, 0x0078, 0x5dd1, 0x2008, 0x7808, 0xd0ec,
-+ 0x0040, 0x5db8, 0xd1c4, 0x00c0, 0x5df0, 0x780c, 0xc0c5, 0x780e,
-+ 0x7808, 0xc0f5, 0x780a, 0xd0ec, 0x0040, 0x5dec, 0x0078, 0x5de8,
-+ 0xae8e, 0x0100, 0x0040, 0x5dc5, 0x780c, 0xc0f5, 0xc0c5, 0x780e,
-+ 0xd0d4, 0x00c0, 0x5dec, 0x0078, 0x5de8, 0x780c, 0xc0fd, 0xc0c5,
-+ 0x780e, 0xd0d4, 0x00c0, 0x5dec, 0x0078, 0x5de8, 0xd0e4, 0x0040,
-+ 0x5dee, 0x00e0, 0x5dd1, 0x2091, 0x6000, 0x2009, 0x000c, 0x00e0,
-+ 0x5dd7, 0x2091, 0x6000, 0x8109, 0x00c0, 0x5dd7, 0x70e4, 0xa084,
-+ 0x01ff, 0xa086, 0x01ff, 0x00c0, 0x5de8, 0x70ec, 0x0078, 0x5da5,
-+ 0x7804, 0xd08c, 0x0040, 0x5dee, 0x681b, 0x000c, 0x70a0, 0x70a2,
-+ 0x007c, 0x0020, 0x002b, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000,
-+ 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000,
-+ 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000,
-+ 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000,
-+ 0x0020, 0x0000, 0x0020, 0x0000, 0x0014, 0x0014, 0x9849, 0x0014,
-+ 0x0014, 0x98ec, 0x98d6, 0x0014, 0x0014, 0x0014, 0x0080, 0x0140,
-+ 0x0000, 0x0201, 0x0604, 0x0c08, 0x2120, 0x4022, 0xf880, 0x0018,
-+ 0x300b, 0xa201, 0x0014, 0xa200, 0x0014, 0xa200, 0x0214, 0xa202,
-+ 0x3806, 0x7102, 0x805f, 0x9481, 0x8839, 0x20c3, 0x0864, 0xa834,
-+ 0x28c1, 0x9cb9, 0xa203, 0x300c, 0x2846, 0x8161, 0x846a, 0x8300,
-+ 0x1856, 0x883a, 0xa804, 0x28f2, 0x9c9d, 0xa8f4, 0x300c, 0x28e1,
-+ 0x9c9d, 0x2822, 0xa207, 0x64a4, 0x2001, 0xa811, 0xa206, 0x64c0,
-+ 0x6de0, 0x67a0, 0x6fc0, 0x882b, 0x1814, 0x883b, 0x7824, 0x68c1,
-+ 0x7864, 0x883e, 0xa802, 0x8576, 0x8677, 0x80df, 0x94a1, 0x206c,
-+ 0x28c1, 0x9cb9, 0x2045, 0x2104, 0x20a1, 0x2080, 0x7961, 0xa8df,
-+ 0xa209, 0x0904, 0xa20e, 0xa808, 0xa205, 0xa300, 0x1872, 0x879a,
-+ 0x883c, 0x1fe2, 0xc601, 0xa20a, 0x8000, 0x85a1, 0x806f, 0x9422,
-+ 0x84a2, 0x856e, 0x0704, 0x9c9d, 0x0014, 0xa204, 0xa300, 0x3009,
-+ 0x19e2, 0xf864, 0x856e, 0x883f, 0x08e6, 0xa8f7, 0xf881, 0xa8eb,
-+ 0xc007, 0xf8c1, 0x0016, 0x85b2, 0x80f0, 0x9532, 0xfb02, 0x1de2,
-+ 0x0014, 0x8532, 0xf241, 0x0014, 0x1de2, 0x84a8, 0xd7a0, 0x1fe6,
-+ 0x0014, 0xa208, 0x6043, 0x8008, 0x1dc1, 0x0016, 0x8300, 0x8160,
-+ 0x842a, 0xf041, 0x3008, 0x84a8, 0x11d6, 0x7042, 0x20dd, 0x0011,
-+ 0x20d5, 0x8822, 0x0016, 0x3008, 0x2845, 0x1011, 0xa8fd, 0x2802,
-+ 0x1011, 0xa8fd, 0xa894, 0x283e, 0x1011, 0xa8fd, 0xa20b, 0x7102,
-+ 0x805f, 0x9481, 0x0017, 0x300c, 0xa300, 0x1de2, 0xd387, 0x0210,
-+ 0xa800, 0x26e0, 0x873a, 0xfb02, 0x19f2, 0x1fe2, 0x0014, 0xa20d,
-+ 0x3806, 0x0210, 0x9cbe, 0x0704, 0x0017, 0x60ff, 0x300c, 0x8720,
-+ 0xa211, 0x7102, 0x805f, 0x9481, 0x8000, 0x8300, 0x8772, 0x8837,
-+ 0x2101, 0xa821, 0x10d2, 0x78e2, 0x9d5c, 0xa8fc, 0xd984, 0xf0e2,
-+ 0xf0a1, 0xa820, 0x0014, 0x8831, 0xd166, 0x8830, 0x800f, 0x9401,
-+ 0xb520, 0xc802, 0x8820, 0xa80f, 0x2301, 0xa80d, 0x10d2, 0x78e4,
-+ 0x9d5c, 0x8821, 0x8820, 0xa8e6, 0xf123, 0xf142, 0xf101, 0xa855,
-+ 0x10d2, 0x70f6, 0x8832, 0x8203, 0x870c, 0xd99e, 0x6001, 0x0014,
-+ 0x6848, 0x0214, 0x8827, 0x300a, 0x0013, 0xa21b, 0x8300, 0x2001,
-+ 0xa843, 0x8201, 0x1852, 0xd183, 0x8834, 0x8001, 0xa801, 0x3027,
-+ 0x84a8, 0x1a56, 0x8833, 0x0014, 0xa218, 0x6981, 0x9d63, 0x692b,
-+ 0x6902, 0x1a34, 0xa806, 0x8080, 0x9521, 0xc002, 0x1a94, 0xa801,
-+ 0x1a14, 0x7021, 0x0014, 0xa300, 0x69e4, 0x8023, 0x16e1, 0x8001,
-+ 0x10f1, 0x6946, 0xa213, 0x1462, 0xa213, 0x8000, 0x16e1, 0xa808,
-+ 0x6161, 0x0014, 0xa214, 0x61c2, 0x8002, 0x14e1, 0x8004, 0x16e1,
-+ 0x0101, 0x300a, 0x8827, 0x0014, 0x11c2, 0x211e, 0x870e, 0xa21d,
-+ 0x0014, 0x9d63, 0x0014, 0xa300, 0x8181, 0x842a, 0x84a8, 0x1ce6,
-+ 0x882c, 0x0016, 0xa212, 0x8300, 0x10d2, 0x70e4, 0x0004, 0x8007,
-+ 0x9424, 0xcc1a, 0x9d5c, 0xa8f8, 0x878e, 0x0016, 0xa21c, 0x1035,
-+ 0xa8bb, 0xa210, 0x3807, 0x300c, 0x817e, 0x872b, 0x8772, 0x0014,
-+ 0x0000, 0xd27a
-+};
-+#endif
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/scsi/isp/asm_12160.h 2003-07-19 17:06:32.000000000 -0700
-@@ -0,0 +1,4198 @@
-+/* @(#)asm_12160.h 1.3 */
-+/*
-+ * Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000 Qlogic, Inc.
-+ * All rights reserved.
-+ *
-+ * Redistribution and use in source and binary forms are permitted provided
-+ * that the following conditions are met:
-+ * 1. Redistribution of source code must retain the above copyright
-+ * notice, this list of conditions and the following disclaimer.
-+ * 2. Redistribution in binary form must reproduce the above copyright
-+ * notice, this list of conditions and the following disclaimer in the
-+ * documentation and/or other materials provided with the distribution.
-+ * 3. The name of the author may not be used to endorse or promote products
-+ * derived from this software without specific prior written permission
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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, 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) HOWEVER CAUSED AND ON ANY
-+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-+ */
-+
-+/************************************************************************
-+ * *
-+ * --- ISP12160A Initiator/Target RISC Firmware --- *
-+ * 32 LUN Support *
-+ * *
-+ ************************************************************************/
-+#ifndef ISP_TARGET_MODE
-+/*
-+ * Firmware Version 10.04.32 (12:03 May 09, 2001)
-+ */
-+static const u_int16_t isp_12160_risc_code[] = {
-+ 0x0804, 0x1041, 0x0000, 0x35e6, 0x0000, 0x2043, 0x4f50, 0x5952,
-+ 0x4947, 0x4854, 0x2031, 0x3939, 0x312c, 0x3139, 0x3932, 0x2c31,
-+ 0x3939, 0x332c, 0x3139, 0x3934, 0x2051, 0x4c4f, 0x4749, 0x4320,
-+ 0x434f, 0x5250, 0x4f52, 0x4154, 0x494f, 0x4e00, 0x2049, 0x5350,
-+ 0x3132, 0x3136, 0x2046, 0x6972, 0x6d77, 0x6172, 0x6520, 0x2056,
-+ 0x6572, 0x7369, 0x6f6e, 0x2031, 0x302e, 0x3034, 0x2020, 0x2043,
-+ 0x7573, 0x746f, 0x6d65, 0x7220, 0x4e6f, 0x2e20, 0x3030, 0x2050,
-+ 0x726f, 0x6475, 0x6374, 0x204e, 0x6f2e, 0x2020, 0x3030, 0x2020,
-+ 0x2400, 0x20c9, 0x8fff, 0x2071, 0x0200, 0x70a0, 0x70a2, 0x2001,
-+ 0x01ff, 0x2004, 0xd0fc, 0x1120, 0x2071, 0x0100, 0x70a0, 0x70a2,
-+ 0x20c1, 0x0020, 0x2089, 0x1221, 0x2071, 0x0010, 0x70c3, 0x0004,
-+ 0x70c7, 0x4953, 0x70cb, 0x5020, 0x70cf, 0x2020, 0x70d3, 0x000a,
-+ 0x2001, 0x04fd, 0x2004, 0x70d6, 0x2009, 0xfeff, 0x2130, 0x2128,
-+ 0xa1a2, 0x4600, 0x8424, 0x8424, 0x8424, 0x8424, 0x8424, 0x8424,
-+ 0xa192, 0x9000, 0x2009, 0x0000, 0x2001, 0x0032, 0x080c, 0x1de8,
-+ 0x2218, 0x2079, 0x4600, 0x2fa0, 0x2408, 0x2011, 0x0000, 0x20a9,
-+ 0x0040, 0x42a4, 0x8109, 0x1dd8, 0x2009, 0xff00, 0x3400, 0xa102,
-+ 0x0218, 0x0110, 0x20a8, 0x42a4, 0x781b, 0x0064, 0x7814, 0xc0cd,
-+ 0xc0d5, 0x7816, 0x2071, 0x0200, 0x00d6, 0x2069, 0x4640, 0x080c,
-+ 0x459a, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1130, 0x2069, 0x4680,
-+ 0x2071, 0x0100, 0x080c, 0x459a, 0x7814, 0xc0d4, 0x7816, 0x00de,
-+ 0x7eca, 0x7cc2, 0x7bc6, 0x7867, 0x0000, 0x7800, 0xc08d, 0x7802,
-+ 0x2031, 0x0030, 0x78af, 0x0101, 0x7823, 0x0002, 0x7827, 0x0002,
-+ 0x2009, 0x0002, 0x2069, 0x4640, 0x681b, 0x0003, 0x6823, 0x0007,
-+ 0x6827, 0x00fa, 0x682b, 0x0008, 0x682f, 0x0028, 0x6837, 0x0006,
-+ 0x6833, 0x0008, 0x683b, 0x0000, 0x8109, 0x0500, 0x68cf, 0x000a,
-+ 0x68bf, 0x46c0, 0x2079, 0x4600, 0x68d3, 0x762d, 0x68c3, 0x4bc0,
-+ 0x68c7, 0x4ac0, 0x68cb, 0x8bc0, 0x68a7, 0x8e44, 0x68ab, 0x8e49,
-+ 0x68af, 0x8e44, 0x68b3, 0x8e44, 0x68a3, 0x0001, 0x2001, 0x01ff,
-+ 0x2004, 0xd0fc, 0x11c8, 0x2069, 0x4680, 0x0870, 0x68cf, 0x000a,
-+ 0x68bf, 0x48c0, 0x68d3, 0x7839, 0x68c3, 0x6bc0, 0x68c7, 0x4b40,
-+ 0x68cb, 0x8cd0, 0x68a7, 0x8e49, 0x68ab, 0x8e4e, 0x68af, 0x8e49,
-+ 0x68b3, 0x8e49, 0x68a3, 0x0001, 0x00e6, 0x2069, 0x4ac0, 0x2071,
-+ 0x0200, 0x70ec, 0xd0e4, 0x2019, 0x1809, 0x2021, 0x0009, 0x1120,
-+ 0x2019, 0x180c, 0x2021, 0x000c, 0x080c, 0x1d58, 0x2001, 0x01ff,
-+ 0x2004, 0xd0fc, 0x1188, 0x2069, 0x4b40, 0x2071, 0x0100, 0x70ec,
-+ 0xd0e4, 0x2019, 0x1809, 0x2021, 0x0009, 0x1120, 0x2019, 0x180c,
-+ 0x2021, 0x000c, 0x080c, 0x1d58, 0x00ee, 0x2011, 0x0002, 0x2069,
-+ 0x4bc0, 0x2009, 0x0002, 0x20a9, 0x0100, 0x6837, 0x0000, 0x680b,
-+ 0x0040, 0x7bc8, 0xa386, 0xfeff, 0x1128, 0x6817, 0x0100, 0x681f,
-+ 0x0064, 0x0020, 0x6817, 0x0064, 0x681f, 0x0002, 0xade8, 0x0010,
-+ 0x1f04, 0x1135, 0x8109, 0x1d38, 0x2001, 0x01ff, 0x2004, 0xd0fc,
-+ 0x1128, 0x8211, 0x0118, 0x2069, 0x6bc0, 0x08d8, 0x080c, 0x22cf,
-+ 0x080c, 0x4015, 0x080c, 0x1b6d, 0x080c, 0x4553, 0x2091, 0x2200,
-+ 0x2079, 0x4600, 0x2071, 0x0050, 0x2091, 0x2400, 0x2079, 0x4600,
-+ 0x2071, 0x0020, 0x2091, 0x2600, 0x2079, 0x0200, 0x2071, 0x4640,
-+ 0x2091, 0x2800, 0x2079, 0x0100, 0x2071, 0x4680, 0x2091, 0x2000,
-+ 0x2079, 0x4600, 0x2071, 0x0010, 0x3200, 0xa085, 0x303d, 0x2090,
-+ 0x2071, 0x0010, 0x70c3, 0x0000, 0x1004, 0x118c, 0x70c0, 0xa086,
-+ 0x0002, 0x1110, 0x080c, 0x13ba, 0x2039, 0x0000, 0x080c, 0x12ab,
-+ 0x78ac, 0xa005, 0x1180, 0x0e04, 0x119a, 0x786c, 0xa065, 0x0110,
-+ 0x080c, 0x207a, 0x080c, 0x1e09, 0x0e04, 0x11af, 0x786c, 0xa065,
-+ 0x0110, 0x080c, 0x207a, 0x0e04, 0x11af, 0x2009, 0x4647, 0x2011,
-+ 0x4687, 0x2104, 0x220c, 0xa105, 0x0110, 0x080c, 0x1c7c, 0x2071,
-+ 0x4640, 0x70a0, 0xa005, 0x01e8, 0x744c, 0xa485, 0x0000, 0x01c8,
-+ 0x2079, 0x0200, 0x2091, 0x8000, 0x72d0, 0xa28c, 0x303d, 0x2190,
-+ 0x080c, 0x2720, 0x2091, 0x8000, 0x2091, 0x303d, 0x0e04, 0x11d1,
-+ 0x2079, 0x4600, 0x786c, 0xa065, 0x0120, 0x2071, 0x0010, 0x080c,
-+ 0x207a, 0x1d04, 0x11d9, 0x2079, 0x4600, 0x2071, 0x0010, 0x080c,
-+ 0x4370, 0x2071, 0x4680, 0x70a0, 0xa005, 0x0188, 0x704c, 0xa025,
-+ 0x0170, 0x2079, 0x0100, 0x2091, 0x8000, 0x72d0, 0xa28c, 0x303d,
-+ 0x2190, 0x080c, 0x2720, 0x2091, 0x8000, 0x2091, 0x303d, 0x2079,
-+ 0x4600, 0x2071, 0x0010, 0x0e04, 0x11fa, 0x786c, 0xa065, 0x0110,
-+ 0x080c, 0x207a, 0x1d04, 0x118e, 0x080c, 0x4370, 0x0804, 0x118e,
-+ 0x3c00, 0xa084, 0x0007, 0x0002, 0x120c, 0x120c, 0x120e, 0x120e,
-+ 0x1213, 0x1213, 0x1218, 0x1218, 0x080c, 0x254c, 0x2091, 0x2400,
-+ 0x080c, 0x40ad, 0x0005, 0x2091, 0x2200, 0x080c, 0x40ad, 0x0005,
-+ 0x2091, 0x2200, 0x080c, 0x40ad, 0x2091, 0x2400, 0x080c, 0x40ad,
-+ 0x0005, 0x1241, 0x1241, 0x1242, 0x1242, 0x124d, 0x124d, 0x124d,
-+ 0x124d, 0x1256, 0x1256, 0x1261, 0x1261, 0x124d, 0x124d, 0x124d,
-+ 0x124d, 0x1270, 0x1270, 0x1270, 0x1270, 0x1270, 0x1270, 0x1270,
-+ 0x1270, 0x1270, 0x1270, 0x1270, 0x1270, 0x1270, 0x1270, 0x1270,
-+ 0x1270, 0x0cf8, 0x0006, 0x0106, 0x0126, 0x2091, 0x2800, 0x080c,
-+ 0x2569, 0x012e, 0x010e, 0x000e, 0x000d, 0x0006, 0x0106, 0x0126,
-+ 0x080c, 0x1200, 0x012e, 0x010e, 0x000e, 0x000d, 0x0006, 0x0106,
-+ 0x0126, 0x2091, 0x2600, 0x080c, 0x2569, 0x012e, 0x010e, 0x000e,
-+ 0x000d, 0x0006, 0x0106, 0x0126, 0x2091, 0x2600, 0x080c, 0x2569,
-+ 0x2091, 0x2800, 0x080c, 0x2569, 0x012e, 0x010e, 0x000e, 0x000d,
-+ 0x0006, 0x0106, 0x0126, 0x00d6, 0x00e6, 0x00f6, 0x2079, 0x4600,
-+ 0x2071, 0x0200, 0x2069, 0x4640, 0x3d00, 0xd08c, 0x0130, 0x70ec,
-+ 0xa084, 0x1c00, 0x78e2, 0x080c, 0x459a, 0x3d00, 0xd084, 0x0150,
-+ 0x2069, 0x4680, 0x2071, 0x0100, 0x70ec, 0xa084, 0x1c00, 0x78e6,
-+ 0x080c, 0x459a, 0x080c, 0x24fd, 0x00fe, 0x00ee, 0x00de, 0x012e,
-+ 0x010e, 0x000e, 0x000d, 0x7008, 0x800b, 0x1240, 0x7007, 0x0002,
-+ 0xa08c, 0x01e0, 0x1120, 0xd09c, 0x0108, 0x0887, 0x0897, 0x70c3,
-+ 0x4002, 0x0804, 0x13bd, 0x0e04, 0x131e, 0x2061, 0x0000, 0x6018,
-+ 0xd084, 0x1904, 0x131e, 0x7828, 0xa005, 0x1120, 0x0004, 0x131f,
-+ 0x0804, 0x131e, 0xd0fc, 0x0130, 0x0006, 0x080c, 0x1b0a, 0x000e,
-+ 0x0150, 0x0028, 0x0006, 0x080c, 0x1aff, 0x000e, 0x0120, 0x2001,
-+ 0x4007, 0x0804, 0x13bc, 0x7910, 0xd0fc, 0x1128, 0x2061, 0x4640,
-+ 0xc19c, 0xc7fc, 0x0020, 0x2061, 0x4680, 0xc19d, 0xc7fd, 0x6060,
-+ 0xa005, 0x1904, 0x131e, 0x7912, 0x607e, 0x7828, 0xc0fc, 0xa086,
-+ 0x0018, 0x1120, 0x00c6, 0x080c, 0x1916, 0x00ce, 0x782b, 0x0000,
-+ 0x6078, 0xa065, 0x01e0, 0x00c6, 0x609c, 0x080c, 0x1bd4, 0x00ce,
-+ 0x609f, 0x0000, 0x080c, 0x1a41, 0x2009, 0x0018, 0x6087, 0x0103,
-+ 0x7810, 0x0006, 0x84ff, 0x1110, 0x85ff, 0x0110, 0xc0c5, 0x7812,
-+ 0x080c, 0x1b15, 0x000e, 0x7812, 0x1198, 0x080c, 0x1b60, 0x7810,
-+ 0xd09c, 0x1118, 0x2061, 0x4640, 0x0020, 0x2061, 0x4680, 0xc09c,
-+ 0x7812, 0x607b, 0x0000, 0x60d0, 0xd0c4, 0x0130, 0xc0c4, 0x60d2,
-+ 0x2001, 0x4005, 0x0804, 0x13bc, 0x0804, 0x13ba, 0x0005, 0xa006,
-+ 0x70c2, 0x70c6, 0x70ca, 0x70ce, 0x70da, 0x70c0, 0xa03d, 0xa08a,
-+ 0x0040, 0x1a04, 0x136c, 0x0002, 0x13ba, 0x1408, 0x13d6, 0x143c,
-+ 0x1470, 0x1470, 0x13ce, 0x1a59, 0x147a, 0x13c8, 0x13da, 0x13db,
-+ 0x13dc, 0x13dd, 0x1a5d, 0x13c8, 0x1487, 0x14db, 0x1931, 0x1a53,
-+ 0x13de, 0x17ba, 0x17f0, 0x1822, 0x1868, 0x1777, 0x1784, 0x1797,
-+ 0x17a9, 0x15b0, 0x13c8, 0x150d, 0x1518, 0x1526, 0x1534, 0x154b,
-+ 0x1559, 0x155c, 0x156a, 0x1578, 0x1582, 0x1596, 0x15a2, 0x13c8,
-+ 0x13c8, 0x13c8, 0x13c8, 0x15bd, 0x15ce, 0x15e8, 0x161c, 0x1645,
-+ 0x1657, 0x165a, 0x1685, 0x16be, 0x16d0, 0x1745, 0x1755, 0x13c8,
-+ 0x13c8, 0x13c8, 0x13c8, 0x1767, 0x2100, 0xa08a, 0x0040, 0x1a04,
-+ 0x13c8, 0x0002, 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x1a7f,
-+ 0x1a85, 0x13c8, 0x13c8, 0x13c8, 0x1a89, 0x1ac9, 0x13c8, 0x13c8,
-+ 0x13c8, 0x13c8, 0x1403, 0x146b, 0x1482, 0x14d6, 0x192c, 0x13c8,
-+ 0x13c8, 0x18fb, 0x13c8, 0x1acd, 0x1a71, 0x1a7b, 0x13c8, 0x13c8,
-+ 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8,
-+ 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8,
-+ 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8,
-+ 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8,
-+ 0x13c8, 0x13c8, 0x72ca, 0x71c6, 0x2001, 0x4006, 0x0028, 0x73ce,
-+ 0x72ca, 0x71c6, 0x2001, 0x4000, 0x70c2, 0x0e04, 0x13bd, 0x2061,
-+ 0x0000, 0x601b, 0x0001, 0x2091, 0x5000, 0x2091, 0x4080, 0x0005,
-+ 0x70c3, 0x4001, 0x0c90, 0x70c3, 0x4006, 0x0c78, 0x2099, 0x0041,
-+ 0x20a1, 0x0041, 0x20a9, 0x0005, 0x53a3, 0x0c20, 0x70c4, 0x70c3,
-+ 0x0004, 0x0807, 0x08f8, 0x08f0, 0x08e8, 0x08e0, 0x2091, 0x8000,
-+ 0x70c3, 0x0004, 0x70c7, 0x4953, 0x70cb, 0x5020, 0x70cf, 0x2020,
-+ 0x70d3, 0x000a, 0x2001, 0x0004, 0x70d6, 0x2079, 0x0000, 0x781b,
-+ 0x0001, 0x2031, 0x0030, 0x2059, 0x1000, 0x2029, 0x041a, 0x2051,
-+ 0x0445, 0x2061, 0x0447, 0x20c1, 0x0020, 0x2091, 0x5000, 0x2091,
-+ 0x4080, 0x0804, 0x0418, 0x75d8, 0x74dc, 0x75da, 0x74de, 0x0018,
-+ 0x2029, 0x0000, 0x2520, 0x71d0, 0x72c8, 0x73cc, 0x70c4, 0x20a0,
-+ 0x2099, 0x0030, 0x7003, 0x0001, 0x7007, 0x0006, 0x731a, 0x721e,
-+ 0x7422, 0x7526, 0x2021, 0x0040, 0x81ff, 0x0904, 0x13ba, 0xa182,
-+ 0x0040, 0x1210, 0x2120, 0xa006, 0x2008, 0x8403, 0x7012, 0x7007,
-+ 0x0004, 0x7007, 0x0001, 0x7008, 0xd0fc, 0x0de8, 0x7007, 0x0002,
-+ 0xa084, 0x01e0, 0x0120, 0x70c3, 0x4002, 0x0804, 0x13bd, 0x24a8,
-+ 0x53a5, 0x0c10, 0x0804, 0x13ba, 0x2029, 0x0000, 0x2520, 0x71d0,
-+ 0x72c8, 0x73cc, 0x70c4, 0x2098, 0x20a1, 0x0030, 0x7003, 0x0000,
-+ 0x7007, 0x0006, 0x731a, 0x721e, 0x7422, 0x7526, 0x2021, 0x0040,
-+ 0x7007, 0x0006, 0x81ff, 0x0904, 0x13ba, 0xa182, 0x0040, 0x1210,
-+ 0x2120, 0xa006, 0x2008, 0x8403, 0x7012, 0x24a8, 0x53a6, 0x7007,
-+ 0x0001, 0x7008, 0xd0fc, 0x0de8, 0xa084, 0x01e0, 0x0d48, 0x70c3,
-+ 0x4002, 0x0804, 0x13bd, 0x75d8, 0x74dc, 0x75da, 0x74de, 0x0878,
-+ 0x71c4, 0x70c8, 0x2114, 0xa79e, 0x0004, 0x1108, 0x200a, 0x72ca,
-+ 0x0804, 0x13b9, 0x70c7, 0x000a, 0x70cb, 0x0004, 0x70cf, 0x0020,
-+ 0x0804, 0x13ba, 0x75d8, 0x76dc, 0x75da, 0x76de, 0x0018, 0x2029,
-+ 0x0000, 0x2530, 0x70c4, 0x72c8, 0x73cc, 0x74d0, 0x70c6, 0x72ca,
-+ 0x73ce, 0x74d2, 0xa005, 0x05e8, 0xa40a, 0x0108, 0x1240, 0x8001,
-+ 0x7872, 0xa084, 0xfc00, 0x0138, 0x78ac, 0xc085, 0x78ae, 0x2001,
-+ 0x4005, 0x0804, 0x13bc, 0x7b7e, 0x7a7a, 0x7e86, 0x7d82, 0x7c76,
-+ 0xa48c, 0xff00, 0x0170, 0x8407, 0x8004, 0x8004, 0x810c, 0x810c,
-+ 0x810f, 0xa118, 0xa291, 0x0000, 0xa6b1, 0x0000, 0xa581, 0x0000,
-+ 0x0050, 0x8407, 0x8004, 0x8004, 0xa318, 0xa291, 0x0000, 0xa6b1,
-+ 0x0000, 0xa581, 0x0000, 0x731a, 0x721e, 0x7622, 0x7026, 0xa605,
-+ 0x0118, 0x7a10, 0xc2c5, 0x7a12, 0x78ac, 0xa084, 0xfffc, 0x78ae,
-+ 0x0018, 0x78ac, 0xc085, 0x78ae, 0x0804, 0x13ba, 0x75d8, 0x76dc,
-+ 0x75da, 0x76de, 0x0018, 0x2029, 0x0000, 0x2530, 0x70c4, 0x72c8,
-+ 0x73cc, 0x74d4, 0x70c6, 0x72ca, 0x73ce, 0x74d6, 0xa005, 0x0500,
-+ 0xa40a, 0x0110, 0x1a04, 0x13bc, 0x8001, 0x7892, 0xa084, 0xfc00,
-+ 0x0138, 0x78ac, 0xc0c5, 0x78ae, 0x2001, 0x4005, 0x0804, 0x13bc,
-+ 0x7a9a, 0x7b9e, 0x7da2, 0x7ea6, 0x2600, 0xa505, 0x0118, 0x7a10,
-+ 0xc2c5, 0x7a12, 0x7c96, 0x78ac, 0xa084, 0xfcff, 0x78ae, 0x0018,
-+ 0x78ac, 0xc0c5, 0x78ae, 0x0804, 0x13ba, 0x2009, 0x0000, 0x786c,
-+ 0xa065, 0x0118, 0x8108, 0x6000, 0x0cd8, 0x7ac4, 0x0804, 0x13b8,
-+ 0x2009, 0x4648, 0x210c, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1904,
-+ 0x13b9, 0x2011, 0x4688, 0x2214, 0x0804, 0x13b8, 0x2009, 0x4649,
-+ 0x210c, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1904, 0x13b9, 0x2011,
-+ 0x4689, 0x2214, 0x0804, 0x13b8, 0x2061, 0x4640, 0x6128, 0x622c,
-+ 0x8214, 0x8214, 0x8214, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1148,
-+ 0x2061, 0x4680, 0x6328, 0x73da, 0x632c, 0x831c, 0x831c, 0x831c,
-+ 0x73de, 0x0804, 0x13b8, 0x2009, 0x464c, 0x210c, 0x2001, 0x01ff,
-+ 0x2004, 0xd0fc, 0x1904, 0x13b9, 0x2011, 0x468c, 0x2214, 0x0804,
-+ 0x13b8, 0x7918, 0x0804, 0x13b9, 0x2009, 0x0202, 0x210c, 0x2001,
-+ 0x01ff, 0x2004, 0xd0fc, 0x1904, 0x13b9, 0x2011, 0x0102, 0x2214,
-+ 0x0804, 0x13b8, 0x2009, 0x464d, 0x210c, 0x2001, 0x01ff, 0x2004,
-+ 0xd0fc, 0x1904, 0x13b9, 0x2011, 0x468d, 0x2214, 0x0804, 0x13b8,
-+ 0x7920, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1904, 0x13b9, 0x7a24,
-+ 0x0804, 0x13b8, 0x2011, 0x4b40, 0x71c4, 0xd1fc, 0x1110, 0x2011,
-+ 0x4ac0, 0x8107, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa268,
-+ 0x6a00, 0x6b08, 0x6c1c, 0x74da, 0x0804, 0x13b7, 0x77c4, 0x080c,
-+ 0x1b7b, 0x2091, 0x8000, 0x6b1c, 0x6a14, 0x2091, 0x8001, 0x2708,
-+ 0x0804, 0x13b7, 0x2061, 0x4640, 0x6118, 0x2001, 0x01ff, 0x2004,
-+ 0xd0fc, 0x1904, 0x13b9, 0x2061, 0x4680, 0x6218, 0x0804, 0x13b8,
-+ 0x77c4, 0x080c, 0x1b7b, 0x2091, 0x8000, 0x6908, 0x6a18, 0x6b10,
-+ 0x77da, 0x2091, 0x8001, 0x0804, 0x13b7, 0x71c4, 0x2110, 0xa294,
-+ 0x000f, 0xa282, 0x0010, 0x1a04, 0x13b3, 0x080c, 0x238b, 0xa384,
-+ 0x4000, 0x0110, 0xa295, 0x0020, 0x0804, 0x13b7, 0x71c4, 0x2100,
-+ 0xc0bc, 0xa082, 0x0010, 0x1a04, 0x13b3, 0xd1bc, 0x1120, 0x2011,
-+ 0x4648, 0x2204, 0x0020, 0x2011, 0x4688, 0x2204, 0xc0bd, 0x0006,
-+ 0x2100, 0xc0bc, 0x2012, 0x080c, 0x2331, 0x001e, 0x0804, 0x13b9,
-+ 0x71c4, 0x2021, 0x4649, 0x2404, 0x70c6, 0x2019, 0x0000, 0x0030,
-+ 0x71c8, 0x2021, 0x4689, 0x2404, 0x70ca, 0xc3fd, 0x2011, 0x1614,
-+ 0x20a9, 0x0008, 0x2204, 0xa106, 0x0138, 0x8210, 0x1f04, 0x15fa,
-+ 0x71c4, 0x72c8, 0x0804, 0x13b2, 0xa292, 0x1614, 0x0026, 0x2122,
-+ 0x001e, 0x080c, 0x2343, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1110,
-+ 0xd3fc, 0x09f0, 0x0804, 0x13ba, 0x03e8, 0x00fa, 0x01f4, 0x02ee,
-+ 0x0004, 0x0001, 0x0002, 0x0003, 0x2061, 0x4640, 0x6128, 0x622c,
-+ 0x8214, 0x8214, 0x8214, 0x70c4, 0x602a, 0x70c8, 0x8003, 0x8003,
-+ 0x8003, 0x602e, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x11a0, 0x0026,
-+ 0x0016, 0x2061, 0x4680, 0x6128, 0x622c, 0x8214, 0x8214, 0x8214,
-+ 0x70d8, 0x602a, 0x70dc, 0x8003, 0x8003, 0x8003, 0x602e, 0x71da,
-+ 0x72de, 0x001e, 0x002e, 0x0804, 0x13b8, 0x2061, 0x4640, 0x6130,
-+ 0x70c4, 0x6032, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1904, 0x13b9,
-+ 0x2061, 0x4680, 0x6230, 0x70c8, 0x6032, 0x0804, 0x13b8, 0x7918,
-+ 0x0804, 0x13b9, 0x71c4, 0xa184, 0xf0cf, 0x0148, 0x2001, 0x01ff,
-+ 0x2004, 0xd0fc, 0x1904, 0x13b3, 0x72c8, 0x0804, 0x13b2, 0x0006,
-+ 0x2019, 0x0000, 0x080c, 0x237f, 0x2001, 0x01ff, 0x2004, 0xd0fc,
-+ 0x0118, 0x001e, 0x0804, 0x13b9, 0x71c8, 0xa184, 0xf0cf, 0x0128,
-+ 0x0006, 0x2110, 0x71c4, 0x0804, 0x13b2, 0x0006, 0xc3fd, 0x080c,
-+ 0x237f, 0x002e, 0x001e, 0x0804, 0x13b8, 0x71c4, 0xa182, 0x0010,
-+ 0x0248, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1904, 0x13b3, 0x72c8,
-+ 0x0804, 0x13b2, 0x2011, 0x464d, 0x2204, 0x0006, 0x8104, 0x1208,
-+ 0x8108, 0x2112, 0x2019, 0x0000, 0x080c, 0x236c, 0x2001, 0x01ff,
-+ 0x2004, 0xd0fc, 0x0118, 0x001e, 0x0804, 0x13b9, 0x71c8, 0xa182,
-+ 0x0010, 0x0228, 0x0006, 0x2110, 0x71c4, 0x0804, 0x13b2, 0x2011,
-+ 0x468d, 0x2204, 0x0006, 0x8104, 0x1208, 0x8108, 0x2112, 0xc3fd,
-+ 0x080c, 0x236c, 0x002e, 0x001e, 0x0804, 0x13b8, 0x71c4, 0x72c8,
-+ 0xa184, 0xfffd, 0x1904, 0x13b2, 0xa284, 0xfffd, 0x1904, 0x13b2,
-+ 0x2100, 0x7920, 0x7822, 0x2200, 0x7a24, 0x7826, 0x0804, 0x13b8,
-+ 0x2011, 0x4b40, 0x71c4, 0xd1fc, 0x1110, 0x2011, 0x4ac0, 0x8107,
-+ 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa268, 0x72c8, 0x73cc,
-+ 0x74d8, 0x71c6, 0x6800, 0x70ca, 0x73ce, 0x74da, 0x2091, 0x8000,
-+ 0x6a02, 0xd2ac, 0x1118, 0x2021, 0x0000, 0x0090, 0xa484, 0x00ff,
-+ 0xa082, 0x0002, 0x1a04, 0x1741, 0x843f, 0xa7bc, 0x00ff, 0x0140,
-+ 0xa786, 0x0002, 0x1904, 0x1741, 0xa484, 0x00ff, 0x0904, 0x1741,
-+ 0x2061, 0x0200, 0xd1fc, 0x0110, 0x2061, 0x0100, 0x2029, 0x0009,
-+ 0x2031, 0x0062, 0x843f, 0xa7bc, 0x00ff, 0x0130, 0x8307, 0xa084,
-+ 0x00ff, 0x1110, 0xa73d, 0x1138, 0x2041, 0x0019, 0xa384, 0x00ff,
-+ 0xa082, 0x001a, 0x0210, 0xa4a4, 0x00ff, 0x8307, 0xa084, 0x00ff,
-+ 0x0188, 0xa842, 0x02f0, 0xa086, 0x0010, 0x1120, 0xa39c, 0x00ff,
-+ 0xa39d, 0x0f00, 0xa3bc, 0x00ff, 0x2500, 0xa702, 0x0290, 0x2600,
-+ 0xa702, 0x1278, 0x2039, 0x003a, 0x6804, 0xa705, 0x6806, 0x6b0a,
-+ 0x6b0c, 0x73ce, 0x681c, 0x70da, 0x6c1e, 0x2091, 0x8001, 0x0804,
-+ 0x13ba, 0x2091, 0x8001, 0x0804, 0x13b4, 0x77c4, 0x080c, 0x1b7b,
-+ 0x2091, 0x8000, 0x6a14, 0x6b1c, 0x2091, 0x8001, 0x70c8, 0x6816,
-+ 0x70cc, 0x681e, 0x2708, 0x0804, 0x13b7, 0x70c4, 0x2061, 0x4640,
-+ 0x6118, 0x601a, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1904, 0x13b9,
-+ 0x70c8, 0x2061, 0x4680, 0x6218, 0x601a, 0x0804, 0x13b8, 0x71c4,
-+ 0x72c8, 0x73cc, 0xa182, 0x0010, 0x1a04, 0x13b3, 0x080c, 0x23af,
-+ 0xa384, 0x4000, 0x0110, 0xa295, 0x0020, 0x0804, 0x13b7, 0x77c4,
-+ 0x080c, 0x1b7b, 0x2091, 0x8000, 0x6a08, 0xc28d, 0x6a0a, 0x2091,
-+ 0x8001, 0x2708, 0x0804, 0x13b8, 0x77c4, 0x080c, 0x1b7b, 0x2091,
-+ 0x8000, 0x6a08, 0xa294, 0xfff9, 0x6a0a, 0x6804, 0xa005, 0x0110,
-+ 0x080c, 0x22ae, 0x2091, 0x8001, 0x2708, 0x0804, 0x13b8, 0x77c4,
-+ 0x080c, 0x1b7b, 0x2091, 0x8000, 0x6a08, 0xc295, 0x6a0a, 0x6804,
-+ 0xa005, 0x0110, 0x080c, 0x22ae, 0x2091, 0x8001, 0x2708, 0x0804,
-+ 0x13b8, 0x77c4, 0x2041, 0x0001, 0x2049, 0x0005, 0x2051, 0x0020,
-+ 0x2091, 0x8000, 0x080c, 0x1b93, 0x2091, 0x8001, 0x2708, 0x6a08,
-+ 0x0804, 0x13b8, 0x77c4, 0xd7fc, 0x0128, 0x080c, 0x1b0a, 0x0138,
-+ 0x0804, 0x13bc, 0x080c, 0x1aff, 0x0110, 0x0804, 0x13bc, 0x73c8,
-+ 0x72cc, 0x77c6, 0x73ca, 0x72ce, 0x080c, 0x1c0b, 0x11e8, 0x6818,
-+ 0xa005, 0x01a0, 0x2708, 0x0076, 0x080c, 0x23ce, 0x007e, 0x1170,
-+ 0x2001, 0x0015, 0xd7fc, 0x1118, 0x2061, 0x4640, 0x0018, 0xc0fd,
-+ 0x2061, 0x4680, 0x782a, 0x2091, 0x8001, 0x0005, 0x2091, 0x8001,
-+ 0x2001, 0x4005, 0x0804, 0x13bc, 0x2091, 0x8001, 0x0804, 0x13ba,
-+ 0x77c4, 0xd7fc, 0x0128, 0x080c, 0x1b0a, 0x0138, 0x0804, 0x13bc,
-+ 0x080c, 0x1aff, 0x0110, 0x0804, 0x13bc, 0x77c6, 0x2041, 0x0021,
-+ 0x2049, 0x0005, 0x2051, 0x0020, 0x2091, 0x8000, 0x080c, 0x1b93,
-+ 0x2009, 0x0016, 0xd7fc, 0x1118, 0x2061, 0x4640, 0x0018, 0x2061,
-+ 0x4680, 0xc1fd, 0x6063, 0x0003, 0x607b, 0x0000, 0x6772, 0x607f,
-+ 0x000f, 0x792a, 0x61d0, 0xc1c4, 0x61d2, 0x080c, 0x22ae, 0x2091,
-+ 0x8001, 0x0005, 0x77c8, 0x77ca, 0x77c4, 0x77c6, 0xd7fc, 0x0128,
-+ 0x080c, 0x1b0a, 0x0138, 0x0804, 0x13bc, 0x080c, 0x1aff, 0x0110,
-+ 0x0804, 0x13bc, 0xa7bc, 0xff00, 0x2091, 0x8000, 0x2009, 0x0017,
-+ 0xd7fc, 0x1118, 0x2061, 0x4640, 0x0018, 0x2061, 0x4680, 0xc1fd,
-+ 0x607b, 0x0000, 0x6063, 0x0002, 0x6772, 0x607f, 0x000f, 0x792a,
-+ 0x61d0, 0xc1c4, 0x61d2, 0x080c, 0x22ae, 0x2091, 0x8001, 0x2041,
-+ 0x0021, 0x2049, 0x0005, 0x2051, 0x0030, 0x2091, 0x8000, 0x70c8,
-+ 0xa005, 0x0118, 0x60d0, 0xc0fd, 0x60d2, 0x080c, 0x1b93, 0x70c8,
-+ 0x6836, 0x8738, 0xa784, 0x001f, 0x1dc0, 0x2091, 0x8001, 0x0005,
-+ 0x2019, 0x0000, 0x72c8, 0xd284, 0x0128, 0x080c, 0x1b0a, 0x0138,
-+ 0x0804, 0x13bc, 0x080c, 0x1aff, 0x0110, 0x0804, 0x13bc, 0x72c8,
-+ 0x72ca, 0x78ac, 0xa084, 0x0003, 0x1508, 0x2039, 0x0000, 0xd284,
-+ 0x0108, 0xc7fd, 0x2041, 0x0021, 0x2049, 0x0004, 0x2051, 0x0008,
-+ 0x080c, 0x1b7b, 0x2091, 0x8000, 0x6808, 0xc0d4, 0xa80d, 0x690a,
-+ 0x2091, 0x8001, 0x8738, 0xa784, 0x001f, 0x1d90, 0xa7bc, 0xff00,
-+ 0x873f, 0x8738, 0x873f, 0xa784, 0x0f00, 0x1d50, 0x2091, 0x8000,
-+ 0x72c8, 0x2069, 0x0100, 0xd284, 0x1110, 0x2069, 0x0200, 0x6808,
-+ 0xa084, 0xfffd, 0x680a, 0x6830, 0xd0b4, 0x01b0, 0x684b, 0x0004,
-+ 0x20a9, 0x0014, 0x6848, 0xd094, 0x0110, 0x1f04, 0x18b2, 0x684b,
-+ 0x0009, 0x20a9, 0x0014, 0x6848, 0xd084, 0x0110, 0x1f04, 0x18bb,
-+ 0x20a9, 0x00fa, 0x1f04, 0x18c2, 0x2079, 0x4600, 0x2009, 0x0018,
-+ 0x72c8, 0xd284, 0x1118, 0x2061, 0x4640, 0x0018, 0x2061, 0x4680,
-+ 0xc1fd, 0x607b, 0x0000, 0x792a, 0x6063, 0x0001, 0x607f, 0x000f,
-+ 0x60a3, 0x0000, 0x60a4, 0x60ae, 0x60b2, 0x60d0, 0xd0b4, 0x0160,
-+ 0xc0b4, 0x60d2, 0x00c6, 0x60b4, 0xa065, 0x6008, 0xc0d4, 0x600a,
-+ 0x6018, 0x8001, 0x601a, 0x00ce, 0x60d0, 0xa084, 0x7eff, 0x60d2,
-+ 0x78ac, 0xc08d, 0x78ae, 0x83ff, 0x0108, 0x0005, 0x681b, 0x0054,
-+ 0x2091, 0x8001, 0x0005, 0x73cc, 0x080c, 0x186a, 0x69ec, 0x6a48,
-+ 0xa185, 0x1800, 0x684a, 0xa185, 0x0040, 0x68ee, 0x73cc, 0x2021,
-+ 0x0004, 0x20a9, 0x09ff, 0x1f04, 0x190b, 0x8421, 0x1dd0, 0x8319,
-+ 0x1db0, 0x69ee, 0x6a4a, 0x2091, 0x8001, 0x0005, 0xd7fc, 0x1118,
-+ 0x2069, 0x4640, 0x0010, 0x2069, 0x4680, 0x71c4, 0x71c6, 0x6916,
-+ 0x81ff, 0x1110, 0x68a3, 0x0001, 0x78ac, 0xc08c, 0x78ae, 0xd084,
-+ 0x1110, 0x080c, 0x1c5b, 0x0005, 0x75d8, 0x74dc, 0x75da, 0x74de,
-+ 0x0010, 0xa02e, 0x2520, 0x71c4, 0x73c8, 0x72cc, 0x71c6, 0x73ca,
-+ 0x72ce, 0x2079, 0x4600, 0x7dde, 0x7cda, 0x7bd6, 0x7ad2, 0x080c,
-+ 0x1b58, 0x0904, 0x1a3d, 0x20a9, 0x0005, 0x20a1, 0x4614, 0x2091,
-+ 0x8000, 0x41a1, 0x2091, 0x8001, 0x2009, 0x0040, 0x080c, 0x1d24,
-+ 0x0120, 0x080c, 0x1b60, 0x0804, 0x1a3d, 0x6004, 0xa08c, 0x00ff,
-+ 0xa18e, 0x0009, 0x1120, 0x0006, 0x080c, 0x205f, 0x000e, 0xa084,
-+ 0xff00, 0x8007, 0x8009, 0x0904, 0x19e1, 0x00c6, 0x2c68, 0x080c,
-+ 0x1b58, 0x05a8, 0x2c00, 0x689e, 0x8109, 0x1dc0, 0x609f, 0x0000,
-+ 0x00ce, 0x00c6, 0x7ddc, 0x7cd8, 0x7bd4, 0x7ad0, 0xa290, 0x0040,
-+ 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x7dde, 0x7cda,
-+ 0x7bd6, 0x7ad2, 0x2c68, 0x689c, 0xa065, 0x0904, 0x19e0, 0x2009,
-+ 0x0040, 0x080c, 0x1d24, 0x15a0, 0x6004, 0xa084, 0x00ff, 0xa086,
-+ 0x0002, 0x1168, 0x6004, 0xa084, 0x00ff, 0xa086, 0x000a, 0x1120,
-+ 0x0016, 0x080c, 0x205c, 0x001e, 0x2d00, 0x6002, 0x0898, 0x00ce,
-+ 0x00c6, 0x609c, 0x080c, 0x1bd4, 0x00ce, 0x609f, 0x0000, 0x080c,
-+ 0x1a41, 0x2009, 0x0018, 0x6008, 0xc0cd, 0x600a, 0x6004, 0x6086,
-+ 0x7810, 0x0006, 0x84ff, 0x1110, 0x85ff, 0x0110, 0xc0c5, 0x7812,
-+ 0x080c, 0x1b15, 0x000e, 0x7812, 0x080c, 0x1b60, 0x0804, 0x1a3d,
-+ 0x00ce, 0x00c6, 0x609c, 0x080c, 0x1bd4, 0x00ce, 0x609f, 0x0000,
-+ 0x080c, 0x1a41, 0x2009, 0x0018, 0x6087, 0x0103, 0x601b, 0x0003,
-+ 0x7810, 0x0006, 0x84ff, 0x1110, 0x85ff, 0x0110, 0xc0c5, 0x7812,
-+ 0x080c, 0x1b15, 0x000e, 0x7812, 0x080c, 0x1b60, 0x0804, 0x1a3d,
-+ 0x00ce, 0x6114, 0xd1fc, 0x0120, 0x080c, 0x1b0a, 0x01f0, 0x0018,
-+ 0x080c, 0x1aff, 0x01d0, 0x080c, 0x1a41, 0x2009, 0x0018, 0x6087,
-+ 0x0103, 0x601b, 0x0021, 0x7810, 0x0006, 0x84ff, 0x1110, 0x85ff,
-+ 0x0110, 0xc0c5, 0x7812, 0x080c, 0x1b15, 0x000e, 0x7812, 0x080c,
-+ 0x1b60, 0x2001, 0x4007, 0x0804, 0x13bc, 0x74c4, 0x73c8, 0x72cc,
-+ 0x6014, 0x2091, 0x8000, 0x00e6, 0x2009, 0x0012, 0xd0fc, 0x1118,
-+ 0x2071, 0x4640, 0x0018, 0x2071, 0x4680, 0xc1fd, 0x792a, 0x7063,
-+ 0x0005, 0x71d0, 0xc1c4, 0x71d2, 0x7366, 0x726a, 0x746e, 0x7072,
-+ 0x7077, 0x0000, 0x2c00, 0x707a, 0xa02e, 0x2530, 0x611c, 0xa184,
-+ 0x0060, 0x0110, 0x080c, 0x3fc1, 0x00ee, 0x6596, 0x65a6, 0x669a,
-+ 0x66aa, 0x60af, 0x0000, 0x60b3, 0x0000, 0x6714, 0x6023, 0x0000,
-+ 0x080c, 0x22ae, 0x2091, 0x8001, 0x0005, 0x70c3, 0x4005, 0x0804,
-+ 0x13bd, 0x20a9, 0x0005, 0x2099, 0x4614, 0x2091, 0x8000, 0x530a,
-+ 0x2091, 0x8001, 0x2100, 0xa210, 0xa399, 0x0000, 0xa4a1, 0x0000,
-+ 0xa5a9, 0x0000, 0x0005, 0x71c4, 0x70c7, 0x0000, 0x791e, 0x0804,
-+ 0x13ba, 0x71c4, 0x71c6, 0x2168, 0x0010, 0x2069, 0x1000, 0x690c,
-+ 0xa016, 0x2d04, 0xa210, 0x8d68, 0x8109, 0x1dd8, 0xa285, 0x0000,
-+ 0x1118, 0x70c3, 0x4000, 0x0010, 0x70c3, 0x4003, 0x70ca, 0x0804,
-+ 0x13bd, 0x7964, 0x71c6, 0x71c4, 0xa182, 0x0003, 0x1a04, 0x13b3,
-+ 0x7966, 0x0804, 0x13ba, 0x7964, 0x71c6, 0x0804, 0x13ba, 0x7900,
-+ 0x71c6, 0x71c4, 0x7902, 0x0804, 0x13ba, 0x7900, 0x71c6, 0x0804,
-+ 0x13ba, 0x70c4, 0x2011, 0x0000, 0xa08c, 0x000d, 0x0160, 0x810c,
-+ 0x0230, 0x8210, 0x810c, 0x810c, 0x0210, 0x8210, 0x810c, 0x81ff,
-+ 0x1904, 0x13b4, 0x8210, 0x7a0e, 0xd28c, 0x0538, 0x7910, 0xc1cd,
-+ 0x7912, 0x2009, 0x0021, 0x2019, 0x0003, 0xd284, 0x01c0, 0x8108,
-+ 0x2019, 0x0041, 0x2011, 0x8e4e, 0x2312, 0x2019, 0x0042, 0x8210,
-+ 0x2312, 0x2019, 0x0043, 0x8210, 0x2312, 0x2019, 0x0046, 0x8210,
-+ 0x2312, 0x2019, 0x0047, 0x8210, 0x2312, 0x2019, 0x0006, 0x2011,
-+ 0x8e53, 0x2112, 0x2011, 0x8e73, 0x2312, 0x7904, 0x7806, 0x0804,
-+ 0x13b9, 0x7804, 0x70c6, 0x0804, 0x13ba, 0x71c4, 0xd1fc, 0x1118,
-+ 0x2011, 0x4ac0, 0x0010, 0x2011, 0x4b40, 0x8107, 0xa084, 0x000f,
-+ 0x8003, 0x8003, 0x8003, 0xa268, 0x2011, 0x0000, 0x6814, 0xd0fc,
-+ 0x0110, 0xa295, 0x0200, 0xd0b4, 0x0110, 0xa295, 0x0001, 0x6b0c,
-+ 0x6800, 0x70da, 0x0804, 0x13b7, 0x7814, 0xd0f4, 0x0130, 0x2001,
-+ 0x4007, 0x70db, 0x0000, 0xa005, 0x0048, 0xd0fc, 0x0130, 0x2001,
-+ 0x4007, 0x70db, 0x0001, 0xa005, 0x0008, 0xa006, 0x0005, 0x7814,
-+ 0xd0f4, 0x0130, 0x2001, 0x4007, 0x70db, 0x0000, 0xa005, 0x0008,
-+ 0xa006, 0x0005, 0x7814, 0xd0fc, 0x0130, 0x2001, 0x4007, 0x70db,
-+ 0x0001, 0xa005, 0x0008, 0xa006, 0x0005, 0x7112, 0x721a, 0x731e,
-+ 0x7810, 0xd0c4, 0x0110, 0x7422, 0x7526, 0xac80, 0x0001, 0x8108,
-+ 0x810c, 0x81a9, 0x8098, 0x20a1, 0x0030, 0x7003, 0x0000, 0x6084,
-+ 0x20a2, 0x53a6, 0x7007, 0x0001, 0x7974, 0xa184, 0xff00, 0x0140,
-+ 0x810f, 0x810c, 0x810c, 0x8004, 0x8004, 0x8007, 0xa100, 0x0018,
-+ 0x8107, 0x8004, 0x8004, 0x797c, 0xa108, 0x7a78, 0xa006, 0xa211,
-+ 0x7d10, 0xd5c4, 0x0120, 0x7b84, 0xa319, 0x7c80, 0xa421, 0x7008,
-+ 0xd0fc, 0x0de8, 0x7003, 0x0001, 0x7007, 0x0006, 0x711a, 0x721e,
-+ 0x7d10, 0xd5c4, 0x0110, 0x7322, 0x7426, 0xa084, 0x01e0, 0x0005,
-+ 0x7848, 0xa065, 0x0120, 0x2c04, 0x784a, 0x2063, 0x0000, 0x0005,
-+ 0x00f6, 0x2079, 0x4600, 0x7848, 0x2062, 0x2c00, 0xa005, 0x1110,
-+ 0x080c, 0x254c, 0x784a, 0x00fe, 0x0005, 0x2011, 0x9000, 0x7a4a,
-+ 0x7bc4, 0x8319, 0x0128, 0xa280, 0x0032, 0x2012, 0x2010, 0x0cc8,
-+ 0x2013, 0x0000, 0x0005, 0x0016, 0x0026, 0xd7fc, 0x1118, 0x2011,
-+ 0x4bc0, 0x0010, 0x2011, 0x6bc0, 0xa784, 0x0f00, 0x800b, 0xa784,
-+ 0x001f, 0x0120, 0x8003, 0x8003, 0x8003, 0x8003, 0xa105, 0xa268,
-+ 0x002e, 0x001e, 0x0005, 0x0c39, 0x2900, 0x682a, 0x2a00, 0x682e,
-+ 0x6808, 0xa084, 0xf9ef, 0xa80d, 0x690a, 0x00e6, 0xd7fc, 0x1128,
-+ 0x2009, 0x4652, 0x2071, 0x4640, 0x0020, 0x2009, 0x4692, 0x2071,
-+ 0x4680, 0x210c, 0x6804, 0xa005, 0x0148, 0xa116, 0x1138, 0x2060,
-+ 0x6000, 0x6806, 0x0016, 0x200b, 0x0000, 0x0018, 0x2009, 0x0000,
-+ 0x0016, 0x6804, 0xa065, 0x0178, 0x6000, 0x6806, 0x0421, 0x080c,
-+ 0x1d95, 0x6810, 0x7908, 0x8109, 0x790a, 0x8001, 0x6812, 0x1d88,
-+ 0x7910, 0xc1a5, 0x7912, 0x001e, 0x6902, 0x6906, 0x2d00, 0x2060,
-+ 0x080c, 0x2693, 0x00ee, 0x0005, 0xa065, 0x0160, 0x2008, 0x609c,
-+ 0xa005, 0x0128, 0x2062, 0x609f, 0x0000, 0xa065, 0x0cc0, 0x7848,
-+ 0x794a, 0x2062, 0x0005, 0x6007, 0x0103, 0x608f, 0x0000, 0x20a9,
-+ 0x001c, 0xac80, 0x0005, 0x20a0, 0x2001, 0x0000, 0x40a4, 0x6828,
-+ 0x601a, 0x682c, 0x6022, 0x0005, 0x00e6, 0xd7fc, 0x1128, 0x2071,
-+ 0x4640, 0x2031, 0x46c0, 0x0020, 0x2071, 0x4680, 0x2031, 0x48c0,
-+ 0x704c, 0xa08c, 0x0200, 0x1128, 0xa608, 0x2d0a, 0x8000, 0x704e,
-+ 0xa006, 0x00ee, 0x0005, 0x00f6, 0xd7fc, 0x1118, 0x2079, 0x4640,
-+ 0x0010, 0x2079, 0x4680, 0x080c, 0x1b7b, 0x2091, 0x8000, 0x6804,
-+ 0x780a, 0xa065, 0x05f0, 0x0030, 0x2c00, 0x780a, 0x2060, 0x6000,
-+ 0xa065, 0x05b8, 0x6010, 0xa306, 0x1db8, 0x600c, 0xa206, 0x1da0,
-+ 0x2c28, 0x7848, 0xac06, 0x1108, 0x0448, 0x6804, 0xac06, 0x1140,
-+ 0x6000, 0x2060, 0x6806, 0xa005, 0x1118, 0x6803, 0x0000, 0x0048,
-+ 0x6400, 0x7808, 0x2060, 0x6402, 0xa486, 0x0000, 0x1110, 0x2c00,
-+ 0x6802, 0x2560, 0x080c, 0x1be3, 0x601b, 0x0005, 0x6023, 0x0020,
-+ 0x00fe, 0x080c, 0x1d95, 0x00f6, 0x7908, 0x8109, 0x790a, 0x6810,
-+ 0x8001, 0x6812, 0x1118, 0x7810, 0xc0a5, 0x7812, 0x2001, 0xffff,
-+ 0xa005, 0x00fe, 0x0005, 0x0076, 0x2700, 0x2039, 0x0000, 0xd0fc,
-+ 0x0108, 0xc7fd, 0x2041, 0x0021, 0x2049, 0x0004, 0x2051, 0x0008,
-+ 0x2091, 0x8000, 0x080c, 0x1b93, 0x8738, 0xa784, 0x001f, 0x1dd0,
-+ 0xa7bc, 0xff00, 0x873f, 0x8738, 0x873f, 0xa784, 0x0f00, 0x1d90,
-+ 0x2091, 0x8001, 0x007e, 0x0005, 0x786c, 0x2009, 0x8e74, 0x210c,
-+ 0xa10d, 0x0118, 0xa065, 0x0804, 0x207a, 0x2061, 0x0000, 0x6018,
-+ 0xd084, 0x11b8, 0x7810, 0xd08c, 0x0130, 0xc08c, 0x7812, 0xc7fc,
-+ 0x2069, 0x4640, 0x0028, 0xc08d, 0x7812, 0x2069, 0x4680, 0xc7fd,
-+ 0x2091, 0x8000, 0x681c, 0x681f, 0x0000, 0x2091, 0x8001, 0xa005,
-+ 0x1108, 0x0005, 0xa08c, 0xfff0, 0x0110, 0x080c, 0x254c, 0x0002,
-+ 0x1cb8, 0x1cbb, 0x1cc1, 0x1cc5, 0x1cb9, 0x1cc9, 0x1cb9, 0x1cb9,
-+ 0x1cb9, 0x1ccf, 0x1cfb, 0x1cfe, 0x1d03, 0x1d0c, 0x1cb9, 0x1cb9,
-+ 0x0005, 0x080c, 0x254c, 0x080c, 0x1c5b, 0x2001, 0x8001, 0x0804,
-+ 0x1d15, 0x2001, 0x8003, 0x0804, 0x1d15, 0x2001, 0x8004, 0x0804,
-+ 0x1d15, 0x080c, 0x1c5b, 0x2001, 0x8006, 0x0804, 0x1d15, 0x2091,
-+ 0x8000, 0x0076, 0xd7fc, 0x1128, 0x2069, 0x4640, 0x2039, 0x0009,
-+ 0x0020, 0x2069, 0x4680, 0x2039, 0x0009, 0x6800, 0xa086, 0x0000,
-+ 0x0128, 0x000e, 0x6f1e, 0x2091, 0x8001, 0x0005, 0x6870, 0x007e,
-+ 0xa0bc, 0xff00, 0x2041, 0x0021, 0x2049, 0x0004, 0x2051, 0x0010,
-+ 0x080c, 0x1b93, 0x8738, 0xa784, 0x001f, 0x1dd0, 0x2091, 0x8001,
-+ 0x2001, 0x800a, 0x00d0, 0x2001, 0x800c, 0x00b8, 0x080c, 0x1c5b,
-+ 0x2001, 0x800d, 0x0090, 0xd7fc, 0x0110, 0x78e4, 0x0008, 0x78e0,
-+ 0x70c6, 0x2001, 0x800e, 0x0048, 0xd7fc, 0x0110, 0x78ec, 0x0008,
-+ 0x78e8, 0x70c6, 0x2001, 0x800f, 0x0000, 0x70c2, 0xd7fc, 0x1118,
-+ 0x70db, 0x0000, 0x0010, 0x70db, 0x0001, 0x2061, 0x0000, 0x601b,
-+ 0x0001, 0x2091, 0x4080, 0x0005, 0xac80, 0x0001, 0x81ff, 0x0518,
-+ 0x2099, 0x0030, 0x20a0, 0x700c, 0xa084, 0x07ff, 0x0100, 0x7018,
-+ 0x0006, 0x701c, 0x0006, 0x7020, 0x0006, 0x7024, 0x0006, 0x7112,
-+ 0x81ac, 0x721a, 0x731e, 0x7422, 0x7526, 0x7003, 0x0001, 0x7007,
-+ 0x0001, 0x7008, 0x800b, 0x1ee8, 0x7007, 0x0002, 0xa08c, 0x01e0,
-+ 0x1110, 0x53a5, 0xa006, 0x7003, 0x0000, 0x7007, 0x0004, 0x000e,
-+ 0x7026, 0x000e, 0x7022, 0x000e, 0x701e, 0x000e, 0x701a, 0x0005,
-+ 0x2011, 0x0020, 0x2009, 0x0010, 0x6b0a, 0x6c0e, 0x681f, 0x0201,
-+ 0x6803, 0xfd20, 0x6807, 0x0038, 0x6a1a, 0x2d00, 0xa0e8, 0x0008,
-+ 0xa290, 0x0004, 0x8109, 0x1d80, 0x0005, 0x70ec, 0xd0dc, 0x1520,
-+ 0x2029, 0x0001, 0x7814, 0xd0cc, 0x1160, 0x70ec, 0xd0e4, 0x2019,
-+ 0x0c0a, 0x2021, 0x000a, 0x1120, 0x2019, 0x0c0c, 0x2021, 0x000c,
-+ 0x0070, 0x70ec, 0xd0e4, 0x1128, 0x2019, 0x180c, 0x2021, 0x000c,
-+ 0x0030, 0x2019, 0x1809, 0x2021, 0x0009, 0xa5ad, 0x0200, 0x6b0a,
-+ 0x6c0e, 0x6d1e, 0x6807, 0x0038, 0x0005, 0x6004, 0x6086, 0x2c08,
-+ 0x2063, 0x0000, 0x7868, 0xa005, 0x796a, 0x0110, 0x2c02, 0x0008,
-+ 0x796e, 0x0005, 0x00c6, 0x2061, 0x4600, 0x6887, 0x0103, 0x2d08,
-+ 0x206b, 0x0000, 0x6068, 0xa005, 0x616a, 0x0110, 0x2d02, 0x0008,
-+ 0x616e, 0x00ce, 0x0005, 0x2091, 0x8000, 0x2c04, 0x786e, 0xa005,
-+ 0x1108, 0x786a, 0x2091, 0x8001, 0x609c, 0xa005, 0x0188, 0x00c6,
-+ 0x2060, 0x2008, 0x609c, 0xa005, 0x0138, 0x2062, 0x609f, 0x0000,
-+ 0xa065, 0x609c, 0xa005, 0x1dc8, 0x7848, 0x794a, 0x2062, 0x00ce,
-+ 0x7848, 0x2062, 0x609f, 0x0000, 0xac85, 0x0000, 0x1110, 0x080c,
-+ 0x254c, 0x784a, 0x0005, 0x20a9, 0x0010, 0xa006, 0x8004, 0x8086,
-+ 0x818e, 0x1208, 0xa200, 0x1f04, 0x1ddf, 0x8086, 0x818e, 0x0005,
-+ 0x0156, 0x20a9, 0x0010, 0xa005, 0x01b8, 0xa11a, 0x12a8, 0x8213,
-+ 0x818d, 0x0228, 0xa11a, 0x1220, 0x1f04, 0x1def, 0x0028, 0xa11a,
-+ 0x2308, 0x8210, 0x1f04, 0x1def, 0x0006, 0x3200, 0xa084, 0xefff,
-+ 0x2080, 0x000e, 0x015e, 0x0005, 0x0006, 0x3200, 0xa085, 0x1000,
-+ 0x0cb8, 0x7d74, 0x70d0, 0xa506, 0x0904, 0x1ebd, 0x7810, 0x2050,
-+ 0x080c, 0x1b58, 0x0904, 0x1ebd, 0xa046, 0x7970, 0x2500, 0x8000,
-+ 0xa112, 0x2009, 0x0040, 0x1208, 0x0030, 0x72d0, 0xa206, 0x0118,
-+ 0x8840, 0x2009, 0x0080, 0x00c6, 0x7112, 0x7007, 0x0001, 0x2099,
-+ 0x0030, 0x20a9, 0x0020, 0xac80, 0x0001, 0x20a0, 0x2061, 0x0000,
-+ 0x88ff, 0x0110, 0x080c, 0x1b58, 0x7008, 0xd0fc, 0x0de8, 0x7007,
-+ 0x0002, 0x2091, 0x8001, 0xa08c, 0x01e0, 0x1538, 0x53a5, 0x8cff,
-+ 0x1120, 0x88ff, 0x0904, 0x1eaa, 0x0050, 0x2c00, 0x788e, 0x20a9,
-+ 0x0020, 0xac80, 0x0001, 0x20a0, 0x53a5, 0x0804, 0x1eaa, 0xa046,
-+ 0x7218, 0x731c, 0xdac4, 0x0110, 0x7420, 0x7524, 0xa292, 0x0040,
-+ 0xa39b, 0x0000, 0xa4a3, 0x0000, 0xa5ab, 0x0000, 0x721a, 0x731e,
-+ 0xdac4, 0x0118, 0x7422, 0x7526, 0xa006, 0x7007, 0x0004, 0x0904,
-+ 0x1eaa, 0x8cff, 0x0110, 0x080c, 0x1b60, 0x00ce, 0x080c, 0x1b60,
-+ 0xa046, 0x7888, 0x8000, 0x788a, 0xa086, 0x0002, 0x01c0, 0x7a7c,
-+ 0x7b78, 0xdac4, 0x0110, 0x7c84, 0x7d80, 0x7974, 0x8107, 0x8004,
-+ 0x8004, 0xa210, 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000,
-+ 0x721a, 0x731e, 0xdac4, 0x0588, 0x7422, 0x7526, 0x0470, 0x6014,
-+ 0xd0fc, 0x1118, 0x2069, 0x4640, 0x0010, 0x2069, 0x4680, 0x2091,
-+ 0x8000, 0x681f, 0x0002, 0x88ff, 0x0120, 0xa046, 0x788c, 0x2060,
-+ 0x0c70, 0x788b, 0x0000, 0x78ac, 0xa085, 0x0003, 0x78ae, 0x2091,
-+ 0x8001, 0x0098, 0x00ce, 0x788b, 0x0000, 0x080c, 0x2035, 0x6004,
-+ 0xa084, 0x000f, 0x0059, 0x88ff, 0x0130, 0x788c, 0x2060, 0x6004,
-+ 0xa084, 0x000f, 0x0019, 0x0804, 0x1e09, 0x0005, 0x0002, 0x1ecf,
-+ 0x1eea, 0x1f03, 0x1ecf, 0x1f10, 0x1ee0, 0x1ecf, 0x1ecf, 0x1ecf,
-+ 0x1ee8, 0x1f01, 0x1ecf, 0x1ecf, 0x1ecf, 0x1ecf, 0x1ecf, 0x2039,
-+ 0x0400, 0x78bc, 0xa705, 0x78be, 0x6008, 0xa705, 0x600a, 0x080c,
-+ 0x1f4c, 0x609c, 0x78ba, 0x609f, 0x0000, 0x080c, 0x2021, 0x0005,
-+ 0x78bc, 0xd0c4, 0x0108, 0x0c58, 0x601c, 0xc0bd, 0x601e, 0x0030,
-+ 0x080c, 0x205f, 0x78bc, 0xd0c4, 0x0108, 0x0c08, 0x78bf, 0x0000,
-+ 0x6004, 0x8007, 0xa084, 0x00ff, 0x78b2, 0x8001, 0x0138, 0x080c,
-+ 0x1f4c, 0x0120, 0x78bc, 0xc0c5, 0x78be, 0x0010, 0x0804, 0x1f67,
-+ 0x0005, 0x080c, 0x205c, 0x78bc, 0xa08c, 0x0e00, 0x1110, 0xd0c4,
-+ 0x1108, 0x0828, 0x080c, 0x1f4c, 0x1110, 0x0804, 0x1f67, 0x0005,
-+ 0x78bc, 0xd0c4, 0x0110, 0x0804, 0x1ecf, 0x78bf, 0x0000, 0x6714,
-+ 0x2011, 0x0001, 0x22a8, 0x6018, 0xa084, 0x00ff, 0xa005, 0x0188,
-+ 0xa7bc, 0xff00, 0x20a9, 0x0020, 0xa08e, 0x0001, 0x0150, 0xa7bc,
-+ 0x8000, 0x2011, 0x0002, 0x20a9, 0x0100, 0xa08e, 0x0002, 0x0108,
-+ 0x00c0, 0x080c, 0x1b7b, 0x2d00, 0x2091, 0x8000, 0x682b, 0x0000,
-+ 0x682f, 0x0000, 0x6808, 0xa084, 0xffde, 0x680a, 0xade8, 0x0010,
-+ 0x2091, 0x8001, 0x1f04, 0x1f34, 0x8211, 0x0118, 0x20a9, 0x0100,
-+ 0x0c58, 0x080c, 0x1b60, 0x0005, 0x609f, 0x0000, 0x78b4, 0xa06d,
-+ 0x2c00, 0x78b6, 0x1110, 0x78ba, 0x0038, 0x689e, 0x2d00, 0x6002,
-+ 0x78b8, 0xad06, 0x1108, 0x6002, 0x78b0, 0x8001, 0x78b2, 0x1130,
-+ 0x78bc, 0xc0c4, 0x78be, 0x78b8, 0x2060, 0xa006, 0x0005, 0x00e6,
-+ 0xa02e, 0x2530, 0x7dba, 0x7db6, 0x65ae, 0x65b2, 0x601c, 0x60a2,
-+ 0x2048, 0xa984, 0xe1ff, 0x601e, 0xa984, 0x0060, 0x0110, 0x080c,
-+ 0x3fc1, 0x6596, 0x65a6, 0x669a, 0x66aa, 0x6714, 0x2071, 0x4680,
-+ 0xd7fc, 0x1110, 0x2071, 0x4640, 0xa784, 0x0f00, 0x800b, 0xa784,
-+ 0x001f, 0x0120, 0x8003, 0x8003, 0x8003, 0x8003, 0xa105, 0x71c0,
-+ 0xa168, 0x2700, 0x8007, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003,
-+ 0x71c4, 0xa100, 0x60c2, 0x2091, 0x8000, 0x7814, 0xd0c4, 0x0138,
-+ 0xd7fc, 0x1118, 0xd0f4, 0x1140, 0x0010, 0xd0fc, 0x1128, 0x6e08,
-+ 0xd684, 0x01f0, 0xd9fc, 0x11e0, 0x2091, 0x8001, 0x080c, 0x1be3,
-+ 0x2091, 0x8000, 0x080c, 0x1d95, 0x2091, 0x8001, 0x7814, 0xd0c4,
-+ 0x0904, 0x201f, 0xd7fc, 0x1120, 0xd0f4, 0x1130, 0x0804, 0x201f,
-+ 0xd0fc, 0x1110, 0x0804, 0x201f, 0x601b, 0x0021, 0x0804, 0x201f,
-+ 0x6024, 0xa096, 0x0001, 0x1110, 0x8000, 0x6026, 0x6a10, 0x6814,
-+ 0xa202, 0x0268, 0x0160, 0x2091, 0x8001, 0x2039, 0x0200, 0x609c,
-+ 0x78ba, 0x609f, 0x0000, 0x080c, 0x2021, 0x0804, 0x201f, 0x2c08,
-+ 0xd9fc, 0x01f0, 0x6800, 0xa065, 0x01d8, 0x6a04, 0x7000, 0xa084,
-+ 0x0002, 0x0168, 0x7048, 0xa206, 0x1150, 0x6b04, 0x2160, 0x2304,
-+ 0x6002, 0xa005, 0x1108, 0x6902, 0x2260, 0x6102, 0x0098, 0x2d00,
-+ 0x2060, 0x080c, 0x2693, 0x6e08, 0x2160, 0x6202, 0x6906, 0x0050,
-+ 0x6800, 0x6902, 0xa065, 0x0110, 0x6102, 0x0008, 0x6906, 0x2160,
-+ 0x6003, 0x0000, 0x2160, 0xd9fc, 0x0118, 0xa6b4, 0xfffc, 0x6e0a,
-+ 0x6810, 0x7d08, 0x8528, 0x7d0a, 0x8000, 0x6812, 0x2091, 0x8001,
-+ 0xd6b4, 0x0128, 0xa6b6, 0x0040, 0x6e0a, 0x080c, 0x1bf4, 0x00ee,
-+ 0x0005, 0x6008, 0xa705, 0x600a, 0x2091, 0x8000, 0x080c, 0x1d95,
-+ 0x2091, 0x8001, 0x78b8, 0xa065, 0x0128, 0x609c, 0x78ba, 0x609f,
-+ 0x0000, 0x0c78, 0x78b6, 0x78ba, 0x0005, 0x7970, 0x7874, 0x2818,
-+ 0xd384, 0x0118, 0x8000, 0xa112, 0x0220, 0x8000, 0xa112, 0x1278,
-+ 0xc384, 0x7a7c, 0x721a, 0x7a78, 0x721e, 0xdac4, 0x0120, 0x7a84,
-+ 0x7222, 0x7a80, 0x7226, 0xa006, 0xd384, 0x0108, 0x8000, 0x7876,
-+ 0x70d2, 0x781c, 0xa005, 0x0138, 0x8001, 0x781e, 0x1120, 0x0e04,
-+ 0x205b, 0x2091, 0x4080, 0x0005, 0x2039, 0x2071, 0x0010, 0x2039,
-+ 0x2077, 0x2704, 0xa005, 0x0160, 0xac00, 0x2068, 0x6908, 0x6810,
-+ 0x6912, 0x680a, 0x690c, 0x6814, 0x6916, 0x680e, 0x8738, 0x0c88,
-+ 0x0005, 0x0003, 0x0009, 0x000f, 0x0015, 0x001b, 0x0000, 0x0015,
-+ 0x001b, 0x0000, 0x2041, 0x0000, 0x780c, 0x0002, 0x2223, 0x21fe,
-+ 0x2082, 0x20f2, 0x2039, 0x8e74, 0x2734, 0x7d10, 0x00c0, 0x6084,
-+ 0xa086, 0x0103, 0x1904, 0x20dc, 0x6114, 0x6018, 0xa105, 0x0120,
-+ 0x86ff, 0x11d8, 0x0804, 0x20dc, 0x8603, 0xa080, 0x8e55, 0x620c,
-+ 0x2202, 0x8000, 0x6210, 0x2202, 0x080c, 0x1db3, 0x8630, 0xa68e,
-+ 0x000f, 0x0904, 0x215d, 0x786c, 0xa065, 0x1d08, 0x7808, 0xa602,
-+ 0x1220, 0xd5ac, 0x1110, 0x263a, 0x0005, 0xa682, 0x0003, 0x1a04,
-+ 0x215d, 0x2091, 0x8000, 0x2069, 0x0000, 0x6818, 0xd084, 0x11f8,
-+ 0x2011, 0x8e55, 0x2204, 0x70c6, 0x8210, 0x2204, 0x70ca, 0xd684,
-+ 0x1130, 0x8210, 0x2204, 0x70da, 0x8210, 0x2204, 0x70de, 0xa685,
-+ 0x8020, 0x70c2, 0x681b, 0x0001, 0x2091, 0x4080, 0x7810, 0xa084,
-+ 0xffcf, 0x7812, 0x2091, 0x8001, 0x203b, 0x0000, 0x0005, 0x7810,
-+ 0xc0ad, 0x7812, 0x0804, 0x215d, 0x263a, 0x080c, 0x2229, 0x1904,
-+ 0x2245, 0x786c, 0xa065, 0x1904, 0x2087, 0x2091, 0x8000, 0x7810,
-+ 0xa084, 0xffcf, 0x86ff, 0x0108, 0xc0ad, 0x7812, 0x2091, 0x8001,
-+ 0x0804, 0x2245, 0x2039, 0x8e74, 0x2734, 0x7d10, 0x00a0, 0x6084,
-+ 0xa086, 0x0103, 0x1904, 0x2147, 0x6114, 0x6018, 0xa105, 0x0120,
-+ 0x86ff, 0x11b8, 0x0804, 0x2147, 0xa680, 0x8e55, 0x620c, 0x2202,
-+ 0x080c, 0x1db3, 0x8630, 0xa68e, 0x001e, 0x0904, 0x215d, 0x786c,
-+ 0xa065, 0x1d28, 0x7808, 0xa602, 0x1220, 0xd5ac, 0x1110, 0x263a,
-+ 0x0005, 0xa682, 0x0006, 0x1a04, 0x215d, 0x2091, 0x8000, 0x2069,
-+ 0x0000, 0x6818, 0xd084, 0x11f8, 0x2011, 0x8e55, 0x2009, 0x8e4e,
-+ 0x26a8, 0x211c, 0x2204, 0x201a, 0x8108, 0x8210, 0x1f04, 0x2129,
-+ 0xa685, 0x8030, 0x70c2, 0x681b, 0x0001, 0x2091, 0x4080, 0x7810,
-+ 0xa084, 0xffcf, 0x7812, 0x2091, 0x8001, 0xa006, 0x2009, 0x8e75,
-+ 0x200a, 0x203a, 0x0005, 0x7810, 0xc0ad, 0x7812, 0x00b0, 0x263a,
-+ 0x080c, 0x2229, 0x1904, 0x2245, 0x786c, 0xa065, 0x1904, 0x20f7,
-+ 0x2091, 0x8000, 0x7810, 0xa084, 0xffcf, 0x86ff, 0x0108, 0xc0ad,
-+ 0x7812, 0x2091, 0x8001, 0x0804, 0x2245, 0x2091, 0x8000, 0x7007,
-+ 0x0004, 0x7994, 0x70d4, 0xa102, 0x0228, 0x0168, 0x7b90, 0xa302,
-+ 0x1150, 0x0010, 0x8002, 0x1138, 0x263a, 0x7810, 0xc0ad, 0x7812,
-+ 0x2091, 0x8001, 0x0005, 0xa184, 0xff00, 0x0140, 0x810f, 0x810c,
-+ 0x810c, 0x8004, 0x8004, 0x8007, 0xa100, 0x0018, 0x8107, 0x8004,
-+ 0x8004, 0x7a9c, 0xa210, 0x721a, 0x7a98, 0xa006, 0xa211, 0x721e,
-+ 0xd4c4, 0x0130, 0x7aa4, 0xa211, 0x7222, 0x7aa0, 0xa211, 0x7226,
-+ 0x20a1, 0x0030, 0x7003, 0x0000, 0x2009, 0x8e54, 0x260a, 0x8109,
-+ 0x2198, 0x2104, 0xd084, 0x0108, 0x8633, 0xa6b0, 0x0002, 0x26a8,
-+ 0x53a6, 0x8603, 0x7012, 0x7007, 0x0001, 0x7990, 0x7894, 0x8000,
-+ 0xa10a, 0x1208, 0xa006, 0x2028, 0x7974, 0xa184, 0xff00, 0x0140,
-+ 0x810f, 0x810c, 0x810c, 0x8004, 0x8004, 0x8007, 0xa100, 0x0018,
-+ 0x8107, 0x8004, 0x8004, 0x797c, 0xa108, 0x7a78, 0xa006, 0xa211,
-+ 0xd4c4, 0x0120, 0x7b84, 0xa319, 0x7c80, 0xa421, 0x7008, 0xd0fc,
-+ 0x0de8, 0xa084, 0x01e0, 0x01d0, 0x7d10, 0x2031, 0x8e54, 0x2634,
-+ 0x78a8, 0x8000, 0x78aa, 0xd08c, 0x1138, 0x7007, 0x0006, 0x7004,
-+ 0xd094, 0x1de8, 0x0804, 0x215f, 0x2069, 0x4647, 0x206b, 0x0003,
-+ 0x78ac, 0xa085, 0x0300, 0x78ae, 0xa006, 0x0048, 0x2030, 0x75d6,
-+ 0x2091, 0x4080, 0x7d96, 0x7d10, 0xa5ac, 0xffcf, 0x7d12, 0x2091,
-+ 0x8001, 0x78aa, 0x7007, 0x0006, 0x263a, 0x7003, 0x0001, 0x711a,
-+ 0x721e, 0xd5c4, 0x0110, 0x7322, 0x7426, 0x0005, 0x6084, 0xa086,
-+ 0x0103, 0x11d8, 0x6114, 0x6018, 0xa105, 0x11b8, 0x2069, 0x0000,
-+ 0x6818, 0xd084, 0x1190, 0x600c, 0x70c6, 0x6010, 0x70ca, 0x70c3,
-+ 0x8020, 0x681b, 0x0001, 0x2091, 0x4080, 0x080c, 0x1db3, 0x0e04,
-+ 0x221c, 0x786c, 0xa065, 0x1d10, 0x0005, 0x0059, 0x1530, 0x786c,
-+ 0xa065, 0x19e0, 0x0410, 0x0029, 0x1500, 0x786c, 0xa065, 0x1dd8,
-+ 0x00e0, 0x6084, 0xa086, 0x0103, 0x1168, 0x6018, 0xc0fc, 0x601a,
-+ 0xa086, 0x0004, 0x1138, 0x7804, 0xd0a4, 0x0120, 0x080c, 0x1db3,
-+ 0xa006, 0x0005, 0x0079, 0x1118, 0xa085, 0x0001, 0x0005, 0x00b9,
-+ 0x1110, 0x2041, 0x0001, 0x7d10, 0x0005, 0x88ff, 0x0110, 0x2091,
-+ 0x4080, 0x0005, 0x7b90, 0x7994, 0x70d4, 0xa102, 0x1118, 0xa385,
-+ 0x0000, 0x0005, 0x0210, 0xa302, 0x0005, 0x8002, 0x0005, 0xa184,
-+ 0xff00, 0x0140, 0x810f, 0x810c, 0x810c, 0x8004, 0x8004, 0x8007,
-+ 0xa100, 0x0018, 0x8107, 0x8004, 0x8004, 0x7a9c, 0x7b98, 0x7ca4,
-+ 0x7da0, 0xa210, 0xa006, 0xa319, 0xa421, 0xa529, 0x2009, 0x0018,
-+ 0x6028, 0xa005, 0x0110, 0x2009, 0x0040, 0x080c, 0x1b15, 0x01d0,
-+ 0x78a8, 0x8000, 0x78aa, 0xd08c, 0x1510, 0x6014, 0xd0fc, 0x1118,
-+ 0x2069, 0x4640, 0x0010, 0x2069, 0x4680, 0x2091, 0x8000, 0x681f,
-+ 0x0003, 0x78ab, 0x0000, 0x78ac, 0xa085, 0x0300, 0x78ae, 0x2091,
-+ 0x8001, 0x0068, 0x78ab, 0x0000, 0x080c, 0x1db3, 0x7990, 0x7894,
-+ 0x8000, 0xa10a, 0x1208, 0xa006, 0x7896, 0x70d6, 0xa006, 0x2071,
-+ 0x0010, 0x2091, 0x8001, 0x0005, 0xd7fc, 0x1118, 0x2009, 0x4658,
-+ 0x0010, 0x2009, 0x4698, 0x2091, 0x8000, 0x200a, 0x00f6, 0x2009,
-+ 0x4680, 0x2079, 0x0100, 0xd7fc, 0x1120, 0x2009, 0x4640, 0x2079,
-+ 0x0200, 0x2104, 0xa086, 0x0000, 0x1180, 0xd7fc, 0x1118, 0x2009,
-+ 0x4645, 0x0010, 0x2009, 0x4685, 0x2104, 0xa005, 0x1130, 0x7830,
-+ 0xa084, 0x00c0, 0x1110, 0x781b, 0x0052, 0x00fe, 0x0005, 0x2009,
-+ 0x0002, 0x2069, 0x4600, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1904,
-+ 0x2324, 0x2071, 0x4680, 0x2079, 0x0100, 0x2021, 0x48bf, 0x784b,
-+ 0x000f, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x0118, 0x2019, 0x3e0f,
-+ 0x0030, 0x20a1, 0x012b, 0x2019, 0x3e0f, 0xd184, 0x0110, 0x20a1,
-+ 0x022b, 0x2304, 0xa005, 0x0140, 0x789a, 0x8318, 0x23ac, 0x8318,
-+ 0x2398, 0x53a6, 0x3318, 0x0ca8, 0x789b, 0x0000, 0x789b, 0x0020,
-+ 0x20a9, 0x0010, 0x78af, 0x0000, 0x78af, 0x2020, 0x1f04, 0x2302,
-+ 0x7003, 0x0000, 0x0016, 0xd18c, 0x2009, 0x0000, 0x0108, 0xc1bd,
-+ 0x080c, 0x2443, 0x001e, 0x7020, 0xa084, 0x000f, 0xa085, 0x6300,
-+ 0x7806, 0x780f, 0x9000, 0x7843, 0x00d8, 0x7853, 0x0090, 0x780b,
-+ 0x2f08, 0x7452, 0x704f, 0x0000, 0x8109, 0x0140, 0x2071, 0x4640,
-+ 0x2079, 0x0200, 0x2021, 0x46bf, 0x0804, 0x22df, 0x080c, 0x24fd,
-+ 0x0005, 0x0016, 0x2011, 0x0101, 0xd1bc, 0x1110, 0x2011, 0x0201,
-+ 0xa18c, 0x000f, 0x2204, 0xa084, 0xfff0, 0xa105, 0x2012, 0x001e,
-+ 0x080c, 0x2443, 0x0005, 0x2011, 0x0101, 0xd3fc, 0x1110, 0x2011,
-+ 0x0201, 0x20a9, 0x0009, 0x810b, 0x1f04, 0x234b, 0xa18c, 0x0e00,
-+ 0x2204, 0xa084, 0xf1ff, 0xa105, 0x2012, 0x0005, 0x2019, 0x0002,
-+ 0x2009, 0x0101, 0x20a9, 0x0005, 0x8213, 0x1f04, 0x235c, 0xa294,
-+ 0x00e0, 0x2104, 0xa084, 0xff1f, 0xa205, 0x200a, 0x8319, 0x0118,
-+ 0x2009, 0x0201, 0x0c78, 0x0005, 0x2011, 0x0101, 0xd3fc, 0x1110,
-+ 0x2011, 0x0201, 0x20a9, 0x000c, 0x810b, 0x1f04, 0x2374, 0xa18c,
-+ 0xf000, 0x2204, 0xa084, 0x0fff, 0xa105, 0x2012, 0x0005, 0x2011,
-+ 0x0102, 0xd3fc, 0x1110, 0x2011, 0x0202, 0x2204, 0xa084, 0xf0cf,
-+ 0xa105, 0x2012, 0x0005, 0x00c6, 0x2061, 0x0100, 0xd1bc, 0x1110,
-+ 0x2061, 0x0200, 0xc1bc, 0x8103, 0x8003, 0xa080, 0x0020, 0x609a,
-+ 0x62ac, 0x63ac, 0x00ce, 0x0005, 0x00c6, 0x2061, 0x0100, 0xd1bc,
-+ 0x1110, 0x2061, 0x0200, 0xc1bc, 0x8103, 0x8003, 0xa080, 0x0022,
-+ 0x609a, 0x60a4, 0xa084, 0xffdf, 0x60ae, 0x00ce, 0x0005, 0x00c6,
-+ 0x2061, 0x0100, 0xd1bc, 0x1110, 0x2061, 0x0200, 0xc1bc, 0x8103,
-+ 0x8003, 0xa080, 0x0020, 0x609a, 0x60a4, 0xa28c, 0x0020, 0x0118,
-+ 0xc2ac, 0xa39d, 0x4000, 0xc3ec, 0xd3b4, 0x1108, 0xc3ed, 0x62ae,
-+ 0x2010, 0x60a4, 0x63ae, 0x2018, 0x00ce, 0x0005, 0x2091, 0x8000,
-+ 0x00c6, 0x00e6, 0x6818, 0xa005, 0x0904, 0x2427, 0xd1fc, 0x0118,
-+ 0x2061, 0x8dd0, 0x0010, 0x2061, 0x8cc0, 0x080c, 0x242f, 0x0560,
-+ 0x20a9, 0x0101, 0xd1fc, 0x0118, 0x2061, 0x8cd0, 0x0010, 0x2061,
-+ 0x8bc0, 0x00c6, 0x080c, 0x242f, 0x0128, 0x00ce, 0x8c60, 0x1f04,
-+ 0x23e9, 0x04a8, 0x000e, 0xd1fc, 0x0128, 0xa082, 0x8cd0, 0x2071,
-+ 0x4680, 0x0020, 0xa082, 0x8bc0, 0x2071, 0x4640, 0x7076, 0x7172,
-+ 0x2138, 0x2001, 0x0004, 0x7062, 0x707f, 0x000f, 0x71d0, 0xc1c4,
-+ 0x71d2, 0x080c, 0x22a4, 0x00c0, 0xd1fc, 0x1118, 0x2071, 0x4640,
-+ 0x0010, 0x2071, 0x4680, 0x6020, 0xc0dd, 0x6022, 0x7172, 0x2138,
-+ 0x2c00, 0x707a, 0x2001, 0x0006, 0x7062, 0x707f, 0x000f, 0x71d0,
-+ 0xc1c4, 0x71d2, 0x080c, 0x22a4, 0x2001, 0x0000, 0x0010, 0x2001,
-+ 0x0001, 0x2091, 0x8001, 0xa005, 0x00ee, 0x00ce, 0x0005, 0x2c04,
-+ 0xa005, 0x0170, 0x2060, 0x6010, 0xa306, 0x1140, 0x600c, 0xa206,
-+ 0x1128, 0x6014, 0xa106, 0x1110, 0xa006, 0x0020, 0x6000, 0x0c80,
-+ 0xa085, 0x0001, 0x0005, 0x00f6, 0x00e6, 0x0016, 0x2079, 0x4680,
-+ 0x2071, 0x0100, 0xd1bc, 0x1120, 0x2079, 0x4640, 0x2071, 0x0200,
-+ 0x7920, 0xa18c, 0x000f, 0x70ec, 0xd0c4, 0x1110, 0x001e, 0x0060,
-+ 0x810b, 0x810b, 0x810b, 0x810b, 0x000e, 0xa18d, 0x0800, 0xd0bc,
-+ 0x1110, 0xa18d, 0x0f00, 0x2104, 0x00ee, 0x00fe, 0x0005, 0x2001,
-+ 0x4601, 0x2004, 0xd0ac, 0x1138, 0x68e4, 0xd0ac, 0x0120, 0xa084,
-+ 0x0006, 0x1108, 0x0009, 0x0005, 0x6014, 0x00e6, 0x0036, 0x2018,
-+ 0x2071, 0x4b40, 0xd0fc, 0x1110, 0x2071, 0x4ac0, 0x8007, 0xa084,
-+ 0x000f, 0x8003, 0x8003, 0x8003, 0xae70, 0x7004, 0xa084, 0x000a,
-+ 0x1904, 0x24fa, 0x7108, 0xa194, 0xff00, 0x0904, 0x24fa, 0xa18c,
-+ 0x00ff, 0x701c, 0xa084, 0xff00, 0x01c0, 0x7004, 0xa085, 0x003a,
-+ 0x7006, 0x2001, 0x0009, 0xa102, 0x16d8, 0x2001, 0x000a, 0xa102,
-+ 0x16d0, 0x2001, 0x000c, 0xa102, 0x16c8, 0x701c, 0xa084, 0x00ff,
-+ 0x701e, 0x7004, 0xa084, 0xffdf, 0x7006, 0x2001, 0x000a, 0xa106,
-+ 0x01a8, 0x2001, 0x000c, 0xa106, 0x01a0, 0x2001, 0x0012, 0xa106,
-+ 0x0198, 0x2001, 0x0014, 0xa106, 0x0190, 0x2001, 0x0019, 0xa106,
-+ 0x0188, 0x2001, 0x0032, 0xa106, 0x0180, 0x00d8, 0x2009, 0x000c,
-+ 0x00d0, 0x2009, 0x0012, 0x00b8, 0x2009, 0x0014, 0x00a0, 0x2009,
-+ 0x0019, 0x0088, 0x2009, 0x0020, 0x0070, 0x2009, 0x003f, 0x0058,
-+ 0x2009, 0x000a, 0x0040, 0x2009, 0x000c, 0x0028, 0x2009, 0x0019,
-+ 0x0010, 0x2011, 0x0000, 0x2100, 0xa205, 0x700a, 0x7004, 0xa085,
-+ 0x000a, 0x7006, 0x2071, 0x4600, 0x7004, 0xd0bc, 0x0158, 0xd3fc,
-+ 0x1120, 0x73ea, 0x2071, 0x4640, 0x0018, 0x73ee, 0x2071, 0x4680,
-+ 0x701f, 0x000d, 0x003e, 0x00ee, 0x0005, 0x2001, 0x01ff, 0x2004,
-+ 0xd0fc, 0x11d0, 0x2001, 0x04fd, 0x2004, 0xa082, 0x0005, 0x12a0,
-+ 0x2071, 0x0200, 0x71ec, 0xa18c, 0x1c00, 0x810f, 0x810c, 0x810c,
-+ 0x2079, 0x0100, 0x78ec, 0xa084, 0x1c00, 0x8007, 0x8004, 0x8004,
-+ 0xa105, 0xa08a, 0x0007, 0x0208, 0x0005, 0x0002, 0x254b, 0x2532,
-+ 0x254b, 0x2532, 0x2525, 0x253f, 0x2525, 0x7008, 0xa084, 0xc3ff,
-+ 0xa085, 0x3000, 0x700a, 0x7808, 0xa084, 0xc3ff, 0xa085, 0x3000,
-+ 0x780a, 0x0005, 0x7008, 0xa084, 0xc3ff, 0xa085, 0x2000, 0x700a,
-+ 0x7808, 0xa084, 0xc3ff, 0xa085, 0x2000, 0x780a, 0x0005, 0x7008,
-+ 0xa084, 0xc3ff, 0xa085, 0x0c00, 0x700a, 0x7808, 0xa084, 0xc3ff,
-+ 0xa085, 0x0c00, 0x780a, 0x0005, 0x0e04, 0x254c, 0x2091, 0x8000,
-+ 0x2071, 0x0000, 0x0006, 0x7018, 0xd084, 0x1de8, 0x000e, 0x2071,
-+ 0x0010, 0x70ca, 0x000e, 0x70c6, 0x70c3, 0x8002, 0x70db, 0x0a04,
-+ 0x70df, 0x0020, 0x2071, 0x0000, 0x701b, 0x0001, 0x2091, 0x4080,
-+ 0x0cf8, 0x7f3c, 0x7e58, 0x7c30, 0x7d38, 0x78a0, 0x708a, 0x758e,
-+ 0x7492, 0x7696, 0x779a, 0xa594, 0x003f, 0xd4f4, 0x0138, 0xd7bc,
-+ 0x1128, 0xa784, 0x007d, 0x1904, 0x3c74, 0x0871, 0xa49c, 0x000f,
-+ 0xa382, 0x0004, 0x0320, 0xa3a6, 0x0007, 0x1930, 0x2418, 0x8507,
-+ 0xa084, 0x000f, 0x0002, 0x2b49, 0x2c34, 0x2c72, 0x2ed8, 0x3256,
-+ 0x32ad, 0x3353, 0x33e2, 0x34b6, 0x3588, 0x259e, 0x259b, 0x2970,
-+ 0x2a56, 0x322a, 0x259b, 0x080c, 0x254c, 0x0005, 0xa006, 0x0038,
-+ 0x7808, 0xc08d, 0x780a, 0xa006, 0x7002, 0x704a, 0x7042, 0x70ce,
-+ 0x705c, 0xa005, 0x1904, 0x26ec, 0x7060, 0xa084, 0x0007, 0x0002,
-+ 0x25b8, 0x2626, 0x262e, 0x2637, 0x2640, 0x26d2, 0x2649, 0x2626,
-+ 0x7830, 0xd0bc, 0x1d10, 0x71d0, 0xd1bc, 0x19f8, 0xd1b4, 0x1904,
-+ 0x2603, 0x70a0, 0xa086, 0x0001, 0x09c0, 0x70b0, 0xa06d, 0x6800,
-+ 0xa065, 0xa055, 0x789b, 0x0080, 0x6b0c, 0x7baa, 0x6808, 0xa045,
-+ 0x6d10, 0x6804, 0xa06d, 0xa05d, 0xa886, 0x0001, 0x0118, 0x69bc,
-+ 0x7daa, 0x79aa, 0x68c0, 0xa04d, 0x6e1c, 0x2001, 0x0010, 0x0804,
-+ 0x281f, 0x705c, 0xa005, 0x1904, 0x259d, 0x00c6, 0x00d6, 0x70b0,
-+ 0xa06d, 0x6800, 0xa065, 0xa055, 0x789b, 0x0080, 0x6b0c, 0x7baa,
-+ 0x6808, 0xa045, 0x6d10, 0x6804, 0xa06d, 0xa05d, 0xa886, 0x0001,
-+ 0x0118, 0x69bc, 0x7daa, 0x79aa, 0x68c0, 0xa04d, 0x6e1c, 0x2001,
-+ 0x0020, 0x0804, 0x281f, 0x080c, 0x3c33, 0x1904, 0x259d, 0x781b,
-+ 0x0068, 0x70b8, 0xa06d, 0x68b4, 0x785a, 0x6894, 0x78d6, 0x78de,
-+ 0x6898, 0x78d2, 0x78da, 0x7808, 0xc08d, 0x780a, 0x68bc, 0x703e,
-+ 0xc1b4, 0x71d2, 0x70b4, 0xa065, 0x68c0, 0x7056, 0x7003, 0x0002,
-+ 0x2d00, 0x704a, 0xad80, 0x0009, 0x7042, 0x0005, 0x080c, 0x3c33,
-+ 0x1120, 0x781b, 0x0054, 0x7003, 0x0004, 0x0005, 0x080c, 0x3c33,
-+ 0x1128, 0x2011, 0x000c, 0x0419, 0x7003, 0x0004, 0x0005, 0x080c,
-+ 0x3c33, 0x1128, 0x2011, 0x0006, 0x00d1, 0x7003, 0x0004, 0x0005,
-+ 0x080c, 0x3c33, 0x1128, 0x2011, 0x000d, 0x0089, 0x7003, 0x0004,
-+ 0x0005, 0x080c, 0x3c33, 0x1150, 0x2011, 0x0006, 0x0041, 0x7078,
-+ 0x707b, 0x0000, 0x2068, 0x704a, 0x7003, 0x0004, 0x0005, 0x7170,
-+ 0xc1fc, 0x8107, 0x7882, 0x789b, 0x0080, 0xa286, 0x000c, 0x1120,
-+ 0x7aaa, 0x2001, 0x0001, 0x0098, 0xa18c, 0x001f, 0xa18d, 0x00c0,
-+ 0x79aa, 0xa286, 0x000d, 0x0120, 0x7aaa, 0x2001, 0x0002, 0x0038,
-+ 0x78ab, 0x0020, 0x7174, 0x79aa, 0x7aaa, 0x2001, 0x0004, 0x789b,
-+ 0x0060, 0x78aa, 0x785b, 0x0004, 0x781b, 0x0113, 0x080c, 0x3c46,
-+ 0x707f, 0x000f, 0x70d0, 0xd0b4, 0x0168, 0xc0b4, 0x70d2, 0x00c6,
-+ 0x70b4, 0xa065, 0x6008, 0xa084, 0xfbef, 0x600a, 0x6018, 0x8001,
-+ 0x601a, 0x00ce, 0x0005, 0x7014, 0xa005, 0x1138, 0x70d0, 0xd0b4,
-+ 0x0128, 0x70b4, 0xac06, 0x1110, 0x0c29, 0x0005, 0x0016, 0x71a0,
-+ 0xa186, 0x0001, 0x0528, 0x00d6, 0x0026, 0x2100, 0x2011, 0x0001,
-+ 0xa212, 0x70b0, 0x2068, 0x6800, 0xac06, 0x0120, 0x8211, 0x01b0,
-+ 0x00c9, 0x0cc8, 0x00c6, 0x2100, 0x2011, 0x0001, 0xa212, 0x70b0,
-+ 0x2068, 0x6800, 0x2060, 0x6008, 0xa084, 0xfbef, 0x600a, 0x8211,
-+ 0x0110, 0x0041, 0x0cb0, 0x70a3, 0x0001, 0x00ce, 0x002e, 0x00de,
-+ 0x001e, 0x0005, 0xade8, 0x0005, 0x70a8, 0xad06, 0x1110, 0x70a4,
-+ 0x2068, 0x0005, 0x080c, 0x3c33, 0x1904, 0x259d, 0x7078, 0x2068,
-+ 0x7770, 0x080c, 0x3b6f, 0x2c50, 0x080c, 0x3cce, 0x789b, 0x0080,
-+ 0x6814, 0xa084, 0x001f, 0xc0bd, 0x78aa, 0x6e1c, 0x2041, 0x0001,
-+ 0x2001, 0x0004, 0x0804, 0x2824, 0x080c, 0x3c33, 0x1904, 0x259d,
-+ 0x789b, 0x0080, 0x705c, 0x2068, 0x6f14, 0x70d0, 0xd0b4, 0x0168,
-+ 0xc0b4, 0x70d2, 0x00c6, 0x70b4, 0xa065, 0x6008, 0xa084, 0xfbef,
-+ 0x600a, 0x6018, 0x8001, 0x601a, 0x00ce, 0x080c, 0x3b6f, 0x2c50,
-+ 0x080c, 0x3cce, 0x6824, 0xa005, 0x0130, 0xa082, 0x0006, 0x0208,
-+ 0x0010, 0x6827, 0x0005, 0x6814, 0xa084, 0x001f, 0xc0bd, 0x78aa,
-+ 0x2031, 0x0020, 0x2041, 0x0001, 0x2001, 0x0003, 0x0804, 0x2824,
-+ 0xc28d, 0x72d2, 0x72bc, 0xa200, 0xa015, 0x7150, 0x8108, 0xa12a,
-+ 0x0208, 0x71bc, 0x2164, 0x6504, 0x85ff, 0x1170, 0x7152, 0x8421,
-+ 0x1da8, 0x70d0, 0xd08c, 0x0128, 0x70cc, 0xa005, 0x1110, 0x70cf,
-+ 0x000a, 0x0005, 0x2200, 0x0c90, 0x70d0, 0xc08c, 0x70d2, 0x70cf,
-+ 0x0000, 0x6034, 0xa005, 0x1db0, 0x6708, 0xa784, 0x073f, 0x01d0,
-+ 0xd7d4, 0x1d80, 0xa784, 0x0021, 0x1d68, 0xa784, 0x0002, 0x0130,
-+ 0xa784, 0x0004, 0x0d38, 0xa7bc, 0xfffb, 0x670a, 0xa784, 0x0218,
-+ 0x1d08, 0xa784, 0x0100, 0x0130, 0x6018, 0xa005, 0x19d8, 0xa7bc,
-+ 0xfeff, 0x670a, 0x2568, 0x6823, 0x0000, 0x6e1c, 0xa684, 0x000e,
-+ 0x6318, 0x0128, 0x601c, 0xa302, 0x0220, 0x0118, 0x0858, 0x83ff,
-+ 0x1948, 0x2d58, 0x2c50, 0x7152, 0xd7bc, 0x1120, 0x7028, 0x6022,
-+ 0x603a, 0x0010, 0xc7bc, 0x670a, 0x68c0, 0xa065, 0xa04d, 0x6100,
-+ 0x2a60, 0x2041, 0x0001, 0x6b14, 0xa39c, 0x001f, 0xa39d, 0x00c0,
-+ 0xd1fc, 0x0110, 0xd684, 0x0110, 0xa39c, 0xffbf, 0xd6a4, 0x0110,
-+ 0xa39d, 0x0020, 0xa684, 0x000e, 0x1904, 0x27d6, 0xc7a5, 0x670a,
-+ 0x2c00, 0x68c6, 0x77a0, 0xa786, 0x0001, 0x1178, 0x70d0, 0xd0b4,
-+ 0x1160, 0x7000, 0xa082, 0x0002, 0x1240, 0x7830, 0xd0bc, 0x1128,
-+ 0x789b, 0x0080, 0x7baa, 0x0804, 0x281d, 0x8739, 0x77a2, 0x2750,
-+ 0x77ac, 0xa7b0, 0x0005, 0x70a8, 0xa606, 0x1108, 0x76a4, 0x76ae,
-+ 0x2c3a, 0x8738, 0x2d3a, 0x8738, 0x283a, 0x8738, 0x233a, 0x8738,
-+ 0x253a, 0x7830, 0xd0bc, 0x0150, 0x2091, 0x8000, 0x2091, 0x303d,
-+ 0x70d0, 0xa084, 0x303d, 0x2091, 0x8000, 0x2090, 0xaad5, 0x0000,
-+ 0x0120, 0x8421, 0x2200, 0x1904, 0x2725, 0x0005, 0xd1dc, 0x0904,
-+ 0x37ce, 0x2029, 0x0020, 0xd69c, 0x1120, 0x8528, 0xd68c, 0x1108,
-+ 0x8528, 0x8840, 0x6f14, 0x610c, 0x8108, 0xa18c, 0x00ff, 0x70c8,
-+ 0xa160, 0x2c64, 0x8cff, 0x0188, 0x6014, 0xa706, 0x1dd0, 0x60b8,
-+ 0x8001, 0x60ba, 0x1d88, 0x2a60, 0x6008, 0xa085, 0x0100, 0x600a,
-+ 0x2200, 0x8421, 0x1904, 0x2725, 0x0005, 0x2a60, 0x610e, 0x69be,
-+ 0x2c00, 0x68c6, 0x8840, 0x6008, 0xc0d5, 0x600a, 0x77a0, 0xa786,
-+ 0x0001, 0x1904, 0x27ad, 0x70d0, 0xd0b4, 0x1904, 0x27ad, 0x7000,
-+ 0xa082, 0x0002, 0x1a04, 0x27ad, 0x7830, 0xd0bc, 0x1904, 0x27ad,
-+ 0x789b, 0x0080, 0x7baa, 0x7daa, 0x79aa, 0x2001, 0x0002, 0x0006,
-+ 0x6018, 0x8000, 0x601a, 0x0008, 0x0006, 0x2960, 0x6104, 0x2a60,
-+ 0x080c, 0x3ce1, 0x1590, 0xa184, 0x0018, 0x0180, 0xa184, 0x0010,
-+ 0x0118, 0x080c, 0x3977, 0x1548, 0xa184, 0x0008, 0x0138, 0x69a0,
-+ 0xa184, 0x0600, 0x1118, 0x080c, 0x3895, 0x00f8, 0x69a0, 0xa184,
-+ 0x1e00, 0x0528, 0xa184, 0x0800, 0x0178, 0x00c6, 0x2960, 0x6000,
-+ 0xa085, 0x2000, 0x6002, 0x6104, 0xa18d, 0x0010, 0x6106, 0x00ce,
-+ 0x080c, 0x3977, 0x1150, 0x69a0, 0xa184, 0x0200, 0x0118, 0x080c,
-+ 0x38da, 0x0018, 0xa184, 0x0400, 0x19f0, 0x69a0, 0xa184, 0x1000,
-+ 0x0130, 0x6914, 0xa18c, 0xff00, 0x810f, 0x080c, 0x239c, 0x002e,
-+ 0xa68c, 0x00e0, 0xa684, 0x0060, 0x0128, 0xa086, 0x0060, 0x1110,
-+ 0xa18d, 0x4000, 0xa18d, 0x0104, 0x69b6, 0x789b, 0x0060, 0x2800,
-+ 0x78aa, 0x6818, 0xc0fd, 0x681a, 0xd6bc, 0x0168, 0xc0fc, 0x7083,
-+ 0x0000, 0xa08a, 0x000d, 0x0328, 0xa08a, 0x000c, 0x7182, 0x2001,
-+ 0x000c, 0x800c, 0x7186, 0x78aa, 0x3518, 0x3340, 0x3428, 0x8000,
-+ 0x80ac, 0xaf80, 0x002b, 0x20a0, 0x789b, 0x0000, 0xad80, 0x000b,
-+ 0x2098, 0x53a6, 0x23a8, 0x2898, 0x25a0, 0xa286, 0x0020, 0x1508,
-+ 0x70d0, 0xc0b5, 0x70d2, 0x2c00, 0x70b6, 0x2d00, 0x70ba, 0x6814,
-+ 0xc0fc, 0x8007, 0x7882, 0xa286, 0x0002, 0x0904, 0x28f5, 0x70a0,
-+ 0x8000, 0x70a2, 0x74b0, 0xa498, 0x0005, 0x70a8, 0xa306, 0x1108,
-+ 0x73a4, 0x73b2, 0xa286, 0x0010, 0x0904, 0x259d, 0x00de, 0x00ce,
-+ 0x0005, 0x7000, 0xa005, 0x19e0, 0xa286, 0x0002, 0x1904, 0x290c,
-+ 0x080c, 0x3c33, 0x19a8, 0x6814, 0xc0fc, 0x8007, 0x7882, 0x2091,
-+ 0x8000, 0x781b, 0x0068, 0x68b4, 0x785a, 0x6894, 0x78d6, 0x78de,
-+ 0x6898, 0x78d2, 0x78da, 0x2091, 0x8001, 0x7808, 0xc08d, 0x780a,
-+ 0x0126, 0x00d6, 0x00c6, 0x70d0, 0xa084, 0x2e00, 0x2090, 0x00ce,
-+ 0x00de, 0x012e, 0x2900, 0x7056, 0x68bc, 0x703e, 0x7003, 0x0002,
-+ 0x2d00, 0x704a, 0xad80, 0x0009, 0x7042, 0x7830, 0xd0bc, 0x0140,
-+ 0x2091, 0x303d, 0x70d0, 0xa084, 0x303d, 0x2091, 0x8000, 0x2090,
-+ 0x70a0, 0xa005, 0x1108, 0x0005, 0x8421, 0x0de8, 0x724c, 0x70bc,
-+ 0xa200, 0xa015, 0x0804, 0x2725, 0xa286, 0x0010, 0x1560, 0x080c,
-+ 0x3c33, 0x1904, 0x28a0, 0x6814, 0xc0fc, 0x8007, 0x7882, 0x781b,
-+ 0x0068, 0x68b4, 0x785a, 0x6894, 0x78d6, 0x78de, 0x6898, 0x78d2,
-+ 0x78da, 0x7808, 0xc08d, 0x780a, 0x70a0, 0x8000, 0x70a2, 0x74b0,
-+ 0xa490, 0x0005, 0x70a8, 0xa206, 0x1108, 0x72a4, 0x72b2, 0x2900,
-+ 0x7056, 0x68bc, 0x703e, 0x7003, 0x0002, 0x2d00, 0x704a, 0xad80,
-+ 0x0009, 0x7042, 0x0005, 0x6bb4, 0xa39d, 0x2000, 0x7b5a, 0x6814,
-+ 0xc0fc, 0x8007, 0x7882, 0x6b94, 0x7bd6, 0x7bde, 0x6e98, 0x7ed2,
-+ 0x7eda, 0x781b, 0x0068, 0x2900, 0x7056, 0x7202, 0x7808, 0xc08d,
-+ 0x780a, 0x2300, 0xa605, 0x0170, 0x70d0, 0xa084, 0x2e00, 0xa086,
-+ 0x2600, 0x1118, 0x2009, 0x0000, 0x0010, 0x2009, 0x0001, 0xa284,
-+ 0x000f, 0x0023, 0xad80, 0x0009, 0x7042, 0x0005, 0x296e, 0x41d9,
-+ 0x41d9, 0x41c7, 0x41d9, 0x296e, 0x296e, 0x296e, 0x080c, 0x254c,
-+ 0x7808, 0xa084, 0xfffd, 0x780a, 0x00f6, 0x2079, 0x4600, 0x78ac,
-+ 0x00fe, 0xd084, 0x01b0, 0x7060, 0xa086, 0x0001, 0x0904, 0x2a32,
-+ 0x7060, 0xa086, 0x0005, 0x1158, 0x7078, 0x2068, 0x681b, 0x0004,
-+ 0x6817, 0x0000, 0x6820, 0xa084, 0x00ff, 0xc09d, 0x6822, 0x7063,
-+ 0x0000, 0x70a3, 0x0000, 0x70a4, 0x70ae, 0x70b2, 0x080c, 0x2682,
-+ 0x0156, 0x2011, 0x0004, 0x7160, 0xa186, 0x0001, 0x0160, 0xa186,
-+ 0x0007, 0x1118, 0x701f, 0x0005, 0x0030, 0x701f, 0x0001, 0x70d0,
-+ 0xc0c5, 0x70d2, 0x0000, 0x2001, 0x460a, 0x2004, 0xa084, 0x00ff,
-+ 0xa086, 0x0018, 0x0130, 0x7018, 0x7016, 0xa005, 0x1110, 0x70a3,
-+ 0x0001, 0x0066, 0x080c, 0x3f26, 0x20a9, 0x0010, 0x2039, 0x0000,
-+ 0x080c, 0x3a66, 0xa7b8, 0x0100, 0x1f04, 0x29c0, 0x006e, 0x7000,
-+ 0x0002, 0x29fd, 0x29db, 0x29db, 0x29d3, 0x29fd, 0x29fd, 0x29fd,
-+ 0x29d1, 0x080c, 0x254c, 0x705c, 0xa005, 0x0538, 0xad06, 0x1118,
-+ 0x6800, 0x705e, 0x0080, 0x6820, 0xd084, 0x1148, 0x6f14, 0x080c,
-+ 0x3b6f, 0x6008, 0xc0d4, 0x600a, 0x080c, 0x37a4, 0x0020, 0x7058,
-+ 0x2060, 0x6800, 0x6002, 0xa684, 0x5f00, 0x681e, 0x6818, 0xd0fc,
-+ 0x0108, 0x6a1a, 0x6817, 0x0000, 0x682b, 0x0000, 0x6820, 0xa084,
-+ 0x00ff, 0xc09d, 0x6822, 0x080c, 0x1da2, 0x2011, 0x0004, 0x74c8,
-+ 0xa4a0, 0x0100, 0x04b1, 0xaea0, 0x0017, 0x0499, 0x20a9, 0x0101,
-+ 0x74c8, 0x0479, 0x8420, 0x1f04, 0x2a09, 0x70c0, 0x2060, 0x2021,
-+ 0x0002, 0x20a9, 0x0100, 0x6110, 0x81ff, 0x0198, 0x6018, 0x0016,
-+ 0x0006, 0x2011, 0x4602, 0x220c, 0xa102, 0x2012, 0x000e, 0x001e,
-+ 0xa102, 0x0338, 0x6012, 0x1128, 0x2011, 0x4604, 0x2204, 0xc0a5,
-+ 0x2012, 0x601b, 0x0000, 0xace0, 0x0010, 0x1f04, 0x2a13, 0x8421,
-+ 0x1d00, 0x015e, 0x7063, 0x0000, 0x7003, 0x0000, 0x704b, 0x0000,
-+ 0x0005, 0x0046, 0x2404, 0xa005, 0x01a8, 0x2068, 0x6800, 0x0006,
-+ 0x6a1a, 0x6817, 0x0000, 0x682b, 0x0000, 0x68b4, 0xa084, 0x5f00,
-+ 0x681e, 0x6820, 0xa084, 0x00ff, 0xc09d, 0x6822, 0x080c, 0x1da2,
-+ 0x000e, 0x0c48, 0x004e, 0x2023, 0x0000, 0x0005, 0xa282, 0x0003,
-+ 0x0310, 0x080c, 0x254c, 0x2300, 0x0002, 0x2a60, 0x2add, 0x2af7,
-+ 0xa282, 0x0002, 0x0110, 0x080c, 0x254c, 0x7060, 0x7063, 0x0000,
-+ 0x707f, 0x0000, 0x0022, 0x77d0, 0xc7c5, 0x77d2, 0x0002, 0x2a77,
-+ 0x2a77, 0x2a79, 0x2ab1, 0x37d8, 0x2a77, 0x2ab1, 0x2a77, 0x080c,
-+ 0x254c, 0x7770, 0x080c, 0x3a66, 0x7770, 0xa7bc, 0x8f00, 0x080c,
-+ 0x3b6f, 0x6018, 0xa005, 0x0528, 0xd7fc, 0x1118, 0x2021, 0x8cc0,
-+ 0x0010, 0x2021, 0x8dd0, 0x2009, 0x0005, 0x2011, 0x0010, 0x080c,
-+ 0x2b11, 0x01b8, 0x0156, 0x20a9, 0x0101, 0xd7fc, 0x1118, 0x2021,
-+ 0x8bc0, 0x0010, 0x2021, 0x8cd0, 0x0046, 0x2009, 0x0005, 0x2011,
-+ 0x0010, 0x080c, 0x2b11, 0x004e, 0x0118, 0x8420, 0x1f04, 0x2a9c,
-+ 0x015e, 0x8738, 0xa784, 0x001f, 0x1990, 0x0804, 0x25a0, 0x0804,
-+ 0x25a0, 0x7770, 0x080c, 0x3b6f, 0x6018, 0xa005, 0x0520, 0xd7fc,
-+ 0x1118, 0x2021, 0x8cc0, 0x0010, 0x2021, 0x8dd0, 0x2009, 0x0005,
-+ 0x2011, 0x0020, 0x080c, 0x2b11, 0x01b0, 0x0156, 0x20a9, 0x0101,
-+ 0xd7fc, 0x1118, 0x2021, 0x8bc0, 0x0010, 0x2021, 0x8cd0, 0x0046,
-+ 0x2009, 0x0005, 0x2011, 0x0020, 0x04e1, 0x004e, 0x0118, 0x8420,
-+ 0x1f04, 0x2acf, 0x015e, 0x0804, 0x25a0, 0x2200, 0x0002, 0x2ae2,
-+ 0x2ae4, 0x2ae4, 0x080c, 0x254c, 0x2009, 0x0012, 0x7060, 0xa086,
-+ 0x0002, 0x0110, 0x2009, 0x000e, 0x6818, 0xd0fc, 0x0108, 0x691a,
-+ 0x7063, 0x0000, 0x70d0, 0xc0c5, 0x70d2, 0x0804, 0x3be5, 0x2200,
-+ 0x0002, 0x2afe, 0x2ae4, 0x2afc, 0x080c, 0x254c, 0x080c, 0x3f26,
-+ 0x7000, 0xa086, 0x0002, 0x1904, 0x375d, 0x080c, 0x37be, 0x6008,
-+ 0xa084, 0xfbef, 0x600a, 0x080c, 0x374f, 0x0904, 0x375d, 0x0804,
-+ 0x25a0, 0x2404, 0xa005, 0x0590, 0x2068, 0x2d04, 0x0006, 0x6814,
-+ 0xa706, 0x0118, 0x2d20, 0x000e, 0x0ca8, 0x000e, 0x2022, 0x691a,
-+ 0x6817, 0x0000, 0x682b, 0x0000, 0x68b4, 0xa084, 0x5f00, 0x681e,
-+ 0x6820, 0xa084, 0x00ff, 0xa205, 0x6822, 0x080c, 0x1da2, 0x2021,
-+ 0x4602, 0x241c, 0x8319, 0x2322, 0x6010, 0x8001, 0x6012, 0x1128,
-+ 0x2021, 0x4604, 0x2404, 0xc0a5, 0x2022, 0x6008, 0xa084, 0xf9ef,
-+ 0x600a, 0x080c, 0x269e, 0x080c, 0x37be, 0x0005, 0xa085, 0x0001,
-+ 0x0ce0, 0x2300, 0x0002, 0x2b50, 0x2b4e, 0x2bcb, 0x080c, 0x254c,
-+ 0x78e4, 0xa005, 0x17b0, 0x3208, 0xa18c, 0x0800, 0x0118, 0x0104,
-+ 0x259d, 0x0010, 0x0304, 0x259d, 0x2008, 0xa084, 0x0030, 0x1110,
-+ 0x0804, 0x322a, 0x78ec, 0xa084, 0x0003, 0x0dd0, 0x7884, 0xd0fc,
-+ 0x1118, 0xa184, 0x0007, 0x0090, 0xa184, 0x0007, 0xa086, 0x0004,
-+ 0x1118, 0x2001, 0x0000, 0x0050, 0xa184, 0x0007, 0xa086, 0x0005,
-+ 0x0118, 0xa184, 0x0007, 0x0010, 0x2001, 0x0001, 0x0002, 0x2bae,
-+ 0x2bb7, 0x2ba4, 0x2b87, 0x3c29, 0x3c29, 0x2b87, 0x2bc1, 0x080c,
-+ 0x254c, 0x7000, 0xa086, 0x0004, 0x1190, 0x7060, 0xa086, 0x0002,
-+ 0x1130, 0x2011, 0x0002, 0x2019, 0x0000, 0x0804, 0x2a56, 0x7060,
-+ 0xa086, 0x0006, 0x0db0, 0x7060, 0xa086, 0x0004, 0x0d90, 0x79e4,
-+ 0x2001, 0x0003, 0x0804, 0x2f18, 0x6818, 0xd0fc, 0x0110, 0x681b,
-+ 0x001d, 0x080c, 0x3a3c, 0x781b, 0x006e, 0x0005, 0x6818, 0xd0fc,
-+ 0x0110, 0x681b, 0x001d, 0x080c, 0x3a3c, 0x0804, 0x3c07, 0x6818,
-+ 0xd0fc, 0x0110, 0x681b, 0x001d, 0x080c, 0x3a3c, 0x781b, 0x00fa,
-+ 0x0005, 0x6818, 0xd0fc, 0x0110, 0x681b, 0x001d, 0x080c, 0x3a3c,
-+ 0x781b, 0x00cb, 0x0005, 0xa584, 0x000f, 0x11c0, 0x7000, 0x0002,
-+ 0x25a0, 0x2bd8, 0x2bda, 0x375d, 0x375d, 0x375d, 0x2bd8, 0x2bd8,
-+ 0x080c, 0x254c, 0x080c, 0x37be, 0x6008, 0xa084, 0xfbef, 0x600a,
-+ 0x080c, 0x374f, 0x0904, 0x375d, 0x0804, 0x25a0, 0x78e4, 0xa005,
-+ 0x1b04, 0x2b89, 0x3208, 0xa18c, 0x0800, 0x0118, 0x0104, 0x2b89,
-+ 0x0010, 0x0304, 0x2b89, 0x2008, 0xa084, 0x0030, 0x1118, 0x781b,
-+ 0x0068, 0x0005, 0x78ec, 0xa084, 0x0003, 0x0dc8, 0x7884, 0xd0fc,
-+ 0x1118, 0xa184, 0x0007, 0x0090, 0xa184, 0x0007, 0xa086, 0x0004,
-+ 0x1118, 0x2001, 0x0000, 0x0050, 0xa184, 0x0007, 0xa086, 0x0005,
-+ 0x0118, 0xa184, 0x0007, 0x0010, 0x2001, 0x0001, 0x0002, 0x2c26,
-+ 0x2c2a, 0x2c21, 0x2c1f, 0x3c29, 0x3c29, 0x2c1f, 0x3c23, 0x080c,
-+ 0x254c, 0x080c, 0x3a42, 0x781b, 0x006e, 0x0005, 0x080c, 0x3a42,
-+ 0x0804, 0x3c07, 0x080c, 0x3a42, 0x781b, 0x00fa, 0x0005, 0x080c,
-+ 0x3a42, 0x781b, 0x00cb, 0x0005, 0x2300, 0x0002, 0x2c3b, 0x2c39,
-+ 0x2c3d, 0x080c, 0x254c, 0x0804, 0x33e2, 0x681b, 0x0016, 0x78a3,
-+ 0x0000, 0x79e4, 0xa184, 0x0030, 0x0904, 0x33e2, 0x78ec, 0xa084,
-+ 0x0003, 0x0904, 0x33e2, 0xa184, 0x0100, 0x0d98, 0x7884, 0xd0fc,
-+ 0x1118, 0xa184, 0x0007, 0x0090, 0xa184, 0x0007, 0xa086, 0x0004,
-+ 0x1118, 0x2001, 0x0000, 0x0050, 0xa184, 0x0007, 0xa086, 0x0005,
-+ 0x0118, 0xa184, 0x0007, 0x0010, 0x2001, 0x0001, 0x0002, 0x2c6f,
-+ 0x2c2a, 0x2ba4, 0x3be5, 0x3c29, 0x3c29, 0x3be5, 0x3c23, 0x080c,
-+ 0x3bf1, 0x0005, 0xa282, 0x0005, 0x0310, 0x080c, 0x254c, 0x7898,
-+ 0x2040, 0x2300, 0x0002, 0x2c7e, 0x2ea8, 0x2eb2, 0x2200, 0x0002,
-+ 0x2c9a, 0x2c87, 0x2c9a, 0x2c85, 0x2e8a, 0x080c, 0x254c, 0x789b,
-+ 0x0018, 0x78a8, 0x2010, 0xa084, 0x00ff, 0xa082, 0x0020, 0x0a04,
-+ 0x3a0b, 0xa08a, 0x0004, 0x1a04, 0x3a0b, 0x0002, 0x3a0b, 0x3a0b,
-+ 0x3a0b, 0x39c1, 0x789b, 0x0018, 0x79a8, 0xa184, 0x0080, 0x0148,
-+ 0x0804, 0x3a0b, 0x7000, 0xa005, 0x1dd8, 0x2011, 0x0004, 0x0804,
-+ 0x3594, 0xa184, 0x00ff, 0xa08a, 0x0010, 0x1a04, 0x3a0b, 0x0002,
-+ 0x2cc2, 0x2cc0, 0x2cd4, 0x2cd8, 0x2d86, 0x3a0b, 0x3a0b, 0x2d88,
-+ 0x3a0b, 0x3a0b, 0x2e86, 0x2e86, 0x3a0b, 0x3a0b, 0x3a0b, 0x2e88,
-+ 0x080c, 0x254c, 0xd6e4, 0x0140, 0x2001, 0x0300, 0x8000, 0x8000,
-+ 0x783a, 0x781b, 0x00c7, 0x0005, 0x6818, 0xd0fc, 0x0118, 0x681b,
-+ 0x001d, 0x0c90, 0x0804, 0x3be5, 0x681b, 0x001d, 0x0804, 0x3a36,
-+ 0x6920, 0x6922, 0xa684, 0x1800, 0x1904, 0x2d29, 0x6820, 0xd084,
-+ 0x1904, 0x2d31, 0x6818, 0xa086, 0x0008, 0x1110, 0x681b, 0x0000,
-+ 0xd6d4, 0x0568, 0xd6bc, 0x0558, 0x7083, 0x0000, 0x6818, 0xa084,
-+ 0x003f, 0xa08a, 0x000d, 0x0718, 0xa08a, 0x000c, 0x7182, 0x2001,
-+ 0x000c, 0x800c, 0x7186, 0x789b, 0x0061, 0x78aa, 0x0156, 0x0136,
-+ 0x0146, 0x0016, 0x3208, 0xa18c, 0x0600, 0x0118, 0x20a1, 0x022b,
-+ 0x0010, 0x20a1, 0x012b, 0x001e, 0x789b, 0x0000, 0x8000, 0x80ac,
-+ 0xad80, 0x000b, 0x2098, 0x53a6, 0x014e, 0x013e, 0x015e, 0x6038,
-+ 0xa005, 0x1150, 0x681c, 0xa084, 0x000e, 0x0904, 0x3a36, 0x080c,
-+ 0x3a48, 0x782b, 0x3008, 0x0010, 0x8001, 0x603a, 0x781b, 0x0071,
-+ 0x0005, 0xd6e4, 0x0130, 0x781b, 0x0083, 0x0005, 0x781b, 0x0083,
-+ 0x0005, 0xa684, 0x0060, 0x0dd0, 0xd6dc, 0x0dc0, 0xd6fc, 0x01a0,
-+ 0xc6fc, 0x7e5a, 0x6eb6, 0x7adc, 0x79d8, 0x78d0, 0x8007, 0xa084,
-+ 0x007f, 0xa108, 0xa291, 0x0000, 0x6b98, 0x2100, 0xa302, 0x68b2,
-+ 0x6b94, 0x2200, 0xa303, 0x68ae, 0xd6f4, 0x0118, 0xc6f4, 0x7e5a,
-+ 0x6eb6, 0x7000, 0xa086, 0x0003, 0x1148, 0x0006, 0x080c, 0x3f26,
-+ 0x080c, 0x41d9, 0x000e, 0x781b, 0x0080, 0x0005, 0xa006, 0x080c,
-+ 0x42b5, 0x6ab0, 0x69ac, 0x6c98, 0x6b94, 0x2200, 0xa105, 0x0120,
-+ 0x2200, 0xa422, 0x2100, 0xa31b, 0x6caa, 0x7cd2, 0x7cda, 0x6ba6,
-+ 0x7bd6, 0x7bde, 0x2300, 0xa405, 0x1130, 0xc6f5, 0x7e5a, 0x6eb6,
-+ 0x781b, 0x0080, 0x0005, 0x781b, 0x0080, 0x2200, 0xa115, 0x1118,
-+ 0x080c, 0x41d9, 0x0005, 0x080c, 0x4206, 0x0005, 0x080c, 0x254c,
-+ 0x0804, 0x2e1c, 0x00c6, 0x7054, 0x2060, 0x6920, 0xa18c, 0xecff,
-+ 0x6922, 0x6000, 0xa084, 0xcfdf, 0x6002, 0x080c, 0x38f4, 0xa006,
-+ 0x2040, 0x2038, 0x080c, 0x399c, 0x0804, 0x2e10, 0x00c6, 0x7054,
-+ 0x2060, 0x2c48, 0x7aa8, 0xa294, 0x00ff, 0xa286, 0x0004, 0x11d8,
-+ 0x6920, 0xd1e4, 0x1170, 0x2039, 0x0000, 0x2041, 0x0000, 0x2031,
-+ 0x0000, 0xa006, 0x2010, 0x080c, 0x38f7, 0x080c, 0x399c, 0x0804,
-+ 0x2e10, 0xa18c, 0xecff, 0x6922, 0x6104, 0xa18c, 0xffdd, 0x6106,
-+ 0x6000, 0xc0ac, 0x6002, 0xa286, 0x0003, 0x01d0, 0x6104, 0xa184,
-+ 0x0010, 0x0548, 0x080c, 0x3b6b, 0x080c, 0x3977, 0x88ff, 0x0518,
-+ 0x00ce, 0x789b, 0x0060, 0x2800, 0x78aa, 0x7e58, 0xc695, 0x7e5a,
-+ 0xd6d4, 0x1118, 0x781b, 0x006e, 0x0005, 0x781b, 0x0082, 0x0005,
-+ 0x6920, 0xd1cc, 0x0130, 0xa18c, 0xfdff, 0x6922, 0x6000, 0xc0ec,
-+ 0x6002, 0x2039, 0x0000, 0x2041, 0x0000, 0x2031, 0x0000, 0xa006,
-+ 0x2010, 0x080c, 0x399c, 0xa286, 0x0001, 0x0158, 0x6104, 0xa184,
-+ 0x0008, 0x01b0, 0x080c, 0x3b6b, 0x080c, 0x3895, 0x88ff, 0x1980,
-+ 0x0078, 0x6920, 0xd1c4, 0x0130, 0xa18c, 0xfeff, 0x6922, 0x6000,
-+ 0xc0e4, 0x6002, 0x2031, 0x0000, 0xa006, 0x2010, 0x080c, 0x38f7,
-+ 0x00ce, 0x7e58, 0xd6d4, 0x1118, 0x781b, 0x0071, 0x0005, 0x781b,
-+ 0x0083, 0x0005, 0x0804, 0x3a32, 0x2808, 0x789b, 0x0080, 0x2019,
-+ 0x0080, 0x78a8, 0xa094, 0x00ff, 0xa286, 0x0001, 0x11b8, 0x2300,
-+ 0xa102, 0xa086, 0x0001, 0x0904, 0x2d8a, 0x7ca8, 0xa4a4, 0x00ff,
-+ 0xa480, 0x0002, 0xa300, 0x2018, 0xa102, 0x0a04, 0x2d9e, 0x0904,
-+ 0x2d9e, 0x24a8, 0x7aa8, 0x1f04, 0x2e3a, 0x0c18, 0xa284, 0x00f0,
-+ 0xa082, 0x0020, 0x06b8, 0x2200, 0xa082, 0x0021, 0x1698, 0x7aa8,
-+ 0x8318, 0x8318, 0x2100, 0xa302, 0x0aa0, 0xa286, 0x0023, 0x0950,
-+ 0x681c, 0xa084, 0xfff1, 0x681e, 0x7e58, 0xa684, 0xfff1, 0xc0a5,
-+ 0x2030, 0x7e5a, 0x6008, 0xc0a5, 0x600a, 0x78a0, 0x8001, 0x0904,
-+ 0x2e10, 0x20a8, 0x7998, 0x789b, 0x0060, 0x78aa, 0x2011, 0x0080,
-+ 0x799a, 0x78a8, 0x7998, 0x7a9a, 0x78aa, 0x7a98, 0x1f04, 0x2e68,
-+ 0xc695, 0x7e5a, 0xd6d4, 0x1118, 0x781b, 0x006e, 0x0005, 0x781b,
-+ 0x0082, 0x0005, 0x8318, 0x2100, 0xa302, 0x0a04, 0x2e21, 0xa284,
-+ 0x0080, 0x1904, 0x3a36, 0x78a0, 0xa005, 0x08c8, 0x0804, 0x3a36,
-+ 0x0804, 0x3a0b, 0x7054, 0xa04d, 0x789b, 0x0018, 0x78a8, 0xa084,
-+ 0x00ff, 0xa08e, 0x0001, 0x0110, 0x080c, 0x254c, 0x7aa8, 0xa294,
-+ 0x00ff, 0x784b, 0x0008, 0x78a8, 0xa084, 0x00ff, 0xa08a, 0x0005,
-+ 0x1a04, 0x3a0b, 0x0002, 0x3a0b, 0x380c, 0x3a0b, 0x3927, 0x3d31,
-+ 0xa282, 0x0000, 0x1110, 0x080c, 0x254c, 0x080c, 0x3a3c, 0x781b,
-+ 0x0082, 0x0005, 0xa282, 0x0003, 0x1110, 0x080c, 0x254c, 0xd4fc,
-+ 0x11d0, 0x7060, 0xa005, 0x0110, 0x080c, 0x254c, 0x6f14, 0x7772,
-+ 0xa7bc, 0x8f00, 0x080c, 0x3b6f, 0x6008, 0xa085, 0x0021, 0x600a,
-+ 0x8738, 0xa784, 0x001f, 0x1db0, 0x080c, 0x3a3f, 0x7063, 0x0002,
-+ 0x701f, 0x0009, 0x0010, 0x080c, 0x3a4b, 0x781b, 0x0082, 0x0005,
-+ 0xa282, 0x0004, 0x0310, 0x080c, 0x254c, 0x2300, 0x0002, 0x2ee2,
-+ 0x3078, 0x30b4, 0xa286, 0x0003, 0x0598, 0x7200, 0x7cd8, 0x7ddc,
-+ 0x7fd0, 0x71d0, 0xd1b4, 0x0528, 0xd1bc, 0x1518, 0x2001, 0x4601,
-+ 0x2004, 0xd0c4, 0x11f0, 0x7868, 0xa084, 0x00ff, 0x11d0, 0xa282,
-+ 0x0002, 0x12b8, 0x00d6, 0x783b, 0x8300, 0x781b, 0x0059, 0x70b8,
-+ 0xa06d, 0x68b4, 0x785a, 0x6894, 0x78d6, 0x78de, 0x6898, 0x78d2,
-+ 0x78da, 0xc1b4, 0x71d2, 0x7003, 0x0030, 0x00de, 0x2001, 0x0000,
-+ 0x0058, 0x783b, 0x1300, 0x781b, 0x0057, 0x2001, 0x0000, 0x0020,
-+ 0x7200, 0x7cd8, 0x7ddc, 0x7fd0, 0x7046, 0x68a0, 0xd0ec, 0x0118,
-+ 0x6008, 0xc08d, 0x600a, 0xa284, 0x000f, 0x0002, 0x3059, 0x2f33,
-+ 0x2f30, 0x3184, 0x320f, 0x25a0, 0x2f2e, 0x2f2e, 0x080c, 0x254c,
-+ 0x6008, 0xc0d4, 0x600a, 0xd6e4, 0x0120, 0x7044, 0xa086, 0x0014,
-+ 0x11e8, 0x080c, 0x3f26, 0x2009, 0x0000, 0x6818, 0xd0fc, 0x0108,
-+ 0x7044, 0xa086, 0x0014, 0x0168, 0x6818, 0xa086, 0x0008, 0x1904,
-+ 0x301b, 0x7858, 0xd09c, 0x0904, 0x301b, 0x6820, 0xd0ac, 0x0904,
-+ 0x301b, 0x681b, 0x0014, 0x2009, 0x0002, 0x04a8, 0x7868, 0xa08c,
-+ 0x00ff, 0x0588, 0xa186, 0x0008, 0x1158, 0x6008, 0xc0a4, 0x600a,
-+ 0x080c, 0x374f, 0x0540, 0x080c, 0x37be, 0x080c, 0x3f26, 0x0060,
-+ 0xa186, 0x0028, 0x1500, 0x6018, 0xa005, 0x0d78, 0x8001, 0x0d68,
-+ 0x8001, 0x0d58, 0x601e, 0x0c48, 0x6820, 0xd084, 0x0904, 0x25a0,
-+ 0xc084, 0x6822, 0x080c, 0x2693, 0x7058, 0x00c6, 0x2060, 0x6800,
-+ 0x6002, 0x00ce, 0x6004, 0x6802, 0xa005, 0x2d00, 0x1108, 0x6002,
-+ 0x6006, 0x0804, 0x25a0, 0x0016, 0x81ff, 0x15f0, 0x7000, 0xa086,
-+ 0x0030, 0x05d0, 0x71d0, 0xd1bc, 0x15b8, 0xd1b4, 0x11e8, 0x705c,
-+ 0xa005, 0x1590, 0x70a0, 0xa086, 0x0001, 0x0570, 0x7003, 0x0000,
-+ 0x0046, 0x0056, 0x0076, 0x0066, 0x00c6, 0x00d6, 0x080c, 0x25c5,
-+ 0x00de, 0x00ce, 0x006e, 0x007e, 0x005e, 0x004e, 0x71d0, 0xd1b4,
-+ 0x11d8, 0x7003, 0x0040, 0x00c0, 0x080c, 0x3c33, 0x11a8, 0x781b,
-+ 0x0068, 0x00d6, 0x70b8, 0xa06d, 0x68b4, 0x785a, 0x6894, 0x78d6,
-+ 0x78de, 0x6898, 0x78d2, 0x78da, 0xc1b4, 0x71d2, 0x7003, 0x0030,
-+ 0x7808, 0xc08d, 0x780a, 0x00de, 0x080c, 0x30dc, 0x001e, 0x81ff,
-+ 0x0904, 0x301b, 0xa684, 0xdf00, 0x681e, 0x682b, 0x0000, 0x6f14,
-+ 0xa186, 0x0002, 0x1904, 0x301c, 0x6818, 0xa086, 0x0014, 0x1130,
-+ 0x2008, 0xd6e4, 0x0118, 0x7868, 0xa08c, 0x00ff, 0x080c, 0x3a55,
-+ 0x080c, 0x269e, 0x6820, 0xd0dc, 0x1578, 0x8717, 0xa294, 0x000f,
-+ 0x8213, 0x8213, 0x8213, 0xb284, 0x0600, 0x0118, 0xa290, 0x4ac0,
-+ 0x0010, 0xa290, 0x4b40, 0xa290, 0x0000, 0x221c, 0xd3c4, 0x0170,
-+ 0x6820, 0xd0e4, 0x0128, 0xa084, 0xefff, 0x6822, 0xc3ac, 0x2312,
-+ 0x8210, 0x2204, 0xa085, 0x0038, 0x2012, 0x8211, 0xd3d4, 0x0138,
-+ 0x68a0, 0xd0c4, 0x1120, 0x080c, 0x3144, 0x0804, 0x25a0, 0x6008,
-+ 0xc08d, 0x600a, 0x0008, 0x692a, 0x6916, 0x6818, 0xd0fc, 0x0110,
-+ 0x7044, 0x681a, 0xa68c, 0xdf00, 0x691e, 0x6410, 0x84ff, 0x0168,
-+ 0x2009, 0x4602, 0x2104, 0x8001, 0x200a, 0x8421, 0x6412, 0x1128,
-+ 0x2021, 0x4604, 0x2404, 0xc0a5, 0x2022, 0x6018, 0xa005, 0x0118,
-+ 0x8001, 0x601a, 0x1118, 0x6008, 0xc0a4, 0x600a, 0x6820, 0xd084,
-+ 0x1130, 0x6800, 0xa005, 0x1108, 0x6002, 0x6006, 0x0020, 0x7058,
-+ 0x2060, 0x6800, 0x6002, 0x2061, 0x4600, 0x6887, 0x0103, 0x2d08,
-+ 0x206b, 0x0000, 0x6068, 0xa005, 0x616a, 0x0110, 0x2d02, 0x0008,
-+ 0x616e, 0x7200, 0xa286, 0x0030, 0x0158, 0xa286, 0x0040, 0x1904,
-+ 0x25a0, 0x7003, 0x0002, 0x7048, 0x2068, 0x68c4, 0x2060, 0x0005,
-+ 0x7003, 0x0002, 0x70b8, 0xa06d, 0x68bc, 0x703e, 0x70b4, 0xa065,
-+ 0x68c0, 0x7056, 0x2d00, 0x704a, 0xad80, 0x0009, 0x7042, 0x0005,
-+ 0xa282, 0x0004, 0x0210, 0x080c, 0x254c, 0x2200, 0x0002, 0x3083,
-+ 0x3092, 0x309e, 0x3092, 0xa586, 0x1300, 0x0160, 0xa586, 0x8300,
-+ 0x1d90, 0x7003, 0x0000, 0x6018, 0x8001, 0x601a, 0x6008, 0xa084,
-+ 0xfbef, 0x600a, 0x7000, 0xa086, 0x0005, 0x0128, 0x080c, 0x3a3c,
-+ 0x781b, 0x0082, 0x0005, 0x781b, 0x0083, 0x0005, 0x7890, 0x8007,
-+ 0x8001, 0xa084, 0x0007, 0xa080, 0x0018, 0x789a, 0x79a8, 0xa18c,
-+ 0x00ff, 0xa186, 0x0003, 0x0128, 0xa186, 0x0000, 0x0110, 0x0804,
-+ 0x3a0b, 0x781b, 0x0083, 0x0005, 0x6820, 0xc095, 0x6822, 0x82ff,
-+ 0x1118, 0x080c, 0x3a3c, 0x0030, 0x8211, 0x0110, 0x080c, 0x254c,
-+ 0x080c, 0x3a4b, 0x781b, 0x0082, 0x0005, 0x080c, 0x3c46, 0x7830,
-+ 0xa084, 0x00c0, 0x1170, 0x0016, 0x3208, 0xa18c, 0x0800, 0x001e,
-+ 0x0118, 0x0104, 0x30d9, 0x0010, 0x0304, 0x30d9, 0x791a, 0xa006,
-+ 0x0005, 0xa085, 0x0001, 0x0005, 0xa684, 0x0060, 0x1130, 0x682f,
-+ 0x0000, 0x6833, 0x0000, 0x0804, 0x3143, 0xd6dc, 0x1198, 0x68b4,
-+ 0xd0dc, 0x1180, 0x6998, 0x6a94, 0x692e, 0x6a32, 0x7044, 0xa005,
-+ 0x1130, 0x2200, 0xa105, 0x0904, 0x3f26, 0x7047, 0x0015, 0x0804,
-+ 0x3f26, 0x0005, 0xd6ac, 0x01f0, 0xd6f4, 0x0130, 0x682f, 0x0000,
-+ 0x6833, 0x0000, 0x0804, 0x3f26, 0x68b4, 0xa084, 0x4000, 0xa635,
-+ 0xd6f4, 0x1da0, 0x7044, 0xa005, 0x1110, 0x7047, 0x0015, 0xd6dc,
-+ 0x1128, 0x68b4, 0xd0dc, 0x0110, 0x6ca8, 0x6da4, 0x6c2e, 0x6d32,
-+ 0x0804, 0x3f26, 0xd6f4, 0x0130, 0x682f, 0x0000, 0x6833, 0x0000,
-+ 0x0804, 0x3f26, 0x68b4, 0xa084, 0x4800, 0xa635, 0xd6f4, 0x1da0,
-+ 0x7044, 0xa005, 0x1110, 0x7047, 0x0015, 0x2408, 0x2510, 0x2700,
-+ 0x8007, 0xa084, 0x007f, 0xa108, 0xa291, 0x0000, 0x692e, 0x6a32,
-+ 0x2100, 0xa205, 0x1110, 0x0804, 0x3f26, 0x7000, 0xa086, 0x0006,
-+ 0x0110, 0x0804, 0x3f26, 0x0005, 0x6946, 0x6008, 0xc0cd, 0xd3cc,
-+ 0x0108, 0xc08d, 0x600a, 0x6818, 0x683a, 0x681b, 0x0006, 0x688f,
-+ 0x0000, 0x6893, 0x0000, 0x6a30, 0x692c, 0x6a3e, 0x6942, 0x682f,
-+ 0x0003, 0x6833, 0x0000, 0x6837, 0x0020, 0x6897, 0x0000, 0x689b,
-+ 0x0020, 0x7000, 0x0002, 0x25a0, 0x3173, 0x316d, 0x316b, 0x316b,
-+ 0x316b, 0x316b, 0x316b, 0x080c, 0x254c, 0x6820, 0xd084, 0x1118,
-+ 0x080c, 0x37a4, 0x0030, 0x7058, 0x2c50, 0x2060, 0x6800, 0x6002,
-+ 0x2a60, 0xaea0, 0x0017, 0x2404, 0xa005, 0x0110, 0x2020, 0x0cd8,
-+ 0x2d22, 0x206b, 0x0000, 0x0005, 0x080c, 0x37aa, 0x080c, 0x37be,
-+ 0x6008, 0xc0cc, 0x600a, 0x682b, 0x0000, 0x789b, 0x000e, 0x6f14,
-+ 0x6938, 0x691a, 0x6944, 0x6916, 0x2009, 0x0000, 0xae86, 0x4640,
-+ 0x0110, 0x2009, 0x0001, 0x080c, 0x42ec, 0xd6dc, 0x01c8, 0x691c,
-+ 0xc1ed, 0x691e, 0x6828, 0xa082, 0x000e, 0x0290, 0x6848, 0xa084,
-+ 0x000f, 0xa086, 0x000b, 0x1160, 0x685c, 0xa086, 0x0047, 0x1140,
-+ 0x2001, 0x4601, 0x2004, 0xd0ac, 0x1118, 0x2700, 0x080c, 0x2475,
-+ 0x6818, 0xd0fc, 0x0140, 0x681b, 0x0000, 0x7868, 0xa08c, 0x00ff,
-+ 0x0110, 0x681b, 0x001e, 0xaea0, 0x0017, 0x6800, 0x2022, 0x6a3c,
-+ 0x6940, 0x6a32, 0x692e, 0x68c0, 0x2060, 0x6000, 0xd0a4, 0x0580,
-+ 0x2041, 0x0021, 0x2049, 0x0005, 0x2051, 0x0020, 0x00d6, 0x00f6,
-+ 0x0156, 0x0146, 0x2079, 0x4600, 0x080c, 0x1b93, 0x014e, 0x015e,
-+ 0x00fe, 0x70c8, 0x2010, 0x2009, 0x0101, 0x0026, 0x2204, 0xa06d,
-+ 0x0140, 0x6814, 0xa706, 0x0110, 0x6800, 0x0cc8, 0x6820, 0xc0d5,
-+ 0x6822, 0x002e, 0x8210, 0x8109, 0x1d80, 0x00de, 0x7063, 0x0003,
-+ 0x707b, 0x0000, 0x7772, 0x707f, 0x000f, 0x71d0, 0xc1c4, 0x71d2,
-+ 0x6818, 0xa086, 0x0002, 0x1138, 0x6817, 0x0000, 0x682b, 0x0000,
-+ 0x681c, 0xc0ec, 0x681e, 0x080c, 0x1da2, 0x0804, 0x25a0, 0x7cd8,
-+ 0x7ddc, 0x7fd0, 0x080c, 0x30dc, 0x682b, 0x0000, 0x789b, 0x000e,
-+ 0x6f14, 0x080c, 0x3c4a, 0xa08c, 0x00ff, 0x6916, 0x6818, 0xd0fc,
-+ 0x0110, 0x7044, 0x681a, 0xa68c, 0xdf00, 0x691e, 0x7063, 0x0000,
-+ 0x0804, 0x25a0, 0x7000, 0xa005, 0x1110, 0x0804, 0x25a0, 0xa006,
-+ 0x080c, 0x3f26, 0x6920, 0xd1ac, 0x1110, 0x681b, 0x0014, 0xa68c,
-+ 0xdf00, 0x691e, 0x682b, 0x0000, 0x6820, 0xa084, 0x00ff, 0x6822,
-+ 0x7000, 0x0002, 0x25a0, 0x324c, 0x324c, 0x324f, 0x324f, 0x324f,
-+ 0x324a, 0x324a, 0x080c, 0x254c, 0x6818, 0x0804, 0x2f18, 0x6008,
-+ 0xc0a4, 0x600a, 0x6817, 0x0000, 0x0804, 0x3772, 0x2300, 0x0002,
-+ 0x325b, 0x325d, 0x32ab, 0x080c, 0x254c, 0xd6fc, 0x1904, 0x2d38,
-+ 0x7000, 0xa00d, 0x0002, 0x25a0, 0x326d, 0x326d, 0x3297, 0x326d,
-+ 0x32a8, 0x326b, 0x326b, 0x080c, 0x254c, 0xa684, 0x0060, 0x0538,
-+ 0xa086, 0x0060, 0x1510, 0xc6ac, 0xc6f4, 0xc6ed, 0x7e5a, 0x6eb6,
-+ 0x681c, 0xc0ac, 0x681e, 0xa186, 0x0002, 0x0148, 0x080c, 0x3f26,
-+ 0x69ac, 0x68b0, 0xa115, 0x0118, 0x080c, 0x4206, 0x0010, 0x080c,
-+ 0x41d9, 0x781b, 0x0083, 0x71d0, 0xd1b4, 0x1904, 0x259d, 0x70a0,
-+ 0xa086, 0x0001, 0x1904, 0x25e1, 0x0005, 0xd6ec, 0x09f0, 0x6818,
-+ 0xd0fc, 0x0170, 0xd6f4, 0x1130, 0x681b, 0x0015, 0x781b, 0x0083,
-+ 0x0804, 0x259d, 0x681b, 0x0007, 0x682f, 0x0000, 0x6833, 0x0000,
-+ 0x080c, 0x3bf1, 0x0005, 0x080c, 0x254c, 0x2300, 0x0002, 0x32b4,
-+ 0x32d6, 0x332e, 0x080c, 0x254c, 0x7000, 0x0002, 0x32be, 0x32c0,
-+ 0x32c7, 0x32be, 0x32be, 0x32be, 0x32be, 0x32be, 0x080c, 0x254c,
-+ 0x69ac, 0x68b0, 0xa115, 0x0118, 0x080c, 0x4206, 0x0010, 0x080c,
-+ 0x41d9, 0x681c, 0xc0b4, 0x681e, 0x70d0, 0xd0b4, 0x1904, 0x259d,
-+ 0x70a0, 0xa086, 0x0001, 0x1904, 0x25e1, 0x0005, 0xd6fc, 0x1904,
-+ 0x331e, 0x7000, 0xa00d, 0x0002, 0x25a0, 0x32ec, 0x32e6, 0x3316,
-+ 0x32ec, 0x331b, 0x32e4, 0x32e4, 0x080c, 0x254c, 0x6894, 0x78d6,
-+ 0x78de, 0x6898, 0x78d2, 0x78da, 0xa684, 0x0060, 0x0538, 0xa086,
-+ 0x0060, 0x1510, 0xa6b4, 0xbfbf, 0xc6ed, 0x7e5a, 0x6eb6, 0xa186,
-+ 0x0002, 0x0148, 0x080c, 0x3f26, 0x69ac, 0x68b0, 0xa115, 0x0118,
-+ 0x080c, 0x4206, 0x0010, 0x080c, 0x41d9, 0x781b, 0x0083, 0x681c,
-+ 0xc0b4, 0x681e, 0x71d0, 0xd1b4, 0x1904, 0x259d, 0x70a0, 0xa086,
-+ 0x0001, 0x1904, 0x25e1, 0x0005, 0xd6ec, 0x09f0, 0x6818, 0xd0fc,
-+ 0x0110, 0x681b, 0x0007, 0x781b, 0x00fb, 0x0005, 0xc6fc, 0x7e5a,
-+ 0x7adc, 0x79d8, 0x6b98, 0x2100, 0xa302, 0x68b2, 0x6b94, 0x2200,
-+ 0xa303, 0x68ae, 0x79d2, 0x781b, 0x0083, 0x0005, 0xd6dc, 0x0130,
-+ 0x782b, 0x3009, 0x781b, 0x0083, 0x0804, 0x259d, 0x7884, 0xc0ac,
-+ 0x7886, 0x78e4, 0xa084, 0x0008, 0x1150, 0xa484, 0x0200, 0x0108,
-+ 0xc6f5, 0xc6dd, 0x7e5a, 0x781b, 0x0083, 0x0804, 0x259d, 0x6820,
-+ 0xc095, 0x6822, 0x080c, 0x3bdc, 0xc6dd, 0x080c, 0x3a3c, 0x781b,
-+ 0x0082, 0x0804, 0x259d, 0x2300, 0x0002, 0x3358, 0x335a, 0x335c,
-+ 0x080c, 0x254c, 0x0804, 0x3a36, 0x7d98, 0xd6d4, 0x15a8, 0x79e4,
-+ 0xd1ac, 0x0130, 0x78ec, 0xa084, 0x0003, 0x0110, 0x782b, 0x3009,
-+ 0x789b, 0x0060, 0x78ab, 0x0000, 0xa684, 0xfffb, 0x785a, 0x7d9a,
-+ 0x79e4, 0xd1ac, 0x0120, 0x78ec, 0xa084, 0x0003, 0x1120, 0x2001,
-+ 0x0014, 0x0804, 0x2f18, 0x7884, 0xd0fc, 0x1118, 0xa184, 0x0007,
-+ 0x0090, 0xa184, 0x0007, 0xa086, 0x0004, 0x1118, 0x2001, 0x0000,
-+ 0x0050, 0xa184, 0x0007, 0xa086, 0x0005, 0x0118, 0xa184, 0x0007,
-+ 0x0010, 0x2001, 0x0001, 0x04c2, 0x7a90, 0xa294, 0x0007, 0x789b,
-+ 0x0060, 0x79a8, 0x81ff, 0x0568, 0x789b, 0x0080, 0x7ba8, 0xa384,
-+ 0x0001, 0x11d0, 0x7ba8, 0x7ba8, 0xa386, 0x0004, 0x1118, 0x2009,
-+ 0xffdf, 0x0058, 0xa386, 0x0001, 0x1118, 0x2009, 0xfff7, 0x0028,
-+ 0xa386, 0x0003, 0x1148, 0x2009, 0xffef, 0x00c6, 0x7054, 0x2060,
-+ 0x6004, 0xa104, 0x6006, 0x00ce, 0x789b, 0x0060, 0x78ab, 0x0000,
-+ 0xa684, 0xfffb, 0x785a, 0x782b, 0x3009, 0x6920, 0xa18c, 0xecff,
-+ 0x6922, 0x7d9a, 0x0804, 0x3be5, 0x2bae, 0x2bb7, 0x33d6, 0x33dc,
-+ 0x33d4, 0x33d4, 0x3be5, 0x3be5, 0x080c, 0x254c, 0x6920, 0xa18c,
-+ 0xfcff, 0x6922, 0x0804, 0x3beb, 0x6920, 0xa18c, 0xfcff, 0x6922,
-+ 0x0804, 0x3be5, 0x79e4, 0xa184, 0x0030, 0x0120, 0x78ec, 0xa084,
-+ 0x0003, 0x1570, 0x7000, 0xa086, 0x0004, 0x1190, 0x7060, 0xa086,
-+ 0x0002, 0x1130, 0x2011, 0x0002, 0x2019, 0x0000, 0x0804, 0x2a56,
-+ 0x7060, 0xa086, 0x0006, 0x0db0, 0x7060, 0xa086, 0x0004, 0x0d90,
-+ 0x7000, 0xa086, 0x0000, 0x0904, 0x259d, 0x6920, 0xa184, 0x0420,
-+ 0x0128, 0xc1d4, 0x6922, 0x6818, 0x0804, 0x2f18, 0x6818, 0xa08e,
-+ 0x0002, 0x0120, 0xc0fd, 0x681a, 0x2001, 0x0014, 0x0804, 0x2f18,
-+ 0x7884, 0xd0fc, 0x1118, 0xa184, 0x0007, 0x0090, 0xa184, 0x0007,
-+ 0xa086, 0x0004, 0x1118, 0x2001, 0x0000, 0x0050, 0xa184, 0x0007,
-+ 0xa086, 0x0005, 0x0118, 0xa184, 0x0007, 0x0010, 0x2001, 0x0001,
-+ 0x0002, 0x3be5, 0x3be5, 0x3439, 0x3be5, 0x3c29, 0x3c29, 0x3be5,
-+ 0x3be5, 0xd6bc, 0x0570, 0x7180, 0x81ff, 0x0558, 0xa182, 0x000d,
-+ 0x1318, 0x7083, 0x0000, 0x0028, 0xa182, 0x000c, 0x7082, 0x2009,
-+ 0x000c, 0x789b, 0x0061, 0x79aa, 0x0156, 0x0136, 0x0146, 0x7084,
-+ 0x8114, 0xa210, 0x7286, 0xa080, 0x000b, 0xad00, 0x2098, 0xb284,
-+ 0x0600, 0x0118, 0x20a1, 0x022b, 0x0010, 0x20a1, 0x012b, 0x789b,
-+ 0x0000, 0x8108, 0x81ac, 0x53a6, 0x014e, 0x013e, 0x015e, 0x0804,
-+ 0x3beb, 0xd6d4, 0x1904, 0x34ac, 0x6820, 0xd084, 0x0904, 0x3beb,
-+ 0xa68c, 0x0060, 0xa684, 0x0060, 0x0120, 0xa086, 0x0060, 0x1108,
-+ 0xc1f5, 0xc194, 0x795a, 0x69b6, 0x789b, 0x0060, 0x78ab, 0x0000,
-+ 0x789b, 0x0061, 0x6818, 0xc0fd, 0x681a, 0x78aa, 0x8008, 0x810c,
-+ 0x0904, 0x37d3, 0xa18c, 0x00f8, 0x1904, 0x37d3, 0x0156, 0x0136,
-+ 0x0146, 0x0016, 0x20a1, 0x012b, 0x3208, 0xa18c, 0x0600, 0x0110,
-+ 0x20a1, 0x022b, 0x001e, 0x789b, 0x0000, 0x8000, 0x80ac, 0xad80,
-+ 0x000b, 0x2098, 0x53a6, 0x014e, 0x013e, 0x015e, 0x6814, 0xc0fc,
-+ 0x8007, 0x7882, 0x0804, 0x3beb, 0x6818, 0xd0fc, 0x0110, 0x681b,
-+ 0x0008, 0x080c, 0x3a3c, 0x781b, 0x00ed, 0x0005, 0x2300, 0x0002,
-+ 0x34bd, 0x357a, 0x34bb, 0x080c, 0x254c, 0x7cd8, 0x7ddc, 0x7fd0,
-+ 0x82ff, 0x1528, 0x7200, 0xa286, 0x0003, 0x0904, 0x2ee6, 0x71d0,
-+ 0xd1bc, 0x11f8, 0xd1b4, 0x01e8, 0x2001, 0x4601, 0x2004, 0xd0c4,
-+ 0x11c0, 0x00d6, 0x783b, 0x8800, 0x781b, 0x0059, 0x70b8, 0xa06d,
-+ 0x68b4, 0xc0a5, 0x785a, 0x6894, 0x78d6, 0x78de, 0x6898, 0x78d2,
-+ 0x78da, 0xc1b4, 0x71d2, 0x7003, 0x0030, 0x00de, 0x0030, 0x7200,
-+ 0x0020, 0x783b, 0x1800, 0x781b, 0x0057, 0xa284, 0x000f, 0x0002,
-+ 0x3565, 0x3522, 0x34fa, 0x2f15, 0x34f8, 0x3565, 0x34f8, 0x34f8,
-+ 0x080c, 0x254c, 0x681c, 0xd0ec, 0x0118, 0x6008, 0xc08d, 0x600a,
-+ 0x6920, 0xc185, 0x6922, 0x6800, 0x6006, 0xa005, 0x1108, 0x6002,
-+ 0x6008, 0xc0d4, 0x600a, 0x681c, 0xa084, 0x000e, 0x1120, 0x71c8,
-+ 0xa188, 0x0100, 0x0028, 0x7030, 0x68ba, 0x713c, 0x70c8, 0xa108,
-+ 0x2104, 0x6802, 0x2d0a, 0x715a, 0xd6dc, 0x1120, 0xc6fc, 0x6eb6,
-+ 0x0804, 0x3565, 0x6eb6, 0xa684, 0x0060, 0x1120, 0xa684, 0x7fff,
-+ 0x68b6, 0x04d8, 0xd6dc, 0x1150, 0xa684, 0x7fff, 0x68b6, 0x6894,
-+ 0x68a6, 0x6898, 0x68aa, 0x080c, 0x3f26, 0x0478, 0xd6ac, 0x0140,
-+ 0xa006, 0x080c, 0x3f26, 0x2408, 0x2510, 0x69aa, 0x6aa6, 0x0068,
-+ 0x2408, 0x2510, 0x2700, 0x8007, 0xa084, 0x007f, 0xa108, 0xa291,
-+ 0x0000, 0x69aa, 0x6aa6, 0x080c, 0x3f26, 0xd6fc, 0x01b0, 0xa684,
-+ 0x7fff, 0x68b6, 0x2510, 0x2408, 0xd6ac, 0x1138, 0x2700, 0x8007,
-+ 0xa084, 0x007f, 0xa108, 0xa291, 0x0000, 0x6b98, 0x2100, 0xa302,
-+ 0x68b2, 0x6b94, 0x2200, 0xa303, 0x68ae, 0x7000, 0xa086, 0x0030,
-+ 0x1904, 0x25a0, 0x7003, 0x0002, 0x70b8, 0xa06d, 0x68bc, 0x703e,
-+ 0x70b4, 0xa065, 0x68c0, 0x7056, 0x2d00, 0x704a, 0xad80, 0x0009,
-+ 0x7042, 0x0005, 0xa586, 0x8800, 0x1148, 0x7003, 0x0000, 0x6018,
-+ 0x8001, 0x601a, 0x6008, 0xa084, 0xfbef, 0x600a, 0x0804, 0x3a36,
-+ 0x7043, 0x0000, 0xa282, 0x0006, 0x0310, 0x080c, 0x254c, 0x2300,
-+ 0x0002, 0x3594, 0x35a5, 0x35af, 0x2200, 0x0002, 0x359c, 0x3a36,
-+ 0x359e, 0x359c, 0x35e0, 0x362e, 0x080c, 0x254c, 0x7a80, 0xa294,
-+ 0x0f00, 0x080c, 0x3682, 0x0804, 0x3a0b, 0x00c1, 0x0002, 0x3a36,
-+ 0x35ad, 0x35ad, 0x35e0, 0x35ad, 0x3a36, 0x080c, 0x254c, 0x0071,
-+ 0x0002, 0x35b9, 0x35b7, 0x35b7, 0x35b9, 0x35b7, 0x35b9, 0x080c,
-+ 0x254c, 0x080c, 0x3a4b, 0x781b, 0x0082, 0x0005, 0x7000, 0xa086,
-+ 0x0002, 0x1150, 0x080c, 0x37be, 0x0010, 0x080c, 0x3f26, 0x6008,
-+ 0xa084, 0xfbef, 0x600a, 0x0020, 0x7000, 0xa086, 0x0003, 0x0da8,
-+ 0x7003, 0x0005, 0x2001, 0x8de0, 0xae8e, 0x4640, 0x0110, 0x2001,
-+ 0x8e12, 0x2068, 0x704a, 0xad80, 0x0009, 0x7042, 0x2200, 0x0005,
-+ 0x7000, 0xa086, 0x0002, 0x1158, 0x70d0, 0xc0b5, 0x70d2, 0x2c00,
-+ 0x70b6, 0x2d00, 0x70ba, 0x0038, 0x080c, 0x3f26, 0x0020, 0x7000,
-+ 0xa086, 0x0003, 0x0dc8, 0x7003, 0x0001, 0x7a80, 0xa294, 0x0f00,
-+ 0x789b, 0x0018, 0x7ca8, 0xa484, 0x001f, 0xa215, 0x2069, 0x8cc0,
-+ 0xb284, 0x0600, 0x1118, 0xc2fd, 0x2069, 0x8dd0, 0x2d04, 0x2d08,
-+ 0x715a, 0xa06d, 0x0128, 0x6814, 0xa206, 0x0120, 0x6800, 0x0cb8,
-+ 0x080c, 0x3682, 0x6eb4, 0x7e5a, 0x6920, 0xa184, 0x0c00, 0x0904,
-+ 0x36a8, 0x7060, 0xa086, 0x0006, 0x1128, 0x7070, 0xa206, 0x1110,
-+ 0x7062, 0x707a, 0x681b, 0x0005, 0xc1ad, 0x681b, 0x0005, 0xc1ad,
-+ 0xc1d4, 0x6922, 0x080c, 0x3a42, 0x0804, 0x36a8, 0x7200, 0xa286,
-+ 0x0002, 0x1158, 0x70d0, 0xc0b5, 0x70d2, 0x2c00, 0x70b6, 0x2d00,
-+ 0x70ba, 0x0030, 0x080c, 0x3f26, 0x0018, 0xa286, 0x0003, 0x0dd0,
-+ 0x7003, 0x0001, 0x7a80, 0xa294, 0x0f00, 0x789b, 0x0018, 0x7ca8,
-+ 0xa484, 0x001f, 0xa215, 0xae86, 0x4640, 0x0108, 0xc2fd, 0x79a8,
-+ 0x79a8, 0xa18c, 0x00ff, 0x2118, 0x70c8, 0xa168, 0x2d04, 0x2d08,
-+ 0x715a, 0xa06d, 0x0128, 0x6814, 0xa206, 0x0118, 0x6800, 0x0cb8,
-+ 0x0409, 0x6eb4, 0x6920, 0xa184, 0x0c00, 0x0904, 0x36a8, 0xd0dc,
-+ 0x0178, 0x7060, 0xa086, 0x0004, 0x1140, 0x7070, 0xa206, 0x1128,
-+ 0x7074, 0xa306, 0x1110, 0x7062, 0x707a, 0x080c, 0x3a48, 0x0480,
-+ 0x681b, 0x0005, 0xc1ad, 0xc1d4, 0x6922, 0x080c, 0x3a42, 0x707b,
-+ 0x0000, 0x0430, 0x7003, 0x0005, 0xb284, 0x0600, 0x0118, 0x2001,
-+ 0x8de0, 0x0010, 0x2001, 0x8e12, 0x2068, 0x704a, 0x0156, 0x20a9,
-+ 0x0032, 0x2003, 0x0000, 0x8000, 0x1f04, 0x3691, 0x015e, 0xb284,
-+ 0x0600, 0x0110, 0xc2fc, 0x0008, 0xc2fd, 0x6a16, 0xad80, 0x0009,
-+ 0x7042, 0x68b7, 0x0700, 0x6823, 0x0800, 0x6827, 0x0003, 0x0005,
-+ 0xc6ec, 0xa6ac, 0x0060, 0x0904, 0x36ef, 0x6b98, 0x6c94, 0x69ac,
-+ 0x68b0, 0xa105, 0x11e0, 0x7bd2, 0x7bda, 0x7cd6, 0x7cde, 0xa586,
-+ 0x0060, 0x05c8, 0xd6f4, 0x1108, 0xc6ed, 0xa6b4, 0xb7ff, 0x7e5a,
-+ 0x2009, 0x0083, 0xd69c, 0x0128, 0x2009, 0x0082, 0x2019, 0x0000,
-+ 0x2320, 0x791a, 0xd6ec, 0x0588, 0x080c, 0x41d9, 0x0470, 0x68b0,
-+ 0xa31a, 0x2100, 0xa423, 0x2400, 0xa305, 0x01f8, 0x7bd2, 0x7bda,
-+ 0x7cd6, 0x7cde, 0x68b0, 0xd6f4, 0x1108, 0xc6ed, 0xc6f4, 0x7e5a,
-+ 0x2011, 0x0083, 0xd69c, 0x0128, 0x2011, 0x0082, 0x2019, 0x0000,
-+ 0x2320, 0x7a1a, 0xd6ec, 0x0188, 0x080c, 0x4206, 0x0070, 0x2019,
-+ 0x0000, 0x2320, 0x0010, 0xa6b4, 0xb7ff, 0x7e5a, 0x2009, 0x0083,
-+ 0xd69c, 0x0110, 0x2009, 0x0082, 0x791a, 0x68c0, 0x7056, 0x2d00,
-+ 0x704a, 0x68c4, 0x2060, 0x71d0, 0x2001, 0x4601, 0x2004, 0xd0c4,
-+ 0x15c8, 0x70d4, 0xa02d, 0x01b8, 0xd1bc, 0x0548, 0x7a80, 0xa294,
-+ 0x0f00, 0x70d8, 0xa206, 0x0118, 0x78e0, 0xa504, 0x1558, 0x70d6,
-+ 0xc1bc, 0x71d2, 0x0438, 0x2031, 0x0001, 0x852c, 0x0218, 0x8633,
-+ 0x8210, 0x0cd8, 0x0005, 0x7de0, 0xa594, 0xff00, 0x0130, 0x2011,
-+ 0x0008, 0x852f, 0x0c81, 0x8637, 0x0008, 0x0c69, 0x8217, 0x7880,
-+ 0xa084, 0x0f00, 0xa206, 0x0170, 0x72da, 0x76d6, 0x0058, 0x7a80,
-+ 0xa294, 0x0f00, 0x70d8, 0xa236, 0x0dc0, 0x78e0, 0xa534, 0x0da8,
-+ 0xc1bd, 0x71d2, 0xd1b4, 0x1904, 0x259d, 0x2300, 0xa405, 0x0904,
-+ 0x259d, 0x70a0, 0xa086, 0x0001, 0x1904, 0x25e1, 0x0005, 0x6020,
-+ 0xa005, 0x0150, 0x8001, 0x6022, 0x6008, 0xa085, 0x0008, 0x600a,
-+ 0x700f, 0x0100, 0x702c, 0x6026, 0x0005, 0xa006, 0x080c, 0x3f26,
-+ 0x7000, 0xa086, 0x0002, 0x0120, 0x7060, 0xa086, 0x0005, 0x1150,
-+ 0x682b, 0x0000, 0x6817, 0x0000, 0x681b, 0x0001, 0x6823, 0x0040,
-+ 0x681f, 0x0100, 0x7000, 0xa084, 0x000f, 0x0002, 0x25a0, 0x3783,
-+ 0x3780, 0x37a0, 0x378c, 0x25a0, 0x377e, 0x377e, 0x080c, 0x254c,
-+ 0x0449, 0x0411, 0x0028, 0x0431, 0x7058, 0x2060, 0x6800, 0x6002,
-+ 0x080c, 0x1da2, 0x0804, 0x25a0, 0x7060, 0x7063, 0x0000, 0x707f,
-+ 0x0000, 0x0002, 0x379c, 0x379c, 0x379a, 0x379a, 0x379a, 0x379c,
-+ 0x379a, 0x379c, 0x0804, 0x2a6b, 0x7063, 0x0000, 0x0804, 0x25a0,
-+ 0x681b, 0x0000, 0x0804, 0x3184, 0x6800, 0xa005, 0x1108, 0x6002,
-+ 0x6006, 0x0005, 0x6410, 0x84ff, 0x0168, 0x2009, 0x4602, 0x2104,
-+ 0x8001, 0x200a, 0x8421, 0x6412, 0x1128, 0x2021, 0x4604, 0x2404,
-+ 0xc0a5, 0x2022, 0x6008, 0xc0a4, 0x600a, 0x0005, 0x6018, 0xa005,
-+ 0x0110, 0x8001, 0x601a, 0x0005, 0x080c, 0x3c46, 0x681b, 0x0018,
-+ 0x0490, 0x080c, 0x3c46, 0x681b, 0x0019, 0x0468, 0x080c, 0x3c46,
-+ 0x681b, 0x001a, 0x0440, 0x080c, 0x3c46, 0x681b, 0x0003, 0x0418,
-+ 0x7770, 0x080c, 0x3b6f, 0x7174, 0xa18c, 0x00ff, 0x3210, 0xa294,
-+ 0x0600, 0x0118, 0xa1e8, 0x8bc0, 0x0010, 0xa1e8, 0x8cd0, 0x2d04,
-+ 0x2d08, 0x2068, 0xa005, 0x1118, 0x707a, 0x0804, 0x25a0, 0x6814,
-+ 0x7270, 0xa206, 0x0110, 0x6800, 0x0c98, 0x6800, 0x200a, 0x681b,
-+ 0x0005, 0x707b, 0x0000, 0x080c, 0x37aa, 0x6820, 0xd084, 0x1110,
-+ 0x080c, 0x37a4, 0x080c, 0x37be, 0x681f, 0x0000, 0x6823, 0x0020,
-+ 0x080c, 0x1da2, 0x0804, 0x25a0, 0xa282, 0x0003, 0x1904, 0x3a10,
-+ 0x7da8, 0xa5ac, 0x00ff, 0x7ea8, 0xa6b4, 0x00ff, 0x6920, 0xc1bd,
-+ 0x6922, 0xd1c4, 0x05b0, 0xc1c4, 0x6922, 0xa6b4, 0x00ff, 0x0530,
-+ 0xa682, 0x0018, 0x0218, 0x0110, 0x2031, 0x0018, 0xa686, 0x0010,
-+ 0x1108, 0x8630, 0x852b, 0x852b, 0x2041, 0x0000, 0x080c, 0x3ac9,
-+ 0x0118, 0x080c, 0x38f7, 0x00a0, 0x080c, 0x3a95, 0x080c, 0x38f4,
-+ 0x6920, 0xc1c5, 0x6922, 0x7e58, 0xc695, 0x7e5a, 0xd6d4, 0x1118,
-+ 0x781b, 0x006e, 0x0005, 0x781b, 0x0082, 0x0005, 0x080c, 0x38f4,
-+ 0x7e58, 0xd6d4, 0x1118, 0x781b, 0x0071, 0x0005, 0x781b, 0x0083,
-+ 0x0005, 0x00c6, 0x7054, 0x2060, 0x6100, 0xd1e4, 0x0598, 0x6208,
-+ 0x8217, 0xa294, 0x00ff, 0xa282, 0x0018, 0x0218, 0x0110, 0x2011,
-+ 0x0018, 0x2600, 0xa202, 0x1208, 0x2230, 0xa686, 0x0010, 0x1108,
-+ 0x8630, 0x6208, 0xa294, 0x00ff, 0x78ec, 0xd0e4, 0x0130, 0xa282,
-+ 0x000a, 0x1240, 0x2011, 0x000a, 0x0028, 0xa282, 0x000c, 0x1210,
-+ 0x2011, 0x000c, 0x2200, 0xa502, 0x1208, 0x2228, 0x080c, 0x3a99,
-+ 0x852b, 0x852b, 0x2041, 0x0000, 0x080c, 0x3ac9, 0x0118, 0x080c,
-+ 0x38f7, 0x0020, 0x080c, 0x3a95, 0x080c, 0x38f4, 0x7858, 0xc095,
-+ 0x785a, 0x00ce, 0x781b, 0x0082, 0x0005, 0x00c6, 0x2960, 0x6000,
-+ 0xd0e4, 0x1188, 0xd0b4, 0x1150, 0x6010, 0xa084, 0x000f, 0x1130,
-+ 0x6104, 0xa18c, 0xfff5, 0x6106, 0x00ce, 0x0005, 0x2011, 0x0032,
-+ 0x2019, 0x0000, 0x00f0, 0x68a0, 0xd0cc, 0x1dc0, 0x6208, 0xa294,
-+ 0x00ff, 0x78ec, 0xd0e4, 0x0130, 0xa282, 0x000b, 0x1218, 0x2011,
-+ 0x000a, 0x0028, 0xa282, 0x000c, 0x1210, 0x2011, 0x000c, 0x6308,
-+ 0x831f, 0xa39c, 0x00ff, 0xa382, 0x0018, 0x0218, 0x0110, 0x2019,
-+ 0x0018, 0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab, 0x0001, 0x7aaa,
-+ 0x7baa, 0xa8c0, 0x0005, 0x6820, 0xc0c5, 0x6822, 0x080c, 0x3a55,
-+ 0x00ce, 0x0005, 0x00c6, 0x2960, 0x6104, 0xa18c, 0xfff5, 0x6106,
-+ 0x2011, 0x0032, 0x2019, 0x0000, 0x0000, 0x78ab, 0x0001, 0x78ab,
-+ 0x0003, 0x78ab, 0x0001, 0x7aaa, 0x7baa, 0xa8c0, 0x0005, 0x6820,
-+ 0xc0c5, 0x6822, 0x00ce, 0x0005, 0xa006, 0x2030, 0x2010, 0x00c6,
-+ 0x7154, 0x2160, 0x2018, 0x2008, 0xa084, 0xffe0, 0xa635, 0x7e86,
-+ 0x6018, 0x789a, 0x7eae, 0x6612, 0x78a4, 0xa084, 0x7770, 0xa18c,
-+ 0x000f, 0xa105, 0x2029, 0x4605, 0x252c, 0xd5cc, 0x0140, 0xd3a4,
-+ 0x0110, 0xa085, 0x0800, 0xd3fc, 0x0110, 0xa085, 0x8080, 0x78a6,
-+ 0x6016, 0x788a, 0xa6b4, 0x001f, 0x8637, 0x8204, 0x8004, 0xa605,
-+ 0x600e, 0x6004, 0xa084, 0xffd5, 0x6006, 0x00ce, 0x0005, 0xa282,
-+ 0x0002, 0x1904, 0x3a1a, 0x7aa8, 0x6920, 0xc1bd, 0x6922, 0xd1cc,
-+ 0x0568, 0xc1cc, 0x6922, 0xa294, 0x00ff, 0xa282, 0x0002, 0x1a04,
-+ 0x3a0b, 0x080c, 0x399e, 0x080c, 0x38f4, 0xa980, 0x0001, 0x200c,
-+ 0x080c, 0x3b6b, 0x080c, 0x3895, 0x88ff, 0x0178, 0x789b, 0x0060,
-+ 0x2800, 0x78aa, 0x7e58, 0xc695, 0x7e5a, 0xd6d4, 0x1118, 0x781b,
-+ 0x006e, 0x0005, 0x781b, 0x0082, 0x0005, 0x7e58, 0xd6d4, 0x1118,
-+ 0x781b, 0x0071, 0x0005, 0x781b, 0x0083, 0x0005, 0xa282, 0x0002,
-+ 0x1218, 0xa284, 0x0001, 0x0140, 0x7154, 0xa188, 0x0000, 0x210c,
-+ 0xd1ec, 0x1110, 0x2011, 0x0000, 0x080c, 0x3a87, 0x0479, 0x080c,
-+ 0x38f4, 0x7858, 0xc095, 0x785a, 0x781b, 0x0082, 0x0005, 0x00c6,
-+ 0x0026, 0x2960, 0x6000, 0x2011, 0x0001, 0xd0ec, 0x1158, 0xd0bc,
-+ 0x1138, 0x6014, 0xd0b4, 0x1120, 0xc1a4, 0x6106, 0xa006, 0x0088,
-+ 0x2011, 0x0000, 0x78ab, 0x0001, 0x78ab, 0x0002, 0x78ab, 0x0003,
-+ 0x7aaa, 0xa8c0, 0x0004, 0x080c, 0x3a55, 0x6820, 0xa085, 0x0200,
-+ 0x6822, 0x002e, 0x00ce, 0x0005, 0x8807, 0xa715, 0x00c6, 0x2009,
-+ 0x0000, 0x7054, 0x2060, 0x82ff, 0x0110, 0x2009, 0x0040, 0x6018,
-+ 0xa080, 0x0002, 0x789a, 0x78a4, 0xa084, 0xff9f, 0xa105, 0xc0ec,
-+ 0xd0b4, 0x1108, 0xc0ed, 0x6100, 0xd1f4, 0x0110, 0xa085, 0x0020,
-+ 0x78a6, 0x6016, 0x788a, 0x6004, 0xa084, 0xffef, 0x6006, 0x00ce,
-+ 0x0005, 0x0006, 0x7000, 0xa086, 0x0003, 0x0110, 0x000e, 0x0010,
-+ 0x000e, 0x0488, 0xd6ac, 0x0578, 0x7888, 0xa084, 0x0040, 0x0558,
-+ 0x7bb8, 0x8307, 0xa084, 0x007f, 0x1508, 0x8207, 0xa084, 0x00ff,
-+ 0xa09e, 0x0001, 0x1904, 0x3a32, 0xd6f4, 0x11d0, 0x79d8, 0x7adc,
-+ 0xa108, 0xa291, 0x0000, 0x79d2, 0x79da, 0x7ad6, 0x7ade, 0x080c,
-+ 0x42b5, 0x781b, 0x0080, 0xb284, 0x0600, 0x0118, 0x2001, 0x0000,
-+ 0x0010, 0x2001, 0x0001, 0x080c, 0x4172, 0x0005, 0x080c, 0x254c,
-+ 0x781b, 0x0080, 0x0005, 0x781b, 0x0083, 0x0005, 0x2039, 0x0000,
-+ 0x2041, 0x0000, 0x2031, 0x0000, 0xa006, 0x2010, 0x080c, 0x38f7,
-+ 0x080c, 0x399c, 0x7e58, 0x080c, 0x3a4e, 0x781b, 0x0082, 0x0005,
-+ 0x0cd1, 0x6820, 0xc0c4, 0x6822, 0x00c6, 0x7054, 0x2060, 0x080c,
-+ 0x3921, 0x00b0, 0x0c81, 0x6820, 0xc0cc, 0x6822, 0x00c6, 0x7054,
-+ 0x2060, 0x080c, 0x39bb, 0x0060, 0x0c31, 0x6820, 0xa084, 0xecff,
-+ 0x6822, 0x00c6, 0x7054, 0x2060, 0x6004, 0xa084, 0xffc5, 0x6006,
-+ 0x00ce, 0x0005, 0x0049, 0x781b, 0x0082, 0x0005, 0x6827, 0x0002,
-+ 0x0049, 0x781b, 0x0082, 0x0005, 0x2001, 0x0005, 0x0088, 0x2001,
-+ 0x000c, 0x0070, 0x6820, 0xc0d5, 0x6822, 0x2001, 0x0006, 0x0040,
-+ 0x2001, 0x000d, 0x0028, 0x2001, 0x0009, 0x0010, 0x2001, 0x0007,
-+ 0x789b, 0x007e, 0x78aa, 0xc69d, 0x7e5a, 0x70d0, 0xd0b4, 0x0168,
-+ 0xc0b4, 0x70d2, 0x00c6, 0x70b4, 0xa065, 0x6008, 0xa084, 0xfbef,
-+ 0x600a, 0x6018, 0x8001, 0x601a, 0x00ce, 0x0005, 0x0076, 0x873f,
-+ 0xa7bc, 0x000f, 0x873b, 0x873b, 0x8703, 0xa0e0, 0x4ac0, 0xae8e,
-+ 0x4640, 0x0110, 0xa0e0, 0x4b40, 0xa7b8, 0x0020, 0x7f9a, 0x79a4,
-+ 0xa184, 0x7fe0, 0x78ae, 0x6012, 0x79a4, 0xa184, 0x773f, 0x78a6,
-+ 0x6016, 0x6004, 0xa085, 0x0038, 0x6006, 0x007e, 0x0005, 0x789b,
-+ 0x0080, 0x78ab, 0x0001, 0x78ab, 0x0002, 0x78ab, 0x0003, 0x7aaa,
-+ 0x789b, 0x0060, 0x78ab, 0x0004, 0x0800, 0x2031, 0x0000, 0x2029,
-+ 0x0032, 0x789b, 0x0080, 0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab,
-+ 0x0001, 0x7daa, 0x7eaa, 0x789b, 0x0060, 0x78ab, 0x0005, 0x0804,
-+ 0x3a55, 0x0156, 0x8007, 0xa084, 0x00ff, 0x8003, 0x8003, 0xa080,
-+ 0x0020, 0x789a, 0x79a4, 0xa18c, 0xffe0, 0x2021, 0x3b54, 0x2019,
-+ 0x0011, 0x20a9, 0x000e, 0x2011, 0x0032, 0x2404, 0xa084, 0xffe0,
-+ 0xa106, 0x0128, 0x8420, 0x2300, 0xa210, 0x1f04, 0x3abd, 0x015e,
-+ 0x0005, 0x0156, 0x04f8, 0x2021, 0x3b62, 0x20a9, 0x0009, 0x2011,
-+ 0x0029, 0xa582, 0x0028, 0x0550, 0x8420, 0x95a9, 0x2011, 0x0033,
-+ 0xa582, 0x0033, 0x0618, 0x8420, 0x95a9, 0x2019, 0x000a, 0x2011,
-+ 0x0065, 0x2200, 0xa502, 0x02d0, 0x8420, 0x2300, 0xa210, 0x1f04,
-+ 0x3ae1, 0x015e, 0x0088, 0x2021, 0x3b54, 0x2019, 0x0011, 0x20a9,
-+ 0x000e, 0x2011, 0x0033, 0x2200, 0xa502, 0x0240, 0x8420, 0x2300,
-+ 0xa210, 0x1f04, 0x3af3, 0x015e, 0xa006, 0x0005, 0x8211, 0x015e,
-+ 0xa582, 0x0064, 0x1220, 0x7808, 0xa085, 0x0070, 0x780a, 0x2404,
-+ 0xa005, 0x0005, 0xa886, 0x0002, 0x01e8, 0x2021, 0x3b40, 0x20a9,
-+ 0x000d, 0x2011, 0x0028, 0xa582, 0x0028, 0x0d48, 0x8420, 0x2019,
-+ 0x0019, 0x2011, 0x0033, 0x2200, 0xa502, 0x0e00, 0x8420, 0x2300,
-+ 0xa210, 0x1f04, 0x3b1b, 0x015e, 0x2011, 0x0184, 0xa582, 0x0185,
-+ 0x0ab0, 0x0890, 0x2021, 0x3b4f, 0x20a9, 0x0003, 0x2011, 0x0024,
-+ 0xa586, 0x0024, 0x0960, 0x8420, 0x2011, 0x0028, 0xa586, 0x0028,
-+ 0x0930, 0x8420, 0x2019, 0x0019, 0x2011, 0x0033, 0x0804, 0x3af3,
-+ 0x1021, 0x2202, 0x3403, 0x4604, 0x5805, 0x6a06, 0x7c07, 0x4610,
-+ 0x4612, 0x5812, 0x5a12, 0x6a14, 0x6c14, 0x6e14, 0x7e17, 0x9021,
-+ 0xb002, 0xe204, 0xe210, 0xe210, 0x1209, 0x3002, 0x3202, 0x4203,
-+ 0x4403, 0x5404, 0x5604, 0x6605, 0x6805, 0x7806, 0x7a06, 0x0c07,
-+ 0x0c07, 0x0e07, 0x10e1, 0x330a, 0x5805, 0x5a05, 0x6a06, 0x6c06,
-+ 0x7c07, 0x7e07, 0x0e00, 0x789b, 0x0080, 0xa046, 0x0005, 0xa784,
-+ 0x0f00, 0x800b, 0xa784, 0x001f, 0x8003, 0x8003, 0x8003, 0x8003,
-+ 0xa105, 0xd7fc, 0x0118, 0xa0e0, 0x6bc0, 0x0010, 0xa0e0, 0x4bc0,
-+ 0x0005, 0x00e6, 0x00f6, 0xd084, 0x0138, 0x2079, 0x0100, 0x2009,
-+ 0x4680, 0x2071, 0x4680, 0x0030, 0x2009, 0x4640, 0x2079, 0x0200,
-+ 0x2071, 0x4640, 0x2091, 0x8000, 0x2104, 0xa084, 0x000f, 0x0002,
-+ 0x3ba2, 0x3ba2, 0x3ba2, 0x3ba2, 0x3ba2, 0x3ba2, 0x3ba0, 0x3ba0,
-+ 0x080c, 0x254c, 0x69b4, 0xc1f5, 0xa18c, 0xff9f, 0x69b6, 0xa005,
-+ 0x0580, 0x7858, 0xa084, 0xff9f, 0xa085, 0x6000, 0x785a, 0x7828,
-+ 0xa086, 0x1814, 0x1530, 0x784b, 0x0004, 0x7848, 0xa084, 0x0004,
-+ 0x1de0, 0x784b, 0x0008, 0x7848, 0xa084, 0x0008, 0x1de0, 0x7830,
-+ 0xd0bc, 0x11b8, 0xb284, 0x0800, 0x0118, 0x0104, 0x3bd9, 0x0010,
-+ 0x0304, 0x3bd9, 0x79e4, 0xa184, 0x0030, 0x0158, 0x78ec, 0xa084,
-+ 0x0003, 0x0138, 0x681c, 0xd0ac, 0x1110, 0x00d9, 0x0010, 0x781b,
-+ 0x00fb, 0x00fe, 0x00ee, 0x0005, 0x2001, 0x4601, 0x2004, 0xd0ac,
-+ 0x1118, 0x6814, 0x080c, 0x2475, 0x0005, 0x781b, 0x0083, 0x0005,
-+ 0x781b, 0x0082, 0x0005, 0x781b, 0x0071, 0x0005, 0x781b, 0x006e,
-+ 0x0005, 0x2009, 0x4619, 0x210c, 0xa186, 0x0000, 0x0150, 0xa186,
-+ 0x0001, 0x0150, 0x701f, 0x000b, 0x7063, 0x0001, 0x781b, 0x0054,
-+ 0x0005, 0x781b, 0x00f3, 0x0005, 0x701f, 0x000a, 0x0005, 0x2009,
-+ 0x4619, 0x210c, 0xa186, 0x0000, 0x0168, 0xa186, 0x0001, 0x0138,
-+ 0x701f, 0x000b, 0x7063, 0x0001, 0x781b, 0x0054, 0x0005, 0x701f,
-+ 0x000a, 0x0005, 0x781b, 0x00f2, 0x0005, 0x781b, 0x00fb, 0x0005,
-+ 0x781b, 0x00fa, 0x0005, 0x781b, 0x00cc, 0x0005, 0x781b, 0x00cb,
-+ 0x0005, 0x6818, 0xd0fc, 0x0110, 0x681b, 0x001d, 0x7063, 0x0001,
-+ 0x781b, 0x0054, 0x0005, 0x7830, 0xa084, 0x00c0, 0x1170, 0x7808,
-+ 0xc08c, 0x780a, 0xe000, 0xe000, 0xe000, 0xe000, 0x78ec, 0xa084,
-+ 0x0021, 0x0118, 0x7808, 0xc08d, 0x780a, 0x0005, 0x7808, 0xc08d,
-+ 0x780a, 0x0005, 0x7830, 0xa084, 0x0040, 0x1de0, 0xb284, 0x0800,
-+ 0x0118, 0x1104, 0x3c58, 0x0010, 0x1304, 0x3c58, 0x78ac, 0x0005,
-+ 0x7808, 0xa084, 0xfffd, 0x780a, 0xe000, 0xe000, 0xe000, 0xe000,
-+ 0x78ec, 0xa084, 0x0021, 0x0140, 0xb284, 0x0800, 0x0118, 0x1104,
-+ 0x3c67, 0x0010, 0x1304, 0x3c6a, 0x78ac, 0x0006, 0x7808, 0xa085,
-+ 0x0002, 0x780a, 0x000e, 0x0005, 0xa784, 0x0001, 0x1904, 0x322a,
-+ 0xa784, 0x0070, 0x0140, 0x00c6, 0x2d60, 0x2f68, 0x080c, 0x2467,
-+ 0x2d78, 0x2c68, 0x00ce, 0xa784, 0x0008, 0x0148, 0x784b, 0x0008,
-+ 0x78ec, 0xa084, 0x0003, 0x0904, 0x322a, 0x0804, 0x3be5, 0xa784,
-+ 0x0004, 0x01c8, 0x78b8, 0xa084, 0x8000, 0x01a8, 0x784b, 0x0008,
-+ 0x78ec, 0xa084, 0x0003, 0x0904, 0x322a, 0x78e4, 0xa084, 0x0007,
-+ 0xa086, 0x0001, 0x1140, 0x78c0, 0xa685, 0x4800, 0x2030, 0x7e5a,
-+ 0x781b, 0x00fb, 0x0005, 0xa784, 0x0080, 0x0140, 0x7884, 0xd0fc,
-+ 0x0128, 0x080c, 0x3a32, 0x681b, 0x0022, 0x0005, 0x681b, 0x0003,
-+ 0x7858, 0xa084, 0x5f00, 0x681e, 0x682f, 0x0000, 0x6833, 0x0000,
-+ 0x784b, 0x0008, 0x78ec, 0xa084, 0x0003, 0x0904, 0x2b89, 0xb284,
-+ 0x0800, 0x0110, 0x0104, 0x259d, 0x0304, 0x259d, 0x6b14, 0x8307,
-+ 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xd3fc, 0x0118, 0xa080,
-+ 0x4b40, 0x0010, 0xa080, 0x4ac0, 0x2060, 0x2048, 0x7056, 0x2a60,
-+ 0x0005, 0x00c6, 0x2960, 0x6000, 0xd0ac, 0x0904, 0x3d2f, 0x68a0,
-+ 0xd1ac, 0x1120, 0xa084, 0x0e00, 0x0904, 0x3d2d, 0x6108, 0x8117,
-+ 0xa18c, 0x00ff, 0x631c, 0x832f, 0xd0dc, 0x0110, 0xa39d, 0x0001,
-+ 0xd0cc, 0x11c8, 0xa584, 0x00ff, 0x0138, 0x78ec, 0xd0e4, 0x0110,
-+ 0x8213, 0x00b8, 0x2029, 0x0000, 0xa182, 0x000c, 0x1290, 0x78ec,
-+ 0xd0e4, 0x1118, 0x2009, 0x000c, 0x0060, 0xa182, 0x000b, 0x1248,
-+ 0x2009, 0x000a, 0x0030, 0x2009, 0x0032, 0x2011, 0x0000, 0x2029,
-+ 0x0000, 0x78ab, 0x0001, 0x78ab, 0x0006, 0x78ab, 0x0004, 0x79aa,
-+ 0x78ab, 0x0000, 0x7aaa, 0x7baa, 0x7daa, 0xa8c0, 0x0008, 0x6820,
-+ 0xa085, 0x1000, 0x6822, 0x080c, 0x3a55, 0xa085, 0x0001, 0x00ce,
-+ 0x0005, 0xa282, 0x0006, 0x1904, 0x3a24, 0x7da8, 0x7eac, 0x8637,
-+ 0xa5ac, 0x00ff, 0xa6b4, 0x00ff, 0x7fac, 0x8747, 0xa7bc, 0x00ff,
-+ 0xa8c4, 0x00ff, 0x6920, 0xc1bd, 0x6922, 0xd1e4, 0x0904, 0x3da3,
-+ 0xa18c, 0xecff, 0x6922, 0xa782, 0x0002, 0x1a04, 0x39fe, 0xa6b4,
-+ 0x00ff, 0x0904, 0x3da0, 0xa682, 0x0031, 0x1a04, 0x39fe, 0xa582,
-+ 0x0009, 0x0a04, 0x39fe, 0xa882, 0x0003, 0x1a04, 0x39fe, 0xa886,
-+ 0x0002, 0x01d0, 0xa886, 0x0000, 0x1904, 0x39fe, 0x2001, 0x000c,
-+ 0x79ec, 0xd1e4, 0x0110, 0x2001, 0x000a, 0xa502, 0x1290, 0x080c,
-+ 0x39fe, 0x00c6, 0x2960, 0x6004, 0xa085, 0x001a, 0x6006, 0x6000,
-+ 0xc0ac, 0x6002, 0x00ce, 0x0005, 0xa786, 0x0000, 0x0904, 0x39fe,
-+ 0x8634, 0xa682, 0x0018, 0x0228, 0x0120, 0x2031, 0x0018, 0x0804,
-+ 0x3df1, 0xa686, 0x0010, 0x1108, 0x8630, 0x852b, 0x852b, 0x080c,
-+ 0x3ac9, 0x0904, 0x39fe, 0x080c, 0x38f7, 0x080c, 0x399c, 0x7e58,
-+ 0xd6d4, 0x1118, 0x781b, 0x0071, 0x0005, 0x781b, 0x0083, 0x0005,
-+ 0x080c, 0x38f4, 0x0c90, 0xa886, 0x0002, 0x1108, 0x8634, 0x7154,
-+ 0xa188, 0x0000, 0x210c, 0xd1ac, 0x0904, 0x39fe, 0xd1ec, 0x1120,
-+ 0x2039, 0x0000, 0x2041, 0x0000, 0xd1e4, 0x1120, 0x2031, 0x0000,
-+ 0x2041, 0x0000, 0xa782, 0x0002, 0x12c8, 0x621c, 0xa284, 0x00ff,
-+ 0xa706, 0x0110, 0x2039, 0x0000, 0xa605, 0x0190, 0x6108, 0x811f,
-+ 0xa39c, 0x00ff, 0x0168, 0xa302, 0x1208, 0x2330, 0x8807, 0xa705,
-+ 0xa086, 0x0201, 0x0160, 0xa886, 0x0000, 0x0168, 0x2039, 0x0000,
-+ 0x2041, 0x0000, 0x2031, 0x0000, 0xa006, 0x2010, 0x0070, 0xa284,
-+ 0xff00, 0x1108, 0x2040, 0xa184, 0x00ff, 0xa502, 0x0108, 0x2128,
-+ 0x852b, 0x852b, 0x080c, 0x3ac9, 0x0d58, 0x080c, 0x38f7, 0x080c,
-+ 0x399c, 0x789b, 0x0080, 0x78ab, 0x0001, 0x78ab, 0x0006, 0x78ab,
-+ 0x0004, 0x7daa, 0x78ab, 0x0000, 0x7eaa, 0x7faa, 0x2800, 0x78aa,
-+ 0x789b, 0x0060, 0x78ab, 0x0008, 0x6820, 0xc0e5, 0x6822, 0x080c,
-+ 0x3a55, 0x7858, 0xc095, 0x785a, 0x781b, 0x0082, 0x0005, 0x0020,
-+ 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000,
-+ 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000,
-+ 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000,
-+ 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000,
-+ 0x0020, 0x0062, 0x0009, 0x0014, 0x0014, 0x9855, 0x984d, 0x0014,
-+ 0x9911, 0x98ff, 0x0014, 0x0014, 0x0090, 0x00e7, 0x0100, 0x0402,
-+ 0x2008, 0xf880, 0x0018, 0x0017, 0x840f, 0xd8c1, 0x0014, 0x0016,
-+ 0xa20a, 0x0014, 0x300b, 0xa20c, 0x0014, 0x2500, 0x0013, 0x2500,
-+ 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010,
-+ 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0xa200, 0x3806,
-+ 0x8839, 0x20c4, 0x0864, 0xa850, 0x3008, 0x28c1, 0x9d18, 0xa201,
-+ 0x300c, 0x2847, 0x8161, 0x846a, 0x8000, 0x84a4, 0x1856, 0x883a,
-+ 0xa808, 0x28e2, 0x9cce, 0xa8f3, 0x0864, 0xa83e, 0x300c, 0xa801,
-+ 0x3008, 0x28e1, 0x9cce, 0x28a2, 0x7163, 0xa831, 0x2021, 0xa818,
-+ 0xa205, 0x870c, 0xd8de, 0x64a0, 0x6de0, 0x6fc0, 0x67a4, 0x6c80,
-+ 0x0212, 0xa205, 0x883d, 0x882b, 0x1814, 0x883b, 0x7027, 0x85f2,
-+ 0xa737, 0xa532, 0xf003, 0x8576, 0x8677, 0xa813, 0x883e, 0xa811,
-+ 0x2882, 0x7162, 0xa814, 0x280a, 0xa204, 0x64c0, 0x6de0, 0x67a0,
-+ 0x6fc0, 0x1814, 0x883b, 0x7023, 0x8576, 0x8677, 0xa802, 0x7861,
-+ 0x883e, 0x206a, 0x28c1, 0x9d18, 0x2042, 0x2101, 0xa8ca, 0x2902,
-+ 0xa20e, 0xa80b, 0xa207, 0x0014, 0xa203, 0x8000, 0x85a4, 0x1872,
-+ 0x879a, 0x883c, 0x1fe2, 0xf601, 0xa208, 0x856e, 0x7121, 0x0014,
-+ 0x0704, 0x3008, 0x9cce, 0x0014, 0xa202, 0x8000, 0x85a4, 0x3009,
-+ 0x84a8, 0x19e2, 0xf844, 0x856e, 0x883f, 0x08e6, 0xa8f5, 0xf861,
-+ 0xa8eb, 0xf801, 0x0014, 0xf881, 0x0016, 0x85b2, 0x80f0, 0x9532,
-+ 0xfaa2, 0x1de2, 0x0014, 0x8532, 0xf221, 0x0014, 0x1de2, 0x84a8,
-+ 0xd6e0, 0x1fe6, 0x0014, 0x3008, 0x8000, 0x2849, 0x1011, 0xa8fc,
-+ 0x3008, 0x8000, 0xa000, 0x2081, 0x2802, 0x1011, 0xa8fc, 0xa889,
-+ 0x3008, 0x20a1, 0x283c, 0x1011, 0xa8fc, 0xa209, 0x0017, 0x300c,
-+ 0x8000, 0x85a4, 0x1de2, 0xdac1, 0x0014, 0x0210, 0xa801, 0x0014,
-+ 0x26e0, 0x873a, 0xfaa3, 0x19f2, 0x26e0, 0x18f2, 0x0014, 0xa20b,
-+ 0x0014, 0xa20d, 0x3806, 0x0210, 0x9d22, 0x0704, 0xa206, 0x6865,
-+ 0x817e, 0x842a, 0x1dc1, 0x8823, 0x0016, 0x6042, 0x8008, 0xa8fa,
-+ 0x8160, 0x842a, 0x8180, 0xf021, 0x3008, 0x84a8, 0x11d7, 0x7042,
-+ 0x20dd, 0x0011, 0x20d5, 0x8822, 0x0016, 0x0000, 0x0126, 0x70d0,
-+ 0xa084, 0x4c00, 0x8004, 0x2090, 0x7204, 0x7008, 0xc09c, 0xa205,
-+ 0x11a0, 0x720c, 0x82ff, 0x0128, 0x8aff, 0x1178, 0x7200, 0xd284,
-+ 0x1160, 0x7804, 0xd0cc, 0x0110, 0x080c, 0x4328, 0x7007, 0x0008,
-+ 0x7003, 0x0008, 0x012e, 0x2000, 0x0005, 0x7000, 0xa084, 0x0003,
-+ 0x7002, 0xc69c, 0xd084, 0x0588, 0x7108, 0xe000, 0x7008, 0xa106,
-+ 0x1dd8, 0xa184, 0x0003, 0x0904, 0x3fa2, 0xa184, 0x01e0, 0x1904,
-+ 0x3fa2, 0xd1f4, 0x1d88, 0xa184, 0x3000, 0xa086, 0x1000, 0x0d60,
-+ 0x2011, 0x0180, 0x710c, 0x8211, 0x0130, 0x7008, 0xd0f4, 0x1d20,
-+ 0x700c, 0xa106, 0x0dc0, 0x7007, 0x0012, 0x7108, 0xe000, 0x7008,
-+ 0xa106, 0x1dd8, 0xa184, 0x0003, 0x0568, 0xd194, 0x0db0, 0xd1f4,
-+ 0x0548, 0x7007, 0x0002, 0x0880, 0x0428, 0x7108, 0xd1fc, 0x0130,
-+ 0x080c, 0x40ae, 0x8aff, 0x0904, 0x3f2c, 0x0cb8, 0x700c, 0xa08c,
-+ 0x07ff, 0x01e8, 0x7004, 0xd084, 0x0178, 0x7014, 0xa005, 0x1148,
-+ 0x7010, 0x7310, 0xa306, 0x1de0, 0x2300, 0xa005, 0x0128, 0xa102,
-+ 0x1e20, 0x7007, 0x0010, 0x0030, 0x8aff, 0x0148, 0x080c, 0x426b,
-+ 0x1de8, 0x09d8, 0x080c, 0x4034, 0x012e, 0x2000, 0x0005, 0x7204,
-+ 0x7108, 0xc19c, 0x8103, 0x1218, 0x7007, 0x0002, 0x0cc0, 0xa205,
-+ 0x1d88, 0x7007, 0x0008, 0x7003, 0x0008, 0x0006, 0x2001, 0x4601,
-+ 0x2004, 0xd0cc, 0x0110, 0x080c, 0x4328, 0x000e, 0x012e, 0x2000,
-+ 0x0005, 0x6428, 0x84ff, 0x0508, 0x2c70, 0x7004, 0xa0bc, 0x000f,
-+ 0xa7b8, 0x3ff5, 0x273c, 0x87fb, 0x1148, 0x0210, 0x080c, 0x254c,
-+ 0x609c, 0xa075, 0x0190, 0x0c88, 0x2039, 0x3fea, 0x2704, 0xae68,
-+ 0x6808, 0xa630, 0x680c, 0xa529, 0x8421, 0x0138, 0x8738, 0x2704,
-+ 0xa005, 0x1da8, 0x709c, 0xa075, 0x1d00, 0x0005, 0x0000, 0x0005,
-+ 0x0009, 0x000d, 0x0011, 0x0015, 0x0019, 0x001d, 0x0000, 0x0003,
-+ 0x0009, 0x000f, 0x0015, 0x001b, 0x0000, 0x0000, 0x3fea, 0x3fe7,
-+ 0x0000, 0x0000, 0x8000, 0x0000, 0x3fea, 0x0000, 0x3ff2, 0x3fef,
-+ 0x0000, 0x0000, 0x0000, 0x0000, 0x3ff2, 0x0000, 0x3fed, 0x3fed,
-+ 0x0000, 0x0000, 0x8000, 0x0000, 0x3fed, 0x0000, 0x3ff3, 0x3ff3,
-+ 0x0000, 0x0000, 0x0000, 0x0000, 0x3ff3, 0x2079, 0x4600, 0x2071,
-+ 0x0010, 0x7007, 0x000a, 0x7007, 0x0002, 0x7003, 0x0001, 0x2009,
-+ 0x0002, 0x2071, 0x0050, 0x7007, 0x000a, 0x7007, 0x0002, 0x7003,
-+ 0x0000, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1128, 0x8109, 0x0118,
-+ 0x2071, 0x0020, 0x0c80, 0x0005, 0x7004, 0x8004, 0x1a04, 0x408a,
-+ 0x7108, 0x7008, 0xa106, 0x1de0, 0xa184, 0x01e0, 0x0120, 0x080c,
-+ 0x40e6, 0x0804, 0x40aa, 0x7007, 0x0012, 0x2019, 0x0000, 0x7108,
-+ 0x7008, 0xa106, 0x1de0, 0xa184, 0x01e0, 0x0120, 0x080c, 0x40e6,
-+ 0x0804, 0x40aa, 0xa19c, 0x300c, 0xa386, 0x2004, 0x0190, 0xa386,
-+ 0x0008, 0x01c0, 0x7004, 0xd084, 0x1148, 0x7108, 0x7008, 0xa106,
-+ 0x1de0, 0xa184, 0x0003, 0x0110, 0x0804, 0x40e6, 0xa386, 0x200c,
-+ 0x19f0, 0x7200, 0x8204, 0x0230, 0x730c, 0xa384, 0x07ff, 0x0110,
-+ 0x080c, 0x254c, 0x7108, 0x7008, 0xa106, 0x1de0, 0xa184, 0x01e0,
-+ 0x0118, 0x080c, 0x40e6, 0x0470, 0x7007, 0x0012, 0x7000, 0xd084,
-+ 0x1148, 0x7310, 0x7014, 0xa305, 0x0128, 0x710c, 0xa184, 0x07ff,
-+ 0x1904, 0x4034, 0x7108, 0x7008, 0xa106, 0x1de0, 0xa184, 0x01e0,
-+ 0x0118, 0x080c, 0x40e6, 0x00b0, 0x7007, 0x0012, 0x7007, 0x0008,
-+ 0x7004, 0xd09c, 0x1de8, 0x7108, 0x7008, 0xa106, 0x1de0, 0xa184,
-+ 0x01e0, 0x0118, 0x080c, 0x40e6, 0x0028, 0x7007, 0x0012, 0x7108,
-+ 0x8103, 0x0e88, 0x7003, 0x0008, 0x0005, 0x7108, 0xa184, 0x01e0,
-+ 0x15a8, 0x7108, 0xa184, 0x01e0, 0x1588, 0xa184, 0x0007, 0x0002,
-+ 0x40c2, 0x40d0, 0x40c0, 0x40d0, 0x40c0, 0x4120, 0x40c0, 0x411e,
-+ 0x080c, 0x254c, 0x7004, 0xa084, 0x0010, 0xc08d, 0x7006, 0x8aff,
-+ 0x1118, 0x2049, 0x0000, 0x0005, 0x080c, 0x426b, 0x1de8, 0x0005,
-+ 0x7004, 0xa084, 0x0010, 0xc08d, 0x7006, 0x7004, 0xd084, 0x1140,
-+ 0x7108, 0x7008, 0xa106, 0x1de0, 0xa184, 0x0003, 0x0108, 0x0030,
-+ 0x8aff, 0x0118, 0x080c, 0x426b, 0x1de8, 0x0005, 0x7007, 0x0012,
-+ 0x7108, 0x1d04, 0x40e9, 0x2091, 0x6000, 0x1d04, 0x40ed, 0x2091,
-+ 0x6000, 0x7007, 0x0012, 0x7007, 0x0008, 0x7004, 0xd09c, 0x1de8,
-+ 0x7007, 0x0012, 0x7108, 0xd1fc, 0x1dd8, 0x7003, 0x0000, 0x7000,
-+ 0xa005, 0x1130, 0x7004, 0xa005, 0x1118, 0x700c, 0xa005, 0x0108,
-+ 0x0c40, 0x2049, 0x0000, 0xb284, 0x0200, 0x0118, 0x2001, 0x0000,
-+ 0x0010, 0x2001, 0x0001, 0x080c, 0x3b81, 0x681b, 0x0002, 0x2051,
-+ 0x0000, 0x0005, 0x080c, 0x254c, 0x080c, 0x254c, 0x080c, 0x415f,
-+ 0x7210, 0x7114, 0x700c, 0xa09c, 0x07ff, 0x2800, 0xa300, 0xa211,
-+ 0xa189, 0x0000, 0x04a1, 0x2704, 0x2c58, 0xac60, 0x6308, 0x2200,
-+ 0xa322, 0x630c, 0x2100, 0xa31b, 0x2400, 0xa305, 0x0140, 0x1238,
-+ 0x8412, 0x8210, 0x830a, 0xa189, 0x0000, 0x2b60, 0x0c58, 0x2b60,
-+ 0x8a07, 0x0006, 0x6004, 0xd09c, 0x0118, 0xa7ba, 0x3fef, 0x0010,
-+ 0xa7ba, 0x3fe7, 0x000e, 0xa73d, 0x2c00, 0x6886, 0x6f8a, 0x6c92,
-+ 0x6b8e, 0x7108, 0x7008, 0xa106, 0x1de0, 0xa184, 0x01e0, 0x0110,
-+ 0x080c, 0x40e6, 0x7007, 0x0012, 0x080c, 0x4034, 0x0005, 0x8a50,
-+ 0x8739, 0x2704, 0xa004, 0x1168, 0x6000, 0xa064, 0x1108, 0x2d60,
-+ 0x6004, 0xa084, 0x000f, 0xa080, 0x4005, 0x203c, 0x87fb, 0x090c,
-+ 0x254c, 0x0005, 0x0126, 0x00d6, 0x70d0, 0xa084, 0x4c00, 0x8004,
-+ 0x2090, 0x00de, 0x6884, 0x2060, 0x6888, 0x6b8c, 0x6c90, 0x8057,
-+ 0xaad4, 0x00ff, 0xa084, 0x00ff, 0x0006, 0x6804, 0xa084, 0x0008,
-+ 0x000e, 0x0118, 0xa0b8, 0x3fef, 0x0010, 0xa0b8, 0x3fe7, 0xb284,
-+ 0x0200, 0x0110, 0x7e20, 0x0008, 0x7e24, 0xa6b5, 0x000c, 0x681c,
-+ 0xd0b4, 0x0108, 0xc685, 0x2400, 0xa305, 0x0518, 0x2c58, 0x2704,
-+ 0x6104, 0xac60, 0x6000, 0xa400, 0x701a, 0x6004, 0xa301, 0x701e,
-+ 0xd19c, 0x0140, 0x6010, 0xa081, 0x0000, 0x7022, 0x6014, 0xa081,
-+ 0x0000, 0x7026, 0x6208, 0x2400, 0xa202, 0x7012, 0x620c, 0x2300,
-+ 0xa203, 0x7016, 0x7602, 0x7007, 0x0001, 0x2b60, 0x080c, 0x4292,
-+ 0x0010, 0x080c, 0x426b, 0x1de8, 0x012e, 0x2000, 0x0005, 0x0126,
-+ 0x00d6, 0x70d0, 0xa084, 0x4c00, 0x8004, 0x2090, 0x00de, 0x7007,
-+ 0x0004, 0x7004, 0xd094, 0x1de8, 0x7003, 0x0008, 0x012e, 0x2000,
-+ 0x0005, 0x0126, 0x00d6, 0x70d0, 0xa084, 0x4c00, 0x8004, 0x2090,
-+ 0x00de, 0x7e20, 0xb284, 0x0200, 0x1108, 0x7e24, 0xa6b5, 0x000c,
-+ 0x681c, 0xd0ac, 0x1118, 0xc685, 0x7003, 0x0000, 0x6828, 0x2050,
-+ 0x2d60, 0x6004, 0xa0bc, 0x000f, 0xa7b8, 0x3ff5, 0x273c, 0x87fb,
-+ 0x1138, 0x0210, 0x080c, 0x254c, 0x689c, 0xa065, 0x0120, 0x0c88,
-+ 0x080c, 0x426b, 0x1de8, 0x012e, 0x2000, 0x0005, 0x0126, 0x0006,
-+ 0x0016, 0x00d6, 0x70d0, 0xa084, 0x4c00, 0x8004, 0x2090, 0x7e20,
-+ 0xb284, 0x0200, 0x1108, 0x7e24, 0x00de, 0x003e, 0x004e, 0xa6b5,
-+ 0x000c, 0x681c, 0xd0b4, 0x0128, 0xc685, 0x7003, 0x0000, 0x7007,
-+ 0x0004, 0x2049, 0x4206, 0x6828, 0xa055, 0x00d6, 0x0904, 0x4267,
-+ 0x2d70, 0x2e60, 0x7004, 0xa0bc, 0x000f, 0xa7b8, 0x3ff5, 0x273c,
-+ 0x87fb, 0x1140, 0x0210, 0x080c, 0x254c, 0x709c, 0xa075, 0x2060,
-+ 0x0570, 0x0c80, 0x2704, 0xae68, 0x6808, 0xa422, 0x680c, 0xa31b,
-+ 0x0268, 0x8a51, 0x1110, 0x080c, 0x254c, 0x8738, 0x2704, 0xa005,
-+ 0x1d90, 0x709c, 0xa075, 0x2060, 0x01d0, 0x08e0, 0x8422, 0x8420,
-+ 0x831a, 0xa399, 0x0000, 0x6908, 0x2400, 0xa122, 0x690c, 0x2300,
-+ 0xa11b, 0x1210, 0x080c, 0x254c, 0xb284, 0x0200, 0x0118, 0x2071,
-+ 0x0050, 0x0010, 0x2071, 0x0020, 0x00de, 0x0804, 0x419b, 0x00de,
-+ 0x012e, 0x2000, 0x0005, 0x7008, 0x0006, 0xa084, 0x01e0, 0x000e,
-+ 0x0110, 0xa006, 0x0005, 0xa084, 0x0003, 0xa086, 0x0003, 0x1108,
-+ 0x0005, 0x2704, 0xac78, 0x7800, 0x701a, 0x7804, 0x701e, 0x7808,
-+ 0x7012, 0x780c, 0x7016, 0x6004, 0xd09c, 0x0120, 0x7810, 0x7022,
-+ 0x7814, 0x7026, 0x7602, 0x7004, 0xa084, 0x0010, 0xc085, 0x7006,
-+ 0x2079, 0x4600, 0x8a51, 0x01e8, 0x8738, 0x2704, 0xa005, 0x1168,
-+ 0x609c, 0xa005, 0x01b8, 0x2060, 0x6004, 0xa084, 0x000f, 0xa080,
-+ 0x3ff5, 0x203c, 0x87fb, 0x090c, 0x254c, 0x7008, 0x0006, 0xa084,
-+ 0x01e0, 0x000e, 0x0110, 0xa006, 0x0028, 0xa084, 0x0003, 0xa086,
-+ 0x0003, 0x0005, 0x2051, 0x0000, 0x0005, 0x0126, 0x0006, 0x00d6,
-+ 0x70d0, 0xa084, 0x4c00, 0x8004, 0x2090, 0x00de, 0x008e, 0x7108,
-+ 0xa184, 0x0003, 0x1128, 0x6828, 0xa005, 0x0178, 0x0804, 0x3f45,
-+ 0x7108, 0xd1fc, 0x0118, 0x080c, 0x40ae, 0x0c88, 0x7007, 0x0010,
-+ 0x7108, 0xd1fc, 0x0de8, 0x080c, 0x40ae, 0x7008, 0xa086, 0x0008,
-+ 0x1d30, 0x7000, 0xa005, 0x1d18, 0x7003, 0x0000, 0x2049, 0x0000,
-+ 0x0006, 0x2001, 0x4601, 0x2004, 0xd0cc, 0x0110, 0x080c, 0x4328,
-+ 0x000e, 0x012e, 0x2000, 0x0005, 0x0126, 0x0146, 0x0136, 0x0156,
-+ 0x00c6, 0x00d6, 0x70d0, 0xa084, 0x4c00, 0x8004, 0x2090, 0x00de,
-+ 0x2049, 0x42ec, 0xad80, 0x0011, 0x20a0, 0xb284, 0x0200, 0x0118,
-+ 0x2099, 0x0032, 0x0010, 0x2099, 0x0031, 0x700c, 0xa084, 0x07ff,
-+ 0x682a, 0x7007, 0x0008, 0x7007, 0x0002, 0x7003, 0x0001, 0x0118,
-+ 0x8000, 0x80ac, 0x53a5, 0x700c, 0xa084, 0x07ff, 0x0130, 0x7007,
-+ 0x0004, 0x7004, 0xa084, 0x0004, 0x1de0, 0x00ce, 0x2049, 0x0000,
-+ 0x7003, 0x0000, 0x015e, 0x013e, 0x014e, 0x012e, 0x2000, 0x0005,
-+ 0x6814, 0xd0fc, 0x0904, 0x436b, 0x7000, 0xd084, 0x05e0, 0x7e24,
-+ 0xa6b5, 0x0004, 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x1de0,
-+ 0x7118, 0x0016, 0x711c, 0x0016, 0x7120, 0x0016, 0x7124, 0x0016,
-+ 0x701b, 0x0000, 0x701f, 0x3fff, 0x7023, 0x0000, 0x7027, 0x0000,
-+ 0x7013, 0x0004, 0x7017, 0x0000, 0x7602, 0x7007, 0x0001, 0x2001,
-+ 0xffff, 0x2009, 0x0031, 0x200a, 0x200a, 0x7108, 0x7008, 0xa106,
-+ 0x1de0, 0xd1fc, 0x0dd0, 0x002e, 0x7226, 0x002e, 0x7222, 0x002e,
-+ 0x721e, 0x002e, 0x721a, 0x7007, 0x0002, 0x7008, 0xa086, 0x0008,
-+ 0x0110, 0x0804, 0x40e6, 0x7007, 0x0004, 0x7003, 0x0000, 0x0005,
-+ 0x2091, 0x8000, 0x2091, 0x6000, 0x78ac, 0xa005, 0x1168, 0x7974,
-+ 0x70d0, 0xa106, 0x1148, 0x781c, 0xa005, 0x0130, 0x781f, 0x0000,
-+ 0x0e04, 0x4384, 0x2091, 0x4080, 0x2069, 0x4680, 0xd7fc, 0x1110,
-+ 0x2069, 0x4640, 0x6800, 0xa084, 0x000f, 0x1198, 0x68d0, 0xd0b4,
-+ 0x0180, 0xd0bc, 0x1170, 0x00f6, 0x2079, 0x0100, 0xd7fc, 0x1110,
-+ 0x2079, 0x0200, 0x7830, 0xa084, 0x00c0, 0x1110, 0x080c, 0x22ae,
-+ 0x00fe, 0x7830, 0x8001, 0x7832, 0x1904, 0x440b, 0x7834, 0x7832,
-+ 0x2061, 0x6bc0, 0x2069, 0x4680, 0xc7fd, 0x68cc, 0xa005, 0x0128,
-+ 0x8001, 0x68ce, 0x1110, 0x080c, 0x4577, 0x6800, 0xa084, 0x000f,
-+ 0x0168, 0xa086, 0x0001, 0x0150, 0x6840, 0xa00d, 0x0138, 0x2104,
-+ 0xa005, 0x0120, 0x8001, 0x200a, 0x0904, 0x4514, 0x6814, 0xa005,
-+ 0x01a8, 0x8001, 0x6816, 0x1190, 0x68a3, 0x0001, 0x00f6, 0xd7fc,
-+ 0x1118, 0x2079, 0x0200, 0x0010, 0x2079, 0x0100, 0x080c, 0x3c46,
-+ 0x00fe, 0x6860, 0xa005, 0x0110, 0x080c, 0x22ae, 0x687c, 0xa005,
-+ 0x0140, 0x8001, 0x687e, 0x1128, 0x6863, 0x0000, 0x68d0, 0xc0c5,
-+ 0x68d2, 0x68d0, 0xd0fc, 0x01b0, 0xc0fc, 0x68d2, 0x20a9, 0x0200,
-+ 0x6034, 0xa005, 0x0158, 0x8001, 0x6036, 0x68d0, 0xc0fd, 0x68d2,
-+ 0x1128, 0x6010, 0xa005, 0x0110, 0x080c, 0x22ae, 0xace0, 0x0010,
-+ 0x1f04, 0x43f0, 0xd7fc, 0x0138, 0x2061, 0x4bc0, 0x2069, 0x4640,
-+ 0xc7fc, 0x0804, 0x43ad, 0x0459, 0x7838, 0x8001, 0x783a, 0x11a0,
-+ 0x783c, 0x783a, 0x2061, 0x4bc0, 0x2069, 0x4640, 0xc7fc, 0x680c,
-+ 0xa005, 0x0110, 0x080c, 0x4487, 0xd7fc, 0x1130, 0x2061, 0x6bc0,
-+ 0x2069, 0x4680, 0xc7fd, 0x0c98, 0x7810, 0xd0cc, 0x0168, 0xd0ac,
-+ 0x1120, 0xd0a4, 0x0148, 0xc0ad, 0x7812, 0x2091, 0x8001, 0x0e04,
-+ 0x4433, 0x080c, 0x207a, 0x0005, 0x2091, 0x8001, 0x0005, 0x7840,
-+ 0x8001, 0x7842, 0x1904, 0x4486, 0x7844, 0x7842, 0x2069, 0x4640,
-+ 0xc7fc, 0x2079, 0x0200, 0x68d4, 0xa005, 0x0138, 0x7de0, 0xa504,
-+ 0x1120, 0x68d6, 0x68d0, 0xc0bc, 0x68d2, 0x2079, 0x4600, 0x6810,
-+ 0xa005, 0x1110, 0x2001, 0x0101, 0x8001, 0x6812, 0xd7fc, 0x0118,
-+ 0xa080, 0x8cd0, 0x0010, 0xa080, 0x8bc0, 0x2040, 0x2004, 0xa065,
-+ 0x01e0, 0x6024, 0xa005, 0x01b0, 0x8001, 0x6026, 0x1198, 0x6800,
-+ 0xa005, 0x0130, 0x6848, 0xac06, 0x1118, 0x080c, 0x4514, 0x0068,
-+ 0x6860, 0xa005, 0x0118, 0x6027, 0x0001, 0x0020, 0x080c, 0x44c8,
-+ 0x2804, 0x0c28, 0x6000, 0x2c40, 0x0c10, 0xd7fc, 0x1138, 0x2069,
-+ 0x4680, 0xc7fd, 0x2079, 0x0100, 0x0804, 0x4443, 0x0005, 0x2009,
-+ 0x0000, 0x20a9, 0x0200, 0x6008, 0xd09c, 0x0558, 0x6024, 0xa005,
-+ 0x0118, 0x8001, 0x6026, 0x0418, 0x6008, 0xc09c, 0xd084, 0x1110,
-+ 0xd0ac, 0x01c0, 0x600a, 0x6004, 0xa005, 0x01d8, 0x00d6, 0x00c6,
-+ 0x0016, 0x2068, 0x6010, 0x8001, 0x6012, 0x080c, 0x37a4, 0x2d00,
-+ 0x2c68, 0x2060, 0x080c, 0x1be3, 0x080c, 0x1d95, 0x001e, 0x00ce,
-+ 0x00de, 0x0038, 0xc0bd, 0x600a, 0xa18d, 0x0001, 0x0010, 0xa18d,
-+ 0x0100, 0xace0, 0x0010, 0x1f04, 0x448b, 0xa184, 0x0001, 0x0130,
-+ 0xa18c, 0xfffe, 0x690e, 0x080c, 0x22ae, 0x0008, 0x690e, 0x0005,
-+ 0x2c00, 0x687a, 0x6714, 0x6f72, 0x6017, 0x0000, 0x602b, 0x0000,
-+ 0x601b, 0x0006, 0x60b4, 0xa084, 0x5f00, 0x601e, 0x6020, 0xa084,
-+ 0x00ff, 0xa085, 0x0060, 0x6022, 0x6000, 0x2042, 0x6858, 0xac06,
-+ 0x1110, 0x2800, 0x685a, 0x080c, 0x1b7b, 0x6818, 0xa005, 0x0110,
-+ 0x8001, 0x681a, 0x6808, 0xc0a4, 0x680a, 0x6810, 0x7908, 0x8109,
-+ 0x790a, 0x8001, 0x1310, 0x080c, 0x254c, 0x6812, 0x1118, 0x7910,
-+ 0xc1a5, 0x7912, 0x602f, 0x0000, 0x6033, 0x0000, 0x2c68, 0x080c,
-+ 0x1da2, 0xd7fc, 0x1118, 0x2069, 0x4640, 0x0010, 0x2069, 0x4680,
-+ 0x6910, 0xa184, 0x0100, 0x2001, 0x0006, 0x1118, 0x6976, 0x2001,
-+ 0x0004, 0x080c, 0x22a4, 0x0005, 0x00d6, 0x6948, 0x2160, 0xd7fc,
-+ 0x1118, 0x2069, 0x0200, 0x0010, 0x2069, 0x0100, 0x080c, 0x2467,
-+ 0x601b, 0x0006, 0x6858, 0xa084, 0x5f00, 0x601e, 0x6020, 0xa084,
-+ 0x00ff, 0xa085, 0x0048, 0x6022, 0x602f, 0x0000, 0x6033, 0x0000,
-+ 0x6808, 0xa084, 0xfffd, 0x680a, 0x6830, 0xd0b4, 0x01b0, 0x684b,
-+ 0x0004, 0x20a9, 0x0014, 0x6848, 0xd094, 0x0110, 0x1f04, 0x453b,
-+ 0x684b, 0x0009, 0x20a9, 0x0014, 0x6848, 0xd084, 0x0110, 0x1f04,
-+ 0x4544, 0x20a9, 0x00fa, 0x1f04, 0x454b, 0x681b, 0x0054, 0x00de,
-+ 0x6863, 0x0007, 0x0005, 0x2079, 0x4600, 0x00e1, 0x0089, 0x00a9,
-+ 0x2009, 0x0002, 0x2069, 0x4680, 0x680f, 0x0000, 0x6813, 0x0000,
-+ 0x6817, 0x0000, 0x8109, 0x0118, 0x2069, 0x4640, 0x0ca8, 0x0005,
-+ 0x2019, 0x00a3, 0x7b3a, 0x7b3e, 0x0005, 0x2019, 0x0033, 0x7b42,
-+ 0x7b46, 0x0005, 0x2019, 0x32dd, 0x7b32, 0x7b36, 0x0005, 0x6a4c,
-+ 0xa285, 0x0000, 0x01f0, 0x6950, 0x6bbc, 0xa300, 0x00c6, 0x2164,
-+ 0x6304, 0x83ff, 0x1138, 0x8211, 0x0148, 0x8108, 0xa11a, 0x0eb8,
-+ 0x69bc, 0x0ca8, 0x68cf, 0x000a, 0x00ce, 0x0005, 0x694c, 0x6abc,
-+ 0x2264, 0x6008, 0xc0b5, 0x600a, 0x8210, 0x8109, 0x1dc8, 0x694e,
-+ 0x00ce, 0x0005, 0x1d04, 0x459a, 0x2091, 0x6000, 0x1d04, 0x459e,
-+ 0x2091, 0x6000, 0x70ec, 0xd0dc, 0x1118, 0xd0d4, 0x0190, 0x0098,
-+ 0xae8e, 0x0100, 0x0138, 0x7814, 0xc0f5, 0xc0c5, 0x7816, 0xd0d4,
-+ 0x1578, 0x0458, 0x7814, 0xc0fd, 0xc0c5, 0x7816, 0xd0d4, 0x1540,
-+ 0x0420, 0xd0e4, 0x0538, 0x1d04, 0x45bb, 0x2091, 0x6000, 0x2009,
-+ 0x000c, 0x1d04, 0x45c1, 0x2091, 0x6000, 0x8109, 0x1dd0, 0x70e4,
-+ 0xa084, 0x01ff, 0xa086, 0x01ff, 0x1110, 0x70ec, 0x08c8, 0xae8e,
-+ 0x0100, 0x0128, 0x7814, 0xc0f4, 0xd0fc, 0x1130, 0x0020, 0x7814,
-+ 0xc0fc, 0xd0f4, 0x1108, 0xc0c4, 0x7816, 0x7804, 0xd08c, 0x0110,
-+ 0x681f, 0x000c, 0x70a0, 0x70a2, 0x0005, 0x7c12
-+};
-+#else
-+/*
-+ * Firmware Version 11.12.01 (12:37 May 24, 2000)
-+ */
-+static const u_int16_t isp_12160_risc_code[] = {
-+ 0x0804, 0x103a, 0x0000, 0x4bd8, 0x0000, 0x2043, 0x4f50, 0x5952,
-+ 0x4947, 0x4854, 0x2031, 0x3939, 0x3520, 0x514c, 0x4f47, 0x4943,
-+ 0x2043, 0x4f52, 0x504f, 0x5241, 0x5449, 0x4f4e, 0x2049, 0x5350,
-+ 0x3132, 0x3430, 0x2049, 0x2f54, 0x2046, 0x6972, 0x6d77, 0x6172,
-+ 0x6520, 0x2056, 0x6572, 0x7369, 0x6f6e, 0x2031, 0x312e, 0x3132,
-+ 0x2020, 0x2043, 0x7573, 0x746f, 0x6d65, 0x7220, 0x4e6f, 0x2e20,
-+ 0x3030, 0x2050, 0x726f, 0x6475, 0x6374, 0x204e, 0x6f2e, 0x2020,
-+ 0x3031, 0x2024, 0x2071, 0x0200, 0x70a0, 0x70a2, 0x2001, 0x01ff,
-+ 0x2004, 0xd0fc, 0x1120, 0x2071, 0x0100, 0x70a0, 0x70a2, 0x20c1,
-+ 0x0020, 0x2089, 0x128f, 0x0030, 0x2001, 0x04fc, 0x2004, 0xa086,
-+ 0x1216, 0x0d40, 0x2071, 0x0010, 0x70c3, 0x0004, 0x70c7, 0x4953,
-+ 0x70cb, 0x5020, 0x70cf, 0x2020, 0x70d3, 0x000b, 0x2001, 0x04fd,
-+ 0x70d6, 0x20c1, 0x0022, 0x20c9, 0x10ff, 0x2009, 0xfeff, 0x200b,
-+ 0xa5a5, 0xe000, 0xe000, 0x2114, 0xa286, 0xa5a5, 0x0120, 0x20c1,
-+ 0x0020, 0x20c9, 0x5cff, 0x2009, 0x0200, 0xa18e, 0x0400, 0x1168,
-+ 0x3808, 0xa18e, 0x0020, 0x1148, 0x70c3, 0x8010, 0x2061, 0x0000,
-+ 0x601b, 0x0001, 0x2091, 0x4080, 0x0cf8, 0x2009, 0xfeff, 0x2130,
-+ 0x2128, 0x3800, 0xa084, 0x0003, 0x0006, 0x0118, 0xa1a2, 0x1100,
-+ 0x0010, 0xa1a2, 0x5cff, 0x000e, 0x8424, 0x8424, 0x8424, 0x8424,
-+ 0x8424, 0x8424, 0x2009, 0xb33f, 0xa005, 0x0128, 0x2079, 0x1100,
-+ 0xa192, 0x1100, 0x0020, 0x2079, 0x5d00, 0xa192, 0x5d00, 0x2009,
-+ 0x0000, 0x2001, 0x0037, 0x080c, 0x20ea, 0x2218, 0x2fa0, 0x2408,
-+ 0x2011, 0x0000, 0x20a9, 0x0040, 0x42a4, 0x8109, 0x1dd8, 0x2079,
-+ 0xb340, 0x2001, 0x04fc, 0x2004, 0xa086, 0x1280, 0x11e8, 0x780c,
-+ 0xc0ed, 0xc0d5, 0x780e, 0x7813, 0x0064, 0x2071, 0x0200, 0x00d6,
-+ 0x2069, 0xb380, 0x080c, 0x59b8, 0x2001, 0x01ff, 0x2004, 0xd0fc,
-+ 0x1130, 0x2069, 0xb3c0, 0x2071, 0x0100, 0x080c, 0x59b8, 0x780c,
-+ 0xc0d4, 0x780e, 0x00de, 0x0090, 0x2001, 0x04fc, 0x2004, 0xa086,
-+ 0x1216, 0x1128, 0x7813, 0x0064, 0x780c, 0xc0cd, 0x08c8, 0x780c,
-+ 0xc0e5, 0x780e, 0x7813, 0x003c, 0x2011, 0x000c, 0x2009, 0xb38c,
-+ 0x220a, 0x2009, 0xb3cc, 0x220a, 0x7eca, 0x7cc2, 0x7bc6, 0x785b,
-+ 0x0000, 0x7800, 0xc08d, 0x7802, 0x2031, 0x0030, 0x78af, 0x0101,
-+ 0x781b, 0x0002, 0x781f, 0x0002, 0x2009, 0x0002, 0x2069, 0xb380,
-+ 0x6817, 0x0003, 0x681f, 0x0007, 0x6823, 0x00fa, 0x6827, 0x0008,
-+ 0x682b, 0x0028, 0x6837, 0x0006, 0x682f, 0x0008, 0x683b, 0x0000,
-+ 0x8109, 0x0508, 0x68ef, 0x000a, 0x68df, 0xb400, 0x2079, 0xb340,
-+ 0x780c, 0xd0e4, 0x1118, 0x68f3, 0x7629, 0x0010, 0x68f3, 0x760d,
-+ 0x68e3, 0xba00, 0x68e7, 0xb800, 0x68eb, 0xfa00, 0x68c7, 0xfece,
-+ 0x68cb, 0xfed3, 0x68cf, 0xfece, 0x68d3, 0xfece, 0x68c3, 0x0001,
-+ 0x2069, 0xb3c0, 0x0868, 0x68ef, 0x000a, 0x68df, 0xb600, 0x68f3,
-+ 0x7819, 0x68e3, 0xda00, 0x68e7, 0xb900, 0x68eb, 0xfb10, 0x68c7,
-+ 0xfed3, 0x68cb, 0xfed8, 0x68cf, 0xfed3, 0x68d3, 0xfed3, 0x68c3,
-+ 0x0001, 0x00e6, 0x2069, 0xb800, 0x2071, 0x0200, 0x70ec, 0xd0e4,
-+ 0x2019, 0x1c09, 0x2021, 0x0009, 0x1120, 0x2019, 0x1c0c, 0x2021,
-+ 0x000c, 0x080c, 0x200a, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1188,
-+ 0x2069, 0xb900, 0x2071, 0x0100, 0x70ec, 0xd0e4, 0x2019, 0x1c09,
-+ 0x2021, 0x0009, 0x1120, 0x2019, 0x1c0c, 0x2021, 0x000c, 0x080c,
-+ 0x200a, 0x00ee, 0x2011, 0x0002, 0x2069, 0xba00, 0x2009, 0x0002,
-+ 0x20a9, 0x0100, 0x6837, 0x0000, 0x680b, 0x0040, 0x7bc8, 0xa386,
-+ 0xfeff, 0x1128, 0x6817, 0x0100, 0x681f, 0x0064, 0x0020, 0x6817,
-+ 0x0064, 0x681f, 0x0002, 0xade8, 0x0010, 0x1f04, 0x1182, 0x8109,
-+ 0x1d38, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1128, 0x8211, 0x0118,
-+ 0x2069, 0xda00, 0x08d8, 0x080c, 0x2680, 0x080c, 0x53c4, 0x080c,
-+ 0x1caf, 0x080c, 0x595f, 0x2091, 0x2200, 0x2079, 0xb340, 0x7808,
-+ 0xd0ec, 0x0118, 0x2071, 0x0020, 0x0010, 0x2071, 0x0050, 0x2091,
-+ 0x2400, 0x2079, 0xb340, 0x2071, 0x0020, 0x2091, 0x2600, 0x2079,
-+ 0xb340, 0x7808, 0xd0ec, 0x0118, 0x2079, 0x0100, 0x0010, 0x2079,
-+ 0x0200, 0x2071, 0xb380, 0x2091, 0x2800, 0x2079, 0x0100, 0x2071,
-+ 0xb3c0, 0x2091, 0x2000, 0x2079, 0xb340, 0x2071, 0x0010, 0x3200,
-+ 0xa085, 0x303d, 0x2090, 0x70c3, 0x0000, 0x1004, 0x11e5, 0x70c0,
-+ 0xa086, 0x0002, 0x1110, 0x080c, 0x142c, 0x2039, 0x0000, 0x080c,
-+ 0x130a, 0x78ac, 0xa005, 0x11a0, 0x0e04, 0x11f5, 0x7864, 0xa065,
-+ 0x0120, 0x2029, 0x0000, 0x080c, 0x252c, 0x080c, 0x210b, 0x0e04,
-+ 0x120c, 0x7864, 0xa065, 0x0120, 0x2029, 0x0000, 0x080c, 0x252c,
-+ 0x0e04, 0x120c, 0x2009, 0xb386, 0x2011, 0xb3c6, 0x2104, 0x220c,
-+ 0xa105, 0x0110, 0x080c, 0x1dd0, 0x00e6, 0x00f6, 0x2071, 0xb380,
-+ 0x70c0, 0xa005, 0x01f8, 0x7454, 0xa485, 0x0000, 0x01d8, 0x2079,
-+ 0x0200, 0x2091, 0x8000, 0x72f0, 0xa28c, 0x303d, 0x2190, 0x080c,
-+ 0x2b7f, 0x2091, 0x8000, 0x2091, 0x303d, 0x0e04, 0x1232, 0x00fe,
-+ 0x7864, 0xa065, 0x0130, 0x00ee, 0x2029, 0x0000, 0x080c, 0x252c,
-+ 0x00e6, 0x00f6, 0x1d04, 0x123a, 0x00fe, 0x00ee, 0x080c, 0x577e,
-+ 0x00e6, 0x00f6, 0x2071, 0xb3c0, 0x70c0, 0xa005, 0x0190, 0x7454,
-+ 0xa485, 0x0000, 0x0170, 0x2079, 0x0100, 0x2091, 0x8000, 0x72f0,
-+ 0xa28c, 0x303d, 0x2190, 0x080c, 0x2b7f, 0x2091, 0x8000, 0x2091,
-+ 0x303d, 0x00fe, 0x00ee, 0x0e04, 0x125b, 0x7864, 0xa065, 0x0118,
-+ 0xa02e, 0x080c, 0x252c, 0x1d04, 0x11e7, 0x080c, 0x577e, 0x0804,
-+ 0x11e7, 0x3c00, 0xa084, 0x0007, 0x0002, 0x1275, 0x1275, 0x1277,
-+ 0x1277, 0x127c, 0x127c, 0x1281, 0x1281, 0x3c00, 0xa084, 0x0003,
-+ 0x0002, 0x1275, 0x1275, 0x128a, 0x128a, 0x080c, 0x297f, 0x2091,
-+ 0x2400, 0x080c, 0x547f, 0x0005, 0x2091, 0x2200, 0x080c, 0x547f,
-+ 0x0005, 0x2091, 0x2200, 0x080c, 0x547f, 0x2091, 0x2400, 0x080c,
-+ 0x547f, 0x0005, 0x2091, 0x2200, 0x080c, 0x547f, 0x0005, 0x12af,
-+ 0x12af, 0x12b0, 0x12b0, 0x12bb, 0x12bb, 0x12bb, 0x12bb, 0x12c4,
-+ 0x12c4, 0x12cf, 0x12cf, 0x12bb, 0x12bb, 0x12bb, 0x12bb, 0x12de,
-+ 0x12de, 0x12de, 0x12de, 0x12de, 0x12de, 0x12de, 0x12de, 0x12de,
-+ 0x12de, 0x12de, 0x12de, 0x12de, 0x12de, 0x12de, 0x12de, 0x0cf8,
-+ 0x0006, 0x0106, 0x0126, 0x2091, 0x2800, 0x080c, 0x299c, 0x012e,
-+ 0x010e, 0x000e, 0x000d, 0x0006, 0x0106, 0x0126, 0x080c, 0x1261,
-+ 0x012e, 0x010e, 0x000e, 0x000d, 0x0006, 0x0106, 0x0126, 0x2091,
-+ 0x2600, 0x080c, 0x299c, 0x012e, 0x010e, 0x000e, 0x000d, 0x0006,
-+ 0x0106, 0x0126, 0x2091, 0x2600, 0x080c, 0x299c, 0x2091, 0x2800,
-+ 0x080c, 0x299c, 0x012e, 0x010e, 0x000e, 0x000d, 0x0006, 0x0106,
-+ 0x0126, 0x00d6, 0x00e6, 0x00f6, 0x2079, 0xb340, 0x2071, 0x0200,
-+ 0x2069, 0xb380, 0x3d00, 0xd08c, 0x0130, 0x70ec, 0xa084, 0x1c00,
-+ 0x78e2, 0x080c, 0x59b8, 0x3d00, 0xd084, 0x0150, 0x2069, 0xb3c0,
-+ 0x2071, 0x0100, 0x70ec, 0xa084, 0x1c00, 0x78e6, 0x080c, 0x59b8,
-+ 0x080c, 0x2930, 0x00fe, 0x00ee, 0x00de, 0x012e, 0x010e, 0x000e,
-+ 0x000d, 0x0005, 0x0e04, 0x1381, 0x2061, 0x0000, 0x6018, 0xa084,
-+ 0x0001, 0x1904, 0x1381, 0x7820, 0xa005, 0x1120, 0x0004, 0x1382,
-+ 0x0804, 0x1381, 0x7908, 0xd1f4, 0x0120, 0x2001, 0x4007, 0x0804,
-+ 0x142e, 0x790c, 0xd1ec, 0x01a0, 0xd0fc, 0x0148, 0x0006, 0x080c,
-+ 0x1c2f, 0x000e, 0x0168, 0x2001, 0x4007, 0x0804, 0x142e, 0x0006,
-+ 0x080c, 0x1c25, 0x000e, 0x0120, 0x2001, 0x4007, 0x0804, 0x142e,
-+ 0x7908, 0xd0fc, 0x1128, 0x2061, 0xb380, 0xc19c, 0xc7fc, 0x0020,
-+ 0x2061, 0xb3c0, 0xc19d, 0xc7fd, 0x6068, 0xa005, 0x15d0, 0x790a,
-+ 0x6087, 0x0000, 0x7820, 0xc0fc, 0xa086, 0x0018, 0x1120, 0x00c6,
-+ 0x080c, 0x196b, 0x00ce, 0x7823, 0x0000, 0x6080, 0xa065, 0x0190,
-+ 0x00c6, 0x609c, 0x080c, 0x1d24, 0x00ce, 0x609f, 0x0000, 0x080c,
-+ 0x1a81, 0x2009, 0x000c, 0x6007, 0x0103, 0x080c, 0x1c39, 0x1198,
-+ 0x080c, 0x1c95, 0x7808, 0xd09c, 0x1118, 0x2061, 0xb380, 0x0018,
-+ 0x2061, 0xb3c0, 0xc09c, 0x6083, 0x0000, 0x780a, 0x60f0, 0xd0c4,
-+ 0x0130, 0xc0c4, 0x60f2, 0x2001, 0x4005, 0x0804, 0x142e, 0x0804,
-+ 0x142c, 0x0005, 0x7808, 0xd0f4, 0x0120, 0x2001, 0x4007, 0x0804,
-+ 0x142e, 0x70c3, 0x0000, 0x70c7, 0x0000, 0x70cb, 0x0000, 0x70cf,
-+ 0x0000, 0x70db, 0x0000, 0x71c4, 0x7a08, 0xd2ec, 0x0108, 0xc1fc,
-+ 0x70c0, 0xa03d, 0xa092, 0x0030, 0x1208, 0x0032, 0x2200, 0xa092,
-+ 0x0050, 0x1a04, 0x143a, 0x0482, 0x142c, 0x14a7, 0x1448, 0x14bb,
-+ 0x14ca, 0x14d0, 0x1440, 0x1a99, 0x14d4, 0x143a, 0x144c, 0x144d,
-+ 0x144e, 0x144f, 0x1a9d, 0x143a, 0x14e1, 0x1532, 0x1988, 0x1a93,
-+ 0x1450, 0x17f5, 0x182e, 0x1863, 0x18a8, 0x17b0, 0x17be, 0x17d1,
-+ 0x17e4, 0x1600, 0x143a, 0x155f, 0x1563, 0x1571, 0x157f, 0x1596,
-+ 0x15a4, 0x15a7, 0x15b5, 0x15c3, 0x15cd, 0x15e6, 0x15f2, 0x143a,
-+ 0x143a, 0x143a, 0x143a, 0x160d, 0x1618, 0x1631, 0x1665, 0x168e,
-+ 0x16a0, 0x16a3, 0x16cd, 0x1705, 0x1717, 0x1784, 0x1794, 0x143a,
-+ 0x1475, 0x143a, 0x143a, 0x17a6, 0x143a, 0x143a, 0x143a, 0x143a,
-+ 0x143a, 0x1bc9, 0x1bcf, 0x143a, 0x143a, 0x143a, 0x1bd3, 0x1be2,
-+ 0x143a, 0x143a, 0x143a, 0x143a, 0x14a2, 0x14b6, 0x14dc, 0x152d,
-+ 0x1983, 0x1ab1, 0x1ad3, 0x1950, 0x1ae9, 0x1bf0, 0x1bbb, 0x1bc5,
-+ 0x143a, 0x143a, 0x143a, 0x143a, 0x143a, 0x143a, 0x143a, 0x143a,
-+ 0x143a, 0x143a, 0x143a, 0x143a, 0x143a, 0x143a, 0x143a, 0x143a,
-+ 0x143a, 0x143a, 0x143a, 0x143a, 0x143a, 0x143a, 0x143a, 0x143a,
-+ 0x143a, 0x143a, 0x143a, 0x143a, 0x143a, 0x143a, 0x143a, 0x143a,
-+ 0x143a, 0x143a, 0x143a, 0x143a, 0x72ca, 0x71c6, 0x2001, 0x4006,
-+ 0x0028, 0x73ce, 0x72ca, 0x71c6, 0x2001, 0x4000, 0x70c2, 0x0e04,
-+ 0x142f, 0x2061, 0x0000, 0x601b, 0x0001, 0x2091, 0x5000, 0x2091,
-+ 0x4080, 0x0005, 0x70c3, 0x4001, 0x0c90, 0x70c3, 0x4006, 0x0c78,
-+ 0x2099, 0x0041, 0x20a1, 0x0041, 0x20a9, 0x0005, 0x53a3, 0x0c20,
-+ 0x70c4, 0x70c3, 0x0004, 0x0807, 0x08f8, 0x08f0, 0x08e8, 0x08e0,
-+ 0x2091, 0x8000, 0x70c3, 0x0000, 0x70c7, 0x4953, 0x70cb, 0x5020,
-+ 0x70cf, 0x2020, 0x70d3, 0x000b, 0x2001, 0x000c, 0x70d6, 0x2079,
-+ 0x0000, 0x781b, 0x0001, 0x2031, 0x0030, 0x2059, 0x1000, 0x2029,
-+ 0x041a, 0x2051, 0x0445, 0x2061, 0x0447, 0x20c1, 0x0020, 0x2091,
-+ 0x5000, 0x2091, 0x4080, 0x0804, 0x0418, 0x00d6, 0x70c4, 0x7904,
-+ 0xd19c, 0x0180, 0x70c7, 0x0001, 0x2069, 0xfed8, 0x2d14, 0x72ca,
-+ 0x8d68, 0x2d14, 0x72ce, 0x8d68, 0x2d14, 0x72da, 0x8d68, 0x2d14,
-+ 0x72de, 0x0010, 0x70c7, 0x0000, 0xa005, 0x0178, 0xc19d, 0x72c8,
-+ 0x2069, 0xfed8, 0x226a, 0x72cc, 0x8d68, 0x226a, 0x72d8, 0x8d68,
-+ 0x226a, 0x72dc, 0x8d68, 0x226a, 0x0008, 0xc19c, 0x7906, 0x00de,
-+ 0x0804, 0x142c, 0x75d8, 0x74dc, 0x75da, 0x74de, 0x0018, 0x2029,
-+ 0x0000, 0x2520, 0x71d0, 0x73c8, 0x72cc, 0x70c4, 0x080c, 0x1e1f,
-+ 0x0904, 0x142c, 0x70c3, 0x4002, 0x0804, 0x142c, 0x75d8, 0x74dc,
-+ 0x75da, 0x74de, 0x0018, 0x2029, 0x0000, 0x2520, 0x71d0, 0x73c8,
-+ 0x72cc, 0x70c4, 0x080c, 0x1e5e, 0x0904, 0x142c, 0x70c3, 0x4002,
-+ 0x0804, 0x142c, 0x71c4, 0x70c8, 0x2114, 0x200a, 0x0804, 0x142a,
-+ 0x71c4, 0x2114, 0x0804, 0x142a, 0x70c7, 0x000b, 0x70cb, 0x000c,
-+ 0x70cf, 0x0001, 0x0804, 0x142c, 0x75d8, 0x76dc, 0x75da, 0x76de,
-+ 0x0018, 0x2029, 0x0000, 0x2530, 0x70c4, 0x72c8, 0x73cc, 0x74d0,
-+ 0x70c6, 0x72ca, 0x73ce, 0x74d2, 0xa005, 0x05c8, 0xa40a, 0x0110,
-+ 0x1a04, 0x142e, 0x8001, 0x786a, 0xa084, 0xfc00, 0x0138, 0x78ac,
-+ 0xc085, 0x78ae, 0x2001, 0x4005, 0x0804, 0x142e, 0x7a72, 0x7b76,
-+ 0x7d7a, 0x7e7e, 0x7c6e, 0xa48c, 0xff00, 0x0170, 0x8407, 0x8004,
-+ 0x8004, 0x810c, 0x810c, 0x810f, 0xa118, 0xa291, 0x0000, 0xa6b1,
-+ 0x0000, 0xa5a9, 0x0000, 0x0050, 0x8407, 0x8004, 0x8004, 0xa318,
-+ 0xa291, 0x0000, 0xa6b1, 0x0000, 0xa5a9, 0x0000, 0x731a, 0x721e,
-+ 0x7622, 0x7526, 0x78ac, 0xa084, 0xfffc, 0x78ae, 0x0020, 0x78ac,
-+ 0xa085, 0x0001, 0x78ae, 0x0804, 0x142c, 0x75d8, 0x76dc, 0x75da,
-+ 0x76de, 0x0018, 0x2029, 0x0000, 0x2530, 0x70c4, 0x72c8, 0x73cc,
-+ 0x74d4, 0x70c6, 0x72ca, 0x73ce, 0x74d6, 0xa005, 0x01d0, 0xa40a,
-+ 0x0110, 0x1a04, 0x142e, 0x8001, 0x788e, 0xa084, 0xfc00, 0x0138,
-+ 0x78ac, 0xc0c5, 0x78ae, 0x2001, 0x4005, 0x0804, 0x142e, 0x7a96,
-+ 0x7b9a, 0x7d9e, 0x7ea2, 0x7c92, 0x78ac, 0xa084, 0xfcff, 0x78ae,
-+ 0x0020, 0x78ac, 0xa085, 0x0100, 0x78ae, 0x0804, 0x142c, 0x795c,
-+ 0x7ac4, 0x0804, 0x142a, 0x2009, 0xb387, 0x210c, 0x2001, 0x01ff,
-+ 0x2004, 0xd0fc, 0x1904, 0x142b, 0x2011, 0xb3c7, 0x2214, 0x0804,
-+ 0x142a, 0x2009, 0xb388, 0x210c, 0x2001, 0x01ff, 0x2004, 0xd0fc,
-+ 0x1904, 0x142b, 0x2011, 0xb3c8, 0x2214, 0x0804, 0x142a, 0x2061,
-+ 0xb380, 0x6124, 0x6228, 0x8214, 0x8214, 0x8214, 0x2001, 0x01ff,
-+ 0x2004, 0xd0fc, 0x1148, 0x2061, 0xb3c0, 0x6324, 0x73da, 0x6328,
-+ 0x831c, 0x831c, 0x831c, 0x73de, 0x0804, 0x142a, 0x2009, 0xb38b,
-+ 0x210c, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1904, 0x142b, 0x2011,
-+ 0xb3cb, 0x2214, 0x0804, 0x142a, 0x7910, 0x0804, 0x142b, 0x2009,
-+ 0x0202, 0x210c, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1904, 0x142b,
-+ 0x2011, 0x0102, 0x2214, 0x0804, 0x142a, 0x2009, 0xb38d, 0x210c,
-+ 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1904, 0x142b, 0x2011, 0xb3cd,
-+ 0x2214, 0x0804, 0x142a, 0x7918, 0x2001, 0x01ff, 0x2004, 0xd0fc,
-+ 0x1904, 0x142b, 0x7a1c, 0x0804, 0x142a, 0x2011, 0xb900, 0x71c4,
-+ 0xd1fc, 0x1110, 0x2011, 0xb800, 0x8107, 0xa084, 0x000f, 0x8003,
-+ 0x8003, 0x8003, 0x8003, 0xa268, 0x6a00, 0x6b08, 0x6c1c, 0x74da,
-+ 0xd29c, 0x0110, 0x6820, 0x70de, 0x0804, 0x1429, 0x2138, 0x080c,
-+ 0x1cc4, 0x2091, 0x8000, 0x6b1c, 0x6a14, 0x2091, 0x8001, 0x2708,
-+ 0x0804, 0x1429, 0x2061, 0xb380, 0x6114, 0x2001, 0x01ff, 0x2004,
-+ 0xd0fc, 0x1904, 0x142b, 0x2061, 0xb3c0, 0x6214, 0x0804, 0x142a,
-+ 0x2138, 0x080c, 0x1cc4, 0x2091, 0x8000, 0x6908, 0x6a18, 0x6b10,
-+ 0x77da, 0x2091, 0x8001, 0x0804, 0x1429, 0x2110, 0xa294, 0x000f,
-+ 0xa282, 0x0010, 0x1a04, 0x1425, 0x080c, 0x27a4, 0x0804, 0x1429,
-+ 0x2100, 0xc0bc, 0xa082, 0x0010, 0x1a04, 0x1425, 0xd1bc, 0x1120,
-+ 0x2011, 0xb387, 0x2204, 0x0020, 0x2011, 0xb3c7, 0x2204, 0xc0bd,
-+ 0x0006, 0x2100, 0xc0bc, 0x2012, 0x080c, 0x2713, 0x001e, 0x0804,
-+ 0x142b, 0x71c4, 0x2021, 0xb388, 0x2404, 0x70c6, 0x2019, 0x0000,
-+ 0x0030, 0x71c8, 0x2021, 0xb3c8, 0x2404, 0x70ca, 0xc3fd, 0x2011,
-+ 0x165d, 0x20a9, 0x0008, 0x2205, 0xa106, 0x0138, 0x8210, 0x1f04,
-+ 0x1643, 0x71c4, 0x72c8, 0x0804, 0x1424, 0xa292, 0x165d, 0x0026,
-+ 0x2122, 0x001e, 0x080c, 0x2732, 0x2001, 0x01ff, 0x2004, 0xd0fc,
-+ 0x1110, 0xd3fc, 0x09f0, 0x0804, 0x142c, 0x03e8, 0x00fa, 0x01f4,
-+ 0x02ee, 0x0004, 0x0001, 0x0002, 0x0003, 0x2061, 0xb380, 0x6124,
-+ 0x6228, 0x8214, 0x8214, 0x8214, 0x70c4, 0x6026, 0x70c8, 0x8003,
-+ 0x8003, 0x8003, 0x602a, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x11a0,
-+ 0x0026, 0x0016, 0x2061, 0xb3c0, 0x6124, 0x6228, 0x8214, 0x8214,
-+ 0x8214, 0x70d8, 0x6026, 0x70dc, 0x8003, 0x8003, 0x8003, 0x602a,
-+ 0x71da, 0x72de, 0x001e, 0x002e, 0x0804, 0x142a, 0x2061, 0xb380,
-+ 0x612c, 0x70c4, 0x602e, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1904,
-+ 0x142b, 0x2061, 0xb3c0, 0x622c, 0x70c8, 0x602e, 0x0804, 0x142a,
-+ 0x7910, 0x0804, 0x142b, 0x71c4, 0xa184, 0xf0cf, 0x0148, 0x2001,
-+ 0x01ff, 0x2004, 0xd0fc, 0x1904, 0x1425, 0x72c8, 0x0804, 0x1424,
-+ 0x0006, 0x2019, 0x0000, 0x080c, 0x278d, 0x2001, 0x01ff, 0x2004,
-+ 0xd0fc, 0x0118, 0x001e, 0x0804, 0x142b, 0x71c8, 0xa184, 0xf0cf,
-+ 0x0120, 0x2110, 0x71c4, 0x0804, 0x1424, 0x0006, 0xc3fd, 0x080c,
-+ 0x278d, 0x002e, 0x001e, 0x0804, 0x142a, 0x71c4, 0xa182, 0x0010,
-+ 0x0248, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1904, 0x1425, 0x72c8,
-+ 0x0804, 0x1424, 0x2011, 0xb38d, 0x2204, 0x0006, 0x8104, 0x1208,
-+ 0x8108, 0x2112, 0x2019, 0x0000, 0x080c, 0x276f, 0x2001, 0x01ff,
-+ 0x2004, 0xd0fc, 0x0118, 0x001e, 0x0804, 0x142b, 0x71c8, 0xa182,
-+ 0x0010, 0x0220, 0x2110, 0x71c4, 0x0804, 0x1424, 0x2011, 0xb3cd,
-+ 0x2204, 0x0006, 0x8104, 0x1208, 0x8108, 0x2112, 0xc3fd, 0x080c,
-+ 0x276f, 0x002e, 0x001e, 0x0804, 0x142a, 0x71c4, 0x72c8, 0xa184,
-+ 0xfffd, 0x1904, 0x1424, 0xa284, 0xfffd, 0x1904, 0x1424, 0x2100,
-+ 0x7918, 0x781a, 0x2200, 0x7a1c, 0x781e, 0x0804, 0x142a, 0x2011,
-+ 0xb900, 0x71c4, 0xd1fc, 0x1110, 0x2011, 0xb800, 0x8107, 0xa084,
-+ 0x000f, 0x8003, 0x8003, 0x8003, 0x8003, 0xa268, 0x72c8, 0x73cc,
-+ 0x74d8, 0xd29c, 0x0130, 0x75dc, 0x75de, 0x6d22, 0x2001, 0x0002,
-+ 0x682a, 0x71c6, 0x6800, 0x70ca, 0x73ce, 0x74da, 0x2091, 0x8000,
-+ 0x6a02, 0xd2ac, 0x1110, 0xa026, 0x0078, 0xa484, 0x00ff, 0xa082,
-+ 0x0002, 0x16f0, 0x843f, 0xa7bc, 0x00ff, 0x0130, 0xa786, 0x0002,
-+ 0x15b8, 0xa484, 0x00ff, 0x05a0, 0x2029, 0x0009, 0x2031, 0x0062,
-+ 0x843f, 0xa7bc, 0x00ff, 0x0130, 0x8307, 0xa084, 0x00ff, 0x1110,
-+ 0xa73d, 0x1530, 0x2041, 0x001d, 0x8307, 0xa084, 0x00ff, 0x0188,
-+ 0xa842, 0x02f0, 0xa086, 0x0010, 0x1120, 0xa39c, 0x00ff, 0xa39d,
-+ 0x0f00, 0xa3bc, 0x00ff, 0x2500, 0xa702, 0x0290, 0x2600, 0xa702,
-+ 0x1278, 0x2039, 0x003a, 0x6804, 0xa705, 0x6806, 0x6b0a, 0x6b0c,
-+ 0x73ce, 0x681c, 0x70da, 0x6c1e, 0x2091, 0x8001, 0x0804, 0x142c,
-+ 0x2091, 0x8001, 0x0804, 0x1426, 0x2138, 0x080c, 0x1cc4, 0x2091,
-+ 0x8000, 0x6a14, 0x6b1c, 0x2091, 0x8001, 0x70c8, 0x6816, 0x70cc,
-+ 0x681e, 0x2708, 0x0804, 0x1429, 0x70c4, 0x2061, 0xb380, 0x6114,
-+ 0x6016, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1904, 0x142b, 0x70c8,
-+ 0x2061, 0xb3c0, 0x6214, 0x6016, 0x0804, 0x142a, 0x72c8, 0x73cc,
-+ 0xa182, 0x0010, 0x1a04, 0x1425, 0x080c, 0x27de, 0x0804, 0x1429,
-+ 0x2138, 0x080c, 0x1cc4, 0x2091, 0x8000, 0x6a08, 0xa295, 0x0002,
-+ 0x6a0a, 0x2091, 0x8001, 0x2708, 0x0804, 0x142a, 0x2138, 0x080c,
-+ 0x1cc4, 0x2091, 0x8000, 0x6a08, 0xa294, 0xfff9, 0x6a0a, 0x6804,
-+ 0xa005, 0x0110, 0x080c, 0x260c, 0x2091, 0x8001, 0x2708, 0x0804,
-+ 0x142a, 0x2138, 0x080c, 0x1cc4, 0x2091, 0x8000, 0x6a08, 0xa295,
-+ 0x0004, 0x6a0a, 0x6804, 0xa005, 0x0110, 0x080c, 0x260c, 0x2091,
-+ 0x8001, 0x2708, 0x0804, 0x142a, 0x2138, 0x2041, 0x0001, 0x2049,
-+ 0x0005, 0x2051, 0x0020, 0x2091, 0x8000, 0x080c, 0x1cd8, 0x2091,
-+ 0x8001, 0x2708, 0x6a08, 0x0804, 0x142a, 0x2138, 0x780c, 0xd0e4,
-+ 0x1160, 0xd7fc, 0x0128, 0x080c, 0x1c2f, 0x0138, 0x0804, 0x142e,
-+ 0x080c, 0x1c25, 0x0110, 0x0804, 0x142e, 0x73c8, 0x72cc, 0x77c6,
-+ 0x73ca, 0x72ce, 0x080c, 0x1d63, 0x11e8, 0x6818, 0xa005, 0x01a0,
-+ 0x2708, 0x0076, 0x080c, 0x27fe, 0x007e, 0x1170, 0x2001, 0x0015,
-+ 0xd7fc, 0x1118, 0x2061, 0xb380, 0x0018, 0xc0fd, 0x2061, 0xb3c0,
-+ 0x7822, 0x2091, 0x8001, 0x0005, 0x2091, 0x8001, 0x2001, 0x4005,
-+ 0x0804, 0x142e, 0x2091, 0x8001, 0x0804, 0x142c, 0x2138, 0x780c,
-+ 0xd0e4, 0x1160, 0xd7fc, 0x0128, 0x080c, 0x1c2f, 0x0138, 0x0804,
-+ 0x142e, 0x080c, 0x1c25, 0x0110, 0x0804, 0x142e, 0x77c6, 0x2041,
-+ 0x0021, 0x2049, 0x0005, 0x2051, 0x0020, 0x2091, 0x8000, 0x080c,
-+ 0x1cd8, 0x2009, 0x0016, 0xd7fc, 0x1118, 0x2061, 0xb380, 0x0018,
-+ 0x2061, 0xb3c0, 0xc1fd, 0x606b, 0x0003, 0x6083, 0x0000, 0x677a,
-+ 0x6087, 0x000f, 0x7922, 0x61f0, 0xc1c4, 0x61f2, 0x080c, 0x260c,
-+ 0x2091, 0x8001, 0x0005, 0x77c8, 0x77ca, 0x2138, 0x77c6, 0x780c,
-+ 0xd0e4, 0x1160, 0xd7fc, 0x0128, 0x080c, 0x1c2f, 0x0138, 0x0804,
-+ 0x142e, 0x080c, 0x1c25, 0x0110, 0x0804, 0x142e, 0xa7bc, 0xff00,
-+ 0x2091, 0x8000, 0x2009, 0x0017, 0xd7fc, 0x1118, 0x2061, 0xb380,
-+ 0x0018, 0x2061, 0xb3c0, 0xc1fd, 0x6083, 0x0000, 0x606b, 0x0002,
-+ 0x677a, 0x6087, 0x000f, 0x7922, 0x61f0, 0xc1c4, 0x61f2, 0x080c,
-+ 0x260c, 0x2041, 0x0021, 0x2049, 0x0005, 0x2051, 0x0010, 0x70c8,
-+ 0xa005, 0x0118, 0x60f0, 0xc0fd, 0x60f2, 0x080c, 0x1cd8, 0x70c8,
-+ 0x6836, 0x8738, 0xa784, 0x001f, 0x1dc0, 0x2091, 0x8001, 0x0005,
-+ 0x2019, 0x0000, 0x2011, 0x0000, 0x7808, 0xd0ec, 0x1180, 0x72c8,
-+ 0x780c, 0xd0e4, 0x1160, 0xd284, 0x0128, 0x080c, 0x1c2f, 0x0138,
-+ 0x0804, 0x142e, 0x080c, 0x1c25, 0x0110, 0x0804, 0x142e, 0x72ca,
-+ 0x78ac, 0xa084, 0x0003, 0x1508, 0x2039, 0x0000, 0xd284, 0x0108,
-+ 0xc7fd, 0x2041, 0x0021, 0x2049, 0x0004, 0x2051, 0x0008, 0x080c,
-+ 0x1cc4, 0x2091, 0x8000, 0x6808, 0xc0d4, 0xa80d, 0x690a, 0x2091,
-+ 0x8001, 0x8738, 0xa784, 0x001f, 0x1d90, 0xa7bc, 0xff00, 0x873f,
-+ 0x8738, 0x873f, 0xa784, 0x0f00, 0x1d50, 0x2091, 0x8000, 0x7808,
-+ 0xd0ec, 0x0118, 0x2069, 0x0100, 0x0040, 0x72c8, 0xd284, 0x1118,
-+ 0x2069, 0x0200, 0x0010, 0x2069, 0x0100, 0x6808, 0xa084, 0xfffd,
-+ 0x680a, 0x6830, 0xa084, 0x0040, 0x01c0, 0x684b, 0x0004, 0x20a9,
-+ 0x0014, 0x6848, 0xa084, 0x0004, 0x0110, 0x1f04, 0x1901, 0x684b,
-+ 0x0009, 0x20a9, 0x0014, 0x6848, 0xa084, 0x0001, 0x0110, 0x1f04,
-+ 0x190b, 0x20a9, 0x00fa, 0x1f04, 0x1913, 0x2079, 0xb340, 0x2009,
-+ 0x0018, 0x7808, 0xd0ec, 0x1118, 0x72c8, 0xd284, 0x1118, 0x2061,
-+ 0xb380, 0x0018, 0x2061, 0xb3c0, 0xc1fd, 0x6083, 0x0000, 0x7922,
-+ 0x606b, 0x0001, 0x6087, 0x000f, 0x60c3, 0x0000, 0x60c4, 0x60ce,
-+ 0x60d2, 0x60f0, 0xd0b4, 0x0160, 0xc0b4, 0x60f2, 0x00c6, 0x60d4,
-+ 0xa065, 0x6008, 0xc0d4, 0x600a, 0x6018, 0x8001, 0x601a, 0x00ce,
-+ 0x60f0, 0xa084, 0x7eff, 0x60f2, 0x78ac, 0xa085, 0x0002, 0x78ae,
-+ 0x83ff, 0x0108, 0x0005, 0x681b, 0x0050, 0x2091, 0x8001, 0x0005,
-+ 0x73cc, 0x080c, 0x18aa, 0x69ec, 0x6a48, 0xa185, 0x1800, 0x684a,
-+ 0xa185, 0x0040, 0x68ee, 0x73cc, 0x2021, 0x0004, 0x20a9, 0x09ff,
-+ 0x1f04, 0x1960, 0x8421, 0x1dd0, 0x8319, 0x1db0, 0x69ee, 0x6a4a,
-+ 0x2091, 0x8001, 0x0005, 0xd7fc, 0x1118, 0x2069, 0xb380, 0x0010,
-+ 0x2069, 0xb3c0, 0x71c4, 0x71c6, 0x6912, 0x81ff, 0x1110, 0x68c3,
-+ 0x0001, 0x78ac, 0xa084, 0xfffd, 0x78ae, 0xa084, 0x0001, 0x1110,
-+ 0x080c, 0x1daf, 0x0005, 0x75d8, 0x74dc, 0x75da, 0x74de, 0x0018,
-+ 0x2029, 0x0000, 0x2520, 0x71c4, 0x73c8, 0x72cc, 0x71c6, 0x73ca,
-+ 0x72ce, 0x2079, 0xb340, 0x7dde, 0x7cda, 0x7bd6, 0x7ad2, 0x080c,
-+ 0x1c79, 0x0904, 0x1a7d, 0x20a9, 0x0005, 0x20a1, 0xb351, 0x2091,
-+ 0x8000, 0x41a1, 0x2091, 0x8001, 0x2009, 0x0040, 0x080c, 0x1fd6,
-+ 0x0120, 0x080c, 0x1c95, 0x0804, 0x1a7d, 0x6004, 0xa08c, 0x00ff,
-+ 0xa18e, 0x0009, 0x1120, 0x0006, 0x080c, 0x250a, 0x000e, 0xa084,
-+ 0xff00, 0x8007, 0x8009, 0x0904, 0x1a24, 0x00c6, 0x2c68, 0x080c,
-+ 0x1c79, 0x05a8, 0x2c00, 0x689e, 0x8109, 0x1dc0, 0x609f, 0x0000,
-+ 0x00ce, 0x00c6, 0x7ddc, 0x7cd8, 0x7bd4, 0x7ad0, 0xa290, 0x0040,
-+ 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x7dde, 0x7cda,
-+ 0x7bd6, 0x7ad2, 0x2c68, 0x689c, 0xa065, 0x0904, 0x1a23, 0x2009,
-+ 0x0040, 0x080c, 0x1fd6, 0x1548, 0x6004, 0xa084, 0x00ff, 0xa086,
-+ 0x0002, 0x1168, 0x6004, 0xa084, 0x00ff, 0xa086, 0x000a, 0x1120,
-+ 0x0016, 0x080c, 0x2507, 0x001e, 0x2d00, 0x6002, 0x0898, 0x00ce,
-+ 0x00c6, 0x609c, 0x080c, 0x1d24, 0x00ce, 0x609f, 0x0000, 0x080c,
-+ 0x1a81, 0x2009, 0x000c, 0x6008, 0xa085, 0x0200, 0x600a, 0x080c,
-+ 0x1c39, 0x080c, 0x1c95, 0x0804, 0x1a7d, 0x00ce, 0x00c6, 0x609c,
-+ 0x080c, 0x1d24, 0x00ce, 0x609f, 0x0000, 0x080c, 0x1a81, 0x2009,
-+ 0x000c, 0x6007, 0x0103, 0x601b, 0x0003, 0x080c, 0x1c39, 0x080c,
-+ 0x1c95, 0x0804, 0x1a7d, 0x00ce, 0x780c, 0xd0e4, 0x11e8, 0x6114,
-+ 0xd1fc, 0x0120, 0x080c, 0x1c2f, 0x01b8, 0x0018, 0x080c, 0x1c25,
-+ 0x0198, 0x2029, 0x0000, 0x2520, 0x2009, 0x0018, 0x73c8, 0x72cc,
-+ 0x6087, 0x0103, 0x601b, 0x0021, 0x080c, 0x1c39, 0x080c, 0x1c95,
-+ 0x2001, 0x4007, 0x0804, 0x142e, 0x74c4, 0x73c8, 0x72cc, 0x6014,
-+ 0x2091, 0x8000, 0x00e6, 0x2009, 0x0012, 0xd0fc, 0x1118, 0x2071,
-+ 0xb380, 0x0018, 0x2071, 0xb3c0, 0xc1fd, 0x7922, 0x706b, 0x0005,
-+ 0x71f0, 0xc1c4, 0x71f2, 0x736e, 0x7272, 0x7476, 0x707a, 0x707f,
-+ 0x0000, 0x2c00, 0x7082, 0xa02e, 0x2530, 0x611c, 0x61a2, 0xa184,
-+ 0x0060, 0x0110, 0x080c, 0x5365, 0x00ee, 0x6596, 0x65a6, 0x669a,
-+ 0x66aa, 0x60af, 0x0000, 0x60b3, 0x0000, 0x6714, 0x6023, 0x0000,
-+ 0x080c, 0x260c, 0x2091, 0x8001, 0x0005, 0x70c3, 0x4005, 0x0804,
-+ 0x142f, 0x20a9, 0x0005, 0x2099, 0xb351, 0x2091, 0x8000, 0x530a,
-+ 0x2091, 0x8001, 0x2100, 0xa210, 0xa399, 0x0000, 0xa4a1, 0x0000,
-+ 0xa5a9, 0x0000, 0x0005, 0x71c4, 0x70c7, 0x0000, 0x7916, 0x0804,
-+ 0x142c, 0x71c4, 0x71c6, 0x2168, 0x0010, 0x2069, 0x1000, 0x690c,
-+ 0xa016, 0x2d04, 0xa210, 0x8d68, 0x8109, 0x1dd8, 0xa285, 0x0000,
-+ 0x1118, 0x70c3, 0x4000, 0x0010, 0x70c3, 0x4003, 0x70ca, 0x0804,
-+ 0x142f, 0x2011, 0xb3a4, 0xa03e, 0x7908, 0xd1ec, 0x11a0, 0x77c8,
-+ 0xd7fc, 0x0110, 0x2011, 0xb3e4, 0x220c, 0x0006, 0x0036, 0x0046,
-+ 0x080c, 0x44c8, 0x70c4, 0xd0fc, 0x004e, 0x003e, 0x000e, 0x1118,
-+ 0xa184, 0x7fff, 0x0020, 0x080c, 0x44ac, 0xa185, 0x8000, 0x2012,
-+ 0x2710, 0x0804, 0x142a, 0x0016, 0x2100, 0xc1fc, 0x080c, 0x449c,
-+ 0x001e, 0xd1fc, 0x1118, 0x2001, 0xb3a4, 0x0010, 0x2001, 0xb3e4,
-+ 0x2004, 0xa084, 0x8000, 0x6100, 0xa10d, 0x6204, 0x6308, 0x0804,
-+ 0x1429, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2091, 0x8000, 0x2061,
-+ 0x0010, 0x60c4, 0xd0fc, 0x1178, 0x2071, 0xb380, 0x7808, 0xd0ec,
-+ 0x0128, 0x2079, 0x0100, 0x2019, 0x0020, 0x0058, 0x2079, 0x0200,
-+ 0x2019, 0x0050, 0x0030, 0x2071, 0xb3c0, 0x2079, 0x0100, 0x2019,
-+ 0x0020, 0x7094, 0xa06d, 0x0904, 0x1bb1, 0x6a04, 0xa294, 0x00ff,
-+ 0xa286, 0x0007, 0x0120, 0xa286, 0x000f, 0x1904, 0x1bb1, 0x691c,
-+ 0xa184, 0x00c0, 0x0904, 0x1bb1, 0xa186, 0x00c0, 0x0904, 0x1bb1,
-+ 0x6824, 0xa084, 0xff00, 0xa085, 0x0019, 0x6826, 0x2368, 0x7830,
-+ 0xa084, 0x0040, 0x1de0, 0xa184, 0x0080, 0x1904, 0x1b87, 0x78e4,
-+ 0xa084, 0x0007, 0x8001, 0x1dd8, 0x71a4, 0x81ff, 0x0150, 0x6807,
-+ 0x0010, 0x6908, 0x6808, 0xa106, 0x1de0, 0x6804, 0xa084, 0x0010,
-+ 0x1de0, 0x78b8, 0x8007, 0xa084, 0x007f, 0x1dd8, 0x7848, 0xa085,
-+ 0x000c, 0x784a, 0x71a4, 0x81ff, 0x0180, 0x70a7, 0x0000, 0x6807,
-+ 0x0018, 0x6804, 0xa084, 0x0008, 0x1de0, 0x6807, 0x0008, 0x6804,
-+ 0xa084, 0x0008, 0x1de0, 0x6807, 0x0002, 0x61c4, 0xa18c, 0x0003,
-+ 0x0904, 0x1bad, 0x62c8, 0x63cc, 0x61c6, 0x62ca, 0x63ce, 0x7848,
-+ 0xa084, 0x000c, 0x1de0, 0x00e6, 0x2071, 0xb340, 0x724a, 0x734e,
-+ 0xae80, 0x0012, 0x00ee, 0x080c, 0x51f4, 0x78a3, 0x0000, 0x7858,
-+ 0xa084, 0xedff, 0x785a, 0x70a8, 0xa080, 0x00f3, 0x781a, 0x00fe,
-+ 0x00ee, 0x00de, 0x00ce, 0x2091, 0x8001, 0x0804, 0x142c, 0x78e4,
-+ 0xa084, 0x0007, 0x1de0, 0x78b8, 0x8007, 0xa084, 0x007f, 0x1dd8,
-+ 0x7848, 0xa085, 0x000c, 0x784a, 0x7848, 0xa084, 0x000c, 0x1de0,
-+ 0x71a4, 0x81ff, 0x0190, 0x6807, 0x0010, 0x70a7, 0x0000, 0x6807,
-+ 0x0018, 0x6804, 0xa084, 0x0008, 0x1de0, 0x6807, 0x0008, 0x6804,
-+ 0xa084, 0x0008, 0x1de0, 0x6807, 0x0002, 0x70a8, 0xa080, 0x00b7,
-+ 0x0868, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x2091, 0x8001, 0x2001,
-+ 0x4005, 0x0804, 0x142e, 0x7958, 0x71c6, 0x71c4, 0xa182, 0x0003,
-+ 0x1a04, 0x1425, 0x795a, 0x0804, 0x142c, 0x7958, 0x71c6, 0x0804,
-+ 0x142c, 0x7900, 0x71c6, 0x71c4, 0x7902, 0x0804, 0x142c, 0x7900,
-+ 0x71c6, 0x0804, 0x142c, 0x7904, 0x70c4, 0x7806, 0xd094, 0x0140,
-+ 0x70c8, 0x78f2, 0x70cc, 0x78f6, 0x70d8, 0x78fa, 0x70dc, 0x78fe,
-+ 0x0804, 0x142b, 0x7804, 0x70c6, 0xd094, 0x0140, 0x78f0, 0x70ca,
-+ 0x78f4, 0x70ce, 0x78f8, 0x70da, 0x78fc, 0x70de, 0x0804, 0x142c,
-+ 0x71c4, 0xd1fc, 0x1118, 0x2011, 0xb800, 0x0010, 0x2011, 0xb900,
-+ 0x8107, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0x8003, 0xa268,
-+ 0x2011, 0x0000, 0x6814, 0xd0fc, 0x0110, 0xa295, 0x0200, 0xd0b4,
-+ 0x0110, 0xa295, 0x0001, 0x6b0c, 0x6800, 0x70da, 0x6820, 0x70de,
-+ 0x0804, 0x1429, 0x780c, 0xd0f4, 0x0130, 0x2001, 0x4007, 0x70db,
-+ 0x0000, 0xa005, 0x0048, 0xd0fc, 0x0130, 0x2001, 0x4007, 0x70db,
-+ 0x0001, 0xa005, 0x0008, 0xa006, 0x0005, 0x780c, 0xd0f4, 0x0128,
-+ 0x2001, 0x4007, 0x70db, 0x0000, 0x0008, 0xa006, 0x0005, 0x780c,
-+ 0xd0fc, 0x0128, 0x2001, 0x4007, 0x70db, 0x0001, 0x0008, 0xa006,
-+ 0x0005, 0xac80, 0x0001, 0x080c, 0x1e7a, 0x0005, 0x7112, 0x7003,
-+ 0x0001, 0x7007, 0x0001, 0x2099, 0x0030, 0x20a9, 0x0020, 0xac80,
-+ 0x0001, 0x20a0, 0x7008, 0xd0fc, 0x0de8, 0x7007, 0x0002, 0xa08c,
-+ 0x01e0, 0x1510, 0x53a5, 0x7884, 0xa005, 0x01e8, 0x0411, 0x0148,
-+ 0x2c00, 0x788a, 0x20a9, 0x0020, 0xac80, 0x0001, 0x20a0, 0x53a5,
-+ 0x0090, 0x7887, 0x0000, 0x7218, 0x731c, 0x7420, 0x7524, 0xa292,
-+ 0x0040, 0xa39b, 0x0000, 0xa4a3, 0x0000, 0xa5ab, 0x0000, 0x721a,
-+ 0x731e, 0x7422, 0x7526, 0xa006, 0x7003, 0x0000, 0x7007, 0x0004,
-+ 0x0005, 0x2091, 0x8000, 0x783c, 0xa065, 0x0120, 0x2c04, 0x783e,
-+ 0x2063, 0x0000, 0x2091, 0x8001, 0x0005, 0x00f6, 0x2079, 0xb340,
-+ 0x783c, 0xa06d, 0x0140, 0x2d04, 0x783e, 0x6803, 0x0000, 0x6807,
-+ 0x0000, 0x680b, 0x0000, 0x00fe, 0x0005, 0x2091, 0x8000, 0x00f6,
-+ 0x2079, 0xb340, 0x783c, 0x2062, 0x2c00, 0xa005, 0x1110, 0x080c,
-+ 0x297f, 0x783e, 0x00fe, 0x2091, 0x8001, 0x0005, 0x00f6, 0x2079,
-+ 0xb340, 0x783c, 0x206a, 0x2d00, 0x783e, 0x00fe, 0x0005, 0x3800,
-+ 0xa084, 0x0003, 0x0118, 0x2011, 0x1100, 0x0010, 0x2011, 0x5d00,
-+ 0x7a3e, 0x7bc4, 0x8319, 0x0128, 0xa280, 0x0037, 0x2012, 0x2010,
-+ 0x0cc8, 0x2013, 0x0000, 0x0005, 0x0016, 0x2069, 0xda00, 0xd7fc,
-+ 0x1110, 0x2069, 0xba00, 0xa784, 0x0f00, 0x800b, 0xa784, 0x001f,
-+ 0x8003, 0x8003, 0x8003, 0x8003, 0xa105, 0xad68, 0x001e, 0x0005,
-+ 0x0c59, 0x2900, 0x682a, 0x2a00, 0x682e, 0x6808, 0xa084, 0xf9ef,
-+ 0xa80d, 0x690a, 0x00e6, 0xd7fc, 0x1128, 0x2009, 0xb394, 0x2071,
-+ 0xb380, 0x0020, 0x2009, 0xb3d4, 0x2071, 0xb3c0, 0x210c, 0x6804,
-+ 0xa005, 0x0148, 0xa116, 0x1138, 0x2060, 0x6000, 0x6806, 0x0016,
-+ 0x200b, 0x0000, 0x0018, 0x2009, 0x0000, 0x0016, 0x6804, 0xa065,
-+ 0x0148, 0x6000, 0x6806, 0x04b9, 0x080c, 0x2076, 0x6810, 0x8001,
-+ 0x6812, 0x1da0, 0x001e, 0x6902, 0x6906, 0x2d00, 0x2060, 0x080c,
-+ 0x2af4, 0x00ee, 0x0005, 0xa065, 0x0170, 0x2008, 0x609c, 0xa005,
-+ 0x0128, 0x2062, 0x609f, 0x0000, 0xa065, 0x0cc0, 0x2079, 0xb340,
-+ 0x783c, 0x793e, 0x2062, 0x0005, 0xa065, 0x01a0, 0x2008, 0x609c,
-+ 0xa005, 0x0128, 0x2062, 0x609f, 0x0000, 0xa065, 0x0cc0, 0x00f6,
-+ 0x2079, 0xb340, 0x2091, 0x8000, 0x783c, 0x793e, 0x00fe, 0x2062,
-+ 0x2091, 0x8001, 0x0005, 0x6007, 0x0103, 0x608f, 0x0000, 0x20a9,
-+ 0x001c, 0xac80, 0x0005, 0x20a0, 0x2001, 0x0000, 0x40a4, 0x6828,
-+ 0x601a, 0x682c, 0x6022, 0x0005, 0x00e6, 0xd7fc, 0x1128, 0x2071,
-+ 0xb380, 0x2031, 0xb400, 0x0020, 0x2071, 0xb3c0, 0x2031, 0xb600,
-+ 0x7054, 0xa08c, 0x0200, 0x1128, 0xa608, 0x2d0a, 0x8000, 0x7056,
-+ 0xa006, 0x00ee, 0x0005, 0x00f6, 0xd7fc, 0x1118, 0x2079, 0xb380,
-+ 0x0010, 0x2079, 0xb3c0, 0x080c, 0x1cc4, 0x2091, 0x8000, 0x6804,
-+ 0x7806, 0xa065, 0x05d0, 0x0028, 0x2c00, 0x7806, 0x6000, 0xa065,
-+ 0x05a0, 0x6010, 0xa306, 0x1dc0, 0x600c, 0xa206, 0x1da8, 0x2c28,
-+ 0x7850, 0xac06, 0x1108, 0x0430, 0x6804, 0xac06, 0x1140, 0x6000,
-+ 0x2060, 0x6806, 0xa005, 0x1118, 0x6803, 0x0000, 0x0048, 0x6400,
-+ 0x7804, 0x2060, 0x6402, 0xa486, 0x0000, 0x1110, 0x2c00, 0x6802,
-+ 0x2560, 0x00fe, 0x080c, 0x1d3b, 0x00f6, 0x601b, 0x0005, 0x6023,
-+ 0x0020, 0x00fe, 0x080c, 0x2076, 0x00f6, 0x6810, 0x8001, 0x0b0c,
-+ 0x297f, 0x6812, 0xa085, 0xffff, 0xa005, 0x00fe, 0x0005, 0x0076,
-+ 0x2700, 0x2039, 0x0000, 0xd0fc, 0x0108, 0xc7fd, 0x2041, 0x0021,
-+ 0x2049, 0x0004, 0x2051, 0x0008, 0x2091, 0x8000, 0x080c, 0x1cd8,
-+ 0x8738, 0xa784, 0x001f, 0x1dd0, 0xa7bc, 0xff00, 0x873f, 0x8738,
-+ 0x873f, 0xa784, 0x0f00, 0x1d90, 0x2091, 0x8001, 0x007e, 0x0005,
-+ 0x2061, 0x0000, 0x6018, 0xa084, 0x0001, 0x11b8, 0x7808, 0xd08c,
-+ 0x0130, 0xc08c, 0x780a, 0xc7fc, 0x2069, 0xb380, 0x0028, 0xc08d,
-+ 0x780a, 0x2069, 0xb3c0, 0xc7fd, 0x2091, 0x8000, 0x6818, 0x681b,
-+ 0x0000, 0x2091, 0x8001, 0xa005, 0x1108, 0x0005, 0xa08c, 0xfff0,
-+ 0x0110, 0x080c, 0x297f, 0x0002, 0x1e04, 0x1e07, 0x1e0d, 0x1e11,
-+ 0x1e05, 0x1e15, 0x1e1b, 0x1e05, 0x1e05, 0x1f85, 0x1faf, 0x1fb2,
-+ 0x1fb7, 0x1e05, 0x1e05, 0x1e05, 0x0005, 0x080c, 0x297f, 0x080c,
-+ 0x1daf, 0x2001, 0x8001, 0x0804, 0x1fc7, 0x2001, 0x8003, 0x0804,
-+ 0x1fc7, 0x2001, 0x8004, 0x0804, 0x1fc7, 0x080c, 0x1daf, 0x2001,
-+ 0x8006, 0x0804, 0x1fc7, 0x2001, 0x8007, 0x0804, 0x1fc7, 0x2030,
-+ 0x2138, 0xa782, 0x0021, 0x0210, 0x2009, 0x0020, 0x2600, 0x0099,
-+ 0x1188, 0xa7ba, 0x0020, 0x0268, 0x0160, 0x2708, 0xa6b0, 0x0020,
-+ 0xa290, 0x0040, 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000,
-+ 0x0c40, 0xa006, 0x0005, 0x81ff, 0x01f0, 0x2099, 0x0030, 0x20a0,
-+ 0x700c, 0xa084, 0x07ff, 0x0130, 0x7007, 0x0004, 0x7004, 0xa084,
-+ 0x0004, 0x1de0, 0x21a8, 0x810b, 0x7112, 0x7003, 0x0001, 0x7007,
-+ 0x0001, 0x7008, 0x800b, 0x1ee8, 0x7007, 0x0002, 0xa08c, 0x01e0,
-+ 0x1110, 0x53a5, 0xa006, 0x7003, 0x0000, 0x0005, 0x2030, 0x2138,
-+ 0xa782, 0x0021, 0x0210, 0x2009, 0x0020, 0x2600, 0x0099, 0x1188,
-+ 0xa7ba, 0x0020, 0x0268, 0x0160, 0x2708, 0xa6b0, 0x0020, 0xa290,
-+ 0x0040, 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x0c40,
-+ 0xa006, 0x0005, 0x81ff, 0x0588, 0x2098, 0x20a1, 0x0030, 0x700c,
-+ 0xa084, 0x07ff, 0x0100, 0x21a8, 0x810b, 0x7112, 0x7018, 0x0006,
-+ 0x701c, 0x0006, 0x7020, 0x0006, 0x7024, 0x0006, 0x721a, 0x731e,
-+ 0x7422, 0x7526, 0x7003, 0x0000, 0x53a6, 0x7007, 0x0001, 0x7010,
-+ 0xa084, 0xf000, 0x0118, 0x7007, 0x0008, 0x0018, 0x7108, 0x8103,
-+ 0x1eb0, 0x000e, 0x7026, 0x000e, 0x7022, 0x000e, 0x701e, 0x000e,
-+ 0x701a, 0x7007, 0x0002, 0xa184, 0x01e0, 0x7003, 0x0000, 0x7007,
-+ 0x0004, 0x0005, 0x00e6, 0x6914, 0xd1fc, 0x0118, 0x2071, 0xb3c0,
-+ 0x0010, 0x2071, 0xb380, 0x2d08, 0x70b4, 0x6802, 0xa005, 0x1108,
-+ 0x71ba, 0x71b6, 0x00ee, 0x0005, 0x00f6, 0x6114, 0xd1fc, 0x0118,
-+ 0x2079, 0xb3c0, 0x0010, 0x2079, 0xb380, 0x2c08, 0x78b4, 0x6002,
-+ 0xa005, 0x1108, 0x79ba, 0x79b6, 0x00fe, 0x0005, 0x2091, 0x8000,
-+ 0x00f6, 0x6114, 0xd1fc, 0x0118, 0x2079, 0xb3c0, 0x0010, 0x2079,
-+ 0xb380, 0x6003, 0x0000, 0x2c08, 0x78b8, 0xa065, 0x1110, 0x79b6,
-+ 0x0008, 0x6102, 0x79ba, 0x00fe, 0x2091, 0x8001, 0x080c, 0x2636,
-+ 0x0005, 0x70b4, 0xa06d, 0x0130, 0x6800, 0x70b6, 0xa005, 0x1108,
-+ 0x70ba, 0x8dff, 0x0005, 0x00d6, 0x00c6, 0x00f6, 0xd3fc, 0x0118,
-+ 0x2079, 0xb3c0, 0x0010, 0x2079, 0xb380, 0xaf80, 0x002d, 0x2060,
-+ 0x6000, 0xa005, 0x01e0, 0x2068, 0x6814, 0xa306, 0x1128, 0x6828,
-+ 0xa084, 0x00ff, 0xa406, 0x0110, 0x2d60, 0x0c90, 0x6800, 0xa005,
-+ 0x6002, 0x1130, 0xaf80, 0x002d, 0xac06, 0x0108, 0x2c00, 0x78ba,
-+ 0x00d6, 0x689c, 0xa005, 0x0110, 0x080c, 0x1d13, 0x000e, 0x00fe,
-+ 0x00ce, 0x00de, 0xa005, 0x0005, 0x00d6, 0x00c6, 0x00f6, 0xd0fc,
-+ 0x0118, 0x2079, 0xb3c0, 0x0010, 0x2079, 0xb380, 0xaf80, 0x002d,
-+ 0x2060, 0x6000, 0xa005, 0x01c8, 0x2068, 0x6814, 0xa084, 0x00ff,
-+ 0xa306, 0x0110, 0x2d60, 0x0ca8, 0x6800, 0xa005, 0x6002, 0x1130,
-+ 0xaf80, 0x002d, 0xac06, 0x0108, 0x2c00, 0x78ba, 0x00d6, 0x689c,
-+ 0xa005, 0x0110, 0x080c, 0x1d13, 0x000e, 0x00fe, 0x00ce, 0x00de,
-+ 0xa005, 0x0005, 0x00d6, 0x00c6, 0x00f6, 0xd3fc, 0x0118, 0x2079,
-+ 0xb3c0, 0x0010, 0x2079, 0xb380, 0xaf80, 0x002d, 0x2060, 0x6000,
-+ 0xa06d, 0x01b0, 0x6814, 0xa306, 0x0110, 0x2d60, 0x0cc0, 0x6800,
-+ 0xa005, 0x6002, 0x1130, 0xaf80, 0x002d, 0xac06, 0x0108, 0x2c00,
-+ 0x78ba, 0x00d6, 0x689c, 0xa005, 0x0110, 0x080c, 0x1d13, 0x000e,
-+ 0x00fe, 0x00ce, 0x00de, 0xa005, 0x0005, 0x2091, 0x8000, 0xd7fc,
-+ 0x1118, 0x2069, 0xb380, 0x0010, 0x2069, 0xb3c0, 0x6800, 0xa086,
-+ 0x0000, 0x0128, 0x2091, 0x8001, 0x681b, 0x0009, 0x0005, 0x6878,
-+ 0xd7fc, 0x1108, 0x0008, 0xc0fd, 0xa0bc, 0xff00, 0x2041, 0x0021,
-+ 0x2049, 0x0004, 0x2051, 0x0010, 0x080c, 0x1cd8, 0x8738, 0xa784,
-+ 0x001f, 0x1dd0, 0x2091, 0x8001, 0x2001, 0x800a, 0x00c0, 0x2001,
-+ 0x800c, 0x00a8, 0x080c, 0x1daf, 0x2001, 0x800d, 0x0080, 0x780c,
-+ 0xd0e4, 0x1158, 0xd0ec, 0x0120, 0xd7fc, 0x0110, 0x78e4, 0x0008,
-+ 0x78e0, 0x70c6, 0x2001, 0x800e, 0x0010, 0x0804, 0x1e05, 0x70c2,
-+ 0xd7fc, 0x1118, 0x70db, 0x0000, 0x0010, 0x70db, 0x0001, 0x2061,
-+ 0x0000, 0x601b, 0x0001, 0x2091, 0x4080, 0x0005, 0xac80, 0x0001,
-+ 0x81ff, 0x0518, 0x2099, 0x0030, 0x20a0, 0x700c, 0xa084, 0x07ff,
-+ 0x0100, 0x7018, 0x0006, 0x701c, 0x0006, 0x7020, 0x0006, 0x7024,
-+ 0x0006, 0x7112, 0x81ac, 0x721a, 0x731e, 0x7422, 0x7526, 0x7003,
-+ 0x0001, 0x7007, 0x0001, 0x7008, 0x800b, 0x1ee8, 0x7007, 0x0002,
-+ 0xa08c, 0x01e0, 0x1110, 0x53a5, 0xa006, 0x7003, 0x0000, 0x7007,
-+ 0x0004, 0x000e, 0x7026, 0x000e, 0x7022, 0x000e, 0x701e, 0x000e,
-+ 0x701a, 0x0005, 0x2011, 0x0020, 0x2009, 0x0010, 0x6b0a, 0x6c0e,
-+ 0x681f, 0x0201, 0x6803, 0xfd20, 0x6807, 0x0038, 0x6a1a, 0x6823,
-+ 0x0200, 0x6827, 0x0000, 0x2d00, 0xa0e8, 0x0010, 0xa290, 0x0004,
-+ 0x8109, 0x1d60, 0x0005, 0x70ec, 0xd0dc, 0x1520, 0x2029, 0x0001,
-+ 0x780c, 0xd0cc, 0x1160, 0x70ec, 0xd0e4, 0x2019, 0x0c0a, 0x2021,
-+ 0x000a, 0x1120, 0x2019, 0x0c0c, 0x2021, 0x000c, 0x0070, 0x70ec,
-+ 0xd0e4, 0x1128, 0x2019, 0x1c0c, 0x2021, 0x000c, 0x0030, 0x2019,
-+ 0x1c09, 0x2021, 0x0009, 0xa5ad, 0x0200, 0x6b0a, 0x6c0e, 0x6d1e,
-+ 0x6807, 0x0038, 0x0005, 0x7018, 0x0006, 0x701c, 0x0006, 0x7020,
-+ 0x0006, 0x7024, 0x0006, 0x721a, 0x731e, 0x7422, 0x7526, 0x7003,
-+ 0x0000, 0x7007, 0x0001, 0x7010, 0xa084, 0xf000, 0x0118, 0x7007,
-+ 0x0008, 0x0018, 0x7108, 0x8103, 0x1eb0, 0x000e, 0x7026, 0x000e,
-+ 0x7022, 0x000e, 0x701e, 0x000e, 0x701a, 0x7007, 0x0002, 0xa184,
-+ 0x01e0, 0x7003, 0x0000, 0x7007, 0x0004, 0x0005, 0x6004, 0x2c08,
-+ 0x2063, 0x0000, 0x785c, 0x8000, 0x785e, 0x7860, 0xa005, 0x7962,
-+ 0x0110, 0x2c02, 0x0008, 0x7966, 0x0005, 0x6807, 0x0103, 0x00c6,
-+ 0x2061, 0xb340, 0x2d08, 0x206b, 0x0000, 0x605c, 0x8000, 0x605e,
-+ 0x6060, 0xa005, 0x6162, 0x0110, 0x2d02, 0x0008, 0x6166, 0x00ce,
-+ 0x0005, 0x2091, 0x8000, 0x785c, 0x8001, 0x785e, 0x2c04, 0x7866,
-+ 0xa005, 0x1108, 0x7862, 0x2091, 0x8001, 0x609c, 0xa005, 0x01a8,
-+ 0x00c6, 0x2060, 0x2008, 0x609c, 0xa005, 0x0138, 0x2062, 0x609f,
-+ 0x0000, 0xa065, 0x609c, 0xa005, 0x1dc8, 0x2091, 0x8000, 0x783c,
-+ 0x793e, 0x2062, 0x2091, 0x8001, 0x00ce, 0x2091, 0x8000, 0x783c,
-+ 0x2062, 0x609f, 0x0000, 0x2c00, 0xa005, 0x1110, 0x080c, 0x297f,
-+ 0x783e, 0x2091, 0x8001, 0x0005, 0x7864, 0xa065, 0x0168, 0x2091,
-+ 0x8000, 0x785c, 0x8001, 0x785e, 0x2c04, 0x7866, 0xa005, 0x1110,
-+ 0x7862, 0x8000, 0x2091, 0x8001, 0x0005, 0x20a9, 0x0010, 0xa006,
-+ 0x8004, 0x8086, 0x818e, 0x1208, 0xa200, 0x1f04, 0x20e1, 0x8086,
-+ 0x818e, 0x0005, 0x0156, 0x20a9, 0x0010, 0xa005, 0x01b8, 0xa11a,
-+ 0x12a8, 0x8213, 0x818d, 0x0228, 0xa11a, 0x1220, 0x1f04, 0x20f1,
-+ 0x0028, 0xa11a, 0x2308, 0x8210, 0x1f04, 0x20f1, 0x0006, 0x3200,
-+ 0xa084, 0xefff, 0x2080, 0x000e, 0x015e, 0x0005, 0x0006, 0x3200,
-+ 0xa085, 0x1000, 0x0cb8, 0x7d6c, 0x70d0, 0xa506, 0x0904, 0x218e,
-+ 0x7808, 0xd0ec, 0x0190, 0x00e6, 0x2091, 0x8000, 0x2071, 0x0020,
-+ 0x7004, 0xa005, 0x1138, 0x7008, 0x00ee, 0xa086, 0x0008, 0x0128,
-+ 0x0804, 0x218e, 0x00ee, 0x0804, 0x218e, 0x080c, 0x1c79, 0x0904,
-+ 0x218e, 0x7968, 0x2500, 0x8000, 0xa112, 0x2009, 0x0040, 0x1210,
-+ 0xa006, 0x0038, 0x72d0, 0xa206, 0x0120, 0x7887, 0x0001, 0x2009,
-+ 0x0080, 0x00c6, 0x080c, 0x1c3e, 0x00ce, 0x05d8, 0x080c, 0x1c95,
-+ 0x7887, 0x0000, 0x7880, 0x8000, 0x7882, 0xa086, 0x0002, 0x01a0,
-+ 0x8507, 0x8004, 0x8004, 0x7974, 0xa108, 0x711a, 0x1260, 0x7970,
-+ 0xa189, 0x0000, 0x711e, 0x797c, 0xa189, 0x0000, 0x7122, 0x7978,
-+ 0xa189, 0x0000, 0x7126, 0x0490, 0x6014, 0xd0fc, 0x1118, 0x2069,
-+ 0xb380, 0x0010, 0x2069, 0xb3c0, 0x2091, 0x8000, 0x681b, 0x0002,
-+ 0x7884, 0xa005, 0x0128, 0x7887, 0x0000, 0x7888, 0x2060, 0x0c60,
-+ 0x7883, 0x0000, 0x78ac, 0xa085, 0x0003, 0x78ae, 0x2091, 0x8001,
-+ 0x00a8, 0x7883, 0x0000, 0x080c, 0x24c9, 0x6004, 0xa084, 0x000f,
-+ 0x0071, 0x7884, 0xa005, 0x0130, 0x7888, 0x2060, 0x6004, 0xa084,
-+ 0x000f, 0x0029, 0x7887, 0x0000, 0x0804, 0x210b, 0x0005, 0x0002,
-+ 0x21a0, 0x21bb, 0x21d6, 0x21a0, 0x21ef, 0x21af, 0x2341, 0x2357,
-+ 0x21a0, 0x21b9, 0x21d4, 0x2232, 0x22a0, 0x22e9, 0x22fa, 0x2357,
-+ 0x2039, 0x0400, 0x78bc, 0xa705, 0x78be, 0x6008, 0xa705, 0x600a,
-+ 0x080c, 0x23ca, 0x609c, 0x78ba, 0x080c, 0x24b3, 0x0005, 0x78bc,
-+ 0xa084, 0x0100, 0x0108, 0x0c60, 0x601c, 0xa085, 0x0080, 0x601e,
-+ 0x0038, 0x080c, 0x250a, 0x78bc, 0xa084, 0x0100, 0x0108, 0x0c00,
-+ 0x78bf, 0x0000, 0x6004, 0x8007, 0xa084, 0x00ff, 0x78b2, 0x8001,
-+ 0x0140, 0x080c, 0x23ca, 0x0128, 0x78bc, 0xa085, 0x0100, 0x78be,
-+ 0x0010, 0x0804, 0x23e6, 0x0005, 0x080c, 0x2507, 0x78bc, 0xa08c,
-+ 0x0e00, 0x1118, 0xa084, 0x0100, 0x1108, 0x0810, 0x080c, 0x23ca,
-+ 0x1168, 0x6104, 0xa18c, 0x00ff, 0xa186, 0x0007, 0x0904, 0x2394,
-+ 0xa186, 0x000f, 0x0904, 0x2394, 0x0804, 0x23e6, 0x0005, 0x78bc,
-+ 0xa084, 0x0100, 0x0110, 0x0804, 0x21a0, 0x78bf, 0x0000, 0x6714,
-+ 0x080c, 0x1cc4, 0x2011, 0x0001, 0x20a9, 0x0001, 0x6018, 0xa084,
-+ 0x00ff, 0xa005, 0x0198, 0x2011, 0x0001, 0xa7bc, 0xff00, 0x20a9,
-+ 0x0020, 0xa08e, 0x0001, 0x0150, 0xa7bc, 0x8000, 0x2011, 0x0002,
-+ 0x20a9, 0x0100, 0xa08e, 0x0002, 0x0108, 0x00c8, 0x0156, 0x080c,
-+ 0x1cc4, 0x015e, 0x2091, 0x8000, 0x682b, 0x0000, 0x682f, 0x0000,
-+ 0x6808, 0xa084, 0xffde, 0x680a, 0xade8, 0x0010, 0x2091, 0x8001,
-+ 0x1f04, 0x221a, 0x8211, 0x0118, 0x20a9, 0x0100, 0x0c58, 0x080c,
-+ 0x1c95, 0x0005, 0x6114, 0x080c, 0x2525, 0x6900, 0xa184, 0x0001,
-+ 0x0190, 0x6028, 0xa084, 0x00ff, 0x1904, 0x23ae, 0x6800, 0xa084,
-+ 0x0001, 0x0904, 0x23b4, 0x6803, 0x0000, 0x680b, 0x0000, 0x6807,
-+ 0x0000, 0x0804, 0x23ba, 0x2011, 0x0001, 0x6020, 0xd0f4, 0x0110,
-+ 0xa295, 0x0002, 0xd0c4, 0x0110, 0xa295, 0x0008, 0xd0cc, 0x0110,
-+ 0xa295, 0x0400, 0x601c, 0xa084, 0x0002, 0x0110, 0xa295, 0x0004,
-+ 0x602c, 0xa08c, 0x00ff, 0xa182, 0x0002, 0x0a04, 0x23b7, 0xa182,
-+ 0x001b, 0x1a04, 0x23b7, 0x0904, 0x23b7, 0x690e, 0x602c, 0x8007,
-+ 0xa08c, 0x00ff, 0xa182, 0x0002, 0x0a04, 0x23b7, 0xa182, 0x001b,
-+ 0x1a04, 0x23b7, 0x0904, 0x23b7, 0x6912, 0x6134, 0xa184, 0x000f,
-+ 0x0138, 0x8000, 0xd0a4, 0x0108, 0x8001, 0xa18c, 0xfff0, 0xa10d,
-+ 0x6922, 0x6030, 0xa005, 0x1110, 0x2001, 0x001e, 0x8000, 0x6816,
-+ 0x6028, 0xa084, 0x00ff, 0x0904, 0x23b4, 0x6806, 0x6028, 0x8007,
-+ 0xa084, 0x00ff, 0x0904, 0x23b4, 0x680a, 0x6a02, 0x0804, 0x23ba,
-+ 0x6014, 0xd0fc, 0x1118, 0x2001, 0xb3a4, 0x0010, 0x2001, 0xb3e4,
-+ 0x2004, 0xa084, 0x8000, 0x0904, 0x23b4, 0x6114, 0x080c, 0x2525,
-+ 0x2091, 0x8000, 0x6a04, 0x6b08, 0x6418, 0xa484, 0x0003, 0x0170,
-+ 0x6128, 0xa18c, 0x00ff, 0x8001, 0x1120, 0x2100, 0xa210, 0x0628,
-+ 0x0028, 0x8001, 0x1510, 0x2100, 0xa212, 0x02f8, 0xa484, 0x000c,
-+ 0x0188, 0x6128, 0x810f, 0xa18c, 0x00ff, 0xa082, 0x0004, 0x1120,
-+ 0x2100, 0xa318, 0x0290, 0x0030, 0xa082, 0x0004, 0x1170, 0x2100,
-+ 0xa31a, 0x0258, 0x6030, 0xa005, 0x0110, 0x8000, 0x6816, 0x6a06,
-+ 0x6b0a, 0x2091, 0x8001, 0x0804, 0x23ba, 0x2091, 0x8001, 0x0804,
-+ 0x23b7, 0x6114, 0x080c, 0x2525, 0x2091, 0x8000, 0x6b08, 0x8318,
-+ 0x0228, 0x6b0a, 0x2091, 0x8001, 0x0804, 0x23c8, 0x2091, 0x8001,
-+ 0x0804, 0x23b7, 0x6024, 0x8007, 0xa084, 0x00ff, 0x01e0, 0xa086,
-+ 0x0080, 0x15e8, 0x20a9, 0x0008, 0x6014, 0xd0fc, 0x1118, 0x2069,
-+ 0xfc20, 0x0010, 0x2069, 0xfd40, 0x2091, 0x8000, 0x6800, 0xa084,
-+ 0xfcff, 0x6802, 0xade8, 0x0009, 0x0f04, 0x2317, 0x0cb8, 0x2091,
-+ 0x8001, 0x0804, 0x23ba, 0x6028, 0xa015, 0x0508, 0x6114, 0x080c,
-+ 0x2525, 0x00d6, 0xade8, 0x0007, 0x2091, 0x8000, 0x6800, 0xa00d,
-+ 0x0198, 0xa206, 0x0110, 0x2168, 0x0cc8, 0x00c6, 0x2160, 0x6000,
-+ 0x6802, 0x080c, 0x1c95, 0x00ce, 0x00de, 0x6808, 0x8000, 0x680a,
-+ 0x2091, 0x8001, 0x0804, 0x23c8, 0x2091, 0x8001, 0x00de, 0x0804,
-+ 0x23b4, 0x6114, 0x080c, 0x2525, 0x6800, 0xa084, 0x0001, 0x0904,
-+ 0x23a8, 0x2091, 0x8000, 0x6a04, 0x8210, 0x0228, 0x6a06, 0x2091,
-+ 0x8001, 0x0804, 0x23c8, 0x2091, 0x8001, 0x0804, 0x23b7, 0x6114,
-+ 0x080c, 0x2525, 0x60ce, 0x60bb, 0x0000, 0x6018, 0xa08c, 0xff00,
-+ 0x6820, 0xa084, 0x00ff, 0xa105, 0x601a, 0x6900, 0xa184, 0x0008,
-+ 0x0120, 0x6020, 0xa085, 0x0100, 0x6022, 0xa184, 0x0001, 0x0904,
-+ 0x23b4, 0xa184, 0x0100, 0x1588, 0xa184, 0x0200, 0x1558, 0x681c,
-+ 0xa005, 0x1588, 0x6004, 0xa084, 0x00ff, 0xa086, 0x000f, 0x1110,
-+ 0x080c, 0x250a, 0x78bf, 0x0000, 0x6004, 0x8007, 0xa084, 0x00ff,
-+ 0x78b2, 0x8001, 0x609f, 0x0000, 0x0138, 0x04e1, 0x0128, 0x78bc,
-+ 0xa085, 0x0100, 0x78be, 0x0005, 0x78b7, 0x0000, 0x78bb, 0x0000,
-+ 0x6024, 0xa084, 0xff00, 0x6026, 0x080c, 0x42ef, 0x1108, 0x0005,
-+ 0x0804, 0x1ed6, 0x2009, 0x0017, 0x00b8, 0x2009, 0x000e, 0x00a0,
-+ 0x2009, 0x0007, 0x0088, 0x2009, 0x0035, 0x0070, 0x2009, 0x003e,
-+ 0x0058, 0x2009, 0x0004, 0x0040, 0x2009, 0x0006, 0x0028, 0x2009,
-+ 0x0016, 0x0010, 0x2009, 0x0001, 0x6024, 0xa084, 0xff00, 0xa105,
-+ 0x6026, 0x2091, 0x8000, 0x080c, 0x2076, 0x2091, 0x8001, 0x0005,
-+ 0x0804, 0x1c95, 0x609f, 0x0000, 0x78b4, 0xa06d, 0x2c00, 0x78b6,
-+ 0x1110, 0x78ba, 0x0038, 0x689e, 0x2d00, 0x6002, 0x78b8, 0xad06,
-+ 0x1108, 0x6002, 0x78b0, 0x8001, 0x78b2, 0x1138, 0x78bc, 0xa084,
-+ 0xfeff, 0x78be, 0x78b8, 0x2060, 0xa006, 0x0005, 0x00e6, 0xa02e,
-+ 0x2530, 0x65ae, 0x65b2, 0x601c, 0x60a2, 0x2048, 0xa984, 0xe1ff,
-+ 0x601e, 0xa984, 0x0060, 0x0110, 0x080c, 0x5365, 0x6596, 0x65a6,
-+ 0x669a, 0x66aa, 0x6714, 0x2071, 0xb3c0, 0xd7fc, 0x1110, 0x2071,
-+ 0xb380, 0xa784, 0x0f00, 0x800b, 0xa784, 0x001f, 0x0120, 0x8003,
-+ 0x8003, 0x8003, 0x8003, 0xa105, 0x71e0, 0xa168, 0x2700, 0x8007,
-+ 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0x8003, 0x71e4, 0xa100,
-+ 0x60c6, 0x2091, 0x8000, 0x780c, 0xd0c4, 0x0160, 0xd0ec, 0x0138,
-+ 0xd7fc, 0x1118, 0xd0f4, 0x1158, 0x0028, 0xd0fc, 0x1140, 0x7808,
-+ 0xd0f4, 0x1128, 0x6e08, 0xd684, 0x0560, 0xd9fc, 0x1550, 0x2091,
-+ 0x8001, 0x080c, 0x1d3b, 0x2091, 0x8000, 0x080c, 0x2076, 0x2091,
-+ 0x8001, 0x78b7, 0x0000, 0x78bb, 0x0000, 0x780c, 0xd0e4, 0x1904,
-+ 0x24b1, 0x780c, 0xd0c4, 0x0904, 0x24b1, 0xd0ec, 0x0150, 0xd7fc,
-+ 0x1120, 0xd0f4, 0x1150, 0x0804, 0x24b1, 0xd0fc, 0x1130, 0x0804,
-+ 0x24b1, 0x7808, 0xd0f4, 0x0904, 0x24b1, 0x601b, 0x0021, 0x0804,
-+ 0x24b1, 0x6024, 0xa096, 0x0001, 0x1110, 0x8000, 0x6026, 0x6a10,
-+ 0x6814, 0xa202, 0x0248, 0x0140, 0x2091, 0x8001, 0x2039, 0x0200,
-+ 0x080c, 0x24b3, 0x0804, 0x24b1, 0x2c08, 0xd9fc, 0x01f0, 0x6800,
-+ 0xa065, 0x01d8, 0x6a04, 0x7000, 0xa084, 0x0002, 0x0168, 0x7050,
-+ 0xa206, 0x1150, 0x6b04, 0x2160, 0x2304, 0x6002, 0xa005, 0x1108,
-+ 0x6902, 0x2260, 0x6102, 0x0098, 0x2d00, 0x2060, 0x080c, 0x2af4,
-+ 0x6e08, 0x2160, 0x6202, 0x6906, 0x0050, 0x6800, 0x6902, 0xa065,
-+ 0x0110, 0x6102, 0x0008, 0x6906, 0x2160, 0x6003, 0x0000, 0x2160,
-+ 0xd9fc, 0x0138, 0xa6b4, 0xffdc, 0x6e0a, 0x682b, 0x0000, 0x682f,
-+ 0x0000, 0x6810, 0x8000, 0x6812, 0x2091, 0x8001, 0xd6b4, 0x0128,
-+ 0xa6b6, 0x0040, 0x6e0a, 0x080c, 0x1d4c, 0x78bb, 0x0000, 0x78b7,
-+ 0x0000, 0x00ee, 0x0005, 0x6008, 0xa705, 0x600a, 0x2091, 0x8000,
-+ 0x080c, 0x2076, 0x2091, 0x8001, 0x78b8, 0xa065, 0x0128, 0x609c,
-+ 0x78ba, 0x609f, 0x0000, 0x0c90, 0x78b7, 0x0000, 0x78bb, 0x0000,
-+ 0x0005, 0x7968, 0x786c, 0x7b84, 0xd384, 0x0118, 0x8000, 0xa112,
-+ 0x0220, 0xc384, 0x8000, 0xa112, 0x1260, 0x7a74, 0x721a, 0x7a70,
-+ 0x721e, 0x7a7c, 0x7222, 0x7a78, 0x7226, 0xa006, 0xd384, 0x0108,
-+ 0x8000, 0x786e, 0x70d2, 0x7904, 0xd19c, 0x01b0, 0x0146, 0x00c6,
-+ 0x20a1, 0x0030, 0x20a2, 0x20a3, 0x0000, 0x7013, 0x0004, 0x2061,
-+ 0xfed8, 0x2c14, 0x8c60, 0x2c1c, 0x8c60, 0x2c24, 0x8c60, 0x2c2c,
-+ 0x080c, 0x204b, 0x00ce, 0x014e, 0x7814, 0xa005, 0x0138, 0x8001,
-+ 0x7816, 0x1120, 0x0e04, 0x2506, 0x2091, 0x4080, 0x0005, 0x2039,
-+ 0x251c, 0x0010, 0x2039, 0x2522, 0x2704, 0xa005, 0x0160, 0xac00,
-+ 0x2068, 0x6908, 0x6810, 0x6912, 0x680a, 0x690c, 0x6814, 0x6916,
-+ 0x680e, 0x8738, 0x0c88, 0x0005, 0x0003, 0x0009, 0x000f, 0x0015,
-+ 0x001b, 0x0000, 0x0015, 0x001b, 0x0000, 0x00c6, 0x6014, 0x080c,
-+ 0x449c, 0x2c68, 0x00ce, 0x0005, 0x78ab, 0x0000, 0x2009, 0xb341,
-+ 0x2104, 0xd084, 0x0510, 0x6004, 0xa086, 0x0103, 0x11f0, 0x6114,
-+ 0x6018, 0xa105, 0x11d0, 0x00d6, 0x2069, 0x0000, 0x6818, 0xd084,
-+ 0x1198, 0x600c, 0x70c6, 0x6010, 0x70ca, 0x70c3, 0x8020, 0x681b,
-+ 0x0001, 0x2091, 0x4080, 0x00de, 0x080c, 0x2099, 0x0e04, 0x257e,
-+ 0x7864, 0xa065, 0x19d8, 0x0450, 0x00de, 0x0459, 0x0518, 0x6204,
-+ 0xa294, 0x00ff, 0xa296, 0x0003, 0x0130, 0x6204, 0xa296, 0x0110,
-+ 0x1168, 0x78ab, 0x0001, 0x6204, 0xa294, 0xff00, 0x8217, 0x8211,
-+ 0x0128, 0x85ff, 0x1178, 0x8210, 0xa202, 0x1260, 0x0056, 0x00f1,
-+ 0x005e, 0x1140, 0x8528, 0x78a8, 0xa005, 0x1120, 0x7864, 0xa065,
-+ 0x1904, 0x252e, 0x85ff, 0x0120, 0x2091, 0x4080, 0x7890, 0x70d6,
-+ 0x0005, 0x7b8c, 0x7990, 0x70d4, 0xa102, 0x1118, 0x2300, 0xa005,
-+ 0x0005, 0x0210, 0xa302, 0x0005, 0x8002, 0x0005, 0xa184, 0xff00,
-+ 0x0140, 0x810f, 0x810c, 0x810c, 0x8004, 0x8004, 0x8007, 0xa100,
-+ 0x0018, 0x8107, 0x8004, 0x8004, 0x7a98, 0x7b94, 0x7ca0, 0x7d9c,
-+ 0xa210, 0xa006, 0xa319, 0xa421, 0xa529, 0x2009, 0x0020, 0x6004,
-+ 0xa086, 0x0103, 0x1128, 0x6028, 0xa005, 0x1110, 0x2009, 0x000c,
-+ 0x080c, 0x1c39, 0x01e0, 0x78a4, 0x8000, 0x78a6, 0xa086, 0x0002,
-+ 0x1904, 0x25fc, 0x6014, 0xd0fc, 0x1118, 0x2069, 0xb380, 0x0010,
-+ 0x2069, 0xb3c0, 0x2091, 0x8000, 0x681b, 0x0003, 0x78a7, 0x0000,
-+ 0x78ac, 0xa085, 0x0300, 0x78ae, 0x2091, 0x8001, 0x0468, 0x78a7,
-+ 0x0000, 0x080c, 0x2099, 0x798c, 0x7890, 0x8000, 0xa10a, 0x1208,
-+ 0xa006, 0x7892, 0x70d6, 0x7904, 0xd19c, 0x01e8, 0x0006, 0x0146,
-+ 0x00c6, 0x20a1, 0x0030, 0x20a2, 0xa006, 0x20a2, 0x7013, 0x0004,
-+ 0x2061, 0xfed8, 0x2c14, 0xa290, 0x0004, 0x8c60, 0x2c1c, 0xa319,
-+ 0x8c60, 0x2c24, 0xa421, 0x8c60, 0x2c2c, 0xa529, 0x080c, 0x204b,
-+ 0x00ce, 0x014e, 0x000e, 0xa006, 0x2071, 0x0010, 0x2091, 0x8001,
-+ 0x0005, 0x2138, 0xd7fc, 0x1118, 0x2009, 0xb39a, 0x0010, 0x2009,
-+ 0xb3da, 0x2091, 0x8000, 0x200a, 0x00f6, 0xd7fc, 0x1168, 0x2009,
-+ 0xb380, 0x2001, 0xb342, 0x2004, 0xd0ec, 0x0118, 0x2079, 0x0100,
-+ 0x0038, 0x2079, 0x0200, 0x0020, 0x2009, 0xb3c0, 0x2079, 0x0100,
-+ 0x2104, 0xa086, 0x0000, 0x1180, 0xd7fc, 0x1118, 0x2009, 0xb384,
-+ 0x0010, 0x2009, 0xb3c4, 0x2104, 0xa005, 0x1130, 0x7830, 0xa084,
-+ 0x00c0, 0x1110, 0x781b, 0x0053, 0x00fe, 0x0005, 0x00f6, 0x00e6,
-+ 0x2c00, 0xa005, 0x1120, 0xa188, 0x0005, 0x2104, 0x0008, 0x6014,
-+ 0xd0fc, 0x1168, 0x2071, 0xb380, 0x2001, 0xb342, 0x2004, 0xd0ec,
-+ 0x0118, 0x2079, 0x0100, 0x0038, 0x2079, 0x0200, 0x0020, 0x2071,
-+ 0xb3c0, 0x2079, 0x0100, 0x2091, 0x8000, 0x7000, 0xa086, 0x0000,
-+ 0x1510, 0x00b8, 0x2c00, 0xa005, 0x1120, 0xa188, 0x0005, 0x2104,
-+ 0x0008, 0x6014, 0xd0fc, 0x1158, 0x2001, 0xb342, 0x2004, 0xd0ec,
-+ 0x0118, 0x2079, 0x0100, 0x0028, 0x2079, 0x0200, 0x0010, 0x2079,
-+ 0x0100, 0x7830, 0xa084, 0x00c0, 0x1130, 0x2c00, 0xa005, 0x1108,
-+ 0x2104, 0x781b, 0x0055, 0x2091, 0x8001, 0x00ee, 0x00fe, 0x0005,
-+ 0x2009, 0x0002, 0x2069, 0xb340, 0x6808, 0xd0ec, 0x1904, 0x26d5,
-+ 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1904, 0x26d5, 0x2071, 0xb3c0,
-+ 0x2079, 0x0100, 0x2021, 0xb5ff, 0x784b, 0x000f, 0x1104, 0x26a0,
-+ 0x7838, 0x0cd0, 0x784b, 0x000f, 0x1304, 0x26a0, 0x7838, 0x0cd0,
-+ 0x20a9, 0x0060, 0x789b, 0x0000, 0x78af, 0x0000, 0x78af, 0x0000,
-+ 0x1f04, 0x26a4, 0x70ab, 0x009d, 0x2019, 0x5a04, 0x04e1, 0x7003,
-+ 0x0000, 0x0016, 0xd18c, 0x2009, 0x0000, 0x0108, 0xc1bd, 0x080c,
-+ 0x286a, 0x001e, 0x701c, 0xa084, 0x000f, 0x0006, 0x680c, 0xd0e4,
-+ 0x000e, 0x1118, 0xa085, 0x6300, 0x0010, 0xa085, 0x62c0, 0x7806,
-+ 0x780f, 0x9200, 0x7843, 0x00d8, 0x7853, 0x0080, 0x780b, 0x2f08,
-+ 0x704f, 0x2f08, 0x745a, 0x7057, 0x0000, 0x8109, 0x0188, 0x2071,
-+ 0xb380, 0x6808, 0xd0ec, 0x0130, 0x2079, 0x0100, 0x2021, 0xb3ff,
-+ 0x0804, 0x2694, 0x2079, 0x0200, 0x2021, 0xb3ff, 0x0804, 0x269a,
-+ 0x080c, 0x2930, 0x0005, 0x0136, 0x0146, 0x0156, 0x0046, 0x0016,
-+ 0x3808, 0x20c1, 0x0020, 0xaf80, 0x002b, 0x20a0, 0x2304, 0xa005,
-+ 0x789a, 0x0190, 0x8318, 0x2324, 0x8318, 0x2398, 0x24a8, 0xa484,
-+ 0xff00, 0x0120, 0xa482, 0x0100, 0x20a9, 0x0100, 0x2020, 0x53a6,
-+ 0xa005, 0x1da0, 0x3318, 0x0c50, 0x21c0, 0x001e, 0x004e, 0x015e,
-+ 0x014e, 0x013e, 0x0005, 0x0016, 0x00f6, 0xd1bc, 0x1168, 0x0006,
-+ 0x2001, 0xb342, 0x2004, 0xd0ec, 0x000e, 0x0118, 0x2079, 0x0100,
-+ 0x0028, 0x2079, 0x0200, 0x0010, 0x2079, 0x0100, 0xa18c, 0x000f,
-+ 0x7804, 0xa084, 0xfff0, 0xa105, 0x7806, 0x00fe, 0x001e, 0x080c,
-+ 0x286a, 0x0005, 0xd3fc, 0x1168, 0x0006, 0x2001, 0xb342, 0x2004,
-+ 0xd0ec, 0x000e, 0x0118, 0x2011, 0x0101, 0x0028, 0x2011, 0x0201,
-+ 0x0010, 0x2011, 0x0101, 0x20a9, 0x0009, 0x810b, 0x1f04, 0x2745,
-+ 0xa18c, 0x0e00, 0x2204, 0xa084, 0xf1ff, 0xa105, 0x2012, 0x0005,
-+ 0x2019, 0x0002, 0x2001, 0xb342, 0x2004, 0xd0ec, 0x0120, 0x8319,
-+ 0x2009, 0x0101, 0x0010, 0x2009, 0x0101, 0x20a9, 0x0005, 0x8213,
-+ 0x1f04, 0x275f, 0xa294, 0x00e0, 0x2104, 0xa084, 0xff1f, 0xa205,
-+ 0x200a, 0x8319, 0x0118, 0x2009, 0x0201, 0x0c78, 0x0005, 0xd3fc,
-+ 0x1168, 0x0006, 0x2001, 0xb342, 0x2004, 0xd0ec, 0x000e, 0x0118,
-+ 0x2011, 0x0101, 0x0028, 0x2011, 0x0201, 0x0010, 0x2011, 0x0101,
-+ 0x20a9, 0x000c, 0x810b, 0x1f04, 0x2782, 0xa18c, 0xf000, 0x2204,
-+ 0xa084, 0x0fff, 0xa105, 0x2012, 0x0005, 0xd3fc, 0x1168, 0x0006,
-+ 0x2001, 0xb342, 0x2004, 0xd0ec, 0x000e, 0x0118, 0x2011, 0x0102,
-+ 0x0028, 0x2011, 0x0202, 0x0010, 0x2011, 0x0102, 0x2204, 0xa084,
-+ 0xf0cf, 0xa105, 0x2012, 0x0005, 0x00c6, 0xd1bc, 0x1168, 0x0006,
-+ 0x2001, 0xb342, 0x2004, 0xd0ec, 0x000e, 0x0118, 0x2061, 0x0100,
-+ 0x0028, 0x2061, 0x0200, 0x0010, 0x2061, 0x0100, 0xc1bc, 0x8103,
-+ 0x8003, 0xa080, 0x0020, 0x609a, 0x62ac, 0x63ac, 0x00ce, 0x0005,
-+ 0x00c6, 0xd1bc, 0x1168, 0x0006, 0x2001, 0xb342, 0x2004, 0xd0ec,
-+ 0x000e, 0x0118, 0x2061, 0x0100, 0x0028, 0x2061, 0x0200, 0x0010,
-+ 0x2061, 0x0100, 0xc1bc, 0x8103, 0x8003, 0xa080, 0x0022, 0x609a,
-+ 0x60a4, 0xa084, 0xffdf, 0x60ae, 0x00ce, 0x0005, 0x00c6, 0xd1bc,
-+ 0x1168, 0x0006, 0x2001, 0xb342, 0x2004, 0xd0ec, 0x000e, 0x0118,
-+ 0x2061, 0x0100, 0x0028, 0x2061, 0x0200, 0x0010, 0x2061, 0x0100,
-+ 0xc1bc, 0x8103, 0x8003, 0xa080, 0x0020, 0x609a, 0x60a4, 0x62ae,
-+ 0x2010, 0x60a4, 0x63ae, 0x2018, 0x00ce, 0x0005, 0x2091, 0x8000,
-+ 0x00c6, 0x00e6, 0x6818, 0xa005, 0x0904, 0x284e, 0xd1fc, 0x1118,
-+ 0x2061, 0xfb00, 0x0010, 0x2061, 0xfc10, 0x080c, 0x2856, 0x0538,
-+ 0x20a9, 0x0101, 0xd1fc, 0x1118, 0x2061, 0xfa00, 0x0010, 0x2061,
-+ 0xfb10, 0x00c6, 0x04d9, 0x0128, 0x00ce, 0x8c60, 0x1f04, 0x2819,
-+ 0x0468, 0x000e, 0xd1fc, 0x1128, 0x2071, 0xb380, 0xa082, 0xfa00,
-+ 0x0020, 0x2071, 0xb3c0, 0xa082, 0xfb10, 0x707e, 0x717a, 0x2001,
-+ 0x0004, 0x706a, 0x7087, 0x000f, 0x080c, 0x2601, 0x00a0, 0x60d0,
-+ 0xa005, 0x11a0, 0xd1fc, 0x1118, 0x2071, 0xb380, 0x0010, 0x2071,
-+ 0xb3c0, 0x717a, 0x2c00, 0x7082, 0x2001, 0x0006, 0x706a, 0x7087,
-+ 0x000f, 0x080c, 0x2601, 0x2001, 0x0000, 0x0010, 0x2001, 0x0001,
-+ 0x2091, 0x8001, 0xa005, 0x00ee, 0x00ce, 0x0005, 0x2c04, 0xa005,
-+ 0x0170, 0x2060, 0x6010, 0xa306, 0x1140, 0x600c, 0xa206, 0x1128,
-+ 0x6014, 0xa106, 0x1110, 0xa006, 0x0020, 0x6000, 0x0c80, 0xa085,
-+ 0x0001, 0x0005, 0x00f6, 0x00e6, 0x0016, 0xd1bc, 0x1178, 0x2079,
-+ 0xb380, 0x0006, 0x2001, 0xb342, 0x2004, 0xd0ec, 0x000e, 0x0118,
-+ 0x2071, 0x0100, 0x0038, 0x2071, 0x0200, 0x0020, 0x2079, 0xb3c0,
-+ 0x2071, 0x0100, 0x791c, 0xa18c, 0x000f, 0x70ec, 0xa084, 0x0100,
-+ 0x000e, 0x0160, 0x810b, 0x810b, 0x810b, 0x810b, 0xd0bc, 0x1118,
-+ 0xa18d, 0x0f00, 0x0010, 0xa18d, 0x0800, 0x2104, 0x00ee, 0x00fe,
-+ 0x0005, 0x2001, 0xb341, 0x2004, 0xd0ac, 0x1140, 0x68e4, 0xa08c,
-+ 0x0020, 0x0120, 0xa084, 0x0006, 0x1108, 0x0009, 0x0005, 0x6014,
-+ 0x00e6, 0x0036, 0x2018, 0x2071, 0xb900, 0xd0fc, 0x1110, 0x2071,
-+ 0xb800, 0x8007, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0x8003,
-+ 0xae70, 0x7004, 0xa084, 0x000a, 0x1904, 0x292d, 0x7108, 0xa194,
-+ 0xff00, 0x0904, 0x292d, 0xa18c, 0x00ff, 0x701c, 0xa084, 0xff00,
-+ 0x01c0, 0x7004, 0xa085, 0x003a, 0x7006, 0x2001, 0x0009, 0xa102,
-+ 0x16d8, 0x2001, 0x000a, 0xa102, 0x16d0, 0x2001, 0x000c, 0xa102,
-+ 0x16c8, 0x701c, 0xa084, 0x00ff, 0x701e, 0x7004, 0xa084, 0xffdf,
-+ 0x7006, 0x2001, 0x000a, 0xa106, 0x01a8, 0x2001, 0x000c, 0xa106,
-+ 0x01a0, 0x2001, 0x0012, 0xa106, 0x0198, 0x2001, 0x0014, 0xa106,
-+ 0x0190, 0x2001, 0x0019, 0xa106, 0x0188, 0x2001, 0x0032, 0xa106,
-+ 0x0180, 0x00d8, 0x2009, 0x000c, 0x00c8, 0x2009, 0x0012, 0x00b0,
-+ 0x2009, 0x0014, 0x0098, 0x2009, 0x0019, 0x0080, 0x2009, 0x0020,
-+ 0x0068, 0x2009, 0x003f, 0x0050, 0x2009, 0x000a, 0x0038, 0x2009,
-+ 0x000c, 0x0020, 0x2009, 0x0019, 0x0008, 0xa016, 0x2100, 0xa205,
-+ 0x700a, 0x7004, 0xa085, 0x000a, 0x7006, 0x2071, 0xb340, 0x7004,
-+ 0xd0bc, 0x0158, 0xd3fc, 0x1120, 0x73ea, 0x2071, 0xb380, 0x0018,
-+ 0x73ee, 0x2071, 0xb3c0, 0x701b, 0x800f, 0x003e, 0x00ee, 0x0005,
-+ 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x11d0, 0x2001, 0x04fd, 0x2004,
-+ 0xa082, 0x0005, 0x12a0, 0x2071, 0x0200, 0x71ec, 0xa18c, 0x1c00,
-+ 0x810f, 0x810c, 0x810c, 0x2079, 0x0100, 0x78ec, 0xa084, 0x1c00,
-+ 0x8007, 0x8004, 0x8004, 0xa105, 0xa08a, 0x0007, 0x0208, 0x0005,
-+ 0x0002, 0x297e, 0x2965, 0x297e, 0x2965, 0x2958, 0x2972, 0x2958,
-+ 0x7008, 0xa084, 0xc3ff, 0xa085, 0x3000, 0x700a, 0x7808, 0xa084,
-+ 0xc3ff, 0xa085, 0x3000, 0x780a, 0x0005, 0x7008, 0xa084, 0xc3ff,
-+ 0xa085, 0x2000, 0x700a, 0x7808, 0xa084, 0xc3ff, 0xa085, 0x2000,
-+ 0x780a, 0x0005, 0x7008, 0xa084, 0xc3ff, 0xa085, 0x0c00, 0x700a,
-+ 0x7808, 0xa084, 0xc3ff, 0xa085, 0x0c00, 0x780a, 0x0005, 0x0e04,
-+ 0x297f, 0x2091, 0x8000, 0x2071, 0x0000, 0x0006, 0x7018, 0xd084,
-+ 0x1de8, 0x000e, 0x2071, 0x0010, 0x70ca, 0x000e, 0x70c6, 0x70c3,
-+ 0x8002, 0x70db, 0x0b0c, 0x70df, 0x0001, 0x2071, 0x0000, 0x701b,
-+ 0x0001, 0x2091, 0x4080, 0x0cf8, 0x7f3c, 0x7e58, 0x7c30, 0x7d38,
-+ 0xa594, 0x003f, 0xa49c, 0x0003, 0xa484, 0x000f, 0x0002, 0x29b8,
-+ 0x29b8, 0x29b8, 0x2dbc, 0x4117, 0x29b7, 0x29e0, 0x29e3, 0x29b7,
-+ 0x29b7, 0x29b7, 0x29b7, 0x29b7, 0x29b7, 0x29b7, 0x29b7, 0x0839,
-+ 0x8507, 0xa084, 0x003f, 0x0002, 0x29e6, 0x2dbc, 0x2fa8, 0x30d0,
-+ 0x310e, 0x338a, 0x3681, 0x36f3, 0x3767, 0x3804, 0x38ee, 0x397e,
-+ 0x29e0, 0x2ec1, 0x3653, 0x29dd, 0x464c, 0x466f, 0x4832, 0x483d,
-+ 0x4910, 0x29dd, 0x29dd, 0x49e6, 0x49ea, 0x464a, 0x29dd, 0x478d,
-+ 0x29dd, 0x44e4, 0x29e3, 0x4ad8, 0x4af6, 0x080c, 0x297f, 0x0005,
-+ 0x781b, 0x0057, 0x0005, 0x781b, 0x00e1, 0x0005, 0x724a, 0xa584,
-+ 0x0001, 0x1904, 0x44f6, 0x0160, 0x080c, 0x297f, 0x7003, 0x0000,
-+ 0x7053, 0x0000, 0x704b, 0x0000, 0x7043, 0x0000, 0x080c, 0x40d4,
-+ 0x7064, 0xa06d, 0x0140, 0x70f4, 0xa084, 0x0001, 0x7168, 0xa105,
-+ 0x1110, 0x0804, 0x2b4d, 0x7068, 0xa084, 0x0007, 0x0002, 0x2a0f,
-+ 0x2a87, 0x2a8f, 0x2a98, 0x2aa1, 0x2b33, 0x2aaa, 0x2a87, 0x7830,
-+ 0xd0bc, 0x1968, 0x71f0, 0xd1bc, 0x1950, 0xd1b4, 0x1904, 0x2a65,
-+ 0x70c0, 0xa086, 0x0001, 0x0918, 0x080c, 0x40bd, 0x1900, 0x70d0,
-+ 0xa06d, 0x6800, 0xa065, 0xa055, 0x789b, 0x0090, 0x6b0c, 0x7baa,
-+ 0x6808, 0xa045, 0x6d10, 0x6804, 0xa06d, 0xa05d, 0xa886, 0x0001,
-+ 0x0118, 0x69c0, 0x7daa, 0x79aa, 0x68c4, 0xa04d, 0x6e1c, 0x7830,
-+ 0xd0bc, 0x1904, 0x29df, 0x2001, 0x0010, 0x0804, 0x2c89, 0x7064,
-+ 0xa005, 0x1904, 0x29df, 0x080c, 0x40bd, 0x1904, 0x29df, 0x00c6,
-+ 0x00d6, 0x70d0, 0xa06d, 0x6800, 0xa065, 0xa055, 0x789b, 0x0090,
-+ 0x6b0c, 0x7baa, 0x6808, 0xa045, 0x6d10, 0x6804, 0xa06d, 0xa05d,
-+ 0xa886, 0x0001, 0x0118, 0x69c0, 0x7daa, 0x79aa, 0x68c4, 0xa04d,
-+ 0x6e1c, 0x2001, 0x0020, 0x0804, 0x2c89, 0x080c, 0x40a8, 0x1904,
-+ 0x29df, 0x70d8, 0xa06d, 0x6814, 0xc0fc, 0x8007, 0x7882, 0x68b4,
-+ 0x785a, 0x781b, 0x0057, 0x704c, 0xc08d, 0x780a, 0x68c0, 0x703e,
-+ 0x70f0, 0xc0b4, 0x70f2, 0x70d4, 0xa065, 0x68c4, 0x705e, 0x7003,
-+ 0x0002, 0x2d00, 0x7052, 0xad80, 0x0009, 0x7042, 0x0005, 0x080c,
-+ 0x40a8, 0x1120, 0x781b, 0x0050, 0x7003, 0x0004, 0x0005, 0x080c,
-+ 0x40a8, 0x1128, 0x2011, 0x000c, 0x0419, 0x7003, 0x0004, 0x0005,
-+ 0x080c, 0x40a8, 0x1128, 0x2011, 0x0006, 0x00d1, 0x7003, 0x0004,
-+ 0x0005, 0x080c, 0x40a8, 0x1128, 0x2011, 0x000d, 0x0089, 0x7003,
-+ 0x0004, 0x0005, 0x080c, 0x40a8, 0x1150, 0x2011, 0x0006, 0x0041,
-+ 0x7080, 0x7083, 0x0000, 0x2068, 0x7052, 0x7003, 0x0001, 0x0005,
-+ 0x7178, 0xc1fc, 0x8107, 0x7882, 0x789b, 0x0090, 0xa286, 0x000c,
-+ 0x1120, 0x7aaa, 0x2001, 0x0001, 0x0098, 0xa18c, 0x001f, 0xa18d,
-+ 0x00c0, 0x79aa, 0xa286, 0x000d, 0x0120, 0x7aaa, 0x2001, 0x0002,
-+ 0x0038, 0x78ab, 0x0020, 0x717c, 0x79aa, 0x7aaa, 0x2001, 0x0004,
-+ 0x789b, 0x0060, 0x78aa, 0x785b, 0x0004, 0x781b, 0x00ef, 0x080c,
-+ 0x40d4, 0x7087, 0x000f, 0x70f0, 0xd0b4, 0x0168, 0xc0b4, 0x70f2,
-+ 0x00c6, 0x70d4, 0xa065, 0x6008, 0xa084, 0xfbef, 0x600a, 0x6018,
-+ 0x8001, 0x601a, 0x00ce, 0x0005, 0x7010, 0xa005, 0x1138, 0x70f0,
-+ 0xd0b4, 0x0128, 0x70d4, 0xac06, 0x1110, 0x0c29, 0x0005, 0x0016,
-+ 0x71c0, 0xa186, 0x0001, 0x0528, 0x00d6, 0x0026, 0x2100, 0x2011,
-+ 0x0001, 0xa212, 0x70d0, 0x2068, 0x6800, 0xac06, 0x0120, 0x8211,
-+ 0x01b0, 0x00c9, 0x0cc8, 0x00c6, 0x2100, 0x2011, 0x0001, 0xa212,
-+ 0x70d0, 0x2068, 0x6800, 0x2060, 0x6008, 0xa084, 0xfbef, 0x600a,
-+ 0x8211, 0x0110, 0x0041, 0x0cb0, 0x70c3, 0x0001, 0x00ce, 0x002e,
-+ 0x00de, 0x001e, 0x0005, 0xade8, 0x0005, 0x70c8, 0xad06, 0x1110,
-+ 0x70c4, 0x2068, 0x0005, 0x080c, 0x40a8, 0x1904, 0x29df, 0x7080,
-+ 0x2068, 0x7778, 0x080c, 0x3fb3, 0x2c50, 0x080c, 0x418d, 0x789b,
-+ 0x0090, 0x6814, 0xa084, 0x001f, 0xc0bd, 0x78aa, 0x6e1c, 0x2041,
-+ 0x0001, 0x2001, 0x0004, 0x0804, 0x2c8e, 0x080c, 0x40a8, 0x1904,
-+ 0x29df, 0x789b, 0x0090, 0x7064, 0x2068, 0x6f14, 0x080c, 0x2ae3,
-+ 0x080c, 0x3fb3, 0x2c50, 0x080c, 0x418d, 0x6824, 0xa005, 0x0130,
-+ 0xa082, 0x0006, 0x0208, 0x0010, 0x6827, 0x0005, 0x6b14, 0xa39c,
-+ 0x001f, 0xa39d, 0x00c0, 0x2960, 0x6000, 0x2a60, 0xa084, 0x8000,
-+ 0x0118, 0xa684, 0x0001, 0x0110, 0xa39c, 0xffbf, 0x7baa, 0x2031,
-+ 0x0020, 0x2041, 0x0001, 0x2001, 0x0003, 0x0804, 0x2c8e, 0xc28d,
-+ 0x72f2, 0x72dc, 0xa200, 0xa015, 0x7158, 0x8108, 0xa12a, 0x0208,
-+ 0x71dc, 0x2164, 0x6504, 0x85ff, 0x1190, 0x715a, 0x8421, 0x1da8,
-+ 0x70f0, 0xd08c, 0x0128, 0x70ec, 0xa005, 0x1110, 0x70ef, 0x000a,
-+ 0x7048, 0xa005, 0x0904, 0x44f6, 0x0005, 0x2200, 0x0c70, 0x70f0,
-+ 0xc08c, 0x70f2, 0x70ef, 0x0000, 0x6034, 0xa005, 0x1db0, 0x6708,
-+ 0xa784, 0x073f, 0x01a8, 0xd7d4, 0x1d80, 0xa784, 0x0021, 0x1d68,
-+ 0xd78c, 0x0120, 0xd794, 0x0d48, 0xc794, 0x670a, 0xa784, 0x0218,
-+ 0x1d20, 0xd7c4, 0x0128, 0x6018, 0xa005, 0x19f8, 0xc7c4, 0x670a,
-+ 0x2568, 0x6823, 0x0000, 0x6e1c, 0xa684, 0x000e, 0x6318, 0x0128,
-+ 0x601c, 0xa302, 0x0220, 0x0118, 0x0880, 0x83ff, 0x1970, 0x2d58,
-+ 0x2c50, 0x715a, 0x68d3, 0x0000, 0xd7bc, 0x1118, 0x7024, 0x6022,
-+ 0x603a, 0xc7bc, 0x670a, 0x68c4, 0xa065, 0xa04d, 0x6100, 0x2a60,
-+ 0x2041, 0x0001, 0x6b14, 0xa39c, 0x001f, 0xa39d, 0x00c0, 0xd1fc,
-+ 0x0110, 0xd684, 0x0110, 0xa39c, 0xffbf, 0xd6a4, 0x0110, 0xa39d,
-+ 0x0020, 0xa684, 0x000e, 0x1904, 0x2c39, 0xc7a5, 0x670a, 0x2c00,
-+ 0x68ca, 0x77c0, 0xa786, 0x0001, 0x11a8, 0x70f0, 0xd0b4, 0x1190,
-+ 0x7000, 0xa082, 0x0001, 0x1270, 0x7010, 0xa005, 0x1158, 0x080c,
-+ 0x40bd, 0x1140, 0x7830, 0xd0bc, 0x1128, 0x789b, 0x0090, 0x7baa,
-+ 0x0804, 0x2c87, 0x8739, 0x77c2, 0x2750, 0x77cc, 0xa7b0, 0x0005,
-+ 0x70c8, 0xa606, 0x1108, 0x76c4, 0x76ce, 0x2c3a, 0x8738, 0x2d3a,
-+ 0x8738, 0x283a, 0x8738, 0x233a, 0x8738, 0x253a, 0x7830, 0xd0bc,
-+ 0x0140, 0x2091, 0x303d, 0x70f0, 0xa084, 0x303d, 0x2091, 0x8000,
-+ 0x2090, 0xaad5, 0x0000, 0x0120, 0x8421, 0x2200, 0x1904, 0x2b84,
-+ 0x0005, 0xd1dc, 0x0904, 0x3c0a, 0x2029, 0x0020, 0xd69c, 0x1120,
-+ 0x8528, 0xd68c, 0x1108, 0x8528, 0x8840, 0x6f14, 0x610c, 0x8108,
-+ 0xa18c, 0x00ff, 0x70e8, 0xa160, 0x2c64, 0x8cff, 0x0180, 0x6014,
-+ 0xa706, 0x1dd0, 0x60bc, 0x8001, 0x60be, 0x1d88, 0x2a60, 0x6008,
-+ 0xc0c5, 0x600a, 0x2200, 0x8421, 0x1904, 0x2b84, 0x0005, 0x2a60,
-+ 0x610e, 0x69c2, 0x2c00, 0x68ca, 0x8840, 0x6008, 0xc0d5, 0x600a,
-+ 0x77c0, 0xa786, 0x0001, 0x1904, 0x2c12, 0x70f0, 0xd0b4, 0x1904,
-+ 0x2c12, 0x7000, 0xa082, 0x0001, 0x1a04, 0x2c12, 0x7010, 0xa005,
-+ 0x1904, 0x2c12, 0x080c, 0x40bd, 0x1904, 0x2c12, 0x7830, 0xd0bc,
-+ 0x1904, 0x2c12, 0x789b, 0x0090, 0x7baa, 0x7daa, 0x79aa, 0x2001,
-+ 0x0002, 0x0006, 0x6018, 0x8000, 0x601a, 0x0008, 0x0006, 0x2960,
-+ 0x6104, 0x2a60, 0x080c, 0x41d0, 0x1560, 0xa184, 0x0018, 0x0178,
-+ 0xa184, 0x0010, 0x0118, 0x080c, 0x3dc6, 0x1518, 0xd19c, 0x0138,
-+ 0x69a0, 0xa184, 0x0600, 0x1118, 0x080c, 0x3cd1, 0x00d0, 0x69a0,
-+ 0xa184, 0x1e00, 0x01f8, 0xd1dc, 0x0168, 0x00c6, 0x2960, 0x6000,
-+ 0xc0ed, 0x6002, 0x6104, 0xc1a5, 0x6106, 0x00ce, 0x080c, 0x3dc6,
-+ 0x1140, 0x69a0, 0xd1cc, 0x0118, 0x080c, 0x3d18, 0x0010, 0xd1d4,
-+ 0x1d18, 0x69a0, 0xd1e4, 0x0130, 0x6914, 0xa18c, 0xff00, 0x810f,
-+ 0x080c, 0x27c0, 0x002e, 0xa68c, 0x00e0, 0xa684, 0x0060, 0x0120,
-+ 0xa086, 0x0060, 0x1108, 0xc1f5, 0xa18d, 0x0104, 0x69b6, 0x789b,
-+ 0x0060, 0x2800, 0x78aa, 0x6818, 0xc0fd, 0x681a, 0xd6bc, 0x0168,
-+ 0xc0fc, 0x708b, 0x0000, 0xa08a, 0x000d, 0x0328, 0xa08a, 0x000c,
-+ 0x718a, 0x2001, 0x000c, 0x800c, 0x718e, 0x78aa, 0x3518, 0x3340,
-+ 0x3428, 0x80ac, 0xaf80, 0x002b, 0x20a0, 0x789b, 0x0000, 0xad80,
-+ 0x000b, 0x2098, 0x53a6, 0x23a8, 0x2898, 0x25a0, 0xa286, 0x0020,
-+ 0x11e0, 0x70f0, 0xc0b5, 0x70f2, 0x2c00, 0x70d6, 0x2d00, 0x70da,
-+ 0xa286, 0x0002, 0x05d8, 0x70c0, 0x8000, 0x70c2, 0x74d0, 0xa498,
-+ 0x0005, 0x70c8, 0xa306, 0x1108, 0x73c4, 0x73d2, 0xa286, 0x0010,
-+ 0x0904, 0x29df, 0x00de, 0x00ce, 0x0005, 0x7000, 0xa005, 0x1d08,
-+ 0xa286, 0x0002, 0x15d0, 0x080c, 0x40a8, 0x19d8, 0x6814, 0xc0fc,
-+ 0x8007, 0x7882, 0x68b4, 0x785a, 0x781b, 0x0057, 0x704c, 0xc08d,
-+ 0x780a, 0x0126, 0x00d6, 0x00c6, 0x70f0, 0xa084, 0x2e00, 0x2090,
-+ 0x00ce, 0x00de, 0x012e, 0x2900, 0x705e, 0x68c0, 0x703e, 0x7003,
-+ 0x0002, 0x2d00, 0x7052, 0xad80, 0x0009, 0x7042, 0x7830, 0xd0bc,
-+ 0x0140, 0x2091, 0x303d, 0x70f0, 0xa084, 0x303d, 0x2091, 0x8000,
-+ 0x2090, 0x70c0, 0xa005, 0x1108, 0x0005, 0x8421, 0x0de8, 0x7254,
-+ 0x70dc, 0xa200, 0xa015, 0x0804, 0x2b84, 0xa286, 0x0010, 0x1530,
-+ 0x080c, 0x40a8, 0x1904, 0x2d01, 0x6814, 0xc0fc, 0x8007, 0x7882,
-+ 0x68b4, 0x785a, 0x781b, 0x0057, 0x704c, 0xc08d, 0x780a, 0x70c0,
-+ 0x8000, 0x70c2, 0x74d0, 0xa490, 0x0005, 0x70c8, 0xa206, 0x1108,
-+ 0x72c4, 0x72d2, 0x2900, 0x705e, 0x68c0, 0x703e, 0x7003, 0x0002,
-+ 0x2d00, 0x7052, 0xad80, 0x0009, 0x7042, 0x0005, 0x6bb4, 0xa39d,
-+ 0x2000, 0x7b5a, 0x6814, 0xc0fc, 0x8007, 0x7882, 0x6b94, 0x7bd6,
-+ 0x7bde, 0x6e98, 0x7ed2, 0x7eda, 0x781b, 0x0057, 0x2900, 0x705e,
-+ 0x7202, 0x704c, 0xc08d, 0x780a, 0x7200, 0x2300, 0xa605, 0x0170,
-+ 0x70f0, 0xa084, 0x2e00, 0xa086, 0x2600, 0x1118, 0x2009, 0x0000,
-+ 0x0010, 0x2009, 0x0001, 0xa284, 0x000f, 0x0023, 0xad80, 0x0009,
-+ 0x7042, 0x0005, 0x2dba, 0x55dc, 0x55dc, 0x55ca, 0x55dc, 0x2dba,
-+ 0x2dba, 0x2dba, 0x080c, 0x297f, 0x080c, 0x40a8, 0x7808, 0xa084,
-+ 0xfffc, 0x780a, 0x00f6, 0x2079, 0xb340, 0x78ac, 0x00fe, 0xd084,
-+ 0x01b8, 0x7068, 0xa086, 0x0001, 0x1110, 0x0804, 0x2e97, 0x7068,
-+ 0xa086, 0x0005, 0x1158, 0x7080, 0x2068, 0x681b, 0x0004, 0x6817,
-+ 0x0000, 0x6820, 0xa084, 0x00ff, 0xc09d, 0x6822, 0x706b, 0x0000,
-+ 0x70c3, 0x0000, 0x70c4, 0x70ce, 0x70d2, 0x70f4, 0xc084, 0x70f6,
-+ 0x080c, 0x2ae3, 0x2011, 0x0004, 0x7168, 0xa186, 0x0001, 0x0160,
-+ 0xa186, 0x0007, 0x1118, 0x701b, 0x0005, 0x0030, 0x701b, 0x0001,
-+ 0x70f0, 0xc0c5, 0x70f2, 0x0000, 0x2001, 0xb348, 0x203c, 0xd7fc,
-+ 0x1120, 0xae86, 0xb380, 0x0120, 0x0040, 0xae86, 0xb3c0, 0x1128,
-+ 0xa784, 0x00ff, 0xa086, 0x0018, 0x0130, 0x7014, 0x7012, 0xa005,
-+ 0x1110, 0x70c3, 0x0001, 0x0066, 0x080c, 0x52e3, 0x0156, 0x20a9,
-+ 0x0010, 0x2039, 0x0000, 0x080c, 0x3ec6, 0xa7b8, 0x0100, 0x1f04,
-+ 0x2e1b, 0x015e, 0x006e, 0x7000, 0x0002, 0x2e57, 0x2e35, 0x2e35,
-+ 0x2e2d, 0x2e57, 0x2e57, 0x2e57, 0x2e57, 0x7064, 0xa005, 0x0538,
-+ 0xad06, 0x1118, 0x6800, 0x7066, 0x0080, 0x6820, 0xd084, 0x1148,
-+ 0x6f14, 0x080c, 0x3fb3, 0x6008, 0xc0d4, 0x600a, 0x080c, 0x3be8,
-+ 0x0020, 0x7060, 0x2060, 0x6800, 0x6002, 0xa684, 0x5f00, 0x681e,
-+ 0x6818, 0xd0fc, 0x0108, 0x6a1a, 0x6817, 0x0000, 0x682b, 0x0000,
-+ 0x6820, 0xa084, 0x00ff, 0xc09d, 0x6822, 0x080c, 0x2085, 0x2011,
-+ 0x0004, 0xb284, 0x0800, 0x1118, 0x2021, 0xfb00, 0x0010, 0x2021,
-+ 0xfc10, 0x080c, 0x2ea4, 0xb284, 0x0800, 0x0118, 0x2021, 0xb3d9,
-+ 0x0010, 0x2021, 0xb399, 0x04c1, 0x0156, 0x20a9, 0x0101, 0xb284,
-+ 0x0800, 0x1118, 0x2021, 0xfa00, 0x0010, 0x2021, 0xfb10, 0x0461,
-+ 0x8420, 0x1f04, 0x2e77, 0xb284, 0x0600, 0x0118, 0x2061, 0xba00,
-+ 0x0010, 0x2061, 0xda00, 0x2021, 0x0002, 0x20a9, 0x0100, 0x6018,
-+ 0x6110, 0x81ff, 0x0118, 0xa102, 0x0308, 0x6012, 0x601b, 0x0000,
-+ 0xace0, 0x0010, 0x1f04, 0x2e87, 0x8421, 0x1d78, 0x015e, 0x7090,
-+ 0xa084, 0x8000, 0x0110, 0x080c, 0x4312, 0x706b, 0x0000, 0x7003,
-+ 0x0000, 0x7053, 0x0000, 0x0005, 0x0046, 0x2404, 0xa005, 0x01a8,
-+ 0x2068, 0x6800, 0x0006, 0x6a1a, 0x6817, 0x0000, 0x682b, 0x0000,
-+ 0x68b4, 0xa084, 0x5f00, 0x681e, 0x6820, 0xa084, 0x00ff, 0xc09d,
-+ 0x6822, 0x080c, 0x2085, 0x000e, 0x0c48, 0x004e, 0x2023, 0x0000,
-+ 0x0005, 0xa282, 0x0003, 0x0310, 0x080c, 0x297f, 0x2300, 0x0002,
-+ 0x2ecb, 0x2f45, 0x2f5f, 0xa282, 0x0002, 0x0110, 0x080c, 0x297f,
-+ 0x7068, 0x706b, 0x0000, 0x7087, 0x0000, 0x000a, 0x0002, 0x2edf,
-+ 0x2edf, 0x2ee1, 0x2f19, 0x3c14, 0x2edf, 0x2f19, 0x2edf, 0x080c,
-+ 0x297f, 0x7778, 0x080c, 0x3ec6, 0x7778, 0xa7bc, 0x8f00, 0x080c,
-+ 0x3fb3, 0x6018, 0xa005, 0x0528, 0xd7fc, 0x1118, 0x2021, 0xfb00,
-+ 0x0010, 0x2021, 0xfc10, 0x2009, 0x0005, 0x2011, 0x0010, 0x080c,
-+ 0x2f79, 0x01b8, 0x0156, 0x20a9, 0x0101, 0xd7fc, 0x1118, 0x2021,
-+ 0xfa00, 0x0010, 0x2021, 0xfb10, 0x0046, 0x2009, 0x0005, 0x2011,
-+ 0x0010, 0x080c, 0x2f79, 0x004e, 0x0118, 0x8420, 0x1f04, 0x2f04,
-+ 0x015e, 0x8738, 0xa784, 0x001f, 0x1990, 0x0804, 0x29ee, 0x0804,
-+ 0x29ee, 0x7778, 0x080c, 0x3fb3, 0x6018, 0xa005, 0x0520, 0xd7fc,
-+ 0x1118, 0x2021, 0xfb00, 0x0010, 0x2021, 0xfc10, 0x2009, 0x0005,
-+ 0x2011, 0x0020, 0x080c, 0x2f79, 0x01b0, 0x0156, 0x20a9, 0x0101,
-+ 0xd7fc, 0x1118, 0x2021, 0xfa00, 0x0010, 0x2021, 0xfb10, 0x0046,
-+ 0x2009, 0x0005, 0x2011, 0x0020, 0x04e1, 0x004e, 0x0118, 0x8420,
-+ 0x1f04, 0x2f37, 0x015e, 0x0804, 0x29ee, 0x2200, 0x0002, 0x2f4a,
-+ 0x2f4c, 0x2f4c, 0x080c, 0x297f, 0x2009, 0x0012, 0x7068, 0xa086,
-+ 0x0002, 0x0110, 0x2009, 0x000e, 0x6818, 0xd0fc, 0x0108, 0x691a,
-+ 0x706b, 0x0000, 0x70f0, 0xc0c5, 0x70f2, 0x0804, 0x404b, 0x2200,
-+ 0x0002, 0x2f66, 0x2f4c, 0x2f64, 0x080c, 0x297f, 0x080c, 0x52e3,
-+ 0x7000, 0xa086, 0x0002, 0x1904, 0x3b9e, 0x080c, 0x3bfa, 0x6008,
-+ 0xa084, 0xfbef, 0x600a, 0x080c, 0x3b90, 0x0904, 0x3b9e, 0x0804,
-+ 0x29ee, 0x2404, 0xa005, 0x0548, 0x2068, 0x2d04, 0x0006, 0x6814,
-+ 0xa706, 0x0118, 0x2d20, 0x000e, 0x0ca8, 0x000e, 0x2022, 0x6817,
-+ 0x0000, 0x682b, 0x0000, 0x68b4, 0xa084, 0x5f00, 0x681e, 0x691a,
-+ 0x6820, 0xa084, 0x00ff, 0xa205, 0x6822, 0x682b, 0x0000, 0x080c,
-+ 0x2085, 0x6010, 0x8001, 0x6012, 0x6008, 0xa084, 0xf9ef, 0x600a,
-+ 0x080c, 0x2aff, 0x080c, 0x3bfa, 0x0005, 0xa085, 0x0001, 0x0ce0,
-+ 0x2300, 0x0002, 0x2faf, 0x2fad, 0x3057, 0x080c, 0x297f, 0x78ec,
-+ 0xa084, 0x0001, 0x1170, 0x7000, 0xa086, 0x0004, 0x1110, 0x0804,
-+ 0x3006, 0x080c, 0x3bfa, 0x6008, 0xa084, 0xf9ef, 0x600a, 0x0804,
-+ 0x3b9e, 0x78e4, 0xa005, 0x1b04, 0x3006, 0x3208, 0x0006, 0x2001,
-+ 0xb342, 0x2004, 0xd0ec, 0x000e, 0x0118, 0xa18c, 0x0600, 0x0010,
-+ 0xa18c, 0x0800, 0x0118, 0x0104, 0x29df, 0x0010, 0x0304, 0x29df,
-+ 0x2008, 0xa084, 0x0030, 0x1118, 0x781b, 0x0057, 0x0005, 0x78ec,
-+ 0xa084, 0x0003, 0x0dc8, 0x7884, 0xd0fc, 0x1118, 0xa184, 0x0007,
-+ 0x0090, 0xa184, 0x0007, 0xa086, 0x0004, 0x1118, 0x2001, 0x0000,
-+ 0x0050, 0xa184, 0x0007, 0xa086, 0x0005, 0x0118, 0xa184, 0x0007,
-+ 0x0010, 0x2001, 0x0001, 0x0002, 0x3036, 0x303f, 0x302a, 0x3004,
-+ 0x409e, 0x409e, 0x3004, 0x304b, 0x080c, 0x297f, 0x7000, 0xa086,
-+ 0x0004, 0x1190, 0x7068, 0xa086, 0x0002, 0x1130, 0x2011, 0x0002,
-+ 0x2019, 0x0000, 0x0804, 0x2ec1, 0x7068, 0xa086, 0x0006, 0x0db0,
-+ 0x7068, 0xa086, 0x0004, 0x0d90, 0x79e4, 0xa184, 0x0030, 0x0120,
-+ 0x78ec, 0xa084, 0x0003, 0x1110, 0x0804, 0x3653, 0x2001, 0x0003,
-+ 0x0804, 0x339b, 0x6818, 0xd0fc, 0x0110, 0x681b, 0x001d, 0x080c,
-+ 0x3eaa, 0x782b, 0x3008, 0x781b, 0x005d, 0x0005, 0x6818, 0xd0fc,
-+ 0x0110, 0x681b, 0x001d, 0x080c, 0x3eaa, 0x0804, 0x4073, 0x6818,
-+ 0xd0fc, 0x0110, 0x681b, 0x001d, 0x080c, 0x3eaa, 0x782b, 0x3008,
-+ 0x781b, 0x00dd, 0x0005, 0x6818, 0xd0fc, 0x0110, 0x681b, 0x001d,
-+ 0x080c, 0x3eaa, 0x782b, 0x3008, 0x781b, 0x00a4, 0x0005, 0xa584,
-+ 0x000f, 0x11c0, 0x7000, 0x0002, 0x29ee, 0x3064, 0x3066, 0x3b9e,
-+ 0x3b9e, 0x3b9e, 0x3064, 0x3064, 0x080c, 0x297f, 0x080c, 0x3bfa,
-+ 0x6008, 0xa084, 0xfbef, 0x600a, 0x080c, 0x3b90, 0x0904, 0x3b9e,
-+ 0x0804, 0x29ee, 0x78e4, 0xa005, 0x1b04, 0x3006, 0x3208, 0x0006,
-+ 0x2001, 0xb342, 0x2004, 0xd0ec, 0x000e, 0x0118, 0xa18c, 0x0600,
-+ 0x0010, 0xa18c, 0x0800, 0x0118, 0x0104, 0x3006, 0x0010, 0x0304,
-+ 0x3006, 0x2008, 0xa084, 0x0030, 0x1118, 0x781b, 0x0057, 0x0005,
-+ 0x78ec, 0xa084, 0x0003, 0x0dc8, 0x7884, 0xd0fc, 0x1118, 0xa184,
-+ 0x0007, 0x0090, 0xa184, 0x0007, 0xa086, 0x0004, 0x1118, 0x2001,
-+ 0x0000, 0x0050, 0xa184, 0x0007, 0xa086, 0x0005, 0x0118, 0xa184,
-+ 0x0007, 0x0010, 0x2001, 0x0001, 0x0002, 0x30be, 0x30c2, 0x30b7,
-+ 0x30b5, 0x409e, 0x409e, 0x30b5, 0x4096, 0x080c, 0x297f, 0x080c,
-+ 0x3eb0, 0x782b, 0x3008, 0x781b, 0x005d, 0x0005, 0x080c, 0x3eb0,
-+ 0x0804, 0x4073, 0x080c, 0x3eb0, 0x782b, 0x3008, 0x781b, 0x00dd,
-+ 0x0005, 0x080c, 0x3eb0, 0x782b, 0x3008, 0x781b, 0x00a4, 0x0005,
-+ 0x2300, 0x0002, 0x30d7, 0x30d5, 0x30d9, 0x080c, 0x297f, 0x0804,
-+ 0x3804, 0x681b, 0x0016, 0x78a3, 0x0000, 0x79e4, 0xa184, 0x0030,
-+ 0x0904, 0x3804, 0x78ec, 0xa084, 0x0003, 0x0904, 0x3804, 0xa184,
-+ 0x0100, 0x0d98, 0x7884, 0xd0fc, 0x1118, 0xa184, 0x0007, 0x0090,
-+ 0xa184, 0x0007, 0xa086, 0x0004, 0x1118, 0x2001, 0x0000, 0x0050,
-+ 0xa184, 0x0007, 0xa086, 0x0005, 0x0118, 0xa184, 0x0007, 0x0010,
-+ 0x2001, 0x0001, 0x0002, 0x310b, 0x30c2, 0x302a, 0x404b, 0x409e,
-+ 0x409e, 0x404b, 0x4096, 0x080c, 0x405b, 0x0005, 0xa282, 0x0005,
-+ 0x0310, 0x080c, 0x297f, 0x7898, 0x2040, 0x2300, 0x0002, 0x311a,
-+ 0x3356, 0x3362, 0x2200, 0x0002, 0x3136, 0x3123, 0x3136, 0x3121,
-+ 0x3338, 0x080c, 0x297f, 0x789b, 0x0018, 0x78a8, 0x2010, 0xa084,
-+ 0x00ff, 0xa082, 0x0020, 0x0a04, 0x3e69, 0xa08a, 0x0004, 0x1a04,
-+ 0x3e69, 0x0002, 0x3e69, 0x3e69, 0x3e69, 0x3e1d, 0x789b, 0x0018,
-+ 0x79a8, 0xa184, 0x0080, 0x0148, 0x0804, 0x3e69, 0x7000, 0xa005,
-+ 0x1dd8, 0x2011, 0x0004, 0x0804, 0x398f, 0xa184, 0x00ff, 0xa08a,
-+ 0x0010, 0x1a04, 0x3e69, 0x0002, 0x315e, 0x315c, 0x3171, 0x3175,
-+ 0x3234, 0x3e69, 0x3e69, 0x3236, 0x3e69, 0x3e69, 0x3334, 0x3334,
-+ 0x3e69, 0x3e69, 0x3e69, 0x3336, 0x080c, 0x297f, 0xa684, 0x1000,
-+ 0x0140, 0x2001, 0x0500, 0x8000, 0x8000, 0x783a, 0x781b, 0x009d,
-+ 0x0005, 0x6818, 0xd0fc, 0x0118, 0x681b, 0x001d, 0x0c90, 0x0804,
-+ 0x404b, 0x681b, 0x001d, 0x0804, 0x3e98, 0x6920, 0x6922, 0xa684,
-+ 0x1800, 0x1904, 0x31d1, 0x6820, 0xa084, 0x0001, 0x1904, 0x31d6,
-+ 0x6818, 0xa086, 0x0008, 0x1110, 0x681b, 0x0000, 0xd6d4, 0x0904,
-+ 0x3231, 0xd6bc, 0x05a0, 0x708b, 0x0000, 0x6818, 0xa084, 0x003f,
-+ 0xa08a, 0x000d, 0x0760, 0xa08a, 0x000c, 0x718a, 0x2001, 0x000c,
-+ 0x800c, 0x718e, 0x789b, 0x0061, 0x78aa, 0x0156, 0x0136, 0x0146,
-+ 0x0016, 0xb28c, 0x0600, 0x0168, 0x0006, 0x2001, 0xb342, 0x2004,
-+ 0xd0ec, 0x000e, 0x0118, 0x20a1, 0x012b, 0x0028, 0x20a1, 0x022b,
-+ 0x0010, 0x20a1, 0x012b, 0x001e, 0x789b, 0x0000, 0x8000, 0x80ac,
-+ 0xad80, 0x000b, 0x2098, 0x53a6, 0x014e, 0x013e, 0x015e, 0x6038,
-+ 0xa005, 0x1150, 0x681c, 0xa084, 0x000e, 0x0904, 0x3e98, 0x080c,
-+ 0x3eb3, 0x782b, 0x3008, 0x0010, 0x8001, 0x603a, 0x781b, 0x005f,
-+ 0x0005, 0xd6e4, 0x0118, 0x781b, 0x006c, 0x0005, 0xa684, 0x0060,
-+ 0x0904, 0x322e, 0xd6dc, 0x0904, 0x322e, 0xd6fc, 0x1108, 0x00a0,
-+ 0xc6fc, 0x7e5a, 0x6eb6, 0x7adc, 0x79d8, 0x78d0, 0x8007, 0xa084,
-+ 0x007f, 0xa108, 0xa291, 0x0000, 0x6b98, 0x2100, 0xa302, 0x68b2,
-+ 0x6b94, 0x2200, 0xa303, 0x68ae, 0xd6f4, 0x0118, 0xc6f4, 0x7e5a,
-+ 0x6eb6, 0x7000, 0xa086, 0x0003, 0x1148, 0x0006, 0x080c, 0x52e3,
-+ 0x080c, 0x55dc, 0x000e, 0x781b, 0x006b, 0x0005, 0xa006, 0x080c,
-+ 0x56fb, 0x6ab0, 0x69ac, 0x6c98, 0x6b94, 0x2200, 0xa105, 0x0120,
-+ 0x2200, 0xa422, 0x2100, 0xa31b, 0x6caa, 0x7cd2, 0x7cda, 0x6ba6,
-+ 0x7bd6, 0x7bde, 0x2300, 0xa405, 0x1130, 0xc6f5, 0x7e5a, 0x6eb6,
-+ 0x781b, 0x006b, 0x0005, 0x781b, 0x006b, 0x2200, 0xa115, 0x1118,
-+ 0x080c, 0x55dc, 0x0005, 0x080c, 0x5622, 0x0005, 0x781b, 0x006c,
-+ 0x0005, 0x781b, 0x005f, 0x0005, 0x080c, 0x297f, 0x0804, 0x32cc,
-+ 0x00c6, 0x705c, 0x2060, 0x6920, 0xa18c, 0xecff, 0x6922, 0x6000,
-+ 0xa084, 0xcfdf, 0x6002, 0x080c, 0x3d32, 0xa006, 0x2040, 0x2038,
-+ 0x080c, 0x3de9, 0x0804, 0x32c0, 0x00c6, 0x705c, 0x2060, 0x2c48,
-+ 0x7aa8, 0xa294, 0x00ff, 0xa286, 0x0004, 0x11e8, 0x6920, 0xd1e4,
-+ 0x1180, 0x2039, 0x0000, 0x2041, 0x0000, 0x2031, 0x0000, 0xa006,
-+ 0x2010, 0x080c, 0x3d35, 0x2029, 0x0000, 0x080c, 0x3de9, 0x0804,
-+ 0x32c0, 0xa18c, 0xecff, 0x6922, 0x6104, 0xa18c, 0xffdd, 0x6106,
-+ 0x6000, 0xc0ac, 0x6002, 0xa286, 0x0003, 0x01c0, 0x6104, 0xa184,
-+ 0x0010, 0x0548, 0x080c, 0x3faf, 0x080c, 0x3dc6, 0x88ff, 0x0518,
-+ 0x00ce, 0x789b, 0x0060, 0x2800, 0x78aa, 0x7e58, 0xc695, 0x7e5a,
-+ 0xd6d4, 0x1110, 0x0804, 0x4056, 0x0804, 0x3ccc, 0x6920, 0xd1cc,
-+ 0x0130, 0xa18c, 0xfdff, 0x6922, 0x6000, 0xc0ec, 0x6002, 0x2039,
-+ 0x0000, 0x2041, 0x0000, 0x2031, 0x0000, 0xa006, 0x2010, 0x2029,
-+ 0x0000, 0x080c, 0x3de9, 0xa286, 0x0001, 0x0158, 0x6104, 0xa184,
-+ 0x0008, 0x01b0, 0x080c, 0x3faf, 0x080c, 0x3cd1, 0x88ff, 0x1980,
-+ 0x0078, 0x6920, 0xd1c4, 0x0130, 0xa18c, 0xfeff, 0x6922, 0x6000,
-+ 0xc0e4, 0x6002, 0x2031, 0x0000, 0xa006, 0x2010, 0x080c, 0x3d35,
-+ 0x00ce, 0x7e58, 0xd6d4, 0x1118, 0x781b, 0x005f, 0x0005, 0x781b,
-+ 0x006c, 0x0005, 0x0804, 0x3e92, 0x2808, 0x789b, 0x0090, 0x2019,
-+ 0x0090, 0x78a8, 0xa094, 0x00ff, 0xa286, 0x0001, 0x11b8, 0x2300,
-+ 0xa102, 0xa086, 0x0001, 0x0904, 0x3238, 0x7ca8, 0xa4a4, 0x00ff,
-+ 0xa480, 0x0002, 0xa300, 0x2018, 0xa102, 0x0a04, 0x324c, 0x0904,
-+ 0x324c, 0x24a8, 0x7aa8, 0x1f04, 0x32ea, 0x0c18, 0xa284, 0x00f0,
-+ 0xa082, 0x0020, 0x06a8, 0x2200, 0xa082, 0x0021, 0x1688, 0x7aa8,
-+ 0x8318, 0x8318, 0x2100, 0xa302, 0x0aa0, 0xa286, 0x0023, 0x0950,
-+ 0x681c, 0xa084, 0xfff1, 0x681e, 0x7e58, 0xa684, 0xfff1, 0xc0a5,
-+ 0x2030, 0x7e5a, 0x6008, 0xc0a5, 0x600a, 0x78a0, 0x8001, 0x0904,
-+ 0x32c0, 0x20a8, 0x7998, 0x789b, 0x0060, 0x78aa, 0x2011, 0x0090,
-+ 0x799a, 0x78a8, 0x7998, 0x7a9a, 0x78aa, 0x7a98, 0x1f04, 0x3318,
-+ 0xc695, 0x7e5a, 0xd6d4, 0x1110, 0x0804, 0x4056, 0x0804, 0x3ccc,
-+ 0x8318, 0x2100, 0xa302, 0x0a04, 0x32d1, 0xa284, 0x0080, 0x1904,
-+ 0x3e98, 0x78a0, 0xa005, 0x08d8, 0x0804, 0x3e98, 0x0804, 0x3e69,
-+ 0x705c, 0xa04d, 0x789b, 0x0018, 0x78a8, 0xa084, 0x00ff, 0xa08e,
-+ 0x0001, 0x0110, 0x080c, 0x297f, 0x7aa8, 0xa294, 0x00ff, 0x784b,
-+ 0x0008, 0x78a8, 0xa084, 0x00ff, 0xa08a, 0x0005, 0x1a04, 0x3e69,
-+ 0x0002, 0x3e69, 0x3c48, 0x3e69, 0x3d77, 0x4218, 0xa282, 0x0000,
-+ 0x1110, 0x080c, 0x297f, 0x080c, 0x3eaa, 0x782b, 0x3008, 0x781b,
-+ 0x006c, 0x0005, 0xa282, 0x0003, 0x1110, 0x080c, 0x297f, 0xd4fc,
-+ 0x11d0, 0x7068, 0xa005, 0x0110, 0x080c, 0x297f, 0x6f14, 0x777a,
-+ 0xa7bc, 0x8f00, 0x080c, 0x3fb3, 0x6008, 0xa085, 0x0021, 0x600a,
-+ 0x8738, 0xa784, 0x001f, 0x1db0, 0x080c, 0x3ead, 0x706b, 0x0002,
-+ 0x701b, 0x0009, 0x0010, 0x080c, 0x3eb6, 0x782b, 0x3008, 0x781b,
-+ 0x006c, 0x0005, 0xa282, 0x0004, 0x0310, 0x080c, 0x297f, 0x2300,
-+ 0x0002, 0x3394, 0x34a8, 0x34d4, 0xa286, 0x0003, 0x0110, 0x080c,
-+ 0x297f, 0x2001, 0x0000, 0x7046, 0x68d0, 0xa005, 0x0110, 0x7003,
-+ 0x0003, 0x68a0, 0xd0ec, 0x0118, 0x6008, 0xc08d, 0x600a, 0x7000,
-+ 0xa084, 0x000f, 0x0002, 0x29ee, 0x33b8, 0x33b5, 0x359e, 0x363b,
-+ 0x29ee, 0x33b3, 0x33b3, 0x080c, 0x297f, 0x6008, 0xc0d4, 0x600a,
-+ 0xd6e4, 0x1130, 0x080c, 0x52e3, 0x2009, 0x0000, 0x0804, 0x345a,
-+ 0x7868, 0xa08c, 0x00ff, 0x0588, 0xa186, 0x0008, 0x1158, 0x6008,
-+ 0xc0a4, 0x600a, 0x080c, 0x3b90, 0x0540, 0x080c, 0x3bfa, 0x080c,
-+ 0x52e3, 0x0060, 0xa186, 0x0028, 0x1500, 0x6018, 0xa005, 0x0d78,
-+ 0x8001, 0x0d68, 0x8001, 0x0d58, 0x601e, 0x0c48, 0x6820, 0xd084,
-+ 0x0904, 0x29ee, 0xc084, 0x6822, 0x080c, 0x2af4, 0x7060, 0x00c6,
-+ 0x2060, 0x6800, 0x6002, 0x00ce, 0x6004, 0x6802, 0xa005, 0x2d00,
-+ 0x1108, 0x6002, 0x6006, 0x0804, 0x29ee, 0x0016, 0x81ff, 0x11d8,
-+ 0x71f0, 0xd1bc, 0x11c0, 0xd1b4, 0x01b0, 0x080c, 0x40a8, 0x1198,
-+ 0x00d6, 0x70d8, 0xa06d, 0x6814, 0xc0fc, 0x8007, 0x7882, 0x68b4,
-+ 0x785a, 0x781b, 0x0057, 0x704c, 0xc08d, 0x780a, 0xc1b4, 0x71f2,
-+ 0x7003, 0x0030, 0x00de, 0x080c, 0x34e7, 0x001e, 0x81ff, 0x0904,
-+ 0x345a, 0xa684, 0x5f00, 0x681e, 0x682b, 0x0000, 0x6f14, 0xa186,
-+ 0x0002, 0x15c8, 0x080c, 0x2ae3, 0x080c, 0x2aff, 0x6820, 0xa084,
-+ 0x0800, 0x1588, 0x8717, 0xa294, 0x000f, 0x8213, 0x8213, 0x8213,
-+ 0x8213, 0xb284, 0x0600, 0x0118, 0xa290, 0xb800, 0x0010, 0xa290,
-+ 0xb900, 0xa290, 0x0000, 0x221c, 0xd3c4, 0x1108, 0x0070, 0x6820,
-+ 0xd0e4, 0x0128, 0xa084, 0xefff, 0x6822, 0xc3ac, 0x2312, 0x8210,
-+ 0x2204, 0xa085, 0x0038, 0x2012, 0x8211, 0xd3d4, 0x0138, 0x68a0,
-+ 0xd0c4, 0x1120, 0x080c, 0x3555, 0x0804, 0x29ee, 0x6008, 0xc08d,
-+ 0x600a, 0x0008, 0x692a, 0x6916, 0x6818, 0xd0fc, 0x0110, 0x7044,
-+ 0x681a, 0xa68c, 0x5f00, 0x691e, 0x6010, 0xa005, 0x0120, 0x8001,
-+ 0x1310, 0x080c, 0x297f, 0x6012, 0x6018, 0xa005, 0x0118, 0x8001,
-+ 0x601a, 0x1118, 0x6008, 0xc0a4, 0x600a, 0x6820, 0xd084, 0x1130,
-+ 0x6800, 0xa005, 0x1108, 0x6002, 0x6006, 0x0020, 0x7060, 0x2060,
-+ 0x6800, 0x6002, 0x2061, 0xb340, 0x6807, 0x0103, 0x2d08, 0x206b,
-+ 0x0000, 0x605c, 0x8000, 0x605e, 0x6060, 0xa005, 0x6162, 0x0110,
-+ 0x2d02, 0x0008, 0x6166, 0x7000, 0xa086, 0x0030, 0x1904, 0x29ee,
-+ 0x7003, 0x0002, 0x70d8, 0xa06d, 0x68c0, 0x703e, 0x70d4, 0xa065,
-+ 0x68c4, 0x705e, 0x2d00, 0x7052, 0xad80, 0x0009, 0x7042, 0x0005,
-+ 0xa282, 0x0004, 0x0210, 0x080c, 0x297f, 0x2200, 0x0002, 0x34ab,
-+ 0x34b3, 0x34be, 0x34b3, 0x7000, 0xa086, 0x0005, 0x0120, 0x080c,
-+ 0x3eaa, 0x782b, 0x3008, 0x781b, 0x006c, 0x0005, 0x7890, 0x8007,
-+ 0x8001, 0xa084, 0x0007, 0xa080, 0x0018, 0x789a, 0x79a8, 0xa18c,
-+ 0x00ff, 0xa186, 0x0003, 0x0128, 0xa186, 0x0000, 0x0110, 0x0804,
-+ 0x3e69, 0x781b, 0x006c, 0x0005, 0x6820, 0xc095, 0x6822, 0x82ff,
-+ 0x1118, 0x080c, 0x3eaa, 0x0030, 0x8211, 0x0110, 0x080c, 0x297f,
-+ 0x080c, 0x3eb6, 0x782b, 0x3008, 0x781b, 0x006c, 0x0005, 0xa684,
-+ 0x0060, 0x1150, 0x2d00, 0xa005, 0x0904, 0x3554, 0x682f, 0x0000,
-+ 0x6833, 0x0000, 0x0804, 0x3554, 0xd6dc, 0x1190, 0x68b4, 0xd0dc,
-+ 0x1178, 0x6998, 0x6a94, 0x692e, 0x6a32, 0x7044, 0xa005, 0x1128,
-+ 0x2200, 0xa105, 0x0120, 0x7047, 0x0015, 0x0804, 0x52e3, 0x0005,
-+ 0xd6ac, 0x0508, 0xd6f4, 0x0130, 0x682f, 0x0000, 0x6833, 0x0000,
-+ 0x0804, 0x52e3, 0x68b4, 0xa084, 0x4000, 0xa635, 0xd6f4, 0x1da0,
-+ 0x7044, 0xa005, 0x1110, 0x7047, 0x0015, 0xd6dc, 0x1130, 0x68b4,
-+ 0xd0dc, 0x0118, 0x69a8, 0x6aa4, 0x0010, 0x79d8, 0x7adc, 0x692e,
-+ 0x6a32, 0x0804, 0x52e3, 0xd6f4, 0x0130, 0x682f, 0x0000, 0x6833,
-+ 0x0000, 0x0804, 0x52e3, 0x68b4, 0xa084, 0x4800, 0xa635, 0xd6f4,
-+ 0x1da0, 0x7044, 0xa005, 0x1110, 0x7047, 0x0015, 0x79d8, 0x7adc,
-+ 0x78d0, 0x8007, 0xa084, 0x007f, 0xa108, 0xa291, 0x0000, 0x692e,
-+ 0x6a32, 0x2100, 0xa205, 0x1110, 0x0804, 0x52e3, 0x7000, 0xa086,
-+ 0x0006, 0x0110, 0x0804, 0x52e3, 0x0005, 0x6008, 0xc0cd, 0xd3cc,
-+ 0x0108, 0xc08d, 0x600a, 0x6818, 0x68ba, 0x681b, 0x0006, 0x688f,
-+ 0x0000, 0x6893, 0x0000, 0x6a30, 0x692c, 0x6a3e, 0x6942, 0x682f,
-+ 0x0003, 0x6833, 0x0000, 0x6837, 0x0020, 0x6897, 0x0000, 0x689b,
-+ 0x0020, 0x68b3, 0x0000, 0x68af, 0x0000, 0x7000, 0x0002, 0x29ee,
-+ 0x3587, 0x3581, 0x357f, 0x357f, 0x357f, 0x357f, 0x357f, 0x080c,
-+ 0x297f, 0x6820, 0xd084, 0x1118, 0x080c, 0x3be8, 0x0030, 0x7060,
-+ 0x2c50, 0x2060, 0x6800, 0x6002, 0x2a60, 0xb28c, 0x0600, 0x0118,
-+ 0x2021, 0xb399, 0x0010, 0x2021, 0xb3d9, 0x2404, 0xa005, 0x0110,
-+ 0x2020, 0x0cd8, 0x2d22, 0x206b, 0x0000, 0x0005, 0x080c, 0x3bee,
-+ 0x080c, 0x3bfa, 0x6008, 0xc0cc, 0x600a, 0x789b, 0x000e, 0x6f14,
-+ 0x6817, 0x0002, 0xb28c, 0x0600, 0x0118, 0x2009, 0x0000, 0x0010,
-+ 0x2009, 0x0001, 0x080c, 0x5736, 0xd6dc, 0x01c8, 0x691c, 0xc1ed,
-+ 0x691e, 0x6828, 0xa082, 0x000e, 0x0290, 0x6848, 0xa084, 0x000f,
-+ 0xa086, 0x000b, 0x1160, 0x685c, 0xa086, 0x0047, 0x1140, 0x2001,
-+ 0xb341, 0x2004, 0xd0ac, 0x1118, 0x2700, 0x080c, 0x28a8, 0x68b8,
-+ 0xd0fc, 0x1110, 0x681a, 0x0060, 0x6818, 0xd0fc, 0x0148, 0x7868,
-+ 0xa08c, 0x00ff, 0x0118, 0x681b, 0x001e, 0x0010, 0x681b, 0x0000,
-+ 0xb284, 0x0600, 0x1118, 0x2021, 0xb3d9, 0x0010, 0x2021, 0xb399,
-+ 0x2404, 0xad06, 0x0108, 0x7460, 0x6800, 0x2022, 0x68d3, 0x0000,
-+ 0x70f4, 0xc084, 0x70f6, 0x6a3c, 0x6940, 0x6a32, 0x692e, 0x68c4,
-+ 0x2060, 0x6000, 0xd0a4, 0x0580, 0x2041, 0x0021, 0x2049, 0x0005,
-+ 0x2051, 0x0020, 0x00d6, 0x00f6, 0x0156, 0x0146, 0x2079, 0xb340,
-+ 0x080c, 0x1cd8, 0x014e, 0x015e, 0x00fe, 0x70e8, 0x2010, 0x2009,
-+ 0x0101, 0x0026, 0x2204, 0xa06d, 0x0140, 0x6814, 0xa706, 0x0110,
-+ 0x6800, 0x0cc8, 0x6820, 0xc0d5, 0x6822, 0x002e, 0x8210, 0x8109,
-+ 0x1d80, 0x00de, 0x706b, 0x0003, 0x7083, 0x0000, 0x777a, 0x7087,
-+ 0x000f, 0x71f0, 0xc1c4, 0x71f2, 0x6818, 0xa086, 0x0002, 0x1138,
-+ 0x6817, 0x0000, 0x682b, 0x0000, 0x681c, 0xc0ec, 0x681e, 0x080c,
-+ 0x2085, 0x0804, 0x29ee, 0x080c, 0x34e7, 0x682b, 0x0000, 0x789b,
-+ 0x000e, 0x6f14, 0x080c, 0x40d9, 0xa08c, 0x00ff, 0x6916, 0x6818,
-+ 0xd0fc, 0x0110, 0x7044, 0x681a, 0xa68c, 0x5f00, 0x691e, 0x706b,
-+ 0x0000, 0x0804, 0x29ee, 0x7000, 0xa005, 0x1110, 0x0804, 0x29ee,
-+ 0xa006, 0x080c, 0x52e3, 0x6817, 0x0000, 0x6920, 0xd1ac, 0x1110,
-+ 0x681b, 0x0014, 0xa68c, 0x5f00, 0x691e, 0x682b, 0x0000, 0x6820,
-+ 0xa084, 0x00ff, 0x6822, 0x7000, 0x0002, 0x29ee, 0x367a, 0x3677,
-+ 0x367c, 0x367c, 0x367c, 0x3675, 0x3675, 0x080c, 0x297f, 0x6008,
-+ 0xc0d4, 0x600a, 0x080c, 0x3bfa, 0x6008, 0xc0a4, 0x600a, 0x0804,
-+ 0x3bb3, 0x2300, 0x0002, 0x3686, 0x3688, 0x36f1, 0x080c, 0x297f,
-+ 0xd6fc, 0x1904, 0x36da, 0x7000, 0xa00d, 0x0002, 0x29ee, 0x369e,
-+ 0x3698, 0x36c8, 0x369e, 0x36d1, 0x3696, 0x3696, 0x080c, 0x297f,
-+ 0x6894, 0x78d6, 0x78de, 0x6898, 0x78d2, 0x78da, 0xa684, 0x0060,
-+ 0x0538, 0xa086, 0x0060, 0x1510, 0xc6ac, 0xc6f4, 0xc6ed, 0x7e5a,
-+ 0x6eb6, 0x681c, 0xc0ac, 0x681e, 0xa186, 0x0002, 0x0148, 0x080c,
-+ 0x52e3, 0x69ac, 0x68b0, 0xa115, 0x0118, 0x080c, 0x5622, 0x0010,
-+ 0x080c, 0x55dc, 0x781b, 0x006c, 0x71f0, 0xd1b4, 0x1904, 0x29df,
-+ 0x70c0, 0xa086, 0x0001, 0x1904, 0x2a3f, 0x0005, 0xd6ec, 0x09f0,
-+ 0x6818, 0xd0fc, 0x0130, 0x681b, 0x0015, 0xd6f4, 0x0110, 0x681b,
-+ 0x0007, 0x080c, 0x405b, 0x0005, 0x78cb, 0x0000, 0x781b, 0x00d8,
-+ 0x0804, 0x29df, 0xc6fc, 0x7e5a, 0x7adc, 0x79d8, 0x78d0, 0x79d2,
-+ 0x8007, 0xa084, 0x007f, 0xa108, 0xa291, 0x0000, 0x6b98, 0x2100,
-+ 0xa302, 0x68b2, 0x6b94, 0x2200, 0xa303, 0x68ae, 0x781b, 0x006c,
-+ 0x0005, 0x080c, 0x297f, 0x2300, 0x0002, 0x36f8, 0x36fa, 0x3752,
-+ 0x080c, 0x297f, 0xd6fc, 0x1904, 0x3742, 0x7000, 0xa00d, 0x0002,
-+ 0x29ee, 0x3710, 0x370a, 0x373a, 0x3710, 0x373f, 0x3708, 0x3708,
-+ 0x080c, 0x297f, 0x6894, 0x78d6, 0x78de, 0x6898, 0x78d2, 0x78da,
-+ 0xa684, 0x0060, 0x0538, 0xa086, 0x0060, 0x1510, 0xa6b4, 0xbfbf,
-+ 0xc6ed, 0x7e5a, 0x6eb6, 0xa186, 0x0002, 0x0148, 0x080c, 0x52e3,
-+ 0x69ac, 0x68b0, 0xa115, 0x0118, 0x080c, 0x5622, 0x0010, 0x080c,
-+ 0x55dc, 0x781b, 0x006c, 0x681c, 0xc0b4, 0x681e, 0x71f0, 0xd1b4,
-+ 0x1904, 0x29df, 0x70c0, 0xa086, 0x0001, 0x1904, 0x2a3f, 0x0005,
-+ 0xd6ec, 0x09f0, 0x6818, 0xd0fc, 0x0110, 0x681b, 0x0007, 0x781b,
-+ 0x00dd, 0x0005, 0xc6fc, 0x7e5a, 0x7adc, 0x79d8, 0x6b98, 0x2100,
-+ 0xa302, 0x68b2, 0x6b94, 0x2200, 0xa303, 0x68ae, 0x79d2, 0x781b,
-+ 0x006c, 0x0005, 0xd6dc, 0x0130, 0x782b, 0x3009, 0x781b, 0x006c,
-+ 0x0804, 0x29df, 0x6820, 0xc095, 0x6822, 0x080c, 0x4042, 0xc6dd,
-+ 0x080c, 0x3eaa, 0x782b, 0x3008, 0x781b, 0x006c, 0x0005, 0x2300,
-+ 0x0002, 0x376c, 0x376e, 0x3770, 0x080c, 0x297f, 0x0804, 0x3e98,
-+ 0x7d98, 0xd6d4, 0x1904, 0x37bc, 0x79e4, 0xd1ac, 0x0130, 0x78ec,
-+ 0xa084, 0x0003, 0x0110, 0x782b, 0x3009, 0x789b, 0x0060, 0x78ab,
-+ 0x0000, 0xa684, 0xfffb, 0x785a, 0x7d9a, 0x79e4, 0xd1ac, 0x0120,
-+ 0x78ec, 0xa084, 0x0003, 0x11b8, 0x2001, 0xb342, 0x2004, 0xd0e4,
-+ 0x1170, 0x6820, 0xd0c4, 0x0158, 0x00c6, 0x705c, 0x2060, 0x6004,
-+ 0xc09d, 0x6006, 0x6008, 0xa084, 0x00ff, 0x600a, 0x00ce, 0x2001,
-+ 0x0014, 0x0804, 0x339b, 0x7884, 0xd0fc, 0x1118, 0xa184, 0x0007,
-+ 0x0090, 0xa184, 0x0007, 0xa086, 0x0004, 0x1118, 0x2001, 0x0000,
-+ 0x0050, 0xa184, 0x0007, 0xa086, 0x0005, 0x0118, 0xa184, 0x0007,
-+ 0x0010, 0x2001, 0x0001, 0x0492, 0x7a90, 0xa294, 0x0007, 0x789b,
-+ 0x0060, 0x79a8, 0x81ff, 0x0538, 0x789b, 0x0090, 0x7ba8, 0xa384,
-+ 0x0001, 0x11a0, 0x7ba8, 0x7ba8, 0xa386, 0x0001, 0x1118, 0x2009,
-+ 0xfff7, 0x0028, 0xa386, 0x0003, 0x1148, 0x2009, 0xffef, 0x00c6,
-+ 0x705c, 0x2060, 0x6004, 0xa104, 0x6006, 0x00ce, 0x789b, 0x0060,
-+ 0x78ab, 0x0000, 0xa684, 0xfffb, 0x785a, 0x782b, 0x3009, 0x6920,
-+ 0xa18c, 0xfcff, 0x6922, 0x7d9a, 0x0804, 0x404b, 0x3036, 0x303f,
-+ 0x37f8, 0x37fe, 0x37f6, 0x37f6, 0x404b, 0x404b, 0x080c, 0x297f,
-+ 0x6920, 0xa18c, 0xfcff, 0x6922, 0x0804, 0x4053, 0x6920, 0xa18c,
-+ 0xfcff, 0x6922, 0x0804, 0x404b, 0x79e4, 0xa184, 0x0030, 0x0120,
-+ 0x78ec, 0xa084, 0x0003, 0x1548, 0x7000, 0xa086, 0x0004, 0x1190,
-+ 0x7068, 0xa086, 0x0002, 0x1130, 0x2011, 0x0002, 0x2019, 0x0000,
-+ 0x0804, 0x2ec1, 0x7068, 0xa086, 0x0006, 0x0db0, 0x7068, 0xa086,
-+ 0x0004, 0x0d90, 0x7000, 0xa086, 0x0000, 0x0904, 0x29df, 0x6820,
-+ 0xd0ac, 0x1904, 0x339b, 0x6818, 0xa08e, 0x0002, 0x0120, 0xc0fd,
-+ 0x681a, 0x2001, 0x0014, 0x0804, 0x339b, 0x7884, 0xd0fc, 0x1118,
-+ 0xa184, 0x0007, 0x0090, 0xa184, 0x0007, 0xa086, 0x0004, 0x1118,
-+ 0x2001, 0x0000, 0x0050, 0xa184, 0x0007, 0xa086, 0x0005, 0x0118,
-+ 0xa184, 0x0007, 0x0010, 0x2001, 0x0001, 0x0002, 0x404b, 0x404b,
-+ 0x3856, 0x404b, 0x409e, 0x409e, 0x404b, 0x404b, 0xd6bc, 0x05d0,
-+ 0x7188, 0x81ff, 0x05b8, 0xa182, 0x000d, 0x1318, 0x708b, 0x0000,
-+ 0x0028, 0xa182, 0x000c, 0x708a, 0x2009, 0x000c, 0x789b, 0x0061,
-+ 0x79aa, 0x0156, 0x0136, 0x0146, 0x708c, 0x8114, 0xa210, 0x728e,
-+ 0xa080, 0x000b, 0xad00, 0x2098, 0x0016, 0xb28c, 0x0600, 0x0168,
-+ 0x0006, 0x2001, 0xb342, 0x2004, 0xd0ec, 0x000e, 0x0118, 0x20a1,
-+ 0x012b, 0x0028, 0x20a1, 0x022b, 0x0010, 0x20a1, 0x012b, 0x001e,
-+ 0x789b, 0x0000, 0x8108, 0x81ac, 0x53a6, 0x014e, 0x013e, 0x015e,
-+ 0x0804, 0x4053, 0xd6d4, 0x1904, 0x38df, 0x6820, 0xd084, 0x0904,
-+ 0x4053, 0xa68c, 0x0060, 0xa684, 0x0060, 0x0120, 0xa086, 0x0060,
-+ 0x1108, 0xc1f5, 0xc194, 0x795a, 0x69b6, 0x789b, 0x0060, 0x78ab,
-+ 0x0000, 0x789b, 0x0061, 0x6818, 0xc0fd, 0x681a, 0x78aa, 0x8008,
-+ 0x810c, 0x0904, 0x3c0f, 0xa18c, 0x00f8, 0x1904, 0x3c0f, 0x0156,
-+ 0x0136, 0x0146, 0x0016, 0xb28c, 0x0600, 0x0168, 0x0006, 0x2001,
-+ 0xb342, 0x2004, 0xd0ec, 0x000e, 0x0118, 0x20a1, 0x012b, 0x0028,
-+ 0x20a1, 0x022b, 0x0010, 0x20a1, 0x012b, 0x001e, 0x789b, 0x0000,
-+ 0x8000, 0x80ac, 0xad80, 0x000b, 0x2098, 0x53a6, 0x014e, 0x013e,
-+ 0x015e, 0x6814, 0xc0fc, 0x8007, 0x7882, 0x0804, 0x4053, 0x6818,
-+ 0xd0fc, 0x0110, 0x681b, 0x0008, 0x6820, 0xc0ad, 0x6822, 0x080c,
-+ 0x3eb0, 0x78cb, 0x0000, 0x781b, 0x00d4, 0x0005, 0x2300, 0x0002,
-+ 0x38f5, 0x397c, 0x38f3, 0x080c, 0x297f, 0x7000, 0xa084, 0x000f,
-+ 0x0002, 0x29ee, 0x3939, 0x3903, 0x390a, 0x3901, 0x29ee, 0x3901,
-+ 0x3901, 0x080c, 0x297f, 0x681c, 0xd0ec, 0x0198, 0x6008, 0xc08d,
-+ 0x600a, 0x0078, 0x68d0, 0xa005, 0x1560, 0x6920, 0xa18d, 0x0001,
-+ 0x6922, 0x68d3, 0x0001, 0x70f4, 0xc085, 0x70f6, 0x6800, 0x7066,
-+ 0x0078, 0x6920, 0xc185, 0x6922, 0x6800, 0x6006, 0xa005, 0x1108,
-+ 0x6002, 0x6008, 0xc0d4, 0x600a, 0x681c, 0xa084, 0x000e, 0x1140,
-+ 0x2009, 0xfc10, 0xb284, 0x0600, 0x0140, 0x2009, 0xfb00, 0x0028,
-+ 0x702c, 0x68be, 0x713c, 0x70e8, 0xa108, 0x2104, 0x6802, 0x2d0a,
-+ 0x7162, 0x6eb6, 0xa684, 0x0060, 0x1120, 0xa684, 0x7fff, 0x68b6,
-+ 0x04c8, 0xd6dc, 0x1150, 0xa684, 0x7fff, 0x68b6, 0x6894, 0x68a6,
-+ 0x6898, 0x68aa, 0x080c, 0x52e3, 0x0468, 0xd6ac, 0x0168, 0x68d0,
-+ 0xa005, 0x0118, 0x080c, 0x5736, 0x0010, 0x080c, 0x52e3, 0x79d8,
-+ 0x7adc, 0x69aa, 0x6aa6, 0x0030, 0x080c, 0x3fc5, 0x69aa, 0x6aa6,
-+ 0x080c, 0x52e3, 0xd6fc, 0x01b0, 0xa684, 0x7fff, 0x68b6, 0x7adc,
-+ 0x79d8, 0xd6ac, 0x1138, 0x78d0, 0x8007, 0xa084, 0x007f, 0xa108,
-+ 0xa291, 0x0000, 0x6b98, 0x2100, 0xa302, 0x68b2, 0x6b94, 0x2200,
-+ 0xa303, 0x68ae, 0x0804, 0x29ee, 0x0804, 0x3e98, 0x7043, 0x0000,
-+ 0xa282, 0x0006, 0x0310, 0x080c, 0x297f, 0x7000, 0xa086, 0x0007,
-+ 0x090c, 0x41a1, 0x2300, 0x0002, 0x398f, 0x39c1, 0x39de, 0x2200,
-+ 0x0002, 0x39bf, 0x3e98, 0x3997, 0x39bf, 0x39fe, 0x3a65, 0x7003,
-+ 0x0005, 0xb284, 0x0600, 0x0118, 0x2001, 0xfe60, 0x0010, 0x2001,
-+ 0xfe97, 0x2068, 0x7052, 0x0156, 0x20a9, 0x0037, 0x2003, 0x0000,
-+ 0x8000, 0x1f04, 0x39a6, 0x015e, 0xad80, 0x0009, 0x7042, 0xb284,
-+ 0x0600, 0x0118, 0x6817, 0x0000, 0x0010, 0x6817, 0x8000, 0x68b7,
-+ 0x0700, 0x6823, 0x0800, 0x6827, 0x0003, 0x0804, 0x3e69, 0x080c,
-+ 0x297f, 0x2200, 0xa086, 0x0003, 0x05c8, 0x7003, 0x0005, 0xb284,
-+ 0x0600, 0x0118, 0x2001, 0xfe60, 0x0010, 0x2001, 0xfe97, 0x2068,
-+ 0x7052, 0xad80, 0x0009, 0x7042, 0x2200, 0x0002, 0x3e98, 0x39dc,
-+ 0x39dc, 0x39fe, 0x39dc, 0x3e98, 0x080c, 0x297f, 0x7003, 0x0005,
-+ 0xb284, 0x0600, 0x0118, 0x2001, 0xfe60, 0x0010, 0x2001, 0xfe97,
-+ 0x2068, 0x7052, 0xad80, 0x0009, 0x7042, 0x2200, 0x0002, 0x39f7,
-+ 0x39f5, 0x39f5, 0x39f7, 0x39f5, 0x39f7, 0x080c, 0x297f, 0x080c,
-+ 0x3eb6, 0x782b, 0x3008, 0x781b, 0x006c, 0x0005, 0x7000, 0xa086,
-+ 0x0002, 0x1158, 0x70f0, 0xc0b5, 0x70f2, 0x2c00, 0x70d6, 0x2d00,
-+ 0x70da, 0x0038, 0x080c, 0x52e3, 0x0020, 0x7000, 0xa086, 0x0003,
-+ 0x0dc8, 0x7003, 0x0001, 0x7a80, 0xa294, 0x0f00, 0x789b, 0x0018,
-+ 0x7ca8, 0xa484, 0x001f, 0xa215, 0x2069, 0xfb00, 0xb284, 0x0600,
-+ 0x1118, 0xc2fd, 0x2069, 0xfc10, 0x2d04, 0x2d08, 0x7162, 0xa06d,
-+ 0x0128, 0x6814, 0xa206, 0x0500, 0x6800, 0x0cb8, 0x7003, 0x0005,
-+ 0xd2fc, 0x1118, 0x2001, 0xfe60, 0x0010, 0x2001, 0xfe97, 0x2068,
-+ 0x7052, 0x0156, 0x20a9, 0x0037, 0x2003, 0x0000, 0x8000, 0x1f04,
-+ 0x3a3c, 0x015e, 0xad80, 0x0009, 0x7042, 0x6a16, 0x68b7, 0x0700,
-+ 0x6823, 0x0800, 0x6827, 0x0003, 0x6eb4, 0x7e5a, 0x6920, 0xa184,
-+ 0x0c00, 0x0904, 0x3adc, 0x7068, 0xa086, 0x0006, 0x1128, 0x7078,
-+ 0xa206, 0x1110, 0x706a, 0x7082, 0x681b, 0x0005, 0xc1ad, 0xc1d4,
-+ 0x6922, 0x080c, 0x3eb0, 0x0804, 0x3adc, 0x7200, 0xa286, 0x0002,
-+ 0x1158, 0x70f0, 0xc0b5, 0x70f2, 0x2c00, 0x70d6, 0x2d00, 0x70da,
-+ 0x0030, 0x080c, 0x52e3, 0x0018, 0xa286, 0x0003, 0x0dd0, 0x7003,
-+ 0x0001, 0x7a80, 0xa294, 0x0f00, 0x789b, 0x0018, 0x7ca8, 0xa484,
-+ 0x001f, 0xa215, 0xb284, 0x0600, 0x1108, 0xc2fd, 0x79a8, 0x79a8,
-+ 0xa18c, 0x00ff, 0x2118, 0x70e8, 0xa168, 0x2d04, 0x2d08, 0x7162,
-+ 0xa06d, 0x0128, 0x6814, 0xa206, 0x0538, 0x6800, 0x0cb8, 0x7003,
-+ 0x0005, 0xb284, 0x0600, 0x0118, 0x2001, 0xfe60, 0x0010, 0x2001,
-+ 0xfe97, 0x2068, 0x7052, 0x0156, 0x20a9, 0x0037, 0x2003, 0x0000,
-+ 0x8000, 0x1f04, 0x3aa6, 0x015e, 0xad80, 0x0009, 0x7042, 0xb284,
-+ 0x0600, 0x0110, 0xc2fc, 0x0008, 0xc2fd, 0x6a16, 0x68b7, 0x0700,
-+ 0x6823, 0x0800, 0x6827, 0x0003, 0x6eb4, 0x6920, 0xa184, 0x0c00,
-+ 0x01d8, 0xd0dc, 0x0178, 0x7068, 0xa086, 0x0004, 0x1140, 0x7078,
-+ 0xa206, 0x1128, 0x707c, 0xa306, 0x1110, 0x706a, 0x7082, 0x080c,
-+ 0x3eb3, 0x0050, 0x681b, 0x0005, 0xc1ad, 0xc1d4, 0x6922, 0x080c,
-+ 0x3eb0, 0x7083, 0x0000, 0x0000, 0x68c4, 0x705e, 0xc6ec, 0xa684,
-+ 0x0060, 0x05d0, 0x6b98, 0x6c94, 0x69ac, 0x68b0, 0xa105, 0x11d0,
-+ 0x7bd2, 0x7bda, 0x7cd6, 0x7cde, 0xa684, 0x0060, 0xa086, 0x0060,
-+ 0x0580, 0x68d0, 0xa005, 0x0140, 0x7003, 0x0003, 0x682b, 0x0000,
-+ 0xc6ed, 0x080c, 0x55ca, 0x0428, 0xd6f4, 0x1518, 0xc6ed, 0x080c,
-+ 0x55dc, 0x00f8, 0x68b0, 0xa31a, 0x2100, 0xa423, 0x2400, 0xa305,
-+ 0x01d0, 0x7bd2, 0x7bda, 0x7cd6, 0x7cde, 0x68d0, 0xa005, 0x0128,
-+ 0x7003, 0x0003, 0x080c, 0x55ca, 0x0070, 0xd6f4, 0x1120, 0xc6ed,
-+ 0x68b0, 0x080c, 0x5622, 0xc6f4, 0x2019, 0x0000, 0x2021, 0x0000,
-+ 0x0010, 0xa6b4, 0xb7ff, 0x7e5a, 0x2009, 0x006c, 0xa684, 0x0004,
-+ 0x01b0, 0x78e4, 0xa084, 0x0030, 0x0150, 0x78ec, 0xa084, 0x0003,
-+ 0x0130, 0x782b, 0x3008, 0x2019, 0x0000, 0x2320, 0x0040, 0x00f6,
-+ 0x2079, 0xb340, 0x080c, 0x52e3, 0x00fe, 0x0904, 0x29ee, 0x791a,
-+ 0x2d00, 0x7052, 0x68c8, 0x2060, 0x71f0, 0x2001, 0xb341, 0x2004,
-+ 0xd0c4, 0x15c8, 0x70f8, 0xa02d, 0x01b8, 0xd1bc, 0x0548, 0x7a80,
-+ 0xa294, 0x0f00, 0x70fc, 0xa206, 0x0118, 0x78e0, 0xa504, 0x1558,
-+ 0x70fa, 0xc1bc, 0x71f2, 0x0438, 0x2031, 0x0001, 0x852c, 0x0218,
-+ 0x8633, 0x8210, 0x0cd8, 0x0005, 0x7de0, 0xa594, 0xff00, 0x0130,
-+ 0x2011, 0x0008, 0x852f, 0x0c81, 0x8637, 0x0008, 0x0c69, 0x8217,
-+ 0x7880, 0xa084, 0x0f00, 0xa206, 0x0170, 0x72fe, 0x76fa, 0x0058,
-+ 0x7a80, 0xa294, 0x0f00, 0x70fc, 0xa236, 0x0dc0, 0x78e0, 0xa534,
-+ 0x0da8, 0xc1bd, 0x71f2, 0xd1b4, 0x1904, 0x29df, 0x2300, 0xa405,
-+ 0x0904, 0x29df, 0x70c0, 0xa086, 0x0001, 0x1904, 0x2a3f, 0x0005,
-+ 0x6020, 0xa005, 0x0150, 0x8001, 0x6022, 0x6008, 0xa085, 0x0008,
-+ 0x600a, 0x700b, 0x0100, 0x7028, 0x6026, 0x0005, 0xa006, 0x080c,
-+ 0x52e3, 0x7000, 0xa086, 0x0002, 0x0120, 0x7068, 0xa086, 0x0005,
-+ 0x1150, 0x682b, 0x0000, 0x6817, 0x0000, 0x681b, 0x0001, 0x6823,
-+ 0x0040, 0x681f, 0x0100, 0x7000, 0xa084, 0x000f, 0x0002, 0x29ee,
-+ 0x3bc4, 0x3bc1, 0x3be4, 0x3bcd, 0x3bcb, 0x3bbf, 0x3bbf, 0x080c,
-+ 0x297f, 0x0461, 0x0429, 0x0028, 0x0449, 0x7060, 0x2060, 0x6800,
-+ 0x6002, 0x080c, 0x2085, 0x0804, 0x29ee, 0x7068, 0x706b, 0x0000,
-+ 0x7087, 0x0000, 0x0002, 0x3be0, 0x3be0, 0x3bdb, 0x3bdb, 0x3bdb,
-+ 0x3be0, 0x3bdb, 0x3be0, 0x77f0, 0xc7c5, 0x77f2, 0x0804, 0x2ed6,
-+ 0x706b, 0x0000, 0x0804, 0x29ee, 0x681b, 0x0000, 0x0804, 0x359e,
-+ 0x6800, 0xa005, 0x1108, 0x6002, 0x6006, 0x0005, 0x6010, 0xa005,
-+ 0x0120, 0x8001, 0x1310, 0x080c, 0x297f, 0x6012, 0x6008, 0xc0a4,
-+ 0x600a, 0x0005, 0x6018, 0xa005, 0x0110, 0x8001, 0x601a, 0x0005,
-+ 0x080c, 0x40d4, 0x681b, 0x0018, 0x0480, 0x080c, 0x40d4, 0x681b,
-+ 0x0019, 0x0458, 0x080c, 0x40d4, 0x681b, 0x001a, 0x0430, 0x080c,
-+ 0x40d4, 0x681b, 0x0003, 0x0408, 0x7778, 0x080c, 0x3fb3, 0x717c,
-+ 0xa18c, 0x00ff, 0xd7fc, 0x1118, 0xa1e8, 0xfa00, 0x0010, 0xa1e8,
-+ 0xfb10, 0x2d04, 0x2d08, 0x2068, 0xa005, 0x1118, 0x7082, 0x0804,
-+ 0x29ee, 0x6814, 0x7278, 0xa206, 0x0110, 0x6800, 0x0c98, 0x6800,
-+ 0x200a, 0x681b, 0x0005, 0x7083, 0x0000, 0x080c, 0x3bee, 0x6820,
-+ 0xd084, 0x1110, 0x080c, 0x3be8, 0x080c, 0x3bfa, 0x681f, 0x0000,
-+ 0x6823, 0x0020, 0x682b, 0x0000, 0x080c, 0x2085, 0x0804, 0x29ee,
-+ 0xa282, 0x0003, 0x1904, 0x3e70, 0x7da8, 0xa5ac, 0x00ff, 0x7ea8,
-+ 0xa6b4, 0x00ff, 0x6920, 0xc1bd, 0x6922, 0xd1c4, 0x05a0, 0xc1c4,
-+ 0x6922, 0xa6b4, 0x00ff, 0x0520, 0xa682, 0x001c, 0x0218, 0x0110,
-+ 0x2031, 0x001c, 0xa686, 0x0010, 0x1108, 0x8630, 0x852b, 0x852b,
-+ 0x2041, 0x0000, 0x080c, 0x3f0c, 0x0118, 0x080c, 0x3d35, 0x0090,
-+ 0x080c, 0x3ef8, 0x080c, 0x3d32, 0x6920, 0xc1c5, 0x6922, 0x7e58,
-+ 0xc695, 0x7e5a, 0xd6d4, 0x1110, 0x0804, 0x4056, 0x0804, 0x3ccc,
-+ 0x080c, 0x3d32, 0x7e58, 0xd6d4, 0x1118, 0x781b, 0x005f, 0x0005,
-+ 0x781b, 0x006c, 0x0005, 0x00c6, 0x705c, 0x2060, 0x6100, 0xd1e4,
-+ 0x0598, 0x6208, 0x8217, 0xa294, 0x00ff, 0xa282, 0x001c, 0x0218,
-+ 0x0110, 0x2011, 0x001c, 0x2600, 0xa202, 0x1208, 0x2230, 0xa686,
-+ 0x0010, 0x1108, 0x8630, 0x6208, 0xa294, 0x00ff, 0x78ec, 0xd0e4,
-+ 0x0130, 0xa282, 0x000a, 0x1240, 0x2011, 0x000a, 0x0028, 0xa282,
-+ 0x000c, 0x1210, 0x2011, 0x000c, 0x2200, 0xa502, 0x1208, 0x2228,
-+ 0x080c, 0x3efc, 0x852b, 0x852b, 0x2041, 0x0000, 0x080c, 0x3f0c,
-+ 0x0118, 0x080c, 0x3d35, 0x0020, 0x080c, 0x3ef8, 0x080c, 0x3d32,
-+ 0x7858, 0xc095, 0x785a, 0x00ce, 0x782b, 0x3008, 0x781b, 0x006c,
-+ 0x0005, 0x00c6, 0x2960, 0x6000, 0xd0e4, 0x1170, 0xa084, 0x0040,
-+ 0x1130, 0x6104, 0xa18c, 0xfff5, 0x6106, 0x00ce, 0x0005, 0x2011,
-+ 0x0032, 0x2019, 0x0000, 0x0418, 0x68a0, 0xd0cc, 0x1dc0, 0x6208,
-+ 0xa294, 0x00ff, 0x2001, 0xb343, 0x2004, 0xd0e4, 0x1148, 0x78ec,
-+ 0xd0e4, 0x0130, 0xa282, 0x000b, 0x1218, 0x2011, 0x000a, 0x0028,
-+ 0xa282, 0x000c, 0x1210, 0x2011, 0x000c, 0x6308, 0x831f, 0xa39c,
-+ 0x00ff, 0xa382, 0x001c, 0x0218, 0x0110, 0x2019, 0x001c, 0x78ab,
-+ 0x0001, 0x78ab, 0x0003, 0x78ab, 0x0001, 0x7aaa, 0x7baa, 0xa8c0,
-+ 0x0005, 0x6820, 0xc0c5, 0x6822, 0x080c, 0x2ae3, 0x00ce, 0x0005,
-+ 0x00c6, 0x2960, 0x6104, 0xa18c, 0xfff5, 0x6106, 0x2011, 0x0032,
-+ 0x2019, 0x0000, 0x0000, 0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab,
-+ 0x0001, 0x7aaa, 0x7baa, 0xa8c0, 0x0005, 0x6820, 0xc0c5, 0x6822,
-+ 0x00ce, 0x0005, 0xa006, 0x2030, 0x2010, 0x00c6, 0x715c, 0x2160,
-+ 0x0029, 0x00ce, 0x0005, 0xa006, 0x2030, 0x2010, 0x2018, 0x2008,
-+ 0xa084, 0xffe0, 0xa635, 0x7e86, 0x6018, 0x789a, 0x7eae, 0x6612,
-+ 0x78a4, 0xa084, 0x7770, 0xa18c, 0x000f, 0xa105, 0x0056, 0x2029,
-+ 0xb343, 0x252c, 0xd5cc, 0x005e, 0x0140, 0xd3a4, 0x0110, 0xa085,
-+ 0x0800, 0xd3fc, 0x0110, 0xa085, 0x8080, 0x78a6, 0x0006, 0x78ec,
-+ 0xd08c, 0x0130, 0x6028, 0xd08c, 0x0118, 0x000e, 0xc0bc, 0x0008,
-+ 0x000e, 0x6016, 0x788a, 0xa6b4, 0x001f, 0x8637, 0x8204, 0x8004,
-+ 0xa605, 0x600e, 0x6004, 0xa084, 0xffd5, 0x6006, 0x0005, 0xa282,
-+ 0x0002, 0x1904, 0x3e7a, 0x7aa8, 0x6920, 0xc1bd, 0x6922, 0xd1cc,
-+ 0x0558, 0xc1cc, 0x6922, 0xa294, 0x00ff, 0xa282, 0x0002, 0x1a04,
-+ 0x3e69, 0x080c, 0x3deb, 0x080c, 0x3d32, 0xa980, 0x0001, 0x200c,
-+ 0x080c, 0x3faf, 0x080c, 0x3cd1, 0x88ff, 0x0168, 0x789b, 0x0060,
-+ 0x2800, 0x78aa, 0x7e58, 0xc695, 0x7e5a, 0xd6d4, 0x1110, 0x0804,
-+ 0x4056, 0x0804, 0x3ccc, 0x7e58, 0xd6d4, 0x1118, 0x781b, 0x005f,
-+ 0x0005, 0x781b, 0x006c, 0x0005, 0xa282, 0x0002, 0x1218, 0xa284,
-+ 0x0001, 0x0138, 0x715c, 0xa188, 0x0000, 0x210c, 0xd1ec, 0x1108,
-+ 0xa016, 0x080c, 0x3ee9, 0x0479, 0x080c, 0x3d32, 0x7858, 0xc095,
-+ 0x785a, 0x782b, 0x3008, 0x781b, 0x006c, 0x0005, 0x00c6, 0x0026,
-+ 0x2960, 0x6000, 0x2011, 0x0001, 0xd0ec, 0x1148, 0xa084, 0x0080,
-+ 0x1120, 0xc1a4, 0x6106, 0xa006, 0x0088, 0x2011, 0x0000, 0x78ab,
-+ 0x0001, 0x78ab, 0x0002, 0x78ab, 0x0003, 0x7aaa, 0xa8c0, 0x0004,
-+ 0x080c, 0x2ae3, 0x6820, 0xa085, 0x0200, 0x6822, 0x002e, 0x00ce,
-+ 0x0005, 0x8807, 0xa715, 0x00c6, 0x705c, 0x2060, 0x0011, 0x00ce,
-+ 0x0005, 0x2009, 0x0000, 0x82ff, 0x0110, 0x2009, 0x0040, 0x6018,
-+ 0xa080, 0x0002, 0x789a, 0x78a4, 0xa084, 0xff9f, 0xa105, 0xc0ec,
-+ 0xd0b4, 0x1108, 0xc0ed, 0x6100, 0xd1f4, 0x0110, 0xa085, 0x0020,
-+ 0x78a6, 0x0006, 0x6000, 0xd09c, 0x0140, 0x6028, 0xd08c, 0x0128,
-+ 0x000e, 0xd0bc, 0x0118, 0xc0bc, 0x0008, 0x000e, 0xe016, 0x788a,
-+ 0x6004, 0xa084, 0xffef, 0x6006, 0x0005, 0x0006, 0x7000, 0xa086,
-+ 0x0003, 0x0110, 0x000e, 0x0010, 0x000e, 0x0488, 0xd6ac, 0x0578,
-+ 0x7888, 0xa084, 0x0040, 0x0558, 0x7bb8, 0x8307, 0xa084, 0x007f,
-+ 0x1508, 0x8207, 0xa084, 0x00ff, 0xa09e, 0x0001, 0x1904, 0x3e92,
-+ 0xd6f4, 0x11d0, 0x79d8, 0x7adc, 0xa108, 0xa291, 0x0000, 0x79d2,
-+ 0x79da, 0x7ad6, 0x7ade, 0x080c, 0x56fb, 0x781b, 0x006b, 0xb284,
-+ 0x0600, 0x0118, 0x2001, 0x0000, 0x0010, 0x2001, 0x0001, 0x080c,
-+ 0x555b, 0x0005, 0x080c, 0x297f, 0x781b, 0x006b, 0x0005, 0x781b,
-+ 0x006c, 0x0005, 0x2039, 0x0000, 0x2041, 0x0000, 0x2031, 0x0000,
-+ 0xa006, 0x2010, 0x080c, 0x3d35, 0x2029, 0x0000, 0x080c, 0x3de9,
-+ 0x7e58, 0x080c, 0x3eb9, 0x782b, 0x3008, 0x781b, 0x006c, 0x0005,
-+ 0x0cc1, 0x6820, 0xc0c4, 0x6822, 0x00c6, 0x705c, 0x2060, 0x080c,
-+ 0x3d72, 0x00b0, 0x0c71, 0x6820, 0xc0cc, 0x6822, 0x00c6, 0x705c,
-+ 0x2060, 0x080c, 0x3e18, 0x0060, 0x0c21, 0x6820, 0xa084, 0xecff,
-+ 0x6822, 0x00c6, 0x705c, 0x2060, 0x6004, 0xa084, 0xffc5, 0x6006,
-+ 0x00ce, 0x0005, 0x00b9, 0x782b, 0x3008, 0x781b, 0x006c, 0x0005,
-+ 0x6827, 0x0002, 0x00a9, 0x78e4, 0xa084, 0x0030, 0x0904, 0x29ee,
-+ 0x78ec, 0xa084, 0x0003, 0x0904, 0x29ee, 0x782b, 0x3008, 0x781b,
-+ 0x006c, 0x0005, 0x2001, 0x0005, 0x0070, 0x2001, 0x000c, 0x0058,
-+ 0x2001, 0x0006, 0x0040, 0x2001, 0x000d, 0x0028, 0x2001, 0x0009,
-+ 0x0010, 0x2001, 0x0007, 0x789b, 0x0090, 0x78aa, 0x789b, 0x0060,
-+ 0x78ab, 0x0001, 0xc695, 0x7e5a, 0x0804, 0x2ae3, 0x0076, 0x873f,
-+ 0xa7bc, 0x000f, 0x873b, 0x873b, 0x873b, 0x8703, 0xb28c, 0x0600,
-+ 0x0118, 0xa0e0, 0xb800, 0x0010, 0xa0e0, 0xb900, 0xa7b8, 0x0020,
-+ 0x7f9a, 0x79a4, 0xa184, 0x7fe0, 0x78ae, 0x6012, 0x79a4, 0xa184,
-+ 0x773f, 0x78a6, 0x6016, 0x6004, 0xa085, 0x0038, 0x6006, 0x007e,
-+ 0x0005, 0x789b, 0x0090, 0x78ab, 0x0001, 0x78ab, 0x0002, 0x78ab,
-+ 0x0003, 0x7aaa, 0x789b, 0x0060, 0x78ab, 0x0004, 0x0804, 0x2ae3,
-+ 0x2021, 0x0000, 0x2029, 0x0032, 0x789b, 0x0090, 0x78ab, 0x0001,
-+ 0x78ab, 0x0003, 0x78ab, 0x0001, 0x7daa, 0x7caa, 0x789b, 0x0060,
-+ 0x78ab, 0x0005, 0x0804, 0x2ae3, 0x0156, 0x0804, 0x3f4e, 0x2021,
-+ 0x3fa6, 0x20a9, 0x0009, 0x2011, 0x0029, 0xa582, 0x0028, 0x0550,
-+ 0x8420, 0x95a9, 0x2011, 0x0033, 0xa582, 0x0033, 0x0618, 0x8420,
-+ 0x95a9, 0x2019, 0x000a, 0x2011, 0x0065, 0x2200, 0xa502, 0x02d0,
-+ 0x8420, 0x2300, 0xa210, 0x1f04, 0x3f25, 0x015e, 0x0088, 0x2021,
-+ 0x3f98, 0x2019, 0x0011, 0x20a9, 0x000e, 0x2011, 0x0033, 0x2200,
-+ 0xa502, 0x0240, 0x8420, 0x2300, 0xa210, 0x1f04, 0x3f37, 0x015e,
-+ 0xa006, 0x0005, 0x8211, 0x015e, 0xa582, 0x0064, 0x1220, 0x7808,
-+ 0xa085, 0x0070, 0x780a, 0x2405, 0xa005, 0x0005, 0xa886, 0x0002,
-+ 0x01e8, 0x2021, 0x3f84, 0x20a9, 0x000d, 0x2011, 0x0028, 0xa582,
-+ 0x0028, 0x0d48, 0x8420, 0x2019, 0x0019, 0x2011, 0x0033, 0x2200,
-+ 0xa502, 0x0e00, 0x8420, 0x2300, 0xa210, 0x1f04, 0x3f5f, 0x015e,
-+ 0x2011, 0x0184, 0xa582, 0x0185, 0x0ab0, 0x0890, 0x2021, 0x3f93,
-+ 0x20a9, 0x0003, 0x2011, 0x0024, 0xa586, 0x0024, 0x0960, 0x8420,
-+ 0x2011, 0x0028, 0xa586, 0x0028, 0x0930, 0x8420, 0x2019, 0x0019,
-+ 0x2011, 0x0033, 0x0804, 0x3f37, 0x1021, 0x2202, 0x3403, 0x4604,
-+ 0x5805, 0x6a06, 0x7c07, 0x4610, 0x4612, 0x5812, 0x5a12, 0x6a14,
-+ 0x6c14, 0x6e14, 0x7e17, 0x9021, 0xb002, 0xe204, 0xe210, 0xe210,
-+ 0x1209, 0x3002, 0x3202, 0x4203, 0x4403, 0x5404, 0x5604, 0x6605,
-+ 0x6805, 0x7806, 0x7a06, 0x0c07, 0x0c07, 0x0e07, 0x10e1, 0x330a,
-+ 0x5805, 0x5a05, 0x6a06, 0x6c06, 0x7c07, 0x7e07, 0x0e00, 0x789b,
-+ 0x0090, 0xa046, 0x0005, 0xa784, 0x0f00, 0x800b, 0xa784, 0x001f,
-+ 0x8003, 0x8003, 0x8003, 0x8003, 0xa105, 0xd7fc, 0x0118, 0xa0e0,
-+ 0xda00, 0x0010, 0xa0e0, 0xba00, 0x0005, 0x79d8, 0x7adc, 0x78d0,
-+ 0x8007, 0xa084, 0x007f, 0xa108, 0xa291, 0x0000, 0x0005, 0x00e6,
-+ 0x00f6, 0xd084, 0x0138, 0x2079, 0x0100, 0x2009, 0xb3c0, 0x2071,
-+ 0xb3c0, 0x0070, 0x2001, 0xb342, 0x2004, 0xd0ec, 0x0118, 0x2079,
-+ 0x0100, 0x0010, 0x2079, 0x0200, 0x2009, 0xb380, 0x2071, 0xb380,
-+ 0x2091, 0x8000, 0x2104, 0xa084, 0x000f, 0x0002, 0x3ff8, 0x3ff8,
-+ 0x3ff8, 0x3ff8, 0x3ff8, 0x3ff8, 0x3ff6, 0x403d, 0x080c, 0x297f,
-+ 0x69b4, 0xc1f5, 0xa18c, 0xff9f, 0x69b6, 0xa005, 0x05d8, 0x7858,
-+ 0xa084, 0xff9f, 0xa085, 0x6000, 0x785a, 0x7828, 0xa086, 0x1814,
-+ 0x1588, 0x784b, 0x0004, 0x7848, 0xa084, 0x0004, 0x1de0, 0x784b,
-+ 0x0008, 0x7848, 0xa084, 0x0008, 0x1de0, 0x7830, 0xd0bc, 0x1510,
-+ 0x3200, 0x0006, 0x2001, 0xb342, 0x2004, 0xd0ec, 0x000e, 0x0118,
-+ 0xa084, 0x0600, 0x0010, 0xa084, 0x0800, 0x0118, 0x0104, 0x403a,
-+ 0x0010, 0x0304, 0x403a, 0x79e4, 0xa184, 0x0030, 0x0158, 0x78ec,
-+ 0xa084, 0x0003, 0x0138, 0x681c, 0xd0ac, 0x1110, 0x0421, 0x0010,
-+ 0x781b, 0x00dd, 0x00fe, 0x00ee, 0x0005, 0x70a7, 0x0000, 0x080c,
-+ 0x4397, 0x0cc0, 0x2001, 0xb341, 0x2004, 0xd0ac, 0x1118, 0x6814,
-+ 0x080c, 0x28a8, 0x0005, 0x781b, 0x006c, 0x0005, 0x782b, 0x3008,
-+ 0x781b, 0x006c, 0x0005, 0x781b, 0x005f, 0x0005, 0x782b, 0x3008,
-+ 0x781b, 0x005d, 0x0005, 0x2009, 0xb356, 0x210c, 0xa186, 0x0000,
-+ 0x0150, 0xa186, 0x0001, 0x0160, 0x701b, 0x000b, 0x706b, 0x0001,
-+ 0x781b, 0x0050, 0x0005, 0x78cb, 0x0000, 0x781b, 0x00d8, 0x0005,
-+ 0x701b, 0x000a, 0x0005, 0x2009, 0xb356, 0x210c, 0xa186, 0x0000,
-+ 0x0170, 0xa186, 0x0001, 0x0140, 0x701b, 0x000b, 0x706b, 0x0001,
-+ 0x781b, 0x0050, 0x0804, 0x29df, 0x701b, 0x000a, 0x0005, 0x782b,
-+ 0x3008, 0x78cb, 0x0000, 0x781b, 0x00d8, 0x0005, 0x781b, 0x00dd,
-+ 0x0005, 0x782b, 0x3008, 0x781b, 0x00dd, 0x0005, 0x781b, 0x00a4,
-+ 0x0005, 0x782b, 0x3008, 0x781b, 0x00a4, 0x0005, 0x6818, 0xd0fc,
-+ 0x0110, 0x681b, 0x001d, 0x706b, 0x0001, 0x781b, 0x0050, 0x0005,
-+ 0x7830, 0xa084, 0x00c0, 0x1180, 0x7808, 0xa084, 0xfffc, 0x780a,
-+ 0xe000, 0xe000, 0xe000, 0xe000, 0x78ec, 0xa084, 0x0021, 0x1108,
-+ 0x0005, 0x704c, 0xc08d, 0x780a, 0x0005, 0x7830, 0xa084, 0x0080,
-+ 0x1190, 0x78ec, 0xa084, 0x0002, 0x1170, 0x7808, 0xc08c, 0x780a,
-+ 0xe000, 0xe000, 0xe000, 0xe000, 0x78ec, 0xa084, 0x0002, 0x0118,
-+ 0x7808, 0xc08d, 0x780a, 0x0005, 0x704c, 0xc08d, 0x704e, 0x780a,
-+ 0x0005, 0x7830, 0xa084, 0x0040, 0x1de0, 0x3200, 0x0006, 0x2001,
-+ 0xb342, 0x2004, 0xd0ec, 0x000e, 0x0118, 0xa084, 0x0600, 0x0010,
-+ 0xa084, 0x0800, 0x0118, 0x1104, 0x40f2, 0x0010, 0x1304, 0x40f2,
-+ 0x78ac, 0x0005, 0x7808, 0xa084, 0xfffd, 0x780a, 0xe000, 0xe000,
-+ 0xe000, 0xe000, 0x78ec, 0xa084, 0x0021, 0x0198, 0x3200, 0x0006,
-+ 0x2001, 0xb342, 0x2004, 0xd0ec, 0x000e, 0x0118, 0xa084, 0x0600,
-+ 0x0010, 0xa084, 0x0800, 0x0118, 0x1104, 0x410c, 0x0010, 0x1304,
-+ 0x410f, 0x78ac, 0x0006, 0x704c, 0x780a, 0x000e, 0x0005, 0x78ec,
-+ 0xa084, 0x0002, 0x1904, 0x52a1, 0xa784, 0x007d, 0x1118, 0x2700,
-+ 0x080c, 0x297f, 0xa784, 0x0001, 0x1904, 0x3653, 0xa784, 0x0070,
-+ 0x0140, 0x00c6, 0x2d60, 0x2f68, 0x080c, 0x2899, 0x2d78, 0x2c68,
-+ 0x00ce, 0xa784, 0x0008, 0x0148, 0x784b, 0x0008, 0x78ec, 0xa084,
-+ 0x0003, 0x0904, 0x3653, 0x0804, 0x404b, 0xa784, 0x0004, 0x0538,
-+ 0x78b8, 0xa084, 0x8000, 0x0518, 0x784b, 0x0008, 0x78ec, 0xa084,
-+ 0x0003, 0x0904, 0x3653, 0x78e4, 0xa084, 0x0007, 0xa086, 0x0001,
-+ 0x11b0, 0x78c0, 0xa085, 0x4800, 0x2030, 0x7e5a, 0x781b, 0x00dd,
-+ 0x0005, 0x784b, 0x0008, 0x6818, 0xd0fc, 0x0130, 0x681b, 0x0015,
-+ 0xd6f4, 0x0110, 0x681b, 0x0007, 0x080c, 0x405b, 0x0005, 0x681b,
-+ 0x0003, 0x7858, 0xa084, 0x5f00, 0x681e, 0x682f, 0x0000, 0x6833,
-+ 0x0000, 0x784b, 0x0008, 0x78ec, 0xa084, 0x0003, 0x0904, 0x3006,
-+ 0x3200, 0x0006, 0x2001, 0xb342, 0x2004, 0xd0ec, 0x000e, 0x0118,
-+ 0xa084, 0x0600, 0x0010, 0xa084, 0x0800, 0x0118, 0x0104, 0x29df,
-+ 0x0010, 0x0304, 0x29df, 0x0804, 0x3e92, 0x6b14, 0x8307, 0xa084,
-+ 0x000f, 0x8003, 0x8003, 0x8003, 0x8003, 0xd3fc, 0x0118, 0xa080,
-+ 0xb900, 0x0010, 0xa080, 0xb800, 0x2060, 0x2048, 0x705e, 0x2a60,
-+ 0x0005, 0x7000, 0x0002, 0x41ab, 0x41ab, 0x41ac, 0x41b4, 0x41ab,
-+ 0x41ab, 0x41ab, 0x41b7, 0x0005, 0x6008, 0xa084, 0xfbef, 0x600a,
-+ 0x6018, 0x8001, 0x601a, 0x0005, 0x080c, 0x52e3, 0x0005, 0x7094,
-+ 0xa005, 0x01a8, 0x2068, 0xb284, 0x0600, 0x0118, 0x2009, 0x0000,
-+ 0x0010, 0x2009, 0x0001, 0x0016, 0x080c, 0x1eb2, 0x001e, 0x0016,
-+ 0x080c, 0x5222, 0x001e, 0x080c, 0x5223, 0x7097, 0x0000, 0x0005,
-+ 0x00c6, 0x2960, 0x6000, 0xd0ac, 0x0904, 0x4216, 0xd1ac, 0x05e0,
-+ 0x6108, 0x8117, 0xa18c, 0x00ff, 0x631c, 0x832f, 0x68a0, 0xd0cc,
-+ 0x11c8, 0xa584, 0x00ff, 0x0138, 0x78ec, 0xd0e4, 0x0110, 0x8213,
-+ 0x00b8, 0x2029, 0x0000, 0xa182, 0x000c, 0x1290, 0x78ec, 0xd0e4,
-+ 0x1118, 0x2009, 0x000c, 0x0060, 0xa182, 0x000b, 0x1248, 0x2009,
-+ 0x000a, 0x0030, 0x2009, 0x0032, 0x2011, 0x0000, 0x2029, 0x0000,
-+ 0x78ab, 0x0001, 0x78ab, 0x0006, 0x78ab, 0x0004, 0x79aa, 0x78ab,
-+ 0x0000, 0x7aaa, 0x7baa, 0x7daa, 0xa8c0, 0x0008, 0x6820, 0xa085,
-+ 0x1000, 0x6822, 0x080c, 0x2ae3, 0xa085, 0x0001, 0x00ce, 0x0005,
-+ 0xa282, 0x0006, 0x1904, 0x3e84, 0x7da8, 0x7eac, 0x8637, 0xa5ac,
-+ 0x00ff, 0xa6b4, 0x00ff, 0x7fac, 0x8747, 0xa7bc, 0x00ff, 0xa8c4,
-+ 0x00ff, 0x6920, 0xc1bd, 0x6922, 0xd1e4, 0x0904, 0x4286, 0xa18c,
-+ 0xecff, 0x6922, 0xa782, 0x0002, 0x1a04, 0x3e5a, 0xa6b4, 0x00ff,
-+ 0x0904, 0x4283, 0xa682, 0x0039, 0x1a04, 0x3e5a, 0xa582, 0x0009,
-+ 0x0a04, 0x3e5a, 0xa882, 0x0003, 0x1a04, 0x3e5a, 0xa886, 0x0002,
-+ 0x01d0, 0xa886, 0x0000, 0x1904, 0x3e5a, 0x2001, 0x000c, 0x79ec,
-+ 0xd1e4, 0x0110, 0x2001, 0x000a, 0xa502, 0x1290, 0x080c, 0x3e5a,
-+ 0x00c6, 0x2960, 0x6004, 0xa085, 0x001a, 0x6006, 0x6000, 0xc0ac,
-+ 0x6002, 0x00ce, 0x0005, 0xa786, 0x0000, 0x0904, 0x3e5a, 0x8634,
-+ 0xa686, 0x0010, 0x1108, 0x8630, 0x852b, 0x852b, 0x080c, 0x3f0c,
-+ 0x0904, 0x3e5a, 0x2029, 0x0000, 0x080c, 0x3d35, 0x2029, 0x0000,
-+ 0x080c, 0x3de9, 0x7e58, 0xd6d4, 0x1118, 0x781b, 0x005f, 0x0005,
-+ 0x781b, 0x006c, 0x0005, 0x080c, 0x3d32, 0x0c80, 0xa886, 0x0002,
-+ 0x1108, 0x8634, 0x715c, 0xa188, 0x0000, 0x210c, 0xd1ac, 0x0904,
-+ 0x3e5a, 0xd1ec, 0x1120, 0x2039, 0x0000, 0x2041, 0x0000, 0xd1e4,
-+ 0x1118, 0xa036, 0x2041, 0x0000, 0xa782, 0x0002, 0x12c8, 0x621c,
-+ 0xa284, 0x00ff, 0xa706, 0x0110, 0x2039, 0x0000, 0xa605, 0x0190,
-+ 0x6108, 0x811f, 0xa39c, 0x00ff, 0x0168, 0xa302, 0x1208, 0x2330,
-+ 0x8807, 0xa705, 0xa086, 0x0201, 0x0160, 0xa886, 0x0000, 0x0168,
-+ 0x2039, 0x0000, 0x2041, 0x0000, 0x2031, 0x0000, 0xa006, 0x2010,
-+ 0x0070, 0xa284, 0xff00, 0x1108, 0x2040, 0xa184, 0x00ff, 0xa502,
-+ 0x0108, 0x2128, 0x852b, 0x852b, 0x080c, 0x3f0c, 0x0d58, 0x080c,
-+ 0x3d35, 0x2029, 0x0000, 0x080c, 0x3de9, 0x789b, 0x0090, 0x78ab,
-+ 0x0001, 0x78ab, 0x0006, 0x78ab, 0x0004, 0x78ab, 0x0000, 0x7daa,
-+ 0x7eaa, 0x7faa, 0x2800, 0x78aa, 0x789b, 0x0060, 0x78ab, 0x0005,
-+ 0x080c, 0x2ae3, 0x7858, 0xc095, 0x785a, 0x0804, 0x1e66, 0x00e6,
-+ 0x2091, 0x8000, 0x6014, 0xd0fc, 0x1118, 0x2071, 0xb380, 0x0010,
-+ 0x2071, 0xb3c0, 0x7000, 0xa086, 0x0007, 0x1150, 0x6110, 0x70b0,
-+ 0xa106, 0x1130, 0x00ee, 0x080c, 0x1ec4, 0x0041, 0xa006, 0x0005,
-+ 0x2091, 0x8001, 0x00ee, 0xa085, 0x0001, 0x0005, 0x00f6, 0x00e6,
-+ 0x0804, 0x265a, 0x785b, 0x0000, 0x70a3, 0x000e, 0x2009, 0x0100,
-+ 0x0016, 0x7094, 0xa06d, 0x0118, 0x7097, 0x0000, 0x0028, 0x70a7,
-+ 0x0000, 0x080c, 0x1ef1, 0x0128, 0x70a0, 0x6826, 0x080c, 0x4432,
-+ 0x0cb0, 0x001e, 0x0076, 0x0156, 0x00c6, 0x00d6, 0x20a9, 0x0020,
-+ 0x3238, 0xa7bc, 0x0600, 0x0120, 0x2061, 0xfc20, 0xc7fc, 0x0018,
-+ 0x2061, 0xfd40, 0xc7fd, 0x6000, 0xa105, 0x6002, 0x601c, 0xa06d,
-+ 0x0140, 0x6800, 0x601e, 0x080c, 0x1ca6, 0x6008, 0x8000, 0x600a,
-+ 0x0ca8, 0x6018, 0xa06d, 0x0128, 0x6800, 0x601a, 0x080c, 0x1ca6,
-+ 0x0cc0, 0xace0, 0x0009, 0x0f04, 0x4356, 0x0c28, 0x7090, 0xa084,
-+ 0x8000, 0x0110, 0x080c, 0x44ac, 0x00de, 0x00ce, 0x015e, 0x007e,
-+ 0x0005, 0x6804, 0xa084, 0x000f, 0x0002, 0x4375, 0x4375, 0x4375,
-+ 0x4375, 0x4375, 0x4375, 0x4377, 0x4386, 0x4375, 0x4375, 0x4375,
-+ 0x4375, 0x4375, 0x4392, 0x4375, 0x4377, 0x080c, 0x297f, 0x0006,
-+ 0x7830, 0xd0b4, 0x0128, 0x784b, 0x0004, 0x7848, 0xd094, 0x1de8,
-+ 0x000e, 0x080c, 0x4f11, 0x080c, 0x1ca6, 0x0080, 0x6827, 0x000b,
-+ 0x0006, 0x7830, 0xd0b4, 0x0128, 0x784b, 0x0004, 0x7848, 0xd094,
-+ 0x1de8, 0x000e, 0x080c, 0x4f11, 0x080c, 0x4432, 0x0005, 0x00f6,
-+ 0x6814, 0xd0fc, 0x1178, 0x2001, 0xb342, 0x2004, 0xd0ec, 0x0128,
-+ 0x2079, 0x0100, 0x1104, 0x43c8, 0x0048, 0x2079, 0x0200, 0x1304,
-+ 0x43c8, 0x0020, 0x2079, 0x0100, 0x1104, 0x43c8, 0x7830, 0xa084,
-+ 0x00c0, 0x11b0, 0x00d6, 0x080c, 0x522f, 0x2d00, 0x682e, 0x2009,
-+ 0x0004, 0x2001, 0x0000, 0x6827, 0x0084, 0x080c, 0x51da, 0x080c,
-+ 0x4432, 0x00de, 0x70a8, 0xa080, 0x00bf, 0x781a, 0x0804, 0x4408,
-+ 0x7948, 0x6814, 0xd0fc, 0x1158, 0x2001, 0xb342, 0x2004, 0xd0ec,
-+ 0x0118, 0x1104, 0x43db, 0x0028, 0x1304, 0x43db, 0x0010, 0x1104,
-+ 0x43db, 0x794a, 0x08b8, 0x7948, 0x7828, 0x0006, 0xa084, 0xf000,
-+ 0xa086, 0x1000, 0x000e, 0x1da8, 0xd0b4, 0x1d98, 0xd0ac, 0x0118,
-+ 0xa185, 0x0004, 0x0010, 0xa185, 0x000c, 0x784a, 0x789b, 0x000e,
-+ 0x78ab, 0x0002, 0x7858, 0xa084, 0x00ff, 0xa085, 0x0400, 0x785a,
-+ 0x70a8, 0xa080, 0x00a1, 0x781a, 0x6827, 0x0284, 0x682c, 0x6836,
-+ 0x6830, 0x683a, 0x2009, 0x0004, 0x2001, 0x0000, 0x080c, 0x51da,
-+ 0x00fe, 0x0005, 0x00d6, 0x6b14, 0x080c, 0x1f5a, 0x0128, 0x2068,
-+ 0x6827, 0x0002, 0x00f9, 0x0cc0, 0x00de, 0x0005, 0x00d6, 0x6b14,
-+ 0x6c28, 0xa4a4, 0x00ff, 0x080c, 0x1efb, 0x0120, 0x2068, 0x6827,
-+ 0x0002, 0x0081, 0x00de, 0x0005, 0x00d6, 0x6814, 0xa09c, 0x00ff,
-+ 0x080c, 0x1f2c, 0x0128, 0x2068, 0x6827, 0x0002, 0x0019, 0x0cc0,
-+ 0x00de, 0x0005, 0x00c6, 0x6914, 0x6814, 0x080c, 0x449c, 0x6904,
-+ 0xa18c, 0x00ff, 0xa186, 0x0006, 0x0170, 0xa186, 0x000d, 0x0550,
-+ 0xa186, 0x0017, 0x1120, 0x080c, 0x1ca6, 0x00ce, 0x0005, 0x080c,
-+ 0x2087, 0x00ce, 0x0005, 0x6004, 0x8001, 0x02b0, 0x6006, 0x2009,
-+ 0x0000, 0xa684, 0x0001, 0x1110, 0xa18d, 0x8000, 0xa684, 0x0004,
-+ 0x0110, 0xa18d, 0x0002, 0x691e, 0x6823, 0x0000, 0x711c, 0x810f,
-+ 0x6818, 0xa105, 0x681a, 0x0c18, 0x6100, 0xa184, 0x0001, 0x09d8,
-+ 0x080c, 0x297f, 0x6018, 0xa005, 0x1148, 0x6008, 0x8001, 0x0230,
-+ 0x600a, 0x601c, 0x6802, 0x2d00, 0x601e, 0x00a0, 0xac88, 0x0006,
-+ 0x2104, 0xa005, 0x0110, 0x2008, 0x0cd8, 0x6802, 0x2d0a, 0x6008,
-+ 0x8001, 0x0230, 0x600a, 0x6018, 0x2068, 0x6800, 0x601a, 0x0c48,
-+ 0x00ce, 0x0005, 0x0156, 0x0136, 0x0146, 0x00c6, 0x00d6, 0x080c,
-+ 0x1c85, 0x2da0, 0x013e, 0x20a9, 0x0037, 0x53a3, 0x00ce, 0x014e,
-+ 0x013e, 0x015e, 0x0804, 0x4447, 0xd0fc, 0x1118, 0x2061, 0xfc20,
-+ 0x0010, 0x2061, 0xfd40, 0xa184, 0x001f, 0xac60, 0x8003, 0x8003,
-+ 0x8003, 0xac00, 0x2060, 0x0005, 0xd7fc, 0x1168, 0x2019, 0xb393,
-+ 0x2001, 0xb342, 0x2004, 0xd0ec, 0x0118, 0x2021, 0x0102, 0x0038,
-+ 0x2021, 0x0202, 0x0020, 0x2019, 0xb3d3, 0x2021, 0x0102, 0x2304,
-+ 0xa085, 0x0001, 0x201a, 0x2404, 0xa085, 0x0001, 0x2022, 0x0005,
-+ 0xd7fc, 0x1168, 0x2019, 0xb393, 0x2001, 0xb342, 0x2004, 0xd0ec,
-+ 0x0118, 0x2021, 0x0102, 0x0038, 0x2021, 0x0202, 0x0020, 0x2019,
-+ 0xb3d3, 0x2021, 0x0102, 0x2304, 0xa084, 0xfffe, 0x201a, 0x2404,
-+ 0xa084, 0xfffe, 0x2022, 0x0005, 0x7990, 0xa18c, 0xfff8, 0x7992,
-+ 0x70a8, 0xa080, 0x00f1, 0x781a, 0x0804, 0x29df, 0x7097, 0x0000,
-+ 0x7003, 0x0000, 0x704b, 0x0001, 0x7043, 0x0000, 0x080c, 0x1ef1,
-+ 0x0528, 0x70ef, 0x0000, 0x68cc, 0x2060, 0x6100, 0xa184, 0x0300,
-+ 0x0150, 0x6827, 0x000e, 0xa084, 0x0200, 0x0110, 0x6827, 0x0017,
-+ 0x080c, 0x4432, 0x0c18, 0x7000, 0xa086, 0x0007, 0x1904, 0x4597,
-+ 0x6910, 0x70b0, 0xa106, 0x0120, 0x2d60, 0x080c, 0x1ec4, 0x0005,
-+ 0x2d00, 0x7096, 0xad80, 0x000f, 0x7042, 0x0050, 0x7010, 0xa005,
-+ 0x1128, 0x7048, 0xa086, 0x0001, 0x0904, 0x29f8, 0x0804, 0x29df,
-+ 0xa036, 0x691c, 0xa184, 0x0002, 0x0110, 0xa6b5, 0x0004, 0xa184,
-+ 0x00c0, 0x8003, 0x8003, 0x8007, 0xa080, 0x4646, 0x2005, 0xa635,
-+ 0x080c, 0x2ae3, 0x6820, 0xa084, 0x0400, 0x0150, 0x789b, 0x0018,
-+ 0x78ab, 0x0003, 0x789b, 0x0081, 0x78ab, 0x0001, 0xa6b5, 0x5000,
-+ 0x6820, 0xa084, 0x8000, 0x0140, 0xa6b5, 0x0400, 0x789b, 0x000e,
-+ 0x6824, 0x8007, 0x78aa, 0x00d8, 0x681c, 0xd0fc, 0x1140, 0xa6b5,
-+ 0x0800, 0x6820, 0xd0c4, 0x0198, 0xa6b5, 0x4000, 0x0080, 0x6820,
-+ 0xd0c4, 0x0118, 0xa6b5, 0x4000, 0x0050, 0x789b, 0x0018, 0x78ab,
-+ 0x0002, 0x789b, 0x0081, 0x78ab, 0x0001, 0xa6b5, 0x1000, 0xa684,
-+ 0x0200, 0x0508, 0x00c6, 0x080c, 0x4fc6, 0x6028, 0xd08c, 0x0138,
-+ 0x6020, 0x00ce, 0x6930, 0x6a2c, 0x080c, 0x52b7, 0x0028, 0x00ce,
-+ 0x682c, 0x78d2, 0x6830, 0x78d6, 0xa684, 0x0100, 0x0150, 0x682c,
-+ 0xa084, 0x0001, 0x0130, 0x7888, 0xa084, 0x0040, 0x0110, 0xa6b5,
-+ 0x8000, 0x080c, 0x5207, 0x7e5a, 0x6eb6, 0x0804, 0x524e, 0x080c,
-+ 0x40a8, 0x1904, 0x4640, 0x2041, 0x0001, 0x2031, 0x1000, 0x080c,
-+ 0x2ae3, 0x789b, 0x0018, 0x6814, 0xa084, 0x001f, 0xa085, 0x0080,
-+ 0x78aa, 0x691c, 0xa184, 0x0002, 0x0140, 0xa6b5, 0x0004, 0x78ab,
-+ 0x0020, 0x6828, 0x78aa, 0xa8c0, 0x0002, 0x681c, 0xd0f4, 0x0128,
-+ 0x2c50, 0x080c, 0x418d, 0x080c, 0x5044, 0x6820, 0xa084, 0x8000,
-+ 0x0140, 0xa6b5, 0x0400, 0x789b, 0x000e, 0x6824, 0x8007, 0x78aa,
-+ 0x0060, 0x681c, 0xa084, 0x8000, 0x1140, 0xa6b5, 0x0800, 0x6820,
-+ 0xa084, 0x0100, 0x0110, 0xa6b5, 0x4000, 0x681c, 0xa084, 0x00c0,
-+ 0x8003, 0x8003, 0x8007, 0xa080, 0x4646, 0x2005, 0xa635, 0xa684,
-+ 0x0100, 0x0150, 0x682c, 0xa084, 0x0001, 0x0130, 0x7888, 0xa084,
-+ 0x0040, 0x0110, 0xa6b5, 0x8000, 0x789b, 0x007e, 0x7eae, 0x6eb6,
-+ 0x6814, 0xc0fc, 0x8007, 0x78aa, 0x7882, 0x2810, 0x7aaa, 0x7830,
-+ 0xa084, 0x00c0, 0x1904, 0x4640, 0x6914, 0xd1fc, 0x1158, 0x2001,
-+ 0xb342, 0x2004, 0xd0ec, 0x0118, 0x0104, 0x4640, 0x0028, 0x0304,
-+ 0x4640, 0x0010, 0x0104, 0x4640, 0x0126, 0x00d6, 0x00c6, 0x70f0,
-+ 0xa084, 0x2e00, 0x2090, 0x00ce, 0x00de, 0x012e, 0xa684, 0x0200,
-+ 0x01a8, 0x00c6, 0x080c, 0x4fc6, 0x6028, 0xd08c, 0x0140, 0x6020,
-+ 0xa005, 0x0128, 0x6930, 0x6a2c, 0x080c, 0x52b7, 0x0020, 0x682c,
-+ 0x78d2, 0x6830, 0x78d6, 0x00ce, 0x080c, 0x5207, 0x70a8, 0xa080,
-+ 0x00fc, 0x781a, 0x080c, 0x40d4, 0x2d00, 0x7096, 0x7052, 0x6810,
-+ 0x70b2, 0x7003, 0x0007, 0xad80, 0x000f, 0x7042, 0x0804, 0x29df,
-+ 0x080c, 0x1eb2, 0x080c, 0x40d4, 0x0804, 0x29df, 0x0000, 0x0300,
-+ 0x0200, 0x0000, 0x080c, 0x297f, 0x2300, 0x0002, 0x4651, 0x4651,
-+ 0x4658, 0x080c, 0x297f, 0x71a8, 0xa188, 0x00a1, 0x791a, 0x0005,
-+ 0x080c, 0x5223, 0x6924, 0xa184, 0x00ff, 0xa086, 0x000a, 0x0148,
-+ 0xa184, 0xff00, 0xa085, 0x000a, 0x6826, 0x080c, 0x1eb2, 0x0804,
-+ 0x44ee, 0x2001, 0x000a, 0x080c, 0x5184, 0x0804, 0x44ee, 0xa282,
-+ 0x0005, 0x0310, 0x080c, 0x297f, 0x7000, 0xa084, 0x000f, 0x190c,
-+ 0x41a1, 0x080c, 0x1c85, 0x11b8, 0x2069, 0xffff, 0xa684, 0x0004,
-+ 0x0118, 0x2001, 0x2800, 0x0010, 0x2001, 0x0800, 0x71a8, 0xa188,
-+ 0x00a1, 0x789b, 0x000e, 0x8007, 0x78aa, 0x2031, 0x0400, 0x7e5a,
-+ 0x791a, 0x0804, 0x29df, 0x6807, 0x0106, 0x680b, 0x0000, 0x689f,
-+ 0x0000, 0x6827, 0x0000, 0xa386, 0x0002, 0x1180, 0xa286, 0x0002,
-+ 0x1168, 0x78a0, 0xa005, 0x1150, 0xd4fc, 0x1140, 0x78e4, 0xa084,
-+ 0x0008, 0x0120, 0xa6b5, 0x0008, 0x2019, 0x0000, 0x080c, 0x4b0c,
-+ 0x2d00, 0x7096, 0x7052, 0x7003, 0x0007, 0x7043, 0x0000, 0x6020,
-+ 0xa084, 0x000f, 0x680e, 0x6824, 0xa084, 0x0080, 0x0120, 0x080c,
-+ 0x4bc9, 0x0804, 0x29df, 0x2300, 0x0002, 0x46c8, 0x473d, 0x4754,
-+ 0x2200, 0x0002, 0x46cf, 0x46de, 0x4700, 0x470a, 0x472b, 0x2029,
-+ 0x0001, 0xa026, 0x2011, 0x0000, 0x080c, 0x4ce3, 0x0002, 0x46dc,
-+ 0x29df, 0x44ee, 0x46dc, 0x46dc, 0x080c, 0x297f, 0x7990, 0xa18c,
-+ 0x0007, 0x1110, 0x2009, 0x0008, 0x2011, 0x0001, 0xa684, 0x0004,
-+ 0x0110, 0x2011, 0x0003, 0x2220, 0xa12a, 0x2011, 0x0001, 0x080c,
-+ 0x4ce3, 0x0002, 0x46f7, 0x29df, 0x44ee, 0x46fe, 0x46f9, 0x0804,
-+ 0x526b, 0x709f, 0x46fd, 0x0804, 0x29df, 0x0cc8, 0x080c, 0x297f,
-+ 0xa684, 0x0010, 0x0128, 0x080c, 0x4b94, 0x0110, 0x0804, 0x29df,
-+ 0x0804, 0x4c05, 0x6000, 0xa084, 0x0002, 0x01c0, 0x70a8, 0xa080,
-+ 0x008f, 0x781a, 0x00d6, 0x080c, 0x522f, 0x2d00, 0x682e, 0x6827,
-+ 0x0000, 0x080c, 0x4432, 0x00de, 0x080c, 0x1ca6, 0x7003, 0x0000,
-+ 0x7043, 0x0000, 0x7053, 0x0000, 0x0804, 0x44ee, 0xa684, 0x0004,
-+ 0x1110, 0x0804, 0x526b, 0x6000, 0xa084, 0x0004, 0x1160, 0x6000,
-+ 0xa084, 0x0001, 0x0140, 0x709f, 0x473b, 0x2001, 0x0007, 0x080c,
-+ 0x517c, 0x0804, 0x5271, 0x0804, 0x526b, 0x2200, 0x0002, 0x4744,
-+ 0x4746, 0x4744, 0x4744, 0x4744, 0x080c, 0x297f, 0x709b, 0x474a,
-+ 0x0804, 0x5279, 0x78e4, 0xa084, 0x0008, 0x1dc0, 0x080c, 0x516d,
-+ 0x709f, 0x4752, 0x0804, 0x526b, 0x2200, 0x0002, 0x475b, 0x475d,
-+ 0x475d, 0x475b, 0x475b, 0x080c, 0x297f, 0x78e4, 0xa084, 0x0008,
-+ 0x0178, 0x709b, 0x4765, 0x0804, 0x5279, 0x2011, 0x0004, 0x080c,
-+ 0x4cdd, 0x0002, 0x477a, 0x29df, 0x44ee, 0x477a, 0x4784, 0x4788,
-+ 0x690c, 0x81ff, 0x0138, 0x8109, 0x1120, 0x6827, 0x000f, 0x0804,
-+ 0x4818, 0x690e, 0x709f, 0x4782, 0x2001, 0x0003, 0x080c, 0x517c,
-+ 0x0804, 0x5271, 0x0804, 0x526b, 0x709f, 0x477a, 0x0804, 0x29df,
-+ 0x709f, 0x478c, 0x0804, 0x29df, 0x0ca8, 0xa282, 0x0003, 0x0310,
-+ 0x080c, 0x297f, 0xa386, 0x0002, 0x1180, 0xa286, 0x0002, 0x1190,
-+ 0x78a0, 0xa005, 0x1178, 0xd4fc, 0x1168, 0x78e4, 0xa084, 0x0008,
-+ 0x0120, 0xa6b5, 0x0008, 0x2019, 0x0000, 0xa684, 0x0008, 0x0110,
-+ 0x080c, 0x4b72, 0x6810, 0x70b2, 0x7003, 0x0007, 0x2300, 0x0002,
-+ 0x47b3, 0x47db, 0x47e2, 0x2200, 0x0002, 0x47ba, 0x47b8, 0x47d1,
-+ 0x080c, 0x297f, 0x7990, 0xa1ac, 0x0007, 0xa026, 0x2011, 0x0001,
-+ 0x080c, 0x4ce3, 0x0002, 0x47c8, 0x29df, 0x44ee, 0x47cf, 0x47ca,
-+ 0x0804, 0x526b, 0x709f, 0x47ce, 0x0804, 0x29df, 0x0cc8, 0x080c,
-+ 0x297f, 0xa684, 0x0010, 0x0128, 0x080c, 0x4b94, 0x0110, 0x0804,
-+ 0x29df, 0x0804, 0x4c05, 0x2200, 0x0002, 0x47e0, 0x47e0, 0x47e0,
-+ 0x080c, 0x297f, 0x2200, 0x0002, 0x47e7, 0x47e9, 0x47e9, 0x080c,
-+ 0x297f, 0x78e4, 0xa084, 0x0008, 0x0178, 0x709b, 0x47f1, 0x0804,
-+ 0x5279, 0x2011, 0x0004, 0x080c, 0x4cdd, 0x0002, 0x4805, 0x29df,
-+ 0x44ee, 0x4805, 0x480f, 0x4813, 0x690c, 0x81ff, 0x0130, 0x8109,
-+ 0x1118, 0x6827, 0x000f, 0x00a0, 0x690e, 0x709f, 0x480d, 0x2001,
-+ 0x0003, 0x080c, 0x517c, 0x0804, 0x5271, 0x0804, 0x526b, 0x709f,
-+ 0x4805, 0x0804, 0x29df, 0x709f, 0x4817, 0x0804, 0x29df, 0x0ca8,
-+ 0x70a8, 0xa080, 0x008f, 0x781a, 0x00d6, 0x6824, 0x0006, 0x080c,
-+ 0x522f, 0x000e, 0x6826, 0x2d00, 0x682e, 0x080c, 0x4432, 0x00de,
-+ 0x080c, 0x5184, 0x7003, 0x0000, 0x7043, 0x0000, 0x7053, 0x0000,
-+ 0x0804, 0x44ee, 0x2300, 0x0002, 0x4839, 0x483b, 0x4837, 0x080c,
-+ 0x297f, 0x7098, 0x0807, 0x7098, 0x0807, 0xa282, 0x0002, 0x0310,
-+ 0x080c, 0x297f, 0xa684, 0x0200, 0x0130, 0x080c, 0x5222, 0x080c,
-+ 0x4cca, 0x080c, 0x5223, 0x2300, 0x0002, 0x4850, 0x487e, 0x48de,
-+ 0xad86, 0xffff, 0x1108, 0x0005, 0xa286, 0x0001, 0x0110, 0x080c,
-+ 0x297f, 0xa684, 0x0200, 0x0120, 0x080c, 0x5222, 0x080c, 0x5223,
-+ 0x6924, 0xa184, 0x00ff, 0xa086, 0x000a, 0x1118, 0xa184, 0xff00,
-+ 0x6826, 0x2001, 0x0001, 0x080c, 0x5184, 0x78b8, 0x8007, 0xa084,
-+ 0x007f, 0x0140, 0x7848, 0xa085, 0x0008, 0x784a, 0x7848, 0xa084,
-+ 0x0008, 0x1de0, 0x7003, 0x0000, 0x0804, 0x44ee, 0x2200, 0x0002,
-+ 0x4882, 0x48b1, 0x709b, 0x4886, 0x0804, 0x5279, 0x2011, 0x000d,
-+ 0x080c, 0x4cdd, 0x0002, 0x4892, 0x29df, 0x44ee, 0x489a, 0x48a2,
-+ 0x48a7, 0x48a9, 0xa6b4, 0x00ff, 0xa6b5, 0x0400, 0x6eb6, 0x7e5a,
-+ 0x0804, 0x524e, 0xa6b4, 0x00ff, 0xa6b5, 0x0400, 0x6eb6, 0x7e5a,
-+ 0x0804, 0x524e, 0x709f, 0x48a6, 0x0804, 0x29df, 0x0c58, 0x080c,
-+ 0x297f, 0x709f, 0x48ad, 0x0804, 0x29df, 0x080c, 0x527f, 0x0804,
-+ 0x29df, 0x709b, 0x48b5, 0x0804, 0x5279, 0x2011, 0x0012, 0x080c,
-+ 0x4cdd, 0x0002, 0x48c0, 0x29df, 0x44ee, 0x48cc, 0x48d4, 0x48d9,
-+ 0xa6b4, 0x00ff, 0xa6b5, 0x0400, 0x6eb6, 0x7e5a, 0x70a8, 0xa080,
-+ 0x00bf, 0x781a, 0x0804, 0x29df, 0xa6b4, 0x00ff, 0xa6b5, 0x0400,
-+ 0x6eb6, 0x7e5a, 0x0804, 0x524e, 0x709f, 0x48d8, 0x0804, 0x29df,
-+ 0x0c38, 0x709f, 0x48dd, 0x0804, 0x29df, 0x0c70, 0xa286, 0x0001,
-+ 0x0110, 0x080c, 0x297f, 0x709b, 0x48e7, 0x0804, 0x5279, 0x2011,
-+ 0x0015, 0x080c, 0x4cdd, 0x0002, 0x48f1, 0x29df, 0x44ee, 0x48ff,
-+ 0x490b, 0xa6b4, 0x00ff, 0xa6b5, 0x0400, 0x6eb6, 0x7e5a, 0x783b,
-+ 0x1301, 0x70a8, 0xa080, 0x00cb, 0x781a, 0x0804, 0x29df, 0xa6b4,
-+ 0x00ff, 0xa6b5, 0x0400, 0x6eb6, 0x7e5a, 0x70a8, 0xa080, 0x00bf,
-+ 0x781a, 0x0804, 0x29df, 0x709f, 0x490f, 0x0804, 0x29df, 0x0c08,
-+ 0xa282, 0x0003, 0x0310, 0x080c, 0x297f, 0x2300, 0x0002, 0x491a,
-+ 0x4956, 0x49b5, 0xa286, 0x0001, 0x0110, 0x080c, 0x297f, 0x6804,
-+ 0xa084, 0x00ff, 0xa086, 0x0006, 0x1130, 0x080c, 0x4432, 0x7003,
-+ 0x0000, 0x0804, 0x44ee, 0x683b, 0x0000, 0x6837, 0x0000, 0xa684,
-+ 0x0200, 0x0130, 0x080c, 0x5222, 0x080c, 0x4cca, 0x080c, 0x5223,
-+ 0x6924, 0xa184, 0x00ff, 0xa086, 0x000a, 0x1118, 0xa184, 0xff00,
-+ 0x6826, 0x2001, 0x0001, 0x080c, 0x5184, 0x78b8, 0x8007, 0xa084,
-+ 0x007f, 0x0140, 0x7848, 0xa085, 0x0008, 0x784a, 0x7848, 0xa084,
-+ 0x0008, 0x1de0, 0x7003, 0x0000, 0x0804, 0x44ee, 0xa684, 0x0200,
-+ 0x0120, 0x080c, 0x4cca, 0x080c, 0x5223, 0x2200, 0x0002, 0x4961,
-+ 0x4992, 0x709b, 0x4965, 0x0804, 0x5279, 0x2011, 0x000d, 0x080c,
-+ 0x4cdd, 0x0002, 0x4971, 0x29df, 0x44ee, 0x4979, 0x4981, 0x4986,
-+ 0x4988, 0xa6b4, 0x00ff, 0xa6b5, 0x0800, 0x6eb6, 0x7e5a, 0x0804,
-+ 0x524e, 0xa6b4, 0x00ff, 0xa6b5, 0x0800, 0x6eb6, 0x7e5a, 0x0804,
-+ 0x524e, 0x709f, 0x4985, 0x0804, 0x29df, 0x0c58, 0x080c, 0x297f,
-+ 0x709f, 0x498e, 0x080c, 0x5223, 0x0804, 0x29df, 0x080c, 0x527f,
-+ 0x0804, 0x29df, 0x709b, 0x4996, 0x0804, 0x5279, 0x2011, 0x0005,
-+ 0x080c, 0x4cdd, 0x0002, 0x49a0, 0x29df, 0x44ee, 0x49a8, 0x49b0,
-+ 0xa6b4, 0x00ff, 0xa6b5, 0x0800, 0x6eb6, 0x7e5a, 0x0804, 0x524e,
-+ 0xa6b4, 0x00ff, 0xa6b5, 0x0800, 0x6eb6, 0x7e5a, 0x0804, 0x524e,
-+ 0x709f, 0x49b4, 0x0804, 0x29df, 0x0c58, 0xa286, 0x0001, 0x0110,
-+ 0x080c, 0x297f, 0x709b, 0x49be, 0x0804, 0x5279, 0x2011, 0x0006,
-+ 0x080c, 0x4cdd, 0x0002, 0x49c8, 0x29df, 0x44ee, 0x49ce, 0x49d8,
-+ 0xa6b5, 0x0800, 0x6eb6, 0x7e5a, 0x0804, 0x524e, 0xa6b4, 0x00ff,
-+ 0xa6b5, 0x0800, 0x6eb6, 0xa6b5, 0x4000, 0x7e5a, 0x0804, 0x524e,
-+ 0x709f, 0x49dc, 0x0804, 0x29df, 0x0c58, 0x2300, 0x0002, 0x49e4,
-+ 0x49e2, 0x49e2, 0x080c, 0x297f, 0x080c, 0x297f, 0x2300, 0x719c,
-+ 0xa005, 0x0817, 0x6810, 0x70b2, 0xa282, 0x0003, 0x0310, 0x080c,
-+ 0x297f, 0x2300, 0x0002, 0x49f6, 0x4a03, 0x4a21, 0xa684, 0x0200,
-+ 0x0120, 0x080c, 0x5222, 0x080c, 0x5223, 0x2001, 0x0001, 0x080c,
-+ 0x5184, 0x0804, 0x29df, 0xa286, 0x0002, 0x0120, 0x82ff, 0x0110,
-+ 0x080c, 0x297f, 0x709b, 0x4a0e, 0x0804, 0x5279, 0x2011, 0x0018,
-+ 0x080c, 0x4cdd, 0x0002, 0x4a18, 0x29df, 0x44ee, 0x4a1a, 0x4a1c,
-+ 0x0804, 0x524e, 0x0804, 0x524e, 0x709f, 0x4a20, 0x0804, 0x29df,
-+ 0x0cb8, 0x2200, 0x0002, 0x4a25, 0x4a3c, 0x709b, 0x4a29, 0x0804,
-+ 0x5279, 0x2011, 0x0017, 0x080c, 0x4cdd, 0x0002, 0x4a33, 0x29df,
-+ 0x44ee, 0x4a35, 0x4a37, 0x0804, 0x524e, 0x0804, 0x524e, 0x709f,
-+ 0x4a3b, 0x0804, 0x29df, 0x0cb8, 0xd4fc, 0x1904, 0x4abb, 0xa684,
-+ 0x0100, 0x0120, 0x080c, 0x5222, 0x080c, 0x4cca, 0x00c6, 0x080c,
-+ 0x4fc6, 0x6028, 0xd08c, 0x0190, 0x612c, 0x7adc, 0x080c, 0x20dd,
-+ 0x2110, 0x2008, 0x6024, 0xa210, 0xa189, 0x0000, 0x78d8, 0xa210,
-+ 0xa189, 0x0000, 0x602c, 0x080c, 0x52b7, 0x0020, 0x78d8, 0x78d2,
-+ 0x78dc, 0x78d6, 0x00ce, 0xa6b4, 0xefff, 0x7e5a, 0x709b, 0x4a6a,
-+ 0x0804, 0x5279, 0x2011, 0x000d, 0x080c, 0x4cdd, 0x0002, 0x4a76,
-+ 0x29df, 0x44ee, 0x4a76, 0x4aaa, 0x4aaf, 0x4ab1, 0x78d8, 0x79dc,
-+ 0xa105, 0x1168, 0x78b8, 0x8007, 0xa084, 0x007f, 0x1140, 0x70a7,
-+ 0x0000, 0x7858, 0xa084, 0xfdff, 0x785a, 0x0804, 0x524e, 0xa684,
-+ 0x0100, 0x01f0, 0x080c, 0x5223, 0x080c, 0x51cf, 0x0026, 0x0036,
-+ 0x00c6, 0x080c, 0x4fc6, 0x6028, 0xd08c, 0x0138, 0x6020, 0x00ce,
-+ 0x6930, 0x6a2c, 0x080c, 0x52b7, 0x0028, 0x00ce, 0x682c, 0x78d2,
-+ 0x6830, 0x78d6, 0x70a7, 0x0000, 0x001e, 0x000e, 0x080c, 0x5622,
-+ 0x0804, 0x524e, 0x709f, 0x4aae, 0x0804, 0x29df, 0x0838, 0x080c,
-+ 0x297f, 0x709f, 0x4ab7, 0x080c, 0x5223, 0x0804, 0x29df, 0x080c,
-+ 0x527f, 0x0804, 0x29df, 0x080c, 0x5223, 0x6918, 0xd1a4, 0x0140,
-+ 0x6827, 0x000f, 0x080c, 0x5184, 0x080c, 0x5223, 0x0804, 0x29df,
-+ 0x709f, 0x4ad0, 0x2001, 0x0003, 0x080c, 0x517c, 0x0804, 0x5271,
-+ 0x080c, 0x5207, 0x682c, 0x78d2, 0x6830, 0x78d6, 0x0804, 0x524e,
-+ 0xa282, 0x0002, 0x0310, 0x080c, 0x297f, 0x2300, 0x0002, 0x4ae2,
-+ 0x4af2, 0x4af4, 0xa286, 0x0001, 0x0110, 0x080c, 0x297f, 0x00c6,
-+ 0x080c, 0x4fc6, 0x6224, 0x2009, 0x0000, 0x602c, 0x080c, 0x52b7,
-+ 0x0804, 0x524e, 0x080c, 0x297f, 0x080c, 0x297f, 0x0026, 0x002e,
-+ 0xa684, 0x0200, 0x0130, 0x080c, 0x5222, 0x080c, 0x4cca, 0x080c,
-+ 0x5223, 0x2300, 0x0002, 0x4b06, 0x4b08, 0x4b0a, 0x0804, 0x4850,
-+ 0x0804, 0x487e, 0x0804, 0x48de, 0x70ac, 0x6812, 0x70b2, 0x8000,
-+ 0x70ae, 0x681b, 0x0000, 0xa684, 0x0008, 0x01c0, 0x0156, 0x0136,
-+ 0x0146, 0x7890, 0x8004, 0x8004, 0x8004, 0x8004, 0xa084, 0x000f,
-+ 0x681a, 0x80ac, 0x789b, 0x0000, 0xaf80, 0x002b, 0x2098, 0xad80,
-+ 0x000b, 0x20a0, 0x53a5, 0x014e, 0x013e, 0x015e, 0xa6c4, 0x0f00,
-+ 0xa684, 0x0002, 0x1140, 0x692c, 0x810d, 0x810d, 0x810d, 0xa184,
-+ 0x0007, 0x2008, 0x0090, 0x789b, 0x0090, 0x79ac, 0xa184, 0x0020,
-+ 0x0160, 0x0016, 0x2009, 0x0005, 0x2001, 0x3d00, 0x080c, 0x51da,
-+ 0x6824, 0xa085, 0x003b, 0x6826, 0x001e, 0xa184, 0x001f, 0xa805,
-+ 0x0016, 0x3208, 0xa18c, 0x0600, 0x0110, 0xc0fc, 0x0008, 0xc0fd,
-+ 0x001e, 0x6816, 0x080c, 0x449c, 0x68ce, 0xa684, 0x0004, 0x0130,
-+ 0xa18c, 0xff00, 0x78a8, 0xa084, 0x00ff, 0xa105, 0x682a, 0xa6b4,
-+ 0x00ff, 0x6000, 0xa084, 0x0008, 0x0110, 0xa6b5, 0x4000, 0x6eb6,
-+ 0x7e5a, 0x0005, 0x0156, 0x0136, 0x0146, 0x6918, 0x7890, 0x8004,
-+ 0x8004, 0x8004, 0x8004, 0xa084, 0x000f, 0x0006, 0xa100, 0x681a,
-+ 0x000e, 0x8000, 0x8004, 0x0160, 0x20a8, 0x8104, 0xa080, 0x000b,
-+ 0xad00, 0x20a0, 0x789b, 0x0000, 0xaf80, 0x002b, 0x2098, 0x53a5,
-+ 0x014e, 0x013e, 0x015e, 0x0005, 0x682c, 0xd0b4, 0x1140, 0xd0ac,
-+ 0x1118, 0x2011, 0x0010, 0x0048, 0x2011, 0x000c, 0x0030, 0xa084,
-+ 0x0020, 0x1110, 0x620c, 0x0008, 0x6210, 0x6b18, 0x2300, 0xa202,
-+ 0x01c0, 0x2018, 0xa382, 0x000e, 0x0220, 0x0118, 0x2019, 0x000e,
-+ 0x0020, 0x7858, 0xa084, 0xffef, 0x785a, 0x783b, 0x1b01, 0x7893,
-+ 0x0000, 0x7ba2, 0x70a8, 0xa080, 0x009e, 0x781a, 0xa085, 0x0001,
-+ 0x0005, 0x7858, 0xa084, 0xffef, 0x785a, 0x7893, 0x0000, 0xa006,
-+ 0x0005, 0x6904, 0xa18c, 0x00ff, 0xa196, 0x0007, 0x0128, 0xa196,
-+ 0x000f, 0x0110, 0x6807, 0x0117, 0x6914, 0x6814, 0x080c, 0x449c,
-+ 0x6100, 0x8104, 0x1290, 0x601c, 0xa005, 0x0118, 0x2001, 0x0800,
-+ 0x0070, 0x00d6, 0x6824, 0x0006, 0x080c, 0x522f, 0x000e, 0x6826,
-+ 0x2d00, 0x682e, 0x080c, 0x4432, 0x00de, 0x2001, 0x0200, 0x6924,
-+ 0xa18c, 0x00ff, 0xa10d, 0x6926, 0x8007, 0x789b, 0x000e, 0x78aa,
-+ 0x6820, 0xa085, 0x8000, 0x6822, 0x2031, 0x0400, 0x6eb6, 0x7e5a,
-+ 0x71a8, 0xa188, 0x00a1, 0x791a, 0x0005, 0x080c, 0x2ae3, 0x6814,
-+ 0x2040, 0xa684, 0x0002, 0x1168, 0x692c, 0x810d, 0x810d, 0x810d,
-+ 0xa184, 0x0007, 0x2008, 0xa805, 0x6816, 0x080c, 0x449c, 0x68ce,
-+ 0x0020, 0x6914, 0x6814, 0x080c, 0x449c, 0x6100, 0x8104, 0x1a04,
-+ 0x4c70, 0xa184, 0x0300, 0x0118, 0x6807, 0x0117, 0x00d0, 0x6004,
-+ 0xa005, 0x1500, 0x6807, 0x0117, 0x601c, 0xa005, 0x1150, 0x00d6,
-+ 0x080c, 0x522f, 0x6827, 0x0034, 0x2d00, 0x682e, 0x080c, 0x4432,
-+ 0x00de, 0xa684, 0x0004, 0x0128, 0x2031, 0x0400, 0x2001, 0x2800,
-+ 0x0020, 0x2031, 0x0400, 0x2001, 0x0800, 0x71a8, 0xa188, 0x00a1,
-+ 0x0804, 0x4ca5, 0x6018, 0xa005, 0x1d60, 0x601c, 0xa005, 0x1d48,
-+ 0x689f, 0x0000, 0x6827, 0x003d, 0xa684, 0x0001, 0x0904, 0x4cb3,
-+ 0xd694, 0x1180, 0x6100, 0xd1d4, 0x0168, 0x692c, 0xa18c, 0x00ff,
-+ 0x0904, 0x4cb3, 0xa186, 0x0003, 0x0904, 0x4cb3, 0xa186, 0x0012,
-+ 0x0904, 0x4cb3, 0xa6b5, 0x0800, 0x71a8, 0xa188, 0x00c3, 0x04f0,
-+ 0x6807, 0x0117, 0x2031, 0x0400, 0x692c, 0xa18c, 0x00ff, 0xa186,
-+ 0x0012, 0x1128, 0x2001, 0x4cc0, 0x2009, 0x0001, 0x0070, 0xa186,
-+ 0x0003, 0x1128, 0x2001, 0x4cc1, 0x2009, 0x0012, 0x0030, 0x2001,
-+ 0x0200, 0x71a8, 0xa188, 0x00a1, 0x00c0, 0x6a34, 0xa29d, 0x0000,
-+ 0x1110, 0xa006, 0x0cb0, 0x0006, 0x2100, 0xa21a, 0x000e, 0x1208,
-+ 0x2208, 0x080c, 0x51f4, 0x78a3, 0x0000, 0x681c, 0xa085, 0x0040,
-+ 0x681e, 0x71a8, 0xa188, 0x00f3, 0xa006, 0x6826, 0x8007, 0x789b,
-+ 0x000e, 0x78aa, 0x6820, 0xa085, 0x8000, 0x6822, 0x6eb6, 0x7e5a,
-+ 0x791a, 0x0804, 0x29df, 0x6eb6, 0x080c, 0x4432, 0x6810, 0x70b2,
-+ 0x7003, 0x0007, 0x7097, 0x0000, 0x7053, 0x0000, 0x0804, 0x29df,
-+ 0x0023, 0x0070, 0x0005, 0x0000, 0x0a00, 0x0000, 0x0000, 0x0025,
-+ 0x0000, 0x0000, 0x683b, 0x0000, 0x6837, 0x0000, 0xa684, 0x0200,
-+ 0x0158, 0x78b8, 0x8007, 0xa08c, 0x007f, 0x78d8, 0xa100, 0x6836,
-+ 0x78dc, 0xa081, 0x0000, 0x683a, 0x0005, 0x7990, 0x810f, 0xa5ac,
-+ 0x0007, 0x2021, 0x0000, 0xa480, 0x0090, 0x789a, 0x79a8, 0xa18c,
-+ 0x00ff, 0xa184, 0x0080, 0x11e0, 0xa182, 0x0020, 0x16b0, 0xa182,
-+ 0x0012, 0x1a04, 0x516d, 0x2100, 0x000b, 0x0005, 0x516d, 0x4f27,
-+ 0x516d, 0x516d, 0x4d31, 0x4d34, 0x4d78, 0x4db3, 0x4de6, 0x4de9,
-+ 0x516d, 0x516d, 0x4d98, 0x4e54, 0x4e8c, 0x516d, 0x516d, 0x4eb2,
-+ 0xa184, 0x0020, 0x1904, 0x4ee6, 0xa18c, 0x001f, 0x6814, 0xa084,
-+ 0x001f, 0xa106, 0x0178, 0x70a8, 0xa080, 0x008f, 0x781a, 0x2001,
-+ 0x0014, 0x080c, 0x5184, 0x080c, 0x5223, 0x7003, 0x0000, 0x2001,
-+ 0x0002, 0x0005, 0x2001, 0x0000, 0x0005, 0xa182, 0x0024, 0x1a04,
-+ 0x516d, 0xa184, 0x0003, 0x0853, 0x0005, 0x516d, 0x516d, 0x516d,
-+ 0x516d, 0x080c, 0x516d, 0x0005, 0x2200, 0x0002, 0x4eb5, 0x4eb5,
-+ 0x4d65, 0x4d65, 0x4d65, 0x4d65, 0x4d65, 0x4d65, 0x4d65, 0x4d65,
-+ 0x4d63, 0x4d65, 0x4d4f, 0x4d57, 0x4d57, 0x4d57, 0x4d65, 0x4d65,
-+ 0x4d6d, 0x4d70, 0x4eb5, 0x4d70, 0x4d65, 0x4d65, 0x4d65, 0x00c6,
-+ 0x0076, 0x6f14, 0x080c, 0x3ec6, 0x007e, 0x00ce, 0x0070, 0x6818,
-+ 0xd0a4, 0x0158, 0x6827, 0x0033, 0x080c, 0x5184, 0x080c, 0x5223,
-+ 0x2001, 0x0001, 0x0005, 0x080c, 0x4fd7, 0x6827, 0x02b3, 0x2009,
-+ 0x000b, 0x2001, 0x4800, 0x0804, 0x4ee9, 0x080c, 0x515e, 0x0005,
-+ 0x6827, 0x0093, 0x2009, 0x000b, 0x2001, 0x4800, 0x0804, 0x4ed1,
-+ 0x2d58, 0x6804, 0xa084, 0x00ff, 0xa086, 0x0006, 0x1110, 0x6807,
-+ 0x0117, 0x6827, 0x0002, 0x080c, 0x522f, 0x6827, 0x0036, 0x6932,
-+ 0x2d00, 0x682e, 0x00d6, 0x080c, 0x440a, 0x080c, 0x4f11, 0x2b68,
-+ 0x080c, 0x4432, 0x00de, 0x080c, 0x4432, 0x2001, 0x0002, 0x0005,
-+ 0x080c, 0x4f11, 0x2001, 0x0017, 0x080c, 0x5184, 0x7097, 0x0000,
-+ 0x6914, 0xd1fc, 0x0118, 0x2009, 0xb3c6, 0x0010, 0x2009, 0xb386,
-+ 0x200b, 0x0006, 0x70a3, 0x0017, 0x2009, 0x0200, 0x080c, 0x4318,
-+ 0x2001, 0x0001, 0x0005, 0x2200, 0x0002, 0x4eb5, 0x4ee6, 0x4ee6,
-+ 0x4ee6, 0x4dd6, 0x4ef8, 0x4dde, 0x4ef8, 0x4ef8, 0x4efb, 0x4efb,
-+ 0x4f00, 0x4f00, 0x4dce, 0x4dce, 0x4ee6, 0x4ee6, 0x4ef8, 0x4ee6,
-+ 0x4dde, 0x4eb5, 0x4dde, 0x4dde, 0x4dde, 0x4dde, 0x6827, 0x0084,
-+ 0x2009, 0x000b, 0x2001, 0x4300, 0x0804, 0x4f0a, 0x6827, 0x000d,
-+ 0x2009, 0x000b, 0x2001, 0x4300, 0x0804, 0x4ee9, 0x6827, 0x0093,
-+ 0x2009, 0x000b, 0x2001, 0x4300, 0x0804, 0x4ed1, 0x2001, 0x0000,
-+ 0x0005, 0x2200, 0x0002, 0x4eb5, 0x4e4c, 0x4e4c, 0x4e4c, 0x4e4c,
-+ 0x4e04, 0x4e04, 0x4e04, 0x4e04, 0x4e04, 0x4e04, 0x4e04, 0x4e04,
-+ 0x4e4c, 0x4e4c, 0x4e4c, 0x4e4c, 0x4e2a, 0x4e4c, 0x4e4c, 0x4e2a,
-+ 0x4e2a, 0x4e2a, 0x4e2a, 0x4eb5, 0x6804, 0xa084, 0x00ff, 0xa086,
-+ 0x0006, 0x1500, 0x690c, 0xa184, 0x000f, 0x0904, 0x4ef8, 0x8001,
-+ 0x0130, 0xa18c, 0xfff0, 0xa105, 0x680e, 0x0804, 0x4ef8, 0x70a8,
-+ 0xa080, 0x008f, 0x781a, 0x6827, 0x000f, 0x080c, 0x4bc9, 0x080c,
-+ 0x5184, 0x7003, 0x0000, 0x7043, 0x0000, 0x7053, 0x0000, 0x2001,
-+ 0x0002, 0x0005, 0x6918, 0xa184, 0x000f, 0x0904, 0x4ef8, 0x8001,
-+ 0x0130, 0xa18c, 0xfff0, 0xa105, 0x681a, 0x0804, 0x4ef8, 0x70a8,
-+ 0xa080, 0x008f, 0x781a, 0x6827, 0x008f, 0x2009, 0x000b, 0x2001,
-+ 0x4300, 0x080c, 0x51da, 0x080c, 0x5184, 0x080c, 0x5223, 0x7003,
-+ 0x0000, 0x2001, 0x0002, 0x0005, 0x6827, 0x0093, 0x2009, 0x000b,
-+ 0x2001, 0x4300, 0x0804, 0x4ed1, 0xa684, 0x0004, 0x1180, 0x6804,
-+ 0xa084, 0x00ff, 0xa086, 0x0006, 0x1904, 0x516d, 0x080c, 0x4f11,
-+ 0x6807, 0x0117, 0x080c, 0x4432, 0x2001, 0x0002, 0x0005, 0x6000,
-+ 0xa084, 0x0004, 0x0904, 0x516d, 0x2d58, 0x6804, 0xa084, 0x00ff,
-+ 0xa086, 0x0006, 0x1110, 0x6807, 0x0117, 0x6827, 0x0002, 0x080c,
-+ 0x522f, 0x6827, 0x0036, 0x6932, 0x2d00, 0x682e, 0x00d6, 0x080c,
-+ 0x4416, 0x080c, 0x4f11, 0x2b68, 0x080c, 0x4432, 0x00de, 0x080c,
-+ 0x4432, 0x2001, 0x0002, 0x0005, 0x6000, 0xa084, 0x0004, 0x0904,
-+ 0x516d, 0x2d58, 0x6a04, 0xa294, 0x00ff, 0xa286, 0x0006, 0x1110,
-+ 0x6807, 0x0117, 0x6827, 0x0002, 0x2d58, 0x080c, 0x522f, 0x6827,
-+ 0x0036, 0x6932, 0x2d00, 0x682e, 0x00d6, 0x080c, 0x4424, 0x080c,
-+ 0x4f11, 0x2b68, 0x080c, 0x4432, 0x00de, 0x080c, 0x4432, 0x2001,
-+ 0x0002, 0x0005, 0x080c, 0x516d, 0x0005, 0x70a8, 0xa080, 0x008f,
-+ 0x781a, 0x2001, 0x0001, 0x080c, 0x5184, 0x080c, 0x5223, 0x7003,
-+ 0x0000, 0x2001, 0x0002, 0x0005, 0x080c, 0x51da, 0x080c, 0x5222,
-+ 0x080c, 0x4cca, 0x080c, 0x4bc9, 0x080c, 0x5223, 0x2001, 0x0001,
-+ 0x0005, 0x080c, 0x51da, 0x080c, 0x5222, 0x080c, 0x4cca, 0x70a8,
-+ 0xa080, 0x008f, 0x781a, 0x2001, 0x0013, 0x080c, 0x5184, 0x080c,
-+ 0x5223, 0x7003, 0x0000, 0x2001, 0x0002, 0x0005, 0x080c, 0x516d,
-+ 0x0005, 0x080c, 0x51da, 0x080c, 0x5222, 0x080c, 0x4cca, 0x080c,
-+ 0x4bc9, 0x080c, 0x5223, 0x080c, 0x527f, 0x2001, 0x0001, 0x0005,
-+ 0x2001, 0x0003, 0x0005, 0x080c, 0x4fd7, 0x2001, 0x0000, 0x0005,
-+ 0x00c6, 0x0076, 0x6f14, 0x080c, 0x3ec6, 0x007e, 0x00ce, 0x2001,
-+ 0x0000, 0x0005, 0x080c, 0x51da, 0x080c, 0x516d, 0x2001, 0x0006,
-+ 0x0005, 0x6904, 0xa18c, 0x00ff, 0xa186, 0x0007, 0x0118, 0xa186,
-+ 0x000f, 0x1120, 0x080c, 0x5222, 0x080c, 0x4cca, 0x70a8, 0xa080,
-+ 0x008f, 0x781a, 0x080c, 0x5223, 0x7003, 0x0000, 0x0005, 0x7aa8,
-+ 0xa294, 0x00ff, 0x78a8, 0xa084, 0x00ff, 0xa08a, 0x0005, 0x1a04,
-+ 0x516d, 0x000b, 0x0005, 0x516d, 0x4f38, 0x516d, 0x4fdd, 0x50a0,
-+ 0xa282, 0x0003, 0x1904, 0x516d, 0x7da8, 0xa5ac, 0x00ff, 0x7ea8,
-+ 0xa6b4, 0x00ff, 0x69b8, 0xa184, 0x0100, 0x05a0, 0xa18c, 0xfeff,
-+ 0x69ba, 0x78a0, 0xa005, 0x1570, 0xa6b4, 0x00ff, 0x01f0, 0xa682,
-+ 0x001d, 0x1270, 0xa686, 0x0010, 0x1108, 0x8631, 0x852b, 0x852b,
-+ 0x2041, 0x0000, 0x080c, 0x3f0c, 0x0118, 0x080c, 0x3d35, 0x0078,
-+ 0x080c, 0x508e, 0x080c, 0x3d32, 0x69b8, 0xa18d, 0x0100, 0x69ba,
-+ 0x7e58, 0xa6b5, 0x1000, 0x7e5a, 0x0030, 0x080c, 0x3d32, 0x7e58,
-+ 0xa6b4, 0xefff, 0x7e5a, 0x70a8, 0xa080, 0x00a1, 0x781a, 0x2001,
-+ 0x0001, 0x0005, 0x00c6, 0x080c, 0x4fc6, 0x6200, 0xd2e4, 0x05a0,
-+ 0x6208, 0x8217, 0xa294, 0x00ff, 0xa282, 0x001c, 0x0218, 0x0110,
-+ 0x2011, 0x001c, 0x2600, 0xa202, 0x1208, 0x2230, 0xa686, 0x0010,
-+ 0x1108, 0x8631, 0x6208, 0xa294, 0x00ff, 0x78ec, 0xd0e4, 0x0130,
-+ 0xa282, 0x000a, 0x1240, 0x2011, 0x000a, 0x0028, 0xa282, 0x000c,
-+ 0x1210, 0x2011, 0x000c, 0x2200, 0xa502, 0x1208, 0x2228, 0x2620,
-+ 0x080c, 0x5091, 0x852b, 0x852b, 0x2041, 0x0000, 0x080c, 0x3f0c,
-+ 0x0118, 0x080c, 0x3d3e, 0x0020, 0x080c, 0x508e, 0x080c, 0x3d3b,
-+ 0x7e58, 0xa6b5, 0x1000, 0x7e5a, 0x783b, 0x1700, 0x70a8, 0xa080,
-+ 0x00de, 0x781a, 0x2001, 0x0004, 0x00ce, 0x0005, 0x6814, 0x8007,
-+ 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0x8003, 0x6914, 0xd1fc,
-+ 0x1118, 0xa0e0, 0xb800, 0x0010, 0xa0e0, 0xb900, 0x0005, 0x00c6,
-+ 0x0c69, 0x080c, 0x3d3b, 0x00ce, 0x0005, 0xa282, 0x0002, 0x1904,
-+ 0x516d, 0x7aa8, 0xa294, 0x00ff, 0x69b8, 0xa184, 0x0200, 0x0540,
-+ 0xa18c, 0xfdff, 0x69ba, 0x78a0, 0xa005, 0x1510, 0xa282, 0x0002,
-+ 0x1a04, 0x3e69, 0x080c, 0x506b, 0x080c, 0x3deb, 0x080c, 0x3d32,
-+ 0x7e58, 0xa684, 0x0100, 0x0150, 0x682c, 0xa084, 0x0001, 0x0130,
-+ 0xc6fc, 0x7888, 0xa084, 0x0040, 0x0108, 0xc6fd, 0xa6b5, 0x1000,
-+ 0x7e5a, 0x70a8, 0xa080, 0x00a1, 0x781a, 0x2001, 0x0001, 0x0005,
-+ 0x00c6, 0x080c, 0x4fc6, 0x6028, 0xc08c, 0x602a, 0xa284, 0xfffe,
-+ 0x0118, 0x2011, 0x0001, 0x0018, 0xa284, 0x0001, 0x0128, 0x6100,
-+ 0xd1ec, 0x1110, 0x2011, 0x0000, 0x04c1, 0x080c, 0x3df1, 0x080c,
-+ 0x3d3b, 0x7e58, 0xa684, 0x0100, 0x0150, 0x682c, 0xa084, 0x0001,
-+ 0x0130, 0xc6fc, 0x7888, 0xa084, 0x0040, 0x0108, 0xc6fd, 0xa6b5,
-+ 0x1000, 0x7e5a, 0x783b, 0x1700, 0x70a8, 0xa080, 0x00de, 0x781a,
-+ 0x2001, 0x0004, 0x00ce, 0x0005, 0x00c6, 0x2960, 0x6000, 0x2011,
-+ 0x0001, 0xa084, 0x2000, 0x1110, 0x2011, 0x0000, 0x78ab, 0x0001,
-+ 0x78ab, 0x0002, 0x78ab, 0x0003, 0x7aaa, 0xa8c0, 0x0004, 0x68b8,
-+ 0xa085, 0x0200, 0x68ba, 0x00ce, 0x0005, 0x789b, 0x0018, 0x78ab,
-+ 0x0001, 0x78ab, 0x0002, 0x78ab, 0x0003, 0x7aaa, 0x789b, 0x0081,
-+ 0x78ab, 0x0004, 0x0005, 0x00c6, 0x705c, 0x2060, 0x6000, 0xa084,
-+ 0x1000, 0x1128, 0x2029, 0x0032, 0x2021, 0x0000, 0x0080, 0x6408,
-+ 0xa4ac, 0x00ff, 0xa582, 0x000c, 0x1210, 0x2029, 0x000c, 0x8427,
-+ 0xa4a4, 0x00ff, 0xa482, 0x001c, 0x0210, 0x2021, 0x001c, 0x0049,
-+ 0x68b8, 0xa085, 0x0100, 0x68ba, 0x00ce, 0x0005, 0xa026, 0x2029,
-+ 0x0032, 0x789b, 0x0018, 0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab,
-+ 0x0001, 0x7daa, 0x7caa, 0x789b, 0x0081, 0x78ab, 0x0005, 0x0005,
-+ 0x080c, 0x4fc6, 0x6000, 0xd09c, 0x1118, 0x080c, 0x516d, 0x0005,
-+ 0xa282, 0x0006, 0x0118, 0x080c, 0x516d, 0x0005, 0x7aa8, 0xa294,
-+ 0x00ff, 0x7e5a, 0x7ea8, 0x7ea8, 0xa6b4, 0x00ff, 0x7fa8, 0xa7bc,
-+ 0x00ff, 0xa782, 0x0002, 0x0218, 0x080c, 0x516d, 0x0005, 0x78a8,
-+ 0x2040, 0xa8c4, 0x00ff, 0xa882, 0x0003, 0x0218, 0x080c, 0x516d,
-+ 0x0005, 0xa886, 0x0001, 0x1118, 0x080c, 0x516d, 0x0005, 0x2600,
-+ 0xa005, 0x1120, 0x080c, 0x4fd7, 0x0804, 0x513e, 0xa682, 0x001c,
-+ 0x0218, 0x0110, 0x2031, 0x001c, 0x88ff, 0x0168, 0x87ff, 0x1118,
-+ 0x080c, 0x516d, 0x0005, 0x6000, 0xd0ec, 0x0118, 0x78ec, 0xd0e4,
-+ 0x1110, 0x2041, 0x0000, 0x87ff, 0x1178, 0xa282, 0x000a, 0x0230,
-+ 0x0128, 0xa282, 0x0061, 0x1128, 0x0120, 0x00b8, 0x2011, 0x000a,
-+ 0x00a0, 0x2011, 0x0061, 0x0088, 0x78ec, 0xd0e4, 0x1108, 0x0c68,
-+ 0xa282, 0x0009, 0x0228, 0x0120, 0xa282, 0x0019, 0x0230, 0x0018,
-+ 0x2011, 0x0009, 0x0010, 0x2011, 0x0019, 0x0086, 0x0076, 0x0066,
-+ 0x8213, 0x8213, 0x2228, 0x080c, 0x3f0c, 0x006e, 0x007e, 0x008e,
-+ 0x1128, 0x080c, 0x4fd7, 0xa016, 0xa036, 0x0400, 0x87ff, 0x0150,
-+ 0xa8ac, 0x0002, 0x0138, 0x6520, 0x85ff, 0x0120, 0x6528, 0xc58d,
-+ 0x652a, 0x0018, 0x6528, 0xc58c, 0x652a, 0x2620, 0x88ff, 0x0108,
-+ 0x8634, 0xa69e, 0x0010, 0x1108, 0x8631, 0x0026, 0x080c, 0x3d3e,
-+ 0x080c, 0x3df1, 0x2430, 0x002e, 0x8214, 0x8214, 0x789b, 0x0018,
-+ 0x78ab, 0x0001, 0x78ab, 0x0006, 0x78ab, 0x0004, 0x7aaa, 0x78ab,
-+ 0x0000, 0x7eaa, 0x7faa, 0x2800, 0x78aa, 0x789b, 0x0081, 0x78ab,
-+ 0x0008, 0x7e58, 0xa6b5, 0x1000, 0x7e5a, 0x783b, 0x1700, 0x70a8,
-+ 0xa080, 0x00de, 0x781a, 0x2001, 0x0004, 0x0005, 0x2001, 0x0003,
-+ 0x00d9, 0xa6b5, 0x1000, 0x7e5a, 0x783b, 0x1700, 0x70a8, 0xa080,
-+ 0x00de, 0x781a, 0x2001, 0x0005, 0x0005, 0x2001, 0x0007, 0x0061,
-+ 0xa6b5, 0x1000, 0x7e5a, 0x783b, 0x1700, 0x70a8, 0xa080, 0x00de,
-+ 0x781a, 0x2001, 0x0004, 0x0005, 0x789b, 0x0018, 0x78aa, 0x789b,
-+ 0x0081, 0x78ab, 0x0001, 0x0005, 0x6904, 0xa18c, 0x00ff, 0xa196,
-+ 0x0007, 0x0130, 0xa196, 0x000f, 0x0118, 0x080c, 0x1ca6, 0x0005,
-+ 0x6924, 0xa194, 0x003f, 0x1120, 0xa18c, 0xffc0, 0xa105, 0x6826,
-+ 0x6a1c, 0xd29c, 0x1530, 0xa086, 0x0001, 0x1518, 0x2001, 0xb341,
-+ 0x2004, 0xd094, 0x01f0, 0x0e04, 0x51c1, 0x0156, 0x00e6, 0x0036,
-+ 0x0046, 0x0056, 0x2071, 0x0010, 0x7bf0, 0x7af4, 0x7cf8, 0x7dfc,
-+ 0x2009, 0x0002, 0xad80, 0x0003, 0x080c, 0x1e7a, 0x005e, 0x004e,
-+ 0x003e, 0x00ee, 0x015e, 0x1128, 0x2091, 0x4080, 0x080c, 0x1ca6,
-+ 0x0010, 0x080c, 0x4432, 0x691c, 0xa184, 0x0100, 0x0138, 0x6914,
-+ 0x2100, 0x080c, 0x449c, 0x6204, 0x8210, 0x6206, 0x0005, 0x692c,
-+ 0x6834, 0x682e, 0xa112, 0x6930, 0x6838, 0x6832, 0xa11b, 0xa200,
-+ 0xa301, 0x0005, 0x00c6, 0xade0, 0x0018, 0x6003, 0x0070, 0x6106,
-+ 0x600b, 0x0000, 0x600f, 0x0a00, 0x6013, 0x0000, 0x6017, 0x0000,
-+ 0x8007, 0x601a, 0x601f, 0x0000, 0x6023, 0x0000, 0x00ce, 0x6824,
-+ 0xa085, 0x0080, 0x6826, 0x0005, 0x0156, 0x0136, 0x0146, 0x2098,
-+ 0xaf80, 0x002d, 0x20a0, 0x81ac, 0x0108, 0x53a6, 0xa184, 0x0001,
-+ 0x0110, 0x3304, 0x78be, 0x014e, 0x013e, 0x015e, 0x0005, 0x70a4,
-+ 0x00e6, 0x0006, 0x000e, 0x00ee, 0xa005, 0x6918, 0x0016, 0x6914,
-+ 0x0016, 0x6928, 0x0016, 0x001e, 0x001e, 0x001e, 0x190c, 0x297f,
-+ 0x70a7, 0x8000, 0x6814, 0xd0fc, 0x0110, 0xc185, 0x0008, 0xc184,
-+ 0x0804, 0x55dc, 0x0005, 0x71a4, 0x81ff, 0x0140, 0x7848, 0xa085,
-+ 0x0008, 0x784a, 0x70a7, 0x0000, 0x080c, 0x52e3, 0x0005, 0x00c6,
-+ 0x00d6, 0x080c, 0x1c85, 0x00ce, 0x0156, 0x0136, 0x0146, 0x2da0,
-+ 0x2c98, 0x20a9, 0x0037, 0x53a3, 0x014e, 0x013e, 0x015e, 0x6807,
-+ 0x010d, 0x680b, 0x0000, 0x701c, 0x8007, 0x681a, 0x6823, 0x0000,
-+ 0x681f, 0x0000, 0x689f, 0x0000, 0x00ce, 0x0005, 0x00c6, 0x080c,
-+ 0x4fc6, 0x6028, 0xd08c, 0x00ce, 0x0180, 0x7814, 0xa084, 0x0001,
-+ 0x0130, 0x70a8, 0xa080, 0x011c, 0x781a, 0x0804, 0x29df, 0x70a8,
-+ 0xa080, 0x0135, 0x781a, 0x0804, 0x29df, 0x70a8, 0xa080, 0x00a1,
-+ 0x781a, 0x0804, 0x29df, 0x70a8, 0xa080, 0x0092, 0x781a, 0x0804,
-+ 0x29df, 0x783b, 0x1700, 0x70a8, 0xa080, 0x00de, 0x781a, 0x0804,
-+ 0x29df, 0x70a8, 0xa080, 0x00e7, 0x781a, 0x0804, 0x29df, 0x6904,
-+ 0xa18c, 0x00ff, 0xa196, 0x0007, 0x0128, 0xa196, 0x000f, 0x0110,
-+ 0x6807, 0x0117, 0x6824, 0xa084, 0x00ff, 0xa085, 0x0200, 0x6826,
-+ 0x8007, 0x789b, 0x000e, 0x78aa, 0x6820, 0xa085, 0x8000, 0x6822,
-+ 0x2031, 0x0400, 0x6eb6, 0x7e5a, 0x71a8, 0xa188, 0x00a1, 0x791a,
-+ 0x0005, 0x080c, 0x5223, 0x7848, 0xa085, 0x000c, 0x784a, 0x70a8,
-+ 0xa080, 0x008f, 0x781a, 0x2009, 0x000b, 0x2001, 0x4400, 0x080c,
-+ 0x51da, 0x2001, 0x0013, 0x080c, 0x5184, 0x0804, 0x44ee, 0x81ff,
-+ 0x1110, 0xa21a, 0x0218, 0x080c, 0x20ea, 0x0070, 0x7ad2, 0x7ada,
-+ 0x2200, 0x2011, 0x0001, 0x6027, 0x0000, 0x7ad6, 0x78df, 0x0000,
-+ 0x7b14, 0xc384, 0x7b16, 0x0088, 0x81ff, 0x1130, 0x6027, 0x0000,
-+ 0x7b14, 0xc384, 0x7b16, 0x0020, 0x6126, 0x7b14, 0xc385, 0x7b16,
-+ 0x78d2, 0x78da, 0x7ad6, 0x8211, 0x7ade, 0x6232, 0x602e, 0x6028,
-+ 0xc085, 0x602a, 0x0005, 0x0126, 0x70f0, 0xa084, 0x4c00, 0x8004,
-+ 0x2090, 0x7204, 0x700c, 0xa215, 0x7008, 0xc09c, 0xa205, 0x1138,
-+ 0x7007, 0x0004, 0x7003, 0x0000, 0x012e, 0x2000, 0x0005, 0x7000,
-+ 0xd084, 0x0580, 0x7108, 0xe000, 0x7008, 0xa106, 0x1dd8, 0xa184,
-+ 0x0003, 0x0904, 0x534b, 0xa184, 0x01e0, 0x1904, 0x534b, 0xd1f4,
-+ 0x1d88, 0xa184, 0x3000, 0xa086, 0x1000, 0x0d60, 0x2011, 0x0180,
-+ 0x710c, 0x8211, 0x0130, 0x7008, 0xd0f4, 0x1d20, 0x700c, 0xa106,
-+ 0x0dc0, 0x7007, 0x0012, 0x7108, 0xe000, 0x7008, 0xa106, 0x1dd8,
-+ 0xa184, 0x0003, 0x0540, 0xd194, 0x0db0, 0xd1f4, 0x0520, 0x7007,
-+ 0x0002, 0x0880, 0x7108, 0xd1fc, 0x0130, 0x080c, 0x5484, 0x8aff,
-+ 0x0904, 0x52e9, 0x0cb8, 0x700c, 0xa08c, 0x07ff, 0x01c8, 0x7004,
-+ 0xd084, 0x0158, 0x7014, 0xa005, 0x1128, 0x7010, 0xa005, 0x0128,
-+ 0xa102, 0x1e40, 0x7007, 0x0010, 0x0030, 0x8aff, 0x0148, 0x080c,
-+ 0x56ad, 0x1de8, 0x09f8, 0x080c, 0x53ee, 0x012e, 0x2000, 0x0005,
-+ 0x7204, 0x700c, 0xa215, 0x7108, 0xc19c, 0x8103, 0x1228, 0xa205,
-+ 0x1d90, 0x7007, 0x0002, 0x0ca0, 0xa205, 0x1d68, 0x7003, 0x0000,
-+ 0x7007, 0x0004, 0x012e, 0x2000, 0x0005, 0x0016, 0x6104, 0xa18c,
-+ 0x00ff, 0xa186, 0x0007, 0x0118, 0xa18e, 0x000f, 0x1110, 0x6040,
-+ 0x0008, 0x6428, 0x001e, 0x84ff, 0x01f8, 0x2c70, 0x7004, 0xa0bc,
-+ 0x000f, 0xa7b8, 0x53a4, 0x273d, 0x87fb, 0x1138, 0x0210, 0x080c,
-+ 0x297f, 0x609c, 0xa075, 0x0180, 0x0c88, 0x2705, 0xae68, 0x6808,
-+ 0xa630, 0x680c, 0xa529, 0x8421, 0x0138, 0x8738, 0x2705, 0xa005,
-+ 0x1da8, 0x709c, 0xa075, 0x1d10, 0x0005, 0x0000, 0x0005, 0x0009,
-+ 0x000d, 0x0011, 0x0015, 0x0019, 0x001d, 0x0000, 0x0003, 0x0009,
-+ 0x000f, 0x0015, 0x001b, 0x0000, 0x0000, 0x5399, 0x5396, 0x0000,
-+ 0x0000, 0x8000, 0x0000, 0x5399, 0x0000, 0x53a1, 0x539e, 0x0000,
-+ 0x0000, 0x0000, 0x0000, 0x53a1, 0x0000, 0x539c, 0x539c, 0x0000,
-+ 0x0000, 0x8000, 0x0000, 0x539c, 0x0000, 0x53a2, 0x53a2, 0x0000,
-+ 0x0000, 0x0000, 0x0000, 0x53a2, 0x2079, 0xb340, 0x2071, 0x0010,
-+ 0x7007, 0x000a, 0x7007, 0x0002, 0x7003, 0x0000, 0x7808, 0xd0ec,
-+ 0x0128, 0x2009, 0x0001, 0x2071, 0x0020, 0x0060, 0x2001, 0x01ff,
-+ 0x2004, 0xd0fc, 0x0118, 0x2009, 0x0001, 0x0010, 0x2009, 0x0002,
-+ 0x2071, 0x0050, 0x7007, 0x000a, 0x7007, 0x0002, 0x7003, 0x0000,
-+ 0x8109, 0x0118, 0x2071, 0x0020, 0x0ca8, 0x0005, 0x2019, 0x0000,
-+ 0x7004, 0x8004, 0x1a04, 0x545c, 0x7108, 0x7008, 0xa106, 0x1de0,
-+ 0xa184, 0x01e0, 0x0120, 0x080c, 0x54be, 0x0804, 0x547c, 0x7007,
-+ 0x0012, 0x7108, 0x7008, 0xa106, 0x1de0, 0xa184, 0x01e0, 0x0110,
-+ 0x080c, 0x54be, 0x7808, 0xd0ec, 0x0188, 0x2001, 0x04fd, 0x2004,
-+ 0xa086, 0x0003, 0x1170, 0xa184, 0x4000, 0x0170, 0xa382, 0x0003,
-+ 0x1258, 0xa184, 0x0004, 0x0d28, 0x8318, 0x0c18, 0x780c, 0xd0ec,
-+ 0x1118, 0xa184, 0x4000, 0x19e8, 0xa19c, 0x300c, 0xa386, 0x2004,
-+ 0x0190, 0xa386, 0x0008, 0x01c0, 0x7004, 0xd084, 0x1148, 0x7108,
-+ 0x7008, 0xa106, 0x1de0, 0xa184, 0x0003, 0x0110, 0x0804, 0x54be,
-+ 0xa386, 0x200c, 0x1930, 0x7200, 0x8204, 0x0230, 0x730c, 0xa384,
-+ 0x07ff, 0x0110, 0x080c, 0x297f, 0x7108, 0x7008, 0xa106, 0x1de0,
-+ 0xa184, 0x01e0, 0x0118, 0x080c, 0x54be, 0x0470, 0x7007, 0x0012,
-+ 0x7000, 0xd084, 0x1148, 0x7310, 0x7014, 0xa305, 0x0128, 0x710c,
-+ 0xa184, 0x07ff, 0x1904, 0x53ee, 0x7108, 0x7008, 0xa106, 0x1de0,
-+ 0xa184, 0x01e0, 0x0118, 0x080c, 0x54be, 0x00b0, 0x7007, 0x0012,
-+ 0x7007, 0x0008, 0x7004, 0xd09c, 0x1de8, 0x7108, 0x7008, 0xa106,
-+ 0x1de0, 0xa184, 0x01e0, 0x0118, 0x080c, 0x54be, 0x0028, 0x7007,
-+ 0x0012, 0x7108, 0xd1fc, 0x1d88, 0x7003, 0x0000, 0x0005, 0x0156,
-+ 0x7108, 0x0011, 0x015e, 0x0005, 0x7204, 0x7500, 0xa184, 0x01e0,
-+ 0x15a8, 0x7108, 0xa184, 0x01e0, 0x1588, 0xa184, 0x0007, 0x0002,
-+ 0x549a, 0x54a8, 0x5498, 0x54a8, 0x5498, 0x5508, 0x5498, 0x5506,
-+ 0x080c, 0x297f, 0x7004, 0xa084, 0x0010, 0xc08d, 0x7006, 0x8aff,
-+ 0x1118, 0x2049, 0x0000, 0x0018, 0x080c, 0x56ad, 0x1de8, 0x0005,
-+ 0x7004, 0xa084, 0x0010, 0xc08d, 0x7006, 0x7004, 0xd084, 0x1140,
-+ 0x7108, 0x7008, 0xa106, 0x1de0, 0xa184, 0x0003, 0x0108, 0x0030,
-+ 0x8aff, 0x0118, 0x080c, 0x56ad, 0x1de8, 0x0005, 0x7007, 0x0012,
-+ 0x7108, 0x1d04, 0x54c1, 0x2091, 0x6000, 0x1d04, 0x54c5, 0x2091,
-+ 0x6000, 0x7007, 0x0012, 0x7007, 0x0008, 0x7004, 0xd09c, 0x1de8,
-+ 0x7007, 0x0012, 0x7108, 0xd1fc, 0x1dd8, 0x7003, 0x0000, 0x7000,
-+ 0xa005, 0x1130, 0x7004, 0xa005, 0x1118, 0x700c, 0xa005, 0x0108,
-+ 0x0c40, 0x2049, 0x0000, 0xb284, 0x0200, 0x0118, 0x2001, 0x0000,
-+ 0x0010, 0x2001, 0x0001, 0x080c, 0x3fcf, 0xb284, 0x0200, 0x0118,
-+ 0x2001, 0xb3a4, 0x0010, 0x2001, 0xb3e4, 0x2004, 0xa084, 0x8000,
-+ 0x0130, 0x6824, 0xa005, 0x1128, 0x6827, 0x0004, 0x0010, 0x681b,
-+ 0x0002, 0x0005, 0x080c, 0x297f, 0x080c, 0x297f, 0x080c, 0x5548,
-+ 0x7210, 0x7114, 0x700c, 0xa09c, 0x07ff, 0x2800, 0xa300, 0xa211,
-+ 0xa189, 0x0000, 0x04a9, 0x2705, 0x2c58, 0xac60, 0x6308, 0x2200,
-+ 0xa322, 0x630c, 0x2100, 0xa31b, 0x2400, 0xa305, 0x0140, 0x1238,
-+ 0x8412, 0x8210, 0x830a, 0xa189, 0x0000, 0x2b60, 0x0c58, 0x2b60,
-+ 0x8a07, 0x0006, 0x6004, 0xa084, 0x0008, 0x0118, 0xa7ba, 0x539e,
-+ 0x0010, 0xa7ba, 0x5396, 0x000e, 0xa73d, 0x2c00, 0x6886, 0x6f8a,
-+ 0x6c92, 0x6b8e, 0x7108, 0x7008, 0xa106, 0x1de0, 0xa184, 0x01e0,
-+ 0x0110, 0x080c, 0x54be, 0x7007, 0x0012, 0x080c, 0x53ee, 0x0005,
-+ 0x8a50, 0x8739, 0x2705, 0xa004, 0x1168, 0x6000, 0xa064, 0x1108,
-+ 0x2d60, 0x6004, 0xa084, 0x000f, 0xa080, 0x53b4, 0x203d, 0x87fb,
-+ 0x090c, 0x297f, 0x0005, 0x0126, 0x00d6, 0x70f0, 0xa084, 0x4c00,
-+ 0x8004, 0x2090, 0x00de, 0x6884, 0x2060, 0x6888, 0x6b8c, 0x6c90,
-+ 0x8057, 0xaad4, 0x00ff, 0xa084, 0x00ff, 0x0006, 0x6804, 0xa084,
-+ 0x0008, 0x000e, 0x0118, 0xa0b8, 0x539e, 0x0010, 0xa0b8, 0x5396,
-+ 0xb284, 0x0200, 0x0110, 0x7e18, 0x0008, 0x7e1c, 0xa6b5, 0x000c,
-+ 0x6904, 0xa18c, 0x00ff, 0xa186, 0x0007, 0x0118, 0xa18e, 0x000f,
-+ 0x1130, 0x681c, 0xa084, 0x0040, 0x0130, 0xc685, 0x0020, 0x681c,
-+ 0xd0b4, 0x0108, 0xc685, 0x700c, 0xa084, 0x07ff, 0x0128, 0x7007,
-+ 0x0004, 0x7004, 0xd094, 0x1de8, 0x2400, 0xa305, 0x1108, 0x0420,
-+ 0x2c58, 0x2705, 0x6104, 0xac60, 0x6000, 0xa400, 0x701a, 0x6004,
-+ 0xa301, 0x701e, 0xa184, 0x0008, 0x0140, 0x6010, 0xa081, 0x0000,
-+ 0x7022, 0x6014, 0xa081, 0x0000, 0x7026, 0x6208, 0x2400, 0xa202,
-+ 0x7012, 0x620c, 0x2300, 0xa203, 0x7016, 0x7602, 0x7007, 0x0001,
-+ 0x2b60, 0x080c, 0x56d8, 0x0010, 0x080c, 0x56ad, 0x1de8, 0x012e,
-+ 0x2000, 0x0005, 0x0126, 0x00d6, 0x70f0, 0xa084, 0x4c00, 0x8004,
-+ 0x2090, 0x00de, 0x7007, 0x0004, 0x7004, 0xd094, 0x1de8, 0x7003,
-+ 0x0008, 0x012e, 0x2000, 0x0005, 0x0126, 0x00d6, 0x70f0, 0xa084,
-+ 0x4c00, 0x8004, 0x2090, 0x00de, 0x700c, 0xa084, 0x07ff, 0x0128,
-+ 0x7007, 0x0004, 0x7004, 0xd094, 0x1de8, 0x6814, 0xd0fc, 0x0110,
-+ 0x7e1c, 0x0008, 0x7e18, 0xa6b5, 0x000c, 0x6904, 0xa18c, 0x00ff,
-+ 0xa186, 0x0007, 0x0118, 0xa18e, 0x000f, 0x1140, 0x681c, 0xa084,
-+ 0x0040, 0x0108, 0xc685, 0x6840, 0x2050, 0x0030, 0x681c, 0xd0ac,
-+ 0x1108, 0xc685, 0x6828, 0x2050, 0x2d60, 0x6004, 0xa0bc, 0x000f,
-+ 0xa7b8, 0x53a4, 0x273d, 0x87fb, 0x1138, 0x0210, 0x080c, 0x297f,
-+ 0x689c, 0xa065, 0x0120, 0x0c88, 0x080c, 0x56ad, 0x1de8, 0x012e,
-+ 0x2000, 0x0005, 0x0126, 0x0006, 0x0016, 0x00d6, 0x70f0, 0xa084,
-+ 0x4c00, 0x8004, 0x2090, 0xb284, 0x0200, 0x0110, 0x7e18, 0x0008,
-+ 0x7e1c, 0x00de, 0x003e, 0x004e, 0xa6b5, 0x000c, 0x6904, 0xa18c,
-+ 0x00ff, 0xa186, 0x0007, 0x0118, 0xa18e, 0x000f, 0x1130, 0x681c,
-+ 0xa084, 0x0040, 0x0130, 0xc685, 0x0020, 0x681c, 0xd0b4, 0x0108,
-+ 0xc685, 0x2049, 0x5622, 0x0016, 0x6904, 0xa18c, 0x00ff, 0xa186,
-+ 0x0007, 0x0118, 0xa18e, 0x000f, 0x1110, 0x6840, 0x0008, 0x6828,
-+ 0x001e, 0xa055, 0x00d6, 0x0904, 0x56a9, 0x2d70, 0x2e60, 0x7004,
-+ 0xa0bc, 0x000f, 0xa7b8, 0x53a4, 0x273d, 0x87fb, 0x1140, 0x0210,
-+ 0x080c, 0x297f, 0x709c, 0xa075, 0x2060, 0x05d8, 0x0c80, 0x2705,
-+ 0xae68, 0x6808, 0xa422, 0x680c, 0xa31b, 0x0268, 0x8a51, 0x1110,
-+ 0x080c, 0x297f, 0x8738, 0x2705, 0xa005, 0x1d90, 0x709c, 0xa075,
-+ 0x2060, 0x0538, 0x08e0, 0x8422, 0x8420, 0x831a, 0xa399, 0x0000,
-+ 0x6908, 0x2400, 0xa122, 0x690c, 0x2300, 0xa11b, 0x1210, 0x080c,
-+ 0x297f, 0x0016, 0x3208, 0xa18c, 0x0200, 0x0168, 0x0006, 0x2001,
-+ 0xb342, 0x2004, 0xd0ec, 0x000e, 0x0118, 0x2071, 0x0020, 0x0028,
-+ 0x2071, 0x0050, 0x0010, 0x2071, 0x0020, 0x001e, 0x00de, 0x0804,
-+ 0x5593, 0x00de, 0x012e, 0x2000, 0x0005, 0x7008, 0x0006, 0xa084,
-+ 0x01e0, 0x000e, 0x0110, 0xa006, 0x0005, 0xa084, 0x0003, 0xa086,
-+ 0x0003, 0x1108, 0x0005, 0x2705, 0xac08, 0x2104, 0x701a, 0x8108,
-+ 0x2104, 0x701e, 0x8108, 0x2104, 0x7012, 0x8108, 0x2104, 0x7016,
-+ 0x6004, 0xa084, 0x0008, 0x0130, 0x8108, 0x2104, 0x7022, 0x8108,
-+ 0x2104, 0x7026, 0x7602, 0x7004, 0xa084, 0x0010, 0xc085, 0x7006,
-+ 0x8738, 0x2705, 0xa005, 0x1168, 0x609c, 0xa005, 0x01c8, 0x2060,
-+ 0x6004, 0xa084, 0x000f, 0xa080, 0x53a4, 0x203d, 0x87fb, 0x090c,
-+ 0x297f, 0x8a51, 0x0160, 0x7008, 0x0006, 0xa084, 0x01e0, 0x000e,
-+ 0x0110, 0xa006, 0x0028, 0xa084, 0x0003, 0xa086, 0x0003, 0x0005,
-+ 0x2051, 0x0000, 0x0005, 0x0126, 0x0006, 0x00d6, 0x70f0, 0xa084,
-+ 0x4c00, 0x8004, 0x2090, 0x00de, 0x008e, 0x7108, 0xa184, 0x0003,
-+ 0x1190, 0x0016, 0x6904, 0xa18c, 0x00ff, 0xa186, 0x0007, 0x0118,
-+ 0xa18e, 0x000f, 0x1110, 0x6840, 0x0008, 0x6828, 0x001e, 0xa005,
-+ 0x0178, 0x0804, 0x52f7, 0x7108, 0xd1fc, 0x0118, 0x080c, 0x5484,
-+ 0x0c20, 0x7007, 0x0010, 0x7108, 0xd1fc, 0x0de8, 0x080c, 0x5484,
-+ 0x7008, 0xa086, 0x0008, 0x19c8, 0x7000, 0xa005, 0x19b0, 0x7003,
-+ 0x0000, 0x2049, 0x0000, 0x012e, 0x2000, 0x0005, 0x0126, 0x0146,
-+ 0x0136, 0x0156, 0x00c6, 0x00d6, 0x70f0, 0xa084, 0x4c00, 0x8004,
-+ 0x2090, 0x00de, 0x2049, 0x5736, 0x69b0, 0xad80, 0x0011, 0xa100,
-+ 0x20a0, 0xb284, 0x0200, 0x0158, 0x2001, 0xb342, 0x2004, 0xd0ec,
-+ 0x0118, 0x2099, 0x0031, 0x0028, 0x2099, 0x0032, 0x0010, 0x2099,
-+ 0x0031, 0x700c, 0xa084, 0x07ff, 0x01b0, 0x6928, 0xa100, 0x682a,
-+ 0x7007, 0x0008, 0x7007, 0x0002, 0x7003, 0x0001, 0x0118, 0x8000,
-+ 0x80ac, 0x53a5, 0x700c, 0xa084, 0x07ff, 0x0128, 0x7007, 0x0004,
-+ 0x7004, 0xd094, 0x1de8, 0x00ce, 0x2049, 0x0000, 0x7003, 0x0000,
-+ 0x015e, 0x013e, 0x014e, 0x012e, 0x2000, 0x0005, 0x2091, 0x6000,
-+ 0x2091, 0x8000, 0x78ac, 0xa005, 0x1168, 0x796c, 0x70d0, 0xa106,
-+ 0x1148, 0x7814, 0xa005, 0x0130, 0x7817, 0x0000, 0x0e04, 0x5792,
-+ 0x2091, 0x4080, 0x7824, 0x8001, 0x7826, 0x1904, 0x5806, 0x7828,
-+ 0x7826, 0x7808, 0xd0ec, 0x1904, 0x57ff, 0x2061, 0xda00, 0x2069,
-+ 0xb3c0, 0xc7fd, 0x68ec, 0xa005, 0x0130, 0x8001, 0x68ee, 0xa005,
-+ 0x1110, 0x080c, 0x5995, 0x6800, 0xa084, 0x000f, 0x0168, 0xa086,
-+ 0x0001, 0x0150, 0x6840, 0xa00d, 0x0138, 0x2104, 0xa005, 0x0120,
-+ 0x8001, 0x200a, 0x0904, 0x5907, 0x6810, 0xa005, 0x01d0, 0x8001,
-+ 0x6812, 0x11b8, 0x68c3, 0x0001, 0xd7fc, 0x1148, 0x7808, 0xd0ec,
-+ 0x0118, 0x2009, 0x0102, 0x0028, 0x2009, 0x0202, 0x0010, 0x2009,
-+ 0x0102, 0x684c, 0xc08d, 0x200a, 0x6868, 0xa005, 0x0110, 0x080c,
-+ 0x260c, 0x6884, 0xa005, 0x0140, 0x8001, 0x6886, 0x1128, 0x686b,
-+ 0x0000, 0x68f0, 0xc0c5, 0x68f2, 0x68f0, 0xd0fc, 0x01b0, 0xc0fc,
-+ 0x68f2, 0x20a9, 0x0200, 0x6034, 0xa005, 0x0158, 0x8001, 0x6036,
-+ 0x68f0, 0xc0fd, 0x68f2, 0x1128, 0x6010, 0xa005, 0x0110, 0x080c,
-+ 0x260c, 0xace0, 0x0010, 0x1f04, 0x57eb, 0xd7fc, 0x0138, 0x2061,
-+ 0xba00, 0x2069, 0xb380, 0xc7fc, 0x0804, 0x57a2, 0x0409, 0x782c,
-+ 0x8001, 0x782e, 0x11b8, 0x7830, 0x782e, 0x2061, 0xba00, 0x2069,
-+ 0xb380, 0xc7fc, 0x6808, 0xa005, 0x0110, 0x080c, 0x5880, 0xd7fc,
-+ 0x1148, 0x7808, 0xd0ec, 0x1130, 0x2061, 0xda00, 0x2069, 0xb3c0,
-+ 0xc7fd, 0x0c80, 0x780c, 0xd0e4, 0x1100, 0x2091, 0x8001, 0x0005,
-+ 0x7834, 0x8001, 0x7836, 0x1904, 0x587f, 0x7838, 0x7836, 0x2069,
-+ 0xb380, 0xc7fc, 0x7808, 0x2079, 0x0200, 0xd0ec, 0x0110, 0x2079,
-+ 0x0100, 0x68f8, 0xa005, 0x0138, 0x7de0, 0xa504, 0x1120, 0x68fa,
-+ 0x68f0, 0xc0bc, 0x68f2, 0x2079, 0xb340, 0x680c, 0xa005, 0x1110,
-+ 0x2001, 0x0101, 0x8001, 0x680e, 0xd7fc, 0x1118, 0xa080, 0xfa00,
-+ 0x0010, 0xa080, 0xfb10, 0x2040, 0x2004, 0xa065, 0x01e0, 0x6024,
-+ 0xa005, 0x01b0, 0x8001, 0x6026, 0x1198, 0x6800, 0xa005, 0x0130,
-+ 0x6850, 0xac06, 0x1118, 0x080c, 0x5907, 0x0068, 0x6868, 0xa005,
-+ 0x0118, 0x6027, 0x0001, 0x0020, 0x080c, 0x58c0, 0x2804, 0x0c28,
-+ 0x6000, 0x2c40, 0x0c10, 0xd7fc, 0x1150, 0x7808, 0xd0ec, 0x1138,
-+ 0x2069, 0xb3c0, 0xc7fd, 0x2079, 0x0100, 0x0804, 0x5839, 0x0005,
-+ 0xa00e, 0x20a9, 0x0200, 0x6008, 0xd09c, 0x0558, 0x6024, 0xa005,
-+ 0x0118, 0x8001, 0x6026, 0x0418, 0x6008, 0xc09c, 0xd084, 0x1110,
-+ 0xd0ac, 0x01c0, 0x600a, 0x6004, 0xa005, 0x01d8, 0x00d6, 0x00c6,
-+ 0x0016, 0x2068, 0x6010, 0x8001, 0x6012, 0x080c, 0x3be8, 0x2d00,
-+ 0x2c68, 0x2060, 0x080c, 0x1d3b, 0x080c, 0x2076, 0x001e, 0x00ce,
-+ 0x00de, 0x0038, 0xc0bd, 0x600a, 0xa18d, 0x0001, 0x0010, 0xa18d,
-+ 0x0100, 0xace0, 0x0010, 0x1f04, 0x5883, 0xa184, 0x0001, 0x0130,
-+ 0xa18c, 0xfffe, 0x690a, 0x080c, 0x260c, 0x0008, 0x690a, 0x0005,
-+ 0x2c00, 0x6882, 0x6714, 0x6f7a, 0x6017, 0x0000, 0x602b, 0x0000,
-+ 0x601b, 0x0006, 0x60b4, 0xa084, 0x5f00, 0x601e, 0x6020, 0xa084,
-+ 0x00ff, 0xa085, 0x0060, 0x6022, 0x6000, 0x2042, 0x6860, 0xac06,
-+ 0x1110, 0x2800, 0x6862, 0x080c, 0x1cc4, 0x6818, 0xa005, 0x0530,
-+ 0x8001, 0x681a, 0x681a, 0x6808, 0xc0a4, 0x680a, 0x6810, 0x8001,
-+ 0x03e8, 0x6812, 0x602f, 0x0000, 0x6033, 0x0000, 0x2c68, 0x080c,
-+ 0x2085, 0xd7fc, 0x1118, 0x2069, 0xb380, 0x0010, 0x2069, 0xb3c0,
-+ 0x690c, 0xa184, 0x0100, 0x2001, 0x0006, 0x1128, 0x6883, 0x0000,
-+ 0x697e, 0x2001, 0x0004, 0x2708, 0x080c, 0x2601, 0x0005, 0x00d6,
-+ 0x00e6, 0x2d70, 0xd7fc, 0x1148, 0x7808, 0xd0ec, 0x0118, 0x2069,
-+ 0x0100, 0x0028, 0x2069, 0x0200, 0x0010, 0x2069, 0x0100, 0x7000,
-+ 0xa084, 0x000f, 0x0904, 0x595c, 0xa086, 0x0007, 0x1140, 0x00f6,
-+ 0x2d78, 0x7094, 0x2068, 0x080c, 0x4361, 0x00fe, 0x04a8, 0x7050,
-+ 0x2060, 0x080c, 0x2899, 0x601b, 0x0006, 0x6858, 0xa084, 0x5f00,
-+ 0x601e, 0x6020, 0xa084, 0x00ff, 0xa085, 0x0048, 0x6022, 0x602f,
-+ 0x0000, 0x6033, 0x0000, 0x6808, 0xa084, 0xfffd, 0x680a, 0x6830,
-+ 0xd0b4, 0x01b0, 0x684b, 0x0004, 0x20a9, 0x0014, 0x6848, 0xd094,
-+ 0x0110, 0x1f04, 0x5946, 0x684b, 0x0009, 0x20a9, 0x0014, 0x6848,
-+ 0xd084, 0x0110, 0x1f04, 0x594f, 0x20a9, 0x00fa, 0x1f04, 0x5956,
-+ 0x681b, 0x0050, 0x706b, 0x0007, 0x00ee, 0x00de, 0x0005, 0x2079,
-+ 0xb340, 0x0441, 0x0089, 0x00d9, 0x2009, 0x0002, 0x2069, 0xb3c0,
-+ 0x680b, 0x0000, 0x680f, 0x0000, 0x6813, 0x0000, 0x8109, 0x0118,
-+ 0x2069, 0xb380, 0x0ca8, 0x0005, 0x7808, 0xd0ec, 0x0118, 0x2019,
-+ 0x00cc, 0x0010, 0x2019, 0x007b, 0x7b2e, 0x7b32, 0x0005, 0x780c,
-+ 0xd0e4, 0x1118, 0x2019, 0x0040, 0x0010, 0x2019, 0x0026, 0x7b36,
-+ 0x7b3a, 0x0005, 0x780c, 0xd0e4, 0x1118, 0x2019, 0x3f94, 0x0010,
-+ 0x2019, 0x2624, 0x7b26, 0x7b2a, 0x0005, 0x6a54, 0xa285, 0x0000,
-+ 0x01f0, 0x6958, 0x6bdc, 0xa300, 0x00c6, 0x2164, 0x6304, 0x83ff,
-+ 0x1138, 0x8211, 0x0148, 0x8108, 0xa11a, 0x0eb8, 0x69dc, 0x0ca8,
-+ 0x68ef, 0x000a, 0x00ce, 0x0005, 0x6954, 0x6adc, 0x2264, 0x6008,
-+ 0xc0b5, 0x600a, 0x8210, 0x8109, 0x1dc8, 0x6956, 0x00ce, 0x0005,
-+ 0x1d04, 0x59b8, 0x2091, 0x6000, 0x1d04, 0x59bc, 0x2091, 0x6000,
-+ 0x70ec, 0xd0dc, 0x1118, 0xd0d4, 0x0508, 0x0410, 0x2008, 0x7808,
-+ 0xd0ec, 0x0158, 0xd1c4, 0x15b8, 0x780c, 0xc0c5, 0x780e, 0x7808,
-+ 0xc0f5, 0x780a, 0xd0ec, 0x0558, 0x0438, 0xae8e, 0x0100, 0x0138,
-+ 0x780c, 0xc0f5, 0xc0c5, 0x780e, 0xd0d4, 0x1508, 0x00e8, 0x780c,
-+ 0xc0fd, 0xc0c5, 0x780e, 0xd0d4, 0x11d0, 0x00b0, 0xd0e4, 0x01c8,
-+ 0x1d04, 0x59e8, 0x2091, 0x6000, 0x2009, 0x000c, 0x1d04, 0x59ee,
-+ 0x2091, 0x6000, 0x8109, 0x1dd0, 0x70e4, 0xa084, 0x01ff, 0xa086,
-+ 0x01ff, 0x1110, 0x70ec, 0x0850, 0x7804, 0xd08c, 0x0110, 0x681b,
-+ 0x000c, 0x70a0, 0x70a2, 0x0005, 0x0020, 0x002b, 0x0000, 0x0020,
-+ 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020,
-+ 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020,
-+ 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020,
-+ 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0014,
-+ 0x0014, 0x9851, 0x0014, 0x0014, 0x98f4, 0x98e1, 0x0014, 0x0014,
-+ 0x0014, 0x0080, 0x01a3, 0x0000, 0x0201, 0x0604, 0x0c08, 0x2120,
-+ 0x4022, 0xf880, 0x0018, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-+ 0x0000, 0x0000, 0x0000, 0x300b, 0xa201, 0x0014, 0xa200, 0x0014,
-+ 0xa200, 0x0214, 0xa202, 0x3806, 0x8839, 0x20c3, 0x0864, 0xa838,
-+ 0x28c1, 0x9cc2, 0xa203, 0x300c, 0x2846, 0x8161, 0x846a, 0x8300,
-+ 0x1856, 0x883a, 0xa804, 0x28f2, 0x9ca6, 0xa8f4, 0x300c, 0x28e1,
-+ 0x9ca6, 0x28a2, 0x7162, 0xa820, 0x2822, 0xa207, 0x64a7, 0x2882,
-+ 0x7163, 0xa81a, 0x2001, 0xa80f, 0xa206, 0x64c0, 0x6de0, 0x67a0,
-+ 0x6fc0, 0x882b, 0x1814, 0x883b, 0x7824, 0x68c1, 0x7864, 0x883e,
-+ 0xa802, 0x8576, 0x8677, 0x206c, 0x28c1, 0x9cc2, 0x2045, 0x2104,
-+ 0x20a1, 0x2080, 0x7961, 0xa8db, 0xa209, 0x0904, 0xa20e, 0xa808,
-+ 0xa205, 0xa300, 0x1872, 0x879a, 0x883c, 0x1fe2, 0xc601, 0xa20a,
-+ 0x8000, 0x85a1, 0x806f, 0x9422, 0x84a2, 0x856e, 0x0704, 0x9ca6,
-+ 0x0014, 0xa204, 0xa300, 0x3009, 0x19e2, 0xf864, 0x856e, 0x883f,
-+ 0x08e6, 0xa8f7, 0xf881, 0xa8eb, 0xc007, 0xf8c1, 0x0016, 0x85b2,
-+ 0x80f0, 0x9532, 0xfb02, 0x1de2, 0x0014, 0x8532, 0xf241, 0x0014,
-+ 0x1de2, 0x84a8, 0xd7a0, 0x1fe6, 0x0014, 0xa208, 0x6043, 0x8008,
-+ 0x1dc1, 0x0016, 0x8160, 0x842a, 0x8190, 0xf041, 0x3008, 0x84a8,
-+ 0x11d7, 0x7042, 0x20dd, 0x0011, 0x20d5, 0x8822, 0x0016, 0x3008,
-+ 0x2846, 0x1011, 0xa8fd, 0x2081, 0x2802, 0x1011, 0xa8fc, 0xa88f,
-+ 0x20a1, 0x283d, 0x1011, 0xa8fc, 0xa20b, 0x0017, 0x300c, 0xa300,
-+ 0x1de2, 0xd387, 0x0210, 0xa800, 0x26e0, 0x873a, 0xfb02, 0x19f2,
-+ 0x1fe2, 0x0014, 0xa20d, 0x3806, 0x0210, 0x9cc7, 0x0704, 0x0017,
-+ 0x60ff, 0x300c, 0x807f, 0x9521, 0x85a1, 0x806f, 0x9422, 0x84a2,
-+ 0x8720, 0xa211, 0x9d72, 0x8772, 0x8837, 0x2101, 0xa821, 0x10d3,
-+ 0x78e2, 0x9d76, 0xa8fc, 0xd984, 0xf0e2, 0xf0a1, 0xa820, 0x0014,
-+ 0x8831, 0xd166, 0x8830, 0x800f, 0x9401, 0xb520, 0xc802, 0x8820,
-+ 0xa80f, 0x2301, 0xa80d, 0x10d3, 0x78e4, 0x9d76, 0x8821, 0x8820,
-+ 0xa8e6, 0xf123, 0xf142, 0xf101, 0xa865, 0x10d3, 0x70f6, 0x8832,
-+ 0x8203, 0x870c, 0xd99e, 0x6001, 0x0014, 0x6848, 0x0214, 0x8827,
-+ 0x300a, 0x0013, 0xa21b, 0x9d72, 0x2001, 0xa853, 0x8201, 0x1852,
-+ 0xd183, 0x8834, 0x8001, 0xa801, 0x3027, 0x84a8, 0x1a56, 0x8833,
-+ 0x0014, 0xa218, 0x6981, 0x9d7d, 0x6926, 0x6908, 0x8080, 0x9521,
-+ 0xc003, 0x1ab4, 0xa809, 0xa80a, 0x1a34, 0xa806, 0x8080, 0x9521,
-+ 0xc002, 0x1a94, 0xa801, 0x1a14, 0x7021, 0x0014, 0xa300, 0x69e4,
-+ 0x8023, 0x16e1, 0x8001, 0x10f1, 0x6946, 0xa213, 0x1462, 0xa213,
-+ 0x8000, 0x16e1, 0xa808, 0x6161, 0x0014, 0xa214, 0x61c2, 0x8002,
-+ 0x14e1, 0x8004, 0x16e1, 0x0101, 0x300a, 0x8827, 0x0012, 0x8080,
-+ 0x940c, 0xc81d, 0x8001, 0x8492, 0x0013, 0x8000, 0x84a4, 0x8190,
-+ 0x0016, 0x11c3, 0x211e, 0x870e, 0xa21d, 0x0014, 0x9d7d, 0x0014,
-+ 0xa300, 0x8181, 0x842a, 0x84a8, 0x1ce6, 0x882c, 0x0016, 0xa212,
-+ 0x9d72, 0x10d3, 0x70e4, 0x0004, 0x800f, 0x9426, 0xcc1a, 0x9d76,
-+ 0xa8f8, 0x878e, 0x0016, 0xa21c, 0x1035, 0x7965, 0x8001, 0x9405,
-+ 0xc001, 0xa817, 0xa82f, 0xa8a5, 0xa210, 0x3807, 0x300c, 0x807f,
-+ 0x9521, 0x85a1, 0x806f, 0x9422, 0x84a2, 0x817e, 0x872b, 0x8772,
-+ 0x7965, 0x8001, 0x9405, 0xc001, 0xa804, 0xa81c, 0xa892, 0x0014,
-+ 0xa8a6, 0xa21f, 0x8080, 0xa521, 0x85a1, 0x8090, 0xa422, 0x84a2,
-+ 0x6981, 0x9d7d, 0x6923, 0x6903, 0x18b4, 0xa802, 0xa809, 0x1894,
-+ 0x807f, 0x9521, 0x85a1, 0x806f, 0x9422, 0x84a2, 0x7021, 0x0014,
-+ 0xa300, 0x0014, 0xa220, 0x8080, 0xa521, 0x85a1, 0x8090, 0xa422,
-+ 0x84a2, 0x6981, 0x9d7d, 0x6923, 0x6903, 0x18b4, 0xa802, 0xa80c,
-+ 0x1894, 0x807f, 0x9521, 0x85a1, 0x806f, 0x9422, 0x84a2, 0x80fd,
-+ 0x9405, 0x8485, 0x7021, 0x0014, 0xa300, 0xa8ca, 0x0000, 0x0710
-+};
-+#endif
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/scsi/isp/asm_2100.h 2003-07-19 17:06:33.000000000 -0700
-@@ -0,0 +1,8147 @@
-+/* @(#)asm_2100.h 1.5 */
-+/*
-+ * Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000 Qlogic, Inc.
-+ * All rights reserved.
-+ *
-+ * Redistribution and use in source and binary forms are permitted provided
-+ * that the following conditions are met:
-+ * 1. Redistribution of source code must retain the above copyright
-+ * notice, this list of conditions and the following disclaimer.
-+ * 2. Redistribution in binary form must reproduce the above copyright
-+ * notice, this list of conditions and the following disclaimer in the
-+ * documentation and/or other materials provided with the distribution.
-+ * 3. The name of the author may not be used to endorse or promote products
-+ * derived from this software without specific prior written permission
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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, 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) HOWEVER CAUSED AND ON ANY
-+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-+ */
-+
-+/*
-+ * Some very early boards have problems loading firmware that is larger than
-+ * 0x8000 words. In order to be able to provide at least *some* support
-+ * for such ancient cards, an alternate firmware set is provided. This firmware
-+ * isn't all that great, but, hey, it's better than nothing.
-+ *
-+ * Define USE_SMALLER_2100_FIRMWARE to select this.
-+ */
-+#ifndef USE_SMALLER_2100_FIRMWARE
-+/************************************************************************
-+ * *
-+ * --- ISP2100 Fabric Initiator/Target Firmware --- *
-+ * with expanded LUN addressing *
-+ * and FcTape (FCP-2) support *
-+ * *
-+ ************************************************************************/
-+/*
-+ * Firmware Version 1.19.24 (14:02 Jul 16, 2002)
-+ */
-+static const u_int16_t isp_2100_risc_code[] = {
-+ 0x0078, 0x102d, 0x0000, 0x95f1, 0x0000, 0x0001, 0x0013, 0x0018,
-+ 0x0017, 0x2043, 0x4f50, 0x5952, 0x4947, 0x4854, 0x2032, 0x3030,
-+ 0x3120, 0x514c, 0x4f47, 0x4943, 0x2043, 0x4f52, 0x504f, 0x5241,
-+ 0x5449, 0x4f4e, 0x2049, 0x5350, 0x3231, 0x3030, 0x2046, 0x6972,
-+ 0x6d77, 0x6172, 0x6520, 0x2056, 0x6572, 0x7369, 0x6f6e, 0x2030,
-+ 0x312e, 0x3139, 0x2020, 0x2020, 0x2400, 0x2091, 0x2000, 0x20c1,
-+ 0x0021, 0x2039, 0xffff, 0x2019, 0xaaaa, 0x2760, 0x2069, 0x7fff,
-+ 0x20c1, 0x0020, 0x2c2c, 0x2d34, 0x2762, 0x236a, 0x2c24, 0x2d04,
-+ 0x266a, 0x2562, 0xa406, 0x00c0, 0x1052, 0x20c1, 0x0021, 0x2c2c,
-+ 0x2362, 0x2c04, 0x2562, 0xa306, 0x0040, 0x1052, 0x20c1, 0x0020,
-+ 0x2039, 0x8fff, 0x20a1, 0xad00, 0x2708, 0x810d, 0x810d, 0x810d,
-+ 0x810d, 0xa18c, 0x000f, 0x2001, 0x000a, 0xa112, 0xa00e, 0x21a8,
-+ 0x41a4, 0x3400, 0x8211, 0x00c0, 0x105f, 0x2708, 0x3400, 0xa102,
-+ 0x0040, 0x106f, 0x0048, 0x106f, 0x20a8, 0xa00e, 0x41a4, 0x20a1,
-+ 0xa5f1, 0x2009, 0x0000, 0x20a9, 0x070f, 0x41a4, 0x3400, 0x20c9,
-+ 0xaaff, 0x2059, 0x0000, 0x2b78, 0x7823, 0x0004, 0x2089, 0x25c7,
-+ 0x2051, 0xa600, 0x2a70, 0x7762, 0xa786, 0x8fff, 0x0040, 0x1092,
-+ 0x705f, 0xcd00, 0x705b, 0xccf1, 0x7067, 0x0200, 0x706b, 0x0200,
-+ 0x0078, 0x109a, 0x705b, 0xbd01, 0x7067, 0x0100, 0x706b, 0x0100,
-+ 0x705f, 0xbd00, 0x1078, 0x12df, 0x1078, 0x13ca, 0x1078, 0x1577,
-+ 0x1078, 0x1ce9, 0x1078, 0x42ec, 0x1078, 0x76bf, 0x1078, 0x1355,
-+ 0x1078, 0x2ac0, 0x1078, 0x4e93, 0x1078, 0x49a3, 0x1078, 0x594a,
-+ 0x1078, 0x2263, 0x1078, 0x5c43, 0x1078, 0x5485, 0x1078, 0x2162,
-+ 0x1078, 0x2240, 0x2091, 0x3009, 0x7823, 0x0000, 0x0090, 0x10cf,
-+ 0x7820, 0xa086, 0x0002, 0x00c0, 0x10cf, 0x7823, 0x4000, 0x0068,
-+ 0x10c7, 0x781b, 0x0001, 0x2091, 0x5000, 0x2091, 0x4080, 0x2a70,
-+ 0x7003, 0x0000, 0x2001, 0x017f, 0x2003, 0x0000, 0x2a70, 0x7000,
-+ 0xa08e, 0x0003, 0x00c0, 0x10ef, 0x1078, 0x365e, 0x1078, 0x2ae8,
-+ 0x1078, 0x4ee3, 0x1078, 0x4b66, 0x2009, 0x0100, 0x2104, 0xa082,
-+ 0x0002, 0x0048, 0x10f3, 0x1078, 0x5966, 0x0078, 0x10d6, 0x1079,
-+ 0x10f7, 0x0078, 0x10dc, 0x1078, 0x7197, 0x0078, 0x10eb, 0x1101,
-+ 0x1102, 0x11be, 0x10ff, 0x1246, 0x12dc, 0x12dd, 0x12de, 0x1078,
-+ 0x1332, 0x007c, 0x127e, 0x0f7e, 0x2091, 0x8000, 0x7000, 0xa086,
-+ 0x0001, 0x00c0, 0x1198, 0x1078, 0x3aec, 0x2079, 0x0100, 0x7844,
-+ 0xa005, 0x00c0, 0x1198, 0x2011, 0x41dc, 0x1078, 0x5a45, 0x1078,
-+ 0x1adf, 0x780f, 0x00ff, 0x7840, 0xa084, 0xfffb, 0x7842, 0x2011,
-+ 0x8010, 0x73c4, 0x1078, 0x361b, 0x2001, 0xffff, 0x1078, 0x5ae6,
-+ 0x723c, 0xc284, 0x723e, 0x2001, 0xa60c, 0x2014, 0xc2ac, 0x2202,
-+ 0x1078, 0x6f9f, 0x2011, 0x0004, 0x1078, 0x8d1b, 0x1078, 0x489e,
-+ 0x1078, 0x42d4, 0x0040, 0x1144, 0x7087, 0x0001, 0x70bf, 0x0000,
-+ 0x1078, 0x3c9e, 0x0078, 0x1198, 0x1078, 0x4967, 0x0040, 0x114d,
-+ 0x7a0c, 0xc2b4, 0x7a0e, 0x0078, 0x1159, 0x1078, 0x90a6, 0x70cc,
-+ 0xd09c, 0x00c0, 0x1159, 0x7098, 0xa005, 0x0040, 0x1159, 0x1078,
-+ 0x42b8, 0x70d7, 0x0000, 0x70d3, 0x0000, 0x72cc, 0x2079, 0xa652,
-+ 0x7804, 0xd0ac, 0x0040, 0x1165, 0xc295, 0x72ce, 0xa296, 0x0004,
-+ 0x0040, 0x1186, 0x2011, 0x0001, 0x1078, 0x8d1b, 0x7093, 0x0000,
-+ 0x7097, 0xffff, 0x7003, 0x0002, 0x0f7f, 0x1078, 0x2677, 0x2011,
-+ 0x0005, 0x1078, 0x70e0, 0x1078, 0x62d1, 0x0c7e, 0x2061, 0x0100,
-+ 0x60e3, 0x0008, 0x0c7f, 0x127f, 0x0078, 0x119a, 0x7093, 0x0000,
-+ 0x7097, 0xffff, 0x7003, 0x0002, 0x2011, 0x0005, 0x1078, 0x70e0,
-+ 0x1078, 0x62d1, 0x0c7e, 0x2061, 0x0100, 0x60e3, 0x0008, 0x0c7f,
-+ 0x0f7f, 0x127f, 0x007c, 0x0c7e, 0x20a9, 0x0082, 0x2009, 0x007e,
-+ 0x017e, 0x027e, 0x037e, 0x2110, 0x027e, 0x2019, 0x0029, 0x1078,
-+ 0x73d0, 0x027f, 0x1078, 0xa4f1, 0x037f, 0x027f, 0x017f, 0x1078,
-+ 0x298e, 0x8108, 0x00f0, 0x11a0, 0x0c7f, 0x706f, 0x0000, 0x7070,
-+ 0xa084, 0x00ff, 0x7072, 0x709b, 0x0000, 0x007c, 0x127e, 0x2091,
-+ 0x8000, 0x7000, 0xa086, 0x0002, 0x00c0, 0x1244, 0x7094, 0xa086,
-+ 0xffff, 0x0040, 0x11d1, 0x1078, 0x2677, 0x1078, 0x62d1, 0x0078,
-+ 0x1244, 0x70cc, 0xd09c, 0x0040, 0x11fd, 0xd084, 0x0040, 0x11fd,
-+ 0x0f7e, 0x2079, 0x0100, 0x790c, 0xc1b5, 0x790e, 0x0f7f, 0xd08c,
-+ 0x0040, 0x11fd, 0x70d0, 0xa086, 0xffff, 0x0040, 0x11f9, 0x1078,
-+ 0x27f7, 0x1078, 0x62d1, 0x70cc, 0xd094, 0x00c0, 0x1244, 0x2011,
-+ 0x0001, 0x2019, 0x0000, 0x1078, 0x282f, 0x1078, 0x62d1, 0x0078,
-+ 0x1244, 0x70d4, 0xa005, 0x00c0, 0x1244, 0x7090, 0xa005, 0x00c0,
-+ 0x1244, 0x1078, 0x4967, 0x00c0, 0x1244, 0x2001, 0xa653, 0x2004,
-+ 0xd0ac, 0x0040, 0x1227, 0x157e, 0x0c7e, 0x20a9, 0x007f, 0x2009,
-+ 0x0000, 0x017e, 0x1078, 0x45c4, 0x00c0, 0x121a, 0x6000, 0xd0ec,
-+ 0x00c0, 0x1222, 0x017f, 0x8108, 0x00f0, 0x1211, 0x0c7f, 0x157f,
-+ 0x0078, 0x1227, 0x017f, 0x0c7f, 0x157f, 0x0078, 0x1244, 0x7003,
-+ 0x0003, 0x7097, 0xffff, 0x2001, 0x0000, 0x1078, 0x24e8, 0x1078,
-+ 0x3699, 0x2001, 0xa8b2, 0x2004, 0xa086, 0x0005, 0x00c0, 0x123c,
-+ 0x2011, 0x0000, 0x1078, 0x70e0, 0x2011, 0x0000, 0x1078, 0x70ea,
-+ 0x1078, 0x62d1, 0x1078, 0x639b, 0x127f, 0x007c, 0x017e, 0x0f7e,
-+ 0x127e, 0x2091, 0x8000, 0x2079, 0x0100, 0x2009, 0x00f7, 0x1078,
-+ 0x42a1, 0x7940, 0xa18c, 0x0010, 0x7942, 0x7924, 0xd1b4, 0x0040,
-+ 0x125b, 0x7827, 0x0040, 0xd19c, 0x0040, 0x1260, 0x7827, 0x0008,
-+ 0x007e, 0x037e, 0x157e, 0xa006, 0x1078, 0x5ae6, 0x7900, 0xa18a,
-+ 0x0003, 0x0050, 0x1289, 0x7954, 0xd1ac, 0x00c0, 0x1289, 0x2009,
-+ 0x00f8, 0x1078, 0x42a1, 0x7843, 0x0090, 0x7843, 0x0010, 0x20a9,
-+ 0x09c4, 0x7820, 0xd09c, 0x00c0, 0x1281, 0x7824, 0xd0ac, 0x00c0,
-+ 0x12ca, 0x00f0, 0x1279, 0x2001, 0x0001, 0x1078, 0x24e8, 0x0078,
-+ 0x12d5, 0x7853, 0x0000, 0x782f, 0x0020, 0x20a9, 0x0050, 0x00e0,
-+ 0x128f, 0x2091, 0x6000, 0x00f0, 0x128f, 0x7853, 0x0400, 0x782f,
-+ 0x0000, 0x2009, 0x00f8, 0x1078, 0x42a1, 0x20a9, 0x000e, 0x0005,
-+ 0x00f0, 0x129f, 0x7853, 0x1400, 0x7843, 0x0090, 0x7843, 0x0010,
-+ 0x2019, 0x61a8, 0x7854, 0x0005, 0x0005, 0xd08c, 0x0040, 0x12b4,
-+ 0x7824, 0xd0ac, 0x00c0, 0x12ca, 0x8319, 0x00c0, 0x12aa, 0x2009,
-+ 0xa632, 0x2104, 0x8000, 0x200a, 0xa084, 0xfff0, 0x0040, 0x12c4,
-+ 0x200b, 0x0000, 0x1078, 0x2588, 0x2001, 0x0001, 0x1078, 0x24e8,
-+ 0x0078, 0x12d3, 0x2001, 0xa632, 0x2003, 0x0000, 0x7828, 0xc09d,
-+ 0x782a, 0x7827, 0x0048, 0x7853, 0x0400, 0x157f, 0x037f, 0x007f,
-+ 0x127f, 0x0f7f, 0x017f, 0x007c, 0x007c, 0x007c, 0x007c, 0x2a70,
-+ 0x2061, 0xa8ad, 0x2063, 0x0001, 0x6007, 0x0013, 0x600b, 0x0018,
-+ 0x600f, 0x0017, 0x2009, 0x0100, 0x2104, 0xa082, 0x0002, 0x0048,
-+ 0x12f5, 0x7053, 0xffff, 0x0078, 0x12f7, 0x7053, 0x0000, 0x7057,
-+ 0xffff, 0x706f, 0x0000, 0x7073, 0x0000, 0x1078, 0x90a6, 0x2061,
-+ 0xa88d, 0x6003, 0x0909, 0x6007, 0x0000, 0x600b, 0x8800, 0x600f,
-+ 0x0200, 0x6013, 0x00ff, 0x6017, 0x0003, 0x601b, 0x0000, 0x601f,
-+ 0x07d0, 0x2061, 0xa895, 0x6003, 0x8000, 0x6007, 0x0000, 0x600b,
-+ 0x0000, 0x600f, 0x0200, 0x6013, 0x00ff, 0x6017, 0x0000, 0x601b,
-+ 0x0001, 0x601f, 0x0000, 0x2061, 0xa8a5, 0x6003, 0x514c, 0x6007,
-+ 0x4f47, 0x600b, 0x4943, 0x600f, 0x2020, 0x2001, 0xa626, 0x2003,
-+ 0x0000, 0x007c, 0x2091, 0x8000, 0x0068, 0x1334, 0x007e, 0x017e,
-+ 0x2079, 0x0000, 0x7818, 0xd084, 0x00c0, 0x133a, 0x017f, 0x792e,
-+ 0x007f, 0x782a, 0x007f, 0x7826, 0x3900, 0x783a, 0x7823, 0x8002,
-+ 0x781b, 0x0001, 0x2091, 0x5000, 0x2091, 0x4080, 0x2079, 0xa600,
-+ 0x7803, 0x0005, 0x0078, 0x1352, 0x007c, 0x2071, 0xa600, 0x715c,
-+ 0x712e, 0x2021, 0x0001, 0xa190, 0x002d, 0xa298, 0x002d, 0x0048,
-+ 0x136b, 0x7060, 0xa302, 0x00c8, 0x136b, 0x220a, 0x2208, 0x2310,
-+ 0x8420, 0x0078, 0x135d, 0x200b, 0x0000, 0x74aa, 0x74ae, 0x007c,
-+ 0x0e7e, 0x127e, 0x2091, 0x8000, 0x2071, 0xa600, 0x70ac, 0xa0ea,
-+ 0x0010, 0x00c8, 0x137e, 0xa06e, 0x0078, 0x1388, 0x8001, 0x70ae,
-+ 0x702c, 0x2068, 0x2d04, 0x702e, 0x206b, 0x0000, 0x6807, 0x0000,
-+ 0x127f, 0x0e7f, 0x007c, 0x0e7e, 0x2071, 0xa600, 0x127e, 0x2091,
-+ 0x8000, 0x70ac, 0x8001, 0x00c8, 0x1398, 0xa06e, 0x0078, 0x13a1,
-+ 0x70ae, 0x702c, 0x2068, 0x2d04, 0x702e, 0x206b, 0x0000, 0x6807,
-+ 0x0000, 0x127f, 0x0e7f, 0x007c, 0x0e7e, 0x127e, 0x2091, 0x8000,
-+ 0x2071, 0xa600, 0x702c, 0x206a, 0x2d00, 0x702e, 0x70ac, 0x8000,
-+ 0x70ae, 0x127f, 0x0e7f, 0x007c, 0x8dff, 0x0040, 0x13c0, 0x6804,
-+ 0x6807, 0x0000, 0x007e, 0x1078, 0x13a4, 0x0d7f, 0x0078, 0x13b4,
-+ 0x007c, 0x0e7e, 0x2071, 0xa600, 0x70ac, 0xa08a, 0x0010, 0xa00d,
-+ 0x0e7f, 0x007c, 0x0e7e, 0x2071, 0xa8d6, 0x7007, 0x0000, 0x701b,
-+ 0x0000, 0x701f, 0x0000, 0x2071, 0x0000, 0x7010, 0xa085, 0x8004,
-+ 0x7012, 0x0e7f, 0x007c, 0x127e, 0x2091, 0x8000, 0x0e7e, 0x2270,
-+ 0x700b, 0x0000, 0x2071, 0xa8d6, 0x7018, 0xa088, 0xa8df, 0x220a,
-+ 0x8000, 0xa084, 0x0007, 0x701a, 0x7004, 0xa005, 0x00c0, 0x13f6,
-+ 0x0f7e, 0x2079, 0x0010, 0x1078, 0x1408, 0x0f7f, 0x0e7f, 0x127f,
-+ 0x007c, 0x0e7e, 0x2071, 0xa8d6, 0x7004, 0xa005, 0x00c0, 0x1406,
-+ 0x0f7e, 0x2079, 0x0010, 0x1078, 0x1408, 0x0f7f, 0x0e7f, 0x007c,
-+ 0x7000, 0x0079, 0x140b, 0x140f, 0x1479, 0x1496, 0x1496, 0x7018,
-+ 0x711c, 0xa106, 0x00c0, 0x1417, 0x7007, 0x0000, 0x007c, 0x0d7e,
-+ 0xa180, 0xa8df, 0x2004, 0x700a, 0x2068, 0x8108, 0xa18c, 0x0007,
-+ 0x711e, 0x7803, 0x0026, 0x6824, 0x7832, 0x6828, 0x7836, 0x682c,
-+ 0x783a, 0x6830, 0x783e, 0x6810, 0x700e, 0x680c, 0x7016, 0x6804,
-+ 0x0d7f, 0xd084, 0x0040, 0x1439, 0x7007, 0x0001, 0x1078, 0x143e,
-+ 0x007c, 0x7007, 0x0002, 0x1078, 0x1454, 0x007c, 0x017e, 0x027e,
-+ 0x710c, 0x2011, 0x0040, 0xa182, 0x0040, 0x00c8, 0x1449, 0x2110,
-+ 0xa006, 0x700e, 0x7212, 0x8203, 0x7822, 0x7803, 0x0020, 0x7803,
-+ 0x0041, 0x027f, 0x017f, 0x007c, 0x017e, 0x027e, 0x137e, 0x147e,
-+ 0x157e, 0x7014, 0x2098, 0x20a1, 0x0014, 0x7803, 0x0026, 0x710c,
-+ 0x2011, 0x0040, 0xa182, 0x0040, 0x00c8, 0x1468, 0x2110, 0xa006,
-+ 0x700e, 0x22a8, 0x53a6, 0x8203, 0x7822, 0x7803, 0x0020, 0x3300,
-+ 0x7016, 0x7803, 0x0001, 0x157f, 0x147f, 0x137f, 0x027f, 0x017f,
-+ 0x007c, 0x137e, 0x147e, 0x157e, 0x2099, 0xa6fa, 0x20a1, 0x0018,
-+ 0x20a9, 0x0008, 0x53a3, 0x7803, 0x0020, 0x127e, 0x2091, 0x8000,
-+ 0x7803, 0x0041, 0x7007, 0x0003, 0x7000, 0xc084, 0x7002, 0x700b,
-+ 0xa6f5, 0x127f, 0x157f, 0x147f, 0x137f, 0x007c, 0x137e, 0x147e,
-+ 0x157e, 0x2001, 0xa729, 0x209c, 0x20a1, 0x0014, 0x7803, 0x0026,
-+ 0x2001, 0xa72a, 0x20ac, 0x53a6, 0x2099, 0xa72b, 0x20a1, 0x0018,
-+ 0x20a9, 0x0008, 0x53a3, 0x7803, 0x0020, 0x127e, 0x2091, 0x8000,
-+ 0x7803, 0x0001, 0x7007, 0x0004, 0x7000, 0xc08c, 0x7002, 0x700b,
-+ 0xa726, 0x127f, 0x157f, 0x147f, 0x137f, 0x007c, 0x017e, 0x0e7e,
-+ 0x2071, 0xa8d6, 0x0f7e, 0x2079, 0x0010, 0x7904, 0x7803, 0x0002,
-+ 0xd1fc, 0x0040, 0x14d0, 0xa18c, 0x0700, 0x7004, 0x1079, 0x14d4,
-+ 0x0f7f, 0x0e7f, 0x017f, 0x007c, 0x1408, 0x14dc, 0x1509, 0x1531,
-+ 0x1564, 0x14da, 0x0078, 0x14da, 0xa18c, 0x0700, 0x00c0, 0x1502,
-+ 0x137e, 0x147e, 0x157e, 0x7014, 0x20a0, 0x2099, 0x0014, 0x7803,
-+ 0x0040, 0x7010, 0x20a8, 0x53a5, 0x3400, 0x7016, 0x157f, 0x147f,
-+ 0x137f, 0x700c, 0xa005, 0x0040, 0x151e, 0x1078, 0x143e, 0x007c,
-+ 0x7008, 0xa080, 0x0002, 0x2003, 0x0100, 0x7007, 0x0000, 0x1078,
-+ 0x1408, 0x007c, 0x7008, 0xa080, 0x0002, 0x2003, 0x0200, 0x0078,
-+ 0x14fd, 0xa18c, 0x0700, 0x00c0, 0x1514, 0x700c, 0xa005, 0x0040,
-+ 0x151e, 0x1078, 0x1454, 0x007c, 0x7008, 0xa080, 0x0002, 0x2003,
-+ 0x0200, 0x7007, 0x0000, 0x1078, 0x1408, 0x007c, 0x0d7e, 0x7008,
-+ 0x2068, 0x7830, 0x6826, 0x7834, 0x682a, 0x7838, 0x682e, 0x783c,
-+ 0x6832, 0x680b, 0x0100, 0x0d7f, 0x7007, 0x0000, 0x1078, 0x1408,
-+ 0x007c, 0xa18c, 0x0700, 0x00c0, 0x155e, 0x137e, 0x147e, 0x157e,
-+ 0x2001, 0xa6f8, 0x2004, 0xa080, 0x000d, 0x20a0, 0x2099, 0x0014,
-+ 0x7803, 0x0040, 0x20a9, 0x0020, 0x53a5, 0x2001, 0xa6fa, 0x2004,
-+ 0xd0bc, 0x0040, 0x1554, 0x2001, 0xa703, 0x2004, 0xa080, 0x000d,
-+ 0x20a0, 0x20a9, 0x0020, 0x53a5, 0x157f, 0x147f, 0x137f, 0x7007,
-+ 0x0000, 0x1078, 0x4f8c, 0x1078, 0x1408, 0x007c, 0x2011, 0x8003,
-+ 0x1078, 0x361b, 0x0078, 0x1562, 0xa18c, 0x0700, 0x00c0, 0x1571,
-+ 0x2001, 0xa728, 0x2003, 0x0100, 0x7007, 0x0000, 0x1078, 0x1408,
-+ 0x007c, 0x2011, 0x8004, 0x1078, 0x361b, 0x0078, 0x1575, 0x127e,
-+ 0x2091, 0x2100, 0x2079, 0x0030, 0x2071, 0xa8e7, 0x7803, 0x0004,
-+ 0x7003, 0x0000, 0x700f, 0xa8ed, 0x7013, 0xa8ed, 0x780f, 0x0076,
-+ 0x7803, 0x0004, 0x127f, 0x007c, 0x6934, 0xa184, 0x0007, 0x0079,
-+ 0x1591, 0x1599, 0x15df, 0x1599, 0x1599, 0x1599, 0x15c4, 0x15a8,
-+ 0x159d, 0xa085, 0x0001, 0x0078, 0x15f9, 0x684c, 0xd0bc, 0x0040,
-+ 0x1599, 0x6860, 0x682e, 0x685c, 0x682a, 0x6858, 0x0078, 0x15e7,
-+ 0xa18c, 0x00ff, 0xa186, 0x001e, 0x00c0, 0x1599, 0x684c, 0xd0bc,
-+ 0x0040, 0x1599, 0x6860, 0x682e, 0x685c, 0x682a, 0x6804, 0x681a,
-+ 0xa080, 0x000d, 0x2004, 0xa084, 0x000f, 0xa080, 0x206a, 0x2004,
-+ 0x6832, 0x6858, 0x0078, 0x15ef, 0xa18c, 0x00ff, 0xa186, 0x0015,
-+ 0x00c0, 0x1599, 0x684c, 0xd0ac, 0x0040, 0x1599, 0x6804, 0x681a,
-+ 0xa080, 0x000d, 0x2004, 0xa084, 0x000f, 0xa080, 0x206a, 0x2004,
-+ 0x6832, 0xa006, 0x682e, 0x682a, 0x6858, 0x0078, 0x15ef, 0x684c,
-+ 0xd0ac, 0x0040, 0x1599, 0xa006, 0x682e, 0x682a, 0x6858, 0xa18c,
-+ 0x000f, 0xa188, 0x206a, 0x210c, 0x6932, 0x2d08, 0x691a, 0x6826,
-+ 0x684c, 0xc0dd, 0x684e, 0xa006, 0x680a, 0x697c, 0x6912, 0x6980,
-+ 0x6916, 0x007c, 0x20e1, 0x0007, 0x20e1, 0x2000, 0x2001, 0x020a,
-+ 0x2004, 0x82ff, 0x0040, 0x161c, 0xa280, 0x0004, 0x0d7e, 0x206c,
-+ 0x684c, 0xd0dc, 0x00c0, 0x1618, 0x1078, 0x158c, 0x0040, 0x1618,
-+ 0x0d7f, 0xa280, 0x0000, 0x2003, 0x0002, 0xa016, 0x0078, 0x161c,
-+ 0x6808, 0x8000, 0x680a, 0x0d7f, 0x127e, 0x047e, 0x037e, 0x027e,
-+ 0x2091, 0x2100, 0x027f, 0x037f, 0x047f, 0x7000, 0xa005, 0x00c0,
-+ 0x1630, 0x7206, 0x2001, 0x1651, 0x007e, 0x2260, 0x0078, 0x17e0,
-+ 0x710c, 0x220a, 0x8108, 0x230a, 0x8108, 0x240a, 0x8108, 0xa182,
-+ 0xa908, 0x0048, 0x163d, 0x2009, 0xa8ed, 0x710e, 0x7010, 0xa102,
-+ 0xa082, 0x0009, 0x0040, 0x1648, 0xa080, 0x001b, 0x00c0, 0x164b,
-+ 0x2009, 0x0138, 0x200a, 0x7000, 0xa005, 0x00c0, 0x1651, 0x1078,
-+ 0x17c1, 0x127f, 0x007c, 0x127e, 0x027e, 0x037e, 0x0c7e, 0x007e,
-+ 0x2091, 0x2100, 0x007f, 0x047f, 0x037f, 0x027f, 0x0d7e, 0x0c7e,
-+ 0x2460, 0x6110, 0x2168, 0x6a62, 0x6b5e, 0xa005, 0x0040, 0x16dd,
-+ 0x6808, 0xa005, 0x0040, 0x174a, 0x7000, 0xa005, 0x00c0, 0x1672,
-+ 0x0078, 0x16d2, 0x700c, 0x7110, 0xa106, 0x00c0, 0x1753, 0x7004,
-+ 0xa406, 0x00c0, 0x16d2, 0x2001, 0x0005, 0x2004, 0xd08c, 0x0040,
-+ 0x168f, 0x047e, 0x1078, 0x1913, 0x047f, 0x2460, 0x6010, 0xa080,
-+ 0x0002, 0x2004, 0xa005, 0x0040, 0x174a, 0x0078, 0x166c, 0x2001,
-+ 0x0207, 0x2004, 0xd09c, 0x00c0, 0x167b, 0x7804, 0xa084, 0x6000,
-+ 0x0040, 0x16a0, 0xa086, 0x6000, 0x0040, 0x16a0, 0x0078, 0x167b,
-+ 0x7100, 0xa186, 0x0002, 0x00c0, 0x16c0, 0x0e7e, 0x2b68, 0x6818,
-+ 0x2060, 0x1078, 0x203f, 0x2804, 0xac70, 0x6034, 0xd09c, 0x00c0,
-+ 0x16b5, 0x7108, 0x720c, 0x0078, 0x16b7, 0x7110, 0x7214, 0x6810,
-+ 0xa100, 0x6812, 0x6814, 0xa201, 0x6816, 0x0e7f, 0x0078, 0x16c4,
-+ 0xa186, 0x0001, 0x00c0, 0x16cc, 0x7820, 0x6910, 0xa100, 0x6812,
-+ 0x7824, 0x6914, 0xa101, 0x6816, 0x7803, 0x0004, 0x7003, 0x0000,
-+ 0x7004, 0x2060, 0x6100, 0xa18e, 0x0004, 0x00c0, 0x1753, 0x2009,
-+ 0x0048, 0x1078, 0x775c, 0x0078, 0x1753, 0x6808, 0xa005, 0x0040,
-+ 0x174a, 0x7000, 0xa005, 0x00c0, 0x16e7, 0x0078, 0x174a, 0x700c,
-+ 0x7110, 0xa106, 0x00c0, 0x16f0, 0x7004, 0xa406, 0x00c0, 0x174a,
-+ 0x2001, 0x0005, 0x2004, 0xd08c, 0x0040, 0x1704, 0x047e, 0x1078,
-+ 0x1913, 0x047f, 0x2460, 0x6010, 0xa080, 0x0002, 0x2004, 0xa005,
-+ 0x0040, 0x174a, 0x0078, 0x16e1, 0x2001, 0x0207, 0x2004, 0xd09c,
-+ 0x00c0, 0x16f0, 0x2001, 0x0005, 0x2004, 0xd08c, 0x00c0, 0x16f6,
-+ 0x7804, 0xa084, 0x6000, 0x0040, 0x171b, 0xa086, 0x6000, 0x0040,
-+ 0x171b, 0x0078, 0x16f0, 0x7007, 0x0000, 0xa016, 0x2218, 0x7000,
-+ 0xa08e, 0x0001, 0x0040, 0x173c, 0xa08e, 0x0002, 0x00c0, 0x174a,
-+ 0x0c7e, 0x0e7e, 0x6818, 0x2060, 0x1078, 0x203f, 0x2804, 0xac70,
-+ 0x6034, 0xd09c, 0x00c0, 0x1738, 0x7308, 0x720c, 0x0078, 0x173a,
-+ 0x7310, 0x7214, 0x0e7f, 0x0c7f, 0x7820, 0xa318, 0x7824, 0xa211,
-+ 0x6810, 0xa300, 0x6812, 0x6814, 0xa201, 0x6816, 0x7803, 0x0004,
-+ 0x7003, 0x0000, 0x6100, 0xa18e, 0x0004, 0x00c0, 0x1753, 0x2009,
-+ 0x0048, 0x1078, 0x775c, 0x0c7f, 0x0d7f, 0x127f, 0x007c, 0x0f7e,
-+ 0x0e7e, 0x027e, 0x037e, 0x047e, 0x057e, 0x2071, 0xa8e7, 0x7000,
-+ 0xa086, 0x0000, 0x0040, 0x17ba, 0x7004, 0xac06, 0x00c0, 0x17ab,
-+ 0x2079, 0x0030, 0x7000, 0xa086, 0x0003, 0x0040, 0x17ab, 0x7804,
-+ 0xd0fc, 0x00c0, 0x17a7, 0x20e1, 0x6000, 0x2011, 0x0032, 0x2001,
-+ 0x0208, 0x200c, 0x2001, 0x0209, 0x2004, 0xa106, 0x00c0, 0x176f,
-+ 0x8211, 0x00c0, 0x1777, 0x7804, 0xd0fc, 0x00c0, 0x17a7, 0x1078,
-+ 0x1b22, 0x027e, 0x057e, 0x7803, 0x0004, 0x7804, 0xd0ac, 0x00c0,
-+ 0x178d, 0x7803, 0x0002, 0x7803, 0x0009, 0x7003, 0x0003, 0x7007,
-+ 0x0000, 0x057f, 0x027f, 0x2001, 0x015d, 0x2003, 0x0000, 0x2001,
-+ 0x0160, 0x2502, 0x2001, 0x0138, 0x2202, 0x0078, 0x17ab, 0x1078,
-+ 0x1913, 0x0078, 0x175f, 0x157e, 0x20a9, 0x0009, 0x2009, 0xa8ed,
-+ 0x2104, 0xac06, 0x00c0, 0x17b5, 0x200a, 0xa188, 0x0003, 0x00f0,
-+ 0x17b0, 0x157f, 0x057f, 0x047f, 0x037f, 0x027f, 0x0e7f, 0x0f7f,
-+ 0x007c, 0x700c, 0x7110, 0xa106, 0x00c0, 0x17c9, 0x7003, 0x0000,
-+ 0x007c, 0x2104, 0x7006, 0x2060, 0x8108, 0x211c, 0x8108, 0x2124,
-+ 0x8108, 0xa182, 0xa908, 0x0048, 0x17d7, 0x2009, 0xa8ed, 0x7112,
-+ 0x700c, 0xa106, 0x00c0, 0x17e0, 0x2001, 0x0138, 0x2003, 0x0008,
-+ 0x8cff, 0x00c0, 0x17e7, 0x1078, 0x1b4d, 0x0078, 0x1854, 0x6010,
-+ 0x2068, 0x2d58, 0x6828, 0xa406, 0x00c0, 0x17f2, 0x682c, 0xa306,
-+ 0x0040, 0x182f, 0x601c, 0xa086, 0x0008, 0x0040, 0x182f, 0x6024,
-+ 0xd0f4, 0x00c0, 0x181c, 0xd0d4, 0x0040, 0x1818, 0x6038, 0xa402,
-+ 0x6034, 0xa303, 0x0040, 0x1806, 0x00c8, 0x1818, 0x643a, 0x6336,
-+ 0x6c2a, 0x6b2e, 0x047e, 0x037e, 0x2400, 0x6c7c, 0xa402, 0x6812,
-+ 0x2300, 0x6b80, 0xa303, 0x6816, 0x037f, 0x047f, 0x0078, 0x181c,
-+ 0x1078, 0x9053, 0x0040, 0x17e3, 0x2001, 0xa674, 0x2004, 0xd0b4,
-+ 0x00c0, 0x182b, 0x6018, 0x2004, 0xd0bc, 0x00c0, 0x182b, 0x6817,
-+ 0x7fff, 0x6813, 0xffff, 0x1078, 0x208a, 0x00c0, 0x17e3, 0x0c7e,
-+ 0x7004, 0x2060, 0x6024, 0xc0d4, 0x6026, 0x0c7f, 0x684c, 0xd0f4,
-+ 0x0040, 0x1840, 0x6817, 0xffff, 0x6813, 0xffff, 0x0078, 0x17e3,
-+ 0x6824, 0x2050, 0x6818, 0x2060, 0x6830, 0x2040, 0x6034, 0xa0cc,
-+ 0x000f, 0x2009, 0x0011, 0x1078, 0x1855, 0x0040, 0x1853, 0x2009,
-+ 0x0001, 0x1078, 0x1855, 0x2d58, 0x007c, 0x8aff, 0x0040, 0x18ec,
-+ 0xa03e, 0x2730, 0x6850, 0xd0fc, 0x00c0, 0x1877, 0xd0f4, 0x00c0,
-+ 0x1887, 0x0d7e, 0x2804, 0xac68, 0x2900, 0x0079, 0x1867, 0x18ce,
-+ 0x188e, 0x188e, 0x18ce, 0x18ce, 0x18c6, 0x18ce, 0x188e, 0x18ce,
-+ 0x1894, 0x1894, 0x18ce, 0x18ce, 0x18ce, 0x18bd, 0x1894, 0xc0fc,
-+ 0x6852, 0x6b6c, 0x6a70, 0x6d1c, 0x6c20, 0x0d7e, 0xd99c, 0x0040,
-+ 0x18d1, 0x2804, 0xac68, 0x6f08, 0x6e0c, 0x0078, 0x18d1, 0xc0f4,
-+ 0x6852, 0x6b6c, 0x6a70, 0x0d7e, 0x0078, 0x18d8, 0x6b08, 0x6a0c,
-+ 0x6d00, 0x6c04, 0x0078, 0x18d1, 0x7b0c, 0xd3bc, 0x0040, 0x18b5,
-+ 0x7004, 0x0e7e, 0x2070, 0x701c, 0x0e7f, 0xa086, 0x0008, 0x00c0,
-+ 0x18b5, 0x7b08, 0xa39c, 0x0fff, 0x2d20, 0x0d7f, 0x0d7e, 0x6a14,
-+ 0x82ff, 0x00c0, 0x18b0, 0x6810, 0xa302, 0x0048, 0x18b0, 0x6b10,
-+ 0x2011, 0x0000, 0x2468, 0x0078, 0x18b7, 0x6b10, 0x6a14, 0x6d00,
-+ 0x6c04, 0x6f08, 0x6e0c, 0x0078, 0x18d1, 0x0d7f, 0x0d7e, 0x6834,
-+ 0xa084, 0x00ff, 0xa086, 0x001e, 0x00c0, 0x18ce, 0x0d7f, 0x1078,
-+ 0x2026, 0x00c0, 0x1855, 0xa00e, 0x0078, 0x18ec, 0x0d7f, 0x1078,
-+ 0x1332, 0x7b22, 0x7a26, 0x7d32, 0x7c36, 0x7f3a, 0x7e3e, 0x7902,
-+ 0x7000, 0x8000, 0x7002, 0x0d7f, 0x6828, 0xa300, 0x682a, 0x682c,
-+ 0xa201, 0x682e, 0x2300, 0x6b10, 0xa302, 0x6812, 0x2200, 0x6a14,
-+ 0xa203, 0x6816, 0x1078, 0x2026, 0x007c, 0x1078, 0x1332, 0x1078,
-+ 0x1c97, 0x7004, 0x2060, 0x0d7e, 0x6010, 0x2068, 0x7003, 0x0000,
-+ 0x1078, 0x1af4, 0x1078, 0x8d06, 0x0040, 0x190c, 0x6808, 0x8001,
-+ 0x680a, 0x697c, 0x6912, 0x6980, 0x6916, 0x682b, 0xffff, 0x682f,
-+ 0xffff, 0x6850, 0xc0bd, 0x6852, 0x0d7f, 0x1078, 0x8a01, 0x0078,
-+ 0x1adb, 0x1078, 0x1332, 0x127e, 0x2091, 0x2100, 0x007e, 0x017e,
-+ 0x2b68, 0x6818, 0x2060, 0x7904, 0x7803, 0x0002, 0xa184, 0x0700,
-+ 0x00c0, 0x18ef, 0xa184, 0x0003, 0xa086, 0x0003, 0x0040, 0x1911,
-+ 0x7000, 0x0079, 0x192b, 0x1933, 0x1935, 0x1a34, 0x1ab2, 0x1ac9,
-+ 0x1933, 0x1933, 0x1933, 0x1078, 0x1332, 0x8001, 0x7002, 0xa184,
-+ 0x0880, 0x00c0, 0x194a, 0x8aff, 0x0040, 0x19d4, 0x2009, 0x0001,
-+ 0x1078, 0x1855, 0x0040, 0x1adb, 0x2009, 0x0001, 0x1078, 0x1855,
-+ 0x0078, 0x1adb, 0x7803, 0x0004, 0x7003, 0x0000, 0xd1bc, 0x00c0,
-+ 0x19b2, 0x027e, 0x037e, 0x017e, 0x7808, 0xd0ec, 0x00c0, 0x1962,
-+ 0x7c20, 0x7d24, 0x7e30, 0x7f34, 0x7803, 0x0009, 0x7003, 0x0004,
-+ 0x0078, 0x1964, 0x1078, 0x1bd7, 0x017f, 0xd194, 0x0040, 0x196b,
-+ 0x8aff, 0x0040, 0x19a1, 0x6b28, 0x6a2c, 0x2400, 0x686e, 0xa31a,
-+ 0x2500, 0x6872, 0xa213, 0x6b2a, 0x6a2e, 0x0c7e, 0x7004, 0x2060,
-+ 0x6024, 0xd0f4, 0x00c0, 0x197e, 0x633a, 0x6236, 0x0c7f, 0x2400,
-+ 0x6910, 0xa100, 0x6812, 0x2500, 0x6914, 0xa101, 0x6816, 0x037f,
-+ 0x027f, 0x2600, 0x681e, 0x2700, 0x6822, 0x1078, 0x203f, 0x2a00,
-+ 0x6826, 0x2c00, 0x681a, 0x2800, 0x6832, 0x6850, 0xc0fd, 0x6852,
-+ 0x6808, 0x8001, 0x680a, 0x00c0, 0x19a7, 0x684c, 0xd0e4, 0x0040,
-+ 0x19a7, 0x7004, 0x2060, 0x2009, 0x0048, 0x1078, 0x775c, 0x7000,
-+ 0xa086, 0x0004, 0x0040, 0x1adb, 0x7003, 0x0000, 0x1078, 0x17c1,
-+ 0x0078, 0x1adb, 0x057e, 0x7d0c, 0xd5bc, 0x00c0, 0x19b9, 0x1078,
-+ 0xa57e, 0x057f, 0x1078, 0x1af4, 0x0f7e, 0x7004, 0x2078, 0x1078,
-+ 0x4963, 0x0040, 0x19c6, 0x7824, 0xc0f5, 0x7826, 0x0f7f, 0x682b,
-+ 0xffff, 0x682f, 0xffff, 0x6808, 0x8001, 0x680a, 0x697c, 0x6912,
-+ 0x6980, 0x6916, 0x0078, 0x1adb, 0x7004, 0x0c7e, 0x2060, 0x6024,
-+ 0x0c7f, 0xd0f4, 0x0040, 0x19e1, 0x6808, 0x8001, 0x680a, 0x0078,
-+ 0x19f5, 0x684c, 0xc0f5, 0x684e, 0x7814, 0xa005, 0x00c0, 0x19f9,
-+ 0x7003, 0x0000, 0x6808, 0x8001, 0x680a, 0x00c0, 0x19f5, 0x7004,
-+ 0x2060, 0x2009, 0x0048, 0x1078, 0x775c, 0x1078, 0x17c1, 0x0078,
-+ 0x1adb, 0x7814, 0x6910, 0xa102, 0x6812, 0x6914, 0xa183, 0x0000,
-+ 0x6816, 0x7814, 0x7908, 0xa18c, 0x0fff, 0xa192, 0x0841, 0x00c8,
-+ 0x18ef, 0xa188, 0x0007, 0x8114, 0x8214, 0x8214, 0xa10a, 0x8104,
-+ 0x8004, 0x8004, 0xa20a, 0x810b, 0x810b, 0x810b, 0x1078, 0x1b5e,
-+ 0x7803, 0x0004, 0x780f, 0xffff, 0x7803, 0x0001, 0x7804, 0xd0fc,
-+ 0x0040, 0x1a1e, 0x7803, 0x0002, 0x7803, 0x0004, 0x780f, 0x0076,
-+ 0x7004, 0x7007, 0x0000, 0x2060, 0x2009, 0x0048, 0x1078, 0x775c,
-+ 0x1078, 0x1b92, 0x0040, 0x19f5, 0x8001, 0x7002, 0xd194, 0x0040,
-+ 0x1a46, 0x7804, 0xd0fc, 0x00c0, 0x191b, 0x8aff, 0x0040, 0x1adb,
-+ 0x2009, 0x0001, 0x1078, 0x1855, 0x0078, 0x1adb, 0xa184, 0x0880,
-+ 0x00c0, 0x1a53, 0x8aff, 0x0040, 0x1adb, 0x2009, 0x0001, 0x1078,
-+ 0x1855, 0x0078, 0x1adb, 0x7803, 0x0004, 0x7003, 0x0000, 0xd1bc,
-+ 0x00c0, 0x1a93, 0x027e, 0x037e, 0x7808, 0xd0ec, 0x00c0, 0x1a66,
-+ 0x7803, 0x0009, 0x7003, 0x0004, 0x0078, 0x1a68, 0x1078, 0x1bd7,
-+ 0x6b28, 0x6a2c, 0x1078, 0x203f, 0x0d7e, 0x0f7e, 0x2d78, 0x2804,
-+ 0xac68, 0x6034, 0xd09c, 0x00c0, 0x1a83, 0x6808, 0x2008, 0xa31a,
-+ 0x680c, 0xa213, 0x7810, 0xa100, 0x7812, 0x690c, 0x7814, 0xa101,
-+ 0x7816, 0x0078, 0x1a8f, 0x6810, 0x2008, 0xa31a, 0x6814, 0xa213,
-+ 0x7810, 0xa100, 0x7812, 0x6914, 0x7814, 0xa101, 0x7816, 0x0f7f,
-+ 0x0d7f, 0x0078, 0x196d, 0x057e, 0x7d0c, 0x1078, 0xa57e, 0x057f,
-+ 0x1078, 0x1af4, 0x0f7e, 0x7004, 0x2078, 0x1078, 0x4963, 0x0040,
-+ 0x1aa4, 0x7824, 0xc0f5, 0x7826, 0x0f7f, 0x682b, 0xffff, 0x682f,
-+ 0xffff, 0x6808, 0x8001, 0x680a, 0x697c, 0x6912, 0x6980, 0x6916,
-+ 0x0078, 0x1adb, 0x7803, 0x0004, 0x7003, 0x0000, 0x7004, 0xa00d,
-+ 0x0040, 0x1ac5, 0x6808, 0x8001, 0x680a, 0x00c0, 0x1ac5, 0x7004,
-+ 0x2060, 0x2009, 0x0048, 0x1078, 0x775c, 0x1078, 0x17c1, 0x0078,
-+ 0x1adb, 0x7803, 0x0004, 0x7003, 0x0000, 0x7004, 0x2060, 0x6010,
-+ 0xa005, 0x0040, 0x1ac5, 0x2068, 0x6808, 0x8000, 0x680a, 0x6c28,
-+ 0x6b2c, 0x1078, 0x17e0, 0x017f, 0x007f, 0x127f, 0x007c, 0x127e,
-+ 0x2091, 0x2100, 0x7000, 0xa086, 0x0003, 0x00c0, 0x1af2, 0x700c,
-+ 0x7110, 0xa106, 0x0040, 0x1af2, 0x20e1, 0x9028, 0x700f, 0xa8ed,
-+ 0x7013, 0xa8ed, 0x127f, 0x007c, 0x0c7e, 0x1078, 0x1b22, 0x20e1,
-+ 0x9028, 0x700c, 0x7110, 0xa106, 0x0040, 0x1b19, 0x2104, 0xa005,
-+ 0x0040, 0x1b08, 0x2060, 0x6010, 0x2060, 0x6008, 0x8001, 0x600a,
-+ 0xa188, 0x0003, 0xa182, 0xa908, 0x0048, 0x1b10, 0x2009, 0xa8ed,
-+ 0x7112, 0x700c, 0xa106, 0x00c0, 0x1af9, 0x2011, 0x0008, 0x0078,
-+ 0x1af9, 0x2001, 0x015d, 0x2003, 0x0000, 0x2001, 0x0138, 0x2202,
-+ 0x0c7f, 0x007c, 0x2001, 0x0138, 0x2014, 0x2003, 0x0000, 0x2021,
-+ 0xb015, 0x2001, 0x0141, 0x201c, 0xd3dc, 0x00c0, 0x1b3f, 0x2001,
-+ 0x0109, 0x201c, 0xa39c, 0x0048, 0x00c0, 0x1b3f, 0x2001, 0x0111,
-+ 0x201c, 0x83ff, 0x00c0, 0x1b3f, 0x8421, 0x00c0, 0x1b29, 0x007c,
-+ 0x2011, 0x0201, 0x2009, 0x003c, 0x2204, 0xa005, 0x00c0, 0x1b4c,
-+ 0x8109, 0x00c0, 0x1b44, 0x007c, 0x007c, 0x1078, 0x1b40, 0x0040,
-+ 0x1b55, 0x780c, 0xd0a4, 0x0040, 0x1b5b, 0x1078, 0x1af4, 0xa085,
-+ 0x0001, 0x0078, 0x1b5d, 0x1078, 0x1b92, 0x007c, 0x0e7e, 0x2071,
-+ 0x0200, 0x7808, 0xa084, 0xf000, 0xa10d, 0x1078, 0x1b22, 0x2019,
-+ 0x5000, 0x8319, 0x0040, 0x1b7c, 0x2001, 0xa908, 0x2004, 0xa086,
-+ 0x0000, 0x0040, 0x1b7c, 0x2001, 0x0021, 0xd0fc, 0x0040, 0x1b69,
-+ 0x1078, 0x1eaa, 0x0078, 0x1b67, 0x20e1, 0x7000, 0x7324, 0x7420,
-+ 0x7028, 0x7028, 0x7426, 0x7037, 0x0001, 0x810f, 0x712e, 0x702f,
-+ 0x0100, 0x7037, 0x0008, 0x7326, 0x7422, 0x2001, 0x0138, 0x2202,
-+ 0x0e7f, 0x007c, 0x027e, 0x2001, 0x015d, 0x2001, 0x0000, 0x7908,
-+ 0xa18c, 0x0fff, 0xa182, 0x0ffd, 0x0048, 0x1ba0, 0x2009, 0x0000,
-+ 0xa190, 0x0007, 0xa294, 0x1ff8, 0x8214, 0x8214, 0x8214, 0x2001,
-+ 0x020a, 0x82ff, 0x0040, 0x1bb5, 0x20e1, 0x6000, 0x200c, 0x200c,
-+ 0x200c, 0x200c, 0x8211, 0x00c0, 0x1bae, 0x20e1, 0x7000, 0x200c,
-+ 0x200c, 0x7003, 0x0000, 0x20e1, 0x6000, 0x2001, 0x0208, 0x200c,
-+ 0x2001, 0x0209, 0x2004, 0xa106, 0x0040, 0x1bd4, 0x1078, 0x1b40,
-+ 0x0040, 0x1bd2, 0x7908, 0xd1ec, 0x00c0, 0x1bd4, 0x790c, 0xd1a4,
-+ 0x0040, 0x1b97, 0x1078, 0x1af4, 0xa006, 0x027f, 0x007c, 0x7c20,
-+ 0x7d24, 0x7e30, 0x7f34, 0x700c, 0x7110, 0xa106, 0x0040, 0x1c69,
-+ 0x7004, 0x017e, 0x210c, 0xa106, 0x017f, 0x0040, 0x1c69, 0x0d7e,
-+ 0x0c7e, 0x216c, 0x2d00, 0xa005, 0x0040, 0x1c67, 0x681c, 0xa086,
-+ 0x0008, 0x0040, 0x1c67, 0x6824, 0xd0d4, 0x00c0, 0x1c67, 0x6810,
-+ 0x2068, 0x6850, 0xd0fc, 0x0040, 0x1c29, 0x8108, 0x2104, 0x6b2c,
-+ 0xa306, 0x00c0, 0x1c67, 0x8108, 0x2104, 0x6a28, 0xa206, 0x00c0,
-+ 0x1c67, 0x6850, 0xc0fc, 0xc0f5, 0x6852, 0x686c, 0x7822, 0x6870,
-+ 0x7826, 0x681c, 0x7832, 0x6820, 0x7836, 0x6818, 0x2060, 0x6034,
-+ 0xd09c, 0x0040, 0x1c24, 0x6830, 0x2004, 0xac68, 0x6808, 0x783a,
-+ 0x680c, 0x783e, 0x0078, 0x1c65, 0xa006, 0x783a, 0x783e, 0x0078,
-+ 0x1c65, 0x8108, 0x2104, 0xa005, 0x00c0, 0x1c67, 0x6b2c, 0xa306,
-+ 0x00c0, 0x1c67, 0x8108, 0x2104, 0xa005, 0x00c0, 0x1c67, 0x6a28,
-+ 0xa206, 0x00c0, 0x1c67, 0x6850, 0xc0f5, 0x6852, 0x6830, 0x2004,
-+ 0x6918, 0xa160, 0xa180, 0x000d, 0x2004, 0xd09c, 0x00c0, 0x1c57,
-+ 0x6008, 0x7822, 0x686e, 0x600c, 0x7826, 0x6872, 0x6000, 0x7832,
-+ 0x6004, 0x7836, 0xa006, 0x783a, 0x783e, 0x0078, 0x1c65, 0x6010,
-+ 0x7822, 0x686e, 0x6014, 0x7826, 0x6872, 0x6000, 0x7832, 0x6004,
-+ 0x7836, 0x6008, 0x783a, 0x600c, 0x783e, 0x7803, 0x0011, 0x0c7f,
-+ 0x0d7f, 0x007c, 0x0f7e, 0x0e7e, 0x017e, 0x027e, 0x2071, 0xa8e7,
-+ 0x2079, 0x0030, 0x2011, 0x0050, 0x7000, 0xa086, 0x0000, 0x0040,
-+ 0x1c92, 0x8211, 0x0040, 0x1c90, 0x2001, 0x0005, 0x2004, 0xd08c,
-+ 0x0040, 0x1c79, 0x7904, 0xa18c, 0x0780, 0x017e, 0x1078, 0x1913,
-+ 0x017f, 0x81ff, 0x00c0, 0x1c90, 0x2011, 0x0050, 0x0078, 0x1c74,
-+ 0xa085, 0x0001, 0x027f, 0x017f, 0x0e7f, 0x0f7f, 0x007c, 0x7803,
-+ 0x0004, 0x2009, 0x0064, 0x7804, 0xd0ac, 0x0040, 0x1ce8, 0x8109,
-+ 0x00c0, 0x1c9b, 0x2009, 0x0100, 0x210c, 0xa18a, 0x0003, 0x1048,
-+ 0x1332, 0x1078, 0x1fca, 0x0e7e, 0x0f7e, 0x2071, 0xa8d6, 0x2079,
-+ 0x0010, 0x7004, 0xa086, 0x0000, 0x0040, 0x1ce0, 0x7800, 0x007e,
-+ 0x7820, 0x007e, 0x7830, 0x007e, 0x7834, 0x007e, 0x7838, 0x007e,
-+ 0x783c, 0x007e, 0x7803, 0x0004, 0x7823, 0x0000, 0x0005, 0x0005,
-+ 0x2079, 0x0030, 0x7804, 0xd0ac, 0x10c0, 0x1332, 0x2079, 0x0010,
-+ 0x007f, 0x783e, 0x007f, 0x783a, 0x007f, 0x7836, 0x007f, 0x7832,
-+ 0x007f, 0x7822, 0x007f, 0x7802, 0x0f7f, 0x0e7f, 0x0078, 0x1ce6,
-+ 0x0f7f, 0x0e7f, 0x7804, 0xd0ac, 0x10c0, 0x1332, 0x1078, 0x639b,
-+ 0x007c, 0x0e7e, 0x2071, 0xa908, 0x7003, 0x0000, 0x0e7f, 0x007c,
-+ 0x0d7e, 0xa280, 0x0004, 0x206c, 0x694c, 0xd1dc, 0x00c0, 0x1d6b,
-+ 0x6934, 0xa184, 0x0007, 0x0079, 0x1cfd, 0x1d05, 0x1d56, 0x1d05,
-+ 0x1d05, 0x1d05, 0x1d3b, 0x1d18, 0x1d07, 0x1078, 0x1332, 0x684c,
-+ 0xd0b4, 0x0040, 0x1e79, 0x6860, 0x682e, 0x6816, 0x685c, 0x682a,
-+ 0x6812, 0x687c, 0x680a, 0x6880, 0x680e, 0x6958, 0x0078, 0x1d5e,
-+ 0x6834, 0xa084, 0x00ff, 0xa086, 0x001e, 0x00c0, 0x1d05, 0x684c,
-+ 0xd0b4, 0x0040, 0x1e79, 0x6860, 0x682e, 0x6816, 0x685c, 0x682a,
-+ 0x6812, 0x687c, 0x680a, 0x6880, 0x680e, 0x6804, 0x681a, 0xa080,
-+ 0x000d, 0x2004, 0xa084, 0x000f, 0xa080, 0x206a, 0x2004, 0x6832,
-+ 0x6958, 0x0078, 0x1d67, 0xa18c, 0x00ff, 0xa186, 0x0015, 0x00c0,
-+ 0x1d6b, 0x684c, 0xd0b4, 0x0040, 0x1e79, 0x6804, 0x681a, 0xa080,
-+ 0x000d, 0x2004, 0xa084, 0x000f, 0xa080, 0x206a, 0x2004, 0x6832,
-+ 0x6958, 0xa006, 0x682e, 0x682a, 0x0078, 0x1d67, 0x684c, 0xd0b4,
-+ 0x0040, 0x18ed, 0x6958, 0xa006, 0x682e, 0x682a, 0x2d00, 0x681a,
-+ 0x6834, 0xa084, 0x000f, 0xa080, 0x206a, 0x2004, 0x6832, 0x6926,
-+ 0x684c, 0xc0dd, 0x684e, 0x0d7f, 0x007c, 0x0f7e, 0x2079, 0x0020,
-+ 0x7804, 0xd0fc, 0x10c0, 0x1eaa, 0x0e7e, 0x0d7e, 0x2071, 0xa908,
-+ 0x7000, 0xa005, 0x00c0, 0x1df0, 0x0c7e, 0x7206, 0xa280, 0x0004,
-+ 0x205c, 0x7004, 0x2068, 0x7803, 0x0004, 0x6818, 0x0d7e, 0x2068,
-+ 0x686c, 0x7812, 0x6890, 0x0f7e, 0x20e1, 0x9040, 0x2079, 0x0200,
-+ 0x781a, 0x2079, 0x0100, 0x8004, 0x78d6, 0x0f7f, 0x0d7f, 0x2b68,
-+ 0x6824, 0x2050, 0x6818, 0x2060, 0x6830, 0x2040, 0x6034, 0xa0cc,
-+ 0x000f, 0x6908, 0x2001, 0x04fd, 0x2004, 0xa086, 0x0007, 0x0040,
-+ 0x1db2, 0xa184, 0x0007, 0x0040, 0x1db2, 0x017e, 0x2009, 0x0008,
-+ 0xa102, 0x017f, 0xa108, 0x791a, 0x7116, 0x701e, 0x680c, 0xa081,
-+ 0x0000, 0x781e, 0x701a, 0xa006, 0x700e, 0x7012, 0x7004, 0x692c,
-+ 0x6814, 0xa106, 0x00c0, 0x1dc9, 0x6928, 0x6810, 0xa106, 0x0040,
-+ 0x1dd6, 0x037e, 0x047e, 0x6b14, 0x6c10, 0x1078, 0x208a, 0x047f,
-+ 0x037f, 0x0040, 0x1dd6, 0x0c7f, 0x0078, 0x1df0, 0x8aff, 0x00c0,
-+ 0x1dde, 0x0c7f, 0xa085, 0x0001, 0x0078, 0x1df0, 0x127e, 0x2091,
-+ 0x8000, 0x2079, 0x0020, 0x2009, 0x0001, 0x1078, 0x1df4, 0x0040,
-+ 0x1ded, 0x2009, 0x0001, 0x1078, 0x1df4, 0x127f, 0x0c7f, 0xa006,
-+ 0x0d7f, 0x0e7f, 0x0f7f, 0x007c, 0x077e, 0x067e, 0x057e, 0x047e,
-+ 0x037e, 0x027e, 0x8aff, 0x0040, 0x1e72, 0x700c, 0x7214, 0xa23a,
-+ 0x7010, 0x7218, 0xa203, 0x0048, 0x1e71, 0xa705, 0x0040, 0x1e71,
-+ 0xa03e, 0x2730, 0x6850, 0xd0fc, 0x00c0, 0x1e24, 0x0d7e, 0x2804,
-+ 0xac68, 0x2900, 0x0079, 0x1e14, 0x1e53, 0x1e34, 0x1e34, 0x1e53,
-+ 0x1e53, 0x1e4b, 0x1e53, 0x1e34, 0x1e53, 0x1e3a, 0x1e3a, 0x1e53,
-+ 0x1e53, 0x1e53, 0x1e42, 0x1e3a, 0xc0fc, 0x6852, 0x6b6c, 0x6a70,
-+ 0x6d1c, 0x6c20, 0xd99c, 0x0040, 0x1e57, 0x0d7e, 0x2804, 0xac68,
-+ 0x6f08, 0x6e0c, 0x0078, 0x1e56, 0x6b08, 0x6a0c, 0x6d00, 0x6c04,
-+ 0x0078, 0x1e56, 0x6b10, 0x6a14, 0x6d00, 0x6c04, 0x6f08, 0x6e0c,
-+ 0x0078, 0x1e56, 0x0d7f, 0x0d7e, 0x6834, 0xa084, 0x00ff, 0xa086,
-+ 0x001e, 0x00c0, 0x1e53, 0x0d7f, 0x1078, 0x2026, 0x00c0, 0x1dfa,
-+ 0xa00e, 0x0078, 0x1e72, 0x0d7f, 0x1078, 0x1332, 0x0d7f, 0x7b22,
-+ 0x7a26, 0x7d32, 0x7c36, 0x7f3a, 0x7e3e, 0x7902, 0x7000, 0x8000,
-+ 0x7002, 0x6828, 0xa300, 0x682a, 0x682c, 0xa201, 0x682e, 0x700c,
-+ 0xa300, 0x700e, 0x7010, 0xa201, 0x7012, 0x1078, 0x2026, 0x0078,
-+ 0x1e72, 0xa006, 0x027f, 0x037f, 0x047f, 0x057f, 0x067f, 0x077f,
-+ 0x007c, 0x1078, 0x1332, 0x027e, 0x2001, 0x0105, 0x2003, 0x0010,
-+ 0x20e1, 0x9040, 0x7803, 0x0004, 0x7003, 0x0000, 0x7004, 0x2060,
-+ 0x0d7e, 0x6010, 0x2068, 0x1078, 0x8d06, 0x0040, 0x1e92, 0x6850,
-+ 0xc0bd, 0x6852, 0x0d7f, 0x0c7e, 0x1078, 0x8a01, 0x0c7f, 0x2001,
-+ 0xa8c0, 0x2004, 0xac06, 0x00c0, 0x1ea7, 0x20e1, 0x9040, 0x1078,
-+ 0x738a, 0x2011, 0x0000, 0x1078, 0x70ea, 0x1078, 0x639b, 0x027f,
-+ 0x0078, 0x1f76, 0x127e, 0x2091, 0x2200, 0x007e, 0x017e, 0x0f7e,
-+ 0x0e7e, 0x0d7e, 0x0c7e, 0x2079, 0x0020, 0x2071, 0xa908, 0x2b68,
-+ 0x6818, 0x2060, 0x7904, 0x7803, 0x0002, 0xa184, 0x0700, 0x00c0,
-+ 0x1e7b, 0x7000, 0x0079, 0x1ec4, 0x1f76, 0x1ec8, 0x1f43, 0x1f74,
-+ 0x8001, 0x7002, 0xd19c, 0x00c0, 0x1edc, 0x8aff, 0x0040, 0x1efb,
-+ 0x2009, 0x0001, 0x1078, 0x1df4, 0x0040, 0x1f76, 0x2009, 0x0001,
-+ 0x1078, 0x1df4, 0x0078, 0x1f76, 0x7803, 0x0004, 0xd194, 0x0040,
-+ 0x1eec, 0x6850, 0xc0fc, 0x6852, 0x8aff, 0x00c0, 0x1ef1, 0x684c,
-+ 0xc0f5, 0x684e, 0x0078, 0x1ef1, 0x1078, 0x203f, 0x6850, 0xc0fd,
-+ 0x6852, 0x2a00, 0x6826, 0x2c00, 0x681a, 0x2800, 0x6832, 0x7003,
-+ 0x0000, 0x0078, 0x1f76, 0x711c, 0x81ff, 0x0040, 0x1f11, 0x7918,
-+ 0x7922, 0x7827, 0x0000, 0x7803, 0x0001, 0x7000, 0x8000, 0x7002,
-+ 0x700c, 0xa100, 0x700e, 0x7010, 0xa081, 0x0000, 0x7012, 0x0078,
-+ 0x1f76, 0x0f7e, 0x027e, 0x781c, 0x007e, 0x7818, 0x007e, 0x2079,
-+ 0x0100, 0x7a14, 0xa284, 0x0004, 0xa085, 0x0012, 0x7816, 0x037e,
-+ 0x2019, 0x1000, 0x8319, 0x1040, 0x1332, 0x7820, 0xd0bc, 0x00c0,
-+ 0x1f22, 0x037f, 0x79c8, 0x007f, 0xa102, 0x017f, 0x007e, 0x017e,
-+ 0x79c4, 0x007f, 0xa103, 0x78c6, 0x007f, 0x78ca, 0xa284, 0x0004,
-+ 0xa085, 0x0012, 0x7816, 0x027f, 0x0f7f, 0x7803, 0x0008, 0x7003,
-+ 0x0000, 0x0078, 0x1f76, 0x8001, 0x7002, 0xd194, 0x0040, 0x1f58,
-+ 0x7804, 0xd0fc, 0x00c0, 0x1eba, 0xd19c, 0x00c0, 0x1f72, 0x8aff,
-+ 0x0040, 0x1f76, 0x2009, 0x0001, 0x1078, 0x1df4, 0x0078, 0x1f76,
-+ 0x027e, 0x037e, 0x6b28, 0x6a2c, 0x1078, 0x203f, 0x0d7e, 0x2804,
-+ 0xac68, 0x6034, 0xd09c, 0x00c0, 0x1f6b, 0x6808, 0xa31a, 0x680c,
-+ 0xa213, 0x0078, 0x1f6f, 0x6810, 0xa31a, 0x6814, 0xa213, 0x0d7f,
-+ 0x0078, 0x1eec, 0x0078, 0x1eec, 0x1078, 0x1332, 0x0c7f, 0x0d7f,
-+ 0x0e7f, 0x0f7f, 0x017f, 0x007f, 0x127f, 0x007c, 0x0f7e, 0x0e7e,
-+ 0x2071, 0xa908, 0x7000, 0xa086, 0x0000, 0x0040, 0x1fc7, 0x2079,
-+ 0x0020, 0x017e, 0x2009, 0x0207, 0x210c, 0xd194, 0x0040, 0x1fa4,
-+ 0x2009, 0x020c, 0x210c, 0xa184, 0x0003, 0x0040, 0x1fa4, 0x1078,
-+ 0xa5d2, 0x2001, 0x0133, 0x2004, 0xa005, 0x1040, 0x1332, 0x20e1,
-+ 0x9040, 0x2001, 0x020c, 0x2102, 0x2009, 0x0206, 0x2104, 0x2009,
-+ 0x0203, 0x210c, 0xa106, 0x00c0, 0x1faf, 0x20e1, 0x9040, 0x7804,
-+ 0xd0fc, 0x0040, 0x1f8a, 0x1078, 0x1eaa, 0x7000, 0xa086, 0x0000,
-+ 0x00c0, 0x1f8a, 0x017f, 0x7803, 0x0004, 0x7804, 0xd0ac, 0x00c0,
-+ 0x1fbd, 0x20e1, 0x9040, 0x7803, 0x0002, 0x7003, 0x0000, 0x0e7f,
-+ 0x0f7f, 0x007c, 0x027e, 0x0c7e, 0x0d7e, 0x0e7e, 0x0f7e, 0x2071,
-+ 0xa908, 0x2079, 0x0020, 0x7000, 0xa086, 0x0000, 0x0040, 0x2003,
-+ 0x7004, 0x2060, 0x6010, 0x2068, 0x1078, 0x8d06, 0x0040, 0x1fed,
-+ 0x6850, 0xc0b5, 0x6852, 0x680c, 0x7a1c, 0xa206, 0x00c0, 0x1fed,
-+ 0x6808, 0x7a18, 0xa206, 0x0040, 0x2009, 0x2001, 0x0105, 0x2003,
-+ 0x0010, 0x20e1, 0x9040, 0x7803, 0x0004, 0x7003, 0x0000, 0x7004,
-+ 0x2060, 0x1078, 0x8a01, 0x20e1, 0x9040, 0x1078, 0x738a, 0x2011,
-+ 0x0000, 0x1078, 0x70ea, 0x0f7f, 0x0e7f, 0x0d7f, 0x0c7f, 0x027f,
-+ 0x007c, 0x6810, 0x6a14, 0xa205, 0x00c0, 0x1fed, 0x684c, 0xc0dc,
-+ 0x684e, 0x2c10, 0x1078, 0x1cf0, 0x2001, 0x0105, 0x2003, 0x0010,
-+ 0x20e1, 0x9040, 0x7803, 0x0004, 0x7003, 0x0000, 0x2069, 0xa8b1,
-+ 0x6833, 0x0000, 0x683f, 0x0000, 0x0078, 0x2003, 0x8840, 0x2804,
-+ 0xa005, 0x00c0, 0x203a, 0x6004, 0xa005, 0x0040, 0x203c, 0x681a,
-+ 0x2060, 0x6034, 0xa084, 0x000f, 0xa080, 0x206a, 0x2044, 0x88ff,
-+ 0x1040, 0x1332, 0x8a51, 0x007c, 0x2051, 0x0000, 0x007c, 0x8a50,
-+ 0x8841, 0x2804, 0xa005, 0x00c0, 0x2059, 0x2c00, 0xad06, 0x0040,
-+ 0x204e, 0x6000, 0xa005, 0x00c0, 0x204e, 0x2d00, 0x2060, 0x681a,
-+ 0x6034, 0xa084, 0x000f, 0xa080, 0x207a, 0x2044, 0x88ff, 0x1040,
-+ 0x1332, 0x007c, 0x0000, 0x0011, 0x0015, 0x0019, 0x001d, 0x0021,
-+ 0x0025, 0x0029, 0x0000, 0x000f, 0x0015, 0x001b, 0x0021, 0x0027,
-+ 0x0000, 0x0000, 0x0000, 0x205f, 0x205b, 0x0000, 0x0000, 0x2069,
-+ 0x0000, 0x205f, 0x0000, 0x2066, 0x2063, 0x0000, 0x0000, 0x0000,
-+ 0x2069, 0x2066, 0x0000, 0x2061, 0x2061, 0x0000, 0x0000, 0x2069,
-+ 0x0000, 0x2061, 0x0000, 0x2067, 0x2067, 0x0000, 0x0000, 0x0000,
-+ 0x2069, 0x2067, 0x0a7e, 0x097e, 0x087e, 0x6b2e, 0x6c2a, 0x6858,
-+ 0xa055, 0x0040, 0x212d, 0x2d60, 0x6034, 0xa0cc, 0x000f, 0xa9c0,
-+ 0x206a, 0xa986, 0x0007, 0x0040, 0x20a5, 0xa986, 0x000e, 0x0040,
-+ 0x20a5, 0xa986, 0x000f, 0x00c0, 0x20a9, 0x605c, 0xa422, 0x6060,
-+ 0xa31a, 0x2804, 0xa045, 0x00c0, 0x20b7, 0x0050, 0x20b1, 0x0078,
-+ 0x212d, 0x6004, 0xa065, 0x0040, 0x212d, 0x0078, 0x2094, 0x2804,
-+ 0xa005, 0x0040, 0x20d5, 0xac68, 0xd99c, 0x00c0, 0x20c5, 0x6808,
-+ 0xa422, 0x680c, 0xa31b, 0x0078, 0x20c9, 0x6810, 0xa422, 0x6814,
-+ 0xa31b, 0x0048, 0x20f4, 0x2300, 0xa405, 0x0040, 0x20db, 0x8a51,
-+ 0x0040, 0x212d, 0x8840, 0x0078, 0x20b7, 0x6004, 0xa065, 0x0040,
-+ 0x212d, 0x0078, 0x2094, 0x8a51, 0x0040, 0x212d, 0x8840, 0x2804,
-+ 0xa005, 0x00c0, 0x20ee, 0x6004, 0xa065, 0x0040, 0x212d, 0x6034,
-+ 0xa0cc, 0x000f, 0xa9c0, 0x206a, 0x2804, 0x2040, 0x2b68, 0x6850,
-+ 0xc0fc, 0x6852, 0x0078, 0x2121, 0x8422, 0x8420, 0x831a, 0xa399,
-+ 0x0000, 0x0d7e, 0x2b68, 0x6c6e, 0x6b72, 0x0d7f, 0xd99c, 0x00c0,
-+ 0x210f, 0x6908, 0x2400, 0xa122, 0x690c, 0x2300, 0xa11b, 0x1048,
-+ 0x1332, 0x6800, 0xa420, 0x6804, 0xa319, 0x0078, 0x211b, 0x6910,
-+ 0x2400, 0xa122, 0x6914, 0x2300, 0xa11b, 0x1048, 0x1332, 0x6800,
-+ 0xa420, 0x6804, 0xa319, 0x2b68, 0x6c1e, 0x6b22, 0x6850, 0xc0fd,
-+ 0x6852, 0x2c00, 0x681a, 0x2800, 0x6832, 0x2a00, 0x6826, 0x007f,
-+ 0x007f, 0x007f, 0xa006, 0x0078, 0x2132, 0x087f, 0x097f, 0x0a7f,
-+ 0xa085, 0x0001, 0x007c, 0x2001, 0x0005, 0x2004, 0xa084, 0x0007,
-+ 0x0079, 0x213a, 0x2142, 0x2143, 0x2146, 0x2149, 0x214e, 0x2151,
-+ 0x2156, 0x215b, 0x007c, 0x1078, 0x1eaa, 0x007c, 0x1078, 0x1913,
-+ 0x007c, 0x1078, 0x1913, 0x1078, 0x1eaa, 0x007c, 0x1078, 0x14be,
-+ 0x007c, 0x1078, 0x1eaa, 0x1078, 0x14be, 0x007c, 0x1078, 0x1913,
-+ 0x1078, 0x14be, 0x007c, 0x1078, 0x1913, 0x1078, 0x1eaa, 0x1078,
-+ 0x14be, 0x007c, 0x127e, 0x2091, 0x2300, 0x2079, 0x0200, 0x2071,
-+ 0xab80, 0x2069, 0xa600, 0x2009, 0x0004, 0x7912, 0x7817, 0x0004,
-+ 0x1078, 0x251f, 0x781b, 0x0002, 0x20e1, 0x8700, 0x127f, 0x007c,
-+ 0x127e, 0x2091, 0x2300, 0x781c, 0xa084, 0x0007, 0x0079, 0x2180,
-+ 0x21a4, 0x2188, 0x218c, 0x2190, 0x2196, 0x219a, 0x219e, 0x21a2,
-+ 0x1078, 0x548e, 0x0078, 0x21a4, 0x1078, 0x54da, 0x0078, 0x21a4,
-+ 0x1078, 0x548e, 0x1078, 0x54da, 0x0078, 0x21a4, 0x1078, 0x21a6,
-+ 0x0078, 0x21a4, 0x1078, 0x21a6, 0x0078, 0x21a4, 0x1078, 0x21a6,
-+ 0x0078, 0x21a4, 0x1078, 0x21a6, 0x127f, 0x007c, 0x007e, 0x017e,
-+ 0x027e, 0x1078, 0xa5d2, 0x7930, 0xa184, 0x0003, 0x0040, 0x21c9,
-+ 0x2001, 0xa8c0, 0x2004, 0xa005, 0x0040, 0x21c5, 0x2001, 0x0133,
-+ 0x2004, 0xa005, 0x1040, 0x1332, 0x0c7e, 0x2001, 0xa8c0, 0x2064,
-+ 0x1078, 0x8a01, 0x0c7f, 0x0078, 0x21f2, 0x20e1, 0x9040, 0x0078,
-+ 0x21f2, 0xa184, 0x0030, 0x0040, 0x21da, 0x6a00, 0xa286, 0x0003,
-+ 0x00c0, 0x21d4, 0x0078, 0x21d6, 0x1078, 0x4224, 0x20e1, 0x9010,
-+ 0x0078, 0x21f2, 0xa184, 0x00c0, 0x0040, 0x21ec, 0x0e7e, 0x037e,
-+ 0x047e, 0x057e, 0x2071, 0xa8e7, 0x1078, 0x1af4, 0x057f, 0x047f,
-+ 0x037f, 0x0e7f, 0x0078, 0x21f2, 0xa184, 0x0300, 0x0040, 0x21f2,
-+ 0x20e1, 0x9020, 0x7932, 0x027f, 0x017f, 0x007f, 0x007c, 0x017e,
-+ 0x0e7e, 0x0f7e, 0x2071, 0xa600, 0x7128, 0x2001, 0xa890, 0x2102,
-+ 0x2001, 0xa898, 0x2102, 0xa182, 0x0211, 0x00c8, 0x220b, 0x2009,
-+ 0x0008, 0x0078, 0x2235, 0xa182, 0x0259, 0x00c8, 0x2213, 0x2009,
-+ 0x0007, 0x0078, 0x2235, 0xa182, 0x02c1, 0x00c8, 0x221b, 0x2009,
-+ 0x0006, 0x0078, 0x2235, 0xa182, 0x0349, 0x00c8, 0x2223, 0x2009,
-+ 0x0005, 0x0078, 0x2235, 0xa182, 0x0421, 0x00c8, 0x222b, 0x2009,
-+ 0x0004, 0x0078, 0x2235, 0xa182, 0x0581, 0x00c8, 0x2233, 0x2009,
-+ 0x0003, 0x0078, 0x2235, 0x2009, 0x0002, 0x2079, 0x0200, 0x7912,
-+ 0x7817, 0x0004, 0x1078, 0x251f, 0x0f7f, 0x0e7f, 0x017f, 0x007c,
-+ 0x127e, 0x2091, 0x2200, 0x2061, 0x0100, 0x2071, 0xa600, 0x6024,
-+ 0x6026, 0x6053, 0x0030, 0x6033, 0x00ef, 0x60e7, 0x0000, 0x60eb,
-+ 0x00ef, 0x60e3, 0x0008, 0x604b, 0xf7f7, 0x6043, 0x0000, 0x602f,
-+ 0x0080, 0x602f, 0x0000, 0x6007, 0x0eaf, 0x600f, 0x00ff, 0x602b,
-+ 0x002f, 0x127f, 0x007c, 0x2001, 0xa630, 0x2003, 0x0000, 0x2001,
-+ 0xa62f, 0x2003, 0x0001, 0x007c, 0x127e, 0x2091, 0x2200, 0x007e,
-+ 0x017e, 0x027e, 0x6124, 0xa184, 0x002c, 0x00c0, 0x227b, 0xa184,
-+ 0x0007, 0x0079, 0x2281, 0xa195, 0x0004, 0xa284, 0x0007, 0x0079,
-+ 0x2281, 0x22ad, 0x2289, 0x228d, 0x2291, 0x2297, 0x229b, 0x22a1,
-+ 0x22a7, 0x1078, 0x5c56, 0x0078, 0x22ad, 0x1078, 0x5d45, 0x0078,
-+ 0x22ad, 0x1078, 0x5d45, 0x1078, 0x5c56, 0x0078, 0x22ad, 0x1078,
-+ 0x22b2, 0x0078, 0x22ad, 0x1078, 0x5c56, 0x1078, 0x22b2, 0x0078,
-+ 0x22ad, 0x1078, 0x5d45, 0x1078, 0x22b2, 0x0078, 0x22ad, 0x1078,
-+ 0x5d45, 0x1078, 0x5c56, 0x1078, 0x22b2, 0x027f, 0x017f, 0x007f,
-+ 0x127f, 0x007c, 0x6124, 0xd1ac, 0x0040, 0x23ac, 0x017e, 0x047e,
-+ 0x0c7e, 0x644c, 0xa486, 0xf0f0, 0x00c0, 0x22c5, 0x2061, 0x0100,
-+ 0x644a, 0x6043, 0x0090, 0x6043, 0x0010, 0x74c6, 0xa48c, 0xff00,
-+ 0x7034, 0xd084, 0x0040, 0x22dd, 0xa186, 0xf800, 0x00c0, 0x22dd,
-+ 0x703c, 0xd084, 0x00c0, 0x22dd, 0xc085, 0x703e, 0x037e, 0x2418,
-+ 0x2011, 0x8016, 0x1078, 0x361b, 0x037f, 0xa196, 0xff00, 0x0040,
-+ 0x231f, 0x6030, 0xa084, 0x00ff, 0x810f, 0xa116, 0x0040, 0x231f,
-+ 0x7130, 0xd184, 0x00c0, 0x231f, 0x2011, 0xa653, 0x2214, 0xd2ec,
-+ 0x0040, 0x22fa, 0xc18d, 0x7132, 0x2011, 0xa653, 0x2214, 0xd2ac,
-+ 0x00c0, 0x231f, 0x6240, 0xa294, 0x0010, 0x0040, 0x2306, 0x6248,
-+ 0xa294, 0xff00, 0xa296, 0xff00, 0x0040, 0x231f, 0x7030, 0xd08c,
-+ 0x0040, 0x2371, 0x7034, 0xd08c, 0x00c0, 0x2316, 0x2001, 0xa60c,
-+ 0x200c, 0xd1ac, 0x00c0, 0x2371, 0xc1ad, 0x2102, 0x037e, 0x73c4,
-+ 0x2011, 0x8013, 0x1078, 0x361b, 0x037f, 0x0078, 0x2371, 0x7034,
-+ 0xd08c, 0x00c0, 0x232b, 0x2001, 0xa60c, 0x200c, 0xd1ac, 0x00c0,
-+ 0x2371, 0xc1ad, 0x2102, 0x037e, 0x73c4, 0x2011, 0x8013, 0x1078,
-+ 0x361b, 0x037f, 0x7130, 0xc185, 0x7132, 0x2011, 0xa653, 0x220c,
-+ 0xd1a4, 0x0040, 0x2355, 0x017e, 0x2009, 0x0001, 0x2011, 0x0100,
-+ 0x1078, 0x5bf1, 0x2019, 0x000e, 0x1078, 0xa195, 0xa484, 0x00ff,
-+ 0xa080, 0x29c0, 0x200c, 0xa18c, 0xff00, 0x810f, 0x8127, 0xa006,
-+ 0x2009, 0x000e, 0x1078, 0xa21d, 0x017f, 0xd1ac, 0x00c0, 0x2362,
-+ 0x017e, 0x2009, 0x0000, 0x2019, 0x0004, 0x1078, 0x284f, 0x017f,
-+ 0x0078, 0x2371, 0x157e, 0x20a9, 0x007f, 0x2009, 0x0000, 0x1078,
-+ 0x45c4, 0x00c0, 0x236d, 0x1078, 0x42f8, 0x8108, 0x00f0, 0x2367,
-+ 0x157f, 0x0c7f, 0x047f, 0x0f7e, 0x2079, 0xa8c4, 0x783c, 0xa086,
-+ 0x0000, 0x0040, 0x2383, 0x6027, 0x0004, 0x783f, 0x0000, 0x2079,
-+ 0x0140, 0x7803, 0x0000, 0x0f7f, 0x2011, 0x0003, 0x1078, 0x70e0,
-+ 0x2011, 0x0002, 0x1078, 0x70ea, 0x1078, 0x6fc4, 0x037e, 0x2019,
-+ 0x0000, 0x1078, 0x7058, 0x037f, 0x60e3, 0x0000, 0x017f, 0x2001,
-+ 0xa600, 0x2014, 0xa296, 0x0004, 0x00c0, 0x23a4, 0xd19c, 0x00c0,
-+ 0x23ac, 0x6228, 0xc29d, 0x622a, 0x2003, 0x0001, 0x2001, 0xa622,
-+ 0x2003, 0x0000, 0x6027, 0x0020, 0xd194, 0x0040, 0x2490, 0x0f7e,
-+ 0x2079, 0xa8c4, 0x783c, 0xa086, 0x0001, 0x00c0, 0x23d0, 0x017e,
-+ 0x6027, 0x0004, 0x783f, 0x0000, 0x2079, 0x0140, 0x7803, 0x1000,
-+ 0x7803, 0x0000, 0x2079, 0xa8b1, 0x7807, 0x0000, 0x7833, 0x0000,
-+ 0x1078, 0x62d1, 0x1078, 0x639b, 0x017f, 0x0f7f, 0x0078, 0x2490,
-+ 0x0f7f, 0x017e, 0x3900, 0xa082, 0xa9e3, 0x00c8, 0x23db, 0x017e,
-+ 0x1078, 0x747a, 0x017f, 0x6220, 0xd2b4, 0x0040, 0x2446, 0x1078,
-+ 0x5acb, 0x1078, 0x6e0f, 0x6027, 0x0004, 0x0f7e, 0x2019, 0xa8ba,
-+ 0x2304, 0xa07d, 0x0040, 0x241c, 0x7804, 0xa086, 0x0032, 0x00c0,
-+ 0x241c, 0x0d7e, 0x0c7e, 0x0e7e, 0x2069, 0x0140, 0x618c, 0x6288,
-+ 0x7818, 0x608e, 0x7808, 0x608a, 0x6043, 0x0002, 0x2001, 0x0003,
-+ 0x8001, 0x00c0, 0x2400, 0x6043, 0x0000, 0x6803, 0x1000, 0x6803,
-+ 0x0000, 0x618e, 0x628a, 0x1078, 0x61cd, 0x1078, 0x62d1, 0x7810,
-+ 0x2070, 0x7037, 0x0103, 0x2f60, 0x1078, 0x772d, 0x0e7f, 0x0c7f,
-+ 0x0d7f, 0x0f7f, 0x017f, 0x007c, 0x0f7f, 0x0d7e, 0x2069, 0x0140,
-+ 0x6804, 0xa084, 0x4000, 0x0040, 0x2429, 0x6803, 0x1000, 0x6803,
-+ 0x0000, 0x0d7f, 0x0c7e, 0x2061, 0xa8b1, 0x6028, 0xa09a, 0x00c8,
-+ 0x00c8, 0x2439, 0x8000, 0x602a, 0x0c7f, 0x1078, 0x6e01, 0x0078,
-+ 0x248f, 0x2019, 0xa8ba, 0x2304, 0xa065, 0x0040, 0x2443, 0x2009,
-+ 0x0027, 0x1078, 0x775c, 0x0c7f, 0x0078, 0x248f, 0xd2bc, 0x0040,
-+ 0x248f, 0x1078, 0x5ad8, 0x6017, 0x0010, 0x6027, 0x0004, 0x0d7e,
-+ 0x2069, 0x0140, 0x6804, 0xa084, 0x4000, 0x0040, 0x245b, 0x6803,
-+ 0x1000, 0x6803, 0x0000, 0x0d7f, 0x0c7e, 0x2061, 0xa8b1, 0x6044,
-+ 0xa09a, 0x00c8, 0x00c8, 0x247e, 0x8000, 0x6046, 0x603c, 0x0c7f,
-+ 0xa005, 0x0040, 0x248f, 0x2009, 0x07d0, 0x1078, 0x5ad0, 0xa080,
-+ 0x0007, 0x2004, 0xa086, 0x0006, 0x00c0, 0x247a, 0x6017, 0x0012,
-+ 0x0078, 0x248f, 0x6017, 0x0016, 0x0078, 0x248f, 0x037e, 0x2019,
-+ 0x0001, 0x1078, 0x7058, 0x037f, 0x2019, 0xa8c0, 0x2304, 0xa065,
-+ 0x0040, 0x248e, 0x2009, 0x004f, 0x1078, 0x775c, 0x0c7f, 0x017f,
-+ 0xd19c, 0x0040, 0x24e4, 0x7034, 0xd0ac, 0x00c0, 0x24c1, 0x017e,
-+ 0x157e, 0x6027, 0x0008, 0x602f, 0x0020, 0x20a9, 0x000a, 0x00f0,
-+ 0x249f, 0x602f, 0x0000, 0x6150, 0xa185, 0x1400, 0x6052, 0x20a9,
-+ 0x0320, 0x00e0, 0x24a9, 0x2091, 0x6000, 0x6020, 0xd09c, 0x00c0,
-+ 0x24b8, 0x157f, 0x6152, 0x017f, 0x6027, 0x0008, 0x0078, 0x24e4,
-+ 0x1078, 0x2577, 0x00f0, 0x24a9, 0x157f, 0x6152, 0x017f, 0x6027,
-+ 0x0008, 0x017e, 0x6028, 0xc09c, 0x602a, 0x2011, 0x0003, 0x1078,
-+ 0x70e0, 0x2011, 0x0002, 0x1078, 0x70ea, 0x1078, 0x6fc4, 0x037e,
-+ 0x2019, 0x0000, 0x1078, 0x7058, 0x037f, 0x60e3, 0x0000, 0x1078,
-+ 0xa5ad, 0x1078, 0xa5cb, 0x2001, 0xa600, 0x2003, 0x0004, 0x6027,
-+ 0x0008, 0x1078, 0x1246, 0x017f, 0xa18c, 0xffd0, 0x6126, 0x007c,
-+ 0x007e, 0x017e, 0x027e, 0x0e7e, 0x0f7e, 0x127e, 0x2091, 0x8000,
-+ 0x2071, 0xa600, 0x71bc, 0x70be, 0xa116, 0x0040, 0x2518, 0x81ff,
-+ 0x0040, 0x2500, 0x2011, 0x8011, 0x1078, 0x361b, 0x0078, 0x2518,
-+ 0x2011, 0x8012, 0x1078, 0x361b, 0x2001, 0xa672, 0x2004, 0xd0fc,
-+ 0x00c0, 0x2518, 0x037e, 0x0c7e, 0x1078, 0x6f9f, 0x2061, 0x0100,
-+ 0x2019, 0x0028, 0x2009, 0x0000, 0x1078, 0x284f, 0x0c7f, 0x037f,
-+ 0x127f, 0x0f7f, 0x0e7f, 0x027f, 0x017f, 0x007f, 0x007c, 0x0c7e,
-+ 0x0f7e, 0x007e, 0x027e, 0x2061, 0x0100, 0xa190, 0x253b, 0x2204,
-+ 0x60f2, 0x2011, 0x2548, 0x6000, 0xa082, 0x0003, 0x00c8, 0x2534,
-+ 0x2001, 0x00ff, 0x0078, 0x2535, 0x2204, 0x60ee, 0x027f, 0x007f,
-+ 0x0f7f, 0x0c7f, 0x007c, 0x0840, 0x0840, 0x0840, 0x0580, 0x0420,
-+ 0x0348, 0x02c0, 0x0258, 0x0210, 0x01a8, 0x01a8, 0x01a8, 0x01a8,
-+ 0x0140, 0x00f8, 0x00d0, 0x00b0, 0x00a0, 0x2028, 0xa18c, 0x00ff,
-+ 0x2130, 0xa094, 0xff00, 0x00c0, 0x2558, 0x81ff, 0x0040, 0x255c,
-+ 0x1078, 0x5761, 0x0078, 0x2563, 0xa080, 0x29c0, 0x200c, 0xa18c,
-+ 0xff00, 0x810f, 0xa006, 0x007c, 0xa080, 0x29c0, 0x200c, 0xa18c,
-+ 0x00ff, 0x007c, 0x0c7e, 0x2061, 0xa600, 0x6030, 0x0040, 0x2573,
-+ 0xc09d, 0x0078, 0x2574, 0xc09c, 0x6032, 0x0c7f, 0x007c, 0x007e,
-+ 0x157e, 0x0f7e, 0x2079, 0x0100, 0x20a9, 0x000a, 0x7854, 0xd08c,
-+ 0x00c0, 0x2584, 0x00f0, 0x257e, 0x0f7f, 0x157f, 0x007f, 0x007c,
-+ 0x0c7e, 0x007e, 0x2061, 0x0100, 0x6030, 0x007e, 0x6048, 0x007e,
-+ 0x60e4, 0x007e, 0x60e8, 0x007e, 0x6050, 0x007e, 0x60f0, 0x007e,
-+ 0x60ec, 0x007e, 0x600c, 0x007e, 0x6004, 0x007e, 0x6028, 0x007e,
-+ 0x60e0, 0x007e, 0x602f, 0x0100, 0x602f, 0x0000, 0x0005, 0x0005,
-+ 0x0005, 0x0005, 0x602f, 0x0040, 0x602f, 0x0000, 0x007f, 0x60e2,
-+ 0x007f, 0x602a, 0x007f, 0x6006, 0x007f, 0x600e, 0x007f, 0x60ee,
-+ 0x007f, 0x60f2, 0x007f, 0x6052, 0x007f, 0x60ea, 0x007f, 0x60e6,
-+ 0x007f, 0x604a, 0x007f, 0x6032, 0x007f, 0x0c7f, 0x007c, 0x25e7,
-+ 0x25eb, 0x25ef, 0x25f5, 0x25fb, 0x2601, 0x2607, 0x260f, 0x2617,
-+ 0x261d, 0x2623, 0x262b, 0x2633, 0x263b, 0x2643, 0x264d, 0x2657,
-+ 0x2657, 0x2657, 0x2657, 0x2657, 0x2657, 0x2657, 0x2657, 0x2657,
-+ 0x2657, 0x2657, 0x2657, 0x2657, 0x2657, 0x2657, 0x2657, 0x107e,
-+ 0x007e, 0x0078, 0x2670, 0x107e, 0x007e, 0x0078, 0x2670, 0x107e,
-+ 0x007e, 0x1078, 0x226c, 0x0078, 0x2670, 0x107e, 0x007e, 0x1078,
-+ 0x226c, 0x0078, 0x2670, 0x107e, 0x007e, 0x1078, 0x2133, 0x0078,
-+ 0x2670, 0x107e, 0x007e, 0x1078, 0x2133, 0x0078, 0x2670, 0x107e,
-+ 0x007e, 0x1078, 0x226c, 0x1078, 0x2133, 0x0078, 0x2670, 0x107e,
-+ 0x007e, 0x1078, 0x226c, 0x1078, 0x2133, 0x0078, 0x2670, 0x107e,
-+ 0x007e, 0x1078, 0x2178, 0x0078, 0x2670, 0x107e, 0x007e, 0x1078,
-+ 0x2178, 0x0078, 0x2670, 0x107e, 0x007e, 0x1078, 0x226c, 0x1078,
-+ 0x2178, 0x0078, 0x2670, 0x107e, 0x007e, 0x1078, 0x226c, 0x1078,
-+ 0x2178, 0x0078, 0x2670, 0x107e, 0x007e, 0x1078, 0x2133, 0x1078,
-+ 0x2178, 0x0078, 0x2670, 0x107e, 0x007e, 0x1078, 0x2133, 0x1078,
-+ 0x2178, 0x0078, 0x2670, 0x107e, 0x007e, 0x1078, 0x226c, 0x1078,
-+ 0x2133, 0x1078, 0x2178, 0x0078, 0x2670, 0x107e, 0x007e, 0x1078,
-+ 0x226c, 0x1078, 0x2133, 0x1078, 0x2178, 0x0078, 0x2670, 0x0005,
-+ 0x0078, 0x2657, 0xb084, 0x003c, 0x8004, 0x8004, 0x0079, 0x2660,
-+ 0x2670, 0x25ed, 0x25f1, 0x25f7, 0x25fd, 0x2603, 0x2609, 0x2611,
-+ 0x2619, 0x261f, 0x2625, 0x262d, 0x2635, 0x263d, 0x2645, 0x264f,
-+ 0x0008, 0x265a, 0x007f, 0x107f, 0x2091, 0x8001, 0x007c, 0x0c7e,
-+ 0x027e, 0x047e, 0x2021, 0x0000, 0x1078, 0x4967, 0x00c0, 0x2772,
-+ 0x70cc, 0xd09c, 0x0040, 0x268e, 0xd084, 0x00c0, 0x268e, 0xd0bc,
-+ 0x00c0, 0x2772, 0x1078, 0x2776, 0x0078, 0x2772, 0xd0cc, 0x00c0,
-+ 0x2772, 0xd094, 0x0040, 0x2698, 0x7097, 0xffff, 0x0078, 0x2772,
-+ 0x2001, 0x010c, 0x203c, 0x7284, 0xd284, 0x0040, 0x2701, 0xd28c,
-+ 0x00c0, 0x2701, 0x037e, 0x7394, 0xa38e, 0xffff, 0x0040, 0x26ab,
-+ 0x83ff, 0x00c0, 0x26ad, 0x2019, 0x0001, 0x8314, 0xa2e0, 0xacc0,
-+ 0x2c04, 0xa38c, 0x0001, 0x0040, 0x26ba, 0xa084, 0xff00, 0x8007,
-+ 0x0078, 0x26bc, 0xa084, 0x00ff, 0xa70e, 0x0040, 0x26f6, 0xa08e,
-+ 0x0000, 0x0040, 0x26f6, 0xa08e, 0x00ff, 0x00c0, 0x26d3, 0x7230,
-+ 0xd284, 0x00c0, 0x26fc, 0x7284, 0xc28d, 0x7286, 0x7097, 0xffff,
-+ 0x037f, 0x0078, 0x2701, 0x2009, 0x0000, 0x1078, 0x254d, 0x1078,
-+ 0x455c, 0x00c0, 0x26f9, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006,
-+ 0x00c0, 0x26f0, 0x7030, 0xd08c, 0x0040, 0x26ea, 0x6000, 0xd0bc,
-+ 0x0040, 0x26f0, 0x1078, 0x278c, 0x0040, 0x26f9, 0x0078, 0x26f6,
-+ 0x1078, 0x28c4, 0x1078, 0x27b9, 0x0040, 0x26f9, 0x8318, 0x0078,
-+ 0x26ad, 0x7396, 0x0078, 0x26fe, 0x7097, 0xffff, 0x037f, 0x0078,
-+ 0x2772, 0xa780, 0x29c0, 0x203c, 0xa7bc, 0xff00, 0x873f, 0x2041,
-+ 0x007e, 0x7094, 0xa096, 0xffff, 0x00c0, 0x2713, 0x2009, 0x0000,
-+ 0x28a8, 0x0078, 0x271f, 0xa812, 0x0048, 0x271b, 0x2008, 0xa802,
-+ 0x20a8, 0x0078, 0x271f, 0x7097, 0xffff, 0x0078, 0x2772, 0x2700,
-+ 0x157e, 0x017e, 0xa106, 0x0040, 0x2766, 0xc484, 0x1078, 0x45c4,
-+ 0x0040, 0x2730, 0x1078, 0x455c, 0x00c0, 0x276f, 0x0078, 0x2731,
-+ 0xc485, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x2740,
-+ 0x7030, 0xd08c, 0x0040, 0x275e, 0x6000, 0xd0bc, 0x00c0, 0x275e,
-+ 0x7284, 0xd28c, 0x0040, 0x2756, 0x6004, 0xa084, 0x00ff, 0xa082,
-+ 0x0006, 0x0048, 0x2766, 0xd484, 0x00c0, 0x2752, 0x1078, 0x457f,
-+ 0x0078, 0x2754, 0x1078, 0x298e, 0x0078, 0x2766, 0x1078, 0x28c4,
-+ 0x1078, 0x27b9, 0x0040, 0x276f, 0x0078, 0x2766, 0x1078, 0x2959,
-+ 0x0040, 0x2766, 0x1078, 0x278c, 0x0040, 0x276f, 0x017f, 0x8108,
-+ 0x157f, 0x00f0, 0x271f, 0x7097, 0xffff, 0x0078, 0x2772, 0x017f,
-+ 0x157f, 0x7196, 0x047f, 0x027f, 0x0c7f, 0x007c, 0x0c7e, 0x017e,
-+ 0x7097, 0x0001, 0x2009, 0x007e, 0x1078, 0x455c, 0x00c0, 0x2789,
-+ 0x1078, 0x28c4, 0x1078, 0x27b9, 0x0040, 0x2789, 0x70cc, 0xc0bd,
-+ 0x70ce, 0x017f, 0x0c7f, 0x007c, 0x017e, 0x077e, 0x0d7e, 0x0c7e,
-+ 0x2c68, 0x2001, 0xa657, 0x2004, 0xa084, 0x00ff, 0x6842, 0x1078,
-+ 0x76c7, 0x0040, 0x27b4, 0x2d00, 0x601a, 0x601f, 0x0001, 0x2001,
-+ 0x0000, 0x1078, 0x44ee, 0x2001, 0x0000, 0x1078, 0x4502, 0x127e,
-+ 0x2091, 0x8000, 0x7090, 0x8000, 0x7092, 0x127f, 0x2009, 0x0004,
-+ 0x1078, 0x775c, 0xa085, 0x0001, 0x0c7f, 0x0d7f, 0x077f, 0x017f,
-+ 0x007c, 0x017e, 0x077e, 0x0d7e, 0x0c7e, 0x2c68, 0x2001, 0xa657,
-+ 0x2004, 0xa084, 0x00ff, 0x6842, 0x1078, 0x9187, 0x0040, 0x27f2,
-+ 0x2d00, 0x601a, 0x6800, 0xc0c4, 0x6802, 0x68a0, 0xa086, 0x007e,
-+ 0x0040, 0x27db, 0x6804, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0,
-+ 0x27db, 0x1078, 0x2880, 0x601f, 0x0001, 0x2001, 0x0000, 0x1078,
-+ 0x44ee, 0x2001, 0x0002, 0x1078, 0x4502, 0x127e, 0x2091, 0x8000,
-+ 0x7090, 0x8000, 0x7092, 0x127f, 0x2009, 0x0002, 0x1078, 0x775c,
-+ 0xa085, 0x0001, 0x0c7f, 0x0d7f, 0x077f, 0x017f, 0x007c, 0x0c7e,
-+ 0x027e, 0x2009, 0x0080, 0x1078, 0x455c, 0x00c0, 0x2805, 0x1078,
-+ 0x2808, 0x0040, 0x2805, 0x70d3, 0xffff, 0x027f, 0x0c7f, 0x007c,
-+ 0x017e, 0x077e, 0x0d7e, 0x0c7e, 0x2c68, 0x1078, 0x76c7, 0x0040,
-+ 0x282a, 0x2d00, 0x601a, 0x601f, 0x0001, 0x2001, 0x0000, 0x1078,
-+ 0x44ee, 0x2001, 0x0002, 0x1078, 0x4502, 0x127e, 0x2091, 0x8000,
-+ 0x70d4, 0x8000, 0x70d6, 0x127f, 0x2009, 0x0002, 0x1078, 0x775c,
-+ 0xa085, 0x0001, 0x0c7f, 0x0d7f, 0x077f, 0x017f, 0x007c, 0x0c7e,
-+ 0x0d7e, 0x127e, 0x2091, 0x8000, 0x2009, 0x007f, 0x1078, 0x455c,
-+ 0x00c0, 0x284b, 0x2c68, 0x1078, 0x76c7, 0x0040, 0x284b, 0x2d00,
-+ 0x601a, 0x6312, 0x601f, 0x0001, 0x620a, 0x2009, 0x0022, 0x1078,
-+ 0x775c, 0xa085, 0x0001, 0x127f, 0x0d7f, 0x0c7f, 0x007c, 0x0e7e,
-+ 0x0c7e, 0x067e, 0x037e, 0x027e, 0x1078, 0x5f0e, 0x1078, 0x5eae,
-+ 0x1078, 0x8068, 0x2130, 0x81ff, 0x0040, 0x2864, 0x20a9, 0x007e,
-+ 0x2009, 0x0000, 0x0078, 0x2868, 0x20a9, 0x007f, 0x2009, 0x0000,
-+ 0x017e, 0x1078, 0x45c4, 0x00c0, 0x2871, 0x1078, 0x47e9, 0x1078,
-+ 0x42f8, 0x017f, 0x8108, 0x00f0, 0x2868, 0x86ff, 0x00c0, 0x287a,
-+ 0x1078, 0x119b, 0x027f, 0x037f, 0x067f, 0x0c7f, 0x0e7f, 0x007c,
-+ 0x0e7e, 0x0c7e, 0x037e, 0x027e, 0x017e, 0x6218, 0x2270, 0x72a0,
-+ 0x027e, 0x2019, 0x0029, 0x1078, 0x5f01, 0x077e, 0x2039, 0x0000,
-+ 0x1078, 0x5e0a, 0x2c08, 0x1078, 0x9f8b, 0x077f, 0x017f, 0x2e60,
-+ 0x1078, 0x47e9, 0x6210, 0x6314, 0x1078, 0x42f8, 0x6212, 0x6316,
-+ 0x017f, 0x027f, 0x037f, 0x0c7f, 0x0e7f, 0x007c, 0x0e7e, 0x007e,
-+ 0x6018, 0xa080, 0x0028, 0x2004, 0xd0bc, 0x00c0, 0x28ba, 0x2071,
-+ 0xa600, 0x7090, 0xa005, 0x0040, 0x28b7, 0x8001, 0x7092, 0x007f,
-+ 0x0e7f, 0x007c, 0x2071, 0xa600, 0x70d4, 0xa005, 0x0040, 0x28b7,
-+ 0x8001, 0x70d6, 0x0078, 0x28b7, 0x6000, 0xc08c, 0x6002, 0x007c,
-+ 0x0f7e, 0x0e7e, 0x0c7e, 0x037e, 0x027e, 0x017e, 0x157e, 0x2178,
-+ 0x81ff, 0x00c0, 0x28d7, 0x20a9, 0x0001, 0x0078, 0x28f2, 0x2001,
-+ 0xa653, 0x2004, 0xd0c4, 0x0040, 0x28ee, 0xd0a4, 0x0040, 0x28ee,
-+ 0x047e, 0x6018, 0xa080, 0x0028, 0x2024, 0xa4a4, 0x00ff, 0x8427,
-+ 0xa006, 0x2009, 0x002d, 0x1078, 0xa21d, 0x047f, 0x20a9, 0x00ff,
-+ 0x2011, 0x0000, 0x027e, 0xa28e, 0x007e, 0x0040, 0x2936, 0xa28e,
-+ 0x007f, 0x0040, 0x2936, 0xa28e, 0x0080, 0x0040, 0x2936, 0xa288,
-+ 0xa735, 0x210c, 0x81ff, 0x0040, 0x2936, 0x8fff, 0x1040, 0x2942,
-+ 0x0c7e, 0x2160, 0x2001, 0x0001, 0x1078, 0x4972, 0x0c7f, 0x2019,
-+ 0x0029, 0x1078, 0x5f01, 0x077e, 0x2039, 0x0000, 0x1078, 0x5e0a,
-+ 0x0c7e, 0x027e, 0x2160, 0x6204, 0xa294, 0x00ff, 0xa286, 0x0006,
-+ 0x00c0, 0x2926, 0x6007, 0x0404, 0x0078, 0x292b, 0x2001, 0x0004,
-+ 0x8007, 0xa215, 0x6206, 0x027f, 0x0c7f, 0x017e, 0x2c08, 0x1078,
-+ 0x9f8b, 0x017f, 0x077f, 0x2160, 0x1078, 0x47e9, 0x027f, 0x8210,
-+ 0x00f0, 0x28f2, 0x157f, 0x017f, 0x027f, 0x037f, 0x0c7f, 0x0e7f,
-+ 0x0f7f, 0x007c, 0x047e, 0x027e, 0x017e, 0x2001, 0xa653, 0x2004,
-+ 0xd0c4, 0x0040, 0x2955, 0xd0a4, 0x0040, 0x2955, 0xa006, 0x2220,
-+ 0x8427, 0x2009, 0x0029, 0x1078, 0xa21d, 0x017f, 0x027f, 0x047f,
-+ 0x007c, 0x017e, 0x027e, 0x037e, 0x0c7e, 0x7284, 0x82ff, 0x0040,
-+ 0x2987, 0xa290, 0xa653, 0x2214, 0xd2ac, 0x00c0, 0x2987, 0x2100,
-+ 0x1078, 0x2564, 0x81ff, 0x0040, 0x2989, 0x2019, 0x0001, 0x8314,
-+ 0xa2e0, 0xacc0, 0x2c04, 0xd384, 0x0040, 0x297b, 0xa084, 0xff00,
-+ 0x8007, 0x0078, 0x297d, 0xa084, 0x00ff, 0xa116, 0x0040, 0x2989,
-+ 0xa096, 0x00ff, 0x0040, 0x2987, 0x8318, 0x0078, 0x296f, 0xa085,
-+ 0x0001, 0x0c7f, 0x037f, 0x027f, 0x017f, 0x007c, 0x017e, 0x0c7e,
-+ 0x127e, 0x2091, 0x8000, 0x017e, 0x027e, 0x037e, 0x2110, 0x027e,
-+ 0x2019, 0x0029, 0x1078, 0x73d0, 0x027f, 0x1078, 0xa4f1, 0x037f,
-+ 0x027f, 0x017f, 0xa180, 0xa735, 0x2004, 0xa065, 0x0040, 0x29b7,
-+ 0x017e, 0x0c7e, 0x1078, 0x9187, 0x017f, 0x1040, 0x1332, 0x611a,
-+ 0x1078, 0x2880, 0x1078, 0x772d, 0x017f, 0x1078, 0x457f, 0x127f,
-+ 0x0c7f, 0x017f, 0x007c, 0x2001, 0xa633, 0x2004, 0xd0cc, 0x007c,
-+ 0x7eef, 0x7de8, 0x7ce4, 0x80e2, 0x7be1, 0x80e0, 0x80dc, 0x80da,
-+ 0x7ad9, 0x80d6, 0x80d5, 0x80d4, 0x80d3, 0x80d2, 0x80d1, 0x79ce,
-+ 0x78cd, 0x80cc, 0x80cb, 0x80ca, 0x80c9, 0x80c7, 0x80c6, 0x77c5,
-+ 0x76c3, 0x80bc, 0x80ba, 0x75b9, 0x80b6, 0x74b5, 0x73b4, 0x72b3,
-+ 0x80b2, 0x80b1, 0x80ae, 0x71ad, 0x80ac, 0x70ab, 0x6faa, 0x6ea9,
-+ 0x80a7, 0x6da6, 0x6ca5, 0x6ba3, 0x6a9f, 0x699e, 0x689d, 0x809b,
-+ 0x8098, 0x6797, 0x6690, 0x658f, 0x6488, 0x6384, 0x6282, 0x8081,
-+ 0x8080, 0x617c, 0x607a, 0x8079, 0x5f76, 0x8075, 0x8074, 0x8073,
-+ 0x8072, 0x8071, 0x806e, 0x5e6d, 0x806c, 0x5d6b, 0x5c6a, 0x5b69,
-+ 0x8067, 0x5a66, 0x5965, 0x5863, 0x575c, 0x565a, 0x5559, 0x8056,
-+ 0x8055, 0x5454, 0x5353, 0x5252, 0x5151, 0x504e, 0x4f4d, 0x804c,
-+ 0x804b, 0x4e4a, 0x4d49, 0x8047, 0x4c46, 0x8045, 0x8043, 0x803c,
-+ 0x803a, 0x8039, 0x8036, 0x4b35, 0x8034, 0x4a33, 0x4932, 0x4831,
-+ 0x802e, 0x472d, 0x462c, 0x452b, 0x442a, 0x4329, 0x4227, 0x8026,
-+ 0x8025, 0x4123, 0x401f, 0x3f1e, 0x3e1d, 0x3d1b, 0x3c18, 0x8017,
-+ 0x8010, 0x3b0f, 0x3a08, 0x8004, 0x3902, 0x8001, 0x8000, 0x8000,
-+ 0x3800, 0x3700, 0x3600, 0x8000, 0x3500, 0x8000, 0x8000, 0x8000,
-+ 0x3400, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x3300,
-+ 0x3200, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x3100,
-+ 0x3000, 0x8000, 0x8000, 0x2f00, 0x8000, 0x2e00, 0x2d00, 0x2c00,
-+ 0x8000, 0x8000, 0x8000, 0x2b00, 0x8000, 0x2a00, 0x2900, 0x2800,
-+ 0x8000, 0x2700, 0x2600, 0x2500, 0x2400, 0x2300, 0x2200, 0x8000,
-+ 0x8000, 0x2100, 0x2000, 0x1f00, 0x1e00, 0x1d00, 0x1c00, 0x8000,
-+ 0x8000, 0x1b00, 0x1a00, 0x8000, 0x1900, 0x8000, 0x8000, 0x8000,
-+ 0x8000, 0x8000, 0x8000, 0x1800, 0x8000, 0x1700, 0x1600, 0x1500,
-+ 0x8000, 0x1400, 0x1300, 0x1200, 0x1100, 0x1000, 0x0f00, 0x8000,
-+ 0x8000, 0x0e00, 0x0d00, 0x0c00, 0x0b00, 0x0a00, 0x0900, 0x8000,
-+ 0x8000, 0x0800, 0x0700, 0x8000, 0x0600, 0x8000, 0x8000, 0x8000,
-+ 0x0500, 0x0400, 0x0300, 0x8000, 0x0200, 0x8000, 0x8000, 0x8000,
-+ 0x0100, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x0000,
-+ 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
-+ 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
-+ 0x2071, 0xa682, 0x7003, 0x0002, 0xa006, 0x7012, 0x7016, 0x703a,
-+ 0x703e, 0x7033, 0xa692, 0x7037, 0xa692, 0x7007, 0x0001, 0x2061,
-+ 0xa6d2, 0x6003, 0x0002, 0x007c, 0x0090, 0x2ae7, 0x0068, 0x2ae7,
-+ 0x2071, 0xa682, 0x2b78, 0x7818, 0xd084, 0x00c0, 0x2ae7, 0x2a60,
-+ 0x7820, 0xa08e, 0x0069, 0x00c0, 0x2bd7, 0x0079, 0x2b6b, 0x007c,
-+ 0x2071, 0xa682, 0x7004, 0x0079, 0x2aed, 0x2af1, 0x2af2, 0x2afc,
-+ 0x2b0e, 0x007c, 0x0090, 0x2afb, 0x0068, 0x2afb, 0x2b78, 0x7818,
-+ 0xd084, 0x0040, 0x2b1a, 0x007c, 0x2b78, 0x2061, 0xa6d2, 0x6008,
-+ 0xa08e, 0x0100, 0x0040, 0x2b09, 0xa086, 0x0200, 0x0040, 0x2bcf,
-+ 0x007c, 0x7014, 0x2068, 0x2a60, 0x7018, 0x007a, 0x7010, 0x2068,
-+ 0x6834, 0xa086, 0x0103, 0x0040, 0x2b16, 0x007c, 0x2a60, 0x2b78,
-+ 0x7018, 0x007a, 0x2a60, 0x7820, 0xa08a, 0x0040, 0x00c8, 0x2b23,
-+ 0x61bc, 0x0079, 0x2b2b, 0x2100, 0xa08a, 0x003f, 0x00c8, 0x2bcb,
-+ 0x61bc, 0x0079, 0x2b6b, 0x2bad, 0x2bdf, 0x2be7, 0x2beb, 0x2bf3,
-+ 0x2bf9, 0x2bfd, 0x2c09, 0x2c0d, 0x2c17, 0x2c1b, 0x2bcb, 0x2bcb,
-+ 0x2bcb, 0x2c1f, 0x2bcb, 0x2c2f, 0x2c46, 0x2c5d, 0x2cdd, 0x2ce2,
-+ 0x2d0f, 0x2d69, 0x2d7a, 0x2d98, 0x2dd9, 0x2de3, 0x2df0, 0x2e03,
-+ 0x2e22, 0x2e2b, 0x2e68, 0x2e6e, 0x2bcb, 0x2e8a, 0x2bcb, 0x2bcb,
-+ 0x2bcb, 0x2bcb, 0x2bcb, 0x2e91, 0x2e9b, 0x2bcb, 0x2bcb, 0x2bcb,
-+ 0x2bcb, 0x2bcb, 0x2bcb, 0x2bcb, 0x2bcb, 0x2ea3, 0x2bcb, 0x2bcb,
-+ 0x2bcb, 0x2bcb, 0x2bcb, 0x2eb5, 0x2ece, 0x2bcb, 0x2bcb, 0x2bcb,
-+ 0x2bcb, 0x2bcb, 0x2bcb, 0x2ee0, 0x2f37, 0x2f95, 0x2fa9, 0x2bcb,
-+ 0x2bcb, 0x2bcb, 0x398e, 0x2bcb, 0x2bcb, 0x2bcb, 0x2bcb, 0x2bcb,
-+ 0x2bcb, 0x2bcb, 0x2bcb, 0x2c17, 0x2c1b, 0x2fc0, 0x2bcb, 0x2fcd,
-+ 0x3a26, 0x3a83, 0x2bcb, 0x2bcb, 0x2bcb, 0x2bcb, 0x2bcb, 0x2bcb,
-+ 0x2bcb, 0x2bcb, 0x2bcb, 0x301a, 0x314f, 0x316b, 0x3177, 0x31da,
-+ 0x3233, 0x323e, 0x327d, 0x328c, 0x329b, 0x329e, 0x2fd1, 0x32c2,
-+ 0x331e, 0x332b, 0x343c, 0x356f, 0x3599, 0x36a6, 0x2bcb, 0x36b6,
-+ 0x36f0, 0x37bf, 0x2bcb, 0x2bcb, 0x2bcb, 0x2bcb, 0x3827, 0x3843,
-+ 0x38bd, 0x3977, 0x713c, 0x0078, 0x2bad, 0x2021, 0x4000, 0x1078,
-+ 0x35f5, 0x127e, 0x2091, 0x8000, 0x0068, 0x2bba, 0x7818, 0xd084,
-+ 0x0040, 0x2bbd, 0x127f, 0x0078, 0x2bb1, 0x7c22, 0x7926, 0x7a2a,
-+ 0x7b2e, 0x781b, 0x0001, 0x2091, 0x4080, 0x7007, 0x0001, 0x2091,
-+ 0x5000, 0x127f, 0x007c, 0x2021, 0x4001, 0x0078, 0x2baf, 0x2021,
-+ 0x4002, 0x0078, 0x2baf, 0x2021, 0x4003, 0x0078, 0x2baf, 0x2021,
-+ 0x4005, 0x0078, 0x2baf, 0x2021, 0x4006, 0x0078, 0x2baf, 0xa02e,
-+ 0x2520, 0x7b28, 0x7a2c, 0x7824, 0x7930, 0x0078, 0x3604, 0x7823,
-+ 0x0004, 0x7824, 0x007a, 0xa02e, 0x2520, 0x7b28, 0x7a2c, 0x7824,
-+ 0x7930, 0x0078, 0x3608, 0x7924, 0x7828, 0x2114, 0x200a, 0x0078,
-+ 0x2bad, 0x7924, 0x2114, 0x0078, 0x2bad, 0x2099, 0x0009, 0x20a1,
-+ 0x0009, 0x20a9, 0x0007, 0x53a3, 0x7924, 0x7a28, 0x7b2c, 0x0078,
-+ 0x2bad, 0x7824, 0x2060, 0x0078, 0x2c21, 0x2009, 0x0001, 0x2011,
-+ 0x0013, 0x2019, 0x0018, 0x783b, 0x0017, 0x0078, 0x2bad, 0x7d38,
-+ 0x7c3c, 0x0078, 0x2be1, 0x7d38, 0x7c3c, 0x0078, 0x2bed, 0x2061,
-+ 0x1000, 0x610c, 0xa006, 0x2c14, 0xa200, 0x8c60, 0x8109, 0x00c0,
-+ 0x2c23, 0x2010, 0xa005, 0x0040, 0x2bad, 0x0078, 0x2bd3, 0x2069,
-+ 0xa652, 0x7824, 0x7930, 0xa11a, 0x00c8, 0x2bdb, 0x8019, 0x0040,
-+ 0x2bdb, 0x684a, 0x6942, 0x782c, 0x6852, 0x7828, 0x6856, 0xa006,
-+ 0x685a, 0x685e, 0x1078, 0x4eae, 0x0078, 0x2bad, 0x2069, 0xa652,
-+ 0x7824, 0x7934, 0xa11a, 0x00c8, 0x2bdb, 0x8019, 0x0040, 0x2bdb,
-+ 0x684e, 0x6946, 0x782c, 0x6862, 0x7828, 0x6866, 0xa006, 0x686a,
-+ 0x686e, 0x1078, 0x4a3e, 0x0078, 0x2bad, 0xa02e, 0x2520, 0x81ff,
-+ 0x00c0, 0x2bd7, 0x7924, 0x7b28, 0x7a2c, 0x20a9, 0x0005, 0x20a1,
-+ 0xa689, 0x41a1, 0x1078, 0x35ba, 0x0040, 0x2bd7, 0x2009, 0x0020,
-+ 0x1078, 0x3604, 0x701b, 0x2c75, 0x007c, 0x6834, 0x2008, 0xa084,
-+ 0x00ff, 0xa096, 0x0011, 0x0040, 0x2c85, 0xa096, 0x0019, 0x0040,
-+ 0x2c85, 0xa096, 0x0015, 0x00c0, 0x2bd7, 0x810f, 0xa18c, 0x00ff,
-+ 0x0040, 0x2bd7, 0x710e, 0x700c, 0x8001, 0x0040, 0x2cb6, 0x700e,
-+ 0x1078, 0x35ba, 0x0040, 0x2bd7, 0x2009, 0x0020, 0x2061, 0xa6d2,
-+ 0x6224, 0x6328, 0x642c, 0x6530, 0xa290, 0x0040, 0xa399, 0x0000,
-+ 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x1078, 0x3604, 0x701b, 0x2ca9,
-+ 0x007c, 0x6834, 0xa084, 0x00ff, 0xa096, 0x0002, 0x0040, 0x2cb4,
-+ 0xa096, 0x000a, 0x00c0, 0x2bd7, 0x0078, 0x2c8b, 0x7010, 0x2068,
-+ 0x6838, 0xc0fd, 0x683a, 0x1078, 0x4431, 0x00c0, 0x2cc4, 0x7007,
-+ 0x0003, 0x701b, 0x2cc6, 0x007c, 0x1078, 0x4b51, 0x127e, 0x2091,
-+ 0x8000, 0x20a9, 0x0005, 0x2099, 0xa689, 0x530a, 0x2100, 0xa210,
-+ 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0xad80, 0x000d,
-+ 0x2009, 0x0020, 0x127f, 0x0078, 0x3608, 0x61a4, 0x7824, 0x60a6,
-+ 0x0078, 0x2bad, 0x2091, 0x8000, 0x7823, 0x4000, 0x7827, 0x4953,
-+ 0x782b, 0x5020, 0x782f, 0x2020, 0x2009, 0x017f, 0x2104, 0x7832,
-+ 0x3f00, 0x7836, 0x2061, 0x0100, 0x6200, 0x2061, 0x0200, 0x603c,
-+ 0x8007, 0xa205, 0x783a, 0x2009, 0x04fd, 0x2104, 0x783e, 0x781b,
-+ 0x0001, 0x2091, 0x5000, 0x2091, 0x4080, 0x2071, 0x0010, 0x20c1,
-+ 0x00f0, 0xa08a, 0x0003, 0x00c8, 0x0427, 0x0078, 0x0423, 0x81ff,
-+ 0x00c0, 0x2bd7, 0x7924, 0x810f, 0xa18c, 0x00ff, 0x1078, 0x45c4,
-+ 0x00c0, 0x2bdb, 0x7e38, 0xa684, 0x3fff, 0xa082, 0x4000, 0x0048,
-+ 0x2d23, 0x0078, 0x2bdb, 0x7c28, 0x7d2c, 0x1078, 0x47a4, 0xd28c,
-+ 0x00c0, 0x2d2e, 0x1078, 0x4736, 0x0078, 0x2d30, 0x1078, 0x4772,
-+ 0x00c0, 0x2d5a, 0x2061, 0xad00, 0x127e, 0x2091, 0x8000, 0x6000,
-+ 0xa086, 0x0000, 0x0040, 0x2d48, 0x6010, 0xa06d, 0x0040, 0x2d48,
-+ 0x683c, 0xa406, 0x00c0, 0x2d48, 0x6840, 0xa506, 0x0040, 0x2d53,
-+ 0x127f, 0xace0, 0x0010, 0x2001, 0xa616, 0x2004, 0xac02, 0x00c8,
-+ 0x2bd7, 0x0078, 0x2d34, 0x1078, 0x8a01, 0x127f, 0x0040, 0x2bd7,
-+ 0x0078, 0x2bad, 0xa00e, 0x2001, 0x0005, 0x1078, 0x4b51, 0x127e,
-+ 0x2091, 0x8000, 0x1078, 0x8f85, 0x1078, 0x4a73, 0x127f, 0x0078,
-+ 0x2bad, 0x81ff, 0x00c0, 0x2bd7, 0x1078, 0x35d2, 0x0040, 0x2bdb,
-+ 0x1078, 0x4673, 0x0040, 0x2bd7, 0x1078, 0x47b2, 0x0040, 0x2bd7,
-+ 0x0078, 0x2bad, 0x81ff, 0x00c0, 0x2bd7, 0x1078, 0x35e4, 0x0040,
-+ 0x2bdb, 0x1078, 0x482f, 0x0040, 0x2bd7, 0x2019, 0x0005, 0x1078,
-+ 0x47d3, 0x0040, 0x2bd7, 0x7828, 0xa08a, 0x1000, 0x00c8, 0x2bdb,
-+ 0x8003, 0x800b, 0x810b, 0xa108, 0x1078, 0x5a52, 0x0078, 0x2bad,
-+ 0x127e, 0x2091, 0x8000, 0x81ff, 0x0040, 0x2da2, 0x2009, 0x0001,
-+ 0x0078, 0x2dd3, 0x2029, 0x00ff, 0x6450, 0x2400, 0xa506, 0x0040,
-+ 0x2dcd, 0x2508, 0x1078, 0x45c4, 0x00c0, 0x2dcd, 0x1078, 0x482f,
-+ 0x00c0, 0x2db8, 0x2009, 0x0002, 0x62ac, 0x2518, 0x0078, 0x2dd3,
-+ 0x2019, 0x0004, 0x1078, 0x47d3, 0x00c0, 0x2dc2, 0x2009, 0x0006,
-+ 0x0078, 0x2dd3, 0x7824, 0xa08a, 0x1000, 0x00c8, 0x2dd6, 0x8003,
-+ 0x800b, 0x810b, 0xa108, 0x1078, 0x5a52, 0x8529, 0x00c8, 0x2da5,
-+ 0x127f, 0x0078, 0x2bad, 0x127f, 0x0078, 0x2bd7, 0x127f, 0x0078,
-+ 0x2bdb, 0x1078, 0x35d2, 0x0040, 0x2bdb, 0x1078, 0x46e7, 0x1078,
-+ 0x47a4, 0x0078, 0x2bad, 0x81ff, 0x00c0, 0x2bd7, 0x1078, 0x35d2,
-+ 0x0040, 0x2bdb, 0x1078, 0x46d6, 0x1078, 0x47a4, 0x0078, 0x2bad,
-+ 0x81ff, 0x00c0, 0x2bd7, 0x1078, 0x35d2, 0x0040, 0x2bdb, 0x1078,
-+ 0x4775, 0x0040, 0x2bd7, 0x1078, 0x4484, 0x1078, 0x472f, 0x1078,
-+ 0x47a4, 0x0078, 0x2bad, 0x1078, 0x35d2, 0x0040, 0x2bdb, 0x1078,
-+ 0x4673, 0x0040, 0x2bd7, 0x62a0, 0x2019, 0x0005, 0x0c7e, 0x1078,
-+ 0x47e9, 0x0c7f, 0x1078, 0x5f01, 0x077e, 0x2039, 0x0000, 0x1078,
-+ 0x5e0a, 0x2009, 0x0000, 0x1078, 0x9f8b, 0x077f, 0x1078, 0x47a4,
-+ 0x0078, 0x2bad, 0x1078, 0x35d2, 0x0040, 0x2bdb, 0x1078, 0x47a4,
-+ 0x2208, 0x0078, 0x2bad, 0x157e, 0x0d7e, 0x0e7e, 0x2069, 0xa714,
-+ 0x6810, 0x6914, 0xa10a, 0x00c8, 0x2e37, 0x2009, 0x0000, 0x6816,
-+ 0x2011, 0x0000, 0x2019, 0x0000, 0x20a9, 0x00ff, 0x2069, 0xa735,
-+ 0x2d04, 0xa075, 0x0040, 0x2e4c, 0x704c, 0x1078, 0x2e56, 0xa210,
-+ 0x7080, 0x1078, 0x2e56, 0xa318, 0x8d68, 0x00f0, 0x2e40, 0x2300,
-+ 0xa218, 0x0e7f, 0x0d7f, 0x157f, 0x0078, 0x2bad, 0x0f7e, 0x017e,
-+ 0xa07d, 0x0040, 0x2e65, 0x2001, 0x0000, 0x8000, 0x2f0c, 0x81ff,
-+ 0x0040, 0x2e65, 0x2178, 0x0078, 0x2e5d, 0x017f, 0x0f7f, 0x007c,
-+ 0x2069, 0xa714, 0x6910, 0x62a8, 0x0078, 0x2bad, 0x81ff, 0x00c0,
-+ 0x2bd7, 0x6150, 0xa190, 0x29c0, 0x2214, 0xa294, 0x00ff, 0x6070,
-+ 0xa084, 0xff00, 0xa215, 0x636c, 0x67cc, 0xd79c, 0x0040, 0x2e84,
-+ 0x2031, 0x0001, 0x0078, 0x2e86, 0x2031, 0x0000, 0x7e3a, 0x7f3e,
-+ 0x0078, 0x2bad, 0x6140, 0x6244, 0x2019, 0xa8a2, 0x231c, 0x0078,
-+ 0x2bad, 0x127e, 0x2091, 0x8000, 0x6134, 0x6338, 0xa006, 0x2010,
-+ 0x127f, 0x0078, 0x2bad, 0x1078, 0x35e4, 0x0040, 0x2bdb, 0x6244,
-+ 0x6338, 0x0078, 0x2bad, 0x6140, 0x6244, 0x7824, 0x6042, 0x7b28,
-+ 0x6346, 0x2069, 0xa652, 0x831f, 0xa305, 0x6816, 0x782c, 0x2069,
-+ 0xa8a2, 0x2d1c, 0x206a, 0x0078, 0x2bad, 0x017e, 0x127e, 0x2091,
-+ 0x8000, 0x7824, 0x6036, 0xd094, 0x0040, 0x2ec8, 0x7828, 0xa085,
-+ 0x0001, 0x2009, 0xa8ab, 0x200a, 0x2001, 0xffff, 0x1078, 0x5ae6,
-+ 0x782c, 0x603a, 0x127f, 0x017f, 0x0078, 0x2bad, 0x1078, 0x35e4,
-+ 0x0040, 0x2bdb, 0x7828, 0xa00d, 0x0040, 0x2bdb, 0x782c, 0xa005,
-+ 0x0040, 0x2bdb, 0x6244, 0x6146, 0x6338, 0x603a, 0x0078, 0x2bad,
-+ 0x2001, 0xa600, 0x2004, 0xa086, 0x0003, 0x00c0, 0x2bd7, 0x0c7e,
-+ 0x2061, 0x0100, 0x7924, 0x810f, 0xa18c, 0x00ff, 0xa196, 0x00ff,
-+ 0x00c0, 0x2ef7, 0x6030, 0xa085, 0xff00, 0x0078, 0x2f06, 0xa182,
-+ 0x007f, 0x00c8, 0x2f30, 0xa188, 0x29c0, 0x210c, 0xa18c, 0x00ff,
-+ 0x6030, 0xa116, 0x0040, 0x2f30, 0x810f, 0xa105, 0x127e, 0x2091,
-+ 0x8000, 0x007e, 0x1078, 0x76c7, 0x007f, 0x0040, 0x2f2c, 0x601a,
-+ 0x600b, 0xbc09, 0x601f, 0x0001, 0x1078, 0x35ba, 0x0040, 0x2f33,
-+ 0x6837, 0x0000, 0x7007, 0x0003, 0x6833, 0x0000, 0x6838, 0xc0fd,
-+ 0x683a, 0x701b, 0x2f8e, 0x2d00, 0x6012, 0x2009, 0x0032, 0x1078,
-+ 0x775c, 0x127f, 0x0c7f, 0x007c, 0x127f, 0x0c7f, 0x0078, 0x2bd7,
-+ 0x0c7f, 0x0078, 0x2bdb, 0x1078, 0x772d, 0x0078, 0x2f2c, 0x2001,
-+ 0xa600, 0x2004, 0xa086, 0x0003, 0x00c0, 0x2bd7, 0x0c7e, 0x2061,
-+ 0x0100, 0x7924, 0x810f, 0xa18c, 0x00ff, 0xa196, 0x00ff, 0x00c0,
-+ 0x2f4e, 0x6030, 0xa085, 0xff00, 0x0078, 0x2f5d, 0xa182, 0x007f,
-+ 0x00c8, 0x2f87, 0xa188, 0x29c0, 0x210c, 0xa18c, 0x00ff, 0x6030,
-+ 0xa116, 0x0040, 0x2f87, 0x810f, 0xa105, 0x127e, 0x2091, 0x8000,
-+ 0x007e, 0x1078, 0x76c7, 0x007f, 0x0040, 0x2f83, 0x601a, 0x600b,
-+ 0xbc05, 0x601f, 0x0001, 0x1078, 0x35ba, 0x0040, 0x2f8a, 0x6837,
-+ 0x0000, 0x7007, 0x0003, 0x6833, 0x0000, 0x6838, 0xc0fd, 0x683a,
-+ 0x701b, 0x2f8e, 0x2d00, 0x6012, 0x2009, 0x0032, 0x1078, 0x775c,
-+ 0x127f, 0x0c7f, 0x007c, 0x127f, 0x0c7f, 0x0078, 0x2bd7, 0x0c7f,
-+ 0x0078, 0x2bdb, 0x1078, 0x772d, 0x0078, 0x2f83, 0x6830, 0xa086,
-+ 0x0100, 0x0040, 0x2bd7, 0x0078, 0x2bad, 0x2061, 0xa933, 0x127e,
-+ 0x2091, 0x8000, 0x6000, 0xd084, 0x0040, 0x2fa6, 0x6104, 0x6208,
-+ 0x2019, 0xa612, 0x231c, 0x127f, 0x0078, 0x2bad, 0x127f, 0x0078,
-+ 0x2bdb, 0x81ff, 0x00c0, 0x2bd7, 0x127e, 0x2091, 0x8000, 0x6248,
-+ 0x6064, 0xa202, 0x0048, 0x2fbd, 0xa085, 0x0001, 0x1078, 0x256a,
-+ 0x1078, 0x3c9e, 0x127f, 0x0078, 0x2bad, 0x127f, 0x0078, 0x2bdb,
-+ 0x127e, 0x2091, 0x8000, 0x20a9, 0x0012, 0x2001, 0xa640, 0x20a0,
-+ 0xa006, 0x40a4, 0x127f, 0x0078, 0x2bad, 0x7d38, 0x7c3c, 0x0078,
-+ 0x2c5f, 0x7824, 0xa09c, 0x00ff, 0xa39a, 0x0003, 0x00c8, 0x2bd7,
-+ 0x6250, 0xa084, 0xff00, 0x8007, 0xa206, 0x00c0, 0x2fe9, 0x2001,
-+ 0xa640, 0x2009, 0x000c, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0078,
-+ 0x3608, 0x81ff, 0x00c0, 0x2bd7, 0x1078, 0x35e4, 0x0040, 0x2bdb,
-+ 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x2bd7, 0x0c7e,
-+ 0x1078, 0x35ba, 0x0c7f, 0x0040, 0x2bd7, 0x6837, 0x0000, 0x6838,
-+ 0xc0fd, 0x683a, 0x1078, 0x8e4a, 0x0040, 0x2bd7, 0x7007, 0x0003,
-+ 0x701b, 0x300b, 0x007c, 0x6830, 0xa086, 0x0100, 0x0040, 0x2bd7,
-+ 0xad80, 0x000e, 0x2009, 0x000c, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38,
-+ 0x0078, 0x3608, 0x1078, 0x35ba, 0x0040, 0x2bd7, 0x1078, 0x42dd,
-+ 0x2009, 0x001c, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x1078, 0x3604,
-+ 0x701b, 0x302b, 0x007c, 0xade8, 0x000d, 0x6800, 0xa005, 0x0040,
-+ 0x2bdb, 0x6804, 0xd0ac, 0x0040, 0x3038, 0xd0a4, 0x0040, 0x2bdb,
-+ 0xd094, 0x0040, 0x3043, 0x0c7e, 0x2061, 0x0100, 0x6104, 0xa18c,
-+ 0xffdf, 0x6106, 0x0c7f, 0xd08c, 0x0040, 0x304e, 0x0c7e, 0x2061,
-+ 0x0100, 0x6104, 0xa18d, 0x0010, 0x6106, 0x0c7f, 0x2009, 0x0100,
-+ 0x210c, 0xa18a, 0x0002, 0x0048, 0x3063, 0xd084, 0x0040, 0x3063,
-+ 0x6a28, 0xa28a, 0x007f, 0x00c8, 0x2bdb, 0xa288, 0x29c0, 0x210c,
-+ 0xa18c, 0x00ff, 0x6156, 0xd0dc, 0x0040, 0x306c, 0x6828, 0xa08a,
-+ 0x007f, 0x00c8, 0x2bdb, 0x6052, 0x6808, 0xa08a, 0x0100, 0x0048,
-+ 0x2bdb, 0xa08a, 0x0841, 0x00c8, 0x2bdb, 0xa084, 0x0007, 0x00c0,
-+ 0x2bdb, 0x680c, 0xa005, 0x0040, 0x2bdb, 0x6810, 0xa005, 0x0040,
-+ 0x2bdb, 0x6848, 0x6940, 0xa10a, 0x00c8, 0x2bdb, 0x8001, 0x0040,
-+ 0x2bdb, 0x684c, 0x6944, 0xa10a, 0x00c8, 0x2bdb, 0x8001, 0x0040,
-+ 0x2bdb, 0x6804, 0xd0fc, 0x0040, 0x30c2, 0x1078, 0x35ba, 0x0040,
-+ 0x2bd7, 0x2009, 0x0014, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0xa290,
-+ 0x0038, 0xa399, 0x0000, 0x1078, 0x3604, 0x701b, 0x30a8, 0x007c,
-+ 0xade8, 0x000d, 0x20a9, 0x0014, 0x2d98, 0x2069, 0xa66e, 0x2da0,
-+ 0x53a3, 0x7010, 0xa0e8, 0x000d, 0x2001, 0xa672, 0x200c, 0xd1e4,
-+ 0x0040, 0x30c2, 0x0c7e, 0x2061, 0x0100, 0x6004, 0xa085, 0x0b00,
-+ 0x6006, 0x0c7f, 0x20a9, 0x001c, 0x2d98, 0x2069, 0xa652, 0x2da0,
-+ 0x53a3, 0x6814, 0xa08c, 0x00ff, 0x6142, 0x8007, 0xa084, 0x00ff,
-+ 0x6046, 0x1078, 0x4eae, 0x1078, 0x49ce, 0x1078, 0x4a3e, 0x6000,
-+ 0xa086, 0x0000, 0x00c0, 0x314d, 0x6808, 0x602a, 0x1078, 0x21f7,
-+ 0x6818, 0x691c, 0x6a20, 0x6b24, 0x8007, 0x810f, 0x8217, 0x831f,
-+ 0x6016, 0x611a, 0x621e, 0x6322, 0x6c04, 0xd4f4, 0x0040, 0x30fa,
-+ 0x6830, 0x6934, 0x6a38, 0x6b3c, 0x8007, 0x810f, 0x8217, 0x831f,
-+ 0x0078, 0x30fc, 0xa084, 0xf0ff, 0x6006, 0x610a, 0x620e, 0x6312,
-+ 0x1078, 0x5b19, 0x6904, 0xd1fc, 0x0040, 0x312f, 0x0c7e, 0x2009,
-+ 0x0000, 0x20a9, 0x0001, 0x6b70, 0xd384, 0x0040, 0x312c, 0x0078,
-+ 0x3116, 0x839d, 0x00c8, 0x312c, 0x3508, 0x8109, 0x1078, 0x5480,
-+ 0x6878, 0x6016, 0x6874, 0x2008, 0xa084, 0xff00, 0x8007, 0x600a,
-+ 0xa184, 0x00ff, 0x6006, 0x8108, 0x00c0, 0x312a, 0x6003, 0x0003,
-+ 0x0078, 0x312c, 0x6003, 0x0001, 0x00f0, 0x3111, 0x0c7f, 0x0c7e,
-+ 0x2061, 0x0100, 0x602f, 0x0040, 0x602f, 0x0000, 0x0c7f, 0x1078,
-+ 0x3819, 0x0040, 0x313d, 0x1078, 0x256a, 0x60c0, 0xa005, 0x0040,
-+ 0x3149, 0x6003, 0x0001, 0x2091, 0x301d, 0x1078, 0x4224, 0x0078,
-+ 0x314d, 0x6003, 0x0004, 0x2091, 0x301d, 0x0078, 0x2bad, 0x6000,
-+ 0xa086, 0x0000, 0x0040, 0x2bd7, 0x2069, 0xa652, 0x7830, 0x6842,
-+ 0x7834, 0x6846, 0x6804, 0xd0fc, 0x0040, 0x3162, 0x2009, 0x0030,
-+ 0x0078, 0x3164, 0x2009, 0x001c, 0x2d00, 0x7a2c, 0x7b28, 0x7c3c,
-+ 0x7d38, 0x0078, 0x3608, 0xa006, 0x1078, 0x256a, 0x81ff, 0x00c0,
-+ 0x2bd7, 0x1078, 0x42dd, 0x1078, 0x4224, 0x0078, 0x2bad, 0x81ff,
-+ 0x00c0, 0x2bd7, 0x6184, 0x81ff, 0x0040, 0x3191, 0x703f, 0x0000,
-+ 0x2001, 0xacc0, 0x2009, 0x0040, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38,
-+ 0x127e, 0x2091, 0x8000, 0x1078, 0x3608, 0x701b, 0x2baa, 0x127f,
-+ 0x007c, 0x703f, 0x0001, 0x0d7e, 0x2069, 0xacc0, 0x20a9, 0x0040,
-+ 0x20a1, 0xacc0, 0x2019, 0xffff, 0x43a4, 0x6550, 0xa588, 0x29c0,
-+ 0x210c, 0xa18c, 0x00ff, 0x216a, 0xa00e, 0x2011, 0x0002, 0x2100,
-+ 0xa506, 0x0040, 0x31c3, 0x1078, 0x45c4, 0x00c0, 0x31c3, 0x6014,
-+ 0x821c, 0x0048, 0x31bb, 0xa398, 0xacc0, 0xa085, 0xff00, 0x8007,
-+ 0x201a, 0x0078, 0x31c2, 0xa398, 0xacc0, 0x2324, 0xa4a4, 0xff00,
-+ 0xa405, 0x201a, 0x8210, 0x8108, 0xa182, 0x0080, 0x00c8, 0x31ca,
-+ 0x0078, 0x31a7, 0x8201, 0x8007, 0x2d0c, 0xa105, 0x206a, 0x0d7f,
-+ 0x20a9, 0x0040, 0x20a1, 0xacc0, 0x2099, 0xacc0, 0x1078, 0x4281,
-+ 0x0078, 0x3180, 0x1078, 0x35e4, 0x0040, 0x2bdb, 0x0c7e, 0x1078,
-+ 0x35ba, 0x0c7f, 0x00c0, 0x31e8, 0x2009, 0x0002, 0x0078, 0x2bd7,
-+ 0x2001, 0xa653, 0x2004, 0xd0b4, 0x0040, 0x320f, 0x6000, 0xd08c,
-+ 0x00c0, 0x320f, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0,
-+ 0x320f, 0x6837, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x1078, 0x8e9e,
-+ 0x00c0, 0x3206, 0x2009, 0x0003, 0x0078, 0x2bd7, 0x7007, 0x0003,
-+ 0x701b, 0x320b, 0x007c, 0x1078, 0x35e4, 0x0040, 0x2bdb, 0x20a9,
-+ 0x002b, 0x2c98, 0xade8, 0x0002, 0x2da0, 0x53a3, 0x20a9, 0x0004,
-+ 0xac80, 0x0006, 0x2098, 0xad80, 0x0006, 0x20a0, 0x1078, 0x4281,
-+ 0x20a9, 0x0004, 0xac80, 0x000a, 0x2098, 0xad80, 0x000a, 0x20a0,
-+ 0x1078, 0x4281, 0x2d00, 0x2009, 0x002b, 0x7a2c, 0x7b28, 0x7c3c,
-+ 0x7d38, 0x0078, 0x3608, 0x81ff, 0x00c0, 0x2bd7, 0x1078, 0x35d2,
-+ 0x0040, 0x2bdb, 0x1078, 0x47bd, 0x0078, 0x2bad, 0x81ff, 0x00c0,
-+ 0x2bd7, 0x7828, 0xa08a, 0x1000, 0x00c8, 0x2bdb, 0x1078, 0x35e4,
-+ 0x0040, 0x2bdb, 0x1078, 0x482f, 0x0040, 0x2bd7, 0x2019, 0x0004,
-+ 0x1078, 0x47d3, 0x7924, 0x810f, 0x7a28, 0x1078, 0x3259, 0x0078,
-+ 0x2bad, 0xa186, 0x00ff, 0x0040, 0x3261, 0x1078, 0x3271, 0x0078,
-+ 0x3270, 0x2029, 0x007e, 0x2061, 0xa600, 0x6450, 0x2400, 0xa506,
-+ 0x0040, 0x326d, 0x2508, 0x1078, 0x3271, 0x8529, 0x00c8, 0x3266,
-+ 0x007c, 0x1078, 0x45c4, 0x00c0, 0x327c, 0x2200, 0x8003, 0x800b,
-+ 0x810b, 0xa108, 0x1078, 0x5a52, 0x007c, 0x81ff, 0x00c0, 0x2bd7,
-+ 0x1078, 0x35d2, 0x0040, 0x2bdb, 0x1078, 0x4673, 0x0040, 0x2bd7,
-+ 0x1078, 0x47c8, 0x0078, 0x2bad, 0x81ff, 0x00c0, 0x2bd7, 0x1078,
-+ 0x35d2, 0x0040, 0x2bdb, 0x1078, 0x4673, 0x0040, 0x2bd7, 0x1078,
-+ 0x47b2, 0x0078, 0x2bad, 0x6100, 0x0078, 0x2bad, 0x1078, 0x35e4,
-+ 0x0040, 0x2bdb, 0x2001, 0xa600, 0x2004, 0xa086, 0x0003, 0x00c0,
-+ 0x2bd7, 0x0d7e, 0xace8, 0x000a, 0x7924, 0xd184, 0x0040, 0x32b2,
-+ 0xace8, 0x0006, 0x680c, 0x8007, 0x783e, 0x6808, 0x8007, 0x783a,
-+ 0x6b04, 0x831f, 0x6a00, 0x8217, 0x0d7f, 0x6100, 0xa18c, 0x0200,
-+ 0x0078, 0x2bad, 0xa006, 0x1078, 0x256a, 0x7824, 0xa084, 0x00ff,
-+ 0xa086, 0x00ff, 0x0040, 0x32cf, 0x81ff, 0x00c0, 0x2bd7, 0x1078,
-+ 0x42dd, 0x7828, 0xa08a, 0x1000, 0x00c8, 0x2bdb, 0x7924, 0xa18c,
-+ 0xff00, 0x810f, 0xa186, 0x00ff, 0x0040, 0x32e5, 0xa182, 0x007f,
-+ 0x00c8, 0x2bdb, 0x2100, 0x1078, 0x2564, 0x027e, 0x0c7e, 0x127e,
-+ 0x2091, 0x8000, 0x2061, 0xa8c4, 0x601b, 0x0000, 0x601f, 0x0000,
-+ 0x2011, 0x0003, 0x1078, 0x70e0, 0x2011, 0x0002, 0x1078, 0x70ea,
-+ 0x1078, 0x6fc4, 0x037e, 0x2019, 0x0000, 0x1078, 0x7058, 0x037f,
-+ 0x2061, 0x0100, 0x6030, 0xa084, 0x00ff, 0x810f, 0xa105, 0x604a,
-+ 0x6043, 0x0090, 0x6043, 0x0010, 0x2009, 0x002d, 0x2011, 0x4259,
-+ 0x1078, 0x5add, 0x7924, 0xa18c, 0xff00, 0x810f, 0x7a28, 0x1078,
-+ 0x3259, 0x127f, 0x0c7f, 0x027f, 0x0078, 0x2bad, 0x7924, 0xa18c,
-+ 0xff00, 0x810f, 0x0c7e, 0x1078, 0x455c, 0x2c08, 0x0c7f, 0x00c0,
-+ 0x2bdb, 0x0078, 0x2bad, 0x81ff, 0x0040, 0x3332, 0x2009, 0x0001,
-+ 0x0078, 0x2bd7, 0x60cc, 0xd09c, 0x00c0, 0x333a, 0x2009, 0x0005,
-+ 0x0078, 0x2bd7, 0x1078, 0x35ba, 0x00c0, 0x3342, 0x2009, 0x0002,
-+ 0x0078, 0x2bd7, 0x7924, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x1078,
-+ 0x3604, 0x701b, 0x334c, 0x007c, 0x2009, 0x0080, 0x1078, 0x45c4,
-+ 0x00c0, 0x3359, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x0040,
-+ 0x335d, 0x2021, 0x400a, 0x0078, 0x2baf, 0x0d7e, 0xade8, 0x000d,
-+ 0x6900, 0x6a08, 0x6b0c, 0x6c10, 0x6d14, 0x6e18, 0x6820, 0xa0be,
-+ 0x0100, 0x0040, 0x33d0, 0xa0be, 0x0112, 0x0040, 0x33d0, 0xa0be,
-+ 0x0113, 0x0040, 0x33d0, 0xa0be, 0x0114, 0x0040, 0x33d0, 0xa0be,
-+ 0x0117, 0x0040, 0x33d0, 0xa0be, 0x011a, 0x0040, 0x33d0, 0xa0be,
-+ 0x0121, 0x0040, 0x33c6, 0xa0be, 0x0131, 0x0040, 0x33c6, 0xa0be,
-+ 0x0171, 0x0040, 0x33d0, 0xa0be, 0x0173, 0x0040, 0x33d0, 0xa0be,
-+ 0x01a1, 0x00c0, 0x3398, 0x6830, 0x8007, 0x6832, 0x0078, 0x33d6,
-+ 0xa0be, 0x0212, 0x0040, 0x33cc, 0xa0be, 0x0213, 0x0040, 0x33cc,
-+ 0xa0be, 0x0214, 0x0040, 0x33be, 0xa0be, 0x0217, 0x0040, 0x33b8,
-+ 0xa0be, 0x021a, 0x00c0, 0x33b1, 0x6838, 0x8007, 0x683a, 0x0078,
-+ 0x33d0, 0xa0be, 0x0300, 0x0040, 0x33d0, 0x0d7f, 0x0078, 0x2bdb,
-+ 0xad80, 0x0010, 0x20a9, 0x0007, 0x1078, 0x3418, 0xad80, 0x000e,
-+ 0x20a9, 0x0001, 0x1078, 0x3418, 0x0078, 0x33d0, 0xad80, 0x000c,
-+ 0x1078, 0x3426, 0x0078, 0x33d6, 0xad80, 0x000e, 0x1078, 0x3426,
-+ 0xad80, 0x000c, 0x20a9, 0x0001, 0x1078, 0x3418, 0x0c7e, 0x1078,
-+ 0x35ba, 0x0040, 0x3409, 0x6838, 0xc0fd, 0x683a, 0x6837, 0x0119,
-+ 0x6853, 0x0000, 0x684f, 0x0020, 0x685b, 0x0001, 0x810b, 0x697e,
-+ 0x6883, 0x0000, 0x6a86, 0x6b8a, 0x6c8e, 0x6d92, 0x6996, 0x689b,
-+ 0x0000, 0x0c7f, 0x0d7f, 0x6837, 0x0000, 0x6838, 0xc0fd, 0x683a,
-+ 0x6823, 0x0000, 0x6804, 0x2068, 0x1078, 0x8e66, 0x00c0, 0x3404,
-+ 0x2009, 0x0003, 0x0078, 0x2bd7, 0x7007, 0x0003, 0x701b, 0x340f,
-+ 0x007c, 0x0c7f, 0x0d7f, 0x2009, 0x0002, 0x0078, 0x2bd7, 0x6820,
-+ 0xa086, 0x8001, 0x00c0, 0x2bad, 0x2009, 0x0004, 0x0078, 0x2bd7,
-+ 0x017e, 0x2008, 0x2044, 0x8000, 0x204c, 0x8000, 0x290a, 0x8108,
-+ 0x280a, 0x8108, 0x00f0, 0x341a, 0x017f, 0x007c, 0x017e, 0x0a7e,
-+ 0x0b7e, 0x2008, 0x2044, 0x8000, 0x204c, 0x8000, 0x2054, 0x8000,
-+ 0x205c, 0x2b0a, 0x8108, 0x2a0a, 0x8108, 0x290a, 0x8108, 0x280a,
-+ 0x0b7f, 0x0a7f, 0x017f, 0x007c, 0x81ff, 0x0040, 0x3443, 0x2009,
-+ 0x0001, 0x0078, 0x2bd7, 0x60cc, 0xd09c, 0x00c0, 0x344b, 0x2009,
-+ 0x0005, 0x0078, 0x2bd7, 0x7924, 0x2140, 0xa18c, 0xff00, 0x810f,
-+ 0xa182, 0x0080, 0x0048, 0x2bdb, 0xa182, 0x00ff, 0x00c8, 0x2bdb,
-+ 0x7a2c, 0x7b28, 0x606c, 0xa306, 0x00c0, 0x3466, 0x6070, 0xa24e,
-+ 0x0040, 0x2bdb, 0xa9cc, 0xff00, 0x0040, 0x2bdb, 0x0c7e, 0x1078,
-+ 0x350f, 0x2c68, 0x0c7f, 0x0040, 0x349e, 0xa0c6, 0x4000, 0x00c0,
-+ 0x3484, 0x0c7e, 0x007e, 0x2d60, 0x2009, 0x0000, 0x1078, 0x489b,
-+ 0x00c0, 0x347b, 0xc185, 0x6000, 0xd0bc, 0x0040, 0x3480, 0xc18d,
-+ 0x007f, 0x0c7f, 0x0078, 0x349b, 0xa0c6, 0x4007, 0x00c0, 0x348b,
-+ 0x2408, 0x0078, 0x349b, 0xa0c6, 0x4008, 0x00c0, 0x3493, 0x2708,
-+ 0x2610, 0x0078, 0x349b, 0xa0c6, 0x4009, 0x00c0, 0x3499, 0x0078,
-+ 0x349b, 0x2001, 0x4006, 0x2020, 0x0078, 0x2baf, 0x2d00, 0x7022,
-+ 0x017e, 0x0b7e, 0x0c7e, 0x0e7e, 0x2c70, 0x1078, 0x76c7, 0x0040,
-+ 0x34e4, 0x2d00, 0x601a, 0x2001, 0xa657, 0x2004, 0xa084, 0x00ff,
-+ 0x6842, 0x2e58, 0x0e7f, 0x0e7e, 0x0c7e, 0x1078, 0x35ba, 0x0c7f,
-+ 0x2b70, 0x00c0, 0x34c5, 0x1078, 0x772d, 0x0e7f, 0x0c7f, 0x0b7f,
-+ 0x017f, 0x2009, 0x0002, 0x0078, 0x2bd7, 0x6837, 0x0000, 0x2d00,
-+ 0x6012, 0x6833, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x127e, 0x2091,
-+ 0x8000, 0x1078, 0x2880, 0x127f, 0x601f, 0x0001, 0x2001, 0x0000,
-+ 0x1078, 0x44ee, 0x2001, 0x0002, 0x1078, 0x4502, 0x2009, 0x0002,
-+ 0x1078, 0x775c, 0xa085, 0x0001, 0x0e7f, 0x0c7f, 0x0b7f, 0x017f,
-+ 0x00c0, 0x34ee, 0x2009, 0x0003, 0x0078, 0x2bd7, 0x7007, 0x0003,
-+ 0x701b, 0x34f3, 0x007c, 0x6830, 0xa086, 0x0100, 0x7020, 0x2060,
-+ 0x00c0, 0x3501, 0x2009, 0x0004, 0x6204, 0xa294, 0x00ff, 0x0078,
-+ 0x2bd7, 0x2009, 0x0000, 0x1078, 0x489b, 0x00c0, 0x3508, 0xc185,
-+ 0x6000, 0xd0bc, 0x0040, 0x350d, 0xc18d, 0x0078, 0x2bad, 0x0e7e,
-+ 0x0d7e, 0x2029, 0x0000, 0x2021, 0x0080, 0x20a9, 0x007f, 0x2071,
-+ 0xa7b5, 0x2e04, 0xa005, 0x00c0, 0x3524, 0x2100, 0xa406, 0x00c0,
-+ 0x3555, 0x2428, 0x0078, 0x3555, 0x2068, 0x6f10, 0x2700, 0xa306,
-+ 0x00c0, 0x3546, 0x6e14, 0x2600, 0xa206, 0x00c0, 0x3546, 0x2400,
-+ 0xa106, 0x00c0, 0x3542, 0x2d60, 0xd884, 0x0040, 0x356a, 0x6004,
-+ 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x356a, 0x2001, 0x4000,
-+ 0x0078, 0x356b, 0x2001, 0x4007, 0x0078, 0x356b, 0x2400, 0xa106,
-+ 0x00c0, 0x3555, 0x6e14, 0x87ff, 0x00c0, 0x3551, 0x86ff, 0x0040,
-+ 0x3521, 0x2001, 0x4008, 0x0078, 0x356b, 0x8420, 0x8e70, 0x00f0,
-+ 0x3519, 0x85ff, 0x00c0, 0x3564, 0x2001, 0x4009, 0x0078, 0x356b,
-+ 0x2001, 0x0001, 0x0078, 0x356b, 0x1078, 0x455c, 0x00c0, 0x3560,
-+ 0x6312, 0x6216, 0xa006, 0xa005, 0x0d7f, 0x0e7f, 0x007c, 0x81ff,
-+ 0x00c0, 0x2bd7, 0x1078, 0x35ba, 0x0040, 0x2bd7, 0x6837, 0x0000,
-+ 0x6838, 0xc0fd, 0x683a, 0x7824, 0xa005, 0x0040, 0x2bdb, 0xa096,
-+ 0x00ff, 0x0040, 0x3587, 0xa092, 0x0004, 0x00c8, 0x2bdb, 0x2010,
-+ 0x2d18, 0x1078, 0x282f, 0x0040, 0x2bd7, 0x7007, 0x0003, 0x701b,
-+ 0x3592, 0x007c, 0x6830, 0xa086, 0x0100, 0x0040, 0x2bd7, 0x0078,
-+ 0x2bad, 0x7924, 0xa18c, 0xff00, 0x810f, 0xa182, 0x0080, 0x0048,
-+ 0x2bdb, 0xa182, 0x00ff, 0x00c8, 0x2bdb, 0x127e, 0x2091, 0x8000,
-+ 0x1078, 0x8d4b, 0x00c0, 0x35b7, 0xa190, 0xa735, 0x2204, 0xa065,
-+ 0x0040, 0x35b7, 0x1078, 0x42f8, 0x127f, 0x0078, 0x2bad, 0x127f,
-+ 0x0078, 0x2bd7, 0x1078, 0x138b, 0x0040, 0x35d1, 0xa006, 0x6802,
-+ 0x7010, 0xa005, 0x00c0, 0x35c9, 0x2d00, 0x7012, 0x7016, 0x0078,
-+ 0x35cf, 0x7014, 0x6802, 0x2060, 0x2d00, 0x6006, 0x7016, 0xad80,
-+ 0x000d, 0x007c, 0x7924, 0x810f, 0xa18c, 0x00ff, 0x1078, 0x45c4,
-+ 0x00c0, 0x35e1, 0x7e28, 0xa684, 0x3fff, 0xa082, 0x4000, 0x0048,
-+ 0x35e2, 0xa066, 0x8cff, 0x007c, 0x7e24, 0x860f, 0xa18c, 0x00ff,
-+ 0x1078, 0x45c4, 0x00c0, 0x35f2, 0xa6b4, 0x00ff, 0xa682, 0x4000,
-+ 0x0048, 0x35f3, 0xa066, 0x8cff, 0x007c, 0x017e, 0x7110, 0x81ff,
-+ 0x0040, 0x3600, 0x2168, 0x6904, 0x1078, 0x13a4, 0x0078, 0x35f7,
-+ 0x7112, 0x7116, 0x017f, 0x007c, 0x2031, 0x0001, 0x0078, 0x360a,
-+ 0x2031, 0x0000, 0x2061, 0xa6d2, 0x6606, 0x6112, 0x600e, 0x6226,
-+ 0x632a, 0x642e, 0x6532, 0x2c10, 0x1078, 0x13db, 0x7007, 0x0002,
-+ 0x701b, 0x2bad, 0x007c, 0x0f7e, 0x127e, 0x2091, 0x8000, 0x2079,
-+ 0x0000, 0x2001, 0xa690, 0x2004, 0xa005, 0x00c0, 0x3636, 0x0068,
-+ 0x3636, 0x7818, 0xd084, 0x00c0, 0x3636, 0x7a22, 0x7b26, 0x7c2a,
-+ 0x781b, 0x0001, 0x2091, 0x4080, 0x0078, 0x365b, 0x017e, 0x0c7e,
-+ 0x0e7e, 0x2071, 0xa682, 0x7138, 0xa182, 0x0008, 0x0048, 0x3644,
-+ 0x7030, 0x2060, 0x0078, 0x3655, 0x7030, 0xa0e0, 0x0008, 0xac82,
-+ 0xa6d2, 0x0048, 0x364d, 0x2061, 0xa692, 0x2c00, 0x7032, 0x81ff,
-+ 0x00c0, 0x3653, 0x7036, 0x8108, 0x713a, 0x2262, 0x6306, 0x640a,
-+ 0x0e7f, 0x0c7f, 0x017f, 0x127f, 0x0f7f, 0x007c, 0x0e7e, 0x2071,
-+ 0xa682, 0x7038, 0xa005, 0x0040, 0x3697, 0x127e, 0x2091, 0x8000,
-+ 0x0068, 0x3696, 0x0f7e, 0x2079, 0x0000, 0x7818, 0xd084, 0x00c0,
-+ 0x3695, 0x0c7e, 0x7034, 0x2060, 0x2c04, 0x7822, 0x6004, 0x7826,
-+ 0x6008, 0x782a, 0x781b, 0x0001, 0x2091, 0x4080, 0x7038, 0x8001,
-+ 0x703a, 0xa005, 0x00c0, 0x368b, 0x7033, 0xa692, 0x7037, 0xa692,
-+ 0x0c7f, 0x0078, 0x3695, 0xac80, 0x0008, 0xa0fa, 0xa6d2, 0x0048,
-+ 0x3693, 0x2001, 0xa692, 0x7036, 0x0c7f, 0x0f7f, 0x127f, 0x0e7f,
-+ 0x007c, 0x027e, 0x2001, 0xa653, 0x2004, 0xd0c4, 0x0040, 0x36a4,
-+ 0x2011, 0x8014, 0x1078, 0x361b, 0x027f, 0x007c, 0x81ff, 0x00c0,
-+ 0x2bd7, 0x127e, 0x2091, 0x8000, 0x6030, 0xc08d, 0xc085, 0xc0ac,
-+ 0x6032, 0x1078, 0x4224, 0x127f, 0x0078, 0x2bad, 0x81ff, 0x00c0,
-+ 0x2bd7, 0x6000, 0xa086, 0x0003, 0x00c0, 0x2bd7, 0x2001, 0xa653,
-+ 0x2004, 0xd0ac, 0x00c0, 0x2bd7, 0x1078, 0x35e4, 0x0040, 0x2bdb,
-+ 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x36d3, 0x7828,
-+ 0xa005, 0x0040, 0x2bad, 0x0c7e, 0x1078, 0x35ba, 0x0c7f, 0x0040,
-+ 0x2bd7, 0x6837, 0x0000, 0x6833, 0x0000, 0x6838, 0xc0fd, 0x683a,
-+ 0x1078, 0x8f12, 0x0040, 0x2bd7, 0x7007, 0x0003, 0x701b, 0x36e9,
-+ 0x007c, 0x6830, 0xa086, 0x0100, 0x0040, 0x2bd7, 0x0078, 0x2bad,
-+ 0x2001, 0xa600, 0x2004, 0xa086, 0x0003, 0x00c0, 0x2bd7, 0x7f24,
-+ 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x1078, 0x35ba, 0x0040, 0x2bd7,
-+ 0x2009, 0x0000, 0x2031, 0x0000, 0x7023, 0x0000, 0x702f, 0x0000,
-+ 0xad80, 0x0005, 0x7026, 0x20a0, 0x1078, 0x45c4, 0x00c0, 0x376d,
-+ 0x6004, 0xa0c4, 0x00ff, 0xa8c6, 0x0006, 0x0040, 0x371d, 0xa0c4,
-+ 0xff00, 0xa8c6, 0x0600, 0x00c0, 0x376d, 0x2001, 0xa653, 0x2004,
-+ 0xd0ac, 0x00c0, 0x372a, 0x1078, 0x489b, 0x00c0, 0x372a, 0xd79c,
-+ 0x0040, 0x376d, 0xd794, 0x00c0, 0x3730, 0xd784, 0x0040, 0x373c,
-+ 0xac80, 0x0006, 0x2098, 0x3400, 0x20a9, 0x0004, 0x53a3, 0x1078,
-+ 0x3426, 0xd794, 0x0040, 0x3745, 0xac80, 0x000a, 0x2098, 0x3400,
-+ 0x20a9, 0x0004, 0x53a3, 0x1078, 0x3426, 0x21a2, 0xd794, 0x0040,
-+ 0x3765, 0xac80, 0x0000, 0x2098, 0x94a0, 0x20a9, 0x0002, 0x53a3,
-+ 0xac80, 0x0003, 0x20a6, 0x94a0, 0xac80, 0x0004, 0x2098, 0x3400,
-+ 0x20a9, 0x0002, 0x53a3, 0x1078, 0x3418, 0xac80, 0x0026, 0x2098,
-+ 0x20a9, 0x0002, 0x53a3, 0x0078, 0x3766, 0x94a0, 0xd794, 0x0040,
-+ 0x376b, 0xa6b0, 0x000b, 0xa6b0, 0x0005, 0x8108, 0xd78c, 0x0040,
-+ 0x3777, 0xa186, 0x0100, 0x0040, 0x3788, 0x0078, 0x377b, 0xa186,
-+ 0x007e, 0x0040, 0x3788, 0xd794, 0x0040, 0x3782, 0xa686, 0x0020,
-+ 0x0078, 0x3784, 0xa686, 0x0028, 0x0040, 0x3791, 0x0078, 0x370c,
-+ 0x86ff, 0x00c0, 0x378f, 0x7120, 0x810b, 0x0078, 0x2bad, 0x702f,
-+ 0x0001, 0x711e, 0x7020, 0xa600, 0x7022, 0x772a, 0x2061, 0xa6d2,
-+ 0x6007, 0x0000, 0x6612, 0x7024, 0x600e, 0x6226, 0x632a, 0x642e,
-+ 0x6532, 0x2c10, 0x1078, 0x13db, 0x7007, 0x0002, 0x701b, 0x37a9,
-+ 0x007c, 0x702c, 0xa005, 0x00c0, 0x37bb, 0x711c, 0x7024, 0x20a0,
-+ 0x7728, 0x2031, 0x0000, 0x2061, 0xa6d2, 0x6224, 0x6328, 0x642c,
-+ 0x6530, 0x0078, 0x370c, 0x7120, 0x810b, 0x0078, 0x2bad, 0x2029,
-+ 0x007e, 0x7924, 0x7a28, 0x7b2c, 0x7c38, 0xa184, 0xff00, 0x8007,
-+ 0xa0e2, 0x0020, 0x0048, 0x2bdb, 0xa502, 0x0048, 0x2bdb, 0xa184,
-+ 0x00ff, 0xa0e2, 0x0020, 0x0048, 0x2bdb, 0xa502, 0x0048, 0x2bdb,
-+ 0xa284, 0xff00, 0x8007, 0xa0e2, 0x0020, 0x0048, 0x2bdb, 0xa502,
-+ 0x0048, 0x2bdb, 0xa284, 0x00ff, 0xa0e2, 0x0020, 0x0048, 0x2bdb,
-+ 0xa502, 0x0048, 0x2bdb, 0xa384, 0xff00, 0x8007, 0xa0e2, 0x0020,
-+ 0x0048, 0x2bdb, 0xa502, 0x0048, 0x2bdb, 0xa384, 0x00ff, 0xa0e2,
-+ 0x0020, 0x0048, 0x2bdb, 0xa502, 0x0048, 0x2bdb, 0xa484, 0xff00,
-+ 0x8007, 0xa0e2, 0x0020, 0x0048, 0x2bdb, 0xa502, 0x0048, 0x2bdb,
-+ 0xa484, 0x00ff, 0xa0e2, 0x0020, 0x0048, 0x2bdb, 0xa502, 0x0048,
-+ 0x2bdb, 0x2061, 0xa8a5, 0x6102, 0x6206, 0x630a, 0x640e, 0x0078,
-+ 0x2bad, 0x007e, 0x2001, 0xa653, 0x2004, 0xd0cc, 0x007f, 0x007c,
-+ 0x007e, 0x2001, 0xa672, 0x2004, 0xd0bc, 0x007f, 0x007c, 0x6164,
-+ 0x7a24, 0x6300, 0x82ff, 0x00c0, 0x3830, 0x7926, 0x0078, 0x2bad,
-+ 0x83ff, 0x00c0, 0x2bdb, 0x2001, 0xfff0, 0xa200, 0x00c8, 0x2bdb,
-+ 0x2019, 0xffff, 0x6068, 0xa302, 0xa200, 0x0048, 0x2bdb, 0x7926,
-+ 0x6266, 0x0078, 0x2bad, 0x2001, 0xa600, 0x2004, 0xa086, 0x0003,
-+ 0x00c0, 0x2bd7, 0x7c28, 0x7d24, 0x7e38, 0x7f2c, 0x1078, 0x35ba,
-+ 0x0040, 0x2bd7, 0x2009, 0x0000, 0x2019, 0x0000, 0x7023, 0x0000,
-+ 0x702f, 0x0000, 0xad80, 0x0003, 0x7026, 0x20a0, 0xa1e0, 0xa735,
-+ 0x2c64, 0x8cff, 0x0040, 0x387d, 0x6004, 0xa084, 0x00ff, 0xa086,
-+ 0x0006, 0x0040, 0x3872, 0x6004, 0xa084, 0xff00, 0xa086, 0x0600,
-+ 0x00c0, 0x387d, 0x6014, 0x20a2, 0x94a0, 0x6010, 0x8007, 0xa105,
-+ 0x8007, 0x20a2, 0x94a0, 0xa398, 0x0002, 0x8108, 0xa182, 0x00ff,
-+ 0x0040, 0x3888, 0xa386, 0x002a, 0x0040, 0x3891, 0x0078, 0x385e,
-+ 0x83ff, 0x00c0, 0x388f, 0x7120, 0x810c, 0x0078, 0x2bad, 0x702f,
-+ 0x0001, 0x711e, 0x7020, 0xa300, 0x7022, 0x2061, 0xa6d2, 0x6007,
-+ 0x0000, 0x6312, 0x7024, 0x600e, 0x6426, 0x652a, 0x662e, 0x6732,
-+ 0x2c10, 0x1078, 0x13db, 0x7007, 0x0002, 0x701b, 0x38a8, 0x007c,
-+ 0x702c, 0xa005, 0x00c0, 0x38b9, 0x711c, 0x7024, 0x20a0, 0x2019,
-+ 0x0000, 0x2061, 0xa6d2, 0x6424, 0x6528, 0x662c, 0x6730, 0x0078,
-+ 0x385e, 0x7120, 0x810c, 0x0078, 0x2bad, 0x81ff, 0x00c0, 0x2bd7,
-+ 0x60cc, 0xd09c, 0x0040, 0x2bd7, 0x1078, 0x35ba, 0x0040, 0x2bd7,
-+ 0x7924, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x1078, 0x3604, 0x701b,
-+ 0x38d2, 0x007c, 0x0d7e, 0xade8, 0x000d, 0x6828, 0xa0be, 0x7000,
-+ 0x0040, 0x38e5, 0xa0be, 0x7100, 0x0040, 0x38e5, 0xa0be, 0x7200,
-+ 0x0040, 0x38e5, 0x0d7f, 0x0078, 0x2bdb, 0x6820, 0x6924, 0x1078,
-+ 0x254d, 0x00c0, 0x3910, 0x1078, 0x455c, 0x00c0, 0x3910, 0x7122,
-+ 0x6612, 0x6516, 0x6e18, 0x0c7e, 0x1078, 0x35ba, 0x0040, 0x3910,
-+ 0x1078, 0x35ba, 0x0040, 0x3910, 0x0c7f, 0x0d7f, 0x6837, 0x0000,
-+ 0x6838, 0xc0fd, 0x683a, 0x6823, 0x0000, 0x6804, 0x2068, 0x1078,
-+ 0x8e82, 0x0040, 0x2bd7, 0x7007, 0x0003, 0x701b, 0x3913, 0x007c,
-+ 0x0d7f, 0x0078, 0x2bd7, 0x7120, 0x1078, 0x298e, 0x6820, 0xa086,
-+ 0x8001, 0x0040, 0x2bd7, 0x2d00, 0x701e, 0x6804, 0xa080, 0x0002,
-+ 0x007e, 0x20a9, 0x002a, 0x2098, 0x20a0, 0x1078, 0x4281, 0x007f,
-+ 0xade8, 0x000d, 0x6a08, 0x6b0c, 0x6c10, 0x6d14, 0x2061, 0xa6d2,
-+ 0x6007, 0x0000, 0x6e00, 0x6f28, 0xa7c6, 0x7000, 0x00c0, 0x393a,
-+ 0x0078, 0x393e, 0xa7c6, 0x7100, 0x00c0, 0x3946, 0xa6c2, 0x0004,
-+ 0x0048, 0x2bdb, 0x2009, 0x0004, 0x0078, 0x3608, 0xa7c6, 0x7200,
-+ 0x00c0, 0x2bdb, 0xa6c2, 0x0054, 0x0048, 0x2bdb, 0x600e, 0x6013,
-+ 0x002a, 0x6226, 0x632a, 0x642e, 0x6532, 0x2c10, 0x1078, 0x13db,
-+ 0x7007, 0x0002, 0x701b, 0x395d, 0x007c, 0x701c, 0x2068, 0x6804,
-+ 0xa080, 0x0001, 0x2004, 0xa080, 0x0002, 0x007e, 0x20a9, 0x002a,
-+ 0x2098, 0x20a0, 0x1078, 0x4281, 0x007f, 0x2009, 0x002a, 0x2061,
-+ 0xa6d2, 0x6224, 0x6328, 0x642c, 0x6530, 0x0078, 0x3608, 0x81ff,
-+ 0x00c0, 0x2bd7, 0x792c, 0x2001, 0xa89d, 0x2102, 0x1078, 0x35d2,
-+ 0x0040, 0x2bdb, 0x1078, 0x4673, 0x0040, 0x2bd7, 0x127e, 0x2091,
-+ 0x8000, 0x1078, 0x47de, 0x127f, 0x0078, 0x2bad, 0x7824, 0xd08c,
-+ 0x00c0, 0x3995, 0xd084, 0x0040, 0x31da, 0x1078, 0x35e4, 0x0040,
-+ 0x2bdb, 0x0c7e, 0x1078, 0x35ba, 0x0c7f, 0x00c0, 0x39a3, 0x2009,
-+ 0x0002, 0x0078, 0x2bd7, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006,
-+ 0x0040, 0x39b0, 0xa08e, 0x0004, 0x0040, 0x39b0, 0xa08e, 0x0005,
-+ 0x00c0, 0x39dd, 0x7824, 0xd08c, 0x0040, 0x39bb, 0x6000, 0xc08c,
-+ 0x6002, 0x0078, 0x39c5, 0x2001, 0xa653, 0x2004, 0xd0b4, 0x0040,
-+ 0x320f, 0x6000, 0xd08c, 0x00c0, 0x320f, 0x6837, 0x0000, 0x6838,
-+ 0xc0fd, 0x683a, 0x1078, 0x8e9e, 0x00c0, 0x39d2, 0x2009, 0x0003,
-+ 0x0078, 0x2bd7, 0x7007, 0x0003, 0x701b, 0x39d7, 0x007c, 0x1078,
-+ 0x35e4, 0x0040, 0x2bdb, 0x0078, 0x320f, 0x2009, 0xa62f, 0x210c,
-+ 0x81ff, 0x0040, 0x39e7, 0x2009, 0x0001, 0x0078, 0x2bd7, 0x2001,
-+ 0xa600, 0x2004, 0xa086, 0x0003, 0x0040, 0x39f2, 0x2009, 0x0007,
-+ 0x0078, 0x2bd7, 0x2001, 0xa653, 0x2004, 0xd0ac, 0x0040, 0x39fc,
-+ 0x2009, 0x0008, 0x0078, 0x2bd7, 0x609c, 0xd0a4, 0x00c0, 0x3a03,
-+ 0xd0ac, 0x00c0, 0x320f, 0x6837, 0x0000, 0x6833, 0x0000, 0x6838,
-+ 0xc0fd, 0x683a, 0x1078, 0x8f12, 0x00c0, 0x3a12, 0x2009, 0x0003,
-+ 0x0078, 0x2bd7, 0x7007, 0x0003, 0x701b, 0x3a17, 0x007c, 0x6830,
-+ 0xa086, 0x0100, 0x00c0, 0x3a20, 0x2009, 0x0004, 0x0078, 0x2bd7,
-+ 0x1078, 0x35e4, 0x0040, 0x2bdb, 0x0078, 0x39b2, 0x81ff, 0x2009,
-+ 0x0001, 0x00c0, 0x2bd7, 0x6000, 0xa086, 0x0003, 0x2009, 0x0007,
-+ 0x00c0, 0x2bd7, 0x2001, 0xa653, 0x2004, 0xd0ac, 0x2009, 0x0008,
-+ 0x00c0, 0x2bd7, 0x1078, 0x35e4, 0x0040, 0x2bdb, 0x6004, 0xa084,
-+ 0x00ff, 0xa086, 0x0006, 0x2009, 0x0009, 0x00c0, 0x2bd7, 0x0c7e,
-+ 0x1078, 0x35ba, 0x0c7f, 0x2009, 0x0002, 0x0040, 0x2bd7, 0x6837,
-+ 0x0000, 0x6833, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x7928, 0xa194,
-+ 0xff00, 0xa18c, 0x00ff, 0xa006, 0x82ff, 0x00c0, 0x3a65, 0xc0ed,
-+ 0x6952, 0x792c, 0x6956, 0x0078, 0x3a6e, 0xa28e, 0x0100, 0x00c0,
-+ 0x2bdb, 0xc0e5, 0x6853, 0x0000, 0x6857, 0x0000, 0x683e, 0x1078,
-+ 0x90bd, 0x2009, 0x0003, 0x0040, 0x2bd7, 0x7007, 0x0003, 0x701b,
-+ 0x3a7a, 0x007c, 0x6830, 0xa086, 0x0100, 0x2009, 0x0004, 0x0040,
-+ 0x2bd7, 0x0078, 0x2bad, 0x81ff, 0x2009, 0x0001, 0x00c0, 0x2bd7,
-+ 0x6000, 0xa086, 0x0003, 0x2009, 0x0007, 0x00c0, 0x2bd7, 0x1078,
-+ 0x35e4, 0x0040, 0x2bdb, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006,
-+ 0x2009, 0x0009, 0x00c0, 0x2bd7, 0x0c7e, 0x1078, 0x35ba, 0x0c7f,
-+ 0x2009, 0x0002, 0x0040, 0x2bd7, 0xad80, 0x000f, 0x2009, 0x0008,
-+ 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x1078, 0x3604, 0x701b, 0x3ab1,
-+ 0x007c, 0x0d7e, 0xade8, 0x000f, 0x6800, 0xa086, 0x0500, 0x00c0,
-+ 0x3ac4, 0x6804, 0xa005, 0x00c0, 0x3ac4, 0x6808, 0xa084, 0xff00,
-+ 0x00c0, 0x3ac4, 0x0078, 0x3ac7, 0x0d7f, 0x00c0, 0x2bdb, 0x0d7f,
-+ 0x6837, 0x0000, 0x6833, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x0c7e,
-+ 0x1078, 0x35e4, 0x00c0, 0x3ad7, 0x0c7f, 0x0078, 0x2bdb, 0x1078,
-+ 0x9119, 0x2009, 0x0003, 0x0c7f, 0x0040, 0x2bd7, 0x7007, 0x0003,
-+ 0x701b, 0x3ae3, 0x007c, 0x6830, 0xa086, 0x0100, 0x2009, 0x0004,
-+ 0x0040, 0x2bd7, 0x0078, 0x2bad, 0x127e, 0x0c7e, 0x0e7e, 0x2061,
-+ 0x0100, 0x2071, 0xa600, 0x6044, 0xd0a4, 0x00c0, 0x3b15, 0xd084,
-+ 0x0040, 0x3afe, 0x1078, 0x3c75, 0x0078, 0x3b11, 0xd08c, 0x0040,
-+ 0x3b05, 0x1078, 0x3b8c, 0x0078, 0x3b11, 0xd094, 0x0040, 0x3b0c,
-+ 0x1078, 0x3b60, 0x0078, 0x3b11, 0xd09c, 0x0040, 0x3b11, 0x1078,
-+ 0x3b1f, 0x0e7f, 0x0c7f, 0x127f, 0x007c, 0x017e, 0x6128, 0xd19c,
-+ 0x00c0, 0x3b1c, 0xc19d, 0x612a, 0x017f, 0x0078, 0x3b11, 0x624c,
-+ 0xa286, 0xf0f0, 0x00c0, 0x3b30, 0x6048, 0xa086, 0xf0f0, 0x0040,
-+ 0x3b30, 0x624a, 0x6043, 0x0090, 0x6043, 0x0010, 0x0078, 0x3b5f,
-+ 0xa294, 0xff00, 0xa296, 0xf700, 0x0040, 0x3b45, 0x7134, 0xd1a4,
-+ 0x00c0, 0x3b45, 0x6240, 0xa294, 0x0010, 0x0040, 0x3b45, 0x2009,
-+ 0x00f7, 0x1078, 0x42a1, 0x0078, 0x3b5f, 0x6043, 0x0040, 0x6043,
-+ 0x0000, 0x7077, 0x0000, 0x708f, 0x0001, 0x70b3, 0x0000, 0x70cf,
-+ 0x0000, 0x2009, 0xacc0, 0x200b, 0x0000, 0x7087, 0x0000, 0x707b,
-+ 0x000f, 0x2009, 0x000f, 0x2011, 0x41d5, 0x1078, 0x5add, 0x007c,
-+ 0x157e, 0x7078, 0xa005, 0x00c0, 0x3b8a, 0x2011, 0x41d5, 0x1078,
-+ 0x5a45, 0x6040, 0xa094, 0x0010, 0xa285, 0x0020, 0x6042, 0x20a9,
-+ 0x00c8, 0x6044, 0xd08c, 0x00c0, 0x3b83, 0x00f0, 0x3b71, 0x6242,
-+ 0x708b, 0x0000, 0x6040, 0xa094, 0x0010, 0xa285, 0x0080, 0x6042,
-+ 0x6242, 0x0078, 0x3b8a, 0x6242, 0x708b, 0x0000, 0x707f, 0x0000,
-+ 0x0078, 0x3b8a, 0x157f, 0x007c, 0x707c, 0xa08a, 0x0003, 0x00c8,
-+ 0x3b95, 0x1079, 0x3b98, 0x0078, 0x3b97, 0x1078, 0x1332, 0x007c,
-+ 0x3b9b, 0x3bea, 0x3c74, 0x0f7e, 0x707f, 0x0001, 0x20e1, 0xa000,
-+ 0x20e1, 0x8700, 0x1078, 0x21f7, 0x20e1, 0x9080, 0x20e1, 0x4000,
-+ 0x2079, 0xab00, 0x207b, 0x2200, 0x7807, 0x00ef, 0x780b, 0x0000,
-+ 0x780f, 0x00ef, 0x7813, 0x0138, 0x7817, 0x0000, 0x781b, 0x0000,
-+ 0x781f, 0x0000, 0x7823, 0xffff, 0x7827, 0xffff, 0x782b, 0x0000,
-+ 0x782f, 0x0000, 0x2079, 0xab0c, 0x207b, 0x1101, 0x7807, 0x0000,
-+ 0x2099, 0xa605, 0x20a1, 0xab0e, 0x20a9, 0x0004, 0x53a3, 0x2079,
-+ 0xab12, 0x207b, 0x0000, 0x7807, 0x0000, 0x2099, 0xab00, 0x20a1,
-+ 0x020b, 0x20a9, 0x0014, 0x53a6, 0x60c3, 0x000c, 0x600f, 0x0000,
-+ 0x1078, 0x420b, 0x0f7f, 0x7083, 0x0000, 0x6043, 0x0008, 0x6043,
-+ 0x0000, 0x007c, 0x0d7e, 0x7080, 0x7083, 0x0000, 0xa025, 0x0040,
-+ 0x3c5e, 0x6020, 0xd0b4, 0x00c0, 0x3c5c, 0x718c, 0x81ff, 0x0040,
-+ 0x3c4b, 0xa486, 0x000c, 0x00c0, 0x3c56, 0xa480, 0x0018, 0x8004,
-+ 0x20a8, 0x2011, 0xab80, 0x2019, 0xab00, 0x220c, 0x2304, 0xa106,
-+ 0x00c0, 0x3c22, 0x8210, 0x8318, 0x00f0, 0x3c05, 0x6043, 0x0004,
-+ 0x608b, 0xbc94, 0x608f, 0xf0f0, 0x6043, 0x0006, 0x707f, 0x0002,
-+ 0x708b, 0x0002, 0x2009, 0x07d0, 0x2011, 0x41dc, 0x1078, 0x5add,
-+ 0x0078, 0x3c5c, 0x2069, 0xab80, 0x6930, 0xa18e, 0x1101, 0x00c0,
-+ 0x3c56, 0x6834, 0xa005, 0x00c0, 0x3c56, 0x6900, 0xa18c, 0x00ff,
-+ 0x00c0, 0x3c36, 0x6804, 0xa005, 0x0040, 0x3c4b, 0x2011, 0xab8e,
-+ 0x2019, 0xa605, 0x20a9, 0x0004, 0x220c, 0x2304, 0xa102, 0x0048,
-+ 0x3c49, 0x00c0, 0x3c56, 0x8210, 0x8318, 0x00f0, 0x3c3c, 0x0078,
-+ 0x3c56, 0x708f, 0x0000, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099,
-+ 0xab80, 0x20a1, 0x020b, 0x20a9, 0x0014, 0x53a6, 0x6043, 0x0008,
-+ 0x6043, 0x0000, 0x0078, 0x3c5e, 0x0d7f, 0x007c, 0x6020, 0xd0b4,
-+ 0x00c0, 0x3c5c, 0x60c3, 0x000c, 0x2011, 0xa8bb, 0x2013, 0x0000,
-+ 0x7083, 0x0000, 0x20e1, 0x9080, 0x60a3, 0x0056, 0x60a7, 0x9575,
-+ 0x1078, 0x6e06, 0x0078, 0x3c5c, 0x007c, 0x7088, 0xa08a, 0x001d,
-+ 0x00c8, 0x3c7e, 0x1079, 0x3c81, 0x0078, 0x3c80, 0x1078, 0x1332,
-+ 0x007c, 0x3cab, 0x3cba, 0x3ce9, 0x3d02, 0x3d2e, 0x3d5a, 0x3d86,
-+ 0x3dbc, 0x3de8, 0x3e10, 0x3e53, 0x3e7d, 0x3e9f, 0x3eb5, 0x3edb,
-+ 0x3eee, 0x3ef7, 0x3f2b, 0x3f57, 0x3f83, 0x3faf, 0x3fe5, 0x4030,
-+ 0x405f, 0x4081, 0x40c3, 0x40e9, 0x4102, 0x4103, 0x0c7e, 0x2061,
-+ 0xa600, 0x6003, 0x0007, 0x2061, 0x0100, 0x6004, 0xa084, 0xfff9,
-+ 0x6006, 0x0c7f, 0x007c, 0x608b, 0xbc94, 0x608f, 0xf0f0, 0x6043,
-+ 0x0002, 0x708b, 0x0001, 0x2009, 0x07d0, 0x2011, 0x41dc, 0x1078,
-+ 0x5add, 0x007c, 0x0f7e, 0x7080, 0xa086, 0x0014, 0x00c0, 0x3ce7,
-+ 0x6043, 0x0000, 0x6020, 0xd0b4, 0x00c0, 0x3ce7, 0x2079, 0xab80,
-+ 0x7a30, 0xa296, 0x1102, 0x00c0, 0x3ce5, 0x7834, 0xa005, 0x00c0,
-+ 0x3ce5, 0x7a38, 0xd2fc, 0x0040, 0x3cdb, 0x70b0, 0xa005, 0x00c0,
-+ 0x3cdb, 0x70b3, 0x0001, 0x2011, 0x41dc, 0x1078, 0x5a45, 0x708b,
-+ 0x0010, 0x1078, 0x3ef7, 0x0078, 0x3ce7, 0x1078, 0x4224, 0x0f7f,
-+ 0x007c, 0x708b, 0x0003, 0x6043, 0x0004, 0x2011, 0x41dc, 0x1078,
-+ 0x5a45, 0x1078, 0x4289, 0x20a3, 0x1102, 0x20a3, 0x0000, 0x20a9,
-+ 0x000a, 0x20a3, 0x0000, 0x00f0, 0x3cf9, 0x60c3, 0x0014, 0x1078,
-+ 0x420b, 0x007c, 0x0f7e, 0x7080, 0xa005, 0x0040, 0x3d2c, 0x2011,
-+ 0x41dc, 0x1078, 0x5a45, 0xa086, 0x0014, 0x00c0, 0x3d2a, 0x2079,
-+ 0xab80, 0x7a30, 0xa296, 0x1102, 0x00c0, 0x3d2a, 0x7834, 0xa005,
-+ 0x00c0, 0x3d2a, 0x7a38, 0xd2fc, 0x0040, 0x3d24, 0x70b0, 0xa005,
-+ 0x00c0, 0x3d24, 0x70b3, 0x0001, 0x708b, 0x0004, 0x1078, 0x3d2e,
-+ 0x0078, 0x3d2c, 0x1078, 0x4224, 0x0f7f, 0x007c, 0x708b, 0x0005,
-+ 0x1078, 0x4289, 0x20a3, 0x1103, 0x20a3, 0x0000, 0x3430, 0x2011,
-+ 0xab8e, 0x1078, 0x42d4, 0x00c0, 0x3d4c, 0x7074, 0xa005, 0x00c0,
-+ 0x3d4c, 0x7150, 0xa186, 0xffff, 0x0040, 0x3d4c, 0x1078, 0x419d,
-+ 0x0040, 0x3d4c, 0x1078, 0x42b8, 0x20a9, 0x0008, 0x2298, 0x26a0,
-+ 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078,
-+ 0x420b, 0x007c, 0x0f7e, 0x7080, 0xa005, 0x0040, 0x3d84, 0x2011,
-+ 0x41dc, 0x1078, 0x5a45, 0xa086, 0x0014, 0x00c0, 0x3d82, 0x2079,
-+ 0xab80, 0x7a30, 0xa296, 0x1103, 0x00c0, 0x3d82, 0x7834, 0xa005,
-+ 0x00c0, 0x3d82, 0x7a38, 0xd2fc, 0x0040, 0x3d7c, 0x70b0, 0xa005,
-+ 0x00c0, 0x3d7c, 0x70b3, 0x0001, 0x708b, 0x0006, 0x1078, 0x3d86,
-+ 0x0078, 0x3d84, 0x1078, 0x4224, 0x0f7f, 0x007c, 0x708b, 0x0007,
-+ 0x1078, 0x4289, 0x20a3, 0x1104, 0x20a3, 0x0000, 0x3430, 0x2011,
-+ 0xab8e, 0x1078, 0x42d4, 0x00c0, 0x3dae, 0x7074, 0xa005, 0x00c0,
-+ 0x3dae, 0x7154, 0xa186, 0xffff, 0x0040, 0x3dae, 0xa180, 0x29c0,
-+ 0x200c, 0xa18c, 0xff00, 0x810f, 0x1078, 0x419d, 0x0040, 0x3dae,
-+ 0x1078, 0x3820, 0x0040, 0x3dae, 0x1078, 0x256a, 0x20a9, 0x0008,
-+ 0x2298, 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3,
-+ 0x0014, 0x1078, 0x420b, 0x007c, 0x0f7e, 0x7080, 0xa005, 0x0040,
-+ 0x3de6, 0x2011, 0x41dc, 0x1078, 0x5a45, 0xa086, 0x0014, 0x00c0,
-+ 0x3de4, 0x2079, 0xab80, 0x7a30, 0xa296, 0x1104, 0x00c0, 0x3de4,
-+ 0x7834, 0xa005, 0x00c0, 0x3de4, 0x7a38, 0xd2fc, 0x0040, 0x3dde,
-+ 0x70b0, 0xa005, 0x00c0, 0x3dde, 0x70b3, 0x0001, 0x708b, 0x0008,
-+ 0x1078, 0x3de8, 0x0078, 0x3de6, 0x1078, 0x4224, 0x0f7f, 0x007c,
-+ 0x708b, 0x0009, 0x1078, 0x4289, 0x20a3, 0x1105, 0x20a3, 0x0100,
-+ 0x3430, 0x1078, 0x42d4, 0x00c0, 0x3e01, 0x7074, 0xa005, 0x00c0,
-+ 0x3e01, 0x1078, 0x4104, 0x00c0, 0x3e0b, 0xa085, 0x0001, 0x1078,
-+ 0x256a, 0x20a9, 0x0008, 0x2099, 0xab8e, 0x26a0, 0x53a6, 0x20a3,
-+ 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078, 0x420b, 0x007c,
-+ 0x0f7e, 0x7080, 0xa005, 0x0040, 0x3e51, 0x2011, 0x41dc, 0x1078,
-+ 0x5a45, 0xa086, 0x0014, 0x00c0, 0x3e4f, 0x2079, 0xab80, 0x7a30,
-+ 0xa296, 0x1105, 0x00c0, 0x3e4f, 0x7834, 0x2011, 0x0100, 0xa21e,
-+ 0x00c0, 0x3e3a, 0x7a38, 0xd2fc, 0x0040, 0x3e34, 0x70b0, 0xa005,
-+ 0x00c0, 0x3e34, 0x70b3, 0x0001, 0x708b, 0x000a, 0x1078, 0x3e53,
-+ 0x0078, 0x3e51, 0xa005, 0x00c0, 0x3e4f, 0x7a38, 0xd2fc, 0x0040,
-+ 0x3e47, 0x70b0, 0xa005, 0x00c0, 0x3e47, 0x70b3, 0x0001, 0x7087,
-+ 0x0000, 0x708b, 0x000e, 0x1078, 0x3edb, 0x0078, 0x3e51, 0x1078,
-+ 0x4224, 0x0f7f, 0x007c, 0x708b, 0x000b, 0x2011, 0xab0e, 0x22a0,
-+ 0x20a9, 0x0040, 0x2019, 0xffff, 0x43a4, 0x20a9, 0x0002, 0x2009,
-+ 0x0000, 0x41a4, 0x1078, 0x4289, 0x20a3, 0x1106, 0x20a3, 0x0000,
-+ 0x1078, 0x42d4, 0x0040, 0x3e70, 0x2013, 0x0000, 0x0078, 0x3e74,
-+ 0x6030, 0xa085, 0x0100, 0x2012, 0x2298, 0x20a9, 0x0042, 0x53a6,
-+ 0x60c3, 0x0084, 0x1078, 0x420b, 0x007c, 0x0f7e, 0x7080, 0xa005,
-+ 0x0040, 0x3e9d, 0x2011, 0x41dc, 0x1078, 0x5a45, 0xa086, 0x0084,
-+ 0x00c0, 0x3e9b, 0x2079, 0xab80, 0x7a30, 0xa296, 0x1106, 0x00c0,
-+ 0x3e9b, 0x7834, 0xa005, 0x00c0, 0x3e9b, 0x708b, 0x000c, 0x1078,
-+ 0x3e9f, 0x0078, 0x3e9d, 0x1078, 0x4224, 0x0f7f, 0x007c, 0x708b,
-+ 0x000d, 0x1078, 0x4289, 0x20a3, 0x1107, 0x20a3, 0x0000, 0x2099,
-+ 0xab8e, 0x20a9, 0x0040, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+ 0x60c3, 0x0084, 0x1078, 0x420b, 0x007c, 0x0f7e, 0x7080, 0xa005,
-+ 0x0040, 0x3ed9, 0x2011, 0x41dc, 0x1078, 0x5a45, 0xa086, 0x0084,
-+ 0x00c0, 0x3ed7, 0x2079, 0xab80, 0x7a30, 0xa296, 0x1107, 0x00c0,
-+ 0x3ed7, 0x7834, 0xa005, 0x00c0, 0x3ed7, 0x7087, 0x0001, 0x1078,
-+ 0x427b, 0x708b, 0x000e, 0x1078, 0x3edb, 0x0078, 0x3ed9, 0x1078,
-+ 0x4224, 0x0f7f, 0x007c, 0x708b, 0x000f, 0x7083, 0x0000, 0x608b,
-+ 0xbc85, 0x608f, 0xb5b5, 0x6043, 0x0005, 0x6043, 0x0004, 0x2009,
-+ 0x07d0, 0x2011, 0x41dc, 0x1078, 0x5a38, 0x007c, 0x7080, 0xa005,
-+ 0x0040, 0x3ef6, 0x2011, 0x41dc, 0x1078, 0x5a45, 0x007c, 0x708b,
-+ 0x0011, 0x1078, 0x42d4, 0x00c0, 0x3f14, 0x716c, 0x81ff, 0x0040,
-+ 0x3f14, 0x2009, 0x0000, 0x7070, 0xa084, 0x00ff, 0x1078, 0x254d,
-+ 0xa186, 0x007e, 0x0040, 0x3f14, 0xa186, 0x0080, 0x0040, 0x3f14,
-+ 0x2011, 0xab8e, 0x1078, 0x419d, 0x20e1, 0x9080, 0x20e1, 0x4000,
-+ 0x2099, 0xab80, 0x20a1, 0x020b, 0x7480, 0xa480, 0x0018, 0xa080,
-+ 0x0007, 0xa084, 0x03f8, 0x8004, 0x20a8, 0x53a6, 0x60c3, 0x0014,
-+ 0x1078, 0x420b, 0x007c, 0x0f7e, 0x7080, 0xa005, 0x0040, 0x3f55,
-+ 0x2011, 0x41dc, 0x1078, 0x5a45, 0xa086, 0x0014, 0x00c0, 0x3f53,
-+ 0x2079, 0xab80, 0x7a30, 0xa296, 0x1103, 0x00c0, 0x3f53, 0x7834,
-+ 0xa005, 0x00c0, 0x3f53, 0x7a38, 0xd2fc, 0x0040, 0x3f4d, 0x70b0,
-+ 0xa005, 0x00c0, 0x3f4d, 0x70b3, 0x0001, 0x708b, 0x0012, 0x1078,
-+ 0x3f57, 0x0078, 0x3f55, 0x1078, 0x4224, 0x0f7f, 0x007c, 0x708b,
-+ 0x0013, 0x1078, 0x4295, 0x20a3, 0x1103, 0x20a3, 0x0000, 0x3430,
-+ 0x2011, 0xab8e, 0x1078, 0x42d4, 0x00c0, 0x3f75, 0x7074, 0xa005,
-+ 0x00c0, 0x3f75, 0x7150, 0xa186, 0xffff, 0x0040, 0x3f75, 0x1078,
-+ 0x419d, 0x0040, 0x3f75, 0x1078, 0x42b8, 0x20a9, 0x0008, 0x2298,
-+ 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014,
-+ 0x1078, 0x420b, 0x007c, 0x0f7e, 0x7080, 0xa005, 0x0040, 0x3fad,
-+ 0x2011, 0x41dc, 0x1078, 0x5a45, 0xa086, 0x0014, 0x00c0, 0x3fab,
-+ 0x2079, 0xab80, 0x7a30, 0xa296, 0x1104, 0x00c0, 0x3fab, 0x7834,
-+ 0xa005, 0x00c0, 0x3fab, 0x7a38, 0xd2fc, 0x0040, 0x3fa5, 0x70b0,
-+ 0xa005, 0x00c0, 0x3fa5, 0x70b3, 0x0001, 0x708b, 0x0014, 0x1078,
-+ 0x3faf, 0x0078, 0x3fad, 0x1078, 0x4224, 0x0f7f, 0x007c, 0x708b,
-+ 0x0015, 0x1078, 0x4295, 0x20a3, 0x1104, 0x20a3, 0x0000, 0x3430,
-+ 0x2011, 0xab8e, 0x1078, 0x42d4, 0x00c0, 0x3fd7, 0x7074, 0xa005,
-+ 0x00c0, 0x3fd7, 0x7154, 0xa186, 0xffff, 0x0040, 0x3fd7, 0xa180,
-+ 0x29c0, 0x200c, 0xa18c, 0xff00, 0x810f, 0x1078, 0x419d, 0x0040,
-+ 0x3fd7, 0x1078, 0x3820, 0x0040, 0x3fd7, 0x1078, 0x256a, 0x20a9,
-+ 0x0008, 0x2298, 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+ 0x60c3, 0x0014, 0x1078, 0x420b, 0x007c, 0x0f7e, 0x7080, 0xa005,
-+ 0x0040, 0x402e, 0x2011, 0x41dc, 0x1078, 0x5a45, 0xa086, 0x0014,
-+ 0x00c0, 0x402c, 0x2079, 0xab80, 0x7a30, 0xa296, 0x1105, 0x00c0,
-+ 0x402c, 0x7834, 0x2011, 0x0100, 0xa21e, 0x00c0, 0x400b, 0x7a38,
-+ 0xd2fc, 0x0040, 0x4009, 0x70b0, 0xa005, 0x00c0, 0x4009, 0x70b3,
-+ 0x0001, 0x0078, 0x401a, 0xa005, 0x00c0, 0x402c, 0x7a38, 0xd2fc,
-+ 0x0040, 0x4018, 0x70b0, 0xa005, 0x00c0, 0x4018, 0x70b3, 0x0001,
-+ 0x7087, 0x0000, 0x7a38, 0xd2f4, 0x0040, 0x4026, 0x2001, 0xa674,
-+ 0x2004, 0xd0a4, 0x00c0, 0x4026, 0x70cf, 0x0008, 0x708b, 0x0016,
-+ 0x1078, 0x4030, 0x0078, 0x402e, 0x1078, 0x4224, 0x0f7f, 0x007c,
-+ 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, 0xab80, 0x20a1, 0x020b,
-+ 0x20a9, 0x000e, 0x53a6, 0x3430, 0x2011, 0xab8e, 0x708b, 0x0017,
-+ 0x1078, 0x42d4, 0x00c0, 0x4050, 0x7074, 0xa005, 0x00c0, 0x4050,
-+ 0x1078, 0x4104, 0x00c0, 0x405a, 0xa085, 0x0001, 0x1078, 0x256a,
-+ 0x20a9, 0x0008, 0x2099, 0xab8e, 0x26a0, 0x53a6, 0x20a3, 0x0000,
-+ 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078, 0x420b, 0x007c, 0x0f7e,
-+ 0x7080, 0xa005, 0x0040, 0x407f, 0x2011, 0x41dc, 0x1078, 0x5a45,
-+ 0xa086, 0x0084, 0x00c0, 0x407d, 0x2079, 0xab80, 0x7a30, 0xa296,
-+ 0x1106, 0x00c0, 0x407d, 0x7834, 0xa005, 0x00c0, 0x407d, 0x708b,
-+ 0x0018, 0x1078, 0x4081, 0x0078, 0x407f, 0x1078, 0x4224, 0x0f7f,
-+ 0x007c, 0x708b, 0x0019, 0x1078, 0x4295, 0x20a3, 0x1106, 0x20a3,
-+ 0x0000, 0x3430, 0x2099, 0xab8e, 0x2039, 0xab0e, 0x27a0, 0x20a9,
-+ 0x0040, 0x53a3, 0x1078, 0x42d4, 0x00c0, 0x40b5, 0x2728, 0x2514,
-+ 0x8207, 0xa084, 0x00ff, 0x8000, 0x2018, 0xa294, 0x00ff, 0x8007,
-+ 0xa205, 0x202a, 0x6030, 0x2310, 0x8214, 0xa2a0, 0xab0e, 0x2414,
-+ 0xa38c, 0x0001, 0x0040, 0x40b0, 0xa294, 0xff00, 0x0078, 0x40b3,
-+ 0xa294, 0x00ff, 0x8007, 0xa215, 0x2222, 0x2798, 0x26a0, 0x20a9,
-+ 0x0040, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0084,
-+ 0x1078, 0x420b, 0x007c, 0x0f7e, 0x7080, 0xa005, 0x0040, 0x40e7,
-+ 0x2011, 0x41dc, 0x1078, 0x5a45, 0xa086, 0x0084, 0x00c0, 0x40e5,
-+ 0x2079, 0xab80, 0x7a30, 0xa296, 0x1107, 0x00c0, 0x40e5, 0x7834,
-+ 0xa005, 0x00c0, 0x40e5, 0x7087, 0x0001, 0x1078, 0x427b, 0x708b,
-+ 0x001a, 0x1078, 0x40e9, 0x0078, 0x40e7, 0x1078, 0x4224, 0x0f7f,
-+ 0x007c, 0x708b, 0x001b, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099,
-+ 0xab80, 0x20a1, 0x020b, 0x7480, 0xa480, 0x0018, 0xa080, 0x0007,
-+ 0xa084, 0x03f8, 0x8004, 0x20a8, 0x53a6, 0x60c3, 0x0084, 0x1078,
-+ 0x420b, 0x007c, 0x007c, 0x007c, 0x087e, 0x097e, 0x2029, 0xa653,
-+ 0x252c, 0x20a9, 0x0008, 0x2041, 0xab0e, 0x28a0, 0x2099, 0xab8e,
-+ 0x53a3, 0x20a9, 0x0008, 0x2011, 0x0007, 0xd5d4, 0x0040, 0x411a,
-+ 0x2011, 0x0000, 0x2800, 0xa200, 0x200c, 0xa1a6, 0xffff, 0x00c0,
-+ 0x412c, 0xd5d4, 0x0040, 0x4127, 0x8210, 0x0078, 0x4128, 0x8211,
-+ 0x00f0, 0x411a, 0x0078, 0x4194, 0x82ff, 0x00c0, 0x413e, 0xd5d4,
-+ 0x0040, 0x4138, 0xa1a6, 0x3fff, 0x0040, 0x4124, 0x0078, 0x413c,
-+ 0xa1a6, 0x3fff, 0x0040, 0x4194, 0xa18d, 0xc000, 0x20a9, 0x0010,
-+ 0x2019, 0x0001, 0xd5d4, 0x0040, 0x4147, 0x2019, 0x0010, 0x2120,
-+ 0xd5d4, 0x0040, 0x414e, 0x8423, 0x0078, 0x414f, 0x8424, 0x00c8,
-+ 0x415c, 0xd5d4, 0x0040, 0x4157, 0x8319, 0x0078, 0x4158, 0x8318,
-+ 0x00f0, 0x4148, 0x0078, 0x4194, 0x23a8, 0x2021, 0x0001, 0x8426,
-+ 0x8425, 0x00f0, 0x4160, 0x2328, 0x8529, 0xa2be, 0x0007, 0x0040,
-+ 0x4174, 0x007e, 0x2039, 0x0007, 0x2200, 0xa73a, 0x007f, 0x27a8,
-+ 0xa5a8, 0x0010, 0x00f0, 0x4170, 0x7552, 0xa5c8, 0x29c0, 0x292c,
-+ 0xa5ac, 0x00ff, 0x6532, 0x60e7, 0x0000, 0x65ea, 0x706f, 0x0000,
-+ 0x7572, 0x2018, 0x2304, 0xa405, 0x201a, 0x7077, 0x0001, 0x26a0,
-+ 0x2898, 0x20a9, 0x0008, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+ 0xa085, 0x0001, 0x0078, 0x419a, 0xa006, 0x0078, 0x419a, 0xa006,
-+ 0x1078, 0x1332, 0x097f, 0x087f, 0x007c, 0x2118, 0x2021, 0x0000,
-+ 0x2001, 0x0007, 0xa39a, 0x0010, 0x0048, 0x41aa, 0x8420, 0x8001,
-+ 0x0078, 0x41a2, 0x2118, 0x84ff, 0x0040, 0x41b3, 0xa39a, 0x0010,
-+ 0x8421, 0x00c0, 0x41ae, 0x2021, 0x0001, 0x83ff, 0x0040, 0x41bc,
-+ 0x8423, 0x8319, 0x00c0, 0x41b8, 0xa238, 0x2704, 0xa42c, 0x00c0,
-+ 0x41d4, 0xa405, 0x203a, 0x7152, 0xa1a0, 0x29c0, 0x242c, 0xa5ac,
-+ 0x00ff, 0x6532, 0x60e7, 0x0000, 0x65ea, 0x706f, 0x0000, 0x7572,
-+ 0x7077, 0x0001, 0xa084, 0x0000, 0x007c, 0x0e7e, 0x2071, 0xa600,
-+ 0x707b, 0x0000, 0x0e7f, 0x007c, 0x0e7e, 0x0f7e, 0x2001, 0x0002,
-+ 0x1078, 0x5ae6, 0x2079, 0x0100, 0x2071, 0x0140, 0x1078, 0x6e0f,
-+ 0x7004, 0xa084, 0x4000, 0x0040, 0x41f1, 0x7003, 0x1000, 0x7003,
-+ 0x0000, 0x127e, 0x2091, 0x8000, 0x2071, 0xa622, 0x2073, 0x0000,
-+ 0x7840, 0x027e, 0x017e, 0x2009, 0x00f7, 0x1078, 0x42a1, 0x017f,
-+ 0xa094, 0x0010, 0xa285, 0x0080, 0x7842, 0x7a42, 0x027f, 0x127f,
-+ 0x0f7f, 0x0e7f, 0x007c, 0x127e, 0x2091, 0x8000, 0x2011, 0xa8bb,
-+ 0x2013, 0x0000, 0x7083, 0x0000, 0x127f, 0x20e1, 0x9080, 0x60a3,
-+ 0x0056, 0x60a7, 0x9575, 0x1078, 0x6e06, 0x2009, 0x07d0, 0x2011,
-+ 0x41dc, 0x1078, 0x5add, 0x007c, 0x017e, 0x027e, 0x0c7e, 0x127e,
-+ 0x2091, 0x8000, 0x2011, 0x0003, 0x1078, 0x70e0, 0x2011, 0x0002,
-+ 0x1078, 0x70ea, 0x1078, 0x6fc4, 0x037e, 0x2019, 0x0000, 0x1078,
-+ 0x7058, 0x037f, 0x2009, 0x00f7, 0x1078, 0x42a1, 0x2061, 0xa8c4,
-+ 0x601b, 0x0000, 0x601f, 0x0000, 0x2061, 0xa600, 0x6003, 0x0001,
-+ 0x2061, 0x0100, 0x6043, 0x0090, 0x6043, 0x0010, 0x2009, 0x002d,
-+ 0x2011, 0x4259, 0x1078, 0x5a38, 0x127f, 0x0c7f, 0x027f, 0x017f,
-+ 0x007c, 0x0e7e, 0x007e, 0x127e, 0x2091, 0x8000, 0x2001, 0x0001,
-+ 0x1078, 0x5ae6, 0x2071, 0x0100, 0x1078, 0x6e0f, 0x2071, 0x0140,
-+ 0x7004, 0xa084, 0x4000, 0x0040, 0x4271, 0x7003, 0x1000, 0x7003,
-+ 0x0000, 0x2001, 0x0001, 0x1078, 0x24e8, 0x1078, 0x4224, 0x127f,
-+ 0x007f, 0x0e7f, 0x007c, 0x20a9, 0x0040, 0x20a1, 0xacc0, 0x2099,
-+ 0xab8e, 0x3304, 0x8007, 0x20a2, 0x9398, 0x94a0, 0x00f0, 0x4281,
-+ 0x007c, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, 0xab00, 0x20a1,
-+ 0x020b, 0x20a9, 0x000c, 0x53a6, 0x007c, 0x20e1, 0x9080, 0x20e1,
-+ 0x4000, 0x2099, 0xab80, 0x20a1, 0x020b, 0x20a9, 0x000c, 0x53a6,
-+ 0x007c, 0x0c7e, 0x007e, 0x2061, 0x0100, 0x810f, 0x2001, 0xa62f,
-+ 0x2004, 0xa005, 0x00c0, 0x42b2, 0x6030, 0xa084, 0x00ff, 0xa105,
-+ 0x0078, 0x42b4, 0xa185, 0x00f7, 0x604a, 0x007f, 0x0c7f, 0x007c,
-+ 0x017e, 0x047e, 0x2001, 0xa653, 0x2004, 0xd0a4, 0x0040, 0x42cb,
-+ 0xa006, 0x2020, 0x2009, 0x002a, 0x1078, 0xa21d, 0x2001, 0xa60c,
-+ 0x200c, 0xc195, 0x2102, 0x2019, 0x002a, 0x2009, 0x0000, 0x1078,
-+ 0x284f, 0x047f, 0x017f, 0x007c, 0x007e, 0x2001, 0xa60c, 0x2004,
-+ 0xd09c, 0x0040, 0x42db, 0x007f, 0x007c, 0x007e, 0x017e, 0x127e,
-+ 0x2091, 0x8000, 0x2001, 0x0101, 0x200c, 0xa18d, 0x0006, 0x2102,
-+ 0x127f, 0x017f, 0x007f, 0x007c, 0x157e, 0x20a9, 0x00ff, 0x2009,
-+ 0xa735, 0xa006, 0x200a, 0x8108, 0x00f0, 0x42f2, 0x157f, 0x007c,
-+ 0x0d7e, 0x037e, 0x157e, 0x137e, 0x147e, 0x2069, 0xa652, 0xa006,
-+ 0x6002, 0x6007, 0x0707, 0x600a, 0x600e, 0x6012, 0xa198, 0x29c0,
-+ 0x231c, 0xa39c, 0x00ff, 0x6316, 0x20a9, 0x0004, 0xac98, 0x0006,
-+ 0x23a0, 0x40a4, 0x20a9, 0x0004, 0xac98, 0x000a, 0x23a0, 0x40a4,
-+ 0x603e, 0x6042, 0x604e, 0x6052, 0x6056, 0x605a, 0x605e, 0x6062,
-+ 0x6066, 0x606a, 0x606e, 0x6072, 0x6076, 0x607a, 0x607e, 0x6082,
-+ 0x6086, 0x608a, 0x608e, 0x6092, 0x6096, 0x609a, 0x609e, 0x60ae,
-+ 0x61a2, 0x0d7e, 0x60a4, 0xa06d, 0x0040, 0x4338, 0x1078, 0x13a4,
-+ 0x60a7, 0x0000, 0x60a8, 0xa06d, 0x0040, 0x4340, 0x1078, 0x13a4,
-+ 0x60ab, 0x0000, 0x0d7f, 0xa006, 0x604a, 0x6810, 0x603a, 0x680c,
-+ 0x6046, 0x6814, 0xa084, 0x00ff, 0x6042, 0x147f, 0x137f, 0x157f,
-+ 0x037f, 0x0d7f, 0x007c, 0x127e, 0x2091, 0x8000, 0x6944, 0x6e48,
-+ 0xa684, 0x3fff, 0xa082, 0x4000, 0x00c8, 0x4424, 0xa18c, 0xff00,
-+ 0x810f, 0xa182, 0x00ff, 0x00c8, 0x442a, 0x2001, 0xa60c, 0x2004,
-+ 0xa084, 0x0003, 0x0040, 0x4385, 0x2001, 0xa60c, 0x2004, 0xd084,
-+ 0x00c0, 0x4405, 0xa188, 0xa735, 0x2104, 0xa065, 0x0040, 0x4405,
-+ 0x6004, 0xa084, 0x00ff, 0xa08e, 0x0006, 0x00c0, 0x4405, 0x6000,
-+ 0xd0c4, 0x0040, 0x4405, 0x0078, 0x4392, 0xa188, 0xa735, 0x2104,
-+ 0xa065, 0x0040, 0x43e9, 0x6004, 0xa084, 0x00ff, 0xa08e, 0x0006,
-+ 0x00c0, 0x43ef, 0x60a4, 0xa00d, 0x0040, 0x439a, 0x1078, 0x4817,
-+ 0x0040, 0x43e3, 0x60a8, 0xa00d, 0x0040, 0x43b4, 0x1078, 0x486a,
-+ 0x00c0, 0x43b4, 0x694c, 0xd1fc, 0x00c0, 0x43aa, 0x1078, 0x44df,
-+ 0x0078, 0x43de, 0x1078, 0x4484, 0x694c, 0xd1ec, 0x00c0, 0x43de,
-+ 0x1078, 0x46d6, 0x0078, 0x43de, 0x694c, 0xa184, 0xa000, 0x0040,
-+ 0x43ce, 0xd1ec, 0x0040, 0x43c7, 0xd1fc, 0x0040, 0x43c3, 0x1078,
-+ 0x46e7, 0x0078, 0x43ca, 0x1078, 0x46e7, 0x0078, 0x43ce, 0xd1fc,
-+ 0x0040, 0x43ce, 0x1078, 0x4484, 0x0078, 0x43de, 0x6050, 0xa00d,
-+ 0x0040, 0x43d9, 0x2d00, 0x200a, 0x6803, 0x0000, 0x6052, 0x0078,
-+ 0x43de, 0x2d00, 0x6052, 0x604e, 0x6803, 0x0000, 0x1078, 0x5da9,
-+ 0xa006, 0x127f, 0x007c, 0x2001, 0x0005, 0x2009, 0x0000, 0x0078,
-+ 0x442e, 0x2001, 0x0028, 0x2009, 0x0000, 0x0078, 0x442e, 0xa082,
-+ 0x0006, 0x00c8, 0x4405, 0x60a0, 0xd0bc, 0x00c0, 0x4401, 0x6100,
-+ 0xd1fc, 0x0040, 0x4392, 0x2001, 0x0029, 0x2009, 0x1000, 0x0078,
-+ 0x442e, 0x2001, 0x0028, 0x0078, 0x4420, 0x2009, 0xa60c, 0x210c,
-+ 0xd18c, 0x0040, 0x440f, 0x2001, 0x0004, 0x0078, 0x4420, 0xd184,
-+ 0x0040, 0x4416, 0x2001, 0x0004, 0x0078, 0x4420, 0x2001, 0x0029,
-+ 0x6100, 0xd1fc, 0x0040, 0x4420, 0x2009, 0x1000, 0x0078, 0x442e,
-+ 0x2009, 0x0000, 0x0078, 0x442e, 0x2001, 0x0029, 0x2009, 0x0000,
-+ 0x0078, 0x442e, 0x2001, 0x0029, 0x2009, 0x0000, 0xa005, 0x127f,
-+ 0x007c, 0x6944, 0x6e48, 0xa684, 0x3fff, 0xa082, 0x4000, 0x00c8,
-+ 0x447e, 0xa18c, 0xff00, 0x810f, 0xa182, 0x00ff, 0x00c8, 0x4464,
-+ 0xa188, 0xa735, 0x2104, 0xa065, 0x0040, 0x4464, 0x6004, 0xa084,
-+ 0x00ff, 0xa08e, 0x0006, 0x00c0, 0x446a, 0x684c, 0xd0ec, 0x0040,
-+ 0x4457, 0x1078, 0x46e7, 0x1078, 0x4484, 0x0078, 0x445f, 0x1078,
-+ 0x4484, 0x684c, 0xd0fc, 0x0040, 0x445f, 0x1078, 0x46d6, 0x1078,
-+ 0x472f, 0xa006, 0x0078, 0x4482, 0x2001, 0x0028, 0x2009, 0x0000,
-+ 0x0078, 0x4482, 0xa082, 0x0006, 0x00c8, 0x4478, 0x6100, 0xd1fc,
-+ 0x0040, 0x444d, 0x2001, 0x0029, 0x2009, 0x1000, 0x0078, 0x4482,
-+ 0x2001, 0x0029, 0x2009, 0x0000, 0x0078, 0x4482, 0x2001, 0x0029,
-+ 0x2009, 0x0000, 0xa005, 0x007c, 0x127e, 0x2091, 0x8000, 0x6050,
-+ 0xa00d, 0x0040, 0x4492, 0x2d00, 0x200a, 0x6803, 0x0000, 0x6052,
-+ 0x127f, 0x007c, 0x2d00, 0x6052, 0x604e, 0x6803, 0x0000, 0x0078,
-+ 0x4490, 0x127e, 0x2091, 0x8000, 0x604c, 0xa005, 0x0040, 0x44af,
-+ 0x0e7e, 0x2071, 0xa8b1, 0x7004, 0xa086, 0x0002, 0x0040, 0x44b6,
-+ 0x0e7f, 0x604c, 0x6802, 0x2d00, 0x604e, 0x127f, 0x007c, 0x2d00,
-+ 0x6052, 0x604e, 0x6803, 0x0000, 0x0078, 0x44ad, 0x701c, 0xac06,
-+ 0x00c0, 0x44a8, 0x604c, 0x2070, 0x7000, 0x6802, 0x2d00, 0x7002,
-+ 0x0e7f, 0x127f, 0x007c, 0x127e, 0x2091, 0x8000, 0x604c, 0xa06d,
-+ 0x0040, 0x44d1, 0x6800, 0xa005, 0x00c0, 0x44cf, 0x6052, 0x604e,
-+ 0xad05, 0x127f, 0x007c, 0x604c, 0xa06d, 0x0040, 0x44de, 0x6800,
-+ 0xa005, 0x00c0, 0x44dc, 0x6052, 0x604e, 0xad05, 0x007c, 0x6803,
-+ 0x0000, 0x6084, 0xa00d, 0x0040, 0x44e9, 0x2d00, 0x200a, 0x6086,
-+ 0x007c, 0x2d00, 0x6086, 0x6082, 0x0078, 0x44e8, 0x127e, 0x0c7e,
-+ 0x027e, 0x2091, 0x8000, 0x6218, 0x2260, 0x6200, 0xa005, 0x0040,
-+ 0x44fc, 0xc285, 0x0078, 0x44fd, 0xc284, 0x6202, 0x027f, 0x0c7f,
-+ 0x127f, 0x007c, 0x127e, 0x0c7e, 0x2091, 0x8000, 0x6218, 0x2260,
-+ 0x6204, 0x007e, 0xa086, 0x0006, 0x00c0, 0x4521, 0x609c, 0xd0ac,
-+ 0x0040, 0x4521, 0x2001, 0xa653, 0x2004, 0xd0a4, 0x0040, 0x4521,
-+ 0xa284, 0xff00, 0x8007, 0xa086, 0x0007, 0x00c0, 0x4521, 0x2011,
-+ 0x0600, 0x007f, 0xa294, 0xff00, 0xa215, 0x6206, 0x007e, 0xa086,
-+ 0x0006, 0x00c0, 0x4531, 0x6290, 0x82ff, 0x00c0, 0x4531, 0x1078,
-+ 0x1332, 0x007f, 0x0c7f, 0x127f, 0x007c, 0x127e, 0x0c7e, 0x2091,
-+ 0x8000, 0x6218, 0x2260, 0x6204, 0x007e, 0xa086, 0x0006, 0x00c0,
-+ 0x4553, 0x609c, 0xd0a4, 0x0040, 0x4553, 0x2001, 0xa653, 0x2004,
-+ 0xd0ac, 0x00c0, 0x4553, 0xa284, 0x00ff, 0xa086, 0x0007, 0x00c0,
-+ 0x4553, 0x2011, 0x0006, 0x007f, 0xa294, 0x00ff, 0x8007, 0xa215,
-+ 0x6206, 0x0c7f, 0x127f, 0x007c, 0x027e, 0xa182, 0x00ff, 0x0048,
-+ 0x4565, 0xa085, 0x0001, 0x0078, 0x457d, 0xa190, 0xa735, 0x2204,
-+ 0xa065, 0x00c0, 0x457c, 0x017e, 0x0d7e, 0x1078, 0x1370, 0x2d60,
-+ 0x0d7f, 0x017f, 0x0040, 0x4561, 0x2c00, 0x2012, 0x60a7, 0x0000,
-+ 0x60ab, 0x0000, 0x1078, 0x42f8, 0xa006, 0x027f, 0x007c, 0x127e,
-+ 0x2091, 0x8000, 0x027e, 0xa182, 0x00ff, 0x0048, 0x458b, 0xa085,
-+ 0x0001, 0x0078, 0x45c1, 0x0d7e, 0xa190, 0xa735, 0x2204, 0xa06d,
-+ 0x0040, 0x45bf, 0x2013, 0x0000, 0x0d7e, 0x0c7e, 0x2d60, 0x60a4,
-+ 0xa06d, 0x0040, 0x459d, 0x1078, 0x13a4, 0x60a8, 0xa06d, 0x0040,
-+ 0x45a3, 0x1078, 0x13a4, 0x0c7f, 0x0d7f, 0x0d7e, 0x0c7e, 0x68ac,
-+ 0x2060, 0x8cff, 0x0040, 0x45bb, 0x600c, 0x007e, 0x6010, 0x2068,
-+ 0x1078, 0x8d06, 0x0040, 0x45b6, 0x1078, 0x13b4, 0x1078, 0x772d,
-+ 0x0c7f, 0x0078, 0x45a9, 0x0c7f, 0x0d7f, 0x1078, 0x13a4, 0x0d7f,
-+ 0xa006, 0x027f, 0x127f, 0x007c, 0x017e, 0xa182, 0x00ff, 0x0048,
-+ 0x45cd, 0xa085, 0x0001, 0x0078, 0x45d4, 0xa188, 0xa735, 0x2104,
-+ 0xa065, 0x0040, 0x45c9, 0xa006, 0x017f, 0x007c, 0x0d7e, 0x157e,
-+ 0x137e, 0x147e, 0x600b, 0x0000, 0x600f, 0x0000, 0x6000, 0xc08c,
-+ 0x6002, 0x2069, 0xab8e, 0x6808, 0x605e, 0x6810, 0x6062, 0x6138,
-+ 0xa10a, 0x0048, 0x45ec, 0x603a, 0x6814, 0x6066, 0x2099, 0xab96,
-+ 0xac88, 0x000a, 0x21a0, 0x20a9, 0x0004, 0x53a3, 0x2099, 0xab9a,
-+ 0xac88, 0x0006, 0x21a0, 0x20a9, 0x0004, 0x53a3, 0x2069, 0xabae,
-+ 0x6808, 0x606a, 0x690c, 0x616e, 0x6810, 0x6072, 0x6818, 0x6076,
-+ 0x60a0, 0xa086, 0x007e, 0x00c0, 0x4611, 0x2069, 0xab8e, 0x690c,
-+ 0x616e, 0xa182, 0x0211, 0x00c8, 0x4619, 0x2009, 0x0008, 0x0078,
-+ 0x4643, 0xa182, 0x0259, 0x00c8, 0x4621, 0x2009, 0x0007, 0x0078,
-+ 0x4643, 0xa182, 0x02c1, 0x00c8, 0x4629, 0x2009, 0x0006, 0x0078,
-+ 0x4643, 0xa182, 0x0349, 0x00c8, 0x4631, 0x2009, 0x0005, 0x0078,
-+ 0x4643, 0xa182, 0x0421, 0x00c8, 0x4639, 0x2009, 0x0004, 0x0078,
-+ 0x4643, 0xa182, 0x0581, 0x00c8, 0x4641, 0x2009, 0x0003, 0x0078,
-+ 0x4643, 0x2009, 0x0002, 0x6192, 0x147f, 0x137f, 0x157f, 0x0d7f,
-+ 0x007c, 0x017e, 0x027e, 0x0e7e, 0x2071, 0xab8d, 0x2e04, 0x6896,
-+ 0x2071, 0xab8e, 0x7004, 0x689a, 0x701c, 0x689e, 0x6a00, 0x2009,
-+ 0xa672, 0x210c, 0xd0bc, 0x0040, 0x4663, 0xd1ec, 0x0040, 0x4663,
-+ 0xc2ad, 0x0078, 0x4664, 0xc2ac, 0xd0c4, 0x0040, 0x466d, 0xd1e4,
-+ 0x0040, 0x466d, 0xc2bd, 0x0078, 0x466e, 0xc2bc, 0x6a02, 0x0e7f,
-+ 0x027f, 0x017f, 0x007c, 0x0d7e, 0x127e, 0x2091, 0x8000, 0x60a4,
-+ 0xa06d, 0x0040, 0x4697, 0x6900, 0x81ff, 0x00c0, 0x46ab, 0x6a04,
-+ 0xa282, 0x0010, 0x00c8, 0x46b0, 0xad88, 0x0004, 0x20a9, 0x0010,
-+ 0x2104, 0xa086, 0xffff, 0x0040, 0x4692, 0x8108, 0x00f0, 0x4688,
-+ 0x1078, 0x1332, 0x260a, 0x8210, 0x6a06, 0x0078, 0x46ab, 0x1078,
-+ 0x138b, 0x0040, 0x46b0, 0x2d00, 0x60a6, 0x6803, 0x0000, 0xad88,
-+ 0x0004, 0x20a9, 0x0010, 0x200b, 0xffff, 0x8108, 0x00f0, 0x46a3,
-+ 0x6807, 0x0001, 0x6e12, 0xa085, 0x0001, 0x127f, 0x0d7f, 0x007c,
-+ 0xa006, 0x0078, 0x46ad, 0x127e, 0x2091, 0x8000, 0x0d7e, 0x60a4,
-+ 0xa00d, 0x0040, 0x46d3, 0x2168, 0x6800, 0xa005, 0x00c0, 0x46cf,
-+ 0x1078, 0x4817, 0x00c0, 0x46d3, 0x200b, 0xffff, 0x6804, 0xa08a,
-+ 0x0002, 0x0048, 0x46cf, 0x8001, 0x6806, 0x0078, 0x46d3, 0x1078,
-+ 0x13a4, 0x60a7, 0x0000, 0x0d7f, 0x127f, 0x007c, 0x127e, 0x2091,
-+ 0x8000, 0x1078, 0x487f, 0x0078, 0x46df, 0x1078, 0x4484, 0x1078,
-+ 0x4775, 0x00c0, 0x46dd, 0x1078, 0x472f, 0x127f, 0x007c, 0x0d7e,
-+ 0x127e, 0x2091, 0x8000, 0x60a8, 0xa06d, 0x0040, 0x470b, 0x6950,
-+ 0x81ff, 0x00c0, 0x471f, 0x6a54, 0xa282, 0x0010, 0x00c8, 0x472c,
-+ 0xad88, 0x0018, 0x20a9, 0x0010, 0x2104, 0xa086, 0xffff, 0x0040,
-+ 0x4706, 0x8108, 0x00f0, 0x46fc, 0x1078, 0x1332, 0x260a, 0x8210,
-+ 0x6a56, 0x0078, 0x471f, 0x1078, 0x138b, 0x0040, 0x472c, 0x2d00,
-+ 0x60aa, 0x6853, 0x0000, 0xad88, 0x0018, 0x20a9, 0x0010, 0x200b,
-+ 0xffff, 0x8108, 0x00f0, 0x4717, 0x6857, 0x0001, 0x6e62, 0x0078,
-+ 0x4723, 0x1078, 0x44df, 0x1078, 0x4739, 0x00c0, 0x4721, 0xa085,
-+ 0x0001, 0x127f, 0x0d7f, 0x007c, 0xa006, 0x0078, 0x4729, 0x127e,
-+ 0x2091, 0x8000, 0x1078, 0x5da9, 0x127f, 0x007c, 0xa01e, 0x0078,
-+ 0x473b, 0x2019, 0x0001, 0xa00e, 0x127e, 0x2091, 0x8000, 0x604c,
-+ 0x2068, 0x6000, 0xd0dc, 0x00c0, 0x4759, 0x8dff, 0x0040, 0x4770,
-+ 0x83ff, 0x0040, 0x4751, 0x6848, 0xa606, 0x0040, 0x475e, 0x0078,
-+ 0x4759, 0x683c, 0xa406, 0x00c0, 0x4759, 0x6840, 0xa506, 0x0040,
-+ 0x475e, 0x2d08, 0x6800, 0x2068, 0x0078, 0x4745, 0x1078, 0x7233,
-+ 0x6a00, 0x604c, 0xad06, 0x00c0, 0x4768, 0x624e, 0x0078, 0x476b,
-+ 0xa180, 0x0000, 0x2202, 0x82ff, 0x00c0, 0x4770, 0x6152, 0x8dff,
-+ 0x127f, 0x007c, 0xa01e, 0x0078, 0x4777, 0x2019, 0x0001, 0xa00e,
-+ 0x6080, 0x2068, 0x8dff, 0x0040, 0x47a3, 0x83ff, 0x0040, 0x4786,
-+ 0x6848, 0xa606, 0x0040, 0x4793, 0x0078, 0x478e, 0x683c, 0xa406,
-+ 0x00c0, 0x478e, 0x6840, 0xa506, 0x0040, 0x4793, 0x2d08, 0x6800,
-+ 0x2068, 0x0078, 0x477a, 0x6a00, 0x6080, 0xad06, 0x00c0, 0x479b,
-+ 0x6282, 0x0078, 0x479e, 0xa180, 0x0000, 0x2202, 0x82ff, 0x00c0,
-+ 0x47a3, 0x6186, 0x8dff, 0x007c, 0xa016, 0x1078, 0x4810, 0x00c0,
-+ 0x47ab, 0x2011, 0x0001, 0x1078, 0x4863, 0x00c0, 0x47b1, 0xa295,
-+ 0x0002, 0x007c, 0x1078, 0x489b, 0x0040, 0x47ba, 0x1078, 0x8dca,
-+ 0x0078, 0x47bc, 0xa085, 0x0001, 0x007c, 0x1078, 0x489b, 0x0040,
-+ 0x47c5, 0x1078, 0x8d62, 0x0078, 0x47c7, 0xa085, 0x0001, 0x007c,
-+ 0x1078, 0x489b, 0x0040, 0x47d0, 0x1078, 0x8dac, 0x0078, 0x47d2,
-+ 0xa085, 0x0001, 0x007c, 0x1078, 0x489b, 0x0040, 0x47db, 0x1078,
-+ 0x8d7e, 0x0078, 0x47dd, 0xa085, 0x0001, 0x007c, 0x1078, 0x489b,
-+ 0x0040, 0x47e6, 0x1078, 0x8de8, 0x0078, 0x47e8, 0xa085, 0x0001,
-+ 0x007c, 0x127e, 0x007e, 0x0d7e, 0x2091, 0x8000, 0x6080, 0xa06d,
-+ 0x0040, 0x4808, 0x6800, 0x007e, 0x6837, 0x0103, 0x6b4a, 0x6847,
-+ 0x0000, 0x1078, 0x8f7d, 0x007e, 0x6000, 0xd0fc, 0x0040, 0x4802,
-+ 0x1078, 0xa4ed, 0x007f, 0x1078, 0x4a73, 0x007f, 0x0078, 0x47ef,
-+ 0x6083, 0x0000, 0x6087, 0x0000, 0x0d7f, 0x007f, 0x127f, 0x007c,
-+ 0x60a4, 0xa00d, 0x00c0, 0x4817, 0xa085, 0x0001, 0x007c, 0x0e7e,
-+ 0x2170, 0x7000, 0xa005, 0x00c0, 0x482c, 0x20a9, 0x0010, 0xae88,
-+ 0x0004, 0x2104, 0xa606, 0x0040, 0x482c, 0x8108, 0x00f0, 0x4821,
-+ 0xa085, 0x0001, 0x0078, 0x482d, 0xa006, 0x0e7f, 0x007c, 0x0d7e,
-+ 0x127e, 0x2091, 0x8000, 0x60a4, 0xa06d, 0x00c0, 0x483d, 0x1078,
-+ 0x138b, 0x0040, 0x484f, 0x2d00, 0x60a6, 0x6803, 0x0001, 0x6807,
-+ 0x0000, 0xad88, 0x0004, 0x20a9, 0x0010, 0x200b, 0xffff, 0x8108,
-+ 0x00f0, 0x4845, 0xa085, 0x0001, 0x127f, 0x0d7f, 0x007c, 0xa006,
-+ 0x0078, 0x484c, 0x0d7e, 0x127e, 0x2091, 0x8000, 0x60a4, 0xa06d,
-+ 0x0040, 0x4860, 0x60a7, 0x0000, 0x1078, 0x13a4, 0xa085, 0x0001,
-+ 0x127f, 0x0d7f, 0x007c, 0x60a8, 0xa00d, 0x00c0, 0x486a, 0xa085,
-+ 0x0001, 0x007c, 0x0e7e, 0x2170, 0x7050, 0xa005, 0x00c0, 0x487d,
-+ 0x20a9, 0x0010, 0xae88, 0x0018, 0x2104, 0xa606, 0x0040, 0x487d,
-+ 0x8108, 0x00f0, 0x4874, 0xa085, 0x0001, 0x0e7f, 0x007c, 0x127e,
-+ 0x2091, 0x8000, 0x1078, 0x4863, 0x00c0, 0x4899, 0x200b, 0xffff,
-+ 0x0d7e, 0x60a8, 0x2068, 0x6854, 0xa08a, 0x0002, 0x0048, 0x4894,
-+ 0x8001, 0x6856, 0x0078, 0x4898, 0x1078, 0x13a4, 0x60ab, 0x0000,
-+ 0x0d7f, 0x127f, 0x007c, 0x609c, 0xd0a4, 0x007c, 0x0f7e, 0x71b0,
-+ 0x81ff, 0x00c0, 0x48b9, 0x71cc, 0xd19c, 0x0040, 0x48b9, 0x2001,
-+ 0x007e, 0xa080, 0xa735, 0x2004, 0xa07d, 0x0040, 0x48b9, 0x7804,
-+ 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x48b9, 0x7800, 0xc0ed,
-+ 0x7802, 0x2079, 0xa652, 0x7804, 0xd0a4, 0x0040, 0x48df, 0x157e,
-+ 0x0c7e, 0x20a9, 0x007f, 0x2009, 0x0000, 0x017e, 0x1078, 0x45c4,
-+ 0x00c0, 0x48d9, 0x6004, 0xa084, 0xff00, 0x8007, 0xa096, 0x0004,
-+ 0x0040, 0x48d6, 0xa086, 0x0006, 0x00c0, 0x48d9, 0x6000, 0xc0ed,
-+ 0x6002, 0x017f, 0x8108, 0x00f0, 0x48c5, 0x0c7f, 0x157f, 0x1078,
-+ 0x4967, 0x0040, 0x48e8, 0x2001, 0xa8a1, 0x200c, 0x0078, 0x48f0,
-+ 0x2079, 0xa652, 0x7804, 0xd0a4, 0x0040, 0x48f4, 0x2009, 0x07d0,
-+ 0x2011, 0x48f6, 0x1078, 0x5add, 0x0f7f, 0x007c, 0x2011, 0x48f6,
-+ 0x1078, 0x5a45, 0x1078, 0x4967, 0x0040, 0x491e, 0x2001, 0xa7b3,
-+ 0x2004, 0xa080, 0x0000, 0x200c, 0xc1ec, 0x2102, 0x2001, 0xa653,
-+ 0x2004, 0xd0a4, 0x0040, 0x4912, 0x2009, 0x07d0, 0x2011, 0x48f6,
-+ 0x1078, 0x5add, 0x0e7e, 0x2071, 0xa600, 0x706f, 0x0000, 0x7073,
-+ 0x0000, 0x1078, 0x2677, 0x0e7f, 0x0078, 0x4956, 0x157e, 0x0c7e,
-+ 0x20a9, 0x007f, 0x2009, 0x0000, 0x017e, 0x1078, 0x45c4, 0x00c0,
-+ 0x4950, 0x6000, 0xd0ec, 0x0040, 0x4950, 0x047e, 0x62a0, 0xa294,
-+ 0x00ff, 0x8227, 0xa006, 0x2009, 0x0029, 0x1078, 0xa21d, 0x6000,
-+ 0xc0e5, 0xc0ec, 0x6002, 0x6004, 0xa084, 0x00ff, 0xa085, 0x0700,
-+ 0x6006, 0x2019, 0x0029, 0x1078, 0x5f01, 0x077e, 0x2039, 0x0000,
-+ 0x1078, 0x5e0a, 0x2009, 0x0000, 0x1078, 0x9f8b, 0x077f, 0x047f,
-+ 0x017f, 0x8108, 0x00f0, 0x4924, 0x0c7f, 0x157f, 0x007c, 0x0c7e,
-+ 0x6018, 0x2060, 0x6000, 0xc0ec, 0x6002, 0x0c7f, 0x007c, 0x7818,
-+ 0x2004, 0xd0ac, 0x007c, 0x7818, 0x2004, 0xd0bc, 0x007c, 0x0f7e,
-+ 0x2001, 0xa7b3, 0x2004, 0xa07d, 0x0040, 0x4970, 0x7800, 0xd0ec,
-+ 0x0f7f, 0x007c, 0x127e, 0x027e, 0x2091, 0x8000, 0x007e, 0x62a0,
-+ 0xa290, 0xa735, 0x2204, 0xac06, 0x10c0, 0x1332, 0x007f, 0x6200,
-+ 0xa005, 0x0040, 0x4986, 0xc2fd, 0x0078, 0x4987, 0xc2fc, 0x6202,
-+ 0x027f, 0x127f, 0x007c, 0x2011, 0xa633, 0x2204, 0xd0cc, 0x0040,
-+ 0x4998, 0x2001, 0xa89f, 0x200c, 0x2011, 0x4999, 0x1078, 0x5add,
-+ 0x007c, 0x2011, 0x4999, 0x1078, 0x5a45, 0x2011, 0xa633, 0x2204,
-+ 0xc0cc, 0x2012, 0x007c, 0x2071, 0xa714, 0x7003, 0x0001, 0x7007,
-+ 0x0000, 0x7013, 0x0000, 0x7017, 0x0000, 0x701b, 0x0000, 0x701f,
-+ 0x0000, 0x700b, 0x0000, 0x704b, 0x0001, 0x704f, 0x0000, 0x705b,
-+ 0x0020, 0x705f, 0x0040, 0x707f, 0x0000, 0x2071, 0xa87d, 0x7003,
-+ 0xa714, 0x7007, 0x0000, 0x700b, 0x0000, 0x700f, 0xa85d, 0x7013,
-+ 0x0020, 0x7017, 0x0040, 0x7037, 0x0000, 0x007c, 0x017e, 0x0e7e,
-+ 0x2071, 0xa835, 0xa00e, 0x7186, 0x718a, 0x7097, 0x0001, 0x2001,
-+ 0xa653, 0x2004, 0xd0fc, 0x00c0, 0x49e8, 0x2001, 0xa653, 0x2004,
-+ 0xa00e, 0xd09c, 0x0040, 0x49e5, 0x8108, 0x7102, 0x0078, 0x4a3b,
-+ 0x2001, 0xa672, 0x200c, 0xa184, 0x000f, 0x2009, 0xa673, 0x210c,
-+ 0x0079, 0x49f2, 0x49dd, 0x4a13, 0x4a1b, 0x4a26, 0x4a2c, 0x49dd,
-+ 0x49dd, 0x49dd, 0x4a02, 0x49dd, 0x49dd, 0x49dd, 0x49dd, 0x49dd,
-+ 0x49dd, 0x49dd, 0x7003, 0x0004, 0x137e, 0x147e, 0x157e, 0x2099,
-+ 0xa676, 0x20a1, 0xa886, 0x20a9, 0x0004, 0x53a3, 0x157f, 0x147f,
-+ 0x137f, 0x0078, 0x4a3b, 0x708f, 0x0005, 0x7007, 0x0122, 0x2001,
-+ 0x0002, 0x0078, 0x4a21, 0x708f, 0x0002, 0x7007, 0x0121, 0x2001,
-+ 0x0003, 0x7002, 0x7097, 0x0001, 0x0078, 0x4a38, 0x7007, 0x0122,
-+ 0x2001, 0x0002, 0x0078, 0x4a30, 0x7007, 0x0121, 0x2001, 0x0003,
-+ 0x7002, 0xa006, 0x7096, 0x708e, 0xa184, 0xff00, 0x8007, 0x709a,
-+ 0xa184, 0x00ff, 0x7092, 0x0e7f, 0x017f, 0x007c, 0x0e7e, 0x2071,
-+ 0xa714, 0x684c, 0xa005, 0x00c0, 0x4a4c, 0x7028, 0xc085, 0x702a,
-+ 0xa085, 0x0001, 0x0078, 0x4a71, 0x6a60, 0x7236, 0x6b64, 0x733a,
-+ 0x6868, 0x703e, 0x7076, 0x686c, 0x7042, 0x707a, 0x684c, 0x702e,
-+ 0x6844, 0x7032, 0x2009, 0x000d, 0x200a, 0x700b, 0x0000, 0x8007,
-+ 0x8006, 0x8006, 0xa08c, 0x003f, 0xa084, 0xffc0, 0xa210, 0x2100,
-+ 0xa319, 0x726e, 0x7372, 0x7028, 0xc084, 0x702a, 0x7007, 0x0001,
-+ 0xa006, 0x0e7f, 0x007c, 0x0e7e, 0x027e, 0x6838, 0xd0fc, 0x00c0,
-+ 0x4ac9, 0x6804, 0xa00d, 0x0040, 0x4a8f, 0x0d7e, 0x2071, 0xa600,
-+ 0xa016, 0x702c, 0x2168, 0x6904, 0x206a, 0x8210, 0x2d00, 0x81ff,
-+ 0x00c0, 0x4a82, 0x702e, 0x70ac, 0xa200, 0x70ae, 0x0d7f, 0x2071,
-+ 0xa714, 0x701c, 0xa005, 0x00c0, 0x4adb, 0x0068, 0x4ad9, 0x2071,
-+ 0xa835, 0x7200, 0x82ff, 0x0040, 0x4ad9, 0x6934, 0xa186, 0x0103,
-+ 0x00c0, 0x4aec, 0x6948, 0x6844, 0xa105, 0x00c0, 0x4acc, 0x2009,
-+ 0x8020, 0x2200, 0x0079, 0x4aac, 0x4ad9, 0x4ab1, 0x4b09, 0x4b17,
-+ 0x4ad9, 0x2071, 0x0000, 0x7018, 0xd084, 0x00c0, 0x4ad9, 0x7122,
-+ 0x683c, 0x7026, 0x6840, 0x702a, 0x701b, 0x0001, 0x2091, 0x4080,
-+ 0x2071, 0xa600, 0x702c, 0x206a, 0x2d00, 0x702e, 0x70ac, 0x8000,
-+ 0x70ae, 0x027f, 0x0e7f, 0x007c, 0x6844, 0xa086, 0x0100, 0x00c0,
-+ 0x4ad9, 0x6868, 0xa005, 0x00c0, 0x4ad9, 0x2009, 0x8020, 0x0078,
-+ 0x4aa9, 0x2071, 0xa714, 0x2d08, 0x206b, 0x0000, 0x7010, 0x8000,
-+ 0x7012, 0x7018, 0xa06d, 0x711a, 0x0040, 0x4ae9, 0x6902, 0x0078,
-+ 0x4aea, 0x711e, 0x0078, 0x4ac9, 0xa18c, 0x00ff, 0xa186, 0x0017,
-+ 0x0040, 0x4afa, 0xa186, 0x001e, 0x0040, 0x4afa, 0xa18e, 0x001f,
-+ 0x00c0, 0x4ad9, 0x684c, 0xd0cc, 0x0040, 0x4ad9, 0x6850, 0xa084,
-+ 0x00ff, 0xa086, 0x0001, 0x00c0, 0x4ad9, 0x2009, 0x8021, 0x0078,
-+ 0x4aa9, 0x7084, 0x8008, 0xa092, 0x001e, 0x00c8, 0x4ad9, 0x7186,
-+ 0xae90, 0x0003, 0xa210, 0x683c, 0x2012, 0x0078, 0x4b27, 0x7084,
-+ 0x8008, 0xa092, 0x000f, 0x00c8, 0x4ad9, 0x7186, 0xae90, 0x0003,
-+ 0x8003, 0xa210, 0x683c, 0x2012, 0x8210, 0x6840, 0x2012, 0x7088,
-+ 0xa10a, 0x0048, 0x4ac0, 0x718c, 0x7084, 0xa10a, 0x0048, 0x4ac0,
-+ 0x2071, 0x0000, 0x7018, 0xd084, 0x00c0, 0x4ac0, 0x2071, 0xa835,
-+ 0x7000, 0xa086, 0x0002, 0x00c0, 0x4b47, 0x1078, 0x4dc3, 0x2071,
-+ 0x0000, 0x701b, 0x0001, 0x2091, 0x4080, 0x0078, 0x4ac0, 0x1078,
-+ 0x4dee, 0x2071, 0x0000, 0x701b, 0x0001, 0x2091, 0x4080, 0x0078,
-+ 0x4ac0, 0x007e, 0x684c, 0x007e, 0x6837, 0x0103, 0x20a9, 0x001c,
-+ 0xad80, 0x0011, 0x20a0, 0x2001, 0x0000, 0x40a4, 0x007f, 0xa084,
-+ 0x00ff, 0x684e, 0x007f, 0x684a, 0x6952, 0x007c, 0x2071, 0xa714,
-+ 0x7004, 0x0079, 0x4b6b, 0x4b75, 0x4b86, 0x4d94, 0x4d95, 0x4dbc,
-+ 0x4dc2, 0x4b76, 0x4d82, 0x4d23, 0x4da5, 0x007c, 0x127e, 0x2091,
-+ 0x8000, 0x0068, 0x4b85, 0x2009, 0x000d, 0x7030, 0x200a, 0x2091,
-+ 0x4080, 0x7007, 0x0001, 0x700b, 0x0000, 0x127f, 0x2069, 0xa8c4,
-+ 0x6844, 0xa005, 0x0050, 0x4bae, 0x00c0, 0x4bae, 0x127e, 0x2091,
-+ 0x8000, 0x2069, 0x0000, 0x6934, 0x2001, 0xa720, 0x2004, 0xa10a,
-+ 0x0040, 0x4ba9, 0x0068, 0x4bad, 0x2069, 0x0000, 0x6818, 0xd084,
-+ 0x00c0, 0x4bad, 0x2009, 0x8040, 0x6922, 0x681b, 0x0001, 0x2091,
-+ 0x4080, 0x2069, 0xa8c4, 0x6847, 0xffff, 0x127f, 0x2069, 0xa600,
-+ 0x6848, 0x6964, 0xa102, 0x2069, 0xa835, 0x688a, 0x6984, 0x701c,
-+ 0xa06d, 0x0040, 0x4bc0, 0x81ff, 0x0040, 0x4c08, 0x0078, 0x4bd6,
-+ 0x81ff, 0x0040, 0x4cda, 0x2071, 0xa835, 0x7184, 0x7088, 0xa10a,
-+ 0x00c8, 0x4bd6, 0x7190, 0x2071, 0xa8c4, 0x7040, 0xa005, 0x0040,
-+ 0x4bd6, 0x00d0, 0x4cda, 0x7142, 0x0078, 0x4cda, 0x2071, 0xa835,
-+ 0x718c, 0x127e, 0x2091, 0x8000, 0x7084, 0xa10a, 0x0048, 0x4cf7,
-+ 0x0068, 0x4c8c, 0x2071, 0x0000, 0x7018, 0xd084, 0x00c0, 0x4c8c,
-+ 0x2001, 0xffff, 0x2071, 0xa8c4, 0x7042, 0x2071, 0xa835, 0x7000,
-+ 0xa086, 0x0002, 0x00c0, 0x4bfe, 0x1078, 0x4dc3, 0x2071, 0x0000,
-+ 0x701b, 0x0001, 0x2091, 0x4080, 0x0078, 0x4c8c, 0x1078, 0x4dee,
-+ 0x2071, 0x0000, 0x701b, 0x0001, 0x2091, 0x4080, 0x0078, 0x4c8c,
-+ 0x2071, 0xa835, 0x7000, 0xa005, 0x0040, 0x4cb9, 0x6934, 0xa186,
-+ 0x0103, 0x00c0, 0x4c8f, 0x684c, 0xd0bc, 0x00c0, 0x4cb9, 0x6948,
-+ 0x6844, 0xa105, 0x00c0, 0x4cac, 0x2009, 0x8020, 0x2071, 0xa835,
-+ 0x7000, 0x0079, 0x4c23, 0x4cb9, 0x4c71, 0x4c49, 0x4c5b, 0x4c28,
-+ 0x137e, 0x147e, 0x157e, 0x2099, 0xa676, 0x20a1, 0xa886, 0x20a9,
-+ 0x0004, 0x53a3, 0x157f, 0x147f, 0x137f, 0x2071, 0xa87d, 0xad80,
-+ 0x000f, 0x700e, 0x7013, 0x0002, 0x7007, 0x0002, 0x700b, 0x0000,
-+ 0x2e10, 0x1078, 0x13db, 0x2071, 0xa714, 0x7007, 0x0009, 0x0078,
-+ 0x4cda, 0x7084, 0x8008, 0xa092, 0x001e, 0x00c8, 0x4cda, 0xae90,
-+ 0x0003, 0xa210, 0x683c, 0x2012, 0x7186, 0x2071, 0xa714, 0x1078,
-+ 0x4e4c, 0x0078, 0x4cda, 0x7084, 0x8008, 0xa092, 0x000f, 0x00c8,
-+ 0x4cda, 0xae90, 0x0003, 0x8003, 0xa210, 0x683c, 0x2012, 0x8210,
-+ 0x6840, 0x2012, 0x7186, 0x2071, 0xa714, 0x1078, 0x4e4c, 0x0078,
-+ 0x4cda, 0x127e, 0x2091, 0x8000, 0x0068, 0x4c8c, 0x2071, 0x0000,
-+ 0x7018, 0xd084, 0x00c0, 0x4c8c, 0x7122, 0x683c, 0x7026, 0x6840,
-+ 0x702a, 0x701b, 0x0001, 0x2091, 0x4080, 0x127f, 0x2071, 0xa714,
-+ 0x1078, 0x4e4c, 0x0078, 0x4cda, 0x127f, 0x0078, 0x4cda, 0xa18c,
-+ 0x00ff, 0xa186, 0x0017, 0x0040, 0x4c9d, 0xa186, 0x001e, 0x0040,
-+ 0x4c9d, 0xa18e, 0x001f, 0x00c0, 0x4cb9, 0x684c, 0xd0cc, 0x0040,
-+ 0x4cb9, 0x6850, 0xa084, 0x00ff, 0xa086, 0x0001, 0x00c0, 0x4cb9,
-+ 0x2009, 0x8021, 0x0078, 0x4c1e, 0x6844, 0xa086, 0x0100, 0x00c0,
-+ 0x4cb9, 0x6868, 0xa005, 0x00c0, 0x4cb9, 0x2009, 0x8020, 0x0078,
-+ 0x4c1e, 0x2071, 0xa714, 0x1078, 0x4e60, 0x0040, 0x4cda, 0x2071,
-+ 0xa714, 0x700f, 0x0001, 0x6934, 0xa184, 0x00ff, 0xa086, 0x0003,
-+ 0x00c0, 0x4cd1, 0x810f, 0xa18c, 0x00ff, 0x8101, 0x0040, 0x4cd1,
-+ 0x710e, 0x7007, 0x0003, 0x1078, 0x4e80, 0x7050, 0xa086, 0x0100,
-+ 0x0040, 0x4d95, 0x127e, 0x2091, 0x8000, 0x2071, 0xa714, 0x7008,
-+ 0xa086, 0x0001, 0x00c0, 0x4cf5, 0x0068, 0x4cf5, 0x2009, 0x000d,
-+ 0x7030, 0x200a, 0x2091, 0x4080, 0x700b, 0x0000, 0x7004, 0xa086,
-+ 0x0006, 0x00c0, 0x4cf5, 0x7007, 0x0001, 0x127f, 0x007c, 0x2071,
-+ 0xa714, 0x1078, 0x4e60, 0x0040, 0x4d20, 0x2071, 0xa835, 0x7084,
-+ 0x700a, 0x20a9, 0x0020, 0x2099, 0xa836, 0x20a1, 0xa85d, 0x53a3,
-+ 0x7087, 0x0000, 0x2071, 0xa714, 0x2069, 0xa87d, 0x706c, 0x6826,
-+ 0x7070, 0x682a, 0x7074, 0x682e, 0x7078, 0x6832, 0x2d10, 0x1078,
-+ 0x13db, 0x7007, 0x0008, 0x2001, 0xffff, 0x2071, 0xa8c4, 0x7042,
-+ 0x127f, 0x0078, 0x4cda, 0x2069, 0xa87d, 0x6808, 0xa08e, 0x0000,
-+ 0x0040, 0x4d81, 0xa08e, 0x0200, 0x0040, 0x4d7f, 0xa08e, 0x0100,
-+ 0x00c0, 0x4d81, 0x127e, 0x2091, 0x8000, 0x0068, 0x4d7c, 0x2069,
-+ 0x0000, 0x6818, 0xd084, 0x00c0, 0x4d7c, 0x702c, 0x7130, 0x8108,
-+ 0xa102, 0x0048, 0x4d4a, 0xa00e, 0x7034, 0x706e, 0x7038, 0x7072,
-+ 0x0078, 0x4d54, 0x706c, 0xa080, 0x0040, 0x706e, 0x00c8, 0x4d54,
-+ 0x7070, 0xa081, 0x0000, 0x7072, 0x7132, 0x6936, 0x700b, 0x0000,
-+ 0x2001, 0xa85a, 0x2004, 0xa005, 0x00c0, 0x4d73, 0x6934, 0x2069,
-+ 0xa835, 0x689c, 0x699e, 0x2069, 0xa8c4, 0xa102, 0x00c0, 0x4d6c,
-+ 0x6844, 0xa005, 0x00d0, 0x4d7a, 0x2001, 0xa85b, 0x200c, 0x810d,
-+ 0x6946, 0x0078, 0x4d7a, 0x2009, 0x8040, 0x6922, 0x681b, 0x0001,
-+ 0x2091, 0x4080, 0x7007, 0x0001, 0x127f, 0x0078, 0x4d81, 0x7007,
-+ 0x0005, 0x007c, 0x701c, 0xa06d, 0x0040, 0x4d93, 0x1078, 0x4e60,
-+ 0x0040, 0x4d93, 0x7007, 0x0003, 0x1078, 0x4e80, 0x7050, 0xa086,
-+ 0x0100, 0x0040, 0x4d95, 0x007c, 0x007c, 0x7050, 0xa09e, 0x0100,
-+ 0x00c0, 0x4d9e, 0x7007, 0x0004, 0x0078, 0x4dbc, 0xa086, 0x0200,
-+ 0x00c0, 0x4da4, 0x7007, 0x0005, 0x007c, 0x2001, 0xa87f, 0x2004,
-+ 0xa08e, 0x0100, 0x00c0, 0x4db1, 0x7007, 0x0001, 0x1078, 0x4e4c,
-+ 0x007c, 0xa08e, 0x0000, 0x0040, 0x4db0, 0xa08e, 0x0200, 0x00c0,
-+ 0x4db0, 0x7007, 0x0005, 0x007c, 0x1078, 0x4e16, 0x7006, 0x1078,
-+ 0x4e4c, 0x007c, 0x007c, 0x0e7e, 0x157e, 0x2071, 0xa835, 0x7184,
-+ 0x81ff, 0x0040, 0x4deb, 0xa006, 0x7086, 0xae80, 0x0003, 0x2071,
-+ 0x0000, 0x21a8, 0x2014, 0x7226, 0x8000, 0x0070, 0x4de8, 0x2014,
-+ 0x722a, 0x8000, 0x0070, 0x4de8, 0x2014, 0x722e, 0x8000, 0x0070,
-+ 0x4de8, 0x2014, 0x723a, 0x8000, 0x0070, 0x4de8, 0x2014, 0x723e,
-+ 0xa180, 0x8030, 0x7022, 0x157f, 0x0e7f, 0x007c, 0x0e7e, 0x157e,
-+ 0x2071, 0xa835, 0x7184, 0x81ff, 0x0040, 0x4e13, 0xa006, 0x7086,
-+ 0xae80, 0x0003, 0x2071, 0x0000, 0x21a8, 0x2014, 0x7226, 0x8000,
-+ 0x2014, 0x722a, 0x8000, 0x0070, 0x4e0c, 0x2014, 0x723a, 0x8000,
-+ 0x2014, 0x723e, 0x0078, 0x4e10, 0x2001, 0x8020, 0x0078, 0x4e12,
-+ 0x2001, 0x8042, 0x7022, 0x157f, 0x0e7f, 0x007c, 0x702c, 0x7130,
-+ 0x8108, 0xa102, 0x0048, 0x4e23, 0xa00e, 0x7034, 0x706e, 0x7038,
-+ 0x7072, 0x0078, 0x4e2d, 0x706c, 0xa080, 0x0040, 0x706e, 0x00c8,
-+ 0x4e2d, 0x7070, 0xa081, 0x0000, 0x7072, 0x7132, 0x700c, 0x8001,
-+ 0x700e, 0x00c0, 0x4e43, 0x127e, 0x2091, 0x8000, 0x0068, 0x4e46,
-+ 0x2001, 0x000d, 0x2102, 0x2091, 0x4080, 0x2001, 0x0001, 0x700b,
-+ 0x0000, 0x127f, 0x007c, 0x2001, 0x0007, 0x007c, 0x2001, 0x0006,
-+ 0x700b, 0x0001, 0x127f, 0x007c, 0x701c, 0xa06d, 0x0040, 0x4e5f,
-+ 0x127e, 0x2091, 0x8000, 0x7010, 0x8001, 0x7012, 0x2d04, 0x701e,
-+ 0xa005, 0x00c0, 0x4e5c, 0x701a, 0x127f, 0x1078, 0x13a4, 0x007c,
-+ 0x2019, 0x000d, 0x2304, 0x230c, 0xa10e, 0x0040, 0x4e6f, 0x2304,
-+ 0x230c, 0xa10e, 0x0040, 0x4e6f, 0xa006, 0x0078, 0x4e7f, 0x732c,
-+ 0x8319, 0x7130, 0xa102, 0x00c0, 0x4e79, 0x2300, 0xa005, 0x0078,
-+ 0x4e7f, 0x0048, 0x4e7e, 0xa302, 0x0078, 0x4e7f, 0x8002, 0x007c,
-+ 0x2d00, 0x7026, 0xa080, 0x000d, 0x7056, 0x7053, 0x0000, 0x127e,
-+ 0x2091, 0x8000, 0x2009, 0xa8d6, 0x2104, 0xc08d, 0x200a, 0x127f,
-+ 0x1078, 0x13f9, 0x007c, 0x2071, 0xa6e2, 0x7003, 0x0000, 0x7007,
-+ 0x0000, 0x700f, 0x0000, 0x702b, 0x0001, 0x704f, 0x0000, 0x7053,
-+ 0x0001, 0x705f, 0x0020, 0x7063, 0x0040, 0x7083, 0x0000, 0x708b,
-+ 0x0000, 0x708f, 0x0001, 0x70bf, 0x0000, 0x007c, 0x0e7e, 0x2071,
-+ 0xa6e2, 0x6848, 0xa005, 0x00c0, 0x4ebc, 0x7028, 0xc085, 0x702a,
-+ 0xa085, 0x0001, 0x0078, 0x4ee1, 0x6a50, 0x7236, 0x6b54, 0x733a,
-+ 0x6858, 0x703e, 0x707a, 0x685c, 0x7042, 0x707e, 0x6848, 0x702e,
-+ 0x6840, 0x7032, 0x2009, 0x000c, 0x200a, 0x8007, 0x8006, 0x8006,
-+ 0xa08c, 0x003f, 0xa084, 0xffc0, 0xa210, 0x2100, 0xa319, 0x7272,
-+ 0x7376, 0x7028, 0xc084, 0x702a, 0x7007, 0x0001, 0x700f, 0x0000,
-+ 0xa006, 0x0e7f, 0x007c, 0x2b78, 0x2071, 0xa6e2, 0x7004, 0x1079,
-+ 0x4f41, 0x700c, 0x0079, 0x4eec, 0x4ef1, 0x4ee6, 0x4ee6, 0x4ee6,
-+ 0x4ee6, 0x007c, 0x700c, 0x0079, 0x4ef5, 0x4efa, 0x4f3f, 0x4f3f,
-+ 0x4f40, 0x4f40, 0x7830, 0x7930, 0xa106, 0x0040, 0x4f04, 0x7830,
-+ 0x7930, 0xa106, 0x00c0, 0x4f2a, 0x7030, 0xa10a, 0x0040, 0x4f2a,
-+ 0x00c8, 0x4f0c, 0x712c, 0xa10a, 0xa18a, 0x0002, 0x00c8, 0x4f2b,
-+ 0x1078, 0x1370, 0x0040, 0x4f2a, 0x2d00, 0x705a, 0x7063, 0x0040,
-+ 0x2001, 0x0003, 0x7057, 0x0000, 0x127e, 0x007e, 0x2091, 0x8000,
-+ 0x2009, 0xa8d6, 0x2104, 0xc085, 0x200a, 0x007f, 0x700e, 0x127f,
-+ 0x1078, 0x13f9, 0x007c, 0x1078, 0x1370, 0x0040, 0x4f2a, 0x2d00,
-+ 0x705a, 0x1078, 0x1370, 0x00c0, 0x4f37, 0x0078, 0x4f16, 0x2d00,
-+ 0x7086, 0x7063, 0x0080, 0x2001, 0x0004, 0x0078, 0x4f1a, 0x007c,
-+ 0x007c, 0x4f52, 0x4f53, 0x4f8a, 0x4f8b, 0x4f3f, 0x4fc1, 0x4fc6,
-+ 0x4ffd, 0x4ffe, 0x5019, 0x501a, 0x501b, 0x501c, 0x501d, 0x501e,
-+ 0x509e, 0x50c8, 0x007c, 0x700c, 0x0079, 0x4f56, 0x4f5b, 0x4f5e,
-+ 0x4f6e, 0x4f89, 0x4f89, 0x1078, 0x4ef2, 0x007c, 0x127e, 0x8001,
-+ 0x700e, 0x7058, 0x007e, 0x1078, 0x5464, 0x0040, 0x4f6b, 0x2091,
-+ 0x8000, 0x1078, 0x4ef2, 0x0d7f, 0x0078, 0x4f77, 0x127e, 0x8001,
-+ 0x700e, 0x1078, 0x5464, 0x7058, 0x2068, 0x7084, 0x705a, 0x6803,
-+ 0x0000, 0x6807, 0x0000, 0x6834, 0xa084, 0x00ff, 0xa08a, 0x0020,
-+ 0x00c8, 0x4f86, 0x1079, 0x4fa1, 0x127f, 0x007c, 0x127f, 0x1078,
-+ 0x501f, 0x007c, 0x007c, 0x007c, 0x0e7e, 0x2071, 0xa6e2, 0x700c,
-+ 0x0079, 0x4f92, 0x4f97, 0x4f97, 0x4f97, 0x4f99, 0x4f9d, 0x0e7f,
-+ 0x007c, 0x700f, 0x0001, 0x0078, 0x4f9f, 0x700f, 0x0002, 0x0e7f,
-+ 0x007c, 0x501f, 0x501f, 0x503b, 0x501f, 0x5171, 0x501f, 0x501f,
-+ 0x501f, 0x501f, 0x501f, 0x503b, 0x51bb, 0x5208, 0x5261, 0x5277,
-+ 0x501f, 0x501f, 0x5057, 0x503b, 0x501f, 0x501f, 0x5078, 0x5338,
-+ 0x5356, 0x501f, 0x5057, 0x501f, 0x501f, 0x501f, 0x501f, 0x506d,
-+ 0x5356, 0x7020, 0x2068, 0x1078, 0x13a4, 0x007c, 0x700c, 0x0079,
-+ 0x4fc9, 0x4fce, 0x4fd1, 0x4fe1, 0x4ffc, 0x4ffc, 0x1078, 0x4ef2,
-+ 0x007c, 0x127e, 0x8001, 0x700e, 0x7058, 0x007e, 0x1078, 0x5464,
-+ 0x0040, 0x4fde, 0x2091, 0x8000, 0x1078, 0x4ef2, 0x0d7f, 0x0078,
-+ 0x4fea, 0x127e, 0x8001, 0x700e, 0x1078, 0x5464, 0x7058, 0x2068,
-+ 0x7084, 0x705a, 0x6803, 0x0000, 0x6807, 0x0000, 0x6834, 0xa084,
-+ 0x00ff, 0xa08a, 0x001a, 0x00c8, 0x4ff9, 0x1079, 0x4fff, 0x127f,
-+ 0x007c, 0x127f, 0x1078, 0x501f, 0x007c, 0x007c, 0x007c, 0x501f,
-+ 0x503b, 0x515b, 0x501f, 0x503b, 0x501f, 0x503b, 0x503b, 0x501f,
-+ 0x503b, 0x515b, 0x503b, 0x503b, 0x503b, 0x503b, 0x503b, 0x501f,
-+ 0x503b, 0x515b, 0x501f, 0x501f, 0x503b, 0x501f, 0x501f, 0x501f,
-+ 0x503b, 0x007c, 0x007c, 0x007c, 0x007c, 0x007c, 0x007c, 0x7007,
-+ 0x0001, 0x6838, 0xa084, 0x00ff, 0xc0d5, 0x683a, 0x127e, 0x2091,
-+ 0x8000, 0x1078, 0x4a73, 0x127f, 0x007c, 0x7007, 0x0001, 0x6838,
-+ 0xa084, 0x00ff, 0xc0e5, 0x683a, 0x127e, 0x2091, 0x8000, 0x1078,
-+ 0x4a73, 0x127f, 0x007c, 0x7007, 0x0001, 0x6838, 0xa084, 0x00ff,
-+ 0xc0ed, 0x683a, 0x127e, 0x2091, 0x8000, 0x1078, 0x4a73, 0x127f,
-+ 0x007c, 0x7007, 0x0001, 0x6838, 0xa084, 0x00ff, 0xc0dd, 0x683a,
-+ 0x127e, 0x2091, 0x8000, 0x1078, 0x4a73, 0x127f, 0x007c, 0x6834,
-+ 0x8007, 0xa084, 0x00ff, 0x0040, 0x502d, 0x8001, 0x00c0, 0x5064,
-+ 0x7007, 0x0001, 0x0078, 0x513a, 0x7007, 0x0006, 0x7012, 0x2d00,
-+ 0x7016, 0x701a, 0x704b, 0x513a, 0x007c, 0x684c, 0xa084, 0x00c0,
-+ 0xa086, 0x00c0, 0x00c0, 0x5078, 0x7007, 0x0001, 0x0078, 0x5373,
-+ 0x2d00, 0x7016, 0x701a, 0x20a9, 0x0004, 0xa080, 0x0024, 0x2098,
-+ 0x20a1, 0xa70d, 0x53a3, 0x6858, 0x7012, 0xa082, 0x0401, 0x00c8,
-+ 0x5049, 0x6884, 0xa08a, 0x0002, 0x00c8, 0x5049, 0x82ff, 0x00c0,
-+ 0x509a, 0x6888, 0x698c, 0xa105, 0x0040, 0x509a, 0x2001, 0x510a,
-+ 0x0078, 0x509d, 0xa280, 0x5100, 0x2004, 0x70c6, 0x7010, 0xa015,
-+ 0x0040, 0x50e8, 0x1078, 0x1370, 0x00c0, 0x50a9, 0x7007, 0x000f,
-+ 0x007c, 0x2d00, 0x7022, 0x70c4, 0x2060, 0x6000, 0x6836, 0x6004,
-+ 0xad00, 0x7096, 0x6008, 0xa20a, 0x00c8, 0x50b8, 0xa00e, 0x2200,
-+ 0x7112, 0x620c, 0x8003, 0x800b, 0xa296, 0x0004, 0x0040, 0x50c1,
-+ 0xa108, 0x719a, 0x810b, 0x719e, 0xae90, 0x0022, 0x1078, 0x13db,
-+ 0x7090, 0xa08e, 0x0100, 0x0040, 0x50dc, 0xa086, 0x0200, 0x0040,
-+ 0x50d4, 0x7007, 0x0010, 0x007c, 0x7020, 0x2068, 0x1078, 0x13a4,
-+ 0x7014, 0x2068, 0x0078, 0x5049, 0x7020, 0x2068, 0x7018, 0x6802,
-+ 0x6807, 0x0000, 0x2d08, 0x2068, 0x6906, 0x711a, 0x0078, 0x509e,
-+ 0x7014, 0x2068, 0x7007, 0x0001, 0x6884, 0xa005, 0x00c0, 0x50f7,
-+ 0x6888, 0x698c, 0xa105, 0x0040, 0x50f7, 0x1078, 0x510e, 0x6834,
-+ 0xa084, 0x00ff, 0xa086, 0x001e, 0x0040, 0x5373, 0x0078, 0x513a,
-+ 0x5102, 0x5106, 0x0002, 0x0011, 0x0007, 0x0004, 0x000a, 0x000f,
-+ 0x0005, 0x0006, 0x000a, 0x0011, 0x0005, 0x0004, 0x0f7e, 0x0e7e,
-+ 0x0c7e, 0x077e, 0x067e, 0x6f88, 0x6e8c, 0x6804, 0x2060, 0xacf0,
-+ 0x0021, 0xacf8, 0x0027, 0x2009, 0x0005, 0x700c, 0x7816, 0x7008,
-+ 0x7812, 0x7004, 0x7806, 0x7000, 0x7802, 0x7e0e, 0x7f0a, 0x8109,
-+ 0x0040, 0x5130, 0xaef2, 0x0004, 0xaffa, 0x0006, 0x0078, 0x511d,
-+ 0x6004, 0xa065, 0x00c0, 0x5117, 0x067f, 0x077f, 0x0c7f, 0x0e7f,
-+ 0x0f7f, 0x007c, 0x2009, 0xa62f, 0x210c, 0x81ff, 0x00c0, 0x5155,
-+ 0x6838, 0xa084, 0x00ff, 0x683a, 0x1078, 0x4353, 0x00c0, 0x5149,
-+ 0x007c, 0x1078, 0x4b51, 0x127e, 0x2091, 0x8000, 0x1078, 0x8f7d,
-+ 0x1078, 0x4a73, 0x127f, 0x0078, 0x5148, 0x2001, 0x0028, 0x2009,
-+ 0x0000, 0x0078, 0x5149, 0x7018, 0x6802, 0x2d08, 0x2068, 0x6906,
-+ 0x711a, 0x7010, 0x8001, 0x7012, 0x0040, 0x516a, 0x7007, 0x0006,
-+ 0x0078, 0x5170, 0x7014, 0x2068, 0x7007, 0x0001, 0x7048, 0x107a,
-+ 0x007c, 0x7007, 0x0001, 0x6944, 0x810f, 0xa18c, 0x00ff, 0x6848,
-+ 0xa084, 0x00ff, 0x20a9, 0x0001, 0xa096, 0x0001, 0x0040, 0x519a,
-+ 0x2009, 0x0000, 0x20a9, 0x00ff, 0xa096, 0x0002, 0x0040, 0x519a,
-+ 0xa005, 0x00c0, 0x51ad, 0x6944, 0x810f, 0xa18c, 0x00ff, 0x1078,
-+ 0x45c4, 0x00c0, 0x51ad, 0x067e, 0x6e50, 0x1078, 0x46b3, 0x067f,
-+ 0x0078, 0x51ad, 0x047e, 0x2011, 0xa60c, 0x2224, 0xc484, 0xc48c,
-+ 0x2412, 0x047f, 0x0c7e, 0x1078, 0x45c4, 0x00c0, 0x51a9, 0x1078,
-+ 0x4852, 0x8108, 0x00f0, 0x51a3, 0x0c7f, 0x684c, 0xd084, 0x00c0,
-+ 0x51b4, 0x1078, 0x13a4, 0x007c, 0x127e, 0x2091, 0x8000, 0x1078,
-+ 0x4a73, 0x127f, 0x007c, 0x127e, 0x2091, 0x8000, 0x7007, 0x0001,
-+ 0x2001, 0xa653, 0x2004, 0xd0a4, 0x0040, 0x51ff, 0x2061, 0xa933,
-+ 0x6100, 0xd184, 0x0040, 0x51df, 0x6858, 0xa084, 0x00ff, 0x00c0,
-+ 0x5202, 0x6000, 0xd084, 0x0040, 0x51ff, 0x6004, 0xa005, 0x00c0,
-+ 0x5205, 0x6003, 0x0000, 0x600b, 0x0000, 0x0078, 0x51fc, 0x2011,
-+ 0x0001, 0x6860, 0xa005, 0x00c0, 0x51e7, 0x2001, 0x001e, 0x8000,
-+ 0x6016, 0x6858, 0xa084, 0x00ff, 0x0040, 0x51ff, 0x6006, 0x6858,
-+ 0x8007, 0xa084, 0x00ff, 0x0040, 0x51ff, 0x600a, 0x6858, 0x8000,
-+ 0x00c0, 0x51fb, 0xc28d, 0x6202, 0x127f, 0x0078, 0x5453, 0x127f,
-+ 0x0078, 0x544b, 0x127f, 0x0078, 0x5443, 0x127f, 0x0078, 0x5447,
-+ 0x127e, 0x2091, 0x8000, 0x7007, 0x0001, 0x2001, 0xa653, 0x2004,
-+ 0xd0a4, 0x0040, 0x525e, 0x2061, 0xa933, 0x6000, 0xd084, 0x0040,
-+ 0x525e, 0x6204, 0x6308, 0xd08c, 0x00c0, 0x5250, 0x6c48, 0xa484,
-+ 0x0003, 0x0040, 0x5236, 0x6958, 0xa18c, 0x00ff, 0x8001, 0x00c0,
-+ 0x522f, 0x2100, 0xa210, 0x0048, 0x525b, 0x0078, 0x5236, 0x8001,
-+ 0x00c0, 0x525b, 0x2100, 0xa212, 0x0048, 0x525b, 0xa484, 0x000c,
-+ 0x0040, 0x5250, 0x6958, 0x810f, 0xa18c, 0x00ff, 0xa082, 0x0004,
-+ 0x00c0, 0x5248, 0x2100, 0xa318, 0x0048, 0x525b, 0x0078, 0x5250,
-+ 0xa082, 0x0004, 0x00c0, 0x525b, 0x2100, 0xa31a, 0x0048, 0x525b,
-+ 0x6860, 0xa005, 0x0040, 0x5256, 0x8000, 0x6016, 0x6206, 0x630a,
-+ 0x127f, 0x0078, 0x5453, 0x127f, 0x0078, 0x544f, 0x127f, 0x0078,
-+ 0x544b, 0x127e, 0x2091, 0x8000, 0x7007, 0x0001, 0x2061, 0xa933,
-+ 0x6300, 0xd38c, 0x00c0, 0x5271, 0x6308, 0x8318, 0x0048, 0x5274,
-+ 0x630a, 0x127f, 0x0078, 0x5461, 0x127f, 0x0078, 0x544f, 0x127e,
-+ 0x0c7e, 0x2091, 0x8000, 0x7007, 0x0001, 0x684c, 0xd0ac, 0x0040,
-+ 0x528b, 0x0c7e, 0x2061, 0xa933, 0x6000, 0xa084, 0xfcff, 0x6002,
-+ 0x0c7f, 0x0078, 0x52ba, 0x6858, 0xa005, 0x0040, 0x52d1, 0x685c,
-+ 0xa065, 0x0040, 0x52cd, 0x2001, 0xa62f, 0x2004, 0xa005, 0x0040,
-+ 0x529d, 0x1078, 0x8ec6, 0x0078, 0x52ab, 0x6013, 0x0400, 0x6037,
-+ 0x0000, 0x694c, 0xd1a4, 0x0040, 0x52a7, 0x6950, 0x6136, 0x2009,
-+ 0x0041, 0x1078, 0x775c, 0x6958, 0xa18c, 0xff00, 0xa186, 0x2000,
-+ 0x00c0, 0x52ba, 0x027e, 0x2009, 0x0000, 0x2011, 0xfdff, 0x1078,
-+ 0x5bf1, 0x027f, 0x684c, 0xd0c4, 0x0040, 0x52c9, 0x2061, 0xa933,
-+ 0x6000, 0xd08c, 0x00c0, 0x52c9, 0x6008, 0x8000, 0x0048, 0x52cd,
-+ 0x600a, 0x0c7f, 0x127f, 0x0078, 0x5453, 0x0c7f, 0x127f, 0x0078,
-+ 0x544b, 0x6954, 0xa186, 0x0045, 0x0040, 0x5306, 0xa186, 0x002a,
-+ 0x00c0, 0x52e1, 0x2001, 0xa60c, 0x200c, 0xc194, 0x2102, 0x0078,
-+ 0x52ba, 0xa186, 0x0020, 0x0040, 0x52fa, 0xa186, 0x0029, 0x0040,
-+ 0x52ed, 0xa186, 0x002d, 0x00c0, 0x52cd, 0x6944, 0xa18c, 0xff00,
-+ 0x810f, 0x1078, 0x45c4, 0x00c0, 0x52ba, 0x6000, 0xc0e4, 0x6002,
-+ 0x0078, 0x52ba, 0x685c, 0xa065, 0x0040, 0x52cd, 0x6007, 0x0024,
-+ 0x2001, 0xa8a3, 0x2004, 0x6016, 0x0078, 0x52ba, 0x685c, 0xa065,
-+ 0x0040, 0x52cd, 0x0e7e, 0x6860, 0xa075, 0x2001, 0xa62f, 0x2004,
-+ 0xa005, 0x0040, 0x531e, 0x1078, 0x8ec6, 0x8eff, 0x0040, 0x531b,
-+ 0x2e60, 0x1078, 0x8ec6, 0x0e7f, 0x0078, 0x52ba, 0x6024, 0xc0dc,
-+ 0xc0d5, 0x6026, 0x2e60, 0x6007, 0x003a, 0x6870, 0xa005, 0x0040,
-+ 0x532f, 0x6007, 0x003b, 0x6874, 0x602a, 0x6878, 0x6012, 0x6003,
-+ 0x0001, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0e7f, 0x0078, 0x52ba,
-+ 0x2061, 0xa933, 0x6000, 0xd084, 0x0040, 0x5352, 0xd08c, 0x00c0,
-+ 0x5461, 0x2091, 0x8000, 0x6204, 0x8210, 0x0048, 0x534c, 0x6206,
-+ 0x2091, 0x8001, 0x0078, 0x5461, 0x2091, 0x8001, 0x6853, 0x0016,
-+ 0x0078, 0x545a, 0x6853, 0x0007, 0x0078, 0x545a, 0x6834, 0x8007,
-+ 0xa084, 0x00ff, 0x00c0, 0x5360, 0x1078, 0x502d, 0x0078, 0x5372,
-+ 0x2030, 0x8001, 0x00c0, 0x536a, 0x7007, 0x0001, 0x1078, 0x5373,
-+ 0x0078, 0x5372, 0x7007, 0x0006, 0x7012, 0x2d00, 0x7016, 0x701a,
-+ 0x704b, 0x5373, 0x007c, 0x0e7e, 0x127e, 0x2091, 0x8000, 0xa03e,
-+ 0x2009, 0xa62f, 0x210c, 0x81ff, 0x00c0, 0x53ff, 0x2009, 0xa60c,
-+ 0x210c, 0xd194, 0x00c0, 0x5431, 0x6848, 0x2070, 0xae82, 0xad00,
-+ 0x0048, 0x53ef, 0x2001, 0xa616, 0x2004, 0xae02, 0x00c8, 0x53ef,
-+ 0x2061, 0xa933, 0x6100, 0xa184, 0x0301, 0xa086, 0x0001, 0x00c0,
-+ 0x53d2, 0x711c, 0xa186, 0x0006, 0x00c0, 0x53da, 0x7018, 0xa005,
-+ 0x0040, 0x53ff, 0x2004, 0xd0e4, 0x00c0, 0x542b, 0x7024, 0xd0dc,
-+ 0x00c0, 0x5435, 0x6853, 0x0000, 0x6803, 0x0000, 0x2d08, 0x7010,
-+ 0xa005, 0x00c0, 0x53be, 0x7112, 0x684c, 0xd0f4, 0x00c0, 0x5439,
-+ 0x2e60, 0x1078, 0x5b27, 0x127f, 0x0e7f, 0x007c, 0x2068, 0x6800,
-+ 0xa005, 0x00c0, 0x53be, 0x6902, 0x2168, 0x684c, 0xd0f4, 0x00c0,
-+ 0x5439, 0x127f, 0x0e7f, 0x007c, 0x127f, 0x0e7f, 0x6853, 0x0006,
-+ 0x0078, 0x545a, 0xd184, 0x0040, 0x53cc, 0xd1c4, 0x00c0, 0x53f3,
-+ 0x0078, 0x53f7, 0x6944, 0xa18c, 0xff00, 0x810f, 0x1078, 0x45c4,
-+ 0x00c0, 0x542b, 0x6000, 0xd0e4, 0x00c0, 0x542b, 0x711c, 0xa186,
-+ 0x0007, 0x00c0, 0x53ef, 0x6853, 0x0002, 0x0078, 0x542d, 0x6853,
-+ 0x0008, 0x0078, 0x542d, 0x6853, 0x000e, 0x0078, 0x542d, 0x6853,
-+ 0x0017, 0x0078, 0x542d, 0x6853, 0x0035, 0x0078, 0x542d, 0x2001,
-+ 0xa672, 0x2004, 0xd0fc, 0x0040, 0x5427, 0x6848, 0x2070, 0xae82,
-+ 0xad00, 0x0048, 0x5427, 0x6058, 0xae02, 0x00c8, 0x5427, 0x711c,
-+ 0xa186, 0x0006, 0x00c0, 0x5427, 0x7018, 0xa005, 0x0040, 0x5427,
-+ 0x2004, 0xd0bc, 0x0040, 0x5427, 0x2039, 0x0001, 0x7000, 0xa086,
-+ 0x0007, 0x00c0, 0x537e, 0x7003, 0x0002, 0x0078, 0x537e, 0x6853,
-+ 0x0028, 0x0078, 0x542d, 0x6853, 0x0029, 0x127f, 0x0e7f, 0x0078,
-+ 0x545a, 0x6853, 0x002a, 0x0078, 0x542d, 0x6853, 0x0045, 0x0078,
-+ 0x542d, 0x2e60, 0x2019, 0x0002, 0x6017, 0x0014, 0x1078, 0x9dc7,
-+ 0x127f, 0x0e7f, 0x007c, 0x2009, 0x003e, 0x0078, 0x5455, 0x2009,
-+ 0x0004, 0x0078, 0x5455, 0x2009, 0x0006, 0x0078, 0x5455, 0x2009,
-+ 0x0016, 0x0078, 0x5455, 0x2009, 0x0001, 0x6854, 0xa084, 0xff00,
-+ 0xa105, 0x6856, 0x2091, 0x8000, 0x1078, 0x4a73, 0x2091, 0x8001,
-+ 0x007c, 0x1078, 0x13a4, 0x007c, 0x702c, 0x7130, 0x8108, 0xa102,
-+ 0x0048, 0x5471, 0xa00e, 0x7034, 0x7072, 0x7038, 0x7076, 0x0078,
-+ 0x547d, 0x7070, 0xa080, 0x0040, 0x7072, 0x00c8, 0x547d, 0x7074,
-+ 0xa081, 0x0000, 0x7076, 0xa085, 0x0001, 0x7932, 0x7132, 0x007c,
-+ 0x0d7e, 0x1078, 0x5b1e, 0x0d7f, 0x007c, 0x0d7e, 0x2011, 0x0004,
-+ 0x2204, 0xa085, 0x8002, 0x2012, 0x0d7f, 0x007c, 0x20e1, 0x0002,
-+ 0x3d08, 0x20e1, 0x2000, 0x3d00, 0xa084, 0x7000, 0x0040, 0x549c,
-+ 0xa086, 0x1000, 0x00c0, 0x54d3, 0x20e1, 0x0000, 0x3d00, 0xa094,
-+ 0xff00, 0x8217, 0xa084, 0xf000, 0xa086, 0x3000, 0x00c0, 0x54b7,
-+ 0xa184, 0xff00, 0x8007, 0xa086, 0x0008, 0x00c0, 0x54d3, 0x1078,
-+ 0x29bb, 0x00c0, 0x54d3, 0x1078, 0x56b2, 0x0078, 0x54ce, 0x20e1,
-+ 0x0004, 0x3d60, 0xd1bc, 0x00c0, 0x54be, 0x3e60, 0xac84, 0x000f,
-+ 0x00c0, 0x54d3, 0xac82, 0xad00, 0x0048, 0x54d3, 0x6858, 0xac02,
-+ 0x00c8, 0x54d3, 0x2009, 0x0047, 0x1078, 0x775c, 0x7a1c, 0xd284,
-+ 0x00c0, 0x548e, 0x007c, 0xa016, 0x1078, 0x15fa, 0x0078, 0x54ce,
-+ 0x0078, 0x54d3, 0x781c, 0xd08c, 0x0040, 0x5502, 0x157e, 0x137e,
-+ 0x147e, 0x20e1, 0x3000, 0x3d20, 0x3e28, 0xa584, 0x0076, 0x00c0,
-+ 0x5518, 0xa484, 0x7000, 0xa086, 0x1000, 0x00c0, 0x5507, 0x1078,
-+ 0x554e, 0x0040, 0x5518, 0x20e1, 0x3000, 0x7828, 0x7828, 0x1078,
-+ 0x556c, 0x147f, 0x137f, 0x157f, 0x2009, 0xa8b9, 0x2104, 0xa005,
-+ 0x00c0, 0x5503, 0x007c, 0x1078, 0x62d1, 0x0078, 0x5502, 0xa484,
-+ 0x7000, 0x00c0, 0x5518, 0x1078, 0x554e, 0x0040, 0x552c, 0x7000,
-+ 0xa084, 0xff00, 0xa086, 0x8100, 0x0040, 0x54f3, 0x0078, 0x552c,
-+ 0x1078, 0xa54f, 0xd5a4, 0x0040, 0x5528, 0x047e, 0x1078, 0x1b22,
-+ 0x047f, 0x20e1, 0x9010, 0x2001, 0x0138, 0x2202, 0x0078, 0x5530,
-+ 0x1078, 0x554e, 0x6883, 0x0000, 0x20e1, 0x3000, 0x7828, 0x7828,
-+ 0x1078, 0x5537, 0x147f, 0x137f, 0x157f, 0x0078, 0x5502, 0x2001,
-+ 0xa60e, 0x2004, 0xd08c, 0x0040, 0x554d, 0x2001, 0xa600, 0x2004,
-+ 0xa086, 0x0003, 0x00c0, 0x554d, 0x027e, 0x037e, 0x2011, 0x8048,
-+ 0x2518, 0x1078, 0x361b, 0x037f, 0x027f, 0x007c, 0xa484, 0x01ff,
-+ 0x6882, 0xa005, 0x0040, 0x5560, 0xa080, 0x001f, 0xa084, 0x03f8,
-+ 0x80ac, 0x20e1, 0x1000, 0x2ea0, 0x2099, 0x020a, 0x53a5, 0x007c,
-+ 0x20a9, 0x000c, 0x20e1, 0x1000, 0x2ea0, 0x2099, 0x020a, 0x53a5,
-+ 0xa085, 0x0001, 0x0078, 0x555f, 0x7000, 0xa084, 0xff00, 0xa08c,
-+ 0xf000, 0x8007, 0xa196, 0x0000, 0x00c0, 0x5579, 0x0078, 0x57ba,
-+ 0x007c, 0xa196, 0x2000, 0x00c0, 0x558a, 0x6900, 0xa18e, 0x0001,
-+ 0x00c0, 0x5586, 0x1078, 0x3aec, 0x0078, 0x5578, 0x1078, 0x5592,
-+ 0x0078, 0x5578, 0xa196, 0x8000, 0x00c0, 0x5578, 0x1078, 0x5871,
-+ 0x0078, 0x5578, 0x0c7e, 0x7110, 0xa18c, 0xff00, 0x810f, 0xa196,
-+ 0x0001, 0x0040, 0x559f, 0xa196, 0x0023, 0x00c0, 0x56aa, 0xa08e,
-+ 0x0023, 0x00c0, 0x55d4, 0x1078, 0x591d, 0x0040, 0x56aa, 0x7124,
-+ 0x610a, 0x7030, 0xa08e, 0x0200, 0x00c0, 0x55b8, 0x7034, 0xa005,
-+ 0x00c0, 0x56aa, 0x2009, 0x0015, 0x1078, 0x775c, 0x0078, 0x56aa,
-+ 0xa08e, 0x0214, 0x0040, 0x55c0, 0xa08e, 0x0210, 0x00c0, 0x55c6,
-+ 0x2009, 0x0015, 0x1078, 0x775c, 0x0078, 0x56aa, 0xa08e, 0x0100,
-+ 0x00c0, 0x56aa, 0x7034, 0xa005, 0x00c0, 0x56aa, 0x2009, 0x0016,
-+ 0x1078, 0x775c, 0x0078, 0x56aa, 0xa08e, 0x0022, 0x00c0, 0x56aa,
-+ 0x7030, 0xa08e, 0x0300, 0x00c0, 0x55e5, 0x7034, 0xa005, 0x00c0,
-+ 0x56aa, 0x2009, 0x0017, 0x0078, 0x5676, 0xa08e, 0x0500, 0x00c0,
-+ 0x55f1, 0x7034, 0xa005, 0x00c0, 0x56aa, 0x2009, 0x0018, 0x0078,
-+ 0x5676, 0xa08e, 0x2010, 0x00c0, 0x55f9, 0x2009, 0x0019, 0x0078,
-+ 0x5676, 0xa08e, 0x2110, 0x00c0, 0x5601, 0x2009, 0x001a, 0x0078,
-+ 0x5676, 0xa08e, 0x5200, 0x00c0, 0x560d, 0x7034, 0xa005, 0x00c0,
-+ 0x56aa, 0x2009, 0x001b, 0x0078, 0x5676, 0xa08e, 0x5000, 0x00c0,
-+ 0x5619, 0x7034, 0xa005, 0x00c0, 0x56aa, 0x2009, 0x001c, 0x0078,
-+ 0x5676, 0xa08e, 0x1300, 0x00c0, 0x5621, 0x2009, 0x0034, 0x0078,
-+ 0x5676, 0xa08e, 0x1200, 0x00c0, 0x562d, 0x7034, 0xa005, 0x00c0,
-+ 0x56aa, 0x2009, 0x0024, 0x0078, 0x5676, 0xa08c, 0xff00, 0xa18e,
-+ 0x2400, 0x00c0, 0x5637, 0x2009, 0x002d, 0x0078, 0x5676, 0xa08c,
-+ 0xff00, 0xa18e, 0x5300, 0x00c0, 0x5641, 0x2009, 0x002a, 0x0078,
-+ 0x5676, 0xa08e, 0x0f00, 0x00c0, 0x5649, 0x2009, 0x0020, 0x0078,
-+ 0x5676, 0xa08e, 0x5300, 0x00c0, 0x564f, 0x0078, 0x566c, 0xa08e,
-+ 0x6104, 0x00c0, 0x566c, 0x2011, 0xab8d, 0x8208, 0x2204, 0xa082,
-+ 0x0004, 0x20a8, 0x95ac, 0x95ac, 0x2011, 0x8015, 0x211c, 0x8108,
-+ 0x047e, 0x2124, 0x1078, 0x361b, 0x047f, 0x8108, 0x00f0, 0x565c,
-+ 0x2009, 0x0023, 0x0078, 0x5676, 0xa08e, 0x6000, 0x00c0, 0x5674,
-+ 0x2009, 0x003f, 0x0078, 0x5676, 0x2009, 0x001d, 0x017e, 0x2011,
-+ 0xab83, 0x2204, 0x8211, 0x220c, 0x1078, 0x254d, 0x00c0, 0x56ac,
-+ 0x1078, 0x455c, 0x00c0, 0x56ac, 0x6612, 0x6516, 0x86ff, 0x0040,
-+ 0x569c, 0x017f, 0x017e, 0xa186, 0x0017, 0x00c0, 0x569c, 0x686c,
-+ 0xa606, 0x00c0, 0x569c, 0x6870, 0xa506, 0xa084, 0xff00, 0x00c0,
-+ 0x569c, 0x6000, 0xc0f5, 0x6002, 0x0c7e, 0x1078, 0x76c7, 0x0040,
-+ 0x56af, 0x017f, 0x611a, 0x601f, 0x0004, 0x7120, 0x610a, 0x017f,
-+ 0x1078, 0x775c, 0x0c7f, 0x007c, 0x017f, 0x0078, 0x56aa, 0x0c7f,
-+ 0x0078, 0x56ac, 0x0c7e, 0x1078, 0x570f, 0x00c0, 0x570d, 0xa28e,
-+ 0x0033, 0x00c0, 0x56de, 0x1078, 0x591d, 0x0040, 0x570d, 0x7124,
-+ 0x610a, 0x7030, 0xa08e, 0x0200, 0x00c0, 0x56d0, 0x7034, 0xa005,
-+ 0x00c0, 0x570d, 0x2009, 0x0015, 0x1078, 0x775c, 0x0078, 0x570d,
-+ 0xa08e, 0x0100, 0x00c0, 0x570d, 0x7034, 0xa005, 0x00c0, 0x570d,
-+ 0x2009, 0x0016, 0x1078, 0x775c, 0x0078, 0x570d, 0xa28e, 0x0032,
-+ 0x00c0, 0x570d, 0x7030, 0xa08e, 0x1400, 0x00c0, 0x570d, 0x2009,
-+ 0x0038, 0x017e, 0x2011, 0xab83, 0x2204, 0x8211, 0x220c, 0x1078,
-+ 0x254d, 0x00c0, 0x570c, 0x1078, 0x455c, 0x00c0, 0x570c, 0x6612,
-+ 0x6516, 0x0c7e, 0x1078, 0x76c7, 0x0040, 0x570b, 0x017f, 0x611a,
-+ 0x601f, 0x0004, 0x7120, 0x610a, 0x017f, 0x1078, 0x775c, 0x1078,
-+ 0x62d1, 0x0078, 0x570d, 0x0c7f, 0x017f, 0x0c7f, 0x007c, 0x0f7e,
-+ 0x0d7e, 0x027e, 0x017e, 0x137e, 0x147e, 0x157e, 0x3c00, 0x007e,
-+ 0x2079, 0x0030, 0x2069, 0x0200, 0x1078, 0x1c6a, 0x00c0, 0x5750,
-+ 0x1078, 0x1b40, 0x0040, 0x575d, 0x7908, 0xa18c, 0x1fff, 0xa182,
-+ 0x0011, 0x00c8, 0x575a, 0x20a9, 0x000c, 0x20e1, 0x0000, 0x2ea0,
-+ 0x2099, 0x020a, 0x53a5, 0x20e1, 0x2000, 0x2001, 0x020a, 0x2004,
-+ 0x7a0c, 0x7808, 0xa080, 0x0007, 0xa084, 0x1ff8, 0xa08a, 0x0140,
-+ 0x10c8, 0x1332, 0x80ac, 0x20e1, 0x6000, 0x2099, 0x020a, 0x53a5,
-+ 0x20e1, 0x7000, 0x6828, 0x6828, 0x7803, 0x0004, 0xa294, 0x0070,
-+ 0x007f, 0x20e0, 0x157f, 0x147f, 0x137f, 0x017f, 0x027f, 0x0d7f,
-+ 0x0f7f, 0x007c, 0xa016, 0x1078, 0x15fa, 0xa085, 0x0001, 0x0078,
-+ 0x5750, 0x047e, 0x0e7e, 0x0d7e, 0x2028, 0x2130, 0xa696, 0x00ff,
-+ 0x00c0, 0x5782, 0xa596, 0xfffd, 0x00c0, 0x5772, 0x2009, 0x007f,
-+ 0x0078, 0x57b5, 0xa596, 0xfffe, 0x00c0, 0x577a, 0x2009, 0x007e,
-+ 0x0078, 0x57b5, 0xa596, 0xfffc, 0x00c0, 0x5782, 0x2009, 0x0080,
-+ 0x0078, 0x57b5, 0x2011, 0x0000, 0x2021, 0x0081, 0x20a9, 0x007e,
-+ 0x2071, 0xa7b6, 0x2e1c, 0x83ff, 0x00c0, 0x5794, 0x82ff, 0x00c0,
-+ 0x57a9, 0x2410, 0x0078, 0x57a9, 0x2368, 0x6f10, 0x007e, 0x2100,
-+ 0xa706, 0x007f, 0x6b14, 0x00c0, 0x57a3, 0xa346, 0x00c0, 0x57a3,
-+ 0x2408, 0x0078, 0x57b5, 0x87ff, 0x00c0, 0x57a9, 0x83ff, 0x0040,
-+ 0x578e, 0x8420, 0x8e70, 0x00f0, 0x578a, 0x82ff, 0x00c0, 0x57b4,
-+ 0xa085, 0x0001, 0x0078, 0x57b6, 0x2208, 0xa006, 0x0d7f, 0x0e7f,
-+ 0x047f, 0x007c, 0xa084, 0x0007, 0x0079, 0x57bf, 0x007c, 0x57c7,
-+ 0x57c7, 0x57c7, 0x5933, 0x57c7, 0x57c8, 0x57e1, 0x5858, 0x007c,
-+ 0x7110, 0xd1bc, 0x0040, 0x57e0, 0x7120, 0x2160, 0xac8c, 0x000f,
-+ 0x00c0, 0x57e0, 0xac8a, 0xad00, 0x0048, 0x57e0, 0x6858, 0xac02,
-+ 0x00c8, 0x57e0, 0x7124, 0x610a, 0x2009, 0x0046, 0x1078, 0x775c,
-+ 0x007c, 0x0c7e, 0xa484, 0x01ff, 0x0040, 0x5833, 0x7110, 0xd1bc,
-+ 0x00c0, 0x5833, 0x2011, 0xab83, 0x2204, 0x8211, 0x220c, 0x1078,
-+ 0x254d, 0x00c0, 0x5833, 0x1078, 0x455c, 0x00c0, 0x5833, 0x6612,
-+ 0x6516, 0x6000, 0xd0ec, 0x00c0, 0x5833, 0x6204, 0xa294, 0xff00,
-+ 0x8217, 0xa286, 0x0006, 0x00c0, 0x5818, 0x0c7e, 0x1078, 0x76c7,
-+ 0x017f, 0x0040, 0x5835, 0x611a, 0x601f, 0x0006, 0x7120, 0x610a,
-+ 0x7130, 0x6122, 0x2009, 0x0044, 0x1078, 0x775c, 0x0078, 0x5833,
-+ 0x0c7e, 0x1078, 0x76c7, 0x017f, 0x0040, 0x5833, 0x611a, 0x601f,
-+ 0x0004, 0x7120, 0x610a, 0xa286, 0x0004, 0x00c0, 0x582b, 0x6007,
-+ 0x0005, 0x0078, 0x582d, 0x6007, 0x0001, 0x6003, 0x0001, 0x1078,
-+ 0x5dd7, 0x1078, 0x62d1, 0x0c7f, 0x007c, 0x2001, 0xa60d, 0x2004,
-+ 0xd0ec, 0x0040, 0x583f, 0x2011, 0x8049, 0x1078, 0x361b, 0x0c7e,
-+ 0x1078, 0x9187, 0x017f, 0x0040, 0x5833, 0x611a, 0x601f, 0x0006,
-+ 0x7120, 0x610a, 0x7130, 0x6122, 0x6013, 0x0300, 0x6003, 0x0001,
-+ 0x6007, 0x0041, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0078, 0x5833,
-+ 0x7110, 0xd1bc, 0x0040, 0x5870, 0x7020, 0x2060, 0xac84, 0x000f,
-+ 0x00c0, 0x5870, 0xac82, 0xad00, 0x0048, 0x5870, 0x6858, 0xac02,
-+ 0x00c8, 0x5870, 0x7124, 0x610a, 0x2009, 0x0045, 0x1078, 0x775c,
-+ 0x007c, 0x007e, 0x1078, 0x29bb, 0x007f, 0x00c0, 0x5887, 0x7110,
-+ 0xa18c, 0xff00, 0x810f, 0xa18e, 0x0000, 0x00c0, 0x5887, 0xa084,
-+ 0x000f, 0xa08a, 0x0006, 0x00c8, 0x5887, 0x1079, 0x5888, 0x007c,
-+ 0x588e, 0x588f, 0x588e, 0x588e, 0x58ff, 0x590e, 0x007c, 0x7110,
-+ 0xd1bc, 0x0040, 0x5897, 0x702c, 0xd084, 0x0040, 0x58fe, 0x700c,
-+ 0x7108, 0x1078, 0x254d, 0x00c0, 0x58fe, 0x1078, 0x455c, 0x00c0,
-+ 0x58fe, 0x6612, 0x6516, 0x6204, 0x7110, 0xd1bc, 0x0040, 0x58c9,
-+ 0xa28c, 0x00ff, 0xa186, 0x0004, 0x0040, 0x58b2, 0xa186, 0x0006,
-+ 0x00c0, 0x58ef, 0x0c7e, 0x1078, 0x591d, 0x0c7f, 0x0040, 0x58fe,
-+ 0x0c7e, 0x1078, 0x76c7, 0x017f, 0x0040, 0x58fe, 0x611a, 0x601f,
-+ 0x0002, 0x7120, 0x610a, 0x2009, 0x0088, 0x1078, 0x775c, 0x0078,
-+ 0x58fe, 0xa28c, 0x00ff, 0xa186, 0x0006, 0x0040, 0x58de, 0xa186,
-+ 0x0004, 0x0040, 0x58de, 0xa294, 0xff00, 0x8217, 0xa286, 0x0004,
-+ 0x0040, 0x58de, 0xa286, 0x0006, 0x00c0, 0x58ef, 0x0c7e, 0x1078,
-+ 0x76c7, 0x017f, 0x0040, 0x58fe, 0x611a, 0x601f, 0x0005, 0x7120,
-+ 0x610a, 0x2009, 0x0088, 0x1078, 0x775c, 0x0078, 0x58fe, 0x0c7e,
-+ 0x1078, 0x76c7, 0x017f, 0x0040, 0x58fe, 0x611a, 0x601f, 0x0004,
-+ 0x7120, 0x610a, 0x2009, 0x0001, 0x1078, 0x775c, 0x007c, 0x7110,
-+ 0xd1bc, 0x0040, 0x590d, 0x1078, 0x591d, 0x0040, 0x590d, 0x7124,
-+ 0x610a, 0x2009, 0x0089, 0x1078, 0x775c, 0x007c, 0x7110, 0xd1bc,
-+ 0x0040, 0x591c, 0x1078, 0x591d, 0x0040, 0x591c, 0x7124, 0x610a,
-+ 0x2009, 0x008a, 0x1078, 0x775c, 0x007c, 0x7020, 0x2060, 0xac84,
-+ 0x000f, 0x00c0, 0x5930, 0xac82, 0xad00, 0x0048, 0x5930, 0x2001,
-+ 0xa616, 0x2004, 0xac02, 0x00c8, 0x5930, 0xa085, 0x0001, 0x007c,
-+ 0xa006, 0x0078, 0x592f, 0x7110, 0xd1bc, 0x00c0, 0x5949, 0x7024,
-+ 0x2060, 0xac84, 0x000f, 0x00c0, 0x5949, 0xac82, 0xad00, 0x0048,
-+ 0x5949, 0x6858, 0xac02, 0x00c8, 0x5949, 0x2009, 0x0051, 0x1078,
-+ 0x775c, 0x007c, 0x2071, 0xa8c4, 0x7003, 0x0003, 0x700f, 0x0361,
-+ 0xa006, 0x701a, 0x7012, 0x7017, 0xad00, 0x7007, 0x0000, 0x7026,
-+ 0x702b, 0x6e1c, 0x7032, 0x7037, 0x6e70, 0x703b, 0x0002, 0x703f,
-+ 0x0000, 0x7043, 0xffff, 0x7047, 0xffff, 0x007c, 0x2071, 0xa8c4,
-+ 0x00e0, 0x5a32, 0x2091, 0x6000, 0x700c, 0x8001, 0x700e, 0x00c0,
-+ 0x59de, 0x700f, 0x0361, 0x7007, 0x0001, 0x127e, 0x2091, 0x8000,
-+ 0x7138, 0x8109, 0x713a, 0x00c0, 0x59dc, 0x703b, 0x0002, 0x2009,
-+ 0x0100, 0x2104, 0xa082, 0x0003, 0x00c8, 0x59dc, 0x703c, 0xa086,
-+ 0x0001, 0x00c0, 0x59b9, 0x0d7e, 0x2069, 0x0140, 0x6804, 0xa084,
-+ 0x4000, 0x0040, 0x5997, 0x6803, 0x1000, 0x0078, 0x599e, 0x6804,
-+ 0xa084, 0x1000, 0x0040, 0x599e, 0x6803, 0x0100, 0x6803, 0x0000,
-+ 0x703f, 0x0000, 0x2069, 0xa8b1, 0x6804, 0xa082, 0x0006, 0x00c0,
-+ 0x59ab, 0x6807, 0x0000, 0x6830, 0xa082, 0x0003, 0x00c0, 0x59b2,
-+ 0x6833, 0x0000, 0x1078, 0x62d1, 0x1078, 0x639b, 0x0d7f, 0x0078,
-+ 0x59dc, 0x0d7e, 0x2069, 0xa600, 0x6948, 0x6864, 0xa102, 0x00c8,
-+ 0x59db, 0x2069, 0xa8b1, 0x6804, 0xa086, 0x0000, 0x00c0, 0x59db,
-+ 0x6830, 0xa086, 0x0000, 0x00c0, 0x59db, 0x703f, 0x0001, 0x6807,
-+ 0x0006, 0x6833, 0x0003, 0x2069, 0x0100, 0x6830, 0x689e, 0x2069,
-+ 0x0140, 0x6803, 0x0600, 0x0d7f, 0x0078, 0x59e1, 0x127e, 0x2091,
-+ 0x8000, 0x7024, 0xa00d, 0x0040, 0x59f9, 0x7020, 0x8001, 0x7022,
-+ 0x00c0, 0x59f9, 0x7023, 0x0009, 0x8109, 0x7126, 0xa186, 0x03e8,
-+ 0x00c0, 0x59f4, 0x7028, 0x107a, 0x81ff, 0x00c0, 0x59f9, 0x7028,
-+ 0x107a, 0x7030, 0xa00d, 0x0040, 0x5a10, 0x702c, 0x8001, 0x702e,
-+ 0x00c0, 0x5a10, 0x702f, 0x0009, 0x8109, 0x7132, 0x0040, 0x5a0e,
-+ 0xa184, 0x007f, 0x1040, 0x6ea2, 0x0078, 0x5a10, 0x7034, 0x107a,
-+ 0x7040, 0xa005, 0x0040, 0x5a18, 0x0050, 0x5a18, 0x8001, 0x7042,
-+ 0x7044, 0xa005, 0x0040, 0x5a20, 0x0050, 0x5a20, 0x8001, 0x7046,
-+ 0x7018, 0xa00d, 0x0040, 0x5a31, 0x7008, 0x8001, 0x700a, 0x00c0,
-+ 0x5a31, 0x700b, 0x0009, 0x8109, 0x711a, 0x00c0, 0x5a31, 0x701c,
-+ 0x107a, 0x127f, 0x7004, 0x0079, 0x5a35, 0x5a5c, 0x5a5d, 0x5a79,
-+ 0x0e7e, 0x2071, 0xa8c4, 0x7018, 0xa005, 0x00c0, 0x5a43, 0x711a,
-+ 0x721e, 0x700b, 0x0009, 0x0e7f, 0x007c, 0x0e7e, 0x007e, 0x2071,
-+ 0xa8c4, 0x701c, 0xa206, 0x00c0, 0x5a4f, 0x701a, 0x701e, 0x007f,
-+ 0x0e7f, 0x007c, 0x0e7e, 0x2071, 0xa8c4, 0x6088, 0xa102, 0x0048,
-+ 0x5a5a, 0x618a, 0x0e7f, 0x007c, 0x007c, 0x7110, 0x1078, 0x45c4,
-+ 0x00c0, 0x5a6f, 0x6088, 0x8001, 0x0048, 0x5a6f, 0x608a, 0x00c0,
-+ 0x5a6f, 0x127e, 0x2091, 0x8000, 0x1078, 0x62d1, 0x127f, 0x8108,
-+ 0xa182, 0x00ff, 0x0048, 0x5a77, 0xa00e, 0x7007, 0x0002, 0x7112,
-+ 0x007c, 0x7014, 0x2060, 0x127e, 0x2091, 0x8000, 0x603c, 0xa005,
-+ 0x0040, 0x5a88, 0x8001, 0x603e, 0x00c0, 0x5a88, 0x1078, 0x8f9c,
-+ 0x6014, 0xa005, 0x0040, 0x5ab2, 0x8001, 0x6016, 0x00c0, 0x5ab2,
-+ 0x611c, 0xa186, 0x0003, 0x0040, 0x5a99, 0xa186, 0x0006, 0x00c0,
-+ 0x5ab0, 0x6010, 0x2068, 0x6854, 0xa08a, 0x199a, 0x0048, 0x5ab0,
-+ 0xa082, 0x1999, 0x6856, 0xa08a, 0x199a, 0x0048, 0x5aa9, 0x2001,
-+ 0x1999, 0x8003, 0x800b, 0x810b, 0xa108, 0x6116, 0x0078, 0x5ab2,
-+ 0x1078, 0x8abe, 0x127f, 0xac88, 0x0010, 0x7116, 0x2001, 0xcd00,
-+ 0xa102, 0x0048, 0x5abf, 0x7017, 0xad00, 0x7007, 0x0000, 0x007c,
-+ 0x0e7e, 0x2071, 0xa8c4, 0x7027, 0x07d0, 0x7023, 0x0009, 0x703b,
-+ 0x0002, 0x0e7f, 0x007c, 0x2001, 0xa8cd, 0x2003, 0x0000, 0x007c,
-+ 0x0e7e, 0x2071, 0xa8c4, 0x7132, 0x702f, 0x0009, 0x0e7f, 0x007c,
-+ 0x2011, 0xa8d0, 0x2013, 0x0000, 0x007c, 0x0e7e, 0x2071, 0xa8c4,
-+ 0x711a, 0x721e, 0x700b, 0x0009, 0x0e7f, 0x007c, 0x027e, 0x0e7e,
-+ 0x0f7e, 0x2079, 0xa600, 0x7a34, 0xd294, 0x0040, 0x5b15, 0x2071,
-+ 0xa8ac, 0x2e14, 0xa0fe, 0x0000, 0x0040, 0x5b02, 0xa0fe, 0x0001,
-+ 0x0040, 0x5b06, 0xa0fe, 0x0002, 0x00c0, 0x5b11, 0xa292, 0x0085,
-+ 0x0078, 0x5b08, 0xa292, 0x0005, 0x0078, 0x5b08, 0xa292, 0x0002,
-+ 0x2272, 0x0040, 0x5b0d, 0x00c8, 0x5b15, 0x2011, 0x8037, 0x1078,
-+ 0x361b, 0x2011, 0xa8ab, 0x2204, 0x2072, 0x0f7f, 0x0e7f, 0x027f,
-+ 0x007c, 0x0c7e, 0x2061, 0xa933, 0x0c7f, 0x007c, 0xa184, 0x000f,
-+ 0x8003, 0x8003, 0x8003, 0xa080, 0xa933, 0x2060, 0x007c, 0x6854,
-+ 0xa08a, 0x199a, 0x0048, 0x5b2e, 0x2001, 0x1999, 0xa005, 0x00c0,
-+ 0x5b3d, 0x0c7e, 0x2061, 0xa933, 0x6014, 0x0c7f, 0xa005, 0x00c0,
-+ 0x5b42, 0x2001, 0x001e, 0x0078, 0x5b42, 0xa08e, 0xffff, 0x00c0,
-+ 0x5b42, 0xa006, 0x8003, 0x800b, 0x810b, 0xa108, 0x6116, 0x684c,
-+ 0xa08c, 0x00c0, 0xa18e, 0x00c0, 0x0040, 0x5b9e, 0xd0b4, 0x00c0,
-+ 0x5b59, 0xd0bc, 0x00c0, 0x5b8b, 0x2009, 0x0006, 0x1078, 0x5bc3,
-+ 0x007c, 0xd0fc, 0x0040, 0x5b64, 0xa084, 0x0003, 0x0040, 0x5b64,
-+ 0xa086, 0x0003, 0x00c0, 0x5bbc, 0x6024, 0xd0d4, 0x0040, 0x5b6e,
-+ 0xc0d4, 0x6026, 0x6860, 0x602a, 0x685c, 0x602e, 0x2009, 0xa674,
-+ 0x2104, 0xd084, 0x0040, 0x5b83, 0x6118, 0xa188, 0x0027, 0x2104,
-+ 0xd08c, 0x00c0, 0x5b83, 0x87ff, 0x00c0, 0x5b82, 0x2009, 0x0042,
-+ 0x1078, 0x775c, 0x007c, 0x87ff, 0x00c0, 0x5b8a, 0x2009, 0x0043,
-+ 0x1078, 0x775c, 0x007c, 0xd0fc, 0x0040, 0x5b96, 0xa084, 0x0003,
-+ 0x0040, 0x5b96, 0xa086, 0x0003, 0x00c0, 0x5bbc, 0x87ff, 0x00c0,
-+ 0x5b9d, 0x2009, 0x0042, 0x1078, 0x775c, 0x007c, 0xd0fc, 0x0040,
-+ 0x5baf, 0xa084, 0x0003, 0xa08e, 0x0002, 0x0040, 0x5bb3, 0x87ff,
-+ 0x00c0, 0x5bae, 0x2009, 0x0041, 0x1078, 0x775c, 0x007c, 0x1078,
-+ 0x5bc1, 0x0078, 0x5bae, 0x87ff, 0x00c0, 0x5bae, 0x2009, 0x0043,
-+ 0x1078, 0x775c, 0x0078, 0x5bae, 0x2009, 0x0004, 0x1078, 0x5bc3,
-+ 0x007c, 0x2009, 0x0001, 0x0d7e, 0x6010, 0xa0ec, 0xf000, 0x0040,
-+ 0x5bef, 0x2068, 0x6952, 0x6800, 0x6012, 0xa186, 0x0001, 0x00c0,
-+ 0x5be5, 0x694c, 0xa18c, 0x8100, 0xa18e, 0x8100, 0x00c0, 0x5be5,
-+ 0x0c7e, 0x2061, 0xa933, 0x6200, 0xd28c, 0x00c0, 0x5be4, 0x6204,
-+ 0x8210, 0x0048, 0x5be4, 0x6206, 0x0c7f, 0x1078, 0x4a73, 0x6010,
-+ 0xa06d, 0x077e, 0x2039, 0x0000, 0x10c0, 0x5b27, 0x077f, 0x0d7f,
-+ 0x007c, 0x157e, 0x0c7e, 0x2061, 0xa933, 0x6000, 0x81ff, 0x0040,
-+ 0x5bfc, 0xa205, 0x0078, 0x5bfd, 0xa204, 0x6002, 0x0c7f, 0x157f,
-+ 0x007c, 0x6800, 0xd08c, 0x00c0, 0x5c0d, 0x6808, 0xa005, 0x0040,
-+ 0x5c0d, 0x8001, 0x680a, 0xa085, 0x0001, 0x007c, 0x20a9, 0x0010,
-+ 0xa006, 0x8004, 0x8086, 0x818e, 0x00c8, 0x5c17, 0xa200, 0x00f0,
-+ 0x5c12, 0x8086, 0x818e, 0x007c, 0x157e, 0x20a9, 0x0010, 0xa005,
-+ 0x0040, 0x5c3d, 0xa11a, 0x00c8, 0x5c3d, 0x8213, 0x818d, 0x0048,
-+ 0x5c30, 0xa11a, 0x00c8, 0x5c31, 0x00f0, 0x5c25, 0x0078, 0x5c35,
-+ 0xa11a, 0x2308, 0x8210, 0x00f0, 0x5c25, 0x007e, 0x3200, 0xa084,
-+ 0xf7ff, 0x2080, 0x007f, 0x157f, 0x007c, 0x007e, 0x3200, 0xa085,
-+ 0x0800, 0x0078, 0x5c39, 0x127e, 0x2091, 0x2200, 0x2079, 0xa8b1,
-+ 0x127f, 0x0d7e, 0x2069, 0xa8b1, 0x6803, 0x0005, 0x2069, 0x0004,
-+ 0x2d04, 0xa085, 0x8001, 0x206a, 0x0d7f, 0x007c, 0x0c7e, 0x6027,
-+ 0x0001, 0x7804, 0xa084, 0x0007, 0x0079, 0x5c5e, 0x5c68, 0x5c8d,
-+ 0x5ce8, 0x5c6e, 0x5c8d, 0x5c68, 0x5c66, 0x5c66, 0x1078, 0x1332,
-+ 0x1078, 0x5acb, 0x1078, 0x62d1, 0x0c7f, 0x007c, 0x62c0, 0x82ff,
-+ 0x00c0, 0x5c74, 0x0c7f, 0x007c, 0x2011, 0x41dc, 0x1078, 0x5a45,
-+ 0x7828, 0xa092, 0x00c8, 0x00c8, 0x5c83, 0x8000, 0x782a, 0x1078,
-+ 0x421b, 0x0078, 0x5c72, 0x1078, 0x41dc, 0x7807, 0x0003, 0x7827,
-+ 0x0000, 0x782b, 0x0000, 0x0078, 0x5c72, 0x1078, 0x5acb, 0x3c00,
-+ 0x007e, 0x2011, 0x0209, 0x20e1, 0x4000, 0x2214, 0x007f, 0x20e0,
-+ 0x82ff, 0x0040, 0x5cab, 0x62c0, 0x82ff, 0x00c0, 0x5cab, 0x782b,
-+ 0x0000, 0x7824, 0xa065, 0x1040, 0x1332, 0x2009, 0x0013, 0x1078,
-+ 0x775c, 0x0c7f, 0x007c, 0x3900, 0xa082, 0xa9e3, 0x00c8, 0x5cb2,
-+ 0x1078, 0x747a, 0x0c7e, 0x7824, 0xa065, 0x1040, 0x1332, 0x7804,
-+ 0xa086, 0x0004, 0x0040, 0x5d2d, 0x7828, 0xa092, 0x2710, 0x00c8,
-+ 0x5cc8, 0x8000, 0x782a, 0x0c7f, 0x1078, 0x6e01, 0x0078, 0x5ca9,
-+ 0x6104, 0xa186, 0x0003, 0x00c0, 0x5cdf, 0x0e7e, 0x2071, 0xa600,
-+ 0x70d8, 0x0e7f, 0xd08c, 0x0040, 0x5cdf, 0x0c7e, 0x0e7e, 0x2061,
-+ 0x0100, 0x2071, 0xa600, 0x1078, 0x4224, 0x0e7f, 0x0c7f, 0x1078,
-+ 0xa5c4, 0x2009, 0x0014, 0x1078, 0x775c, 0x0c7f, 0x0078, 0x5ca9,
-+ 0x2001, 0xa8cd, 0x2003, 0x0000, 0x62c0, 0x82ff, 0x00c0, 0x5cfc,
-+ 0x782b, 0x0000, 0x7824, 0xa065, 0x1040, 0x1332, 0x2009, 0x0013,
-+ 0x1078, 0x77b3, 0x0c7f, 0x007c, 0x0c7e, 0x0d7e, 0x3900, 0xa082,
-+ 0xa9e3, 0x00c8, 0x5d05, 0x1078, 0x747a, 0x7824, 0xa005, 0x1040,
-+ 0x1332, 0x781c, 0xa06d, 0x1040, 0x1332, 0x6800, 0xc0dc, 0x6802,
-+ 0x7924, 0x2160, 0x1078, 0x772d, 0x693c, 0x81ff, 0x1040, 0x1332,
-+ 0x8109, 0x693e, 0x6854, 0xa015, 0x0040, 0x5d21, 0x7a1e, 0x0078,
-+ 0x5d23, 0x7918, 0x791e, 0x7807, 0x0000, 0x7827, 0x0000, 0x0d7f,
-+ 0x0c7f, 0x1078, 0x62d1, 0x0078, 0x5cfa, 0x6104, 0xa186, 0x0002,
-+ 0x0040, 0x5d38, 0xa186, 0x0004, 0x0040, 0x5d38, 0x0078, 0x5cbc,
-+ 0x7808, 0xac06, 0x0040, 0x5cbc, 0x1078, 0x61cd, 0x1078, 0x5dd7,
-+ 0x0c7f, 0x1078, 0x62d1, 0x0078, 0x5ca9, 0x0c7e, 0x6027, 0x0002,
-+ 0x62c8, 0x82ff, 0x00c0, 0x5d61, 0x62c4, 0x82ff, 0x00c0, 0x5d61,
-+ 0x793c, 0xa1e5, 0x0000, 0x0040, 0x5d5b, 0x2009, 0x0049, 0x1078,
-+ 0x775c, 0x0c7f, 0x007c, 0x2011, 0xa8d0, 0x2013, 0x0000, 0x0078,
-+ 0x5d59, 0x3908, 0xa192, 0xa9e3, 0x00c8, 0x5d68, 0x1078, 0x747a,
-+ 0x6017, 0x0010, 0x793c, 0x81ff, 0x0040, 0x5d5b, 0x7944, 0xa192,
-+ 0x7530, 0x00c8, 0x5d85, 0x8108, 0x7946, 0x793c, 0xa188, 0x0007,
-+ 0x210c, 0xa18e, 0x0006, 0x00c0, 0x5d81, 0x6017, 0x0012, 0x0078,
-+ 0x5d59, 0x6017, 0x0016, 0x0078, 0x5d59, 0x7848, 0xc085, 0x784a,
-+ 0x0078, 0x5d59, 0x007e, 0x017e, 0x0c7e, 0x127e, 0x2091, 0x8000,
-+ 0x600f, 0x0000, 0x2c08, 0x2061, 0xa8b1, 0x6020, 0x8000, 0x6022,
-+ 0x6010, 0xa005, 0x0040, 0x5da5, 0xa080, 0x0003, 0x2102, 0x6112,
-+ 0x127f, 0x0c7f, 0x017f, 0x007f, 0x007c, 0x6116, 0x6112, 0x0078,
-+ 0x5da0, 0x0d7e, 0x2069, 0xa8b1, 0x6000, 0xd0d4, 0x0040, 0x5dbe,
-+ 0x6820, 0x8000, 0x6822, 0xa086, 0x0001, 0x00c0, 0x5db9, 0x2c00,
-+ 0x681e, 0x6804, 0xa084, 0x0007, 0x0079, 0x62d9, 0xc0d5, 0x6002,
-+ 0x6818, 0xa005, 0x0040, 0x5dd0, 0x6056, 0x605b, 0x0000, 0x007e,
-+ 0x2c00, 0x681a, 0x0d7f, 0x685a, 0x2069, 0xa8b1, 0x0078, 0x5db0,
-+ 0x6056, 0x605a, 0x2c00, 0x681a, 0x681e, 0x0078, 0x5db0, 0x007e,
-+ 0x017e, 0x0c7e, 0x127e, 0x2091, 0x8000, 0x600f, 0x0000, 0x2c08,
-+ 0x2061, 0xa8b1, 0x6020, 0x8000, 0x6022, 0x6008, 0xa005, 0x0040,
-+ 0x5df2, 0xa080, 0x0003, 0x2102, 0x610a, 0x127f, 0x0c7f, 0x017f,
-+ 0x007f, 0x007c, 0x610e, 0x610a, 0x0078, 0x5ded, 0x0c7e, 0x600f,
-+ 0x0000, 0x2c08, 0x2061, 0xa8b1, 0x6034, 0xa005, 0x0040, 0x5e06,
-+ 0xa080, 0x0003, 0x2102, 0x6136, 0x0c7f, 0x007c, 0x613a, 0x6136,
-+ 0x0078, 0x5e04, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x067e, 0x057e,
-+ 0x037e, 0x027e, 0x017e, 0x007e, 0x127e, 0xa02e, 0x2071, 0xa8b1,
-+ 0x7638, 0x2660, 0x2678, 0x2091, 0x8000, 0x8cff, 0x0040, 0x5e8c,
-+ 0x6018, 0xa080, 0x0028, 0x2004, 0xa206, 0x00c0, 0x5e87, 0x87ff,
-+ 0x0040, 0x5e2e, 0x6020, 0xa106, 0x00c0, 0x5e87, 0x703c, 0xac06,
-+ 0x00c0, 0x5e44, 0x037e, 0x2019, 0x0001, 0x1078, 0x7058, 0x7033,
-+ 0x0000, 0x703f, 0x0000, 0x7043, 0x0000, 0x7047, 0x0000, 0x704b,
-+ 0x0000, 0x037f, 0x2029, 0x0001, 0x7038, 0xac36, 0x00c0, 0x5e4a,
-+ 0x660c, 0x763a, 0x7034, 0xac36, 0x00c0, 0x5e58, 0x2c00, 0xaf36,
-+ 0x0040, 0x5e56, 0x2f00, 0x7036, 0x0078, 0x5e58, 0x7037, 0x0000,
-+ 0x660c, 0x067e, 0x2c00, 0xaf06, 0x0040, 0x5e61, 0x7e0e, 0x0078,
-+ 0x5e62, 0x2678, 0x600f, 0x0000, 0x1078, 0x8d06, 0x0040, 0x5e82,
-+ 0x6010, 0x2068, 0x601c, 0xa086, 0x0003, 0x00c0, 0x5e9d, 0x6837,
-+ 0x0103, 0x6b4a, 0x6847, 0x0000, 0x017e, 0x037e, 0x077e, 0x1078,
-+ 0x8f7d, 0x1078, 0xa4e2, 0x1078, 0x4a73, 0x077f, 0x037f, 0x017f,
-+ 0x1078, 0x8eb9, 0x1078, 0x8ec6, 0x0c7f, 0x0078, 0x5e1d, 0x2c78,
-+ 0x600c, 0x2060, 0x0078, 0x5e1d, 0x85ff, 0x0040, 0x5e91, 0x1078,
-+ 0x639b, 0x127f, 0x007f, 0x017f, 0x027f, 0x037f, 0x057f, 0x067f,
-+ 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x007c, 0x601c, 0xa086, 0x0006,
-+ 0x00c0, 0x5e6f, 0x017e, 0x037e, 0x077e, 0x1078, 0xa4e2, 0x1078,
-+ 0xa1ca, 0x077f, 0x037f, 0x017f, 0x0078, 0x5e82, 0x007e, 0x067e,
-+ 0x0c7e, 0x0d7e, 0x0f7e, 0x2031, 0x0000, 0x127e, 0x2091, 0x8000,
-+ 0x2079, 0xa8b1, 0x7838, 0xa065, 0x0040, 0x5eef, 0x600c, 0x007e,
-+ 0x600f, 0x0000, 0x783c, 0xac06, 0x00c0, 0x5ed6, 0x037e, 0x2019,
-+ 0x0001, 0x1078, 0x7058, 0x7833, 0x0000, 0x783f, 0x0000, 0x7843,
-+ 0x0000, 0x7847, 0x0000, 0x784b, 0x0000, 0x037f, 0x1078, 0x8d06,
-+ 0x0040, 0x5eea, 0x6010, 0x2068, 0x601c, 0xa086, 0x0003, 0x00c0,
-+ 0x5ef8, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x4a73,
-+ 0x1078, 0x8eb9, 0x1078, 0x8ec6, 0x007f, 0x0078, 0x5ebb, 0x7e3a,
-+ 0x7e36, 0x127f, 0x0f7f, 0x0d7f, 0x0c7f, 0x067f, 0x007f, 0x007c,
-+ 0x601c, 0xa086, 0x0006, 0x00c0, 0x5ee1, 0x1078, 0xa1ca, 0x0078,
-+ 0x5eea, 0x017e, 0x027e, 0x087e, 0x2041, 0x0000, 0x1078, 0x5f1b,
-+ 0x1078, 0x5fdb, 0x087f, 0x027f, 0x017f, 0x007c, 0x0f7e, 0x127e,
-+ 0x2079, 0xa8b1, 0x2091, 0x8000, 0x1078, 0x6076, 0x1078, 0x60ec,
-+ 0x127f, 0x0f7f, 0x007c, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x067e,
-+ 0x017e, 0x007e, 0x127e, 0x2091, 0x8000, 0x2071, 0xa8b1, 0x7614,
-+ 0x2660, 0x2678, 0x8cff, 0x0040, 0x5fb5, 0x6018, 0xa080, 0x0028,
-+ 0x2004, 0xa206, 0x00c0, 0x5fb0, 0x88ff, 0x0040, 0x5f3b, 0x6020,
-+ 0xa106, 0x00c0, 0x5fb0, 0x7024, 0xac06, 0x00c0, 0x5f6b, 0x2069,
-+ 0x0100, 0x68c0, 0xa005, 0x0040, 0x5f66, 0x1078, 0x5acb, 0x1078,
-+ 0x6e0f, 0x68c3, 0x0000, 0x1078, 0x7378, 0x7027, 0x0000, 0x037e,
-+ 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0040, 0x5f5b, 0x6803,
-+ 0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084, 0x0040,
-+ 0x5f63, 0x6827, 0x0001, 0x037f, 0x0078, 0x5f6b, 0x6003, 0x0009,
-+ 0x630a, 0x0078, 0x5fb0, 0x7014, 0xac36, 0x00c0, 0x5f71, 0x660c,
-+ 0x7616, 0x7010, 0xac36, 0x00c0, 0x5f7f, 0x2c00, 0xaf36, 0x0040,
-+ 0x5f7d, 0x2f00, 0x7012, 0x0078, 0x5f7f, 0x7013, 0x0000, 0x660c,
-+ 0x067e, 0x2c00, 0xaf06, 0x0040, 0x5f88, 0x7e0e, 0x0078, 0x5f89,
-+ 0x2678, 0x600f, 0x0000, 0x6010, 0x2068, 0x1078, 0x8d06, 0x0040,
-+ 0x5fa9, 0x601c, 0xa086, 0x0003, 0x00c0, 0x5fbe, 0x6837, 0x0103,
-+ 0x6b4a, 0x6847, 0x0000, 0x017e, 0x037e, 0x087e, 0x1078, 0x8f7d,
-+ 0x1078, 0xa4e2, 0x1078, 0x4a73, 0x087f, 0x037f, 0x017f, 0x1078,
-+ 0x8eb9, 0x1078, 0x8ec6, 0x1078, 0x7233, 0x0c7f, 0x0078, 0x5f2a,
-+ 0x2c78, 0x600c, 0x2060, 0x0078, 0x5f2a, 0x127f, 0x007f, 0x017f,
-+ 0x067f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x007c, 0x601c, 0xa086,
-+ 0x0006, 0x00c0, 0x5fcf, 0x017e, 0x037e, 0x087e, 0x1078, 0xa4e2,
-+ 0x1078, 0xa1ca, 0x087f, 0x037f, 0x017f, 0x0078, 0x5fa9, 0x601c,
-+ 0xa086, 0x0002, 0x00c0, 0x5fa9, 0x6004, 0xa086, 0x0085, 0x0040,
-+ 0x5f96, 0x0078, 0x5fa9, 0x0c7e, 0x007e, 0x127e, 0x2091, 0x8000,
-+ 0xa280, 0xa735, 0x2004, 0xa065, 0x0040, 0x6072, 0x0f7e, 0x0e7e,
-+ 0x0d7e, 0x067e, 0x2071, 0xa8b1, 0x6654, 0x7018, 0xac06, 0x00c0,
-+ 0x5ff2, 0x761a, 0x701c, 0xac06, 0x00c0, 0x5ffe, 0x86ff, 0x00c0,
-+ 0x5ffd, 0x7018, 0x701e, 0x0078, 0x5ffe, 0x761e, 0x6058, 0xa07d,
-+ 0x0040, 0x6003, 0x7e56, 0xa6ed, 0x0000, 0x0040, 0x6009, 0x2f00,
-+ 0x685a, 0x6057, 0x0000, 0x605b, 0x0000, 0x6000, 0xc0d4, 0xc0dc,
-+ 0x6002, 0x1078, 0x44d3, 0x0040, 0x606e, 0x7624, 0x86ff, 0x0040,
-+ 0x605c, 0xa680, 0x0004, 0x2004, 0xad06, 0x00c0, 0x605c, 0x0d7e,
-+ 0x2069, 0x0100, 0x68c0, 0xa005, 0x0040, 0x6053, 0x1078, 0x5acb,
-+ 0x1078, 0x6e0f, 0x68c3, 0x0000, 0x1078, 0x7378, 0x7027, 0x0000,
-+ 0x037e, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0040, 0x603c,
-+ 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084,
-+ 0x0040, 0x6044, 0x6827, 0x0001, 0x037f, 0x0d7f, 0x0c7e, 0x603c,
-+ 0xa005, 0x0040, 0x604d, 0x8001, 0x603e, 0x2660, 0x1078, 0x8ec6,
-+ 0x0c7f, 0x0078, 0x605c, 0x0d7f, 0x0c7e, 0x2660, 0x6003, 0x0009,
-+ 0x630a, 0x0c7f, 0x0078, 0x6011, 0x8dff, 0x0040, 0x606a, 0x6837,
-+ 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x8f7d, 0x1078, 0xa4e2,
-+ 0x1078, 0x4a73, 0x1078, 0x7233, 0x0078, 0x6011, 0x067f, 0x0d7f,
-+ 0x0e7f, 0x0f7f, 0x127f, 0x007f, 0x0c7f, 0x007c, 0x007e, 0x067e,
-+ 0x0c7e, 0x0d7e, 0x2031, 0x0000, 0x7814, 0xa065, 0x0040, 0x60d0,
-+ 0x600c, 0x007e, 0x600f, 0x0000, 0x7824, 0xac06, 0x00c0, 0x60b5,
-+ 0x2069, 0x0100, 0x68c0, 0xa005, 0x0040, 0x60af, 0x1078, 0x5acb,
-+ 0x1078, 0x6e0f, 0x68c3, 0x0000, 0x1078, 0x7378, 0x7827, 0x0000,
-+ 0x037e, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0040, 0x60a4,
-+ 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084,
-+ 0x0040, 0x60ac, 0x6827, 0x0001, 0x037f, 0x0078, 0x60b5, 0x6003,
-+ 0x0009, 0x630a, 0x2c30, 0x0078, 0x60cd, 0x6010, 0x2068, 0x1078,
-+ 0x8d06, 0x0040, 0x60c9, 0x601c, 0xa086, 0x0003, 0x00c0, 0x60d7,
-+ 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x4a73, 0x1078,
-+ 0x8eb9, 0x1078, 0x8ec6, 0x1078, 0x7233, 0x007f, 0x0078, 0x607d,
-+ 0x7e16, 0x7e12, 0x0d7f, 0x0c7f, 0x067f, 0x007f, 0x007c, 0x601c,
-+ 0xa086, 0x0006, 0x00c0, 0x60e0, 0x1078, 0xa1ca, 0x0078, 0x60c9,
-+ 0x601c, 0xa086, 0x0002, 0x00c0, 0x60c9, 0x6004, 0xa086, 0x0085,
-+ 0x0040, 0x60c0, 0x0078, 0x60c9, 0x007e, 0x067e, 0x0c7e, 0x0d7e,
-+ 0x7818, 0xa065, 0x0040, 0x615a, 0x6054, 0x007e, 0x6057, 0x0000,
-+ 0x605b, 0x0000, 0x6000, 0xc0d4, 0xc0dc, 0x6002, 0x1078, 0x44d3,
-+ 0x0040, 0x6157, 0x7e24, 0x86ff, 0x0040, 0x6149, 0xa680, 0x0004,
-+ 0x2004, 0xad06, 0x00c0, 0x6149, 0x0d7e, 0x2069, 0x0100, 0x68c0,
-+ 0xa005, 0x0040, 0x6140, 0x1078, 0x5acb, 0x1078, 0x6e0f, 0x68c3,
-+ 0x0000, 0x1078, 0x7378, 0x7827, 0x0000, 0x037e, 0x2069, 0x0140,
-+ 0x6b04, 0xa384, 0x1000, 0x0040, 0x6129, 0x6803, 0x0100, 0x6803,
-+ 0x0000, 0x2069, 0x0100, 0x6824, 0xd084, 0x0040, 0x6131, 0x6827,
-+ 0x0001, 0x037f, 0x0d7f, 0x0c7e, 0x603c, 0xa005, 0x0040, 0x613a,
-+ 0x8001, 0x603e, 0x2660, 0x1078, 0x8ec6, 0x0c7f, 0x0078, 0x6149,
-+ 0x0d7f, 0x0c7e, 0x2660, 0x6003, 0x0009, 0x630a, 0x0c7f, 0x0078,
-+ 0x60fe, 0x8dff, 0x0040, 0x6153, 0x6837, 0x0103, 0x6b4a, 0x6847,
-+ 0x0000, 0x1078, 0x4a73, 0x1078, 0x7233, 0x0078, 0x60fe, 0x007f,
-+ 0x0078, 0x60f1, 0x781e, 0x781a, 0x0d7f, 0x0c7f, 0x067f, 0x007f,
-+ 0x007c, 0x0e7e, 0x0d7e, 0x067e, 0x6000, 0xd0dc, 0x0040, 0x6181,
-+ 0x604c, 0xa06d, 0x0040, 0x6181, 0x6848, 0xa606, 0x00c0, 0x6181,
-+ 0x2071, 0xa8b1, 0x7024, 0xa035, 0x0040, 0x6181, 0xa080, 0x0004,
-+ 0x2004, 0xad06, 0x00c0, 0x6181, 0x6000, 0xc0dc, 0x6002, 0x1078,
-+ 0x6185, 0x067f, 0x0d7f, 0x0e7f, 0x007c, 0x0f7e, 0x2079, 0x0100,
-+ 0x78c0, 0xa005, 0x00c0, 0x6194, 0x0c7e, 0x2660, 0x6003, 0x0009,
-+ 0x630a, 0x0c7f, 0x0078, 0x61cb, 0x1078, 0x6e0f, 0x78c3, 0x0000,
-+ 0x1078, 0x7378, 0x7027, 0x0000, 0x037e, 0x2079, 0x0140, 0x7b04,
-+ 0xa384, 0x1000, 0x0040, 0x61a8, 0x7803, 0x0100, 0x7803, 0x0000,
-+ 0x2079, 0x0100, 0x7824, 0xd084, 0x0040, 0x61b0, 0x7827, 0x0001,
-+ 0x1078, 0x7378, 0x037f, 0x1078, 0x44d3, 0x0c7e, 0x603c, 0xa005,
-+ 0x0040, 0x61bc, 0x8001, 0x603e, 0x2660, 0x1078, 0x772d, 0x0c7f,
-+ 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x8f7d, 0x1078,
-+ 0x4a73, 0x1078, 0x7233, 0x0f7f, 0x007c, 0x0e7e, 0x0c7e, 0x2071,
-+ 0xa8b1, 0x7004, 0xa084, 0x0007, 0x0079, 0x61d6, 0x61e0, 0x61e3,
-+ 0x61fc, 0x6218, 0x6262, 0x61e0, 0x61e0, 0x61de, 0x1078, 0x1332,
-+ 0x0c7f, 0x0e7f, 0x007c, 0x7024, 0xa065, 0x0040, 0x61f1, 0x7020,
-+ 0x8001, 0x7022, 0x600c, 0xa015, 0x0040, 0x61f8, 0x7216, 0x600f,
-+ 0x0000, 0x7007, 0x0000, 0x7027, 0x0000, 0x0c7f, 0x0e7f, 0x007c,
-+ 0x7216, 0x7212, 0x0078, 0x61f1, 0x6018, 0x2060, 0x1078, 0x44d3,
-+ 0x6000, 0xc0dc, 0x6002, 0x7020, 0x8001, 0x7022, 0x0040, 0x620d,
-+ 0x6054, 0xa015, 0x0040, 0x6214, 0x721e, 0x7007, 0x0000, 0x7027,
-+ 0x0000, 0x0c7f, 0x0e7f, 0x007c, 0x7218, 0x721e, 0x0078, 0x620d,
-+ 0x7024, 0xa065, 0x0040, 0x625f, 0x700c, 0xac06, 0x00c0, 0x622f,
-+ 0x1078, 0x7233, 0x600c, 0xa015, 0x0040, 0x622b, 0x720e, 0x600f,
-+ 0x0000, 0x0078, 0x625d, 0x720e, 0x720a, 0x0078, 0x625d, 0x7014,
-+ 0xac06, 0x00c0, 0x6242, 0x1078, 0x7233, 0x600c, 0xa015, 0x0040,
-+ 0x623e, 0x7216, 0x600f, 0x0000, 0x0078, 0x625d, 0x7216, 0x7212,
-+ 0x0078, 0x625d, 0x601c, 0xa086, 0x0003, 0x00c0, 0x625d, 0x6018,
-+ 0x2060, 0x1078, 0x44d3, 0x6000, 0xc0dc, 0x6002, 0x1078, 0x7233,
-+ 0x701c, 0xa065, 0x0040, 0x625d, 0x6054, 0xa015, 0x0040, 0x625b,
-+ 0x721e, 0x0078, 0x625d, 0x7218, 0x721e, 0x7027, 0x0000, 0x0c7f,
-+ 0x0e7f, 0x007c, 0x7024, 0xa065, 0x0040, 0x626f, 0x1078, 0x7233,
-+ 0x600c, 0xa015, 0x0040, 0x6276, 0x720e, 0x600f, 0x0000, 0x1078,
-+ 0x7378, 0x7027, 0x0000, 0x0c7f, 0x0e7f, 0x007c, 0x720e, 0x720a,
-+ 0x0078, 0x626f, 0x0d7e, 0x2069, 0xa8b1, 0x6830, 0xa084, 0x0003,
-+ 0x0079, 0x6282, 0x6288, 0x628a, 0x62b4, 0x6288, 0x1078, 0x1332,
-+ 0x0d7f, 0x007c, 0x0c7e, 0x6840, 0xa086, 0x0001, 0x0040, 0x62aa,
-+ 0x683c, 0xa065, 0x0040, 0x629b, 0x600c, 0xa015, 0x0040, 0x62a6,
-+ 0x6a3a, 0x600f, 0x0000, 0x6833, 0x0000, 0x683f, 0x0000, 0x2011,
-+ 0xa8d0, 0x2013, 0x0000, 0x0c7f, 0x0d7f, 0x007c, 0x683a, 0x6836,
-+ 0x0078, 0x629b, 0x6843, 0x0000, 0x6838, 0xa065, 0x0040, 0x629b,
-+ 0x6003, 0x0003, 0x0078, 0x629b, 0x0c7e, 0x6843, 0x0000, 0x6847,
-+ 0x0000, 0x684b, 0x0000, 0x683c, 0xa065, 0x0040, 0x62ce, 0x600c,
-+ 0xa015, 0x0040, 0x62ca, 0x6a3a, 0x600f, 0x0000, 0x683f, 0x0000,
-+ 0x0078, 0x62ce, 0x683f, 0x0000, 0x683a, 0x6836, 0x0c7f, 0x0d7f,
-+ 0x007c, 0x0d7e, 0x2069, 0xa8b1, 0x6804, 0xa084, 0x0007, 0x0079,
-+ 0x62d9, 0x62e3, 0x638a, 0x638a, 0x638a, 0x638a, 0x638c, 0x638a,
-+ 0x62e1, 0x1078, 0x1332, 0x6820, 0xa005, 0x00c0, 0x62e9, 0x0d7f,
-+ 0x007c, 0x0c7e, 0x680c, 0xa065, 0x0040, 0x62f8, 0x6807, 0x0004,
-+ 0x6826, 0x682b, 0x0000, 0x1078, 0x63d4, 0x0c7f, 0x0d7f, 0x007c,
-+ 0x6814, 0xa065, 0x0040, 0x6306, 0x6807, 0x0001, 0x6826, 0x682b,
-+ 0x0000, 0x1078, 0x63d4, 0x0c7f, 0x0d7f, 0x007c, 0x0e7e, 0x037e,
-+ 0x6a1c, 0xa2f5, 0x0000, 0x0040, 0x6385, 0x704c, 0xa00d, 0x0040,
-+ 0x6315, 0x7088, 0xa005, 0x0040, 0x632d, 0x7054, 0xa075, 0x0040,
-+ 0x631e, 0xa20e, 0x0040, 0x6385, 0x0078, 0x6323, 0x6818, 0xa20e,
-+ 0x0040, 0x6385, 0x2070, 0x704c, 0xa00d, 0x0040, 0x6315, 0x7088,
-+ 0xa005, 0x00c0, 0x6315, 0x2e00, 0x681e, 0x733c, 0x7038, 0xa302,
-+ 0x00c8, 0x6315, 0x1078, 0x76fc, 0x0040, 0x6385, 0x8318, 0x733e,
-+ 0x6112, 0x2e10, 0x621a, 0xa180, 0x0014, 0x2004, 0xa084, 0x00ff,
-+ 0x6032, 0xa180, 0x0014, 0x2003, 0x0000, 0xa180, 0x0015, 0x2004,
-+ 0xa08a, 0x199a, 0x0048, 0x634e, 0x2001, 0x1999, 0x8003, 0x801b,
-+ 0x831b, 0xa318, 0x6316, 0x037f, 0x0f7e, 0x2c78, 0x71a0, 0xd1bc,
-+ 0x0040, 0x6367, 0x7100, 0xd1f4, 0x0040, 0x6363, 0x7114, 0xa18c,
-+ 0x00ff, 0x0078, 0x636c, 0x2009, 0x0000, 0x0078, 0x636c, 0xa1e0,
-+ 0x29c0, 0x2c0c, 0xa18c, 0x00ff, 0x2061, 0x0100, 0x619a, 0x1078,
-+ 0x6965, 0x7300, 0xc3dd, 0x7302, 0x6807, 0x0002, 0x2f18, 0x6b26,
-+ 0x682b, 0x0000, 0x781f, 0x0003, 0x7803, 0x0001, 0x7807, 0x0040,
-+ 0x0f7f, 0x0e7f, 0x0c7f, 0x0d7f, 0x007c, 0x037f, 0x0e7f, 0x0c7f,
-+ 0x0078, 0x6383, 0x0d7f, 0x007c, 0x0c7e, 0x680c, 0xa065, 0x0040,
-+ 0x6398, 0x6807, 0x0004, 0x6826, 0x682b, 0x0000, 0x1078, 0x63d4,
-+ 0x0c7f, 0x0d7f, 0x007c, 0x0f7e, 0x0d7e, 0x2069, 0xa8b1, 0x6830,
-+ 0xa086, 0x0000, 0x00c0, 0x63bb, 0x6838, 0xa07d, 0x0040, 0x63bb,
-+ 0x6833, 0x0001, 0x683e, 0x6847, 0x0000, 0x684b, 0x0000, 0x127e,
-+ 0x0f7e, 0x2091, 0x2200, 0x027f, 0x1078, 0x1d6d, 0x00c0, 0x63be,
-+ 0x127f, 0x1078, 0x6cb3, 0x0d7f, 0x0f7f, 0x007c, 0x127f, 0x6843,
-+ 0x0000, 0x7803, 0x0002, 0x780c, 0xa015, 0x0040, 0x63d0, 0x6a3a,
-+ 0x780f, 0x0000, 0x6833, 0x0000, 0x683f, 0x0000, 0x0078, 0x63bb,
-+ 0x683a, 0x6836, 0x0078, 0x63ca, 0x601c, 0xa084, 0x000f, 0x1079,
-+ 0x63da, 0x007c, 0x63e3, 0x63e8, 0x6809, 0x6922, 0x63e8, 0x6809,
-+ 0x6922, 0x63e3, 0x63e8, 0x1078, 0x61cd, 0x1078, 0x62d1, 0x007c,
-+ 0x157e, 0x137e, 0x147e, 0x0c7e, 0x0f7e, 0x6004, 0xa08a, 0x0044,
-+ 0x10c8, 0x1332, 0x6118, 0x2178, 0x79a0, 0xd1bc, 0x0040, 0x6405,
-+ 0x7900, 0xd1f4, 0x0040, 0x6401, 0x7914, 0xa18c, 0x00ff, 0x0078,
-+ 0x640a, 0x2009, 0x0000, 0x0078, 0x640a, 0xa1f8, 0x29c0, 0x2f0c,
-+ 0xa18c, 0x00ff, 0x2c78, 0x2061, 0x0100, 0x619a, 0xa08a, 0x0040,
-+ 0x00c8, 0x645c, 0x1079, 0x641a, 0x0f7f, 0x0c7f, 0x147f, 0x137f,
-+ 0x157f, 0x007c, 0x64c2, 0x650a, 0x6532, 0x65cd, 0x65fd, 0x6605,
-+ 0x662c, 0x663d, 0x664e, 0x6656, 0x666e, 0x6656, 0x66d9, 0x663d,
-+ 0x66fa, 0x6702, 0x664e, 0x6702, 0x6713, 0x645a, 0x645a, 0x645a,
-+ 0x645a, 0x645a, 0x645a, 0x645a, 0x645a, 0x645a, 0x645a, 0x645a,
-+ 0x6eef, 0x6f14, 0x6f29, 0x6f4c, 0x6f6d, 0x662c, 0x645a, 0x662c,
-+ 0x6656, 0x645a, 0x6532, 0x65cd, 0x645a, 0x749c, 0x6656, 0x645a,
-+ 0x74bc, 0x6656, 0x645a, 0x645a, 0x64bd, 0x646b, 0x645a, 0x74e1,
-+ 0x7558, 0x7640, 0x645a, 0x7651, 0x6626, 0x766d, 0x645a, 0x6f82,
-+ 0x645a, 0x645a, 0x1078, 0x1332, 0x2100, 0x1079, 0x6465, 0x0f7f,
-+ 0x0c7f, 0x147f, 0x137f, 0x157f, 0x007c, 0x6469, 0x6469, 0x6469,
-+ 0x649f, 0x1078, 0x1332, 0x0d7e, 0x20a1, 0x020b, 0x1078, 0x6731,
-+ 0x7810, 0x2068, 0x20a3, 0x2414, 0x20a3, 0x0018, 0x20a3, 0x0800,
-+ 0x683c, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+ 0x20a3, 0x0000, 0x6850, 0x20a2, 0x6854, 0x20a2, 0x20a3, 0x0000,
-+ 0x20a3, 0x0000, 0x60c3, 0x0018, 0x1078, 0x6dfb, 0x0d7f, 0x007c,
-+ 0x0d7e, 0x7818, 0x2068, 0x68a0, 0xa082, 0x007e, 0x0048, 0x649c,
-+ 0xa085, 0x0001, 0x0d7f, 0x007c, 0xa006, 0x0078, 0x649a, 0x0d7e,
-+ 0x20a1, 0x020b, 0x1078, 0x6731, 0x20a3, 0x0500, 0x20a3, 0x0000,
-+ 0x7810, 0xa0e8, 0x000f, 0x6808, 0x20a2, 0x680c, 0x20a2, 0x6810,
-+ 0x20a2, 0x6814, 0x20a2, 0x6818, 0x20a2, 0x681c, 0x20a2, 0x60c3,
-+ 0x0010, 0x1078, 0x6dfb, 0x0d7f, 0x007c, 0x6030, 0x609a, 0x1078,
-+ 0x6dfb, 0x007c, 0x20a1, 0x020b, 0x1078, 0x6731, 0x20a3, 0x5200,
-+ 0x20a3, 0x0000, 0x0d7e, 0x2069, 0xa652, 0x6804, 0xd084, 0x0040,
-+ 0x64dc, 0x6828, 0x20a3, 0x0000, 0x017e, 0x1078, 0x2564, 0x21a2,
-+ 0x017f, 0x0d7f, 0x0078, 0x64e1, 0x0d7f, 0x20a3, 0x0000, 0x20a3,
-+ 0x0000, 0x20a9, 0x0004, 0x2099, 0xa605, 0x53a6, 0x20a9, 0x0004,
-+ 0x2099, 0xa601, 0x53a6, 0x7818, 0xa080, 0x0028, 0x2004, 0xa082,
-+ 0x007f, 0x0048, 0x64fb, 0x2001, 0xa61b, 0x20a6, 0x2001, 0xa61c,
-+ 0x20a6, 0x0078, 0x6501, 0x20a3, 0x0000, 0x6030, 0xa084, 0x00ff,
-+ 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x001c, 0x1078,
-+ 0x6dfb, 0x007c, 0x20a1, 0x020b, 0x1078, 0x6731, 0x20a3, 0x0500,
-+ 0x20a3, 0x0000, 0x7818, 0xa080, 0x0028, 0x2004, 0xa082, 0x007f,
-+ 0x0048, 0x6522, 0x2001, 0xa61b, 0x20a6, 0x2001, 0xa61c, 0x20a6,
-+ 0x0078, 0x6528, 0x20a3, 0x0000, 0x6030, 0xa084, 0x00ff, 0x20a2,
-+ 0x20a9, 0x0004, 0x2099, 0xa605, 0x53a6, 0x60c3, 0x0010, 0x1078,
-+ 0x6dfb, 0x007c, 0x20a1, 0x020b, 0x1078, 0x6731, 0x0c7e, 0x7818,
-+ 0x2060, 0x2001, 0x0000, 0x1078, 0x4972, 0x0c7f, 0x7818, 0xa080,
-+ 0x0028, 0x2004, 0xa086, 0x007e, 0x00c0, 0x654d, 0x20a3, 0x0400,
-+ 0x620c, 0xc2b4, 0x620e, 0x0078, 0x654f, 0x20a3, 0x0300, 0x20a3,
-+ 0x0000, 0x7818, 0xa080, 0x0028, 0x2004, 0xa086, 0x007e, 0x00c0,
-+ 0x659c, 0x2099, 0xa88d, 0x33a6, 0x9398, 0x33a6, 0x9398, 0x3304,
-+ 0xa084, 0x3fff, 0x20a2, 0x9398, 0x33a6, 0x20a3, 0x0000, 0x20a3,
-+ 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a9, 0x0004, 0x2099,
-+ 0xa605, 0x53a6, 0x20a9, 0x0004, 0x2099, 0xa601, 0x53a6, 0x20a9,
-+ 0x0010, 0x20a3, 0x0000, 0x00f0, 0x6579, 0x2099, 0xa895, 0x3304,
-+ 0xc0dd, 0x20a2, 0x2001, 0xa672, 0x2004, 0xd0e4, 0x0040, 0x6594,
-+ 0x20a3, 0x0000, 0x20a3, 0x0000, 0x9398, 0x9398, 0x9398, 0x33a6,
-+ 0x20a9, 0x0004, 0x0078, 0x6596, 0x20a9, 0x0007, 0x20a3, 0x0000,
-+ 0x00f0, 0x6596, 0x0078, 0x65bc, 0x2099, 0xa88d, 0x20a9, 0x0008,
-+ 0x53a6, 0x20a9, 0x0004, 0x2099, 0xa605, 0x53a6, 0x20a9, 0x0004,
-+ 0x2099, 0xa601, 0x53a6, 0x20a9, 0x0008, 0x20a3, 0x0000, 0x00f0,
-+ 0x65ad, 0x20a9, 0x0008, 0x20a3, 0x0000, 0x00f0, 0x65b3, 0x2099,
-+ 0xa895, 0x20a9, 0x0008, 0x53a6, 0x20a9, 0x0008, 0x20a3, 0x0000,
-+ 0x00f0, 0x65be, 0x20a9, 0x000a, 0x20a3, 0x0000, 0x00f0, 0x65c4,
-+ 0x60c3, 0x0074, 0x1078, 0x6dfb, 0x007c, 0x20a1, 0x020b, 0x1078,
-+ 0x6731, 0x20a3, 0x2010, 0x20a3, 0x0014, 0x20a3, 0x0800, 0x20a3,
-+ 0x2000, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x0f7e,
-+ 0x2079, 0xa652, 0x7904, 0x0f7f, 0xd1ac, 0x00c0, 0x65e9, 0xa085,
-+ 0x0020, 0xd1a4, 0x0040, 0x65ee, 0xa085, 0x0010, 0xa085, 0x0002,
-+ 0x0d7e, 0x0078, 0x66b7, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+ 0x60c3, 0x0014, 0x1078, 0x6dfb, 0x007c, 0x20a1, 0x020b, 0x1078,
-+ 0x6731, 0x20a3, 0x5000, 0x0078, 0x654f, 0x20a1, 0x020b, 0x1078,
-+ 0x6731, 0x20a3, 0x2110, 0x20a3, 0x0014, 0x20a3, 0x0000, 0x20a3,
-+ 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3,
-+ 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3,
-+ 0x0000, 0x60c3, 0x0014, 0x1078, 0x6dfb, 0x007c, 0x20a1, 0x020b,
-+ 0x1078, 0x67b9, 0x0078, 0x6630, 0x20a1, 0x020b, 0x1078, 0x67c2,
-+ 0x20a3, 0x0200, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+ 0x60c3, 0x0004, 0x1078, 0x6dfb, 0x007c, 0x20a1, 0x020b, 0x1078,
-+ 0x67c2, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3, 0x0003, 0x20a3,
-+ 0x2a00, 0x60c3, 0x0008, 0x1078, 0x6dfb, 0x007c, 0x20a1, 0x020b,
-+ 0x1078, 0x67c2, 0x20a3, 0x0200, 0x0078, 0x654f, 0x20a1, 0x020b,
-+ 0x1078, 0x67c2, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x7828, 0xa005,
-+ 0x0040, 0x6665, 0x20a2, 0x0078, 0x6667, 0x20a3, 0x0003, 0x7810,
-+ 0x20a2, 0x60c3, 0x0008, 0x1078, 0x6dfb, 0x007c, 0x0d7e, 0x20a1,
-+ 0x020b, 0x1078, 0x67c2, 0x20a3, 0x0210, 0x20a3, 0x0014, 0x20a3,
-+ 0x0800, 0x7818, 0x2068, 0x6894, 0xa086, 0x0014, 0x00c0, 0x6694,
-+ 0x6998, 0xa184, 0xc000, 0x00c0, 0x6690, 0xd1ec, 0x0040, 0x668c,
-+ 0x20a3, 0x2100, 0x0078, 0x6696, 0x20a3, 0x0100, 0x0078, 0x6696,
-+ 0x20a3, 0x0400, 0x0078, 0x6696, 0x20a3, 0x0700, 0xa006, 0x20a2,
-+ 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x0f7e, 0x2079, 0xa652, 0x7904,
-+ 0x0f7f, 0xd1ac, 0x00c0, 0x66a6, 0xa085, 0x0020, 0xd1a4, 0x0040,
-+ 0x66ab, 0xa085, 0x0010, 0x2009, 0xa674, 0x210c, 0xd184, 0x0040,
-+ 0x66b5, 0x699c, 0xd18c, 0x0040, 0x66b7, 0xa085, 0x0002, 0x027e,
-+ 0x2009, 0xa672, 0x210c, 0xd1e4, 0x0040, 0x66c5, 0xc0c5, 0xa094,
-+ 0x0030, 0xa296, 0x0010, 0x0040, 0x66cf, 0xd1ec, 0x0040, 0x66cf,
-+ 0xa094, 0x0030, 0xa296, 0x0010, 0x0040, 0x66cf, 0xc0bd, 0x027f,
-+ 0x20a2, 0x20a2, 0x20a2, 0x60c3, 0x0014, 0x1078, 0x6dfb, 0x0d7f,
-+ 0x007c, 0x20a1, 0x020b, 0x1078, 0x67c2, 0x20a3, 0x0210, 0x20a3,
-+ 0x0014, 0x20a3, 0x0000, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3,
-+ 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3,
-+ 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078,
-+ 0x6dfb, 0x007c, 0x20a1, 0x020b, 0x1078, 0x67c2, 0x20a3, 0x0200,
-+ 0x0078, 0x64c8, 0x20a1, 0x020b, 0x1078, 0x67c2, 0x20a3, 0x0100,
-+ 0x20a3, 0x0000, 0x20a3, 0x0003, 0x20a3, 0x2a00, 0x60c3, 0x0008,
-+ 0x1078, 0x6dfb, 0x007c, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a1,
-+ 0x020b, 0x1078, 0x67c2, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3,
-+ 0x000b, 0x20a3, 0x0000, 0x60c3, 0x0008, 0x1078, 0x6dfb, 0x007c,
-+ 0x027e, 0x037e, 0x047e, 0x2019, 0x3200, 0x2021, 0x0800, 0x0078,
-+ 0x6738, 0x027e, 0x037e, 0x047e, 0x2019, 0x2200, 0x2021, 0x0100,
-+ 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2014,
-+ 0xa286, 0x007e, 0x00c0, 0x674b, 0xa385, 0x00ff, 0x20a2, 0x20a3,
-+ 0xfffe, 0x0078, 0x6780, 0xa286, 0x007f, 0x00c0, 0x6757, 0x0d7e,
-+ 0xa385, 0x00ff, 0x20a2, 0x20a3, 0xfffd, 0x0078, 0x676e, 0xd2bc,
-+ 0x0040, 0x6776, 0xa286, 0x0080, 0x0d7e, 0x00c0, 0x6766, 0xa385,
-+ 0x00ff, 0x20a2, 0x20a3, 0xfffc, 0x0078, 0x676e, 0xa2e8, 0xa735,
-+ 0x2d6c, 0x6810, 0xa305, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xa61b,
-+ 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x6784, 0x0d7e, 0xa2e8,
-+ 0xa735, 0x2d6c, 0x6810, 0xa305, 0x20a2, 0x6814, 0x20a2, 0x0d7f,
-+ 0x20a3, 0x0000, 0x6230, 0x22a2, 0xa485, 0x0029, 0x20a2, 0x047f,
-+ 0x037f, 0x20a3, 0x0000, 0x1078, 0x6dea, 0x22a2, 0x20a3, 0x0000,
-+ 0x2fa2, 0x20a3, 0xffff, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x027f,
-+ 0x007c, 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a3, 0x02ff,
-+ 0x2011, 0xfffc, 0x22a2, 0x0d7e, 0x2069, 0xa61b, 0x2da6, 0x8d68,
-+ 0x2da6, 0x0d7f, 0x20a3, 0x2029, 0x20a3, 0x0000, 0x0078, 0x678b,
-+ 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3, 0xfc02, 0x20a3, 0x0000,
-+ 0x007c, 0x027e, 0x037e, 0x047e, 0x2019, 0x3300, 0x2021, 0x0800,
-+ 0x0078, 0x67c9, 0x027e, 0x037e, 0x047e, 0x2019, 0x2300, 0x2021,
-+ 0x0100, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028,
-+ 0x2004, 0xa092, 0x007e, 0x0048, 0x67e6, 0x0d7e, 0xa0e8, 0xa735,
-+ 0x2d6c, 0x6810, 0xa305, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xa61b,
-+ 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x67f4, 0x0d7e, 0xa0e8,
-+ 0xa735, 0x2d6c, 0x6810, 0xa305, 0x20a2, 0x6814, 0x20a2, 0x0d7f,
-+ 0x20a3, 0x0000, 0x6230, 0x22a2, 0xa485, 0x0098, 0x20a2, 0x20a3,
-+ 0x0000, 0x047f, 0x037f, 0x1078, 0x6dea, 0x22a2, 0x20a3, 0x0000,
-+ 0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x027f,
-+ 0x007c, 0x0c7e, 0x0f7e, 0x6004, 0xa08a, 0x0085, 0x1048, 0x1332,
-+ 0xa08a, 0x008c, 0x10c8, 0x1332, 0x6118, 0x2178, 0x79a0, 0xd1bc,
-+ 0x0040, 0x6827, 0x7900, 0xd1f4, 0x0040, 0x6823, 0x7914, 0xa18c,
-+ 0x00ff, 0x0078, 0x682c, 0x2009, 0x0000, 0x0078, 0x682c, 0xa1f8,
-+ 0x29c0, 0x2f0c, 0xa18c, 0x00ff, 0x2c78, 0x2061, 0x0100, 0x619a,
-+ 0xa082, 0x0085, 0x1079, 0x6837, 0x0f7f, 0x0c7f, 0x007c, 0x6840,
-+ 0x684b, 0x6866, 0x683e, 0x683e, 0x683e, 0x6840, 0x1078, 0x1332,
-+ 0x147e, 0x20a1, 0x020b, 0x1078, 0x6879, 0x60c3, 0x0000, 0x1078,
-+ 0x6dfb, 0x147f, 0x007c, 0x147e, 0x20a1, 0x020b, 0x1078, 0x68ad,
-+ 0x20a3, 0x0000, 0x20a3, 0x0000, 0x7808, 0x20a2, 0x7810, 0x20a2,
-+ 0x20a3, 0x0000, 0x20a3, 0xffff, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+ 0x60c3, 0x000c, 0x1078, 0x6dfb, 0x147f, 0x007c, 0x147e, 0x20a1,
-+ 0x020b, 0x1078, 0x68ee, 0x20a3, 0x0003, 0x20a3, 0x0300, 0x20a3,
-+ 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0004, 0x1078, 0x6dfb, 0x147f,
-+ 0x007c, 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080,
-+ 0x0028, 0x2004, 0xa092, 0x007e, 0x0048, 0x6898, 0x0d7e, 0xa0e8,
-+ 0xa735, 0x2d6c, 0x6810, 0xa085, 0x8100, 0x20a2, 0x6814, 0x20a2,
-+ 0x2069, 0xa61b, 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x68a7,
-+ 0x0d7e, 0xa0e8, 0xa735, 0x2d6c, 0x6810, 0xa085, 0x8100, 0x20a2,
-+ 0x6814, 0x20a2, 0x0d7f, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3,
-+ 0x0009, 0x20a3, 0x0000, 0x0078, 0x678b, 0x027e, 0x20e1, 0x9080,
-+ 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0xa092, 0x007e,
-+ 0x0048, 0x68cc, 0x0d7e, 0xa0e8, 0xa735, 0x2d6c, 0x6810, 0xa085,
-+ 0x8400, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xa61b, 0x2da6, 0x8d68,
-+ 0x2da6, 0x0d7f, 0x0078, 0x68db, 0x0d7e, 0xa0e8, 0xa735, 0x2d6c,
-+ 0x6810, 0xa085, 0x8400, 0x20a2, 0x6814, 0x20a2, 0x0d7f, 0x20a3,
-+ 0x0000, 0x6230, 0x22a2, 0x20a3, 0x0099, 0x20a3, 0x0000, 0x1078,
-+ 0x6dea, 0x22a2, 0x20a3, 0x0000, 0x7a08, 0x22a2, 0x7a10, 0x22a2,
-+ 0x20a3, 0x0000, 0x20a3, 0x0000, 0x027f, 0x007c, 0x027e, 0x20e1,
-+ 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0xa092,
-+ 0x007e, 0x0048, 0x690d, 0x0d7e, 0xa0e8, 0xa735, 0x2d6c, 0x6810,
-+ 0xa085, 0x8500, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xa61b, 0x2da6,
-+ 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x691c, 0x0d7e, 0xa0e8, 0xa735,
-+ 0x2d6c, 0x6810, 0xa085, 0x8500, 0x20a2, 0x6814, 0x20a2, 0x0d7f,
-+ 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, 0x0099, 0x20a3, 0x0000,
-+ 0x0078, 0x68df, 0x0c7e, 0x0f7e, 0x2c78, 0x7804, 0xa08a, 0x0040,
-+ 0x1048, 0x1332, 0xa08a, 0x0053, 0x10c8, 0x1332, 0x7918, 0x2160,
-+ 0x61a0, 0xd1bc, 0x0040, 0x6941, 0x6100, 0xd1f4, 0x0040, 0x693d,
-+ 0x6114, 0xa18c, 0x00ff, 0x0078, 0x6946, 0x2009, 0x0000, 0x0078,
-+ 0x6946, 0xa1e0, 0x29c0, 0x2c0c, 0xa18c, 0x00ff, 0x2061, 0x0100,
-+ 0x619a, 0xa082, 0x0040, 0x1079, 0x6950, 0x0f7f, 0x0c7f, 0x007c,
-+ 0x6965, 0x6a73, 0x6a14, 0x6c27, 0x6963, 0x6963, 0x6963, 0x6963,
-+ 0x6963, 0x6963, 0x6963, 0x714c, 0x715d, 0x716e, 0x717f, 0x6963,
-+ 0x767e, 0x6963, 0x713b, 0x1078, 0x1332, 0x0d7e, 0x157e, 0x147e,
-+ 0x780b, 0xffff, 0x20a1, 0x020b, 0x1078, 0x69d0, 0x7910, 0x2168,
-+ 0x6948, 0x7922, 0x21a2, 0xa016, 0x22a2, 0x22a2, 0x22a2, 0x694c,
-+ 0xa184, 0x000f, 0x00c0, 0x6980, 0x2001, 0x0005, 0x0078, 0x698a,
-+ 0xd184, 0x0040, 0x6987, 0x2001, 0x0004, 0x0078, 0x698a, 0xa084,
-+ 0x0006, 0x8004, 0x017e, 0x2008, 0x7830, 0xa084, 0x00ff, 0x8007,
-+ 0xa105, 0x017f, 0x20a2, 0xd1ac, 0x0040, 0x699a, 0x20a3, 0x0002,
-+ 0x0078, 0x69a6, 0xd1b4, 0x0040, 0x69a1, 0x20a3, 0x0001, 0x0078,
-+ 0x69a6, 0x20a3, 0x0000, 0x2230, 0x0078, 0x69a8, 0x6a80, 0x6e7c,
-+ 0x20a9, 0x0008, 0xad80, 0x0017, 0x200c, 0x810f, 0x21a2, 0x8000,
-+ 0x00f0, 0x69ac, 0x22a2, 0x26a2, 0x60c3, 0x0020, 0x20e1, 0x9080,
-+ 0x6014, 0xa084, 0x0004, 0xa085, 0x0009, 0x6016, 0x2001, 0xa8cd,
-+ 0x2003, 0x07d0, 0x2001, 0xa8cc, 0x2003, 0x0009, 0x2001, 0xa8d2,
-+ 0x2003, 0x0002, 0x1078, 0x158c, 0x147f, 0x157f, 0x0d7f, 0x007c,
-+ 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7a18, 0xa280, 0x0023, 0x2014,
-+ 0x8210, 0xa294, 0x00ff, 0x2202, 0x8217, 0x7818, 0xa080, 0x0028,
-+ 0x2004, 0xd0bc, 0x0040, 0x69f6, 0x0d7e, 0xa0e8, 0xa735, 0x2d6c,
-+ 0x6810, 0xa085, 0x0600, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xa61b,
-+ 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x6a05, 0x0d7e, 0xa0e8,
-+ 0xa735, 0x2d6c, 0x6810, 0xa085, 0x0600, 0x20a2, 0x6814, 0x20a2,
-+ 0x0d7f, 0x20a3, 0x0000, 0x6130, 0x21a2, 0x20a3, 0x0829, 0x20a3,
-+ 0x0000, 0x22a2, 0x20a3, 0x0000, 0x2fa2, 0x20a3, 0xffff, 0x20a3,
-+ 0x0000, 0x20a3, 0x0000, 0x007c, 0x0d7e, 0x157e, 0x137e, 0x147e,
-+ 0x20a1, 0x020b, 0x1078, 0x6a34, 0x7810, 0x2068, 0x6860, 0x20a2,
-+ 0x685c, 0x20a2, 0x6880, 0x20a2, 0x687c, 0x20a2, 0xa006, 0x20a2,
-+ 0x20a2, 0x20a2, 0x20a2, 0x60c3, 0x000c, 0x1078, 0x6dfb, 0x147f,
-+ 0x137f, 0x157f, 0x0d7f, 0x007c, 0x027e, 0x20e1, 0x9080, 0x20e1,
-+ 0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0xd0bc, 0x0040, 0x6a52,
-+ 0x0d7e, 0xa0e8, 0xa735, 0x2d6c, 0x6810, 0xa085, 0x0500, 0x20a2,
-+ 0x6814, 0x20a2, 0x2069, 0xa61b, 0x2da6, 0x8d68, 0x2da6, 0x0d7f,
-+ 0x0078, 0x6a61, 0x0d7e, 0xa0e8, 0xa735, 0x2d6c, 0x6810, 0xa085,
-+ 0x0500, 0x20a2, 0x6814, 0x20a2, 0x0d7f, 0x20a3, 0x0000, 0x6230,
-+ 0x22a2, 0x20a3, 0x0889, 0x20a3, 0x0000, 0x1078, 0x6dea, 0x22a2,
-+ 0x20a3, 0x0000, 0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3,
-+ 0x0000, 0x027f, 0x007c, 0x0d7e, 0x157e, 0x137e, 0x147e, 0x7810,
-+ 0xa0ec, 0xf000, 0x0040, 0x6a8b, 0xa06d, 0x1078, 0x495f, 0x0040,
-+ 0x6a8b, 0x684c, 0xa084, 0x2020, 0xa086, 0x2020, 0x00c0, 0x6a8b,
-+ 0x7824, 0xc0cd, 0x7826, 0x20a1, 0x020b, 0x1078, 0x6be0, 0xa016,
-+ 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x7810, 0xa084, 0xf000,
-+ 0x00c0, 0x6aa2, 0x7810, 0xa084, 0x0700, 0x8007, 0x1079, 0x6aaa,
-+ 0x0078, 0x6aa5, 0xa006, 0x1079, 0x6aaa, 0x147f, 0x137f, 0x157f,
-+ 0x0d7f, 0x007c, 0x6ab4, 0x6b4c, 0x6b57, 0x6b81, 0x6b95, 0x6bb1,
-+ 0x6bbc, 0x6ab2, 0x1078, 0x1332, 0x017e, 0x037e, 0x694c, 0xa18c,
-+ 0x0003, 0x0040, 0x6abf, 0xa186, 0x0003, 0x00c0, 0x6ace, 0x6b78,
-+ 0x7824, 0xd0cc, 0x0040, 0x6ac5, 0xc3e5, 0x23a2, 0x6868, 0x20a2,
-+ 0x6864, 0x20a2, 0x037f, 0x017f, 0x0078, 0x6b8c, 0xa186, 0x0001,
-+ 0x10c0, 0x1332, 0x6b78, 0x7824, 0xd0cc, 0x0040, 0x6ad8, 0xc3e5,
-+ 0x23a2, 0x6868, 0x20a2, 0x6864, 0x20a2, 0x22a2, 0x6874, 0x20a2,
-+ 0x22a2, 0x687c, 0x20a2, 0x2009, 0x0018, 0xa384, 0x0300, 0x0040,
-+ 0x6b46, 0xd3c4, 0x0040, 0x6aee, 0x687c, 0xa108, 0xd3cc, 0x0040,
-+ 0x6af3, 0x6874, 0xa108, 0x157e, 0x20a9, 0x000d, 0xad80, 0x0020,
-+ 0x201c, 0x831f, 0x23a2, 0x8000, 0x00f0, 0x6af8, 0x157f, 0x22a2,
-+ 0x22a2, 0x22a2, 0xa184, 0x0003, 0x0040, 0x6b46, 0x20a1, 0x020b,
-+ 0x20e1, 0x9080, 0x20e1, 0x4000, 0x007e, 0x7818, 0xa080, 0x0028,
-+ 0x2004, 0xd0bc, 0x0040, 0x6b26, 0x0d7e, 0xa0e8, 0xa735, 0x2d6c,
-+ 0x6810, 0xa085, 0x0700, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xa61b,
-+ 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x6b35, 0x0d7e, 0xa0e8,
-+ 0xa735, 0x2d6c, 0x6810, 0xa085, 0x0700, 0x20a2, 0x6814, 0x20a2,
-+ 0x0d7f, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x007f, 0x7b24, 0xd3cc,
-+ 0x0040, 0x6b3e, 0x20a3, 0x0889, 0x0078, 0x6b40, 0x20a3, 0x0898,
-+ 0x20a2, 0x1078, 0x6dea, 0x22a2, 0x20a3, 0x0000, 0x61c2, 0x037f,
-+ 0x017f, 0x1078, 0x6dfb, 0x007c, 0x2011, 0x0008, 0x7824, 0xd0cc,
-+ 0x0040, 0x6b53, 0xc2e5, 0x22a2, 0xa016, 0x0078, 0x6b8a, 0x2011,
-+ 0x0302, 0x7824, 0xd0cc, 0x0040, 0x6b5e, 0xc2e5, 0x22a2, 0xa016,
-+ 0x22a2, 0x22a2, 0x22a2, 0x20a3, 0x0012, 0x22a2, 0x20a3, 0x0008,
-+ 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x20a3, 0x7000, 0x20a3, 0x0500,
-+ 0x22a2, 0x20a3, 0x000a, 0x22a2, 0x22a2, 0x20a3, 0x2500, 0x22a2,
-+ 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x60c3, 0x0032, 0x1078, 0x6dfb,
-+ 0x007c, 0x2011, 0x0028, 0x7824, 0xd0cc, 0x0040, 0x6b88, 0xc2e5,
-+ 0x22a2, 0xa016, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2,
-+ 0x60c3, 0x0018, 0x1078, 0x6dfb, 0x007c, 0x2011, 0x0100, 0x7824,
-+ 0xd0cc, 0x0040, 0x6b9c, 0xc2e5, 0x22a2, 0xa016, 0x22a2, 0x22a2,
-+ 0x22a2, 0x22a2, 0x22a2, 0x20a3, 0x0008, 0x22a2, 0x7834, 0xa084,
-+ 0x00ff, 0x20a2, 0x22a2, 0x22a2, 0x60c3, 0x0020, 0x1078, 0x6dfb,
-+ 0x007c, 0x2011, 0x0008, 0x7824, 0xd0cc, 0x0040, 0x6bb8, 0xc2e5,
-+ 0x22a2, 0xa016, 0x0078, 0x6b8a, 0x037e, 0x7b10, 0xa384, 0xff00,
-+ 0x7812, 0xa384, 0x00ff, 0x8001, 0x00c0, 0x6bcf, 0x7824, 0xd0cc,
-+ 0x0040, 0x6bcb, 0xc2e5, 0x22a2, 0x037f, 0x0078, 0x6b8a, 0x047e,
-+ 0x2021, 0x0800, 0x007e, 0x7824, 0xd0cc, 0x007f, 0x0040, 0x6bd9,
-+ 0xc4e5, 0x24a2, 0x047f, 0x22a2, 0x20a2, 0x037f, 0x0078, 0x6b8c,
-+ 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028,
-+ 0x2004, 0xd0bc, 0x0040, 0x6bfe, 0x0d7e, 0xa0e8, 0xa735, 0x2d6c,
-+ 0x6810, 0xa085, 0x0700, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xa61b,
-+ 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x6c0d, 0x0d7e, 0xa0e8,
-+ 0xa735, 0x2d6c, 0x6810, 0xa085, 0x0700, 0x20a2, 0x6814, 0x20a2,
-+ 0x0d7f, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x7824, 0xd0cc, 0x0040,
-+ 0x6c15, 0x20a3, 0x0889, 0x0078, 0x6c17, 0x20a3, 0x0898, 0x20a3,
-+ 0x0000, 0x1078, 0x6dea, 0x22a2, 0x20a3, 0x0000, 0x7a08, 0x22a2,
-+ 0x2fa2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x027f, 0x007c, 0x0d7e,
-+ 0x157e, 0x137e, 0x147e, 0x017e, 0x037e, 0x7810, 0xa084, 0x0700,
-+ 0x8007, 0x1079, 0x6c3a, 0x037f, 0x017f, 0x147f, 0x137f, 0x157f,
-+ 0x0d7f, 0x007c, 0x6c42, 0x6c42, 0x6c44, 0x6c42, 0x6c42, 0x6c42,
-+ 0x6c69, 0x6c42, 0x1078, 0x1332, 0x7910, 0xa18c, 0xf8ff, 0xa18d,
-+ 0x0600, 0x7912, 0x20a1, 0x020b, 0x2009, 0x0003, 0x1078, 0x6c73,
-+ 0x0d7e, 0x2069, 0xa652, 0x6804, 0xd0bc, 0x0040, 0x6c5e, 0x682c,
-+ 0xa084, 0x00ff, 0x8007, 0x20a2, 0x0078, 0x6c60, 0x20a3, 0x3f00,
-+ 0x0d7f, 0x22a2, 0x22a2, 0x22a2, 0x60c3, 0x0001, 0x1078, 0x6dfb,
-+ 0x007c, 0x20a1, 0x020b, 0x2009, 0x0003, 0x1078, 0x6c73, 0x20a3,
-+ 0x7f00, 0x0078, 0x6c61, 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000,
-+ 0x7818, 0xa080, 0x0028, 0x2004, 0xd0bc, 0x0040, 0x6c91, 0x0d7e,
-+ 0xa0e8, 0xa735, 0x2d6c, 0x6810, 0xa085, 0x0100, 0x20a2, 0x6814,
-+ 0x20a2, 0x2069, 0xa61b, 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078,
-+ 0x6ca0, 0x0d7e, 0xa0e8, 0xa735, 0x2d6c, 0x6810, 0xa085, 0x0100,
-+ 0x20a2, 0x6814, 0x20a2, 0x0d7f, 0x20a3, 0x0000, 0x6230, 0x22a2,
-+ 0x20a3, 0x0888, 0xa18d, 0x0008, 0x21a2, 0x1078, 0x6dea, 0x22a2,
-+ 0x20a3, 0x0000, 0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3,
-+ 0x0000, 0x027f, 0x007c, 0x0e7e, 0x0d7e, 0x0c7e, 0x057e, 0x047e,
-+ 0x037e, 0x2061, 0x0100, 0x2071, 0xa600, 0x6130, 0x7818, 0x2068,
-+ 0x68a0, 0x2028, 0xd0bc, 0x00c0, 0x6cca, 0x6910, 0x6a14, 0x6430,
-+ 0x0078, 0x6cce, 0x6910, 0x6a14, 0x736c, 0x7470, 0x781c, 0xa086,
-+ 0x0006, 0x0040, 0x6d2d, 0xd5bc, 0x0040, 0x6cde, 0xa185, 0x0100,
-+ 0x6062, 0x6266, 0x636a, 0x646e, 0x0078, 0x6ce5, 0xa185, 0x0100,
-+ 0x6062, 0x6266, 0x606b, 0x0000, 0x646e, 0x6073, 0x0809, 0x6077,
-+ 0x0008, 0x688c, 0x8000, 0xa084, 0x00ff, 0x688e, 0x8007, 0x607a,
-+ 0x607f, 0x0000, 0x2f00, 0x6082, 0x7808, 0x6086, 0x7810, 0x2070,
-+ 0x7014, 0x608a, 0x7010, 0x608e, 0x700c, 0x60c6, 0x7008, 0x60ca,
-+ 0x686c, 0x60ce, 0x60ab, 0x0036, 0x60af, 0x95d5, 0x60d7, 0x0000,
-+ 0xa582, 0x0080, 0x0048, 0x6d17, 0x6a00, 0xd2f4, 0x0040, 0x6d15,
-+ 0x6a14, 0xa294, 0x00ff, 0x0078, 0x6d17, 0x2011, 0x0000, 0x629e,
-+ 0x6017, 0x0016, 0x2009, 0x07d0, 0x60c4, 0xa084, 0xfff0, 0xa005,
-+ 0x0040, 0x6d24, 0x2009, 0x1b58, 0x1078, 0x5ad0, 0x037f, 0x047f,
-+ 0x057f, 0x0c7f, 0x0d7f, 0x0e7f, 0x007c, 0x7810, 0x2070, 0x704c,
-+ 0xa084, 0x0003, 0xa086, 0x0002, 0x0040, 0x6d85, 0xd5bc, 0x0040,
-+ 0x6d41, 0xa185, 0x0100, 0x6062, 0x6266, 0x636a, 0x646e, 0x0078,
-+ 0x6d48, 0xa185, 0x0100, 0x6062, 0x6266, 0x606b, 0x0000, 0x646e,
-+ 0x6073, 0x0880, 0x6077, 0x0008, 0x688c, 0x8000, 0xa084, 0x00ff,
-+ 0x688e, 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00, 0x6086, 0x7808,
-+ 0x6082, 0x7060, 0x608a, 0x705c, 0x608e, 0x7080, 0x60c6, 0x707c,
-+ 0x60ca, 0x707c, 0x792c, 0xa108, 0x792e, 0x7080, 0x7928, 0xa109,
-+ 0x792a, 0x686c, 0x60ce, 0x60ab, 0x0036, 0x60af, 0x95d5, 0x60d7,
-+ 0x0000, 0xa582, 0x0080, 0x0048, 0x6d80, 0x6a00, 0xd2f4, 0x0040,
-+ 0x6d7e, 0x6a14, 0xa294, 0x00ff, 0x0078, 0x6d80, 0x2011, 0x0000,
-+ 0x629e, 0x6017, 0x0012, 0x0078, 0x6d1a, 0xd5bc, 0x0040, 0x6d90,
-+ 0xa185, 0x0700, 0x6062, 0x6266, 0x636a, 0x646e, 0x0078, 0x6d97,
-+ 0xa185, 0x0700, 0x6062, 0x6266, 0x606b, 0x0000, 0x646e, 0x1078,
-+ 0x495f, 0x0040, 0x6dad, 0x0d7e, 0x7810, 0xa06d, 0x684c, 0x0d7f,
-+ 0xa084, 0x2020, 0xa086, 0x2020, 0x00c0, 0x6dad, 0x7824, 0xc0cd,
-+ 0x7826, 0x6073, 0x0889, 0x0078, 0x6daf, 0x6073, 0x0898, 0x6077,
-+ 0x0000, 0x688c, 0x8000, 0xa084, 0x00ff, 0x688e, 0x8007, 0x607a,
-+ 0x607f, 0x0000, 0x2f00, 0x6086, 0x7808, 0x6082, 0x7014, 0x608a,
-+ 0x7010, 0x608e, 0x700c, 0x60c6, 0x7008, 0x60ca, 0x686c, 0x60ce,
-+ 0x60ab, 0x0036, 0x60af, 0x95d5, 0x60d7, 0x0000, 0xa582, 0x0080,
-+ 0x0048, 0x6ddd, 0x6a00, 0xd2f4, 0x0040, 0x6ddb, 0x6a14, 0xa294,
-+ 0x00ff, 0x0078, 0x6ddd, 0x2011, 0x0000, 0x629e, 0x7824, 0xd0cc,
-+ 0x0040, 0x6de6, 0x6017, 0x0016, 0x0078, 0x6d1a, 0x6017, 0x0012,
-+ 0x0078, 0x6d1a, 0x7a18, 0xa280, 0x0023, 0x2014, 0x8210, 0xa294,
-+ 0x00ff, 0x2202, 0x8217, 0x007c, 0x0d7e, 0x2069, 0xa8b1, 0x6843,
-+ 0x0001, 0x0d7f, 0x007c, 0x20e1, 0x9080, 0x60a3, 0x0056, 0x60a7,
-+ 0x9575, 0x1078, 0x6e06, 0x1078, 0x5ac0, 0x007c, 0x007e, 0x6014,
-+ 0xa084, 0x0004, 0xa085, 0x0009, 0x6016, 0x007f, 0x007c, 0x007e,
-+ 0x0c7e, 0x2061, 0x0100, 0x6014, 0xa084, 0x0004, 0xa085, 0x0008,
-+ 0x6016, 0x0c7f, 0x007f, 0x007c, 0x0c7e, 0x0d7e, 0x017e, 0x027e,
-+ 0x2061, 0x0100, 0x2069, 0x0140, 0x6904, 0xa194, 0x4000, 0x0040,
-+ 0x6e59, 0x1078, 0x6e0f, 0x6803, 0x1000, 0x6803, 0x0000, 0x0c7e,
-+ 0x2061, 0xa8b1, 0x6128, 0xa192, 0x00c8, 0x00c8, 0x6e44, 0x8108,
-+ 0x612a, 0x6124, 0x0c7f, 0x81ff, 0x0040, 0x6e54, 0x1078, 0x5ac0,
-+ 0x1078, 0x6e06, 0x0078, 0x6e54, 0x6124, 0xa1e5, 0x0000, 0x0040,
-+ 0x6e51, 0x1078, 0xa5c4, 0x1078, 0x5acb, 0x2009, 0x0014, 0x1078,
-+ 0x775c, 0x0c7f, 0x0078, 0x6e54, 0x027f, 0x017f, 0x0d7f, 0x0c7f,
-+ 0x007c, 0x2001, 0xa8cd, 0x2004, 0xa005, 0x00c0, 0x6e54, 0x0c7e,
-+ 0x2061, 0xa8b1, 0x6128, 0xa192, 0x0003, 0x00c8, 0x6e44, 0x8108,
-+ 0x612a, 0x0c7f, 0x1078, 0x5ac0, 0x1078, 0x4224, 0x0078, 0x6e54,
-+ 0x0c7e, 0x0d7e, 0x0e7e, 0x017e, 0x027e, 0x1078, 0x5ad8, 0x2071,
-+ 0xa8b1, 0x713c, 0x81ff, 0x0040, 0x6e9a, 0x2061, 0x0100, 0x2069,
-+ 0x0140, 0x6904, 0xa194, 0x4000, 0x0040, 0x6ea0, 0x6803, 0x1000,
-+ 0x6803, 0x0000, 0x037e, 0x2019, 0x0001, 0x1078, 0x7058, 0x037f,
-+ 0x713c, 0x2160, 0x1078, 0xa5c4, 0x2009, 0x004a, 0x1078, 0x775c,
-+ 0x0078, 0x6e9a, 0x027f, 0x017f, 0x0e7f, 0x0d7f, 0x0c7f, 0x007c,
-+ 0x0078, 0x6e8a, 0x0e7e, 0x2071, 0xa8b1, 0x7048, 0xd084, 0x0040,
-+ 0x6ebc, 0x713c, 0x81ff, 0x0040, 0x6ebc, 0x2071, 0x0100, 0xa188,
-+ 0x0007, 0x210c, 0xa18e, 0x0006, 0x00c0, 0x6eba, 0x7017, 0x0012,
-+ 0x0078, 0x6ebc, 0x7017, 0x0016, 0x0e7f, 0x007c, 0x0e7e, 0x0d7e,
-+ 0x0c7e, 0x067e, 0x057e, 0x047e, 0x007e, 0x127e, 0x2091, 0x8000,
-+ 0x6018, 0x2068, 0x6ca0, 0x2071, 0xa8b1, 0x7018, 0x2068, 0x8dff,
-+ 0x0040, 0x6ee6, 0x68a0, 0xa406, 0x0040, 0x6eda, 0x6854, 0x2068,
-+ 0x0078, 0x6ecf, 0x6010, 0x2060, 0x643c, 0x6540, 0x6648, 0x2d60,
-+ 0x1078, 0x4736, 0x0040, 0x6ee6, 0xa085, 0x0001, 0x127f, 0x007f,
-+ 0x047f, 0x057f, 0x067f, 0x0c7f, 0x0d7f, 0x0e7f, 0x007c, 0x20a1,
-+ 0x020b, 0x1078, 0x6731, 0x20a3, 0x1200, 0x20a3, 0x0000, 0x20a3,
-+ 0x0000, 0x781c, 0xa086, 0x0004, 0x00c0, 0x6f01, 0x6098, 0x0078,
-+ 0x6f02, 0x6030, 0x20a2, 0x7834, 0x20a2, 0x7838, 0x20a2, 0x20a9,
-+ 0x0010, 0xa006, 0x20a2, 0x00f0, 0x6f0a, 0x20a2, 0x20a2, 0x60c3,
-+ 0x002c, 0x1078, 0x6dfb, 0x007c, 0x157e, 0x147e, 0x20a1, 0x020b,
-+ 0x1078, 0x6731, 0x20a3, 0x0f00, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+ 0x7808, 0x20a2, 0x60c3, 0x0008, 0x1078, 0x6dfb, 0x147f, 0x157f,
-+ 0x007c, 0x157e, 0x147e, 0x20a1, 0x020b, 0x1078, 0x67c2, 0x20a3,
-+ 0x0200, 0x20a3, 0x0000, 0x20a9, 0x0006, 0x2011, 0xa640, 0x2019,
-+ 0xa641, 0x23a6, 0x22a6, 0xa398, 0x0002, 0xa290, 0x0002, 0x00f0,
-+ 0x6f39, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x001c, 0x1078,
-+ 0x6dfb, 0x147f, 0x157f, 0x007c, 0x157e, 0x147e, 0x017e, 0x027e,
-+ 0x20a1, 0x020b, 0x1078, 0x6799, 0x1078, 0x67b0, 0x7810, 0xa080,
-+ 0x0000, 0x2004, 0xa080, 0x0015, 0x2098, 0x7808, 0xa088, 0x0002,
-+ 0x21a8, 0x53a6, 0xa080, 0x0004, 0x8003, 0x60c2, 0x1078, 0x6dfb,
-+ 0x027f, 0x017f, 0x147f, 0x157f, 0x007c, 0x157e, 0x147e, 0x20a1,
-+ 0x020b, 0x1078, 0x6731, 0x20a3, 0x6200, 0x20a3, 0x0000, 0x20a3,
-+ 0x0000, 0x7808, 0x20a2, 0x60c3, 0x0008, 0x1078, 0x6dfb, 0x147f,
-+ 0x157f, 0x007c, 0x157e, 0x147e, 0x017e, 0x027e, 0x20a1, 0x020b,
-+ 0x1078, 0x6731, 0x7810, 0xa080, 0x0000, 0x2004, 0xa080, 0x0017,
-+ 0x2098, 0x7808, 0xa088, 0x0002, 0x21a8, 0x53a6, 0x8003, 0x60c2,
-+ 0x1078, 0x6dfb, 0x027f, 0x017f, 0x147f, 0x157f, 0x007c, 0x0e7e,
-+ 0x0c7e, 0x007e, 0x127e, 0x2091, 0x8000, 0x2071, 0xa8b1, 0x700c,
-+ 0x2060, 0x8cff, 0x0040, 0x6fbb, 0x1078, 0x8f00, 0x00c0, 0x6fb2,
-+ 0x1078, 0x7c83, 0x600c, 0x007e, 0x1078, 0x772d, 0x1078, 0x7233,
-+ 0x0c7f, 0x0078, 0x6fa9, 0x700f, 0x0000, 0x700b, 0x0000, 0x127f,
-+ 0x007f, 0x0c7f, 0x0e7f, 0x007c, 0x127e, 0x157e, 0x0f7e, 0x0e7e,
-+ 0x0d7e, 0x0c7e, 0x027e, 0x017e, 0x007e, 0x2091, 0x8000, 0x2069,
-+ 0x0100, 0x2079, 0x0140, 0x2071, 0xa8b1, 0x7024, 0x2060, 0x8cff,
-+ 0x0040, 0x7014, 0x1078, 0x6e0f, 0x68c3, 0x0000, 0x1078, 0x5acb,
-+ 0x2009, 0x0013, 0x1078, 0x775c, 0x20a9, 0x01f4, 0x6824, 0xd094,
-+ 0x0040, 0x6ff7, 0x6827, 0x0004, 0x7804, 0xa084, 0x4000, 0x0040,
-+ 0x7009, 0x7803, 0x1000, 0x7803, 0x0000, 0x0078, 0x7009, 0xd084,
-+ 0x0040, 0x6ffe, 0x6827, 0x0001, 0x0078, 0x7000, 0x00f0, 0x6fe6,
-+ 0x7804, 0xa084, 0x1000, 0x0040, 0x7009, 0x7803, 0x0100, 0x7803,
-+ 0x0000, 0x6824, 0x007f, 0x017f, 0x027f, 0x0c7f, 0x0d7f, 0x0e7f,
-+ 0x0f7f, 0x157f, 0x127f, 0x007c, 0x2001, 0xa600, 0x2004, 0xa096,
-+ 0x0001, 0x0040, 0x704e, 0xa096, 0x0004, 0x0040, 0x704e, 0x1078,
-+ 0x5acb, 0x6817, 0x0008, 0x68c3, 0x0000, 0x2011, 0x41dc, 0x1078,
-+ 0x5a45, 0x20a9, 0x01f4, 0x6824, 0xd094, 0x0040, 0x703c, 0x6827,
-+ 0x0004, 0x7804, 0xa084, 0x4000, 0x0040, 0x704e, 0x7803, 0x1000,
-+ 0x7803, 0x0000, 0x0078, 0x704e, 0xd084, 0x0040, 0x7043, 0x6827,
-+ 0x0001, 0x0078, 0x7045, 0x00f0, 0x702b, 0x7804, 0xa084, 0x1000,
-+ 0x0040, 0x704e, 0x7803, 0x0100, 0x7803, 0x0000, 0x007f, 0x017f,
-+ 0x027f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x157f, 0x127f, 0x007c,
-+ 0x127e, 0x157e, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x027e, 0x017e,
-+ 0x007e, 0x2091, 0x8000, 0x2069, 0x0100, 0x2079, 0x0140, 0x2071,
-+ 0xa8b1, 0x703c, 0x2060, 0x8cff, 0x0040, 0x70d6, 0x68af, 0x95f5,
-+ 0x6817, 0x0010, 0x2009, 0x00fa, 0x8109, 0x00c0, 0x7074, 0x68c7,
-+ 0x0000, 0x68cb, 0x0008, 0x1078, 0x5ad8, 0x1078, 0x1f7e, 0x047e,
-+ 0x057e, 0x2009, 0x017f, 0x212c, 0x200b, 0x00a5, 0x2021, 0x0169,
-+ 0x2404, 0xa084, 0x000f, 0xa086, 0x0004, 0x00c0, 0x70a5, 0x68c7,
-+ 0x0000, 0x68cb, 0x0008, 0x0e7e, 0x0f7e, 0x2079, 0x0020, 0x2071,
-+ 0xa908, 0x6814, 0xa084, 0x0004, 0xa085, 0x0012, 0x6816, 0x7803,
-+ 0x0008, 0x7003, 0x0000, 0x0f7f, 0x0e7f, 0x250a, 0x057f, 0x047f,
-+ 0xa39d, 0x0000, 0x00c0, 0x70b0, 0x2009, 0x0049, 0x1078, 0x775c,
-+ 0x20a9, 0x03e8, 0x6824, 0xd094, 0x0040, 0x70c3, 0x6827, 0x0004,
-+ 0x7804, 0xa084, 0x4000, 0x0040, 0x70d5, 0x7803, 0x1000, 0x7803,
-+ 0x0000, 0x0078, 0x70d5, 0xd08c, 0x0040, 0x70ca, 0x6827, 0x0002,
-+ 0x0078, 0x70cc, 0x00f0, 0x70b2, 0x7804, 0xa084, 0x1000, 0x0040,
-+ 0x70d5, 0x7803, 0x0100, 0x7803, 0x0000, 0x6824, 0x007f, 0x017f,
-+ 0x027f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x157f, 0x127f, 0x007c,
-+ 0x0d7e, 0x127e, 0x2091, 0x8000, 0x2069, 0xa8b1, 0x6a06, 0x127f,
-+ 0x0d7f, 0x007c, 0x0d7e, 0x127e, 0x2091, 0x8000, 0x2069, 0xa8b1,
-+ 0x6a32, 0x127f, 0x0d7f, 0x007c, 0x0f7e, 0x0e7e, 0x0c7e, 0x067e,
-+ 0x007e, 0x127e, 0x2071, 0xa8b1, 0x7614, 0x2660, 0x2678, 0x2091,
-+ 0x8000, 0x8cff, 0x0040, 0x7134, 0x601c, 0xa206, 0x00c0, 0x712f,
-+ 0x7014, 0xac36, 0x00c0, 0x710e, 0x660c, 0x7616, 0x7010, 0xac36,
-+ 0x00c0, 0x711c, 0x2c00, 0xaf36, 0x0040, 0x711a, 0x2f00, 0x7012,
-+ 0x0078, 0x711c, 0x7013, 0x0000, 0x660c, 0x067e, 0x2c00, 0xaf06,
-+ 0x0040, 0x7125, 0x7e0e, 0x0078, 0x7126, 0x2678, 0x600f, 0x0000,
-+ 0x1078, 0x8ec6, 0x1078, 0x7233, 0x0c7f, 0x0078, 0x7101, 0x2c78,
-+ 0x600c, 0x2060, 0x0078, 0x7101, 0x127f, 0x007f, 0x067f, 0x0c7f,
-+ 0x0e7f, 0x0f7f, 0x007c, 0x157e, 0x147e, 0x20a1, 0x020b, 0x1078,
-+ 0x69d0, 0x7810, 0x20a2, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2,
-+ 0x20a3, 0x1000, 0x0078, 0x718e, 0x157e, 0x147e, 0x20a1, 0x020b,
-+ 0x1078, 0x69d0, 0x7810, 0x20a2, 0xa006, 0x20a2, 0x20a2, 0x20a2,
-+ 0x20a2, 0x20a3, 0x4000, 0x0078, 0x718e, 0x157e, 0x147e, 0x20a1,
-+ 0x020b, 0x1078, 0x69d0, 0x7810, 0x20a2, 0xa006, 0x20a2, 0x20a2,
-+ 0x20a2, 0x20a2, 0x20a3, 0x2000, 0x0078, 0x718e, 0x157e, 0x147e,
-+ 0x20a1, 0x020b, 0x1078, 0x69d0, 0x7810, 0x20a2, 0xa006, 0x20a2,
-+ 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x0400, 0x0078, 0x718e, 0x157e,
-+ 0x147e, 0x20a1, 0x020b, 0x1078, 0x69d0, 0x7810, 0x20a2, 0xa006,
-+ 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x0200, 0x1078, 0x723e,
-+ 0x60c3, 0x0020, 0x1078, 0x6dfb, 0x147f, 0x157f, 0x007c, 0x127e,
-+ 0x0c7e, 0x2091, 0x8000, 0x2061, 0x0100, 0x6120, 0xd1b4, 0x00c0,
-+ 0x71a6, 0xd1bc, 0x00c0, 0x71f0, 0x0078, 0x7230, 0x2009, 0x017f,
-+ 0x200b, 0x00a1, 0x157e, 0x007e, 0x0d7e, 0x2069, 0x0140, 0x20a9,
-+ 0x001e, 0x2009, 0x0169, 0x6804, 0xa084, 0x4000, 0x0040, 0x71e7,
-+ 0x6020, 0xd0b4, 0x0040, 0x71e7, 0x6024, 0xd094, 0x00c0, 0x71e7,
-+ 0x2104, 0xa084, 0x000f, 0xa086, 0x0004, 0x00c0, 0x71e7, 0x00f0,
-+ 0x71b3, 0x027e, 0x6198, 0xa18c, 0x00ff, 0x8107, 0x6130, 0xa18c,
-+ 0x00ff, 0xa10d, 0x6088, 0x628c, 0x618e, 0x608b, 0xbc91, 0x6043,
-+ 0x0001, 0x6043, 0x0000, 0x608a, 0x628e, 0x6024, 0xd094, 0x00c0,
-+ 0x71e6, 0x6a04, 0xa294, 0x4000, 0x00c0, 0x71dd, 0x027f, 0x0d7f,
-+ 0x007f, 0x157f, 0x2009, 0x017f, 0x200b, 0x0000, 0x0078, 0x7230,
-+ 0x2009, 0x017f, 0x200b, 0x00a1, 0x157e, 0x007e, 0x0d7e, 0x2069,
-+ 0x0140, 0x20a9, 0x001e, 0x2009, 0x0169, 0x6804, 0xa084, 0x4000,
-+ 0x0040, 0x7229, 0x6020, 0xd0bc, 0x0040, 0x7229, 0x2104, 0xa084,
-+ 0x000f, 0xa086, 0x0004, 0x00c0, 0x7229, 0x00f0, 0x71fd, 0x027e,
-+ 0x6164, 0xa18c, 0x00ff, 0x8107, 0x6130, 0xa18c, 0x00ff, 0xa10d,
-+ 0x6088, 0x628c, 0x608b, 0xbc91, 0x618e, 0x6043, 0x0001, 0x6043,
-+ 0x0000, 0x608a, 0x628e, 0x6a04, 0xa294, 0x4000, 0x00c0, 0x7223,
-+ 0x027f, 0x0d7f, 0x007f, 0x157f, 0x2009, 0x017f, 0x200b, 0x0000,
-+ 0x0c7f, 0x127f, 0x007c, 0x0e7e, 0x2071, 0xa8b1, 0x7020, 0xa005,
-+ 0x0040, 0x723c, 0x8001, 0x7022, 0x0e7f, 0x007c, 0x20a9, 0x0008,
-+ 0x20a2, 0x00f0, 0x7240, 0x20a2, 0x20a2, 0x007c, 0x0f7e, 0x0e7e,
-+ 0x0d7e, 0x0c7e, 0x077e, 0x067e, 0x007e, 0x127e, 0x2091, 0x8000,
-+ 0x2071, 0xa8b1, 0x7614, 0x2660, 0x2678, 0x2039, 0x0001, 0x87ff,
-+ 0x0040, 0x72e2, 0x8cff, 0x0040, 0x72e2, 0x601c, 0xa086, 0x0006,
-+ 0x00c0, 0x72dd, 0x88ff, 0x0040, 0x726d, 0x2800, 0xac06, 0x00c0,
-+ 0x72dd, 0x2039, 0x0000, 0x0078, 0x7278, 0x6018, 0xa206, 0x00c0,
-+ 0x72dd, 0x85ff, 0x0040, 0x7278, 0x6020, 0xa106, 0x00c0, 0x72dd,
-+ 0x7024, 0xac06, 0x00c0, 0x72a8, 0x2069, 0x0100, 0x68c0, 0xa005,
-+ 0x0040, 0x72a3, 0x1078, 0x5acb, 0x6817, 0x0008, 0x68c3, 0x0000,
-+ 0x1078, 0x7378, 0x7027, 0x0000, 0x037e, 0x2069, 0x0140, 0x6b04,
-+ 0xa384, 0x1000, 0x0040, 0x7298, 0x6803, 0x0100, 0x6803, 0x0000,
-+ 0x2069, 0x0100, 0x6824, 0xd084, 0x0040, 0x72a0, 0x6827, 0x0001,
-+ 0x037f, 0x0078, 0x72a8, 0x6003, 0x0009, 0x630a, 0x0078, 0x72dd,
-+ 0x7014, 0xac36, 0x00c0, 0x72ae, 0x660c, 0x7616, 0x7010, 0xac36,
-+ 0x00c0, 0x72bc, 0x2c00, 0xaf36, 0x0040, 0x72ba, 0x2f00, 0x7012,
-+ 0x0078, 0x72bc, 0x7013, 0x0000, 0x660c, 0x067e, 0x2c00, 0xaf06,
-+ 0x0040, 0x72c5, 0x7e0e, 0x0078, 0x72c6, 0x2678, 0x89ff, 0x00c0,
-+ 0x72d5, 0x600f, 0x0000, 0x6010, 0x2068, 0x1078, 0x8d06, 0x0040,
-+ 0x72d3, 0x1078, 0xa1ca, 0x1078, 0x8ec6, 0x1078, 0x7233, 0x88ff,
-+ 0x00c0, 0x72ec, 0x0c7f, 0x0078, 0x7257, 0x2c78, 0x600c, 0x2060,
-+ 0x0078, 0x7257, 0xa006, 0x127f, 0x007f, 0x067f, 0x077f, 0x0c7f,
-+ 0x0d7f, 0x0e7f, 0x0f7f, 0x007c, 0x6017, 0x0000, 0x0c7f, 0xa8c5,
-+ 0x0001, 0x0078, 0x72e3, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x067e,
-+ 0x027e, 0x007e, 0x127e, 0x2091, 0x8000, 0x2071, 0xa8b1, 0x7638,
-+ 0x2660, 0x2678, 0x8cff, 0x0040, 0x7367, 0x601c, 0xa086, 0x0006,
-+ 0x00c0, 0x7362, 0x87ff, 0x0040, 0x7313, 0x2700, 0xac06, 0x00c0,
-+ 0x7362, 0x0078, 0x731e, 0x6018, 0xa206, 0x00c0, 0x7362, 0x85ff,
-+ 0x0040, 0x731e, 0x6020, 0xa106, 0x00c0, 0x7362, 0x703c, 0xac06,
-+ 0x00c0, 0x7332, 0x037e, 0x2019, 0x0001, 0x1078, 0x7058, 0x7033,
-+ 0x0000, 0x703f, 0x0000, 0x7043, 0x0000, 0x7047, 0x0000, 0x704b,
-+ 0x0000, 0x037f, 0x7038, 0xac36, 0x00c0, 0x7338, 0x660c, 0x763a,
-+ 0x7034, 0xac36, 0x00c0, 0x7346, 0x2c00, 0xaf36, 0x0040, 0x7344,
-+ 0x2f00, 0x7036, 0x0078, 0x7346, 0x7037, 0x0000, 0x660c, 0x067e,
-+ 0x2c00, 0xaf06, 0x0040, 0x734f, 0x7e0e, 0x0078, 0x7350, 0x2678,
-+ 0x600f, 0x0000, 0x6010, 0x2068, 0x1078, 0x8d06, 0x0040, 0x735a,
-+ 0x1078, 0xa1ca, 0x1078, 0x8ec6, 0x87ff, 0x00c0, 0x7371, 0x0c7f,
-+ 0x0078, 0x7302, 0x2c78, 0x600c, 0x2060, 0x0078, 0x7302, 0xa006,
-+ 0x127f, 0x007f, 0x027f, 0x067f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f,
-+ 0x007c, 0x6017, 0x0000, 0x0c7f, 0xa7bd, 0x0001, 0x0078, 0x7368,
-+ 0x0e7e, 0x2071, 0xa8b1, 0x2001, 0xa600, 0x2004, 0xa086, 0x0002,
-+ 0x00c0, 0x7386, 0x7007, 0x0005, 0x0078, 0x7388, 0x7007, 0x0000,
-+ 0x0e7f, 0x007c, 0x0f7e, 0x0e7e, 0x0c7e, 0x067e, 0x027e, 0x007e,
-+ 0x127e, 0x2091, 0x8000, 0x2071, 0xa8b1, 0x2c10, 0x7638, 0x2660,
-+ 0x2678, 0x8cff, 0x0040, 0x73c8, 0x2200, 0xac06, 0x00c0, 0x73c3,
-+ 0x7038, 0xac36, 0x00c0, 0x73a6, 0x660c, 0x763a, 0x7034, 0xac36,
-+ 0x00c0, 0x73b4, 0x2c00, 0xaf36, 0x0040, 0x73b2, 0x2f00, 0x7036,
-+ 0x0078, 0x73b4, 0x7037, 0x0000, 0x660c, 0x2c00, 0xaf06, 0x0040,
-+ 0x73bc, 0x7e0e, 0x0078, 0x73bd, 0x2678, 0x600f, 0x0000, 0xa085,
-+ 0x0001, 0x0078, 0x73c8, 0x2c78, 0x600c, 0x2060, 0x0078, 0x7399,
-+ 0x127f, 0x007f, 0x027f, 0x067f, 0x0c7f, 0x0e7f, 0x0f7f, 0x007c,
-+ 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x067e, 0x007e, 0x127e, 0x2091,
-+ 0x8000, 0x2071, 0xa8b1, 0x760c, 0x2660, 0x2678, 0x8cff, 0x0040,
-+ 0x7469, 0x6018, 0xa080, 0x0028, 0x2004, 0xa206, 0x00c0, 0x7464,
-+ 0x7024, 0xac06, 0x00c0, 0x740f, 0x2069, 0x0100, 0x68c0, 0xa005,
-+ 0x0040, 0x743d, 0x1078, 0x6e0f, 0x68c3, 0x0000, 0x1078, 0x7378,
-+ 0x7027, 0x0000, 0x037e, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000,
-+ 0x0040, 0x7406, 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100,
-+ 0x6824, 0xd084, 0x0040, 0x740e, 0x6827, 0x0001, 0x037f, 0x700c,
-+ 0xac36, 0x00c0, 0x7415, 0x660c, 0x760e, 0x7008, 0xac36, 0x00c0,
-+ 0x7423, 0x2c00, 0xaf36, 0x0040, 0x7421, 0x2f00, 0x700a, 0x0078,
-+ 0x7423, 0x700b, 0x0000, 0x660c, 0x067e, 0x2c00, 0xaf06, 0x0040,
-+ 0x742c, 0x7e0e, 0x0078, 0x742d, 0x2678, 0x600f, 0x0000, 0x1078,
-+ 0x8eec, 0x00c0, 0x7441, 0x1078, 0x28a6, 0x1078, 0x8f00, 0x00c0,
-+ 0x745d, 0x1078, 0x7c83, 0x0078, 0x745d, 0x1078, 0x7378, 0x0078,
-+ 0x740f, 0x1078, 0x8f00, 0x00c0, 0x7449, 0x1078, 0x7c83, 0x0078,
-+ 0x745d, 0x6010, 0x2068, 0x1078, 0x8d06, 0x0040, 0x745d, 0x601c,
-+ 0xa086, 0x0003, 0x00c0, 0x7471, 0x6837, 0x0103, 0x6b4a, 0x6847,
-+ 0x0000, 0x1078, 0x4a73, 0x1078, 0x8eb9, 0x1078, 0x8ec6, 0x1078,
-+ 0x7233, 0x0c7f, 0x0078, 0x73de, 0x2c78, 0x600c, 0x2060, 0x0078,
-+ 0x73de, 0x127f, 0x007f, 0x067f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f,
-+ 0x007c, 0x601c, 0xa086, 0x0006, 0x00c0, 0x745d, 0x1078, 0xa1ca,
-+ 0x0078, 0x745d, 0x037e, 0x157e, 0x137e, 0x147e, 0x3908, 0xa006,
-+ 0xa190, 0x0020, 0x221c, 0xa39e, 0x2676, 0x00c0, 0x748b, 0x8210,
-+ 0x8000, 0x0078, 0x7482, 0xa005, 0x0040, 0x7497, 0x20a9, 0x0020,
-+ 0x2198, 0x8211, 0xa282, 0x0020, 0x20c8, 0x20a0, 0x53a3, 0x147f,
-+ 0x137f, 0x157f, 0x037f, 0x007c, 0x0d7e, 0x20a1, 0x020b, 0x1078,
-+ 0x67c2, 0x20a3, 0x0200, 0x20a3, 0x0014, 0x60c3, 0x0014, 0x20a3,
-+ 0x0000, 0x20a3, 0x0000, 0x2099, 0xa8a5, 0x20a9, 0x0004, 0x53a6,
-+ 0x20a3, 0x0004, 0x20a3, 0x7878, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+ 0x1078, 0x6dfb, 0x0d7f, 0x007c, 0x20a1, 0x020b, 0x1078, 0x67c2,
-+ 0x20a3, 0x0214, 0x20a3, 0x0018, 0x20a3, 0x0800, 0x7810, 0xa084,
-+ 0xff00, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+ 0x20a3, 0x0000, 0x7810, 0xa084, 0x00ff, 0x20a2, 0x7828, 0x20a2,
-+ 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0018, 0x1078, 0x6dfb,
-+ 0x007c, 0x0d7e, 0x017e, 0x2f68, 0x2009, 0x0035, 0x1078, 0x91bc,
-+ 0x00c0, 0x7551, 0x20a1, 0x020b, 0x1078, 0x6731, 0x20a3, 0x1300,
-+ 0x20a3, 0x0000, 0x7828, 0x2068, 0x681c, 0xa086, 0x0003, 0x0040,
-+ 0x752d, 0x7818, 0xa080, 0x0028, 0x2014, 0xa286, 0x007e, 0x00c0,
-+ 0x7507, 0x20a3, 0x00ff, 0x20a3, 0xfffe, 0x0078, 0x7542, 0xa286,
-+ 0x007f, 0x00c0, 0x7511, 0x20a3, 0x00ff, 0x20a3, 0xfffd, 0x0078,
-+ 0x7542, 0xd2bc, 0x0040, 0x7527, 0xa286, 0x0080, 0x00c0, 0x751e,
-+ 0x20a3, 0x00ff, 0x20a3, 0xfffc, 0x0078, 0x7542, 0xa2e8, 0xa735,
-+ 0x2d6c, 0x6810, 0x20a2, 0x6814, 0x20a2, 0x0078, 0x7542, 0x20a3,
-+ 0x0000, 0x6098, 0x20a2, 0x0078, 0x7542, 0x7818, 0xa080, 0x0028,
-+ 0x2004, 0xa082, 0x007e, 0x0048, 0x753e, 0x0d7e, 0x2069, 0xa61b,
-+ 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x7542, 0x20a3, 0x0000,
-+ 0x6030, 0x20a2, 0x7834, 0x20a2, 0x7838, 0x20a2, 0x20a3, 0x0000,
-+ 0x20a3, 0x0000, 0x60c3, 0x000c, 0x1078, 0x6dfb, 0x017f, 0x0d7f,
-+ 0x007c, 0x7817, 0x0001, 0x7803, 0x0006, 0x017f, 0x0d7f, 0x007c,
-+ 0x0d7e, 0x027e, 0x7928, 0x2168, 0x691c, 0xa186, 0x0006, 0x0040,
-+ 0x757a, 0xa186, 0x0003, 0x0040, 0x75d5, 0xa186, 0x0005, 0x0040,
-+ 0x75b8, 0xa186, 0x0004, 0x0040, 0x75a8, 0xa186, 0x0008, 0x0040,
-+ 0x75c2, 0x7807, 0x0037, 0x7813, 0x1700, 0x1078, 0x7640, 0x027f,
-+ 0x0d7f, 0x007c, 0x1078, 0x75fd, 0x2009, 0x4000, 0x6800, 0x0079,
-+ 0x7581, 0x7594, 0x75a2, 0x7596, 0x75a2, 0x759d, 0x7594, 0x7594,
-+ 0x75a2, 0x75a2, 0x75a2, 0x75a2, 0x7594, 0x7594, 0x7594, 0x7594,
-+ 0x7594, 0x75a2, 0x7594, 0x75a2, 0x1078, 0x1332, 0x6824, 0xd0e4,
-+ 0x0040, 0x759d, 0xd0cc, 0x0040, 0x75a0, 0xa00e, 0x0078, 0x75a2,
-+ 0x2009, 0x2000, 0x6828, 0x20a2, 0x682c, 0x20a2, 0x0078, 0x75f3,
-+ 0x1078, 0x75fd, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x2009, 0x4000,
-+ 0x6a00, 0xa286, 0x0002, 0x00c0, 0x75b6, 0xa00e, 0x0078, 0x75f3,
-+ 0x1078, 0x75fd, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x2009, 0x4000,
-+ 0x0078, 0x75f3, 0x1078, 0x75fd, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+ 0x2009, 0x4000, 0xa286, 0x0005, 0x0040, 0x75d2, 0xa286, 0x0002,
-+ 0x00c0, 0x75d3, 0xa00e, 0x0078, 0x75f3, 0x1078, 0x75fd, 0x6810,
-+ 0x2068, 0x697c, 0x6810, 0xa112, 0x6980, 0x6814, 0xa103, 0x20a2,
-+ 0x22a2, 0x7928, 0xa180, 0x0000, 0x2004, 0xa08e, 0x0002, 0x0040,
-+ 0x75f1, 0xa08e, 0x0004, 0x0040, 0x75f1, 0x2009, 0x4000, 0x0078,
-+ 0x75f3, 0x2009, 0x0000, 0x21a2, 0x20a3, 0x0000, 0x60c3, 0x0018,
-+ 0x1078, 0x6dfb, 0x027f, 0x0d7f, 0x007c, 0x037e, 0x047e, 0x057e,
-+ 0x067e, 0x20a1, 0x020b, 0x1078, 0x67c2, 0xa006, 0x20a3, 0x0200,
-+ 0x20a2, 0x7934, 0x21a2, 0x7938, 0x21a2, 0x7818, 0xa080, 0x0028,
-+ 0x2004, 0xa092, 0x007e, 0x0048, 0x7623, 0x0d7e, 0x2069, 0xa61b,
-+ 0x2d2c, 0x8d68, 0x2d34, 0xa0e8, 0xa735, 0x2d6c, 0x6b10, 0x6c14,
-+ 0x0d7f, 0x0078, 0x7629, 0x2019, 0x0000, 0x6498, 0x2029, 0x0000,
-+ 0x6630, 0x7828, 0xa080, 0x0007, 0x2004, 0xa086, 0x0003, 0x00c0,
-+ 0x7637, 0x25a2, 0x26a2, 0x23a2, 0x24a2, 0x0078, 0x763b, 0x23a2,
-+ 0x24a2, 0x25a2, 0x26a2, 0x067f, 0x057f, 0x047f, 0x037f, 0x007c,
-+ 0x20a1, 0x020b, 0x1078, 0x67c2, 0x20a3, 0x0100, 0x20a3, 0x0000,
-+ 0x20a3, 0x0009, 0x7810, 0x20a2, 0x60c3, 0x0008, 0x1078, 0x6dfb,
-+ 0x007c, 0x20a1, 0x020b, 0x1078, 0x6728, 0x20a3, 0x1400, 0x20a3,
-+ 0x0000, 0x7834, 0x20a2, 0x7838, 0x20a2, 0x7828, 0x20a2, 0x782c,
-+ 0x20a2, 0x7830, 0xa084, 0x00ff, 0x8007, 0x20a2, 0x20a3, 0x0000,
-+ 0x60c3, 0x0010, 0x1078, 0x6dfb, 0x007c, 0x20a1, 0x020b, 0x1078,
-+ 0x67b9, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x7828, 0x20a2, 0x7810,
-+ 0x20a2, 0x60c3, 0x0008, 0x1078, 0x6dfb, 0x007c, 0x147e, 0x20a1,
-+ 0x020b, 0x1078, 0x7689, 0x60c3, 0x0000, 0x1078, 0x6dfb, 0x147f,
-+ 0x007c, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028,
-+ 0x2004, 0xd0bc, 0x0040, 0x76a6, 0x0d7e, 0xa0e8, 0xa735, 0x2d6c,
-+ 0x6810, 0xa085, 0x0300, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xa61b,
-+ 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x76ae, 0x20a3, 0x0300,
-+ 0x6298, 0x22a2, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, 0x0819,
-+ 0x20a3, 0x0000, 0x1078, 0x6dea, 0x22a2, 0x20a3, 0x0000, 0x2fa2,
-+ 0x7a08, 0x22a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x007c, 0x2061,
-+ 0xad00, 0x2a70, 0x7064, 0x704a, 0x704f, 0xad00, 0x007c, 0x0e7e,
-+ 0x127e, 0x2071, 0xa600, 0x2091, 0x8000, 0x7548, 0xa582, 0x0010,
-+ 0x0048, 0x76f9, 0x704c, 0x2060, 0x6000, 0xa086, 0x0000, 0x0040,
-+ 0x76e5, 0xace0, 0x0010, 0x7058, 0xac02, 0x00c8, 0x76e1, 0x0078,
-+ 0x76d4, 0x2061, 0xad00, 0x0078, 0x76d4, 0x6003, 0x0008, 0x8529,
-+ 0x754a, 0xaca8, 0x0010, 0x7058, 0xa502, 0x00c8, 0x76f5, 0x754e,
-+ 0xa085, 0x0001, 0x127f, 0x0e7f, 0x007c, 0x704f, 0xad00, 0x0078,
-+ 0x76f0, 0xa006, 0x0078, 0x76f2, 0x0e7e, 0x2071, 0xa600, 0x7548,
-+ 0xa582, 0x0010, 0x0048, 0x772a, 0x704c, 0x2060, 0x6000, 0xa086,
-+ 0x0000, 0x0040, 0x7717, 0xace0, 0x0010, 0x7058, 0xac02, 0x00c8,
-+ 0x7713, 0x0078, 0x7706, 0x2061, 0xad00, 0x0078, 0x7706, 0x6003,
-+ 0x0008, 0x8529, 0x754a, 0xaca8, 0x0010, 0x7058, 0xa502, 0x00c8,
-+ 0x7726, 0x754e, 0xa085, 0x0001, 0x0e7f, 0x007c, 0x704f, 0xad00,
-+ 0x0078, 0x7722, 0xa006, 0x0078, 0x7724, 0xac82, 0xad00, 0x1048,
-+ 0x1332, 0x2001, 0xa616, 0x2004, 0xac02, 0x10c8, 0x1332, 0xa006,
-+ 0x6006, 0x600a, 0x600e, 0x6012, 0x6016, 0x601a, 0x601f, 0x0000,
-+ 0x6003, 0x0000, 0x6022, 0x6026, 0x602a, 0x602e, 0x6032, 0x6036,
-+ 0x603a, 0x603e, 0x2061, 0xa600, 0x6048, 0x8000, 0x604a, 0xa086,
-+ 0x0001, 0x0040, 0x7754, 0x007c, 0x127e, 0x2091, 0x8000, 0x1078,
-+ 0x62d1, 0x127f, 0x0078, 0x7753, 0x601c, 0xa084, 0x000f, 0x0079,
-+ 0x7761, 0x776a, 0x777b, 0x7797, 0x77b3, 0x920e, 0x922a, 0x9246,
-+ 0x776a, 0x777b, 0xa186, 0x0013, 0x00c0, 0x7773, 0x1078, 0x61cd,
-+ 0x1078, 0x62d1, 0x007c, 0xa18e, 0x0047, 0x00c0, 0x777a, 0xa016,
-+ 0x1078, 0x15fa, 0x007c, 0x067e, 0x6000, 0xa0b2, 0x0010, 0x10c8,
-+ 0x1332, 0x1079, 0x7785, 0x067f, 0x007c, 0x7795, 0x7b00, 0x7cb2,
-+ 0x7795, 0x7d36, 0x77cf, 0x7795, 0x7795, 0x7a92, 0x80f6, 0x7795,
-+ 0x7795, 0x7795, 0x7795, 0x7795, 0x7795, 0x1078, 0x1332, 0x067e,
-+ 0x6000, 0xa0b2, 0x0010, 0x10c8, 0x1332, 0x1079, 0x77a1, 0x067f,
-+ 0x007c, 0x77b1, 0x87c3, 0x77b1, 0x77b1, 0x77b1, 0x77b1, 0x77b1,
-+ 0x77b1, 0x8766, 0x8951, 0x77b1, 0x87f3, 0x8879, 0x87f3, 0x8879,
-+ 0x77b1, 0x1078, 0x1332, 0x067e, 0x6000, 0xa0b2, 0x0010, 0x10c8,
-+ 0x1332, 0x1079, 0x77bd, 0x067f, 0x007c, 0x77cd, 0x813d, 0x820e,
-+ 0x8368, 0x84e4, 0x77cd, 0x77cd, 0x77cd, 0x8116, 0x870e, 0x8712,
-+ 0x77cd, 0x77cd, 0x77cd, 0x77cd, 0x8742, 0x1078, 0x1332, 0xa1b6,
-+ 0x0015, 0x00c0, 0x77d7, 0x1078, 0x772d, 0x0078, 0x77dd, 0xa1b6,
-+ 0x0016, 0x10c0, 0x1332, 0x1078, 0x772d, 0x007c, 0x20a9, 0x000e,
-+ 0x2e98, 0x6010, 0x20a0, 0x53a3, 0x20a9, 0x0006, 0x3310, 0x3420,
-+ 0x9398, 0x94a0, 0x3318, 0x3428, 0x222e, 0x2326, 0xa290, 0x0002,
-+ 0xa5a8, 0x0002, 0xa398, 0x0002, 0xa4a0, 0x0002, 0x00f0, 0x77ec,
-+ 0x0e7e, 0x1078, 0x8d06, 0x0040, 0x7803, 0x6010, 0x2070, 0x7007,
-+ 0x0000, 0x7037, 0x0103, 0x0e7f, 0x1078, 0x772d, 0x007c, 0x0d7e,
-+ 0x037e, 0x7330, 0xa386, 0x0200, 0x00c0, 0x7814, 0x6018, 0x2068,
-+ 0x6813, 0x00ff, 0x6817, 0xfffd, 0x6010, 0xa005, 0x0040, 0x781e,
-+ 0x2068, 0x6807, 0x0000, 0x6837, 0x0103, 0x6b32, 0x1078, 0x772d,
-+ 0x037f, 0x0d7f, 0x007c, 0x017e, 0x20a9, 0x002a, 0xae80, 0x000c,
-+ 0x2098, 0x6010, 0xa080, 0x0002, 0x20a0, 0x53a3, 0x20a9, 0x002a,
-+ 0x6010, 0xa080, 0x0001, 0x2004, 0xa080, 0x0002, 0x20a0, 0x53a3,
-+ 0x0e7e, 0x6010, 0x2004, 0x2070, 0x7037, 0x0103, 0x0e7f, 0x1078,
-+ 0x772d, 0x017f, 0x007c, 0x0e7e, 0x0d7e, 0x603f, 0x0000, 0x2c68,
-+ 0x017e, 0x2009, 0x0035, 0x1078, 0x91bc, 0x017f, 0x00c0, 0x785f,
-+ 0x027e, 0x6228, 0x2268, 0x027f, 0x2071, 0xab8c, 0x6b1c, 0xa386,
-+ 0x0003, 0x0040, 0x7863, 0xa386, 0x0006, 0x0040, 0x7867, 0x1078,
-+ 0x772d, 0x0078, 0x7869, 0x1078, 0x786c, 0x0078, 0x7869, 0x1078,
-+ 0x7938, 0x0d7f, 0x0e7f, 0x007c, 0x0f7e, 0x6810, 0x2078, 0xa186,
-+ 0x0015, 0x0040, 0x791d, 0xa18e, 0x0016, 0x00c0, 0x7936, 0x700c,
-+ 0xa08c, 0xff00, 0xa186, 0x1700, 0x0040, 0x7882, 0xa186, 0x0300,
-+ 0x00c0, 0x78f8, 0x8fff, 0x00c0, 0x788c, 0x6800, 0xa086, 0x000f,
-+ 0x0040, 0x78db, 0x0078, 0x7934, 0x6808, 0xa086, 0xffff, 0x00c0,
-+ 0x7921, 0x784c, 0xa084, 0x0060, 0xa086, 0x0020, 0x00c0, 0x78a2,
-+ 0x797c, 0x7810, 0xa106, 0x00c0, 0x7921, 0x7980, 0x7814, 0xa106,
-+ 0x00c0, 0x7921, 0x1078, 0x8eb9, 0x6830, 0x7852, 0x784c, 0xc0dc,
-+ 0xc0f4, 0xc0d4, 0x784e, 0x027e, 0xa00e, 0x6a14, 0x2001, 0x000a,
-+ 0x1078, 0x5c1c, 0x7854, 0xa20a, 0x0048, 0x78b7, 0x8011, 0x7a56,
-+ 0x82ff, 0x027f, 0x00c0, 0x78c3, 0x0c7e, 0x2d60, 0x1078, 0x8ae0,
-+ 0x0c7f, 0x0078, 0x7934, 0x0c7e, 0x0d7e, 0x2f68, 0x6838, 0xd0fc,
-+ 0x00c0, 0x78ce, 0x1078, 0x4353, 0x0078, 0x78d0, 0x1078, 0x4431,
-+ 0x0d7f, 0x0c7f, 0x00c0, 0x7921, 0x0c7e, 0x2d60, 0x1078, 0x772d,
-+ 0x0c7f, 0x0078, 0x7934, 0x0c7e, 0x1078, 0x9187, 0x0040, 0x78f1,
-+ 0x6013, 0x0000, 0x6818, 0x601a, 0x601f, 0x0003, 0x6904, 0x0c7e,
-+ 0x2d60, 0x1078, 0x772d, 0x0c7f, 0x1078, 0x775c, 0x0c7f, 0x0078,
-+ 0x7934, 0x2001, 0xa8a4, 0x2004, 0x683e, 0x0c7f, 0x0078, 0x7934,
-+ 0x7008, 0xa086, 0x000b, 0x00c0, 0x7912, 0x6018, 0x200c, 0xc1bc,
-+ 0x2102, 0x0c7e, 0x2d60, 0x7853, 0x0003, 0x6007, 0x0085, 0x6003,
-+ 0x000b, 0x601f, 0x0002, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0c7f,
-+ 0x0078, 0x7934, 0x700c, 0xa086, 0x2a00, 0x00c0, 0x7921, 0x2001,
-+ 0xa8a4, 0x2004, 0x683e, 0x0078, 0x7934, 0x1078, 0x7953, 0x0078,
-+ 0x7936, 0x8fff, 0x1040, 0x1332, 0x0c7e, 0x0d7e, 0x2d60, 0x2f68,
-+ 0x6837, 0x0103, 0x684b, 0x0003, 0x1078, 0x89cf, 0x1078, 0x8eb9,
-+ 0x1078, 0x8ec6, 0x0d7f, 0x0c7f, 0x1078, 0x772d, 0x0f7f, 0x007c,
-+ 0xa186, 0x0015, 0x00c0, 0x7942, 0x2001, 0xa8a4, 0x2004, 0x683e,
-+ 0x0078, 0x7950, 0xa18e, 0x0016, 0x00c0, 0x7952, 0x0c7e, 0x2d00,
-+ 0x2060, 0x1078, 0xa495, 0x1078, 0x5bc1, 0x1078, 0x772d, 0x0c7f,
-+ 0x1078, 0x772d, 0x007c, 0x027e, 0x037e, 0x047e, 0x7228, 0x7c80,
-+ 0x7b7c, 0xd2f4, 0x0040, 0x7962, 0x2001, 0xa8a4, 0x2004, 0x683e,
-+ 0x0078, 0x79c6, 0x0c7e, 0x2d60, 0x1078, 0x89f3, 0x0c7f, 0x6804,
-+ 0xa086, 0x0050, 0x00c0, 0x797a, 0x0c7e, 0x2d00, 0x2060, 0x6003,
-+ 0x0001, 0x6007, 0x0050, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0c7f,
-+ 0x0078, 0x79c6, 0x6800, 0xa086, 0x000f, 0x0040, 0x799c, 0x8fff,
-+ 0x1040, 0x1332, 0x6824, 0xd0dc, 0x00c0, 0x799c, 0x6800, 0xa086,
-+ 0x0004, 0x00c0, 0x79a1, 0x784c, 0xd0ac, 0x0040, 0x79a1, 0x784c,
-+ 0xc0dc, 0xc0f4, 0x784e, 0x7850, 0xc0f4, 0xc0fc, 0x7852, 0x2001,
-+ 0x0001, 0x682e, 0x0078, 0x79c0, 0x2001, 0x0007, 0x682e, 0x0078,
-+ 0x79c0, 0x784c, 0xd0b4, 0x00c0, 0x79ae, 0xd0ac, 0x0040, 0x799c,
-+ 0x784c, 0xd0f4, 0x00c0, 0x799c, 0x0078, 0x798f, 0xd2ec, 0x00c0,
-+ 0x799c, 0x7024, 0xa306, 0x00c0, 0x79b9, 0x7020, 0xa406, 0x0040,
-+ 0x799c, 0x7020, 0x6836, 0x7024, 0x683a, 0x2001, 0x0005, 0x682e,
-+ 0x1078, 0x8ff0, 0x1078, 0x62d1, 0x0078, 0x79c8, 0x1078, 0x772d,
-+ 0x047f, 0x037f, 0x027f, 0x007c, 0x0e7e, 0x0d7e, 0x027e, 0x6034,
-+ 0x2068, 0x6a1c, 0xa286, 0x0007, 0x0040, 0x7a35, 0xa286, 0x0002,
-+ 0x0040, 0x7a35, 0xa286, 0x0000, 0x0040, 0x7a35, 0x6808, 0x6338,
-+ 0xa306, 0x00c0, 0x7a35, 0x2071, 0xab8c, 0xa186, 0x0015, 0x0040,
-+ 0x7a2f, 0xa18e, 0x0016, 0x00c0, 0x7a02, 0x6030, 0xa084, 0x00ff,
-+ 0xa086, 0x0001, 0x00c0, 0x7a02, 0x700c, 0xa086, 0x2a00, 0x00c0,
-+ 0x7a02, 0x6034, 0xa080, 0x0009, 0x200c, 0xc1dd, 0xc1f5, 0x2102,
-+ 0x0078, 0x7a2f, 0x0c7e, 0x6034, 0x2060, 0x6104, 0xa186, 0x004b,
-+ 0x0040, 0x7a22, 0xa186, 0x004c, 0x0040, 0x7a22, 0xa186, 0x004d,
-+ 0x0040, 0x7a22, 0xa186, 0x004e, 0x0040, 0x7a22, 0xa186, 0x0052,
-+ 0x0040, 0x7a22, 0x6010, 0x2068, 0x1078, 0x8d06, 0x1040, 0x1332,
-+ 0x6853, 0x0003, 0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0002,
-+ 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0c7f, 0x0078, 0x7a35, 0x6034,
-+ 0x2068, 0x2001, 0xa8a4, 0x2004, 0x683e, 0x1078, 0x772d, 0x027f,
-+ 0x0d7f, 0x0e7f, 0x007c, 0x0d7e, 0x20a9, 0x000e, 0x2e98, 0x6010,
-+ 0x20a0, 0x53a3, 0xa1b6, 0x0015, 0x00c0, 0x7a73, 0x6018, 0x2068,
-+ 0x157e, 0x037e, 0x027e, 0xae90, 0x000c, 0xa290, 0x0004, 0x20a9,
-+ 0x0004, 0xad98, 0x000a, 0x1078, 0x80de, 0x027f, 0x037f, 0x157f,
-+ 0x00c0, 0x7a76, 0x157e, 0x037e, 0x027e, 0xae90, 0x000c, 0xa290,
-+ 0x0008, 0x20a9, 0x0004, 0xad98, 0x0006, 0x1078, 0x80de, 0x027f,
-+ 0x037f, 0x157f, 0x00c0, 0x7a76, 0x7038, 0x680a, 0x703c, 0x680e,
-+ 0x6800, 0xc08d, 0x6802, 0x0d7f, 0x0078, 0x77f8, 0x1078, 0x2880,
-+ 0x0c7e, 0x1078, 0x76c7, 0x2f00, 0x601a, 0x6013, 0x0000, 0x601f,
-+ 0x0001, 0x6007, 0x0001, 0x6003, 0x0001, 0x2001, 0x0007, 0x1078,
-+ 0x4502, 0x1078, 0x4535, 0x1078, 0x5dd7, 0x1078, 0x62d1, 0x0c7f,
-+ 0x0078, 0x7a73, 0x2100, 0xa1b2, 0x0044, 0x10c8, 0x1332, 0xa1b2,
-+ 0x0040, 0x00c8, 0x7af7, 0x0079, 0x7a9d, 0x7aeb, 0x7adf, 0x7aeb,
-+ 0x7aeb, 0x7aeb, 0x7aeb, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add,
-+ 0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add,
-+ 0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add,
-+ 0x7add, 0x7add, 0x7add, 0x7add, 0x7aeb, 0x7add, 0x7aeb, 0x7aeb,
-+ 0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7aeb, 0x7add, 0x7add,
-+ 0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7aeb,
-+ 0x7aeb, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add,
-+ 0x7add, 0x7add, 0x7aeb, 0x7add, 0x7add, 0x1078, 0x1332, 0x6003,
-+ 0x0001, 0x6106, 0x1078, 0x5dd7, 0x127e, 0x2091, 0x8000, 0x1078,
-+ 0x62d1, 0x127f, 0x007c, 0x6003, 0x0001, 0x6106, 0x1078, 0x5dd7,
-+ 0x127e, 0x2091, 0x8000, 0x1078, 0x62d1, 0x127f, 0x007c, 0x2600,
-+ 0x0079, 0x7afa, 0x7afe, 0x7afe, 0x7afe, 0x7aeb, 0x1078, 0x1332,
-+ 0x6004, 0xa0b2, 0x0044, 0x10c8, 0x1332, 0xa1b6, 0x0013, 0x00c0,
-+ 0x7b10, 0xa0b2, 0x0040, 0x00c8, 0x7c79, 0x2008, 0x0079, 0x7bbf,
-+ 0xa1b6, 0x0027, 0x00c0, 0x7b7c, 0x1078, 0x61cd, 0x6004, 0x1078,
-+ 0x8eec, 0x0040, 0x7b2d, 0x1078, 0x8f00, 0x0040, 0x7b74, 0xa08e,
-+ 0x0021, 0x0040, 0x7b78, 0xa08e, 0x0022, 0x0040, 0x7b74, 0xa08e,
-+ 0x003d, 0x0040, 0x7b78, 0x0078, 0x7b6f, 0x1078, 0x28a6, 0x2001,
-+ 0x0007, 0x1078, 0x4502, 0x6018, 0xa080, 0x0028, 0x200c, 0x1078,
-+ 0x7c83, 0xa186, 0x007e, 0x00c0, 0x7b42, 0x2001, 0xa633, 0x2014,
-+ 0xc285, 0x2202, 0x017e, 0x027e, 0x037e, 0x2110, 0x027e, 0x2019,
-+ 0x0028, 0x1078, 0x73d0, 0x027f, 0x1078, 0xa4f1, 0x037f, 0x027f,
-+ 0x017f, 0x017e, 0x027e, 0x037e, 0x2110, 0x2019, 0x0028, 0x1078,
-+ 0x5f01, 0x077e, 0x2039, 0x0000, 0x1078, 0x5e0a, 0x0c7e, 0x6018,
-+ 0xa065, 0x0040, 0x7b65, 0x1078, 0x47e9, 0x0c7f, 0x2c08, 0x1078,
-+ 0x9f8b, 0x077f, 0x037f, 0x027f, 0x017f, 0x1078, 0x457f, 0x1078,
-+ 0x772d, 0x1078, 0x62d1, 0x007c, 0x1078, 0x7c83, 0x0078, 0x7b6f,
-+ 0x1078, 0x7ca6, 0x0078, 0x7b6f, 0xa186, 0x0014, 0x00c0, 0x7b73,
-+ 0x1078, 0x61cd, 0x1078, 0x2880, 0x1078, 0x8eec, 0x00c0, 0x7b9b,
-+ 0x1078, 0x28a6, 0x6018, 0xa080, 0x0028, 0x200c, 0x1078, 0x7c83,
-+ 0xa186, 0x007e, 0x00c0, 0x7b99, 0x2001, 0xa633, 0x200c, 0xc185,
-+ 0x2102, 0x0078, 0x7b6f, 0x1078, 0x8f00, 0x00c0, 0x7ba3, 0x1078,
-+ 0x7c83, 0x0078, 0x7b6f, 0x6004, 0xa08e, 0x0032, 0x00c0, 0x7bb4,
-+ 0x0e7e, 0x0f7e, 0x2071, 0xa682, 0x2079, 0x0000, 0x1078, 0x2bd7,
-+ 0x0f7f, 0x0e7f, 0x0078, 0x7b6f, 0x6004, 0xa08e, 0x0021, 0x0040,
-+ 0x7b9f, 0xa08e, 0x0022, 0x1040, 0x7c83, 0x0078, 0x7b6f, 0x7c01,
-+ 0x7c03, 0x7c07, 0x7c0b, 0x7c0f, 0x7c13, 0x7bff, 0x7bff, 0x7bff,
-+ 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff,
-+ 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff,
-+ 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7c17, 0x7c29, 0x7bff,
-+ 0x7c2b, 0x7c29, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7c29,
-+ 0x7c29, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff,
-+ 0x7bff, 0x7c5c, 0x7c29, 0x7bff, 0x7c23, 0x7bff, 0x7bff, 0x7bff,
-+ 0x7c25, 0x7bff, 0x7bff, 0x7bff, 0x7c29, 0x7bff, 0x7bff, 0x1078,
-+ 0x1332, 0x0078, 0x7c29, 0x2001, 0x000b, 0x0078, 0x7c36, 0x2001,
-+ 0x0003, 0x0078, 0x7c36, 0x2001, 0x0005, 0x0078, 0x7c36, 0x2001,
-+ 0x0001, 0x0078, 0x7c36, 0x2001, 0x0009, 0x0078, 0x7c36, 0x1078,
-+ 0x61cd, 0x6003, 0x0005, 0x2001, 0xa8a4, 0x2004, 0x603e, 0x1078,
-+ 0x62d1, 0x0078, 0x7c35, 0x0078, 0x7c29, 0x0078, 0x7c29, 0x1078,
-+ 0x4502, 0x0078, 0x7c6e, 0x1078, 0x61cd, 0x6003, 0x0004, 0x2001,
-+ 0xa8a2, 0x2004, 0x6016, 0x1078, 0x62d1, 0x007c, 0x1078, 0x4502,
-+ 0x1078, 0x61cd, 0x2001, 0xa8a4, 0x2004, 0x603e, 0x6003, 0x0002,
-+ 0x037e, 0x2019, 0xa65d, 0x2304, 0xa084, 0xff00, 0x00c0, 0x7c4d,
-+ 0x2019, 0xa8a2, 0x231c, 0x0078, 0x7c56, 0x8007, 0xa09a, 0x0004,
-+ 0x0048, 0x7c48, 0x8003, 0x801b, 0x831b, 0xa318, 0x6316, 0x037f,
-+ 0x1078, 0x62d1, 0x0078, 0x7c35, 0x0e7e, 0x0f7e, 0x2071, 0xa682,
-+ 0x2079, 0x0000, 0x1078, 0x2bd7, 0x0f7f, 0x0e7f, 0x1078, 0x61cd,
-+ 0x1078, 0x772d, 0x1078, 0x62d1, 0x0078, 0x7c35, 0x1078, 0x61cd,
-+ 0x6003, 0x0002, 0x2001, 0xa8a2, 0x2004, 0x6016, 0x1078, 0x62d1,
-+ 0x007c, 0x2600, 0x2008, 0x0079, 0x7c7d, 0x7c81, 0x7c81, 0x7c81,
-+ 0x7c6e, 0x1078, 0x1332, 0x0e7e, 0x1078, 0x8d06, 0x0040, 0x7c9f,
-+ 0x6010, 0x2070, 0x7038, 0xd0fc, 0x0040, 0x7c9f, 0x7007, 0x0000,
-+ 0x017e, 0x6004, 0xa08e, 0x0021, 0x0040, 0x7ca1, 0xa08e, 0x003d,
-+ 0x0040, 0x7ca1, 0x017f, 0x7037, 0x0103, 0x7033, 0x0100, 0x0e7f,
-+ 0x007c, 0x017f, 0x1078, 0x7ca6, 0x0078, 0x7c9f, 0x0e7e, 0xacf0,
-+ 0x0004, 0x2e74, 0x7000, 0x2070, 0x7037, 0x0103, 0x7023, 0x8001,
-+ 0x0e7f, 0x007c, 0x0d7e, 0x6618, 0x2668, 0x6804, 0xa084, 0x00ff,
-+ 0x0d7f, 0xa0b2, 0x000c, 0x10c8, 0x1332, 0x6604, 0xa6b6, 0x0043,
-+ 0x00c0, 0x7cc6, 0x1078, 0x9134, 0x0078, 0x7d25, 0x6604, 0xa6b6,
-+ 0x0033, 0x00c0, 0x7ccf, 0x1078, 0x90d8, 0x0078, 0x7d25, 0x6604,
-+ 0xa6b6, 0x0028, 0x00c0, 0x7cd8, 0x1078, 0x8f2f, 0x0078, 0x7d25,
-+ 0x6604, 0xa6b6, 0x0029, 0x00c0, 0x7ce1, 0x1078, 0x8f49, 0x0078,
-+ 0x7d25, 0x6604, 0xa6b6, 0x001f, 0x00c0, 0x7cea, 0x1078, 0x77de,
-+ 0x0078, 0x7d25, 0x6604, 0xa6b6, 0x0000, 0x00c0, 0x7cf3, 0x1078,
-+ 0x7a3b, 0x0078, 0x7d25, 0x6604, 0xa6b6, 0x0022, 0x00c0, 0x7cfc,
-+ 0x1078, 0x7807, 0x0078, 0x7d25, 0x6604, 0xa6b6, 0x0035, 0x00c0,
-+ 0x7d05, 0x1078, 0x7843, 0x0078, 0x7d25, 0x6604, 0xa6b6, 0x0039,
-+ 0x00c0, 0x7d0e, 0x1078, 0x79cc, 0x0078, 0x7d25, 0x6604, 0xa6b6,
-+ 0x003d, 0x00c0, 0x7d17, 0x1078, 0x7823, 0x0078, 0x7d25, 0xa1b6,
-+ 0x0015, 0x00c0, 0x7d1f, 0x1079, 0x7d2a, 0x0078, 0x7d25, 0xa1b6,
-+ 0x0016, 0x00c0, 0x7d26, 0x1079, 0x7e7f, 0x007c, 0x1078, 0x7773,
-+ 0x0078, 0x7d25, 0x7d4e, 0x7d51, 0x7d4e, 0x7d9c, 0x7d4e, 0x7e13,
-+ 0x7e8b, 0x7d4e, 0x7d4e, 0x7e57, 0x7d4e, 0x7e6d, 0xa1b6, 0x0048,
-+ 0x0040, 0x7d42, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10, 0x1078,
-+ 0x15fa, 0x007c, 0x0e7e, 0xacf0, 0x0004, 0x2e74, 0x7000, 0x2070,
-+ 0x7037, 0x0103, 0x0e7f, 0x1078, 0x772d, 0x007c, 0x0005, 0x0005,
-+ 0x007c, 0x0e7e, 0x2071, 0xa600, 0x7080, 0xa086, 0x0074, 0x00c0,
-+ 0x7d85, 0x1078, 0x9f5f, 0x00c0, 0x7d77, 0x0d7e, 0x6018, 0x2068,
-+ 0x7030, 0xd08c, 0x0040, 0x7d6a, 0x6800, 0xd0bc, 0x0040, 0x7d6a,
-+ 0xc0c5, 0x6802, 0x1078, 0x7d89, 0x0d7f, 0x2001, 0x0006, 0x1078,
-+ 0x4502, 0x1078, 0x28a6, 0x1078, 0x772d, 0x0078, 0x7d87, 0x2001,
-+ 0x000a, 0x1078, 0x4502, 0x1078, 0x28a6, 0x6003, 0x0001, 0x6007,
-+ 0x0001, 0x1078, 0x5dd7, 0x0078, 0x7d87, 0x1078, 0x7dff, 0x0e7f,
-+ 0x007c, 0x6800, 0xd084, 0x0040, 0x7d9b, 0x2001, 0x0000, 0x1078,
-+ 0x44ee, 0x2069, 0xa652, 0x6804, 0xd0a4, 0x0040, 0x7d9b, 0x2001,
-+ 0x0006, 0x1078, 0x4535, 0x007c, 0x0d7e, 0x2011, 0xa620, 0x2204,
-+ 0xa086, 0x0074, 0x00c0, 0x7dfb, 0x6018, 0x2068, 0x6aa0, 0xa286,
-+ 0x007e, 0x00c0, 0x7daf, 0x1078, 0x7f9b, 0x0078, 0x7dfd, 0x1078,
-+ 0x7f91, 0x6018, 0x2068, 0xa080, 0x0028, 0x2014, 0xa286, 0x0080,
-+ 0x00c0, 0x7dd3, 0x6813, 0x00ff, 0x6817, 0xfffc, 0x6010, 0xa005,
-+ 0x0040, 0x7dc9, 0x2068, 0x6807, 0x0000, 0x6837, 0x0103, 0x6833,
-+ 0x0200, 0x2001, 0x0006, 0x1078, 0x4502, 0x1078, 0x28a6, 0x1078,
-+ 0x772d, 0x0078, 0x7dfd, 0x0e7e, 0x2071, 0xa633, 0x2e04, 0xd09c,
-+ 0x0040, 0x7dee, 0x2071, 0xab80, 0x7108, 0x720c, 0xa18c, 0x00ff,
-+ 0x00c0, 0x7de6, 0xa284, 0xff00, 0x0040, 0x7dee, 0x6018, 0x2070,
-+ 0x70a0, 0xd0bc, 0x00c0, 0x7dee, 0x7112, 0x7216, 0x0e7f, 0x2001,
-+ 0x0004, 0x1078, 0x4502, 0x6003, 0x0001, 0x6007, 0x0003, 0x1078,
-+ 0x5dd7, 0x0078, 0x7dfd, 0x1078, 0x7dff, 0x0d7f, 0x007c, 0x2001,
-+ 0x0007, 0x1078, 0x4502, 0x2001, 0xa600, 0x2004, 0xa086, 0x0003,
-+ 0x00c0, 0x7e0e, 0x2001, 0x0007, 0x1078, 0x4535, 0x1078, 0x28a6,
-+ 0x1078, 0x772d, 0x007c, 0x0e7e, 0x2071, 0xa600, 0x7080, 0xa086,
-+ 0x0014, 0x00c0, 0x7e51, 0x7000, 0xa086, 0x0003, 0x00c0, 0x7e26,
-+ 0x6010, 0xa005, 0x00c0, 0x7e26, 0x1078, 0x3699, 0x0d7e, 0x6018,
-+ 0x2068, 0x1078, 0x4649, 0x1078, 0x7d89, 0x0d7f, 0x1078, 0x8043,
-+ 0x00c0, 0x7e51, 0x0d7e, 0x6018, 0x2068, 0x6890, 0x0d7f, 0xa005,
-+ 0x0040, 0x7e51, 0x2001, 0x0006, 0x1078, 0x4502, 0x0e7e, 0x6010,
-+ 0xa005, 0x0040, 0x7e4a, 0x2070, 0x7007, 0x0000, 0x7037, 0x0103,
-+ 0x7033, 0x0200, 0x0e7f, 0x1078, 0x28a6, 0x1078, 0x772d, 0x0078,
-+ 0x7e55, 0x1078, 0x7c83, 0x1078, 0x7dff, 0x0e7f, 0x007c, 0x2011,
-+ 0xa620, 0x2204, 0xa086, 0x0014, 0x00c0, 0x7e6a, 0x2001, 0x0002,
-+ 0x1078, 0x4502, 0x6003, 0x0001, 0x6007, 0x0001, 0x1078, 0x5dd7,
-+ 0x0078, 0x7e6c, 0x1078, 0x7dff, 0x007c, 0x2011, 0xa620, 0x2204,
-+ 0xa086, 0x0004, 0x00c0, 0x7e7c, 0x2001, 0x0007, 0x1078, 0x4502,
-+ 0x1078, 0x772d, 0x0078, 0x7e7e, 0x1078, 0x7dff, 0x007c, 0x7d4e,
-+ 0x7e97, 0x7d4e, 0x7ed2, 0x7d4e, 0x7f44, 0x7e8b, 0x7d4e, 0x7d4e,
-+ 0x7f59, 0x7d4e, 0x7f6c, 0x6604, 0xa686, 0x0003, 0x0040, 0x7e13,
-+ 0xa6b6, 0x001e, 0x00c0, 0x7e96, 0x1078, 0x772d, 0x007c, 0x0d7e,
-+ 0x0c7e, 0x1078, 0x7f7f, 0x00c0, 0x7ead, 0x2001, 0x0000, 0x1078,
-+ 0x44ee, 0x2001, 0x0002, 0x1078, 0x4502, 0x6003, 0x0001, 0x6007,
-+ 0x0002, 0x1078, 0x5dd7, 0x0078, 0x7ecf, 0x2009, 0xab8e, 0x2104,
-+ 0xa086, 0x0009, 0x00c0, 0x7ec2, 0x6018, 0x2068, 0x6840, 0xa084,
-+ 0x00ff, 0xa005, 0x0040, 0x7ecd, 0x8001, 0x6842, 0x6017, 0x000a,
-+ 0x0078, 0x7ecf, 0x2009, 0xab8f, 0x2104, 0xa084, 0xff00, 0xa086,
-+ 0x1900, 0x00c0, 0x7ecd, 0x0078, 0x7ea1, 0x1078, 0x7dff, 0x0c7f,
-+ 0x0d7f, 0x007c, 0x1078, 0x7f8e, 0x00c0, 0x7ee6, 0x2001, 0x0000,
-+ 0x1078, 0x44ee, 0x2001, 0x0002, 0x1078, 0x4502, 0x6003, 0x0001,
-+ 0x6007, 0x0002, 0x1078, 0x5dd7, 0x0078, 0x7f12, 0x1078, 0x7c83,
-+ 0x2009, 0xab8e, 0x2134, 0xa6b4, 0x00ff, 0xa686, 0x0005, 0x0040,
-+ 0x7f13, 0xa686, 0x000b, 0x0040, 0x7f10, 0x2009, 0xab8f, 0x2104,
-+ 0xa084, 0xff00, 0x00c0, 0x7f00, 0xa686, 0x0009, 0x0040, 0x7f13,
-+ 0xa086, 0x1900, 0x00c0, 0x7f10, 0xa686, 0x0009, 0x0040, 0x7f13,
-+ 0x2001, 0x0004, 0x1078, 0x4502, 0x1078, 0x772d, 0x0078, 0x7f12,
-+ 0x1078, 0x7dff, 0x007c, 0x0d7e, 0x6010, 0x2068, 0x1078, 0x8d06,
-+ 0x0040, 0x7f21, 0x6838, 0xd0fc, 0x0040, 0x7f21, 0x0d7f, 0x0078,
-+ 0x7f10, 0x6018, 0x2068, 0x6840, 0xa084, 0x00ff, 0xa005, 0x0040,
-+ 0x7f32, 0x8001, 0x6842, 0x6017, 0x000a, 0x6007, 0x0016, 0x0d7f,
-+ 0x0078, 0x7f12, 0x68a0, 0xa086, 0x007e, 0x00c0, 0x7f3f, 0x0e7e,
-+ 0x2071, 0xa600, 0x1078, 0x42b8, 0x0e7f, 0x0078, 0x7f41, 0x1078,
-+ 0x2880, 0x0d7f, 0x0078, 0x7f10, 0x1078, 0x7f8e, 0x00c0, 0x7f54,
-+ 0x2001, 0x0004, 0x1078, 0x4502, 0x6003, 0x0001, 0x6007, 0x0003,
-+ 0x1078, 0x5dd7, 0x0078, 0x7f58, 0x1078, 0x7c83, 0x1078, 0x7dff,
-+ 0x007c, 0x1078, 0x7f8e, 0x00c0, 0x7f69, 0x2001, 0x0008, 0x1078,
-+ 0x4502, 0x6003, 0x0001, 0x6007, 0x0005, 0x1078, 0x5dd7, 0x0078,
-+ 0x7f6b, 0x1078, 0x7dff, 0x007c, 0x1078, 0x7f8e, 0x00c0, 0x7f7c,
-+ 0x2001, 0x000a, 0x1078, 0x4502, 0x6003, 0x0001, 0x6007, 0x0001,
-+ 0x1078, 0x5dd7, 0x0078, 0x7f7e, 0x1078, 0x7dff, 0x007c, 0x2009,
-+ 0xab8e, 0x2104, 0xa086, 0x0003, 0x00c0, 0x7f8d, 0x2009, 0xab8f,
-+ 0x2104, 0xa084, 0xff00, 0xa086, 0x2a00, 0x007c, 0xa085, 0x0001,
-+ 0x007c, 0x0c7e, 0x017e, 0xac88, 0x0006, 0x2164, 0x1078, 0x45d6,
-+ 0x017f, 0x0c7f, 0x007c, 0x0f7e, 0x0e7e, 0x0d7e, 0x037e, 0x017e,
-+ 0x6018, 0x2068, 0x2071, 0xa633, 0x2e04, 0xa085, 0x0003, 0x2072,
-+ 0x1078, 0x8014, 0x0040, 0x7fd9, 0x2009, 0xa633, 0x2104, 0xc0cd,
-+ 0x200a, 0x2001, 0xa653, 0x2004, 0xd0a4, 0x0040, 0x7fc2, 0xa006,
-+ 0x2020, 0x2009, 0x002a, 0x1078, 0xa21d, 0x2001, 0xa60c, 0x200c,
-+ 0xc195, 0x2102, 0x2019, 0x002a, 0x2009, 0x0001, 0x1078, 0x284f,
-+ 0x2071, 0xa600, 0x1078, 0x2677, 0x0c7e, 0x157e, 0x20a9, 0x0081,
-+ 0x2009, 0x007f, 0x1078, 0x298e, 0x8108, 0x00f0, 0x7fd2, 0x157f,
-+ 0x0c7f, 0x1078, 0x7f91, 0x6813, 0x00ff, 0x6817, 0xfffe, 0x2071,
-+ 0xab80, 0x2079, 0x0100, 0x2e04, 0xa084, 0x00ff, 0x2069, 0xa61b,
-+ 0x206a, 0x78e6, 0x007e, 0x8e70, 0x2e04, 0x2069, 0xa61c, 0x206a,
-+ 0x78ea, 0xa084, 0xff00, 0x017f, 0xa105, 0x2009, 0xa626, 0x200a,
-+ 0x2069, 0xab8e, 0x2071, 0xa89e, 0x6810, 0x2072, 0x6814, 0x7006,
-+ 0x6818, 0x700a, 0x681c, 0x700e, 0x1078, 0x906e, 0x2001, 0x0006,
-+ 0x1078, 0x4502, 0x1078, 0x28a6, 0x1078, 0x772d, 0x017f, 0x037f,
-+ 0x0d7f, 0x0e7f, 0x0f7f, 0x007c, 0x027e, 0x037e, 0x0e7e, 0x157e,
-+ 0x2019, 0xa626, 0x231c, 0x83ff, 0x0040, 0x803e, 0x2071, 0xab80,
-+ 0x2e14, 0xa294, 0x00ff, 0x7004, 0xa084, 0xff00, 0xa205, 0xa306,
-+ 0x00c0, 0x803e, 0x2011, 0xab96, 0xad98, 0x000a, 0x20a9, 0x0004,
-+ 0x1078, 0x80de, 0x00c0, 0x803e, 0x2011, 0xab9a, 0xad98, 0x0006,
-+ 0x20a9, 0x0004, 0x1078, 0x80de, 0x00c0, 0x803e, 0x157f, 0x0e7f,
-+ 0x037f, 0x027f, 0x007c, 0x0e7e, 0x2071, 0xab8c, 0x7004, 0xa086,
-+ 0x0014, 0x00c0, 0x8066, 0x7008, 0xa086, 0x0800, 0x00c0, 0x8066,
-+ 0x700c, 0xd0ec, 0x0040, 0x8064, 0xa084, 0x0f00, 0xa086, 0x0100,
-+ 0x00c0, 0x8064, 0x7024, 0xd0a4, 0x00c0, 0x8061, 0xd0ac, 0x0040,
-+ 0x8064, 0xa006, 0x0078, 0x8066, 0xa085, 0x0001, 0x0e7f, 0x007c,
-+ 0x0e7e, 0x0d7e, 0x0c7e, 0x077e, 0x057e, 0x047e, 0x027e, 0x007e,
-+ 0x127e, 0x2091, 0x8000, 0x2029, 0xa8ba, 0x252c, 0x2021, 0xa8c0,
-+ 0x2424, 0x2061, 0xad00, 0x2071, 0xa600, 0x7248, 0x7064, 0xa202,
-+ 0x00c8, 0x80cc, 0x1078, 0xa242, 0x0040, 0x80c4, 0x671c, 0xa786,
-+ 0x0001, 0x0040, 0x80c4, 0xa786, 0x0007, 0x0040, 0x80c4, 0x2500,
-+ 0xac06, 0x0040, 0x80c4, 0x2400, 0xac06, 0x0040, 0x80c4, 0x0c7e,
-+ 0x6000, 0xa086, 0x0004, 0x00c0, 0x809f, 0x1078, 0x1757, 0xa786,
-+ 0x0008, 0x00c0, 0x80ae, 0x1078, 0x8f00, 0x00c0, 0x80ae, 0x0c7f,
-+ 0x1078, 0x7c83, 0x1078, 0x8ec6, 0x0078, 0x80c4, 0x6010, 0x2068,
-+ 0x1078, 0x8d06, 0x0040, 0x80c1, 0xa786, 0x0003, 0x00c0, 0x80d6,
-+ 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x4a73, 0x1078,
-+ 0x8eb9, 0x1078, 0x8ec6, 0x0c7f, 0xace0, 0x0010, 0x7058, 0xac02,
-+ 0x00c8, 0x80cc, 0x0078, 0x807d, 0x127f, 0x007f, 0x027f, 0x047f,
-+ 0x057f, 0x077f, 0x0c7f, 0x0d7f, 0x0e7f, 0x007c, 0xa786, 0x0006,
-+ 0x00c0, 0x80b8, 0x1078, 0xa1ca, 0x0078, 0x80c1, 0x220c, 0x2304,
-+ 0xa106, 0x00c0, 0x80e9, 0x8210, 0x8318, 0x00f0, 0x80de, 0xa006,
-+ 0x007c, 0x2304, 0xa102, 0x0048, 0x80f1, 0x2001, 0x0001, 0x0078,
-+ 0x80f3, 0x2001, 0x0000, 0xa18d, 0x0001, 0x007c, 0x6004, 0xa08a,
-+ 0x0044, 0x10c8, 0x1332, 0x1078, 0x8eec, 0x0040, 0x8105, 0x1078,
-+ 0x8f00, 0x0040, 0x8112, 0x0078, 0x810b, 0x1078, 0x28a6, 0x1078,
-+ 0x8f00, 0x0040, 0x8112, 0x1078, 0x61cd, 0x1078, 0x772d, 0x1078,
-+ 0x62d1, 0x007c, 0x1078, 0x7c83, 0x0078, 0x810b, 0xa182, 0x0040,
-+ 0x0079, 0x811a, 0x812d, 0x812d, 0x812d, 0x812d, 0x812d, 0x812d,
-+ 0x812d, 0x812d, 0x812d, 0x812d, 0x812d, 0x812f, 0x812f, 0x812f,
-+ 0x812f, 0x812d, 0x812d, 0x812d, 0x812f, 0x1078, 0x1332, 0x600b,
-+ 0xffff, 0x6003, 0x0001, 0x6106, 0x1078, 0x5d8a, 0x127e, 0x2091,
-+ 0x8000, 0x1078, 0x62d1, 0x127f, 0x007c, 0xa186, 0x0013, 0x00c0,
-+ 0x8146, 0x6004, 0xa082, 0x0040, 0x0079, 0x81d1, 0xa186, 0x0027,
-+ 0x00c0, 0x8168, 0x1078, 0x61cd, 0x1078, 0x2880, 0x0d7e, 0x6110,
-+ 0x2168, 0x1078, 0x8d06, 0x0040, 0x8162, 0x6837, 0x0103, 0x684b,
-+ 0x0029, 0x6847, 0x0000, 0x694c, 0xc1c5, 0x694e, 0x1078, 0x4a73,
-+ 0x1078, 0x8eb9, 0x0d7f, 0x1078, 0x772d, 0x1078, 0x62d1, 0x007c,
-+ 0xa186, 0x0014, 0x00c0, 0x8171, 0x6004, 0xa082, 0x0040, 0x0079,
-+ 0x8199, 0xa186, 0x0046, 0x0040, 0x817d, 0xa186, 0x0045, 0x0040,
-+ 0x817d, 0xa186, 0x0047, 0x10c0, 0x1332, 0x2001, 0x0109, 0x2004,
-+ 0xd084, 0x0040, 0x8196, 0x127e, 0x2091, 0x2200, 0x007e, 0x017e,
-+ 0x027e, 0x1078, 0x5c56, 0x027f, 0x017f, 0x007f, 0x127f, 0x6000,
-+ 0xa086, 0x0002, 0x00c0, 0x8196, 0x0078, 0x820e, 0x1078, 0x7773,
-+ 0x007c, 0x81ae, 0x81ac, 0x81ac, 0x81ac, 0x81ac, 0x81ac, 0x81ac,
-+ 0x81ac, 0x81ac, 0x81ac, 0x81ac, 0x81ca, 0x81ca, 0x81ca, 0x81ca,
-+ 0x81ac, 0x81ca, 0x81ac, 0x81ca, 0x1078, 0x1332, 0x1078, 0x61cd,
-+ 0x0d7e, 0x6110, 0x2168, 0x1078, 0x8d06, 0x0040, 0x81c4, 0x6837,
-+ 0x0103, 0x684b, 0x0006, 0x6847, 0x0000, 0x6850, 0xc0ec, 0x6852,
-+ 0x1078, 0x4a73, 0x1078, 0x8eb9, 0x0d7f, 0x1078, 0x772d, 0x1078,
-+ 0x62d1, 0x007c, 0x1078, 0x61cd, 0x1078, 0x772d, 0x1078, 0x62d1,
-+ 0x007c, 0x81e6, 0x81e4, 0x81e4, 0x81e4, 0x81e4, 0x81e4, 0x81e4,
-+ 0x81e4, 0x81e4, 0x81e4, 0x81e4, 0x81f8, 0x81f8, 0x81f8, 0x81f8,
-+ 0x81e4, 0x8207, 0x81e4, 0x81f8, 0x1078, 0x1332, 0x1078, 0x61cd,
-+ 0x2001, 0xa8a4, 0x2004, 0x603e, 0x6003, 0x0002, 0x1078, 0x62d1,
-+ 0x6010, 0xa088, 0x0013, 0x2104, 0xa085, 0x0400, 0x200a, 0x007c,
-+ 0x1078, 0x61cd, 0x2001, 0xa8a2, 0x2004, 0x6016, 0x2001, 0xa8a4,
-+ 0x2004, 0x603e, 0x6003, 0x000f, 0x1078, 0x62d1, 0x007c, 0x1078,
-+ 0x61cd, 0x1078, 0x772d, 0x1078, 0x62d1, 0x007c, 0xa182, 0x0040,
-+ 0x0079, 0x8212, 0x8225, 0x8225, 0x8225, 0x8225, 0x8225, 0x8227,
-+ 0x8327, 0x8359, 0x8225, 0x8225, 0x8225, 0x8225, 0x8225, 0x8225,
-+ 0x8225, 0x8225, 0x8225, 0x8225, 0x8225, 0x1078, 0x1332, 0x0e7e,
-+ 0x0d7e, 0x603f, 0x0000, 0x2071, 0xab80, 0x7124, 0x610a, 0x2071,
-+ 0xab8c, 0x6110, 0x2168, 0x7614, 0xa6b4, 0x0fff, 0x86ff, 0x0040,
-+ 0x82e9, 0xa68c, 0x0c00, 0x0040, 0x825e, 0x0f7e, 0x2c78, 0x1078,
-+ 0x4963, 0x0f7f, 0x0040, 0x825a, 0x684c, 0xd0ac, 0x0040, 0x825a,
-+ 0x6024, 0xd0dc, 0x00c0, 0x825a, 0x6850, 0xd0bc, 0x00c0, 0x825a,
-+ 0x7318, 0x6814, 0xa306, 0x00c0, 0x8301, 0x731c, 0x6810, 0xa306,
-+ 0x00c0, 0x8301, 0x7318, 0x6b62, 0x731c, 0x6b5e, 0xa68c, 0x00ff,
-+ 0xa186, 0x0002, 0x0040, 0x8291, 0xa186, 0x0028, 0x00c0, 0x826e,
-+ 0x1078, 0x8eda, 0x684b, 0x001c, 0x0078, 0x8293, 0xd6dc, 0x0040,
-+ 0x828a, 0x684b, 0x0015, 0x684c, 0xd0ac, 0x0040, 0x8288, 0x6914,
-+ 0x6a10, 0x2100, 0xa205, 0x0040, 0x8288, 0x7018, 0xa106, 0x00c0,
-+ 0x8285, 0x701c, 0xa206, 0x0040, 0x8288, 0x6962, 0x6a5e, 0xc6dc,
-+ 0x0078, 0x8293, 0xd6d4, 0x0040, 0x8291, 0x684b, 0x0007, 0x0078,
-+ 0x8293, 0x684b, 0x0000, 0x6837, 0x0103, 0x6e46, 0xa01e, 0xd6c4,
-+ 0x0040, 0x82bc, 0xa686, 0x0100, 0x00c0, 0x82a7, 0x2001, 0xab99,
-+ 0x2004, 0xa005, 0x00c0, 0x82a7, 0xc6c4, 0x0078, 0x8236, 0x7328,
-+ 0x732c, 0x6b56, 0x83ff, 0x0040, 0x82bc, 0xa38a, 0x0009, 0x0048,
-+ 0x82b3, 0x2019, 0x0008, 0x037e, 0x2308, 0x2019, 0xab98, 0xad90,
-+ 0x0019, 0x1078, 0x89e2, 0x037f, 0xd6cc, 0x0040, 0x8317, 0x7124,
-+ 0x695a, 0x81ff, 0x0040, 0x8317, 0xa192, 0x0021, 0x00c8, 0x82d5,
-+ 0x2071, 0xab98, 0x831c, 0x2300, 0xae18, 0xad90, 0x001d, 0x1078,
-+ 0x89e2, 0x1078, 0x91f4, 0x0078, 0x8317, 0x6838, 0xd0fc, 0x0040,
-+ 0x82de, 0x2009, 0x0020, 0x695a, 0x0078, 0x82c8, 0x0f7e, 0x2d78,
-+ 0x1078, 0x897a, 0x0f7f, 0x1078, 0x91f4, 0x1078, 0x89cf, 0x0078,
-+ 0x8319, 0x0f7e, 0x2c78, 0x1078, 0x4963, 0x0f7f, 0x0040, 0x8307,
-+ 0x684c, 0xd0ac, 0x0040, 0x8307, 0x6024, 0xd0dc, 0x00c0, 0x8307,
-+ 0x6850, 0xd0bc, 0x00c0, 0x8307, 0x6810, 0x6914, 0xa105, 0x0040,
-+ 0x8307, 0x1078, 0x8fbf, 0x0d7f, 0x0e7f, 0x0078, 0x8326, 0x684b,
-+ 0x0000, 0x6837, 0x0103, 0x6e46, 0x684c, 0xd0ac, 0x0040, 0x8317,
-+ 0x6810, 0x6914, 0xa115, 0x0040, 0x8317, 0x1078, 0x84d5, 0x1078,
-+ 0x4a73, 0x6218, 0x2268, 0x6a3c, 0x8211, 0x6a3e, 0x1078, 0x8f89,
-+ 0x0d7f, 0x0e7f, 0x00c0, 0x8326, 0x1078, 0x772d, 0x007c, 0x0f7e,
-+ 0x6003, 0x0003, 0x2079, 0xab8c, 0x7c04, 0x7b00, 0x7e0c, 0x7d08,
-+ 0x6010, 0x2078, 0x784c, 0xd0ac, 0x0040, 0x833e, 0x6003, 0x0002,
-+ 0x0f7f, 0x007c, 0x2130, 0x2228, 0x0078, 0x834a, 0x2400, 0x797c,
-+ 0xa10a, 0x2300, 0x7a80, 0xa213, 0x2600, 0xa102, 0x2500, 0xa203,
-+ 0x0048, 0x833a, 0x7c12, 0x7b16, 0x7e0a, 0x7d0e, 0x0f7f, 0x603f,
-+ 0x0000, 0x2c10, 0x1078, 0x1cf0, 0x1078, 0x5df6, 0x1078, 0x639b,
-+ 0x007c, 0x2001, 0xa8a4, 0x2004, 0x603e, 0x6003, 0x0004, 0x6110,
-+ 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10, 0x1078, 0x15fa, 0x007c,
-+ 0xa182, 0x0040, 0x0079, 0x836c, 0x837f, 0x837f, 0x837f, 0x837f,
-+ 0x837f, 0x8381, 0x8424, 0x837f, 0x837f, 0x843a, 0x84ab, 0x837f,
-+ 0x837f, 0x837f, 0x837f, 0x84ba, 0x837f, 0x837f, 0x837f, 0x1078,
-+ 0x1332, 0x077e, 0x0f7e, 0x0e7e, 0x0d7e, 0x2071, 0xab8c, 0x6110,
-+ 0x2178, 0x7614, 0xa6b4, 0x0fff, 0x7e46, 0x7f4c, 0xc7e5, 0x7f4e,
-+ 0x6218, 0x2268, 0x6a3c, 0x8211, 0x6a3e, 0x86ff, 0x0040, 0x841f,
-+ 0xa694, 0xff00, 0xa284, 0x0c00, 0x0040, 0x83a2, 0x7018, 0x7862,
-+ 0x701c, 0x785e, 0xa284, 0x0300, 0x0040, 0x841f, 0x1078, 0x138b,
-+ 0x1040, 0x1332, 0x2d00, 0x784a, 0x7f4c, 0xc7cd, 0x7f4e, 0x6837,
-+ 0x0103, 0x7838, 0x683a, 0x783c, 0x683e, 0x7840, 0x6842, 0x6e46,
-+ 0xa68c, 0x0c00, 0x0040, 0x83c0, 0x7318, 0x6b62, 0x731c, 0x6b5e,
-+ 0xa68c, 0x00ff, 0xa186, 0x0002, 0x0040, 0x83dc, 0xa186, 0x0028,
-+ 0x00c0, 0x83ce, 0x684b, 0x001c, 0x0078, 0x83de, 0xd6dc, 0x0040,
-+ 0x83d5, 0x684b, 0x0015, 0x0078, 0x83de, 0xd6d4, 0x0040, 0x83dc,
-+ 0x684b, 0x0007, 0x0078, 0x83de, 0x684b, 0x0000, 0x6f4e, 0x7850,
-+ 0x6852, 0x7854, 0x6856, 0xa01e, 0xd6c4, 0x0040, 0x83fc, 0x7328,
-+ 0x732c, 0x6b56, 0x83ff, 0x0040, 0x83fc, 0xa38a, 0x0009, 0x0048,
-+ 0x83f3, 0x2019, 0x0008, 0x037e, 0x2308, 0x2019, 0xab98, 0xad90,
-+ 0x0019, 0x1078, 0x89e2, 0x037f, 0xd6cc, 0x0040, 0x841f, 0x7124,
-+ 0x695a, 0x81ff, 0x0040, 0x841f, 0xa192, 0x0021, 0x00c8, 0x8413,
-+ 0x2071, 0xab98, 0x831c, 0x2300, 0xae18, 0xad90, 0x001d, 0x1078,
-+ 0x89e2, 0x0078, 0x841f, 0x7838, 0xd0fc, 0x0040, 0x841c, 0x2009,
-+ 0x0020, 0x695a, 0x0078, 0x8408, 0x2d78, 0x1078, 0x897a, 0x0d7f,
-+ 0x0e7f, 0x0f7f, 0x077f, 0x007c, 0x0f7e, 0x6003, 0x0003, 0x2079,
-+ 0xab8c, 0x7c04, 0x7b00, 0x7e0c, 0x7d08, 0x6010, 0x2078, 0x7c12,
-+ 0x7b16, 0x7e0a, 0x7d0e, 0x0f7f, 0x2c10, 0x1078, 0x1cf0, 0x1078,
-+ 0x6df4, 0x007c, 0x0d7e, 0x0f7e, 0x2c78, 0x1078, 0x4963, 0x0f7f,
-+ 0x0040, 0x8446, 0x2001, 0xa8a4, 0x2004, 0x603e, 0x6003, 0x0002,
-+ 0x1078, 0x627a, 0x1078, 0x639b, 0x6110, 0x2168, 0x694c, 0xd1e4,
-+ 0x0040, 0x84a9, 0xd1cc, 0x0040, 0x8480, 0x6948, 0x6838, 0xd0fc,
-+ 0x0040, 0x8478, 0x017e, 0x684c, 0x007e, 0x6850, 0x007e, 0xad90,
-+ 0x000d, 0xa198, 0x000d, 0x2009, 0x0020, 0x157e, 0x21a8, 0x2304,
-+ 0x2012, 0x8318, 0x8210, 0x00f0, 0x8467, 0x157f, 0x007f, 0x6852,
-+ 0x007f, 0x684e, 0x017f, 0x2168, 0x1078, 0x13b4, 0x0078, 0x84a3,
-+ 0x017e, 0x1078, 0x13b4, 0x0d7f, 0x1078, 0x89cf, 0x0078, 0x84a3,
-+ 0x6837, 0x0103, 0x6944, 0xa184, 0x00ff, 0xa0b6, 0x0002, 0x0040,
-+ 0x849f, 0xa086, 0x0028, 0x00c0, 0x8491, 0x684b, 0x001c, 0x0078,
-+ 0x84a1, 0xd1dc, 0x0040, 0x8498, 0x684b, 0x0015, 0x0078, 0x84a1,
-+ 0xd1d4, 0x0040, 0x849f, 0x684b, 0x0007, 0x0078, 0x84a1, 0x684b,
-+ 0x0000, 0x1078, 0x4a73, 0x1078, 0x8f89, 0x00c0, 0x84a9, 0x1078,
-+ 0x772d, 0x0d7f, 0x007c, 0x2019, 0x0001, 0x1078, 0x7058, 0x6003,
-+ 0x0002, 0x2001, 0xa8a4, 0x2004, 0x603e, 0x1078, 0x627a, 0x1078,
-+ 0x639b, 0x007c, 0x1078, 0x627a, 0x1078, 0x2880, 0x0d7e, 0x6110,
-+ 0x2168, 0x1078, 0x8d06, 0x0040, 0x84cf, 0x6837, 0x0103, 0x684b,
-+ 0x0029, 0x6847, 0x0000, 0x1078, 0x4a73, 0x1078, 0x8eb9, 0x0d7f,
-+ 0x1078, 0x772d, 0x1078, 0x639b, 0x007c, 0x684b, 0x0015, 0xd1fc,
-+ 0x0040, 0x84e1, 0x684b, 0x0007, 0x8002, 0x8000, 0x810a, 0xa189,
-+ 0x0000, 0x6962, 0x685e, 0x007c, 0xa182, 0x0040, 0x0079, 0x84e8,
-+ 0x84fb, 0x84fb, 0x84fb, 0x84fb, 0x84fb, 0x84fd, 0x84fb, 0x85d0,
-+ 0x85dc, 0x84fb, 0x84fb, 0x84fb, 0x84fb, 0x84fb, 0x84fb, 0x84fb,
-+ 0x84fb, 0x84fb, 0x84fb, 0x1078, 0x1332, 0x077e, 0x0f7e, 0x0e7e,
-+ 0x0d7e, 0x2071, 0xab8c, 0x6110, 0x2178, 0x7614, 0xa6b4, 0x0fff,
-+ 0x0f7e, 0x2c78, 0x1078, 0x4963, 0x0f7f, 0x0040, 0x851b, 0xa684,
-+ 0x00ff, 0x00c0, 0x851b, 0x6024, 0xd0f4, 0x0040, 0x851b, 0x1078,
-+ 0x8fbf, 0x0078, 0x85cb, 0x7e46, 0x7f4c, 0xc7e5, 0x7f4e, 0x6218,
-+ 0x2268, 0x6a3c, 0x8211, 0x6a3e, 0x86ff, 0x0040, 0x85c0, 0xa694,
-+ 0xff00, 0xa284, 0x0c00, 0x0040, 0x8531, 0x7018, 0x7862, 0x701c,
-+ 0x785e, 0xa284, 0x0300, 0x0040, 0x85bd, 0xa686, 0x0100, 0x00c0,
-+ 0x8543, 0x2001, 0xab99, 0x2004, 0xa005, 0x00c0, 0x8543, 0xc6c4,
-+ 0x7e46, 0x0078, 0x8524, 0x1078, 0x138b, 0x1040, 0x1332, 0x2d00,
-+ 0x784a, 0x7f4c, 0xa7bd, 0x0200, 0x7f4e, 0x6837, 0x0103, 0x7838,
-+ 0x683a, 0x783c, 0x683e, 0x7840, 0x6842, 0x6e46, 0xa68c, 0x0c00,
-+ 0x0040, 0x855e, 0x7318, 0x6b62, 0x731c, 0x6b5e, 0xa68c, 0x00ff,
-+ 0xa186, 0x0002, 0x0040, 0x857a, 0xa186, 0x0028, 0x00c0, 0x856c,
-+ 0x684b, 0x001c, 0x0078, 0x857c, 0xd6dc, 0x0040, 0x8573, 0x684b,
-+ 0x0015, 0x0078, 0x857c, 0xd6d4, 0x0040, 0x857a, 0x684b, 0x0007,
-+ 0x0078, 0x857c, 0x684b, 0x0000, 0x6f4e, 0x7850, 0x6852, 0x7854,
-+ 0x6856, 0xa01e, 0xd6c4, 0x0040, 0x859a, 0x7328, 0x732c, 0x6b56,
-+ 0x83ff, 0x0040, 0x859a, 0xa38a, 0x0009, 0x0048, 0x8591, 0x2019,
-+ 0x0008, 0x037e, 0x2308, 0x2019, 0xab98, 0xad90, 0x0019, 0x1078,
-+ 0x89e2, 0x037f, 0xd6cc, 0x0040, 0x85bd, 0x7124, 0x695a, 0x81ff,
-+ 0x0040, 0x85bd, 0xa192, 0x0021, 0x00c8, 0x85b1, 0x2071, 0xab98,
-+ 0x831c, 0x2300, 0xae18, 0xad90, 0x001d, 0x1078, 0x89e2, 0x0078,
-+ 0x85bd, 0x7838, 0xd0fc, 0x0040, 0x85ba, 0x2009, 0x0020, 0x695a,
-+ 0x0078, 0x85a6, 0x2d78, 0x1078, 0x897a, 0xd6dc, 0x00c0, 0x85c3,
-+ 0xa006, 0x0078, 0x85c9, 0x2001, 0x0001, 0x2071, 0xab8c, 0x7218,
-+ 0x731c, 0x1078, 0x1653, 0x0d7f, 0x0e7f, 0x0f7f, 0x077f, 0x007c,
-+ 0x2001, 0xa8a4, 0x2004, 0x603e, 0x20e1, 0x0005, 0x3d18, 0x3e20,
-+ 0x2c10, 0x1078, 0x15fa, 0x007c, 0x2001, 0xa8a4, 0x2004, 0x603e,
-+ 0x0d7e, 0x6003, 0x0002, 0x6110, 0x2168, 0x694c, 0xd1e4, 0x0040,
-+ 0x870c, 0x603f, 0x0000, 0x0f7e, 0x2c78, 0x1078, 0x4963, 0x0f7f,
-+ 0x0040, 0x8622, 0x6814, 0x6910, 0xa115, 0x0040, 0x8622, 0x6a60,
-+ 0xa206, 0x00c0, 0x85ff, 0x685c, 0xa106, 0x0040, 0x8622, 0x684c,
-+ 0xc0e4, 0x684e, 0x6847, 0x0000, 0x6863, 0x0000, 0x685f, 0x0000,
-+ 0x6024, 0xd0f4, 0x00c0, 0x8617, 0x697c, 0x6810, 0xa102, 0x603a,
-+ 0x6980, 0x6814, 0xa103, 0x6036, 0x6024, 0xc0f5, 0x6026, 0x0d7e,
-+ 0x6018, 0x2068, 0x683c, 0x8000, 0x683e, 0x0d7f, 0x1078, 0x8fbf,
-+ 0x0078, 0x870c, 0x694c, 0xd1cc, 0x0040, 0x86d1, 0x6948, 0x6838,
-+ 0xd0fc, 0x0040, 0x8689, 0x017e, 0x684c, 0x007e, 0x6850, 0x007e,
-+ 0x0f7e, 0x2178, 0x7944, 0xa184, 0x00ff, 0xa0b6, 0x0002, 0x0040,
-+ 0x865c, 0xa086, 0x0028, 0x00c0, 0x8643, 0x684b, 0x001c, 0x784b,
-+ 0x001c, 0x0078, 0x8667, 0xd1dc, 0x0040, 0x8653, 0x684b, 0x0015,
-+ 0x784b, 0x0015, 0x1078, 0x916c, 0x0040, 0x8651, 0x7944, 0xc1dc,
-+ 0x7946, 0x0078, 0x8667, 0xd1d4, 0x0040, 0x865c, 0x684b, 0x0007,
-+ 0x784b, 0x0007, 0x0078, 0x8667, 0x684c, 0xd0ac, 0x0040, 0x8667,
-+ 0x6810, 0x6914, 0xa115, 0x0040, 0x8667, 0x1078, 0x84d5, 0x6848,
-+ 0x784a, 0x6860, 0x7862, 0x685c, 0x785e, 0xad90, 0x000d, 0xaf98,
-+ 0x000d, 0x2009, 0x0020, 0x157e, 0x21a8, 0x2304, 0x2012, 0x8318,
-+ 0x8210, 0x00f0, 0x8675, 0x157f, 0x0f7f, 0x007f, 0x6852, 0x007f,
-+ 0x684e, 0x1078, 0x91f4, 0x017f, 0x2168, 0x1078, 0x13b4, 0x0078,
-+ 0x8706, 0x017e, 0x0f7e, 0x2178, 0x7944, 0xa184, 0x00ff, 0xa0b6,
-+ 0x0002, 0x0040, 0x86b6, 0xa086, 0x0028, 0x00c0, 0x869d, 0x684b,
-+ 0x001c, 0x784b, 0x001c, 0x0078, 0x86c1, 0xd1dc, 0x0040, 0x86ad,
-+ 0x684b, 0x0015, 0x784b, 0x0015, 0x1078, 0x916c, 0x0040, 0x86ab,
-+ 0x7944, 0xc1dc, 0x7946, 0x0078, 0x86c1, 0xd1d4, 0x0040, 0x86b6,
-+ 0x684b, 0x0007, 0x784b, 0x0007, 0x0078, 0x86c1, 0x684c, 0xd0ac,
-+ 0x0040, 0x86c1, 0x6810, 0x6914, 0xa115, 0x0040, 0x86c1, 0x1078,
-+ 0x84d5, 0x6860, 0x7862, 0x685c, 0x785e, 0x684c, 0x784e, 0x0f7f,
-+ 0x1078, 0x13b4, 0x0d7f, 0x1078, 0x91f4, 0x1078, 0x89cf, 0x0078,
-+ 0x8706, 0x6837, 0x0103, 0x6944, 0xa184, 0x00ff, 0xa0b6, 0x0002,
-+ 0x0040, 0x86f7, 0xa086, 0x0028, 0x00c0, 0x86e2, 0x684b, 0x001c,
-+ 0x0078, 0x8704, 0xd1dc, 0x0040, 0x86f0, 0x684b, 0x0015, 0x1078,
-+ 0x916c, 0x0040, 0x86ee, 0x6944, 0xc1dc, 0x6946, 0x0078, 0x8704,
-+ 0xd1d4, 0x0040, 0x86f7, 0x684b, 0x0007, 0x0078, 0x8704, 0x684b,
-+ 0x0000, 0x684c, 0xd0ac, 0x0040, 0x8704, 0x6810, 0x6914, 0xa115,
-+ 0x0040, 0x8704, 0x1078, 0x84d5, 0x1078, 0x4a73, 0x1078, 0x8f89,
-+ 0x00c0, 0x870c, 0x1078, 0x772d, 0x0d7f, 0x007c, 0x1078, 0x61cd,
-+ 0x0078, 0x8714, 0x1078, 0x627a, 0x1078, 0x8d06, 0x0040, 0x8733,
-+ 0x0d7e, 0x6110, 0x2168, 0x6837, 0x0103, 0x2009, 0xa60c, 0x210c,
-+ 0xd18c, 0x00c0, 0x873e, 0xd184, 0x00c0, 0x873a, 0x6108, 0x694a,
-+ 0xa18e, 0x0029, 0x00c0, 0x872e, 0x1078, 0xa4e2, 0x6847, 0x0000,
-+ 0x1078, 0x4a73, 0x0d7f, 0x1078, 0x772d, 0x1078, 0x62d1, 0x1078,
-+ 0x639b, 0x007c, 0x684b, 0x0004, 0x0078, 0x872e, 0x684b, 0x0004,
-+ 0x0078, 0x872e, 0xa182, 0x0040, 0x0079, 0x8746, 0x8759, 0x8759,
-+ 0x8759, 0x8759, 0x8759, 0x875b, 0x8759, 0x875e, 0x8759, 0x8759,
-+ 0x8759, 0x8759, 0x8759, 0x8759, 0x8759, 0x8759, 0x8759, 0x8759,
-+ 0x8759, 0x1078, 0x1332, 0x1078, 0x772d, 0x007c, 0x007e, 0x027e,
-+ 0xa016, 0x1078, 0x15fa, 0x027f, 0x007f, 0x007c, 0xa182, 0x0085,
-+ 0x0079, 0x876a, 0x8773, 0x8771, 0x8771, 0x877f, 0x8771, 0x8771,
-+ 0x8771, 0x1078, 0x1332, 0x6003, 0x0001, 0x6106, 0x1078, 0x5d8a,
-+ 0x127e, 0x2091, 0x8000, 0x1078, 0x62d1, 0x127f, 0x007c, 0x027e,
-+ 0x057e, 0x0d7e, 0x0e7e, 0x2071, 0xab80, 0x7224, 0x6212, 0x7220,
-+ 0x1078, 0x8cf2, 0x0040, 0x87a4, 0x2268, 0x6800, 0xa086, 0x0000,
-+ 0x0040, 0x87a4, 0x6018, 0x6d18, 0xa52e, 0x00c0, 0x87a4, 0x0c7e,
-+ 0x2d60, 0x1078, 0x89f3, 0x0c7f, 0x0040, 0x87a4, 0x6803, 0x0002,
-+ 0x6007, 0x0086, 0x0078, 0x87a6, 0x6007, 0x0087, 0x6003, 0x0001,
-+ 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0f7e, 0x2278, 0x1078, 0x4963,
-+ 0x0f7f, 0x0040, 0x87be, 0x6824, 0xd0ec, 0x0040, 0x87be, 0x0c7e,
-+ 0x2260, 0x603f, 0x0000, 0x1078, 0x8fbf, 0x0c7f, 0x0e7f, 0x0d7f,
-+ 0x057f, 0x027f, 0x007c, 0xa186, 0x0013, 0x00c0, 0x87d4, 0x6004,
-+ 0xa08a, 0x0085, 0x1048, 0x1332, 0xa08a, 0x008c, 0x10c8, 0x1332,
-+ 0xa082, 0x0085, 0x0079, 0x87e3, 0xa186, 0x0027, 0x0040, 0x87dc,
-+ 0xa186, 0x0014, 0x10c0, 0x1332, 0x1078, 0x61cd, 0x1078, 0x8ec6,
-+ 0x1078, 0x62d1, 0x007c, 0x87ea, 0x87ec, 0x87ec, 0x87ea, 0x87ea,
-+ 0x87ea, 0x87ea, 0x1078, 0x1332, 0x1078, 0x61cd, 0x1078, 0x8ec6,
-+ 0x1078, 0x62d1, 0x007c, 0xa186, 0x0013, 0x00c0, 0x87fd, 0x6004,
-+ 0xa082, 0x0085, 0x2008, 0x0078, 0x8838, 0xa186, 0x0027, 0x00c0,
-+ 0x8820, 0x1078, 0x61cd, 0x1078, 0x2880, 0x0d7e, 0x6010, 0x2068,
-+ 0x1078, 0x8d06, 0x0040, 0x8816, 0x6837, 0x0103, 0x6847, 0x0000,
-+ 0x684b, 0x0029, 0x1078, 0x4a73, 0x1078, 0x8eb9, 0x0d7f, 0x1078,
-+ 0x772d, 0x1078, 0x62d1, 0x007c, 0x1078, 0x7773, 0x0078, 0x881b,
-+ 0xa186, 0x0014, 0x00c0, 0x881c, 0x1078, 0x61cd, 0x0d7e, 0x6010,
-+ 0x2068, 0x1078, 0x8d06, 0x0040, 0x8816, 0x6837, 0x0103, 0x6847,
-+ 0x0000, 0x684b, 0x0006, 0x6850, 0xc0ec, 0x6852, 0x0078, 0x8812,
-+ 0x0079, 0x883a, 0x8843, 0x8841, 0x8841, 0x8841, 0x8841, 0x8841,
-+ 0x885e, 0x1078, 0x1332, 0x1078, 0x61cd, 0x6030, 0xa08c, 0xff00,
-+ 0x810f, 0xa186, 0x0039, 0x0040, 0x8851, 0xa186, 0x0035, 0x00c0,
-+ 0x8855, 0x2001, 0xa8a2, 0x0078, 0x8857, 0x2001, 0xa8a3, 0x2004,
-+ 0x6016, 0x6003, 0x000c, 0x1078, 0x62d1, 0x007c, 0x1078, 0x61cd,
-+ 0x6030, 0xa08c, 0xff00, 0x810f, 0xa186, 0x0039, 0x0040, 0x886c,
-+ 0xa186, 0x0035, 0x00c0, 0x8870, 0x2001, 0xa8a2, 0x0078, 0x8872,
-+ 0x2001, 0xa8a3, 0x2004, 0x6016, 0x6003, 0x000e, 0x1078, 0x62d1,
-+ 0x007c, 0xa182, 0x008c, 0x00c8, 0x8883, 0xa182, 0x0085, 0x0048,
-+ 0x8883, 0x0079, 0x8886, 0x1078, 0x7773, 0x007c, 0x888d, 0x888d,
-+ 0x888d, 0x888d, 0x888f, 0x88ec, 0x888d, 0x1078, 0x1332, 0x0f7e,
-+ 0x2c78, 0x1078, 0x4963, 0x0f7f, 0x0040, 0x88a2, 0x6030, 0xa08c,
-+ 0xff00, 0x810f, 0xa186, 0x0039, 0x0040, 0x8903, 0xa186, 0x0035,
-+ 0x0040, 0x8903, 0x0d7e, 0x1078, 0x8d06, 0x00c0, 0x88ab, 0x1078,
-+ 0x8eb9, 0x0078, 0x88ce, 0x6010, 0x2068, 0x684c, 0xd0e4, 0x00c0,
-+ 0x88b3, 0x1078, 0x8eb9, 0x6837, 0x0103, 0x6850, 0xd0b4, 0x0040,
-+ 0x88bf, 0x684b, 0x0006, 0xc0ec, 0x6852, 0x0078, 0x88ca, 0xd0bc,
-+ 0x0040, 0x88c6, 0x684b, 0x0002, 0x0078, 0x88ca, 0x684b, 0x0005,
-+ 0x1078, 0x8f85, 0x6847, 0x0000, 0x1078, 0x4a73, 0x2c68, 0x1078,
-+ 0x76c7, 0x0040, 0x88e7, 0x6003, 0x0001, 0x6007, 0x001e, 0x2009,
-+ 0xab8e, 0x210c, 0x6136, 0x2009, 0xab8f, 0x210c, 0x613a, 0x6918,
-+ 0x611a, 0x6920, 0x6122, 0x601f, 0x0001, 0x1078, 0x5d8a, 0x2d60,
-+ 0x1078, 0x772d, 0x0d7f, 0x007c, 0x0f7e, 0x2c78, 0x1078, 0x4963,
-+ 0x0f7f, 0x0040, 0x8929, 0x6030, 0xa08c, 0xff00, 0x810f, 0xa186,
-+ 0x0035, 0x0040, 0x8903, 0xa186, 0x001e, 0x0040, 0x8903, 0xa186,
-+ 0x0039, 0x00c0, 0x8929, 0x0d7e, 0x2c68, 0x1078, 0x91bc, 0x00c0,
-+ 0x894d, 0x1078, 0x76c7, 0x0040, 0x8926, 0x6106, 0x6003, 0x0001,
-+ 0x601f, 0x0001, 0x6918, 0x611a, 0x6928, 0x612a, 0x692c, 0x612e,
-+ 0x6930, 0xa18c, 0x00ff, 0x6132, 0x6934, 0x6136, 0x6938, 0x613a,
-+ 0x6920, 0x6122, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x2d60, 0x0078,
-+ 0x894d, 0x0d7e, 0x6010, 0x2068, 0x1078, 0x8d06, 0x0040, 0x894d,
-+ 0x6837, 0x0103, 0x6850, 0xd0b4, 0x0040, 0x893c, 0xc0ec, 0x6852,
-+ 0x684b, 0x0006, 0x0078, 0x8947, 0xd0bc, 0x0040, 0x8943, 0x684b,
-+ 0x0002, 0x0078, 0x8947, 0x684b, 0x0005, 0x1078, 0x8f85, 0x6847,
-+ 0x0000, 0x1078, 0x4a73, 0x1078, 0x8eb9, 0x0d7f, 0x1078, 0x772d,
-+ 0x007c, 0x017e, 0x0d7e, 0x6010, 0x2068, 0x1078, 0x8d06, 0x0040,
-+ 0x8961, 0x6837, 0x0103, 0x684b, 0x0028, 0x6847, 0x0000, 0x1078,
-+ 0x4a73, 0x0d7f, 0x017f, 0xa186, 0x0013, 0x0040, 0x8973, 0xa186,
-+ 0x0014, 0x0040, 0x8973, 0xa186, 0x0027, 0x0040, 0x8973, 0x1078,
-+ 0x7773, 0x0078, 0x8979, 0x1078, 0x61cd, 0x1078, 0x8ec6, 0x1078,
-+ 0x62d1, 0x007c, 0x057e, 0x067e, 0x0d7e, 0x0f7e, 0x2029, 0x0001,
-+ 0xa182, 0x0101, 0x00c8, 0x8986, 0x0078, 0x8988, 0x2009, 0x0100,
-+ 0x2130, 0x2069, 0xab98, 0x831c, 0x2300, 0xad18, 0x2009, 0x0020,
-+ 0xaf90, 0x001d, 0x1078, 0x89e2, 0xa6b2, 0x0020, 0x7804, 0xa06d,
-+ 0x0040, 0x899c, 0x1078, 0x13b4, 0x1078, 0x138b, 0x0040, 0x89c6,
-+ 0x8528, 0x6837, 0x0110, 0x683b, 0x0000, 0x2d20, 0x7c06, 0xa68a,
-+ 0x003d, 0x00c8, 0x89b2, 0x2608, 0xad90, 0x000f, 0x1078, 0x89e2,
-+ 0x0078, 0x89c6, 0xa6b2, 0x003c, 0x2009, 0x003c, 0x2d78, 0xad90,
-+ 0x000f, 0x1078, 0x89e2, 0x0078, 0x899c, 0x0f7f, 0x852f, 0xa5ad,
-+ 0x0003, 0x7d36, 0xa5ac, 0x0000, 0x0078, 0x89cb, 0x0f7f, 0x852f,
-+ 0xa5ad, 0x0003, 0x7d36, 0x0d7f, 0x067f, 0x057f, 0x007c, 0x0f7e,
-+ 0x8dff, 0x0040, 0x89e0, 0x6804, 0xa07d, 0x0040, 0x89de, 0x6807,
-+ 0x0000, 0x1078, 0x4a73, 0x2f68, 0x0078, 0x89d3, 0x1078, 0x4a73,
-+ 0x0f7f, 0x007c, 0x157e, 0xa184, 0x0001, 0x0040, 0x89e8, 0x8108,
-+ 0x810c, 0x21a8, 0x2304, 0x8007, 0x2012, 0x8318, 0x8210, 0x00f0,
-+ 0x89ea, 0x157f, 0x007c, 0x067e, 0x127e, 0x2091, 0x8000, 0x2031,
-+ 0x0001, 0x601c, 0xa084, 0x000f, 0x1079, 0x8a0f, 0x127f, 0x067f,
-+ 0x007c, 0x127e, 0x2091, 0x8000, 0x067e, 0x2031, 0x0000, 0x601c,
-+ 0xa084, 0x000f, 0x1079, 0x8a0f, 0x067f, 0x127f, 0x007c, 0x8a29,
-+ 0x8a17, 0x8a24, 0x8a45, 0x8a17, 0x8a24, 0x8a45, 0x8a24, 0x1078,
-+ 0x1332, 0x037e, 0x2019, 0x0010, 0x1078, 0x9dc7, 0x601f, 0x0006,
-+ 0x6003, 0x0007, 0x037f, 0x007c, 0xa006, 0x007c, 0xa085, 0x0001,
-+ 0x007c, 0x0d7e, 0x86ff, 0x00c0, 0x8a40, 0x6010, 0x2068, 0x1078,
-+ 0x8d06, 0x0040, 0x8a42, 0xa00e, 0x2001, 0x0005, 0x1078, 0x4b51,
-+ 0x1078, 0x8f85, 0x1078, 0x4a73, 0x1078, 0x772d, 0xa085, 0x0001,
-+ 0x0d7f, 0x007c, 0xa006, 0x0078, 0x8a40, 0x6000, 0xa08a, 0x0010,
-+ 0x10c8, 0x1332, 0x1079, 0x8a4d, 0x007c, 0x8a5d, 0x8a82, 0x8a5f,
-+ 0x8aa5, 0x8a7e, 0x8a5d, 0x8a24, 0x8a29, 0x8a29, 0x8a24, 0x8a24,
-+ 0x8a24, 0x8a24, 0x8a24, 0x8a24, 0x8a24, 0x1078, 0x1332, 0x86ff,
-+ 0x00c0, 0x8a7b, 0x601c, 0xa086, 0x0006, 0x0040, 0x8a7b, 0x0d7e,
-+ 0x6010, 0x2068, 0x1078, 0x8d06, 0x0040, 0x8a70, 0x1078, 0x8f85,
-+ 0x0d7f, 0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0002, 0x1078,
-+ 0x5d8a, 0x1078, 0x62d1, 0xa085, 0x0001, 0x007c, 0x1078, 0x1757,
-+ 0x0078, 0x8a5f, 0x0e7e, 0x2071, 0xa8b1, 0x7024, 0xac06, 0x00c0,
-+ 0x8a8b, 0x1078, 0x6fc4, 0x601c, 0xa084, 0x000f, 0xa086, 0x0006,
-+ 0x00c0, 0x8a9d, 0x087e, 0x097e, 0x2049, 0x0001, 0x2c40, 0x1078,
-+ 0x7246, 0x097f, 0x087f, 0x0078, 0x8a9f, 0x1078, 0x6ebe, 0x0e7f,
-+ 0x00c0, 0x8a5f, 0x1078, 0x8a24, 0x007c, 0x037e, 0x0e7e, 0x2071,
-+ 0xa8b1, 0x703c, 0xac06, 0x00c0, 0x8ab5, 0x2019, 0x0000, 0x1078,
-+ 0x7058, 0x0e7f, 0x037f, 0x0078, 0x8a5f, 0x1078, 0x738a, 0x0e7f,
-+ 0x037f, 0x00c0, 0x8a5f, 0x1078, 0x8a24, 0x007c, 0x0c7e, 0x601c,
-+ 0xa084, 0x000f, 0x1079, 0x8ac6, 0x0c7f, 0x007c, 0x8ad5, 0x8b47,
-+ 0x8c7f, 0x8ae0, 0x8ec6, 0x8ad5, 0x9db8, 0x772d, 0x8b47, 0x1078,
-+ 0x8f00, 0x00c0, 0x8ad5, 0x1078, 0x7c83, 0x007c, 0x1078, 0x61cd,
-+ 0x1078, 0x62d1, 0x1078, 0x772d, 0x007c, 0x6017, 0x0001, 0x007c,
-+ 0x1078, 0x8d06, 0x0040, 0x8ae8, 0x6010, 0xa080, 0x0019, 0x2c02,
-+ 0x6000, 0xa08a, 0x0010, 0x10c8, 0x1332, 0x1079, 0x8af0, 0x007c,
-+ 0x8b00, 0x8b02, 0x8b24, 0x8b36, 0x8b43, 0x8b00, 0x8ad5, 0x8ad5,
-+ 0x8ad5, 0x8b36, 0x8b36, 0x8b00, 0x8b00, 0x8b00, 0x8b00, 0x8b40,
-+ 0x1078, 0x1332, 0x0e7e, 0x6010, 0x2070, 0x7050, 0xc0b5, 0x7052,
-+ 0x2071, 0xa8b1, 0x7024, 0xac06, 0x0040, 0x8b20, 0x1078, 0x6ebe,
-+ 0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0002, 0x2001, 0xa8a3,
-+ 0x2004, 0x6016, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0e7f, 0x007c,
-+ 0x6017, 0x0001, 0x0078, 0x8b1e, 0x0d7e, 0x6010, 0x2068, 0x6850,
-+ 0xc0b5, 0x6852, 0x0d7f, 0x6007, 0x0085, 0x6003, 0x000b, 0x601f,
-+ 0x0002, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x007c, 0x0d7e, 0x6017,
-+ 0x0001, 0x6010, 0x2068, 0x6850, 0xc0b5, 0x6852, 0x0d7f, 0x007c,
-+ 0x1078, 0x772d, 0x007c, 0x1078, 0x1757, 0x0078, 0x8b24, 0x6000,
-+ 0xa08a, 0x0010, 0x10c8, 0x1332, 0x1079, 0x8b4f, 0x007c, 0x8b5f,
-+ 0x8add, 0x8b61, 0x8b5f, 0x8b61, 0x8b61, 0x8ad6, 0x8b5f, 0x8acf,
-+ 0x8acf, 0x8b5f, 0x8b5f, 0x8b5f, 0x8b5f, 0x8b5f, 0x8b5f, 0x1078,
-+ 0x1332, 0x0d7e, 0x6018, 0x2068, 0x6804, 0xa084, 0x00ff, 0x0d7f,
-+ 0xa08a, 0x000c, 0x10c8, 0x1332, 0x1079, 0x8b6f, 0x007c, 0x8b7b,
-+ 0x8c23, 0x8b7d, 0x8bbd, 0x8b7d, 0x8bbd, 0x8b7d, 0x8b8a, 0x8b7b,
-+ 0x8bbd, 0x8b7b, 0x8ba7, 0x1078, 0x1332, 0x6004, 0xa08e, 0x0016,
-+ 0x0040, 0x8bb8, 0xa08e, 0x0004, 0x0040, 0x8bb8, 0xa08e, 0x0002,
-+ 0x0040, 0x8bb8, 0x6004, 0x1078, 0x8f00, 0x0040, 0x8c3e, 0xa08e,
-+ 0x0021, 0x0040, 0x8c42, 0xa08e, 0x0022, 0x0040, 0x8c3e, 0xa08e,
-+ 0x003d, 0x0040, 0x8c42, 0xa08e, 0x0039, 0x0040, 0x8c46, 0xa08e,
-+ 0x0035, 0x0040, 0x8c46, 0xa08e, 0x001e, 0x0040, 0x8bba, 0xa08e,
-+ 0x0001, 0x00c0, 0x8bb6, 0x0d7e, 0x6018, 0x2068, 0x6804, 0xa084,
-+ 0x00ff, 0x0d7f, 0xa086, 0x0006, 0x0040, 0x8bb8, 0x1078, 0x2880,
-+ 0x1078, 0x7c83, 0x1078, 0x8ec6, 0x007c, 0x0c7e, 0x0d7e, 0x6104,
-+ 0xa186, 0x0016, 0x0040, 0x8c13, 0xa186, 0x0002, 0x00c0, 0x8be6,
-+ 0x6018, 0x2068, 0x68a0, 0xd0bc, 0x00c0, 0x8c6a, 0x6840, 0xa084,
-+ 0x00ff, 0xa005, 0x0040, 0x8be6, 0x8001, 0x6842, 0x6013, 0x0000,
-+ 0x601f, 0x0007, 0x6017, 0x0398, 0x1078, 0x76c7, 0x0040, 0x8be6,
-+ 0x2d00, 0x601a, 0x601f, 0x0001, 0x0078, 0x8c13, 0x0d7f, 0x0c7f,
-+ 0x6004, 0xa08e, 0x0002, 0x00c0, 0x8c04, 0x6018, 0xa080, 0x0028,
-+ 0x2004, 0xa086, 0x007e, 0x00c0, 0x8c04, 0x2009, 0xa633, 0x2104,
-+ 0xc085, 0x200a, 0x0e7e, 0x2071, 0xa600, 0x1078, 0x42b8, 0x0e7f,
-+ 0x1078, 0x7c83, 0x0078, 0x8c08, 0x1078, 0x7c83, 0x1078, 0x2880,
-+ 0x0e7e, 0x127e, 0x2091, 0x8000, 0x1078, 0x28a6, 0x127f, 0x0e7f,
-+ 0x1078, 0x8ec6, 0x007c, 0x2001, 0x0002, 0x1078, 0x4502, 0x6003,
-+ 0x0001, 0x6007, 0x0002, 0x1078, 0x5dd7, 0x1078, 0x62d1, 0x0d7f,
-+ 0x0c7f, 0x0078, 0x8c12, 0x0c7e, 0x0d7e, 0x6104, 0xa186, 0x0016,
-+ 0x0040, 0x8c13, 0x6018, 0x2068, 0x6840, 0xa084, 0x00ff, 0xa005,
-+ 0x0040, 0x8be6, 0x8001, 0x6842, 0x6003, 0x0001, 0x1078, 0x5dd7,
-+ 0x1078, 0x62d1, 0x0d7f, 0x0c7f, 0x0078, 0x8c12, 0x1078, 0x7c83,
-+ 0x0078, 0x8bba, 0x1078, 0x7ca6, 0x0078, 0x8bba, 0x0d7e, 0x2c68,
-+ 0x6104, 0x1078, 0x91bc, 0x0d7f, 0x0040, 0x8c52, 0x1078, 0x772d,
-+ 0x0078, 0x8c69, 0x6004, 0x8007, 0x6130, 0xa18c, 0x00ff, 0xa105,
-+ 0x6032, 0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0002, 0x6038,
-+ 0x600a, 0x2001, 0xa8a3, 0x2004, 0x6016, 0x1078, 0x5d8a, 0x1078,
-+ 0x62d1, 0x007c, 0x0d7f, 0x0c7f, 0x1078, 0x7c83, 0x1078, 0x2880,
-+ 0x0e7e, 0x127e, 0x2091, 0x8000, 0x1078, 0x28a6, 0x6013, 0x0000,
-+ 0x601f, 0x0007, 0x6017, 0x0398, 0x127f, 0x0e7f, 0x007c, 0x6000,
-+ 0xa08a, 0x0010, 0x10c8, 0x1332, 0x1079, 0x8c87, 0x007c, 0x8c97,
-+ 0x8c97, 0x8c97, 0x8c97, 0x8c97, 0x8c97, 0x8c97, 0x8c97, 0x8c97,
-+ 0x8ad5, 0x8c97, 0x8add, 0x8c99, 0x8add, 0x8ca7, 0x8c97, 0x1078,
-+ 0x1332, 0x6004, 0xa086, 0x008b, 0x0040, 0x8ca7, 0x6007, 0x008b,
-+ 0x6003, 0x000d, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x007c, 0x1078,
-+ 0x8eb9, 0x1078, 0x8d06, 0x0040, 0x8cdf, 0x1078, 0x2880, 0x0d7e,
-+ 0x1078, 0x8d06, 0x0040, 0x8cc1, 0x6010, 0x2068, 0x6837, 0x0103,
-+ 0x684b, 0x0006, 0x6847, 0x0000, 0x6850, 0xc0ed, 0x6852, 0x1078,
-+ 0x4a73, 0x2c68, 0x1078, 0x76c7, 0x0040, 0x8ccf, 0x6818, 0x601a,
-+ 0x0c7e, 0x2d60, 0x1078, 0x8ec6, 0x0c7f, 0x0078, 0x8cd0, 0x2d60,
-+ 0x0d7f, 0x6013, 0x0000, 0x601f, 0x0001, 0x6007, 0x0001, 0x6003,
-+ 0x0001, 0x1078, 0x5dd7, 0x1078, 0x62d1, 0x0078, 0x8cf1, 0x6030,
-+ 0xa08c, 0xff00, 0x810f, 0xa186, 0x0039, 0x0040, 0x8ceb, 0xa186,
-+ 0x0035, 0x00c0, 0x8cef, 0x1078, 0x2880, 0x0078, 0x8cc1, 0x1078,
-+ 0x8ec6, 0x007c, 0xa284, 0x000f, 0x00c0, 0x8d03, 0xa282, 0xad00,
-+ 0x0048, 0x8d03, 0x2001, 0xa616, 0x2004, 0xa202, 0x00c8, 0x8d03,
-+ 0xa085, 0x0001, 0x007c, 0xa006, 0x0078, 0x8d02, 0x027e, 0x0e7e,
-+ 0x2071, 0xa600, 0x6210, 0x705c, 0xa202, 0x0048, 0x8d18, 0x7060,
-+ 0xa202, 0x00c8, 0x8d18, 0xa085, 0x0001, 0x0e7f, 0x027f, 0x007c,
-+ 0xa006, 0x0078, 0x8d15, 0x0e7e, 0x0c7e, 0x037e, 0x007e, 0x127e,
-+ 0x2091, 0x8000, 0x2061, 0xad00, 0x2071, 0xa600, 0x7348, 0x7064,
-+ 0xa302, 0x00c8, 0x8d45, 0x601c, 0xa206, 0x00c0, 0x8d3d, 0x1078,
-+ 0x902b, 0x0040, 0x8d3d, 0x1078, 0x8f00, 0x00c0, 0x8d39, 0x1078,
-+ 0x7c83, 0x0c7e, 0x1078, 0x772d, 0x0c7f, 0xace0, 0x0010, 0x7058,
-+ 0xac02, 0x00c8, 0x8d45, 0x0078, 0x8d26, 0x127f, 0x007f, 0x037f,
-+ 0x0c7f, 0x0e7f, 0x007c, 0x0e7e, 0x0c7e, 0x017e, 0xa188, 0xa735,
-+ 0x210c, 0x81ff, 0x0040, 0x8d59, 0x2061, 0xa9b3, 0x611a, 0x1078,
-+ 0x2880, 0xa006, 0x0078, 0x8d5e, 0xa085, 0x0001, 0x017f, 0x0c7f,
-+ 0x0e7f, 0x007c, 0x0c7e, 0x057e, 0x127e, 0x2091, 0x8000, 0x0c7e,
-+ 0x1078, 0x76c7, 0x057f, 0x0040, 0x8d7b, 0x6612, 0x651a, 0x601f,
-+ 0x0003, 0x2009, 0x004b, 0x1078, 0x775c, 0xa085, 0x0001, 0x127f,
-+ 0x057f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x8d77, 0x0c7e, 0x057e,
-+ 0x127e, 0x2091, 0x8000, 0x62a0, 0x0c7e, 0x1078, 0x76c7, 0x057f,
-+ 0x0040, 0x8da9, 0x6013, 0x0000, 0x651a, 0x601f, 0x0003, 0x0c7e,
-+ 0x2560, 0x1078, 0x47e9, 0x0c7f, 0x1078, 0x5f01, 0x077e, 0x2039,
-+ 0x0000, 0x1078, 0x5e0a, 0x2c08, 0x1078, 0x9f8b, 0x077f, 0x2009,
-+ 0x004c, 0x1078, 0x775c, 0xa085, 0x0001, 0x127f, 0x057f, 0x0c7f,
-+ 0x007c, 0xa006, 0x0078, 0x8da5, 0x0f7e, 0x0c7e, 0x047e, 0x0c7e,
-+ 0x1078, 0x76c7, 0x2c78, 0x0c7f, 0x0040, 0x8dc6, 0x7e12, 0x2c00,
-+ 0x781a, 0x781f, 0x0003, 0x2021, 0x0005, 0x1078, 0x8e11, 0x2f60,
-+ 0x2009, 0x004d, 0x1078, 0x775c, 0xa085, 0x0001, 0x047f, 0x0c7f,
-+ 0x0f7f, 0x007c, 0x0f7e, 0x0c7e, 0x047e, 0x0c7e, 0x1078, 0x76c7,
-+ 0x2c78, 0x0c7f, 0x0040, 0x8de4, 0x7e12, 0x2c00, 0x781a, 0x781f,
-+ 0x0003, 0x2021, 0x0005, 0x1078, 0x8e11, 0x2f60, 0x2009, 0x004e,
-+ 0x1078, 0x775c, 0xa085, 0x0001, 0x047f, 0x0c7f, 0x0f7f, 0x007c,
-+ 0x0f7e, 0x0c7e, 0x047e, 0x0c7e, 0x1078, 0x76c7, 0x2c78, 0x0c7f,
-+ 0x0040, 0x8e0d, 0x7e12, 0x2c00, 0x781a, 0x781f, 0x0003, 0x2021,
-+ 0x0004, 0x1078, 0x8e11, 0x2001, 0xa89d, 0x2004, 0xd0fc, 0x0040,
-+ 0x8e06, 0x2f60, 0x1078, 0x772d, 0x0078, 0x8e0b, 0x2f60, 0x2009,
-+ 0x0052, 0x1078, 0x775c, 0xa085, 0x0001, 0x047f, 0x0c7f, 0x0f7f,
-+ 0x007c, 0x097e, 0x077e, 0x127e, 0x2091, 0x8000, 0x1078, 0x4775,
-+ 0x0040, 0x8e1e, 0x2001, 0x8e16, 0x0078, 0x8e24, 0x1078, 0x4739,
-+ 0x0040, 0x8e2d, 0x2001, 0x8e1e, 0x007e, 0xa00e, 0x2400, 0x1078,
-+ 0x4b51, 0x1078, 0x4a73, 0x007f, 0x007a, 0x2418, 0x1078, 0x6161,
-+ 0x62a0, 0x087e, 0x2041, 0x0001, 0x2039, 0x0001, 0x2608, 0x1078,
-+ 0x5f1b, 0x087f, 0x1078, 0x5e0a, 0x2f08, 0x2648, 0x1078, 0x9f8b,
-+ 0x613c, 0x81ff, 0x1040, 0x5fdb, 0x1078, 0x62d1, 0x127f, 0x077f,
-+ 0x097f, 0x007c, 0x0c7e, 0x127e, 0x2091, 0x8000, 0x0c7e, 0x1078,
-+ 0x76c7, 0x017f, 0x0040, 0x8e63, 0x660a, 0x611a, 0x601f, 0x0001,
-+ 0x2d00, 0x6012, 0x2009, 0x001f, 0x1078, 0x775c, 0xa085, 0x0001,
-+ 0x127f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x8e60, 0x0c7e, 0x127e,
-+ 0x2091, 0x8000, 0x0c7e, 0x1078, 0x76c7, 0x017f, 0x0040, 0x8e7f,
-+ 0x660a, 0x611a, 0x601f, 0x0008, 0x2d00, 0x6012, 0x2009, 0x0021,
-+ 0x1078, 0x775c, 0xa085, 0x0001, 0x127f, 0x0c7f, 0x007c, 0xa006,
-+ 0x0078, 0x8e7c, 0x0c7e, 0x127e, 0x2091, 0x8000, 0x0c7e, 0x1078,
-+ 0x76c7, 0x017f, 0x0040, 0x8e9b, 0x660a, 0x611a, 0x601f, 0x0001,
-+ 0x2d00, 0x6012, 0x2009, 0x003d, 0x1078, 0x775c, 0xa085, 0x0001,
-+ 0x127f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x8e98, 0x0c7e, 0x127e,
-+ 0x2091, 0x8000, 0x0c7e, 0x1078, 0x76c7, 0x017f, 0x0040, 0x8eb6,
-+ 0x611a, 0x601f, 0x0001, 0x2d00, 0x6012, 0x2009, 0x0000, 0x1078,
-+ 0x775c, 0xa085, 0x0001, 0x127f, 0x0c7f, 0x007c, 0xa006, 0x0078,
-+ 0x8eb3, 0x027e, 0x0d7e, 0x6218, 0x2268, 0x6a3c, 0x82ff, 0x0040,
-+ 0x8ec3, 0x8211, 0x6a3e, 0x0d7f, 0x027f, 0x007c, 0x007e, 0x6000,
-+ 0xa086, 0x0000, 0x0040, 0x8ed8, 0x6013, 0x0000, 0x601f, 0x0007,
-+ 0x2001, 0xa8a3, 0x2004, 0x6016, 0x1078, 0xa495, 0x603f, 0x0000,
-+ 0x007f, 0x007c, 0x067e, 0x0c7e, 0x0d7e, 0x2031, 0xa653, 0x2634,
-+ 0xd6e4, 0x0040, 0x8ee8, 0x6618, 0x2660, 0x6e48, 0x1078, 0x46e7,
-+ 0x0d7f, 0x0c7f, 0x067f, 0x007c, 0x007e, 0x017e, 0x6004, 0xa08e,
-+ 0x0002, 0x0040, 0x8efd, 0xa08e, 0x0003, 0x0040, 0x8efd, 0xa08e,
-+ 0x0004, 0x0040, 0x8efd, 0xa085, 0x0001, 0x017f, 0x007f, 0x007c,
-+ 0x007e, 0x0d7e, 0x6010, 0xa06d, 0x0040, 0x8f0d, 0x6838, 0xd0fc,
-+ 0x0040, 0x8f0d, 0xa006, 0x0078, 0x8f0f, 0xa085, 0x0001, 0x0d7f,
-+ 0x007f, 0x007c, 0x0c7e, 0x127e, 0x2091, 0x8000, 0x0c7e, 0x1078,
-+ 0x76c7, 0x017f, 0x0040, 0x8f2c, 0x611a, 0x601f, 0x0001, 0x2d00,
-+ 0x6012, 0x1078, 0x2880, 0x2009, 0x0028, 0x1078, 0x775c, 0xa085,
-+ 0x0001, 0x127f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x8f29, 0xa186,
-+ 0x0015, 0x00c0, 0x8f44, 0x2011, 0xa620, 0x2204, 0xa086, 0x0074,
-+ 0x00c0, 0x8f44, 0x1078, 0x7f91, 0x6003, 0x0001, 0x6007, 0x0029,
-+ 0x1078, 0x5dd7, 0x0078, 0x8f48, 0x1078, 0x7c83, 0x1078, 0x772d,
-+ 0x007c, 0xa186, 0x0016, 0x00c0, 0x8f53, 0x2001, 0x0004, 0x1078,
-+ 0x4502, 0x0078, 0x8f74, 0xa186, 0x0015, 0x00c0, 0x8f78, 0x2011,
-+ 0xa620, 0x2204, 0xa086, 0x0014, 0x00c0, 0x8f78, 0x0d7e, 0x6018,
-+ 0x2068, 0x1078, 0x4649, 0x0d7f, 0x1078, 0x8043, 0x00c0, 0x8f78,
-+ 0x0d7e, 0x6018, 0x2068, 0x6890, 0x0d7f, 0xa005, 0x0040, 0x8f78,
-+ 0x2001, 0x0006, 0x1078, 0x4502, 0x1078, 0x77f8, 0x0078, 0x8f7c,
-+ 0x1078, 0x7c83, 0x1078, 0x772d, 0x007c, 0x6848, 0xa086, 0x0005,
-+ 0x00c0, 0x8f84, 0x1078, 0x8f85, 0x007c, 0x6850, 0xc0ad, 0x6852,
-+ 0x007c, 0x0e7e, 0x2071, 0xab8c, 0x7014, 0xd0e4, 0x0040, 0x8f9a,
-+ 0x6013, 0x0000, 0x6003, 0x0001, 0x6007, 0x0050, 0x1078, 0x5d8a,
-+ 0x1078, 0x62d1, 0x0e7f, 0x007c, 0x0c7e, 0x0f7e, 0x2c78, 0x1078,
-+ 0x4963, 0x0f7f, 0x0040, 0x8fa9, 0x601c, 0xa084, 0x000f, 0x1079,
-+ 0x8fab, 0x0c7f, 0x007c, 0x8ad5, 0x8fb6, 0x8fb9, 0x8fbc, 0xa25d,
-+ 0xa279, 0xa27c, 0x8ad5, 0x8ad5, 0x1078, 0x1332, 0x0005, 0x0005,
-+ 0x007c, 0x0005, 0x0005, 0x007c, 0x1078, 0x8fbf, 0x007c, 0x0f7e,
-+ 0x2c78, 0x1078, 0x4963, 0x0040, 0x8fee, 0x1078, 0x76c7, 0x00c0,
-+ 0x8fcf, 0x2001, 0xa8a4, 0x2004, 0x783e, 0x0078, 0x8fee, 0x7818,
-+ 0x601a, 0x781c, 0xa086, 0x0003, 0x0040, 0x8fdc, 0x7808, 0x6036,
-+ 0x2f00, 0x603a, 0x0078, 0x8fe0, 0x7808, 0x603a, 0x2f00, 0x6036,
-+ 0x602a, 0x601f, 0x0001, 0x6007, 0x0035, 0x6003, 0x0001, 0x7920,
-+ 0x6122, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x2f60, 0x0f7f, 0x007c,
-+ 0x017e, 0x0f7e, 0x682c, 0x6032, 0xa08e, 0x0001, 0x0040, 0x9001,
-+ 0xa086, 0x0005, 0x0040, 0x9005, 0xa006, 0x602a, 0x602e, 0x0078,
-+ 0x9016, 0x6824, 0xc0f4, 0xc0d5, 0x6826, 0x6810, 0x2078, 0x787c,
-+ 0x6938, 0xa102, 0x7880, 0x6934, 0xa103, 0x00c8, 0x8ffc, 0x6834,
-+ 0x602a, 0x6838, 0xa084, 0xfffc, 0x683a, 0x602e, 0x2d00, 0x6036,
-+ 0x6808, 0x603a, 0x6918, 0x611a, 0x6920, 0x6122, 0x601f, 0x0001,
-+ 0x6007, 0x0039, 0x6003, 0x0001, 0x1078, 0x5d8a, 0x6803, 0x0002,
-+ 0x0f7f, 0x017f, 0x007c, 0x007e, 0x017e, 0x6004, 0xa08e, 0x0034,
-+ 0x0040, 0x9050, 0xa08e, 0x0035, 0x0040, 0x9050, 0xa08e, 0x0036,
-+ 0x0040, 0x9050, 0xa08e, 0x0037, 0x0040, 0x9050, 0xa08e, 0x0038,
-+ 0x0040, 0x9050, 0xa08e, 0x0039, 0x0040, 0x9050, 0xa08e, 0x003a,
-+ 0x0040, 0x9050, 0xa08e, 0x003b, 0x0040, 0x9050, 0xa085, 0x0001,
-+ 0x017f, 0x007f, 0x007c, 0x0f7e, 0x2c78, 0x1078, 0x4963, 0x00c0,
-+ 0x905d, 0xa085, 0x0001, 0x0078, 0x906c, 0x6024, 0xd0f4, 0x00c0,
-+ 0x906b, 0xc0f5, 0x6026, 0x6010, 0x2078, 0x7828, 0x603a, 0x782c,
-+ 0x6036, 0x1078, 0x1757, 0xa006, 0x0f7f, 0x007c, 0x007e, 0x017e,
-+ 0x027e, 0x037e, 0x0e7e, 0x2001, 0xa89e, 0x200c, 0x8000, 0x2014,
-+ 0x2001, 0x0032, 0x1078, 0x5c1c, 0x2001, 0xa8a2, 0x82ff, 0x00c0,
-+ 0x9083, 0x2011, 0x0014, 0x2202, 0x2001, 0xa8a0, 0x200c, 0x8000,
-+ 0x2014, 0x2071, 0xa88d, 0x711a, 0x721e, 0x2001, 0x0064, 0x1078,
-+ 0x5c1c, 0x2001, 0xa8a3, 0x82ff, 0x00c0, 0x9098, 0x2011, 0x0014,
-+ 0x2202, 0x2009, 0xa8a4, 0xa280, 0x000a, 0x200a, 0x1078, 0x498b,
-+ 0x0e7f, 0x037f, 0x027f, 0x017f, 0x007f, 0x007c, 0x007e, 0x0e7e,
-+ 0x2001, 0xa8a2, 0x2003, 0x0028, 0x2001, 0xa8a3, 0x2003, 0x0014,
-+ 0x2071, 0xa88d, 0x701b, 0x0000, 0x701f, 0x07d0, 0x2001, 0xa8a4,
-+ 0x2003, 0x001e, 0x0e7f, 0x007f, 0x007c, 0x0c7e, 0x127e, 0x2091,
-+ 0x8000, 0x0c7e, 0x1078, 0x76c7, 0x017f, 0x0040, 0x90d5, 0x611a,
-+ 0x601f, 0x0001, 0x2d00, 0x6012, 0x2009, 0x0033, 0x1078, 0x775c,
-+ 0xa085, 0x0001, 0x127f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x90d2,
-+ 0x0d7e, 0x0e7e, 0x0f7e, 0x2071, 0xa600, 0xa186, 0x0015, 0x00c0,
-+ 0x9107, 0x7080, 0xa086, 0x0018, 0x00c0, 0x9107, 0x6010, 0x2068,
-+ 0x6a3c, 0xd2e4, 0x00c0, 0x90fb, 0x2c78, 0x1078, 0x6490, 0x0040,
-+ 0x910f, 0x706c, 0x6a50, 0xa206, 0x00c0, 0x9103, 0x7070, 0x6a54,
-+ 0xa206, 0x00c0, 0x9103, 0x6218, 0xa290, 0x0028, 0x2214, 0x2009,
-+ 0x0000, 0x1078, 0x28c8, 0x1078, 0x77f8, 0x0078, 0x910b, 0x1078,
-+ 0x7c83, 0x1078, 0x772d, 0x0f7f, 0x0e7f, 0x0d7f, 0x007c, 0x7050,
-+ 0xa080, 0x29c0, 0x2004, 0x6a54, 0xa206, 0x0040, 0x90fb, 0x0078,
-+ 0x9103, 0x0c7e, 0x127e, 0x2091, 0x8000, 0x0c7e, 0x1078, 0x76c7,
-+ 0x017f, 0x0040, 0x9131, 0x611a, 0x601f, 0x0001, 0x2d00, 0x6012,
-+ 0x2009, 0x0043, 0x1078, 0x775c, 0xa085, 0x0001, 0x127f, 0x0c7f,
-+ 0x007c, 0xa006, 0x0078, 0x912e, 0x0d7e, 0x0e7e, 0x0f7e, 0x2071,
-+ 0xa600, 0xa186, 0x0015, 0x00c0, 0x915a, 0x7080, 0xa086, 0x0004,
-+ 0x00c0, 0x915a, 0x6010, 0xa0e8, 0x000f, 0x2c78, 0x1078, 0x6490,
-+ 0x0040, 0x9162, 0x706c, 0x6a08, 0xa206, 0x00c0, 0x9156, 0x7070,
-+ 0x6a0c, 0xa206, 0x00c0, 0x9156, 0x1078, 0x2880, 0x1078, 0x77f8,
-+ 0x0078, 0x915e, 0x1078, 0x7c83, 0x1078, 0x772d, 0x0f7f, 0x0e7f,
-+ 0x0d7f, 0x007c, 0x7050, 0xa080, 0x29c0, 0x2004, 0x6a0c, 0xa206,
-+ 0x0040, 0x9154, 0x0078, 0x9156, 0x017e, 0x027e, 0x684c, 0xd0ac,
-+ 0x0040, 0x9184, 0x6914, 0x6a10, 0x2100, 0xa205, 0x0040, 0x9184,
-+ 0x6860, 0xa106, 0x00c0, 0x9180, 0x685c, 0xa206, 0x0040, 0x9184,
-+ 0x6962, 0x6a5e, 0xa085, 0x0001, 0x027f, 0x017f, 0x007c, 0x0e7e,
-+ 0x127e, 0x2071, 0xa600, 0x2091, 0x8000, 0x7548, 0xa582, 0x0001,
-+ 0x0048, 0x91b9, 0x704c, 0x2060, 0x6000, 0xa086, 0x0000, 0x0040,
-+ 0x91a5, 0xace0, 0x0010, 0x7058, 0xac02, 0x00c8, 0x91a1, 0x0078,
-+ 0x9194, 0x2061, 0xad00, 0x0078, 0x9194, 0x6003, 0x0008, 0x8529,
-+ 0x754a, 0xaca8, 0x0010, 0x7058, 0xa502, 0x00c8, 0x91b5, 0x754e,
-+ 0xa085, 0x0001, 0x127f, 0x0e7f, 0x007c, 0x704f, 0xad00, 0x0078,
-+ 0x91b0, 0xa006, 0x0078, 0x91b2, 0x0c7e, 0x027e, 0x017e, 0xa186,
-+ 0x0035, 0x0040, 0x91c6, 0x6a34, 0x0078, 0x91c7, 0x6a28, 0x1078,
-+ 0x8cf2, 0x0040, 0x91f0, 0x2260, 0x611c, 0xa186, 0x0003, 0x0040,
-+ 0x91d5, 0xa186, 0x0006, 0x00c0, 0x91ec, 0x6834, 0xa206, 0x0040,
-+ 0x91e4, 0x6838, 0xa206, 0x00c0, 0x91ec, 0x6108, 0x6834, 0xa106,
-+ 0x00c0, 0x91ec, 0x0078, 0x91e9, 0x6008, 0x6938, 0xa106, 0x00c0,
-+ 0x91ec, 0x6018, 0x6918, 0xa106, 0x017f, 0x027f, 0x0c7f, 0x007c,
-+ 0xa085, 0x0001, 0x0078, 0x91ec, 0x6944, 0xd1cc, 0x0040, 0x920d,
-+ 0xa18c, 0x00ff, 0xa18e, 0x0002, 0x00c0, 0x920d, 0xad88, 0x001e,
-+ 0x210c, 0xa18c, 0x0f00, 0x810f, 0xa18e, 0x0001, 0x00c0, 0x920d,
-+ 0x6810, 0x6914, 0xa115, 0x10c0, 0x84d5, 0x007c, 0x067e, 0x6000,
-+ 0xa0b2, 0x0010, 0x10c8, 0x1332, 0x1079, 0x9218, 0x067f, 0x007c,
-+ 0x9228, 0x96df, 0x97fb, 0x9228, 0x9228, 0x9228, 0x9228, 0x9228,
-+ 0x9262, 0x988e, 0x9228, 0x9228, 0x9228, 0x9228, 0x9228, 0x9228,
-+ 0x1078, 0x1332, 0x067e, 0x6000, 0xa0b2, 0x0010, 0x10c8, 0x1332,
-+ 0x1079, 0x9234, 0x067f, 0x007c, 0x9244, 0x9d53, 0x9244, 0x9244,
-+ 0x9244, 0x9244, 0x9244, 0x9244, 0x9d11, 0x9da1, 0x9244, 0xa3b0,
-+ 0xa3e4, 0xa3b0, 0xa3e4, 0x9244, 0x1078, 0x1332, 0x067e, 0x6000,
-+ 0xa0b2, 0x0010, 0x10c8, 0x1332, 0x1079, 0x9250, 0x067f, 0x007c,
-+ 0x9260, 0x99eb, 0x9ac7, 0x9af5, 0x9b70, 0x9260, 0x9c76, 0x9c1e,
-+ 0x989a, 0x9ce5, 0x9cfb, 0x9260, 0x9260, 0x9260, 0x9260, 0x9260,
-+ 0x1078, 0x1332, 0xa1b2, 0x0044, 0x10c8, 0x1332, 0x2100, 0x0079,
-+ 0x9269, 0x92a9, 0x9498, 0x92a9, 0x92a9, 0x92a9, 0x94a0, 0x92a9,
-+ 0x92a9, 0x92a9, 0x92a9, 0x92a9, 0x92a9, 0x92a9, 0x92a9, 0x92a9,
-+ 0x92a9, 0x92a9, 0x92a9, 0x92a9, 0x92a9, 0x92a9, 0x92a9, 0x92a9,
-+ 0x92ab, 0x9311, 0x9320, 0x9377, 0x9396, 0x9415, 0x9485, 0x92a9,
-+ 0x92a9, 0x94a4, 0x92a9, 0x92a9, 0x94b7, 0x94c2, 0x92a9, 0x92a9,
-+ 0x92a9, 0x92a9, 0x92a9, 0x94fa, 0x92a9, 0x92a9, 0x9509, 0x92a9,
-+ 0x92a9, 0x92a9, 0x92a9, 0x92a9, 0x92a9, 0x9522, 0x92a9, 0x92a9,
-+ 0x92a9, 0x95af, 0x92a9, 0x92a9, 0x92a9, 0x92a9, 0x92a9, 0x92a9,
-+ 0x9629, 0x1078, 0x1332, 0x1078, 0x4967, 0x00c0, 0x92bb, 0x2001,
-+ 0xa633, 0x2004, 0xd0cc, 0x00c0, 0x92bb, 0xa084, 0x0009, 0xa086,
-+ 0x0008, 0x00c0, 0x92c3, 0x6007, 0x0009, 0x602b, 0x0009, 0x6013,
-+ 0x0000, 0x0078, 0x9493, 0x1078, 0x4957, 0x0e7e, 0x0c7e, 0x037e,
-+ 0x027e, 0x017e, 0x6218, 0x2270, 0x72a0, 0x027e, 0x2019, 0x0029,
-+ 0x1078, 0x5f01, 0x077e, 0x2039, 0x0000, 0x1078, 0x5e0a, 0x2c08,
-+ 0x1078, 0x9f8b, 0x077f, 0x017f, 0x2e60, 0x1078, 0x47e9, 0x017f,
-+ 0x027f, 0x037f, 0x0c7f, 0x0e7f, 0x6618, 0x0c7e, 0x2660, 0x1078,
-+ 0x45d6, 0x0c7f, 0xa6b0, 0x0001, 0x2634, 0xa684, 0x00ff, 0xa082,
-+ 0x0006, 0x0048, 0x9303, 0x1078, 0x9ebf, 0x00c0, 0x9371, 0x1078,
-+ 0x9e50, 0x00c0, 0x92ff, 0x6007, 0x0008, 0x0078, 0x9493, 0x6007,
-+ 0x0009, 0x0078, 0x9493, 0x1078, 0xa09f, 0x0040, 0x930d, 0x1078,
-+ 0x9ebf, 0x0040, 0x92f7, 0x0078, 0x9371, 0x6013, 0x1900, 0x0078,
-+ 0x92ff, 0x1078, 0x29bb, 0x00c0, 0x9664, 0x6106, 0x1078, 0x9e05,
-+ 0x6007, 0x0006, 0x0078, 0x9493, 0x6007, 0x0007, 0x0078, 0x9493,
-+ 0x1078, 0xa41c, 0x00c0, 0x9664, 0x1078, 0x29bb, 0x00c0, 0x9664,
-+ 0x0d7e, 0x6618, 0x2668, 0x6e04, 0xa684, 0x00ff, 0xa082, 0x0006,
-+ 0x00c8, 0x9336, 0x2001, 0x0001, 0x1078, 0x44ee, 0xa6b4, 0xff00,
-+ 0x8637, 0xa686, 0x0006, 0x0040, 0x9353, 0xa686, 0x0004, 0x0040,
-+ 0x9353, 0x6e04, 0xa6b4, 0x00ff, 0xa686, 0x0006, 0x0040, 0x9353,
-+ 0xa686, 0x0004, 0x0040, 0x9353, 0xa686, 0x0005, 0x0040, 0x9353,
-+ 0x0d7f, 0x0078, 0x9371, 0x1078, 0x9f25, 0x00c0, 0x936c, 0xa686,
-+ 0x0006, 0x00c0, 0x9365, 0x027e, 0x6218, 0xa290, 0x0028, 0x2214,
-+ 0x2009, 0x0000, 0x1078, 0x28c8, 0x027f, 0x1078, 0x4649, 0x6007,
-+ 0x000a, 0x0d7f, 0x0078, 0x9493, 0x6007, 0x000b, 0x0d7f, 0x0078,
-+ 0x9493, 0x1078, 0x2880, 0x6007, 0x0001, 0x0078, 0x9493, 0x1078,
-+ 0xa41c, 0x00c0, 0x9664, 0x1078, 0x29bb, 0x00c0, 0x9664, 0x6618,
-+ 0x0d7e, 0x2668, 0x6e04, 0x0d7f, 0xa686, 0x0707, 0x0040, 0x9371,
-+ 0x027e, 0x6218, 0xa290, 0x0028, 0x2214, 0x2009, 0x0000, 0x1078,
-+ 0x28c8, 0x027f, 0x6007, 0x000c, 0x0078, 0x9493, 0x1078, 0x4967,
-+ 0x00c0, 0x93a3, 0x2001, 0xa633, 0x2004, 0xa084, 0x0009, 0xa086,
-+ 0x0008, 0x00c0, 0x93ab, 0x6007, 0x0009, 0x602b, 0x0009, 0x6013,
-+ 0x0000, 0x0078, 0x9493, 0x1078, 0x4957, 0x6618, 0xa6b0, 0x0001,
-+ 0x2634, 0xa684, 0x00ff, 0xa082, 0x0006, 0x0048, 0x93ef, 0xa6b4,
-+ 0xff00, 0x8637, 0xa686, 0x0004, 0x0040, 0x93c2, 0xa686, 0x0006,
-+ 0x00c0, 0x9371, 0x1078, 0x9f34, 0x00c0, 0x93ca, 0x6007, 0x000e,
-+ 0x0078, 0x9493, 0x047e, 0x6418, 0xa4a0, 0x0028, 0x2424, 0xa4a4,
-+ 0x00ff, 0x8427, 0x047e, 0x1078, 0x2880, 0x047f, 0x017e, 0xa006,
-+ 0x2009, 0xa653, 0x210c, 0xd1a4, 0x0040, 0x93e9, 0x2009, 0x0029,
-+ 0x1078, 0xa21d, 0x6018, 0x0d7e, 0x2068, 0x6800, 0xc0e5, 0x6802,
-+ 0x0d7f, 0x017f, 0x047f, 0x6007, 0x0001, 0x0078, 0x9493, 0x2001,
-+ 0x0001, 0x1078, 0x44ee, 0x157e, 0x017e, 0x027e, 0x037e, 0x20a9,
-+ 0x0004, 0x2019, 0xa605, 0x2011, 0xab90, 0x1078, 0x80de, 0x037f,
-+ 0x027f, 0x017f, 0x157f, 0xa005, 0x0040, 0x940f, 0xa6b4, 0xff00,
-+ 0x8637, 0xa686, 0x0006, 0x0040, 0x93c2, 0x0078, 0x9371, 0x6013,
-+ 0x1900, 0x6007, 0x0009, 0x0078, 0x9493, 0x1078, 0x4967, 0x00c0,
-+ 0x9422, 0x2001, 0xa633, 0x2004, 0xa084, 0x0009, 0xa086, 0x0008,
-+ 0x00c0, 0x942a, 0x6007, 0x0009, 0x602b, 0x0009, 0x6013, 0x0000,
-+ 0x0078, 0x9493, 0x1078, 0x4957, 0x6618, 0xa6b0, 0x0001, 0x2634,
-+ 0xa684, 0x00ff, 0xa082, 0x0006, 0x0048, 0x9472, 0xa6b4, 0xff00,
-+ 0x8637, 0xa686, 0x0004, 0x0040, 0x9441, 0xa686, 0x0006, 0x00c0,
-+ 0x9371, 0x1078, 0x9f5f, 0x00c0, 0x944d, 0x1078, 0x9e50, 0x00c0,
-+ 0x944d, 0x6007, 0x0010, 0x0078, 0x9493, 0x047e, 0x6418, 0xa4a0,
-+ 0x0028, 0x2424, 0xa4a4, 0x00ff, 0x8427, 0x047e, 0x1078, 0x2880,
-+ 0x047f, 0x017e, 0xa006, 0x2009, 0xa653, 0x210c, 0xd1a4, 0x0040,
-+ 0x946c, 0x2009, 0x0029, 0x1078, 0xa21d, 0x6018, 0x0d7e, 0x2068,
-+ 0x6800, 0xc0e5, 0x6802, 0x0d7f, 0x017f, 0x047f, 0x6007, 0x0001,
-+ 0x0078, 0x9493, 0x1078, 0xa09f, 0x0040, 0x947f, 0xa6b4, 0xff00,
-+ 0x8637, 0xa686, 0x0006, 0x0040, 0x9441, 0x0078, 0x9371, 0x6013,
-+ 0x1900, 0x6007, 0x0009, 0x0078, 0x9493, 0x1078, 0x29bb, 0x00c0,
-+ 0x9664, 0x1078, 0xa41c, 0x00c0, 0x9664, 0x1078, 0x9667, 0x00c0,
-+ 0x9371, 0x6007, 0x0012, 0x6003, 0x0001, 0x1078, 0x5dd7, 0x007c,
-+ 0x6007, 0x0001, 0x6003, 0x0001, 0x1078, 0x5dd7, 0x0078, 0x9497,
-+ 0x6007, 0x0005, 0x0078, 0x949a, 0x1078, 0xa41c, 0x00c0, 0x9664,
-+ 0x1078, 0x29bb, 0x00c0, 0x9664, 0x1078, 0x9667, 0x00c0, 0x9371,
-+ 0x6007, 0x0020, 0x6003, 0x0001, 0x1078, 0x5dd7, 0x007c, 0x1078,
-+ 0x29bb, 0x00c0, 0x9664, 0x6007, 0x0023, 0x6003, 0x0001, 0x1078,
-+ 0x5dd7, 0x007c, 0x1078, 0xa41c, 0x00c0, 0x9664, 0x1078, 0x29bb,
-+ 0x00c0, 0x9664, 0x1078, 0x9667, 0x00c0, 0x9371, 0x017e, 0x027e,
-+ 0x2011, 0xab90, 0x2214, 0x2c08, 0xa006, 0x1078, 0xa1e6, 0x00c0,
-+ 0x94e9, 0x2160, 0x6007, 0x0026, 0x6013, 0x1700, 0x2011, 0xab89,
-+ 0x2214, 0xa296, 0xffff, 0x00c0, 0x94f3, 0x6007, 0x0025, 0x0078,
-+ 0x94f3, 0x6004, 0xa086, 0x0024, 0x00c0, 0x94f0, 0x1078, 0x772d,
-+ 0x2160, 0x6007, 0x0025, 0x6003, 0x0001, 0x1078, 0x5dd7, 0x027f,
-+ 0x017f, 0x007c, 0x1078, 0x29bb, 0x00c0, 0x9664, 0x6106, 0x1078,
-+ 0x9687, 0x6007, 0x002b, 0x0078, 0x9493, 0x6007, 0x002c, 0x0078,
-+ 0x9493, 0x1078, 0xa41c, 0x00c0, 0x9664, 0x1078, 0x29bb, 0x00c0,
-+ 0x9664, 0x1078, 0x9667, 0x00c0, 0x9371, 0x6106, 0x1078, 0x968c,
-+ 0x00c0, 0x951e, 0x6007, 0x002e, 0x0078, 0x9493, 0x6007, 0x002f,
-+ 0x0078, 0x9493, 0x1078, 0x29bb, 0x00c0, 0x9664, 0x0e7e, 0x0d7e,
-+ 0x0c7e, 0x6018, 0xa080, 0x0001, 0x200c, 0xa184, 0x00ff, 0xa086,
-+ 0x0006, 0x0040, 0x953f, 0xa184, 0xff00, 0x8007, 0xa086, 0x0006,
-+ 0x0040, 0x953f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0078, 0x9498, 0x2001,
-+ 0xa672, 0x2004, 0xd0e4, 0x0040, 0x95ab, 0x2071, 0xab8c, 0x7010,
-+ 0x6036, 0x7014, 0x603a, 0x7108, 0x720c, 0x2001, 0xa653, 0x2004,
-+ 0xd0a4, 0x0040, 0x955d, 0x6018, 0x2068, 0x6810, 0xa106, 0x00c0,
-+ 0x955d, 0x6814, 0xa206, 0x0040, 0x9581, 0x2001, 0xa653, 0x2004,
-+ 0xd0ac, 0x00c0, 0x959f, 0x2069, 0xa600, 0x6870, 0xa206, 0x00c0,
-+ 0x959f, 0x686c, 0xa106, 0x00c0, 0x959f, 0x7210, 0x1078, 0x8cf2,
-+ 0x0040, 0x95a5, 0x1078, 0xa28e, 0x0040, 0x95a5, 0x622a, 0x6007,
-+ 0x0036, 0x6003, 0x0001, 0x1078, 0x5d8a, 0x0c7f, 0x0d7f, 0x0e7f,
-+ 0x007c, 0x7214, 0xa286, 0xffff, 0x0040, 0x9593, 0x1078, 0x8cf2,
-+ 0x0040, 0x95a5, 0xa280, 0x0002, 0x2004, 0x7110, 0xa106, 0x00c0,
-+ 0x95a5, 0x0078, 0x956e, 0x7210, 0x2c08, 0xa085, 0x0001, 0x1078,
-+ 0xa1e6, 0x2c10, 0x2160, 0x0040, 0x95a5, 0x0078, 0x956e, 0x6007,
-+ 0x0037, 0x6013, 0x1500, 0x0078, 0x9579, 0x6007, 0x0037, 0x6013,
-+ 0x1700, 0x0078, 0x9579, 0x6007, 0x0012, 0x0078, 0x9579, 0x1078,
-+ 0x29bb, 0x00c0, 0x9664, 0x6018, 0xa080, 0x0001, 0x2004, 0xa084,
-+ 0xff00, 0x8007, 0xa086, 0x0006, 0x00c0, 0x9498, 0x0e7e, 0x0d7e,
-+ 0x0c7e, 0x2001, 0xa672, 0x2004, 0xd0e4, 0x0040, 0x9621, 0x2069,
-+ 0xa600, 0x2071, 0xab8c, 0x7008, 0x6036, 0x720c, 0x623a, 0xa286,
-+ 0xffff, 0x00c0, 0x95de, 0x7208, 0x0c7e, 0x2c08, 0xa085, 0x0001,
-+ 0x1078, 0xa1e6, 0x2c10, 0x0c7f, 0x0040, 0x9615, 0x1078, 0x8cf2,
-+ 0x0040, 0x9615, 0x0c7e, 0x027e, 0x2260, 0x1078, 0x89f3, 0x027f,
-+ 0x0c7f, 0x7118, 0xa18c, 0xff00, 0x810f, 0xa186, 0x0001, 0x0040,
-+ 0x95ff, 0xa186, 0x0005, 0x0040, 0x95f9, 0xa186, 0x0007, 0x00c0,
-+ 0x9609, 0xa280, 0x0004, 0x2004, 0xa005, 0x0040, 0x9609, 0x057e,
-+ 0x7510, 0x7614, 0x1078, 0xa2a3, 0x057f, 0x0c7f, 0x0d7f, 0x0e7f,
-+ 0x007c, 0x6007, 0x003b, 0x602b, 0x0009, 0x6013, 0x2a00, 0x6003,
-+ 0x0001, 0x1078, 0x5d8a, 0x0078, 0x9605, 0x6007, 0x003b, 0x602b,
-+ 0x0009, 0x6013, 0x1700, 0x6003, 0x0001, 0x1078, 0x5d8a, 0x0078,
-+ 0x9605, 0x6007, 0x003b, 0x602b, 0x000b, 0x6013, 0x0000, 0x0078,
-+ 0x9579, 0x0e7e, 0x027e, 0x1078, 0x4967, 0x0040, 0x965e, 0x1078,
-+ 0x4957, 0x1078, 0xa4a9, 0x00c0, 0x965c, 0x2071, 0xa600, 0x70cc,
-+ 0xc085, 0x70ce, 0x0f7e, 0x2079, 0x0100, 0x7298, 0xa284, 0x00ff,
-+ 0x706e, 0x78e6, 0xa284, 0xff00, 0x7270, 0xa205, 0x7072, 0x78ea,
-+ 0x0f7f, 0x70d7, 0x0000, 0x2001, 0xa653, 0x2004, 0xd0a4, 0x0040,
-+ 0x9655, 0x2011, 0xa8ca, 0x2013, 0x07d0, 0xd0ac, 0x00c0, 0x965e,
-+ 0x1078, 0x2677, 0x0078, 0x965e, 0x1078, 0xa4d9, 0x027f, 0x0e7f,
-+ 0x1078, 0x772d, 0x0078, 0x9497, 0x1078, 0x772d, 0x007c, 0x0d7e,
-+ 0x067e, 0x6618, 0x2668, 0x6e04, 0xa6b4, 0xff00, 0x8637, 0xa686,
-+ 0x0006, 0x0040, 0x9684, 0xa686, 0x0004, 0x0040, 0x9684, 0x6e04,
-+ 0xa6b4, 0x00ff, 0xa686, 0x0006, 0x0040, 0x9684, 0xa686, 0x0004,
-+ 0x0040, 0x9684, 0xa085, 0x0001, 0x067f, 0x0d7f, 0x007c, 0x0d7e,
-+ 0x1078, 0x96bb, 0x0d7f, 0x007c, 0x0d7e, 0x1078, 0x96ca, 0x00c0,
-+ 0x96b4, 0x680c, 0xa08c, 0xff00, 0x6820, 0xa084, 0x00ff, 0xa115,
-+ 0x6212, 0x6824, 0x602a, 0xd1e4, 0x0040, 0x96a2, 0x2009, 0x0001,
-+ 0x0078, 0x96b0, 0xd1ec, 0x0040, 0x96b4, 0x6920, 0xa18c, 0x00ff,
-+ 0x6824, 0x1078, 0x254d, 0x00c0, 0x96b4, 0x2110, 0x2009, 0x0000,
-+ 0x1078, 0x28c8, 0x0078, 0x96b8, 0xa085, 0x0001, 0x0078, 0x96b9,
-+ 0xa006, 0x0d7f, 0x007c, 0x2069, 0xab8d, 0x6800, 0xa082, 0x0010,
-+ 0x00c8, 0x96c8, 0x6013, 0x0000, 0xa085, 0x0001, 0x0078, 0x96c9,
-+ 0xa006, 0x007c, 0x6013, 0x0000, 0x2069, 0xab8c, 0x6808, 0xa084,
-+ 0xff00, 0xa086, 0x0800, 0x00c0, 0x96de, 0x6800, 0xa084, 0x00ff,
-+ 0xa08e, 0x0014, 0x0040, 0x96de, 0xa08e, 0x0010, 0x007c, 0x6004,
-+ 0xa0b2, 0x0044, 0x10c8, 0x1332, 0xa1b6, 0x0013, 0x00c0, 0x96eb,
-+ 0x2008, 0x0079, 0x96fe, 0xa1b6, 0x0027, 0x0040, 0x96f3, 0xa1b6,
-+ 0x0014, 0x10c0, 0x1332, 0x2001, 0x0007, 0x1078, 0x4535, 0x1078,
-+ 0x61cd, 0x1078, 0x8ec6, 0x1078, 0x62d1, 0x007c, 0x973e, 0x9740,
-+ 0x973e, 0x973e, 0x973e, 0x9740, 0x974c, 0x97d6, 0x9799, 0x97d6,
-+ 0x97ad, 0x97d6, 0x974c, 0x97d6, 0x97ce, 0x97d6, 0x97ce, 0x97d6,
-+ 0x97d6, 0x973e, 0x973e, 0x973e, 0x973e, 0x973e, 0x973e, 0x973e,
-+ 0x973e, 0x973e, 0x973e, 0x973e, 0x9740, 0x973e, 0x97d6, 0x973e,
-+ 0x973e, 0x97d6, 0x973e, 0x97d6, 0x97d6, 0x973e, 0x973e, 0x973e,
-+ 0x973e, 0x97d6, 0x97d6, 0x973e, 0x97d6, 0x97d6, 0x973e, 0x973e,
-+ 0x973e, 0x973e, 0x973e, 0x9740, 0x97d6, 0x97d6, 0x973e, 0x973e,
-+ 0x97d6, 0x97d6, 0x973e, 0x973e, 0x973e, 0x973e, 0x1078, 0x1332,
-+ 0x1078, 0x61cd, 0x2001, 0xa8a2, 0x2004, 0x6016, 0x6003, 0x0002,
-+ 0x1078, 0x62d1, 0x0078, 0x97dc, 0x0f7e, 0x2079, 0xa652, 0x7804,
-+ 0x0f7f, 0xd0ac, 0x00c0, 0x97d6, 0x2001, 0x0000, 0x1078, 0x44ee,
-+ 0x6018, 0xa080, 0x0004, 0x2004, 0xa086, 0x00ff, 0x0040, 0x97d6,
-+ 0x0c7e, 0x6018, 0x2060, 0x6000, 0xd0f4, 0x00c0, 0x9770, 0x6010,
-+ 0xa005, 0x0040, 0x9770, 0x0c7f, 0x1078, 0x3699, 0x0078, 0x97d6,
-+ 0x0c7f, 0x2001, 0xa600, 0x2004, 0xa086, 0x0002, 0x00c0, 0x977f,
-+ 0x0f7e, 0x2079, 0xa600, 0x7890, 0x8000, 0x7892, 0x0f7f, 0x2001,
-+ 0x0002, 0x1078, 0x4502, 0x1078, 0x61cd, 0x601f, 0x0001, 0x6003,
-+ 0x0001, 0x6007, 0x0002, 0x1078, 0x5dd7, 0x1078, 0x62d1, 0x0c7e,
-+ 0x6118, 0x2160, 0x2009, 0x0001, 0x1078, 0x5a52, 0x0c7f, 0x0078,
-+ 0x97dc, 0x6618, 0x0d7e, 0x2668, 0x6e04, 0x0d7f, 0xa6b4, 0xff00,
-+ 0x8637, 0xa686, 0x0006, 0x0040, 0x97d6, 0xa686, 0x0004, 0x0040,
-+ 0x97d6, 0x2001, 0x0004, 0x0078, 0x97d4, 0x2001, 0xa600, 0x2004,
-+ 0xa086, 0x0003, 0x00c0, 0x97b6, 0x1078, 0x3699, 0x2001, 0x0006,
-+ 0x1078, 0x97dd, 0x6618, 0x0d7e, 0x2668, 0x6e04, 0x0d7f, 0xa6b4,
-+ 0xff00, 0x8637, 0xa686, 0x0006, 0x0040, 0x97d6, 0x2001, 0x0006,
-+ 0x0078, 0x97d4, 0x2001, 0x0004, 0x0078, 0x97d4, 0x2001, 0x0006,
-+ 0x1078, 0x97dd, 0x0078, 0x97d6, 0x1078, 0x4535, 0x1078, 0x61cd,
-+ 0x1078, 0x772d, 0x1078, 0x62d1, 0x007c, 0x017e, 0x0d7e, 0x6118,
-+ 0x2168, 0x6900, 0xd184, 0x0040, 0x97f8, 0x6104, 0xa18e, 0x000a,
-+ 0x00c0, 0x97f0, 0x699c, 0xd1a4, 0x00c0, 0x97f0, 0x2001, 0x0007,
-+ 0x1078, 0x4502, 0x2001, 0x0000, 0x1078, 0x44ee, 0x1078, 0x28a6,
-+ 0x0d7f, 0x017f, 0x007c, 0x0d7e, 0x6618, 0x2668, 0x6804, 0xa084,
-+ 0xff00, 0x8007, 0x0d7f, 0xa0b2, 0x000c, 0x10c8, 0x1332, 0xa1b6,
-+ 0x0015, 0x00c0, 0x980f, 0x1079, 0x9816, 0x0078, 0x9815, 0xa1b6,
-+ 0x0016, 0x10c0, 0x1332, 0x1079, 0x9822, 0x007c, 0x7d4e, 0x7d4e,
-+ 0x7d4e, 0x7d4e, 0x7d4e, 0x7d4e, 0x9877, 0x982e, 0x7d4e, 0x7d4e,
-+ 0x7d4e, 0x7d4e, 0x7d4e, 0x7d4e, 0x7d4e, 0x7d4e, 0x7d4e, 0x7d4e,
-+ 0x9877, 0x987f, 0x7d4e, 0x7d4e, 0x7d4e, 0x7d4e, 0x0f7e, 0x2079,
-+ 0xa652, 0x7804, 0xd0ac, 0x00c0, 0x9855, 0x6018, 0xa07d, 0x0040,
-+ 0x9855, 0x7800, 0xd0f4, 0x00c0, 0x9841, 0x7810, 0xa005, 0x00c0,
-+ 0x9855, 0x2001, 0x0000, 0x1078, 0x44ee, 0x2001, 0x0002, 0x1078,
-+ 0x4502, 0x601f, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002, 0x1078,
-+ 0x5dd7, 0x1078, 0x62d1, 0x0078, 0x9875, 0x2011, 0xab83, 0x2204,
-+ 0x8211, 0x220c, 0x1078, 0x254d, 0x00c0, 0x9875, 0x0c7e, 0x1078,
-+ 0x45c4, 0x0040, 0x9868, 0x0c7f, 0x1078, 0x772d, 0x0078, 0x9875,
-+ 0x6010, 0x007e, 0x6014, 0x007e, 0x1078, 0x42f8, 0x007f, 0x6016,
-+ 0x007f, 0x6012, 0x0c7f, 0x1078, 0x772d, 0x0f7f, 0x007c, 0x6604,
-+ 0xa6b6, 0x001e, 0x00c0, 0x987e, 0x1078, 0x772d, 0x007c, 0x1078,
-+ 0x7f8e, 0x00c0, 0x988b, 0x6003, 0x0001, 0x6007, 0x0001, 0x1078,
-+ 0x5dd7, 0x0078, 0x988d, 0x1078, 0x772d, 0x007c, 0x6004, 0xa08a,
-+ 0x0044, 0x10c8, 0x1332, 0x1078, 0x61cd, 0x1078, 0x8ec6, 0x1078,
-+ 0x62d1, 0x007c, 0xa182, 0x0040, 0x0079, 0x989e, 0x98b1, 0x98b1,
-+ 0x98b1, 0x98b1, 0x98b3, 0x98b1, 0x98b1, 0x98b1, 0x98b1, 0x98b1,
-+ 0x98b1, 0x98b1, 0x98b1, 0x98b1, 0x98b1, 0x98b1, 0x98b1, 0x98b1,
-+ 0x98b1, 0x1078, 0x1332, 0x0d7e, 0x0e7e, 0x0f7e, 0x157e, 0x047e,
-+ 0x027e, 0x6218, 0xa280, 0x002b, 0x2004, 0xa005, 0x0040, 0x98c4,
-+ 0x2021, 0x0000, 0x1078, 0xa472, 0x6106, 0x2071, 0xab80, 0x7444,
-+ 0xa4a4, 0xff00, 0x0040, 0x991b, 0xa486, 0x2000, 0x00c0, 0x98d6,
-+ 0x2009, 0x0001, 0x2011, 0x0200, 0x1078, 0x5bf1, 0x1078, 0x138b,
-+ 0x1040, 0x1332, 0x6003, 0x0007, 0x2d00, 0x6837, 0x010d, 0x6803,
-+ 0x0000, 0x683b, 0x0000, 0x6c5a, 0x2c00, 0x685e, 0x6008, 0x68b2,
-+ 0x6018, 0x2078, 0x78a0, 0x8007, 0x7130, 0x694a, 0x017e, 0xa084,
-+ 0xff00, 0x6846, 0x684f, 0x0000, 0x6857, 0x0036, 0x1078, 0x4a73,
-+ 0x017f, 0xa486, 0x2000, 0x00c0, 0x9903, 0x2019, 0x0017, 0x1078,
-+ 0xa195, 0x0078, 0x997d, 0xa486, 0x0400, 0x00c0, 0x990d, 0x2019,
-+ 0x0002, 0x1078, 0xa146, 0x0078, 0x997d, 0xa486, 0x0200, 0x00c0,
-+ 0x9913, 0x1078, 0xa12b, 0xa486, 0x1000, 0x00c0, 0x9919, 0x1078,
-+ 0xa17a, 0x0078, 0x997d, 0x2069, 0xa933, 0x6a00, 0xd284, 0x0040,
-+ 0x99e7, 0xa284, 0x0300, 0x00c0, 0x99df, 0x6804, 0xa005, 0x0040,
-+ 0x99c5, 0x2d78, 0x6003, 0x0007, 0x1078, 0x1370, 0x0040, 0x9984,
-+ 0x7800, 0xd08c, 0x00c0, 0x9937, 0x7804, 0x8001, 0x7806, 0x6013,
-+ 0x0000, 0x6803, 0x0000, 0x6837, 0x0116, 0x683b, 0x0000, 0x6008,
-+ 0x68b2, 0x2c00, 0x684a, 0x6018, 0x2078, 0x78a0, 0x8007, 0x7130,
-+ 0x6986, 0x6846, 0x7928, 0x698a, 0x792c, 0x698e, 0x7930, 0x6992,
-+ 0x7934, 0x6996, 0x6853, 0x003d, 0x7244, 0xa294, 0x0003, 0xa286,
-+ 0x0002, 0x00c0, 0x995f, 0x684f, 0x0040, 0x0078, 0x9969, 0xa286,
-+ 0x0001, 0x00c0, 0x9967, 0x684f, 0x0080, 0x0078, 0x9969, 0x684f,
-+ 0x0000, 0x20a9, 0x000a, 0x2001, 0xab90, 0xad90, 0x0015, 0x200c,
-+ 0x810f, 0x2112, 0x8000, 0x8210, 0x00f0, 0x996f, 0x200c, 0x6982,
-+ 0x8000, 0x200c, 0x697e, 0x1078, 0x4a73, 0x027f, 0x047f, 0x157f,
-+ 0x0f7f, 0x0e7f, 0x0d7f, 0x007c, 0x2001, 0xa60e, 0x2004, 0xd084,
-+ 0x0040, 0x998e, 0x1078, 0x138b, 0x00c0, 0x9930, 0x6013, 0x0100,
-+ 0x6003, 0x0001, 0x6007, 0x0041, 0x1078, 0x5d8a, 0x1078, 0x62d1,
-+ 0x0078, 0x997d, 0x2069, 0xab92, 0x2d04, 0xa084, 0xff00, 0xa086,
-+ 0x1200, 0x00c0, 0x99b9, 0x2069, 0xab80, 0x686c, 0xa084, 0x00ff,
-+ 0x017e, 0x6110, 0xa18c, 0x0700, 0xa10d, 0x6112, 0x017f, 0x6003,
-+ 0x0001, 0x6007, 0x0043, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0078,
-+ 0x997d, 0x6013, 0x0200, 0x6003, 0x0001, 0x6007, 0x0041, 0x1078,
-+ 0x5d8a, 0x1078, 0x62d1, 0x0078, 0x997d, 0x2001, 0xa60d, 0x2004,
-+ 0xd0ec, 0x0040, 0x99cf, 0x2011, 0x8049, 0x1078, 0x361b, 0x6013,
-+ 0x0300, 0x0078, 0x99d5, 0x6013, 0x0100, 0x6003, 0x0001, 0x6007,
-+ 0x0041, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0078, 0x997d, 0x6013,
-+ 0x0500, 0x0078, 0x99d5, 0x6013, 0x0600, 0x0078, 0x999a, 0x6013,
-+ 0x0200, 0x0078, 0x999a, 0xa186, 0x0013, 0x00c0, 0x99fd, 0x6004,
-+ 0xa08a, 0x0040, 0x1048, 0x1332, 0xa08a, 0x0053, 0x10c8, 0x1332,
-+ 0xa082, 0x0040, 0x2008, 0x0079, 0x9a82, 0xa186, 0x0051, 0x0040,
-+ 0x9a0a, 0xa186, 0x0047, 0x00c0, 0x9a23, 0x6004, 0xa086, 0x0041,
-+ 0x0040, 0x9a31, 0x2001, 0x0109, 0x2004, 0xd084, 0x0040, 0x9a31,
-+ 0x127e, 0x2091, 0x2200, 0x007e, 0x017e, 0x027e, 0x1078, 0x5c56,
-+ 0x027f, 0x017f, 0x007f, 0x127f, 0x6000, 0xa086, 0x0002, 0x00c0,
-+ 0x9a31, 0x0078, 0x9ac7, 0xa186, 0x0027, 0x0040, 0x9a2b, 0xa186,
-+ 0x0014, 0x10c0, 0x1332, 0x6004, 0xa082, 0x0040, 0x2008, 0x0079,
-+ 0x9a34, 0x1078, 0x7773, 0x007c, 0x9a47, 0x9a49, 0x9a49, 0x9a71,
-+ 0x9a47, 0x9a47, 0x9a47, 0x9a47, 0x9a47, 0x9a47, 0x9a47, 0x9a47,
-+ 0x9a47, 0x9a47, 0x9a47, 0x9a47, 0x9a47, 0x9a47, 0x9a47, 0x1078,
-+ 0x1332, 0x1078, 0x61cd, 0x1078, 0x62d1, 0x037e, 0x0d7e, 0x6010,
-+ 0xa06d, 0x0040, 0x9a6e, 0xad84, 0xf000, 0x0040, 0x9a6e, 0x6003,
-+ 0x0002, 0x6018, 0x2004, 0xd0bc, 0x00c0, 0x9a6e, 0x2019, 0x0004,
-+ 0x1078, 0xa1ca, 0x6013, 0x0000, 0x6014, 0xa005, 0x00c0, 0x9a6c,
-+ 0x2001, 0xa8a3, 0x2004, 0x6016, 0x6003, 0x0007, 0x0d7f, 0x037f,
-+ 0x007c, 0x0d7e, 0x1078, 0x61cd, 0x1078, 0x62d1, 0x1078, 0x8d06,
-+ 0x0040, 0x9a7e, 0x6010, 0x2068, 0x1078, 0x13a4, 0x1078, 0x8ec6,
-+ 0x0d7f, 0x007c, 0x9a95, 0x9ab4, 0x9a9e, 0x9ac1, 0x9a95, 0x9a95,
-+ 0x9a95, 0x9a95, 0x9a95, 0x9a95, 0x9a95, 0x9a95, 0x9a95, 0x9a95,
-+ 0x9a95, 0x9a95, 0x9a95, 0x9a95, 0x9a95, 0x1078, 0x1332, 0x6010,
-+ 0xa088, 0x0013, 0x2104, 0xa085, 0x0400, 0x200a, 0x1078, 0x61cd,
-+ 0x6010, 0xa080, 0x0013, 0x2004, 0xd0b4, 0x0040, 0x9aaf, 0x6003,
-+ 0x0007, 0x2009, 0x0043, 0x1078, 0x775c, 0x0078, 0x9ab1, 0x6003,
-+ 0x0002, 0x1078, 0x62d1, 0x007c, 0x1078, 0x61cd, 0x1078, 0xa423,
-+ 0x00c0, 0x9abe, 0x1078, 0x5bc1, 0x1078, 0x772d, 0x1078, 0x62d1,
-+ 0x007c, 0x1078, 0x61cd, 0x2009, 0x0041, 0x0078, 0x9c1e, 0xa182,
-+ 0x0040, 0x0079, 0x9acb, 0x9ade, 0x9ae0, 0x9ade, 0x9ade, 0x9ade,
-+ 0x9ade, 0x9ade, 0x9ae1, 0x9ade, 0x9ade, 0x9ade, 0x9ade, 0x9ade,
-+ 0x9ade, 0x9ade, 0x9ade, 0x9ade, 0x9aec, 0x9ade, 0x1078, 0x1332,
-+ 0x007c, 0x6003, 0x0004, 0x6110, 0x20e1, 0x0005, 0x3d18, 0x3e20,
-+ 0x2c10, 0x1078, 0x15fa, 0x007c, 0x0d7e, 0x1078, 0x5bc1, 0x0d7f,
-+ 0x1078, 0xa495, 0x1078, 0x772d, 0x007c, 0xa182, 0x0040, 0x0079,
-+ 0x9af9, 0x9b0c, 0x9b0c, 0x9b0c, 0x9b0c, 0x9b0c, 0x9b0c, 0x9b0c,
-+ 0x9b0e, 0x9b0c, 0x9b11, 0x9b3c, 0x9b0c, 0x9b0c, 0x9b0c, 0x9b0c,
-+ 0x9b3c, 0x9b0c, 0x9b0c, 0x9b0c, 0x1078, 0x1332, 0x1078, 0x7773,
-+ 0x007c, 0x1078, 0x627a, 0x1078, 0x639b, 0x6010, 0x0d7e, 0x2068,
-+ 0x684c, 0xd0fc, 0x0040, 0x9b27, 0xa08c, 0x0003, 0xa18e, 0x0002,
-+ 0x0040, 0x9b2f, 0x2009, 0x0041, 0x0d7f, 0x0078, 0x9c1e, 0x6003,
-+ 0x0007, 0x6017, 0x0000, 0x1078, 0x5bc1, 0x0d7f, 0x007c, 0x1078,
-+ 0xa423, 0x0040, 0x9b35, 0x0d7f, 0x007c, 0x1078, 0x5bc1, 0x1078,
-+ 0x772d, 0x0d7f, 0x0078, 0x9b2e, 0x037e, 0x1078, 0x627a, 0x1078,
-+ 0x639b, 0x6010, 0x0d7e, 0x2068, 0x6018, 0x2004, 0xd0bc, 0x0040,
-+ 0x9b5c, 0x684c, 0xa084, 0x0003, 0xa086, 0x0002, 0x0040, 0x9b58,
-+ 0x687c, 0x632c, 0xa31a, 0x632e, 0x6880, 0x6328, 0xa31b, 0x632a,
-+ 0x6003, 0x0002, 0x0078, 0x9b6d, 0x2019, 0x0004, 0x1078, 0xa1ca,
-+ 0x6014, 0xa005, 0x00c0, 0x9b69, 0x2001, 0xa8a3, 0x2004, 0x8003,
-+ 0x6016, 0x6013, 0x0000, 0x6003, 0x0007, 0x0d7f, 0x037f, 0x007c,
-+ 0xa186, 0x0013, 0x00c0, 0x9b7e, 0x6004, 0xa086, 0x0042, 0x10c0,
-+ 0x1332, 0x1078, 0x61cd, 0x1078, 0x62d1, 0x007c, 0xa186, 0x0027,
-+ 0x0040, 0x9b86, 0xa186, 0x0014, 0x00c0, 0x9b96, 0x6004, 0xa086,
-+ 0x0042, 0x10c0, 0x1332, 0x2001, 0x0007, 0x1078, 0x4535, 0x1078,
-+ 0x61cd, 0x1078, 0x8ec6, 0x1078, 0x62d1, 0x007c, 0xa182, 0x0040,
-+ 0x0079, 0x9b9a, 0x9bad, 0x9bad, 0x9bad, 0x9bad, 0x9bad, 0x9bad,
-+ 0x9bad, 0x9baf, 0x9bbb, 0x9bad, 0x9bad, 0x9bad, 0x9bad, 0x9bad,
-+ 0x9bad, 0x9bad, 0x9bad, 0x9bad, 0x9bad, 0x1078, 0x1332, 0x037e,
-+ 0x047e, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10, 0x1078, 0x15fa,
-+ 0x047f, 0x037f, 0x007c, 0x6010, 0x0d7e, 0x2068, 0x6810, 0x6a14,
-+ 0x6118, 0x210c, 0xd1bc, 0x0040, 0x9bda, 0x6124, 0xd1f4, 0x00c0,
-+ 0x9bda, 0x007e, 0x047e, 0x057e, 0x6c7c, 0xa422, 0x6d80, 0x2200,
-+ 0xa52b, 0x602c, 0xa420, 0x642e, 0x6028, 0xa529, 0x652a, 0x057f,
-+ 0x047f, 0x007f, 0xa20d, 0x00c0, 0x9bee, 0x684c, 0xd0fc, 0x0040,
-+ 0x9be6, 0x2009, 0x0041, 0x0d7f, 0x0078, 0x9c1e, 0x6003, 0x0007,
-+ 0x6017, 0x0000, 0x1078, 0x5bc1, 0x0d7f, 0x007c, 0x007e, 0x0f7e,
-+ 0x2c78, 0x1078, 0x4963, 0x0f7f, 0x007f, 0x0040, 0x9bfb, 0x6003,
-+ 0x0002, 0x0d7f, 0x007c, 0x2009, 0xa60d, 0x210c, 0xd19c, 0x0040,
-+ 0x9c05, 0x6003, 0x0007, 0x0078, 0x9c07, 0x6003, 0x0006, 0x1078,
-+ 0x9c0d, 0x1078, 0x5bc3, 0x0d7f, 0x007c, 0xd2fc, 0x0040, 0x9c19,
-+ 0x8002, 0x8000, 0x8212, 0xa291, 0x0000, 0x2009, 0x0009, 0x0078,
-+ 0x9c1b, 0x2009, 0x0015, 0x6a6a, 0x6866, 0x007c, 0xa182, 0x0040,
-+ 0x0048, 0x9c24, 0x0079, 0x9c31, 0xa186, 0x0013, 0x0040, 0x9c2c,
-+ 0xa186, 0x0014, 0x10c0, 0x1332, 0x6024, 0xd0dc, 0x1040, 0x1332,
-+ 0x007c, 0x9c44, 0x9c4b, 0x9c57, 0x9c63, 0x9c44, 0x9c44, 0x9c44,
-+ 0x9c72, 0x9c44, 0x9c46, 0x9c46, 0x9c44, 0x9c44, 0x9c44, 0x9c44,
-+ 0x9c44, 0x9c44, 0x9c44, 0x9c44, 0x1078, 0x1332, 0x6024, 0xd0dc,
-+ 0x1040, 0x1332, 0x007c, 0x6003, 0x0001, 0x6106, 0x1078, 0x5d8a,
-+ 0x127e, 0x2091, 0x8000, 0x1078, 0x62d1, 0x127f, 0x007c, 0x6003,
-+ 0x0001, 0x6106, 0x1078, 0x5d8a, 0x127e, 0x2091, 0x8000, 0x1078,
-+ 0x62d1, 0x127f, 0x007c, 0x6003, 0x0003, 0x6106, 0x2c10, 0x1078,
-+ 0x1cf0, 0x127e, 0x2091, 0x8000, 0x1078, 0x5df6, 0x1078, 0x639b,
-+ 0x127f, 0x007c, 0xa016, 0x1078, 0x15fa, 0x007c, 0x127e, 0x2091,
-+ 0x8000, 0x037e, 0x0d7e, 0xa182, 0x0040, 0x1079, 0x9c83, 0x0d7f,
-+ 0x037f, 0x127f, 0x007c, 0x9c93, 0x9c95, 0x9caa, 0x9cc9, 0x9c93,
-+ 0x9c93, 0x9c93, 0x9ce1, 0x9c93, 0x9c93, 0x9c93, 0x9c93, 0x9c93,
-+ 0x9c93, 0x9c93, 0x9c93, 0x1078, 0x1332, 0x6010, 0x2068, 0x684c,
-+ 0xd0fc, 0x0040, 0x9cbf, 0xa09c, 0x0003, 0xa39e, 0x0003, 0x0040,
-+ 0x9cbf, 0x6003, 0x0001, 0x6106, 0x1078, 0x5d8a, 0x1078, 0x62d1,
-+ 0x0078, 0x9ce4, 0x6010, 0x2068, 0x684c, 0xd0fc, 0x0040, 0x9cbf,
-+ 0xa09c, 0x0003, 0xa39e, 0x0003, 0x0040, 0x9cbf, 0x6003, 0x0001,
-+ 0x6106, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0078, 0x9ce4, 0x6013,
-+ 0x0000, 0x6017, 0x0000, 0x2019, 0x0004, 0x1078, 0xa1ca, 0x0078,
-+ 0x9ce4, 0x6010, 0x2068, 0x684c, 0xd0fc, 0x0040, 0x9cbf, 0xa09c,
-+ 0x0003, 0xa39e, 0x0003, 0x0040, 0x9cbf, 0x6003, 0x0003, 0x6106,
-+ 0x2c10, 0x1078, 0x1cf0, 0x1078, 0x5df6, 0x1078, 0x639b, 0x0078,
-+ 0x9ce4, 0xa016, 0x1078, 0x15fa, 0x007c, 0x1078, 0x61cd, 0x6110,
-+ 0x81ff, 0x0040, 0x9cf6, 0x0d7e, 0x2168, 0x1078, 0xa4e2, 0x037e,
-+ 0x2019, 0x0029, 0x1078, 0xa1ca, 0x037f, 0x0d7f, 0x1078, 0x8ec6,
-+ 0x1078, 0x62d1, 0x007c, 0x1078, 0x627a, 0x6110, 0x81ff, 0x0040,
-+ 0x9d0c, 0x0d7e, 0x2168, 0x1078, 0xa4e2, 0x037e, 0x2019, 0x0029,
-+ 0x1078, 0xa1ca, 0x037f, 0x0d7f, 0x1078, 0x8ec6, 0x1078, 0x639b,
-+ 0x007c, 0xa182, 0x0085, 0x0079, 0x9d15, 0x9d1e, 0x9d1c, 0x9d1c,
-+ 0x9d2a, 0x9d1c, 0x9d1c, 0x9d1c, 0x1078, 0x1332, 0x6003, 0x000b,
-+ 0x6106, 0x1078, 0x5d8a, 0x127e, 0x2091, 0x8000, 0x1078, 0x62d1,
-+ 0x127f, 0x007c, 0x027e, 0x0e7e, 0x1078, 0xa41c, 0x0040, 0x9d34,
-+ 0x1078, 0x772d, 0x0078, 0x9d50, 0x2071, 0xab80, 0x7224, 0x6212,
-+ 0x7220, 0x1078, 0xa069, 0x0040, 0x9d41, 0x6007, 0x0086, 0x0078,
-+ 0x9d4a, 0x6007, 0x0087, 0x7224, 0xa296, 0xffff, 0x00c0, 0x9d4a,
-+ 0x6007, 0x0086, 0x6003, 0x0001, 0x1078, 0x5d8a, 0x1078, 0x62d1,
-+ 0x0e7f, 0x027f, 0x007c, 0xa186, 0x0013, 0x00c0, 0x9d64, 0x6004,
-+ 0xa08a, 0x0085, 0x1048, 0x1332, 0xa08a, 0x008c, 0x10c8, 0x1332,
-+ 0xa082, 0x0085, 0x0079, 0x9d7b, 0xa186, 0x0027, 0x0040, 0x9d70,
-+ 0xa186, 0x0014, 0x0040, 0x9d70, 0x1078, 0x7773, 0x0078, 0x9d7a,
-+ 0x2001, 0x0007, 0x1078, 0x4535, 0x1078, 0x61cd, 0x1078, 0x8ec6,
-+ 0x1078, 0x62d1, 0x007c, 0x9d82, 0x9d84, 0x9d84, 0x9d82, 0x9d82,
-+ 0x9d82, 0x9d82, 0x1078, 0x1332, 0x1078, 0x61cd, 0x1078, 0x8ec6,
-+ 0x1078, 0x62d1, 0x007c, 0xa182, 0x0085, 0x1048, 0x1332, 0xa182,
-+ 0x008c, 0x10c8, 0x1332, 0xa182, 0x0085, 0x0079, 0x9d97, 0x9d9e,
-+ 0x9d9e, 0x9d9e, 0x9da0, 0x9d9e, 0x9d9e, 0x9d9e, 0x1078, 0x1332,
-+ 0x007c, 0xa186, 0x0013, 0x0040, 0x9db1, 0xa186, 0x0014, 0x0040,
-+ 0x9db1, 0xa186, 0x0027, 0x0040, 0x9db1, 0x1078, 0x7773, 0x0078,
-+ 0x9db7, 0x1078, 0x61cd, 0x1078, 0x8ec6, 0x1078, 0x62d1, 0x007c,
-+ 0x037e, 0x1078, 0xa495, 0x603f, 0x0000, 0x2019, 0x000b, 0x1078,
-+ 0x9dc7, 0x601f, 0x0006, 0x6003, 0x0007, 0x037f, 0x007c, 0x127e,
-+ 0x037e, 0x2091, 0x8000, 0x087e, 0x2c40, 0x097e, 0x2049, 0x0000,
-+ 0x1078, 0x7246, 0x097f, 0x087f, 0x00c0, 0x9e02, 0x077e, 0x2c38,
-+ 0x1078, 0x72f3, 0x077f, 0x00c0, 0x9e02, 0x6000, 0xa086, 0x0000,
-+ 0x0040, 0x9e02, 0x601c, 0xa086, 0x0007, 0x0040, 0x9e02, 0x0d7e,
-+ 0x6000, 0xa086, 0x0004, 0x00c0, 0x9df3, 0x1078, 0xa495, 0x601f,
-+ 0x0007, 0x1078, 0x1757, 0x6010, 0x2068, 0x1078, 0x8d06, 0x0040,
-+ 0x9dfb, 0x1078, 0xa1ca, 0x0d7f, 0x6013, 0x0000, 0x1078, 0xa495,
-+ 0x601f, 0x0007, 0x037f, 0x127f, 0x007c, 0x0f7e, 0x0c7e, 0x037e,
-+ 0x157e, 0x2079, 0xab80, 0x7938, 0x783c, 0x1078, 0x254d, 0x00c0,
-+ 0x9e49, 0x017e, 0x0c7e, 0x1078, 0x45c4, 0x00c0, 0x9e49, 0x017f,
-+ 0x027f, 0x027e, 0x017e, 0x2019, 0x0029, 0x1078, 0x73d0, 0x1078,
-+ 0x5f01, 0x077e, 0x2039, 0x0000, 0x1078, 0x5e0a, 0x077f, 0x017f,
-+ 0x077e, 0x2039, 0x0000, 0x1078, 0x9f8b, 0x077f, 0x1078, 0x47e9,
-+ 0x027e, 0x6204, 0xa294, 0xff00, 0x8217, 0xa286, 0x0006, 0x0040,
-+ 0x9e3d, 0xa286, 0x0004, 0x00c0, 0x9e40, 0x62a0, 0x1078, 0x2942,
-+ 0x027f, 0x017f, 0x1078, 0x42f8, 0x6612, 0x6516, 0xa006, 0x0078,
-+ 0x9e4b, 0x0c7f, 0x017f, 0x157f, 0x037f, 0x0c7f, 0x0f7f, 0x007c,
-+ 0x0c7e, 0x0d7e, 0x0e7e, 0x017e, 0x2009, 0xa620, 0x2104, 0xa086,
-+ 0x0074, 0x00c0, 0x9eb3, 0x2069, 0xab8e, 0x690c, 0xa182, 0x0100,
-+ 0x0048, 0x9ea3, 0x6908, 0xa184, 0x8000, 0x0040, 0x9eaf, 0x6018,
-+ 0x2070, 0x7010, 0xa084, 0x00ff, 0x0040, 0x9e72, 0x7000, 0xd0f4,
-+ 0x0040, 0x9e76, 0xa184, 0x0800, 0x0040, 0x9eaf, 0x6910, 0xa18a,
-+ 0x0001, 0x0048, 0x9ea7, 0x6914, 0x2069, 0xabae, 0x6904, 0x81ff,
-+ 0x00c0, 0x9e9b, 0x690c, 0xa182, 0x0100, 0x0048, 0x9ea3, 0x6908,
-+ 0x81ff, 0x00c0, 0x9e9f, 0x6910, 0xa18a, 0x0001, 0x0048, 0x9ea7,
-+ 0x6918, 0xa18a, 0x0001, 0x0048, 0x9eaf, 0x0078, 0x9eb9, 0x6013,
-+ 0x0100, 0x0078, 0x9eb5, 0x6013, 0x0300, 0x0078, 0x9eb5, 0x6013,
-+ 0x0500, 0x0078, 0x9eb5, 0x6013, 0x0700, 0x0078, 0x9eb5, 0x6013,
-+ 0x0900, 0x0078, 0x9eb5, 0x6013, 0x0b00, 0x0078, 0x9eb5, 0x6013,
-+ 0x0f00, 0x0078, 0x9eb5, 0x6013, 0x2d00, 0xa085, 0x0001, 0x0078,
-+ 0x9eba, 0xa006, 0x017f, 0x0e7f, 0x0d7f, 0x0c7f, 0x007c, 0x0c7e,
-+ 0x0d7e, 0x027e, 0x037e, 0x157e, 0x6218, 0x2268, 0x6b04, 0xa394,
-+ 0x00ff, 0xa286, 0x0006, 0x0040, 0x9ee3, 0xa286, 0x0004, 0x0040,
-+ 0x9ee3, 0xa394, 0xff00, 0x8217, 0xa286, 0x0006, 0x0040, 0x9ee3,
-+ 0xa286, 0x0004, 0x0040, 0x9ee3, 0x0c7e, 0x2d60, 0x1078, 0x45d6,
-+ 0x0c7f, 0x0078, 0x9f1e, 0x2011, 0xab96, 0xad98, 0x000a, 0x20a9,
-+ 0x0004, 0x1078, 0x80de, 0x00c0, 0x9f1f, 0x2011, 0xab9a, 0xad98,
-+ 0x0006, 0x20a9, 0x0004, 0x1078, 0x80de, 0x00c0, 0x9f1f, 0x047e,
-+ 0x017e, 0x6aa0, 0xa294, 0x00ff, 0x8227, 0xa006, 0x2009, 0xa653,
-+ 0x210c, 0xd1a4, 0x0040, 0x9f0b, 0x2009, 0x0029, 0x1078, 0xa21d,
-+ 0x6800, 0xc0e5, 0x6802, 0x2019, 0x0029, 0x1078, 0x5f01, 0x077e,
-+ 0x2039, 0x0000, 0x1078, 0x5e0a, 0x2c08, 0x1078, 0x9f8b, 0x077f,
-+ 0x2001, 0x0007, 0x1078, 0x4535, 0x017f, 0x047f, 0xa006, 0x157f,
-+ 0x037f, 0x027f, 0x0d7f, 0x0c7f, 0x007c, 0x0d7e, 0x2069, 0xab8e,
-+ 0x6800, 0xa086, 0x0800, 0x0040, 0x9f31, 0x6013, 0x0000, 0x0078,
-+ 0x9f32, 0xa006, 0x0d7f, 0x007c, 0x0c7e, 0x0f7e, 0x017e, 0x027e,
-+ 0x037e, 0x157e, 0x2079, 0xab8c, 0x7930, 0x7834, 0x1078, 0x254d,
-+ 0x00c0, 0x9f58, 0x1078, 0x45c4, 0x00c0, 0x9f58, 0x2011, 0xab90,
-+ 0xac98, 0x000a, 0x20a9, 0x0004, 0x1078, 0x80de, 0x00c0, 0x9f58,
-+ 0x2011, 0xab94, 0xac98, 0x0006, 0x20a9, 0x0004, 0x1078, 0x80de,
-+ 0x157f, 0x037f, 0x027f, 0x017f, 0x0f7f, 0x0c7f, 0x007c, 0x0c7e,
-+ 0x007e, 0x017e, 0x027e, 0x037e, 0x157e, 0x2011, 0xab83, 0x2204,
-+ 0x8211, 0x220c, 0x1078, 0x254d, 0x00c0, 0x9f84, 0x1078, 0x45c4,
-+ 0x00c0, 0x9f84, 0x2011, 0xab96, 0xac98, 0x000a, 0x20a9, 0x0004,
-+ 0x1078, 0x80de, 0x00c0, 0x9f84, 0x2011, 0xab9a, 0xac98, 0x0006,
-+ 0x20a9, 0x0004, 0x1078, 0x80de, 0x157f, 0x037f, 0x027f, 0x017f,
-+ 0x007f, 0x0c7f, 0x007c, 0x0e7e, 0x0c7e, 0x087e, 0x077e, 0x067e,
-+ 0x057e, 0x047e, 0x027e, 0x127e, 0x2091, 0x8000, 0x2740, 0x2029,
-+ 0xa8ba, 0x252c, 0x2021, 0xa8c0, 0x2424, 0x2061, 0xad00, 0x2071,
-+ 0xa600, 0x7648, 0x7064, 0x81ff, 0x0040, 0x9fb2, 0x007e, 0xa186,
-+ 0xa9b3, 0x007f, 0x0040, 0x9fb2, 0x8001, 0xa602, 0x00c8, 0xa01c,
-+ 0x0078, 0x9fb5, 0xa606, 0x0040, 0xa01c, 0x2100, 0xac06, 0x0040,
-+ 0xa012, 0x1078, 0xa242, 0x0040, 0xa012, 0x671c, 0xa786, 0x0001,
-+ 0x0040, 0xa037, 0xa786, 0x0004, 0x0040, 0xa037, 0xa786, 0x0007,
-+ 0x0040, 0xa012, 0x2500, 0xac06, 0x0040, 0xa012, 0x2400, 0xac06,
-+ 0x0040, 0xa012, 0x1078, 0xa256, 0x00c0, 0xa012, 0x88ff, 0x0040,
-+ 0x9fdd, 0x6020, 0xa906, 0x00c0, 0xa012, 0x0d7e, 0x6000, 0xa086,
-+ 0x0004, 0x00c0, 0x9fe7, 0x017e, 0x1078, 0x1757, 0x017f, 0xa786,
-+ 0x0008, 0x00c0, 0x9ff6, 0x1078, 0x8f00, 0x00c0, 0x9ff6, 0x1078,
-+ 0x7c83, 0x0d7f, 0x1078, 0x8ec6, 0x0078, 0xa012, 0x6010, 0x2068,
-+ 0x1078, 0x8d06, 0x0040, 0xa00f, 0xa786, 0x0003, 0x00c0, 0xa026,
-+ 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0xa4e2, 0x017e,
-+ 0x1078, 0x8f7d, 0x1078, 0x4a73, 0x017f, 0x1078, 0x8eb9, 0x0d7f,
-+ 0x1078, 0x8ec6, 0xace0, 0x0010, 0x2001, 0xa616, 0x2004, 0xac02,
-+ 0x00c8, 0xa01c, 0x0078, 0x9f9f, 0x127f, 0x027f, 0x047f, 0x057f,
-+ 0x067f, 0x077f, 0x087f, 0x0c7f, 0x0e7f, 0x007c, 0xa786, 0x0006,
-+ 0x00c0, 0xa000, 0xa386, 0x0005, 0x0040, 0xa034, 0x1078, 0xa4e2,
-+ 0x1078, 0xa1ca, 0x0078, 0xa00f, 0x0d7f, 0x0078, 0xa012, 0x1078,
-+ 0xa256, 0x00c0, 0xa012, 0x81ff, 0x0040, 0xa012, 0xa180, 0x0001,
-+ 0x2004, 0xa086, 0x0018, 0x0040, 0xa04c, 0xa180, 0x0001, 0x2004,
-+ 0xa086, 0x002d, 0x00c0, 0xa012, 0x6000, 0xa086, 0x0002, 0x00c0,
-+ 0xa012, 0x1078, 0x8eec, 0x0040, 0xa05d, 0x1078, 0x8f00, 0x00c0,
-+ 0xa012, 0x1078, 0x7c83, 0x0078, 0xa065, 0x1078, 0x28a6, 0x1078,
-+ 0x8f00, 0x00c0, 0xa065, 0x1078, 0x7c83, 0x1078, 0x8ec6, 0x0078,
-+ 0xa012, 0x0c7e, 0x0e7e, 0x017e, 0x2c08, 0x2170, 0xa006, 0x1078,
-+ 0xa1e6, 0x017f, 0x0040, 0xa079, 0x601c, 0xa084, 0x000f, 0x1079,
-+ 0xa07c, 0x0e7f, 0x0c7f, 0x007c, 0xa084, 0xa084, 0xa084, 0xa084,
-+ 0xa084, 0xa084, 0xa086, 0xa084, 0xa006, 0x007c, 0x047e, 0x017e,
-+ 0x7018, 0xa080, 0x0028, 0x2024, 0xa4a4, 0x00ff, 0x8427, 0x2c00,
-+ 0x2009, 0x0020, 0x1078, 0xa21d, 0x017f, 0x047f, 0x037e, 0x2019,
-+ 0x0002, 0x1078, 0x9dc7, 0x037f, 0xa085, 0x0001, 0x007c, 0x2001,
-+ 0x0001, 0x1078, 0x44ee, 0x157e, 0x017e, 0x027e, 0x037e, 0x20a9,
-+ 0x0004, 0x2019, 0xa605, 0x2011, 0xab96, 0x1078, 0x80de, 0x037f,
-+ 0x027f, 0x017f, 0x157f, 0xa005, 0x007c, 0x0f7e, 0x0e7e, 0x0c7e,
-+ 0x087e, 0x077e, 0x067e, 0x027e, 0x127e, 0x2091, 0x8000, 0x2740,
-+ 0x2061, 0xad00, 0x2079, 0x0001, 0x8fff, 0x0040, 0xa11d, 0x2071,
-+ 0xa600, 0x7648, 0x7064, 0x8001, 0xa602, 0x00c8, 0xa11d, 0x88ff,
-+ 0x0040, 0xa0d8, 0x2800, 0xac06, 0x00c0, 0xa113, 0x2079, 0x0000,
-+ 0x1078, 0xa242, 0x0040, 0xa113, 0x2400, 0xac06, 0x0040, 0xa113,
-+ 0x671c, 0xa786, 0x0006, 0x00c0, 0xa113, 0xa786, 0x0007, 0x0040,
-+ 0xa113, 0x88ff, 0x00c0, 0xa0f7, 0x6018, 0xa206, 0x00c0, 0xa113,
-+ 0x85ff, 0x0040, 0xa0f7, 0x6020, 0xa106, 0x00c0, 0xa113, 0x0d7e,
-+ 0x6000, 0xa086, 0x0004, 0x00c0, 0xa103, 0x1078, 0xa495, 0x601f,
-+ 0x0007, 0x1078, 0x1757, 0x6010, 0x2068, 0x1078, 0x8d06, 0x0040,
-+ 0xa10d, 0x047e, 0x1078, 0xa1ca, 0x047f, 0x0d7f, 0x1078, 0x8ec6,
-+ 0x88ff, 0x00c0, 0xa127, 0xace0, 0x0010, 0x2001, 0xa616, 0x2004,
-+ 0xac02, 0x00c8, 0xa11d, 0x0078, 0xa0c4, 0xa006, 0x127f, 0x027f,
-+ 0x067f, 0x077f, 0x087f, 0x0c7f, 0x0e7f, 0x0f7f, 0x007c, 0xa8c5,
-+ 0x0001, 0x0078, 0xa11e, 0x077e, 0x057e, 0x087e, 0x2041, 0x0000,
-+ 0x2029, 0x0001, 0x2c20, 0x2019, 0x0002, 0x6218, 0x097e, 0x2049,
-+ 0x0000, 0x1078, 0x7246, 0x097f, 0x087f, 0x2039, 0x0000, 0x1078,
-+ 0x72f3, 0x1078, 0xa0b5, 0x057f, 0x077f, 0x007c, 0x027e, 0x047e,
-+ 0x057e, 0x077e, 0x0c7e, 0x157e, 0x2c20, 0x2128, 0x20a9, 0x007f,
-+ 0x2009, 0x0000, 0x017e, 0x037e, 0x1078, 0x45c4, 0x00c0, 0xa16e,
-+ 0x2c10, 0x057e, 0x087e, 0x2041, 0x0000, 0x2508, 0x2029, 0x0001,
-+ 0x097e, 0x2049, 0x0000, 0x1078, 0x7246, 0x097f, 0x087f, 0x2039,
-+ 0x0000, 0x1078, 0x72f3, 0x1078, 0xa0b5, 0x057f, 0x037f, 0x017f,
-+ 0x8108, 0x00f0, 0xa152, 0x157f, 0x0c7f, 0x077f, 0x057f, 0x047f,
-+ 0x027f, 0x007c, 0x077e, 0x057e, 0x6218, 0x087e, 0x2041, 0x0000,
-+ 0x2029, 0x0001, 0x2019, 0x0048, 0x097e, 0x2049, 0x0000, 0x1078,
-+ 0x7246, 0x097f, 0x087f, 0x2039, 0x0000, 0x1078, 0x72f3, 0x2c20,
-+ 0x1078, 0xa0b5, 0x057f, 0x077f, 0x007c, 0x027e, 0x047e, 0x057e,
-+ 0x077e, 0x0c7e, 0x157e, 0x2c20, 0x20a9, 0x007f, 0x2009, 0x0000,
-+ 0x017e, 0x037e, 0x1078, 0x45c4, 0x00c0, 0xa1be, 0x2c10, 0x087e,
-+ 0x2041, 0x0000, 0x2828, 0x047e, 0x2021, 0x0001, 0x1078, 0xa472,
-+ 0x047f, 0x097e, 0x2049, 0x0000, 0x1078, 0x7246, 0x097f, 0x087f,
-+ 0x2039, 0x0000, 0x1078, 0x72f3, 0x1078, 0xa0b5, 0x037f, 0x017f,
-+ 0x8108, 0x00f0, 0xa1a0, 0x157f, 0x0c7f, 0x077f, 0x057f, 0x047f,
-+ 0x027f, 0x007c, 0x017e, 0x0f7e, 0xad82, 0xcd00, 0x0048, 0xa1e3,
-+ 0xad82, 0xffff, 0x00c8, 0xa1e3, 0x6800, 0xa07d, 0x0040, 0xa1e0,
-+ 0x6803, 0x0000, 0x6b52, 0x1078, 0x4a73, 0x2f68, 0x0078, 0xa1d4,
-+ 0x6b52, 0x1078, 0x4a73, 0x0f7f, 0x017f, 0x007c, 0x0e7e, 0x047e,
-+ 0x037e, 0x2061, 0xad00, 0xa005, 0x00c0, 0xa1f6, 0x2071, 0xa600,
-+ 0x7448, 0x7064, 0x8001, 0xa402, 0x00c8, 0xa218, 0x2100, 0xac06,
-+ 0x0040, 0xa20a, 0x6000, 0xa086, 0x0000, 0x0040, 0xa20a, 0x6008,
-+ 0xa206, 0x00c0, 0xa20a, 0x6018, 0xa1a0, 0x0006, 0x2424, 0xa406,
-+ 0x0040, 0xa214, 0xace0, 0x0010, 0x2001, 0xa616, 0x2004, 0xac02,
-+ 0x00c8, 0xa218, 0x0078, 0xa1f6, 0xa085, 0x0001, 0x0078, 0xa219,
-+ 0xa006, 0x037f, 0x047f, 0x0e7f, 0x007c, 0x0d7e, 0x007e, 0x1078,
-+ 0x138b, 0x007f, 0x1040, 0x1332, 0x6837, 0x010d, 0x685e, 0x027e,
-+ 0x2010, 0x1078, 0x8cf2, 0x2001, 0x0000, 0x0040, 0xa233, 0x2200,
-+ 0xa080, 0x0008, 0x2004, 0x027f, 0x684a, 0x6956, 0x6c46, 0x684f,
-+ 0x0000, 0xa006, 0x68b2, 0x6802, 0x683a, 0x685a, 0x1078, 0x4a73,
-+ 0x0d7f, 0x007c, 0x6700, 0xa786, 0x0000, 0x0040, 0xa255, 0xa786,
-+ 0x0001, 0x0040, 0xa255, 0xa786, 0x000a, 0x0040, 0xa255, 0xa786,
-+ 0x0009, 0x0040, 0xa255, 0xa085, 0x0001, 0x007c, 0x0e7e, 0x6018,
-+ 0x2070, 0x70a0, 0xa206, 0x0e7f, 0x007c, 0x017e, 0x6004, 0xa08e,
-+ 0x001e, 0x00c0, 0xa277, 0x8007, 0x6130, 0xa18c, 0x00ff, 0xa105,
-+ 0x6032, 0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0005, 0x2001,
-+ 0xa8a3, 0x2004, 0x6016, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x017f,
-+ 0x007c, 0x0005, 0x0005, 0x007c, 0x6024, 0xd0e4, 0x0040, 0xa28d,
-+ 0xd0cc, 0x0040, 0xa287, 0x1078, 0x8fbf, 0x0078, 0xa28d, 0x1078,
-+ 0xa495, 0x1078, 0x5bc1, 0x1078, 0x772d, 0x007c, 0xa280, 0x0007,
-+ 0x2004, 0xa084, 0x000f, 0x0079, 0xa295, 0xa29e, 0xa29e, 0xa29e,
-+ 0xa2a0, 0xa29e, 0xa2a0, 0xa2a0, 0xa29e, 0xa2a0, 0xa006, 0x007c,
-+ 0xa085, 0x0001, 0x007c, 0xa280, 0x0007, 0x2004, 0xa084, 0x000f,
-+ 0x0079, 0xa2aa, 0xa2b3, 0xa2b3, 0xa2b3, 0xa2b3, 0xa2b3, 0xa2b3,
-+ 0xa2be, 0xa2b3, 0xa2b3, 0x6007, 0x003b, 0x602b, 0x0009, 0x6013,
-+ 0x2a00, 0x6003, 0x0001, 0x1078, 0x5d8a, 0x007c, 0x0c7e, 0x2260,
-+ 0x1078, 0xa495, 0x603f, 0x0000, 0x6024, 0xc0f4, 0xc0cc, 0x6026,
-+ 0x0c7f, 0x0d7e, 0x2268, 0xa186, 0x0007, 0x00c0, 0xa31f, 0x6810,
-+ 0xa005, 0x0040, 0xa2dc, 0xa080, 0x0013, 0x2004, 0xd0fc, 0x00c0,
-+ 0xa2dc, 0x0d7f, 0x0078, 0xa2b3, 0x6007, 0x003a, 0x6003, 0x0001,
-+ 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0c7e, 0x2d60, 0x6100, 0xa186,
-+ 0x0002, 0x00c0, 0xa3ad, 0x6010, 0xa005, 0x00c0, 0xa2f6, 0x6000,
-+ 0xa086, 0x0007, 0x10c0, 0x1332, 0x0078, 0xa3ad, 0xa08c, 0xf000,
-+ 0x00c0, 0xa302, 0x0078, 0xa302, 0x2068, 0x6800, 0xa005, 0x00c0,
-+ 0xa2fc, 0x2d00, 0xa080, 0x0013, 0x2004, 0xa084, 0x0003, 0xa086,
-+ 0x0002, 0x00c0, 0xa31b, 0x6010, 0x2068, 0x684c, 0xc0dc, 0xc0f4,
-+ 0x684e, 0x6850, 0xc0f4, 0xc0fc, 0x6852, 0x2009, 0x0043, 0x1078,
-+ 0x9c1e, 0x0078, 0xa3ad, 0x2009, 0x0041, 0x0078, 0xa3a7, 0xa186,
-+ 0x0005, 0x00c0, 0xa366, 0x6810, 0xa080, 0x0013, 0x2004, 0xd0bc,
-+ 0x00c0, 0xa32d, 0x0d7f, 0x0078, 0xa2b3, 0xd0b4, 0x0040, 0xa335,
-+ 0xd0fc, 0x1040, 0x1332, 0x0078, 0xa2cf, 0x6007, 0x003a, 0x6003,
-+ 0x0001, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0c7e, 0x2d60, 0x6100,
-+ 0xa186, 0x0002, 0x0040, 0xa348, 0xa186, 0x0004, 0x00c0, 0xa3ad,
-+ 0x2071, 0xa8e7, 0x7000, 0xa086, 0x0003, 0x00c0, 0xa355, 0x7004,
-+ 0xac06, 0x00c0, 0xa355, 0x7003, 0x0000, 0x6810, 0xa080, 0x0013,
-+ 0x200c, 0xc1f4, 0xc1dc, 0x2102, 0x8000, 0x200c, 0xc1f4, 0xc1fc,
-+ 0xc1bc, 0x2102, 0x2009, 0x0042, 0x0078, 0xa3a7, 0x037e, 0x0d7e,
-+ 0x0d7e, 0x1078, 0x138b, 0x037f, 0x1040, 0x1332, 0x6837, 0x010d,
-+ 0x6803, 0x0000, 0x683b, 0x0000, 0x685b, 0x0000, 0x6b5e, 0x6857,
-+ 0x0045, 0x2c00, 0x6862, 0x6034, 0x6872, 0x2360, 0x6024, 0xc0dd,
-+ 0x6026, 0x6018, 0xa080, 0x0028, 0x2004, 0xa084, 0x00ff, 0x8007,
-+ 0x6320, 0x6b4a, 0x6846, 0x684f, 0x0000, 0x6d6a, 0x6e66, 0x686f,
-+ 0x0001, 0x1078, 0x4a73, 0x2019, 0x0045, 0x6008, 0x2068, 0x1078,
-+ 0x9dc7, 0x2d00, 0x600a, 0x601f, 0x0006, 0x6003, 0x0007, 0x6017,
-+ 0x0000, 0x603f, 0x0000, 0x0d7f, 0x037f, 0x0078, 0xa3ae, 0x603f,
-+ 0x0000, 0x6003, 0x0007, 0x1078, 0x9c1e, 0x0c7f, 0x0d7f, 0x007c,
-+ 0xa186, 0x0013, 0x00c0, 0xa3ba, 0x6004, 0xa082, 0x0085, 0x2008,
-+ 0x0079, 0xa3d4, 0xa186, 0x0027, 0x00c0, 0xa3cd, 0x1078, 0x61cd,
-+ 0x037e, 0x0d7e, 0x6010, 0x2068, 0x2019, 0x0004, 0x1078, 0xa1ca,
-+ 0x0d7f, 0x037f, 0x1078, 0x62d1, 0x007c, 0xa186, 0x0014, 0x0040,
-+ 0xa3be, 0x1078, 0x7773, 0x007c, 0xa3dd, 0xa3db, 0xa3db, 0xa3db,
-+ 0xa3db, 0xa3db, 0xa3dd, 0x1078, 0x1332, 0x1078, 0x61cd, 0x6003,
-+ 0x000c, 0x1078, 0x62d1, 0x007c, 0xa182, 0x008c, 0x00c8, 0xa3ee,
-+ 0xa182, 0x0085, 0x0048, 0xa3ee, 0x0079, 0xa3f1, 0x1078, 0x7773,
-+ 0x007c, 0xa3f8, 0xa3f8, 0xa3f8, 0xa3f8, 0xa3fa, 0xa419, 0xa3f8,
-+ 0x1078, 0x1332, 0x0d7e, 0x2c68, 0x1078, 0x76c7, 0x0040, 0xa414,
-+ 0x6003, 0x0001, 0x6007, 0x001e, 0x2009, 0xab8e, 0x210c, 0x6136,
-+ 0x2009, 0xab8f, 0x210c, 0x613a, 0x600b, 0xffff, 0x6918, 0x611a,
-+ 0x601f, 0x0004, 0x1078, 0x5d8a, 0x2d60, 0x1078, 0x772d, 0x0d7f,
-+ 0x007c, 0x1078, 0x772d, 0x007c, 0x0e7e, 0x6018, 0x2070, 0x7000,
-+ 0xd0ec, 0x0e7f, 0x007c, 0x6010, 0xa08c, 0xf000, 0x0040, 0xa471,
-+ 0xa080, 0x0013, 0x200c, 0xd1ec, 0x0040, 0xa471, 0x2001, 0xa672,
-+ 0x2004, 0xd0ec, 0x0040, 0xa471, 0x6003, 0x0002, 0x6024, 0xc0e5,
-+ 0x6026, 0xd1ac, 0x0040, 0xa44f, 0x0f7e, 0x2c78, 0x1078, 0x495f,
-+ 0x0f7f, 0x0040, 0xa44f, 0x2001, 0xa8a4, 0x2004, 0x603e, 0x2009,
-+ 0xa672, 0x210c, 0xd1f4, 0x00c0, 0xa46f, 0x0078, 0xa461, 0x2009,
-+ 0xa672, 0x210c, 0xd1f4, 0x0040, 0xa45b, 0x6024, 0xc0e4, 0x6026,
-+ 0xa006, 0x0078, 0xa471, 0x2001, 0xa8a4, 0x200c, 0x8103, 0xa100,
-+ 0x603e, 0x6018, 0xa088, 0x002b, 0x2104, 0xa005, 0x0040, 0xa46c,
-+ 0xa088, 0x0003, 0x0078, 0xa464, 0x2c0a, 0x600f, 0x0000, 0xa085,
-+ 0x0001, 0x007c, 0x017e, 0x0c7e, 0x0e7e, 0x6120, 0xa2f0, 0x002b,
-+ 0x2e04, 0x2060, 0x8cff, 0x0040, 0xa491, 0x84ff, 0x00c0, 0xa484,
-+ 0x6020, 0xa106, 0x00c0, 0xa48c, 0x600c, 0x2072, 0x1078, 0x5bc1,
-+ 0x1078, 0x772d, 0x0078, 0xa48e, 0xacf0, 0x0003, 0x2e64, 0x0078,
-+ 0xa47a, 0x0e7f, 0x0c7f, 0x017f, 0x007c, 0x0d7e, 0x6018, 0xa0e8,
-+ 0x002b, 0x2d04, 0xa005, 0x0040, 0xa4a7, 0xac06, 0x0040, 0xa4a5,
-+ 0x2d04, 0xa0e8, 0x0003, 0x0078, 0xa499, 0x600c, 0x206a, 0x0d7f,
-+ 0x007c, 0x027e, 0x037e, 0x157e, 0x2011, 0xa626, 0x2204, 0xa084,
-+ 0x00ff, 0x2019, 0xab8e, 0x2334, 0xa636, 0x00c0, 0xa4d5, 0x8318,
-+ 0x2334, 0x2204, 0xa084, 0xff00, 0xa636, 0x00c0, 0xa4d5, 0x2011,
-+ 0xab90, 0x6018, 0xa098, 0x000a, 0x20a9, 0x0004, 0x1078, 0x80de,
-+ 0x00c0, 0xa4d5, 0x2011, 0xab94, 0x6018, 0xa098, 0x0006, 0x20a9,
-+ 0x0004, 0x1078, 0x80de, 0x00c0, 0xa4d5, 0x157f, 0x037f, 0x027f,
-+ 0x007c, 0x0e7e, 0x2071, 0xa600, 0x1078, 0x42b8, 0x1078, 0x2677,
-+ 0x0e7f, 0x007c, 0x0e7e, 0x6018, 0x2070, 0x7000, 0xd0fc, 0x0040,
-+ 0xa4eb, 0x1078, 0xa4ed, 0x0e7f, 0x007c, 0x6850, 0xc0e5, 0x6852,
-+ 0x007c, 0x0e7e, 0x0c7e, 0x077e, 0x067e, 0x057e, 0x047e, 0x027e,
-+ 0x017e, 0x127e, 0x2091, 0x8000, 0x2029, 0xa8ba, 0x252c, 0x2021,
-+ 0xa8c0, 0x2424, 0x2061, 0xad00, 0x2071, 0xa600, 0x7648, 0x7064,
-+ 0xa606, 0x0040, 0xa545, 0x671c, 0xa786, 0x0001, 0x0040, 0xa514,
-+ 0xa786, 0x0008, 0x00c0, 0xa53b, 0x2500, 0xac06, 0x0040, 0xa53b,
-+ 0x2400, 0xac06, 0x0040, 0xa53b, 0x1078, 0xa242, 0x0040, 0xa53b,
-+ 0x1078, 0xa256, 0x00c0, 0xa53b, 0x6000, 0xa086, 0x0004, 0x00c0,
-+ 0xa52d, 0x017e, 0x1078, 0x1757, 0x017f, 0x1078, 0x8eec, 0x00c0,
-+ 0xa533, 0x1078, 0x28a6, 0x1078, 0x8f00, 0x00c0, 0xa539, 0x1078,
-+ 0x7c83, 0x1078, 0x8ec6, 0xace0, 0x0010, 0x2001, 0xa616, 0x2004,
-+ 0xac02, 0x00c8, 0xa545, 0x0078, 0xa504, 0x127f, 0x017f, 0x027f,
-+ 0x047f, 0x057f, 0x067f, 0x077f, 0x0c7f, 0x0e7f, 0x007c, 0x127e,
-+ 0x007e, 0x0e7e, 0x017e, 0x2091, 0x8000, 0x2071, 0xa640, 0xd5a4,
-+ 0x0040, 0xa55d, 0x7034, 0x8000, 0x7036, 0xd5b4, 0x0040, 0xa563,
-+ 0x7030, 0x8000, 0x7032, 0xd5ac, 0x0040, 0xa579, 0x2500, 0xa084,
-+ 0x0007, 0xa08e, 0x0003, 0x0040, 0xa579, 0xa08e, 0x0004, 0x0040,
-+ 0xa579, 0xa08e, 0x0005, 0x0040, 0xa579, 0x2071, 0xa64a, 0x1078,
-+ 0xa5ba, 0x017f, 0x0e7f, 0x007f, 0x127f, 0x007c, 0x127e, 0x007e,
-+ 0x0e7e, 0x017e, 0x2091, 0x8000, 0x2071, 0xa640, 0xd5a4, 0x0040,
-+ 0xa58c, 0x7034, 0x8000, 0x7036, 0xd5b4, 0x0040, 0xa592, 0x7030,
-+ 0x8000, 0x7032, 0xd5ac, 0x0040, 0xa5a8, 0x2500, 0xa084, 0x0007,
-+ 0xa08e, 0x0003, 0x0040, 0xa5a8, 0xa08e, 0x0004, 0x0040, 0xa5a8,
-+ 0xa08e, 0x0005, 0x0040, 0xa5a8, 0x2071, 0xa64a, 0x1078, 0xa5ba,
-+ 0x017f, 0x0e7f, 0x007f, 0x127f, 0x007c, 0x127e, 0x007e, 0x0e7e,
-+ 0x2091, 0x8000, 0x2071, 0xa642, 0x1078, 0xa5ba, 0x0e7f, 0x007f,
-+ 0x127f, 0x007c, 0x2e04, 0x8000, 0x2072, 0x00c8, 0xa5c3, 0x8e70,
-+ 0x2e04, 0x8000, 0x2072, 0x007c, 0x0e7e, 0x2071, 0xa640, 0x1078,
-+ 0xa5ba, 0x0e7f, 0x007c, 0x0e7e, 0x2071, 0xa644, 0x1078, 0xa5ba,
-+ 0x0e7f, 0x007c, 0x127e, 0x007e, 0x0e7e, 0x2091, 0x8000, 0x2071,
-+ 0xa640, 0x7044, 0x8000, 0x7046, 0x0e7f, 0x007f, 0x127f, 0x007c,
-+ 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080,
-+ 0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000, 0x8000,
-+ 0xa50c
-+};
-+#else
-+/*
-+ * Firmware Version 1.15.37 (15:36 May 03, 1999)
-+ */
-+static const u_int16_t isp_2100_risc_code[] = {
-+ 0x0078, 0x1029, 0x0000, 0x66e6, 0x0000, 0x2043, 0x4f50, 0x5952,
-+ 0x4947, 0x4854, 0x2031, 0x3939, 0x3620, 0x514c, 0x4f47, 0x4943,
-+ 0x2043, 0x4f52, 0x504f, 0x5241, 0x5449, 0x4f4e, 0x2049, 0x5350,
-+ 0x3231, 0x3030, 0x2046, 0x6972, 0x6d77, 0x6172, 0x6520, 0x2056,
-+ 0x6572, 0x7369, 0x6f6e, 0x2030, 0x312e, 0x3135, 0x2020, 0x2020,
-+ 0x2400, 0x20c1, 0x0021, 0x20a1, 0x76e6, 0x2009, 0x0000, 0x20a9,
-+ 0x071a, 0x41a4, 0x3400, 0x20c9, 0x7bff, 0x2091, 0x2000, 0x2059,
-+ 0x0000, 0x2b78, 0x7823, 0x0004, 0x2089, 0x209a, 0x2051, 0x7700,
-+ 0x2a70, 0x705b, 0x9600, 0x705f, 0xffff, 0x7057, 0x95f9, 0x7063,
-+ 0x0300, 0x1078, 0x127a, 0x20a1, 0x7e00, 0x715c, 0x810d, 0x810d,
-+ 0x810d, 0x810d, 0xa18c, 0x000f, 0x2001, 0x0007, 0xa112, 0xa00e,
-+ 0x21a8, 0x41a4, 0x3400, 0x8211, 0x00c0, 0x1058, 0x715c, 0x3400,
-+ 0xa102, 0x0040, 0x1068, 0x0048, 0x1068, 0x20a8, 0xa00e, 0x41a4,
-+ 0x1078, 0x1241, 0x1078, 0x1366, 0x1078, 0x14eb, 0x1078, 0x19c0,
-+ 0x1078, 0x362b, 0x1078, 0x5cac, 0x1078, 0x12f1, 0x1078, 0x2429,
-+ 0x1078, 0x3d6e, 0x1078, 0x3b46, 0x1078, 0x45af, 0x1078, 0x1e55,
-+ 0x1078, 0x47ef, 0x1078, 0x428f, 0x1078, 0x1d74, 0x1078, 0x1e34,
-+ 0x2091, 0x3009, 0x7823, 0x0000, 0x0090, 0x109d, 0x7820, 0xa086,
-+ 0x0002, 0x00c0, 0x109d, 0x7823, 0x4000, 0x0068, 0x1095, 0x781b,
-+ 0x0001, 0x2091, 0x5000, 0x2091, 0x4080, 0x2a70, 0x7003, 0x0000,
-+ 0x2001, 0x017f, 0x2003, 0x0000, 0x2a70, 0x7000, 0xa08e, 0x0003,
-+ 0x00c0, 0x10bd, 0x1078, 0x2d9c, 0x1078, 0x2451, 0x1078, 0x3dbe,
-+ 0x1078, 0x3c31, 0x2009, 0x0100, 0x2104, 0xa082, 0x0002, 0x0048,
-+ 0x10c1, 0x1078, 0x45c7, 0x0078, 0x10a4, 0x1079, 0x10c5, 0x0078,
-+ 0x10aa, 0x1078, 0x597e, 0x0078, 0x10b9, 0x10cf, 0x10d0, 0x1143,
-+ 0x10cd, 0x11be, 0x123e, 0x123f, 0x1240, 0x1078, 0x12cd, 0x007c,
-+ 0x127e, 0x0f7e, 0x2091, 0x8000, 0x1078, 0x2ec1, 0x2079, 0x0100,
-+ 0x7844, 0xa005, 0x00c0, 0x1134, 0x2011, 0x3558, 0x1078, 0x4689,
-+ 0x780f, 0x00ff, 0x7840, 0xa084, 0xfffb, 0x7842, 0x2011, 0x8010,
-+ 0x73b8, 0x1078, 0x2d59, 0x1078, 0x57c9, 0x2011, 0x0004, 0x1078,
-+ 0x6a6d, 0x1078, 0x3ae0, 0x70c7, 0x0000, 0x70c3, 0x0000, 0x1078,
-+ 0x1137, 0x72bc, 0x2079, 0x7751, 0x7804, 0xd0ac, 0x0040, 0x1101,
-+ 0xc295, 0x72be, 0xa296, 0x0004, 0x0040, 0x1122, 0x2011, 0x0001,
-+ 0x1078, 0x6a6d, 0x708b, 0x0000, 0x708f, 0xffff, 0x7003, 0x0002,
-+ 0x0f7f, 0x1078, 0x214a, 0x2011, 0x0005, 0x1078, 0x58d8, 0x1078,
-+ 0x4d96, 0x0c7e, 0x2061, 0x0100, 0x60e3, 0x0008, 0x0c7f, 0x127f,
-+ 0x0078, 0x1136, 0x708b, 0x0000, 0x708f, 0xffff, 0x7003, 0x0002,
-+ 0x2011, 0x0005, 0x1078, 0x58d8, 0x1078, 0x4d96, 0x0c7e, 0x2061,
-+ 0x0100, 0x60e3, 0x0008, 0x0c7f, 0x0f7f, 0x127f, 0x007c, 0x0c7e,
-+ 0x20a9, 0x0082, 0x2009, 0x007e, 0x1078, 0x3834, 0x8108, 0x00f0,
-+ 0x113c, 0x0c7f, 0x007c, 0x127e, 0x2091, 0x8000, 0x708c, 0xa086,
-+ 0xffff, 0x0040, 0x1151, 0x1078, 0x214a, 0x1078, 0x4d96, 0x0078,
-+ 0x11bc, 0x70bc, 0xd09c, 0x0040, 0x1179, 0xd084, 0x0040, 0x1179,
-+ 0x0f7e, 0x2079, 0x0100, 0x790c, 0xc1b5, 0x790e, 0x0f7f, 0xd08c,
-+ 0x0040, 0x1179, 0x70c0, 0xa086, 0xffff, 0x0040, 0x1175, 0x1078,
-+ 0x223f, 0x1078, 0x4d96, 0x2011, 0x0001, 0x2019, 0x0000, 0x1078,
-+ 0x2277, 0x1078, 0x4d96, 0x0078, 0x11bc, 0x70c4, 0xa005, 0x00c0,
-+ 0x11bc, 0x7088, 0xa005, 0x00c0, 0x11bc, 0x2001, 0x7752, 0x2004,
-+ 0xd0ac, 0x0040, 0x119f, 0x157e, 0x0c7e, 0x20a9, 0x007f, 0x2009,
-+ 0x0000, 0x017e, 0x1078, 0x384c, 0x00c0, 0x1192, 0x6000, 0xd0ec,
-+ 0x00c0, 0x119a, 0x017f, 0x8108, 0x00f0, 0x1189, 0x0c7f, 0x157f,
-+ 0x0078, 0x119f, 0x017f, 0x0c7f, 0x157f, 0x0078, 0x11bc, 0x7003,
-+ 0x0003, 0x708f, 0xffff, 0x2001, 0x0000, 0x1078, 0x2025, 0x1078,
-+ 0x2dd7, 0x2001, 0x7937, 0x2004, 0xa086, 0x0005, 0x00c0, 0x11b4,
-+ 0x2011, 0x0000, 0x1078, 0x58d8, 0x2011, 0x0000, 0x1078, 0x58e2,
-+ 0x1078, 0x4d96, 0x1078, 0x4e56, 0x127f, 0x007c, 0x017e, 0x0f7e,
-+ 0x127e, 0x2091, 0x8000, 0x2079, 0x0100, 0x7940, 0xa18c, 0x0010,
-+ 0x7942, 0x7924, 0xd1b4, 0x0040, 0x11cf, 0x7827, 0x0040, 0xd19c,
-+ 0x0040, 0x11d4, 0x7827, 0x0008, 0x007e, 0x037e, 0x157e, 0x7900,
-+ 0xa18a, 0x0003, 0x0050, 0x11fa, 0x7954, 0xd1ac, 0x00c0, 0x11fa,
-+ 0x2009, 0x00f8, 0x1078, 0x35fa, 0x7843, 0x0090, 0x7843, 0x0010,
-+ 0x20a9, 0x09c4, 0x7820, 0xd09c, 0x00c0, 0x11f2, 0x7824, 0xd0ac,
-+ 0x00c0, 0x122e, 0x00f0, 0x11ea, 0x2001, 0x0001, 0x1078, 0x2025,
-+ 0x0078, 0x1237, 0x7853, 0x0000, 0x782f, 0x0020, 0x20a9, 0x0008,
-+ 0x00e0, 0x1200, 0x2091, 0x6000, 0x00f0, 0x1200, 0x7853, 0x0400,
-+ 0x782f, 0x0000, 0x2009, 0x00f8, 0x1078, 0x35fa, 0x20a9, 0x000e,
-+ 0x0005, 0x00f0, 0x1210, 0x7853, 0x1400, 0x7843, 0x0090, 0x7843,
-+ 0x0010, 0x2019, 0x61a8, 0x7854, 0x0005, 0x0005, 0xd08c, 0x0040,
-+ 0x1225, 0x7824, 0xd0ac, 0x00c0, 0x122e, 0x8319, 0x00c0, 0x121b,
-+ 0x2001, 0x0001, 0x1078, 0x2025, 0x0078, 0x1235, 0x7828, 0xc09d,
-+ 0x782a, 0x7827, 0x0008, 0x7827, 0x0040, 0x7853, 0x0400, 0x157f,
-+ 0x037f, 0x007f, 0x127f, 0x0f7f, 0x017f, 0x007c, 0x007c, 0x007c,
-+ 0x007c, 0x2a70, 0x2009, 0x0100, 0x2104, 0xa082, 0x0002, 0x0048,
-+ 0x124d, 0x704f, 0xffff, 0x0078, 0x124f, 0x704f, 0x0000, 0x7053,
-+ 0xffff, 0x7067, 0x0000, 0x706b, 0x0000, 0x2061, 0x7920, 0x6003,
-+ 0x0909, 0x6007, 0x0000, 0x600b, 0x8800, 0x600f, 0x0200, 0x6013,
-+ 0x00ff, 0x6017, 0x0003, 0x601b, 0x0000, 0x601f, 0x07d0, 0x2061,
-+ 0x7928, 0x6003, 0x8000, 0x6007, 0x0000, 0x600b, 0x0000, 0x600f,
-+ 0x0200, 0x6013, 0x00ff, 0x6017, 0x0000, 0x601b, 0x0001, 0x601f,
-+ 0x0000, 0x007c, 0x1078, 0x12a0, 0x2011, 0x0000, 0x81ff, 0x0040,
-+ 0x129f, 0xa186, 0x0001, 0x00c0, 0x128f, 0x705f, 0x8fff, 0x7057,
-+ 0x8601, 0x7063, 0x0100, 0x705b, 0x8600, 0x0078, 0x129d, 0xa186,
-+ 0x0002, 0x00c0, 0x1297, 0x2011, 0x0000, 0x0078, 0x129d, 0xa186,
-+ 0x0005, 0x00c0, 0x129d, 0x2011, 0x0001, 0x1078, 0x12c7, 0x007c,
-+ 0x2009, 0x0000, 0x2011, 0x0000, 0x1078, 0x12c7, 0x2019, 0xaaaa,
-+ 0x2061, 0xffff, 0x2362, 0x2c24, 0x2061, 0x7fff, 0x2c04, 0xa406,
-+ 0x0040, 0x12b5, 0xc18d, 0x0078, 0x12c2, 0xc185, 0x2011, 0x0001,
-+ 0x1078, 0x12c7, 0x2061, 0xffff, 0x2362, 0x2c04, 0xa306, 0x00c0,
-+ 0x12c2, 0xc195, 0x2011, 0x0001, 0x1078, 0x12c7, 0x007c, 0x3800,
-+ 0xa084, 0xfffc, 0xa205, 0x20c0, 0x007c, 0x2091, 0x8000, 0x0068,
-+ 0x12cf, 0x007e, 0x017e, 0x2079, 0x0000, 0x7818, 0xa084, 0x0000,
-+ 0x00c0, 0x12d5, 0x017f, 0x792e, 0x007f, 0x782a, 0x007f, 0x7826,
-+ 0x3900, 0x783a, 0x7823, 0x8002, 0x781b, 0x0001, 0x2091, 0x5000,
-+ 0x2091, 0x4080, 0x2079, 0x7700, 0x7803, 0x0005, 0x0078, 0x12ee,
-+ 0x007c, 0x2071, 0x7700, 0x7158, 0x712e, 0x2021, 0x0001, 0xa190,
-+ 0x002d, 0xa298, 0x002d, 0x0048, 0x1307, 0x705c, 0xa302, 0x00c8,
-+ 0x1307, 0x220a, 0x2208, 0x2310, 0x8420, 0x0078, 0x12f9, 0x200b,
-+ 0x0000, 0x749e, 0x74a2, 0x007c, 0x0e7e, 0x127e, 0x2091, 0x8000,
-+ 0x2071, 0x7700, 0x70a0, 0xa0ea, 0x0010, 0x00c8, 0x131a, 0xa06e,
-+ 0x0078, 0x1324, 0x8001, 0x70a2, 0x702c, 0x2068, 0x2d04, 0x702e,
-+ 0x206b, 0x0000, 0x6807, 0x0000, 0x127f, 0x0e7f, 0x007c, 0x0e7e,
-+ 0x2071, 0x7700, 0x127e, 0x2091, 0x8000, 0x70a0, 0x8001, 0x00c8,
-+ 0x1334, 0xa06e, 0x0078, 0x133d, 0x70a2, 0x702c, 0x2068, 0x2d04,
-+ 0x702e, 0x206b, 0x0000, 0x6807, 0x0000, 0x127f, 0x0e7f, 0x007c,
-+ 0x0e7e, 0x127e, 0x2091, 0x8000, 0x2071, 0x7700, 0x702c, 0x206a,
-+ 0x2d00, 0x702e, 0x70a0, 0x8000, 0x70a2, 0x127f, 0x0e7f, 0x007c,
-+ 0x8dff, 0x0040, 0x135c, 0x6804, 0x6807, 0x0000, 0x007e, 0x1078,
-+ 0x1340, 0x0d7f, 0x0078, 0x1350, 0x007c, 0x0e7e, 0x2071, 0x7700,
-+ 0x70a0, 0xa08a, 0x0010, 0xa00d, 0x0e7f, 0x007c, 0x0e7e, 0x2071,
-+ 0x7959, 0x7007, 0x0000, 0x701b, 0x0000, 0x701f, 0x0000, 0x2071,
-+ 0x0000, 0x7010, 0xa085, 0x8004, 0x7012, 0x0e7f, 0x007c, 0x0e7e,
-+ 0x2270, 0x700b, 0x0000, 0x2071, 0x7959, 0x7018, 0xa088, 0x7962,
-+ 0x220a, 0x8000, 0xa084, 0x0007, 0x701a, 0x7004, 0xa005, 0x00c0,
-+ 0x138f, 0x0f7e, 0x2079, 0x0010, 0x1078, 0x13a0, 0x0f7f, 0x0e7f,
-+ 0x007c, 0x0e7e, 0x2071, 0x7959, 0x7004, 0xa005, 0x00c0, 0x139e,
-+ 0x0f7e, 0x2079, 0x0010, 0x1078, 0x13a0, 0x0f7f, 0x0e7f, 0x007c,
-+ 0x7000, 0x0079, 0x13a3, 0x13a7, 0x1411, 0x142e, 0x142e, 0x7018,
-+ 0x711c, 0xa106, 0x00c0, 0x13af, 0x7007, 0x0000, 0x007c, 0x0d7e,
-+ 0xa180, 0x7962, 0x2004, 0x700a, 0x2068, 0x8108, 0xa18c, 0x0007,
-+ 0x711e, 0x7803, 0x0026, 0x6824, 0x7832, 0x6828, 0x7836, 0x682c,
-+ 0x783a, 0x6830, 0x783e, 0x6810, 0x700e, 0x680c, 0x7016, 0x6804,
-+ 0x0d7f, 0xd084, 0x0040, 0x13d1, 0x7007, 0x0001, 0x1078, 0x13d6,
-+ 0x007c, 0x7007, 0x0002, 0x1078, 0x13ec, 0x007c, 0x017e, 0x027e,
-+ 0x710c, 0x2011, 0x0040, 0xa182, 0x0040, 0x00c8, 0x13e1, 0x2110,
-+ 0xa006, 0x700e, 0x7212, 0x8203, 0x7822, 0x7803, 0x0020, 0x7803,
-+ 0x0041, 0x027f, 0x017f, 0x007c, 0x017e, 0x027e, 0x137e, 0x147e,
-+ 0x157e, 0x7014, 0x2098, 0x20a1, 0x0014, 0x7803, 0x0026, 0x710c,
-+ 0x2011, 0x0040, 0xa182, 0x0040, 0x00c8, 0x1400, 0x2110, 0xa006,
-+ 0x700e, 0x22a8, 0x53a6, 0x8203, 0x7822, 0x7803, 0x0020, 0x7803,
-+ 0x0001, 0x3300, 0x7016, 0x157f, 0x147f, 0x137f, 0x027f, 0x017f,
-+ 0x007c, 0x137e, 0x147e, 0x157e, 0x2099, 0x77e5, 0x20a1, 0x0018,
-+ 0x20a9, 0x0008, 0x53a3, 0x7803, 0x0020, 0x127e, 0x2091, 0x8000,
-+ 0x7803, 0x0041, 0x7007, 0x0003, 0x7000, 0xc084, 0x7002, 0x700b,
-+ 0x77e0, 0x127f, 0x157f, 0x147f, 0x137f, 0x007c, 0x137e, 0x147e,
-+ 0x157e, 0x2001, 0x7814, 0x209c, 0x20a1, 0x0014, 0x7803, 0x0026,
-+ 0x2001, 0x7815, 0x20ac, 0x53a6, 0x2099, 0x7816, 0x20a1, 0x0018,
-+ 0x20a9, 0x0008, 0x53a3, 0x7803, 0x0020, 0x127e, 0x2091, 0x8000,
-+ 0x7803, 0x0001, 0x7007, 0x0004, 0x7000, 0xc08c, 0x7002, 0x700b,
-+ 0x7811, 0x127f, 0x157f, 0x147f, 0x137f, 0x007c, 0x017e, 0x0e7e,
-+ 0x2071, 0x7959, 0x0f7e, 0x2079, 0x0010, 0x7904, 0x7803, 0x0002,
-+ 0xd1fc, 0x0040, 0x1471, 0xa18c, 0x0700, 0x0040, 0x146e, 0x7008,
-+ 0xa080, 0x0002, 0x2003, 0x0200, 0x0078, 0x1471, 0x7004, 0x1079,
-+ 0x1475, 0x0f7f, 0x0e7f, 0x017f, 0x007c, 0x13a0, 0x147d, 0x149f,
-+ 0x14b9, 0x14e2, 0x147b, 0x0078, 0x147b, 0x137e, 0x147e, 0x157e,
-+ 0x7014, 0x20a0, 0x2099, 0x0014, 0x7803, 0x0040, 0x7010, 0x20a8,
-+ 0x53a5, 0x3400, 0x7016, 0x157f, 0x147f, 0x137f, 0x700c, 0xa005,
-+ 0x0040, 0x14a6, 0x1078, 0x13d6, 0x007c, 0x7008, 0xa080, 0x0002,
-+ 0x2003, 0x0100, 0x7007, 0x0000, 0x1078, 0x13a0, 0x007c, 0x700c,
-+ 0xa005, 0x0040, 0x14a6, 0x1078, 0x13ec, 0x007c, 0x0d7e, 0x7008,
-+ 0x2068, 0x7830, 0x6826, 0x7834, 0x682a, 0x7838, 0x682e, 0x783c,
-+ 0x6832, 0x680b, 0x0100, 0x0d7f, 0x7007, 0x0000, 0x1078, 0x13a0,
-+ 0x007c, 0x137e, 0x147e, 0x157e, 0x2001, 0x77e3, 0x2004, 0xa080,
-+ 0x000d, 0x20a0, 0x2099, 0x0014, 0x7803, 0x0040, 0x20a9, 0x0020,
-+ 0x53a5, 0x2001, 0x77e5, 0x2004, 0xd0bc, 0x0040, 0x14d8, 0x2001,
-+ 0x77ee, 0x2004, 0xa080, 0x000d, 0x20a0, 0x20a9, 0x0020, 0x53a5,
-+ 0x157f, 0x147f, 0x137f, 0x7007, 0x0000, 0x1078, 0x3e67, 0x1078,
-+ 0x13a0, 0x007c, 0x2001, 0x7813, 0x2003, 0x0100, 0x7007, 0x0000,
-+ 0x1078, 0x13a0, 0x007c, 0x127e, 0x2091, 0x2100, 0x2079, 0x0030,
-+ 0x2071, 0x796a, 0x7003, 0x0000, 0x700f, 0x7970, 0x7013, 0x7970,
-+ 0x780f, 0x0070, 0x127f, 0x007c, 0x6934, 0xa184, 0x0007, 0x0079,
-+ 0x1501, 0x1509, 0x154f, 0x1509, 0x1509, 0x1509, 0x1534, 0x1518,
-+ 0x150d, 0xa085, 0x0001, 0x0078, 0x1569, 0x684c, 0xd0bc, 0x0040,
-+ 0x1509, 0x6860, 0x682e, 0x685c, 0x682a, 0x6858, 0x0078, 0x1557,
-+ 0xa18c, 0x00ff, 0xa186, 0x001e, 0x00c0, 0x1509, 0x684c, 0xd0bc,
-+ 0x0040, 0x1509, 0x6860, 0x682e, 0x685c, 0x682a, 0x6804, 0x681a,
-+ 0xa080, 0x000d, 0x2004, 0xa084, 0x000f, 0xa080, 0x1c7e, 0x2004,
-+ 0x6832, 0x6858, 0x0078, 0x155f, 0xa18c, 0x00ff, 0xa186, 0x0015,
-+ 0x00c0, 0x1509, 0x684c, 0xd0ac, 0x0040, 0x1509, 0x6804, 0x681a,
-+ 0xa080, 0x000d, 0x2004, 0xa084, 0x000f, 0xa080, 0x1c7e, 0x2004,
-+ 0x6832, 0xa006, 0x682e, 0x682a, 0x6858, 0x0078, 0x155f, 0x684c,
-+ 0xd0ac, 0x0040, 0x1509, 0xa006, 0x682e, 0x682a, 0x6858, 0xa18c,
-+ 0x000f, 0xa188, 0x1c7e, 0x210c, 0x6932, 0x2d08, 0x691a, 0x6826,
-+ 0x684c, 0xc0dd, 0x684e, 0xa006, 0x680a, 0x697c, 0x6912, 0x6980,
-+ 0x6916, 0x007c, 0x20e1, 0x0007, 0x20e1, 0x2000, 0x2001, 0x020a,
-+ 0x2004, 0x82ff, 0x0040, 0x1584, 0xa280, 0x0004, 0x0d7e, 0x206c,
-+ 0x684c, 0xd0dc, 0x00c0, 0x1580, 0x1078, 0x14fc, 0x10c0, 0x12cd,
-+ 0x6808, 0x8000, 0x680a, 0x0d7f, 0x127e, 0x047e, 0x037e, 0x027e,
-+ 0x2091, 0x2100, 0x027f, 0x037f, 0x047f, 0x7000, 0xa005, 0x00c0,
-+ 0x1598, 0x7206, 0x2001, 0x15ac, 0x007e, 0x2260, 0x0078, 0x16c4,
-+ 0x710c, 0x220a, 0x8108, 0x230a, 0x8108, 0x240a, 0x8108, 0xa182,
-+ 0x798b, 0x0048, 0x15a5, 0x2009, 0x7970, 0x710e, 0x7000, 0xa005,
-+ 0x00c0, 0x15ac, 0x1078, 0x16ad, 0x127f, 0x007c, 0x127e, 0x027e,
-+ 0x037e, 0x0c7e, 0x007e, 0x2091, 0x2100, 0x007f, 0x047f, 0x037f,
-+ 0x027f, 0x0d7e, 0x0c7e, 0x2460, 0x6110, 0x2168, 0x6a62, 0x6b5e,
-+ 0xa005, 0x0040, 0x1600, 0x6808, 0xa005, 0x0040, 0x1666, 0x7000,
-+ 0xa005, 0x00c0, 0x15cd, 0x0078, 0x15fa, 0x700c, 0x7110, 0xa106,
-+ 0x00c0, 0x166a, 0x7004, 0xa406, 0x00c0, 0x15fa, 0x2001, 0x0005,
-+ 0x2004, 0xd08c, 0x0040, 0x15e3, 0x047e, 0x1078, 0x1785, 0x047f,
-+ 0x2460, 0x0078, 0x15c3, 0x2001, 0x0207, 0x2004, 0xd09c, 0x00c0,
-+ 0x15d6, 0x7804, 0xa084, 0x6000, 0x0040, 0x15f4, 0xa086, 0x6000,
-+ 0x0040, 0x15f4, 0x0078, 0x15d6, 0x7803, 0x0004, 0x7003, 0x0000,
-+ 0x7004, 0x2060, 0x2009, 0x0048, 0x1078, 0x5d41, 0x0078, 0x166a,
-+ 0x6808, 0xa005, 0x0040, 0x1666, 0x7000, 0xa005, 0x00c0, 0x160a,
-+ 0x0078, 0x1666, 0x700c, 0x7110, 0xa106, 0x00c0, 0x1613, 0x7004,
-+ 0xa406, 0x00c0, 0x1666, 0x2001, 0x0005, 0x2004, 0xd08c, 0x0040,
-+ 0x1620, 0x047e, 0x1078, 0x1785, 0x047f, 0x2460, 0x0078, 0x1600,
-+ 0x2001, 0x0207, 0x2004, 0xd09c, 0x00c0, 0x1613, 0x2001, 0x0005,
-+ 0x2004, 0xd08c, 0x00c0, 0x1619, 0x7804, 0xa084, 0x6000, 0x0040,
-+ 0x1637, 0xa086, 0x6000, 0x0040, 0x1637, 0x0078, 0x1613, 0x7007,
-+ 0x0000, 0xa016, 0x2218, 0x7000, 0xa08e, 0x0001, 0x0040, 0x1658,
-+ 0xa08e, 0x0002, 0x00c0, 0x1666, 0x0c7e, 0x0e7e, 0x6818, 0x2060,
-+ 0x1078, 0x1c53, 0x2804, 0xac70, 0x6034, 0xd09c, 0x00c0, 0x1654,
-+ 0x7308, 0x720c, 0x0078, 0x1656, 0x7310, 0x7214, 0x0e7f, 0x0c7f,
-+ 0x7820, 0xa318, 0x7824, 0xa211, 0x6810, 0xa300, 0x6812, 0x6814,
-+ 0xa201, 0x6816, 0x7803, 0x0004, 0x7003, 0x0000, 0x2009, 0x0048,
-+ 0x1078, 0x5d41, 0x0c7f, 0x0d7f, 0x127f, 0x007c, 0x0f7e, 0x0e7e,
-+ 0x2071, 0x796a, 0x7000, 0xa086, 0x0000, 0x0040, 0x16aa, 0x7004,
-+ 0xac06, 0x00c0, 0x169b, 0x2079, 0x0030, 0x7804, 0xd0fc, 0x00c0,
-+ 0x1697, 0x2001, 0x0207, 0x2004, 0xd09c, 0x00c0, 0x167d, 0x7803,
-+ 0x0004, 0x7804, 0xd0ac, 0x00c0, 0x1689, 0x7803, 0x0002, 0x7803,
-+ 0x0009, 0x7003, 0x0003, 0x7007, 0x0000, 0x0078, 0x169b, 0x1078,
-+ 0x1785, 0x0078, 0x1672, 0x157e, 0x20a9, 0x0009, 0x2009, 0x7970,
-+ 0x2104, 0xac06, 0x00c0, 0x16a5, 0x200a, 0xa188, 0x0003, 0x00f0,
-+ 0x16a0, 0x157f, 0x0e7f, 0x0f7f, 0x007c, 0x700c, 0x7110, 0xa106,
-+ 0x00c0, 0x16b5, 0x7003, 0x0000, 0x007c, 0x2104, 0x7006, 0x2060,
-+ 0x8108, 0x211c, 0x8108, 0x2124, 0x8108, 0xa182, 0x798b, 0x0048,
-+ 0x16c3, 0x2009, 0x7970, 0x7112, 0x8cff, 0x00c0, 0x16cb, 0x1078,
-+ 0x1950, 0x0078, 0x16f2, 0x6010, 0x2068, 0x2d58, 0x6828, 0xa406,
-+ 0x00c0, 0x16d6, 0x682c, 0xa306, 0x0040, 0x16da, 0x1078, 0x1c9e,
-+ 0x00c0, 0x16c7, 0x684c, 0xd0f4, 0x00c0, 0x16c7, 0x6824, 0x2050,
-+ 0x6818, 0x2060, 0x6830, 0x2040, 0x6034, 0xa0cc, 0x000f, 0x2009,
-+ 0x0011, 0x1078, 0x16f3, 0x0040, 0x16f1, 0x2009, 0x0001, 0x1078,
-+ 0x16f3, 0x2d58, 0x007c, 0x8aff, 0x0040, 0x1780, 0xa03e, 0x2730,
-+ 0x6850, 0xd0fc, 0x00c0, 0x1712, 0x0d7e, 0x2804, 0xac68, 0x2900,
-+ 0x0079, 0x1702, 0x1762, 0x1722, 0x1722, 0x1762, 0x1762, 0x175a,
-+ 0x1762, 0x1722, 0x1762, 0x1728, 0x1728, 0x1762, 0x1762, 0x1762,
-+ 0x1751, 0x1728, 0xc0fc, 0x6852, 0x6b6c, 0x6a70, 0x6d1c, 0x6c20,
-+ 0x0d7e, 0xd99c, 0x0040, 0x1765, 0x2804, 0xac68, 0x6f08, 0x6e0c,
-+ 0x0078, 0x1765, 0x6b08, 0x6a0c, 0x6d00, 0x6c04, 0x0078, 0x1765,
-+ 0x7b0c, 0xd3bc, 0x0040, 0x1749, 0x7004, 0x0e7e, 0x2070, 0x701c,
-+ 0x0e7f, 0xa086, 0x0008, 0x00c0, 0x1749, 0x7b08, 0xa39c, 0x0fff,
-+ 0x2d20, 0x0d7f, 0x0d7e, 0x6a14, 0x82ff, 0x00c0, 0x1744, 0x6810,
-+ 0xa302, 0x0048, 0x1744, 0x6b10, 0x2011, 0x0000, 0x2468, 0x0078,
-+ 0x174b, 0x6b10, 0x6a14, 0x6d00, 0x6c04, 0x6f08, 0x6e0c, 0x0078,
-+ 0x1765, 0x0d7f, 0x0d7e, 0x6834, 0xa084, 0x00ff, 0xa086, 0x001e,
-+ 0x00c0, 0x1762, 0x0d7f, 0x1078, 0x1c3a, 0x00c0, 0x16f3, 0xa00e,
-+ 0x0078, 0x1780, 0x0d7f, 0x1078, 0x12cd, 0x7b22, 0x7a26, 0x7d32,
-+ 0x7c36, 0x7f3a, 0x7e3e, 0x7902, 0x7000, 0x8000, 0x7002, 0x0d7f,
-+ 0x6828, 0xa300, 0x682a, 0x682c, 0xa201, 0x682e, 0x2300, 0x6b10,
-+ 0xa302, 0x6812, 0x2200, 0x6a14, 0xa203, 0x6816, 0x1078, 0x1c3a,
-+ 0x007c, 0x1078, 0x12cd, 0x1078, 0x12cd, 0x127e, 0x2091, 0x2100,
-+ 0x007e, 0x017e, 0x2b68, 0x6818, 0x2060, 0x7904, 0x7803, 0x0002,
-+ 0xa184, 0x0700, 0x00c0, 0x1783, 0xa184, 0x0003, 0xa086, 0x0003,
-+ 0x0040, 0x1783, 0x7000, 0x0079, 0x179d, 0x17a5, 0x17a7, 0x187f,
-+ 0x18e7, 0x18fe, 0x17a5, 0x17a5, 0x17a5, 0x1078, 0x12cd, 0x8001,
-+ 0x7002, 0xa184, 0x0880, 0x00c0, 0x17bc, 0x8aff, 0x0040, 0x181f,
-+ 0x2009, 0x0001, 0x1078, 0x16f3, 0x0040, 0x1910, 0x2009, 0x0001,
-+ 0x1078, 0x16f3, 0x0078, 0x1910, 0x7803, 0x0004, 0x7003, 0x0000,
-+ 0xd1bc, 0x00c0, 0x1807, 0x027e, 0x037e, 0x6b28, 0x6a2c, 0x7820,
-+ 0x686e, 0xa31a, 0x7824, 0x6872, 0xa213, 0x6b2a, 0x6a2e, 0x7820,
-+ 0x6910, 0xa100, 0x6812, 0x7824, 0x6914, 0xa101, 0x6816, 0x037f,
-+ 0x027f, 0x7830, 0x681e, 0x7834, 0x6822, 0x1078, 0x1c53, 0x2a00,
-+ 0x6826, 0x2c00, 0x681a, 0x2800, 0x6832, 0x7003, 0x0000, 0x6850,
-+ 0xc0fd, 0x6852, 0x6808, 0x8001, 0x680a, 0x00c0, 0x17f9, 0x684c,
-+ 0xd0e4, 0x0040, 0x17f9, 0x7004, 0x2060, 0x2009, 0x0048, 0x1078,
-+ 0x5d41, 0x7808, 0xd0ec, 0x00c0, 0x1803, 0x7803, 0x0009, 0x7003,
-+ 0x0004, 0x0078, 0x1910, 0x1078, 0x16ad, 0x0078, 0x1910, 0x057e,
-+ 0x7d0c, 0xd5bc, 0x00c0, 0x180e, 0x1078, 0x7692, 0x057f, 0x1078,
-+ 0x1914, 0x682b, 0xffff, 0x682f, 0xffff, 0x697c, 0x6912, 0x6980,
-+ 0x6916, 0x7803, 0x0009, 0x7003, 0x0003, 0x0078, 0x1910, 0x684c,
-+ 0xc0f5, 0x684e, 0x7814, 0xa005, 0x00c0, 0x1837, 0x7003, 0x0000,
-+ 0x6808, 0x8001, 0x680a, 0x00c0, 0x1833, 0x7004, 0x2060, 0x2009,
-+ 0x0048, 0x1078, 0x5d41, 0x1078, 0x16ad, 0x0078, 0x1910, 0x7814,
-+ 0x6910, 0xa102, 0x6812, 0x6914, 0xa183, 0x0000, 0x6816, 0x7814,
-+ 0x7908, 0xa18c, 0x0fff, 0xa188, 0x0007, 0x8114, 0x8214, 0x8214,
-+ 0xa10a, 0x8104, 0x8004, 0x8004, 0xa20a, 0x810b, 0x810b, 0x810b,
-+ 0x1078, 0x197b, 0x7803, 0x0004, 0x780f, 0xffff, 0x7803, 0x0001,
-+ 0x7804, 0xd0fc, 0x0040, 0x1858, 0x7803, 0x0002, 0x7803, 0x0004,
-+ 0x780f, 0x0070, 0x7004, 0x7007, 0x0000, 0x2060, 0x2009, 0x0048,
-+ 0x1078, 0x5d41, 0x1078, 0x199e, 0x0040, 0x1833, 0x7908, 0xd1ec,
-+ 0x00c0, 0x1876, 0x2009, 0x0009, 0x0078, 0x1878, 0x2009, 0x0019,
-+ 0x7902, 0x7803, 0x0009, 0x7003, 0x0003, 0x0078, 0x1910, 0x8001,
-+ 0x7002, 0xd194, 0x0040, 0x1891, 0x7804, 0xd0fc, 0x00c0, 0x178d,
-+ 0x8aff, 0x0040, 0x1910, 0x2009, 0x0001, 0x1078, 0x16f3, 0x0078,
-+ 0x1910, 0xa184, 0x0880, 0x00c0, 0x189e, 0x8aff, 0x0040, 0x1910,
-+ 0x2009, 0x0001, 0x1078, 0x16f3, 0x0078, 0x1910, 0x7803, 0x0004,
-+ 0x7003, 0x0000, 0xd1bc, 0x00c0, 0x18d2, 0x027e, 0x037e, 0x6b28,
-+ 0x6a2c, 0x1078, 0x1c53, 0x0d7e, 0x0f7e, 0x2d78, 0x2804, 0xac68,
-+ 0x6034, 0xd09c, 0x00c0, 0x18c2, 0x6808, 0x2008, 0xa31a, 0x680c,
-+ 0xa213, 0x7810, 0xa100, 0x7812, 0x690c, 0x7814, 0xa101, 0x7816,
-+ 0x0078, 0x18ce, 0x6810, 0x2008, 0xa31a, 0x6814, 0xa213, 0x7810,
-+ 0xa100, 0x7812, 0x6914, 0x7814, 0xa101, 0x7816, 0x0f7f, 0x0d7f,
-+ 0x0078, 0x17c7, 0x057e, 0x7d0c, 0x1078, 0x7692, 0x057f, 0x1078,
-+ 0x1914, 0x682b, 0xffff, 0x682f, 0xffff, 0x697c, 0x6912, 0x6980,
-+ 0x6916, 0x7803, 0x0009, 0x7003, 0x0003, 0x0078, 0x1910, 0x7803,
-+ 0x0004, 0x7003, 0x0000, 0x7004, 0xa00d, 0x0040, 0x18fa, 0x6808,
-+ 0x8001, 0x680a, 0x00c0, 0x18fa, 0x7004, 0x2060, 0x2009, 0x0048,
-+ 0x1078, 0x5d41, 0x1078, 0x16ad, 0x0078, 0x1910, 0x7803, 0x0004,
-+ 0x7003, 0x0000, 0x7004, 0x2060, 0x6010, 0xa005, 0x0040, 0x18fa,
-+ 0x2068, 0x6808, 0x8000, 0x680a, 0x6c28, 0x6b2c, 0x1078, 0x16c4,
-+ 0x017f, 0x007f, 0x127f, 0x007c, 0x1078, 0x1925, 0x20e1, 0x9028,
-+ 0x700f, 0x7970, 0x7013, 0x7970, 0x2001, 0x015d, 0x200c, 0x810a,
-+ 0x2102, 0x2001, 0x0138, 0x2202, 0x007c, 0x2001, 0x0138, 0x2014,
-+ 0x2003, 0x0000, 0x2021, 0xb015, 0x2001, 0x0141, 0x201c, 0xd3dc,
-+ 0x00c0, 0x1942, 0x2001, 0x0109, 0x201c, 0xa39c, 0x0048, 0x00c0,
-+ 0x1942, 0x2001, 0x0111, 0x201c, 0x83ff, 0x00c0, 0x1942, 0x8421,
-+ 0x00c0, 0x192c, 0x007c, 0x2011, 0x0201, 0x2009, 0x003c, 0x2204,
-+ 0xa005, 0x00c0, 0x194f, 0x8109, 0x00c0, 0x1947, 0x007c, 0x007c,
-+ 0x1078, 0x1943, 0x0040, 0x1978, 0x7908, 0xd1ec, 0x00c0, 0x1968,
-+ 0x1078, 0x199e, 0x0040, 0x1968, 0x7803, 0x0009, 0x7904, 0xd1fc,
-+ 0x0040, 0x195e, 0x7803, 0x0006, 0x1078, 0x1943, 0x0040, 0x1978,
-+ 0x780c, 0xd0a4, 0x00c0, 0x1978, 0x7007, 0x0000, 0x1078, 0x199e,
-+ 0x0040, 0x197a, 0x7803, 0x0019, 0x7003, 0x0003, 0x0078, 0x197a,
-+ 0x1078, 0x1914, 0x007c, 0x3c00, 0x007e, 0x0e7e, 0x2071, 0x0200,
-+ 0x7808, 0xa084, 0xf000, 0xa10d, 0x1078, 0x1925, 0x20e1, 0x7000,
-+ 0x7324, 0x7420, 0x7028, 0x7028, 0x7426, 0x7037, 0x0001, 0x810f,
-+ 0x712e, 0x702f, 0x0100, 0x7037, 0x0008, 0x7326, 0x7422, 0x2001,
-+ 0x0138, 0x2202, 0x0e7f, 0x007f, 0x20e0, 0x007c, 0x3c00, 0x007e,
-+ 0x7908, 0xa18c, 0x0fff, 0xa182, 0x0009, 0x0048, 0x19ab, 0xa085,
-+ 0x0001, 0x0078, 0x19bd, 0x2001, 0x020a, 0x81ff, 0x0040, 0x19b6,
-+ 0x20e1, 0x6000, 0x200c, 0x200c, 0x200c, 0x200c, 0x20e1, 0x7000,
-+ 0x200c, 0x200c, 0x7003, 0x0000, 0xa006, 0x007f, 0x20e0, 0x007c,
-+ 0x0e7e, 0x2071, 0x798b, 0x7003, 0x0000, 0x0e7f, 0x007c, 0x0d7e,
-+ 0xa280, 0x0004, 0x206c, 0x694c, 0xd1dc, 0x00c0, 0x1a42, 0x6934,
-+ 0xa184, 0x0007, 0x0079, 0x19d4, 0x19dc, 0x1a2d, 0x19dc, 0x19dc,
-+ 0x19dc, 0x1a12, 0x19ef, 0x19de, 0x1078, 0x12cd, 0x684c, 0xd0b4,
-+ 0x0040, 0x1b46, 0x6860, 0x682e, 0x6816, 0x685c, 0x682a, 0x6812,
-+ 0x687c, 0x680a, 0x6880, 0x680e, 0x6958, 0x0078, 0x1a35, 0x6834,
-+ 0xa084, 0x00ff, 0xa086, 0x001e, 0x00c0, 0x19dc, 0x684c, 0xd0b4,
-+ 0x0040, 0x1b46, 0x6860, 0x682e, 0x6816, 0x685c, 0x682a, 0x6812,
-+ 0x687c, 0x680a, 0x6880, 0x680e, 0x6804, 0x681a, 0xa080, 0x000d,
-+ 0x2004, 0xa084, 0x000f, 0xa080, 0x1c7e, 0x2004, 0x6832, 0x6958,
-+ 0x0078, 0x1a3e, 0xa18c, 0x00ff, 0xa186, 0x0015, 0x00c0, 0x1a42,
-+ 0x684c, 0xd0b4, 0x0040, 0x1b46, 0x6804, 0x681a, 0xa080, 0x000d,
-+ 0x2004, 0xa084, 0x000f, 0xa080, 0x1c7e, 0x2004, 0x6832, 0x6958,
-+ 0xa006, 0x682e, 0x682a, 0x0078, 0x1a3e, 0x684c, 0xd0b4, 0x0040,
-+ 0x1781, 0x6958, 0xa006, 0x682e, 0x682a, 0x2d00, 0x681a, 0x6834,
-+ 0xa084, 0x000f, 0xa080, 0x1c7e, 0x2004, 0x6832, 0x6926, 0x684c,
-+ 0xc0dd, 0x684e, 0x0d7f, 0x007c, 0x0f7e, 0x2079, 0x0020, 0x7804,
-+ 0xd0fc, 0x10c0, 0x1b4a, 0x0e7e, 0x0d7e, 0x2071, 0x798b, 0x7000,
-+ 0xa005, 0x00c0, 0x1ac0, 0x0c7e, 0x7206, 0xa280, 0x0004, 0x205c,
-+ 0x7004, 0x2068, 0x7803, 0x0004, 0x6818, 0x0d7e, 0x2068, 0x686c,
-+ 0x7812, 0x6890, 0x0f7e, 0x20e1, 0x9040, 0x2079, 0x0200, 0x781a,
-+ 0x2079, 0x0100, 0x8004, 0x78d6, 0x0f7f, 0x0d7f, 0x2b68, 0x6824,
-+ 0x2050, 0x6818, 0x2060, 0x6830, 0x2040, 0x6034, 0xa0cc, 0x000f,
-+ 0x6908, 0xa184, 0x0007, 0x0040, 0x1a82, 0x017e, 0x2009, 0x0008,
-+ 0xa102, 0x017f, 0xa108, 0x791a, 0x7116, 0x701e, 0x680c, 0xa081,
-+ 0x0000, 0x781e, 0x701a, 0xa006, 0x700e, 0x7012, 0x7004, 0x692c,
-+ 0x6814, 0xa106, 0x00c0, 0x1a99, 0x6928, 0x6810, 0xa106, 0x0040,
-+ 0x1aa6, 0x037e, 0x047e, 0x6b14, 0x6c10, 0x1078, 0x1c9e, 0x047f,
-+ 0x037f, 0x0040, 0x1aa6, 0x0c7f, 0x0078, 0x1ac0, 0x8aff, 0x00c0,
-+ 0x1aae, 0x0c7f, 0xa085, 0x0001, 0x0078, 0x1ac0, 0x127e, 0x2091,
-+ 0x8000, 0x2079, 0x0020, 0x2009, 0x0001, 0x1078, 0x1ac4, 0x0040,
-+ 0x1abd, 0x2009, 0x0001, 0x1078, 0x1ac4, 0x127f, 0x0c7f, 0xa006,
-+ 0x0d7f, 0x0e7f, 0x0f7f, 0x007c, 0x077e, 0x067e, 0x057e, 0x047e,
-+ 0x037e, 0x027e, 0x8aff, 0x0040, 0x1b3f, 0x700c, 0x7214, 0xa202,
-+ 0x7010, 0x7218, 0xa203, 0x0048, 0x1b3e, 0xa03e, 0x2730, 0x6850,
-+ 0xd0fc, 0x00c0, 0x1af1, 0x0d7e, 0x2804, 0xac68, 0x2900, 0x0079,
-+ 0x1ae1, 0x1b20, 0x1b01, 0x1b01, 0x1b20, 0x1b20, 0x1b18, 0x1b20,
-+ 0x1b01, 0x1b20, 0x1b07, 0x1b07, 0x1b20, 0x1b20, 0x1b20, 0x1b0f,
-+ 0x1b07, 0xc0fc, 0x6852, 0x6b6c, 0x6a70, 0x6d1c, 0x6c20, 0xd99c,
-+ 0x0040, 0x1b24, 0x0d7e, 0x2804, 0xac68, 0x6f08, 0x6e0c, 0x0078,
-+ 0x1b23, 0x6b08, 0x6a0c, 0x6d00, 0x6c04, 0x0078, 0x1b23, 0x6b10,
-+ 0x6a14, 0x6d00, 0x6c04, 0x6f08, 0x6e0c, 0x0078, 0x1b23, 0x0d7f,
-+ 0x0d7e, 0x6834, 0xa084, 0x00ff, 0xa086, 0x001e, 0x00c0, 0x1b20,
-+ 0x0d7f, 0x1078, 0x1c3a, 0x00c0, 0x1aca, 0xa00e, 0x0078, 0x1b3f,
-+ 0x0d7f, 0x1078, 0x12cd, 0x0d7f, 0x7b22, 0x7a26, 0x7d32, 0x7c36,
-+ 0x7f3a, 0x7e3e, 0x7902, 0x7000, 0x8000, 0x7002, 0x6828, 0xa300,
-+ 0x682a, 0x682c, 0xa201, 0x682e, 0x700c, 0xa300, 0x700e, 0x7010,
-+ 0xa201, 0x7012, 0x1078, 0x1c3a, 0x0078, 0x1b3f, 0xa006, 0x027f,
-+ 0x037f, 0x047f, 0x057f, 0x067f, 0x077f, 0x007c, 0x1078, 0x12cd,
-+ 0x1078, 0x12cd, 0x127e, 0x2091, 0x2200, 0x007e, 0x017e, 0x0f7e,
-+ 0x0e7e, 0x0d7e, 0x0c7e, 0x2079, 0x0020, 0x2071, 0x798b, 0x2b68,
-+ 0x6818, 0x2060, 0x7904, 0x7803, 0x0002, 0xa184, 0x0700, 0x00c0,
-+ 0x1b48, 0x7000, 0x0079, 0x1b64, 0x1c0b, 0x1b68, 0x1bd8, 0x1c09,
-+ 0x8001, 0x7002, 0xd19c, 0x00c0, 0x1b7c, 0x8aff, 0x0040, 0x1b9b,
-+ 0x2009, 0x0001, 0x1078, 0x1ac4, 0x0040, 0x1c0b, 0x2009, 0x0001,
-+ 0x1078, 0x1ac4, 0x0078, 0x1c0b, 0x7803, 0x0004, 0xd194, 0x0040,
-+ 0x1b8c, 0x6850, 0xc0fc, 0x6852, 0x8aff, 0x00c0, 0x1b91, 0x684c,
-+ 0xc0f5, 0x684e, 0x0078, 0x1b91, 0x1078, 0x1c53, 0x6850, 0xc0fd,
-+ 0x6852, 0x2a00, 0x6826, 0x2c00, 0x681a, 0x2800, 0x6832, 0x7003,
-+ 0x0000, 0x0078, 0x1c0b, 0x711c, 0x81ff, 0x0040, 0x1bb1, 0x7918,
-+ 0x7922, 0x7827, 0x0000, 0x7803, 0x0001, 0x7000, 0x8000, 0x7002,
-+ 0x700c, 0xa100, 0x700e, 0x7010, 0xa081, 0x0000, 0x7012, 0x0078,
-+ 0x1c0b, 0x0f7e, 0x027e, 0x781c, 0x007e, 0x7818, 0x007e, 0x2079,
-+ 0x0100, 0x7a14, 0xa284, 0x0004, 0xa085, 0x0012, 0x7816, 0x7820,
-+ 0xd0bc, 0x00c0, 0x1bbf, 0x79c8, 0x007f, 0xa102, 0x78ca, 0x79c4,
-+ 0x007f, 0xa102, 0x78c6, 0xa284, 0x0004, 0xa085, 0x0012, 0x7816,
-+ 0x027f, 0x0f7f, 0x7803, 0x0008, 0x7003, 0x0000, 0x0078, 0x1c0b,
-+ 0x8001, 0x7002, 0xd194, 0x0040, 0x1bed, 0x7804, 0xd0fc, 0x00c0,
-+ 0x1b5a, 0xd19c, 0x00c0, 0x1c07, 0x8aff, 0x0040, 0x1c0b, 0x2009,
-+ 0x0001, 0x1078, 0x1ac4, 0x0078, 0x1c0b, 0x027e, 0x037e, 0x6b28,
-+ 0x6a2c, 0x1078, 0x1c53, 0x0d7e, 0x2804, 0xac68, 0x6034, 0xd09c,
-+ 0x00c0, 0x1c00, 0x6808, 0xa31a, 0x680c, 0xa213, 0x0078, 0x1c04,
-+ 0x6810, 0xa31a, 0x6814, 0xa213, 0x0d7f, 0x0078, 0x1b8c, 0x0078,
-+ 0x1b8c, 0x1078, 0x12cd, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x017f,
-+ 0x007f, 0x127f, 0x007c, 0x0f7e, 0x0e7e, 0x2071, 0x798b, 0x7000,
-+ 0xa086, 0x0000, 0x0040, 0x1c37, 0x2079, 0x0020, 0x20e1, 0x9040,
-+ 0x7804, 0xd0fc, 0x0040, 0x1c1e, 0x1078, 0x1b4a, 0x7000, 0xa086,
-+ 0x0000, 0x00c0, 0x1c1e, 0x7803, 0x0004, 0x7804, 0xd0ac, 0x00c0,
-+ 0x1c2d, 0x20e1, 0x9040, 0x7803, 0x0002, 0x7003, 0x0000, 0x0e7f,
-+ 0x0f7f, 0x007c, 0x8840, 0x2804, 0xa005, 0x00c0, 0x1c4e, 0x6004,
-+ 0xa005, 0x0040, 0x1c50, 0x681a, 0x2060, 0x6034, 0xa084, 0x000f,
-+ 0xa080, 0x1c7e, 0x2044, 0x88ff, 0x1040, 0x12cd, 0x8a51, 0x007c,
-+ 0x2051, 0x0000, 0x007c, 0x8a50, 0x8841, 0x2804, 0xa005, 0x00c0,
-+ 0x1c6d, 0x2c00, 0xad06, 0x0040, 0x1c62, 0x6000, 0xa005, 0x00c0,
-+ 0x1c62, 0x2d00, 0x2060, 0x681a, 0x6034, 0xa084, 0x000f, 0xa080,
-+ 0x1c8e, 0x2044, 0x88ff, 0x1040, 0x12cd, 0x007c, 0x0000, 0x0011,
-+ 0x0015, 0x0019, 0x001d, 0x0021, 0x0025, 0x0029, 0x0000, 0x000f,
-+ 0x0015, 0x001b, 0x0021, 0x0027, 0x0000, 0x0000, 0x0000, 0x1c73,
-+ 0x1c6f, 0x0000, 0x0000, 0x1c7d, 0x0000, 0x1c73, 0x0000, 0x1c7a,
-+ 0x1c77, 0x0000, 0x0000, 0x0000, 0x1c7d, 0x1c7a, 0x0000, 0x1c75,
-+ 0x1c75, 0x0000, 0x0000, 0x1c7d, 0x0000, 0x1c75, 0x0000, 0x1c7b,
-+ 0x1c7b, 0x0000, 0x0000, 0x0000, 0x1c7d, 0x1c7b, 0x0a7e, 0x097e,
-+ 0x087e, 0x6858, 0xa055, 0x0040, 0x1d3f, 0x2d60, 0x6034, 0xa0cc,
-+ 0x000f, 0xa9c0, 0x1c7e, 0xa986, 0x0007, 0x0040, 0x1cb7, 0xa986,
-+ 0x000e, 0x0040, 0x1cb7, 0xa986, 0x000f, 0x00c0, 0x1cbb, 0x605c,
-+ 0xa422, 0x6060, 0xa31a, 0x2804, 0xa045, 0x00c0, 0x1cc9, 0x0050,
-+ 0x1cc3, 0x0078, 0x1d3f, 0x6004, 0xa065, 0x0040, 0x1d3f, 0x0078,
-+ 0x1ca6, 0x2804, 0xa005, 0x0040, 0x1ce7, 0xac68, 0xd99c, 0x00c0,
-+ 0x1cd7, 0x6808, 0xa422, 0x680c, 0xa31b, 0x0078, 0x1cdb, 0x6810,
-+ 0xa422, 0x6814, 0xa31b, 0x0048, 0x1d06, 0x2300, 0xa405, 0x0040,
-+ 0x1ced, 0x8a51, 0x0040, 0x1d3f, 0x8840, 0x0078, 0x1cc9, 0x6004,
-+ 0xa065, 0x0040, 0x1d3f, 0x0078, 0x1ca6, 0x8a51, 0x0040, 0x1d3f,
-+ 0x8840, 0x2804, 0xa005, 0x00c0, 0x1d00, 0x6004, 0xa065, 0x0040,
-+ 0x1d3f, 0x6034, 0xa0cc, 0x000f, 0xa9c0, 0x1c7e, 0x2804, 0x2040,
-+ 0x2b68, 0x6850, 0xc0fc, 0x6852, 0x0078, 0x1d33, 0x8422, 0x8420,
-+ 0x831a, 0xa399, 0x0000, 0x0d7e, 0x2b68, 0x6c6e, 0x6b72, 0x0d7f,
-+ 0xd99c, 0x00c0, 0x1d21, 0x6908, 0x2400, 0xa122, 0x690c, 0x2300,
-+ 0xa11b, 0x1048, 0x12cd, 0x6800, 0xa420, 0x6804, 0xa319, 0x0078,
-+ 0x1d2d, 0x6910, 0x2400, 0xa122, 0x6914, 0x2300, 0xa11b, 0x1048,
-+ 0x12cd, 0x6800, 0xa420, 0x6804, 0xa319, 0x2b68, 0x6c1e, 0x6b22,
-+ 0x6850, 0xc0fd, 0x6852, 0x2c00, 0x681a, 0x2800, 0x6832, 0x2a00,
-+ 0x6826, 0x007f, 0x007f, 0x007f, 0xa006, 0x0078, 0x1d44, 0x087f,
-+ 0x097f, 0x0a7f, 0xa085, 0x0001, 0x007c, 0x2001, 0x0005, 0x2004,
-+ 0xa084, 0x0007, 0x0079, 0x1d4c, 0x1d54, 0x1d55, 0x1d58, 0x1d5b,
-+ 0x1d60, 0x1d63, 0x1d68, 0x1d6d, 0x007c, 0x1078, 0x1b4a, 0x007c,
-+ 0x1078, 0x1785, 0x007c, 0x1078, 0x1785, 0x1078, 0x1b4a, 0x007c,
-+ 0x1078, 0x1456, 0x007c, 0x1078, 0x1b4a, 0x1078, 0x1456, 0x007c,
-+ 0x1078, 0x1785, 0x1078, 0x1456, 0x007c, 0x1078, 0x1785, 0x1078,
-+ 0x1b4a, 0x1078, 0x1456, 0x007c, 0x127e, 0x2091, 0x2300, 0x2079,
-+ 0x0200, 0x2071, 0x7c80, 0x2069, 0x7700, 0x2009, 0x0004, 0x7912,
-+ 0x7817, 0x0004, 0x1078, 0x2052, 0x781b, 0x0002, 0x20e1, 0x8700,
-+ 0x127f, 0x007c, 0x127e, 0x2091, 0x2300, 0x781c, 0xa084, 0x0007,
-+ 0x0079, 0x1d92, 0x1db6, 0x1d9a, 0x1d9e, 0x1da2, 0x1da8, 0x1dac,
-+ 0x1db0, 0x1db4, 0x1078, 0x4298, 0x0078, 0x1db6, 0x1078, 0x42c7,
-+ 0x0078, 0x1db6, 0x1078, 0x4298, 0x1078, 0x42c7, 0x0078, 0x1db6,
-+ 0x1078, 0x1db8, 0x0078, 0x1db6, 0x1078, 0x1db8, 0x0078, 0x1db6,
-+ 0x1078, 0x1db8, 0x0078, 0x1db6, 0x1078, 0x1db8, 0x127f, 0x007c,
-+ 0x007e, 0x017e, 0x027e, 0x7930, 0xa184, 0x0003, 0x0040, 0x1dc2,
-+ 0x1078, 0x12cd, 0xa184, 0x0030, 0x0040, 0x1dd3, 0x6a00, 0xa286,
-+ 0x0003, 0x00c0, 0x1dcd, 0x1078, 0x12cd, 0x1078, 0x3591, 0x20e1,
-+ 0x9010, 0x0078, 0x1ddf, 0xa184, 0x00c0, 0x0040, 0x1dd9, 0x1078,
-+ 0x12cd, 0xa184, 0x0300, 0x0040, 0x1ddf, 0x20e1, 0x9020, 0x7932,
-+ 0x027f, 0x017f, 0x007f, 0x007c, 0x017e, 0x0e7e, 0x0f7e, 0x2071,
-+ 0x7700, 0x7128, 0x2001, 0x7923, 0x2102, 0x2001, 0x792b, 0x2102,
-+ 0xa182, 0x0211, 0x00c8, 0x1df8, 0x2009, 0x0008, 0x0078, 0x1e22,
-+ 0xa182, 0x0259, 0x00c8, 0x1e00, 0x2009, 0x0007, 0x0078, 0x1e22,
-+ 0xa182, 0x02c1, 0x00c8, 0x1e08, 0x2009, 0x0006, 0x0078, 0x1e22,
-+ 0xa182, 0x0349, 0x00c8, 0x1e10, 0x2009, 0x0005, 0x0078, 0x1e22,
-+ 0xa182, 0x0421, 0x00c8, 0x1e18, 0x2009, 0x0004, 0x0078, 0x1e22,
-+ 0xa182, 0x0581, 0x00c8, 0x1e20, 0x2009, 0x0003, 0x0078, 0x1e22,
-+ 0x2009, 0x0002, 0x2079, 0x0200, 0x7912, 0xa182, 0x0005, 0x00c8,
-+ 0x1e2c, 0x7916, 0x0078, 0x1e2e, 0x7817, 0x0004, 0x1078, 0x2052,
-+ 0x0f7f, 0x0e7f, 0x017f, 0x007c, 0x127e, 0x2091, 0x2200, 0x2061,
-+ 0x0100, 0x2071, 0x7700, 0x6024, 0x6026, 0x6033, 0x00ef, 0x60e7,
-+ 0x0000, 0x60eb, 0x00ef, 0x60e3, 0x0008, 0x604b, 0xf7f7, 0x6043,
-+ 0x0000, 0x602f, 0x0080, 0x602f, 0x0000, 0x6007, 0x0caf, 0x600f,
-+ 0x00ff, 0x602b, 0x002f, 0x127f, 0x007c, 0x2001, 0x772d, 0x2003,
-+ 0x0000, 0x2001, 0x772c, 0x2003, 0x0001, 0x007c, 0x127e, 0x2091,
-+ 0x2200, 0x007e, 0x017e, 0x027e, 0x6124, 0xa184, 0x002c, 0x00c0,
-+ 0x1e6d, 0xa184, 0x0007, 0x0079, 0x1e73, 0xa195, 0x0004, 0xa284,
-+ 0x0007, 0x0079, 0x1e73, 0x1e9f, 0x1e7b, 0x1e7f, 0x1e83, 0x1e89,
-+ 0x1e8d, 0x1e93, 0x1e99, 0x1078, 0x4802, 0x0078, 0x1e9f, 0x1078,
-+ 0x48f1, 0x0078, 0x1e9f, 0x1078, 0x48f1, 0x1078, 0x4802, 0x0078,
-+ 0x1e9f, 0x1078, 0x1ea4, 0x0078, 0x1e9f, 0x1078, 0x4802, 0x1078,
-+ 0x1ea4, 0x0078, 0x1e9f, 0x1078, 0x48f1, 0x1078, 0x1ea4, 0x0078,
-+ 0x1e9f, 0x1078, 0x48f1, 0x1078, 0x4802, 0x1078, 0x1ea4, 0x027f,
-+ 0x017f, 0x007f, 0x127f, 0x007c, 0xd1ac, 0x0040, 0x1f58, 0x017e,
-+ 0x047e, 0x0c7e, 0x644c, 0x74ba, 0xa48c, 0xff00, 0xa196, 0xff00,
-+ 0x0040, 0x1ed3, 0x6030, 0xa084, 0x00ff, 0x810f, 0xa116, 0x0040,
-+ 0x1ed3, 0x7130, 0xd18c, 0x00c0, 0x1ed3, 0x2011, 0x7752, 0x2214,
-+ 0xd2ec, 0x0040, 0x1ec7, 0xc18d, 0x7132, 0x0078, 0x1ed3, 0x6240,
-+ 0xa294, 0x0010, 0x0040, 0x1f15, 0x6248, 0xa294, 0xff00, 0xa296,
-+ 0xff00, 0x00c0, 0x1f15, 0x037e, 0x73b8, 0x2011, 0x8013, 0x1078,
-+ 0x2d59, 0x037f, 0x7130, 0xc185, 0x7132, 0x2011, 0x7752, 0x220c,
-+ 0xd1a4, 0x0040, 0x1efd, 0x017e, 0x2009, 0x0001, 0x2011, 0x0100,
-+ 0x1078, 0x47d0, 0x2019, 0x000e, 0x1078, 0x75d9, 0xa484, 0x00ff,
-+ 0xa080, 0x2329, 0x200c, 0xa18c, 0xff00, 0x810f, 0x8127, 0xa006,
-+ 0x2009, 0x000e, 0x1078, 0x7641, 0x017f, 0xd1ac, 0x00c0, 0x1f06,
-+ 0x2019, 0x0004, 0x1078, 0x2293, 0x0078, 0x1f15, 0x157e, 0x20a9,
-+ 0x007f, 0x2009, 0x0000, 0x1078, 0x384c, 0x00c0, 0x1f11, 0x1078,
-+ 0x3637, 0x8108, 0x00f0, 0x1f0b, 0x157f, 0x0c7f, 0x047f, 0x6043,
-+ 0x0000, 0x2009, 0x00f7, 0x1078, 0x35fa, 0x0f7e, 0x2079, 0x7949,
-+ 0x783c, 0xa086, 0x0000, 0x0040, 0x1f2d, 0x6027, 0x0004, 0x783f,
-+ 0x0000, 0x2079, 0x0140, 0x7803, 0x0000, 0x0f7f, 0x2011, 0x0003,
-+ 0x1078, 0x58d8, 0x2011, 0x0002, 0x1078, 0x58e2, 0x1078, 0x57ee,
-+ 0x1078, 0x4706, 0x037e, 0x2019, 0x0000, 0x1078, 0x5880, 0x037f,
-+ 0x60e3, 0x0000, 0x017f, 0x2001, 0x7700, 0x2014, 0xa296, 0x0004,
-+ 0x00c0, 0x1f50, 0xd19c, 0x00c0, 0x1f50, 0x6228, 0xc29d, 0x622a,
-+ 0x2003, 0x0001, 0x2001, 0x7720, 0x2003, 0x0000, 0x6027, 0x0020,
-+ 0xd194, 0x0040, 0x1ff9, 0x0f7e, 0x2079, 0x7949, 0x783c, 0xa086,
-+ 0x0001, 0x00c0, 0x1f7c, 0x017e, 0x6027, 0x0004, 0x783f, 0x0000,
-+ 0x2079, 0x0140, 0x7803, 0x1000, 0x7803, 0x0000, 0x2079, 0x7936,
-+ 0x7807, 0x0000, 0x7833, 0x0000, 0x1078, 0x4d96, 0x1078, 0x4e56,
-+ 0x017f, 0x0f7f, 0x0078, 0x1ff9, 0x0f7f, 0x017e, 0x6220, 0xd2b4,
-+ 0x0040, 0x1fb1, 0x1078, 0x4706, 0x1078, 0x569c, 0x6027, 0x0004,
-+ 0x0d7e, 0x2069, 0x0140, 0x6804, 0xa084, 0x4000, 0x0040, 0x1f94,
-+ 0x6803, 0x1000, 0x6803, 0x0000, 0x0d7f, 0x0c7e, 0x2061, 0x7936,
-+ 0x6028, 0xa09a, 0x0002, 0x00c8, 0x1fa4, 0x8000, 0x602a, 0x0c7f,
-+ 0x1078, 0x568e, 0x0078, 0x1ff8, 0x2019, 0x793f, 0x2304, 0xa065,
-+ 0x0040, 0x1fae, 0x2009, 0x0027, 0x1078, 0x5d41, 0x0c7f, 0x0078,
-+ 0x1ff8, 0xd2bc, 0x0040, 0x1ff8, 0x1078, 0x4714, 0x6017, 0x0010,
-+ 0x6027, 0x0004, 0x0d7e, 0x2069, 0x0140, 0x6804, 0xa084, 0x4000,
-+ 0x0040, 0x1fc6, 0x6803, 0x1000, 0x6803, 0x0000, 0x0d7f, 0x0c7e,
-+ 0x2061, 0x7936, 0x6044, 0xa09a, 0x0002, 0x00c8, 0x1fe7, 0x8000,
-+ 0x6046, 0x603c, 0x0c7f, 0xa005, 0x0040, 0x1ff8, 0x1078, 0x470b,
-+ 0xa080, 0x0007, 0x2004, 0xa086, 0x0006, 0x00c0, 0x1fe3, 0x6017,
-+ 0x0012, 0x0078, 0x1ff8, 0x6017, 0x0016, 0x0078, 0x1ff8, 0x037e,
-+ 0x2019, 0x0001, 0x1078, 0x5880, 0x037f, 0x2019, 0x7945, 0x2304,
-+ 0xa065, 0x0040, 0x1ff7, 0x2009, 0x004f, 0x1078, 0x5d41, 0x0c7f,
-+ 0x017f, 0xd19c, 0x0040, 0x2021, 0x017e, 0x6028, 0xc09c, 0x602a,
-+ 0x2011, 0x0003, 0x1078, 0x58d8, 0x2011, 0x0002, 0x1078, 0x58e2,
-+ 0x1078, 0x57ee, 0x1078, 0x4706, 0x037e, 0x2019, 0x0000, 0x1078,
-+ 0x5880, 0x037f, 0x60e3, 0x0000, 0x1078, 0x76b0, 0x1078, 0x76ce,
-+ 0x2001, 0x7700, 0x2003, 0x0004, 0x6027, 0x0008, 0x1078, 0x11be,
-+ 0x017f, 0xa18c, 0xffd0, 0x6126, 0x007c, 0x007e, 0x017e, 0x027e,
-+ 0x0e7e, 0x0f7e, 0x127e, 0x2091, 0x8000, 0x2071, 0x7700, 0x71b0,
-+ 0x70b2, 0xa116, 0x0040, 0x204b, 0x81ff, 0x0040, 0x203d, 0x2011,
-+ 0x8011, 0x1078, 0x2d59, 0x0078, 0x204b, 0x2011, 0x8012, 0x1078,
-+ 0x2d59, 0x037e, 0x0c7e, 0x2061, 0x0100, 0x2019, 0x0028, 0x1078,
-+ 0x2293, 0x0c7f, 0x037f, 0x127f, 0x0f7f, 0x0e7f, 0x027f, 0x017f,
-+ 0x007f, 0x007c, 0x0c7e, 0x0f7e, 0x007e, 0x027e, 0x2061, 0x0100,
-+ 0xa190, 0x206d, 0x2204, 0x60f2, 0xa192, 0x0005, 0x00c8, 0x2064,
-+ 0xa190, 0x2076, 0x0078, 0x2066, 0x2011, 0x207a, 0x2204, 0x60ee,
-+ 0x027f, 0x007f, 0x0f7f, 0x0c7f, 0x007c, 0x0840, 0x0840, 0x0840,
-+ 0x0580, 0x0420, 0x0348, 0x02c0, 0x0258, 0x0210, 0x01a8, 0x01a8,
-+ 0x01a8, 0x01a8, 0x0140, 0x00f8, 0x00d0, 0x00b0, 0x00a0, 0x2028,
-+ 0x2130, 0xa094, 0xff00, 0x00c0, 0x2088, 0x81ff, 0x0040, 0x208c,
-+ 0x1078, 0x444b, 0x0078, 0x2093, 0xa080, 0x2329, 0x200c, 0xa18c,
-+ 0xff00, 0x810f, 0xa006, 0x007c, 0xa080, 0x2329, 0x200c, 0xa18c,
-+ 0x00ff, 0x007c, 0x20ba, 0x20be, 0x20c2, 0x20c8, 0x20ce, 0x20d4,
-+ 0x20da, 0x20e2, 0x20ea, 0x20f0, 0x20f6, 0x20fe, 0x2106, 0x210e,
-+ 0x2116, 0x2120, 0x212a, 0x212a, 0x212a, 0x212a, 0x212a, 0x212a,
-+ 0x212a, 0x212a, 0x212a, 0x212a, 0x212a, 0x212a, 0x212a, 0x212a,
-+ 0x212a, 0x212a, 0x107e, 0x007e, 0x0078, 0x2143, 0x107e, 0x007e,
-+ 0x0078, 0x2143, 0x107e, 0x007e, 0x1078, 0x1e5e, 0x0078, 0x2143,
-+ 0x107e, 0x007e, 0x1078, 0x1e5e, 0x0078, 0x2143, 0x107e, 0x007e,
-+ 0x1078, 0x1d45, 0x0078, 0x2143, 0x107e, 0x007e, 0x1078, 0x1d45,
-+ 0x0078, 0x2143, 0x107e, 0x007e, 0x1078, 0x1e5e, 0x1078, 0x1d45,
-+ 0x0078, 0x2143, 0x107e, 0x007e, 0x1078, 0x1e5e, 0x1078, 0x1d45,
-+ 0x0078, 0x2143, 0x107e, 0x007e, 0x1078, 0x1d8a, 0x0078, 0x2143,
-+ 0x107e, 0x007e, 0x1078, 0x1d8a, 0x0078, 0x2143, 0x107e, 0x007e,
-+ 0x1078, 0x1e5e, 0x1078, 0x1d8a, 0x0078, 0x2143, 0x107e, 0x007e,
-+ 0x1078, 0x1e5e, 0x1078, 0x1d8a, 0x0078, 0x2143, 0x107e, 0x007e,
-+ 0x1078, 0x1d45, 0x1078, 0x1d8a, 0x0078, 0x2143, 0x107e, 0x007e,
-+ 0x1078, 0x1d45, 0x1078, 0x1d8a, 0x0078, 0x2143, 0x107e, 0x007e,
-+ 0x1078, 0x1e5e, 0x1078, 0x1d45, 0x1078, 0x1d8a, 0x0078, 0x2143,
-+ 0x107e, 0x007e, 0x1078, 0x1e5e, 0x1078, 0x1d45, 0x1078, 0x1d8a,
-+ 0x0078, 0x2143, 0x0005, 0x0078, 0x212a, 0xb084, 0x003c, 0x8004,
-+ 0x8004, 0x0079, 0x2133, 0x2143, 0x20c0, 0x20c4, 0x20ca, 0x20d0,
-+ 0x20d6, 0x20dc, 0x20e4, 0x20ec, 0x20f2, 0x20f8, 0x2100, 0x2108,
-+ 0x2110, 0x2118, 0x2122, 0x0008, 0x212d, 0x007f, 0x107f, 0x2091,
-+ 0x8001, 0x007c, 0x0c7e, 0x027e, 0x2041, 0x007e, 0x70bc, 0xd09c,
-+ 0x0040, 0x2154, 0x2041, 0x007f, 0x2001, 0x010c, 0x203c, 0x727c,
-+ 0x82ff, 0x0040, 0x219f, 0x037e, 0x738c, 0xa38e, 0xffff, 0x00c0,
-+ 0x2163, 0x2019, 0x0001, 0x8314, 0xa2e0, 0x7dc0, 0x2c04, 0xa38c,
-+ 0x0001, 0x0040, 0x2170, 0xa084, 0xff00, 0x8007, 0x0078, 0x2172,
-+ 0xa084, 0x00ff, 0xa70e, 0x0040, 0x2194, 0xa08e, 0x00ff, 0x0040,
-+ 0x219a, 0x2009, 0x0000, 0x1078, 0x207f, 0x1078, 0x3811, 0x00c0,
-+ 0x2197, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x218e,
-+ 0x1078, 0x21f1, 0x0040, 0x2197, 0x0078, 0x2194, 0x1078, 0x22f5,
-+ 0x1078, 0x2218, 0x0040, 0x2197, 0x8318, 0x0078, 0x2163, 0x738e,
-+ 0x0078, 0x219c, 0x708f, 0xffff, 0x037f, 0x0078, 0x21ee, 0xa780,
-+ 0x2329, 0x203c, 0xa7bc, 0xff00, 0x873f, 0x708c, 0xa096, 0xffff,
-+ 0x0040, 0x21b1, 0xa812, 0x00c8, 0x21c1, 0x708f, 0xffff, 0x0078,
-+ 0x21eb, 0x2009, 0x0000, 0x70bc, 0xd09c, 0x0040, 0x21bc, 0xd094,
-+ 0x0040, 0x21bc, 0x2009, 0x007e, 0x2100, 0xa802, 0x20a8, 0x0078,
-+ 0x21c5, 0x2008, 0x2810, 0xa202, 0x20a8, 0x2700, 0x157e, 0x017e,
-+ 0xa106, 0x0040, 0x21e2, 0x1078, 0x3811, 0x00c0, 0x21eb, 0x6004,
-+ 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x21dc, 0x1078, 0x21f1,
-+ 0x0040, 0x21eb, 0x0078, 0x21e2, 0x1078, 0x22f5, 0x1078, 0x2218,
-+ 0x0040, 0x21eb, 0x017f, 0x8108, 0x157f, 0x00f0, 0x21c5, 0x708f,
-+ 0xffff, 0x0078, 0x21ee, 0x017f, 0x157f, 0x718e, 0x027f, 0x0c7f,
-+ 0x007c, 0x017e, 0x077e, 0x0d7e, 0x0c7e, 0x2c68, 0x1078, 0x5cb4,
-+ 0x0040, 0x2213, 0x2d00, 0x601a, 0x601f, 0x0001, 0x2001, 0x0000,
-+ 0x1078, 0x37e0, 0x2001, 0x0000, 0x1078, 0x37f4, 0x127e, 0x2091,
-+ 0x8000, 0x7088, 0x8000, 0x708a, 0x127f, 0x2009, 0x0004, 0x1078,
-+ 0x5d41, 0xa085, 0x0001, 0x0c7f, 0x0d7f, 0x077f, 0x017f, 0x007c,
-+ 0x017e, 0x077e, 0x0d7e, 0x0c7e, 0x2c68, 0x1078, 0x5cb4, 0x0040,
-+ 0x223a, 0x2d00, 0x601a, 0x601f, 0x0001, 0x2001, 0x0000, 0x1078,
-+ 0x37e0, 0x2001, 0x0002, 0x1078, 0x37f4, 0x127e, 0x2091, 0x8000,
-+ 0x7088, 0x8000, 0x708a, 0x127f, 0x2009, 0x0002, 0x1078, 0x5d41,
-+ 0xa085, 0x0001, 0x0c7f, 0x0d7f, 0x077f, 0x017f, 0x007c, 0x0c7e,
-+ 0x027e, 0x2009, 0x0080, 0x1078, 0x3811, 0x00c0, 0x224d, 0x1078,
-+ 0x2250, 0x0040, 0x224d, 0x70c3, 0xffff, 0x027f, 0x0c7f, 0x007c,
-+ 0x017e, 0x077e, 0x0d7e, 0x0c7e, 0x2c68, 0x1078, 0x5cb4, 0x0040,
-+ 0x2272, 0x2d00, 0x601a, 0x601f, 0x0001, 0x2001, 0x0000, 0x1078,
-+ 0x37e0, 0x2001, 0x0002, 0x1078, 0x37f4, 0x127e, 0x2091, 0x8000,
-+ 0x70c4, 0x8000, 0x70c6, 0x127f, 0x2009, 0x0002, 0x1078, 0x5d41,
-+ 0xa085, 0x0001, 0x0c7f, 0x0d7f, 0x077f, 0x017f, 0x007c, 0x0c7e,
-+ 0x0d7e, 0x2009, 0x007f, 0x1078, 0x3811, 0x00c0, 0x2290, 0x2c68,
-+ 0x1078, 0x5cb4, 0x0040, 0x2290, 0x2d00, 0x601a, 0x6312, 0x601f,
-+ 0x0001, 0x620a, 0x2009, 0x0022, 0x1078, 0x5d41, 0xa085, 0x0001,
-+ 0x0d7f, 0x0c7f, 0x007c, 0x0e7e, 0x0c7e, 0x067e, 0x037e, 0x027e,
-+ 0x1078, 0x4a85, 0x1078, 0x4a35, 0x1078, 0x6219, 0x20a9, 0x007f,
-+ 0x2009, 0x0000, 0x017e, 0x1078, 0x384c, 0x00c0, 0x22ab, 0x1078,
-+ 0x3a36, 0x1078, 0x3637, 0x017f, 0x8108, 0x00f0, 0x22a2, 0x027f,
-+ 0x037f, 0x067f, 0x0c7f, 0x0e7f, 0x007c, 0x0e7e, 0x0c7e, 0x037e,
-+ 0x027e, 0x017e, 0x6218, 0x2270, 0x72a0, 0x027e, 0x2019, 0x0029,
-+ 0x1078, 0x4a7e, 0x1078, 0x49c1, 0x2c08, 0x1078, 0x747b, 0x017f,
-+ 0x2e60, 0x1078, 0x3a36, 0x6210, 0x6314, 0x1078, 0x3637, 0x6212,
-+ 0x6316, 0x017f, 0x027f, 0x037f, 0x0c7f, 0x0e7f, 0x007c, 0x0e7e,
-+ 0x007e, 0x6018, 0xa080, 0x0028, 0x2004, 0xd0bc, 0x00c0, 0x22eb,
-+ 0x2071, 0x7700, 0x7088, 0xa005, 0x0040, 0x22e8, 0x8001, 0x708a,
-+ 0x007f, 0x0e7f, 0x007c, 0x2071, 0x7700, 0x70c4, 0xa005, 0x0040,
-+ 0x22e8, 0x8001, 0x70c6, 0x0078, 0x22e8, 0x6000, 0xc08c, 0x6002,
-+ 0x007c, 0x0e7e, 0x0c7e, 0x037e, 0x027e, 0x017e, 0x157e, 0x81ff,
-+ 0x00c0, 0x2306, 0x20a9, 0x0001, 0x0078, 0x230a, 0x20a9, 0x007f,
-+ 0x2011, 0x0000, 0x027e, 0xa2e0, 0x7820, 0x2c64, 0x8cff, 0x0040,
-+ 0x231c, 0x2019, 0x0029, 0x1078, 0x4a7e, 0x1078, 0x49c1, 0x2c08,
-+ 0x1078, 0x747b, 0x1078, 0x3a36, 0x027f, 0x8210, 0x00f0, 0x230a,
-+ 0x027e, 0x027f, 0x157f, 0x017f, 0x027f, 0x037f, 0x0c7f, 0x0e7f,
-+ 0x007c, 0x7eef, 0x7de8, 0x7ce4, 0x80e2, 0x7be1, 0x80e0, 0x80dc,
-+ 0x80da, 0x7ad9, 0x80d6, 0x80d5, 0x80d4, 0x80d3, 0x80d2, 0x80d1,
-+ 0x79ce, 0x78cd, 0x80cc, 0x80cb, 0x80ca, 0x80c9, 0x80c7, 0x80c6,
-+ 0x77c5, 0x76c3, 0x80bc, 0x80ba, 0x75b9, 0x80b6, 0x74b5, 0x73b4,
-+ 0x72b3, 0x80b2, 0x80b1, 0x80ae, 0x71ad, 0x80ac, 0x70ab, 0x6faa,
-+ 0x6ea9, 0x80a7, 0x6da6, 0x6ca5, 0x6ba3, 0x6a9f, 0x699e, 0x689d,
-+ 0x809b, 0x8098, 0x6797, 0x6690, 0x658f, 0x6488, 0x6384, 0x6282,
-+ 0x8081, 0x8080, 0x617c, 0x607a, 0x8079, 0x5f76, 0x8075, 0x8074,
-+ 0x8073, 0x8072, 0x8071, 0x806e, 0x5e6d, 0x806c, 0x5d6b, 0x5c6a,
-+ 0x5b69, 0x8067, 0x5a66, 0x5965, 0x5863, 0x575c, 0x565a, 0x5559,
-+ 0x8056, 0x8055, 0x5454, 0x5353, 0x5252, 0x5151, 0x504e, 0x4f4d,
-+ 0x804c, 0x804b, 0x4e4a, 0x4d49, 0x8047, 0x4c46, 0x8045, 0x8043,
-+ 0x803c, 0x803a, 0x8039, 0x8036, 0x4b35, 0x8034, 0x4a33, 0x4932,
-+ 0x4831, 0x802e, 0x472d, 0x462c, 0x452b, 0x442a, 0x4329, 0x4227,
-+ 0x8026, 0x8025, 0x4123, 0x401f, 0x3f1e, 0x3e1d, 0x3d1b, 0x3c18,
-+ 0x8017, 0x8010, 0x3b0f, 0x3a08, 0x8004, 0x3902, 0x8001, 0x8000,
-+ 0x8000, 0x3800, 0x3700, 0x3600, 0x8000, 0x3500, 0x8000, 0x8000,
-+ 0x8000, 0x3400, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
-+ 0x3300, 0x3200, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
-+ 0x3100, 0x3000, 0x8000, 0x8000, 0x2f00, 0x8000, 0x2e00, 0x2d00,
-+ 0x2c00, 0x8000, 0x8000, 0x8000, 0x2b00, 0x8000, 0x2a00, 0x2900,
-+ 0x2800, 0x8000, 0x2700, 0x2600, 0x2500, 0x2400, 0x2300, 0x2200,
-+ 0x8000, 0x8000, 0x2100, 0x2000, 0x1f00, 0x1e00, 0x1d00, 0x1c00,
-+ 0x8000, 0x8000, 0x1b00, 0x1a00, 0x8000, 0x1900, 0x8000, 0x8000,
-+ 0x8000, 0x8000, 0x8000, 0x8000, 0x1800, 0x8000, 0x1700, 0x1600,
-+ 0x1500, 0x8000, 0x1400, 0x1300, 0x1200, 0x1100, 0x1000, 0x0f00,
-+ 0x8000, 0x8000, 0x0e00, 0x0d00, 0x0c00, 0x0b00, 0x0a00, 0x0900,
-+ 0x8000, 0x8000, 0x0800, 0x0700, 0x8000, 0x0600, 0x8000, 0x8000,
-+ 0x8000, 0x0500, 0x0400, 0x0300, 0x8000, 0x0200, 0x8000, 0x8000,
-+ 0x8000, 0x0100, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
-+ 0x0000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
-+ 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
-+ 0x8000, 0x2071, 0x776d, 0x7003, 0x0002, 0xa006, 0x7012, 0x7016,
-+ 0x703a, 0x703e, 0x7033, 0x777d, 0x7037, 0x777d, 0x7007, 0x0001,
-+ 0x2061, 0x77bd, 0x6003, 0x0002, 0x007c, 0x0090, 0x2450, 0x0068,
-+ 0x2450, 0x2071, 0x776d, 0x2b78, 0x7818, 0xd084, 0x00c0, 0x2450,
-+ 0x2a60, 0x7820, 0xa08e, 0x0069, 0x00c0, 0x2537, 0x0079, 0x24d4,
-+ 0x007c, 0x2071, 0x776d, 0x7004, 0x0079, 0x2456, 0x245a, 0x245b,
-+ 0x2465, 0x2477, 0x007c, 0x0090, 0x2464, 0x0068, 0x2464, 0x2b78,
-+ 0x7818, 0xd084, 0x0040, 0x2483, 0x007c, 0x2b78, 0x2061, 0x77bd,
-+ 0x6008, 0xa08e, 0x0100, 0x0040, 0x2472, 0xa086, 0x0200, 0x0040,
-+ 0x252f, 0x007c, 0x7014, 0x2068, 0x2a60, 0x7018, 0x007a, 0x7010,
-+ 0x2068, 0x6834, 0xa086, 0x0103, 0x0040, 0x247f, 0x007c, 0x2a60,
-+ 0x2b78, 0x7018, 0x007a, 0x2a60, 0x7820, 0xa08a, 0x0040, 0x00c8,
-+ 0x248c, 0x61b0, 0x0079, 0x2494, 0x2100, 0xa08a, 0x0036, 0x00c8,
-+ 0x252b, 0x61b0, 0x0079, 0x24d4, 0x250d, 0x253f, 0x2547, 0x254b,
-+ 0x2553, 0x2559, 0x255d, 0x2566, 0x256a, 0x2572, 0x2576, 0x252b,
-+ 0x252b, 0x252b, 0x257a, 0x252b, 0x258a, 0x25a1, 0x25b8, 0x2634,
-+ 0x2639, 0x2666, 0x26c0, 0x26d1, 0x26ef, 0x2722, 0x272c, 0x2739,
-+ 0x274c, 0x2766, 0x276f, 0x27ac, 0x27b2, 0x252b, 0x27c2, 0x252b,
-+ 0x252b, 0x252b, 0x252b, 0x252b, 0x27c6, 0x27cc, 0x252b, 0x252b,
-+ 0x252b, 0x252b, 0x252b, 0x252b, 0x252b, 0x252b, 0x27d4, 0x252b,
-+ 0x252b, 0x252b, 0x252b, 0x252b, 0x27e1, 0x27e7, 0x252b, 0x252b,
-+ 0x252b, 0x252b, 0x252b, 0x252b, 0x252b, 0x252b, 0x252b, 0x252b,
-+ 0x252b, 0x252b, 0x252b, 0x252b, 0x252b, 0x252b, 0x252b, 0x252b,
-+ 0x252b, 0x252b, 0x252b, 0x252b, 0x2572, 0x2576, 0x252b, 0x252b,
-+ 0x27f9, 0x252b, 0x252b, 0x252b, 0x252b, 0x252b, 0x252b, 0x252b,
-+ 0x252b, 0x252b, 0x252b, 0x252b, 0x2846, 0x2913, 0x2927, 0x292e,
-+ 0x2991, 0x29e2, 0x29ed, 0x2a2c, 0x2a3b, 0x2a4a, 0x2a4d, 0x27fd,
-+ 0x2a76, 0x2abd, 0x2aca, 0x2bc5, 0x2cb3, 0x2cda, 0x2de4, 0x2df2,
-+ 0x2dff, 0x2e39, 0x713c, 0x0078, 0x250d, 0x2021, 0x4000, 0x1078,
-+ 0x2d33, 0x127e, 0x2091, 0x8000, 0x0068, 0x251a, 0x7818, 0xd084,
-+ 0x0040, 0x251d, 0x127f, 0x0078, 0x2511, 0x781b, 0x0001, 0x7c22,
-+ 0x7926, 0x7a2a, 0x7b2e, 0x2091, 0x4080, 0x7007, 0x0001, 0x2091,
-+ 0x5000, 0x127f, 0x007c, 0x2021, 0x4001, 0x0078, 0x250f, 0x2021,
-+ 0x4002, 0x0078, 0x250f, 0x2021, 0x4003, 0x0078, 0x250f, 0x2021,
-+ 0x4005, 0x0078, 0x250f, 0x2021, 0x4006, 0x0078, 0x250f, 0xa02e,
-+ 0x2520, 0x7b28, 0x7a2c, 0x7824, 0x7930, 0x0078, 0x2d42, 0x7823,
-+ 0x0004, 0x7824, 0x007a, 0xa02e, 0x2520, 0x7b28, 0x7a2c, 0x7824,
-+ 0x7930, 0x0078, 0x2d46, 0x7924, 0x7828, 0x2114, 0x200a, 0x0078,
-+ 0x250d, 0x7924, 0x2114, 0x0078, 0x250d, 0x2099, 0x0009, 0x20a1,
-+ 0x0009, 0x20a9, 0x0007, 0x53a3, 0x0078, 0x250d, 0x7824, 0x2060,
-+ 0x0078, 0x257c, 0x2009, 0x0001, 0x2011, 0x000f, 0x2019, 0x0025,
-+ 0x0078, 0x250d, 0x7d38, 0x7c3c, 0x0078, 0x2541, 0x7d38, 0x7c3c,
-+ 0x0078, 0x254d, 0x2061, 0x1000, 0x610c, 0xa006, 0x2c14, 0xa200,
-+ 0x8c60, 0x8109, 0x00c0, 0x257e, 0x2010, 0xa005, 0x0040, 0x250d,
-+ 0x0078, 0x2533, 0x2061, 0x7751, 0x7824, 0x7930, 0xa11a, 0x00c8,
-+ 0x253b, 0x8019, 0x0040, 0x253b, 0x604a, 0x6142, 0x782c, 0x6052,
-+ 0x7828, 0x6056, 0xa006, 0x605a, 0x605e, 0x1078, 0x3d89, 0x0078,
-+ 0x250d, 0x2061, 0x7751, 0x7824, 0x7930, 0xa11a, 0x00c8, 0x253b,
-+ 0x8019, 0x0040, 0x253b, 0x604e, 0x6146, 0x782c, 0x6062, 0x7828,
-+ 0x6066, 0xa006, 0x606a, 0x606e, 0x1078, 0x3b5f, 0x0078, 0x250d,
-+ 0xa02e, 0x2520, 0x81ff, 0x00c0, 0x2537, 0x7924, 0x7b28, 0x7a2c,
-+ 0x20a9, 0x0005, 0x20a1, 0x7774, 0x41a1, 0x1078, 0x2cf8, 0x0040,
-+ 0x2537, 0x2009, 0x0020, 0x1078, 0x2d42, 0x701b, 0x25d0, 0x007c,
-+ 0x6834, 0x2008, 0xa084, 0x00ff, 0xa096, 0x0011, 0x0040, 0x25dc,
-+ 0xa096, 0x0019, 0x00c0, 0x2537, 0x810f, 0xa18c, 0x00ff, 0x0040,
-+ 0x2537, 0x710e, 0x700c, 0x8001, 0x0040, 0x260d, 0x700e, 0x1078,
-+ 0x2cf8, 0x0040, 0x2537, 0x2009, 0x0020, 0x2061, 0x77bd, 0x6224,
-+ 0x6328, 0x642c, 0x6530, 0xa290, 0x0040, 0xa399, 0x0000, 0xa4a1,
-+ 0x0000, 0xa5a9, 0x0000, 0x1078, 0x2d42, 0x701b, 0x2600, 0x007c,
-+ 0x6834, 0xa084, 0x00ff, 0xa096, 0x0002, 0x0040, 0x260b, 0xa096,
-+ 0x000a, 0x00c0, 0x2537, 0x0078, 0x25e2, 0x7010, 0x2068, 0x6838,
-+ 0xc0fd, 0x683a, 0x1078, 0x3744, 0x00c0, 0x261b, 0x7007, 0x0003,
-+ 0x701b, 0x261d, 0x007c, 0x1078, 0x3c22, 0x127e, 0x2091, 0x8000,
-+ 0x20a9, 0x0005, 0x2099, 0x7774, 0x530a, 0x2100, 0xa210, 0xa399,
-+ 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0xad80, 0x000d, 0x2009,
-+ 0x0020, 0x127f, 0x0078, 0x2d46, 0x6198, 0x7824, 0x609a, 0x0078,
-+ 0x250d, 0x2091, 0x8000, 0x7823, 0x4000, 0x7827, 0x4953, 0x782b,
-+ 0x5020, 0x782f, 0x2020, 0x2009, 0x017f, 0x2104, 0x7832, 0x3f00,
-+ 0x7836, 0x2061, 0x0100, 0x6200, 0x2061, 0x0200, 0x603c, 0x8007,
-+ 0xa205, 0x783a, 0x2009, 0x04fd, 0x2104, 0x783e, 0x781b, 0x0001,
-+ 0x2091, 0x5000, 0x2091, 0x4080, 0x2071, 0x0010, 0x20c1, 0x00f0,
-+ 0xa08a, 0x0003, 0x00c8, 0x0427, 0x0078, 0x0423, 0x81ff, 0x00c0,
-+ 0x2537, 0x7924, 0x810f, 0xa18c, 0x00ff, 0x1078, 0x384c, 0x00c0,
-+ 0x253b, 0x7e38, 0xa684, 0x3fff, 0xa082, 0x4000, 0x0048, 0x267a,
-+ 0x0078, 0x253b, 0x7c28, 0x7d2c, 0x1078, 0x39fd, 0xd28c, 0x00c0,
-+ 0x2685, 0x1078, 0x3991, 0x0078, 0x2687, 0x1078, 0x39cb, 0x00c0,
-+ 0x26b1, 0x2061, 0x7e00, 0x127e, 0x2091, 0x8000, 0x6000, 0xa086,
-+ 0x0000, 0x0040, 0x269f, 0x6010, 0xa06d, 0x0040, 0x269f, 0x683c,
-+ 0xa406, 0x00c0, 0x269f, 0x6840, 0xa506, 0x0040, 0x26aa, 0x127f,
-+ 0xace0, 0x0008, 0x2001, 0x7715, 0x2004, 0xac02, 0x00c8, 0x2537,
-+ 0x0078, 0x268b, 0x1078, 0x6852, 0x127f, 0x0040, 0x2537, 0x0078,
-+ 0x250d, 0xa00e, 0x2001, 0x0005, 0x1078, 0x3c22, 0x127e, 0x2091,
-+ 0x8000, 0x1078, 0x6c5c, 0x1078, 0x3b92, 0x127f, 0x0078, 0x250d,
-+ 0x81ff, 0x00c0, 0x2537, 0x1078, 0x2d10, 0x0040, 0x253b, 0x1078,
-+ 0x38d5, 0x0040, 0x2537, 0x1078, 0x3a0a, 0x0040, 0x2537, 0x0078,
-+ 0x250d, 0x81ff, 0x00c0, 0x2537, 0x1078, 0x2d22, 0x0040, 0x253b,
-+ 0x1078, 0x3a71, 0x0040, 0x2537, 0x2019, 0x0005, 0x1078, 0x3a2b,
-+ 0x0040, 0x2537, 0x7828, 0xa08a, 0x1000, 0x00c8, 0x253b, 0x8003,
-+ 0x800b, 0x810b, 0xa108, 0x1078, 0x4696, 0x0078, 0x250d, 0x127e,
-+ 0x2091, 0x8000, 0x81ff, 0x00c0, 0x271c, 0x2029, 0x00ff, 0x644c,
-+ 0x2400, 0xa506, 0x0040, 0x2716, 0x2508, 0x1078, 0x384c, 0x00c0,
-+ 0x2716, 0x1078, 0x3a71, 0x0040, 0x271c, 0x2019, 0x0004, 0x1078,
-+ 0x3a2b, 0x0040, 0x271c, 0x7824, 0xa08a, 0x1000, 0x00c8, 0x271f,
-+ 0x8003, 0x800b, 0x810b, 0xa108, 0x1078, 0x4696, 0x8529, 0x00c8,
-+ 0x26f8, 0x127f, 0x0078, 0x250d, 0x127f, 0x0078, 0x2537, 0x127f,
-+ 0x0078, 0x253b, 0x1078, 0x2d10, 0x0040, 0x253b, 0x1078, 0x3942,
-+ 0x1078, 0x39fd, 0x0078, 0x250d, 0x81ff, 0x00c0, 0x2537, 0x1078,
-+ 0x2d10, 0x0040, 0x253b, 0x1078, 0x3931, 0x1078, 0x39fd, 0x0078,
-+ 0x250d, 0x81ff, 0x00c0, 0x2537, 0x1078, 0x2d10, 0x0040, 0x253b,
-+ 0x1078, 0x39ce, 0x0040, 0x2537, 0x1078, 0x378d, 0x1078, 0x398a,
-+ 0x1078, 0x39fd, 0x0078, 0x250d, 0x1078, 0x2d10, 0x0040, 0x253b,
-+ 0x1078, 0x38d5, 0x0040, 0x2537, 0x62a0, 0x2019, 0x0005, 0x0c7e,
-+ 0x1078, 0x3a36, 0x0c7f, 0x1078, 0x4a7e, 0x1078, 0x49c1, 0x2c08,
-+ 0x1078, 0x747b, 0x1078, 0x39fd, 0x0078, 0x250d, 0x1078, 0x2d10,
-+ 0x0040, 0x253b, 0x1078, 0x39fd, 0x2208, 0x0078, 0x250d, 0x157e,
-+ 0x0d7e, 0x0e7e, 0x2069, 0x77ff, 0x6810, 0x6914, 0xa10a, 0x00c8,
-+ 0x277b, 0x2009, 0x0000, 0x6816, 0x2011, 0x0000, 0x2019, 0x0000,
-+ 0x20a9, 0x007e, 0x2069, 0x7820, 0x2d04, 0xa075, 0x0040, 0x2790,
-+ 0x704c, 0x1078, 0x279a, 0xa210, 0x7080, 0x1078, 0x279a, 0xa318,
-+ 0x8d68, 0x00f0, 0x2784, 0x2300, 0xa218, 0x0e7f, 0x0d7f, 0x157f,
-+ 0x0078, 0x250d, 0x0f7e, 0x017e, 0xa07d, 0x0040, 0x27a9, 0x2001,
-+ 0x0000, 0x8000, 0x2f0c, 0x81ff, 0x0040, 0x27a9, 0x2178, 0x0078,
-+ 0x27a1, 0x017f, 0x0f7f, 0x007c, 0x2069, 0x77ff, 0x6910, 0x629c,
-+ 0x0078, 0x250d, 0x81ff, 0x00c0, 0x2537, 0x614c, 0xa190, 0x2329,
-+ 0x2214, 0xa294, 0x00ff, 0x6068, 0xa084, 0xff00, 0xa215, 0x6364,
-+ 0x0078, 0x250d, 0x613c, 0x6240, 0x0078, 0x250d, 0x1078, 0x2d22,
-+ 0x0040, 0x253b, 0x0078, 0x250d, 0x1078, 0x2d22, 0x0040, 0x253b,
-+ 0x6244, 0x6338, 0x0078, 0x250d, 0x613c, 0x6240, 0x7824, 0x603e,
-+ 0x7b28, 0x6342, 0x2069, 0x7751, 0x831f, 0xa305, 0x6816, 0x0078,
-+ 0x250d, 0x1078, 0x2d22, 0x0040, 0x253b, 0x0078, 0x250d, 0x1078,
-+ 0x2d22, 0x0040, 0x253b, 0x7828, 0xa00d, 0x0040, 0x253b, 0x782c,
-+ 0xa005, 0x0040, 0x253b, 0x6244, 0x6146, 0x6338, 0x603a, 0x0078,
-+ 0x250d, 0x7d38, 0x7c3c, 0x0078, 0x25ba, 0x7824, 0xa09c, 0x00ff,
-+ 0xa39a, 0x0003, 0x00c8, 0x2537, 0x624c, 0xa084, 0xff00, 0x8007,
-+ 0xa206, 0x00c0, 0x2815, 0x2001, 0x7740, 0x2009, 0x000c, 0x7a2c,
-+ 0x7b28, 0x7c3c, 0x7d38, 0x0078, 0x2d46, 0x81ff, 0x00c0, 0x2537,
-+ 0x1078, 0x2d22, 0x0040, 0x253b, 0x6004, 0xa084, 0x00ff, 0xa086,
-+ 0x0006, 0x00c0, 0x2537, 0x0c7e, 0x1078, 0x2cf8, 0x0c7f, 0x0040,
-+ 0x2537, 0x6837, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x1078, 0x6b56,
-+ 0x0040, 0x2537, 0x7007, 0x0003, 0x701b, 0x2837, 0x007c, 0x6830,
-+ 0xa086, 0x0100, 0x0040, 0x2537, 0xad80, 0x000e, 0x2009, 0x000c,
-+ 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0078, 0x2d46, 0x1078, 0x2cf8,
-+ 0x0040, 0x2537, 0x2009, 0x001c, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38,
-+ 0x1078, 0x2d42, 0x701b, 0x2855, 0x007c, 0xade8, 0x000d, 0x6800,
-+ 0xa005, 0x0040, 0x253b, 0x6804, 0xd0ac, 0x0040, 0x2862, 0xd0a4,
-+ 0x0040, 0x253b, 0xd094, 0x0040, 0x286d, 0x0c7e, 0x2061, 0x0100,
-+ 0x6104, 0xa18c, 0xffdf, 0x6106, 0x0c7f, 0xd08c, 0x0040, 0x2878,
-+ 0x0c7e, 0x2061, 0x0100, 0x6104, 0xa18d, 0x0010, 0x6106, 0x0c7f,
-+ 0x2009, 0x0100, 0x210c, 0xa18a, 0x0002, 0x0048, 0x288d, 0xd084,
-+ 0x0040, 0x288d, 0x6a28, 0xa28a, 0x007f, 0x00c8, 0x253b, 0xa288,
-+ 0x2329, 0x210c, 0xa18c, 0x00ff, 0x6152, 0xd0dc, 0x0040, 0x2896,
-+ 0x6828, 0xa08a, 0x007f, 0x00c8, 0x253b, 0x604e, 0x6808, 0xa08a,
-+ 0x0100, 0x0048, 0x253b, 0xa08a, 0x0841, 0x00c8, 0x253b, 0xa084,
-+ 0x0007, 0x00c0, 0x253b, 0x680c, 0xa005, 0x0040, 0x253b, 0x6810,
-+ 0xa005, 0x0040, 0x253b, 0x6848, 0x6940, 0xa10a, 0x00c8, 0x253b,
-+ 0x8001, 0x0040, 0x253b, 0x684c, 0x6944, 0xa10a, 0x00c8, 0x253b,
-+ 0x8001, 0x0040, 0x253b, 0x20a9, 0x001c, 0x2d98, 0x2069, 0x7751,
-+ 0x2da0, 0x53a3, 0x6814, 0xa08c, 0x00ff, 0x613e, 0x8007, 0xa084,
-+ 0x00ff, 0x6042, 0x1078, 0x3d89, 0x1078, 0x3b5f, 0x6000, 0xa086,
-+ 0x0000, 0x00c0, 0x2911, 0x6808, 0x602a, 0x1078, 0x1de4, 0x6818,
-+ 0x691c, 0x6a20, 0x6b24, 0x8007, 0x810f, 0x8217, 0x831f, 0x6016,
-+ 0x611a, 0x621e, 0x6322, 0x6c04, 0xd4f4, 0x0040, 0x28f1, 0x6830,
-+ 0x6934, 0x6a38, 0x6b3c, 0x8007, 0x810f, 0x8217, 0x831f, 0x0078,
-+ 0x28f3, 0xa084, 0xf0ff, 0x6006, 0x610a, 0x620e, 0x6312, 0x1078,
-+ 0x4722, 0x0c7e, 0x2061, 0x0100, 0x602f, 0x0040, 0x602f, 0x0000,
-+ 0x0c7f, 0x60b4, 0xa005, 0x0040, 0x290d, 0x6003, 0x0001, 0x2091,
-+ 0x301d, 0x1078, 0x3591, 0x0078, 0x2911, 0x6003, 0x0004, 0x2091,
-+ 0x301d, 0x0078, 0x250d, 0x6000, 0xa086, 0x0000, 0x0040, 0x2537,
-+ 0x2069, 0x7751, 0x7830, 0x6842, 0x7834, 0x6846, 0x2d00, 0x2009,
-+ 0x001c, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0078, 0x2d46, 0x81ff,
-+ 0x00c0, 0x2537, 0x1078, 0x3591, 0x0078, 0x250d, 0x81ff, 0x00c0,
-+ 0x2537, 0x617c, 0x81ff, 0x0040, 0x2948, 0x703f, 0x0000, 0x2001,
-+ 0x7dc0, 0x2009, 0x0040, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x127e,
-+ 0x2091, 0x8000, 0x1078, 0x2d46, 0x701b, 0x250a, 0x127f, 0x007c,
-+ 0x703f, 0x0001, 0x0d7e, 0x2069, 0x7dc0, 0x20a9, 0x0040, 0x20a1,
-+ 0x7dc0, 0x2019, 0xffff, 0x43a4, 0x654c, 0xa588, 0x2329, 0x210c,
-+ 0xa18c, 0x00ff, 0x216a, 0xa00e, 0x2011, 0x0002, 0x2100, 0xa506,
-+ 0x0040, 0x297a, 0x1078, 0x384c, 0x00c0, 0x297a, 0x6014, 0x821c,
-+ 0x0048, 0x2972, 0xa398, 0x7dc0, 0xa085, 0xff00, 0x8007, 0x201a,
-+ 0x0078, 0x2979, 0xa398, 0x7dc0, 0x2324, 0xa4a4, 0xff00, 0xa405,
-+ 0x201a, 0x8210, 0x8108, 0xa182, 0x0080, 0x00c8, 0x2981, 0x0078,
-+ 0x295e, 0x8201, 0x8007, 0x2d0c, 0xa105, 0x206a, 0x0d7f, 0x20a9,
-+ 0x0040, 0x20a1, 0x7dc0, 0x2099, 0x7dc0, 0x1078, 0x35da, 0x0078,
-+ 0x2937, 0x1078, 0x2d22, 0x0040, 0x253b, 0x0c7e, 0x1078, 0x2cf8,
-+ 0x0c7f, 0x0040, 0x2537, 0x2001, 0x7752, 0x2004, 0xd0b4, 0x0040,
-+ 0x29be, 0x6000, 0xd08c, 0x00c0, 0x29be, 0x6004, 0xa084, 0x00ff,
-+ 0xa086, 0x0006, 0x00c0, 0x29be, 0x6837, 0x0000, 0x6838, 0xc0fd,
-+ 0x683a, 0x1078, 0x6b8e, 0x0040, 0x2537, 0x7007, 0x0003, 0x701b,
-+ 0x29ba, 0x007c, 0x1078, 0x2d22, 0x0040, 0x253b, 0x20a9, 0x002b,
-+ 0x2c98, 0xade8, 0x0002, 0x2da0, 0x53a3, 0x20a9, 0x0004, 0xac80,
-+ 0x0006, 0x2098, 0xad80, 0x0006, 0x20a0, 0x1078, 0x35da, 0x20a9,
-+ 0x0004, 0xac80, 0x000a, 0x2098, 0xad80, 0x000a, 0x20a0, 0x1078,
-+ 0x35da, 0x2d00, 0x2009, 0x002b, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38,
-+ 0x0078, 0x2d46, 0x81ff, 0x00c0, 0x2537, 0x1078, 0x2d10, 0x0040,
-+ 0x253b, 0x1078, 0x3a15, 0x0078, 0x250d, 0x81ff, 0x00c0, 0x2537,
-+ 0x7828, 0xa08a, 0x1000, 0x00c8, 0x253b, 0x1078, 0x2d22, 0x0040,
-+ 0x253b, 0x1078, 0x3a71, 0x0040, 0x2537, 0x2019, 0x0004, 0x1078,
-+ 0x3a2b, 0x7924, 0x810f, 0x7a28, 0x1078, 0x2a08, 0x0078, 0x250d,
-+ 0xa186, 0x00ff, 0x0040, 0x2a10, 0x1078, 0x2a20, 0x0078, 0x2a1f,
-+ 0x2029, 0x007e, 0x2061, 0x7700, 0x644c, 0x2400, 0xa506, 0x0040,
-+ 0x2a1c, 0x2508, 0x1078, 0x2a20, 0x8529, 0x00c8, 0x2a15, 0x007c,
-+ 0x1078, 0x384c, 0x00c0, 0x2a2b, 0x2200, 0x8003, 0x800b, 0x810b,
-+ 0xa108, 0x1078, 0x4696, 0x007c, 0x81ff, 0x00c0, 0x2537, 0x1078,
-+ 0x2d10, 0x0040, 0x253b, 0x1078, 0x38d5, 0x0040, 0x2537, 0x1078,
-+ 0x3a20, 0x0078, 0x250d, 0x81ff, 0x00c0, 0x2537, 0x1078, 0x2d10,
-+ 0x0040, 0x253b, 0x1078, 0x38d5, 0x0040, 0x2537, 0x1078, 0x3a0a,
-+ 0x0078, 0x250d, 0x6100, 0x0078, 0x250d, 0x1078, 0x2d22, 0x0040,
-+ 0x253b, 0x6004, 0xa086, 0x0707, 0x0040, 0x253b, 0x2001, 0x7700,
-+ 0x2004, 0xa086, 0x0003, 0x00c0, 0x2537, 0x0d7e, 0xace8, 0x000a,
-+ 0x7924, 0xd184, 0x0040, 0x2a66, 0xace8, 0x0006, 0x680c, 0x8007,
-+ 0x783e, 0x6808, 0x8007, 0x783a, 0x6b04, 0x831f, 0x6a00, 0x8217,
-+ 0x0d7f, 0x6100, 0xa18c, 0x0200, 0x0078, 0x250d, 0x7824, 0xa084,
-+ 0x00ff, 0xa086, 0x00ff, 0x0040, 0x2a80, 0x81ff, 0x00c0, 0x2537,
-+ 0x7828, 0xa08a, 0x1000, 0x00c8, 0x253b, 0x7924, 0xa18c, 0xff00,
-+ 0x810f, 0xa186, 0x00ff, 0x0040, 0x2a94, 0xa182, 0x007f, 0x00c8,
-+ 0x253b, 0x2100, 0x1078, 0x2094, 0x027e, 0x0c7e, 0x127e, 0x2091,
-+ 0x8000, 0x2061, 0x7949, 0x601b, 0x0000, 0x601f, 0x0000, 0x2061,
-+ 0x0100, 0x6030, 0xa084, 0x00ff, 0x810f, 0xa105, 0x604a, 0x6043,
-+ 0x0090, 0x6043, 0x0010, 0x2009, 0x001e, 0x2011, 0x35b6, 0x1078,
-+ 0x4719, 0x7924, 0xa18c, 0xff00, 0x810f, 0x7a28, 0x1078, 0x2a08,
-+ 0x127f, 0x0c7f, 0x027f, 0x0078, 0x250d, 0x7924, 0xa18c, 0xff00,
-+ 0x810f, 0x0c7e, 0x1078, 0x3811, 0x2c08, 0x0c7f, 0x00c0, 0x253b,
-+ 0x0078, 0x250d, 0x81ff, 0x00c0, 0x2537, 0x60bc, 0xd09c, 0x0040,
-+ 0x2537, 0x1078, 0x2cf8, 0x0040, 0x2537, 0x6823, 0x0000, 0x7924,
-+ 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x1078, 0x2d42, 0x701b, 0x2ae1,
-+ 0x007c, 0x2009, 0x0080, 0x1078, 0x384c, 0x00c0, 0x2aee, 0x6004,
-+ 0xa084, 0x00ff, 0xa086, 0x0006, 0x0040, 0x2af2, 0x2021, 0x400a,
-+ 0x0078, 0x250f, 0x0d7e, 0xade8, 0x000d, 0x6900, 0x6a08, 0x6b0c,
-+ 0x6c10, 0x6d14, 0x6e18, 0x6820, 0xa0be, 0x0100, 0x0040, 0x2b65,
-+ 0xa0be, 0x0112, 0x0040, 0x2b65, 0xa0be, 0x0113, 0x0040, 0x2b65,
-+ 0xa0be, 0x0114, 0x0040, 0x2b65, 0xa0be, 0x0117, 0x0040, 0x2b65,
-+ 0xa0be, 0x011a, 0x0040, 0x2b65, 0xa0be, 0x0121, 0x0040, 0x2b5b,
-+ 0xa0be, 0x0131, 0x0040, 0x2b5b, 0xa0be, 0x0171, 0x0040, 0x2b65,
-+ 0xa0be, 0x0173, 0x0040, 0x2b65, 0xa0be, 0x01a1, 0x00c0, 0x2b2d,
-+ 0x6830, 0x8007, 0x6832, 0x0078, 0x2b6b, 0xa0be, 0x0212, 0x0040,
-+ 0x2b61, 0xa0be, 0x0213, 0x0040, 0x2b61, 0xa0be, 0x0214, 0x0040,
-+ 0x2b53, 0xa0be, 0x0217, 0x0040, 0x2b4d, 0xa0be, 0x021a, 0x00c0,
-+ 0x2b46, 0x6838, 0x8007, 0x683a, 0x0078, 0x2b65, 0xa0be, 0x0300,
-+ 0x0040, 0x2b65, 0x0d7f, 0x0078, 0x253b, 0xad80, 0x0010, 0x20a9,
-+ 0x0007, 0x1078, 0x2ba1, 0xad80, 0x000e, 0x20a9, 0x0001, 0x1078,
-+ 0x2ba1, 0x0078, 0x2b65, 0xad80, 0x000c, 0x1078, 0x2baf, 0x0078,
-+ 0x2b6b, 0xad80, 0x000e, 0x1078, 0x2baf, 0xad80, 0x000c, 0x20a9,
-+ 0x0001, 0x1078, 0x2ba1, 0x0c7e, 0x1078, 0x2cf8, 0x0040, 0x2b96,
-+ 0x6838, 0xc0fd, 0x683a, 0x6837, 0x0119, 0x684f, 0x0020, 0x685b,
-+ 0x0001, 0x810b, 0x697e, 0x6883, 0x0000, 0x6a86, 0x6b8a, 0x6c8e,
-+ 0x6d92, 0x6996, 0x689b, 0x0000, 0x0c7f, 0x0d7f, 0x6837, 0x0000,
-+ 0x6838, 0xc0fd, 0x683a, 0x6823, 0x0000, 0x1078, 0x6b72, 0x0040,
-+ 0x2537, 0x7007, 0x0003, 0x701b, 0x2b9a, 0x007c, 0x0c7f, 0x0d7f,
-+ 0x0078, 0x2537, 0x6820, 0xa086, 0x8001, 0x0040, 0x2537, 0x0078,
-+ 0x250d, 0x017e, 0x2008, 0x2044, 0x8000, 0x204c, 0x8000, 0x290a,
-+ 0x8108, 0x280a, 0x8108, 0x00f0, 0x2ba3, 0x017f, 0x007c, 0x017e,
-+ 0x0a7e, 0x0b7e, 0x2008, 0x2044, 0x8000, 0x204c, 0x8000, 0x2054,
-+ 0x8000, 0x205c, 0x2b0a, 0x8108, 0x2a0a, 0x8108, 0x290a, 0x8108,
-+ 0x280a, 0x0b7f, 0x0a7f, 0x017f, 0x007c, 0x81ff, 0x00c0, 0x2537,
-+ 0x7924, 0x2140, 0xa18c, 0xff00, 0x810f, 0xa182, 0x0080, 0x0048,
-+ 0x253b, 0xa182, 0x00ff, 0x00c8, 0x253b, 0x7a2c, 0x7b28, 0x6064,
-+ 0xa306, 0x00c0, 0x2be3, 0x6068, 0xa24e, 0x0040, 0x253b, 0xa9cc,
-+ 0xff00, 0x0040, 0x253b, 0x0c7e, 0x1078, 0x2c57, 0x2c68, 0x0c7f,
-+ 0x0040, 0x2c0a, 0xa0c6, 0x4000, 0x00c0, 0x2bf0, 0x0078, 0x2c07,
-+ 0xa0c6, 0x4007, 0x00c0, 0x2bf7, 0x2408, 0x0078, 0x2c07, 0xa0c6,
-+ 0x4008, 0x00c0, 0x2bff, 0x2708, 0x2610, 0x0078, 0x2c07, 0xa0c6,
-+ 0x4009, 0x00c0, 0x2c05, 0x0078, 0x2c07, 0x2001, 0x4006, 0x2020,
-+ 0x0078, 0x250f, 0x017e, 0x0b7e, 0x0c7e, 0x0e7e, 0x2c70, 0x1078,
-+ 0x5cb4, 0x0040, 0x2c45, 0x2d00, 0x601a, 0x2e58, 0x0e7f, 0x0e7e,
-+ 0x0c7e, 0x1078, 0x2cf8, 0x0c7f, 0x2b70, 0x0040, 0x2537, 0x6837,
-+ 0x0000, 0x2d00, 0x6012, 0x6833, 0x0000, 0x6838, 0xc0fd, 0x683a,
-+ 0x127e, 0x2091, 0x8000, 0x1078, 0x22b5, 0x127f, 0x601f, 0x0001,
-+ 0x2001, 0x0000, 0x1078, 0x37e0, 0x2001, 0x0002, 0x1078, 0x37f4,
-+ 0x127e, 0x2091, 0x8000, 0x7088, 0x8000, 0x708a, 0x127f, 0x2009,
-+ 0x0002, 0x1078, 0x5d41, 0xa085, 0x0001, 0x0e7f, 0x0c7f, 0x0b7f,
-+ 0x017f, 0x0040, 0x2537, 0x7007, 0x0003, 0x701b, 0x2c50, 0x007c,
-+ 0x6830, 0xa086, 0x0100, 0x00c0, 0x250d, 0x0078, 0x2537, 0x0e7e,
-+ 0x0d7e, 0x2029, 0x0000, 0x2021, 0x0080, 0x20a9, 0x007f, 0x2071,
-+ 0x78a0, 0x2e04, 0xa005, 0x00c0, 0x2c6b, 0x2100, 0xa406, 0x0040,
-+ 0x2ca8, 0x0078, 0x2c9c, 0x2068, 0x6f10, 0x2700, 0xa306, 0x00c0,
-+ 0x2c8d, 0x6e14, 0x2600, 0xa206, 0x00c0, 0x2c8d, 0x2400, 0xa106,
-+ 0x00c0, 0x2c89, 0x2d60, 0xd884, 0x0040, 0x2cae, 0x6004, 0xa084,
-+ 0x00ff, 0xa086, 0x0006, 0x00c0, 0x2cae, 0x2001, 0x4000, 0x0078,
-+ 0x2caf, 0x2001, 0x4007, 0x0078, 0x2caf, 0x2400, 0xa106, 0x00c0,
-+ 0x2c9c, 0x6e14, 0x87ff, 0x00c0, 0x2c98, 0x86ff, 0x0040, 0x2ca8,
-+ 0x2001, 0x4008, 0x0078, 0x2caf, 0x8420, 0x8e70, 0x00f0, 0x2c61,
-+ 0x2001, 0x4009, 0x0078, 0x2caf, 0x2001, 0x0001, 0x0078, 0x2caf,
-+ 0x1078, 0x3811, 0x00c0, 0x2ca4, 0x6312, 0x6216, 0xa006, 0xa005,
-+ 0x0d7f, 0x0e7f, 0x007c, 0x81ff, 0x00c0, 0x2537, 0x1078, 0x2cf8,
-+ 0x0040, 0x2537, 0x6837, 0x0000, 0x7824, 0xa005, 0x0040, 0x253b,
-+ 0xa096, 0x00ff, 0x0040, 0x2cc8, 0xa092, 0x0004, 0x00c8, 0x253b,
-+ 0x2010, 0x2d18, 0x1078, 0x2277, 0x0040, 0x2537, 0x7007, 0x0003,
-+ 0x701b, 0x2cd3, 0x007c, 0x6830, 0xa086, 0x0100, 0x0040, 0x2537,
-+ 0x0078, 0x250d, 0x81ff, 0x00c0, 0x2537, 0x7924, 0xa18c, 0xff00,
-+ 0x810f, 0xa182, 0x0080, 0x0048, 0x253b, 0xa182, 0x00ff, 0x00c8,
-+ 0x253b, 0x127e, 0x2091, 0x8000, 0x1078, 0x6a99, 0x00c0, 0x2cf5,
-+ 0x1078, 0x3834, 0x127f, 0x0078, 0x250d, 0x127f, 0x0078, 0x2537,
-+ 0x1078, 0x1327, 0x0040, 0x2d0f, 0xa006, 0x6802, 0x7010, 0xa005,
-+ 0x00c0, 0x2d07, 0x2d00, 0x7012, 0x7016, 0x0078, 0x2d0d, 0x7014,
-+ 0x6802, 0x2060, 0x2d00, 0x6006, 0x7016, 0xad80, 0x000d, 0x007c,
-+ 0x7924, 0x810f, 0xa18c, 0x00ff, 0x1078, 0x384c, 0x00c0, 0x2d1f,
-+ 0x7e28, 0xa684, 0x3fff, 0xa082, 0x4000, 0x0048, 0x2d20, 0xa066,
-+ 0x8cff, 0x007c, 0x7e24, 0x860f, 0xa18c, 0x00ff, 0x1078, 0x384c,
-+ 0x00c0, 0x2d30, 0xa6b4, 0x00ff, 0xa682, 0x4000, 0x0048, 0x2d31,
-+ 0xa066, 0x8cff, 0x007c, 0x017e, 0x7110, 0x81ff, 0x0040, 0x2d3e,
-+ 0x2168, 0x6904, 0x1078, 0x1340, 0x0078, 0x2d35, 0x7112, 0x7116,
-+ 0x017f, 0x007c, 0x2031, 0x0001, 0x0078, 0x2d48, 0x2031, 0x0000,
-+ 0x2061, 0x77bd, 0x6606, 0x6112, 0x600e, 0x6226, 0x632a, 0x642e,
-+ 0x6532, 0x2c10, 0x1078, 0x1377, 0x7007, 0x0002, 0x701b, 0x250d,
-+ 0x007c, 0x0f7e, 0x127e, 0x2091, 0x8000, 0x2079, 0x0000, 0x2001,
-+ 0x777b, 0x2004, 0xa005, 0x00c0, 0x2d74, 0x0068, 0x2d74, 0x7818,
-+ 0xd084, 0x00c0, 0x2d74, 0x781b, 0x0001, 0x7a22, 0x7b26, 0x7c2a,
-+ 0x2091, 0x4080, 0x0078, 0x2d99, 0x017e, 0x0c7e, 0x0e7e, 0x2071,
-+ 0x776d, 0x7138, 0xa182, 0x0008, 0x0048, 0x2d82, 0x7030, 0x2060,
-+ 0x0078, 0x2d93, 0x7030, 0xa0e0, 0x0008, 0xac82, 0x77bd, 0x0048,
-+ 0x2d8b, 0x2061, 0x777d, 0x2c00, 0x7032, 0x81ff, 0x00c0, 0x2d91,
-+ 0x7036, 0x8108, 0x713a, 0x2262, 0x6306, 0x640a, 0x0e7f, 0x0c7f,
-+ 0x017f, 0x127f, 0x0f7f, 0x007c, 0x0e7e, 0x2071, 0x776d, 0x7038,
-+ 0xa005, 0x0040, 0x2dd5, 0x127e, 0x2091, 0x8000, 0x0068, 0x2dd4,
-+ 0x0f7e, 0x2079, 0x0000, 0x7818, 0xd084, 0x00c0, 0x2dd3, 0x0c7e,
-+ 0x781b, 0x0001, 0x7034, 0x2060, 0x2c04, 0x7822, 0x6004, 0x7826,
-+ 0x6008, 0x782a, 0x2091, 0x4080, 0x7038, 0x8001, 0x703a, 0xa005,
-+ 0x00c0, 0x2dc9, 0x7033, 0x777d, 0x7037, 0x777d, 0x0c7f, 0x0078,
-+ 0x2dd3, 0xac80, 0x0008, 0xa0fa, 0x77bd, 0x0048, 0x2dd1, 0x2001,
-+ 0x777d, 0x7036, 0x0c7f, 0x0f7f, 0x127f, 0x0e7f, 0x007c, 0x027e,
-+ 0x2001, 0x7752, 0x2004, 0xd0c4, 0x0040, 0x2de2, 0x2011, 0x8014,
-+ 0x1078, 0x2d59, 0x027f, 0x007c, 0x81ff, 0x00c0, 0x2537, 0x127e,
-+ 0x2091, 0x8000, 0x6030, 0xc08d, 0x6032, 0x1078, 0x3591, 0x127f,
-+ 0x0078, 0x250d, 0x7824, 0x2008, 0xa18c, 0xfffd, 0x00c0, 0x2dfd,
-+ 0x61c8, 0xa10d, 0x61ca, 0x0078, 0x250d, 0x0078, 0x253b, 0x81ff,
-+ 0x00c0, 0x2537, 0x6000, 0xa086, 0x0003, 0x00c0, 0x2537, 0x2001,
-+ 0x7752, 0x2004, 0xd0a4, 0x00c0, 0x2537, 0x1078, 0x2d22, 0x0040,
-+ 0x253b, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x2e1c,
-+ 0x7828, 0xa005, 0x0040, 0x250d, 0x0c7e, 0x1078, 0x2cf8, 0x0c7f,
-+ 0x0040, 0x2537, 0x6837, 0x0000, 0x6833, 0x0000, 0x6838, 0xc0fd,
-+ 0x683a, 0x1078, 0x6bfb, 0x0040, 0x2537, 0x7007, 0x0003, 0x701b,
-+ 0x2e32, 0x007c, 0x6830, 0xa086, 0x0100, 0x0040, 0x2537, 0x0078,
-+ 0x250d, 0x2001, 0x7700, 0x2004, 0xa086, 0x0003, 0x00c0, 0x2537,
-+ 0x7f24, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x1078, 0x2cf8, 0x0040,
-+ 0x2537, 0x2009, 0x0000, 0x2031, 0x0000, 0x7023, 0x0000, 0x702f,
-+ 0x0000, 0xad80, 0x0005, 0x7026, 0x20a0, 0x1078, 0x384c, 0x00c0,
-+ 0x2e7f, 0x6004, 0xa0c6, 0x0707, 0x0040, 0x2e7f, 0xa084, 0x00ff,
-+ 0xa0c6, 0x0006, 0x00c0, 0x2e7f, 0x87ff, 0x0040, 0x2e72, 0xac80,
-+ 0x0006, 0x2098, 0x3400, 0x20a9, 0x0004, 0x53a3, 0x1078, 0x2baf,
-+ 0x0078, 0x2e7b, 0xac80, 0x000a, 0x2098, 0x3400, 0x20a9, 0x0004,
-+ 0x53a3, 0x1078, 0x2baf, 0x21a2, 0x94a0, 0xa6b0, 0x0005, 0x8108,
-+ 0xa186, 0x007e, 0x0040, 0x2e8a, 0xa686, 0x0028, 0x0040, 0x2e93,
-+ 0x0078, 0x2e55, 0x86ff, 0x00c0, 0x2e91, 0x7120, 0x810b, 0x0078,
-+ 0x250d, 0x702f, 0x0001, 0x711e, 0x7020, 0xa600, 0x7022, 0x772a,
-+ 0x2061, 0x77bd, 0x6007, 0x0000, 0x6612, 0x7024, 0x600e, 0x6226,
-+ 0x632a, 0x642e, 0x6532, 0x2c10, 0x1078, 0x1377, 0x7007, 0x0002,
-+ 0x701b, 0x2eab, 0x007c, 0x702c, 0xa005, 0x00c0, 0x2ebd, 0x711c,
-+ 0x7024, 0x20a0, 0x7728, 0x2031, 0x0000, 0x2061, 0x77bd, 0x6224,
-+ 0x6328, 0x642c, 0x6530, 0x0078, 0x2e55, 0x7120, 0x810b, 0x0078,
-+ 0x250d, 0x127e, 0x0c7e, 0x0e7e, 0x2061, 0x0100, 0x2071, 0x7700,
-+ 0x6044, 0xd0a4, 0x00c0, 0x2eea, 0xd084, 0x0040, 0x2ed3, 0x1078,
-+ 0x3015, 0x0078, 0x2ee6, 0xd08c, 0x0040, 0x2eda, 0x1078, 0x2f2c,
-+ 0x0078, 0x2ee6, 0xd094, 0x0040, 0x2ee1, 0x1078, 0x2f0f, 0x0078,
-+ 0x2ee6, 0xd09c, 0x0040, 0x2ee6, 0x1078, 0x2ef4, 0x0e7f, 0x0c7f,
-+ 0x127f, 0x007c, 0x017e, 0x6128, 0xd19c, 0x00c0, 0x2ef1, 0xc19d,
-+ 0x612a, 0x017f, 0x0078, 0x2ee6, 0x6043, 0x0040, 0x6043, 0x0000,
-+ 0x706f, 0x0000, 0x7087, 0x0001, 0x70a7, 0x0000, 0x70bf, 0x0000,
-+ 0x2009, 0x7dc0, 0x200b, 0x0000, 0x707f, 0x0000, 0x7073, 0x000f,
-+ 0x2009, 0x000f, 0x2011, 0x3551, 0x1078, 0x4719, 0x007c, 0x7070,
-+ 0xa005, 0x00c0, 0x2f2b, 0x2011, 0x3551, 0x1078, 0x4689, 0x6043,
-+ 0x0020, 0x6043, 0x0000, 0x6044, 0xd08c, 0x00c0, 0x2f27, 0x7083,
-+ 0x0000, 0x6043, 0x0090, 0x6043, 0x0010, 0x0078, 0x2f2b, 0x7077,
-+ 0x0000, 0x0078, 0x2f2b, 0x007c, 0x7074, 0xa08a, 0x0003, 0x00c8,
-+ 0x2f35, 0x1079, 0x2f38, 0x0078, 0x2f37, 0x1078, 0x12cd, 0x007c,
-+ 0x2f3b, 0x2f8a, 0x3014, 0x0f7e, 0x7077, 0x0001, 0x20e1, 0xa000,
-+ 0x20e1, 0x8700, 0x1078, 0x1de4, 0x20e1, 0x9080, 0x20e1, 0x4000,
-+ 0x2079, 0x7c00, 0x207b, 0x2200, 0x7807, 0x00ef, 0x780b, 0x0000,
-+ 0x780f, 0x00ef, 0x7813, 0x0138, 0x7817, 0x0000, 0x781b, 0x0000,
-+ 0x781f, 0x0000, 0x7823, 0xffff, 0x7827, 0xffff, 0x782b, 0x0000,
-+ 0x782f, 0x0000, 0x2079, 0x7c0c, 0x207b, 0x1101, 0x7807, 0x0000,
-+ 0x2099, 0x7705, 0x20a1, 0x7c0e, 0x20a9, 0x0004, 0x53a3, 0x2079,
-+ 0x7c12, 0x207b, 0x0000, 0x7807, 0x0000, 0x2099, 0x7c00, 0x20a1,
-+ 0x020b, 0x20a9, 0x0014, 0x53a6, 0x60c3, 0x000c, 0x600f, 0x0000,
-+ 0x1078, 0x3578, 0x0f7f, 0x707b, 0x0000, 0x6043, 0x0008, 0x6043,
-+ 0x0000, 0x007c, 0x0d7e, 0x7078, 0x707b, 0x0000, 0xa025, 0x0040,
-+ 0x2ffe, 0x6020, 0xd0b4, 0x00c0, 0x2ffc, 0x7184, 0x81ff, 0x0040,
-+ 0x2fe5, 0xa486, 0x000c, 0x00c0, 0x2ff0, 0xa480, 0x0018, 0x8004,
-+ 0x20a8, 0x2011, 0x7c80, 0x2019, 0x7c00, 0x220c, 0x2304, 0xa106,
-+ 0x00c0, 0x2fbc, 0x8210, 0x8318, 0x00f0, 0x2fa5, 0x6043, 0x0004,
-+ 0x608b, 0xbc94, 0x608f, 0xf0f0, 0x6043, 0x0006, 0x7077, 0x0002,
-+ 0x7083, 0x0002, 0x0078, 0x2ffc, 0x2069, 0x7c80, 0x6930, 0xa18e,
-+ 0x1101, 0x00c0, 0x2ff0, 0x6834, 0xa005, 0x00c0, 0x2ff0, 0x6900,
-+ 0xa18c, 0x00ff, 0x00c0, 0x2fd0, 0x6804, 0xa005, 0x0040, 0x2fe5,
-+ 0x2011, 0x7c8e, 0x2019, 0x7705, 0x20a9, 0x0004, 0x220c, 0x2304,
-+ 0xa102, 0x0048, 0x2fe3, 0x00c0, 0x2ff0, 0x8210, 0x8318, 0x00f0,
-+ 0x2fd6, 0x0078, 0x2ff0, 0x7087, 0x0000, 0x20e1, 0x9080, 0x20e1,
-+ 0x4000, 0x2099, 0x7c80, 0x20a1, 0x020b, 0x20a9, 0x0014, 0x53a6,
-+ 0x6043, 0x0008, 0x6043, 0x0000, 0x6020, 0xd0b4, 0x00c0, 0x2ffc,
-+ 0x60c3, 0x000c, 0x1078, 0x3578, 0x0d7f, 0x007c, 0x6020, 0xd0b4,
-+ 0x00c0, 0x2ffc, 0x60c3, 0x000c, 0x2011, 0x7940, 0x2013, 0x0000,
-+ 0x707b, 0x0000, 0x20e1, 0x9080, 0x60a3, 0x0056, 0x60a7, 0x9575,
-+ 0x1078, 0x5693, 0x0078, 0x2ffc, 0x007c, 0x7080, 0xa08a, 0x001d,
-+ 0x00c8, 0x301e, 0x1079, 0x3021, 0x0078, 0x3020, 0x1078, 0x12cd,
-+ 0x007c, 0x3045, 0x3054, 0x3085, 0x309a, 0x30ca, 0x30f2, 0x3122,
-+ 0x314c, 0x317c, 0x31a2, 0x31eb, 0x320d, 0x3231, 0x3247, 0x326f,
-+ 0x3282, 0x328b, 0x32a4, 0x32d2, 0x32fa, 0x3328, 0x3352, 0x339a,
-+ 0x33cb, 0x33ed, 0x342b, 0x3451, 0x346a, 0x3477, 0x7003, 0x0007,
-+ 0x6004, 0xa084, 0xfff9, 0x6006, 0x007c, 0x608b, 0xbc94, 0x608f,
-+ 0xf0f0, 0x6043, 0x0002, 0x7083, 0x0001, 0x2009, 0x07d0, 0x2011,
-+ 0x3558, 0x1078, 0x467c, 0x007c, 0x0f7e, 0x7078, 0xa086, 0x0014,
-+ 0x00c0, 0x3083, 0x6043, 0x0000, 0x6020, 0xd0b4, 0x00c0, 0x3083,
-+ 0x2079, 0x7c80, 0x7a30, 0xa296, 0x1102, 0x00c0, 0x3081, 0x7834,
-+ 0xa005, 0x00c0, 0x3081, 0x7a38, 0xd2fc, 0x0040, 0x3077, 0x70a4,
-+ 0xa005, 0x00c0, 0x3077, 0x1078, 0x3611, 0x70a7, 0x0001, 0x2011,
-+ 0x3558, 0x1078, 0x4689, 0x7083, 0x0010, 0x1078, 0x328b, 0x0078,
-+ 0x3083, 0x707b, 0x0000, 0x0f7f, 0x007c, 0x7083, 0x0003, 0x6043,
-+ 0x0004, 0x1078, 0x35e2, 0x20a3, 0x1102, 0x20a3, 0x0000, 0x20a9,
-+ 0x000a, 0x20a3, 0x0000, 0x00f0, 0x3091, 0x60c3, 0x0014, 0x1078,
-+ 0x3578, 0x007c, 0x0f7e, 0x7078, 0xa005, 0x0040, 0x30c8, 0x2011,
-+ 0x3558, 0x1078, 0x4689, 0xa086, 0x0014, 0x00c0, 0x30c4, 0x2079,
-+ 0x7c80, 0x7a30, 0xa296, 0x1102, 0x00c0, 0x30c4, 0x7834, 0xa005,
-+ 0x00c0, 0x30c4, 0x7a38, 0xd2fc, 0x0040, 0x30be, 0x70a4, 0xa005,
-+ 0x00c0, 0x30be, 0x1078, 0x3611, 0x70a7, 0x0001, 0x7083, 0x0004,
-+ 0x1078, 0x30ca, 0x0078, 0x30c8, 0x7083, 0x0002, 0x707b, 0x0000,
-+ 0x0f7f, 0x007c, 0x7083, 0x0005, 0x1078, 0x35e2, 0x20a3, 0x1103,
-+ 0x20a3, 0x0000, 0x3430, 0x2011, 0x7c8e, 0x706c, 0xa005, 0x00c0,
-+ 0x30e4, 0x714c, 0xa186, 0xffff, 0x0040, 0x30e4, 0x1078, 0x351c,
-+ 0x0040, 0x30e4, 0x1078, 0x3611, 0x20a9, 0x0008, 0x2298, 0x26a0,
-+ 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078,
-+ 0x3578, 0x007c, 0x0f7e, 0x7078, 0xa005, 0x0040, 0x3120, 0x2011,
-+ 0x3558, 0x1078, 0x4689, 0xa086, 0x0014, 0x00c0, 0x311c, 0x2079,
-+ 0x7c80, 0x7a30, 0xa296, 0x1103, 0x00c0, 0x311c, 0x7834, 0xa005,
-+ 0x00c0, 0x311c, 0x7a38, 0xd2fc, 0x0040, 0x3116, 0x70a4, 0xa005,
-+ 0x00c0, 0x3116, 0x1078, 0x3611, 0x70a7, 0x0001, 0x7083, 0x0006,
-+ 0x1078, 0x3122, 0x0078, 0x3120, 0x7083, 0x0002, 0x707b, 0x0000,
-+ 0x0f7f, 0x007c, 0x7083, 0x0007, 0x1078, 0x35e2, 0x20a3, 0x1104,
-+ 0x20a3, 0x0000, 0x3430, 0x2011, 0x7c8e, 0x706c, 0xa005, 0x00c0,
-+ 0x313e, 0x7150, 0xa186, 0xffff, 0x0040, 0x313e, 0xa180, 0x2329,
-+ 0x200c, 0xa18c, 0xff00, 0x810f, 0x1078, 0x351c, 0x20a9, 0x0008,
-+ 0x2298, 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3,
-+ 0x0014, 0x1078, 0x3578, 0x007c, 0x0f7e, 0x7078, 0xa005, 0x0040,
-+ 0x317a, 0x2011, 0x3558, 0x1078, 0x4689, 0xa086, 0x0014, 0x00c0,
-+ 0x3176, 0x2079, 0x7c80, 0x7a30, 0xa296, 0x1104, 0x00c0, 0x3176,
-+ 0x7834, 0xa005, 0x00c0, 0x3176, 0x7a38, 0xd2fc, 0x0040, 0x3170,
-+ 0x70a4, 0xa005, 0x00c0, 0x3170, 0x1078, 0x3611, 0x70a7, 0x0001,
-+ 0x7083, 0x0008, 0x1078, 0x317c, 0x0078, 0x317a, 0x7083, 0x0002,
-+ 0x707b, 0x0000, 0x0f7f, 0x007c, 0x7083, 0x0009, 0x1078, 0x35e2,
-+ 0x20a3, 0x1105, 0x20a3, 0x0100, 0x3430, 0x706c, 0xa005, 0x00c0,
-+ 0x318f, 0x1078, 0x3486, 0x0040, 0x319f, 0x0078, 0x3199, 0x20a9,
-+ 0x0008, 0x2099, 0x7c8e, 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3,
-+ 0x0000, 0x60c3, 0x0014, 0x1078, 0x3578, 0x0078, 0x31a1, 0x1078,
-+ 0x303e, 0x007c, 0x0f7e, 0x7078, 0xa005, 0x0040, 0x31e9, 0x2011,
-+ 0x3558, 0x1078, 0x4689, 0xa086, 0x0014, 0x00c0, 0x31e5, 0x2079,
-+ 0x7c80, 0x7a30, 0xa296, 0x1105, 0x00c0, 0x31e5, 0x7834, 0x2011,
-+ 0x0100, 0xa21e, 0x00c0, 0x31ce, 0x7a38, 0xd2fc, 0x0040, 0x31c8,
-+ 0x70a4, 0xa005, 0x00c0, 0x31c8, 0x1078, 0x3611, 0x70a7, 0x0001,
-+ 0x7083, 0x000a, 0x1078, 0x31eb, 0x0078, 0x31e9, 0xa005, 0x00c0,
-+ 0x31e5, 0x7a38, 0xd2fc, 0x0040, 0x31dd, 0x70a4, 0xa005, 0x00c0,
-+ 0x31dd, 0x1078, 0x3611, 0x70a7, 0x0001, 0x707f, 0x0000, 0x7083,
-+ 0x000e, 0x1078, 0x326f, 0x0078, 0x31e9, 0x7083, 0x0002, 0x707b,
-+ 0x0000, 0x0f7f, 0x007c, 0x7083, 0x000b, 0x2011, 0x7c0e, 0x22a0,
-+ 0x20a9, 0x0040, 0x2019, 0xffff, 0x43a4, 0x20a9, 0x0002, 0x2009,
-+ 0x0000, 0x41a4, 0x1078, 0x35e2, 0x20a3, 0x1106, 0x20a3, 0x0000,
-+ 0x6030, 0xa085, 0x0100, 0x2012, 0x2298, 0x20a9, 0x0042, 0x53a6,
-+ 0x60c3, 0x0084, 0x1078, 0x3578, 0x007c, 0x0f7e, 0x7078, 0xa005,
-+ 0x0040, 0x322f, 0x2011, 0x3558, 0x1078, 0x4689, 0xa086, 0x0084,
-+ 0x00c0, 0x322b, 0x2079, 0x7c80, 0x7a30, 0xa296, 0x1106, 0x00c0,
-+ 0x322b, 0x7834, 0xa005, 0x00c0, 0x322b, 0x7083, 0x000c, 0x1078,
-+ 0x3231, 0x0078, 0x322f, 0x7083, 0x0002, 0x707b, 0x0000, 0x0f7f,
-+ 0x007c, 0x7083, 0x000d, 0x1078, 0x35e2, 0x20a3, 0x1107, 0x20a3,
-+ 0x0000, 0x2099, 0x7c8e, 0x20a9, 0x0040, 0x53a6, 0x20a3, 0x0000,
-+ 0x20a3, 0x0000, 0x60c3, 0x0084, 0x1078, 0x3578, 0x007c, 0x0f7e,
-+ 0x7078, 0xa005, 0x0040, 0x326d, 0x2011, 0x3558, 0x1078, 0x4689,
-+ 0xa086, 0x0084, 0x00c0, 0x3269, 0x2079, 0x7c80, 0x7a30, 0xa296,
-+ 0x1107, 0x00c0, 0x3269, 0x7834, 0xa005, 0x00c0, 0x3269, 0x707f,
-+ 0x0001, 0x1078, 0x35d4, 0x7083, 0x000e, 0x1078, 0x326f, 0x0078,
-+ 0x326d, 0x7083, 0x0002, 0x707b, 0x0000, 0x0f7f, 0x007c, 0x7083,
-+ 0x000f, 0x707b, 0x0000, 0x608b, 0xbc85, 0x608f, 0xb5b5, 0x6043,
-+ 0x0005, 0x6043, 0x0004, 0x2009, 0x07d0, 0x2011, 0x3558, 0x1078,
-+ 0x467c, 0x007c, 0x7078, 0xa005, 0x0040, 0x328a, 0x2011, 0x3558,
-+ 0x1078, 0x4689, 0x007c, 0x7083, 0x0011, 0x20e1, 0x9080, 0x20e1,
-+ 0x4000, 0x2099, 0x7c80, 0x20a1, 0x020b, 0x7478, 0xa480, 0x0018,
-+ 0xa080, 0x0007, 0xa084, 0x03f8, 0x8004, 0x20a8, 0x53a6, 0x60c3,
-+ 0x0014, 0x1078, 0x3578, 0x007c, 0x0f7e, 0x7078, 0xa005, 0x0040,
-+ 0x32d0, 0x2011, 0x3558, 0x1078, 0x4689, 0xa086, 0x0014, 0x00c0,
-+ 0x32ce, 0x2079, 0x7c80, 0x7a30, 0xa296, 0x1103, 0x00c0, 0x32ce,
-+ 0x7834, 0xa005, 0x00c0, 0x32ce, 0x7a38, 0xd2fc, 0x0040, 0x32c8,
-+ 0x70a4, 0xa005, 0x00c0, 0x32c8, 0x1078, 0x3611, 0x70a7, 0x0001,
-+ 0x7083, 0x0012, 0x1078, 0x32d2, 0x0078, 0x32d0, 0x707b, 0x0000,
-+ 0x0f7f, 0x007c, 0x7083, 0x0013, 0x1078, 0x35ee, 0x20a3, 0x1103,
-+ 0x20a3, 0x0000, 0x3430, 0x2011, 0x7c8e, 0x706c, 0xa005, 0x00c0,
-+ 0x32ec, 0x714c, 0xa186, 0xffff, 0x0040, 0x32ec, 0x1078, 0x351c,
-+ 0x0040, 0x32ec, 0x1078, 0x3611, 0x20a9, 0x0008, 0x2298, 0x26a0,
-+ 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078,
-+ 0x3578, 0x007c, 0x0f7e, 0x7078, 0xa005, 0x0040, 0x3326, 0x2011,
-+ 0x3558, 0x1078, 0x4689, 0xa086, 0x0014, 0x00c0, 0x3324, 0x2079,
-+ 0x7c80, 0x7a30, 0xa296, 0x1104, 0x00c0, 0x3324, 0x7834, 0xa005,
-+ 0x00c0, 0x3324, 0x7a38, 0xd2fc, 0x0040, 0x331e, 0x70a4, 0xa005,
-+ 0x00c0, 0x331e, 0x1078, 0x3611, 0x70a7, 0x0001, 0x7083, 0x0014,
-+ 0x1078, 0x3328, 0x0078, 0x3326, 0x707b, 0x0000, 0x0f7f, 0x007c,
-+ 0x7083, 0x0015, 0x1078, 0x35ee, 0x20a3, 0x1104, 0x20a3, 0x0000,
-+ 0x3430, 0x2011, 0x7c8e, 0x706c, 0xa006, 0x00c0, 0x3344, 0x7150,
-+ 0xa186, 0xffff, 0x0040, 0x3344, 0xa180, 0x2329, 0x200c, 0xa18c,
-+ 0xff00, 0x810f, 0x1078, 0x351c, 0x20a9, 0x0008, 0x2298, 0x26a0,
-+ 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078,
-+ 0x3578, 0x007c, 0x0f7e, 0x7078, 0xa005, 0x0040, 0x3398, 0x2011,
-+ 0x3558, 0x1078, 0x4689, 0xa086, 0x0014, 0x00c0, 0x3396, 0x2079,
-+ 0x7c80, 0x7a30, 0xa296, 0x1105, 0x00c0, 0x3396, 0x7834, 0x2011,
-+ 0x0100, 0xa21e, 0x00c0, 0x337f, 0x7a38, 0xd2f4, 0x0040, 0x3372,
-+ 0x70bf, 0x0008, 0xd2fc, 0x0040, 0x337d, 0x70a4, 0xa005, 0x00c0,
-+ 0x337d, 0x1078, 0x3611, 0x70a7, 0x0001, 0x0078, 0x3390, 0xa005,
-+ 0x00c0, 0x3396, 0x7a38, 0xd2fc, 0x0040, 0x338e, 0x70a4, 0xa005,
-+ 0x00c0, 0x338e, 0x1078, 0x3611, 0x70a7, 0x0001, 0x707f, 0x0000,
-+ 0x7083, 0x0016, 0x1078, 0x339a, 0x0078, 0x3398, 0x707b, 0x0000,
-+ 0x0f7f, 0x007c, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, 0x7c80,
-+ 0x20a1, 0x020b, 0x20a9, 0x000e, 0x53a6, 0x3430, 0x2011, 0x7c8e,
-+ 0x7083, 0x0017, 0x0078, 0x33ae, 0x7083, 0x001b, 0x706c, 0xa005,
-+ 0x00c0, 0x33b8, 0x1078, 0x3486, 0x0040, 0x33c8, 0x0078, 0x33c2,
-+ 0x20a9, 0x0008, 0x2099, 0x7c8e, 0x26a0, 0x53a6, 0x20a3, 0x0000,
-+ 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078, 0x3578, 0x0078, 0x33ca,
-+ 0x1078, 0x303e, 0x007c, 0x0f7e, 0x7078, 0xa005, 0x0040, 0x33eb,
-+ 0x2011, 0x3558, 0x1078, 0x4689, 0xa086, 0x0084, 0x00c0, 0x33e9,
-+ 0x2079, 0x7c80, 0x7a30, 0xa296, 0x1106, 0x00c0, 0x33e9, 0x7834,
-+ 0xa005, 0x00c0, 0x33e9, 0x7083, 0x0018, 0x1078, 0x33ed, 0x0078,
-+ 0x33eb, 0x707b, 0x0000, 0x0f7f, 0x007c, 0x7083, 0x0019, 0x1078,
-+ 0x35ee, 0x20a3, 0x1106, 0x20a3, 0x0000, 0x3430, 0x2099, 0x7c8e,
-+ 0x2039, 0x7c0e, 0x27a0, 0x20a9, 0x0040, 0x53a3, 0x2728, 0x2514,
-+ 0x8207, 0xa084, 0x00ff, 0x8000, 0x2018, 0xa294, 0x00ff, 0x8007,
-+ 0xa205, 0x202a, 0x6030, 0x2310, 0x8214, 0xa2a0, 0x7c0e, 0x2414,
-+ 0xa38c, 0x0001, 0x0040, 0x3418, 0xa294, 0xff00, 0x0078, 0x341b,
-+ 0xa294, 0x00ff, 0x8007, 0xa215, 0x2222, 0x2798, 0x26a0, 0x20a9,
-+ 0x0040, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0084,
-+ 0x1078, 0x3578, 0x007c, 0x0f7e, 0x7078, 0xa005, 0x0040, 0x344f,
-+ 0x2011, 0x3558, 0x1078, 0x4689, 0xa086, 0x0084, 0x00c0, 0x344d,
-+ 0x2079, 0x7c80, 0x7a30, 0xa296, 0x1107, 0x00c0, 0x344d, 0x7834,
-+ 0xa005, 0x00c0, 0x344d, 0x707f, 0x0001, 0x1078, 0x35d4, 0x7083,
-+ 0x001a, 0x1078, 0x3451, 0x0078, 0x344f, 0x707b, 0x0000, 0x0f7f,
-+ 0x007c, 0x7083, 0x001b, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099,
-+ 0x7c80, 0x20a1, 0x020b, 0x7478, 0xa480, 0x0018, 0xa080, 0x0007,
-+ 0xa084, 0x03f8, 0x8004, 0x20a8, 0x53a6, 0x60c3, 0x0084, 0x1078,
-+ 0x3578, 0x007c, 0x7078, 0xa005, 0x0040, 0x3476, 0x2011, 0x3558,
-+ 0x1078, 0x4689, 0x7083, 0x001c, 0x1078, 0x3477, 0x007c, 0x707b,
-+ 0x0000, 0x608b, 0xbc85, 0x608f, 0xb5b5, 0x6043, 0x0001, 0x2009,
-+ 0x07d0, 0x2011, 0x3558, 0x1078, 0x467c, 0x007c, 0x087e, 0x097e,
-+ 0x2029, 0x7752, 0x252c, 0x20a9, 0x0008, 0x2041, 0x7c0e, 0x28a0,
-+ 0x2099, 0x7c8e, 0x53a3, 0x20a9, 0x0008, 0x2011, 0x0007, 0xd5d4,
-+ 0x0040, 0x349c, 0x2011, 0x0000, 0x2800, 0xa200, 0x200c, 0xa1a6,
-+ 0xffff, 0x00c0, 0x34ae, 0xd5d4, 0x0040, 0x34a9, 0x8210, 0x0078,
-+ 0x34aa, 0x8211, 0x00f0, 0x349c, 0x0078, 0x3513, 0x82ff, 0x00c0,
-+ 0x34c0, 0xd5d4, 0x0040, 0x34ba, 0xa1a6, 0x3fff, 0x0040, 0x34a6,
-+ 0x0078, 0x34be, 0xa1a6, 0x3fff, 0x0040, 0x3513, 0xa18d, 0xc000,
-+ 0x20a9, 0x0010, 0x2019, 0x0001, 0xd5d4, 0x0040, 0x34c9, 0x2019,
-+ 0x0010, 0x2120, 0xd5d4, 0x0040, 0x34d0, 0x8423, 0x0078, 0x34d1,
-+ 0x8424, 0x00c8, 0x34de, 0xd5d4, 0x0040, 0x34d9, 0x8319, 0x0078,
-+ 0x34da, 0x8318, 0x00f0, 0x34ca, 0x0078, 0x3513, 0x23a8, 0x2021,
-+ 0x0001, 0x8426, 0x8425, 0x00f0, 0x34e2, 0x2328, 0x8529, 0xa2be,
-+ 0x0007, 0x0040, 0x34f6, 0x007e, 0x2039, 0x0007, 0x2200, 0xa73a,
-+ 0x007f, 0x27a8, 0xa5a8, 0x0010, 0x00f0, 0x34f2, 0x754e, 0xa5c8,
-+ 0x2329, 0x292c, 0xa5ac, 0x00ff, 0x6532, 0x60e7, 0x0000, 0x65ea,
-+ 0x2018, 0x2304, 0xa405, 0x201a, 0x706f, 0x0001, 0x26a0, 0x2898,
-+ 0x20a9, 0x0008, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0xa085,
-+ 0x0001, 0x0078, 0x3519, 0xa006, 0x0078, 0x3519, 0xa006, 0x1078,
-+ 0x12cd, 0x097f, 0x087f, 0x007c, 0x2118, 0x2021, 0x0000, 0x2001,
-+ 0x0007, 0xa39a, 0x0010, 0x0048, 0x3529, 0x8420, 0x8001, 0x0078,
-+ 0x3521, 0x2118, 0x84ff, 0x0040, 0x3532, 0xa39a, 0x0010, 0x8421,
-+ 0x00c0, 0x352d, 0x2021, 0x0001, 0x83ff, 0x0040, 0x353b, 0x8423,
-+ 0x8319, 0x00c0, 0x3537, 0xa238, 0x2704, 0xa42c, 0x00c0, 0x3550,
-+ 0xa405, 0x203a, 0x714e, 0xa1a0, 0x2329, 0x242c, 0xa5ac, 0x00ff,
-+ 0x6532, 0x60e7, 0x0000, 0x65ea, 0x706f, 0x0001, 0xa084, 0x0000,
-+ 0x007c, 0x0e7e, 0x2071, 0x7700, 0x7073, 0x0000, 0x0e7f, 0x007c,
-+ 0x0e7e, 0x0f7e, 0x2079, 0x0100, 0x2071, 0x0140, 0x1078, 0x569c,
-+ 0x7004, 0xa084, 0x4000, 0x0040, 0x3569, 0x7003, 0x1000, 0x7003,
-+ 0x0000, 0x127e, 0x2091, 0x8000, 0x2071, 0x7720, 0x2073, 0x0000,
-+ 0x7843, 0x0090, 0x7843, 0x0010, 0x127f, 0x0f7f, 0x0e7f, 0x007c,
-+ 0x127e, 0x2091, 0x8000, 0x2011, 0x7940, 0x2013, 0x0000, 0x707b,
-+ 0x0000, 0x127f, 0x20e1, 0x9080, 0x60a3, 0x0056, 0x60a7, 0x9575,
-+ 0x1078, 0x5693, 0x2009, 0x07d0, 0x2011, 0x3558, 0x1078, 0x4719,
-+ 0x007c, 0x017e, 0x027e, 0x0c7e, 0x127e, 0x2091, 0x8000, 0x2009,
-+ 0x00f7, 0x1078, 0x35fa, 0x2061, 0x7949, 0x601b, 0x0000, 0x601f,
-+ 0x0000, 0x2061, 0x7700, 0x6003, 0x0001, 0x2061, 0x0100, 0x6043,
-+ 0x0090, 0x6043, 0x0010, 0x2009, 0x001e, 0x2011, 0x35b6, 0x1078,
-+ 0x467c, 0x127f, 0x0c7f, 0x027f, 0x017f, 0x007c, 0x0e7e, 0x007e,
-+ 0x127e, 0x2091, 0x8000, 0x2071, 0x0100, 0x1078, 0x569c, 0x2071,
-+ 0x0140, 0x7004, 0xa084, 0x4000, 0x0040, 0x35ca, 0x7003, 0x1000,
-+ 0x7003, 0x0000, 0x2001, 0x0001, 0x1078, 0x2025, 0x1078, 0x3591,
-+ 0x127f, 0x007f, 0x0e7f, 0x007c, 0x20a9, 0x0040, 0x20a1, 0x7dc0,
-+ 0x2099, 0x7c8e, 0x3304, 0x8007, 0x20a2, 0x9398, 0x94a0, 0x00f0,
-+ 0x35da, 0x007c, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, 0x7c00,
-+ 0x20a1, 0x020b, 0x20a9, 0x000c, 0x53a6, 0x007c, 0x20e1, 0x9080,
-+ 0x20e1, 0x4000, 0x2099, 0x7c80, 0x20a1, 0x020b, 0x20a9, 0x000c,
-+ 0x53a6, 0x007c, 0x0c7e, 0x007e, 0x2061, 0x0100, 0x810f, 0x2001,
-+ 0x772c, 0x2004, 0xa005, 0x00c0, 0x360b, 0x6030, 0xa084, 0x00ff,
-+ 0xa105, 0x0078, 0x360d, 0xa185, 0x00f7, 0x604a, 0x007f, 0x0c7f,
-+ 0x007c, 0x017e, 0x047e, 0x2001, 0x7752, 0x2004, 0xd0a4, 0x0040,
-+ 0x3624, 0xa006, 0x2020, 0x2009, 0x002a, 0x1078, 0x7641, 0x2001,
-+ 0x770c, 0x200c, 0xc195, 0x2102, 0x2019, 0x002a, 0x1078, 0x2293,
-+ 0x047f, 0x017f, 0x007c, 0x157e, 0x20a9, 0x00ff, 0x2009, 0x7820,
-+ 0xa006, 0x200a, 0x8108, 0x00f0, 0x3631, 0x157f, 0x007c, 0x0d7e,
-+ 0x037e, 0x157e, 0x137e, 0x147e, 0x2069, 0x7751, 0xa006, 0x6002,
-+ 0x6007, 0x0707, 0x600a, 0x600e, 0x6012, 0xa198, 0x2329, 0x231c,
-+ 0xa39c, 0x00ff, 0x6316, 0x20a9, 0x0004, 0xac98, 0x0006, 0x23a0,
-+ 0x40a4, 0x20a9, 0x0004, 0xac98, 0x000a, 0x23a0, 0x40a4, 0x603e,
-+ 0x6042, 0x604e, 0x6052, 0x6056, 0x605a, 0x605e, 0x6062, 0x6066,
-+ 0x606a, 0x606e, 0x6072, 0x6076, 0x607a, 0x607e, 0x6082, 0x6086,
-+ 0x608a, 0x608e, 0x6092, 0x6096, 0x609a, 0x609e, 0x61a2, 0x0d7e,
-+ 0x60a4, 0xa06d, 0x0040, 0x3676, 0x1078, 0x1340, 0x60a7, 0x0000,
-+ 0x60a8, 0xa06d, 0x0040, 0x367e, 0x1078, 0x1340, 0x60ab, 0x0000,
-+ 0x0d7f, 0xa006, 0x604a, 0x6810, 0x603a, 0x680c, 0x6046, 0x6814,
-+ 0xa084, 0x00ff, 0x6042, 0x147f, 0x137f, 0x157f, 0x037f, 0x0d7f,
-+ 0x007c, 0x127e, 0x2091, 0x8000, 0x6944, 0x6e48, 0xa684, 0x3fff,
-+ 0xa082, 0x4000, 0x00c8, 0x3737, 0xa18c, 0xff00, 0x810f, 0xa182,
-+ 0x00ff, 0x00c8, 0x373d, 0x2001, 0x770c, 0x2004, 0xa084, 0x0003,
-+ 0x00c0, 0x3720, 0xa188, 0x7820, 0x2104, 0xa065, 0x0040, 0x370e,
-+ 0x6004, 0xa084, 0x00ff, 0xa08e, 0x0006, 0x00c0, 0x3714, 0x60a4,
-+ 0xa00d, 0x0040, 0x36bf, 0x1078, 0x3a5c, 0x0040, 0x3708, 0x60a8,
-+ 0xa00d, 0x0040, 0x36d9, 0x1078, 0x3aac, 0x00c0, 0x36d9, 0x694c,
-+ 0xd1fc, 0x00c0, 0x36cf, 0x1078, 0x37d1, 0x0078, 0x3703, 0x1078,
-+ 0x37a2, 0x694c, 0xd1ec, 0x00c0, 0x3703, 0x1078, 0x3931, 0x0078,
-+ 0x3703, 0x694c, 0xa184, 0xa000, 0x0040, 0x36f3, 0xd1ec, 0x0040,
-+ 0x36ec, 0xd1fc, 0x0040, 0x36e8, 0x1078, 0x3942, 0x0078, 0x36ef,
-+ 0x1078, 0x3942, 0x0078, 0x36f3, 0xd1fc, 0x0040, 0x36f3, 0x1078,
-+ 0x37a2, 0x0078, 0x3703, 0x6050, 0xa00d, 0x0040, 0x36fe, 0x2d00,
-+ 0x200a, 0x6803, 0x0000, 0x6052, 0x0078, 0x3703, 0x2d00, 0x6052,
-+ 0x604e, 0x6803, 0x0000, 0x1078, 0x4960, 0xa006, 0x127f, 0x007c,
-+ 0x2001, 0x0005, 0x2009, 0x0000, 0x0078, 0x3741, 0x2001, 0x0028,
-+ 0x2009, 0x0000, 0x0078, 0x3741, 0xa082, 0x0006, 0x00c8, 0x3720,
-+ 0x60a0, 0xd0bc, 0x0040, 0x36b7, 0x2001, 0x0028, 0x0078, 0x3733,
-+ 0x2009, 0x770c, 0x210c, 0xd18c, 0x0040, 0x372a, 0x2001, 0x0004,
-+ 0x0078, 0x3733, 0xd184, 0x0040, 0x3731, 0x2001, 0x0004, 0x0078,
-+ 0x3733, 0x2001, 0x0029, 0x2009, 0x0000, 0x0078, 0x3741, 0x2001,
-+ 0x0029, 0x2009, 0x0000, 0x0078, 0x3741, 0x2001, 0x0029, 0x2009,
-+ 0x0000, 0xa005, 0x127f, 0x007c, 0x6944, 0x6e48, 0xa684, 0x3fff,
-+ 0xa082, 0x4000, 0x00c8, 0x3787, 0xa18c, 0xff00, 0x810f, 0xa182,
-+ 0x00ff, 0x00c8, 0x3777, 0xa188, 0x7820, 0x2104, 0xa065, 0x0040,
-+ 0x3777, 0x6004, 0xa084, 0x00ff, 0xa08e, 0x0006, 0x00c0, 0x377d,
-+ 0x684c, 0xd0ec, 0x0040, 0x376a, 0x1078, 0x3942, 0x1078, 0x37a2,
-+ 0x0078, 0x3772, 0x1078, 0x37a2, 0x684c, 0xd0fc, 0x0040, 0x3772,
-+ 0x1078, 0x3931, 0x1078, 0x398a, 0xa006, 0x0078, 0x378b, 0x2001,
-+ 0x0028, 0x2009, 0x0000, 0x0078, 0x378b, 0xa082, 0x0006, 0x0048,
-+ 0x3760, 0x2001, 0x0029, 0x2009, 0x0000, 0x0078, 0x378b, 0x2001,
-+ 0x0029, 0x2009, 0x0000, 0xa005, 0x007c, 0x127e, 0x2091, 0x8000,
-+ 0x6050, 0xa00d, 0x0040, 0x379b, 0x2d00, 0x200a, 0x6803, 0x0000,
-+ 0x6052, 0x127f, 0x007c, 0x2d00, 0x6052, 0x604e, 0x6803, 0x0000,
-+ 0x0078, 0x3799, 0x127e, 0x2091, 0x8000, 0x604c, 0xa005, 0x0040,
-+ 0x37ae, 0x6802, 0x2d00, 0x604e, 0x127f, 0x007c, 0x2d00, 0x6052,
-+ 0x604e, 0x6803, 0x0000, 0x0078, 0x37ac, 0x127e, 0x2091, 0x8000,
-+ 0x604c, 0xa06d, 0x0040, 0x37c3, 0x6800, 0xa005, 0x00c0, 0x37c1,
-+ 0x6052, 0x604e, 0xad05, 0x127f, 0x007c, 0x604c, 0xa06d, 0x0040,
-+ 0x37d0, 0x6800, 0xa005, 0x00c0, 0x37ce, 0x6052, 0x604e, 0xad05,
-+ 0x007c, 0x6803, 0x0000, 0x6084, 0xa00d, 0x0040, 0x37db, 0x2d00,
-+ 0x200a, 0x6086, 0x007c, 0x2d00, 0x6086, 0x6082, 0x0078, 0x37da,
-+ 0x127e, 0x0c7e, 0x027e, 0x2091, 0x8000, 0x6218, 0x2260, 0x6200,
-+ 0xa005, 0x0040, 0x37ee, 0xc285, 0x0078, 0x37ef, 0xc284, 0x6202,
-+ 0x027f, 0x0c7f, 0x127f, 0x007c, 0x127e, 0x0c7e, 0x2091, 0x8000,
-+ 0x6218, 0x2260, 0x6204, 0xa294, 0xff00, 0xa215, 0x6206, 0x0c7f,
-+ 0x127f, 0x007c, 0x127e, 0x0c7e, 0x2091, 0x8000, 0x6218, 0x2260,
-+ 0x6204, 0xa294, 0x00ff, 0x8007, 0xa215, 0x6206, 0x0c7f, 0x127f,
-+ 0x007c, 0x027e, 0xa182, 0x00ff, 0x0048, 0x381a, 0xa085, 0x0001,
-+ 0x0078, 0x3832, 0xa190, 0x7820, 0x2204, 0xa065, 0x00c0, 0x3831,
-+ 0x017e, 0x0d7e, 0x1078, 0x130c, 0x2d60, 0x0d7f, 0x017f, 0x0040,
-+ 0x3816, 0x2c00, 0x2012, 0x60a7, 0x0000, 0x60ab, 0x0000, 0x1078,
-+ 0x3637, 0xa006, 0x027f, 0x007c, 0x027e, 0xa182, 0x00ff, 0x0048,
-+ 0x383d, 0xa085, 0x0001, 0x0078, 0x384a, 0x0d7e, 0xa190, 0x7820,
-+ 0x2204, 0xa06d, 0x0040, 0x3848, 0x2013, 0x0000, 0x1078, 0x1340,
-+ 0x0d7f, 0xa006, 0x027f, 0x007c, 0x017e, 0xa182, 0x00ff, 0x0048,
-+ 0x3855, 0xa085, 0x0001, 0x0078, 0x385c, 0xa188, 0x7820, 0x2104,
-+ 0xa065, 0x0040, 0x3851, 0xa006, 0x017f, 0x007c, 0x0d7e, 0x157e,
-+ 0x137e, 0x147e, 0x600b, 0x0000, 0x600f, 0x0000, 0x6000, 0xc08c,
-+ 0x6002, 0x2069, 0x7c8e, 0x6808, 0x605e, 0x6810, 0x6062, 0x6138,
-+ 0xa10a, 0x0048, 0x3874, 0x603a, 0x6814, 0x6066, 0x2099, 0x7c96,
-+ 0xac88, 0x000a, 0x21a0, 0x20a9, 0x0004, 0x53a3, 0x2099, 0x7c9a,
-+ 0xac88, 0x0006, 0x21a0, 0x20a9, 0x0004, 0x53a3, 0x2069, 0x7cae,
-+ 0x6808, 0x606a, 0x690c, 0x616e, 0x6810, 0x6072, 0x6818, 0x6076,
-+ 0xa182, 0x0211, 0x00c8, 0x3898, 0x2009, 0x0008, 0x0078, 0x38c2,
-+ 0xa182, 0x0259, 0x00c8, 0x38a0, 0x2009, 0x0007, 0x0078, 0x38c2,
-+ 0xa182, 0x02c1, 0x00c8, 0x38a8, 0x2009, 0x0006, 0x0078, 0x38c2,
-+ 0xa182, 0x0349, 0x00c8, 0x38b0, 0x2009, 0x0005, 0x0078, 0x38c2,
-+ 0xa182, 0x0421, 0x00c8, 0x38b8, 0x2009, 0x0004, 0x0078, 0x38c2,
-+ 0xa182, 0x0581, 0x00c8, 0x38c0, 0x2009, 0x0003, 0x0078, 0x38c2,
-+ 0x2009, 0x0002, 0x6192, 0x147f, 0x137f, 0x157f, 0x0d7f, 0x007c,
-+ 0x0e7e, 0x2071, 0x7c8d, 0x2e04, 0x6896, 0x2071, 0x7c8e, 0x7004,
-+ 0x689a, 0x701c, 0x689e, 0x0e7f, 0x007c, 0x0d7e, 0x127e, 0x2091,
-+ 0x8000, 0x60a4, 0xa06d, 0x0040, 0x38f9, 0x6900, 0x81ff, 0x00c0,
-+ 0x390d, 0x6a04, 0xa282, 0x0010, 0x00c8, 0x3912, 0xad88, 0x0004,
-+ 0x20a9, 0x0010, 0x2104, 0xa086, 0xffff, 0x0040, 0x38f4, 0x8108,
-+ 0x00f0, 0x38ea, 0x1078, 0x12cd, 0x260a, 0x8210, 0x6a06, 0x0078,
-+ 0x390d, 0x1078, 0x130c, 0x0040, 0x3912, 0x2d00, 0x60a6, 0x6803,
-+ 0x0000, 0xad88, 0x0004, 0x20a9, 0x0010, 0x200b, 0xffff, 0x8108,
-+ 0x00f0, 0x3905, 0x6807, 0x0001, 0x6e12, 0xa085, 0x0001, 0x127f,
-+ 0x0d7f, 0x007c, 0xa006, 0x0078, 0x390f, 0x127e, 0x2091, 0x8000,
-+ 0x1078, 0x3a55, 0x00c0, 0x392f, 0x200b, 0xffff, 0x0d7e, 0x60a4,
-+ 0x2068, 0x6804, 0xa08a, 0x0002, 0x0048, 0x392a, 0x8001, 0x6806,
-+ 0x0078, 0x392e, 0x1078, 0x1340, 0x60a7, 0x0000, 0x0d7f, 0x127f,
-+ 0x007c, 0x127e, 0x2091, 0x8000, 0x1078, 0x3ac1, 0x0078, 0x393a,
-+ 0x1078, 0x378d, 0x1078, 0x39ce, 0x00c0, 0x3938, 0x1078, 0x398a,
-+ 0x127f, 0x007c, 0x0d7e, 0x127e, 0x2091, 0x8000, 0x60a8, 0xa06d,
-+ 0x0040, 0x3966, 0x6950, 0x81ff, 0x00c0, 0x397a, 0x6a54, 0xa282,
-+ 0x0010, 0x00c8, 0x3987, 0xad88, 0x0018, 0x20a9, 0x0010, 0x2104,
-+ 0xa086, 0xffff, 0x0040, 0x3961, 0x8108, 0x00f0, 0x3957, 0x1078,
-+ 0x12cd, 0x260a, 0x8210, 0x6a56, 0x0078, 0x397a, 0x1078, 0x130c,
-+ 0x0040, 0x3987, 0x2d00, 0x60aa, 0x6853, 0x0000, 0xad88, 0x0018,
-+ 0x20a9, 0x0010, 0x200b, 0xffff, 0x8108, 0x00f0, 0x3972, 0x6857,
-+ 0x0001, 0x6e62, 0x0078, 0x397e, 0x1078, 0x37d1, 0x1078, 0x3994,
-+ 0x00c0, 0x397c, 0xa085, 0x0001, 0x127f, 0x0d7f, 0x007c, 0xa006,
-+ 0x0078, 0x3984, 0x127e, 0x2091, 0x8000, 0x1078, 0x4960, 0x127f,
-+ 0x007c, 0xa01e, 0x0078, 0x3996, 0x2019, 0x0001, 0xa00e, 0x127e,
-+ 0x2091, 0x8000, 0x604c, 0x2068, 0x6000, 0xd0dc, 0x00c0, 0x39b4,
-+ 0x8dff, 0x0040, 0x39c9, 0x83ff, 0x0040, 0x39ac, 0x6848, 0xa606,
-+ 0x0040, 0x39b9, 0x0078, 0x39b4, 0x683c, 0xa406, 0x00c0, 0x39b4,
-+ 0x6840, 0xa506, 0x0040, 0x39b9, 0x2d08, 0x6800, 0x2068, 0x0078,
-+ 0x39a0, 0x6a00, 0x604c, 0xad06, 0x00c0, 0x39c1, 0x624e, 0x0078,
-+ 0x39c4, 0xa180, 0x0000, 0x2202, 0x82ff, 0x00c0, 0x39c9, 0x6152,
-+ 0x8dff, 0x127f, 0x007c, 0xa01e, 0x0078, 0x39d0, 0x2019, 0x0001,
-+ 0xa00e, 0x6080, 0x2068, 0x8dff, 0x0040, 0x39fc, 0x83ff, 0x0040,
-+ 0x39df, 0x6848, 0xa606, 0x0040, 0x39ec, 0x0078, 0x39e7, 0x683c,
-+ 0xa406, 0x00c0, 0x39e7, 0x6840, 0xa506, 0x0040, 0x39ec, 0x2d08,
-+ 0x6800, 0x2068, 0x0078, 0x39d3, 0x6a00, 0x6080, 0xad06, 0x00c0,
-+ 0x39f4, 0x6282, 0x0078, 0x39f7, 0xa180, 0x0000, 0x2202, 0x82ff,
-+ 0x00c0, 0x39fc, 0x6186, 0x8dff, 0x007c, 0x1078, 0x3a55, 0x00c0,
-+ 0x3a03, 0x2011, 0x0001, 0x1078, 0x3aa5, 0x00c0, 0x3a09, 0xa295,
-+ 0x0002, 0x007c, 0x1078, 0x3add, 0x0040, 0x3a12, 0x1078, 0x6b2b,
-+ 0x0078, 0x3a14, 0xa085, 0x0001, 0x007c, 0x1078, 0x3add, 0x0040,
-+ 0x3a1d, 0x1078, 0x6aba, 0x0078, 0x3a1f, 0xa085, 0x0001, 0x007c,
-+ 0x1078, 0x3add, 0x0040, 0x3a28, 0x1078, 0x6b00, 0x0078, 0x3a2a,
-+ 0xa085, 0x0001, 0x007c, 0x1078, 0x3add, 0x0040, 0x3a33, 0x1078,
-+ 0x6ad6, 0x0078, 0x3a35, 0xa085, 0x0001, 0x007c, 0x127e, 0x007e,
-+ 0x0d7e, 0x2091, 0x8000, 0x6080, 0xa06d, 0x0040, 0x3a4d, 0x6800,
-+ 0x007e, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x6c54,
-+ 0x1078, 0x3b92, 0x007f, 0x0078, 0x3a3c, 0x6083, 0x0000, 0x6087,
-+ 0x0000, 0x0d7f, 0x007f, 0x127f, 0x007c, 0x60a4, 0xa00d, 0x00c0,
-+ 0x3a5c, 0xa085, 0x0001, 0x007c, 0x0e7e, 0x2170, 0x7000, 0xa005,
-+ 0x00c0, 0x3a6f, 0x20a9, 0x0010, 0xae88, 0x0004, 0x2104, 0xa606,
-+ 0x0040, 0x3a6f, 0x8108, 0x00f0, 0x3a66, 0xa085, 0x0001, 0x0e7f,
-+ 0x007c, 0x0d7e, 0x127e, 0x2091, 0x8000, 0x60a4, 0xa06d, 0x00c0,
-+ 0x3a7f, 0x1078, 0x130c, 0x0040, 0x3a91, 0x2d00, 0x60a6, 0x6803,
-+ 0x0001, 0x6807, 0x0000, 0xad88, 0x0004, 0x20a9, 0x0010, 0x200b,
-+ 0xffff, 0x8108, 0x00f0, 0x3a87, 0xa085, 0x0001, 0x127f, 0x0d7f,
-+ 0x007c, 0xa006, 0x0078, 0x3a8e, 0x0d7e, 0x127e, 0x2091, 0x8000,
-+ 0x60a4, 0xa06d, 0x0040, 0x3aa2, 0x60a7, 0x0000, 0x1078, 0x1340,
-+ 0xa085, 0x0001, 0x127f, 0x0d7f, 0x007c, 0x60a8, 0xa00d, 0x00c0,
-+ 0x3aac, 0xa085, 0x0001, 0x007c, 0x0e7e, 0x2170, 0x7050, 0xa005,
-+ 0x00c0, 0x3abf, 0x20a9, 0x0010, 0xae88, 0x0018, 0x2104, 0xa606,
-+ 0x0040, 0x3abf, 0x8108, 0x00f0, 0x3ab6, 0xa085, 0x0001, 0x0e7f,
-+ 0x007c, 0x127e, 0x2091, 0x8000, 0x1078, 0x3aa5, 0x00c0, 0x3adb,
-+ 0x200b, 0xffff, 0x0d7e, 0x60a8, 0x2068, 0x6854, 0xa08a, 0x0002,
-+ 0x0048, 0x3ad6, 0x8001, 0x6856, 0x0078, 0x3ada, 0x1078, 0x1340,
-+ 0x60ab, 0x0000, 0x0d7f, 0x127f, 0x007c, 0x609c, 0xd0a4, 0x007c,
-+ 0x0f7e, 0x2079, 0x7751, 0x7804, 0xd0a4, 0x0040, 0x3b09, 0x157e,
-+ 0x0c7e, 0x20a9, 0x007f, 0x2009, 0x0000, 0x017e, 0x1078, 0x384c,
-+ 0x00c0, 0x3afd, 0x6004, 0xa084, 0xff00, 0x8007, 0xa086, 0x0006,
-+ 0x00c0, 0x3afd, 0x6000, 0xc0ed, 0x6002, 0x017f, 0x8108, 0x00f0,
-+ 0x3aed, 0x0c7f, 0x157f, 0x2009, 0x07d0, 0x2011, 0x3b0b, 0x1078,
-+ 0x4719, 0x0f7f, 0x007c, 0x2011, 0x3b0b, 0x1078, 0x4689, 0x157e,
-+ 0x0c7e, 0x20a9, 0x007f, 0x2009, 0x0000, 0x017e, 0x1078, 0x384c,
-+ 0x00c0, 0x3b37, 0x6000, 0xd0ec, 0x0040, 0x3b37, 0x047e, 0x62a0,
-+ 0xa294, 0x00ff, 0x8227, 0xa006, 0x2009, 0x0029, 0x1078, 0x7641,
-+ 0x6000, 0xc0e5, 0xc0ec, 0x6002, 0x2019, 0x0029, 0x1078, 0x4a7e,
-+ 0x1078, 0x49c1, 0x2009, 0x0000, 0x1078, 0x747b, 0x047f, 0x017f,
-+ 0x8108, 0x00f0, 0x3b15, 0x0c7f, 0x157f, 0x007c, 0x0c7e, 0x6018,
-+ 0x2060, 0x6000, 0xc0ec, 0x6002, 0x0c7f, 0x007c, 0x2071, 0x77ff,
-+ 0x7003, 0x0001, 0x7007, 0x0000, 0x7013, 0x0000, 0x7017, 0x0000,
-+ 0x701b, 0x0000, 0x701f, 0x0000, 0x704b, 0x0001, 0x704f, 0x0000,
-+ 0x705b, 0x0020, 0x705f, 0x0040, 0x707f, 0x0000, 0x007c, 0x0e7e,
-+ 0x2071, 0x77ff, 0x684c, 0xa005, 0x00c0, 0x3b6d, 0x7028, 0xc085,
-+ 0x702a, 0xa085, 0x0001, 0x0078, 0x3b90, 0x6a60, 0x7236, 0x6b64,
-+ 0x733a, 0x6868, 0x703e, 0x7076, 0x686c, 0x7042, 0x707a, 0x684c,
-+ 0x702e, 0x6844, 0x7032, 0x2009, 0x000d, 0x200a, 0x8007, 0x8006,
-+ 0x8006, 0xa08c, 0x003f, 0xa084, 0xffc0, 0xa210, 0x2100, 0xa319,
-+ 0x726e, 0x7372, 0x7028, 0xc084, 0x702a, 0x7007, 0x0001, 0xa006,
-+ 0x0e7f, 0x007c, 0x0e7e, 0x6838, 0xd0fc, 0x00c0, 0x3be3, 0x6804,
-+ 0xa00d, 0x0040, 0x3bb1, 0x0d7e, 0x0e7e, 0x2071, 0x7700, 0x027e,
-+ 0xa016, 0x702c, 0x2168, 0x6904, 0x206a, 0x8210, 0x2d00, 0x81ff,
-+ 0x00c0, 0x3ba2, 0x702e, 0x70a0, 0xa200, 0x70a2, 0x027f, 0x0e7f,
-+ 0x0d7f, 0x2071, 0x77ff, 0x701c, 0xa005, 0x00c0, 0x3bf4, 0x0068,
-+ 0x3bf2, 0x2071, 0x7751, 0x7004, 0xd09c, 0x0040, 0x3bf2, 0x6934,
-+ 0xa186, 0x0103, 0x00c0, 0x3c05, 0x6948, 0x6844, 0xa105, 0x00c0,
-+ 0x3be5, 0x2009, 0x8020, 0x2071, 0x0000, 0x7018, 0xd084, 0x00c0,
-+ 0x3bf2, 0x7122, 0x683c, 0x7026, 0x6840, 0x702a, 0x701b, 0x0001,
-+ 0x2091, 0x4080, 0x2071, 0x7700, 0x702c, 0x206a, 0x2d00, 0x702e,
-+ 0x70a0, 0x8000, 0x70a2, 0x0e7f, 0x007c, 0x6844, 0xa086, 0x0100,
-+ 0x00c0, 0x3bf2, 0x6868, 0xa005, 0x00c0, 0x3bf2, 0x2009, 0x8020,
-+ 0x0078, 0x3bcb, 0x2071, 0x77ff, 0x2d08, 0x206b, 0x0000, 0x7010,
-+ 0x8000, 0x7012, 0x7018, 0xa06d, 0x711a, 0x0040, 0x3c02, 0x6902,
-+ 0x0078, 0x3c03, 0x711e, 0x0078, 0x3be3, 0xa18c, 0x00ff, 0xa186,
-+ 0x0017, 0x0040, 0x3c13, 0xa186, 0x001e, 0x0040, 0x3c13, 0xa18e,
-+ 0x001f, 0x00c0, 0x3bf2, 0x684c, 0xd0cc, 0x0040, 0x3bf2, 0x6850,
-+ 0xa084, 0x00ff, 0xa086, 0x0001, 0x00c0, 0x3bf2, 0x2009, 0x8021,
-+ 0x0078, 0x3bcb, 0x007e, 0x6837, 0x0103, 0x20a9, 0x001c, 0xad80,
-+ 0x0011, 0x20a0, 0x2001, 0x0000, 0x40a4, 0x007f, 0x684a, 0x6952,
-+ 0x007c, 0x2071, 0x77ff, 0x7004, 0x0079, 0x3c36, 0x3c3e, 0x3c4d,
-+ 0x3cdd, 0x3cde, 0x3cee, 0x3cf4, 0x3c3f, 0x3ccb, 0x007c, 0x127e,
-+ 0x2091, 0x8000, 0x0068, 0x3c4c, 0x2009, 0x000d, 0x7030, 0x200a,
-+ 0x2091, 0x4080, 0x7007, 0x0001, 0x127f, 0x701c, 0xa06d, 0x0040,
-+ 0x3cca, 0x0e7e, 0x2071, 0x7751, 0x7004, 0xd09c, 0x0040, 0x3cac,
-+ 0x6934, 0xa186, 0x0103, 0x00c0, 0x3c82, 0x6948, 0x6844, 0xa105,
-+ 0x00c0, 0x3c9f, 0x2009, 0x8020, 0x127e, 0x2091, 0x8000, 0x0068,
-+ 0x3c7e, 0x2071, 0x0000, 0x7018, 0xd084, 0x00c0, 0x3c7e, 0x7122,
-+ 0x683c, 0x7026, 0x6840, 0x702a, 0x701b, 0x0001, 0x2091, 0x4080,
-+ 0x127f, 0x0e7f, 0x1078, 0x3d27, 0x0078, 0x3cca, 0x127f, 0x0e7f,
-+ 0x0078, 0x3cca, 0xa18c, 0x00ff, 0xa186, 0x0017, 0x0040, 0x3c90,
-+ 0xa186, 0x001e, 0x0040, 0x3c90, 0xa18e, 0x001f, 0x00c0, 0x3cac,
-+ 0x684c, 0xd0cc, 0x0040, 0x3cac, 0x6850, 0xa084, 0x00ff, 0xa086,
-+ 0x0001, 0x00c0, 0x3cac, 0x2009, 0x8021, 0x0078, 0x3c64, 0x6844,
-+ 0xa086, 0x0100, 0x00c0, 0x3cac, 0x6868, 0xa005, 0x00c0, 0x3cac,
-+ 0x2009, 0x8020, 0x0078, 0x3c64, 0x0e7f, 0x1078, 0x3d3b, 0x0040,
-+ 0x3cca, 0x700f, 0x0001, 0x6934, 0xa184, 0x00ff, 0xa086, 0x0003,
-+ 0x00c0, 0x3cc1, 0x810f, 0xa18c, 0x00ff, 0x8101, 0x0040, 0x3cc1,
-+ 0x710e, 0x7007, 0x0003, 0x1078, 0x3d5b, 0x7050, 0xa086, 0x0100,
-+ 0x0040, 0x3cde, 0x007c, 0x701c, 0xa06d, 0x0040, 0x3cdc, 0x1078,
-+ 0x3d3b, 0x0040, 0x3cdc, 0x7007, 0x0003, 0x1078, 0x3d5b, 0x7050,
-+ 0xa086, 0x0100, 0x0040, 0x3cde, 0x007c, 0x007c, 0x7050, 0xa09e,
-+ 0x0100, 0x00c0, 0x3ce7, 0x7007, 0x0004, 0x0078, 0x3cee, 0xa086,
-+ 0x0200, 0x00c0, 0x3ced, 0x7007, 0x0005, 0x007c, 0x1078, 0x3cf5,
-+ 0x7006, 0x1078, 0x3d27, 0x007c, 0x007c, 0x702c, 0x7130, 0x8108,
-+ 0xa102, 0x0048, 0x3d02, 0xa00e, 0x7034, 0x706e, 0x7038, 0x7072,
-+ 0x0078, 0x3d0c, 0x706c, 0xa080, 0x0040, 0x706e, 0x00c8, 0x3d0c,
-+ 0x7070, 0xa081, 0x0000, 0x7072, 0x7132, 0x700c, 0x8001, 0x700e,
-+ 0x00c0, 0x3d20, 0x127e, 0x2091, 0x8000, 0x0068, 0x3d23, 0x2001,
-+ 0x000d, 0x2102, 0x2091, 0x4080, 0x2001, 0x0001, 0x127f, 0x007c,
-+ 0x2001, 0x0007, 0x007c, 0x2001, 0x0006, 0x127f, 0x007c, 0x701c,
-+ 0xa06d, 0x0040, 0x3d3a, 0x127e, 0x2091, 0x8000, 0x7010, 0x8001,
-+ 0x7012, 0x2d04, 0x701e, 0xa005, 0x00c0, 0x3d37, 0x701a, 0x127f,
-+ 0x1078, 0x1340, 0x007c, 0x2019, 0x000d, 0x2304, 0x230c, 0xa10e,
-+ 0x0040, 0x3d4a, 0x2304, 0x230c, 0xa10e, 0x0040, 0x3d4a, 0xa006,
-+ 0x0078, 0x3d5a, 0x732c, 0x8319, 0x7130, 0xa102, 0x00c0, 0x3d54,
-+ 0x2300, 0xa005, 0x0078, 0x3d5a, 0x0048, 0x3d59, 0xa302, 0x0078,
-+ 0x3d5a, 0x8002, 0x007c, 0x2d00, 0x7026, 0xa080, 0x000d, 0x7056,
-+ 0x7053, 0x0000, 0x127e, 0x2091, 0x8000, 0x2009, 0x7959, 0x2104,
-+ 0xc08d, 0x200a, 0x127f, 0x1078, 0x1391, 0x007c, 0x2071, 0x77cd,
-+ 0x7003, 0x0000, 0x7007, 0x0000, 0x700f, 0x0000, 0x702b, 0x0001,
-+ 0x704f, 0x0000, 0x7053, 0x0001, 0x705f, 0x0020, 0x7063, 0x0040,
-+ 0x7083, 0x0000, 0x708b, 0x0000, 0x708f, 0x0001, 0x70bf, 0x0000,
-+ 0x007c, 0x0e7e, 0x2071, 0x77cd, 0x6848, 0xa005, 0x00c0, 0x3d97,
-+ 0x7028, 0xc085, 0x702a, 0xa085, 0x0001, 0x0078, 0x3dbc, 0x6a50,
-+ 0x7236, 0x6b54, 0x733a, 0x6858, 0x703e, 0x707a, 0x685c, 0x7042,
-+ 0x707e, 0x6848, 0x702e, 0x6840, 0x7032, 0x2009, 0x000c, 0x200a,
-+ 0x8007, 0x8006, 0x8006, 0xa08c, 0x003f, 0xa084, 0xffc0, 0xa210,
-+ 0x2100, 0xa319, 0x7272, 0x7376, 0x7028, 0xc084, 0x702a, 0x7007,
-+ 0x0001, 0x700f, 0x0000, 0xa006, 0x0e7f, 0x007c, 0x2b78, 0x2071,
-+ 0x77cd, 0x7004, 0x1079, 0x3e1c, 0x700c, 0x0079, 0x3dc7, 0x3dcc,
-+ 0x3dc1, 0x3dc1, 0x3dc1, 0x3dc1, 0x007c, 0x700c, 0x0079, 0x3dd0,
-+ 0x3dd5, 0x3e1a, 0x3e1a, 0x3e1b, 0x3e1b, 0x7830, 0x7930, 0xa106,
-+ 0x0040, 0x3ddf, 0x7830, 0x7930, 0xa106, 0x00c0, 0x3e05, 0x7030,
-+ 0xa10a, 0x0040, 0x3e05, 0x00c8, 0x3de7, 0x712c, 0xa10a, 0xa18a,
-+ 0x0002, 0x00c8, 0x3e06, 0x1078, 0x130c, 0x0040, 0x3e05, 0x2d00,
-+ 0x705a, 0x7063, 0x0040, 0x2001, 0x0003, 0x7057, 0x0000, 0x127e,
-+ 0x007e, 0x2091, 0x8000, 0x2009, 0x7959, 0x2104, 0xc085, 0x200a,
-+ 0x007f, 0x700e, 0x127f, 0x1078, 0x1391, 0x007c, 0x1078, 0x130c,
-+ 0x0040, 0x3e05, 0x2d00, 0x705a, 0x1078, 0x130c, 0x00c0, 0x3e12,
-+ 0x0078, 0x3df1, 0x2d00, 0x7086, 0x7063, 0x0080, 0x2001, 0x0004,
-+ 0x0078, 0x3df5, 0x007c, 0x007c, 0x3e2d, 0x3e2e, 0x3e65, 0x3e66,
-+ 0x3e1a, 0x3e9c, 0x3ea1, 0x3ed8, 0x3ed9, 0x3ef4, 0x3ef5, 0x3ef6,
-+ 0x3ef7, 0x3ef8, 0x3ef9, 0x3f62, 0x3f8c, 0x007c, 0x700c, 0x0079,
-+ 0x3e31, 0x3e36, 0x3e39, 0x3e49, 0x3e64, 0x3e64, 0x1078, 0x3dcd,
-+ 0x007c, 0x127e, 0x8001, 0x700e, 0x7058, 0x007e, 0x1078, 0x426e,
-+ 0x0040, 0x3e46, 0x2091, 0x8000, 0x1078, 0x3dcd, 0x0d7f, 0x0078,
-+ 0x3e52, 0x127e, 0x8001, 0x700e, 0x1078, 0x426e, 0x7058, 0x2068,
-+ 0x7084, 0x705a, 0x6803, 0x0000, 0x6807, 0x0000, 0x6834, 0xa084,
-+ 0x00ff, 0xa08a, 0x0020, 0x00c8, 0x3e61, 0x1079, 0x3e7c, 0x127f,
-+ 0x007c, 0x127f, 0x1078, 0x3efa, 0x007c, 0x007c, 0x007c, 0x0e7e,
-+ 0x2071, 0x77cd, 0x700c, 0x0079, 0x3e6d, 0x3e72, 0x3e72, 0x3e72,
-+ 0x3e74, 0x3e78, 0x0e7f, 0x007c, 0x700f, 0x0001, 0x0078, 0x3e7a,
-+ 0x700f, 0x0002, 0x0e7f, 0x007c, 0x3efa, 0x3efa, 0x3f16, 0x3efa,
-+ 0x4001, 0x3efa, 0x3efa, 0x3efa, 0x3efa, 0x3efa, 0x3f16, 0x4040,
-+ 0x408a, 0x40e3, 0x40f7, 0x3efa, 0x3efa, 0x3f32, 0x3f16, 0x3efa,
-+ 0x3efa, 0x3f48, 0x4182, 0x41a0, 0x3efa, 0x3f32, 0x3efa, 0x3efa,
-+ 0x3efa, 0x3efa, 0x3f48, 0x41a0, 0x7020, 0x2068, 0x1078, 0x1340,
-+ 0x007c, 0x700c, 0x0079, 0x3ea4, 0x3ea9, 0x3eac, 0x3ebc, 0x3ed7,
-+ 0x3ed7, 0x1078, 0x3dcd, 0x007c, 0x127e, 0x8001, 0x700e, 0x7058,
-+ 0x007e, 0x1078, 0x426e, 0x0040, 0x3eb9, 0x2091, 0x8000, 0x1078,
-+ 0x3dcd, 0x0d7f, 0x0078, 0x3ec5, 0x127e, 0x8001, 0x700e, 0x1078,
-+ 0x426e, 0x7058, 0x2068, 0x7084, 0x705a, 0x6803, 0x0000, 0x6807,
-+ 0x0000, 0x6834, 0xa084, 0x00ff, 0xa08a, 0x001a, 0x00c8, 0x3ed4,
-+ 0x1079, 0x3eda, 0x127f, 0x007c, 0x127f, 0x1078, 0x3efa, 0x007c,
-+ 0x007c, 0x007c, 0x3efa, 0x3f16, 0x3feb, 0x3efa, 0x3f16, 0x3efa,
-+ 0x3f16, 0x3f16, 0x3efa, 0x3f16, 0x3feb, 0x3f16, 0x3f16, 0x3f16,
-+ 0x3f16, 0x3f16, 0x3efa, 0x3f16, 0x3feb, 0x3efa, 0x3efa, 0x3f16,
-+ 0x3efa, 0x3efa, 0x3efa, 0x3f16, 0x007c, 0x007c, 0x007c, 0x007c,
-+ 0x007c, 0x007c, 0x7007, 0x0001, 0x6838, 0xa084, 0x00ff, 0xc0d5,
-+ 0x683a, 0x127e, 0x2091, 0x8000, 0x1078, 0x3b92, 0x127f, 0x007c,
-+ 0x7007, 0x0001, 0x6838, 0xa084, 0x00ff, 0xc0e5, 0x683a, 0x127e,
-+ 0x2091, 0x8000, 0x1078, 0x3b92, 0x127f, 0x007c, 0x7007, 0x0001,
-+ 0x6838, 0xa084, 0x00ff, 0xc0ed, 0x683a, 0x127e, 0x2091, 0x8000,
-+ 0x1078, 0x3b92, 0x127f, 0x007c, 0x7007, 0x0001, 0x6838, 0xa084,
-+ 0x00ff, 0xc0dd, 0x683a, 0x127e, 0x2091, 0x8000, 0x1078, 0x3b92,
-+ 0x127f, 0x007c, 0x6834, 0x8007, 0xa084, 0x00ff, 0x0040, 0x3f08,
-+ 0x8001, 0x00c0, 0x3f3f, 0x7007, 0x0001, 0x0078, 0x3fc8, 0x7007,
-+ 0x0006, 0x7012, 0x2d00, 0x7016, 0x701a, 0x704b, 0x3fc8, 0x007c,
-+ 0x2d00, 0x7016, 0x701a, 0x20a9, 0x0004, 0xa080, 0x0024, 0x2098,
-+ 0x20a1, 0x77f8, 0x53a3, 0x6858, 0x7012, 0xa082, 0x0401, 0x00c8,
-+ 0x3f24, 0x6884, 0xa08a, 0x0003, 0x00c8, 0x3f24, 0xa080, 0x3fb9,
-+ 0x2004, 0x70c6, 0x7010, 0xa015, 0x0040, 0x3fac, 0x1078, 0x130c,
-+ 0x00c0, 0x3f6d, 0x7007, 0x000f, 0x007c, 0x2d00, 0x7022, 0x70c4,
-+ 0x2060, 0x6000, 0x6836, 0x6004, 0xad00, 0x7096, 0x6008, 0xa20a,
-+ 0x00c8, 0x3f7c, 0xa00e, 0x2200, 0x7112, 0x620c, 0x8003, 0x800b,
-+ 0xa296, 0x0004, 0x0040, 0x3f85, 0xa108, 0x719a, 0x810b, 0x719e,
-+ 0xae90, 0x0022, 0x1078, 0x1377, 0x7090, 0xa08e, 0x0100, 0x0040,
-+ 0x3fa0, 0xa086, 0x0200, 0x0040, 0x3f98, 0x7007, 0x0010, 0x007c,
-+ 0x7020, 0x2068, 0x1078, 0x1340, 0x7014, 0x2068, 0x0078, 0x3f24,
-+ 0x7020, 0x2068, 0x7018, 0x6802, 0x6807, 0x0000, 0x2d08, 0x2068,
-+ 0x6906, 0x711a, 0x0078, 0x3f62, 0x7014, 0x2068, 0x7007, 0x0001,
-+ 0x6834, 0xa084, 0x00ff, 0xa086, 0x001e, 0x0040, 0x41bd, 0x0078,
-+ 0x3fc8, 0x3fbc, 0x3fc0, 0x3fc4, 0x0002, 0x0011, 0x0007, 0x0004,
-+ 0x000a, 0x000f, 0x0005, 0x0006, 0x0012, 0x000f, 0x0005, 0x0006,
-+ 0x2009, 0x772c, 0x210c, 0x81ff, 0x00c0, 0x3fe5, 0x6838, 0xa084,
-+ 0x00ff, 0x683a, 0x6853, 0x0000, 0x1078, 0x3691, 0x00c0, 0x3fd9,
-+ 0x007c, 0x1078, 0x3c22, 0x127e, 0x2091, 0x8000, 0x1078, 0x6c54,
-+ 0x1078, 0x3b92, 0x127f, 0x0078, 0x3fd8, 0x2001, 0x0028, 0x2009,
-+ 0x0000, 0x0078, 0x3fd9, 0x7018, 0x6802, 0x2d08, 0x2068, 0x6906,
-+ 0x711a, 0x7010, 0x8001, 0x7012, 0x0040, 0x3ffa, 0x7007, 0x0006,
-+ 0x0078, 0x4000, 0x7014, 0x2068, 0x7007, 0x0001, 0x7048, 0x107a,
-+ 0x007c, 0x7007, 0x0001, 0x6944, 0x810f, 0xa18c, 0x00ff, 0x6848,
-+ 0xa084, 0x00ff, 0x20a9, 0x0001, 0xa096, 0x0001, 0x0040, 0x402a,
-+ 0x2009, 0x0000, 0x20a9, 0x007e, 0xa096, 0x0002, 0x0040, 0x402a,
-+ 0xa005, 0x00c0, 0x403d, 0x6944, 0x810f, 0xa18c, 0x00ff, 0x1078,
-+ 0x384c, 0x00c0, 0x403d, 0x067e, 0x6e50, 0x1078, 0x3915, 0x067f,
-+ 0x0078, 0x403d, 0x047e, 0x2011, 0x770c, 0x2224, 0xc484, 0xc48c,
-+ 0x2412, 0x047f, 0x0c7e, 0x1078, 0x384c, 0x00c0, 0x4039, 0x1078,
-+ 0x3a94, 0x8108, 0x00f0, 0x4033, 0x0c7f, 0x1078, 0x1340, 0x007c,
-+ 0x127e, 0x2091, 0x8000, 0x7007, 0x0001, 0x2001, 0x7752, 0x2004,
-+ 0xd0a4, 0x0040, 0x4081, 0x2009, 0x0000, 0x1078, 0x428a, 0x6100,
-+ 0xd184, 0x0040, 0x4066, 0x6858, 0xa084, 0x00ff, 0x00c0, 0x4084,
-+ 0x6000, 0xd084, 0x0040, 0x4081, 0x6004, 0xa005, 0x00c0, 0x4087,
-+ 0x6003, 0x0000, 0x600b, 0x0000, 0x0078, 0x407e, 0x2011, 0x0001,
-+ 0x6860, 0xa005, 0x00c0, 0x406e, 0x2001, 0x001e, 0x8000, 0x6016,
-+ 0x6858, 0xa084, 0x00ff, 0x0040, 0x4081, 0x6006, 0x6858, 0x8007,
-+ 0xa084, 0x00ff, 0x0040, 0x4081, 0x600a, 0x6202, 0x127f, 0x0078,
-+ 0x425d, 0x127f, 0x0078, 0x4255, 0x127f, 0x0078, 0x424d, 0x127f,
-+ 0x0078, 0x4251, 0x127e, 0x2091, 0x8000, 0x7007, 0x0001, 0x2001,
-+ 0x7752, 0x2004, 0xd0a4, 0x0040, 0x40e0, 0x2009, 0x0000, 0x1078,
-+ 0x428a, 0x6000, 0xa084, 0x0001, 0x0040, 0x40e0, 0x6204, 0x6308,
-+ 0x6c48, 0xa484, 0x0003, 0x0040, 0x40b8, 0x6958, 0xa18c, 0x00ff,
-+ 0x8001, 0x00c0, 0x40b1, 0x2100, 0xa210, 0x0048, 0x40dd, 0x0078,
-+ 0x40b8, 0x8001, 0x00c0, 0x40dd, 0x2100, 0xa212, 0x0048, 0x40dd,
-+ 0xa484, 0x000c, 0x0040, 0x40d2, 0x6958, 0x810f, 0xa18c, 0x00ff,
-+ 0xa082, 0x0004, 0x00c0, 0x40ca, 0x2100, 0xa318, 0x0048, 0x40dd,
-+ 0x0078, 0x40d2, 0xa082, 0x0004, 0x00c0, 0x40dd, 0x2100, 0xa31a,
-+ 0x0048, 0x40dd, 0x6860, 0xa005, 0x0040, 0x40d8, 0x8000, 0x6016,
-+ 0x6206, 0x630a, 0x127f, 0x0078, 0x425d, 0x127f, 0x0078, 0x4259,
-+ 0x127f, 0x0078, 0x4255, 0x127e, 0x2091, 0x8000, 0x7007, 0x0001,
-+ 0x2009, 0x0000, 0x1078, 0x428a, 0x6308, 0x8318, 0x0048, 0x40f4,
-+ 0x630a, 0x127f, 0x0078, 0x426b, 0x127f, 0x0078, 0x4259, 0x127e,
-+ 0x0c7e, 0x2091, 0x8000, 0x7007, 0x0001, 0x684c, 0xd0ac, 0x0040,
-+ 0x410d, 0x2009, 0x0000, 0x0c7e, 0x1078, 0x4727, 0x6000, 0x2001,
-+ 0xfcff, 0x6002, 0x0c7f, 0x0078, 0x4144, 0x6858, 0xa005, 0x0040,
-+ 0x4159, 0x685c, 0xa065, 0x0040, 0x4155, 0x2001, 0x772c, 0x2004,
-+ 0xa005, 0x0040, 0x411f, 0x1078, 0x6bb6, 0x0078, 0x4125, 0x6013,
-+ 0x0400, 0x2009, 0x0041, 0x1078, 0x5d41, 0x6958, 0xa18c, 0xe600,
-+ 0xa186, 0x2000, 0x0040, 0x413c, 0xa186, 0x0400, 0x0040, 0x413c,
-+ 0x2009, 0x0000, 0x0c7e, 0x1078, 0x4727, 0x6000, 0xa084, 0xfdff,
-+ 0x6002, 0x0c7f, 0x0078, 0x4144, 0x027e, 0x2009, 0x0000, 0x2011,
-+ 0xfdff, 0x1078, 0x47d0, 0x027f, 0x684c, 0xd0c4, 0x0040, 0x4151,
-+ 0x2009, 0x0000, 0x1078, 0x4727, 0x6008, 0x8000, 0x0048, 0x4151,
-+ 0x600a, 0x0c7f, 0x127f, 0x0078, 0x425d, 0x0c7f, 0x127f, 0x0078,
-+ 0x4255, 0x6954, 0xa186, 0x002a, 0x00c0, 0x4165, 0x2001, 0x770c,
-+ 0x200c, 0xc194, 0x2102, 0x0078, 0x4144, 0xa186, 0x0020, 0x0040,
-+ 0x417a, 0xa186, 0x0029, 0x00c0, 0x4155, 0x6944, 0xa18c, 0xff00,
-+ 0x810f, 0x1078, 0x384c, 0x00c0, 0x4144, 0x6000, 0xc0e4, 0x6002,
-+ 0x0078, 0x4144, 0x685c, 0xa065, 0x0040, 0x4155, 0x6017, 0x0014,
-+ 0x0078, 0x4144, 0x2009, 0x0000, 0x1078, 0x428a, 0x6000, 0xa084,
-+ 0x0001, 0x0040, 0x419c, 0x2091, 0x8000, 0x6204, 0x8210, 0x0048,
-+ 0x4196, 0x6206, 0x2091, 0x8001, 0x0078, 0x426b, 0x2091, 0x8001,
-+ 0x6853, 0x0016, 0x0078, 0x4264, 0x6853, 0x0007, 0x0078, 0x4264,
-+ 0x6834, 0x8007, 0xa084, 0x00ff, 0x00c0, 0x41aa, 0x1078, 0x3f08,
-+ 0x0078, 0x41bc, 0x2030, 0x8001, 0x00c0, 0x41b4, 0x7007, 0x0001,
-+ 0x1078, 0x41bd, 0x0078, 0x41bc, 0x7007, 0x0006, 0x7012, 0x2d00,
-+ 0x7016, 0x701a, 0x704b, 0x41bd, 0x007c, 0x0e7e, 0x2009, 0x772c,
-+ 0x210c, 0x81ff, 0x00c0, 0x423f, 0x2009, 0x770c, 0x210c, 0xd194,
-+ 0x00c0, 0x4249, 0x6848, 0x2070, 0xae82, 0x7e00, 0x0048, 0x422e,
-+ 0x2001, 0x7715, 0x2004, 0xae02, 0x00c8, 0x422e, 0x2009, 0x0000,
-+ 0x1078, 0x428a, 0x6100, 0xa184, 0x0001, 0x0040, 0x4214, 0xa184,
-+ 0x0100, 0x00c0, 0x4232, 0xa184, 0x0200, 0x00c0, 0x4236, 0x601c,
-+ 0xa005, 0x00c0, 0x423a, 0x711c, 0xa186, 0x0006, 0x00c0, 0x4219,
-+ 0x6853, 0x0000, 0x6803, 0x0000, 0x2d08, 0x127e, 0x2091, 0x8000,
-+ 0x7010, 0xa005, 0x00c0, 0x420b, 0x7112, 0x7018, 0xa065, 0x0040,
-+ 0x423e, 0x6000, 0xd0e4, 0x00c0, 0x4243, 0x2e60, 0x1078, 0x4730,
-+ 0x127f, 0x0e7f, 0x007c, 0x2068, 0x6800, 0xa005, 0x00c0, 0x420b,
-+ 0x6902, 0x127f, 0x0e7f, 0x007c, 0x0e7f, 0x6853, 0x0006, 0x0078,
-+ 0x4264, 0x6944, 0xa18c, 0xff00, 0x810f, 0x1078, 0x384c, 0x00c0,
-+ 0x4244, 0x6000, 0xd0e4, 0x00c0, 0x4244, 0x711c, 0xa186, 0x0007,
-+ 0x00c0, 0x422e, 0x6853, 0x0002, 0x0078, 0x4246, 0x6853, 0x0008,
-+ 0x0078, 0x4246, 0x6853, 0x000e, 0x0078, 0x4246, 0x6853, 0x0017,
-+ 0x0078, 0x4246, 0x6853, 0x0035, 0x0078, 0x4246, 0x127f, 0x6853,
-+ 0x0028, 0x0078, 0x4246, 0x127f, 0x6853, 0x0029, 0x0e7f, 0x0078,
-+ 0x4264, 0x6853, 0x002a, 0x0078, 0x4246, 0x2009, 0x003e, 0x0078,
-+ 0x425f, 0x2009, 0x0004, 0x0078, 0x425f, 0x2009, 0x0006, 0x0078,
-+ 0x425f, 0x2009, 0x0016, 0x0078, 0x425f, 0x2009, 0x0001, 0x6854,
-+ 0xa084, 0xff00, 0xa105, 0x6856, 0x2091, 0x8000, 0x1078, 0x3b92,
-+ 0x2091, 0x8001, 0x007c, 0x1078, 0x1340, 0x007c, 0x702c, 0x7130,
-+ 0x8108, 0xa102, 0x0048, 0x427b, 0xa00e, 0x7034, 0x7072, 0x7038,
-+ 0x7076, 0x0078, 0x4287, 0x7070, 0xa080, 0x0040, 0x7072, 0x00c8,
-+ 0x4287, 0x7074, 0xa081, 0x0000, 0x7076, 0xa085, 0x0001, 0x7932,
-+ 0x7132, 0x007c, 0x0d7e, 0x1078, 0x4727, 0x0d7f, 0x007c, 0x0d7e,
-+ 0x2011, 0x0004, 0x2204, 0xa085, 0x8002, 0x2012, 0x0d7f, 0x007c,
-+ 0x20e1, 0x0002, 0x3d08, 0x20e1, 0x2000, 0x3d00, 0xa084, 0x7000,
-+ 0x0040, 0x42a6, 0xa086, 0x1000, 0x00c0, 0x42c2, 0x20e1, 0x0004,
-+ 0x3d60, 0xd1bc, 0x00c0, 0x42ad, 0x3e60, 0xac84, 0x0007, 0x00c0,
-+ 0x42c2, 0xac82, 0x7e00, 0x0048, 0x42c2, 0x6854, 0xac02, 0x00c8,
-+ 0x42c2, 0x2009, 0x0047, 0x1078, 0x5d41, 0x7a1c, 0xd284, 0x00c0,
-+ 0x4298, 0x007c, 0xa016, 0x1078, 0x156a, 0x0078, 0x42bd, 0x157e,
-+ 0x137e, 0x147e, 0x20e1, 0x3000, 0x3d20, 0x3e28, 0xa584, 0x0070,
-+ 0x00c0, 0x42f0, 0xa484, 0x7000, 0xa086, 0x1000, 0x00c0, 0x42f0,
-+ 0x1078, 0x42fd, 0x0040, 0x42f0, 0x20e1, 0x3000, 0x7828, 0x7828,
-+ 0x1078, 0x431b, 0x147f, 0x137f, 0x157f, 0x2009, 0x793e, 0x2104,
-+ 0xa005, 0x00c0, 0x42ec, 0x007c, 0x1078, 0x4d96, 0x0078, 0x42eb,
-+ 0x1078, 0x7674, 0x1078, 0x42fd, 0x20e1, 0x3000, 0x7828, 0x7828,
-+ 0x147f, 0x137f, 0x157f, 0x0078, 0x42eb, 0xa484, 0x01ff, 0x687a,
-+ 0xa005, 0x0040, 0x430f, 0xa080, 0x001f, 0xa084, 0x03f8, 0x80ac,
-+ 0x20e1, 0x1000, 0x2ea0, 0x2099, 0x020a, 0x53a5, 0x007c, 0x20a9,
-+ 0x000c, 0x20e1, 0x1000, 0x2ea0, 0x2099, 0x020a, 0x53a5, 0xa085,
-+ 0x0001, 0x0078, 0x430e, 0x7000, 0xa084, 0xff00, 0xa08c, 0xf000,
-+ 0x8007, 0xa196, 0x0000, 0x00c0, 0x4328, 0x0078, 0x449c, 0x007c,
-+ 0xa196, 0x2000, 0x00c0, 0x4339, 0x6900, 0xa18e, 0x0001, 0x00c0,
-+ 0x4335, 0x1078, 0x2ec1, 0x0078, 0x4327, 0x1078, 0x4341, 0x0078,
-+ 0x4327, 0xa196, 0x8000, 0x00c0, 0x4327, 0x1078, 0x4522, 0x0078,
-+ 0x4327, 0x0c7e, 0x7110, 0xa18c, 0xff00, 0x810f, 0xa196, 0x0001,
-+ 0x0040, 0x434e, 0xa196, 0x0023, 0x00c0, 0x4443, 0xa08e, 0x0023,
-+ 0x00c0, 0x437f, 0x1078, 0x4599, 0x0040, 0x4443, 0x7124, 0x610a,
-+ 0x7030, 0xa08e, 0x0200, 0x00c0, 0x4367, 0x7034, 0xa005, 0x00c0,
-+ 0x4443, 0x2009, 0x0015, 0x1078, 0x5d41, 0x0078, 0x4443, 0xa08e,
-+ 0x0210, 0x00c0, 0x4371, 0x2009, 0x0015, 0x1078, 0x5d41, 0x0078,
-+ 0x4443, 0xa08e, 0x0100, 0x00c0, 0x4443, 0x7034, 0xa005, 0x00c0,
-+ 0x4443, 0x2009, 0x0016, 0x1078, 0x5d41, 0x0078, 0x4443, 0xa08e,
-+ 0x0022, 0x00c0, 0x4443, 0x7030, 0xa08e, 0x0300, 0x00c0, 0x4390,
-+ 0x7034, 0xa005, 0x00c0, 0x4443, 0x2009, 0x0017, 0x0078, 0x440f,
-+ 0xa08e, 0x0500, 0x00c0, 0x439c, 0x7034, 0xa005, 0x00c0, 0x4443,
-+ 0x2009, 0x0018, 0x0078, 0x440f, 0xa08e, 0x2010, 0x00c0, 0x43a4,
-+ 0x2009, 0x0019, 0x0078, 0x440f, 0xa08e, 0x2110, 0x00c0, 0x43ac,
-+ 0x2009, 0x001a, 0x0078, 0x440f, 0xa08e, 0x5200, 0x00c0, 0x43b8,
-+ 0x7034, 0xa005, 0x00c0, 0x4443, 0x2009, 0x001b, 0x0078, 0x440f,
-+ 0xa08e, 0x5000, 0x00c0, 0x43c4, 0x7034, 0xa005, 0x00c0, 0x4443,
-+ 0x2009, 0x001c, 0x0078, 0x440f, 0xa08e, 0x1200, 0x00c0, 0x43d0,
-+ 0x7034, 0xa005, 0x00c0, 0x4443, 0x2009, 0x0024, 0x0078, 0x440f,
-+ 0xa08c, 0xff00, 0xa18e, 0x2400, 0x00c0, 0x43da, 0x2009, 0x002d,
-+ 0x0078, 0x440f, 0xa08c, 0xff00, 0xa18e, 0x5300, 0x00c0, 0x43e4,
-+ 0x2009, 0x002a, 0x0078, 0x440f, 0xa08e, 0x0f00, 0x00c0, 0x43ec,
-+ 0x2009, 0x0020, 0x0078, 0x440f, 0xa08e, 0x5300, 0x00c0, 0x43f2,
-+ 0x0078, 0x440d, 0xa08e, 0x6104, 0x00c0, 0x440d, 0x2011, 0x7c8d,
-+ 0x8208, 0x2204, 0xa082, 0x0004, 0x20a8, 0x95ac, 0x95ac, 0x2011,
-+ 0x8015, 0x211c, 0x8108, 0x2124, 0x1078, 0x2d59, 0x8108, 0x00f0,
-+ 0x43ff, 0x2009, 0x0023, 0x0078, 0x440f, 0x2009, 0x001d, 0x017e,
-+ 0x2011, 0x7c83, 0x2204, 0x8211, 0x220c, 0x1078, 0x207f, 0x00c0,
-+ 0x4445, 0x1078, 0x3811, 0x00c0, 0x4445, 0x6612, 0x6516, 0x86ff,
-+ 0x0040, 0x4435, 0x017f, 0x017e, 0xa186, 0x0017, 0x00c0, 0x4435,
-+ 0x6864, 0xa606, 0x00c0, 0x4435, 0x6868, 0xa506, 0xa084, 0xff00,
-+ 0x00c0, 0x4435, 0x6000, 0xc0f5, 0x6002, 0x0c7e, 0x1078, 0x5cb4,
-+ 0x0040, 0x4448, 0x017f, 0x611a, 0x601f, 0x0004, 0x7120, 0x610a,
-+ 0x017f, 0x1078, 0x5d41, 0x0c7f, 0x007c, 0x017f, 0x0078, 0x4443,
-+ 0x0c7f, 0x0078, 0x4445, 0x0e7e, 0x0d7e, 0x2028, 0x2130, 0xa696,
-+ 0x00ff, 0x00c0, 0x446b, 0xa596, 0xfffd, 0x00c0, 0x445b, 0x2009,
-+ 0x007f, 0x0078, 0x4498, 0xa596, 0xfffe, 0x00c0, 0x4463, 0x2009,
-+ 0x007e, 0x0078, 0x4498, 0xa596, 0xfffc, 0x00c0, 0x446b, 0x2009,
-+ 0x0080, 0x0078, 0x4498, 0x2011, 0x0000, 0x2021, 0x007e, 0x20a9,
-+ 0x0082, 0x2071, 0x789e, 0x2e1c, 0x83ff, 0x00c0, 0x447d, 0x82ff,
-+ 0x00c0, 0x448c, 0x2410, 0x0078, 0x448c, 0x2368, 0x6b10, 0x007e,
-+ 0x2100, 0xa31e, 0x007f, 0x00c0, 0x448c, 0x6b14, 0xa31e, 0x00c0,
-+ 0x448c, 0x2408, 0x0078, 0x4498, 0x8420, 0x8e70, 0x00f0, 0x4473,
-+ 0x82ff, 0x00c0, 0x4497, 0xa085, 0x0001, 0x0078, 0x4499, 0x2208,
-+ 0xa006, 0x0d7f, 0x0e7f, 0x007c, 0xa084, 0x0007, 0x0079, 0x44a1,
-+ 0x007c, 0x44a9, 0x44a9, 0x44a9, 0x44a9, 0x44a9, 0x44aa, 0x44c3,
-+ 0x450b, 0x007c, 0x7110, 0xd1bc, 0x0040, 0x44c2, 0x7120, 0x2160,
-+ 0xac8c, 0x0007, 0x00c0, 0x44c2, 0xac8a, 0x7e00, 0x0048, 0x44c2,
-+ 0x6854, 0xac02, 0x00c8, 0x44c2, 0x7124, 0x610a, 0x2009, 0x0046,
-+ 0x1078, 0x5d41, 0x007c, 0x0c7e, 0x7110, 0xd1bc, 0x00c0, 0x4509,
-+ 0x2011, 0x7c83, 0x2204, 0x8211, 0x220c, 0x1078, 0x207f, 0x00c0,
-+ 0x4509, 0x1078, 0x384c, 0x00c0, 0x4509, 0x6204, 0xa294, 0xff00,
-+ 0x8217, 0xa286, 0x0006, 0x00c0, 0x44ee, 0x0c7e, 0x1078, 0x5cb4,
-+ 0x017f, 0x0040, 0x4509, 0x611a, 0x601f, 0x0006, 0x7120, 0x610a,
-+ 0x2009, 0x0044, 0x1078, 0x5d41, 0x0078, 0x4509, 0x0c7e, 0x1078,
-+ 0x5cb4, 0x017f, 0x0040, 0x4509, 0x611a, 0x601f, 0x0004, 0x7120,
-+ 0x610a, 0xa286, 0x0004, 0x00c0, 0x4501, 0x6007, 0x0005, 0x0078,
-+ 0x4503, 0x6007, 0x0001, 0x6003, 0x0001, 0x1078, 0x498e, 0x1078,
-+ 0x4d96, 0x0c7f, 0x007c, 0x7110, 0xd1bc, 0x0040, 0x4521, 0x7020,
-+ 0x2060, 0xac84, 0x0007, 0x00c0, 0x4521, 0xac82, 0x7e00, 0x0048,
-+ 0x4521, 0x6854, 0xac02, 0x00c8, 0x4521, 0x2009, 0x0045, 0x1078,
-+ 0x5d41, 0x007c, 0x7110, 0xa18c, 0xff00, 0x810f, 0xa18e, 0x0000,
-+ 0x00c0, 0x4532, 0xa084, 0x000f, 0xa08a, 0x0006, 0x10c8, 0x12cd,
-+ 0x1079, 0x4533, 0x007c, 0x4539, 0x453a, 0x4539, 0x4539, 0x457b,
-+ 0x458a, 0x007c, 0x7110, 0xd1bc, 0x00c0, 0x457a, 0x700c, 0x7108,
-+ 0x1078, 0x207f, 0x00c0, 0x457a, 0x1078, 0x3811, 0x00c0, 0x457a,
-+ 0x6612, 0x6516, 0x6204, 0xa294, 0xff00, 0x8217, 0xa286, 0x0006,
-+ 0x00c0, 0x4563, 0x0c7e, 0x1078, 0x5cb4, 0x017f, 0x0040, 0x457a,
-+ 0x611a, 0x601f, 0x0005, 0x7120, 0x610a, 0x2009, 0x0088, 0x1078,
-+ 0x5d41, 0x0078, 0x457a, 0x0c7e, 0x1078, 0x5cb4, 0x017f, 0x0040,
-+ 0x457a, 0x611a, 0x601f, 0x0004, 0x7120, 0x610a, 0xa286, 0x0004,
-+ 0x00c0, 0x4576, 0x2009, 0x0005, 0x0078, 0x4578, 0x2009, 0x0001,
-+ 0x1078, 0x5d41, 0x007c, 0x7110, 0xd1bc, 0x0040, 0x4589, 0x1078,
-+ 0x4599, 0x0040, 0x4589, 0x7124, 0x610a, 0x2009, 0x0089, 0x1078,
-+ 0x5d41, 0x007c, 0x7110, 0xd1bc, 0x0040, 0x4598, 0x1078, 0x4599,
-+ 0x0040, 0x4598, 0x7124, 0x610a, 0x2009, 0x008a, 0x1078, 0x5d41,
-+ 0x007c, 0x7020, 0x2060, 0xac84, 0x0007, 0x00c0, 0x45ac, 0xac82,
-+ 0x7e00, 0x0048, 0x45ac, 0x2001, 0x7715, 0x2004, 0xac02, 0x00c8,
-+ 0x45ac, 0xa085, 0x0001, 0x007c, 0xa006, 0x0078, 0x45ab, 0x2071,
-+ 0x7949, 0x7003, 0x0003, 0x700f, 0x0361, 0xa006, 0x701a, 0x7012,
-+ 0x7017, 0x7e00, 0x7007, 0x0000, 0x7026, 0x702b, 0x56a9, 0x7032,
-+ 0x7037, 0x56ea, 0x703b, 0x0002, 0x703f, 0x0000, 0x007c, 0x2071,
-+ 0x7949, 0x00e0, 0x4676, 0x2091, 0x6000, 0x700c, 0x8001, 0x700e,
-+ 0x00c0, 0x463f, 0x700f, 0x0361, 0x7007, 0x0001, 0x127e, 0x2091,
-+ 0x8000, 0x7138, 0x8109, 0x713a, 0x00c0, 0x463d, 0x703b, 0x0002,
-+ 0x2009, 0x0100, 0x2104, 0xa082, 0x0003, 0x00c8, 0x463d, 0x703c,
-+ 0xa086, 0x0001, 0x00c0, 0x461a, 0x0d7e, 0x2069, 0x0140, 0x6804,
-+ 0xa084, 0x4000, 0x0040, 0x45f8, 0x6803, 0x1000, 0x0078, 0x45ff,
-+ 0x6804, 0xa084, 0x1000, 0x0040, 0x45ff, 0x6803, 0x0100, 0x6803,
-+ 0x0000, 0x703f, 0x0000, 0x2069, 0x7936, 0x6804, 0xa082, 0x0006,
-+ 0x00c0, 0x460c, 0x6807, 0x0000, 0x6830, 0xa082, 0x0003, 0x00c0,
-+ 0x4613, 0x6833, 0x0000, 0x1078, 0x4d96, 0x1078, 0x4e56, 0x0d7f,
-+ 0x0078, 0x463d, 0x0d7e, 0x2069, 0x7700, 0x6944, 0x6860, 0xa102,
-+ 0x00c8, 0x463c, 0x2069, 0x7936, 0x6804, 0xa086, 0x0000, 0x00c0,
-+ 0x463c, 0x6830, 0xa086, 0x0000, 0x00c0, 0x463c, 0x703f, 0x0001,
-+ 0x6807, 0x0006, 0x6833, 0x0003, 0x2069, 0x0100, 0x6830, 0x689e,
-+ 0x2069, 0x0140, 0x6803, 0x0600, 0x0d7f, 0x0078, 0x4642, 0x127e,
-+ 0x2091, 0x8000, 0x7024, 0xa00d, 0x0040, 0x4653, 0x7020, 0x8001,
-+ 0x7022, 0x00c0, 0x4653, 0x7023, 0x0009, 0x8109, 0x7126, 0x00c0,
-+ 0x4653, 0x7028, 0x107a, 0x7030, 0xa00d, 0x0040, 0x4664, 0x702c,
-+ 0x8001, 0x702e, 0x00c0, 0x4664, 0x702f, 0x0009, 0x8109, 0x7132,
-+ 0x00c0, 0x4664, 0x7034, 0x107a, 0x7018, 0xa00d, 0x0040, 0x4675,
-+ 0x7008, 0x8001, 0x700a, 0x00c0, 0x4675, 0x700b, 0x0009, 0x8109,
-+ 0x711a, 0x00c0, 0x4675, 0x701c, 0x107a, 0x127f, 0x7004, 0x0079,
-+ 0x4679, 0x46a0, 0x46a1, 0x46bd, 0x0e7e, 0x2071, 0x7949, 0x7018,
-+ 0xa005, 0x00c0, 0x4687, 0x711a, 0x721e, 0x700b, 0x0009, 0x0e7f,
-+ 0x007c, 0x0e7e, 0x007e, 0x2071, 0x7949, 0x701c, 0xa206, 0x00c0,
-+ 0x4693, 0x701a, 0x701e, 0x007f, 0x0e7f, 0x007c, 0x0e7e, 0x2071,
-+ 0x7949, 0x6088, 0xa102, 0x0048, 0x469e, 0x618a, 0x0e7f, 0x007c,
-+ 0x007c, 0x7110, 0x1078, 0x384c, 0x00c0, 0x46b3, 0x6088, 0x8001,
-+ 0x0048, 0x46b3, 0x608a, 0x00c0, 0x46b3, 0x127e, 0x2091, 0x8000,
-+ 0x1078, 0x4d96, 0x127f, 0x8108, 0xa182, 0x00ff, 0x0048, 0x46bb,
-+ 0xa00e, 0x7007, 0x0002, 0x7112, 0x007c, 0x7014, 0x2060, 0x127e,
-+ 0x2091, 0x8000, 0x6014, 0xa005, 0x0040, 0x46ec, 0x8001, 0x6016,
-+ 0x00c0, 0x46ec, 0x611c, 0xa186, 0x0003, 0x0040, 0x46d3, 0xa186,
-+ 0x0006, 0x00c0, 0x46ea, 0x6010, 0x2068, 0x6854, 0xa08a, 0x199a,
-+ 0x0048, 0x46ea, 0xa082, 0x1999, 0x6856, 0xa08a, 0x199a, 0x0048,
-+ 0x46e3, 0x2001, 0x1999, 0x8003, 0x800b, 0x810b, 0xa108, 0x6116,
-+ 0x0078, 0x46ec, 0x1078, 0x68e3, 0x127f, 0xac88, 0x0008, 0x7116,
-+ 0x2001, 0x7716, 0x2004, 0xa102, 0x0048, 0x46fa, 0x7017, 0x7e00,
-+ 0x7007, 0x0000, 0x007c, 0x0e7e, 0x2071, 0x7949, 0x7027, 0x07d0,
-+ 0x7023, 0x0009, 0x703b, 0x0002, 0x0e7f, 0x007c, 0x2001, 0x7952,
-+ 0x2003, 0x0000, 0x007c, 0x0e7e, 0x2071, 0x7949, 0x7033, 0x07d0,
-+ 0x702f, 0x0009, 0x0e7f, 0x007c, 0x2011, 0x7955, 0x2013, 0x0000,
-+ 0x007c, 0x0e7e, 0x2071, 0x7949, 0x711a, 0x721e, 0x700b, 0x0009,
-+ 0x0e7f, 0x007c, 0x0c7e, 0x2061, 0x79da, 0x0c7f, 0x007c, 0xa184,
-+ 0x000f, 0x8003, 0x8003, 0x8003, 0xa080, 0x79da, 0x2060, 0x007c,
-+ 0x6854, 0xa08a, 0x199a, 0x0048, 0x4737, 0x2001, 0x1999, 0xa005,
-+ 0x00c0, 0x4747, 0x6944, 0x0c7e, 0x1078, 0x4727, 0x6014, 0x0c7f,
-+ 0xa005, 0x00c0, 0x474c, 0x2001, 0x001e, 0x0078, 0x474c, 0xa08e,
-+ 0xffff, 0x00c0, 0x474c, 0xa006, 0x8003, 0x800b, 0x810b, 0xa108,
-+ 0x6116, 0x684c, 0xa08c, 0x00c0, 0xa18e, 0x00c0, 0x0040, 0x4787,
-+ 0xd0b4, 0x00c0, 0x4763, 0xd0bc, 0x00c0, 0x4775, 0x2009, 0x0006,
-+ 0x1078, 0x47aa, 0x007c, 0xd0fc, 0x0040, 0x4770, 0xa084, 0x0003,
-+ 0xa08e, 0x0003, 0x0040, 0x47a3, 0xa08e, 0x0000, 0x00c0, 0x47a3,
-+ 0x2009, 0x0043, 0x1078, 0x5d41, 0x007c, 0xd0fc, 0x0040, 0x4782,
-+ 0xa084, 0x0003, 0xa08e, 0x0003, 0x0040, 0x47a3, 0xa08e, 0x0000,
-+ 0x00c0, 0x47a3, 0x2009, 0x0042, 0x1078, 0x5d41, 0x007c, 0xd0fc,
-+ 0x0040, 0x4799, 0xa084, 0x0003, 0xa08e, 0x0003, 0x0040, 0x47a3,
-+ 0xa08e, 0x0002, 0x0040, 0x479d, 0x2009, 0x0041, 0x1078, 0x5d41,
-+ 0x007c, 0x1078, 0x47a8, 0x0078, 0x4798, 0x2009, 0x0043, 0x1078,
-+ 0x5d41, 0x0078, 0x4798, 0x2009, 0x0004, 0x1078, 0x47aa, 0x007c,
-+ 0x2009, 0x0001, 0x6010, 0xa0ec, 0xf000, 0x0040, 0x47cf, 0x2068,
-+ 0x6952, 0x6800, 0x6012, 0xa186, 0x0001, 0x00c0, 0x47c9, 0x694c,
-+ 0xa18c, 0x8100, 0xa18e, 0x8100, 0x00c0, 0x47c9, 0x0c7e, 0x2009,
-+ 0x0000, 0x1078, 0x4727, 0x6204, 0x8210, 0x0048, 0x47c8, 0x6206,
-+ 0x0c7f, 0x1078, 0x3b92, 0x6010, 0xa06d, 0x10c0, 0x4730, 0x007c,
-+ 0x157e, 0x0c7e, 0x20a9, 0x0010, 0x2061, 0x79da, 0x6000, 0x81ff,
-+ 0x0040, 0x47dd, 0xa205, 0x0078, 0x47de, 0xa204, 0x6002, 0xace0,
-+ 0x0008, 0x00f0, 0x47d6, 0x0c7f, 0x157f, 0x007c, 0x6808, 0xa005,
-+ 0x0040, 0x47ee, 0x8001, 0x680a, 0xa085, 0x0001, 0x007c, 0x127e,
-+ 0x2091, 0x2200, 0x2079, 0x7936, 0x127f, 0x0d7e, 0x2069, 0x7936,
-+ 0x6803, 0x0005, 0x2069, 0x0004, 0x2d04, 0xa085, 0x8001, 0x206a,
-+ 0x0d7f, 0x007c, 0x0c7e, 0x6027, 0x0001, 0x7804, 0xa084, 0x0007,
-+ 0x0079, 0x480a, 0x4814, 0x4839, 0x4894, 0x481a, 0x4839, 0x4812,
-+ 0x4812, 0x4812, 0x1078, 0x12cd, 0x1078, 0x4706, 0x1078, 0x4d96,
-+ 0x0c7f, 0x007c, 0x62c0, 0x82ff, 0x00c0, 0x4820, 0x0c7f, 0x007c,
-+ 0x2011, 0x3558, 0x1078, 0x4689, 0x7828, 0xa092, 0x0002, 0x00c8,
-+ 0x482f, 0x8000, 0x782a, 0x1078, 0x3588, 0x0078, 0x481e, 0x1078,
-+ 0x3558, 0x7807, 0x0003, 0x7827, 0x0000, 0x782b, 0x0000, 0x0078,
-+ 0x481e, 0x1078, 0x4706, 0x3c00, 0x007e, 0x2011, 0x0209, 0x20e1,
-+ 0x4000, 0x2214, 0x007f, 0x20e0, 0x82ff, 0x0040, 0x4857, 0x62c0,
-+ 0x82ff, 0x00c0, 0x4857, 0x782b, 0x0000, 0x7824, 0xa065, 0x1040,
-+ 0x12cd, 0x2009, 0x0013, 0x1078, 0x5d41, 0x0c7f, 0x007c, 0x3900,
-+ 0xa082, 0x7a7a, 0x00c8, 0x485e, 0x1078, 0x5c44, 0x0c7e, 0x7824,
-+ 0xa065, 0x1040, 0x12cd, 0x7804, 0xa086, 0x0004, 0x0040, 0x48d9,
-+ 0x7828, 0xa092, 0x2710, 0x00c8, 0x4874, 0x8000, 0x782a, 0x0c7f,
-+ 0x1078, 0x568e, 0x0078, 0x4855, 0x6104, 0xa186, 0x0003, 0x00c0,
-+ 0x488b, 0x0e7e, 0x2071, 0x7700, 0x70c8, 0x0e7f, 0xd08c, 0x0040,
-+ 0x488b, 0x0c7e, 0x0e7e, 0x2061, 0x0100, 0x2071, 0x7700, 0x1078,
-+ 0x3591, 0x0e7f, 0x0c7f, 0x1078, 0x76c7, 0x2009, 0x0014, 0x1078,
-+ 0x5d41, 0x0c7f, 0x0078, 0x4855, 0x2001, 0x7952, 0x2003, 0x0000,
-+ 0x62c0, 0x82ff, 0x00c0, 0x48a8, 0x782b, 0x0000, 0x7824, 0xa065,
-+ 0x1040, 0x12cd, 0x2009, 0x0013, 0x1078, 0x5d8f, 0x0c7f, 0x007c,
-+ 0x0c7e, 0x0d7e, 0x3900, 0xa082, 0x7a7a, 0x00c8, 0x48b1, 0x1078,
-+ 0x5c44, 0x7824, 0xa005, 0x1040, 0x12cd, 0x781c, 0xa06d, 0x1040,
-+ 0x12cd, 0x6800, 0xc0dc, 0x6802, 0x7924, 0x2160, 0x1078, 0x5d1a,
-+ 0x693c, 0x81ff, 0x1040, 0x12cd, 0x8109, 0x693e, 0x6854, 0xa015,
-+ 0x0040, 0x48cd, 0x7a1e, 0x0078, 0x48cf, 0x7918, 0x791e, 0x7807,
-+ 0x0000, 0x7827, 0x0000, 0x0d7f, 0x0c7f, 0x1078, 0x4d96, 0x0078,
-+ 0x48a6, 0x6104, 0xa186, 0x0002, 0x0040, 0x48e4, 0xa186, 0x0004,
-+ 0x0040, 0x48e4, 0x0078, 0x4868, 0x7808, 0xac06, 0x0040, 0x4868,
-+ 0x1078, 0x4c9d, 0x1078, 0x498e, 0x0c7f, 0x1078, 0x4d96, 0x0078,
-+ 0x4855, 0x0c7e, 0x6027, 0x0002, 0x2011, 0x7955, 0x2013, 0x0000,
-+ 0x62c8, 0x82ff, 0x00c0, 0x490b, 0x62c4, 0x82ff, 0x00c0, 0x490b,
-+ 0x793c, 0xa1e5, 0x0000, 0x0040, 0x4909, 0x2009, 0x0049, 0x1078,
-+ 0x5d41, 0x0c7f, 0x007c, 0x3908, 0xa192, 0x7a7a, 0x00c8, 0x4912,
-+ 0x1078, 0x5c44, 0x6017, 0x0010, 0x793c, 0x81ff, 0x0040, 0x4909,
-+ 0x7944, 0xa192, 0x7530, 0x00c8, 0x4931, 0x8108, 0x7946, 0x1078,
-+ 0x470b, 0x793c, 0xa188, 0x0007, 0x210c, 0xa18e, 0x0006, 0x00c0,
-+ 0x492d, 0x6017, 0x0012, 0x0078, 0x4909, 0x6017, 0x0016, 0x0078,
-+ 0x4909, 0x037e, 0x2019, 0x0001, 0x1078, 0x5880, 0x037f, 0x1078,
-+ 0x76c7, 0x793c, 0x2160, 0x2009, 0x004a, 0x1078, 0x5d41, 0x0078,
-+ 0x4909, 0x007e, 0x017e, 0x0c7e, 0x127e, 0x2091, 0x8000, 0x600f,
-+ 0x0000, 0x2c08, 0x2061, 0x7936, 0x6020, 0x8000, 0x6022, 0x6010,
-+ 0xa005, 0x0040, 0x495c, 0xa080, 0x0003, 0x2102, 0x6112, 0x127f,
-+ 0x0c7f, 0x017f, 0x007f, 0x007c, 0x6116, 0x6112, 0x0078, 0x4957,
-+ 0x0d7e, 0x2069, 0x7936, 0x6000, 0xd0d4, 0x0040, 0x4975, 0x6820,
-+ 0x8000, 0x6822, 0xa086, 0x0001, 0x00c0, 0x4970, 0x2c00, 0x681e,
-+ 0x6804, 0xa084, 0x0007, 0x0079, 0x4d9e, 0xc0d5, 0x6002, 0x6818,
-+ 0xa005, 0x0040, 0x4987, 0x6056, 0x605b, 0x0000, 0x007e, 0x2c00,
-+ 0x681a, 0x0d7f, 0x685a, 0x2069, 0x7936, 0x0078, 0x4967, 0x6056,
-+ 0x605a, 0x2c00, 0x681a, 0x681e, 0x0078, 0x4967, 0x007e, 0x017e,
-+ 0x0c7e, 0x127e, 0x2091, 0x8000, 0x600f, 0x0000, 0x2c08, 0x2061,
-+ 0x7936, 0x6020, 0x8000, 0x6022, 0x6008, 0xa005, 0x0040, 0x49a9,
-+ 0xa080, 0x0003, 0x2102, 0x610a, 0x127f, 0x0c7f, 0x017f, 0x007f,
-+ 0x007c, 0x610e, 0x610a, 0x0078, 0x49a4, 0x0c7e, 0x600f, 0x0000,
-+ 0x2c08, 0x2061, 0x7936, 0x6034, 0xa005, 0x0040, 0x49bd, 0xa080,
-+ 0x0003, 0x2102, 0x6136, 0x0c7f, 0x007c, 0x613a, 0x6136, 0x0078,
-+ 0x49bb, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x067e, 0x027e, 0x007e,
-+ 0x127e, 0x2071, 0x7936, 0x7638, 0x2660, 0x2678, 0x2091, 0x8000,
-+ 0x8cff, 0x0040, 0x4a23, 0x6018, 0xa080, 0x0028, 0x2004, 0xa206,
-+ 0x00c0, 0x4a1e, 0x703c, 0xac06, 0x00c0, 0x49e3, 0x6003, 0x000a,
-+ 0x630a, 0x0078, 0x4a1e, 0x7038, 0xac36, 0x00c0, 0x49e9, 0x660c,
-+ 0x763a, 0x7034, 0xac36, 0x00c0, 0x49f7, 0x2c00, 0xaf36, 0x0040,
-+ 0x49f5, 0x2f00, 0x7036, 0x0078, 0x49f7, 0x7037, 0x0000, 0x660c,
-+ 0x067e, 0x2c00, 0xaf06, 0x0040, 0x4a00, 0x7e0e, 0x0078, 0x4a01,
-+ 0x2678, 0x600f, 0x0000, 0x1078, 0x6a58, 0x0040, 0x4a19, 0x6010,
-+ 0x2068, 0x601c, 0xa086, 0x0003, 0x00c0, 0x4a2c, 0x6837, 0x0103,
-+ 0x6b4a, 0x6847, 0x0000, 0x1078, 0x6c54, 0x1078, 0x3b92, 0x1078,
-+ 0x6ba9, 0x1078, 0x6bb6, 0x0c7f, 0x0078, 0x49d0, 0x2c78, 0x600c,
-+ 0x2060, 0x0078, 0x49d0, 0x127f, 0x007f, 0x027f, 0x067f, 0x0c7f,
-+ 0x0d7f, 0x0e7f, 0x0f7f, 0x007c, 0x601c, 0xa086, 0x0006, 0x00c0,
-+ 0x4a0e, 0x1078, 0x75fd, 0x0078, 0x4a19, 0x007e, 0x067e, 0x0c7e,
-+ 0x0d7e, 0x0f7e, 0x2031, 0x0000, 0x127e, 0x2091, 0x8000, 0x2079,
-+ 0x7936, 0x7838, 0xa065, 0x0040, 0x4a6c, 0x600c, 0x007e, 0x600f,
-+ 0x0000, 0x783c, 0xac06, 0x00c0, 0x4a53, 0x6003, 0x000a, 0x630a,
-+ 0x2c30, 0x0078, 0x4a69, 0x1078, 0x6a58, 0x0040, 0x4a67, 0x6010,
-+ 0x2068, 0x601c, 0xa086, 0x0003, 0x00c0, 0x4a75, 0x6837, 0x0103,
-+ 0x6b4a, 0x6847, 0x0000, 0x1078, 0x3b92, 0x1078, 0x6ba9, 0x1078,
-+ 0x6bb6, 0x007f, 0x0078, 0x4a42, 0x7e3a, 0x7e36, 0x127f, 0x0f7f,
-+ 0x0d7f, 0x0c7f, 0x067f, 0x007f, 0x007c, 0x601c, 0xa086, 0x0006,
-+ 0x00c0, 0x4a5e, 0x1078, 0x75fd, 0x0078, 0x4a67, 0x027e, 0x1078,
-+ 0x4a92, 0x1078, 0x4b2b, 0x027f, 0x007c, 0x0f7e, 0x127e, 0x2079,
-+ 0x7936, 0x2091, 0x8000, 0x1078, 0x4bc2, 0x1078, 0x4c2a, 0x127f,
-+ 0x0f7f, 0x007c, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x067e, 0x007e,
-+ 0x127e, 0x2091, 0x8000, 0x2071, 0x7936, 0x7614, 0x2660, 0x2678,
-+ 0x8cff, 0x0040, 0x4b1a, 0x6018, 0xa080, 0x0028, 0x2004, 0xa206,
-+ 0x00c0, 0x4b15, 0x7024, 0xac06, 0x00c0, 0x4ad8, 0x2069, 0x0100,
-+ 0x68c0, 0xa005, 0x0040, 0x4ad3, 0x1078, 0x569c, 0x68c3, 0x0000,
-+ 0x1078, 0x5b4a, 0x7027, 0x0000, 0x037e, 0x2069, 0x0140, 0x6b04,
-+ 0xa384, 0x1000, 0x0040, 0x4ac8, 0x6803, 0x0100, 0x6803, 0x0000,
-+ 0x2069, 0x0100, 0x6824, 0xd084, 0x0040, 0x4ad0, 0x6827, 0x0001,
-+ 0x037f, 0x0078, 0x4ad8, 0x6003, 0x0009, 0x630a, 0x0078, 0x4b15,
-+ 0x7014, 0xac36, 0x00c0, 0x4ade, 0x660c, 0x7616, 0x7010, 0xac36,
-+ 0x00c0, 0x4aec, 0x2c00, 0xaf36, 0x0040, 0x4aea, 0x2f00, 0x7012,
-+ 0x0078, 0x4aec, 0x7013, 0x0000, 0x660c, 0x067e, 0x2c00, 0xaf06,
-+ 0x0040, 0x4af5, 0x7e0e, 0x0078, 0x4af6, 0x2678, 0x600f, 0x0000,
-+ 0x6010, 0x2068, 0x1078, 0x6a58, 0x0040, 0x4b0e, 0x601c, 0xa086,
-+ 0x0003, 0x00c0, 0x4b22, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000,
-+ 0x1078, 0x6c54, 0x1078, 0x3b92, 0x1078, 0x6ba9, 0x1078, 0x6bb6,
-+ 0x1078, 0x5a1a, 0x0c7f, 0x0078, 0x4aa0, 0x2c78, 0x600c, 0x2060,
-+ 0x0078, 0x4aa0, 0x127f, 0x007f, 0x067f, 0x0c7f, 0x0d7f, 0x0e7f,
-+ 0x0f7f, 0x007c, 0x601c, 0xa086, 0x0006, 0x00c0, 0x4b03, 0x1078,
-+ 0x75fd, 0x0078, 0x4b0e, 0x0c7e, 0x007e, 0x127e, 0x2091, 0x8000,
-+ 0xa280, 0x7820, 0x2004, 0xa065, 0x0040, 0x4bbe, 0x0f7e, 0x0e7e,
-+ 0x0d7e, 0x067e, 0x2071, 0x7936, 0x6654, 0x7018, 0xac06, 0x00c0,
-+ 0x4b42, 0x761a, 0x701c, 0xac06, 0x00c0, 0x4b4e, 0x86ff, 0x00c0,
-+ 0x4b4d, 0x7018, 0x701e, 0x0078, 0x4b4e, 0x761e, 0x6058, 0xa07d,
-+ 0x0040, 0x4b53, 0x7e56, 0xa6ed, 0x0000, 0x0040, 0x4b59, 0x2f00,
-+ 0x685a, 0x6057, 0x0000, 0x605b, 0x0000, 0x6000, 0xc0d4, 0xc0dc,
-+ 0x6002, 0x1078, 0x37c5, 0x0040, 0x4bba, 0x7624, 0x86ff, 0x0040,
-+ 0x4baa, 0xa680, 0x0004, 0x2004, 0xad06, 0x00c0, 0x4baa, 0x0d7e,
-+ 0x2069, 0x0100, 0x68c0, 0xa005, 0x0040, 0x4ba1, 0x1078, 0x569c,
-+ 0x68c3, 0x0000, 0x1078, 0x5b4a, 0x7027, 0x0000, 0x037e, 0x2069,
-+ 0x0140, 0x6b04, 0xa384, 0x1000, 0x0040, 0x4b8a, 0x6803, 0x0100,
-+ 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084, 0x0040, 0x4b92,
-+ 0x6827, 0x0001, 0x037f, 0x0d7f, 0x0c7e, 0x603c, 0xa005, 0x0040,
-+ 0x4b9b, 0x8001, 0x603e, 0x2660, 0x1078, 0x6bb6, 0x0c7f, 0x0078,
-+ 0x4baa, 0x0d7f, 0x0c7e, 0x2660, 0x6003, 0x0009, 0x630a, 0x0c7f,
-+ 0x0078, 0x4b61, 0x8dff, 0x0040, 0x4bb6, 0x6837, 0x0103, 0x6b4a,
-+ 0x6847, 0x0000, 0x1078, 0x6c54, 0x1078, 0x3b92, 0x1078, 0x5a1a,
-+ 0x0078, 0x4b61, 0x067f, 0x0d7f, 0x0e7f, 0x0f7f, 0x127f, 0x007f,
-+ 0x0c7f, 0x007c, 0x007e, 0x067e, 0x0c7e, 0x0d7e, 0x2031, 0x0000,
-+ 0x7814, 0xa065, 0x0040, 0x4c1a, 0x600c, 0x007e, 0x600f, 0x0000,
-+ 0x7824, 0xac06, 0x00c0, 0x4bff, 0x2069, 0x0100, 0x68c0, 0xa005,
-+ 0x0040, 0x4bf9, 0x1078, 0x569c, 0x68c3, 0x0000, 0x1078, 0x5b4a,
-+ 0x7827, 0x0000, 0x037e, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000,
-+ 0x0040, 0x4bee, 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100,
-+ 0x6824, 0xd084, 0x0040, 0x4bf6, 0x6827, 0x0001, 0x037f, 0x0078,
-+ 0x4bff, 0x6003, 0x0009, 0x630a, 0x2c30, 0x0078, 0x4c17, 0x6010,
-+ 0x2068, 0x1078, 0x6a58, 0x0040, 0x4c13, 0x601c, 0xa086, 0x0003,
-+ 0x00c0, 0x4c21, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078,
-+ 0x3b92, 0x1078, 0x6ba9, 0x1078, 0x6bb6, 0x1078, 0x5a1a, 0x007f,
-+ 0x0078, 0x4bc9, 0x7e16, 0x7e12, 0x0d7f, 0x0c7f, 0x067f, 0x007f,
-+ 0x007c, 0x601c, 0xa086, 0x0006, 0x00c0, 0x4c0a, 0x1078, 0x75fd,
-+ 0x0078, 0x4c13, 0x007e, 0x067e, 0x0c7e, 0x0d7e, 0x7818, 0xa065,
-+ 0x0040, 0x4c96, 0x6054, 0x007e, 0x6057, 0x0000, 0x605b, 0x0000,
-+ 0x6000, 0xc0d4, 0xc0dc, 0x6002, 0x1078, 0x37c5, 0x0040, 0x4c93,
-+ 0x7e24, 0x86ff, 0x0040, 0x4c85, 0xa680, 0x0004, 0x2004, 0xad06,
-+ 0x00c0, 0x4c85, 0x0d7e, 0x2069, 0x0100, 0x68c0, 0xa005, 0x0040,
-+ 0x4c7c, 0x1078, 0x569c, 0x68c3, 0x0000, 0x1078, 0x5b4a, 0x7827,
-+ 0x0000, 0x037e, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0040,
-+ 0x4c65, 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824,
-+ 0xd084, 0x0040, 0x4c6d, 0x6827, 0x0001, 0x037f, 0x0d7f, 0x0c7e,
-+ 0x603c, 0xa005, 0x0040, 0x4c76, 0x8001, 0x603e, 0x2660, 0x1078,
-+ 0x6bb6, 0x0c7f, 0x0078, 0x4c85, 0x0d7f, 0x0c7e, 0x2660, 0x6003,
-+ 0x0009, 0x630a, 0x0c7f, 0x0078, 0x4c3c, 0x8dff, 0x0040, 0x4c8f,
-+ 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x3b92, 0x1078,
-+ 0x5a1a, 0x0078, 0x4c3c, 0x007f, 0x0078, 0x4c2f, 0x781e, 0x781a,
-+ 0x0d7f, 0x0c7f, 0x067f, 0x007f, 0x007c, 0x0e7e, 0x0c7e, 0x2071,
-+ 0x7936, 0x7004, 0xa084, 0x0007, 0x0079, 0x4ca6, 0x4cb0, 0x4cb3,
-+ 0x4ccc, 0x4ce8, 0x4d2d, 0x4cb0, 0x4cb0, 0x4cae, 0x1078, 0x12cd,
-+ 0x0c7f, 0x0e7f, 0x007c, 0x7024, 0xa065, 0x0040, 0x4cc1, 0x7020,
-+ 0x8001, 0x7022, 0x600c, 0xa015, 0x0040, 0x4cc8, 0x7216, 0x600f,
-+ 0x0000, 0x7007, 0x0000, 0x7027, 0x0000, 0x0c7f, 0x0e7f, 0x007c,
-+ 0x7216, 0x7212, 0x0078, 0x4cc1, 0x6018, 0x2060, 0x1078, 0x37c5,
-+ 0x6000, 0xc0dc, 0x6002, 0x7020, 0x8001, 0x7022, 0x0040, 0x4cdd,
-+ 0x6054, 0xa015, 0x0040, 0x4ce4, 0x721e, 0x7007, 0x0000, 0x7027,
-+ 0x0000, 0x0c7f, 0x0e7f, 0x007c, 0x7218, 0x721e, 0x0078, 0x4cdd,
-+ 0x7024, 0xa065, 0x0040, 0x4d2a, 0x700c, 0xac06, 0x00c0, 0x4cff,
-+ 0x1078, 0x5a1a, 0x600c, 0xa015, 0x0040, 0x4cfb, 0x720e, 0x600f,
-+ 0x0000, 0x0078, 0x4d28, 0x720e, 0x720a, 0x0078, 0x4d28, 0x7014,
-+ 0xac06, 0x00c0, 0x4d12, 0x1078, 0x5a1a, 0x600c, 0xa015, 0x0040,
-+ 0x4d0e, 0x7216, 0x600f, 0x0000, 0x0078, 0x4d28, 0x7216, 0x7212,
-+ 0x0078, 0x4d28, 0x6018, 0x2060, 0x1078, 0x37c5, 0x6000, 0xc0dc,
-+ 0x6002, 0x1078, 0x5a1a, 0x701c, 0xa065, 0x0040, 0x4d28, 0x6054,
-+ 0xa015, 0x0040, 0x4d26, 0x721e, 0x0078, 0x4d28, 0x7218, 0x721e,
-+ 0x7027, 0x0000, 0x0c7f, 0x0e7f, 0x007c, 0x7024, 0xa065, 0x0040,
-+ 0x4d3a, 0x1078, 0x5a1a, 0x600c, 0xa015, 0x0040, 0x4d41, 0x720e,
-+ 0x600f, 0x0000, 0x1078, 0x5b4a, 0x7027, 0x0000, 0x0c7f, 0x0e7f,
-+ 0x007c, 0x720e, 0x720a, 0x0078, 0x4d3a, 0x0d7e, 0x2069, 0x7936,
-+ 0x6830, 0xa084, 0x0003, 0x0079, 0x4d4d, 0x4d53, 0x4d55, 0x4d7b,
-+ 0x4d53, 0x1078, 0x12cd, 0x0d7f, 0x007c, 0x0c7e, 0x6840, 0xa086,
-+ 0x0001, 0x0040, 0x4d71, 0x683c, 0xa065, 0x0040, 0x4d66, 0x600c,
-+ 0xa015, 0x0040, 0x4d6d, 0x6a3a, 0x600f, 0x0000, 0x6833, 0x0000,
-+ 0x683f, 0x0000, 0x0c7f, 0x0d7f, 0x007c, 0x683a, 0x6836, 0x0078,
-+ 0x4d66, 0x6843, 0x0000, 0x6838, 0xa065, 0x0040, 0x4d66, 0x6003,
-+ 0x0003, 0x0078, 0x4d66, 0x0c7e, 0x6843, 0x0000, 0x6847, 0x0000,
-+ 0x683c, 0xa065, 0x0040, 0x4d93, 0x600c, 0xa015, 0x0040, 0x4d8f,
-+ 0x6a3a, 0x600f, 0x0000, 0x683f, 0x0000, 0x0078, 0x4d93, 0x683f,
-+ 0x0000, 0x683a, 0x6836, 0x0c7f, 0x0d7f, 0x007c, 0x0d7e, 0x2069,
-+ 0x7936, 0x6804, 0xa084, 0x0007, 0x0079, 0x4d9e, 0x4da8, 0x4e45,
-+ 0x4e45, 0x4e45, 0x4e45, 0x4e47, 0x4e45, 0x4da6, 0x1078, 0x12cd,
-+ 0x6820, 0xa005, 0x00c0, 0x4dae, 0x0d7f, 0x007c, 0x0c7e, 0x680c,
-+ 0xa065, 0x0040, 0x4dbd, 0x6807, 0x0004, 0x6826, 0x682b, 0x0000,
-+ 0x1078, 0x4e8d, 0x0c7f, 0x0d7f, 0x007c, 0x6814, 0xa065, 0x0040,
-+ 0x4dcb, 0x6807, 0x0001, 0x6826, 0x682b, 0x0000, 0x1078, 0x4e8d,
-+ 0x0c7f, 0x0d7f, 0x007c, 0x0e7e, 0x037e, 0x6a1c, 0xa2f5, 0x0000,
-+ 0x0040, 0x4e40, 0x704c, 0xa00d, 0x0040, 0x4dda, 0x7088, 0xa005,
-+ 0x0040, 0x4df2, 0x7054, 0xa075, 0x0040, 0x4de3, 0xa20e, 0x0040,
-+ 0x4e40, 0x0078, 0x4de8, 0x6818, 0xa20e, 0x0040, 0x4e40, 0x2070,
-+ 0x704c, 0xa00d, 0x0040, 0x4dda, 0x7088, 0xa005, 0x00c0, 0x4dda,
-+ 0x2e00, 0x681e, 0x733c, 0x7038, 0xa302, 0x00c8, 0x4dda, 0x1078,
-+ 0x5ce9, 0x0040, 0x4e40, 0x8318, 0x733e, 0x6112, 0x2e10, 0x621a,
-+ 0xa180, 0x0015, 0x2004, 0xa08a, 0x199a, 0x0048, 0x4e09, 0x2001,
-+ 0x1999, 0x8003, 0x801b, 0x831b, 0xa318, 0x6316, 0x037f, 0x0f7e,
-+ 0x2c78, 0x71a0, 0xd1bc, 0x0040, 0x4e22, 0x7100, 0xd1f4, 0x0040,
-+ 0x4e1e, 0x7114, 0xa18c, 0x00ff, 0x0078, 0x4e27, 0x2009, 0x0000,
-+ 0x0078, 0x4e27, 0xa1e0, 0x2329, 0x2c0c, 0xa18c, 0x00ff, 0x2061,
-+ 0x0100, 0x619a, 0x1078, 0x52de, 0x7300, 0xc3dd, 0x7302, 0x6807,
-+ 0x0002, 0x2f18, 0x6b26, 0x682b, 0x0000, 0x781f, 0x0003, 0x7803,
-+ 0x0001, 0x7807, 0x0040, 0x0f7f, 0x0e7f, 0x0c7f, 0x0d7f, 0x007c,
-+ 0x037f, 0x0e7f, 0x0c7f, 0x0078, 0x4e3e, 0x0d7f, 0x007c, 0x0c7e,
-+ 0x680c, 0xa065, 0x0040, 0x4e53, 0x6807, 0x0004, 0x6826, 0x682b,
-+ 0x0000, 0x1078, 0x4e8d, 0x0c7f, 0x0d7f, 0x007c, 0x0f7e, 0x0d7e,
-+ 0x2069, 0x7936, 0x6830, 0xa086, 0x0000, 0x00c0, 0x4e74, 0x6838,
-+ 0xa07d, 0x0040, 0x4e74, 0x6833, 0x0001, 0x683e, 0x6847, 0x0000,
-+ 0x127e, 0x0f7e, 0x2091, 0x2200, 0x027f, 0x1078, 0x1a44, 0x00c0,
-+ 0x4e77, 0x127f, 0x1078, 0x5571, 0x0d7f, 0x0f7f, 0x007c, 0x127f,
-+ 0x6843, 0x0000, 0x7803, 0x0002, 0x780c, 0xa015, 0x0040, 0x4e89,
-+ 0x6a3a, 0x780f, 0x0000, 0x6833, 0x0000, 0x683f, 0x0000, 0x0078,
-+ 0x4e74, 0x683a, 0x6836, 0x0078, 0x4e83, 0x601c, 0xa084, 0x000f,
-+ 0x1079, 0x4e93, 0x007c, 0x4e9c, 0x4ea1, 0x51a8, 0x529e, 0x4ea1,
-+ 0x51a8, 0x529e, 0x4e9c, 0x4ea1, 0x1078, 0x4c9d, 0x1078, 0x4d96,
-+ 0x007c, 0x157e, 0x137e, 0x147e, 0x0c7e, 0x0f7e, 0x6004, 0xa08a,
-+ 0x0030, 0x10c8, 0x12cd, 0x6118, 0x2178, 0x79a0, 0xd1bc, 0x0040,
-+ 0x4ebe, 0x7900, 0xd1f4, 0x0040, 0x4eba, 0x7914, 0xa18c, 0x00ff,
-+ 0x0078, 0x4ec3, 0x2009, 0x0000, 0x0078, 0x4ec3, 0xa1f8, 0x2329,
-+ 0x2f0c, 0xa18c, 0x00ff, 0x2c78, 0x2061, 0x0100, 0x619a, 0x1079,
-+ 0x4ecf, 0x0f7f, 0x0c7f, 0x147f, 0x137f, 0x157f, 0x007c, 0x4f01,
-+ 0x4f39, 0x4f51, 0x4fd0, 0x4ffd, 0x5005, 0x5026, 0x5037, 0x5048,
-+ 0x5050, 0x5061, 0x5050, 0x50a9, 0x5037, 0x50ca, 0x50d2, 0x5048,
-+ 0x50d2, 0x50e3, 0x4eff, 0x4eff, 0x4eff, 0x4eff, 0x4eff, 0x4eff,
-+ 0x4eff, 0x4eff, 0x4eff, 0x4eff, 0x4eff, 0x4eff, 0x5758, 0x576d,
-+ 0x5790, 0x57b4, 0x5026, 0x4eff, 0x5026, 0x5050, 0x4eff, 0x4f51,
-+ 0x4fd0, 0x4eff, 0x5c64, 0x5050, 0x4eff, 0x5c87, 0x5050, 0x1078,
-+ 0x12cd, 0x20a1, 0x020b, 0x1078, 0x50f8, 0x20a3, 0x5200, 0x20a3,
-+ 0x0000, 0x0d7e, 0x2069, 0x7751, 0x6804, 0xd084, 0x0040, 0x4f1b,
-+ 0x6828, 0x20a3, 0x0000, 0x017e, 0x1078, 0x2094, 0x21a2, 0x017f,
-+ 0x0d7f, 0x0078, 0x4f20, 0x0d7f, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+ 0x20a9, 0x0004, 0x2099, 0x7705, 0x53a6, 0x20a9, 0x0004, 0x2099,
-+ 0x7701, 0x53a6, 0x20a3, 0x0000, 0x6030, 0xa084, 0x00ff, 0x20a2,
-+ 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x001c, 0x1078, 0x5688,
-+ 0x007c, 0x20a1, 0x020b, 0x1078, 0x50f8, 0x20a3, 0x0500, 0x20a3,
-+ 0x0000, 0x20a3, 0x0000, 0x6030, 0xa084, 0x00ff, 0x20a2, 0x20a9,
-+ 0x0004, 0x2099, 0x7705, 0x53a6, 0x60c3, 0x0010, 0x1078, 0x5688,
-+ 0x007c, 0x20a1, 0x020b, 0x1078, 0x50f8, 0x7818, 0xa080, 0x0028,
-+ 0x2004, 0xa086, 0x007e, 0x00c0, 0x4f64, 0x20a3, 0x0400, 0x620c,
-+ 0xc2b4, 0x620e, 0x0078, 0x4f66, 0x20a3, 0x0300, 0x20a3, 0x0000,
-+ 0x7818, 0xa080, 0x0028, 0x2004, 0xa086, 0x007e, 0x00c0, 0x4f9f,
-+ 0x2099, 0x7920, 0x33a6, 0x9398, 0x33a6, 0x9398, 0x3304, 0xa084,
-+ 0x3fff, 0x20a2, 0x9398, 0x33a6, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+ 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a9, 0x0004, 0x2099, 0x7705,
-+ 0x53a6, 0x20a9, 0x0004, 0x2099, 0x7701, 0x53a6, 0x20a9, 0x0010,
-+ 0x20a3, 0x0000, 0x00f0, 0x4f90, 0x2099, 0x7928, 0x33a6, 0x20a9,
-+ 0x0007, 0x20a3, 0x0000, 0x00f0, 0x4f99, 0x0078, 0x4fbf, 0x2099,
-+ 0x7920, 0x20a9, 0x0008, 0x53a6, 0x20a9, 0x0004, 0x2099, 0x7705,
-+ 0x53a6, 0x20a9, 0x0004, 0x2099, 0x7701, 0x53a6, 0x20a9, 0x0008,
-+ 0x20a3, 0x0000, 0x00f0, 0x4fb0, 0x20a9, 0x0008, 0x20a3, 0x0000,
-+ 0x00f0, 0x4fb6, 0x2099, 0x7928, 0x20a9, 0x0008, 0x53a6, 0x20a9,
-+ 0x0008, 0x20a3, 0x0000, 0x00f0, 0x4fc1, 0x20a9, 0x000a, 0x20a3,
-+ 0x0000, 0x00f0, 0x4fc7, 0x60c3, 0x0074, 0x1078, 0x5688, 0x007c,
-+ 0x20a1, 0x020b, 0x1078, 0x50f8, 0x20a3, 0x2010, 0x20a3, 0x0014,
-+ 0x20a3, 0x0800, 0x20a3, 0x2000, 0xa006, 0x20a2, 0x20a2, 0x20a2,
-+ 0x20a2, 0x20a2, 0x0f7e, 0x2079, 0x7751, 0x7904, 0x0f7f, 0xd1ac,
-+ 0x00c0, 0x4fec, 0xa085, 0x0020, 0xd1a4, 0x0040, 0x4ff1, 0xa085,
-+ 0x0010, 0xa085, 0x0002, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+ 0x60c3, 0x0014, 0x1078, 0x5688, 0x007c, 0x20a1, 0x020b, 0x1078,
-+ 0x50f8, 0x20a3, 0x5000, 0x0078, 0x4f66, 0x20a1, 0x020b, 0x1078,
-+ 0x50f8, 0x20a3, 0x2110, 0x20a3, 0x0014, 0x20a3, 0x0000, 0x20a3,
-+ 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3,
-+ 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3,
-+ 0x0000, 0x60c3, 0x0014, 0x1078, 0x5688, 0x007c, 0x20a1, 0x020b,
-+ 0x1078, 0x516f, 0x20a3, 0x0200, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+ 0x20a3, 0x0000, 0x60c3, 0x0004, 0x1078, 0x5688, 0x007c, 0x20a1,
-+ 0x020b, 0x1078, 0x516f, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3,
-+ 0x0003, 0x20a3, 0x2a00, 0x60c3, 0x0008, 0x1078, 0x5688, 0x007c,
-+ 0x20a1, 0x020b, 0x1078, 0x516f, 0x20a3, 0x0200, 0x0078, 0x4f66,
-+ 0x20a1, 0x020b, 0x1078, 0x516f, 0x20a3, 0x0100, 0x20a3, 0x0000,
-+ 0x20a3, 0x0003, 0x7810, 0x20a2, 0x60c3, 0x0008, 0x1078, 0x5688,
-+ 0x007c, 0x0d7e, 0x20a1, 0x020b, 0x1078, 0x516f, 0x20a3, 0x0210,
-+ 0x20a3, 0x0014, 0x20a3, 0x0800, 0x7818, 0x2068, 0x6894, 0xa086,
-+ 0x0014, 0x00c0, 0x5087, 0x6998, 0xa184, 0xc000, 0x00c0, 0x5083,
-+ 0xd1ec, 0x0040, 0x507f, 0x20a3, 0x2100, 0x0078, 0x5089, 0x20a3,
-+ 0x0100, 0x0078, 0x5089, 0x20a3, 0x0400, 0x0078, 0x5089, 0x20a3,
-+ 0x0700, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x0f7e,
-+ 0x2079, 0x7751, 0x7904, 0x0f7f, 0xd1ac, 0x00c0, 0x5099, 0xa085,
-+ 0x0020, 0xd1a4, 0x0040, 0x509e, 0xa085, 0x0010, 0xa085, 0x0002,
-+ 0x20a2, 0x20a2, 0x20a2, 0x60c3, 0x0014, 0x1078, 0x5688, 0x0d7f,
-+ 0x007c, 0x20a1, 0x020b, 0x1078, 0x516f, 0x20a3, 0x0210, 0x20a3,
-+ 0x0014, 0x20a3, 0x0000, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3,
-+ 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3,
-+ 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078,
-+ 0x5688, 0x007c, 0x20a1, 0x020b, 0x1078, 0x516f, 0x20a3, 0x0200,
-+ 0x0078, 0x4f07, 0x20a1, 0x020b, 0x1078, 0x516f, 0x20a3, 0x0100,
-+ 0x20a3, 0x0000, 0x20a3, 0x0003, 0x20a3, 0x2a00, 0x60c3, 0x0008,
-+ 0x1078, 0x5688, 0x007c, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a1,
-+ 0x020b, 0x1078, 0x516f, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3,
-+ 0x000b, 0x20a3, 0x0000, 0x60c3, 0x0008, 0x1078, 0x5688, 0x007c,
-+ 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028,
-+ 0x2014, 0xa286, 0x007e, 0x00c0, 0x510b, 0x20a3, 0x22ff, 0x20a3,
-+ 0xfffe, 0x0078, 0x5139, 0xa286, 0x007f, 0x00c0, 0x5116, 0x0d7e,
-+ 0x20a3, 0x22ff, 0x20a3, 0xfffd, 0x0078, 0x512d, 0xd2bc, 0x0040,
-+ 0x5135, 0xa286, 0x0080, 0x0d7e, 0x00c0, 0x5124, 0x20a3, 0x22ff,
-+ 0x20a3, 0xfffc, 0x0078, 0x512d, 0xa2e8, 0x7820, 0x2d6c, 0x6810,
-+ 0xa085, 0x2200, 0x20a2, 0x6814, 0x20a2, 0x2069, 0x7719, 0x2da6,
-+ 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x513d, 0x20a3, 0x2200, 0x6298,
-+ 0x22a2, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, 0x0129, 0x20a3,
-+ 0x0000, 0x1078, 0x5677, 0x22a2, 0x20a3, 0x0000, 0x2fa2, 0x20a3,
-+ 0xffff, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x027f, 0x007c, 0x027e,
-+ 0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a3, 0x02ff, 0x2011, 0xfffc,
-+ 0x22a2, 0x0d7e, 0x2069, 0x7719, 0x2da6, 0x8d68, 0x2da6, 0x0d7f,
-+ 0x20a3, 0x2029, 0x20a3, 0x0000, 0x0078, 0x5141, 0x20a3, 0x0100,
-+ 0x20a3, 0x0000, 0x20a3, 0xfc02, 0x20a3, 0x0000, 0x007c, 0x027e,
-+ 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2004,
-+ 0xa092, 0x007e, 0x0048, 0x518e, 0x0d7e, 0xa0e8, 0x7820, 0x2d6c,
-+ 0x6810, 0xa085, 0x2300, 0x20a2, 0x6814, 0x20a2, 0x2069, 0x7719,
-+ 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x5196, 0x20a3, 0x2300,
-+ 0x6298, 0x22a2, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, 0x0198,
-+ 0x20a3, 0x0000, 0x1078, 0x5677, 0x22a2, 0x20a3, 0x0000, 0x7a08,
-+ 0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x027f, 0x007c,
-+ 0x0c7e, 0x0f7e, 0x6004, 0xa08a, 0x0085, 0x1048, 0x12cd, 0xa08a,
-+ 0x008c, 0x10c8, 0x12cd, 0x6118, 0x2178, 0x79a0, 0xd1bc, 0x0040,
-+ 0x51c6, 0x7900, 0xd1f4, 0x0040, 0x51c2, 0x7914, 0xa18c, 0x00ff,
-+ 0x0078, 0x51cb, 0x2009, 0x0000, 0x0078, 0x51cb, 0xa1f8, 0x2329,
-+ 0x2f0c, 0xa18c, 0x00ff, 0x2c78, 0x2061, 0x0100, 0x619a, 0xa082,
-+ 0x0085, 0x1079, 0x51d6, 0x0f7f, 0x0c7f, 0x007c, 0x51df, 0x51ea,
-+ 0x5204, 0x51dd, 0x51dd, 0x51dd, 0x51df, 0x1078, 0x12cd, 0x147e,
-+ 0x20a1, 0x020b, 0x1078, 0x5217, 0x60c3, 0x0000, 0x1078, 0x5688,
-+ 0x147f, 0x007c, 0x147e, 0x20a1, 0x020b, 0x1078, 0x5244, 0x20a3,
-+ 0x0000, 0x20a3, 0x0000, 0x7808, 0x20a2, 0x2fa2, 0x20a3, 0x0000,
-+ 0x20a3, 0xffff, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x000c,
-+ 0x1078, 0x5688, 0x147f, 0x007c, 0x147e, 0x20a1, 0x020b, 0x1078,
-+ 0x5271, 0x20a3, 0x0003, 0x20a3, 0x0300, 0x20a3, 0x0000, 0x20a3,
-+ 0x0000, 0x60c3, 0x0004, 0x1078, 0x5688, 0x147f, 0x007c, 0x027e,
-+ 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2004,
-+ 0xa092, 0x007e, 0x0048, 0x5236, 0x0d7e, 0xa0e8, 0x7820, 0x2d6c,
-+ 0x6810, 0xa085, 0x8100, 0x20a2, 0x6814, 0x20a2, 0x2069, 0x7719,
-+ 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x523e, 0x20a3, 0x8100,
-+ 0x6298, 0x22a2, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, 0x0009,
-+ 0x20a3, 0x0000, 0x0078, 0x5141, 0x027e, 0x20e1, 0x9080, 0x20e1,
-+ 0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0xa092, 0x007e, 0x0048,
-+ 0x5263, 0x0d7e, 0xa0e8, 0x7820, 0x2d6c, 0x6810, 0xa085, 0x8400,
-+ 0x20a2, 0x6814, 0x20a2, 0x2069, 0x7719, 0x2da6, 0x8d68, 0x2da6,
-+ 0x0d7f, 0x0078, 0x526b, 0x20a3, 0x8400, 0x6298, 0x22a2, 0x20a3,
-+ 0x0000, 0x6230, 0x22a2, 0x20a3, 0x00d1, 0x20a3, 0x0000, 0x0078,
-+ 0x519a, 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080,
-+ 0x0028, 0x2004, 0xa092, 0x007e, 0x0048, 0x5290, 0x0d7e, 0xa0e8,
-+ 0x7820, 0x2d6c, 0x6810, 0xa085, 0x8500, 0x20a2, 0x6814, 0x20a2,
-+ 0x2069, 0x7719, 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x5298,
-+ 0x20a3, 0x8500, 0x6298, 0x22a2, 0x20a3, 0x0000, 0x6230, 0x22a2,
-+ 0x20a3, 0x00d1, 0x20a3, 0x0000, 0x0078, 0x519a, 0x0c7e, 0x0f7e,
-+ 0x2c78, 0x7804, 0xa08a, 0x0040, 0x1048, 0x12cd, 0xa08a, 0x0050,
-+ 0x10c8, 0x12cd, 0x7918, 0x2160, 0x61a0, 0xd1bc, 0x0040, 0x52bd,
-+ 0x6100, 0xd1f4, 0x0040, 0x52b9, 0x6114, 0xa18c, 0x00ff, 0x0078,
-+ 0x52c2, 0x2009, 0x0000, 0x0078, 0x52c2, 0xa1e0, 0x2329, 0x2c0c,
-+ 0xa18c, 0x00ff, 0x2061, 0x0100, 0x619a, 0xa082, 0x0040, 0x1079,
-+ 0x52cc, 0x0f7f, 0x0c7f, 0x007c, 0x52de, 0x53c4, 0x536c, 0x54ec,
-+ 0x52dc, 0x52dc, 0x52dc, 0x52dc, 0x52dc, 0x52dc, 0x52dc, 0x5933,
-+ 0x5944, 0x5955, 0x5966, 0x52dc, 0x1078, 0x12cd, 0x0d7e, 0x157e,
-+ 0x147e, 0x20a1, 0x020b, 0x1078, 0x532f, 0x7910, 0x2168, 0x6948,
-+ 0x21a2, 0xa016, 0x22a2, 0x22a2, 0x22a2, 0x694c, 0xa184, 0x0006,
-+ 0x8004, 0x20a2, 0xd1ac, 0x0040, 0x52f9, 0x20a3, 0x0002, 0x0078,
-+ 0x5305, 0xd1b4, 0x0040, 0x5300, 0x20a3, 0x0001, 0x0078, 0x5305,
-+ 0x20a3, 0x0000, 0x2230, 0x0078, 0x5307, 0x6a80, 0x6e7c, 0x20a9,
-+ 0x0008, 0xad80, 0x0017, 0x200c, 0x810f, 0x21a2, 0x8000, 0x00f0,
-+ 0x530b, 0x22a2, 0x26a2, 0x60c3, 0x0020, 0x20e1, 0x9080, 0x6014,
-+ 0xa084, 0x0004, 0xa085, 0x0009, 0x6016, 0x2001, 0x7952, 0x2003,
-+ 0x07d0, 0x2001, 0x7951, 0x2003, 0x0009, 0x2001, 0x7957, 0x2003,
-+ 0x0002, 0x1078, 0x14fc, 0x147f, 0x157f, 0x0d7f, 0x007c, 0x20e1,
-+ 0x9080, 0x20e1, 0x4000, 0x7a18, 0xa280, 0x0023, 0x2014, 0x8210,
-+ 0xa294, 0x00ff, 0x2202, 0x8217, 0x7818, 0xa080, 0x0028, 0x2004,
-+ 0xd0bc, 0x0040, 0x5355, 0x0d7e, 0xa0e8, 0x7820, 0x2d6c, 0x6810,
-+ 0xa085, 0x0600, 0x20a2, 0x6814, 0x20a2, 0x2069, 0x7719, 0x2da6,
-+ 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x535d, 0x20a3, 0x0600, 0x6198,
-+ 0x21a2, 0x20a3, 0x0000, 0x6130, 0x21a2, 0x20a3, 0x0829, 0x20a3,
-+ 0x0000, 0x22a2, 0x20a3, 0x0000, 0x2fa2, 0x20a3, 0xffff, 0x20a3,
-+ 0x0000, 0x20a3, 0x0000, 0x007c, 0x0d7e, 0x157e, 0x137e, 0x147e,
-+ 0x20a1, 0x020b, 0x1078, 0x538c, 0x7810, 0x2068, 0x6860, 0x20a2,
-+ 0x685c, 0x20a2, 0x6880, 0x20a2, 0x687c, 0x20a2, 0xa006, 0x20a2,
-+ 0x20a2, 0x20a2, 0x20a2, 0x60c3, 0x000c, 0x1078, 0x5688, 0x147f,
-+ 0x137f, 0x157f, 0x0d7f, 0x007c, 0x027e, 0x20e1, 0x9080, 0x20e1,
-+ 0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0xd0bc, 0x0040, 0x53aa,
-+ 0x0d7e, 0xa0e8, 0x7820, 0x2d6c, 0x6810, 0xa085, 0x0500, 0x20a2,
-+ 0x6814, 0x20a2, 0x2069, 0x7719, 0x2da6, 0x8d68, 0x2da6, 0x0d7f,
-+ 0x0078, 0x53b2, 0x20a3, 0x0500, 0x6298, 0x22a2, 0x20a3, 0x0000,
-+ 0x6230, 0x22a2, 0x20a3, 0x0889, 0x20a3, 0x0000, 0x1078, 0x5677,
-+ 0x22a2, 0x20a3, 0x0000, 0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000,
-+ 0x20a3, 0x0000, 0x027f, 0x007c, 0x0d7e, 0x157e, 0x137e, 0x147e,
-+ 0x20a1, 0x020b, 0x1078, 0x54b4, 0x7810, 0x2068, 0xa016, 0x22a2,
-+ 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x7810, 0xa084, 0xf000, 0x00c0,
-+ 0x53e1, 0x7810, 0xa084, 0x0700, 0x8007, 0x1079, 0x53e9, 0x0078,
-+ 0x53e4, 0xa006, 0x1079, 0x53e9, 0x147f, 0x137f, 0x157f, 0x0d7f,
-+ 0x007c, 0x53f3, 0x5455, 0x5459, 0x547c, 0x5489, 0x549b, 0x549f,
-+ 0x53f1, 0x1078, 0x12cd, 0x017e, 0x037e, 0x694c, 0xa18c, 0x0003,
-+ 0xa186, 0x0000, 0x00c0, 0x5406, 0x6b78, 0x23a2, 0x6868, 0x20a2,
-+ 0x6864, 0x20a2, 0x037f, 0x017f, 0x0078, 0x5480, 0xa186, 0x0001,
-+ 0x00c0, 0x5450, 0x6b78, 0x23a2, 0x6868, 0x20a2, 0x6864, 0x20a2,
-+ 0x22a2, 0x6874, 0x20a2, 0x22a2, 0x687c, 0x20a2, 0x2009, 0x0018,
-+ 0xa384, 0x0300, 0x0040, 0x544f, 0xd3c4, 0x0040, 0x5421, 0x687c,
-+ 0xa108, 0xd3cc, 0x0040, 0x5426, 0x6874, 0xa108, 0x157e, 0x20a9,
-+ 0x000d, 0xad80, 0x0020, 0x201c, 0x831f, 0x23a2, 0x8000, 0x00f0,
-+ 0x542b, 0x157f, 0x22a2, 0x22a2, 0x22a2, 0xa184, 0x0003, 0x0040,
-+ 0x544f, 0x20a1, 0x020b, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a3,
-+ 0x0700, 0x6298, 0x22a2, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3,
-+ 0x0898, 0x20a2, 0x1078, 0x5677, 0x22a2, 0x20a3, 0x0000, 0x61c2,
-+ 0x037f, 0x017f, 0x1078, 0x5688, 0x007c, 0x20a3, 0x0008, 0x0078,
-+ 0x547e, 0x20a3, 0x0302, 0x22a2, 0x22a2, 0x22a2, 0x20a3, 0x0012,
-+ 0x22a2, 0x20a3, 0x0008, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x20a3,
-+ 0x7000, 0x20a3, 0x0500, 0x22a2, 0x20a3, 0x000a, 0x22a2, 0x22a2,
-+ 0x20a3, 0x2500, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x60c3,
-+ 0x0032, 0x1078, 0x5688, 0x007c, 0x20a3, 0x0028, 0x22a2, 0x22a2,
-+ 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x60c3, 0x0018, 0x1078, 0x5688,
-+ 0x007c, 0x20a3, 0x0100, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2,
-+ 0x20a3, 0x0008, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x60c3, 0x0020,
-+ 0x1078, 0x5688, 0x007c, 0x20a3, 0x0008, 0x0078, 0x547e, 0x037e,
-+ 0x7b10, 0xa384, 0xff00, 0x7812, 0xa384, 0x00ff, 0x8001, 0x00c0,
-+ 0x54ad, 0x22a2, 0x037f, 0x0078, 0x547e, 0x20a3, 0x0800, 0x22a2,
-+ 0x20a2, 0x037f, 0x0078, 0x5480, 0x027e, 0x20e1, 0x9080, 0x20e1,
-+ 0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0xd0bc, 0x0040, 0x54d2,
-+ 0x0d7e, 0xa0e8, 0x7820, 0x2d6c, 0x6810, 0xa085, 0x0700, 0x20a2,
-+ 0x6814, 0x20a2, 0x2069, 0x7719, 0x2da6, 0x8d68, 0x2da6, 0x0d7f,
-+ 0x0078, 0x54da, 0x20a3, 0x0700, 0x6298, 0x22a2, 0x20a3, 0x0000,
-+ 0x6230, 0x22a2, 0x20a3, 0x0898, 0x20a3, 0x0000, 0x1078, 0x5677,
-+ 0x22a2, 0x20a3, 0x0000, 0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000,
-+ 0x20a3, 0x0000, 0x027f, 0x007c, 0x0d7e, 0x157e, 0x137e, 0x147e,
-+ 0x017e, 0x037e, 0x7810, 0xa084, 0x0700, 0x8007, 0x1079, 0x54ff,
-+ 0x037f, 0x017f, 0x147f, 0x137f, 0x157f, 0x0d7f, 0x007c, 0x5507,
-+ 0x5507, 0x5509, 0x5507, 0x5507, 0x5507, 0x552e, 0x5507, 0x1078,
-+ 0x12cd, 0x7910, 0xa18c, 0xf8ff, 0xa18d, 0x0600, 0x7912, 0x20a1,
-+ 0x020b, 0x2009, 0x0003, 0x1078, 0x5538, 0x0d7e, 0x2069, 0x7751,
-+ 0x6804, 0xd0bc, 0x0040, 0x5523, 0x682c, 0xa084, 0x00ff, 0x8007,
-+ 0x20a2, 0x0078, 0x5525, 0x20a3, 0x3f00, 0x0d7f, 0x22a2, 0x22a2,
-+ 0x22a2, 0x60c3, 0x0001, 0x1078, 0x5688, 0x007c, 0x20a1, 0x020b,
-+ 0x2009, 0x0003, 0x1078, 0x5538, 0x20a3, 0x7f00, 0x0078, 0x5526,
-+ 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028,
-+ 0x2004, 0xd0bc, 0x0040, 0x5556, 0x0d7e, 0xa0e8, 0x7820, 0x2d6c,
-+ 0x6810, 0xa085, 0x0100, 0x20a2, 0x6814, 0x20a2, 0x2069, 0x7719,
-+ 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x555e, 0x20a3, 0x0100,
-+ 0x6298, 0x22a2, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, 0x0888,
-+ 0xa18d, 0x0008, 0x21a2, 0x1078, 0x5677, 0x22a2, 0x20a3, 0x0000,
-+ 0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x027f,
-+ 0x007c, 0x0e7e, 0x0d7e, 0x0c7e, 0x057e, 0x047e, 0x037e, 0x2061,
-+ 0x0100, 0x2071, 0x7700, 0x6130, 0x7818, 0x2068, 0x68a0, 0x2028,
-+ 0xd0bc, 0x00c0, 0x558a, 0xa080, 0x2329, 0x2014, 0xa294, 0x00ff,
-+ 0x0078, 0x558e, 0x6910, 0x6a14, 0x7364, 0x7468, 0x781c, 0xa086,
-+ 0x0006, 0x0040, 0x55e2, 0xd5bc, 0x0040, 0x559e, 0xa185, 0x0100,
-+ 0x6062, 0x6266, 0x636a, 0x646e, 0x0078, 0x55a4, 0x6063, 0x0100,
-+ 0x6266, 0x606b, 0x0000, 0x616e, 0x6073, 0x0809, 0x6077, 0x0008,
-+ 0x688c, 0x8000, 0xa084, 0x00ff, 0x688e, 0x8007, 0x607a, 0x607f,
-+ 0x0000, 0x2f00, 0x6082, 0x7808, 0x6086, 0x7810, 0x2070, 0x7014,
-+ 0x608a, 0x7010, 0x608e, 0x700c, 0x60c6, 0x7008, 0x60ca, 0x686c,
-+ 0x60ce, 0x60ab, 0x0036, 0x60af, 0x95d5, 0x60d7, 0x0000, 0xa582,
-+ 0x0080, 0x0048, 0x55d6, 0x6a00, 0xd2f4, 0x0040, 0x55d4, 0x6a14,
-+ 0xa294, 0x00ff, 0x0078, 0x55d6, 0x2011, 0x0000, 0x629e, 0x6017,
-+ 0x0016, 0x1078, 0x470b, 0x037f, 0x047f, 0x057f, 0x0c7f, 0x0d7f,
-+ 0x0e7f, 0x007c, 0x7810, 0x2070, 0x704c, 0xa084, 0x0003, 0xa086,
-+ 0x0002, 0x0040, 0x5631, 0xd5bc, 0x0040, 0x55f6, 0xa185, 0x0100,
-+ 0x6062, 0x6266, 0x636a, 0x646e, 0x0078, 0x55fc, 0x6063, 0x0100,
-+ 0x6266, 0x606b, 0x0000, 0x616e, 0x6073, 0x0880, 0x6077, 0x0008,
-+ 0x688c, 0x8000, 0xa084, 0x00ff, 0x688e, 0x8007, 0x607a, 0x607f,
-+ 0x0000, 0x2f00, 0x6086, 0x7808, 0x6082, 0x7060, 0x608a, 0x705c,
-+ 0x608e, 0x7080, 0x60c6, 0x707c, 0x60ca, 0x686c, 0x60ce, 0x60ab,
-+ 0x0036, 0x60af, 0x95d5, 0x60d7, 0x0000, 0xa582, 0x0080, 0x0048,
-+ 0x562c, 0x6a00, 0xd2f4, 0x0040, 0x562a, 0x6a14, 0xa294, 0x00ff,
-+ 0x0078, 0x562c, 0x2011, 0x0000, 0x629e, 0x6017, 0x0012, 0x0078,
-+ 0x55d9, 0xd5bc, 0x0040, 0x563c, 0xa185, 0x0700, 0x6062, 0x6266,
-+ 0x636a, 0x646e, 0x0078, 0x5642, 0x6063, 0x0700, 0x6266, 0x606b,
-+ 0x0000, 0x616e, 0x6073, 0x0898, 0x6077, 0x0000, 0x688c, 0x8000,
-+ 0xa084, 0x00ff, 0x688e, 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00,
-+ 0x6086, 0x7808, 0x6082, 0x7014, 0x608a, 0x7010, 0x608e, 0x700c,
-+ 0x60c6, 0x7008, 0x60ca, 0x686c, 0x60ce, 0x60ab, 0x0036, 0x60af,
-+ 0x95d5, 0x60d7, 0x0000, 0xa582, 0x0080, 0x0048, 0x5672, 0x6a00,
-+ 0xd2f4, 0x0040, 0x5670, 0x6a14, 0xa294, 0x00ff, 0x0078, 0x5672,
-+ 0x2011, 0x0000, 0x629e, 0x6017, 0x0016, 0x0078, 0x55d9, 0x7a18,
-+ 0xa280, 0x0023, 0x2014, 0x8210, 0xa294, 0x00ff, 0x2202, 0x8217,
-+ 0x007c, 0x0d7e, 0x2069, 0x7936, 0x6843, 0x0001, 0x0d7f, 0x007c,
-+ 0x20e1, 0x9080, 0x60a3, 0x0056, 0x60a7, 0x9575, 0x1078, 0x5693,
-+ 0x1078, 0x46fb, 0x007c, 0x007e, 0x6014, 0xa084, 0x0004, 0xa085,
-+ 0x0009, 0x6016, 0x007f, 0x007c, 0x007e, 0x0c7e, 0x2061, 0x0100,
-+ 0x6014, 0xa084, 0x0004, 0xa085, 0x0008, 0x6016, 0x0c7f, 0x007f,
-+ 0x007c, 0x0c7e, 0x0d7e, 0x017e, 0x027e, 0x1078, 0x4706, 0x2061,
-+ 0x0100, 0x2069, 0x0140, 0x6904, 0xa194, 0x4000, 0x0040, 0x56e6,
-+ 0x1078, 0x569c, 0x6803, 0x1000, 0x6803, 0x0000, 0x0c7e, 0x2061,
-+ 0x7936, 0x6128, 0xa192, 0x0002, 0x00c8, 0x56d3, 0x8108, 0x612a,
-+ 0x6124, 0x0c7f, 0x81ff, 0x0040, 0x56e1, 0x1078, 0x46fb, 0x1078,
-+ 0x5693, 0x0078, 0x56e1, 0x6124, 0xa1e5, 0x0000, 0x0040, 0x56de,
-+ 0x1078, 0x76c7, 0x2009, 0x0014, 0x1078, 0x5d41, 0x0c7f, 0x0078,
-+ 0x56e1, 0x027f, 0x017f, 0x0d7f, 0x0c7f, 0x007c, 0x1078, 0x3591,
-+ 0x0078, 0x56e1, 0x0c7e, 0x0d7e, 0x0e7e, 0x017e, 0x027e, 0x1078,
-+ 0x4714, 0x2071, 0x7936, 0x713c, 0x81ff, 0x0040, 0x5714, 0x2061,
-+ 0x0100, 0x2069, 0x0140, 0x6904, 0xa194, 0x4000, 0x0040, 0x571a,
-+ 0x6803, 0x1000, 0x6803, 0x0000, 0x037e, 0x2019, 0x0001, 0x1078,
-+ 0x5880, 0x037f, 0x713c, 0x2160, 0x1078, 0x76c7, 0x2009, 0x004a,
-+ 0x1078, 0x5d41, 0x0078, 0x5714, 0x027f, 0x017f, 0x0e7f, 0x0d7f,
-+ 0x0c7f, 0x007c, 0x7144, 0xa192, 0x0002, 0x00c8, 0x5704, 0x8108,
-+ 0x7146, 0x1078, 0x470b, 0x0078, 0x5714, 0x0e7e, 0x0d7e, 0x0c7e,
-+ 0x067e, 0x057e, 0x047e, 0x007e, 0x127e, 0x2091, 0x8000, 0x6018,
-+ 0x2068, 0x6ca0, 0x2071, 0x7936, 0x7018, 0x2068, 0x8dff, 0x0040,
-+ 0x574f, 0x68a0, 0xa406, 0x0040, 0x5741, 0x6854, 0x2068, 0x0078,
-+ 0x5736, 0x6010, 0x2060, 0x643c, 0x6540, 0x6e48, 0x2d60, 0x1078,
-+ 0x3991, 0x0040, 0x574f, 0x1078, 0x5a1a, 0xa085, 0x0001, 0x127f,
-+ 0x007f, 0x047f, 0x057f, 0x067f, 0x0c7f, 0x0d7f, 0x0e7f, 0x007c,
-+ 0x157e, 0x147e, 0x20a1, 0x020b, 0x1078, 0x50f8, 0x20a3, 0x0f00,
-+ 0x20a3, 0x0000, 0x20a3, 0x0000, 0x7808, 0x20a2, 0x60c3, 0x0008,
-+ 0x1078, 0x5688, 0x147f, 0x157f, 0x007c, 0x157e, 0x147e, 0x20a1,
-+ 0x020b, 0x1078, 0x516f, 0x20a3, 0x0200, 0x20a3, 0x0000, 0x20a9,
-+ 0x0006, 0x2011, 0x7740, 0x2019, 0x7741, 0x23a6, 0x22a6, 0xa398,
-+ 0x0002, 0xa290, 0x0002, 0x00f0, 0x577d, 0x20a3, 0x0000, 0x20a3,
-+ 0x0000, 0x60c3, 0x001c, 0x1078, 0x5688, 0x147f, 0x157f, 0x007c,
-+ 0x157e, 0x147e, 0x017e, 0x027e, 0x20a1, 0x020b, 0x1078, 0x514f,
-+ 0x1078, 0x5166, 0x7810, 0x007e, 0xa080, 0x0015, 0x2098, 0x7808,
-+ 0xa088, 0x0002, 0x21a8, 0x53a6, 0xa080, 0x0004, 0x8003, 0x60c2,
-+ 0x007f, 0xa080, 0x0001, 0x2004, 0x7812, 0x1078, 0x5688, 0x027f,
-+ 0x017f, 0x147f, 0x157f, 0x007c, 0x157e, 0x147e, 0x20a1, 0x020b,
-+ 0x1078, 0x50f8, 0x20a3, 0x6200, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+ 0x7808, 0x20a2, 0x60c3, 0x0008, 0x1078, 0x5688, 0x147f, 0x157f,
-+ 0x007c, 0x0e7e, 0x0c7e, 0x007e, 0x127e, 0x2091, 0x8000, 0x2071,
-+ 0x7936, 0x700c, 0x2060, 0x8cff, 0x0040, 0x57e5, 0x1078, 0x6be3,
-+ 0x00c0, 0x57dc, 0x1078, 0x5f6d, 0x600c, 0x007e, 0x1078, 0x5d1a,
-+ 0x1078, 0x5a1a, 0x0c7f, 0x0078, 0x57d3, 0x700f, 0x0000, 0x700b,
-+ 0x0000, 0x127f, 0x007f, 0x0c7f, 0x0e7f, 0x007c, 0x127e, 0x157e,
-+ 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x027e, 0x017e, 0x007e, 0x2091,
-+ 0x8000, 0x2069, 0x0100, 0x2079, 0x0140, 0x2071, 0x7936, 0x7024,
-+ 0x2060, 0x8cff, 0x0040, 0x583e, 0x1078, 0x569c, 0x68c3, 0x0000,
-+ 0x1078, 0x4706, 0x2009, 0x0013, 0x1078, 0x5d41, 0x20a9, 0x01f4,
-+ 0x6824, 0xd094, 0x0040, 0x5821, 0x6827, 0x0004, 0x7804, 0xa084,
-+ 0x4000, 0x0040, 0x5833, 0x7803, 0x1000, 0x7803, 0x0000, 0x0078,
-+ 0x5833, 0xd084, 0x0040, 0x5828, 0x6827, 0x0001, 0x0078, 0x582a,
-+ 0x00f0, 0x5810, 0x7804, 0xa084, 0x1000, 0x0040, 0x5833, 0x7803,
-+ 0x0100, 0x7803, 0x0000, 0x6824, 0x007f, 0x017f, 0x027f, 0x0c7f,
-+ 0x0d7f, 0x0e7f, 0x0f7f, 0x157f, 0x127f, 0x007c, 0x2001, 0x7700,
-+ 0x2004, 0xa096, 0x0001, 0x0040, 0x5876, 0xa096, 0x0004, 0x0040,
-+ 0x5876, 0x6817, 0x0008, 0x68c3, 0x0000, 0x2011, 0x3558, 0x1078,
-+ 0x4689, 0x20a9, 0x01f4, 0x6824, 0xd094, 0x0040, 0x5864, 0x6827,
-+ 0x0004, 0x7804, 0xa084, 0x4000, 0x0040, 0x5876, 0x7803, 0x1000,
-+ 0x7803, 0x0000, 0x0078, 0x5876, 0xd084, 0x0040, 0x586b, 0x6827,
-+ 0x0001, 0x0078, 0x586d, 0x00f0, 0x5853, 0x7804, 0xa084, 0x1000,
-+ 0x0040, 0x5876, 0x7803, 0x0100, 0x7803, 0x0000, 0x007f, 0x017f,
-+ 0x027f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x157f, 0x127f, 0x007c,
-+ 0x127e, 0x157e, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x027e, 0x017e,
-+ 0x007e, 0x2091, 0x8000, 0x2069, 0x0100, 0x2079, 0x0140, 0x2071,
-+ 0x7936, 0x703c, 0x2060, 0x8cff, 0x0040, 0x58ce, 0x6817, 0x0010,
-+ 0x68cb, 0x0000, 0x68c7, 0x0000, 0x1078, 0x4714, 0x1078, 0x1c13,
-+ 0xa39d, 0x0000, 0x00c0, 0x58a8, 0x2009, 0x0049, 0x1078, 0x5d41,
-+ 0x20a9, 0x03e8, 0x6824, 0xd094, 0x0040, 0x58bb, 0x6827, 0x0004,
-+ 0x7804, 0xa084, 0x4000, 0x0040, 0x58cd, 0x7803, 0x1000, 0x7803,
-+ 0x0000, 0x0078, 0x58cd, 0xd094, 0x0040, 0x58c2, 0x6827, 0x0002,
-+ 0x0078, 0x58c4, 0x00f0, 0x58aa, 0x7804, 0xa084, 0x1000, 0x0040,
-+ 0x58cd, 0x7803, 0x0100, 0x7803, 0x0000, 0x6824, 0x007f, 0x017f,
-+ 0x027f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x157f, 0x127f, 0x007c,
-+ 0x0d7e, 0x127e, 0x2091, 0x8000, 0x2069, 0x7936, 0x6a06, 0x127f,
-+ 0x0d7f, 0x007c, 0x0d7e, 0x127e, 0x2091, 0x8000, 0x2069, 0x7936,
-+ 0x6a32, 0x127f, 0x0d7f, 0x007c, 0x0f7e, 0x0e7e, 0x0c7e, 0x067e,
-+ 0x007e, 0x127e, 0x2071, 0x7936, 0x7614, 0x2660, 0x2678, 0x2091,
-+ 0x8000, 0x8cff, 0x0040, 0x592c, 0x601c, 0xa206, 0x00c0, 0x5927,
-+ 0x7014, 0xac36, 0x00c0, 0x5906, 0x660c, 0x7616, 0x7010, 0xac36,
-+ 0x00c0, 0x5914, 0x2c00, 0xaf36, 0x0040, 0x5912, 0x2f00, 0x7012,
-+ 0x0078, 0x5914, 0x7013, 0x0000, 0x660c, 0x067e, 0x2c00, 0xaf06,
-+ 0x0040, 0x591d, 0x7e0e, 0x0078, 0x591e, 0x2678, 0x600f, 0x0000,
-+ 0x1078, 0x6bb6, 0x1078, 0x5a1a, 0x0c7f, 0x0078, 0x58f9, 0x2c78,
-+ 0x600c, 0x2060, 0x0078, 0x58f9, 0x127f, 0x007f, 0x067f, 0x0c7f,
-+ 0x0e7f, 0x0f7f, 0x007c, 0x157e, 0x147e, 0x20a1, 0x020b, 0x1078,
-+ 0x532f, 0x7810, 0x20a2, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2,
-+ 0x20a3, 0x4000, 0x0078, 0x5975, 0x157e, 0x147e, 0x20a1, 0x020b,
-+ 0x1078, 0x532f, 0x7810, 0x20a2, 0xa006, 0x20a2, 0x20a2, 0x20a2,
-+ 0x20a2, 0x20a3, 0x2000, 0x0078, 0x5975, 0x157e, 0x147e, 0x20a1,
-+ 0x020b, 0x1078, 0x532f, 0x7810, 0x20a2, 0xa006, 0x20a2, 0x20a2,
-+ 0x20a2, 0x20a2, 0x20a3, 0x0400, 0x0078, 0x5975, 0x157e, 0x147e,
-+ 0x20a1, 0x020b, 0x1078, 0x532f, 0x7810, 0x20a2, 0xa006, 0x20a2,
-+ 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x0200, 0x1078, 0x5a25, 0x60c3,
-+ 0x0020, 0x1078, 0x5688, 0x147f, 0x157f, 0x007c, 0x127e, 0x0c7e,
-+ 0x2091, 0x8000, 0x2061, 0x0100, 0x6120, 0xd1b4, 0x00c0, 0x598d,
-+ 0xd1bc, 0x00c0, 0x59d7, 0x0078, 0x5a17, 0x2009, 0x017f, 0x200b,
-+ 0x00a1, 0x157e, 0x007e, 0x0d7e, 0x2069, 0x0140, 0x20a9, 0x001e,
-+ 0x2009, 0x0169, 0x6804, 0xa084, 0x4000, 0x0040, 0x59ce, 0x6020,
-+ 0xd0b4, 0x0040, 0x59ce, 0x6024, 0xd094, 0x00c0, 0x59ce, 0x2104,
-+ 0xa084, 0x000f, 0xa086, 0x0004, 0x00c0, 0x59ce, 0x00f0, 0x599a,
-+ 0x027e, 0x6198, 0xa18c, 0x00ff, 0x8107, 0x6130, 0xa18c, 0x00ff,
-+ 0xa10d, 0x6088, 0x628c, 0x618e, 0x608b, 0xbc91, 0x6043, 0x0001,
-+ 0x6043, 0x0000, 0x608a, 0x628e, 0x6024, 0xd094, 0x00c0, 0x59cd,
-+ 0x6a04, 0xa294, 0x4000, 0x00c0, 0x59c4, 0x027f, 0x0d7f, 0x007f,
-+ 0x157f, 0x2009, 0x017f, 0x200b, 0x0000, 0x0078, 0x5a17, 0x2009,
-+ 0x017f, 0x200b, 0x00a1, 0x157e, 0x007e, 0x0d7e, 0x2069, 0x0140,
-+ 0x20a9, 0x001e, 0x2009, 0x0169, 0x6804, 0xa084, 0x4000, 0x0040,
-+ 0x5a10, 0x6020, 0xd0bc, 0x0040, 0x5a10, 0x2104, 0xa084, 0x000f,
-+ 0xa086, 0x0004, 0x00c0, 0x5a10, 0x00f0, 0x59e4, 0x027e, 0x6164,
-+ 0xa18c, 0x00ff, 0x8107, 0x6130, 0xa18c, 0x00ff, 0xa10d, 0x6088,
-+ 0x628c, 0x608b, 0xbc91, 0x618e, 0x6043, 0x0001, 0x6043, 0x0000,
-+ 0x608a, 0x628e, 0x6a04, 0xa294, 0x4000, 0x00c0, 0x5a0a, 0x027f,
-+ 0x0d7f, 0x007f, 0x157f, 0x2009, 0x017f, 0x200b, 0x0000, 0x0c7f,
-+ 0x127f, 0x007c, 0x0e7e, 0x2071, 0x7936, 0x7020, 0xa005, 0x0040,
-+ 0x5a23, 0x8001, 0x7022, 0x0e7f, 0x007c, 0x20a9, 0x0008, 0x20a2,
-+ 0x00f0, 0x5a27, 0x20a2, 0x20a2, 0x007c, 0x0f7e, 0x0e7e, 0x0d7e,
-+ 0x0c7e, 0x077e, 0x067e, 0x007e, 0x127e, 0x2091, 0x8000, 0x2071,
-+ 0x7936, 0x7614, 0x2660, 0x2678, 0x2039, 0x0001, 0x87ff, 0x0040,
-+ 0x5abd, 0x8cff, 0x0040, 0x5abd, 0x601c, 0xa086, 0x0006, 0x00c0,
-+ 0x5ab8, 0x88ff, 0x0040, 0x5a54, 0x2800, 0xac06, 0x00c0, 0x5ab8,
-+ 0x2039, 0x0000, 0x0078, 0x5a58, 0x6018, 0xa206, 0x00c0, 0x5ab8,
-+ 0x7024, 0xac06, 0x00c0, 0x5a86, 0x2069, 0x0100, 0x68c0, 0xa005,
-+ 0x0040, 0x5a81, 0x6817, 0x0008, 0x68c3, 0x0000, 0x1078, 0x5b4a,
-+ 0x7027, 0x0000, 0x037e, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000,
-+ 0x0040, 0x5a76, 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100,
-+ 0x6824, 0xd084, 0x0040, 0x5a7e, 0x6827, 0x0001, 0x037f, 0x0078,
-+ 0x5a86, 0x6003, 0x0009, 0x630a, 0x0078, 0x5ab8, 0x7014, 0xac36,
-+ 0x00c0, 0x5a8c, 0x660c, 0x7616, 0x7010, 0xac36, 0x00c0, 0x5a9a,
-+ 0x2c00, 0xaf36, 0x0040, 0x5a98, 0x2f00, 0x7012, 0x0078, 0x5a9a,
-+ 0x7013, 0x0000, 0x660c, 0x067e, 0x2c00, 0xaf06, 0x0040, 0x5aa3,
-+ 0x7e0e, 0x0078, 0x5aa4, 0x2678, 0x600f, 0x0000, 0x6010, 0x2068,
-+ 0x1078, 0x6a58, 0x0040, 0x5aae, 0x1078, 0x75fd, 0x1078, 0x6bb6,
-+ 0x1078, 0x5a1a, 0x88ff, 0x00c0, 0x5ac7, 0x0c7f, 0x0078, 0x5a3e,
-+ 0x2c78, 0x600c, 0x2060, 0x0078, 0x5a3e, 0xa006, 0x127f, 0x007f,
-+ 0x067f, 0x077f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x007c, 0x6017,
-+ 0x0000, 0x0c7f, 0xa8c5, 0x0001, 0x0078, 0x5abe, 0x0f7e, 0x0e7e,
-+ 0x0d7e, 0x0c7e, 0x067e, 0x027e, 0x007e, 0x127e, 0x2091, 0x8000,
-+ 0x2071, 0x7936, 0x7638, 0x2660, 0x2678, 0x8cff, 0x0040, 0x5b39,
-+ 0x601c, 0xa086, 0x0006, 0x00c0, 0x5b34, 0x88ff, 0x0040, 0x5aee,
-+ 0x2800, 0xac06, 0x00c0, 0x5b34, 0x0078, 0x5af2, 0x6018, 0xa206,
-+ 0x00c0, 0x5b34, 0x703c, 0xac06, 0x00c0, 0x5b04, 0x037e, 0x2019,
-+ 0x0001, 0x1078, 0x5880, 0x7033, 0x0000, 0x703f, 0x0000, 0x7043,
-+ 0x0000, 0x7047, 0x0000, 0x037f, 0x7038, 0xac36, 0x00c0, 0x5b0a,
-+ 0x660c, 0x763a, 0x7034, 0xac36, 0x00c0, 0x5b18, 0x2c00, 0xaf36,
-+ 0x0040, 0x5b16, 0x2f00, 0x7036, 0x0078, 0x5b18, 0x7037, 0x0000,
-+ 0x660c, 0x067e, 0x2c00, 0xaf06, 0x0040, 0x5b21, 0x7e0e, 0x0078,
-+ 0x5b22, 0x2678, 0x600f, 0x0000, 0x6010, 0x2068, 0x1078, 0x6a58,
-+ 0x0040, 0x5b2c, 0x1078, 0x75fd, 0x1078, 0x6bb6, 0x88ff, 0x00c0,
-+ 0x5b43, 0x0c7f, 0x0078, 0x5add, 0x2c78, 0x600c, 0x2060, 0x0078,
-+ 0x5add, 0xa006, 0x127f, 0x007f, 0x027f, 0x067f, 0x0c7f, 0x0d7f,
-+ 0x0e7f, 0x0f7f, 0x007c, 0x6017, 0x0000, 0x0c7f, 0xa8c5, 0x0001,
-+ 0x0078, 0x5b3a, 0x0e7e, 0x2071, 0x7936, 0x2001, 0x7700, 0x2004,
-+ 0xa086, 0x0002, 0x00c0, 0x5b58, 0x7007, 0x0005, 0x0078, 0x5b5a,
-+ 0x7007, 0x0000, 0x0e7f, 0x007c, 0x0f7e, 0x0e7e, 0x0c7e, 0x067e,
-+ 0x027e, 0x007e, 0x127e, 0x2091, 0x8000, 0x2071, 0x7936, 0x2c10,
-+ 0x7638, 0x2660, 0x2678, 0x8cff, 0x0040, 0x5b9a, 0x2200, 0xac06,
-+ 0x00c0, 0x5b95, 0x7038, 0xac36, 0x00c0, 0x5b78, 0x660c, 0x763a,
-+ 0x7034, 0xac36, 0x00c0, 0x5b86, 0x2c00, 0xaf36, 0x0040, 0x5b84,
-+ 0x2f00, 0x7036, 0x0078, 0x5b86, 0x7037, 0x0000, 0x660c, 0x2c00,
-+ 0xaf06, 0x0040, 0x5b8e, 0x7e0e, 0x0078, 0x5b8f, 0x2678, 0x600f,
-+ 0x0000, 0xa085, 0x0001, 0x0078, 0x5b9a, 0x2c78, 0x600c, 0x2060,
-+ 0x0078, 0x5b6b, 0x127f, 0x007f, 0x027f, 0x067f, 0x0c7f, 0x0e7f,
-+ 0x0f7f, 0x007c, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x067e, 0x007e,
-+ 0x127e, 0x2091, 0x8000, 0x2071, 0x7936, 0x760c, 0x2660, 0x2678,
-+ 0x8cff, 0x0040, 0x5c33, 0x6018, 0xa080, 0x0028, 0x2004, 0xa206,
-+ 0x00c0, 0x5c2e, 0x7024, 0xac06, 0x00c0, 0x5be1, 0x2069, 0x0100,
-+ 0x68c0, 0xa005, 0x0040, 0x5be1, 0x1078, 0x569c, 0x68c3, 0x0000,
-+ 0x1078, 0x5b4a, 0x7027, 0x0000, 0x037e, 0x2069, 0x0140, 0x6b04,
-+ 0xa384, 0x1000, 0x0040, 0x5bd8, 0x6803, 0x0100, 0x6803, 0x0000,
-+ 0x2069, 0x0100, 0x6824, 0xd084, 0x0040, 0x5be0, 0x6827, 0x0001,
-+ 0x037f, 0x700c, 0xac36, 0x00c0, 0x5be7, 0x660c, 0x760e, 0x7008,
-+ 0xac36, 0x00c0, 0x5bf5, 0x2c00, 0xaf36, 0x0040, 0x5bf3, 0x2f00,
-+ 0x700a, 0x0078, 0x5bf5, 0x700b, 0x0000, 0x660c, 0x067e, 0x2c00,
-+ 0xaf06, 0x0040, 0x5bfe, 0x7e0e, 0x0078, 0x5bff, 0x2678, 0x600f,
-+ 0x0000, 0x1078, 0x6bcf, 0x00c0, 0x5c09, 0x1078, 0x22d7, 0x0078,
-+ 0x5c25, 0x1078, 0x6be3, 0x00c0, 0x5c11, 0x1078, 0x5f6d, 0x0078,
-+ 0x5c25, 0x6010, 0x2068, 0x1078, 0x6a58, 0x0040, 0x5c25, 0x601c,
-+ 0xa086, 0x0003, 0x00c0, 0x5c3b, 0x6837, 0x0103, 0x6b4a, 0x6847,
-+ 0x0000, 0x1078, 0x3b92, 0x1078, 0x6ba9, 0x6003, 0x0000, 0x1078,
-+ 0x6bb6, 0x1078, 0x5a1a, 0x0c7f, 0x0078, 0x5bb0, 0x2c78, 0x600c,
-+ 0x2060, 0x0078, 0x5bb0, 0x127f, 0x007f, 0x067f, 0x0c7f, 0x0d7f,
-+ 0x0e7f, 0x0f7f, 0x007c, 0x601c, 0xa086, 0x0006, 0x00c0, 0x5c1c,
-+ 0x1078, 0x75fd, 0x0078, 0x5c25, 0x037e, 0x157e, 0x137e, 0x147e,
-+ 0x3908, 0xa006, 0xa190, 0x0020, 0x221c, 0xa39e, 0x2149, 0x00c0,
-+ 0x5c55, 0x8210, 0x8000, 0x0078, 0x5c4c, 0xa005, 0x0040, 0x5c5f,
-+ 0x20a9, 0x0020, 0x2198, 0xa110, 0x22a0, 0x22c8, 0x53a3, 0x147f,
-+ 0x137f, 0x157f, 0x037f, 0x007c, 0x0d7e, 0x20a1, 0x020b, 0x1078,
-+ 0x516f, 0x20a3, 0x0200, 0x20a3, 0x0014, 0x60c3, 0x0014, 0x20a3,
-+ 0x0000, 0x20a3, 0x0000, 0x20a3, 0x514c, 0x20a3, 0x4f47, 0x20a3,
-+ 0x4943, 0x20a3, 0x2020, 0x20a3, 0x0004, 0x20a3, 0x7878, 0x20a3,
-+ 0x0000, 0x20a3, 0x0000, 0x1078, 0x5688, 0x0d7f, 0x007c, 0x20a1,
-+ 0x020b, 0x1078, 0x516f, 0x20a3, 0x0210, 0x20a3, 0x0018, 0x20a3,
-+ 0x0800, 0x7810, 0xa084, 0xff00, 0x20a2, 0x20a3, 0x0000, 0x20a3,
-+ 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x7810,
-+ 0xa084, 0x00ff, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3,
-+ 0x0018, 0x1078, 0x5688, 0x007c, 0x2061, 0x7e00, 0x2a70, 0x7060,
-+ 0x7046, 0x704b, 0x7e00, 0x007c, 0x0e7e, 0x127e, 0x2071, 0x7700,
-+ 0x2091, 0x8000, 0x7544, 0xa582, 0x0001, 0x0048, 0x5ce6, 0x7048,
-+ 0x2060, 0x6000, 0xa086, 0x0000, 0x0040, 0x5cd2, 0xace0, 0x0008,
-+ 0x7054, 0xac02, 0x00c8, 0x5cce, 0x0078, 0x5cc1, 0x2061, 0x7e00,
-+ 0x0078, 0x5cc1, 0x6003, 0x0008, 0x8529, 0x7546, 0xaca8, 0x0008,
-+ 0x7054, 0xa502, 0x00c8, 0x5ce2, 0x754a, 0xa085, 0x0001, 0x127f,
-+ 0x0e7f, 0x007c, 0x704b, 0x7e00, 0x0078, 0x5cdd, 0xa006, 0x0078,
-+ 0x5cdf, 0x0e7e, 0x2071, 0x7700, 0x7544, 0xa582, 0x0001, 0x0048,
-+ 0x5d17, 0x7048, 0x2060, 0x6000, 0xa086, 0x0000, 0x0040, 0x5d04,
-+ 0xace0, 0x0008, 0x7054, 0xac02, 0x00c8, 0x5d00, 0x0078, 0x5cf3,
-+ 0x2061, 0x7e00, 0x0078, 0x5cf3, 0x6003, 0x0008, 0x8529, 0x7546,
-+ 0xaca8, 0x0008, 0x7054, 0xa502, 0x00c8, 0x5d13, 0x754a, 0xa085,
-+ 0x0001, 0x0e7f, 0x007c, 0x704b, 0x7e00, 0x0078, 0x5d0f, 0xa006,
-+ 0x0078, 0x5d11, 0xac82, 0x7e00, 0x1048, 0x12cd, 0x2001, 0x7715,
-+ 0x2004, 0xac02, 0x10c8, 0x12cd, 0xa006, 0x6006, 0x600a, 0x600e,
-+ 0x6012, 0x6016, 0x601a, 0x601f, 0x0000, 0x6003, 0x0000, 0x2061,
-+ 0x7700, 0x6044, 0x8000, 0x6046, 0xa086, 0x0001, 0x0040, 0x5d39,
-+ 0x007c, 0x127e, 0x2091, 0x8000, 0x1078, 0x4d96, 0x127f, 0x0078,
-+ 0x5d38, 0x601c, 0xa084, 0x000f, 0x0079, 0x5d46, 0x5d4f, 0x5d57,
-+ 0x5d73, 0x5d8f, 0x6c60, 0x6c7c, 0x6c98, 0x5d4f, 0x5d57, 0xa18e,
-+ 0x0047, 0x00c0, 0x5d56, 0xa016, 0x1078, 0x156a, 0x007c, 0x067e,
-+ 0x6000, 0xa0b2, 0x0010, 0x10c8, 0x12cd, 0x1079, 0x5d61, 0x067f,
-+ 0x007c, 0x5d71, 0x5e58, 0x5f88, 0x5d71, 0x5fdf, 0x5d71, 0x5d71,
-+ 0x5d71, 0x5e07, 0x6298, 0x5d71, 0x5d71, 0x5d71, 0x5d71, 0x5d71,
-+ 0x5d71, 0x1078, 0x12cd, 0x067e, 0x6000, 0xa0b2, 0x0010, 0x10c8,
-+ 0x12cd, 0x1079, 0x5d7d, 0x067f, 0x007c, 0x5d8d, 0x5d8d, 0x5d8d,
-+ 0x5d8d, 0x5d8d, 0x5d8d, 0x5d8d, 0x5d8d, 0x670c, 0x67d2, 0x5d8d,
-+ 0x6725, 0x677e, 0x6725, 0x677e, 0x5d8d, 0x1078, 0x12cd, 0x067e,
-+ 0x6000, 0xa0b2, 0x0010, 0x10c8, 0x12cd, 0x1079, 0x5d99, 0x067f,
-+ 0x007c, 0x5da9, 0x62d6, 0x637c, 0x643e, 0x6596, 0x5da9, 0x5da9,
-+ 0x5da9, 0x62b4, 0x66c1, 0x66c5, 0x5da9, 0x5da9, 0x5da9, 0x5da9,
-+ 0x66eb, 0x1078, 0x12cd, 0x20a9, 0x000e, 0x2e98, 0x6010, 0x20a0,
-+ 0x53a3, 0x20a9, 0x0006, 0x3310, 0x3420, 0x9398, 0x94a0, 0x3318,
-+ 0x3428, 0x222e, 0x2326, 0xa290, 0x0002, 0xa5a8, 0x0002, 0xa398,
-+ 0x0002, 0xa4a0, 0x0002, 0x00f0, 0x5db9, 0x0e7e, 0x1078, 0x6a58,
-+ 0x0040, 0x5dd0, 0x6010, 0x2070, 0x7007, 0x0000, 0x7037, 0x0103,
-+ 0x0e7f, 0x1078, 0x5d1a, 0x007c, 0x0d7e, 0x037e, 0x7330, 0xa386,
-+ 0x0200, 0x00c0, 0x5de1, 0x6018, 0x2068, 0x6813, 0x00ff, 0x6817,
-+ 0xfffd, 0x6010, 0xa005, 0x0040, 0x5deb, 0x2068, 0x6807, 0x0000,
-+ 0x6837, 0x0103, 0x6b32, 0x1078, 0x5d1a, 0x037f, 0x0d7f, 0x007c,
-+ 0x0d7e, 0x20a9, 0x000e, 0x2e98, 0x6010, 0x20a0, 0x53a3, 0xa1b6,
-+ 0x0015, 0x00c0, 0x5e04, 0x6018, 0x2068, 0x7038, 0x680a, 0x703c,
-+ 0x680e, 0x6800, 0xc08d, 0x6802, 0x0d7f, 0x0078, 0x5dc5, 0x2100,
-+ 0xa1b2, 0x0030, 0x10c8, 0x12cd, 0x0079, 0x5e0e, 0x5e40, 0x5e4c,
-+ 0x5e40, 0x5e40, 0x5e40, 0x5e40, 0x5e3e, 0x5e3e, 0x5e3e, 0x5e3e,
-+ 0x5e3e, 0x5e3e, 0x5e3e, 0x5e3e, 0x5e3e, 0x5e3e, 0x5e3e, 0x5e3e,
-+ 0x5e3e, 0x5e3e, 0x5e3e, 0x5e3e, 0x5e3e, 0x5e3e, 0x5e3e, 0x5e3e,
-+ 0x5e3e, 0x5e3e, 0x5e3e, 0x5e3e, 0x5e3e, 0x5e40, 0x5e3e, 0x5e40,
-+ 0x5e40, 0x5e3e, 0x5e3e, 0x5e3e, 0x5e3e, 0x5e3e, 0x5e40, 0x5e3e,
-+ 0x5e3e, 0x5e3e, 0x5e3e, 0x5e3e, 0x5e3e, 0x5e3e, 0x1078, 0x12cd,
-+ 0x6003, 0x0001, 0x6106, 0x1078, 0x498e, 0x127e, 0x2091, 0x8000,
-+ 0x1078, 0x4d96, 0x127f, 0x007c, 0x6003, 0x0001, 0x6106, 0x1078,
-+ 0x498e, 0x127e, 0x2091, 0x8000, 0x1078, 0x4d96, 0x127f, 0x007c,
-+ 0x6004, 0xa0b2, 0x0030, 0x10c8, 0x12cd, 0xa1b6, 0x0013, 0x00c0,
-+ 0x5e64, 0x2008, 0x0079, 0x5eeb, 0xa1b6, 0x0027, 0x00c0, 0x5eb9,
-+ 0x1078, 0x4c9d, 0x6004, 0x1078, 0x6bcf, 0x0040, 0x5e7d, 0x1078,
-+ 0x6be3, 0x0040, 0x5eb1, 0xa08e, 0x0021, 0x0040, 0x5eb5, 0xa08e,
-+ 0x0022, 0x0040, 0x5eb1, 0x0078, 0x5eac, 0x1078, 0x22d7, 0x2001,
-+ 0x0007, 0x1078, 0x37f4, 0x6018, 0xa080, 0x0028, 0x200c, 0x1078,
-+ 0x5f6d, 0xa186, 0x007e, 0x00c0, 0x5e92, 0x2001, 0x772f, 0x2014,
-+ 0xc285, 0x2202, 0x017e, 0x027e, 0x037e, 0x2110, 0x2019, 0x0028,
-+ 0x1078, 0x4a7e, 0x1078, 0x49c1, 0x0c7e, 0x6018, 0xa065, 0x0040,
-+ 0x5ea3, 0x1078, 0x3a36, 0x0c7f, 0x2c08, 0x1078, 0x747b, 0x037f,
-+ 0x027f, 0x017f, 0x1078, 0x3834, 0x1078, 0x5d1a, 0x1078, 0x4d96,
-+ 0x007c, 0x1078, 0x5f6d, 0x0078, 0x5eac, 0x1078, 0x5f7c, 0x0078,
-+ 0x5eac, 0xa186, 0x0014, 0x00c0, 0x5eb0, 0x1078, 0x4c9d, 0x1078,
-+ 0x22b5, 0x1078, 0x6bcf, 0x00c0, 0x5ed8, 0x1078, 0x22d7, 0x6018,
-+ 0xa080, 0x0028, 0x200c, 0x1078, 0x5f6d, 0xa186, 0x007e, 0x00c0,
-+ 0x5ed6, 0x2001, 0x772f, 0x200c, 0xc185, 0x2102, 0x0078, 0x5eac,
-+ 0x1078, 0x6be3, 0x00c0, 0x5ee0, 0x1078, 0x5f6d, 0x0078, 0x5eac,
-+ 0x6004, 0xa08e, 0x0021, 0x0040, 0x5edc, 0xa08e, 0x0022, 0x1040,
-+ 0x5f7c, 0x0078, 0x5eac, 0x5f1d, 0x5f1f, 0x5f23, 0x5f27, 0x5f2b,
-+ 0x5f2f, 0x5f1b, 0x5f1b, 0x5f1b, 0x5f1b, 0x5f1b, 0x5f1b, 0x5f1b,
-+ 0x5f1b, 0x5f1b, 0x5f1b, 0x5f1b, 0x5f1b, 0x5f1b, 0x5f1b, 0x5f1b,
-+ 0x5f1b, 0x5f1b, 0x5f1b, 0x5f1b, 0x5f1b, 0x5f1b, 0x5f1b, 0x5f1b,
-+ 0x5f1b, 0x5f33, 0x5f39, 0x5f1b, 0x5f43, 0x5f39, 0x5f1b, 0x5f1b,
-+ 0x5f1b, 0x5f1b, 0x5f1b, 0x5f39, 0x5f39, 0x5f1b, 0x5f1b, 0x5f1b,
-+ 0x5f1b, 0x5f1b, 0x5f1b, 0x1078, 0x12cd, 0x0078, 0x5f39, 0x2001,
-+ 0x000b, 0x0078, 0x5f4c, 0x2001, 0x0003, 0x0078, 0x5f4c, 0x2001,
-+ 0x0005, 0x0078, 0x5f4c, 0x2001, 0x0001, 0x0078, 0x5f4c, 0x2001,
-+ 0x0009, 0x0078, 0x5f4c, 0x1078, 0x12cd, 0x0078, 0x5f4b, 0x1078,
-+ 0x37f4, 0x1078, 0x4c9d, 0x6003, 0x0002, 0x6017, 0x0028, 0x1078,
-+ 0x4d96, 0x0078, 0x5f4b, 0x1078, 0x4c9d, 0x6003, 0x0004, 0x6017,
-+ 0x0028, 0x1078, 0x4d96, 0x007c, 0x1078, 0x37f4, 0x1078, 0x4c9d,
-+ 0x6003, 0x0002, 0x037e, 0x2019, 0x775c, 0x2304, 0xa084, 0xff00,
-+ 0x00c0, 0x5f5e, 0x2019, 0x0028, 0x0078, 0x5f67, 0x8007, 0xa09a,
-+ 0x0004, 0x0048, 0x5f5a, 0x8003, 0x801b, 0x831b, 0xa318, 0x6316,
-+ 0x037f, 0x1078, 0x4d96, 0x0078, 0x5f4b, 0x0e7e, 0x1078, 0x6a58,
-+ 0x0040, 0x5f7a, 0x6010, 0x2070, 0x7007, 0x0000, 0x7037, 0x0103,
-+ 0x7033, 0x0100, 0x0e7f, 0x007c, 0x0e7e, 0xacf0, 0x0004, 0x2e74,
-+ 0x7000, 0x2070, 0x7037, 0x0103, 0x7023, 0x8001, 0x0e7f, 0x007c,
-+ 0x0d7e, 0x6618, 0x2668, 0x6804, 0xa084, 0x00ff, 0x0d7f, 0xa0b2,
-+ 0x000c, 0x10c8, 0x12cd, 0x6604, 0xa6b6, 0x0028, 0x00c0, 0x5f9c,
-+ 0x1078, 0x6c18, 0x0078, 0x5fce, 0x6604, 0xa6b6, 0x0029, 0x00c0,
-+ 0x5fa5, 0x1078, 0x6c32, 0x0078, 0x5fce, 0x6604, 0xa6b6, 0x001f,
-+ 0x00c0, 0x5fae, 0x1078, 0x5dab, 0x0078, 0x5fce, 0x6604, 0xa6b6,
-+ 0x0000, 0x00c0, 0x5fb7, 0x1078, 0x5df0, 0x0078, 0x5fce, 0x6604,
-+ 0xa6b6, 0x0022, 0x00c0, 0x5fc0, 0x1078, 0x5dd4, 0x0078, 0x5fce,
-+ 0xa1b6, 0x0015, 0x00c0, 0x5fc8, 0x1079, 0x5fd3, 0x0078, 0x5fce,
-+ 0xa1b6, 0x0016, 0x00c0, 0x5fcf, 0x1079, 0x6110, 0x007c, 0x1078,
-+ 0x5d4f, 0x0078, 0x5fce, 0x5ff7, 0x5ffa, 0x5ff7, 0x603b, 0x5ff7,
-+ 0x60ac, 0x5ff7, 0x5ff7, 0x5ff7, 0x60e8, 0x5ff7, 0x60fe, 0xa1b6,
-+ 0x0048, 0x0040, 0x5feb, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10,
-+ 0x1078, 0x156a, 0x007c, 0x0e7e, 0xacf0, 0x0004, 0x2e74, 0x7000,
-+ 0x2070, 0x7037, 0x0103, 0x0e7f, 0x1078, 0x5d1a, 0x007c, 0x0005,
-+ 0x0005, 0x007c, 0x0e7e, 0x2071, 0x7700, 0x7078, 0xa086, 0x0074,
-+ 0x00c0, 0x6024, 0x1078, 0x744f, 0x00c0, 0x6016, 0x0d7e, 0x6018,
-+ 0x2068, 0x1078, 0x6028, 0x0d7f, 0x2001, 0x0006, 0x1078, 0x37f4,
-+ 0x1078, 0x22d7, 0x1078, 0x5d1a, 0x0078, 0x6026, 0x2001, 0x000a,
-+ 0x1078, 0x37f4, 0x1078, 0x22d7, 0x6003, 0x0001, 0x6007, 0x0001,
-+ 0x1078, 0x498e, 0x0078, 0x6026, 0x1078, 0x609c, 0x0e7f, 0x007c,
-+ 0x6800, 0xd084, 0x0040, 0x603a, 0x2001, 0x0000, 0x1078, 0x37e0,
-+ 0x2069, 0x7751, 0x6804, 0xd0a4, 0x0040, 0x603a, 0x2001, 0x0006,
-+ 0x1078, 0x3802, 0x007c, 0x0d7e, 0x2011, 0x771e, 0x2204, 0xa086,
-+ 0x0074, 0x00c0, 0x6098, 0x1078, 0x61ea, 0x6018, 0x2068, 0xa080,
-+ 0x0028, 0x2014, 0xa286, 0x007e, 0x0040, 0x6063, 0xa286, 0x0080,
-+ 0x00c0, 0x608c, 0x6813, 0x00ff, 0x6817, 0xfffc, 0x6010, 0xa005,
-+ 0x0040, 0x6082, 0x2068, 0x6807, 0x0000, 0x6837, 0x0103, 0x6833,
-+ 0x0200, 0x0078, 0x6082, 0x0e7e, 0x0f7e, 0x6813, 0x00ff, 0x6817,
-+ 0xfffe, 0x2071, 0x772f, 0x2e04, 0xa085, 0x0003, 0x2072, 0x2071,
-+ 0x7c80, 0x2079, 0x0100, 0x2e04, 0xa084, 0x00ff, 0x2069, 0x7719,
-+ 0x206a, 0x78e6, 0x8e70, 0x2e04, 0x2069, 0x771a, 0x206a, 0x78ea,
-+ 0x0f7f, 0x0e7f, 0x2001, 0x0006, 0x1078, 0x37f4, 0x1078, 0x22d7,
-+ 0x1078, 0x5d1a, 0x0078, 0x609a, 0x2001, 0x0004, 0x1078, 0x37f4,
-+ 0x6003, 0x0001, 0x6007, 0x0003, 0x1078, 0x498e, 0x0078, 0x609a,
-+ 0x1078, 0x609c, 0x0d7f, 0x007c, 0x2001, 0x7700, 0x2004, 0xa086,
-+ 0x0003, 0x0040, 0x60a7, 0x2001, 0x0007, 0x1078, 0x37f4, 0x1078,
-+ 0x22d7, 0x1078, 0x5d1a, 0x007c, 0x0e7e, 0x2071, 0x7700, 0x7078,
-+ 0xa086, 0x0014, 0x00c0, 0x60e2, 0x7000, 0xa086, 0x0003, 0x00c0,
-+ 0x60bf, 0x6010, 0xa005, 0x00c0, 0x60bf, 0x1078, 0x2dd7, 0x0d7e,
-+ 0x6018, 0x2068, 0x1078, 0x38c8, 0x1078, 0x6028, 0x0d7f, 0x1078,
-+ 0x61f4, 0x00c0, 0x60e2, 0x2001, 0x0006, 0x1078, 0x37f4, 0x0e7e,
-+ 0x6010, 0xa005, 0x0040, 0x60db, 0x2070, 0x7007, 0x0000, 0x7037,
-+ 0x0103, 0x7033, 0x0200, 0x0e7f, 0x1078, 0x22d7, 0x1078, 0x5d1a,
-+ 0x0078, 0x60e6, 0x1078, 0x5f6d, 0x1078, 0x609c, 0x0e7f, 0x007c,
-+ 0x2011, 0x771e, 0x2204, 0xa086, 0x0014, 0x00c0, 0x60fb, 0x2001,
-+ 0x0002, 0x1078, 0x37f4, 0x6003, 0x0001, 0x6007, 0x0001, 0x1078,
-+ 0x498e, 0x0078, 0x60fd, 0x1078, 0x609c, 0x007c, 0x2011, 0x771e,
-+ 0x2204, 0xa086, 0x0004, 0x00c0, 0x610d, 0x2001, 0x0007, 0x1078,
-+ 0x37f4, 0x1078, 0x5d1a, 0x0078, 0x610f, 0x1078, 0x609c, 0x007c,
-+ 0x5ff7, 0x611c, 0x5ff7, 0x6142, 0x5ff7, 0x619d, 0x5ff7, 0x5ff7,
-+ 0x5ff7, 0x61b2, 0x5ff7, 0x61c5, 0x0c7e, 0x1078, 0x61d8, 0x00c0,
-+ 0x6131, 0x2001, 0x0000, 0x1078, 0x37e0, 0x2001, 0x0002, 0x1078,
-+ 0x37f4, 0x6003, 0x0001, 0x6007, 0x0002, 0x1078, 0x498e, 0x0078,
-+ 0x6140, 0x2009, 0x7c8f, 0x2104, 0xa084, 0xff00, 0xa086, 0x1900,
-+ 0x00c0, 0x613e, 0x1078, 0x5d1a, 0x0078, 0x6140, 0x1078, 0x609c,
-+ 0x0c7f, 0x007c, 0x1078, 0x61e7, 0x00c0, 0x6156, 0x2001, 0x0000,
-+ 0x1078, 0x37e0, 0x2001, 0x0002, 0x1078, 0x37f4, 0x6003, 0x0001,
-+ 0x6007, 0x0002, 0x1078, 0x498e, 0x0078, 0x6178, 0x1078, 0x5f6d,
-+ 0x2009, 0x7c8e, 0x2134, 0xa6b4, 0x00ff, 0xa686, 0x0005, 0x0040,
-+ 0x6179, 0x2009, 0x7c8f, 0x2104, 0xa084, 0xff00, 0xa086, 0x1900,
-+ 0x00c0, 0x6176, 0xa686, 0x0009, 0x0040, 0x6179, 0x2001, 0x0004,
-+ 0x1078, 0x37f4, 0x1078, 0x5d1a, 0x0078, 0x6178, 0x1078, 0x609c,
-+ 0x007c, 0x0d7e, 0x6010, 0x2068, 0x1078, 0x6a58, 0x0040, 0x6187,
-+ 0x6838, 0xd0fc, 0x0040, 0x6187, 0x0d7f, 0x0078, 0x6176, 0x6018,
-+ 0x2068, 0x6840, 0xa084, 0x00ff, 0xa005, 0x0040, 0x6198, 0x8001,
-+ 0x6842, 0x6017, 0x000a, 0x6007, 0x0016, 0x0d7f, 0x0078, 0x6178,
-+ 0x1078, 0x22b5, 0x0d7f, 0x0078, 0x6176, 0x1078, 0x61e7, 0x00c0,
-+ 0x61ad, 0x2001, 0x0004, 0x1078, 0x37f4, 0x6003, 0x0001, 0x6007,
-+ 0x0003, 0x1078, 0x498e, 0x0078, 0x61b1, 0x1078, 0x5f6d, 0x1078,
-+ 0x609c, 0x007c, 0x1078, 0x61e7, 0x00c0, 0x61c2, 0x2001, 0x0008,
-+ 0x1078, 0x37f4, 0x6003, 0x0001, 0x6007, 0x0005, 0x1078, 0x498e,
-+ 0x0078, 0x61c4, 0x1078, 0x609c, 0x007c, 0x1078, 0x61e7, 0x00c0,
-+ 0x61d5, 0x2001, 0x000a, 0x1078, 0x37f4, 0x6003, 0x0001, 0x6007,
-+ 0x0001, 0x1078, 0x498e, 0x0078, 0x61d7, 0x1078, 0x609c, 0x007c,
-+ 0x2009, 0x7c8e, 0x2104, 0xa086, 0x0003, 0x00c0, 0x61e6, 0x2009,
-+ 0x7c8f, 0x2104, 0xa084, 0xff00, 0xa086, 0x2a00, 0x007c, 0xa085,
-+ 0x0001, 0x007c, 0x0c7e, 0x017e, 0xac88, 0x0006, 0x2164, 0x1078,
-+ 0x385e, 0x017f, 0x0c7f, 0x007c, 0x0e7e, 0x2071, 0x7c8c, 0x7004,
-+ 0xa086, 0x0014, 0x00c0, 0x6217, 0x7008, 0xa086, 0x0800, 0x00c0,
-+ 0x6217, 0x700c, 0xd0ec, 0x0040, 0x6215, 0xa084, 0x0f00, 0xa086,
-+ 0x0100, 0x00c0, 0x6215, 0x7024, 0xd0a4, 0x0040, 0x6215, 0xd08c,
-+ 0x0040, 0x6215, 0xa006, 0x0078, 0x6217, 0xa085, 0x0001, 0x0e7f,
-+ 0x007c, 0x0e7e, 0x0d7e, 0x0c7e, 0x077e, 0x057e, 0x047e, 0x027e,
-+ 0x007e, 0x127e, 0x2091, 0x8000, 0x2029, 0x793f, 0x252c, 0x2021,
-+ 0x7945, 0x2424, 0x2061, 0x7e00, 0x2071, 0x7700, 0x7244, 0x7060,
-+ 0xa202, 0x00c8, 0x626e, 0x1078, 0x7659, 0x0040, 0x6266, 0x671c,
-+ 0xa786, 0x0001, 0x0040, 0x6266, 0xa786, 0x0007, 0x0040, 0x6266,
-+ 0x2500, 0xac06, 0x0040, 0x6266, 0x2400, 0xac06, 0x0040, 0x6266,
-+ 0x0c7e, 0x6000, 0xa086, 0x0004, 0x00c0, 0x6250, 0x1078, 0x166e,
-+ 0x6010, 0x2068, 0x1078, 0x6a58, 0x0040, 0x6263, 0xa786, 0x0003,
-+ 0x00c0, 0x6278, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078,
-+ 0x3b92, 0x1078, 0x6ba9, 0x1078, 0x6bb6, 0x0c7f, 0xace0, 0x0008,
-+ 0x7054, 0xac02, 0x00c8, 0x626e, 0x0078, 0x622e, 0x127f, 0x007f,
-+ 0x027f, 0x047f, 0x057f, 0x077f, 0x0c7f, 0x0d7f, 0x0e7f, 0x007c,
-+ 0xa786, 0x0006, 0x00c0, 0x625a, 0x1078, 0x75fd, 0x0078, 0x6263,
-+ 0x220c, 0x2304, 0xa106, 0x00c0, 0x628b, 0x8210, 0x8318, 0x00f0,
-+ 0x6280, 0xa006, 0x007c, 0x2304, 0xa102, 0x0048, 0x6293, 0x2001,
-+ 0x0001, 0x0078, 0x6295, 0x2001, 0x0000, 0xa18d, 0x0001, 0x007c,
-+ 0x6004, 0xa08a, 0x0030, 0x10c8, 0x12cd, 0x1078, 0x6bcf, 0x0040,
-+ 0x62a7, 0x1078, 0x6be3, 0x0040, 0x62b0, 0x0078, 0x62a9, 0x1078,
-+ 0x22d7, 0x1078, 0x4c9d, 0x1078, 0x5d1a, 0x1078, 0x4d96, 0x007c,
-+ 0x1078, 0x5f6d, 0x0078, 0x62a9, 0xa182, 0x0040, 0x0079, 0x62b8,
-+ 0x62c8, 0x62c8, 0x62c8, 0x62c8, 0x62c8, 0x62c8, 0x62c8, 0x62c8,
-+ 0x62c8, 0x62c8, 0x62c8, 0x62ca, 0x62ca, 0x62ca, 0x62ca, 0x62c8,
-+ 0x1078, 0x12cd, 0x6003, 0x0001, 0x6106, 0x1078, 0x4941, 0x127e,
-+ 0x2091, 0x8000, 0x1078, 0x4d96, 0x127f, 0x007c, 0xa186, 0x0013,
-+ 0x00c0, 0x62df, 0x6004, 0xa082, 0x0040, 0x0079, 0x6355, 0xa186,
-+ 0x0027, 0x00c0, 0x62fc, 0x1078, 0x4c9d, 0x1078, 0x22b5, 0x0d7e,
-+ 0x6110, 0x2168, 0x1078, 0x6a58, 0x0040, 0x62f6, 0x6837, 0x0103,
-+ 0x684b, 0x0029, 0x1078, 0x3b92, 0x1078, 0x6ba9, 0x0d7f, 0x1078,
-+ 0x5d1a, 0x1078, 0x4d96, 0x007c, 0xa186, 0x0014, 0x00c0, 0x6305,
-+ 0x6004, 0xa082, 0x0040, 0x0079, 0x6325, 0xa186, 0x0047, 0x10c0,
-+ 0x12cd, 0x2001, 0x0109, 0x2004, 0xd084, 0x0040, 0x6322, 0x127e,
-+ 0x2091, 0x2200, 0x007e, 0x017e, 0x027e, 0x1078, 0x4802, 0x027f,
-+ 0x017f, 0x007f, 0x127f, 0x6000, 0xa086, 0x0002, 0x00c0, 0x6322,
-+ 0x0078, 0x637c, 0x1078, 0x5d4f, 0x007c, 0x6337, 0x6335, 0x6335,
-+ 0x6335, 0x6335, 0x6335, 0x6335, 0x6335, 0x6335, 0x6335, 0x6335,
-+ 0x634e, 0x634e, 0x634e, 0x634e, 0x6335, 0x1078, 0x12cd, 0x1078,
-+ 0x4c9d, 0x0d7e, 0x6110, 0x2168, 0x1078, 0x6a58, 0x0040, 0x6348,
-+ 0x6837, 0x0103, 0x684b, 0x0006, 0x1078, 0x3b92, 0x1078, 0x6ba9,
-+ 0x0d7f, 0x1078, 0x5d1a, 0x1078, 0x4d96, 0x007c, 0x1078, 0x4c9d,
-+ 0x1078, 0x5d1a, 0x1078, 0x4d96, 0x007c, 0x6367, 0x6365, 0x6365,
-+ 0x6365, 0x6365, 0x6365, 0x6365, 0x6365, 0x6365, 0x6365, 0x6365,
-+ 0x6375, 0x6375, 0x6375, 0x6375, 0x6365, 0x1078, 0x12cd, 0x1078,
-+ 0x4c9d, 0x6003, 0x0002, 0x1078, 0x4d96, 0x6010, 0xa088, 0x0013,
-+ 0x2104, 0xa085, 0x0400, 0x200a, 0x007c, 0x1078, 0x4c9d, 0x6003,
-+ 0x000f, 0x1078, 0x4d96, 0x007c, 0xa182, 0x0040, 0x0079, 0x6380,
-+ 0x6390, 0x6390, 0x6390, 0x6390, 0x6390, 0x6392, 0x641b, 0x6433,
-+ 0x6390, 0x6390, 0x6390, 0x6390, 0x6390, 0x6390, 0x6390, 0x6390,
-+ 0x1078, 0x12cd, 0x0e7e, 0x0d7e, 0x2071, 0x7c8c, 0x6110, 0x2168,
-+ 0x7614, 0xa6b4, 0x0fff, 0x86ff, 0x0040, 0x63ff, 0xa68c, 0x00ff,
-+ 0xa186, 0x0002, 0x0040, 0x63c4, 0xa186, 0x0028, 0x00c0, 0x63ae,
-+ 0x1078, 0x6bbd, 0x684b, 0x001c, 0x0078, 0x63c6, 0xd6dc, 0x0040,
-+ 0x63b9, 0x684b, 0x0015, 0x7318, 0x6b62, 0x731c, 0x6b5e, 0x0078,
-+ 0x63c6, 0xd6d4, 0x0040, 0x63c4, 0x684b, 0x0007, 0x7318, 0x6b62,
-+ 0x731c, 0x6b5e, 0x0078, 0x63c6, 0x684b, 0x0000, 0x6837, 0x0103,
-+ 0x6e46, 0xa01e, 0xd6c4, 0x0040, 0x63d9, 0x7328, 0x732c, 0x6b56,
-+ 0x037e, 0x2308, 0x2019, 0x7c98, 0xad90, 0x0019, 0x1078, 0x6841,
-+ 0x037f, 0xd6cc, 0x0040, 0x640f, 0x7124, 0x695a, 0xa192, 0x0021,
-+ 0x00c8, 0x63ed, 0x2071, 0x7c98, 0x831c, 0x2300, 0xae18, 0xad90,
-+ 0x001d, 0x1078, 0x6841, 0x0078, 0x640f, 0x6838, 0xd0fc, 0x0040,
-+ 0x63f6, 0x2009, 0x0020, 0x695a, 0x0078, 0x63e2, 0x0f7e, 0x2d78,
-+ 0x1078, 0x67d9, 0x0f7f, 0x1078, 0x682e, 0x0078, 0x6411, 0x684b,
-+ 0x0000, 0x6837, 0x0103, 0x6e46, 0x684c, 0xd0ac, 0x0040, 0x640f,
-+ 0x6810, 0x6914, 0xa115, 0x0040, 0x640f, 0x1078, 0x6587, 0x1078,
-+ 0x3b92, 0x6218, 0x2268, 0x6a3c, 0x8211, 0x6a3e, 0x0d7f, 0x0e7f,
-+ 0x1078, 0x5d1a, 0x007c, 0x0f7e, 0x6003, 0x0003, 0x2079, 0x7c8c,
-+ 0x7c04, 0x7b00, 0x7e0c, 0x7d08, 0x6010, 0x2078, 0x7c12, 0x7b16,
-+ 0x7e0a, 0x7d0e, 0x0f7f, 0x2c10, 0x1078, 0x19c7, 0x1078, 0x49ad,
-+ 0x1078, 0x4e56, 0x007c, 0x6003, 0x0004, 0x6110, 0x20e1, 0x0005,
-+ 0x3d18, 0x3e20, 0x2c10, 0x1078, 0x156a, 0x007c, 0xa182, 0x0040,
-+ 0x0079, 0x6442, 0x6452, 0x6452, 0x6452, 0x6452, 0x6452, 0x6454,
-+ 0x64eb, 0x6452, 0x6452, 0x6501, 0x6563, 0x6452, 0x6452, 0x6452,
-+ 0x6452, 0x656e, 0x1078, 0x12cd, 0x077e, 0x0f7e, 0x0e7e, 0x0d7e,
-+ 0x2071, 0x7c8c, 0x6110, 0x2178, 0x7614, 0xa6b4, 0x0fff, 0x7e46,
-+ 0x7f4c, 0xc7e5, 0x7f4e, 0x6218, 0x2268, 0x6a3c, 0x8211, 0x6a3e,
-+ 0x86ff, 0x0040, 0x64e6, 0xa694, 0xff00, 0xa284, 0x0c00, 0x0040,
-+ 0x6475, 0x7018, 0x7862, 0x701c, 0x785e, 0xa284, 0x0300, 0x0040,
-+ 0x64e6, 0x1078, 0x1327, 0x1040, 0x12cd, 0x2d00, 0x784a, 0x7f4c,
-+ 0xc7cd, 0x7f4e, 0x6837, 0x0103, 0x7838, 0x683a, 0x783c, 0x683e,
-+ 0x7840, 0x6842, 0x6e46, 0xa68c, 0x00ff, 0xa186, 0x0002, 0x0040,
-+ 0x64af, 0xa186, 0x0028, 0x00c0, 0x6499, 0x684b, 0x001c, 0x0078,
-+ 0x64b1, 0xd6dc, 0x0040, 0x64a4, 0x684b, 0x0015, 0x7318, 0x6b62,
-+ 0x731c, 0x6b5e, 0x0078, 0x64b1, 0xd6d4, 0x0040, 0x64af, 0x684b,
-+ 0x0007, 0x7318, 0x6b62, 0x731c, 0x6b5e, 0x0078, 0x64b1, 0x684b,
-+ 0x0000, 0x6f4e, 0x7850, 0x6852, 0x7854, 0x6856, 0xa01e, 0xd6c4,
-+ 0x0040, 0x64c6, 0x7328, 0x732c, 0x6b56, 0x037e, 0x2308, 0x2019,
-+ 0x7c98, 0xad90, 0x0019, 0x1078, 0x6841, 0x037f, 0xd6cc, 0x0040,
-+ 0x64e6, 0x7124, 0x695a, 0xa192, 0x0021, 0x00c8, 0x64da, 0x2071,
-+ 0x7c98, 0x831c, 0x2300, 0xae18, 0xad90, 0x001d, 0x1078, 0x6841,
-+ 0x0078, 0x64e6, 0x7838, 0xd0fc, 0x0040, 0x64e3, 0x2009, 0x0020,
-+ 0x695a, 0x0078, 0x64cf, 0x2d78, 0x1078, 0x67d9, 0x0d7f, 0x0e7f,
-+ 0x0f7f, 0x077f, 0x007c, 0x0f7e, 0x6003, 0x0003, 0x2079, 0x7c8c,
-+ 0x7c04, 0x7b00, 0x7e0c, 0x7d08, 0x6010, 0x2078, 0x7c12, 0x7b16,
-+ 0x7e0a, 0x7d0e, 0x0f7f, 0x2c10, 0x1078, 0x19c7, 0x1078, 0x5681,
-+ 0x007c, 0x0d7e, 0x6003, 0x0002, 0x1078, 0x4d45, 0x1078, 0x4e56,
-+ 0x6110, 0x2168, 0x694c, 0xd1e4, 0x0040, 0x6561, 0xd1cc, 0x0040,
-+ 0x653c, 0x6948, 0x6838, 0xd0fc, 0x0040, 0x6534, 0x017e, 0x684c,
-+ 0x007e, 0x6850, 0x007e, 0xad90, 0x000d, 0xa198, 0x000d, 0x2009,
-+ 0x0020, 0x157e, 0x21a8, 0x2304, 0x2012, 0x8318, 0x8210, 0x00f0,
-+ 0x6523, 0x157f, 0x007f, 0x6852, 0x007f, 0x684e, 0x017f, 0x2168,
-+ 0x1078, 0x1350, 0x0078, 0x655f, 0x017e, 0x1078, 0x1350, 0x0d7f,
-+ 0x1078, 0x682e, 0x0078, 0x655f, 0x6837, 0x0103, 0x6944, 0xa184,
-+ 0x00ff, 0xa186, 0x0002, 0x0040, 0x655b, 0xa086, 0x0028, 0x00c0,
-+ 0x654d, 0x684b, 0x001c, 0x0078, 0x655d, 0xd1dc, 0x0040, 0x6554,
-+ 0x684b, 0x0015, 0x0078, 0x655d, 0xd1d4, 0x0040, 0x655b, 0x684b,
-+ 0x0007, 0x0078, 0x655d, 0x684b, 0x0000, 0x1078, 0x3b92, 0x1078,
-+ 0x5d1a, 0x0d7f, 0x007c, 0x2019, 0x0001, 0x1078, 0x5880, 0x6003,
-+ 0x0002, 0x1078, 0x4d45, 0x1078, 0x4e56, 0x007c, 0x1078, 0x4d45,
-+ 0x1078, 0x22b5, 0x0d7e, 0x6110, 0x2168, 0x1078, 0x6a58, 0x0040,
-+ 0x6581, 0x6837, 0x0103, 0x684b, 0x0029, 0x1078, 0x3b92, 0x1078,
-+ 0x6ba9, 0x0d7f, 0x1078, 0x5d1a, 0x1078, 0x4e56, 0x007c, 0x684b,
-+ 0x0015, 0xd1fc, 0x0040, 0x6593, 0x684b, 0x0007, 0x8002, 0x8000,
-+ 0x810a, 0xa189, 0x0000, 0x6962, 0x685e, 0x007c, 0xa182, 0x0040,
-+ 0x0079, 0x659a, 0x65aa, 0x65aa, 0x65aa, 0x65aa, 0x65aa, 0x65ac,
-+ 0x65aa, 0x6650, 0x6658, 0x65aa, 0x65aa, 0x65aa, 0x65aa, 0x65aa,
-+ 0x65aa, 0x65aa, 0x1078, 0x12cd, 0x077e, 0x0f7e, 0x0e7e, 0x0d7e,
-+ 0x2071, 0x7c8c, 0x6110, 0x2178, 0x7614, 0xa6b4, 0x0fff, 0x7e46,
-+ 0x7f4c, 0xc7e5, 0x7f4e, 0x6218, 0x2268, 0x6a3c, 0x8211, 0x6a3e,
-+ 0x86ff, 0x0040, 0x6642, 0xa694, 0xff00, 0xa284, 0x0c00, 0x0040,
-+ 0x65cd, 0x7018, 0x7862, 0x701c, 0x785e, 0xa284, 0x0300, 0x0040,
-+ 0x663f, 0x1078, 0x1327, 0x1040, 0x12cd, 0x2d00, 0x784a, 0x7f4c,
-+ 0xa7bd, 0x0200, 0x7f4e, 0x6837, 0x0103, 0x7838, 0x683a, 0x783c,
-+ 0x683e, 0x7840, 0x6842, 0x6e46, 0xa68c, 0x00ff, 0xa186, 0x0002,
-+ 0x0040, 0x6608, 0xa186, 0x0028, 0x00c0, 0x65f2, 0x684b, 0x001c,
-+ 0x0078, 0x660a, 0xd6dc, 0x0040, 0x65fd, 0x684b, 0x0015, 0x7318,
-+ 0x6b62, 0x731c, 0x6b5e, 0x0078, 0x660a, 0xd6d4, 0x0040, 0x6608,
-+ 0x684b, 0x0007, 0x7318, 0x6b62, 0x731c, 0x6b5e, 0x0078, 0x660a,
-+ 0x684b, 0x0000, 0x6f4e, 0x7850, 0x6852, 0x7854, 0x6856, 0xa01e,
-+ 0xd6c4, 0x0040, 0x661f, 0x7328, 0x732c, 0x6b56, 0x037e, 0x2308,
-+ 0x2019, 0x7c98, 0xad90, 0x0019, 0x1078, 0x6841, 0x037f, 0xd6cc,
-+ 0x0040, 0x663f, 0x7124, 0x695a, 0xa192, 0x0021, 0x00c8, 0x6633,
-+ 0x2071, 0x7c98, 0x831c, 0x2300, 0xae18, 0xad90, 0x001d, 0x1078,
-+ 0x6841, 0x0078, 0x663f, 0x7838, 0xd0fc, 0x0040, 0x663c, 0x2009,
-+ 0x0020, 0x695a, 0x0078, 0x6628, 0x2d78, 0x1078, 0x67d9, 0xd6dc,
-+ 0x00c0, 0x6645, 0xa006, 0x0078, 0x6649, 0x2001, 0x0001, 0x7218,
-+ 0x731c, 0x1078, 0x15ae, 0x0d7f, 0x0e7f, 0x0f7f, 0x077f, 0x007c,
-+ 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10, 0x1078, 0x156a, 0x007c,
-+ 0x0d7e, 0x6003, 0x0002, 0x6110, 0x2168, 0x694c, 0xd1e4, 0x0040,
-+ 0x66bf, 0xd1cc, 0x0040, 0x668f, 0x6948, 0x6838, 0xd0fc, 0x0040,
-+ 0x6687, 0x017e, 0x684c, 0x007e, 0x6850, 0x007e, 0xad90, 0x000d,
-+ 0xa198, 0x000d, 0x2009, 0x0020, 0x157e, 0x21a8, 0x2304, 0x2012,
-+ 0x8318, 0x8210, 0x00f0, 0x6676, 0x157f, 0x007f, 0x6852, 0x007f,
-+ 0x684e, 0x017f, 0x2168, 0x1078, 0x1350, 0x0078, 0x66bd, 0x017e,
-+ 0x1078, 0x1350, 0x0d7f, 0x1078, 0x682e, 0x0078, 0x66bd, 0x6837,
-+ 0x0103, 0x6944, 0xa184, 0x00ff, 0xa186, 0x0002, 0x0040, 0x66ae,
-+ 0xa086, 0x0028, 0x00c0, 0x66a0, 0x684b, 0x001c, 0x0078, 0x66bb,
-+ 0xd1dc, 0x0040, 0x66a7, 0x684b, 0x0015, 0x0078, 0x66bb, 0xd1d4,
-+ 0x0040, 0x66ae, 0x684b, 0x0007, 0x0078, 0x66bb, 0x684b, 0x0000,
-+ 0x684c, 0xd0ac, 0x0040, 0x66bb, 0x6810, 0x6914, 0xa115, 0x0040,
-+ 0x66bb, 0x1078, 0x6587, 0x1078, 0x3b92, 0x1078, 0x5d1a, 0x0d7f,
-+ 0x007c, 0x1078, 0x4c9d, 0x0078, 0x66c7, 0x1078, 0x4d45, 0x1078,
-+ 0x6a58, 0x0040, 0x66de, 0x0d7e, 0x6110, 0x2168, 0x6837, 0x0103,
-+ 0x2009, 0x770c, 0x210c, 0xd18c, 0x00c0, 0x66e7, 0xd184, 0x00c0,
-+ 0x66e3, 0x6108, 0x694a, 0x1078, 0x3b92, 0x0d7f, 0x1078, 0x5d1a,
-+ 0x1078, 0x4d96, 0x007c, 0x684b, 0x0004, 0x0078, 0x66db, 0x684b,
-+ 0x0004, 0x0078, 0x66db, 0xa182, 0x0040, 0x0079, 0x66ef, 0x66ff,
-+ 0x66ff, 0x66ff, 0x66ff, 0x66ff, 0x6701, 0x66ff, 0x6704, 0x66ff,
-+ 0x66ff, 0x66ff, 0x66ff, 0x66ff, 0x66ff, 0x66ff, 0x66ff, 0x1078,
-+ 0x12cd, 0x1078, 0x5d1a, 0x007c, 0x007e, 0x027e, 0xa016, 0x1078,
-+ 0x156a, 0x027f, 0x007f, 0x007c, 0xa182, 0x0085, 0x0079, 0x6710,
-+ 0x6719, 0x6717, 0x6717, 0x6717, 0x6717, 0x6717, 0x6717, 0x1078,
-+ 0x12cd, 0x6003, 0x0001, 0x6106, 0x1078, 0x4941, 0x127e, 0x2091,
-+ 0x8000, 0x1078, 0x4d96, 0x127f, 0x007c, 0xa186, 0x0013, 0x00c0,
-+ 0x672f, 0x6004, 0xa082, 0x0085, 0x2008, 0x0079, 0x6763, 0xa186,
-+ 0x0027, 0x00c0, 0x6750, 0x1078, 0x4c9d, 0x1078, 0x22b5, 0x0d7e,
-+ 0x6010, 0x2068, 0x1078, 0x6a58, 0x0040, 0x6746, 0x6837, 0x0103,
-+ 0x684b, 0x0029, 0x1078, 0x3b92, 0x1078, 0x6ba9, 0x0d7f, 0x1078,
-+ 0x5d1a, 0x1078, 0x4d96, 0x007c, 0x1078, 0x5d4f, 0x0078, 0x674b,
-+ 0xa186, 0x0014, 0x00c0, 0x674c, 0x1078, 0x4c9d, 0x0d7e, 0x6010,
-+ 0x2068, 0x1078, 0x6a58, 0x0040, 0x6746, 0x6837, 0x0103, 0x684b,
-+ 0x0006, 0x0078, 0x6742, 0x676c, 0x676a, 0x676a, 0x676a, 0x676a,
-+ 0x676a, 0x6775, 0x1078, 0x12cd, 0x1078, 0x4c9d, 0x6017, 0x0014,
-+ 0x6003, 0x000c, 0x1078, 0x4d96, 0x007c, 0x1078, 0x4c9d, 0x6017,
-+ 0x0014, 0x6003, 0x000e, 0x1078, 0x4d96, 0x007c, 0xa182, 0x008c,
-+ 0x00c8, 0x6788, 0xa182, 0x0085, 0x0048, 0x6788, 0x0079, 0x678b,
-+ 0x1078, 0x5d4f, 0x007c, 0x6792, 0x6792, 0x6792, 0x6792, 0x6794,
-+ 0x67b3, 0x6792, 0x1078, 0x12cd, 0x0d7e, 0x1078, 0x6ba9, 0x1078,
-+ 0x6a58, 0x0040, 0x67af, 0x6010, 0x2068, 0x6837, 0x0103, 0x6850,
-+ 0xd0b4, 0x0040, 0x67a7, 0x684b, 0x0006, 0x0078, 0x67ab, 0x684b,
-+ 0x0005, 0x1078, 0x6c5c, 0x6847, 0x0000, 0x1078, 0x3b92, 0x1078,
-+ 0x5d1a, 0x0d7f, 0x007c, 0x0d7e, 0x6010, 0x2068, 0x1078, 0x6a58,
-+ 0x0040, 0x67ce, 0x6837, 0x0103, 0x6850, 0xd0b4, 0x0040, 0x67c4,
-+ 0x684b, 0x0006, 0x0078, 0x67c8, 0x684b, 0x0005, 0x1078, 0x6c5c,
-+ 0x6847, 0x0000, 0x1078, 0x3b92, 0x1078, 0x6ba9, 0x0d7f, 0x1078,
-+ 0x5d1a, 0x007c, 0x1078, 0x4c9d, 0x1078, 0x5d1a, 0x1078, 0x4d96,
-+ 0x007c, 0x057e, 0x067e, 0x0d7e, 0x0f7e, 0x2029, 0x0001, 0xa182,
-+ 0x0101, 0x00c8, 0x67e5, 0x0078, 0x67e7, 0x2009, 0x0100, 0x2130,
-+ 0x2069, 0x7c98, 0x831c, 0x2300, 0xad18, 0x2009, 0x0020, 0xaf90,
-+ 0x001d, 0x1078, 0x6841, 0xa6b2, 0x0020, 0x7804, 0xa06d, 0x0040,
-+ 0x67fb, 0x1078, 0x1350, 0x1078, 0x1327, 0x0040, 0x6825, 0x8528,
-+ 0x6837, 0x0110, 0x683b, 0x0000, 0x2d20, 0x7c06, 0xa68a, 0x003d,
-+ 0x00c8, 0x6811, 0x2608, 0xad90, 0x000f, 0x1078, 0x6841, 0x0078,
-+ 0x6825, 0xa6b2, 0x003c, 0x2009, 0x003c, 0x2d78, 0xad90, 0x000f,
-+ 0x1078, 0x6841, 0x0078, 0x67fb, 0x0f7f, 0x852f, 0xa5ad, 0x0003,
-+ 0x7d36, 0xa5ac, 0x0000, 0x0078, 0x682a, 0x0f7f, 0x852f, 0xa5ad,
-+ 0x0003, 0x7d36, 0x0d7f, 0x067f, 0x057f, 0x007c, 0x0f7e, 0x8dff,
-+ 0x0040, 0x683f, 0x6804, 0xa07d, 0x0040, 0x683d, 0x6807, 0x0000,
-+ 0x1078, 0x3b92, 0x2f68, 0x0078, 0x6832, 0x1078, 0x3b92, 0x0f7f,
-+ 0x007c, 0x157e, 0xa184, 0x0001, 0x0040, 0x6847, 0x8108, 0x810c,
-+ 0x21a8, 0x2304, 0x8007, 0x2012, 0x8318, 0x8210, 0x00f0, 0x6849,
-+ 0x157f, 0x007c, 0x127e, 0x2091, 0x8000, 0x601c, 0xa084, 0x000f,
-+ 0x1079, 0x685c, 0x127f, 0x007c, 0x686b, 0x6864, 0x6866, 0x6884,
-+ 0x6864, 0x6866, 0x6866, 0x6866, 0x1078, 0x12cd, 0xa006, 0x007c,
-+ 0xa085, 0x0001, 0x007c, 0x0d7e, 0x6010, 0x2068, 0x1078, 0x6a58,
-+ 0x0040, 0x6881, 0xa00e, 0x2001, 0x0005, 0x1078, 0x3c22, 0x1078,
-+ 0x6c5c, 0x1078, 0x3b92, 0x1078, 0x5d1a, 0xa085, 0x0001, 0x0d7f,
-+ 0x007c, 0xa006, 0x0078, 0x687f, 0x6000, 0xa08a, 0x0010, 0x10c8,
-+ 0x12cd, 0x1079, 0x688c, 0x007c, 0x689c, 0x68b9, 0x689e, 0x68ca,
-+ 0x68b5, 0x689c, 0x6866, 0x686b, 0x686b, 0x6866, 0x6866, 0x6866,
-+ 0x6866, 0x6866, 0x6866, 0x6866, 0x1078, 0x12cd, 0x0d7e, 0x6010,
-+ 0x2068, 0x1078, 0x6a58, 0x0040, 0x68a7, 0x1078, 0x6c5c, 0x0d7f,
-+ 0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0002, 0x1078, 0x4941,
-+ 0x1078, 0x4d96, 0xa085, 0x0001, 0x007c, 0x1078, 0x166e, 0x0078,
-+ 0x689e, 0x0e7e, 0x2071, 0x7936, 0x7024, 0xac06, 0x00c0, 0x68c2,
-+ 0x1078, 0x57ee, 0x1078, 0x5725, 0x0e7f, 0x00c0, 0x689e, 0x1078,
-+ 0x6866, 0x007c, 0x037e, 0x0e7e, 0x2071, 0x7936, 0x703c, 0xac06,
-+ 0x00c0, 0x68da, 0x2019, 0x0000, 0x1078, 0x5880, 0x0e7f, 0x037f,
-+ 0x0078, 0x689e, 0x1078, 0x5b5c, 0x0e7f, 0x037f, 0x00c0, 0x689e,
-+ 0x1078, 0x6866, 0x007c, 0x0c7e, 0x601c, 0xa084, 0x000f, 0x1079,
-+ 0x68eb, 0x0c7f, 0x007c, 0x68fa, 0x6957, 0x69fc, 0x68fe, 0x68fa,
-+ 0x68fa, 0x72dd, 0x5d1a, 0x6957, 0x1078, 0x6be3, 0x00c0, 0x68fa,
-+ 0x1078, 0x5f6d, 0x007c, 0x6017, 0x0001, 0x007c, 0x6000, 0xa08a,
-+ 0x0010, 0x10c8, 0x12cd, 0x1079, 0x6906, 0x007c, 0x6916, 0x6918,
-+ 0x6938, 0x694a, 0x694a, 0x6916, 0x68fa, 0x68fa, 0x68fa, 0x694a,
-+ 0x694a, 0x6916, 0x6916, 0x6916, 0x6916, 0x6954, 0x1078, 0x12cd,
-+ 0x0e7e, 0x6010, 0x2070, 0x7050, 0xc0b5, 0x7052, 0x2071, 0x7936,
-+ 0x7024, 0xac06, 0x0040, 0x6934, 0x1078, 0x5725, 0x6007, 0x0085,
-+ 0x6003, 0x000b, 0x601f, 0x0002, 0x6017, 0x0014, 0x1078, 0x4941,
-+ 0x1078, 0x4d96, 0x0e7f, 0x007c, 0x6017, 0x0001, 0x0078, 0x6932,
-+ 0x0d7e, 0x6010, 0x2068, 0x6850, 0xc0b5, 0x6852, 0x0d7f, 0x6007,
-+ 0x0085, 0x6003, 0x000b, 0x601f, 0x0002, 0x1078, 0x4941, 0x1078,
-+ 0x4d96, 0x007c, 0x0d7e, 0x6017, 0x0001, 0x6010, 0x2068, 0x6850,
-+ 0xc0b5, 0x6852, 0x0d7f, 0x007c, 0x1078, 0x5d1a, 0x007c, 0x6000,
-+ 0xa08a, 0x0010, 0x10c8, 0x12cd, 0x1079, 0x695f, 0x007c, 0x696f,
-+ 0x68fb, 0x6971, 0x696f, 0x6971, 0x696f, 0x696f, 0x696f, 0x68f4,
-+ 0x68f4, 0x696f, 0x696f, 0x696f, 0x696f, 0x696f, 0x696f, 0x1078,
-+ 0x12cd, 0x0d7e, 0x6018, 0x2068, 0x6804, 0xa084, 0x00ff, 0x0d7f,
-+ 0xa08a, 0x000c, 0x10c8, 0x12cd, 0x1079, 0x697f, 0x007c, 0x698b,
-+ 0x69aa, 0x698b, 0x69aa, 0x698b, 0x69aa, 0x698d, 0x6996, 0x698b,
-+ 0x69aa, 0x698b, 0x69a3, 0x1078, 0x12cd, 0x6004, 0xa08e, 0x0004,
-+ 0x0040, 0x69a5, 0xa08e, 0x0002, 0x0040, 0x69a5, 0x6004, 0x1078,
-+ 0x6be3, 0x0040, 0x69f4, 0xa08e, 0x0021, 0x0040, 0x69f8, 0xa08e,
-+ 0x0022, 0x0040, 0x69f4, 0x1078, 0x22b5, 0x1078, 0x5f6d, 0x1078,
-+ 0x5d1a, 0x007c, 0x0c7e, 0x0d7e, 0x6104, 0xa186, 0x0016, 0x0040,
-+ 0x69e4, 0xa186, 0x0002, 0x00c0, 0x69d3, 0x6018, 0x2068, 0x68a0,
-+ 0xd0bc, 0x00c0, 0x69d3, 0x6840, 0xa084, 0x00ff, 0xa005, 0x0040,
-+ 0x69d3, 0x8001, 0x6842, 0x6013, 0x0000, 0x601f, 0x0007, 0x6017,
-+ 0x0398, 0x1078, 0x5cb4, 0x0040, 0x69d3, 0x2d00, 0x601a, 0x601f,
-+ 0x0001, 0x0078, 0x69e4, 0x0d7f, 0x0c7f, 0x1078, 0x5f6d, 0x1078,
-+ 0x22b5, 0x0e7e, 0x127e, 0x2091, 0x8000, 0x1078, 0x22d7, 0x127f,
-+ 0x0e7f, 0x1078, 0x5d1a, 0x007c, 0x2001, 0x0002, 0x1078, 0x37f4,
-+ 0x6003, 0x0001, 0x6007, 0x0002, 0x1078, 0x498e, 0x1078, 0x4d96,
-+ 0x0d7f, 0x0c7f, 0x0078, 0x69e3, 0x1078, 0x5f6d, 0x0078, 0x69a7,
-+ 0x1078, 0x5f7c, 0x0078, 0x69a7, 0x6000, 0xa08a, 0x0010, 0x10c8,
-+ 0x12cd, 0x1079, 0x6a04, 0x007c, 0x6a14, 0x6a14, 0x6a14, 0x6a14,
-+ 0x6a14, 0x6a14, 0x6a14, 0x6a14, 0x6a14, 0x68fa, 0x6a14, 0x68fb,
-+ 0x6a16, 0x68fb, 0x6a1f, 0x6a14, 0x1078, 0x12cd, 0x6007, 0x008b,
-+ 0x6003, 0x000d, 0x1078, 0x4941, 0x1078, 0x4d96, 0x007c, 0x1078,
-+ 0x6ba9, 0x1078, 0x6a58, 0x0040, 0x6a41, 0x1078, 0x22b5, 0x0d7e,
-+ 0x1078, 0x6a58, 0x0040, 0x6a34, 0x6010, 0x2068, 0x6837, 0x0103,
-+ 0x684b, 0x0006, 0x1078, 0x3b92, 0x0d7f, 0x601f, 0x0001, 0x6007,
-+ 0x0001, 0x6003, 0x0001, 0x1078, 0x498e, 0x1078, 0x4d96, 0x0078,
-+ 0x6a43, 0x1078, 0x5d1a, 0x007c, 0xa284, 0x0007, 0x00c0, 0x6a55,
-+ 0xa282, 0x7e00, 0x0048, 0x6a55, 0x2001, 0x7715, 0x2004, 0xa202,
-+ 0x00c8, 0x6a55, 0xa085, 0x0001, 0x007c, 0xa006, 0x0078, 0x6a54,
-+ 0x027e, 0x0e7e, 0x2071, 0x7700, 0x6210, 0x7058, 0xa202, 0x0048,
-+ 0x6a6a, 0x705c, 0xa202, 0x00c8, 0x6a6a, 0xa085, 0x0001, 0x0e7f,
-+ 0x027f, 0x007c, 0xa006, 0x0078, 0x6a67, 0x0e7e, 0x0c7e, 0x037e,
-+ 0x007e, 0x127e, 0x2091, 0x8000, 0x2061, 0x7e00, 0x2071, 0x7700,
-+ 0x7344, 0x7060, 0xa302, 0x00c8, 0x6a93, 0x601c, 0xa206, 0x00c0,
-+ 0x6a8b, 0x1078, 0x6be3, 0x00c0, 0x6a87, 0x1078, 0x5f6d, 0x0c7e,
-+ 0x1078, 0x5d1a, 0x0c7f, 0xace0, 0x0008, 0x7054, 0xac02, 0x00c8,
-+ 0x6a93, 0x0078, 0x6a78, 0x127f, 0x007f, 0x037f, 0x0c7f, 0x0e7f,
-+ 0x007c, 0x0e7e, 0x0c7e, 0x017e, 0xa188, 0x7820, 0x210c, 0x81ff,
-+ 0x0040, 0x6ab1, 0x2061, 0x7e00, 0x2071, 0x7700, 0x017e, 0x1078,
-+ 0x5cb4, 0x017f, 0x0040, 0x6ab4, 0x611a, 0x1078, 0x22b5, 0x1078,
-+ 0x5d1a, 0xa006, 0x0078, 0x6ab6, 0xa085, 0x0001, 0x017f, 0x0c7f,
-+ 0x0e7f, 0x007c, 0x0c7e, 0x057e, 0x127e, 0x2091, 0x8000, 0x0c7e,
-+ 0x1078, 0x5cb4, 0x057f, 0x0040, 0x6ad3, 0x6612, 0x651a, 0x601f,
-+ 0x0003, 0x2009, 0x004b, 0x1078, 0x5d41, 0xa085, 0x0001, 0x127f,
-+ 0x057f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x6acf, 0x0c7e, 0x057e,
-+ 0x127e, 0x2091, 0x8000, 0x62a0, 0x0c7e, 0x1078, 0x5cb4, 0x057f,
-+ 0x0040, 0x6afd, 0x6013, 0x0000, 0x651a, 0x601f, 0x0003, 0x0c7e,
-+ 0x2560, 0x1078, 0x3a36, 0x0c7f, 0x1078, 0x4a7e, 0x1078, 0x49c1,
-+ 0x2c08, 0x1078, 0x747b, 0x2009, 0x004c, 0x1078, 0x5d41, 0xa085,
-+ 0x0001, 0x127f, 0x057f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x6af9,
-+ 0x0c7e, 0x057e, 0x127e, 0x2091, 0x8000, 0x62a0, 0x0c7e, 0x1078,
-+ 0x5cb4, 0x057f, 0x0040, 0x6b28, 0x6612, 0x651a, 0x601f, 0x0003,
-+ 0x2019, 0x0005, 0x0c7e, 0x2560, 0x1078, 0x3a36, 0x0c7f, 0x1078,
-+ 0x4a7e, 0x1078, 0x49c1, 0x2c08, 0x1078, 0x747b, 0x2009, 0x004d,
-+ 0x1078, 0x5d41, 0xa085, 0x0001, 0x127f, 0x057f, 0x0c7f, 0x007c,
-+ 0xa006, 0x0078, 0x6b24, 0x0c7e, 0x057e, 0x127e, 0x2091, 0x8000,
-+ 0x62a0, 0x0c7e, 0x1078, 0x5cb4, 0x057f, 0x0040, 0x6b53, 0x6612,
-+ 0x651a, 0x601f, 0x0003, 0x2019, 0x0005, 0x0c7e, 0x2560, 0x1078,
-+ 0x3a36, 0x0c7f, 0x1078, 0x4a7e, 0x1078, 0x49c1, 0x2c08, 0x1078,
-+ 0x747b, 0x2009, 0x004e, 0x1078, 0x5d41, 0xa085, 0x0001, 0x127f,
-+ 0x057f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x6b4f, 0x0c7e, 0x127e,
-+ 0x2091, 0x8000, 0x0c7e, 0x1078, 0x5cb4, 0x017f, 0x0040, 0x6b6f,
-+ 0x660a, 0x611a, 0x601f, 0x0001, 0x2d00, 0x6012, 0x2009, 0x001f,
-+ 0x1078, 0x5d41, 0xa085, 0x0001, 0x127f, 0x0c7f, 0x007c, 0xa006,
-+ 0x0078, 0x6b6c, 0x0c7e, 0x127e, 0x2091, 0x8000, 0x0c7e, 0x1078,
-+ 0x5cb4, 0x017f, 0x0040, 0x6b8b, 0x660a, 0x611a, 0x601f, 0x0008,
-+ 0x2d00, 0x6012, 0x2009, 0x0021, 0x1078, 0x5d41, 0xa085, 0x0001,
-+ 0x127f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x6b88, 0x0c7e, 0x127e,
-+ 0x2091, 0x8000, 0x0c7e, 0x1078, 0x5cb4, 0x017f, 0x0040, 0x6ba6,
-+ 0x611a, 0x601f, 0x0001, 0x2d00, 0x6012, 0x2009, 0x0000, 0x1078,
-+ 0x5d41, 0xa085, 0x0001, 0x127f, 0x0c7f, 0x007c, 0xa006, 0x0078,
-+ 0x6ba3, 0x027e, 0x0d7e, 0x6218, 0x2268, 0x6a3c, 0x82ff, 0x0040,
-+ 0x6bb3, 0x8211, 0x6a3e, 0x0d7f, 0x027f, 0x007c, 0x6013, 0x0000,
-+ 0x601f, 0x0007, 0x6017, 0x0014, 0x007c, 0x067e, 0x0c7e, 0x0d7e,
-+ 0x2031, 0x7752, 0x2634, 0xd6e4, 0x0040, 0x6bcb, 0x6618, 0x2660,
-+ 0x6e48, 0x1078, 0x3942, 0x0d7f, 0x0c7f, 0x067f, 0x007c, 0x007e,
-+ 0x017e, 0x6004, 0xa08e, 0x0002, 0x0040, 0x6be0, 0xa08e, 0x0003,
-+ 0x0040, 0x6be0, 0xa08e, 0x0004, 0x0040, 0x6be0, 0xa085, 0x0001,
-+ 0x017f, 0x007f, 0x007c, 0x007e, 0x017e, 0x6004, 0xa08e, 0x0000,
-+ 0x0040, 0x6bf8, 0xa08e, 0x001f, 0x0040, 0x6bf8, 0xa08e, 0x0028,
-+ 0x0040, 0x6bf8, 0xa08e, 0x0029, 0x0040, 0x6bf8, 0xa085, 0x0001,
-+ 0x017f, 0x007f, 0x007c, 0x0c7e, 0x127e, 0x2091, 0x8000, 0x0c7e,
-+ 0x1078, 0x5cb4, 0x017f, 0x0040, 0x6c15, 0x611a, 0x601f, 0x0001,
-+ 0x2d00, 0x6012, 0x1078, 0x22b5, 0x2009, 0x0028, 0x1078, 0x5d41,
-+ 0xa085, 0x0001, 0x127f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x6c12,
-+ 0xa186, 0x0015, 0x00c0, 0x6c2d, 0x2011, 0x771e, 0x2204, 0xa086,
-+ 0x0074, 0x00c0, 0x6c2d, 0x1078, 0x61ea, 0x6003, 0x0001, 0x6007,
-+ 0x0029, 0x1078, 0x498e, 0x0078, 0x6c31, 0x1078, 0x5f6d, 0x1078,
-+ 0x5d1a, 0x007c, 0xa186, 0x0015, 0x00c0, 0x6c4f, 0x2011, 0x771e,
-+ 0x2204, 0xa086, 0x0014, 0x00c0, 0x6c4f, 0x0d7e, 0x6018, 0x2068,
-+ 0x1078, 0x38c8, 0x0d7f, 0x1078, 0x61f4, 0x00c0, 0x6c4f, 0x2001,
-+ 0x0006, 0x1078, 0x37f4, 0x1078, 0x5dc5, 0x0078, 0x6c53, 0x1078,
-+ 0x5f6d, 0x1078, 0x5d1a, 0x007c, 0x6848, 0xa086, 0x0005, 0x00c0,
-+ 0x6c5b, 0x1078, 0x6c5c, 0x007c, 0x6850, 0xc0ad, 0x6852, 0x007c,
-+ 0x067e, 0x6000, 0xa0b2, 0x0010, 0x10c8, 0x12cd, 0x1079, 0x6c6a,
-+ 0x067f, 0x007c, 0x6c7a, 0x6e51, 0x6f32, 0x6c7a, 0x6c7a, 0x6c7a,
-+ 0x6c7a, 0x6c7a, 0x6cb4, 0x6fa0, 0x6c7a, 0x6c7a, 0x6c7a, 0x6c7a,
-+ 0x6c7a, 0x6c7a, 0x1078, 0x12cd, 0x067e, 0x6000, 0xa0b2, 0x0010,
-+ 0x10c8, 0x12cd, 0x1079, 0x6c86, 0x067f, 0x007c, 0x6c96, 0x728c,
-+ 0x6c96, 0x6c96, 0x6c96, 0x6c96, 0x6c96, 0x6c96, 0x7267, 0x72d6,
-+ 0x6c96, 0x6c96, 0x6c96, 0x6c96, 0x6c96, 0x6c96, 0x1078, 0x12cd,
-+ 0x067e, 0x6000, 0xa0b2, 0x0010, 0x10c8, 0x12cd, 0x1079, 0x6ca2,
-+ 0x067f, 0x007c, 0x6cb2, 0x70d8, 0x714a, 0x716c, 0x71b8, 0x6cb2,
-+ 0x6cb2, 0x7212, 0x6fac, 0x724f, 0x7253, 0x6cb2, 0x6cb2, 0x6cb2,
-+ 0x6cb2, 0x6cb2, 0x1078, 0x12cd, 0xa1b2, 0x0030, 0x10c8, 0x12cd,
-+ 0x2100, 0x0079, 0x6cbb, 0x6ceb, 0x6dc8, 0x6ceb, 0x6ceb, 0x6ceb,
-+ 0x6ceb, 0x6ceb, 0x6ceb, 0x6ceb, 0x6ceb, 0x6ceb, 0x6ceb, 0x6ceb,
-+ 0x6ceb, 0x6ceb, 0x6ceb, 0x6ceb, 0x6ceb, 0x6ceb, 0x6ceb, 0x6ceb,
-+ 0x6ceb, 0x6ceb, 0x6ced, 0x6d1c, 0x6d27, 0x6d4f, 0x6d55, 0x6d89,
-+ 0x6dc1, 0x6ceb, 0x6ceb, 0x6dd0, 0x6ceb, 0x6ceb, 0x6dd7, 0x6dde,
-+ 0x6ceb, 0x6ceb, 0x6ceb, 0x6ceb, 0x6ceb, 0x6dfb, 0x6ceb, 0x6ceb,
-+ 0x6e06, 0x6ceb, 0x6ceb, 0x1078, 0x12cd, 0x1078, 0x3b3e, 0x6618,
-+ 0x0c7e, 0x2660, 0x1078, 0x385e, 0x0c7f, 0xa6b0, 0x0001, 0x2634,
-+ 0xa684, 0x00ff, 0xa082, 0x0006, 0x0048, 0x6d0e, 0x1078, 0x73b7,
-+ 0x00c0, 0x6d49, 0x1078, 0x7355, 0x00c0, 0x6d0a, 0x6007, 0x0008,
-+ 0x0078, 0x6dc3, 0x6007, 0x0009, 0x0078, 0x6dc3, 0x1078, 0x754c,
-+ 0x0040, 0x6d18, 0x1078, 0x73b7, 0x0040, 0x6d02, 0x0078, 0x6d49,
-+ 0x6013, 0x1900, 0x0078, 0x6d0a, 0x6106, 0x1078, 0x7317, 0x6007,
-+ 0x0006, 0x0078, 0x6dc3, 0x6007, 0x0007, 0x0078, 0x6dc3, 0x0d7e,
-+ 0x6618, 0x2668, 0x6e04, 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006,
-+ 0x0040, 0x6d39, 0xa686, 0x0004, 0x0040, 0x6d39, 0x0d7f, 0x0078,
-+ 0x6d49, 0x1078, 0x7415, 0x00c0, 0x6d44, 0x1078, 0x38c8, 0x6007,
-+ 0x000a, 0x0d7f, 0x0078, 0x6dc3, 0x6007, 0x000b, 0x0d7f, 0x0078,
-+ 0x6dc3, 0x1078, 0x22b5, 0x6007, 0x0001, 0x0078, 0x6dc3, 0x1078,
-+ 0x22b5, 0x6007, 0x000c, 0x0078, 0x6dc3, 0x1078, 0x3b3e, 0x6618,
-+ 0xa6b0, 0x0001, 0x2634, 0xa684, 0x00ff, 0xa082, 0x0006, 0x0048,
-+ 0x6d76, 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, 0x00c0, 0x6d49,
-+ 0x1078, 0x7424, 0x00c0, 0x6d70, 0x6007, 0x000e, 0x0078, 0x6dc3,
-+ 0x1078, 0x22b5, 0x6007, 0x000f, 0x0078, 0x6dc3, 0x1078, 0x754c,
-+ 0x0040, 0x6d83, 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, 0x0040,
-+ 0x6d68, 0x0078, 0x6d49, 0x6013, 0x1900, 0x6007, 0x0009, 0x0078,
-+ 0x6dc3, 0x1078, 0x3b3e, 0x6618, 0xa6b0, 0x0001, 0x2634, 0xa684,
-+ 0x00ff, 0xa082, 0x0006, 0x0048, 0x6dae, 0xa6b4, 0xff00, 0x8637,
-+ 0xa686, 0x0006, 0x00c0, 0x6d49, 0x1078, 0x744f, 0x00c0, 0x6da8,
-+ 0x1078, 0x7355, 0x00c0, 0x6da8, 0x6007, 0x0010, 0x0078, 0x6dc3,
-+ 0x1078, 0x22b5, 0x6007, 0x0011, 0x0078, 0x6dc3, 0x1078, 0x754c,
-+ 0x0040, 0x6dbb, 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, 0x0040,
-+ 0x6d9c, 0x0078, 0x6d49, 0x6013, 0x1900, 0x6007, 0x0009, 0x0078,
-+ 0x6dc3, 0x6007, 0x0012, 0x6003, 0x0001, 0x1078, 0x498e, 0x007c,
-+ 0x6007, 0x0001, 0x6003, 0x0001, 0x1078, 0x498e, 0x0078, 0x6dc7,
-+ 0x6007, 0x0020, 0x6003, 0x0001, 0x1078, 0x498e, 0x007c, 0x6007,
-+ 0x0023, 0x6003, 0x0001, 0x1078, 0x498e, 0x007c, 0x017e, 0x027e,
-+ 0x2011, 0x7c88, 0x2214, 0x2c08, 0x1078, 0x7614, 0x00c0, 0x6def,
-+ 0x2160, 0x6007, 0x0026, 0x6013, 0x1700, 0x0078, 0x6df4, 0x1078,
-+ 0x5d1a, 0x2160, 0x6007, 0x0025, 0x6003, 0x0001, 0x1078, 0x498e,
-+ 0x027f, 0x017f, 0x007c, 0x6106, 0x1078, 0x6e0d, 0x6007, 0x002b,
-+ 0x0078, 0x6dc3, 0x6007, 0x002c, 0x0078, 0x6dc3, 0x6106, 0x1078,
-+ 0x6e12, 0x6007, 0x002e, 0x0078, 0x6dc3, 0x0d7e, 0x1078, 0x6e38,
-+ 0x0d7f, 0x007c, 0x0d7e, 0x1078, 0x6e47, 0x00c0, 0x6e31, 0x680c,
-+ 0xa08c, 0xff00, 0x6824, 0xa084, 0x00ff, 0xa115, 0x6212, 0xd1e4,
-+ 0x0040, 0x6e26, 0x2009, 0x0001, 0x0078, 0x6e2d, 0xd1ec, 0x0040,
-+ 0x6e31, 0x2009, 0x0000, 0xa294, 0x00ff, 0x1078, 0x22f9, 0x0078,
-+ 0x6e35, 0xa085, 0x0001, 0x0078, 0x6e36, 0xa006, 0x0d7f, 0x007c,
-+ 0x2069, 0x7c8d, 0x6800, 0xa082, 0x0010, 0x00c8, 0x6e45, 0x6013,
-+ 0x0000, 0xa085, 0x0001, 0x0078, 0x6e46, 0xa006, 0x007c, 0x6013,
-+ 0x0000, 0x2069, 0x7c8c, 0x6808, 0xa084, 0xff00, 0xa086, 0x0800,
-+ 0x007c, 0x6004, 0xa0b2, 0x0030, 0x10c8, 0x12cd, 0xa1b6, 0x0013,
-+ 0x00c0, 0x6e5d, 0x2008, 0x0079, 0x6e70, 0xa1b6, 0x0027, 0x0040,
-+ 0x6e65, 0xa1b6, 0x0014, 0x10c0, 0x12cd, 0x2001, 0x0007, 0x1078,
-+ 0x3802, 0x1078, 0x4c9d, 0x1078, 0x6bb6, 0x1078, 0x4d96, 0x007c,
-+ 0x6ea0, 0x6ea2, 0x6ea0, 0x6ea0, 0x6ea0, 0x6ea2, 0x6eaa, 0x6f0d,
-+ 0x6ed0, 0x6f0d, 0x6ee4, 0x6f0d, 0x6eaa, 0x6f0d, 0x6f05, 0x6f0d,
-+ 0x6f05, 0x6f0d, 0x6f0d, 0x6ea0, 0x6ea0, 0x6ea0, 0x6ea0, 0x6ea0,
-+ 0x6ea0, 0x6ea0, 0x6ea0, 0x6ea0, 0x6ea0, 0x6ea0, 0x6ea0, 0x6ea0,
-+ 0x6f0d, 0x6ea0, 0x6ea0, 0x6f0d, 0x6ea0, 0x6f0d, 0x6f0d, 0x6ea0,
-+ 0x6ea0, 0x6ea0, 0x6ea0, 0x6f0d, 0x6f0d, 0x6ea0, 0x6f0d, 0x6f0d,
-+ 0x1078, 0x12cd, 0x1078, 0x4c9d, 0x6003, 0x0002, 0x1078, 0x4d96,
-+ 0x0078, 0x6f13, 0x0f7e, 0x2079, 0x7751, 0x7804, 0x0f7f, 0xd0ac,
-+ 0x00c0, 0x6f0d, 0x2001, 0x0000, 0x1078, 0x37e0, 0x2001, 0x0002,
-+ 0x1078, 0x37f4, 0x1078, 0x4c9d, 0x601f, 0x0001, 0x6003, 0x0001,
-+ 0x6007, 0x0002, 0x1078, 0x498e, 0x1078, 0x4d96, 0x0c7e, 0x6118,
-+ 0x2160, 0x2009, 0x0001, 0x1078, 0x4696, 0x0c7f, 0x0078, 0x6f13,
-+ 0x6618, 0x0d7e, 0x2668, 0x6e04, 0x0d7f, 0xa6b4, 0xff00, 0x8637,
-+ 0xa686, 0x0006, 0x0040, 0x6f0d, 0xa686, 0x0004, 0x0040, 0x6f0d,
-+ 0x2001, 0x0004, 0x0078, 0x6f0b, 0x2001, 0x7700, 0x2004, 0xa086,
-+ 0x0003, 0x00c0, 0x6eed, 0x1078, 0x2dd7, 0x2001, 0x0006, 0x1078,
-+ 0x6f14, 0x6618, 0x0d7e, 0x2668, 0x6e04, 0x0d7f, 0xa6b4, 0xff00,
-+ 0x8637, 0xa686, 0x0006, 0x0040, 0x6f0d, 0x2001, 0x0006, 0x0078,
-+ 0x6f0b, 0x2001, 0x0004, 0x0078, 0x6f0b, 0x2001, 0x0006, 0x1078,
-+ 0x6f14, 0x0078, 0x6f0d, 0x1078, 0x3802, 0x1078, 0x4c9d, 0x1078,
-+ 0x5d1a, 0x1078, 0x4d96, 0x007c, 0x017e, 0x0d7e, 0x6118, 0x2168,
-+ 0x6900, 0xd184, 0x0040, 0x6f2f, 0x6104, 0xa18e, 0x000a, 0x00c0,
-+ 0x6f27, 0x699c, 0xd1a4, 0x00c0, 0x6f27, 0x2001, 0x0007, 0x1078,
-+ 0x37f4, 0x2001, 0x0000, 0x1078, 0x37e0, 0x1078, 0x22d7, 0x0d7f,
-+ 0x017f, 0x007c, 0x0d7e, 0x6618, 0x2668, 0x6804, 0xa084, 0xff00,
-+ 0x8007, 0x0d7f, 0xa0b2, 0x000c, 0x10c8, 0x12cd, 0xa1b6, 0x0015,
-+ 0x00c0, 0x6f46, 0x1079, 0x6f4d, 0x0078, 0x6f4c, 0xa1b6, 0x0016,
-+ 0x10c0, 0x12cd, 0x1079, 0x6f85, 0x007c, 0x5ff7, 0x5ff7, 0x5ff7,
-+ 0x5ff7, 0x5ff7, 0x5ff7, 0x5ff7, 0x6f59, 0x5ff7, 0x5ff7, 0x5ff7,
-+ 0x5ff7, 0x0f7e, 0x2079, 0x7751, 0x7804, 0x0f7f, 0xd0ac, 0x00c0,
-+ 0x6f75, 0x2001, 0x0000, 0x1078, 0x37e0, 0x2001, 0x0002, 0x1078,
-+ 0x37f4, 0x601f, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002, 0x1078,
-+ 0x498e, 0x1078, 0x4d96, 0x0078, 0x6f84, 0x2011, 0x7c83, 0x220c,
-+ 0x017e, 0x0c7e, 0x1078, 0x384c, 0x00c0, 0x6f84, 0x1078, 0x3637,
-+ 0x0c7f, 0x017f, 0x1078, 0x5d1a, 0x007c, 0x5ff7, 0x5ff7, 0x5ff7,
-+ 0x5ff7, 0x5ff7, 0x5ff7, 0x5ff7, 0x6f91, 0x5ff7, 0x5ff7, 0x5ff7,
-+ 0x5ff7, 0x1078, 0x61e7, 0x00c0, 0x6f9d, 0x6003, 0x0001, 0x6007,
-+ 0x0001, 0x1078, 0x498e, 0x0078, 0x6f9f, 0x1078, 0x5d1a, 0x007c,
-+ 0x6004, 0xa08a, 0x0030, 0x10c8, 0x12cd, 0x1078, 0x4c9d, 0x1078,
-+ 0x6bb6, 0x1078, 0x4d96, 0x007c, 0xa182, 0x0040, 0x0079, 0x6fb0,
-+ 0x6fc0, 0x6fc0, 0x6fc0, 0x6fc0, 0x6fc2, 0x6fc0, 0x6fc0, 0x6fc0,
-+ 0x6fc0, 0x6fc0, 0x6fc0, 0x6fc0, 0x6fc0, 0x6fc0, 0x6fc0, 0x6fc0,
-+ 0x1078, 0x12cd, 0x0d7e, 0x0e7e, 0x0f7e, 0x157e, 0x047e, 0x027e,
-+ 0x6106, 0x2071, 0x7c80, 0x7444, 0xa4a4, 0xe600, 0x0040, 0x7026,
-+ 0x2009, 0x0000, 0x0c7e, 0x1078, 0x4727, 0x2c68, 0x0c7f, 0x6a00,
-+ 0xa284, 0x0001, 0x0040, 0x7091, 0x1078, 0x47e6, 0x0040, 0x70bc,
-+ 0xa295, 0x0200, 0x6a02, 0x0078, 0x6feb, 0x2009, 0x0001, 0x2011,
-+ 0x0200, 0x1078, 0x47d0, 0x1078, 0x1327, 0x1040, 0x12cd, 0x6003,
-+ 0x0007, 0x2d00, 0x6837, 0x010d, 0x6803, 0x0000, 0x683b, 0x0000,
-+ 0x6c5a, 0x2c00, 0x685e, 0x6018, 0x2078, 0x78a0, 0x8007, 0x7130,
-+ 0x694a, 0xa084, 0xff00, 0x6846, 0x684f, 0x0000, 0x6857, 0x0036,
-+ 0x1078, 0x3b92, 0xa486, 0x2000, 0x00c0, 0x7014, 0x2019, 0x0017,
-+ 0x1078, 0x75d9, 0x0078, 0x707e, 0xa486, 0x0400, 0x00c0, 0x701e,
-+ 0x2019, 0x0002, 0x1078, 0x75d9, 0x0078, 0x707e, 0xa486, 0x0200,
-+ 0x00c0, 0x7024, 0x1078, 0x75ca, 0x0078, 0x707e, 0x2009, 0x0000,
-+ 0x0c7e, 0x1078, 0x4727, 0x2c68, 0x0c7f, 0x6a00, 0xa284, 0x0001,
-+ 0x0040, 0x70d4, 0xa284, 0x0300, 0x00c0, 0x70cc, 0x6804, 0xa005,
-+ 0x0040, 0x70bc, 0x8001, 0x6806, 0x6003, 0x0007, 0x1078, 0x130c,
-+ 0x0040, 0x7085, 0x6013, 0x0000, 0x6803, 0x0000, 0x6837, 0x0116,
-+ 0x683b, 0x0000, 0x2c00, 0x684a, 0x6018, 0x2078, 0x78a0, 0x8007,
-+ 0x7130, 0x6986, 0x6846, 0x6853, 0x003d, 0x7044, 0xa084, 0x0003,
-+ 0xa086, 0x0002, 0x00c0, 0x7060, 0x684f, 0x0040, 0x0078, 0x706a,
-+ 0xa086, 0x0001, 0x00c0, 0x7068, 0x684f, 0x0080, 0x0078, 0x706a,
-+ 0x684f, 0x0000, 0x20a9, 0x000a, 0x2001, 0x7c90, 0xad90, 0x0015,
-+ 0x200c, 0x810f, 0x2112, 0x8000, 0x8210, 0x00f0, 0x7070, 0x200c,
-+ 0x6982, 0x8000, 0x200c, 0x697e, 0x1078, 0x3b92, 0x027f, 0x047f,
-+ 0x157f, 0x0f7f, 0x0e7f, 0x0d7f, 0x007c, 0x6013, 0x0100, 0x6003,
-+ 0x0001, 0x6007, 0x0041, 0x1078, 0x4941, 0x1078, 0x4d96, 0x0078,
-+ 0x707e, 0x2069, 0x7c92, 0x2d04, 0xa084, 0xff00, 0xa086, 0x1200,
-+ 0x00c0, 0x70b0, 0x2069, 0x7c80, 0x686c, 0xa084, 0x00ff, 0x017e,
-+ 0x6110, 0xa18c, 0x0700, 0xa10d, 0x6112, 0x017f, 0x6003, 0x0001,
-+ 0x6007, 0x0043, 0x1078, 0x4941, 0x1078, 0x4d96, 0x0078, 0x707e,
-+ 0x6013, 0x0200, 0x6003, 0x0001, 0x6007, 0x0041, 0x1078, 0x4941,
-+ 0x1078, 0x4d96, 0x0078, 0x707e, 0x6013, 0x0300, 0x0078, 0x70c2,
-+ 0x6013, 0x0100, 0x6003, 0x0001, 0x6007, 0x0041, 0x1078, 0x4941,
-+ 0x1078, 0x4d96, 0x0078, 0x707e, 0x6013, 0x0500, 0x0078, 0x70c2,
-+ 0x6013, 0x0600, 0x0078, 0x7091, 0x6013, 0x0200, 0x0078, 0x7091,
-+ 0xa186, 0x0013, 0x00c0, 0x70ea, 0x6004, 0xa08a, 0x0040, 0x1048,
-+ 0x12cd, 0xa08a, 0x0050, 0x10c8, 0x12cd, 0xa082, 0x0040, 0x2008,
-+ 0x0079, 0x711b, 0xa186, 0x0047, 0x00c0, 0x70f0, 0x0078, 0x714a,
-+ 0xa186, 0x0027, 0x0040, 0x70f8, 0xa186, 0x0014, 0x10c0, 0x12cd,
-+ 0x6004, 0xa082, 0x0040, 0x2008, 0x0079, 0x70fe, 0x710e, 0x7110,
-+ 0x7110, 0x710e, 0x710e, 0x710e, 0x710e, 0x710e, 0x710e, 0x710e,
-+ 0x710e, 0x710e, 0x710e, 0x710e, 0x710e, 0x710e, 0x1078, 0x12cd,
-+ 0x2001, 0x0007, 0x1078, 0x3802, 0x1078, 0x4c9d, 0x1078, 0x6bb6,
-+ 0x1078, 0x4d96, 0x007c, 0x712b, 0x713b, 0x7134, 0x7144, 0x712b,
-+ 0x712b, 0x712b, 0x712b, 0x712b, 0x712b, 0x712b, 0x712b, 0x712b,
-+ 0x712b, 0x712b, 0x712b, 0x1078, 0x12cd, 0x6010, 0xa088, 0x0013,
-+ 0x2104, 0xa085, 0x0400, 0x200a, 0x1078, 0x4c9d, 0x6003, 0x0002,
-+ 0x1078, 0x4d96, 0x007c, 0x1078, 0x4c9d, 0x1078, 0x47a8, 0x1078,
-+ 0x5d1a, 0x1078, 0x4d96, 0x007c, 0x1078, 0x4c9d, 0x2009, 0x0041,
-+ 0x0078, 0x7212, 0xa182, 0x0040, 0x0079, 0x714e, 0x715e, 0x7160,
-+ 0x715e, 0x715e, 0x715e, 0x715e, 0x715e, 0x7161, 0x715e, 0x715e,
-+ 0x715e, 0x715e, 0x715e, 0x715e, 0x715e, 0x715e, 0x1078, 0x12cd,
-+ 0x007c, 0x6003, 0x0004, 0x6110, 0x20e1, 0x0005, 0x3d18, 0x3e20,
-+ 0x2c10, 0x1078, 0x156a, 0x007c, 0xa182, 0x0040, 0x0079, 0x7170,
-+ 0x7180, 0x7180, 0x7180, 0x7180, 0x7180, 0x7180, 0x7180, 0x7180,
-+ 0x7180, 0x7182, 0x71a5, 0x7180, 0x7180, 0x7180, 0x7180, 0x71a5,
-+ 0x1078, 0x12cd, 0x1078, 0x4d45, 0x1078, 0x4e56, 0x6010, 0x0d7e,
-+ 0x2068, 0x684c, 0xd0fc, 0x0040, 0x7198, 0xa08c, 0x0003, 0xa18e,
-+ 0x0002, 0x0040, 0x719e, 0x2009, 0x0041, 0x0d7f, 0x0078, 0x7212,
-+ 0x6003, 0x0007, 0x1078, 0x47a8, 0x0d7f, 0x007c, 0x1078, 0x47a8,
-+ 0x1078, 0x5d1a, 0x0d7f, 0x0078, 0x719d, 0x037e, 0x1078, 0x4d45,
-+ 0x1078, 0x4e56, 0x6010, 0x0d7e, 0x2068, 0x2019, 0x0004, 0x1078,
-+ 0x75fd, 0x1078, 0x6bb6, 0x6017, 0x0028, 0x0d7f, 0x037f, 0x007c,
-+ 0xa186, 0x0013, 0x00c0, 0x71c6, 0x6004, 0xa086, 0x0042, 0x10c0,
-+ 0x12cd, 0x1078, 0x4c9d, 0x1078, 0x4d96, 0x007c, 0xa186, 0x0027,
-+ 0x0040, 0x71ce, 0xa186, 0x0014, 0x00c0, 0x71de, 0x6004, 0xa086,
-+ 0x0042, 0x10c0, 0x12cd, 0x2001, 0x0007, 0x1078, 0x3802, 0x1078,
-+ 0x4c9d, 0x1078, 0x6bb6, 0x1078, 0x4d96, 0x007c, 0xa182, 0x0040,
-+ 0x0079, 0x71e2, 0x71f2, 0x71f2, 0x71f2, 0x71f2, 0x71f2, 0x71f2,
-+ 0x71f2, 0x71f4, 0x7200, 0x71f2, 0x71f2, 0x71f2, 0x71f2, 0x71f2,
-+ 0x71f2, 0x71f2, 0x1078, 0x12cd, 0x037e, 0x047e, 0x20e1, 0x0005,
-+ 0x3d18, 0x3e20, 0x2c10, 0x1078, 0x156a, 0x047f, 0x037f, 0x007c,
-+ 0x6010, 0x0d7e, 0x2068, 0x684c, 0xd0fc, 0x0040, 0x720c, 0x2009,
-+ 0x0041, 0x0d7f, 0x0078, 0x7212, 0x6003, 0x0007, 0x1078, 0x47a8,
-+ 0x0d7f, 0x007c, 0xa182, 0x0040, 0x0079, 0x7216, 0x7226, 0x7228,
-+ 0x7234, 0x7240, 0x7226, 0x7226, 0x7226, 0x7226, 0x7226, 0x7226,
-+ 0x7226, 0x7226, 0x7226, 0x7226, 0x7226, 0x7226, 0x1078, 0x12cd,
-+ 0x6003, 0x0001, 0x6106, 0x1078, 0x4941, 0x127e, 0x2091, 0x8000,
-+ 0x1078, 0x4d96, 0x127f, 0x007c, 0x6003, 0x0001, 0x6106, 0x1078,
-+ 0x4941, 0x127e, 0x2091, 0x8000, 0x1078, 0x4d96, 0x127f, 0x007c,
-+ 0x6003, 0x0003, 0x6106, 0x2c10, 0x1078, 0x19c7, 0x127e, 0x2091,
-+ 0x8000, 0x1078, 0x49ad, 0x1078, 0x4e56, 0x127f, 0x007c, 0x1078,
-+ 0x4c9d, 0x0078, 0x7255, 0x1078, 0x4d45, 0x6110, 0x81ff, 0x0040,
-+ 0x7262, 0x0d7e, 0x2168, 0x037e, 0x2019, 0x0029, 0x1078, 0x75fd,
-+ 0x037f, 0x0d7f, 0x1078, 0x6bb6, 0x1078, 0x4d96, 0x007c, 0xa182,
-+ 0x0085, 0x0079, 0x726b, 0x7272, 0x7272, 0x7272, 0x7274, 0x7272,
-+ 0x7272, 0x7272, 0x1078, 0x12cd, 0x027e, 0x0e7e, 0x2071, 0x7c80,
-+ 0x7220, 0x1078, 0x7517, 0x0040, 0x7281, 0x6007, 0x0086, 0x0078,
-+ 0x7283, 0x6007, 0x0087, 0x6003, 0x0001, 0x1078, 0x4941, 0x1078,
-+ 0x4d96, 0x0e7f, 0x027f, 0x007c, 0xa186, 0x0013, 0x00c0, 0x729d,
-+ 0x6004, 0xa08a, 0x0085, 0x1048, 0x12cd, 0xa08a, 0x008c, 0x10c8,
-+ 0x12cd, 0xa082, 0x0085, 0x0079, 0x72b0, 0xa186, 0x0027, 0x0040,
-+ 0x72a5, 0xa186, 0x0014, 0x10c0, 0x12cd, 0x2001, 0x0007, 0x1078,
-+ 0x3802, 0x1078, 0x4c9d, 0x1078, 0x6bb6, 0x1078, 0x4d96, 0x007c,
-+ 0x72b7, 0x72b9, 0x72b9, 0x72b7, 0x72b7, 0x72b7, 0x72b7, 0x1078,
-+ 0x12cd, 0x1078, 0x4c9d, 0x1078, 0x5d1a, 0x1078, 0x4d96, 0x007c,
-+ 0xa182, 0x0085, 0x1048, 0x12cd, 0xa182, 0x008c, 0x10c8, 0x12cd,
-+ 0xa182, 0x0085, 0x0079, 0x72cc, 0x72d3, 0x72d3, 0x72d3, 0x72d5,
-+ 0x72d3, 0x72d3, 0x72d3, 0x1078, 0x12cd, 0x007c, 0x1078, 0x4c9d,
-+ 0x1078, 0x6bb6, 0x1078, 0x4d96, 0x007c, 0x037e, 0x2019, 0x000b,
-+ 0x1078, 0x72e6, 0x601f, 0x0006, 0x037f, 0x007c, 0x127e, 0x037e,
-+ 0x087e, 0x2091, 0x8000, 0x2c40, 0x1078, 0x5a2d, 0x00c0, 0x7313,
-+ 0x1078, 0x5ace, 0x00c0, 0x7313, 0x6000, 0xa086, 0x0000, 0x0040,
-+ 0x7313, 0x601c, 0xa086, 0x0007, 0x0040, 0x7313, 0x0d7e, 0x6000,
-+ 0xa086, 0x0004, 0x00c0, 0x7306, 0x1078, 0x166e, 0x6010, 0x2068,
-+ 0x1078, 0x6a58, 0x0040, 0x730e, 0x1078, 0x75fd, 0x0d7f, 0x6013,
-+ 0x0000, 0x601f, 0x0007, 0x087f, 0x037f, 0x127f, 0x007c, 0x0f7e,
-+ 0x0c7e, 0x037e, 0x157e, 0x2079, 0x7c80, 0x7838, 0xa08c, 0x00ff,
-+ 0x783c, 0x1078, 0x207f, 0x00c0, 0x734e, 0x017e, 0x0c7e, 0x1078,
-+ 0x384c, 0x00c0, 0x734e, 0x2011, 0x7c90, 0xac98, 0x000a, 0x20a9,
-+ 0x0004, 0x1078, 0x6280, 0x00c0, 0x734e, 0x017f, 0x027f, 0x027e,
-+ 0x017e, 0x2019, 0x0029, 0x1078, 0x5ba2, 0x1078, 0x4a7e, 0x1078,
-+ 0x49c1, 0x017f, 0x1078, 0x747b, 0x1078, 0x3a36, 0x017f, 0x1078,
-+ 0x3637, 0x6612, 0x6516, 0xa006, 0x0078, 0x7350, 0x0c7f, 0x017f,
-+ 0x157f, 0x037f, 0x0c7f, 0x0f7f, 0x007c, 0x0c7e, 0x0d7e, 0x017e,
-+ 0x2009, 0x771e, 0x2104, 0xa086, 0x0074, 0x00c0, 0x73ac, 0x2069,
-+ 0x7c8e, 0x690c, 0xa182, 0x0100, 0x0048, 0x739c, 0x6908, 0xa184,
-+ 0x8000, 0x0040, 0x73a8, 0xa184, 0x0800, 0x0040, 0x73a8, 0x6910,
-+ 0xa18a, 0x0001, 0x0048, 0x73a0, 0x6914, 0x2069, 0x7cae, 0x6904,
-+ 0x81ff, 0x00c0, 0x7394, 0x690c, 0xa182, 0x0100, 0x0048, 0x739c,
-+ 0x6908, 0x81ff, 0x00c0, 0x7398, 0x6910, 0xa18a, 0x0001, 0x0048,
-+ 0x73a0, 0x6918, 0xa18a, 0x0001, 0x0048, 0x73a8, 0x0078, 0x73b2,
-+ 0x6013, 0x0100, 0x0078, 0x73ae, 0x6013, 0x0300, 0x0078, 0x73ae,
-+ 0x6013, 0x0500, 0x0078, 0x73ae, 0x6013, 0x0700, 0x0078, 0x73ae,
-+ 0x6013, 0x0900, 0x0078, 0x73ae, 0x6013, 0x0b00, 0x0078, 0x73ae,
-+ 0x6013, 0x0f00, 0x0078, 0x73ae, 0x6013, 0x2d00, 0xa085, 0x0001,
-+ 0x0078, 0x73b3, 0xa006, 0x017f, 0x0d7f, 0x0c7f, 0x007c, 0x0c7e,
-+ 0x0d7e, 0x027e, 0x037e, 0x157e, 0x6218, 0x2268, 0x6b04, 0xa394,
-+ 0x00ff, 0xa286, 0x0006, 0x0040, 0x73db, 0xa286, 0x0004, 0x0040,
-+ 0x73db, 0xa394, 0xff00, 0x8217, 0xa286, 0x0006, 0x0040, 0x73db,
-+ 0xa286, 0x0004, 0x0040, 0x73db, 0x0c7e, 0x2d60, 0x1078, 0x385e,
-+ 0x0c7f, 0x0078, 0x740e, 0x2011, 0x7c96, 0xad98, 0x000a, 0x20a9,
-+ 0x0004, 0x1078, 0x6280, 0x00c0, 0x740f, 0x2011, 0x7c9a, 0xad98,
-+ 0x0006, 0x20a9, 0x0004, 0x1078, 0x6280, 0x00c0, 0x740f, 0x047e,
-+ 0x017e, 0x6aa0, 0xa294, 0x00ff, 0x8227, 0xa006, 0x2009, 0x7752,
-+ 0x210c, 0xd1a4, 0x0040, 0x7403, 0x2009, 0x0029, 0x1078, 0x7641,
-+ 0x6800, 0xc0e5, 0x6802, 0x2019, 0x0029, 0x1078, 0x4a7e, 0x1078,
-+ 0x49c1, 0x2c08, 0x1078, 0x747b, 0x017f, 0x047f, 0xa006, 0x157f,
-+ 0x037f, 0x027f, 0x0d7f, 0x0c7f, 0x007c, 0x0d7e, 0x2069, 0x7c8e,
-+ 0x6800, 0xa086, 0x0800, 0x0040, 0x7421, 0x6013, 0x0000, 0x0078,
-+ 0x7422, 0xa006, 0x0d7f, 0x007c, 0x0c7e, 0x0f7e, 0x017e, 0x027e,
-+ 0x037e, 0x157e, 0x2079, 0x7c8c, 0x7930, 0x7834, 0x1078, 0x207f,
-+ 0x00c0, 0x7448, 0x1078, 0x384c, 0x00c0, 0x7448, 0x2011, 0x7c90,
-+ 0xac98, 0x000a, 0x20a9, 0x0004, 0x1078, 0x6280, 0x00c0, 0x7448,
-+ 0x2011, 0x7c94, 0xac98, 0x0006, 0x20a9, 0x0004, 0x1078, 0x6280,
-+ 0x157f, 0x037f, 0x027f, 0x017f, 0x0f7f, 0x0c7f, 0x007c, 0x0c7e,
-+ 0x007e, 0x017e, 0x027e, 0x037e, 0x157e, 0x2011, 0x7c83, 0x2204,
-+ 0x8211, 0x220c, 0x1078, 0x207f, 0x00c0, 0x7474, 0x1078, 0x384c,
-+ 0x00c0, 0x7474, 0x2011, 0x7c96, 0xac98, 0x000a, 0x20a9, 0x0004,
-+ 0x1078, 0x6280, 0x00c0, 0x7474, 0x2011, 0x7c9a, 0xac98, 0x0006,
-+ 0x20a9, 0x0004, 0x1078, 0x6280, 0x157f, 0x037f, 0x027f, 0x017f,
-+ 0x007f, 0x0c7f, 0x007c, 0x0e7e, 0x0c7e, 0x077e, 0x067e, 0x057e,
-+ 0x047e, 0x027e, 0x127e, 0x2091, 0x8000, 0x2029, 0x793f, 0x252c,
-+ 0x2021, 0x7945, 0x2424, 0x2061, 0x7e00, 0x2071, 0x7700, 0x7644,
-+ 0x7060, 0x8001, 0xa602, 0x00c8, 0x74e0, 0x2100, 0xac06, 0x0040,
-+ 0x74d6, 0x1078, 0x7659, 0x0040, 0x74d6, 0x671c, 0xa786, 0x0001,
-+ 0x0040, 0x74f5, 0xa786, 0x0007, 0x0040, 0x74d6, 0x2500, 0xac06,
-+ 0x0040, 0x74d6, 0x2400, 0xac06, 0x0040, 0x74d6, 0x1078, 0x766d,
-+ 0x00c0, 0x74d6, 0x0d7e, 0x6000, 0xa086, 0x0004, 0x00c0, 0x74bc,
-+ 0x017e, 0x1078, 0x166e, 0x017f, 0x6010, 0x2068, 0x1078, 0x6a58,
-+ 0x0040, 0x74d3, 0xa786, 0x0003, 0x00c0, 0x74e9, 0x6837, 0x0103,
-+ 0x6b4a, 0x6847, 0x0000, 0x017e, 0x1078, 0x6c54, 0x1078, 0x3b92,
-+ 0x017f, 0x1078, 0x6ba9, 0x0d7f, 0x1078, 0x6bb6, 0xace0, 0x0008,
-+ 0x2001, 0x7715, 0x2004, 0xac02, 0x00c8, 0x74e0, 0x0078, 0x748d,
-+ 0x127f, 0x027f, 0x047f, 0x057f, 0x067f, 0x077f, 0x0c7f, 0x0e7f,
-+ 0x007c, 0xa786, 0x0006, 0x00c0, 0x74c6, 0xa386, 0x0005, 0x0040,
-+ 0x74d6, 0x1078, 0x75fd, 0x0078, 0x74d3, 0x1078, 0x766d, 0x00c0,
-+ 0x74d6, 0xa180, 0x0001, 0x2004, 0xa086, 0x0018, 0x00c0, 0x74d6,
-+ 0x6000, 0xa086, 0x0002, 0x00c0, 0x74d6, 0x1078, 0x6bcf, 0x0040,
-+ 0x7511, 0x1078, 0x6be3, 0x00c0, 0x74d6, 0x1078, 0x5f6d, 0x0078,
-+ 0x7513, 0x1078, 0x22d7, 0x1078, 0x6bb6, 0x0078, 0x74d6, 0x0c7e,
-+ 0x0e7e, 0x017e, 0x2c08, 0x2170, 0x1078, 0x7614, 0x017f, 0x0040,
-+ 0x7526, 0x601c, 0xa084, 0x000f, 0x1079, 0x7529, 0x0e7f, 0x0c7f,
-+ 0x007c, 0x7531, 0x7531, 0x7531, 0x7531, 0x7531, 0x7531, 0x7533,
-+ 0x7531, 0xa006, 0x007c, 0x047e, 0x017e, 0x7018, 0xa080, 0x0028,
-+ 0x2024, 0xa4a4, 0x00ff, 0x8427, 0x2c00, 0x2009, 0x0020, 0x1078,
-+ 0x7641, 0x017f, 0x047f, 0x037e, 0x2019, 0x0002, 0x1078, 0x72e6,
-+ 0x037f, 0xa085, 0x0001, 0x007c, 0x2001, 0x0001, 0x1078, 0x37e0,
-+ 0x157e, 0x017e, 0x027e, 0x037e, 0x20a9, 0x0004, 0x2019, 0x7705,
-+ 0x2011, 0x7c96, 0x1078, 0x6280, 0x037f, 0x027f, 0x017f, 0x157f,
-+ 0xa005, 0x007c, 0x0f7e, 0x0e7e, 0x0c7e, 0x077e, 0x067e, 0x027e,
-+ 0x127e, 0x2091, 0x8000, 0x2061, 0x7e00, 0x2079, 0x0001, 0x8fff,
-+ 0x0040, 0x75bd, 0x2071, 0x7700, 0x7644, 0x7060, 0x8001, 0xa602,
-+ 0x00c8, 0x75bd, 0x88ff, 0x0040, 0x7583, 0x2800, 0xac06, 0x00c0,
-+ 0x75b3, 0x2079, 0x0000, 0x1078, 0x7659, 0x0040, 0x75b3, 0x2400,
-+ 0xac06, 0x0040, 0x75b3, 0x671c, 0xa786, 0x0006, 0x00c0, 0x75b3,
-+ 0xa786, 0x0007, 0x0040, 0x75b3, 0x88ff, 0x00c0, 0x759b, 0x6018,
-+ 0xa206, 0x00c0, 0x75b3, 0x0d7e, 0x6000, 0xa086, 0x0004, 0x00c0,
-+ 0x75a3, 0x1078, 0x166e, 0x6010, 0x2068, 0x1078, 0x6a58, 0x0040,
-+ 0x75ad, 0x047e, 0x1078, 0x75fd, 0x047f, 0x0d7f, 0x1078, 0x6bb6,
-+ 0x88ff, 0x00c0, 0x75c6, 0xace0, 0x0008, 0x2001, 0x7715, 0x2004,
-+ 0xac02, 0x00c8, 0x75bd, 0x0078, 0x756f, 0xa006, 0x127f, 0x027f,
-+ 0x067f, 0x077f, 0x0c7f, 0x0e7f, 0x0f7f, 0x007c, 0xa8c5, 0x0001,
-+ 0x0078, 0x75be, 0x087e, 0x2041, 0x0000, 0x2c20, 0x2019, 0x0002,
-+ 0x6218, 0x1078, 0x5a2d, 0x1078, 0x5ace, 0x1078, 0x7562, 0x087f,
-+ 0x007c, 0x027e, 0x047e, 0x087e, 0x0c7e, 0x157e, 0x2c20, 0x20a9,
-+ 0x007f, 0x2009, 0x0000, 0x017e, 0x037e, 0x1078, 0x384c, 0x00c0,
-+ 0x75f2, 0x2c10, 0x2041, 0x0000, 0x1078, 0x5a2d, 0x1078, 0x5ace,
-+ 0x1078, 0x7562, 0x037f, 0x017f, 0x8108, 0x00f0, 0x75e3, 0x157f,
-+ 0x0c7f, 0x087f, 0x047f, 0x027f, 0x007c, 0x017e, 0x0f7e, 0x8dff,
-+ 0x0040, 0x7611, 0x6800, 0xa07d, 0x0040, 0x760e, 0x6803, 0x0000,
-+ 0x6b52, 0x1078, 0x3b92, 0x2f68, 0x0078, 0x7602, 0x6b52, 0x1078,
-+ 0x3b92, 0x0f7f, 0x017f, 0x007c, 0x0e7e, 0x047e, 0x037e, 0x2061,
-+ 0x7e00, 0x2071, 0x7700, 0x7444, 0x7060, 0x8001, 0xa402, 0x00c8,
-+ 0x763c, 0x2100, 0xac06, 0x0040, 0x762e, 0x6000, 0xa086, 0x0000,
-+ 0x0040, 0x762e, 0x6008, 0xa206, 0x0040, 0x7638, 0xace0, 0x0008,
-+ 0x2001, 0x7715, 0x2004, 0xac02, 0x00c8, 0x763c, 0x0078, 0x7619,
-+ 0xa085, 0x0001, 0x0078, 0x763d, 0xa006, 0x037f, 0x047f, 0x0e7f,
-+ 0x007c, 0x0d7e, 0x007e, 0x1078, 0x1327, 0x007f, 0x1040, 0x12cd,
-+ 0x6837, 0x010d, 0x6803, 0x0000, 0x683b, 0x0000, 0x685b, 0x0000,
-+ 0x685e, 0x6956, 0x6c46, 0x684f, 0x0000, 0x1078, 0x3b92, 0x0d7f,
-+ 0x007c, 0x6700, 0xa786, 0x0000, 0x0040, 0x766c, 0xa786, 0x0001,
-+ 0x0040, 0x766c, 0xa786, 0x000a, 0x0040, 0x766c, 0xa786, 0x0009,
-+ 0x0040, 0x766c, 0xa085, 0x0001, 0x007c, 0x0e7e, 0x6018, 0x2070,
-+ 0x70a0, 0xa206, 0x0e7f, 0x007c, 0x127e, 0x007e, 0x0e7e, 0x2091,
-+ 0x8000, 0x2071, 0x7740, 0xd5a4, 0x0040, 0x7681, 0x7034, 0x8000,
-+ 0x7036, 0xd5b4, 0x0040, 0x7687, 0x7030, 0x8000, 0x7032, 0xd5ac,
-+ 0x0040, 0x768e, 0x2071, 0x774a, 0x1078, 0x76bd, 0x0e7f, 0x007f,
-+ 0x127f, 0x007c, 0x127e, 0x007e, 0x0e7e, 0x2091, 0x8000, 0x2071,
-+ 0x7740, 0xd5a4, 0x0040, 0x769f, 0x7034, 0x8000, 0x7036, 0xd5b4,
-+ 0x0040, 0x76a5, 0x7030, 0x8000, 0x7032, 0xd5ac, 0x0040, 0x76ac,
-+ 0x2071, 0x774a, 0x1078, 0x76bd, 0x0e7f, 0x007f, 0x127f, 0x007c,
-+ 0x127e, 0x007e, 0x0e7e, 0x2091, 0x8000, 0x2071, 0x7742, 0x1078,
-+ 0x76bd, 0x0e7f, 0x007f, 0x127f, 0x007c, 0x2e04, 0x8000, 0x2072,
-+ 0x00c8, 0x76c6, 0x8e70, 0x2e04, 0x8000, 0x2072, 0x007c, 0x0e7e,
-+ 0x2071, 0x7740, 0x1078, 0x76bd, 0x0e7f, 0x007c, 0x0e7e, 0x2071,
-+ 0x7744, 0x1078, 0x76bd, 0x0e7f, 0x007c, 0x0001, 0x0002, 0x0004,
-+ 0x0008, 0x0010, 0x0020, 0x0040, 0x0080, 0x0100, 0x0200, 0x0400,
-+ 0x0800, 0x1000, 0x2000, 0x4000, 0x8000, 0x687d
-+};
-+#endif
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/scsi/isp/asm_2200.h 2003-07-19 17:06:33.000000000 -0700
-@@ -0,0 +1,5286 @@
-+/* @(#)asm_2200.h 1.5 */
-+/*
-+ * Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 by Qlogic, Inc.
-+ * All rights reserved.
-+ *
-+ * Redistribution and use in source and binary forms are permitted provided
-+ * that the following conditions are met:
-+ * 1. Redistribution of source code must retain the above copyright
-+ * notice, this list of conditions and the following disclaimer.
-+ * 2. Redistribution in binary form must reproduce the above copyright
-+ * notice, this list of conditions and the following disclaimer in the
-+ * documentation and/or other materials provided with the distribution.
-+ * 3. The name of the author may not be used to endorse or promote products
-+ * derived from this software without specific prior written permission
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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, 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) HOWEVER CAUSED AND ON ANY
-+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-+ */
-+
-+/************************************************************************
-+ * *
-+ * --- ISP2200 Initiator/Target Firmware --- *
-+ * with Fabric (Public Loop), Point-point, and *
-+ * expanded LUN addressing for FCTAPE *
-+ * *
-+ ************************************************************************/
-+/*
-+ * Firmware Version 2.02.03 (08:58 May 02, 2002)
-+ */
-+static const u_int16_t isp_2200_risc_code[] = {
-+ 0x0470, 0x0000, 0x0000, 0xa3f2, 0x0000, 0x0002, 0x0002, 0x0003,
-+ 0x0017, 0x2043, 0x4f50, 0x5952, 0x4947, 0x4854, 0x2032, 0x3030,
-+ 0x3120, 0x514c, 0x4f47, 0x4943, 0x2043, 0x4f52, 0x504f, 0x5241,
-+ 0x5449, 0x4f4e, 0x2049, 0x5350, 0x3232, 0x3030, 0x2046, 0x6972,
-+ 0x6d77, 0x6172, 0x6520, 0x2056, 0x6572, 0x7369, 0x6f6e, 0x2030,
-+ 0x322e, 0x3032, 0x2e30, 0x3320, 0x2020, 0x2020, 0x2400, 0x20c1,
-+ 0x0005, 0x2001, 0x017f, 0x2003, 0x0000, 0x20c9, 0xb9ff, 0x2091,
-+ 0x2000, 0x2059, 0x0000, 0x2b78, 0x7823, 0x0004, 0x2089, 0x2930,
-+ 0x2051, 0xb400, 0x2a70, 0x2029, 0xec00, 0x2031, 0xffff, 0x2039,
-+ 0xebe9, 0x2021, 0x0200, 0x0804, 0x1464, 0x20a1, 0xb3f2, 0xa00e,
-+ 0x20a9, 0x080e, 0x41a4, 0x3400, 0x7562, 0x7666, 0x775e, 0x746a,
-+ 0x746e, 0x20a1, 0xbc00, 0x7164, 0x810d, 0x810d, 0x810d, 0x810d,
-+ 0xa18c, 0x000f, 0x2001, 0x000b, 0xa112, 0xa00e, 0x21a8, 0x41a4,
-+ 0x3400, 0x8211, 0x1dd8, 0x7164, 0x3400, 0xa102, 0x0120, 0x0218,
-+ 0x20a8, 0xa00e, 0x41a4, 0x3800, 0xd08c, 0x01d8, 0x2009, 0xb400,
-+ 0x810d, 0x810d, 0x810d, 0x810d, 0xa18c, 0x000f, 0x2001, 0x0001,
-+ 0xa112, 0x20a1, 0x1000, 0xa00e, 0x21a8, 0x41a4, 0x8211, 0x1de0,
-+ 0x2009, 0xb400, 0x3400, 0xa102, 0x0120, 0x0218, 0x20a8, 0xa00e,
-+ 0x41a4, 0x080c, 0x140d, 0x080c, 0x162e, 0x080c, 0x17c7, 0x080c,
-+ 0x1f73, 0x080c, 0x4bb9, 0x080c, 0x8562, 0x080c, 0x15b7, 0x080c,
-+ 0x2e88, 0x080c, 0x5d4b, 0x080c, 0x5302, 0x080c, 0x6893, 0x080c,
-+ 0x24d9, 0x080c, 0x6b26, 0x080c, 0x637c, 0x080c, 0x239b, 0x080c,
-+ 0x24a7, 0x2091, 0x3009, 0x7823, 0x0000, 0x1004, 0x10c5, 0x7820,
-+ 0xa086, 0x0002, 0x1150, 0x7823, 0x4000, 0x0e04, 0x10bd, 0x781b,
-+ 0x0001, 0x2091, 0x5000, 0x2091, 0x4080, 0x2a70, 0x7003, 0x0000,
-+ 0x2a70, 0x7000, 0xa08e, 0x0003, 0x1158, 0x080c, 0x3ec6, 0x080c,
-+ 0x2eaf, 0x080c, 0x5d99, 0x080c, 0x54b1, 0x080c, 0x68be, 0x0c80,
-+ 0x000b, 0x0c98, 0x10e4, 0x10e5, 0x1210, 0x10e2, 0x12d9, 0x140a,
-+ 0x140b, 0x140c, 0x080c, 0x1511, 0x0005, 0x0126, 0x00f6, 0x2091,
-+ 0x8000, 0x7000, 0xa086, 0x0001, 0x1904, 0x11ed, 0x080c, 0x1584,
-+ 0x080c, 0x5a90, 0x0150, 0x080c, 0x5ab6, 0x15c0, 0x2079, 0x0100,
-+ 0x7828, 0xa085, 0x1800, 0x782a, 0x0488, 0x080c, 0x59c8, 0x7000,
-+ 0xa086, 0x0001, 0x1904, 0x11ed, 0x708c, 0xa086, 0x0028, 0x1904,
-+ 0x11ed, 0x2001, 0x0161, 0x2003, 0x0001, 0x2079, 0x0100, 0x7827,
-+ 0xffff, 0x7a28, 0xa295, 0x1e2f, 0x7a2a, 0x2011, 0x5963, 0x080c,
-+ 0x6961, 0x2011, 0x5956, 0x080c, 0x6a21, 0x2011, 0x59a5, 0x080c,
-+ 0x6961, 0x2011, 0x4a96, 0x080c, 0x6961, 0x2011, 0x8030, 0x2019,
-+ 0x0000, 0x708b, 0x0000, 0x080c, 0x1db8, 0x00e8, 0x080c, 0x4449,
-+ 0x2079, 0x0100, 0x7844, 0xa005, 0x1904, 0x11ed, 0x2011, 0x4a96,
-+ 0x080c, 0x6961, 0x2011, 0x59a5, 0x080c, 0x6961, 0x080c, 0x1db8,
-+ 0x2001, 0xb68d, 0x2004, 0x780e, 0x7840, 0xa084, 0xfffb, 0x7842,
-+ 0x2011, 0x8010, 0x73cc, 0x080c, 0x3e8a, 0x723c, 0xc284, 0x723e,
-+ 0x2001, 0xb40c, 0x200c, 0xc1ac, 0x2102, 0x080c, 0x7edf, 0x2011,
-+ 0x0004, 0x080c, 0x9bf1, 0x080c, 0x520e, 0x080c, 0x5a90, 0x0158,
-+ 0x080c, 0x4ba2, 0x0140, 0x708b, 0x0001, 0x70c7, 0x0000, 0x080c,
-+ 0x45e6, 0x0804, 0x11ed, 0x080c, 0x52ca, 0x0120, 0x7a0c, 0xc2b4,
-+ 0x7a0e, 0x0060, 0x7073, 0x0000, 0x080c, 0x9f99, 0x70d4, 0xd09c,
-+ 0x1128, 0x70a0, 0xa005, 0x0110, 0x080c, 0x4b80, 0x70df, 0x0000,
-+ 0x70db, 0x0000, 0x72d4, 0x080c, 0x5a90, 0x1178, 0x2011, 0x0000,
-+ 0x0016, 0x080c, 0x28b1, 0x2019, 0xb68f, 0x211a, 0x001e, 0x7053,
-+ 0xffff, 0x7057, 0x00ef, 0x7077, 0x0000, 0x2079, 0xb452, 0x7804,
-+ 0xd0ac, 0x0108, 0xc295, 0x72d6, 0x080c, 0x5a90, 0x0118, 0xa296,
-+ 0x0004, 0x0548, 0x2011, 0x0001, 0x080c, 0x9bf1, 0x709b, 0x0000,
-+ 0x709f, 0xffff, 0x7003, 0x0002, 0x2079, 0x0100, 0x7827, 0x0003,
-+ 0x7828, 0xa085, 0x0003, 0x782a, 0x00fe, 0x080c, 0x2a7e, 0x2011,
-+ 0x0005, 0x080c, 0x801f, 0x080c, 0x7134, 0x080c, 0x5a90, 0x0148,
-+ 0x00c6, 0x2061, 0x0100, 0x0016, 0x080c, 0x28b1, 0x61e2, 0x001e,
-+ 0x00ce, 0x012e, 0x0420, 0x709b, 0x0000, 0x709f, 0xffff, 0x7003,
-+ 0x0002, 0x00f6, 0x2079, 0x0100, 0x7827, 0x0003, 0x7828, 0xa085,
-+ 0x0003, 0x782a, 0x00fe, 0x2011, 0x0005, 0x080c, 0x801f, 0x080c,
-+ 0x7134, 0x080c, 0x5a90, 0x0148, 0x00c6, 0x2061, 0x0100, 0x0016,
-+ 0x080c, 0x28b1, 0x61e2, 0x001e, 0x00ce, 0x00fe, 0x012e, 0x0005,
-+ 0x00c6, 0x080c, 0x5a90, 0x1118, 0x20a9, 0x0100, 0x0010, 0x20a9,
-+ 0x0082, 0x080c, 0x5a90, 0x1118, 0x2009, 0x0000, 0x0010, 0x2009,
-+ 0x007e, 0x080c, 0x2d5b, 0x8108, 0x1f04, 0x1201, 0x00ce, 0x7073,
-+ 0x0000, 0x7074, 0xa084, 0x00ff, 0x7076, 0x70a3, 0x0000, 0x0005,
-+ 0x0126, 0x2091, 0x8000, 0x7000, 0xa086, 0x0002, 0x1904, 0x12d7,
-+ 0x709c, 0xa086, 0xffff, 0x0130, 0x080c, 0x2a7e, 0x080c, 0x7134,
-+ 0x0804, 0x12d7, 0x70d4, 0xd0ac, 0x1110, 0xd09c, 0x0540, 0xd084,
-+ 0x0530, 0x0006, 0x0016, 0x2001, 0x0103, 0x2009, 0xb68d, 0x210c,
-+ 0x2102, 0x001e, 0x000e, 0xd08c, 0x01d0, 0x70d8, 0xa086, 0xffff,
-+ 0x0190, 0x080c, 0x2bdd, 0x080c, 0x7134, 0x70d4, 0xd094, 0x1904,
-+ 0x12d7, 0x2011, 0x0001, 0x2019, 0x0000, 0x080c, 0x2c13, 0x080c,
-+ 0x7134, 0x0804, 0x12d7, 0x70dc, 0xa005, 0x1904, 0x12d7, 0x7098,
-+ 0xa005, 0x1904, 0x12d7, 0x70d4, 0xd0a4, 0x0118, 0xd0b4, 0x0904,
-+ 0x12d7, 0x080c, 0x52ca, 0x1904, 0x12d7, 0x2001, 0xb453, 0x2004,
-+ 0xd0ac, 0x01c8, 0x0156, 0x00c6, 0x20a9, 0x007f, 0x2009, 0x0000,
-+ 0x0016, 0x080c, 0x4f6a, 0x1118, 0x6000, 0xd0ec, 0x1138, 0x001e,
-+ 0x8108, 0x1f04, 0x1268, 0x00ce, 0x015e, 0x0028, 0x001e, 0x00ce,
-+ 0x015e, 0x0804, 0x12d7, 0x0006, 0x0016, 0x2001, 0x0103, 0x2009,
-+ 0xb68d, 0x210c, 0x2102, 0x001e, 0x000e, 0xa006, 0x2009, 0x0700,
-+ 0x20a9, 0x0002, 0x20a1, 0xb6ce, 0x40a1, 0x7070, 0x8007, 0x7174,
-+ 0x810f, 0x20a9, 0x0002, 0x40a1, 0x2009, 0x0000, 0x080c, 0x14f7,
-+ 0x2001, 0x0000, 0x810f, 0x20a9, 0x0002, 0x40a1, 0xa006, 0x2009,
-+ 0x0200, 0x20a9, 0x0002, 0x20a1, 0xb6de, 0x40a1, 0x7030, 0xc08c,
-+ 0x7032, 0x7003, 0x0003, 0x709f, 0xffff, 0x080c, 0x157d, 0xa006,
-+ 0x080c, 0x2789, 0x080c, 0x3efc, 0x00f6, 0x2079, 0x0100, 0x080c,
-+ 0x5ab6, 0x0150, 0x080c, 0x5a90, 0x7828, 0x0118, 0xa084, 0xe1ff,
-+ 0x0010, 0xa084, 0xffdf, 0x782a, 0x00fe, 0x2001, 0xb6e1, 0x2004,
-+ 0xa086, 0x0005, 0x1120, 0x2011, 0x0000, 0x080c, 0x801f, 0x2011,
-+ 0x0000, 0x080c, 0x8029, 0x080c, 0x7134, 0x080c, 0x71f1, 0x012e,
-+ 0x0005, 0x0016, 0x0046, 0x00f6, 0x0126, 0x2091, 0x8000, 0x2079,
-+ 0x0100, 0x2009, 0xb434, 0x2104, 0xa005, 0x1110, 0x080c, 0x28dd,
-+ 0x2009, 0x00f7, 0x080c, 0x4b69, 0x7940, 0xa18c, 0x0010, 0x7942,
-+ 0x7924, 0xd1b4, 0x0110, 0x7827, 0x0040, 0xd19c, 0x0110, 0x7827,
-+ 0x0008, 0x0006, 0x0036, 0x0156, 0x7954, 0xd1ac, 0x1904, 0x1347,
-+ 0x080c, 0x5aa2, 0x0158, 0x080c, 0x5ab6, 0x1128, 0x2001, 0xb69e,
-+ 0x2003, 0x0000, 0x0070, 0x080c, 0x5a98, 0x0dc0, 0x2001, 0xb69e,
-+ 0x2003, 0xaaaa, 0x2001, 0xb69f, 0x2003, 0x0001, 0x080c, 0x59c8,
-+ 0x0058, 0x080c, 0x5a90, 0x0140, 0x2009, 0x00f8, 0x080c, 0x4b69,
-+ 0x7843, 0x0090, 0x7843, 0x0010, 0x20a9, 0x09c4, 0x7820, 0xd09c,
-+ 0x1138, 0x080c, 0x5a90, 0x0138, 0x7824, 0xd0ac, 0x1904, 0x13f1,
-+ 0x1f04, 0x1326, 0x0070, 0x7824, 0x080c, 0x5aac, 0x0118, 0xd0ac,
-+ 0x1904, 0x13f1, 0xa084, 0x1800, 0x0d98, 0x7003, 0x0001, 0x0804,
-+ 0x13f1, 0x2001, 0x0001, 0x080c, 0x2789, 0x0804, 0x1400, 0x7850,
-+ 0xa084, 0x0180, 0x7852, 0x782f, 0x0020, 0x20a9, 0x0046, 0x1d04,
-+ 0x134f, 0x080c, 0x6a09, 0x1f04, 0x134f, 0x7850, 0xa084, 0x0180,
-+ 0xa085, 0x0400, 0x7852, 0x782f, 0x0000, 0x080c, 0x5aa2, 0x0158,
-+ 0x080c, 0x5ab6, 0x1128, 0x2001, 0xb69e, 0x2003, 0x0000, 0x0070,
-+ 0x080c, 0x5a98, 0x0dc0, 0x2001, 0xb69e, 0x2003, 0xaaaa, 0x2001,
-+ 0xb69f, 0x2003, 0x0001, 0x080c, 0x59c8, 0x0020, 0x2009, 0x00f8,
-+ 0x080c, 0x4b69, 0x20a9, 0x000e, 0xe000, 0x1f04, 0x137c, 0x7850,
-+ 0xa084, 0x0180, 0xa085, 0x1400, 0x7852, 0x080c, 0x5a90, 0x0120,
-+ 0x7843, 0x0090, 0x7843, 0x0010, 0x2021, 0xe678, 0x2019, 0xea60,
-+ 0x7820, 0xd09c, 0x1558, 0x080c, 0x5a90, 0x05d8, 0x7824, 0xd0ac,
-+ 0x1904, 0x13f1, 0x080c, 0x5ab6, 0x1508, 0x0046, 0x2021, 0x0190,
-+ 0x8421, 0x1df0, 0x004e, 0x8421, 0x11c8, 0x7827, 0x0048, 0x20a9,
-+ 0x01f4, 0x1d04, 0x13a9, 0x080c, 0x6a09, 0x1f04, 0x13a9, 0x7824,
-+ 0xa084, 0x0068, 0x15c8, 0x2001, 0xb69e, 0x2003, 0xaaaa, 0x2001,
-+ 0xb69f, 0x2003, 0x0001, 0x7003, 0x0001, 0x0498, 0x1d04, 0x13c2,
-+ 0x080c, 0x6a09, 0x8319, 0x1960, 0x2009, 0xb434, 0x2104, 0x8000,
-+ 0x200a, 0xa084, 0xfff0, 0x0120, 0x200b, 0x0000, 0x080c, 0x28dd,
-+ 0x00d8, 0x080c, 0x5aa2, 0x1140, 0xa4a2, 0x0064, 0x1128, 0x080c,
-+ 0x5a67, 0x7003, 0x0001, 0x00a8, 0x7827, 0x1800, 0xe000, 0xe000,
-+ 0x7824, 0x080c, 0x5aac, 0x0110, 0xd0ac, 0x1158, 0xa084, 0x1800,
-+ 0x09a8, 0x7003, 0x0001, 0x0028, 0x2001, 0x0001, 0x080c, 0x2789,
-+ 0x0048, 0x2001, 0xb434, 0x2003, 0x0000, 0x7827, 0x0048, 0x7828,
-+ 0xc09d, 0x782a, 0x7850, 0xa084, 0x0180, 0xa085, 0x0400, 0x7852,
-+ 0x015e, 0x003e, 0x000e, 0x080c, 0x1554, 0x012e, 0x00fe, 0x004e,
-+ 0x001e, 0x0005, 0x0005, 0x0005, 0x0005, 0x2a70, 0x2061, 0xb6c1,
-+ 0x2063, 0x0002, 0x6007, 0x0002, 0x600b, 0x0003, 0x600f, 0x0017,
-+ 0x2001, 0xb69e, 0x2003, 0x0000, 0x708b, 0x0000, 0x2009, 0x0100,
-+ 0x2104, 0xa082, 0x0002, 0x0218, 0x7053, 0xffff, 0x0010, 0x7053,
-+ 0x0000, 0x705b, 0xffff, 0x7073, 0x0000, 0x7077, 0x0000, 0x080c,
-+ 0x9f99, 0x2061, 0xb68e, 0x6003, 0x0909, 0x6007, 0x0000, 0x600b,
-+ 0x8800, 0x600f, 0x0200, 0x6013, 0x00ff, 0x6017, 0x000f, 0x601b,
-+ 0x0000, 0x601f, 0x07d0, 0x2061, 0xb696, 0x6003, 0x8000, 0x6007,
-+ 0x0000, 0x600b, 0x0000, 0x600f, 0x0200, 0x6013, 0x00ff, 0x6017,
-+ 0x0000, 0x601b, 0x0001, 0x601f, 0x0000, 0x2061, 0xb6b9, 0x6003,
-+ 0x514c, 0x6007, 0x4f47, 0x600b, 0x4943, 0x600f, 0x2020, 0x2001,
-+ 0xb428, 0x2003, 0x0000, 0x0005, 0x04a0, 0x2011, 0x0000, 0x81ff,
-+ 0x0570, 0xa186, 0x0001, 0x1148, 0x2031, 0x8fff, 0x2039, 0xd401,
-+ 0x2021, 0x0100, 0x2029, 0xd400, 0x00e8, 0xa186, 0x0002, 0x1118,
-+ 0x2011, 0x0000, 0x00b8, 0xa186, 0x0005, 0x1118, 0x2011, 0x0001,
-+ 0x0088, 0xa186, 0x0009, 0x1118, 0x2011, 0x0002, 0x0058, 0xa186,
-+ 0x000a, 0x1118, 0x2011, 0x0002, 0x0028, 0xa186, 0x0055, 0x1110,
-+ 0x2011, 0x0003, 0x3800, 0xa084, 0xfffc, 0xa205, 0x20c0, 0x0804,
-+ 0x104d, 0xa00e, 0x2011, 0x0003, 0x2019, 0x14a0, 0x0804, 0x14f1,
-+ 0x2019, 0xaaaa, 0x2061, 0xffff, 0x2c14, 0x2362, 0xe000, 0xe000,
-+ 0x2c04, 0xa306, 0x2262, 0x1110, 0xc1b5, 0xc1a5, 0x2011, 0x0000,
-+ 0x2019, 0x14b3, 0x04f0, 0x2019, 0xaaaa, 0x2061, 0xffff, 0x2c14,
-+ 0x2362, 0xe000, 0xe000, 0x2c1c, 0x2061, 0x7fff, 0xe000, 0xe000,
-+ 0x2c04, 0x2061, 0xffff, 0x2262, 0xa306, 0x0110, 0xc18d, 0x0008,
-+ 0xc185, 0x2011, 0x0002, 0x2019, 0x14ce, 0x0418, 0x2061, 0xffff,
-+ 0x2019, 0xaaaa, 0x2c14, 0x2362, 0xe000, 0xe000, 0x2c04, 0x2262,
-+ 0xa306, 0x1180, 0x2c14, 0x2362, 0xe000, 0xe000, 0x2c1c, 0x2061,
-+ 0x7fff, 0x2c04, 0x2061, 0xffff, 0x2262, 0xa306, 0x1110, 0xc195,
-+ 0x0008, 0xc19d, 0x2011, 0x0001, 0x2019, 0x14ef, 0x0010, 0x0804,
-+ 0x1465, 0x3800, 0xa084, 0xfffc, 0xa205, 0x20c0, 0x0837, 0x2011,
-+ 0x0000, 0x080c, 0x4f6a, 0x1178, 0x6004, 0xa0c4, 0x00ff, 0xa8c6,
-+ 0x0006, 0x0128, 0xa0c4, 0xff00, 0xa8c6, 0x0600, 0x1120, 0xa186,
-+ 0x0080, 0x0108, 0x8210, 0x8108, 0xa186, 0x0100, 0x1d50, 0x2208,
-+ 0x0005, 0x2091, 0x8000, 0x0e04, 0x1513, 0x0006, 0x0016, 0x2079,
-+ 0x0000, 0x7818, 0xd084, 0x1de8, 0x001e, 0x792e, 0x000e, 0x782a,
-+ 0x000e, 0x7826, 0x3900, 0x783a, 0x7823, 0x8002, 0x781b, 0x0001,
-+ 0x2091, 0x5000, 0x0126, 0x0156, 0x0146, 0x20a9, 0x0010, 0x20a1,
-+ 0xb80c, 0x2091, 0x2000, 0x40a1, 0x20a9, 0x0010, 0x2091, 0x2200,
-+ 0x40a1, 0x20a9, 0x0010, 0x2091, 0x2400, 0x40a1, 0x20a9, 0x0010,
-+ 0x2091, 0x2600, 0x40a1, 0x20a9, 0x0010, 0x2091, 0x2800, 0x40a1,
-+ 0x014e, 0x015e, 0x012e, 0x2079, 0xb400, 0x7803, 0x0005, 0x2091,
-+ 0x4080, 0x04c9, 0x0cf8, 0x0005, 0x0006, 0x080c, 0x159f, 0x1518,
-+ 0x00f6, 0x2079, 0xb424, 0x2f04, 0x8000, 0x207a, 0xa082, 0x000f,
-+ 0x0258, 0xa006, 0x207a, 0x2079, 0xb426, 0x2f04, 0xa084, 0x0001,
-+ 0xa086, 0x0001, 0x207a, 0x0070, 0x2079, 0xb426, 0x2f7c, 0x8fff,
-+ 0x1128, 0x2001, 0x0c03, 0x2003, 0x0040, 0x0020, 0x2001, 0x0c03,
-+ 0x2003, 0x00c0, 0x00fe, 0x000e, 0x0005, 0x0409, 0x1120, 0x2001,
-+ 0x0c03, 0x2003, 0x0080, 0x0005, 0x00d1, 0x1120, 0x2001, 0x0c03,
-+ 0x2003, 0x0040, 0x0005, 0x0006, 0x0091, 0x1178, 0x2001, 0x0c03,
-+ 0x2003, 0x0040, 0x2009, 0x0fff, 0x00a1, 0x2001, 0x0c03, 0x2003,
-+ 0x0080, 0x2009, 0x0fff, 0x0069, 0x0c88, 0x000e, 0x0005, 0x00c6,
-+ 0x2061, 0x0c00, 0x2c04, 0xa084, 0x00ff, 0xa086, 0x00aa, 0x00ce,
-+ 0x0005, 0x0156, 0x0126, 0xa18c, 0x0fff, 0x21a8, 0x1d04, 0x15ae,
-+ 0x2091, 0x6000, 0x1f04, 0x15ae, 0x012e, 0x015e, 0x0005, 0x2071,
-+ 0xb400, 0x7160, 0x712e, 0x2021, 0x0001, 0xa190, 0x0030, 0xa298,
-+ 0x0030, 0x0240, 0x7064, 0xa302, 0x1228, 0x220a, 0x2208, 0x2310,
-+ 0x8420, 0x0ca8, 0x3800, 0xd08c, 0x0148, 0x7064, 0xa086, 0xb400,
-+ 0x0128, 0x7067, 0xb400, 0x2011, 0x1000, 0x0c48, 0x200b, 0x0000,
-+ 0x74b2, 0x74b6, 0x0005, 0x00e6, 0x0126, 0x2091, 0x8000, 0x2071,
-+ 0xb400, 0x70b4, 0xa0ea, 0x0010, 0x0268, 0x8001, 0x70b6, 0x702c,
-+ 0x2068, 0x2d04, 0x702e, 0x206b, 0x0000, 0x6807, 0x0000, 0x012e,
-+ 0x00ee, 0x0005, 0xa06e, 0x0cd8, 0x00e6, 0x2071, 0xb400, 0x0126,
-+ 0x2091, 0x8000, 0x70b4, 0x8001, 0x0260, 0x70b6, 0x702c, 0x2068,
-+ 0x2d04, 0x702e, 0x206b, 0x0000, 0x6807, 0x0000, 0x012e, 0x00ee,
-+ 0x0005, 0xa06e, 0x0cd8, 0x00e6, 0x0126, 0x2091, 0x8000, 0x2071,
-+ 0xb400, 0x702c, 0x206a, 0x2d00, 0x702e, 0x70b4, 0x8000, 0x70b6,
-+ 0x012e, 0x00ee, 0x0005, 0x8dff, 0x0138, 0x6804, 0x6807, 0x0000,
-+ 0x0006, 0x0c49, 0x00de, 0x0cb8, 0x0005, 0x00e6, 0x2071, 0xb400,
-+ 0x70b4, 0xa08a, 0x0010, 0xa00d, 0x00ee, 0x0005, 0x00e6, 0x2071,
-+ 0xb712, 0x7007, 0x0000, 0x701b, 0x0000, 0x701f, 0x0000, 0x2071,
-+ 0x0000, 0x7010, 0xa085, 0x8004, 0x7012, 0x00ee, 0x0005, 0x00e6,
-+ 0x2270, 0x700b, 0x0000, 0x2071, 0xb712, 0x7018, 0xa088, 0xb71b,
-+ 0x220a, 0x8000, 0xa084, 0x0007, 0x701a, 0x7004, 0xa005, 0x1128,
-+ 0x00f6, 0x2079, 0x0010, 0x0081, 0x00fe, 0x00ee, 0x0005, 0x00e6,
-+ 0x2071, 0xb712, 0x7004, 0xa005, 0x1128, 0x00f6, 0x2079, 0x0010,
-+ 0x0019, 0x00fe, 0x00ee, 0x0005, 0x7000, 0x0002, 0x166a, 0x16ce,
-+ 0x16eb, 0x16eb, 0x7018, 0x711c, 0xa106, 0x1118, 0x7007, 0x0000,
-+ 0x0005, 0x00d6, 0xa180, 0xb71b, 0x2004, 0x700a, 0x2068, 0x8108,
-+ 0xa18c, 0x0007, 0x711e, 0x7803, 0x0026, 0x6824, 0x7832, 0x6828,
-+ 0x7836, 0x682c, 0x783a, 0x6830, 0x783e, 0x6810, 0x700e, 0x680c,
-+ 0x7016, 0x6804, 0x00de, 0xd084, 0x0120, 0x7007, 0x0001, 0x0029,
-+ 0x0005, 0x7007, 0x0002, 0x00b1, 0x0005, 0x0016, 0x0026, 0x710c,
-+ 0x2011, 0x0040, 0xa182, 0x0040, 0x1210, 0x2110, 0xa006, 0x700e,
-+ 0x7212, 0x8203, 0x7822, 0x7803, 0x0020, 0x7803, 0x0041, 0x002e,
-+ 0x001e, 0x0005, 0x0016, 0x0026, 0x0136, 0x0146, 0x0156, 0x7014,
-+ 0x2098, 0x20a1, 0x0014, 0x7803, 0x0026, 0x710c, 0x2011, 0x0040,
-+ 0xa182, 0x0040, 0x1210, 0x2110, 0xa006, 0x700e, 0x22a8, 0x53a6,
-+ 0x8203, 0x7822, 0x7803, 0x0020, 0x3300, 0x7016, 0x7803, 0x0001,
-+ 0x015e, 0x014e, 0x013e, 0x002e, 0x001e, 0x0005, 0x0136, 0x0146,
-+ 0x0156, 0x2099, 0xb4fa, 0x20a1, 0x0018, 0x20a9, 0x0008, 0x53a3,
-+ 0x7803, 0x0020, 0x0126, 0x2091, 0x8000, 0x7803, 0x0041, 0x7007,
-+ 0x0003, 0x7000, 0xc084, 0x7002, 0x700b, 0xb4f5, 0x012e, 0x015e,
-+ 0x014e, 0x013e, 0x0005, 0x0136, 0x0146, 0x0156, 0x2001, 0xb529,
-+ 0x209c, 0x20a1, 0x0014, 0x7803, 0x0026, 0x2001, 0xb52a, 0x20ac,
-+ 0x53a6, 0x2099, 0xb52b, 0x20a1, 0x0018, 0x20a9, 0x0008, 0x53a3,
-+ 0x7803, 0x0020, 0x0126, 0x2091, 0x8000, 0x7803, 0x0001, 0x7007,
-+ 0x0004, 0x7000, 0xc08c, 0x7002, 0x700b, 0xb526, 0x012e, 0x015e,
-+ 0x014e, 0x013e, 0x0005, 0x0016, 0x00e6, 0x2071, 0xb712, 0x00f6,
-+ 0x2079, 0x0010, 0x7904, 0x7803, 0x0002, 0xd1fc, 0x0120, 0xa18c,
-+ 0x0700, 0x7004, 0x0023, 0x00fe, 0x00ee, 0x001e, 0x0005, 0x1664,
-+ 0x172e, 0x175c, 0x1786, 0x17b6, 0x172d, 0x0cf8, 0xa18c, 0x0700,
-+ 0x1528, 0x0136, 0x0146, 0x0156, 0x7014, 0x20a0, 0x2099, 0x0014,
-+ 0x7803, 0x0040, 0x7010, 0x20a8, 0x53a5, 0x3400, 0x7016, 0x015e,
-+ 0x014e, 0x013e, 0x700c, 0xa005, 0x0570, 0x7830, 0x7832, 0x7834,
-+ 0x7836, 0x080c, 0x1695, 0x0005, 0x7008, 0xa080, 0x0002, 0x2003,
-+ 0x0100, 0x7007, 0x0000, 0x080c, 0x1664, 0x0005, 0x7008, 0xa080,
-+ 0x0002, 0x2003, 0x0200, 0x0ca8, 0xa18c, 0x0700, 0x1150, 0x700c,
-+ 0xa005, 0x0188, 0x7830, 0x7832, 0x7834, 0x7836, 0x080c, 0x16aa,
-+ 0x0005, 0x7008, 0xa080, 0x0002, 0x2003, 0x0200, 0x7007, 0x0000,
-+ 0x080c, 0x1664, 0x0005, 0x00d6, 0x7008, 0x2068, 0x7830, 0x6826,
-+ 0x7834, 0x682a, 0x7838, 0x682e, 0x783c, 0x6832, 0x680b, 0x0100,
-+ 0x00de, 0x7007, 0x0000, 0x080c, 0x1664, 0x0005, 0xa18c, 0x0700,
-+ 0x1540, 0x0136, 0x0146, 0x0156, 0x2001, 0xb4f8, 0x2004, 0xa080,
-+ 0x000d, 0x20a0, 0x2099, 0x0014, 0x7803, 0x0040, 0x20a9, 0x0020,
-+ 0x53a5, 0x2001, 0xb4fa, 0x2004, 0xd0bc, 0x0148, 0x2001, 0xb503,
-+ 0x2004, 0xa080, 0x000d, 0x20a0, 0x20a9, 0x0020, 0x53a5, 0x015e,
-+ 0x014e, 0x013e, 0x7007, 0x0000, 0x080c, 0x5e30, 0x080c, 0x1664,
-+ 0x0005, 0x2011, 0x8003, 0x080c, 0x3e8a, 0x0cf8, 0xa18c, 0x0700,
-+ 0x1148, 0x2001, 0xb528, 0x2003, 0x0100, 0x7007, 0x0000, 0x080c,
-+ 0x1664, 0x0005, 0x2011, 0x8004, 0x080c, 0x3e8a, 0x0cf8, 0x0126,
-+ 0x2091, 0x2200, 0x2079, 0x0030, 0x2071, 0xb723, 0x7003, 0x0000,
-+ 0x700f, 0xb72f, 0x7013, 0xb72f, 0x780f, 0x00f6, 0x7803, 0x0004,
-+ 0x012e, 0x0005, 0x6934, 0xa184, 0x0007, 0x0002, 0x17e6, 0x1824,
-+ 0x17e6, 0x17e6, 0x17e6, 0x180c, 0x17f3, 0x17ea, 0xa085, 0x0001,
-+ 0x0804, 0x183e, 0x684c, 0xd0bc, 0x0dc8, 0x6860, 0x682e, 0x685c,
-+ 0x682a, 0x6858, 0x04c8, 0xa18c, 0x00ff, 0xa186, 0x001e, 0x1d70,
-+ 0x684c, 0xd0bc, 0x0d58, 0x6860, 0x682e, 0x685c, 0x682a, 0x6804,
-+ 0x681a, 0xa080, 0x000d, 0x2004, 0xa084, 0x000f, 0xa080, 0x22b6,
-+ 0x2005, 0x6832, 0x6858, 0x0440, 0xa18c, 0x00ff, 0xa186, 0x0015,
-+ 0x19a8, 0x684c, 0xd0ac, 0x0990, 0x6804, 0x681a, 0xa080, 0x000d,
-+ 0x2004, 0xa084, 0x000f, 0xa080, 0x22b6, 0x2005, 0x6832, 0xa006,
-+ 0x682e, 0x682a, 0x6858, 0x0080, 0x684c, 0xd0ac, 0x0904, 0x17e6,
-+ 0xa006, 0x682e, 0x682a, 0x6858, 0xa18c, 0x000f, 0xa188, 0x22b6,
-+ 0x210d, 0x6932, 0x2d08, 0x691a, 0x6826, 0x684c, 0xc0dd, 0x684e,
-+ 0xa006, 0x680a, 0x697c, 0x6912, 0x6980, 0x6916, 0x0005, 0x684c,
-+ 0xd0ac, 0x090c, 0x1511, 0x6833, 0x22b3, 0x2d08, 0x691a, 0x6858,
-+ 0x8001, 0x6826, 0x684c, 0xc0dd, 0x684e, 0xa006, 0x680a, 0x682e,
-+ 0x682a, 0x697c, 0x6912, 0x6980, 0x6916, 0x0005, 0x20e1, 0x0007,
-+ 0x20e1, 0x2000, 0x2001, 0x020a, 0x2004, 0x82ff, 0x01e8, 0xa280,
-+ 0x0004, 0x00d6, 0x206c, 0x684c, 0xd0dc, 0x1190, 0xa280, 0x0007,
-+ 0x2004, 0xa086, 0x000a, 0x1110, 0x0891, 0x0010, 0x080c, 0x17da,
-+ 0x0138, 0x00de, 0xa280, 0x0000, 0x2003, 0x0002, 0xa016, 0x0020,
-+ 0x6808, 0x8000, 0x680a, 0x00de, 0x0126, 0x0046, 0x0036, 0x0026,
-+ 0x2091, 0x2200, 0x002e, 0x003e, 0x004e, 0x7000, 0xa005, 0x01d0,
-+ 0x710c, 0x220a, 0x8108, 0x230a, 0x8108, 0x240a, 0x8108, 0xa182,
-+ 0xb74a, 0x0210, 0x2009, 0xb72f, 0x710e, 0x7010, 0xa102, 0xa082,
-+ 0x0009, 0x0118, 0xa080, 0x001b, 0x1118, 0x2009, 0x0138, 0x200a,
-+ 0x012e, 0x0005, 0x7206, 0x2001, 0x18a0, 0x0006, 0x2260, 0x0804,
-+ 0x19cc, 0x0126, 0x0026, 0x0036, 0x00c6, 0x0006, 0x2091, 0x2200,
-+ 0x000e, 0x004e, 0x003e, 0x002e, 0x00d6, 0x00c6, 0x2460, 0x6110,
-+ 0x2168, 0x6a62, 0x6b5e, 0xa005, 0x0904, 0x1901, 0x6808, 0xa005,
-+ 0x0904, 0x1938, 0x7000, 0xa005, 0x1108, 0x0488, 0x700c, 0x7110,
-+ 0xa106, 0x1904, 0x1940, 0x7004, 0xa406, 0x1548, 0x2001, 0x0005,
-+ 0x2004, 0xd08c, 0x0168, 0x0046, 0x080c, 0x1ad5, 0x004e, 0x2460,
-+ 0x6010, 0xa080, 0x0002, 0x2004, 0xa005, 0x0904, 0x1938, 0x0c10,
-+ 0x2001, 0x0207, 0x2004, 0xd09c, 0x1d48, 0x7804, 0xa084, 0x6000,
-+ 0x0120, 0xa086, 0x6000, 0x0108, 0x0c08, 0x7818, 0x6812, 0x781c,
-+ 0x6816, 0x7803, 0x0004, 0x7003, 0x0000, 0x7004, 0x2060, 0x6100,
-+ 0xa18e, 0x0004, 0x1904, 0x1940, 0x2009, 0x0048, 0x080c, 0x85ef,
-+ 0x04f8, 0x6808, 0xa005, 0x05a0, 0x7000, 0xa005, 0x0588, 0x700c,
-+ 0x7110, 0xa106, 0x1118, 0x7004, 0xa406, 0x1550, 0x2001, 0x0005,
-+ 0x2004, 0xd08c, 0x0160, 0x0046, 0x080c, 0x1ad5, 0x004e, 0x2460,
-+ 0x6010, 0xa080, 0x0002, 0x2004, 0xa005, 0x01d0, 0x0c28, 0x2001,
-+ 0x0207, 0x2004, 0xd09c, 0x1d50, 0x2001, 0x0005, 0x2004, 0xd08c,
-+ 0x1d50, 0x7804, 0xa084, 0x6000, 0x0118, 0xa086, 0x6000, 0x19f0,
-+ 0x7818, 0x6812, 0x781c, 0x6816, 0x7803, 0x0004, 0x7003, 0x0000,
-+ 0x6100, 0xa18e, 0x0004, 0x1120, 0x2009, 0x0048, 0x080c, 0x85ef,
-+ 0x00ce, 0x00de, 0x012e, 0x0005, 0x00f6, 0x00e6, 0x0026, 0x0036,
-+ 0x0046, 0x0056, 0x2071, 0xb723, 0x7000, 0xa086, 0x0000, 0x0904,
-+ 0x19aa, 0x7004, 0xac06, 0x1904, 0x199c, 0x2079, 0x0030, 0x7000,
-+ 0xa086, 0x0003, 0x0904, 0x199c, 0x7804, 0xd0fc, 0x15c8, 0x20e1,
-+ 0x6000, 0x2011, 0x0032, 0x2001, 0x0208, 0x200c, 0x2001, 0x0209,
-+ 0x2004, 0xa106, 0x1d88, 0x8211, 0x1db0, 0x7804, 0xd0fc, 0x1540,
-+ 0x080c, 0x1e3f, 0x0026, 0x0056, 0x7803, 0x0004, 0x7804, 0xd0ac,
-+ 0x1de8, 0x7803, 0x0002, 0x7803, 0x0009, 0x7003, 0x0003, 0x7007,
-+ 0x0000, 0x005e, 0x002e, 0x2001, 0x015d, 0x2003, 0x0000, 0x080c,
-+ 0x5a90, 0x1138, 0x0066, 0x2031, 0x0001, 0x080c, 0x5b12, 0x006e,
-+ 0x0058, 0x2001, 0x0160, 0x2502, 0x2001, 0x0138, 0x2202, 0x0020,
-+ 0x080c, 0x1ad5, 0x0804, 0x194c, 0x0156, 0x20a9, 0x0009, 0x2009,
-+ 0xb72f, 0x2104, 0xac06, 0x1108, 0x200a, 0xa188, 0x0003, 0x1f04,
-+ 0x19a1, 0x015e, 0x005e, 0x004e, 0x003e, 0x002e, 0x00ee, 0x00fe,
-+ 0x0005, 0x700c, 0x7110, 0xa106, 0x0904, 0x1a40, 0x2104, 0x7006,
-+ 0x2060, 0x8108, 0x211c, 0x8108, 0x2124, 0x8108, 0xa182, 0xb74a,
-+ 0x0210, 0x2009, 0xb72f, 0x7112, 0x700c, 0xa106, 0x1128, 0x080c,
-+ 0x28b1, 0x2001, 0x0138, 0x2102, 0x8cff, 0x0598, 0x6010, 0x2068,
-+ 0x2d58, 0x6828, 0xa406, 0x1590, 0x682c, 0xa306, 0x1578, 0x7004,
-+ 0x2060, 0x6020, 0xc0d4, 0x6022, 0x684c, 0xd0f4, 0x0128, 0x6817,
-+ 0xffff, 0x6813, 0xffff, 0x00e8, 0x6850, 0xd0f4, 0x1130, 0x7803,
-+ 0x0004, 0x6810, 0x781a, 0x6814, 0x781e, 0x6824, 0x2050, 0x6818,
-+ 0x2060, 0x6830, 0x2040, 0x6034, 0xa0cc, 0x000f, 0x2009, 0x0011,
-+ 0x080c, 0x1a43, 0x0120, 0x2009, 0x0001, 0x080c, 0x1a43, 0x2d58,
-+ 0x0005, 0x080c, 0x1dac, 0x0904, 0x19b1, 0x0cd0, 0x6020, 0xd0f4,
-+ 0x11e0, 0xd0d4, 0x01b8, 0x6038, 0xa402, 0x6034, 0xa303, 0x0108,
-+ 0x1288, 0x643a, 0x6336, 0x6c2a, 0x6b2e, 0x0046, 0x0036, 0x2400,
-+ 0x6c7c, 0xa402, 0x6812, 0x2300, 0x6b80, 0xa303, 0x6816, 0x003e,
-+ 0x004e, 0x0018, 0x080c, 0x9f2b, 0x09e0, 0x601c, 0xa08e, 0x0008,
-+ 0x0904, 0x19d7, 0xa08e, 0x000a, 0x0904, 0x19d7, 0x2001, 0xb474,
-+ 0x2004, 0xd0b4, 0x1140, 0x6018, 0x2004, 0xd0bc, 0x1120, 0x6817,
-+ 0x7fff, 0x6813, 0xffff, 0x080c, 0x22d6, 0x1918, 0x0804, 0x19d7,
-+ 0x7003, 0x0000, 0x0005, 0x8aff, 0x0904, 0x1aaf, 0xa03e, 0x2730,
-+ 0x6850, 0xd0fc, 0x11b8, 0xd0f4, 0x1528, 0x00d6, 0x2805, 0xac68,
-+ 0x2900, 0x0002, 0x1a93, 0x1a78, 0x1a78, 0x1a93, 0x1a93, 0x1a8c,
-+ 0x1a93, 0x1a78, 0x1a93, 0x1a7d, 0x1a7d, 0x1a93, 0x1a93, 0x1a93,
-+ 0x1a84, 0x1a7d, 0x7803, 0x0004, 0xc0fc, 0x6852, 0x6b6c, 0x6a70,
-+ 0x6d1c, 0x6c20, 0x00d6, 0xd99c, 0x0548, 0x2805, 0xac68, 0x6f08,
-+ 0x6e0c, 0x0420, 0xc0f4, 0x6852, 0x6b6c, 0x6a70, 0x00d6, 0x0458,
-+ 0x6b08, 0x6a0c, 0x6d00, 0x6c04, 0x00c8, 0x6b10, 0x6a14, 0x6d00,
-+ 0x6c04, 0x6f08, 0x6e0c, 0x0090, 0x00de, 0x00d6, 0x6834, 0xa084,
-+ 0x00ff, 0xa086, 0x001e, 0x1138, 0x00de, 0x080c, 0x2278, 0x1904,
-+ 0x1a43, 0xa00e, 0x00e0, 0x00de, 0x080c, 0x1511, 0x7b22, 0x7a26,
-+ 0x7d32, 0x7c36, 0x7f3a, 0x7e3e, 0x7316, 0x721a, 0x751e, 0x7422,
-+ 0x7726, 0x762a, 0x7902, 0x7000, 0x8000, 0x7002, 0x00de, 0x6828,
-+ 0xa300, 0x682a, 0x682c, 0xa201, 0x682e, 0x080c, 0x2278, 0x0005,
-+ 0x080c, 0x1511, 0x080c, 0x1f26, 0x7004, 0x2060, 0x00d6, 0x6010,
-+ 0x2068, 0x7003, 0x0000, 0x080c, 0x1dcd, 0x080c, 0x9beb, 0x0170,
-+ 0x6808, 0x8001, 0x680a, 0x697c, 0x6912, 0x6980, 0x6916, 0x682b,
-+ 0xffff, 0x682f, 0xffff, 0x6850, 0xc0bd, 0x6852, 0x00de, 0x080c,
-+ 0x98c3, 0x0804, 0x1cfa, 0x080c, 0x1511, 0x0126, 0x2091, 0x2200,
-+ 0x0006, 0x0016, 0x2b68, 0x6818, 0x2060, 0x7904, 0x7803, 0x0002,
-+ 0xa184, 0x0700, 0x1978, 0xa184, 0x0003, 0xa086, 0x0003, 0x0d58,
-+ 0x7000, 0x0002, 0x1af2, 0x1af8, 0x1c09, 0x1cd5, 0x1ce9, 0x1af2,
-+ 0x1af2, 0x1af2, 0x7804, 0xd09c, 0x1904, 0x1cfa, 0x080c, 0x1511,
-+ 0x8001, 0x7002, 0xd1bc, 0x11a0, 0xd19c, 0x1904, 0x1b8d, 0xd1dc,
-+ 0x1178, 0x8aff, 0x0904, 0x1b8d, 0x2009, 0x0001, 0x080c, 0x1a43,
-+ 0x0904, 0x1cfa, 0x2009, 0x0001, 0x080c, 0x1a43, 0x0804, 0x1cfa,
-+ 0x7803, 0x0004, 0x7003, 0x0000, 0xd1bc, 0x1904, 0x1b6d, 0x0026,
-+ 0x0036, 0x7c20, 0x7d24, 0x7e30, 0x7f34, 0x7818, 0x6812, 0x781c,
-+ 0x6816, 0x2001, 0x0201, 0x2004, 0xa005, 0x0140, 0x7808, 0xd0ec,
-+ 0x1128, 0x7803, 0x0009, 0x7003, 0x0004, 0x0010, 0x080c, 0x1cfe,
-+ 0x6b28, 0x6a2c, 0x2400, 0x686e, 0xa31a, 0x2500, 0x6872, 0xa213,
-+ 0x6b2a, 0x6a2e, 0x00c6, 0x7004, 0x2060, 0x6020, 0xd0f4, 0x1110,
-+ 0x633a, 0x6236, 0x00ce, 0x003e, 0x002e, 0x6e1e, 0x6f22, 0x2500,
-+ 0xa405, 0x0128, 0x080c, 0x228e, 0x6850, 0xc0fd, 0x6852, 0x2a00,
-+ 0x6826, 0x2c00, 0x681a, 0x2800, 0x6832, 0x6808, 0x8001, 0x680a,
-+ 0x1148, 0x684c, 0xd0e4, 0x0130, 0x7004, 0x2060, 0x2009, 0x0048,
-+ 0x080c, 0x85ef, 0x7000, 0xa086, 0x0004, 0x0904, 0x1cfa, 0x7003,
-+ 0x0000, 0x080c, 0x19b1, 0x0804, 0x1cfa, 0x0056, 0x7d0c, 0xd5bc,
-+ 0x1110, 0x080c, 0xb38a, 0x005e, 0x080c, 0x1dcd, 0x00f6, 0x7004,
-+ 0x2078, 0x080c, 0x52c6, 0x0118, 0x7820, 0xc0f5, 0x7822, 0x00fe,
-+ 0x682b, 0xffff, 0x682f, 0xffff, 0x6808, 0x8001, 0x680a, 0x697c,
-+ 0x791a, 0x6980, 0x791e, 0x0804, 0x1cfa, 0x7004, 0x00c6, 0x2060,
-+ 0x6020, 0x00ce, 0xd0f4, 0x0120, 0x6808, 0x8001, 0x680a, 0x04c0,
-+ 0x7818, 0x6812, 0x7a1c, 0x6a16, 0xd19c, 0x0160, 0xa205, 0x0150,
-+ 0x7004, 0xa080, 0x0007, 0x2004, 0xa084, 0xfffd, 0xa086, 0x0008,
-+ 0x1904, 0x1b10, 0x684c, 0xc0f5, 0x684e, 0x7814, 0xa005, 0x1520,
-+ 0x7003, 0x0000, 0x6808, 0x8001, 0x680a, 0x01a0, 0x7004, 0x2060,
-+ 0x601c, 0xa086, 0x000a, 0x11a0, 0x0156, 0x20a9, 0x0009, 0x2009,
-+ 0xb72f, 0x2104, 0xac06, 0x1108, 0x200a, 0xa188, 0x0003, 0x1f04,
-+ 0x1bc1, 0x015e, 0x7004, 0x2060, 0x2009, 0x0048, 0x080c, 0x85ef,
-+ 0x080c, 0x19b1, 0x0804, 0x1cfa, 0x7818, 0x6812, 0x781c, 0x6816,
-+ 0x7814, 0x7908, 0xa18c, 0x0fff, 0xa192, 0x0841, 0x1a04, 0x1ab2,
-+ 0xa188, 0x0007, 0x8114, 0x8214, 0x8214, 0xa10a, 0x8104, 0x8004,
-+ 0x8004, 0xa20a, 0x810b, 0x810b, 0x810b, 0x080c, 0x1e6a, 0x7803,
-+ 0x0004, 0x780f, 0xffff, 0x7803, 0x0001, 0x7804, 0xd0fc, 0x0de8,
-+ 0x7803, 0x0002, 0x7803, 0x0004, 0x780f, 0x00f6, 0x7004, 0x7007,
-+ 0x0000, 0x2060, 0x2009, 0x0048, 0x080c, 0x85ef, 0x080c, 0x1ec0,
-+ 0x0838, 0x8001, 0x7002, 0xd194, 0x01b0, 0x7804, 0xd0fc, 0x1904,
-+ 0x1ca5, 0xd09c, 0x0138, 0x7804, 0xd0fc, 0x1904, 0x1ca5, 0xd09c,
-+ 0x1904, 0x1ca9, 0x8aff, 0x0904, 0x1cfa, 0x2009, 0x0001, 0x080c,
-+ 0x1a43, 0x0804, 0x1cfa, 0xa184, 0x0888, 0x1148, 0x8aff, 0x0904,
-+ 0x1cfa, 0x2009, 0x0001, 0x080c, 0x1a43, 0x0804, 0x1cfa, 0x7818,
-+ 0x6812, 0x7a1c, 0x6a16, 0xa205, 0x0904, 0x1baa, 0x7803, 0x0004,
-+ 0x7003, 0x0000, 0xd1bc, 0x1904, 0x1c87, 0x6834, 0xa084, 0x00ff,
-+ 0xa086, 0x0029, 0x1118, 0xd19c, 0x1904, 0x1baa, 0x0026, 0x0036,
-+ 0x7c20, 0x7d24, 0x7e30, 0x7f34, 0x7818, 0x6812, 0x781c, 0x6816,
-+ 0x2001, 0x0201, 0x2004, 0xa005, 0x0140, 0x7808, 0xd0ec, 0x1128,
-+ 0x7803, 0x0009, 0x7003, 0x0004, 0x0020, 0x0016, 0x080c, 0x1cfe,
-+ 0x001e, 0x6b28, 0x6a2c, 0x080c, 0x228e, 0x00d6, 0x2805, 0xac68,
-+ 0x6034, 0xd09c, 0x1128, 0x6808, 0xa31a, 0x680c, 0xa213, 0x0020,
-+ 0x6810, 0xa31a, 0x6814, 0xa213, 0x00de, 0xd194, 0x0904, 0x1b32,
-+ 0x2a00, 0x6826, 0x2c00, 0x681a, 0x2800, 0x6832, 0x6808, 0x8001,
-+ 0x680a, 0x6b2a, 0x6a2e, 0x003e, 0x002e, 0x0804, 0x1bd0, 0x0056,
-+ 0x7d0c, 0x080c, 0xb38a, 0x005e, 0x080c, 0x1dcd, 0x00f6, 0x7004,
-+ 0x2078, 0x080c, 0x52c6, 0x0118, 0x7820, 0xc0f5, 0x7822, 0x00fe,
-+ 0x682b, 0xffff, 0x682f, 0xffff, 0x6808, 0x8001, 0x680a, 0x697c,
-+ 0x791a, 0x6980, 0x791e, 0x0804, 0x1cfa, 0x7804, 0xd09c, 0x0904,
-+ 0x1add, 0x7c20, 0x7824, 0xa405, 0x1904, 0x1add, 0x7818, 0x6812,
-+ 0x7c1c, 0x6c16, 0xa405, 0x1120, 0x7803, 0x0002, 0x0804, 0x1baa,
-+ 0x751c, 0x7420, 0x7724, 0x7628, 0x7014, 0xa528, 0x7018, 0xa421,
-+ 0xa7b9, 0x0000, 0xa6b1, 0x0000, 0x7830, 0xa506, 0x1150, 0x7834,
-+ 0xa406, 0x1138, 0x7838, 0xa706, 0x1120, 0x783c, 0xa606, 0x0904,
-+ 0x1add, 0x7803, 0x0002, 0x0804, 0x1c36, 0x7803, 0x0004, 0x7003,
-+ 0x0000, 0x7004, 0xa00d, 0x0150, 0x6808, 0x8001, 0x680a, 0x1130,
-+ 0x7004, 0x2060, 0x2009, 0x0048, 0x080c, 0x85ef, 0x080c, 0x19b1,
-+ 0x0088, 0x7803, 0x0004, 0x7003, 0x0000, 0x7004, 0x2060, 0x6010,
-+ 0xa005, 0x0da0, 0x2068, 0x6808, 0x8000, 0x680a, 0x6c28, 0x6b2c,
-+ 0x080c, 0x19cc, 0x001e, 0x000e, 0x012e, 0x0005, 0x700c, 0x7110,
-+ 0xa106, 0x0904, 0x1da0, 0x7004, 0x0016, 0x210c, 0xa106, 0x001e,
-+ 0x0904, 0x1da0, 0x00d6, 0x00c6, 0x216c, 0x2d00, 0xa005, 0x0904,
-+ 0x1d9e, 0x681c, 0xa086, 0x0008, 0x0904, 0x1d9e, 0x6820, 0xd0d4,
-+ 0x1904, 0x1d9e, 0x6810, 0x2068, 0x6850, 0xd0fc, 0x05a8, 0x8108,
-+ 0x2104, 0x6b2c, 0xa306, 0x1904, 0x1d9e, 0x8108, 0x2104, 0x6a28,
-+ 0xa206, 0x1904, 0x1d9e, 0x6850, 0xc0fc, 0xc0f5, 0x6852, 0x686c,
-+ 0x7822, 0x7016, 0x6870, 0x7826, 0x701a, 0x681c, 0x7832, 0x701e,
-+ 0x6820, 0x7836, 0x7022, 0x6818, 0x2060, 0x6034, 0xd09c, 0x0168,
-+ 0x6830, 0x2005, 0x00d6, 0xac68, 0x6808, 0x783a, 0x7026, 0x680c,
-+ 0x783e, 0x702a, 0x00de, 0x0804, 0x1d98, 0xa006, 0x783a, 0x783e,
-+ 0x7026, 0x702a, 0x0804, 0x1d98, 0x8108, 0x2104, 0xa005, 0x1904,
-+ 0x1d9e, 0x6b2c, 0xa306, 0x1904, 0x1d9e, 0x8108, 0x2104, 0xa005,
-+ 0x15e8, 0x6a28, 0xa206, 0x15d0, 0x6850, 0xc0f5, 0x6852, 0x6830,
-+ 0x2005, 0x6918, 0xa160, 0xa180, 0x000d, 0x2004, 0xd09c, 0x11a0,
-+ 0x6008, 0x7822, 0x7016, 0x686e, 0x600c, 0x7826, 0x701a, 0x6872,
-+ 0x6000, 0x7832, 0x701e, 0x6004, 0x7836, 0x7022, 0xa006, 0x783a,
-+ 0x783e, 0x7026, 0x702a, 0x00a0, 0x6010, 0x7822, 0x7016, 0x686e,
-+ 0x6014, 0x7826, 0x701a, 0x6872, 0x6000, 0x7832, 0x701e, 0x6004,
-+ 0x7836, 0x7022, 0x6008, 0x783a, 0x7026, 0x600c, 0x783e, 0x702a,
-+ 0x6810, 0x781a, 0x6814, 0x781e, 0x7803, 0x0011, 0x00ce, 0x00de,
-+ 0x0005, 0x2011, 0x0201, 0x2009, 0x003c, 0x2204, 0xa005, 0x1118,
-+ 0x8109, 0x1dd8, 0x0005, 0x0005, 0x0ca1, 0x0118, 0x780c, 0xd0a4,
-+ 0x0120, 0x00d9, 0xa085, 0x0001, 0x0010, 0x080c, 0x1ec0, 0x0005,
-+ 0x0126, 0x2091, 0x2200, 0x7000, 0xa086, 0x0003, 0x1160, 0x700c,
-+ 0x7110, 0xa106, 0x0140, 0x080c, 0x2922, 0x20e1, 0x9028, 0x700f,
-+ 0xb72f, 0x7013, 0xb72f, 0x012e, 0x0005, 0x00c6, 0x080c, 0x5a90,
-+ 0x11b8, 0x2001, 0x0160, 0x2003, 0x0000, 0x2001, 0x0138, 0x2003,
-+ 0x0000, 0x2011, 0x00c8, 0xe000, 0xe000, 0x8211, 0x1de0, 0x04c1,
-+ 0x0066, 0x2031, 0x0000, 0x080c, 0x5b12, 0x006e, 0x00ce, 0x0005,
-+ 0x080c, 0x1e3f, 0x080c, 0x2922, 0x20e1, 0x9028, 0x700c, 0x7110,
-+ 0xa106, 0x01d0, 0x2104, 0xa005, 0x0130, 0x2060, 0x6010, 0x2060,
-+ 0x6008, 0x8001, 0x600a, 0xa188, 0x0003, 0xa182, 0xb74a, 0x0210,
-+ 0x2009, 0xb72f, 0x7112, 0x700c, 0xa106, 0x1d40, 0x080c, 0x28b1,
-+ 0x2001, 0x0138, 0x2102, 0x0c10, 0x2001, 0x015d, 0x2003, 0x0000,
-+ 0x2001, 0x0160, 0x2502, 0x2001, 0x0138, 0x2202, 0x00ce, 0x0005,
-+ 0x080c, 0x2922, 0x20e1, 0x9028, 0x2001, 0x015d, 0x2003, 0x0000,
-+ 0x00e6, 0x00c6, 0x0016, 0x2071, 0xb723, 0x700c, 0x7110, 0xa106,
-+ 0x0190, 0x2104, 0xa005, 0x0130, 0x2060, 0x6010, 0x2060, 0x6008,
-+ 0x8001, 0x600a, 0xa188, 0x0003, 0xa182, 0xb74a, 0x0210, 0x2009,
-+ 0xb72f, 0x7112, 0x0c50, 0x001e, 0x00ce, 0x00ee, 0x0005, 0x2001,
-+ 0x0138, 0x2014, 0x2003, 0x0000, 0x2001, 0x0160, 0x202c, 0x2003,
-+ 0x0000, 0x080c, 0x5a90, 0x1148, 0x2021, 0x0002, 0x1d04, 0x1e4e,
-+ 0x2091, 0x6000, 0x8421, 0x1dd0, 0x0005, 0x2021, 0xb015, 0x2001,
-+ 0x0141, 0x201c, 0xd3dc, 0x1168, 0x2001, 0x0109, 0x201c, 0xa39c,
-+ 0x0048, 0x1138, 0x2001, 0x0111, 0x201c, 0x83ff, 0x1110, 0x8421,
-+ 0x1d70, 0x0005, 0x00e6, 0x2071, 0x0200, 0x7808, 0xa084, 0xf000,
-+ 0xa10d, 0x0869, 0x2001, 0x0105, 0x2004, 0xa084, 0x0003, 0x1130,
-+ 0x2001, 0xb74a, 0x2004, 0xa086, 0x0000, 0x0548, 0xa026, 0x2019,
-+ 0xf000, 0x8319, 0x1148, 0x2001, 0x012b, 0x2003, 0x95f5, 0x2001,
-+ 0x0129, 0x2003, 0x95f5, 0x00d8, 0x2001, 0x0105, 0x2004, 0xa084,
-+ 0x0003, 0x1130, 0x2001, 0xb74a, 0x2004, 0xa086, 0x0000, 0x0178,
-+ 0x2001, 0x0132, 0x2004, 0xa436, 0x0110, 0x2020, 0x0c00, 0x2001,
-+ 0x0021, 0x2004, 0xd0fc, 0x09e8, 0x080c, 0x211b, 0x08c0, 0x20e1,
-+ 0x7000, 0x7324, 0x7420, 0x7028, 0x7028, 0x7426, 0x7037, 0x0001,
-+ 0x810f, 0x712e, 0x702f, 0x0100, 0x7037, 0x0008, 0x7326, 0x7422,
-+ 0x2001, 0x0160, 0x2502, 0x2001, 0x0138, 0x2202, 0x00ee, 0x0005,
-+ 0x0026, 0x2001, 0x015d, 0x2003, 0x0000, 0x7908, 0xa18c, 0x0fff,
-+ 0xa182, 0x0ffd, 0x0210, 0x2009, 0x0000, 0xa190, 0x0007, 0xa294,
-+ 0x1ff8, 0x8214, 0x8214, 0x8214, 0x2001, 0x020a, 0x82ff, 0x0140,
-+ 0x20e1, 0x6000, 0x200c, 0x200c, 0x200c, 0x200c, 0x8211, 0x1dd0,
-+ 0x20e1, 0x7000, 0x200c, 0x200c, 0x7003, 0x0000, 0x20e1, 0x6000,
-+ 0x2001, 0x0208, 0x200c, 0x2001, 0x0209, 0x2004, 0xa106, 0x0158,
-+ 0x080c, 0x1da1, 0x0130, 0x7908, 0xd1ec, 0x1128, 0x790c, 0xd1a4,
-+ 0x0960, 0x080c, 0x1dcd, 0xa006, 0x002e, 0x0005, 0x00f6, 0x00e6,
-+ 0x0016, 0x0026, 0x2071, 0xb723, 0x2079, 0x0030, 0x2011, 0x0050,
-+ 0x7000, 0xa086, 0x0000, 0x01a8, 0x8211, 0x0188, 0x2001, 0x0005,
-+ 0x2004, 0xd08c, 0x0dc8, 0x7904, 0xa18c, 0x0780, 0x0016, 0x080c,
-+ 0x1ad5, 0x001e, 0x81ff, 0x1118, 0x2011, 0x0050, 0x0c48, 0xa085,
-+ 0x0001, 0x002e, 0x001e, 0x00ee, 0x00fe, 0x0005, 0x7803, 0x0004,
-+ 0x2009, 0x0064, 0x7804, 0xd0ac, 0x0904, 0x1f72, 0x8109, 0x1dd0,
-+ 0x2009, 0x0100, 0x210c, 0xa18a, 0x0003, 0x0a0c, 0x1511, 0x080c,
-+ 0x2222, 0x00e6, 0x00f6, 0x2071, 0xb712, 0x2079, 0x0010, 0x7004,
-+ 0xa086, 0x0000, 0x0538, 0x7800, 0x0006, 0x7820, 0x0006, 0x7830,
-+ 0x0006, 0x7834, 0x0006, 0x7838, 0x0006, 0x783c, 0x0006, 0x7803,
-+ 0x0004, 0xe000, 0xe000, 0x2079, 0x0030, 0x7804, 0xd0ac, 0x190c,
-+ 0x1511, 0x2079, 0x0010, 0x000e, 0x783e, 0x000e, 0x783a, 0x000e,
-+ 0x7836, 0x000e, 0x7832, 0x000e, 0x7822, 0x000e, 0x7802, 0x00fe,
-+ 0x00ee, 0x0030, 0x00fe, 0x00ee, 0x7804, 0xd0ac, 0x190c, 0x1511,
-+ 0x080c, 0x71f1, 0x0005, 0x00e6, 0x2071, 0xb74a, 0x7003, 0x0000,
-+ 0x00ee, 0x0005, 0x00d6, 0xa280, 0x0004, 0x206c, 0x694c, 0xd1dc,
-+ 0x1904, 0x1ff0, 0x6934, 0xa184, 0x0007, 0x0002, 0x1f8e, 0x1fdb,
-+ 0x1f8e, 0x1f8e, 0x1f8e, 0x1fc2, 0x1fa1, 0x1f90, 0x080c, 0x1511,
-+ 0x684c, 0xd0b4, 0x0904, 0x20d8, 0x6860, 0x682e, 0x6816, 0x685c,
-+ 0x682a, 0x6812, 0x687c, 0x680a, 0x6880, 0x680e, 0x6958, 0x0804,
-+ 0x1fe3, 0x6834, 0xa084, 0x00ff, 0xa086, 0x001e, 0x1d38, 0x684c,
-+ 0xd0b4, 0x0904, 0x20d8, 0x6860, 0x682e, 0x6816, 0x685c, 0x682a,
-+ 0x6812, 0x687c, 0x680a, 0x6880, 0x680e, 0x6804, 0x681a, 0xa080,
-+ 0x000d, 0x2004, 0xa084, 0x000f, 0xa080, 0x22b6, 0x2005, 0x6832,
-+ 0x6958, 0x0450, 0xa18c, 0x00ff, 0xa186, 0x0015, 0x1548, 0x684c,
-+ 0xd0b4, 0x0904, 0x20d8, 0x6804, 0x681a, 0xa080, 0x000d, 0x2004,
-+ 0xa084, 0x000f, 0xa080, 0x22b6, 0x2005, 0x6832, 0x6958, 0xa006,
-+ 0x682e, 0x682a, 0x0088, 0x684c, 0xd0b4, 0x0904, 0x1ab0, 0x6958,
-+ 0xa006, 0x682e, 0x682a, 0x2d00, 0x681a, 0x6834, 0xa084, 0x000f,
-+ 0xa080, 0x22b6, 0x2005, 0x6832, 0x6926, 0x684c, 0xc0dd, 0x684e,
-+ 0x00de, 0x0005, 0x00f6, 0x2079, 0x0020, 0x7804, 0xd0fc, 0x190c,
-+ 0x211b, 0x00e6, 0x00d6, 0x2071, 0xb74a, 0x7000, 0xa005, 0x1904,
-+ 0x2058, 0x00c6, 0x7206, 0xa280, 0x0004, 0x205c, 0x7004, 0x2068,
-+ 0x7803, 0x0004, 0x6818, 0x00d6, 0x2068, 0x686c, 0x7812, 0x6890,
-+ 0x00f6, 0x20e1, 0x9040, 0x2079, 0x0200, 0x781a, 0x2079, 0x0100,
-+ 0x8004, 0x78d6, 0x00fe, 0x00de, 0x2b68, 0x6824, 0x2050, 0x6818,
-+ 0x2060, 0x6830, 0x2040, 0x6034, 0xa0cc, 0x000f, 0x6908, 0x791a,
-+ 0x7116, 0x680c, 0x781e, 0x701a, 0xa006, 0x700e, 0x7012, 0x7004,
-+ 0x692c, 0x6814, 0xa106, 0x1120, 0x6928, 0x6810, 0xa106, 0x0158,
-+ 0x0036, 0x0046, 0x6b14, 0x6c10, 0x080c, 0x22d6, 0x004e, 0x003e,
-+ 0x0110, 0x00ce, 0x00a8, 0x8aff, 0x1120, 0x00ce, 0xa085, 0x0001,
-+ 0x0078, 0x0126, 0x2091, 0x8000, 0x2079, 0x0020, 0x2009, 0x0001,
-+ 0x0059, 0x0118, 0x2009, 0x0001, 0x0039, 0x012e, 0x00ce, 0xa006,
-+ 0x00de, 0x00ee, 0x00fe, 0x0005, 0x0076, 0x0066, 0x0056, 0x0046,
-+ 0x0036, 0x0026, 0x8aff, 0x0904, 0x20d1, 0x700c, 0x7214, 0xa23a,
-+ 0x7010, 0x7218, 0xa203, 0x0a04, 0x20d0, 0xa705, 0x0904, 0x20d0,
-+ 0xa03e, 0x2730, 0x6850, 0xd0fc, 0x11a8, 0x00d6, 0x2805, 0xac68,
-+ 0x2900, 0x0002, 0x20b3, 0x2098, 0x2098, 0x20b3, 0x20b3, 0x20ac,
-+ 0x20b3, 0x2098, 0x20b3, 0x209d, 0x209d, 0x20b3, 0x20b3, 0x20b3,
-+ 0x20a4, 0x209d, 0xc0fc, 0x6852, 0x6b6c, 0x6a70, 0x6d1c, 0x6c20,
-+ 0xd99c, 0x0528, 0x00d6, 0x2805, 0xac68, 0x6f08, 0x6e0c, 0x00f0,
-+ 0x6b08, 0x6a0c, 0x6d00, 0x6c04, 0x00c8, 0x6b10, 0x6a14, 0x6d00,
-+ 0x6c04, 0x6f08, 0x6e0c, 0x0090, 0x00de, 0x00d6, 0x6834, 0xa084,
-+ 0x00ff, 0xa086, 0x001e, 0x1138, 0x00de, 0x080c, 0x2278, 0x1904,
-+ 0x2062, 0xa00e, 0x00f0, 0x00de, 0x080c, 0x1511, 0x00de, 0x7b22,
-+ 0x7a26, 0x7d32, 0x7c36, 0x7f3a, 0x7e3e, 0x7902, 0x7000, 0x8000,
-+ 0x7002, 0x6828, 0xa300, 0x682a, 0x682c, 0xa201, 0x682e, 0x700c,
-+ 0xa300, 0x700e, 0x7010, 0xa201, 0x7012, 0x080c, 0x2278, 0x0008,
-+ 0xa006, 0x002e, 0x003e, 0x004e, 0x005e, 0x006e, 0x007e, 0x0005,
-+ 0x080c, 0x1511, 0x0026, 0x2001, 0x0105, 0x2003, 0x0010, 0x20e1,
-+ 0x9040, 0x7803, 0x0004, 0x7003, 0x0000, 0x7004, 0x2060, 0x00d6,
-+ 0x6010, 0x2068, 0x080c, 0x9beb, 0x0118, 0x6850, 0xc0bd, 0x6852,
-+ 0x601c, 0xa086, 0x0006, 0x1180, 0x2061, 0x0100, 0x62c8, 0x2001,
-+ 0x00fa, 0x8001, 0x1df0, 0x60c8, 0xa206, 0x1dc0, 0x60c4, 0x686a,
-+ 0x60c8, 0x6866, 0x7004, 0x2060, 0x00de, 0x00c6, 0x080c, 0x98c3,
-+ 0x00ce, 0x2001, 0xb6ef, 0x2004, 0xac06, 0x1150, 0x20e1, 0x9040,
-+ 0x080c, 0x8200, 0x2011, 0x0000, 0x080c, 0x8029, 0x080c, 0x71f1,
-+ 0x002e, 0x0804, 0x21d5, 0x0126, 0x2091, 0x2400, 0x0006, 0x0016,
-+ 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x2079, 0x0020, 0x2071, 0xb74a,
-+ 0x2b68, 0x6818, 0x2060, 0x7904, 0x7803, 0x0002, 0xa184, 0x0700,
-+ 0x1904, 0x20da, 0x7000, 0x0002, 0x21d5, 0x2138, 0x21a8, 0x21d3,
-+ 0x8001, 0x7002, 0xd19c, 0x1170, 0x8aff, 0x05d0, 0x2009, 0x0001,
-+ 0x080c, 0x205c, 0x0904, 0x21d5, 0x2009, 0x0001, 0x080c, 0x205c,
-+ 0x0804, 0x21d5, 0x7803, 0x0004, 0xd194, 0x0148, 0x6850, 0xc0fc,
-+ 0x6852, 0x8aff, 0x11d8, 0x684c, 0xc0f5, 0x684e, 0x00b8, 0x0026,
-+ 0x0036, 0x6b28, 0x6a2c, 0x7820, 0x686e, 0xa31a, 0x7824, 0x6872,
-+ 0xa213, 0x7830, 0x681e, 0x7834, 0x6822, 0x6b2a, 0x6a2e, 0x003e,
-+ 0x002e, 0x080c, 0x228e, 0x6850, 0xc0fd, 0x6852, 0x2a00, 0x6826,
-+ 0x2c00, 0x681a, 0x2800, 0x6832, 0x7003, 0x0000, 0x0804, 0x21d5,
-+ 0x00f6, 0x0026, 0x781c, 0x0006, 0x7818, 0x0006, 0x2079, 0x0100,
-+ 0x7a14, 0xa284, 0x0184, 0xa085, 0x0012, 0x7816, 0x0036, 0x2019,
-+ 0x1000, 0x8319, 0x090c, 0x1511, 0x7820, 0xd0bc, 0x1dd0, 0x003e,
-+ 0x79c8, 0x000e, 0xa102, 0x001e, 0x0006, 0x0016, 0x79c4, 0x000e,
-+ 0xa103, 0x78c6, 0x000e, 0x78ca, 0xa284, 0x0184, 0xa085, 0x0012,
-+ 0x7816, 0x002e, 0x00fe, 0x7803, 0x0008, 0x7003, 0x0000, 0x0468,
-+ 0x8001, 0x7002, 0xd194, 0x0168, 0x7804, 0xd0fc, 0x1904, 0x212b,
-+ 0xd19c, 0x11f8, 0x8aff, 0x0508, 0x2009, 0x0001, 0x080c, 0x205c,
-+ 0x00e0, 0x0026, 0x0036, 0x6b28, 0x6a2c, 0x080c, 0x228e, 0x00d6,
-+ 0x2805, 0xac68, 0x6034, 0xd09c, 0x1128, 0x6808, 0xa31a, 0x680c,
-+ 0xa213, 0x0020, 0x6810, 0xa31a, 0x6814, 0xa213, 0x00de, 0x0804,
-+ 0x215b, 0x0804, 0x2157, 0x080c, 0x1511, 0x00ce, 0x00de, 0x00ee,
-+ 0x00fe, 0x001e, 0x000e, 0x012e, 0x0005, 0x00f6, 0x00e6, 0x2071,
-+ 0xb74a, 0x7000, 0xa086, 0x0000, 0x05d0, 0x2079, 0x0020, 0x0016,
-+ 0x2009, 0x0207, 0x210c, 0xd194, 0x0198, 0x2009, 0x020c, 0x210c,
-+ 0xa184, 0x0003, 0x0168, 0x080c, 0xb3d3, 0x2001, 0x0133, 0x2004,
-+ 0xa005, 0x090c, 0x1511, 0x20e1, 0x9040, 0x2001, 0x020c, 0x2102,
-+ 0x2009, 0x0206, 0x2104, 0x2009, 0x0203, 0x210c, 0xa106, 0x1110,
-+ 0x20e1, 0x9040, 0x7804, 0xd0fc, 0x09d8, 0x080c, 0x211b, 0x7000,
-+ 0xa086, 0x0000, 0x19a8, 0x001e, 0x7803, 0x0004, 0x7804, 0xd0ac,
-+ 0x1de8, 0x20e1, 0x9040, 0x7803, 0x0002, 0x7003, 0x0000, 0x00ee,
-+ 0x00fe, 0x0005, 0x0026, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2071,
-+ 0xb74a, 0x2079, 0x0020, 0x7000, 0xa086, 0x0000, 0x0540, 0x7004,
-+ 0x2060, 0x6010, 0x2068, 0x080c, 0x9beb, 0x0158, 0x6850, 0xc0b5,
-+ 0x6852, 0x680c, 0x7a1c, 0xa206, 0x1120, 0x6808, 0x7a18, 0xa206,
-+ 0x01e0, 0x2001, 0x0105, 0x2003, 0x0010, 0x20e1, 0x9040, 0x7803,
-+ 0x0004, 0x7003, 0x0000, 0x7004, 0x2060, 0x080c, 0x98c3, 0x20e1,
-+ 0x9040, 0x080c, 0x8200, 0x2011, 0x0000, 0x080c, 0x8029, 0x00fe,
-+ 0x00ee, 0x00de, 0x00ce, 0x002e, 0x0005, 0x6810, 0x6a14, 0xa205,
-+ 0x1d00, 0x684c, 0xc0dc, 0x684e, 0x2c10, 0x080c, 0x1f7a, 0x2001,
-+ 0x0105, 0x2003, 0x0010, 0x20e1, 0x9040, 0x7803, 0x0004, 0x7003,
-+ 0x0000, 0x2069, 0xb6e0, 0x6833, 0x0000, 0x683f, 0x0000, 0x08f8,
-+ 0x8840, 0x2805, 0xa005, 0x1170, 0x6004, 0xa005, 0x0168, 0x681a,
-+ 0x2060, 0x6034, 0xa084, 0x000f, 0xa080, 0x22b6, 0x2045, 0x88ff,
-+ 0x090c, 0x1511, 0x8a51, 0x0005, 0x2050, 0x0005, 0x8a50, 0x8841,
-+ 0x2805, 0xa005, 0x1190, 0x2c00, 0xad06, 0x0120, 0x6000, 0xa005,
-+ 0x1108, 0x2d00, 0x2060, 0x681a, 0x6034, 0xa084, 0x000f, 0xa080,
-+ 0x22c6, 0x2045, 0x88ff, 0x090c, 0x1511, 0x0005, 0x0000, 0x0011,
-+ 0x0015, 0x0019, 0x001d, 0x0021, 0x0025, 0x0029, 0x0000, 0x000f,
-+ 0x0015, 0x001b, 0x0021, 0x0027, 0x0000, 0x0000, 0x0000, 0x22ab,
-+ 0x22a7, 0x0000, 0x0000, 0x22b5, 0x0000, 0x22ab, 0x0000, 0x22b2,
-+ 0x22af, 0x0000, 0x0000, 0x0000, 0x22b5, 0x22b2, 0x0000, 0x22ad,
-+ 0x22ad, 0x0000, 0x0000, 0x22b5, 0x0000, 0x22ad, 0x0000, 0x22b3,
-+ 0x22b3, 0x0000, 0x0000, 0x0000, 0x22b5, 0x22b3, 0x00a6, 0x0096,
-+ 0x0086, 0x6b2e, 0x6c2a, 0x6858, 0xa055, 0x0904, 0x2367, 0x2d60,
-+ 0x6034, 0xa0cc, 0x000f, 0xa9c0, 0x22b6, 0xa986, 0x0007, 0x0130,
-+ 0xa986, 0x000e, 0x0118, 0xa986, 0x000f, 0x1120, 0x605c, 0xa422,
-+ 0x6060, 0xa31a, 0x2805, 0xa045, 0x1140, 0x0310, 0x0804, 0x2367,
-+ 0x6004, 0xa065, 0x0904, 0x2367, 0x0c18, 0x2805, 0xa005, 0x01a8,
-+ 0xac68, 0xd99c, 0x1128, 0x6808, 0xa422, 0x680c, 0xa31b, 0x0020,
-+ 0x6810, 0xa422, 0x6814, 0xa31b, 0x0620, 0x2300, 0xa405, 0x0150,
-+ 0x8a51, 0x0904, 0x2367, 0x8840, 0x0c40, 0x6004, 0xa065, 0x0904,
-+ 0x2367, 0x0830, 0x8a51, 0x0904, 0x2367, 0x8840, 0x2805, 0xa005,
-+ 0x1158, 0x6004, 0xa065, 0x0904, 0x2367, 0x6034, 0xa0cc, 0x000f,
-+ 0xa9c0, 0x22b6, 0x2805, 0x2040, 0x2b68, 0x6850, 0xc0fc, 0x6852,
-+ 0x0458, 0x8422, 0x8420, 0x831a, 0xa399, 0x0000, 0x00d6, 0x2b68,
-+ 0x6c6e, 0x6b72, 0x00de, 0xd99c, 0x1168, 0x6908, 0x2400, 0xa122,
-+ 0x690c, 0x2300, 0xa11b, 0x0a0c, 0x1511, 0x6800, 0xa420, 0x6804,
-+ 0xa319, 0x0060, 0x6910, 0x2400, 0xa122, 0x6914, 0x2300, 0xa11b,
-+ 0x0a0c, 0x1511, 0x6800, 0xa420, 0x6804, 0xa319, 0x2b68, 0x6c1e,
-+ 0x6b22, 0x6850, 0xc0fd, 0x6852, 0x2c00, 0x681a, 0x2800, 0x6832,
-+ 0x2a00, 0x6826, 0x000e, 0x000e, 0x000e, 0xa006, 0x0028, 0x008e,
-+ 0x009e, 0x00ae, 0xa085, 0x0001, 0x0005, 0x2001, 0x0005, 0x2004,
-+ 0xa084, 0x0007, 0x0002, 0x237b, 0x237c, 0x237f, 0x2382, 0x2387,
-+ 0x238a, 0x238f, 0x2394, 0x0005, 0x080c, 0x211b, 0x0005, 0x080c,
-+ 0x1ad5, 0x0005, 0x080c, 0x1ad5, 0x080c, 0x211b, 0x0005, 0x080c,
-+ 0x1713, 0x0005, 0x080c, 0x211b, 0x080c, 0x1713, 0x0005, 0x080c,
-+ 0x1ad5, 0x080c, 0x1713, 0x0005, 0x080c, 0x1ad5, 0x080c, 0x211b,
-+ 0x080c, 0x1713, 0x0005, 0x0126, 0x2091, 0x2600, 0x2079, 0x0200,
-+ 0x2071, 0xba80, 0x2069, 0xb400, 0x080c, 0x2489, 0x080c, 0x2479,
-+ 0x2009, 0x0004, 0x7912, 0x7817, 0x0004, 0x080c, 0x27be, 0x781b,
-+ 0x0002, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a9, 0x0080, 0x782f,
-+ 0x0000, 0x1f04, 0x23b7, 0x20e1, 0x9080, 0x783b, 0x001f, 0x20e1,
-+ 0x8700, 0x012e, 0x0005, 0x0126, 0x2091, 0x2600, 0x781c, 0xd0a4,
-+ 0x190c, 0x2476, 0xa084, 0x0007, 0x0002, 0x23e7, 0x23d5, 0x23d8,
-+ 0x23db, 0x23e0, 0x23e2, 0x23e4, 0x23e6, 0x080c, 0x6385, 0x0078,
-+ 0x080c, 0x63c4, 0x0060, 0x080c, 0x6385, 0x080c, 0x63c4, 0x0038,
-+ 0x0041, 0x0028, 0x0031, 0x0018, 0x0021, 0x0008, 0x0011, 0x012e,
-+ 0x0005, 0x0006, 0x0016, 0x0026, 0x080c, 0xb3d3, 0x7930, 0xa184,
-+ 0x0003, 0x0170, 0x2001, 0xb6ef, 0x2004, 0xa005, 0x0130, 0x2001,
-+ 0x0133, 0x2004, 0xa005, 0x090c, 0x1511, 0x20e1, 0x9040, 0x04a0,
-+ 0xa184, 0x0030, 0x01e0, 0x6a00, 0xa286, 0x0003, 0x1108, 0x00a0,
-+ 0x080c, 0x5a90, 0x1178, 0x2001, 0xb69f, 0x2003, 0x0001, 0x2001,
-+ 0xb400, 0x2003, 0x0001, 0xa085, 0x0001, 0x080c, 0x5ad4, 0x080c,
-+ 0x59c8, 0x0010, 0x080c, 0x4ad9, 0x080c, 0x2479, 0x00a8, 0xa184,
-+ 0x00c0, 0x0168, 0x00e6, 0x0036, 0x0046, 0x0056, 0x2071, 0xb723,
-+ 0x080c, 0x1dcd, 0x005e, 0x004e, 0x003e, 0x00ee, 0x0028, 0xa184,
-+ 0x0300, 0x0110, 0x20e1, 0x9020, 0x7932, 0x002e, 0x001e, 0x000e,
-+ 0x0005, 0x0016, 0x00e6, 0x00f6, 0x2071, 0xb400, 0x7128, 0x2001,
-+ 0xb691, 0x2102, 0x2001, 0xb699, 0x2102, 0xa182, 0x0211, 0x1218,
-+ 0x2009, 0x0008, 0x0400, 0xa182, 0x0259, 0x1218, 0x2009, 0x0007,
-+ 0x00d0, 0xa182, 0x02c1, 0x1218, 0x2009, 0x0006, 0x00a0, 0xa182,
-+ 0x0349, 0x1218, 0x2009, 0x0005, 0x0070, 0xa182, 0x0421, 0x1218,
-+ 0x2009, 0x0004, 0x0040, 0xa182, 0x0581, 0x1218, 0x2009, 0x0003,
-+ 0x0010, 0x2009, 0x0002, 0x2079, 0x0200, 0x7912, 0x7817, 0x0004,
-+ 0x080c, 0x27be, 0x00fe, 0x00ee, 0x001e, 0x0005, 0x7938, 0x080c,
-+ 0x1511, 0x00e6, 0x0026, 0x2071, 0x0200, 0x20e1, 0x1000, 0x7220,
-+ 0x7028, 0x7020, 0xa206, 0x0de0, 0x20e1, 0x9010, 0x002e, 0x00ee,
-+ 0x0005, 0x20e1, 0xa000, 0x7837, 0x0001, 0x782f, 0x0000, 0x782f,
-+ 0x0000, 0x782f, 0x0000, 0x782f, 0x0000, 0x7837, 0x0005, 0x20a9,
-+ 0x0210, 0x7830, 0xd0bc, 0x1110, 0x1f04, 0x2499, 0x7837, 0x0001,
-+ 0x7837, 0x0000, 0xe000, 0xe000, 0x20e1, 0xa000, 0x0005, 0x0126,
-+ 0x2091, 0x2800, 0x2061, 0x0100, 0x2071, 0xb400, 0x6024, 0x6026,
-+ 0x6053, 0x0030, 0x080c, 0x27fd, 0x6050, 0xa084, 0xfe7f, 0x6052,
-+ 0x2009, 0x00ef, 0x6132, 0x6136, 0x080c, 0x280d, 0x60e7, 0x0000,
-+ 0x61ea, 0x60e3, 0x0008, 0x604b, 0xf7f7, 0x6043, 0x0000, 0x602f,
-+ 0x0080, 0x602f, 0x0000, 0x6007, 0x0e9f, 0x601b, 0x001e, 0x600f,
-+ 0x00ff, 0x2001, 0xb68d, 0x2003, 0x00ff, 0x602b, 0x002f, 0x012e,
-+ 0x0005, 0x2001, 0xb432, 0x2003, 0x0000, 0x2001, 0xb431, 0x2003,
-+ 0x0001, 0x0005, 0x0126, 0x2091, 0x2800, 0x0006, 0x0016, 0x0026,
-+ 0x6124, 0xa184, 0x1e2c, 0x1118, 0xa184, 0x0007, 0x002a, 0xa195,
-+ 0x0004, 0xa284, 0x0007, 0x0002, 0x2516, 0x24fc, 0x24ff, 0x2502,
-+ 0x2507, 0x2509, 0x250d, 0x2511, 0x080c, 0x6b39, 0x00b8, 0x080c,
-+ 0x6c14, 0x00a0, 0x080c, 0x6c14, 0x080c, 0x6b39, 0x0078, 0x0099,
-+ 0x0068, 0x080c, 0x6b39, 0x0079, 0x0048, 0x080c, 0x6c14, 0x0059,
-+ 0x0028, 0x080c, 0x6c14, 0x080c, 0x6b39, 0x0029, 0x002e, 0x001e,
-+ 0x000e, 0x012e, 0x0005, 0x6124, 0xd19c, 0x1904, 0x272c, 0x080c,
-+ 0x5a90, 0x0578, 0x7000, 0xa086, 0x0003, 0x0198, 0x6024, 0xa084,
-+ 0x1800, 0x0178, 0x080c, 0x5ab6, 0x0118, 0x080c, 0x5aa2, 0x1148,
-+ 0x6027, 0x0020, 0x6043, 0x0000, 0x2001, 0xb69e, 0x2003, 0xaaaa,
-+ 0x0458, 0x080c, 0x5ab6, 0x15d0, 0x6024, 0xa084, 0x1800, 0x1108,
-+ 0x04a8, 0x2001, 0xb69e, 0x2003, 0xaaaa, 0x2001, 0xb69f, 0x2003,
-+ 0x0001, 0x2001, 0xb400, 0x2003, 0x0001, 0x080c, 0x59c8, 0x0804,
-+ 0x272c, 0xd1ac, 0x1518, 0x6024, 0xd0dc, 0x1170, 0xd0e4, 0x1188,
-+ 0xd0d4, 0x11a0, 0xd0cc, 0x0130, 0x708c, 0xa086, 0x0028, 0x1110,
-+ 0x080c, 0x5c1f, 0x0804, 0x272c, 0x2001, 0xb69f, 0x2003, 0x0000,
-+ 0x0048, 0x2001, 0xb69f, 0x2003, 0x0002, 0x0020, 0x080c, 0x5b92,
-+ 0x0804, 0x272c, 0x080c, 0x5cc4, 0x0804, 0x272c, 0xd1ac, 0x0904,
-+ 0x2674, 0x080c, 0x5a90, 0x11d8, 0x6027, 0x0020, 0x0006, 0x0026,
-+ 0x0036, 0x080c, 0x5aac, 0x1170, 0x2001, 0xb69f, 0x2003, 0x0001,
-+ 0x2001, 0xb400, 0x2003, 0x0001, 0x080c, 0x59c8, 0x003e, 0x002e,
-+ 0x000e, 0x0005, 0x003e, 0x002e, 0x000e, 0x080c, 0x5a67, 0x0016,
-+ 0x0046, 0x00c6, 0x644c, 0xa486, 0xf0f0, 0x1138, 0x2061, 0x0100,
-+ 0x644a, 0x6043, 0x0090, 0x6043, 0x0010, 0x74ce, 0xa48c, 0xff00,
-+ 0x7034, 0xd084, 0x0178, 0xa186, 0xf800, 0x1160, 0x703c, 0xd084,
-+ 0x1148, 0xc085, 0x703e, 0x0036, 0x2418, 0x2011, 0x8016, 0x080c,
-+ 0x3e8a, 0x003e, 0xa196, 0xff00, 0x05b8, 0x7054, 0xa084, 0x00ff,
-+ 0x810f, 0xa116, 0x0588, 0x7130, 0xd184, 0x1570, 0x2011, 0xb453,
-+ 0x2214, 0xd2ec, 0x0138, 0xc18d, 0x7132, 0x2011, 0xb453, 0x2214,
-+ 0xd2ac, 0x1510, 0x6240, 0xa294, 0x0010, 0x0130, 0x6248, 0xa294,
-+ 0xff00, 0xa296, 0xff00, 0x01c0, 0x7030, 0xd08c, 0x0904, 0x2641,
-+ 0x7034, 0xd08c, 0x1140, 0x2001, 0xb40c, 0x200c, 0xd1ac, 0x1904,
-+ 0x2641, 0xc1ad, 0x2102, 0x0036, 0x73cc, 0x2011, 0x8013, 0x080c,
-+ 0x3e8a, 0x003e, 0x0804, 0x2641, 0x7034, 0xd08c, 0x1140, 0x2001,
-+ 0xb40c, 0x200c, 0xd1ac, 0x1904, 0x2641, 0xc1ad, 0x2102, 0x0036,
-+ 0x73cc, 0x2011, 0x8013, 0x080c, 0x3e8a, 0x003e, 0x7130, 0xc185,
-+ 0x7132, 0x2011, 0xb453, 0x220c, 0xd1a4, 0x01d0, 0x0016, 0x2009,
-+ 0x0001, 0x2011, 0x0100, 0x080c, 0x6adf, 0x2019, 0x000e, 0x080c,
-+ 0xafe8, 0xa484, 0x00ff, 0xa080, 0x2d88, 0x200d, 0xa18c, 0xff00,
-+ 0x810f, 0x8127, 0xa006, 0x2009, 0x000e, 0x080c, 0xb06b, 0x001e,
-+ 0xd1ac, 0x1148, 0x0016, 0x2009, 0x0000, 0x2019, 0x0004, 0x080c,
-+ 0x2c33, 0x001e, 0x0070, 0x0156, 0x20a9, 0x007f, 0x2009, 0x0000,
-+ 0x080c, 0x4f6a, 0x1110, 0x080c, 0x4bc5, 0x8108, 0x1f04, 0x2638,
-+ 0x015e, 0x00ce, 0x004e, 0x2011, 0x0003, 0x080c, 0x801f, 0x2011,
-+ 0x0002, 0x080c, 0x8029, 0x080c, 0x7f03, 0x0036, 0x2019, 0x0000,
-+ 0x080c, 0x7f8e, 0x003e, 0x60e3, 0x0000, 0x001e, 0x2001, 0xb400,
-+ 0x2014, 0xa296, 0x0004, 0x1128, 0xd19c, 0x11b0, 0x6228, 0xc29d,
-+ 0x622a, 0x2003, 0x0001, 0x2001, 0xb423, 0x2003, 0x0000, 0x6027,
-+ 0x0020, 0x080c, 0x5ab6, 0x1140, 0x0016, 0x2009, 0x07d0, 0x2011,
-+ 0x59a5, 0x080c, 0x69e7, 0x001e, 0xd194, 0x0904, 0x272c, 0x0016,
-+ 0x6220, 0xd2b4, 0x0904, 0x26dd, 0x080c, 0x69d5, 0x080c, 0x7d24,
-+ 0x6027, 0x0004, 0x00f6, 0x2019, 0xb6e9, 0x2304, 0xa07d, 0x0570,
-+ 0x7804, 0xa086, 0x0032, 0x1550, 0x00d6, 0x00c6, 0x00e6, 0x2069,
-+ 0x0140, 0x618c, 0x6288, 0x7818, 0x608e, 0x7808, 0x608a, 0x6043,
-+ 0x0002, 0x2001, 0x0003, 0x8001, 0x1df0, 0x6043, 0x0000, 0x6803,
-+ 0x1000, 0x6803, 0x0000, 0x618e, 0x628a, 0x080c, 0x7055, 0x080c,
-+ 0x7134, 0x7810, 0x2070, 0x7037, 0x0103, 0x2f60, 0x080c, 0x85c0,
-+ 0x00ee, 0x00ce, 0x00de, 0x00fe, 0x001e, 0x0005, 0x00fe, 0x00d6,
-+ 0x2069, 0x0140, 0x6804, 0xa084, 0x4000, 0x0120, 0x6803, 0x1000,
-+ 0x6803, 0x0000, 0x00de, 0x00c6, 0x2061, 0xb6e0, 0x6028, 0xa09a,
-+ 0x00c8, 0x1238, 0x8000, 0x602a, 0x00ce, 0x080c, 0x7d17, 0x0804,
-+ 0x272b, 0x2019, 0xb6e9, 0x2304, 0xa065, 0x0120, 0x2009, 0x0027,
-+ 0x080c, 0x85ef, 0x00ce, 0x0804, 0x272b, 0xd2bc, 0x0904, 0x272b,
-+ 0x080c, 0x69e2, 0x6014, 0xa084, 0x0184, 0xa085, 0x0010, 0x6016,
-+ 0x6027, 0x0004, 0x00d6, 0x2069, 0x0140, 0x6804, 0xa084, 0x4000,
-+ 0x0120, 0x6803, 0x1000, 0x6803, 0x0000, 0x00de, 0x00c6, 0x2061,
-+ 0xb6e0, 0x6044, 0xa09a, 0x00c8, 0x12f0, 0x8000, 0x6046, 0x603c,
-+ 0x00ce, 0xa005, 0x0540, 0x2009, 0x07d0, 0x080c, 0x69da, 0xa080,
-+ 0x0007, 0x2004, 0xa086, 0x0006, 0x1138, 0x6114, 0xa18c, 0x0184,
-+ 0xa18d, 0x0012, 0x6116, 0x00b8, 0x6114, 0xa18c, 0x0184, 0xa18d,
-+ 0x0016, 0x6116, 0x0080, 0x0036, 0x2019, 0x0001, 0x080c, 0x7f8e,
-+ 0x003e, 0x2019, 0xb6ef, 0x2304, 0xa065, 0x0120, 0x2009, 0x004f,
-+ 0x080c, 0x85ef, 0x00ce, 0x001e, 0xd19c, 0x0904, 0x2785, 0x7034,
-+ 0xd0ac, 0x1560, 0x0016, 0x0156, 0x6027, 0x0008, 0x602f, 0x0020,
-+ 0x20a9, 0x0006, 0x1d04, 0x273a, 0x2091, 0x6000, 0x1f04, 0x273a,
-+ 0x602f, 0x0000, 0x6150, 0xa185, 0x1400, 0x6052, 0x20a9, 0x0366,
-+ 0x1d04, 0x2748, 0x2091, 0x6000, 0x6020, 0xd09c, 0x1130, 0x015e,
-+ 0x6152, 0x001e, 0x6027, 0x0008, 0x0480, 0x080c, 0x28cd, 0x1f04,
-+ 0x2748, 0x015e, 0x6152, 0x001e, 0x6027, 0x0008, 0x0016, 0x6028,
-+ 0xc09c, 0x602a, 0x2011, 0x0003, 0x080c, 0x801f, 0x2011, 0x0002,
-+ 0x080c, 0x8029, 0x080c, 0x7f03, 0x0036, 0x2019, 0x0000, 0x080c,
-+ 0x7f8e, 0x003e, 0x60e3, 0x0000, 0x080c, 0xb3b2, 0x080c, 0xb3cd,
-+ 0xa085, 0x0001, 0x080c, 0x5ad4, 0x2001, 0xb400, 0x2003, 0x0004,
-+ 0x6027, 0x0008, 0x080c, 0x12d9, 0x001e, 0xa18c, 0xffd0, 0x6126,
-+ 0x0005, 0x0006, 0x0016, 0x0026, 0x00e6, 0x00f6, 0x0126, 0x2091,
-+ 0x8000, 0x2071, 0xb400, 0x71c4, 0x70c6, 0xa116, 0x0500, 0x81ff,
-+ 0x0128, 0x2011, 0x8011, 0x080c, 0x3e8a, 0x00c8, 0x2011, 0x8012,
-+ 0x080c, 0x3e8a, 0x2001, 0xb472, 0x2004, 0xd0fc, 0x1180, 0x0036,
-+ 0x00c6, 0x080c, 0x2858, 0x080c, 0x7edf, 0x2061, 0x0100, 0x2019,
-+ 0x0028, 0x2009, 0x0000, 0x080c, 0x2c33, 0x00ce, 0x003e, 0x012e,
-+ 0x00fe, 0x00ee, 0x002e, 0x001e, 0x000e, 0x0005, 0x00c6, 0x00f6,
-+ 0x0006, 0x0026, 0x2061, 0x0100, 0xa190, 0x27d1, 0x2205, 0x60f2,
-+ 0x2011, 0x27de, 0x2205, 0x60ee, 0x002e, 0x000e, 0x00fe, 0x00ce,
-+ 0x0005, 0x0840, 0x0840, 0x0840, 0x0580, 0x0420, 0x0348, 0x02c0,
-+ 0x0258, 0x0210, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x0140, 0x00f8,
-+ 0x00d0, 0x00b0, 0x00a0, 0x2028, 0xa18c, 0x00ff, 0x2130, 0xa094,
-+ 0xff00, 0x1110, 0x81ff, 0x0118, 0x080c, 0x6672, 0x0038, 0xa080,
-+ 0x2d88, 0x200d, 0xa18c, 0xff00, 0x810f, 0xa006, 0x0005, 0xa080,
-+ 0x2d88, 0x200d, 0xa18c, 0x00ff, 0x0005, 0x00d6, 0x2069, 0x0140,
-+ 0x2001, 0xb415, 0x2003, 0x00ef, 0x20a9, 0x0010, 0xa006, 0x6852,
-+ 0x6856, 0x1f04, 0x2808, 0x00de, 0x0005, 0x0006, 0x00d6, 0x0026,
-+ 0x2069, 0x0140, 0x2001, 0xb415, 0x2102, 0x8114, 0x8214, 0x8214,
-+ 0x8214, 0x20a9, 0x0010, 0x6853, 0x0000, 0xa006, 0x82ff, 0x1128,
-+ 0xa184, 0x000f, 0xa080, 0xb3e1, 0x2005, 0x6856, 0x8211, 0x1f04,
-+ 0x281d, 0x002e, 0x00de, 0x000e, 0x0005, 0x00c6, 0x2061, 0xb400,
-+ 0x6030, 0x0110, 0xc09d, 0x0008, 0xc09c, 0x6032, 0x00ce, 0x0005,
-+ 0x0156, 0x00d6, 0x0026, 0x0016, 0x0006, 0x2069, 0x0140, 0x6980,
-+ 0xa116, 0x0180, 0xa112, 0x1230, 0x8212, 0x8210, 0x22a8, 0x2001,
-+ 0x0402, 0x0018, 0x22a8, 0x2001, 0x0404, 0x680e, 0x1f04, 0x284d,
-+ 0x680f, 0x0000, 0x000e, 0x001e, 0x002e, 0x00de, 0x015e, 0x0005,
-+ 0x2001, 0xb453, 0x2004, 0xd0c4, 0x0150, 0xd0a4, 0x0140, 0xa006,
-+ 0x0046, 0x2020, 0x2009, 0x002e, 0x080c, 0xb06b, 0x004e, 0x0005,
-+ 0x00f6, 0x0016, 0x0026, 0x2079, 0x0140, 0x78c4, 0xd0dc, 0x0548,
-+ 0xa084, 0x0700, 0xa08e, 0x0300, 0x1520, 0x2011, 0x0000, 0x2009,
-+ 0x0002, 0x2300, 0xa080, 0x0020, 0x2018, 0x2300, 0x080c, 0x6b05,
-+ 0x2011, 0x0030, 0x2200, 0x8007, 0xa085, 0x004c, 0x78c2, 0x2009,
-+ 0x0204, 0x210c, 0x2200, 0xa100, 0x2009, 0x0138, 0x200a, 0x080c,
-+ 0x5a90, 0x1118, 0x2009, 0xb68f, 0x200a, 0x002e, 0x001e, 0x00fe,
-+ 0x0005, 0x78c3, 0x0000, 0x0cc8, 0x0126, 0x2091, 0x2800, 0x0006,
-+ 0x0016, 0x0026, 0x2001, 0x0170, 0x200c, 0x8000, 0x2014, 0xa184,
-+ 0x0003, 0x0110, 0x0804, 0x1ad3, 0x002e, 0x001e, 0x000e, 0x012e,
-+ 0x0005, 0x0006, 0x2001, 0x0100, 0x2004, 0xa082, 0x0005, 0x000e,
-+ 0x0268, 0x2001, 0x0170, 0x200c, 0xa18c, 0x00ff, 0xa18e, 0x004c,
-+ 0x1128, 0x200c, 0xa18c, 0xff00, 0x810f, 0x0010, 0x2009, 0x0000,
-+ 0x2001, 0x0204, 0x2004, 0xa108, 0x0005, 0x0006, 0x0156, 0x00f6,
-+ 0x2079, 0x0100, 0x20a9, 0x000a, 0x7854, 0xd08c, 0x1110, 0x1f04,
-+ 0x28d4, 0x00fe, 0x015e, 0x000e, 0x0005, 0x0016, 0x00c6, 0x0006,
-+ 0x2061, 0x0100, 0x6030, 0x0006, 0x6048, 0x0006, 0x60e4, 0x0006,
-+ 0x60e8, 0x0006, 0x6050, 0x0006, 0x60f0, 0x0006, 0x60ec, 0x0006,
-+ 0x600c, 0x0006, 0x6004, 0x0006, 0x6028, 0x0006, 0x60e0, 0x0006,
-+ 0x602f, 0x0100, 0x602f, 0x0000, 0xe000, 0xe000, 0xe000, 0xe000,
-+ 0x602f, 0x0040, 0x602f, 0x0000, 0x000e, 0x60e2, 0x000e, 0x602a,
-+ 0x000e, 0x6006, 0x000e, 0x600e, 0x000e, 0x60ee, 0x000e, 0x60f2,
-+ 0x000e, 0x6052, 0x000e, 0x60ea, 0x000e, 0x60e6, 0x000e, 0x604a,
-+ 0x000e, 0x6032, 0x6036, 0x2008, 0x080c, 0x280d, 0x000e, 0x00ce,
-+ 0x001e, 0x0005, 0x2009, 0x0171, 0x2104, 0xd0dc, 0x0140, 0x2009,
-+ 0x0170, 0x2104, 0x200b, 0x0080, 0xe000, 0xe000, 0x200a, 0x0005,
-+ 0x29c0, 0x29c4, 0x29c8, 0x29ce, 0x29d4, 0x29da, 0x29e0, 0x29e8,
-+ 0x29f0, 0x29f6, 0x29fc, 0x2a04, 0x2a0c, 0x2a14, 0x2a1c, 0x2a26,
-+ 0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73,
-+ 0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73,
-+ 0x2a30, 0x2a30, 0x2a30, 0x2a30, 0x2a30, 0x2a30, 0x2a30, 0x2a30,
-+ 0x2a30, 0x2a30, 0x2a30, 0x2a30, 0x2a30, 0x2a30, 0x2a30, 0x2a30,
-+ 0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73,
-+ 0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73,
-+ 0x2a32, 0x2a32, 0x2a38, 0x2a38, 0x2a3f, 0x2a3f, 0x2a46, 0x2a46,
-+ 0x2a4f, 0x2a4f, 0x2a56, 0x2a56, 0x2a5f, 0x2a5f, 0x2a68, 0x2a68,
-+ 0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73,
-+ 0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73,
-+ 0x2a30, 0x2a30, 0x2a30, 0x2a30, 0x2a30, 0x2a30, 0x2a30, 0x2a30,
-+ 0x2a30, 0x2a30, 0x2a30, 0x2a30, 0x2a30, 0x2a30, 0x2a30, 0x2a30,
-+ 0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73,
-+ 0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73,
-+ 0x2a30, 0x2a30, 0x2a30, 0x2a30, 0x2a30, 0x2a30, 0x2a30, 0x2a30,
-+ 0x2a30, 0x2a30, 0x2a30, 0x2a30, 0x2a30, 0x2a30, 0x2a30, 0x2a30,
-+ 0x0106, 0x0006, 0x0804, 0x2a7b, 0x0106, 0x0006, 0x0804, 0x2a7b,
-+ 0x0106, 0x0006, 0x080c, 0x24e2, 0x0804, 0x2a7b, 0x0106, 0x0006,
-+ 0x080c, 0x24e2, 0x0804, 0x2a7b, 0x0106, 0x0006, 0x080c, 0x236d,
-+ 0x0804, 0x2a7b, 0x0106, 0x0006, 0x080c, 0x236d, 0x0804, 0x2a7b,
-+ 0x0106, 0x0006, 0x080c, 0x24e2, 0x080c, 0x236d, 0x0804, 0x2a7b,
-+ 0x0106, 0x0006, 0x080c, 0x24e2, 0x080c, 0x236d, 0x0804, 0x2a7b,
-+ 0x0106, 0x0006, 0x080c, 0x23c3, 0x0804, 0x2a7b, 0x0106, 0x0006,
-+ 0x080c, 0x23c3, 0x0804, 0x2a7b, 0x0106, 0x0006, 0x080c, 0x24e2,
-+ 0x080c, 0x23c3, 0x0804, 0x2a7b, 0x0106, 0x0006, 0x080c, 0x24e2,
-+ 0x080c, 0x23c3, 0x0804, 0x2a7b, 0x0106, 0x0006, 0x080c, 0x236d,
-+ 0x080c, 0x23c3, 0x0804, 0x2a7b, 0x0106, 0x0006, 0x080c, 0x236d,
-+ 0x080c, 0x23c3, 0x0804, 0x2a7b, 0x0106, 0x0006, 0x080c, 0x24e2,
-+ 0x080c, 0x236d, 0x080c, 0x23c3, 0x0804, 0x2a7b, 0x0106, 0x0006,
-+ 0x080c, 0x24e2, 0x080c, 0x236d, 0x080c, 0x23c3, 0x0804, 0x2a7b,
-+ 0xe000, 0x0cf0, 0x0106, 0x0006, 0x080c, 0x289c, 0x0804, 0x2a7b,
-+ 0x0106, 0x0006, 0x080c, 0x289c, 0x080c, 0x24e2, 0x04e0, 0x0106,
-+ 0x0006, 0x080c, 0x289c, 0x080c, 0x236d, 0x04a8, 0x0106, 0x0006,
-+ 0x080c, 0x289c, 0x080c, 0x24e2, 0x080c, 0x236d, 0x0460, 0x0106,
-+ 0x0006, 0x080c, 0x289c, 0x080c, 0x23c3, 0x0428, 0x0106, 0x0006,
-+ 0x080c, 0x289c, 0x080c, 0x24e2, 0x080c, 0x23c3, 0x00e0, 0x0106,
-+ 0x0006, 0x080c, 0x289c, 0x080c, 0x236d, 0x080c, 0x23c3, 0x0098,
-+ 0x0106, 0x0006, 0x080c, 0x289c, 0x080c, 0x24e2, 0x080c, 0x236d,
-+ 0x080c, 0x23c3, 0x0040, 0x20d1, 0x0000, 0x20d1, 0x0001, 0x20d1,
-+ 0x0000, 0x080c, 0x1511, 0x000e, 0x010e, 0x000d, 0x00c6, 0x0026,
-+ 0x0046, 0x2021, 0x0000, 0x080c, 0x52ca, 0x1904, 0x2b5b, 0x72d4,
-+ 0x2001, 0xb69e, 0x2004, 0xa005, 0x1110, 0xd29c, 0x0148, 0xd284,
-+ 0x1138, 0xd2bc, 0x1904, 0x2b5b, 0x080c, 0x2b5f, 0x0804, 0x2b5b,
-+ 0xd2cc, 0x1904, 0x2b5b, 0x080c, 0x5a90, 0x1120, 0x709f, 0xffff,
-+ 0x0804, 0x2b5b, 0xd294, 0x0120, 0x709f, 0xffff, 0x0804, 0x2b5b,
-+ 0x2001, 0xb415, 0x203c, 0x7288, 0xd284, 0x0904, 0x2afd, 0xd28c,
-+ 0x1904, 0x2afd, 0x0036, 0x739c, 0xa38e, 0xffff, 0x1110, 0x2019,
-+ 0x0001, 0x8314, 0xa2e0, 0xbbc0, 0x2c04, 0xa38c, 0x0001, 0x0120,
-+ 0xa084, 0xff00, 0x8007, 0x0010, 0xa084, 0x00ff, 0xa70e, 0x0560,
-+ 0xa08e, 0x0000, 0x0548, 0xa08e, 0x00ff, 0x1150, 0x7230, 0xd284,
-+ 0x1538, 0x7288, 0xc28d, 0x728a, 0x709f, 0xffff, 0x003e, 0x0428,
-+ 0x2009, 0x0000, 0x080c, 0x27e3, 0x080c, 0x4f0e, 0x11b8, 0x6004,
-+ 0xa084, 0x00ff, 0xa086, 0x0006, 0x1150, 0x7030, 0xd08c, 0x0118,
-+ 0x6000, 0xd0bc, 0x0120, 0x080c, 0x2b72, 0x0140, 0x0028, 0x080c,
-+ 0x2ca1, 0x080c, 0x2ba0, 0x0110, 0x8318, 0x0818, 0x739e, 0x0010,
-+ 0x709f, 0xffff, 0x003e, 0x0804, 0x2b5b, 0xa780, 0x2d88, 0x203d,
-+ 0xa7bc, 0xff00, 0x873f, 0x2041, 0x007e, 0x709c, 0xa096, 0xffff,
-+ 0x1120, 0x2009, 0x0000, 0x28a8, 0x0050, 0xa812, 0x0220, 0x2008,
-+ 0xa802, 0x20a8, 0x0020, 0x709f, 0xffff, 0x0804, 0x2b5b, 0x2700,
-+ 0x0156, 0x0016, 0xa106, 0x05a0, 0xc484, 0x080c, 0x4f6a, 0x0120,
-+ 0x080c, 0x4f0e, 0x15a8, 0x0008, 0xc485, 0x6004, 0xa084, 0x00ff,
-+ 0xa086, 0x0006, 0x1130, 0x7030, 0xd08c, 0x01e8, 0x6000, 0xd0bc,
-+ 0x11d0, 0x7288, 0xd28c, 0x0188, 0x6004, 0xa084, 0x00ff, 0xa082,
-+ 0x0006, 0x02b0, 0xd484, 0x1118, 0x080c, 0x4f2d, 0x0028, 0x080c,
-+ 0x2d2e, 0x0170, 0x080c, 0x2d5b, 0x0058, 0x080c, 0x2ca1, 0x080c,
-+ 0x2ba0, 0x0170, 0x0028, 0x080c, 0x2d2e, 0x0110, 0x0419, 0x0140,
-+ 0x001e, 0x8108, 0x015e, 0x1f04, 0x2b17, 0x709f, 0xffff, 0x0018,
-+ 0x001e, 0x015e, 0x719e, 0x004e, 0x002e, 0x00ce, 0x0005, 0x00c6,
-+ 0x0016, 0x709f, 0x0001, 0x2009, 0x007e, 0x080c, 0x4f0e, 0x1138,
-+ 0x080c, 0x2ca1, 0x04a9, 0x0118, 0x70d4, 0xc0bd, 0x70d6, 0x001e,
-+ 0x00ce, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6, 0x2c68, 0x2001,
-+ 0xb457, 0x2004, 0xa084, 0x00ff, 0x6842, 0x080c, 0x9e67, 0x01d8,
-+ 0x2d00, 0x601a, 0x080c, 0x9fb8, 0x601f, 0x0001, 0x2001, 0x0000,
-+ 0x080c, 0x4eac, 0x2001, 0x0000, 0x080c, 0x4ebe, 0x0126, 0x2091,
-+ 0x8000, 0x7098, 0x8000, 0x709a, 0x012e, 0x2009, 0x0004, 0x080c,
-+ 0x85ef, 0xa085, 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005,
-+ 0x0016, 0x0076, 0x00d6, 0x00c6, 0x2c68, 0x2001, 0xb457, 0x2004,
-+ 0xa084, 0x00ff, 0x6842, 0x080c, 0x9e67, 0x0550, 0x2d00, 0x601a,
-+ 0x6800, 0xc0c4, 0x6802, 0x68a0, 0xa086, 0x007e, 0x0140, 0x6804,
-+ 0xa084, 0x00ff, 0xa086, 0x0006, 0x1110, 0x080c, 0x2c60, 0x080c,
-+ 0x9fb8, 0x601f, 0x0001, 0x2001, 0x0000, 0x080c, 0x4eac, 0x2001,
-+ 0x0002, 0x080c, 0x4ebe, 0x0126, 0x2091, 0x8000, 0x7098, 0x8000,
-+ 0x709a, 0x012e, 0x2009, 0x0002, 0x080c, 0x85ef, 0xa085, 0x0001,
-+ 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005, 0x00c6, 0x0026, 0x2009,
-+ 0x0080, 0x080c, 0x4f0e, 0x1120, 0x0031, 0x0110, 0x70db, 0xffff,
-+ 0x002e, 0x00ce, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6, 0x2c68,
-+ 0x080c, 0x856a, 0x01d8, 0x2d00, 0x601a, 0x080c, 0x9fb8, 0x601f,
-+ 0x0001, 0x2001, 0x0000, 0x080c, 0x4eac, 0x2001, 0x0002, 0x080c,
-+ 0x4ebe, 0x0126, 0x2091, 0x8000, 0x70dc, 0x8000, 0x70de, 0x012e,
-+ 0x2009, 0x0002, 0x080c, 0x85ef, 0xa085, 0x0001, 0x00ce, 0x00de,
-+ 0x007e, 0x001e, 0x0005, 0x00c6, 0x00d6, 0x0126, 0x2091, 0x8000,
-+ 0x2009, 0x007f, 0x080c, 0x4f0e, 0x1190, 0x2c68, 0x080c, 0x856a,
-+ 0x0170, 0x2d00, 0x601a, 0x6312, 0x601f, 0x0001, 0x620a, 0x080c,
-+ 0x9fb8, 0x2009, 0x0022, 0x080c, 0x85ef, 0xa085, 0x0001, 0x012e,
-+ 0x00de, 0x00ce, 0x0005, 0x00e6, 0x00c6, 0x0066, 0x0036, 0x0026,
-+ 0x080c, 0x6dc6, 0x080c, 0x6d69, 0x080c, 0x900f, 0x2130, 0x81ff,
-+ 0x0128, 0x20a9, 0x007e, 0x2009, 0x0000, 0x0020, 0x20a9, 0x007f,
-+ 0x2009, 0x0000, 0x0016, 0x080c, 0x4f6a, 0x1120, 0x080c, 0x516b,
-+ 0x080c, 0x4bc5, 0x001e, 0x8108, 0x1f04, 0x2c4a, 0x86ff, 0x1110,
-+ 0x080c, 0x11f0, 0x002e, 0x003e, 0x006e, 0x00ce, 0x00ee, 0x0005,
-+ 0x00e6, 0x00c6, 0x0036, 0x0026, 0x0016, 0x6218, 0x2270, 0x72a0,
-+ 0x0026, 0x2019, 0x0029, 0x080c, 0x6dba, 0x0076, 0x2039, 0x0000,
-+ 0x080c, 0x6cc7, 0x2c08, 0x080c, 0xae05, 0x007e, 0x001e, 0x2e60,
-+ 0x080c, 0x516b, 0x6210, 0x6314, 0x080c, 0x4bc5, 0x6212, 0x6316,
-+ 0x001e, 0x002e, 0x003e, 0x00ce, 0x00ee, 0x0005, 0x00e6, 0x0006,
-+ 0x6018, 0xa080, 0x0028, 0x2004, 0xa086, 0x0080, 0x0150, 0x2071,
-+ 0xb400, 0x7098, 0xa005, 0x0110, 0x8001, 0x709a, 0x000e, 0x00ee,
-+ 0x0005, 0x2071, 0xb400, 0x70dc, 0xa005, 0x0dc0, 0x8001, 0x70de,
-+ 0x0ca8, 0x6000, 0xc08c, 0x6002, 0x0005, 0x00f6, 0x00e6, 0x00c6,
-+ 0x0036, 0x0026, 0x0016, 0x0156, 0x2178, 0x81ff, 0x1118, 0x20a9,
-+ 0x0001, 0x0098, 0x2001, 0xb453, 0x2004, 0xd0c4, 0x0150, 0xd0a4,
-+ 0x0140, 0xa006, 0x0046, 0x2020, 0x2009, 0x002d, 0x080c, 0xb06b,
-+ 0x004e, 0x20a9, 0x00ff, 0x2011, 0x0000, 0x0026, 0xa28e, 0x007e,
-+ 0x0904, 0x2d0d, 0xa28e, 0x007f, 0x0904, 0x2d0d, 0xa28e, 0x0080,
-+ 0x05e0, 0xa288, 0xb535, 0x210c, 0x81ff, 0x05b8, 0x8fff, 0x1148,
-+ 0x2001, 0xb6be, 0x0006, 0x2003, 0x0001, 0x04d9, 0x000e, 0x2003,
-+ 0x0000, 0x00c6, 0x2160, 0x2001, 0x0001, 0x080c, 0x52d4, 0x00ce,
-+ 0x2019, 0x0029, 0x080c, 0x6dba, 0x0076, 0x2039, 0x0000, 0x080c,
-+ 0x6cc7, 0x00c6, 0x0026, 0x2160, 0x6204, 0xa294, 0x00ff, 0xa286,
-+ 0x0006, 0x1118, 0x6007, 0x0404, 0x0028, 0x2001, 0x0004, 0x8007,
-+ 0xa215, 0x6206, 0x002e, 0x00ce, 0x0016, 0x2c08, 0x080c, 0xae05,
-+ 0x001e, 0x007e, 0x2160, 0x080c, 0x516b, 0x002e, 0x8210, 0x1f04,
-+ 0x2cc5, 0x015e, 0x001e, 0x002e, 0x003e, 0x00ce, 0x00ee, 0x00fe,
-+ 0x0005, 0x0046, 0x0026, 0x0016, 0x2001, 0xb453, 0x2004, 0xd0c4,
-+ 0x0148, 0xd0a4, 0x0138, 0xa006, 0x2220, 0x8427, 0x2009, 0x0029,
-+ 0x080c, 0xb06b, 0x001e, 0x002e, 0x004e, 0x0005, 0x0016, 0x0026,
-+ 0x0036, 0x00c6, 0x7288, 0x82ff, 0x01f8, 0x2011, 0xb453, 0x2214,
-+ 0xd2ac, 0x11d0, 0x2100, 0x080c, 0x27f7, 0x81ff, 0x01b8, 0x2019,
-+ 0x0001, 0x8314, 0xa2e0, 0xbbc0, 0x2c04, 0xd384, 0x0120, 0xa084,
-+ 0xff00, 0x8007, 0x0010, 0xa084, 0x00ff, 0xa116, 0x0138, 0xa096,
-+ 0x00ff, 0x0110, 0x8318, 0x0c68, 0xa085, 0x0001, 0x00ce, 0x003e,
-+ 0x002e, 0x001e, 0x0005, 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000,
-+ 0x0016, 0x0026, 0x0036, 0x2110, 0x0026, 0x2019, 0x0029, 0x080c,
-+ 0x823c, 0x002e, 0x080c, 0xb310, 0x003e, 0x002e, 0x001e, 0xa180,
-+ 0xb535, 0x2004, 0xa065, 0x0158, 0x0016, 0x00c6, 0x2061, 0xb7f4,
-+ 0x001e, 0x611a, 0x080c, 0x2c60, 0x001e, 0x080c, 0x4f2d, 0x012e,
-+ 0x00ce, 0x001e, 0x0005, 0x2001, 0xb435, 0x2004, 0xd0cc, 0x0005,
-+ 0x7eef, 0x7de8, 0x7ce4, 0x80e2, 0x7be1, 0x80e0, 0x80dc, 0x80da,
-+ 0x7ad9, 0x80d6, 0x80d5, 0x80d4, 0x80d3, 0x80d2, 0x80d1, 0x79ce,
-+ 0x78cd, 0x80cc, 0x80cb, 0x80ca, 0x80c9, 0x80c7, 0x80c6, 0x77c5,
-+ 0x76c3, 0x80bc, 0x80ba, 0x75b9, 0x80b6, 0x74b5, 0x73b4, 0x72b3,
-+ 0x80b2, 0x80b1, 0x80ae, 0x71ad, 0x80ac, 0x70ab, 0x6faa, 0x6ea9,
-+ 0x80a7, 0x6da6, 0x6ca5, 0x6ba3, 0x6a9f, 0x699e, 0x689d, 0x809b,
-+ 0x8098, 0x6797, 0x6690, 0x658f, 0x6488, 0x6384, 0x6282, 0x8081,
-+ 0x8080, 0x617c, 0x607a, 0x8079, 0x5f76, 0x8075, 0x8074, 0x8073,
-+ 0x8072, 0x8071, 0x806e, 0x5e6d, 0x806c, 0x5d6b, 0x5c6a, 0x5b69,
-+ 0x8067, 0x5a66, 0x5965, 0x5863, 0x575c, 0x565a, 0x5559, 0x8056,
-+ 0x8055, 0x5454, 0x5353, 0x5252, 0x5151, 0x504e, 0x4f4d, 0x804c,
-+ 0x804b, 0x4e4a, 0x4d49, 0x8047, 0x4c46, 0x8045, 0x8043, 0x803c,
-+ 0x803a, 0x8039, 0x8036, 0x4b35, 0x8034, 0x4a33, 0x4932, 0x4831,
-+ 0x802e, 0x472d, 0x462c, 0x452b, 0x442a, 0x4329, 0x4227, 0x8026,
-+ 0x8025, 0x4123, 0x401f, 0x3f1e, 0x3e1d, 0x3d1b, 0x3c18, 0x8017,
-+ 0x8010, 0x3b0f, 0x3a08, 0x8004, 0x3902, 0x8001, 0x8000, 0x8000,
-+ 0x3800, 0x3700, 0x3600, 0x8000, 0x3500, 0x8000, 0x8000, 0x8000,
-+ 0x3400, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x3300,
-+ 0x3200, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x3100,
-+ 0x3000, 0x8000, 0x8000, 0x2f00, 0x8000, 0x2e00, 0x2d00, 0x2c00,
-+ 0x8000, 0x8000, 0x8000, 0x2b00, 0x8000, 0x2a00, 0x2900, 0x2800,
-+ 0x8000, 0x2700, 0x2600, 0x2500, 0x2400, 0x2300, 0x2200, 0x8000,
-+ 0x8000, 0x2100, 0x2000, 0x1f00, 0x1e00, 0x1d00, 0x1c00, 0x8000,
-+ 0x8000, 0x1b00, 0x1a00, 0x8000, 0x1900, 0x8000, 0x8000, 0x8000,
-+ 0x8000, 0x8000, 0x8000, 0x1800, 0x8000, 0x1700, 0x1600, 0x1500,
-+ 0x8000, 0x1400, 0x1300, 0x1200, 0x1100, 0x1000, 0x0f00, 0x8000,
-+ 0x8000, 0x0e00, 0x0d00, 0x0c00, 0x0b00, 0x0a00, 0x0900, 0x8000,
-+ 0x8000, 0x0800, 0x0700, 0x8000, 0x0600, 0x8000, 0x8000, 0x8000,
-+ 0x0500, 0x0400, 0x0300, 0x8000, 0x0200, 0x8000, 0x8000, 0x8000,
-+ 0x0100, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x0000,
-+ 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
-+ 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
-+ 0x2071, 0xb482, 0x7003, 0x0002, 0xa006, 0x7012, 0x7016, 0x703a,
-+ 0x703e, 0x7033, 0xb492, 0x7037, 0xb492, 0x7007, 0x0001, 0x2061,
-+ 0xb4d2, 0x6003, 0x0002, 0x0005, 0x1004, 0x2eae, 0x0e04, 0x2eae,
-+ 0x2071, 0xb482, 0x2b78, 0x7818, 0xd084, 0x1140, 0x2a60, 0x7820,
-+ 0xa08e, 0x0069, 0x1904, 0x2f93, 0x0804, 0x2f2c, 0x0005, 0x2071,
-+ 0xb482, 0x7004, 0x0002, 0x2eb7, 0x2eb8, 0x2ec1, 0x2ed2, 0x0005,
-+ 0x1004, 0x2ec0, 0x0e04, 0x2ec0, 0x2b78, 0x7818, 0xd084, 0x01e8,
-+ 0x0005, 0x2b78, 0x2061, 0xb4d2, 0x6008, 0xa08e, 0x0100, 0x0128,
-+ 0xa086, 0x0200, 0x0904, 0x2f8d, 0x0005, 0x7014, 0x2068, 0x2a60,
-+ 0x7018, 0x0807, 0x7010, 0x2068, 0x6834, 0xa086, 0x0103, 0x0108,
-+ 0x0005, 0x2a60, 0x2b78, 0x7018, 0x0807, 0x2a60, 0x7820, 0xa08a,
-+ 0x0040, 0x1210, 0x61c4, 0x0042, 0x2100, 0xa08a, 0x003f, 0x1a04,
-+ 0x2f8a, 0x61c4, 0x0804, 0x2f2c, 0x2f6e, 0x2f99, 0x2fa1, 0x2fa5,
-+ 0x2fad, 0x2fb3, 0x2fb7, 0x2fc3, 0x2fc6, 0x2fd0, 0x2fd3, 0x2f8a,
-+ 0x2f8a, 0x2f8a, 0x2fd6, 0x2f8a, 0x2fe5, 0x2ffc, 0x3013, 0x308d,
-+ 0x3092, 0x30bb, 0x310c, 0x311d, 0x313c, 0x3174, 0x317e, 0x318b,
-+ 0x319e, 0x31bf, 0x31c8, 0x31fe, 0x3204, 0x2f8a, 0x322d, 0x2f8a,
-+ 0x2f8a, 0x2f8a, 0x2f8a, 0x2f8a, 0x3234, 0x323e, 0x2f8a, 0x2f8a,
-+ 0x2f8a, 0x2f8a, 0x2f8a, 0x2f8a, 0x2f8a, 0x2f8a, 0x3246, 0x2f8a,
-+ 0x2f8a, 0x2f8a, 0x2f8a, 0x2f8a, 0x3258, 0x3262, 0x2f8a, 0x2f8a,
-+ 0x2f8a, 0x2f8a, 0x2f8a, 0x2f8a, 0x0002, 0x328c, 0x32e0, 0x333b,
-+ 0x334e, 0x2f8a, 0x337f, 0x37b2, 0x41f1, 0x2f8a, 0x2f8a, 0x2f8a,
-+ 0x2f8a, 0x2f8a, 0x2f8a, 0x2f8a, 0x2f8a, 0x2fd0, 0x2fd3, 0x37b4,
-+ 0x2f8a, 0x37c1, 0x428a, 0x42e5, 0x4349, 0x2f8a, 0x43ac, 0x43d2,
-+ 0x43f1, 0x4423, 0x2f8a, 0x2f8a, 0x2f8a, 0x37c5, 0x396a, 0x3984,
-+ 0x39a2, 0x3a03, 0x3a63, 0x3a6e, 0x3aa6, 0x3ab5, 0x3ac4, 0x3ac7,
-+ 0x3aea, 0x3b34, 0x3baa, 0x3bb7, 0x3cb8, 0x3de1, 0x3e0a, 0x3f08,
-+ 0x3f2a, 0x3f36, 0x3f6f, 0x4033, 0x2f8a, 0x2f8a, 0x2f8a, 0x2f8a,
-+ 0x409b, 0x40b6, 0x4128, 0x41da, 0x713c, 0x0000, 0x2021, 0x4000,
-+ 0x080c, 0x3e67, 0x0126, 0x2091, 0x8000, 0x0e04, 0x2f7a, 0x7818,
-+ 0xd084, 0x0110, 0x012e, 0x0cb0, 0x7c22, 0x7926, 0x7a2a, 0x7b2e,
-+ 0x781b, 0x0001, 0x2091, 0x4080, 0x7007, 0x0001, 0x2091, 0x5000,
-+ 0x012e, 0x0005, 0x2021, 0x4001, 0x0c18, 0x2021, 0x4002, 0x0c00,
-+ 0x2021, 0x4003, 0x08e8, 0x2021, 0x4005, 0x08d0, 0x2021, 0x4006,
-+ 0x08b8, 0xa02e, 0x2520, 0x7b28, 0x7a2c, 0x7824, 0x7930, 0x0804,
-+ 0x3e74, 0x7823, 0x0004, 0x7824, 0x0807, 0xa02e, 0x2520, 0x7b28,
-+ 0x7a2c, 0x7824, 0x7930, 0x0804, 0x3e77, 0x7924, 0x7828, 0x2114,
-+ 0x200a, 0x0804, 0x2f6e, 0x7924, 0x2114, 0x0804, 0x2f6e, 0x2099,
-+ 0x0009, 0x20a1, 0x0009, 0x20a9, 0x0007, 0x53a3, 0x7924, 0x7a28,
-+ 0x7b2c, 0x0804, 0x2f6e, 0x7824, 0x2060, 0x0090, 0x2009, 0x0002,
-+ 0x2011, 0x0002, 0x2019, 0x0003, 0x783b, 0x0017, 0x0804, 0x2f6e,
-+ 0x7d38, 0x7c3c, 0x0840, 0x7d38, 0x7c3c, 0x0888, 0x2061, 0x1000,
-+ 0xe10c, 0xa006, 0x2c15, 0xa200, 0x8c60, 0x8109, 0x1dd8, 0x2010,
-+ 0xa005, 0x0904, 0x2f6e, 0x0804, 0x2f90, 0x2069, 0xb452, 0x7824,
-+ 0x7930, 0xa11a, 0x1a04, 0x2f96, 0x8019, 0x0904, 0x2f96, 0x684a,
-+ 0x6942, 0x782c, 0x6852, 0x7828, 0x6856, 0xa006, 0x685a, 0x685e,
-+ 0x080c, 0x5d66, 0x0804, 0x2f6e, 0x2069, 0xb452, 0x7824, 0x7934,
-+ 0xa11a, 0x1a04, 0x2f96, 0x8019, 0x0904, 0x2f96, 0x684e, 0x6946,
-+ 0x782c, 0x6862, 0x7828, 0x6866, 0xa006, 0x686a, 0x686e, 0x080c,
-+ 0x5396, 0x0804, 0x2f6e, 0xa02e, 0x2520, 0x81ff, 0x1904, 0x2f93,
-+ 0x7924, 0x7b28, 0x7a2c, 0x20a9, 0x0005, 0x20a1, 0xb489, 0x41a1,
-+ 0x080c, 0x3e33, 0x0904, 0x2f93, 0x2009, 0x0020, 0x080c, 0x3e74,
-+ 0x701b, 0x302b, 0x0005, 0x6834, 0x2008, 0xa084, 0x00ff, 0xa096,
-+ 0x0011, 0x0138, 0xa096, 0x0019, 0x0120, 0xa096, 0x0015, 0x1904,
-+ 0x2f93, 0x810f, 0xa18c, 0x00ff, 0x0904, 0x2f93, 0x710e, 0x700c,
-+ 0x8001, 0x0528, 0x700e, 0x080c, 0x3e33, 0x0904, 0x2f93, 0x2009,
-+ 0x0020, 0x2061, 0xb4d2, 0x6224, 0x6328, 0x642c, 0x6530, 0xa290,
-+ 0x0040, 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x080c,
-+ 0x3e74, 0x701b, 0x305c, 0x0005, 0x6834, 0xa084, 0x00ff, 0xa096,
-+ 0x0002, 0x0120, 0xa096, 0x000a, 0x1904, 0x2f93, 0x08c0, 0x7010,
-+ 0x2068, 0x6838, 0xc0fd, 0x683a, 0x080c, 0x4e0a, 0x1128, 0x7007,
-+ 0x0003, 0x701b, 0x3076, 0x0005, 0x080c, 0x549c, 0x0126, 0x2091,
-+ 0x8000, 0x20a9, 0x0005, 0x2099, 0xb489, 0x530a, 0x2100, 0xa210,
-+ 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0xad80, 0x000d,
-+ 0x2009, 0x0020, 0x012e, 0x0804, 0x3e77, 0x61ac, 0x7824, 0x60ae,
-+ 0x0804, 0x2f6e, 0x2091, 0x8000, 0x7823, 0x4000, 0x7827, 0x4953,
-+ 0x782b, 0x5020, 0x782f, 0x2020, 0x2009, 0x017f, 0x2104, 0x7832,
-+ 0x3f00, 0x7836, 0x2061, 0x0100, 0x6200, 0x2061, 0x0200, 0x603c,
-+ 0x8007, 0xa205, 0x783a, 0x2009, 0x04fd, 0x2104, 0x783e, 0x781b,
-+ 0x0001, 0x2091, 0x5000, 0x2091, 0x4080, 0x2071, 0x0010, 0x20c1,
-+ 0x00f0, 0x0804, 0x0427, 0x81ff, 0x1904, 0x2f93, 0x7924, 0x810f,
-+ 0xa18c, 0x00ff, 0x080c, 0x4f6a, 0x1904, 0x2f96, 0x7e38, 0xa684,
-+ 0x3fff, 0xa082, 0x4000, 0x0210, 0x0804, 0x2f96, 0x7c28, 0x7d2c,
-+ 0x080c, 0x5132, 0xd28c, 0x1118, 0x080c, 0x50db, 0x0010, 0x080c,
-+ 0x510b, 0x1518, 0x2061, 0xbc00, 0x0126, 0x2091, 0x8000, 0x6000,
-+ 0xa086, 0x0000, 0x0148, 0x6010, 0xa06d, 0x0130, 0x683c, 0xa406,
-+ 0x1118, 0x6840, 0xa506, 0x0150, 0x012e, 0xace0, 0x0018, 0x2001,
-+ 0xb417, 0x2004, 0xac02, 0x1a04, 0x2f93, 0x0c30, 0x080c, 0x98c3,
-+ 0x012e, 0x0904, 0x2f93, 0x0804, 0x2f6e, 0xa00e, 0x2001, 0x0005,
-+ 0x080c, 0x549c, 0x0126, 0x2091, 0x8000, 0x080c, 0x9e63, 0x080c,
-+ 0x53c9, 0x012e, 0x0804, 0x2f6e, 0x81ff, 0x1904, 0x2f93, 0x080c,
-+ 0x3e48, 0x0904, 0x2f96, 0x080c, 0x5030, 0x0904, 0x2f93, 0x080c,
-+ 0x513e, 0x0904, 0x2f93, 0x0804, 0x2f6e, 0x81ff, 0x1904, 0x2f93,
-+ 0x080c, 0x3e58, 0x0904, 0x2f96, 0x080c, 0x51aa, 0x0904, 0x2f93,
-+ 0x2019, 0x0005, 0x7924, 0x080c, 0x5159, 0x0904, 0x2f93, 0x7828,
-+ 0xa08a, 0x1000, 0x1a04, 0x2f96, 0x8003, 0x800b, 0x810b, 0xa108,
-+ 0x080c, 0x696d, 0x0804, 0x2f6e, 0x0126, 0x2091, 0x8000, 0x81ff,
-+ 0x0118, 0x2009, 0x0001, 0x0450, 0x2029, 0x00ff, 0x6450, 0x2400,
-+ 0xa506, 0x01f8, 0x2508, 0x080c, 0x4f6a, 0x11d8, 0x080c, 0x51aa,
-+ 0x1128, 0x2009, 0x0002, 0x62b4, 0x2518, 0x00c0, 0x2019, 0x0004,
-+ 0xa00e, 0x080c, 0x5159, 0x1118, 0x2009, 0x0006, 0x0078, 0x7824,
-+ 0xa08a, 0x1000, 0x1270, 0x8003, 0x800b, 0x810b, 0xa108, 0x080c,
-+ 0x696d, 0x8529, 0x1ae0, 0x012e, 0x0804, 0x2f6e, 0x012e, 0x0804,
-+ 0x2f93, 0x012e, 0x0804, 0x2f96, 0x080c, 0x3e48, 0x0904, 0x2f96,
-+ 0x080c, 0x5096, 0x080c, 0x5132, 0x0804, 0x2f6e, 0x81ff, 0x1904,
-+ 0x2f93, 0x080c, 0x3e48, 0x0904, 0x2f96, 0x080c, 0x5087, 0x080c,
-+ 0x5132, 0x0804, 0x2f6e, 0x81ff, 0x1904, 0x2f93, 0x080c, 0x3e48,
-+ 0x0904, 0x2f96, 0x080c, 0x510d, 0x0904, 0x2f93, 0x080c, 0x4e4e,
-+ 0x080c, 0x50d4, 0x080c, 0x5132, 0x0804, 0x2f6e, 0x080c, 0x3e48,
-+ 0x0904, 0x2f96, 0x080c, 0x5030, 0x0904, 0x2f93, 0x62a0, 0x2019,
-+ 0x0005, 0x00c6, 0x080c, 0x516b, 0x2061, 0x0000, 0x080c, 0x6dba,
-+ 0x0076, 0x2039, 0x0000, 0x080c, 0x6cc7, 0x2009, 0x0000, 0x080c,
-+ 0xae05, 0x007e, 0x00ce, 0x080c, 0x5132, 0x0804, 0x2f6e, 0x080c,
-+ 0x3e48, 0x0904, 0x2f96, 0x080c, 0x5132, 0x2208, 0x0804, 0x2f6e,
-+ 0x0156, 0x00d6, 0x00e6, 0x2069, 0xb514, 0x6810, 0x6914, 0xa10a,
-+ 0x1210, 0x2009, 0x0000, 0x6816, 0x2011, 0x0000, 0x2019, 0x0000,
-+ 0x20a9, 0x007e, 0x2069, 0xb535, 0x2d04, 0xa075, 0x0130, 0x704c,
-+ 0x0071, 0xa210, 0x7080, 0x0059, 0xa318, 0x8d68, 0x1f04, 0x31dc,
-+ 0x2300, 0xa218, 0x00ee, 0x00de, 0x015e, 0x0804, 0x2f6e, 0x00f6,
-+ 0x0016, 0xa07d, 0x0140, 0x2001, 0x0000, 0x8000, 0x2f0c, 0x81ff,
-+ 0x0110, 0x2178, 0x0cd0, 0x001e, 0x00fe, 0x0005, 0x2069, 0xb514,
-+ 0x6910, 0x62b0, 0x0804, 0x2f6e, 0x81ff, 0x1904, 0x2f93, 0x6150,
-+ 0xa190, 0x2d88, 0x2215, 0xa294, 0x00ff, 0x6370, 0x83ff, 0x0108,
-+ 0x6274, 0x67d4, 0xd79c, 0x0118, 0x2031, 0x0001, 0x0090, 0xd7ac,
-+ 0x0118, 0x2031, 0x0003, 0x0068, 0xd7a4, 0x0118, 0x2031, 0x0002,
-+ 0x0040, 0x080c, 0x5a90, 0x1118, 0x2031, 0x0004, 0x0010, 0x2031,
-+ 0x0000, 0x7e3a, 0x7f3e, 0x0804, 0x2f6e, 0x6140, 0x6244, 0x2019,
-+ 0xb6b6, 0x231c, 0x0804, 0x2f6e, 0x0126, 0x2091, 0x8000, 0x6134,
-+ 0xa006, 0x2010, 0x6338, 0x012e, 0x0804, 0x2f6e, 0x080c, 0x3e58,
-+ 0x0904, 0x2f96, 0x6244, 0x6338, 0x0804, 0x2f6e, 0x6140, 0x6244,
-+ 0x7824, 0x6042, 0x7b28, 0x6346, 0x2069, 0xb452, 0x831f, 0xa305,
-+ 0x6816, 0x782c, 0x2069, 0xb6b6, 0x2d1c, 0x206a, 0x0804, 0x2f6e,
-+ 0x0126, 0x2091, 0x8000, 0x7824, 0x6036, 0x782c, 0x603a, 0x012e,
-+ 0x0804, 0x2f6e, 0x7838, 0xa005, 0x01a8, 0x7828, 0xa025, 0x0904,
-+ 0x2f96, 0x782c, 0xa02d, 0x0904, 0x2f96, 0xa00e, 0x080c, 0x4f6a,
-+ 0x1120, 0x6244, 0x6338, 0x6446, 0x653a, 0xa186, 0x00ff, 0x0190,
-+ 0x8108, 0x0ca0, 0x080c, 0x3e58, 0x0904, 0x2f96, 0x7828, 0xa00d,
-+ 0x0904, 0x2f96, 0x782c, 0xa005, 0x0904, 0x2f96, 0x6244, 0x6146,
-+ 0x6338, 0x603a, 0x0804, 0x2f6e, 0x2001, 0xb400, 0x2004, 0xa086,
-+ 0x0003, 0x1904, 0x2f93, 0x00c6, 0x2061, 0x0100, 0x7924, 0x810f,
-+ 0xa18c, 0x00ff, 0xa196, 0x00ff, 0x1130, 0x2001, 0xb415, 0x2004,
-+ 0xa085, 0xff00, 0x0078, 0xa182, 0x007f, 0x16a0, 0xa188, 0x2d88,
-+ 0x210d, 0xa18c, 0x00ff, 0x2001, 0xb415, 0x2004, 0xa116, 0x0550,
-+ 0x810f, 0xa105, 0x0126, 0x2091, 0x8000, 0x0006, 0x080c, 0x856a,
-+ 0x000e, 0x01e0, 0x601a, 0x600b, 0xbc09, 0x601f, 0x0001, 0x080c,
-+ 0x3e33, 0x01d8, 0x6837, 0x0000, 0x7007, 0x0003, 0x6833, 0x0000,
-+ 0x6838, 0xc0fd, 0x683a, 0x701b, 0x3334, 0x2d00, 0x6012, 0x2009,
-+ 0x0032, 0x080c, 0x85ef, 0x012e, 0x00ce, 0x0005, 0x012e, 0x00ce,
-+ 0x0804, 0x2f93, 0x00ce, 0x0804, 0x2f96, 0x080c, 0x85c0, 0x0cb0,
-+ 0x2001, 0xb400, 0x2004, 0xa086, 0x0003, 0x1904, 0x2f93, 0x00c6,
-+ 0x2061, 0x0100, 0x7924, 0x810f, 0xa18c, 0x00ff, 0xa196, 0x00ff,
-+ 0x1130, 0x2001, 0xb415, 0x2004, 0xa085, 0xff00, 0x0078, 0xa182,
-+ 0x007f, 0x16a0, 0xa188, 0x2d88, 0x210d, 0xa18c, 0x00ff, 0x2001,
-+ 0xb415, 0x2004, 0xa116, 0x0550, 0x810f, 0xa105, 0x0126, 0x2091,
-+ 0x8000, 0x0006, 0x080c, 0x856a, 0x000e, 0x01e0, 0x601a, 0x600b,
-+ 0xbc05, 0x601f, 0x0001, 0x080c, 0x3e33, 0x01d8, 0x6837, 0x0000,
-+ 0x7007, 0x0003, 0x6833, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x701b,
-+ 0x3334, 0x2d00, 0x6012, 0x2009, 0x0032, 0x080c, 0x85ef, 0x012e,
-+ 0x00ce, 0x0005, 0x012e, 0x00ce, 0x0804, 0x2f93, 0x00ce, 0x0804,
-+ 0x2f96, 0x080c, 0x85c0, 0x0cb0, 0x6830, 0xa086, 0x0100, 0x0904,
-+ 0x2f93, 0x0804, 0x2f6e, 0x2061, 0xb774, 0x0126, 0x2091, 0x8000,
-+ 0x6000, 0xd084, 0x0140, 0x6104, 0x6208, 0x2019, 0xb412, 0x231c,
-+ 0x012e, 0x0804, 0x2f6e, 0x012e, 0x0804, 0x2f96, 0x81ff, 0x1904,
-+ 0x2f93, 0x080c, 0x5a90, 0x0904, 0x2f93, 0x0126, 0x2091, 0x8000,
-+ 0x6248, 0x6068, 0xa202, 0x0248, 0xa085, 0x0001, 0x080c, 0x282d,
-+ 0x080c, 0x45e6, 0x012e, 0x0804, 0x2f6e, 0x012e, 0x0804, 0x2f96,
-+ 0x0006, 0x0016, 0x00c6, 0x00e6, 0x2001, 0xb6bf, 0x2070, 0x2061,
-+ 0xb452, 0x6008, 0x2072, 0x2009, 0x0000, 0x2011, 0x1000, 0x080c,
-+ 0x6b05, 0x7206, 0x00ee, 0x00ce, 0x001e, 0x000e, 0x0005, 0x0126,
-+ 0x2091, 0x8000, 0x7824, 0xa084, 0x0007, 0x0002, 0x3391, 0x339a,
-+ 0x33a1, 0x338e, 0x338e, 0x338e, 0x338e, 0x338e, 0x012e, 0x0804,
-+ 0x2f96, 0x2009, 0x0114, 0x2104, 0xa085, 0x0800, 0x200a, 0x080c,
-+ 0x350c, 0x0070, 0x2009, 0x010b, 0x200b, 0x0010, 0x080c, 0x350c,
-+ 0x0038, 0x81ff, 0x0128, 0x012e, 0x2021, 0x400b, 0x0804, 0x2f70,
-+ 0x0086, 0x0096, 0x00a6, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6,
-+ 0x080c, 0x3368, 0x2009, 0x0101, 0x210c, 0x0016, 0x2001, 0x0138,
-+ 0x200c, 0x2003, 0x0001, 0x0016, 0x2001, 0x007a, 0x2034, 0x2001,
-+ 0x007b, 0x202c, 0xa006, 0x2048, 0x2050, 0x2058, 0x080c, 0x3757,
-+ 0x080c, 0x36bb, 0xa03e, 0x2720, 0x00f6, 0x00e6, 0x00c6, 0x2d60,
-+ 0x2071, 0xb74a, 0x2079, 0x0020, 0x00d6, 0x2069, 0x0000, 0x6824,
-+ 0xd0b4, 0x0140, 0x2001, 0x007d, 0x2004, 0x783e, 0x2001, 0x007c,
-+ 0x2004, 0x783a, 0x00de, 0x2011, 0x0001, 0x080c, 0x3667, 0x080c,
-+ 0x3667, 0x00ce, 0x00ee, 0x00fe, 0x080c, 0x35b2, 0x080c, 0x368f,
-+ 0x080c, 0x360c, 0x080c, 0x3571, 0x080c, 0x35a2, 0x00f6, 0x2079,
-+ 0x0100, 0x7824, 0xd094, 0x0530, 0x7814, 0xa084, 0x0184, 0xa085,
-+ 0x0010, 0x7816, 0x2079, 0x0140, 0x080c, 0x34ea, 0x1110, 0x00fe,
-+ 0x0430, 0x7804, 0xd0dc, 0x0dc0, 0x2079, 0x0100, 0x7827, 0x0086,
-+ 0x7814, 0xa084, 0x0184, 0xa085, 0x0032, 0x7816, 0x080c, 0x34ea,
-+ 0x1110, 0x00fe, 0x00a0, 0x7824, 0xd0bc, 0x0dc0, 0x7827, 0x0080,
-+ 0xa026, 0x7c16, 0x7824, 0xd0ac, 0x0130, 0x8b58, 0x080c, 0x34f4,
-+ 0x00fe, 0x0804, 0x34b4, 0x00fe, 0x080c, 0x34ea, 0x1150, 0x8948,
-+ 0x2001, 0x007a, 0x2602, 0x2001, 0x007b, 0x2502, 0x080c, 0x34f4,
-+ 0x0088, 0x87ff, 0x0140, 0x2001, 0x0201, 0x2004, 0xa005, 0x1904,
-+ 0x33ee, 0x8739, 0x0038, 0x2001, 0xb723, 0x2004, 0xa086, 0x0000,
-+ 0x1904, 0x33ee, 0x2001, 0x0033, 0x2003, 0x00f6, 0x8631, 0x1208,
-+ 0x8529, 0x2500, 0xa605, 0x0904, 0x34b4, 0x7824, 0xd0bc, 0x0128,
-+ 0x2900, 0xaa05, 0xab05, 0x1904, 0x34b4, 0x6033, 0x000d, 0x2001,
-+ 0x0030, 0x2003, 0x0004, 0x7824, 0xd0ac, 0x1148, 0x2001, 0xb723,
-+ 0x2003, 0x0003, 0x2001, 0x0030, 0x2003, 0x0009, 0x0040, 0x6027,
-+ 0x0001, 0x2001, 0x0075, 0x2004, 0xa005, 0x0108, 0x6026, 0x2c00,
-+ 0x601a, 0x20e1, 0x9040, 0x2d00, 0x681a, 0x6833, 0x000d, 0x7824,
-+ 0xd0a4, 0x1180, 0x6827, 0x0000, 0x00c6, 0x20a9, 0x0004, 0x2061,
-+ 0x0020, 0x6003, 0x0008, 0x2001, 0x0203, 0x2004, 0x1f04, 0x3489,
-+ 0x00ce, 0x0040, 0x6827, 0x0001, 0x2001, 0x0074, 0x2004, 0xa005,
-+ 0x0108, 0x6826, 0x00f6, 0x00c6, 0x2079, 0x0100, 0x2061, 0x0020,
-+ 0x7827, 0x0002, 0x2001, 0x0072, 0x2004, 0xa084, 0xfff8, 0x601a,
-+ 0x0006, 0x2001, 0x0073, 0x2004, 0x601e, 0x78c6, 0x000e, 0x78ca,
-+ 0x00ce, 0x00fe, 0x0804, 0x33cc, 0x2061, 0x0100, 0x6027, 0x0002,
-+ 0x001e, 0x61e2, 0x001e, 0x6106, 0x7824, 0xa084, 0x0003, 0xa086,
-+ 0x0002, 0x0188, 0x20e1, 0x9028, 0x6050, 0xa084, 0xf7ef, 0x6052,
-+ 0x602f, 0x0000, 0x602c, 0xc0ac, 0x602e, 0x604b, 0xf7f7, 0x6043,
-+ 0x0090, 0x6043, 0x0010, 0x2908, 0x2a10, 0x2b18, 0x2b00, 0xaa05,
-+ 0xa905, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e,
-+ 0x008e, 0x1118, 0x012e, 0x0804, 0x2f6e, 0x012e, 0x2021, 0x400c,
-+ 0x0804, 0x2f70, 0xa085, 0x0001, 0x1d04, 0x34f3, 0x2091, 0x6000,
-+ 0x8420, 0xa486, 0x0064, 0x0005, 0x2001, 0x0105, 0x2003, 0x0010,
-+ 0x2001, 0x0030, 0x2003, 0x0004, 0x2001, 0x0020, 0x2003, 0x0004,
-+ 0x2001, 0xb723, 0x2003, 0x0000, 0x2001, 0xb74a, 0x2003, 0x0000,
-+ 0x20e1, 0xf000, 0xa026, 0x0005, 0x00f6, 0x2079, 0x0100, 0x2001,
-+ 0xb415, 0x200c, 0x7932, 0x7936, 0x080c, 0x280d, 0x7850, 0xa084,
-+ 0x0980, 0xa085, 0x0030, 0x7852, 0x2019, 0x01f4, 0x8319, 0x1df0,
-+ 0xa084, 0x0980, 0x7852, 0x782c, 0xc0ad, 0x782e, 0x20a9, 0x0046,
-+ 0x1d04, 0x3528, 0x2091, 0x6000, 0x1f04, 0x3528, 0x7850, 0xa085,
-+ 0x0400, 0x7852, 0x2001, 0x0009, 0x2004, 0xa084, 0x0003, 0xa086,
-+ 0x0001, 0x1118, 0x782c, 0xc0ac, 0x782e, 0x784b, 0xf7f7, 0x7843,
-+ 0x0090, 0x7843, 0x0010, 0x20a9, 0x000e, 0xe000, 0x1f04, 0x3545,
-+ 0x7850, 0xa085, 0x1400, 0x7852, 0x2019, 0x61a8, 0x7854, 0xe000,
-+ 0xe000, 0xd08c, 0x1110, 0x8319, 0x1dc8, 0x7827, 0x0048, 0x7850,
-+ 0xa085, 0x0400, 0x7852, 0x7843, 0x0040, 0x2019, 0x01f4, 0xe000,
-+ 0xe000, 0x8319, 0x1de0, 0x2001, 0x0140, 0x2003, 0x0100, 0x7827,
-+ 0x0020, 0x7843, 0x0000, 0x2003, 0x0000, 0x7827, 0x0048, 0x00fe,
-+ 0x0005, 0x7824, 0xd0ac, 0x11c8, 0x00f6, 0x00e6, 0x2071, 0xb723,
-+ 0x2079, 0x0030, 0x2001, 0x0201, 0x2004, 0xa005, 0x0160, 0x7000,
-+ 0xa086, 0x0000, 0x1140, 0x0051, 0xd0bc, 0x0108, 0x8738, 0x7003,
-+ 0x0003, 0x7803, 0x0019, 0x00ee, 0x00fe, 0x0005, 0x780c, 0xa08c,
-+ 0x0070, 0x0178, 0x2009, 0x007a, 0x260a, 0x2009, 0x007b, 0x250a,
-+ 0xd0b4, 0x0108, 0x8a50, 0xd0ac, 0x0108, 0x8948, 0xd0a4, 0x0108,
-+ 0x8b58, 0x0005, 0x00f6, 0x2079, 0x0200, 0x781c, 0xd084, 0x0140,
-+ 0x20e1, 0x0007, 0x20e1, 0x2000, 0x2001, 0x020a, 0x2004, 0x0ca8,
-+ 0x00fe, 0x0005, 0x00e6, 0x2071, 0x0100, 0x2001, 0xb6c0, 0x2004,
-+ 0x70e2, 0x2009, 0xb415, 0x210c, 0x716e, 0x7063, 0x0100, 0x7166,
-+ 0x719e, 0x706b, 0x0000, 0x7073, 0x0809, 0x7077, 0x0008, 0x7078,
-+ 0xa080, 0x0100, 0x707a, 0x7080, 0x8000, 0x7082, 0x7087, 0xaaaa,
-+ 0xa006, 0x708a, 0x708e, 0x707e, 0x70d6, 0x70ab, 0x0036, 0x70af,
-+ 0x95d5, 0x7027, 0x0080, 0x7014, 0xa084, 0x0184, 0xa085, 0x0032,
-+ 0x7016, 0x080c, 0x368f, 0x080c, 0x34ea, 0x1110, 0x8421, 0x0028,
-+ 0x7024, 0xd0bc, 0x0db0, 0x7027, 0x0080, 0x00f6, 0x00e6, 0x2071,
-+ 0xb723, 0x2079, 0x0030, 0x00d6, 0x2069, 0x0000, 0x6824, 0xd0b4,
-+ 0x0120, 0x683c, 0x783e, 0x6838, 0x783a, 0x00de, 0x2011, 0x0011,
-+ 0x080c, 0x3667, 0x2011, 0x0001, 0x080c, 0x3667, 0x00ee, 0x00fe,
-+ 0x7017, 0x0000, 0x00ee, 0x0005, 0x00f6, 0x00e6, 0x2071, 0xb723,
-+ 0x2079, 0x0030, 0x7904, 0xd1fc, 0x0904, 0x3664, 0x7803, 0x0002,
-+ 0xa026, 0xd19c, 0x1904, 0x3660, 0x7000, 0x0002, 0x3664, 0x3622,
-+ 0x3646, 0x3660, 0xd1bc, 0x1150, 0xd1dc, 0x1150, 0x8001, 0x7002,
-+ 0x2011, 0x0001, 0x04e1, 0x05c0, 0x04d1, 0x04b0, 0x780f, 0x0000,
-+ 0x7820, 0x7924, 0x7803, 0x0004, 0x7822, 0x7926, 0x2001, 0x0201,
-+ 0x200c, 0x81ff, 0x0de8, 0x080c, 0x358e, 0x2009, 0x0001, 0x7808,
-+ 0xd0ec, 0x0110, 0x2009, 0x0011, 0x7902, 0x00f0, 0x8001, 0x7002,
-+ 0xa184, 0x0880, 0x1138, 0x7804, 0xd0fc, 0x1940, 0x2011, 0x0001,
-+ 0x00b1, 0x0090, 0x6030, 0xa092, 0x0004, 0xa086, 0x0009, 0x1120,
-+ 0x6000, 0x601a, 0x2011, 0x0025, 0x6232, 0xd1dc, 0x1988, 0x0870,
-+ 0x7803, 0x0004, 0x7003, 0x0000, 0x00ee, 0x00fe, 0x0005, 0x6024,
-+ 0xa005, 0x0520, 0x8001, 0x6026, 0x6018, 0x6130, 0xa140, 0x2804,
-+ 0x7832, 0x8840, 0x2804, 0x7836, 0x8840, 0x2804, 0x7822, 0x8840,
-+ 0x2804, 0x7826, 0x8840, 0x7a02, 0x7000, 0x8000, 0x7002, 0x6018,
-+ 0xa802, 0xa08a, 0x0029, 0x1138, 0x6018, 0xa080, 0x0001, 0x2004,
-+ 0x601a, 0x2001, 0x000d, 0x6032, 0xa085, 0x0001, 0x0005, 0x00f6,
-+ 0x00e6, 0x00c6, 0x2071, 0xb74a, 0x2079, 0x0020, 0x7904, 0xd1fc,
-+ 0x01f0, 0x7803, 0x0002, 0x2d60, 0xa026, 0x7000, 0x0002, 0x36b7,
-+ 0x36a2, 0x36ae, 0x8001, 0x7002, 0xd19c, 0x1188, 0x2011, 0x0001,
-+ 0x080c, 0x3667, 0x0160, 0x080c, 0x3667, 0x0048, 0x8001, 0x7002,
-+ 0x7804, 0xd0fc, 0x1d30, 0x2011, 0x0001, 0x080c, 0x3667, 0x00ce,
-+ 0x00ee, 0x00fe, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x2061, 0x0200,
-+ 0x2001, 0xb6c0, 0x2004, 0x601a, 0x2061, 0x0100, 0x2001, 0xb6bf,
-+ 0x2004, 0x60ce, 0x6004, 0xc0ac, 0xa085, 0x0200, 0x6006, 0x2001,
-+ 0x0074, 0x2004, 0xa005, 0x01f8, 0x2038, 0x2001, 0x0076, 0x2024,
-+ 0x2001, 0x0077, 0x201c, 0x080c, 0x3e33, 0x6833, 0x000d, 0x6f26,
-+ 0x2d00, 0x681a, 0xa78a, 0x0007, 0x0220, 0x2138, 0x2009, 0x0007,
-+ 0x0010, 0x2708, 0xa03e, 0x6818, 0xa080, 0x000d, 0x04b1, 0x1d90,
-+ 0x2d00, 0x681a, 0x0088, 0x080c, 0x3e33, 0x6833, 0x000d, 0x2070,
-+ 0x6827, 0x0001, 0x2d00, 0x681a, 0x2001, 0x0076, 0x2004, 0x2072,
-+ 0x2001, 0x0077, 0x2004, 0x7006, 0x2061, 0x0020, 0x2079, 0x0100,
-+ 0x2001, 0xb6bf, 0x2004, 0x6012, 0x20e1, 0x9040, 0x2001, 0x0072,
-+ 0x2004, 0xa084, 0xfff8, 0x700a, 0x601a, 0x0006, 0x2001, 0x0073,
-+ 0x2004, 0x700e, 0x601e, 0x78c6, 0x000e, 0x78ca, 0xa006, 0x603a,
-+ 0x603e, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x00e6, 0x2071, 0x0010,
-+ 0x20a0, 0x2099, 0x0014, 0x7003, 0x0026, 0x7432, 0x7336, 0xa006,
-+ 0x703a, 0x703e, 0x810b, 0x810b, 0x21a8, 0x810b, 0x7122, 0x7003,
-+ 0x0041, 0x7004, 0xd0fc, 0x0de8, 0x7003, 0x0002, 0x7003, 0x0040,
-+ 0x53a5, 0x7430, 0x7334, 0x87ff, 0x0180, 0x00c6, 0x00d6, 0x2d60,
-+ 0x00c6, 0x080c, 0x3e33, 0x00ce, 0x6018, 0x2070, 0x2d00, 0x7006,
-+ 0x601a, 0x00de, 0x00ce, 0xa085, 0x0001, 0x00ee, 0x0005, 0x00e6,
-+ 0x2001, 0x0075, 0x2004, 0xa005, 0x0508, 0x2038, 0x2001, 0x0078,
-+ 0x2024, 0x2001, 0x0079, 0x201c, 0x080c, 0x3e33, 0x2d60, 0x6833,
-+ 0x000d, 0x6f26, 0x2d00, 0x681a, 0xa78a, 0x0007, 0x0220, 0x2138,
-+ 0x2009, 0x0007, 0x0010, 0x2708, 0xa03e, 0x6818, 0xa080, 0x000d,
-+ 0x080c, 0x3725, 0x1d88, 0x2d00, 0x681a, 0x00e0, 0x080c, 0x3e33,
-+ 0x2d60, 0x6033, 0x000d, 0x2070, 0x6027, 0x0001, 0x2c00, 0x601a,
-+ 0x2001, 0x0078, 0x2004, 0x2072, 0x2001, 0x0079, 0x2004, 0x7006,
-+ 0x2001, 0x0072, 0x2004, 0xa084, 0xfff8, 0x700a, 0x2001, 0x0073,
-+ 0x2004, 0x700e, 0x2001, 0x0030, 0x2003, 0x0004, 0x7824, 0xd0ac,
-+ 0x1178, 0x2001, 0x0101, 0x200c, 0xc1ed, 0x2102, 0x6027, 0x0000,
-+ 0x2001, 0xb723, 0x2003, 0x0003, 0x2001, 0x0030, 0x2003, 0x0009,
-+ 0x00ee, 0x0005, 0x0804, 0x2f6e, 0x0126, 0x2091, 0x8000, 0x20a9,
-+ 0x0012, 0x2001, 0xb440, 0x20a0, 0xa006, 0x40a4, 0x012e, 0x0804,
-+ 0x2f6e, 0x7d38, 0x7c3c, 0x0804, 0x3015, 0x080c, 0x3e33, 0x0904,
-+ 0x2f93, 0x080c, 0x5a90, 0x0110, 0x080c, 0x4baa, 0x2009, 0x001c,
-+ 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x080c, 0x3e74, 0x701b, 0x37d9,
-+ 0x0005, 0xade8, 0x000d, 0x6800, 0xa005, 0x0904, 0x2f96, 0x6804,
-+ 0xd0ac, 0x0118, 0xd0a4, 0x0904, 0x2f96, 0xd094, 0x00c6, 0x2061,
-+ 0x0100, 0x6104, 0x0138, 0x6200, 0xa292, 0x0005, 0x0218, 0xa18c,
-+ 0xffdf, 0x0010, 0xa18d, 0x0020, 0x6106, 0x00ce, 0xd08c, 0x00c6,
-+ 0x2061, 0x0100, 0x6104, 0x0118, 0xa18d, 0x0010, 0x0010, 0xa18c,
-+ 0xffef, 0x6106, 0x00ce, 0x2009, 0x0100, 0x210c, 0xa18a, 0x0002,
-+ 0x0268, 0xd084, 0x0158, 0x6a28, 0xa28a, 0x007f, 0x1a04, 0x2f96,
-+ 0xa288, 0x2d88, 0x210d, 0xa18c, 0x00ff, 0x615a, 0xd0dc, 0x0130,
-+ 0x6828, 0xa08a, 0x007f, 0x1a04, 0x2f96, 0x6052, 0x6808, 0xa08a,
-+ 0x0100, 0x0a04, 0x2f96, 0xa08a, 0x0841, 0x1a04, 0x2f96, 0xa084,
-+ 0x0007, 0x1904, 0x2f96, 0x680c, 0xa005, 0x0904, 0x2f96, 0x6810,
-+ 0xa005, 0x0904, 0x2f96, 0x6848, 0x6940, 0xa10a, 0x1a04, 0x2f96,
-+ 0x8001, 0x0904, 0x2f96, 0x684c, 0x6944, 0xa10a, 0x1a04, 0x2f96,
-+ 0x8001, 0x0904, 0x2f96, 0x6804, 0xd0fc, 0x0560, 0x080c, 0x3e33,
-+ 0x0904, 0x2f93, 0x2009, 0x0014, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38,
-+ 0xa290, 0x0038, 0xa399, 0x0000, 0x080c, 0x3e74, 0x701b, 0x3859,
-+ 0x0005, 0xade8, 0x000d, 0x20a9, 0x0014, 0x2d98, 0x2069, 0xb46e,
-+ 0x2da0, 0x53a3, 0x7010, 0xa0e8, 0x000d, 0x2001, 0xb472, 0x200c,
-+ 0xd1e4, 0x0140, 0x00c6, 0x2061, 0x0100, 0x6004, 0xa085, 0x0b00,
-+ 0x6006, 0x00ce, 0x2009, 0xb6b1, 0x200b, 0x0000, 0x2001, 0xb474,
-+ 0x2004, 0xd0ac, 0x0158, 0x7824, 0x200a, 0x2009, 0x017f, 0x200a,
-+ 0x3200, 0xa084, 0x003f, 0xa085, 0x3020, 0x2090, 0x20a9, 0x001c,
-+ 0x2d98, 0x2069, 0xb452, 0x2da0, 0x53a3, 0x6814, 0xa08c, 0x00ff,
-+ 0x6142, 0x8007, 0xa084, 0x00ff, 0x6046, 0x080c, 0x5d66, 0x080c,
-+ 0x532d, 0x080c, 0x5396, 0x6000, 0xa086, 0x0000, 0x1904, 0x3954,
-+ 0x6808, 0x602a, 0x080c, 0x2439, 0x0006, 0x2001, 0x0100, 0x2004,
-+ 0xa082, 0x0005, 0x000e, 0x0268, 0x2009, 0x0170, 0x200b, 0x0080,
-+ 0xe000, 0xe000, 0x200b, 0x0000, 0x0036, 0x6b08, 0x080c, 0x2868,
-+ 0x003e, 0x6818, 0x691c, 0x6a20, 0x6b24, 0x8007, 0x810f, 0x8217,
-+ 0x831f, 0x6016, 0x611a, 0x621e, 0x6322, 0x6c04, 0xd4f4, 0x0148,
-+ 0x6830, 0x6934, 0x6a38, 0x6b3c, 0x8007, 0x810f, 0x8217, 0x831f,
-+ 0x0010, 0xa084, 0xf0ff, 0x6006, 0x610a, 0x620e, 0x6312, 0x8007,
-+ 0x810f, 0x8217, 0x831f, 0x20a9, 0x0004, 0x20a1, 0xb6c6, 0x40a1,
-+ 0x080c, 0x6a2d, 0x6904, 0xd1fc, 0x0520, 0x00c6, 0x2009, 0x0000,
-+ 0x20a9, 0x0001, 0x6b70, 0xd384, 0x01c8, 0x0020, 0x839d, 0x12b0,
-+ 0x3508, 0x8109, 0x080c, 0x631d, 0x6878, 0x6016, 0x6874, 0x2008,
-+ 0xa084, 0xff00, 0x8007, 0x600a, 0xa184, 0x00ff, 0x6006, 0x8108,
-+ 0x1118, 0x6003, 0x0003, 0x0010, 0x6003, 0x0001, 0x1f04, 0x38ee,
-+ 0x00ce, 0x2069, 0xb452, 0x2001, 0xb69e, 0x6a80, 0xa294, 0x0030,
-+ 0xa28e, 0x0000, 0x0170, 0xa28e, 0x0010, 0x0118, 0xa28e, 0x0020,
-+ 0x0140, 0x2003, 0xaaaa, 0x080c, 0x28b1, 0x2001, 0xb68f, 0x2102,
-+ 0x0008, 0x2102, 0x00c6, 0x2061, 0x0100, 0x602f, 0x0040, 0x602f,
-+ 0x0000, 0x00ce, 0x080c, 0x5a90, 0x0128, 0x080c, 0x408d, 0x0110,
-+ 0x080c, 0x282d, 0x60c8, 0xa005, 0x01d0, 0x6003, 0x0001, 0x2009,
-+ 0x393a, 0x00e0, 0x080c, 0x5a90, 0x1178, 0x2011, 0x5963, 0x080c,
-+ 0x6961, 0x2011, 0x5956, 0x080c, 0x6a21, 0x2001, 0xb69f, 0x2003,
-+ 0x0000, 0x080c, 0x59c8, 0x0040, 0x080c, 0x4ad9, 0x0028, 0x6003,
-+ 0x0004, 0x2009, 0x3954, 0x0010, 0x0804, 0x2f6e, 0x2001, 0x0100,
-+ 0x2004, 0xa082, 0x0005, 0x0258, 0x2001, 0x0170, 0x2004, 0xa084,
-+ 0x00ff, 0xa086, 0x004c, 0x1118, 0x2091, 0x309d, 0x0817, 0x2091,
-+ 0x301d, 0x0817, 0x6000, 0xa086, 0x0000, 0x0904, 0x2f93, 0x2069,
-+ 0xb452, 0x7830, 0x6842, 0x7834, 0x6846, 0x6804, 0xd0fc, 0x0118,
-+ 0x2009, 0x0030, 0x0010, 0x2009, 0x001c, 0x2d00, 0x7a2c, 0x7b28,
-+ 0x7c3c, 0x7d38, 0x0804, 0x3e77, 0xa006, 0x080c, 0x282d, 0x81ff,
-+ 0x1904, 0x2f93, 0x080c, 0x5a90, 0x1178, 0x2001, 0xb69f, 0x2003,
-+ 0x0001, 0x2001, 0xb400, 0x2003, 0x0001, 0xa085, 0x0001, 0x080c,
-+ 0x5ad4, 0x080c, 0x59c8, 0x0020, 0x080c, 0x4baa, 0x080c, 0x4ad9,
-+ 0x0804, 0x2f6e, 0x81ff, 0x1904, 0x2f93, 0x080c, 0x5a90, 0x1110,
-+ 0x0804, 0x2f93, 0x6188, 0x81ff, 0x0198, 0x703f, 0x0000, 0x2001,
-+ 0xbbc0, 0x2009, 0x0040, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0126,
-+ 0x2091, 0x8000, 0x080c, 0x3e77, 0x701b, 0x2f6c, 0x012e, 0x0005,
-+ 0x703f, 0x0001, 0x00d6, 0x2069, 0xbbc0, 0x20a9, 0x0040, 0x20a1,
-+ 0xbbc0, 0x2019, 0xffff, 0x43a4, 0x6550, 0xa588, 0x2d88, 0x210d,
-+ 0xa18c, 0x00ff, 0x216a, 0xa00e, 0x2011, 0x0002, 0x2100, 0xa506,
-+ 0x01a8, 0x080c, 0x4f6a, 0x1190, 0x6014, 0x821c, 0x0238, 0xa398,
-+ 0xbbc0, 0xa085, 0xff00, 0x8007, 0x201a, 0x0038, 0xa398, 0xbbc0,
-+ 0x2324, 0xa4a4, 0xff00, 0xa405, 0x201a, 0x8210, 0x8108, 0xa182,
-+ 0x0080, 0x1208, 0x0c18, 0x8201, 0x8007, 0x2d0c, 0xa105, 0x206a,
-+ 0x00de, 0x20a9, 0x0040, 0x20a1, 0xbbc0, 0x2099, 0xbbc0, 0x080c,
-+ 0x4b49, 0x0804, 0x39af, 0x080c, 0x3e58, 0x0904, 0x2f96, 0x00c6,
-+ 0x080c, 0x3e33, 0x00ce, 0x1120, 0x2009, 0x0002, 0x0804, 0x2f93,
-+ 0x2001, 0xb453, 0x2004, 0xd0b4, 0x0550, 0x7824, 0xa084, 0xff00,
-+ 0xa08e, 0x7e00, 0x0520, 0xa08e, 0x7f00, 0x0508, 0xa08e, 0x8000,
-+ 0x01f0, 0x6000, 0xd08c, 0x11d8, 0x6004, 0xa084, 0x00ff, 0xa086,
-+ 0x0006, 0x11a8, 0x6837, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x080c,
-+ 0x9d6b, 0x1120, 0x2009, 0x0003, 0x0804, 0x2f93, 0x7007, 0x0003,
-+ 0x701b, 0x3a3b, 0x0005, 0x080c, 0x3e58, 0x0904, 0x2f96, 0x20a9,
-+ 0x002b, 0x2c98, 0xade8, 0x0002, 0x2da0, 0x53a3, 0x20a9, 0x0004,
-+ 0xac80, 0x0006, 0x2098, 0xad80, 0x0006, 0x20a0, 0x080c, 0x4b49,
-+ 0x20a9, 0x0004, 0xac80, 0x000a, 0x2098, 0xad80, 0x000a, 0x20a0,
-+ 0x080c, 0x4b49, 0x2d00, 0x2009, 0x002b, 0x7a2c, 0x7b28, 0x7c3c,
-+ 0x7d38, 0x0804, 0x3e77, 0x81ff, 0x1904, 0x2f93, 0x080c, 0x3e48,
-+ 0x0904, 0x2f96, 0x080c, 0x5147, 0x0804, 0x2f6e, 0x81ff, 0x1904,
-+ 0x2f93, 0x7828, 0xa08a, 0x1000, 0x1a04, 0x2f96, 0x080c, 0x3e58,
-+ 0x0904, 0x2f96, 0x080c, 0x51aa, 0x0904, 0x2f93, 0x2019, 0x0004,
-+ 0xa00e, 0x080c, 0x5159, 0x7924, 0x810f, 0x7a28, 0x0011, 0x0804,
-+ 0x2f6e, 0xa186, 0x00ff, 0x0110, 0x0071, 0x0060, 0x2029, 0x007e,
-+ 0x2061, 0xb400, 0x6450, 0x2400, 0xa506, 0x0110, 0x2508, 0x0019,
-+ 0x8529, 0x1ec8, 0x0005, 0x080c, 0x4f6a, 0x1138, 0x2200, 0x8003,
-+ 0x800b, 0x810b, 0xa108, 0x080c, 0x696d, 0x0005, 0x81ff, 0x1904,
-+ 0x2f93, 0x080c, 0x3e48, 0x0904, 0x2f96, 0x080c, 0x5030, 0x0904,
-+ 0x2f93, 0x080c, 0x5150, 0x0804, 0x2f6e, 0x81ff, 0x1904, 0x2f93,
-+ 0x080c, 0x3e48, 0x0904, 0x2f96, 0x080c, 0x5030, 0x0904, 0x2f93,
-+ 0x080c, 0x513e, 0x0804, 0x2f6e, 0x6100, 0x0804, 0x2f6e, 0x080c,
-+ 0x3e58, 0x0904, 0x2f96, 0x2001, 0xb400, 0x2004, 0xa086, 0x0003,
-+ 0x1904, 0x2f93, 0x00d6, 0xace8, 0x000a, 0x7924, 0xd184, 0x0110,
-+ 0xace8, 0x0006, 0x680c, 0x8007, 0x783e, 0x6808, 0x8007, 0x783a,
-+ 0x6b04, 0x831f, 0x6a00, 0x8217, 0x00de, 0x6100, 0xa18c, 0x0200,
-+ 0x0804, 0x2f6e, 0x7824, 0xa09c, 0x00ff, 0xa39a, 0x0003, 0x1a04,
-+ 0x2f93, 0x6250, 0xa294, 0x00ff, 0xa084, 0xff00, 0x8007, 0xa206,
-+ 0x1150, 0x2001, 0xb440, 0x2009, 0x000c, 0x7a2c, 0x7b28, 0x7c3c,
-+ 0x7d38, 0x0804, 0x3e77, 0x81ff, 0x1904, 0x2f93, 0x080c, 0x3e58,
-+ 0x0904, 0x2f96, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x1904,
-+ 0x2f93, 0x00c6, 0x080c, 0x3e33, 0x00ce, 0x0904, 0x2f93, 0x6837,
-+ 0x0000, 0x6838, 0xc0fd, 0x683a, 0x080c, 0x9d17, 0x0904, 0x2f93,
-+ 0x7007, 0x0003, 0x701b, 0x3b25, 0x0005, 0x6830, 0xa086, 0x0100,
-+ 0x0904, 0x2f93, 0xad80, 0x000e, 0x2009, 0x000c, 0x7a2c, 0x7b28,
-+ 0x7c3c, 0x7d38, 0x0804, 0x3e77, 0xa006, 0x080c, 0x282d, 0x7824,
-+ 0xa084, 0x00ff, 0xa086, 0x00ff, 0x0118, 0x81ff, 0x1904, 0x2f93,
-+ 0x080c, 0x5a90, 0x0110, 0x080c, 0x4baa, 0x7828, 0xa08a, 0x1000,
-+ 0x1a04, 0x2f96, 0x7924, 0xa18c, 0xff00, 0x810f, 0xa186, 0x00ff,
-+ 0x0138, 0xa182, 0x007f, 0x1a04, 0x2f96, 0x2100, 0x080c, 0x27f7,
-+ 0x0026, 0x00c6, 0x0126, 0x2091, 0x8000, 0x2061, 0xb6f3, 0x601b,
-+ 0x0000, 0x601f, 0x0000, 0x080c, 0x5a90, 0x1178, 0x2001, 0xb69f,
-+ 0x2003, 0x0001, 0x2001, 0xb400, 0x2003, 0x0001, 0xa085, 0x0001,
-+ 0x080c, 0x5ad4, 0x080c, 0x59c8, 0x0420, 0x2011, 0x0003, 0x080c,
-+ 0x801f, 0x2011, 0x0002, 0x080c, 0x8029, 0x080c, 0x7f03, 0x0036,
-+ 0x2019, 0x0000, 0x080c, 0x7f8e, 0x003e, 0x2061, 0x0100, 0x2001,
-+ 0xb415, 0x2004, 0xa084, 0x00ff, 0x810f, 0xa105, 0x604a, 0x6043,
-+ 0x0090, 0x6043, 0x0010, 0x2009, 0x002d, 0x2011, 0x4b0e, 0x080c,
-+ 0x69e7, 0x7924, 0xa18c, 0xff00, 0x810f, 0x080c, 0x5a90, 0x1110,
-+ 0x2009, 0x00ff, 0x7a28, 0x080c, 0x3a89, 0x012e, 0x00ce, 0x002e,
-+ 0x0804, 0x2f6e, 0x7924, 0xa18c, 0xff00, 0x810f, 0x00c6, 0x080c,
-+ 0x4f0e, 0x2c08, 0x00ce, 0x1904, 0x2f96, 0x0804, 0x2f6e, 0x81ff,
-+ 0x0120, 0x2009, 0x0001, 0x0804, 0x2f93, 0x60d4, 0xd0ac, 0x1130,
-+ 0xd09c, 0x1120, 0x2009, 0x0005, 0x0804, 0x2f93, 0x080c, 0x3e33,
-+ 0x1120, 0x2009, 0x0002, 0x0804, 0x2f93, 0x7924, 0x7a2c, 0x7b28,
-+ 0x7c3c, 0x7d38, 0x080c, 0x3e74, 0x701b, 0x3bd7, 0x0005, 0x2009,
-+ 0x0080, 0x080c, 0x4f6a, 0x1130, 0x6004, 0xa084, 0x00ff, 0xa086,
-+ 0x0006, 0x0120, 0x2021, 0x400a, 0x0804, 0x2f70, 0x00d6, 0xade8,
-+ 0x000d, 0x6900, 0x6a08, 0x6b0c, 0x6c10, 0x6d14, 0x6e18, 0x6820,
-+ 0xa0be, 0x0100, 0x0904, 0x3c4e, 0xa0be, 0x0112, 0x0904, 0x3c4e,
-+ 0xa0be, 0x0113, 0x0904, 0x3c4e, 0xa0be, 0x0114, 0x0904, 0x3c4e,
-+ 0xa0be, 0x0117, 0x0904, 0x3c4e, 0xa0be, 0x011a, 0x0904, 0x3c4e,
-+ 0xa0be, 0x011c, 0x0904, 0x3c4e, 0xa0be, 0x0121, 0x05b0, 0xa0be,
-+ 0x0131, 0x0598, 0xa0be, 0x0171, 0x05c8, 0xa0be, 0x0173, 0x05b0,
-+ 0xa0be, 0x01a1, 0x1120, 0x6830, 0x8007, 0x6832, 0x04a8, 0xa0be,
-+ 0x0212, 0x0540, 0xa0be, 0x0213, 0x0528, 0xa0be, 0x0214, 0x01b0,
-+ 0xa0be, 0x0217, 0x0168, 0xa0be, 0x021a, 0x1120, 0x6838, 0x8007,
-+ 0x683a, 0x00e0, 0xa0be, 0x0300, 0x01c8, 0x00de, 0x0804, 0x2f96,
-+ 0xad80, 0x0010, 0x20a9, 0x0007, 0x080c, 0x3c94, 0xad80, 0x000e,
-+ 0x20a9, 0x0001, 0x080c, 0x3c94, 0x0048, 0xad80, 0x000c, 0x080c,
-+ 0x3ca2, 0x0050, 0xad80, 0x000e, 0x080c, 0x3ca2, 0xad80, 0x000c,
-+ 0x20a9, 0x0001, 0x080c, 0x3c94, 0x00c6, 0x080c, 0x3e33, 0x0568,
-+ 0x6838, 0xc0fd, 0x683a, 0x6837, 0x0119, 0x6853, 0x0000, 0x684f,
-+ 0x0020, 0x685b, 0x0001, 0x810b, 0x697e, 0x6883, 0x0000, 0x6a86,
-+ 0x6b8a, 0x6c8e, 0x6d92, 0x6996, 0x689b, 0x0000, 0x00ce, 0x00de,
-+ 0x6837, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x6823, 0x0000, 0x6804,
-+ 0x2068, 0x080c, 0x9d33, 0x1120, 0x2009, 0x0003, 0x0804, 0x2f93,
-+ 0x7007, 0x0003, 0x701b, 0x3c8b, 0x0005, 0x00ce, 0x00de, 0x2009,
-+ 0x0002, 0x0804, 0x2f93, 0x6820, 0xa086, 0x8001, 0x1904, 0x2f6e,
-+ 0x2009, 0x0004, 0x0804, 0x2f93, 0x0016, 0x2008, 0x2044, 0x8000,
-+ 0x204c, 0x8000, 0x290a, 0x8108, 0x280a, 0x8108, 0x1f04, 0x3c96,
-+ 0x001e, 0x0005, 0x0016, 0x00a6, 0x00b6, 0x2008, 0x2044, 0x8000,
-+ 0x204c, 0x8000, 0x2054, 0x8000, 0x205c, 0x2b0a, 0x8108, 0x2a0a,
-+ 0x8108, 0x290a, 0x8108, 0x280a, 0x00be, 0x00ae, 0x001e, 0x0005,
-+ 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x2f93, 0x60d4, 0xd0ac,
-+ 0x1130, 0xd09c, 0x1120, 0x2009, 0x0005, 0x0804, 0x2f93, 0x7924,
-+ 0x2140, 0xa18c, 0xff00, 0x810f, 0x60d4, 0xd0ac, 0x1120, 0xa182,
-+ 0x0080, 0x0a04, 0x2f96, 0xa182, 0x00ff, 0x1a04, 0x2f96, 0x7a2c,
-+ 0x7b28, 0x6070, 0xa306, 0x1140, 0x6074, 0xa24e, 0x0904, 0x2f96,
-+ 0xa9cc, 0xff00, 0x0904, 0x2f96, 0x00c6, 0x080c, 0x3d81, 0x2c68,
-+ 0x00ce, 0x0538, 0xa0c6, 0x4000, 0x1180, 0x00c6, 0x0006, 0x2d60,
-+ 0x2009, 0x0000, 0x080c, 0x520b, 0x1108, 0xc185, 0x6000, 0xd0bc,
-+ 0x0108, 0xc18d, 0x000e, 0x00ce, 0x0088, 0xa0c6, 0x4007, 0x1110,
-+ 0x2408, 0x0060, 0xa0c6, 0x4008, 0x1118, 0x2708, 0x2610, 0x0030,
-+ 0xa0c6, 0x4009, 0x1108, 0x0010, 0x2001, 0x4006, 0x2020, 0x0804,
-+ 0x2f70, 0x2d00, 0x7022, 0x0016, 0x00b6, 0x00c6, 0x00e6, 0x2c70,
-+ 0x080c, 0x856a, 0x05d8, 0x2d00, 0x601a, 0x080c, 0x9fb8, 0x2e58,
-+ 0x00ee, 0x00e6, 0x00c6, 0x080c, 0x3e33, 0x00ce, 0x2b70, 0x1150,
-+ 0x080c, 0x85c0, 0x00ee, 0x00ce, 0x00be, 0x001e, 0x2009, 0x0002,
-+ 0x0804, 0x2f93, 0x6837, 0x0000, 0x683b, 0x0000, 0x2d00, 0x6012,
-+ 0x6833, 0x0000, 0x6838, 0xc0fd, 0xd88c, 0x0108, 0xc0f5, 0x683a,
-+ 0x0126, 0x2091, 0x8000, 0x080c, 0x2c60, 0x012e, 0x601f, 0x0001,
-+ 0x2001, 0x0000, 0x080c, 0x4eac, 0x2001, 0x0002, 0x080c, 0x4ebe,
-+ 0x2009, 0x0002, 0x080c, 0x85ef, 0xa085, 0x0001, 0x00ee, 0x00ce,
-+ 0x00be, 0x001e, 0x1120, 0x2009, 0x0003, 0x0804, 0x2f93, 0x7007,
-+ 0x0003, 0x701b, 0x3d64, 0x0005, 0x6830, 0xa086, 0x0100, 0x7020,
-+ 0x2060, 0x1138, 0x2009, 0x0004, 0x6204, 0xa294, 0x00ff, 0x0804,
-+ 0x2f93, 0x2009, 0x0000, 0x6838, 0xd0f4, 0x1904, 0x2f6e, 0x080c,
-+ 0x520b, 0x1108, 0xc185, 0x6000, 0xd0bc, 0x0108, 0xc18d, 0x0804,
-+ 0x2f6e, 0x00e6, 0x00d6, 0x2029, 0x0000, 0x2001, 0xb435, 0x2004,
-+ 0xd0ac, 0x0138, 0x2021, 0x0000, 0x20a9, 0x00ff, 0x2071, 0xb535,
-+ 0x0030, 0x2021, 0x0080, 0x20a9, 0x007f, 0x2071, 0xb5b5, 0x2e04,
-+ 0xa005, 0x1130, 0x2100, 0xa406, 0x1570, 0x2428, 0xc5fd, 0x0458,
-+ 0x2068, 0x6f10, 0x2700, 0xa306, 0x11b0, 0x6e14, 0x2600, 0xa206,
-+ 0x1190, 0x2400, 0xa106, 0x1160, 0x2d60, 0xd884, 0x0568, 0x6004,
-+ 0xa084, 0x00ff, 0xa086, 0x0006, 0x1538, 0x2001, 0x4000, 0x0428,
-+ 0x2001, 0x4007, 0x0410, 0x2400, 0xa106, 0x1168, 0x6e14, 0x87ff,
-+ 0x1138, 0x86ff, 0x09d0, 0x2001, 0xb435, 0x2004, 0xd0ac, 0x19a8,
-+ 0x2001, 0x4008, 0x0090, 0x8420, 0x8e70, 0x1f04, 0x3d97, 0x85ff,
-+ 0x1130, 0x2001, 0x4009, 0x0048, 0x2001, 0x0001, 0x0030, 0x080c,
-+ 0x4f0e, 0x1dd0, 0x6312, 0x6216, 0xa006, 0xa005, 0x00de, 0x00ee,
-+ 0x0005, 0x81ff, 0x1904, 0x2f93, 0x080c, 0x3e33, 0x0904, 0x2f93,
-+ 0x6837, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x7824, 0xa005, 0x0904,
-+ 0x2f96, 0xa096, 0x00ff, 0x0120, 0xa092, 0x0004, 0x1a04, 0x2f96,
-+ 0x2010, 0x2d18, 0x080c, 0x2c13, 0x0904, 0x2f93, 0x7007, 0x0003,
-+ 0x701b, 0x3e03, 0x0005, 0x6830, 0xa086, 0x0100, 0x0904, 0x2f93,
-+ 0x0804, 0x2f6e, 0x7924, 0xa18c, 0xff00, 0x810f, 0x60d4, 0xd0ac,
-+ 0x1120, 0xa182, 0x0080, 0x0a04, 0x2f96, 0xa182, 0x00ff, 0x1a04,
-+ 0x2f96, 0x0126, 0x2091, 0x8000, 0x080c, 0x9c1b, 0x1188, 0xa190,
-+ 0xb535, 0x2204, 0xa065, 0x0160, 0x080c, 0x4bc5, 0x2001, 0xb435,
-+ 0x2004, 0xd0ac, 0x0110, 0x6017, 0x0000, 0x012e, 0x0804, 0x2f6e,
-+ 0x012e, 0x0804, 0x2f93, 0x080c, 0x15f4, 0x0188, 0xa006, 0x6802,
-+ 0x7010, 0xa005, 0x1120, 0x2d00, 0x7012, 0x7016, 0x0030, 0x7014,
-+ 0x6802, 0x2060, 0x2d00, 0x6006, 0x7016, 0xad80, 0x000d, 0x0005,
-+ 0x7924, 0x810f, 0xa18c, 0x00ff, 0x080c, 0x4f6a, 0x1130, 0x7e28,
-+ 0xa684, 0x3fff, 0xa082, 0x4000, 0x0208, 0xa066, 0x8cff, 0x0005,
-+ 0x7e24, 0x860f, 0xa18c, 0x00ff, 0x080c, 0x4f6a, 0x1128, 0xa6b4,
-+ 0x00ff, 0xa682, 0x4000, 0x0208, 0xa066, 0x8cff, 0x0005, 0x0016,
-+ 0x7110, 0x81ff, 0x0128, 0x2168, 0x6904, 0x080c, 0x160b, 0x0cc8,
-+ 0x7112, 0x7116, 0x001e, 0x0005, 0x2031, 0x0001, 0x0010, 0x2031,
-+ 0x0000, 0x2061, 0xb4d2, 0x6606, 0x6112, 0x600e, 0x6226, 0x632a,
-+ 0x642e, 0x6532, 0x2c10, 0x080c, 0x163f, 0x7007, 0x0002, 0x701b,
-+ 0x2f6e, 0x0005, 0x00f6, 0x0126, 0x2091, 0x8000, 0x2079, 0x0000,
-+ 0x2001, 0xb490, 0x2004, 0xa005, 0x1168, 0x0e04, 0x3ea2, 0x7818,
-+ 0xd084, 0x1140, 0x7a22, 0x7b26, 0x7c2a, 0x781b, 0x0001, 0x2091,
-+ 0x4080, 0x0408, 0x0016, 0x00c6, 0x00e6, 0x2071, 0xb482, 0x7138,
-+ 0xa182, 0x0010, 0x0218, 0x7030, 0x2060, 0x0078, 0x7030, 0xa0e0,
-+ 0x0004, 0xac82, 0xb4d2, 0x0210, 0x2061, 0xb492, 0x2c00, 0x7032,
-+ 0x81ff, 0x1108, 0x7036, 0x8108, 0x713a, 0x2262, 0x6306, 0x640a,
-+ 0x00ee, 0x00ce, 0x001e, 0x012e, 0x00fe, 0x0005, 0x00e6, 0x2071,
-+ 0xb482, 0x7038, 0xa005, 0x0570, 0x0126, 0x2091, 0x8000, 0x0e04,
-+ 0x3ef9, 0x00f6, 0x2079, 0x0000, 0x7818, 0xd084, 0x1508, 0x00c6,
-+ 0x7034, 0x2060, 0x2c04, 0x7822, 0x6004, 0x7826, 0x6008, 0x782a,
-+ 0x781b, 0x0001, 0x2091, 0x4080, 0x7038, 0x8001, 0x703a, 0xa005,
-+ 0x1130, 0x7033, 0xb492, 0x7037, 0xb492, 0x00ce, 0x0048, 0xac80,
-+ 0x0004, 0xa0fa, 0xb4d2, 0x0210, 0x2001, 0xb492, 0x7036, 0x00ce,
-+ 0x00fe, 0x012e, 0x00ee, 0x0005, 0x0026, 0x2001, 0xb453, 0x2004,
-+ 0xd0c4, 0x0120, 0x2011, 0x8014, 0x080c, 0x3e8a, 0x002e, 0x0005,
-+ 0x81ff, 0x1904, 0x2f93, 0x0126, 0x2091, 0x8000, 0x6030, 0xc08d,
-+ 0xc085, 0xc0ac, 0x6032, 0x080c, 0x5a90, 0x1178, 0x2001, 0xb69f,
-+ 0x2003, 0x0001, 0x2001, 0xb400, 0x2003, 0x0001, 0xa085, 0x0001,
-+ 0x080c, 0x5ad4, 0x080c, 0x59c8, 0x0010, 0x080c, 0x4ad9, 0x012e,
-+ 0x0804, 0x2f6e, 0x7824, 0x2008, 0xa18c, 0xfffd, 0x1128, 0x61e0,
-+ 0xa10d, 0x61e2, 0x0804, 0x2f6e, 0x0804, 0x2f96, 0x81ff, 0x1904,
-+ 0x2f93, 0x6000, 0xa086, 0x0003, 0x1904, 0x2f93, 0x2001, 0xb453,
-+ 0x2004, 0xd0ac, 0x1904, 0x2f93, 0x080c, 0x3e58, 0x0904, 0x2f96,
-+ 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x1120, 0x7828, 0xa005,
-+ 0x0904, 0x2f6e, 0x00c6, 0x080c, 0x3e33, 0x00ce, 0x0904, 0x2f93,
-+ 0x6837, 0x0000, 0x6833, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x080c,
-+ 0x9dfc, 0x0904, 0x2f93, 0x7007, 0x0003, 0x701b, 0x3f68, 0x0005,
-+ 0x6830, 0xa086, 0x0100, 0x0904, 0x2f93, 0x0804, 0x2f6e, 0x2001,
-+ 0xb400, 0x2004, 0xa086, 0x0003, 0x1904, 0x2f93, 0x7f24, 0x7a2c,
-+ 0x7b28, 0x7c3c, 0x7d38, 0x080c, 0x3e33, 0x0904, 0x2f93, 0x2009,
-+ 0x0000, 0x2031, 0x0000, 0x7023, 0x0000, 0x702f, 0x0000, 0xad80,
-+ 0x0005, 0x7026, 0x20a0, 0x080c, 0x4f6a, 0x1904, 0x3fe2, 0x6004,
-+ 0xa0c4, 0x00ff, 0xa8c6, 0x0006, 0x0130, 0xa0c4, 0xff00, 0xa8c6,
-+ 0x0600, 0x1904, 0x3fe2, 0x2001, 0xb453, 0x2004, 0xd0ac, 0x1128,
-+ 0x080c, 0x520b, 0x1110, 0xd79c, 0x05e8, 0xd794, 0x1110, 0xd784,
-+ 0x0158, 0xac80, 0x0006, 0x2098, 0x3400, 0x20a9, 0x0004, 0x53a3,
-+ 0x080c, 0x3ca2, 0xd794, 0x0148, 0xac80, 0x000a, 0x2098, 0x3400,
-+ 0x20a9, 0x0004, 0x53a3, 0x080c, 0x3ca2, 0x21a2, 0xd794, 0x01d8,
-+ 0xac80, 0x0000, 0x2098, 0x94a0, 0x20a9, 0x0002, 0x53a3, 0xac80,
-+ 0x0003, 0x20a6, 0x94a0, 0xac80, 0x0004, 0x2098, 0x3400, 0x20a9,
-+ 0x0002, 0x53a3, 0x080c, 0x3c94, 0xac80, 0x0026, 0x2098, 0x20a9,
-+ 0x0002, 0x53a3, 0x0008, 0x94a0, 0xd794, 0x0110, 0xa6b0, 0x000b,
-+ 0xa6b0, 0x0005, 0x8108, 0x2001, 0xb435, 0x2004, 0xd0ac, 0x0118,
-+ 0xa186, 0x0100, 0x0040, 0xd78c, 0x0120, 0xa186, 0x0100, 0x0170,
-+ 0x0018, 0xa186, 0x007e, 0x0150, 0xd794, 0x0118, 0xa686, 0x0020,
-+ 0x0010, 0xa686, 0x0028, 0x0150, 0x0804, 0x3f8b, 0x86ff, 0x1120,
-+ 0x7120, 0x810b, 0x0804, 0x2f6e, 0x702f, 0x0001, 0x711e, 0x7020,
-+ 0xa600, 0x7022, 0x772a, 0x2061, 0xb4d2, 0x6007, 0x0000, 0x6612,
-+ 0x7024, 0x600e, 0x6226, 0x632a, 0x642e, 0x6532, 0x2c10, 0x080c,
-+ 0x163f, 0x7007, 0x0002, 0x701b, 0x401e, 0x0005, 0x702c, 0xa005,
-+ 0x1170, 0x711c, 0x7024, 0x20a0, 0x7728, 0x2031, 0x0000, 0x2061,
-+ 0xb4d2, 0x6224, 0x6328, 0x642c, 0x6530, 0x0804, 0x3f8b, 0x7120,
-+ 0x810b, 0x0804, 0x2f6e, 0x2029, 0x007e, 0x7924, 0x7a28, 0x7b2c,
-+ 0x7c38, 0xa184, 0xff00, 0x8007, 0xa0e2, 0x0020, 0x0a04, 0x2f96,
-+ 0xa502, 0x0a04, 0x2f96, 0xa184, 0x00ff, 0xa0e2, 0x0020, 0x0a04,
-+ 0x2f96, 0xa502, 0x0a04, 0x2f96, 0xa284, 0xff00, 0x8007, 0xa0e2,
-+ 0x0020, 0x0a04, 0x2f96, 0xa502, 0x0a04, 0x2f96, 0xa284, 0x00ff,
-+ 0xa0e2, 0x0020, 0x0a04, 0x2f96, 0xa502, 0x0a04, 0x2f96, 0xa384,
-+ 0xff00, 0x8007, 0xa0e2, 0x0020, 0x0a04, 0x2f96, 0xa502, 0x0a04,
-+ 0x2f96, 0xa384, 0x00ff, 0xa0e2, 0x0020, 0x0a04, 0x2f96, 0xa502,
-+ 0x0a04, 0x2f96, 0xa484, 0xff00, 0x8007, 0xa0e2, 0x0020, 0x0a04,
-+ 0x2f96, 0xa502, 0x0a04, 0x2f96, 0xa484, 0x00ff, 0xa0e2, 0x0020,
-+ 0x0a04, 0x2f96, 0xa502, 0x0a04, 0x2f96, 0x2061, 0xb6b9, 0x6102,
-+ 0x6206, 0x630a, 0x640e, 0x0804, 0x2f6e, 0x0006, 0x2001, 0xb453,
-+ 0x2004, 0xd0cc, 0x000e, 0x0005, 0x0006, 0x2001, 0xb472, 0x2004,
-+ 0xd0bc, 0x000e, 0x0005, 0x6168, 0x7a24, 0x6300, 0x82ff, 0x1118,
-+ 0x7926, 0x0804, 0x2f6e, 0x83ff, 0x1904, 0x2f96, 0x2001, 0xfff0,
-+ 0xa200, 0x1a04, 0x2f96, 0x2019, 0xffff, 0x606c, 0xa302, 0xa200,
-+ 0x0a04, 0x2f96, 0x7926, 0x626a, 0x0804, 0x2f6e, 0x2001, 0xb400,
-+ 0x2004, 0xa086, 0x0003, 0x1904, 0x2f93, 0x7c28, 0x7d24, 0x7e38,
-+ 0x7f2c, 0x080c, 0x3e33, 0x0904, 0x2f93, 0x2009, 0x0000, 0x2019,
-+ 0x0000, 0x7023, 0x0000, 0x702f, 0x0000, 0xad80, 0x0003, 0x7026,
-+ 0x20a0, 0xa1e0, 0xb535, 0x2c64, 0x8cff, 0x01b8, 0x6004, 0xa084,
-+ 0x00ff, 0xa086, 0x0006, 0x0130, 0x6004, 0xa084, 0xff00, 0xa086,
-+ 0x0600, 0x1158, 0x6014, 0x20a2, 0x94a0, 0x6010, 0x8007, 0xa105,
-+ 0x8007, 0x20a2, 0x94a0, 0xa398, 0x0002, 0x8108, 0xa182, 0x00ff,
-+ 0x0120, 0xa386, 0x002a, 0x0148, 0x08e0, 0x83ff, 0x1120, 0x7120,
-+ 0x810c, 0x0804, 0x2f6e, 0x702f, 0x0001, 0x711e, 0x7020, 0xa300,
-+ 0x7022, 0x2061, 0xb4d2, 0x6007, 0x0000, 0x6312, 0x7024, 0x600e,
-+ 0x6426, 0x652a, 0x662e, 0x6732, 0x2c10, 0x080c, 0x163f, 0x7007,
-+ 0x0002, 0x701b, 0x4114, 0x0005, 0x702c, 0xa005, 0x1168, 0x711c,
-+ 0x7024, 0x20a0, 0x2019, 0x0000, 0x2061, 0xb4d2, 0x6424, 0x6528,
-+ 0x662c, 0x6730, 0x0804, 0x40d1, 0x7120, 0x810c, 0x0804, 0x2f6e,
-+ 0x81ff, 0x1904, 0x2f93, 0x60d4, 0xd0ac, 0x1118, 0xd09c, 0x0904,
-+ 0x2f93, 0x080c, 0x3e33, 0x0904, 0x2f93, 0x7924, 0x7a2c, 0x7b28,
-+ 0x7c3c, 0x7d38, 0x080c, 0x3e74, 0x701b, 0x413f, 0x0005, 0x00d6,
-+ 0xade8, 0x000d, 0x6828, 0xa0be, 0x7000, 0x0148, 0xa0be, 0x7100,
-+ 0x0130, 0xa0be, 0x7200, 0x0118, 0x00de, 0x0804, 0x2f96, 0x6820,
-+ 0x6924, 0x080c, 0x27e3, 0x1510, 0x080c, 0x4f0e, 0x11f8, 0x7122,
-+ 0x6612, 0x6516, 0x6e18, 0x00c6, 0x080c, 0x3e33, 0x01b8, 0x080c,
-+ 0x3e33, 0x01a0, 0x00ce, 0x00de, 0x6837, 0x0000, 0x6838, 0xc0fd,
-+ 0x683a, 0x6823, 0x0000, 0x6804, 0x2068, 0x080c, 0x9d4f, 0x0904,
-+ 0x2f93, 0x7007, 0x0003, 0x701b, 0x4179, 0x0005, 0x00de, 0x0804,
-+ 0x2f93, 0x7120, 0x080c, 0x2d5b, 0x6820, 0xa086, 0x8001, 0x0904,
-+ 0x2f93, 0x2d00, 0x701e, 0x6804, 0xa080, 0x0002, 0x0006, 0x20a9,
-+ 0x002a, 0x2098, 0x20a0, 0x080c, 0x4b49, 0x000e, 0xade8, 0x000d,
-+ 0x6a08, 0x6b0c, 0x6c10, 0x6d14, 0x2061, 0xb4d2, 0x6007, 0x0000,
-+ 0x6e00, 0x6f28, 0xa7c6, 0x7000, 0x1108, 0x0018, 0xa7c6, 0x7100,
-+ 0x1140, 0xa6c2, 0x0004, 0x0a04, 0x2f96, 0x2009, 0x0004, 0x0804,
-+ 0x3e77, 0xa7c6, 0x7200, 0x1904, 0x2f96, 0xa6c2, 0x0054, 0x0a04,
-+ 0x2f96, 0x600e, 0x6013, 0x002a, 0x6226, 0x632a, 0x642e, 0x6532,
-+ 0x2c10, 0x080c, 0x163f, 0x7007, 0x0002, 0x701b, 0x41c0, 0x0005,
-+ 0x701c, 0x2068, 0x6804, 0xa080, 0x0001, 0x2004, 0xa080, 0x0002,
-+ 0x0006, 0x20a9, 0x002a, 0x2098, 0x20a0, 0x080c, 0x4b49, 0x000e,
-+ 0x2009, 0x002a, 0x2061, 0xb4d2, 0x6224, 0x6328, 0x642c, 0x6530,
-+ 0x0804, 0x3e77, 0x81ff, 0x1904, 0x2f93, 0x792c, 0x2001, 0xb6a0,
-+ 0x2102, 0x080c, 0x3e48, 0x0904, 0x2f96, 0x080c, 0x5030, 0x0904,
-+ 0x2f93, 0x0126, 0x2091, 0x8000, 0x080c, 0x5162, 0x012e, 0x0804,
-+ 0x2f6e, 0x7824, 0xd08c, 0x1118, 0xd084, 0x0904, 0x3a03, 0x080c,
-+ 0x3e58, 0x0904, 0x2f96, 0x00c6, 0x080c, 0x3e33, 0x00ce, 0x1120,
-+ 0x2009, 0x0002, 0x0804, 0x2f93, 0x6004, 0xa084, 0x00ff, 0xa086,
-+ 0x0006, 0x0128, 0xa08e, 0x0004, 0x0110, 0xa08e, 0x0005, 0x15b8,
-+ 0x7824, 0xd08c, 0x0120, 0x6000, 0xc08c, 0x6002, 0x0030, 0x2001,
-+ 0xb453, 0x2004, 0xd0b4, 0x0904, 0x3a3f, 0x7824, 0xa084, 0xff00,
-+ 0xa08e, 0x7e00, 0x0904, 0x3a3f, 0xa08e, 0x7f00, 0x0904, 0x3a3f,
-+ 0xa08e, 0x8000, 0x0904, 0x3a3f, 0x6000, 0xd08c, 0x1904, 0x3a3f,
-+ 0x6837, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x080c, 0x9d6b, 0x1120,
-+ 0x2009, 0x0003, 0x0804, 0x2f93, 0x7007, 0x0003, 0x701b, 0x4241,
-+ 0x0005, 0x080c, 0x3e58, 0x0904, 0x2f96, 0x0804, 0x3a3f, 0x2009,
-+ 0xb431, 0x210c, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x2f93,
-+ 0x2001, 0xb400, 0x2004, 0xa086, 0x0003, 0x0120, 0x2009, 0x0007,
-+ 0x0804, 0x2f93, 0x2001, 0xb453, 0x2004, 0xd0ac, 0x0120, 0x2009,
-+ 0x0008, 0x0804, 0x2f93, 0x609c, 0xd0a4, 0x1118, 0xd0ac, 0x1904,
-+ 0x3a3f, 0x6837, 0x0000, 0x6833, 0x0000, 0x6838, 0xc0fd, 0x683a,
-+ 0x080c, 0x9dfc, 0x1120, 0x2009, 0x0003, 0x0804, 0x2f93, 0x7007,
-+ 0x0003, 0x701b, 0x427c, 0x0005, 0x6830, 0xa086, 0x0100, 0x1120,
-+ 0x2009, 0x0004, 0x0804, 0x2f93, 0x080c, 0x3e58, 0x0904, 0x2f96,
-+ 0x0804, 0x4210, 0x81ff, 0x2009, 0x0001, 0x1904, 0x2f93, 0x6000,
-+ 0xa086, 0x0003, 0x2009, 0x0007, 0x1904, 0x2f93, 0x2001, 0xb453,
-+ 0x2004, 0xd0ac, 0x2009, 0x0008, 0x1904, 0x2f93, 0x080c, 0x3e58,
-+ 0x0904, 0x2f96, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x2009,
-+ 0x0009, 0x1904, 0x2f93, 0x00c6, 0x080c, 0x3e33, 0x00ce, 0x2009,
-+ 0x0002, 0x0904, 0x2f93, 0x6837, 0x0000, 0x6833, 0x0000, 0x6838,
-+ 0xc0fd, 0x683a, 0x7928, 0xa194, 0xff00, 0xa18c, 0x00ff, 0xa006,
-+ 0x82ff, 0x1128, 0xc0ed, 0x6952, 0x792c, 0x6956, 0x0048, 0xa28e,
-+ 0x0100, 0x1904, 0x2f96, 0xc0e5, 0x6853, 0x0000, 0x6857, 0x0000,
-+ 0x683e, 0x080c, 0x9fb9, 0x2009, 0x0003, 0x0904, 0x2f93, 0x7007,
-+ 0x0003, 0x701b, 0x42dc, 0x0005, 0x6830, 0xa086, 0x0100, 0x2009,
-+ 0x0004, 0x0904, 0x2f93, 0x0804, 0x2f6e, 0x81ff, 0x2009, 0x0001,
-+ 0x1904, 0x2f93, 0x6000, 0xa086, 0x0003, 0x2009, 0x0007, 0x1904,
-+ 0x2f93, 0x080c, 0x3e58, 0x0904, 0x2f96, 0x6004, 0xa084, 0x00ff,
-+ 0xa086, 0x0006, 0x2009, 0x0009, 0x1904, 0x2f93, 0x00c6, 0x080c,
-+ 0x3e33, 0x00ce, 0x2009, 0x0002, 0x0904, 0x2f93, 0xad80, 0x000f,
-+ 0x2009, 0x0008, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x080c, 0x3e74,
-+ 0x701b, 0x4313, 0x0005, 0x00d6, 0xade8, 0x000f, 0x6800, 0xa086,
-+ 0x0500, 0x1140, 0x6804, 0xa005, 0x1128, 0x6808, 0xa084, 0xff00,
-+ 0x1108, 0x0018, 0x00de, 0x1904, 0x2f96, 0x00de, 0x6837, 0x0000,
-+ 0x6833, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x00c6, 0x080c, 0x3e58,
-+ 0x1118, 0x00ce, 0x0804, 0x2f96, 0x080c, 0xa008, 0x2009, 0x0003,
-+ 0x00ce, 0x0904, 0x2f93, 0x7007, 0x0003, 0x701b, 0x4340, 0x0005,
-+ 0x6830, 0xa086, 0x0100, 0x2009, 0x0004, 0x0904, 0x2f93, 0x0804,
-+ 0x2f6e, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x2f93, 0x6000,
-+ 0xa086, 0x0003, 0x0120, 0x2009, 0x0007, 0x0804, 0x2f93, 0x7e24,
-+ 0x860f, 0xa18c, 0x00ff, 0xa6b4, 0x00ff, 0x080c, 0x4f6a, 0x1904,
-+ 0x2f96, 0xa186, 0x007f, 0x0150, 0x6004, 0xa084, 0x00ff, 0xa086,
-+ 0x0006, 0x0120, 0x2009, 0x0009, 0x0804, 0x2f93, 0x00c6, 0x080c,
-+ 0x3e33, 0x00ce, 0x1120, 0x2009, 0x0002, 0x0804, 0x2f93, 0x6837,
-+ 0x0000, 0x6838, 0xc0fd, 0x683a, 0x2001, 0x0100, 0x8007, 0x680a,
-+ 0x080c, 0x9d86, 0x1120, 0x2009, 0x0003, 0x0804, 0x2f93, 0x7007,
-+ 0x0003, 0x701b, 0x438c, 0x0005, 0x6808, 0x8007, 0xa086, 0x0100,
-+ 0x1120, 0x2009, 0x0004, 0x0804, 0x2f93, 0x68b0, 0x6836, 0x6810,
-+ 0x8007, 0xa084, 0x00ff, 0x800c, 0x6814, 0x8007, 0xa084, 0x00ff,
-+ 0x8004, 0xa080, 0x0002, 0xa108, 0xad80, 0x0004, 0x7a2c, 0x7b28,
-+ 0x7c3c, 0x7d38, 0x0804, 0x3e77, 0x080c, 0x3e33, 0x1120, 0x2009,
-+ 0x0002, 0x0804, 0x2f93, 0x7924, 0xa194, 0xff00, 0xa18c, 0x00ff,
-+ 0x8217, 0x82ff, 0x0110, 0x0804, 0x2f96, 0x2009, 0x001a, 0x7a2c,
-+ 0x7b28, 0x7c3c, 0x7d38, 0x080c, 0x3e74, 0x701b, 0x43c8, 0x0005,
-+ 0xad80, 0x000d, 0x2098, 0x20a9, 0x001a, 0x20a1, 0xb6c6, 0x53a3,
-+ 0x0804, 0x2f6e, 0x080c, 0x3e33, 0x1120, 0x2009, 0x0002, 0x0804,
-+ 0x2f93, 0x7924, 0xa194, 0xff00, 0xa18c, 0x00ff, 0x8217, 0x82ff,
-+ 0x0110, 0x0804, 0x2f96, 0x2099, 0xb6c6, 0x20a0, 0x20a9, 0x001a,
-+ 0x53a3, 0x2009, 0x001a, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0804,
-+ 0x3e77, 0x7824, 0xa08a, 0x1000, 0x1a04, 0x2f96, 0x0126, 0x2091,
-+ 0x8000, 0x8003, 0x800b, 0x810b, 0xa108, 0x00c6, 0x2061, 0xb6f3,
-+ 0x6142, 0x00ce, 0x012e, 0x0804, 0x2f6e, 0x00c6, 0x080c, 0x5a90,
-+ 0x1188, 0x2001, 0xb69f, 0x2003, 0x0001, 0x2001, 0xb400, 0x2003,
-+ 0x0001, 0xa085, 0x0001, 0x080c, 0x5ad4, 0x080c, 0x59c8, 0x080c,
-+ 0x1511, 0x0038, 0x2061, 0xb400, 0x6030, 0xc09d, 0x6032, 0x080c,
-+ 0x4ad9, 0x00ce, 0x0005, 0x0126, 0x2091, 0x8000, 0x00c6, 0x2061,
-+ 0xb6f3, 0x7924, 0x6152, 0x614e, 0x6057, 0x0000, 0x604b, 0x0009,
-+ 0x7838, 0x606a, 0x783c, 0x6066, 0x7828, 0x6062, 0x782c, 0x605e,
-+ 0x2061, 0xb6a1, 0x2001, 0xb708, 0x600e, 0x6013, 0x0001, 0x6017,
-+ 0x0002, 0x6007, 0x0000, 0x6037, 0x0000, 0x00ce, 0x012e, 0x0804,
-+ 0x2f6e, 0x0126, 0x00c6, 0x00e6, 0x2061, 0x0100, 0x2071, 0xb400,
-+ 0x6044, 0xd0a4, 0x11b0, 0xd084, 0x0118, 0x080c, 0x45c0, 0x0068,
-+ 0xd08c, 0x0118, 0x080c, 0x44e1, 0x0040, 0xd094, 0x0118, 0x080c,
-+ 0x44b2, 0x0018, 0xd09c, 0x0108, 0x0061, 0x00ee, 0x00ce, 0x012e,
-+ 0x0005, 0x0016, 0x6128, 0xd19c, 0x1110, 0xc19d, 0x612a, 0x001e,
-+ 0x0ca0, 0x624c, 0xa286, 0xf0f0, 0x1150, 0x6048, 0xa086, 0xf0f0,
-+ 0x0130, 0x624a, 0x6043, 0x0090, 0x6043, 0x0010, 0x0490, 0xa294,
-+ 0xff00, 0xa296, 0xf700, 0x0178, 0x7134, 0xd1a4, 0x1160, 0x6240,
-+ 0xa295, 0x0100, 0x6242, 0xa294, 0x0010, 0x0128, 0x2009, 0x00f7,
-+ 0x080c, 0x4b69, 0x00f0, 0x6040, 0xa084, 0x0010, 0xa085, 0x0140,
-+ 0x6042, 0x6043, 0x0000, 0x707b, 0x0000, 0x7097, 0x0001, 0x70bb,
-+ 0x0000, 0x70d7, 0x0000, 0x2009, 0xbbc0, 0x200b, 0x0000, 0x708b,
-+ 0x0000, 0x707f, 0x000a, 0x2009, 0x000a, 0x2011, 0x4a8f, 0x080c,
-+ 0x69e7, 0x0005, 0x0156, 0x2001, 0xb474, 0x2004, 0xd08c, 0x0110,
-+ 0x7053, 0xffff, 0x707c, 0xa005, 0x1510, 0x2011, 0x4a8f, 0x080c,
-+ 0x6961, 0x6040, 0xa094, 0x0010, 0xa285, 0x0020, 0x6042, 0x20a9,
-+ 0x00c8, 0x6044, 0xd08c, 0x1168, 0x1f04, 0x44c9, 0x6242, 0x708f,
-+ 0x0000, 0x6040, 0xa094, 0x0010, 0xa285, 0x0080, 0x6042, 0x6242,
-+ 0x0030, 0x6242, 0x708f, 0x0000, 0x7083, 0x0000, 0x0000, 0x015e,
-+ 0x0005, 0x7080, 0xa08a, 0x0003, 0x1210, 0x0023, 0x0010, 0x080c,
-+ 0x1511, 0x0005, 0x44ed, 0x453d, 0x45bf, 0x00f6, 0x7083, 0x0001,
-+ 0x20e1, 0xa000, 0xe000, 0x20e1, 0x8700, 0x080c, 0x2439, 0x20e1,
-+ 0x9080, 0x20e1, 0x4000, 0x2079, 0xba00, 0x207b, 0x2200, 0x7807,
-+ 0x00ef, 0x780b, 0x0000, 0x780f, 0x00ef, 0x7813, 0x0138, 0x7817,
-+ 0x0000, 0x781b, 0x0000, 0x781f, 0x0000, 0x7823, 0xffff, 0x7827,
-+ 0xffff, 0x782b, 0x0000, 0x782f, 0x0000, 0x2079, 0xba0c, 0x207b,
-+ 0x1101, 0x7807, 0x0000, 0x2099, 0xb405, 0x20a1, 0xba0e, 0x20a9,
-+ 0x0004, 0x53a3, 0x2079, 0xba12, 0x207b, 0x0000, 0x7807, 0x0000,
-+ 0x2099, 0xba00, 0x20a1, 0x020b, 0x20a9, 0x0014, 0x53a6, 0x60c3,
-+ 0x000c, 0x600f, 0x0000, 0x080c, 0x4ac0, 0x00fe, 0x7087, 0x0000,
-+ 0x6043, 0x0008, 0x6043, 0x0000, 0x0005, 0x00d6, 0x7084, 0x7087,
-+ 0x0000, 0xa025, 0x0904, 0x45a7, 0x6020, 0xd0b4, 0x1904, 0x45a5,
-+ 0x7194, 0x81ff, 0x0904, 0x4595, 0xa486, 0x000c, 0x1904, 0x45a0,
-+ 0xa480, 0x0018, 0x8004, 0x20a8, 0x2011, 0xba80, 0x2019, 0xba00,
-+ 0x220c, 0x2304, 0xa106, 0x11b8, 0x8210, 0x8318, 0x1f04, 0x4558,
-+ 0x6043, 0x0004, 0x608b, 0xbc94, 0x608f, 0xf0f0, 0x6043, 0x0006,
-+ 0x7083, 0x0002, 0x708f, 0x0002, 0x2009, 0x07d0, 0x2011, 0x4a96,
-+ 0x080c, 0x69e7, 0x0490, 0x2069, 0xba80, 0x6930, 0xa18e, 0x1101,
-+ 0x1538, 0x6834, 0xa005, 0x1520, 0x6900, 0xa18c, 0x00ff, 0x1118,
-+ 0x6804, 0xa005, 0x0190, 0x2011, 0xba8e, 0x2019, 0xb405, 0x20a9,
-+ 0x0004, 0x220c, 0x2304, 0xa102, 0x0230, 0x1190, 0x8210, 0x8318,
-+ 0x1f04, 0x4589, 0x0068, 0x7097, 0x0000, 0x20e1, 0x9080, 0x20e1,
-+ 0x4000, 0x2099, 0xba80, 0x20a1, 0x020b, 0x20a9, 0x0014, 0x53a6,
-+ 0x6043, 0x0008, 0x6043, 0x0000, 0x0010, 0x00de, 0x0005, 0x6040,
-+ 0xa085, 0x0100, 0x6042, 0x6020, 0xd0b4, 0x1db8, 0x60c3, 0x000c,
-+ 0x2011, 0xb6ea, 0x2013, 0x0000, 0x7087, 0x0000, 0x20e1, 0x9080,
-+ 0x60a3, 0x0056, 0x60a7, 0x9575, 0x080c, 0x7d1b, 0x0c30, 0x0005,
-+ 0x708c, 0xa08a, 0x001d, 0x1210, 0x0023, 0x0010, 0x080c, 0x1511,
-+ 0x0005, 0x45f3, 0x4602, 0x462a, 0x4643, 0x4667, 0x468f, 0x46b3,
-+ 0x46e4, 0x4708, 0x4730, 0x4767, 0x478f, 0x47ab, 0x47c1, 0x47e1,
-+ 0x47f4, 0x47fc, 0x482c, 0x4850, 0x4878, 0x489c, 0x48cd, 0x490a,
-+ 0x4939, 0x4955, 0x4994, 0x49b4, 0x49cd, 0x49ce, 0x00c6, 0x2061,
-+ 0xb400, 0x6003, 0x0007, 0x2061, 0x0100, 0x6004, 0xa084, 0xfff9,
-+ 0x6006, 0x00ce, 0x0005, 0x608b, 0xbc94, 0x608f, 0xf0f0, 0x6043,
-+ 0x0002, 0x708f, 0x0001, 0x2009, 0x07d0, 0x2011, 0x4a96, 0x080c,
-+ 0x69e7, 0x0005, 0x00f6, 0x7084, 0xa086, 0x0014, 0x1508, 0x6043,
-+ 0x0000, 0x6020, 0xd0b4, 0x11e0, 0x2079, 0xba80, 0x7a30, 0xa296,
-+ 0x1102, 0x11a0, 0x7834, 0xa005, 0x1188, 0x7a38, 0xd2fc, 0x0128,
-+ 0x70b8, 0xa005, 0x1110, 0x70bb, 0x0001, 0x2011, 0x4a96, 0x080c,
-+ 0x6961, 0x708f, 0x0010, 0x080c, 0x47fc, 0x0010, 0x080c, 0x4ad9,
-+ 0x00fe, 0x0005, 0x708f, 0x0003, 0x6043, 0x0004, 0x2011, 0x4a96,
-+ 0x080c, 0x6961, 0x080c, 0x4b51, 0x20a3, 0x1102, 0x20a3, 0x0000,
-+ 0x20a9, 0x000a, 0x20a3, 0x0000, 0x1f04, 0x463a, 0x60c3, 0x0014,
-+ 0x080c, 0x4ac0, 0x0005, 0x00f6, 0x7084, 0xa005, 0x01f0, 0x2011,
-+ 0x4a96, 0x080c, 0x6961, 0xa086, 0x0014, 0x11a8, 0x2079, 0xba80,
-+ 0x7a30, 0xa296, 0x1102, 0x1178, 0x7834, 0xa005, 0x1160, 0x7a38,
-+ 0xd2fc, 0x0128, 0x70b8, 0xa005, 0x1110, 0x70bb, 0x0001, 0x708f,
-+ 0x0004, 0x0029, 0x0010, 0x080c, 0x4ad9, 0x00fe, 0x0005, 0x708f,
-+ 0x0005, 0x080c, 0x4b51, 0x20a3, 0x1103, 0x20a3, 0x0000, 0x3430,
-+ 0x2011, 0xba8e, 0x080c, 0x4ba2, 0x1160, 0x7078, 0xa005, 0x1148,
-+ 0x7150, 0xa186, 0xffff, 0x0128, 0x080c, 0x4a5a, 0x0110, 0x080c,
-+ 0x4b80, 0x20a9, 0x0008, 0x2298, 0x26a0, 0x53a6, 0x20a3, 0x0000,
-+ 0x20a3, 0x0000, 0x60c3, 0x0014, 0x080c, 0x4ac0, 0x0005, 0x00f6,
-+ 0x7084, 0xa005, 0x01f0, 0x2011, 0x4a96, 0x080c, 0x6961, 0xa086,
-+ 0x0014, 0x11a8, 0x2079, 0xba80, 0x7a30, 0xa296, 0x1103, 0x1178,
-+ 0x7834, 0xa005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70b8, 0xa005,
-+ 0x1110, 0x70bb, 0x0001, 0x708f, 0x0006, 0x0029, 0x0010, 0x080c,
-+ 0x4ad9, 0x00fe, 0x0005, 0x708f, 0x0007, 0x080c, 0x4b51, 0x20a3,
-+ 0x1104, 0x20a3, 0x0000, 0x3430, 0x2011, 0xba8e, 0x080c, 0x4ba2,
-+ 0x11a8, 0x7078, 0xa005, 0x1190, 0x7158, 0xa186, 0xffff, 0x0170,
-+ 0xa180, 0x2d88, 0x200d, 0xa18c, 0xff00, 0x810f, 0x080c, 0x4a5a,
-+ 0x0128, 0x080c, 0x4094, 0x0110, 0x080c, 0x282d, 0x20a9, 0x0008,
-+ 0x2298, 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3,
-+ 0x0014, 0x080c, 0x4ac0, 0x0005, 0x00f6, 0x7084, 0xa005, 0x01f0,
-+ 0x2011, 0x4a96, 0x080c, 0x6961, 0xa086, 0x0014, 0x11a8, 0x2079,
-+ 0xba80, 0x7a30, 0xa296, 0x1104, 0x1178, 0x7834, 0xa005, 0x1160,
-+ 0x7a38, 0xd2fc, 0x0128, 0x70b8, 0xa005, 0x1110, 0x70bb, 0x0001,
-+ 0x708f, 0x0008, 0x0029, 0x0010, 0x080c, 0x4ad9, 0x00fe, 0x0005,
-+ 0x708f, 0x0009, 0x080c, 0x4b51, 0x20a3, 0x1105, 0x20a3, 0x0100,
-+ 0x3430, 0x080c, 0x4ba2, 0x1150, 0x7078, 0xa005, 0x1138, 0x080c,
-+ 0x49cf, 0x1170, 0xa085, 0x0001, 0x080c, 0x282d, 0x20a9, 0x0008,
-+ 0x2099, 0xba8e, 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+ 0x60c3, 0x0014, 0x080c, 0x4ac0, 0x0010, 0x080c, 0x45e6, 0x0005,
-+ 0x00f6, 0x7084, 0xa005, 0x0588, 0x2011, 0x4a96, 0x080c, 0x6961,
-+ 0xa086, 0x0014, 0x1540, 0x2079, 0xba80, 0x7a30, 0xa296, 0x1105,
-+ 0x1510, 0x7834, 0x2011, 0x0100, 0xa21e, 0x1160, 0x7a38, 0xd2fc,
-+ 0x0128, 0x70b8, 0xa005, 0x1110, 0x70bb, 0x0001, 0x708f, 0x000a,
-+ 0x00b1, 0x0098, 0xa005, 0x1178, 0x7a38, 0xd2fc, 0x0128, 0x70b8,
-+ 0xa005, 0x1110, 0x70bb, 0x0001, 0x708b, 0x0000, 0x708f, 0x000e,
-+ 0x080c, 0x47e1, 0x0010, 0x080c, 0x4ad9, 0x00fe, 0x0005, 0x708f,
-+ 0x000b, 0x2011, 0xba0e, 0x22a0, 0x20a9, 0x0040, 0x2019, 0xffff,
-+ 0x43a4, 0x20a9, 0x0002, 0x2009, 0x0000, 0x41a4, 0x080c, 0x4b51,
-+ 0x20a3, 0x1106, 0x20a3, 0x0000, 0x080c, 0x4ba2, 0x0118, 0x2013,
-+ 0x0000, 0x0020, 0x7054, 0xa085, 0x0100, 0x2012, 0x2298, 0x20a9,
-+ 0x0042, 0x53a6, 0x60c3, 0x0084, 0x080c, 0x4ac0, 0x0005, 0x00f6,
-+ 0x7084, 0xa005, 0x01b0, 0x2011, 0x4a96, 0x080c, 0x6961, 0xa086,
-+ 0x0084, 0x1168, 0x2079, 0xba80, 0x7a30, 0xa296, 0x1106, 0x1138,
-+ 0x7834, 0xa005, 0x1120, 0x708f, 0x000c, 0x0029, 0x0010, 0x080c,
-+ 0x4ad9, 0x00fe, 0x0005, 0x708f, 0x000d, 0x080c, 0x4b51, 0x20a3,
-+ 0x1107, 0x20a3, 0x0000, 0x2099, 0xba8e, 0x20a9, 0x0040, 0x53a6,
-+ 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0084, 0x080c, 0x4ac0,
-+ 0x0005, 0x00f6, 0x7084, 0xa005, 0x01d0, 0x2011, 0x4a96, 0x080c,
-+ 0x6961, 0xa086, 0x0084, 0x1188, 0x2079, 0xba80, 0x7a30, 0xa296,
-+ 0x1107, 0x1158, 0x7834, 0xa005, 0x1140, 0x708b, 0x0001, 0x080c,
-+ 0x4b43, 0x708f, 0x000e, 0x0029, 0x0010, 0x080c, 0x4ad9, 0x00fe,
-+ 0x0005, 0x708f, 0x000f, 0x7087, 0x0000, 0x608b, 0xbc85, 0x608f,
-+ 0xb5b5, 0x6043, 0x0005, 0x6043, 0x0004, 0x2009, 0x07d0, 0x2011,
-+ 0x4a96, 0x080c, 0x6955, 0x0005, 0x7084, 0xa005, 0x0120, 0x2011,
-+ 0x4a96, 0x080c, 0x6961, 0x0005, 0x708f, 0x0011, 0x080c, 0x4ba2,
-+ 0x11a0, 0x7170, 0x81ff, 0x0188, 0x2009, 0x0000, 0x7074, 0xa084,
-+ 0x00ff, 0x080c, 0x27e3, 0xa186, 0x007e, 0x0138, 0xa186, 0x0080,
-+ 0x0120, 0x2011, 0xba8e, 0x080c, 0x4a5a, 0x20e1, 0x9080, 0x20e1,
-+ 0x4000, 0x2099, 0xba80, 0x20a1, 0x020b, 0x7484, 0xa480, 0x0018,
-+ 0xa080, 0x0007, 0xa084, 0x03f8, 0x8004, 0x20a8, 0x53a6, 0x60c3,
-+ 0x0014, 0x080c, 0x4ac0, 0x0005, 0x00f6, 0x7084, 0xa005, 0x01f0,
-+ 0x2011, 0x4a96, 0x080c, 0x6961, 0xa086, 0x0014, 0x11a8, 0x2079,
-+ 0xba80, 0x7a30, 0xa296, 0x1103, 0x1178, 0x7834, 0xa005, 0x1160,
-+ 0x7a38, 0xd2fc, 0x0128, 0x70b8, 0xa005, 0x1110, 0x70bb, 0x0001,
-+ 0x708f, 0x0012, 0x0029, 0x0010, 0x080c, 0x4ad9, 0x00fe, 0x0005,
-+ 0x708f, 0x0013, 0x080c, 0x4b5d, 0x20a3, 0x1103, 0x20a3, 0x0000,
-+ 0x3430, 0x2011, 0xba8e, 0x080c, 0x4ba2, 0x1160, 0x7078, 0xa005,
-+ 0x1148, 0x7150, 0xa186, 0xffff, 0x0128, 0x080c, 0x4a5a, 0x0110,
-+ 0x080c, 0x4b80, 0x20a9, 0x0008, 0x2298, 0x26a0, 0x53a6, 0x20a3,
-+ 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x080c, 0x4ac0, 0x0005,
-+ 0x00f6, 0x7084, 0xa005, 0x01f0, 0x2011, 0x4a96, 0x080c, 0x6961,
-+ 0xa086, 0x0014, 0x11a8, 0x2079, 0xba80, 0x7a30, 0xa296, 0x1104,
-+ 0x1178, 0x7834, 0xa005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70b8,
-+ 0xa005, 0x1110, 0x70bb, 0x0001, 0x708f, 0x0014, 0x0029, 0x0010,
-+ 0x080c, 0x4ad9, 0x00fe, 0x0005, 0x708f, 0x0015, 0x080c, 0x4b5d,
-+ 0x20a3, 0x1104, 0x20a3, 0x0000, 0x3430, 0x2011, 0xba8e, 0x080c,
-+ 0x4ba2, 0x11a8, 0x7078, 0xa005, 0x1190, 0x7158, 0xa186, 0xffff,
-+ 0x0170, 0xa180, 0x2d88, 0x200d, 0xa18c, 0xff00, 0x810f, 0x080c,
-+ 0x4a5a, 0x0128, 0x080c, 0x4094, 0x0110, 0x080c, 0x282d, 0x20a9,
-+ 0x0008, 0x2298, 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+ 0x60c3, 0x0014, 0x080c, 0x4ac0, 0x0005, 0x00f6, 0x7084, 0xa005,
-+ 0x05b8, 0x2011, 0x4a96, 0x080c, 0x6961, 0xa086, 0x0014, 0x1570,
-+ 0x2079, 0xba80, 0x7a30, 0xa296, 0x1105, 0x1540, 0x7834, 0x2011,
-+ 0x0100, 0xa21e, 0x1148, 0x7a38, 0xd2fc, 0x0128, 0x70b8, 0xa005,
-+ 0x1110, 0x70bb, 0x0001, 0x0060, 0xa005, 0x11c0, 0x7a38, 0xd2fc,
-+ 0x0128, 0x70b8, 0xa005, 0x1110, 0x70bb, 0x0001, 0x708b, 0x0000,
-+ 0x7a38, 0xd2f4, 0x0138, 0x2001, 0xb474, 0x2004, 0xd0a4, 0x1110,
-+ 0x70d7, 0x0008, 0x708f, 0x0016, 0x0029, 0x0010, 0x080c, 0x4ad9,
-+ 0x00fe, 0x0005, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, 0xba80,
-+ 0x20a1, 0x020b, 0x20a9, 0x000e, 0x53a6, 0x3430, 0x2011, 0xba8e,
-+ 0x708f, 0x0017, 0x080c, 0x4ba2, 0x1150, 0x7078, 0xa005, 0x1138,
-+ 0x080c, 0x49cf, 0x1170, 0xa085, 0x0001, 0x080c, 0x282d, 0x20a9,
-+ 0x0008, 0x2099, 0xba8e, 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3,
-+ 0x0000, 0x60c3, 0x0014, 0x080c, 0x4ac0, 0x0010, 0x080c, 0x45e6,
-+ 0x0005, 0x00f6, 0x7084, 0xa005, 0x01b0, 0x2011, 0x4a96, 0x080c,
-+ 0x6961, 0xa086, 0x0084, 0x1168, 0x2079, 0xba80, 0x7a30, 0xa296,
-+ 0x1106, 0x1138, 0x7834, 0xa005, 0x1120, 0x708f, 0x0018, 0x0029,
-+ 0x0010, 0x080c, 0x4ad9, 0x00fe, 0x0005, 0x708f, 0x0019, 0x080c,
-+ 0x4b5d, 0x20a3, 0x1106, 0x20a3, 0x0000, 0x3430, 0x2099, 0xba8e,
-+ 0x2039, 0xba0e, 0x27a0, 0x20a9, 0x0040, 0x53a3, 0x080c, 0x4ba2,
-+ 0x11e8, 0x2728, 0x2514, 0x8207, 0xa084, 0x00ff, 0x8000, 0x2018,
-+ 0xa294, 0x00ff, 0x8007, 0xa205, 0x202a, 0x7054, 0x2310, 0x8214,
-+ 0xa2a0, 0xba0e, 0x2414, 0xa38c, 0x0001, 0x0118, 0xa294, 0xff00,
-+ 0x0018, 0xa294, 0x00ff, 0x8007, 0xa215, 0x2222, 0x2798, 0x26a0,
-+ 0x20a9, 0x0040, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3,
-+ 0x0084, 0x080c, 0x4ac0, 0x0005, 0x00f6, 0x7084, 0xa005, 0x01d0,
-+ 0x2011, 0x4a96, 0x080c, 0x6961, 0xa086, 0x0084, 0x1188, 0x2079,
-+ 0xba80, 0x7a30, 0xa296, 0x1107, 0x1158, 0x7834, 0xa005, 0x1140,
-+ 0x708b, 0x0001, 0x080c, 0x4b43, 0x708f, 0x001a, 0x0029, 0x0010,
-+ 0x080c, 0x4ad9, 0x00fe, 0x0005, 0x708f, 0x001b, 0x20e1, 0x9080,
-+ 0x20e1, 0x4000, 0x2099, 0xba80, 0x20a1, 0x020b, 0x7484, 0xa480,
-+ 0x0018, 0xa080, 0x0007, 0xa084, 0x03f8, 0x8004, 0x20a8, 0x53a6,
-+ 0x60c3, 0x0084, 0x080c, 0x4ac0, 0x0005, 0x0005, 0x0005, 0x0086,
-+ 0x0096, 0x2029, 0xb453, 0x252c, 0x20a9, 0x0008, 0x2041, 0xba0e,
-+ 0x28a0, 0x2099, 0xba8e, 0x53a3, 0x20a9, 0x0008, 0x2011, 0x0007,
-+ 0xd5d4, 0x0110, 0x2011, 0x0000, 0x2800, 0xa200, 0x200c, 0xa1a6,
-+ 0xffff, 0x1148, 0xd5d4, 0x0110, 0x8210, 0x0008, 0x8211, 0x1f04,
-+ 0x49e4, 0x0804, 0x4a52, 0x82ff, 0x1160, 0xd5d4, 0x0120, 0xa1a6,
-+ 0x3fff, 0x0d90, 0x0020, 0xa1a6, 0x3fff, 0x0904, 0x4a52, 0xa18d,
-+ 0xc000, 0x20a9, 0x0010, 0x2019, 0x0001, 0xd5d4, 0x0110, 0x2019,
-+ 0x0010, 0x2120, 0xd5d4, 0x0110, 0x8423, 0x0008, 0x8424, 0x1240,
-+ 0xd5d4, 0x0110, 0x8319, 0x0008, 0x8318, 0x1f04, 0x4a0a, 0x04d0,
-+ 0x23a8, 0x2021, 0x0001, 0x8426, 0x8425, 0x1f04, 0x4a1c, 0x2328,
-+ 0x8529, 0xa2be, 0x0007, 0x0158, 0x0006, 0x2039, 0x0007, 0x2200,
-+ 0xa73a, 0x000e, 0x27a8, 0xa5a8, 0x0010, 0x1f04, 0x4a2b, 0x7552,
-+ 0xa5c8, 0x2d88, 0x292d, 0xa5ac, 0x00ff, 0x7576, 0x6532, 0x6536,
-+ 0x0016, 0x2508, 0x080c, 0x280d, 0x001e, 0x60e7, 0x0000, 0x65ea,
-+ 0x2018, 0x2304, 0xa405, 0x201a, 0x707b, 0x0001, 0x26a0, 0x2898,
-+ 0x20a9, 0x0008, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0xa085,
-+ 0x0001, 0x0028, 0xa006, 0x0018, 0xa006, 0x080c, 0x1511, 0x009e,
-+ 0x008e, 0x0005, 0x2118, 0x2021, 0x0000, 0x2001, 0x0007, 0xa39a,
-+ 0x0010, 0x0218, 0x8420, 0x8001, 0x0cd0, 0x2118, 0x84ff, 0x0120,
-+ 0xa39a, 0x0010, 0x8421, 0x1de0, 0x2021, 0x0001, 0x83ff, 0x0118,
-+ 0x8423, 0x8319, 0x1de8, 0xa238, 0x2704, 0xa42c, 0x11b8, 0xa405,
-+ 0x203a, 0x7152, 0xa1a0, 0x2d88, 0x242d, 0xa5ac, 0x00ff, 0x7576,
-+ 0x6532, 0x6536, 0x0016, 0x2508, 0x080c, 0x280d, 0x001e, 0x60e7,
-+ 0x0000, 0x65ea, 0x707b, 0x0001, 0xa084, 0x0000, 0x0005, 0x00e6,
-+ 0x2071, 0xb400, 0x707f, 0x0000, 0x00ee, 0x0005, 0x00e6, 0x00f6,
-+ 0x2079, 0x0100, 0x2071, 0x0140, 0x080c, 0x7d24, 0x7004, 0xa084,
-+ 0x4000, 0x0120, 0x7003, 0x1000, 0x7003, 0x0000, 0x0126, 0x2091,
-+ 0x8000, 0x2071, 0xb423, 0x2073, 0x0000, 0x7840, 0x0026, 0x0016,
-+ 0x2009, 0x00f7, 0x080c, 0x4b69, 0x001e, 0xa094, 0x0010, 0xa285,
-+ 0x0080, 0x7842, 0x7a42, 0x002e, 0x012e, 0x00fe, 0x00ee, 0x0005,
-+ 0x0126, 0x2091, 0x8000, 0x2011, 0xb6ea, 0x2013, 0x0000, 0x7087,
-+ 0x0000, 0x012e, 0x20e1, 0x9080, 0x60a3, 0x0056, 0x60a7, 0x9575,
-+ 0x080c, 0x7d1b, 0x2009, 0x07d0, 0x2011, 0x4a96, 0x080c, 0x69e7,
-+ 0x0005, 0x0016, 0x0026, 0x00c6, 0x0126, 0x2091, 0x8000, 0x2011,
-+ 0x0003, 0x080c, 0x801f, 0x2011, 0x0002, 0x080c, 0x8029, 0x080c,
-+ 0x7f03, 0x0036, 0x2019, 0x0000, 0x080c, 0x7f8e, 0x003e, 0x2009,
-+ 0x00f7, 0x080c, 0x4b69, 0x2061, 0xb6f3, 0x601b, 0x0000, 0x601f,
-+ 0x0000, 0x2061, 0xb400, 0x6003, 0x0001, 0x2061, 0x0100, 0x6043,
-+ 0x0090, 0x6043, 0x0010, 0x2009, 0x002d, 0x2011, 0x4b0e, 0x080c,
-+ 0x6955, 0x012e, 0x00ce, 0x002e, 0x001e, 0x0005, 0x00e6, 0x0006,
-+ 0x0126, 0x2091, 0x8000, 0x2071, 0x0100, 0x080c, 0x7d24, 0x2071,
-+ 0x0140, 0x7004, 0xa084, 0x4000, 0x0120, 0x7003, 0x1000, 0x7003,
-+ 0x0000, 0x080c, 0x5a98, 0x01a8, 0x080c, 0x5ab6, 0x1190, 0x2001,
-+ 0xb69e, 0x2003, 0xaaaa, 0x0016, 0x080c, 0x28b1, 0x2001, 0xb68f,
-+ 0x2102, 0x001e, 0x2001, 0xb69f, 0x2003, 0x0000, 0x080c, 0x59c8,
-+ 0x0030, 0x2001, 0x0001, 0x080c, 0x2789, 0x080c, 0x4ad9, 0x012e,
-+ 0x000e, 0x00ee, 0x0005, 0x20a9, 0x0040, 0x20a1, 0xbbc0, 0x2099,
-+ 0xba8e, 0x3304, 0x8007, 0x20a2, 0x9398, 0x94a0, 0x1f04, 0x4b49,
-+ 0x0005, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, 0xba00, 0x20a1,
-+ 0x020b, 0x20a9, 0x000c, 0x53a6, 0x0005, 0x20e1, 0x9080, 0x20e1,
-+ 0x4000, 0x2099, 0xba80, 0x20a1, 0x020b, 0x20a9, 0x000c, 0x53a6,
-+ 0x0005, 0x00c6, 0x0006, 0x2061, 0x0100, 0x810f, 0x2001, 0xb431,
-+ 0x2004, 0xa005, 0x1138, 0x2001, 0xb415, 0x2004, 0xa084, 0x00ff,
-+ 0xa105, 0x0010, 0xa185, 0x00f7, 0x604a, 0x000e, 0x00ce, 0x0005,
-+ 0x0016, 0x0046, 0x2001, 0xb453, 0x2004, 0xd0a4, 0x0158, 0xa006,
-+ 0x2020, 0x2009, 0x002a, 0x080c, 0xb06b, 0x2001, 0xb40c, 0x200c,
-+ 0xc195, 0x2102, 0x2019, 0x002a, 0x2009, 0x0000, 0x080c, 0x2c33,
-+ 0x004e, 0x001e, 0x0005, 0x080c, 0x4ad9, 0x708f, 0x0000, 0x7087,
-+ 0x0000, 0x0005, 0x0006, 0x2001, 0xb40c, 0x2004, 0xd09c, 0x0100,
-+ 0x000e, 0x0005, 0x0006, 0x0016, 0x0126, 0x2091, 0x8000, 0x2001,
-+ 0x0101, 0x200c, 0xa18d, 0x0006, 0x2102, 0x012e, 0x001e, 0x000e,
-+ 0x0005, 0x0156, 0x20a9, 0x00ff, 0x2009, 0xb535, 0xa006, 0x200a,
-+ 0x8108, 0x1f04, 0x4bbf, 0x015e, 0x0005, 0x00d6, 0x0036, 0x0156,
-+ 0x0136, 0x0146, 0x2069, 0xb452, 0xa006, 0x6002, 0x6007, 0x0707,
-+ 0x600a, 0x600e, 0x6012, 0xa198, 0x2d88, 0x231d, 0xa39c, 0x00ff,
-+ 0x6316, 0x20a9, 0x0004, 0xac98, 0x0006, 0x23a0, 0x40a4, 0x20a9,
-+ 0x0004, 0xac98, 0x000a, 0x23a0, 0x40a4, 0x603e, 0x6042, 0x604e,
-+ 0x6052, 0x6056, 0x605a, 0x605e, 0x6062, 0x6066, 0x606a, 0x606e,
-+ 0x6072, 0x6076, 0x607a, 0x607e, 0x6082, 0x6086, 0x608a, 0x608e,
-+ 0x6092, 0x6096, 0x609a, 0x609e, 0x60ae, 0x61a2, 0x00d6, 0x60a4,
-+ 0xa06d, 0x0110, 0x080c, 0x160b, 0x60a7, 0x0000, 0x60a8, 0xa06d,
-+ 0x0110, 0x080c, 0x160b, 0x60ab, 0x0000, 0x00de, 0xa006, 0x604a,
-+ 0x6810, 0x603a, 0x680c, 0x6046, 0x6814, 0xa084, 0x00ff, 0x6042,
-+ 0x014e, 0x013e, 0x015e, 0x003e, 0x00de, 0x0005, 0x0126, 0x2091,
-+ 0x8000, 0x6944, 0x6e48, 0xa684, 0x3fff, 0xa082, 0x4000, 0x1a04,
-+ 0x4cd4, 0xa18c, 0xff00, 0x810f, 0xa182, 0x00ff, 0x1a04, 0x4cd9,
-+ 0x2001, 0xb40c, 0x2004, 0xa084, 0x0003, 0x01c0, 0x2001, 0xb40c,
-+ 0x2004, 0xd084, 0x1904, 0x4cbc, 0xa188, 0xb535, 0x2104, 0xa065,
-+ 0x0904, 0x4cbc, 0x6004, 0xa084, 0x00ff, 0xa08e, 0x0006, 0x1904,
-+ 0x4cbc, 0x6000, 0xd0c4, 0x0904, 0x4cbc, 0x0068, 0xa188, 0xb535,
-+ 0x2104, 0xa065, 0x0904, 0x4ca0, 0x6004, 0xa084, 0x00ff, 0xa08e,
-+ 0x0006, 0x1904, 0x4ca5, 0x60a4, 0xa00d, 0x0118, 0x080c, 0x5195,
-+ 0x05d0, 0x60a8, 0xa00d, 0x0188, 0x080c, 0x51e0, 0x1170, 0x694c,
-+ 0xd1fc, 0x1118, 0x080c, 0x4e9f, 0x0448, 0x080c, 0x4e4e, 0x694c,
-+ 0xd1ec, 0x1520, 0x080c, 0x5087, 0x0408, 0x694c, 0xa184, 0xa000,
-+ 0x0178, 0xd1ec, 0x0140, 0xd1fc, 0x0118, 0x080c, 0x5096, 0x0028,
-+ 0x080c, 0x5096, 0x0028, 0xd1fc, 0x0118, 0x080c, 0x4e4e, 0x0070,
-+ 0x6050, 0xa00d, 0x0130, 0x2d00, 0x200a, 0x6803, 0x0000, 0x6052,
-+ 0x0028, 0x2d00, 0x6052, 0x604e, 0x6803, 0x0000, 0x080c, 0x6c6f,
-+ 0xa006, 0x012e, 0x0005, 0x2001, 0x0005, 0x2009, 0x0000, 0x04e8,
-+ 0x2001, 0x0028, 0x2009, 0x0000, 0x04c0, 0xa082, 0x0006, 0x12a0,
-+ 0x2001, 0xb435, 0x2004, 0xd0ac, 0x1160, 0x60a0, 0xd0bc, 0x1148,
-+ 0x6100, 0xd1fc, 0x0904, 0x4c5b, 0x2001, 0x0029, 0x2009, 0x1000,
-+ 0x0420, 0x2001, 0x0028, 0x00a8, 0x2009, 0xb40c, 0x210c, 0xd18c,
-+ 0x0118, 0x2001, 0x0004, 0x0068, 0xd184, 0x0118, 0x2001, 0x0004,
-+ 0x0040, 0x2001, 0x0029, 0x6100, 0xd1fc, 0x0118, 0x2009, 0x1000,
-+ 0x0060, 0x2009, 0x0000, 0x0048, 0x2001, 0x0029, 0x2009, 0x0000,
-+ 0x0020, 0x2001, 0x0029, 0x2009, 0x0000, 0xa005, 0x012e, 0x0005,
-+ 0x00e6, 0x0126, 0x2091, 0x8000, 0x6844, 0x8007, 0xa084, 0x00ff,
-+ 0x2008, 0xa182, 0x00ff, 0x1a04, 0x4d33, 0xa188, 0xb535, 0x2104,
-+ 0xa065, 0x01c0, 0x6004, 0xa084, 0x00ff, 0xa08e, 0x0006, 0x11a8,
-+ 0x2c70, 0x080c, 0x856a, 0x05e8, 0x2e00, 0x601a, 0x2d00, 0x6012,
-+ 0x600b, 0xffff, 0x601f, 0x000a, 0x2009, 0x0003, 0x080c, 0x85ef,
-+ 0xa006, 0x0460, 0x2001, 0x0028, 0x0440, 0xa082, 0x0006, 0x1298,
-+ 0x2001, 0xb435, 0x2004, 0xd0ac, 0x1158, 0x60a0, 0xd0bc, 0x1140,
-+ 0x6100, 0xd1fc, 0x09e8, 0x2001, 0x0029, 0x2009, 0x1000, 0x00a8,
-+ 0x2001, 0x0028, 0x0090, 0x2009, 0xb40c, 0x210c, 0xd18c, 0x0118,
-+ 0x2001, 0x0004, 0x0050, 0xd184, 0x0118, 0x2001, 0x0004, 0x0028,
-+ 0x2001, 0x0029, 0x0010, 0x2001, 0x0029, 0xa005, 0x012e, 0x00ee,
-+ 0x0005, 0x2001, 0x002c, 0x0cc8, 0x00f6, 0x00e6, 0x0126, 0x2091,
-+ 0x8000, 0x2011, 0x0000, 0x2079, 0xb400, 0x6944, 0xa18c, 0xff00,
-+ 0x810f, 0xa182, 0x00ff, 0x1a04, 0x4e05, 0x2001, 0xb40c, 0x2004,
-+ 0xa084, 0x0003, 0x1904, 0x4df3, 0x080c, 0x4f6a, 0x11a0, 0x6004,
-+ 0xa084, 0x00ff, 0xa082, 0x0006, 0x1270, 0x6864, 0xa0c6, 0x006f,
-+ 0x0150, 0x2001, 0xb435, 0x2004, 0xd0ac, 0x1904, 0x4dee, 0x60a0,
-+ 0xd0bc, 0x1904, 0x4dee, 0x6864, 0xa0c6, 0x006f, 0x0118, 0x2008,
-+ 0x0804, 0x4db7, 0x6968, 0x2140, 0xa18c, 0xff00, 0x810f, 0x78d4,
-+ 0xd0ac, 0x1118, 0xa182, 0x0080, 0x06d0, 0xa182, 0x00ff, 0x16b8,
-+ 0x6a70, 0x6b6c, 0x7870, 0xa306, 0x1160, 0x7874, 0xa24e, 0x1118,
-+ 0x2208, 0x2310, 0x0460, 0xa9cc, 0xff00, 0x1118, 0x2208, 0x2310,
-+ 0x0430, 0x080c, 0x3d81, 0x2c70, 0x0550, 0x2009, 0x0000, 0x2011,
-+ 0x0000, 0xa0c6, 0x4000, 0x1160, 0x0006, 0x2e60, 0x080c, 0x520b,
-+ 0x1108, 0xc185, 0x7000, 0xd0bc, 0x0108, 0xc18d, 0x000e, 0x0088,
-+ 0xa0c6, 0x4007, 0x1110, 0x2408, 0x0060, 0xa0c6, 0x4008, 0x1118,
-+ 0x2708, 0x2610, 0x0030, 0xa0c6, 0x4009, 0x1108, 0x0010, 0x2001,
-+ 0x4006, 0x6866, 0x696a, 0x6a6e, 0x2001, 0x0030, 0x0450, 0x080c,
-+ 0x856a, 0x1138, 0x2001, 0x4005, 0x2009, 0x0003, 0x2011, 0x0000,
-+ 0x0c80, 0x2e00, 0x601a, 0x080c, 0x9fb8, 0x2d00, 0x6012, 0x601f,
-+ 0x0001, 0x6838, 0xd88c, 0x0108, 0xc0f5, 0x683a, 0x0126, 0x2091,
-+ 0x8000, 0x080c, 0x2c60, 0x012e, 0x2001, 0x0000, 0x080c, 0x4eac,
-+ 0x2001, 0x0002, 0x080c, 0x4ebe, 0x2009, 0x0002, 0x080c, 0x85ef,
-+ 0xa006, 0xa005, 0x012e, 0x00ee, 0x00fe, 0x0005, 0x2001, 0x0028,
-+ 0x2009, 0x0000, 0x0cb0, 0x2009, 0xb40c, 0x210c, 0xd18c, 0x0118,
-+ 0x2001, 0x0004, 0x0038, 0xd184, 0x0118, 0x2001, 0x0004, 0x0010,
-+ 0x2001, 0x0029, 0x2009, 0x0000, 0x0c20, 0x2001, 0x0029, 0x2009,
-+ 0x0000, 0x08f8, 0x6944, 0x6e48, 0xa684, 0x3fff, 0xa082, 0x4000,
-+ 0x16b8, 0xa18c, 0xff00, 0x810f, 0xa182, 0x00ff, 0x12e0, 0xa188,
-+ 0xb535, 0x2104, 0xa065, 0x01b8, 0x6004, 0xa084, 0x00ff, 0xa08e,
-+ 0x0006, 0x11b0, 0x684c, 0xd0ec, 0x0120, 0x080c, 0x5096, 0x0431,
-+ 0x0030, 0x0421, 0x684c, 0xd0fc, 0x0110, 0x080c, 0x5087, 0x080c,
-+ 0x50d4, 0xa006, 0x00c8, 0x2001, 0x0028, 0x2009, 0x0000, 0x00a0,
-+ 0xa082, 0x0006, 0x1240, 0x6100, 0xd1fc, 0x0d20, 0x2001, 0x0029,
-+ 0x2009, 0x1000, 0x0048, 0x2001, 0x0029, 0x2009, 0x0000, 0x0020,
-+ 0x2001, 0x0029, 0x2009, 0x0000, 0xa005, 0x0005, 0x0126, 0x2091,
-+ 0x8000, 0x6050, 0xa00d, 0x0138, 0x2d00, 0x200a, 0x6803, 0x0000,
-+ 0x6052, 0x012e, 0x0005, 0x2d00, 0x6052, 0x604e, 0x6803, 0x0000,
-+ 0x0cc0, 0x0126, 0x2091, 0x8000, 0x604c, 0xa005, 0x0170, 0x00e6,
-+ 0x2071, 0xb6e0, 0x7004, 0xa086, 0x0002, 0x0168, 0x00ee, 0x604c,
-+ 0x6802, 0x2d00, 0x604e, 0x012e, 0x0005, 0x2d00, 0x6052, 0x604e,
-+ 0x6803, 0x0000, 0x0cc0, 0x701c, 0xac06, 0x1d80, 0x604c, 0x2070,
-+ 0x7000, 0x6802, 0x2d00, 0x7002, 0x00ee, 0x012e, 0x0005, 0x0126,
-+ 0x2091, 0x8000, 0x604c, 0xa06d, 0x0130, 0x6800, 0xa005, 0x1108,
-+ 0x6052, 0x604e, 0xad05, 0x012e, 0x0005, 0x604c, 0xa06d, 0x0130,
-+ 0x6800, 0xa005, 0x1108, 0x6052, 0x604e, 0xad05, 0x0005, 0x6803,
-+ 0x0000, 0x6084, 0xa00d, 0x0120, 0x2d00, 0x200a, 0x6086, 0x0005,
-+ 0x2d00, 0x6086, 0x6082, 0x0cd8, 0x0126, 0x00c6, 0x0026, 0x2091,
-+ 0x8000, 0x6218, 0x2260, 0x6200, 0xa005, 0x0110, 0xc285, 0x0008,
-+ 0xc284, 0x6202, 0x002e, 0x00ce, 0x012e, 0x0005, 0x0126, 0x00c6,
-+ 0x2091, 0x8000, 0x6218, 0x2260, 0x6204, 0x0006, 0xa086, 0x0006,
-+ 0x1180, 0x609c, 0xd0ac, 0x0168, 0x2001, 0xb453, 0x2004, 0xd0a4,
-+ 0x0140, 0xa284, 0xff00, 0x8007, 0xa086, 0x0007, 0x1110, 0x2011,
-+ 0x0600, 0x000e, 0xa294, 0xff00, 0xa215, 0x6206, 0x0006, 0xa086,
-+ 0x0006, 0x1128, 0x6290, 0x82ff, 0x1110, 0x080c, 0x1511, 0x000e,
-+ 0x00ce, 0x012e, 0x0005, 0x0126, 0x00c6, 0x2091, 0x8000, 0x6218,
-+ 0x2260, 0x6204, 0x0006, 0xa086, 0x0006, 0x1178, 0x609c, 0xd0a4,
-+ 0x0160, 0x2001, 0xb453, 0x2004, 0xd0ac, 0x1138, 0xa284, 0x00ff,
-+ 0xa086, 0x0007, 0x1110, 0x2011, 0x0006, 0x000e, 0xa294, 0x00ff,
-+ 0x8007, 0xa215, 0x6206, 0x00ce, 0x012e, 0x0005, 0x0026, 0xa182,
-+ 0x00ff, 0x0218, 0xa085, 0x0001, 0x00b0, 0xa190, 0xb535, 0x2204,
-+ 0xa065, 0x1180, 0x0016, 0x00d6, 0x080c, 0x15db, 0x2d60, 0x00de,
-+ 0x001e, 0x0d80, 0x2c00, 0x2012, 0x60a7, 0x0000, 0x60ab, 0x0000,
-+ 0x080c, 0x4bc5, 0xa006, 0x002e, 0x0005, 0x0126, 0x2091, 0x8000,
-+ 0x0026, 0xa182, 0x00ff, 0x0218, 0xa085, 0x0001, 0x0480, 0x00d6,
-+ 0xa190, 0xb535, 0x2204, 0xa06d, 0x0540, 0x2013, 0x0000, 0x00d6,
-+ 0x00c6, 0x2d60, 0x60a4, 0xa06d, 0x0110, 0x080c, 0x160b, 0x60a8,
-+ 0xa06d, 0x0110, 0x080c, 0x160b, 0x00ce, 0x00de, 0x00d6, 0x00c6,
-+ 0x68ac, 0x2060, 0x8cff, 0x0168, 0x600c, 0x0006, 0x6010, 0x2068,
-+ 0x080c, 0x9beb, 0x0110, 0x080c, 0x161b, 0x080c, 0x85c0, 0x00ce,
-+ 0x0c88, 0x00ce, 0x00de, 0x080c, 0x160b, 0x00de, 0xa006, 0x002e,
-+ 0x012e, 0x0005, 0x0016, 0xa182, 0x00ff, 0x0218, 0xa085, 0x0001,
-+ 0x0030, 0xa188, 0xb535, 0x2104, 0xa065, 0x0dc0, 0xa006, 0x001e,
-+ 0x0005, 0x00d6, 0x0156, 0x0136, 0x0146, 0x600b, 0x0000, 0x600f,
-+ 0x0000, 0x6000, 0xc08c, 0x6002, 0x080c, 0x5a90, 0x1558, 0x60a0,
-+ 0xa086, 0x007e, 0x2069, 0xba90, 0x0130, 0x2001, 0xb435, 0x2004,
-+ 0xd0ac, 0x1500, 0x0098, 0x2d04, 0xd0e4, 0x01e0, 0x00d6, 0x2069,
-+ 0xba8e, 0x00c6, 0x2061, 0xb6b2, 0x6810, 0x2062, 0x6814, 0x6006,
-+ 0x6818, 0x600a, 0x681c, 0x600e, 0x00ce, 0x00de, 0x8d69, 0x2d04,
-+ 0x2069, 0x0140, 0xa005, 0x1110, 0x2001, 0x0001, 0x6886, 0x2069,
-+ 0xb400, 0x68a6, 0x2069, 0xba8e, 0x6808, 0x605e, 0x6810, 0x6062,
-+ 0x6138, 0xa10a, 0x0208, 0x603a, 0x6814, 0x6066, 0x2099, 0xba96,
-+ 0xac88, 0x000a, 0x21a0, 0x20a9, 0x0004, 0x53a3, 0x2099, 0xba9a,
-+ 0xac88, 0x0006, 0x21a0, 0x20a9, 0x0004, 0x53a3, 0x2069, 0xbaae,
-+ 0x6808, 0x606a, 0x690c, 0x616e, 0x6810, 0x6072, 0x6818, 0x6076,
-+ 0x60a0, 0xa086, 0x007e, 0x1120, 0x2069, 0xba8e, 0x690c, 0x616e,
-+ 0xa182, 0x0211, 0x1218, 0x2009, 0x0008, 0x0400, 0xa182, 0x0259,
-+ 0x1218, 0x2009, 0x0007, 0x00d0, 0xa182, 0x02c1, 0x1218, 0x2009,
-+ 0x0006, 0x00a0, 0xa182, 0x0349, 0x1218, 0x2009, 0x0005, 0x0070,
-+ 0xa182, 0x0421, 0x1218, 0x2009, 0x0004, 0x0040, 0xa182, 0x0581,
-+ 0x1218, 0x2009, 0x0003, 0x0010, 0x2009, 0x0002, 0x6192, 0x014e,
-+ 0x013e, 0x015e, 0x00de, 0x0005, 0x0016, 0x0026, 0x00e6, 0x2071,
-+ 0xba8d, 0x2e04, 0x6896, 0x2071, 0xba8e, 0x7004, 0x689a, 0x701c,
-+ 0x689e, 0x6a00, 0x2009, 0xb472, 0x210c, 0xd0bc, 0x0120, 0xd1ec,
-+ 0x0110, 0xc2ad, 0x0008, 0xc2ac, 0xd0c4, 0x0120, 0xd1e4, 0x0110,
-+ 0xc2bd, 0x0008, 0xc2bc, 0x6a02, 0x00ee, 0x002e, 0x001e, 0x0005,
-+ 0x00d6, 0x0126, 0x2091, 0x8000, 0x60a4, 0xa06d, 0x01c0, 0x6900,
-+ 0x81ff, 0x1540, 0x6a04, 0xa282, 0x0010, 0x1648, 0xad88, 0x0004,
-+ 0x20a9, 0x0010, 0x2104, 0xa086, 0xffff, 0x0128, 0x8108, 0x1f04,
-+ 0x5042, 0x080c, 0x1511, 0x260a, 0x8210, 0x6a06, 0x0098, 0x080c,
-+ 0x15f4, 0x01a8, 0x2d00, 0x60a6, 0x6803, 0x0000, 0xad88, 0x0004,
-+ 0x20a9, 0x0010, 0x200b, 0xffff, 0x8108, 0x1f04, 0x505a, 0x6807,
-+ 0x0001, 0x6e12, 0xa085, 0x0001, 0x012e, 0x00de, 0x0005, 0xa006,
-+ 0x0cd8, 0x0126, 0x2091, 0x8000, 0x00d6, 0x60a4, 0xa00d, 0x01a0,
-+ 0x2168, 0x6800, 0xa005, 0x1160, 0x080c, 0x5195, 0x1168, 0x200b,
-+ 0xffff, 0x6804, 0xa08a, 0x0002, 0x0218, 0x8001, 0x6806, 0x0020,
-+ 0x080c, 0x160b, 0x60a7, 0x0000, 0x00de, 0x012e, 0x0005, 0x0126,
-+ 0x2091, 0x8000, 0x080c, 0x51f3, 0x0010, 0x080c, 0x4e4e, 0x080c,
-+ 0x510d, 0x1dd8, 0x080c, 0x50d4, 0x012e, 0x0005, 0x00d6, 0x0126,
-+ 0x2091, 0x8000, 0x60a8, 0xa06d, 0x01c0, 0x6950, 0x81ff, 0x1540,
-+ 0x6a54, 0xa282, 0x0010, 0x1670, 0xad88, 0x0018, 0x20a9, 0x0010,
-+ 0x2104, 0xa086, 0xffff, 0x0128, 0x8108, 0x1f04, 0x50a8, 0x080c,
-+ 0x1511, 0x260a, 0x8210, 0x6a56, 0x0098, 0x080c, 0x15f4, 0x01d0,
-+ 0x2d00, 0x60aa, 0x6853, 0x0000, 0xad88, 0x0018, 0x20a9, 0x0010,
-+ 0x200b, 0xffff, 0x8108, 0x1f04, 0x50c0, 0x6857, 0x0001, 0x6e62,
-+ 0x0010, 0x080c, 0x4e9f, 0x0089, 0x1de0, 0xa085, 0x0001, 0x012e,
-+ 0x00de, 0x0005, 0xa006, 0x0cd8, 0x0126, 0x2091, 0x8000, 0x080c,
-+ 0x6c6f, 0x012e, 0x0005, 0xa01e, 0x0010, 0x2019, 0x0001, 0xa00e,
-+ 0x0126, 0x2091, 0x8000, 0x604c, 0x2068, 0x6000, 0xd0dc, 0x1170,
-+ 0x8dff, 0x01f8, 0x83ff, 0x0120, 0x6848, 0xa606, 0x0158, 0x0030,
-+ 0x683c, 0xa406, 0x1118, 0x6840, 0xa506, 0x0120, 0x2d08, 0x6800,
-+ 0x2068, 0x0c70, 0x080c, 0x80c8, 0x6a00, 0x604c, 0xad06, 0x1110,
-+ 0x624e, 0x0018, 0xa180, 0x0000, 0x2202, 0x82ff, 0x1110, 0x6152,
-+ 0x8dff, 0x012e, 0x0005, 0xa01e, 0x0010, 0x2019, 0x0001, 0xa00e,
-+ 0x6080, 0x2068, 0x8dff, 0x01e8, 0x83ff, 0x0120, 0x6848, 0xa606,
-+ 0x0158, 0x0030, 0x683c, 0xa406, 0x1118, 0x6840, 0xa506, 0x0120,
-+ 0x2d08, 0x6800, 0x2068, 0x0c70, 0x6a00, 0x6080, 0xad06, 0x1110,
-+ 0x6282, 0x0018, 0xa180, 0x0000, 0x2202, 0x82ff, 0x1110, 0x6186,
-+ 0x8dff, 0x0005, 0xa016, 0x080c, 0x518f, 0x1110, 0x2011, 0x0001,
-+ 0x080c, 0x51da, 0x1110, 0xa295, 0x0002, 0x0005, 0x080c, 0x520b,
-+ 0x0118, 0x080c, 0x9ca0, 0x0010, 0xa085, 0x0001, 0x0005, 0x080c,
-+ 0x520b, 0x0118, 0x080c, 0x9c30, 0x0010, 0xa085, 0x0001, 0x0005,
-+ 0x080c, 0x520b, 0x0118, 0x080c, 0x9c83, 0x0010, 0xa085, 0x0001,
-+ 0x0005, 0x080c, 0x520b, 0x0118, 0x080c, 0x9c4c, 0x0010, 0xa085,
-+ 0x0001, 0x0005, 0x080c, 0x520b, 0x0118, 0x080c, 0x9cbc, 0x0010,
-+ 0xa085, 0x0001, 0x0005, 0x0126, 0x0006, 0x00d6, 0x2091, 0x8000,
-+ 0x6080, 0xa06d, 0x01a0, 0x6800, 0x0006, 0x6837, 0x0103, 0x6b4a,
-+ 0x6847, 0x0000, 0x080c, 0x9e5d, 0x0006, 0x6000, 0xd0fc, 0x0110,
-+ 0x080c, 0xb30c, 0x000e, 0x080c, 0x53c9, 0x000e, 0x0c50, 0x6083,
-+ 0x0000, 0x6087, 0x0000, 0x00de, 0x000e, 0x012e, 0x0005, 0x60a4,
-+ 0xa00d, 0x1118, 0xa085, 0x0001, 0x0005, 0x00e6, 0x2170, 0x7000,
-+ 0xa005, 0x1168, 0x20a9, 0x0010, 0xae88, 0x0004, 0x2104, 0xa606,
-+ 0x0130, 0x8108, 0x1f04, 0x519e, 0xa085, 0x0001, 0x0008, 0xa006,
-+ 0x00ee, 0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x60a4, 0xa06d,
-+ 0x1128, 0x080c, 0x15f4, 0x01a0, 0x2d00, 0x60a6, 0x6803, 0x0001,
-+ 0x6807, 0x0000, 0xad88, 0x0004, 0x20a9, 0x0010, 0x200b, 0xffff,
-+ 0x8108, 0x1f04, 0x51be, 0xa085, 0x0001, 0x012e, 0x00de, 0x0005,
-+ 0xa006, 0x0cd8, 0x00d6, 0x0126, 0x2091, 0x8000, 0x60a4, 0xa06d,
-+ 0x0130, 0x60a7, 0x0000, 0x080c, 0x160b, 0xa085, 0x0001, 0x012e,
-+ 0x00de, 0x0005, 0x60a8, 0xa00d, 0x1118, 0xa085, 0x0001, 0x0005,
-+ 0x00e6, 0x2170, 0x7050, 0xa005, 0x1160, 0x20a9, 0x0010, 0xae88,
-+ 0x0018, 0x2104, 0xa606, 0x0128, 0x8108, 0x1f04, 0x51e9, 0xa085,
-+ 0x0001, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x0c19, 0x1188,
-+ 0x200b, 0xffff, 0x00d6, 0x60a8, 0x2068, 0x6854, 0xa08a, 0x0002,
-+ 0x0218, 0x8001, 0x6856, 0x0020, 0x080c, 0x160b, 0x60ab, 0x0000,
-+ 0x00de, 0x012e, 0x0005, 0x609c, 0xd0a4, 0x0005, 0x00f6, 0x080c,
-+ 0x5a90, 0x01b0, 0x71b8, 0x81ff, 0x1198, 0x71d4, 0xd19c, 0x0180,
-+ 0x2001, 0x007e, 0xa080, 0xb535, 0x2004, 0xa07d, 0x0148, 0x7804,
-+ 0xa084, 0x00ff, 0xa086, 0x0006, 0x1118, 0x7800, 0xc0ed, 0x7802,
-+ 0x2079, 0xb452, 0x7804, 0xd0a4, 0x01e8, 0x0156, 0x00c6, 0x20a9,
-+ 0x007f, 0x2009, 0x0000, 0x0016, 0x080c, 0x4f6a, 0x1168, 0x6004,
-+ 0xa084, 0xff00, 0x8007, 0xa096, 0x0004, 0x0118, 0xa086, 0x0006,
-+ 0x1118, 0x6000, 0xc0ed, 0x6002, 0x001e, 0x8108, 0x1f04, 0x5233,
-+ 0x00ce, 0x015e, 0x080c, 0x52ca, 0x0120, 0x2001, 0xb6b5, 0x200c,
-+ 0x0038, 0x2079, 0xb452, 0x7804, 0xd0a4, 0x0130, 0x2009, 0x07d0,
-+ 0x2011, 0x525e, 0x080c, 0x69e7, 0x00fe, 0x0005, 0x2011, 0x525e,
-+ 0x080c, 0x6961, 0x080c, 0x52ca, 0x01f0, 0x2001, 0xb5b3, 0x2004,
-+ 0xa080, 0x0000, 0x200c, 0xc1ec, 0x2102, 0x2001, 0xb453, 0x2004,
-+ 0xd0a4, 0x0130, 0x2009, 0x07d0, 0x2011, 0x525e, 0x080c, 0x69e7,
-+ 0x00e6, 0x2071, 0xb400, 0x7073, 0x0000, 0x7077, 0x0000, 0x080c,
-+ 0x2a7e, 0x00ee, 0x04b0, 0x0156, 0x00c6, 0x20a9, 0x007f, 0x2009,
-+ 0x0000, 0x0016, 0x080c, 0x4f6a, 0x1530, 0x6000, 0xd0ec, 0x0518,
-+ 0x0046, 0x62a0, 0xa294, 0x00ff, 0x8227, 0xa006, 0x2009, 0x0029,
-+ 0x080c, 0xb06b, 0x6000, 0xc0e5, 0xc0ec, 0x6002, 0x6004, 0xa084,
-+ 0x00ff, 0xa085, 0x0700, 0x6006, 0x2019, 0x0029, 0x080c, 0x6dba,
-+ 0x0076, 0x2039, 0x0000, 0x080c, 0x6cc7, 0x2009, 0x0000, 0x080c,
-+ 0xae05, 0x007e, 0x004e, 0x001e, 0x8108, 0x1f04, 0x5289, 0x00ce,
-+ 0x015e, 0x0005, 0x00c6, 0x6018, 0x2060, 0x6000, 0xc0ec, 0x6002,
-+ 0x00ce, 0x0005, 0x7818, 0x2004, 0xd0ac, 0x0005, 0x7818, 0x2004,
-+ 0xd0bc, 0x0005, 0x00f6, 0x2001, 0xb5b3, 0x2004, 0xa07d, 0x0110,
-+ 0x7800, 0xd0ec, 0x00fe, 0x0005, 0x0126, 0x0026, 0x2091, 0x8000,
-+ 0x0006, 0x62a0, 0xa290, 0xb535, 0x2204, 0xac06, 0x190c, 0x1511,
-+ 0x000e, 0x6200, 0xa005, 0x0110, 0xc2fd, 0x0008, 0xc2fc, 0x6202,
-+ 0x002e, 0x012e, 0x0005, 0x2011, 0xb435, 0x2204, 0xd0cc, 0x0138,
-+ 0x2001, 0xb6b3, 0x200c, 0x2011, 0x52f8, 0x080c, 0x69e7, 0x0005,
-+ 0x2011, 0x52f8, 0x080c, 0x6961, 0x2011, 0xb435, 0x2204, 0xc0cc,
-+ 0x2012, 0x0005, 0x2071, 0xb514, 0x7003, 0x0001, 0x7007, 0x0000,
-+ 0x7013, 0x0000, 0x7017, 0x0000, 0x701b, 0x0000, 0x701f, 0x0000,
-+ 0x700b, 0x0000, 0x704b, 0x0001, 0x704f, 0x0000, 0x705b, 0x0020,
-+ 0x705f, 0x0040, 0x707f, 0x0000, 0x2071, 0xb67d, 0x7003, 0xb514,
-+ 0x7007, 0x0000, 0x700b, 0x0000, 0x700f, 0xb65d, 0x7013, 0x0020,
-+ 0x7017, 0x0040, 0x7037, 0x0000, 0x0005, 0x0016, 0x00e6, 0x2071,
-+ 0xb635, 0xa00e, 0x7186, 0x718a, 0x7097, 0x0001, 0x2001, 0xb453,
-+ 0x2004, 0xd0fc, 0x1150, 0x2001, 0xb453, 0x2004, 0xa00e, 0xd09c,
-+ 0x0108, 0x8108, 0x7102, 0x0804, 0x5393, 0x2001, 0xb472, 0x200c,
-+ 0xa184, 0x000f, 0x2009, 0xb473, 0x210c, 0x0002, 0x533b, 0x536e,
-+ 0x5375, 0x537f, 0x5384, 0x533b, 0x533b, 0x533b, 0x535e, 0x533b,
-+ 0x533b, 0x533b, 0x533b, 0x533b, 0x533b, 0x533b, 0x7003, 0x0004,
-+ 0x0136, 0x0146, 0x0156, 0x2099, 0xb476, 0x20a1, 0xb686, 0x20a9,
-+ 0x0004, 0x53a3, 0x015e, 0x014e, 0x013e, 0x0428, 0x708f, 0x0005,
-+ 0x7007, 0x0122, 0x2001, 0x0002, 0x0030, 0x708f, 0x0002, 0x7007,
-+ 0x0121, 0x2001, 0x0003, 0x7002, 0x7097, 0x0001, 0x0088, 0x7007,
-+ 0x0122, 0x2001, 0x0002, 0x0020, 0x7007, 0x0121, 0x2001, 0x0003,
-+ 0x7002, 0xa006, 0x7096, 0x708e, 0xa184, 0xff00, 0x8007, 0x709a,
-+ 0xa184, 0x00ff, 0x7092, 0x00ee, 0x001e, 0x0005, 0x00e6, 0x2071,
-+ 0xb514, 0x684c, 0xa005, 0x1130, 0x7028, 0xc085, 0x702a, 0xa085,
-+ 0x0001, 0x0428, 0x6a60, 0x7236, 0x6b64, 0x733a, 0x6868, 0x703e,
-+ 0x7076, 0x686c, 0x7042, 0x707a, 0x684c, 0x702e, 0x6844, 0x7032,
-+ 0x2009, 0x000d, 0x200a, 0x700b, 0x0000, 0x8007, 0x8006, 0x8006,
-+ 0xa08c, 0x003f, 0xa084, 0xffc0, 0xa210, 0x2100, 0xa319, 0x726e,
-+ 0x7372, 0x7028, 0xc084, 0x702a, 0x7007, 0x0001, 0xa006, 0x00ee,
-+ 0x0005, 0x0156, 0x00e6, 0x0026, 0x6838, 0xd0fc, 0x1904, 0x5422,
-+ 0x6804, 0xa00d, 0x0188, 0x00d6, 0x2071, 0xb400, 0xa016, 0x702c,
-+ 0x2168, 0x6904, 0x206a, 0x8210, 0x2d00, 0x81ff, 0x1dc8, 0x702e,
-+ 0x70b4, 0xa200, 0x70b6, 0x00de, 0x2071, 0xb514, 0x701c, 0xa005,
-+ 0x1904, 0x5432, 0x20a9, 0x0032, 0x0f04, 0x5430, 0x0e04, 0x53ec,
-+ 0x2071, 0xb635, 0x7200, 0x82ff, 0x05d8, 0x6934, 0xa186, 0x0103,
-+ 0x1904, 0x5440, 0x6948, 0x6844, 0xa105, 0x1540, 0x2009, 0x8020,
-+ 0x2200, 0x0002, 0x5430, 0x5407, 0x5458, 0x5464, 0x5430, 0x2071,
-+ 0x0000, 0x20a9, 0x0032, 0x0f04, 0x5430, 0x7018, 0xd084, 0x1dd8,
-+ 0x7122, 0x683c, 0x7026, 0x6840, 0x702a, 0x701b, 0x0001, 0x2091,
-+ 0x4080, 0x2071, 0xb400, 0x702c, 0x206a, 0x2d00, 0x702e, 0x70b4,
-+ 0x8000, 0x70b6, 0x002e, 0x00ee, 0x015e, 0x0005, 0x6844, 0xa086,
-+ 0x0100, 0x1130, 0x6868, 0xa005, 0x1118, 0x2009, 0x8020, 0x0880,
-+ 0x2071, 0xb514, 0x2d08, 0x206b, 0x0000, 0x7010, 0x8000, 0x7012,
-+ 0x7018, 0xa06d, 0x711a, 0x0110, 0x6902, 0x0008, 0x711e, 0x0c10,
-+ 0xa18c, 0x00ff, 0xa186, 0x0017, 0x0130, 0xa186, 0x001e, 0x0118,
-+ 0xa18e, 0x001f, 0x1d28, 0x684c, 0xd0cc, 0x0d10, 0x6850, 0xa084,
-+ 0x00ff, 0xa086, 0x0001, 0x19e0, 0x2009, 0x8021, 0x0804, 0x5400,
-+ 0x7084, 0x8008, 0xa092, 0x001e, 0x1a98, 0x7186, 0xae90, 0x0003,
-+ 0xa210, 0x683c, 0x2012, 0x0078, 0x7084, 0x8008, 0xa092, 0x000f,
-+ 0x1a38, 0x7186, 0xae90, 0x0003, 0x8003, 0xa210, 0x683c, 0x2012,
-+ 0x8210, 0x6840, 0x2012, 0x7088, 0xa10a, 0x0a04, 0x5419, 0x718c,
-+ 0x7084, 0xa10a, 0x0a04, 0x5419, 0x2071, 0x0000, 0x7018, 0xd084,
-+ 0x1904, 0x5419, 0x2071, 0xb635, 0x7000, 0xa086, 0x0002, 0x1150,
-+ 0x080c, 0x56e3, 0x2071, 0x0000, 0x701b, 0x0001, 0x2091, 0x4080,
-+ 0x0804, 0x5419, 0x080c, 0x570d, 0x2071, 0x0000, 0x701b, 0x0001,
-+ 0x2091, 0x4080, 0x0804, 0x5419, 0x0006, 0x684c, 0x0006, 0x6837,
-+ 0x0103, 0x20a9, 0x001c, 0xad80, 0x0011, 0x20a0, 0x2001, 0x0000,
-+ 0x40a4, 0x000e, 0xa084, 0x00ff, 0x684e, 0x000e, 0x684a, 0x6952,
-+ 0x0005, 0x2071, 0xb514, 0x7004, 0x0002, 0x54bf, 0x54d0, 0x56ce,
-+ 0x56cf, 0x56dc, 0x56e2, 0x54c0, 0x56bf, 0x5655, 0x56ab, 0x0005,
-+ 0x0126, 0x2091, 0x8000, 0x0e04, 0x54cf, 0x2009, 0x000d, 0x7030,
-+ 0x200a, 0x2091, 0x4080, 0x7007, 0x0001, 0x700b, 0x0000, 0x012e,
-+ 0x2069, 0xb6f3, 0x683c, 0xa005, 0x03f8, 0x11f0, 0x0126, 0x2091,
-+ 0x8000, 0x2069, 0x0000, 0x6934, 0x2001, 0xb520, 0x2004, 0xa10a,
-+ 0x0170, 0x0e04, 0x54f3, 0x2069, 0x0000, 0x6818, 0xd084, 0x1158,
-+ 0x2009, 0x8040, 0x6922, 0x681b, 0x0001, 0x2091, 0x4080, 0x2069,
-+ 0xb6f3, 0x683f, 0xffff, 0x012e, 0x2069, 0xb400, 0x6848, 0x6968,
-+ 0xa102, 0x2069, 0xb635, 0x688a, 0x6984, 0x701c, 0xa06d, 0x0120,
-+ 0x81ff, 0x0904, 0x5549, 0x00a0, 0x81ff, 0x0904, 0x560f, 0x2071,
-+ 0xb635, 0x7184, 0x7088, 0xa10a, 0x1258, 0x7190, 0x2071, 0xb6f3,
-+ 0x7038, 0xa005, 0x0128, 0x1b04, 0x560f, 0x713a, 0x0804, 0x560f,
-+ 0x2071, 0xb635, 0x718c, 0x0126, 0x2091, 0x8000, 0x7084, 0xa10a,
-+ 0x0a04, 0x562a, 0x0e04, 0x55cb, 0x2071, 0x0000, 0x7018, 0xd084,
-+ 0x1904, 0x55cb, 0x2001, 0xffff, 0x2071, 0xb6f3, 0x703a, 0x2071,
-+ 0xb635, 0x7000, 0xa086, 0x0002, 0x1150, 0x080c, 0x56e3, 0x2071,
-+ 0x0000, 0x701b, 0x0001, 0x2091, 0x4080, 0x0804, 0x55cb, 0x080c,
-+ 0x570d, 0x2071, 0x0000, 0x701b, 0x0001, 0x2091, 0x4080, 0x0804,
-+ 0x55cb, 0x2071, 0xb635, 0x7000, 0xa005, 0x0904, 0x55f1, 0x6934,
-+ 0xa186, 0x0103, 0x1904, 0x55ce, 0x684c, 0xd0bc, 0x1904, 0x55f1,
-+ 0x6948, 0x6844, 0xa105, 0x1904, 0x55e6, 0x2009, 0x8020, 0x2071,
-+ 0xb635, 0x7000, 0x0002, 0x55f1, 0x55b1, 0x5589, 0x559b, 0x5568,
-+ 0x0136, 0x0146, 0x0156, 0x2099, 0xb476, 0x20a1, 0xb686, 0x20a9,
-+ 0x0004, 0x53a3, 0x015e, 0x014e, 0x013e, 0x2071, 0xb67d, 0xad80,
-+ 0x000f, 0x700e, 0x7013, 0x0002, 0x7007, 0x0002, 0x700b, 0x0000,
-+ 0x2e10, 0x080c, 0x163f, 0x2071, 0xb514, 0x7007, 0x0009, 0x0804,
-+ 0x560f, 0x7084, 0x8008, 0xa092, 0x001e, 0x1a04, 0x560f, 0xae90,
-+ 0x0003, 0xa210, 0x683c, 0x2012, 0x7186, 0x2071, 0xb514, 0x080c,
-+ 0x5764, 0x0804, 0x560f, 0x7084, 0x8008, 0xa092, 0x000f, 0x1a04,
-+ 0x560f, 0xae90, 0x0003, 0x8003, 0xa210, 0x683c, 0x2012, 0x8210,
-+ 0x6840, 0x2012, 0x7186, 0x2071, 0xb514, 0x080c, 0x5764, 0x0804,
-+ 0x560f, 0x0126, 0x2091, 0x8000, 0x0e04, 0x55cb, 0x2071, 0x0000,
-+ 0x7018, 0xd084, 0x1180, 0x7122, 0x683c, 0x7026, 0x6840, 0x702a,
-+ 0x701b, 0x0001, 0x2091, 0x4080, 0x012e, 0x2071, 0xb514, 0x080c,
-+ 0x5764, 0x0804, 0x560f, 0x012e, 0x0804, 0x560f, 0xa18c, 0x00ff,
-+ 0xa186, 0x0017, 0x0130, 0xa186, 0x001e, 0x0118, 0xa18e, 0x001f,
-+ 0x11c0, 0x684c, 0xd0cc, 0x01a8, 0x6850, 0xa084, 0x00ff, 0xa086,
-+ 0x0001, 0x1178, 0x2009, 0x8021, 0x0804, 0x555f, 0x6844, 0xa086,
-+ 0x0100, 0x1138, 0x6868, 0xa005, 0x1120, 0x2009, 0x8020, 0x0804,
-+ 0x555f, 0x2071, 0xb514, 0x080c, 0x5776, 0x01c8, 0x2071, 0xb514,
-+ 0x700f, 0x0001, 0x6934, 0xa184, 0x00ff, 0xa086, 0x0003, 0x1130,
-+ 0x810f, 0xa18c, 0x00ff, 0x8101, 0x0108, 0x710e, 0x7007, 0x0003,
-+ 0x080c, 0x578f, 0x7050, 0xa086, 0x0100, 0x0904, 0x56cf, 0x0126,
-+ 0x2091, 0x8000, 0x2071, 0xb514, 0x7008, 0xa086, 0x0001, 0x1180,
-+ 0x0e04, 0x5628, 0x2009, 0x000d, 0x7030, 0x200a, 0x2091, 0x4080,
-+ 0x700b, 0x0000, 0x7004, 0xa086, 0x0006, 0x1110, 0x7007, 0x0001,
-+ 0x012e, 0x0005, 0x2071, 0xb514, 0x080c, 0x5776, 0x0518, 0x2071,
-+ 0xb635, 0x7084, 0x700a, 0x20a9, 0x0020, 0x2099, 0xb636, 0x20a1,
-+ 0xb65d, 0x53a3, 0x7087, 0x0000, 0x2071, 0xb514, 0x2069, 0xb67d,
-+ 0x706c, 0x6826, 0x7070, 0x682a, 0x7074, 0x682e, 0x7078, 0x6832,
-+ 0x2d10, 0x080c, 0x163f, 0x7007, 0x0008, 0x2001, 0xffff, 0x2071,
-+ 0xb6f3, 0x703a, 0x012e, 0x0804, 0x560f, 0x2069, 0xb67d, 0x6808,
-+ 0xa08e, 0x0000, 0x0904, 0x56aa, 0xa08e, 0x0200, 0x0904, 0x56a8,
-+ 0xa08e, 0x0100, 0x1904, 0x56aa, 0x0126, 0x2091, 0x8000, 0x0e04,
-+ 0x56a6, 0x2069, 0x0000, 0x6818, 0xd084, 0x15c0, 0x702c, 0x7130,
-+ 0x8108, 0xa102, 0x0230, 0xa00e, 0x7034, 0x706e, 0x7038, 0x7072,
-+ 0x0048, 0x706c, 0xa080, 0x0040, 0x706e, 0x1220, 0x7070, 0xa081,
-+ 0x0000, 0x7072, 0x7132, 0x6936, 0x700b, 0x0000, 0x2001, 0xb65a,
-+ 0x2004, 0xa005, 0x1190, 0x6934, 0x2069, 0xb635, 0x689c, 0x699e,
-+ 0x2069, 0xb6f3, 0xa102, 0x1118, 0x683c, 0xa005, 0x1368, 0x2001,
-+ 0xb65b, 0x200c, 0x810d, 0x693e, 0x0038, 0x2009, 0x8040, 0x6922,
-+ 0x681b, 0x0001, 0x2091, 0x4080, 0x7007, 0x0001, 0x012e, 0x0010,
-+ 0x7007, 0x0005, 0x0005, 0x2001, 0xb67f, 0x2004, 0xa08e, 0x0100,
-+ 0x1128, 0x7007, 0x0001, 0x080c, 0x5764, 0x0005, 0xa08e, 0x0000,
-+ 0x0de0, 0xa08e, 0x0200, 0x1dc8, 0x7007, 0x0005, 0x0005, 0x701c,
-+ 0xa06d, 0x0158, 0x080c, 0x5776, 0x0140, 0x7007, 0x0003, 0x080c,
-+ 0x578f, 0x7050, 0xa086, 0x0100, 0x0110, 0x0005, 0x0005, 0x7050,
-+ 0xa09e, 0x0100, 0x1118, 0x7007, 0x0004, 0x0030, 0xa086, 0x0200,
-+ 0x1110, 0x7007, 0x0005, 0x0005, 0x080c, 0x5732, 0x7006, 0x080c,
-+ 0x5764, 0x0005, 0x0005, 0x00e6, 0x0156, 0x2071, 0xb635, 0x7184,
-+ 0x81ff, 0x0500, 0xa006, 0x7086, 0xae80, 0x0003, 0x2071, 0x0000,
-+ 0x21a8, 0x2014, 0x7226, 0x8000, 0x0f04, 0x5707, 0x2014, 0x722a,
-+ 0x8000, 0x0f04, 0x5707, 0x2014, 0x722e, 0x8000, 0x0f04, 0x5707,
-+ 0x2014, 0x723a, 0x8000, 0x0f04, 0x5707, 0x2014, 0x723e, 0xa180,
-+ 0x8030, 0x7022, 0x015e, 0x00ee, 0x0005, 0x00e6, 0x0156, 0x2071,
-+ 0xb635, 0x7184, 0x81ff, 0x01d8, 0xa006, 0x7086, 0xae80, 0x0003,
-+ 0x2071, 0x0000, 0x21a8, 0x2014, 0x7226, 0x8000, 0x2014, 0x722a,
-+ 0x8000, 0x0f04, 0x5729, 0x2014, 0x723a, 0x8000, 0x2014, 0x723e,
-+ 0x0018, 0x2001, 0x8020, 0x0010, 0x2001, 0x8042, 0x7022, 0x015e,
-+ 0x00ee, 0x0005, 0x702c, 0x7130, 0x8108, 0xa102, 0x0230, 0xa00e,
-+ 0x7034, 0x706e, 0x7038, 0x7072, 0x0048, 0x706c, 0xa080, 0x0040,
-+ 0x706e, 0x1220, 0x7070, 0xa081, 0x0000, 0x7072, 0x7132, 0x700c,
-+ 0x8001, 0x700e, 0x1180, 0x0126, 0x2091, 0x8000, 0x0e04, 0x575e,
-+ 0x2001, 0x000d, 0x2102, 0x2091, 0x4080, 0x2001, 0x0001, 0x700b,
-+ 0x0000, 0x012e, 0x0005, 0x2001, 0x0007, 0x0005, 0x2001, 0x0006,
-+ 0x700b, 0x0001, 0x012e, 0x0005, 0x701c, 0xa06d, 0x0170, 0x0126,
-+ 0x2091, 0x8000, 0x7010, 0x8001, 0x7012, 0x2d04, 0x701e, 0xa005,
-+ 0x1108, 0x701a, 0x012e, 0x080c, 0x160b, 0x0005, 0x2019, 0x000d,
-+ 0x2304, 0x230c, 0xa10e, 0x0130, 0x2304, 0x230c, 0xa10e, 0x0110,
-+ 0xa006, 0x0060, 0x732c, 0x8319, 0x7130, 0xa102, 0x1118, 0x2300,
-+ 0xa005, 0x0020, 0x0210, 0xa302, 0x0008, 0x8002, 0x0005, 0x2d00,
-+ 0x7026, 0xa080, 0x000d, 0x7056, 0x7053, 0x0000, 0x0126, 0x2091,
-+ 0x8000, 0x2009, 0xb712, 0x2104, 0xc08d, 0x200a, 0x012e, 0x080c,
-+ 0x1657, 0x0005, 0x708c, 0xa08a, 0x0029, 0x1220, 0xa082, 0x001d,
-+ 0x0033, 0x0010, 0x080c, 0x1511, 0x6027, 0x1e00, 0x0005, 0x589d,
-+ 0x5818, 0x5830, 0x586d, 0x588e, 0x58c8, 0x58da, 0x5830, 0x58b4,
-+ 0x57bc, 0x57ea, 0x57bb, 0x0005, 0x00d6, 0x2069, 0x0200, 0x6804,
-+ 0xa005, 0x1180, 0x6808, 0xa005, 0x1518, 0x708f, 0x0028, 0x2069,
-+ 0xb6c5, 0x2d04, 0x7002, 0x080c, 0x5b92, 0x6028, 0xa085, 0x0600,
-+ 0x602a, 0x00b0, 0x708f, 0x0028, 0x2069, 0xb6c5, 0x2d04, 0x7002,
-+ 0x6028, 0xa085, 0x0600, 0x602a, 0x00e6, 0x0036, 0x0046, 0x0056,
-+ 0x2071, 0xb723, 0x080c, 0x1dcd, 0x005e, 0x004e, 0x003e, 0x00ee,
-+ 0x00de, 0x0005, 0x00d6, 0x2069, 0x0200, 0x6804, 0xa005, 0x1180,
-+ 0x6808, 0xa005, 0x1518, 0x708f, 0x0028, 0x2069, 0xb6c5, 0x2d04,
-+ 0x7002, 0x080c, 0x5c1f, 0x6028, 0xa085, 0x0600, 0x602a, 0x00b0,
-+ 0x708f, 0x0028, 0x2069, 0xb6c5, 0x2d04, 0x7002, 0x6028, 0xa085,
-+ 0x0600, 0x602a, 0x00e6, 0x0036, 0x0046, 0x0056, 0x2071, 0xb723,
-+ 0x080c, 0x1dcd, 0x005e, 0x004e, 0x003e, 0x00ee, 0x00de, 0x0005,
-+ 0x6803, 0x0090, 0x6124, 0xd1e4, 0x1190, 0x080c, 0x5945, 0xd1d4,
-+ 0x1160, 0xd1dc, 0x1138, 0xd1cc, 0x0150, 0x708f, 0x0020, 0x080c,
-+ 0x5945, 0x0028, 0x708f, 0x001d, 0x0010, 0x708f, 0x001f, 0x0005,
-+ 0x6803, 0x0088, 0x6124, 0xd1cc, 0x1590, 0xd1dc, 0x1568, 0xd1e4,
-+ 0x1540, 0xa184, 0x1e00, 0x1580, 0x60e3, 0x0001, 0x600c, 0xc0b4,
-+ 0x600e, 0x080c, 0x5ac0, 0x080c, 0x2479, 0x0156, 0x6803, 0x0100,
-+ 0x20a9, 0x0014, 0x6804, 0xd0dc, 0x1118, 0x1f04, 0x584a, 0x0048,
-+ 0x20a9, 0x0014, 0x6803, 0x0080, 0x6804, 0xd0d4, 0x1130, 0x1f04,
-+ 0x5854, 0x080c, 0x5ae1, 0x015e, 0x0078, 0x015e, 0x708f, 0x0028,
-+ 0x0058, 0x708f, 0x001e, 0x0040, 0x708f, 0x001d, 0x0028, 0x708f,
-+ 0x0020, 0x0010, 0x708f, 0x001f, 0x0005, 0x60e3, 0x0001, 0x600c,
-+ 0xc0b4, 0x600e, 0x080c, 0x5ac0, 0x080c, 0x2479, 0x6803, 0x0080,
-+ 0x6124, 0xd1d4, 0x1180, 0xd1dc, 0x1158, 0xd1e4, 0x1130, 0xa184,
-+ 0x1e00, 0x1158, 0x708f, 0x0028, 0x0040, 0x708f, 0x001e, 0x0028,
-+ 0x708f, 0x001d, 0x0010, 0x708f, 0x001f, 0x0005, 0x6803, 0x00a0,
-+ 0x6124, 0xd1dc, 0x1138, 0xd1e4, 0x0138, 0x080c, 0x1e18, 0x708f,
-+ 0x001e, 0x0010, 0x708f, 0x001d, 0x0005, 0x080c, 0x59b7, 0x6124,
-+ 0xd1dc, 0x1188, 0x080c, 0x5945, 0x0016, 0x080c, 0x1e18, 0x001e,
-+ 0xd1d4, 0x1128, 0xd1e4, 0x0138, 0x708f, 0x001e, 0x0020, 0x708f,
-+ 0x001f, 0x080c, 0x5945, 0x0005, 0x6803, 0x00a0, 0x6124, 0xd1d4,
-+ 0x1160, 0xd1cc, 0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0140, 0x708f,
-+ 0x001e, 0x0028, 0x708f, 0x001d, 0x0010, 0x708f, 0x0021, 0x0005,
-+ 0x080c, 0x59b7, 0x6124, 0xd1d4, 0x1150, 0xd1dc, 0x1128, 0xd1e4,
-+ 0x0140, 0x708f, 0x001e, 0x0028, 0x708f, 0x001d, 0x0010, 0x708f,
-+ 0x001f, 0x0005, 0x6803, 0x0090, 0x6124, 0xd1d4, 0x1178, 0xd1cc,
-+ 0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0158, 0x708f, 0x001e, 0x0040,
-+ 0x708f, 0x001d, 0x0028, 0x708f, 0x0020, 0x0010, 0x708f, 0x001f,
-+ 0x0005, 0x0016, 0x00c6, 0x00d6, 0x00e6, 0x0126, 0x2061, 0x0100,
-+ 0x2069, 0x0140, 0x2071, 0xb400, 0x2091, 0x8000, 0x080c, 0x5a90,
-+ 0x11e8, 0x2001, 0xb40c, 0x200c, 0xd1b4, 0x01c0, 0xc1b4, 0x2102,
-+ 0x6027, 0x0200, 0xe000, 0xe000, 0x6024, 0xd0cc, 0x0158, 0x6803,
-+ 0x00a0, 0x2001, 0xb69f, 0x2003, 0x0001, 0x2001, 0xb400, 0x2003,
-+ 0x0001, 0x0428, 0x6028, 0xc0cd, 0x602a, 0x0408, 0x080c, 0x5aac,
-+ 0x0150, 0x080c, 0x5aa2, 0x1138, 0x2001, 0x0001, 0x080c, 0x2789,
-+ 0x080c, 0x5a67, 0x00a0, 0x080c, 0x59b4, 0x0178, 0x2001, 0x0001,
-+ 0x080c, 0x2789, 0x708c, 0xa086, 0x001e, 0x0120, 0x708c, 0xa086,
-+ 0x0022, 0x1118, 0x708f, 0x0025, 0x0010, 0x708f, 0x0021, 0x012e,
-+ 0x00ee, 0x00de, 0x00ce, 0x001e, 0x0005, 0x0026, 0x2011, 0x5956,
-+ 0x080c, 0x6a21, 0x002e, 0x0016, 0x0026, 0x2009, 0x0064, 0x2011,
-+ 0x5956, 0x080c, 0x6a18, 0x002e, 0x001e, 0x0005, 0x00e6, 0x00f6,
-+ 0x0016, 0x080c, 0x7d24, 0x2071, 0xb400, 0x080c, 0x58f1, 0x001e,
-+ 0x00fe, 0x00ee, 0x0005, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6,
-+ 0x00e6, 0x00f6, 0x0126, 0x080c, 0x7d24, 0x2061, 0x0100, 0x2069,
-+ 0x0140, 0x2071, 0xb400, 0x2091, 0x8000, 0x6028, 0xc09c, 0x602a,
-+ 0x2011, 0x0003, 0x080c, 0x801f, 0x2011, 0x0002, 0x080c, 0x8029,
-+ 0x080c, 0x7f03, 0x080c, 0x69d5, 0x0036, 0x2019, 0x0000, 0x080c,
-+ 0x7f8e, 0x003e, 0x60e3, 0x0000, 0x080c, 0xb3b2, 0x080c, 0xb3cd,
-+ 0x2001, 0xb400, 0x2003, 0x0004, 0x6027, 0x0008, 0x080c, 0x12d9,
-+ 0x2001, 0x0001, 0x080c, 0x2789, 0x012e, 0x00fe, 0x00ee, 0x00de,
-+ 0x00ce, 0x003e, 0x002e, 0x001e, 0x0005, 0x2001, 0xb400, 0x2004,
-+ 0xa086, 0x0004, 0x0140, 0x2001, 0xb69e, 0x2003, 0xaaaa, 0x2001,
-+ 0xb69f, 0x2003, 0x0000, 0x0005, 0x6020, 0xd09c, 0x0005, 0x6800,
-+ 0xa086, 0x00c0, 0x0160, 0x6803, 0x00c0, 0x0156, 0x20a9, 0x002d,
-+ 0x1d04, 0x59c0, 0x2091, 0x6000, 0x1f04, 0x59c0, 0x015e, 0x0005,
-+ 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071,
-+ 0xb400, 0x2001, 0xb69f, 0x200c, 0xa186, 0x0000, 0x0158, 0xa186,
-+ 0x0001, 0x0158, 0xa186, 0x0002, 0x0158, 0xa186, 0x0003, 0x0158,
-+ 0x0804, 0x5a55, 0x708f, 0x0022, 0x0040, 0x708f, 0x0021, 0x0028,
-+ 0x708f, 0x0023, 0x0020, 0x708f, 0x0024, 0x6043, 0x0000, 0x60e3,
-+ 0x0000, 0x6887, 0x0001, 0x2001, 0x0001, 0x080c, 0x2838, 0x0026,
-+ 0x2011, 0x0003, 0x080c, 0x801f, 0x2011, 0x0002, 0x080c, 0x8029,
-+ 0x080c, 0x7f03, 0x0036, 0x2019, 0x0000, 0x080c, 0x7f8e, 0x003e,
-+ 0x002e, 0x7000, 0xa08e, 0x0004, 0x0118, 0x602b, 0x0028, 0x0010,
-+ 0x602b, 0x0020, 0x0156, 0x0126, 0x2091, 0x8000, 0x20a9, 0x0005,
-+ 0x6024, 0xd0ac, 0x0120, 0x012e, 0x015e, 0x0804, 0x5a63, 0x6800,
-+ 0xa084, 0x00a0, 0xc0bd, 0x6802, 0x6904, 0xd1d4, 0x1130, 0x6803,
-+ 0x0100, 0x1f04, 0x5a18, 0x080c, 0x5ae1, 0x012e, 0x015e, 0x080c,
-+ 0x5aa2, 0x01a8, 0x6044, 0xa005, 0x0168, 0x6050, 0x0006, 0xa085,
-+ 0x0020, 0x6052, 0x080c, 0x5ae1, 0xa006, 0x8001, 0x1df0, 0x000e,
-+ 0x6052, 0x0028, 0x6804, 0xd0d4, 0x1110, 0x080c, 0x5ae1, 0x0016,
-+ 0x0026, 0x2009, 0x00c8, 0x2011, 0x5963, 0x080c, 0x69e7, 0x002e,
-+ 0x001e, 0x2001, 0xb69f, 0x2003, 0x0004, 0x080c, 0x57a2, 0x080c,
-+ 0x5aa2, 0x0148, 0x6804, 0xd0d4, 0x1130, 0xd0dc, 0x1100, 0x2001,
-+ 0xb69f, 0x2003, 0x0000, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x00c6,
-+ 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0xb400,
-+ 0x2001, 0xb69e, 0x2003, 0x0000, 0x2001, 0xb68f, 0x2003, 0x0000,
-+ 0x708f, 0x0000, 0x60e3, 0x0000, 0x6887, 0x0000, 0x2001, 0x0000,
-+ 0x080c, 0x2838, 0x6803, 0x0000, 0x6043, 0x0090, 0x6043, 0x0010,
-+ 0x6027, 0xffff, 0x602b, 0x182f, 0x00ee, 0x00de, 0x00ce, 0x0005,
-+ 0x0006, 0x2001, 0xb69e, 0x2004, 0xa086, 0xaaaa, 0x000e, 0x0005,
-+ 0x0006, 0x2001, 0xb472, 0x2004, 0xa084, 0x0030, 0xa086, 0x0000,
-+ 0x000e, 0x0005, 0x0006, 0x2001, 0xb472, 0x2004, 0xa084, 0x0030,
-+ 0xa086, 0x0030, 0x000e, 0x0005, 0x0006, 0x2001, 0xb472, 0x2004,
-+ 0xa084, 0x0030, 0xa086, 0x0010, 0x000e, 0x0005, 0x0006, 0x2001,
-+ 0xb472, 0x2004, 0xa084, 0x0030, 0xa086, 0x0020, 0x000e, 0x0005,
-+ 0x2001, 0xb40c, 0x2004, 0xd0a4, 0x0170, 0x080c, 0x2858, 0x0036,
-+ 0x0016, 0x2009, 0x0000, 0x2019, 0x0028, 0x080c, 0x2c33, 0x001e,
-+ 0x003e, 0xa006, 0x0009, 0x0005, 0x00e6, 0x2071, 0xb40c, 0x2e04,
-+ 0x0118, 0xa085, 0x0010, 0x0010, 0xa084, 0xffef, 0x2072, 0x00ee,
-+ 0x0005, 0x6050, 0x0006, 0x60f0, 0x0006, 0x60ec, 0x0006, 0x600c,
-+ 0x0006, 0x6004, 0x0006, 0x6028, 0x0006, 0x602f, 0x0100, 0x602f,
-+ 0x0000, 0x602f, 0x0040, 0x602f, 0x0000, 0x000e, 0x602a, 0x000e,
-+ 0x6006, 0x000e, 0x600e, 0x000e, 0x60ee, 0x000e, 0x60f2, 0x60e3,
-+ 0x0000, 0x6887, 0x0001, 0x2001, 0x0001, 0x080c, 0x2838, 0x6800,
-+ 0xa084, 0x00a0, 0xc0bd, 0x6802, 0x6803, 0x00a0, 0x000e, 0x6052,
-+ 0x6050, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6,
-+ 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0xb400, 0x6020,
-+ 0xa084, 0x0080, 0x0138, 0x2001, 0xb40c, 0x200c, 0xc1bd, 0x2102,
-+ 0x0804, 0x5b8a, 0x2001, 0xb40c, 0x200c, 0xc1bc, 0x2102, 0x6028,
-+ 0xa084, 0xe1ff, 0x602a, 0x6027, 0x0200, 0x6803, 0x0090, 0x20a9,
-+ 0x0384, 0x6024, 0xd0cc, 0x1508, 0x1d04, 0x5b39, 0x2091, 0x6000,
-+ 0x1f04, 0x5b39, 0x2011, 0x0003, 0x080c, 0x801f, 0x2011, 0x0002,
-+ 0x080c, 0x8029, 0x080c, 0x7f03, 0x2019, 0x0000, 0x080c, 0x7f8e,
-+ 0x6803, 0x00a0, 0x2001, 0xb69f, 0x2003, 0x0001, 0x2001, 0xb400,
-+ 0x2003, 0x0001, 0xa085, 0x0001, 0x0468, 0x86ff, 0x1110, 0x080c,
-+ 0x1e18, 0x60e3, 0x0000, 0x2001, 0xb68f, 0x2004, 0x080c, 0x2838,
-+ 0x60e2, 0x080c, 0x2479, 0x6803, 0x0080, 0x20a9, 0x0384, 0x6027,
-+ 0x1e00, 0x2009, 0x1e00, 0xe000, 0x6024, 0xa10c, 0x0138, 0x1d04,
-+ 0x5b6f, 0x2091, 0x6000, 0x1f04, 0x5b6f, 0x0820, 0x6028, 0xa085,
-+ 0x1e00, 0x602a, 0x70a4, 0xa005, 0x1118, 0x6887, 0x0001, 0x0008,
-+ 0x6886, 0xa006, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e,
-+ 0x015e, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6,
-+ 0x00e6, 0x2061, 0x0100, 0x2071, 0xb400, 0x2069, 0x0140, 0x6020,
-+ 0xa084, 0x00c0, 0x0120, 0x6884, 0xa005, 0x1904, 0x5be6, 0x6803,
-+ 0x0088, 0x60e3, 0x0000, 0x6887, 0x0000, 0x2001, 0x0000, 0x080c,
-+ 0x2838, 0x2069, 0x0200, 0x6804, 0xa005, 0x1118, 0x6808, 0xa005,
-+ 0x01c0, 0x6028, 0xa084, 0xfbff, 0x602a, 0x6027, 0x0400, 0x2069,
-+ 0xb6c5, 0x7000, 0x206a, 0x708f, 0x0026, 0x7003, 0x0001, 0x20a9,
-+ 0x0002, 0x1d04, 0x5bc9, 0x2091, 0x6000, 0x1f04, 0x5bc9, 0x0804,
-+ 0x5c17, 0x2069, 0x0140, 0x20a9, 0x0384, 0x6027, 0x1e00, 0x2009,
-+ 0x1e00, 0xe000, 0x6024, 0xa10c, 0x0520, 0xa084, 0x1a00, 0x1508,
-+ 0x1d04, 0x5bd5, 0x2091, 0x6000, 0x1f04, 0x5bd5, 0x2011, 0x0003,
-+ 0x080c, 0x801f, 0x2011, 0x0002, 0x080c, 0x8029, 0x080c, 0x7f03,
-+ 0x2019, 0x0000, 0x080c, 0x7f8e, 0x6803, 0x00a0, 0x2001, 0xb69f,
-+ 0x2003, 0x0001, 0x2001, 0xb400, 0x2003, 0x0001, 0xa085, 0x0001,
-+ 0x00b0, 0x080c, 0x2479, 0x6803, 0x0080, 0x2069, 0x0140, 0x60e3,
-+ 0x0000, 0x70a4, 0xa005, 0x1118, 0x6887, 0x0001, 0x0008, 0x6886,
-+ 0x2001, 0xb68f, 0x2004, 0x080c, 0x2838, 0x60e2, 0xa006, 0x00ee,
-+ 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x015e, 0x0005, 0x0156,
-+ 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100,
-+ 0x2071, 0xb400, 0x6020, 0xa084, 0x00c0, 0x01e0, 0x2011, 0x0003,
-+ 0x080c, 0x801f, 0x2011, 0x0002, 0x080c, 0x8029, 0x080c, 0x7f03,
-+ 0x2019, 0x0000, 0x080c, 0x7f8e, 0x2069, 0x0140, 0x6803, 0x00a0,
-+ 0x2001, 0xb69f, 0x2003, 0x0001, 0x2001, 0xb400, 0x2003, 0x0001,
-+ 0x0804, 0x5cbc, 0x2001, 0xb40c, 0x200c, 0xd1b4, 0x1160, 0xc1b5,
-+ 0x2102, 0x080c, 0x594b, 0x2069, 0x0140, 0x080c, 0x2479, 0x6803,
-+ 0x0080, 0x60e3, 0x0000, 0x2069, 0x0200, 0x6804, 0xa005, 0x1118,
-+ 0x6808, 0xa005, 0x01c0, 0x6028, 0xa084, 0xfdff, 0x602a, 0x6027,
-+ 0x0200, 0x2069, 0xb6c5, 0x7000, 0x206a, 0x708f, 0x0027, 0x7003,
-+ 0x0001, 0x20a9, 0x0002, 0x1d04, 0x5c73, 0x2091, 0x6000, 0x1f04,
-+ 0x5c73, 0x0804, 0x5cbc, 0x6027, 0x1e00, 0x2009, 0x1e00, 0xe000,
-+ 0x6024, 0xa10c, 0x01c8, 0xa084, 0x1c00, 0x11b0, 0x1d04, 0x5c7b,
-+ 0x0006, 0x0016, 0x00c6, 0x00d6, 0x00e6, 0x080c, 0x68be, 0x00ee,
-+ 0x00de, 0x00ce, 0x001e, 0x000e, 0x00e6, 0x2071, 0xb6f3, 0x7018,
-+ 0x00ee, 0xa005, 0x1d00, 0x0500, 0x0026, 0x2011, 0x5963, 0x080c,
-+ 0x6961, 0x2011, 0x5956, 0x080c, 0x6a21, 0x002e, 0x2069, 0x0140,
-+ 0x60e3, 0x0000, 0x70a4, 0xa005, 0x1118, 0x6887, 0x0001, 0x0008,
-+ 0x6886, 0x2001, 0xb68f, 0x2004, 0x080c, 0x2838, 0x60e2, 0x2001,
-+ 0xb40c, 0x200c, 0xc1b4, 0x2102, 0x00ee, 0x00de, 0x00ce, 0x003e,
-+ 0x002e, 0x001e, 0x015e, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036,
-+ 0x0046, 0x00c6, 0x00e6, 0x2061, 0x0100, 0x2071, 0xb400, 0x7130,
-+ 0xd184, 0x1180, 0x2011, 0xb453, 0x2214, 0xd2ec, 0x0138, 0xc18d,
-+ 0x7132, 0x2011, 0xb453, 0x2214, 0xd2ac, 0x1120, 0x7030, 0xd08c,
-+ 0x0904, 0x5d29, 0x7130, 0xc185, 0x7132, 0x2011, 0xb453, 0x220c,
-+ 0xd1a4, 0x0530, 0x0016, 0x2019, 0x000e, 0x080c, 0xafe8, 0x0156,
-+ 0x20a9, 0x007f, 0x2009, 0x0000, 0xa186, 0x007e, 0x01a0, 0xa186,
-+ 0x0080, 0x0188, 0x080c, 0x4f6a, 0x1170, 0x8127, 0xa006, 0x0016,
-+ 0x2009, 0x000e, 0x080c, 0xb06b, 0x2009, 0x0001, 0x2011, 0x0100,
-+ 0x080c, 0x6adf, 0x001e, 0x8108, 0x1f04, 0x5cf4, 0x015e, 0x001e,
-+ 0xd1ac, 0x1148, 0x0016, 0x2009, 0x0000, 0x2019, 0x0004, 0x080c,
-+ 0x2c33, 0x001e, 0x0070, 0x0156, 0x20a9, 0x007f, 0x2009, 0x0000,
-+ 0x080c, 0x4f6a, 0x1110, 0x080c, 0x4bc5, 0x8108, 0x1f04, 0x5d20,
-+ 0x015e, 0x080c, 0x1e18, 0x2011, 0x0003, 0x080c, 0x801f, 0x2011,
-+ 0x0002, 0x080c, 0x8029, 0x080c, 0x7f03, 0x0036, 0x2019, 0x0000,
-+ 0x080c, 0x7f8e, 0x003e, 0x60e3, 0x0000, 0x2001, 0xb400, 0x2003,
-+ 0x0001, 0x080c, 0x59c8, 0x00ee, 0x00ce, 0x004e, 0x003e, 0x002e,
-+ 0x001e, 0x015e, 0x0005, 0x2071, 0xb4e2, 0x7003, 0x0000, 0x7007,
-+ 0x0000, 0x700f, 0x0000, 0x702b, 0x0001, 0x704f, 0x0000, 0x7053,
-+ 0x0001, 0x705f, 0x0020, 0x7063, 0x0040, 0x7083, 0x0000, 0x708b,
-+ 0x0000, 0x708f, 0x0001, 0x70bf, 0x0000, 0x0005, 0x00e6, 0x2071,
-+ 0xb4e2, 0x6848, 0xa005, 0x1130, 0x7028, 0xc085, 0x702a, 0xa085,
-+ 0x0001, 0x0428, 0x6a50, 0x7236, 0x6b54, 0x733a, 0x6858, 0x703e,
-+ 0x707a, 0x685c, 0x7042, 0x707e, 0x6848, 0x702e, 0x6840, 0x7032,
-+ 0x2009, 0x000c, 0x200a, 0x8007, 0x8006, 0x8006, 0xa08c, 0x003f,
-+ 0xa084, 0xffc0, 0xa210, 0x2100, 0xa319, 0x7272, 0x7376, 0x7028,
-+ 0xc084, 0x702a, 0x7007, 0x0001, 0x700f, 0x0000, 0xa006, 0x00ee,
-+ 0x0005, 0x2b78, 0x2071, 0xb4e2, 0x7004, 0x0043, 0x700c, 0x0002,
-+ 0x5da5, 0x5d9c, 0x5d9c, 0x5d9c, 0x5d9c, 0x0005, 0x5dfb, 0x5dfc,
-+ 0x5e2e, 0x5e2f, 0x5df9, 0x5e7d, 0x5e82, 0x5eb3, 0x5eb4, 0x5ecf,
-+ 0x5ed0, 0x5ed1, 0x5ed2, 0x5ed3, 0x5ed4, 0x5f8a, 0x5fb1, 0x700c,
-+ 0x0002, 0x5dbe, 0x5df9, 0x5df9, 0x5dfa, 0x5dfa, 0x7830, 0x7930,
-+ 0xa106, 0x0120, 0x7830, 0x7930, 0xa106, 0x1510, 0x7030, 0xa10a,
-+ 0x01f8, 0x1210, 0x712c, 0xa10a, 0xa18a, 0x0002, 0x12d0, 0x080c,
-+ 0x15db, 0x01b0, 0x2d00, 0x705a, 0x7063, 0x0040, 0x2001, 0x0003,
-+ 0x7057, 0x0000, 0x0126, 0x0006, 0x2091, 0x8000, 0x2009, 0xb712,
-+ 0x2104, 0xc085, 0x200a, 0x000e, 0x700e, 0x012e, 0x080c, 0x1657,
-+ 0x0005, 0x080c, 0x15db, 0x0de0, 0x2d00, 0x705a, 0x080c, 0x15db,
-+ 0x1108, 0x0c10, 0x2d00, 0x7086, 0x7063, 0x0080, 0x2001, 0x0004,
-+ 0x08f8, 0x0005, 0x0005, 0x0005, 0x700c, 0x0002, 0x5e03, 0x5e06,
-+ 0x5e14, 0x5e2d, 0x5e2d, 0x080c, 0x5db7, 0x0005, 0x0126, 0x8001,
-+ 0x700e, 0x7058, 0x0006, 0x080c, 0x6304, 0x0120, 0x2091, 0x8000,
-+ 0x080c, 0x5db7, 0x00de, 0x0048, 0x0126, 0x8001, 0x700e, 0x080c,
-+ 0x6304, 0x7058, 0x2068, 0x7084, 0x705a, 0x6803, 0x0000, 0x6807,
-+ 0x0000, 0x6834, 0xa084, 0x00ff, 0xa08a, 0x003a, 0x1218, 0x00db,
-+ 0x012e, 0x0005, 0x012e, 0x080c, 0x5ed5, 0x0005, 0x0005, 0x0005,
-+ 0x00e6, 0x2071, 0xb4e2, 0x700c, 0x0002, 0x5e3a, 0x5e3a, 0x5e3a,
-+ 0x5e3c, 0x5e3f, 0x00ee, 0x0005, 0x700f, 0x0001, 0x0010, 0x700f,
-+ 0x0002, 0x00ee, 0x0005, 0x5ed5, 0x5ed5, 0x5ef1, 0x5ed5, 0x606e,
-+ 0x5ed5, 0x5ed5, 0x5ed5, 0x5ed5, 0x5ed5, 0x5ef1, 0x60b0, 0x60f3,
-+ 0x613c, 0x6150, 0x5ed5, 0x5ed5, 0x5f0d, 0x5ef1, 0x5ed5, 0x5ed5,
-+ 0x5f67, 0x61fc, 0x6217, 0x5ed5, 0x5f0d, 0x5ed5, 0x5ed5, 0x5ed5,
-+ 0x5ed5, 0x5f5d, 0x6217, 0x5ed5, 0x5ed5, 0x5ed5, 0x5ed5, 0x5ed5,
-+ 0x5ed5, 0x5ed5, 0x5ed5, 0x5ed5, 0x5f21, 0x5ed5, 0x5ed5, 0x5ed5,
-+ 0x5ed5, 0x5ed5, 0x5ed5, 0x5ed5, 0x5ed5, 0x5ed5, 0x6322, 0x5ed5,
-+ 0x5ed5, 0x5ed5, 0x5ed5, 0x5ed5, 0x5f36, 0x7020, 0x2068, 0x080c,
-+ 0x160b, 0x0005, 0x700c, 0x0002, 0x5e89, 0x5e8c, 0x5e9a, 0x5eb2,
-+ 0x5eb2, 0x080c, 0x5db7, 0x0005, 0x0126, 0x8001, 0x700e, 0x7058,
-+ 0x0006, 0x080c, 0x6304, 0x0120, 0x2091, 0x8000, 0x080c, 0x5db7,
-+ 0x00de, 0x0048, 0x0126, 0x8001, 0x700e, 0x080c, 0x6304, 0x7058,
-+ 0x2068, 0x7084, 0x705a, 0x6803, 0x0000, 0x6807, 0x0000, 0x6834,
-+ 0xa084, 0x00ff, 0xa08a, 0x001a, 0x1218, 0x003b, 0x012e, 0x0005,
-+ 0x012e, 0x0419, 0x0005, 0x0005, 0x0005, 0x5ed5, 0x5ef1, 0x605a,
-+ 0x5ed5, 0x5ef1, 0x5ed5, 0x5ef1, 0x5ef1, 0x5ed5, 0x5ef1, 0x605a,
-+ 0x5ef1, 0x5ef1, 0x5ef1, 0x5ef1, 0x5ef1, 0x5ed5, 0x5ef1, 0x605a,
-+ 0x5ed5, 0x5ed5, 0x5ef1, 0x5ed5, 0x5ed5, 0x5ed5, 0x5ef1, 0x0005,
-+ 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x7007, 0x0001, 0x6838,
-+ 0xa084, 0x00ff, 0xc0d5, 0x683a, 0x0126, 0x2091, 0x8000, 0x080c,
-+ 0x53c9, 0x012e, 0x0005, 0x7007, 0x0001, 0x6838, 0xa084, 0x00ff,
-+ 0xc0e5, 0x683a, 0x0126, 0x2091, 0x8000, 0x080c, 0x53c9, 0x012e,
-+ 0x0005, 0x7007, 0x0001, 0x6838, 0xa084, 0x00ff, 0xc0ed, 0x683a,
-+ 0x0126, 0x2091, 0x8000, 0x080c, 0x53c9, 0x012e, 0x0005, 0x7007,
-+ 0x0001, 0x6838, 0xa084, 0x00ff, 0xc0dd, 0x683a, 0x0126, 0x2091,
-+ 0x8000, 0x080c, 0x53c9, 0x012e, 0x0005, 0x6834, 0x8007, 0xa084,
-+ 0x00ff, 0x0988, 0x8001, 0x1120, 0x7007, 0x0001, 0x0804, 0x601a,
-+ 0x7007, 0x0006, 0x7012, 0x2d00, 0x7016, 0x701a, 0x704b, 0x601a,
-+ 0x0005, 0x6834, 0x8007, 0xa084, 0x00ff, 0x0904, 0x5ee3, 0x8001,
-+ 0x1120, 0x7007, 0x0001, 0x0804, 0x6037, 0x7007, 0x0006, 0x7012,
-+ 0x2d00, 0x7016, 0x701a, 0x704b, 0x6037, 0x0005, 0x6834, 0x8007,
-+ 0xa084, 0x00ff, 0xa086, 0x0001, 0x1904, 0x5ee3, 0x7007, 0x0001,
-+ 0x2009, 0xb431, 0x210c, 0x81ff, 0x11a8, 0x6838, 0xa084, 0x00ff,
-+ 0x683a, 0x6853, 0x0000, 0x080c, 0x4d3c, 0x1108, 0x0005, 0x0126,
-+ 0x2091, 0x8000, 0x6837, 0x0139, 0x684a, 0x6952, 0x080c, 0x53c9,
-+ 0x012e, 0x0ca0, 0x2001, 0x0028, 0x0c90, 0x684c, 0xa084, 0x00c0,
-+ 0xa086, 0x00c0, 0x1120, 0x7007, 0x0001, 0x0804, 0x622f, 0x2d00,
-+ 0x7016, 0x701a, 0x20a9, 0x0004, 0xa080, 0x0024, 0x2098, 0x20a1,
-+ 0xb50d, 0x53a3, 0x6858, 0x7012, 0xa082, 0x0401, 0x1a04, 0x5eff,
-+ 0x6a84, 0xa28a, 0x0002, 0x1a04, 0x5eff, 0x82ff, 0x1138, 0x6888,
-+ 0x698c, 0xa105, 0x0118, 0x2001, 0x5fed, 0x0018, 0xa280, 0x5fe3,
-+ 0x2005, 0x70c6, 0x7010, 0xa015, 0x0904, 0x5fcf, 0x080c, 0x15db,
-+ 0x1118, 0x7007, 0x000f, 0x0005, 0x2d00, 0x7022, 0x70c4, 0x2060,
-+ 0x2c05, 0x6836, 0xe004, 0xad00, 0x7096, 0xe008, 0xa20a, 0x1210,
-+ 0xa00e, 0x2200, 0x7112, 0xe20c, 0x8003, 0x800b, 0xa296, 0x0004,
-+ 0x0108, 0xa108, 0x719a, 0x810b, 0x719e, 0xae90, 0x0022, 0x080c,
-+ 0x163f, 0x7090, 0xa08e, 0x0100, 0x0170, 0xa086, 0x0200, 0x0118,
-+ 0x7007, 0x0010, 0x0005, 0x7020, 0x2068, 0x080c, 0x160b, 0x7014,
-+ 0x2068, 0x0804, 0x5eff, 0x7020, 0x2068, 0x7018, 0x6802, 0x6807,
-+ 0x0000, 0x2d08, 0x2068, 0x6906, 0x711a, 0x0804, 0x5f8a, 0x7014,
-+ 0x2068, 0x7007, 0x0001, 0x6884, 0xa005, 0x1128, 0x6888, 0x698c,
-+ 0xa105, 0x0108, 0x00b1, 0x6834, 0xa084, 0x00ff, 0xa086, 0x001e,
-+ 0x0904, 0x622f, 0x04b8, 0x5fe5, 0x5fe9, 0x0002, 0x0011, 0x0007,
-+ 0x0004, 0x000a, 0x000f, 0x0005, 0x0006, 0x000a, 0x0011, 0x0005,
-+ 0x0004, 0x00f6, 0x00e6, 0x00c6, 0x0076, 0x0066, 0x6f88, 0x6e8c,
-+ 0x6804, 0x2060, 0xacf0, 0x0021, 0xacf8, 0x0027, 0x2009, 0x0005,
-+ 0x700c, 0x7816, 0x7008, 0x7812, 0x7004, 0x7806, 0x7000, 0x7802,
-+ 0x7e0e, 0x7f0a, 0x8109, 0x0128, 0xaef2, 0x0004, 0xaffa, 0x0006,
-+ 0x0c78, 0x6004, 0xa065, 0x1d30, 0x006e, 0x007e, 0x00ce, 0x00ee,
-+ 0x00fe, 0x0005, 0x2009, 0xb431, 0x210c, 0x81ff, 0x1198, 0x6838,
-+ 0xa084, 0x00ff, 0x683a, 0x080c, 0x4c1e, 0x1108, 0x0005, 0x080c,
-+ 0x549c, 0x0126, 0x2091, 0x8000, 0x080c, 0x9e5d, 0x080c, 0x53c9,
-+ 0x012e, 0x0ca0, 0x2001, 0x0028, 0x2009, 0x0000, 0x0c80, 0x2009,
-+ 0xb431, 0x210c, 0x81ff, 0x11b0, 0x6858, 0xa005, 0x01c0, 0x6838,
-+ 0xa084, 0x00ff, 0x683a, 0x6853, 0x0000, 0x080c, 0x4ce0, 0x1108,
-+ 0x0005, 0x0126, 0x2091, 0x8000, 0x684a, 0x6952, 0x080c, 0x53c9,
-+ 0x012e, 0x0cb0, 0x2001, 0x0028, 0x2009, 0x0000, 0x0c90, 0x2001,
-+ 0x0000, 0x0c78, 0x7018, 0x6802, 0x2d08, 0x2068, 0x6906, 0x711a,
-+ 0x7010, 0x8001, 0x7012, 0x0118, 0x7007, 0x0006, 0x0030, 0x7014,
-+ 0x2068, 0x7007, 0x0001, 0x7048, 0x080f, 0x0005, 0x7007, 0x0001,
-+ 0x6944, 0x810f, 0xa18c, 0x00ff, 0x6848, 0xa084, 0x00ff, 0x20a9,
-+ 0x0001, 0xa096, 0x0001, 0x01b0, 0x2009, 0x0000, 0x20a9, 0x00ff,
-+ 0xa096, 0x0002, 0x0178, 0xa005, 0x11f0, 0x6944, 0x810f, 0xa18c,
-+ 0x00ff, 0x080c, 0x4f6a, 0x11b8, 0x0066, 0x6e50, 0x080c, 0x5069,
-+ 0x006e, 0x0088, 0x0046, 0x2011, 0xb40c, 0x2224, 0xc484, 0x2412,
-+ 0x004e, 0x00c6, 0x080c, 0x4f6a, 0x1110, 0x080c, 0x51ca, 0x8108,
-+ 0x1f04, 0x609a, 0x00ce, 0x684c, 0xd084, 0x1118, 0x080c, 0x160b,
-+ 0x0005, 0x0126, 0x2091, 0x8000, 0x080c, 0x53c9, 0x012e, 0x0005,
-+ 0x0126, 0x2091, 0x8000, 0x7007, 0x0001, 0x2001, 0xb453, 0x2004,
-+ 0xd0a4, 0x0580, 0x2061, 0xb774, 0x6100, 0xd184, 0x0178, 0x6858,
-+ 0xa084, 0x00ff, 0x1550, 0x6000, 0xd084, 0x0520, 0x6004, 0xa005,
-+ 0x1538, 0x6003, 0x0000, 0x600b, 0x0000, 0x00c8, 0x2011, 0x0001,
-+ 0x6860, 0xa005, 0x1110, 0x2001, 0x001e, 0x8000, 0x6016, 0x6858,
-+ 0xa084, 0x00ff, 0x0178, 0x6006, 0x6858, 0x8007, 0xa084, 0x00ff,
-+ 0x0148, 0x600a, 0x6858, 0x8000, 0x1108, 0xc28d, 0x6202, 0x012e,
-+ 0x0804, 0x62f3, 0x012e, 0x0804, 0x62ed, 0x012e, 0x0804, 0x62e7,
-+ 0x012e, 0x0804, 0x62ea, 0x0126, 0x2091, 0x8000, 0x7007, 0x0001,
-+ 0x2001, 0xb453, 0x2004, 0xd0a4, 0x05e0, 0x2061, 0xb774, 0x6000,
-+ 0xd084, 0x05b8, 0x6204, 0x6308, 0xd08c, 0x1530, 0x6c48, 0xa484,
-+ 0x0003, 0x0170, 0x6958, 0xa18c, 0x00ff, 0x8001, 0x1120, 0x2100,
-+ 0xa210, 0x0620, 0x0028, 0x8001, 0x1508, 0x2100, 0xa212, 0x02f0,
-+ 0xa484, 0x000c, 0x0188, 0x6958, 0x810f, 0xa18c, 0x00ff, 0xa082,
-+ 0x0004, 0x1120, 0x2100, 0xa318, 0x0288, 0x0030, 0xa082, 0x0004,
-+ 0x1168, 0x2100, 0xa31a, 0x0250, 0x6860, 0xa005, 0x0110, 0x8000,
-+ 0x6016, 0x6206, 0x630a, 0x012e, 0x0804, 0x62f3, 0x012e, 0x0804,
-+ 0x62f0, 0x012e, 0x0804, 0x62ed, 0x0126, 0x2091, 0x8000, 0x7007,
-+ 0x0001, 0x2061, 0xb774, 0x6300, 0xd38c, 0x1120, 0x6308, 0x8318,
-+ 0x0220, 0x630a, 0x012e, 0x0804, 0x6301, 0x012e, 0x0804, 0x62f0,
-+ 0x0126, 0x00c6, 0x2091, 0x8000, 0x7007, 0x0001, 0x684c, 0xd0ac,
-+ 0x0148, 0x00c6, 0x2061, 0xb774, 0x6000, 0xa084, 0xfcff, 0x6002,
-+ 0x00ce, 0x0448, 0x6858, 0xa005, 0x05d0, 0x685c, 0xa065, 0x0598,
-+ 0x2001, 0xb431, 0x2004, 0xa005, 0x0118, 0x080c, 0x9dae, 0x0068,
-+ 0x6013, 0x0400, 0x6057, 0x0000, 0x694c, 0xd1a4, 0x0110, 0x6950,
-+ 0x6156, 0x2009, 0x0041, 0x080c, 0x85ef, 0x6958, 0xa18c, 0xff00,
-+ 0xa186, 0x2000, 0x1140, 0x0026, 0x2009, 0x0000, 0x2011, 0xfdff,
-+ 0x080c, 0x6adf, 0x002e, 0x684c, 0xd0c4, 0x0148, 0x2061, 0xb774,
-+ 0x6000, 0xd08c, 0x1120, 0x6008, 0x8000, 0x0208, 0x600a, 0x00ce,
-+ 0x012e, 0x0804, 0x62f3, 0x00ce, 0x012e, 0x0804, 0x62ed, 0x6954,
-+ 0xa186, 0x002e, 0x0d40, 0xa186, 0x002d, 0x0d28, 0xa186, 0x0045,
-+ 0x0528, 0xa186, 0x002a, 0x1130, 0x2001, 0xb40c, 0x200c, 0xc194,
-+ 0x2102, 0x08c8, 0xa186, 0x0020, 0x0170, 0xa186, 0x0029, 0x1d18,
-+ 0x6944, 0xa18c, 0xff00, 0x810f, 0x080c, 0x4f6a, 0x1960, 0x6000,
-+ 0xc0e4, 0x6002, 0x0840, 0x685c, 0xa065, 0x09a8, 0x6007, 0x0024,
-+ 0x2001, 0xb6b6, 0x2004, 0x6016, 0x0804, 0x618b, 0x685c, 0xa065,
-+ 0x0950, 0x00e6, 0x6860, 0xa075, 0x2001, 0xb431, 0x2004, 0xa005,
-+ 0x0150, 0x080c, 0x9dae, 0x8eff, 0x0118, 0x2e60, 0x080c, 0x9dae,
-+ 0x00ee, 0x0804, 0x618b, 0x6020, 0xc0dc, 0xc0d5, 0x6022, 0x2e60,
-+ 0x6007, 0x003a, 0x6870, 0xa005, 0x0130, 0x6007, 0x003b, 0x6874,
-+ 0x602a, 0x6878, 0x6012, 0x6003, 0x0001, 0x080c, 0x6c52, 0x080c,
-+ 0x7134, 0x00ee, 0x0804, 0x618b, 0x2061, 0xb774, 0x6000, 0xd084,
-+ 0x0190, 0xd08c, 0x1904, 0x6301, 0x0126, 0x2091, 0x8000, 0x6204,
-+ 0x8210, 0x0220, 0x6206, 0x012e, 0x0804, 0x6301, 0x012e, 0x6853,
-+ 0x0016, 0x0804, 0x62fa, 0x6853, 0x0007, 0x0804, 0x62fa, 0x6834,
-+ 0x8007, 0xa084, 0x00ff, 0x1118, 0x080c, 0x5ee3, 0x0078, 0x2030,
-+ 0x8001, 0x1120, 0x7007, 0x0001, 0x0051, 0x0040, 0x7007, 0x0006,
-+ 0x7012, 0x2d00, 0x7016, 0x701a, 0x704b, 0x622f, 0x0005, 0x00e6,
-+ 0x0126, 0x2091, 0x8000, 0xa03e, 0x2009, 0xb431, 0x210c, 0x81ff,
-+ 0x1904, 0x62ad, 0x2009, 0xb40c, 0x210c, 0xd194, 0x1904, 0x62d7,
-+ 0x6848, 0x2070, 0xae82, 0xbc00, 0x0a04, 0x62a1, 0x2001, 0xb417,
-+ 0x2004, 0xae02, 0x1a04, 0x62a1, 0x711c, 0xa186, 0x0006, 0x1904,
-+ 0x6290, 0x7018, 0xa005, 0x0904, 0x62ad, 0x2004, 0xd0e4, 0x1904,
-+ 0x62d2, 0x2061, 0xb774, 0x6100, 0xa184, 0x0301, 0xa086, 0x0001,
-+ 0x1550, 0x7020, 0xd0dc, 0x1904, 0x62da, 0x6853, 0x0000, 0x6803,
-+ 0x0000, 0x2d08, 0x7010, 0xa005, 0x1158, 0x7112, 0x684c, 0xd0f4,
-+ 0x1904, 0x62dd, 0x2e60, 0x080c, 0x6a3b, 0x012e, 0x00ee, 0x0005,
-+ 0x2068, 0x6800, 0xa005, 0x1de0, 0x6902, 0x2168, 0x684c, 0xd0f4,
-+ 0x1904, 0x62dd, 0x012e, 0x00ee, 0x0005, 0x012e, 0x00ee, 0x6853,
-+ 0x0006, 0x0804, 0x62fa, 0xd184, 0x0dc0, 0xd1c4, 0x11a8, 0x00b8,
-+ 0x6944, 0xa18c, 0xff00, 0x810f, 0x080c, 0x4f6a, 0x15d8, 0x6000,
-+ 0xd0e4, 0x15c0, 0x711c, 0xa186, 0x0007, 0x1118, 0x6853, 0x0002,
-+ 0x0498, 0x6853, 0x0008, 0x0480, 0x6853, 0x000e, 0x0468, 0x6853,
-+ 0x0017, 0x0450, 0x6853, 0x0035, 0x0438, 0x2001, 0xb472, 0x2004,
-+ 0xd0fc, 0x01e8, 0x6848, 0x2070, 0xae82, 0xbc00, 0x02c0, 0x605c,
-+ 0xae02, 0x12a8, 0x711c, 0xa186, 0x0006, 0x1188, 0x7018, 0xa005,
-+ 0x0170, 0x2004, 0xd0bc, 0x0158, 0x2039, 0x0001, 0x7000, 0xa086,
-+ 0x0007, 0x1904, 0x623a, 0x7003, 0x0002, 0x0804, 0x623a, 0x6853,
-+ 0x0028, 0x0010, 0x6853, 0x0029, 0x012e, 0x00ee, 0x0418, 0x6853,
-+ 0x002a, 0x0cd0, 0x6853, 0x0045, 0x0cb8, 0x2e60, 0x2019, 0x0002,
-+ 0x6017, 0x0014, 0x080c, 0xac63, 0x012e, 0x00ee, 0x0005, 0x2009,
-+ 0x003e, 0x0058, 0x2009, 0x0004, 0x0040, 0x2009, 0x0006, 0x0028,
-+ 0x2009, 0x0016, 0x0010, 0x2009, 0x0001, 0x6854, 0xa084, 0xff00,
-+ 0xa105, 0x6856, 0x0126, 0x2091, 0x8000, 0x080c, 0x53c9, 0x012e,
-+ 0x0005, 0x080c, 0x160b, 0x0005, 0x702c, 0x7130, 0x8108, 0xa102,
-+ 0x0230, 0xa00e, 0x7034, 0x7072, 0x7038, 0x7076, 0x0058, 0x7070,
-+ 0xa080, 0x0040, 0x7072, 0x1230, 0x7074, 0xa081, 0x0000, 0x7076,
-+ 0xa085, 0x0001, 0x7932, 0x7132, 0x0005, 0x00d6, 0x080c, 0x6a32,
-+ 0x00de, 0x0005, 0x00d6, 0x00c6, 0x0036, 0x0026, 0x0016, 0x7007,
-+ 0x0001, 0x6a44, 0xa282, 0x0004, 0x1a04, 0x636d, 0xd284, 0x0170,
-+ 0x6a4c, 0xa290, 0xb535, 0x2204, 0xa065, 0x6004, 0x05e0, 0x8007,
-+ 0xa084, 0x00ff, 0xa084, 0x0006, 0x1108, 0x04a8, 0x2c10, 0x080c,
-+ 0x856a, 0x1118, 0x080c, 0x9e67, 0x05a0, 0x621a, 0x6844, 0x0002,
-+ 0x634c, 0x6351, 0x6354, 0x635a, 0x2019, 0x0002, 0x080c, 0xafe8,
-+ 0x0060, 0x080c, 0xaf7f, 0x0048, 0x2019, 0x0002, 0x6950, 0x080c,
-+ 0xaf9a, 0x0018, 0x6950, 0x080c, 0xaf7f, 0x080c, 0x85c0, 0x6857,
-+ 0x0000, 0x0126, 0x2091, 0x8000, 0x080c, 0x53c9, 0x012e, 0x001e,
-+ 0x002e, 0x003e, 0x00ce, 0x00de, 0x0005, 0x6857, 0x0006, 0x0c88,
-+ 0x6857, 0x0002, 0x0c70, 0x6857, 0x0005, 0x0c58, 0x6857, 0x0004,
-+ 0x0c40, 0x6857, 0x0007, 0x0c28, 0x00d6, 0x2011, 0x0004, 0x2204,
-+ 0xa085, 0x8002, 0x2012, 0x00de, 0x0005, 0x20e1, 0x0002, 0x3d08,
-+ 0x20e1, 0x2000, 0x3d00, 0xa084, 0x7000, 0x0118, 0xa086, 0x1000,
-+ 0x1570, 0x20e1, 0x0000, 0x3d00, 0xa094, 0xff00, 0x8217, 0xa084,
-+ 0xf000, 0xa086, 0x3000, 0x1160, 0xa184, 0xff00, 0x8007, 0xa086,
-+ 0x0008, 0x11e8, 0x080c, 0x2d83, 0x11d0, 0x080c, 0x65c4, 0x0098,
-+ 0x20e1, 0x0004, 0x3d60, 0xd1bc, 0x1108, 0x3e60, 0xac84, 0x0007,
-+ 0x1170, 0xac82, 0xbc00, 0x0258, 0x685c, 0xac02, 0x1240, 0x2009,
-+ 0x0047, 0x080c, 0x85ef, 0x7a1c, 0xd284, 0x1938, 0x0005, 0xa016,
-+ 0x080c, 0x1856, 0x0cc0, 0x0cd8, 0x781c, 0xd08c, 0x0500, 0x0156,
-+ 0x0136, 0x0146, 0x20e1, 0x3000, 0x3d20, 0x3e28, 0xa584, 0x0076,
-+ 0x1538, 0xa484, 0x7000, 0xa086, 0x1000, 0x11a8, 0x080c, 0x643f,
-+ 0x01f8, 0x20e1, 0x3000, 0x7828, 0x7828, 0x080c, 0x645b, 0x014e,
-+ 0x013e, 0x015e, 0x2009, 0xb6e8, 0x2104, 0xa005, 0x1108, 0x0005,
-+ 0x080c, 0x7134, 0x0ce0, 0xa484, 0x7000, 0x1548, 0x080c, 0x643f,
-+ 0x01d8, 0x7000, 0xa084, 0xff00, 0xa086, 0x8100, 0x0d10, 0x00a0,
-+ 0xd5a4, 0x0178, 0x0056, 0x0046, 0x080c, 0x1e3f, 0x080c, 0x2479,
-+ 0x2001, 0x0160, 0x2502, 0x2001, 0x0138, 0x2202, 0x004e, 0x005e,
-+ 0x0048, 0x04a9, 0x6887, 0x0000, 0x080c, 0xb362, 0x20e1, 0x3000,
-+ 0x7828, 0x7828, 0x00b9, 0x014e, 0x013e, 0x015e, 0x0880, 0x0439,
-+ 0x1130, 0x7000, 0xa084, 0xff00, 0xa086, 0x8100, 0x1d68, 0x080c,
-+ 0xb362, 0x20e1, 0x3000, 0x7828, 0x7828, 0x0056, 0x080c, 0x6839,
-+ 0x005e, 0x0c40, 0x2001, 0xb40e, 0x2004, 0xd08c, 0x0178, 0x2001,
-+ 0xb400, 0x2004, 0xa086, 0x0003, 0x1148, 0x0026, 0x0036, 0x2011,
-+ 0x8048, 0x2518, 0x080c, 0x3e8a, 0x003e, 0x002e, 0x0005, 0xa484,
-+ 0x01ff, 0x6886, 0xa005, 0x0160, 0xa080, 0x001f, 0xa084, 0x03f8,
-+ 0x80ac, 0x20e1, 0x1000, 0x2ea0, 0x2099, 0x020a, 0x53a5, 0x0005,
-+ 0x20a9, 0x000c, 0x20e1, 0x1000, 0x2ea0, 0x2099, 0x020a, 0x53a5,
-+ 0xa085, 0x0001, 0x0ca0, 0x7000, 0xa084, 0xff00, 0xa08c, 0xf000,
-+ 0x8007, 0xa196, 0x0000, 0x1118, 0x0804, 0x66c9, 0x0005, 0xa196,
-+ 0x2000, 0x1148, 0x6900, 0xa18e, 0x0001, 0x1118, 0x080c, 0x4449,
-+ 0x0ca8, 0x0039, 0x0c98, 0xa196, 0x8000, 0x1d80, 0x080c, 0x6779,
-+ 0x0c68, 0x00c6, 0x6a84, 0x82ff, 0x0904, 0x65be, 0x7110, 0xa18c,
-+ 0xff00, 0x810f, 0xa196, 0x0001, 0x0120, 0xa196, 0x0023, 0x1904,
-+ 0x65be, 0xa08e, 0x0023, 0x1570, 0x080c, 0x6814, 0x0904, 0x65be,
-+ 0x7124, 0x610a, 0x7030, 0xa08e, 0x0200, 0x1150, 0x7034, 0xa005,
-+ 0x1904, 0x65be, 0x2009, 0x0015, 0x080c, 0x85ef, 0x0804, 0x65be,
-+ 0xa08e, 0x0214, 0x0118, 0xa08e, 0x0210, 0x1130, 0x2009, 0x0015,
-+ 0x080c, 0x85ef, 0x0804, 0x65be, 0xa08e, 0x0100, 0x1904, 0x65be,
-+ 0x7034, 0xa005, 0x1904, 0x65be, 0x2009, 0x0016, 0x080c, 0x85ef,
-+ 0x0804, 0x65be, 0xa08e, 0x0022, 0x1904, 0x65be, 0x7030, 0xa08e,
-+ 0x0300, 0x1580, 0x68d4, 0xd0a4, 0x0528, 0xc0b5, 0x68d6, 0x7100,
-+ 0xa18c, 0x00ff, 0x6972, 0x7004, 0x6876, 0x00f6, 0x2079, 0x0100,
-+ 0x79e6, 0x78ea, 0x0006, 0xa084, 0x00ff, 0x0016, 0x2008, 0x080c,
-+ 0x280d, 0x7932, 0x7936, 0x001e, 0x000e, 0x00fe, 0x080c, 0x27e3,
-+ 0x6952, 0x703c, 0x00e6, 0x2071, 0x0140, 0x7086, 0x2071, 0xb400,
-+ 0x70a6, 0x00ee, 0x7034, 0xa005, 0x1904, 0x65be, 0x2009, 0x0017,
-+ 0x0804, 0x6584, 0xa08e, 0x0400, 0x1158, 0x7034, 0xa005, 0x1904,
-+ 0x65be, 0x68d4, 0xc0a5, 0x68d6, 0x2009, 0x0030, 0x0804, 0x6584,
-+ 0xa08e, 0x0500, 0x1140, 0x7034, 0xa005, 0x1904, 0x65be, 0x2009,
-+ 0x0018, 0x0804, 0x6584, 0xa08e, 0x2010, 0x1120, 0x2009, 0x0019,
-+ 0x0804, 0x6584, 0xa08e, 0x2110, 0x1120, 0x2009, 0x001a, 0x0804,
-+ 0x6584, 0xa08e, 0x5200, 0x1140, 0x7034, 0xa005, 0x1904, 0x65be,
-+ 0x2009, 0x001b, 0x0804, 0x6584, 0xa08e, 0x5000, 0x1140, 0x7034,
-+ 0xa005, 0x1904, 0x65be, 0x2009, 0x001c, 0x0804, 0x6584, 0xa08e,
-+ 0x1300, 0x1120, 0x2009, 0x0034, 0x0804, 0x6584, 0xa08e, 0x1200,
-+ 0x1140, 0x7034, 0xa005, 0x1904, 0x65be, 0x2009, 0x0024, 0x0804,
-+ 0x6584, 0xa08c, 0xff00, 0xa18e, 0x2400, 0x1118, 0x2009, 0x002d,
-+ 0x04d8, 0xa08c, 0xff00, 0xa18e, 0x5300, 0x1118, 0x2009, 0x002a,
-+ 0x0498, 0xa08e, 0x0f00, 0x1118, 0x2009, 0x0020, 0x0468, 0xa08e,
-+ 0x5300, 0x1108, 0x00d8, 0xa08e, 0x6104, 0x11c0, 0x2011, 0xba8d,
-+ 0x8208, 0x2204, 0xa082, 0x0004, 0x20a8, 0x95ac, 0x95ac, 0x2011,
-+ 0x8015, 0x211c, 0x8108, 0x0046, 0x2124, 0x080c, 0x3e8a, 0x004e,
-+ 0x8108, 0x1f04, 0x6567, 0x2009, 0x0023, 0x0070, 0xa08e, 0x6000,
-+ 0x1118, 0x2009, 0x003f, 0x0040, 0xa08e, 0x7800, 0x1118, 0x2009,
-+ 0x0045, 0x0010, 0x2009, 0x001d, 0x0016, 0x2011, 0xba83, 0x2204,
-+ 0x8211, 0x220c, 0x080c, 0x27e3, 0x1598, 0x080c, 0x4f0e, 0x1580,
-+ 0x6612, 0x6516, 0x86ff, 0x01e8, 0x001e, 0x0016, 0xa186, 0x0017,
-+ 0x1158, 0x6870, 0xa606, 0x11a8, 0x6874, 0xa506, 0xa084, 0xff00,
-+ 0x1180, 0x6000, 0xc0f5, 0x6002, 0xa186, 0x0046, 0x1150, 0x6870,
-+ 0xa606, 0x1138, 0x6874, 0xa506, 0xa084, 0xff00, 0x1110, 0x001e,
-+ 0x0068, 0x00c6, 0x080c, 0x856a, 0x0168, 0x001e, 0x611a, 0x601f,
-+ 0x0004, 0x7120, 0x610a, 0x001e, 0x080c, 0x85ef, 0x00ce, 0x0005,
-+ 0x001e, 0x0ce0, 0x00ce, 0x0ce0, 0x00c6, 0x0046, 0x080c, 0x6618,
-+ 0x1904, 0x6615, 0xa28e, 0x0033, 0x11e8, 0x080c, 0x6814, 0x0904,
-+ 0x6615, 0x7124, 0x610a, 0x7030, 0xa08e, 0x0200, 0x1140, 0x7034,
-+ 0xa005, 0x15d8, 0x2009, 0x0015, 0x080c, 0x85ef, 0x04b0, 0xa08e,
-+ 0x0100, 0x1598, 0x7034, 0xa005, 0x1580, 0x2009, 0x0016, 0x080c,
-+ 0x85ef, 0x0458, 0xa28e, 0x0032, 0x1540, 0x7030, 0xa08e, 0x1400,
-+ 0x1520, 0x2009, 0x0038, 0x0016, 0x2011, 0xba83, 0x2204, 0x8211,
-+ 0x220c, 0x080c, 0x27e3, 0x11c0, 0x080c, 0x4f0e, 0x11a8, 0x6612,
-+ 0x6516, 0x00c6, 0x080c, 0x856a, 0x0170, 0x001e, 0x611a, 0x080c,
-+ 0x9fb8, 0x601f, 0x0004, 0x7120, 0x610a, 0x001e, 0x080c, 0x85ef,
-+ 0x080c, 0x7134, 0x0010, 0x00ce, 0x001e, 0x004e, 0x00ce, 0x0005,
-+ 0x00f6, 0x00d6, 0x0026, 0x0016, 0x0136, 0x0146, 0x0156, 0x3c00,
-+ 0x0006, 0x2079, 0x0030, 0x2069, 0x0200, 0x080c, 0x1efe, 0x1590,
-+ 0x080c, 0x1da1, 0x05e0, 0x04f1, 0x1130, 0x7908, 0xa18c, 0x1fff,
-+ 0xa182, 0x0011, 0x1688, 0x20a9, 0x000c, 0x20e1, 0x0000, 0x2ea0,
-+ 0x2099, 0x020a, 0x53a5, 0x20e1, 0x2000, 0x2001, 0x020a, 0x2004,
-+ 0x7a0c, 0x7808, 0xa080, 0x0007, 0xa084, 0x1ff8, 0x0419, 0x1120,
-+ 0xa08a, 0x0140, 0x1a0c, 0x1511, 0x80ac, 0x20e1, 0x6000, 0x2099,
-+ 0x020a, 0x53a5, 0x20e1, 0x7000, 0x6828, 0x6828, 0x7803, 0x0004,
-+ 0xa294, 0x0070, 0x000e, 0x20e0, 0x015e, 0x014e, 0x013e, 0x001e,
-+ 0x002e, 0x00de, 0x00fe, 0x0005, 0xa016, 0x080c, 0x1856, 0xa085,
-+ 0x0001, 0x0c80, 0x0006, 0x2001, 0x0111, 0x2004, 0xa084, 0x0003,
-+ 0x000e, 0x0005, 0x0046, 0x00e6, 0x00d6, 0x2028, 0x2130, 0xa696,
-+ 0x00ff, 0x1198, 0xa596, 0xfffd, 0x1120, 0x2009, 0x007f, 0x0804,
-+ 0x66c4, 0xa596, 0xfffe, 0x1118, 0x2009, 0x007e, 0x04e8, 0xa596,
-+ 0xfffc, 0x1118, 0x2009, 0x0080, 0x04b8, 0x2011, 0x0000, 0x2019,
-+ 0xb435, 0x231c, 0xd3ac, 0x0138, 0x2021, 0x0000, 0x20a9, 0x00ff,
-+ 0x2071, 0xb535, 0x0030, 0x2021, 0x0081, 0x20a9, 0x007e, 0x2071,
-+ 0xb5b6, 0x2e1c, 0x83ff, 0x1128, 0x82ff, 0x1198, 0x2410, 0xc2fd,
-+ 0x0080, 0x2368, 0x6f10, 0x0006, 0x2100, 0xa706, 0x000e, 0x6b14,
-+ 0x1120, 0xa346, 0x1110, 0x2408, 0x0078, 0x87ff, 0x1110, 0x83ff,
-+ 0x0d58, 0x8420, 0x8e70, 0x1f04, 0x66a1, 0x82ff, 0x1118, 0xa085,
-+ 0x0001, 0x0018, 0xc2fc, 0x2208, 0xa006, 0x00de, 0x00ee, 0x004e,
-+ 0x0005, 0xa084, 0x0007, 0x000a, 0x0005, 0x66d5, 0x66d5, 0x66d5,
-+ 0x6826, 0x66d5, 0x66d6, 0x66eb, 0x6764, 0x0005, 0x7110, 0xd1bc,
-+ 0x0188, 0x7120, 0x2160, 0xac8c, 0x0007, 0x1160, 0xac8a, 0xbc00,
-+ 0x0248, 0x685c, 0xac02, 0x1230, 0x7124, 0x610a, 0x2009, 0x0046,
-+ 0x080c, 0x85ef, 0x0005, 0x00c6, 0xa484, 0x01ff, 0x0904, 0x6742,
-+ 0x7110, 0xd1bc, 0x1904, 0x6742, 0x2011, 0xba83, 0x2204, 0x8211,
-+ 0x220c, 0x080c, 0x27e3, 0x1904, 0x6742, 0x080c, 0x4f0e, 0x1904,
-+ 0x6742, 0x6612, 0x6516, 0x6000, 0xd0ec, 0x15e0, 0x6204, 0xa294,
-+ 0xff00, 0x8217, 0xa286, 0x0006, 0x0160, 0x080c, 0x5a90, 0x11d0,
-+ 0x6204, 0xa294, 0x00ff, 0xa286, 0x0006, 0x11a0, 0xa295, 0x0600,
-+ 0x6206, 0x00c6, 0x080c, 0x856a, 0x001e, 0x0530, 0x611a, 0x601f,
-+ 0x0006, 0x7120, 0x610a, 0x7130, 0x6152, 0x2009, 0x0044, 0x080c,
-+ 0x85ef, 0x00c0, 0x00c6, 0x080c, 0x856a, 0x001e, 0x0198, 0x611a,
-+ 0x601f, 0x0004, 0x7120, 0x610a, 0xa286, 0x0004, 0x1118, 0x6007,
-+ 0x0005, 0x0010, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x6c98,
-+ 0x080c, 0x7134, 0x00ce, 0x0005, 0x2001, 0xb40d, 0x2004, 0xd0ec,
-+ 0x0120, 0x2011, 0x8049, 0x080c, 0x3e8a, 0x00c6, 0x080c, 0x9e67,
-+ 0x001e, 0x0d80, 0x611a, 0x601f, 0x0006, 0x7120, 0x610a, 0x7130,
-+ 0x6152, 0x6013, 0x0300, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c,
-+ 0x6c52, 0x080c, 0x7134, 0x08f0, 0x7110, 0xd1bc, 0x0188, 0x7020,
-+ 0x2060, 0xac84, 0x0007, 0x1160, 0xac82, 0xbc00, 0x0248, 0x685c,
-+ 0xac02, 0x1230, 0x7124, 0x610a, 0x2009, 0x0045, 0x080c, 0x85ef,
-+ 0x0005, 0x0006, 0x080c, 0x2d83, 0x000e, 0x1168, 0x7110, 0xa18c,
-+ 0xff00, 0x810f, 0xa18e, 0x0000, 0x1130, 0xa084, 0x000f, 0xa08a,
-+ 0x0006, 0x1208, 0x000b, 0x0005, 0x6792, 0x6793, 0x6792, 0x6792,
-+ 0x67fc, 0x6808, 0x0005, 0x7110, 0xd1bc, 0x0120, 0x702c, 0xd084,
-+ 0x0904, 0x67fb, 0x700c, 0x7108, 0x080c, 0x27e3, 0x1904, 0x67fb,
-+ 0x080c, 0x4f0e, 0x1904, 0x67fb, 0x6612, 0x6516, 0x6204, 0x7110,
-+ 0xd1bc, 0x01f8, 0xa28c, 0x00ff, 0xa186, 0x0004, 0x0118, 0xa186,
-+ 0x0006, 0x15c8, 0x00c6, 0x080c, 0x6814, 0x00ce, 0x0904, 0x67fb,
-+ 0x00c6, 0x080c, 0x856a, 0x001e, 0x05f0, 0x611a, 0x080c, 0x9fb8,
-+ 0x601f, 0x0002, 0x7120, 0x610a, 0x2009, 0x0088, 0x080c, 0x85ef,
-+ 0x0490, 0xa28c, 0x00ff, 0xa186, 0x0006, 0x0160, 0xa186, 0x0004,
-+ 0x0148, 0xa294, 0xff00, 0x8217, 0xa286, 0x0004, 0x0118, 0xa286,
-+ 0x0006, 0x1188, 0x00c6, 0x080c, 0x856a, 0x001e, 0x01e0, 0x611a,
-+ 0x080c, 0x9fb8, 0x601f, 0x0005, 0x7120, 0x610a, 0x2009, 0x0088,
-+ 0x080c, 0x85ef, 0x0080, 0x00c6, 0x080c, 0x856a, 0x001e, 0x0158,
-+ 0x611a, 0x080c, 0x9fb8, 0x601f, 0x0004, 0x7120, 0x610a, 0x2009,
-+ 0x0001, 0x080c, 0x85ef, 0x0005, 0x7110, 0xd1bc, 0x0140, 0x00a1,
-+ 0x0130, 0x7124, 0x610a, 0x2009, 0x0089, 0x080c, 0x85ef, 0x0005,
-+ 0x7110, 0xd1bc, 0x0140, 0x0041, 0x0130, 0x7124, 0x610a, 0x2009,
-+ 0x008a, 0x080c, 0x85ef, 0x0005, 0x7020, 0x2060, 0xac84, 0x0007,
-+ 0x1158, 0xac82, 0xbc00, 0x0240, 0x2001, 0xb417, 0x2004, 0xac02,
-+ 0x1218, 0xa085, 0x0001, 0x0005, 0xa006, 0x0ce8, 0x7110, 0xd1bc,
-+ 0x1178, 0x7024, 0x2060, 0xac84, 0x0007, 0x1150, 0xac82, 0xbc00,
-+ 0x0238, 0x685c, 0xac02, 0x1220, 0x2009, 0x0051, 0x080c, 0x85ef,
-+ 0x0005, 0x2031, 0x0105, 0x0069, 0x0005, 0x2031, 0x0206, 0x0049,
-+ 0x0005, 0x2031, 0x0207, 0x0029, 0x0005, 0x2031, 0x0213, 0x0009,
-+ 0x0005, 0x00c6, 0x00d6, 0x00f6, 0x7000, 0xa084, 0xf000, 0xa086,
-+ 0xc000, 0x05b0, 0x080c, 0x856a, 0x0598, 0x0066, 0x00c6, 0x0046,
-+ 0x2011, 0xba83, 0x2204, 0x8211, 0x220c, 0x080c, 0x27e3, 0x1580,
-+ 0x080c, 0x4f0e, 0x1568, 0x6612, 0x6516, 0x2c00, 0x004e, 0x00ce,
-+ 0x601a, 0x080c, 0x9fb8, 0x080c, 0x15f4, 0x01f0, 0x2d00, 0x6056,
-+ 0x6803, 0x0000, 0x6837, 0x0000, 0x6c3a, 0xadf8, 0x000f, 0x20a9,
-+ 0x000e, 0x2fa0, 0x2e98, 0x53a3, 0x006e, 0x6612, 0x6007, 0x003e,
-+ 0x601f, 0x0001, 0x6003, 0x0001, 0x080c, 0x6c98, 0x080c, 0x7134,
-+ 0x00fe, 0x00de, 0x00ce, 0x0005, 0x080c, 0x85c0, 0x006e, 0x0cc0,
-+ 0x004e, 0x00ce, 0x0cc8, 0x2071, 0xb6f3, 0x7003, 0x0003, 0x700f,
-+ 0x0361, 0xa006, 0x701a, 0x7076, 0x7012, 0x7017, 0xbc00, 0x7007,
-+ 0x0000, 0x7026, 0x702b, 0x7d3b, 0x7032, 0x7037, 0x7d9b, 0x703b,
-+ 0xffff, 0x703f, 0xffff, 0x7042, 0x7047, 0x4405, 0x704a, 0x705b,
-+ 0x69f0, 0x2001, 0xb6a1, 0x2003, 0x0003, 0x2001, 0xb6a3, 0x2003,
-+ 0x0100, 0x3a00, 0xa084, 0x0005, 0x706e, 0x0005, 0x2071, 0xb6f3,
-+ 0x1d04, 0x6950, 0x2091, 0x6000, 0x700c, 0x8001, 0x700e, 0x1518,
-+ 0x700f, 0x0361, 0x7007, 0x0001, 0x0126, 0x2091, 0x8000, 0x7040,
-+ 0xa00d, 0x0128, 0x8109, 0x7142, 0x1110, 0x7044, 0x080f, 0x00c6,
-+ 0x2061, 0xb400, 0x6034, 0x00ce, 0xd0cc, 0x0180, 0x3a00, 0xa084,
-+ 0x0005, 0x726c, 0xa216, 0x0150, 0x706e, 0x2011, 0x8043, 0x2018,
-+ 0x080c, 0x3e8a, 0x0018, 0x0126, 0x2091, 0x8000, 0x7024, 0xa00d,
-+ 0x0188, 0x7020, 0x8001, 0x7022, 0x1168, 0x7023, 0x0009, 0x8109,
-+ 0x7126, 0xa186, 0x03e8, 0x1110, 0x7028, 0x080f, 0x81ff, 0x1110,
-+ 0x7028, 0x080f, 0x7030, 0xa00d, 0x0180, 0x702c, 0x8001, 0x702e,
-+ 0x1160, 0x702f, 0x0009, 0x8109, 0x7132, 0x0128, 0xa184, 0x007f,
-+ 0x090c, 0x7de0, 0x0010, 0x7034, 0x080f, 0x7038, 0xa005, 0x0118,
-+ 0x0310, 0x8001, 0x703a, 0x703c, 0xa005, 0x0118, 0x0310, 0x8001,
-+ 0x703e, 0x704c, 0xa00d, 0x0168, 0x7048, 0x8001, 0x704a, 0x1148,
-+ 0x704b, 0x0009, 0x8109, 0x714e, 0x1120, 0x7150, 0x714e, 0x7058,
-+ 0x080f, 0x7018, 0xa00d, 0x01d8, 0x0016, 0x7074, 0xa00d, 0x0158,
-+ 0x7070, 0x8001, 0x7072, 0x1138, 0x7073, 0x0009, 0x8109, 0x7176,
-+ 0x1110, 0x7078, 0x080f, 0x001e, 0x7008, 0x8001, 0x700a, 0x1138,
-+ 0x700b, 0x0009, 0x8109, 0x711a, 0x1110, 0x701c, 0x080f, 0x012e,
-+ 0x7004, 0x0002, 0x6976, 0x6977, 0x698f, 0x00e6, 0x2071, 0xb6f3,
-+ 0x7018, 0xa005, 0x1120, 0x711a, 0x721e, 0x700b, 0x0009, 0x00ee,
-+ 0x0005, 0x00e6, 0x0006, 0x2071, 0xb6f3, 0x701c, 0xa206, 0x1110,
-+ 0x701a, 0x701e, 0x000e, 0x00ee, 0x0005, 0x00e6, 0x2071, 0xb6f3,
-+ 0x6088, 0xa102, 0x0208, 0x618a, 0x00ee, 0x0005, 0x0005, 0x7110,
-+ 0x080c, 0x4f6a, 0x1158, 0x6088, 0x8001, 0x0240, 0x608a, 0x1130,
-+ 0x0126, 0x2091, 0x8000, 0x080c, 0x7134, 0x012e, 0x8108, 0xa182,
-+ 0x00ff, 0x0218, 0xa00e, 0x7007, 0x0002, 0x7112, 0x0005, 0x7014,
-+ 0x2060, 0x0126, 0x2091, 0x8000, 0x603c, 0xa005, 0x0128, 0x8001,
-+ 0x603e, 0x1110, 0x080c, 0x9ea6, 0x6014, 0xa005, 0x0500, 0x8001,
-+ 0x6016, 0x11e8, 0x611c, 0xa186, 0x0003, 0x0118, 0xa186, 0x0006,
-+ 0x11a0, 0x6010, 0x2068, 0x6854, 0xa08a, 0x199a, 0x0270, 0xa082,
-+ 0x1999, 0x6856, 0xa08a, 0x199a, 0x0210, 0x2001, 0x1999, 0x8003,
-+ 0x800b, 0x810b, 0xa108, 0x6116, 0x0010, 0x080c, 0x997e, 0x012e,
-+ 0xac88, 0x0018, 0x7116, 0x2001, 0xec00, 0xa102, 0x0220, 0x7017,
-+ 0xbc00, 0x7007, 0x0000, 0x0005, 0x00e6, 0x2071, 0xb6f3, 0x7027,
-+ 0x07d0, 0x7023, 0x0009, 0x00ee, 0x0005, 0x2001, 0xb6fc, 0x2003,
-+ 0x0000, 0x0005, 0x00e6, 0x2071, 0xb6f3, 0x7132, 0x702f, 0x0009,
-+ 0x00ee, 0x0005, 0x2011, 0xb6ff, 0x2013, 0x0000, 0x0005, 0x00e6,
-+ 0x2071, 0xb6f3, 0x711a, 0x721e, 0x700b, 0x0009, 0x00ee, 0x0005,
-+ 0x00c6, 0x0026, 0x7054, 0x8000, 0x7056, 0x2061, 0xb6a1, 0x6008,
-+ 0xa086, 0x0000, 0x0158, 0x7068, 0x6032, 0x7064, 0x602e, 0x7060,
-+ 0x602a, 0x705c, 0x6026, 0x2c10, 0x080c, 0x163f, 0x002e, 0x00ce,
-+ 0x0005, 0x0006, 0x0016, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x080c,
-+ 0x68be, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x001e, 0x000e, 0x0005,
-+ 0x00e6, 0x2071, 0xb6f3, 0x7176, 0x727a, 0x7073, 0x0009, 0x00ee,
-+ 0x0005, 0x00e6, 0x0006, 0x2071, 0xb6f3, 0x7078, 0xa206, 0x1110,
-+ 0x7076, 0x707a, 0x000e, 0x00ee, 0x0005, 0x00c6, 0x2061, 0xb774,
-+ 0x00ce, 0x0005, 0xa184, 0x000f, 0x8003, 0x8003, 0x8003, 0xa080,
-+ 0xb774, 0x2060, 0x0005, 0x6854, 0xa08a, 0x199a, 0x0210, 0x2001,
-+ 0x1999, 0xa005, 0x1150, 0x00c6, 0x2061, 0xb774, 0x6014, 0x00ce,
-+ 0xa005, 0x1138, 0x2001, 0x001e, 0x0020, 0xa08e, 0xffff, 0x1108,
-+ 0xa006, 0x8003, 0x800b, 0x810b, 0xa108, 0x6116, 0x684c, 0xa08c,
-+ 0x00c0, 0xa18e, 0x00c0, 0x05e8, 0xd0b4, 0x1138, 0xd0bc, 0x1550,
-+ 0x2009, 0x0006, 0x080c, 0x6ab6, 0x0005, 0xd0fc, 0x0138, 0xa084,
-+ 0x0003, 0x0120, 0xa086, 0x0003, 0x1904, 0x6ab0, 0x6020, 0xd0d4,
-+ 0x0130, 0xc0d4, 0x6022, 0x6860, 0x602a, 0x685c, 0x602e, 0x2009,
-+ 0xb474, 0x2104, 0xd084, 0x0138, 0x87ff, 0x1120, 0x2009, 0x0042,
-+ 0x080c, 0x85ef, 0x0005, 0x87ff, 0x1120, 0x2009, 0x0043, 0x080c,
-+ 0x85ef, 0x0005, 0xd0fc, 0x0130, 0xa084, 0x0003, 0x0118, 0xa086,
-+ 0x0003, 0x11f0, 0x87ff, 0x1120, 0x2009, 0x0042, 0x080c, 0x85ef,
-+ 0x0005, 0xd0fc, 0x0160, 0xa084, 0x0003, 0xa08e, 0x0002, 0x0148,
-+ 0x87ff, 0x1120, 0x2009, 0x0041, 0x080c, 0x85ef, 0x0005, 0x0061,
-+ 0x0ce8, 0x87ff, 0x1dd8, 0x2009, 0x0043, 0x080c, 0x85ef, 0x0cb0,
-+ 0x2009, 0x0004, 0x0019, 0x0005, 0x2009, 0x0001, 0x00d6, 0x6010,
-+ 0xa0ec, 0xf000, 0x0510, 0x2068, 0x6952, 0x6800, 0x6012, 0xa186,
-+ 0x0001, 0x1188, 0x694c, 0xa18c, 0x8100, 0xa18e, 0x8100, 0x1158,
-+ 0x00c6, 0x2061, 0xb774, 0x6200, 0xd28c, 0x1120, 0x6204, 0x8210,
-+ 0x0208, 0x6206, 0x00ce, 0x080c, 0x53c9, 0x6010, 0xa06d, 0x0076,
-+ 0x2039, 0x0000, 0x190c, 0x6a3b, 0x007e, 0x00de, 0x0005, 0x0156,
-+ 0x00c6, 0x2061, 0xb774, 0x6000, 0x81ff, 0x0110, 0xa205, 0x0008,
-+ 0xa204, 0x6002, 0x00ce, 0x015e, 0x0005, 0x6800, 0xd08c, 0x1138,
-+ 0x6808, 0xa005, 0x0120, 0x8001, 0x680a, 0xa085, 0x0001, 0x0005,
-+ 0x20a9, 0x0010, 0xa006, 0x8004, 0x8086, 0x818e, 0x1208, 0xa200,
-+ 0x1f04, 0x6afc, 0x8086, 0x818e, 0x0005, 0x0156, 0x20a9, 0x0010,
-+ 0xa005, 0x01b8, 0xa11a, 0x12a8, 0x8213, 0x818d, 0x0228, 0xa11a,
-+ 0x1220, 0x1f04, 0x6b0c, 0x0028, 0xa11a, 0x2308, 0x8210, 0x1f04,
-+ 0x6b0c, 0x0006, 0x3200, 0xa084, 0xefff, 0x2080, 0x000e, 0x015e,
-+ 0x0005, 0x0006, 0x3200, 0xa085, 0x1000, 0x0cb8, 0x0126, 0x2091,
-+ 0x2800, 0x2079, 0xb6e0, 0x012e, 0x00d6, 0x2069, 0xb6e0, 0x6803,
-+ 0x0005, 0x2069, 0x0004, 0x2d04, 0xa085, 0x8001, 0x206a, 0x00de,
-+ 0x0005, 0x00c6, 0x6027, 0x0001, 0x7804, 0xa084, 0x0007, 0x0002,
-+ 0x6b4a, 0x6b6b, 0x6bbe, 0x6b50, 0x6b6b, 0x6b4a, 0x6b48, 0x6b48,
-+ 0x080c, 0x1511, 0x080c, 0x69d5, 0x080c, 0x7134, 0x00ce, 0x0005,
-+ 0x62c0, 0x82ff, 0x1110, 0x00ce, 0x0005, 0x2011, 0x4a96, 0x080c,
-+ 0x6961, 0x7828, 0xa092, 0x00c8, 0x1228, 0x8000, 0x782a, 0x080c,
-+ 0x4ad0, 0x0c88, 0x080c, 0x4a96, 0x7807, 0x0003, 0x7827, 0x0000,
-+ 0x782b, 0x0000, 0x0c40, 0x080c, 0x69d5, 0x3c00, 0x0006, 0x2011,
-+ 0x0209, 0x20e1, 0x4000, 0x2214, 0x000e, 0x20e0, 0x82ff, 0x0178,
-+ 0x62c0, 0x82ff, 0x1160, 0x782b, 0x0000, 0x7824, 0xa065, 0x090c,
-+ 0x1511, 0x2009, 0x0013, 0x080c, 0x85ef, 0x00ce, 0x0005, 0x3900,
-+ 0xa082, 0xb82c, 0x1210, 0x080c, 0x82d5, 0x00c6, 0x7824, 0xa065,
-+ 0x090c, 0x1511, 0x7804, 0xa086, 0x0004, 0x0904, 0x6bfe, 0x7828,
-+ 0xa092, 0x2710, 0x1230, 0x8000, 0x782a, 0x00ce, 0x080c, 0x7d17,
-+ 0x0c20, 0x6104, 0xa186, 0x0003, 0x1188, 0x00e6, 0x2071, 0xb400,
-+ 0x70e0, 0x00ee, 0xd08c, 0x0150, 0x00c6, 0x00e6, 0x2061, 0x0100,
-+ 0x2071, 0xb400, 0x080c, 0x4ad9, 0x00ee, 0x00ce, 0x080c, 0xb3c7,
-+ 0x2009, 0x0014, 0x080c, 0x85ef, 0x00ce, 0x0838, 0x2001, 0xb6fc,
-+ 0x2003, 0x0000, 0x62c0, 0x82ff, 0x1160, 0x782b, 0x0000, 0x7824,
-+ 0xa065, 0x090c, 0x1511, 0x2009, 0x0013, 0x080c, 0x8643, 0x00ce,
-+ 0x0005, 0x00c6, 0x00d6, 0x3900, 0xa082, 0xb82c, 0x1210, 0x080c,
-+ 0x82d5, 0x7824, 0xa005, 0x090c, 0x1511, 0x781c, 0xa06d, 0x090c,
-+ 0x1511, 0x6800, 0xc0dc, 0x6802, 0x7924, 0x2160, 0x080c, 0x85c0,
-+ 0x693c, 0x81ff, 0x090c, 0x1511, 0x8109, 0x693e, 0x6854, 0xa015,
-+ 0x0110, 0x7a1e, 0x0010, 0x7918, 0x791e, 0x7807, 0x0000, 0x7827,
-+ 0x0000, 0x00de, 0x00ce, 0x080c, 0x7134, 0x0888, 0x6104, 0xa186,
-+ 0x0002, 0x0128, 0xa186, 0x0004, 0x0110, 0x0804, 0x6b97, 0x7808,
-+ 0xac06, 0x0904, 0x6b97, 0x080c, 0x7055, 0x080c, 0x6c98, 0x00ce,
-+ 0x080c, 0x7134, 0x0804, 0x6b85, 0x00c6, 0x6027, 0x0002, 0x62c8,
-+ 0x60c4, 0xa205, 0x1178, 0x793c, 0xa1e5, 0x0000, 0x0130, 0x2009,
-+ 0x0049, 0x080c, 0x85ef, 0x00ce, 0x0005, 0x2011, 0xb6ff, 0x2013,
-+ 0x0000, 0x0cc8, 0x3908, 0xa192, 0xb82c, 0x1210, 0x080c, 0x82d5,
-+ 0x793c, 0x81ff, 0x0d90, 0x7944, 0xa192, 0x7530, 0x12b8, 0x8108,
-+ 0x7946, 0x793c, 0xa188, 0x0007, 0x210c, 0xa18e, 0x0006, 0x1138,
-+ 0x6014, 0xa084, 0x0184, 0xa085, 0x0012, 0x6016, 0x08e0, 0x6014,
-+ 0xa084, 0x0184, 0xa085, 0x0016, 0x6016, 0x08a8, 0x7848, 0xc085,
-+ 0x784a, 0x0888, 0x0006, 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000,
-+ 0x600f, 0x0000, 0x2c08, 0x2061, 0xb6e0, 0x6020, 0x8000, 0x6022,
-+ 0x6010, 0xa005, 0x0148, 0xa080, 0x0003, 0x2102, 0x6112, 0x012e,
-+ 0x00ce, 0x001e, 0x000e, 0x0005, 0x6116, 0x6112, 0x0cc0, 0x00d6,
-+ 0x2069, 0xb6e0, 0x6000, 0xd0d4, 0x0168, 0x6820, 0x8000, 0x6822,
-+ 0xa086, 0x0001, 0x1110, 0x2c00, 0x681e, 0x6804, 0xa084, 0x0007,
-+ 0x0804, 0x713a, 0xc0d5, 0x6002, 0x6818, 0xa005, 0x0158, 0x6056,
-+ 0x605b, 0x0000, 0x0006, 0x2c00, 0x681a, 0x00de, 0x685a, 0x2069,
-+ 0xb6e0, 0x0c18, 0x6056, 0x605a, 0x2c00, 0x681a, 0x681e, 0x08e8,
-+ 0x0006, 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000, 0x600f, 0x0000,
-+ 0x2c08, 0x2061, 0xb6e0, 0x6020, 0x8000, 0x6022, 0x6008, 0xa005,
-+ 0x0148, 0xa080, 0x0003, 0x2102, 0x610a, 0x012e, 0x00ce, 0x001e,
-+ 0x000e, 0x0005, 0x610e, 0x610a, 0x0cc0, 0x00c6, 0x600f, 0x0000,
-+ 0x2c08, 0x2061, 0xb6e0, 0x6034, 0xa005, 0x0130, 0xa080, 0x0003,
-+ 0x2102, 0x6136, 0x00ce, 0x0005, 0x613a, 0x6136, 0x0cd8, 0x00f6,
-+ 0x00e6, 0x00d6, 0x00c6, 0x0076, 0x0066, 0x0056, 0x0036, 0x0026,
-+ 0x0016, 0x0006, 0x0126, 0xa02e, 0x2071, 0xb6e0, 0x7638, 0x2660,
-+ 0x2678, 0x2091, 0x8000, 0x8cff, 0x0904, 0x6d40, 0x6018, 0xa080,
-+ 0x0028, 0x2004, 0xa206, 0x1904, 0x6d3b, 0x87ff, 0x0120, 0x6050,
-+ 0xa106, 0x1904, 0x6d3b, 0x703c, 0xac06, 0x1190, 0x0036, 0x2019,
-+ 0x0001, 0x080c, 0x7f8e, 0x7033, 0x0000, 0x703f, 0x0000, 0x7043,
-+ 0x0000, 0x7047, 0x0000, 0x704b, 0x0000, 0x003e, 0x2029, 0x0001,
-+ 0x7038, 0xac36, 0x1110, 0x660c, 0x763a, 0x7034, 0xac36, 0x1140,
-+ 0x2c00, 0xaf36, 0x0118, 0x2f00, 0x7036, 0x0010, 0x7037, 0x0000,
-+ 0x660c, 0x0066, 0x2c00, 0xaf06, 0x0110, 0x7e0e, 0x0008, 0x2678,
-+ 0x600f, 0x0000, 0x080c, 0x9beb, 0x01c8, 0x6010, 0x2068, 0x601c,
-+ 0xa086, 0x0003, 0x1580, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000,
-+ 0x0016, 0x0036, 0x0076, 0x080c, 0x9e5d, 0x080c, 0xb303, 0x080c,
-+ 0x53c9, 0x007e, 0x003e, 0x001e, 0x080c, 0x9da2, 0x080c, 0x9dae,
-+ 0x00ce, 0x0804, 0x6cdb, 0x2c78, 0x600c, 0x2060, 0x0804, 0x6cdb,
-+ 0x85ff, 0x0120, 0x0036, 0x080c, 0x71f1, 0x003e, 0x012e, 0x000e,
-+ 0x001e, 0x002e, 0x003e, 0x005e, 0x006e, 0x007e, 0x00ce, 0x00de,
-+ 0x00ee, 0x00fe, 0x0005, 0x601c, 0xa086, 0x0006, 0x1158, 0x0016,
-+ 0x0036, 0x0076, 0x080c, 0xb303, 0x080c, 0xb01c, 0x007e, 0x003e,
-+ 0x001e, 0x08a0, 0x601c, 0xa086, 0x000a, 0x0904, 0x6d25, 0x0804,
-+ 0x6d23, 0x0006, 0x0066, 0x00c6, 0x00d6, 0x00f6, 0x2031, 0x0000,
-+ 0x0126, 0x2091, 0x8000, 0x2079, 0xb6e0, 0x7838, 0xa065, 0x0568,
-+ 0x600c, 0x0006, 0x600f, 0x0000, 0x783c, 0xac06, 0x1180, 0x0036,
-+ 0x2019, 0x0001, 0x080c, 0x7f8e, 0x7833, 0x0000, 0x783f, 0x0000,
-+ 0x7843, 0x0000, 0x7847, 0x0000, 0x784b, 0x0000, 0x003e, 0x080c,
-+ 0x9beb, 0x0178, 0x6010, 0x2068, 0x601c, 0xa086, 0x0003, 0x11b0,
-+ 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x080c, 0x53c9, 0x080c,
-+ 0x9da2, 0x080c, 0x9dae, 0x000e, 0x0888, 0x7e3a, 0x7e36, 0x012e,
-+ 0x00fe, 0x00de, 0x00ce, 0x006e, 0x000e, 0x0005, 0x601c, 0xa086,
-+ 0x0006, 0x1118, 0x080c, 0xb01c, 0x0c60, 0x601c, 0xa086, 0x000a,
-+ 0x0d08, 0x08f0, 0x0016, 0x0026, 0x0086, 0x2041, 0x0000, 0x0099,
-+ 0x080c, 0x6e88, 0x008e, 0x002e, 0x001e, 0x0005, 0x00f6, 0x0126,
-+ 0x2079, 0xb6e0, 0x2091, 0x8000, 0x080c, 0x6f15, 0x080c, 0x6f87,
-+ 0x012e, 0x00fe, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066,
-+ 0x0016, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0xb6e0, 0x7614,
-+ 0x2660, 0x2678, 0x8cff, 0x0904, 0x6e5e, 0x6018, 0xa080, 0x0028,
-+ 0x2004, 0xa206, 0x1904, 0x6e59, 0x88ff, 0x0120, 0x6050, 0xa106,
-+ 0x1904, 0x6e59, 0x7024, 0xac06, 0x1538, 0x2069, 0x0100, 0x68c0,
-+ 0xa005, 0x01f0, 0x080c, 0x69d5, 0x080c, 0x7d24, 0x68c3, 0x0000,
-+ 0x080c, 0x81f0, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04,
-+ 0xa384, 0x1000, 0x0120, 0x6803, 0x0100, 0x6803, 0x0000, 0x2069,
-+ 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x0020,
-+ 0x6003, 0x0009, 0x630a, 0x04e8, 0x7014, 0xac36, 0x1110, 0x660c,
-+ 0x7616, 0x7010, 0xac36, 0x1140, 0x2c00, 0xaf36, 0x0118, 0x2f00,
-+ 0x7012, 0x0010, 0x7013, 0x0000, 0x660c, 0x0066, 0x2c00, 0xaf06,
-+ 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x6010, 0x2068,
-+ 0x080c, 0x9beb, 0x01b8, 0x601c, 0xa086, 0x0003, 0x1540, 0x6837,
-+ 0x0103, 0x6b4a, 0x6847, 0x0000, 0x0016, 0x0036, 0x0086, 0x080c,
-+ 0x9e5d, 0x080c, 0xb303, 0x080c, 0x53c9, 0x008e, 0x003e, 0x001e,
-+ 0x080c, 0x9da2, 0x080c, 0x9dae, 0x080c, 0x80c8, 0x00ce, 0x0804,
-+ 0x6de2, 0x2c78, 0x600c, 0x2060, 0x0804, 0x6de2, 0x012e, 0x000e,
-+ 0x001e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x601c,
-+ 0xa086, 0x0006, 0x1158, 0x0016, 0x0036, 0x0086, 0x080c, 0xb303,
-+ 0x080c, 0xb01c, 0x008e, 0x003e, 0x001e, 0x08e0, 0x601c, 0xa086,
-+ 0x0002, 0x1128, 0x6004, 0xa086, 0x0085, 0x0908, 0x0898, 0x601c,
-+ 0xa086, 0x0005, 0x1978, 0x6004, 0xa086, 0x0085, 0x0d20, 0x0850,
-+ 0x00c6, 0x0006, 0x0126, 0x2091, 0x8000, 0xa280, 0xb535, 0x2004,
-+ 0xa065, 0x0904, 0x6f11, 0x00f6, 0x00e6, 0x00d6, 0x0066, 0x2071,
-+ 0xb6e0, 0x6654, 0x7018, 0xac06, 0x1108, 0x761a, 0x701c, 0xac06,
-+ 0x1130, 0x86ff, 0x1118, 0x7018, 0x701e, 0x0008, 0x761e, 0x6058,
-+ 0xa07d, 0x0108, 0x7e56, 0xa6ed, 0x0000, 0x0110, 0x2f00, 0x685a,
-+ 0x6057, 0x0000, 0x605b, 0x0000, 0x6000, 0xc0d4, 0xc0dc, 0x6002,
-+ 0x080c, 0x4e95, 0x0904, 0x6f0d, 0x7624, 0x86ff, 0x05e8, 0xa680,
-+ 0x0004, 0x2004, 0xad06, 0x15c0, 0x00d6, 0x2069, 0x0100, 0x68c0,
-+ 0xa005, 0x0548, 0x080c, 0x69d5, 0x080c, 0x7d24, 0x68c3, 0x0000,
-+ 0x080c, 0x81f0, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04,
-+ 0xa384, 0x1000, 0x0120, 0x6803, 0x0100, 0x6803, 0x0000, 0x2069,
-+ 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x00de,
-+ 0x00c6, 0x603c, 0xa005, 0x0110, 0x8001, 0x603e, 0x2660, 0x080c,
-+ 0x9dae, 0x00ce, 0x0048, 0x00de, 0x00c6, 0x2660, 0x6003, 0x0009,
-+ 0x630a, 0x00ce, 0x0804, 0x6eb8, 0x8dff, 0x0158, 0x6837, 0x0103,
-+ 0x6b4a, 0x6847, 0x0000, 0x080c, 0x9e5d, 0x080c, 0xb303, 0x080c,
-+ 0x53c9, 0x080c, 0x80c8, 0x0804, 0x6eb8, 0x006e, 0x00de, 0x00ee,
-+ 0x00fe, 0x012e, 0x000e, 0x00ce, 0x0005, 0x0006, 0x0066, 0x00c6,
-+ 0x00d6, 0x2031, 0x0000, 0x7814, 0xa065, 0x0904, 0x6f67, 0x600c,
-+ 0x0006, 0x600f, 0x0000, 0x7824, 0xac06, 0x1540, 0x2069, 0x0100,
-+ 0x68c0, 0xa005, 0x01f0, 0x080c, 0x69d5, 0x080c, 0x7d24, 0x68c3,
-+ 0x0000, 0x080c, 0x81f0, 0x7827, 0x0000, 0x0036, 0x2069, 0x0140,
-+ 0x6b04, 0xa384, 0x1000, 0x0120, 0x6803, 0x0100, 0x6803, 0x0000,
-+ 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e,
-+ 0x0028, 0x6003, 0x0009, 0x630a, 0x2c30, 0x00b0, 0x6010, 0x2068,
-+ 0x080c, 0x9beb, 0x0168, 0x601c, 0xa086, 0x0003, 0x11b8, 0x6837,
-+ 0x0103, 0x6b4a, 0x6847, 0x0000, 0x080c, 0x53c9, 0x080c, 0x9da2,
-+ 0x080c, 0x9dae, 0x080c, 0x80c8, 0x000e, 0x0804, 0x6f1c, 0x7e16,
-+ 0x7e12, 0x00de, 0x00ce, 0x006e, 0x000e, 0x0005, 0x601c, 0xa086,
-+ 0x0006, 0x1118, 0x080c, 0xb01c, 0x0c58, 0x601c, 0xa086, 0x0002,
-+ 0x1128, 0x6004, 0xa086, 0x0085, 0x09d0, 0x0c10, 0x601c, 0xa086,
-+ 0x0005, 0x19f0, 0x6004, 0xa086, 0x0085, 0x0d60, 0x08c8, 0x0006,
-+ 0x0066, 0x00c6, 0x00d6, 0x7818, 0xa065, 0x0904, 0x6fed, 0x6054,
-+ 0x0006, 0x6057, 0x0000, 0x605b, 0x0000, 0x6000, 0xc0d4, 0xc0dc,
-+ 0x6002, 0x080c, 0x4e95, 0x0904, 0x6fea, 0x7e24, 0x86ff, 0x05e8,
-+ 0xa680, 0x0004, 0x2004, 0xad06, 0x15c0, 0x00d6, 0x2069, 0x0100,
-+ 0x68c0, 0xa005, 0x0548, 0x080c, 0x69d5, 0x080c, 0x7d24, 0x68c3,
-+ 0x0000, 0x080c, 0x81f0, 0x7827, 0x0000, 0x0036, 0x2069, 0x0140,
-+ 0x6b04, 0xa384, 0x1000, 0x0120, 0x6803, 0x0100, 0x6803, 0x0000,
-+ 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e,
-+ 0x00de, 0x00c6, 0x603c, 0xa005, 0x0110, 0x8001, 0x603e, 0x2660,
-+ 0x080c, 0x9dae, 0x00ce, 0x0048, 0x00de, 0x00c6, 0x2660, 0x6003,
-+ 0x0009, 0x630a, 0x00ce, 0x0804, 0x6f99, 0x8dff, 0x0138, 0x6837,
-+ 0x0103, 0x6b4a, 0x6847, 0x0000, 0x080c, 0x53c9, 0x080c, 0x80c8,
-+ 0x0804, 0x6f99, 0x000e, 0x0804, 0x6f8c, 0x781e, 0x781a, 0x00de,
-+ 0x00ce, 0x006e, 0x000e, 0x0005, 0x00e6, 0x00d6, 0x0066, 0x6000,
-+ 0xd0dc, 0x01a0, 0x604c, 0xa06d, 0x0188, 0x6848, 0xa606, 0x1170,
-+ 0x2071, 0xb6e0, 0x7024, 0xa035, 0x0148, 0xa080, 0x0004, 0x2004,
-+ 0xad06, 0x1120, 0x6000, 0xc0dc, 0x6002, 0x0021, 0x006e, 0x00de,
-+ 0x00ee, 0x0005, 0x00f6, 0x2079, 0x0100, 0x78c0, 0xa005, 0x1138,
-+ 0x00c6, 0x2660, 0x6003, 0x0009, 0x630a, 0x00ce, 0x04a0, 0x080c,
-+ 0x7d24, 0x78c3, 0x0000, 0x080c, 0x81f0, 0x7027, 0x0000, 0x0036,
-+ 0x2079, 0x0140, 0x7b04, 0xa384, 0x1000, 0x0120, 0x7803, 0x0100,
-+ 0x7803, 0x0000, 0x2079, 0x0100, 0x7824, 0xd084, 0x0110, 0x7827,
-+ 0x0001, 0x080c, 0x81f0, 0x003e, 0x080c, 0x4e95, 0x00c6, 0x603c,
-+ 0xa005, 0x0110, 0x8001, 0x603e, 0x2660, 0x080c, 0x85c0, 0x00ce,
-+ 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x080c, 0x9e5d, 0x080c,
-+ 0x53c9, 0x080c, 0x80c8, 0x00fe, 0x0005, 0x00e6, 0x00c6, 0x2071,
-+ 0xb6e0, 0x7004, 0xa084, 0x0007, 0x0002, 0x7067, 0x706a, 0x7080,
-+ 0x7099, 0x70d2, 0x7067, 0x7065, 0x7065, 0x080c, 0x1511, 0x00ce,
-+ 0x00ee, 0x0005, 0x7024, 0xa065, 0x0148, 0x7020, 0x8001, 0x7022,
-+ 0x600c, 0xa015, 0x0150, 0x7216, 0x600f, 0x0000, 0x7007, 0x0000,
-+ 0x7027, 0x0000, 0x00ce, 0x00ee, 0x0005, 0x7216, 0x7212, 0x0cb0,
-+ 0x6018, 0x2060, 0x080c, 0x4e95, 0x6000, 0xc0dc, 0x6002, 0x7020,
-+ 0x8001, 0x7022, 0x0120, 0x6054, 0xa015, 0x0140, 0x721e, 0x7007,
-+ 0x0000, 0x7027, 0x0000, 0x00ce, 0x00ee, 0x0005, 0x7218, 0x721e,
-+ 0x0cb0, 0x7024, 0xa065, 0x0598, 0x700c, 0xac06, 0x1160, 0x080c,
-+ 0x80c8, 0x600c, 0xa015, 0x0120, 0x720e, 0x600f, 0x0000, 0x0428,
-+ 0x720e, 0x720a, 0x0410, 0x7014, 0xac06, 0x1160, 0x080c, 0x80c8,
-+ 0x600c, 0xa015, 0x0120, 0x7216, 0x600f, 0x0000, 0x00b0, 0x7216,
-+ 0x7212, 0x0098, 0x6018, 0x2060, 0x080c, 0x4e95, 0x6000, 0xc0dc,
-+ 0x6002, 0x080c, 0x80c8, 0x701c, 0xa065, 0x0138, 0x6054, 0xa015,
-+ 0x0110, 0x721e, 0x0010, 0x7218, 0x721e, 0x7027, 0x0000, 0x00ce,
-+ 0x00ee, 0x0005, 0x7024, 0xa065, 0x0140, 0x080c, 0x80c8, 0x600c,
-+ 0xa015, 0x0150, 0x720e, 0x600f, 0x0000, 0x080c, 0x81f0, 0x7027,
-+ 0x0000, 0x00ce, 0x00ee, 0x0005, 0x720e, 0x720a, 0x0cb0, 0x00d6,
-+ 0x2069, 0xb6e0, 0x6830, 0xa084, 0x0003, 0x0002, 0x70f4, 0x70f6,
-+ 0x711a, 0x70f2, 0x080c, 0x1511, 0x00de, 0x0005, 0x00c6, 0x6840,
-+ 0xa086, 0x0001, 0x01b8, 0x683c, 0xa065, 0x0130, 0x600c, 0xa015,
-+ 0x0170, 0x6a3a, 0x600f, 0x0000, 0x6833, 0x0000, 0x683f, 0x0000,
-+ 0x2011, 0xb6ff, 0x2013, 0x0000, 0x00ce, 0x00de, 0x0005, 0x683a,
-+ 0x6836, 0x0c90, 0x6843, 0x0000, 0x6838, 0xa065, 0x0d68, 0x6003,
-+ 0x0003, 0x0c50, 0x00c6, 0x6843, 0x0000, 0x6847, 0x0000, 0x684b,
-+ 0x0000, 0x683c, 0xa065, 0x0168, 0x600c, 0xa015, 0x0130, 0x6a3a,
-+ 0x600f, 0x0000, 0x683f, 0x0000, 0x0020, 0x683f, 0x0000, 0x683a,
-+ 0x6836, 0x00ce, 0x00de, 0x0005, 0x00d6, 0x2069, 0xb6e0, 0x6804,
-+ 0xa084, 0x0007, 0x0002, 0x7145, 0x71e1, 0x71e1, 0x71e1, 0x71e1,
-+ 0x71e3, 0x7143, 0x7143, 0x080c, 0x1511, 0x6820, 0xa005, 0x1110,
-+ 0x00de, 0x0005, 0x00c6, 0x680c, 0xa065, 0x0150, 0x6807, 0x0004,
-+ 0x6826, 0x682b, 0x0000, 0x080c, 0x7233, 0x00ce, 0x00de, 0x0005,
-+ 0x6814, 0xa065, 0x0150, 0x6807, 0x0001, 0x6826, 0x682b, 0x0000,
-+ 0x080c, 0x7233, 0x00ce, 0x00de, 0x0005, 0x00e6, 0x0036, 0x6a1c,
-+ 0xa2f5, 0x0000, 0x0904, 0x71dd, 0x704c, 0xa00d, 0x0118, 0x7088,
-+ 0xa005, 0x01a0, 0x7054, 0xa075, 0x0120, 0xa20e, 0x0904, 0x71dd,
-+ 0x0028, 0x6818, 0xa20e, 0x0904, 0x71dd, 0x2070, 0x704c, 0xa00d,
-+ 0x0d88, 0x7088, 0xa005, 0x1d70, 0x2e00, 0x681e, 0x733c, 0x7038,
-+ 0xa302, 0x1e40, 0x080c, 0x8597, 0x0904, 0x71dd, 0x8318, 0x733e,
-+ 0x6112, 0x2e10, 0x621a, 0xa180, 0x0014, 0x2004, 0xa084, 0x00ff,
-+ 0x605a, 0xa180, 0x0014, 0x2003, 0x0000, 0xa180, 0x0015, 0x2004,
-+ 0xa08a, 0x199a, 0x0210, 0x2001, 0x1999, 0x8003, 0x801b, 0x831b,
-+ 0xa318, 0x6316, 0x003e, 0x00f6, 0x2c78, 0x71a0, 0x2001, 0xb435,
-+ 0x2004, 0xd0ac, 0x1110, 0xd1bc, 0x0150, 0x7100, 0xd1f4, 0x0120,
-+ 0x7114, 0xa18c, 0x00ff, 0x0040, 0x2009, 0x0000, 0x0028, 0xa1e0,
-+ 0x2d88, 0x2c0d, 0xa18c, 0x00ff, 0x2061, 0x0100, 0x619a, 0x080c,
-+ 0x785c, 0x7300, 0xc3dd, 0x7302, 0x6807, 0x0002, 0x2f18, 0x6b26,
-+ 0x682b, 0x0000, 0x781f, 0x0003, 0x7803, 0x0001, 0x7807, 0x0040,
-+ 0x00fe, 0x00ee, 0x00ce, 0x00de, 0x0005, 0x003e, 0x00ee, 0x00ce,
-+ 0x0cd0, 0x00de, 0x0005, 0x00c6, 0x680c, 0xa065, 0x0138, 0x6807,
-+ 0x0004, 0x6826, 0x682b, 0x0000, 0x080c, 0x7233, 0x00ce, 0x00de,
-+ 0x0005, 0x00f6, 0x00d6, 0x2069, 0xb6e0, 0x6830, 0xa086, 0x0000,
-+ 0x11d0, 0x2001, 0xb40c, 0x200c, 0xd1bc, 0x1560, 0x6838, 0xa07d,
-+ 0x0190, 0x6833, 0x0001, 0x683e, 0x6847, 0x0000, 0x684b, 0x0000,
-+ 0x0126, 0x00f6, 0x2091, 0x2400, 0x002e, 0x080c, 0x1ff2, 0x1130,
-+ 0x012e, 0x080c, 0x7b95, 0x00de, 0x00fe, 0x0005, 0x012e, 0xe000,
-+ 0x6843, 0x0000, 0x7803, 0x0002, 0x780c, 0xa015, 0x0140, 0x6a3a,
-+ 0x780f, 0x0000, 0x6833, 0x0000, 0x683f, 0x0000, 0x0c60, 0x683a,
-+ 0x6836, 0x0cc0, 0xc1bc, 0x2102, 0x0066, 0x2031, 0x0001, 0x080c,
-+ 0x5b12, 0x006e, 0x0858, 0x601c, 0xa084, 0x000f, 0x000b, 0x0005,
-+ 0x7241, 0x7246, 0x76fd, 0x7819, 0x7246, 0x76fd, 0x7819, 0x7241,
-+ 0x7246, 0x080c, 0x7055, 0x080c, 0x7134, 0x0005, 0x0156, 0x0136,
-+ 0x0146, 0x00c6, 0x00f6, 0x6004, 0xa08a, 0x0080, 0x1a0c, 0x1511,
-+ 0x6118, 0x2178, 0x79a0, 0x2011, 0xb435, 0x2214, 0xd2ac, 0x1110,
-+ 0xd1bc, 0x0150, 0x7900, 0xd1f4, 0x0120, 0x7914, 0xa18c, 0x00ff,
-+ 0x0040, 0x2009, 0x0000, 0x0028, 0xa1f8, 0x2d88, 0x2f0d, 0xa18c,
-+ 0x00ff, 0x2c78, 0x2061, 0x0100, 0x619a, 0xa08a, 0x0040, 0x1a04,
-+ 0x72ba, 0x0033, 0x00fe, 0x00ce, 0x014e, 0x013e, 0x015e, 0x0005,
-+ 0x7369, 0x73b4, 0x73e1, 0x74ae, 0x74dc, 0x74e4, 0x750a, 0x751b,
-+ 0x752c, 0x7534, 0x754a, 0x7534, 0x75a4, 0x751b, 0x75c5, 0x75cd,
-+ 0x752c, 0x75cd, 0x75de, 0x72b8, 0x72b8, 0x72b8, 0x72b8, 0x72b8,
-+ 0x72b8, 0x72b8, 0x72b8, 0x72b8, 0x72b8, 0x72b8, 0x7e2f, 0x7e54,
-+ 0x7e69, 0x7e8c, 0x7ead, 0x750a, 0x72b8, 0x750a, 0x7534, 0x72b8,
-+ 0x73e1, 0x74ae, 0x72b8, 0x82f2, 0x7534, 0x72b8, 0x8312, 0x7534,
-+ 0x72b8, 0x752c, 0x7362, 0x72cd, 0x72b8, 0x8337, 0x83ac, 0x8483,
-+ 0x72b8, 0x8494, 0x7505, 0x84b0, 0x72b8, 0x7ec2, 0x850b, 0x72b8,
-+ 0x080c, 0x1511, 0x2100, 0x0033, 0x00fe, 0x00ce, 0x014e, 0x013e,
-+ 0x015e, 0x0005, 0x72cb, 0x72cb, 0x72cb, 0x7301, 0x731f, 0x7335,
-+ 0x72cb, 0x72cb, 0x72cb, 0x080c, 0x1511, 0x00d6, 0x20a1, 0x020b,
-+ 0x080c, 0x75fb, 0x7810, 0x2068, 0x20a3, 0x2414, 0x20a3, 0x0018,
-+ 0x20a3, 0x0800, 0x683c, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+ 0x20a3, 0x0000, 0x20a3, 0x0000, 0x6850, 0x20a2, 0x6854, 0x20a2,
-+ 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0018, 0x080c, 0x7d11,
-+ 0x00de, 0x0005, 0x00d6, 0x7818, 0x2068, 0x68a0, 0x2069, 0xb400,
-+ 0x6ad4, 0xd2ac, 0x1110, 0xd0bc, 0x0110, 0xa085, 0x0001, 0x00de,
-+ 0x0005, 0x00d6, 0x20a1, 0x020b, 0x080c, 0x75fb, 0x20a3, 0x0500,
-+ 0x20a3, 0x0000, 0x7810, 0xa0e8, 0x000f, 0x6808, 0x20a2, 0x680c,
-+ 0x20a2, 0x6810, 0x20a2, 0x6814, 0x20a2, 0x6818, 0x20a2, 0x681c,
-+ 0x20a2, 0x60c3, 0x0010, 0x080c, 0x7d11, 0x00de, 0x0005, 0x0156,
-+ 0x0146, 0x20a1, 0x020b, 0x080c, 0x75fb, 0x20a3, 0x7800, 0x20a3,
-+ 0x0000, 0x7808, 0x8007, 0x20a2, 0x20a3, 0x0000, 0x60c3, 0x0008,
-+ 0x080c, 0x7d11, 0x014e, 0x015e, 0x0005, 0x0156, 0x0146, 0x20a1,
-+ 0x020b, 0x080c, 0x7697, 0x20a3, 0x0200, 0x20a3, 0x0000, 0x20a3,
-+ 0xdf10, 0x20a3, 0x0034, 0x2099, 0xb405, 0x20a9, 0x0004, 0x53a6,
-+ 0x2099, 0xb401, 0x20a9, 0x0004, 0x53a6, 0x2099, 0xb6c6, 0x20a9,
-+ 0x001a, 0x3304, 0x8007, 0x20a2, 0x9398, 0x1f04, 0x7351, 0x20a3,
-+ 0x0000, 0x20a3, 0x0000, 0x60c3, 0x004c, 0x080c, 0x7d11, 0x014e,
-+ 0x015e, 0x0005, 0x2001, 0xb415, 0x2004, 0x609a, 0x080c, 0x7d11,
-+ 0x0005, 0x20a1, 0x020b, 0x080c, 0x75fb, 0x20a3, 0x5200, 0x20a3,
-+ 0x0000, 0x00d6, 0x2069, 0xb452, 0x6804, 0xd084, 0x0150, 0x6828,
-+ 0x20a3, 0x0000, 0x0016, 0x080c, 0x27f7, 0x21a2, 0x001e, 0x00de,
-+ 0x0028, 0x00de, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a9, 0x0004,
-+ 0x2099, 0xb405, 0x53a6, 0x20a9, 0x0004, 0x2099, 0xb401, 0x53a6,
-+ 0x2001, 0xb435, 0x2004, 0xd0ac, 0x1138, 0x7818, 0xa080, 0x0028,
-+ 0x2004, 0xa082, 0x007f, 0x0238, 0x2001, 0xb41c, 0x20a6, 0x2001,
-+ 0xb41d, 0x20a6, 0x0040, 0x20a3, 0x0000, 0x2001, 0xb415, 0x2004,
-+ 0xa084, 0x00ff, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3,
-+ 0x001c, 0x080c, 0x7d11, 0x0005, 0x20a1, 0x020b, 0x080c, 0x75fb,
-+ 0x20a3, 0x0500, 0x20a3, 0x0000, 0x2001, 0xb435, 0x2004, 0xd0ac,
-+ 0x1138, 0x7818, 0xa080, 0x0028, 0x2004, 0xa082, 0x007f, 0x0238,
-+ 0x2001, 0xb41c, 0x20a6, 0x2001, 0xb41d, 0x20a6, 0x0040, 0x20a3,
-+ 0x0000, 0x2001, 0xb415, 0x2004, 0xa084, 0x00ff, 0x20a2, 0x20a9,
-+ 0x0004, 0x2099, 0xb405, 0x53a6, 0x60c3, 0x0010, 0x080c, 0x7d11,
-+ 0x0005, 0x20a1, 0x020b, 0x080c, 0x75fb, 0x00c6, 0x7818, 0x2060,
-+ 0x2001, 0x0000, 0x080c, 0x52d4, 0x00ce, 0x7818, 0xa080, 0x0028,
-+ 0x2004, 0xa086, 0x007e, 0x1130, 0x20a3, 0x0400, 0x620c, 0xc2b4,
-+ 0x620e, 0x0010, 0x20a3, 0x0300, 0x20a3, 0x0000, 0x7818, 0xa080,
-+ 0x0028, 0x2004, 0xa086, 0x007e, 0x1904, 0x7470, 0x2001, 0xb435,
-+ 0x2004, 0xd0a4, 0x01c8, 0x2099, 0xb68e, 0x33a6, 0x9398, 0x20a3,
-+ 0x0000, 0x9398, 0x3304, 0xa084, 0x2000, 0x20a2, 0x9398, 0x33a6,
-+ 0x9398, 0x20a3, 0x0000, 0x9398, 0x2001, 0x2710, 0x20a2, 0x9398,
-+ 0x33a6, 0x9398, 0x33a6, 0x00d0, 0x2099, 0xb68e, 0x33a6, 0x9398,
-+ 0x33a6, 0x9398, 0x3304, 0x080c, 0x5a90, 0x1118, 0xa084, 0x37ff,
-+ 0x0010, 0xa084, 0x3fff, 0x20a2, 0x9398, 0x33a6, 0x20a3, 0x0000,
-+ 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a9, 0x0004,
-+ 0x2099, 0xb405, 0x53a6, 0x20a9, 0x0004, 0x2099, 0xb401, 0x53a6,
-+ 0x20a9, 0x0008, 0x20a3, 0x0000, 0x1f04, 0x744a, 0x20a9, 0x0008,
-+ 0x20a3, 0x0000, 0x1f04, 0x7450, 0x2099, 0xb696, 0x3304, 0xc0dd,
-+ 0x20a2, 0x2001, 0xb472, 0x2004, 0xd0e4, 0x0158, 0x20a3, 0x0000,
-+ 0x20a3, 0x0000, 0x9398, 0x9398, 0x9398, 0x33a6, 0x20a9, 0x0004,
-+ 0x0010, 0x20a9, 0x0007, 0x20a3, 0x0000, 0x1f04, 0x746b, 0x0468,
-+ 0x2001, 0xb435, 0x2004, 0xd0a4, 0x0140, 0x2001, 0xb68f, 0x2004,
-+ 0x60e3, 0x0000, 0x080c, 0x2838, 0x60e2, 0x2099, 0xb68e, 0x20a9,
-+ 0x0008, 0x53a6, 0x20a9, 0x0004, 0x2099, 0xb405, 0x53a6, 0x20a9,
-+ 0x0004, 0x2099, 0xb401, 0x53a6, 0x20a9, 0x0008, 0x20a3, 0x0000,
-+ 0x1f04, 0x748e, 0x20a9, 0x0008, 0x20a3, 0x0000, 0x1f04, 0x7494,
-+ 0x2099, 0xb696, 0x20a9, 0x0008, 0x53a6, 0x20a9, 0x0008, 0x20a3,
-+ 0x0000, 0x1f04, 0x749f, 0x20a9, 0x000a, 0x20a3, 0x0000, 0x1f04,
-+ 0x74a5, 0x60c3, 0x0074, 0x080c, 0x7d11, 0x0005, 0x20a1, 0x020b,
-+ 0x080c, 0x75fb, 0x20a3, 0x2010, 0x20a3, 0x0014, 0x20a3, 0x0800,
-+ 0x20a3, 0x2000, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a2,
-+ 0x00f6, 0x2079, 0xb452, 0x7904, 0x00fe, 0xd1ac, 0x1110, 0xa085,
-+ 0x0020, 0xd1a4, 0x0110, 0xa085, 0x0010, 0xa085, 0x0002, 0x00d6,
-+ 0x0804, 0x7586, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3,
-+ 0x0014, 0x080c, 0x7d11, 0x0005, 0x20a1, 0x020b, 0x080c, 0x75fb,
-+ 0x20a3, 0x5000, 0x0804, 0x73fc, 0x20a1, 0x020b, 0x080c, 0x75fb,
-+ 0x20a3, 0x2110, 0x20a3, 0x0014, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+ 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+ 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+ 0x60c3, 0x0014, 0x080c, 0x7d11, 0x0005, 0x20a1, 0x020b, 0x080c,
-+ 0x768f, 0x0020, 0x20a1, 0x020b, 0x080c, 0x7697, 0x20a3, 0x0200,
-+ 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0004,
-+ 0x080c, 0x7d11, 0x0005, 0x20a1, 0x020b, 0x080c, 0x7697, 0x20a3,
-+ 0x0100, 0x20a3, 0x0000, 0x20a3, 0x0003, 0x20a3, 0x2a00, 0x60c3,
-+ 0x0008, 0x080c, 0x7d11, 0x0005, 0x20a1, 0x020b, 0x080c, 0x7697,
-+ 0x20a3, 0x0200, 0x0804, 0x73fc, 0x20a1, 0x020b, 0x080c, 0x7697,
-+ 0x20a3, 0x0100, 0x20a3, 0x0000, 0x7828, 0xa005, 0x0110, 0x20a2,
-+ 0x0010, 0x20a3, 0x0003, 0x7810, 0x20a2, 0x60c3, 0x0008, 0x080c,
-+ 0x7d11, 0x0005, 0x00d6, 0x20a1, 0x020b, 0x080c, 0x7697, 0x20a3,
-+ 0x0210, 0x20a3, 0x0014, 0x20a3, 0x0800, 0x7818, 0x2068, 0x6894,
-+ 0xa086, 0x0014, 0x1178, 0x6998, 0xa184, 0xc000, 0x1140, 0xd1ec,
-+ 0x0118, 0x20a3, 0x2100, 0x0040, 0x20a3, 0x0100, 0x0028, 0x20a3,
-+ 0x0400, 0x0010, 0x20a3, 0x0700, 0xa006, 0x20a2, 0x20a2, 0x20a2,
-+ 0x20a2, 0x20a2, 0x00f6, 0x2079, 0xb452, 0x7904, 0x00fe, 0xd1ac,
-+ 0x1110, 0xa085, 0x0020, 0xd1a4, 0x0110, 0xa085, 0x0010, 0x2009,
-+ 0xb474, 0x210c, 0xd184, 0x1110, 0xa085, 0x0002, 0x0026, 0x2009,
-+ 0xb472, 0x210c, 0xd1e4, 0x0130, 0xc0c5, 0xa094, 0x0030, 0xa296,
-+ 0x0010, 0x0140, 0xd1ec, 0x0130, 0xa094, 0x0030, 0xa296, 0x0010,
-+ 0x0108, 0xc0bd, 0x002e, 0x20a2, 0x20a2, 0x20a2, 0x60c3, 0x0014,
-+ 0x080c, 0x7d11, 0x00de, 0x0005, 0x20a1, 0x020b, 0x080c, 0x7697,
-+ 0x20a3, 0x0210, 0x20a3, 0x0014, 0x20a3, 0x0000, 0x20a3, 0x0100,
-+ 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+ 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+ 0x60c3, 0x0014, 0x080c, 0x7d11, 0x0005, 0x20a1, 0x020b, 0x080c,
-+ 0x7697, 0x20a3, 0x0200, 0x0804, 0x736f, 0x20a1, 0x020b, 0x080c,
-+ 0x7697, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3, 0x0003, 0x20a3,
-+ 0x2a00, 0x60c3, 0x0008, 0x080c, 0x7d11, 0x0005, 0x20e1, 0x9080,
-+ 0x20e1, 0x4000, 0x20a1, 0x020b, 0x080c, 0x7697, 0x20a3, 0x0100,
-+ 0x20a3, 0x0000, 0x20a3, 0x000b, 0x20a3, 0x0000, 0x60c3, 0x0008,
-+ 0x080c, 0x7d11, 0x0005, 0x0026, 0x0036, 0x0046, 0x2019, 0x3200,
-+ 0x2021, 0x0800, 0x0038, 0x0026, 0x0036, 0x0046, 0x2019, 0x2200,
-+ 0x2021, 0x0100, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080,
-+ 0x0028, 0x2014, 0xa286, 0x007e, 0x11a0, 0xa385, 0x00ff, 0x20a2,
-+ 0x20a3, 0xfffe, 0x20a3, 0x0000, 0x2011, 0xb415, 0x2214, 0x2001,
-+ 0xb69e, 0x2004, 0xa005, 0x0118, 0x2011, 0xb41d, 0x2214, 0x22a2,
-+ 0x04d0, 0xa286, 0x007f, 0x1138, 0x00d6, 0xa385, 0x00ff, 0x20a2,
-+ 0x20a3, 0xfffd, 0x00c8, 0x2001, 0xb435, 0x2004, 0xd0ac, 0x1110,
-+ 0xd2bc, 0x01c8, 0xa286, 0x0080, 0x00d6, 0x1130, 0xa385, 0x00ff,
-+ 0x20a2, 0x20a3, 0xfffc, 0x0040, 0xa2e8, 0xb535, 0x2d6c, 0x6810,
-+ 0xa305, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xb41c, 0x2da6, 0x8d68,
-+ 0x2da6, 0x00de, 0x0080, 0x00d6, 0xa2e8, 0xb535, 0x2d6c, 0x6810,
-+ 0xa305, 0x20a2, 0x6814, 0x20a2, 0x00de, 0x20a3, 0x0000, 0x2011,
-+ 0xb415, 0x2214, 0x22a2, 0xa485, 0x0029, 0x20a2, 0x004e, 0x003e,
-+ 0x20a3, 0x0000, 0x080c, 0x7d00, 0x22a2, 0x20a3, 0x0000, 0x2fa2,
-+ 0x20a3, 0xffff, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x002e, 0x0005,
-+ 0x0026, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a3, 0x02ff, 0x2011,
-+ 0xfffc, 0x22a2, 0x00d6, 0x2069, 0xb41c, 0x2da6, 0x8d68, 0x2da6,
-+ 0x00de, 0x20a3, 0x2029, 0x20a3, 0x0000, 0x08e0, 0x20a3, 0x0100,
-+ 0x20a3, 0x0000, 0x20a3, 0xfc02, 0x20a3, 0x0000, 0x0005, 0x0026,
-+ 0x0036, 0x0046, 0x2019, 0x3300, 0x2021, 0x0800, 0x0038, 0x0026,
-+ 0x0036, 0x0046, 0x2019, 0x2300, 0x2021, 0x0100, 0x20e1, 0x9080,
-+ 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0x2011, 0xb435,
-+ 0x2214, 0xd2ac, 0x1118, 0xa092, 0x007e, 0x02d8, 0x00d6, 0xa0e8,
-+ 0xb535, 0x2d6c, 0x6810, 0xa305, 0x20a2, 0x6814, 0x20a2, 0x6810,
-+ 0xa005, 0x1140, 0x6814, 0xa005, 0x1128, 0x20a3, 0x00ff, 0x20a3,
-+ 0xfffe, 0x0028, 0x2069, 0xb41c, 0x2da6, 0x8d68, 0x2da6, 0x00de,
-+ 0x0080, 0x00d6, 0xa0e8, 0xb535, 0x2d6c, 0x6810, 0xa305, 0x20a2,
-+ 0x6814, 0x20a2, 0x00de, 0x20a3, 0x0000, 0x2011, 0xb415, 0x2214,
-+ 0x22a2, 0xa485, 0x0098, 0x20a2, 0x20a3, 0x0000, 0x004e, 0x003e,
-+ 0x080c, 0x7d00, 0x22a2, 0x20a3, 0x0000, 0x7a08, 0x22a2, 0x2fa2,
-+ 0x20a3, 0x0000, 0x20a3, 0x0000, 0x002e, 0x0005, 0x080c, 0x7d00,
-+ 0x22a2, 0x20a3, 0x0000, 0x7a08, 0x22a2, 0x7810, 0x20a2, 0x20a3,
-+ 0x0000, 0x20a3, 0x0000, 0x002e, 0x0005, 0x00c6, 0x00f6, 0x6004,
-+ 0xa08a, 0x0085, 0x0a0c, 0x1511, 0xa08a, 0x008c, 0x1a0c, 0x1511,
-+ 0x6118, 0x2178, 0x79a0, 0x2011, 0xb435, 0x2214, 0xd2ac, 0x1110,
-+ 0xd1bc, 0x0150, 0x7900, 0xd1f4, 0x0120, 0x7914, 0xa18c, 0x00ff,
-+ 0x0040, 0x2009, 0x0000, 0x0028, 0xa1f8, 0x2d88, 0x2f0d, 0xa18c,
-+ 0x00ff, 0x2c78, 0x2061, 0x0100, 0x619a, 0xa082, 0x0085, 0x001b,
-+ 0x00fe, 0x00ce, 0x0005, 0x7734, 0x773e, 0x7759, 0x7732, 0x7732,
-+ 0x7732, 0x7734, 0x080c, 0x1511, 0x0146, 0x20a1, 0x020b, 0x04a1,
-+ 0x60c3, 0x0000, 0x080c, 0x7d11, 0x014e, 0x0005, 0x0146, 0x20a1,
-+ 0x020b, 0x080c, 0x77a5, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x7808,
-+ 0x20a2, 0x7810, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0xffff, 0x20a3,
-+ 0x0000, 0x20a3, 0x0000, 0x60c3, 0x000c, 0x080c, 0x7d11, 0x014e,
-+ 0x0005, 0x0146, 0x20a1, 0x020b, 0x080c, 0x77df, 0x20a3, 0x0003,
-+ 0x20a3, 0x0300, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0004,
-+ 0x080c, 0x7d11, 0x014e, 0x0005, 0x0026, 0x20e1, 0x9080, 0x20e1,
-+ 0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0x2011, 0xb435, 0x2214,
-+ 0xd2ac, 0x1118, 0xa092, 0x007e, 0x0288, 0x00d6, 0xa0e8, 0xb535,
-+ 0x2d6c, 0x6810, 0xa085, 0x8100, 0x20a2, 0x6814, 0x20a2, 0x2069,
-+ 0xb41c, 0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0088, 0x00d6, 0xa0e8,
-+ 0xb535, 0x2d6c, 0x6810, 0xa085, 0x8100, 0x20a2, 0x6814, 0x20a2,
-+ 0x00de, 0x20a3, 0x0000, 0x2011, 0xb415, 0x2214, 0x22a2, 0x20a3,
-+ 0x0009, 0x20a3, 0x0000, 0x0804, 0x7662, 0x0026, 0x20e1, 0x9080,
-+ 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0x2011, 0xb435,
-+ 0x2214, 0xd2ac, 0x1118, 0xa092, 0x007e, 0x0288, 0x00d6, 0xa0e8,
-+ 0xb535, 0x2d6c, 0x6810, 0xa085, 0x8400, 0x20a2, 0x6814, 0x20a2,
-+ 0x2069, 0xb41c, 0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0088, 0x00d6,
-+ 0xa0e8, 0xb535, 0x2d6c, 0x6810, 0xa085, 0x8400, 0x20a2, 0x6814,
-+ 0x20a2, 0x00de, 0x20a3, 0x0000, 0x2011, 0xb415, 0x2214, 0x22a2,
-+ 0x2001, 0x0099, 0x20a2, 0x20a3, 0x0000, 0x0804, 0x76ee, 0x0026,
-+ 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2004,
-+ 0x2011, 0xb435, 0x2214, 0xd2ac, 0x1118, 0xa092, 0x007e, 0x0288,
-+ 0x00d6, 0xa0e8, 0xb535, 0x2d6c, 0x6810, 0xa085, 0x8500, 0x20a2,
-+ 0x6814, 0x20a2, 0x2069, 0xb41c, 0x2da6, 0x8d68, 0x2da6, 0x00de,
-+ 0x0088, 0x00d6, 0xa0e8, 0xb535, 0x2d6c, 0x6810, 0xa085, 0x8500,
-+ 0x20a2, 0x6814, 0x20a2, 0x00de, 0x20a3, 0x0000, 0x2011, 0xb415,
-+ 0x2214, 0x22a2, 0x2001, 0x0099, 0x20a2, 0x20a3, 0x0000, 0x0804,
-+ 0x76ee, 0x00c6, 0x00f6, 0x2c78, 0x7804, 0xa08a, 0x0040, 0x0a0c,
-+ 0x1511, 0xa08a, 0x0053, 0x1a0c, 0x1511, 0x7918, 0x2160, 0x61a0,
-+ 0x2011, 0xb435, 0x2214, 0xd2ac, 0x1110, 0xd1bc, 0x0150, 0x6100,
-+ 0xd1f4, 0x0120, 0x6114, 0xa18c, 0x00ff, 0x0040, 0x2009, 0x0000,
-+ 0x0028, 0xa1e0, 0x2d88, 0x2c0d, 0xa18c, 0x00ff, 0x2061, 0x0100,
-+ 0x619a, 0xa082, 0x0040, 0x001b, 0x00fe, 0x00ce, 0x0005, 0x785c,
-+ 0x7968, 0x7905, 0x7b0a, 0x785a, 0x785a, 0x785a, 0x785a, 0x785a,
-+ 0x785a, 0x785a, 0x8081, 0x8091, 0x80a1, 0x80b1, 0x785a, 0x84c1,
-+ 0x785a, 0x8070, 0x080c, 0x1511, 0x00d6, 0x0156, 0x0146, 0x780b,
-+ 0xffff, 0x20a1, 0x020b, 0x080c, 0x78bc, 0x7910, 0x2168, 0x6948,
-+ 0x7952, 0x21a2, 0xa016, 0x22a2, 0x22a2, 0x22a2, 0x694c, 0xa184,
-+ 0x000f, 0x1118, 0x2001, 0x0005, 0x0040, 0xd184, 0x0118, 0x2001,
-+ 0x0004, 0x0018, 0xa084, 0x0006, 0x8004, 0x0016, 0x2008, 0x7858,
-+ 0xa084, 0x00ff, 0x8007, 0xa105, 0x001e, 0x20a2, 0xd1ac, 0x0118,
-+ 0x20a3, 0x0002, 0x0048, 0xd1b4, 0x0118, 0x20a3, 0x0001, 0x0020,
-+ 0x20a3, 0x0000, 0x2230, 0x0010, 0x6a80, 0x6e7c, 0x20a9, 0x0008,
-+ 0x0136, 0xad88, 0x0017, 0x2198, 0x20a1, 0x021b, 0x53a6, 0x013e,
-+ 0x20a1, 0x020b, 0x22a2, 0x26a2, 0x60c3, 0x0020, 0x20e1, 0x9080,
-+ 0x6014, 0xa084, 0x0004, 0xa085, 0x0009, 0x6016, 0x2001, 0xb6fc,
-+ 0x2003, 0x07d0, 0x2001, 0xb6fb, 0x2003, 0x0009, 0x080c, 0x17da,
-+ 0x014e, 0x015e, 0x00de, 0x0005, 0x20e1, 0x9080, 0x20e1, 0x4000,
-+ 0x7a18, 0xa280, 0x0023, 0x2014, 0x8210, 0xa294, 0x00ff, 0x2202,
-+ 0x8217, 0x7818, 0xa080, 0x0028, 0x2004, 0x2019, 0xb435, 0x231c,
-+ 0xd3ac, 0x1110, 0xd0bc, 0x0188, 0x00d6, 0xa0e8, 0xb535, 0x2d6c,
-+ 0x6810, 0xa085, 0x0600, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xb41c,
-+ 0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0088, 0x00d6, 0xa0e8, 0xb535,
-+ 0x2d6c, 0x6810, 0xa085, 0x0600, 0x20a2, 0x6814, 0x20a2, 0x00de,
-+ 0x20a3, 0x0000, 0x2009, 0xb415, 0x210c, 0x21a2, 0x20a3, 0x0829,
-+ 0x20a3, 0x0000, 0x22a2, 0x20a3, 0x0000, 0x2fa2, 0x20a3, 0xffff,
-+ 0x20a3, 0x0000, 0x20a3, 0x0000, 0x0005, 0x00d6, 0x0156, 0x0136,
-+ 0x0146, 0x20a1, 0x020b, 0x00c1, 0x7810, 0x2068, 0x6860, 0x20a2,
-+ 0x685c, 0x20a2, 0x6880, 0x20a2, 0x687c, 0x20a2, 0xa006, 0x20a2,
-+ 0x20a2, 0x20a2, 0x20a2, 0x60c3, 0x000c, 0x080c, 0x7d11, 0x014e,
-+ 0x013e, 0x015e, 0x00de, 0x0005, 0x0026, 0x20e1, 0x9080, 0x20e1,
-+ 0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0x2011, 0xb435, 0x2214,
-+ 0xd2ac, 0x1110, 0xd0bc, 0x0188, 0x00d6, 0xa0e8, 0xb535, 0x2d6c,
-+ 0x6810, 0xa085, 0x0500, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xb41c,
-+ 0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0088, 0x00d6, 0xa0e8, 0xb535,
-+ 0x2d6c, 0x6810, 0xa085, 0x0500, 0x20a2, 0x6814, 0x20a2, 0x00de,
-+ 0x20a3, 0x0000, 0x2011, 0xb415, 0x2214, 0x22a2, 0x20a3, 0x0889,
-+ 0x20a3, 0x0000, 0x080c, 0x7d00, 0x22a2, 0x20a3, 0x0000, 0x7a08,
-+ 0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x002e, 0x0005,
-+ 0x00d6, 0x0156, 0x0136, 0x0146, 0x7810, 0xa0ec, 0xf000, 0x0168,
-+ 0xa06d, 0x080c, 0x52c2, 0x0148, 0x684c, 0xa084, 0x2020, 0xa086,
-+ 0x2020, 0x1118, 0x7820, 0xc0cd, 0x7822, 0x20a1, 0x020b, 0x080c,
-+ 0x7ac0, 0xa016, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x7810,
-+ 0xa084, 0xf000, 0x1130, 0x7810, 0xa084, 0x0700, 0x8007, 0x0043,
-+ 0x0010, 0xa006, 0x002b, 0x014e, 0x013e, 0x015e, 0x00de, 0x0005,
-+ 0x79a2, 0x7a37, 0x7a40, 0x7a69, 0x7a7c, 0x7a97, 0x7aa0, 0x79a0,
-+ 0x080c, 0x1511, 0x0016, 0x0036, 0x694c, 0xa18c, 0x0003, 0x0118,
-+ 0xa186, 0x0003, 0x1170, 0x6b78, 0x7820, 0xd0cc, 0x0108, 0xc3e5,
-+ 0x23a2, 0x6868, 0x20a2, 0x6864, 0x20a2, 0x003e, 0x001e, 0x0804,
-+ 0x7a73, 0xa186, 0x0001, 0x190c, 0x1511, 0x6b78, 0x7820, 0xd0cc,
-+ 0x0108, 0xc3e5, 0x23a2, 0x6868, 0x20a2, 0x6864, 0x20a2, 0x22a2,
-+ 0x6874, 0x20a2, 0x22a2, 0x687c, 0x20a2, 0x2009, 0x0018, 0xa384,
-+ 0x0300, 0x0904, 0x7a31, 0xd3c4, 0x0110, 0x687c, 0xa108, 0xd3cc,
-+ 0x0110, 0x6874, 0xa108, 0x0156, 0x20a9, 0x000d, 0xad80, 0x0020,
-+ 0x201c, 0x831f, 0x23a2, 0x8000, 0x1f04, 0x79e0, 0x015e, 0x22a2,
-+ 0x22a2, 0x22a2, 0xa184, 0x0003, 0x0904, 0x7a31, 0x20a1, 0x020b,
-+ 0x20e1, 0x9080, 0x20e1, 0x4000, 0x0006, 0x7818, 0xa080, 0x0028,
-+ 0x2004, 0x2011, 0xb435, 0x2214, 0xd2ac, 0x1110, 0xd0bc, 0x0188,
-+ 0x00d6, 0xa0e8, 0xb535, 0x2d6c, 0x6810, 0xa085, 0x0700, 0x20a2,
-+ 0x6814, 0x20a2, 0x2069, 0xb41c, 0x2da6, 0x8d68, 0x2da6, 0x00de,
-+ 0x0088, 0x00d6, 0xa0e8, 0xb535, 0x2d6c, 0x6810, 0xa085, 0x0700,
-+ 0x20a2, 0x6814, 0x20a2, 0x00de, 0x20a3, 0x0000, 0x2011, 0xb415,
-+ 0x2214, 0x22a2, 0x000e, 0x7b20, 0xd3cc, 0x0118, 0x20a3, 0x0889,
-+ 0x0010, 0x20a3, 0x0898, 0x20a2, 0x080c, 0x7d00, 0x22a2, 0x20a3,
-+ 0x0000, 0x61c2, 0x003e, 0x001e, 0x080c, 0x7d11, 0x0005, 0x2011,
-+ 0x0008, 0x7820, 0xd0cc, 0x0108, 0xc2e5, 0x22a2, 0xa016, 0x0488,
-+ 0x2011, 0x0302, 0x7820, 0xd0cc, 0x0108, 0xc2e5, 0x22a2, 0xa016,
-+ 0x22a2, 0x22a2, 0x22a2, 0x20a3, 0x0012, 0x22a2, 0x20a3, 0x0008,
-+ 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x20a3, 0x7000, 0x20a3, 0x0500,
-+ 0x22a2, 0x20a3, 0x000a, 0x22a2, 0x22a2, 0x20a3, 0x2500, 0x22a2,
-+ 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x60c3, 0x0032, 0x080c, 0x7d11,
-+ 0x0005, 0x2011, 0x0028, 0x7820, 0xd0cc, 0x0108, 0xc2e5, 0x22a2,
-+ 0xa016, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x60c3,
-+ 0x0018, 0x080c, 0x7d11, 0x0005, 0x2011, 0x0100, 0x7820, 0xd0cc,
-+ 0x0108, 0xc2e5, 0x22a2, 0xa016, 0x22a2, 0x22a2, 0x22a2, 0x22a2,
-+ 0x22a2, 0x20a3, 0x0008, 0x22a2, 0x7854, 0xa084, 0x00ff, 0x20a2,
-+ 0x22a2, 0x22a2, 0x60c3, 0x0020, 0x080c, 0x7d11, 0x0005, 0x2011,
-+ 0x0008, 0x7820, 0xd0cc, 0x0108, 0xc2e5, 0x22a2, 0xa016, 0x0888,
-+ 0x0036, 0x7b10, 0xa384, 0xff00, 0x7812, 0xa384, 0x00ff, 0x8001,
-+ 0x1138, 0x7820, 0xd0cc, 0x0108, 0xc2e5, 0x22a2, 0x003e, 0x0808,
-+ 0x0046, 0x2021, 0x0800, 0x0006, 0x7820, 0xd0cc, 0x000e, 0x0108,
-+ 0xc4e5, 0x24a2, 0x004e, 0x22a2, 0x20a2, 0x003e, 0x0804, 0x7a73,
-+ 0x0026, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028,
-+ 0x2004, 0x2011, 0xb435, 0x2214, 0xd2ac, 0x1110, 0xd0bc, 0x0188,
-+ 0x00d6, 0xa0e8, 0xb535, 0x2d6c, 0x6810, 0xa085, 0x0700, 0x20a2,
-+ 0x6814, 0x20a2, 0x2069, 0xb41c, 0x2da6, 0x8d68, 0x2da6, 0x00de,
-+ 0x0088, 0x00d6, 0xa0e8, 0xb535, 0x2d6c, 0x6810, 0xa085, 0x0700,
-+ 0x20a2, 0x6814, 0x20a2, 0x00de, 0x20a3, 0x0000, 0x2011, 0xb415,
-+ 0x2214, 0x22a2, 0x7820, 0xd0cc, 0x0118, 0x20a3, 0x0889, 0x0010,
-+ 0x20a3, 0x0898, 0x20a3, 0x0000, 0x080c, 0x7d00, 0x22a2, 0x20a3,
-+ 0x0000, 0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+ 0x002e, 0x0005, 0x00d6, 0x0156, 0x0136, 0x0146, 0x0016, 0x0036,
-+ 0x7810, 0xa084, 0x0700, 0x8007, 0x003b, 0x003e, 0x001e, 0x014e,
-+ 0x013e, 0x015e, 0x00de, 0x0005, 0x7b24, 0x7b24, 0x7b26, 0x7b24,
-+ 0x7b24, 0x7b24, 0x7b48, 0x7b24, 0x080c, 0x1511, 0x7910, 0xa18c,
-+ 0xf8ff, 0xa18d, 0x0600, 0x7912, 0x20a1, 0x020b, 0x2009, 0x0003,
-+ 0x00f9, 0x00d6, 0x2069, 0xb452, 0x6804, 0xd0bc, 0x0130, 0x682c,
-+ 0xa084, 0x00ff, 0x8007, 0x20a2, 0x0010, 0x20a3, 0x3f00, 0x00de,
-+ 0x22a2, 0x22a2, 0x22a2, 0x60c3, 0x0001, 0x080c, 0x7d11, 0x0005,
-+ 0x20a1, 0x020b, 0x2009, 0x0003, 0x0019, 0x20a3, 0x7f00, 0x0c80,
-+ 0x0026, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028,
-+ 0x2004, 0x2011, 0xb435, 0x2214, 0xd2ac, 0x1110, 0xd0bc, 0x0188,
-+ 0x00d6, 0xa0e8, 0xb535, 0x2d6c, 0x6810, 0xa085, 0x0100, 0x20a2,
-+ 0x6814, 0x20a2, 0x2069, 0xb41c, 0x2da6, 0x8d68, 0x2da6, 0x00de,
-+ 0x0088, 0x00d6, 0xa0e8, 0xb535, 0x2d6c, 0x6810, 0xa085, 0x0100,
-+ 0x20a2, 0x6814, 0x20a2, 0x00de, 0x20a3, 0x0000, 0x2011, 0xb415,
-+ 0x2214, 0x22a2, 0x20a3, 0x0888, 0xa18d, 0x0008, 0x21a2, 0x080c,
-+ 0x7d00, 0x22a2, 0x20a3, 0x0000, 0x7a08, 0x22a2, 0x2fa2, 0x20a3,
-+ 0x0000, 0x20a3, 0x0000, 0x002e, 0x0005, 0x00e6, 0x00d6, 0x00c6,
-+ 0x0056, 0x0046, 0x0036, 0x2061, 0x0100, 0x2071, 0xb400, 0x7154,
-+ 0x7818, 0x2068, 0x68a0, 0x2028, 0x76d4, 0xd6ac, 0x1130, 0xd0bc,
-+ 0x1120, 0x6910, 0x6a14, 0x7454, 0x0020, 0x6910, 0x6a14, 0x7370,
-+ 0x7474, 0x781c, 0xa0be, 0x0006, 0x0904, 0x7c4b, 0xa0be, 0x000a,
-+ 0x15e8, 0xa185, 0x0200, 0x6062, 0x6266, 0x636a, 0x646e, 0x6073,
-+ 0x2029, 0x6077, 0x0000, 0x688c, 0x8000, 0xa084, 0x00ff, 0x688e,
-+ 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00, 0x6082, 0x7808, 0x6086,
-+ 0x7810, 0x2070, 0x7014, 0x608a, 0x7010, 0x608e, 0x700c, 0x60c6,
-+ 0x7008, 0x60ca, 0x686c, 0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000,
-+ 0x609f, 0x0000, 0x080c, 0x855c, 0x2009, 0x07d0, 0x60c4, 0xa084,
-+ 0xfff0, 0xa005, 0x0110, 0x2009, 0x1b58, 0x080c, 0x69da, 0x003e,
-+ 0x004e, 0x005e, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x70d4, 0xd0ac,
-+ 0x1110, 0xd5bc, 0x0138, 0xa185, 0x0100, 0x6062, 0x6266, 0x636a,
-+ 0x646e, 0x0038, 0xa185, 0x0100, 0x6062, 0x6266, 0x606b, 0x0000,
-+ 0x646e, 0x6073, 0x0809, 0x6077, 0x0008, 0x688c, 0x8000, 0xa084,
-+ 0x00ff, 0x688e, 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00, 0x6082,
-+ 0x7808, 0x6086, 0x7810, 0x2070, 0x7014, 0x608a, 0x7010, 0x608e,
-+ 0x700c, 0x60c6, 0x7008, 0x60ca, 0x686c, 0x60ce, 0x60af, 0x95d5,
-+ 0x60d7, 0x0000, 0xa582, 0x0080, 0x0248, 0x6a00, 0xd2f4, 0x0120,
-+ 0x6a14, 0xa294, 0x00ff, 0x0010, 0x2011, 0x0000, 0x629e, 0x080c,
-+ 0x855c, 0x2009, 0x07d0, 0x60c4, 0xa084, 0xfff0, 0xa005, 0x0110,
-+ 0x2009, 0x1b58, 0x080c, 0x69da, 0x003e, 0x004e, 0x005e, 0x00ce,
-+ 0x00de, 0x00ee, 0x0005, 0x7810, 0x2070, 0x704c, 0xa084, 0x0003,
-+ 0xa086, 0x0002, 0x0904, 0x7ca1, 0x2001, 0xb435, 0x2004, 0xd0ac,
-+ 0x1110, 0xd5bc, 0x0138, 0xa185, 0x0100, 0x6062, 0x6266, 0x636a,
-+ 0x646e, 0x0038, 0xa185, 0x0100, 0x6062, 0x6266, 0x606b, 0x0000,
-+ 0x646e, 0x6073, 0x0880, 0x6077, 0x0008, 0x688c, 0x8000, 0xa084,
-+ 0x00ff, 0x688e, 0x8007, 0x607a, 0x7834, 0x607e, 0x2f00, 0x6086,
-+ 0x7808, 0x6082, 0x7060, 0x608a, 0x705c, 0x608e, 0x7080, 0x60c6,
-+ 0x707c, 0x60ca, 0x707c, 0x792c, 0xa108, 0x792e, 0x7080, 0x7928,
-+ 0xa109, 0x792a, 0x686c, 0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000,
-+ 0xa582, 0x0080, 0x0248, 0x6a00, 0xd2f4, 0x0120, 0x6a14, 0xa294,
-+ 0x00ff, 0x0010, 0x2011, 0x0000, 0x629e, 0x080c, 0x8559, 0x0804,
-+ 0x7c39, 0x2001, 0xb435, 0x2004, 0xd0ac, 0x1110, 0xd5bc, 0x0138,
-+ 0xa185, 0x0700, 0x6062, 0x6266, 0x636a, 0x646e, 0x0038, 0xa185,
-+ 0x0700, 0x6062, 0x6266, 0x606b, 0x0000, 0x646e, 0x080c, 0x52c2,
-+ 0x0180, 0x00d6, 0x7810, 0xa06d, 0x684c, 0x00de, 0xa084, 0x2020,
-+ 0xa086, 0x2020, 0x1130, 0x7820, 0xc0cd, 0x7822, 0x6073, 0x0889,
-+ 0x0010, 0x6073, 0x0898, 0x6077, 0x0000, 0x688c, 0x8000, 0xa084,
-+ 0x00ff, 0x688e, 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00, 0x6086,
-+ 0x7808, 0x6082, 0x7014, 0x608a, 0x7010, 0x608e, 0x700c, 0x60c6,
-+ 0x7008, 0x60ca, 0x686c, 0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000,
-+ 0xa582, 0x0080, 0x0248, 0x6a00, 0xd2f4, 0x0120, 0x6a14, 0xa294,
-+ 0x00ff, 0x0010, 0x2011, 0x0000, 0x629e, 0x7820, 0xd0cc, 0x0120,
-+ 0x080c, 0x855c, 0x0804, 0x7c39, 0x080c, 0x8559, 0x0804, 0x7c39,
-+ 0x7a18, 0xa280, 0x0023, 0x2014, 0x8210, 0xa294, 0x00ff, 0x2202,
-+ 0x8217, 0x0005, 0x00d6, 0x2069, 0xb6e0, 0x6843, 0x0001, 0x00de,
-+ 0x0005, 0x20e1, 0x9080, 0x60a3, 0x0056, 0x60a7, 0x9575, 0x0019,
-+ 0x080c, 0x69cc, 0x0005, 0x0006, 0x6014, 0xa084, 0x0004, 0xa085,
-+ 0x0009, 0x6016, 0x000e, 0x0005, 0x0016, 0x00c6, 0x0006, 0x2061,
-+ 0x0100, 0x61a4, 0x60a7, 0x95f5, 0x6014, 0xa084, 0x0004, 0xa085,
-+ 0x0008, 0x6016, 0x000e, 0xe000, 0xe000, 0xe000, 0xe000, 0x61a6,
-+ 0x00ce, 0x001e, 0x0005, 0x00c6, 0x00d6, 0x0016, 0x0026, 0x2061,
-+ 0x0100, 0x2069, 0x0140, 0x080c, 0x5a90, 0x1198, 0x2001, 0xb6fc,
-+ 0x2004, 0xa005, 0x15b8, 0x0066, 0x2031, 0x0001, 0x080c, 0x5b12,
-+ 0x006e, 0x1118, 0x080c, 0x69cc, 0x0468, 0x00c6, 0x2061, 0xb6e0,
-+ 0x00d8, 0x6904, 0xa194, 0x4000, 0x0550, 0x0831, 0x6803, 0x1000,
-+ 0x6803, 0x0000, 0x00c6, 0x2061, 0xb6e0, 0x6128, 0xa192, 0x00c8,
-+ 0x1258, 0x8108, 0x612a, 0x6124, 0x00ce, 0x81ff, 0x0198, 0x080c,
-+ 0x69cc, 0x080c, 0x7d1b, 0x0070, 0x6124, 0xa1e5, 0x0000, 0x0140,
-+ 0x080c, 0xb3c7, 0x080c, 0x69d5, 0x2009, 0x0014, 0x080c, 0x85ef,
-+ 0x00ce, 0x0000, 0x002e, 0x001e, 0x00de, 0x00ce, 0x0005, 0x2001,
-+ 0xb6fc, 0x2004, 0xa005, 0x1db0, 0x00c6, 0x2061, 0xb6e0, 0x6128,
-+ 0xa192, 0x0003, 0x1e08, 0x8108, 0x612a, 0x00ce, 0x080c, 0x69cc,
-+ 0x080c, 0x4ad9, 0x0c38, 0x00c6, 0x00d6, 0x00e6, 0x0016, 0x0026,
-+ 0x080c, 0x69e2, 0x2071, 0xb6e0, 0x713c, 0x81ff, 0x0590, 0x2061,
-+ 0x0100, 0x2069, 0x0140, 0x080c, 0x5a90, 0x11a8, 0x0036, 0x2019,
-+ 0x0002, 0x080c, 0x7f8e, 0x003e, 0x713c, 0x2160, 0x080c, 0xb3c7,
-+ 0x2009, 0x004a, 0x080c, 0x85ef, 0x0066, 0x2031, 0x0001, 0x080c,
-+ 0x5b12, 0x006e, 0x00b0, 0x6904, 0xa194, 0x4000, 0x01c0, 0x6803,
-+ 0x1000, 0x6803, 0x0000, 0x0036, 0x2019, 0x0001, 0x080c, 0x7f8e,
-+ 0x003e, 0x713c, 0x2160, 0x080c, 0xb3c7, 0x2009, 0x004a, 0x080c,
-+ 0x85ef, 0x002e, 0x001e, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x0c58,
-+ 0x0026, 0x00e6, 0x2071, 0xb6e0, 0x7048, 0xd084, 0x01c0, 0x713c,
-+ 0x81ff, 0x01a8, 0x2071, 0x0100, 0xa188, 0x0007, 0x2114, 0xa28e,
-+ 0x0006, 0x1138, 0x7014, 0xa084, 0x0184, 0xa085, 0x0012, 0x7016,
-+ 0x0030, 0x7014, 0xa084, 0x0184, 0xa085, 0x0016, 0x7016, 0x00ee,
-+ 0x002e, 0x0005, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0056, 0x0046,
-+ 0x0006, 0x0126, 0x2091, 0x8000, 0x6018, 0x2068, 0x6ca0, 0x2071,
-+ 0xb6e0, 0x7018, 0x2068, 0x8dff, 0x0188, 0x68a0, 0xa406, 0x0118,
-+ 0x6854, 0x2068, 0x0cc0, 0x6010, 0x2060, 0x643c, 0x6540, 0x6648,
-+ 0x2d60, 0x080c, 0x50db, 0x0110, 0xa085, 0x0001, 0x012e, 0x000e,
-+ 0x004e, 0x005e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x20a1,
-+ 0x020b, 0x080c, 0x75fb, 0x20a3, 0x1200, 0x20a3, 0x0000, 0x20a3,
-+ 0x0000, 0x781c, 0xa086, 0x0004, 0x1110, 0x6098, 0x0018, 0x2001,
-+ 0xb415, 0x2004, 0x20a2, 0x7834, 0x20a2, 0x7838, 0x20a2, 0x20a9,
-+ 0x0010, 0xa006, 0x20a2, 0x1f04, 0x7e4a, 0x20a2, 0x20a2, 0x60c3,
-+ 0x002c, 0x080c, 0x7d11, 0x0005, 0x0156, 0x0146, 0x20a1, 0x020b,
-+ 0x080c, 0x75fb, 0x20a3, 0x0f00, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+ 0x7808, 0x20a2, 0x60c3, 0x0008, 0x080c, 0x7d11, 0x014e, 0x015e,
-+ 0x0005, 0x0156, 0x0146, 0x20a1, 0x020b, 0x080c, 0x7697, 0x20a3,
-+ 0x0200, 0x20a3, 0x0000, 0x20a9, 0x0006, 0x2011, 0xb440, 0x2019,
-+ 0xb441, 0x23a6, 0x22a6, 0xa398, 0x0002, 0xa290, 0x0002, 0x1f04,
-+ 0x7e79, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x001c, 0x080c,
-+ 0x7d11, 0x014e, 0x015e, 0x0005, 0x0156, 0x0146, 0x0016, 0x0026,
-+ 0x20a1, 0x020b, 0x080c, 0x7670, 0x080c, 0x7686, 0x7810, 0xa080,
-+ 0x0000, 0x2004, 0xa080, 0x0015, 0x2098, 0x7808, 0xa088, 0x0002,
-+ 0x21a8, 0x53a6, 0xa080, 0x0004, 0x8003, 0x60c2, 0x080c, 0x7d11,
-+ 0x002e, 0x001e, 0x014e, 0x015e, 0x0005, 0x0156, 0x0146, 0x20a1,
-+ 0x020b, 0x080c, 0x75fb, 0x20a3, 0x6200, 0x20a3, 0x0000, 0x20a3,
-+ 0x0000, 0x7808, 0x20a2, 0x60c3, 0x0008, 0x080c, 0x7d11, 0x014e,
-+ 0x015e, 0x0005, 0x0156, 0x0146, 0x0016, 0x0026, 0x20a1, 0x020b,
-+ 0x080c, 0x75fb, 0x7810, 0xa080, 0x0000, 0x2004, 0xa080, 0x0017,
-+ 0x2098, 0x7808, 0xa088, 0x0002, 0x21a8, 0x53a6, 0x8003, 0x60c2,
-+ 0x080c, 0x7d11, 0x002e, 0x001e, 0x014e, 0x015e, 0x0005, 0x00e6,
-+ 0x00c6, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0xb6e0, 0x700c,
-+ 0x2060, 0x8cff, 0x0178, 0x080c, 0x9de9, 0x1110, 0x080c, 0x8bbc,
-+ 0x600c, 0x0006, 0x080c, 0x9fb0, 0x080c, 0x85c0, 0x080c, 0x80c8,
-+ 0x00ce, 0x0c78, 0x700f, 0x0000, 0x700b, 0x0000, 0x012e, 0x000e,
-+ 0x00ce, 0x00ee, 0x0005, 0x0126, 0x0156, 0x00f6, 0x00e6, 0x00d6,
-+ 0x00c6, 0x0026, 0x0016, 0x0006, 0x2091, 0x8000, 0x2069, 0x0100,
-+ 0x2079, 0x0140, 0x2071, 0xb6e0, 0x7024, 0x2060, 0x8cff, 0x05a0,
-+ 0x080c, 0x7d24, 0x68c3, 0x0000, 0x080c, 0x69d5, 0x2009, 0x0013,
-+ 0x080c, 0x85ef, 0x20a9, 0x01f4, 0x6824, 0xd094, 0x0158, 0x6827,
-+ 0x0004, 0x7804, 0xa084, 0x4000, 0x01a0, 0x7803, 0x1000, 0x7803,
-+ 0x0000, 0x0078, 0xd084, 0x0118, 0x6827, 0x0001, 0x0010, 0x1f04,
-+ 0x7f24, 0x7804, 0xa084, 0x1000, 0x0120, 0x7803, 0x0100, 0x7803,
-+ 0x0000, 0x6824, 0x000e, 0x001e, 0x002e, 0x00ce, 0x00de, 0x00ee,
-+ 0x00fe, 0x015e, 0x012e, 0x0005, 0x2001, 0xb400, 0x2004, 0xa096,
-+ 0x0001, 0x0590, 0xa096, 0x0004, 0x0578, 0x080c, 0x69d5, 0x6814,
-+ 0xa084, 0x0001, 0x0110, 0x68a7, 0x95f5, 0x6817, 0x0008, 0x68c3,
-+ 0x0000, 0x2011, 0x4a96, 0x080c, 0x6961, 0x20a9, 0x01f4, 0x6824,
-+ 0xd094, 0x0158, 0x6827, 0x0004, 0x7804, 0xa084, 0x4000, 0x01a0,
-+ 0x7803, 0x1000, 0x7803, 0x0000, 0x0078, 0xd084, 0x0118, 0x6827,
-+ 0x0001, 0x0010, 0x1f04, 0x7f67, 0x7804, 0xa084, 0x1000, 0x0120,
-+ 0x7803, 0x0100, 0x7803, 0x0000, 0x000e, 0x001e, 0x002e, 0x00ce,
-+ 0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e, 0x0005, 0x0126, 0x0156,
-+ 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0026, 0x0016, 0x0006, 0x2091,
-+ 0x8000, 0x2069, 0x0100, 0x2079, 0x0140, 0x2071, 0xb6e0, 0x703c,
-+ 0x2060, 0x8cff, 0x0904, 0x8015, 0xa386, 0x0002, 0x1128, 0x6814,
-+ 0xa084, 0x0002, 0x0904, 0x8015, 0x68af, 0x95f5, 0x6817, 0x0010,
-+ 0x2009, 0x00fa, 0x8109, 0x1df0, 0x68c7, 0x0000, 0x68cb, 0x0008,
-+ 0x080c, 0x69e2, 0x080c, 0x21dd, 0x0046, 0x2009, 0x017f, 0x200b,
-+ 0x00a5, 0x2021, 0x0169, 0x2404, 0xa084, 0x000f, 0xa086, 0x0004,
-+ 0x1500, 0x68af, 0x95f5, 0x68c7, 0x0000, 0x68cb, 0x0008, 0x00e6,
-+ 0x00f6, 0x2079, 0x0020, 0x2071, 0xb74a, 0x6814, 0xa084, 0x0184,
-+ 0xa085, 0x0012, 0x6816, 0x7803, 0x0008, 0x7003, 0x0000, 0x00fe,
-+ 0x00ee, 0xa386, 0x0002, 0x1128, 0x7884, 0xa005, 0x1110, 0x7887,
-+ 0x0001, 0x2001, 0xb6b1, 0x2004, 0x200a, 0x004e, 0xa39d, 0x0000,
-+ 0x1120, 0x2009, 0x0049, 0x080c, 0x85ef, 0x20a9, 0x03e8, 0x6824,
-+ 0xd094, 0x0158, 0x6827, 0x0004, 0x7804, 0xa084, 0x4000, 0x01a0,
-+ 0x7803, 0x1000, 0x7803, 0x0000, 0x0078, 0xd08c, 0x0118, 0x6827,
-+ 0x0002, 0x0010, 0x1f04, 0x7ff7, 0x7804, 0xa084, 0x1000, 0x0120,
-+ 0x7803, 0x0100, 0x7803, 0x0000, 0x6824, 0x000e, 0x001e, 0x002e,
-+ 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e, 0x0005, 0x00d6,
-+ 0x0126, 0x2091, 0x8000, 0x2069, 0xb6e0, 0x6a06, 0x012e, 0x00de,
-+ 0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2069, 0xb6e0, 0x6a32,
-+ 0x012e, 0x00de, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0066, 0x0006,
-+ 0x0126, 0x2071, 0xb6e0, 0x7614, 0x2660, 0x2678, 0x2091, 0x8000,
-+ 0x8cff, 0x0538, 0x601c, 0xa206, 0x1500, 0x7014, 0xac36, 0x1110,
-+ 0x660c, 0x7616, 0x7010, 0xac36, 0x1140, 0x2c00, 0xaf36, 0x0118,
-+ 0x2f00, 0x7012, 0x0010, 0x7013, 0x0000, 0x660c, 0x0066, 0x2c00,
-+ 0xaf06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x080c,
-+ 0x9dae, 0x080c, 0x80c8, 0x00ce, 0x08d8, 0x2c78, 0x600c, 0x2060,
-+ 0x08b8, 0x012e, 0x000e, 0x006e, 0x00ce, 0x00ee, 0x00fe, 0x0005,
-+ 0x0156, 0x0146, 0x20a1, 0x020b, 0x080c, 0x78bc, 0x7810, 0x20a2,
-+ 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x1000, 0x0804,
-+ 0x80c0, 0x0156, 0x0146, 0x20a1, 0x020b, 0x080c, 0x78bc, 0x7810,
-+ 0x20a2, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x4000,
-+ 0x0478, 0x0156, 0x0146, 0x20a1, 0x020b, 0x080c, 0x78bc, 0x7810,
-+ 0x20a2, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x2000,
-+ 0x00f8, 0x0156, 0x0146, 0x20a1, 0x020b, 0x080c, 0x78bc, 0x7810,
-+ 0x20a2, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x0400,
-+ 0x0078, 0x0156, 0x0146, 0x20a1, 0x020b, 0x080c, 0x78bc, 0x7810,
-+ 0x20a2, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x0200,
-+ 0x0089, 0x60c3, 0x0020, 0x080c, 0x7d11, 0x014e, 0x015e, 0x0005,
-+ 0x00e6, 0x2071, 0xb6e0, 0x7020, 0xa005, 0x0110, 0x8001, 0x7022,
-+ 0x00ee, 0x0005, 0x20a9, 0x0008, 0x20a2, 0x1f04, 0x80d4, 0x20a2,
-+ 0x20a2, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0076, 0x0066,
-+ 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0xb6e0, 0x7614, 0x2660,
-+ 0x2678, 0x2039, 0x0001, 0x87ff, 0x0904, 0x8169, 0x8cff, 0x0904,
-+ 0x8169, 0x601c, 0xa086, 0x0006, 0x1904, 0x8164, 0x88ff, 0x0138,
-+ 0x2800, 0xac06, 0x1904, 0x8164, 0x2039, 0x0000, 0x0050, 0x6018,
-+ 0xa206, 0x1904, 0x8164, 0x85ff, 0x0120, 0x6050, 0xa106, 0x1904,
-+ 0x8164, 0x7024, 0xac06, 0x1560, 0x2069, 0x0100, 0x68c0, 0xa005,
-+ 0x0518, 0x080c, 0x69d5, 0x6820, 0xd0b4, 0x0110, 0x68a7, 0x95f5,
-+ 0x6817, 0x0008, 0x68c3, 0x0000, 0x080c, 0x81f0, 0x7027, 0x0000,
-+ 0x0036, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0120, 0x6803,
-+ 0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110,
-+ 0x6827, 0x0001, 0x003e, 0x0020, 0x6003, 0x0009, 0x630a, 0x0460,
-+ 0x7014, 0xac36, 0x1110, 0x660c, 0x7616, 0x7010, 0xac36, 0x1140,
-+ 0x2c00, 0xaf36, 0x0118, 0x2f00, 0x7012, 0x0010, 0x7013, 0x0000,
-+ 0x660c, 0x0066, 0x2c00, 0xaf06, 0x0110, 0x7e0e, 0x0008, 0x2678,
-+ 0x89ff, 0x1158, 0x600f, 0x0000, 0x6010, 0x2068, 0x080c, 0x9beb,
-+ 0x0110, 0x080c, 0xb01c, 0x080c, 0x9dae, 0x080c, 0x80c8, 0x88ff,
-+ 0x1190, 0x00ce, 0x0804, 0x80eb, 0x2c78, 0x600c, 0x2060, 0x0804,
-+ 0x80eb, 0xa006, 0x012e, 0x000e, 0x006e, 0x007e, 0x00ce, 0x00de,
-+ 0x00ee, 0x00fe, 0x0005, 0x6017, 0x0000, 0x00ce, 0xa8c5, 0x0001,
-+ 0x0c88, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026, 0x0006,
-+ 0x0126, 0x2091, 0x8000, 0x2071, 0xb6e0, 0x7638, 0x2660, 0x2678,
-+ 0x8cff, 0x0904, 0x81e0, 0x601c, 0xa086, 0x0006, 0x1904, 0x81db,
-+ 0x87ff, 0x0128, 0x2700, 0xac06, 0x1904, 0x81db, 0x0048, 0x6018,
-+ 0xa206, 0x1904, 0x81db, 0x85ff, 0x0118, 0x6050, 0xa106, 0x15d8,
-+ 0x703c, 0xac06, 0x1180, 0x0036, 0x2019, 0x0001, 0x080c, 0x7f8e,
-+ 0x7033, 0x0000, 0x703f, 0x0000, 0x7043, 0x0000, 0x7047, 0x0000,
-+ 0x704b, 0x0000, 0x003e, 0x7038, 0xac36, 0x1110, 0x660c, 0x763a,
-+ 0x7034, 0xac36, 0x1140, 0x2c00, 0xaf36, 0x0118, 0x2f00, 0x7036,
-+ 0x0010, 0x7037, 0x0000, 0x660c, 0x0066, 0x2c00, 0xaf06, 0x0110,
-+ 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x6010, 0x2068, 0x080c,
-+ 0x9beb, 0x0110, 0x080c, 0xb01c, 0x080c, 0x9dae, 0x87ff, 0x1190,
-+ 0x00ce, 0x0804, 0x8188, 0x2c78, 0x600c, 0x2060, 0x0804, 0x8188,
-+ 0xa006, 0x012e, 0x000e, 0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee,
-+ 0x00fe, 0x0005, 0x6017, 0x0000, 0x00ce, 0xa7bd, 0x0001, 0x0c88,
-+ 0x00e6, 0x2071, 0xb6e0, 0x2001, 0xb400, 0x2004, 0xa086, 0x0002,
-+ 0x1118, 0x7007, 0x0005, 0x0010, 0x7007, 0x0000, 0x00ee, 0x0005,
-+ 0x00f6, 0x00e6, 0x00c6, 0x0066, 0x0026, 0x0006, 0x0126, 0x2091,
-+ 0x8000, 0x2071, 0xb6e0, 0x2c10, 0x7638, 0x2660, 0x2678, 0x8cff,
-+ 0x0518, 0x2200, 0xac06, 0x11e0, 0x7038, 0xac36, 0x1110, 0x660c,
-+ 0x763a, 0x7034, 0xac36, 0x1140, 0x2c00, 0xaf36, 0x0118, 0x2f00,
-+ 0x7036, 0x0010, 0x7037, 0x0000, 0x660c, 0x2c00, 0xaf06, 0x0110,
-+ 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0xa085, 0x0001, 0x0020,
-+ 0x2c78, 0x600c, 0x2060, 0x08d8, 0x012e, 0x000e, 0x002e, 0x006e,
-+ 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6,
-+ 0x0066, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0xb6e0, 0x760c,
-+ 0x2660, 0x2678, 0x8cff, 0x0904, 0x82c6, 0x6018, 0xa080, 0x0028,
-+ 0x2004, 0xa206, 0x1904, 0x82c1, 0x7024, 0xac06, 0x1508, 0x2069,
-+ 0x0100, 0x68c0, 0xa005, 0x0904, 0x829d, 0x080c, 0x7d24, 0x68c3,
-+ 0x0000, 0x080c, 0x81f0, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140,
-+ 0x6b04, 0xa384, 0x1000, 0x0120, 0x6803, 0x0100, 0x6803, 0x0000,
-+ 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e,
-+ 0x700c, 0xac36, 0x1110, 0x660c, 0x760e, 0x7008, 0xac36, 0x1140,
-+ 0x2c00, 0xaf36, 0x0118, 0x2f00, 0x700a, 0x0010, 0x700b, 0x0000,
-+ 0x660c, 0x0066, 0x2c00, 0xaf06, 0x0110, 0x7e0e, 0x0008, 0x2678,
-+ 0x600f, 0x0000, 0x080c, 0x9dd8, 0x1158, 0x080c, 0x2c86, 0x080c,
-+ 0x9de9, 0x11f0, 0x080c, 0x8bbc, 0x00d8, 0x080c, 0x81f0, 0x08c0,
-+ 0x080c, 0x9de9, 0x1118, 0x080c, 0x8bbc, 0x0090, 0x6010, 0x2068,
-+ 0x080c, 0x9beb, 0x0168, 0x601c, 0xa086, 0x0003, 0x11f8, 0x6837,
-+ 0x0103, 0x6b4a, 0x6847, 0x0000, 0x080c, 0x53c9, 0x080c, 0x9da2,
-+ 0x080c, 0x9fb0, 0x080c, 0x9dae, 0x080c, 0x80c8, 0x00ce, 0x0804,
-+ 0x824a, 0x2c78, 0x600c, 0x2060, 0x0804, 0x824a, 0x012e, 0x000e,
-+ 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x601c, 0xa086,
-+ 0x0006, 0x1d30, 0x080c, 0xb01c, 0x0c18, 0x0036, 0x0156, 0x0136,
-+ 0x0146, 0x3908, 0xa006, 0xa190, 0x0020, 0x221c, 0xa39e, 0x2a7d,
-+ 0x1118, 0x8210, 0x8000, 0x0cc8, 0xa005, 0x0138, 0x20a9, 0x0020,
-+ 0x2198, 0xa110, 0x22a0, 0x22c8, 0x53a3, 0x014e, 0x013e, 0x015e,
-+ 0x003e, 0x0005, 0x00d6, 0x20a1, 0x020b, 0x080c, 0x7697, 0x20a3,
-+ 0x0200, 0x20a3, 0x0014, 0x60c3, 0x0014, 0x20a3, 0x0000, 0x20a3,
-+ 0x0000, 0x2099, 0xb6b9, 0x20a9, 0x0004, 0x53a6, 0x20a3, 0x0004,
-+ 0x20a3, 0x7878, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x080c, 0x7d11,
-+ 0x00de, 0x0005, 0x20a1, 0x020b, 0x080c, 0x7697, 0x20a3, 0x0214,
-+ 0x20a3, 0x0018, 0x20a3, 0x0800, 0x7810, 0xa084, 0xff00, 0x20a2,
-+ 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+ 0x7810, 0xa084, 0x00ff, 0x20a2, 0x7828, 0x20a2, 0x20a3, 0x0000,
-+ 0x20a3, 0x0000, 0x60c3, 0x0018, 0x080c, 0x7d11, 0x0005, 0x00d6,
-+ 0x0016, 0x2f68, 0x2009, 0x0035, 0x080c, 0xa09b, 0x1904, 0x83a5,
-+ 0x20a1, 0x020b, 0x080c, 0x75fb, 0x20a3, 0x1300, 0x20a3, 0x0000,
-+ 0x7828, 0x2068, 0x681c, 0xa086, 0x0003, 0x0580, 0x7818, 0xa080,
-+ 0x0028, 0x2014, 0x2001, 0xb435, 0x2004, 0xd0ac, 0x11d0, 0xa286,
-+ 0x007e, 0x1128, 0x20a3, 0x00ff, 0x20a3, 0xfffe, 0x04b8, 0xa286,
-+ 0x007f, 0x1128, 0x20a3, 0x00ff, 0x20a3, 0xfffd, 0x0478, 0xd2bc,
-+ 0x0180, 0xa286, 0x0080, 0x1128, 0x20a3, 0x00ff, 0x20a3, 0xfffc,
-+ 0x0428, 0xa2e8, 0xb535, 0x2d6c, 0x6810, 0x20a2, 0x6814, 0x20a2,
-+ 0x00e8, 0x20a3, 0x0000, 0x6098, 0x20a2, 0x00c0, 0x2001, 0xb435,
-+ 0x2004, 0xd0ac, 0x1138, 0x7818, 0xa080, 0x0028, 0x2004, 0xa082,
-+ 0x007e, 0x0240, 0x00d6, 0x2069, 0xb41c, 0x2da6, 0x8d68, 0x2da6,
-+ 0x00de, 0x0020, 0x20a3, 0x0000, 0x6034, 0x20a2, 0x7834, 0x20a2,
-+ 0x7838, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x000c,
-+ 0x080c, 0x7d11, 0x001e, 0x00de, 0x0005, 0x7817, 0x0001, 0x7803,
-+ 0x0006, 0x001e, 0x00de, 0x0005, 0x00d6, 0x0026, 0x7928, 0x2168,
-+ 0x691c, 0xa186, 0x0006, 0x01c0, 0xa186, 0x0003, 0x0904, 0x841b,
-+ 0xa186, 0x0005, 0x0904, 0x8404, 0xa186, 0x0004, 0x05b8, 0xa186,
-+ 0x0008, 0x0904, 0x840c, 0x7807, 0x0037, 0x7813, 0x1700, 0x080c,
-+ 0x8483, 0x002e, 0x00de, 0x0005, 0x080c, 0x843f, 0x2009, 0x4000,
-+ 0x6800, 0x0002, 0x83e5, 0x83f0, 0x83e7, 0x83f0, 0x83ec, 0x83e5,
-+ 0x83e5, 0x83f0, 0x83f0, 0x83f0, 0x83f0, 0x83e5, 0x83e5, 0x83e5,
-+ 0x83e5, 0x83e5, 0x83f0, 0x83e5, 0x83f0, 0x080c, 0x1511, 0x6820,
-+ 0xd0e4, 0x0110, 0xd0cc, 0x0110, 0xa00e, 0x0010, 0x2009, 0x2000,
-+ 0x6828, 0x20a2, 0x682c, 0x20a2, 0x0804, 0x8435, 0x080c, 0x843f,
-+ 0x20a3, 0x0000, 0x20a3, 0x0000, 0x2009, 0x4000, 0x6a00, 0xa286,
-+ 0x0002, 0x1108, 0xa00e, 0x0488, 0x04d1, 0x20a3, 0x0000, 0x20a3,
-+ 0x0000, 0x2009, 0x4000, 0x0448, 0x0491, 0x20a3, 0x0000, 0x20a3,
-+ 0x0000, 0x2009, 0x4000, 0xa286, 0x0005, 0x0118, 0xa286, 0x0002,
-+ 0x1108, 0xa00e, 0x00d0, 0x0419, 0x6810, 0x2068, 0x697c, 0x6810,
-+ 0xa112, 0x6980, 0x6814, 0xa103, 0x20a2, 0x22a2, 0x7928, 0xa180,
-+ 0x0000, 0x2004, 0xa08e, 0x0002, 0x0130, 0xa08e, 0x0004, 0x0118,
-+ 0x2009, 0x4000, 0x0010, 0x2009, 0x0000, 0x21a2, 0x20a3, 0x0000,
-+ 0x60c3, 0x0018, 0x080c, 0x7d11, 0x002e, 0x00de, 0x0005, 0x0036,
-+ 0x0046, 0x0056, 0x0066, 0x20a1, 0x020b, 0x080c, 0x7697, 0xa006,
-+ 0x20a3, 0x0200, 0x20a2, 0x7934, 0x21a2, 0x7938, 0x21a2, 0x7818,
-+ 0xa080, 0x0028, 0x2004, 0x2011, 0xb435, 0x2214, 0xd2ac, 0x1118,
-+ 0xa092, 0x007e, 0x0268, 0x00d6, 0x2069, 0xb41c, 0x2d2c, 0x8d68,
-+ 0x2d34, 0xa0e8, 0xb535, 0x2d6c, 0x6b10, 0x6c14, 0x00de, 0x0030,
-+ 0x2019, 0x0000, 0x6498, 0x2029, 0x0000, 0x6634, 0x7828, 0xa080,
-+ 0x0007, 0x2004, 0xa086, 0x0003, 0x1128, 0x25a2, 0x26a2, 0x23a2,
-+ 0x24a2, 0x0020, 0x23a2, 0x24a2, 0x25a2, 0x26a2, 0x006e, 0x005e,
-+ 0x004e, 0x003e, 0x0005, 0x20a1, 0x020b, 0x080c, 0x7697, 0x20a3,
-+ 0x0100, 0x20a3, 0x0000, 0x20a3, 0x0009, 0x7810, 0x20a2, 0x60c3,
-+ 0x0008, 0x080c, 0x7d11, 0x0005, 0x20a1, 0x020b, 0x080c, 0x75f3,
-+ 0x20a3, 0x1400, 0x20a3, 0x0000, 0x7834, 0x20a2, 0x7838, 0x20a2,
-+ 0x7828, 0x20a2, 0x782c, 0x20a2, 0x7830, 0xa084, 0x00ff, 0x8007,
-+ 0x20a2, 0x20a3, 0x0000, 0x60c3, 0x0010, 0x080c, 0x7d11, 0x0005,
-+ 0x20a1, 0x020b, 0x080c, 0x768f, 0x20a3, 0x0100, 0x20a3, 0x0000,
-+ 0x7828, 0x20a2, 0x7810, 0x20a2, 0x60c3, 0x0008, 0x080c, 0x7d11,
-+ 0x0005, 0x0146, 0x20a1, 0x020b, 0x0031, 0x60c3, 0x0000, 0x080c,
-+ 0x7d11, 0x014e, 0x0005, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818,
-+ 0xa080, 0x0028, 0x2004, 0x2011, 0xb435, 0x2214, 0xd2ac, 0x1110,
-+ 0xd0bc, 0x0188, 0x00d6, 0xa0e8, 0xb535, 0x2d6c, 0x6810, 0xa085,
-+ 0x0300, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xb41c, 0x2da6, 0x8d68,
-+ 0x2da6, 0x00de, 0x0078, 0x00d6, 0xa0e8, 0xb535, 0x2d6c, 0x6810,
-+ 0xa085, 0x0300, 0x20a2, 0x6814, 0x20a2, 0x00de, 0x20a3, 0x0000,
-+ 0x6234, 0x22a2, 0x20a3, 0x0819, 0x20a3, 0x0000, 0x080c, 0x7d00,
-+ 0x22a2, 0x20a3, 0x0000, 0x2fa2, 0x7a08, 0x22a2, 0x20a3, 0x0000,
-+ 0x20a3, 0x0000, 0x0005, 0x20a1, 0x020b, 0x0079, 0x7910, 0x21a2,
-+ 0x20a3, 0x0000, 0x60c3, 0x0000, 0x20e1, 0x9080, 0x60a7, 0x9575,
-+ 0x080c, 0x7d1b, 0x080c, 0x69cc, 0x0005, 0x0156, 0x0136, 0x0036,
-+ 0x00d6, 0x00e6, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7854, 0x2068,
-+ 0xadf0, 0x000f, 0x7210, 0xa296, 0x00c0, 0xa294, 0xfffd, 0x7212,
-+ 0x7214, 0xa294, 0x0300, 0x7216, 0x7100, 0xa194, 0x00ff, 0x7308,
-+ 0xa384, 0x00ff, 0xa08d, 0xc200, 0x7102, 0xa384, 0xff00, 0xa215,
-+ 0x720a, 0x7004, 0x720c, 0x700e, 0x7206, 0x20a9, 0x000a, 0x2e98,
-+ 0x53a6, 0x60a3, 0x0035, 0x6a38, 0xa294, 0x7000, 0xa286, 0x3000,
-+ 0x0110, 0x60a3, 0x0037, 0x00ee, 0x00de, 0x003e, 0x013e, 0x015e,
-+ 0x0005, 0x2009, 0x0092, 0x0010, 0x2009, 0x0096, 0x60ab, 0x0036,
-+ 0x6116, 0x0005, 0x2061, 0xbc00, 0x2a70, 0x7068, 0x704a, 0x704f,
-+ 0xbc00, 0x0005, 0x00e6, 0x0126, 0x2071, 0xb400, 0x2091, 0x8000,
-+ 0x7548, 0xa582, 0x0010, 0x0608, 0x704c, 0x2060, 0x6000, 0xa086,
-+ 0x0000, 0x0148, 0xace0, 0x0018, 0x705c, 0xac02, 0x1208, 0x0cb0,
-+ 0x2061, 0xbc00, 0x0c98, 0x6003, 0x0008, 0x8529, 0x754a, 0xaca8,
-+ 0x0018, 0x705c, 0xa502, 0x1230, 0x754e, 0xa085, 0x0001, 0x012e,
-+ 0x00ee, 0x0005, 0x704f, 0xbc00, 0x0cc0, 0xa006, 0x0cc0, 0x00e6,
-+ 0x2071, 0xb400, 0x7548, 0xa582, 0x0010, 0x0600, 0x704c, 0x2060,
-+ 0x6000, 0xa086, 0x0000, 0x0148, 0xace0, 0x0018, 0x705c, 0xac02,
-+ 0x1208, 0x0cb0, 0x2061, 0xbc00, 0x0c98, 0x6003, 0x0008, 0x8529,
-+ 0x754a, 0xaca8, 0x0018, 0x705c, 0xa502, 0x1228, 0x754e, 0xa085,
-+ 0x0001, 0x00ee, 0x0005, 0x704f, 0xbc00, 0x0cc8, 0xa006, 0x0cc8,
-+ 0xac82, 0xbc00, 0x0a0c, 0x1511, 0x2001, 0xb417, 0x2004, 0xac02,
-+ 0x1a0c, 0x1511, 0xa006, 0x6006, 0x600a, 0x600e, 0x6012, 0x6016,
-+ 0x601a, 0x601f, 0x0000, 0x6003, 0x0000, 0x6052, 0x6056, 0x6022,
-+ 0x6026, 0x602a, 0x602e, 0x6032, 0x6036, 0x603a, 0x603e, 0x2061,
-+ 0xb400, 0x6048, 0x8000, 0x604a, 0xa086, 0x0001, 0x0108, 0x0005,
-+ 0x0126, 0x2091, 0x8000, 0x080c, 0x7134, 0x012e, 0x0cc0, 0x601c,
-+ 0xa084, 0x000f, 0x0002, 0x85fe, 0x860d, 0x8628, 0x8643, 0xa0df,
-+ 0xa0fa, 0xa115, 0x85fe, 0x860d, 0x85fe, 0x865e, 0xa186, 0x0013,
-+ 0x1128, 0x080c, 0x7055, 0x080c, 0x7134, 0x0005, 0xa18e, 0x0047,
-+ 0x1118, 0xa016, 0x080c, 0x1856, 0x0005, 0x0066, 0x6000, 0xa0b2,
-+ 0x0010, 0x1a0c, 0x1511, 0x0013, 0x006e, 0x0005, 0x8626, 0x8a3e,
-+ 0x8bf6, 0x8626, 0x8c6b, 0x871c, 0x8626, 0x8626, 0x89d0, 0x908f,
-+ 0x8626, 0x8626, 0x8626, 0x8626, 0x8626, 0x8626, 0x080c, 0x1511,
-+ 0x0066, 0x6000, 0xa0b2, 0x0010, 0x1a0c, 0x1511, 0x0013, 0x006e,
-+ 0x0005, 0x8641, 0x96bb, 0x8641, 0x8641, 0x8641, 0x8641, 0x8641,
-+ 0x8641, 0x9666, 0x9827, 0x8641, 0x96e8, 0x975f, 0x96e8, 0x975f,
-+ 0x8641, 0x080c, 0x1511, 0x0066, 0x6000, 0xa0b2, 0x0010, 0x1a0c,
-+ 0x1511, 0x0013, 0x006e, 0x0005, 0x865c, 0x90d0, 0x919a, 0x92ce,
-+ 0x942a, 0x865c, 0x865c, 0x865c, 0x90aa, 0x9616, 0x9619, 0x865c,
-+ 0x865c, 0x865c, 0x865c, 0x9643, 0x080c, 0x1511, 0x0066, 0x6000,
-+ 0xa0b2, 0x0010, 0x1a0c, 0x1511, 0x0013, 0x006e, 0x0005, 0x8677,
-+ 0x8677, 0x8677, 0x86a5, 0x86f2, 0x8677, 0x8677, 0x8677, 0x8679,
-+ 0x8677, 0x8677, 0x8677, 0x8677, 0x8677, 0x8677, 0x8677, 0x080c,
-+ 0x1511, 0xa186, 0x0003, 0x190c, 0x1511, 0x00d6, 0x6003, 0x0003,
-+ 0x6106, 0x6010, 0x2068, 0x684f, 0x0040, 0x687c, 0x680a, 0x6880,
-+ 0x680e, 0x6813, 0x0000, 0x6817, 0x0000, 0x6854, 0xa092, 0x199a,
-+ 0x0210, 0x2001, 0x1999, 0x8003, 0x8013, 0x8213, 0xa210, 0x6216,
-+ 0x00de, 0x2c10, 0x080c, 0x1f7a, 0x080c, 0x6cb5, 0x0126, 0x2091,
-+ 0x8000, 0x080c, 0x71f1, 0x012e, 0x0005, 0xa182, 0x0047, 0x0002,
-+ 0x86b1, 0x86b1, 0x86b3, 0x86cc, 0x86b1, 0x86b1, 0x86b1, 0x86b1,
-+ 0x86de, 0x080c, 0x1511, 0x00d6, 0x0016, 0x080c, 0x70e7, 0x080c,
-+ 0x71f1, 0x6003, 0x0004, 0x6110, 0x2168, 0x684f, 0x0020, 0x685c,
-+ 0x685a, 0x6874, 0x687e, 0x6878, 0x6882, 0x6897, 0x0000, 0x689b,
-+ 0x0000, 0x001e, 0x00de, 0x0005, 0x080c, 0x70e7, 0x00d6, 0x6110,
-+ 0x2168, 0x080c, 0x9beb, 0x0120, 0x684b, 0x0006, 0x080c, 0x53c9,
-+ 0x00de, 0x080c, 0x85c0, 0x080c, 0x71f1, 0x0005, 0x080c, 0x70e7,
-+ 0x080c, 0x2c60, 0x00d6, 0x6110, 0x2168, 0x080c, 0x9beb, 0x0120,
-+ 0x684b, 0x0029, 0x080c, 0x53c9, 0x00de, 0x080c, 0x85c0, 0x080c,
-+ 0x71f1, 0x0005, 0xa182, 0x0047, 0x0002, 0x8700, 0x870f, 0x86fe,
-+ 0x86fe, 0x86fe, 0x86fe, 0x86fe, 0x86fe, 0x86fe, 0x080c, 0x1511,
-+ 0x00d6, 0x6010, 0x2068, 0x684c, 0xc0f4, 0x684e, 0x00de, 0x20e1,
-+ 0x0005, 0x3d18, 0x3e20, 0x2c10, 0x080c, 0x1856, 0x0005, 0x00d6,
-+ 0x6110, 0x2168, 0x684b, 0x0000, 0x6853, 0x0000, 0x080c, 0x53c9,
-+ 0x00de, 0x080c, 0x85c0, 0x0005, 0xa1b6, 0x0015, 0x1118, 0x080c,
-+ 0x85c0, 0x0030, 0xa1b6, 0x0016, 0x190c, 0x1511, 0x080c, 0x85c0,
-+ 0x0005, 0x20a9, 0x000e, 0x2e98, 0x6010, 0x20a0, 0x53a3, 0x20a9,
-+ 0x0006, 0x3310, 0x3420, 0x9398, 0x94a0, 0x3318, 0x3428, 0x222e,
-+ 0x2326, 0xa290, 0x0002, 0xa5a8, 0x0002, 0xa398, 0x0002, 0xa4a0,
-+ 0x0002, 0x1f04, 0x8737, 0x00e6, 0x080c, 0x9beb, 0x0130, 0x6010,
-+ 0x2070, 0x7007, 0x0000, 0x7037, 0x0103, 0x00ee, 0x080c, 0x85c0,
-+ 0x0005, 0x00d6, 0x0036, 0x7330, 0xa386, 0x0200, 0x1130, 0x6018,
-+ 0x2068, 0x6813, 0x00ff, 0x6817, 0xfffd, 0x6010, 0xa005, 0x0130,
-+ 0x2068, 0x6807, 0x0000, 0x6837, 0x0103, 0x6b32, 0x080c, 0x85c0,
-+ 0x003e, 0x00de, 0x0005, 0x0016, 0x20a9, 0x002a, 0xae80, 0x000c,
-+ 0x2098, 0x6010, 0xa080, 0x0002, 0x20a0, 0x53a3, 0x20a9, 0x002a,
-+ 0x6010, 0xa080, 0x0001, 0x2004, 0xa080, 0x0002, 0x20a0, 0x53a3,
-+ 0x00e6, 0x6010, 0x2004, 0x2070, 0x7037, 0x0103, 0x00ee, 0x080c,
-+ 0x85c0, 0x001e, 0x0005, 0x0016, 0x2009, 0x0000, 0x7030, 0xa086,
-+ 0x0100, 0x0140, 0x7038, 0xa084, 0x00ff, 0x800c, 0x703c, 0xa084,
-+ 0x00ff, 0x8004, 0xa080, 0x0004, 0xa108, 0x21a8, 0xae80, 0x000c,
-+ 0x2098, 0x6010, 0xa080, 0x0002, 0x20a0, 0x080c, 0x4b49, 0x00e6,
-+ 0x080c, 0x9beb, 0x0140, 0x6010, 0x2070, 0x7007, 0x0000, 0x7034,
-+ 0x70b2, 0x7037, 0x0103, 0x00ee, 0x080c, 0x85c0, 0x001e, 0x0005,
-+ 0x00e6, 0x00d6, 0x603f, 0x0000, 0x2c68, 0x0016, 0x2009, 0x0035,
-+ 0x080c, 0xa09b, 0x001e, 0x1168, 0x0026, 0x6228, 0x2268, 0x002e,
-+ 0x2071, 0xba8c, 0x6b1c, 0xa386, 0x0003, 0x0130, 0xa386, 0x0006,
-+ 0x0128, 0x080c, 0x85c0, 0x0020, 0x0031, 0x0010, 0x080c, 0x8899,
-+ 0x00de, 0x00ee, 0x0005, 0x00f6, 0x6810, 0x2078, 0xa186, 0x0015,
-+ 0x0904, 0x8880, 0xa18e, 0x0016, 0x1904, 0x8897, 0x700c, 0xa08c,
-+ 0xff00, 0xa186, 0x1700, 0x0120, 0xa186, 0x0300, 0x1904, 0x885f,
-+ 0x8fff, 0x1138, 0x6800, 0xa086, 0x000f, 0x0904, 0x8843, 0x0804,
-+ 0x8895, 0x6808, 0xa086, 0xffff, 0x1904, 0x8882, 0x784c, 0xa084,
-+ 0x0060, 0xa086, 0x0020, 0x1150, 0x797c, 0x7810, 0xa106, 0x1904,
-+ 0x8882, 0x7980, 0x7814, 0xa106, 0x1904, 0x8882, 0x080c, 0x9da2,
-+ 0x6858, 0x7852, 0x784c, 0xc0dc, 0xc0f4, 0xc0d4, 0x784e, 0x0026,
-+ 0xa00e, 0x6a14, 0x2001, 0x000a, 0x080c, 0x6b05, 0x7854, 0xa20a,
-+ 0x0208, 0x8011, 0x7a56, 0x82ff, 0x002e, 0x1138, 0x00c6, 0x2d60,
-+ 0x080c, 0x99a2, 0x00ce, 0x0804, 0x8895, 0x00c6, 0x00d6, 0x2f68,
-+ 0x6838, 0xd0fc, 0x1118, 0x080c, 0x4c1e, 0x0010, 0x080c, 0x4e0a,
-+ 0x00de, 0x00ce, 0x1904, 0x8882, 0x00c6, 0x2d60, 0x080c, 0x85c0,
-+ 0x00ce, 0x0804, 0x8895, 0x00c6, 0x080c, 0x9e67, 0x0190, 0x6013,
-+ 0x0000, 0x6818, 0x601a, 0x080c, 0x9fb8, 0x601f, 0x0003, 0x6904,
-+ 0x00c6, 0x2d60, 0x080c, 0x85c0, 0x00ce, 0x080c, 0x85ef, 0x00ce,
-+ 0x04e0, 0x2001, 0xb6b8, 0x2004, 0x683e, 0x00ce, 0x04b0, 0x7008,
-+ 0xa086, 0x000b, 0x11a0, 0x6018, 0x200c, 0xc1bc, 0x2102, 0x00c6,
-+ 0x2d60, 0x7853, 0x0003, 0x6007, 0x0085, 0x6003, 0x000b, 0x601f,
-+ 0x0002, 0x080c, 0x6c52, 0x080c, 0x7134, 0x00ce, 0x00f0, 0x700c,
-+ 0xa086, 0x2a00, 0x1138, 0x2001, 0xb6b8, 0x2004, 0x683e, 0x00a8,
-+ 0x0481, 0x00a8, 0x8fff, 0x090c, 0x1511, 0x00c6, 0x00d6, 0x2d60,
-+ 0x2f68, 0x6837, 0x0103, 0x684b, 0x0003, 0x080c, 0x9896, 0x080c,
-+ 0x9da2, 0x080c, 0x9dae, 0x00de, 0x00ce, 0x080c, 0x85c0, 0x00fe,
-+ 0x0005, 0xa186, 0x0015, 0x1128, 0x2001, 0xb6b8, 0x2004, 0x683e,
-+ 0x0068, 0xa18e, 0x0016, 0x1160, 0x00c6, 0x2d00, 0x2060, 0x080c,
-+ 0xb2bd, 0x080c, 0x6ab4, 0x080c, 0x85c0, 0x00ce, 0x080c, 0x85c0,
-+ 0x0005, 0x0026, 0x0036, 0x0046, 0x7228, 0x7c80, 0x7b7c, 0xd2f4,
-+ 0x0130, 0x2001, 0xb6b8, 0x2004, 0x683e, 0x0804, 0x8913, 0x00c6,
-+ 0x2d60, 0x080c, 0x98b6, 0x00ce, 0x6804, 0xa086, 0x0050, 0x1168,
-+ 0x00c6, 0x2d00, 0x2060, 0x6003, 0x0001, 0x6007, 0x0050, 0x080c,
-+ 0x6c52, 0x080c, 0x7134, 0x00ce, 0x04f0, 0x6800, 0xa086, 0x000f,
-+ 0x01c8, 0x8fff, 0x090c, 0x1511, 0x6820, 0xd0dc, 0x1198, 0x6800,
-+ 0xa086, 0x0004, 0x1198, 0x784c, 0xd0ac, 0x0180, 0x784c, 0xc0dc,
-+ 0xc0f4, 0x784e, 0x7850, 0xc0f4, 0xc0fc, 0x7852, 0x2001, 0x0001,
-+ 0x682e, 0x00e0, 0x2001, 0x0007, 0x682e, 0x00c0, 0x784c, 0xd0b4,
-+ 0x1130, 0xd0ac, 0x0db8, 0x784c, 0xd0f4, 0x1da0, 0x0c38, 0xd2ec,
-+ 0x1d88, 0x7024, 0xa306, 0x1118, 0x7020, 0xa406, 0x0d58, 0x7020,
-+ 0x6836, 0x7024, 0x683a, 0x2001, 0x0005, 0x682e, 0x080c, 0x9ef4,
-+ 0x080c, 0x7134, 0x0010, 0x080c, 0x85c0, 0x004e, 0x003e, 0x002e,
-+ 0x0005, 0x00e6, 0x00d6, 0x0026, 0x6034, 0x2068, 0x6a1c, 0xa286,
-+ 0x0007, 0x0904, 0x8977, 0xa286, 0x0002, 0x0904, 0x8977, 0xa286,
-+ 0x0000, 0x0904, 0x8977, 0x6808, 0x6338, 0xa306, 0x1904, 0x8977,
-+ 0x2071, 0xba8c, 0xa186, 0x0015, 0x05e0, 0xa18e, 0x0016, 0x1190,
-+ 0x6030, 0xa084, 0x00ff, 0xa086, 0x0001, 0x1160, 0x700c, 0xa086,
-+ 0x2a00, 0x1140, 0x6034, 0xa080, 0x0008, 0x200c, 0xc1dd, 0xc1f5,
-+ 0x2102, 0x0438, 0x00c6, 0x6034, 0x2060, 0x6104, 0xa186, 0x004b,
-+ 0x01a0, 0xa186, 0x004c, 0x0188, 0xa186, 0x004d, 0x0170, 0xa186,
-+ 0x004e, 0x0158, 0xa186, 0x0052, 0x0140, 0x6010, 0x2068, 0x080c,
-+ 0x9beb, 0x090c, 0x1511, 0x6853, 0x0003, 0x6007, 0x0085, 0x6003,
-+ 0x000b, 0x601f, 0x0002, 0x080c, 0x6c52, 0x080c, 0x7134, 0x00ce,
-+ 0x0030, 0x6034, 0x2070, 0x2001, 0xb6b8, 0x2004, 0x703e, 0x080c,
-+ 0x85c0, 0x002e, 0x00de, 0x00ee, 0x0005, 0x00d6, 0x20a9, 0x000e,
-+ 0x2e98, 0x6010, 0x20a0, 0x53a3, 0xa1b6, 0x0015, 0x1558, 0x6018,
-+ 0x2068, 0x0156, 0x0036, 0x0026, 0xae90, 0x000c, 0xa290, 0x0004,
-+ 0x20a9, 0x0004, 0xad98, 0x000a, 0x080c, 0x907a, 0x002e, 0x003e,
-+ 0x015e, 0x11d8, 0x0156, 0x0036, 0x0026, 0xae90, 0x000c, 0xa290,
-+ 0x0008, 0x20a9, 0x0004, 0xad98, 0x0006, 0x080c, 0x907a, 0x002e,
-+ 0x003e, 0x015e, 0x1150, 0x7038, 0x680a, 0x703c, 0x680e, 0x6800,
-+ 0xc08d, 0x6802, 0x00de, 0x0804, 0x8743, 0x080c, 0x2c60, 0x00c6,
-+ 0x080c, 0x856a, 0x2f00, 0x601a, 0x6013, 0x0000, 0x601f, 0x0001,
-+ 0x6007, 0x0001, 0x6003, 0x0001, 0x2001, 0x0007, 0x080c, 0x4ebe,
-+ 0x080c, 0x4eeb, 0x080c, 0x6c98, 0x080c, 0x7134, 0x00ce, 0x0c10,
-+ 0x2100, 0xa1b2, 0x0080, 0x1a0c, 0x1511, 0xa1b2, 0x0040, 0x1a04,
-+ 0x8a34, 0x0002, 0x8a28, 0x8a1c, 0x8a28, 0x8a28, 0x8a28, 0x8a28,
-+ 0x8a1a, 0x8a1a, 0x8a1a, 0x8a1a, 0x8a1a, 0x8a1a, 0x8a1a, 0x8a1a,
-+ 0x8a1a, 0x8a1a, 0x8a1a, 0x8a1a, 0x8a1a, 0x8a1a, 0x8a1a, 0x8a1a,
-+ 0x8a1a, 0x8a1a, 0x8a1a, 0x8a1a, 0x8a1a, 0x8a1a, 0x8a1a, 0x8a1a,
-+ 0x8a1a, 0x8a28, 0x8a1a, 0x8a28, 0x8a28, 0x8a1a, 0x8a1a, 0x8a1a,
-+ 0x8a1a, 0x8a1a, 0x8a28, 0x8a1a, 0x8a1a, 0x8a1a, 0x8a1a, 0x8a1a,
-+ 0x8a1a, 0x8a1a, 0x8a1a, 0x8a1a, 0x8a28, 0x8a28, 0x8a1a, 0x8a1a,
-+ 0x8a1a, 0x8a1a, 0x8a1a, 0x8a1a, 0x8a1a, 0x8a1a, 0x8a1a, 0x8a28,
-+ 0x8a1a, 0x8a1a, 0x080c, 0x1511, 0x6003, 0x0001, 0x6106, 0x080c,
-+ 0x6c98, 0x0126, 0x2091, 0x8000, 0x080c, 0x7134, 0x012e, 0x0005,
-+ 0x6003, 0x0001, 0x6106, 0x080c, 0x6c98, 0x0126, 0x2091, 0x8000,
-+ 0x080c, 0x7134, 0x012e, 0x0005, 0x2600, 0x0002, 0x8a28, 0x8a28,
-+ 0x8a3c, 0x8a28, 0x8a28, 0x8a3c, 0x080c, 0x1511, 0x6004, 0xa0b2,
-+ 0x0080, 0x1a0c, 0x1511, 0xa1b6, 0x0013, 0x0904, 0x8aee, 0xa1b6,
-+ 0x0027, 0x1904, 0x8ab4, 0x080c, 0x7055, 0x6004, 0x080c, 0x9dd8,
-+ 0x0190, 0x080c, 0x9de9, 0x0904, 0x8aae, 0xa08e, 0x0021, 0x0904,
-+ 0x8ab1, 0xa08e, 0x0022, 0x0904, 0x8aae, 0xa08e, 0x003d, 0x0904,
-+ 0x8ab1, 0x0804, 0x8aa7, 0x080c, 0x2c86, 0x2001, 0x0007, 0x080c,
-+ 0x4ebe, 0x6018, 0xa080, 0x0028, 0x200c, 0x080c, 0x8bbc, 0xa186,
-+ 0x007e, 0x1148, 0x2001, 0xb435, 0x2014, 0xc285, 0x080c, 0x5a90,
-+ 0x1108, 0xc2ad, 0x2202, 0x0016, 0x0026, 0x0036, 0x2110, 0x0026,
-+ 0x2019, 0x0028, 0x080c, 0x823c, 0x002e, 0x080c, 0xb310, 0x003e,
-+ 0x002e, 0x001e, 0x0016, 0x0026, 0x0036, 0x2110, 0x2019, 0x0028,
-+ 0x080c, 0x6dba, 0x0076, 0x2039, 0x0000, 0x080c, 0x6cc7, 0x00c6,
-+ 0x6018, 0xa065, 0x0110, 0x080c, 0x516b, 0x00ce, 0x2c08, 0x080c,
-+ 0xae05, 0x007e, 0x003e, 0x002e, 0x001e, 0x080c, 0x4f2d, 0x080c,
-+ 0x9fb0, 0x080c, 0x85c0, 0x080c, 0x7134, 0x0005, 0x080c, 0x8bbc,
-+ 0x0cb0, 0x080c, 0x8bea, 0x0c98, 0xa186, 0x0014, 0x1db0, 0x080c,
-+ 0x7055, 0x080c, 0x2c60, 0x080c, 0x9dd8, 0x1188, 0x080c, 0x2c86,
-+ 0x6018, 0xa080, 0x0028, 0x200c, 0x080c, 0x8bbc, 0xa186, 0x007e,
-+ 0x1128, 0x2001, 0xb435, 0x200c, 0xc185, 0x2102, 0x08c0, 0x080c,
-+ 0x9de9, 0x1118, 0x080c, 0x8bbc, 0x0890, 0x6004, 0xa08e, 0x0032,
-+ 0x1158, 0x00e6, 0x00f6, 0x2071, 0xb482, 0x2079, 0x0000, 0x080c,
-+ 0x2f93, 0x00fe, 0x00ee, 0x0818, 0x6004, 0xa08e, 0x0021, 0x0d50,
-+ 0xa08e, 0x0022, 0x090c, 0x8bbc, 0x0804, 0x8aa7, 0xa0b2, 0x0040,
-+ 0x1a04, 0x8bb1, 0x2008, 0x0002, 0x8b36, 0x8b37, 0x8b3a, 0x8b3d,
-+ 0x8b40, 0x8b43, 0x8b34, 0x8b34, 0x8b34, 0x8b34, 0x8b34, 0x8b34,
-+ 0x8b34, 0x8b34, 0x8b34, 0x8b34, 0x8b34, 0x8b34, 0x8b34, 0x8b34,
-+ 0x8b34, 0x8b34, 0x8b34, 0x8b34, 0x8b34, 0x8b34, 0x8b34, 0x8b34,
-+ 0x8b34, 0x8b34, 0x8b46, 0x8b55, 0x8b34, 0x8b57, 0x8b55, 0x8b34,
-+ 0x8b34, 0x8b34, 0x8b34, 0x8b34, 0x8b55, 0x8b55, 0x8b34, 0x8b34,
-+ 0x8b34, 0x8b34, 0x8b34, 0x8b34, 0x8b34, 0x8b34, 0x8b91, 0x8b55,
-+ 0x8b34, 0x8b51, 0x8b34, 0x8b34, 0x8b34, 0x8b52, 0x8b34, 0x8b34,
-+ 0x8b34, 0x8b55, 0x8b88, 0x8b34, 0x080c, 0x1511, 0x00f0, 0x2001,
-+ 0x000b, 0x0460, 0x2001, 0x0003, 0x0448, 0x2001, 0x0005, 0x0430,
-+ 0x2001, 0x0001, 0x0418, 0x2001, 0x0009, 0x0400, 0x080c, 0x7055,
-+ 0x6003, 0x0005, 0x2001, 0xb6b8, 0x2004, 0x603e, 0x080c, 0x7134,
-+ 0x00a0, 0x0018, 0x0010, 0x080c, 0x4ebe, 0x0804, 0x8ba2, 0x080c,
-+ 0x7055, 0x2001, 0xb6b6, 0x2004, 0x6016, 0x2001, 0xb6b8, 0x2004,
-+ 0x603e, 0x6003, 0x0004, 0x080c, 0x7134, 0x0005, 0x080c, 0x4ebe,
-+ 0x080c, 0x7055, 0x6003, 0x0002, 0x2001, 0xb6b8, 0x2004, 0x603e,
-+ 0x0036, 0x2019, 0xb45d, 0x2304, 0xa084, 0xff00, 0x1120, 0x2001,
-+ 0xb6b6, 0x201c, 0x0040, 0x8007, 0xa09a, 0x0004, 0x0ec0, 0x8003,
-+ 0x801b, 0x831b, 0xa318, 0x6316, 0x003e, 0x080c, 0x7134, 0x08e8,
-+ 0x080c, 0x7055, 0x080c, 0x9fb0, 0x080c, 0x85c0, 0x080c, 0x7134,
-+ 0x08a0, 0x00e6, 0x00f6, 0x2071, 0xb482, 0x2079, 0x0000, 0x080c,
-+ 0x2f93, 0x00fe, 0x00ee, 0x080c, 0x7055, 0x080c, 0x85c0, 0x080c,
-+ 0x7134, 0x0818, 0x080c, 0x7055, 0x2001, 0xb6b8, 0x2004, 0x603e,
-+ 0x6003, 0x0002, 0x2001, 0xb6b6, 0x2004, 0x6016, 0x080c, 0x7134,
-+ 0x0005, 0x2600, 0x2008, 0x0002, 0x8bba, 0x8bba, 0x8bba, 0x8ba2,
-+ 0x8ba2, 0x8bba, 0x080c, 0x1511, 0x00e6, 0x0026, 0x0016, 0x080c,
-+ 0x9beb, 0x0508, 0x6010, 0x2070, 0x7034, 0xa086, 0x0139, 0x1148,
-+ 0x2001, 0x0030, 0x2009, 0x0000, 0x2011, 0x4005, 0x080c, 0xa067,
-+ 0x0090, 0x7038, 0xd0fc, 0x0178, 0x7007, 0x0000, 0x0016, 0x6004,
-+ 0xa08e, 0x0021, 0x0160, 0xa08e, 0x003d, 0x0148, 0x001e, 0x7037,
-+ 0x0103, 0x7033, 0x0100, 0x001e, 0x002e, 0x00ee, 0x0005, 0x001e,
-+ 0x0009, 0x0cc8, 0x00e6, 0xacf0, 0x0004, 0x2e74, 0x7000, 0x2070,
-+ 0x7037, 0x0103, 0x7023, 0x8001, 0x00ee, 0x0005, 0x00d6, 0x6618,
-+ 0x2668, 0x6804, 0xa084, 0x00ff, 0x00de, 0xa0b2, 0x000c, 0x1a0c,
-+ 0x1511, 0x6604, 0xa6b6, 0x0043, 0x1120, 0x080c, 0xa023, 0x0804,
-+ 0x8c5b, 0x6604, 0xa6b6, 0x0033, 0x1120, 0x080c, 0x9fd3, 0x0804,
-+ 0x8c5b, 0x6604, 0xa6b6, 0x0028, 0x1120, 0x080c, 0x9e19, 0x0804,
-+ 0x8c5b, 0x6604, 0xa6b6, 0x0029, 0x1118, 0x080c, 0x9e30, 0x04d8,
-+ 0x6604, 0xa6b6, 0x001f, 0x1118, 0x080c, 0x8729, 0x04a0, 0x6604,
-+ 0xa6b6, 0x0000, 0x1118, 0x080c, 0x897d, 0x0468, 0x6604, 0xa6b6,
-+ 0x0022, 0x1118, 0x080c, 0x8751, 0x0430, 0x6604, 0xa6b6, 0x0035,
-+ 0x1118, 0x080c, 0x87b8, 0x00f8, 0x6604, 0xa6b6, 0x0039, 0x1118,
-+ 0x080c, 0x8919, 0x00c0, 0x6604, 0xa6b6, 0x003d, 0x1118, 0x080c,
-+ 0x876b, 0x0088, 0x6604, 0xa6b6, 0x0044, 0x1118, 0x080c, 0x878b,
-+ 0x0050, 0xa1b6, 0x0015, 0x1110, 0x0053, 0x0028, 0xa1b6, 0x0016,
-+ 0x1118, 0x0804, 0x8e1f, 0x0005, 0x080c, 0x8606, 0x0ce0, 0x8c82,
-+ 0x8c85, 0x8c82, 0x8cc7, 0x8c82, 0x8dac, 0x8e2d, 0x8c82, 0x8c82,
-+ 0x8dfb, 0x8c82, 0x8e0f, 0xa1b6, 0x0048, 0x0140, 0x20e1, 0x0005,
-+ 0x3d18, 0x3e20, 0x2c10, 0x080c, 0x1856, 0x0005, 0x00e6, 0xacf0,
-+ 0x0004, 0x2e74, 0x7000, 0x2070, 0x7037, 0x0103, 0x00ee, 0x080c,
-+ 0x85c0, 0x0005, 0xe000, 0xe000, 0x0005, 0x00e6, 0x2071, 0xb400,
-+ 0x7084, 0xa086, 0x0074, 0x1530, 0x080c, 0xaddc, 0x11b0, 0x00d6,
-+ 0x6018, 0x2068, 0x7030, 0xd08c, 0x0128, 0x6800, 0xd0bc, 0x0110,
-+ 0xc0c5, 0x6802, 0x00d9, 0x00de, 0x2001, 0x0006, 0x080c, 0x4ebe,
-+ 0x080c, 0x2c86, 0x080c, 0x85c0, 0x0078, 0x2001, 0x000a, 0x080c,
-+ 0x4ebe, 0x080c, 0x2c86, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c,
-+ 0x6c98, 0x0010, 0x080c, 0x8d99, 0x00ee, 0x0005, 0x6800, 0xd084,
-+ 0x0168, 0x2001, 0x0000, 0x080c, 0x4eac, 0x2069, 0xb452, 0x6804,
-+ 0xd0a4, 0x0120, 0x2001, 0x0006, 0x080c, 0x4eeb, 0x0005, 0x00d6,
-+ 0x2011, 0xb421, 0x2204, 0xa086, 0x0074, 0x1904, 0x8d96, 0x6018,
-+ 0x2068, 0x6aa0, 0xa286, 0x007e, 0x1120, 0x080c, 0x8f42, 0x0804,
-+ 0x8d35, 0x080c, 0x8f38, 0x6018, 0x2068, 0xa080, 0x0028, 0x2014,
-+ 0xa286, 0x0080, 0x11c0, 0x6813, 0x00ff, 0x6817, 0xfffc, 0x6010,
-+ 0xa005, 0x0138, 0x2068, 0x6807, 0x0000, 0x6837, 0x0103, 0x6833,
-+ 0x0200, 0x2001, 0x0006, 0x080c, 0x4ebe, 0x080c, 0x2c86, 0x080c,
-+ 0x85c0, 0x0804, 0x8d97, 0x00e6, 0x2071, 0xb435, 0x2e04, 0xd09c,
-+ 0x0188, 0x2071, 0xba80, 0x7108, 0x720c, 0xa18c, 0x00ff, 0x1118,
-+ 0xa284, 0xff00, 0x0138, 0x6018, 0x2070, 0x70a0, 0xd0bc, 0x1110,
-+ 0x7112, 0x7216, 0x00ee, 0x6010, 0xa005, 0x0198, 0x2068, 0x6838,
-+ 0xd0f4, 0x0178, 0x6834, 0xa084, 0x00ff, 0xa086, 0x0039, 0x1958,
-+ 0x2001, 0x0000, 0x2009, 0x0000, 0x2011, 0x4000, 0x080c, 0xa067,
-+ 0x0840, 0x2001, 0x0004, 0x080c, 0x4ebe, 0x6003, 0x0001, 0x6007,
-+ 0x0003, 0x080c, 0x6c98, 0x0804, 0x8d97, 0x685c, 0xd0e4, 0x01d8,
-+ 0x080c, 0x9f63, 0x080c, 0x5a90, 0x0118, 0xd0dc, 0x1904, 0x8cf1,
-+ 0x2011, 0xb435, 0x2204, 0xc0ad, 0x2012, 0x2001, 0xb68f, 0x2004,
-+ 0x00f6, 0x2079, 0x0100, 0x78e3, 0x0000, 0x080c, 0x2838, 0x78e2,
-+ 0x00fe, 0x0804, 0x8cf1, 0x080c, 0x9f99, 0x2011, 0xb435, 0x2204,
-+ 0xc0a5, 0x2012, 0x0006, 0x080c, 0xaefe, 0x000e, 0x1904, 0x8cf1,
-+ 0xc0b5, 0x2012, 0x2001, 0x0006, 0x080c, 0x4ebe, 0x2001, 0x0000,
-+ 0x080c, 0x4eac, 0x00c6, 0x2009, 0x00ef, 0x00f6, 0x2079, 0x0100,
-+ 0x79ea, 0x7932, 0x7936, 0x00fe, 0x080c, 0x280d, 0x00f6, 0x2079,
-+ 0xb400, 0x7976, 0x2100, 0x2009, 0x0000, 0x080c, 0x27e3, 0x7952,
-+ 0x00fe, 0x8108, 0x080c, 0x4f0e, 0x2c00, 0x00ce, 0x1904, 0x8cf1,
-+ 0x601a, 0x2001, 0x0002, 0x080c, 0x4ebe, 0x601f, 0x0001, 0x6003,
-+ 0x0001, 0x6007, 0x0002, 0x080c, 0x6c98, 0x0008, 0x0011, 0x00de,
-+ 0x0005, 0x2001, 0x0007, 0x080c, 0x4ebe, 0x2001, 0xb400, 0x2004,
-+ 0xa086, 0x0003, 0x1120, 0x2001, 0x0007, 0x080c, 0x4eeb, 0x080c,
-+ 0x2c86, 0x080c, 0x85c0, 0x0005, 0x00e6, 0x0026, 0x0016, 0x2071,
-+ 0xb400, 0x7084, 0xa086, 0x0014, 0x15f0, 0x7000, 0xa086, 0x0003,
-+ 0x1128, 0x6010, 0xa005, 0x1110, 0x080c, 0x3efc, 0x00d6, 0x6018,
-+ 0x2068, 0x080c, 0x500c, 0x080c, 0x8cb6, 0x00de, 0x080c, 0x8ff1,
-+ 0x1550, 0x00d6, 0x6018, 0x2068, 0x6890, 0x00de, 0xa005, 0x0518,
-+ 0x2001, 0x0006, 0x080c, 0x4ebe, 0x00e6, 0x6010, 0xa075, 0x01a8,
-+ 0x7034, 0xa084, 0x00ff, 0xa086, 0x0039, 0x1148, 0x2001, 0x0000,
-+ 0x2009, 0x0000, 0x2011, 0x4000, 0x080c, 0xa067, 0x0030, 0x7007,
-+ 0x0000, 0x7037, 0x0103, 0x7033, 0x0200, 0x00ee, 0x080c, 0x2c86,
-+ 0x080c, 0x85c0, 0x0020, 0x080c, 0x8bbc, 0x080c, 0x8d99, 0x001e,
-+ 0x002e, 0x00ee, 0x0005, 0x2011, 0xb421, 0x2204, 0xa086, 0x0014,
-+ 0x1158, 0x2001, 0x0002, 0x080c, 0x4ebe, 0x6003, 0x0001, 0x6007,
-+ 0x0001, 0x080c, 0x6c98, 0x0010, 0x080c, 0x8d99, 0x0005, 0x2011,
-+ 0xb421, 0x2204, 0xa086, 0x0004, 0x1138, 0x2001, 0x0007, 0x080c,
-+ 0x4ebe, 0x080c, 0x85c0, 0x0010, 0x080c, 0x8d99, 0x0005, 0x000b,
-+ 0x0005, 0x8c82, 0x8e38, 0x8c82, 0x8e6c, 0x8c82, 0x8ef4, 0x8e2d,
-+ 0x8c82, 0x8c82, 0x8f07, 0x8c82, 0x8f17, 0x6604, 0xa686, 0x0003,
-+ 0x0904, 0x8dac, 0xa6b6, 0x001e, 0x1110, 0x080c, 0x85c0, 0x0005,
-+ 0x00d6, 0x00c6, 0x080c, 0x8f27, 0x1178, 0x2001, 0x0000, 0x080c,
-+ 0x4eac, 0x2001, 0x0002, 0x080c, 0x4ebe, 0x6003, 0x0001, 0x6007,
-+ 0x0002, 0x080c, 0x6c98, 0x00e8, 0x2009, 0xba8e, 0x2104, 0xa086,
-+ 0x0009, 0x1160, 0x6018, 0x2068, 0x6840, 0xa084, 0x00ff, 0xa005,
-+ 0x0170, 0x8001, 0x6842, 0x6017, 0x000a, 0x0058, 0x2009, 0xba8f,
-+ 0x2104, 0xa084, 0xff00, 0xa086, 0x1900, 0x1108, 0x08d0, 0x080c,
-+ 0x8d99, 0x00ce, 0x00de, 0x0005, 0x0026, 0x2011, 0x0000, 0x080c,
-+ 0x8f35, 0x00d6, 0x2069, 0xb69e, 0x2d04, 0xa005, 0x0168, 0x6018,
-+ 0x2068, 0x68a0, 0xa086, 0x007e, 0x1138, 0x2069, 0xb41d, 0x2d04,
-+ 0x8000, 0x206a, 0x00de, 0x0010, 0x00de, 0x0078, 0x2001, 0x0000,
-+ 0x080c, 0x4eac, 0x2001, 0x0002, 0x080c, 0x4ebe, 0x6003, 0x0001,
-+ 0x6007, 0x0002, 0x080c, 0x6c98, 0x0468, 0x00d6, 0x6010, 0x2068,
-+ 0x080c, 0x9beb, 0x00de, 0x0108, 0x6a34, 0x080c, 0x8bbc, 0x2009,
-+ 0xba8e, 0x2134, 0xa6b4, 0x00ff, 0xa686, 0x0005, 0x01e8, 0xa686,
-+ 0x000b, 0x01b0, 0x2009, 0xba8f, 0x2104, 0xa084, 0xff00, 0x1118,
-+ 0xa686, 0x0009, 0x0188, 0xa086, 0x1900, 0x1150, 0xa686, 0x0009,
-+ 0x0158, 0x2001, 0x0004, 0x080c, 0x4ebe, 0x080c, 0x85c0, 0x0010,
-+ 0x080c, 0x8d99, 0x002e, 0x0005, 0x00d6, 0xa286, 0x0139, 0x0160,
-+ 0x6010, 0x2068, 0x080c, 0x9beb, 0x0148, 0x6834, 0xa086, 0x0139,
-+ 0x0118, 0x6838, 0xd0fc, 0x0110, 0x00de, 0x0c50, 0x6018, 0x2068,
-+ 0x6840, 0xa084, 0x00ff, 0xa005, 0x0140, 0x8001, 0x6842, 0x6017,
-+ 0x000a, 0x6007, 0x0016, 0x00de, 0x08e8, 0x68a0, 0xa086, 0x007e,
-+ 0x1138, 0x00e6, 0x2071, 0xb400, 0x080c, 0x4b80, 0x00ee, 0x0010,
-+ 0x080c, 0x2c60, 0x00de, 0x0860, 0x080c, 0x8f35, 0x1158, 0x2001,
-+ 0x0004, 0x080c, 0x4ebe, 0x6003, 0x0001, 0x6007, 0x0003, 0x080c,
-+ 0x6c98, 0x0020, 0x080c, 0x8bbc, 0x080c, 0x8d99, 0x0005, 0x0469,
-+ 0x1158, 0x2001, 0x0008, 0x080c, 0x4ebe, 0x6003, 0x0001, 0x6007,
-+ 0x0005, 0x080c, 0x6c98, 0x0010, 0x080c, 0x8d99, 0x0005, 0x00e9,
-+ 0x1158, 0x2001, 0x000a, 0x080c, 0x4ebe, 0x6003, 0x0001, 0x6007,
-+ 0x0001, 0x080c, 0x6c98, 0x0010, 0x080c, 0x8d99, 0x0005, 0x2009,
-+ 0xba8e, 0x2104, 0xa086, 0x0003, 0x1138, 0x2009, 0xba8f, 0x2104,
-+ 0xa084, 0xff00, 0xa086, 0x2a00, 0x0005, 0xa085, 0x0001, 0x0005,
-+ 0x00c6, 0x0016, 0xac88, 0x0006, 0x2164, 0x080c, 0x4f79, 0x001e,
-+ 0x00ce, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x0036, 0x0016, 0x6018,
-+ 0x2068, 0x2071, 0xb435, 0x2e04, 0xa085, 0x0003, 0x2072, 0x080c,
-+ 0x8fc6, 0x0560, 0x2009, 0xb435, 0x2104, 0xc0cd, 0x200a, 0x2001,
-+ 0xb453, 0x2004, 0xd0a4, 0x0158, 0xa006, 0x2020, 0x2009, 0x002a,
-+ 0x080c, 0xb06b, 0x2001, 0xb40c, 0x200c, 0xc195, 0x2102, 0x2019,
-+ 0x002a, 0x2009, 0x0001, 0x080c, 0x2c33, 0x2071, 0xb400, 0x080c,
-+ 0x2a7e, 0x00c6, 0x0156, 0x20a9, 0x0081, 0x2009, 0x007f, 0x080c,
-+ 0x2d5b, 0x8108, 0x1f04, 0x8f77, 0x015e, 0x00ce, 0x080c, 0x8f38,
-+ 0x6813, 0x00ff, 0x6817, 0xfffe, 0x2071, 0xba80, 0x2079, 0x0100,
-+ 0x2e04, 0xa084, 0x00ff, 0x2069, 0xb41c, 0x206a, 0x78e6, 0x0006,
-+ 0x8e70, 0x2e04, 0x2069, 0xb41d, 0x206a, 0x78ea, 0x7832, 0x7836,
-+ 0x2010, 0xa084, 0xff00, 0x001e, 0xa105, 0x2009, 0xb428, 0x200a,
-+ 0x2200, 0xa084, 0x00ff, 0x2008, 0x080c, 0x280d, 0x080c, 0x5a90,
-+ 0x0170, 0x2069, 0xba8e, 0x2071, 0xb6b2, 0x6810, 0x2072, 0x6814,
-+ 0x7006, 0x6818, 0x700a, 0x681c, 0x700e, 0x080c, 0x9f63, 0x0040,
-+ 0x2001, 0x0006, 0x080c, 0x4ebe, 0x080c, 0x2c86, 0x080c, 0x85c0,
-+ 0x001e, 0x003e, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x0026, 0x0036,
-+ 0x00e6, 0x0156, 0x2019, 0xb428, 0x231c, 0x83ff, 0x01e8, 0x2071,
-+ 0xba80, 0x2e14, 0xa294, 0x00ff, 0x7004, 0xa084, 0xff00, 0xa205,
-+ 0xa306, 0x1190, 0x2011, 0xba96, 0xad98, 0x000a, 0x20a9, 0x0004,
-+ 0x080c, 0x907a, 0x1148, 0x2011, 0xba9a, 0xad98, 0x0006, 0x20a9,
-+ 0x0004, 0x080c, 0x907a, 0x1100, 0x015e, 0x00ee, 0x003e, 0x002e,
-+ 0x0005, 0x00e6, 0x2071, 0xba8c, 0x7004, 0xa086, 0x0014, 0x11a8,
-+ 0x7008, 0xa086, 0x0800, 0x1188, 0x700c, 0xd0ec, 0x0160, 0xa084,
-+ 0x0f00, 0xa086, 0x0100, 0x1138, 0x7024, 0xd0a4, 0x1110, 0xd0ac,
-+ 0x0110, 0xa006, 0x0010, 0xa085, 0x0001, 0x00ee, 0x0005, 0x00e6,
-+ 0x00d6, 0x00c6, 0x0076, 0x0056, 0x0046, 0x0026, 0x0006, 0x0126,
-+ 0x2091, 0x8000, 0x2029, 0xb6e9, 0x252c, 0x2021, 0xb6ef, 0x2424,
-+ 0x2061, 0xbc00, 0x2071, 0xb400, 0x7248, 0x7068, 0xa202, 0x16f0,
-+ 0x080c, 0xb093, 0x05a0, 0x671c, 0xa786, 0x0001, 0x0580, 0xa786,
-+ 0x0007, 0x0568, 0x2500, 0xac06, 0x0550, 0x2400, 0xac06, 0x0538,
-+ 0x00c6, 0x6000, 0xa086, 0x0004, 0x1110, 0x080c, 0x1944, 0xa786,
-+ 0x0008, 0x1148, 0x080c, 0x9de9, 0x1130, 0x00ce, 0x080c, 0x8bbc,
-+ 0x080c, 0x9dae, 0x00a0, 0x6010, 0x2068, 0x080c, 0x9beb, 0x0160,
-+ 0xa786, 0x0003, 0x11e8, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000,
-+ 0x080c, 0x53c9, 0x080c, 0x9da2, 0x080c, 0x9dae, 0x00ce, 0xace0,
-+ 0x0018, 0x705c, 0xac02, 0x1210, 0x0804, 0x9024, 0x012e, 0x000e,
-+ 0x002e, 0x004e, 0x005e, 0x007e, 0x00ce, 0x00de, 0x00ee, 0x0005,
-+ 0xa786, 0x0006, 0x1118, 0x080c, 0xb01c, 0x0c30, 0xa786, 0x000a,
-+ 0x09e0, 0x08c8, 0x220c, 0x2304, 0xa106, 0x1130, 0x8210, 0x8318,
-+ 0x1f04, 0x907a, 0xa006, 0x0005, 0x2304, 0xa102, 0x0218, 0x2001,
-+ 0x0001, 0x0010, 0x2001, 0x0000, 0xa18d, 0x0001, 0x0005, 0x6004,
-+ 0xa08a, 0x0080, 0x1a0c, 0x1511, 0x080c, 0x9dd8, 0x0120, 0x080c,
-+ 0x9de9, 0x0168, 0x0028, 0x080c, 0x2c86, 0x080c, 0x9de9, 0x0138,
-+ 0x080c, 0x7055, 0x080c, 0x85c0, 0x080c, 0x7134, 0x0005, 0x080c,
-+ 0x8bbc, 0x0cb0, 0xa182, 0x0040, 0x0002, 0x90c0, 0x90c0, 0x90c0,
-+ 0x90c0, 0x90c0, 0x90c0, 0x90c0, 0x90c0, 0x90c0, 0x90c0, 0x90c0,
-+ 0x90c2, 0x90c2, 0x90c2, 0x90c2, 0x90c0, 0x90c0, 0x90c0, 0x90c2,
-+ 0x080c, 0x1511, 0x600b, 0xffff, 0x6003, 0x0001, 0x6106, 0x080c,
-+ 0x6c52, 0x0126, 0x2091, 0x8000, 0x080c, 0x7134, 0x012e, 0x0005,
-+ 0xa186, 0x0013, 0x1128, 0x6004, 0xa082, 0x0040, 0x0804, 0x915c,
-+ 0xa186, 0x0027, 0x11e8, 0x080c, 0x7055, 0x080c, 0x2c60, 0x00d6,
-+ 0x6110, 0x2168, 0x080c, 0x9beb, 0x0168, 0x6837, 0x0103, 0x684b,
-+ 0x0029, 0x6847, 0x0000, 0x694c, 0xc1c5, 0x694e, 0x080c, 0x53c9,
-+ 0x080c, 0x9da2, 0x00de, 0x080c, 0x85c0, 0x080c, 0x7134, 0x0005,
-+ 0xa186, 0x0014, 0x1120, 0x6004, 0xa082, 0x0040, 0x0428, 0xa186,
-+ 0x0046, 0x0138, 0xa186, 0x0045, 0x0120, 0xa186, 0x0047, 0x190c,
-+ 0x1511, 0x2001, 0x0109, 0x2004, 0xd084, 0x0198, 0x0126, 0x2091,
-+ 0x2800, 0x0006, 0x0016, 0x0026, 0x080c, 0x6b39, 0x002e, 0x001e,
-+ 0x000e, 0x012e, 0xe000, 0x6000, 0xa086, 0x0002, 0x1110, 0x0804,
-+ 0x919a, 0x080c, 0x8606, 0x0005, 0x0002, 0x913a, 0x9138, 0x9138,
-+ 0x9138, 0x9138, 0x9138, 0x9138, 0x9138, 0x9138, 0x9138, 0x9138,
-+ 0x9155, 0x9155, 0x9155, 0x9155, 0x9138, 0x9155, 0x9138, 0x9155,
-+ 0x080c, 0x1511, 0x080c, 0x7055, 0x00d6, 0x6110, 0x2168, 0x080c,
-+ 0x9beb, 0x0168, 0x6837, 0x0103, 0x684b, 0x0006, 0x6847, 0x0000,
-+ 0x6850, 0xc0ec, 0x6852, 0x080c, 0x53c9, 0x080c, 0x9da2, 0x00de,
-+ 0x080c, 0x85c0, 0x080c, 0x7134, 0x0005, 0x080c, 0x7055, 0x080c,
-+ 0x85c0, 0x080c, 0x7134, 0x0005, 0x0002, 0x9172, 0x9170, 0x9170,
-+ 0x9170, 0x9170, 0x9170, 0x9170, 0x9170, 0x9170, 0x9170, 0x9170,
-+ 0x9184, 0x9184, 0x9184, 0x9184, 0x9170, 0x9193, 0x9170, 0x9184,
-+ 0x080c, 0x1511, 0x080c, 0x7055, 0x2001, 0xb6b8, 0x2004, 0x603e,
-+ 0x6003, 0x0002, 0x080c, 0x7134, 0x6010, 0xa088, 0x0013, 0x2104,
-+ 0xa085, 0x0400, 0x200a, 0x0005, 0x080c, 0x7055, 0x2001, 0xb6b6,
-+ 0x2004, 0x6016, 0x2001, 0xb6b8, 0x2004, 0x603e, 0x6003, 0x000f,
-+ 0x080c, 0x7134, 0x0005, 0x080c, 0x7055, 0x080c, 0x85c0, 0x080c,
-+ 0x7134, 0x0005, 0xa182, 0x0040, 0x0002, 0x91b0, 0x91b0, 0x91b0,
-+ 0x91b0, 0x91b0, 0x91b2, 0x9290, 0x92bf, 0x91b0, 0x91b0, 0x91b0,
-+ 0x91b0, 0x91b0, 0x91b0, 0x91b0, 0x91b0, 0x91b0, 0x91b0, 0x91b0,
-+ 0x080c, 0x1511, 0x00e6, 0x00d6, 0x603f, 0x0000, 0x2071, 0xba80,
-+ 0x7124, 0x610a, 0x2071, 0xba8c, 0x6110, 0x2168, 0x7614, 0xa6b4,
-+ 0x0fff, 0x86ff, 0x0904, 0x925a, 0xa68c, 0x0c00, 0x01e8, 0x00f6,
-+ 0x2c78, 0x080c, 0x52c6, 0x00fe, 0x0198, 0x684c, 0xd0ac, 0x0180,
-+ 0x6020, 0xd0dc, 0x1168, 0x6850, 0xd0bc, 0x1150, 0x7318, 0x6814,
-+ 0xa306, 0x1904, 0x926c, 0x731c, 0x6810, 0xa306, 0x1904, 0x926c,
-+ 0x7318, 0x6b62, 0x731c, 0x6b5e, 0xa68c, 0x00ff, 0xa186, 0x0002,
-+ 0x0518, 0xa186, 0x0028, 0x1128, 0x080c, 0x9dc7, 0x684b, 0x001c,
-+ 0x00e8, 0xd6dc, 0x01a0, 0x684b, 0x0015, 0x684c, 0xd0ac, 0x0170,
-+ 0x6914, 0x6a10, 0x2100, 0xa205, 0x0148, 0x7018, 0xa106, 0x1118,
-+ 0x701c, 0xa206, 0x0118, 0x6962, 0x6a5e, 0xc6dc, 0x0038, 0xd6d4,
-+ 0x0118, 0x684b, 0x0007, 0x0010, 0x684b, 0x0000, 0x6837, 0x0103,
-+ 0x6e46, 0xa01e, 0xd6c4, 0x01f0, 0xa686, 0x0100, 0x1140, 0x2001,
-+ 0xba99, 0x2004, 0xa005, 0x1118, 0xc6c4, 0x0804, 0x91c1, 0x7328,
-+ 0x732c, 0x6b56, 0x83ff, 0x0170, 0xa38a, 0x0009, 0x0210, 0x2019,
-+ 0x0008, 0x0036, 0x2308, 0x2019, 0xba98, 0xad90, 0x0019, 0x080c,
-+ 0x98a6, 0x003e, 0xd6cc, 0x0904, 0x927f, 0x7124, 0x695a, 0x81ff,
-+ 0x0904, 0x927f, 0xa192, 0x0021, 0x1260, 0x2071, 0xba98, 0x831c,
-+ 0x2300, 0xae18, 0xad90, 0x001d, 0x080c, 0x98a6, 0x080c, 0xa0c8,
-+ 0x04b0, 0x6838, 0xd0fc, 0x0120, 0x2009, 0x0020, 0x695a, 0x0c68,
-+ 0x00f6, 0x2d78, 0x080c, 0x984b, 0x00fe, 0x080c, 0xa0c8, 0x080c,
-+ 0x9896, 0x0438, 0x00f6, 0x2c78, 0x080c, 0x52c6, 0x00fe, 0x0188,
-+ 0x684c, 0xd0ac, 0x0170, 0x6020, 0xd0dc, 0x1158, 0x6850, 0xd0bc,
-+ 0x1140, 0x684c, 0xd0f4, 0x1128, 0x080c, 0x9ec6, 0x00de, 0x00ee,
-+ 0x00f0, 0x684b, 0x0000, 0x6837, 0x0103, 0x6e46, 0x684c, 0xd0ac,
-+ 0x0130, 0x6810, 0x6914, 0xa115, 0x0110, 0x080c, 0x941c, 0x080c,
-+ 0x53c9, 0x6218, 0x2268, 0x6a3c, 0x82ff, 0x0110, 0x8211, 0x6a3e,
-+ 0x080c, 0x9e94, 0x00de, 0x00ee, 0x1110, 0x080c, 0x85c0, 0x0005,
-+ 0x00f6, 0x6003, 0x0003, 0x2079, 0xba8c, 0x7c04, 0x7b00, 0x7e0c,
-+ 0x7d08, 0x6010, 0x2078, 0x784c, 0xd0ac, 0x0138, 0x6003, 0x0002,
-+ 0x00fe, 0x0005, 0x2130, 0x2228, 0x0058, 0x2400, 0x797c, 0xa10a,
-+ 0x2300, 0x7a80, 0xa213, 0x2600, 0xa102, 0x2500, 0xa203, 0x0e90,
-+ 0x7c12, 0x7b16, 0x7e0a, 0x7d0e, 0x00fe, 0x603f, 0x0000, 0x2c10,
-+ 0x080c, 0x1f7a, 0x080c, 0x6cb5, 0x080c, 0x71f1, 0x0005, 0x2001,
-+ 0xb6b8, 0x2004, 0x603e, 0x6003, 0x0004, 0x6110, 0x20e1, 0x0005,
-+ 0x3d18, 0x3e20, 0x2c10, 0x080c, 0x1856, 0x0005, 0xa182, 0x0040,
-+ 0x0002, 0x92e4, 0x92e4, 0x92e4, 0x92e4, 0x92e4, 0x92e6, 0x9379,
-+ 0x92e4, 0x92e4, 0x938f, 0x93f3, 0x92e4, 0x92e4, 0x92e4, 0x92e4,
-+ 0x9402, 0x92e4, 0x92e4, 0x92e4, 0x080c, 0x1511, 0x0076, 0x00f6,
-+ 0x00e6, 0x00d6, 0x2071, 0xba8c, 0x6110, 0x2178, 0x7614, 0xa6b4,
-+ 0x0fff, 0x7e46, 0x7f4c, 0xc7e5, 0x7f4e, 0x6218, 0x2268, 0x6a3c,
-+ 0x82ff, 0x0110, 0x8211, 0x6a3e, 0x86ff, 0x0904, 0x9374, 0xa694,
-+ 0xff00, 0xa284, 0x0c00, 0x0120, 0x7018, 0x7862, 0x701c, 0x785e,
-+ 0xa284, 0x0300, 0x0904, 0x9374, 0x080c, 0x15f4, 0x090c, 0x1511,
-+ 0x2d00, 0x784a, 0x7f4c, 0xc7cd, 0x7f4e, 0x6837, 0x0103, 0x7838,
-+ 0x683a, 0x783c, 0x683e, 0x7840, 0x6842, 0x6e46, 0xa68c, 0x0c00,
-+ 0x0120, 0x7318, 0x6b62, 0x731c, 0x6b5e, 0xa68c, 0x00ff, 0xa186,
-+ 0x0002, 0x0180, 0xa186, 0x0028, 0x1118, 0x684b, 0x001c, 0x0060,
-+ 0xd6dc, 0x0118, 0x684b, 0x0015, 0x0038, 0xd6d4, 0x0118, 0x684b,
-+ 0x0007, 0x0010, 0x684b, 0x0000, 0x6f4e, 0x7850, 0x6852, 0x7854,
-+ 0x6856, 0xa01e, 0xd6c4, 0x0198, 0x7328, 0x732c, 0x6b56, 0x83ff,
-+ 0x0170, 0xa38a, 0x0009, 0x0210, 0x2019, 0x0008, 0x0036, 0x2308,
-+ 0x2019, 0xba98, 0xad90, 0x0019, 0x080c, 0x98a6, 0x003e, 0xd6cc,
-+ 0x01d8, 0x7124, 0x695a, 0x81ff, 0x01b8, 0xa192, 0x0021, 0x1250,
-+ 0x2071, 0xba98, 0x831c, 0x2300, 0xae18, 0xad90, 0x001d, 0x080c,
-+ 0x98a6, 0x0050, 0x7838, 0xd0fc, 0x0120, 0x2009, 0x0020, 0x695a,
-+ 0x0c78, 0x2d78, 0x080c, 0x984b, 0x00de, 0x00ee, 0x00fe, 0x007e,
-+ 0x0005, 0x00f6, 0x6003, 0x0003, 0x2079, 0xba8c, 0x7c04, 0x7b00,
-+ 0x7e0c, 0x7d08, 0x6010, 0x2078, 0x7c12, 0x7b16, 0x7e0a, 0x7d0e,
-+ 0x00fe, 0x2c10, 0x080c, 0x1f7a, 0x080c, 0x7d0a, 0x0005, 0x00d6,
-+ 0x00f6, 0x2c78, 0x080c, 0x52c6, 0x00fe, 0x0120, 0x2001, 0xb6b8,
-+ 0x2004, 0x603e, 0x6003, 0x0002, 0x080c, 0x70e7, 0x080c, 0x71f1,
-+ 0x6110, 0x2168, 0x694c, 0xd1e4, 0x0904, 0x93f1, 0xd1cc, 0x0540,
-+ 0x6948, 0x6838, 0xd0fc, 0x01e8, 0x0016, 0x684c, 0x0006, 0x6850,
-+ 0x0006, 0xad90, 0x000d, 0xa198, 0x000d, 0x2009, 0x0020, 0x0156,
-+ 0x21a8, 0x2304, 0x2012, 0x8318, 0x8210, 0x1f04, 0x93b9, 0x015e,
-+ 0x000e, 0x6852, 0x000e, 0x684e, 0x001e, 0x2168, 0x080c, 0x161b,
-+ 0x0418, 0x0016, 0x080c, 0x161b, 0x00de, 0x080c, 0x9896, 0x00e0,
-+ 0x6837, 0x0103, 0x6944, 0xa184, 0x00ff, 0xa0b6, 0x0002, 0x0180,
-+ 0xa086, 0x0028, 0x1118, 0x684b, 0x001c, 0x0060, 0xd1dc, 0x0118,
-+ 0x684b, 0x0015, 0x0038, 0xd1d4, 0x0118, 0x684b, 0x0007, 0x0010,
-+ 0x684b, 0x0000, 0x080c, 0x53c9, 0x080c, 0x9e94, 0x1110, 0x080c,
-+ 0x85c0, 0x00de, 0x0005, 0x2019, 0x0001, 0x080c, 0x7f8e, 0x6003,
-+ 0x0002, 0x2001, 0xb6b8, 0x2004, 0x603e, 0x080c, 0x70e7, 0x080c,
-+ 0x71f1, 0x0005, 0x080c, 0x70e7, 0x080c, 0x2c60, 0x00d6, 0x6110,
-+ 0x2168, 0x080c, 0x9beb, 0x0150, 0x6837, 0x0103, 0x684b, 0x0029,
-+ 0x6847, 0x0000, 0x080c, 0x53c9, 0x080c, 0x9da2, 0x00de, 0x080c,
-+ 0x85c0, 0x080c, 0x71f1, 0x0005, 0x684b, 0x0015, 0xd1fc, 0x0138,
-+ 0x684b, 0x0007, 0x8002, 0x8000, 0x810a, 0xa189, 0x0000, 0x6962,
-+ 0x685e, 0x0005, 0xa182, 0x0040, 0x0002, 0x9440, 0x9440, 0x9440,
-+ 0x9440, 0x9440, 0x9442, 0x9440, 0x94fd, 0x9509, 0x9440, 0x9440,
-+ 0x9440, 0x9440, 0x9440, 0x9440, 0x9440, 0x9440, 0x9440, 0x9440,
-+ 0x080c, 0x1511, 0x0076, 0x00f6, 0x00e6, 0x00d6, 0x2071, 0xba8c,
-+ 0x6110, 0x2178, 0x7614, 0xa6b4, 0x0fff, 0x00f6, 0x2c78, 0x080c,
-+ 0x52c6, 0x00fe, 0x0150, 0xa684, 0x00ff, 0x1138, 0x6020, 0xd0f4,
-+ 0x0120, 0x080c, 0x9ec6, 0x0804, 0x94f8, 0x7e46, 0x7f4c, 0xc7e5,
-+ 0x7f4e, 0x6218, 0x2268, 0x6a3c, 0x82ff, 0x0110, 0x8211, 0x6a3e,
-+ 0x86ff, 0x0904, 0x94ee, 0xa694, 0xff00, 0xa284, 0x0c00, 0x0120,
-+ 0x7018, 0x7862, 0x701c, 0x785e, 0xa284, 0x0300, 0x0904, 0x94ec,
-+ 0xa686, 0x0100, 0x1140, 0x2001, 0xba99, 0x2004, 0xa005, 0x1118,
-+ 0xc6c4, 0x7e46, 0x0c28, 0x080c, 0x15f4, 0x090c, 0x1511, 0x2d00,
-+ 0x784a, 0x7f4c, 0xa7bd, 0x0200, 0x7f4e, 0x6837, 0x0103, 0x7838,
-+ 0x683a, 0x783c, 0x683e, 0x7840, 0x6842, 0x6e46, 0xa68c, 0x0c00,
-+ 0x0120, 0x7318, 0x6b62, 0x731c, 0x6b5e, 0xa68c, 0x00ff, 0xa186,
-+ 0x0002, 0x0180, 0xa186, 0x0028, 0x1118, 0x684b, 0x001c, 0x0060,
-+ 0xd6dc, 0x0118, 0x684b, 0x0015, 0x0038, 0xd6d4, 0x0118, 0x684b,
-+ 0x0007, 0x0010, 0x684b, 0x0000, 0x6f4e, 0x7850, 0x6852, 0x7854,
-+ 0x6856, 0xa01e, 0xd6c4, 0x0198, 0x7328, 0x732c, 0x6b56, 0x83ff,
-+ 0x0170, 0xa38a, 0x0009, 0x0210, 0x2019, 0x0008, 0x0036, 0x2308,
-+ 0x2019, 0xba98, 0xad90, 0x0019, 0x080c, 0x98a6, 0x003e, 0xd6cc,
-+ 0x01d8, 0x7124, 0x695a, 0x81ff, 0x01b8, 0xa192, 0x0021, 0x1250,
-+ 0x2071, 0xba98, 0x831c, 0x2300, 0xae18, 0xad90, 0x001d, 0x080c,
-+ 0x98a6, 0x0050, 0x7838, 0xd0fc, 0x0120, 0x2009, 0x0020, 0x695a,
-+ 0x0c78, 0x2d78, 0x080c, 0x984b, 0xd6dc, 0x1110, 0xa006, 0x0030,
-+ 0x2001, 0x0001, 0x2071, 0xba8c, 0x7218, 0x731c, 0x080c, 0x18a9,
-+ 0x00de, 0x00ee, 0x00fe, 0x007e, 0x0005, 0x2001, 0xb6b8, 0x2004,
-+ 0x603e, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10, 0x080c, 0x1856,
-+ 0x0005, 0x2001, 0xb6b8, 0x2004, 0x603e, 0x00d6, 0x6003, 0x0002,
-+ 0x6110, 0x2168, 0x694c, 0xd1e4, 0x0904, 0x9614, 0x603f, 0x0000,
-+ 0x00f6, 0x2c78, 0x080c, 0x52c6, 0x00fe, 0x0560, 0x6814, 0x6910,
-+ 0xa115, 0x0540, 0x6a60, 0xa206, 0x1118, 0x685c, 0xa106, 0x0510,
-+ 0x684c, 0xc0e4, 0x684e, 0x6847, 0x0000, 0x6863, 0x0000, 0x685f,
-+ 0x0000, 0x6020, 0xd0f4, 0x1158, 0x697c, 0x6810, 0xa102, 0x603a,
-+ 0x6980, 0x6814, 0xa103, 0x6036, 0x6020, 0xc0f5, 0x6022, 0x00d6,
-+ 0x6018, 0x2068, 0x683c, 0x8000, 0x683e, 0x00de, 0x080c, 0x9ec6,
-+ 0x0804, 0x9614, 0x694c, 0xd1cc, 0x0904, 0x95e4, 0x6948, 0x6838,
-+ 0xd0fc, 0x0904, 0x95a7, 0x0016, 0x684c, 0x0006, 0x6850, 0x0006,
-+ 0x00f6, 0x2178, 0x7944, 0xa184, 0x00ff, 0xa0b6, 0x0002, 0x01e0,
-+ 0xa086, 0x0028, 0x1128, 0x684b, 0x001c, 0x784b, 0x001c, 0x00e8,
-+ 0xd1dc, 0x0158, 0x684b, 0x0015, 0x784b, 0x0015, 0x080c, 0xa050,
-+ 0x0118, 0x7944, 0xc1dc, 0x7946, 0x0080, 0xd1d4, 0x0128, 0x684b,
-+ 0x0007, 0x784b, 0x0007, 0x0048, 0x684c, 0xd0ac, 0x0130, 0x6810,
-+ 0x6914, 0xa115, 0x0110, 0x080c, 0x941c, 0x6848, 0x784a, 0x6860,
-+ 0x7862, 0x685c, 0x785e, 0xad90, 0x000d, 0xaf98, 0x000d, 0x2009,
-+ 0x0020, 0x0156, 0x21a8, 0x2304, 0x2012, 0x8318, 0x8210, 0x1f04,
-+ 0x9593, 0x015e, 0x00fe, 0x000e, 0x6852, 0x000e, 0x684e, 0x080c,
-+ 0xa0c8, 0x001e, 0x2168, 0x080c, 0x161b, 0x0804, 0x960f, 0x0016,
-+ 0x00f6, 0x2178, 0x7944, 0xa184, 0x00ff, 0xa0b6, 0x0002, 0x01e0,
-+ 0xa086, 0x0028, 0x1128, 0x684b, 0x001c, 0x784b, 0x001c, 0x00e8,
-+ 0xd1dc, 0x0158, 0x684b, 0x0015, 0x784b, 0x0015, 0x080c, 0xa050,
-+ 0x0118, 0x7944, 0xc1dc, 0x7946, 0x0080, 0xd1d4, 0x0128, 0x684b,
-+ 0x0007, 0x784b, 0x0007, 0x0048, 0x684c, 0xd0ac, 0x0130, 0x6810,
-+ 0x6914, 0xa115, 0x0110, 0x080c, 0x941c, 0x6860, 0x7862, 0x685c,
-+ 0x785e, 0x684c, 0x784e, 0x00fe, 0x080c, 0x161b, 0x00de, 0x080c,
-+ 0xa0c8, 0x080c, 0x9896, 0x0458, 0x6837, 0x0103, 0x6944, 0xa184,
-+ 0x00ff, 0xa0b6, 0x0002, 0x01b0, 0xa086, 0x0028, 0x1118, 0x684b,
-+ 0x001c, 0x00d8, 0xd1dc, 0x0148, 0x684b, 0x0015, 0x080c, 0xa050,
-+ 0x0118, 0x6944, 0xc1dc, 0x6946, 0x0080, 0xd1d4, 0x0118, 0x684b,
-+ 0x0007, 0x0058, 0x684b, 0x0000, 0x684c, 0xd0ac, 0x0130, 0x6810,
-+ 0x6914, 0xa115, 0x0110, 0x080c, 0x941c, 0x080c, 0x53c9, 0x080c,
-+ 0x9e94, 0x1110, 0x080c, 0x85c0, 0x00de, 0x0005, 0x080c, 0x7055,
-+ 0x0010, 0x080c, 0x70e7, 0x080c, 0x9beb, 0x01c0, 0x00d6, 0x6110,
-+ 0x2168, 0x6837, 0x0103, 0x2009, 0xb40c, 0x210c, 0xd18c, 0x11c0,
-+ 0xd184, 0x1198, 0x6108, 0x694a, 0xa18e, 0x0029, 0x1110, 0x080c,
-+ 0xb303, 0x6847, 0x0000, 0x080c, 0x53c9, 0x00de, 0x080c, 0x85c0,
-+ 0x080c, 0x7134, 0x080c, 0x71f1, 0x0005, 0x684b, 0x0004, 0x0c88,
-+ 0x684b, 0x0004, 0x0c70, 0xa182, 0x0040, 0x0002, 0x9659, 0x9659,
-+ 0x9659, 0x9659, 0x9659, 0x965b, 0x9659, 0x965e, 0x9659, 0x9659,
-+ 0x9659, 0x9659, 0x9659, 0x9659, 0x9659, 0x9659, 0x9659, 0x9659,
-+ 0x9659, 0x080c, 0x1511, 0x080c, 0x85c0, 0x0005, 0x0006, 0x0026,
-+ 0xa016, 0x080c, 0x1856, 0x002e, 0x000e, 0x0005, 0xa182, 0x0085,
-+ 0x0002, 0x9672, 0x9670, 0x9670, 0x967e, 0x9670, 0x9670, 0x9670,
-+ 0x080c, 0x1511, 0x6003, 0x0001, 0x6106, 0x080c, 0x6c52, 0x0126,
-+ 0x2091, 0x8000, 0x080c, 0x7134, 0x012e, 0x0005, 0x0026, 0x0056,
-+ 0x00d6, 0x00e6, 0x2071, 0xba80, 0x7224, 0x6212, 0x7220, 0x080c,
-+ 0x9bdb, 0x01a0, 0x2268, 0x6800, 0xa086, 0x0000, 0x0178, 0x6018,
-+ 0x6d18, 0xa52e, 0x1158, 0x00c6, 0x2d60, 0x080c, 0x98b6, 0x00ce,
-+ 0x0128, 0x6803, 0x0002, 0x6007, 0x0086, 0x0010, 0x6007, 0x0087,
-+ 0x6003, 0x0001, 0x080c, 0x6c52, 0x080c, 0x7134, 0x00f6, 0x2278,
-+ 0x080c, 0x52c6, 0x00fe, 0x0150, 0x6820, 0xd0ec, 0x0138, 0x00c6,
-+ 0x2260, 0x603f, 0x0000, 0x080c, 0x9ec6, 0x00ce, 0x00ee, 0x00de,
-+ 0x005e, 0x002e, 0x0005, 0xa186, 0x0013, 0x1160, 0x6004, 0xa08a,
-+ 0x0085, 0x0a0c, 0x1511, 0xa08a, 0x008c, 0x1a0c, 0x1511, 0xa082,
-+ 0x0085, 0x0072, 0xa186, 0x0027, 0x0120, 0xa186, 0x0014, 0x190c,
-+ 0x1511, 0x080c, 0x7055, 0x080c, 0x9dae, 0x080c, 0x7134, 0x0005,
-+ 0x96df, 0x96e1, 0x96e1, 0x96df, 0x96df, 0x96df, 0x96df, 0x080c,
-+ 0x1511, 0x080c, 0x7055, 0x080c, 0x9dae, 0x080c, 0x7134, 0x0005,
-+ 0xa186, 0x0013, 0x1128, 0x6004, 0xa082, 0x0085, 0x2008, 0x04a8,
-+ 0xa186, 0x0027, 0x11e8, 0x080c, 0x7055, 0x080c, 0x2c60, 0x00d6,
-+ 0x6010, 0x2068, 0x080c, 0x9beb, 0x0150, 0x6837, 0x0103, 0x6847,
-+ 0x0000, 0x684b, 0x0029, 0x080c, 0x53c9, 0x080c, 0x9da2, 0x00de,
-+ 0x080c, 0x85c0, 0x080c, 0x7134, 0x0005, 0x080c, 0x8606, 0x0ce0,
-+ 0xa186, 0x0014, 0x1dd0, 0x080c, 0x7055, 0x00d6, 0x6010, 0x2068,
-+ 0x080c, 0x9beb, 0x0d60, 0x6837, 0x0103, 0x6847, 0x0000, 0x684b,
-+ 0x0006, 0x6850, 0xc0ec, 0x6852, 0x08f0, 0x0002, 0x972f, 0x972d,
-+ 0x972d, 0x972d, 0x972d, 0x972d, 0x9747, 0x080c, 0x1511, 0x080c,
-+ 0x7055, 0x6030, 0xa08c, 0xff00, 0x810f, 0xa186, 0x0039, 0x0118,
-+ 0xa186, 0x0035, 0x1118, 0x2001, 0xb6b6, 0x0010, 0x2001, 0xb6b7,
-+ 0x2004, 0x6016, 0x6003, 0x000c, 0x080c, 0x7134, 0x0005, 0x080c,
-+ 0x7055, 0x6030, 0xa08c, 0xff00, 0x810f, 0xa186, 0x0039, 0x0118,
-+ 0xa186, 0x0035, 0x1118, 0x2001, 0xb6b6, 0x0010, 0x2001, 0xb6b7,
-+ 0x2004, 0x6016, 0x6003, 0x000e, 0x080c, 0x7134, 0x0005, 0xa182,
-+ 0x008c, 0x1220, 0xa182, 0x0085, 0x0208, 0x001a, 0x080c, 0x8606,
-+ 0x0005, 0x9770, 0x9770, 0x9770, 0x9770, 0x9772, 0x97cb, 0x9770,
-+ 0x080c, 0x1511, 0x00d6, 0x00f6, 0x2c78, 0x080c, 0x52c6, 0x00fe,
-+ 0x0168, 0x6030, 0xa08c, 0xff00, 0x810f, 0xa186, 0x0039, 0x0118,
-+ 0xa186, 0x0035, 0x1118, 0x00de, 0x0804, 0x97de, 0x080c, 0x9beb,
-+ 0x1118, 0x080c, 0x9da2, 0x00f0, 0x6010, 0x2068, 0x684c, 0xd0e4,
-+ 0x1110, 0x080c, 0x9da2, 0x6837, 0x0103, 0x6850, 0xd0b4, 0x0128,
-+ 0x684b, 0x0006, 0xc0ec, 0x6852, 0x0048, 0xd0bc, 0x0118, 0x684b,
-+ 0x0002, 0x0020, 0x684b, 0x0005, 0x080c, 0x9e63, 0x6847, 0x0000,
-+ 0x080c, 0x53c9, 0x2c68, 0x080c, 0x856a, 0x01c0, 0x6003, 0x0001,
-+ 0x6007, 0x001e, 0x600b, 0xffff, 0x2009, 0xba8e, 0x210c, 0x6136,
-+ 0x2009, 0xba8f, 0x210c, 0x613a, 0x6918, 0x611a, 0x080c, 0x9fb8,
-+ 0x6950, 0x6152, 0x601f, 0x0001, 0x080c, 0x6c52, 0x2d60, 0x080c,
-+ 0x85c0, 0x00de, 0x0005, 0x00f6, 0x2c78, 0x080c, 0x52c6, 0x00fe,
-+ 0x0598, 0x6030, 0xa08c, 0xff00, 0x810f, 0xa186, 0x0035, 0x0130,
-+ 0xa186, 0x001e, 0x0118, 0xa186, 0x0039, 0x1530, 0x00d6, 0x2c68,
-+ 0x080c, 0xa09b, 0x1904, 0x9823, 0x080c, 0x856a, 0x01d8, 0x6106,
-+ 0x6003, 0x0001, 0x601f, 0x0001, 0x6918, 0x611a, 0x6928, 0x612a,
-+ 0x692c, 0x612e, 0x6930, 0xa18c, 0x00ff, 0x6132, 0x6934, 0x6136,
-+ 0x6938, 0x613a, 0x6950, 0x6152, 0x080c, 0x9fb8, 0x080c, 0x6c52,
-+ 0x080c, 0x7134, 0x2d60, 0x00f8, 0x00d6, 0x6010, 0x2068, 0x080c,
-+ 0x9beb, 0x01c8, 0x6837, 0x0103, 0x6850, 0xd0b4, 0x0128, 0xc0ec,
-+ 0x6852, 0x684b, 0x0006, 0x0048, 0xd0bc, 0x0118, 0x684b, 0x0002,
-+ 0x0020, 0x684b, 0x0005, 0x080c, 0x9e63, 0x6847, 0x0000, 0x080c,
-+ 0x53c9, 0x080c, 0x9da2, 0x00de, 0x080c, 0x85c0, 0x0005, 0x0016,
-+ 0x00d6, 0x6010, 0x2068, 0x080c, 0x9beb, 0x0140, 0x6837, 0x0103,
-+ 0x684b, 0x0028, 0x6847, 0x0000, 0x080c, 0x53c9, 0x00de, 0x001e,
-+ 0xa186, 0x0013, 0x0148, 0xa186, 0x0014, 0x0130, 0xa186, 0x0027,
-+ 0x0118, 0x080c, 0x8606, 0x0030, 0x080c, 0x7055, 0x080c, 0x9dae,
-+ 0x080c, 0x7134, 0x0005, 0x0056, 0x0066, 0x00d6, 0x00f6, 0x2029,
-+ 0x0001, 0xa182, 0x0101, 0x1208, 0x0010, 0x2009, 0x0100, 0x2130,
-+ 0x2069, 0xba98, 0x831c, 0x2300, 0xad18, 0x2009, 0x0020, 0xaf90,
-+ 0x001d, 0x080c, 0x98a6, 0xa6b2, 0x0020, 0x7804, 0xa06d, 0x0110,
-+ 0x080c, 0x161b, 0x080c, 0x15f4, 0x0500, 0x8528, 0x6837, 0x0110,
-+ 0x683b, 0x0000, 0x2d20, 0x7c06, 0xa68a, 0x003d, 0x1228, 0x2608,
-+ 0xad90, 0x000f, 0x0459, 0x0088, 0xa6b2, 0x003c, 0x2009, 0x003c,
-+ 0x2d78, 0xad90, 0x000f, 0x0411, 0x0c28, 0x00fe, 0x852f, 0xa5ad,
-+ 0x0003, 0x7d36, 0xa5ac, 0x0000, 0x0028, 0x00fe, 0x852f, 0xa5ad,
-+ 0x0003, 0x7d36, 0x00de, 0x006e, 0x005e, 0x0005, 0x00f6, 0x8dff,
-+ 0x0158, 0x6804, 0xa07d, 0x0130, 0x6807, 0x0000, 0x080c, 0x53c9,
-+ 0x2f68, 0x0cb8, 0x080c, 0x53c9, 0x00fe, 0x0005, 0x0156, 0xa184,
-+ 0x0001, 0x0108, 0x8108, 0x810c, 0x21a8, 0x2304, 0x8007, 0x2012,
-+ 0x8318, 0x8210, 0x1f04, 0x98ad, 0x015e, 0x0005, 0x0066, 0x0126,
-+ 0x2091, 0x8000, 0x2031, 0x0001, 0x601c, 0xa084, 0x000f, 0x0083,
-+ 0x012e, 0x006e, 0x0005, 0x0126, 0x2091, 0x8000, 0x0066, 0x2031,
-+ 0x0000, 0x601c, 0xa084, 0x000f, 0x001b, 0x006e, 0x012e, 0x0005,
-+ 0x98ed, 0x98ed, 0x98e8, 0x990f, 0x98db, 0x98e8, 0x990f, 0x98e8,
-+ 0x98e8, 0x98db, 0x98e8, 0x080c, 0x1511, 0x0036, 0x2019, 0x0010,
-+ 0x080c, 0xac63, 0x601f, 0x0006, 0x6003, 0x0007, 0x003e, 0x0005,
-+ 0xa006, 0x0005, 0xa085, 0x0001, 0x0005, 0x00d6, 0x86ff, 0x11d8,
-+ 0x6010, 0x2068, 0x080c, 0x9beb, 0x01c0, 0x6834, 0xa086, 0x0139,
-+ 0x1128, 0x684b, 0x0005, 0x6853, 0x0000, 0x0028, 0xa00e, 0x2001,
-+ 0x0005, 0x080c, 0x549c, 0x080c, 0x9e63, 0x080c, 0x53c9, 0x080c,
-+ 0x85c0, 0xa085, 0x0001, 0x00de, 0x0005, 0xa006, 0x0ce0, 0x6000,
-+ 0xa08a, 0x0010, 0x1a0c, 0x1511, 0x000b, 0x0005, 0x9926, 0x9947,
-+ 0x9928, 0x9966, 0x9944, 0x9926, 0x98e8, 0x98ed, 0x98ed, 0x98e8,
-+ 0x98e8, 0x98e8, 0x98e8, 0x98e8, 0x98e8, 0x98e8, 0x080c, 0x1511,
-+ 0x86ff, 0x11b8, 0x601c, 0xa086, 0x0006, 0x0198, 0x00d6, 0x6010,
-+ 0x2068, 0x080c, 0x9beb, 0x0110, 0x080c, 0x9e63, 0x00de, 0x6007,
-+ 0x0085, 0x6003, 0x000b, 0x601f, 0x0002, 0x080c, 0x6c52, 0x080c,
-+ 0x7134, 0xa085, 0x0001, 0x0005, 0x080c, 0x1944, 0x0c08, 0x00e6,
-+ 0x2071, 0xb6e0, 0x7024, 0xac06, 0x1110, 0x080c, 0x7f03, 0x601c,
-+ 0xa084, 0x000f, 0xa086, 0x0006, 0x1150, 0x0086, 0x0096, 0x2049,
-+ 0x0001, 0x2c40, 0x080c, 0x80da, 0x009e, 0x008e, 0x0010, 0x080c,
-+ 0x7e02, 0x00ee, 0x1928, 0x080c, 0x98e8, 0x0005, 0x0036, 0x00e6,
-+ 0x2071, 0xb6e0, 0x703c, 0xac06, 0x1140, 0x2019, 0x0000, 0x080c,
-+ 0x7f8e, 0x00ee, 0x003e, 0x0804, 0x9928, 0x080c, 0x8200, 0x00ee,
-+ 0x003e, 0x1904, 0x9928, 0x080c, 0x98e8, 0x0005, 0x00c6, 0x601c,
-+ 0xa084, 0x000f, 0x0013, 0x00ce, 0x0005, 0x9997, 0x9a04, 0x9b4a,
-+ 0x99a2, 0x9dae, 0x9997, 0xac55, 0x85c0, 0x9a04, 0x9990, 0x9bb5,
-+ 0x080c, 0x1511, 0x080c, 0x9de9, 0x1110, 0x080c, 0x8bbc, 0x0005,
-+ 0x080c, 0x7055, 0x080c, 0x7134, 0x080c, 0x85c0, 0x0005, 0x6017,
-+ 0x0001, 0x0005, 0x080c, 0x9beb, 0x0120, 0x6010, 0xa080, 0x0019,
-+ 0x2c02, 0x6000, 0xa08a, 0x0010, 0x1a0c, 0x1511, 0x000b, 0x0005,
-+ 0x99c0, 0x99c2, 0x99e2, 0x99f4, 0x9a01, 0x99c0, 0x9997, 0x9997,
-+ 0x9997, 0x99f4, 0x99f4, 0x99c0, 0x99c0, 0x99c0, 0x99c0, 0x99fe,
-+ 0x080c, 0x1511, 0x00e6, 0x6010, 0x2070, 0x7050, 0xc0b5, 0x7052,
-+ 0x2071, 0xb6e0, 0x7024, 0xac06, 0x0190, 0x080c, 0x7e02, 0x6007,
-+ 0x0085, 0x6003, 0x000b, 0x601f, 0x0002, 0x2001, 0xb6b7, 0x2004,
-+ 0x6016, 0x080c, 0x6c52, 0x080c, 0x7134, 0x00ee, 0x0005, 0x6017,
-+ 0x0001, 0x0cd8, 0x00d6, 0x6010, 0x2068, 0x6850, 0xc0b5, 0x6852,
-+ 0x00de, 0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0002, 0x080c,
-+ 0x6c52, 0x080c, 0x7134, 0x0005, 0x00d6, 0x6017, 0x0001, 0x6010,
-+ 0x2068, 0x6850, 0xc0b5, 0x6852, 0x00de, 0x0005, 0x080c, 0x85c0,
-+ 0x0005, 0x080c, 0x1944, 0x08f0, 0x6000, 0xa08a, 0x0010, 0x1a0c,
-+ 0x1511, 0x000b, 0x0005, 0x9a1b, 0x999f, 0x9a1d, 0x9a1b, 0x9a1d,
-+ 0x9a1d, 0x9998, 0x9a1b, 0x9992, 0x9992, 0x9a1b, 0x9a1b, 0x9a1b,
-+ 0x9a1b, 0x9a1b, 0x9a1b, 0x080c, 0x1511, 0x00d6, 0x6018, 0x2068,
-+ 0x6804, 0xa084, 0x00ff, 0x00de, 0xa08a, 0x000c, 0x1a0c, 0x1511,
-+ 0x000b, 0x0005, 0x9a36, 0x9af0, 0x9a38, 0x9a72, 0x9a38, 0x9a72,
-+ 0x9a38, 0x9a42, 0x9a36, 0x9a72, 0x9a36, 0x9a5e, 0x080c, 0x1511,
-+ 0x6004, 0xa08e, 0x0016, 0x0588, 0xa08e, 0x0004, 0x0570, 0xa08e,
-+ 0x0002, 0x0558, 0x6004, 0x080c, 0x9de9, 0x0904, 0x9b09, 0xa08e,
-+ 0x0021, 0x0904, 0x9b0d, 0xa08e, 0x0022, 0x0904, 0x9b09, 0xa08e,
-+ 0x003d, 0x0904, 0x9b0d, 0xa08e, 0x0039, 0x0904, 0x9b11, 0xa08e,
-+ 0x0035, 0x0904, 0x9b11, 0xa08e, 0x001e, 0x0188, 0xa08e, 0x0001,
-+ 0x1150, 0x00d6, 0x6018, 0x2068, 0x6804, 0xa084, 0x00ff, 0x00de,
-+ 0xa086, 0x0006, 0x0110, 0x080c, 0x2c60, 0x080c, 0x8bbc, 0x080c,
-+ 0x9dae, 0x0005, 0x00c6, 0x00d6, 0x6104, 0xa186, 0x0016, 0x0904,
-+ 0x9ae1, 0xa186, 0x0002, 0x15d8, 0x2001, 0xb435, 0x2004, 0xd08c,
-+ 0x1198, 0x080c, 0x5a90, 0x1180, 0x2001, 0xb69f, 0x2003, 0x0001,
-+ 0x2001, 0xb400, 0x2003, 0x0001, 0xa085, 0x0001, 0x080c, 0x5ad4,
-+ 0x080c, 0x59c8, 0x0804, 0x9b33, 0x6018, 0x2068, 0x2001, 0xb435,
-+ 0x2004, 0xd0ac, 0x1904, 0x9b33, 0x68a0, 0xd0bc, 0x1904, 0x9b33,
-+ 0x6840, 0xa084, 0x00ff, 0xa005, 0x0190, 0x8001, 0x6842, 0x6013,
-+ 0x0000, 0x601f, 0x0007, 0x6017, 0x0398, 0x603f, 0x0000, 0x080c,
-+ 0x856a, 0x0128, 0x2d00, 0x601a, 0x601f, 0x0001, 0x0450, 0x00de,
-+ 0x00ce, 0x6004, 0xa08e, 0x0002, 0x11a8, 0x6018, 0xa080, 0x0028,
-+ 0x2004, 0xa086, 0x007e, 0x1170, 0x2009, 0xb435, 0x2104, 0xc085,
-+ 0x200a, 0x00e6, 0x2071, 0xb400, 0x080c, 0x4b80, 0x00ee, 0x080c,
-+ 0x8bbc, 0x0020, 0x080c, 0x8bbc, 0x080c, 0x2c60, 0x00e6, 0x0126,
-+ 0x2091, 0x8000, 0x080c, 0x2c86, 0x012e, 0x00ee, 0x080c, 0x9dae,
-+ 0x0005, 0x2001, 0x0002, 0x080c, 0x4ebe, 0x6003, 0x0001, 0x6007,
-+ 0x0002, 0x080c, 0x6c98, 0x080c, 0x7134, 0x00de, 0x00ce, 0x0c80,
-+ 0x00c6, 0x00d6, 0x6104, 0xa186, 0x0016, 0x0d58, 0x6018, 0x2068,
-+ 0x6840, 0xa084, 0x00ff, 0xa005, 0x0904, 0x9ab7, 0x8001, 0x6842,
-+ 0x6003, 0x0001, 0x080c, 0x6c98, 0x080c, 0x7134, 0x00de, 0x00ce,
-+ 0x08b8, 0x080c, 0x8bbc, 0x0804, 0x9a6f, 0x080c, 0x8bea, 0x0804,
-+ 0x9a6f, 0x00d6, 0x2c68, 0x6104, 0x080c, 0xa09b, 0x00de, 0x0118,
-+ 0x080c, 0x85c0, 0x00b8, 0x6004, 0x8007, 0x6130, 0xa18c, 0x00ff,
-+ 0xa105, 0x6032, 0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0002,
-+ 0x6038, 0x600a, 0x2001, 0xb6b7, 0x2004, 0x6016, 0x080c, 0x6c52,
-+ 0x080c, 0x7134, 0x0005, 0x00de, 0x00ce, 0x080c, 0x8bbc, 0x080c,
-+ 0x2c60, 0x00e6, 0x0126, 0x2091, 0x8000, 0x080c, 0x2c86, 0x6013,
-+ 0x0000, 0x601f, 0x0007, 0x6017, 0x0398, 0x603f, 0x0000, 0x012e,
-+ 0x00ee, 0x0005, 0x6000, 0xa08a, 0x0010, 0x1a0c, 0x1511, 0x000b,
-+ 0x0005, 0x9b61, 0x9b61, 0x9b61, 0x9b61, 0x9b61, 0x9b61, 0x9b61,
-+ 0x9b61, 0x9b61, 0x9997, 0x9b61, 0x999f, 0x9b63, 0x999f, 0x9b70,
-+ 0x9b61, 0x080c, 0x1511, 0x6004, 0xa086, 0x008b, 0x0148, 0x6007,
-+ 0x008b, 0x6003, 0x000d, 0x080c, 0x6c52, 0x080c, 0x7134, 0x0005,
-+ 0x080c, 0x9da2, 0x080c, 0x9beb, 0x0580, 0x080c, 0x2c60, 0x00d6,
-+ 0x080c, 0x9beb, 0x0168, 0x6010, 0x2068, 0x6837, 0x0103, 0x684b,
-+ 0x0006, 0x6847, 0x0000, 0x6850, 0xc0ed, 0x6852, 0x080c, 0x53c9,
-+ 0x2c68, 0x080c, 0x856a, 0x0150, 0x6818, 0x601a, 0x080c, 0x9fb8,
-+ 0x00c6, 0x2d60, 0x080c, 0x9dae, 0x00ce, 0x0008, 0x2d60, 0x00de,
-+ 0x6013, 0x0000, 0x601f, 0x0001, 0x6007, 0x0001, 0x6003, 0x0001,
-+ 0x080c, 0x6c98, 0x080c, 0x7134, 0x0078, 0x6030, 0xa08c, 0xff00,
-+ 0x810f, 0xa186, 0x0039, 0x0118, 0xa186, 0x0035, 0x1118, 0x080c,
-+ 0x2c60, 0x08b0, 0x080c, 0x9dae, 0x0005, 0x6000, 0xa08a, 0x0010,
-+ 0x1a0c, 0x1511, 0x000b, 0x0005, 0x9bcc, 0x9bcc, 0x9bcc, 0x9bce,
-+ 0x9bce, 0x9bcc, 0x9bcc, 0x9bcc, 0x9bcc, 0x9bcc, 0x9bcc, 0x9bcc,
-+ 0x9bcc, 0x9bcc, 0x9bcc, 0x9bcc, 0x080c, 0x1511, 0x080c, 0x8200,
-+ 0x190c, 0x1511, 0x6110, 0x2168, 0x684b, 0x0006, 0x080c, 0x53c9,
-+ 0x080c, 0x85c0, 0x0005, 0xa284, 0x0007, 0x1158, 0xa282, 0xbc00,
-+ 0x0240, 0x2001, 0xb417, 0x2004, 0xa202, 0x1218, 0xa085, 0x0001,
-+ 0x0005, 0xa006, 0x0ce8, 0x0026, 0x6210, 0xa294, 0xf000, 0x002e,
-+ 0x0005, 0x00e6, 0x00c6, 0x0036, 0x0006, 0x0126, 0x2091, 0x8000,
-+ 0x2061, 0xbc00, 0x2071, 0xb400, 0x7348, 0x7068, 0xa302, 0x12a8,
-+ 0x601c, 0xa206, 0x1160, 0x080c, 0x9f43, 0x0148, 0x080c, 0x9de9,
-+ 0x1110, 0x080c, 0x8bbc, 0x00c6, 0x080c, 0x85c0, 0x00ce, 0xace0,
-+ 0x0018, 0x705c, 0xac02, 0x1208, 0x0c38, 0x012e, 0x000e, 0x003e,
-+ 0x00ce, 0x00ee, 0x0005, 0x00e6, 0x00c6, 0x0016, 0xa188, 0xb535,
-+ 0x210c, 0x81ff, 0x0128, 0x2061, 0xb7f4, 0x611a, 0x080c, 0x2c60,
-+ 0xa006, 0x0010, 0xa085, 0x0001, 0x001e, 0x00ce, 0x00ee, 0x0005,
-+ 0x00c6, 0x0056, 0x0126, 0x2091, 0x8000, 0x00c6, 0x080c, 0x856a,
-+ 0x005e, 0x0180, 0x6612, 0x651a, 0x080c, 0x9fb8, 0x601f, 0x0003,
-+ 0x2009, 0x004b, 0x080c, 0x85ef, 0xa085, 0x0001, 0x012e, 0x005e,
-+ 0x00ce, 0x0005, 0xa006, 0x0cd0, 0x00c6, 0x0056, 0x0126, 0x2091,
-+ 0x8000, 0x62a0, 0x00c6, 0x080c, 0x9e67, 0x005e, 0x0550, 0x6013,
-+ 0x0000, 0x651a, 0x080c, 0x9fb8, 0x601f, 0x0003, 0x0016, 0x00c6,
-+ 0x2560, 0x080c, 0x516b, 0x00ce, 0x080c, 0x6dba, 0x0076, 0x2039,
-+ 0x0000, 0x080c, 0x6cc7, 0x2c08, 0x080c, 0xae05, 0x007e, 0x001e,
-+ 0xd184, 0x0128, 0x080c, 0x85c0, 0xa085, 0x0001, 0x0030, 0x2009,
-+ 0x004c, 0x080c, 0x85ef, 0xa085, 0x0001, 0x012e, 0x005e, 0x00ce,
-+ 0x0005, 0xa006, 0x0cd0, 0x00f6, 0x00c6, 0x0046, 0x00c6, 0x080c,
-+ 0x856a, 0x2c78, 0x00ce, 0x0180, 0x7e12, 0x2c00, 0x781a, 0x781f,
-+ 0x0003, 0x2021, 0x0005, 0x080c, 0x9ce1, 0x2f60, 0x2009, 0x004d,
-+ 0x080c, 0x85ef, 0xa085, 0x0001, 0x004e, 0x00ce, 0x00fe, 0x0005,
-+ 0x00f6, 0x00c6, 0x0046, 0x00c6, 0x080c, 0x856a, 0x2c78, 0x00ce,
-+ 0x0178, 0x7e12, 0x2c00, 0x781a, 0x781f, 0x0003, 0x2021, 0x0005,
-+ 0x0481, 0x2f60, 0x2009, 0x004e, 0x080c, 0x85ef, 0xa085, 0x0001,
-+ 0x004e, 0x00ce, 0x00fe, 0x0005, 0x00f6, 0x00c6, 0x0046, 0x00c6,
-+ 0x080c, 0x856a, 0x2c78, 0x00ce, 0x01c0, 0x7e12, 0x2c00, 0x781a,
-+ 0x781f, 0x0003, 0x2021, 0x0004, 0x00a1, 0x2001, 0xb6a0, 0x2004,
-+ 0xd0fc, 0x0120, 0x2f60, 0x080c, 0x85c0, 0x0028, 0x2f60, 0x2009,
-+ 0x0052, 0x080c, 0x85ef, 0xa085, 0x0001, 0x004e, 0x00ce, 0x00fe,
-+ 0x0005, 0x0096, 0x0076, 0x0126, 0x2091, 0x8000, 0x080c, 0x510d,
-+ 0x0118, 0x2001, 0x9ce6, 0x0028, 0x080c, 0x50dd, 0x0158, 0x2001,
-+ 0x9cec, 0x0006, 0xa00e, 0x2400, 0x080c, 0x549c, 0x080c, 0x53c9,
-+ 0x000e, 0x0807, 0x2418, 0x080c, 0x6ff4, 0x62a0, 0x0086, 0x2041,
-+ 0x0001, 0x2039, 0x0001, 0x2608, 0x080c, 0x6dd3, 0x008e, 0x080c,
-+ 0x6cc7, 0x2f08, 0x2648, 0x080c, 0xae05, 0x613c, 0x81ff, 0x090c,
-+ 0x6e88, 0x080c, 0x7134, 0x012e, 0x007e, 0x009e, 0x0005, 0x00c6,
-+ 0x0126, 0x2091, 0x8000, 0x00c6, 0x080c, 0x856a, 0x001e, 0x0188,
-+ 0x660a, 0x611a, 0x080c, 0x9fb8, 0x601f, 0x0001, 0x2d00, 0x6012,
-+ 0x2009, 0x001f, 0x080c, 0x85ef, 0xa085, 0x0001, 0x012e, 0x00ce,
-+ 0x0005, 0xa006, 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000, 0x00c6,
-+ 0x080c, 0x856a, 0x001e, 0x0188, 0x660a, 0x611a, 0x080c, 0x9fb8,
-+ 0x601f, 0x0008, 0x2d00, 0x6012, 0x2009, 0x0021, 0x080c, 0x85ef,
-+ 0xa085, 0x0001, 0x012e, 0x00ce, 0x0005, 0xa006, 0x0cd8, 0x00c6,
-+ 0x0126, 0x2091, 0x8000, 0x00c6, 0x080c, 0x856a, 0x001e, 0x0188,
-+ 0x660a, 0x611a, 0x080c, 0x9fb8, 0x601f, 0x0001, 0x2d00, 0x6012,
-+ 0x2009, 0x003d, 0x080c, 0x85ef, 0xa085, 0x0001, 0x012e, 0x00ce,
-+ 0x0005, 0xa006, 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000, 0x00c6,
-+ 0x080c, 0x9e67, 0x001e, 0x0180, 0x611a, 0x080c, 0x9fb8, 0x601f,
-+ 0x0001, 0x2d00, 0x6012, 0x2009, 0x0000, 0x080c, 0x85ef, 0xa085,
-+ 0x0001, 0x012e, 0x00ce, 0x0005, 0xa006, 0x0cd8, 0x00c6, 0x0126,
-+ 0x2091, 0x8000, 0x00c6, 0x080c, 0x856a, 0x001e, 0x0188, 0x660a,
-+ 0x611a, 0x080c, 0x9fb8, 0x601f, 0x0001, 0x2d00, 0x6012, 0x2009,
-+ 0x0044, 0x080c, 0x85ef, 0xa085, 0x0001, 0x012e, 0x00ce, 0x0005,
-+ 0xa006, 0x0cd8, 0x0026, 0x00d6, 0x6218, 0x2268, 0x6a3c, 0x82ff,
-+ 0x0110, 0x8211, 0x6a3e, 0x00de, 0x002e, 0x0005, 0x0006, 0x6000,
-+ 0xa086, 0x0000, 0x0190, 0x6013, 0x0000, 0x601f, 0x0007, 0x2001,
-+ 0xb6b6, 0x2004, 0x0006, 0xa082, 0x0051, 0x000e, 0x0208, 0x8004,
-+ 0x6016, 0x080c, 0xb2bd, 0x603f, 0x0000, 0x000e, 0x0005, 0x0066,
-+ 0x00c6, 0x00d6, 0x2031, 0xb453, 0x2634, 0xd6e4, 0x0128, 0x6618,
-+ 0x2660, 0x6e48, 0x080c, 0x5096, 0x00de, 0x00ce, 0x006e, 0x0005,
-+ 0x0006, 0x0016, 0x6004, 0xa08e, 0x0002, 0x0140, 0xa08e, 0x0003,
-+ 0x0128, 0xa08e, 0x0004, 0x0110, 0xa085, 0x0001, 0x001e, 0x000e,
-+ 0x0005, 0x0006, 0x00d6, 0x6010, 0xa06d, 0x0148, 0x6834, 0xa086,
-+ 0x0139, 0x0138, 0x6838, 0xd0fc, 0x0110, 0xa006, 0x0010, 0xa085,
-+ 0x0001, 0x00de, 0x000e, 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000,
-+ 0x00c6, 0x080c, 0x856a, 0x001e, 0x0190, 0x611a, 0x080c, 0x9fb8,
-+ 0x601f, 0x0001, 0x2d00, 0x6012, 0x080c, 0x2c60, 0x2009, 0x0028,
-+ 0x080c, 0x85ef, 0xa085, 0x0001, 0x012e, 0x00ce, 0x0005, 0xa006,
-+ 0x0cd8, 0xa186, 0x0015, 0x1178, 0x2011, 0xb421, 0x2204, 0xa086,
-+ 0x0074, 0x1148, 0x080c, 0x8f38, 0x6003, 0x0001, 0x6007, 0x0029,
-+ 0x080c, 0x6c98, 0x0020, 0x080c, 0x8bbc, 0x080c, 0x85c0, 0x0005,
-+ 0xa186, 0x0016, 0x1128, 0x2001, 0x0004, 0x080c, 0x4ebe, 0x00e8,
-+ 0xa186, 0x0015, 0x11e8, 0x2011, 0xb421, 0x2204, 0xa086, 0x0014,
-+ 0x11b8, 0x00d6, 0x6018, 0x2068, 0x080c, 0x500c, 0x00de, 0x080c,
-+ 0x8ff1, 0x1170, 0x00d6, 0x6018, 0x2068, 0x6890, 0x00de, 0xa005,
-+ 0x0138, 0x2001, 0x0006, 0x080c, 0x4ebe, 0x080c, 0x8743, 0x0020,
-+ 0x080c, 0x8bbc, 0x080c, 0x85c0, 0x0005, 0x6848, 0xa086, 0x0005,
-+ 0x1108, 0x0009, 0x0005, 0x6850, 0xc0ad, 0x6852, 0x0005, 0x00e6,
-+ 0x0126, 0x2071, 0xb400, 0x2091, 0x8000, 0x7548, 0xa582, 0x0001,
-+ 0x0608, 0x704c, 0x2060, 0x6000, 0xa086, 0x0000, 0x0148, 0xace0,
-+ 0x0018, 0x705c, 0xac02, 0x1208, 0x0cb0, 0x2061, 0xbc00, 0x0c98,
-+ 0x6003, 0x0008, 0x8529, 0x754a, 0xaca8, 0x0018, 0x705c, 0xa502,
-+ 0x1230, 0x754e, 0xa085, 0x0001, 0x012e, 0x00ee, 0x0005, 0x704f,
-+ 0xbc00, 0x0cc0, 0xa006, 0x0cc0, 0x00e6, 0x2071, 0xba8c, 0x7014,
-+ 0xd0e4, 0x0150, 0x6013, 0x0000, 0x6003, 0x0001, 0x6007, 0x0050,
-+ 0x080c, 0x6c52, 0x080c, 0x7134, 0x00ee, 0x0005, 0x00c6, 0x00f6,
-+ 0x2c78, 0x080c, 0x52c6, 0x00fe, 0x0120, 0x601c, 0xa084, 0x000f,
-+ 0x0013, 0x00ce, 0x0005, 0x9997, 0x9ebe, 0x9ec1, 0x9ec4, 0xb0aa,
-+ 0xb0c5, 0xb0c8, 0x9997, 0x9997, 0x080c, 0x1511, 0xe000, 0xe000,
-+ 0x0005, 0xe000, 0xe000, 0x0005, 0x0009, 0x0005, 0x00f6, 0x2c78,
-+ 0x080c, 0x52c6, 0x0538, 0x080c, 0x856a, 0x1128, 0x2001, 0xb6b8,
-+ 0x2004, 0x783e, 0x00f8, 0x7818, 0x601a, 0x080c, 0x9fb8, 0x781c,
-+ 0xa086, 0x0003, 0x0128, 0x7808, 0x6036, 0x2f00, 0x603a, 0x0020,
-+ 0x7808, 0x603a, 0x2f00, 0x6036, 0x602a, 0x601f, 0x0001, 0x6007,
-+ 0x0035, 0x6003, 0x0001, 0x7950, 0x6152, 0x080c, 0x6c52, 0x080c,
-+ 0x7134, 0x2f60, 0x00fe, 0x0005, 0x0016, 0x00f6, 0x682c, 0x6032,
-+ 0xa08e, 0x0001, 0x0138, 0xa086, 0x0005, 0x0140, 0xa006, 0x602a,
-+ 0x602e, 0x00a0, 0x6820, 0xc0f4, 0xc0d5, 0x6822, 0x6810, 0x2078,
-+ 0x787c, 0x6938, 0xa102, 0x7880, 0x6934, 0xa103, 0x1e78, 0x6834,
-+ 0x602a, 0x6838, 0xa084, 0xfffc, 0x683a, 0x602e, 0x2d00, 0x6036,
-+ 0x6808, 0x603a, 0x6918, 0x611a, 0x6950, 0x6152, 0x601f, 0x0001,
-+ 0x6007, 0x0039, 0x6003, 0x0001, 0x080c, 0x6c52, 0x6803, 0x0002,
-+ 0x00fe, 0x001e, 0x0005, 0x00f6, 0x2c78, 0x080c, 0x52c6, 0x1118,
-+ 0xa085, 0x0001, 0x0070, 0x6020, 0xd0f4, 0x1150, 0xc0f5, 0x6022,
-+ 0x6010, 0x2078, 0x7828, 0x603a, 0x782c, 0x6036, 0x080c, 0x1944,
-+ 0xa006, 0x00fe, 0x0005, 0x0006, 0x0016, 0x6004, 0xa08e, 0x0034,
-+ 0x01b8, 0xa08e, 0x0035, 0x01a0, 0xa08e, 0x0036, 0x0188, 0xa08e,
-+ 0x0037, 0x0170, 0xa08e, 0x0038, 0x0158, 0xa08e, 0x0039, 0x0140,
-+ 0xa08e, 0x003a, 0x0128, 0xa08e, 0x003b, 0x0110, 0xa085, 0x0001,
-+ 0x001e, 0x000e, 0x0005, 0x0006, 0x0016, 0x0026, 0x0036, 0x00e6,
-+ 0x2001, 0xb6b2, 0x200c, 0x8000, 0x2014, 0x2001, 0x0032, 0x080c,
-+ 0x6b05, 0x2001, 0xb6b6, 0x82ff, 0x1110, 0x2011, 0x0014, 0x2202,
-+ 0x2001, 0xb6b4, 0x200c, 0x8000, 0x2014, 0x2071, 0xb68e, 0x711a,
-+ 0x721e, 0x2001, 0x0064, 0x080c, 0x6b05, 0x2001, 0xb6b7, 0x82ff,
-+ 0x1110, 0x2011, 0x0014, 0x2202, 0x2009, 0xb6b8, 0xa280, 0x000a,
-+ 0x200a, 0x080c, 0x52eb, 0x00ee, 0x003e, 0x002e, 0x001e, 0x000e,
-+ 0x0005, 0x0006, 0x00e6, 0x2001, 0xb6b6, 0x2003, 0x0028, 0x2001,
-+ 0xb6b7, 0x2003, 0x0014, 0x2071, 0xb68e, 0x701b, 0x0000, 0x701f,
-+ 0x07d0, 0x2001, 0xb6b8, 0x2003, 0x001e, 0x00ee, 0x000e, 0x0005,
-+ 0x00d6, 0x6054, 0xa06d, 0x0110, 0x080c, 0x160b, 0x00de, 0x0005,
-+ 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x00c6, 0x080c, 0x856a,
-+ 0x001e, 0x0178, 0x611a, 0x0ca1, 0x601f, 0x0001, 0x2d00, 0x6012,
-+ 0x2009, 0x0033, 0x080c, 0x85ef, 0xa085, 0x0001, 0x012e, 0x00ce,
-+ 0x0005, 0xa006, 0x0cd8, 0x00d6, 0x00e6, 0x00f6, 0x2071, 0xb400,
-+ 0xa186, 0x0015, 0x1500, 0x7084, 0xa086, 0x0018, 0x11e0, 0x6010,
-+ 0x2068, 0x6a3c, 0xd2e4, 0x1160, 0x2c78, 0x080c, 0x72f2, 0x01d8,
-+ 0x7070, 0x6a50, 0xa206, 0x1160, 0x7074, 0x6a54, 0xa206, 0x1140,
-+ 0x6218, 0xa290, 0x0028, 0x2214, 0x2009, 0x0000, 0x080c, 0x2ca5,
-+ 0x080c, 0x8743, 0x0020, 0x080c, 0x8bbc, 0x080c, 0x85c0, 0x00fe,
-+ 0x00ee, 0x00de, 0x0005, 0x7054, 0x6a54, 0xa206, 0x0d48, 0x0c80,
-+ 0x00c6, 0x0126, 0x2091, 0x8000, 0x00c6, 0x080c, 0x856a, 0x001e,
-+ 0x0180, 0x611a, 0x080c, 0x9fb8, 0x601f, 0x0001, 0x2d00, 0x6012,
-+ 0x2009, 0x0043, 0x080c, 0x85ef, 0xa085, 0x0001, 0x012e, 0x00ce,
-+ 0x0005, 0xa006, 0x0cd8, 0x00d6, 0x00e6, 0x00f6, 0x2071, 0xb400,
-+ 0xa186, 0x0015, 0x11c0, 0x7084, 0xa086, 0x0004, 0x11a0, 0x6010,
-+ 0xa0e8, 0x000f, 0x2c78, 0x080c, 0x72f2, 0x01a8, 0x7070, 0x6a08,
-+ 0xa206, 0x1130, 0x7074, 0x6a0c, 0xa206, 0x1110, 0x080c, 0x2c60,
-+ 0x080c, 0x8743, 0x0020, 0x080c, 0x8bbc, 0x080c, 0x85c0, 0x00fe,
-+ 0x00ee, 0x00de, 0x0005, 0x7054, 0x6a0c, 0xa206, 0x0d78, 0x0c80,
-+ 0x0016, 0x0026, 0x684c, 0xd0ac, 0x0178, 0x6914, 0x6a10, 0x2100,
-+ 0xa205, 0x0150, 0x6860, 0xa106, 0x1118, 0x685c, 0xa206, 0x0120,
-+ 0x6962, 0x6a5e, 0xa085, 0x0001, 0x002e, 0x001e, 0x0005, 0x00d6,
-+ 0x0036, 0x6310, 0x2368, 0x684a, 0x6952, 0xa29e, 0x4000, 0x11a0,
-+ 0x00c6, 0x6318, 0x2360, 0x2009, 0x0000, 0x6838, 0xd0f4, 0x1140,
-+ 0x080c, 0x520b, 0x1108, 0xc185, 0x6000, 0xd0bc, 0x0108, 0xc18d,
-+ 0x6a66, 0x696a, 0x00ce, 0x0080, 0x6a66, 0x3918, 0xa398, 0x0006,
-+ 0x231c, 0x686b, 0x0004, 0x6b72, 0x00c6, 0x6318, 0x2360, 0x6004,
-+ 0xa084, 0x00ff, 0x686e, 0x00ce, 0x080c, 0x53c9, 0x6013, 0x0000,
-+ 0x003e, 0x00de, 0x0005, 0x00c6, 0x0026, 0x0016, 0xa186, 0x0035,
-+ 0x0110, 0x6a34, 0x0008, 0x6a28, 0x080c, 0x9bdb, 0x01f0, 0x2260,
-+ 0x611c, 0xa186, 0x0003, 0x0118, 0xa186, 0x0006, 0x1190, 0x6834,
-+ 0xa206, 0x0140, 0x6838, 0xa206, 0x1160, 0x6108, 0x6834, 0xa106,
-+ 0x1140, 0x0020, 0x6008, 0x6938, 0xa106, 0x1118, 0x6018, 0x6918,
-+ 0xa106, 0x001e, 0x002e, 0x00ce, 0x0005, 0xa085, 0x0001, 0x0cc8,
-+ 0x6944, 0xd1cc, 0x0198, 0xa18c, 0x00ff, 0xa18e, 0x0002, 0x1170,
-+ 0xad88, 0x001e, 0x210c, 0xa18c, 0x0f00, 0x810f, 0xa18e, 0x0001,
-+ 0x1128, 0x6810, 0x6914, 0xa115, 0x190c, 0x941c, 0x0005, 0x0066,
-+ 0x6000, 0xa0b2, 0x0010, 0x1a0c, 0x1511, 0x0013, 0x006e, 0x0005,
-+ 0xa0f8, 0xa5cf, 0xa6f5, 0xa0f8, 0xa0f8, 0xa0f8, 0xa0f8, 0xa0f8,
-+ 0xa130, 0xa779, 0xa0f8, 0xa0f8, 0xa0f8, 0xa0f8, 0xa0f8, 0xa0f8,
-+ 0x080c, 0x1511, 0x0066, 0x6000, 0xa0b2, 0x0010, 0x1a0c, 0x1511,
-+ 0x0013, 0x006e, 0x0005, 0xa113, 0xabfa, 0xa113, 0xa113, 0xa113,
-+ 0xa113, 0xa113, 0xa113, 0xabbe, 0xac42, 0xa113, 0xb1ef, 0xb21f,
-+ 0xb1ef, 0xb21f, 0xa113, 0x080c, 0x1511, 0x0066, 0x6000, 0xa0b2,
-+ 0x0010, 0x1a0c, 0x1511, 0x0013, 0x006e, 0x0005, 0xa12e, 0xa8c5,
-+ 0xa992, 0xa9bf, 0xaa43, 0xa12e, 0xab30, 0xaadb, 0xa785, 0xab94,
-+ 0xaba9, 0xa12e, 0xa12e, 0xa12e, 0xa12e, 0xa12e, 0x080c, 0x1511,
-+ 0xa1b2, 0x0080, 0x1a0c, 0x1511, 0x2100, 0xa1b2, 0x0040, 0x1a04,
-+ 0xa543, 0x0002, 0xa17a, 0xa345, 0xa17a, 0xa17a, 0xa17a, 0xa34c,
-+ 0xa17a, 0xa17a, 0xa17a, 0xa17a, 0xa17a, 0xa17a, 0xa17a, 0xa17a,
-+ 0xa17a, 0xa17a, 0xa17a, 0xa17a, 0xa17a, 0xa17a, 0xa17a, 0xa17a,
-+ 0xa17a, 0xa17c, 0xa1da, 0xa1e9, 0xa237, 0xa255, 0xa2d3, 0xa332,
-+ 0xa17a, 0xa17a, 0xa34f, 0xa17a, 0xa17a, 0xa362, 0xa36d, 0xa17a,
-+ 0xa17a, 0xa17a, 0xa17a, 0xa17a, 0xa3f8, 0xa17a, 0xa17a, 0xa407,
-+ 0xa17a, 0xa17a, 0xa3c3, 0xa17a, 0xa17a, 0xa17a, 0xa41f, 0xa17a,
-+ 0xa17a, 0xa17a, 0xa499, 0xa17a, 0xa17a, 0xa17a, 0xa17a, 0xa17a,
-+ 0xa17a, 0xa50a, 0x080c, 0x1511, 0x080c, 0x52ca, 0x1150, 0x2001,
-+ 0xb435, 0x2004, 0xd0cc, 0x1128, 0xa084, 0x0009, 0xa086, 0x0008,
-+ 0x1140, 0x6007, 0x0009, 0x602b, 0x0009, 0x6013, 0x0000, 0x0804,
-+ 0xa340, 0x080c, 0x52ba, 0x00e6, 0x00c6, 0x0036, 0x0026, 0x0016,
-+ 0x6218, 0x2270, 0x72a0, 0x0026, 0x2019, 0x0029, 0x080c, 0x6dba,
-+ 0x0076, 0x2039, 0x0000, 0x080c, 0x6cc7, 0x2c08, 0x080c, 0xae05,
-+ 0x007e, 0x001e, 0x2e60, 0x080c, 0x516b, 0x001e, 0x002e, 0x003e,
-+ 0x00ce, 0x00ee, 0x6618, 0x00c6, 0x2660, 0x080c, 0x4f79, 0x00ce,
-+ 0xa6b0, 0x0001, 0x2634, 0xa684, 0x00ff, 0xa082, 0x0006, 0x0278,
-+ 0x080c, 0xad49, 0x1904, 0xa231, 0x080c, 0xace9, 0x1120, 0x6007,
-+ 0x0008, 0x0804, 0xa340, 0x6007, 0x0009, 0x0804, 0xa340, 0x080c,
-+ 0xaefe, 0x0128, 0x080c, 0xad49, 0x0d78, 0x0804, 0xa231, 0x6013,
-+ 0x1900, 0x0c88, 0x080c, 0x2d83, 0x1904, 0xa540, 0x6106, 0x080c,
-+ 0xaca3, 0x6007, 0x0006, 0x0804, 0xa340, 0x6007, 0x0007, 0x0804,
-+ 0xa340, 0x080c, 0xb253, 0x1904, 0xa540, 0x080c, 0x2d83, 0x1904,
-+ 0xa540, 0x00d6, 0x6618, 0x2668, 0x6e04, 0xa684, 0x00ff, 0xa082,
-+ 0x0006, 0x1220, 0x2001, 0x0001, 0x080c, 0x4eac, 0xa6b4, 0xff00,
-+ 0x8637, 0xa686, 0x0006, 0x0188, 0xa686, 0x0004, 0x0170, 0x6e04,
-+ 0xa6b4, 0x00ff, 0xa686, 0x0006, 0x0140, 0xa686, 0x0004, 0x0128,
-+ 0xa686, 0x0005, 0x0110, 0x00de, 0x00e0, 0x080c, 0xada7, 0x11a0,
-+ 0xa686, 0x0006, 0x1150, 0x0026, 0x6218, 0xa290, 0x0028, 0x2214,
-+ 0x2009, 0x0000, 0x080c, 0x2ca5, 0x002e, 0x080c, 0x500c, 0x6007,
-+ 0x000a, 0x00de, 0x0804, 0xa340, 0x6007, 0x000b, 0x00de, 0x0804,
-+ 0xa340, 0x080c, 0x2c60, 0x6007, 0x0001, 0x0804, 0xa340, 0x080c,
-+ 0xb253, 0x1904, 0xa540, 0x080c, 0x2d83, 0x1904, 0xa540, 0x6618,
-+ 0x00d6, 0x2668, 0x6e04, 0x00de, 0xa686, 0x0707, 0x0d50, 0x0026,
-+ 0x6218, 0xa290, 0x0028, 0x2214, 0x2009, 0x0000, 0x080c, 0x2ca5,
-+ 0x002e, 0x6007, 0x000c, 0x0804, 0xa340, 0x080c, 0x52ca, 0x1140,
-+ 0x2001, 0xb435, 0x2004, 0xa084, 0x0009, 0xa086, 0x0008, 0x1110,
-+ 0x0804, 0xa189, 0x080c, 0x52ba, 0x6618, 0xa6b0, 0x0001, 0x2634,
-+ 0xa684, 0x00ff, 0xa082, 0x0006, 0x06e8, 0x1138, 0x0026, 0x2001,
-+ 0x0006, 0x080c, 0x4eeb, 0x002e, 0x0050, 0xa6b4, 0xff00, 0x8637,
-+ 0xa686, 0x0004, 0x0120, 0xa686, 0x0006, 0x1904, 0xa231, 0x080c,
-+ 0xadb4, 0x1120, 0x6007, 0x000e, 0x0804, 0xa340, 0x0046, 0x6418,
-+ 0xa4a0, 0x0028, 0x2424, 0xa4a4, 0x00ff, 0x8427, 0x0046, 0x080c,
-+ 0x2c60, 0x004e, 0x0016, 0xa006, 0x2009, 0xb453, 0x210c, 0xd1a4,
-+ 0x0158, 0x2009, 0x0029, 0x080c, 0xb06b, 0x6018, 0x00d6, 0x2068,
-+ 0x6800, 0xc0e5, 0x6802, 0x00de, 0x001e, 0x004e, 0x6007, 0x0001,
-+ 0x0804, 0xa340, 0x2001, 0x0001, 0x080c, 0x4eac, 0x0156, 0x0016,
-+ 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019, 0xb405, 0x2011, 0xba90,
-+ 0x080c, 0x907a, 0x003e, 0x002e, 0x001e, 0x015e, 0xa005, 0x0168,
-+ 0xa6b4, 0xff00, 0x8637, 0xa682, 0x0004, 0x0a04, 0xa231, 0xa682,
-+ 0x0007, 0x0a04, 0xa27f, 0x0804, 0xa231, 0x6013, 0x1900, 0x6007,
-+ 0x0009, 0x0804, 0xa340, 0x080c, 0x52ca, 0x1140, 0x2001, 0xb435,
-+ 0x2004, 0xa084, 0x0009, 0xa086, 0x0008, 0x1110, 0x0804, 0xa189,
-+ 0x080c, 0x52ba, 0x6618, 0xa6b0, 0x0001, 0x2634, 0xa684, 0x00ff,
-+ 0xa082, 0x0006, 0x06b8, 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0004,
-+ 0x0120, 0xa686, 0x0006, 0x1904, 0xa231, 0x080c, 0xaddc, 0x1138,
-+ 0x080c, 0xace9, 0x1120, 0x6007, 0x0010, 0x0804, 0xa340, 0x0046,
-+ 0x6418, 0xa4a0, 0x0028, 0x2424, 0xa4a4, 0x00ff, 0x8427, 0x0046,
-+ 0x080c, 0x2c60, 0x004e, 0x0016, 0xa006, 0x2009, 0xb453, 0x210c,
-+ 0xd1a4, 0x0158, 0x2009, 0x0029, 0x080c, 0xb06b, 0x6018, 0x00d6,
-+ 0x2068, 0x6800, 0xc0e5, 0x6802, 0x00de, 0x001e, 0x004e, 0x6007,
-+ 0x0001, 0x00f0, 0x080c, 0xaefe, 0x0140, 0xa6b4, 0xff00, 0x8637,
-+ 0xa686, 0x0006, 0x0950, 0x0804, 0xa231, 0x6013, 0x1900, 0x6007,
-+ 0x0009, 0x0070, 0x080c, 0x2d83, 0x1904, 0xa540, 0x080c, 0xb253,
-+ 0x1904, 0xa540, 0x080c, 0xa568, 0x1904, 0xa231, 0x6007, 0x0012,
-+ 0x6003, 0x0001, 0x080c, 0x6c98, 0x0005, 0x6007, 0x0001, 0x6003,
-+ 0x0001, 0x080c, 0x6c98, 0x0cc0, 0x6007, 0x0005, 0x0cc0, 0x080c,
-+ 0xb253, 0x1904, 0xa540, 0x080c, 0x2d83, 0x1904, 0xa540, 0x080c,
-+ 0xa568, 0x1904, 0xa231, 0x6007, 0x0020, 0x6003, 0x0001, 0x080c,
-+ 0x6c98, 0x0005, 0x080c, 0x2d83, 0x1904, 0xa540, 0x6007, 0x0023,
-+ 0x6003, 0x0001, 0x080c, 0x6c98, 0x0005, 0x080c, 0xb253, 0x1904,
-+ 0xa540, 0x080c, 0x2d83, 0x1904, 0xa540, 0x080c, 0xa568, 0x1904,
-+ 0xa231, 0x0016, 0x0026, 0x2011, 0xba91, 0x2214, 0xa286, 0xffff,
-+ 0x0190, 0x2c08, 0x080c, 0x9bdb, 0x01e0, 0x2260, 0x2011, 0xba90,
-+ 0x2214, 0x6008, 0xa206, 0x11a8, 0x6018, 0xa190, 0x0006, 0x2214,
-+ 0xa206, 0x01e8, 0x0070, 0x2011, 0xba90, 0x2214, 0x2c08, 0xa006,
-+ 0x080c, 0xb03d, 0x11a0, 0x2011, 0xba91, 0x2214, 0xa286, 0xffff,
-+ 0x01c0, 0x2160, 0x6007, 0x0026, 0x6013, 0x1700, 0x2011, 0xba89,
-+ 0x2214, 0xa296, 0xffff, 0x1180, 0x6007, 0x0025, 0x0068, 0x601c,
-+ 0xa086, 0x0007, 0x1d70, 0x6004, 0xa086, 0x0024, 0x1110, 0x080c,
-+ 0x85c0, 0x2160, 0x6007, 0x0025, 0x6003, 0x0001, 0x080c, 0x6c98,
-+ 0x002e, 0x001e, 0x0005, 0x2001, 0x0001, 0x080c, 0x4eac, 0x0156,
-+ 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019, 0xb405, 0x2011,
-+ 0xba96, 0x080c, 0x907a, 0x003e, 0x002e, 0x001e, 0x015e, 0x0120,
-+ 0x6007, 0x0031, 0x0804, 0xa340, 0x080c, 0x8d99, 0x080c, 0x5a90,
-+ 0x11b0, 0x0006, 0x0026, 0x0036, 0x080c, 0x5aac, 0x1158, 0x2001,
-+ 0xb69f, 0x2003, 0x0001, 0x2001, 0xb400, 0x2003, 0x0001, 0x080c,
-+ 0x59c8, 0x0010, 0x080c, 0x5a67, 0x003e, 0x002e, 0x000e, 0x0005,
-+ 0x080c, 0x2d83, 0x1904, 0xa540, 0x6106, 0x080c, 0xa584, 0x6007,
-+ 0x002b, 0x0804, 0xa340, 0x6007, 0x002c, 0x0804, 0xa340, 0x080c,
-+ 0xb253, 0x1904, 0xa540, 0x080c, 0x2d83, 0x1904, 0xa540, 0x080c,
-+ 0xa568, 0x1904, 0xa231, 0x6106, 0x080c, 0xa588, 0x1120, 0x6007,
-+ 0x002e, 0x0804, 0xa340, 0x6007, 0x002f, 0x0804, 0xa340, 0x080c,
-+ 0x2d83, 0x1904, 0xa540, 0x00e6, 0x00d6, 0x00c6, 0x6018, 0xa080,
-+ 0x0001, 0x200c, 0xa184, 0x00ff, 0xa086, 0x0006, 0x0158, 0xa184,
-+ 0xff00, 0x8007, 0xa086, 0x0006, 0x0128, 0x00ce, 0x00de, 0x00ee,
-+ 0x0804, 0xa345, 0x2001, 0xb472, 0x2004, 0xd0e4, 0x0904, 0xa496,
-+ 0x2071, 0xba8c, 0x7010, 0x6036, 0x7014, 0x603a, 0x7108, 0x720c,
-+ 0x2001, 0xb453, 0x2004, 0xd0a4, 0x0140, 0x6018, 0x2068, 0x6810,
-+ 0xa106, 0x1118, 0x6814, 0xa206, 0x01f8, 0x2001, 0xb453, 0x2004,
-+ 0xd0ac, 0x1590, 0x2069, 0xb400, 0x6874, 0xa206, 0x1568, 0x6870,
-+ 0xa106, 0x1550, 0x7210, 0x080c, 0x9bdb, 0x0558, 0x080c, 0xb0d7,
-+ 0x0540, 0x622a, 0x6007, 0x0036, 0x6003, 0x0001, 0x080c, 0x6c52,
-+ 0x00ce, 0x00de, 0x00ee, 0x0005, 0x7214, 0xa286, 0xffff, 0x0150,
-+ 0x080c, 0x9bdb, 0x01b0, 0xa280, 0x0002, 0x2004, 0x7110, 0xa106,
-+ 0x1180, 0x0c08, 0x7210, 0x2c08, 0xa085, 0x0001, 0x080c, 0xb03d,
-+ 0x2c10, 0x2160, 0x0130, 0x08b8, 0x6007, 0x0037, 0x6013, 0x1500,
-+ 0x08d8, 0x6007, 0x0037, 0x6013, 0x1700, 0x08b0, 0x6007, 0x0012,
-+ 0x0898, 0x080c, 0x2d83, 0x1904, 0xa540, 0x6018, 0xa080, 0x0001,
-+ 0x2004, 0xa084, 0xff00, 0x8007, 0xa086, 0x0006, 0x1904, 0xa345,
-+ 0x00e6, 0x00d6, 0x00c6, 0x2001, 0xb472, 0x2004, 0xd0e4, 0x0904,
-+ 0xa502, 0x2069, 0xb400, 0x2071, 0xba8c, 0x7008, 0x6036, 0x720c,
-+ 0x623a, 0xa286, 0xffff, 0x1150, 0x7208, 0x00c6, 0x2c08, 0xa085,
-+ 0x0001, 0x080c, 0xb03d, 0x2c10, 0x00ce, 0x0588, 0x080c, 0x9bdb,
-+ 0x0570, 0x00c6, 0x0026, 0x2260, 0x080c, 0x98b6, 0x002e, 0x00ce,
-+ 0x7118, 0xa18c, 0xff00, 0x810f, 0xa186, 0x0001, 0x0158, 0xa186,
-+ 0x0005, 0x0118, 0xa186, 0x0007, 0x1178, 0xa280, 0x0004, 0x2004,
-+ 0xa005, 0x0150, 0x0056, 0x7510, 0x7614, 0x080c, 0xb0ee, 0x005e,
-+ 0x00ce, 0x00de, 0x00ee, 0x0005, 0x6007, 0x003b, 0x602b, 0x0009,
-+ 0x6013, 0x2a00, 0x6003, 0x0001, 0x080c, 0x6c52, 0x0c88, 0x6007,
-+ 0x003b, 0x602b, 0x0009, 0x6013, 0x1700, 0x6003, 0x0001, 0x080c,
-+ 0x6c52, 0x0c30, 0x6007, 0x003b, 0x602b, 0x000b, 0x6013, 0x0000,
-+ 0x0804, 0xa46c, 0x00e6, 0x0026, 0x080c, 0x52ca, 0x0558, 0x080c,
-+ 0x52ba, 0x080c, 0xb2ce, 0x1520, 0x2071, 0xb400, 0x70d4, 0xc085,
-+ 0x70d6, 0x00f6, 0x2079, 0x0100, 0x72a0, 0xa284, 0x00ff, 0x7072,
-+ 0x78e6, 0xa284, 0xff00, 0x7274, 0xa205, 0x7076, 0x78ea, 0x00fe,
-+ 0x70df, 0x0000, 0x2001, 0xb453, 0x2004, 0xd0a4, 0x0120, 0x2011,
-+ 0xb6f9, 0x2013, 0x07d0, 0xd0ac, 0x1128, 0x080c, 0x2a7e, 0x0010,
-+ 0x080c, 0xb2fa, 0x002e, 0x00ee, 0x080c, 0x85c0, 0x0804, 0xa344,
-+ 0x080c, 0x85c0, 0x0005, 0x2600, 0x0002, 0xa54e, 0xa54e, 0xa54e,
-+ 0xa54e, 0xa54e, 0xa550, 0xa54e, 0xa54e, 0xa54e, 0x080c, 0x1511,
-+ 0x080c, 0xb253, 0x1d68, 0x080c, 0x2d83, 0x1d50, 0x0089, 0x1138,
-+ 0x6007, 0x0045, 0x6003, 0x0001, 0x080c, 0x6c98, 0x0005, 0x080c,
-+ 0x2c60, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x6c98, 0x0005,
-+ 0x00d6, 0x0066, 0x6618, 0x2668, 0x6e04, 0xa6b4, 0xff00, 0x8637,
-+ 0xa686, 0x0006, 0x0170, 0xa686, 0x0004, 0x0158, 0x6e04, 0xa6b4,
-+ 0x00ff, 0xa686, 0x0006, 0x0128, 0xa686, 0x0004, 0x0110, 0xa085,
-+ 0x0001, 0x006e, 0x00de, 0x0005, 0x00d6, 0x0449, 0x00de, 0x0005,
-+ 0x00d6, 0x0491, 0x11f0, 0x680c, 0xa08c, 0xff00, 0x6820, 0xa084,
-+ 0x00ff, 0xa115, 0x6212, 0x6824, 0x602a, 0xd1e4, 0x0118, 0x2009,
-+ 0x0001, 0x0060, 0xd1ec, 0x0168, 0x6920, 0xa18c, 0x00ff, 0x6824,
-+ 0x080c, 0x27e3, 0x1130, 0x2110, 0x2009, 0x0000, 0x080c, 0x2ca5,
-+ 0x0018, 0xa085, 0x0001, 0x0008, 0xa006, 0x00de, 0x0005, 0x2069,
-+ 0xba8d, 0x6800, 0xa082, 0x0010, 0x1228, 0x6013, 0x0000, 0xa085,
-+ 0x0001, 0x0008, 0xa006, 0x0005, 0x6013, 0x0000, 0x2069, 0xba8c,
-+ 0x6808, 0xa084, 0xff00, 0xa086, 0x0800, 0x1140, 0x6800, 0xa084,
-+ 0x00ff, 0xa08e, 0x0014, 0x0110, 0xa08e, 0x0010, 0x0005, 0x6004,
-+ 0xa0b2, 0x0080, 0x1a0c, 0x1511, 0xa1b6, 0x0013, 0x1130, 0x2008,
-+ 0xa1b2, 0x0040, 0x1a04, 0xa6cf, 0x0092, 0xa1b6, 0x0027, 0x0120,
-+ 0xa1b6, 0x0014, 0x190c, 0x1511, 0x2001, 0x0007, 0x080c, 0x4eeb,
-+ 0x080c, 0x7055, 0x080c, 0x9dae, 0x080c, 0x7134, 0x0005, 0xa62f,
-+ 0xa631, 0xa62f, 0xa62f, 0xa62f, 0xa631, 0xa643, 0xa6c8, 0xa693,
-+ 0xa6c8, 0xa6a4, 0xa6c8, 0xa643, 0xa6c8, 0xa6c0, 0xa6c8, 0xa6c0,
-+ 0xa6c8, 0xa6c8, 0xa62f, 0xa62f, 0xa62f, 0xa62f, 0xa62f, 0xa62f,
-+ 0xa62f, 0xa62f, 0xa62f, 0xa62f, 0xa62f, 0xa631, 0xa62f, 0xa6c8,
-+ 0xa62f, 0xa62f, 0xa6c8, 0xa62f, 0xa6c5, 0xa6c8, 0xa62f, 0xa62f,
-+ 0xa62f, 0xa62f, 0xa6c8, 0xa6c8, 0xa62f, 0xa6c8, 0xa6c8, 0xa62f,
-+ 0xa63d, 0xa62f, 0xa62f, 0xa62f, 0xa62f, 0xa6c4, 0xa6c8, 0xa62f,
-+ 0xa62f, 0xa6c8, 0xa6c8, 0xa62f, 0xa62f, 0xa62f, 0xa62f, 0x080c,
-+ 0x1511, 0x080c, 0x7055, 0x2001, 0xb6b6, 0x2004, 0x6016, 0x6003,
-+ 0x0002, 0x080c, 0x7134, 0x0804, 0xa6ce, 0x2001, 0x0000, 0x080c,
-+ 0x4eac, 0x0804, 0xa6c8, 0x00f6, 0x2079, 0xb452, 0x7804, 0x00fe,
-+ 0xd0ac, 0x1904, 0xa6c8, 0x2001, 0x0000, 0x080c, 0x4eac, 0x6018,
-+ 0xa080, 0x0004, 0x2004, 0xa086, 0x00ff, 0x1140, 0x00f6, 0x2079,
-+ 0xb400, 0x7898, 0x8000, 0x789a, 0x00fe, 0x00e0, 0x00c6, 0x6018,
-+ 0x2060, 0x6000, 0xd0f4, 0x1140, 0x6010, 0xa005, 0x0128, 0x00ce,
-+ 0x080c, 0x3efc, 0x0804, 0xa6c8, 0x00ce, 0x2001, 0xb400, 0x2004,
-+ 0xa086, 0x0002, 0x1138, 0x00f6, 0x2079, 0xb400, 0x7898, 0x8000,
-+ 0x789a, 0x00fe, 0x2001, 0x0002, 0x080c, 0x4ebe, 0x080c, 0x7055,
-+ 0x601f, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x6c98,
-+ 0x080c, 0x7134, 0x00c6, 0x6118, 0x2160, 0x2009, 0x0001, 0x080c,
-+ 0x696d, 0x00ce, 0x04d8, 0x6618, 0x00d6, 0x2668, 0x6e04, 0x00de,
-+ 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, 0x0550, 0xa686, 0x0004,
-+ 0x0538, 0x2001, 0x0004, 0x0410, 0x2001, 0xb400, 0x2004, 0xa086,
-+ 0x0003, 0x1110, 0x080c, 0x3efc, 0x2001, 0x0006, 0x04a1, 0x6618,
-+ 0x00d6, 0x2668, 0x6e04, 0x00de, 0xa6b4, 0xff00, 0x8637, 0xa686,
-+ 0x0006, 0x0170, 0x2001, 0x0006, 0x0048, 0x2001, 0x0004, 0x0030,
-+ 0x2001, 0x0006, 0x0401, 0x0020, 0x0018, 0x0010, 0x080c, 0x4eeb,
-+ 0x080c, 0x7055, 0x080c, 0x85c0, 0x080c, 0x7134, 0x0005, 0x2600,
-+ 0x0002, 0xa6da, 0xa6da, 0xa6da, 0xa6da, 0xa6da, 0xa6dc, 0xa6da,
-+ 0xa6da, 0xa6da, 0x080c, 0x1511, 0x080c, 0x7055, 0x080c, 0x85c0,
-+ 0x080c, 0x7134, 0x0005, 0x0016, 0x00d6, 0x6118, 0x2168, 0x6900,
-+ 0xd184, 0x0140, 0x080c, 0x4ebe, 0x2001, 0x0000, 0x080c, 0x4eac,
-+ 0x080c, 0x2c86, 0x00de, 0x001e, 0x0005, 0x00d6, 0x6618, 0x2668,
-+ 0x6804, 0xa084, 0xff00, 0x8007, 0x00de, 0xa0b2, 0x000c, 0x1a0c,
-+ 0x1511, 0xa1b6, 0x0015, 0x1110, 0x003b, 0x0028, 0xa1b6, 0x0016,
-+ 0x190c, 0x1511, 0x006b, 0x0005, 0x8c82, 0x8c82, 0x8c82, 0x8c82,
-+ 0x8c82, 0x8c82, 0xa765, 0xa724, 0x8c82, 0x8c82, 0x8c82, 0x8c82,
-+ 0x8c82, 0x8c82, 0x8c82, 0x8c82, 0x8c82, 0x8c82, 0xa765, 0xa76c,
-+ 0x8c82, 0x8c82, 0x8c82, 0x8c82, 0x00f6, 0x2079, 0xb452, 0x7804,
-+ 0xd0ac, 0x11e0, 0x6018, 0xa07d, 0x01c8, 0x7800, 0xd0f4, 0x1118,
-+ 0x7810, 0xa005, 0x1198, 0x2001, 0x0000, 0x080c, 0x4eac, 0x2001,
-+ 0x0002, 0x080c, 0x4ebe, 0x601f, 0x0001, 0x6003, 0x0001, 0x6007,
-+ 0x0002, 0x080c, 0x6c98, 0x080c, 0x7134, 0x00e8, 0x2011, 0xba83,
-+ 0x2204, 0x8211, 0x220c, 0x080c, 0x27e3, 0x11a8, 0x00c6, 0x080c,
-+ 0x4f6a, 0x0120, 0x00ce, 0x080c, 0x85c0, 0x0068, 0x6010, 0x0006,
-+ 0x6014, 0x0006, 0x080c, 0x4bc5, 0x000e, 0x6016, 0x000e, 0x6012,
-+ 0x00ce, 0x080c, 0x85c0, 0x00fe, 0x0005, 0x6604, 0xa6b6, 0x001e,
-+ 0x1110, 0x080c, 0x85c0, 0x0005, 0x080c, 0x8f35, 0x1138, 0x6003,
-+ 0x0001, 0x6007, 0x0001, 0x080c, 0x6c98, 0x0010, 0x080c, 0x85c0,
-+ 0x0005, 0x6004, 0xa08a, 0x0080, 0x1a0c, 0x1511, 0x080c, 0x7055,
-+ 0x080c, 0x9dae, 0x080c, 0x7134, 0x0005, 0xa182, 0x0040, 0x0002,
-+ 0xa79b, 0xa79b, 0xa79b, 0xa79b, 0xa79d, 0xa79b, 0xa79b, 0xa79b,
-+ 0xa79b, 0xa79b, 0xa79b, 0xa79b, 0xa79b, 0xa79b, 0xa79b, 0xa79b,
-+ 0xa79b, 0xa79b, 0xa79b, 0x080c, 0x1511, 0x00d6, 0x00e6, 0x00f6,
-+ 0x0156, 0x0046, 0x0026, 0x6218, 0xa280, 0x002b, 0x2004, 0xa005,
-+ 0x0120, 0x2021, 0x0000, 0x080c, 0xb29f, 0x6106, 0x2071, 0xba80,
-+ 0x7444, 0xa4a4, 0xff00, 0x0904, 0xa801, 0xa486, 0x2000, 0x1130,
-+ 0x2009, 0x0001, 0x2011, 0x0200, 0x080c, 0x6adf, 0x080c, 0x15f4,
-+ 0x090c, 0x1511, 0x6003, 0x0007, 0x2d00, 0x6837, 0x010d, 0x6803,
-+ 0x0000, 0x683b, 0x0000, 0x6c5a, 0x2c00, 0x685e, 0x6008, 0x68b2,
-+ 0x6018, 0x2078, 0x78a0, 0x8007, 0x7130, 0x694a, 0x0016, 0xa084,
-+ 0xff00, 0x6846, 0x684f, 0x0000, 0x6853, 0x0000, 0x6857, 0x0036,
-+ 0x080c, 0x53c9, 0x001e, 0xa486, 0x2000, 0x1130, 0x2019, 0x0017,
-+ 0x080c, 0xafe8, 0x0804, 0xa85e, 0xa486, 0x0400, 0x1130, 0x2019,
-+ 0x0002, 0x080c, 0xaf9a, 0x0804, 0xa85e, 0xa486, 0x0200, 0x1110,
-+ 0x080c, 0xaf7f, 0xa486, 0x1000, 0x1110, 0x080c, 0xafcd, 0x0804,
-+ 0xa85e, 0x2069, 0xb774, 0x6a00, 0xd284, 0x0904, 0xa8c1, 0xa284,
-+ 0x0300, 0x1904, 0xa8ba, 0x6804, 0xa005, 0x0904, 0xa8a2, 0x2d78,
-+ 0x6003, 0x0007, 0x080c, 0x15db, 0x0904, 0xa865, 0x7800, 0xd08c,
-+ 0x1118, 0x7804, 0x8001, 0x7806, 0x6013, 0x0000, 0x6803, 0x0000,
-+ 0x6837, 0x0116, 0x683b, 0x0000, 0x6008, 0x68b2, 0x2c00, 0x684a,
-+ 0x6018, 0x2078, 0x78a0, 0x8007, 0x7130, 0x6986, 0x6846, 0x7928,
-+ 0x698a, 0x792c, 0x698e, 0x7930, 0x6992, 0x7934, 0x6996, 0x6853,
-+ 0x003d, 0x7244, 0xa294, 0x0003, 0xa286, 0x0002, 0x1118, 0x684f,
-+ 0x0040, 0x0040, 0xa286, 0x0001, 0x1118, 0x684f, 0x0080, 0x0010,
-+ 0x684f, 0x0000, 0x20a9, 0x000a, 0x2001, 0xba90, 0xad90, 0x0015,
-+ 0x200c, 0x810f, 0x2112, 0x8000, 0x8210, 0x1f04, 0xa850, 0x200c,
-+ 0x6982, 0x8000, 0x200c, 0x697e, 0x080c, 0x53c9, 0x002e, 0x004e,
-+ 0x015e, 0x00fe, 0x00ee, 0x00de, 0x0005, 0x2001, 0xb40e, 0x2004,
-+ 0xd084, 0x0120, 0x080c, 0x15f4, 0x1904, 0xa816, 0x6013, 0x0100,
-+ 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x6c52, 0x080c, 0x7134,
-+ 0x0c28, 0x2069, 0xba92, 0x2d04, 0xa084, 0xff00, 0xa086, 0x1200,
-+ 0x11a8, 0x2069, 0xba80, 0x686c, 0xa084, 0x00ff, 0x0016, 0x6110,
-+ 0xa18c, 0x0700, 0xa10d, 0x6112, 0x001e, 0x6003, 0x0001, 0x6007,
-+ 0x0043, 0x080c, 0x6c52, 0x080c, 0x7134, 0x0840, 0x6013, 0x0200,
-+ 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x6c52, 0x080c, 0x7134,
-+ 0x0804, 0xa85e, 0x2001, 0xb40d, 0x2004, 0xd0ec, 0x0120, 0x2011,
-+ 0x8049, 0x080c, 0x3e8a, 0x6013, 0x0300, 0x0010, 0x6013, 0x0100,
-+ 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x6c52, 0x080c, 0x7134,
-+ 0x0804, 0xa85e, 0x6013, 0x0500, 0x0c98, 0x6013, 0x0600, 0x0804,
-+ 0xa879, 0x6013, 0x0200, 0x0804, 0xa879, 0xa186, 0x0013, 0x1170,
-+ 0x6004, 0xa08a, 0x0040, 0x0a0c, 0x1511, 0xa08a, 0x0053, 0x1a0c,
-+ 0x1511, 0xa082, 0x0040, 0x2008, 0x0804, 0xa94f, 0xa186, 0x0051,
-+ 0x0138, 0xa186, 0x0047, 0x11d8, 0x6004, 0xa086, 0x0041, 0x0518,
-+ 0x2001, 0x0109, 0x2004, 0xd084, 0x01f0, 0x0126, 0x2091, 0x2800,
-+ 0x0006, 0x0016, 0x0026, 0x080c, 0x6b39, 0x002e, 0x001e, 0x000e,
-+ 0x012e, 0x6000, 0xa086, 0x0002, 0x1170, 0x0804, 0xa992, 0xa186,
-+ 0x0027, 0x0120, 0xa186, 0x0014, 0x190c, 0x1511, 0x6004, 0xa082,
-+ 0x0040, 0x2008, 0x001a, 0x080c, 0x8606, 0x0005, 0xa919, 0xa91b,
-+ 0xa91b, 0xa93f, 0xa919, 0xa919, 0xa919, 0xa919, 0xa919, 0xa919,
-+ 0xa919, 0xa919, 0xa919, 0xa919, 0xa919, 0xa919, 0xa919, 0xa919,
-+ 0xa919, 0x080c, 0x1511, 0x080c, 0x7055, 0x080c, 0x7134, 0x0036,
-+ 0x00d6, 0x6010, 0xa06d, 0x01c0, 0xad84, 0xf000, 0x01a8, 0x6003,
-+ 0x0002, 0x6018, 0x2004, 0xd0bc, 0x1178, 0x2019, 0x0004, 0x080c,
-+ 0xb01c, 0x6013, 0x0000, 0x6014, 0xa005, 0x1120, 0x2001, 0xb6b7,
-+ 0x2004, 0x6016, 0x6003, 0x0007, 0x00de, 0x003e, 0x0005, 0x00d6,
-+ 0x080c, 0x7055, 0x080c, 0x7134, 0x080c, 0x9beb, 0x0120, 0x6010,
-+ 0x2068, 0x080c, 0x160b, 0x080c, 0x9dae, 0x00de, 0x0005, 0x0002,
-+ 0xa963, 0xa980, 0xa96c, 0xa98c, 0xa963, 0xa963, 0xa963, 0xa963,
-+ 0xa963, 0xa963, 0xa963, 0xa963, 0xa963, 0xa963, 0xa963, 0xa963,
-+ 0xa963, 0xa963, 0xa963, 0x080c, 0x1511, 0x6010, 0xa088, 0x0013,
-+ 0x2104, 0xa085, 0x0400, 0x200a, 0x080c, 0x7055, 0x6010, 0xa080,
-+ 0x0013, 0x2004, 0xd0b4, 0x0138, 0x6003, 0x0007, 0x2009, 0x0043,
-+ 0x080c, 0x85ef, 0x0010, 0x6003, 0x0002, 0x080c, 0x7134, 0x0005,
-+ 0x080c, 0x7055, 0x080c, 0xb25a, 0x1120, 0x080c, 0x6ab4, 0x080c,
-+ 0x85c0, 0x080c, 0x7134, 0x0005, 0x080c, 0x7055, 0x2009, 0x0041,
-+ 0x0804, 0xaadb, 0xa182, 0x0040, 0x0002, 0xa9a8, 0xa9aa, 0xa9a8,
-+ 0xa9a8, 0xa9a8, 0xa9a8, 0xa9a8, 0xa9ab, 0xa9a8, 0xa9a8, 0xa9a8,
-+ 0xa9a8, 0xa9a8, 0xa9a8, 0xa9a8, 0xa9a8, 0xa9a8, 0xa9b6, 0xa9a8,
-+ 0x080c, 0x1511, 0x0005, 0x6003, 0x0004, 0x6110, 0x20e1, 0x0005,
-+ 0x3d18, 0x3e20, 0x2c10, 0x080c, 0x1856, 0x0005, 0x00d6, 0x080c,
-+ 0x6ab4, 0x00de, 0x080c, 0xb2bd, 0x080c, 0x85c0, 0x0005, 0xa182,
-+ 0x0040, 0x0002, 0xa9d5, 0xa9d5, 0xa9d5, 0xa9d5, 0xa9d5, 0xa9d5,
-+ 0xa9d5, 0xa9d7, 0xa9d5, 0xa9da, 0xaa13, 0xa9d5, 0xa9d5, 0xa9d5,
-+ 0xa9d5, 0xaa13, 0xa9d5, 0xa9d5, 0xa9d5, 0x080c, 0x1511, 0x080c,
-+ 0x8606, 0x0005, 0x2001, 0xb472, 0x2004, 0xd0e4, 0x0158, 0x2001,
-+ 0x0100, 0x2004, 0xa082, 0x0005, 0x0228, 0x2001, 0x011f, 0x2004,
-+ 0x6036, 0x0010, 0x6037, 0x0000, 0x080c, 0x70e7, 0x080c, 0x71f1,
-+ 0x6010, 0x00d6, 0x2068, 0x684c, 0xd0fc, 0x0150, 0xa08c, 0x0003,
-+ 0xa18e, 0x0002, 0x0168, 0x2009, 0x0041, 0x00de, 0x0804, 0xaadb,
-+ 0x6003, 0x0007, 0x6017, 0x0000, 0x080c, 0x6ab4, 0x00de, 0x0005,
-+ 0x080c, 0xb25a, 0x0110, 0x00de, 0x0005, 0x080c, 0x6ab4, 0x080c,
-+ 0x85c0, 0x00de, 0x0ca0, 0x0036, 0x080c, 0x70e7, 0x080c, 0x71f1,
-+ 0x6010, 0x00d6, 0x2068, 0x6018, 0x2004, 0xd0bc, 0x0188, 0x684c,
-+ 0xa084, 0x0003, 0xa086, 0x0002, 0x0140, 0x687c, 0x632c, 0xa31a,
-+ 0x632e, 0x6880, 0x6328, 0xa31b, 0x632a, 0x6003, 0x0002, 0x0080,
-+ 0x2019, 0x0004, 0x080c, 0xb01c, 0x6014, 0xa005, 0x1128, 0x2001,
-+ 0xb6b7, 0x2004, 0x8003, 0x6016, 0x6013, 0x0000, 0x6003, 0x0007,
-+ 0x00de, 0x003e, 0x0005, 0xa186, 0x0013, 0x1150, 0x6004, 0xa086,
-+ 0x0042, 0x190c, 0x1511, 0x080c, 0x7055, 0x080c, 0x7134, 0x0005,
-+ 0xa186, 0x0027, 0x0118, 0xa186, 0x0014, 0x1180, 0x6004, 0xa086,
-+ 0x0042, 0x190c, 0x1511, 0x2001, 0x0007, 0x080c, 0x4eeb, 0x080c,
-+ 0x7055, 0x080c, 0x9dae, 0x080c, 0x7134, 0x0005, 0xa182, 0x0040,
-+ 0x0002, 0xaa7c, 0xaa7c, 0xaa7c, 0xaa7c, 0xaa7c, 0xaa7c, 0xaa7c,
-+ 0xaa7e, 0xaa8a, 0xaa7c, 0xaa7c, 0xaa7c, 0xaa7c, 0xaa7c, 0xaa7c,
-+ 0xaa7c, 0xaa7c, 0xaa7c, 0xaa7c, 0x080c, 0x1511, 0x0036, 0x0046,
-+ 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10, 0x080c, 0x1856, 0x004e,
-+ 0x003e, 0x0005, 0x6010, 0x00d6, 0x2068, 0x6810, 0x6a14, 0x0006,
-+ 0x0046, 0x0056, 0x6c7c, 0xa422, 0x6d80, 0x2200, 0xa52b, 0x602c,
-+ 0xa420, 0x642e, 0x6028, 0xa529, 0x652a, 0x005e, 0x004e, 0x000e,
-+ 0xa20d, 0x1178, 0x684c, 0xd0fc, 0x0120, 0x2009, 0x0041, 0x00de,
-+ 0x0490, 0x6003, 0x0007, 0x6017, 0x0000, 0x080c, 0x6ab4, 0x00de,
-+ 0x0005, 0x0006, 0x00f6, 0x2c78, 0x080c, 0x52c6, 0x00fe, 0x000e,
-+ 0x0120, 0x6003, 0x0002, 0x00de, 0x0005, 0x2009, 0xb40d, 0x210c,
-+ 0xd19c, 0x0118, 0x6003, 0x0007, 0x0010, 0x6003, 0x0006, 0x0021,
-+ 0x080c, 0x6ab6, 0x00de, 0x0005, 0xd2fc, 0x0140, 0x8002, 0x8000,
-+ 0x8212, 0xa291, 0x0000, 0x2009, 0x0009, 0x0010, 0x2009, 0x0015,
-+ 0x6a6a, 0x6866, 0x0005, 0xa182, 0x0040, 0x0208, 0x0062, 0xa186,
-+ 0x0013, 0x0120, 0xa186, 0x0014, 0x190c, 0x1511, 0x6020, 0xd0dc,
-+ 0x090c, 0x1511, 0x0005, 0xaafe, 0xab05, 0xab11, 0xab1d, 0xaafe,
-+ 0xaafe, 0xaafe, 0xab2c, 0xaafe, 0xab00, 0xab00, 0xaafe, 0xaafe,
-+ 0xaafe, 0xaafe, 0xab00, 0xaafe, 0xab00, 0xaafe, 0x080c, 0x1511,
-+ 0x6020, 0xd0dc, 0x090c, 0x1511, 0x0005, 0x6003, 0x0001, 0x6106,
-+ 0x080c, 0x6c52, 0x0126, 0x2091, 0x8000, 0x080c, 0x7134, 0x012e,
-+ 0x0005, 0x6003, 0x0001, 0x6106, 0x080c, 0x6c52, 0x0126, 0x2091,
-+ 0x8000, 0x080c, 0x7134, 0x012e, 0x0005, 0x6003, 0x0003, 0x6106,
-+ 0x2c10, 0x080c, 0x1f7a, 0x0126, 0x2091, 0x8000, 0x080c, 0x6cb5,
-+ 0x080c, 0x71f1, 0x012e, 0x0005, 0xa016, 0x080c, 0x1856, 0x0005,
-+ 0x0126, 0x2091, 0x8000, 0x0036, 0x00d6, 0xa182, 0x0040, 0x0023,
-+ 0x00de, 0x003e, 0x012e, 0x0005, 0xab4c, 0xab4e, 0xab60, 0xab7b,
-+ 0xab4c, 0xab4c, 0xab4c, 0xab90, 0xab4c, 0xab4c, 0xab4c, 0xab4c,
-+ 0xab4c, 0xab4c, 0xab4c, 0xab4c, 0x080c, 0x1511, 0x6010, 0x2068,
-+ 0x684c, 0xd0fc, 0x01f8, 0xa09c, 0x0003, 0xa39e, 0x0003, 0x01d0,
-+ 0x6003, 0x0001, 0x6106, 0x080c, 0x6c52, 0x080c, 0x7134, 0x0498,
-+ 0x6010, 0x2068, 0x684c, 0xd0fc, 0x0168, 0xa09c, 0x0003, 0xa39e,
-+ 0x0003, 0x0140, 0x6003, 0x0001, 0x6106, 0x080c, 0x6c52, 0x080c,
-+ 0x7134, 0x0408, 0x6013, 0x0000, 0x6017, 0x0000, 0x2019, 0x0004,
-+ 0x080c, 0xb01c, 0x00c0, 0x6010, 0x2068, 0x684c, 0xd0fc, 0x0d90,
-+ 0xa09c, 0x0003, 0xa39e, 0x0003, 0x0d68, 0x6003, 0x0003, 0x6106,
-+ 0x2c10, 0x080c, 0x1f7a, 0x080c, 0x6cb5, 0x080c, 0x71f1, 0x0018,
-+ 0xa016, 0x080c, 0x1856, 0x0005, 0x080c, 0x7055, 0x6110, 0x81ff,
-+ 0x0158, 0x00d6, 0x2168, 0x080c, 0xb303, 0x0036, 0x2019, 0x0029,
-+ 0x080c, 0xb01c, 0x003e, 0x00de, 0x080c, 0x9dae, 0x080c, 0x7134,
-+ 0x0005, 0x080c, 0x70e7, 0x6110, 0x81ff, 0x0158, 0x00d6, 0x2168,
-+ 0x080c, 0xb303, 0x0036, 0x2019, 0x0029, 0x080c, 0xb01c, 0x003e,
-+ 0x00de, 0x080c, 0x9dae, 0x080c, 0x71f1, 0x0005, 0xa182, 0x0085,
-+ 0x0002, 0xabca, 0xabc8, 0xabc8, 0xabd6, 0xabc8, 0xabc8, 0xabc8,
-+ 0x080c, 0x1511, 0x6003, 0x000b, 0x6106, 0x080c, 0x6c52, 0x0126,
-+ 0x2091, 0x8000, 0x080c, 0x7134, 0x012e, 0x0005, 0x0026, 0x00e6,
-+ 0x080c, 0xb253, 0x0118, 0x080c, 0x85c0, 0x00c8, 0x2071, 0xba80,
-+ 0x7224, 0x6212, 0x7220, 0x080c, 0xaeca, 0x0118, 0x6007, 0x0086,
-+ 0x0040, 0x6007, 0x0087, 0x7224, 0xa296, 0xffff, 0x1110, 0x6007,
-+ 0x0086, 0x6003, 0x0001, 0x080c, 0x6c52, 0x080c, 0x7134, 0x00ee,
-+ 0x002e, 0x0005, 0xa186, 0x0013, 0x1160, 0x6004, 0xa08a, 0x0085,
-+ 0x0a0c, 0x1511, 0xa08a, 0x008c, 0x1a0c, 0x1511, 0xa082, 0x0085,
-+ 0x00a2, 0xa186, 0x0027, 0x0130, 0xa186, 0x0014, 0x0118, 0x080c,
-+ 0x8606, 0x0050, 0x2001, 0x0007, 0x080c, 0x4eeb, 0x080c, 0x7055,
-+ 0x080c, 0x9dae, 0x080c, 0x7134, 0x0005, 0xac24, 0xac26, 0xac26,
-+ 0xac24, 0xac24, 0xac24, 0xac24, 0x080c, 0x1511, 0x080c, 0x7055,
-+ 0x080c, 0x9dae, 0x080c, 0x7134, 0x0005, 0xa182, 0x0085, 0x0a0c,
-+ 0x1511, 0xa182, 0x008c, 0x1a0c, 0x1511, 0xa182, 0x0085, 0x0002,
-+ 0xac3f, 0xac3f, 0xac3f, 0xac41, 0xac3f, 0xac3f, 0xac3f, 0x080c,
-+ 0x1511, 0x0005, 0xa186, 0x0013, 0x0148, 0xa186, 0x0014, 0x0130,
-+ 0xa186, 0x0027, 0x0118, 0x080c, 0x8606, 0x0030, 0x080c, 0x7055,
-+ 0x080c, 0x9dae, 0x080c, 0x7134, 0x0005, 0x0036, 0x080c, 0xb2bd,
-+ 0x603f, 0x0000, 0x2019, 0x000b, 0x0031, 0x601f, 0x0006, 0x6003,
-+ 0x0007, 0x003e, 0x0005, 0x0126, 0x0036, 0x2091, 0x8000, 0x0086,
-+ 0x2c40, 0x0096, 0x2049, 0x0000, 0x080c, 0x80da, 0x009e, 0x008e,
-+ 0x1578, 0x0076, 0x2c38, 0x080c, 0x8179, 0x007e, 0x1548, 0x6000,
-+ 0xa086, 0x0000, 0x0528, 0x601c, 0xa086, 0x0007, 0x0508, 0x00d6,
-+ 0x6000, 0xa086, 0x0004, 0x1150, 0x080c, 0xb2bd, 0x601f, 0x0007,
-+ 0x2001, 0xb6b6, 0x2004, 0x6016, 0x080c, 0x1944, 0x6010, 0x2068,
-+ 0x080c, 0x9beb, 0x0110, 0x080c, 0xb01c, 0x00de, 0x6013, 0x0000,
-+ 0x080c, 0xb2bd, 0x601f, 0x0007, 0x2001, 0xb6b6, 0x2004, 0x6016,
-+ 0x003e, 0x012e, 0x0005, 0x00f6, 0x00c6, 0x0036, 0x0156, 0x2079,
-+ 0xba80, 0x7938, 0x783c, 0x080c, 0x27e3, 0x15b0, 0x0016, 0x00c6,
-+ 0x080c, 0x4f6a, 0x1578, 0x001e, 0x002e, 0x0026, 0x0016, 0x2019,
-+ 0x0029, 0x080c, 0x823c, 0x080c, 0x6dba, 0x0076, 0x2039, 0x0000,
-+ 0x080c, 0x6cc7, 0x007e, 0x001e, 0x0076, 0x2039, 0x0000, 0x080c,
-+ 0xae05, 0x007e, 0x080c, 0x516b, 0x0026, 0x6204, 0xa294, 0xff00,
-+ 0x8217, 0xa286, 0x0006, 0x0118, 0xa286, 0x0004, 0x1118, 0x62a0,
-+ 0x080c, 0x2d19, 0x002e, 0x001e, 0x080c, 0x4bc5, 0x6612, 0x6516,
-+ 0xa006, 0x0010, 0x00ce, 0x001e, 0x015e, 0x003e, 0x00ce, 0x00fe,
-+ 0x0005, 0x00c6, 0x00d6, 0x00e6, 0x0016, 0x2009, 0xb421, 0x2104,
-+ 0xa086, 0x0074, 0x1904, 0xad3e, 0x2069, 0xba8e, 0x690c, 0xa182,
-+ 0x0100, 0x06c0, 0x6908, 0xa184, 0x8000, 0x05e8, 0x2001, 0xb69e,
-+ 0x2004, 0xa005, 0x1160, 0x6018, 0x2070, 0x7010, 0xa084, 0x00ff,
-+ 0x0118, 0x7000, 0xd0f4, 0x0118, 0xa184, 0x0800, 0x0560, 0x6910,
-+ 0xa18a, 0x0001, 0x0610, 0x6914, 0x2069, 0xbaae, 0x6904, 0x81ff,
-+ 0x1198, 0x690c, 0xa182, 0x0100, 0x02a8, 0x6908, 0x81ff, 0x1178,
-+ 0x6910, 0xa18a, 0x0001, 0x0288, 0x6918, 0xa18a, 0x0001, 0x0298,
-+ 0x00d0, 0x6013, 0x0100, 0x00a0, 0x6013, 0x0300, 0x0088, 0x6013,
-+ 0x0500, 0x0070, 0x6013, 0x0700, 0x0058, 0x6013, 0x0900, 0x0040,
-+ 0x6013, 0x0b00, 0x0028, 0x6013, 0x0f00, 0x0010, 0x6013, 0x2d00,
-+ 0xa085, 0x0001, 0x0008, 0xa006, 0x001e, 0x00ee, 0x00de, 0x00ce,
-+ 0x0005, 0x00c6, 0x00d6, 0x0026, 0x0036, 0x0156, 0x6218, 0x2268,
-+ 0x6b04, 0xa394, 0x00ff, 0xa286, 0x0006, 0x0190, 0xa286, 0x0004,
-+ 0x0178, 0xa394, 0xff00, 0x8217, 0xa286, 0x0006, 0x0148, 0xa286,
-+ 0x0004, 0x0130, 0x00c6, 0x2d60, 0x080c, 0x4f79, 0x00ce, 0x04c0,
-+ 0x2011, 0xba96, 0xad98, 0x000a, 0x20a9, 0x0004, 0x080c, 0x907a,
-+ 0x1580, 0x2011, 0xba9a, 0xad98, 0x0006, 0x20a9, 0x0004, 0x080c,
-+ 0x907a, 0x1538, 0x0046, 0x0016, 0x6aa0, 0xa294, 0x00ff, 0x8227,
-+ 0xa006, 0x2009, 0xb453, 0x210c, 0xd1a4, 0x0138, 0x2009, 0x0029,
-+ 0x080c, 0xb06b, 0x6800, 0xc0e5, 0x6802, 0x2019, 0x0029, 0x080c,
-+ 0x6dba, 0x0076, 0x2039, 0x0000, 0x080c, 0x6cc7, 0x2c08, 0x080c,
-+ 0xae05, 0x007e, 0x2001, 0x0007, 0x080c, 0x4eeb, 0x001e, 0x004e,
-+ 0xa006, 0x015e, 0x003e, 0x002e, 0x00de, 0x00ce, 0x0005, 0x00d6,
-+ 0x2069, 0xba8e, 0x6800, 0xa086, 0x0800, 0x0118, 0x6013, 0x0000,
-+ 0x0008, 0xa006, 0x00de, 0x0005, 0x00c6, 0x00f6, 0x0016, 0x0026,
-+ 0x0036, 0x0156, 0x2079, 0xba8c, 0x7930, 0x7834, 0x080c, 0x27e3,
-+ 0x11a0, 0x080c, 0x4f6a, 0x1188, 0x2011, 0xba90, 0xac98, 0x000a,
-+ 0x20a9, 0x0004, 0x080c, 0x907a, 0x1140, 0x2011, 0xba94, 0xac98,
-+ 0x0006, 0x20a9, 0x0004, 0x080c, 0x907a, 0x015e, 0x003e, 0x002e,
-+ 0x001e, 0x00fe, 0x00ce, 0x0005, 0x00c6, 0x0006, 0x0016, 0x0026,
-+ 0x0036, 0x0156, 0x2011, 0xba83, 0x2204, 0x8211, 0x220c, 0x080c,
-+ 0x27e3, 0x11a0, 0x080c, 0x4f6a, 0x1188, 0x2011, 0xba96, 0xac98,
-+ 0x000a, 0x20a9, 0x0004, 0x080c, 0x907a, 0x1140, 0x2011, 0xba9a,
-+ 0xac98, 0x0006, 0x20a9, 0x0004, 0x080c, 0x907a, 0x015e, 0x003e,
-+ 0x002e, 0x001e, 0x000e, 0x00ce, 0x0005, 0x00e6, 0x00c6, 0x0086,
-+ 0x0076, 0x0066, 0x0056, 0x0046, 0x0026, 0x0126, 0x2091, 0x8000,
-+ 0x2740, 0x2029, 0xb6e9, 0x252c, 0x2021, 0xb6ef, 0x2424, 0x2061,
-+ 0xbc00, 0x2071, 0xb400, 0x7648, 0x7068, 0x81ff, 0x0150, 0x0006,
-+ 0xa186, 0xb7f4, 0x000e, 0x0128, 0x8001, 0xa602, 0x1a04, 0xae86,
-+ 0x0018, 0xa606, 0x0904, 0xae86, 0x2100, 0xac06, 0x0904, 0xae7d,
-+ 0x080c, 0xb093, 0x0904, 0xae7d, 0x671c, 0xa786, 0x0001, 0x0904,
-+ 0xaea1, 0xa786, 0x0004, 0x0904, 0xaea1, 0xa786, 0x0007, 0x05e8,
-+ 0x2500, 0xac06, 0x05d0, 0x2400, 0xac06, 0x05b8, 0x080c, 0xb0a3,
-+ 0x15a0, 0x88ff, 0x0118, 0x6050, 0xa906, 0x1578, 0x00d6, 0x6000,
-+ 0xa086, 0x0004, 0x1120, 0x0016, 0x080c, 0x1944, 0x001e, 0xa786,
-+ 0x0008, 0x1148, 0x080c, 0x9de9, 0x1130, 0x080c, 0x8bbc, 0x00de,
-+ 0x080c, 0x9dae, 0x00d0, 0x6010, 0x2068, 0x080c, 0x9beb, 0x0190,
-+ 0xa786, 0x0003, 0x1528, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000,
-+ 0x080c, 0xb303, 0x0016, 0x080c, 0x9e5d, 0x080c, 0x53c9, 0x001e,
-+ 0x080c, 0x9da2, 0x00de, 0x080c, 0x9dae, 0xace0, 0x0018, 0x2001,
-+ 0xb417, 0x2004, 0xac02, 0x1210, 0x0804, 0xae19, 0x012e, 0x002e,
-+ 0x004e, 0x005e, 0x006e, 0x007e, 0x008e, 0x00ce, 0x00ee, 0x0005,
-+ 0xa786, 0x0006, 0x1150, 0xa386, 0x0005, 0x0128, 0x080c, 0xb303,
-+ 0x080c, 0xb01c, 0x08f8, 0x00de, 0x0c00, 0xa786, 0x000a, 0x0968,
-+ 0x0850, 0x080c, 0xb0a3, 0x19c8, 0x81ff, 0x09b8, 0xa180, 0x0001,
-+ 0x2004, 0xa086, 0x0018, 0x0130, 0xa180, 0x0001, 0x2004, 0xa086,
-+ 0x002d, 0x1958, 0x6000, 0xa086, 0x0002, 0x1938, 0x080c, 0x9dd8,
-+ 0x0130, 0x080c, 0x9de9, 0x1908, 0x080c, 0x8bbc, 0x0038, 0x080c,
-+ 0x2c86, 0x080c, 0x9de9, 0x1110, 0x080c, 0x8bbc, 0x080c, 0x9dae,
-+ 0x0804, 0xae7d, 0x00c6, 0x00e6, 0x0016, 0x2c08, 0x2170, 0xa006,
-+ 0x080c, 0xb03d, 0x001e, 0x0120, 0x601c, 0xa084, 0x000f, 0x001b,
-+ 0x00ee, 0x00ce, 0x0005, 0xaee3, 0xaee3, 0xaee3, 0xaee3, 0xaee3,
-+ 0xaee3, 0xaee5, 0xaee3, 0xa006, 0x0005, 0x0046, 0x0016, 0x7018,
-+ 0xa080, 0x0028, 0x2024, 0xa4a4, 0x00ff, 0x8427, 0x2c00, 0x2009,
-+ 0x0020, 0x080c, 0xb06b, 0x001e, 0x004e, 0x0036, 0x2019, 0x0002,
-+ 0x080c, 0xac63, 0x003e, 0xa085, 0x0001, 0x0005, 0x2001, 0x0001,
-+ 0x080c, 0x4eac, 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004,
-+ 0x2019, 0xb405, 0x2011, 0xba96, 0x080c, 0x907a, 0x003e, 0x002e,
-+ 0x001e, 0x015e, 0xa005, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0086,
-+ 0x0076, 0x0066, 0x0026, 0x0126, 0x2091, 0x8000, 0x2740, 0x2061,
-+ 0xbc00, 0x2079, 0x0001, 0x8fff, 0x0904, 0xaf72, 0x2071, 0xb400,
-+ 0x7648, 0x7068, 0x8001, 0xa602, 0x1a04, 0xaf72, 0x88ff, 0x0128,
-+ 0x2800, 0xac06, 0x15b0, 0x2079, 0x0000, 0x080c, 0xb093, 0x0588,
-+ 0x2400, 0xac06, 0x0570, 0x671c, 0xa786, 0x0006, 0x1550, 0xa786,
-+ 0x0007, 0x0538, 0x88ff, 0x1140, 0x6018, 0xa206, 0x1510, 0x85ff,
-+ 0x0118, 0x6050, 0xa106, 0x11e8, 0x00d6, 0x6000, 0xa086, 0x0004,
-+ 0x1150, 0x080c, 0xb2bd, 0x601f, 0x0007, 0x2001, 0xb6b6, 0x2004,
-+ 0x6016, 0x080c, 0x1944, 0x6010, 0x2068, 0x080c, 0x9beb, 0x0120,
-+ 0x0046, 0x080c, 0xb01c, 0x004e, 0x00de, 0x080c, 0x9dae, 0x88ff,
-+ 0x1198, 0xace0, 0x0018, 0x2001, 0xb417, 0x2004, 0xac02, 0x1210,
-+ 0x0804, 0xaf23, 0xa006, 0x012e, 0x002e, 0x006e, 0x007e, 0x008e,
-+ 0x00ce, 0x00ee, 0x00fe, 0x0005, 0xa8c5, 0x0001, 0x0ca0, 0x0076,
-+ 0x0056, 0x0086, 0x2041, 0x0000, 0x2029, 0x0001, 0x2c20, 0x2019,
-+ 0x0002, 0x6218, 0x0096, 0x2049, 0x0000, 0x080c, 0x80da, 0x009e,
-+ 0x008e, 0x2039, 0x0000, 0x080c, 0x8179, 0x080c, 0xaf14, 0x005e,
-+ 0x007e, 0x0005, 0x0026, 0x0046, 0x0056, 0x0076, 0x00c6, 0x0156,
-+ 0x2c20, 0x2128, 0x20a9, 0x007f, 0x2009, 0x0000, 0x0016, 0x0036,
-+ 0x080c, 0x4f6a, 0x11b0, 0x2c10, 0x0056, 0x0086, 0x2041, 0x0000,
-+ 0x2508, 0x2029, 0x0001, 0x0096, 0x2049, 0x0000, 0x080c, 0x80da,
-+ 0x009e, 0x008e, 0x2039, 0x0000, 0x080c, 0x8179, 0x080c, 0xaf14,
-+ 0x005e, 0x003e, 0x001e, 0x8108, 0x1f04, 0xafa6, 0x015e, 0x00ce,
-+ 0x007e, 0x005e, 0x004e, 0x002e, 0x0005, 0x0076, 0x0056, 0x6218,
-+ 0x0086, 0x2041, 0x0000, 0x2029, 0x0001, 0x2019, 0x0048, 0x0096,
-+ 0x2049, 0x0000, 0x080c, 0x80da, 0x009e, 0x008e, 0x2039, 0x0000,
-+ 0x080c, 0x8179, 0x2c20, 0x080c, 0xaf14, 0x005e, 0x007e, 0x0005,
-+ 0x0026, 0x0046, 0x0056, 0x0076, 0x00c6, 0x0156, 0x2c20, 0x20a9,
-+ 0x007f, 0x2009, 0x0000, 0x0016, 0x0036, 0x080c, 0x4f6a, 0x11c0,
-+ 0x2c10, 0x0086, 0x2041, 0x0000, 0x2828, 0x0046, 0x2021, 0x0001,
-+ 0x080c, 0xb29f, 0x004e, 0x0096, 0x2049, 0x0000, 0x080c, 0x80da,
-+ 0x009e, 0x008e, 0x2039, 0x0000, 0x080c, 0x8179, 0x080c, 0xaf14,
-+ 0x003e, 0x001e, 0x8108, 0x1f04, 0xaff3, 0x015e, 0x00ce, 0x007e,
-+ 0x005e, 0x004e, 0x002e, 0x0005, 0x0016, 0x00f6, 0x3800, 0xd08c,
-+ 0x0130, 0xad82, 0x1000, 0x02b0, 0xad82, 0xb400, 0x0230, 0xad82,
-+ 0xec00, 0x0280, 0xad82, 0xffff, 0x1268, 0x6800, 0xa07d, 0x0138,
-+ 0x6803, 0x0000, 0x6b52, 0x080c, 0x53c9, 0x2f68, 0x0cb0, 0x6b52,
-+ 0x080c, 0x53c9, 0x00fe, 0x001e, 0x0005, 0x00e6, 0x0046, 0x0036,
-+ 0x2061, 0xbc00, 0xa005, 0x1138, 0x2071, 0xb400, 0x7448, 0x7068,
-+ 0x8001, 0xa402, 0x12d8, 0x2100, 0xac06, 0x0168, 0x6000, 0xa086,
-+ 0x0000, 0x0148, 0x6008, 0xa206, 0x1130, 0x6018, 0xa1a0, 0x0006,
-+ 0x2424, 0xa406, 0x0140, 0xace0, 0x0018, 0x2001, 0xb417, 0x2004,
-+ 0xac02, 0x1220, 0x0c40, 0xa085, 0x0001, 0x0008, 0xa006, 0x003e,
-+ 0x004e, 0x00ee, 0x0005, 0x00d6, 0x0006, 0x080c, 0x15f4, 0x000e,
-+ 0x090c, 0x1511, 0x6837, 0x010d, 0x685e, 0x0026, 0x2010, 0x080c,
-+ 0x9bdb, 0x2001, 0x0000, 0x0120, 0x2200, 0xa080, 0x0014, 0x2004,
-+ 0x002e, 0x684a, 0x6956, 0x6c46, 0x684f, 0x0000, 0x2001, 0xb6be,
-+ 0x2004, 0x6852, 0xa006, 0x68b2, 0x6802, 0x683a, 0x685a, 0x080c,
-+ 0x53c9, 0x00de, 0x0005, 0x6700, 0xa786, 0x0000, 0x0158, 0xa786,
-+ 0x0001, 0x0140, 0xa786, 0x000a, 0x0128, 0xa786, 0x0009, 0x0110,
-+ 0xa085, 0x0001, 0x0005, 0x00e6, 0x6018, 0x2070, 0x70a0, 0xa206,
-+ 0x00ee, 0x0005, 0x0016, 0x6004, 0xa08e, 0x001e, 0x11a0, 0x8007,
-+ 0x6130, 0xa18c, 0x00ff, 0xa105, 0x6032, 0x6007, 0x0085, 0x6003,
-+ 0x000b, 0x601f, 0x0005, 0x2001, 0xb6b7, 0x2004, 0x6016, 0x080c,
-+ 0x6c52, 0x080c, 0x7134, 0x001e, 0x0005, 0xe000, 0xe000, 0x0005,
-+ 0x6020, 0xd0e4, 0x0158, 0xd0cc, 0x0118, 0x080c, 0x9ec6, 0x0030,
-+ 0x080c, 0xb2bd, 0x080c, 0x6ab4, 0x080c, 0x85c0, 0x0005, 0xa280,
-+ 0x0007, 0x2004, 0xa084, 0x000f, 0x0002, 0xb0e6, 0xb0e6, 0xb0e6,
-+ 0xb0eb, 0xb0e6, 0xb0e8, 0xb0e8, 0xb0e6, 0xb0e8, 0xa006, 0x0005,
-+ 0x00c6, 0x2260, 0x00ce, 0xa085, 0x0001, 0x0005, 0xa280, 0x0007,
-+ 0x2004, 0xa084, 0x000f, 0x0002, 0xb0fd, 0xb0fd, 0xb0fd, 0xb0fd,
-+ 0xb0fd, 0xb0fd, 0xb108, 0xb0fd, 0xb0fd, 0x6007, 0x003b, 0x602b,
-+ 0x0009, 0x6013, 0x2a00, 0x6003, 0x0001, 0x080c, 0x6c52, 0x0005,
-+ 0x00c6, 0x2260, 0x080c, 0xb2bd, 0x603f, 0x0000, 0x6020, 0xc0f4,
-+ 0xc0cc, 0x6022, 0x6037, 0x0000, 0x00ce, 0x00d6, 0x2268, 0xa186,
-+ 0x0007, 0x1904, 0xb163, 0x6810, 0xa005, 0x0138, 0xa080, 0x0013,
-+ 0x2004, 0xd0fc, 0x1110, 0x00de, 0x08c0, 0x6007, 0x003a, 0x6003,
-+ 0x0001, 0x080c, 0x6c52, 0x080c, 0x7134, 0x00c6, 0x2d60, 0x6100,
-+ 0xa186, 0x0002, 0x1904, 0xb1ec, 0x6010, 0xa005, 0x1138, 0x6000,
-+ 0xa086, 0x0007, 0x190c, 0x1511, 0x0804, 0xb1ec, 0xa08c, 0xf000,
-+ 0x1130, 0x0028, 0x2068, 0x6800, 0xa005, 0x1de0, 0x2d00, 0xa080,
-+ 0x0013, 0x2004, 0xa084, 0x0003, 0xa086, 0x0002, 0x1180, 0x6010,
-+ 0x2068, 0x684c, 0xc0dc, 0xc0f4, 0x684e, 0x6850, 0xc0f4, 0xc0fc,
-+ 0x6852, 0x2009, 0x0043, 0x080c, 0xaadb, 0x0804, 0xb1ec, 0x2009,
-+ 0x0041, 0x0804, 0xb1e6, 0xa186, 0x0005, 0x15f0, 0x6810, 0xa080,
-+ 0x0013, 0x2004, 0xd0bc, 0x1118, 0x00de, 0x0804, 0xb0fd, 0xd0b4,
-+ 0x0128, 0xd0fc, 0x090c, 0x1511, 0x0804, 0xb11b, 0x6007, 0x003a,
-+ 0x6003, 0x0001, 0x080c, 0x6c52, 0x080c, 0x7134, 0x00c6, 0x2d60,
-+ 0x6100, 0xa186, 0x0002, 0x0120, 0xa186, 0x0004, 0x1904, 0xb1ec,
-+ 0x2071, 0xb723, 0x7000, 0xa086, 0x0003, 0x1128, 0x7004, 0xac06,
-+ 0x1110, 0x7003, 0x0000, 0x6810, 0xa080, 0x0013, 0x200c, 0xc1f4,
-+ 0xc1dc, 0x2102, 0x8000, 0x200c, 0xc1f4, 0xc1fc, 0xc1bc, 0x2102,
-+ 0x2009, 0x0042, 0x0804, 0xb1e6, 0x0036, 0x00d6, 0x00d6, 0x080c,
-+ 0x15f4, 0x003e, 0x090c, 0x1511, 0x6837, 0x010d, 0x6803, 0x0000,
-+ 0x683b, 0x0000, 0x685b, 0x0000, 0x6b5e, 0x6857, 0x0045, 0x2c00,
-+ 0x6862, 0x6034, 0x6872, 0x2360, 0x6020, 0xc0dd, 0x6022, 0x6018,
-+ 0xa080, 0x0028, 0x2004, 0xa084, 0x00ff, 0x8007, 0x6350, 0x6b4a,
-+ 0x6846, 0x684f, 0x0000, 0x6853, 0x0000, 0x6d6a, 0x6e66, 0x686f,
-+ 0x0001, 0x080c, 0x53c9, 0x2019, 0x0045, 0x6008, 0x2068, 0x080c,
-+ 0xac63, 0x2d00, 0x600a, 0x601f, 0x0006, 0x6003, 0x0007, 0x6017,
-+ 0x0000, 0x603f, 0x0000, 0x00de, 0x003e, 0x0038, 0x603f, 0x0000,
-+ 0x6003, 0x0007, 0x080c, 0xaadb, 0x00ce, 0x00de, 0x0005, 0xa186,
-+ 0x0013, 0x1128, 0x6004, 0xa082, 0x0085, 0x2008, 0x00c2, 0xa186,
-+ 0x0027, 0x1178, 0x080c, 0x7055, 0x0036, 0x00d6, 0x6010, 0x2068,
-+ 0x2019, 0x0004, 0x080c, 0xb01c, 0x00de, 0x003e, 0x080c, 0x7134,
-+ 0x0005, 0xa186, 0x0014, 0x0d70, 0x080c, 0x8606, 0x0005, 0xb218,
-+ 0xb216, 0xb216, 0xb216, 0xb216, 0xb216, 0xb218, 0x080c, 0x1511,
-+ 0x080c, 0x7055, 0x6003, 0x000c, 0x080c, 0x7134, 0x0005, 0xa182,
-+ 0x008c, 0x1220, 0xa182, 0x0085, 0x0208, 0x001a, 0x080c, 0x8606,
-+ 0x0005, 0xb230, 0xb230, 0xb230, 0xb230, 0xb232, 0xb250, 0xb230,
-+ 0x080c, 0x1511, 0x00d6, 0x2c68, 0x080c, 0x856a, 0x01a0, 0x6003,
-+ 0x0001, 0x6007, 0x001e, 0x2009, 0xba8e, 0x210c, 0x6136, 0x2009,
-+ 0xba8f, 0x210c, 0x613a, 0x600b, 0xffff, 0x6918, 0x611a, 0x601f,
-+ 0x0004, 0x080c, 0x6c52, 0x2d60, 0x080c, 0x85c0, 0x00de, 0x0005,
-+ 0x080c, 0x85c0, 0x0005, 0x00e6, 0x6018, 0x2070, 0x7000, 0xd0ec,
-+ 0x00ee, 0x0005, 0x6010, 0xa08c, 0xf000, 0x0904, 0xb29e, 0xa080,
-+ 0x0013, 0x200c, 0xd1ec, 0x05d0, 0x2001, 0xb472, 0x2004, 0xd0ec,
-+ 0x05a8, 0x6003, 0x0002, 0x6020, 0xc0e5, 0x6022, 0xd1ac, 0x0180,
-+ 0x00f6, 0x2c78, 0x080c, 0x52c2, 0x00fe, 0x0150, 0x2001, 0xb6b8,
-+ 0x2004, 0x603e, 0x2009, 0xb472, 0x210c, 0xd1f4, 0x11e8, 0x0080,
-+ 0x2009, 0xb472, 0x210c, 0xd1f4, 0x0128, 0x6020, 0xc0e4, 0x6022,
-+ 0xa006, 0x00a0, 0x2001, 0xb6b8, 0x200c, 0x8103, 0xa100, 0x603e,
-+ 0x6018, 0xa088, 0x002b, 0x2104, 0xa005, 0x0118, 0xa088, 0x0003,
-+ 0x0cd0, 0x2c0a, 0x600f, 0x0000, 0xa085, 0x0001, 0x0005, 0x0016,
-+ 0x00c6, 0x00e6, 0x6150, 0xa2f0, 0x002b, 0x2e04, 0x2060, 0x8cff,
-+ 0x0180, 0x84ff, 0x1118, 0x6050, 0xa106, 0x1138, 0x600c, 0x2072,
-+ 0x080c, 0x6ab4, 0x080c, 0x85c0, 0x0010, 0xacf0, 0x0003, 0x2e64,
-+ 0x0c70, 0x00ee, 0x00ce, 0x001e, 0x0005, 0x00d6, 0x6018, 0xa0e8,
-+ 0x002b, 0x2d04, 0xa005, 0x0140, 0xac06, 0x0120, 0x2d04, 0xa0e8,
-+ 0x0003, 0x0cb8, 0x600c, 0x206a, 0x00de, 0x0005, 0x0026, 0x0036,
-+ 0x0156, 0x2011, 0xb428, 0x2204, 0xa084, 0x00ff, 0x2019, 0xba8e,
-+ 0x2334, 0xa636, 0x11d8, 0x8318, 0x2334, 0x2204, 0xa084, 0xff00,
-+ 0xa636, 0x11a0, 0x2011, 0xba90, 0x6018, 0xa098, 0x000a, 0x20a9,
-+ 0x0004, 0x080c, 0x907a, 0x1150, 0x2011, 0xba94, 0x6018, 0xa098,
-+ 0x0006, 0x20a9, 0x0004, 0x080c, 0x907a, 0x1100, 0x015e, 0x003e,
-+ 0x002e, 0x0005, 0x00e6, 0x2071, 0xb400, 0x080c, 0x4b80, 0x080c,
-+ 0x2a7e, 0x00ee, 0x0005, 0x00e6, 0x6018, 0x2070, 0x7000, 0xd0fc,
-+ 0x0108, 0x0011, 0x00ee, 0x0005, 0x6850, 0xc0e5, 0x6852, 0x0005,
-+ 0x00e6, 0x00c6, 0x0076, 0x0066, 0x0056, 0x0046, 0x0026, 0x0016,
-+ 0x0126, 0x2091, 0x8000, 0x2029, 0xb6e9, 0x252c, 0x2021, 0xb6ef,
-+ 0x2424, 0x2061, 0xbc00, 0x2071, 0xb400, 0x7648, 0x7068, 0xa606,
-+ 0x0578, 0x671c, 0xa786, 0x0001, 0x0118, 0xa786, 0x0008, 0x1500,
-+ 0x2500, 0xac06, 0x01e8, 0x2400, 0xac06, 0x01d0, 0x080c, 0xb093,
-+ 0x01b8, 0x080c, 0xb0a3, 0x11a0, 0x6000, 0xa086, 0x0004, 0x1120,
-+ 0x0016, 0x080c, 0x1944, 0x001e, 0x080c, 0x9dd8, 0x1110, 0x080c,
-+ 0x2c86, 0x080c, 0x9de9, 0x1110, 0x080c, 0x8bbc, 0x080c, 0x9dae,
-+ 0xace0, 0x0018, 0x2001, 0xb417, 0x2004, 0xac02, 0x1208, 0x0858,
-+ 0x012e, 0x001e, 0x002e, 0x004e, 0x005e, 0x006e, 0x007e, 0x00ce,
-+ 0x00ee, 0x0005, 0x0126, 0x0006, 0x00e6, 0x0016, 0x2091, 0x8000,
-+ 0x2071, 0xb440, 0xd5a4, 0x0118, 0x7034, 0x8000, 0x7036, 0xd5b4,
-+ 0x0118, 0x7030, 0x8000, 0x7032, 0xd5ac, 0x0178, 0x2500, 0xa084,
-+ 0x0007, 0xa08e, 0x0003, 0x0148, 0xa08e, 0x0004, 0x0130, 0xa08e,
-+ 0x0005, 0x0118, 0x2071, 0xb44a, 0x04c9, 0x001e, 0x00ee, 0x000e,
-+ 0x012e, 0x0005, 0x0126, 0x0006, 0x00e6, 0x0016, 0x2091, 0x8000,
-+ 0x2071, 0xb440, 0xd5a4, 0x0118, 0x7034, 0x8000, 0x7036, 0xd5b4,
-+ 0x0118, 0x7030, 0x8000, 0x7032, 0xd5ac, 0x0178, 0x2500, 0xa084,
-+ 0x0007, 0xa08e, 0x0003, 0x0148, 0xa08e, 0x0004, 0x0130, 0xa08e,
-+ 0x0005, 0x0118, 0x2071, 0xb44a, 0x0089, 0x001e, 0x00ee, 0x000e,
-+ 0x012e, 0x0005, 0x0126, 0x0006, 0x00e6, 0x2091, 0x8000, 0x2071,
-+ 0xb442, 0x0021, 0x00ee, 0x000e, 0x012e, 0x0005, 0x2e04, 0x8000,
-+ 0x2072, 0x1220, 0x8e70, 0x2e04, 0x8000, 0x2072, 0x0005, 0x00e6,
-+ 0x2071, 0xb440, 0x0c99, 0x00ee, 0x0005, 0x00e6, 0x2071, 0xb444,
-+ 0x0c69, 0x00ee, 0x0005, 0x0126, 0x0006, 0x00e6, 0x2091, 0x8000,
-+ 0x2071, 0xb440, 0x7044, 0x8000, 0x7046, 0x00ee, 0x000e, 0x012e,
-+ 0x0005, 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040,
-+ 0x0080, 0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000,
-+ 0x8000, 0x622c
-+};
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/scsi/isp/asm_2300.h 2003-07-19 17:06:33.000000000 -0700
-@@ -0,0 +1,6195 @@
-+/* @(#)asm_2300.h 1.6 */
-+/*
-+ * Copyright (C) 2001 Qlogic, Inc.
-+ * All rights reserved.
-+ *
-+ * Redistribution and use in source and binary forms are permitted provided
-+ * that the following conditions are met:
-+ * 1. Redistribution of source code must retain the above copyright
-+ * notice, this list of conditions and the following disclaimer.
-+ * 2. Redistribution in binary form must reproduce the above copyright
-+ * notice, this list of conditions and the following disclaimer in the
-+ * documentation and/or other materials provided with the distribution.
-+ * 3. The name of the author may not be used to endorse or promote products
-+ * derived from this software without specific prior written permission
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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, 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) HOWEVER CAUSED AND ON ANY
-+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-+ */
-+
-+/************************************************************************
-+ * *
-+ * --- ISP2300 Initiator/Target Firmware --- *
-+ * with Fabric (Public Loop), Point-point, and *
-+ * expanded LUN addressing for FCTAPE *
-+ * *
-+ ************************************************************************/
-+/*
-+ * Firmware Version 3.01.20 (15:30 Dec 19, 2002)
-+ */
-+static const u_int16_t isp_2300_risc_code[] = {
-+ 0x0470, 0x0000, 0x0000, 0xc060, 0x0000, 0x0003, 0x0001, 0x0014,
-+ 0x0017, 0x2043, 0x4f50, 0x5952, 0x4947, 0x4854, 0x2032, 0x3030,
-+ 0x3120, 0x514c, 0x4f47, 0x4943, 0x2043, 0x4f52, 0x504f, 0x5241,
-+ 0x5449, 0x4f4e, 0x2049, 0x5350, 0x3233, 0x3030, 0x2046, 0x6972,
-+ 0x6d77, 0x6172, 0x6520, 0x2056, 0x6572, 0x7369, 0x6f6e, 0x2030,
-+ 0x332e, 0x3031, 0x2e32, 0x3020, 0x2020, 0x2020, 0x2400, 0x20a9,
-+ 0x000f, 0x2001, 0x0000, 0x400f, 0x2091, 0x2200, 0x20a9, 0x000f,
-+ 0x2001, 0x0000, 0x400f, 0x2091, 0x2400, 0x20a9, 0x000f, 0x2001,
-+ 0x0000, 0x400f, 0x2091, 0x2600, 0x20a9, 0x000f, 0x2001, 0x0000,
-+ 0x400f, 0x2091, 0x2800, 0x20a9, 0x000f, 0x2001, 0x0000, 0x400f,
-+ 0x2091, 0x2a00, 0x20a9, 0x000f, 0x2001, 0x0000, 0x400f, 0x2091,
-+ 0x2c00, 0x20a9, 0x000f, 0x2001, 0x0000, 0x400f, 0x2091, 0x2e00,
-+ 0x20a9, 0x000f, 0x2001, 0x0000, 0x400f, 0x2091, 0x2000, 0x2001,
-+ 0x0000, 0x20c1, 0x0004, 0x2001, 0x017f, 0x2003, 0x0000, 0x20c9,
-+ 0x14ff, 0x2059, 0x0000, 0x2b78, 0x7883, 0x0004, 0x2089, 0x240d,
-+ 0x2051, 0x1100, 0x2a70, 0x20e1, 0x0001, 0x20e9, 0x0001, 0x2029,
-+ 0x45c0, 0x2031, 0xffff, 0x2039, 0x45a9, 0x2021, 0x0200, 0x20e9,
-+ 0x0001, 0x20a1, 0x1000, 0x900e, 0x20a9, 0x05c0, 0x4104, 0x7566,
-+ 0x766a, 0x7762, 0x746e, 0x7472, 0x00e6, 0x2071, 0x13a1, 0x2472,
-+ 0x00ee, 0x20a1, 0x15c0, 0x7168, 0x810d, 0x810d, 0x810d, 0x810d,
-+ 0x918c, 0x000f, 0x2001, 0x0001, 0x9112, 0x900e, 0x21a8, 0x4104,
-+ 0x8211, 0x1de0, 0x7168, 0x3400, 0x8001, 0x9102, 0x0120, 0x0218,
-+ 0x20a8, 0x900e, 0x4104, 0x2009, 0x1100, 0x810d, 0x810d, 0x810d,
-+ 0x810d, 0x810d, 0x918c, 0x001f, 0x2001, 0x0001, 0x9112, 0x20e9,
-+ 0x0001, 0x20a1, 0x0800, 0x900e, 0x20a9, 0x0800, 0x4104, 0x8211,
-+ 0x1dd8, 0x2009, 0x1100, 0x3400, 0x9102, 0x0120, 0x0218, 0x20a8,
-+ 0x900e, 0x4104, 0x080c, 0x0f11, 0x080c, 0x10cf, 0x080c, 0x15fe,
-+ 0x080c, 0x0d19, 0x080c, 0x50f4, 0x080c, 0x8e7a, 0x080c, 0x0e85,
-+ 0x080c, 0x2a8c, 0x080c, 0x65b0, 0x080c, 0x58d0, 0x080c, 0x7133,
-+ 0x080c, 0x1c09, 0x080c, 0x7420, 0x080c, 0x6bb9, 0x080c, 0x19df,
-+ 0x080c, 0x1b7a, 0x080c, 0x1bfe, 0x2091, 0x3009, 0x7883, 0x0000,
-+ 0x1004, 0x0910, 0x7880, 0x9086, 0x0002, 0x1190, 0x7883, 0x4000,
-+ 0x7837, 0x4000, 0x7833, 0x0010, 0x0e04, 0x0904, 0x2091, 0x5000,
-+ 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x0fcd,
-+ 0x2a70, 0x7003, 0x0000, 0x2a70, 0x7000, 0x908e, 0x0003, 0x1168,
-+ 0x080c, 0x3fa0, 0x080c, 0x2aa2, 0x080c, 0x6610, 0x080c, 0x5dab,
-+ 0x080c, 0x715a, 0x080c, 0x23a5, 0x0c70, 0x000b, 0x0c88, 0x0931,
-+ 0x0932, 0x0a98, 0x092f, 0x0b68, 0x0d18, 0x0d18, 0x0d18, 0x080c,
-+ 0x0d7e, 0x0005, 0x0126, 0x00f6, 0x2091, 0x8000, 0x7000, 0x9086,
-+ 0x0001, 0x1904, 0x0a76, 0x7034, 0xd0b4, 0x1130, 0x0026, 0x2011,
-+ 0x0080, 0x080c, 0x0e3a, 0x002e, 0x080c, 0x62e4, 0x0150, 0x080c,
-+ 0x630a, 0x1580, 0x2079, 0x0100, 0x7828, 0x9085, 0x1800, 0x782a,
-+ 0x0448, 0x080c, 0x621a, 0x7000, 0x9086, 0x0001, 0x1904, 0x0a76,
-+ 0x7090, 0x9086, 0x0028, 0x1904, 0x0a76, 0x2001, 0x0161, 0x2003,
-+ 0x0001, 0x2079, 0x0100, 0x7827, 0xffff, 0x7a28, 0x9295, 0x1e2f,
-+ 0x7a2a, 0x2011, 0x61aa, 0x080c, 0x71fa, 0x2011, 0x619d, 0x080c,
-+ 0x72bf, 0x2011, 0x4f57, 0x080c, 0x71fa, 0x2011, 0x8030, 0x901e,
-+ 0x738e, 0x00d8, 0x080c, 0x483b, 0x2079, 0x0100, 0x7844, 0x9005,
-+ 0x1904, 0x0a76, 0x2011, 0x4f57, 0x080c, 0x71fa, 0x2001, 0x0265,
-+ 0x2001, 0x0205, 0x2003, 0x0000, 0x780f, 0x006b, 0x7840, 0x9084,
-+ 0xfffb, 0x7842, 0x2011, 0x8010, 0x73d4, 0x080c, 0x2261, 0x080c,
-+ 0x3f23, 0x7240, 0xc284, 0x7242, 0x2001, 0x110c, 0x200c, 0xc1ac,
-+ 0xc1cc, 0x2102, 0x080c, 0x877f, 0x2011, 0x0004, 0x080c, 0xa948,
-+ 0x080c, 0x57d9, 0x080c, 0x62e4, 0x1120, 0x080c, 0x22a5, 0x02f0,
-+ 0x0410, 0x080c, 0x50b1, 0x0140, 0x708f, 0x0001, 0x70cf, 0x0000,
-+ 0x080c, 0x49f2, 0x0804, 0x0a76, 0x2001, 0x1153, 0x2004, 0xd094,
-+ 0x0190, 0x2011, 0x110c, 0x2204, 0xc0cd, 0x2012, 0x2001, 0x1172,
-+ 0x2004, 0xd0d4, 0x1118, 0x080c, 0x22a5, 0x1278, 0x2011, 0x110c,
-+ 0x2204, 0xc0bc, 0x00b0, 0x2001, 0x1172, 0x2004, 0xd0d4, 0x1db0,
-+ 0x2011, 0x110c, 0x2204, 0xc0bd, 0x0060, 0x2011, 0x110c, 0x2204,
-+ 0xc0bd, 0x2012, 0x080c, 0x58c6, 0x1128, 0xd0a4, 0x0118, 0x2204,
-+ 0xc0fd, 0x2012, 0x080c, 0x588e, 0x0120, 0x7a0c, 0xc2b4, 0x7a0e,
-+ 0x00a8, 0x7077, 0x0000, 0x080c, 0x62e4, 0x1130, 0x70a8, 0x9005,
-+ 0x1168, 0x080c, 0xad47, 0x0050, 0x080c, 0xad47, 0x70d8, 0xd09c,
-+ 0x1128, 0x70a8, 0x9005, 0x0110, 0x080c, 0x5092, 0x70e3, 0x0000,
-+ 0x70df, 0x0000, 0x709f, 0x0000, 0x72d8, 0x080c, 0x62e4, 0x1170,
-+ 0x9016, 0x0016, 0x080c, 0x205d, 0x2019, 0x1298, 0x211a, 0x001e,
-+ 0x7057, 0xffff, 0x705b, 0x00ef, 0x707b, 0x0000, 0x2079, 0x1152,
-+ 0x7804, 0xd0ac, 0x0108, 0xc295, 0x72da, 0x080c, 0x62e4, 0x0118,
-+ 0x9296, 0x0004, 0x0548, 0x2011, 0x0001, 0x080c, 0xa948, 0x70a3,
-+ 0x0000, 0x70a7, 0xffff, 0x7003, 0x0002, 0x2079, 0x0100, 0x7827,
-+ 0x0003, 0x7828, 0x9085, 0x0003, 0x782a, 0x00fe, 0x080c, 0x2679,
-+ 0x2011, 0x0005, 0x080c, 0x88e2, 0x080c, 0x7aa4, 0x080c, 0x62e4,
-+ 0x0148, 0x00c6, 0x2061, 0x0100, 0x0016, 0x080c, 0x205d, 0x61e2,
-+ 0x001e, 0x00ce, 0x012e, 0x0420, 0x70a3, 0x0000, 0x70a7, 0xffff,
-+ 0x7003, 0x0002, 0x00f6, 0x2079, 0x0100, 0x7827, 0x0003, 0x7828,
-+ 0x9085, 0x0003, 0x782a, 0x00fe, 0x2011, 0x0005, 0x080c, 0x88e2,
-+ 0x080c, 0x7aa4, 0x080c, 0x62e4, 0x0148, 0x00c6, 0x2061, 0x0100,
-+ 0x0016, 0x080c, 0x205d, 0x61e2, 0x001e, 0x00ce, 0x00fe, 0x012e,
-+ 0x0005, 0x00c6, 0x080c, 0x62e4, 0x1118, 0x20a9, 0x0100, 0x0010,
-+ 0x20a9, 0x0082, 0x080c, 0x62e4, 0x1110, 0x900e, 0x0010, 0x2009,
-+ 0x007e, 0x080c, 0x2955, 0x8108, 0x1f04, 0x0a89, 0x00ce, 0x7077,
-+ 0x0000, 0x7078, 0x9084, 0x00ff, 0x707a, 0x70ab, 0x0000, 0x0005,
-+ 0x0126, 0x2091, 0x8000, 0x7000, 0x9086, 0x0002, 0x1904, 0x0b66,
-+ 0x70a4, 0x9086, 0xffff, 0x0130, 0x080c, 0x2679, 0x080c, 0x7aa4,
-+ 0x0804, 0x0b66, 0x70d8, 0xd0ac, 0x1110, 0xd09c, 0x0518, 0xd084,
-+ 0x0508, 0x0006, 0x2001, 0x0103, 0x2003, 0x002b, 0x000e, 0xd08c,
-+ 0x01c8, 0x70dc, 0x9086, 0xffff, 0x0188, 0x080c, 0x27da, 0x080c,
-+ 0x7aa4, 0x70d8, 0xd094, 0x1904, 0x0b66, 0x2011, 0x0001, 0x901e,
-+ 0x080c, 0x2811, 0x080c, 0x7aa4, 0x0804, 0x0b66, 0x70e0, 0x9005,
-+ 0x1904, 0x0b66, 0x70a0, 0x9005, 0x1904, 0x0b66, 0x70d8, 0xd0a4,
-+ 0x0118, 0xd0b4, 0x0904, 0x0b66, 0x080c, 0x588e, 0x1904, 0x0b66,
-+ 0x080c, 0x58c6, 0x01c0, 0x0156, 0x00c6, 0x20a9, 0x007f, 0x900e,
-+ 0x0016, 0x080c, 0x5608, 0x1118, 0x6000, 0xd0ec, 0x1138, 0x001e,
-+ 0x8108, 0x1f04, 0x0ae8, 0x00ce, 0x015e, 0x0028, 0x001e, 0x00ce,
-+ 0x015e, 0x0804, 0x0b66, 0x0006, 0x2001, 0x0103, 0x2003, 0x006b,
-+ 0x000e, 0x20e9, 0x0001, 0x71b0, 0x81ff, 0x11b0, 0x9006, 0x2009,
-+ 0x0200, 0x20a9, 0x0002, 0x20a1, 0x1302, 0x4001, 0x2009, 0x0700,
-+ 0x20a9, 0x0002, 0x20a1, 0x12f2, 0x4001, 0x7074, 0x8007, 0x7178,
-+ 0x810f, 0x20a9, 0x0002, 0x4001, 0x20a1, 0x12f6, 0x900e, 0x080c,
-+ 0x0d65, 0x9006, 0x810f, 0x20a9, 0x0002, 0x4001, 0x7030, 0xc08c,
-+ 0x7032, 0x7003, 0x0003, 0x70a7, 0xffff, 0x7034, 0xd0b4, 0x1130,
-+ 0x0026, 0x2011, 0x0040, 0x080c, 0x0e3a, 0x002e, 0x9006, 0x080c,
-+ 0x1f11, 0x0036, 0x0046, 0x2019, 0xffff, 0x2021, 0x0006, 0x080c,
-+ 0x4026, 0x004e, 0x003e, 0x00f6, 0x2079, 0x0100, 0x080c, 0x630a,
-+ 0x0150, 0x080c, 0x62e4, 0x7828, 0x0118, 0x9084, 0xe1ff, 0x0010,
-+ 0x9084, 0xffdf, 0x782a, 0x00fe, 0x2001, 0x1305, 0x2004, 0x9086,
-+ 0x0005, 0x1120, 0x2011, 0x0000, 0x080c, 0x88e2, 0x2011, 0x0000,
-+ 0x080c, 0x88ec, 0x080c, 0x7aa4, 0x080c, 0x7b72, 0x012e, 0x0005,
-+ 0x0016, 0x0046, 0x00f6, 0x0126, 0x2091, 0x8000, 0x2079, 0x0100,
-+ 0x7904, 0x918c, 0xfffd, 0x7906, 0x2009, 0x00f7, 0x080c, 0x507b,
-+ 0x7940, 0x918c, 0x0010, 0x7942, 0x7924, 0xd1b4, 0x0110, 0x7827,
-+ 0x0040, 0xd19c, 0x0110, 0x7827, 0x0008, 0x0006, 0x0036, 0x0156,
-+ 0x7954, 0xd1ac, 0x1904, 0x0bf6, 0x080c, 0x2328, 0x1148, 0x2001,
-+ 0x0001, 0x080c, 0x2290, 0x2001, 0x0001, 0x080c, 0x2273, 0x00b8,
-+ 0x080c, 0x2330, 0x1138, 0x9006, 0x080c, 0x2290, 0x9006, 0x080c,
-+ 0x2273, 0x0068, 0x080c, 0x2338, 0x1d50, 0x2001, 0x12d2, 0x2004,
-+ 0xd0fc, 0x0108, 0x0020, 0x080c, 0x2089, 0x0804, 0x0cda, 0x080c,
-+ 0x62f6, 0x0158, 0x080c, 0x630a, 0x1128, 0x2001, 0x12a7, 0x2003,
-+ 0x0000, 0x0070, 0x080c, 0x62ec, 0x0dc0, 0x2001, 0x12a7, 0x2003,
-+ 0xaaaa, 0x2001, 0x12a8, 0x2003, 0x0001, 0x080c, 0x621a, 0x0058,
-+ 0x080c, 0x62e4, 0x0140, 0x2009, 0x00f8, 0x080c, 0x507b, 0x7843,
-+ 0x0090, 0x7843, 0x0010, 0x20a9, 0x09c4, 0x7820, 0xd09c, 0x1138,
-+ 0x080c, 0x62e4, 0x0138, 0x7824, 0xd0ac, 0x1904, 0x0cdf, 0x1f04,
-+ 0x0bd5, 0x0070, 0x7824, 0x080c, 0x6300, 0x0118, 0xd0ac, 0x1904,
-+ 0x0cdf, 0x9084, 0x1800, 0x0d98, 0x7003, 0x0001, 0x0804, 0x0cdf,
-+ 0x2001, 0x0001, 0x080c, 0x1f11, 0x0804, 0x0cf2, 0x080c, 0x2328,
-+ 0x1148, 0x2001, 0x0001, 0x080c, 0x2290, 0x2001, 0x0001, 0x080c,
-+ 0x2273, 0x00b8, 0x080c, 0x2330, 0x1138, 0x9006, 0x080c, 0x2290,
-+ 0x9006, 0x080c, 0x2273, 0x0068, 0x080c, 0x2338, 0x1d50, 0x2001,
-+ 0x12d2, 0x2004, 0xd0fc, 0x0108, 0x0020, 0x080c, 0x2089, 0x0804,
-+ 0x0cda, 0x080c, 0x2346, 0x7850, 0x9085, 0x0040, 0x7852, 0x7938,
-+ 0x7850, 0x9084, 0xfbcf, 0x7852, 0x080c, 0x2340, 0x9085, 0x2000,
-+ 0x7852, 0x793a, 0x20a9, 0x0046, 0x1d04, 0x0c2c, 0x080c, 0x72a5,
-+ 0x1f04, 0x0c2c, 0x7850, 0x9085, 0x0400, 0x9084, 0xdfbf, 0x7852,
-+ 0x793a, 0x080c, 0x62f6, 0x0158, 0x080c, 0x630a, 0x1128, 0x2001,
-+ 0x12a7, 0x2003, 0x0000, 0x0070, 0x080c, 0x62ec, 0x0dc0, 0x2001,
-+ 0x12a7, 0x2003, 0xaaaa, 0x2001, 0x12a8, 0x2003, 0x0001, 0x080c,
-+ 0x621a, 0x0020, 0x2009, 0x00f8, 0x080c, 0x507b, 0x20a9, 0x0028,
-+ 0xa001, 0x1f04, 0x0c58, 0x7850, 0x9085, 0x1400, 0x7852, 0x080c,
-+ 0x62e4, 0x0120, 0x7843, 0x0090, 0x7843, 0x0010, 0x2021, 0xe678,
-+ 0x2019, 0xea60, 0x7820, 0xd09c, 0x15a0, 0x080c, 0x62e4, 0x0904,
-+ 0x0cbf, 0x7824, 0xd0ac, 0x1904, 0x0cdf, 0x080c, 0x630a, 0x1548,
-+ 0x0046, 0x2021, 0x0320, 0x8421, 0x1df0, 0x004e, 0x7827, 0x1800,
-+ 0x080c, 0x2340, 0x7824, 0x9084, 0x1800, 0x1160, 0x9484, 0x0fff,
-+ 0x1138, 0x2001, 0x110f, 0x2004, 0xd0fc, 0x0110, 0x080c, 0x0d01,
-+ 0x8421, 0x1178, 0x1d04, 0x0c96, 0x080c, 0x72a5, 0x2001, 0x12a7,
-+ 0x2003, 0xaaaa, 0x2001, 0x12a8, 0x2003, 0x0001, 0x7003, 0x0001,
-+ 0x04f0, 0x8319, 0x1938, 0x1d04, 0x0ca7, 0x080c, 0x72a5, 0x2009,
-+ 0x12d5, 0x2104, 0x9005, 0x0118, 0x8001, 0x200a, 0x1178, 0x200b,
-+ 0x000a, 0x7827, 0x0048, 0x20a9, 0x0002, 0x080c, 0x2321, 0x7924,
-+ 0x080c, 0x2340, 0xd19c, 0x0110, 0x080c, 0x2261, 0x00d8, 0x080c,
-+ 0x62f6, 0x1140, 0x94a2, 0x03e8, 0x1128, 0x080c, 0x62be, 0x7003,
-+ 0x0001, 0x00a8, 0x7827, 0x1800, 0x080c, 0x2340, 0x7824, 0x080c,
-+ 0x6300, 0x0110, 0xd0ac, 0x1158, 0x9084, 0x1800, 0x0950, 0x7003,
-+ 0x0001, 0x0028, 0x2001, 0x0001, 0x080c, 0x1f11, 0x0078, 0x2009,
-+ 0x110c, 0x210c, 0xd19c, 0x1120, 0x7904, 0x918d, 0x0002, 0x7906,
-+ 0x7827, 0x0048, 0x7828, 0x9085, 0x0028, 0x782a, 0x7850, 0x9085,
-+ 0x0400, 0x7852, 0x9006, 0x78f2, 0x015e, 0x003e, 0x000e, 0x7034,
-+ 0xd0b4, 0x1110, 0x080c, 0x0df3, 0x012e, 0x00fe, 0x004e, 0x001e,
-+ 0x0005, 0x0006, 0x0016, 0x0036, 0x0046, 0x00b6, 0x00c6, 0x00d6,
-+ 0x00e6, 0x00f6, 0x0156, 0x080c, 0x2aa2, 0x015e, 0x00fe, 0x00ee,
-+ 0x00de, 0x00ce, 0x00be, 0x004e, 0x003e, 0x001e, 0x000e, 0x0005,
-+ 0x0005, 0x2a70, 0x2061, 0x12e3, 0x2063, 0x0003, 0x6007, 0x0001,
-+ 0x600b, 0x0014, 0x600f, 0x0017, 0x2001, 0x12a7, 0x900e, 0x2102,
-+ 0x718e, 0x2001, 0x0100, 0x2004, 0x9082, 0x0002, 0x0218, 0x7057,
-+ 0xffff, 0x0008, 0x7156, 0x705f, 0xffff, 0x7176, 0x717a, 0x080c,
-+ 0xad47, 0x2061, 0x1297, 0x6003, 0x0909, 0x6106, 0x600b, 0x8800,
-+ 0x600f, 0x0200, 0x6013, 0x00ff, 0x6017, 0x000f, 0x611a, 0x601f,
-+ 0x07d0, 0x2061, 0x129f, 0x6003, 0x8000, 0x6106, 0x610a, 0x600f,
-+ 0x0200, 0x6013, 0x00ff, 0x6116, 0x601b, 0x0001, 0x611e, 0x2061,
-+ 0x12c3, 0x6003, 0x514c, 0x6007, 0x4f47, 0x600b, 0x4943, 0x600f,
-+ 0x2020, 0x2001, 0x112a, 0x2102, 0x0005, 0x9016, 0x080c, 0x5608,
-+ 0x1178, 0x6004, 0x90c4, 0x00ff, 0x98c6, 0x0006, 0x0128, 0x90c4,
-+ 0xff00, 0x98c6, 0x0600, 0x1120, 0x9186, 0x0080, 0x0108, 0x8210,
-+ 0x8108, 0x9186, 0x0100, 0x1d50, 0x2208, 0x0005, 0x2091, 0x8000,
-+ 0x0e04, 0x0d80, 0x0006, 0x0016, 0x2079, 0x0000, 0x001e, 0x798e,
-+ 0x000e, 0x788a, 0x000e, 0x7886, 0x3900, 0x789a, 0x7883, 0x8002,
-+ 0x7837, 0x8002, 0x7833, 0x0012, 0x2091, 0x5000, 0x0156, 0x00d6,
-+ 0x0036, 0x0026, 0x2079, 0x0300, 0x2069, 0x137c, 0x7a18, 0x226a,
-+ 0x8d68, 0x7a1c, 0x226a, 0x782c, 0x2019, 0x1389, 0x201a, 0x2019,
-+ 0x138c, 0x9016, 0x7808, 0xd09c, 0x0168, 0x7820, 0x201a, 0x8210,
-+ 0x8318, 0x9386, 0x13a1, 0x0108, 0x0ca8, 0x7808, 0xd09c, 0x0110,
-+ 0x2011, 0xdead, 0x2019, 0x138a, 0x782c, 0x201a, 0x8318, 0x221a,
-+ 0x7803, 0x0000, 0x2069, 0x135c, 0x901e, 0x20a9, 0x0020, 0x7b26,
-+ 0x7a28, 0x226a, 0x8d68, 0x8318, 0x1f04, 0x0dc7, 0x002e, 0x003e,
-+ 0x00de, 0x015e, 0x2079, 0x1100, 0x7803, 0x0005, 0x2091, 0x4080,
-+ 0x2001, 0x0089, 0x2004, 0xd084, 0x0180, 0x2001, 0x1336, 0x2004,
-+ 0x9005, 0x0128, 0x2001, 0x008b, 0x2004, 0xd0fc, 0x0dd8, 0x2001,
-+ 0x008a, 0x2003, 0x0002, 0x2003, 0x1001, 0x7834, 0xd0b4, 0x1108,
-+ 0x04b9, 0x0cd8, 0x0005, 0x00f6, 0x0006, 0x2079, 0x1125, 0x2f04,
-+ 0x8000, 0x207a, 0x080c, 0x2338, 0x1150, 0x0006, 0x2001, 0x12d2,
-+ 0x2004, 0xd0fc, 0x000e, 0x1118, 0x9082, 0x7530, 0x0010, 0x9082,
-+ 0x000f, 0x0258, 0x9006, 0x207a, 0x2079, 0x1128, 0x2f04, 0x9084,
-+ 0x0001, 0x9086, 0x0001, 0x207a, 0x0080, 0x2079, 0x1128, 0x2f7c,
-+ 0x8fff, 0x1130, 0x0026, 0x2011, 0x0080, 0x00e1, 0x002e, 0x0028,
-+ 0x0026, 0x2011, 0x0000, 0x00b1, 0x002e, 0x000e, 0x00fe, 0x0005,
-+ 0x0026, 0x2011, 0x0080, 0x0071, 0x002e, 0x2009, 0x0fff, 0x00b9,
-+ 0x0026, 0x2011, 0x0040, 0x0031, 0x002e, 0x2009, 0x0fff, 0x0079,
-+ 0x0c78, 0x0005, 0x0016, 0x3b08, 0x3a00, 0x9104, 0x918d, 0x00c0,
-+ 0x21d8, 0x9084, 0xff3f, 0x9205, 0x20d0, 0x001e, 0x0005, 0x0156,
-+ 0x0126, 0x918c, 0x0fff, 0x21a8, 0x1d04, 0x0e4c, 0x2091, 0x6000,
-+ 0x1f04, 0x0e4c, 0x012e, 0x015e, 0x0005, 0x890b, 0x810b, 0x810b,
-+ 0x810b, 0x810b, 0x810b, 0x9994, 0xfc00, 0x8217, 0x8214, 0x8214,
-+ 0x0005, 0x0006, 0x814c, 0x894c, 0x894c, 0x894c, 0x894c, 0x894c,
-+ 0x9284, 0x003f, 0x8007, 0x8003, 0x8003, 0x994d, 0x000e, 0x0005,
-+ 0x0016, 0x0026, 0x0096, 0x3348, 0x0c01, 0x2100, 0x9300, 0x2098,
-+ 0x22e0, 0x009e, 0x002e, 0x001e, 0x3518, 0x20a9, 0x0001, 0x4002,
-+ 0x8007, 0x4004, 0x8319, 0x1dd8, 0x0005, 0x2071, 0x1100, 0x7164,
-+ 0x712e, 0x2021, 0x0001, 0x9190, 0x0040, 0x9298, 0x0040, 0x0240,
-+ 0x7068, 0x9302, 0x1228, 0x220a, 0x2208, 0x2310, 0x8420, 0x0ca8,
-+ 0x200b, 0x0000, 0x74ba, 0x74be, 0x0005, 0x00e6, 0x0126, 0x2091,
-+ 0x8000, 0x2071, 0x1100, 0x70bc, 0x90ea, 0x0010, 0x0268, 0x8001,
-+ 0x70be, 0x702c, 0x2068, 0x2d04, 0x702e, 0x206b, 0x0000, 0x6807,
-+ 0x0000, 0x012e, 0x00ee, 0x0005, 0x906e, 0x0cd8, 0x00e6, 0x2071,
-+ 0x1100, 0x0126, 0x2091, 0x8000, 0x70bc, 0x8001, 0x0270, 0x70be,
-+ 0x702c, 0x2068, 0x9085, 0x0001, 0x2d04, 0x702e, 0x206b, 0x0000,
-+ 0x6807, 0x0000, 0x012e, 0x00ee, 0x0005, 0x906e, 0x0cd8, 0x00e6,
-+ 0x0126, 0x2091, 0x8000, 0x2071, 0x1100, 0x702c, 0x206a, 0x2d00,
-+ 0x702e, 0x70bc, 0x8000, 0x70be, 0x012e, 0x00ee, 0x0005, 0x8dff,
-+ 0x0138, 0x6804, 0x6807, 0x0000, 0x0006, 0x0c49, 0x00de, 0x0cb8,
-+ 0x0005, 0x00d6, 0x0859, 0x0148, 0x0016, 0x0026, 0x2d08, 0x2011,
-+ 0x0001, 0x080c, 0x0e61, 0x002e, 0x001e, 0x00de, 0x0005, 0x00d6,
-+ 0x080c, 0x0e9d, 0x0148, 0x0016, 0x0026, 0x2d08, 0x2011, 0x0001,
-+ 0x080c, 0x0e61, 0x002e, 0x001e, 0x00de, 0x0005, 0x00d6, 0x0016,
-+ 0x0026, 0x080c, 0x0e55, 0x2168, 0x002e, 0x001e, 0x0801, 0x00de,
-+ 0x0005, 0x00e6, 0x2071, 0x1335, 0x7007, 0x0000, 0x9006, 0x701e,
-+ 0x7022, 0x7002, 0x2071, 0x0000, 0x7010, 0x9085, 0x8004, 0x7012,
-+ 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x00e6, 0x2270, 0x700b,
-+ 0x0000, 0x2071, 0x1335, 0x701c, 0x9088, 0x133f, 0x220a, 0x8000,
-+ 0x9084, 0x0007, 0x701e, 0x7004, 0x9005, 0x1128, 0x00f6, 0x2079,
-+ 0x0080, 0x0089, 0x00fe, 0x00ee, 0x012e, 0x0005, 0x00e6, 0x2071,
-+ 0x1335, 0x7004, 0x9005, 0x1128, 0x00f6, 0x2079, 0x0080, 0x0019,
-+ 0x00fe, 0x00ee, 0x0005, 0x7004, 0x9086, 0x0000, 0x1110, 0x7007,
-+ 0x0006, 0x7000, 0x0002, 0x0f5d, 0x0f5b, 0x0f5b, 0x0f5b, 0x10be,
-+ 0x10be, 0x10be, 0x10be, 0x080c, 0x0d7e, 0x701c, 0x7120, 0x9106,
-+ 0x1148, 0x792c, 0x9184, 0x0001, 0x1120, 0xd1fc, 0x1110, 0x7007,
-+ 0x0000, 0x0005, 0x00d6, 0x9180, 0x133f, 0x2004, 0x700a, 0x2068,
-+ 0x8108, 0x918c, 0x0007, 0x7122, 0x782b, 0x0026, 0x6828, 0x7802,
-+ 0x682c, 0x7806, 0x6830, 0x780a, 0x6834, 0x780e, 0x6814, 0x700e,
-+ 0x680c, 0x7016, 0x6810, 0x701a, 0x6804, 0x00de, 0xd084, 0x0120,
-+ 0x7007, 0x0001, 0x0029, 0x0005, 0x7007, 0x0002, 0x00b1, 0x0005,
-+ 0x0016, 0x0026, 0x710c, 0x2011, 0x0040, 0x9182, 0x0040, 0x1210,
-+ 0x2110, 0x9006, 0x700e, 0x7212, 0x8203, 0x7812, 0x782b, 0x0020,
-+ 0x782b, 0x0041, 0x002e, 0x001e, 0x0005, 0x0016, 0x0026, 0x0136,
-+ 0x0146, 0x0156, 0x7014, 0x20e0, 0x7018, 0x2098, 0x20e9, 0x0000,
-+ 0x20a1, 0x0088, 0x782b, 0x0026, 0x710c, 0x2011, 0x0040, 0x9182,
-+ 0x0040, 0x1210, 0x2110, 0x9006, 0x700e, 0x22a8, 0x4006, 0x8203,
-+ 0x7812, 0x782b, 0x0020, 0x3300, 0x701a, 0x782b, 0x0001, 0x015e,
-+ 0x014e, 0x013e, 0x002e, 0x001e, 0x0005, 0x2009, 0x1335, 0x2104,
-+ 0xc095, 0x200a, 0x080c, 0x0f3e, 0x0005, 0x0016, 0x00e6, 0x2071,
-+ 0x1335, 0x00f6, 0x2079, 0x0080, 0x792c, 0x782b, 0x0002, 0xd1fc,
-+ 0x0120, 0x918c, 0x0700, 0x7004, 0x0023, 0x00fe, 0x00ee, 0x001e,
-+ 0x0005, 0x0f4b, 0x0ff2, 0x1024, 0x0ff0, 0x0ff0, 0x10ca, 0x0ff0,
-+ 0x080c, 0x0d7e, 0x918c, 0x0700, 0x1548, 0x0136, 0x0146, 0x0156,
-+ 0x7014, 0x20e8, 0x7018, 0x20a0, 0x20e1, 0x0000, 0x2099, 0x0088,
-+ 0x782b, 0x0040, 0x7010, 0x20a8, 0x4005, 0x3400, 0x701a, 0x015e,
-+ 0x014e, 0x013e, 0x700c, 0x9005, 0x0560, 0x7800, 0x7802, 0x7804,
-+ 0x7806, 0x080c, 0x0f90, 0x0005, 0x7008, 0x9080, 0x0002, 0x2003,
-+ 0x0100, 0x7007, 0x0000, 0x080c, 0x0f4b, 0x0005, 0x7008, 0x9080,
-+ 0x0002, 0x2003, 0x0200, 0x0ca8, 0x918c, 0x0700, 0x1150, 0x700c,
-+ 0x9005, 0x0178, 0x7800, 0x7802, 0x7804, 0x7806, 0x080c, 0x0fa5,
-+ 0x0005, 0x7008, 0x9080, 0x0002, 0x2003, 0x0200, 0x7007, 0x0000,
-+ 0x0080, 0x00d6, 0x7008, 0x2068, 0x7800, 0x682a, 0x7804, 0x682e,
-+ 0x7808, 0x6832, 0x780c, 0x6836, 0x680b, 0x0100, 0x00de, 0x7007,
-+ 0x0000, 0x00c6, 0x00d6, 0x7008, 0x2060, 0x9086, 0x11fb, 0x1128,
-+ 0x6038, 0x080f, 0x00de, 0x00ce, 0x0078, 0x00de, 0x00ce, 0x00c6,
-+ 0x00d6, 0x7008, 0x2060, 0x0059, 0x0128, 0x6038, 0x080f, 0x00de,
-+ 0x00ce, 0x0005, 0x00de, 0x00ce, 0x080c, 0x0f4b, 0x0005, 0x00e6,
-+ 0x2071, 0x1100, 0x8cff, 0x0140, 0x7064, 0x9c02, 0x0238, 0x9c82,
-+ 0xffff, 0x1220, 0x9085, 0x0001, 0x00ee, 0x0005, 0x9006, 0x0ce0,
-+ 0x603c, 0x906d, 0x090c, 0x0d7e, 0x6008, 0x908e, 0x0100, 0x0130,
-+ 0x687b, 0x0030, 0x6883, 0x0000, 0x6897, 0x4002, 0x080c, 0x5b76,
-+ 0x603b, 0x0000, 0x603f, 0x0000, 0x2c00, 0x2068, 0x080c, 0x0ecf,
-+ 0x0005, 0x00f6, 0x603c, 0x906d, 0x090c, 0x0d7e, 0x6008, 0x908e,
-+ 0x0100, 0x0128, 0x687b, 0x0001, 0x6883, 0x0000, 0x0080, 0x680c,
-+ 0x2078, 0x7804, 0x9005, 0x0158, 0x680e, 0x2078, 0x9080, 0x0002,
-+ 0x6012, 0x7800, 0x6016, 0x2c10, 0x080c, 0x0f22, 0x0068, 0x00d6,
-+ 0x080c, 0x5b76, 0x00de, 0x687c, 0xd0f4, 0x0130, 0x6894, 0x00c6,
-+ 0x2060, 0x080c, 0x8ed9, 0x00ce, 0x00fe, 0x0005, 0x0126, 0x2091,
-+ 0x8000, 0x782b, 0x1001, 0x7007, 0x0005, 0x7000, 0xc094, 0x7002,
-+ 0x012e, 0x0005, 0x7007, 0x0000, 0x080c, 0x0f4b, 0x0005, 0x0126,
-+ 0x2091, 0x2200, 0x2079, 0x0300, 0x2071, 0x1347, 0x7003, 0x0000,
-+ 0x78bf, 0x00f6, 0x00c1, 0x7803, 0x0003, 0x780f, 0x0000, 0x20a9,
-+ 0x01ea, 0x2061, 0xc47d, 0x2c0d, 0x7912, 0xe104, 0x9ce0, 0x0002,
-+ 0x7916, 0x1f04, 0x10e3, 0x7807, 0x0001, 0x7803, 0x0000, 0x7803,
-+ 0x0001, 0x012e, 0x0005, 0x00c6, 0x7803, 0x0000, 0x7808, 0xd09c,
-+ 0x0110, 0x7820, 0x0cd8, 0x2001, 0x1348, 0x2003, 0x0000, 0x78ab,
-+ 0x0004, 0x78ac, 0xd0ac, 0x1de8, 0x78ab, 0x0002, 0x7807, 0x0001,
-+ 0x7827, 0x0030, 0x782b, 0x0400, 0x7827, 0x0031, 0x782b, 0x135c,
-+ 0x781f, 0xff00, 0x781b, 0xff00, 0x2001, 0x0200, 0x2004, 0xd0dc,
-+ 0x0110, 0x781f, 0x0303, 0x2061, 0x135c, 0x602f, 0x15c0, 0x6033,
-+ 0x3000, 0x603b, 0x18fe, 0x00ce, 0x0005, 0x0126, 0x2091, 0x2200,
-+ 0x7808, 0xd09c, 0x0158, 0x7820, 0x908c, 0xf000, 0x1578, 0x908c,
-+ 0x0fe0, 0x190c, 0x0d7e, 0x0043, 0x012e, 0x0005, 0x9084, 0x0070,
-+ 0x190c, 0x0d7e, 0x012e, 0x0005, 0x115c, 0x115c, 0x1165, 0x116a,
-+ 0x116e, 0x1173, 0x119a, 0x119e, 0x11ab, 0x11af, 0x115c, 0x1233,
-+ 0x1237, 0x1296, 0x115c, 0x115c, 0x115c, 0x115c, 0x115c, 0x115c,
-+ 0x115c, 0x115c, 0x115c, 0x115c, 0x115c, 0x115c, 0x115c, 0x1175,
-+ 0x115c, 0x115c, 0x115c, 0x115c, 0x080c, 0x0d7e, 0x2009, 0x0048,
-+ 0x2060, 0x080c, 0x8f53, 0x012e, 0x0005, 0x7004, 0xc085, 0xc0b5,
-+ 0x7006, 0x0005, 0x7004, 0xc085, 0x7006, 0x0005, 0x080c, 0x129d,
-+ 0x080c, 0x133c, 0x0005, 0x080c, 0x0d7e, 0x080c, 0x129d, 0x2060,
-+ 0x6014, 0x9080, 0x000e, 0x2003, 0xffff, 0x2009, 0x0048, 0x080c,
-+ 0x8f53, 0x2001, 0x015d, 0x2003, 0x0000, 0x2009, 0x03e8, 0x8109,
-+ 0x0160, 0x2001, 0x0201, 0x2004, 0x9005, 0x0dc8, 0x2001, 0x0218,
-+ 0x2004, 0xd0ec, 0x1110, 0x080c, 0x12a2, 0x2001, 0x0307, 0x2003,
-+ 0x8000, 0x0005, 0x7004, 0xc095, 0x7006, 0x0005, 0x080c, 0x129d,
-+ 0x2060, 0x6014, 0x9080, 0x000e, 0x2003, 0xffff, 0x2009, 0x0048,
-+ 0x080c, 0x8f53, 0x0005, 0x080c, 0x129d, 0x080c, 0x0d7e, 0x080c,
-+ 0x129d, 0x080c, 0x121e, 0x7827, 0x0018, 0x79ac, 0xd1dc, 0x0540,
-+ 0x7827, 0x0015, 0x7828, 0x782b, 0x0000, 0x9065, 0x0138, 0x2001,
-+ 0x020d, 0x2003, 0x0050, 0x2003, 0x0020, 0x0400, 0x7004, 0x9005,
-+ 0x1180, 0x78ab, 0x0004, 0x7827, 0x0018, 0x782b, 0x0000, 0xd1bc,
-+ 0x090c, 0x0d7e, 0x2001, 0x020d, 0x2003, 0x0050, 0x2003, 0x0020,
-+ 0x0460, 0x78ab, 0x0004, 0x7803, 0x0001, 0x080c, 0x1237, 0x0005,
-+ 0x7828, 0x782b, 0x0000, 0x9065, 0x090c, 0x0d7e, 0x6014, 0x2068,
-+ 0x78ab, 0x0004, 0x918c, 0x0700, 0x0198, 0x080c, 0x1577, 0x080c,
-+ 0xa942, 0x0158, 0x69ac, 0x6936, 0x69b0, 0x693a, 0x683f, 0xffff,
-+ 0x6843, 0xffff, 0x6880, 0xc0bd, 0x6882, 0x080c, 0xa5f3, 0x0005,
-+ 0x6010, 0x2004, 0xd0bc, 0x190c, 0xace0, 0x2029, 0x00c8, 0x8529,
-+ 0x0128, 0x2001, 0x0201, 0x2004, 0x9005, 0x0dc8, 0x7dbc, 0x080c,
-+ 0xc426, 0xd5a4, 0x1118, 0x080c, 0x12a2, 0x0005, 0x080c, 0x1577,
-+ 0x0005, 0x781f, 0x0300, 0x7803, 0x0001, 0x0005, 0x0016, 0x0066,
-+ 0x0076, 0x00f6, 0x2079, 0x0300, 0x7908, 0x918c, 0x0007, 0x9186,
-+ 0x0003, 0x0120, 0x2001, 0x0016, 0x080c, 0x130c, 0x00fe, 0x007e,
-+ 0x006e, 0x001e, 0x0005, 0x7004, 0xc09d, 0x7006, 0x0005, 0x7104,
-+ 0x9184, 0x0004, 0x190c, 0x0d7e, 0xd184, 0x1189, 0xd19c, 0x0158,
-+ 0xc19c, 0x7106, 0x2001, 0x020d, 0x2003, 0x0050, 0x2003, 0x0020,
-+ 0x080c, 0x12a2, 0x0005, 0x81ff, 0x190c, 0x0d7e, 0x0005, 0xc184,
-+ 0xd1b4, 0xc1b4, 0x7106, 0x0016, 0x00e6, 0x15c0, 0x2071, 0x0200,
-+ 0x080c, 0x1330, 0x6014, 0x9005, 0x0588, 0x9080, 0x0019, 0x2004,
-+ 0x9084, 0x00ff, 0x908e, 0x0029, 0x0148, 0x908e, 0x0048, 0x1530,
-+ 0x00f6, 0x2c78, 0x080c, 0x137e, 0x00fe, 0x00a8, 0x00f6, 0x2c78,
-+ 0x080c, 0x1436, 0x00fe, 0x2009, 0x01f4, 0x8109, 0x0160, 0x2001,
-+ 0x0201, 0x2004, 0x9005, 0x0dc8, 0x2001, 0x0218, 0x2004, 0xd0ec,
-+ 0x1110, 0x0401, 0x0040, 0x2001, 0x020d, 0x2003, 0x0020, 0x080c,
-+ 0x10f3, 0x7803, 0x0001, 0x00ee, 0x001e, 0x0005, 0x2001, 0x020d,
-+ 0x2003, 0x0050, 0x2003, 0x0020, 0x0069, 0x0ca8, 0x0031, 0x2060,
-+ 0x2009, 0x0053, 0x080c, 0x8f53, 0x0005, 0x7808, 0xd09c, 0x0de8,
-+ 0x7820, 0x0005, 0x080c, 0x121e, 0x00d6, 0x2069, 0x0200, 0x2009,
-+ 0x01f4, 0x8109, 0x0508, 0x6804, 0x9005, 0x0dd8, 0x2001, 0x015d,
-+ 0x2003, 0x0000, 0x79bc, 0xd1a4, 0x1520, 0x79b8, 0x918c, 0x0fff,
-+ 0x0178, 0x9182, 0x0841, 0x1260, 0x9188, 0x0007, 0x918c, 0x0ff8,
-+ 0x810c, 0x810c, 0x810c, 0x04d1, 0x6827, 0x0001, 0x8109, 0x1dd8,
-+ 0x04a9, 0x6827, 0x0002, 0x0491, 0x6804, 0x9005, 0x1130, 0x682c,
-+ 0xd0e4, 0x11d0, 0x6804, 0x9005, 0x0de8, 0x79b8, 0xd1ec, 0x1120,
-+ 0x08c8, 0x080c, 0x1577, 0x0070, 0x7827, 0x0015, 0x782b, 0x0000,
-+ 0x2001, 0x020d, 0x2003, 0x0020, 0x2001, 0x0307, 0x2003, 0x0300,
-+ 0x7803, 0x0001, 0x00de, 0x0005, 0x682c, 0x9084, 0x5400, 0x9086,
-+ 0x5400, 0x0d50, 0x7827, 0x0015, 0x782b, 0x0000, 0x7803, 0x0001,
-+ 0x6800, 0x9085, 0x1800, 0x6802, 0x00de, 0x0005, 0x6824, 0x9084,
-+ 0x0003, 0x1de0, 0x0005, 0x2001, 0x0030, 0x2c08, 0x621c, 0x0021,
-+ 0x7830, 0x9086, 0x0041, 0x0005, 0x00f6, 0x2079, 0x0300, 0x0006,
-+ 0x7808, 0xd09c, 0x0140, 0x0016, 0x0026, 0x00c6, 0x080c, 0x1125,
-+ 0x00ce, 0x002e, 0x001e, 0x000e, 0x7832, 0x7936, 0x7a3a, 0x781b,
-+ 0x8080, 0x2009, 0xff00, 0x8109, 0x0128, 0x7818, 0xd0bc, 0x1dd8,
-+ 0x00fe, 0x0005, 0x792c, 0x3900, 0x8000, 0x2004, 0x080c, 0x0d7e,
-+ 0x7037, 0x0001, 0x7150, 0x7037, 0x0002, 0x7050, 0x2060, 0xd1bc,
-+ 0x1110, 0x7054, 0x2060, 0x0005, 0x00e6, 0x0016, 0x2071, 0x0200,
-+ 0x0c79, 0x7358, 0x745c, 0x6014, 0x905d, 0x0568, 0x2b68, 0x6010,
-+ 0x2004, 0xd0bc, 0x190c, 0xacbb, 0x6b42, 0x6c3e, 0x2001, 0x1174,
-+ 0x2004, 0xd0b4, 0x1158, 0x601c, 0xd0e4, 0x1140, 0x6010, 0x2004,
-+ 0xd0bc, 0x1120, 0x683b, 0x7fff, 0x6837, 0xffff, 0x080c, 0x191e,
-+ 0x1190, 0x080c, 0x1484, 0x2a00, 0x6816, 0x0130, 0x2c00, 0x680e,
-+ 0x2805, 0x680a, 0x2800, 0x6812, 0x7037, 0x0020, 0x781f, 0x0300,
-+ 0x001e, 0x00ee, 0x0005, 0x7037, 0x0050, 0x7037, 0x0020, 0x001e,
-+ 0x00ee, 0x080c, 0x12a2, 0x0005, 0x080c, 0x0d7e, 0x2ff0, 0x0126,
-+ 0x2091, 0x2200, 0x3e60, 0x6014, 0x2068, 0x2d60, 0x903e, 0x2730,
-+ 0x6964, 0x691a, 0x9184, 0x000f, 0x9088, 0x18fe, 0x2145, 0x0002,
-+ 0x13a0, 0x1407, 0x13a0, 0x13a0, 0x13a0, 0x13e0, 0x13a0, 0x13a4,
-+ 0x13a0, 0x13f5, 0x13a0, 0x13a0, 0x13a0, 0x13a0, 0x13ca, 0x13b6,
-+ 0x9085, 0x0001, 0x0804, 0x142e, 0x687c, 0xd0bc, 0x0dc8, 0x6890,
-+ 0x6842, 0x688c, 0x683e, 0x6888, 0x00d6, 0x2805, 0x9c68, 0x6b08,
-+ 0x6a0c, 0x6d00, 0x6c04, 0x00de, 0x0804, 0x1416, 0x687c, 0xd0bc,
-+ 0x0d38, 0x6890, 0x6842, 0x688c, 0x683e, 0x6888, 0x00d6, 0x2805,
-+ 0x9c68, 0x6b10, 0x6a14, 0x6d00, 0x6c04, 0x6f08, 0x6e0c, 0x00de,
-+ 0x0804, 0x1416, 0x687c, 0xd0bc, 0x0998, 0x6890, 0x6842, 0x688c,
-+ 0x683e, 0x6804, 0x2060, 0x9080, 0x0019, 0x200c, 0x691a, 0x91cc,
-+ 0x000f, 0x9980, 0x18fe, 0x2045, 0x6888, 0xd19c, 0x11e8, 0x0470,
-+ 0x687c, 0xd0ac, 0x0904, 0x13a0, 0x6804, 0x2060, 0x9080, 0x0019,
-+ 0x200c, 0x691a, 0x91cc, 0x000f, 0x9980, 0x18fe, 0x2045, 0x9006,
-+ 0x6842, 0x683e, 0xd19c, 0x1140, 0x00c8, 0x687c, 0xd0ac, 0x0904,
-+ 0x13a0, 0x9006, 0x6842, 0x683e, 0x00d6, 0x2805, 0x9c68, 0x6b10,
-+ 0x6a14, 0x6d00, 0x6c04, 0x6f08, 0x6e0c, 0x00de, 0x0078, 0x687c,
-+ 0xd0ac, 0x0904, 0x13a0, 0x9006, 0x6842, 0x683e, 0x00d6, 0x2805,
-+ 0x9c68, 0x6b08, 0x6a0c, 0x6d00, 0x6c04, 0x00de, 0x6b2e, 0x6a32,
-+ 0x6d1e, 0x6c22, 0x6f26, 0x6e2a, 0x6988, 0x8840, 0x281d, 0x68ac,
-+ 0x6ab0, 0x6836, 0x6a3a, 0x8109, 0x6916, 0x1150, 0x3e60, 0x601c,
-+ 0xc085, 0x601e, 0x687c, 0xc0dd, 0x687e, 0x9006, 0x012e, 0x0005,
-+ 0x2c00, 0x680e, 0x6b0a, 0x2800, 0x6812, 0x0c80, 0x2ff0, 0x0126,
-+ 0x2091, 0x2200, 0x3e60, 0x6014, 0x2068, 0x2d60, 0x680e, 0x2041,
-+ 0x18fb, 0x680b, 0x18fb, 0x2805, 0x6812, 0x6964, 0x691a, 0x687c,
-+ 0xd0ac, 0x090c, 0x0d7e, 0x9006, 0x6842, 0x683e, 0x00d6, 0x2805,
-+ 0x9c68, 0x6b10, 0x6a14, 0x6d00, 0x6c04, 0x6f08, 0x6e0c, 0x00de,
-+ 0x6b2e, 0x6a32, 0x6d1e, 0x6c22, 0x6f26, 0x6e2a, 0x68ac, 0x6ab0,
-+ 0x6836, 0x6a3a, 0x6988, 0x918a, 0x0002, 0x6916, 0x1150, 0x3e60,
-+ 0x601c, 0xc085, 0x601e, 0x687c, 0xc0dd, 0x687e, 0x9006, 0x012e,
-+ 0x0005, 0x6804, 0x9065, 0x090c, 0x0d7e, 0x680e, 0x6064, 0x681a,
-+ 0x9084, 0x000f, 0x9080, 0x18fe, 0x2015, 0x82ff, 0x090c, 0x0d7e,
-+ 0x6a0a, 0x2205, 0x6812, 0x0c18, 0x903e, 0x2730, 0x6880, 0xd0fc,
-+ 0x11a8, 0x00d6, 0x2805, 0x9c68, 0x2900, 0x0002, 0x14c6, 0x14ac,
-+ 0x14ac, 0x14c6, 0x14c6, 0x14c0, 0x14c6, 0x14ac, 0x14c6, 0x14b1,
-+ 0x14b1, 0x14c6, 0x14c6, 0x14c6, 0x14b8, 0x14b1, 0xc0fc, 0x6882,
-+ 0x6b2c, 0x6a30, 0x6d1c, 0x6c20, 0x00d6, 0xd99c, 0x0510, 0x2805,
-+ 0x9c68, 0x6f08, 0x6e0c, 0x00e8, 0x6b08, 0x6a0c, 0x6d00, 0x6c04,
-+ 0x00c0, 0x6b10, 0x6a14, 0x6d00, 0x6c04, 0x6f08, 0x6e0c, 0x0088,
-+ 0x00de, 0x00d6, 0x6864, 0x9084, 0x00ff, 0x9086, 0x001e, 0x1130,
-+ 0x00de, 0x080c, 0x18be, 0x1900, 0x900e, 0x0060, 0x00de, 0x080c,
-+ 0x0d7e, 0x00de, 0x6b2e, 0x6a32, 0x6d1e, 0x6c22, 0x6f26, 0x6e2a,
-+ 0x080c, 0x18be, 0x0005, 0x2001, 0x020b, 0x2004, 0xd0e4, 0x0110,
-+ 0xd0d4, 0x1180, 0x6014, 0x9080, 0x0021, 0x6118, 0x810c, 0x810c,
-+ 0x810c, 0x81ff, 0x1118, 0x2003, 0x0001, 0x0008, 0x2102, 0x601b,
-+ 0x0002, 0x0005, 0x0126, 0x00c6, 0x2091, 0x2200, 0x00ce, 0x2001,
-+ 0x0037, 0x2c08, 0x080c, 0x130c, 0x7808, 0xd09c, 0x0140, 0x0016,
-+ 0x0026, 0x00c6, 0x080c, 0x1125, 0x00ce, 0x002e, 0x001e, 0x6000,
-+ 0x9086, 0x0004, 0x1120, 0x2009, 0x0048, 0x080c, 0x8f53, 0x012e,
-+ 0x0005, 0x0126, 0x00c6, 0x2091, 0x2200, 0x00ce, 0x7908, 0x918c,
-+ 0x0007, 0x9186, 0x0000, 0x0904, 0x156c, 0x9186, 0x0003, 0x0904,
-+ 0x156c, 0x6020, 0x6023, 0x0000, 0x0006, 0x2031, 0x0190, 0x00c6,
-+ 0x7808, 0xd09c, 0x190c, 0x1125, 0x00ce, 0x2001, 0x0038, 0x2c08,
-+ 0x621c, 0x080c, 0x130c, 0x7930, 0x9186, 0x0040, 0x05c8, 0x9186,
-+ 0x0042, 0x190c, 0x0d7e, 0x2001, 0x001e, 0x8001, 0x1df0, 0x8631,
-+ 0x1d30, 0x080c, 0x15c6, 0x0026, 0x0056, 0x2001, 0x00d2, 0x8001,
-+ 0x1df0, 0x2031, 0x2000, 0x8631, 0x1138, 0x0489, 0x601c, 0xc084,
-+ 0x601e, 0x005e, 0x002e, 0x00e0, 0x2001, 0x020b, 0x2004, 0xd0e4,
-+ 0x0d90, 0x2001, 0x015d, 0x2003, 0x0000, 0x78ab, 0x0004, 0x080c,
-+ 0x10f3, 0x601c, 0xc084, 0x601e, 0x7803, 0x0000, 0x7803, 0x0001,
-+ 0x005e, 0x002e, 0x2001, 0x0160, 0x2502, 0x2001, 0x0138, 0x2202,
-+ 0x000e, 0x6022, 0x012e, 0x0005, 0x601c, 0xc084, 0x601e, 0x7827,
-+ 0x0015, 0x7828, 0x9c06, 0x1db0, 0x782b, 0x0000, 0x0c98, 0x00f6,
-+ 0x2079, 0x0300, 0x7803, 0x0000, 0x78ab, 0x0004, 0x00fe, 0x080c,
-+ 0x62e4, 0x11b0, 0x2001, 0x0138, 0x2003, 0x0000, 0x2001, 0x0160,
-+ 0x2003, 0x0000, 0x2011, 0x012c, 0xa001, 0xa001, 0x8211, 0x1de0,
-+ 0x0081, 0x0066, 0x2031, 0x0000, 0x080c, 0x6380, 0x006e, 0x0005,
-+ 0x0469, 0x0039, 0x2001, 0x0160, 0x2502, 0x2001, 0x0138, 0x2202,
-+ 0x0005, 0x00e6, 0x2071, 0x0200, 0x080c, 0x235b, 0x2009, 0x003c,
-+ 0x080c, 0x1b67, 0x2001, 0x015d, 0x2003, 0x0000, 0x7000, 0x9084,
-+ 0x003c, 0x1de0, 0x70a0, 0x70a2, 0x7098, 0x709a, 0x709c, 0x709e,
-+ 0x2001, 0x020d, 0x2003, 0x0020, 0x00f6, 0x2079, 0x0300, 0x080c,
-+ 0x10f3, 0x7803, 0x0001, 0x00fe, 0x00ee, 0x0005, 0x2001, 0x0138,
-+ 0x2014, 0x2003, 0x0000, 0x2001, 0x0160, 0x202c, 0x2003, 0x0000,
-+ 0x080c, 0x62e4, 0x1108, 0x0005, 0x2021, 0x0260, 0x2001, 0x0141,
-+ 0x201c, 0xd3dc, 0x1168, 0x2001, 0x0109, 0x201c, 0x939c, 0x0048,
-+ 0x1160, 0x2001, 0x0111, 0x201c, 0x83ff, 0x1110, 0x8421, 0x1d70,
-+ 0x2001, 0x015d, 0x2003, 0x0000, 0x0005, 0x0046, 0x2021, 0x0019,
-+ 0x2003, 0x0048, 0xa001, 0xa001, 0x201c, 0x939c, 0x0048, 0x0120,
-+ 0x8421, 0x1db0, 0x004e, 0x0c60, 0x004e, 0x0c40, 0x00e6, 0x2071,
-+ 0x134a, 0x7003, 0x0000, 0x00ee, 0x0005, 0x00d6, 0x9280, 0x0005,
-+ 0x206c, 0x697c, 0xd1dc, 0x1904, 0x167b, 0x6964, 0x9184, 0x0007,
-+ 0x0002, 0x1619, 0x1666, 0x1619, 0x1619, 0x1619, 0x164d, 0x162c,
-+ 0x161b, 0x080c, 0x0d7e, 0x687c, 0xd0b4, 0x0904, 0x176d, 0x6890,
-+ 0x6842, 0x683a, 0x688c, 0x683e, 0x6836, 0x68ac, 0x6846, 0x68b0,
-+ 0x684a, 0x6988, 0x0804, 0x166e, 0x6864, 0x9084, 0x00ff, 0x9086,
-+ 0x001e, 0x1d38, 0x687c, 0xd0b4, 0x0904, 0x176d, 0x6890, 0x6842,
-+ 0x683a, 0x688c, 0x683e, 0x6836, 0x68ac, 0x6846, 0x68b0, 0x684a,
-+ 0x6804, 0x685a, 0x9080, 0x0019, 0x2004, 0x9084, 0x000f, 0x9080,
-+ 0x18fe, 0x2005, 0x6812, 0x6988, 0x0450, 0x918c, 0x00ff, 0x9186,
-+ 0x0015, 0x1548, 0x687c, 0xd0b4, 0x0904, 0x176d, 0x6804, 0x685a,
-+ 0x9080, 0x0019, 0x2004, 0x9084, 0x000f, 0x9080, 0x18fe, 0x2005,
-+ 0x6812, 0x6988, 0x9006, 0x6842, 0x683e, 0x0088, 0x687c, 0xd0b4,
-+ 0x0904, 0x176d, 0x6988, 0x9006, 0x6842, 0x683e, 0x2d00, 0x685a,
-+ 0x6864, 0x9084, 0x000f, 0x9080, 0x18fe, 0x2005, 0x6812, 0x6916,
-+ 0x687c, 0xc0dd, 0x687e, 0x00de, 0x0005, 0x00f6, 0x2079, 0x0090,
-+ 0x782c, 0xd0fc, 0x190c, 0x17b0, 0x00e6, 0x00d6, 0x2071, 0x134a,
-+ 0x7000, 0x9005, 0x1904, 0x16de, 0x00c6, 0x7206, 0x9280, 0x0005,
-+ 0x205c, 0x7004, 0x2068, 0x782b, 0x0004, 0x2001, 0x0200, 0x2003,
-+ 0x0040, 0x6810, 0x00d6, 0x2068, 0x686c, 0x7836, 0x6890, 0x00f6,
-+ 0x2079, 0x0200, 0x7803, 0x0040, 0xa001, 0xa001, 0xa001, 0xa001,
-+ 0xa001, 0xa001, 0x781a, 0x2079, 0x0100, 0x8004, 0x78d6, 0x00fe,
-+ 0x00de, 0x2b68, 0x6814, 0x2050, 0x6858, 0x2060, 0x6810, 0x2040,
-+ 0x6064, 0x90cc, 0x000f, 0x6944, 0x791a, 0x7116, 0x6848, 0x781e,
-+ 0x701a, 0x9006, 0x700e, 0x7012, 0x7004, 0x6940, 0x6838, 0x9106,
-+ 0x11c8, 0x693c, 0x6834, 0x9106, 0x11a8, 0x8aff, 0x01f0, 0x0126,
-+ 0x2091, 0x8000, 0x2079, 0x0090, 0x2009, 0x0001, 0x00d1, 0x0118,
-+ 0x2009, 0x0001, 0x00b1, 0x012e, 0x00ce, 0x9006, 0x00de, 0x00ee,
-+ 0x00fe, 0x0005, 0x0036, 0x0046, 0x6b38, 0x6c34, 0x080c, 0x191e,
-+ 0x004e, 0x003e, 0x0d10, 0x00ce, 0x0c88, 0x00ce, 0x9085, 0x0001,
-+ 0x0c68, 0x0076, 0x0066, 0x0056, 0x0046, 0x0036, 0x0026, 0x8aff,
-+ 0x0904, 0x1766, 0x700c, 0x7214, 0x923a, 0x7010, 0x7218, 0x9203,
-+ 0x0a04, 0x1765, 0x9705, 0x0904, 0x1765, 0x903e, 0x2730, 0x6880,
-+ 0xd0fc, 0x11a8, 0x00d6, 0x2805, 0x9c68, 0x2900, 0x0002, 0x1748,
-+ 0x172d, 0x172d, 0x1748, 0x1748, 0x1741, 0x1748, 0x172d, 0x1748,
-+ 0x1732, 0x1732, 0x1748, 0x1748, 0x1748, 0x1739, 0x1732, 0xc0fc,
-+ 0x6882, 0x6b2c, 0x6a30, 0x6d1c, 0x6c20, 0xd99c, 0x0528, 0x00d6,
-+ 0x2805, 0x9c68, 0x6f08, 0x6e0c, 0x00f0, 0x6b08, 0x6a0c, 0x6d00,
-+ 0x6c04, 0x00c8, 0x6b10, 0x6a14, 0x6d00, 0x6c04, 0x6f08, 0x6e0c,
-+ 0x0090, 0x00de, 0x00d6, 0x6864, 0x9084, 0x00ff, 0x9086, 0x001e,
-+ 0x1138, 0x00de, 0x080c, 0x18be, 0x1904, 0x16f7, 0x900e, 0x00f0,
-+ 0x00de, 0x080c, 0x0d7e, 0x00de, 0x7b12, 0x7a16, 0x7d02, 0x7c06,
-+ 0x7f0a, 0x7e0e, 0x792a, 0x7000, 0x8000, 0x7002, 0x683c, 0x9300,
-+ 0x683e, 0x6840, 0x9201, 0x6842, 0x700c, 0x9300, 0x700e, 0x7010,
-+ 0x9201, 0x7012, 0x080c, 0x18be, 0x0008, 0x9006, 0x002e, 0x003e,
-+ 0x004e, 0x005e, 0x006e, 0x007e, 0x0005, 0x080c, 0x0d7e, 0x0026,
-+ 0x2001, 0x0105, 0x2003, 0x0010, 0x782b, 0x0004, 0x7003, 0x0000,
-+ 0x7004, 0x2060, 0x00d6, 0x6014, 0x2068, 0x080c, 0xa942, 0x0118,
-+ 0x6880, 0xc0bd, 0x6882, 0x6020, 0x9086, 0x0006, 0x1180, 0x2061,
-+ 0x0100, 0x62c8, 0x2001, 0x00fa, 0x8001, 0x1df0, 0x60c8, 0x9206,
-+ 0x1dc0, 0x60c4, 0x689a, 0x60c8, 0x6896, 0x7004, 0x2060, 0x00de,
-+ 0x00c6, 0x080c, 0xa5f3, 0x00ce, 0x2001, 0x1313, 0x2004, 0x9c06,
-+ 0x1160, 0x2009, 0x0040, 0x080c, 0x1b67, 0x080c, 0x8a8d, 0x2011,
-+ 0x0000, 0x080c, 0x88ec, 0x080c, 0x7b72, 0x002e, 0x0804, 0x186a,
-+ 0x0126, 0x2091, 0x2400, 0x0006, 0x0016, 0x00f6, 0x00e6, 0x00d6,
-+ 0x00c6, 0x2079, 0x0090, 0x2071, 0x134a, 0x2b68, 0x6858, 0x2060,
-+ 0x792c, 0x782b, 0x0002, 0x9184, 0x0700, 0x1904, 0x176f, 0x7000,
-+ 0x0002, 0x186a, 0x17cd, 0x183d, 0x1868, 0x8001, 0x7002, 0xd19c,
-+ 0x1170, 0x8aff, 0x05d0, 0x2009, 0x0001, 0x080c, 0x16f1, 0x0904,
-+ 0x186a, 0x2009, 0x0001, 0x080c, 0x16f1, 0x0804, 0x186a, 0x782b,
-+ 0x0004, 0xd194, 0x0148, 0x6880, 0xc0fc, 0x6882, 0x8aff, 0x11d8,
-+ 0x687c, 0xc0f5, 0x687e, 0x00b8, 0x0026, 0x0036, 0x6b3c, 0x6a40,
-+ 0x7810, 0x682e, 0x931a, 0x7814, 0x6832, 0x9213, 0x7800, 0x681e,
-+ 0x7804, 0x6822, 0x6b3e, 0x6a42, 0x003e, 0x002e, 0x080c, 0x18d6,
-+ 0x6880, 0xc0fd, 0x6882, 0x2a00, 0x6816, 0x2c00, 0x685a, 0x2800,
-+ 0x6812, 0x7003, 0x0000, 0x0804, 0x186a, 0x00f6, 0x0026, 0x781c,
-+ 0x0006, 0x7818, 0x0006, 0x2079, 0x0100, 0x7a14, 0x9284, 0x1984,
-+ 0x9085, 0x0012, 0x7816, 0x0036, 0x2019, 0x1000, 0x8319, 0x090c,
-+ 0x0d7e, 0x7820, 0xd0bc, 0x1dd0, 0x003e, 0x79c8, 0x000e, 0x9102,
-+ 0x001e, 0x0006, 0x0016, 0x79c4, 0x000e, 0x9103, 0x78c6, 0x000e,
-+ 0x78ca, 0x9284, 0x1984, 0x9085, 0x0012, 0x7816, 0x002e, 0x00fe,
-+ 0x782b, 0x0008, 0x7003, 0x0000, 0x0468, 0x8001, 0x7002, 0xd194,
-+ 0x0168, 0x782c, 0xd0fc, 0x1904, 0x17c0, 0xd19c, 0x11f8, 0x8aff,
-+ 0x0508, 0x2009, 0x0001, 0x080c, 0x16f1, 0x00e0, 0x0026, 0x0036,
-+ 0x6b3c, 0x6a40, 0x080c, 0x18d6, 0x00d6, 0x2805, 0x9c68, 0x6064,
-+ 0xd09c, 0x1128, 0x6808, 0x931a, 0x680c, 0x9213, 0x0020, 0x6810,
-+ 0x931a, 0x6814, 0x9213, 0x00de, 0x0804, 0x17f0, 0x0804, 0x17ec,
-+ 0x080c, 0x0d7e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x001e, 0x000e,
-+ 0x012e, 0x0005, 0x00f6, 0x00e6, 0x2071, 0x134a, 0x7000, 0x9086,
-+ 0x0000, 0x0904, 0x18bb, 0x2079, 0x0090, 0x2009, 0x0207, 0x210c,
-+ 0xd194, 0x01b8, 0x2009, 0x020c, 0x210c, 0x9184, 0x0003, 0x0188,
-+ 0x080c, 0xc46f, 0x2001, 0x0133, 0x2004, 0x9005, 0x090c, 0x0d7e,
-+ 0x0016, 0x2009, 0x0040, 0x080c, 0x1b67, 0x001e, 0x2001, 0x020c,
-+ 0x2102, 0x2009, 0x0206, 0x2104, 0x2009, 0x0203, 0x210c, 0x9106,
-+ 0x1120, 0x2009, 0x0040, 0x080c, 0x1b67, 0x782c, 0xd0fc, 0x09a8,
-+ 0x080c, 0x17b0, 0x7000, 0x9086, 0x0000, 0x1978, 0x782b, 0x0004,
-+ 0x782c, 0xd0ac, 0x1de8, 0x2009, 0x0040, 0x080c, 0x1b67, 0x782b,
-+ 0x0002, 0x7003, 0x0000, 0x00ee, 0x00fe, 0x0005, 0x8840, 0x2805,
-+ 0x9005, 0x0110, 0x8a51, 0x0005, 0x6004, 0x9005, 0x0168, 0x685a,
-+ 0x2060, 0x6064, 0x9084, 0x000f, 0x9080, 0x18fe, 0x2045, 0x88ff,
-+ 0x090c, 0x0d7e, 0x8a51, 0x0005, 0x2050, 0x0005, 0x8a50, 0x8841,
-+ 0x2805, 0x9005, 0x1190, 0x2c00, 0x9d06, 0x0120, 0x6000, 0x9005,
-+ 0x1108, 0x2d00, 0x2060, 0x685a, 0x6064, 0x9084, 0x000f, 0x9080,
-+ 0x190e, 0x2045, 0x88ff, 0x090c, 0x0d7e, 0x0005, 0x0000, 0x001d,
-+ 0x0021, 0x0025, 0x0029, 0x002d, 0x0031, 0x0035, 0x0000, 0x001b,
-+ 0x0021, 0x0027, 0x002d, 0x0033, 0x0000, 0x0000, 0x0000, 0x18f3,
-+ 0x18ef, 0x0000, 0x0000, 0x18fd, 0x0000, 0x18f3, 0x0000, 0x18fa,
-+ 0x18f7, 0x0000, 0x0000, 0x0000, 0x18fd, 0x18fa, 0x0000, 0x18f5,
-+ 0x18f5, 0x0000, 0x0000, 0x18fd, 0x0000, 0x18f5, 0x0000, 0x18fb,
-+ 0x18fb, 0x0000, 0x0000, 0x0000, 0x18fd, 0x18fb, 0x00a6, 0x0096,
-+ 0x0086, 0x6b42, 0x6c3e, 0x6888, 0x9055, 0x0904, 0x19af, 0x2d60,
-+ 0x6064, 0x90cc, 0x000f, 0x99c0, 0x18fe, 0x9986, 0x0007, 0x0130,
-+ 0x9986, 0x000e, 0x0118, 0x9986, 0x000f, 0x1120, 0x608c, 0x9422,
-+ 0x6090, 0x931b, 0x2805, 0x9045, 0x1140, 0x0310, 0x0804, 0x19af,
-+ 0x6004, 0x9065, 0x0904, 0x19af, 0x0c18, 0x2805, 0x9005, 0x01a8,
-+ 0x9c68, 0xd99c, 0x1128, 0x6808, 0x9422, 0x680c, 0x931b, 0x0020,
-+ 0x6810, 0x9422, 0x6814, 0x931b, 0x0620, 0x2300, 0x9405, 0x0150,
-+ 0x8a51, 0x0904, 0x19af, 0x8840, 0x0c40, 0x6004, 0x9065, 0x0904,
-+ 0x19af, 0x0830, 0x8a51, 0x0904, 0x19af, 0x8840, 0x2805, 0x9005,
-+ 0x1158, 0x6004, 0x9065, 0x0904, 0x19af, 0x6064, 0x90cc, 0x000f,
-+ 0x99c0, 0x18fe, 0x2805, 0x2040, 0x2b68, 0x6880, 0xc0fc, 0x6882,
-+ 0x0458, 0x8422, 0x8420, 0x831a, 0x9399, 0x0000, 0x00d6, 0x2b68,
-+ 0x6c2e, 0x6b32, 0x00de, 0xd99c, 0x1168, 0x6908, 0x2400, 0x9122,
-+ 0x690c, 0x2300, 0x911b, 0x0a0c, 0x0d7e, 0x6800, 0x9420, 0x6804,
-+ 0x9319, 0x0060, 0x6910, 0x2400, 0x9122, 0x6914, 0x2300, 0x911b,
-+ 0x0a0c, 0x0d7e, 0x6800, 0x9420, 0x6804, 0x9319, 0x2b68, 0x6c1e,
-+ 0x6b22, 0x6880, 0xc0fd, 0x6882, 0x2c00, 0x685a, 0x2800, 0x6812,
-+ 0x2a00, 0x6816, 0x000e, 0x000e, 0x000e, 0x9006, 0x0028, 0x008e,
-+ 0x009e, 0x00ae, 0x9085, 0x0001, 0x0005, 0x2008, 0x9026, 0x2410,
-+ 0x780f, 0x0000, 0x7810, 0x9420, 0x9291, 0x0000, 0x7814, 0x9210,
-+ 0x8109, 0x1dc0, 0x9284, 0x000f, 0x9405, 0x0005, 0x2001, 0x0005,
-+ 0x2004, 0x9084, 0x0007, 0x0002, 0x19de, 0x17b0, 0x19de, 0x19d4,
-+ 0x19d7, 0x19da, 0x19d7, 0x19da, 0x080c, 0x17b0, 0x0005, 0x080c,
-+ 0x0fd5, 0x0005, 0x080c, 0x17b0, 0x080c, 0x0fd5, 0x0005, 0x0126,
-+ 0x2091, 0x2600, 0x2079, 0x0200, 0x2071, 0x0260, 0x2069, 0x1100,
-+ 0x7817, 0x0000, 0x789b, 0x0814, 0x78a3, 0x0406, 0x789f, 0x0410,
-+ 0x2009, 0x013b, 0x200b, 0x0400, 0x781b, 0x0002, 0x783b, 0x001f,
-+ 0x7837, 0x0020, 0x7803, 0x1600, 0x012e, 0x0005, 0x2091, 0x2600,
-+ 0x781c, 0xd0a4, 0x190c, 0x1b64, 0x7900, 0xd1dc, 0x1118, 0x9084,
-+ 0x0006, 0x001a, 0x9084, 0x000e, 0x0002, 0x1a27, 0x1a1d, 0x6bd6,
-+ 0x1a1f, 0x1a21, 0x1a21, 0x1a21, 0x1a21, 0x6bba, 0x1a1d, 0x1a23,
-+ 0x1a1d, 0x1a21, 0x1a1d, 0x1a21, 0x1a1d, 0x080c, 0x0d7e, 0x080c,
-+ 0x0d7e, 0x0031, 0x0020, 0x080c, 0x6bba, 0x080c, 0x6bd6, 0x0005,
-+ 0x0006, 0x0016, 0x0026, 0x080c, 0xc46f, 0x7930, 0x9184, 0x0003,
-+ 0x01c0, 0x2001, 0x1313, 0x2004, 0x9005, 0x0170, 0x2001, 0x0133,
-+ 0x2004, 0x9005, 0x090c, 0x0d7e, 0x00c6, 0x2001, 0x1313, 0x2064,
-+ 0x080c, 0xa5f3, 0x00ce, 0x0460, 0x2009, 0x0040, 0x080c, 0x1b67,
-+ 0x0438, 0x9184, 0x0014, 0x01b0, 0x6a00, 0x9286, 0x0003, 0x0180,
-+ 0x080c, 0x62e4, 0x1158, 0x2001, 0x12a8, 0x2003, 0x0001, 0x2001,
-+ 0x1100, 0x2003, 0x0001, 0x080c, 0x621a, 0x0010, 0x080c, 0x4faa,
-+ 0x0099, 0x0070, 0x9184, 0x1400, 0x0110, 0x0071, 0x0048, 0x9184,
-+ 0x0140, 0x0110, 0x0049, 0x0020, 0x9184, 0x8000, 0x0108, 0x0021,
-+ 0x002e, 0x001e, 0x000e, 0x0005, 0x00e6, 0x0036, 0x0046, 0x0056,
-+ 0x2071, 0x1347, 0x080c, 0x1577, 0x005e, 0x004e, 0x003e, 0x00ee,
-+ 0x0005, 0x0126, 0x2091, 0x2e00, 0x2071, 0x1100, 0x7128, 0x2001,
-+ 0x129a, 0x2102, 0x2001, 0x12a2, 0x2102, 0x2001, 0x013b, 0x2102,
-+ 0x2079, 0x0200, 0x9198, 0x0007, 0x831c, 0x831c, 0x831c, 0x2320,
-+ 0x9182, 0x0224, 0x1228, 0x2011, 0x0004, 0x8423, 0x8423, 0x0088,
-+ 0x9182, 0x02d4, 0x1228, 0x2011, 0x0003, 0x8403, 0x9420, 0x0048,
-+ 0x9182, 0x0444, 0x1220, 0x2011, 0x0002, 0x8423, 0x0010, 0x2011,
-+ 0x0001, 0x9482, 0x0110, 0x8002, 0x8020, 0x8301, 0x9402, 0x0110,
-+ 0x0208, 0x8321, 0x8217, 0x8203, 0x9405, 0x2001, 0x0201, 0x789e,
-+ 0x9198, 0x0007, 0x831c, 0x831c, 0x831c, 0x9398, 0x0003, 0x2320,
-+ 0x9182, 0x0204, 0x1228, 0x2011, 0x0004, 0x8423, 0x8423, 0x0088,
-+ 0x9182, 0x02b4, 0x1228, 0x2011, 0x0003, 0x8403, 0x9420, 0x0048,
-+ 0x9182, 0x041c, 0x1220, 0x2011, 0x0002, 0x8423, 0x0010, 0x2011,
-+ 0x0001, 0x9482, 0x010c, 0x8002, 0x8020, 0x8301, 0x9402, 0x0110,
-+ 0x0208, 0x8321, 0x8217, 0x8203, 0x9405, 0x78a3, 0x0200, 0x9198,
-+ 0x0007, 0x831c, 0x831c, 0x831c, 0x9398, 0x0005, 0x2320, 0x9182,
-+ 0x0204, 0x1230, 0x2011, 0x0008, 0x8423, 0x8423, 0x8423, 0x0488,
-+ 0x9182, 0x024c, 0x1240, 0x2011, 0x0007, 0x8403, 0x8003, 0x9400,
-+ 0x9400, 0x9420, 0x0430, 0x9182, 0x02bc, 0x1238, 0x2011, 0x0006,
-+ 0x8403, 0x8003, 0x9400, 0x9420, 0x00e0, 0x9182, 0x034c, 0x1230,
-+ 0x2011, 0x0005, 0x8403, 0x8003, 0x9420, 0x0098, 0x9182, 0x042c,
-+ 0x1228, 0x2011, 0x0004, 0x8423, 0x8423, 0x0058, 0x9182, 0x059c,
-+ 0x1228, 0x2011, 0x0003, 0x8403, 0x9420, 0x0018, 0x2011, 0x0002,
-+ 0x8423, 0x9482, 0x0228, 0x8002, 0x8020, 0x8301, 0x9402, 0x0110,
-+ 0x0208, 0x8321, 0x8217, 0x8203, 0x9405, 0x789a, 0x012e, 0x0005,
-+ 0x0006, 0x00d6, 0x2069, 0x0200, 0x6814, 0x9084, 0xffc0, 0x910d,
-+ 0x6916, 0x00de, 0x000e, 0x0005, 0x00d6, 0x2069, 0x0200, 0x9005,
-+ 0x6810, 0x0110, 0xc0a5, 0x0008, 0xc0a4, 0x6812, 0x00de, 0x0005,
-+ 0x0006, 0x00d6, 0x2069, 0x0200, 0x6810, 0x9084, 0xfff8, 0x910d,
-+ 0x6912, 0x00de, 0x000e, 0x0005, 0x7938, 0x080c, 0x0d7e, 0x00f6,
-+ 0x2079, 0x0200, 0x7902, 0xa001, 0xa001, 0xa001, 0xa001, 0xa001,
-+ 0xa001, 0x7902, 0xa001, 0xa001, 0xa001, 0xa001, 0xa001, 0xa001,
-+ 0x00fe, 0x0005, 0x0126, 0x2091, 0x2800, 0x2061, 0x0100, 0x2071,
-+ 0x1100, 0x2009, 0x0000, 0x080c, 0x2355, 0x080c, 0x2261, 0x6054,
-+ 0x8004, 0x8004, 0x8004, 0x8004, 0x9084, 0x000c, 0x6150, 0x918c,
-+ 0xfff3, 0x9105, 0x6052, 0x6050, 0x9084, 0xfbff, 0x9085, 0x2000,
-+ 0x6052, 0x2009, 0x12d7, 0x2011, 0x12d8, 0x6358, 0x939c, 0x38f0,
-+ 0x2320, 0x080c, 0x22a5, 0x1238, 0x939d, 0x4003, 0x94a5, 0x8603,
-+ 0x230a, 0x2412, 0x0030, 0x939d, 0x0203, 0x94a5, 0x8603, 0x230a,
-+ 0x2412, 0x9006, 0x080c, 0x2290, 0x9006, 0x080c, 0x2273, 0x20a9,
-+ 0x0012, 0x1d04, 0x1bb9, 0x2091, 0x6000, 0x1f04, 0x1bb9, 0x602f,
-+ 0x0100, 0x602f, 0x0000, 0x6050, 0x9085, 0x0400, 0x9084, 0xdfff,
-+ 0x6052, 0x6024, 0x6026, 0x080c, 0x1f7d, 0x2009, 0x00ef, 0x6132,
-+ 0x6136, 0x080c, 0x1f8d, 0x60e7, 0x0000, 0x61ea, 0x60e3, 0x0008,
-+ 0x604b, 0xf7f7, 0x6043, 0x0000, 0x602f, 0x0080, 0x602f, 0x0000,
-+ 0x6007, 0x049f, 0x60bb, 0x0000, 0x20a9, 0x0018, 0x60bf, 0x0000,
-+ 0x1f04, 0x1be6, 0x60bb, 0x0000, 0x60bf, 0x0108, 0x60bf, 0x0012,
-+ 0x60bf, 0x0320, 0x60bf, 0x0018, 0x601b, 0x00f0, 0x601f, 0x001e,
-+ 0x600f, 0x006b, 0x602b, 0x402f, 0x012e, 0x0005, 0x00f6, 0x2079,
-+ 0x0140, 0x78c3, 0x0080, 0x78c3, 0x0083, 0x78c3, 0x0000, 0x00fe,
-+ 0x0005, 0x2001, 0x1134, 0x2003, 0x0000, 0x2001, 0x1133, 0x2003,
-+ 0x0001, 0x0005, 0x0126, 0x2091, 0x2800, 0x0006, 0x0016, 0x0026,
-+ 0x6124, 0x9184, 0x5e2c, 0x1118, 0x9184, 0x0007, 0x002a, 0x9195,
-+ 0x0004, 0x9284, 0x0007, 0x0002, 0x1c46, 0x1c2c, 0x1c2f, 0x1c32,
-+ 0x1c37, 0x1c39, 0x1c3d, 0x1c41, 0x080c, 0x745c, 0x00b8, 0x080c,
-+ 0x752d, 0x00a0, 0x080c, 0x752d, 0x080c, 0x745c, 0x0078, 0x0099,
-+ 0x0068, 0x080c, 0x745c, 0x0079, 0x0048, 0x080c, 0x752d, 0x0059,
-+ 0x0028, 0x080c, 0x752d, 0x080c, 0x745c, 0x0029, 0x002e, 0x001e,
-+ 0x000e, 0x012e, 0x0005, 0x6124, 0x6028, 0xd09c, 0x0118, 0xd19c,
-+ 0x1904, 0x1e92, 0xd1f4, 0x0110, 0x080c, 0x0d7e, 0x080c, 0x62e4,
-+ 0x05d0, 0x7000, 0x9086, 0x0003, 0x01f0, 0x6024, 0x9084, 0x1800,
-+ 0x01d0, 0x080c, 0x630a, 0x0118, 0x080c, 0x62f6, 0x11a0, 0x6027,
-+ 0x0020, 0x6043, 0x0000, 0x709c, 0x9005, 0x1140, 0x709f, 0x0001,
-+ 0x00d6, 0x2069, 0x0140, 0x080c, 0x633e, 0x00de, 0x2001, 0x12a7,
-+ 0x2003, 0xaaaa, 0x0458, 0x080c, 0x630a, 0x15d0, 0x6024, 0x9084,
-+ 0x1800, 0x1108, 0x04a8, 0x2001, 0x12a7, 0x2003, 0xaaaa, 0x2001,
-+ 0x12a8, 0x2003, 0x0001, 0x2001, 0x1100, 0x2003, 0x0001, 0x080c,
-+ 0x621a, 0x0804, 0x1e92, 0xd1ac, 0x1518, 0x6024, 0xd0dc, 0x1170,
-+ 0xd0e4, 0x1188, 0xd0d4, 0x11a0, 0xd0cc, 0x0130, 0x7090, 0x9086,
-+ 0x0028, 0x1110, 0x080c, 0x6492, 0x0804, 0x1e92, 0x2001, 0x12a8,
-+ 0x2003, 0x0000, 0x0048, 0x2001, 0x12a8, 0x2003, 0x0002, 0x0020,
-+ 0x080c, 0x6404, 0x0804, 0x1e92, 0x080c, 0x6531, 0x0804, 0x1e92,
-+ 0xd1ac, 0x0904, 0x1db5, 0x080c, 0x62e4, 0x11d8, 0x6027, 0x0020,
-+ 0x0006, 0x0026, 0x0036, 0x080c, 0x6300, 0x1170, 0x2001, 0x12a8,
-+ 0x2003, 0x0001, 0x2001, 0x1100, 0x2003, 0x0001, 0x080c, 0x621a,
-+ 0x003e, 0x002e, 0x000e, 0x0005, 0x003e, 0x002e, 0x000e, 0x080c,
-+ 0x62be, 0x0016, 0x0046, 0x00c6, 0x644c, 0x9486, 0xf0f0, 0x1138,
-+ 0x2061, 0x0100, 0x644a, 0x6043, 0x0090, 0x6043, 0x0010, 0x74d6,
-+ 0x948c, 0xff00, 0x7034, 0xd084, 0x0178, 0x9186, 0xf800, 0x1160,
-+ 0x7040, 0xd084, 0x1148, 0xc085, 0x7042, 0x0036, 0x2418, 0x2011,
-+ 0x8016, 0x080c, 0x3f23, 0x003e, 0x9196, 0xff00, 0x05a8, 0x7058,
-+ 0x9084, 0x00ff, 0x810f, 0x81ff, 0x0110, 0x9116, 0x0568, 0x7130,
-+ 0xd184, 0x1550, 0x080c, 0x2987, 0x0128, 0xc18d, 0x7132, 0x080c,
-+ 0x58c6, 0x1510, 0x6240, 0x9294, 0x0010, 0x0130, 0x6248, 0x9294,
-+ 0xff00, 0x9296, 0xff00, 0x01c0, 0x7030, 0xd08c, 0x0904, 0x1d83,
-+ 0x7034, 0xd08c, 0x1140, 0x2001, 0x110c, 0x200c, 0xd1ac, 0x1904,
-+ 0x1d83, 0xc1ad, 0x2102, 0x0036, 0x73d4, 0x2011, 0x8013, 0x080c,
-+ 0x3f23, 0x003e, 0x0804, 0x1d83, 0x7034, 0xd08c, 0x1140, 0x2001,
-+ 0x110c, 0x200c, 0xd1ac, 0x1904, 0x1d83, 0xc1ad, 0x2102, 0x0036,
-+ 0x73d4, 0x2011, 0x8013, 0x080c, 0x3f23, 0x003e, 0x7130, 0xc185,
-+ 0x7132, 0x2011, 0x1153, 0x220c, 0xd1a4, 0x01f0, 0x0016, 0x2009,
-+ 0x0001, 0x2011, 0x0100, 0x080c, 0x73af, 0x2019, 0x000e, 0x00c6,
-+ 0x2061, 0x0000, 0x080c, 0xc0b9, 0x00ce, 0x9484, 0x00ff, 0x9080,
-+ 0x298c, 0x200d, 0x918c, 0xff00, 0x810f, 0x8127, 0x9006, 0x2009,
-+ 0x000e, 0x080c, 0xc12f, 0x001e, 0xd1ac, 0x1140, 0x0016, 0x900e,
-+ 0x2019, 0x0004, 0x080c, 0x2831, 0x001e, 0x0068, 0x0156, 0x20a9,
-+ 0x007f, 0x900e, 0x080c, 0x5608, 0x1110, 0x080c, 0x5100, 0x8108,
-+ 0x1f04, 0x1d7a, 0x015e, 0x00ce, 0x004e, 0x2011, 0x0003, 0x080c,
-+ 0x88e2, 0x2011, 0x0002, 0x080c, 0x88ec, 0x080c, 0x87a2, 0x0036,
-+ 0x901e, 0x080c, 0x8847, 0x003e, 0x60e3, 0x0000, 0x001e, 0x2001,
-+ 0x1100, 0x2014, 0x9296, 0x0004, 0x1170, 0xd19c, 0x11b0, 0x2011,
-+ 0x110c, 0x2214, 0xd29c, 0x1120, 0x6204, 0x9295, 0x0002, 0x6206,
-+ 0x6228, 0xc29d, 0x622a, 0x2003, 0x0001, 0x2001, 0x1124, 0x2003,
-+ 0x0000, 0x080c, 0x483b, 0x6027, 0x0020, 0xd194, 0x0904, 0x1e92,
-+ 0x0016, 0x6220, 0xd2b4, 0x0904, 0x1e3e, 0x080c, 0x7271, 0x080c,
-+ 0x85a2, 0x6027, 0x0004, 0x00f6, 0x2019, 0x130d, 0x2304, 0x907d,
-+ 0x0904, 0x1e0f, 0x7804, 0x9086, 0x0032, 0x1904, 0x1e0f, 0x00d6,
-+ 0x00c6, 0x00e6, 0x2069, 0x0140, 0x7810, 0x685e, 0x7808, 0x685a,
-+ 0x6043, 0x0002, 0x2001, 0x0003, 0x8001, 0x1df0, 0x6043, 0x0000,
-+ 0x2001, 0x003c, 0x8001, 0x1df0, 0x2001, 0x1000, 0x080c, 0x2401,
-+ 0x9006, 0x080c, 0x2401, 0x2001, 0x001e, 0x8001, 0x0240, 0x20a9,
-+ 0x0009, 0x080c, 0x2321, 0x6904, 0xd1dc, 0x1140, 0x0cb0, 0x2001,
-+ 0x0100, 0x080c, 0x2401, 0x9006, 0x080c, 0x2401, 0x080c, 0x79ab,
-+ 0x080c, 0x7aa4, 0x7814, 0x2070, 0x7067, 0x0103, 0x2f60, 0x080c,
-+ 0x8ed9, 0x00ee, 0x00ce, 0x00de, 0x00fe, 0x001e, 0x0005, 0x00fe,
-+ 0x00d6, 0x2069, 0x0140, 0x6804, 0x9084, 0x4000, 0x0138, 0x2001,
-+ 0x1000, 0x080c, 0x2401, 0x9006, 0x080c, 0x2401, 0x00de, 0x00c6,
-+ 0x2061, 0x1304, 0x6028, 0x909a, 0x00c8, 0x1238, 0x8000, 0x602a,
-+ 0x00ce, 0x080c, 0x857e, 0x0804, 0x1e91, 0x2061, 0x0100, 0x62c0,
-+ 0x080c, 0x8dc7, 0x2019, 0x130d, 0x2304, 0x9065, 0x0120, 0x2009,
-+ 0x0027, 0x080c, 0x8f53, 0x00ce, 0x0804, 0x1e91, 0xd2bc, 0x05f0,
-+ 0x080c, 0x727e, 0x6014, 0x9084, 0x1984, 0x9085, 0x0010, 0x6016,
-+ 0x6027, 0x0004, 0x00d6, 0x2069, 0x0140, 0x6804, 0x9084, 0x4000,
-+ 0x0138, 0x2001, 0x1000, 0x080c, 0x2401, 0x9006, 0x080c, 0x2401,
-+ 0x00de, 0x00c6, 0x2061, 0x1304, 0x6044, 0x909a, 0x00c8, 0x1608,
-+ 0x8000, 0x6046, 0x603c, 0x00ce, 0x9005, 0x0558, 0x2009, 0x07d0,
-+ 0x080c, 0x7276, 0x9080, 0x0008, 0x2004, 0x9086, 0x0006, 0x1138,
-+ 0x6114, 0x918c, 0x1984, 0x918d, 0x0012, 0x6116, 0x00d0, 0x6114,
-+ 0x918c, 0x1984, 0x918d, 0x0016, 0x6116, 0x0098, 0x6027, 0x0004,
-+ 0x0080, 0x0036, 0x2019, 0x0001, 0x080c, 0x8847, 0x003e, 0x2019,
-+ 0x1313, 0x2304, 0x9065, 0x0120, 0x2009, 0x004f, 0x080c, 0x8f53,
-+ 0x00ce, 0x001e, 0xd19c, 0x0904, 0x1f0d, 0x7034, 0xd0ac, 0x1904,
-+ 0x1edb, 0x0016, 0x0156, 0x6027, 0x0008, 0x080c, 0x2346, 0x6050,
-+ 0x9085, 0x0040, 0x6052, 0x6050, 0x9084, 0xfbcf, 0x6052, 0x080c,
-+ 0x2340, 0x9085, 0x2000, 0x6052, 0x20a9, 0x0012, 0x1d04, 0x1eae,
-+ 0x2091, 0x6000, 0x1f04, 0x1eae, 0x6050, 0x9085, 0x0400, 0x9084,
-+ 0xdfbf, 0x6052, 0x20a9, 0x0028, 0xa001, 0x1f04, 0x1ebc, 0x6150,
-+ 0x9185, 0x1400, 0x6052, 0x20a9, 0x0366, 0x1d04, 0x1ec5, 0x2091,
-+ 0x6000, 0x6020, 0xd09c, 0x1130, 0x015e, 0x6152, 0x001e, 0x6027,
-+ 0x0008, 0x04d8, 0x080c, 0x2304, 0x1f04, 0x1ec5, 0x015e, 0x6152,
-+ 0x001e, 0x6027, 0x0008, 0x0016, 0x6028, 0xc09c, 0x602a, 0x2011,
-+ 0x0003, 0x080c, 0x88e2, 0x2011, 0x0002, 0x080c, 0x88ec, 0x080c,
-+ 0x87a2, 0x0036, 0x901e, 0x080c, 0x8847, 0x003e, 0x60e3, 0x0000,
-+ 0x080c, 0xc44e, 0x080c, 0xc469, 0x2001, 0x1172, 0x2004, 0xd0fc,
-+ 0x1120, 0x9085, 0x0001, 0x080c, 0x6331, 0x9006, 0x080c, 0x2401,
-+ 0x2009, 0x0002, 0x080c, 0x2355, 0x2001, 0x1100, 0x2003, 0x0004,
-+ 0x6027, 0x0008, 0x080c, 0x0b68, 0x001e, 0x918c, 0xffd0, 0x6126,
-+ 0x0005, 0x0006, 0x0016, 0x0026, 0x0036, 0x00e6, 0x00f6, 0x0126,
-+ 0x2091, 0x8000, 0x2071, 0x1100, 0x71cc, 0x70ce, 0x9116, 0x05d8,
-+ 0x81ff, 0x01a0, 0x2009, 0x0000, 0x080c, 0x2355, 0x2011, 0x8011,
-+ 0x2019, 0x010e, 0x231c, 0x939e, 0x0007, 0x1118, 0x2019, 0x0001,
-+ 0x0010, 0x2019, 0x0000, 0x080c, 0x3f23, 0x0428, 0x2001, 0x12e0,
-+ 0x200c, 0x81ff, 0x1140, 0x2001, 0x0109, 0x2004, 0xd0b4, 0x0118,
-+ 0x2019, 0x0003, 0x0008, 0x2118, 0x2011, 0x8012, 0x080c, 0x3f23,
-+ 0x2001, 0x1172, 0x2004, 0xd0fc, 0x1170, 0x00c6, 0x080c, 0x1fd8,
-+ 0x080c, 0x877f, 0x2061, 0x0100, 0x2019, 0x0028, 0x2009, 0x0002,
-+ 0x080c, 0x2831, 0x00ce, 0x012e, 0x00fe, 0x00ee, 0x003e, 0x002e,
-+ 0x001e, 0x000e, 0x0005, 0x2028, 0x918c, 0x00ff, 0x2130, 0x9094,
-+ 0xff00, 0x1110, 0x81ff, 0x0118, 0x080c, 0x6e62, 0x0038, 0x9080,
-+ 0x298c, 0x200d, 0x918c, 0xff00, 0x810f, 0x9006, 0x0005, 0x9080,
-+ 0x298c, 0x200d, 0x918c, 0x00ff, 0x0005, 0x00d6, 0x2069, 0x0140,
-+ 0x2001, 0x1116, 0x2003, 0x00ef, 0x20a9, 0x0010, 0x9006, 0x6852,
-+ 0x6856, 0x1f04, 0x1f88, 0x00de, 0x0005, 0x0006, 0x00d6, 0x0026,
-+ 0x2069, 0x0140, 0x2001, 0x1116, 0x2102, 0x8114, 0x8214, 0x8214,
-+ 0x8214, 0x20a9, 0x0010, 0x6853, 0x0000, 0x9006, 0x82ff, 0x1128,
-+ 0x9184, 0x000f, 0x9080, 0xc84f, 0x2005, 0x6856, 0x8211, 0x1f04,
-+ 0x1f9d, 0x002e, 0x00de, 0x000e, 0x0005, 0x00c6, 0x2061, 0x1100,
-+ 0x6030, 0x0110, 0xc09d, 0x0008, 0xc09c, 0x6032, 0x00ce, 0x0005,
-+ 0x0156, 0x00d6, 0x0026, 0x0016, 0x0006, 0x2069, 0x0140, 0x6980,
-+ 0x9116, 0x0180, 0x9112, 0x1230, 0x8212, 0x8210, 0x22a8, 0x2001,
-+ 0x0402, 0x0018, 0x22a8, 0x2001, 0x0404, 0x680e, 0x1f04, 0x1fcd,
-+ 0x680f, 0x0000, 0x000e, 0x001e, 0x002e, 0x00de, 0x015e, 0x0005,
-+ 0x2001, 0x1153, 0x2004, 0xd0c4, 0x0150, 0xd0a4, 0x0140, 0x9006,
-+ 0x0046, 0x2020, 0x2009, 0x002e, 0x080c, 0xc12f, 0x004e, 0x0005,
-+ 0x00f6, 0x0016, 0x0026, 0x2079, 0x0140, 0x78c4, 0xd0dc, 0x0904,
-+ 0x2045, 0x080c, 0x22a5, 0x0660, 0x9084, 0x0700, 0x908e, 0x0600,
-+ 0x1120, 0x2011, 0x4000, 0x900e, 0x0458, 0x908e, 0x0500, 0x1120,
-+ 0x2011, 0x8000, 0x900e, 0x0420, 0x908e, 0x0400, 0x1120, 0x9016,
-+ 0x2009, 0x0001, 0x00e8, 0x908e, 0x0300, 0x1120, 0x9016, 0x2009,
-+ 0x0002, 0x00b0, 0x908e, 0x0200, 0x1120, 0x9016, 0x2009, 0x0004,
-+ 0x0078, 0x908e, 0x0100, 0x1548, 0x9016, 0x2009, 0x0008, 0x0040,
-+ 0x9084, 0x0700, 0x908e, 0x0300, 0x1500, 0x2011, 0x0030, 0x0058,
-+ 0x2300, 0x9080, 0x0020, 0x2018, 0x080c, 0x73f0, 0x928c, 0xff00,
-+ 0x0110, 0x2011, 0x00ff, 0x2200, 0x8007, 0x9085, 0x004c, 0x78c2,
-+ 0x2009, 0x0138, 0x220a, 0x080c, 0x62e4, 0x1118, 0x2009, 0x1298,
-+ 0x220a, 0x002e, 0x001e, 0x00fe, 0x0005, 0x78c3, 0x0000, 0x0cc8,
-+ 0x0126, 0x2091, 0x2800, 0x0006, 0x0016, 0x0026, 0x2001, 0x0170,
-+ 0x200c, 0x8000, 0x2014, 0x9184, 0x0003, 0x0110, 0x080c, 0x0d7e,
-+ 0x002e, 0x001e, 0x000e, 0x012e, 0x0005, 0x2001, 0x0171, 0x2004,
-+ 0xd0dc, 0x0168, 0x2001, 0x0170, 0x200c, 0x918c, 0x00ff, 0x918e,
-+ 0x004c, 0x1128, 0x200c, 0x918c, 0xff00, 0x810f, 0x0005, 0x900e,
-+ 0x2001, 0x0227, 0x2004, 0x8007, 0x9084, 0x00ff, 0x8004, 0x9108,
-+ 0x2001, 0x0226, 0x2004, 0x8007, 0x9084, 0x00ff, 0x8004, 0x9108,
-+ 0x0005, 0x0018, 0x000c, 0x0018, 0x0020, 0x1000, 0x0800, 0x1000,
-+ 0x1800, 0x0156, 0x0006, 0x0016, 0x0026, 0x00e6, 0x2001, 0x12ca,
-+ 0x2004, 0x908a, 0x0007, 0x1a0c, 0x0d7e, 0x0033, 0x00ee, 0x002e,
-+ 0x001e, 0x000e, 0x015e, 0x0005, 0x20a3, 0x20c1, 0x20e5, 0x20e7,
-+ 0x2110, 0x2112, 0x2114, 0x2001, 0x0001, 0x080c, 0x1f11, 0x080c,
-+ 0x22fd, 0x2001, 0x12cc, 0x2003, 0x0000, 0x7828, 0x9084, 0xe1d7,
-+ 0x782a, 0x9006, 0x20a9, 0x0009, 0x080c, 0x22b9, 0x2001, 0x12ca,
-+ 0x2003, 0x0006, 0x2009, 0x001e, 0x2011, 0x2115, 0x080c, 0x7283,
-+ 0x0005, 0x2009, 0x12cf, 0x200b, 0x0000, 0x2001, 0x12d4, 0x2003,
-+ 0x0036, 0x2001, 0x12d3, 0x2003, 0x002a, 0x2001, 0x12cc, 0x2003,
-+ 0x0001, 0x9006, 0x080c, 0x2273, 0x2001, 0xffff, 0x20a9, 0x0009,
-+ 0x080c, 0x22b9, 0x2001, 0x12ca, 0x2003, 0x0006, 0x2009, 0x001e,
-+ 0x2011, 0x2115, 0x080c, 0x7283, 0x0005, 0x080c, 0x0d7e, 0x2001,
-+ 0x12d4, 0x2003, 0x0036, 0x2001, 0x12cc, 0x2003, 0x0003, 0x7a38,
-+ 0x9294, 0x0005, 0x9296, 0x0004, 0x0110, 0x9006, 0x0010, 0x2001,
-+ 0x0001, 0x080c, 0x2273, 0x2001, 0x12d0, 0x2003, 0x0000, 0x2001,
-+ 0xffff, 0x20a9, 0x0009, 0x080c, 0x22b9, 0x2001, 0x12ca, 0x2003,
-+ 0x0006, 0x2009, 0x001e, 0x2011, 0x2115, 0x080c, 0x7283, 0x0005,
-+ 0x080c, 0x0d7e, 0x080c, 0x0d7e, 0x0005, 0x0006, 0x0016, 0x0026,
-+ 0x00e6, 0x00f6, 0x0156, 0x0126, 0x2091, 0x8000, 0x2079, 0x0100,
-+ 0x2001, 0x12cc, 0x2004, 0x908a, 0x0007, 0x1a0c, 0x0d7e, 0x0043,
-+ 0x012e, 0x015e, 0x00fe, 0x00ee, 0x002e, 0x001e, 0x000e, 0x0005,
-+ 0x2137, 0x2157, 0x2197, 0x21c7, 0x21eb, 0x21fb, 0x21fd, 0x080c,
-+ 0x22ad, 0x11b0, 0x7850, 0x9084, 0xefff, 0x7852, 0x2009, 0x12d2,
-+ 0x2104, 0x7a38, 0x9294, 0x0005, 0x9296, 0x0004, 0x0110, 0xc08d,
-+ 0x0008, 0xc085, 0x200a, 0x2001, 0x12ca, 0x2003, 0x0001, 0x0030,
-+ 0x080c, 0x2221, 0x2001, 0xffff, 0x080c, 0x20b2, 0x0005, 0x080c,
-+ 0x21ff, 0x05e0, 0x2009, 0x12d3, 0x2104, 0x8001, 0x200a, 0x080c,
-+ 0x22ad, 0x1178, 0x7850, 0x9084, 0xefff, 0x7852, 0x7a38, 0x9294,
-+ 0x0005, 0x9296, 0x0005, 0x0518, 0x2009, 0x12d2, 0x2104, 0xc085,
-+ 0x200a, 0x2009, 0x12cf, 0x2104, 0x8000, 0x200a, 0x9086, 0x0005,
-+ 0x0118, 0x080c, 0x2207, 0x00c0, 0x200b, 0x0000, 0x7a38, 0x9294,
-+ 0x0006, 0x9296, 0x0004, 0x0110, 0x9006, 0x0010, 0x2001, 0x0001,
-+ 0x080c, 0x2290, 0x2001, 0x12cc, 0x2003, 0x0002, 0x0028, 0x2001,
-+ 0x12ca, 0x2003, 0x0003, 0x0010, 0x080c, 0x20d4, 0x0005, 0x080c,
-+ 0x21ff, 0x0560, 0x2009, 0x12d3, 0x2104, 0x8001, 0x200a, 0x080c,
-+ 0x22ad, 0x1168, 0x7850, 0x9084, 0xefff, 0x7852, 0x2001, 0x12ca,
-+ 0x2003, 0x0003, 0x2001, 0x12cb, 0x2003, 0x0000, 0x00b8, 0x2009,
-+ 0x12d3, 0x2104, 0x9005, 0x1118, 0x080c, 0x2245, 0x0010, 0x080c,
-+ 0x2214, 0x080c, 0x2207, 0x2009, 0x12cf, 0x200b, 0x0000, 0x2001,
-+ 0x12cc, 0x2003, 0x0001, 0x080c, 0x20d4, 0x0000, 0x0005, 0x04b9,
-+ 0x0508, 0x080c, 0x22ad, 0x11b8, 0x7850, 0x9084, 0xefff, 0x7852,
-+ 0x2009, 0x12d0, 0x2104, 0x8000, 0x200a, 0x9086, 0x0007, 0x0108,
-+ 0x0078, 0x2001, 0x12d5, 0x2003, 0x000a, 0x2009, 0x12d2, 0x2104,
-+ 0xc0fd, 0x200a, 0x0038, 0x0419, 0x2001, 0x12cc, 0x2003, 0x0004,
-+ 0x080c, 0x20ff, 0x0005, 0x0099, 0x0168, 0x080c, 0x22ad, 0x1138,
-+ 0x7850, 0x9084, 0xefff, 0x7852, 0x080c, 0x20eb, 0x0018, 0x0079,
-+ 0x080c, 0x20ff, 0x0005, 0x080c, 0x0d7e, 0x080c, 0x0d7e, 0x2009,
-+ 0x12d4, 0x2104, 0x8001, 0x200a, 0x090c, 0x2261, 0x0005, 0x7a38,
-+ 0x9294, 0x0005, 0x9296, 0x0005, 0x0110, 0x9006, 0x0010, 0x2001,
-+ 0x0001, 0x080c, 0x2290, 0x0005, 0x7a38, 0x9294, 0x0006, 0x9296,
-+ 0x0006, 0x0110, 0x9006, 0x0010, 0x2001, 0x0001, 0x080c, 0x2273,
-+ 0x0005, 0x2009, 0x12cf, 0x2104, 0x8000, 0x200a, 0x9086, 0x0005,
-+ 0x0108, 0x0070, 0x200b, 0x0000, 0x7a38, 0x9294, 0x0006, 0x9296,
-+ 0x0006, 0x0118, 0x2001, 0x0000, 0x0010, 0x2001, 0x0001, 0x04d9,
-+ 0x7a38, 0x9294, 0x0005, 0x9296, 0x0005, 0x0110, 0x9006, 0x0010,
-+ 0x2001, 0x0001, 0x080c, 0x2290, 0x0005, 0x0086, 0x2001, 0x12d2,
-+ 0x2004, 0x9084, 0x7fff, 0x090c, 0x0d7e, 0x2009, 0x12d1, 0x2144,
-+ 0x8846, 0x280a, 0x9844, 0x0dd8, 0xd08c, 0x1120, 0xd084, 0x1120,
-+ 0x080c, 0x0d7e, 0x9006, 0x0010, 0x2001, 0x0001, 0x00a1, 0x008e,
-+ 0x0005, 0x0006, 0x0156, 0x2001, 0x12ca, 0x20a9, 0x0009, 0x2003,
-+ 0x0000, 0x8000, 0x1f04, 0x2267, 0x2001, 0x12d1, 0x2003, 0x8000,
-+ 0x015e, 0x000e, 0x0005, 0x00f6, 0x2079, 0x0100, 0x9085, 0x0000,
-+ 0x0158, 0x7838, 0x9084, 0xfff9, 0x9085, 0x0004, 0x783a, 0x2009,
-+ 0x12d7, 0x210c, 0x795a, 0x0050, 0x7838, 0x9084, 0xfffb, 0x9085,
-+ 0x0006, 0x783a, 0x2009, 0x12d8, 0x210c, 0x795a, 0x00fe, 0x0005,
-+ 0x00f6, 0x2079, 0x0100, 0x9085, 0x0000, 0x0138, 0x7838, 0x9084,
-+ 0xfffa, 0x9085, 0x0004, 0x783a, 0x0030, 0x7838, 0x9084, 0xfffb,
-+ 0x9085, 0x0005, 0x783a, 0x00fe, 0x0005, 0x0006, 0x2001, 0x0100,
-+ 0x2004, 0x9082, 0x0007, 0x000e, 0x0005, 0x0156, 0x20a9, 0x0064,
-+ 0x7820, 0x080c, 0x2340, 0xd09c, 0x1110, 0x1f04, 0x22b0, 0x015e,
-+ 0x0005, 0x0126, 0x0016, 0x0006, 0x2091, 0x8000, 0x080c, 0x2346,
-+ 0x7850, 0x9085, 0x0040, 0x7852, 0x7850, 0x9084, 0xfbcf, 0x7852,
-+ 0x080c, 0x2340, 0x9085, 0x2000, 0x7852, 0x000e, 0x2008, 0x9186,
-+ 0x0000, 0x1118, 0x783b, 0x0007, 0x0090, 0x9186, 0x0001, 0x1118,
-+ 0x783b, 0x0006, 0x0060, 0x9186, 0x0002, 0x1118, 0x783b, 0x0005,
-+ 0x0030, 0x9186, 0x0003, 0x1118, 0x783b, 0x0004, 0x0000, 0x0006,
-+ 0x1d04, 0x22e8, 0x080c, 0x72a5, 0x1f04, 0x22e8, 0x7850, 0x9085,
-+ 0x0400, 0x9084, 0xdfbf, 0x7852, 0x080c, 0x2340, 0x9085, 0x1000,
-+ 0x7852, 0x000e, 0x001e, 0x012e, 0x0005, 0x080c, 0x2346, 0x7850,
-+ 0x9084, 0xffcf, 0x7852, 0x0005, 0x0006, 0x0156, 0x00f6, 0x2079,
-+ 0x0100, 0x20a9, 0x000a, 0x7854, 0xd0ac, 0x1130, 0x7820, 0xd0e4,
-+ 0x1140, 0x1f04, 0x230e, 0x0028, 0x7854, 0xd08c, 0x1110, 0x1f04,
-+ 0x2314, 0x00fe, 0x015e, 0x000e, 0x0005, 0x7820, 0x0409, 0xd09c,
-+ 0x0005, 0x1d04, 0x2321, 0x080c, 0x72a5, 0x1f04, 0x2321, 0x0005,
-+ 0x0006, 0x2001, 0x12d6, 0x2004, 0x9086, 0x0000, 0x000e, 0x0005,
-+ 0x0006, 0x2001, 0x12d6, 0x2004, 0x9086, 0x0001, 0x000e, 0x0005,
-+ 0x0006, 0x2001, 0x12d6, 0x2004, 0x9086, 0x0002, 0x000e, 0x0005,
-+ 0xa001, 0xa001, 0xa001, 0xa001, 0xa001, 0x0005, 0x0006, 0x0016,
-+ 0x2009, 0x0140, 0x2104, 0x080c, 0x6300, 0x1110, 0xc0bd, 0x0008,
-+ 0xc0bc, 0x200a, 0x001e, 0x000e, 0x0005, 0x0006, 0x2001, 0x12e0,
-+ 0x2102, 0x000e, 0x0005, 0x2009, 0x0171, 0x2104, 0xd0dc, 0x0140,
-+ 0x2009, 0x0170, 0x2104, 0x200b, 0x0080, 0xa001, 0xa001, 0x200a,
-+ 0x0005, 0x0036, 0x0046, 0x2001, 0x0141, 0x200c, 0x918c, 0xff00,
-+ 0x9186, 0x2000, 0x0118, 0x9186, 0x0100, 0x1560, 0x2009, 0x017f,
-+ 0x200b, 0x00a2, 0x2009, 0x0169, 0x2019, 0x0160, 0x2324, 0x2011,
-+ 0x0003, 0x2104, 0x9084, 0x0007, 0x9086, 0x0003, 0x11b8, 0x2304,
-+ 0x9402, 0x02a0, 0x1d98, 0x8211, 0x1da0, 0x84ff, 0x0170, 0x2001,
-+ 0x0141, 0x200c, 0x918c, 0xff00, 0x9186, 0x0100, 0x0130, 0x2009,
-+ 0x110c, 0x2104, 0xc0dd, 0x200a, 0x0008, 0x0419, 0x2001, 0x017f,
-+ 0x2003, 0x0000, 0x004e, 0x003e, 0x0005, 0x2001, 0x110c, 0x2004,
-+ 0xd0dc, 0x01b0, 0x2001, 0x0160, 0x2004, 0x9005, 0x0140, 0x2001,
-+ 0x0141, 0x2004, 0x9084, 0xff00, 0x9086, 0x0100, 0x1148, 0x0126,
-+ 0x2091, 0x8000, 0x0016, 0x0026, 0x0021, 0x002e, 0x001e, 0x012e,
-+ 0x0005, 0x00c6, 0x2061, 0x0100, 0x6014, 0x0006, 0x2001, 0x0161,
-+ 0x2003, 0x0000, 0x6017, 0x0018, 0xa001, 0xa001, 0x602f, 0x0008,
-+ 0x6104, 0x918e, 0x0010, 0x6106, 0x918e, 0x0010, 0x6106, 0x6017,
-+ 0x0040, 0x2001, 0x1000, 0x0429, 0x9006, 0x0419, 0x001e, 0x9184,
-+ 0x0003, 0x01c0, 0x0036, 0x2019, 0x0141, 0x2304, 0x9084, 0xff00,
-+ 0x9086, 0x0800, 0x1dd0, 0x919c, 0xffe4, 0x9184, 0x0001, 0x0118,
-+ 0x9385, 0x0009, 0x6016, 0x9184, 0x0002, 0x0118, 0x9385, 0x0012,
-+ 0x6016, 0x003e, 0x2001, 0x110c, 0x200c, 0xc1dc, 0x2102, 0x00ce,
-+ 0x0005, 0x0016, 0x0026, 0x2009, 0x0140, 0x2114, 0x9294, 0x0001,
-+ 0x9215, 0x220a, 0x002e, 0x001e, 0x0005, 0x2678, 0x2678, 0x249d,
-+ 0x249d, 0x24a9, 0x24a9, 0x24b5, 0x24b5, 0x24c3, 0x24c3, 0x24cf,
-+ 0x24cf, 0x24dd, 0x24dd, 0x24eb, 0x24eb, 0x24fd, 0x24fd, 0x2509,
-+ 0x2509, 0x2517, 0x2517, 0x2535, 0x2535, 0x2555, 0x2555, 0x2525,
-+ 0x2525, 0x2545, 0x2545, 0x2563, 0x2563, 0x24fb, 0x24fb, 0x24fb,
-+ 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb,
-+ 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb,
-+ 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb,
-+ 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x2575, 0x2575, 0x2581,
-+ 0x2581, 0x258f, 0x258f, 0x259d, 0x259d, 0x25ad, 0x25ad, 0x25bb,
-+ 0x25bb, 0x25cb, 0x25cb, 0x25db, 0x25db, 0x25ed, 0x25ed, 0x25fb,
-+ 0x25fb, 0x260b, 0x260b, 0x262d, 0x262d, 0x264f, 0x264f, 0x261b,
-+ 0x261b, 0x263e, 0x263e, 0x265e, 0x265e, 0x24fb, 0x24fb, 0x24fb,
-+ 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb,
-+ 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb,
-+ 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb,
-+ 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb,
-+ 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb,
-+ 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x0106, 0x0006, 0x0126,
-+ 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x1c12, 0x0804,
-+ 0x2670, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
-+ 0x0156, 0x080c, 0x19c6, 0x0804, 0x2670, 0x0106, 0x0006, 0x0126,
-+ 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x19c6, 0x080c,
-+ 0x1c12, 0x0804, 0x2670, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
-+ 0x0136, 0x0146, 0x0156, 0x080c, 0x19fe, 0x0804, 0x2670, 0x0106,
-+ 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
-+ 0x1c12, 0x080c, 0x19fe, 0x0804, 0x2670, 0x0106, 0x0006, 0x0126,
-+ 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x19c6, 0x080c,
-+ 0x19fe, 0x0804, 0x2670, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
-+ 0x0136, 0x0146, 0x0156, 0x080c, 0x19c6, 0x080c, 0x1c12, 0x080c,
-+ 0x19fe, 0x0804, 0x2670, 0xa001, 0x0cf0, 0x0106, 0x0006, 0x0126,
-+ 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x1125, 0x0804,
-+ 0x2670, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
-+ 0x0156, 0x080c, 0x1c12, 0x080c, 0x1125, 0x0804, 0x2670, 0x0106,
-+ 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
-+ 0x19c6, 0x080c, 0x1125, 0x0804, 0x2670, 0x0106, 0x0006, 0x0126,
-+ 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x1c12, 0x080c,
-+ 0x1125, 0x080c, 0x19fe, 0x0804, 0x2670, 0x0106, 0x0006, 0x0126,
-+ 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x19c6, 0x080c,
-+ 0x1c12, 0x080c, 0x1125, 0x0804, 0x2670, 0x0106, 0x0006, 0x0126,
-+ 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x19c6, 0x080c,
-+ 0x1125, 0x080c, 0x19fe, 0x0804, 0x2670, 0x0106, 0x0006, 0x0126,
-+ 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x1125, 0x080c,
-+ 0x19fe, 0x0804, 0x2670, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
-+ 0x0136, 0x0146, 0x0156, 0x080c, 0x19c6, 0x080c, 0x1c12, 0x080c,
-+ 0x1125, 0x080c, 0x19fe, 0x0804, 0x2670, 0x0106, 0x0006, 0x0126,
-+ 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2048, 0x0804,
-+ 0x2670, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
-+ 0x0156, 0x080c, 0x2048, 0x080c, 0x1c12, 0x0804, 0x2670, 0x0106,
-+ 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
-+ 0x2048, 0x080c, 0x19c6, 0x0804, 0x2670, 0x0106, 0x0006, 0x0126,
-+ 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2048, 0x080c,
-+ 0x19c6, 0x080c, 0x1c12, 0x0804, 0x2670, 0x0106, 0x0006, 0x0126,
-+ 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2048, 0x080c,
-+ 0x19fe, 0x0804, 0x2670, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
-+ 0x0136, 0x0146, 0x0156, 0x080c, 0x2048, 0x080c, 0x1c12, 0x080c,
-+ 0x19fe, 0x0804, 0x2670, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
-+ 0x0136, 0x0146, 0x0156, 0x080c, 0x2048, 0x080c, 0x19c6, 0x080c,
-+ 0x19fe, 0x0804, 0x2670, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
-+ 0x0136, 0x0146, 0x0156, 0x080c, 0x2048, 0x080c, 0x19c6, 0x080c,
-+ 0x1c12, 0x080c, 0x19fe, 0x0804, 0x2670, 0x0106, 0x0006, 0x0126,
-+ 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2048, 0x080c,
-+ 0x1125, 0x0804, 0x2670, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
-+ 0x0136, 0x0146, 0x0156, 0x080c, 0x2048, 0x080c, 0x1c12, 0x080c,
-+ 0x1125, 0x0804, 0x2670, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
-+ 0x0136, 0x0146, 0x0156, 0x080c, 0x2048, 0x080c, 0x19c6, 0x080c,
-+ 0x1125, 0x0804, 0x2670, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
-+ 0x0136, 0x0146, 0x0156, 0x080c, 0x2048, 0x080c, 0x1c12, 0x080c,
-+ 0x1125, 0x080c, 0x19fe, 0x0804, 0x2670, 0x0106, 0x0006, 0x0126,
-+ 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2048, 0x080c,
-+ 0x19c6, 0x080c, 0x1c12, 0x080c, 0x1125, 0x0490, 0x0106, 0x0006,
-+ 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2048,
-+ 0x080c, 0x19c6, 0x080c, 0x1125, 0x080c, 0x19fe, 0x0408, 0x0106,
-+ 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
-+ 0x2048, 0x080c, 0x1125, 0x080c, 0x19fe, 0x0090, 0x0106, 0x0006,
-+ 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2048,
-+ 0x080c, 0x19c6, 0x080c, 0x1c12, 0x080c, 0x1125, 0x080c, 0x19fe,
-+ 0x015e, 0x014e, 0x013e, 0x01de, 0x01ce, 0x012e, 0x000e, 0x010e,
-+ 0x000d, 0x00c6, 0x0026, 0x0046, 0x9026, 0x080c, 0x588e, 0x1904,
-+ 0x275a, 0x72d8, 0x2001, 0x12a7, 0x2004, 0x9005, 0x1110, 0xd29c,
-+ 0x0148, 0xd284, 0x1138, 0xd2bc, 0x1904, 0x275a, 0x080c, 0x275e,
-+ 0x0804, 0x275a, 0xd2cc, 0x1904, 0x275a, 0x080c, 0x62e4, 0x1120,
-+ 0x70a7, 0xffff, 0x0804, 0x275a, 0xd294, 0x0120, 0x70a7, 0xffff,
-+ 0x0804, 0x275a, 0x080c, 0x2982, 0x0120, 0x70a7, 0xffff, 0x0804,
-+ 0x275a, 0x2001, 0x1116, 0x203c, 0x728c, 0xd284, 0x0904, 0x26fd,
-+ 0xd28c, 0x1904, 0x26fd, 0x0036, 0x73a4, 0x938e, 0xffff, 0x1110,
-+ 0x2019, 0x0001, 0x8314, 0x92e0, 0x1580, 0x2c04, 0x938c, 0x0001,
-+ 0x0120, 0x9084, 0xff00, 0x8007, 0x0010, 0x9084, 0x00ff, 0x970e,
-+ 0x0558, 0x908e, 0x0000, 0x0540, 0x908e, 0x00ff, 0x1150, 0x7230,
-+ 0xd284, 0x1530, 0x728c, 0xc28d, 0x728e, 0x70a7, 0xffff, 0x003e,
-+ 0x0420, 0x900e, 0x080c, 0x1f63, 0x080c, 0x55b3, 0x11b8, 0x6004,
-+ 0x9084, 0x00ff, 0x9086, 0x0006, 0x1150, 0x7030, 0xd08c, 0x0118,
-+ 0x6000, 0xd0bc, 0x0120, 0x080c, 0x2771, 0x0140, 0x0028, 0x080c,
-+ 0x28a1, 0x080c, 0x279e, 0x0110, 0x8318, 0x0820, 0x73a6, 0x0010,
-+ 0x70a7, 0xffff, 0x003e, 0x0804, 0x275a, 0x9780, 0x298c, 0x203d,
-+ 0x97bc, 0xff00, 0x873f, 0x2041, 0x007e, 0x70a4, 0x9096, 0xffff,
-+ 0x1118, 0x900e, 0x28a8, 0x0050, 0x9812, 0x0220, 0x2008, 0x9802,
-+ 0x20a8, 0x0020, 0x70a7, 0xffff, 0x0804, 0x275a, 0x2700, 0x0156,
-+ 0x0016, 0x9106, 0x05a0, 0xc484, 0x080c, 0x5608, 0x0120, 0x080c,
-+ 0x55b3, 0x15a8, 0x0008, 0xc485, 0x6004, 0x9084, 0x00ff, 0x9086,
-+ 0x0006, 0x1130, 0x7030, 0xd08c, 0x01e8, 0x6000, 0xd0bc, 0x11d0,
-+ 0x728c, 0xd28c, 0x0188, 0x6004, 0x9084, 0x00ff, 0x9082, 0x0006,
-+ 0x02b0, 0xd484, 0x1118, 0x080c, 0x55d0, 0x0028, 0x080c, 0x292a,
-+ 0x0170, 0x080c, 0x2955, 0x0058, 0x080c, 0x28a1, 0x080c, 0x279e,
-+ 0x0170, 0x0028, 0x080c, 0x292a, 0x0110, 0x0419, 0x0140, 0x001e,
-+ 0x8108, 0x015e, 0x1f04, 0x2716, 0x70a7, 0xffff, 0x0018, 0x001e,
-+ 0x015e, 0x71a6, 0x004e, 0x002e, 0x00ce, 0x0005, 0x00c6, 0x0016,
-+ 0x70a7, 0x0001, 0x2009, 0x007e, 0x080c, 0x55b3, 0x1138, 0x080c,
-+ 0x28a1, 0x04a1, 0x0118, 0x70d8, 0xc0bd, 0x70da, 0x001e, 0x00ce,
-+ 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6, 0x2c68, 0x2001, 0x1157,
-+ 0x2004, 0x9084, 0x00ff, 0x6842, 0x080c, 0x8f26, 0x01d0, 0x2d00,
-+ 0x6012, 0x080c, 0xad70, 0x6023, 0x0001, 0x9006, 0x080c, 0x5556,
-+ 0x2001, 0x0000, 0x080c, 0x5568, 0x0126, 0x2091, 0x8000, 0x70a0,
-+ 0x8000, 0x70a2, 0x012e, 0x2009, 0x0004, 0x080c, 0x8f53, 0x9085,
-+ 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005, 0x0016, 0x0076,
-+ 0x00d6, 0x00c6, 0x2c68, 0x2001, 0x1157, 0x2004, 0x9084, 0x00ff,
-+ 0x6842, 0x080c, 0x8f26, 0x0548, 0x2d00, 0x6012, 0x6800, 0xc0c4,
-+ 0x6802, 0x68a0, 0x9086, 0x007e, 0x0140, 0x6804, 0x9084, 0x00ff,
-+ 0x9086, 0x0006, 0x1110, 0x080c, 0x2862, 0x080c, 0xad70, 0x6023,
-+ 0x0001, 0x9006, 0x080c, 0x5556, 0x2001, 0x0002, 0x080c, 0x5568,
-+ 0x0126, 0x2091, 0x8000, 0x70a0, 0x8000, 0x70a2, 0x012e, 0x2009,
-+ 0x0002, 0x080c, 0x8f53, 0x9085, 0x0001, 0x00ce, 0x00de, 0x007e,
-+ 0x001e, 0x0005, 0x00c6, 0x0026, 0x2009, 0x0080, 0x080c, 0x55b3,
-+ 0x1120, 0x0031, 0x0110, 0x70df, 0xffff, 0x002e, 0x00ce, 0x0005,
-+ 0x0016, 0x0076, 0x00d6, 0x00c6, 0x2c68, 0x080c, 0x8e83, 0x01e0,
-+ 0x2d00, 0x6012, 0x080c, 0xad70, 0x6023, 0x0001, 0x9006, 0x080c,
-+ 0x5556, 0x2001, 0x0002, 0x080c, 0x5568, 0x0126, 0x2091, 0x8000,
-+ 0x080c, 0x2862, 0x70e0, 0x8000, 0x70e2, 0x012e, 0x2009, 0x0002,
-+ 0x080c, 0x8f53, 0x9085, 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e,
-+ 0x0005, 0x00c6, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2009, 0x007f,
-+ 0x080c, 0x55b3, 0x1190, 0x2c68, 0x080c, 0x8e83, 0x0170, 0x2d00,
-+ 0x6012, 0x6316, 0x6023, 0x0001, 0x620a, 0x080c, 0xad70, 0x2009,
-+ 0x0022, 0x080c, 0x8f53, 0x9085, 0x0001, 0x012e, 0x00de, 0x00ce,
-+ 0x0005, 0x00e6, 0x00c6, 0x0066, 0x0036, 0x0026, 0x21f0, 0x080c,
-+ 0x76fb, 0x080c, 0x768d, 0x080c, 0x9ce7, 0x3e08, 0x2130, 0x81ff,
-+ 0x0120, 0x20a9, 0x007e, 0x900e, 0x0018, 0x20a9, 0x007f, 0x900e,
-+ 0x0016, 0x080c, 0x5608, 0x1140, 0x9686, 0x0002, 0x1118, 0x6000,
-+ 0xd0bc, 0x1110, 0x080c, 0x5100, 0x001e, 0x8108, 0x1f04, 0x2848,
-+ 0x86ff, 0x1110, 0x080c, 0x0a79, 0x002e, 0x003e, 0x006e, 0x00ce,
-+ 0x00ee, 0x0005, 0x00e6, 0x00c6, 0x0036, 0x0026, 0x0016, 0x6210,
-+ 0x2270, 0x72a0, 0x0026, 0x2019, 0x0029, 0x080c, 0x76f0, 0x0076,
-+ 0x2039, 0x0000, 0x080c, 0x75ee, 0x2c08, 0x080c, 0xbec2, 0x007e,
-+ 0x001e, 0x2e60, 0x6210, 0x6314, 0x080c, 0x5100, 0x6212, 0x6316,
-+ 0x001e, 0x002e, 0x003e, 0x00ce, 0x00ee, 0x0005, 0x00e6, 0x0006,
-+ 0x6010, 0x9080, 0x0028, 0x2004, 0x9086, 0x0080, 0x0150, 0x2071,
-+ 0x1100, 0x70a0, 0x9005, 0x0110, 0x8001, 0x70a2, 0x000e, 0x00ee,
-+ 0x0005, 0x2071, 0x1100, 0x70e0, 0x9005, 0x0dc0, 0x8001, 0x70e2,
-+ 0x0ca8, 0x6000, 0xc08c, 0x6002, 0x0005, 0x00f6, 0x00e6, 0x00c6,
-+ 0x0036, 0x0026, 0x0016, 0x0156, 0x2178, 0x81ff, 0x1118, 0x20a9,
-+ 0x0001, 0x0090, 0x2001, 0x1153, 0x2004, 0xd0c4, 0x0150, 0xd0a4,
-+ 0x0140, 0x9006, 0x0046, 0x2020, 0x2009, 0x002d, 0x080c, 0xc12f,
-+ 0x004e, 0x20a9, 0x00ff, 0x9016, 0x0026, 0x928e, 0x007e, 0x0904,
-+ 0x2909, 0x928e, 0x007f, 0x05e8, 0x928e, 0x0080, 0x05d0, 0x9288,
-+ 0x1000, 0x210c, 0x81ff, 0x05a8, 0x8fff, 0x1148, 0x2001, 0x12c8,
-+ 0x0006, 0x2003, 0x0001, 0x04c9, 0x000e, 0x2003, 0x0000, 0x00c6,
-+ 0x2160, 0x2001, 0x0001, 0x080c, 0x5898, 0x00ce, 0x2019, 0x0029,
-+ 0x080c, 0x76f0, 0x0076, 0x2039, 0x0000, 0x080c, 0x75ee, 0x00c6,
-+ 0x0026, 0x2160, 0x6204, 0x9294, 0x00ff, 0x9286, 0x0006, 0x1118,
-+ 0x6007, 0x0404, 0x0028, 0x2001, 0x0004, 0x8007, 0x9215, 0x6206,
-+ 0x002e, 0x00ce, 0x0016, 0x2c08, 0x080c, 0xbec2, 0x001e, 0x007e,
-+ 0x2160, 0x002e, 0x8210, 0x1f04, 0x28c4, 0x015e, 0x001e, 0x002e,
-+ 0x003e, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x0046, 0x0026, 0x0016,
-+ 0x2001, 0x1153, 0x2004, 0xd0c4, 0x0148, 0xd0a4, 0x0138, 0x9006,
-+ 0x2220, 0x8427, 0x2009, 0x0029, 0x080c, 0xc12f, 0x001e, 0x002e,
-+ 0x004e, 0x0005, 0x0016, 0x0026, 0x0036, 0x00c6, 0x728c, 0x82ff,
-+ 0x01e8, 0x080c, 0x58c6, 0x11d0, 0x2100, 0x080c, 0x1f77, 0x81ff,
-+ 0x01b8, 0x2019, 0x0001, 0x8314, 0x92e0, 0x1580, 0x2c04, 0xd384,
-+ 0x0120, 0x9084, 0xff00, 0x8007, 0x0010, 0x9084, 0x00ff, 0x9116,
-+ 0x0138, 0x9096, 0x00ff, 0x0110, 0x8318, 0x0c68, 0x9085, 0x0001,
-+ 0x00ce, 0x003e, 0x002e, 0x001e, 0x0005, 0x0016, 0x00c6, 0x0126,
-+ 0x2091, 0x8000, 0x0016, 0x0026, 0x0036, 0x2110, 0x0026, 0x2019,
-+ 0x0029, 0x080c, 0x8ac9, 0x002e, 0x080c, 0xc3d4, 0x003e, 0x002e,
-+ 0x001e, 0x9180, 0x1000, 0x2004, 0x9065, 0x0158, 0x0016, 0x00c6,
-+ 0x2061, 0x1389, 0x001e, 0x6112, 0x080c, 0x2862, 0x001e, 0x080c,
-+ 0x55d0, 0x012e, 0x00ce, 0x001e, 0x0005, 0x2001, 0x1136, 0x2004,
-+ 0xd0cc, 0x0005, 0x2001, 0x1174, 0x2004, 0xd0bc, 0x0005, 0x2011,
-+ 0x1153, 0x2214, 0xd2ec, 0x0005, 0x7eef, 0x7de8, 0x7ce4, 0x80e2,
-+ 0x7be1, 0x80e0, 0x80dc, 0x80da, 0x7ad9, 0x80d6, 0x80d5, 0x80d4,
-+ 0x80d3, 0x80d2, 0x80d1, 0x79ce, 0x78cd, 0x80cc, 0x80cb, 0x80ca,
-+ 0x80c9, 0x80c7, 0x80c6, 0x77c5, 0x76c3, 0x80bc, 0x80ba, 0x75b9,
-+ 0x80b6, 0x74b5, 0x73b4, 0x72b3, 0x80b2, 0x80b1, 0x80ae, 0x71ad,
-+ 0x80ac, 0x70ab, 0x6faa, 0x6ea9, 0x80a7, 0x6da6, 0x6ca5, 0x6ba3,
-+ 0x6a9f, 0x699e, 0x689d, 0x809b, 0x8098, 0x6797, 0x6690, 0x658f,
-+ 0x6488, 0x6384, 0x6282, 0x8081, 0x8080, 0x617c, 0x607a, 0x8079,
-+ 0x5f76, 0x8075, 0x8074, 0x8073, 0x8072, 0x8071, 0x806e, 0x5e6d,
-+ 0x806c, 0x5d6b, 0x5c6a, 0x5b69, 0x8067, 0x5a66, 0x5965, 0x5863,
-+ 0x575c, 0x565a, 0x5559, 0x8056, 0x8055, 0x5454, 0x5353, 0x5252,
-+ 0x5151, 0x504e, 0x4f4d, 0x804c, 0x804b, 0x4e4a, 0x4d49, 0x8047,
-+ 0x4c46, 0x8045, 0x8043, 0x803c, 0x803a, 0x8039, 0x8036, 0x4b35,
-+ 0x8034, 0x4a33, 0x4932, 0x4831, 0x802e, 0x472d, 0x462c, 0x452b,
-+ 0x442a, 0x4329, 0x4227, 0x8026, 0x8025, 0x4123, 0x401f, 0x3f1e,
-+ 0x3e1d, 0x3d1b, 0x3c18, 0x8017, 0x8010, 0x3b0f, 0x3a08, 0x8004,
-+ 0x3902, 0x8001, 0x8000, 0x8000, 0x3800, 0x3700, 0x3600, 0x8000,
-+ 0x3500, 0x8000, 0x8000, 0x8000, 0x3400, 0x8000, 0x8000, 0x8000,
-+ 0x8000, 0x8000, 0x8000, 0x3300, 0x3200, 0x8000, 0x8000, 0x8000,
-+ 0x8000, 0x8000, 0x8000, 0x3100, 0x3000, 0x8000, 0x8000, 0x2f00,
-+ 0x8000, 0x2e00, 0x2d00, 0x2c00, 0x8000, 0x8000, 0x8000, 0x2b00,
-+ 0x8000, 0x2a00, 0x2900, 0x2800, 0x8000, 0x2700, 0x2600, 0x2500,
-+ 0x2400, 0x2300, 0x2200, 0x8000, 0x8000, 0x2100, 0x2000, 0x1f00,
-+ 0x1e00, 0x1d00, 0x1c00, 0x8000, 0x8000, 0x1b00, 0x1a00, 0x8000,
-+ 0x1900, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x1800,
-+ 0x8000, 0x1700, 0x1600, 0x1500, 0x8000, 0x1400, 0x1300, 0x1200,
-+ 0x1100, 0x1000, 0x0f00, 0x8000, 0x8000, 0x0e00, 0x0d00, 0x0c00,
-+ 0x0b00, 0x0a00, 0x0900, 0x8000, 0x8000, 0x0800, 0x0700, 0x8000,
-+ 0x0600, 0x8000, 0x8000, 0x8000, 0x0500, 0x0400, 0x0300, 0x8000,
-+ 0x0200, 0x8000, 0x8000, 0x8000, 0x0100, 0x8000, 0x8000, 0x8000,
-+ 0x8000, 0x8000, 0x8000, 0x0000, 0x8000, 0x8000, 0x8000, 0x8000,
-+ 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
-+ 0x8000, 0x8000, 0x8000, 0x8000, 0x2071, 0x1193, 0x7003, 0x0002,
-+ 0x9006, 0x7012, 0x7016, 0x7042, 0x7046, 0x703a, 0x703e, 0x7033,
-+ 0x11aa, 0x7037, 0x11aa, 0x7007, 0x0001, 0x2061, 0x11ea, 0x6003,
-+ 0x0002, 0x0005, 0x2071, 0x1193, 0x7004, 0x0002, 0x2aaa, 0x2aab,
-+ 0x2ab2, 0x2ac3, 0x0005, 0x1004, 0x2ab1, 0x0e04, 0x2ab1, 0x2b78,
-+ 0x0430, 0x0005, 0x2b78, 0x2061, 0x11ea, 0x6008, 0x908e, 0x0100,
-+ 0x0128, 0x9086, 0x0200, 0x0904, 0x2b92, 0x0005, 0x7014, 0x2068,
-+ 0x2a60, 0x7018, 0x0807, 0x7010, 0x2068, 0x6864, 0x9094, 0x00ff,
-+ 0x9296, 0x0029, 0x1120, 0x6a78, 0xd2fc, 0x0128, 0x0005, 0x9086,
-+ 0x0103, 0x0108, 0x0005, 0x2a60, 0x2b78, 0x7018, 0x0807, 0x2a60,
-+ 0x7880, 0x908a, 0x0040, 0x1210, 0x61cc, 0x0042, 0x2100, 0x908a,
-+ 0x003f, 0x1a04, 0x2b8f, 0x61cc, 0x0804, 0x2b26, 0x2b68, 0x2b9e,
-+ 0x2ba8, 0x2bac, 0x2bb6, 0x2bbc, 0x2bc0, 0x2bd0, 0x2bd3, 0x2bdd,
-+ 0x2be2, 0x2be7, 0x2bf2, 0x2bfd, 0x2c0c, 0x2c1b, 0x2c29, 0x2c40,
-+ 0x2c5b, 0x2cf4, 0x2cf9, 0x2d37, 0x2de5, 0x2df6, 0x2e15, 0x2b8f,
-+ 0x2b8f, 0x2b8f, 0x2e4d, 0x2e6b, 0x2e74, 0x2ea3, 0x2ea9, 0x2b8f,
-+ 0x2ed2, 0x2b8f, 0x2b8f, 0x2b8f, 0x2b8f, 0x2b8f, 0x2edd, 0x2ee6,
-+ 0x2eee, 0x2b8f, 0x2b8f, 0x2b8f, 0x2b8f, 0x2b8f, 0x2b8f, 0x2b8f,
-+ 0x2ef0, 0x2b8f, 0x2b8f, 0x2b8f, 0x2b8f, 0x2b8f, 0x2f0d, 0x2f64,
-+ 0x2b8f, 0x2b8f, 0x2b8f, 0x2b8f, 0x2b8f, 0x2b8f, 0x0002, 0x2f8e,
-+ 0x2fe1, 0x303b, 0x3053, 0x3083, 0x3301, 0x2b8f, 0x44b5, 0x2b8f,
-+ 0x2b8f, 0x2b8f, 0x2b8f, 0x2b8f, 0x2b8f, 0x2b8f, 0x2b8f, 0x2bdd,
-+ 0x2be2, 0x376a, 0x2b8f, 0x3781, 0x454f, 0x45a5, 0x464b, 0x2b8f,
-+ 0x46b0, 0x46e0, 0x4705, 0x4813, 0x4736, 0x478d, 0x2b8f, 0x3785,
-+ 0x394a, 0x3960, 0x3980, 0x39e5, 0x3a4e, 0x3a59, 0x3ac1, 0x3ad0,
-+ 0x3adf, 0x3ae2, 0x3b05, 0x3b77, 0x3bf0, 0x3bfd, 0x3cfe, 0x3e22,
-+ 0x3e4b, 0x4032, 0x4054, 0x4060, 0x40d5, 0x419b, 0x2b8f, 0x2b8f,
-+ 0x2b8f, 0x2b8f, 0x4203, 0x421e, 0x43b9, 0x4473, 0x7144, 0x0000,
-+ 0x2021, 0x4000, 0x080c, 0x3eff, 0x0126, 0x2091, 0x8000, 0x0e04,
-+ 0x2b72, 0x0010, 0x012e, 0x0cc0, 0x7c36, 0x9486, 0x4000, 0x0118,
-+ 0x7833, 0x0011, 0x0010, 0x7833, 0x0010, 0x7c82, 0x7986, 0x7a8a,
-+ 0x7b8e, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c,
-+ 0x0fcd, 0x7007, 0x0001, 0x2091, 0x5000, 0x012e, 0x0005, 0x2021,
-+ 0x4001, 0x08c0, 0x2021, 0x4002, 0x08a8, 0x2021, 0x4003, 0x0890,
-+ 0x2021, 0x4005, 0x0878, 0x2021, 0x4006, 0x0860, 0x2039, 0x0001,
-+ 0x902e, 0x2520, 0x7b88, 0x7a8c, 0x7884, 0x7990, 0x0804, 0x3f0c,
-+ 0x7883, 0x0004, 0x7884, 0x0807, 0x2039, 0x0001, 0x902e, 0x2520,
-+ 0x7b88, 0x7a8c, 0x7884, 0x7990, 0x0804, 0x3f0f, 0x7984, 0x7888,
-+ 0x2114, 0x200a, 0x0804, 0x2b68, 0x7984, 0x2114, 0x0804, 0x2b68,
-+ 0x20e1, 0x0000, 0x2099, 0x0021, 0x20e9, 0x0000, 0x20a1, 0x0021,
-+ 0x20a9, 0x001f, 0x4003, 0x7984, 0x7a88, 0x7b8c, 0x0804, 0x2b68,
-+ 0x7884, 0x2060, 0x04d8, 0x2009, 0x0003, 0x2011, 0x0001, 0x2019,
-+ 0x0014, 0x789b, 0x0017, 0x0804, 0x2b68, 0x2039, 0x0001, 0x7d98,
-+ 0x7c9c, 0x0800, 0x2039, 0x0001, 0x7d98, 0x7c9c, 0x0848, 0x79a0,
-+ 0x9182, 0x0040, 0x0210, 0x0804, 0x2b9b, 0x2138, 0x7d98, 0x7c9c,
-+ 0x0804, 0x2ba2, 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, 0x2b9b,
-+ 0x2138, 0x7d98, 0x7c9c, 0x0804, 0x2bb0, 0x79a0, 0x9182, 0x0040,
-+ 0x0210, 0x0804, 0x2b9b, 0x21e8, 0x7984, 0x7888, 0x20a9, 0x0001,
-+ 0x21a0, 0x4004, 0x0804, 0x2b68, 0x2061, 0x0800, 0xe10c, 0x9006,
-+ 0x2c15, 0x9200, 0x8c60, 0x8109, 0x1dd8, 0x2010, 0x9005, 0x0904,
-+ 0x2b68, 0x0804, 0x2b95, 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804,
-+ 0x2b9b, 0x21e0, 0x20a9, 0x0001, 0x7984, 0x2198, 0x4012, 0x0804,
-+ 0x2b68, 0x2069, 0x1152, 0x7884, 0x7990, 0x911a, 0x1a04, 0x2b9b,
-+ 0x8019, 0x0904, 0x2b9b, 0x684a, 0x6942, 0x788c, 0x6852, 0x7888,
-+ 0x6856, 0x9006, 0x685a, 0x685e, 0x080c, 0x65bd, 0x0804, 0x2b68,
-+ 0x2069, 0x1152, 0x7884, 0x7994, 0x911a, 0x1a04, 0x2b9b, 0x8019,
-+ 0x0904, 0x2b9b, 0x684e, 0x6946, 0x788c, 0x6862, 0x7888, 0x6866,
-+ 0x9006, 0x686a, 0x686e, 0x0126, 0x2091, 0x8000, 0x080c, 0x5946,
-+ 0x012e, 0x0804, 0x2b68, 0x902e, 0x2520, 0x81ff, 0x1904, 0x2b98,
-+ 0x7984, 0x7b88, 0x7a8c, 0x20a9, 0x0005, 0x20e9, 0x0001, 0x20a1,
-+ 0x119a, 0x4101, 0x080c, 0x3eb9, 0x0904, 0x2b98, 0x2009, 0x0020,
-+ 0x2039, 0x0001, 0x080c, 0x3f0c, 0x701b, 0x2c77, 0x0005, 0x6864,
-+ 0x2008, 0x9084, 0x00ff, 0x9096, 0x0011, 0x0150, 0x9096, 0x0019,
-+ 0x0138, 0x9096, 0x0015, 0x0120, 0x9096, 0x0029, 0x1904, 0x2b98,
-+ 0x810f, 0x918c, 0x00ff, 0x0904, 0x2b98, 0x710e, 0x700c, 0x8001,
-+ 0x0538, 0x700e, 0x080c, 0x3eb9, 0x0904, 0x2b98, 0x2009, 0x0020,
-+ 0x2061, 0x11ea, 0x6228, 0x632c, 0x6430, 0x6534, 0x9290, 0x0040,
-+ 0x9399, 0x0000, 0x94a1, 0x0000, 0x95a9, 0x0000, 0x2039, 0x0001,
-+ 0x080c, 0x3f0c, 0x701b, 0x2cad, 0x0005, 0x6864, 0x9084, 0x00ff,
-+ 0x9096, 0x0002, 0x0120, 0x9096, 0x000a, 0x1904, 0x2b98, 0x08b0,
-+ 0x7010, 0x2068, 0x6868, 0xc0fd, 0x686a, 0x6864, 0x9084, 0x00ff,
-+ 0x9096, 0x0029, 0x1160, 0xc2fd, 0x6a7a, 0x080c, 0x51e5, 0x0150,
-+ 0x0126, 0x2091, 0x8000, 0x687a, 0x6982, 0x012e, 0x0050, 0x080c,
-+ 0x54d0, 0x1128, 0x7007, 0x0003, 0x701b, 0x2cd9, 0x0005, 0x080c,
-+ 0x5d95, 0x0126, 0x2091, 0x8000, 0x20a9, 0x0005, 0x20e1, 0x0001,
-+ 0x2099, 0x119a, 0x400a, 0x2100, 0x9210, 0x9399, 0x0000, 0x94a1,
-+ 0x0000, 0x95a9, 0x0000, 0x9d80, 0x0019, 0x2009, 0x0020, 0x012e,
-+ 0x2039, 0x0001, 0x0804, 0x3f0f, 0x61b4, 0x7884, 0x60b6, 0x0804,
-+ 0x2b68, 0x2091, 0x8000, 0x7837, 0x4000, 0x7833, 0x0010, 0x7883,
-+ 0x4000, 0x7887, 0x4953, 0x788b, 0x5020, 0x788f, 0x2020, 0x2009,
-+ 0x017f, 0x2104, 0x7892, 0x3f00, 0x7896, 0x2061, 0x0100, 0x6200,
-+ 0x2061, 0x0200, 0x603c, 0x8007, 0x9205, 0x789a, 0x2009, 0x04fd,
-+ 0x2104, 0x789e, 0x2091, 0x5000, 0x2091, 0x4080, 0x2001, 0x0089,
-+ 0x2004, 0xd084, 0x0180, 0x2001, 0x1336, 0x2004, 0x9005, 0x0128,
-+ 0x2001, 0x008b, 0x2004, 0xd0fc, 0x0dd8, 0x2001, 0x008a, 0x2003,
-+ 0x0002, 0x2003, 0x1001, 0x2071, 0x0080, 0x0804, 0x0427, 0x81ff,
-+ 0x1904, 0x2b98, 0x7984, 0x810f, 0x918c, 0x00ff, 0x080c, 0x5608,
-+ 0x1904, 0x2b9b, 0x7e98, 0x9684, 0x3fff, 0x9082, 0x4000, 0x0210,
-+ 0x0804, 0x2b9b, 0x7c88, 0x7d8c, 0x080c, 0x5758, 0x080c, 0x5728,
-+ 0x0000, 0x1518, 0x2061, 0x15c0, 0x0126, 0x2091, 0x8000, 0x6000,
-+ 0x9086, 0x0000, 0x0148, 0x6014, 0x906d, 0x0130, 0x686c, 0x9406,
-+ 0x1118, 0x6870, 0x9506, 0x0150, 0x012e, 0x9ce0, 0x0018, 0x2001,
-+ 0x1118, 0x2004, 0x9c02, 0x1a04, 0x2b98, 0x0c30, 0x080c, 0xa5f3,
-+ 0x012e, 0x0904, 0x2b98, 0x0804, 0x2b68, 0x900e, 0x2001, 0x0005,
-+ 0x080c, 0x5d95, 0x0126, 0x2091, 0x8000, 0x080c, 0xac07, 0x080c,
-+ 0x5b76, 0x012e, 0x0804, 0x2b68, 0x00f6, 0x2d78, 0x7998, 0x810f,
-+ 0x918c, 0x00ff, 0x080c, 0x5608, 0x1904, 0x2dd2, 0x7ea4, 0x9684,
-+ 0x3fff, 0x9082, 0x4000, 0x0208, 0x04e8, 0x7c9c, 0x7da0, 0x080c,
-+ 0x5758, 0x080c, 0x5728, 0x1520, 0x2061, 0x15c0, 0x0126, 0x2091,
-+ 0x8000, 0x6000, 0x9086, 0x0000, 0x0148, 0x6014, 0x906d, 0x0130,
-+ 0x686c, 0x9406, 0x1118, 0x6870, 0x9506, 0x0158, 0x012e, 0x9ce0,
-+ 0x0018, 0x2001, 0x1118, 0x2004, 0x9c02, 0x2009, 0x000d, 0x12b0,
-+ 0x0c28, 0x080c, 0xa5f3, 0x012e, 0x2009, 0x0003, 0x0178, 0x00e0,
-+ 0x900e, 0x2001, 0x0005, 0x080c, 0x5d95, 0x0126, 0x2091, 0x8000,
-+ 0x080c, 0xac07, 0x080c, 0x5b76, 0x012e, 0x0070, 0x7897, 0x4005,
-+ 0x799a, 0x0010, 0x7897, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001,
-+ 0x0030, 0x2f68, 0x00fe, 0x0005, 0x7897, 0x4000, 0x9006, 0x918d,
-+ 0x0001, 0x2008, 0x2f68, 0x00fe, 0x0005, 0x81ff, 0x1904, 0x2b98,
-+ 0x080c, 0x3ece, 0x0904, 0x2b9b, 0x080c, 0x56ca, 0x0904, 0x2b98,
-+ 0x080c, 0x575e, 0x0904, 0x2b98, 0x0804, 0x2b68, 0x81ff, 0x1904,
-+ 0x2b98, 0x080c, 0x3ef0, 0x0904, 0x2b9b, 0x080c, 0x57a6, 0x0904,
-+ 0x2b98, 0x2019, 0x0005, 0x7984, 0x080c, 0x5779, 0x0904, 0x2b98,
-+ 0x7888, 0x908a, 0x1000, 0x1a04, 0x2b9b, 0x8003, 0x800b, 0x810b,
-+ 0x9108, 0x080c, 0x7206, 0x0804, 0x2b68, 0x0126, 0x2091, 0x8000,
-+ 0x81ff, 0x0118, 0x2009, 0x0001, 0x0450, 0x2029, 0x00ff, 0x6454,
-+ 0x2400, 0x9506, 0x01f8, 0x2508, 0x080c, 0x5608, 0x11d8, 0x080c,
-+ 0x57a6, 0x1128, 0x2009, 0x0002, 0x62bc, 0x2518, 0x00c0, 0x2019,
-+ 0x0004, 0x900e, 0x080c, 0x5779, 0x1118, 0x2009, 0x0006, 0x0078,
-+ 0x7884, 0x908a, 0x1000, 0x1270, 0x8003, 0x800b, 0x810b, 0x9108,
-+ 0x080c, 0x7206, 0x8529, 0x1ae0, 0x012e, 0x0804, 0x2b68, 0x012e,
-+ 0x0804, 0x2b98, 0x012e, 0x0804, 0x2b9b, 0x080c, 0x3ece, 0x0904,
-+ 0x2b9b, 0x080c, 0x56ca, 0x0904, 0x2b98, 0x62a0, 0x2019, 0x0005,
-+ 0x00c6, 0x2061, 0x0000, 0x080c, 0x76f0, 0x0076, 0x2039, 0x0000,
-+ 0x080c, 0x75ee, 0x900e, 0x080c, 0xbec2, 0x007e, 0x00ce, 0x080c,
-+ 0x5758, 0x0804, 0x2b68, 0x080c, 0x3ece, 0x0904, 0x2b9b, 0x080c,
-+ 0x5758, 0x2208, 0x0804, 0x2b68, 0x0156, 0x00d6, 0x00e6, 0x2069,
-+ 0x1240, 0x6810, 0x6914, 0x910a, 0x1208, 0x900e, 0x6816, 0x9016,
-+ 0x901e, 0x20a9, 0x007e, 0x2069, 0x1000, 0x2d04, 0x9075, 0x0118,
-+ 0x704c, 0x0059, 0x9210, 0x8d68, 0x1f04, 0x2e85, 0x2300, 0x9218,
-+ 0x00ee, 0x00de, 0x015e, 0x0804, 0x2b68, 0x00f6, 0x0016, 0x907d,
-+ 0x0138, 0x9006, 0x8000, 0x2f0c, 0x81ff, 0x0110, 0x2178, 0x0cd0,
-+ 0x001e, 0x00fe, 0x0005, 0x2069, 0x1240, 0x6910, 0x62b8, 0x0804,
-+ 0x2b68, 0x81ff, 0x1904, 0x2b98, 0x6154, 0x9190, 0x298c, 0x2215,
-+ 0x9294, 0x00ff, 0x6374, 0x83ff, 0x0108, 0x6278, 0x67d8, 0xd79c,
-+ 0x0118, 0x2031, 0x0001, 0x0090, 0xd7ac, 0x0118, 0x2031, 0x0003,
-+ 0x0068, 0xd7a4, 0x0118, 0x2031, 0x0002, 0x0040, 0x080c, 0x62e4,
-+ 0x1118, 0x2031, 0x0004, 0x0010, 0x2031, 0x0000, 0x7e9a, 0x7f9e,
-+ 0x0804, 0x2b68, 0x6144, 0x6248, 0x2019, 0x12c0, 0x231c, 0x2001,
-+ 0x12c1, 0x2004, 0x789a, 0x0804, 0x2b68, 0x0126, 0x2091, 0x8000,
-+ 0x6134, 0x6238, 0x633c, 0x012e, 0x0804, 0x2b68, 0x080c, 0x3ef0,
-+ 0x0904, 0x2b9b, 0x6244, 0x6338, 0x0804, 0x2b68, 0x080c, 0x0d7e,
-+ 0x6144, 0x6248, 0x7884, 0x6046, 0x7b88, 0x634a, 0x2069, 0x1152,
-+ 0x831f, 0x9305, 0x6816, 0x788c, 0x2069, 0x12c0, 0x2d1c, 0x206a,
-+ 0x7e98, 0x9682, 0x0014, 0x1210, 0x2031, 0x07d0, 0x2069, 0x12c1,
-+ 0x2d04, 0x266a, 0x789a, 0x0804, 0x2b68, 0x0126, 0x2091, 0x8000,
-+ 0x7884, 0x6036, 0xd0c4, 0x01a8, 0x00d6, 0x78a8, 0x2009, 0x12d7,
-+ 0x200a, 0x78ac, 0x2011, 0x12d8, 0x2012, 0x2069, 0x0100, 0x6838,
-+ 0x9086, 0x0007, 0x1118, 0x2214, 0x6a5a, 0x0010, 0x210c, 0x695a,
-+ 0x00de, 0x7884, 0xd0b4, 0x0120, 0x3b00, 0x9084, 0xff3f, 0x20d8,
-+ 0x7888, 0x603a, 0x2011, 0x0114, 0x220c, 0x7888, 0xd08c, 0x0118,
-+ 0x918d, 0x0080, 0x0010, 0x918c, 0xff7f, 0x2112, 0x788c, 0x603e,
-+ 0x012e, 0x0804, 0x2b68, 0x00f6, 0x2079, 0x1100, 0x7a34, 0x6898,
-+ 0x9084, 0xfeff, 0x9215, 0x689c, 0x9084, 0xfeff, 0x8002, 0x9214,
-+ 0xd2b4, 0x0120, 0x3b00, 0x9084, 0xff3f, 0x20d8, 0x7834, 0xd0c4,
-+ 0x0108, 0xc2c5, 0x7a36, 0x6897, 0x4000, 0x900e, 0x9085, 0x0001,
-+ 0x2001, 0x0000, 0x00fe, 0x0005, 0x7898, 0x9005, 0x01a8, 0x7888,
-+ 0x9025, 0x0904, 0x2b9b, 0x788c, 0x902d, 0x0904, 0x2b9b, 0x900e,
-+ 0x080c, 0x5608, 0x1120, 0x6244, 0x6338, 0x6446, 0x653a, 0x9186,
-+ 0x00ff, 0x0190, 0x8108, 0x0ca0, 0x080c, 0x3ef0, 0x0904, 0x2b9b,
-+ 0x7888, 0x900d, 0x0904, 0x2b9b, 0x788c, 0x9005, 0x0904, 0x2b9b,
-+ 0x6244, 0x6146, 0x6338, 0x603a, 0x0804, 0x2b68, 0x2001, 0x1100,
-+ 0x2004, 0x9086, 0x0003, 0x1904, 0x2b98, 0x00c6, 0x2061, 0x0100,
-+ 0x7984, 0x810f, 0x918c, 0x00ff, 0x9196, 0x00ff, 0x1130, 0x2001,
-+ 0x1116, 0x2004, 0x9085, 0xff00, 0x0078, 0x9182, 0x007f, 0x1698,
-+ 0x9188, 0x298c, 0x210d, 0x918c, 0x00ff, 0x2001, 0x1116, 0x2004,
-+ 0x9116, 0x0548, 0x810f, 0x9105, 0x0126, 0x2091, 0x8000, 0x0006,
-+ 0x080c, 0x8e83, 0x000e, 0x01d8, 0x6012, 0x600b, 0xbc09, 0x6023,
-+ 0x0001, 0x080c, 0x3eb9, 0x01d0, 0x9006, 0x6866, 0x7007, 0x0003,
-+ 0x6832, 0x6868, 0xc0fd, 0x686a, 0x701b, 0x3034, 0x2d00, 0x6016,
-+ 0x2009, 0x0032, 0x080c, 0x8f53, 0x012e, 0x00ce, 0x0005, 0x012e,
-+ 0x00ce, 0x0804, 0x2b98, 0x00ce, 0x0804, 0x2b9b, 0x080c, 0x8ed9,
-+ 0x0cb0, 0x2001, 0x1100, 0x2004, 0x9086, 0x0003, 0x1904, 0x2b98,
-+ 0x00c6, 0x2061, 0x0100, 0x7984, 0x810f, 0x918c, 0x00ff, 0x9196,
-+ 0x00ff, 0x1130, 0x2001, 0x1116, 0x2004, 0x9085, 0xff00, 0x0078,
-+ 0x9182, 0x007f, 0x1698, 0x9188, 0x298c, 0x210d, 0x918c, 0x00ff,
-+ 0x2001, 0x1116, 0x2004, 0x9116, 0x0548, 0x810f, 0x9105, 0x0126,
-+ 0x2091, 0x8000, 0x0006, 0x080c, 0x8e83, 0x000e, 0x01d8, 0x6012,
-+ 0x600b, 0xbc05, 0x6023, 0x0001, 0x080c, 0x3eb9, 0x01d0, 0x9006,
-+ 0x6866, 0x7007, 0x0003, 0x6832, 0x6868, 0xc0fd, 0x686a, 0x701b,
-+ 0x3034, 0x2d00, 0x6016, 0x2009, 0x0032, 0x080c, 0x8f53, 0x012e,
-+ 0x00ce, 0x0005, 0x012e, 0x00ce, 0x0804, 0x2b98, 0x00ce, 0x0804,
-+ 0x2b9b, 0x080c, 0x8ed9, 0x0cb0, 0x6830, 0x9086, 0x0100, 0x0904,
-+ 0x2b98, 0x0804, 0x2b68, 0x2061, 0x1354, 0x0126, 0x2091, 0x8000,
-+ 0x6000, 0xd084, 0x0168, 0x6104, 0x6208, 0x2a60, 0x634c, 0x606c,
-+ 0x789a, 0x60bc, 0x789e, 0x60b8, 0x78aa, 0x012e, 0x0804, 0x2b68,
-+ 0x900e, 0x2110, 0x0c90, 0x81ff, 0x1904, 0x2b98, 0x080c, 0x62e4,
-+ 0x0904, 0x2b98, 0x0126, 0x2091, 0x8000, 0x624c, 0x606c, 0x9202,
-+ 0x0248, 0x9085, 0x0001, 0x080c, 0x1fad, 0x080c, 0x49f2, 0x012e,
-+ 0x0804, 0x2b68, 0x012e, 0x0804, 0x2b9b, 0x0006, 0x0016, 0x00c6,
-+ 0x00e6, 0x2001, 0x12e1, 0x2070, 0x2061, 0x1152, 0x6008, 0x2072,
-+ 0x900e, 0x2011, 0x1400, 0x080c, 0x73f0, 0x7206, 0x00ee, 0x00ce,
-+ 0x001e, 0x000e, 0x0005, 0x0126, 0x2091, 0x8000, 0x81ff, 0x0128,
-+ 0x012e, 0x2021, 0x400b, 0x0804, 0x2b6a, 0x7884, 0xd0fc, 0x0148,
-+ 0x2001, 0x002a, 0x2004, 0x9082, 0x00e1, 0x02a8, 0x012e, 0x0804,
-+ 0x2b9b, 0x2001, 0x002a, 0x2004, 0x2069, 0x1152, 0x6908, 0x9102,
-+ 0x1218, 0x012e, 0x0804, 0x2b9b, 0x614c, 0x606c, 0x9106, 0x0118,
-+ 0x012e, 0x0804, 0x2b98, 0x60d8, 0xd0ac, 0x0dd0, 0x7884, 0xd0fc,
-+ 0x0904, 0x30fd, 0x00c6, 0x080c, 0x3eb9, 0x00ce, 0x0d88, 0x6867,
-+ 0x0000, 0x7884, 0x680a, 0x7898, 0x680e, 0x789c, 0x6812, 0x2001,
-+ 0x002e, 0x2004, 0x681a, 0x2001, 0x002f, 0x2004, 0x681e, 0x2001,
-+ 0x0030, 0x2004, 0x6822, 0x2001, 0x0031, 0x2004, 0x6826, 0x2001,
-+ 0x0034, 0x2004, 0x682a, 0x2001, 0x0035, 0x2004, 0x682e, 0x2001,
-+ 0x002a, 0x2004, 0x9080, 0x0003, 0x9084, 0x00fc, 0x8004, 0x6816,
-+ 0x080c, 0x3262, 0x0928, 0x7010, 0x2068, 0x6d2c, 0x6c28, 0x6b1c,
-+ 0x6a18, 0x6930, 0x6808, 0xd0b4, 0x1120, 0x2029, 0x0000, 0x2021,
-+ 0x0000, 0x9d80, 0x001b, 0x2039, 0x0001, 0x080c, 0x3f0c, 0x701b,
-+ 0x31c0, 0x701f, 0x0001, 0x012e, 0x0005, 0x0046, 0x0086, 0x0096,
-+ 0x00a6, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x080c, 0x306d,
-+ 0x2001, 0x12d9, 0x2003, 0x0000, 0x2021, 0x000a, 0x2061, 0x0100,
-+ 0x6104, 0x0016, 0x60bb, 0x0000, 0x60bf, 0x32e1, 0x60bf, 0x0012,
-+ 0x080c, 0x32d2, 0x080c, 0x3290, 0x00f6, 0x00e6, 0x00c6, 0x2d60,
-+ 0x2071, 0x134a, 0x2079, 0x0090, 0x00d6, 0x2069, 0x0000, 0x6884,
-+ 0xd0b4, 0x0140, 0x2001, 0x0035, 0x2004, 0x780e, 0x2001, 0x0034,
-+ 0x2004, 0x780a, 0x00de, 0x2011, 0x0001, 0x080c, 0x360c, 0x00ce,
-+ 0x00ee, 0x00fe, 0x080c, 0x3542, 0x080c, 0x3472, 0x05b8, 0x2001,
-+ 0x020b, 0x2004, 0x9084, 0x0140, 0x1db8, 0x080c, 0x3634, 0x00f6,
-+ 0x2079, 0x0300, 0x78bc, 0x00fe, 0x908c, 0x0070, 0x1560, 0x2071,
-+ 0x0200, 0x7037, 0x0000, 0x7050, 0x9084, 0xff00, 0x9086, 0x3200,
-+ 0x1510, 0x7037, 0x0001, 0x7050, 0x9084, 0xff00, 0x9086, 0xe100,
-+ 0x11d0, 0x7037, 0x0000, 0x7054, 0x7037, 0x0000, 0x715c, 0x9106,
-+ 0x1190, 0x2001, 0x111e, 0x2004, 0x9106, 0x1168, 0x00c6, 0x2061,
-+ 0x0100, 0x6024, 0x9084, 0x1e00, 0x00ce, 0x0138, 0x080c, 0x347c,
-+ 0x080c, 0x328b, 0x0058, 0x080c, 0x328b, 0x080c, 0x35a4, 0x080c,
-+ 0x3538, 0x2001, 0x020b, 0x2004, 0xd0e4, 0x0dd8, 0x2001, 0x032a,
-+ 0x2003, 0x0004, 0x2061, 0x0100, 0x6027, 0x0002, 0x001e, 0x6106,
-+ 0x2011, 0x020d, 0x2013, 0x0020, 0x60bb, 0x0000, 0x60bf, 0x0108,
-+ 0x60bf, 0x0012, 0x2001, 0x0004, 0x200c, 0x918c, 0xfffd, 0x2102,
-+ 0x080c, 0x10cf, 0x2009, 0x0028, 0x080c, 0x1b67, 0x2001, 0x0227,
-+ 0x200c, 0x2102, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae,
-+ 0x009e, 0x008e, 0x004e, 0x2001, 0x12d9, 0x2004, 0x9005, 0x1118,
-+ 0x012e, 0x0804, 0x2b68, 0x012e, 0x2021, 0x400c, 0x0804, 0x2b6a,
-+ 0x0016, 0x0026, 0x0036, 0x0046, 0x0056, 0x0076, 0x00d6, 0x0156,
-+ 0x7010, 0x2068, 0x701c, 0x20a8, 0x8000, 0x701e, 0x6804, 0x9005,
-+ 0x05d0, 0x2068, 0x1f04, 0x31ce, 0x2061, 0x11ea, 0x6228, 0x632c,
-+ 0x6430, 0x6534, 0x6930, 0x6808, 0xd0b4, 0x1120, 0x2029, 0x0000,
-+ 0x2021, 0x0000, 0x00d6, 0x7010, 0x2068, 0x6864, 0x00de, 0x9086,
-+ 0x0103, 0x0148, 0x9d80, 0x001b, 0x2039, 0x0001, 0x080c, 0x3f0c,
-+ 0x701b, 0x31c0, 0x0078, 0x9d80, 0x001b, 0x21a8, 0x20a0, 0x2098,
-+ 0x0006, 0x080c, 0x504f, 0x000e, 0x2039, 0x0001, 0x080c, 0x3f0f,
-+ 0x701b, 0x31c0, 0x015e, 0x00de, 0x007e, 0x005e, 0x004e, 0x003e,
-+ 0x002e, 0x001e, 0x0005, 0x7010, 0x2068, 0x6864, 0x9086, 0x0103,
-+ 0x1118, 0x701b, 0x3260, 0x0410, 0x7010, 0x2068, 0x6868, 0xc0fd,
-+ 0x686a, 0x2009, 0x007f, 0x080c, 0x55b3, 0x0110, 0x9006, 0x0010,
-+ 0x080c, 0xadbf, 0x015e, 0x00de, 0x007e, 0x005e, 0x004e, 0x003e,
-+ 0x002e, 0x001e, 0x0904, 0x2b98, 0x0016, 0x0026, 0x0036, 0x0046,
-+ 0x0056, 0x0076, 0x00d6, 0x0156, 0x701b, 0x3239, 0x7007, 0x0003,
-+ 0x0848, 0x0076, 0x6830, 0x9086, 0x0100, 0x2021, 0x400c, 0x0904,
-+ 0x2b6a, 0x6d10, 0x6c0c, 0x6b24, 0x6a20, 0x6930, 0x6808, 0xd0b4,
-+ 0x1120, 0x2029, 0x0000, 0x2021, 0x0000, 0x9d80, 0x001b, 0x21a8,
-+ 0x20a0, 0x2098, 0x0006, 0x080c, 0x504f, 0x000e, 0x2039, 0x0001,
-+ 0x080c, 0x3f0f, 0x007e, 0x701b, 0x31c0, 0x701f, 0x0001, 0x0005,
-+ 0x0804, 0x2b68, 0x0156, 0x00c6, 0x6814, 0x908a, 0x001e, 0x0218,
-+ 0x6833, 0x001e, 0x0010, 0x6832, 0x0078, 0x81ff, 0x0168, 0x0016,
-+ 0x080c, 0x3eb9, 0x001e, 0x0130, 0x6800, 0x2060, 0x6008, 0x680a,
-+ 0x2100, 0x0c58, 0x9006, 0x0010, 0x9085, 0x0001, 0x00ce, 0x015e,
-+ 0x0005, 0x0006, 0x00f6, 0x2079, 0x0000, 0x7880, 0x9086, 0x0044,
-+ 0x00fe, 0x000e, 0x0005, 0x2001, 0x12d9, 0x2003, 0x0001, 0x0005,
-+ 0x00f6, 0x00e6, 0x00c6, 0x2061, 0x0200, 0x2001, 0x12e2, 0x2004,
-+ 0x601a, 0x2061, 0x0100, 0x2001, 0x12e1, 0x2004, 0x60ce, 0x6104,
-+ 0xc1ac, 0x6106, 0x080c, 0x3eb9, 0x6813, 0x0019, 0x2070, 0x6817,
-+ 0x0001, 0x2d00, 0x685a, 0x2001, 0x002e, 0x2004, 0x2072, 0x2001,
-+ 0x002f, 0x2004, 0x7006, 0x2061, 0x0090, 0x2079, 0x0100, 0x2001,
-+ 0x12e1, 0x2004, 0x6036, 0x2009, 0x0040, 0x080c, 0x1b67, 0x2001,
-+ 0x002a, 0x2004, 0x9084, 0xfff8, 0x700a, 0x601a, 0x700f, 0x0000,
-+ 0x601f, 0x0000, 0x78ca, 0x9006, 0x600a, 0x600e, 0x00ce, 0x00ee,
-+ 0x00fe, 0x0005, 0x00e6, 0x080c, 0x3eb9, 0x2d60, 0x6013, 0x0019,
-+ 0x2070, 0x6017, 0x0001, 0x2c00, 0x605a, 0x2001, 0x0030, 0x2004,
-+ 0x2072, 0x2001, 0x0031, 0x2004, 0x7006, 0x2001, 0x002a, 0x2004,
-+ 0x9084, 0xfff8, 0x700a, 0x700f, 0x0000, 0x2001, 0x032a, 0x2003,
-+ 0x0004, 0x2001, 0x0300, 0x2003, 0x0000, 0x2001, 0x020d, 0x2003,
-+ 0x0000, 0x2001, 0x0004, 0x200c, 0x918d, 0x0002, 0x2102, 0x00ee,
-+ 0x0005, 0x0126, 0x2091, 0x8000, 0x81ff, 0x0148, 0x080c, 0x2338,
-+ 0x1130, 0x9006, 0x080c, 0x2290, 0x9006, 0x080c, 0x2273, 0x7884,
-+ 0x9084, 0x0007, 0x0002, 0x331e, 0x3327, 0x3330, 0x331b, 0x331b,
-+ 0x331b, 0x331b, 0x331b, 0x012e, 0x0804, 0x2b9b, 0x2009, 0x0114,
-+ 0x2104, 0x9085, 0x0800, 0x200a, 0x080c, 0x349a, 0x0080, 0x2009,
-+ 0x0114, 0x2104, 0x9085, 0x4000, 0x200a, 0x080c, 0x349a, 0x0038,
-+ 0x81ff, 0x0128, 0x012e, 0x2021, 0x400b, 0x0804, 0x2b6a, 0x0086,
-+ 0x0096, 0x00a6, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x080c,
-+ 0x306d, 0x2009, 0x0101, 0x210c, 0x0016, 0x2001, 0x0032, 0x2034,
-+ 0x2001, 0x0033, 0x202c, 0x9006, 0x2048, 0x2050, 0x2058, 0x080c,
-+ 0x3700, 0x080c, 0x3660, 0x903e, 0x2720, 0x00f6, 0x00e6, 0x00c6,
-+ 0x2d60, 0x2071, 0x134a, 0x2079, 0x0090, 0x00d6, 0x2069, 0x0000,
-+ 0x6884, 0xd0b4, 0x0140, 0x2001, 0x0035, 0x2004, 0x780e, 0x2001,
-+ 0x0034, 0x2004, 0x780a, 0x00de, 0x2011, 0x0001, 0x080c, 0x360c,
-+ 0x080c, 0x360c, 0x00ce, 0x00ee, 0x00fe, 0x080c, 0x3542, 0x00f6,
-+ 0x2079, 0x0000, 0x7884, 0x00fe, 0xd0bc, 0x0178, 0x2001, 0x0201,
-+ 0x200c, 0x81ff, 0x0150, 0x080c, 0x3520, 0x2900, 0x9a05, 0x9b05,
-+ 0x0120, 0x080c, 0x347c, 0x0804, 0x342b, 0x080c, 0x3634, 0x080c,
-+ 0x35a4, 0x080c, 0x3503, 0x080c, 0x3538, 0x00f6, 0x2079, 0x0100,
-+ 0x7824, 0xd0ac, 0x0130, 0x8b58, 0x080c, 0x347c, 0x00fe, 0x0804,
-+ 0x342b, 0x00fe, 0x080c, 0x3472, 0x1150, 0x8948, 0x2001, 0x0032,
-+ 0x2602, 0x2001, 0x0033, 0x2502, 0x080c, 0x347c, 0x0080, 0x87ff,
-+ 0x0138, 0x2001, 0x0201, 0x2004, 0x9005, 0x1908, 0x8739, 0x0038,
-+ 0x2001, 0x1347, 0x2004, 0x9086, 0x0000, 0x1904, 0x3377, 0x2001,
-+ 0x032f, 0x2003, 0x00f6, 0x8631, 0x1208, 0x8529, 0x2500, 0x9605,
-+ 0x0904, 0x342b, 0x7884, 0xd0bc, 0x0128, 0x2900, 0x9a05, 0x9b05,
-+ 0x1904, 0x342b, 0x6013, 0x0019, 0x2001, 0x032a, 0x2003, 0x0004,
-+ 0x7884, 0xd0ac, 0x1148, 0x2001, 0x1347, 0x2003, 0x0003, 0x2001,
-+ 0x032a, 0x2003, 0x0009, 0x0040, 0x6017, 0x0001, 0x2001, 0x002d,
-+ 0x2004, 0x9005, 0x0108, 0x6016, 0x2c00, 0x605a, 0x2009, 0x0040,
-+ 0x080c, 0x1b67, 0x2d00, 0x685a, 0x6813, 0x0019, 0x7884, 0xd0a4,
-+ 0x1180, 0x6817, 0x0000, 0x00c6, 0x20a9, 0x0004, 0x2061, 0x0090,
-+ 0x602b, 0x0008, 0x2001, 0x0203, 0x2004, 0x1f04, 0x3400, 0x00ce,
-+ 0x0040, 0x6817, 0x0001, 0x2001, 0x002c, 0x2004, 0x9005, 0x0108,
-+ 0x6816, 0x00f6, 0x00c6, 0x2079, 0x0100, 0x2061, 0x0090, 0x7827,
-+ 0x0002, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, 0x601a, 0x0006,
-+ 0x2001, 0x002b, 0x2004, 0x601e, 0x78c6, 0x000e, 0x78ca, 0x00ce,
-+ 0x00fe, 0x0804, 0x3355, 0x001e, 0x2001, 0x032a, 0x2003, 0x0004,
-+ 0x2061, 0x0100, 0x6027, 0x0002, 0x6106, 0x2011, 0x020d, 0x2013,
-+ 0x0020, 0x2001, 0x0004, 0x200c, 0x918c, 0xfffd, 0x2102, 0x080c,
-+ 0x10cf, 0x7884, 0x9084, 0x0003, 0x9086, 0x0002, 0x01a0, 0x2009,
-+ 0x0028, 0x080c, 0x1b67, 0x2001, 0x0227, 0x200c, 0x2102, 0x6050,
-+ 0x9084, 0xb7ef, 0x6052, 0x602f, 0x0000, 0x604b, 0xf7f7, 0x6043,
-+ 0x0090, 0x6043, 0x0010, 0x2908, 0x2a10, 0x2b18, 0x2b00, 0x9a05,
-+ 0x9905, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e,
-+ 0x008e, 0x1118, 0x012e, 0x0804, 0x2b68, 0x012e, 0x2021, 0x400c,
-+ 0x0804, 0x2b6a, 0x9085, 0x0001, 0x1d04, 0x347b, 0x2091, 0x6000,
-+ 0x8420, 0x9486, 0x0064, 0x0005, 0x2001, 0x0105, 0x2003, 0x0010,
-+ 0x2001, 0x032a, 0x2003, 0x0004, 0x2001, 0x009a, 0x2003, 0x0004,
-+ 0x2001, 0x1347, 0x2003, 0x0000, 0x2001, 0x134a, 0x2003, 0x0000,
-+ 0x2009, 0x0048, 0x080c, 0x1b67, 0x2001, 0x0227, 0x2024, 0x2402,
-+ 0x9026, 0x0005, 0x00f6, 0x2079, 0x0100, 0x2001, 0x1116, 0x200c,
-+ 0x7932, 0x7936, 0x080c, 0x1f8d, 0x7850, 0x9084, 0xfbff, 0x9085,
-+ 0x0030, 0x7852, 0x2019, 0x01f4, 0x8319, 0x1df0, 0x9084, 0xffcf,
-+ 0x9085, 0x2000, 0x7852, 0x20a9, 0x0046, 0x1d04, 0x34b5, 0x2091,
-+ 0x6000, 0x1f04, 0x34b5, 0x7850, 0x9085, 0x0400, 0x9084, 0xdfff,
-+ 0x7852, 0x2001, 0x0021, 0x2004, 0x9084, 0x0003, 0x9086, 0x0001,
-+ 0x1120, 0x7850, 0x9084, 0xdfff, 0x7852, 0x784b, 0xf7f7, 0x7843,
-+ 0x0090, 0x7843, 0x0010, 0x20a9, 0x0028, 0xa001, 0x1f04, 0x34d5,
-+ 0x7850, 0x9085, 0x1400, 0x7852, 0x2019, 0x61a8, 0x7854, 0xa001,
-+ 0xa001, 0xd08c, 0x1110, 0x8319, 0x1dc8, 0x7827, 0x0048, 0x7850,
-+ 0x9085, 0x0400, 0x7852, 0x7843, 0x0040, 0x2019, 0x01f4, 0xa001,
-+ 0xa001, 0x8319, 0x1de0, 0x2001, 0x0100, 0x080c, 0x2401, 0x7827,
-+ 0x0020, 0x7843, 0x0000, 0x2001, 0x0000, 0x080c, 0x2401, 0x7827,
-+ 0x0048, 0x00fe, 0x0005, 0x7884, 0xd0ac, 0x11c8, 0x00f6, 0x00e6,
-+ 0x2071, 0x1347, 0x2079, 0x0320, 0x2001, 0x0201, 0x2004, 0x9005,
-+ 0x0160, 0x7000, 0x9086, 0x0000, 0x1140, 0x0051, 0xd0bc, 0x0108,
-+ 0x8738, 0x7003, 0x0003, 0x782b, 0x0019, 0x00ee, 0x00fe, 0x0005,
-+ 0x00f6, 0x2079, 0x0300, 0x78bc, 0x00fe, 0x908c, 0x0070, 0x0178,
-+ 0x2009, 0x0032, 0x260a, 0x2009, 0x0033, 0x250a, 0xd0b4, 0x0108,
-+ 0x8a50, 0xd0ac, 0x0108, 0x8948, 0xd0a4, 0x0108, 0x8b58, 0x0005,
-+ 0x00f6, 0x2079, 0x0200, 0x781c, 0xd084, 0x0110, 0x7837, 0x0050,
-+ 0x00fe, 0x0005, 0x00e6, 0x2071, 0x0100, 0x2001, 0x12e2, 0x2004,
-+ 0x70e2, 0x080c, 0x3281, 0x1188, 0x2001, 0x111e, 0x2004, 0x2009,
-+ 0x111d, 0x210c, 0x918c, 0x00ff, 0x706e, 0x716a, 0x7066, 0x918d,
-+ 0x3200, 0x7162, 0x7073, 0xe109, 0x0080, 0x702c, 0x9085, 0x0002,
-+ 0x702e, 0x2009, 0x1116, 0x210c, 0x716e, 0x7063, 0x0100, 0x7166,
-+ 0x719e, 0x706b, 0x0000, 0x7073, 0x0809, 0x7077, 0x0008, 0x7078,
-+ 0x9080, 0x0100, 0x707a, 0x7080, 0x8000, 0x7082, 0x7087, 0xaaaa,
-+ 0x9006, 0x708a, 0x708e, 0x707e, 0x70d6, 0x70ab, 0x0036, 0x70af,
-+ 0x95d5, 0x7014, 0x9084, 0x1984, 0x9085, 0x0012, 0x7016, 0x080c,
-+ 0x3634, 0x00f6, 0x2071, 0x1347, 0x2079, 0x0320, 0x00d6, 0x2069,
-+ 0x0000, 0x6884, 0xd0b4, 0x0120, 0x689c, 0x780e, 0x6898, 0x780a,
-+ 0x00de, 0x2011, 0x0011, 0x080c, 0x360c, 0x2011, 0x0001, 0x080c,
-+ 0x360c, 0x00fe, 0x00ee, 0x0005, 0x00f6, 0x00e6, 0x2071, 0x1347,
-+ 0x2079, 0x0320, 0x792c, 0xd1fc, 0x0904, 0x3609, 0x782b, 0x0002,
-+ 0x9026, 0xd19c, 0x1904, 0x3605, 0x7000, 0x0002, 0x3609, 0x35ba,
-+ 0x35ea, 0x3605, 0xd1bc, 0x1170, 0xd1dc, 0x1190, 0x8001, 0x7002,
-+ 0x2011, 0x0001, 0x080c, 0x360c, 0x0904, 0x3609, 0x080c, 0x360c,
-+ 0x0804, 0x3609, 0x00f6, 0x2079, 0x0300, 0x78bf, 0x0000, 0x00fe,
-+ 0x7810, 0x7914, 0x782b, 0x0004, 0x7812, 0x7916, 0x2001, 0x0201,
-+ 0x200c, 0x81ff, 0x0de8, 0x080c, 0x3520, 0x2009, 0x0001, 0x00f6,
-+ 0x2079, 0x0300, 0x78b8, 0x00fe, 0xd0ec, 0x0110, 0x2009, 0x0011,
-+ 0x792a, 0x00f8, 0x8001, 0x7002, 0x9184, 0x0880, 0x1140, 0x782c,
-+ 0xd0fc, 0x1904, 0x35ae, 0x2011, 0x0001, 0x00b1, 0x0090, 0x6010,
-+ 0x9092, 0x0004, 0x9086, 0x0015, 0x1120, 0x6000, 0x605a, 0x2011,
-+ 0x0031, 0x6212, 0xd1dc, 0x1960, 0x0828, 0x782b, 0x0004, 0x7003,
-+ 0x0000, 0x00ee, 0x00fe, 0x0005, 0x6014, 0x9005, 0x0520, 0x8001,
-+ 0x6016, 0x6058, 0x6110, 0x9140, 0x2804, 0x7802, 0x8840, 0x2804,
-+ 0x7806, 0x8840, 0x2804, 0x7812, 0x8840, 0x2804, 0x7816, 0x8840,
-+ 0x7a2a, 0x7000, 0x8000, 0x7002, 0x6058, 0x9802, 0x908a, 0x0029,
-+ 0x1138, 0x6058, 0x9080, 0x0001, 0x2004, 0x605a, 0x2001, 0x0019,
-+ 0x6012, 0x9085, 0x0001, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x2071,
-+ 0x134a, 0x2079, 0x0090, 0x792c, 0xd1fc, 0x01f0, 0x782b, 0x0002,
-+ 0x2d60, 0x9026, 0x7000, 0x0002, 0x365c, 0x3647, 0x3653, 0x8001,
-+ 0x7002, 0xd19c, 0x1188, 0x2011, 0x0001, 0x080c, 0x360c, 0x0160,
-+ 0x080c, 0x360c, 0x0048, 0x8001, 0x7002, 0x782c, 0xd0fc, 0x1d30,
-+ 0x2011, 0x0001, 0x080c, 0x360c, 0x00ce, 0x00ee, 0x00fe, 0x0005,
-+ 0x00f6, 0x00e6, 0x00c6, 0x2061, 0x0200, 0x2001, 0x12e2, 0x2004,
-+ 0x601a, 0x2061, 0x0100, 0x2001, 0x12e1, 0x2004, 0x60ce, 0x6104,
-+ 0xc1ac, 0x6106, 0x2001, 0x002c, 0x2004, 0x9005, 0x01f8, 0x2038,
-+ 0x2001, 0x002e, 0x2024, 0x2001, 0x002f, 0x201c, 0x080c, 0x3eb9,
-+ 0x6813, 0x0019, 0x6f16, 0x2d00, 0x685a, 0x978a, 0x0007, 0x0220,
-+ 0x2138, 0x2009, 0x0007, 0x0010, 0x2708, 0x903e, 0x6858, 0x9080,
-+ 0x0019, 0x04c1, 0x1d90, 0x2d00, 0x685a, 0x0088, 0x080c, 0x3eb9,
-+ 0x6813, 0x0019, 0x2070, 0x6817, 0x0001, 0x2d00, 0x685a, 0x2001,
-+ 0x002e, 0x2004, 0x2072, 0x2001, 0x002f, 0x2004, 0x7006, 0x2061,
-+ 0x0090, 0x2079, 0x0100, 0x2001, 0x12e1, 0x2004, 0x6036, 0x2009,
-+ 0x0040, 0x080c, 0x1b67, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8,
-+ 0x700a, 0x601a, 0x0006, 0x2001, 0x002b, 0x2004, 0x700e, 0x601e,
-+ 0x78c6, 0x000e, 0x78ca, 0x9006, 0x600a, 0x600e, 0x00ce, 0x00ee,
-+ 0x00fe, 0x0005, 0x00e6, 0x2071, 0x0080, 0x20e9, 0x0001, 0x20a0,
-+ 0x20e1, 0x0000, 0x2099, 0x0088, 0x702b, 0x0026, 0x7402, 0x7306,
-+ 0x9006, 0x700a, 0x700e, 0x810b, 0x810b, 0x21a8, 0x810b, 0x7112,
-+ 0x702b, 0x0041, 0x702c, 0xd0fc, 0x0de8, 0x702b, 0x0002, 0x702b,
-+ 0x0040, 0x4005, 0x7400, 0x7304, 0x87ff, 0x0180, 0x00c6, 0x00d6,
-+ 0x2d60, 0x00c6, 0x080c, 0x3eb9, 0x00ce, 0x6058, 0x2070, 0x2d00,
-+ 0x7006, 0x605a, 0x00de, 0x00ce, 0x9085, 0x0001, 0x00ee, 0x0005,
-+ 0x00e6, 0x2001, 0x002d, 0x2004, 0x9005, 0x0508, 0x2038, 0x2001,
-+ 0x0030, 0x2024, 0x2001, 0x0031, 0x201c, 0x080c, 0x3eb9, 0x2d60,
-+ 0x6813, 0x0019, 0x6f16, 0x2d00, 0x685a, 0x978a, 0x0007, 0x0220,
-+ 0x2138, 0x2009, 0x0007, 0x0010, 0x2708, 0x903e, 0x6858, 0x9080,
-+ 0x0019, 0x080c, 0x36ca, 0x1d88, 0x2d00, 0x685a, 0x00e0, 0x080c,
-+ 0x3eb9, 0x2d60, 0x6013, 0x0019, 0x2070, 0x6017, 0x0001, 0x2c00,
-+ 0x605a, 0x2001, 0x0030, 0x2004, 0x2072, 0x2001, 0x0031, 0x2004,
-+ 0x7006, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, 0x700a, 0x2001,
-+ 0x002b, 0x2004, 0x700e, 0x2001, 0x032a, 0x2003, 0x0004, 0x7884,
-+ 0xd0ac, 0x1180, 0x2001, 0x0101, 0x200c, 0x918d, 0x0200, 0x2102,
-+ 0x6017, 0x0000, 0x2001, 0x1347, 0x2003, 0x0003, 0x2001, 0x032a,
-+ 0x2003, 0x0009, 0x2001, 0x0300, 0x2003, 0x0000, 0x2001, 0x020d,
-+ 0x2003, 0x0000, 0x2001, 0x0004, 0x200c, 0x918d, 0x0002, 0x2102,
-+ 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x20a9, 0x0012, 0x2001,
-+ 0x1140, 0x20e9, 0x0001, 0x20a0, 0x9006, 0x4004, 0x2009, 0x013c,
-+ 0x200a, 0x012e, 0x7880, 0x9086, 0x0052, 0x0108, 0x0005, 0x0804,
-+ 0x2b68, 0x7d98, 0x7c9c, 0x0804, 0x2c5d, 0x080c, 0x62e4, 0x0110,
-+ 0x080c, 0x50b9, 0x2069, 0x1152, 0x2d00, 0x2009, 0x0030, 0x7a8c,
-+ 0x7b88, 0x7c9c, 0x7d98, 0x2039, 0x0001, 0x080c, 0x3f0c, 0x701b,
-+ 0x379a, 0x0005, 0x2001, 0x110d, 0x2004, 0xd0b4, 0x1130, 0x3b00,
-+ 0x3a08, 0xc194, 0xc095, 0x20d8, 0x21d0, 0x2069, 0x1152, 0x6800,
-+ 0x9005, 0x0904, 0x2b9b, 0x6804, 0xd0ac, 0x0118, 0xd0a4, 0x0904,
-+ 0x2b9b, 0xd094, 0x00c6, 0x2061, 0x0100, 0x6104, 0x0138, 0x6200,
-+ 0x9292, 0x0005, 0x0218, 0x918c, 0xffdf, 0x0010, 0x918d, 0x0020,
-+ 0x6106, 0x00ce, 0xd08c, 0x00c6, 0x2061, 0x0100, 0x6104, 0x0118,
-+ 0x918d, 0x0010, 0x0010, 0x918c, 0xffef, 0x6106, 0x00ce, 0xd084,
-+ 0x0158, 0x6a28, 0x928a, 0x007f, 0x1a04, 0x2b9b, 0x9288, 0x298c,
-+ 0x210d, 0x918c, 0x00ff, 0x615e, 0xd0dc, 0x0130, 0x6828, 0x908a,
-+ 0x007f, 0x1a04, 0x2b9b, 0x6056, 0x6888, 0x9084, 0x0030, 0x8004,
-+ 0x8004, 0x8004, 0x8004, 0x0006, 0x2009, 0x12e8, 0x9080, 0x2081,
-+ 0x2005, 0x200a, 0x000e, 0x2009, 0x12e9, 0x9080, 0x2085, 0x2005,
-+ 0x200a, 0x6808, 0x908a, 0x0100, 0x0a04, 0x2b9b, 0x908a, 0x0841,
-+ 0x1a04, 0x2b9b, 0x9084, 0x0007, 0x1904, 0x2b9b, 0x680c, 0x9005,
-+ 0x0904, 0x2b9b, 0x6810, 0x9005, 0x0904, 0x2b9b, 0x6848, 0x6940,
-+ 0x910a, 0x1a04, 0x2b9b, 0x8001, 0x0904, 0x2b9b, 0x684c, 0x6944,
-+ 0x910a, 0x1a04, 0x2b9b, 0x8001, 0x0904, 0x2b9b, 0x6980, 0xd1e4,
-+ 0x0140, 0x00c6, 0x2061, 0x0100, 0x6004, 0x9085, 0x0100, 0x6006,
-+ 0x00ce, 0x2009, 0x12bb, 0x200b, 0x0000, 0x2001, 0x1174, 0x2004,
-+ 0xd0c4, 0x0140, 0x7884, 0x200a, 0x2009, 0x017f, 0x200a, 0x3b00,
-+ 0xc085, 0x20d8, 0x6814, 0x908c, 0x00ff, 0x6146, 0x8007, 0x9084,
-+ 0x00ff, 0x604a, 0x080c, 0x65bd, 0x080c, 0x58f4, 0x080c, 0x5946,
-+ 0x6808, 0x602a, 0x080c, 0x1a81, 0x2009, 0x0170, 0x200b, 0x0080,
-+ 0xa001, 0xa001, 0x200b, 0x0000, 0x0036, 0x6b08, 0x080c, 0x1fe8,
-+ 0x003e, 0x6000, 0x9086, 0x0000, 0x1904, 0x393a, 0x6818, 0x691c,
-+ 0x6a20, 0x6b24, 0x8007, 0x810f, 0x8217, 0x831f, 0x6016, 0x611a,
-+ 0x621e, 0x6322, 0x6c04, 0xd4f4, 0x0148, 0x6830, 0x6934, 0x6a38,
-+ 0x6b3c, 0x8007, 0x810f, 0x8217, 0x831f, 0x0010, 0x9084, 0xf0ff,
-+ 0x6006, 0x610a, 0x620e, 0x6312, 0x8007, 0x810f, 0x8217, 0x831f,
-+ 0x20a9, 0x0004, 0x20a1, 0x12ea, 0x20e9, 0x0001, 0x4001, 0x080c,
-+ 0x72cb, 0x00c6, 0x900e, 0x20a9, 0x0001, 0x6b70, 0xd384, 0x0510,
-+ 0x0068, 0x2009, 0x0100, 0x210c, 0x918e, 0x0008, 0x1110, 0x839d,
-+ 0x0010, 0x83f5, 0x3e18, 0x12b0, 0x3508, 0x8109, 0x080c, 0x6b21,
-+ 0x6878, 0x6016, 0x6874, 0x2008, 0x9084, 0xff00, 0x8007, 0x600a,
-+ 0x9184, 0x00ff, 0x6006, 0x8108, 0x1118, 0x6003, 0x0003, 0x0010,
-+ 0x6003, 0x0001, 0x1f04, 0x3891, 0x00ce, 0x00c6, 0x2061, 0x12d6,
-+ 0x6a88, 0x9284, 0xc000, 0x2010, 0x9286, 0x0000, 0x1158, 0x2063,
-+ 0x0000, 0x2001, 0x0001, 0x080c, 0x2290, 0x2001, 0x0001, 0x080c,
-+ 0x2273, 0x0090, 0x9286, 0x4000, 0x1148, 0x2063, 0x0001, 0x9006,
-+ 0x080c, 0x2290, 0x9006, 0x080c, 0x2273, 0x0030, 0x9286, 0x8000,
-+ 0x1d30, 0x2063, 0x0002, 0x0c98, 0x00ce, 0x6888, 0xd0ec, 0x0130,
-+ 0x2011, 0x0114, 0x2204, 0x9085, 0x0100, 0x2012, 0x6a80, 0x9284,
-+ 0x0030, 0x9086, 0x0030, 0x1128, 0x9294, 0xffcf, 0x9295, 0x0020,
-+ 0x6a82, 0x2001, 0x12a7, 0x6a80, 0x9294, 0x0030, 0x928e, 0x0000,
-+ 0x0170, 0x928e, 0x0010, 0x0118, 0x928e, 0x0020, 0x0140, 0x2003,
-+ 0xaaaa, 0x080c, 0x205d, 0x2001, 0x1298, 0x2102, 0x0008, 0x2102,
-+ 0x00c6, 0x2061, 0x0100, 0x602f, 0x0040, 0x602f, 0x0000, 0x00ce,
-+ 0x080c, 0x62e4, 0x0128, 0x080c, 0x41f5, 0x0110, 0x080c, 0x1fad,
-+ 0x60d0, 0x9005, 0x01d0, 0x6003, 0x0001, 0x2009, 0x3920, 0x00e0,
-+ 0x080c, 0x62e4, 0x1178, 0x2011, 0x61aa, 0x080c, 0x71fa, 0x2011,
-+ 0x619d, 0x080c, 0x72bf, 0x2001, 0x12a8, 0x2003, 0x0000, 0x080c,
-+ 0x621a, 0x0040, 0x080c, 0x4faa, 0x0028, 0x6003, 0x0004, 0x2009,
-+ 0x393a, 0x0010, 0x0804, 0x2b68, 0x2001, 0x0170, 0x2004, 0x9084,
-+ 0x00ff, 0x9086, 0x004c, 0x1118, 0x2091, 0x30bd, 0x0817, 0x2091,
-+ 0x303d, 0x0817, 0x6000, 0x9086, 0x0000, 0x0904, 0x2b98, 0x2069,
-+ 0x1152, 0x7890, 0x6842, 0x7894, 0x6846, 0x2d00, 0x2009, 0x0030,
-+ 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x2039, 0x0001, 0x0804, 0x3f0f,
-+ 0x9006, 0x080c, 0x1fad, 0x81ff, 0x1904, 0x2b98, 0x080c, 0x62e4,
-+ 0x1188, 0x2001, 0x12a8, 0x2003, 0x0001, 0x2001, 0x1100, 0x2003,
-+ 0x0001, 0x080c, 0x2987, 0x0118, 0x6130, 0xc18d, 0x6132, 0x080c,
-+ 0x621a, 0x0020, 0x080c, 0x50b9, 0x080c, 0x4faa, 0x0804, 0x2b68,
-+ 0x81ff, 0x1904, 0x2b98, 0x080c, 0x62e4, 0x1110, 0x0804, 0x2b98,
-+ 0x618c, 0x81ff, 0x01a8, 0x7047, 0x0000, 0x2001, 0x1580, 0x2009,
-+ 0x0040, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0126, 0x2091, 0x8000,
-+ 0x2039, 0x0001, 0x080c, 0x3f0f, 0x701b, 0x2b66, 0x012e, 0x0005,
-+ 0x7047, 0x0001, 0x00d6, 0x2069, 0x1580, 0x20a9, 0x0040, 0x20e9,
-+ 0x0001, 0x20a1, 0x1580, 0x2019, 0xffff, 0x4304, 0x6554, 0x9588,
-+ 0x298c, 0x210d, 0x918c, 0x00ff, 0x216a, 0x900e, 0x2011, 0x0002,
-+ 0x2100, 0x9506, 0x01a8, 0x080c, 0x5608, 0x1190, 0x6014, 0x821c,
-+ 0x0238, 0x9398, 0x1580, 0x9085, 0xff00, 0x8007, 0x201a, 0x0038,
-+ 0x9398, 0x1580, 0x2324, 0x94a4, 0xff00, 0x9405, 0x201a, 0x8210,
-+ 0x8108, 0x9182, 0x0080, 0x1208, 0x0c18, 0x8201, 0x8007, 0x2d0c,
-+ 0x9105, 0x206a, 0x00de, 0x20a9, 0x0040, 0x20a1, 0x1580, 0x2099,
-+ 0x1580, 0x080c, 0x504f, 0x0804, 0x398d, 0x080c, 0x3ef0, 0x0904,
-+ 0x2b9b, 0x00c6, 0x080c, 0x3eb9, 0x00ce, 0x1120, 0x2009, 0x0002,
-+ 0x0804, 0x2b98, 0x2001, 0x1153, 0x2004, 0xd0b4, 0x0568, 0x7884,
-+ 0x9084, 0xff00, 0x908e, 0x7e00, 0x0538, 0x908e, 0x7f00, 0x0520,
-+ 0x908e, 0x8000, 0x0508, 0x080c, 0x2982, 0x1148, 0x6000, 0xd08c,
-+ 0x11d8, 0x6004, 0x9084, 0x00ff, 0x9086, 0x0006, 0x11a8, 0x6867,
-+ 0x0000, 0x6868, 0xc0fd, 0x686a, 0x080c, 0xaabe, 0x1120, 0x2009,
-+ 0x0003, 0x0804, 0x2b98, 0x7007, 0x0003, 0x701b, 0x3a20, 0x0005,
-+ 0x080c, 0x3ef0, 0x0904, 0x2b9b, 0x20a9, 0x002b, 0x20e1, 0x0001,
-+ 0x2c98, 0x9de8, 0x0002, 0x20e9, 0x0001, 0x2da0, 0x4003, 0x20a9,
-+ 0x0004, 0x9d80, 0x0006, 0x20a0, 0x9c80, 0x0006, 0x2098, 0x080c,
-+ 0x504f, 0x20a9, 0x0004, 0x9d80, 0x000a, 0x20a0, 0x9c80, 0x000a,
-+ 0x2098, 0x080c, 0x504f, 0x2d00, 0x2039, 0x0001, 0x2009, 0x002b,
-+ 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0804, 0x3f0f, 0x81ff, 0x1904,
-+ 0x2b98, 0x080c, 0x3ece, 0x0904, 0x2b9b, 0x080c, 0x5767, 0x0804,
-+ 0x2b68, 0x81ff, 0x1904, 0x2b98, 0x7888, 0x908a, 0x1000, 0x1a04,
-+ 0x2b9b, 0x080c, 0x3ef0, 0x0904, 0x2b9b, 0x080c, 0x57a6, 0x0904,
-+ 0x2b98, 0x2019, 0x0004, 0x900e, 0x080c, 0x5779, 0x7984, 0x810f,
-+ 0x7a88, 0x0491, 0x0804, 0x2b68, 0x00f6, 0x2d78, 0x789c, 0x908a,
-+ 0x1000, 0x12c0, 0x080c, 0x3eee, 0x01a8, 0x080c, 0x57a6, 0x2009,
-+ 0x0002, 0x0160, 0x2019, 0x0004, 0x080c, 0x5779, 0x2009, 0x0003,
-+ 0x0128, 0x7998, 0x7a9c, 0x810f, 0x00b9, 0x0070, 0x7897, 0x4005,
-+ 0x799a, 0x0010, 0x7897, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001,
-+ 0x0030, 0x2f68, 0x00fe, 0x0005, 0x7897, 0x4000, 0x900e, 0x9085,
-+ 0x0001, 0x2f68, 0x00fe, 0x0005, 0x9186, 0x00ff, 0x0110, 0x0071,
-+ 0x0060, 0x2029, 0x007e, 0x2061, 0x1100, 0x6454, 0x2400, 0x9506,
-+ 0x0110, 0x2508, 0x0019, 0x8529, 0x1ec8, 0x0005, 0x080c, 0x5608,
-+ 0x1138, 0x2200, 0x8003, 0x800b, 0x810b, 0x9108, 0x080c, 0x7206,
-+ 0x0005, 0x81ff, 0x1904, 0x2b98, 0x080c, 0x3ece, 0x0904, 0x2b9b,
-+ 0x080c, 0x56ca, 0x0904, 0x2b98, 0x080c, 0x5770, 0x0804, 0x2b68,
-+ 0x81ff, 0x1904, 0x2b98, 0x080c, 0x3ece, 0x0904, 0x2b9b, 0x080c,
-+ 0x56ca, 0x0904, 0x2b98, 0x080c, 0x575e, 0x0804, 0x2b68, 0x6100,
-+ 0x0804, 0x2b68, 0x080c, 0x3ef0, 0x0904, 0x2b9b, 0x2001, 0x1100,
-+ 0x2004, 0x9086, 0x0003, 0x1904, 0x2b98, 0x00d6, 0x9ce8, 0x000a,
-+ 0x7984, 0xd184, 0x0110, 0x9ce8, 0x0006, 0x680c, 0x8007, 0x789e,
-+ 0x6808, 0x8007, 0x789a, 0x6b04, 0x831f, 0x6a00, 0x8217, 0x00de,
-+ 0x6100, 0x918c, 0x0200, 0x0804, 0x2b68, 0x7884, 0x909c, 0x007f,
-+ 0x939a, 0x0003, 0x1a04, 0x2b98, 0x6254, 0x9294, 0x00ff, 0x9084,
-+ 0xff00, 0x8007, 0x9206, 0x1560, 0x2031, 0x1148, 0x2009, 0x013c,
-+ 0x2136, 0x2001, 0x1140, 0x2009, 0x000c, 0x7a8c, 0x7b88, 0x7c9c,
-+ 0x7d98, 0x2039, 0x0001, 0x0006, 0x7884, 0x9084, 0x0080, 0x1118,
-+ 0x000e, 0x0804, 0x3f0f, 0x000e, 0x2031, 0x0000, 0x2061, 0x11ea,
-+ 0x6606, 0x6116, 0x670e, 0x6012, 0x622a, 0x632e, 0x6432, 0x6536,
-+ 0x2c10, 0x080c, 0x0f22, 0x7007, 0x0002, 0x701b, 0x3b62, 0x0005,
-+ 0x81ff, 0x1904, 0x2b98, 0x080c, 0x3ef0, 0x0904, 0x2b9b, 0x6004,
-+ 0x9084, 0x00ff, 0x9086, 0x0006, 0x1904, 0x2b98, 0x00c6, 0x080c,
-+ 0x3eb9, 0x00ce, 0x0904, 0x2b98, 0x6867, 0x0000, 0x6868, 0xc0fd,
-+ 0x686a, 0x080c, 0xaa65, 0x0904, 0x2b98, 0x7007, 0x0003, 0x701b,
-+ 0x3b66, 0x0005, 0x080c, 0x376a, 0x0804, 0x2b68, 0x6830, 0x9086,
-+ 0x0100, 0x0904, 0x2b98, 0x9d80, 0x001b, 0x2009, 0x000c, 0x7a8c,
-+ 0x7b88, 0x7c9c, 0x7d98, 0x2039, 0x0001, 0x0804, 0x3f0f, 0x9006,
-+ 0x080c, 0x1fad, 0x7884, 0x9084, 0x00ff, 0x9086, 0x00ff, 0x0118,
-+ 0x81ff, 0x1904, 0x2b98, 0x080c, 0x62e4, 0x0110, 0x080c, 0x50b9,
-+ 0x7888, 0x908a, 0x1000, 0x1a04, 0x2b9b, 0x7984, 0x918c, 0xff00,
-+ 0x810f, 0x9186, 0x00ff, 0x0138, 0x9182, 0x007f, 0x1a04, 0x2b9b,
-+ 0x2100, 0x080c, 0x1f77, 0x0026, 0x00c6, 0x0126, 0x2091, 0x8000,
-+ 0x2061, 0x1317, 0x601b, 0x0000, 0x601f, 0x0000, 0x080c, 0x62e4,
-+ 0x1178, 0x2001, 0x12a8, 0x2003, 0x0001, 0x2001, 0x1100, 0x2003,
-+ 0x0001, 0x9085, 0x0001, 0x080c, 0x6331, 0x080c, 0x621a, 0x0438,
-+ 0x2011, 0x0003, 0x080c, 0x88e2, 0x2011, 0x0002, 0x080c, 0x88ec,
-+ 0x080c, 0x87a2, 0x0036, 0x901e, 0x080c, 0x8847, 0x003e, 0x2061,
-+ 0x0100, 0x2001, 0x1116, 0x2004, 0x9084, 0x00ff, 0x810f, 0x9105,
-+ 0x604a, 0x6043, 0x0090, 0x6043, 0x0010, 0x2009, 0x12d3, 0x200b,
-+ 0x0000, 0x2009, 0x002d, 0x2011, 0x4fe1, 0x080c, 0x7283, 0x7984,
-+ 0x918c, 0xff00, 0x810f, 0x080c, 0x62e4, 0x1110, 0x2009, 0x00ff,
-+ 0x7a88, 0x080c, 0x3aa4, 0x012e, 0x00ce, 0x002e, 0x0804, 0x2b68,
-+ 0x7984, 0x918c, 0xff00, 0x810f, 0x00c6, 0x080c, 0x55b3, 0x2c08,
-+ 0x00ce, 0x1904, 0x2b9b, 0x0804, 0x2b68, 0x81ff, 0x0120, 0x2009,
-+ 0x0001, 0x0804, 0x2b98, 0x60d8, 0xd0ac, 0x1130, 0xd09c, 0x1120,
-+ 0x2009, 0x0005, 0x0804, 0x2b98, 0x080c, 0x3eb9, 0x1120, 0x2009,
-+ 0x0002, 0x0804, 0x2b98, 0x7984, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98,
-+ 0x2039, 0x0001, 0x080c, 0x3f0c, 0x701b, 0x3c1f, 0x0005, 0x2009,
-+ 0x0080, 0x080c, 0x5608, 0x1130, 0x6004, 0x9084, 0x00ff, 0x9086,
-+ 0x0006, 0x0120, 0x2021, 0x400a, 0x0804, 0x2b6a, 0x00d6, 0x9de8,
-+ 0x0019, 0x6900, 0x6a08, 0x6b0c, 0x6c10, 0x6d14, 0x6e18, 0x6820,
-+ 0x90be, 0x0100, 0x0904, 0x3c99, 0x90be, 0x0112, 0x0904, 0x3c99,
-+ 0x90be, 0x0113, 0x0904, 0x3c99, 0x90be, 0x0114, 0x0904, 0x3c99,
-+ 0x90be, 0x0117, 0x0904, 0x3c99, 0x90be, 0x011a, 0x0904, 0x3c99,
-+ 0x90be, 0x011c, 0x0904, 0x3c99, 0x90be, 0x0121, 0x05c8, 0x90be,
-+ 0x0131, 0x05b0, 0x90be, 0x0171, 0x05e0, 0x90be, 0x0173, 0x05c8,
-+ 0x90be, 0x01a1, 0x1120, 0x6830, 0x8007, 0x6832, 0x04b8, 0x90be,
-+ 0x0212, 0x0558, 0x90be, 0x0213, 0x0540, 0x90be, 0x0214, 0x01c8,
-+ 0x90be, 0x0217, 0x0180, 0x90be, 0x021a, 0x1120, 0x6838, 0x8007,
-+ 0x683a, 0x00f8, 0x90be, 0x021f, 0x01e0, 0x90be, 0x0300, 0x01c8,
-+ 0x00de, 0x0804, 0x2b9b, 0x9d80, 0x0010, 0x20a9, 0x0007, 0x080c,
-+ 0x3cda, 0x9d80, 0x000e, 0x20a9, 0x0001, 0x080c, 0x3cda, 0x0048,
-+ 0x9d80, 0x000c, 0x080c, 0x3ce8, 0x0048, 0x9d80, 0x000e, 0x080c,
-+ 0x3ce8, 0x9d80, 0x000c, 0x20a9, 0x0001, 0x04e1, 0x00c6, 0x080c,
-+ 0x3eb9, 0x0548, 0x6868, 0xc0fd, 0x686a, 0x6867, 0x0119, 0x9006,
-+ 0x6882, 0x687f, 0x0020, 0x688b, 0x0001, 0x810b, 0x69ae, 0x68b2,
-+ 0x6ab6, 0x6bba, 0x6cbe, 0x6dc2, 0x69c6, 0x68ca, 0x00ce, 0x00de,
-+ 0x6866, 0x6822, 0x6868, 0xc0fd, 0x686a, 0x6804, 0x2068, 0x080c,
-+ 0xaa81, 0x1120, 0x2009, 0x0003, 0x0804, 0x2b98, 0x7007, 0x0003,
-+ 0x701b, 0x3cd1, 0x0005, 0x00ce, 0x00de, 0x2009, 0x0002, 0x0804,
-+ 0x2b98, 0x6820, 0x9086, 0x8001, 0x1904, 0x2b68, 0x2009, 0x0004,
-+ 0x0804, 0x2b98, 0x0016, 0x2008, 0x2044, 0x8000, 0x204c, 0x8000,
-+ 0x290a, 0x8108, 0x280a, 0x8108, 0x1f04, 0x3cdc, 0x001e, 0x0005,
-+ 0x0016, 0x00a6, 0x00b6, 0x2008, 0x2044, 0x8000, 0x204c, 0x8000,
-+ 0x2054, 0x8000, 0x205c, 0x2b0a, 0x8108, 0x2a0a, 0x8108, 0x290a,
-+ 0x8108, 0x280a, 0x00be, 0x00ae, 0x001e, 0x0005, 0x81ff, 0x0120,
-+ 0x2009, 0x0001, 0x0804, 0x2b98, 0x60d8, 0xd0ac, 0x1130, 0xd09c,
-+ 0x1120, 0x2009, 0x0005, 0x0804, 0x2b98, 0x7984, 0x2140, 0x918c,
-+ 0xff00, 0x810f, 0x60d8, 0xd0ac, 0x1120, 0x9182, 0x0080, 0x0a04,
-+ 0x2b9b, 0x9182, 0x00ff, 0x1a04, 0x2b9b, 0x7a8c, 0x7b88, 0x6074,
-+ 0x9306, 0x1140, 0x6078, 0x924e, 0x0904, 0x2b9b, 0x99cc, 0xff00,
-+ 0x0904, 0x2b9b, 0x00c6, 0x080c, 0x3dc2, 0x2c68, 0x00ce, 0x0530,
-+ 0x90c6, 0x4000, 0x1178, 0x00c6, 0x0006, 0x2d60, 0x900e, 0x080c,
-+ 0x57d6, 0x1108, 0xc185, 0x6000, 0xd0bc, 0x0108, 0xc18d, 0x000e,
-+ 0x00ce, 0x0088, 0x90c6, 0x4007, 0x1110, 0x2408, 0x0060, 0x90c6,
-+ 0x4008, 0x1118, 0x2708, 0x2610, 0x0030, 0x90c6, 0x4009, 0x1108,
-+ 0x0010, 0x2001, 0x4006, 0x2020, 0x0804, 0x2b6a, 0x2d00, 0x7022,
-+ 0x0016, 0x00b6, 0x00c6, 0x00e6, 0x2c70, 0x080c, 0x8f26, 0x05c0,
-+ 0x2d00, 0x6012, 0x080c, 0xad70, 0x2e58, 0x00ee, 0x00e6, 0x00c6,
-+ 0x080c, 0x3eb9, 0x00ce, 0x2b70, 0x1150, 0x080c, 0x8ed9, 0x00ee,
-+ 0x00ce, 0x00be, 0x001e, 0x2009, 0x0002, 0x0804, 0x2b98, 0x900e,
-+ 0x6966, 0x696a, 0x2d00, 0x6016, 0x6932, 0x6868, 0xc0fd, 0xd88c,
-+ 0x0108, 0xc0f5, 0x686a, 0x0126, 0x2091, 0x8000, 0x080c, 0x2862,
-+ 0x012e, 0x6023, 0x0001, 0x9006, 0x080c, 0x5556, 0x2001, 0x0002,
-+ 0x080c, 0x5568, 0x2009, 0x0002, 0x080c, 0x8f53, 0x9085, 0x0001,
-+ 0x00ee, 0x00ce, 0x00be, 0x001e, 0x1120, 0x2009, 0x0003, 0x0804,
-+ 0x2b98, 0x7007, 0x0003, 0x701b, 0x3da6, 0x0005, 0x6830, 0x9086,
-+ 0x0100, 0x7020, 0x2060, 0x1138, 0x2009, 0x0004, 0x6204, 0x9294,
-+ 0x00ff, 0x0804, 0x47e3, 0x900e, 0x6868, 0xd0f4, 0x1904, 0x2b68,
-+ 0x080c, 0x57d6, 0x1108, 0xc185, 0x6000, 0xd0bc, 0x0108, 0xc18d,
-+ 0x0804, 0x2b68, 0x00e6, 0x00d6, 0x2029, 0x0000, 0x2001, 0x1136,
-+ 0x2004, 0xd0ac, 0x0138, 0x2021, 0x0000, 0x20a9, 0x00ff, 0x2071,
-+ 0x1000, 0x0030, 0x2021, 0x0080, 0x20a9, 0x007f, 0x2071, 0x1080,
-+ 0x2e04, 0x9005, 0x1130, 0x2100, 0x9406, 0x1570, 0x2428, 0xc5fd,
-+ 0x0458, 0x2068, 0x6f10, 0x2700, 0x9306, 0x11b0, 0x6e14, 0x2600,
-+ 0x9206, 0x1190, 0x2400, 0x9106, 0x1160, 0x2d60, 0xd884, 0x0568,
-+ 0x6004, 0x9084, 0x00ff, 0x9086, 0x0006, 0x1538, 0x2001, 0x4000,
-+ 0x0428, 0x2001, 0x4007, 0x0410, 0x2400, 0x9106, 0x1168, 0x6e14,
-+ 0x87ff, 0x1138, 0x86ff, 0x09d0, 0x2001, 0x1136, 0x2004, 0xd0ac,
-+ 0x19a8, 0x2001, 0x4008, 0x0090, 0x8420, 0x8e70, 0x1f04, 0x3dd8,
-+ 0x85ff, 0x1130, 0x2001, 0x4009, 0x0048, 0x2001, 0x0001, 0x0030,
-+ 0x080c, 0x55b3, 0x1dd0, 0x6312, 0x6216, 0x9006, 0x9005, 0x00de,
-+ 0x00ee, 0x0005, 0x81ff, 0x1904, 0x2b98, 0x080c, 0x3eb9, 0x0904,
-+ 0x2b98, 0x6867, 0x0000, 0x6868, 0xc0fd, 0x686a, 0x7884, 0x9005,
-+ 0x0904, 0x2b9b, 0x9096, 0x00ff, 0x0120, 0x9092, 0x0004, 0x1a04,
-+ 0x2b9b, 0x2010, 0x2d18, 0x080c, 0x2811, 0x0904, 0x2b98, 0x7007,
-+ 0x0003, 0x701b, 0x3e44, 0x0005, 0x6830, 0x9086, 0x0100, 0x0904,
-+ 0x2b98, 0x0804, 0x2b68, 0x7984, 0x918c, 0xff00, 0x810f, 0x60d8,
-+ 0xd0ac, 0x1120, 0x9182, 0x0080, 0x0a04, 0x2b9b, 0x9182, 0x00ff,
-+ 0x1a04, 0x2b9b, 0x0126, 0x2091, 0x8000, 0x080c, 0xa972, 0x1188,
-+ 0x9190, 0x1000, 0x2204, 0x9065, 0x0160, 0x080c, 0x5100, 0x2001,
-+ 0x1136, 0x2004, 0xd0ac, 0x0110, 0x6017, 0x0000, 0x012e, 0x0804,
-+ 0x2b68, 0x012e, 0x0804, 0x2b98, 0x00f6, 0x2d78, 0x7998, 0x918c,
-+ 0xff00, 0x810f, 0x2001, 0x1136, 0x2004, 0xd0ac, 0x1118, 0x9182,
-+ 0x0080, 0x02e8, 0x9182, 0x00ff, 0x12d0, 0x0126, 0x2091, 0x8000,
-+ 0x080c, 0xa972, 0x1530, 0x9190, 0x1000, 0x2204, 0x9065, 0x0528,
-+ 0x080c, 0x5100, 0x2001, 0x1136, 0x2004, 0xd0ac, 0x0110, 0x6017,
-+ 0x0000, 0x012e, 0x0070, 0x7897, 0x4005, 0x799a, 0x0010, 0x7897,
-+ 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x2f68, 0x00fe,
-+ 0x0005, 0x7897, 0x4000, 0x900e, 0x9085, 0x0001, 0x2f68, 0x00fe,
-+ 0x0005, 0x012e, 0x2009, 0x0003, 0x0c30, 0x012e, 0x2009, 0x000a,
-+ 0x0c10, 0x080c, 0x0eb6, 0x0188, 0x9006, 0x6802, 0x7010, 0x9005,
-+ 0x1120, 0x2d00, 0x7012, 0x7016, 0x0030, 0x7014, 0x6802, 0x2060,
-+ 0x2d00, 0x6006, 0x7016, 0x9d80, 0x0019, 0x0005, 0x7984, 0x810f,
-+ 0x918c, 0x00ff, 0x080c, 0x5608, 0x1130, 0x7e88, 0x9684, 0x3fff,
-+ 0x9082, 0x4000, 0x0208, 0x9066, 0x8cff, 0x0005, 0x7998, 0x810f,
-+ 0x918c, 0x00ff, 0x080c, 0x5608, 0x1130, 0x7e9c, 0x9684, 0x3fff,
-+ 0x9082, 0x4000, 0x0208, 0x9066, 0x8cff, 0x0005, 0x7e98, 0x0008,
-+ 0x7e84, 0x860f, 0x918c, 0x00ff, 0x080c, 0x5608, 0x1128, 0x96b4,
-+ 0x00ff, 0x9682, 0x4000, 0x0208, 0x9066, 0x8cff, 0x0005, 0x0016,
-+ 0x7110, 0x81ff, 0x0128, 0x2168, 0x6904, 0x080c, 0x0ecf, 0x0cc8,
-+ 0x7112, 0x7116, 0x001e, 0x0005, 0x2031, 0x0001, 0x0010, 0x2031,
-+ 0x0000, 0x2061, 0x11ea, 0x6606, 0x6116, 0x670e, 0x6012, 0x622a,
-+ 0x632e, 0x6432, 0x6536, 0x2c10, 0x080c, 0x0f22, 0x7007, 0x0002,
-+ 0x701b, 0x2b68, 0x0005, 0x00f6, 0x0126, 0x2091, 0x8000, 0x2079,
-+ 0x0000, 0x2001, 0x11a3, 0x2004, 0x9005, 0x1190, 0x0e04, 0x3f40,
-+ 0x7a36, 0x7833, 0x0012, 0x7a82, 0x7b86, 0x7c8a, 0x2091, 0x4080,
-+ 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x0fcd, 0x0804, 0x3f9d,
-+ 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2071, 0x1193, 0x703c, 0x9005,
-+ 0x1540, 0x7140, 0x9182, 0x0010, 0x0288, 0x7030, 0x2060, 0x080c,
-+ 0x0eb6, 0x0904, 0x3f96, 0x684b, 0x0000, 0x2d00, 0x703e, 0x2001,
-+ 0x0002, 0x9080, 0x18fe, 0x2005, 0x6846, 0x0098, 0x7030, 0x90e0,
-+ 0x0004, 0x2001, 0x11aa, 0x9c82, 0x11ea, 0x0210, 0x2061, 0x11aa,
-+ 0x2c00, 0x7032, 0x7140, 0x81ff, 0x1108, 0x7036, 0x8108, 0x7142,
-+ 0x0428, 0x7140, 0x8108, 0x7142, 0x703c, 0x2078, 0x7944, 0x2105,
-+ 0x9f60, 0x8108, 0x2105, 0x9005, 0x7946, 0x11c0, 0x080c, 0x0eb6,
-+ 0x1130, 0x8109, 0x7946, 0x7140, 0x8109, 0x7142, 0x0078, 0x9006,
-+ 0x6806, 0x684a, 0x7846, 0x2f00, 0x6802, 0x2d00, 0x7806, 0x703e,
-+ 0x2001, 0x0002, 0x9080, 0x18fe, 0x2005, 0x6846, 0x2262, 0x6306,
-+ 0x640a, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x012e, 0x00fe, 0x0005,
-+ 0x00e6, 0x2071, 0x1193, 0x7040, 0x9005, 0x0904, 0x4024, 0x0126,
-+ 0x2091, 0x8000, 0x0e04, 0x4023, 0x00f6, 0x2079, 0x0000, 0x00c6,
-+ 0x00d6, 0x0086, 0x9006, 0x2040, 0x7038, 0x2068, 0x9005, 0x01c0,
-+ 0x6948, 0x2105, 0x9d60, 0x8108, 0x2105, 0x9005, 0x694a, 0x1190,
-+ 0x6804, 0x9005, 0x090c, 0x0d7e, 0x703a, 0x2d40, 0x2068, 0x6803,
-+ 0x0000, 0x2001, 0x0002, 0x9080, 0x18fe, 0x2005, 0x684a, 0x0010,
-+ 0x7034, 0x2060, 0x2c04, 0x7836, 0x7833, 0x0012, 0x7882, 0x6004,
-+ 0x7886, 0x6008, 0x788a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004,
-+ 0xd084, 0x190c, 0x0fcd, 0x88ff, 0x0118, 0x2868, 0x080c, 0x0ecf,
-+ 0x7040, 0x8001, 0x7042, 0x9005, 0x1170, 0x7038, 0x2068, 0x9005,
-+ 0x0128, 0x080c, 0x0ecf, 0x9006, 0x703a, 0x703e, 0x7033, 0x11aa,
-+ 0x7037, 0x11aa, 0x0420, 0x7038, 0x9005, 0x1508, 0x7230, 0x2c00,
-+ 0x9206, 0x0148, 0x9c80, 0x0004, 0x90fa, 0x11ea, 0x0210, 0x2001,
-+ 0x11aa, 0x7036, 0x00a0, 0x9006, 0x7036, 0x7032, 0x703c, 0x9005,
-+ 0x090c, 0x0d7e, 0x2068, 0x6800, 0x9005, 0x1de0, 0x2d00, 0x703a,
-+ 0x2001, 0x0002, 0x9080, 0x18fe, 0x2005, 0x684a, 0x0000, 0x008e,
-+ 0x00de, 0x00ce, 0x00fe, 0x012e, 0x00ee, 0x0005, 0x0026, 0x2001,
-+ 0x1153, 0x2004, 0xd0c4, 0x0120, 0x2011, 0x8014, 0x080c, 0x3f23,
-+ 0x002e, 0x0005, 0x81ff, 0x1904, 0x2b98, 0x0126, 0x2091, 0x8000,
-+ 0x6030, 0xc08d, 0xc085, 0xc0ac, 0x6032, 0x080c, 0x62e4, 0x1178,
-+ 0x2001, 0x12a8, 0x2003, 0x0001, 0x2001, 0x1100, 0x2003, 0x0001,
-+ 0x9085, 0x0001, 0x080c, 0x6331, 0x080c, 0x621a, 0x0010, 0x080c,
-+ 0x4faa, 0x012e, 0x0804, 0x2b68, 0x7884, 0x2008, 0x918c, 0xfffd,
-+ 0x1128, 0x61e4, 0x910d, 0x61e6, 0x0804, 0x2b68, 0x0804, 0x2b9b,
-+ 0x81ff, 0x1904, 0x2b98, 0x6000, 0x9086, 0x0003, 0x1904, 0x2b98,
-+ 0x080c, 0x58c6, 0x1904, 0x2b98, 0x080c, 0x3ef0, 0x0904, 0x2b9b,
-+ 0x6004, 0x9084, 0x00ff, 0x9086, 0x0006, 0x1120, 0x7888, 0x9005,
-+ 0x0904, 0x2b68, 0x00c6, 0x080c, 0x3eb9, 0x00ce, 0x0904, 0x2b98,
-+ 0x9006, 0x6866, 0x6832, 0x6868, 0xc0fd, 0x686a, 0x080c, 0xab41,
-+ 0x0904, 0x2b98, 0x7007, 0x0003, 0x701b, 0x40ce, 0x0005, 0x00f6,
-+ 0x2d78, 0x2061, 0x1100, 0x6000, 0x9086, 0x0003, 0x2009, 0x0007,
-+ 0x11d0, 0x080c, 0x58c6, 0x2009, 0x0008, 0x11a8, 0x080c, 0x3eee,
-+ 0x01b0, 0x6004, 0x9084, 0x00ff, 0x9086, 0x0006, 0x1118, 0x789c,
-+ 0x9005, 0x01b8, 0x2f68, 0x6868, 0xc0fc, 0x686a, 0x080c, 0xab41,
-+ 0x11c8, 0x2009, 0x0003, 0x7897, 0x4005, 0x799a, 0x0010, 0x7897,
-+ 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x2f68, 0x00fe,
-+ 0x0005, 0x7897, 0x4000, 0x9006, 0x918d, 0x0001, 0x2008, 0x2f68,
-+ 0x00fe, 0x0005, 0x9006, 0x2f68, 0x00fe, 0x0005, 0x6830, 0x9086,
-+ 0x0100, 0x1904, 0x2b68, 0x0804, 0x47e3, 0x2001, 0x1100, 0x2004,
-+ 0x9086, 0x0003, 0x1904, 0x2b98, 0x7f84, 0x7a8c, 0x7b88, 0x7c9c,
-+ 0x7d98, 0x080c, 0x3eb9, 0x0904, 0x2b98, 0x900e, 0x2130, 0x7122,
-+ 0x712e, 0x9d80, 0x0005, 0x7026, 0x20a0, 0x20e1, 0x0001, 0x20e9,
-+ 0x0001, 0x080c, 0x5608, 0x1904, 0x4149, 0x6004, 0x90c4, 0x00ff,
-+ 0x98c6, 0x0006, 0x0130, 0x90c4, 0xff00, 0x98c6, 0x0600, 0x1904,
-+ 0x4149, 0x080c, 0x58c6, 0x1130, 0x080c, 0x57d6, 0x1118, 0xd79c,
-+ 0x0904, 0x4149, 0xd794, 0x1110, 0xd784, 0x0158, 0x9c80, 0x0006,
-+ 0x2098, 0x3400, 0x20a9, 0x0004, 0x4003, 0x080c, 0x3ce8, 0xd794,
-+ 0x0148, 0x9c80, 0x000a, 0x2098, 0x3400, 0x20a9, 0x0004, 0x4003,
-+ 0x080c, 0x3ce8, 0x21a2, 0x3400, 0x8000, 0x20a0, 0xd794, 0x01d8,
-+ 0x9c80, 0x0000, 0x2098, 0x20a9, 0x0002, 0x4003, 0x9c80, 0x0003,
-+ 0x2098, 0x20a9, 0x0001, 0x4005, 0x9c80, 0x0004, 0x2098, 0x3400,
-+ 0x20a9, 0x0002, 0x4003, 0x080c, 0x3cda, 0x9c80, 0x0026, 0x2098,
-+ 0x20a9, 0x0002, 0x4003, 0xd794, 0x0110, 0x96b0, 0x000b, 0x96b0,
-+ 0x0005, 0x8108, 0x2001, 0x1136, 0x2004, 0xd0ac, 0x0118, 0x9186,
-+ 0x0100, 0x0040, 0xd78c, 0x0120, 0x9186, 0x0100, 0x0170, 0x0018,
-+ 0x9186, 0x007e, 0x0150, 0xd794, 0x0118, 0x9686, 0x0020, 0x0010,
-+ 0x9686, 0x0028, 0x0150, 0x0804, 0x40ed, 0x86ff, 0x1120, 0x7120,
-+ 0x810b, 0x0804, 0x2b68, 0x702f, 0x0001, 0x711e, 0x7020, 0x9600,
-+ 0x7022, 0x772a, 0x2061, 0x11ea, 0x6007, 0x0000, 0x6616, 0x7024,
-+ 0x600f, 0x0001, 0x6012, 0x622a, 0x632e, 0x6432, 0x6536, 0x2c10,
-+ 0x080c, 0x0f22, 0x7007, 0x0002, 0x701b, 0x4187, 0x0005, 0x702c,
-+ 0x9005, 0x1168, 0x711c, 0x7024, 0x20a0, 0x7728, 0x9036, 0x2061,
-+ 0x11ea, 0x6228, 0x632c, 0x6430, 0x6534, 0x0804, 0x40ed, 0x7120,
-+ 0x810b, 0x0804, 0x2b68, 0x2029, 0x007e, 0x7984, 0x7a88, 0x7b8c,
-+ 0x7c98, 0x9184, 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, 0x2b9b,
-+ 0x9502, 0x0a04, 0x2b9b, 0x9184, 0x00ff, 0x90e2, 0x0020, 0x0a04,
-+ 0x2b9b, 0x9502, 0x0a04, 0x2b9b, 0x9284, 0xff00, 0x8007, 0x90e2,
-+ 0x0020, 0x0a04, 0x2b9b, 0x9502, 0x0a04, 0x2b9b, 0x9284, 0x00ff,
-+ 0x90e2, 0x0020, 0x0a04, 0x2b9b, 0x9502, 0x0a04, 0x2b9b, 0x9384,
-+ 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, 0x2b9b, 0x9502, 0x0a04,
-+ 0x2b9b, 0x9384, 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x2b9b, 0x9502,
-+ 0x0a04, 0x2b9b, 0x9484, 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04,
-+ 0x2b9b, 0x9502, 0x0a04, 0x2b9b, 0x9484, 0x00ff, 0x90e2, 0x0020,
-+ 0x0a04, 0x2b9b, 0x9502, 0x0a04, 0x2b9b, 0x2061, 0x12c3, 0x6102,
-+ 0x6206, 0x630a, 0x640e, 0x0804, 0x2b68, 0x0006, 0x2001, 0x1153,
-+ 0x2004, 0xd0cc, 0x000e, 0x0005, 0x0006, 0x2001, 0x1172, 0x2004,
-+ 0xd0bc, 0x000e, 0x0005, 0x616c, 0x7a84, 0x6300, 0x82ff, 0x1118,
-+ 0x7986, 0x0804, 0x2b68, 0x83ff, 0x1904, 0x2b9b, 0x2001, 0xfff0,
-+ 0x9200, 0x1a04, 0x2b9b, 0x2019, 0xffff, 0x6070, 0x9302, 0x9200,
-+ 0x0a04, 0x2b9b, 0x7986, 0x626e, 0x0804, 0x2b68, 0x2001, 0x1100,
-+ 0x2004, 0x9086, 0x0003, 0x1904, 0x2b98, 0x7c88, 0x7d84, 0x7e98,
-+ 0x7f8c, 0x080c, 0x3eb9, 0x0904, 0x2b98, 0x900e, 0x901e, 0x7322,
-+ 0x732e, 0x9d80, 0x0003, 0x7026, 0x20a0, 0x91e0, 0x1000, 0x2c64,
-+ 0x8cff, 0x01d8, 0x6004, 0x9084, 0x00ff, 0x9086, 0x0006, 0x0130,
-+ 0x6004, 0x9084, 0xff00, 0x9086, 0x0600, 0x1178, 0x00d6, 0x3468,
-+ 0x6014, 0x206a, 0x8d68, 0x6010, 0x8007, 0x9105, 0x8007, 0x206a,
-+ 0x8d68, 0x2da0, 0x00de, 0x9398, 0x0002, 0x8108, 0x9182, 0x00ff,
-+ 0x0120, 0x9386, 0x002a, 0x0148, 0x08c0, 0x83ff, 0x1120, 0x7120,
-+ 0x810c, 0x0804, 0x2b68, 0x702f, 0x0001, 0x711e, 0x7020, 0x9300,
-+ 0x7022, 0x2061, 0x11ea, 0x6007, 0x0000, 0x6316, 0x7024, 0x6012,
-+ 0x600f, 0x0001, 0x642a, 0x652e, 0x6632, 0x6736, 0x2c10, 0x080c,
-+ 0x0f22, 0x7007, 0x0002, 0x701b, 0x427e, 0x0005, 0x702c, 0x9005,
-+ 0x1160, 0x711c, 0x7024, 0x20a0, 0x901e, 0x2061, 0x11ea, 0x6428,
-+ 0x652c, 0x6630, 0x6734, 0x0804, 0x4235, 0x7120, 0x810c, 0x0804,
-+ 0x2b68, 0x00f6, 0x2d78, 0x00e6, 0x2001, 0x1100, 0x2004, 0x9086,
-+ 0x0003, 0x2009, 0x0007, 0x1904, 0x4311, 0x2071, 0x1193, 0x7454,
-+ 0x84ff, 0x2009, 0x000e, 0x1904, 0x4311, 0x7c9c, 0x7d98, 0x7ea4,
-+ 0x7fa0, 0x080c, 0x0e9d, 0x2009, 0x0002, 0x0904, 0x4311, 0x2d00,
-+ 0x7056, 0x900e, 0x901e, 0x734e, 0x735a, 0x9d80, 0x0003, 0x7052,
-+ 0x20a0, 0x91e0, 0x1000, 0x2c64, 0x8cff, 0x01d8, 0x6004, 0x9084,
-+ 0x00ff, 0x9086, 0x0006, 0x0130, 0x6004, 0x9084, 0xff00, 0x9086,
-+ 0x0600, 0x1178, 0x00d6, 0x3468, 0x6014, 0x206a, 0x8d68, 0x6010,
-+ 0x8007, 0x9105, 0x8007, 0x206a, 0x8d68, 0x2da0, 0x00de, 0x9398,
-+ 0x0002, 0x8108, 0x9182, 0x00ff, 0x0120, 0x9386, 0x002a, 0x01b8,
-+ 0x08c0, 0x83ff, 0x1190, 0x714c, 0x810c, 0x7897, 0x4000, 0x799a,
-+ 0x7154, 0x81ff, 0x090c, 0x0d7e, 0x2168, 0x080c, 0x0ecf, 0x9006,
-+ 0x7056, 0x918d, 0x0001, 0x2008, 0x0420, 0x705b, 0x0001, 0x714a,
-+ 0x704c, 0x9300, 0x704e, 0x2061, 0x11fb, 0x6007, 0x0000, 0x6316,
-+ 0x7050, 0x6012, 0x600f, 0x0001, 0x642a, 0x652e, 0x6632, 0x6736,
-+ 0x603b, 0x431d, 0x2f00, 0x603e, 0x2c10, 0x080c, 0x0f22, 0x9006,
-+ 0x0040, 0x7897, 0x4005, 0x799a, 0x900e, 0x9085, 0x0001, 0x2001,
-+ 0x0030, 0x00ee, 0x2f68, 0x00fe, 0x0005, 0x00f6, 0x603c, 0x907d,
-+ 0x090c, 0x0d7e, 0x00e6, 0x2071, 0x1193, 0x6008, 0x908e, 0x0100,
-+ 0x0138, 0x787b, 0x0030, 0x7883, 0x0000, 0x7897, 0x4002, 0x00a8,
-+ 0x7058, 0x9005, 0x1148, 0x7148, 0x7050, 0x20a0, 0x901e, 0x6428,
-+ 0x652c, 0x6630, 0x6734, 0x0400, 0x787b, 0x0000, 0x7883, 0x0000,
-+ 0x7897, 0x4000, 0x714c, 0x810c, 0x799a, 0x7154, 0x81ff, 0x090c,
-+ 0x0d7e, 0x2168, 0x080c, 0x0ecf, 0x7057, 0x0000, 0x2f68, 0x0126,
-+ 0x2091, 0x8000, 0x080c, 0x5b76, 0x012e, 0x603b, 0x0000, 0x603f,
-+ 0x0000, 0x00ee, 0x00fe, 0x0005, 0x91e0, 0x1000, 0x2c64, 0x8cff,
-+ 0x01d8, 0x6004, 0x9084, 0x00ff, 0x9086, 0x0006, 0x0130, 0x6004,
-+ 0x9084, 0xff00, 0x9086, 0x0600, 0x1178, 0x00d6, 0x3468, 0x6014,
-+ 0x206a, 0x8d68, 0x6010, 0x8007, 0x9105, 0x8007, 0x206a, 0x8d68,
-+ 0x2da0, 0x00de, 0x9398, 0x0002, 0x8108, 0x9182, 0x00ff, 0x0120,
-+ 0x9386, 0x002a, 0x0520, 0x08c0, 0x83ff, 0x11f8, 0x714c, 0x810c,
-+ 0x799a, 0x7897, 0x4000, 0x7154, 0x81ff, 0x090c, 0x0d7e, 0x2168,
-+ 0x080c, 0x0ecf, 0x9006, 0x7056, 0x918d, 0x0001, 0x2008, 0x2f68,
-+ 0x0126, 0x2091, 0x8000, 0x080c, 0x5b76, 0x012e, 0x2061, 0x11fb,
-+ 0x603b, 0x0000, 0x603f, 0x0000, 0x0088, 0x705b, 0x0001, 0x714a,
-+ 0x704c, 0x9300, 0x704e, 0x2061, 0x11fb, 0x6316, 0x642a, 0x652e,
-+ 0x6632, 0x6736, 0x2c10, 0x080c, 0x0f22, 0x9006, 0x00ee, 0x00fe,
-+ 0x0005, 0x81ff, 0x1904, 0x2b98, 0x60d8, 0xd0ac, 0x1118, 0xd09c,
-+ 0x0904, 0x2b98, 0x080c, 0x3eb9, 0x0904, 0x2b98, 0x7984, 0x7a8c,
-+ 0x7b88, 0x7c9c, 0x7d98, 0x2039, 0x0001, 0x080c, 0x3f0c, 0x701b,
-+ 0x43d2, 0x0005, 0x00d6, 0x9de8, 0x0019, 0x6828, 0x90be, 0x7000,
-+ 0x0148, 0x90be, 0x7100, 0x0130, 0x90be, 0x7200, 0x0118, 0x00de,
-+ 0x0804, 0x2b9b, 0x6820, 0x6924, 0x080c, 0x1f63, 0x1510, 0x080c,
-+ 0x55b3, 0x11f8, 0x7122, 0x6612, 0x6516, 0x6e18, 0x00c6, 0x080c,
-+ 0x3eb9, 0x01b8, 0x080c, 0x3eb9, 0x01a0, 0x00ce, 0x00de, 0x6867,
-+ 0x0000, 0x6868, 0xc0fd, 0x686a, 0x6823, 0x0000, 0x6804, 0x2068,
-+ 0x080c, 0xaaa2, 0x0904, 0x2b98, 0x7007, 0x0003, 0x701b, 0x440c,
-+ 0x0005, 0x00de, 0x0804, 0x2b98, 0x7120, 0x080c, 0x2955, 0x6820,
-+ 0x9086, 0x8001, 0x0904, 0x2b98, 0x2d00, 0x701e, 0x6804, 0x9080,
-+ 0x0002, 0x0006, 0x20a9, 0x002a, 0x2098, 0x20a0, 0x080c, 0x504f,
-+ 0x000e, 0x9de8, 0x0019, 0x6a08, 0x6b0c, 0x6c10, 0x6d14, 0x2061,
-+ 0x11ea, 0x6007, 0x0000, 0x6e00, 0x6f28, 0x97c6, 0x7000, 0x1108,
-+ 0x0018, 0x97c6, 0x7100, 0x1150, 0x96c2, 0x0004, 0x0a04, 0x2b9b,
-+ 0x2009, 0x0004, 0x2039, 0x0001, 0x0804, 0x3f0f, 0x97c6, 0x7200,
-+ 0x1904, 0x2b9b, 0x96c2, 0x0054, 0x0a04, 0x2b9b, 0x600f, 0x0001,
-+ 0x6012, 0x6017, 0x002a, 0x622a, 0x632e, 0x6432, 0x6536, 0x2c10,
-+ 0x080c, 0x0f22, 0x7007, 0x0002, 0x701b, 0x4457, 0x0005, 0x701c,
-+ 0x2068, 0x6804, 0x9080, 0x0001, 0x2004, 0x9080, 0x0002, 0x0006,
-+ 0x20a9, 0x002a, 0x2098, 0x20a0, 0x080c, 0x504f, 0x000e, 0x2061,
-+ 0x11ea, 0x6228, 0x632c, 0x6430, 0x6534, 0x2039, 0x0001, 0x2009,
-+ 0x002a, 0x0804, 0x3f0f, 0x81ff, 0x1904, 0x2b98, 0x798c, 0x2001,
-+ 0x12a9, 0x2102, 0x080c, 0x3ece, 0x0904, 0x2b9b, 0x080c, 0x56ca,
-+ 0x0904, 0x2b98, 0x0126, 0x2091, 0x8000, 0x080c, 0x5782, 0x012e,
-+ 0x0804, 0x2b68, 0x00f6, 0x69a0, 0x2001, 0x12a9, 0x2102, 0x2d78,
-+ 0x080c, 0x3ede, 0x0170, 0x080c, 0x56ca, 0x2009, 0x0002, 0x0128,
-+ 0x080c, 0x5782, 0x1180, 0x2009, 0x0003, 0x7897, 0x4005, 0x799a,
-+ 0x0010, 0x7897, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030,
-+ 0x2f68, 0x00fe, 0x0005, 0x7897, 0x4000, 0x900e, 0x9085, 0x0001,
-+ 0x2001, 0x0000, 0x2f68, 0x00fe, 0x0005, 0x7884, 0xd08c, 0x1118,
-+ 0xd084, 0x0904, 0x39e5, 0x080c, 0x3ef0, 0x0904, 0x2b9b, 0x00c6,
-+ 0x080c, 0x3eb9, 0x00ce, 0x1120, 0x2009, 0x0002, 0x0804, 0x2b98,
-+ 0x6004, 0x9084, 0x00ff, 0x9086, 0x0006, 0x0128, 0x908e, 0x0004,
-+ 0x0110, 0x908e, 0x0005, 0x15b8, 0x7884, 0xd08c, 0x0120, 0x6000,
-+ 0xc08c, 0x6002, 0x0030, 0x2001, 0x1153, 0x2004, 0xd0b4, 0x0904,
-+ 0x3a24, 0x7884, 0x9084, 0xff00, 0x908e, 0x7e00, 0x0904, 0x3a24,
-+ 0x908e, 0x7f00, 0x0904, 0x3a24, 0x908e, 0x8000, 0x0904, 0x3a24,
-+ 0x6000, 0xd08c, 0x1904, 0x3a24, 0x6867, 0x0000, 0x6868, 0xc0fd,
-+ 0x686a, 0x080c, 0xaabe, 0x1120, 0x2009, 0x0003, 0x0804, 0x2b98,
-+ 0x7007, 0x0003, 0x701b, 0x4505, 0x0005, 0x080c, 0x3ef0, 0x0904,
-+ 0x2b9b, 0x0804, 0x3a24, 0x080c, 0x2982, 0x0108, 0x0005, 0x2009,
-+ 0x1133, 0x210c, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x2b98,
-+ 0x2001, 0x1100, 0x2004, 0x9086, 0x0003, 0x0120, 0x2009, 0x0007,
-+ 0x0804, 0x2b98, 0x080c, 0x58c6, 0x0120, 0x2009, 0x0008, 0x0804,
-+ 0x2b98, 0x609c, 0xd0a4, 0x1118, 0xd0ac, 0x1904, 0x3a24, 0x9006,
-+ 0x6866, 0x6832, 0x6868, 0xc0fd, 0x686a, 0x080c, 0xab41, 0x1120,
-+ 0x2009, 0x0003, 0x0804, 0x2b98, 0x7007, 0x0003, 0x701b, 0x4541,
-+ 0x0005, 0x6830, 0x9086, 0x0100, 0x1120, 0x2009, 0x0004, 0x0804,
-+ 0x47e3, 0x080c, 0x3ef0, 0x0904, 0x2b9b, 0x0804, 0x44d4, 0x81ff,
-+ 0x2009, 0x0001, 0x1904, 0x2b98, 0x6000, 0x9086, 0x0003, 0x2009,
-+ 0x0007, 0x1904, 0x2b98, 0x080c, 0x58c6, 0x2009, 0x0008, 0x1904,
-+ 0x2b98, 0x080c, 0x3ef0, 0x0904, 0x2b9b, 0x6004, 0x9084, 0x00ff,
-+ 0x9086, 0x0006, 0x2009, 0x0009, 0x1904, 0x2b98, 0x00c6, 0x080c,
-+ 0x3eb9, 0x00ce, 0x2009, 0x0002, 0x0904, 0x2b98, 0x9006, 0x6866,
-+ 0x6832, 0x6868, 0xc0fd, 0x686a, 0x7988, 0x9194, 0xff00, 0x918c,
-+ 0x00ff, 0x9006, 0x82ff, 0x1128, 0xc0ed, 0x6952, 0x798c, 0x6956,
-+ 0x0038, 0x928e, 0x0100, 0x1904, 0x2b9b, 0xc0e5, 0x6952, 0x6956,
-+ 0x683e, 0x080c, 0xad71, 0x2009, 0x0003, 0x0904, 0x2b98, 0x7007,
-+ 0x0003, 0x701b, 0x459c, 0x0005, 0x6830, 0x9086, 0x0100, 0x2009,
-+ 0x0004, 0x0904, 0x2b98, 0x0804, 0x2b68, 0x81ff, 0x2009, 0x0001,
-+ 0x1904, 0x2b98, 0x6000, 0x9086, 0x0003, 0x2009, 0x0007, 0x1904,
-+ 0x2b98, 0x080c, 0x3ef0, 0x0904, 0x2b9b, 0x6004, 0x9084, 0x00ff,
-+ 0x9086, 0x0006, 0x2009, 0x0009, 0x1904, 0x2b98, 0x00c6, 0x080c,
-+ 0x3eb9, 0x00ce, 0x2009, 0x0002, 0x0904, 0x2b98, 0x9d80, 0x001b,
-+ 0x2039, 0x0001, 0x2009, 0x0008, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98,
-+ 0x080c, 0x3f0c, 0x701b, 0x45d5, 0x0005, 0x00d6, 0x9de8, 0x001b,
-+ 0x6800, 0x9086, 0x0500, 0x1138, 0x6804, 0x9005, 0x1120, 0x6808,
-+ 0x9084, 0xff00, 0x0118, 0x00de, 0x1904, 0x2b9b, 0x00de, 0x6866,
-+ 0x6832, 0x6868, 0xc0fd, 0x686a, 0x00c6, 0x080c, 0x3ef0, 0x1118,
-+ 0x00ce, 0x0804, 0x2b9b, 0x2009, 0x0043, 0x080c, 0xadda, 0x2009,
-+ 0x0003, 0x00ce, 0x0904, 0x2b98, 0x7007, 0x0003, 0x701b, 0x4601,
-+ 0x0005, 0x6830, 0x9086, 0x0100, 0x2009, 0x0004, 0x0904, 0x2b98,
-+ 0x0804, 0x2b68, 0x00f6, 0x00c6, 0x2d78, 0x2061, 0x1100, 0x6000,
-+ 0x9086, 0x0003, 0x2009, 0x0007, 0x1528, 0x080c, 0x3eee, 0x0530,
-+ 0x6004, 0x9084, 0x00ff, 0x9086, 0x0006, 0x2009, 0x0009, 0x11d0,
-+ 0x9fe8, 0x0031, 0x6800, 0x9086, 0x0500, 0x11c0, 0x6804, 0x9005,
-+ 0x11a8, 0x6808, 0x9084, 0xff00, 0x1188, 0x080c, 0x3eee, 0x1108,
-+ 0x0068, 0x2f68, 0x2009, 0x004b, 0x080c, 0xadda, 0x2009, 0x0003,
-+ 0x0108, 0x0078, 0x7897, 0x4005, 0x799a, 0x0010, 0x7897, 0x4006,
-+ 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x00ce, 0x2f68, 0x00fe,
-+ 0x0005, 0x9006, 0x0cd0, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804,
-+ 0x2b98, 0x6000, 0x9086, 0x0003, 0x0120, 0x2009, 0x0007, 0x0804,
-+ 0x2b98, 0x7e84, 0x860f, 0x918c, 0x00ff, 0x96b4, 0x00ff, 0x080c,
-+ 0x5608, 0x1904, 0x2b9b, 0x9186, 0x007f, 0x0150, 0x6004, 0x9084,
-+ 0x00ff, 0x9086, 0x0006, 0x0120, 0x2009, 0x0009, 0x0804, 0x2b98,
-+ 0x00c6, 0x080c, 0x3eb9, 0x00ce, 0x1120, 0x2009, 0x0002, 0x0804,
-+ 0x2b98, 0x6867, 0x0000, 0x6868, 0xc0fd, 0x686a, 0x2001, 0x0100,
-+ 0x8007, 0x680a, 0x080c, 0xaad9, 0x1120, 0x2009, 0x0003, 0x0804,
-+ 0x2b98, 0x7007, 0x0003, 0x701b, 0x468e, 0x0005, 0x6808, 0x8007,
-+ 0x9086, 0x0100, 0x1120, 0x2009, 0x0004, 0x0804, 0x2b98, 0x68e0,
-+ 0x6866, 0x6810, 0x8007, 0x9084, 0x00ff, 0x800c, 0x6814, 0x8007,
-+ 0x9084, 0x00ff, 0x8004, 0x9080, 0x0002, 0x9108, 0x9d80, 0x0004,
-+ 0x2039, 0x0001, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0804, 0x3f0f,
-+ 0x080c, 0x3eb9, 0x1120, 0x2009, 0x0002, 0x0804, 0x2b98, 0x7984,
-+ 0x9194, 0xff00, 0x918c, 0x00ff, 0x8217, 0x82ff, 0x0110, 0x0804,
-+ 0x2b9b, 0x2009, 0x001a, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x2039,
-+ 0x0001, 0x080c, 0x3f0c, 0x701b, 0x46ce, 0x0005, 0x2001, 0x112c,
-+ 0x2003, 0x0001, 0x9d80, 0x0019, 0x2098, 0x20e1, 0x0001, 0x20a9,
-+ 0x001a, 0x20a1, 0x12ea, 0x20e9, 0x0001, 0x4003, 0x0804, 0x2b68,
-+ 0x080c, 0x3eb9, 0x1120, 0x2009, 0x0002, 0x0804, 0x2b98, 0x7984,
-+ 0x9194, 0xff00, 0x918c, 0x00ff, 0x8217, 0x82ff, 0x0110, 0x0804,
-+ 0x2b9b, 0x2099, 0x12ea, 0x20a0, 0x20e9, 0x0001, 0x20a9, 0x001a,
-+ 0x20e1, 0x0001, 0x4003, 0x2009, 0x001a, 0x7a8c, 0x7b88, 0x7c9c,
-+ 0x7d98, 0x2039, 0x0001, 0x0804, 0x3f0f, 0x7884, 0x908a, 0x1000,
-+ 0x1a04, 0x2b9b, 0x0126, 0x2091, 0x8000, 0x8003, 0x800b, 0x810b,
-+ 0x9108, 0x00c6, 0x2061, 0x1317, 0x6142, 0x00ce, 0x012e, 0x0804,
-+ 0x2b68, 0x00c6, 0x080c, 0x62e4, 0x1180, 0x2001, 0x12a8, 0x2003,
-+ 0x0001, 0x2001, 0x1100, 0x2003, 0x0001, 0x9085, 0x0001, 0x080c,
-+ 0x6331, 0x080c, 0x621a, 0x080c, 0x0d7e, 0x2061, 0x1100, 0x6030,
-+ 0xc09d, 0x6032, 0x080c, 0x4faa, 0x00ce, 0x0005, 0x00c6, 0x2001,
-+ 0x1100, 0x2004, 0x908e, 0x0000, 0x0904, 0x2b98, 0x7884, 0x9005,
-+ 0x0188, 0x7888, 0x2061, 0x12d6, 0x2c0c, 0x2062, 0x080c, 0x2328,
-+ 0x01a0, 0x080c, 0x2330, 0x0188, 0x080c, 0x2338, 0x0170, 0x2162,
-+ 0x0804, 0x2b9b, 0x2061, 0x0100, 0x6038, 0x9086, 0x0007, 0x1118,
-+ 0x2009, 0x0001, 0x0010, 0x2009, 0x0000, 0x7884, 0x9086, 0x0002,
-+ 0x1548, 0x2061, 0x0100, 0x6028, 0xc09c, 0x602a, 0x0026, 0x2011,
-+ 0x0003, 0x080c, 0x88e2, 0x2011, 0x0002, 0x080c, 0x88ec, 0x002e,
-+ 0x080c, 0x87a2, 0x0036, 0x901e, 0x080c, 0x8847, 0x003e, 0x60e3,
-+ 0x0000, 0x080c, 0xc44e, 0x080c, 0xc469, 0x9085, 0x0001, 0x080c,
-+ 0x6331, 0x9006, 0x080c, 0x2401, 0x2001, 0x1100, 0x2003, 0x0004,
-+ 0x6027, 0x0008, 0x00ce, 0x0804, 0x2b68, 0x81ff, 0x0120, 0x2009,
-+ 0x0001, 0x0804, 0x2b98, 0x6000, 0x9086, 0x0003, 0x0120, 0x2009,
-+ 0x0007, 0x0804, 0x2b98, 0x7e84, 0x860f, 0x918c, 0x00ff, 0x96b4,
-+ 0x00ff, 0x080c, 0x5608, 0x1904, 0x2b9b, 0x9186, 0x007f, 0x0150,
-+ 0x6004, 0x9084, 0x00ff, 0x9086, 0x0006, 0x0120, 0x2009, 0x0009,
-+ 0x0804, 0x2b98, 0x00c6, 0x080c, 0x3eb9, 0x00ce, 0x1120, 0x2009,
-+ 0x0002, 0x0804, 0x2b98, 0x6867, 0x0000, 0x6868, 0xc0fd, 0x686a,
-+ 0x080c, 0xaaf5, 0x1120, 0x2009, 0x0003, 0x0804, 0x2b98, 0x7007,
-+ 0x0003, 0x701b, 0x47cc, 0x0005, 0x6830, 0x9086, 0x0100, 0x1120,
-+ 0x2009, 0x0004, 0x0804, 0x2b98, 0x68e0, 0x6866, 0x6834, 0x8007,
-+ 0x800c, 0x9d80, 0x000c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x2039,
-+ 0x0001, 0x0804, 0x3f0f, 0x6898, 0x9086, 0x000d, 0x1904, 0x2b98,
-+ 0x2021, 0x4005, 0x0126, 0x2091, 0x8000, 0x0e04, 0x47f0, 0x0010,
-+ 0x012e, 0x0cc0, 0x7c36, 0x9486, 0x4000, 0x0118, 0x7833, 0x0011,
-+ 0x0010, 0x7833, 0x0010, 0x7883, 0x4005, 0x6998, 0x7986, 0x69a4,
-+ 0x799a, 0x69a8, 0x799e, 0x080c, 0x3eff, 0x2091, 0x4080, 0x2001,
-+ 0x0089, 0x2004, 0xd084, 0x190c, 0x0fcd, 0x7007, 0x0001, 0x2091,
-+ 0x5000, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x00c6, 0x2061,
-+ 0x1317, 0x7984, 0x6152, 0x614e, 0x6057, 0x0000, 0x604b, 0x0009,
-+ 0x7898, 0x606a, 0x789c, 0x6066, 0x7888, 0x6062, 0x788c, 0x605e,
-+ 0x2061, 0x12aa, 0x2001, 0x132c, 0x6012, 0x600f, 0x0001, 0x6017,
-+ 0x0001, 0x601b, 0x0002, 0x6007, 0x0000, 0x603b, 0x0000, 0x00ce,
-+ 0x012e, 0x0804, 0x2b68, 0x0126, 0x0156, 0x0136, 0x0146, 0x01c6,
-+ 0x01d6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2061, 0x0100, 0x2069,
-+ 0x0200, 0x2071, 0x1100, 0x6044, 0xd0a4, 0x11e8, 0xd084, 0x0118,
-+ 0x080c, 0x49ce, 0x0068, 0xd08c, 0x0118, 0x080c, 0x48e1, 0x0040,
-+ 0xd094, 0x0118, 0x080c, 0x48b4, 0x0018, 0xd09c, 0x0108, 0x0099,
-+ 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x01de, 0x01ce, 0x014e, 0x013e,
-+ 0x015e, 0x012e, 0x0005, 0x0016, 0x6128, 0xd19c, 0x1110, 0xc19d,
-+ 0x612a, 0x001e, 0x0c68, 0x624c, 0x9286, 0xf0f0, 0x1150, 0x6048,
-+ 0x9086, 0xf0f0, 0x0130, 0x624a, 0x6043, 0x0090, 0x6043, 0x0010,
-+ 0x0490, 0x9294, 0xff00, 0x9296, 0xf700, 0x0178, 0x7134, 0xd1a4,
-+ 0x1160, 0x6240, 0x9295, 0x0100, 0x6242, 0x9294, 0x0010, 0x0128,
-+ 0x2009, 0x00f7, 0x080c, 0x507b, 0x00f0, 0x6040, 0x9084, 0x0010,
-+ 0x9085, 0x0140, 0x6042, 0x6043, 0x0000, 0x707f, 0x0000, 0x709b,
-+ 0x0001, 0x70c3, 0x0000, 0x70db, 0x0000, 0x2009, 0x1580, 0x200b,
-+ 0x0000, 0x708f, 0x0000, 0x7083, 0x000f, 0x2009, 0x000f, 0x2011,
-+ 0x4f50, 0x080c, 0x7283, 0x0005, 0x2001, 0x1174, 0x2004, 0xd08c,
-+ 0x0110, 0x7057, 0xffff, 0x7080, 0x9005, 0x1510, 0x2011, 0x4f50,
-+ 0x080c, 0x71fa, 0x6040, 0x9094, 0x0010, 0x9285, 0x0020, 0x6042,
-+ 0x20a9, 0x00c8, 0x6044, 0xd08c, 0x1168, 0x1f04, 0x48ca, 0x6242,
-+ 0x7093, 0x0000, 0x6040, 0x9094, 0x0010, 0x9285, 0x0080, 0x6042,
-+ 0x6242, 0x0030, 0x6242, 0x7093, 0x0000, 0x7087, 0x0000, 0x0000,
-+ 0x0005, 0x7084, 0x908a, 0x0003, 0x1a0c, 0x0d7e, 0x000b, 0x0005,
-+ 0x48eb, 0x4932, 0x49cd, 0x00f6, 0x7087, 0x0001, 0x6803, 0x00fc,
-+ 0x20a9, 0x0004, 0x6800, 0x9084, 0x00fc, 0x0120, 0x1f04, 0x48f2,
-+ 0x080c, 0x0d7e, 0x68a0, 0x68a2, 0x689c, 0x689e, 0x6898, 0x689a,
-+ 0xa001, 0x6803, 0x1600, 0x6837, 0x0020, 0x080c, 0x50d5, 0x2079,
-+ 0x1500, 0x7833, 0x1101, 0x7837, 0x0000, 0x20e1, 0x0001, 0x2099,
-+ 0x1105, 0x20e9, 0x0001, 0x20a1, 0x150e, 0x20a9, 0x0004, 0x4003,
-+ 0x080c, 0x8dc3, 0x20e1, 0x0001, 0x2099, 0x1500, 0x20e9, 0x0000,
-+ 0x20a1, 0x0240, 0x20a9, 0x0014, 0x4003, 0x60c3, 0x000c, 0x600f,
-+ 0x0000, 0x080c, 0x4f86, 0x00fe, 0x9006, 0x708a, 0x6043, 0x0008,
-+ 0x6042, 0x0005, 0x00f6, 0x7088, 0x708b, 0x0000, 0x9025, 0x0904,
-+ 0x49aa, 0x6020, 0xd0b4, 0x1904, 0x49a8, 0x7198, 0x81ff, 0x0904,
-+ 0x4996, 0x9486, 0x000c, 0x1904, 0x49a3, 0x9480, 0x0018, 0x8004,
-+ 0x20a8, 0x080c, 0x50ce, 0x2011, 0x0260, 0x2019, 0x1500, 0x220c,
-+ 0x2304, 0x9106, 0x11e8, 0x8210, 0x8318, 0x1f04, 0x494f, 0x6043,
-+ 0x0004, 0x2061, 0x0140, 0x605b, 0xbc94, 0x605f, 0xf0f0, 0x2061,
-+ 0x0100, 0x6043, 0x0006, 0x7087, 0x0002, 0x7093, 0x0002, 0x2009,
-+ 0x07d0, 0x2011, 0x4f57, 0x080c, 0x7283, 0x080c, 0x50d5, 0x04c0,
-+ 0x080c, 0x50ce, 0x2079, 0x0260, 0x7930, 0x918e, 0x1101, 0x1558,
-+ 0x7834, 0x9005, 0x1540, 0x7900, 0x918c, 0x00ff, 0x1118, 0x7804,
-+ 0x9005, 0x0190, 0x080c, 0x50ce, 0x2011, 0x026e, 0x2019, 0x1105,
-+ 0x20a9, 0x0004, 0x220c, 0x2304, 0x9102, 0x0230, 0x11a0, 0x8210,
-+ 0x8318, 0x1f04, 0x498a, 0x0078, 0x709b, 0x0000, 0x080c, 0x50ce,
-+ 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9, 0x0001, 0x20a1, 0x1500,
-+ 0x20a9, 0x0014, 0x4003, 0x6043, 0x0008, 0x6043, 0x0000, 0x0010,
-+ 0x00fe, 0x0005, 0x6040, 0x9085, 0x0100, 0x6042, 0x6020, 0xd0b4,
-+ 0x1db8, 0x080c, 0x8dc3, 0x20e1, 0x0001, 0x2099, 0x1500, 0x20e9,
-+ 0x0000, 0x20a1, 0x0240, 0x20a9, 0x0014, 0x4003, 0x60c3, 0x000c,
-+ 0x2011, 0x130e, 0x2013, 0x0000, 0x708b, 0x0000, 0x60a3, 0x0056,
-+ 0x60a7, 0x9575, 0x080c, 0x8599, 0x08d8, 0x0005, 0x7090, 0x908a,
-+ 0x001d, 0x1a0c, 0x0d7e, 0x000b, 0x0005, 0x49ff, 0x4a12, 0x4a3b,
-+ 0x4a5b, 0x4a81, 0x4ab0, 0x4ad6, 0x4b0e, 0x4b34, 0x4b62, 0x4b9b,
-+ 0x4bd3, 0x4bf1, 0x4c1c, 0x4c3e, 0x4c55, 0x4c5d, 0x4c91, 0x4cb7,
-+ 0x4ce6, 0x4d0c, 0x4d44, 0x4d7e, 0x4db3, 0x4dd1, 0x4e2a, 0x4e4c,
-+ 0x4e76, 0x4e76, 0x00c6, 0x2061, 0x1100, 0x6003, 0x0007, 0x2061,
-+ 0x0100, 0x6004, 0x9084, 0xfff9, 0x6006, 0x00ce, 0x0005, 0x2061,
-+ 0x0140, 0x605b, 0xbc94, 0x605f, 0xf0f0, 0x2061, 0x0100, 0x6043,
-+ 0x0002, 0x7093, 0x0001, 0x2009, 0x07d0, 0x2011, 0x4f57, 0x080c,
-+ 0x7283, 0x0005, 0x00f6, 0x7088, 0x9086, 0x0014, 0x1510, 0x6042,
-+ 0x6020, 0xd0b4, 0x11f0, 0x080c, 0x50ce, 0x2079, 0x0260, 0x7a30,
-+ 0x9296, 0x1102, 0x11a0, 0x7834, 0x9005, 0x1188, 0x7a38, 0xd2fc,
-+ 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x2011, 0x4f57,
-+ 0x080c, 0x71fa, 0x7093, 0x0010, 0x080c, 0x4c5d, 0x0010, 0x708b,
-+ 0x0000, 0x00fe, 0x0005, 0x00f6, 0x7093, 0x0003, 0x6043, 0x0004,
-+ 0x2011, 0x4f57, 0x080c, 0x71fa, 0x080c, 0x505d, 0x2079, 0x0240,
-+ 0x7833, 0x1102, 0x7837, 0x0000, 0x20a9, 0x0008, 0x9f88, 0x000e,
-+ 0x200b, 0x0000, 0x8108, 0x1f04, 0x4a50, 0x60c3, 0x0014, 0x080c,
-+ 0x4f86, 0x00fe, 0x0005, 0x00f6, 0x7088, 0x9005, 0x0500, 0x2011,
-+ 0x4f57, 0x080c, 0x71fa, 0x9086, 0x0014, 0x11b8, 0x080c, 0x50ce,
-+ 0x2079, 0x0260, 0x7a30, 0x9296, 0x1102, 0x1178, 0x7834, 0x9005,
-+ 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3,
-+ 0x0001, 0x7093, 0x0004, 0x0029, 0x0010, 0x080c, 0x50aa, 0x00fe,
-+ 0x0005, 0x00f6, 0x7093, 0x0005, 0x080c, 0x505d, 0x2079, 0x0240,
-+ 0x7833, 0x1103, 0x7837, 0x0000, 0x080c, 0x50ce, 0x080c, 0x50b1,
-+ 0x1170, 0x707c, 0x9005, 0x1158, 0x7154, 0x9186, 0xffff, 0x0138,
-+ 0x2011, 0x0008, 0x080c, 0x4f04, 0x0168, 0x080c, 0x5092, 0x20a9,
-+ 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1,
-+ 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x4f86, 0x00fe, 0x0005,
-+ 0x00f6, 0x7088, 0x9005, 0x0500, 0x2011, 0x4f57, 0x080c, 0x71fa,
-+ 0x9086, 0x0014, 0x11b8, 0x080c, 0x50ce, 0x2079, 0x0260, 0x7a30,
-+ 0x9296, 0x1103, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc,
-+ 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x7093, 0x0006,
-+ 0x0029, 0x0010, 0x080c, 0x50aa, 0x00fe, 0x0005, 0x00f6, 0x7093,
-+ 0x0007, 0x080c, 0x505d, 0x2079, 0x0240, 0x7833, 0x1104, 0x7837,
-+ 0x0000, 0x080c, 0x50ce, 0x080c, 0x50b1, 0x11b8, 0x707c, 0x9005,
-+ 0x11a0, 0x715c, 0x9186, 0xffff, 0x0180, 0x9180, 0x298c, 0x200d,
-+ 0x918c, 0xff00, 0x810f, 0x2011, 0x0008, 0x080c, 0x4f04, 0x0180,
-+ 0x080c, 0x41fc, 0x0110, 0x080c, 0x1fad, 0x20a9, 0x0008, 0x20e1,
-+ 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003,
-+ 0x60c3, 0x0014, 0x080c, 0x4f86, 0x00fe, 0x0005, 0x00f6, 0x7088,
-+ 0x9005, 0x0500, 0x2011, 0x4f57, 0x080c, 0x71fa, 0x9086, 0x0014,
-+ 0x11b8, 0x080c, 0x50ce, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1104,
-+ 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c0,
-+ 0x9005, 0x1110, 0x70c3, 0x0001, 0x7093, 0x0008, 0x0029, 0x0010,
-+ 0x080c, 0x50aa, 0x00fe, 0x0005, 0x00f6, 0x7093, 0x0009, 0x080c,
-+ 0x505d, 0x2079, 0x0240, 0x7833, 0x1105, 0x7837, 0x0100, 0x080c,
-+ 0x50b1, 0x1150, 0x707c, 0x9005, 0x1138, 0x080c, 0x4e77, 0x1188,
-+ 0x9085, 0x0001, 0x080c, 0x1fad, 0x20a9, 0x0008, 0x080c, 0x50ce,
-+ 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e,
-+ 0x4003, 0x60c3, 0x0014, 0x080c, 0x4f86, 0x0010, 0x080c, 0x49f2,
-+ 0x00fe, 0x0005, 0x00f6, 0x7088, 0x9005, 0x0598, 0x2011, 0x4f57,
-+ 0x080c, 0x71fa, 0x9086, 0x0014, 0x1550, 0x080c, 0x50ce, 0x2079,
-+ 0x0260, 0x7a30, 0x9296, 0x1105, 0x1510, 0x7834, 0x2011, 0x0100,
-+ 0x921e, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110,
-+ 0x70c3, 0x0001, 0x7093, 0x000a, 0x00b1, 0x0098, 0x9005, 0x1178,
-+ 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001,
-+ 0x708f, 0x0000, 0x7093, 0x000e, 0x080c, 0x4c3e, 0x0010, 0x080c,
-+ 0x50aa, 0x00fe, 0x0005, 0x00f6, 0x7093, 0x000b, 0x2011, 0x150e,
-+ 0x20e9, 0x0001, 0x22a0, 0x20a9, 0x0040, 0x2019, 0xffff, 0x4304,
-+ 0x080c, 0x505d, 0x2079, 0x0240, 0x7833, 0x1106, 0x7837, 0x0000,
-+ 0x080c, 0x50b1, 0x0118, 0x2013, 0x0000, 0x0020, 0x7058, 0x9085,
-+ 0x0100, 0x2012, 0x20a9, 0x0040, 0x2009, 0x024e, 0x2011, 0x150e,
-+ 0x220e, 0x8210, 0x8108, 0x9186, 0x0260, 0x1128, 0x6810, 0x8000,
-+ 0x6812, 0x2009, 0x0240, 0x1f04, 0x4bc0, 0x60c3, 0x0084, 0x080c,
-+ 0x4f86, 0x00fe, 0x0005, 0x00f6, 0x7088, 0x9005, 0x01c0, 0x2011,
-+ 0x4f57, 0x080c, 0x71fa, 0x9086, 0x0084, 0x1178, 0x080c, 0x50ce,
-+ 0x2079, 0x0260, 0x7a30, 0x9296, 0x1106, 0x1138, 0x7834, 0x9005,
-+ 0x1120, 0x7093, 0x000c, 0x0029, 0x0010, 0x080c, 0x50aa, 0x00fe,
-+ 0x0005, 0x00f6, 0x7093, 0x000d, 0x080c, 0x505d, 0x2079, 0x0240,
-+ 0x7833, 0x1107, 0x7837, 0x0000, 0x080c, 0x50ce, 0x20a9, 0x0040,
-+ 0x2011, 0x026e, 0x2009, 0x024e, 0x220e, 0x8210, 0x8108, 0x9186,
-+ 0x0260, 0x1150, 0x6810, 0x8000, 0x6812, 0x2009, 0x0240, 0x6814,
-+ 0x8000, 0x6816, 0x2011, 0x0260, 0x1f04, 0x4c04, 0x60c3, 0x0084,
-+ 0x080c, 0x4f86, 0x00fe, 0x0005, 0x00f6, 0x7088, 0x9005, 0x01e0,
-+ 0x2011, 0x4f57, 0x080c, 0x71fa, 0x9086, 0x0084, 0x1198, 0x080c,
-+ 0x50ce, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1107, 0x1158, 0x7834,
-+ 0x9005, 0x1140, 0x708f, 0x0001, 0x080c, 0x502f, 0x7093, 0x000e,
-+ 0x0029, 0x0010, 0x080c, 0x50aa, 0x00fe, 0x0005, 0x7093, 0x000f,
-+ 0x708b, 0x0000, 0x2061, 0x0140, 0x605b, 0xbc85, 0x605f, 0xb5b5,
-+ 0x2061, 0x0100, 0x6043, 0x0005, 0x6043, 0x0004, 0x2009, 0x07d0,
-+ 0x2011, 0x4f57, 0x080c, 0x71ee, 0x0005, 0x7088, 0x9005, 0x0120,
-+ 0x2011, 0x4f57, 0x080c, 0x71fa, 0x0005, 0x7093, 0x0011, 0x080c,
-+ 0x8dc3, 0x080c, 0x50ce, 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9,
-+ 0x0000, 0x20a1, 0x0240, 0x7488, 0x9480, 0x0018, 0x9080, 0x0007,
-+ 0x9084, 0x03f8, 0x8004, 0x20a8, 0x4003, 0x080c, 0x50b1, 0x11a0,
-+ 0x7174, 0x81ff, 0x0188, 0x900e, 0x7078, 0x9084, 0x00ff, 0x0160,
-+ 0x080c, 0x1f63, 0x9186, 0x007e, 0x0138, 0x9186, 0x0080, 0x0120,
-+ 0x2011, 0x0008, 0x080c, 0x4f04, 0x60c3, 0x0014, 0x080c, 0x4f86,
-+ 0x0005, 0x00f6, 0x7088, 0x9005, 0x0500, 0x2011, 0x4f57, 0x080c,
-+ 0x71fa, 0x9086, 0x0014, 0x11b8, 0x080c, 0x50ce, 0x2079, 0x0260,
-+ 0x7a30, 0x9296, 0x1103, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38,
-+ 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x7093,
-+ 0x0012, 0x0029, 0x0010, 0x708b, 0x0000, 0x00fe, 0x0005, 0x00f6,
-+ 0x7093, 0x0013, 0x080c, 0x506b, 0x2079, 0x0240, 0x7833, 0x1103,
-+ 0x7837, 0x0000, 0x080c, 0x50ce, 0x080c, 0x50b1, 0x1170, 0x707c,
-+ 0x9005, 0x1158, 0x7154, 0x9186, 0xffff, 0x0138, 0x2011, 0x0008,
-+ 0x080c, 0x4f04, 0x0168, 0x080c, 0x5092, 0x20a9, 0x0008, 0x20e1,
-+ 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003,
-+ 0x60c3, 0x0014, 0x080c, 0x4f86, 0x00fe, 0x0005, 0x00f6, 0x7088,
-+ 0x9005, 0x0500, 0x2011, 0x4f57, 0x080c, 0x71fa, 0x9086, 0x0014,
-+ 0x11b8, 0x080c, 0x50ce, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1104,
-+ 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c0,
-+ 0x9005, 0x1110, 0x70c3, 0x0001, 0x7093, 0x0014, 0x0029, 0x0010,
-+ 0x708b, 0x0000, 0x00fe, 0x0005, 0x00f6, 0x7093, 0x0015, 0x080c,
-+ 0x506b, 0x2079, 0x0240, 0x7833, 0x1104, 0x7837, 0x0000, 0x080c,
-+ 0x50ce, 0x080c, 0x50b1, 0x11b8, 0x707c, 0x9005, 0x11a0, 0x715c,
-+ 0x9186, 0xffff, 0x0180, 0x9180, 0x298c, 0x200d, 0x918c, 0xff00,
-+ 0x810f, 0x2011, 0x0008, 0x080c, 0x4f04, 0x0180, 0x080c, 0x41fc,
-+ 0x0110, 0x080c, 0x1fad, 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099,
-+ 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014,
-+ 0x080c, 0x4f86, 0x00fe, 0x0005, 0x00f6, 0x7088, 0x9005, 0x05a0,
-+ 0x2011, 0x4f57, 0x080c, 0x71fa, 0x9086, 0x0014, 0x1558, 0x080c,
-+ 0x50ce, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1105, 0x1518, 0x7834,
-+ 0x2011, 0x0100, 0x921e, 0x1148, 0x7a38, 0xd2fc, 0x0128, 0x70c0,
-+ 0x9005, 0x1110, 0x70c3, 0x0001, 0x0060, 0x9005, 0x1198, 0x7a38,
-+ 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x708f,
-+ 0x0000, 0x7a38, 0xd2f4, 0x0110, 0x70db, 0x0008, 0x7093, 0x0016,
-+ 0x0029, 0x0010, 0x708b, 0x0000, 0x00fe, 0x0005, 0x080c, 0x8dc3,
-+ 0x080c, 0x50ce, 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9, 0x0000,
-+ 0x20a1, 0x0240, 0x20a9, 0x000e, 0x4003, 0x2011, 0x026e, 0x7093,
-+ 0x0017, 0x080c, 0x50b1, 0x1150, 0x707c, 0x9005, 0x1138, 0x080c,
-+ 0x4e77, 0x1188, 0x9085, 0x0001, 0x080c, 0x1fad, 0x20a9, 0x0008,
-+ 0x080c, 0x50ce, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000,
-+ 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x4f86, 0x0010,
-+ 0x080c, 0x49f2, 0x0005, 0x00f6, 0x7088, 0x9005, 0x01c0, 0x2011,
-+ 0x4f57, 0x080c, 0x71fa, 0x9086, 0x0084, 0x1178, 0x080c, 0x50ce,
-+ 0x2079, 0x0260, 0x7a30, 0x9296, 0x1106, 0x1138, 0x7834, 0x9005,
-+ 0x1120, 0x7093, 0x0018, 0x0029, 0x0010, 0x708b, 0x0000, 0x00fe,
-+ 0x0005, 0x00f6, 0x7093, 0x0019, 0x080c, 0x506b, 0x2079, 0x0240,
-+ 0x7833, 0x1106, 0x7837, 0x0000, 0x080c, 0x50ce, 0x2009, 0x026e,
-+ 0x2039, 0x150e, 0x20a9, 0x0040, 0x213e, 0x8738, 0x8108, 0x9186,
-+ 0x0280, 0x1128, 0x6814, 0x8000, 0x6816, 0x2009, 0x0260, 0x1f04,
-+ 0x4de4, 0x2039, 0x150e, 0x080c, 0x50b1, 0x11e8, 0x2728, 0x2514,
-+ 0x8207, 0x9084, 0x00ff, 0x8000, 0x2018, 0x9294, 0x00ff, 0x8007,
-+ 0x9205, 0x202a, 0x7058, 0x2310, 0x8214, 0x92a0, 0x150e, 0x2414,
-+ 0x938c, 0x0001, 0x0118, 0x9294, 0xff00, 0x0018, 0x9294, 0x00ff,
-+ 0x8007, 0x9215, 0x2222, 0x20a9, 0x0040, 0x2009, 0x024e, 0x270e,
-+ 0x8738, 0x8108, 0x9186, 0x0260, 0x1128, 0x6810, 0x8000, 0x6812,
-+ 0x2009, 0x0240, 0x1f04, 0x4e17, 0x60c3, 0x0084, 0x080c, 0x4f86,
-+ 0x00fe, 0x0005, 0x00f6, 0x7088, 0x9005, 0x01e0, 0x2011, 0x4f57,
-+ 0x080c, 0x71fa, 0x9086, 0x0084, 0x1198, 0x080c, 0x50ce, 0x2079,
-+ 0x0260, 0x7a30, 0x9296, 0x1107, 0x1158, 0x7834, 0x9005, 0x1140,
-+ 0x708f, 0x0001, 0x080c, 0x502f, 0x7093, 0x001a, 0x0029, 0x0010,
-+ 0x708b, 0x0000, 0x00fe, 0x0005, 0x7093, 0x001b, 0x080c, 0x8dc3,
-+ 0x080c, 0x50ce, 0x2011, 0x0260, 0x2009, 0x0240, 0x7488, 0x9480,
-+ 0x0018, 0x9080, 0x0007, 0x9084, 0x03f8, 0x8004, 0x20a8, 0x220e,
-+ 0x8210, 0x8108, 0x9186, 0x0260, 0x1150, 0x6810, 0x8000, 0x6812,
-+ 0x2009, 0x0240, 0x6814, 0x8000, 0x6816, 0x2011, 0x0260, 0x1f04,
-+ 0x4e5f, 0x60c3, 0x0084, 0x080c, 0x4f86, 0x0005, 0x0005, 0x0086,
-+ 0x0096, 0x2029, 0x1153, 0x252c, 0x20a9, 0x0008, 0x2041, 0x150e,
-+ 0x20e9, 0x0001, 0x28a0, 0x080c, 0x50ce, 0x20e1, 0x0000, 0x2099,
-+ 0x026e, 0x4003, 0x20a9, 0x0008, 0x2011, 0x0007, 0xd5d4, 0x0108,
-+ 0x9016, 0x2800, 0x9200, 0x200c, 0x91a6, 0xffff, 0x1148, 0xd5d4,
-+ 0x0110, 0x8210, 0x0008, 0x8211, 0x1f04, 0x4e91, 0x0804, 0x4f00,
-+ 0x82ff, 0x1160, 0xd5d4, 0x0120, 0x91a6, 0x3fff, 0x0d90, 0x0020,
-+ 0x91a6, 0x3fff, 0x0904, 0x4f00, 0x918d, 0xc000, 0x20a9, 0x0010,
-+ 0x2019, 0x0001, 0xd5d4, 0x0110, 0x2019, 0x0010, 0x2120, 0xd5d4,
-+ 0x0110, 0x8423, 0x0008, 0x8424, 0x1240, 0xd5d4, 0x0110, 0x8319,
-+ 0x0008, 0x8318, 0x1f04, 0x4eb7, 0x04d8, 0x23a8, 0x2021, 0x0001,
-+ 0x8426, 0x8425, 0x1f04, 0x4ec9, 0x2328, 0x8529, 0x92be, 0x0007,
-+ 0x0158, 0x0006, 0x2039, 0x0007, 0x2200, 0x973a, 0x000e, 0x27a8,
-+ 0x95a8, 0x0010, 0x1f04, 0x4ed8, 0x7556, 0x95c8, 0x298c, 0x292d,
-+ 0x95ac, 0x00ff, 0x757a, 0x6532, 0x6536, 0x0016, 0x2508, 0x080c,
-+ 0x1f8d, 0x001e, 0x60e7, 0x0000, 0x65ea, 0x2018, 0x2304, 0x9405,
-+ 0x201a, 0x707f, 0x0001, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x20e1,
-+ 0x0001, 0x2898, 0x20a9, 0x0008, 0x4003, 0x9085, 0x0001, 0x0008,
-+ 0x9006, 0x009e, 0x008e, 0x0005, 0x0156, 0x01c6, 0x01d6, 0x0136,
-+ 0x0146, 0x22a8, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000,
-+ 0x2011, 0x024e, 0x22a0, 0x4003, 0x014e, 0x013e, 0x01de, 0x01ce,
-+ 0x015e, 0x2118, 0x9026, 0x2001, 0x0007, 0x939a, 0x0010, 0x0218,
-+ 0x8420, 0x8001, 0x0cd0, 0x2118, 0x84ff, 0x0120, 0x939a, 0x0010,
-+ 0x8421, 0x1de0, 0x2021, 0x0001, 0x83ff, 0x0118, 0x8423, 0x8319,
-+ 0x1de8, 0x9238, 0x2029, 0x026e, 0x9528, 0x2504, 0x942c, 0x11b8,
-+ 0x9405, 0x203a, 0x7156, 0x91a0, 0x298c, 0x242d, 0x95ac, 0x00ff,
-+ 0x757a, 0x6532, 0x6536, 0x0016, 0x2508, 0x080c, 0x1f8d, 0x001e,
-+ 0x60e7, 0x0000, 0x65ea, 0x707f, 0x0001, 0x9084, 0x0000, 0x0005,
-+ 0x00e6, 0x2071, 0x1100, 0x7083, 0x0000, 0x00ee, 0x0005, 0x00e6,
-+ 0x00f6, 0x2079, 0x0100, 0x2071, 0x0140, 0x080c, 0x501e, 0x080c,
-+ 0x85a2, 0x7004, 0x9084, 0x4000, 0x0138, 0x2001, 0x1000, 0x080c,
-+ 0x2401, 0x9006, 0x080c, 0x2401, 0x0126, 0x2091, 0x8000, 0x2071,
-+ 0x1124, 0x2073, 0x0000, 0x7840, 0x0026, 0x0016, 0x2009, 0x00f7,
-+ 0x080c, 0x507b, 0x001e, 0x9094, 0x0010, 0x9285, 0x0080, 0x7842,
-+ 0x7a42, 0x002e, 0x012e, 0x00fe, 0x00ee, 0x0005, 0x0126, 0x2091,
-+ 0x8000, 0x2011, 0x130e, 0x2013, 0x0000, 0x708b, 0x0000, 0x012e,
-+ 0x60a3, 0x0056, 0x60a7, 0x9575, 0x080c, 0x8599, 0x6144, 0xd184,
-+ 0x0120, 0x7190, 0x918d, 0x2000, 0x0018, 0x7184, 0x918d, 0x1000,
-+ 0x2011, 0x12d3, 0x2112, 0x2009, 0x07d0, 0x2011, 0x4f57, 0x080c,
-+ 0x7283, 0x0005, 0x0016, 0x0026, 0x00c6, 0x0126, 0x2091, 0x8000,
-+ 0x2011, 0x0003, 0x080c, 0x88e2, 0x2011, 0x0002, 0x080c, 0x88ec,
-+ 0x080c, 0x87a2, 0x0036, 0x901e, 0x080c, 0x8847, 0x003e, 0x2009,
-+ 0x00f7, 0x080c, 0x507b, 0x2061, 0x1317, 0x900e, 0x611a, 0x611e,
-+ 0x2061, 0x1100, 0x6003, 0x0001, 0x2061, 0x0100, 0x6043, 0x0090,
-+ 0x6043, 0x0010, 0x2009, 0x12d3, 0x200b, 0x0000, 0x2009, 0x002d,
-+ 0x2011, 0x4fe1, 0x080c, 0x71ee, 0x012e, 0x00ce, 0x002e, 0x001e,
-+ 0x0005, 0x00e6, 0x0006, 0x0126, 0x2091, 0x8000, 0x04b9, 0x2071,
-+ 0x0100, 0x080c, 0x85a2, 0x2071, 0x0140, 0x7004, 0x9084, 0x4000,
-+ 0x0138, 0x2001, 0x1000, 0x080c, 0x2401, 0x9006, 0x080c, 0x2401,
-+ 0x080c, 0x62ec, 0x01a8, 0x080c, 0x630a, 0x1190, 0x2001, 0x12a7,
-+ 0x2003, 0xaaaa, 0x0016, 0x080c, 0x205d, 0x2001, 0x1298, 0x2102,
-+ 0x001e, 0x2001, 0x12a8, 0x2003, 0x0000, 0x080c, 0x621a, 0x0050,
-+ 0x2009, 0x0001, 0x080c, 0x2355, 0x2001, 0x0001, 0x080c, 0x1f11,
-+ 0x080c, 0x4faa, 0x012e, 0x000e, 0x00ee, 0x0005, 0x2001, 0x110d,
-+ 0x2004, 0xd0bc, 0x0158, 0x0026, 0x0036, 0x2011, 0x8017, 0x2001,
-+ 0x12d3, 0x201c, 0x080c, 0x3f23, 0x003e, 0x002e, 0x0005, 0x20a9,
-+ 0x0012, 0x20e9, 0x0001, 0x20a1, 0x1580, 0x080c, 0x50ce, 0x20e9,
-+ 0x0000, 0x2099, 0x026e, 0x0099, 0x20a9, 0x0020, 0x080c, 0x50c8,
-+ 0x2099, 0x0260, 0x20a1, 0x1592, 0x0051, 0x20a9, 0x000e, 0x080c,
-+ 0x50cb, 0x2099, 0x0260, 0x20a1, 0x15b2, 0x0009, 0x0005, 0x0016,
-+ 0x0026, 0x3410, 0x3308, 0x2104, 0x8007, 0x2012, 0x8108, 0x8210,
-+ 0x1f04, 0x5053, 0x002e, 0x001e, 0x0005, 0x080c, 0x8dc3, 0x20e1,
-+ 0x0001, 0x2099, 0x1500, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9,
-+ 0x000c, 0x4003, 0x0005, 0x080c, 0x8dc3, 0x080c, 0x50ce, 0x20e1,
-+ 0x0000, 0x2099, 0x0260, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9,
-+ 0x000c, 0x4003, 0x0005, 0x00c6, 0x0006, 0x2061, 0x0100, 0x810f,
-+ 0x2001, 0x1133, 0x2004, 0x9005, 0x1138, 0x2001, 0x1116, 0x2004,
-+ 0x9084, 0x00ff, 0x9105, 0x0010, 0x9185, 0x00f7, 0x604a, 0x000e,
-+ 0x00ce, 0x0005, 0x0016, 0x0046, 0x080c, 0x58cb, 0x0158, 0x9006,
-+ 0x2020, 0x2009, 0x002a, 0x080c, 0xc12f, 0x2001, 0x110c, 0x200c,
-+ 0xc195, 0x2102, 0x2019, 0x002a, 0x900e, 0x080c, 0x2831, 0x004e,
-+ 0x001e, 0x0005, 0x080c, 0x4faa, 0x7093, 0x0000, 0x708b, 0x0000,
-+ 0x0005, 0x0006, 0x2001, 0x110c, 0x2004, 0xd09c, 0x0100, 0x000e,
-+ 0x0005, 0x0006, 0x0016, 0x0126, 0x2091, 0x8000, 0x2001, 0x0101,
-+ 0x200c, 0x918d, 0x0006, 0x2102, 0x012e, 0x001e, 0x000e, 0x0005,
-+ 0x2009, 0x0001, 0x0020, 0x2009, 0x0002, 0x0008, 0x900e, 0x6814,
-+ 0x9084, 0xffc0, 0x910d, 0x6916, 0x0005, 0x00f6, 0x0156, 0x0146,
-+ 0x01d6, 0x9006, 0x20a9, 0x0080, 0x20e9, 0x0001, 0x20a1, 0x1500,
-+ 0x4004, 0x2079, 0x1500, 0x7803, 0x2200, 0x7807, 0x00ef, 0x780f,
-+ 0x00ef, 0x7813, 0x0138, 0x7823, 0xffff, 0x7827, 0xffff, 0x01de,
-+ 0x014e, 0x015e, 0x00fe, 0x0005, 0x0156, 0x20a9, 0x00ff, 0x2009,
-+ 0x1000, 0x9006, 0x200a, 0x8108, 0x1f04, 0x50fa, 0x015e, 0x0005,
-+ 0x00d6, 0x0036, 0x0156, 0x0136, 0x0146, 0x2069, 0x1152, 0x9006,
-+ 0x6002, 0x6007, 0x0707, 0x600a, 0x600e, 0x6012, 0x9198, 0x298c,
-+ 0x231d, 0x939c, 0x00ff, 0x6316, 0x20a9, 0x0004, 0x9c98, 0x0006,
-+ 0x20e9, 0x0001, 0x23a0, 0x4004, 0x20a9, 0x0004, 0x9c98, 0x000a,
-+ 0x23a0, 0x4004, 0x603e, 0x6042, 0x604e, 0x6052, 0x6056, 0x605a,
-+ 0x605e, 0x6062, 0x6066, 0x606a, 0x606e, 0x6072, 0x6076, 0x607a,
-+ 0x608a, 0x608e, 0x6092, 0x6096, 0x609a, 0x609e, 0x60ae, 0x61a2,
-+ 0x00d6, 0x60a4, 0x906d, 0x0110, 0x080c, 0x0ecf, 0x60a7, 0x0000,
-+ 0x00de, 0x9006, 0x604a, 0x6810, 0x603a, 0x680c, 0x6046, 0x6814,
-+ 0x9084, 0x00ff, 0x6042, 0x014e, 0x013e, 0x015e, 0x003e, 0x00de,
-+ 0x0005, 0x0126, 0x2091, 0x8000, 0x6974, 0x6e78, 0x9684, 0x3fff,
-+ 0x9082, 0x4000, 0x1a04, 0x51c0, 0x918c, 0xff00, 0x810f, 0x9182,
-+ 0x00ff, 0x1a04, 0x51c4, 0x2001, 0x110c, 0x2004, 0x9084, 0x0003,
-+ 0x1904, 0x51ca, 0x9188, 0x1000, 0x2104, 0x9065, 0x0500, 0x6004,
-+ 0x9084, 0x00ff, 0x908e, 0x0006, 0x11f0, 0x60a4, 0x900d, 0x1904,
-+ 0x51df, 0x6050, 0x900d, 0x1148, 0x6802, 0x2d00, 0x6052, 0x604e,
-+ 0x080c, 0x758b, 0x9006, 0x012e, 0x0005, 0x2d00, 0x200a, 0x6803,
-+ 0x0000, 0x6052, 0x0ca8, 0x2001, 0x0005, 0x900e, 0x04c0, 0x2001,
-+ 0x0028, 0x900e, 0x04a0, 0x9082, 0x0006, 0x1298, 0x2001, 0x1136,
-+ 0x2004, 0xd0ac, 0x1158, 0x60a0, 0xd0bc, 0x1140, 0x6100, 0xd1fc,
-+ 0x09a0, 0x2001, 0x0029, 0x2009, 0x1000, 0x0408, 0x2001, 0x0028,
-+ 0x00a8, 0x2009, 0x110c, 0x210c, 0xd18c, 0x0118, 0x2001, 0x0004,
-+ 0x0068, 0xd184, 0x0118, 0x2001, 0x0004, 0x0040, 0x2001, 0x0029,
-+ 0x6100, 0xd1fc, 0x0118, 0x2009, 0x1000, 0x0048, 0x900e, 0x0038,
-+ 0x2001, 0x0029, 0x900e, 0x0018, 0x2001, 0x0029, 0x900e, 0x9005,
-+ 0x012e, 0x0005, 0x2001, 0x110c, 0x2004, 0xd084, 0x19d0, 0x9188,
-+ 0x1000, 0x2104, 0x9065, 0x09a8, 0x6004, 0x9084, 0x00ff, 0x908e,
-+ 0x0006, 0x1978, 0x6000, 0xd0c4, 0x0960, 0x0804, 0x5175, 0x080c,
-+ 0x5791, 0x0904, 0x518b, 0x0804, 0x5179, 0x00e6, 0x0126, 0x2091,
-+ 0x8000, 0x6874, 0x8007, 0x9084, 0x00ff, 0x2008, 0x9182, 0x00ff,
-+ 0x1a04, 0x5247, 0x9188, 0x1000, 0x2104, 0x9065, 0x0538, 0x6004,
-+ 0x908c, 0x00ff, 0x918e, 0x0006, 0x0128, 0x908c, 0xff00, 0x918e,
-+ 0x0600, 0x11f8, 0x2c70, 0x687c, 0xd0fc, 0x0138, 0x6894, 0x9005,
-+ 0x0120, 0x2060, 0x2d00, 0x6016, 0x0058, 0x080c, 0x8e83, 0x05e8,
-+ 0x2e00, 0x6012, 0x2d00, 0x6016, 0x600b, 0xffff, 0x6023, 0x000a,
-+ 0x2009, 0x0003, 0x080c, 0x8f53, 0x9006, 0x0460, 0x2001, 0x0028,
-+ 0x0440, 0x9082, 0x0006, 0x1298, 0x2001, 0x1136, 0x2004, 0xd0ac,
-+ 0x1158, 0x60a0, 0xd0bc, 0x1140, 0x6100, 0xd1fc, 0x0998, 0x2001,
-+ 0x0029, 0x2009, 0x1000, 0x00a8, 0x2001, 0x0028, 0x0090, 0x2009,
-+ 0x110c, 0x210c, 0xd18c, 0x0118, 0x2001, 0x0004, 0x0050, 0xd184,
-+ 0x0118, 0x2001, 0x0004, 0x0028, 0x2001, 0x0029, 0x0010, 0x2001,
-+ 0x0029, 0x9005, 0x012e, 0x00ee, 0x0005, 0x2001, 0x002c, 0x0cc8,
-+ 0x00f6, 0x00e6, 0x0126, 0x2091, 0x8000, 0x68e0, 0x9005, 0x1568,
-+ 0x68dc, 0x9082, 0x0101, 0x1648, 0x68c8, 0x9005, 0x1530, 0x68c4,
-+ 0x9082, 0x0101, 0x1610, 0x6974, 0x2079, 0x1100, 0x918c, 0xff00,
-+ 0x810f, 0x9182, 0x00ff, 0x12e8, 0x7830, 0x9084, 0x0003, 0x1130,
-+ 0x6a98, 0x6b94, 0x6878, 0x9084, 0x0007, 0x00ea, 0x7930, 0xd18c,
-+ 0x0118, 0x2001, 0x0004, 0x0038, 0xd184, 0x0118, 0x2001, 0x0004,
-+ 0x0010, 0x2001, 0x0029, 0x900e, 0x0038, 0x2001, 0x002c, 0x900e,
-+ 0x0018, 0x2001, 0x0029, 0x900e, 0x9006, 0x0008, 0x9005, 0x012e,
-+ 0x00ee, 0x00fe, 0x0005, 0x52e3, 0x529b, 0x52b4, 0x52e3, 0x52e3,
-+ 0x52e3, 0x52e3, 0x52e3, 0x2100, 0x9082, 0x007e, 0x1280, 0x080c,
-+ 0x55b3, 0x2c70, 0x0148, 0x7010, 0x9306, 0x1904, 0x52eb, 0x7014,
-+ 0x9206, 0x1904, 0x52eb, 0x0028, 0x7312, 0x7216, 0x0010, 0x080c,
-+ 0x3dc2, 0x2c70, 0x0158, 0x04b8, 0x080c, 0x5608, 0x15a0, 0x2c70,
-+ 0x7010, 0x9306, 0x1580, 0x7014, 0x9206, 0x1568, 0x080c, 0x8e83,
-+ 0x0530, 0x2e00, 0x6012, 0x080c, 0xad70, 0x2d00, 0x6016, 0x600b,
-+ 0xffff, 0x6023, 0x000a, 0x6878, 0x9086, 0x0001, 0x1170, 0x080c,
-+ 0x2862, 0x9006, 0x080c, 0x5556, 0x2001, 0x0002, 0x080c, 0x5568,
-+ 0x2001, 0x0200, 0x706e, 0x7093, 0x0002, 0x2009, 0x0003, 0x080c,
-+ 0x8f53, 0x9006, 0x0068, 0x2001, 0x0001, 0x900e, 0x0038, 0x2001,
-+ 0x002c, 0x900e, 0x0018, 0x2001, 0x0028, 0x900e, 0x9005, 0x0000,
-+ 0x012e, 0x00ee, 0x00fe, 0x0005, 0x00f6, 0x00e6, 0x0126, 0x2091,
-+ 0x8000, 0x6894, 0x90c6, 0x0015, 0x0904, 0x54b0, 0x90c6, 0x0056,
-+ 0x0904, 0x54b4, 0x90c6, 0x0066, 0x0904, 0x54b8, 0x90c6, 0x0071,
-+ 0x0904, 0x54bc, 0x90c6, 0x0074, 0x0904, 0x54c0, 0x90c6, 0x007c,
-+ 0x0904, 0x54c4, 0x90c6, 0x007e, 0x0904, 0x54c8, 0x90c6, 0x0037,
-+ 0x0904, 0x54cc, 0x9016, 0x2079, 0x1100, 0x6974, 0x918c, 0xff00,
-+ 0x810f, 0x9182, 0x00ff, 0x1a04, 0x54ab, 0x080c, 0x5608, 0x11a0,
-+ 0x6004, 0x9084, 0x00ff, 0x9082, 0x0006, 0x1270, 0x6894, 0x90c6,
-+ 0x006f, 0x0150, 0x2001, 0x1136, 0x2004, 0xd0ac, 0x1904, 0x5496,
-+ 0x60a0, 0xd0bc, 0x1904, 0x5496, 0x6894, 0x90c6, 0x006f, 0x0158,
-+ 0x90c6, 0x005e, 0x0904, 0x53df, 0x90c6, 0x0064, 0x0904, 0x5413,
-+ 0x2008, 0x0804, 0x53aa, 0x6998, 0x2140, 0x918c, 0xff00, 0x810f,
-+ 0x78d8, 0xd0ac, 0x1120, 0x9182, 0x0080, 0x0a04, 0x53aa, 0x9182,
-+ 0x00ff, 0x1a04, 0x53aa, 0x6aa0, 0x6b9c, 0x7874, 0x9306, 0x1168,
-+ 0x7878, 0x924e, 0x1120, 0x2208, 0x2310, 0x0804, 0x53aa, 0x99cc,
-+ 0xff00, 0x1118, 0x2208, 0x2310, 0x04e8, 0x080c, 0x3dc2, 0x2c70,
-+ 0x0904, 0x53b2, 0x900e, 0x9016, 0x90c6, 0x4000, 0x1520, 0x0006,
-+ 0x2e60, 0x080c, 0x57d6, 0x1108, 0xc185, 0x7000, 0xd0bc, 0x0108,
-+ 0xc18d, 0x20a9, 0x0004, 0x9d80, 0x0031, 0x20a0, 0x20e9, 0x0001,
-+ 0x9e80, 0x0006, 0x2098, 0x080c, 0x504f, 0x20a9, 0x0004, 0x9d80,
-+ 0x0035, 0x20a0, 0x20e9, 0x0001, 0x9e80, 0x000a, 0x2098, 0x080c,
-+ 0x504f, 0x000e, 0x0088, 0x90c6, 0x4007, 0x1110, 0x2408, 0x0060,
-+ 0x90c6, 0x4008, 0x1118, 0x2708, 0x2610, 0x0030, 0x90c6, 0x4009,
-+ 0x1108, 0x0010, 0x2001, 0x4006, 0x6896, 0x699a, 0x6a9e, 0x2001,
-+ 0x0030, 0x0440, 0x080c, 0x8e83, 0x1130, 0x2001, 0x4005, 0x2009,
-+ 0x0003, 0x9016, 0x0c88, 0x2e00, 0x6012, 0x080c, 0xad70, 0x2d00,
-+ 0x6016, 0x6023, 0x0001, 0x6868, 0xd88c, 0x0108, 0xc0f5, 0x686a,
-+ 0x0126, 0x2091, 0x8000, 0x080c, 0x2862, 0x012e, 0x9006, 0x080c,
-+ 0x5556, 0x2001, 0x0002, 0x080c, 0x5568, 0x2009, 0x0002, 0x080c,
-+ 0x8f53, 0x9006, 0x9005, 0x012e, 0x00ee, 0x00fe, 0x0005, 0x7800,
-+ 0x9086, 0x0003, 0x0118, 0x2009, 0x0007, 0x0448, 0x6e98, 0x860f,
-+ 0x918c, 0x00ff, 0x96b4, 0x00ff, 0x080c, 0x5608, 0x0120, 0x2009,
-+ 0x000a, 0x0804, 0x53aa, 0x9186, 0x007f, 0x0148, 0x6004, 0x9084,
-+ 0x00ff, 0x9086, 0x0006, 0x0118, 0x2009, 0x0009, 0x0080, 0x00d6,
-+ 0x080c, 0x0e9d, 0x1120, 0x00de, 0x2009, 0x0002, 0x0040, 0x2d00,
-+ 0x00de, 0x6806, 0x080c, 0xaaf5, 0x1960, 0x2009, 0x0003, 0x2001,
-+ 0x4005, 0x0804, 0x53ac, 0x6e98, 0x860f, 0x918c, 0x00ff, 0x96b4,
-+ 0x00ff, 0x080c, 0x5608, 0x0120, 0x2009, 0x000a, 0x0804, 0x53aa,
-+ 0x00d6, 0x080c, 0x0e9d, 0x1128, 0x00de, 0x2009, 0x0002, 0x0804,
-+ 0x547a, 0x2d00, 0x00de, 0x6806, 0x00d6, 0x2068, 0x20a9, 0x002b,
-+ 0x20e1, 0x0001, 0x2c98, 0x9de8, 0x0002, 0x20e9, 0x0001, 0x2da0,
-+ 0x4003, 0x20a9, 0x0004, 0x9d80, 0x0006, 0x20a0, 0x9c80, 0x0006,
-+ 0x2098, 0x080c, 0x504f, 0x20a9, 0x0004, 0x9d80, 0x000a, 0x20a0,
-+ 0x9c80, 0x000a, 0x2098, 0x080c, 0x504f, 0x00de, 0x687b, 0x0000,
-+ 0x6883, 0x0000, 0x6897, 0x4000, 0xd684, 0x1170, 0x2001, 0x1153,
-+ 0x2004, 0xd0b4, 0x1118, 0x689b, 0x000b, 0x0400, 0x6000, 0xd08c,
-+ 0x0118, 0x689b, 0x000c, 0x00d0, 0x6004, 0x9084, 0x00ff, 0x9086,
-+ 0x0006, 0x0118, 0x689b, 0x0009, 0x0088, 0x7800, 0x9086, 0x0003,
-+ 0x0118, 0x689b, 0x0007, 0x0050, 0x080c, 0xaabe, 0x1904, 0x53d9,
-+ 0x2009, 0x0003, 0x2001, 0x4005, 0x0804, 0x53ac, 0x687b, 0x0030,
-+ 0x6897, 0x4005, 0x6804, 0x2009, 0x002b, 0x6aa0, 0x6b9c, 0x6ca8,
-+ 0x6da4, 0x2031, 0x0000, 0x2039, 0x0001, 0x2041, 0x1078, 0x080c,
-+ 0x9367, 0x1904, 0x53d9, 0x2009, 0x0002, 0x0c20, 0x2001, 0x0028,
-+ 0x900e, 0x0804, 0x53da, 0x2009, 0x110c, 0x210c, 0xd18c, 0x0118,
-+ 0x2001, 0x0004, 0x0038, 0xd184, 0x0118, 0x2001, 0x0004, 0x0010,
-+ 0x2001, 0x0029, 0x900e, 0x2001, 0x0029, 0x900e, 0x0804, 0x53da,
-+ 0x080c, 0x2d84, 0x0804, 0x53db, 0x080c, 0x460a, 0x0804, 0x53db,
-+ 0x080c, 0x3a74, 0x0804, 0x53db, 0x080c, 0x3e74, 0x0804, 0x53db,
-+ 0x080c, 0x408f, 0x0804, 0x53db, 0x080c, 0x4291, 0x0804, 0x53db,
-+ 0x080c, 0x448a, 0x0804, 0x53db, 0x080c, 0x2f43, 0x0804, 0x53db,
-+ 0x6974, 0x6e78, 0x9684, 0x3fff, 0x9082, 0x4000, 0x1648, 0x918c,
-+ 0xff00, 0x810f, 0x9182, 0x00ff, 0x1280, 0x9188, 0x1000, 0x2104,
-+ 0x9065, 0x0158, 0x6004, 0x9084, 0x00ff, 0x908e, 0x0006, 0x1148,
-+ 0x00e1, 0x080c, 0x5721, 0x9006, 0x00b0, 0x2001, 0x0028, 0x900e,
-+ 0x0090, 0x9082, 0x0006, 0x1240, 0x6100, 0xd1fc, 0x0d88, 0x2001,
-+ 0x0029, 0x2009, 0x1000, 0x0038, 0x2001, 0x0029, 0x900e, 0x0018,
-+ 0x2001, 0x0029, 0x900e, 0x9005, 0x0005, 0x0126, 0x2091, 0x8000,
-+ 0x6050, 0x900d, 0x0138, 0x2d00, 0x200a, 0x6803, 0x0000, 0x6052,
-+ 0x012e, 0x0005, 0x2d00, 0x6052, 0x604e, 0x6803, 0x0000, 0x0cc0,
-+ 0x0126, 0x2091, 0x8000, 0x604c, 0x9005, 0x0170, 0x00e6, 0x2071,
-+ 0x1304, 0x7004, 0x9086, 0x0002, 0x0168, 0x00ee, 0x604c, 0x6802,
-+ 0x2d00, 0x604e, 0x012e, 0x0005, 0x2d00, 0x6052, 0x604e, 0x6803,
-+ 0x0000, 0x0cc0, 0x701c, 0x9c06, 0x1d80, 0x604c, 0x2070, 0x7000,
-+ 0x6802, 0x2d00, 0x7002, 0x00ee, 0x012e, 0x0005, 0x0126, 0x2091,
-+ 0x8000, 0x604c, 0x906d, 0x0130, 0x6800, 0x9005, 0x1108, 0x6052,
-+ 0x604e, 0x9d05, 0x012e, 0x0005, 0x604c, 0x906d, 0x0130, 0x6800,
-+ 0x9005, 0x1108, 0x6052, 0x604e, 0x9d05, 0x0005, 0x0126, 0x00c6,
-+ 0x0026, 0x2091, 0x8000, 0x6210, 0x2260, 0x6200, 0x9005, 0x0110,
-+ 0xc285, 0x0008, 0xc284, 0x6202, 0x002e, 0x00ce, 0x012e, 0x0005,
-+ 0x0126, 0x00c6, 0x2091, 0x8000, 0x6210, 0x2260, 0x6204, 0x0006,
-+ 0x9086, 0x0006, 0x1170, 0x609c, 0xd0ac, 0x0158, 0x080c, 0x58cb,
-+ 0x0140, 0x9284, 0xff00, 0x8007, 0x9086, 0x0007, 0x1110, 0x2011,
-+ 0x0600, 0x000e, 0x9294, 0xff00, 0x9215, 0x6206, 0x0006, 0x9086,
-+ 0x0006, 0x1120, 0x6290, 0x82ff, 0x090c, 0x0d7e, 0x000e, 0x00ce,
-+ 0x012e, 0x0005, 0x0126, 0x00c6, 0x2091, 0x8000, 0x6210, 0x2260,
-+ 0x6204, 0x0006, 0x9086, 0x0006, 0x1168, 0x609c, 0xd0a4, 0x0150,
-+ 0x080c, 0x58c6, 0x1138, 0x9284, 0x00ff, 0x9086, 0x0007, 0x1110,
-+ 0x2011, 0x0006, 0x000e, 0x9294, 0x00ff, 0x8007, 0x9215, 0x6206,
-+ 0x00ce, 0x012e, 0x0005, 0x0026, 0x9182, 0x00ff, 0x0218, 0x9085,
-+ 0x0001, 0x00a0, 0x9190, 0x1000, 0x2204, 0x9065, 0x1170, 0x0016,
-+ 0x00d6, 0x080c, 0x0e9d, 0x2d60, 0x00de, 0x001e, 0x0d80, 0x2c00,
-+ 0x2012, 0x9006, 0x60a6, 0x080c, 0x5100, 0x9006, 0x002e, 0x0005,
-+ 0x0126, 0x2091, 0x8000, 0x0026, 0x9182, 0x00ff, 0x0218, 0x9085,
-+ 0x0001, 0x0458, 0x00d6, 0x9190, 0x1000, 0x2204, 0x906d, 0x0518,
-+ 0x2013, 0x0000, 0x00d6, 0x00c6, 0x2d60, 0x60a4, 0x906d, 0x0110,
-+ 0x080c, 0x0ecf, 0x00ce, 0x00de, 0x00d6, 0x00c6, 0x68ac, 0x2060,
-+ 0x8cff, 0x0168, 0x600c, 0x0006, 0x6014, 0x2068, 0x080c, 0xa942,
-+ 0x0110, 0x080c, 0x0edf, 0x080c, 0x8ed9, 0x00ce, 0x0c88, 0x00ce,
-+ 0x00de, 0x080c, 0x0ecf, 0x00de, 0x9006, 0x002e, 0x012e, 0x0005,
-+ 0x0016, 0x9182, 0x00ff, 0x0218, 0x9085, 0x0001, 0x0030, 0x9188,
-+ 0x1000, 0x2104, 0x9065, 0x0dc0, 0x9006, 0x001e, 0x0005, 0x00d6,
-+ 0x0156, 0x0136, 0x0146, 0x9006, 0x600a, 0x600e, 0x6000, 0xc08c,
-+ 0x6002, 0x080c, 0x62e4, 0x1520, 0x60a0, 0x9086, 0x007e, 0x0130,
-+ 0x2001, 0x1136, 0x2004, 0xd0ac, 0x11d8, 0x0078, 0x7040, 0xd0e4,
-+ 0x01b8, 0x00c6, 0x2061, 0x12bc, 0x7048, 0x2062, 0x704c, 0x6006,
-+ 0x7050, 0x600a, 0x7054, 0x600e, 0x00ce, 0x703c, 0x2069, 0x0140,
-+ 0x9005, 0x1110, 0x2001, 0x0001, 0x6886, 0x2069, 0x1100, 0x68ae,
-+ 0x7040, 0x605e, 0x7048, 0x6062, 0x6138, 0x910a, 0x0208, 0x603a,
-+ 0x704c, 0x6066, 0x20e1, 0x0000, 0x2099, 0x0276, 0x9c88, 0x000a,
-+ 0x20e9, 0x0001, 0x21a0, 0x20a9, 0x0004, 0x4003, 0x2099, 0x027a,
-+ 0x9c88, 0x0006, 0x21a0, 0x20a9, 0x0004, 0x4003, 0x2069, 0x0200,
-+ 0x6817, 0x0001, 0x7040, 0x606a, 0x7144, 0x616e, 0x7048, 0x6072,
-+ 0x7050, 0x6076, 0x2069, 0x0200, 0x6817, 0x0000, 0x60a0, 0x9086,
-+ 0x007e, 0x1110, 0x7144, 0x616e, 0x9182, 0x0211, 0x1218, 0x2009,
-+ 0x0008, 0x0400, 0x9182, 0x0259, 0x1218, 0x2009, 0x0007, 0x00d0,
-+ 0x9182, 0x02c1, 0x1218, 0x2009, 0x0006, 0x00a0, 0x9182, 0x0349,
-+ 0x1218, 0x2009, 0x0005, 0x0070, 0x9182, 0x0421, 0x1218, 0x2009,
-+ 0x0004, 0x0040, 0x9182, 0x0581, 0x1218, 0x2009, 0x0003, 0x0010,
-+ 0x2009, 0x0002, 0x6192, 0x014e, 0x013e, 0x015e, 0x00de, 0x0005,
-+ 0x0016, 0x0026, 0x00e6, 0x2071, 0x0260, 0x7034, 0x6896, 0x703c,
-+ 0x689a, 0x7054, 0x689e, 0x6a00, 0x2009, 0x1172, 0x210c, 0xd0bc,
-+ 0x0120, 0xd1ec, 0x0110, 0xc2ad, 0x0008, 0xc2ac, 0xd0c4, 0x0120,
-+ 0xd1e4, 0x0110, 0xc2bd, 0x0008, 0xc2bc, 0x6a02, 0x00ee, 0x002e,
-+ 0x001e, 0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x60a4, 0x906d,
-+ 0x01c0, 0x6900, 0x81ff, 0x1540, 0x6a04, 0x9282, 0x0010, 0x1648,
-+ 0x9d88, 0x0004, 0x20a9, 0x0010, 0x2104, 0x9086, 0xffff, 0x0128,
-+ 0x8108, 0x1f04, 0x56dc, 0x080c, 0x0d7e, 0x260a, 0x8210, 0x6a06,
-+ 0x0098, 0x080c, 0x0eb6, 0x01a8, 0x2d00, 0x60a6, 0x6803, 0x0000,
-+ 0x9d88, 0x0004, 0x20a9, 0x0010, 0x200b, 0xffff, 0x8108, 0x1f04,
-+ 0x56f4, 0x6807, 0x0001, 0x6e12, 0x9085, 0x0001, 0x012e, 0x00de,
-+ 0x0005, 0x9006, 0x0cd8, 0x0126, 0x2091, 0x8000, 0x00d6, 0x60a4,
-+ 0x900d, 0x01a0, 0x2168, 0x6800, 0x9005, 0x1160, 0x080c, 0x5791,
-+ 0x1168, 0x200b, 0xffff, 0x6804, 0x908a, 0x0002, 0x0218, 0x8001,
-+ 0x6806, 0x0020, 0x080c, 0x0ecf, 0x60a7, 0x0000, 0x00de, 0x012e,
-+ 0x0005, 0x0126, 0x2091, 0x8000, 0x080c, 0x758b, 0x012e, 0x0005,
-+ 0x901e, 0x0010, 0x2019, 0x0001, 0x900e, 0x0126, 0x2091, 0x8000,
-+ 0x604c, 0x2068, 0x6000, 0xd0dc, 0x1170, 0x8dff, 0x01f8, 0x83ff,
-+ 0x0120, 0x6878, 0x9606, 0x0158, 0x0030, 0x686c, 0x9406, 0x1118,
-+ 0x6870, 0x9506, 0x0120, 0x2d08, 0x6800, 0x2068, 0x0c70, 0x080c,
-+ 0x895e, 0x6a00, 0x604c, 0x9d06, 0x1110, 0x624e, 0x0018, 0x9180,
-+ 0x0000, 0x2202, 0x82ff, 0x1110, 0x6152, 0x8dff, 0x012e, 0x0005,
-+ 0x9016, 0x0489, 0x1110, 0x2011, 0x0001, 0x0005, 0x080c, 0x57d6,
-+ 0x0118, 0x080c, 0xa9f4, 0x0010, 0x9085, 0x0001, 0x0005, 0x080c,
-+ 0x57d6, 0x0118, 0x080c, 0xa987, 0x0010, 0x9085, 0x0001, 0x0005,
-+ 0x080c, 0x57d6, 0x0118, 0x080c, 0xa9d7, 0x0010, 0x9085, 0x0001,
-+ 0x0005, 0x080c, 0x57d6, 0x0118, 0x080c, 0xa9a3, 0x0010, 0x9085,
-+ 0x0001, 0x0005, 0x080c, 0x57d6, 0x0118, 0x080c, 0xaa10, 0x0010,
-+ 0x9085, 0x0001, 0x0005, 0x60a4, 0x900d, 0x1118, 0x9085, 0x0001,
-+ 0x0005, 0x00e6, 0x2170, 0x7000, 0x9005, 0x1168, 0x20a9, 0x0010,
-+ 0x9e88, 0x0004, 0x2104, 0x9606, 0x0130, 0x8108, 0x1f04, 0x579a,
-+ 0x9085, 0x0001, 0x0008, 0x9006, 0x00ee, 0x0005, 0x00d6, 0x0126,
-+ 0x2091, 0x8000, 0x60a4, 0x906d, 0x1128, 0x080c, 0x0eb6, 0x01a0,
-+ 0x2d00, 0x60a6, 0x6803, 0x0001, 0x6807, 0x0000, 0x9d88, 0x0004,
-+ 0x20a9, 0x0010, 0x200b, 0xffff, 0x8108, 0x1f04, 0x57ba, 0x9085,
-+ 0x0001, 0x012e, 0x00de, 0x0005, 0x9006, 0x0cd8, 0x00d6, 0x0126,
-+ 0x2091, 0x8000, 0x60a4, 0x906d, 0x0130, 0x60a7, 0x0000, 0x080c,
-+ 0x0ecf, 0x9085, 0x0001, 0x012e, 0x00de, 0x0005, 0x609c, 0xd0a4,
-+ 0x0005, 0x00f6, 0x080c, 0x62e4, 0x01b0, 0x71c0, 0x81ff, 0x1198,
-+ 0x71d8, 0xd19c, 0x0180, 0x2001, 0x007e, 0x9080, 0x1000, 0x2004,
-+ 0x907d, 0x0148, 0x7804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x1118,
-+ 0x7800, 0xc0ed, 0x7802, 0x2079, 0x1152, 0x7804, 0xd0a4, 0x01e0,
-+ 0x0156, 0x00c6, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, 0x5608,
-+ 0x1168, 0x6004, 0x9084, 0xff00, 0x8007, 0x9096, 0x0004, 0x0118,
-+ 0x9086, 0x0006, 0x1118, 0x6000, 0xc0ed, 0x6002, 0x001e, 0x8108,
-+ 0x1f04, 0x57fd, 0x00ce, 0x015e, 0x080c, 0x588e, 0x0120, 0x2001,
-+ 0x12bf, 0x200c, 0x0038, 0x2079, 0x1152, 0x7804, 0xd0a4, 0x0130,
-+ 0x2009, 0x07d0, 0x2011, 0x5828, 0x080c, 0x7283, 0x00fe, 0x0005,
-+ 0x2011, 0x5828, 0x080c, 0x71fa, 0x080c, 0x588e, 0x01d8, 0x2001,
-+ 0x107e, 0x2004, 0x9080, 0x0000, 0x200c, 0xc1ec, 0x2102, 0x080c,
-+ 0x58cb, 0x0130, 0x2009, 0x07d0, 0x2011, 0x5828, 0x080c, 0x7283,
-+ 0x00e6, 0x2071, 0x1100, 0x9006, 0x7076, 0x707a, 0x080c, 0x2679,
-+ 0x00ee, 0x0498, 0x0156, 0x00c6, 0x20a9, 0x007f, 0x900e, 0x0016,
-+ 0x080c, 0x5608, 0x1520, 0x6000, 0xd0ec, 0x0508, 0x0046, 0x62a0,
-+ 0x9294, 0x00ff, 0x8227, 0x9006, 0x2009, 0x0029, 0x080c, 0xc12f,
-+ 0x6000, 0xc0e5, 0xc0ec, 0x6002, 0x6004, 0x9084, 0x00ff, 0x9085,
-+ 0x0700, 0x6006, 0x2019, 0x0029, 0x080c, 0x76f0, 0x0076, 0x903e,
-+ 0x080c, 0x75ee, 0x900e, 0x080c, 0xbec2, 0x007e, 0x004e, 0x001e,
-+ 0x8108, 0x1f04, 0x584f, 0x00ce, 0x015e, 0x0005, 0x00c6, 0x6010,
-+ 0x2060, 0x6000, 0xc0ec, 0x6002, 0x00ce, 0x0005, 0x7810, 0x2004,
-+ 0xd0ac, 0x0005, 0x7810, 0x2004, 0xd0bc, 0x0005, 0x00f6, 0x2001,
-+ 0x107e, 0x2004, 0x907d, 0x0110, 0x7800, 0xd0ec, 0x00fe, 0x0005,
-+ 0x0126, 0x0026, 0x2091, 0x8000, 0x0006, 0x62a0, 0x9290, 0x1000,
-+ 0x2204, 0x9c06, 0x190c, 0x0d7e, 0x000e, 0x6200, 0x9005, 0x0110,
-+ 0xc2fd, 0x0008, 0xc2fc, 0x6202, 0x002e, 0x012e, 0x0005, 0x2011,
-+ 0x1136, 0x2204, 0xd0cc, 0x0138, 0x2001, 0x12bd, 0x200c, 0x2011,
-+ 0x58bc, 0x080c, 0x7283, 0x0005, 0x2011, 0x58bc, 0x080c, 0x71fa,
-+ 0x2011, 0x1136, 0x2204, 0xc0cc, 0x2012, 0x0005, 0x2001, 0x1153,
-+ 0x2004, 0xd0ac, 0x0005, 0x2001, 0x1153, 0x2004, 0xd0a4, 0x0005,
-+ 0x2071, 0x1240, 0x7003, 0x0001, 0x7007, 0x0000, 0x9006, 0x7012,
-+ 0x7016, 0x701a, 0x701e, 0x700a, 0x7046, 0x2071, 0x1286, 0x7003,
-+ 0x1240, 0x7007, 0x0000, 0x700b, 0x0000, 0x700f, 0x0001, 0x7013,
-+ 0x1266, 0x7017, 0x0020, 0x701b, 0x0040, 0x703b, 0x0000, 0x2001,
-+ 0x1262, 0x2003, 0x0000, 0x0005, 0x0016, 0x00e6, 0x2071, 0x1263,
-+ 0x900e, 0x710a, 0x2001, 0x1153, 0x2004, 0xd0fc, 0x1148, 0x2001,
-+ 0x1153, 0x2004, 0x900e, 0xd09c, 0x0108, 0x8108, 0x7102, 0x04d8,
-+ 0x2001, 0x1172, 0x200c, 0x9184, 0x000f, 0x0002, 0x58ff, 0x58ff,
-+ 0x58ff, 0x58ff, 0x58ff, 0x591e, 0x592c, 0x58ff, 0x592f, 0x58ff,
-+ 0x58ff, 0x58ff, 0x58ff, 0x58ff, 0x58ff, 0x58ff, 0x7003, 0x0003,
-+ 0x2009, 0x1173, 0x210c, 0x9184, 0xff00, 0x8007, 0x9005, 0x1110,
-+ 0x2001, 0x0002, 0x7006, 0x00b8, 0x7003, 0x0005, 0x0c88, 0x7003,
-+ 0x0004, 0x0136, 0x0146, 0x0156, 0x20e1, 0x0001, 0x2099, 0x1176,
-+ 0x20e9, 0x0001, 0x20a1, 0x1290, 0x20a9, 0x0004, 0x4003, 0x015e,
-+ 0x014e, 0x013e, 0x0000, 0x00ee, 0x001e, 0x0005, 0x00e6, 0x2071,
-+ 0x0050, 0x684c, 0x9005, 0x1158, 0x00e6, 0x2071, 0x1240, 0x7028,
-+ 0xc085, 0x702a, 0x00ee, 0x9085, 0x0001, 0x0804, 0x5998, 0x6844,
-+ 0x9005, 0x01d8, 0x900e, 0x0156, 0x20a9, 0x0006, 0x8003, 0x2011,
-+ 0x0100, 0x2214, 0x9296, 0x0008, 0x1110, 0x818d, 0x0010, 0x81f5,
-+ 0x3e08, 0x1f04, 0x595e, 0x015e, 0x6a60, 0x9200, 0x7002, 0x6864,
-+ 0x9101, 0x7006, 0x9006, 0x7012, 0x7016, 0x6860, 0x7002, 0x6864,
-+ 0x7006, 0x6868, 0x700a, 0x686c, 0x700e, 0x6844, 0x9005, 0x1110,
-+ 0x7012, 0x7016, 0x684c, 0x701a, 0x701c, 0x9085, 0x0040, 0x701e,
-+ 0x7037, 0x0019, 0x702b, 0x0001, 0x00e6, 0x2071, 0x1240, 0x7028,
-+ 0xc084, 0x702a, 0x7007, 0x0001, 0x700b, 0x0000, 0x00ee, 0x9006,
-+ 0x00ee, 0x0005, 0x6868, 0xd0fc, 0x11d0, 0x00e6, 0x0026, 0x2001,
-+ 0x1263, 0x2004, 0x9005, 0x0904, 0x5b7b, 0x687c, 0xd0bc, 0x1904,
-+ 0x5b7b, 0x6978, 0x6874, 0x9105, 0x1904, 0x5b7b, 0x2001, 0x1263,
-+ 0x2004, 0x0002, 0x5b7b, 0x59dc, 0x5a16, 0x5a16, 0x5efd, 0x0005,
-+ 0x6868, 0xd0fc, 0x1500, 0x00e6, 0x0026, 0x2009, 0x1263, 0x210c,
-+ 0x81ff, 0x0904, 0x5b7b, 0x687c, 0xd0cc, 0x0904, 0x5b7b, 0x6880,
-+ 0x9084, 0x00ff, 0x9086, 0x0001, 0x1904, 0x5b7b, 0x9186, 0x0003,
-+ 0x0904, 0x5a16, 0x9186, 0x0004, 0x0904, 0x5efd, 0x684f, 0x8021,
-+ 0x6853, 0x0017, 0x0028, 0x0005, 0x684f, 0x8020, 0x6853, 0x0016,
-+ 0x2071, 0x1240, 0x701c, 0x9005, 0x1904, 0x5d24, 0x0e04, 0x5d6d,
-+ 0x2071, 0x0000, 0x684c, 0x7082, 0x6850, 0x7032, 0x686c, 0x7086,
-+ 0x7036, 0x6870, 0x708a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004,
-+ 0xd084, 0x190c, 0x0fcd, 0x2071, 0x1100, 0x2011, 0x0001, 0x6804,
-+ 0x900d, 0x702c, 0x1148, 0x206a, 0x2d00, 0x702e, 0x70bc, 0x9200,
-+ 0x70be, 0x002e, 0x00ee, 0x0005, 0x00d6, 0x2168, 0x6904, 0x206a,
-+ 0x8210, 0x2d00, 0x81ff, 0x1dc8, 0x00de, 0x0c68, 0x684f, 0x0000,
-+ 0x00f6, 0x2079, 0x0050, 0x2071, 0x1240, 0x206b, 0x0000, 0x7010,
-+ 0x9005, 0x1904, 0x5b0a, 0x782c, 0x908c, 0x0780, 0x190c, 0x5f3b,
-+ 0x8004, 0x8004, 0x8004, 0x9084, 0x0003, 0x0002, 0x5a34, 0x5b0a,
-+ 0x5a5a, 0x5aa3, 0x080c, 0x0d7e, 0x2071, 0x1100, 0x8d07, 0x8005,
-+ 0x8005, 0xc0d5, 0x7822, 0x6804, 0x900d, 0x1170, 0x2071, 0x1317,
-+ 0x703c, 0x9005, 0x1328, 0x2001, 0x1264, 0x2004, 0x8005, 0x703e,
-+ 0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016, 0x702c, 0x2168, 0x6904,
-+ 0x206a, 0x8210, 0x2d00, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200,
-+ 0x70be, 0x0c20, 0x2071, 0x1100, 0x8d07, 0x8005, 0x8005, 0xc0d5,
-+ 0x7822, 0x6804, 0x900d, 0x1588, 0x7824, 0x00e6, 0x2071, 0x0040,
-+ 0x712c, 0xd19c, 0x1148, 0x2009, 0x112f, 0x210c, 0x918a, 0x0010,
-+ 0x0218, 0x7022, 0x00ee, 0x0060, 0x00ee, 0xc0d4, 0x8006, 0x8006,
-+ 0x806f, 0x702c, 0x206a, 0x2d00, 0x702e, 0x70bc, 0x8000, 0x70be,
-+ 0x782c, 0x9094, 0x0780, 0x190c, 0x5f3b, 0xd0a4, 0x19e8, 0x2071,
-+ 0x1317, 0x703c, 0x9005, 0x1328, 0x2001, 0x1264, 0x2004, 0x8005,
-+ 0x703e, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016, 0x702c, 0x2168,
-+ 0x6904, 0x206a, 0x8210, 0x2d00, 0x81ff, 0x1dc8, 0x702e, 0x70bc,
-+ 0x9200, 0x70be, 0x0808, 0x00d6, 0x00e6, 0x7824, 0xc0d4, 0x8006,
-+ 0x8006, 0x806f, 0x2071, 0x1100, 0x702c, 0x206a, 0x2d00, 0x702e,
-+ 0x70bc, 0x8000, 0x70be, 0x782c, 0x9094, 0x0780, 0x190c, 0x5f3b,
-+ 0xd0a4, 0x1d58, 0x00ee, 0x782c, 0x9094, 0x0780, 0x190c, 0x5f3b,
-+ 0xd09c, 0x11b8, 0x00de, 0x8d07, 0x8005, 0x8005, 0xc0d5, 0x7822,
-+ 0x6804, 0x900d, 0x1560, 0x2071, 0x1317, 0x703c, 0x9005, 0x1328,
-+ 0x2001, 0x1264, 0x2004, 0x8005, 0x703e, 0x00fe, 0x002e, 0x00ee,
-+ 0x0005, 0x00de, 0x2d08, 0x7010, 0x8000, 0x7012, 0x7018, 0x906d,
-+ 0x711a, 0x0110, 0x6902, 0x0008, 0x711e, 0x2168, 0x6804, 0x900d,
-+ 0x1170, 0x2071, 0x1317, 0x703c, 0x9005, 0x1328, 0x2001, 0x1264,
-+ 0x2004, 0x8005, 0x703e, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2071,
-+ 0x1100, 0x9016, 0x702c, 0x2168, 0x6904, 0x206a, 0x8210, 0x2d00,
-+ 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x00fe, 0x002e,
-+ 0x00ee, 0x0005, 0x2d08, 0x7010, 0x8000, 0x7012, 0x7018, 0x906d,
-+ 0x711a, 0x0110, 0x6902, 0x0008, 0x711e, 0x2168, 0x6804, 0x900d,
-+ 0x1904, 0x5b63, 0x782c, 0x9094, 0x0780, 0x190c, 0x5f3b, 0xd09c,
-+ 0x11b0, 0x701c, 0x906d, 0x0198, 0x7010, 0x8001, 0x7012, 0x1108,
-+ 0x701a, 0x2d04, 0x701e, 0x8d07, 0x8005, 0x8005, 0xc0d5, 0x7822,
-+ 0x782c, 0x9094, 0x0780, 0x190c, 0x5f3b, 0xd09c, 0x0d50, 0x782c,
-+ 0x9094, 0x0780, 0x190c, 0x5f3b, 0xd0a4, 0x01b8, 0x00e6, 0x7824,
-+ 0xc0d4, 0x8006, 0x8006, 0x806f, 0x2071, 0x1100, 0x702c, 0x206a,
-+ 0x2d00, 0x702e, 0x70bc, 0x8000, 0x70be, 0x782c, 0x9094, 0x0780,
-+ 0x190c, 0x5f3b, 0xd0a4, 0x1d58, 0x00ee, 0x2071, 0x1317, 0x703c,
-+ 0x9005, 0x1328, 0x2001, 0x1264, 0x2004, 0x8005, 0x703e, 0x00fe,
-+ 0x002e, 0x00ee, 0x0005, 0x00e6, 0x2071, 0x1100, 0x9016, 0x702c,
-+ 0x2168, 0x6904, 0x206a, 0x8210, 0x2d00, 0x81ff, 0x1dc8, 0x702e,
-+ 0x70bc, 0x9200, 0x70be, 0x00ee, 0x0804, 0x5b1a, 0x6868, 0xd0fc,
-+ 0x1500, 0x00e6, 0x0026, 0x684f, 0x0000, 0x00f6, 0x2079, 0x0050,
-+ 0x2071, 0x1240, 0x206b, 0x0000, 0x7010, 0x9005, 0x1904, 0x5c9c,
-+ 0x782c, 0x908c, 0x0780, 0x190c, 0x5f3b, 0x8004, 0x8004, 0x8004,
-+ 0x9084, 0x0003, 0x0002, 0x5b9a, 0x5c9c, 0x5bb6, 0x5c29, 0x080c,
-+ 0x0d7e, 0x0005, 0x2071, 0x1100, 0x8d07, 0x8005, 0x8005, 0xc0d5,
-+ 0x7822, 0x6804, 0x900d, 0x1120, 0x00fe, 0x002e, 0x00ee, 0x0005,
-+ 0x9016, 0x702c, 0x2168, 0x6904, 0x206a, 0x8210, 0x2d00, 0x81ff,
-+ 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x0c70, 0x2071, 0x1100,
-+ 0x8d07, 0x8005, 0x8005, 0xc0d5, 0x7822, 0x6804, 0x900d, 0x1904,
-+ 0x5c1a, 0x7830, 0x8007, 0x9084, 0x001f, 0x9082, 0x0005, 0x1220,
-+ 0x00fe, 0x002e, 0x00ee, 0x0005, 0x7824, 0x00e6, 0x2071, 0x0040,
-+ 0x712c, 0xd19c, 0x1148, 0x2009, 0x112f, 0x210c, 0x918a, 0x0010,
-+ 0x0218, 0x7022, 0x00ee, 0x0060, 0x00ee, 0xc0d4, 0x8006, 0x8006,
-+ 0x806f, 0x702c, 0x206a, 0x2d00, 0x702e, 0x70bc, 0x8000, 0x70be,
-+ 0x782c, 0x9094, 0x0780, 0x190c, 0x5f3b, 0xd0a4, 0x19e8, 0x0e04,
-+ 0x5c11, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000,
-+ 0x6836, 0x6833, 0x0013, 0x00de, 0x2001, 0x1251, 0x200c, 0xc184,
-+ 0x2102, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c,
-+ 0x0fcd, 0x2009, 0x1262, 0x200b, 0x0000, 0x00fe, 0x002e, 0x00ee,
-+ 0x0005, 0x2001, 0x1251, 0x200c, 0xc185, 0x2102, 0x00fe, 0x002e,
-+ 0x00ee, 0x0005, 0x9016, 0x702c, 0x2168, 0x6904, 0x206a, 0x8210,
-+ 0x2d00, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x0804,
-+ 0x5bcc, 0x00d6, 0x00e6, 0x7824, 0xc0d4, 0x8006, 0x8006, 0x806f,
-+ 0x2071, 0x1100, 0x702c, 0x206a, 0x2d00, 0x702e, 0x70bc, 0x8000,
-+ 0x70be, 0x782c, 0x9094, 0x0780, 0x190c, 0x5f3b, 0xd0a4, 0x1d58,
-+ 0x00ee, 0x0e04, 0x5c71, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6,
-+ 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x7044, 0xc084,
-+ 0x7046, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c,
-+ 0x0fcd, 0x2009, 0x1262, 0x200b, 0x0000, 0x782c, 0x9094, 0x0780,
-+ 0x190c, 0x5f3b, 0xd09c, 0x1188, 0x00de, 0x8d07, 0x8005, 0x8005,
-+ 0xc0d5, 0x7822, 0x6804, 0x900d, 0x11e0, 0x00fe, 0x002e, 0x00ee,
-+ 0x0005, 0x7044, 0xc085, 0x7046, 0x0c40, 0x00de, 0x2d08, 0x7010,
-+ 0x8000, 0x7012, 0x7018, 0x906d, 0x711a, 0x0110, 0x6902, 0x0008,
-+ 0x711e, 0x2168, 0x6804, 0x900d, 0x1120, 0x00fe, 0x002e, 0x00ee,
-+ 0x0005, 0x2071, 0x1100, 0x9016, 0x702c, 0x2168, 0x6904, 0x206a,
-+ 0x8210, 0x2d00, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be,
-+ 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2d08, 0x7010, 0x8000, 0x7012,
-+ 0x7018, 0x906d, 0x711a, 0x0110, 0x6902, 0x0008, 0x711e, 0x2168,
-+ 0x6804, 0x900d, 0x1904, 0x5d11, 0x782c, 0x9094, 0x0780, 0x190c,
-+ 0x5f3b, 0xd09c, 0x11c8, 0x701c, 0x906d, 0x01b0, 0x684c, 0x9005,
-+ 0x1198, 0x7010, 0x8001, 0x7012, 0x1108, 0x701a, 0x2d04, 0x701e,
-+ 0x8d07, 0x8005, 0x8005, 0xc0d5, 0x7822, 0x782c, 0x9094, 0x0780,
-+ 0x190c, 0x5f3b, 0xd09c, 0x0d38, 0x782c, 0x9094, 0x0780, 0x190c,
-+ 0x5f3b, 0xd0a4, 0x05d0, 0x00e6, 0x7824, 0xc0d4, 0x8006, 0x8006,
-+ 0x806f, 0x2071, 0x1100, 0x702c, 0x206a, 0x2d00, 0x702e, 0x70bc,
-+ 0x8000, 0x70be, 0x782c, 0x9094, 0x0780, 0x190c, 0x5f3b, 0xd0a4,
-+ 0x1d58, 0x00ee, 0x0e04, 0x5d0a, 0x7838, 0x7938, 0x910e, 0x1de0,
-+ 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x7044,
-+ 0xc084, 0x7046, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084,
-+ 0x190c, 0x0fcd, 0x2009, 0x1262, 0x200b, 0x0000, 0x00fe, 0x002e,
-+ 0x00ee, 0x0005, 0x7044, 0xc085, 0x7046, 0x00fe, 0x002e, 0x00ee,
-+ 0x0005, 0x00e6, 0x2071, 0x1100, 0x9016, 0x702c, 0x2168, 0x6904,
-+ 0x206a, 0x8210, 0x2d00, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200,
-+ 0x70be, 0x00ee, 0x0804, 0x5cac, 0x2071, 0x1240, 0x206b, 0x0000,
-+ 0x2d08, 0x7010, 0x8000, 0x7012, 0x7018, 0x906d, 0x711a, 0x0110,
-+ 0x6902, 0x0008, 0x711e, 0x2168, 0x6804, 0x900d, 0x1128, 0x1e04,
-+ 0x5d4d, 0x002e, 0x00ee, 0x0005, 0x2071, 0x1100, 0x9016, 0x702c,
-+ 0x2168, 0x6904, 0x206a, 0x8210, 0x2d00, 0x81ff, 0x1dc8, 0x702e,
-+ 0x70bc, 0x9200, 0x70be, 0x0e04, 0x5d39, 0x2071, 0x1240, 0x701c,
-+ 0x2068, 0x684c, 0x900d, 0x0d28, 0x2071, 0x0000, 0x7182, 0x6850,
-+ 0x7032, 0x686c, 0x7086, 0x7036, 0x6870, 0x708a, 0x2091, 0x4080,
-+ 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x0fcd, 0x2071, 0x1240,
-+ 0x080c, 0x5f27, 0x002e, 0x00ee, 0x0005, 0x2071, 0x1240, 0x206b,
-+ 0x0000, 0x2d08, 0x7010, 0x8000, 0x7012, 0x7018, 0x906d, 0x711a,
-+ 0x0110, 0x6902, 0x0008, 0x711e, 0x2168, 0x6804, 0x900d, 0x1118,
-+ 0x002e, 0x00ee, 0x0005, 0x2071, 0x1100, 0x9016, 0x702c, 0x2168,
-+ 0x6904, 0x206a, 0x8210, 0x2d00, 0x81ff, 0x1dc8, 0x702e, 0x70bc,
-+ 0x9200, 0x70be, 0x002e, 0x00ee, 0x0005, 0x0006, 0x687c, 0x0006,
-+ 0x6867, 0x0103, 0x20a9, 0x001c, 0x9d80, 0x001d, 0x20a0, 0x9006,
-+ 0x20e9, 0x0001, 0x4004, 0x000e, 0x9084, 0x00ff, 0x687e, 0x000e,
-+ 0x687a, 0x6982, 0x0005, 0x2071, 0x1240, 0x7004, 0x0002, 0x5db7,
-+ 0x5db8, 0x5efc, 0x5eea, 0x5db5, 0x5efc, 0x080c, 0x0d7e, 0x0005,
-+ 0x2001, 0x1263, 0x2004, 0x0002, 0x5dc2, 0x5dc2, 0x5e1a, 0x5e1b,
-+ 0x5e85, 0x5e1b, 0x0126, 0x2091, 0x8000, 0x1e0c, 0x5f40, 0x701c,
-+ 0x906d, 0x01e0, 0x684c, 0x9005, 0x01d8, 0x0e04, 0x5de6, 0x694c,
-+ 0x2071, 0x0000, 0x7182, 0x6850, 0x7032, 0x686c, 0x7086, 0x7036,
-+ 0x6870, 0x708a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084,
-+ 0x190c, 0x0fcd, 0x2071, 0x1240, 0x080c, 0x5f27, 0x012e, 0x0488,
-+ 0x2001, 0x005b, 0x2004, 0x9094, 0x0780, 0x190c, 0x5f3b, 0xd09c,
-+ 0x2071, 0x1240, 0x1528, 0x2071, 0x1240, 0x700f, 0x0001, 0x6964,
-+ 0x9184, 0x00ff, 0x9086, 0x0003, 0x1130, 0x810f, 0x918c, 0x00ff,
-+ 0x8101, 0x0108, 0x710e, 0x8d07, 0x8005, 0x8005, 0xc0d5, 0x00d6,
-+ 0x2069, 0x0050, 0x6822, 0x00de, 0x2071, 0x1240, 0x701c, 0x2068,
-+ 0x7010, 0x8001, 0x7012, 0x2d04, 0x701e, 0x9005, 0x1108, 0x701a,
-+ 0x012e, 0x0005, 0x0005, 0x00d6, 0x2008, 0x2069, 0x1317, 0x683c,
-+ 0x9005, 0x0760, 0x0158, 0x9186, 0x0003, 0x0540, 0x2001, 0x1113,
-+ 0x2004, 0x2009, 0x13a1, 0x210c, 0x9102, 0x1500, 0x0126, 0x2091,
-+ 0x8000, 0x2069, 0x0050, 0x693c, 0x6838, 0x9106, 0x0190, 0x0e04,
-+ 0x5e4d, 0x2069, 0x0000, 0x6837, 0x8040, 0x6833, 0x0012, 0x6883,
-+ 0x8040, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c,
-+ 0x0fcd, 0x2069, 0x1317, 0x683f, 0xffff, 0x012e, 0x00de, 0x0126,
-+ 0x2091, 0x8000, 0x1e0c, 0x5fb5, 0x701c, 0x906d, 0x0560, 0x2001,
-+ 0x005b, 0x2004, 0x9094, 0x0780, 0x190c, 0x5f3b, 0xd09c, 0x1518,
-+ 0x2071, 0x1240, 0x700f, 0x0001, 0x6964, 0x9184, 0x00ff, 0x9086,
-+ 0x0003, 0x1130, 0x810f, 0x918c, 0x00ff, 0x8101, 0x0108, 0x710e,
-+ 0x8d07, 0x8005, 0x8005, 0xc0d5, 0x00d6, 0x2069, 0x0050, 0x6822,
-+ 0x00de, 0x701c, 0x2068, 0x7010, 0x8001, 0x7012, 0x2d04, 0x701e,
-+ 0x9005, 0x1108, 0x701a, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000,
-+ 0x1e0c, 0x5f40, 0x701c, 0x906d, 0x0548, 0x684c, 0x9086, 0x0004,
-+ 0x1538, 0x0136, 0x0146, 0x0156, 0x2099, 0x1176, 0x20e1, 0x0001,
-+ 0x20a1, 0x1290, 0x20e9, 0x0001, 0x20a9, 0x0004, 0x4003, 0x015e,
-+ 0x014e, 0x013e, 0x2071, 0x1286, 0x9d80, 0x001b, 0x700f, 0x0001,
-+ 0x7012, 0x7017, 0x0002, 0x7007, 0x0002, 0x700b, 0x0000, 0x2e10,
-+ 0x080c, 0x0f22, 0x2071, 0x1240, 0x7007, 0x0003, 0x012e, 0x0005,
-+ 0x2001, 0x005b, 0x2004, 0x9094, 0x0780, 0x190c, 0x5f3b, 0xd09c,
-+ 0x2071, 0x1240, 0x1d98, 0x2071, 0x1240, 0x700f, 0x0001, 0x6964,
-+ 0x9184, 0x00ff, 0x9086, 0x0003, 0x1130, 0x810f, 0x918c, 0x00ff,
-+ 0x8101, 0x0108, 0x710e, 0x8d07, 0x8005, 0x8005, 0xc0d5, 0x00d6,
-+ 0x2069, 0x0050, 0x6822, 0x00de, 0x2071, 0x1240, 0x701c, 0x2068,
-+ 0x7010, 0x8001, 0x7012, 0x2d04, 0x701e, 0x9005, 0x1978, 0x701a,
-+ 0x012e, 0x0005, 0x2001, 0x1288, 0x2004, 0x908e, 0x0100, 0x1120,
-+ 0x7007, 0x0001, 0x04a1, 0x0005, 0x908e, 0x0000, 0x0de0, 0x908e,
-+ 0x0200, 0x1dc8, 0x080c, 0x5f3b, 0x0005, 0x684f, 0x0004, 0x206b,
-+ 0x0000, 0x2d08, 0x2071, 0x1240, 0x7010, 0x8000, 0x7012, 0x7018,
-+ 0x906d, 0x711a, 0x0110, 0x6902, 0x0008, 0x711e, 0x2168, 0x6804,
-+ 0x900d, 0x1118, 0x002e, 0x00ee, 0x0005, 0x2071, 0x1100, 0x9016,
-+ 0x702c, 0x2168, 0x6904, 0x206a, 0x8210, 0x2d00, 0x81ff, 0x1dc8,
-+ 0x702e, 0x70bc, 0x9200, 0x70be, 0x002e, 0x00ee, 0x0005, 0x0126,
-+ 0x2091, 0x8000, 0x701c, 0x906d, 0x0160, 0x7010, 0x8001, 0x7012,
-+ 0x2d04, 0x701e, 0x9005, 0x1108, 0x701a, 0x012e, 0x080c, 0x0ecf,
-+ 0x0005, 0x012e, 0x0005, 0x2011, 0x8004, 0x080c, 0x3f23, 0x0cf8,
-+ 0x00f6, 0x2079, 0x0050, 0x7044, 0xd084, 0x01d8, 0xc084, 0x7046,
-+ 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836,
-+ 0x6833, 0x0013, 0x00de, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004,
-+ 0xd084, 0x190c, 0x0fcd, 0x2009, 0x1262, 0x200b, 0x0000, 0x00fe,
-+ 0x0005, 0x782c, 0x9094, 0x0780, 0x19b1, 0xd0a4, 0x0dc0, 0x2001,
-+ 0x1263, 0x2004, 0x9086, 0x0004, 0x0140, 0x2009, 0x1262, 0x2104,
-+ 0x8000, 0x200a, 0x9082, 0x000f, 0x0e50, 0x00e6, 0x2071, 0x1100,
-+ 0x7824, 0x00e6, 0x2071, 0x0040, 0x712c, 0xd19c, 0x1148, 0x2009,
-+ 0x112f, 0x210c, 0x918a, 0x0010, 0x0218, 0x7022, 0x00ee, 0x0060,
-+ 0x00ee, 0xc0d4, 0x8006, 0x8006, 0x806f, 0x702c, 0x206a, 0x2d00,
-+ 0x702e, 0x70bc, 0x8000, 0x70be, 0x782c, 0x9094, 0x0780, 0x190c,
-+ 0x5f3b, 0xd0a4, 0x19e8, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6,
-+ 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x2091, 0x4080,
-+ 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x0fcd, 0x2009, 0x1262,
-+ 0x200b, 0x0000, 0x00ee, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x0050,
-+ 0x7044, 0xd084, 0x01b8, 0xc084, 0x7046, 0x7838, 0x7938, 0x910e,
-+ 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de,
-+ 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x0fcd,
-+ 0x00fe, 0x0005, 0x782c, 0x9094, 0x0780, 0x190c, 0x5f3b, 0xd0a4,
-+ 0x0db8, 0x00e6, 0x2071, 0x1100, 0x7824, 0xc0d4, 0x8006, 0x8006,
-+ 0x806f, 0x702c, 0x206a, 0x2d00, 0x702e, 0x70bc, 0x8000, 0x70be,
-+ 0x782c, 0x9094, 0x0780, 0x190c, 0x5f3b, 0xd0a4, 0x1d68, 0x00d6,
-+ 0x2069, 0x0050, 0x693c, 0x2069, 0x1263, 0x6808, 0x690a, 0x2069,
-+ 0x1317, 0x9102, 0x1118, 0x683c, 0x9005, 0x1328, 0x2001, 0x1264,
-+ 0x200c, 0x810d, 0x693e, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x7090,
-+ 0x908a, 0x0029, 0x1a0c, 0x0d7e, 0x9082, 0x001d, 0x001b, 0x6027,
-+ 0x1e00, 0x0005, 0x60da, 0x6064, 0x6080, 0x60a8, 0x60c9, 0x6109,
-+ 0x611b, 0x6080, 0x60f1, 0x601f, 0x604d, 0x601e, 0x0005, 0x00d6,
-+ 0x2069, 0x0200, 0x6804, 0x9005, 0x1180, 0x6808, 0x9005, 0x1518,
-+ 0x7093, 0x0028, 0x2069, 0x12c9, 0x2d04, 0x7002, 0x080c, 0x6404,
-+ 0x6028, 0x9085, 0x0600, 0x602a, 0x00b0, 0x7093, 0x0028, 0x2069,
-+ 0x12c9, 0x2d04, 0x7002, 0x6028, 0x9085, 0x0600, 0x602a, 0x00e6,
-+ 0x0036, 0x0046, 0x0056, 0x2071, 0x1347, 0x080c, 0x1577, 0x005e,
-+ 0x004e, 0x003e, 0x00ee, 0x00de, 0x0005, 0x00d6, 0x2069, 0x0200,
-+ 0x6804, 0x9005, 0x1178, 0x6808, 0x9005, 0x1160, 0x7093, 0x0028,
-+ 0x2069, 0x12c9, 0x2d04, 0x7002, 0x080c, 0x6492, 0x6028, 0x9085,
-+ 0x0600, 0x602a, 0x00de, 0x0005, 0x0006, 0x2001, 0x0090, 0x080c,
-+ 0x2401, 0x000e, 0x6124, 0xd1e4, 0x1190, 0x080c, 0x618c, 0xd1d4,
-+ 0x1160, 0xd1dc, 0x1138, 0xd1cc, 0x0150, 0x7093, 0x0020, 0x080c,
-+ 0x618c, 0x0028, 0x7093, 0x001d, 0x0010, 0x7093, 0x001f, 0x0005,
-+ 0x2001, 0x0088, 0x080c, 0x2401, 0x6124, 0xd1cc, 0x11d8, 0xd1dc,
-+ 0x11b0, 0xd1e4, 0x1188, 0x9184, 0x1e00, 0x11c8, 0x60e3, 0x0001,
-+ 0x600c, 0xc0b4, 0x600e, 0x080c, 0x6314, 0x2001, 0x0080, 0x080c,
-+ 0x2401, 0x7093, 0x0028, 0x0058, 0x7093, 0x001e, 0x0040, 0x7093,
-+ 0x001d, 0x0028, 0x7093, 0x0020, 0x0010, 0x7093, 0x001f, 0x0005,
-+ 0x60e3, 0x0001, 0x600c, 0xc0b4, 0x600e, 0x080c, 0x6314, 0x2001,
-+ 0x0080, 0x080c, 0x2401, 0x6124, 0xd1d4, 0x1180, 0xd1dc, 0x1158,
-+ 0xd1e4, 0x1130, 0x9184, 0x1e00, 0x1158, 0x7093, 0x0028, 0x0040,
-+ 0x7093, 0x001e, 0x0028, 0x7093, 0x001d, 0x0010, 0x7093, 0x001f,
-+ 0x0005, 0x2001, 0x00a0, 0x080c, 0x2401, 0x6124, 0xd1dc, 0x1138,
-+ 0xd1e4, 0x0138, 0x080c, 0x15a1, 0x7093, 0x001e, 0x0010, 0x7093,
-+ 0x001d, 0x0005, 0x080c, 0x6205, 0x6124, 0xd1dc, 0x1188, 0x080c,
-+ 0x618c, 0x0016, 0x080c, 0x15a1, 0x001e, 0xd1d4, 0x1128, 0xd1e4,
-+ 0x0138, 0x7093, 0x001e, 0x0020, 0x7093, 0x001f, 0x080c, 0x618c,
-+ 0x0005, 0x0006, 0x2001, 0x00a0, 0x080c, 0x2401, 0x000e, 0x6124,
-+ 0xd1d4, 0x1160, 0xd1cc, 0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0140,
-+ 0x7093, 0x001e, 0x0028, 0x7093, 0x001d, 0x0010, 0x7093, 0x0021,
-+ 0x0005, 0x080c, 0x6205, 0x6124, 0xd1d4, 0x1150, 0xd1dc, 0x1128,
-+ 0xd1e4, 0x0140, 0x7093, 0x001e, 0x0028, 0x7093, 0x001d, 0x0010,
-+ 0x7093, 0x001f, 0x0005, 0x0006, 0x2001, 0x0090, 0x080c, 0x2401,
-+ 0x000e, 0x6124, 0xd1d4, 0x1178, 0xd1cc, 0x1150, 0xd1dc, 0x1128,
-+ 0xd1e4, 0x0158, 0x7093, 0x001e, 0x0040, 0x7093, 0x001d, 0x0028,
-+ 0x7093, 0x0020, 0x0010, 0x7093, 0x001f, 0x0005, 0x0016, 0x00c6,
-+ 0x00d6, 0x00e6, 0x0126, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071,
-+ 0x1100, 0x2091, 0x8000, 0x080c, 0x62e4, 0x11f8, 0x2001, 0x110c,
-+ 0x200c, 0xd1b4, 0x01d0, 0xc1b4, 0x2102, 0x6027, 0x0200, 0x080c,
-+ 0x2340, 0x6024, 0xd0cc, 0x0168, 0x2001, 0x00a0, 0x080c, 0x2401,
-+ 0x2001, 0x12a8, 0x2003, 0x0001, 0x2001, 0x1100, 0x2003, 0x0001,
-+ 0x0428, 0x6028, 0xc0cd, 0x602a, 0x0408, 0x080c, 0x6300, 0x0150,
-+ 0x080c, 0x62f6, 0x1138, 0x2001, 0x0001, 0x080c, 0x1f11, 0x080c,
-+ 0x62be, 0x00a0, 0x080c, 0x6202, 0x0178, 0x2001, 0x0001, 0x080c,
-+ 0x1f11, 0x7090, 0x9086, 0x001e, 0x0120, 0x7090, 0x9086, 0x0022,
-+ 0x1118, 0x7093, 0x0025, 0x0010, 0x7093, 0x0021, 0x012e, 0x00ee,
-+ 0x00de, 0x00ce, 0x001e, 0x0005, 0x0026, 0x2011, 0x619d, 0x080c,
-+ 0x72bf, 0x002e, 0x0016, 0x0026, 0x2009, 0x0064, 0x2011, 0x619d,
-+ 0x080c, 0x72b6, 0x002e, 0x001e, 0x0005, 0x00e6, 0x00f6, 0x0016,
-+ 0x080c, 0x85a2, 0x2071, 0x1100, 0x080c, 0x6136, 0x001e, 0x00fe,
-+ 0x00ee, 0x0005, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6,
-+ 0x00f6, 0x0126, 0x080c, 0x85a2, 0x2061, 0x0100, 0x2069, 0x0140,
-+ 0x2071, 0x1100, 0x2091, 0x8000, 0x6028, 0xc09c, 0x602a, 0x2011,
-+ 0x0003, 0x080c, 0x88e2, 0x2011, 0x0002, 0x080c, 0x88ec, 0x080c,
-+ 0x87a2, 0x080c, 0x7271, 0x0036, 0x901e, 0x080c, 0x8847, 0x003e,
-+ 0x60e3, 0x0000, 0x080c, 0xc44e, 0x080c, 0xc469, 0x2009, 0x0004,
-+ 0x080c, 0x2355, 0x080c, 0x2261, 0x2001, 0x1100, 0x2003, 0x0004,
-+ 0x6027, 0x0008, 0x080c, 0x0b68, 0x2001, 0x0001, 0x080c, 0x1f11,
-+ 0x012e, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e,
-+ 0x0005, 0x0026, 0x00e6, 0x2011, 0x61aa, 0x2071, 0x1317, 0x701c,
-+ 0x9206, 0x1118, 0x7018, 0x9005, 0x0110, 0x9085, 0x0001, 0x00ee,
-+ 0x002e, 0x0005, 0x6020, 0xd09c, 0x0005, 0x6800, 0x9084, 0xfffe,
-+ 0x9086, 0x00c0, 0x0170, 0x2001, 0x00c0, 0x080c, 0x2401, 0x0156,
-+ 0x20a9, 0x002d, 0x1d04, 0x6212, 0x2091, 0x6000, 0x1f04, 0x6212,
-+ 0x015e, 0x0005, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069,
-+ 0x0140, 0x2071, 0x1100, 0x2001, 0x12a8, 0x200c, 0x9186, 0x0000,
-+ 0x0158, 0x9186, 0x0001, 0x0158, 0x9186, 0x0002, 0x0158, 0x9186,
-+ 0x0003, 0x0158, 0x0804, 0x62ac, 0x7093, 0x0022, 0x0040, 0x7093,
-+ 0x0021, 0x0028, 0x7093, 0x0023, 0x0010, 0x7093, 0x0024, 0x60e3,
-+ 0x0000, 0x6887, 0x0001, 0x2001, 0x0001, 0x080c, 0x1fb8, 0x0026,
-+ 0x2011, 0x0003, 0x080c, 0x88e2, 0x2011, 0x0002, 0x080c, 0x88ec,
-+ 0x080c, 0x87a2, 0x0036, 0x901e, 0x080c, 0x8847, 0x003e, 0x002e,
-+ 0x7000, 0x908e, 0x0004, 0x0118, 0x602b, 0x0028, 0x0010, 0x602b,
-+ 0x0020, 0x0156, 0x0126, 0x2091, 0x8000, 0x20a9, 0x0005, 0x6024,
-+ 0xd0ac, 0x0120, 0x012e, 0x015e, 0x0804, 0x62ba, 0x6800, 0x9084,
-+ 0x00a1, 0xc0bd, 0x6802, 0x080c, 0x2340, 0x6904, 0xd1d4, 0x1140,
-+ 0x2001, 0x0100, 0x080c, 0x2401, 0x1f04, 0x6267, 0x080c, 0x633e,
-+ 0x012e, 0x015e, 0x080c, 0x62f6, 0x01a8, 0x6044, 0x9005, 0x0168,
-+ 0x6050, 0x0006, 0x9085, 0x0020, 0x6052, 0x080c, 0x633e, 0x9006,
-+ 0x8001, 0x1df0, 0x000e, 0x6052, 0x0028, 0x6804, 0xd0d4, 0x1110,
-+ 0x080c, 0x633e, 0x0016, 0x0026, 0x7000, 0x908e, 0x0004, 0x0130,
-+ 0x2009, 0x00c8, 0x2011, 0x61aa, 0x080c, 0x7283, 0x002e, 0x001e,
-+ 0x2001, 0x12a8, 0x2003, 0x0004, 0x080c, 0x6007, 0x080c, 0x62f6,
-+ 0x0148, 0x6804, 0xd0d4, 0x1130, 0xd0dc, 0x1100, 0x2001, 0x12a8,
-+ 0x2003, 0x0000, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x00c6, 0x00d6,
-+ 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1100, 0x2001,
-+ 0x12a7, 0x2003, 0x0000, 0x2001, 0x1298, 0x2003, 0x0000, 0x9006,
-+ 0x7092, 0x60e2, 0x6886, 0x080c, 0x1fb8, 0x9006, 0x080c, 0x2401,
-+ 0x6043, 0x0090, 0x6043, 0x0010, 0x6027, 0xffff, 0x602b, 0x182f,
-+ 0x00ee, 0x00de, 0x00ce, 0x0005, 0x0006, 0x2001, 0x12a7, 0x2004,
-+ 0x9086, 0xaaaa, 0x000e, 0x0005, 0x0006, 0x2001, 0x1172, 0x2004,
-+ 0x9084, 0x0030, 0x9086, 0x0000, 0x000e, 0x0005, 0x0006, 0x2001,
-+ 0x1172, 0x2004, 0x9084, 0x0030, 0x9086, 0x0030, 0x000e, 0x0005,
-+ 0x0006, 0x2001, 0x1172, 0x2004, 0x9084, 0x0030, 0x9086, 0x0010,
-+ 0x000e, 0x0005, 0x0006, 0x2001, 0x1172, 0x2004, 0x9084, 0x0030,
-+ 0x9086, 0x0020, 0x000e, 0x0005, 0x0036, 0x0016, 0x2001, 0x110c,
-+ 0x2004, 0x908c, 0x0013, 0x0190, 0x9084, 0x0011, 0x0120, 0x080c,
-+ 0x1fd8, 0x900e, 0x0028, 0x080c, 0x58c6, 0x1dc8, 0x2009, 0x0002,
-+ 0x2019, 0x0028, 0x080c, 0x2831, 0x9006, 0x0019, 0x001e, 0x003e,
-+ 0x0005, 0x00e6, 0x2071, 0x110c, 0x2e04, 0x0118, 0x9085, 0x0010,
-+ 0x0010, 0x9084, 0xffef, 0x2072, 0x00ee, 0x0005, 0x6050, 0x0006,
-+ 0x60ec, 0x0006, 0x600c, 0x0006, 0x6004, 0x0006, 0x6028, 0x0006,
-+ 0x0016, 0x6138, 0x6050, 0x9084, 0xfbff, 0x9085, 0x2000, 0x6052,
-+ 0x613a, 0x20a9, 0x0012, 0x1d04, 0x6353, 0x2091, 0x6000, 0x1f04,
-+ 0x6353, 0x602f, 0x0100, 0x602f, 0x0000, 0x6050, 0x9085, 0x0400,
-+ 0x9084, 0xdfff, 0x6052, 0x613a, 0x001e, 0x602f, 0x0040, 0x602f,
-+ 0x0000, 0x000e, 0x602a, 0x000e, 0x6006, 0x000e, 0x600e, 0x000e,
-+ 0x60ee, 0x60e3, 0x0000, 0x6887, 0x0001, 0x2001, 0x0001, 0x080c,
-+ 0x1fb8, 0x2001, 0x00a0, 0x080c, 0x2401, 0x000e, 0x6052, 0x0005,
-+ 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061,
-+ 0x0100, 0x2069, 0x0140, 0x2071, 0x1100, 0x6020, 0x9084, 0x0080,
-+ 0x0138, 0x2001, 0x110c, 0x200c, 0xc1c5, 0x2102, 0x0804, 0x63fc,
-+ 0x2001, 0x110c, 0x200c, 0xc1c4, 0x2102, 0x6028, 0x9084, 0xe1ff,
-+ 0x602a, 0x6027, 0x0200, 0x2001, 0x0090, 0x080c, 0x2401, 0x20a9,
-+ 0x0366, 0x6024, 0xd0cc, 0x1510, 0x1d04, 0x63a9, 0x2091, 0x6000,
-+ 0x1f04, 0x63a9, 0x2011, 0x0003, 0x080c, 0x88e2, 0x2011, 0x0002,
-+ 0x080c, 0x88ec, 0x080c, 0x87a2, 0x901e, 0x080c, 0x8847, 0x2001,
-+ 0x00a0, 0x080c, 0x2401, 0x2001, 0x12a8, 0x2003, 0x0001, 0x2001,
-+ 0x1100, 0x2003, 0x0001, 0x9085, 0x0001, 0x0470, 0x86ff, 0x1110,
-+ 0x080c, 0x15a1, 0x60e3, 0x0000, 0x2001, 0x1298, 0x2004, 0x080c,
-+ 0x1fb8, 0x60e2, 0x2001, 0x0080, 0x080c, 0x2401, 0x20a9, 0x0366,
-+ 0x6027, 0x1e00, 0x2009, 0x1e00, 0x080c, 0x2340, 0x6024, 0x910c,
-+ 0x0138, 0x1d04, 0x63e0, 0x2091, 0x6000, 0x1f04, 0x63e0, 0x0810,
-+ 0x6028, 0x9085, 0x1e00, 0x602a, 0x70ac, 0x9005, 0x1118, 0x6887,
-+ 0x0001, 0x0008, 0x6886, 0x9006, 0x00ee, 0x00de, 0x00ce, 0x003e,
-+ 0x002e, 0x001e, 0x015e, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036,
-+ 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2071, 0x1100, 0x2069,
-+ 0x0140, 0x6020, 0x9084, 0x00c0, 0x0120, 0x6884, 0x9005, 0x1904,
-+ 0x6458, 0x2001, 0x0088, 0x080c, 0x2401, 0x9006, 0x60e2, 0x6886,
-+ 0x080c, 0x1fb8, 0x2069, 0x0200, 0x6804, 0x9005, 0x1118, 0x6808,
-+ 0x9005, 0x01c0, 0x6028, 0x9084, 0xfbff, 0x602a, 0x6027, 0x0400,
-+ 0x2069, 0x12c9, 0x7000, 0x206a, 0x7093, 0x0026, 0x7003, 0x0001,
-+ 0x20a9, 0x0002, 0x1d04, 0x643a, 0x2091, 0x6000, 0x1f04, 0x643a,
-+ 0x0804, 0x648a, 0x2069, 0x0140, 0x20a9, 0x0384, 0x6027, 0x1e00,
-+ 0x2009, 0x1e00, 0x080c, 0x2340, 0x6024, 0x910c, 0x0528, 0x9084,
-+ 0x1a00, 0x1510, 0x1d04, 0x6446, 0x2091, 0x6000, 0x1f04, 0x6446,
-+ 0x2011, 0x0003, 0x080c, 0x88e2, 0x2011, 0x0002, 0x080c, 0x88ec,
-+ 0x080c, 0x87a2, 0x901e, 0x080c, 0x8847, 0x2001, 0x00a0, 0x080c,
-+ 0x2401, 0x2001, 0x12a8, 0x2003, 0x0001, 0x2001, 0x1100, 0x2003,
-+ 0x0001, 0x9085, 0x0001, 0x00b0, 0x2001, 0x0080, 0x080c, 0x2401,
-+ 0x2069, 0x0140, 0x60e3, 0x0000, 0x70ac, 0x9005, 0x1118, 0x6887,
-+ 0x0001, 0x0008, 0x6886, 0x2001, 0x1298, 0x2004, 0x080c, 0x1fb8,
-+ 0x60e2, 0x9006, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e,
-+ 0x015e, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6,
-+ 0x00e6, 0x2061, 0x0100, 0x2071, 0x1100, 0x6020, 0x9084, 0x00c0,
-+ 0x01e8, 0x2011, 0x0003, 0x080c, 0x88e2, 0x2011, 0x0002, 0x080c,
-+ 0x88ec, 0x080c, 0x87a2, 0x901e, 0x080c, 0x8847, 0x2069, 0x0140,
-+ 0x2001, 0x00a0, 0x080c, 0x2401, 0x2001, 0x12a8, 0x2003, 0x0001,
-+ 0x2001, 0x1100, 0x2003, 0x0001, 0x0804, 0x6529, 0x2001, 0x110c,
-+ 0x200c, 0xd1b4, 0x1160, 0xc1b5, 0x2102, 0x080c, 0x6192, 0x2069,
-+ 0x0140, 0x2001, 0x0080, 0x080c, 0x2401, 0x60e3, 0x0000, 0x2069,
-+ 0x0200, 0x6804, 0x9005, 0x1118, 0x6808, 0x9005, 0x0180, 0x6028,
-+ 0x9084, 0xfdff, 0x602a, 0x6027, 0x0200, 0x2069, 0x12c9, 0x7000,
-+ 0x206a, 0x7093, 0x0027, 0x7003, 0x0001, 0x0804, 0x6529, 0x6027,
-+ 0x1e00, 0x2009, 0x1e00, 0x080c, 0x2340, 0x6024, 0x910c, 0x01c8,
-+ 0x9084, 0x1c00, 0x11b0, 0x1d04, 0x64e7, 0x0006, 0x0016, 0x00c6,
-+ 0x00d6, 0x00e6, 0x080c, 0x715a, 0x00ee, 0x00de, 0x00ce, 0x001e,
-+ 0x000e, 0x00e6, 0x2071, 0x1317, 0x7018, 0x00ee, 0x9005, 0x19f8,
-+ 0x0500, 0x0026, 0x2011, 0x61aa, 0x080c, 0x71fa, 0x2011, 0x619d,
-+ 0x080c, 0x72bf, 0x002e, 0x2069, 0x0140, 0x60e3, 0x0000, 0x70ac,
-+ 0x9005, 0x1118, 0x6887, 0x0001, 0x0008, 0x6886, 0x2001, 0x1298,
-+ 0x2004, 0x080c, 0x1fb8, 0x60e2, 0x2001, 0x110c, 0x200c, 0xc1b4,
-+ 0x2102, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x015e,
-+ 0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x0046, 0x00c6, 0x00e6,
-+ 0x2061, 0x0100, 0x2071, 0x1100, 0x7130, 0xd184, 0x1170, 0x080c,
-+ 0x2987, 0x0138, 0xc18d, 0x7132, 0x2011, 0x1153, 0x2214, 0xd2ac,
-+ 0x1120, 0x7030, 0xd08c, 0x0904, 0x658f, 0x2011, 0x1153, 0x220c,
-+ 0xd1a4, 0x0528, 0x0016, 0x2019, 0x000e, 0x080c, 0xc0b9, 0x0156,
-+ 0x20a9, 0x007f, 0x900e, 0x9186, 0x007e, 0x01a0, 0x9186, 0x0080,
-+ 0x0188, 0x080c, 0x5608, 0x1170, 0x8127, 0x9006, 0x0016, 0x2009,
-+ 0x000e, 0x080c, 0xc12f, 0x2009, 0x0001, 0x2011, 0x0100, 0x080c,
-+ 0x73af, 0x001e, 0x8108, 0x1f04, 0x655b, 0x015e, 0x001e, 0xd1ac,
-+ 0x1148, 0x0016, 0x2009, 0x0002, 0x2019, 0x0004, 0x080c, 0x2831,
-+ 0x001e, 0x0068, 0x0156, 0x20a9, 0x007f, 0x900e, 0x080c, 0x5608,
-+ 0x1110, 0x080c, 0x5100, 0x8108, 0x1f04, 0x6586, 0x015e, 0x080c,
-+ 0x15a1, 0x2011, 0x0003, 0x080c, 0x88e2, 0x2011, 0x0002, 0x080c,
-+ 0x88ec, 0x080c, 0x87a2, 0x0036, 0x901e, 0x080c, 0x8847, 0x003e,
-+ 0x60e3, 0x0000, 0x2001, 0x1100, 0x2003, 0x0001, 0x080c, 0x621a,
-+ 0x00ee, 0x00ce, 0x004e, 0x003e, 0x002e, 0x001e, 0x015e, 0x0005,
-+ 0x2071, 0x120c, 0x7003, 0x0000, 0x7007, 0x0000, 0x708f, 0x0000,
-+ 0x7093, 0x0001, 0x70c7, 0x0000, 0x0005, 0x00e6, 0x2071, 0x0040,
-+ 0x6848, 0x9005, 0x1120, 0x9085, 0x0001, 0x0804, 0x660e, 0x6840,
-+ 0x9005, 0x01d8, 0x900e, 0x0156, 0x20a9, 0x0006, 0x8003, 0x2011,
-+ 0x0100, 0x2214, 0x9296, 0x0008, 0x1110, 0x818d, 0x0010, 0x81f5,
-+ 0x3e08, 0x1f04, 0x65ce, 0x015e, 0x6a50, 0x9200, 0x7002, 0x6854,
-+ 0x9101, 0x7006, 0x9006, 0x7012, 0x7016, 0x6850, 0x7002, 0x6854,
-+ 0x7006, 0x6858, 0x700a, 0x685c, 0x700e, 0x6840, 0x9005, 0x1110,
-+ 0x7012, 0x7016, 0x6848, 0x701a, 0x701c, 0x9085, 0x0040, 0x701e,
-+ 0x2001, 0x0019, 0x7036, 0x702b, 0x0001, 0x2001, 0x0004, 0x200c,
-+ 0x918c, 0xfff7, 0x918d, 0x8000, 0x2102, 0x00d6, 0x2069, 0x120c,
-+ 0x6807, 0x0001, 0x00de, 0x080c, 0x6b26, 0x9006, 0x00ee, 0x0005,
-+ 0x2079, 0x0040, 0x2071, 0x120c, 0x7004, 0x0002, 0x6620, 0x6621,
-+ 0x6bb3, 0x66b3, 0x67a9, 0x661e, 0x661e, 0x67d2, 0x080c, 0x0d7e,
-+ 0x0005, 0x2079, 0x0040, 0x782c, 0x908c, 0x0780, 0x190c, 0x6bb4,
-+ 0xd0a4, 0x0508, 0x7824, 0xc0d4, 0x8006, 0x8006, 0x806f, 0x9006,
-+ 0x6802, 0x6806, 0x6864, 0x9084, 0x00ff, 0x908a, 0x0040, 0x12c0,
-+ 0x04d3, 0x2001, 0x1100, 0x200c, 0x9186, 0x0003, 0x1160, 0x7104,
-+ 0x9186, 0x0004, 0x0140, 0x9186, 0x0007, 0x0128, 0x9186, 0x0003,
-+ 0x19d0, 0x080c, 0x66b3, 0x782c, 0xd09c, 0x090c, 0x6b26, 0x0005,
-+ 0x9082, 0x005a, 0x1218, 0x2100, 0x0023, 0x0c18, 0x080c, 0x66ec,
-+ 0x0c90, 0x66ec, 0x66ec, 0x66ec, 0x66ec, 0x66ec, 0x66ec, 0x66ec,
-+ 0x66ec, 0x670e, 0x66ec, 0x66ec, 0x66ec, 0x66ec, 0x66ec, 0x66ec,
-+ 0x66ec, 0x66ec, 0x66ec, 0x66ec, 0x66ec, 0x66ec, 0x66ec, 0x66ec,
-+ 0x66ec, 0x66ec, 0x66ec, 0x66ec, 0x66ec, 0x66f8, 0x66ec, 0x688e,
-+ 0x66ec, 0x66ec, 0x66ec, 0x66ec, 0x66ec, 0x66f8, 0x68cf, 0x6910,
-+ 0x6957, 0x696b, 0x66ec, 0x66ec, 0x670e, 0x66f8, 0x66ec, 0x66ec,
-+ 0x6782, 0x6a16, 0x6a31, 0x66ec, 0x670e, 0x66ec, 0x66ec, 0x66ec,
-+ 0x66ec, 0x6778, 0x6a31, 0x66ec, 0x66ec, 0x66ec, 0x66ec, 0x66ec,
-+ 0x66ec, 0x66ec, 0x66ec, 0x66ec, 0x6722, 0x66ec, 0x66ec, 0x66ec,
-+ 0x66ec, 0x66ec, 0x66ec, 0x66ec, 0x66ec, 0x66ec, 0x6b59, 0x66ec,
-+ 0x66ec, 0x66ec, 0x66ec, 0x66ec, 0x6736, 0x66ec, 0x66ec, 0x66ec,
-+ 0x66ec, 0x66ec, 0x66ec, 0x2079, 0x0040, 0x7004, 0x9086, 0x0003,
-+ 0x11b0, 0x782c, 0x080c, 0x6b52, 0xd0a4, 0x0188, 0x7824, 0xc0d4,
-+ 0x8006, 0x8006, 0x806f, 0x9006, 0x6802, 0x6806, 0x6864, 0x9084,
-+ 0x00ff, 0x908a, 0x001a, 0x1210, 0x002b, 0x0c38, 0x00e9, 0x080c,
-+ 0x6b26, 0x0005, 0x66ec, 0x66f8, 0x687a, 0x66ec, 0x66f8, 0x66ec,
-+ 0x66f8, 0x66f8, 0x66ec, 0x66f8, 0x687a, 0x66f8, 0x66f8, 0x66f8,
-+ 0x66f8, 0x66f8, 0x66ec, 0x66f8, 0x687a, 0x66ec, 0x66ec, 0x66f8,
-+ 0x66ec, 0x66ec, 0x66ec, 0x66f8, 0x00e6, 0x2071, 0x120c, 0x2009,
-+ 0x0400, 0x0071, 0x00ee, 0x0005, 0x2009, 0x1000, 0x0049, 0x0005,
-+ 0x2009, 0x2000, 0x0029, 0x0005, 0x2009, 0x0800, 0x0009, 0x0005,
-+ 0x7007, 0x0001, 0x6868, 0x9084, 0x00ff, 0x9105, 0x686a, 0x0126,
-+ 0x2091, 0x8000, 0x080c, 0x5b76, 0x012e, 0x0005, 0x6864, 0x8007,
-+ 0x9084, 0x00ff, 0x0d08, 0x8001, 0x1120, 0x7007, 0x0001, 0x0804,
-+ 0x683b, 0x7007, 0x0003, 0x7012, 0x2d00, 0x7016, 0x701a, 0x704b,
-+ 0x683b, 0x0005, 0x6864, 0x8007, 0x9084, 0x00ff, 0x0968, 0x8001,
-+ 0x1120, 0x7007, 0x0001, 0x0804, 0x6853, 0x7007, 0x0003, 0x7012,
-+ 0x2d00, 0x7016, 0x701a, 0x704b, 0x6853, 0x0005, 0x6864, 0x8007,
-+ 0x9084, 0x00ff, 0x9086, 0x0001, 0x1904, 0x66f4, 0x7007, 0x0001,
-+ 0x2009, 0x1133, 0x210c, 0x81ff, 0x11a8, 0x6868, 0x9084, 0x00ff,
-+ 0x686a, 0x6883, 0x0000, 0x080c, 0x52f4, 0x1108, 0x0005, 0x0126,
-+ 0x2091, 0x8000, 0x6867, 0x0139, 0x687a, 0x6982, 0x080c, 0x5b76,
-+ 0x012e, 0x0ca0, 0x6994, 0x9186, 0x0071, 0x0d38, 0x9186, 0x0064,
-+ 0x0d20, 0x9186, 0x007c, 0x0d08, 0x9186, 0x0028, 0x09f0, 0x9186,
-+ 0x0038, 0x09d8, 0x9186, 0x0078, 0x09c0, 0x9186, 0x005f, 0x09a8,
-+ 0x6897, 0x4005, 0x689b, 0x0001, 0x2001, 0x0030, 0x900e, 0x08b8,
-+ 0x687c, 0x9084, 0x00c0, 0x9086, 0x00c0, 0x1120, 0x7007, 0x0001,
-+ 0x0804, 0x6a48, 0x2d00, 0x7016, 0x701a, 0x20a9, 0x0004, 0x20e1,
-+ 0x0001, 0x20e9, 0x0001, 0x9080, 0x0030, 0x2098, 0x20a1, 0x1239,
-+ 0x4003, 0x6888, 0x7012, 0x9082, 0x0401, 0x1a04, 0x66fc, 0x6ab4,
-+ 0x928a, 0x0002, 0x1a04, 0x66fc, 0x82ff, 0x1138, 0x68b8, 0x69bc,
-+ 0x9105, 0x0118, 0x2001, 0x680e, 0x0018, 0x9280, 0x6804, 0x2005,
-+ 0x70ce, 0x7010, 0x9015, 0x0904, 0x67f0, 0x080c, 0x0e9d, 0x1118,
-+ 0x7007, 0x0004, 0x0005, 0x2d00, 0x7022, 0x70cc, 0x2060, 0xe000,
-+ 0x6866, 0xe004, 0x9d00, 0x709e, 0x709b, 0x0001, 0xe008, 0x920a,
-+ 0x1210, 0x900e, 0x2200, 0x7112, 0xe20c, 0x8003, 0x800b, 0x9296,
-+ 0x0004, 0x0108, 0x9108, 0x71a2, 0x810b, 0x71a6, 0x9e90, 0x0023,
-+ 0x080c, 0x0f22, 0x7094, 0x908e, 0x0100, 0x0170, 0x9086, 0x0200,
-+ 0x0118, 0x7007, 0x0007, 0x0005, 0x7020, 0x2068, 0x080c, 0x0ecf,
-+ 0x7014, 0x2068, 0x0804, 0x66fc, 0x7020, 0x2068, 0x7018, 0x6802,
-+ 0x6807, 0x0000, 0x2d08, 0x2068, 0x6906, 0x711a, 0x0804, 0x67a9,
-+ 0x7014, 0x2068, 0x7007, 0x0001, 0x68b4, 0x9005, 0x1128, 0x68b8,
-+ 0x69bc, 0x9105, 0x0108, 0x00b1, 0x6864, 0x9084, 0x00ff, 0x9086,
-+ 0x001e, 0x0904, 0x6a48, 0x04b8, 0x6806, 0x680a, 0x0002, 0x001d,
-+ 0x0007, 0x0004, 0x000a, 0x001b, 0x0005, 0x0006, 0x000a, 0x001d,
-+ 0x0005, 0x0004, 0x00f6, 0x00e6, 0x00c6, 0x0076, 0x0066, 0x6fb8,
-+ 0x6ebc, 0x6804, 0x2060, 0x9cf0, 0x002d, 0x9cf8, 0x0033, 0x2009,
-+ 0x0005, 0x700c, 0x7816, 0x7008, 0x7812, 0x7004, 0x7806, 0x7000,
-+ 0x7802, 0x7e0e, 0x7f0a, 0x8109, 0x0128, 0x9ef2, 0x0004, 0x9ffa,
-+ 0x0006, 0x0c78, 0x6004, 0x9065, 0x1d30, 0x006e, 0x007e, 0x00ce,
-+ 0x00ee, 0x00fe, 0x0005, 0x2009, 0x1133, 0x210c, 0x81ff, 0x1178,
-+ 0x080c, 0x5151, 0x1108, 0x0005, 0x080c, 0x5d95, 0x0126, 0x2091,
-+ 0x8000, 0x080c, 0xac01, 0x080c, 0x5b76, 0x012e, 0x0ca0, 0x2001,
-+ 0x0028, 0x900e, 0x0c88, 0x2009, 0x1133, 0x210c, 0x81ff, 0x11d8,
-+ 0x6888, 0x9005, 0x01e0, 0x6883, 0x0000, 0x687c, 0xd0f4, 0x0120,
-+ 0x080c, 0x5250, 0x1138, 0x0005, 0x9006, 0x687a, 0x080c, 0x51e5,
-+ 0x1108, 0x0005, 0x0126, 0x2091, 0x8000, 0x687a, 0x6982, 0x080c,
-+ 0x5b76, 0x012e, 0x0cb0, 0x2001, 0x0028, 0x900e, 0x0c98, 0x2001,
-+ 0x0000, 0x0c80, 0x7018, 0x6802, 0x2d08, 0x2068, 0x6906, 0x711a,
-+ 0x7010, 0x8001, 0x7012, 0x0118, 0x7007, 0x0003, 0x0030, 0x7014,
-+ 0x2068, 0x7007, 0x0001, 0x7048, 0x080f, 0x0005, 0x7007, 0x0001,
-+ 0x6974, 0x810f, 0x918c, 0x00ff, 0x6878, 0x9084, 0x00ff, 0x20a9,
-+ 0x0001, 0x9096, 0x0001, 0x01a8, 0x900e, 0x20a9, 0x00ff, 0x9096,
-+ 0x0002, 0x0178, 0x9005, 0x11f0, 0x6974, 0x810f, 0x918c, 0x00ff,
-+ 0x080c, 0x5608, 0x11b8, 0x0066, 0x6e80, 0x080c, 0x5703, 0x006e,
-+ 0x0088, 0x0046, 0x2011, 0x110c, 0x2224, 0xc484, 0x2412, 0x004e,
-+ 0x00c6, 0x080c, 0x5608, 0x1110, 0x080c, 0x57c6, 0x8108, 0x1f04,
-+ 0x68b9, 0x00ce, 0x687c, 0xd084, 0x1118, 0x080c, 0x0ecf, 0x0005,
-+ 0x0126, 0x2091, 0x8000, 0x080c, 0x5b76, 0x012e, 0x0005, 0x0126,
-+ 0x2091, 0x8000, 0x7007, 0x0001, 0x080c, 0x58cb, 0x0580, 0x2061,
-+ 0x1354, 0x6100, 0xd184, 0x0178, 0x6888, 0x9084, 0x00ff, 0x1550,
-+ 0x6000, 0xd084, 0x0520, 0x6004, 0x9005, 0x1538, 0x6003, 0x0000,
-+ 0x600b, 0x0000, 0x00c8, 0x2011, 0x0001, 0x6890, 0x9005, 0x1110,
-+ 0x2001, 0x001e, 0x8000, 0x6016, 0x6888, 0x9084, 0x00ff, 0x0178,
-+ 0x6006, 0x6888, 0x8007, 0x9084, 0x00ff, 0x0148, 0x600a, 0x6888,
-+ 0x8000, 0x1108, 0xc28d, 0x6202, 0x012e, 0x0804, 0x6b10, 0x012e,
-+ 0x0804, 0x6b0a, 0x012e, 0x0804, 0x6b04, 0x012e, 0x0804, 0x6b07,
-+ 0x0126, 0x2091, 0x8000, 0x7007, 0x0001, 0x080c, 0x58cb, 0x05e0,
-+ 0x2061, 0x1354, 0x6000, 0xd084, 0x05b8, 0x6204, 0x6308, 0xd08c,
-+ 0x1530, 0x6c78, 0x9484, 0x0003, 0x0170, 0x6988, 0x918c, 0x00ff,
-+ 0x8001, 0x1120, 0x2100, 0x9210, 0x0620, 0x0028, 0x8001, 0x1508,
-+ 0x2100, 0x9212, 0x02f0, 0x9484, 0x000c, 0x0188, 0x6988, 0x810f,
-+ 0x918c, 0x00ff, 0x9082, 0x0004, 0x1120, 0x2100, 0x9318, 0x0288,
-+ 0x0030, 0x9082, 0x0004, 0x1168, 0x2100, 0x931a, 0x0250, 0x6890,
-+ 0x9005, 0x0110, 0x8000, 0x6016, 0x6206, 0x630a, 0x012e, 0x0804,
-+ 0x6b10, 0x012e, 0x0804, 0x6b0d, 0x012e, 0x0804, 0x6b0a, 0x0126,
-+ 0x2091, 0x8000, 0x7007, 0x0001, 0x2061, 0x1354, 0x6300, 0xd38c,
-+ 0x1120, 0x6308, 0x8318, 0x0220, 0x630a, 0x012e, 0x0804, 0x6b1e,
-+ 0x012e, 0x0804, 0x6b0d, 0x0126, 0x00c6, 0x2091, 0x8000, 0x7007,
-+ 0x0001, 0x687c, 0xd0ac, 0x0148, 0x00c6, 0x2061, 0x1354, 0x6000,
-+ 0x9084, 0xfcff, 0x6002, 0x00ce, 0x0440, 0x6888, 0x9005, 0x05c8,
-+ 0x688c, 0x9065, 0x0590, 0x2001, 0x1133, 0x2004, 0x9005, 0x0118,
-+ 0x080c, 0x8f09, 0x0068, 0x6017, 0x0400, 0x605b, 0x0000, 0x697c,
-+ 0xd1a4, 0x0110, 0x6980, 0x615a, 0x2009, 0x0041, 0x080c, 0x8f53,
-+ 0x6988, 0x918c, 0xff00, 0x9186, 0x2000, 0x1138, 0x0026, 0x900e,
-+ 0x2011, 0xfdff, 0x080c, 0x73af, 0x002e, 0x687c, 0xd0c4, 0x0148,
-+ 0x2061, 0x1354, 0x6000, 0xd08c, 0x1120, 0x6008, 0x8000, 0x0208,
-+ 0x600a, 0x00ce, 0x012e, 0x0804, 0x6b10, 0x00ce, 0x012e, 0x0804,
-+ 0x6b0a, 0x6984, 0x9186, 0x002e, 0x0d40, 0x9186, 0x002d, 0x0d28,
-+ 0x9186, 0x0045, 0x0528, 0x9186, 0x002a, 0x1130, 0x2001, 0x110c,
-+ 0x200c, 0xc194, 0x2102, 0x08c8, 0x9186, 0x0020, 0x0170, 0x9186,
-+ 0x0029, 0x1d18, 0x6974, 0x918c, 0xff00, 0x810f, 0x080c, 0x5608,
-+ 0x1960, 0x6000, 0xc0e4, 0x6002, 0x0840, 0x688c, 0x9065, 0x09a8,
-+ 0x6007, 0x0024, 0x2001, 0x12c0, 0x2004, 0x601a, 0x0804, 0x69a5,
-+ 0x688c, 0x9065, 0x0950, 0x00e6, 0x6890, 0x9075, 0x2001, 0x1133,
-+ 0x2004, 0x9005, 0x0150, 0x080c, 0x8f09, 0x8eff, 0x0118, 0x2e60,
-+ 0x080c, 0x8f09, 0x00ee, 0x0804, 0x69a5, 0x6024, 0xc0dc, 0xc0d5,
-+ 0x6026, 0x2e60, 0x6007, 0x003a, 0x68a0, 0x9005, 0x0130, 0x6007,
-+ 0x003b, 0x68a4, 0x602e, 0x68a8, 0x6016, 0x6003, 0x0001, 0x080c,
-+ 0x756e, 0x080c, 0x7aa4, 0x00ee, 0x0804, 0x69a5, 0x2061, 0x1354,
-+ 0x6000, 0xd084, 0x0190, 0xd08c, 0x1904, 0x6b1e, 0x0126, 0x2091,
-+ 0x8000, 0x6204, 0x8210, 0x0220, 0x6206, 0x012e, 0x0804, 0x6b1e,
-+ 0x012e, 0x6883, 0x0016, 0x0804, 0x6b17, 0x6883, 0x0007, 0x0804,
-+ 0x6b17, 0x6864, 0x8007, 0x9084, 0x00ff, 0x0130, 0x8001, 0x1138,
-+ 0x7007, 0x0001, 0x0069, 0x0005, 0x080c, 0x66f4, 0x0040, 0x7007,
-+ 0x0003, 0x7012, 0x2d00, 0x7016, 0x701a, 0x704b, 0x6a48, 0x0005,
-+ 0x00e6, 0x0126, 0x2091, 0x8000, 0x903e, 0x2061, 0x1100, 0x61cc,
-+ 0x81ff, 0x1904, 0x6aca, 0x6130, 0xd194, 0x1904, 0x6af4, 0x6878,
-+ 0x2070, 0x9e82, 0x15c0, 0x0a04, 0x6abe, 0x6060, 0x9e02, 0x1a04,
-+ 0x6abe, 0x7120, 0x9186, 0x0006, 0x1904, 0x6aad, 0x7010, 0x9005,
-+ 0x0904, 0x6aca, 0x2004, 0xd0e4, 0x1904, 0x6aef, 0x2061, 0x1354,
-+ 0x6100, 0x9184, 0x0301, 0x9086, 0x0001, 0x1590, 0x7024, 0xd0dc,
-+ 0x1904, 0x6af7, 0x6883, 0x0000, 0x6803, 0x0000, 0x2d08, 0x7014,
-+ 0x9005, 0x1198, 0x7116, 0x687c, 0xd0f4, 0x1904, 0x6afa, 0x2001,
-+ 0x1153, 0x2004, 0xd09c, 0x1118, 0x687c, 0xc0cc, 0x687e, 0x2e60,
-+ 0x080c, 0x72d9, 0x012e, 0x00ee, 0x0005, 0x2068, 0x6800, 0x9005,
-+ 0x1de0, 0x6902, 0x2168, 0x687c, 0xd0f4, 0x1904, 0x6afa, 0x012e,
-+ 0x00ee, 0x0005, 0x012e, 0x00ee, 0x6883, 0x0006, 0x0804, 0x6b17,
-+ 0xd184, 0x0dc0, 0xd1c4, 0x11a8, 0x00b8, 0x6974, 0x918c, 0xff00,
-+ 0x810f, 0x080c, 0x5608, 0x15d8, 0x6000, 0xd0e4, 0x15c0, 0x7120,
-+ 0x9186, 0x0007, 0x1118, 0x6883, 0x0002, 0x0498, 0x6883, 0x0008,
-+ 0x0480, 0x6883, 0x000e, 0x0468, 0x6883, 0x0017, 0x0450, 0x6883,
-+ 0x0035, 0x0438, 0x2001, 0x1172, 0x2004, 0xd0fc, 0x01e8, 0x6878,
-+ 0x2070, 0x9e82, 0x15c0, 0x02c0, 0x6060, 0x9e02, 0x12a8, 0x7120,
-+ 0x9186, 0x0006, 0x1188, 0x7010, 0x9005, 0x0170, 0x2004, 0xd0bc,
-+ 0x0158, 0x2039, 0x0001, 0x7000, 0x9086, 0x0007, 0x1904, 0x6a53,
-+ 0x7003, 0x0002, 0x0804, 0x6a53, 0x6883, 0x0028, 0x0010, 0x6883,
-+ 0x0029, 0x012e, 0x00ee, 0x0418, 0x6883, 0x002a, 0x0cd0, 0x6883,
-+ 0x0045, 0x0cb8, 0x2e60, 0x2019, 0x0002, 0x601b, 0x0014, 0x080c,
-+ 0xbd23, 0x012e, 0x00ee, 0x0005, 0x2009, 0x003e, 0x0058, 0x2009,
-+ 0x0004, 0x0040, 0x2009, 0x0006, 0x0028, 0x2009, 0x0016, 0x0010,
-+ 0x2009, 0x0001, 0x6884, 0x9084, 0xff00, 0x9105, 0x6886, 0x0126,
-+ 0x2091, 0x8000, 0x080c, 0x5b76, 0x012e, 0x0005, 0x080c, 0x0ecf,
-+ 0x0005, 0x00d6, 0x080c, 0x72d0, 0x00de, 0x0005, 0x00d6, 0x00e6,
-+ 0x0126, 0x2091, 0x8000, 0x2071, 0x0040, 0x702c, 0xd084, 0x01f0,
-+ 0x908c, 0x0780, 0x190c, 0x6bb4, 0xd09c, 0x11c0, 0x2071, 0x1100,
-+ 0x70bc, 0x90ea, 0x0010, 0x0290, 0x8001, 0x70be, 0x702c, 0x2068,
-+ 0x2d04, 0x702e, 0x9006, 0x206a, 0x6806, 0x2071, 0x0040, 0x8d07,
-+ 0x8005, 0x8005, 0xc0d5, 0x7022, 0x702c, 0x0c10, 0x012e, 0x00ee,
-+ 0x00de, 0x0005, 0x0006, 0x9084, 0x0780, 0x190c, 0x6bb4, 0x000e,
-+ 0x0005, 0x00d6, 0x00c6, 0x0036, 0x0026, 0x0016, 0x7007, 0x0001,
-+ 0x6a74, 0x9282, 0x0004, 0x1a04, 0x6ba4, 0x697c, 0x9188, 0x1000,
-+ 0x2104, 0x9065, 0x6004, 0xd284, 0x0140, 0x05e0, 0x8007, 0x9084,
-+ 0x00ff, 0x9084, 0x0006, 0x1108, 0x04a8, 0x2c10, 0x080c, 0x8e83,
-+ 0x1118, 0x080c, 0x8f26, 0x05a0, 0x6212, 0x6874, 0x0002, 0x6b83,
-+ 0x6b88, 0x6b8b, 0x6b91, 0x2019, 0x0002, 0x080c, 0xc0b9, 0x0060,
-+ 0x080c, 0xc05a, 0x0048, 0x2019, 0x0002, 0x6980, 0x080c, 0xc072,
-+ 0x0018, 0x6980, 0x080c, 0xc05a, 0x080c, 0x8ed9, 0x6887, 0x0000,
-+ 0x0126, 0x2091, 0x8000, 0x080c, 0x5b76, 0x012e, 0x001e, 0x002e,
-+ 0x003e, 0x00ce, 0x00de, 0x0005, 0x6887, 0x0006, 0x0c88, 0x6887,
-+ 0x0002, 0x0c70, 0x6887, 0x0005, 0x0c58, 0x6887, 0x0004, 0x0c40,
-+ 0x6887, 0x0007, 0x0c28, 0x0005, 0x2011, 0x8003, 0x080c, 0x3f23,
-+ 0x0cf8, 0x0005, 0x00f6, 0x2079, 0x0300, 0x2001, 0x0200, 0x200c,
-+ 0xc1e5, 0xc1dc, 0x2102, 0x2009, 0x0218, 0x210c, 0xd1ec, 0x1120,
-+ 0x080c, 0x12a2, 0x00fe, 0x0005, 0x2001, 0x020d, 0x2003, 0x0020,
-+ 0x2001, 0x0307, 0x2003, 0x0300, 0x00fe, 0x0005, 0x781c, 0xd08c,
-+ 0x05d8, 0x7d44, 0x7c40, 0x9584, 0x00f6, 0x1508, 0x9484, 0x7000,
-+ 0x0138, 0x908a, 0x2000, 0x1258, 0x9584, 0x0700, 0x8007, 0x0498,
-+ 0x7000, 0x9084, 0xff00, 0x9086, 0x8100, 0x0db0, 0x00b0, 0x9484,
-+ 0x0fff, 0x1130, 0x7000, 0x9084, 0xff00, 0x9086, 0x8100, 0x11b0,
-+ 0x080c, 0xc426, 0x080c, 0x709e, 0x7817, 0x0140, 0x0098, 0x9584,
-+ 0x0076, 0x1118, 0x080c, 0x70fb, 0x19c8, 0xd5a4, 0x0138, 0x0046,
-+ 0x0056, 0x080c, 0x1a74, 0x005e, 0x004e, 0x0020, 0x080c, 0xc426,
-+ 0x7817, 0x0140, 0x080c, 0x6c56, 0x2001, 0x130d, 0x2004, 0x9005,
-+ 0x090c, 0x7aa4, 0x0005, 0x0002, 0x6c2d, 0x6eb5, 0x6c24, 0x6c24,
-+ 0x6c24, 0x6c24, 0x6c24, 0x6c24, 0x7817, 0x0140, 0x2001, 0x130d,
-+ 0x2004, 0x9005, 0x090c, 0x7aa4, 0x0005, 0x7000, 0x908c, 0xff00,
-+ 0x9194, 0xf000, 0x810f, 0x9484, 0x0fff, 0x688a, 0x9286, 0x2000,
-+ 0x1148, 0x6800, 0x9086, 0x0001, 0x1118, 0x080c, 0x483b, 0x0068,
-+ 0x0451, 0x0058, 0x9286, 0x3000, 0x1118, 0x080c, 0x6e02, 0x0028,
-+ 0x9286, 0x8000, 0x1110, 0x080c, 0x6fc8, 0x7817, 0x0140, 0x2001,
-+ 0x130d, 0x2004, 0x9005, 0x090c, 0x7aa4, 0x0005, 0x2001, 0x110f,
-+ 0x2004, 0xd08c, 0x0178, 0x2001, 0x1100, 0x2004, 0x9086, 0x0003,
-+ 0x1148, 0x0026, 0x0036, 0x2011, 0x8048, 0x2518, 0x080c, 0x3f23,
-+ 0x003e, 0x002e, 0x0005, 0x00c6, 0x7010, 0x9084, 0xff00, 0x8007,
-+ 0x9096, 0x0001, 0x0120, 0x9096, 0x0023, 0x1904, 0x6dd3, 0x9186,
-+ 0x0023, 0x1550, 0x080c, 0x7061, 0x0904, 0x6dd3, 0x7124, 0x610a,
-+ 0x7030, 0x908e, 0x0200, 0x1130, 0x2009, 0x0015, 0x080c, 0x8f53,
-+ 0x0804, 0x6dd3, 0x908e, 0x0214, 0x0118, 0x908e, 0x0210, 0x1130,
-+ 0x2009, 0x0015, 0x080c, 0x8f53, 0x0804, 0x6dd3, 0x908e, 0x0100,
-+ 0x1904, 0x6dd3, 0x7034, 0x9005, 0x1904, 0x6dd3, 0x2009, 0x0016,
-+ 0x080c, 0x8f53, 0x0804, 0x6dd3, 0x9186, 0x0022, 0x1904, 0x6dd3,
-+ 0x7030, 0x908e, 0x0300, 0x1580, 0x68d8, 0xd0a4, 0x0528, 0xc0b5,
-+ 0x68da, 0x7100, 0x918c, 0x00ff, 0x6976, 0x7004, 0x687a, 0x00f6,
-+ 0x2079, 0x0100, 0x79e6, 0x78ea, 0x0006, 0x9084, 0x00ff, 0x0016,
-+ 0x2008, 0x080c, 0x1f8d, 0x7932, 0x7936, 0x001e, 0x000e, 0x00fe,
-+ 0x080c, 0x1f63, 0x6956, 0x703c, 0x00e6, 0x2071, 0x0140, 0x7086,
-+ 0x2071, 0x1100, 0x70ae, 0x00ee, 0x7034, 0x9005, 0x1904, 0x6dd3,
-+ 0x2009, 0x0017, 0x0804, 0x6d92, 0x908e, 0x0400, 0x1158, 0x7034,
-+ 0x9005, 0x1904, 0x6dd3, 0x68d8, 0xc0a5, 0x68da, 0x2009, 0x0030,
-+ 0x0804, 0x6d92, 0x908e, 0x0500, 0x1140, 0x7034, 0x9005, 0x1904,
-+ 0x6dd3, 0x2009, 0x0018, 0x0804, 0x6d92, 0x908e, 0x2010, 0x1120,
-+ 0x2009, 0x0019, 0x0804, 0x6d92, 0x908e, 0x2110, 0x1120, 0x2009,
-+ 0x001a, 0x0804, 0x6d92, 0x908e, 0x5200, 0x1140, 0x7034, 0x9005,
-+ 0x1904, 0x6dd3, 0x2009, 0x001b, 0x0804, 0x6d92, 0x908e, 0x5000,
-+ 0x1140, 0x7034, 0x9005, 0x1904, 0x6dd3, 0x2009, 0x001c, 0x0804,
-+ 0x6d92, 0x908e, 0x1300, 0x1120, 0x2009, 0x0034, 0x0804, 0x6d92,
-+ 0x908e, 0x1200, 0x1140, 0x7034, 0x9005, 0x1904, 0x6dd3, 0x2009,
-+ 0x0024, 0x0804, 0x6d92, 0x908c, 0xff00, 0x918e, 0x2400, 0x1120,
-+ 0x2009, 0x002d, 0x0804, 0x6d92, 0x908c, 0xff00, 0x918e, 0x5300,
-+ 0x1120, 0x2009, 0x002a, 0x0804, 0x6d92, 0x908e, 0x0f00, 0x1120,
-+ 0x2009, 0x0020, 0x0804, 0x6d92, 0x908e, 0x5300, 0x1108, 0x00d8,
-+ 0x908e, 0x6104, 0x11c0, 0x2011, 0x026d, 0x8208, 0x2204, 0x9082,
-+ 0x0004, 0x8004, 0x8004, 0x20a8, 0x2011, 0x8015, 0x211c, 0x8108,
-+ 0x0046, 0x2124, 0x080c, 0x3f23, 0x004e, 0x8108, 0x1f04, 0x6d54,
-+ 0x2009, 0x0023, 0x0478, 0x908e, 0x6000, 0x1118, 0x2009, 0x003f,
-+ 0x0448, 0x908e, 0x7800, 0x1118, 0x2009, 0x0045, 0x0418, 0x908e,
-+ 0x1000, 0x1118, 0x2009, 0x004e, 0x00e8, 0x908e, 0x6300, 0x1118,
-+ 0x2009, 0x004a, 0x00b8, 0x908c, 0xff00, 0x918e, 0x5600, 0x1118,
-+ 0x2009, 0x004f, 0x0078, 0x908c, 0xff00, 0x918e, 0x5700, 0x1118,
-+ 0x2009, 0x0050, 0x0038, 0x2009, 0x001d, 0x6834, 0xd0d4, 0x0110,
-+ 0x2009, 0x004c, 0x0016, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c,
-+ 0x080c, 0x1f63, 0x15d0, 0x080c, 0x55b3, 0x15b8, 0x6612, 0x6516,
-+ 0x86ff, 0x01e8, 0x001e, 0x0016, 0x9186, 0x0017, 0x1158, 0x6874,
-+ 0x9606, 0x11a8, 0x6878, 0x9506, 0x9084, 0xff00, 0x1180, 0x6000,
-+ 0xc0f5, 0x6002, 0x9186, 0x0046, 0x1150, 0x6874, 0x9606, 0x1138,
-+ 0x6878, 0x9506, 0x9084, 0xff00, 0x1110, 0x001e, 0x00a0, 0x00c6,
-+ 0x080c, 0x8e83, 0x001e, 0x0198, 0x6112, 0x6023, 0x0004, 0x7120,
-+ 0x610a, 0x001e, 0x9186, 0x004c, 0x1110, 0x6023, 0x000a, 0x0016,
-+ 0x001e, 0x080c, 0x8f53, 0x00ce, 0x0005, 0x001e, 0x0ce0, 0x2001,
-+ 0x110d, 0x2004, 0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, 0x3f23,
-+ 0x00c6, 0x080c, 0x8f26, 0x001e, 0x0d80, 0x6112, 0x6023, 0x0004,
-+ 0x7120, 0x610a, 0x001e, 0x0016, 0x9186, 0x0017, 0x0118, 0x9186,
-+ 0x0030, 0x1128, 0x6007, 0x0009, 0x6017, 0x2900, 0x0020, 0x6007,
-+ 0x0051, 0x6017, 0x0000, 0x602f, 0x0009, 0x6003, 0x0001, 0x080c,
-+ 0x75be, 0x0898, 0x080c, 0x297d, 0x1140, 0x7010, 0x9084, 0xff00,
-+ 0x8007, 0x908e, 0x0008, 0x1108, 0x0009, 0x0005, 0x00c6, 0x0046,
-+ 0x7000, 0x908c, 0xff00, 0x810f, 0x9186, 0x0033, 0x11e8, 0x080c,
-+ 0x7061, 0x0904, 0x6e5f, 0x7124, 0x610a, 0x7030, 0x908e, 0x0200,
-+ 0x1140, 0x7034, 0x9005, 0x15d8, 0x2009, 0x0015, 0x080c, 0x8f53,
-+ 0x04b0, 0x908e, 0x0100, 0x1598, 0x7034, 0x9005, 0x1580, 0x2009,
-+ 0x0016, 0x080c, 0x8f53, 0x0458, 0x9186, 0x0032, 0x1540, 0x7030,
-+ 0x908e, 0x1400, 0x1520, 0x2009, 0x0038, 0x0016, 0x2011, 0x0263,
-+ 0x2204, 0x8211, 0x220c, 0x080c, 0x1f63, 0x11c0, 0x080c, 0x55b3,
-+ 0x11a8, 0x6612, 0x6516, 0x00c6, 0x080c, 0x8e83, 0x0170, 0x001e,
-+ 0x6112, 0x080c, 0xad70, 0x6023, 0x0004, 0x7120, 0x610a, 0x001e,
-+ 0x080c, 0x8f53, 0x080c, 0x7aa4, 0x0010, 0x00ce, 0x001e, 0x004e,
-+ 0x00ce, 0x0005, 0x0046, 0x00e6, 0x00d6, 0x2028, 0x2130, 0x9696,
-+ 0x00ff, 0x11a8, 0x9592, 0xfffc, 0x0290, 0x9596, 0xfffd, 0x1118,
-+ 0x2009, 0x007f, 0x04e8, 0x9596, 0xfffe, 0x1118, 0x2009, 0x007e,
-+ 0x04b8, 0x9596, 0xfffc, 0x1118, 0x2009, 0x0080, 0x0488, 0x9016,
-+ 0x2019, 0x1136, 0x231c, 0xd3ac, 0x0130, 0x9026, 0x20a9, 0x00ff,
-+ 0x2071, 0x1000, 0x0030, 0x2021, 0x0081, 0x20a9, 0x007e, 0x2071,
-+ 0x1081, 0x2e1c, 0x93ed, 0x0000, 0x1128, 0x82ff, 0x1170, 0x2410,
-+ 0xc2fd, 0x0058, 0x6f10, 0x2600, 0x9706, 0x6814, 0x1120, 0x9546,
-+ 0x1110, 0x2408, 0x0068, 0x9745, 0x0d80, 0x8420, 0x8e70, 0x1f04,
-+ 0x6e91, 0x82ff, 0x1118, 0x9085, 0x0001, 0x0018, 0xc2fc, 0x2208,
-+ 0x9006, 0x00de, 0x00ee, 0x004e, 0x0005, 0x7000, 0x908c, 0xff00,
-+ 0x810f, 0x9184, 0x000f, 0x004a, 0x7817, 0x0140, 0x2001, 0x130d,
-+ 0x2004, 0x9005, 0x090c, 0x7aa4, 0x0005, 0x6ed5, 0x6ed5, 0x6ed5,
-+ 0x7073, 0x6ed5, 0x6ede, 0x6f0b, 0x6f9b, 0x6ed5, 0x6ed5, 0x6ed5,
-+ 0x6ed5, 0x6ed5, 0x6ed5, 0x6ed5, 0x6ed5, 0x7817, 0x0140, 0x2001,
-+ 0x130d, 0x2004, 0x9005, 0x090c, 0x7aa4, 0x0005, 0x7110, 0xd1bc,
-+ 0x0508, 0x7120, 0x2160, 0x9c8c, 0x0007, 0x11e0, 0x9c8a, 0x15c0,
-+ 0x02c8, 0x6860, 0x9c02, 0x12b0, 0x7008, 0x9084, 0x00ff, 0x6110,
-+ 0x9188, 0x0004, 0x210c, 0x9106, 0x1168, 0x700c, 0x6110, 0x9188,
-+ 0x0005, 0x210c, 0x9106, 0x1130, 0x7124, 0x610a, 0x2009, 0x0046,
-+ 0x080c, 0x8f53, 0x7817, 0x0140, 0x2001, 0x130d, 0x2004, 0x9005,
-+ 0x090c, 0x7aa4, 0x0005, 0x00c6, 0x9484, 0x0fff, 0x0904, 0x6f71,
-+ 0x7110, 0xd1bc, 0x1904, 0x6f71, 0x7108, 0x700c, 0x2028, 0x918c,
-+ 0x00ff, 0x2130, 0x9094, 0xff00, 0x15c0, 0x81ff, 0x15b0, 0x9080,
-+ 0x298c, 0x200d, 0x918c, 0xff00, 0x810f, 0x2001, 0x0080, 0x9106,
-+ 0x0904, 0x6f71, 0x080c, 0x55b3, 0x1904, 0x6f71, 0x6612, 0x6516,
-+ 0x6000, 0xd0ec, 0x15f0, 0x6204, 0x9294, 0xff00, 0x8217, 0x9286,
-+ 0x0006, 0x1188, 0x00c6, 0x080c, 0x8e83, 0x001e, 0x05e0, 0x6112,
-+ 0x6023, 0x0006, 0x7120, 0x610a, 0x7130, 0x6156, 0x2009, 0x0044,
-+ 0x080c, 0xb7dd, 0x0430, 0x6204, 0x9294, 0x00ff, 0x9286, 0x0006,
-+ 0x1140, 0x9295, 0x0600, 0x6206, 0x0c28, 0x190c, 0x6e62, 0x11c8,
-+ 0x0888, 0x00c6, 0x080c, 0x8e83, 0x001e, 0x0198, 0x6112, 0x6023,
-+ 0x0004, 0x7120, 0x610a, 0x9286, 0x0004, 0x1118, 0x6007, 0x0005,
-+ 0x0010, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x75be, 0x080c,
-+ 0x7aa4, 0x7817, 0x0140, 0x2001, 0x130d, 0x2004, 0x9005, 0x090c,
-+ 0x7aa4, 0x00ce, 0x0005, 0x2001, 0x110d, 0x2004, 0xd0ec, 0x0120,
-+ 0x2011, 0x8049, 0x080c, 0x3f23, 0x00c6, 0x080c, 0x8f26, 0x001e,
-+ 0x0d40, 0x6112, 0x6023, 0x0006, 0x7120, 0x610a, 0x7130, 0x6156,
-+ 0x6017, 0x0300, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x756e,
-+ 0x080c, 0x7aa4, 0x08b0, 0x7110, 0xd1bc, 0x0508, 0x7020, 0x2060,
-+ 0x9c84, 0x0007, 0x11e0, 0x9c82, 0x15c0, 0x02c8, 0x6860, 0x9c02,
-+ 0x12b0, 0x7008, 0x9084, 0x00ff, 0x6110, 0x9188, 0x0004, 0x210c,
-+ 0x9106, 0x1168, 0x700c, 0x6110, 0x9188, 0x0005, 0x210c, 0x9106,
-+ 0x1130, 0x7124, 0x610a, 0x2009, 0x0045, 0x080c, 0x8f53, 0x7817,
-+ 0x0140, 0x2001, 0x130d, 0x2004, 0x9005, 0x090c, 0x7aa4, 0x0005,
-+ 0x080c, 0x297d, 0x1168, 0x7010, 0x9084, 0xff00, 0x8007, 0x9086,
-+ 0x0000, 0x1130, 0x9184, 0x000f, 0x908a, 0x0006, 0x1208, 0x000b,
-+ 0x0005, 0x6fdf, 0x6fe0, 0x6fdf, 0x6fdf, 0x7049, 0x7055, 0x0005,
-+ 0x7110, 0xd1bc, 0x0120, 0x702c, 0xd084, 0x0904, 0x7048, 0x700c,
-+ 0x7108, 0x080c, 0x1f63, 0x1904, 0x7048, 0x080c, 0x55b3, 0x1904,
-+ 0x7048, 0x6612, 0x6516, 0x6204, 0x7110, 0xd1bc, 0x01f8, 0x928c,
-+ 0x00ff, 0x9186, 0x0004, 0x0118, 0x9186, 0x0006, 0x15c8, 0x00c6,
-+ 0x080c, 0x7061, 0x00ce, 0x0904, 0x7048, 0x00c6, 0x080c, 0x8e83,
-+ 0x001e, 0x05f0, 0x6112, 0x080c, 0xad70, 0x6023, 0x0002, 0x7120,
-+ 0x610a, 0x2009, 0x0088, 0x080c, 0x8f53, 0x0490, 0x928c, 0x00ff,
-+ 0x9186, 0x0006, 0x0160, 0x9186, 0x0004, 0x0148, 0x9294, 0xff00,
-+ 0x8217, 0x9286, 0x0004, 0x0118, 0x9286, 0x0006, 0x1188, 0x00c6,
-+ 0x080c, 0x8e83, 0x001e, 0x01e0, 0x6112, 0x080c, 0xad70, 0x6023,
-+ 0x0005, 0x7120, 0x610a, 0x2009, 0x0088, 0x080c, 0x8f53, 0x0080,
-+ 0x00c6, 0x080c, 0x8e83, 0x001e, 0x0158, 0x6112, 0x080c, 0xad70,
-+ 0x6023, 0x0004, 0x7120, 0x610a, 0x2009, 0x0001, 0x080c, 0x8f53,
-+ 0x0005, 0x7110, 0xd1bc, 0x0140, 0x00a1, 0x0130, 0x7124, 0x610a,
-+ 0x2009, 0x0089, 0x080c, 0x8f53, 0x0005, 0x7110, 0xd1bc, 0x0140,
-+ 0x0041, 0x0130, 0x7124, 0x610a, 0x2009, 0x008a, 0x080c, 0x8f53,
-+ 0x0005, 0x7020, 0x2060, 0x9c84, 0x0007, 0x1158, 0x9c82, 0x15c0,
-+ 0x0240, 0x2001, 0x1118, 0x2004, 0x9c02, 0x1218, 0x9085, 0x0001,
-+ 0x0005, 0x9006, 0x0ce8, 0x7110, 0xd1bc, 0x11f8, 0x7024, 0x2060,
-+ 0x9c84, 0x0007, 0x11d0, 0x9c82, 0x15c0, 0x02b8, 0x6860, 0x9c02,
-+ 0x12a0, 0x7008, 0x9084, 0x00ff, 0x6110, 0x9188, 0x0004, 0x210c,
-+ 0x9106, 0x1158, 0x700c, 0x6110, 0x9188, 0x0005, 0x210c, 0x9106,
-+ 0x1120, 0x2009, 0x0051, 0x080c, 0x8f53, 0x7817, 0x0140, 0x2001,
-+ 0x130d, 0x2004, 0x9005, 0x090c, 0x7aa4, 0x0005, 0x2031, 0x0105,
-+ 0x0069, 0x0005, 0x2031, 0x0206, 0x0049, 0x0005, 0x2031, 0x0207,
-+ 0x0029, 0x0005, 0x2031, 0x0213, 0x0009, 0x0005, 0x00c6, 0x00d6,
-+ 0x00f6, 0x7000, 0x9084, 0xf000, 0x9086, 0xc000, 0x05c8, 0x080c,
-+ 0x8e83, 0x05b0, 0x0066, 0x00c6, 0x0046, 0x2011, 0x0263, 0x2204,
-+ 0x8211, 0x220c, 0x080c, 0x1f63, 0x1598, 0x080c, 0x55b3, 0x1580,
-+ 0x6612, 0x6516, 0x2c00, 0x004e, 0x00ce, 0x6012, 0x080c, 0xad70,
-+ 0x080c, 0x0eb6, 0x0508, 0x2d00, 0x605a, 0x9006, 0x6802, 0x6866,
-+ 0x6c6a, 0x9df8, 0x001b, 0x20a9, 0x000e, 0x20e9, 0x0001, 0x20e1,
-+ 0x0000, 0x2fa0, 0x2e98, 0x4003, 0x006e, 0x6616, 0x6007, 0x003e,
-+ 0x6023, 0x0001, 0x6003, 0x0001, 0x080c, 0x75be, 0x080c, 0x7aa4,
-+ 0x00fe, 0x00de, 0x00ce, 0x0005, 0x080c, 0x8ed9, 0x006e, 0x0cc0,
-+ 0x004e, 0x00ce, 0x0cc8, 0x00c6, 0x7000, 0x908c, 0xff00, 0x9184,
-+ 0xf000, 0x810f, 0x9086, 0x2000, 0x1540, 0x9186, 0x0022, 0x11d0,
-+ 0x2001, 0x0111, 0x2004, 0x9005, 0x1510, 0x7030, 0x908e, 0x0400,
-+ 0x01f0, 0x908e, 0x6000, 0x01d8, 0x908e, 0x5400, 0x01c0, 0x908e,
-+ 0x0300, 0x1138, 0x2009, 0x1136, 0x210c, 0xd18c, 0x1180, 0xd1a4,
-+ 0x1170, 0x0058, 0x9186, 0x0023, 0x1140, 0x080c, 0x7061, 0x0128,
-+ 0x6004, 0x9086, 0x0002, 0x0118, 0x0000, 0x9006, 0x0010, 0x9085,
-+ 0x0001, 0x00ce, 0x0005, 0x2071, 0x1317, 0x7003, 0x0003, 0x700f,
-+ 0x0361, 0x9006, 0x701a, 0x7072, 0x7012, 0x7017, 0x15c0, 0x7007,
-+ 0x0000, 0x7026, 0x702b, 0x85b8, 0x7032, 0x7037, 0x861b, 0x703b,
-+ 0xffff, 0x703f, 0xffff, 0x7042, 0x7047, 0x4719, 0x704a, 0x705b,
-+ 0x728c, 0x2001, 0x12aa, 0x2003, 0x0003, 0x2001, 0x12ac, 0x2003,
-+ 0x0100, 0x0005, 0x2071, 0x1317, 0x1d04, 0x71e9, 0x2091, 0x6000,
-+ 0x700c, 0x8001, 0x700e, 0x1500, 0x2001, 0x1174, 0x2004, 0xd0c4,
-+ 0x0158, 0x3a00, 0xd08c, 0x1140, 0x20d1, 0x0000, 0x20d1, 0x0001,
-+ 0x20d1, 0x0000, 0x080c, 0x0d7e, 0x700f, 0x0361, 0x7007, 0x0001,
-+ 0x0126, 0x2091, 0x8000, 0x7040, 0x900d, 0x0148, 0x8109, 0x7142,
-+ 0x1130, 0x7044, 0x080f, 0x0018, 0x0126, 0x2091, 0x8000, 0x7024,
-+ 0x900d, 0x0188, 0x7020, 0x8001, 0x7022, 0x1168, 0x7023, 0x0009,
-+ 0x8109, 0x7126, 0x9186, 0x03e8, 0x1110, 0x7028, 0x080f, 0x81ff,
-+ 0x1110, 0x7028, 0x080f, 0x7030, 0x900d, 0x0180, 0x702c, 0x8001,
-+ 0x702e, 0x1160, 0x702f, 0x0009, 0x8109, 0x7132, 0x0128, 0x9184,
-+ 0x007f, 0x090c, 0x8696, 0x0010, 0x7034, 0x080f, 0x7038, 0x9005,
-+ 0x0118, 0x0310, 0x8001, 0x703a, 0x703c, 0x9005, 0x0118, 0x0310,
-+ 0x8001, 0x703e, 0x704c, 0x900d, 0x0168, 0x7048, 0x8001, 0x704a,
-+ 0x1148, 0x704b, 0x0009, 0x8109, 0x714e, 0x1120, 0x7150, 0x714e,
-+ 0x7058, 0x080f, 0x7018, 0x900d, 0x01d8, 0x0016, 0x7070, 0x900d,
-+ 0x0158, 0x706c, 0x8001, 0x706e, 0x1138, 0x706f, 0x0009, 0x8109,
-+ 0x7172, 0x1110, 0x7074, 0x080f, 0x001e, 0x7008, 0x8001, 0x700a,
-+ 0x1138, 0x700b, 0x0009, 0x8109, 0x711a, 0x1110, 0x701c, 0x080f,
-+ 0x012e, 0x7004, 0x0002, 0x720f, 0x7210, 0x7228, 0x00e6, 0x2071,
-+ 0x1317, 0x7018, 0x9005, 0x1120, 0x711a, 0x721e, 0x700b, 0x0009,
-+ 0x00ee, 0x0005, 0x00e6, 0x0006, 0x2071, 0x1317, 0x701c, 0x9206,
-+ 0x1110, 0x701a, 0x701e, 0x000e, 0x00ee, 0x0005, 0x00e6, 0x2071,
-+ 0x1317, 0x6088, 0x9102, 0x0208, 0x618a, 0x00ee, 0x0005, 0x0005,
-+ 0x7110, 0x080c, 0x5608, 0x1158, 0x6088, 0x8001, 0x0240, 0x608a,
-+ 0x1130, 0x0126, 0x2091, 0x8000, 0x080c, 0x7aa4, 0x012e, 0x8108,
-+ 0x9182, 0x00ff, 0x0218, 0x900e, 0x7007, 0x0002, 0x7112, 0x0005,
-+ 0x7014, 0x2060, 0x0126, 0x2091, 0x8000, 0x6040, 0x9005, 0x0128,
-+ 0x8001, 0x6042, 0x1110, 0x080c, 0xac18, 0x6018, 0x9005, 0x0518,
-+ 0x8001, 0x601a, 0x1500, 0x6120, 0x9186, 0x0003, 0x0118, 0x9186,
-+ 0x0006, 0x11b8, 0x6014, 0x2068, 0x6884, 0x908a, 0x199a, 0x0288,
-+ 0x9082, 0x1999, 0x6886, 0x908a, 0x199a, 0x0210, 0x2001, 0x1999,
-+ 0x8003, 0x800b, 0x810b, 0x9108, 0x611a, 0x687c, 0x9084, 0x1000,
-+ 0x0110, 0x080c, 0xa6b1, 0x012e, 0x9c88, 0x0018, 0x7116, 0x2001,
-+ 0x45c0, 0x9102, 0x0220, 0x7017, 0x15c0, 0x7007, 0x0000, 0x0005,
-+ 0x00e6, 0x2071, 0x1317, 0x7027, 0x07d0, 0x7023, 0x0009, 0x00ee,
-+ 0x0005, 0x2001, 0x1320, 0x2003, 0x0000, 0x0005, 0x00e6, 0x2071,
-+ 0x1317, 0x7132, 0x702f, 0x0009, 0x00ee, 0x0005, 0x2011, 0x1323,
-+ 0x2013, 0x0000, 0x0005, 0x00e6, 0x2071, 0x1317, 0x711a, 0x721e,
-+ 0x700b, 0x0009, 0x00ee, 0x0005, 0x00c6, 0x0026, 0x7054, 0x8000,
-+ 0x7056, 0x2061, 0x12aa, 0x6008, 0x9086, 0x0000, 0x0158, 0x7068,
-+ 0x6036, 0x7064, 0x6032, 0x7060, 0x602e, 0x705c, 0x602a, 0x2c10,
-+ 0x080c, 0x0f22, 0x002e, 0x00ce, 0x0005, 0x0006, 0x0016, 0x00c6,
-+ 0x00d6, 0x00e6, 0x00f6, 0x0156, 0x080c, 0x715a, 0x015e, 0x00fe,
-+ 0x00ee, 0x00de, 0x00ce, 0x001e, 0x000e, 0x0005, 0x00e6, 0x2071,
-+ 0x1317, 0x7172, 0x7276, 0x706f, 0x0009, 0x00ee, 0x0005, 0x00e6,
-+ 0x0006, 0x2071, 0x1317, 0x7074, 0x9206, 0x1110, 0x7072, 0x7076,
-+ 0x000e, 0x00ee, 0x0005, 0x00c6, 0x2061, 0x1354, 0x00ce, 0x0005,
-+ 0x9184, 0x000f, 0x8003, 0x8003, 0x8003, 0x9080, 0x1354, 0x2060,
-+ 0x0005, 0x6884, 0x908a, 0x199a, 0x1630, 0x9005, 0x1150, 0x00c6,
-+ 0x2061, 0x1354, 0x6014, 0x00ce, 0x9005, 0x1130, 0x2001, 0x001e,
-+ 0x0018, 0x908e, 0xffff, 0x01a8, 0x8003, 0x800b, 0x810b, 0x9108,
-+ 0x611a, 0x687c, 0x908c, 0x00c0, 0x918e, 0x00c0, 0x0904, 0x735c,
-+ 0xd0b4, 0x1160, 0xd0bc, 0x15e0, 0x2009, 0x0006, 0x080c, 0x7386,
-+ 0x0005, 0x900e, 0x0c68, 0x2001, 0x1999, 0x08b8, 0xd0fc, 0x0160,
-+ 0x908c, 0x0003, 0x0120, 0x918e, 0x0003, 0x1904, 0x7380, 0x908c,
-+ 0x2020, 0x918e, 0x2020, 0x01a8, 0x6024, 0xd0d4, 0x11d0, 0x2009,
-+ 0x1174, 0x2104, 0xd084, 0x1138, 0x87ff, 0x1120, 0x2009, 0x0043,
-+ 0x0804, 0x8f53, 0x0005, 0x87ff, 0x1de8, 0x2009, 0x0042, 0x0804,
-+ 0x8f53, 0x6110, 0x210c, 0xd1ac, 0x0d38, 0x6024, 0xc0cd, 0x6026,
-+ 0x0c18, 0xc0d4, 0x6026, 0x6890, 0x602e, 0x688c, 0x6032, 0x08f8,
-+ 0xd0fc, 0x0160, 0x908c, 0x0003, 0x0120, 0x918e, 0x0003, 0x1904,
-+ 0x7380, 0x908c, 0x2020, 0x918e, 0x2020, 0x0170, 0x0076, 0x00f6,
-+ 0x2c78, 0x080c, 0x137e, 0x00fe, 0x007e, 0x87ff, 0x1120, 0x2009,
-+ 0x0042, 0x080c, 0x8f53, 0x0005, 0x6110, 0x210c, 0xd1ac, 0x0d70,
-+ 0x6124, 0xc1cd, 0x6126, 0x0c50, 0xd0fc, 0x0188, 0x908c, 0x2020,
-+ 0x918e, 0x2020, 0x01a8, 0x9084, 0x0003, 0x908e, 0x0002, 0x0148,
-+ 0x87ff, 0x1120, 0x2009, 0x0041, 0x080c, 0x8f53, 0x0005, 0x00a1,
-+ 0x0ce8, 0x87ff, 0x1dd8, 0x2009, 0x0043, 0x080c, 0x8f53, 0x0cb0,
-+ 0x6110, 0x210c, 0xd1ac, 0x0d38, 0x6124, 0xc1cd, 0x6126, 0x0c18,
-+ 0x2009, 0x0004, 0x0019, 0x0005, 0x2009, 0x0001, 0x00d6, 0x6014,
-+ 0x90ec, 0xf000, 0x0510, 0x2068, 0x6982, 0x6800, 0x6016, 0x9186,
-+ 0x0001, 0x1188, 0x697c, 0x918c, 0x8100, 0x918e, 0x8100, 0x1158,
-+ 0x00c6, 0x2061, 0x1354, 0x6200, 0xd28c, 0x1120, 0x6204, 0x8210,
-+ 0x0208, 0x6206, 0x00ce, 0x080c, 0x59b8, 0x6014, 0x906d, 0x0076,
-+ 0x2039, 0x0000, 0x190c, 0x72d9, 0x007e, 0x00de, 0x0005, 0x0156,
-+ 0x00c6, 0x2061, 0x1354, 0x6000, 0x81ff, 0x0110, 0x9205, 0x0008,
-+ 0x9204, 0x6002, 0x00ce, 0x015e, 0x0005, 0x6800, 0xd08c, 0x1138,
-+ 0x6808, 0x9005, 0x0120, 0x8001, 0x680a, 0x9085, 0x0001, 0x0005,
-+ 0x0126, 0x2091, 0x8000, 0x0036, 0x0046, 0x20a9, 0x0010, 0x9006,
-+ 0x8004, 0x2019, 0x0100, 0x231c, 0x93a6, 0x0008, 0x1118, 0x8086,
-+ 0x818e, 0x0020, 0x80f6, 0x3e00, 0x81f6, 0x3e08, 0x1208, 0x9200,
-+ 0x1f04, 0x73d1, 0x93a6, 0x0008, 0x1118, 0x8086, 0x818e, 0x0020,
-+ 0x80f6, 0x3e00, 0x81f6, 0x3e08, 0x004e, 0x003e, 0x012e, 0x0005,
-+ 0x0126, 0x2091, 0x8000, 0x0076, 0x0156, 0x20a9, 0x0010, 0x9005,
-+ 0x0510, 0x911a, 0x1600, 0x8213, 0x2039, 0x0100, 0x273c, 0x97be,
-+ 0x0008, 0x1110, 0x818d, 0x0010, 0x81f5, 0x3e08, 0x0228, 0x911a,
-+ 0x1220, 0x1f04, 0x73fb, 0x0028, 0x911a, 0x2308, 0x8210, 0x1f04,
-+ 0x73fb, 0x0006, 0x3200, 0x9084, 0xefff, 0x2080, 0x000e, 0x015e,
-+ 0x007e, 0x012e, 0x0005, 0x0006, 0x3200, 0x9085, 0x1000, 0x0ca8,
-+ 0x0126, 0x2091, 0x2800, 0x2079, 0x1304, 0x012e, 0x00d6, 0x2069,
-+ 0x1304, 0x6803, 0x0005, 0x0156, 0x0146, 0x01d6, 0x20e9, 0x0000,
-+ 0x2069, 0x0200, 0x080c, 0x8dc3, 0x0401, 0x080c, 0x8dae, 0x00e9,
-+ 0x080c, 0x8db1, 0x00d1, 0x080c, 0x8db4, 0x00b9, 0x080c, 0x8db7,
-+ 0x00a1, 0x080c, 0x8dba, 0x0089, 0x080c, 0x8dbd, 0x0071, 0x080c,
-+ 0x8dc0, 0x0059, 0x01de, 0x014e, 0x015e, 0x2069, 0x0004, 0x2d04,
-+ 0x9085, 0x8001, 0x206a, 0x00de, 0x0005, 0x20a9, 0x0020, 0x20a1,
-+ 0x0240, 0x9006, 0x4004, 0x0005, 0x00c6, 0x6027, 0x0001, 0x7804,
-+ 0x9084, 0x0007, 0x0002, 0x746d, 0x7491, 0x74db, 0x7473, 0x7491,
-+ 0x746d, 0x746b, 0x746b, 0x080c, 0x0d7e, 0x080c, 0x7271, 0x080c,
-+ 0x7aa4, 0x00ce, 0x0005, 0x62c0, 0x82ff, 0x1110, 0x00ce, 0x0005,
-+ 0x2011, 0x4f57, 0x080c, 0x71fa, 0x7828, 0x9092, 0x00c8, 0x1228,
-+ 0x8000, 0x782a, 0x080c, 0x4f94, 0x0c88, 0x62c0, 0x080c, 0x8dc7,
-+ 0x080c, 0x4f57, 0x7807, 0x0003, 0x7827, 0x0000, 0x782b, 0x0000,
-+ 0x0c28, 0x080c, 0x7271, 0x6220, 0xd2a4, 0x0178, 0x62c0, 0x82ff,
-+ 0x1160, 0x782b, 0x0000, 0x7824, 0x9065, 0x090c, 0x0d7e, 0x2009,
-+ 0x0013, 0x080c, 0x8f53, 0x00ce, 0x0005, 0x00c6, 0x7824, 0x9065,
-+ 0x090c, 0x0d7e, 0x7804, 0x9086, 0x0004, 0x0904, 0x7517, 0x7828,
-+ 0x9092, 0xc350, 0x1230, 0x8000, 0x782a, 0x00ce, 0x080c, 0x857e,
-+ 0x0c50, 0x2011, 0x0130, 0x2214, 0x080c, 0x8dc7, 0x6104, 0x9186,
-+ 0x0003, 0x1188, 0x00e6, 0x2071, 0x1100, 0x70e4, 0x00ee, 0xd08c,
-+ 0x0150, 0x00c6, 0x00e6, 0x2061, 0x0100, 0x2071, 0x1100, 0x080c,
-+ 0x4faa, 0x00ee, 0x00ce, 0x080c, 0xc463, 0x2009, 0x0014, 0x080c,
-+ 0x8f53, 0x00ce, 0x0840, 0x2001, 0x1320, 0x2003, 0x0000, 0x62c0,
-+ 0x82ff, 0x1160, 0x782b, 0x0000, 0x7824, 0x9065, 0x090c, 0x0d7e,
-+ 0x2009, 0x0013, 0x080c, 0x8fab, 0x00ce, 0x0005, 0x00c6, 0x00d6,
-+ 0x7824, 0x9005, 0x090c, 0x0d7e, 0x781c, 0x906d, 0x090c, 0x0d7e,
-+ 0x080c, 0x8dc7, 0x6800, 0xc0dc, 0x6802, 0x7924, 0x2160, 0x080c,
-+ 0x8ed9, 0x693c, 0x81ff, 0x090c, 0x0d7e, 0x8109, 0x693e, 0x6854,
-+ 0x9015, 0x0110, 0x7a1e, 0x0010, 0x7918, 0x791e, 0x7807, 0x0000,
-+ 0x7827, 0x0000, 0x00de, 0x00ce, 0x080c, 0x7aa4, 0x08a8, 0x6104,
-+ 0x9186, 0x0002, 0x0128, 0x9186, 0x0004, 0x0110, 0x0804, 0x74af,
-+ 0x7808, 0x9c06, 0x0904, 0x74af, 0x080c, 0x79ab, 0x080c, 0x75be,
-+ 0x00ce, 0x080c, 0x7aa4, 0x0804, 0x74a3, 0x00c6, 0x6024, 0x6027,
-+ 0x0002, 0xd0f4, 0x1580, 0x62c8, 0x60c4, 0x9205, 0x1170, 0x783c,
-+ 0x9065, 0x0130, 0x2009, 0x0049, 0x080c, 0x8f53, 0x00ce, 0x0005,
-+ 0x2011, 0x1323, 0x2013, 0x0000, 0x0cc8, 0x793c, 0x81ff, 0x0dc0,
-+ 0x7944, 0x9192, 0x7530, 0x12f0, 0x8108, 0x7946, 0x793c, 0x9188,
-+ 0x0008, 0x210c, 0x918e, 0x0006, 0x1138, 0x6014, 0x9084, 0x1984,
-+ 0x9085, 0x0012, 0x6016, 0x0c10, 0x6014, 0x9084, 0x1984, 0x9085,
-+ 0x0016, 0x6016, 0x08d8, 0x793c, 0x2160, 0x2009, 0x004a, 0x080c,
-+ 0x8f53, 0x08a0, 0x7848, 0xc085, 0x784a, 0x0880, 0x0006, 0x0016,
-+ 0x00c6, 0x0126, 0x2091, 0x8000, 0x600f, 0x0000, 0x2c08, 0x2061,
-+ 0x1304, 0x6020, 0x8000, 0x6022, 0x6010, 0x9005, 0x0148, 0x9080,
-+ 0x0003, 0x2102, 0x6112, 0x012e, 0x00ce, 0x001e, 0x000e, 0x0005,
-+ 0x6116, 0x6112, 0x0cc0, 0x00d6, 0x2069, 0x1304, 0x6000, 0xd0d4,
-+ 0x01b8, 0x6820, 0x8000, 0x6822, 0x9086, 0x0001, 0x1110, 0x2c00,
-+ 0x681e, 0x2001, 0x110c, 0x2004, 0xd0fc, 0x0118, 0x00de, 0x0804,
-+ 0x7aa4, 0x6804, 0x9084, 0x0007, 0x0804, 0x7abb, 0x00de, 0x0005,
-+ 0xc0d5, 0x6002, 0x6818, 0x9005, 0x0158, 0x6056, 0x605b, 0x0000,
-+ 0x0006, 0x2c00, 0x681a, 0x00de, 0x685a, 0x2069, 0x1304, 0x08c8,
-+ 0x6056, 0x605a, 0x2c00, 0x681a, 0x681e, 0x0898, 0x0006, 0x0016,
-+ 0x00c6, 0x0126, 0x2091, 0x8000, 0x600f, 0x0000, 0x2c08, 0x2061,
-+ 0x1304, 0x6020, 0x8000, 0x6022, 0x6008, 0x9005, 0x0148, 0x9080,
-+ 0x0003, 0x2102, 0x610a, 0x012e, 0x00ce, 0x001e, 0x000e, 0x0005,
-+ 0x610e, 0x610a, 0x0cc0, 0x00c6, 0x600f, 0x0000, 0x2c08, 0x2061,
-+ 0x1304, 0x6034, 0x9005, 0x0130, 0x9080, 0x0003, 0x2102, 0x6136,
-+ 0x00ce, 0x0005, 0x613a, 0x6136, 0x00ce, 0x0005, 0x00f6, 0x00e6,
-+ 0x00d6, 0x00c6, 0x0076, 0x0066, 0x0056, 0x0036, 0x0026, 0x0016,
-+ 0x0006, 0x0126, 0x902e, 0x2071, 0x1304, 0x7638, 0x2660, 0x2678,
-+ 0x2091, 0x8000, 0x8cff, 0x0904, 0x7664, 0x6010, 0x9080, 0x0028,
-+ 0x2004, 0x9206, 0x1904, 0x765f, 0x87ff, 0x0120, 0x6054, 0x9106,
-+ 0x1904, 0x765f, 0x703c, 0x9c06, 0x1178, 0x0036, 0x2019, 0x0001,
-+ 0x080c, 0x8847, 0x7033, 0x0000, 0x9006, 0x703e, 0x7042, 0x7046,
-+ 0x704a, 0x003e, 0x2029, 0x0001, 0x7038, 0x9c36, 0x1110, 0x660c,
-+ 0x763a, 0x7034, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00,
-+ 0x7036, 0x0010, 0x7037, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06,
-+ 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x080c, 0xa942,
-+ 0x01c8, 0x6014, 0x2068, 0x6020, 0x9086, 0x0003, 0x1580, 0x6867,
-+ 0x0103, 0x6b7a, 0x6877, 0x0000, 0x0016, 0x0036, 0x0076, 0x080c,
-+ 0xac01, 0x080c, 0xc3c7, 0x080c, 0x5b76, 0x007e, 0x003e, 0x001e,
-+ 0x080c, 0xab11, 0x080c, 0x8f09, 0x00ce, 0x0804, 0x7602, 0x2c78,
-+ 0x600c, 0x2060, 0x0804, 0x7602, 0x85ff, 0x0120, 0x0036, 0x080c,
-+ 0x7b72, 0x003e, 0x012e, 0x000e, 0x001e, 0x002e, 0x003e, 0x005e,
-+ 0x006e, 0x007e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x6020,
-+ 0x9086, 0x0006, 0x1158, 0x0016, 0x0036, 0x0076, 0x080c, 0xc3c7,
-+ 0x080c, 0xc0e9, 0x007e, 0x003e, 0x001e, 0x08a0, 0x6020, 0x9086,
-+ 0x000a, 0x0904, 0x7649, 0x0804, 0x7647, 0x0006, 0x0066, 0x00c6,
-+ 0x00d6, 0x00f6, 0x9036, 0x0126, 0x2091, 0x8000, 0x2079, 0x1304,
-+ 0x7838, 0x9065, 0x0904, 0x76db, 0x600c, 0x0006, 0x600f, 0x0000,
-+ 0x783c, 0x9c06, 0x1168, 0x0036, 0x2019, 0x0001, 0x080c, 0x8847,
-+ 0x7833, 0x0000, 0x901e, 0x7b3e, 0x7b42, 0x7b46, 0x7b4a, 0x003e,
-+ 0x080c, 0xa942, 0x0518, 0x6014, 0x2068, 0x6020, 0x9086, 0x0003,
-+ 0x1558, 0x3e08, 0x918e, 0x0002, 0x1180, 0x6010, 0x9005, 0x0168,
-+ 0x9080, 0x0000, 0x2004, 0xd0bc, 0x0140, 0x6040, 0x9005, 0x1180,
-+ 0x2001, 0x12c2, 0x2004, 0x6042, 0x0058, 0x6867, 0x0103, 0x6b7a,
-+ 0x6877, 0x0000, 0x080c, 0x5b76, 0x080c, 0xab11, 0x080c, 0x8f09,
-+ 0x000e, 0x0804, 0x7699, 0x7e3a, 0x7e36, 0x012e, 0x00fe, 0x00de,
-+ 0x00ce, 0x006e, 0x000e, 0x0005, 0x6020, 0x9086, 0x0006, 0x1118,
-+ 0x080c, 0xc0e9, 0x0c58, 0x6020, 0x9086, 0x000a, 0x0d00, 0x08e8,
-+ 0x0016, 0x0026, 0x0086, 0x9046, 0x0099, 0x080c, 0x77c0, 0x008e,
-+ 0x002e, 0x001e, 0x0005, 0x00f6, 0x0126, 0x2079, 0x1304, 0x2091,
-+ 0x8000, 0x080c, 0x7851, 0x080c, 0x78c5, 0x012e, 0x00fe, 0x0005,
-+ 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0016, 0x0006, 0x0126,
-+ 0x2091, 0x8000, 0x2071, 0x1304, 0x7614, 0x2660, 0x2678, 0x8cff,
-+ 0x0904, 0x7796, 0x6010, 0x9080, 0x0028, 0x2004, 0x9206, 0x1904,
-+ 0x7791, 0x88ff, 0x0120, 0x6054, 0x9106, 0x1904, 0x7791, 0x7024,
-+ 0x9c06, 0x1550, 0x2069, 0x0100, 0x68c0, 0x9005, 0x0508, 0x080c,
-+ 0x7271, 0x080c, 0x85a2, 0x68c3, 0x0000, 0x080c, 0x8a7d, 0x7027,
-+ 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138,
-+ 0x2001, 0x0100, 0x080c, 0x2401, 0x9006, 0x080c, 0x2401, 0x2069,
-+ 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x0020,
-+ 0x6003, 0x0009, 0x630a, 0x04e8, 0x7014, 0x9c36, 0x1110, 0x660c,
-+ 0x7616, 0x7010, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00,
-+ 0x7012, 0x0010, 0x7013, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06,
-+ 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x6014, 0x2068,
-+ 0x080c, 0xa942, 0x01b8, 0x6020, 0x9086, 0x0003, 0x1540, 0x6867,
-+ 0x0103, 0x6b7a, 0x6877, 0x0000, 0x0016, 0x0036, 0x0086, 0x080c,
-+ 0xac01, 0x080c, 0xc3c7, 0x080c, 0x5b76, 0x008e, 0x003e, 0x001e,
-+ 0x080c, 0xab11, 0x080c, 0x8f09, 0x080c, 0x895e, 0x00ce, 0x0804,
-+ 0x7717, 0x2c78, 0x600c, 0x2060, 0x0804, 0x7717, 0x012e, 0x000e,
-+ 0x001e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x6020,
-+ 0x9086, 0x0006, 0x1158, 0x0016, 0x0036, 0x0086, 0x080c, 0xc3c7,
-+ 0x080c, 0xc0e9, 0x008e, 0x003e, 0x001e, 0x08e0, 0x6020, 0x9086,
-+ 0x0002, 0x1128, 0x6004, 0x9086, 0x0085, 0x0908, 0x0898, 0x6020,
-+ 0x9086, 0x0005, 0x1978, 0x6004, 0x9086, 0x0085, 0x0d20, 0x0850,
-+ 0x00c6, 0x0006, 0x0126, 0x2091, 0x8000, 0x9280, 0x1000, 0x2004,
-+ 0x9065, 0x0904, 0x784d, 0x00f6, 0x00e6, 0x00d6, 0x0066, 0x2071,
-+ 0x1304, 0x6654, 0x7018, 0x9c06, 0x1108, 0x761a, 0x701c, 0x9c06,
-+ 0x1130, 0x86ff, 0x1118, 0x7018, 0x701e, 0x0008, 0x761e, 0x6058,
-+ 0x907d, 0x0108, 0x7e56, 0x96ed, 0x0000, 0x0110, 0x2f00, 0x685a,
-+ 0x6057, 0x0000, 0x605b, 0x0000, 0x6000, 0xc0d4, 0xc0dc, 0x6002,
-+ 0x080c, 0x554c, 0x0904, 0x7849, 0x7624, 0x86ff, 0x0904, 0x7838,
-+ 0x9680, 0x0005, 0x2004, 0x9d06, 0x15d8, 0x00d6, 0x2069, 0x0100,
-+ 0x68c0, 0x9005, 0x0560, 0x080c, 0x7271, 0x080c, 0x85a2, 0x68c3,
-+ 0x0000, 0x080c, 0x8a7d, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140,
-+ 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2401,
-+ 0x9006, 0x080c, 0x2401, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110,
-+ 0x6827, 0x0001, 0x003e, 0x00de, 0x00c6, 0x603c, 0x9005, 0x0110,
-+ 0x8001, 0x603e, 0x2660, 0x080c, 0x8f09, 0x00ce, 0x0048, 0x00de,
-+ 0x00c6, 0x2660, 0x6003, 0x0009, 0x630a, 0x00ce, 0x0804, 0x77f0,
-+ 0x8dff, 0x0158, 0x6867, 0x0103, 0x6b7a, 0x6877, 0x0000, 0x080c,
-+ 0xac01, 0x080c, 0xc3c7, 0x080c, 0x5b76, 0x080c, 0x895e, 0x0804,
-+ 0x77f0, 0x006e, 0x00de, 0x00ee, 0x00fe, 0x012e, 0x000e, 0x00ce,
-+ 0x0005, 0x0006, 0x0066, 0x00c6, 0x00d6, 0x9036, 0x7814, 0x9065,
-+ 0x0904, 0x78a5, 0x600c, 0x0006, 0x600f, 0x0000, 0x7824, 0x9c06,
-+ 0x1558, 0x2069, 0x0100, 0x68c0, 0x9005, 0x0508, 0x080c, 0x7271,
-+ 0x080c, 0x85a2, 0x68c3, 0x0000, 0x080c, 0x8a7d, 0x7827, 0x0000,
-+ 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001,
-+ 0x0100, 0x080c, 0x2401, 0x9006, 0x080c, 0x2401, 0x2069, 0x0100,
-+ 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x0028, 0x6003,
-+ 0x0009, 0x630a, 0x2c30, 0x00b0, 0x6014, 0x2068, 0x080c, 0xa942,
-+ 0x0168, 0x6020, 0x9086, 0x0003, 0x11b8, 0x6867, 0x0103, 0x6b7a,
-+ 0x6877, 0x0000, 0x080c, 0x5b76, 0x080c, 0xab11, 0x080c, 0x8f09,
-+ 0x080c, 0x895e, 0x000e, 0x0804, 0x7857, 0x7e16, 0x7e12, 0x00de,
-+ 0x00ce, 0x006e, 0x000e, 0x0005, 0x6020, 0x9086, 0x0006, 0x1118,
-+ 0x080c, 0xc0e9, 0x0c58, 0x6020, 0x9086, 0x0002, 0x1128, 0x6004,
-+ 0x9086, 0x0085, 0x09d0, 0x0c10, 0x6020, 0x9086, 0x0005, 0x19f0,
-+ 0x6004, 0x9086, 0x0085, 0x0d60, 0x08c8, 0x0006, 0x0066, 0x00c6,
-+ 0x00d6, 0x7818, 0x9065, 0x0904, 0x7940, 0x6054, 0x0006, 0x9006,
-+ 0x6056, 0x605a, 0x6000, 0xc0d4, 0xc0dc, 0x6002, 0x080c, 0x554c,
-+ 0x0904, 0x793d, 0x7e24, 0x86ff, 0x0904, 0x7930, 0x9680, 0x0005,
-+ 0x2004, 0x9d06, 0x1904, 0x7930, 0x00d6, 0x2069, 0x0100, 0x68c0,
-+ 0x9005, 0x05e8, 0x080c, 0x7271, 0x080c, 0x85a2, 0x68c3, 0x0000,
-+ 0x080c, 0x8a7d, 0x7827, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04,
-+ 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2401, 0x9006,
-+ 0x080c, 0x2401, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827,
-+ 0x0001, 0x003e, 0x00de, 0x00c6, 0x3e08, 0x918e, 0x0002, 0x1168,
-+ 0x6000, 0xd0bc, 0x0150, 0x9680, 0x0010, 0x200c, 0x81ff, 0x1508,
-+ 0x2009, 0x12c2, 0x210c, 0x2102, 0x00e0, 0x603c, 0x9005, 0x0110,
-+ 0x8001, 0x603e, 0x2660, 0x080c, 0x8f09, 0x00ce, 0x0048, 0x00de,
-+ 0x00c6, 0x2660, 0x6003, 0x0009, 0x630a, 0x00ce, 0x0804, 0x78d6,
-+ 0x8dff, 0x0138, 0x6867, 0x0103, 0x6b7a, 0x6877, 0x0000, 0x080c,
-+ 0x5b76, 0x080c, 0x895e, 0x0804, 0x78d6, 0x000e, 0x0804, 0x78ca,
-+ 0x781e, 0x781a, 0x00de, 0x00ce, 0x006e, 0x000e, 0x0005, 0x00e6,
-+ 0x00d6, 0x0066, 0x6000, 0xd0dc, 0x01a0, 0x604c, 0x906d, 0x0188,
-+ 0x6878, 0x9606, 0x1170, 0x2071, 0x1304, 0x7024, 0x9035, 0x0148,
-+ 0x9080, 0x0005, 0x2004, 0x9d06, 0x1120, 0x6000, 0xc0dc, 0x6002,
-+ 0x0021, 0x006e, 0x00de, 0x00ee, 0x0005, 0x00f6, 0x2079, 0x0100,
-+ 0x78c0, 0x9005, 0x1138, 0x00c6, 0x2660, 0x6003, 0x0009, 0x630a,
-+ 0x00ce, 0x04b8, 0x080c, 0x85a2, 0x78c3, 0x0000, 0x080c, 0x8a7d,
-+ 0x7027, 0x0000, 0x0036, 0x2079, 0x0140, 0x7b04, 0x9384, 0x1000,
-+ 0x0138, 0x2001, 0x0100, 0x080c, 0x2401, 0x9006, 0x080c, 0x2401,
-+ 0x2079, 0x0100, 0x7824, 0xd084, 0x0110, 0x7827, 0x0001, 0x080c,
-+ 0x8a7d, 0x003e, 0x080c, 0x554c, 0x00c6, 0x603c, 0x9005, 0x0110,
-+ 0x8001, 0x603e, 0x2660, 0x080c, 0x8ed9, 0x00ce, 0x6867, 0x0103,
-+ 0x6b7a, 0x6877, 0x0000, 0x080c, 0xac01, 0x080c, 0x5b76, 0x080c,
-+ 0x895e, 0x00fe, 0x0005, 0x00e6, 0x00c6, 0x2001, 0x110c, 0x2014,
-+ 0xc2e4, 0x2202, 0x2071, 0x1304, 0x7004, 0x9084, 0x0007, 0x0002,
-+ 0x79c2, 0x79c5, 0x79db, 0x7a03, 0x7a40, 0x79c2, 0x79c0, 0x79c0,
-+ 0x080c, 0x0d7e, 0x00ce, 0x00ee, 0x0005, 0x7024, 0x9065, 0x0148,
-+ 0x7020, 0x8001, 0x7022, 0x600c, 0x9015, 0x0150, 0x7216, 0x600f,
-+ 0x0000, 0x7007, 0x0000, 0x7027, 0x0000, 0x00ce, 0x00ee, 0x0005,
-+ 0x7216, 0x7212, 0x0cb0, 0x6010, 0x2060, 0x080c, 0x554c, 0x6000,
-+ 0xc0dc, 0x6002, 0x7007, 0x0000, 0x7027, 0x0000, 0x7020, 0x8001,
-+ 0x7022, 0x1140, 0x2001, 0x110c, 0x2014, 0xd2ec, 0x1178, 0x00ce,
-+ 0x00ee, 0x0005, 0x6054, 0x9015, 0x0120, 0x721e, 0x080c, 0x7aa4,
-+ 0x0cb0, 0x7218, 0x721e, 0x080c, 0x7aa4, 0x0c88, 0xc2ec, 0x2202,
-+ 0x080c, 0x7b72, 0x0c60, 0x7024, 0x9065, 0x05b8, 0x700c, 0x9c06,
-+ 0x1160, 0x080c, 0x895e, 0x600c, 0x9015, 0x0120, 0x720e, 0x600f,
-+ 0x0000, 0x0448, 0x720e, 0x720a, 0x0430, 0x7014, 0x9c06, 0x1160,
-+ 0x080c, 0x895e, 0x600c, 0x9015, 0x0120, 0x7216, 0x600f, 0x0000,
-+ 0x00d0, 0x7216, 0x7212, 0x00b8, 0x6020, 0x9086, 0x0003, 0x1198,
-+ 0x6010, 0x2060, 0x080c, 0x554c, 0x6000, 0xc0dc, 0x6002, 0x080c,
-+ 0x895e, 0x701c, 0x9065, 0x0138, 0x6054, 0x9015, 0x0110, 0x721e,
-+ 0x0010, 0x7218, 0x721e, 0x7027, 0x0000, 0x00ce, 0x00ee, 0x0005,
-+ 0x7024, 0x9065, 0x0140, 0x080c, 0x895e, 0x600c, 0x9015, 0x0150,
-+ 0x720e, 0x600f, 0x0000, 0x080c, 0x8a7d, 0x7027, 0x0000, 0x00ce,
-+ 0x00ee, 0x0005, 0x720e, 0x720a, 0x0cb0, 0x00d6, 0x2069, 0x1304,
-+ 0x6830, 0x9084, 0x0003, 0x0002, 0x7a62, 0x7a64, 0x7a88, 0x7a60,
-+ 0x080c, 0x0d7e, 0x00de, 0x0005, 0x00c6, 0x6840, 0x9086, 0x0001,
-+ 0x01b8, 0x683c, 0x9065, 0x0130, 0x600c, 0x9015, 0x0170, 0x6a3a,
-+ 0x600f, 0x0000, 0x6833, 0x0000, 0x683f, 0x0000, 0x2011, 0x1323,
-+ 0x2013, 0x0000, 0x00ce, 0x00de, 0x0005, 0x683a, 0x6836, 0x0c90,
-+ 0x6843, 0x0000, 0x6838, 0x9065, 0x0d68, 0x6003, 0x0003, 0x0c50,
-+ 0x00c6, 0x9006, 0x6842, 0x6846, 0x684a, 0x683c, 0x9065, 0x0160,
-+ 0x600c, 0x9015, 0x0130, 0x6a3a, 0x600f, 0x0000, 0x683f, 0x0000,
-+ 0x0018, 0x683e, 0x683a, 0x6836, 0x00ce, 0x00de, 0x0005, 0xc1e5,
-+ 0x2001, 0x110c, 0x2102, 0x0005, 0x2001, 0x110c, 0x200c, 0xd1ec,
-+ 0x0138, 0xc1ec, 0x2102, 0x080c, 0x7b72, 0x2001, 0x110c, 0x200c,
-+ 0x9184, 0x0600, 0x9086, 0x0600, 0x0d50, 0x00d6, 0x2069, 0x1304,
-+ 0x6804, 0x9084, 0x0007, 0x0002, 0x7ac6, 0x7b51, 0x7b51, 0x7b51,
-+ 0x7b51, 0x7b53, 0x7ac4, 0x7ac4, 0x080c, 0x0d7e, 0x6820, 0x9005,
-+ 0x1110, 0x00de, 0x0005, 0x00c6, 0x680c, 0x9065, 0x0150, 0x6807,
-+ 0x0004, 0x6826, 0x682b, 0x0000, 0x080c, 0x7bb7, 0x00ce, 0x00de,
-+ 0x0005, 0x6814, 0x9065, 0x0150, 0x6807, 0x0001, 0x6826, 0x682b,
-+ 0x0000, 0x080c, 0x7bb7, 0x00ce, 0x00de, 0x0005, 0x00e6, 0x6a1c,
-+ 0x92f5, 0x0000, 0x0904, 0x7b4e, 0x704c, 0x900d, 0x0118, 0x7088,
-+ 0x9005, 0x01a0, 0x7054, 0x9075, 0x0120, 0x920e, 0x0904, 0x7b4e,
-+ 0x0028, 0x6818, 0x920e, 0x0904, 0x7b4e, 0x2070, 0x704c, 0x900d,
-+ 0x0d88, 0x7088, 0x9005, 0x1d70, 0x2e00, 0x681e, 0x733c, 0x7038,
-+ 0x9302, 0x1e40, 0x080c, 0x8eb0, 0x0904, 0x7b4e, 0x8318, 0x733e,
-+ 0x6116, 0x2e10, 0x6212, 0x9180, 0x0020, 0x2004, 0x9084, 0x00ff,
-+ 0x605e, 0x9180, 0x0020, 0x2003, 0x0000, 0x9180, 0x0021, 0x2004,
-+ 0x908a, 0x199a, 0x0210, 0x2001, 0x1999, 0x8003, 0x801b, 0x831b,
-+ 0x9318, 0x631a, 0x00f6, 0x2c78, 0x2061, 0x0100, 0x609b, 0x0000,
-+ 0x00d6, 0x00e6, 0x2069, 0x0200, 0x2071, 0x0240, 0x080c, 0x81a1,
-+ 0x00ee, 0x00de, 0x7300, 0xc3dd, 0x7302, 0x6807, 0x0002, 0x2f18,
-+ 0x6b26, 0x682b, 0x0000, 0x7823, 0x0003, 0x7803, 0x0001, 0x7807,
-+ 0x0040, 0x00fe, 0x00ee, 0x00ce, 0x00de, 0x0005, 0x00ee, 0x00ce,
-+ 0x0cd8, 0x00de, 0x0005, 0x00c6, 0x680c, 0x9065, 0x0138, 0x6807,
-+ 0x0004, 0x6826, 0x682b, 0x0000, 0x080c, 0x7bb7, 0x00ce, 0x00de,
-+ 0x0005, 0x2001, 0x110c, 0x2014, 0xc2ed, 0x2202, 0x00de, 0x00fe,
-+ 0x0005, 0x2001, 0x110c, 0x2014, 0xd2e4, 0x0120, 0xc2e4, 0x2202,
-+ 0x080c, 0x7ab5, 0x00f6, 0x00d6, 0x2069, 0x1304, 0x6830, 0x9086,
-+ 0x0000, 0x11f0, 0x2001, 0x110c, 0x200c, 0xd1c4, 0x11e0, 0x6838,
-+ 0x907d, 0x01b0, 0x6a04, 0x9296, 0x0000, 0x19d8, 0x6833, 0x0001,
-+ 0x683e, 0x6847, 0x0000, 0x684b, 0x0000, 0x0126, 0x00f6, 0x2091,
-+ 0x2400, 0x002e, 0x080c, 0x167d, 0x1178, 0x012e, 0x080c, 0x83f0,
-+ 0x00de, 0x00fe, 0x0005, 0xc1c4, 0x2102, 0x0066, 0x2031, 0x0001,
-+ 0x080c, 0x6380, 0x006e, 0x08d8, 0x012e, 0x6843, 0x0000, 0x7803,
-+ 0x0002, 0x780c, 0x9015, 0x0140, 0x6a3a, 0x780f, 0x0000, 0x6833,
-+ 0x0000, 0x683f, 0x0000, 0x0c20, 0x683a, 0x6836, 0x0cc0, 0x6020,
-+ 0x9084, 0x000f, 0x000b, 0x0005, 0x7bcb, 0x7bd0, 0x8097, 0x8157,
-+ 0x7bd0, 0x8097, 0x8157, 0x7bcb, 0x7bd0, 0x7bcb, 0x7bcb, 0x7bcb,
-+ 0x7bcb, 0x7bcb, 0x7bcb, 0x080c, 0x79ab, 0x080c, 0x7aa4, 0x0005,
-+ 0x0156, 0x0136, 0x0146, 0x01c6, 0x01d6, 0x00c6, 0x00d6, 0x00e6,
-+ 0x00f6, 0x2069, 0x0200, 0x2071, 0x0240, 0x6004, 0x908a, 0x0053,
-+ 0x1a0c, 0x0d7e, 0x6110, 0x2178, 0x79a0, 0x2011, 0x1136, 0x2214,
-+ 0xd2ac, 0x1110, 0xd1bc, 0x0148, 0x7900, 0xd1f4, 0x0120, 0x7914,
-+ 0x918c, 0x00ff, 0x0038, 0x900e, 0x0028, 0x91f8, 0x298c, 0x2f0d,
-+ 0x918c, 0x00ff, 0x2c78, 0x2061, 0x0100, 0x619a, 0x908a, 0x0040,
-+ 0x1a04, 0x7c4f, 0x0053, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x01de,
-+ 0x01ce, 0x014e, 0x013e, 0x015e, 0x0005, 0x7dc3, 0x7e04, 0x7e33,
-+ 0x7ee5, 0x7f08, 0x7f0e, 0x7f1c, 0x7f25, 0x7f32, 0x7f38, 0x7f4a,
-+ 0x7f38, 0x7fa1, 0x7f25, 0x7fae, 0x7fb4, 0x7f32, 0x7fb4, 0x7fc1,
-+ 0x7c4d, 0x7c4d, 0x7c4d, 0x7c4d, 0x7c4d, 0x7c4d, 0x7c4d, 0x7c4d,
-+ 0x7c4d, 0x7c4d, 0x7c4d, 0x86e5, 0x86fc, 0x8707, 0x8728, 0x8757,
-+ 0x7f1c, 0x7c4d, 0x7f1c, 0x7f38, 0x7c4d, 0x7e33, 0x7ee5, 0x7c4d,
-+ 0x8b65, 0x7f38, 0x7c4d, 0x8b81, 0x7f38, 0x7c4d, 0x7f32, 0x7dbc,
-+ 0x7c6f, 0x7c4d, 0x8b98, 0x8c05, 0x8cda, 0x7c4d, 0x8ce7, 0x7f19,
-+ 0x8cfd, 0x7c4d, 0x8762, 0x8d37, 0x7c4d, 0x080c, 0x0d7e, 0x2100,
-+ 0x0053, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x01de, 0x01ce, 0x014e,
-+ 0x013e, 0x015e, 0x0005, 0x7c6d, 0x7c6d, 0x7c6d, 0x7c95, 0x7d39,
-+ 0x7d49, 0x7c6d, 0x7c6d, 0x7c6d, 0x7d8e, 0x7d9d, 0x7caf, 0x7c6d,
-+ 0x7cc9, 0x7cfa, 0x8de7, 0x8e2c, 0x7f38, 0x080c, 0x0d7e, 0x00d6,
-+ 0x080c, 0x7fd5, 0x7003, 0x2414, 0x7007, 0x0018, 0x700b, 0x0800,
-+ 0x7814, 0x2068, 0x683c, 0x700e, 0x6850, 0x7022, 0x6854, 0x7026,
-+ 0x60c3, 0x0018, 0x080c, 0x8576, 0x00de, 0x0005, 0x00d6, 0x7810,
-+ 0x2068, 0x68a0, 0x2069, 0x1100, 0x6ad8, 0xd2ac, 0x1110, 0xd0bc,
-+ 0x0110, 0x9085, 0x0001, 0x00de, 0x0005, 0x00d6, 0x080c, 0x7fd5,
-+ 0x7003, 0x0500, 0x7814, 0x90e8, 0x001b, 0x6808, 0x700a, 0x680c,
-+ 0x700e, 0x6810, 0x7012, 0x6814, 0x7016, 0x6818, 0x701a, 0x681c,
-+ 0x701e, 0x60c3, 0x0010, 0x080c, 0x8576, 0x00de, 0x0005, 0x00d6,
-+ 0x080c, 0x7fd5, 0x7003, 0x0500, 0x7814, 0x90e8, 0x0031, 0x6808,
-+ 0x700a, 0x680c, 0x700e, 0x6810, 0x7012, 0x6814, 0x7016, 0x6818,
-+ 0x701a, 0x681c, 0x701e, 0x60c3, 0x0010, 0x080c, 0x8576, 0x00de,
-+ 0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x080c, 0x7fd5, 0x20e9,
-+ 0x0000, 0x20e1, 0x0001, 0x2001, 0x12dd, 0x2003, 0x0000, 0x7814,
-+ 0x2068, 0x6814, 0x8003, 0x60c2, 0x6830, 0x20a8, 0x9d80, 0x001b,
-+ 0x2098, 0x2001, 0x12dd, 0x0016, 0x200c, 0x2001, 0x0001, 0x080c,
-+ 0x1b4c, 0x080c, 0xb539, 0x9006, 0x080c, 0x1b4c, 0x001e, 0x6804,
-+ 0x9005, 0x0110, 0x2068, 0x0c40, 0x04b9, 0x080c, 0x8576, 0x012e,
-+ 0x00de, 0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x080c, 0x804b,
-+ 0x20e9, 0x0000, 0x20e1, 0x0001, 0x2001, 0x12dd, 0x2003, 0x0000,
-+ 0x7814, 0x2068, 0x686f, 0x0200, 0x6873, 0x0000, 0x6814, 0x8003,
-+ 0x60c2, 0x6830, 0x20a8, 0x9d80, 0x001b, 0x2098, 0x2001, 0x12dd,
-+ 0x0016, 0x200c, 0x080c, 0xb539, 0x001e, 0x6804, 0x9005, 0x0110,
-+ 0x2068, 0x0c78, 0x0049, 0x7814, 0x2068, 0x080c, 0x0edf, 0x080c,
-+ 0x8576, 0x012e, 0x00de, 0x0005, 0x60c0, 0x8004, 0x9084, 0x0003,
-+ 0x9005, 0x0130, 0x9082, 0x0004, 0x20a3, 0x0000, 0x8000, 0x1de0,
-+ 0x0005, 0x080c, 0x7fd5, 0x7003, 0x7800, 0x7007, 0x0000, 0x7808,
-+ 0x8007, 0x700a, 0x700f, 0x0000, 0x60c3, 0x0008, 0x080c, 0x8576,
-+ 0x0005, 0x00d6, 0x00e6, 0x080c, 0x804b, 0x2073, 0x0200, 0x8e70,
-+ 0x2073, 0x0000, 0x8e70, 0x2073, 0xdf10, 0x8e70, 0x2073, 0x0034,
-+ 0x8e70, 0x2069, 0x1105, 0x20a9, 0x0004, 0x2d76, 0x8d68, 0x8e70,
-+ 0x1f04, 0x7d5d, 0x2069, 0x1101, 0x20a9, 0x0004, 0x2d76, 0x8d68,
-+ 0x8e70, 0x1f04, 0x7d66, 0x2069, 0x12ea, 0x20a9, 0x001a, 0x9e86,
-+ 0x0260, 0x1148, 0x00c6, 0x2061, 0x0200, 0x6010, 0x8000, 0x6012,
-+ 0x00ce, 0x2071, 0x0240, 0x2d04, 0x8007, 0x2072, 0x8d68, 0x8e70,
-+ 0x1f04, 0x7d6f, 0x2073, 0x0000, 0x8e70, 0x2073, 0x0000, 0x60c3,
-+ 0x004c, 0x080c, 0x8576, 0x00ee, 0x00de, 0x0005, 0x080c, 0x7fd5,
-+ 0x7003, 0x6300, 0x7007, 0x0028, 0x700b, 0x0000, 0x7808, 0x700e,
-+ 0x60c3, 0x0008, 0x080c, 0x8576, 0x0005, 0x00d6, 0x0026, 0x0016,
-+ 0x080c, 0x804b, 0x7003, 0x0200, 0x7814, 0x700e, 0x00e6, 0x9ef0,
-+ 0x0004, 0x2009, 0x0001, 0x2011, 0x000c, 0x2073, 0x0800, 0x8e70,
-+ 0x2073, 0x0000, 0x00ee, 0x7206, 0x710a, 0x62c2, 0x080c, 0x8576,
-+ 0x001e, 0x002e, 0x00de, 0x0005, 0x2001, 0x1116, 0x2004, 0x609a,
-+ 0x080c, 0x8576, 0x0005, 0x080c, 0x7fd5, 0x7003, 0x5200, 0x2069,
-+ 0x1152, 0x6804, 0xd084, 0x0130, 0x6828, 0x0016, 0x080c, 0x1f77,
-+ 0x710e, 0x001e, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, 0x1105,
-+ 0x20e9, 0x0000, 0x20a1, 0x0250, 0x4003, 0x20a9, 0x0004, 0x2099,
-+ 0x1101, 0x20a1, 0x0254, 0x4003, 0x2001, 0x1136, 0x2004, 0xd0ac,
-+ 0x1138, 0x7810, 0x9080, 0x0028, 0x2004, 0x9082, 0x007f, 0x0248,
-+ 0x2001, 0x111d, 0x2004, 0x7032, 0x2001, 0x111e, 0x2004, 0x7036,
-+ 0x0030, 0x2001, 0x1116, 0x2004, 0x9084, 0x00ff, 0x7036, 0x60c3,
-+ 0x001c, 0x080c, 0x8576, 0x0005, 0x080c, 0x7fd5, 0x7003, 0x0500,
-+ 0x2001, 0x1136, 0x2004, 0xd0ac, 0x1138, 0x7810, 0x9080, 0x0028,
-+ 0x2004, 0x9082, 0x007f, 0x0248, 0x2001, 0x111d, 0x2004, 0x700a,
-+ 0x2001, 0x111e, 0x2004, 0x700e, 0x0030, 0x2001, 0x1116, 0x2004,
-+ 0x9084, 0x00ff, 0x700e, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099,
-+ 0x1105, 0x20e9, 0x0000, 0x20a1, 0x0250, 0x4003, 0x60c3, 0x0010,
-+ 0x080c, 0x8576, 0x0005, 0x080c, 0x7fd5, 0x00c6, 0x7810, 0x2060,
-+ 0x9006, 0x080c, 0x5898, 0x00ce, 0x7810, 0x9080, 0x0028, 0x2004,
-+ 0x9086, 0x007e, 0x1130, 0x7003, 0x0400, 0x620c, 0xc2b4, 0x620e,
-+ 0x0068, 0x7814, 0x00d6, 0x906d, 0x0130, 0x689b, 0x0000, 0x68a7,
-+ 0x0000, 0x68ab, 0x0000, 0x00de, 0x7003, 0x0300, 0x7810, 0x9080,
-+ 0x0028, 0x2004, 0x9086, 0x007e, 0x1904, 0x7eab, 0x00d6, 0x2069,
-+ 0x1297, 0x2001, 0x1136, 0x2004, 0xd0a4, 0x0178, 0x6800, 0x700a,
-+ 0x6808, 0x9084, 0x2000, 0x7012, 0x680c, 0x7016, 0x701f, 0x2710,
-+ 0x6818, 0x7022, 0x681c, 0x7026, 0x0080, 0x6800, 0x700a, 0x6804,
-+ 0x700e, 0x6808, 0x080c, 0x62e4, 0x1118, 0x9084, 0x37ff, 0x0010,
-+ 0x9084, 0x3fff, 0x7012, 0x680c, 0x7016, 0x00de, 0x20a9, 0x0004,
-+ 0x20e1, 0x0001, 0x2099, 0x1105, 0x20e9, 0x0000, 0x20a1, 0x0256,
-+ 0x4003, 0x20a9, 0x0004, 0x2099, 0x1101, 0x20a1, 0x025a, 0x4003,
-+ 0x00d6, 0x080c, 0x8dae, 0x2069, 0x129f, 0x2071, 0x024e, 0x6800,
-+ 0xc0dd, 0x7002, 0x2001, 0x1172, 0x2004, 0xd0e4, 0x0110, 0x680c,
-+ 0x700e, 0x00de, 0x04a8, 0x2001, 0x1136, 0x2004, 0xd0a4, 0x0170,
-+ 0x0016, 0x2001, 0x1298, 0x200c, 0x60e0, 0x9106, 0x0130, 0x2100,
-+ 0x60e3, 0x0000, 0x080c, 0x1fb8, 0x61e2, 0x001e, 0x20e1, 0x0001,
-+ 0x2099, 0x1297, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x20a9, 0x0008,
-+ 0x4003, 0x20a9, 0x0004, 0x2099, 0x1105, 0x20a1, 0x0256, 0x4003,
-+ 0x20a9, 0x0004, 0x2099, 0x1101, 0x20a1, 0x025a, 0x4003, 0x080c,
-+ 0x8dae, 0x20a1, 0x024e, 0x20a9, 0x0008, 0x2099, 0x129f, 0x4003,
-+ 0x60c3, 0x0074, 0x080c, 0x8576, 0x0005, 0x080c, 0x7fd5, 0x7003,
-+ 0x2010, 0x7007, 0x0014, 0x700b, 0x0800, 0x700f, 0x2000, 0x9006,
-+ 0x00f6, 0x2079, 0x1152, 0x7904, 0x00fe, 0xd1ac, 0x1110, 0x9085,
-+ 0x0020, 0xd1a4, 0x0110, 0x9085, 0x0010, 0x9085, 0x0002, 0x00d6,
-+ 0x0804, 0x7f85, 0x7026, 0x60c3, 0x0014, 0x080c, 0x8576, 0x0005,
-+ 0x080c, 0x7fd5, 0x7003, 0x5000, 0x0804, 0x7e56, 0x080c, 0x7fd5,
-+ 0x7003, 0x2110, 0x7007, 0x0014, 0x60c3, 0x0014, 0x080c, 0x8576,
-+ 0x0005, 0x080c, 0x8042, 0x0010, 0x080c, 0x804b, 0x7003, 0x0200,
-+ 0x60c3, 0x0004, 0x080c, 0x8576, 0x0005, 0x080c, 0x804b, 0x7003,
-+ 0x0100, 0x700b, 0x0003, 0x700f, 0x2a00, 0x60c3, 0x0008, 0x080c,
-+ 0x8576, 0x0005, 0x080c, 0x804b, 0x7003, 0x0200, 0x0804, 0x7e56,
-+ 0x080c, 0x804b, 0x7003, 0x0100, 0x782c, 0x9005, 0x0110, 0x700a,
-+ 0x0010, 0x700b, 0x0003, 0x7814, 0x700e, 0x60c3, 0x0008, 0x080c,
-+ 0x8576, 0x0005, 0x00d6, 0x080c, 0x804b, 0x7003, 0x0210, 0x7007,
-+ 0x0014, 0x700b, 0x0800, 0x7810, 0x2068, 0x6894, 0x9086, 0x0014,
-+ 0x1198, 0x699c, 0x9184, 0x0030, 0x0190, 0x6998, 0x9184, 0xc000,
-+ 0x1140, 0xd1ec, 0x0118, 0x700f, 0x2100, 0x0058, 0x700f, 0x0100,
-+ 0x0040, 0x700f, 0x0400, 0x0028, 0x700f, 0x0700, 0x0010, 0x700f,
-+ 0x0800, 0x00f6, 0x2079, 0x1152, 0x7904, 0x00fe, 0xd1ac, 0x1110,
-+ 0x9085, 0x0020, 0xd1a4, 0x0110, 0x9085, 0x0010, 0x2009, 0x1174,
-+ 0x210c, 0xd184, 0x1110, 0x9085, 0x0002, 0x0026, 0x2009, 0x1172,
-+ 0x210c, 0xd1e4, 0x0130, 0xc0c5, 0x9094, 0x0030, 0x9296, 0x0010,
-+ 0x0140, 0xd1ec, 0x0130, 0x9094, 0x0030, 0x9296, 0x0010, 0x0108,
-+ 0xc0bd, 0x002e, 0x7026, 0x60c3, 0x0014, 0x00de, 0x080c, 0x8576,
-+ 0x0005, 0x080c, 0x804b, 0x7003, 0x0210, 0x7007, 0x0014, 0x700f,
-+ 0x0100, 0x60c3, 0x0014, 0x080c, 0x8576, 0x0005, 0x080c, 0x804b,
-+ 0x7003, 0x0200, 0x0804, 0x7dc7, 0x080c, 0x804b, 0x7003, 0x0100,
-+ 0x700b, 0x0003, 0x700f, 0x2a00, 0x60c3, 0x0008, 0x080c, 0x8576,
-+ 0x0005, 0x080c, 0x804b, 0x7003, 0x0100, 0x700b, 0x000b, 0x60c3,
-+ 0x0008, 0x080c, 0x8576, 0x0005, 0x0026, 0x00d6, 0x0036, 0x0046,
-+ 0x2019, 0x3200, 0x2021, 0x0800, 0x0040, 0x0026, 0x00d6, 0x0036,
-+ 0x0046, 0x2019, 0x2200, 0x2021, 0x0100, 0x080c, 0x8dc3, 0x7810,
-+ 0x2068, 0x6810, 0x9305, 0x7002, 0x6814, 0x7006, 0x6aa0, 0x2069,
-+ 0x1100, 0x6858, 0x700e, 0x9286, 0x007e, 0x1168, 0x9385, 0x00ff,
-+ 0x7002, 0x7007, 0xfffe, 0x2001, 0x12a7, 0x2004, 0x9005, 0x01e8,
-+ 0x6a78, 0x720e, 0x00d0, 0x9286, 0x007f, 0x1130, 0x9385, 0x00ff,
-+ 0x7002, 0x7007, 0xfffd, 0x0068, 0x68d8, 0xd0ac, 0x1110, 0xd2bc,
-+ 0x0160, 0x9286, 0x0080, 0x1128, 0x9385, 0x00ff, 0x7002, 0x7007,
-+ 0xfffc, 0x6874, 0x700a, 0x6878, 0x700e, 0x9485, 0x0029, 0x7012,
-+ 0x004e, 0x003e, 0x00de, 0x080c, 0x8565, 0x721a, 0x9f95, 0x0000,
-+ 0x7222, 0x7027, 0xffff, 0x2071, 0x024c, 0x002e, 0x0005, 0x0026,
-+ 0x080c, 0x8dc3, 0x7003, 0x02ff, 0x7007, 0xfffc, 0x00d6, 0x2069,
-+ 0x1100, 0x6874, 0x700a, 0x6878, 0x700e, 0x00de, 0x7013, 0x2029,
-+ 0x0c10, 0x7003, 0x0100, 0x7007, 0x0000, 0x700b, 0xfc02, 0x700f,
-+ 0x0000, 0x0005, 0x0026, 0x00d6, 0x0036, 0x0046, 0x2019, 0x3300,
-+ 0x2021, 0x0800, 0x0040, 0x0026, 0x00d6, 0x0036, 0x0046, 0x2019,
-+ 0x2300, 0x2021, 0x0100, 0x080c, 0x8dc3, 0x7810, 0x2068, 0x6810,
-+ 0x9305, 0x7002, 0x6814, 0x7006, 0x68a0, 0x2069, 0x1100, 0x6a58,
-+ 0x720e, 0x6ad8, 0xd2ac, 0x1118, 0x9092, 0x007e, 0x02a0, 0x7810,
-+ 0x00c6, 0x2060, 0x6010, 0x9005, 0x1140, 0x6014, 0x9005, 0x1128,
-+ 0x700b, 0x00ff, 0x700f, 0xfffe, 0x0020, 0x6874, 0x700a, 0x6878,
-+ 0x700e, 0x00ce, 0x0000, 0x9485, 0x0098, 0x7012, 0x004e, 0x003e,
-+ 0x00de, 0x080c, 0x8565, 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226,
-+ 0x2071, 0x024c, 0x002e, 0x0005, 0x080c, 0x8565, 0x721a, 0x7a08,
-+ 0x7222, 0x7814, 0x7026, 0x2071, 0x024c, 0x002e, 0x0005, 0x00c6,
-+ 0x00d6, 0x00e6, 0x00f6, 0x2069, 0x0200, 0x2071, 0x0240, 0x6004,
-+ 0x908a, 0x0085, 0x0a0c, 0x0d7e, 0x908a, 0x0092, 0x1a0c, 0x0d7e,
-+ 0x6110, 0x2178, 0x79a0, 0x2011, 0x1136, 0x2214, 0xd2ac, 0x1110,
-+ 0xd1bc, 0x0148, 0x7900, 0xd1f4, 0x0120, 0x7914, 0x918c, 0x00ff,
-+ 0x0038, 0x900e, 0x0028, 0x91f8, 0x298c, 0x2f0d, 0x918c, 0x00ff,
-+ 0x2c78, 0x2061, 0x0100, 0x619a, 0x9082, 0x0085, 0x002b, 0x00fe,
-+ 0x00ee, 0x00de, 0x00ce, 0x0005, 0x80db, 0x80e1, 0x80ed, 0x80d9,
-+ 0x80d9, 0x80d9, 0x80db, 0x80d9, 0x80d9, 0x80d9, 0x80d9, 0x80d9,
-+ 0x80d9, 0x080c, 0x0d7e, 0x00e1, 0x60c3, 0x0000, 0x080c, 0x8576,
-+ 0x0005, 0x04a9, 0x7808, 0x700a, 0x7814, 0x700e, 0x7017, 0xffff,
-+ 0x60c3, 0x000c, 0x080c, 0x8576, 0x0005, 0x080c, 0x8137, 0x7003,
-+ 0x0003, 0x7007, 0x0300, 0x60c3, 0x0004, 0x080c, 0x8576, 0x0005,
-+ 0x0026, 0x080c, 0x8dc3, 0x7810, 0x2068, 0x6810, 0x9085, 0x8100,
-+ 0x7002, 0x6814, 0x7006, 0x68a0, 0x2069, 0x1100, 0x6ad8, 0xd2ac,
-+ 0x1118, 0x9092, 0x007e, 0x0240, 0x6874, 0x700a, 0x6878, 0x700e,
-+ 0x7013, 0x0009, 0x0804, 0x801b, 0x6a58, 0x720e, 0x0cc8, 0x0026,
-+ 0x080c, 0x8dc3, 0x7810, 0x2068, 0x6810, 0x9085, 0x8400, 0x7002,
-+ 0x6814, 0x7006, 0x68a0, 0x2069, 0x1100, 0x6ad8, 0xd2ac, 0x1118,
-+ 0x9092, 0x007e, 0x0248, 0x6874, 0x700a, 0x6878, 0x700e, 0x2001,
-+ 0x0099, 0x7012, 0x0804, 0x808c, 0x6a58, 0x720e, 0x0cc0, 0x0026,
-+ 0x080c, 0x8dc3, 0x7810, 0x2068, 0x6810, 0x9085, 0x8500, 0x7002,
-+ 0x6814, 0x7006, 0x68a0, 0x2069, 0x1100, 0x6ad8, 0xd2ac, 0x1118,
-+ 0x9092, 0x007e, 0x0248, 0x6874, 0x700a, 0x6878, 0x700e, 0x2001,
-+ 0x0099, 0x7012, 0x0804, 0x808c, 0x6a58, 0x720e, 0x0cc0, 0x00c6,
-+ 0x00d6, 0x00e6, 0x00f6, 0x2c78, 0x2069, 0x0200, 0x2071, 0x0240,
-+ 0x7804, 0x908a, 0x0040, 0x0a0c, 0x0d7e, 0x908a, 0x0054, 0x1a0c,
-+ 0x0d7e, 0x7910, 0x2160, 0x61a0, 0x2011, 0x1136, 0x2214, 0xd2ac,
-+ 0x1110, 0xd1bc, 0x0148, 0x6100, 0xd1f4, 0x0120, 0x6114, 0x918c,
-+ 0x00ff, 0x0038, 0x900e, 0x0028, 0x91e0, 0x298c, 0x2c0d, 0x918c,
-+ 0x00ff, 0x2061, 0x0100, 0x619a, 0x9082, 0x0040, 0x002b, 0x00fe,
-+ 0x00ee, 0x00de, 0x00ce, 0x0005, 0x81a1, 0x825f, 0x8226, 0x8391,
-+ 0x819f, 0x819f, 0x819f, 0x819f, 0x819f, 0x819f, 0x819f, 0x893a,
-+ 0x8942, 0x894a, 0x8952, 0x819f, 0x8d0a, 0x819f, 0x8932, 0x080c,
-+ 0x0d7e, 0x780b, 0xffff, 0x080c, 0x81f4, 0x7914, 0x2168, 0x6978,
-+ 0x7956, 0x7132, 0x697c, 0x9184, 0x000f, 0x1118, 0x2001, 0x0005,
-+ 0x0040, 0xd184, 0x0118, 0x2001, 0x0004, 0x0018, 0x9084, 0x0006,
-+ 0x8004, 0x2010, 0x785c, 0x9084, 0x00ff, 0x8007, 0x9205, 0x7042,
-+ 0xd1ac, 0x0128, 0x7047, 0x0002, 0x080c, 0x137e, 0x0050, 0xd1b4,
-+ 0x0118, 0x7047, 0x0001, 0x0028, 0x7047, 0x0000, 0x9016, 0x2230,
-+ 0x0010, 0x6ab0, 0x6eac, 0x726a, 0x766e, 0x20a9, 0x0008, 0x20e9,
-+ 0x0000, 0x9d88, 0x0023, 0x20e1, 0x0001, 0x2198, 0x20a1, 0x0252,
-+ 0x2069, 0x0200, 0x6813, 0x0018, 0x4003, 0x6813, 0x0008, 0x60c3,
-+ 0x0020, 0x6017, 0x0009, 0x2001, 0x1320, 0x2003, 0x07d0, 0x2001,
-+ 0x131f, 0x2003, 0x0009, 0x0005, 0x00d6, 0x6813, 0x0008, 0x7a10,
-+ 0x2268, 0x6a8c, 0x8210, 0x9294, 0x00ff, 0x6a8e, 0x8217, 0x721a,
-+ 0x6a10, 0x9295, 0x0600, 0x7202, 0x6a14, 0x7206, 0x68a0, 0x6900,
-+ 0x2069, 0x1100, 0x6bd8, 0xd3ac, 0x1138, 0xd0bc, 0x0188, 0xd1f4,
-+ 0x0118, 0x9294, 0x00ff, 0x629a, 0x6a74, 0x720a, 0x6a78, 0x720e,
-+ 0x7013, 0x0829, 0x2f10, 0x7222, 0x7027, 0xffff, 0x00de, 0x0005,
-+ 0x9294, 0x00ff, 0x629a, 0x6a58, 0x720e, 0x0c90, 0x00d6, 0x0081,
-+ 0x7814, 0x2068, 0x6890, 0x7002, 0x688c, 0x7006, 0x68b0, 0x700a,
-+ 0x68ac, 0x700e, 0x60c3, 0x000c, 0x00de, 0x080c, 0x8576, 0x0005,
-+ 0x00d6, 0x6813, 0x0008, 0x7810, 0x2068, 0x6810, 0x9085, 0x0500,
-+ 0x7002, 0x6814, 0x7006, 0x68a0, 0x2069, 0x1100, 0x6ad8, 0xd2ac,
-+ 0x1110, 0xd0bc, 0x0188, 0x6874, 0x700a, 0x6878, 0x700e, 0x7013,
-+ 0x0889, 0x080c, 0x8565, 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226,
-+ 0x2071, 0x024c, 0x00de, 0x0005, 0x6a58, 0x720e, 0x0c80, 0x00d6,
-+ 0x080c, 0x8364, 0x7814, 0x2068, 0x9084, 0xf000, 0x1130, 0x7814,
-+ 0x9084, 0x0700, 0x8007, 0x002b, 0x0010, 0x9006, 0x0013, 0x00de,
-+ 0x0005, 0x827b, 0x82e8, 0x82f8, 0x831f, 0x832c, 0x833e, 0x8346,
-+ 0x8279, 0x080c, 0x0d7e, 0x0016, 0x0036, 0x697c, 0x918c, 0x0003,
-+ 0x0118, 0x9186, 0x0003, 0x11a0, 0x6ba8, 0x7824, 0xd0cc, 0x1170,
-+ 0x7316, 0x6898, 0x701a, 0x6894, 0x701e, 0x003e, 0x001e, 0x2001,
-+ 0x12e8, 0x2004, 0x60c2, 0x080c, 0x8576, 0x0005, 0xc3e5, 0x0c80,
-+ 0x9186, 0x0001, 0x190c, 0x0d7e, 0x6ba8, 0x7824, 0xd0cc, 0x1904,
-+ 0x82e5, 0x7316, 0x6898, 0x701a, 0x6894, 0x701e, 0x68a4, 0x7026,
-+ 0x68ac, 0x702e, 0x2009, 0x0018, 0x9384, 0x0300, 0x0580, 0xd3c4,
-+ 0x0110, 0x68ac, 0x9108, 0xd3cc, 0x0110, 0x68a4, 0x9108, 0x2011,
-+ 0x0258, 0x0156, 0x20a9, 0x0008, 0x9d80, 0x002c, 0x201c, 0x831f,
-+ 0x2312, 0x8000, 0x8210, 0x1f04, 0x82be, 0x0016, 0x00d6, 0x2069,
-+ 0x0200, 0x080c, 0x8dae, 0x00de, 0x001e, 0x2011, 0x0240, 0x20a9,
-+ 0x0005, 0x201c, 0x831f, 0x2312, 0x8000, 0x8210, 0x1f04, 0x82d1,
-+ 0x015e, 0x9184, 0x0003, 0x0118, 0x2019, 0x0245, 0x201a, 0x61c2,
-+ 0x003e, 0x001e, 0x080c, 0x8576, 0x0005, 0xc3e5, 0x0804, 0x82a1,
-+ 0x2011, 0x0008, 0x2001, 0x110e, 0x2004, 0xd0a4, 0x0110, 0x2011,
-+ 0x0028, 0x7824, 0xd0cc, 0x1110, 0x7216, 0x0478, 0x0ce8, 0xc2e5,
-+ 0x2011, 0x0302, 0x0016, 0x782c, 0x701a, 0x7930, 0x711e, 0x9105,
-+ 0x0108, 0xc2dd, 0x001e, 0x7824, 0xd0cc, 0x0108, 0xc2e5, 0x7216,
-+ 0x7027, 0x0012, 0x702f, 0x0008, 0x7043, 0x7000, 0x7047, 0x0500,
-+ 0x704f, 0x000a, 0x2069, 0x0200, 0x6813, 0x0009, 0x2071, 0x0240,
-+ 0x700b, 0x2500, 0x60c3, 0x0032, 0x080c, 0x8576, 0x0005, 0x2011,
-+ 0x0028, 0x7824, 0xd0cc, 0x1130, 0x7216, 0x60c3, 0x0018, 0x080c,
-+ 0x8576, 0x0005, 0x0cc8, 0xc2e5, 0x2011, 0x0100, 0x7824, 0xd0cc,
-+ 0x0108, 0xc2e5, 0x7216, 0x702f, 0x0008, 0x7858, 0x9084, 0x00ff,
-+ 0x7036, 0x60c3, 0x0020, 0x080c, 0x8576, 0x0005, 0x2011, 0x0008,
-+ 0x7824, 0xd0cc, 0x0108, 0xc2e5, 0x7216, 0x08f8, 0x0036, 0x7b14,
-+ 0x9384, 0xff00, 0x7816, 0x9384, 0x00ff, 0x8001, 0x1138, 0x7824,
-+ 0xd0cc, 0x0108, 0xc2e5, 0x7216, 0x003e, 0x0878, 0x0046, 0x2021,
-+ 0x0800, 0x0006, 0x7824, 0xd0cc, 0x000e, 0x0108, 0xc4e5, 0x7416,
-+ 0x004e, 0x701e, 0x003e, 0x0808, 0x00d6, 0x6813, 0x0008, 0x7a10,
-+ 0x2268, 0x6810, 0x9085, 0x0700, 0x7002, 0x6814, 0x7006, 0x68a0,
-+ 0x2069, 0x1100, 0x6ad8, 0xd2ac, 0x1110, 0xd0bc, 0x01a0, 0x6874,
-+ 0x700a, 0x6878, 0x700e, 0x7824, 0xd0cc, 0x1180, 0x7013, 0x0898,
-+ 0x080c, 0x8565, 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226, 0x2071,
-+ 0x024c, 0x00de, 0x0005, 0x6a58, 0x720e, 0x0c68, 0x7013, 0x0889,
-+ 0x0c78, 0x0016, 0x7814, 0x9084, 0x0700, 0x8007, 0x0013, 0x001e,
-+ 0x0005, 0x83a1, 0x83a1, 0x83a3, 0x83a1, 0x83a1, 0x83a1, 0x83c0,
-+ 0x83a1, 0x080c, 0x0d7e, 0x7914, 0x918c, 0xf8ff, 0x918d, 0x0600,
-+ 0x7916, 0x2009, 0x0003, 0x00d1, 0x00d6, 0x2069, 0x1152, 0x6804,
-+ 0xd0bc, 0x0130, 0x682c, 0x9084, 0x00ff, 0x8007, 0x7032, 0x0010,
-+ 0x7033, 0x3f00, 0x00de, 0x60c3, 0x0001, 0x080c, 0x8576, 0x0005,
-+ 0x2009, 0x0003, 0x0019, 0x7033, 0x7f00, 0x0ca8, 0x00d6, 0x0016,
-+ 0x080c, 0x8dc3, 0x001e, 0x7810, 0x2068, 0x6810, 0x9085, 0x0100,
-+ 0x7002, 0x6814, 0x7006, 0x68a0, 0x2069, 0x1100, 0x6ad8, 0xd2ac,
-+ 0x1110, 0xd0bc, 0x0190, 0x6a74, 0x720a, 0x6a78, 0x720e, 0x7013,
-+ 0x0888, 0x918d, 0x0008, 0x7116, 0x080c, 0x8565, 0x721a, 0x7a08,
-+ 0x7222, 0x2f10, 0x7226, 0x00de, 0x0005, 0x6a58, 0x720e, 0x0c78,
-+ 0x00e6, 0x00d6, 0x00c6, 0x0056, 0x0046, 0x0036, 0x2061, 0x0100,
-+ 0x2071, 0x1100, 0x7158, 0x7810, 0x2068, 0x68a0, 0x2028, 0x6910,
-+ 0x6a14, 0x76d8, 0xd6ac, 0x1128, 0xd0bc, 0x1118, 0x901e, 0x7458,
-+ 0x0010, 0x7374, 0x7478, 0x7820, 0x90be, 0x0006, 0x0904, 0x84dd,
-+ 0x90be, 0x000a, 0x1904, 0x8496, 0x609f, 0x0000, 0x7814, 0x2070,
-+ 0x707c, 0xd0fc, 0x0904, 0x845d, 0x7790, 0x9784, 0xff00, 0x9105,
-+ 0x6062, 0x873f, 0x9784, 0xff00, 0x0006, 0x7814, 0x9080, 0x001e,
-+ 0x2004, 0x9005, 0x000e, 0x1160, 0x7794, 0x87ff, 0x0548, 0x2039,
-+ 0x0098, 0x9705, 0x6072, 0x7808, 0x6082, 0x2f00, 0x6086, 0x0470,
-+ 0x9185, 0x2200, 0x6062, 0x6073, 0x0129, 0x6077, 0x0000, 0x609f,
-+ 0x0000, 0x2001, 0x1136, 0x2004, 0x9084, 0x0020, 0x11d8, 0x2001,
-+ 0x1136, 0x2004, 0x9084, 0x0008, 0x0140, 0x7814, 0x9080, 0x001d,
-+ 0x2004, 0x8007, 0x9082, 0x0080, 0x1268, 0x6814, 0x609e, 0x0050,
-+ 0x2039, 0x0029, 0x9705, 0x6072, 0x0028, 0x9185, 0x0200, 0x6062,
-+ 0x6073, 0x2029, 0x2f00, 0x6082, 0x7808, 0x6086, 0x6266, 0x636a,
-+ 0x646e, 0x6077, 0x0000, 0x688c, 0x8000, 0x9084, 0x00ff, 0x688e,
-+ 0x8007, 0x607a, 0x607f, 0x0000, 0x7038, 0x608a, 0x7034, 0x608e,
-+ 0x7048, 0x60c6, 0x7044, 0x60ca, 0x686c, 0x60ce, 0x60af, 0x95d5,
-+ 0x60d7, 0x0000, 0x080c, 0x8da8, 0x2009, 0x07d0, 0x60c4, 0x9084,
-+ 0xfff0, 0x9005, 0x0110, 0x2009, 0x1b58, 0x080c, 0x7276, 0x003e,
-+ 0x004e, 0x005e, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x9185, 0x0100,
-+ 0x6062, 0x6266, 0x636a, 0x646e, 0x6073, 0x0809, 0x6077, 0x0008,
-+ 0x60af, 0x95d5, 0x60d7, 0x0000, 0x688c, 0x8000, 0x9084, 0x00ff,
-+ 0x688e, 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00, 0x6082, 0x7808,
-+ 0x6086, 0x7814, 0x2070, 0x7038, 0x608a, 0x7034, 0x608e, 0x7048,
-+ 0x60c6, 0x7044, 0x60ca, 0x686c, 0x60ce, 0x9582, 0x0080, 0x0240,
-+ 0x6a00, 0xd2f4, 0x0120, 0x6a14, 0x9294, 0x00ff, 0x0008, 0x9016,
-+ 0x629e, 0x080c, 0x8da8, 0x2009, 0x07d0, 0x60c4, 0x9084, 0xfff0,
-+ 0x9005, 0x0110, 0x2009, 0x1b58, 0x080c, 0x7276, 0x003e, 0x004e,
-+ 0x005e, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x7814, 0x2070, 0x707c,
-+ 0x9084, 0x0003, 0x9086, 0x0002, 0x05e8, 0x9185, 0x0100, 0x6062,
-+ 0x6266, 0x636a, 0x646e, 0x6073, 0x0880, 0x6077, 0x0008, 0x688c,
-+ 0x8000, 0x9084, 0x00ff, 0x688e, 0x8007, 0x607a, 0x7838, 0x607e,
-+ 0x2f00, 0x6086, 0x7808, 0x6082, 0x7090, 0x608a, 0x708c, 0x608e,
-+ 0x70b0, 0x60c6, 0x70ac, 0x60ca, 0x70ac, 0x7930, 0x9108, 0x7932,
-+ 0x70b0, 0x792c, 0x9109, 0x792e, 0x686c, 0x60ce, 0x60af, 0x95d5,
-+ 0x60d7, 0x0000, 0x9582, 0x0080, 0x0240, 0x6a00, 0xd2f4, 0x0120,
-+ 0x6a14, 0x9294, 0x00ff, 0x0008, 0x9016, 0x629e, 0x080c, 0x8d83,
-+ 0x0804, 0x84cb, 0x9185, 0x0700, 0x6062, 0x6266, 0x636a, 0x646e,
-+ 0x7824, 0xd0cc, 0x7826, 0x0118, 0x6073, 0x0889, 0x0010, 0x6073,
-+ 0x0898, 0x6077, 0x0000, 0x688c, 0x8000, 0x9084, 0x00ff, 0x688e,
-+ 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00, 0x6086, 0x7808, 0x6082,
-+ 0x7038, 0x608a, 0x7034, 0x608e, 0x7048, 0x60c6, 0x7044, 0x60ca,
-+ 0x686c, 0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000, 0x9582, 0x0080,
-+ 0x0240, 0x6a00, 0xd2f4, 0x0120, 0x6a14, 0x9294, 0x00ff, 0x0008,
-+ 0x9016, 0x629e, 0x7824, 0xd0cc, 0x0120, 0x080c, 0x8da8, 0x0804,
-+ 0x84cb, 0x080c, 0x8d83, 0x0804, 0x84cb, 0x7a10, 0x9280, 0x0023,
-+ 0x2014, 0x8210, 0x9294, 0x00ff, 0x2202, 0x8217, 0x0005, 0x00d6,
-+ 0x2069, 0x1304, 0x6843, 0x0001, 0x00de, 0x0005, 0x60a3, 0x0056,
-+ 0x60a7, 0x9575, 0x00f1, 0x080c, 0x7268, 0x0005, 0x0016, 0x2001,
-+ 0x110c, 0x200c, 0x9184, 0x0600, 0x9086, 0x0600, 0x0128, 0x0089,
-+ 0x080c, 0x7268, 0x001e, 0x0005, 0xc1e5, 0x2001, 0x110c, 0x2102,
-+ 0x2001, 0x1305, 0x2003, 0x0000, 0x2001, 0x130d, 0x2003, 0x0000,
-+ 0x0c88, 0x0006, 0x6014, 0x9084, 0x1804, 0x9085, 0x0009, 0x6016,
-+ 0x000e, 0x0005, 0x0016, 0x00c6, 0x0006, 0x2061, 0x0100, 0x61a4,
-+ 0x60a7, 0x95f5, 0x6014, 0x9084, 0x1804, 0x9085, 0x0008, 0x6016,
-+ 0x000e, 0xa001, 0xa001, 0xa001, 0x61a6, 0x00ce, 0x001e, 0x0005,
-+ 0x00c6, 0x00d6, 0x0016, 0x0026, 0x2061, 0x0100, 0x2069, 0x0140,
-+ 0x080c, 0x62e4, 0x1198, 0x2001, 0x1320, 0x2004, 0x9005, 0x15d0,
-+ 0x0066, 0x2031, 0x0001, 0x080c, 0x6380, 0x006e, 0x1118, 0x080c,
-+ 0x7268, 0x0480, 0x00c6, 0x2061, 0x1304, 0x00f0, 0x6904, 0x9194,
-+ 0x4000, 0x0568, 0x0839, 0x2001, 0x1000, 0x080c, 0x2401, 0x9006,
-+ 0x080c, 0x2401, 0x00c6, 0x2061, 0x1304, 0x6128, 0x9192, 0x00c8,
-+ 0x1258, 0x8108, 0x612a, 0x6124, 0x00ce, 0x81ff, 0x0198, 0x080c,
-+ 0x7268, 0x080c, 0x8599, 0x0070, 0x6124, 0x91e5, 0x0000, 0x0140,
-+ 0x080c, 0xc463, 0x080c, 0x7271, 0x2009, 0x0014, 0x080c, 0x8f53,
-+ 0x00ce, 0x0000, 0x002e, 0x001e, 0x00de, 0x00ce, 0x0005, 0x2001,
-+ 0x1320, 0x2004, 0x9005, 0x1db0, 0x00c6, 0x2061, 0x1304, 0x6128,
-+ 0x9192, 0x0003, 0x1e08, 0x8108, 0x612a, 0x00ce, 0x080c, 0x7268,
-+ 0x080c, 0x4faa, 0x0c38, 0x00c6, 0x00d6, 0x00e6, 0x0016, 0x0026,
-+ 0x080c, 0x727e, 0x2071, 0x1304, 0x713c, 0x81ff, 0x0904, 0x868e,
-+ 0x2061, 0x0100, 0x2069, 0x0140, 0x080c, 0x62e4, 0x11b0, 0x0036,
-+ 0x2019, 0x0002, 0x080c, 0x8847, 0x003e, 0x713c, 0x2160, 0x080c,
-+ 0xc463, 0x2009, 0x004a, 0x080c, 0x8f53, 0x0066, 0x2031, 0x0001,
-+ 0x080c, 0x6380, 0x006e, 0x0804, 0x868e, 0x6904, 0x9194, 0x4000,
-+ 0x0904, 0x8694, 0x2001, 0x1000, 0x080c, 0x2401, 0x9006, 0x080c,
-+ 0x2401, 0x00c6, 0x703c, 0x9065, 0x090c, 0x0d7e, 0x6020, 0x00ce,
-+ 0x9086, 0x0006, 0x1528, 0x61c8, 0x60c4, 0x9105, 0x1508, 0x2009,
-+ 0x110c, 0x2104, 0xd0d4, 0x01e0, 0x6214, 0x9294, 0x1800, 0x1128,
-+ 0x6224, 0x9294, 0x0002, 0x1510, 0x0030, 0xc0d4, 0x200a, 0xd0cc,
-+ 0x0110, 0x080c, 0x2369, 0x6014, 0x9084, 0xe7fd, 0x9085, 0x0010,
-+ 0x6016, 0x703c, 0x2060, 0x2009, 0x0049, 0x080c, 0x8f53, 0x0070,
-+ 0x0036, 0x2019, 0x0001, 0x080c, 0x8847, 0x003e, 0x713c, 0x2160,
-+ 0x080c, 0xc463, 0x2009, 0x004a, 0x080c, 0x8f53, 0x002e, 0x001e,
-+ 0x00ee, 0x00de, 0x00ce, 0x0005, 0x0804, 0x8651, 0x0026, 0x00e6,
-+ 0x2071, 0x1304, 0x7048, 0xd084, 0x01c0, 0x713c, 0x81ff, 0x01a8,
-+ 0x2071, 0x0100, 0x9188, 0x0008, 0x2114, 0x928e, 0x0006, 0x1138,
-+ 0x7014, 0x9084, 0x1984, 0x9085, 0x0012, 0x7016, 0x0030, 0x7014,
-+ 0x9084, 0x1984, 0x9085, 0x0016, 0x7016, 0x00ee, 0x002e, 0x0005,
-+ 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0056, 0x0046, 0x0006, 0x0126,
-+ 0x2091, 0x8000, 0x6010, 0x2068, 0x6ca0, 0x2071, 0x1304, 0x7018,
-+ 0x2068, 0x8dff, 0x0188, 0x68a0, 0x9406, 0x0118, 0x6854, 0x2068,
-+ 0x0cc0, 0x6014, 0x2060, 0x646c, 0x6570, 0x6678, 0x2d60, 0x080c,
-+ 0x5728, 0x0110, 0x9085, 0x0001, 0x012e, 0x000e, 0x004e, 0x005e,
-+ 0x006e, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x080c, 0x7fd5, 0x7003,
-+ 0x1200, 0x7820, 0x9086, 0x0004, 0x1110, 0x6098, 0x0018, 0x2001,
-+ 0x1116, 0x2004, 0x700e, 0x7838, 0x7012, 0x783c, 0x7016, 0x60c3,
-+ 0x002c, 0x080c, 0x8576, 0x0005, 0x080c, 0x7fd5, 0x7003, 0x0f00,
-+ 0x7808, 0x700e, 0x60c3, 0x0008, 0x080c, 0x8576, 0x0005, 0x0156,
-+ 0x080c, 0x804b, 0x7003, 0x0200, 0x2011, 0x1148, 0x63f0, 0x2312,
-+ 0x20a9, 0x0006, 0x2011, 0x1140, 0x2019, 0x1141, 0x9ef0, 0x0002,
-+ 0x2376, 0x8e70, 0x2276, 0x8e70, 0x9398, 0x0002, 0x9290, 0x0002,
-+ 0x1f04, 0x8718, 0x60c3, 0x001c, 0x080c, 0x8576, 0x015e, 0x0005,
-+ 0x0016, 0x0026, 0x080c, 0x8027, 0x080c, 0x8039, 0x9e80, 0x0004,
-+ 0x20e9, 0x0000, 0x20a0, 0x7814, 0x9080, 0x0000, 0x2004, 0x9080,
-+ 0x0021, 0x20e1, 0x0001, 0x2098, 0x7808, 0x9088, 0x0002, 0x21a8,
-+ 0x9192, 0x0010, 0x1250, 0x4003, 0x9080, 0x0004, 0x8003, 0x60c2,
-+ 0x080c, 0x8576, 0x002e, 0x001e, 0x0005, 0x20a9, 0x0010, 0x4003,
-+ 0x080c, 0x8dae, 0x20a1, 0x0240, 0x22a8, 0x4003, 0x0c68, 0x080c,
-+ 0x7fd5, 0x7003, 0x6200, 0x7808, 0x700e, 0x60c3, 0x0008, 0x080c,
-+ 0x8576, 0x0005, 0x0016, 0x0026, 0x080c, 0x7fd5, 0x20e9, 0x0000,
-+ 0x20a1, 0x024c, 0x7814, 0x9080, 0x0000, 0x2004, 0x9080, 0x0023,
-+ 0x20e1, 0x0001, 0x2098, 0x7808, 0x9088, 0x0002, 0x21a8, 0x4003,
-+ 0x8003, 0x60c2, 0x080c, 0x8576, 0x002e, 0x001e, 0x0005, 0x00e6,
-+ 0x00c6, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x1304, 0x700c,
-+ 0x2060, 0x8cff, 0x0178, 0x080c, 0xab2e, 0x1110, 0x080c, 0x97dc,
-+ 0x600c, 0x0006, 0x080c, 0xad68, 0x080c, 0x8ed9, 0x080c, 0x895e,
-+ 0x00ce, 0x0c78, 0x2c00, 0x700e, 0x700a, 0x012e, 0x000e, 0x00ce,
-+ 0x00ee, 0x0005, 0x0126, 0x0156, 0x00f6, 0x00e6, 0x00d6, 0x00c6,
-+ 0x0026, 0x0016, 0x0006, 0x2091, 0x8000, 0x2001, 0x110c, 0x200c,
-+ 0x918c, 0xe7ff, 0x2102, 0x2069, 0x0100, 0x2079, 0x0140, 0x2071,
-+ 0x1304, 0x7024, 0x2060, 0x8cff, 0x0904, 0x87ff, 0x080c, 0x85a2,
-+ 0x6ac0, 0x68c3, 0x0000, 0x080c, 0x7271, 0x00c6, 0x2061, 0x0100,
-+ 0x080c, 0x8dc7, 0x00ce, 0x2009, 0x0013, 0x080c, 0x8f53, 0x20a9,
-+ 0x01f4, 0x6824, 0xd094, 0x0170, 0x6827, 0x0004, 0x7804, 0x9084,
-+ 0x4000, 0x01d0, 0x2001, 0x1000, 0x080c, 0x2401, 0x9006, 0x080c,
-+ 0x2401, 0x0090, 0xd084, 0x0118, 0x6827, 0x0001, 0x0010, 0x1f04,
-+ 0x87d1, 0x7804, 0x9084, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c,
-+ 0x2401, 0x9006, 0x080c, 0x2401, 0x6824, 0x000e, 0x001e, 0x002e,
-+ 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e, 0x0005, 0x2001,
-+ 0x1100, 0x2004, 0x9096, 0x0001, 0x05c0, 0x9096, 0x0004, 0x05a8,
-+ 0x080c, 0x7271, 0x6814, 0x9084, 0x0001, 0x0110, 0x68a7, 0x95f5,
-+ 0x6817, 0x0008, 0x68c3, 0x0000, 0x2011, 0x4f57, 0x080c, 0x71fa,
-+ 0x20a9, 0x01f4, 0x6824, 0xd094, 0x0170, 0x6827, 0x0004, 0x7804,
-+ 0x9084, 0x4000, 0x01d0, 0x7803, 0x1000, 0x080c, 0x2401, 0x9006,
-+ 0x080c, 0x2401, 0x0090, 0xd084, 0x0118, 0x6827, 0x0001, 0x0010,
-+ 0x1f04, 0x881a, 0x7804, 0x9084, 0x1000, 0x0138, 0x2001, 0x0100,
-+ 0x080c, 0x2401, 0x9006, 0x080c, 0x2401, 0x000e, 0x001e, 0x002e,
-+ 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e, 0x0005, 0x0126,
-+ 0x0156, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0026, 0x0016, 0x0006,
-+ 0x2091, 0x8000, 0x2069, 0x0100, 0x2079, 0x0140, 0x2001, 0x110c,
-+ 0x200c, 0x918c, 0xdbff, 0x2102, 0x2071, 0x1304, 0x703c, 0x2060,
-+ 0x8cff, 0x0904, 0x88d8, 0x9386, 0x0002, 0x1128, 0x6814, 0x9084,
-+ 0x0002, 0x0904, 0x88d8, 0x68af, 0x95f5, 0x6817, 0x0010, 0x2009,
-+ 0x00fa, 0x8109, 0x1df0, 0x69c6, 0x68cb, 0x0008, 0x080c, 0x727e,
-+ 0x080c, 0x1872, 0x0046, 0x2009, 0x017f, 0x200b, 0x00a5, 0x2021,
-+ 0x0169, 0x2404, 0x9084, 0x000f, 0x9086, 0x0004, 0x11f8, 0x68af,
-+ 0x95f5, 0x68c6, 0x68cb, 0x0008, 0x00e6, 0x00f6, 0x2079, 0x0090,
-+ 0x2071, 0x134a, 0x6814, 0x9084, 0x1984, 0x9085, 0x0012, 0x6816,
-+ 0x782b, 0x0008, 0x7003, 0x0000, 0x00fe, 0x00ee, 0x9386, 0x0002,
-+ 0x1128, 0x7884, 0x9005, 0x1110, 0x7887, 0x0001, 0x2001, 0x12bb,
-+ 0x2004, 0x200a, 0x004e, 0x939d, 0x0000, 0x1120, 0x2009, 0x0049,
-+ 0x080c, 0x8f53, 0x20a9, 0x03e8, 0x6824, 0xd094, 0x0170, 0x6827,
-+ 0x0004, 0x7804, 0x9084, 0x4000, 0x01d0, 0x2001, 0x1000, 0x080c,
-+ 0x2401, 0x9006, 0x080c, 0x2401, 0x0090, 0xd08c, 0x0118, 0x6827,
-+ 0x0002, 0x0010, 0x1f04, 0x88b4, 0x7804, 0x9084, 0x1000, 0x0138,
-+ 0x2001, 0x0100, 0x080c, 0x2401, 0x9006, 0x080c, 0x2401, 0x6824,
-+ 0x000e, 0x001e, 0x002e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x015e,
-+ 0x012e, 0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2069, 0x1304,
-+ 0x6a06, 0x012e, 0x00de, 0x0005, 0x00d6, 0x0126, 0x2091, 0x8000,
-+ 0x2069, 0x1304, 0x6a32, 0x012e, 0x00de, 0x0005, 0x00f6, 0x00e6,
-+ 0x00c6, 0x0066, 0x0006, 0x0126, 0x2071, 0x1304, 0x7614, 0x2660,
-+ 0x2678, 0x2091, 0x8000, 0x8cff, 0x0530, 0x6020, 0x9206, 0x11f8,
-+ 0x7014, 0x9c36, 0x1110, 0x660c, 0x7616, 0x7010, 0x9c36, 0x1140,
-+ 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7012, 0x0010, 0x7013, 0x0000,
-+ 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678,
-+ 0x600f, 0x0000, 0x080c, 0x8f09, 0x04c9, 0x00ce, 0x08e0, 0x2c78,
-+ 0x600c, 0x2060, 0x08c0, 0x012e, 0x000e, 0x006e, 0x00ce, 0x00ee,
-+ 0x00fe, 0x0005, 0x080c, 0x81f4, 0x7814, 0x7032, 0x7042, 0x7047,
-+ 0x1000, 0x00f8, 0x080c, 0x81f4, 0x7814, 0x7032, 0x7042, 0x7047,
-+ 0x4000, 0x00b8, 0x080c, 0x81f4, 0x7814, 0x7032, 0x7042, 0x7047,
-+ 0x2000, 0x0078, 0x080c, 0x81f4, 0x7814, 0x7032, 0x7042, 0x7047,
-+ 0x0400, 0x0038, 0x080c, 0x81f4, 0x7814, 0x7032, 0x7042, 0x7047,
-+ 0x0200, 0x60c3, 0x0020, 0x080c, 0x8576, 0x0005, 0x00e6, 0x2071,
-+ 0x1304, 0x7020, 0x9005, 0x0110, 0x8001, 0x7022, 0x00ee, 0x0005,
-+ 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0076, 0x0066, 0x0006, 0x0126,
-+ 0x2091, 0x8000, 0x2071, 0x1304, 0x7614, 0x2660, 0x2678, 0x2039,
-+ 0x0001, 0x87ff, 0x0904, 0x89fa, 0x8cff, 0x0904, 0x89fa, 0x6020,
-+ 0x9086, 0x0006, 0x1904, 0x89f5, 0x88ff, 0x0138, 0x2800, 0x9c06,
-+ 0x1904, 0x89f5, 0x2039, 0x0000, 0x0050, 0x6010, 0x9206, 0x1904,
-+ 0x89f5, 0x85ff, 0x0120, 0x6054, 0x9106, 0x1904, 0x89f5, 0x7024,
-+ 0x9c06, 0x1578, 0x2069, 0x0100, 0x68c0, 0x9005, 0x0530, 0x080c,
-+ 0x7271, 0x6820, 0xd0b4, 0x0110, 0x68a7, 0x95f5, 0x6817, 0x0008,
-+ 0x68c3, 0x0000, 0x080c, 0x8a7d, 0x7027, 0x0000, 0x0036, 0x2069,
-+ 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c,
-+ 0x2401, 0x9006, 0x080c, 0x2401, 0x2069, 0x0100, 0x6824, 0xd084,
-+ 0x0110, 0x6827, 0x0001, 0x003e, 0x0020, 0x6003, 0x0009, 0x630a,
-+ 0x0460, 0x7014, 0x9c36, 0x1110, 0x660c, 0x7616, 0x7010, 0x9c36,
-+ 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7012, 0x0010, 0x7013,
-+ 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008,
-+ 0x2678, 0x89ff, 0x1158, 0x600f, 0x0000, 0x6014, 0x2068, 0x080c,
-+ 0xa942, 0x0110, 0x080c, 0xc0e9, 0x080c, 0x8f09, 0x080c, 0x895e,
-+ 0x88ff, 0x1190, 0x00ce, 0x0804, 0x8979, 0x2c78, 0x600c, 0x2060,
-+ 0x0804, 0x8979, 0x9006, 0x012e, 0x000e, 0x006e, 0x007e, 0x00ce,
-+ 0x00de, 0x00ee, 0x00fe, 0x0005, 0x601b, 0x0000, 0x00ce, 0x98c5,
-+ 0x0001, 0x0c88, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026,
-+ 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x1304, 0x7638, 0x2660,
-+ 0x2678, 0x8cff, 0x0904, 0x8a6d, 0x6020, 0x9086, 0x0006, 0x1904,
-+ 0x8a68, 0x87ff, 0x0128, 0x2700, 0x9c06, 0x1904, 0x8a68, 0x0040,
-+ 0x6010, 0x9206, 0x15e8, 0x85ff, 0x0118, 0x6054, 0x9106, 0x15c0,
-+ 0x703c, 0x9c06, 0x1168, 0x0036, 0x2019, 0x0001, 0x080c, 0x8847,
-+ 0x7033, 0x0000, 0x9006, 0x703e, 0x7042, 0x7046, 0x704a, 0x003e,
-+ 0x7038, 0x9c36, 0x1110, 0x660c, 0x763a, 0x7034, 0x9c36, 0x1140,
-+ 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7036, 0x0010, 0x7037, 0x0000,
-+ 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678,
-+ 0x600f, 0x0000, 0x6014, 0x2068, 0x080c, 0xa942, 0x0110, 0x080c,
-+ 0xc0e9, 0x080c, 0x8f09, 0x87ff, 0x1190, 0x00ce, 0x0804, 0x8a19,
-+ 0x2c78, 0x600c, 0x2060, 0x0804, 0x8a19, 0x9006, 0x012e, 0x000e,
-+ 0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x601b,
-+ 0x0000, 0x00ce, 0x97bd, 0x0001, 0x0c88, 0x00e6, 0x2071, 0x1304,
-+ 0x2001, 0x1100, 0x2004, 0x9086, 0x0002, 0x1118, 0x7007, 0x0005,
-+ 0x0010, 0x7007, 0x0000, 0x00ee, 0x0005, 0x00f6, 0x00e6, 0x00c6,
-+ 0x0066, 0x0026, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x1304,
-+ 0x2c10, 0x7638, 0x2660, 0x2678, 0x8cff, 0x0518, 0x2200, 0x9c06,
-+ 0x11e0, 0x7038, 0x9c36, 0x1110, 0x660c, 0x763a, 0x7034, 0x9c36,
-+ 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7036, 0x0010, 0x7037,
-+ 0x0000, 0x660c, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678,
-+ 0x600f, 0x0000, 0x9085, 0x0001, 0x0020, 0x2c78, 0x600c, 0x2060,
-+ 0x08d8, 0x012e, 0x000e, 0x002e, 0x006e, 0x00ce, 0x00ee, 0x00fe,
-+ 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0006, 0x0126,
-+ 0x2091, 0x8000, 0x2071, 0x1304, 0x760c, 0x2660, 0x2678, 0x8cff,
-+ 0x0904, 0x8b56, 0x6010, 0x9080, 0x0028, 0x2004, 0x9206, 0x1904,
-+ 0x8b51, 0x7024, 0x9c06, 0x1520, 0x2069, 0x0100, 0x68c0, 0x9005,
-+ 0x0904, 0x8b2d, 0x080c, 0x85a2, 0x68c3, 0x0000, 0x080c, 0x8a7d,
-+ 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000,
-+ 0x0138, 0x2001, 0x0100, 0x080c, 0x2401, 0x9006, 0x080c, 0x2401,
-+ 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e,
-+ 0x700c, 0x9c36, 0x1110, 0x660c, 0x760e, 0x7008, 0x9c36, 0x1140,
-+ 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x700a, 0x0010, 0x700b, 0x0000,
-+ 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678,
-+ 0x600f, 0x0000, 0x080c, 0xab1d, 0x1158, 0x080c, 0x2886, 0x080c,
-+ 0xab2e, 0x11f0, 0x080c, 0x97dc, 0x00d8, 0x080c, 0x8a7d, 0x08c0,
-+ 0x080c, 0xab2e, 0x1118, 0x080c, 0x97dc, 0x0090, 0x6014, 0x2068,
-+ 0x080c, 0xa942, 0x0168, 0x6020, 0x9086, 0x0003, 0x11f8, 0x6867,
-+ 0x0103, 0x6b7a, 0x6877, 0x0000, 0x080c, 0x5b76, 0x080c, 0xab11,
-+ 0x080c, 0xad68, 0x080c, 0x8f09, 0x080c, 0x895e, 0x00ce, 0x0804,
-+ 0x8ad7, 0x2c78, 0x600c, 0x2060, 0x0804, 0x8ad7, 0x012e, 0x000e,
-+ 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x6020, 0x9086,
-+ 0x0006, 0x1d30, 0x080c, 0xc0e9, 0x0c18, 0x00d6, 0x080c, 0x804b,
-+ 0x7003, 0x0200, 0x7007, 0x0014, 0x60c3, 0x0014, 0x20e1, 0x0001,
-+ 0x2099, 0x12c3, 0x20e9, 0x0000, 0x20a1, 0x0250, 0x20a9, 0x0004,
-+ 0x4003, 0x7023, 0x0004, 0x7027, 0x7878, 0x080c, 0x8576, 0x00de,
-+ 0x0005, 0x080c, 0x804b, 0x7003, 0x0214, 0x7007, 0x0018, 0x700b,
-+ 0x0800, 0x7814, 0x9084, 0xff00, 0x700e, 0x7814, 0x9084, 0x00ff,
-+ 0x7022, 0x782c, 0x7026, 0x60c3, 0x0018, 0x080c, 0x8576, 0x0005,
-+ 0x00d6, 0x0016, 0x00d6, 0x2f68, 0x2009, 0x0035, 0x080c, 0xaf4e,
-+ 0x00de, 0x1904, 0x8bfe, 0x080c, 0x7fd5, 0x7003, 0x1300, 0x782c,
-+ 0x2068, 0x6820, 0x9086, 0x0003, 0x0570, 0x7810, 0x9080, 0x0028,
-+ 0x2014, 0x2001, 0x1136, 0x2004, 0xd0ac, 0x11d0, 0x9286, 0x007e,
-+ 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffe, 0x04a8, 0x9286, 0x007f,
-+ 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffd, 0x0468, 0xd2bc, 0x0180,
-+ 0x9286, 0x0080, 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffc, 0x0418,
-+ 0x92e8, 0x1000, 0x2d6c, 0x6810, 0x700a, 0x6814, 0x700e, 0x00d8,
-+ 0x6098, 0x700e, 0x00c0, 0x2001, 0x1136, 0x2004, 0xd0ac, 0x1138,
-+ 0x7810, 0x9080, 0x0028, 0x2004, 0x9082, 0x007e, 0x0250, 0x00d6,
-+ 0x2069, 0x111d, 0x2d04, 0x700a, 0x8d68, 0x2d04, 0x700e, 0x00de,
-+ 0x0010, 0x6034, 0x700e, 0x7838, 0x7012, 0x783c, 0x7016, 0x60c3,
-+ 0x000c, 0x001e, 0x00de, 0x080c, 0x8576, 0x0005, 0x781b, 0x0001,
-+ 0x7803, 0x0006, 0x001e, 0x00de, 0x0005, 0x792c, 0x9180, 0x0008,
-+ 0x200c, 0x9186, 0x0006, 0x01b0, 0x9186, 0x0003, 0x0904, 0x8c75,
-+ 0x9186, 0x0005, 0x0904, 0x8c5e, 0x9186, 0x0004, 0x05c8, 0x9186,
-+ 0x0008, 0x0904, 0x8c66, 0x7807, 0x0037, 0x7817, 0x1700, 0x080c,
-+ 0x8cda, 0x0005, 0x080c, 0x8c9a, 0x00d6, 0x0026, 0x792c, 0x2168,
-+ 0x2009, 0x4000, 0x6800, 0x0002, 0x8c3f, 0x8c4a, 0x8c41, 0x8c4a,
-+ 0x8c46, 0x8c3f, 0x8c3f, 0x8c4a, 0x8c4a, 0x8c4a, 0x8c4a, 0x8c3f,
-+ 0x8c3f, 0x8c3f, 0x8c3f, 0x8c3f, 0x8c4a, 0x8c3f, 0x8c4a, 0x080c,
-+ 0x0d7e, 0x6824, 0xd0e4, 0x0110, 0xd0cc, 0x0110, 0x900e, 0x0010,
-+ 0x2009, 0x2000, 0x682c, 0x7022, 0x6830, 0x7026, 0x0804, 0x8c92,
-+ 0x080c, 0x8c9a, 0x00d6, 0x0026, 0x792c, 0x2168, 0x2009, 0x4000,
-+ 0x6a00, 0x9286, 0x0002, 0x1108, 0x900e, 0x04a0, 0x04d9, 0x00d6,
-+ 0x0026, 0x792c, 0x2168, 0x2009, 0x4000, 0x0460, 0x0499, 0x00d6,
-+ 0x0026, 0x792c, 0x2168, 0x2009, 0x4000, 0x9286, 0x0005, 0x0118,
-+ 0x9286, 0x0002, 0x1108, 0x900e, 0x00e8, 0x0421, 0x00d6, 0x0026,
-+ 0x792c, 0x2168, 0x6814, 0x2068, 0x69ac, 0x6834, 0x9112, 0x69b0,
-+ 0x6838, 0x9103, 0x7022, 0x7226, 0x792c, 0x9180, 0x0000, 0x2004,
-+ 0x908e, 0x0002, 0x0130, 0x908e, 0x0004, 0x0118, 0x2009, 0x4000,
-+ 0x0008, 0x900e, 0x712a, 0x60c3, 0x0018, 0x002e, 0x00de, 0x080c,
-+ 0x8576, 0x0005, 0x0036, 0x0046, 0x0056, 0x0066, 0x080c, 0x804b,
-+ 0x9006, 0x7003, 0x0200, 0x7938, 0x710a, 0x793c, 0x710e, 0x7810,
-+ 0x9080, 0x0028, 0x2004, 0x2011, 0x1136, 0x2214, 0xd2ac, 0x1118,
-+ 0x9092, 0x007e, 0x0268, 0x00d6, 0x2069, 0x111d, 0x2d2c, 0x8d68,
-+ 0x2d34, 0x90e8, 0x1000, 0x2d6c, 0x6b10, 0x6c14, 0x00de, 0x0028,
-+ 0x901e, 0x6498, 0x2029, 0x0000, 0x6634, 0x782c, 0x9080, 0x0008,
-+ 0x2004, 0x9086, 0x0003, 0x1128, 0x7512, 0x7616, 0x731a, 0x741e,
-+ 0x0020, 0x7312, 0x7416, 0x751a, 0x761e, 0x006e, 0x005e, 0x004e,
-+ 0x003e, 0x0005, 0x080c, 0x804b, 0x7003, 0x0100, 0x700b, 0x0009,
-+ 0x7814, 0x700e, 0x60c3, 0x0008, 0x080c, 0x8576, 0x0005, 0x080c,
-+ 0x7fcc, 0x7003, 0x1400, 0x7838, 0x700a, 0x783c, 0x700e, 0x782c,
-+ 0x7012, 0x7830, 0x7016, 0x7834, 0x9084, 0x00ff, 0x8007, 0x701a,
-+ 0x60c3, 0x0010, 0x080c, 0x8576, 0x0005, 0x080c, 0x8042, 0x7003,
-+ 0x0100, 0x782c, 0x700a, 0x7814, 0x700e, 0x60c3, 0x0008, 0x080c,
-+ 0x8576, 0x0005, 0x0029, 0x60c3, 0x0000, 0x080c, 0x8576, 0x0005,
-+ 0x00d6, 0x080c, 0x8dc3, 0x7810, 0x2068, 0x6810, 0x9085, 0x0300,
-+ 0x7002, 0x6814, 0x7006, 0x68a0, 0x2069, 0x1100, 0x6ad8, 0xd2ac,
-+ 0x1110, 0xd0bc, 0x0188, 0x6874, 0x700a, 0x6878, 0x700e, 0x7013,
-+ 0x0819, 0x080c, 0x8565, 0x721a, 0x2f10, 0x7222, 0x7a08, 0x7226,
-+ 0x2071, 0x024c, 0x00de, 0x0005, 0x6234, 0x720e, 0x0c80, 0x0059,
-+ 0x7914, 0x712a, 0x60c3, 0x0000, 0x60a7, 0x9575, 0x080c, 0x8599,
-+ 0x080c, 0x7268, 0x0005, 0x0036, 0x00d6, 0x00e6, 0x7858, 0x2068,
-+ 0x9df0, 0x001b, 0x7210, 0x9296, 0x00c0, 0x9294, 0xfffd, 0x7212,
-+ 0x7214, 0x9294, 0x0300, 0x7216, 0x7100, 0x9194, 0x00ff, 0x7308,
-+ 0x9384, 0x00ff, 0x908d, 0xc200, 0x7102, 0x9384, 0xff00, 0x9215,
-+ 0x720a, 0x7004, 0x720c, 0x700e, 0x7206, 0x00d6, 0x2069, 0x0200,
-+ 0x080c, 0x8dc3, 0x00de, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9,
-+ 0x000a, 0x20e1, 0x0001, 0x2e98, 0x4003, 0x60a3, 0x0035, 0x6a68,
-+ 0x9294, 0x7000, 0x9286, 0x3000, 0x0110, 0x60a3, 0x0037, 0x00ee,
-+ 0x00de, 0x003e, 0x0005, 0x900e, 0x7814, 0x9080, 0x001f, 0x2004,
-+ 0xd0fc, 0x01d8, 0x9084, 0x0003, 0x11c0, 0x2001, 0x110c, 0x2004,
-+ 0xd0bc, 0x0198, 0x7824, 0xd0cc, 0x1180, 0xd0c4, 0x1170, 0x7814,
-+ 0x9080, 0x002a, 0x2004, 0x9005, 0x1140, 0x2001, 0x110c, 0x200c,
-+ 0xc1d5, 0x2102, 0x2009, 0x12e9, 0x210c, 0x918d, 0x0092, 0x0010,
-+ 0x2009, 0x0096, 0x60ab, 0x0036, 0x6116, 0x0005, 0x2009, 0x0009,
-+ 0x00a0, 0x2009, 0x000a, 0x0088, 0x2009, 0x000b, 0x0070, 0x2009,
-+ 0x000c, 0x0058, 0x2009, 0x000d, 0x0040, 0x2009, 0x000e, 0x0028,
-+ 0x2009, 0x000f, 0x0010, 0x2009, 0x0008, 0x6912, 0x0005, 0x00d6,
-+ 0x9290, 0x0018, 0x8214, 0x20e9, 0x0000, 0x2069, 0x0200, 0x6813,
-+ 0x0000, 0x22a8, 0x9284, 0x00e0, 0x0128, 0x20a9, 0x0020, 0x9292,
-+ 0x0020, 0x0008, 0x9016, 0x20a1, 0x0240, 0x9006, 0x4004, 0x82ff,
-+ 0x0120, 0x6810, 0x8000, 0x6812, 0x0c60, 0x00de, 0x0005, 0x00d6,
-+ 0x0156, 0x080c, 0x804b, 0x7a14, 0x82ff, 0x0138, 0x7003, 0x0100,
-+ 0x700b, 0x0003, 0x60c3, 0x0008, 0x0490, 0x7003, 0x0200, 0x7007,
-+ 0x0000, 0x2069, 0x1100, 0x901e, 0x6800, 0x9086, 0x0004, 0x1110,
-+ 0xc38d, 0x0060, 0x080c, 0x62e4, 0x1110, 0xc3ad, 0x0008, 0xc3a5,
-+ 0x6ad8, 0xd29c, 0x1110, 0xd2ac, 0x0108, 0xc39d, 0x730e, 0x2011,
-+ 0x1148, 0x63f0, 0x2312, 0x20a9, 0x0006, 0x2011, 0x1140, 0x2019,
-+ 0x1141, 0x2071, 0x0250, 0x2376, 0x8e70, 0x2276, 0x8e70, 0x9398,
-+ 0x0002, 0x9290, 0x0002, 0x1f04, 0x8e1b, 0x60c3, 0x0040, 0x080c,
-+ 0x8576, 0x015e, 0x00de, 0x0005, 0x0156, 0x080c, 0x804b, 0x7a14,
-+ 0x82ff, 0x0168, 0x9286, 0xffff, 0x0118, 0x9282, 0x000e, 0x1238,
-+ 0x7003, 0x0100, 0x700b, 0x0003, 0x60c3, 0x0008, 0x04b8, 0x7003,
-+ 0x0200, 0x7007, 0x001c, 0x700f, 0x0001, 0x2011, 0x12f4, 0x2204,
-+ 0x8007, 0x701a, 0x8210, 0x2204, 0x8007, 0x701e, 0x2001, 0x1136,
-+ 0x2004, 0xd0ac, 0x1138, 0x7810, 0x9080, 0x0028, 0x2004, 0x9082,
-+ 0x007f, 0x0248, 0x2001, 0x111d, 0x2004, 0x7022, 0x2001, 0x111e,
-+ 0x2004, 0x7026, 0x0030, 0x2001, 0x1116, 0x2004, 0x9084, 0x00ff,
-+ 0x7026, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, 0x1105, 0x20e9,
-+ 0x0000, 0x20a1, 0x0256, 0x4003, 0x60c3, 0x001c, 0x080c, 0x8576,
-+ 0x015e, 0x0005, 0x2061, 0x15c0, 0x2071, 0x1100, 0x706c, 0x704e,
-+ 0x7053, 0x15c0, 0x0005, 0x00e6, 0x0126, 0x2071, 0x1100, 0x2091,
-+ 0x8000, 0x754c, 0x9582, 0x0010, 0x0608, 0x7050, 0x2060, 0x6000,
-+ 0x9086, 0x0000, 0x0148, 0x9ce0, 0x0018, 0x7060, 0x9c02, 0x1208,
-+ 0x0cb0, 0x2061, 0x15c0, 0x0c98, 0x6003, 0x0008, 0x8529, 0x754e,
-+ 0x9ca8, 0x0018, 0x7060, 0x9502, 0x1230, 0x7552, 0x9085, 0x0001,
-+ 0x012e, 0x00ee, 0x0005, 0x7053, 0x15c0, 0x0cc0, 0x9006, 0x0cc0,
-+ 0x00e6, 0x2071, 0x1100, 0x754c, 0x9582, 0x0010, 0x0600, 0x7050,
-+ 0x2060, 0x6000, 0x9086, 0x0000, 0x0148, 0x9ce0, 0x0018, 0x7060,
-+ 0x9c02, 0x1208, 0x0cb0, 0x2061, 0x15c0, 0x0c98, 0x6003, 0x0008,
-+ 0x8529, 0x754e, 0x9ca8, 0x0018, 0x7060, 0x9502, 0x1228, 0x7552,
-+ 0x9085, 0x0001, 0x00ee, 0x0005, 0x7053, 0x15c0, 0x0cc8, 0x9006,
-+ 0x0cc8, 0x9c82, 0x15c0, 0x0a0c, 0x0d7e, 0x2001, 0x1118, 0x2004,
-+ 0x9c02, 0x1a0c, 0x0d7e, 0x9006, 0x6006, 0x600a, 0x600e, 0x6016,
-+ 0x601a, 0x6012, 0x6023, 0x0000, 0x6003, 0x0000, 0x601e, 0x6056,
-+ 0x605a, 0x6026, 0x602a, 0x602e, 0x6032, 0x6036, 0x603a, 0x603e,
-+ 0x6042, 0x2061, 0x1100, 0x604c, 0x8000, 0x604e, 0x9086, 0x0001,
-+ 0x0108, 0x0005, 0x0126, 0x2091, 0x8000, 0x080c, 0x7aa4, 0x012e,
-+ 0x0cc0, 0x0006, 0x6000, 0x9086, 0x0000, 0x01b0, 0x601c, 0xd084,
-+ 0x190c, 0x1509, 0x6017, 0x0000, 0x6023, 0x0007, 0x2001, 0x12c0,
-+ 0x2004, 0x0006, 0x9082, 0x0051, 0x000e, 0x0208, 0x8004, 0x601a,
-+ 0x080c, 0xc381, 0x6043, 0x0000, 0x000e, 0x0005, 0x00e6, 0x0126,
-+ 0x2071, 0x1100, 0x2091, 0x8000, 0x754c, 0x9582, 0x0001, 0x0608,
-+ 0x7050, 0x2060, 0x6000, 0x9086, 0x0000, 0x0148, 0x9ce0, 0x0018,
-+ 0x7060, 0x9c02, 0x1208, 0x0cb0, 0x2061, 0x15c0, 0x0c98, 0x6003,
-+ 0x0008, 0x8529, 0x754e, 0x9ca8, 0x0018, 0x7060, 0x9502, 0x1230,
-+ 0x7552, 0x9085, 0x0001, 0x012e, 0x00ee, 0x0005, 0x7053, 0x15c0,
-+ 0x0cc0, 0x9006, 0x0cc0, 0x6020, 0x9084, 0x000f, 0x0002, 0x8f66,
-+ 0x8f75, 0x8f90, 0x8fab, 0xaf90, 0xafab, 0xafc6, 0x8f66, 0x8f75,
-+ 0x8f66, 0x8fc7, 0x8f66, 0x8f66, 0x8f66, 0x8f66, 0x9186, 0x0013,
-+ 0x1128, 0x080c, 0x79ab, 0x080c, 0x7aa4, 0x0005, 0x9186, 0x0047,
-+ 0x1118, 0x9016, 0x080c, 0x137c, 0x0005, 0x0066, 0x6000, 0x90b2,
-+ 0x0016, 0x1a0c, 0x0d7e, 0x0013, 0x006e, 0x0005, 0x8f8e, 0x9655,
-+ 0x9815, 0x8f8e, 0x98a2, 0x9248, 0x8f8e, 0x8f8e, 0x95e1, 0x9d9e,
-+ 0x8f8e, 0x8f8e, 0x8f8e, 0x8f8e, 0x8f8e, 0x8f8e, 0x080c, 0x0d7e,
-+ 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0d7e, 0x0013, 0x006e,
-+ 0x0005, 0x8fa9, 0xa3c8, 0x8fa9, 0x8fa9, 0x8fa9, 0x8fa9, 0x8fa9,
-+ 0x8fa9, 0xa36e, 0xa544, 0x8fa9, 0xa3fb, 0xa478, 0xa3fb, 0xa478,
-+ 0x8fa9, 0x080c, 0x0d7e, 0x6000, 0x9082, 0x0016, 0x1a0c, 0x0d7e,
-+ 0x6000, 0x0002, 0x8fc5, 0x9ddf, 0x9eaf, 0x9fd9, 0xa13a, 0x8fc5,
-+ 0x8fc5, 0x8fc5, 0x9db9, 0xa31e, 0xa321, 0x8fc5, 0x8fc5, 0x8fc5,
-+ 0x8fc5, 0xa34b, 0x8fc5, 0x8fc5, 0x8fc5, 0x080c, 0x0d7e, 0x0066,
-+ 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0d7e, 0x0013, 0x006e, 0x0005,
-+ 0x8fe0, 0x8fe0, 0x901f, 0x90ad, 0x910e, 0x8fe0, 0x8fe0, 0x8fe0,
-+ 0x8fe2, 0x8fe0, 0x8fe0, 0x8fe0, 0x8fe0, 0x8fe0, 0x8fe0, 0x8fe0,
-+ 0x080c, 0x0d7e, 0x9186, 0x004c, 0x0588, 0x9186, 0x0003, 0x190c,
-+ 0x0d7e, 0x00d6, 0x601c, 0xc0ed, 0x601e, 0x6003, 0x0003, 0x6106,
-+ 0x6014, 0x2068, 0x687c, 0x9084, 0x8000, 0xc0b5, 0x687e, 0x68ac,
-+ 0x6846, 0x68b0, 0x684a, 0x9006, 0x6836, 0x683a, 0x6884, 0x9092,
-+ 0x199a, 0x0210, 0x2001, 0x1999, 0x8003, 0x8013, 0x8213, 0x9210,
-+ 0x621a, 0x00de, 0x2c10, 0x080c, 0x1605, 0x080c, 0x75db, 0x0126,
-+ 0x2091, 0x8000, 0x080c, 0x7b72, 0x012e, 0x0005, 0x6010, 0x9080,
-+ 0x0028, 0x2024, 0x8427, 0x2c00, 0x080c, 0x912f, 0x0005, 0x00d6,
-+ 0x00f6, 0x2079, 0x1100, 0x7a88, 0x9290, 0x0018, 0x6014, 0x2068,
-+ 0x6c78, 0x0046, 0x68e0, 0x9005, 0x1140, 0x68dc, 0x921a, 0x0140,
-+ 0x0220, 0x687b, 0x0007, 0x2010, 0x0028, 0x687b, 0x0015, 0x0010,
-+ 0x687b, 0x0000, 0x8214, 0x6883, 0x0000, 0x6a02, 0x0006, 0x0016,
-+ 0x0026, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2400, 0x9005, 0x1108,
-+ 0x009a, 0x2100, 0x9086, 0x0015, 0x1118, 0x2001, 0x0001, 0x0038,
-+ 0x2100, 0x9086, 0x0016, 0x0118, 0x2001, 0x0001, 0x002a, 0x94a4,
-+ 0x0007, 0x8423, 0x9405, 0x0002, 0x907e, 0x907e, 0x9079, 0x907c,
-+ 0x907e, 0x9076, 0x906c, 0x906c, 0x906c, 0x906c, 0x906c, 0x906c,
-+ 0x906c, 0x906c, 0x906c, 0x906c, 0x00fe, 0x00ee, 0x00de, 0x00ce,
-+ 0x002e, 0x001e, 0x000e, 0x000e, 0x080c, 0x0d7e, 0x080c, 0x9a2c,
-+ 0x0028, 0x080c, 0x9b03, 0x0010, 0x080c, 0x9bfa, 0x00fe, 0x00ee,
-+ 0x00de, 0x00ce, 0x002e, 0x001e, 0x2c00, 0x6896, 0x000e, 0x080c,
-+ 0x91df, 0x01e8, 0x6804, 0x680e, 0x200c, 0x9080, 0x0002, 0x6acc,
-+ 0x6bd0, 0x6cd4, 0x6dd8, 0x2039, 0x0001, 0x2031, 0x0000, 0x2041,
-+ 0x1091, 0x080c, 0x9367, 0x0158, 0x000e, 0x9005, 0x0118, 0x00fe,
-+ 0x00de, 0x0005, 0x00fe, 0x00de, 0x080c, 0x8ed9, 0x0005, 0x2001,
-+ 0x002c, 0x900e, 0x080c, 0x923d, 0x0c78, 0x9182, 0x0047, 0x0002,
-+ 0x90b9, 0x90b9, 0x90bb, 0x90e8, 0x90b9, 0x90b9, 0x90b9, 0x90b9,
-+ 0x90fa, 0x080c, 0x0d7e, 0x00d6, 0x0016, 0x080c, 0x7a55, 0x080c,
-+ 0x7b72, 0x6003, 0x0004, 0x6114, 0x2168, 0x687c, 0xd0fc, 0x0188,
-+ 0x6878, 0x9005, 0x1158, 0x6894, 0x9005, 0x0140, 0x2001, 0x0000,
-+ 0x900e, 0x080c, 0x923d, 0x080c, 0x8ed9, 0x0078, 0x6003, 0x0002,
-+ 0x0060, 0x687f, 0x0020, 0x688c, 0x688a, 0x68a4, 0x68ae, 0x68a8,
-+ 0x68b2, 0x68c7, 0x0000, 0x68cb, 0x0000, 0x001e, 0x00de, 0x0005,
-+ 0x080c, 0x7a55, 0x00d6, 0x6114, 0x2168, 0x080c, 0xa942, 0x0120,
-+ 0x687b, 0x0006, 0x080c, 0x5b76, 0x00de, 0x080c, 0x8ed9, 0x080c,
-+ 0x7b72, 0x0005, 0x080c, 0x7a55, 0x080c, 0x2862, 0x00d6, 0x6114,
-+ 0x2168, 0x080c, 0xa942, 0x0120, 0x687b, 0x0029, 0x080c, 0x5b76,
-+ 0x00de, 0x080c, 0x8ed9, 0x080c, 0x7b72, 0x0005, 0x9182, 0x0047,
-+ 0x0002, 0x911e, 0x9120, 0x911e, 0x911e, 0x911e, 0x911e, 0x911e,
-+ 0x911e, 0x911e, 0x911e, 0x911e, 0x911e, 0x9120, 0x080c, 0x0d7e,
-+ 0x00d6, 0x080c, 0x1303, 0x6114, 0x2168, 0x687b, 0x0000, 0x6883,
-+ 0x0000, 0x080c, 0x5b76, 0x00de, 0x080c, 0x8ed9, 0x0005, 0x0026,
-+ 0x0036, 0x0056, 0x0066, 0x00d6, 0x00f6, 0x0006, 0x080c, 0x0eb6,
-+ 0x000e, 0x090c, 0x0d7e, 0x20e9, 0x0001, 0x9d88, 0x0019, 0x21a0,
-+ 0x900e, 0x20a9, 0x0020, 0x4104, 0x687a, 0x2079, 0x1100, 0x7988,
-+ 0x9188, 0x0018, 0x918c, 0x0fff, 0x6972, 0x6c76, 0x2d78, 0x00f6,
-+ 0x2001, 0x0205, 0x2003, 0x0000, 0x901e, 0x2029, 0x0001, 0x9182,
-+ 0x0034, 0x1228, 0x9f90, 0x001f, 0x080c, 0xa5c9, 0x04c0, 0x2130,
-+ 0x2009, 0x0034, 0x9f90, 0x001f, 0x080c, 0xa5c9, 0x96b2, 0x0034,
-+ 0x7804, 0x906d, 0x0110, 0x080c, 0x0edf, 0x080c, 0x0eb6, 0x01d0,
-+ 0x8528, 0x6867, 0x0110, 0x686b, 0x0000, 0x2d20, 0x7c06, 0x968a,
-+ 0x003d, 0x1230, 0x2608, 0x9d90, 0x001b, 0x080c, 0xa5c9, 0x00b8,
-+ 0x96b2, 0x003c, 0x2009, 0x003c, 0x2d78, 0x9d90, 0x001b, 0x080c,
-+ 0xa5c9, 0x0c18, 0x2079, 0x0200, 0x7817, 0x0000, 0x00fe, 0x852f,
-+ 0x95ad, 0x0050, 0x7d66, 0x7870, 0xc0fd, 0x7872, 0x0048, 0x2079,
-+ 0x0200, 0x7817, 0x0000, 0x00fe, 0x852f, 0x95ad, 0x0050, 0x7d66,
-+ 0x2f68, 0x6804, 0x6807, 0x0000, 0x0006, 0x080c, 0x5b76, 0x000e,
-+ 0x2068, 0x9005, 0x1db0, 0x00fe, 0x00de, 0x006e, 0x005e, 0x003e,
-+ 0x002e, 0x0005, 0x00d6, 0x00f6, 0x0006, 0x080c, 0x0eb6, 0x000e,
-+ 0x090c, 0x0d7e, 0x20e9, 0x0001, 0x9d88, 0x0019, 0x21a0, 0x900e,
-+ 0x20a9, 0x0020, 0x4104, 0x6a66, 0x687a, 0x2079, 0x1100, 0x7988,
-+ 0x810c, 0x9188, 0x000c, 0x9182, 0x001a, 0x0210, 0x2009, 0x001a,
-+ 0x21a8, 0x810b, 0x6972, 0x6c76, 0x2e98, 0x9d80, 0x001f, 0x20a0,
-+ 0x080c, 0x504f, 0x080c, 0x5b76, 0x00fe, 0x00de, 0x0005, 0x0016,
-+ 0x00d6, 0x00f6, 0x2079, 0x0200, 0x2e98, 0x2021, 0x003e, 0x901e,
-+ 0x9282, 0x0020, 0x0218, 0x2011, 0x0020, 0x2018, 0x9486, 0x003e,
-+ 0x1168, 0x00d6, 0x080c, 0x0e9d, 0x2d00, 0x00de, 0x05f0, 0x6806,
-+ 0x2068, 0x20e9, 0x0001, 0x9080, 0x0002, 0x20a0, 0x3300, 0x908e,
-+ 0x0260, 0x0140, 0x2009, 0x0280, 0x9102, 0x920a, 0x0218, 0x2010,
-+ 0x2100, 0x9318, 0x2200, 0x9402, 0x1220, 0x2410, 0x9006, 0x9398,
-+ 0x0002, 0x2020, 0x22a8, 0x6800, 0x9200, 0x6802, 0x0016, 0x0026,
-+ 0x3410, 0x3308, 0x2104, 0x8007, 0x2012, 0x8108, 0x8210, 0x1f04,
-+ 0x921a, 0x22a0, 0x2198, 0x002e, 0x001e, 0x83ff, 0x0170, 0x3300,
-+ 0x9086, 0x0280, 0x1120, 0x7814, 0x8000, 0x7816, 0x2e98, 0x2310,
-+ 0x84ff, 0x0904, 0x91e5, 0x0804, 0x91e7, 0x9085, 0x0001, 0x7817,
-+ 0x0000, 0x00fe, 0x00de, 0x001e, 0x0005, 0x00d6, 0x0036, 0x6314,
-+ 0x2368, 0x687a, 0x6982, 0x080c, 0x5b76, 0x003e, 0x00de, 0x0005,
-+ 0x91b6, 0x0015, 0x1118, 0x080c, 0x8ed9, 0x0030, 0x91b6, 0x0016,
-+ 0x190c, 0x0d7e, 0x080c, 0x8ed9, 0x0005, 0x20a9, 0x000e, 0x20e1,
-+ 0x0000, 0x2e98, 0x6014, 0x20e9, 0x0001, 0x20a0, 0x4003, 0x9080,
-+ 0x001b, 0x2020, 0x20a9, 0x0006, 0x3310, 0x9298, 0x0001, 0x94a8,
-+ 0x0001, 0x222e, 0x2326, 0x9290, 0x0002, 0x95a8, 0x0002, 0x9398,
-+ 0x0002, 0x94a0, 0x0002, 0x1f04, 0x9269, 0x00e6, 0x080c, 0xa942,
-+ 0x0130, 0x6014, 0x2070, 0x7007, 0x0000, 0x7067, 0x0103, 0x00ee,
-+ 0x080c, 0x8ed9, 0x0005, 0x00d6, 0x0036, 0x7330, 0x9386, 0x0200,
-+ 0x1130, 0x6010, 0x2068, 0x6813, 0x00ff, 0x6817, 0xfffd, 0x6014,
-+ 0x9005, 0x0130, 0x2068, 0x6807, 0x0000, 0x6867, 0x0103, 0x6b32,
-+ 0x080c, 0x8ed9, 0x003e, 0x00de, 0x0005, 0x0016, 0x20a9, 0x0014,
-+ 0x9e80, 0x000c, 0x20e1, 0x0000, 0x2098, 0x6014, 0x9080, 0x0002,
-+ 0x20e9, 0x0001, 0x20a0, 0x4003, 0x2001, 0x0205, 0x2003, 0x0001,
-+ 0x2099, 0x0260, 0x20a9, 0x0016, 0x4003, 0x20a9, 0x000a, 0x6014,
-+ 0x9080, 0x0001, 0x2004, 0x9080, 0x0002, 0x20a0, 0x4003, 0x2001,
-+ 0x0205, 0x2003, 0x0002, 0x2099, 0x0260, 0x20a9, 0x0020, 0x4003,
-+ 0x2003, 0x0000, 0x00e6, 0x6014, 0x2004, 0x2070, 0x7067, 0x0103,
-+ 0x00ee, 0x080c, 0x8ed9, 0x001e, 0x0005, 0x0016, 0x900e, 0x7030,
-+ 0x9086, 0x0100, 0x0140, 0x7038, 0x9084, 0x00ff, 0x800c, 0x703c,
-+ 0x9084, 0x00ff, 0x8004, 0x9080, 0x0004, 0x9108, 0x9192, 0x0014,
-+ 0x1218, 0x2011, 0x0000, 0x0010, 0x2009, 0x0014, 0x21a8, 0x9e80,
-+ 0x000c, 0x2098, 0x6014, 0x9080, 0x0002, 0x20a0, 0x080c, 0x504f,
-+ 0x82ff, 0x0170, 0x2009, 0x0205, 0x2104, 0x8000, 0x200a, 0x2e00,
-+ 0x2098, 0x3400, 0x9080, 0x0014, 0x20a0, 0x22a8, 0x080c, 0x504f,
-+ 0x00e6, 0x080c, 0xa942, 0x0140, 0x6014, 0x2070, 0x7007, 0x0000,
-+ 0x7064, 0x70e2, 0x7067, 0x0103, 0x00ee, 0x080c, 0x8ed9, 0x001e,
-+ 0x0005, 0x0016, 0x00d6, 0x7030, 0x9086, 0x0100, 0x1118, 0x2009,
-+ 0x0004, 0x0010, 0x7034, 0x800c, 0x21a8, 0x9e80, 0x000c, 0x2098,
-+ 0x6014, 0x2068, 0x6804, 0x9005, 0x1108, 0x2d00, 0x9080, 0x000c,
-+ 0x20a0, 0x080c, 0x504f, 0x080c, 0xa942, 0x0148, 0x6804, 0x9005,
-+ 0x1158, 0x6807, 0x0000, 0x6864, 0x68e2, 0x6867, 0x0103, 0x080c,
-+ 0x8ed9, 0x00de, 0x001e, 0x0005, 0x00e6, 0x2070, 0x7030, 0x8007,
-+ 0x9086, 0x0100, 0x1118, 0x080c, 0x97dc, 0x00b8, 0x7034, 0x8007,
-+ 0x800c, 0x9e80, 0x000c, 0x687b, 0x0000, 0x6883, 0x0000, 0x6897,
-+ 0x4000, 0x6aa0, 0x6b9c, 0x6ca8, 0x6da4, 0x2031, 0x0000, 0x2039,
-+ 0x0001, 0x2041, 0x1078, 0x0019, 0x0d30, 0x00ee, 0x08c0, 0x00d6,
-+ 0x0006, 0x080c, 0x0e9d, 0x000e, 0x0190, 0x6812, 0x000e, 0x683e,
-+ 0x0006, 0x6e06, 0x2800, 0x683a, 0x6916, 0x6f0e, 0x6a2a, 0x6b2e,
-+ 0x6c32, 0x6d36, 0x2d10, 0x080c, 0x0f22, 0x9085, 0x0001, 0x00de,
-+ 0x0005, 0x00e6, 0x00d6, 0x0026, 0x7008, 0x9084, 0x00ff, 0x6210,
-+ 0x9290, 0x0004, 0x2214, 0x9206, 0x1518, 0x700c, 0x6210, 0x9290,
-+ 0x0005, 0x2214, 0x9206, 0x11e0, 0x6043, 0x0000, 0x2c68, 0x0016,
-+ 0x2009, 0x0035, 0x080c, 0xaf4e, 0x001e, 0x1158, 0x622c, 0x2268,
-+ 0x2071, 0x026c, 0x6b20, 0x9386, 0x0003, 0x0130, 0x9386, 0x0006,
-+ 0x0128, 0x080c, 0x8ed9, 0x0020, 0x0039, 0x0010, 0x080c, 0x946d,
-+ 0x002e, 0x00de, 0x00ee, 0x0005, 0x00f6, 0x6814, 0x2078, 0x9186,
-+ 0x0015, 0x0904, 0x9454, 0x918e, 0x0016, 0x1904, 0x946b, 0x700c,
-+ 0x908c, 0xff00, 0x9186, 0x1700, 0x0120, 0x9186, 0x0300, 0x1904,
-+ 0x9433, 0x8fff, 0x1138, 0x6800, 0x9086, 0x000f, 0x0904, 0x9417,
-+ 0x0804, 0x9469, 0x6808, 0x9086, 0xffff, 0x1904, 0x9456, 0x787c,
-+ 0x9084, 0x0060, 0x9086, 0x0020, 0x1128, 0x783c, 0x7940, 0x9105,
-+ 0x1904, 0x9456, 0x080c, 0xab11, 0x685c, 0x7882, 0x787c, 0xc0dc,
-+ 0xc0f4, 0xc0d4, 0x787e, 0x0026, 0x900e, 0x6a18, 0x2001, 0x000a,
-+ 0x080c, 0x73f0, 0x7884, 0x920a, 0x0208, 0x8011, 0x7a86, 0x82ff,
-+ 0x002e, 0x1138, 0x00c6, 0x2d60, 0x080c, 0xa6d9, 0x00ce, 0x0804,
-+ 0x9469, 0x00c6, 0x00d6, 0x2f68, 0x6868, 0xd0fc, 0x1118, 0x080c,
-+ 0x5151, 0x0010, 0x080c, 0x54d0, 0x00de, 0x00ce, 0x1904, 0x9456,
-+ 0x00c6, 0x2d60, 0x080c, 0x8ed9, 0x00ce, 0x0804, 0x9469, 0x00c6,
-+ 0x080c, 0x8f26, 0x0190, 0x6017, 0x0000, 0x6810, 0x6012, 0x080c,
-+ 0xad70, 0x6023, 0x0003, 0x6904, 0x00c6, 0x2d60, 0x080c, 0x8ed9,
-+ 0x00ce, 0x080c, 0x8f53, 0x00ce, 0x04e0, 0x2001, 0x12c2, 0x2004,
-+ 0x6842, 0x00ce, 0x04b0, 0x7008, 0x9086, 0x000b, 0x11a0, 0x6010,
-+ 0x200c, 0xc1bc, 0x2102, 0x00c6, 0x2d60, 0x7883, 0x0003, 0x6007,
-+ 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x080c, 0x756e, 0x080c,
-+ 0x7aa4, 0x00ce, 0x00f0, 0x700c, 0x9086, 0x2a00, 0x1138, 0x2001,
-+ 0x12c2, 0x2004, 0x6842, 0x00a8, 0x0481, 0x00a8, 0x8fff, 0x090c,
-+ 0x0d7e, 0x00c6, 0x00d6, 0x2d60, 0x2f68, 0x6867, 0x0103, 0x687b,
-+ 0x0003, 0x080c, 0xa5b9, 0x080c, 0xab11, 0x080c, 0x8f09, 0x00de,
-+ 0x00ce, 0x080c, 0x8ed9, 0x00fe, 0x0005, 0x9186, 0x0015, 0x1128,
-+ 0x2001, 0x12c2, 0x2004, 0x6842, 0x0068, 0x918e, 0x0016, 0x1160,
-+ 0x00c6, 0x2d00, 0x2060, 0x080c, 0xc381, 0x080c, 0x7384, 0x080c,
-+ 0x8ed9, 0x00ce, 0x080c, 0x8ed9, 0x0005, 0x0026, 0x0036, 0x0046,
-+ 0x7228, 0x7cb0, 0x7bac, 0xd2f4, 0x0130, 0x2001, 0x12c2, 0x2004,
-+ 0x6842, 0x0804, 0x94e9, 0x00c6, 0x2d60, 0x080c, 0xa5e6, 0x00ce,
-+ 0x6804, 0x9086, 0x0050, 0x1170, 0x00c6, 0x2d00, 0x2060, 0x6003,
-+ 0x0001, 0x6007, 0x0050, 0x080c, 0x756e, 0x080c, 0x7aa4, 0x00ce,
-+ 0x0804, 0x94e9, 0x6800, 0x9086, 0x000f, 0x01c8, 0x8fff, 0x090c,
-+ 0x0d7e, 0x6824, 0xd0dc, 0x1198, 0x6800, 0x9086, 0x0004, 0x1198,
-+ 0x787c, 0xd0ac, 0x0180, 0x7843, 0x0fff, 0x783f, 0x0fff, 0x7880,
-+ 0xc0f4, 0xc0fc, 0x7882, 0x2001, 0x0001, 0x6832, 0x00e8, 0x2001,
-+ 0x0007, 0x6832, 0x00c8, 0x787c, 0xd0b4, 0x1138, 0xd0ac, 0x0db8,
-+ 0x7838, 0x7934, 0x9105, 0x0d98, 0x0c30, 0xd2ec, 0x1d80, 0x7024,
-+ 0x9306, 0x1118, 0x7020, 0x9406, 0x0d50, 0x7020, 0x683e, 0x7024,
-+ 0x683a, 0x2001, 0x0005, 0x6832, 0x080c, 0xac68, 0x080c, 0x7aa4,
-+ 0x0010, 0x080c, 0x8ed9, 0x004e, 0x003e, 0x002e, 0x0005, 0x00e6,
-+ 0x00d6, 0x0026, 0x7008, 0x9084, 0x00ff, 0x6210, 0x9290, 0x0004,
-+ 0x2214, 0x9206, 0x1904, 0x9561, 0x700c, 0x6210, 0x9290, 0x0005,
-+ 0x2214, 0x9206, 0x1904, 0x9561, 0x6038, 0x2068, 0x6a20, 0x9286,
-+ 0x0007, 0x0904, 0x955f, 0x9286, 0x0002, 0x0904, 0x955f, 0x9286,
-+ 0x0000, 0x0904, 0x955f, 0x6808, 0x633c, 0x9306, 0x1904, 0x955f,
-+ 0x2071, 0x026c, 0x9186, 0x0015, 0x05e0, 0x918e, 0x0016, 0x1190,
-+ 0x6034, 0x9084, 0x00ff, 0x9086, 0x0001, 0x1160, 0x700c, 0x9086,
-+ 0x2a00, 0x1140, 0x6038, 0x9080, 0x0009, 0x200c, 0xc1dd, 0xc1f5,
-+ 0x2102, 0x0438, 0x00c6, 0x6038, 0x2060, 0x6104, 0x9186, 0x004b,
-+ 0x01a0, 0x9186, 0x004c, 0x0188, 0x9186, 0x004d, 0x0170, 0x9186,
-+ 0x004e, 0x0158, 0x9186, 0x0052, 0x0140, 0x6014, 0x2068, 0x080c,
-+ 0xa942, 0x090c, 0x0d7e, 0x6883, 0x0003, 0x6007, 0x0085, 0x6003,
-+ 0x000b, 0x6023, 0x0002, 0x080c, 0x756e, 0x080c, 0x7aa4, 0x00ce,
-+ 0x0030, 0x6038, 0x2070, 0x2001, 0x12c2, 0x2004, 0x7042, 0x080c,
-+ 0x8ed9, 0x002e, 0x00de, 0x00ee, 0x0005, 0x00d6, 0x00f6, 0x6014,
-+ 0x2068, 0x6010, 0x2078, 0x91b6, 0x0015, 0x0130, 0x7a08, 0x7b0c,
-+ 0x7c00, 0xc48c, 0x7c02, 0x0448, 0x0156, 0x0036, 0x0026, 0x9e90,
-+ 0x000c, 0x9290, 0x0004, 0x20a9, 0x0004, 0x9f98, 0x000a, 0x080c,
-+ 0x9d60, 0x002e, 0x003e, 0x015e, 0x15f0, 0x0156, 0x0036, 0x0026,
-+ 0x9e90, 0x000c, 0x9290, 0x0008, 0x20a9, 0x0004, 0x9f98, 0x0006,
-+ 0x080c, 0x9d60, 0x002e, 0x003e, 0x015e, 0x1568, 0x7238, 0x7a0a,
-+ 0x733c, 0x7b0e, 0x7c00, 0xc48d, 0x7c02, 0x6804, 0x9005, 0x1120,
-+ 0x00fe, 0x00de, 0x0804, 0x9275, 0x9080, 0x0002, 0x00d6, 0x2068,
-+ 0x6a0a, 0x6b0e, 0x6c02, 0x00de, 0x2009, 0x002b, 0x6aa0, 0x6b9c,
-+ 0x6ca8, 0x6da4, 0x2031, 0x0000, 0x2039, 0x0001, 0x2041, 0x1078,
-+ 0x080c, 0x9367, 0x0128, 0x00fe, 0x00de, 0x080c, 0x8ed9, 0x0005,
-+ 0x080c, 0x97dc, 0x0cc0, 0x00f6, 0x080c, 0x2862, 0x00fe, 0x00c6,
-+ 0x080c, 0x8e83, 0x2f00, 0x6012, 0x6017, 0x0000, 0x6023, 0x0001,
-+ 0x6007, 0x0001, 0x6003, 0x0001, 0x2001, 0x0007, 0x080c, 0x5568,
-+ 0x080c, 0x5592, 0x080c, 0x75be, 0x080c, 0x7aa4, 0x00ce, 0x0804,
-+ 0x959d, 0x2100, 0x91b2, 0x0053, 0x1a0c, 0x0d7e, 0x91b2, 0x0040,
-+ 0x1a04, 0x963f, 0x0002, 0x962d, 0x962d, 0x962d, 0x962d, 0x962d,
-+ 0x962d, 0x962b, 0x962b, 0x962b, 0x962b, 0x962b, 0x962b, 0x962b,
-+ 0x962b, 0x962b, 0x962b, 0x962b, 0x962b, 0x962b, 0x962b, 0x962b,
-+ 0x962b, 0x962b, 0x962b, 0x962b, 0x962b, 0x962b, 0x962b, 0x962b,
-+ 0x962b, 0x962b, 0x962d, 0x962b, 0x962d, 0x962d, 0x962b, 0x962b,
-+ 0x962b, 0x962b, 0x962b, 0x962d, 0x962b, 0x962b, 0x962b, 0x962b,
-+ 0x962b, 0x962b, 0x962b, 0x962b, 0x962b, 0x962d, 0x962d, 0x962b,
-+ 0x962b, 0x962b, 0x962b, 0x962b, 0x962b, 0x962b, 0x962b, 0x962b,
-+ 0x962d, 0x962b, 0x962b, 0x080c, 0x0d7e, 0x6003, 0x0001, 0x6106,
-+ 0x9186, 0x0032, 0x0118, 0x080c, 0x75be, 0x0010, 0x080c, 0x756e,
-+ 0x0126, 0x2091, 0x8000, 0x080c, 0x7aa4, 0x012e, 0x0005, 0x2600,
-+ 0x0002, 0x9653, 0x9653, 0x9653, 0x962d, 0x962d, 0x9653, 0x9653,
-+ 0x9653, 0x9653, 0x962d, 0x9653, 0x962d, 0x9653, 0x962d, 0x9653,
-+ 0x9653, 0x9653, 0x9653, 0x080c, 0x0d7e, 0x6004, 0x90b2, 0x0053,
-+ 0x1a0c, 0x0d7e, 0x91b6, 0x0013, 0x0904, 0x9702, 0x91b6, 0x0027,
-+ 0x1904, 0x96c8, 0x080c, 0x79ab, 0x6004, 0x080c, 0xab1d, 0x0190,
-+ 0x080c, 0xab2e, 0x0904, 0x96c2, 0x908e, 0x0021, 0x0904, 0x96c5,
-+ 0x908e, 0x0022, 0x0904, 0x96c2, 0x908e, 0x003d, 0x0904, 0x96c5,
-+ 0x0804, 0x96bb, 0x080c, 0x2886, 0x2001, 0x0007, 0x080c, 0x5568,
-+ 0x6010, 0x9080, 0x0028, 0x200c, 0x080c, 0x97dc, 0x9186, 0x007e,
-+ 0x1148, 0x2001, 0x1136, 0x2014, 0xc285, 0x080c, 0x62e4, 0x1108,
-+ 0xc2ad, 0x2202, 0x0016, 0x0026, 0x0036, 0x2110, 0x0026, 0x2019,
-+ 0x0028, 0x080c, 0x8ac9, 0x002e, 0x080c, 0xc3d4, 0x003e, 0x002e,
-+ 0x001e, 0x0016, 0x0026, 0x0036, 0x2110, 0x2019, 0x0028, 0x080c,
-+ 0x76f0, 0x0076, 0x903e, 0x080c, 0x75ee, 0x6010, 0x00c6, 0x9065,
-+ 0x0100, 0x00ce, 0x2c08, 0x080c, 0xbec2, 0x007e, 0x003e, 0x002e,
-+ 0x001e, 0x080c, 0x55d0, 0x080c, 0xad68, 0x080c, 0x8ed9, 0x080c,
-+ 0x7aa4, 0x0005, 0x080c, 0x97dc, 0x0cb0, 0x080c, 0x9809, 0x0c98,
-+ 0x9186, 0x0014, 0x1db0, 0x080c, 0x79ab, 0x080c, 0x2862, 0x080c,
-+ 0xab1d, 0x1188, 0x080c, 0x2886, 0x6010, 0x9080, 0x0028, 0x200c,
-+ 0x080c, 0x97dc, 0x9186, 0x007e, 0x1128, 0x2001, 0x1136, 0x200c,
-+ 0xc185, 0x2102, 0x08c0, 0x080c, 0xab2e, 0x1118, 0x080c, 0x97dc,
-+ 0x0890, 0x6004, 0x908e, 0x0032, 0x1158, 0x00e6, 0x00f6, 0x2071,
-+ 0x1193, 0x2079, 0x0000, 0x080c, 0x2b98, 0x00fe, 0x00ee, 0x0818,
-+ 0x6004, 0x908e, 0x0021, 0x0d50, 0x908e, 0x0022, 0x090c, 0x97dc,
-+ 0x0804, 0x96bb, 0x90b2, 0x0040, 0x1a04, 0x97c5, 0x2008, 0x0002,
-+ 0x974a, 0x974b, 0x974e, 0x9751, 0x9754, 0x9757, 0x9748, 0x9748,
-+ 0x9748, 0x9748, 0x9748, 0x9748, 0x9748, 0x9748, 0x9748, 0x9748,
-+ 0x9748, 0x9748, 0x9748, 0x9748, 0x9748, 0x9748, 0x9748, 0x9748,
-+ 0x9748, 0x9748, 0x9748, 0x9748, 0x9748, 0x9748, 0x975a, 0x9769,
-+ 0x9748, 0x976b, 0x9769, 0x9748, 0x9748, 0x9748, 0x9748, 0x9748,
-+ 0x9769, 0x9769, 0x9748, 0x9748, 0x9748, 0x9748, 0x9748, 0x9748,
-+ 0x9748, 0x9748, 0x97a5, 0x9769, 0x9748, 0x9765, 0x9748, 0x9748,
-+ 0x9748, 0x9766, 0x9748, 0x9748, 0x9748, 0x9769, 0x979c, 0x9748,
-+ 0x080c, 0x0d7e, 0x00f0, 0x2001, 0x000b, 0x0460, 0x2001, 0x0003,
-+ 0x0448, 0x2001, 0x0005, 0x0430, 0x2001, 0x0001, 0x0418, 0x2001,
-+ 0x0009, 0x0400, 0x080c, 0x79ab, 0x6003, 0x0005, 0x2001, 0x12c2,
-+ 0x2004, 0x6042, 0x080c, 0x7aa4, 0x00a0, 0x0018, 0x0010, 0x080c,
-+ 0x5568, 0x0804, 0x97b6, 0x080c, 0x79ab, 0x2001, 0x12c0, 0x2004,
-+ 0x601a, 0x2001, 0x12c2, 0x2004, 0x6042, 0x6003, 0x0004, 0x080c,
-+ 0x7aa4, 0x0005, 0x080c, 0x5568, 0x080c, 0x79ab, 0x6003, 0x0002,
-+ 0x2001, 0x12c2, 0x2004, 0x6042, 0x0036, 0x2019, 0x115d, 0x2304,
-+ 0x9084, 0xff00, 0x1120, 0x2001, 0x12c0, 0x201c, 0x0040, 0x8007,
-+ 0x909a, 0x0004, 0x0ec0, 0x8003, 0x801b, 0x831b, 0x9318, 0x631a,
-+ 0x003e, 0x080c, 0x7aa4, 0x08e8, 0x080c, 0x79ab, 0x080c, 0xad68,
-+ 0x080c, 0x8ed9, 0x080c, 0x7aa4, 0x08a0, 0x00e6, 0x00f6, 0x2071,
-+ 0x1193, 0x2079, 0x0000, 0x080c, 0x2b98, 0x00fe, 0x00ee, 0x080c,
-+ 0x79ab, 0x080c, 0x8ed9, 0x080c, 0x7aa4, 0x0818, 0x080c, 0x79ab,
-+ 0x2001, 0x12c2, 0x2004, 0x6042, 0x6003, 0x0002, 0x2001, 0x12c0,
-+ 0x2004, 0x601a, 0x080c, 0x7aa4, 0x0005, 0x2600, 0x2008, 0x0002,
-+ 0x97da, 0x97da, 0x97da, 0x97b6, 0x97b6, 0x97da, 0x97da, 0x97da,
-+ 0x97da, 0x97b6, 0x97da, 0x97b6, 0x97da, 0x97b6, 0x97da, 0x97da,
-+ 0x97da, 0x97da, 0x080c, 0x0d7e, 0x00e6, 0x0026, 0x0016, 0x080c,
-+ 0xa942, 0x0500, 0x6014, 0x2070, 0x7064, 0x9086, 0x0139, 0x1140,
-+ 0x2001, 0x0030, 0x900e, 0x2011, 0x4005, 0x080c, 0xaec0, 0x0090,
-+ 0x7068, 0xd0fc, 0x0178, 0x7007, 0x0000, 0x0016, 0x6004, 0x908e,
-+ 0x0021, 0x0160, 0x908e, 0x003d, 0x0148, 0x001e, 0x7067, 0x0103,
-+ 0x7033, 0x0100, 0x001e, 0x002e, 0x00ee, 0x0005, 0x001e, 0x0009,
-+ 0x0cc8, 0x00e6, 0x9cf0, 0x0005, 0x2e74, 0x7000, 0x2070, 0x7067,
-+ 0x0103, 0x7023, 0x8001, 0x00ee, 0x0005, 0x00d6, 0x6610, 0x2668,
-+ 0x6804, 0x9084, 0x00ff, 0x00de, 0x90b2, 0x000c, 0x1a0c, 0x0d7e,
-+ 0x6604, 0x96b6, 0x004d, 0x1120, 0x080c, 0xadf6, 0x0804, 0x9892,
-+ 0x6604, 0x96b6, 0x0043, 0x1120, 0x080c, 0xae39, 0x0804, 0x9892,
-+ 0x6604, 0x96b6, 0x004b, 0x1120, 0x080c, 0xae66, 0x0804, 0x9892,
-+ 0x6604, 0x96b6, 0x0033, 0x1120, 0x080c, 0xad8b, 0x0804, 0x9892,
-+ 0x6604, 0x96b6, 0x0028, 0x1120, 0x080c, 0xab5e, 0x0804, 0x9892,
-+ 0x6604, 0x96b6, 0x0029, 0x1120, 0x080c, 0xab9a, 0x0804, 0x9892,
-+ 0x6604, 0x96b6, 0x001f, 0x1118, 0x080c, 0x9255, 0x04d8, 0x6604,
-+ 0x96b6, 0x0000, 0x1118, 0x080c, 0x9565, 0x04a0, 0x6604, 0x96b6,
-+ 0x0022, 0x1118, 0x080c, 0x9283, 0x0468, 0x6604, 0x96b6, 0x0035,
-+ 0x1118, 0x080c, 0x9381, 0x0430, 0x6604, 0x96b6, 0x0039, 0x1118,
-+ 0x080c, 0x94ef, 0x00f8, 0x6604, 0x96b6, 0x003d, 0x1118, 0x080c,
-+ 0x929d, 0x00c0, 0x6604, 0x96b6, 0x0044, 0x1118, 0x080c, 0x92d5,
-+ 0x0088, 0x6604, 0x96b6, 0x0049, 0x1118, 0x080c, 0x9319, 0x0050,
-+ 0x91b6, 0x0015, 0x1110, 0x0053, 0x0028, 0x91b6, 0x0016, 0x1118,
-+ 0x0804, 0x9ab5, 0x0005, 0x080c, 0x8f6e, 0x0ce0, 0x98b0, 0x98b3,
-+ 0x98b0, 0x98f6, 0x98b0, 0x9a2c, 0x9ac3, 0x98b0, 0x98b0, 0x9a8f,
-+ 0x98b0, 0x9aa5, 0x00e6, 0x080c, 0x1303, 0x9cf0, 0x0005, 0x2e74,
-+ 0x7000, 0x2070, 0x7067, 0x0103, 0x00ee, 0x080c, 0x8ed9, 0x0005,
-+ 0xa001, 0xa001, 0x0005, 0x00e6, 0x2071, 0x1100, 0x7088, 0x9086,
-+ 0x0074, 0x1540, 0x080c, 0xbe99, 0x11b0, 0x6010, 0x00d6, 0x2068,
-+ 0x7030, 0xd08c, 0x0128, 0x6800, 0xd0bc, 0x0110, 0xc0c5, 0x6802,
-+ 0x00e9, 0x00de, 0x2001, 0x0006, 0x080c, 0x5568, 0x080c, 0x2886,
-+ 0x080c, 0x8ed9, 0x0088, 0x2001, 0x000a, 0x080c, 0x5568, 0x080c,
-+ 0x2886, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c, 0x75be, 0x080c,
-+ 0x7aa4, 0x0010, 0x080c, 0x9a13, 0x00ee, 0x0005, 0x6800, 0xd084,
-+ 0x0160, 0x9006, 0x080c, 0x5556, 0x2069, 0x1152, 0x6804, 0xd0a4,
-+ 0x0120, 0x2001, 0x0006, 0x080c, 0x5592, 0x0005, 0x00d6, 0x2011,
-+ 0x1122, 0x2204, 0x9086, 0x0074, 0x1904, 0x9a10, 0x6010, 0x2068,
-+ 0x6aa0, 0x9286, 0x007e, 0x1120, 0x080c, 0x9c04, 0x0804, 0x9971,
-+ 0x080c, 0x9bfa, 0x6010, 0x2068, 0x6aa0, 0x9286, 0x0080, 0x1530,
-+ 0x6813, 0x00ff, 0x6817, 0xfffc, 0x6014, 0x9005, 0x01a8, 0x2068,
-+ 0x6864, 0x9084, 0x00ff, 0x9086, 0x0039, 0x1140, 0x2001, 0x0000,
-+ 0x900e, 0x2011, 0x4000, 0x080c, 0xaec0, 0x0030, 0x6807, 0x0000,
-+ 0x6867, 0x0103, 0x6833, 0x0200, 0x2001, 0x0006, 0x080c, 0x5568,
-+ 0x080c, 0x2886, 0x080c, 0x8ed9, 0x0804, 0x9a11, 0x00e6, 0x2071,
-+ 0x1136, 0x2e04, 0xd09c, 0x0188, 0x2071, 0x0260, 0x7108, 0x720c,
-+ 0x918c, 0x00ff, 0x1118, 0x9284, 0xff00, 0x0138, 0x6010, 0x2070,
-+ 0x70a0, 0xd0bc, 0x1110, 0x7112, 0x7216, 0x00ee, 0x6014, 0x9005,
-+ 0x0190, 0x2068, 0x6868, 0xd0f4, 0x0170, 0x6864, 0x9084, 0x00ff,
-+ 0x9086, 0x0039, 0x1958, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000,
-+ 0x080c, 0xaec0, 0x0848, 0x2001, 0x0004, 0x080c, 0x5568, 0x6003,
-+ 0x0001, 0x6007, 0x0003, 0x080c, 0x75be, 0x080c, 0x7aa4, 0x0804,
-+ 0x9a11, 0x685c, 0xd0e4, 0x01d8, 0x080c, 0xad0a, 0x080c, 0x62e4,
-+ 0x0118, 0xd0dc, 0x1904, 0x992c, 0x2011, 0x1136, 0x2204, 0xc0ad,
-+ 0x2012, 0x2001, 0x1298, 0x2004, 0x00f6, 0x2079, 0x0100, 0x78e3,
-+ 0x0000, 0x080c, 0x1fb8, 0x78e2, 0x00fe, 0x0804, 0x992c, 0x080c,
-+ 0xad47, 0x2011, 0x1136, 0x2204, 0xc0a5, 0x2012, 0x0006, 0x080c,
-+ 0xbfdb, 0x000e, 0x1904, 0x992c, 0xc0b5, 0x2012, 0x2001, 0x0006,
-+ 0x080c, 0x5568, 0x9006, 0x080c, 0x5556, 0x00c6, 0x2001, 0x110e,
-+ 0x2004, 0xd09c, 0x0520, 0x00f6, 0x2079, 0x0100, 0x00e6, 0x2071,
-+ 0x1100, 0x700c, 0x9084, 0x00ff, 0x78e6, 0x7076, 0x7010, 0x78ea,
-+ 0x707a, 0x908c, 0x00ff, 0x00ee, 0x780c, 0xc0b5, 0x780e, 0x00fe,
-+ 0x080c, 0x1f8d, 0x00f6, 0x2100, 0x900e, 0x080c, 0x1f63, 0x7956,
-+ 0x00fe, 0x9186, 0x0081, 0x01d8, 0x2009, 0x0081, 0x00c8, 0x2009,
-+ 0x00ef, 0x00f6, 0x2079, 0x0100, 0x79ea, 0x7932, 0x7936, 0x780c,
-+ 0xc0b5, 0x780e, 0x00fe, 0x080c, 0x1f8d, 0x00f6, 0x2079, 0x1100,
-+ 0x797a, 0x2100, 0x900e, 0x080c, 0x1f63, 0x7956, 0x00fe, 0x8108,
-+ 0x080c, 0x55b3, 0x2c00, 0x00ce, 0x1904, 0x992c, 0x6012, 0x2009,
-+ 0x110e, 0x210c, 0xd19c, 0x0168, 0x2009, 0x027c, 0x9080, 0x0004,
-+ 0x210c, 0x918c, 0x00ff, 0x2102, 0x2009, 0x027d, 0x210c, 0x8000,
-+ 0x2102, 0x2001, 0x0002, 0x080c, 0x5568, 0x6023, 0x0001, 0x6003,
-+ 0x0001, 0x6007, 0x0002, 0x080c, 0x75be, 0x080c, 0x7aa4, 0x0008,
-+ 0x0011, 0x00de, 0x0005, 0x2030, 0x2001, 0x0007, 0x080c, 0x5568,
-+ 0x2001, 0x1100, 0x2004, 0x9086, 0x0003, 0x1120, 0x2001, 0x0007,
-+ 0x080c, 0x5592, 0x080c, 0x2886, 0x6020, 0x9086, 0x000a, 0x1108,
-+ 0x0005, 0x080c, 0x8ed9, 0x0005, 0x00e6, 0x0026, 0x0016, 0x2071,
-+ 0x1100, 0x7088, 0x9086, 0x0014, 0x1904, 0x9a87, 0x7000, 0x9086,
-+ 0x0003, 0x1178, 0x6014, 0x9005, 0x1160, 0x0036, 0x0046, 0x6010,
-+ 0x9080, 0x0028, 0x201c, 0x2021, 0x0006, 0x080c, 0x4026, 0x004e,
-+ 0x003e, 0x00d6, 0x6010, 0x2068, 0x080c, 0x56a8, 0x080c, 0x98e6,
-+ 0x00de, 0x080c, 0x9cc9, 0x1598, 0x6010, 0x00d6, 0x2068, 0x6890,
-+ 0x00de, 0x9005, 0x0560, 0x2001, 0x0006, 0x080c, 0x5568, 0x00e6,
-+ 0x6014, 0x9075, 0x01d0, 0x7064, 0x9084, 0x00ff, 0x9086, 0x0039,
-+ 0x1140, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000, 0x080c, 0xaec0,
-+ 0x0060, 0x7064, 0x9084, 0x00ff, 0x9086, 0x0029, 0x0130, 0x7007,
-+ 0x0000, 0x7067, 0x0103, 0x7033, 0x0200, 0x00ee, 0x080c, 0x2886,
-+ 0x6020, 0x9086, 0x000a, 0x0138, 0x080c, 0x8ed9, 0x0020, 0x080c,
-+ 0x97dc, 0x080c, 0x9a13, 0x001e, 0x002e, 0x00ee, 0x0005, 0x2011,
-+ 0x1122, 0x2204, 0x9086, 0x0014, 0x1168, 0x2001, 0x0002, 0x080c,
-+ 0x5568, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c, 0x75be, 0x080c,
-+ 0x7aa4, 0x0010, 0x080c, 0x9a13, 0x0005, 0x2011, 0x1122, 0x2204,
-+ 0x9086, 0x0004, 0x1138, 0x2001, 0x0007, 0x080c, 0x5568, 0x080c,
-+ 0x8ed9, 0x0010, 0x080c, 0x9a13, 0x0005, 0x000b, 0x0005, 0x98b0,
-+ 0x9ace, 0x98b0, 0x9b03, 0x98b0, 0x9bb0, 0x9ac3, 0x98b0, 0x98b0,
-+ 0x9bc5, 0x98b0, 0x9bd7, 0x6604, 0x9686, 0x0003, 0x0904, 0x9a2c,
-+ 0x96b6, 0x001e, 0x1110, 0x080c, 0x8ed9, 0x0005, 0x00d6, 0x00c6,
-+ 0x080c, 0x9be9, 0x1180, 0x9006, 0x080c, 0x5556, 0x2001, 0x0002,
-+ 0x080c, 0x5568, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x75be,
-+ 0x080c, 0x7aa4, 0x00e8, 0x2009, 0x026e, 0x2104, 0x9086, 0x0009,
-+ 0x1160, 0x6010, 0x2068, 0x6840, 0x9084, 0x00ff, 0x9005, 0x0170,
-+ 0x8001, 0x6842, 0x601b, 0x000a, 0x0058, 0x2009, 0x026f, 0x2104,
-+ 0x9084, 0xff00, 0x9086, 0x1900, 0x1108, 0x08c0, 0x080c, 0x9a13,
-+ 0x00ce, 0x00de, 0x0005, 0x0026, 0x9016, 0x080c, 0x9bf7, 0x00d6,
-+ 0x2069, 0x12a7, 0x2d04, 0x9005, 0x0168, 0x6010, 0x2068, 0x68a0,
-+ 0x9086, 0x007e, 0x1138, 0x2069, 0x111e, 0x2d04, 0x8000, 0x206a,
-+ 0x00de, 0x0010, 0x00de, 0x0088, 0x9006, 0x080c, 0x5556, 0x2001,
-+ 0x0002, 0x080c, 0x5568, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c,
-+ 0x75be, 0x080c, 0x7aa4, 0x0804, 0x9b7e, 0x080c, 0xa942, 0x01b0,
-+ 0x6014, 0x9080, 0x0019, 0x2004, 0x2010, 0x9086, 0x0139, 0x1128,
-+ 0x2001, 0x0002, 0x080c, 0xaf0f, 0x00c8, 0x6014, 0x9080, 0x001a,
-+ 0x2004, 0xd0fc, 0x0118, 0x2001, 0x0001, 0x0ca0, 0x2001, 0x110d,
-+ 0x2004, 0xd0dc, 0x0158, 0x6010, 0x00d6, 0x2068, 0x6840, 0x00de,
-+ 0x9084, 0x00ff, 0x9005, 0x1110, 0x9006, 0x0c20, 0x080c, 0x97dc,
-+ 0x2009, 0x026e, 0x2134, 0x96b4, 0x00ff, 0x9686, 0x0005, 0x0500,
-+ 0x9686, 0x000b, 0x01c8, 0x2009, 0x026f, 0x2104, 0x9084, 0xff00,
-+ 0x1118, 0x9686, 0x0009, 0x01a0, 0x9086, 0x1900, 0x1168, 0x9686,
-+ 0x0009, 0x0170, 0x2001, 0x0004, 0x080c, 0x5568, 0x2001, 0x0028,
-+ 0x601a, 0x6007, 0x0052, 0x0010, 0x080c, 0x9a13, 0x002e, 0x0005,
-+ 0x00d6, 0x9286, 0x0139, 0x0160, 0x6014, 0x2068, 0x080c, 0xa942,
-+ 0x0148, 0x6864, 0x9086, 0x0139, 0x0118, 0x6868, 0xd0fc, 0x0110,
-+ 0x00de, 0x0c50, 0x6010, 0x2068, 0x6840, 0x9084, 0x00ff, 0x9005,
-+ 0x0140, 0x8001, 0x6842, 0x601b, 0x000a, 0x6007, 0x0016, 0x00de,
-+ 0x08e8, 0x68a0, 0x9086, 0x007e, 0x1138, 0x00e6, 0x2071, 0x1100,
-+ 0x080c, 0x5092, 0x00ee, 0x0010, 0x080c, 0x2862, 0x00de, 0x0860,
-+ 0x080c, 0x9bf7, 0x1168, 0x2001, 0x0004, 0x080c, 0x5568, 0x6003,
-+ 0x0001, 0x6007, 0x0003, 0x080c, 0x75be, 0x080c, 0x7aa4, 0x0020,
-+ 0x080c, 0x97dc, 0x080c, 0x9a13, 0x0005, 0x0489, 0x1168, 0x2001,
-+ 0x0008, 0x080c, 0x5568, 0x6003, 0x0001, 0x6007, 0x0005, 0x080c,
-+ 0x75be, 0x080c, 0x7aa4, 0x0010, 0x080c, 0x9a13, 0x0005, 0x00f9,
-+ 0x1168, 0x2001, 0x000a, 0x080c, 0x5568, 0x6003, 0x0001, 0x6007,
-+ 0x0001, 0x080c, 0x75be, 0x080c, 0x7aa4, 0x0010, 0x080c, 0x9a13,
-+ 0x0005, 0x2009, 0x026e, 0x2104, 0x9086, 0x0003, 0x1138, 0x2009,
-+ 0x026f, 0x2104, 0x9084, 0xff00, 0x9086, 0x2a00, 0x0005, 0x9085,
-+ 0x0001, 0x0005, 0x00c6, 0x0016, 0x9c88, 0x0004, 0x2164, 0x080c,
-+ 0x5617, 0x001e, 0x00ce, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x0036,
-+ 0x0016, 0x6010, 0x2068, 0x2009, 0x1136, 0x2104, 0x9085, 0x0003,
-+ 0x200a, 0x080c, 0x9c9e, 0x0560, 0x2009, 0x1136, 0x2104, 0xc0cd,
-+ 0x200a, 0x080c, 0x58cb, 0x0158, 0x9006, 0x2020, 0x2009, 0x002a,
-+ 0x080c, 0xc12f, 0x2001, 0x110c, 0x200c, 0xc195, 0x2102, 0x2019,
-+ 0x002a, 0x2009, 0x0001, 0x080c, 0x2831, 0x00e6, 0x2071, 0x1100,
-+ 0x080c, 0x2679, 0x00ee, 0x00c6, 0x0156, 0x20a9, 0x0081, 0x2009,
-+ 0x007f, 0x080c, 0x2955, 0x8108, 0x1f04, 0x9c39, 0x015e, 0x00ce,
-+ 0x080c, 0x9bfa, 0x6813, 0x00ff, 0x6817, 0xfffe, 0x2071, 0x0260,
-+ 0x2079, 0x0200, 0x7817, 0x0001, 0x2001, 0x1136, 0x200c, 0xc1c5,
-+ 0x7018, 0xd0fc, 0x0110, 0xd0dc, 0x0118, 0x7038, 0xd0dc, 0x1108,
-+ 0xc1c4, 0x7817, 0x0000, 0x2001, 0x1136, 0x2102, 0x2079, 0x0100,
-+ 0x2e04, 0x9084, 0x00ff, 0x2069, 0x111d, 0x206a, 0x78e6, 0x0006,
-+ 0x8e70, 0x2e04, 0x2069, 0x111e, 0x206a, 0x78ea, 0x7832, 0x7836,
-+ 0x2010, 0x9084, 0xff00, 0x001e, 0x9105, 0x2009, 0x112a, 0x200a,
-+ 0x2200, 0x9084, 0x00ff, 0x2008, 0x080c, 0x1f8d, 0x080c, 0x62e4,
-+ 0x0170, 0x2071, 0x0260, 0x2069, 0x12bc, 0x7048, 0x206a, 0x704c,
-+ 0x6806, 0x7050, 0x680a, 0x7054, 0x680e, 0x080c, 0xad0a, 0x0040,
-+ 0x2001, 0x0006, 0x080c, 0x5568, 0x080c, 0x2886, 0x080c, 0x8ed9,
-+ 0x001e, 0x003e, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x0026, 0x0036,
-+ 0x00e6, 0x0156, 0x2019, 0x112a, 0x231c, 0x83ff, 0x01e8, 0x2071,
-+ 0x0260, 0x7200, 0x9294, 0x00ff, 0x7004, 0x9084, 0xff00, 0x9205,
-+ 0x9306, 0x1190, 0x2011, 0x0276, 0x20a9, 0x0004, 0x9d98, 0x000a,
-+ 0x080c, 0x9d60, 0x1148, 0x2011, 0x027a, 0x20a9, 0x0004, 0x9d98,
-+ 0x0006, 0x080c, 0x9d60, 0x1100, 0x015e, 0x00ee, 0x003e, 0x002e,
-+ 0x0005, 0x00e6, 0x2071, 0x0260, 0x7034, 0x9086, 0x0014, 0x11a8,
-+ 0x7038, 0x9086, 0x0800, 0x1188, 0x703c, 0xd0ec, 0x0160, 0x9084,
-+ 0x0f00, 0x9086, 0x0100, 0x1138, 0x7054, 0xd0a4, 0x1110, 0xd0ac,
-+ 0x0110, 0x9006, 0x0010, 0x9085, 0x0001, 0x00ee, 0x0005, 0x00e6,
-+ 0x00d6, 0x00c6, 0x0076, 0x0056, 0x0046, 0x0026, 0x0006, 0x0126,
-+ 0x2091, 0x8000, 0x2029, 0x130d, 0x252c, 0x2021, 0x1313, 0x2424,
-+ 0x2061, 0x15c0, 0x2071, 0x1100, 0x724c, 0x706c, 0x9202, 0x1a04,
-+ 0x9d4c, 0x080c, 0xc15b, 0x0904, 0x9d45, 0x6720, 0x9786, 0x0001,
-+ 0x05e0, 0x9786, 0x0007, 0x05c8, 0x2500, 0x9c06, 0x05b0, 0x2400,
-+ 0x9c06, 0x0598, 0x3e08, 0x9186, 0x0002, 0x1140, 0x6010, 0x9005,
-+ 0x0128, 0x9080, 0x0000, 0x2004, 0xd0bc, 0x1538, 0x00c6, 0x6000,
-+ 0x9086, 0x0004, 0x1110, 0x080c, 0x1509, 0x9786, 0x0008, 0x1148,
-+ 0x080c, 0xab2e, 0x1130, 0x00ce, 0x080c, 0x97dc, 0x080c, 0x8f09,
-+ 0x00a0, 0x6014, 0x2068, 0x080c, 0xa942, 0x0160, 0x9786, 0x0003,
-+ 0x11e8, 0x6867, 0x0103, 0x6b7a, 0x6877, 0x0000, 0x080c, 0x5b76,
-+ 0x080c, 0xab11, 0x080c, 0x8f09, 0x00ce, 0x9ce0, 0x0018, 0x7060,
-+ 0x9c02, 0x1210, 0x0804, 0x9cfc, 0x012e, 0x000e, 0x002e, 0x004e,
-+ 0x005e, 0x007e, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x9786, 0x0006,
-+ 0x1118, 0x080c, 0xc0e9, 0x0c30, 0x9786, 0x000a, 0x09e0, 0x08c8,
-+ 0x220c, 0x2304, 0x9106, 0x1130, 0x8210, 0x8318, 0x1f04, 0x9d60,
-+ 0x9006, 0x0005, 0x2304, 0x9102, 0x0218, 0x2001, 0x0001, 0x0008,
-+ 0x9006, 0x918d, 0x0001, 0x0005, 0x0136, 0x01c6, 0x0016, 0x8906,
-+ 0x8006, 0x8007, 0x908c, 0x003f, 0x21e0, 0x9084, 0xffc0, 0x9300,
-+ 0x2098, 0x3518, 0x20a9, 0x0001, 0x220c, 0x4002, 0x910e, 0x1140,
-+ 0x8210, 0x8319, 0x1dc8, 0x9006, 0x001e, 0x01ce, 0x013e, 0x0005,
-+ 0x220c, 0x9102, 0x0218, 0x2001, 0x0001, 0x0010, 0x2001, 0x0000,
-+ 0x918d, 0x0001, 0x001e, 0x01ce, 0x013e, 0x0005, 0x6004, 0x908a,
-+ 0x0053, 0x1a0c, 0x0d7e, 0x080c, 0xab1d, 0x0120, 0x080c, 0xab2e,
-+ 0x0168, 0x0028, 0x080c, 0x2886, 0x080c, 0xab2e, 0x0138, 0x080c,
-+ 0x79ab, 0x080c, 0x8ed9, 0x080c, 0x7aa4, 0x0005, 0x080c, 0x97dc,
-+ 0x0cb0, 0x9182, 0x0040, 0x0002, 0x9dcf, 0x9dcf, 0x9dcf, 0x9dcf,
-+ 0x9dcf, 0x9dcf, 0x9dcf, 0x9dcf, 0x9dcf, 0x9dcf, 0x9dcf, 0x9dd1,
-+ 0x9dd1, 0x9dd1, 0x9dd1, 0x9dcf, 0x9dcf, 0x9dcf, 0x9dd1, 0x080c,
-+ 0x0d7e, 0x600b, 0xffff, 0x6003, 0x0001, 0x6106, 0x080c, 0x756e,
-+ 0x0126, 0x2091, 0x8000, 0x080c, 0x7aa4, 0x012e, 0x0005, 0x9186,
-+ 0x0013, 0x1128, 0x6004, 0x9082, 0x0040, 0x0804, 0x9e6c, 0x9186,
-+ 0x0027, 0x11e8, 0x080c, 0x79ab, 0x080c, 0x2862, 0x00d6, 0x6114,
-+ 0x2168, 0x080c, 0xa942, 0x0168, 0x6867, 0x0103, 0x687b, 0x0029,
-+ 0x6877, 0x0000, 0x697c, 0xc1c5, 0x697e, 0x080c, 0x5b76, 0x080c,
-+ 0xab11, 0x00de, 0x080c, 0x8ed9, 0x080c, 0x7aa4, 0x0005, 0x9186,
-+ 0x0014, 0x1120, 0x6004, 0x9082, 0x0040, 0x0430, 0x9186, 0x0046,
-+ 0x0150, 0x9186, 0x0045, 0x0138, 0x9186, 0x0053, 0x0120, 0x9186,
-+ 0x0048, 0x190c, 0x0d7e, 0x2001, 0x0109, 0x2004, 0xd084, 0x0198,
-+ 0x0126, 0x2091, 0x2800, 0x0006, 0x0016, 0x0026, 0x080c, 0x745c,
-+ 0x002e, 0x001e, 0x000e, 0x012e, 0xa001, 0x6000, 0x9086, 0x0002,
-+ 0x1110, 0x0804, 0x9eaf, 0x0005, 0x0002, 0x9e4a, 0x9e48, 0x9e48,
-+ 0x9e48, 0x9e48, 0x9e48, 0x9e48, 0x9e48, 0x9e48, 0x9e48, 0x9e48,
-+ 0x9e65, 0x9e65, 0x9e65, 0x9e65, 0x9e48, 0x9e65, 0x9e48, 0x9e65,
-+ 0x080c, 0x0d7e, 0x080c, 0x79ab, 0x00d6, 0x6114, 0x2168, 0x080c,
-+ 0xa942, 0x0168, 0x6867, 0x0103, 0x687b, 0x0006, 0x6877, 0x0000,
-+ 0x6880, 0xc0ec, 0x6882, 0x080c, 0x5b76, 0x080c, 0xab11, 0x00de,
-+ 0x080c, 0x8ed9, 0x080c, 0x7aa4, 0x0005, 0x080c, 0x79ab, 0x080c,
-+ 0x8ed9, 0x080c, 0x7aa4, 0x0005, 0x0002, 0x9e82, 0x9e80, 0x9e80,
-+ 0x9e80, 0x9e80, 0x9e80, 0x9e80, 0x9e80, 0x9e80, 0x9e80, 0x9e80,
-+ 0x9e99, 0x9e99, 0x9e99, 0x9e99, 0x9e80, 0x9ea8, 0x9e80, 0x9e99,
-+ 0x080c, 0x0d7e, 0x00d6, 0x080c, 0x79ab, 0x6014, 0x2068, 0x2001,
-+ 0x12c2, 0x2004, 0x6042, 0x697c, 0xd1ac, 0x0140, 0x6003, 0x0004,
-+ 0x687c, 0x9085, 0x0400, 0x687e, 0x00de, 0x0005, 0x6003, 0x0002,
-+ 0x0cb8, 0x080c, 0x79ab, 0x2001, 0x12c0, 0x2004, 0x601a, 0x2001,
-+ 0x12c2, 0x2004, 0x6042, 0x6003, 0x000f, 0x080c, 0x7aa4, 0x0005,
-+ 0x080c, 0x79ab, 0x080c, 0x8ed9, 0x080c, 0x7aa4, 0x0005, 0x9182,
-+ 0x0040, 0x0002, 0x9ec6, 0x9ec6, 0x9ec6, 0x9ec6, 0x9ec6, 0x9ec8,
-+ 0x9fa9, 0x9ec6, 0x9ec6, 0x9ec6, 0x9ec6, 0x9ec6, 0x9ec6, 0x9ec6,
-+ 0x9ec6, 0x9ec6, 0x9ec6, 0x9ec6, 0x9ec6, 0x9fd8, 0x080c, 0x0d7e,
-+ 0x00d6, 0x6114, 0x2168, 0x7644, 0x96b4, 0x0fff, 0x86ff, 0x1518,
-+ 0x6010, 0x2004, 0xd0bc, 0x1904, 0x9f94, 0x687b, 0x0000, 0x6867,
-+ 0x0103, 0x6e76, 0x687c, 0xd0ac, 0x0128, 0x6834, 0x6938, 0x9115,
-+ 0x190c, 0xa12c, 0x080c, 0x599a, 0x6210, 0x2268, 0x6a3c, 0x82ff,
-+ 0x0110, 0x8211, 0x6a3e, 0x7044, 0xd0e4, 0x1904, 0x9f74, 0x080c,
-+ 0x8ed9, 0x00de, 0x0005, 0x968c, 0x0c00, 0x0148, 0x6010, 0x2004,
-+ 0xd0bc, 0x1904, 0x9f78, 0x7348, 0x6b92, 0x734c, 0x6b8e, 0x968c,
-+ 0x00ff, 0x9186, 0x0002, 0x0508, 0x9186, 0x0028, 0x1118, 0x687b,
-+ 0x001c, 0x00e8, 0xd6dc, 0x01a0, 0x687b, 0x0015, 0x687c, 0xd0ac,
-+ 0x0170, 0x6938, 0x6a34, 0x2100, 0x9205, 0x0148, 0x7048, 0x9106,
-+ 0x1118, 0x704c, 0x9206, 0x0118, 0x6992, 0x6a8e, 0xc6dc, 0x0038,
-+ 0xd6d4, 0x0118, 0x687b, 0x0007, 0x0010, 0x687b, 0x0000, 0x6867,
-+ 0x0103, 0x6e76, 0x901e, 0xd6c4, 0x01d8, 0x9686, 0x0100, 0x1130,
-+ 0x7064, 0x9005, 0x1118, 0xc6c4, 0x0804, 0x9ece, 0x735c, 0x6b86,
-+ 0x83ff, 0x0170, 0x938a, 0x0009, 0x0210, 0x2019, 0x0008, 0x0036,
-+ 0x2308, 0x2019, 0x0018, 0x9d90, 0x0025, 0x080c, 0xa5c9, 0x003e,
-+ 0xd6cc, 0x0904, 0x9ee2, 0x7154, 0x698a, 0x81ff, 0x0904, 0x9ee2,
-+ 0x9192, 0x0021, 0x1278, 0x8304, 0x9098, 0x0018, 0x9d90, 0x0029,
-+ 0x080c, 0xa5c9, 0x2011, 0x0205, 0x2013, 0x0000, 0x080c, 0xaf7b,
-+ 0x0804, 0x9ee2, 0x6868, 0xd0fc, 0x0120, 0x2009, 0x0020, 0x698a,
-+ 0x0c50, 0x00f6, 0x2d78, 0x080c, 0xa568, 0x00fe, 0x080c, 0xaf7b,
-+ 0x080c, 0xa5b9, 0x0804, 0x9ee4, 0x080c, 0xac0b, 0x0804, 0x9ef1,
-+ 0x687c, 0xd0ac, 0x0904, 0x9efb, 0x6024, 0xd0dc, 0x1904, 0x9efb,
-+ 0x6880, 0xd0bc, 0x1904, 0x9efb, 0x7348, 0x6838, 0x9306, 0x11e8,
-+ 0x734c, 0x6834, 0x931e, 0x0904, 0x9efb, 0xd6d4, 0x01b0, 0x6b38,
-+ 0x9305, 0x0904, 0x9efb, 0x0088, 0x687c, 0xd0ac, 0x0904, 0x9ed5,
-+ 0x6838, 0x6934, 0x9105, 0x0904, 0x9ed5, 0x6024, 0xd0dc, 0x1904,
-+ 0x9ed5, 0x6880, 0xd0bc, 0x1904, 0x9ed5, 0x080c, 0xac39, 0x0804,
-+ 0x9ef1, 0x00f6, 0x6003, 0x0003, 0x2079, 0x026c, 0x7c04, 0x7b00,
-+ 0x7e0c, 0x7d08, 0x6014, 0x2078, 0x787c, 0xd0ac, 0x0138, 0x6003,
-+ 0x0002, 0x00fe, 0x0005, 0x2130, 0x2228, 0x0058, 0x2400, 0x79ac,
-+ 0x910a, 0x2300, 0x7ab0, 0x9213, 0x2600, 0x9102, 0x2500, 0x9203,
-+ 0x0e90, 0x7c36, 0x7b3a, 0x7e46, 0x7d4a, 0x00fe, 0x6043, 0x0000,
-+ 0x2c10, 0x080c, 0x1605, 0x080c, 0x75db, 0x080c, 0x7b72, 0x0005,
-+ 0x0005, 0x9182, 0x0040, 0x0002, 0x9fef, 0x9fef, 0x9fef, 0x9fef,
-+ 0x9fef, 0x9ff1, 0xa085, 0x9fef, 0x9fef, 0xa09b, 0xa103, 0x9fef,
-+ 0x9fef, 0x9fef, 0x9fef, 0xa112, 0x9fef, 0x9fef, 0x9fef, 0x080c,
-+ 0x0d7e, 0x0076, 0x00f6, 0x00e6, 0x00d6, 0x2071, 0x0260, 0x6114,
-+ 0x2178, 0x7644, 0x7e76, 0x96b4, 0x0fff, 0x7f7c, 0xc7e5, 0x7f7e,
-+ 0x6210, 0x2268, 0x6a3c, 0x82ff, 0x0110, 0x8211, 0x6a3e, 0x86ff,
-+ 0x0904, 0xa080, 0x9694, 0xff00, 0x9284, 0x0c00, 0x0120, 0x7048,
-+ 0x7892, 0x704c, 0x788e, 0x9284, 0x0300, 0x0904, 0xa080, 0x080c,
-+ 0x0eb6, 0x090c, 0x0d7e, 0x2d00, 0x787a, 0x7f7c, 0xc7cd, 0x7f7e,
-+ 0x6867, 0x0103, 0x7868, 0x686a, 0x786c, 0x686e, 0x7870, 0x6872,
-+ 0x6e76, 0x968c, 0x0c00, 0x0120, 0x7348, 0x6b92, 0x734c, 0x6b8e,
-+ 0x968c, 0x00ff, 0x9186, 0x0002, 0x0180, 0x9186, 0x0028, 0x1118,
-+ 0x687b, 0x001c, 0x0060, 0xd6dc, 0x0118, 0x687b, 0x0015, 0x0038,
-+ 0xd6d4, 0x0118, 0x687b, 0x0007, 0x0010, 0x687b, 0x0000, 0x6f7e,
-+ 0x7880, 0x6882, 0x7884, 0x6886, 0x901e, 0xd6c4, 0x0190, 0x735c,
-+ 0x6b86, 0x83ff, 0x0170, 0x938a, 0x0009, 0x0210, 0x2019, 0x0008,
-+ 0x0036, 0x2308, 0x2019, 0x0018, 0x9d90, 0x0025, 0x080c, 0xa5c9,
-+ 0x003e, 0xd6cc, 0x01e8, 0x7154, 0x698a, 0x81ff, 0x01c8, 0x9192,
-+ 0x0021, 0x1260, 0x8304, 0x9098, 0x0018, 0x9d90, 0x0029, 0x080c,
-+ 0xa5c9, 0x2011, 0x0205, 0x2013, 0x0000, 0x0050, 0x7868, 0xd0fc,
-+ 0x0120, 0x2009, 0x0020, 0x698a, 0x0c68, 0x2d78, 0x080c, 0xa568,
-+ 0x00de, 0x00ee, 0x00fe, 0x007e, 0x0005, 0x00f6, 0x6003, 0x0003,
-+ 0x2079, 0x026c, 0x7c04, 0x7b00, 0x7e0c, 0x7d08, 0x6014, 0x2078,
-+ 0x7c36, 0x7b3a, 0x7e46, 0x7d4a, 0x00fe, 0x2c10, 0x080c, 0x1605,
-+ 0x080c, 0x856f, 0x0005, 0x00d6, 0x2001, 0x12c2, 0x2004, 0x6042,
-+ 0x6003, 0x0002, 0x080c, 0x7a55, 0x080c, 0x7b72, 0x6114, 0x2168,
-+ 0x697c, 0xd1e4, 0x0904, 0xa0fe, 0xd1cc, 0x0570, 0x6978, 0x6868,
-+ 0xd0fc, 0x0500, 0x0016, 0x687c, 0x0006, 0x6880, 0x0006, 0x9d90,
-+ 0x0019, 0x9198, 0x0019, 0x2009, 0x0020, 0x0156, 0x21a8, 0x2304,
-+ 0x2012, 0x8318, 0x8210, 0x1f04, 0xa0bf, 0x015e, 0x000e, 0x6882,
-+ 0x000e, 0x687e, 0x001e, 0x6874, 0x0006, 0x2168, 0x080c, 0x0edf,
-+ 0x001e, 0x0440, 0x0016, 0x080c, 0x0edf, 0x00de, 0x6974, 0x0016,
-+ 0x080c, 0xa5b9, 0x001e, 0x00f0, 0x6867, 0x0103, 0x6974, 0x9184,
-+ 0x00ff, 0x90b6, 0x0002, 0x0180, 0x9086, 0x0028, 0x1118, 0x687b,
-+ 0x001c, 0x0060, 0xd1dc, 0x0118, 0x687b, 0x0015, 0x0038, 0xd1d4,
-+ 0x0118, 0x687b, 0x0007, 0x0010, 0x687b, 0x0000, 0x0016, 0x080c,
-+ 0x599a, 0x001e, 0xd1e4, 0x1120, 0x080c, 0x8ed9, 0x00de, 0x0005,
-+ 0x080c, 0xac0b, 0x0cd8, 0x2019, 0x0001, 0x080c, 0x8847, 0x6003,
-+ 0x0002, 0x2001, 0x12c2, 0x2004, 0x6042, 0x080c, 0x7a55, 0x080c,
-+ 0x7b72, 0x0005, 0x080c, 0x7a55, 0x080c, 0x2862, 0x00d6, 0x6114,
-+ 0x2168, 0x080c, 0xa942, 0x0150, 0x6867, 0x0103, 0x687b, 0x0029,
-+ 0x6877, 0x0000, 0x080c, 0x5b76, 0x080c, 0xab11, 0x00de, 0x080c,
-+ 0x8ed9, 0x080c, 0x7b72, 0x0005, 0x687b, 0x0015, 0xd1fc, 0x0138,
-+ 0x687b, 0x0007, 0x8002, 0x8000, 0x810a, 0x9189, 0x0000, 0x6992,
-+ 0x688e, 0x0005, 0x9182, 0x0040, 0x0002, 0xa151, 0xa151, 0xa151,
-+ 0xa151, 0xa151, 0xa153, 0xa151, 0xa151, 0xa1f7, 0xa151, 0xa151,
-+ 0xa151, 0xa151, 0xa151, 0xa151, 0xa151, 0xa151, 0xa151, 0xa151,
-+ 0xa31d, 0x080c, 0x0d7e, 0x0076, 0x00f6, 0x00e6, 0x00d6, 0x2071,
-+ 0x0260, 0x6114, 0x2178, 0x7644, 0x7e76, 0x96b4, 0x0fff, 0x7f7c,
-+ 0xc7e5, 0x7f7e, 0x6210, 0x2268, 0x6a3c, 0x82ff, 0x0110, 0x8211,
-+ 0x6a3e, 0x86ff, 0x0904, 0xa1f0, 0x9694, 0xff00, 0x9284, 0x0c00,
-+ 0x0120, 0x7048, 0x7892, 0x704c, 0x788e, 0x9284, 0x0300, 0x0904,
-+ 0xa1f0, 0x9686, 0x0100, 0x1130, 0x7064, 0x9005, 0x1118, 0xc6c4,
-+ 0x7e76, 0x0c38, 0x080c, 0x0eb6, 0x090c, 0x0d7e, 0x2d00, 0x787a,
-+ 0x7f7c, 0x97bd, 0x0200, 0x7f7e, 0x6867, 0x0103, 0x7868, 0x686a,
-+ 0x786c, 0x686e, 0x7870, 0x6872, 0x7044, 0x9084, 0xf000, 0x9635,
-+ 0x6e76, 0x968c, 0x0c00, 0x0120, 0x7348, 0x6b92, 0x734c, 0x6b8e,
-+ 0x968c, 0x00ff, 0x9186, 0x0002, 0x0180, 0x9186, 0x0028, 0x1118,
-+ 0x687b, 0x001c, 0x0060, 0xd6dc, 0x0118, 0x687b, 0x0015, 0x0038,
-+ 0xd6d4, 0x0118, 0x687b, 0x0007, 0x0010, 0x687b, 0x0000, 0x6f7e,
-+ 0x7880, 0x6882, 0x7884, 0x6886, 0x901e, 0xd6c4, 0x0190, 0x735c,
-+ 0x6b86, 0x83ff, 0x0170, 0x938a, 0x0009, 0x0210, 0x2019, 0x0008,
-+ 0x0036, 0x2308, 0x2019, 0x0018, 0x9d90, 0x0025, 0x080c, 0xa5c9,
-+ 0x003e, 0xd6cc, 0x01e8, 0x7154, 0x698a, 0x81ff, 0x01c8, 0x9192,
-+ 0x0021, 0x1260, 0x8304, 0x9098, 0x0018, 0x9d90, 0x0029, 0x080c,
-+ 0xa5c9, 0x2011, 0x0205, 0x2013, 0x0000, 0x0050, 0x7868, 0xd0fc,
-+ 0x0120, 0x2009, 0x0020, 0x698a, 0x0c68, 0x2d78, 0x080c, 0xa568,
-+ 0x080c, 0x14d3, 0x00de, 0x00ee, 0x00fe, 0x007e, 0x0005, 0x2001,
-+ 0x12c2, 0x2004, 0x6042, 0x00d6, 0x6114, 0x2168, 0x683c, 0x6940,
-+ 0x9105, 0x1118, 0x687c, 0xc0dc, 0x687e, 0x6003, 0x0002, 0x697c,
-+ 0xd1e4, 0x0904, 0xa318, 0x6043, 0x0000, 0x6010, 0x2004, 0xd0bc,
-+ 0x11f8, 0xd1cc, 0x0904, 0xa2e7, 0x6978, 0x6868, 0xd0fc, 0x0904,
-+ 0xa2a8, 0x0016, 0x687c, 0x0006, 0x6880, 0x0006, 0x00f6, 0x2178,
-+ 0x7974, 0x9184, 0x00ff, 0x90b6, 0x0002, 0x0904, 0xa27b, 0x9086,
-+ 0x0028, 0x15e8, 0x687b, 0x001c, 0x787b, 0x001c, 0x0804, 0xa283,
-+ 0x6024, 0xd0f4, 0x11d0, 0x6838, 0x6a34, 0x9205, 0x09d0, 0x6838,
-+ 0x6a90, 0x9206, 0x1120, 0x688c, 0x6a34, 0x9206, 0x0990, 0x6024,
-+ 0xd0d4, 0x1148, 0x69ac, 0x6834, 0x9102, 0x603a, 0x69b0, 0x6838,
-+ 0x9103, 0x603e, 0x6024, 0xc0f5, 0x6026, 0x6010, 0x00d6, 0x2068,
-+ 0x683c, 0x8000, 0x683e, 0x00de, 0x9006, 0x6876, 0x6892, 0x688e,
-+ 0x687c, 0xc0e4, 0x687e, 0xd0cc, 0x0130, 0x00d6, 0x6878, 0x2068,
-+ 0x080c, 0x0edf, 0x00de, 0x080c, 0xac39, 0x0804, 0xa318, 0xd1dc,
-+ 0x0158, 0x687b, 0x0015, 0x787b, 0x0015, 0x080c, 0xaea9, 0x0118,
-+ 0x7974, 0xc1dc, 0x7976, 0x0078, 0xd1d4, 0x0128, 0x687b, 0x0007,
-+ 0x787b, 0x0007, 0x0040, 0x687c, 0xd0ac, 0x0128, 0x6834, 0x6938,
-+ 0x9115, 0x190c, 0xa12c, 0x687c, 0x787e, 0x6890, 0x7892, 0x688c,
-+ 0x788e, 0x9d90, 0x0019, 0x9f98, 0x0019, 0x2009, 0x0020, 0x0156,
-+ 0x21a8, 0x2304, 0x2012, 0x8318, 0x8210, 0x1f04, 0xa291, 0x015e,
-+ 0x00fe, 0x000e, 0x6882, 0x000e, 0x687e, 0x080c, 0xaf7b, 0x001e,
-+ 0x6874, 0x0006, 0x2168, 0x080c, 0x0edf, 0x001e, 0x0804, 0xa314,
-+ 0x0016, 0x00f6, 0x2178, 0x7974, 0x9184, 0x00ff, 0x90b6, 0x0002,
-+ 0x01e0, 0x9086, 0x0028, 0x1128, 0x687b, 0x001c, 0x787b, 0x001c,
-+ 0x00e0, 0xd1dc, 0x0158, 0x687b, 0x0015, 0x787b, 0x0015, 0x080c,
-+ 0xaea9, 0x0118, 0x7974, 0xc1dc, 0x7976, 0x0078, 0xd1d4, 0x0128,
-+ 0x687b, 0x0007, 0x787b, 0x0007, 0x0040, 0x687c, 0xd0ac, 0x0128,
-+ 0x6834, 0x6938, 0x9115, 0x190c, 0xa12c, 0x6890, 0x7892, 0x688c,
-+ 0x788e, 0x687c, 0x787e, 0x00fe, 0x080c, 0x0edf, 0x00de, 0x080c,
-+ 0xaf7b, 0x6974, 0x0016, 0x080c, 0xa5b9, 0x001e, 0x0468, 0x6867,
-+ 0x0103, 0x6974, 0x9184, 0x00ff, 0x90b6, 0x0002, 0x01b0, 0x9086,
-+ 0x0028, 0x1118, 0x687b, 0x001c, 0x00d0, 0xd1dc, 0x0148, 0x687b,
-+ 0x0015, 0x080c, 0xaea9, 0x0118, 0x6974, 0xc1dc, 0x6976, 0x0078,
-+ 0xd1d4, 0x0118, 0x687b, 0x0007, 0x0050, 0x687b, 0x0000, 0x687c,
-+ 0xd0ac, 0x0128, 0x6834, 0x6938, 0x9115, 0x190c, 0xa12c, 0x6974,
-+ 0x0016, 0x080c, 0x599a, 0x001e, 0xd1e4, 0x1120, 0x080c, 0x8ed9,
-+ 0x00de, 0x0005, 0x080c, 0xac0b, 0x0cd8, 0x0005, 0x080c, 0x79ab,
-+ 0x0010, 0x080c, 0x7a55, 0x080c, 0xa942, 0x01c0, 0x00d6, 0x6114,
-+ 0x2168, 0x6867, 0x0103, 0x2009, 0x110c, 0x210c, 0xd18c, 0x11c0,
-+ 0xd184, 0x1198, 0x6108, 0x697a, 0x918e, 0x0029, 0x1110, 0x080c,
-+ 0xc3c7, 0x6877, 0x0000, 0x080c, 0x5b76, 0x00de, 0x080c, 0x8ed9,
-+ 0x080c, 0x7aa4, 0x080c, 0x7b72, 0x0005, 0x687b, 0x0004, 0x0c88,
-+ 0x687b, 0x0004, 0x0c70, 0x9182, 0x0040, 0x0002, 0xa361, 0xa361,
-+ 0xa361, 0xa361, 0xa361, 0xa363, 0xa361, 0xa366, 0xa361, 0xa361,
-+ 0xa361, 0xa361, 0xa361, 0xa361, 0xa361, 0xa361, 0xa361, 0xa361,
-+ 0xa361, 0x080c, 0x0d7e, 0x080c, 0x8ed9, 0x0005, 0x0006, 0x0026,
-+ 0x9016, 0x080c, 0x137c, 0x002e, 0x000e, 0x0005, 0x9182, 0x0085,
-+ 0x0002, 0xa380, 0xa37e, 0xa37e, 0xa38c, 0xa37e, 0xa37e, 0xa37e,
-+ 0xa37e, 0xa37e, 0xa37e, 0xa37e, 0xa37e, 0xa37e, 0x080c, 0x0d7e,
-+ 0x6003, 0x0001, 0x6106, 0x080c, 0x756e, 0x0126, 0x2091, 0x8000,
-+ 0x080c, 0x7aa4, 0x012e, 0x0005, 0x0026, 0x0056, 0x00d6, 0x00e6,
-+ 0x2071, 0x0260, 0x7224, 0x6216, 0x7220, 0x080c, 0xa932, 0x01a0,
-+ 0x2268, 0x6800, 0x9086, 0x0000, 0x0178, 0x6010, 0x6d10, 0x952e,
-+ 0x1158, 0x00c6, 0x2d60, 0x080c, 0xa5e6, 0x00ce, 0x0128, 0x6803,
-+ 0x0002, 0x6007, 0x0086, 0x0010, 0x6007, 0x0087, 0x6003, 0x0001,
-+ 0x080c, 0x756e, 0x080c, 0x7aa4, 0x9280, 0x0004, 0x2004, 0xd0bc,
-+ 0x0150, 0x6824, 0xd0ec, 0x0138, 0x00c6, 0x2260, 0x6043, 0x0000,
-+ 0x080c, 0xac39, 0x00ce, 0x00ee, 0x00de, 0x005e, 0x002e, 0x0005,
-+ 0x9186, 0x0013, 0x1160, 0x6004, 0x908a, 0x0085, 0x0a0c, 0x0d7e,
-+ 0x908a, 0x0092, 0x1a0c, 0x0d7e, 0x9082, 0x0085, 0x0072, 0x9186,
-+ 0x0027, 0x0120, 0x9186, 0x0014, 0x190c, 0x0d7e, 0x080c, 0x79ab,
-+ 0x080c, 0x8f09, 0x080c, 0x7aa4, 0x0005, 0xa3f2, 0xa3f4, 0xa3f4,
-+ 0xa3f2, 0xa3f2, 0xa3f2, 0xa3f2, 0xa3f2, 0xa3f2, 0xa3f2, 0xa3f2,
-+ 0xa3f2, 0xa3f2, 0x080c, 0x0d7e, 0x080c, 0x79ab, 0x080c, 0x8f09,
-+ 0x080c, 0x7aa4, 0x0005, 0x9186, 0x0013, 0x1128, 0x6004, 0x9082,
-+ 0x0085, 0x2008, 0x04a8, 0x9186, 0x0027, 0x11e8, 0x080c, 0x79ab,
-+ 0x080c, 0x2862, 0x00d6, 0x6014, 0x2068, 0x080c, 0xa942, 0x0150,
-+ 0x6867, 0x0103, 0x6877, 0x0000, 0x687b, 0x0029, 0x080c, 0x5b76,
-+ 0x080c, 0xab11, 0x00de, 0x080c, 0x8ed9, 0x080c, 0x7aa4, 0x0005,
-+ 0x080c, 0x8f6e, 0x0ce0, 0x9186, 0x0014, 0x1dd0, 0x080c, 0x79ab,
-+ 0x00d6, 0x6014, 0x2068, 0x080c, 0xa942, 0x0d60, 0x6867, 0x0103,
-+ 0x6877, 0x0000, 0x687b, 0x0006, 0x6880, 0xc0ec, 0x6882, 0x08f0,
-+ 0x0002, 0xa448, 0xa446, 0xa446, 0xa446, 0xa446, 0xa446, 0xa460,
-+ 0xa446, 0xa446, 0xa446, 0xa446, 0xa446, 0xa446, 0x080c, 0x0d7e,
-+ 0x080c, 0x79ab, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0039,
-+ 0x0118, 0x9186, 0x0035, 0x1118, 0x2001, 0x12c0, 0x0010, 0x2001,
-+ 0x12c1, 0x2004, 0x601a, 0x6003, 0x000c, 0x080c, 0x7aa4, 0x0005,
-+ 0x080c, 0x79ab, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0039,
-+ 0x0118, 0x9186, 0x0035, 0x1118, 0x2001, 0x12c0, 0x0010, 0x2001,
-+ 0x12c1, 0x2004, 0x601a, 0x6003, 0x000e, 0x080c, 0x7aa4, 0x0005,
-+ 0x9182, 0x0092, 0x1220, 0x9182, 0x0085, 0x0208, 0x001a, 0x080c,
-+ 0x8f6e, 0x0005, 0xa48f, 0xa48f, 0xa48f, 0xa48f, 0xa491, 0xa4ea,
-+ 0xa48f, 0xa48f, 0xa48f, 0xa48f, 0xa48f, 0xa48f, 0xa48f, 0x080c,
-+ 0x0d7e, 0x00d6, 0x6010, 0x2004, 0xd0bc, 0x0168, 0x6034, 0x908c,
-+ 0xff00, 0x810f, 0x9186, 0x0039, 0x0118, 0x9186, 0x0035, 0x1118,
-+ 0x00de, 0x0804, 0xa4fb, 0x080c, 0xa942, 0x1118, 0x080c, 0xab11,
-+ 0x00f0, 0x6014, 0x2068, 0x687c, 0xd0e4, 0x1110, 0x080c, 0xab11,
-+ 0x6867, 0x0103, 0x6880, 0xd0b4, 0x0128, 0x687b, 0x0006, 0xc0ec,
-+ 0x6882, 0x0048, 0xd0bc, 0x0118, 0x687b, 0x0002, 0x0020, 0x687b,
-+ 0x0005, 0x080c, 0xac07, 0x6877, 0x0000, 0x080c, 0x5b76, 0x2c68,
-+ 0x080c, 0x8e83, 0x01d0, 0x6003, 0x0001, 0x6007, 0x001e, 0x600b,
-+ 0xffff, 0x2009, 0x026e, 0x210c, 0x613a, 0x2009, 0x026f, 0x210c,
-+ 0x613e, 0x6910, 0x6112, 0x080c, 0xad70, 0x6954, 0x6156, 0x6023,
-+ 0x0001, 0x080c, 0x756e, 0x080c, 0x7aa4, 0x2d60, 0x080c, 0x8ed9,
-+ 0x00de, 0x0005, 0x6010, 0x2004, 0xd0bc, 0x0598, 0x6034, 0x908c,
-+ 0xff00, 0x810f, 0x9186, 0x0035, 0x0130, 0x9186, 0x001e, 0x0118,
-+ 0x9186, 0x0039, 0x1530, 0x00d6, 0x2c68, 0x080c, 0xaf4e, 0x1904,
-+ 0xa540, 0x080c, 0x8e83, 0x01d8, 0x6106, 0x6003, 0x0001, 0x6023,
-+ 0x0001, 0x6910, 0x6112, 0x692c, 0x612e, 0x6930, 0x6132, 0x6934,
-+ 0x918c, 0x00ff, 0x6136, 0x6938, 0x613a, 0x693c, 0x613e, 0x6954,
-+ 0x6156, 0x080c, 0xad70, 0x080c, 0x756e, 0x080c, 0x7aa4, 0x2d60,
-+ 0x00f8, 0x00d6, 0x6014, 0x2068, 0x080c, 0xa942, 0x01c8, 0x6867,
-+ 0x0103, 0x6880, 0xd0b4, 0x0128, 0xc0ec, 0x6882, 0x687b, 0x0006,
-+ 0x0048, 0xd0bc, 0x0118, 0x687b, 0x0002, 0x0020, 0x687b, 0x0005,
-+ 0x080c, 0xac07, 0x6877, 0x0000, 0x080c, 0x5b76, 0x080c, 0xab11,
-+ 0x00de, 0x080c, 0x8ed9, 0x0005, 0x0016, 0x00d6, 0x6014, 0x2068,
-+ 0x080c, 0xa942, 0x0140, 0x6867, 0x0103, 0x687b, 0x0028, 0x6877,
-+ 0x0000, 0x080c, 0x5b76, 0x00de, 0x001e, 0x9186, 0x0013, 0x0148,
-+ 0x9186, 0x0014, 0x0130, 0x9186, 0x0027, 0x0118, 0x080c, 0x8f6e,
-+ 0x0030, 0x080c, 0x79ab, 0x080c, 0x8f09, 0x080c, 0x7aa4, 0x0005,
-+ 0x0056, 0x0066, 0x00d6, 0x00f6, 0x2029, 0x0001, 0x9182, 0x0101,
-+ 0x1208, 0x0010, 0x2009, 0x0100, 0x2130, 0x8304, 0x9098, 0x0018,
-+ 0x2009, 0x0020, 0x9f90, 0x0029, 0x080c, 0xa5c9, 0x96b2, 0x0020,
-+ 0x7804, 0x906d, 0x0110, 0x080c, 0x0edf, 0x080c, 0x0eb6, 0x0520,
-+ 0x8528, 0x6867, 0x0110, 0x686b, 0x0000, 0x2d20, 0x7c06, 0x968a,
-+ 0x003d, 0x1228, 0x2608, 0x9d90, 0x001b, 0x0499, 0x00a8, 0x96b2,
-+ 0x003c, 0x2009, 0x003c, 0x2d78, 0x9d90, 0x001b, 0x0451, 0x0c28,
-+ 0x2079, 0x0200, 0x7817, 0x0000, 0x00fe, 0x852f, 0x95ad, 0x0003,
-+ 0x7d66, 0x95ac, 0x0000, 0x0048, 0x2079, 0x0200, 0x7817, 0x0000,
-+ 0x00fe, 0x852f, 0x95ad, 0x0003, 0x7d66, 0x00de, 0x006e, 0x005e,
-+ 0x0005, 0x00f6, 0x8dff, 0x0158, 0x6804, 0x907d, 0x0130, 0x6807,
-+ 0x0000, 0x080c, 0x5b76, 0x2f68, 0x0cb8, 0x080c, 0x5b76, 0x00fe,
-+ 0x0005, 0x00f6, 0x0156, 0x2079, 0x0200, 0x9184, 0x0001, 0x0108,
-+ 0x8108, 0x810c, 0x21a8, 0x2300, 0x9e00, 0x2004, 0x8007, 0x2012,
-+ 0x8318, 0x9386, 0x0020, 0x1120, 0x2018, 0x7814, 0x8000, 0x7816,
-+ 0x8210, 0x1f04, 0xa5d3, 0x015e, 0x00fe, 0x0005, 0x0066, 0x0126,
-+ 0x2091, 0x8000, 0x2031, 0x0001, 0x6020, 0x9084, 0x000f, 0x0083,
-+ 0x012e, 0x006e, 0x0005, 0x0126, 0x2091, 0x8000, 0x0066, 0x2031,
-+ 0x0000, 0x6020, 0x9084, 0x000f, 0x001b, 0x006e, 0x012e, 0x0005,
-+ 0xa621, 0xa621, 0xa61c, 0xa643, 0xa60f, 0xa61c, 0xa643, 0xa61c,
-+ 0xa60f, 0xa60f, 0xa61c, 0xa61c, 0xa61c, 0xa60f, 0xa60f, 0x080c,
-+ 0x0d7e, 0x0036, 0x2019, 0x0010, 0x080c, 0xbd23, 0x6023, 0x0006,
-+ 0x6003, 0x0007, 0x003e, 0x0005, 0x9006, 0x0005, 0x9085, 0x0001,
-+ 0x0005, 0x00d6, 0x86ff, 0x11d8, 0x6014, 0x2068, 0x080c, 0xa942,
-+ 0x01c0, 0x6864, 0x9086, 0x0139, 0x1128, 0x687b, 0x0005, 0x6883,
-+ 0x0000, 0x0028, 0x900e, 0x2001, 0x0005, 0x080c, 0x5d95, 0x080c,
-+ 0xac07, 0x080c, 0x5b76, 0x080c, 0x8f09, 0x9085, 0x0001, 0x00de,
-+ 0x0005, 0x9006, 0x0ce0, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0d7e,
-+ 0x000b, 0x0005, 0xa65a, 0xa67b, 0xa65c, 0xa69a, 0xa678, 0xa65a,
-+ 0xa61c, 0xa621, 0xa621, 0xa61c, 0xa61c, 0xa61c, 0xa61c, 0xa61c,
-+ 0xa61c, 0xa61c, 0x080c, 0x0d7e, 0x86ff, 0x11b8, 0x6020, 0x9086,
-+ 0x0006, 0x0198, 0x00d6, 0x6014, 0x2068, 0x080c, 0xa942, 0x0110,
-+ 0x080c, 0xac07, 0x00de, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023,
-+ 0x0002, 0x080c, 0x756e, 0x080c, 0x7aa4, 0x9085, 0x0001, 0x0005,
-+ 0x080c, 0x1509, 0x0c08, 0x00e6, 0x2071, 0x1304, 0x7024, 0x9c06,
-+ 0x1110, 0x080c, 0x87a2, 0x6020, 0x9084, 0x000f, 0x9086, 0x0006,
-+ 0x1150, 0x0086, 0x0096, 0x2049, 0x0001, 0x2c40, 0x080c, 0x8968,
-+ 0x009e, 0x008e, 0x0010, 0x080c, 0x86b8, 0x00ee, 0x1928, 0x080c,
-+ 0xa61c, 0x0005, 0x0036, 0x00e6, 0x2071, 0x1304, 0x703c, 0x9c06,
-+ 0x1138, 0x901e, 0x080c, 0x8847, 0x00ee, 0x003e, 0x0804, 0xa65c,
-+ 0x080c, 0x8a8d, 0x00ee, 0x003e, 0x1904, 0xa65c, 0x080c, 0xa61c,
-+ 0x0005, 0x00c6, 0x6020, 0x9084, 0x000f, 0x0013, 0x00ce, 0x0005,
-+ 0xa6ce, 0xa759, 0xa8a3, 0xa6d9, 0x8f09, 0xa6ce, 0xbd15, 0x8ed9,
-+ 0xa759, 0xa6c7, 0xa90e, 0xa6c7, 0xa6c7, 0xa6c7, 0xa6c7, 0x080c,
-+ 0x0d7e, 0x080c, 0xab2e, 0x1110, 0x080c, 0x97dc, 0x0005, 0x080c,
-+ 0x79ab, 0x080c, 0x7aa4, 0x080c, 0x8ed9, 0x0005, 0x601b, 0x0001,
-+ 0x0005, 0x080c, 0xa942, 0x0120, 0x6014, 0x9080, 0x0025, 0x2c02,
-+ 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0d7e, 0x000b, 0x0005, 0xa6f7,
-+ 0xa6f9, 0xa719, 0xa72b, 0xa738, 0xa6f7, 0xa6ce, 0xa6ce, 0xa6ce,
-+ 0xa72b, 0xa72b, 0xa6f7, 0xa6f7, 0xa6f7, 0xa6f7, 0xa735, 0x080c,
-+ 0x0d7e, 0x00e6, 0x6014, 0x2070, 0x7080, 0xc0b5, 0x7082, 0x2071,
-+ 0x1304, 0x7024, 0x9c06, 0x0190, 0x080c, 0x86b8, 0x6007, 0x0085,
-+ 0x6003, 0x000b, 0x6023, 0x0002, 0x2001, 0x12c1, 0x2004, 0x601a,
-+ 0x080c, 0x756e, 0x080c, 0x7aa4, 0x00ee, 0x0005, 0x601b, 0x0001,
-+ 0x0cd8, 0x00d6, 0x6014, 0x2068, 0x6880, 0xc0b5, 0x6882, 0x00de,
-+ 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x080c, 0x756e,
-+ 0x080c, 0x7aa4, 0x0005, 0x00d6, 0x601b, 0x0001, 0x6014, 0x2068,
-+ 0x6880, 0xc0b5, 0x6882, 0x00de, 0x0005, 0x080c, 0x8ed9, 0x0005,
-+ 0x6014, 0x9005, 0x01d8, 0x9088, 0x001f, 0x210c, 0xd1e4, 0x01b0,
-+ 0x9080, 0x0021, 0x2004, 0x8003, 0x800b, 0x810b, 0x9108, 0x611a,
-+ 0x2001, 0x0037, 0x2c08, 0x080c, 0x130c, 0x6000, 0x9086, 0x0004,
-+ 0x1120, 0x2009, 0x0048, 0x080c, 0x8f53, 0x0005, 0x080c, 0x1509,
-+ 0x0800, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0d7e, 0x000b, 0x0005,
-+ 0xa770, 0xa6d6, 0xa772, 0xa770, 0xa772, 0xa772, 0xa6cf, 0xa770,
-+ 0xa6c9, 0xa6c9, 0xa770, 0xa770, 0xa770, 0xa770, 0xa770, 0xa770,
-+ 0x080c, 0x0d7e, 0x6010, 0x00d6, 0x2068, 0x6804, 0x9084, 0x00ff,
-+ 0x00de, 0x908a, 0x000c, 0x1a0c, 0x0d7e, 0x000b, 0x0005, 0xa78b,
-+ 0xa849, 0xa78d, 0xa7cb, 0xa78d, 0xa7cb, 0xa78d, 0xa79b, 0xa78b,
-+ 0xa7cb, 0xa78b, 0xa7b7, 0x080c, 0x0d7e, 0x6004, 0x908e, 0x0016,
-+ 0x05a8, 0x908e, 0x0004, 0x0590, 0x908e, 0x0002, 0x0578, 0x908e,
-+ 0x0052, 0x0904, 0xa845, 0x6004, 0x080c, 0xab2e, 0x0904, 0xa862,
-+ 0x908e, 0x0021, 0x0904, 0xa866, 0x908e, 0x0022, 0x0904, 0xa862,
-+ 0x908e, 0x003d, 0x0904, 0xa866, 0x908e, 0x0039, 0x0904, 0xa86a,
-+ 0x908e, 0x0035, 0x0904, 0xa86a, 0x908e, 0x001e, 0x0188, 0x908e,
-+ 0x0001, 0x1150, 0x6010, 0x00d6, 0x2068, 0x6804, 0x9084, 0x00ff,
-+ 0x00de, 0x9086, 0x0006, 0x0110, 0x080c, 0x2862, 0x080c, 0x97dc,
-+ 0x080c, 0x8f09, 0x0005, 0x00c6, 0x00d6, 0x6104, 0x9186, 0x0016,
-+ 0x0904, 0xa836, 0x9186, 0x0002, 0x15b8, 0x2001, 0x1136, 0x2004,
-+ 0xd08c, 0x1178, 0x080c, 0x62e4, 0x1160, 0x2001, 0x12a8, 0x2003,
-+ 0x0001, 0x2001, 0x1100, 0x2003, 0x0001, 0x080c, 0x621a, 0x0804,
-+ 0xa88c, 0x6010, 0x2068, 0x2001, 0x1136, 0x2004, 0xd0ac, 0x1904,
-+ 0xa88c, 0x68a0, 0xd0bc, 0x1904, 0xa88c, 0x6840, 0x9084, 0x00ff,
-+ 0x9005, 0x0190, 0x8001, 0x6842, 0x6017, 0x0000, 0x6023, 0x0007,
-+ 0x601b, 0x0398, 0x6043, 0x0000, 0x080c, 0x8e83, 0x0128, 0x2d00,
-+ 0x6012, 0x6023, 0x0001, 0x0450, 0x00de, 0x00ce, 0x6004, 0x908e,
-+ 0x0002, 0x11a8, 0x6010, 0x9080, 0x0028, 0x2004, 0x9086, 0x007e,
-+ 0x1170, 0x2009, 0x1136, 0x2104, 0xc085, 0x200a, 0x00e6, 0x2071,
-+ 0x1100, 0x080c, 0x5092, 0x00ee, 0x080c, 0x97dc, 0x0020, 0x080c,
-+ 0x97dc, 0x080c, 0x2862, 0x00e6, 0x0126, 0x2091, 0x8000, 0x080c,
-+ 0x2886, 0x012e, 0x00ee, 0x080c, 0x8f09, 0x0005, 0x2001, 0x0002,
-+ 0x080c, 0x5568, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x75be,
-+ 0x080c, 0x7aa4, 0x00de, 0x00ce, 0x0c80, 0x080c, 0x2886, 0x0804,
-+ 0xa7c6, 0x00c6, 0x00d6, 0x6104, 0x9186, 0x0016, 0x0d38, 0x6010,
-+ 0x2068, 0x6840, 0x9084, 0x00ff, 0x9005, 0x0904, 0xa80c, 0x8001,
-+ 0x6842, 0x6003, 0x0001, 0x080c, 0x75be, 0x080c, 0x7aa4, 0x00de,
-+ 0x00ce, 0x0898, 0x080c, 0x97dc, 0x0804, 0xa7c8, 0x080c, 0x9809,
-+ 0x0804, 0xa7c8, 0x00d6, 0x2c68, 0x6104, 0x080c, 0xaf4e, 0x00de,
-+ 0x0118, 0x080c, 0x8ed9, 0x00b8, 0x6004, 0x8007, 0x6134, 0x918c,
-+ 0x00ff, 0x9105, 0x6036, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023,
-+ 0x0002, 0x603c, 0x600a, 0x2001, 0x12c1, 0x2004, 0x601a, 0x080c,
-+ 0x756e, 0x080c, 0x7aa4, 0x0005, 0x00de, 0x00ce, 0x080c, 0x97dc,
-+ 0x080c, 0x2862, 0x00e6, 0x0126, 0x2091, 0x8000, 0x080c, 0x2886,
-+ 0x6017, 0x0000, 0x6023, 0x0007, 0x601b, 0x0398, 0x6043, 0x0000,
-+ 0x012e, 0x00ee, 0x0005, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0d7e,
-+ 0x00d6, 0x0013, 0x00de, 0x0005, 0xa8bc, 0xa8bc, 0xa8bc, 0xa8bc,
-+ 0xa8bc, 0xa8bc, 0xa8bc, 0xa8bc, 0xa8bc, 0xa6ce, 0xa8bc, 0xa6d6,
-+ 0xa8be, 0xa6d6, 0xa8cb, 0xa8bc, 0x080c, 0x0d7e, 0x6004, 0x9086,
-+ 0x008b, 0x0148, 0x6007, 0x008b, 0x6003, 0x000d, 0x080c, 0x756e,
-+ 0x080c, 0x7aa4, 0x0005, 0x080c, 0xab11, 0x080c, 0xa942, 0x0570,
-+ 0x080c, 0x2862, 0x080c, 0xa942, 0x0168, 0x6014, 0x2068, 0x6867,
-+ 0x0103, 0x687b, 0x0006, 0x6877, 0x0000, 0x6880, 0xc0ed, 0x6882,
-+ 0x080c, 0x5b76, 0x2c68, 0x080c, 0x8e83, 0x0150, 0x6810, 0x6012,
-+ 0x080c, 0xad70, 0x00c6, 0x2d60, 0x080c, 0x8f09, 0x00ce, 0x0008,
-+ 0x2d60, 0x6017, 0x0000, 0x6023, 0x0001, 0x6007, 0x0001, 0x6003,
-+ 0x0001, 0x080c, 0x75be, 0x080c, 0x7aa4, 0x0078, 0x6034, 0x908c,
-+ 0xff00, 0x810f, 0x9186, 0x0039, 0x0118, 0x9186, 0x0035, 0x1118,
-+ 0x080c, 0x2862, 0x08b8, 0x080c, 0x8f09, 0x0005, 0x6000, 0x908a,
-+ 0x0016, 0x1a0c, 0x0d7e, 0x000b, 0x0005, 0xa925, 0xa925, 0xa927,
-+ 0xa927, 0xa927, 0xa925, 0xa925, 0xa925, 0xa925, 0xa925, 0xa925,
-+ 0xa925, 0xa925, 0xa925, 0xa925, 0xa925, 0x080c, 0x0d7e, 0x080c,
-+ 0x8a8d, 0x6114, 0x2168, 0x687b, 0x0006, 0x080c, 0x5b76, 0x080c,
-+ 0x8ed9, 0x0005, 0x9284, 0x0007, 0x1158, 0x9282, 0x15c0, 0x0240,
-+ 0x2001, 0x1118, 0x2004, 0x9202, 0x1218, 0x9085, 0x0001, 0x0005,
-+ 0x9006, 0x0ce8, 0x0026, 0x6214, 0x9294, 0xf000, 0x002e, 0x0005,
-+ 0x00e6, 0x00c6, 0x0036, 0x0006, 0x0126, 0x2091, 0x8000, 0x2061,
-+ 0x15c0, 0x2071, 0x1100, 0x734c, 0x706c, 0x9302, 0x12a8, 0x6020,
-+ 0x9206, 0x1160, 0x080c, 0xacea, 0x0148, 0x080c, 0xab2e, 0x1110,
-+ 0x080c, 0x97dc, 0x00c6, 0x080c, 0x8ed9, 0x00ce, 0x9ce0, 0x0018,
-+ 0x7060, 0x9c02, 0x1208, 0x0c38, 0x012e, 0x000e, 0x003e, 0x00ce,
-+ 0x00ee, 0x0005, 0x00e6, 0x00c6, 0x0016, 0x9188, 0x1000, 0x210c,
-+ 0x81ff, 0x0128, 0x2061, 0x1389, 0x6112, 0x080c, 0x2862, 0x9006,
-+ 0x0010, 0x9085, 0x0001, 0x001e, 0x00ce, 0x00ee, 0x0005, 0x00c6,
-+ 0x0056, 0x0126, 0x2091, 0x8000, 0x00c6, 0x080c, 0x8e83, 0x005e,
-+ 0x0180, 0x6616, 0x6512, 0x080c, 0xad70, 0x6023, 0x0003, 0x2009,
-+ 0x004b, 0x080c, 0x8f53, 0x9085, 0x0001, 0x012e, 0x005e, 0x00ce,
-+ 0x0005, 0x9006, 0x0cd0, 0x00c6, 0x0056, 0x0126, 0x2091, 0x8000,
-+ 0x62a0, 0x00c6, 0x080c, 0x8f26, 0x005e, 0x0538, 0x6017, 0x0000,
-+ 0x6512, 0x080c, 0xad70, 0x6023, 0x0003, 0x0016, 0x00c6, 0x2560,
-+ 0x00ce, 0x080c, 0x76f0, 0x0076, 0x903e, 0x080c, 0x75ee, 0x2c08,
-+ 0x080c, 0xbec2, 0x007e, 0x001e, 0xd184, 0x0128, 0x080c, 0x8ed9,
-+ 0x9085, 0x0001, 0x0030, 0x2009, 0x004c, 0x080c, 0x8f53, 0x9085,
-+ 0x0001, 0x012e, 0x005e, 0x00ce, 0x0005, 0x9006, 0x0cd0, 0x00f6,
-+ 0x00c6, 0x0046, 0x00c6, 0x080c, 0x8e83, 0x2c78, 0x00ce, 0x0180,
-+ 0x7e16, 0x2c00, 0x7812, 0x7823, 0x0003, 0x2021, 0x0005, 0x080c,
-+ 0xaa35, 0x2f60, 0x2009, 0x004d, 0x080c, 0x8f53, 0x9085, 0x0001,
-+ 0x004e, 0x00ce, 0x00fe, 0x0005, 0x00f6, 0x00c6, 0x0046, 0x00c6,
-+ 0x080c, 0x8e83, 0x2c78, 0x00ce, 0x0178, 0x7e16, 0x2c00, 0x7812,
-+ 0x7823, 0x0003, 0x2021, 0x0005, 0x0481, 0x2f60, 0x2009, 0x004e,
-+ 0x080c, 0x8f53, 0x9085, 0x0001, 0x004e, 0x00ce, 0x00fe, 0x0005,
-+ 0x00f6, 0x00c6, 0x0046, 0x00c6, 0x080c, 0x8e83, 0x2c78, 0x00ce,
-+ 0x01c0, 0x7e16, 0x2c00, 0x7812, 0x7823, 0x0003, 0x2021, 0x0004,
-+ 0x00a1, 0x2001, 0x12a9, 0x2004, 0xd0fc, 0x0120, 0x2f60, 0x080c,
-+ 0x8ed9, 0x0028, 0x2f60, 0x2009, 0x0052, 0x080c, 0x8f53, 0x9085,
-+ 0x0001, 0x004e, 0x00ce, 0x00fe, 0x0005, 0x0096, 0x0076, 0x0126,
-+ 0x2091, 0x8000, 0x080c, 0x572a, 0x0158, 0x2001, 0xaa3a, 0x0006,
-+ 0x900e, 0x2400, 0x080c, 0x5d95, 0x080c, 0x5b76, 0x000e, 0x0807,
-+ 0x2418, 0x080c, 0x7947, 0x62a0, 0x0086, 0x2041, 0x0001, 0x2039,
-+ 0x0001, 0x2608, 0x080c, 0x7708, 0x008e, 0x080c, 0x75ee, 0x2f08,
-+ 0x2648, 0x080c, 0xbec2, 0x613c, 0x81ff, 0x090c, 0x77c0, 0x080c,
-+ 0x7aa4, 0x012e, 0x007e, 0x009e, 0x0005, 0x00c6, 0x0126, 0x2091,
-+ 0x8000, 0x00c6, 0x080c, 0x8e83, 0x001e, 0x0188, 0x660a, 0x6112,
-+ 0x080c, 0xad70, 0x6023, 0x0001, 0x2d00, 0x6016, 0x2009, 0x001f,
-+ 0x080c, 0x8f53, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006,
-+ 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000, 0x00c6, 0x080c, 0x8e83,
-+ 0x001e, 0x01b0, 0x660a, 0x6112, 0x080c, 0xad70, 0x6023, 0x0008,
-+ 0x2d00, 0x6016, 0x00f6, 0x2c78, 0x080c, 0x137e, 0x00fe, 0x2009,
-+ 0x0021, 0x080c, 0x8f53, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005,
-+ 0x9006, 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000, 0x00c6, 0x080c,
-+ 0x8e83, 0x001e, 0x0188, 0x660a, 0x6112, 0x080c, 0xad70, 0x6023,
-+ 0x0001, 0x2d00, 0x6016, 0x2009, 0x003d, 0x080c, 0x8f53, 0x9085,
-+ 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x00c6, 0x0126,
-+ 0x2091, 0x8000, 0x00c6, 0x080c, 0x8f26, 0x001e, 0x0180, 0x6112,
-+ 0x080c, 0xad70, 0x6023, 0x0001, 0x2d00, 0x6016, 0x2009, 0x0000,
-+ 0x080c, 0x8f53, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006,
-+ 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000, 0x00c6, 0x080c, 0x8e83,
-+ 0x001e, 0x0188, 0x660a, 0x6112, 0x080c, 0xad70, 0x6023, 0x0001,
-+ 0x2d00, 0x6016, 0x2009, 0x0044, 0x080c, 0x8f53, 0x9085, 0x0001,
-+ 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x00c6, 0x0126, 0x2091,
-+ 0x8000, 0x00c6, 0x080c, 0x8e83, 0x001e, 0x0188, 0x660a, 0x6112,
-+ 0x080c, 0xad70, 0x6023, 0x0001, 0x2d00, 0x6016, 0x2009, 0x0049,
-+ 0x080c, 0x8f53, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006,
-+ 0x0cd8, 0x0026, 0x00d6, 0x6210, 0x2268, 0x6a3c, 0x82ff, 0x0110,
-+ 0x8211, 0x6a3e, 0x00de, 0x002e, 0x0005, 0x0006, 0x0016, 0x6004,
-+ 0x908e, 0x0002, 0x0140, 0x908e, 0x0003, 0x0128, 0x908e, 0x0004,
-+ 0x0110, 0x9085, 0x0001, 0x001e, 0x000e, 0x0005, 0x0006, 0x00d6,
-+ 0x6014, 0x906d, 0x0148, 0x6864, 0x9086, 0x0139, 0x0138, 0x6868,
-+ 0xd0fc, 0x0110, 0x9006, 0x0010, 0x9085, 0x0001, 0x00de, 0x000e,
-+ 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x00c6, 0x080c, 0x8e83,
-+ 0x001e, 0x0190, 0x6112, 0x080c, 0xad70, 0x6023, 0x0001, 0x2d00,
-+ 0x6016, 0x080c, 0x2862, 0x2009, 0x0028, 0x080c, 0x8f53, 0x9085,
-+ 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x9186, 0x0015,
-+ 0x1188, 0x2011, 0x1122, 0x2204, 0x9086, 0x0074, 0x1158, 0x080c,
-+ 0x9bfa, 0x6003, 0x0001, 0x6007, 0x0029, 0x080c, 0x75be, 0x080c,
-+ 0x7aa4, 0x0070, 0x6014, 0x9080, 0x001a, 0x2004, 0xd0fc, 0x0148,
-+ 0x2001, 0x0001, 0x080c, 0xaf0f, 0x080c, 0x97dc, 0x080c, 0x8ed9,
-+ 0x0005, 0x00d6, 0x6014, 0x906d, 0x090c, 0x0d7e, 0x687b, 0x0030,
-+ 0x6883, 0x0000, 0x6897, 0x4005, 0x689b, 0x0004, 0x6867, 0x0139,
-+ 0x0126, 0x2091, 0x8000, 0x080c, 0x5b76, 0x012e, 0x00de, 0x080c,
-+ 0x8ed9, 0x0c30, 0x9186, 0x0016, 0x1128, 0x2001, 0x0004, 0x080c,
-+ 0x5568, 0x00e8, 0x9186, 0x0015, 0x1518, 0x2011, 0x1122, 0x2204,
-+ 0x9086, 0x0014, 0x11e8, 0x6010, 0x00d6, 0x2068, 0x080c, 0x56a8,
-+ 0x00de, 0x080c, 0x9cc9, 0x11a0, 0x6010, 0x00d6, 0x2068, 0x6890,
-+ 0x00de, 0x9005, 0x0168, 0x2001, 0x0006, 0x080c, 0x5568, 0x6014,
-+ 0x9080, 0x001a, 0x2004, 0xd0fc, 0x0170, 0x080c, 0x9275, 0x0050,
-+ 0x6014, 0x9080, 0x001a, 0x2004, 0xd0fc, 0x01d0, 0x080c, 0x97dc,
-+ 0x080c, 0x8ed9, 0x0005, 0x6014, 0x00d6, 0x906d, 0x090c, 0x0d7e,
-+ 0x687b, 0x0000, 0x6883, 0x0000, 0x6897, 0x4000, 0x0126, 0x2091,
-+ 0x8000, 0x080c, 0x5b76, 0x012e, 0x00de, 0x080c, 0x8ed9, 0x0c50,
-+ 0x6014, 0x00d6, 0x906d, 0x090c, 0x0d7e, 0x687b, 0x0030, 0x6883,
-+ 0x0000, 0x6897, 0x4005, 0x689b, 0x0004, 0x6867, 0x0139, 0x0126,
-+ 0x2091, 0x8000, 0x080c, 0x5b76, 0x012e, 0x00de, 0x080c, 0x8ed9,
-+ 0x0888, 0x6878, 0x9086, 0x0005, 0x1108, 0x0009, 0x0005, 0x6880,
-+ 0xc0ad, 0x6882, 0x0005, 0x6043, 0x0000, 0x6017, 0x0000, 0x6003,
-+ 0x0001, 0x6007, 0x0050, 0x080c, 0x756e, 0x080c, 0x7aa4, 0x0005,
-+ 0x00c6, 0x6010, 0x2004, 0xd0bc, 0x0120, 0x6020, 0x9084, 0x000f,
-+ 0x0013, 0x00ce, 0x0005, 0xa6ce, 0xac34, 0xac34, 0xac37, 0xc172,
-+ 0xc18d, 0xc190, 0xa6ce, 0xa6ce, 0xa6ce, 0xa6ce, 0xa6ce, 0xa6ce,
-+ 0xa6ce, 0xa6ce, 0x080c, 0x0d7e, 0xa001, 0xa001, 0x0005, 0x0009,
-+ 0x0005, 0x6010, 0x2004, 0xd0bc, 0x0550, 0x00f6, 0x2c78, 0x080c,
-+ 0x8e83, 0x1128, 0x2001, 0x12c2, 0x2004, 0x7842, 0x00f8, 0x7810,
-+ 0x6012, 0x080c, 0xad70, 0x7820, 0x9086, 0x0003, 0x0128, 0x7808,
-+ 0x603a, 0x2f00, 0x603e, 0x0020, 0x7808, 0x603e, 0x2f00, 0x603a,
-+ 0x602e, 0x6023, 0x0001, 0x6007, 0x0035, 0x6003, 0x0001, 0x7954,
-+ 0x6156, 0x080c, 0x756e, 0x080c, 0x7aa4, 0x2f60, 0x00fe, 0x0005,
-+ 0x0016, 0x00f6, 0x6814, 0x2078, 0x787c, 0xd0e4, 0x0180, 0xc0e4,
-+ 0x787e, 0x7877, 0x0000, 0x7893, 0x0000, 0x788f, 0x0000, 0xd0cc,
-+ 0x0130, 0x7878, 0x00d6, 0x2068, 0x080c, 0x0edf, 0x00de, 0x6830,
-+ 0x6036, 0x908e, 0x0001, 0x0148, 0x6803, 0x0002, 0x9086, 0x0005,
-+ 0x0168, 0x9006, 0x602e, 0x6032, 0x00c8, 0x681c, 0xc085, 0x681e,
-+ 0x6803, 0x0004, 0x6824, 0xc0f4, 0xc0d5, 0x6826, 0x6814, 0x2078,
-+ 0x78ac, 0x6938, 0x9102, 0x78b0, 0x693c, 0x9103, 0x1e50, 0x683c,
-+ 0x602e, 0x6838, 0x9084, 0xfffc, 0x683a, 0x6032, 0x2d00, 0x603a,
-+ 0x6808, 0x603e, 0x6910, 0x6112, 0x6954, 0x6156, 0x6023, 0x0001,
-+ 0x6007, 0x0039, 0x6003, 0x0001, 0x080c, 0x756e, 0x080c, 0x7aa4,
-+ 0x00fe, 0x001e, 0x0005, 0x6024, 0xd0d4, 0x0510, 0xd0f4, 0x11f8,
-+ 0x6038, 0x940a, 0x603c, 0x9303, 0x0230, 0x9105, 0x0120, 0x6024,
-+ 0xc0d4, 0xc0f5, 0x0098, 0x643a, 0x633e, 0x6c3e, 0x6b42, 0x0046,
-+ 0x0036, 0x2400, 0x6cac, 0x9402, 0x6836, 0x2300, 0x6bb0, 0x9303,
-+ 0x683a, 0x003e, 0x004e, 0x6024, 0xc0d4, 0x0000, 0x6026, 0x0005,
-+ 0xd0f4, 0x1138, 0x683c, 0x603a, 0x6840, 0x603e, 0x6024, 0xc0f5,
-+ 0x6026, 0x0005, 0x0006, 0x0016, 0x6004, 0x908e, 0x0034, 0x01b8,
-+ 0x908e, 0x0035, 0x01a0, 0x908e, 0x0036, 0x0188, 0x908e, 0x0037,
-+ 0x0170, 0x908e, 0x0038, 0x0158, 0x908e, 0x0039, 0x0140, 0x908e,
-+ 0x003a, 0x0128, 0x908e, 0x003b, 0x0110, 0x9085, 0x0001, 0x001e,
-+ 0x000e, 0x0005, 0x0006, 0x0016, 0x0026, 0x0036, 0x00e6, 0x2001,
-+ 0x12bc, 0x200c, 0x8000, 0x2014, 0x2001, 0x0032, 0x080c, 0x73f0,
-+ 0x2001, 0x12c0, 0x82ff, 0x1110, 0x2011, 0x0014, 0x2202, 0x2001,
-+ 0x12be, 0x200c, 0x8000, 0x2014, 0x2071, 0x1297, 0x711a, 0x721e,
-+ 0x2001, 0x0064, 0x080c, 0x73f0, 0x2001, 0x12c1, 0x82ff, 0x1110,
-+ 0x2011, 0x0014, 0x2202, 0x2001, 0x12c2, 0x9288, 0x000a, 0x2102,
-+ 0x2001, 0x136b, 0x2102, 0x2001, 0x0032, 0x080c, 0x130c, 0x080c,
-+ 0x58af, 0x00ee, 0x003e, 0x002e, 0x001e, 0x000e, 0x0005, 0x0006,
-+ 0x0016, 0x00e6, 0x2001, 0x12c0, 0x2003, 0x0028, 0x2001, 0x12c1,
-+ 0x2003, 0x0014, 0x2071, 0x1297, 0x701b, 0x0000, 0x701f, 0x07d0,
-+ 0x2001, 0x12c2, 0x2009, 0x001e, 0x2102, 0x2001, 0x136b, 0x2102,
-+ 0x2001, 0x0032, 0x080c, 0x130c, 0x00ee, 0x001e, 0x000e, 0x0005,
-+ 0x00d6, 0x6058, 0x906d, 0x0110, 0x080c, 0x0ecf, 0x00de, 0x0005,
-+ 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x00c6, 0x080c, 0x8e83,
-+ 0x001e, 0x0178, 0x6112, 0x0ca1, 0x6023, 0x0001, 0x2d00, 0x6016,
-+ 0x2009, 0x0033, 0x080c, 0x8f53, 0x9085, 0x0001, 0x012e, 0x00ce,
-+ 0x0005, 0x9006, 0x0cd8, 0x00d6, 0x00e6, 0x00f6, 0x2071, 0x1100,
-+ 0x9186, 0x0015, 0x11f8, 0x7088, 0x9086, 0x0018, 0x11d8, 0x6014,
-+ 0x2068, 0x6a3c, 0xd2e4, 0x1160, 0x2c78, 0x080c, 0x7c86, 0x01d0,
-+ 0x7074, 0x6a50, 0x9206, 0x1158, 0x7078, 0x6a54, 0x9206, 0x1138,
-+ 0x6210, 0x9290, 0x0028, 0x2214, 0x900e, 0x080c, 0x28a5, 0x080c,
-+ 0x9275, 0x0020, 0x080c, 0x97dc, 0x080c, 0x8ed9, 0x00fe, 0x00ee,
-+ 0x00de, 0x0005, 0x7058, 0x6a54, 0x9206, 0x0d50, 0x0c80, 0x00c6,
-+ 0x0126, 0x2091, 0x8000, 0x00c6, 0x080c, 0x8e83, 0x001e, 0x0180,
-+ 0x6112, 0x080c, 0xad70, 0x6023, 0x0001, 0x2d00, 0x6016, 0x2009,
-+ 0x004d, 0x080c, 0x8f53, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005,
-+ 0x9006, 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000, 0x0016, 0x00c6,
-+ 0x080c, 0x8e83, 0x001e, 0x0178, 0x6112, 0x080c, 0xad70, 0x6023,
-+ 0x0001, 0x2d00, 0x6016, 0x001e, 0x080c, 0x8f53, 0x9085, 0x0001,
-+ 0x012e, 0x00ce, 0x0005, 0x001e, 0x9006, 0x0cd0, 0x0016, 0x0026,
-+ 0x0036, 0x0046, 0x0056, 0x0066, 0x00d6, 0x00e6, 0x00f6, 0x2071,
-+ 0x1100, 0x9186, 0x0015, 0x1538, 0x7188, 0x6014, 0x2068, 0x6814,
-+ 0x8003, 0x9106, 0x1500, 0x20e1, 0x0000, 0x2001, 0x12da, 0x2003,
-+ 0x0000, 0x6014, 0x20e9, 0x0001, 0x2068, 0x6830, 0x20a8, 0x9d80,
-+ 0x001b, 0x20a0, 0x2001, 0x12da, 0x0016, 0x200c, 0x080c, 0xb4ed,
-+ 0x001e, 0x6804, 0x9005, 0x0110, 0x2068, 0x0c78, 0x6014, 0x2070,
-+ 0x7067, 0x0103, 0x0010, 0x080c, 0x97dc, 0x080c, 0x8ed9, 0x00fe,
-+ 0x00ee, 0x00de, 0x006e, 0x005e, 0x004e, 0x003e, 0x002e, 0x001e,
-+ 0x0005, 0x00d6, 0x00e6, 0x00f6, 0x2071, 0x1100, 0x9186, 0x0015,
-+ 0x11c0, 0x7088, 0x9086, 0x0004, 0x11a0, 0x6014, 0x90e8, 0x001b,
-+ 0x2c78, 0x080c, 0x7c86, 0x01a8, 0x7074, 0x6a08, 0x9206, 0x1130,
-+ 0x7078, 0x6a0c, 0x9206, 0x1110, 0x080c, 0x2862, 0x080c, 0x9275,
-+ 0x0020, 0x080c, 0x97dc, 0x080c, 0x8ed9, 0x00fe, 0x00ee, 0x00de,
-+ 0x0005, 0x7058, 0x6a0c, 0x9206, 0x0d78, 0x0c80, 0x00d6, 0x00e6,
-+ 0x00f6, 0x2071, 0x1100, 0x9186, 0x0015, 0x11f0, 0x7088, 0x9086,
-+ 0x0004, 0x11d0, 0x6014, 0x90e8, 0x0031, 0x2c78, 0x080c, 0x7c86,
-+ 0x0558, 0x7074, 0x6a08, 0x9206, 0x1130, 0x7078, 0x6a0c, 0x9206,
-+ 0x1110, 0x080c, 0x2862, 0x6014, 0x2068, 0x687b, 0x0000, 0x6883,
-+ 0x0000, 0x6897, 0x4000, 0x0050, 0x6014, 0x2068, 0x687b, 0x0030,
-+ 0x6883, 0x0000, 0x6897, 0x4005, 0x689b, 0x0004, 0x0126, 0x2091,
-+ 0x8000, 0x6867, 0x0139, 0x080c, 0x5b76, 0x012e, 0x080c, 0x8ed9,
-+ 0x00fe, 0x00ee, 0x00de, 0x0005, 0x7058, 0x6a0c, 0x9206, 0x09c8,
-+ 0x08d0, 0x0016, 0x0026, 0x687c, 0xd0ac, 0x0178, 0x6938, 0x6a34,
-+ 0x2100, 0x9205, 0x0150, 0x6890, 0x9106, 0x1118, 0x688c, 0x9206,
-+ 0x0120, 0x6992, 0x6a8e, 0x9085, 0x0001, 0x002e, 0x001e, 0x0005,
-+ 0x00d6, 0x0036, 0x6314, 0x2368, 0x687a, 0x6982, 0x929e, 0x4000,
-+ 0x1558, 0x6310, 0x00c6, 0x2360, 0x900e, 0x6868, 0xd0f4, 0x1140,
-+ 0x080c, 0x57d6, 0x1108, 0xc185, 0x6000, 0xd0bc, 0x0108, 0xc18d,
-+ 0x6a96, 0x699a, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x20e9, 0x0001,
-+ 0x9d80, 0x0031, 0x20a0, 0x9c80, 0x0006, 0x2098, 0x080c, 0x504f,
-+ 0x20a9, 0x0004, 0x9d80, 0x0035, 0x20a0, 0x9c80, 0x000a, 0x2098,
-+ 0x080c, 0x504f, 0x00ce, 0x00a0, 0x6a96, 0x3918, 0x9398, 0x0006,
-+ 0x231c, 0x6004, 0x9086, 0x0016, 0x0110, 0x689b, 0x0004, 0x6ba2,
-+ 0x6310, 0x00c6, 0x2360, 0x6004, 0x00ce, 0x9084, 0x00ff, 0x689e,
-+ 0x080c, 0x5b76, 0x6017, 0x0000, 0x003e, 0x00de, 0x0005, 0x0026,
-+ 0x0036, 0x0046, 0x00e6, 0x00d6, 0x00f6, 0x6214, 0x2268, 0x6210,
-+ 0x2270, 0x2079, 0x0260, 0x9096, 0x0000, 0x11a0, 0x7014, 0x9084,
-+ 0x00ff, 0x900e, 0x080c, 0x1f63, 0x2118, 0x831f, 0x939c, 0xff00,
-+ 0x7838, 0x9084, 0x00ff, 0x931d, 0x7c3c, 0x2011, 0x8018, 0x080c,
-+ 0x3f23, 0x00a8, 0x9096, 0x0001, 0x1148, 0x8dff, 0x0180, 0x689b,
-+ 0x000d, 0x7838, 0x68a6, 0x783c, 0x68aa, 0x0048, 0x9096, 0x0002,
-+ 0x1130, 0x689b, 0x000d, 0x7838, 0x68a6, 0x783c, 0x68aa, 0x00fe,
-+ 0x00de, 0x00ee, 0x004e, 0x003e, 0x002e, 0x0005, 0x00c6, 0x0026,
-+ 0x0016, 0x9186, 0x0035, 0x0110, 0x6a38, 0x0008, 0x6a2c, 0x080c,
-+ 0xa932, 0x01f0, 0x2260, 0x6120, 0x9186, 0x0003, 0x0118, 0x9186,
-+ 0x0006, 0x1190, 0x6838, 0x9206, 0x0140, 0x683c, 0x9206, 0x1160,
-+ 0x6108, 0x6838, 0x9106, 0x1140, 0x0020, 0x6008, 0x693c, 0x9106,
-+ 0x1118, 0x6010, 0x6910, 0x9106, 0x001e, 0x002e, 0x00ce, 0x0005,
-+ 0x9085, 0x0001, 0x0cc8, 0x6974, 0xd1cc, 0x0188, 0x918c, 0x00ff,
-+ 0x918e, 0x0002, 0x1160, 0x69a8, 0x918c, 0x0f00, 0x810f, 0x918e,
-+ 0x0001, 0x1128, 0x6834, 0x6938, 0x9115, 0x190c, 0xa12c, 0x0005,
-+ 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0d7e, 0x0013, 0x006e,
-+ 0x0005, 0xafa9, 0xb5ee, 0xb74e, 0xafa9, 0xafa9, 0xafa9, 0xafa9,
-+ 0xafa9, 0xafe0, 0xb7d1, 0xafa9, 0xafa9, 0xafa9, 0xafa9, 0xafa9,
-+ 0xafa9, 0x080c, 0x0d7e, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c,
-+ 0x0d7e, 0x0013, 0x006e, 0x0005, 0xafc4, 0xbcae, 0xafc4, 0xafc4,
-+ 0xafc4, 0xafc4, 0xafc4, 0xafc4, 0xbc5d, 0xbd02, 0xafc4, 0xc2b5,
-+ 0xc2eb, 0xc2b5, 0xc2eb, 0xafc4, 0x080c, 0x0d7e, 0x6000, 0x9082,
-+ 0x0016, 0x1a0c, 0x0d7e, 0x6000, 0x000a, 0x0005, 0xafde, 0xb91e,
-+ 0xba17, 0xba39, 0xbaf9, 0xafde, 0xbbd0, 0xbb7b, 0xb7dd, 0xbc33,
-+ 0xbc48, 0xafde, 0xafde, 0xafde, 0xafde, 0xafde, 0x080c, 0x0d7e,
-+ 0x91b2, 0x0053, 0x1a0c, 0x0d7e, 0x2100, 0x91b2, 0x0040, 0x1a04,
-+ 0xb414, 0x0002, 0xb02a, 0xb214, 0xb02a, 0xb02a, 0xb02a, 0xb21d,
-+ 0xb02a, 0xb02a, 0xb02a, 0xb02a, 0xb02a, 0xb02a, 0xb02a, 0xb02a,
-+ 0xb02a, 0xb02a, 0xb02a, 0xb02a, 0xb02a, 0xb02a, 0xb02a, 0xb02a,
-+ 0xb02a, 0xb02c, 0xb087, 0xb096, 0xb0f8, 0xb122, 0xb1a0, 0xb1ff,
-+ 0xb02a, 0xb02a, 0xb220, 0xb02a, 0xb02a, 0xb235, 0xb242, 0xb02a,
-+ 0xb02a, 0xb02a, 0xb02a, 0xb02a, 0xb2c9, 0xb02a, 0xb02a, 0xb2d8,
-+ 0xb02a, 0xb02a, 0xb294, 0xb02a, 0xb02a, 0xb02a, 0xb2f0, 0xb02a,
-+ 0xb02a, 0xb02a, 0xb368, 0xb02a, 0xb02a, 0xb02a, 0xb02a, 0xb02a,
-+ 0xb02a, 0xb3dd, 0x080c, 0x0d7e, 0x080c, 0x588e, 0x1150, 0x2001,
-+ 0x1136, 0x2004, 0xd0cc, 0x1128, 0x9084, 0x0009, 0x9086, 0x0008,
-+ 0x1140, 0x6007, 0x0009, 0x602f, 0x0009, 0x6017, 0x0000, 0x0804,
-+ 0xb20d, 0x080c, 0x587e, 0x00e6, 0x00c6, 0x0036, 0x0026, 0x0016,
-+ 0x6210, 0x2270, 0x72a0, 0x0026, 0x2019, 0x0029, 0x080c, 0x76f0,
-+ 0x0076, 0x903e, 0x080c, 0x75ee, 0x2c08, 0x080c, 0xbec2, 0x007e,
-+ 0x001e, 0x2e60, 0x001e, 0x002e, 0x003e, 0x00ce, 0x00ee, 0x6610,
-+ 0x00c6, 0x2660, 0x080c, 0x5617, 0x00ce, 0x96b0, 0x0001, 0x2634,
-+ 0x9684, 0x00ff, 0x9082, 0x0006, 0x0278, 0x080c, 0xbe06, 0x1904,
-+ 0xb0f2, 0x080c, 0xbda3, 0x1120, 0x6007, 0x0008, 0x0804, 0xb20d,
-+ 0x6007, 0x0009, 0x0804, 0xb20d, 0x080c, 0xbfdb, 0x0128, 0x080c,
-+ 0xbe06, 0x0d78, 0x0804, 0xb0f2, 0x6017, 0x1900, 0x0c88, 0x080c,
-+ 0x297d, 0x1904, 0xb411, 0x6106, 0x080c, 0xbd61, 0x6007, 0x0006,
-+ 0x0804, 0xb20d, 0x6007, 0x0007, 0x0804, 0xb20d, 0x080c, 0xc327,
-+ 0x1904, 0xb411, 0x080c, 0x297d, 0x1904, 0xb411, 0x00d6, 0x6610,
-+ 0x2668, 0x6e04, 0x9684, 0x00ff, 0x9082, 0x0006, 0x1220, 0x2001,
-+ 0x0001, 0x080c, 0x5556, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006,
-+ 0x0188, 0x9686, 0x0004, 0x0170, 0x6e04, 0x96b4, 0x00ff, 0x9686,
-+ 0x0006, 0x0140, 0x9686, 0x0004, 0x0128, 0x9686, 0x0005, 0x0110,
-+ 0x00de, 0x0480, 0x00e6, 0x2071, 0x0260, 0x7034, 0x90b4, 0x0003,
-+ 0x1138, 0x90b2, 0x0014, 0x0220, 0x7030, 0x9084, 0x0003, 0x0130,
-+ 0x00ee, 0x6017, 0x0000, 0x602f, 0x0007, 0x00b8, 0x00ee, 0x080c,
-+ 0xbe64, 0x1198, 0x9686, 0x0006, 0x1148, 0x0026, 0x6210, 0x9290,
-+ 0x0028, 0x2214, 0x900e, 0x080c, 0x28a5, 0x002e, 0x080c, 0x56a8,
-+ 0x6007, 0x000a, 0x00de, 0x0804, 0xb20d, 0x6007, 0x000b, 0x00de,
-+ 0x0804, 0xb20d, 0x080c, 0x2862, 0x6007, 0x0001, 0x0804, 0xb20d,
-+ 0x080c, 0xc327, 0x1904, 0xb411, 0x080c, 0x297d, 0x1904, 0xb411,
-+ 0x2071, 0x0260, 0x7034, 0x90b4, 0x0003, 0x1950, 0x90b2, 0x0014,
-+ 0x0a38, 0x7030, 0x9084, 0x0003, 0x1918, 0x6610, 0x00d6, 0x2668,
-+ 0x6e04, 0x00de, 0x9686, 0x0707, 0x09e8, 0x0026, 0x6210, 0x9290,
-+ 0x0028, 0x2214, 0x900e, 0x080c, 0x28a5, 0x002e, 0x6007, 0x000c,
-+ 0x0804, 0xb20d, 0x080c, 0x588e, 0x1140, 0x2001, 0x1136, 0x2004,
-+ 0x9084, 0x0009, 0x9086, 0x0008, 0x1110, 0x0804, 0xb039, 0x080c,
-+ 0x587e, 0x6610, 0x96b0, 0x0001, 0x2634, 0x9684, 0x00ff, 0x9082,
-+ 0x0006, 0x06e8, 0x1138, 0x0026, 0x2001, 0x0006, 0x080c, 0x5592,
-+ 0x002e, 0x0050, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0004, 0x0120,
-+ 0x9686, 0x0006, 0x1904, 0xb0f2, 0x080c, 0xbe71, 0x1120, 0x6007,
-+ 0x000e, 0x0804, 0xb20d, 0x0046, 0x6410, 0x94a0, 0x0028, 0x2424,
-+ 0x94a4, 0x00ff, 0x8427, 0x0046, 0x080c, 0x2862, 0x004e, 0x0016,
-+ 0x9006, 0x2009, 0x1153, 0x210c, 0xd1a4, 0x0158, 0x2009, 0x0029,
-+ 0x080c, 0xc12f, 0x6010, 0x00d6, 0x2068, 0x6800, 0xc0e5, 0x6802,
-+ 0x00de, 0x001e, 0x004e, 0x6007, 0x0001, 0x0804, 0xb20d, 0x2001,
-+ 0x0001, 0x080c, 0x5556, 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9,
-+ 0x0004, 0x2019, 0x1105, 0x2011, 0x0270, 0x080c, 0x9d60, 0x003e,
-+ 0x002e, 0x001e, 0x015e, 0x9005, 0x0168, 0x96b4, 0xff00, 0x8637,
-+ 0x9682, 0x0004, 0x0a04, 0xb0f2, 0x9682, 0x0007, 0x0a04, 0xb14c,
-+ 0x0804, 0xb0f2, 0x6017, 0x1900, 0x6007, 0x0009, 0x0804, 0xb20d,
-+ 0x080c, 0x588e, 0x1140, 0x2001, 0x1136, 0x2004, 0x9084, 0x0009,
-+ 0x9086, 0x0008, 0x1110, 0x0804, 0xb039, 0x080c, 0x587e, 0x6610,
-+ 0x96b0, 0x0001, 0x2634, 0x9684, 0x00ff, 0x9082, 0x0006, 0x06b8,
-+ 0x96b4, 0xff00, 0x8637, 0x9686, 0x0004, 0x0120, 0x9686, 0x0006,
-+ 0x1904, 0xb0f2, 0x080c, 0xbe99, 0x1138, 0x080c, 0xbda3, 0x1120,
-+ 0x6007, 0x0010, 0x0804, 0xb20d, 0x0046, 0x6410, 0x94a0, 0x0028,
-+ 0x2424, 0x94a4, 0x00ff, 0x8427, 0x0046, 0x080c, 0x2862, 0x004e,
-+ 0x0016, 0x9006, 0x2009, 0x1153, 0x210c, 0xd1a4, 0x0158, 0x2009,
-+ 0x0029, 0x080c, 0xc12f, 0x6010, 0x00d6, 0x2068, 0x6800, 0xc0e5,
-+ 0x6802, 0x00de, 0x001e, 0x004e, 0x6007, 0x0001, 0x00f0, 0x080c,
-+ 0xbfdb, 0x0140, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x0950,
-+ 0x0804, 0xb0f2, 0x6017, 0x1900, 0x6007, 0x0009, 0x0070, 0x080c,
-+ 0x297d, 0x1904, 0xb411, 0x080c, 0xc327, 0x1904, 0xb411, 0x080c,
-+ 0xb588, 0x1904, 0xb0f2, 0x6007, 0x0012, 0x6003, 0x0001, 0x080c,
-+ 0x75be, 0x080c, 0x7aa4, 0x0005, 0x6007, 0x0001, 0x6003, 0x0001,
-+ 0x080c, 0x75be, 0x080c, 0x7aa4, 0x0cb0, 0x6007, 0x0005, 0x0c68,
-+ 0x080c, 0xc327, 0x1904, 0xb411, 0x080c, 0x297d, 0x1904, 0xb411,
-+ 0x080c, 0xb588, 0x1904, 0xb0f2, 0x6007, 0x0020, 0x6003, 0x0001,
-+ 0x080c, 0x75be, 0x080c, 0x7aa4, 0x0005, 0x080c, 0x297d, 0x1904,
-+ 0xb411, 0x6007, 0x0023, 0x6003, 0x0001, 0x080c, 0x75be, 0x080c,
-+ 0x7aa4, 0x0005, 0x080c, 0xc327, 0x1904, 0xb411, 0x080c, 0x297d,
-+ 0x1904, 0xb411, 0x080c, 0xb588, 0x1904, 0xb0f2, 0x0016, 0x0026,
-+ 0x00e6, 0x2071, 0x0260, 0x7244, 0x9286, 0xffff, 0x0180, 0x2c08,
-+ 0x080c, 0xa932, 0x01b0, 0x2260, 0x7240, 0x6008, 0x9206, 0x1188,
-+ 0x6010, 0x9190, 0x0004, 0x2214, 0x9206, 0x01b8, 0x0050, 0x7240,
-+ 0x2c08, 0x9006, 0x080c, 0xc101, 0x1180, 0x7244, 0x9286, 0xffff,
-+ 0x01b0, 0x2160, 0x6007, 0x0026, 0x6017, 0x1700, 0x7214, 0x9296,
-+ 0xffff, 0x1180, 0x6007, 0x0025, 0x0068, 0x6020, 0x9086, 0x0007,
-+ 0x1d80, 0x6004, 0x9086, 0x0024, 0x1110, 0x080c, 0x8ed9, 0x2160,
-+ 0x6007, 0x0025, 0x6003, 0x0001, 0x080c, 0x75be, 0x080c, 0x7aa4,
-+ 0x00ee, 0x002e, 0x001e, 0x0005, 0x2001, 0x0001, 0x080c, 0x5556,
-+ 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019, 0x1105,
-+ 0x2011, 0x0276, 0x080c, 0x9d60, 0x003e, 0x002e, 0x001e, 0x015e,
-+ 0x0120, 0x6007, 0x0031, 0x0804, 0xb20d, 0x080c, 0x9a13, 0x080c,
-+ 0x62e4, 0x11b0, 0x0006, 0x0026, 0x0036, 0x080c, 0x6300, 0x1158,
-+ 0x2001, 0x12a8, 0x2003, 0x0001, 0x2001, 0x1100, 0x2003, 0x0001,
-+ 0x080c, 0x621a, 0x0010, 0x080c, 0x62be, 0x003e, 0x002e, 0x000e,
-+ 0x0005, 0x080c, 0x297d, 0x1904, 0xb411, 0x6106, 0x080c, 0xb5a4,
-+ 0x6007, 0x002b, 0x0804, 0xb20d, 0x6007, 0x002c, 0x0804, 0xb20d,
-+ 0x080c, 0xc327, 0x1904, 0xb411, 0x080c, 0x297d, 0x1904, 0xb411,
-+ 0x080c, 0xb588, 0x1904, 0xb0f2, 0x6106, 0x080c, 0xb5a8, 0x1120,
-+ 0x6007, 0x002e, 0x0804, 0xb20d, 0x6007, 0x002f, 0x0804, 0xb20d,
-+ 0x080c, 0x297d, 0x1904, 0xb411, 0x00e6, 0x00d6, 0x00c6, 0x6010,
-+ 0x9080, 0x0001, 0x200c, 0x9184, 0x00ff, 0x9086, 0x0006, 0x0158,
-+ 0x9184, 0xff00, 0x8007, 0x9086, 0x0006, 0x0128, 0x00ce, 0x00de,
-+ 0x00ee, 0x0804, 0xb214, 0x2001, 0x1172, 0x2004, 0xd0e4, 0x0904,
-+ 0xb365, 0x2071, 0x026c, 0x7010, 0x603a, 0x7014, 0x603e, 0x7108,
-+ 0x720c, 0x080c, 0x58cb, 0x0140, 0x6010, 0x2068, 0x6810, 0x9106,
-+ 0x1118, 0x6814, 0x9206, 0x01f8, 0x080c, 0x58c6, 0x15a0, 0x2069,
-+ 0x1100, 0x6878, 0x9206, 0x1578, 0x6874, 0x9106, 0x1560, 0x7210,
-+ 0x080c, 0xa932, 0x0568, 0x080c, 0xc19f, 0x0550, 0x622e, 0x6007,
-+ 0x0036, 0x6003, 0x0001, 0x080c, 0x756e, 0x080c, 0x7aa4, 0x00ce,
-+ 0x00de, 0x00ee, 0x0005, 0x7214, 0x9286, 0xffff, 0x0150, 0x080c,
-+ 0xa932, 0x01b0, 0x9280, 0x0002, 0x2004, 0x7110, 0x9106, 0x1180,
-+ 0x08f8, 0x7210, 0x2c08, 0x9085, 0x0001, 0x080c, 0xc101, 0x2c10,
-+ 0x2160, 0x0130, 0x08a8, 0x6007, 0x0037, 0x6017, 0x1500, 0x08c8,
-+ 0x6007, 0x0037, 0x6017, 0x1700, 0x08a0, 0x6007, 0x0012, 0x0888,
-+ 0x080c, 0x297d, 0x1904, 0xb411, 0x6010, 0x9080, 0x0001, 0x2004,
-+ 0x9084, 0xff00, 0x8007, 0x9086, 0x0006, 0x1904, 0xb214, 0x00e6,
-+ 0x00d6, 0x00c6, 0x2001, 0x1172, 0x2004, 0xd0e4, 0x0904, 0xb3d5,
-+ 0x2069, 0x1100, 0x2071, 0x026c, 0x7008, 0x603a, 0x720c, 0x623e,
-+ 0x9286, 0xffff, 0x1150, 0x7208, 0x00c6, 0x2c08, 0x9085, 0x0001,
-+ 0x080c, 0xc101, 0x2c10, 0x00ce, 0x0598, 0x080c, 0xa932, 0x0580,
-+ 0x00c6, 0x0026, 0x2260, 0x080c, 0xa5e6, 0x002e, 0x00ce, 0x7118,
-+ 0x918c, 0xff00, 0x810f, 0x9186, 0x0001, 0x0158, 0x9186, 0x0005,
-+ 0x0118, 0x9186, 0x0007, 0x1178, 0x9280, 0x0005, 0x2004, 0x9005,
-+ 0x0150, 0x0056, 0x7510, 0x7614, 0x080c, 0xc1b8, 0x005e, 0x00ce,
-+ 0x00de, 0x00ee, 0x0005, 0x6007, 0x003b, 0x602f, 0x0009, 0x6017,
-+ 0x2a00, 0x6003, 0x0001, 0x080c, 0x756e, 0x080c, 0x7aa4, 0x0c78,
-+ 0x6007, 0x003b, 0x602f, 0x0009, 0x6017, 0x1700, 0x6003, 0x0001,
-+ 0x080c, 0x756e, 0x080c, 0x7aa4, 0x0c10, 0x6007, 0x003b, 0x602f,
-+ 0x000b, 0x6017, 0x0000, 0x0804, 0xb339, 0x00e6, 0x0026, 0x080c,
-+ 0x588e, 0x0548, 0x080c, 0x587e, 0x080c, 0xc392, 0x1510, 0x2071,
-+ 0x1100, 0x70d8, 0xc085, 0x70da, 0x00f6, 0x2079, 0x0100, 0x72a8,
-+ 0x9284, 0x00ff, 0x7076, 0x78e6, 0x9284, 0xff00, 0x7278, 0x9205,
-+ 0x707a, 0x78ea, 0x00fe, 0x70e3, 0x0000, 0x080c, 0x58cb, 0x0120,
-+ 0x2011, 0x131d, 0x2013, 0x07d0, 0xd0ac, 0x1128, 0x080c, 0x2679,
-+ 0x0010, 0x080c, 0xc3be, 0x002e, 0x00ee, 0x080c, 0x8ed9, 0x0804,
-+ 0xb213, 0x080c, 0x8ed9, 0x0005, 0x2600, 0x0002, 0xb428, 0xb428,
-+ 0xb428, 0xb428, 0xb428, 0xb42a, 0xb428, 0xb428, 0xb428, 0xb428,
-+ 0xb443, 0xb428, 0xb428, 0xb428, 0xb455, 0xb462, 0xb491, 0xb428,
-+ 0x080c, 0x0d7e, 0x080c, 0xc327, 0x1d20, 0x080c, 0x297d, 0x1d08,
-+ 0x080c, 0xb588, 0x1138, 0x6007, 0x0045, 0x6003, 0x0001, 0x080c,
-+ 0x75be, 0x0005, 0x080c, 0x2862, 0x6007, 0x0001, 0x6003, 0x0001,
-+ 0x080c, 0x75be, 0x0005, 0x080c, 0xc327, 0x1958, 0x080c, 0x297d,
-+ 0x1940, 0x080c, 0xb588, 0x1d70, 0x703c, 0x6016, 0x6007, 0x004a,
-+ 0x6003, 0x0001, 0x080c, 0x75be, 0x0005, 0x080c, 0xb496, 0x0904,
-+ 0xb411, 0x6007, 0x004e, 0x6003, 0x0001, 0x080c, 0x75be, 0x080c,
-+ 0x7aa4, 0x0005, 0x6007, 0x004f, 0x6017, 0x0000, 0x7134, 0x918c,
-+ 0x00ff, 0x81ff, 0x01f8, 0x9186, 0x0001, 0x1160, 0x7140, 0x2001,
-+ 0x12f4, 0x2004, 0x9106, 0x11a0, 0x7144, 0x2001, 0x12f5, 0x2004,
-+ 0x9106, 0x0180, 0x9186, 0x0002, 0x1158, 0x2011, 0x0276, 0x20a9,
-+ 0x0004, 0x6010, 0x6010, 0x9098, 0x000a, 0x080c, 0x9d60, 0x0110,
-+ 0x6017, 0x0001, 0x6003, 0x0001, 0x080c, 0x75be, 0x080c, 0x7aa4,
-+ 0x0005, 0x6007, 0x0050, 0x703c, 0x6016, 0x0ca0, 0x0016, 0x00d6,
-+ 0x00e6, 0x01c6, 0x01d6, 0x0126, 0x2091, 0x8000, 0x2071, 0x1100,
-+ 0x7088, 0x908a, 0x00f9, 0x16c8, 0x20e1, 0x0000, 0x20e9, 0x0001,
-+ 0x2001, 0x12da, 0x2003, 0x0000, 0x080c, 0x0e9d, 0x0570, 0x2d00,
-+ 0x6016, 0x7088, 0x8004, 0x6816, 0x908a, 0x001e, 0x02b8, 0x6833,
-+ 0x001e, 0x20a9, 0x001e, 0x9d80, 0x001b, 0x20a0, 0x2001, 0x12da,
-+ 0x0016, 0x200c, 0x0451, 0x001e, 0x2d70, 0x080c, 0x0e9d, 0x01a8,
-+ 0x2d00, 0x7006, 0x2100, 0x81ff, 0x0168, 0x0c30, 0x6832, 0x20a8,
-+ 0x9d80, 0x001b, 0x20a0, 0x2001, 0x12da, 0x0016, 0x200c, 0x00a9,
-+ 0x001e, 0x0000, 0x9085, 0x0001, 0x0048, 0x2071, 0x1100, 0x708b,
-+ 0x0000, 0x6014, 0x2068, 0x080c, 0x0edf, 0x9006, 0x012e, 0x01de,
-+ 0x01ce, 0x00ee, 0x00de, 0x001e, 0x0005, 0x0006, 0x0016, 0x0026,
-+ 0x0036, 0x00c6, 0x918c, 0xffff, 0x11a8, 0x080c, 0x1b40, 0x2099,
-+ 0x026c, 0x2001, 0x0014, 0x3518, 0x9312, 0x1218, 0x23a8, 0x4003,
-+ 0x00f8, 0x20a8, 0x4003, 0x22a8, 0x8108, 0x080c, 0x1b40, 0x2099,
-+ 0x0260, 0x0ca8, 0x080c, 0x1b40, 0x2061, 0x12da, 0x6004, 0x2098,
-+ 0x6008, 0x3518, 0x9312, 0x1218, 0x23a8, 0x4003, 0x0048, 0x20a8,
-+ 0x4003, 0x22a8, 0x8108, 0x080c, 0x1b40, 0x2099, 0x0260, 0x0ca8,
-+ 0x2061, 0x12da, 0x2019, 0x0280, 0x3300, 0x931e, 0x0110, 0x6006,
-+ 0x0020, 0x2001, 0x0260, 0x6006, 0x8108, 0x2162, 0x9292, 0x0021,
-+ 0x9296, 0xffff, 0x620a, 0x00ce, 0x003e, 0x002e, 0x001e, 0x000e,
-+ 0x0005, 0x0006, 0x0016, 0x0026, 0x0036, 0x00c6, 0x81ff, 0x11b8,
-+ 0x080c, 0x1b58, 0x20a1, 0x024c, 0x2001, 0x0014, 0x3518, 0x9312,
-+ 0x1218, 0x23a8, 0x4003, 0x0418, 0x20a8, 0x4003, 0x82ff, 0x01f8,
-+ 0x22a8, 0x8108, 0x080c, 0x1b58, 0x20a1, 0x0240, 0x0c98, 0x080c,
-+ 0x1b58, 0x2061, 0x12dd, 0x6004, 0x20a0, 0x6008, 0x3518, 0x9312,
-+ 0x1218, 0x23a8, 0x4003, 0x0058, 0x20a8, 0x4003, 0x82ff, 0x0138,
-+ 0x22a8, 0x8108, 0x080c, 0x1b58, 0x20a1, 0x0240, 0x0c98, 0x2061,
-+ 0x12dd, 0x2019, 0x0260, 0x3400, 0x931e, 0x0110, 0x6006, 0x0020,
-+ 0x2001, 0x0240, 0x6006, 0x8108, 0x2162, 0x9292, 0x0021, 0x9296,
-+ 0xffff, 0x620a, 0x00ce, 0x003e, 0x002e, 0x001e, 0x000e, 0x0005,
-+ 0x00d6, 0x0066, 0x6610, 0x2668, 0x6e04, 0x96b4, 0xff00, 0x8637,
-+ 0x9686, 0x0006, 0x0170, 0x9686, 0x0004, 0x0158, 0x6e04, 0x96b4,
-+ 0x00ff, 0x9686, 0x0006, 0x0128, 0x9686, 0x0004, 0x0110, 0x9085,
-+ 0x0001, 0x006e, 0x00de, 0x0005, 0x00d6, 0x0441, 0x00de, 0x0005,
-+ 0x00d6, 0x0489, 0x11e8, 0x680c, 0x908c, 0xff00, 0x6820, 0x9084,
-+ 0x00ff, 0x9115, 0x6216, 0x6824, 0x602e, 0xd1e4, 0x0118, 0x2009,
-+ 0x0001, 0x0058, 0xd1ec, 0x0160, 0x6920, 0x918c, 0x00ff, 0x6824,
-+ 0x080c, 0x1f63, 0x1128, 0x2110, 0x900e, 0x080c, 0x28a5, 0x0018,
-+ 0x9085, 0x0001, 0x0008, 0x9006, 0x00de, 0x0005, 0x2069, 0x026d,
-+ 0x6800, 0x9082, 0x0010, 0x1228, 0x6017, 0x0000, 0x9085, 0x0001,
-+ 0x0008, 0x9006, 0x0005, 0x6017, 0x0000, 0x2069, 0x026c, 0x6808,
-+ 0x9084, 0xff00, 0x9086, 0x0800, 0x1140, 0x6800, 0x9084, 0x00ff,
-+ 0x908e, 0x0014, 0x0110, 0x908e, 0x0010, 0x0005, 0x6004, 0x90b2,
-+ 0x0053, 0x1a0c, 0x0d7e, 0x91b6, 0x0013, 0x1130, 0x2008, 0x91b2,
-+ 0x0040, 0x1a04, 0xb720, 0x0092, 0x91b6, 0x0027, 0x0120, 0x91b6,
-+ 0x0014, 0x190c, 0x0d7e, 0x2001, 0x0007, 0x080c, 0x5592, 0x080c,
-+ 0x79ab, 0x080c, 0x8f09, 0x080c, 0x7aa4, 0x0005, 0xb64e, 0xb650,
-+ 0xb64e, 0xb64e, 0xb64e, 0xb650, 0xb661, 0xb719, 0xb6b8, 0xb719,
-+ 0xb6cc, 0xb719, 0xb661, 0xb719, 0xb711, 0xb719, 0xb711, 0xb719,
-+ 0xb719, 0xb64e, 0xb64e, 0xb64e, 0xb64e, 0xb64e, 0xb64e, 0xb64e,
-+ 0xb64e, 0xb64e, 0xb64e, 0xb64e, 0xb650, 0xb64e, 0xb719, 0xb64e,
-+ 0xb64e, 0xb719, 0xb64e, 0xb716, 0xb719, 0xb64e, 0xb64e, 0xb64e,
-+ 0xb64e, 0xb719, 0xb719, 0xb64e, 0xb719, 0xb719, 0xb64e, 0xb65c,
-+ 0xb64e, 0xb64e, 0xb64e, 0xb64e, 0xb715, 0xb719, 0xb64e, 0xb64e,
-+ 0xb719, 0xb719, 0xb64e, 0xb64e, 0xb64e, 0xb64e, 0x080c, 0x0d7e,
-+ 0x080c, 0x79ab, 0x2001, 0x12c0, 0x2004, 0x601a, 0x6003, 0x0002,
-+ 0x080c, 0x7aa4, 0x0804, 0xb71f, 0x9006, 0x080c, 0x5556, 0x0804,
-+ 0xb719, 0x080c, 0x58c6, 0x1904, 0xb719, 0x9006, 0x080c, 0x5556,
-+ 0x6010, 0x9080, 0x0004, 0x2004, 0x9086, 0x00ff, 0x1140, 0x00f6,
-+ 0x2079, 0x1100, 0x78a0, 0x8000, 0x78a2, 0x00fe, 0x0438, 0x6010,
-+ 0x00c6, 0x2060, 0x6000, 0xd0f4, 0x1178, 0x6010, 0x9005, 0x0160,
-+ 0x0036, 0x0046, 0x63a0, 0x2021, 0x0007, 0x080c, 0x4026, 0x004e,
-+ 0x003e, 0x00ce, 0x0804, 0xb719, 0x00ce, 0x080c, 0x2982, 0x1904,
-+ 0xb719, 0x2001, 0x1100, 0x2004, 0x9086, 0x0002, 0x1138, 0x00f6,
-+ 0x2079, 0x1100, 0x78a0, 0x8000, 0x78a2, 0x00fe, 0x2001, 0x0002,
-+ 0x080c, 0x5568, 0x080c, 0x79ab, 0x6023, 0x0001, 0x6003, 0x0001,
-+ 0x6007, 0x0002, 0x080c, 0x75be, 0x080c, 0x7aa4, 0x6110, 0x00c6,
-+ 0x2160, 0x2009, 0x0001, 0x080c, 0x7206, 0x00ce, 0x0804, 0xb71f,
-+ 0x6610, 0x00d6, 0x2668, 0x6e04, 0x00de, 0x96b4, 0xff00, 0x8637,
-+ 0x9686, 0x0006, 0x0904, 0xb719, 0x9686, 0x0004, 0x0904, 0xb719,
-+ 0x2001, 0x0004, 0x0804, 0xb717, 0x2001, 0x1100, 0x2004, 0x9086,
-+ 0x0003, 0x1160, 0x0036, 0x0046, 0x6010, 0x9080, 0x0028, 0x201c,
-+ 0x2021, 0x0006, 0x080c, 0x4026, 0x004e, 0x003e, 0x2001, 0x0006,
-+ 0x080c, 0xb73d, 0x6610, 0x00d6, 0x2668, 0x6e04, 0x00de, 0x0066,
-+ 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x006e, 0x0120, 0x2001,
-+ 0x0006, 0x080c, 0x5592, 0x080c, 0x58c6, 0x1518, 0x2001, 0x1136,
-+ 0x2004, 0xd0a4, 0x01f0, 0x00d6, 0x6610, 0x2668, 0x6e04, 0x00de,
-+ 0x96b4, 0x00ff, 0x9686, 0x0006, 0x01a0, 0x00f6, 0x2079, 0x1100,
-+ 0x78a0, 0x8000, 0x78a2, 0x00fe, 0x0804, 0xb69e, 0x2001, 0x0004,
-+ 0x0030, 0x2001, 0x0006, 0x0449, 0x0020, 0x0018, 0x0010, 0x080c,
-+ 0x5592, 0x080c, 0x79ab, 0x080c, 0x8ed9, 0x080c, 0x7aa4, 0x0005,
-+ 0x2600, 0x0002, 0xb734, 0xb734, 0xb734, 0xb734, 0xb734, 0xb736,
-+ 0xb734, 0xb734, 0xb734, 0xb734, 0xb736, 0xb734, 0xb734, 0xb734,
-+ 0xb736, 0xb736, 0xb736, 0xb736, 0x080c, 0x0d7e, 0x080c, 0x79ab,
-+ 0x080c, 0x8ed9, 0x080c, 0x7aa4, 0x0005, 0x0016, 0x00d6, 0x6110,
-+ 0x2168, 0x6900, 0xd184, 0x0138, 0x080c, 0x5568, 0x9006, 0x080c,
-+ 0x5556, 0x080c, 0x2886, 0x00de, 0x001e, 0x0005, 0x6610, 0x00d6,
-+ 0x2668, 0x6804, 0x9084, 0xff00, 0x8007, 0x00de, 0x90b2, 0x000c,
-+ 0x1a0c, 0x0d7e, 0x91b6, 0x0015, 0x1110, 0x003b, 0x0028, 0x91b6,
-+ 0x0016, 0x190c, 0x0d7e, 0x006b, 0x0005, 0x98b0, 0x98b0, 0x98b0,
-+ 0x98b0, 0x98b0, 0x98b0, 0xb7bb, 0xb77d, 0x98b0, 0x98b0, 0x98b0,
-+ 0x98b0, 0x98b0, 0x98b0, 0x98b0, 0x98b0, 0x98b0, 0x98b0, 0xb7bb,
-+ 0xb7c2, 0x98b0, 0x98b0, 0x98b0, 0x98b0, 0x00f6, 0x080c, 0x58c6,
-+ 0x11d8, 0x6010, 0x907d, 0x01c0, 0x7800, 0xd0f4, 0x1118, 0x7810,
-+ 0x9005, 0x1190, 0x9006, 0x080c, 0x5556, 0x2001, 0x0002, 0x080c,
-+ 0x5568, 0x6023, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c,
-+ 0x75be, 0x080c, 0x7aa4, 0x00e8, 0x2011, 0x0263, 0x2204, 0x8211,
-+ 0x220c, 0x080c, 0x1f63, 0x11a8, 0x00c6, 0x080c, 0x5608, 0x0120,
-+ 0x00ce, 0x080c, 0x8ed9, 0x0068, 0x6010, 0x0006, 0x6014, 0x0006,
-+ 0x080c, 0x5100, 0x000e, 0x6016, 0x000e, 0x6012, 0x00ce, 0x080c,
-+ 0x8ed9, 0x00fe, 0x0005, 0x6604, 0x96b6, 0x001e, 0x1110, 0x080c,
-+ 0x8ed9, 0x0005, 0x080c, 0x9bf7, 0x1148, 0x6003, 0x0001, 0x6007,
-+ 0x0001, 0x080c, 0x75be, 0x080c, 0x7aa4, 0x0010, 0x080c, 0x8ed9,
-+ 0x0005, 0x6004, 0x908a, 0x0053, 0x1a0c, 0x0d7e, 0x080c, 0x79ab,
-+ 0x080c, 0x8f09, 0x080c, 0x7aa4, 0x0005, 0x9182, 0x0040, 0x0002,
-+ 0xb7f3, 0xb7f3, 0xb7f3, 0xb7f3, 0xb7f5, 0xb7f3, 0xb7f3, 0xb7f3,
-+ 0xb7f3, 0xb7f3, 0xb7f3, 0xb7f3, 0xb7f3, 0xb7f3, 0xb7f3, 0xb7f3,
-+ 0xb7f3, 0xb7f3, 0xb7f3, 0x080c, 0x0d7e, 0x00d6, 0x00e6, 0x00f6,
-+ 0x0046, 0x0026, 0x6210, 0x9280, 0x002b, 0x2004, 0x9005, 0x1190,
-+ 0x6106, 0x2071, 0x0260, 0x7444, 0x94a4, 0xff00, 0x0904, 0xb858,
-+ 0x9486, 0x2000, 0x1158, 0x2009, 0x0001, 0x2011, 0x0200, 0x080c,
-+ 0x73af, 0x0020, 0x9026, 0x080c, 0xc363, 0x0c50, 0x080c, 0x0eb6,
-+ 0x090c, 0x0d7e, 0x6003, 0x0007, 0x2d00, 0x6867, 0x010d, 0x9006,
-+ 0x6802, 0x686a, 0x6c8a, 0x2c00, 0x688e, 0x6008, 0x68e2, 0x6010,
-+ 0x2078, 0x78a0, 0x8007, 0x7130, 0x697a, 0x0016, 0x9084, 0xff00,
-+ 0x6876, 0x687f, 0x0000, 0x6883, 0x0000, 0x6887, 0x0036, 0x080c,
-+ 0x5b76, 0x001e, 0x9486, 0x2000, 0x1130, 0x2019, 0x0017, 0x080c,
-+ 0xc0b9, 0x0804, 0xb8b2, 0x9486, 0x0400, 0x1130, 0x2019, 0x0002,
-+ 0x080c, 0xc072, 0x0804, 0xb8b2, 0x9486, 0x0200, 0x1110, 0x080c,
-+ 0xc05a, 0x9486, 0x1000, 0x1110, 0x080c, 0xc0a1, 0x0804, 0xb8b2,
-+ 0x2069, 0x1354, 0x6a00, 0xd284, 0x0904, 0xb91a, 0x9284, 0x0300,
-+ 0x1904, 0xb913, 0x6804, 0x9005, 0x0904, 0xb8fb, 0x2d78, 0x6003,
-+ 0x0007, 0x080c, 0x0e9d, 0x0904, 0xb8bc, 0x7800, 0xd08c, 0x1118,
-+ 0x7804, 0x8001, 0x7806, 0x6017, 0x0000, 0x9006, 0x6802, 0x6867,
-+ 0x0116, 0x686a, 0x6008, 0x68e2, 0x2c00, 0x687a, 0x6010, 0x2078,
-+ 0x78a0, 0x8007, 0x7130, 0x69b6, 0x6876, 0x7928, 0x69ba, 0x792c,
-+ 0x69be, 0x7930, 0x69c2, 0x7934, 0x69c6, 0x6883, 0x003d, 0x7044,
-+ 0x9084, 0x0003, 0x9080, 0xb8b8, 0x2005, 0x687e, 0x20a9, 0x000a,
-+ 0x2001, 0x0270, 0x9d90, 0x0021, 0x2009, 0x0205, 0x200b, 0x0080,
-+ 0x20e1, 0x0000, 0x20e9, 0x0001, 0x2098, 0x22a0, 0x4003, 0x200b,
-+ 0x0000, 0x2001, 0x027a, 0x200c, 0x69b2, 0x8000, 0x200c, 0x69ae,
-+ 0x080c, 0x5b76, 0x002e, 0x004e, 0x00fe, 0x00ee, 0x00de, 0x0005,
-+ 0x0000, 0x0080, 0x0040, 0x0000, 0x2001, 0x110f, 0x2004, 0xd084,
-+ 0x0120, 0x080c, 0x0eb6, 0x1904, 0xb86d, 0x6017, 0x0100, 0x6003,
-+ 0x0001, 0x6007, 0x0041, 0x080c, 0x756e, 0x080c, 0x7aa4, 0x0c10,
-+ 0x2069, 0x0260, 0x6848, 0x9084, 0xff00, 0x9086, 0x1200, 0x1198,
-+ 0x686c, 0x9084, 0x00ff, 0x0016, 0x6114, 0x918c, 0x0700, 0x910d,
-+ 0x6116, 0x001e, 0x6003, 0x0001, 0x6007, 0x0043, 0x080c, 0x756e,
-+ 0x080c, 0x7aa4, 0x0838, 0x6868, 0x602e, 0x686c, 0x6032, 0x6017,
-+ 0x0200, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x756e, 0x080c,
-+ 0x7aa4, 0x0804, 0xb8b2, 0x2001, 0x110d, 0x2004, 0xd0ec, 0x0120,
-+ 0x2011, 0x8049, 0x080c, 0x3f23, 0x6017, 0x0300, 0x0010, 0x6017,
-+ 0x0100, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x756e, 0x080c,
-+ 0x7aa4, 0x0804, 0xb8b2, 0x6017, 0x0500, 0x0c98, 0x6017, 0x0600,
-+ 0x0804, 0xb8d0, 0x6017, 0x0200, 0x0804, 0xb8d0, 0x9186, 0x0013,
-+ 0x1160, 0x6004, 0x908a, 0x0054, 0x1a0c, 0x0d7e, 0x9082, 0x0040,
-+ 0x0a0c, 0x0d7e, 0x2008, 0x0804, 0xb9ca, 0x9186, 0x0051, 0x0140,
-+ 0x9186, 0x0047, 0x11e8, 0x6004, 0x9086, 0x0041, 0x0904, 0xb97e,
-+ 0x2001, 0x0109, 0x2004, 0xd084, 0x0904, 0xb97e, 0x0126, 0x2091,
-+ 0x2800, 0x0006, 0x0016, 0x0026, 0x080c, 0x745c, 0x002e, 0x001e,
-+ 0x000e, 0x012e, 0x6000, 0x9086, 0x0002, 0x1580, 0x0804, 0xba17,
-+ 0x9186, 0x0027, 0x0530, 0x9186, 0x0048, 0x0128, 0x9186, 0x0014,
-+ 0x0500, 0x190c, 0x0d7e, 0x2001, 0x0109, 0x2004, 0xd084, 0x01f0,
-+ 0x00c6, 0x0126, 0x2091, 0x2800, 0x00c6, 0x2061, 0x0100, 0x0006,
-+ 0x0016, 0x0026, 0x080c, 0x745c, 0x002e, 0x001e, 0x000e, 0x00ce,
-+ 0x012e, 0x00ce, 0x6000, 0x9086, 0x0004, 0x190c, 0x0d7e, 0x0804,
-+ 0xbaf9, 0x6004, 0x9082, 0x0040, 0x2008, 0x001a, 0x080c, 0x8f6e,
-+ 0x0005, 0xb994, 0xb996, 0xb996, 0xb9ba, 0xb994, 0xb994, 0xb994,
-+ 0xb994, 0xb994, 0xb994, 0xb994, 0xb994, 0xb994, 0xb994, 0xb994,
-+ 0xb994, 0xb994, 0xb994, 0xb994, 0x080c, 0x0d7e, 0x080c, 0x79ab,
-+ 0x080c, 0x7aa4, 0x0036, 0x00d6, 0x6014, 0x906d, 0x01c0, 0x9d84,
-+ 0xf000, 0x01a8, 0x6003, 0x0002, 0x6010, 0x2004, 0xd0bc, 0x1178,
-+ 0x2019, 0x0004, 0x080c, 0xc0e9, 0x6017, 0x0000, 0x6018, 0x9005,
-+ 0x1120, 0x2001, 0x12c1, 0x2004, 0x601a, 0x6003, 0x0007, 0x00de,
-+ 0x003e, 0x0005, 0x00d6, 0x080c, 0x79ab, 0x080c, 0x7aa4, 0x080c,
-+ 0xa942, 0x0120, 0x6014, 0x2068, 0x080c, 0x0ecf, 0x080c, 0x8f09,
-+ 0x00de, 0x0005, 0x0002, 0xb9de, 0xb9fb, 0xb9e7, 0xba11, 0xb9de,
-+ 0xb9de, 0xb9de, 0xb9de, 0xb9de, 0xb9de, 0xb9de, 0xb9de, 0xb9de,
-+ 0xb9de, 0xb9de, 0xb9de, 0xb9de, 0xb9de, 0xb9de, 0x080c, 0x0d7e,
-+ 0x6014, 0x9088, 0x001f, 0x2104, 0x9085, 0x0400, 0x200a, 0x080c,
-+ 0x79ab, 0x6014, 0x9080, 0x001f, 0x2004, 0xd0b4, 0x0138, 0x6003,
-+ 0x0007, 0x2009, 0x0043, 0x080c, 0x8f53, 0x0010, 0x6003, 0x0004,
-+ 0x080c, 0x7aa4, 0x0005, 0x080c, 0x79ab, 0x6114, 0x9184, 0xf000,
-+ 0x0128, 0x9180, 0x001f, 0x200c, 0xd1ec, 0x1138, 0x080c, 0x7384,
-+ 0x080c, 0x8ed9, 0x080c, 0x7aa4, 0x0005, 0x080c, 0xc32e, 0x0db0,
-+ 0x0cc8, 0x080c, 0x79ab, 0x2009, 0x0041, 0x0804, 0xbb7b, 0x9182,
-+ 0x0040, 0x0002, 0xba2d, 0xba2f, 0xba2d, 0xba2d, 0xba2d, 0xba2d,
-+ 0xba2d, 0xba2d, 0xba2d, 0xba2d, 0xba2d, 0xba2d, 0xba2d, 0xba2d,
-+ 0xba2d, 0xba2d, 0xba2d, 0xba30, 0xba2d, 0x080c, 0x0d7e, 0x0005,
-+ 0x00d6, 0x080c, 0x7384, 0x00de, 0x080c, 0xc381, 0x080c, 0x8ed9,
-+ 0x0005, 0x9182, 0x0040, 0x0002, 0xba4f, 0xba4f, 0xba4f, 0xba4f,
-+ 0xba4f, 0xba4f, 0xba4f, 0xba51, 0xba4f, 0xba54, 0xbac4, 0xba4f,
-+ 0xba4f, 0xba4f, 0xba4f, 0xbac4, 0xba4f, 0xba4f, 0xba4f, 0x080c,
-+ 0x0d7e, 0x080c, 0x8f6e, 0x0005, 0x2001, 0x0105, 0x2004, 0x9084,
-+ 0x1800, 0x01c8, 0x2001, 0x0132, 0x200c, 0x2001, 0x0131, 0x2004,
-+ 0x9105, 0x1904, 0xbac4, 0x2009, 0x110c, 0x2104, 0xd0d4, 0x0904,
-+ 0xbac4, 0xc0d4, 0x200a, 0x2009, 0x0105, 0x2104, 0x9084, 0xe7fd,
-+ 0x9085, 0x0010, 0x200a, 0x2001, 0x1172, 0x2004, 0xd0e4, 0x1528,
-+ 0x603b, 0x0000, 0x080c, 0x7a55, 0x6014, 0x00d6, 0x2068, 0x687c,
-+ 0xd0fc, 0x0188, 0x908c, 0x0003, 0x918e, 0x0002, 0x0508, 0x2001,
-+ 0x110c, 0x2004, 0xd0d4, 0x11e0, 0x080c, 0x7b69, 0x2009, 0x0041,
-+ 0x00de, 0x0804, 0xbb7b, 0x080c, 0x7b69, 0x6003, 0x0007, 0x601b,
-+ 0x0000, 0x080c, 0x7384, 0x00de, 0x0005, 0x2001, 0x0100, 0x2004,
-+ 0x9082, 0x0005, 0x0aa8, 0x2001, 0x011f, 0x2004, 0x603a, 0x0890,
-+ 0x2001, 0x110c, 0x200c, 0xc1d4, 0x2102, 0xd1cc, 0x0110, 0x080c,
-+ 0x2369, 0x080c, 0x7b69, 0x6014, 0x9080, 0x001f, 0x200c, 0xd1ec,
-+ 0x1130, 0x080c, 0x7384, 0x080c, 0x8ed9, 0x00de, 0x0005, 0x080c,
-+ 0xc32e, 0x0db8, 0x00de, 0x0005, 0x2001, 0x110c, 0x200c, 0xc1d4,
-+ 0x2102, 0x0036, 0x080c, 0x7a55, 0x080c, 0x7b69, 0x6014, 0x00d6,
-+ 0x2068, 0x6010, 0x2004, 0xd0bc, 0x0188, 0x687c, 0x9084, 0x0003,
-+ 0x9086, 0x0002, 0x0140, 0x68ac, 0x6330, 0x931a, 0x6332, 0x68b0,
-+ 0x632c, 0x931b, 0x632e, 0x6003, 0x0002, 0x0080, 0x2019, 0x0004,
-+ 0x080c, 0xc0e9, 0x6018, 0x9005, 0x1128, 0x2001, 0x12c1, 0x2004,
-+ 0x8003, 0x601a, 0x6017, 0x0000, 0x6003, 0x0007, 0x00de, 0x003e,
-+ 0x0005, 0x9182, 0x0040, 0x0002, 0xbb10, 0xbb10, 0xbb10, 0xbb10,
-+ 0xbb10, 0xbb10, 0xbb10, 0xbb10, 0xbb12, 0xbb10, 0xbb10, 0xbb10,
-+ 0xbb10, 0xbb10, 0xbb10, 0xbb10, 0xbb10, 0xbb10, 0xbb10, 0xbb57,
-+ 0x080c, 0x0d7e, 0x6014, 0x00d6, 0x2068, 0x6834, 0x6a38, 0x6110,
-+ 0x210c, 0xd1bc, 0x1190, 0x920d, 0x1518, 0x687c, 0xd0fc, 0x0128,
-+ 0x2009, 0x0041, 0x00de, 0x0804, 0xbb7b, 0x6003, 0x0007, 0x601b,
-+ 0x0000, 0x080c, 0x7384, 0x00de, 0x0005, 0x6124, 0xd1f4, 0x1d58,
-+ 0x0006, 0x0046, 0x6cac, 0x9422, 0x69b0, 0x2200, 0x910b, 0x6030,
-+ 0x9420, 0x6432, 0x602c, 0x9109, 0x612e, 0x004e, 0x000e, 0x08d8,
-+ 0x6110, 0x210c, 0xd1bc, 0x1178, 0x2009, 0x110d, 0x210c, 0xd19c,
-+ 0x0118, 0x6003, 0x0007, 0x0010, 0x6003, 0x0006, 0x00e9, 0x080c,
-+ 0x7386, 0x00de, 0x0005, 0x6003, 0x0002, 0x00de, 0x0005, 0x6024,
-+ 0xd0f4, 0x0128, 0x080c, 0x1303, 0x1904, 0xbb12, 0x0005, 0x6014,
-+ 0x00d6, 0x2068, 0x6834, 0x6938, 0x00de, 0x9105, 0x1120, 0x080c,
-+ 0x1303, 0x1904, 0xbb12, 0x0005, 0xd2fc, 0x0140, 0x8002, 0x8000,
-+ 0x8212, 0x9291, 0x0000, 0x2009, 0x0009, 0x0010, 0x2009, 0x0015,
-+ 0x6a9a, 0x6896, 0x0005, 0x9182, 0x0040, 0x0208, 0x0062, 0x9186,
-+ 0x0013, 0x0120, 0x9186, 0x0014, 0x190c, 0x0d7e, 0x6024, 0xd0dc,
-+ 0x090c, 0x0d7e, 0x0005, 0xbb9e, 0xbba5, 0xbbb1, 0xbbbd, 0xbb9e,
-+ 0xbb9e, 0xbb9e, 0xbbcc, 0xbb9e, 0xbba0, 0xbba0, 0xbb9e, 0xbb9e,
-+ 0xbb9e, 0xbb9e, 0xbba0, 0xbb9e, 0xbba0, 0xbb9e, 0x080c, 0x0d7e,
-+ 0x6024, 0xd0dc, 0x090c, 0x0d7e, 0x0005, 0x6003, 0x0001, 0x6106,
-+ 0x080c, 0x756e, 0x0126, 0x2091, 0x8000, 0x080c, 0x7aa4, 0x012e,
-+ 0x0005, 0x6003, 0x0001, 0x6106, 0x080c, 0x756e, 0x0126, 0x2091,
-+ 0x8000, 0x080c, 0x7aa4, 0x012e, 0x0005, 0x6003, 0x0003, 0x6106,
-+ 0x2c10, 0x080c, 0x1605, 0x0126, 0x2091, 0x8000, 0x080c, 0x75db,
-+ 0x080c, 0x7b72, 0x012e, 0x0005, 0x9016, 0x080c, 0x137c, 0x0005,
-+ 0x0126, 0x2091, 0x8000, 0x0036, 0x00d6, 0x9182, 0x0040, 0x0023,
-+ 0x00de, 0x003e, 0x012e, 0x0005, 0xbbec, 0xbbee, 0xbc00, 0xbc1a,
-+ 0xbbec, 0xbbec, 0xbbec, 0xbc2f, 0xbbec, 0xbbec, 0xbbec, 0xbbec,
-+ 0xbbec, 0xbbec, 0xbbec, 0xbbec, 0x080c, 0x0d7e, 0x6014, 0x2068,
-+ 0x687c, 0xd0fc, 0x01f8, 0x909c, 0x0003, 0x939e, 0x0003, 0x01d0,
-+ 0x6003, 0x0001, 0x6106, 0x080c, 0x756e, 0x080c, 0x7aa4, 0x0490,
-+ 0x6014, 0x2068, 0x687c, 0xd0fc, 0x0168, 0x909c, 0x0003, 0x939e,
-+ 0x0003, 0x0140, 0x6003, 0x0001, 0x6106, 0x080c, 0x756e, 0x080c,
-+ 0x7aa4, 0x0400, 0x901e, 0x6316, 0x631a, 0x2019, 0x0004, 0x080c,
-+ 0xc0e9, 0x00c0, 0x6014, 0x2068, 0x687c, 0xd0fc, 0x0d98, 0x909c,
-+ 0x0003, 0x939e, 0x0003, 0x0d70, 0x6003, 0x0003, 0x6106, 0x2c10,
-+ 0x080c, 0x1605, 0x080c, 0x75db, 0x080c, 0x7b72, 0x0018, 0x9016,
-+ 0x080c, 0x137c, 0x0005, 0x080c, 0x79ab, 0x6114, 0x81ff, 0x0158,
-+ 0x00d6, 0x2168, 0x080c, 0xc3c7, 0x0036, 0x2019, 0x0029, 0x080c,
-+ 0xc0e9, 0x003e, 0x00de, 0x080c, 0x8f09, 0x080c, 0x7aa4, 0x0005,
-+ 0x080c, 0x7a55, 0x6114, 0x81ff, 0x0158, 0x00d6, 0x2168, 0x080c,
-+ 0xc3c7, 0x0036, 0x2019, 0x0029, 0x080c, 0xc0e9, 0x003e, 0x00de,
-+ 0x080c, 0x8f09, 0x080c, 0x7b72, 0x0005, 0x9182, 0x0085, 0x0002,
-+ 0xbc6f, 0xbc6d, 0xbc6d, 0xbc7b, 0xbc6d, 0xbc6d, 0xbc6d, 0xbc6d,
-+ 0xbc6d, 0xbc6d, 0xbc6d, 0xbc6d, 0xbc6d, 0x080c, 0x0d7e, 0x6003,
-+ 0x000b, 0x6106, 0x080c, 0x756e, 0x0126, 0x2091, 0x8000, 0x080c,
-+ 0x7aa4, 0x012e, 0x0005, 0x0026, 0x00e6, 0x080c, 0xc327, 0x0118,
-+ 0x080c, 0x8ed9, 0x0440, 0x2071, 0x0260, 0x7224, 0x6216, 0x2001,
-+ 0x110d, 0x2004, 0xd0e4, 0x0150, 0x6010, 0x9080, 0x0028, 0x2024,
-+ 0x8427, 0x2c00, 0x2011, 0x014e, 0x080c, 0x91b2, 0x7220, 0x080c,
-+ 0xbf8f, 0x0118, 0x6007, 0x0086, 0x0040, 0x6007, 0x0087, 0x7224,
-+ 0x9296, 0xffff, 0x1110, 0x6007, 0x0086, 0x6003, 0x0001, 0x080c,
-+ 0x756e, 0x080c, 0x7aa4, 0x00ee, 0x002e, 0x0005, 0x9186, 0x0013,
-+ 0x1160, 0x6004, 0x908a, 0x0085, 0x0a0c, 0x0d7e, 0x908a, 0x0092,
-+ 0x1a0c, 0x0d7e, 0x9082, 0x0085, 0x00a2, 0x9186, 0x0027, 0x0130,
-+ 0x9186, 0x0014, 0x0118, 0x080c, 0x8f6e, 0x0050, 0x2001, 0x0007,
-+ 0x080c, 0x5592, 0x080c, 0x79ab, 0x080c, 0x8f09, 0x080c, 0x7aa4,
-+ 0x0005, 0xbcde, 0xbce0, 0xbce0, 0xbcde, 0xbcde, 0xbcde, 0xbcde,
-+ 0xbcde, 0xbcde, 0xbcde, 0xbcde, 0xbcde, 0xbcde, 0x080c, 0x0d7e,
-+ 0x080c, 0x79ab, 0x080c, 0x8f09, 0x080c, 0x7aa4, 0x0005, 0x9182,
-+ 0x0085, 0x0a0c, 0x0d7e, 0x9182, 0x0092, 0x1a0c, 0x0d7e, 0x9182,
-+ 0x0085, 0x0002, 0xbcff, 0xbcff, 0xbcff, 0xbd01, 0xbcff, 0xbcff,
-+ 0xbcff, 0xbcff, 0xbcff, 0xbcff, 0xbcff, 0xbcff, 0xbcff, 0x080c,
-+ 0x0d7e, 0x0005, 0x9186, 0x0013, 0x0148, 0x9186, 0x0014, 0x0130,
-+ 0x9186, 0x0027, 0x0118, 0x080c, 0x8f6e, 0x0030, 0x080c, 0x79ab,
-+ 0x080c, 0x8f09, 0x080c, 0x7aa4, 0x0005, 0x0036, 0x080c, 0xc381,
-+ 0x6043, 0x0000, 0x2019, 0x000b, 0x0031, 0x6023, 0x0006, 0x6003,
-+ 0x0007, 0x003e, 0x0005, 0x0126, 0x0036, 0x2091, 0x8000, 0x0086,
-+ 0x2c40, 0x0096, 0x904e, 0x080c, 0x8968, 0x009e, 0x008e, 0x1570,
-+ 0x0076, 0x2c38, 0x080c, 0x8a0a, 0x007e, 0x1540, 0x6000, 0x9086,
-+ 0x0000, 0x0520, 0x6020, 0x9086, 0x0007, 0x0500, 0x00d6, 0x601c,
-+ 0xd084, 0x0150, 0x080c, 0xc381, 0x2001, 0x12c0, 0x2004, 0x601a,
-+ 0x080c, 0x1509, 0x6023, 0x0007, 0x6014, 0x2068, 0x080c, 0xa942,
-+ 0x0110, 0x080c, 0xc0e9, 0x00de, 0x6017, 0x0000, 0x080c, 0xc381,
-+ 0x6023, 0x0007, 0x2001, 0x12c0, 0x2004, 0x601a, 0x003e, 0x012e,
-+ 0x0005, 0x00f6, 0x00c6, 0x0036, 0x0156, 0x2079, 0x0260, 0x7938,
-+ 0x783c, 0x080c, 0x1f63, 0x1590, 0x0016, 0x00c6, 0x080c, 0x5608,
-+ 0x1558, 0x001e, 0x002e, 0x0026, 0x0016, 0x2019, 0x0029, 0x080c,
-+ 0x8ac9, 0x080c, 0x76f0, 0x0076, 0x903e, 0x080c, 0x75ee, 0x007e,
-+ 0x001e, 0x0076, 0x903e, 0x080c, 0xbec2, 0x007e, 0x0026, 0x6204,
-+ 0x9294, 0xff00, 0x8217, 0x9286, 0x0006, 0x0118, 0x9286, 0x0004,
-+ 0x1118, 0x62a0, 0x080c, 0x2915, 0x002e, 0x001e, 0x080c, 0x5100,
-+ 0x6612, 0x6516, 0x9006, 0x0010, 0x00ce, 0x001e, 0x015e, 0x003e,
-+ 0x00ce, 0x00fe, 0x0005, 0x00c6, 0x00d6, 0x00e6, 0x0016, 0x2009,
-+ 0x1122, 0x2104, 0x9086, 0x0074, 0x1904, 0xbdfb, 0x2069, 0x0260,
-+ 0x6944, 0x9182, 0x0100, 0x06d8, 0x6940, 0x9184, 0x8000, 0x0904,
-+ 0xbdf8, 0x2001, 0x12a7, 0x2004, 0x9005, 0x1160, 0x6010, 0x2070,
-+ 0x7010, 0x9084, 0x00ff, 0x0118, 0x7000, 0xd0f4, 0x0118, 0x9184,
-+ 0x0800, 0x0570, 0x6948, 0x918a, 0x0001, 0x0620, 0x694c, 0x2009,
-+ 0x0205, 0x200b, 0x0001, 0x693c, 0x81ff, 0x1198, 0x6944, 0x9182,
-+ 0x0100, 0x02a8, 0x6940, 0x81ff, 0x1178, 0x6948, 0x918a, 0x0001,
-+ 0x0288, 0x6950, 0x918a, 0x0001, 0x0298, 0x00d0, 0x6017, 0x0100,
-+ 0x00a0, 0x6017, 0x0300, 0x0088, 0x6017, 0x0500, 0x0070, 0x6017,
-+ 0x0700, 0x0058, 0x6017, 0x0900, 0x0040, 0x6017, 0x0b00, 0x0028,
-+ 0x6017, 0x0f00, 0x0010, 0x6017, 0x2d00, 0x9085, 0x0001, 0x0008,
-+ 0x9006, 0x001e, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x00c6, 0x00d6,
-+ 0x0026, 0x0036, 0x0156, 0x6210, 0x2268, 0x6b04, 0x9394, 0x00ff,
-+ 0x9286, 0x0006, 0x0190, 0x9286, 0x0004, 0x0178, 0x9394, 0xff00,
-+ 0x8217, 0x9286, 0x0006, 0x0148, 0x9286, 0x0004, 0x0130, 0x00c6,
-+ 0x2d60, 0x080c, 0x5617, 0x00ce, 0x04c0, 0x2011, 0x0276, 0x20a9,
-+ 0x0004, 0x9d98, 0x000a, 0x080c, 0x9d60, 0x1580, 0x2011, 0x027a,
-+ 0x20a9, 0x0004, 0x9d98, 0x0006, 0x080c, 0x9d60, 0x1538, 0x0046,
-+ 0x0016, 0x6aa0, 0x9294, 0x00ff, 0x8227, 0x9006, 0x2009, 0x1153,
-+ 0x210c, 0xd1a4, 0x0138, 0x2009, 0x0029, 0x080c, 0xc12f, 0x6800,
-+ 0xc0e5, 0x6802, 0x2019, 0x0029, 0x080c, 0x76f0, 0x0076, 0x2039,
-+ 0x0000, 0x080c, 0x75ee, 0x2c08, 0x080c, 0xbec2, 0x007e, 0x2001,
-+ 0x0007, 0x080c, 0x5592, 0x001e, 0x004e, 0x9006, 0x015e, 0x003e,
-+ 0x002e, 0x00de, 0x00ce, 0x0005, 0x00d6, 0x2069, 0x026e, 0x6800,
-+ 0x9086, 0x0800, 0x0118, 0x6017, 0x0000, 0x0008, 0x9006, 0x00de,
-+ 0x0005, 0x00c6, 0x00f6, 0x0016, 0x0026, 0x0036, 0x0156, 0x2079,
-+ 0x026c, 0x7930, 0x7834, 0x080c, 0x1f63, 0x11a0, 0x080c, 0x5608,
-+ 0x1188, 0x2011, 0x0270, 0x20a9, 0x0004, 0x9c98, 0x000a, 0x080c,
-+ 0x9d60, 0x1140, 0x2011, 0x0274, 0x20a9, 0x0004, 0x9c98, 0x0006,
-+ 0x080c, 0x9d60, 0x015e, 0x003e, 0x002e, 0x001e, 0x00fe, 0x00ce,
-+ 0x0005, 0x00c6, 0x0006, 0x0016, 0x0026, 0x0036, 0x0156, 0x2011,
-+ 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x1f63, 0x11a0, 0x080c,
-+ 0x5608, 0x1188, 0x2011, 0x0276, 0x20a9, 0x0004, 0x9c98, 0x000a,
-+ 0x080c, 0x9d60, 0x1140, 0x2011, 0x027a, 0x20a9, 0x0004, 0x9c98,
-+ 0x0006, 0x080c, 0x9d60, 0x015e, 0x003e, 0x002e, 0x001e, 0x000e,
-+ 0x00ce, 0x0005, 0x00e6, 0x00c6, 0x0086, 0x0076, 0x0066, 0x0056,
-+ 0x0046, 0x0026, 0x0126, 0x2091, 0x8000, 0x2740, 0x2029, 0x130d,
-+ 0x252c, 0x2021, 0x1313, 0x2424, 0x2061, 0x15c0, 0x2071, 0x1100,
-+ 0x764c, 0x706c, 0x81ff, 0x0150, 0x0006, 0x9186, 0x1389, 0x000e,
-+ 0x0128, 0x8001, 0x9602, 0x1a04, 0xbf4b, 0x0018, 0x9606, 0x0904,
-+ 0xbf4b, 0x2100, 0x9c06, 0x0904, 0xbf42, 0x080c, 0xc15b, 0x0904,
-+ 0xbf42, 0x6720, 0x9786, 0x0001, 0x1148, 0x080c, 0x2982, 0x0904,
-+ 0xbf66, 0x6004, 0x9086, 0x0000, 0x1904, 0xbf66, 0x9786, 0x0004,
-+ 0x0904, 0xbf66, 0x9786, 0x0007, 0x05e8, 0x2500, 0x9c06, 0x05d0,
-+ 0x2400, 0x9c06, 0x05b8, 0x080c, 0xc16b, 0x15a0, 0x88ff, 0x0118,
-+ 0x6054, 0x9906, 0x1578, 0x00d6, 0x6000, 0x9086, 0x0004, 0x1120,
-+ 0x0016, 0x080c, 0x1509, 0x001e, 0x9786, 0x0008, 0x1148, 0x080c,
-+ 0xab2e, 0x1130, 0x080c, 0x97dc, 0x00de, 0x080c, 0x8f09, 0x00d0,
-+ 0x6014, 0x2068, 0x080c, 0xa942, 0x0190, 0x9786, 0x0003, 0x1528,
-+ 0x6867, 0x0103, 0x6b7a, 0x6877, 0x0000, 0x080c, 0xc3c7, 0x0016,
-+ 0x080c, 0xac01, 0x080c, 0x5b76, 0x001e, 0x080c, 0xab11, 0x00de,
-+ 0x080c, 0x8f09, 0x9ce0, 0x0018, 0x2001, 0x1118, 0x2004, 0x9c02,
-+ 0x1210, 0x0804, 0xbed6, 0x012e, 0x002e, 0x004e, 0x005e, 0x006e,
-+ 0x007e, 0x008e, 0x00ce, 0x00ee, 0x0005, 0x9786, 0x0006, 0x1150,
-+ 0x9386, 0x0005, 0x0128, 0x080c, 0xc3c7, 0x080c, 0xc0e9, 0x08f8,
-+ 0x00de, 0x0c00, 0x9786, 0x000a, 0x0968, 0x0850, 0x080c, 0xc16b,
-+ 0x19c8, 0x81ff, 0x09b8, 0x9180, 0x0001, 0x2004, 0x9086, 0x0018,
-+ 0x0130, 0x9180, 0x0001, 0x2004, 0x9086, 0x002d, 0x1958, 0x6000,
-+ 0x9086, 0x0002, 0x1938, 0x080c, 0xab1d, 0x0130, 0x080c, 0xab2e,
-+ 0x1908, 0x080c, 0x97dc, 0x0038, 0x080c, 0x2886, 0x080c, 0xab2e,
-+ 0x1110, 0x080c, 0x97dc, 0x080c, 0x8f09, 0x0804, 0xbf42, 0x00c6,
-+ 0x00e6, 0x0016, 0x2c08, 0x2170, 0x9006, 0x080c, 0xc101, 0x001e,
-+ 0x0120, 0x6020, 0x9084, 0x000f, 0x001b, 0x00ee, 0x00ce, 0x0005,
-+ 0xbfae, 0xbfae, 0xbfae, 0xbfae, 0xbfae, 0xbfae, 0xbfb0, 0xbfae,
-+ 0xbfae, 0xbfae, 0xbfae, 0x8f09, 0x8f09, 0xbfae, 0x9006, 0x0005,
-+ 0x0046, 0x0016, 0x7010, 0x9080, 0x0028, 0x2024, 0x94a4, 0x00ff,
-+ 0x8427, 0x2c00, 0x2009, 0x0020, 0x080c, 0xc12f, 0x001e, 0x004e,
-+ 0x0036, 0x2019, 0x0002, 0x080c, 0xbd23, 0x003e, 0x9085, 0x0001,
-+ 0x0005, 0x00d6, 0x6014, 0x906d, 0x9084, 0xf000, 0x0130, 0x080c,
-+ 0xa5f3, 0x687b, 0x0005, 0x080c, 0x5b76, 0x00de, 0x080c, 0x8f09,
-+ 0x9085, 0x0001, 0x0005, 0x2001, 0x0001, 0x080c, 0x5556, 0x0156,
-+ 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019, 0x1105, 0x2011,
-+ 0x0276, 0x080c, 0x9d60, 0x003e, 0x002e, 0x001e, 0x015e, 0x9005,
-+ 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0086, 0x0076, 0x0066, 0x0026,
-+ 0x0126, 0x2091, 0x8000, 0x2740, 0x2061, 0x15c0, 0x2079, 0x0001,
-+ 0x8fff, 0x0904, 0xc04d, 0x2071, 0x1100, 0x764c, 0x706c, 0x8001,
-+ 0x9602, 0x1a04, 0xc04d, 0x88ff, 0x0120, 0x2800, 0x9c06, 0x15a0,
-+ 0x2078, 0x080c, 0xc15b, 0x0580, 0x2400, 0x9c06, 0x0568, 0x6720,
-+ 0x9786, 0x0006, 0x1548, 0x9786, 0x0007, 0x0530, 0x88ff, 0x1140,
-+ 0x6010, 0x9206, 0x1508, 0x85ff, 0x0118, 0x6054, 0x9106, 0x11e0,
-+ 0x00d6, 0x601c, 0xd084, 0x0150, 0x080c, 0xc381, 0x2001, 0x12c0,
-+ 0x2004, 0x601a, 0x080c, 0x1509, 0x6023, 0x0007, 0x6014, 0x2068,
-+ 0x080c, 0xa942, 0x0120, 0x0046, 0x080c, 0xc0e9, 0x004e, 0x00de,
-+ 0x080c, 0x8f09, 0x88ff, 0x1198, 0x9ce0, 0x0018, 0x2001, 0x1118,
-+ 0x2004, 0x9c02, 0x1210, 0x0804, 0xc000, 0x9006, 0x012e, 0x002e,
-+ 0x006e, 0x007e, 0x008e, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x98c5,
-+ 0x0001, 0x0ca0, 0x0076, 0x0056, 0x0086, 0x9046, 0x2029, 0x0001,
-+ 0x2c20, 0x2019, 0x0002, 0x6210, 0x0096, 0x904e, 0x080c, 0x8968,
-+ 0x009e, 0x008e, 0x903e, 0x080c, 0x8a0a, 0x080c, 0xbff1, 0x005e,
-+ 0x007e, 0x0005, 0x0026, 0x0046, 0x0056, 0x0076, 0x00c6, 0x0156,
-+ 0x2c20, 0x2128, 0x20a9, 0x007f, 0x900e, 0x0016, 0x0036, 0x080c,
-+ 0x5608, 0x1198, 0x2c10, 0x0056, 0x0086, 0x9046, 0x2508, 0x2029,
-+ 0x0001, 0x0096, 0x904e, 0x080c, 0x8968, 0x009e, 0x008e, 0x903e,
-+ 0x080c, 0x8a0a, 0x080c, 0xbff1, 0x005e, 0x003e, 0x001e, 0x8108,
-+ 0x1f04, 0xc07d, 0x015e, 0x00ce, 0x007e, 0x005e, 0x004e, 0x002e,
-+ 0x0005, 0x0076, 0x0056, 0x6210, 0x0086, 0x9046, 0x2029, 0x0001,
-+ 0x2019, 0x0048, 0x0096, 0x904e, 0x080c, 0x8968, 0x009e, 0x008e,
-+ 0x903e, 0x080c, 0x8a0a, 0x2c20, 0x080c, 0xbff1, 0x005e, 0x007e,
-+ 0x0005, 0x0026, 0x0046, 0x0056, 0x0076, 0x00c6, 0x0156, 0x2c20,
-+ 0x20a9, 0x007f, 0x900e, 0x0016, 0x0036, 0x080c, 0x5608, 0x11a8,
-+ 0x2c10, 0x0086, 0x9046, 0x2828, 0x0046, 0x2021, 0x0001, 0x080c,
-+ 0xc363, 0x004e, 0x0096, 0x904e, 0x080c, 0x8968, 0x009e, 0x008e,
-+ 0x903e, 0x080c, 0x8a0a, 0x080c, 0xbff1, 0x003e, 0x001e, 0x8108,
-+ 0x1f04, 0xc0c3, 0x015e, 0x00ce, 0x007e, 0x005e, 0x004e, 0x002e,
-+ 0x0005, 0x0016, 0x00f6, 0x9d82, 0x45c0, 0x0280, 0x9d82, 0xffff,
-+ 0x1268, 0x6800, 0x907d, 0x0138, 0x6803, 0x0000, 0x6b82, 0x080c,
-+ 0x5b76, 0x2f68, 0x0cb0, 0x6b82, 0x080c, 0x5b76, 0x00fe, 0x001e,
-+ 0x0005, 0x00e6, 0x0046, 0x0036, 0x2061, 0x15c0, 0x9005, 0x1138,
-+ 0x2071, 0x1100, 0x744c, 0x706c, 0x8001, 0x9402, 0x12d8, 0x2100,
-+ 0x9c06, 0x0168, 0x6000, 0x9086, 0x0000, 0x0148, 0x6008, 0x9206,
-+ 0x1130, 0x6010, 0x91a0, 0x0004, 0x2424, 0x9406, 0x0140, 0x9ce0,
-+ 0x0018, 0x2001, 0x1118, 0x2004, 0x9c02, 0x1220, 0x0c40, 0x9085,
-+ 0x0001, 0x0008, 0x9006, 0x003e, 0x004e, 0x00ee, 0x0005, 0x00d6,
-+ 0x0006, 0x080c, 0x0eb6, 0x000e, 0x090c, 0x0d7e, 0x6867, 0x010d,
-+ 0x688e, 0x0026, 0x2010, 0x080c, 0xa932, 0x2001, 0x0000, 0x0120,
-+ 0x2200, 0x9080, 0x0015, 0x2004, 0x002e, 0x687a, 0x6986, 0x6c76,
-+ 0x687f, 0x0000, 0x2001, 0x12c8, 0x2004, 0x6882, 0x9006, 0x68e2,
-+ 0x6802, 0x686a, 0x688a, 0x0126, 0x2091, 0x8000, 0x080c, 0x5b76,
-+ 0x012e, 0x00de, 0x0005, 0x6700, 0x9786, 0x0000, 0x0158, 0x9786,
-+ 0x0001, 0x0140, 0x9786, 0x000a, 0x0128, 0x9786, 0x0009, 0x0110,
-+ 0x9085, 0x0001, 0x0005, 0x00e6, 0x6010, 0x2070, 0x70a0, 0x9206,
-+ 0x00ee, 0x0005, 0x0016, 0x6004, 0x908e, 0x001e, 0x11a0, 0x8007,
-+ 0x6134, 0x918c, 0x00ff, 0x9105, 0x6036, 0x6007, 0x0085, 0x6003,
-+ 0x000b, 0x6023, 0x0005, 0x2001, 0x12c1, 0x2004, 0x601a, 0x080c,
-+ 0x756e, 0x080c, 0x7aa4, 0x001e, 0x0005, 0xa001, 0xa001, 0x0005,
-+ 0x6024, 0xd0e4, 0x0158, 0xd0cc, 0x0118, 0x080c, 0xac39, 0x0030,
-+ 0x080c, 0xc381, 0x080c, 0x7384, 0x080c, 0x8ed9, 0x0005, 0x9280,
-+ 0x0008, 0x2004, 0x9084, 0x000f, 0x0002, 0xc1b3, 0xc1b3, 0xc1b3,
-+ 0xc1b5, 0xc1b3, 0xc1b5, 0xc1b5, 0xc1b3, 0xc1b5, 0xc1b3, 0xc1b3,
-+ 0xc1b3, 0xc1b3, 0xc1b3, 0x9006, 0x0005, 0x9085, 0x0001, 0x0005,
-+ 0x9280, 0x0008, 0x2004, 0x9084, 0x000f, 0x0002, 0xc1cc, 0xc1cc,
-+ 0xc1cc, 0xc1cc, 0xc1cc, 0xc1cc, 0xc1d9, 0xc1cc, 0xc1cc, 0xc1cc,
-+ 0xc1cc, 0xc1cc, 0xc1cc, 0xc1cc, 0x6007, 0x003b, 0x602f, 0x0009,
-+ 0x6017, 0x2a00, 0x6003, 0x0001, 0x080c, 0x756e, 0x080c, 0x7aa4,
-+ 0x0005, 0x00c6, 0x2260, 0x080c, 0xc381, 0x6043, 0x0000, 0x6024,
-+ 0xc0f4, 0xc0e4, 0x6026, 0x603b, 0x0000, 0x00ce, 0x00d6, 0x2268,
-+ 0x9186, 0x0007, 0x1904, 0xc234, 0x6814, 0x9005, 0x0138, 0x9080,
-+ 0x001f, 0x2004, 0xd0fc, 0x1110, 0x00de, 0x08b0, 0x6007, 0x003a,
-+ 0x6003, 0x0001, 0x080c, 0x756e, 0x080c, 0x7aa4, 0x00c6, 0x2d60,
-+ 0x6100, 0x9186, 0x0002, 0x1904, 0xc2b2, 0x6014, 0x9005, 0x1138,
-+ 0x6000, 0x9086, 0x0007, 0x190c, 0x0d7e, 0x0804, 0xc2b2, 0x908c,
-+ 0xf000, 0x1130, 0x0028, 0x2068, 0x6800, 0x9005, 0x1de0, 0x2d00,
-+ 0x9080, 0x001f, 0x2004, 0x9084, 0x0003, 0x9086, 0x0002, 0x1180,
-+ 0x6014, 0x2068, 0x687c, 0xc0dc, 0xc0f4, 0x687e, 0x6880, 0xc0f4,
-+ 0xc0fc, 0x6882, 0x2009, 0x0043, 0x080c, 0xbb7b, 0x0804, 0xc2b2,
-+ 0x2009, 0x0041, 0x0804, 0xc2ac, 0x9186, 0x0005, 0x15b8, 0x6814,
-+ 0x9080, 0x001f, 0x2004, 0xd0bc, 0x1118, 0x00de, 0x0804, 0xc1cc,
-+ 0xd0b4, 0x0128, 0xd0fc, 0x090c, 0x0d7e, 0x0804, 0xc1ec, 0x6007,
-+ 0x003a, 0x6003, 0x0001, 0x080c, 0x756e, 0x080c, 0x7aa4, 0x00c6,
-+ 0x2d60, 0x6100, 0x9186, 0x0002, 0x0120, 0x9186, 0x0004, 0x1904,
-+ 0xc2b2, 0x6814, 0x9080, 0x001f, 0x200c, 0xc1f4, 0xc1dc, 0x2102,
-+ 0x8000, 0x200c, 0xc1f4, 0xc1fc, 0xc1bc, 0x2102, 0x00f6, 0x2c78,
-+ 0x080c, 0x137e, 0x00fe, 0x2009, 0x0042, 0x04f0, 0x0036, 0x00d6,
-+ 0x00d6, 0x080c, 0x0eb6, 0x003e, 0x090c, 0x0d7e, 0x6867, 0x010d,
-+ 0x9006, 0x6802, 0x686a, 0x688a, 0x6b8e, 0x6887, 0x0045, 0x2c00,
-+ 0x6892, 0x6038, 0x68a2, 0x2360, 0x6024, 0xc0dd, 0x6026, 0x6010,
-+ 0x9080, 0x0028, 0x2004, 0x9084, 0x00ff, 0x8007, 0x6354, 0x6b7a,
-+ 0x6876, 0x9006, 0x687e, 0x6882, 0x6d9a, 0x6e96, 0x689f, 0x0001,
-+ 0x080c, 0x5b76, 0x2019, 0x0045, 0x6008, 0x2068, 0x080c, 0xbd23,
-+ 0x2d00, 0x600a, 0x6023, 0x0006, 0x6003, 0x0007, 0x901e, 0x631a,
-+ 0x6342, 0x00de, 0x003e, 0x0038, 0x6043, 0x0000, 0x6003, 0x0007,
-+ 0x080c, 0xbb7b, 0x00ce, 0x00de, 0x0005, 0x9186, 0x0013, 0x1128,
-+ 0x6004, 0x9082, 0x0085, 0x2008, 0x00c2, 0x9186, 0x0027, 0x1178,
-+ 0x080c, 0x79ab, 0x0036, 0x00d6, 0x6014, 0x2068, 0x2019, 0x0004,
-+ 0x080c, 0xc0e9, 0x00de, 0x003e, 0x080c, 0x7aa4, 0x0005, 0x9186,
-+ 0x0014, 0x0d70, 0x080c, 0x8f6e, 0x0005, 0xc2e4, 0xc2e2, 0xc2e2,
-+ 0xc2e2, 0xc2e2, 0xc2e2, 0xc2e4, 0xc2e2, 0xc2e2, 0xc2e2, 0xc2e2,
-+ 0xc2e2, 0xc2e2, 0x080c, 0x0d7e, 0x080c, 0x79ab, 0x6003, 0x000c,
-+ 0x080c, 0x7aa4, 0x0005, 0x9182, 0x0092, 0x1220, 0x9182, 0x0085,
-+ 0x0208, 0x001a, 0x080c, 0x8f6e, 0x0005, 0xc302, 0xc302, 0xc302,
-+ 0xc302, 0xc304, 0xc324, 0xc302, 0xc302, 0xc302, 0xc302, 0xc302,
-+ 0xc302, 0xc302, 0x080c, 0x0d7e, 0x00d6, 0x2c68, 0x080c, 0x8e83,
-+ 0x01b0, 0x6003, 0x0001, 0x6007, 0x001e, 0x2009, 0x026e, 0x210c,
-+ 0x613a, 0x2009, 0x026f, 0x210c, 0x613e, 0x600b, 0xffff, 0x6910,
-+ 0x6112, 0x6023, 0x0004, 0x080c, 0x756e, 0x080c, 0x7aa4, 0x2d60,
-+ 0x080c, 0x8ed9, 0x00de, 0x0005, 0x080c, 0x8ed9, 0x0005, 0x00e6,
-+ 0x6010, 0x2070, 0x7000, 0xd0ec, 0x00ee, 0x0005, 0x2009, 0x1172,
-+ 0x210c, 0xd1ec, 0x0578, 0x6003, 0x0002, 0x6024, 0xc0e5, 0x6026,
-+ 0xd0cc, 0x0150, 0x2001, 0x12c2, 0x2004, 0x6042, 0x2009, 0x1172,
-+ 0x210c, 0xd1f4, 0x11e8, 0x0080, 0x2009, 0x1172, 0x210c, 0xd1f4,
-+ 0x0128, 0x6024, 0xc0e4, 0x6026, 0x9006, 0x00a0, 0x2001, 0x12c2,
-+ 0x200c, 0x8103, 0x9100, 0x6042, 0x6010, 0x9088, 0x002b, 0x2104,
-+ 0x9005, 0x0118, 0x9088, 0x0003, 0x0cd0, 0x2c0a, 0x600f, 0x0000,
-+ 0x9085, 0x0001, 0x0005, 0x0016, 0x00c6, 0x00e6, 0x6154, 0x92f0,
-+ 0x002b, 0x2e04, 0x2060, 0x8cff, 0x0180, 0x84ff, 0x1118, 0x6054,
-+ 0x9106, 0x1138, 0x600c, 0x2072, 0x080c, 0x7384, 0x080c, 0x8ed9,
-+ 0x0010, 0x9cf0, 0x0003, 0x2e64, 0x0c70, 0x00ee, 0x00ce, 0x001e,
-+ 0x0005, 0x00d6, 0x6010, 0x90e8, 0x002b, 0x2d04, 0x9005, 0x0140,
-+ 0x9c06, 0x0120, 0x2d04, 0x90e8, 0x0003, 0x0cb8, 0x600c, 0x206a,
-+ 0x00de, 0x0005, 0x0026, 0x0036, 0x0156, 0x2011, 0x112a, 0x2204,
-+ 0x9084, 0x00ff, 0x2019, 0x026e, 0x2334, 0x9636, 0x11d8, 0x8318,
-+ 0x2334, 0x2204, 0x9084, 0xff00, 0x9636, 0x11a0, 0x2011, 0x0270,
-+ 0x20a9, 0x0004, 0x6010, 0x9098, 0x000a, 0x080c, 0x9d60, 0x1150,
-+ 0x2011, 0x0274, 0x20a9, 0x0004, 0x6010, 0x9098, 0x0006, 0x080c,
-+ 0x9d60, 0x1100, 0x015e, 0x003e, 0x002e, 0x0005, 0x00e6, 0x2071,
-+ 0x1100, 0x080c, 0x5092, 0x080c, 0x2679, 0x00ee, 0x0005, 0x00e6,
-+ 0x6010, 0x2070, 0x7000, 0xd0fc, 0x0108, 0x0011, 0x00ee, 0x0005,
-+ 0x6880, 0xc0e5, 0x6882, 0x0005, 0x00e6, 0x00c6, 0x0076, 0x0066,
-+ 0x0056, 0x0046, 0x0026, 0x0016, 0x0126, 0x2091, 0x8000, 0x2029,
-+ 0x130d, 0x252c, 0x2021, 0x1313, 0x2424, 0x2061, 0x15c0, 0x2071,
-+ 0x1100, 0x764c, 0x706c, 0x9606, 0x0578, 0x6720, 0x9786, 0x0001,
-+ 0x0118, 0x9786, 0x0008, 0x1500, 0x2500, 0x9c06, 0x01e8, 0x2400,
-+ 0x9c06, 0x01d0, 0x080c, 0xc15b, 0x01b8, 0x080c, 0xc16b, 0x11a0,
-+ 0x6000, 0x9086, 0x0004, 0x1120, 0x0016, 0x080c, 0x1509, 0x001e,
-+ 0x080c, 0xab1d, 0x1110, 0x080c, 0x2886, 0x080c, 0xab2e, 0x1110,
-+ 0x080c, 0x97dc, 0x080c, 0x8f09, 0x9ce0, 0x0018, 0x2001, 0x1118,
-+ 0x2004, 0x9c02, 0x1208, 0x0858, 0x012e, 0x001e, 0x002e, 0x004e,
-+ 0x005e, 0x006e, 0x007e, 0x00ce, 0x00ee, 0x0005, 0x0126, 0x0006,
-+ 0x00e6, 0x0016, 0x2091, 0x8000, 0x2071, 0x1140, 0xd5a4, 0x0118,
-+ 0x7034, 0x8000, 0x7036, 0xd5b4, 0x0118, 0x7030, 0x8000, 0x7032,
-+ 0xd5ac, 0x0178, 0x2500, 0x9084, 0x0007, 0x908e, 0x0003, 0x0148,
-+ 0x908e, 0x0004, 0x0130, 0x908e, 0x0005, 0x0118, 0x2071, 0x114a,
-+ 0x0089, 0x001e, 0x00ee, 0x000e, 0x012e, 0x0005, 0x0126, 0x0006,
-+ 0x00e6, 0x2091, 0x8000, 0x2071, 0x1142, 0x0021, 0x00ee, 0x000e,
-+ 0x012e, 0x0005, 0x2e04, 0x8000, 0x2072, 0x1220, 0x8e70, 0x2e04,
-+ 0x8000, 0x2072, 0x0005, 0x00e6, 0x2071, 0x1140, 0x0c99, 0x00ee,
-+ 0x0005, 0x00e6, 0x2071, 0x1144, 0x0c69, 0x00ee, 0x0005, 0x0126,
-+ 0x0006, 0x00e6, 0x2091, 0x8000, 0x2071, 0x1140, 0x7044, 0x8000,
-+ 0x7046, 0x00ee, 0x000e, 0x012e, 0x0005, 0x8064, 0x0008, 0x0010,
-+ 0x0000, 0x8066, 0x0000, 0x0101, 0x0008, 0x4404, 0x0003, 0x8060,
-+ 0x0000, 0x0400, 0x0000, 0x580a, 0x0003, 0x7933, 0x0003, 0x5089,
-+ 0x0003, 0x4c07, 0x000b, 0xbac0, 0x0009, 0x0082, 0x0008, 0x0c07,
-+ 0x0003, 0x15fe, 0x0008, 0x3407, 0x000b, 0x808c, 0x0008, 0x0001,
-+ 0x0000, 0x0000, 0x0007, 0x4047, 0x000a, 0x808c, 0x0008, 0x0002,
-+ 0x0000, 0x0819, 0x000b, 0x4022, 0x0000, 0x001a, 0x0003, 0x4122,
-+ 0x0008, 0x4447, 0x0002, 0x0de5, 0x000b, 0x0bfe, 0x0008, 0x11a0,
-+ 0x0001, 0x11c7, 0x0003, 0x0ca0, 0x0001, 0x11c7, 0x0003, 0x9180,
-+ 0x0001, 0x0004, 0x0000, 0x7f62, 0x0008, 0x8066, 0x0000, 0x0009,
-+ 0x0008, 0x4426, 0x0003, 0x8080, 0x0001, 0x0004, 0x0000, 0x7f62,
-+ 0x0008, 0x8066, 0x0000, 0x0411, 0x0000, 0x442c, 0x0003, 0x808c,
-+ 0x0008, 0x0000, 0x0008, 0x03fe, 0x0000, 0x43e0, 0x0001, 0x0dc4,
-+ 0x000b, 0xc2c0, 0x0009, 0x00ff, 0x0008, 0x02e0, 0x0001, 0x0dc4,
-+ 0x000b, 0x9180, 0x0001, 0x0005, 0x0008, 0x7f62, 0x0008, 0x8066,
-+ 0x0000, 0x0019, 0x0000, 0x443b, 0x0003, 0x0240, 0x0002, 0x09c1,
-+ 0x0003, 0x00fe, 0x0000, 0x31c4, 0x000b, 0x112a, 0x0000, 0x002e,
-+ 0x0008, 0x022c, 0x0008, 0x3a44, 0x0002, 0x0c07, 0x0003, 0x9780,
-+ 0x0001, 0x000f, 0x0008, 0x7f62, 0x0008, 0x8066, 0x0000, 0x0011,
-+ 0x0008, 0x444a, 0x0003, 0x808c, 0x0008, 0x0002, 0x0000, 0x01fe,
-+ 0x0008, 0x42e0, 0x0009, 0x0db7, 0x0003, 0x00fe, 0x0000, 0x43e0,
-+ 0x0001, 0x0db7, 0x0003, 0x1734, 0x0000, 0x1530, 0x0000, 0x1632,
-+ 0x0008, 0x0d2a, 0x0008, 0x9880, 0x0001, 0x0010, 0x0000, 0x7f62,
-+ 0x0008, 0x8066, 0x0000, 0x1e0a, 0x0008, 0x445c, 0x000b, 0x808a,
-+ 0x0008, 0x0003, 0x0008, 0x9a80, 0x0009, 0x0002, 0x0000, 0x7f62,
-+ 0x0008, 0x5862, 0x000b, 0x8066, 0x0000, 0x3679, 0x0000, 0x4465,
-+ 0x000b, 0x5866, 0x0003, 0x8054, 0x0008, 0x0011, 0x0008, 0x8074,
-+ 0x0000, 0x1010, 0x0008, 0x1efe, 0x0000, 0x3007, 0x0003, 0x006f,
-+ 0x0004, 0x0007, 0x0003, 0x1cfe, 0x0008, 0x1b80, 0x0009, 0x7f62,
-+ 0x0008, 0x8066, 0x0000, 0x0231, 0x0008, 0x4474, 0x000b, 0x5875,
-+ 0x000b, 0x0140, 0x0008, 0x0242, 0x0000, 0x1f43, 0x0002, 0x0c7f,
-+ 0x0003, 0x0d44, 0x0000, 0x0d46, 0x0008, 0x0348, 0x0008, 0x044a,
-+ 0x0008, 0x0083, 0x0003, 0x0344, 0x0008, 0x0446, 0x0008, 0x0548,
-+ 0x0008, 0x064a, 0x0000, 0x5883, 0x000b, 0x8054, 0x0008, 0x0001,
-+ 0x0000, 0x8074, 0x0000, 0x2020, 0x0008, 0x4000, 0x000f, 0x3a40,
-+ 0x000a, 0x0c0a, 0x000b, 0x2b24, 0x0008, 0x2b24, 0x0008, 0x588d,
-+ 0x0003, 0x8054, 0x0008, 0x0002, 0x0000, 0x1242, 0x0002, 0x08d7,
-+ 0x0003, 0x3a45, 0x000a, 0x08c8, 0x000b, 0x1e10, 0x000a, 0x7f3c,
-+ 0x0000, 0x08c5, 0x0003, 0x1d00, 0x0002, 0x7f3a, 0x0000, 0x0d60,
-+ 0x0000, 0x7f62, 0x0008, 0x8066, 0x0000, 0x0009, 0x0008, 0x449d,
-+ 0x0003, 0x8060, 0x0000, 0x0400, 0x0000, 0x00fe, 0x0000, 0x34c2,
-+ 0x000b, 0x1cfe, 0x0008, 0xff80, 0x0009, 0x0001, 0x0000, 0x7f62,
-+ 0x0008, 0x8066, 0x0000, 0x0009, 0x0008, 0x44a8, 0x0003, 0x00fe,
-+ 0x0000, 0x31a0, 0x0003, 0x0038, 0x0000, 0x00fe, 0x0000, 0xff80,
-+ 0x0009, 0x0019, 0x0000, 0x7f62, 0x0008, 0x8066, 0x0000, 0x0009,
-+ 0x0008, 0x44b2, 0x000b, 0x80c0, 0x0009, 0x00ff, 0x0008, 0x7f3e,
-+ 0x0008, 0x0d60, 0x0000, 0x0efe, 0x0008, 0x1f80, 0x0001, 0x7f62,
-+ 0x0008, 0x8066, 0x0000, 0x0009, 0x0008, 0x44bc, 0x0003, 0x8060,
-+ 0x0000, 0x0400, 0x0000, 0x003a, 0x0008, 0x1dfe, 0x0000, 0x0099,
-+ 0x000b, 0x0036, 0x0008, 0x006f, 0x0004, 0x00d7, 0x000b, 0x8074,
-+ 0x0000, 0x2000, 0x0000, 0x00d7, 0x000b, 0x3a44, 0x0002, 0x09ca,
-+ 0x000b, 0x8074, 0x0000, 0x1000, 0x0000, 0x2d0e, 0x0000, 0x2d0e,
-+ 0x0000, 0x35a0, 0x000b, 0x26fe, 0x0008, 0x26fe, 0x0008, 0x2700,
-+ 0x0008, 0x2700, 0x0008, 0x00d0, 0x0009, 0x0ce5, 0x0003, 0x8074,
-+ 0x0000, 0x4040, 0x0008, 0x58d7, 0x0003, 0x5089, 0x0003, 0x3a46,
-+ 0x000a, 0x0ce5, 0x0003, 0x3a47, 0x0002, 0x08e2, 0x0003, 0x8054,
-+ 0x0008, 0x0004, 0x0000, 0x8074, 0x0000, 0x8000, 0x0000, 0x0126,
-+ 0x000b, 0x92c0, 0x0009, 0x0f88, 0x0008, 0x0807, 0x000b, 0x9a80,
-+ 0x0009, 0x0002, 0x0000, 0x7f62, 0x0008, 0x8066, 0x0000, 0x362a,
-+ 0x0000, 0x44ea, 0x0003, 0x2000, 0x0000, 0x2000, 0x0000, 0x2102,
-+ 0x0000, 0x2102, 0x0000, 0x2204, 0x0000, 0x2204, 0x0000, 0x2306,
-+ 0x0000, 0x2306, 0x0000, 0x2408, 0x0000, 0x2408, 0x0000, 0x250a,
-+ 0x0000, 0x250a, 0x0000, 0x260c, 0x0000, 0x260c, 0x0000, 0x270e,
-+ 0x0000, 0x270e, 0x0000, 0x2810, 0x0000, 0x2810, 0x0000, 0x2912,
-+ 0x0000, 0x2912, 0x0000, 0x9a80, 0x0009, 0x0007, 0x0000, 0x7f62,
-+ 0x0008, 0x8066, 0x0000, 0x0052, 0x0000, 0x4504, 0x000b, 0x92c0,
-+ 0x0009, 0x0780, 0x0008, 0x0db1, 0x0003, 0x124b, 0x0002, 0x090d,
-+ 0x0003, 0x2e4d, 0x0002, 0x2e4d, 0x0002, 0x09a0, 0x000b, 0x3a46,
-+ 0x000a, 0x0d1a, 0x000b, 0x590f, 0x000b, 0x8054, 0x0008, 0x0004,
-+ 0x0000, 0x1243, 0x000a, 0x0924, 0x000b, 0x8010, 0x0008, 0x000d,
-+ 0x0000, 0x0191, 0x0004, 0x1810, 0x0000, 0x0191, 0x0004, 0x0124,
-+ 0x0003, 0x194d, 0x000a, 0x091e, 0x000b, 0x1243, 0x000a, 0x09a7,
-+ 0x0003, 0x591e, 0x000b, 0x8054, 0x0008, 0x0004, 0x0000, 0x0188,
-+ 0x000c, 0x1810, 0x0000, 0x0191, 0x0004, 0x8074, 0x0000, 0xf000,
-+ 0x0008, 0x3a42, 0x0002, 0x0d2c, 0x000b, 0x15fe, 0x0008, 0x3445,
-+ 0x000b, 0x0d30, 0x0000, 0x0007, 0x0003, 0x0d30, 0x0000, 0x8074,
-+ 0x0000, 0x0501, 0x0000, 0x8010, 0x0008, 0x000c, 0x0008, 0x0191,
-+ 0x0004, 0x0007, 0x0003, 0xbbe0, 0x0009, 0x0030, 0x0008, 0x0d43,
-+ 0x000b, 0x18fe, 0x0000, 0x3ce0, 0x0009, 0x0940, 0x0003, 0x15fe,
-+ 0x0008, 0x3ce0, 0x0009, 0x0940, 0x0003, 0x0183, 0x0004, 0x8076,
-+ 0x0008, 0x0040, 0x0000, 0x0180, 0x000b, 0x8076, 0x0008, 0x0041,
-+ 0x0008, 0x0180, 0x000b, 0xbbe0, 0x0009, 0x0032, 0x0000, 0x0d48,
-+ 0x0003, 0x3c1e, 0x0008, 0x0180, 0x000b, 0xbbe0, 0x0009, 0x0037,
-+ 0x0000, 0x0d65, 0x0003, 0x18fe, 0x0000, 0x3ce0, 0x0009, 0x0d40,
-+ 0x000b, 0x1afe, 0x0008, 0xff80, 0x0009, 0x000d, 0x0000, 0x7f62,
-+ 0x0008, 0x2604, 0x0008, 0x2604, 0x0008, 0x2706, 0x0008, 0x2706,
-+ 0x0008, 0x2808, 0x0000, 0x2808, 0x0000, 0x290a, 0x0000, 0x290a,
-+ 0x0000, 0x8066, 0x0000, 0x0422, 0x0000, 0x455c, 0x0003, 0x0188,
-+ 0x000c, 0x8054, 0x0008, 0x0004, 0x0000, 0x8074, 0x0000, 0xf000,
-+ 0x0008, 0x8072, 0x0000, 0x8000, 0x0000, 0x0126, 0x000b, 0xbbe0,
-+ 0x0009, 0x0038, 0x0000, 0x0d77, 0x0003, 0x18fe, 0x0000, 0x3ce0,
-+ 0x0009, 0x0974, 0x000b, 0x15fe, 0x0008, 0x3ce0, 0x0009, 0x0d3c,
-+ 0x0003, 0x0183, 0x0004, 0x8076, 0x0008, 0x0040, 0x0000, 0x8072,
-+ 0x0000, 0x8000, 0x0000, 0x01c1, 0x000b, 0x8076, 0x0008, 0x0042,
-+ 0x0008, 0x0180, 0x000b, 0xbbe0, 0x0009, 0x0016, 0x0000, 0x0d80,
-+ 0x000b, 0x3a44, 0x0002, 0x0c09, 0x000b, 0x8072, 0x0000, 0x8000,
-+ 0x0000, 0x8000, 0x000f, 0x0007, 0x0003, 0x8072, 0x0000, 0x8000,
-+ 0x0000, 0x0007, 0x0003, 0x3d30, 0x000a, 0x7f00, 0x0000, 0xbc80,
-+ 0x0001, 0x0007, 0x0000, 0x018c, 0x000b, 0x1930, 0x000a, 0x7f00,
-+ 0x0000, 0x9880, 0x0001, 0x0007, 0x0000, 0x7f62, 0x0008, 0x8066,
-+ 0x0000, 0x000a, 0x0008, 0x458f, 0x000b, 0x4000, 0x000f, 0x2191,
-+ 0x0003, 0x0870, 0x0008, 0x4000, 0x000f, 0xbac0, 0x0009, 0x0090,
-+ 0x0008, 0x099a, 0x000b, 0x8074, 0x0000, 0x0706, 0x0000, 0x019c,
-+ 0x0003, 0x8074, 0x0000, 0x0703, 0x0000, 0x4000, 0x000f, 0x8010,
-+ 0x0008, 0x0008, 0x0000, 0x01cf, 0x0003, 0x0188, 0x000c, 0x8010,
-+ 0x0008, 0x0007, 0x0000, 0x0191, 0x0004, 0x1810, 0x0000, 0x0191,
-+ 0x0004, 0x01d9, 0x000b, 0x0188, 0x000c, 0x8010, 0x0008, 0x001b,
-+ 0x0008, 0x0191, 0x0004, 0x1810, 0x0000, 0x0191, 0x0004, 0x8074,
-+ 0x0000, 0xf080, 0x0000, 0x0d30, 0x0000, 0x0007, 0x0003, 0x8010,
-+ 0x0008, 0x0009, 0x0008, 0x01cf, 0x0003, 0x8010, 0x0008, 0x0005,
-+ 0x0008, 0x01cf, 0x0003, 0x808c, 0x0008, 0x0001, 0x0000, 0x8010,
-+ 0x0008, 0x0004, 0x0000, 0x4143, 0x000a, 0x0853, 0x0003, 0x3a44,
-+ 0x0002, 0x0c07, 0x0003, 0x0d2a, 0x0008, 0x01cf, 0x0003, 0x8010,
-+ 0x0008, 0x0003, 0x0008, 0x01d1, 0x0003, 0x8010, 0x0008, 0x000b,
-+ 0x0000, 0x01d1, 0x0003, 0x8010, 0x0008, 0x0002, 0x0000, 0x01d1,
-+ 0x0003, 0x3a47, 0x0002, 0x0cd7, 0x000b, 0x8010, 0x0008, 0x0006,
-+ 0x0008, 0x01d1, 0x0003, 0x8074, 0x0000, 0xf000, 0x0008, 0x0191,
-+ 0x0004, 0x0194, 0x0004, 0x3a40, 0x000a, 0x0807, 0x000b, 0x8010,
-+ 0x0008, 0x000c, 0x0008, 0x0191, 0x0004, 0x0007, 0x0003, 0x8074,
-+ 0x0000, 0xf080, 0x0000, 0x0d30, 0x0000, 0x2e4d, 0x0002, 0x2e4d,
-+ 0x0002, 0x09e2, 0x000b, 0x8054, 0x0008, 0x0019, 0x0000, 0x0007,
-+ 0x0003, 0x8054, 0x0008, 0x0009, 0x0008, 0x0007, 0x0003, 0x3a44,
-+ 0x0002, 0x0c07, 0x0003, 0x01c4, 0x000b, 0xde59, 0xf666, 0x0001,
-+ 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080, 0x0100,
-+ 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000, 0x8000, 0xfe91
-+};
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/scsi/isp/isp.c 2003-07-19 17:06:33.000000000 -0700
-@@ -0,0 +1,6714 @@
-+/* @(#)isp.c 1.86 */
-+/*
-+ * Machine and OS Independent (well, as best as possible)
-+ * code for the Qlogic ISP SCSI adapters.
-+ *
-+ * Copyright (c) 1997, 1998, 1999, 2000, 2001 by Matthew Jacob
-+ * Feral Software
-+ * All rights reserved.
-+ *
-+ * Redistribution and use in source and binary forms, with or without
-+ * modification, are permitted provided that the following conditions
-+ * are met:
-+ * 1. Redistributions of source code must retain the above copyright
-+ * notice immediately at the beginning of the file, without modification,
-+ * this list of conditions, and the following disclaimer.
-+ * 2. The name of the author may not be used to endorse or promote products
-+ * derived from this software without specific prior written permission.
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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)
-+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-+ * SUCH DAMAGE.
-+ */
-+
-+/*
-+ * Inspiration and ideas about this driver are from Erik Moe's Linux driver
-+ * (qlogicisp.c) and Dave Miller's SBus version of same (qlogicisp.c). Some
-+ * ideas dredged from the Solaris driver.
-+ */
-+
-+/*
-+ * Include header file appropriate for platform we're building on.
-+ */
-+
-+#ifdef __NetBSD__
-+#include <dev/ic/isp_netbsd.h>
-+#endif
-+#ifdef __FreeBSD__
-+#include <dev/isp/isp_freebsd.h>
-+#endif
-+#ifdef __OpenBSD__
-+#include <dev/ic/isp_openbsd.h>
-+#endif
-+#ifdef __linux__
-+#include "isp_linux.h"
-+#endif
-+#ifdef __svr4__
-+#include "isp_solaris.h"
-+#endif
-+
-+/*
-+ * General defines
-+ */
-+
-+#define MBOX_DELAY_COUNT 1000000 / 100
-+
-+/*
-+ * Local static data
-+ */
-+static const char portshift[] =
-+ "Target %d Loop ID 0x%x (Port 0x%x) => Loop 0x%x (Port 0x%x)";
-+static const char portdup[] =
-+ "Target %d duplicates Target %d- killing off both";
-+static const char retained[] =
-+ "Retaining Loop ID 0x%x for Target %d (Port 0x%x)";
-+static const char lretained[] =
-+ "Retained login of Target %d (Loop ID 0x%x) Port 0x%x";
-+static const char plogout[] =
-+ "Logging out Target %d at Loop ID 0x%x (Port 0x%x)";
-+static const char plogierr[] =
-+ "Command Error in PLOGI for Port 0x%x (0x%x)";
-+static const char nopdb[] =
-+ "Could not get PDB for Device @ Port 0x%x";
-+static const char pdbmfail1[] =
-+ "PDB Loop ID info for Device @ Port 0x%x does not match up (0x%x)";
-+static const char pdbmfail2[] =
-+ "PDB Port info for Device @ Port 0x%x does not match up (0x%x)";
-+static const char ldumped[] =
-+ "Target %d (Loop ID 0x%x) Port 0x%x dumped after login info mismatch";
-+static const char notresp[] =
-+ "Not RESPONSE in RESPONSE Queue (type 0x%x) @ idx %d (next %d) nlooked %d";
-+static const char xact1[] =
-+ "HBA attempted queued transaction with disconnect not set for %d.%d.%d";
-+static const char xact2[] =
-+ "HBA attempted queued transaction to target routine %d on target %d bus %d";
-+static const char xact3[] =
-+ "HBA attempted queued cmd for %d.%d.%d when queueing disabled";
-+static const char pskip[] =
-+ "SCSI phase skipped for target %d.%d.%d";
-+static const char topology[] =
-+ "Loop ID %d, AL_PA 0x%x, Port ID 0x%x, Loop State 0x%x, Topology '%s'";
-+static const char swrej[] =
-+ "Fabric Nameserver rejected %s (Reason=0x%x Expl=0x%x) for Port ID 0x%x";
-+static const char finmsg[] =
-+ "(%d.%d.%d): FIN dl%d resid %d STS 0x%x SKEY %c XS_ERR=0x%x";
-+static const char sc0[] =
-+ "%s CHAN %d FTHRSH %d IID %d RESETD %d RETRYC %d RETRYD %d ASD 0x%x";
-+static const char sc1[] =
-+ "%s RAAN 0x%x DLAN 0x%x DDMAB 0x%x CDMAB 0x%x SELTIME %d MQD %d";
-+static const char sc2[] = "%s CHAN %d TGT %d FLAGS 0x%x 0x%x/0x%x";
-+static const char sc3[] = "Generated";
-+static const char sc4[] = "NVRAM";
-+static const char bun[] =
-+ "bad underrun for %d.%d (count %d, resid %d, status %s)";
-+
-+/*
-+ * Local function prototypes.
-+ */
-+static int isp_parse_async(struct ispsoftc *, u_int16_t);
-+static int isp_handle_other_response(struct ispsoftc *, int, isphdr_t *,
-+ u_int16_t *);
-+static void
-+isp_parse_status(struct ispsoftc *, ispstatusreq_t *, XS_T *);
-+static void isp_fastpost_complete(struct ispsoftc *, u_int16_t);
-+static int isp_mbox_continue(struct ispsoftc *);
-+static void isp_scsi_init(struct ispsoftc *);
-+static void isp_scsi_channel_init(struct ispsoftc *, int);
-+static void isp_fibre_init(struct ispsoftc *);
-+static void isp_mark_getpdb_all(struct ispsoftc *);
-+static int isp_getmap(struct ispsoftc *, fcpos_map_t *);
-+static int isp_getpdb(struct ispsoftc *, int, isp_pdb_t *);
-+static u_int64_t isp_get_portname(struct ispsoftc *, int, int);
-+static int isp_fclink_test(struct ispsoftc *, int);
-+static char *isp2100_fw_statename(int);
-+static int isp_pdb_sync(struct ispsoftc *);
-+static int isp_scan_loop(struct ispsoftc *);
-+static int isp_fabric_mbox_cmd(struct ispsoftc *, mbreg_t *);
-+static int isp_scan_fabric(struct ispsoftc *, int);
-+static void isp_register_fc4_type(struct ispsoftc *);
-+static void isp_fw_state(struct ispsoftc *);
-+static void isp_mboxcmd_qnw(struct ispsoftc *, mbreg_t *, int);
-+static void isp_mboxcmd(struct ispsoftc *, mbreg_t *, int);
-+
-+static void isp_update(struct ispsoftc *);
-+static void isp_update_bus(struct ispsoftc *, int);
-+static void isp_setdfltparm(struct ispsoftc *, int);
-+static int isp_read_nvram(struct ispsoftc *);
-+static void isp_rdnvram_word(struct ispsoftc *, int, u_int16_t *);
-+static void isp_parse_nvram_1020(struct ispsoftc *, u_int8_t *);
-+static void isp_parse_nvram_1080(struct ispsoftc *, int, u_int8_t *);
-+static void isp_parse_nvram_12160(struct ispsoftc *, int, u_int8_t *);
-+static void isp_parse_nvram_2100(struct ispsoftc *, u_int8_t *);
-+
-+/*
-+ * Reset Hardware.
-+ *
-+ * Hit the chip over the head, download new f/w if available and set it running.
-+ *
-+ * Locking done elsewhere.
-+ */
-+
-+void
-+isp_reset(struct ispsoftc *isp)
-+{
-+ mbreg_t mbs;
-+ u_int16_t code_org;
-+ int loops, i, dodnld = 1;
-+ char *btype = "????";
-+
-+ isp->isp_state = ISP_NILSTATE;
-+
-+ /*
-+ * Basic types (SCSI, FibreChannel and PCI or SBus)
-+ * have been set in the MD code. We figure out more
-+ * here. Possibly more refined types based upon PCI
-+ * identification. Chip revision has been gathered.
-+ *
-+ * After we've fired this chip up, zero out the conf1 register
-+ * for SCSI adapters and do other settings for the 2100.
-+ */
-+
-+ /*
-+ * Get the current running firmware revision out of the
-+ * chip before we hit it over the head (if this is our
-+ * first time through). Note that we store this as the
-+ * 'ROM' firmware revision- which it may not be. In any
-+ * case, we don't really use this yet, but we may in
-+ * the future.
-+ */
-+ if (isp->isp_touched == 0) {
-+ /*
-+ * First see whether or not we're sitting in the ISP PROM.
-+ * If we've just been reset, we'll have the string "ISP "
-+ * spread through outgoing mailbox registers 1-3. We do
-+ * this for PCI cards because otherwise we really don't
-+ * know what state the card is in and we could hang if
-+ * we try this command otherwise.
-+ *
-+ * For SBus cards, we just do this because they almost
-+ * certainly will be running firmware by now.
-+ */
-+ if (ISP_READ(isp, OUTMAILBOX1) != 0x4953 ||
-+ ISP_READ(isp, OUTMAILBOX2) != 0x5020 ||
-+ ISP_READ(isp, OUTMAILBOX3) != 0x2020) {
-+ /*
-+ * Just in case it was paused...
-+ */
-+ ISP_WRITE(isp, HCCR, HCCR_CMD_RELEASE);
-+ mbs.param[0] = MBOX_ABOUT_FIRMWARE;
-+ isp_mboxcmd(isp, &mbs, MBLOGNONE);
-+ if (mbs.param[0] == MBOX_COMMAND_COMPLETE) {
-+ isp->isp_romfw_rev[0] = mbs.param[1];
-+ isp->isp_romfw_rev[1] = mbs.param[2];
-+ isp->isp_romfw_rev[2] = mbs.param[3];
-+ }
-+ }
-+ isp->isp_touched = 1;
-+ }
-+
-+ DISABLE_INTS(isp);
-+
-+ /*
-+ * Set up default request/response queue in-pointer/out-pointer
-+ * register indices.
-+ */
-+ if (IS_23XX(isp)) {
-+ isp->isp_rqstinrp = BIU_REQINP;
-+ isp->isp_rqstoutrp = BIU_REQOUTP;
-+ isp->isp_respinrp = BIU_RSPINP;
-+ isp->isp_respoutrp = BIU_RSPOUTP;
-+ } else {
-+ isp->isp_rqstinrp = INMAILBOX4;
-+ isp->isp_rqstoutrp = OUTMAILBOX4;
-+ isp->isp_respinrp = OUTMAILBOX5;
-+ isp->isp_respoutrp = INMAILBOX5;
-+ }
-+
-+ /*
-+ * Put the board into PAUSE mode (so we can read the SXP registers
-+ * or write FPM/FBM registers).
-+ */
-+ ISP_WRITE(isp, HCCR, HCCR_CMD_PAUSE);
-+
-+ if (IS_FC(isp)) {
-+ switch (isp->isp_type) {
-+ case ISP_HA_FC_2100:
-+ btype = "2100";
-+ break;
-+ case ISP_HA_FC_2200:
-+ btype = "2200";
-+ break;
-+ case ISP_HA_FC_2300:
-+ btype = "2300";
-+ break;
-+ case ISP_HA_FC_2312:
-+ btype = "2312";
-+ break;
-+ default:
-+ break;
-+ }
-+ /*
-+ * While we're paused, reset the FPM module and FBM fifos.
-+ */
-+ ISP_WRITE(isp, BIU2100_CSR, BIU2100_FPM0_REGS);
-+ ISP_WRITE(isp, FPM_DIAG_CONFIG, FPM_SOFT_RESET);
-+ ISP_WRITE(isp, BIU2100_CSR, BIU2100_FB_REGS);
-+ ISP_WRITE(isp, FBM_CMD, FBMCMD_FIFO_RESET_ALL);
-+ ISP_WRITE(isp, BIU2100_CSR, BIU2100_RISC_REGS);
-+ } else if (IS_1240(isp)) {
-+ sdparam *sdp = isp->isp_param;
-+ btype = "1240";
-+ isp->isp_clock = 60;
-+ sdp->isp_ultramode = 1;
-+ sdp++;
-+ sdp->isp_ultramode = 1;
-+ /*
-+ * XXX: Should probably do some bus sensing.
-+ */
-+ } else if (IS_ULTRA2(isp)) {
-+ static const char m[] = "bus %d is in %s Mode";
-+ u_int16_t l;
-+ sdparam *sdp = isp->isp_param;
-+
-+ isp->isp_clock = 100;
-+
-+ if (IS_1280(isp))
-+ btype = "1280";
-+ else if (IS_1080(isp))
-+ btype = "1080";
-+ else if (IS_10160(isp))
-+ btype = "10160";
-+ else if (IS_12160(isp))
-+ btype = "12160";
-+ else
-+ btype = "<UNKLVD>";
-+
-+ l = ISP_READ(isp, SXP_PINS_DIFF) & ISP1080_MODE_MASK;
-+ switch (l) {
-+ case ISP1080_LVD_MODE:
-+ sdp->isp_lvdmode = 1;
-+ isp_prt(isp, ISP_LOGCONFIG, m, 0, "LVD");
-+ break;
-+ case ISP1080_HVD_MODE:
-+ sdp->isp_diffmode = 1;
-+ isp_prt(isp, ISP_LOGCONFIG, m, 0, "Differential");
-+ break;
-+ case ISP1080_SE_MODE:
-+ sdp->isp_ultramode = 1;
-+ isp_prt(isp, ISP_LOGCONFIG, m, 0, "Single-Ended");
-+ break;
-+ default:
-+ isp_prt(isp, ISP_LOGERR,
-+ "unknown mode on bus %d (0x%x)", 0, l);
-+ break;
-+ }
-+
-+ if (IS_DUALBUS(isp)) {
-+ sdp++;
-+ l = ISP_READ(isp, SXP_PINS_DIFF|SXP_BANK1_SELECT);
-+ l &= ISP1080_MODE_MASK;
-+ switch(l) {
-+ case ISP1080_LVD_MODE:
-+ sdp->isp_lvdmode = 1;
-+ isp_prt(isp, ISP_LOGCONFIG, m, 1, "LVD");
-+ break;
-+ case ISP1080_HVD_MODE:
-+ sdp->isp_diffmode = 1;
-+ isp_prt(isp, ISP_LOGCONFIG,
-+ m, 1, "Differential");
-+ break;
-+ case ISP1080_SE_MODE:
-+ sdp->isp_ultramode = 1;
-+ isp_prt(isp, ISP_LOGCONFIG,
-+ m, 1, "Single-Ended");
-+ break;
-+ default:
-+ isp_prt(isp, ISP_LOGERR,
-+ "unknown mode on bus %d (0x%x)", 1, l);
-+ break;
-+ }
-+ }
-+ } else {
-+ sdparam *sdp = isp->isp_param;
-+ i = ISP_READ(isp, BIU_CONF0) & BIU_CONF0_HW_MASK;
-+ switch (i) {
-+ default:
-+ isp_prt(isp, ISP_LOGALL, "Unknown Chip Type 0x%x", i);
-+ /* FALLTHROUGH */
-+ case 1:
-+ btype = "1020";
-+ isp->isp_type = ISP_HA_SCSI_1020;
-+ isp->isp_clock = 40;
-+ break;
-+ case 2:
-+ /*
-+ * Some 1020A chips are Ultra Capable, but don't
-+ * run the clock rate up for that unless told to
-+ * do so by the Ultra Capable bits being set.
-+ */
-+ btype = "1020A";
-+ isp->isp_type = ISP_HA_SCSI_1020A;
-+ isp->isp_clock = 40;
-+ break;
-+ case 3:
-+ btype = "1040";
-+ isp->isp_type = ISP_HA_SCSI_1040;
-+ isp->isp_clock = 60;
-+ break;
-+ case 4:
-+ btype = "1040A";
-+ isp->isp_type = ISP_HA_SCSI_1040A;
-+ isp->isp_clock = 60;
-+ break;
-+ case 5:
-+ btype = "1040B";
-+ isp->isp_type = ISP_HA_SCSI_1040B;
-+ isp->isp_clock = 60;
-+ break;
-+ case 6:
-+ btype = "1040C";
-+ isp->isp_type = ISP_HA_SCSI_1040C;
-+ isp->isp_clock = 60;
-+ break;
-+ }
-+ /*
-+ * Now, while we're at it, gather info about ultra
-+ * and/or differential mode.
-+ */
-+ if (ISP_READ(isp, SXP_PINS_DIFF) & SXP_PINS_DIFF_MODE) {
-+ isp_prt(isp, ISP_LOGCONFIG, "Differential Mode");
-+ sdp->isp_diffmode = 1;
-+ } else {
-+ sdp->isp_diffmode = 0;
-+ }
-+ i = ISP_READ(isp, RISC_PSR);
-+ if (isp->isp_bustype == ISP_BT_SBUS) {
-+ i &= RISC_PSR_SBUS_ULTRA;
-+ } else {
-+ i &= RISC_PSR_PCI_ULTRA;
-+ }
-+ if (i != 0) {
-+ isp_prt(isp, ISP_LOGCONFIG, "Ultra Mode Capable");
-+ sdp->isp_ultramode = 1;
-+ /*
-+ * If we're in Ultra Mode, we have to be 60MHz clock-
-+ * even for the SBus version.
-+ */
-+ isp->isp_clock = 60;
-+ } else {
-+ sdp->isp_ultramode = 0;
-+ /*
-+ * Clock is known. Gronk.
-+ */
-+ }
-+
-+ /*
-+ * Machine dependent clock (if set) overrides
-+ * our generic determinations.
-+ */
-+ if (isp->isp_mdvec->dv_clock) {
-+ if (isp->isp_mdvec->dv_clock < isp->isp_clock) {
-+ isp->isp_clock = isp->isp_mdvec->dv_clock;
-+ }
-+ }
-+
-+ }
-+
-+ /*
-+ * Clear instrumentation
-+ */
-+ isp->isp_intcnt = isp->isp_intbogus = 0;
-+
-+ /*
-+ * Do MD specific pre initialization
-+ */
-+ ISP_RESET0(isp);
-+
-+again:
-+
-+ /*
-+ * Hit the chip over the head with hammer,
-+ * and give the ISP a chance to recover.
-+ */
-+
-+ if (IS_SCSI(isp)) {
-+ ISP_WRITE(isp, BIU_ICR, BIU_ICR_SOFT_RESET);
-+ /*
-+ * A slight delay...
-+ */
-+ USEC_DELAY(100);
-+
-+ /*
-+ * Clear data && control DMA engines.
-+ */
-+ ISP_WRITE(isp, CDMA_CONTROL,
-+ DMA_CNTRL_CLEAR_CHAN | DMA_CNTRL_RESET_INT);
-+ ISP_WRITE(isp, DDMA_CONTROL,
-+ DMA_CNTRL_CLEAR_CHAN | DMA_CNTRL_RESET_INT);
-+
-+
-+ } else {
-+ ISP_WRITE(isp, BIU2100_CSR, BIU2100_SOFT_RESET);
-+ /*
-+ * A slight delay...
-+ */
-+ USEC_DELAY(100);
-+
-+ /*
-+ * Clear data && control DMA engines.
-+ */
-+ ISP_WRITE(isp, CDMA2100_CONTROL,
-+ DMA_CNTRL2100_CLEAR_CHAN | DMA_CNTRL2100_RESET_INT);
-+ ISP_WRITE(isp, TDMA2100_CONTROL,
-+ DMA_CNTRL2100_CLEAR_CHAN | DMA_CNTRL2100_RESET_INT);
-+ ISP_WRITE(isp, RDMA2100_CONTROL,
-+ DMA_CNTRL2100_CLEAR_CHAN | DMA_CNTRL2100_RESET_INT);
-+ }
-+
-+ /*
-+ * Wait for ISP to be ready to go...
-+ */
-+ loops = MBOX_DELAY_COUNT;
-+ for (;;) {
-+ if (IS_SCSI(isp)) {
-+ if (!(ISP_READ(isp, BIU_ICR) & BIU_ICR_SOFT_RESET))
-+ break;
-+ } else {
-+ if (!(ISP_READ(isp, BIU2100_CSR) & BIU2100_SOFT_RESET))
-+ break;
-+ }
-+ USEC_DELAY(100);
-+ if (--loops < 0) {
-+ ISP_DUMPREGS(isp, "chip reset timed out");
-+ return;
-+ }
-+ }
-+
-+ /*
-+ * After we've fired this chip up, zero out the conf1 register
-+ * for SCSI adapters and other settings for the 2100.
-+ */
-+
-+ if (IS_SCSI(isp)) {
-+ ISP_WRITE(isp, BIU_CONF1, 0);
-+ } else {
-+ ISP_WRITE(isp, BIU2100_CSR, 0);
-+ }
-+
-+ /*
-+ * Reset RISC Processor
-+ */
-+ ISP_WRITE(isp, HCCR, HCCR_CMD_RESET);
-+ USEC_DELAY(100);
-+ /* Clear semaphore register (just to be sure) */
-+ ISP_WRITE(isp, BIU_SEMA, 0);
-+
-+ /*
-+ * Establish some initial burst rate stuff.
-+ * (only for the 1XX0 boards). This really should
-+ * be done later after fetching from NVRAM.
-+ */
-+ if (IS_SCSI(isp)) {
-+ u_int16_t tmp = isp->isp_mdvec->dv_conf1;
-+ /*
-+ * Busted FIFO. Turn off all but burst enables.
-+ */
-+ if (isp->isp_type == ISP_HA_SCSI_1040A) {
-+ tmp &= BIU_BURST_ENABLE;
-+ }
-+ ISP_SETBITS(isp, BIU_CONF1, tmp);
-+ if (tmp & BIU_BURST_ENABLE) {
-+ ISP_SETBITS(isp, CDMA_CONF, DMA_ENABLE_BURST);
-+ ISP_SETBITS(isp, DDMA_CONF, DMA_ENABLE_BURST);
-+ }
-+#ifdef PTI_CARDS
-+ if (((sdparam *) isp->isp_param)->isp_ultramode) {
-+ while (ISP_READ(isp, RISC_MTR) != 0x1313) {
-+ ISP_WRITE(isp, RISC_MTR, 0x1313);
-+ ISP_WRITE(isp, HCCR, HCCR_CMD_STEP);
-+ }
-+ } else {
-+ ISP_WRITE(isp, RISC_MTR, 0x1212);
-+ }
-+ /*
-+ * PTI specific register
-+ */
-+ ISP_WRITE(isp, RISC_EMB, DUAL_BANK)
-+#else
-+ ISP_WRITE(isp, RISC_MTR, 0x1212);
-+#endif
-+ } else {
-+ ISP_WRITE(isp, RISC_MTR2100, 0x1212);
-+ if (IS_2200(isp) || IS_23XX(isp)) {
-+ ISP_WRITE(isp, HCCR, HCCR_2X00_DISABLE_PARITY_PAUSE);
-+ }
-+ }
-+
-+ ISP_WRITE(isp, HCCR, HCCR_CMD_RELEASE); /* release paused processor */
-+
-+ /*
-+ * Do MD specific post initialization
-+ */
-+ ISP_RESET1(isp);
-+
-+ /*
-+ * Wait for everything to finish firing up.
-+ *
-+ * Avoid doing this on the 2312 because you can generate a PCI
-+ * parity error (chip breakage).
-+ */
-+ if (IS_23XX(isp)) {
-+ USEC_DELAY(5);
-+ } else {
-+ loops = MBOX_DELAY_COUNT;
-+ while (ISP_READ(isp, OUTMAILBOX0) == MBOX_BUSY) {
-+ USEC_DELAY(100);
-+ if (--loops < 0) {
-+ isp_prt(isp, ISP_LOGERR,
-+ "MBOX_BUSY never cleared on reset");
-+ return;
-+ }
-+ }
-+ }
-+
-+ /*
-+ * Up until this point we've done everything by just reading or
-+ * setting registers. From this point on we rely on at least *some*
-+ * kind of firmware running in the card.
-+ */
-+
-+ /*
-+ * Do some sanity checking.
-+ */
-+ mbs.param[0] = MBOX_NO_OP;
-+ isp_mboxcmd(isp, &mbs, MBLOGALL);
-+ if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
-+ return;
-+ }
-+
-+ if (IS_SCSI(isp)) {
-+ mbs.param[0] = MBOX_MAILBOX_REG_TEST;
-+ mbs.param[1] = 0xdead;
-+ mbs.param[2] = 0xbeef;
-+ mbs.param[3] = 0xffff;
-+ mbs.param[4] = 0x1111;
-+ mbs.param[5] = 0xa5a5;
-+ isp_mboxcmd(isp, &mbs, MBLOGALL);
-+ if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
-+ return;
-+ }
-+ if (mbs.param[1] != 0xdead || mbs.param[2] != 0xbeef ||
-+ mbs.param[3] != 0xffff || mbs.param[4] != 0x1111 ||
-+ mbs.param[5] != 0xa5a5) {
-+ isp_prt(isp, ISP_LOGERR,
-+ "Register Test Failed (0x%x 0x%x 0x%x 0x%x 0x%x)",
-+ mbs.param[1], mbs.param[2], mbs.param[3],
-+ mbs.param[4], mbs.param[5]);
-+ return;
-+ }
-+
-+ }
-+
-+ /*
-+ * Download new Firmware, unless requested not to do so.
-+ * This is made slightly trickier in some cases where the
-+ * firmware of the ROM revision is newer than the revision
-+ * compiled into the driver. So, where we used to compare
-+ * versions of our f/w and the ROM f/w, now we just see
-+ * whether we have f/w at all and whether a config flag
-+ * has disabled our download.
-+ */
-+ if ((isp->isp_mdvec->dv_ispfw == NULL) ||
-+ (isp->isp_confopts & ISP_CFG_NORELOAD)) {
-+ dodnld = 0;
-+ }
-+
-+ if (IS_23XX(isp))
-+ code_org = ISP_CODE_ORG_2300;
-+ else
-+ code_org = ISP_CODE_ORG;
-+
-+ if (dodnld) {
-+ isp->isp_mbxworkp = (void *) &isp->isp_mdvec->dv_ispfw[1];
-+ isp->isp_mbxwrk0 = isp->isp_mdvec->dv_ispfw[3] - 1;
-+ isp->isp_mbxwrk1 = code_org + 1;
-+ mbs.param[0] = MBOX_WRITE_RAM_WORD;
-+ mbs.param[1] = code_org;
-+ mbs.param[2] = isp->isp_mdvec->dv_ispfw[0];
-+ isp_mboxcmd(isp, &mbs, MBLOGNONE);
-+ if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
-+ isp_prt(isp, ISP_LOGERR,
-+ "F/W download failed at word %d",
-+ isp->isp_mbxwrk1 - code_org);
-+ dodnld = 0;
-+ goto again;
-+ }
-+ /*
-+ * Verify that it downloaded correctly.
-+ */
-+ mbs.param[0] = MBOX_VERIFY_CHECKSUM;
-+ mbs.param[1] = code_org;
-+ isp_mboxcmd(isp, &mbs, MBLOGNONE);
-+ if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
-+ isp_prt(isp, ISP_LOGERR, "Ram Checksum Failure");
-+ return;
-+ }
-+ isp->isp_loaded_fw = 1;
-+ } else {
-+ isp->isp_loaded_fw = 0;
-+ isp_prt(isp, ISP_LOGDEBUG2, "skipping f/w download");
-+ }
-+
-+ /*
-+ * Now start it rolling.
-+ *
-+ * If we didn't actually download f/w,
-+ * we still need to (re)start it.
-+ */
-+
-+
-+ mbs.param[0] = MBOX_EXEC_FIRMWARE;
-+ mbs.param[1] = code_org;
-+ isp_mboxcmd(isp, &mbs, MBLOGNONE);
-+ /*
-+ * Give it a chance to start.
-+ */
-+ USEC_DELAY(500);
-+
-+ if (IS_SCSI(isp)) {
-+ /*
-+ * Set CLOCK RATE, but only if asked to.
-+ */
-+ if (isp->isp_clock) {
-+ mbs.param[0] = MBOX_SET_CLOCK_RATE;
-+ mbs.param[1] = isp->isp_clock;
-+ isp_mboxcmd(isp, &mbs, MBLOGALL);
-+ /* we will try not to care if this fails */
-+ }
-+ }
-+
-+ mbs.param[0] = MBOX_ABOUT_FIRMWARE;
-+ isp_mboxcmd(isp, &mbs, MBLOGALL);
-+ if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
-+ return;
-+ }
-+
-+ /*
-+ * The SBus firmware that we are using apparently does not return
-+ * major, minor, micro revisions in the mailbox registers, which
-+ * is really, really, annoying.
-+ */
-+ if (ISP_SBUS_SUPPORTED && isp->isp_bustype == ISP_BT_SBUS) {
-+ if (dodnld) {
-+#ifdef ISP_TARGET_MODE
-+ isp->isp_fwrev[0] = 7;
-+ isp->isp_fwrev[1] = 55;
-+#else
-+ isp->isp_fwrev[0] = 1;
-+ isp->isp_fwrev[1] = 37;
-+#endif
-+ isp->isp_fwrev[2] = 0;
-+ }
-+ } else {
-+ isp->isp_fwrev[0] = mbs.param[1];
-+ isp->isp_fwrev[1] = mbs.param[2];
-+ isp->isp_fwrev[2] = mbs.param[3];
-+ }
-+ isp_prt(isp, ISP_LOGCONFIG,
-+ "Board Type %s, Chip Revision 0x%x, %s F/W Revision %d.%d.%d",
-+ btype, isp->isp_revision, dodnld? "loaded" : "resident",
-+ isp->isp_fwrev[0], isp->isp_fwrev[1], isp->isp_fwrev[2]);
-+
-+ if (IS_FC(isp)) {
-+ /*
-+ * We do not believe firmware attributes for 2100 code less
-+ * than 1.17.0, unless it's the firmware we specifically
-+ * are loading.
-+ *
-+ * Note that all 22XX and 23XX f/w is greater than 1.X.0.
-+ */
-+ if (!(ISP_FW_NEWER_THAN(isp, 1, 17, 0))) {
-+#ifdef USE_SMALLER_2100_FIRMWARE
-+ FCPARAM(isp)->isp_fwattr = ISP_FW_ATTR_SCCLUN;
-+#else
-+ FCPARAM(isp)->isp_fwattr = 0;
-+#endif
-+ } else {
-+ FCPARAM(isp)->isp_fwattr = mbs.param[6];
-+ isp_prt(isp, ISP_LOGDEBUG0,
-+ "Firmware Attributes = 0x%x", mbs.param[6]);
-+ }
-+ if (ISP_READ(isp, BIU2100_CSR) & BIU2100_PCI64) {
-+ isp_prt(isp, ISP_LOGCONFIG,
-+ "Installed in 64-Bit PCI slot");
-+ }
-+ }
-+
-+ if (isp->isp_romfw_rev[0] || isp->isp_romfw_rev[1] ||
-+ isp->isp_romfw_rev[2]) {
-+ isp_prt(isp, ISP_LOGCONFIG, "Last F/W revision was %d.%d.%d",
-+ isp->isp_romfw_rev[0], isp->isp_romfw_rev[1],
-+ isp->isp_romfw_rev[2]);
-+ }
-+
-+ mbs.param[0] = MBOX_GET_FIRMWARE_STATUS;
-+ isp_mboxcmd(isp, &mbs, MBLOGALL);
-+ if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
-+ return;
-+ }
-+ isp->isp_maxcmds = mbs.param[2];
-+ isp_prt(isp, ISP_LOGINFO,
-+ "%d max I/O commands supported", mbs.param[2]);
-+ isp_fw_state(isp);
-+
-+ /*
-+ * Set up DMA for the request and result mailboxes.
-+ */
-+ if (ISP_MBOXDMASETUP(isp) != 0) {
-+ isp_prt(isp, ISP_LOGERR, "Cannot setup DMA");
-+ return;
-+ }
-+ isp->isp_state = ISP_RESETSTATE;
-+
-+ /*
-+ * Okay- now that we have new firmware running, we now (re)set our
-+ * notion of how many luns we support. This is somewhat tricky because
-+ * if we haven't loaded firmware, we sometimes do not have an easy way
-+ * of knowing how many luns we support.
-+ *
-+ * Expanded lun firmware gives you 32 luns for SCSI cards and
-+ * 16384 luns for Fibre Channel cards.
-+ *
-+ * It turns out that even for QLogic 2100s with ROM 1.10 and above
-+ * we do get a firmware attributes word returned in mailbox register 6.
-+ *
-+ * Because the lun is in a different position in the Request Queue
-+ * Entry structure for Fibre Channel with expanded lun firmware, we
-+ * can only support one lun (lun zero) when we don't know what kind
-+ * of firmware we're running.
-+ */
-+ if (IS_SCSI(isp)) {
-+ if (dodnld) {
-+ if (IS_ULTRA2(isp) || IS_ULTRA3(isp)) {
-+ isp->isp_maxluns = 32;
-+ } else {
-+ isp->isp_maxluns = 8;
-+ }
-+ } else {
-+ isp->isp_maxluns = 8;
-+ }
-+ } else {
-+ if (FCPARAM(isp)->isp_fwattr & ISP_FW_ATTR_SCCLUN) {
-+ isp->isp_maxluns = 16384;
-+ } else {
-+ isp->isp_maxluns = 16;
-+ }
-+ }
-+}
-+
-+/*
-+ * Initialize Parameters of Hardware to a known state.
-+ *
-+ * Locks are held before coming here.
-+ */
-+
-+void
-+isp_init(struct ispsoftc *isp)
-+{
-+ /*
-+ * Must do this first to get defaults established.
-+ */
-+ isp_setdfltparm(isp, 0);
-+ if (IS_DUALBUS(isp)) {
-+ isp_setdfltparm(isp, 1);
-+ }
-+ if (IS_FC(isp)) {
-+ isp_fibre_init(isp);
-+ } else {
-+ isp_scsi_init(isp);
-+ }
-+}
-+
-+static void
-+isp_scsi_init(struct ispsoftc *isp)
-+{
-+ sdparam *sdp_chan0, *sdp_chan1;
-+ mbreg_t mbs;
-+
-+ sdp_chan0 = isp->isp_param;
-+ sdp_chan1 = sdp_chan0;
-+ if (IS_DUALBUS(isp)) {
-+ sdp_chan1++;
-+ }
-+
-+ /*
-+ * If we have no role (neither target nor initiator), return.
-+ */
-+ if (isp->isp_role == ISP_ROLE_NONE) {
-+ return;
-+ }
-+
-+ /* First do overall per-card settings. */
-+
-+ /*
-+ * If we have fast memory timing enabled, turn it on.
-+ */
-+ if (sdp_chan0->isp_fast_mttr) {
-+ ISP_WRITE(isp, RISC_MTR, 0x1313);
-+ }
-+
-+ /*
-+ * Set Retry Delay and Count.
-+ * You set both channels at the same time.
-+ */
-+ mbs.param[0] = MBOX_SET_RETRY_COUNT;
-+ mbs.param[1] = sdp_chan0->isp_retry_count;
-+ mbs.param[2] = sdp_chan0->isp_retry_delay;
-+ mbs.param[6] = sdp_chan1->isp_retry_count;
-+ mbs.param[7] = sdp_chan1->isp_retry_delay;
-+
-+ isp_mboxcmd(isp, &mbs, MBLOGALL);
-+ if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
-+ return;
-+ }
-+
-+ /*
-+ * Set ASYNC DATA SETUP time. This is very important.
-+ */
-+ mbs.param[0] = MBOX_SET_ASYNC_DATA_SETUP_TIME;
-+ mbs.param[1] = sdp_chan0->isp_async_data_setup;
-+ mbs.param[2] = sdp_chan1->isp_async_data_setup;
-+ isp_mboxcmd(isp, &mbs, MBLOGALL);
-+ if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
-+ return;
-+ }
-+
-+ /*
-+ * Set ACTIVE Negation State.
-+ */
-+ mbs.param[0] = MBOX_SET_ACT_NEG_STATE;
-+ mbs.param[1] =
-+ (sdp_chan0->isp_req_ack_active_neg << 4) |
-+ (sdp_chan0->isp_data_line_active_neg << 5);
-+ mbs.param[2] =
-+ (sdp_chan1->isp_req_ack_active_neg << 4) |
-+ (sdp_chan1->isp_data_line_active_neg << 5);
-+
-+ isp_mboxcmd(isp, &mbs, MBLOGNONE);
-+ if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
-+ isp_prt(isp, ISP_LOGERR,
-+ "failed to set active negation state (%d,%d), (%d,%d)",
-+ sdp_chan0->isp_req_ack_active_neg,
-+ sdp_chan0->isp_data_line_active_neg,
-+ sdp_chan1->isp_req_ack_active_neg,
-+ sdp_chan1->isp_data_line_active_neg);
-+ /*
-+ * But don't return.
-+ */
-+ }
-+
-+ /*
-+ * Set the Tag Aging limit
-+ */
-+ mbs.param[0] = MBOX_SET_TAG_AGE_LIMIT;
-+ mbs.param[1] = sdp_chan0->isp_tag_aging;
-+ mbs.param[2] = sdp_chan1->isp_tag_aging;
-+ isp_mboxcmd(isp, &mbs, MBLOGALL);
-+ if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
-+ isp_prt(isp, ISP_LOGERR, "failed to set tag age limit (%d,%d)",
-+ sdp_chan0->isp_tag_aging, sdp_chan1->isp_tag_aging);
-+ return;
-+ }
-+
-+ /*
-+ * Set selection timeout.
-+ */
-+ mbs.param[0] = MBOX_SET_SELECT_TIMEOUT;
-+ mbs.param[1] = sdp_chan0->isp_selection_timeout;
-+ mbs.param[2] = sdp_chan1->isp_selection_timeout;
-+ isp_mboxcmd(isp, &mbs, MBLOGALL);
-+ if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
-+ return;
-+ }
-+
-+ /* now do per-channel settings */
-+ isp_scsi_channel_init(isp, 0);
-+ if (IS_DUALBUS(isp))
-+ isp_scsi_channel_init(isp, 1);
-+
-+ /*
-+ * Now enable request/response queues
-+ */
-+
-+ if (IS_ULTRA2(isp) || IS_1240(isp)) {
-+ mbs.param[0] = MBOX_INIT_RES_QUEUE_A64;
-+ mbs.param[1] = RESULT_QUEUE_LEN(isp);
-+ mbs.param[2] = DMA_WD1(isp->isp_result_dma);
-+ mbs.param[3] = DMA_WD0(isp->isp_result_dma);
-+ mbs.param[4] = 0;
-+ mbs.param[6] = DMA_WD3(isp->isp_result_dma);
-+ mbs.param[7] = DMA_WD2(isp->isp_result_dma);
-+ isp_mboxcmd(isp, &mbs, MBLOGALL);
-+ if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
-+ return;
-+ }
-+ isp->isp_residx = mbs.param[5];
-+
-+ mbs.param[0] = MBOX_INIT_REQ_QUEUE_A64;
-+ mbs.param[1] = RQUEST_QUEUE_LEN(isp);
-+ mbs.param[2] = DMA_WD1(isp->isp_rquest_dma);
-+ mbs.param[3] = DMA_WD0(isp->isp_rquest_dma);
-+ mbs.param[5] = 0;
-+ mbs.param[6] = DMA_WD3(isp->isp_result_dma);
-+ mbs.param[7] = DMA_WD2(isp->isp_result_dma);
-+ isp_mboxcmd(isp, &mbs, MBLOGALL);
-+ if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
-+ return;
-+ }
-+ isp->isp_reqidx = isp->isp_reqodx = mbs.param[4];
-+ } else {
-+ mbs.param[0] = MBOX_INIT_RES_QUEUE;
-+ mbs.param[1] = RESULT_QUEUE_LEN(isp);
-+ mbs.param[2] = DMA_WD1(isp->isp_result_dma);
-+ mbs.param[3] = DMA_WD0(isp->isp_result_dma);
-+ mbs.param[4] = 0;
-+ isp_mboxcmd(isp, &mbs, MBLOGALL);
-+ if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
-+ return;
-+ }
-+ isp->isp_residx = mbs.param[5];
-+
-+ mbs.param[0] = MBOX_INIT_REQ_QUEUE;
-+ mbs.param[1] = RQUEST_QUEUE_LEN(isp);
-+ mbs.param[2] = DMA_WD1(isp->isp_rquest_dma);
-+ mbs.param[3] = DMA_WD0(isp->isp_rquest_dma);
-+ mbs.param[5] = 0;
-+ isp_mboxcmd(isp, &mbs, MBLOGALL);
-+ if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
-+ return;
-+ }
-+ isp->isp_reqidx = isp->isp_reqodx = mbs.param[4];
-+ }
-+
-+ /*
-+ * Turn on Fast Posting, LVD transitions
-+ *
-+ * Ultra2 F/W always has had fast posting (and LVD transitions)
-+ *
-+ * Ultra and older (i.e., SBus) cards may not. It's just safer
-+ * to assume not for them.
-+ */
-+
-+ mbs.param[0] = MBOX_SET_FW_FEATURES;
-+ mbs.param[1] = 0;
-+ if (IS_ULTRA2(isp))
-+ mbs.param[1] |= FW_FEATURE_LVD_NOTIFY;
-+#ifndef ISP_NO_RIO
-+ if (IS_ULTRA2(isp) || IS_1240(isp))
-+ mbs.param[1] |= FW_FEATURE_RIO_16BIT;
-+#else
-+#ifndef ISP_NO_FASTPOST
-+ if (IS_ULTRA2(isp) || IS_1240(isp))
-+ mbs.param[1] |= FW_FEATURE_FAST_POST;
-+#endif
-+#endif
-+ if (mbs.param[1] != 0) {
-+ u_int16_t sfeat = mbs.param[1];
-+ isp_mboxcmd(isp, &mbs, MBLOGALL);
-+ if (mbs.param[0] == MBOX_COMMAND_COMPLETE) {
-+ isp_prt(isp, ISP_LOGINFO,
-+ "Enabled FW features (0x%x)", sfeat);
-+ }
-+ }
-+
-+ /*
-+ * Let the outer layers decide whether to issue a SCSI bus reset.
-+ */
-+ isp->isp_state = ISP_INITSTATE;
-+}
-+
-+static void
-+isp_scsi_channel_init(struct ispsoftc *isp, int channel)
-+{
-+ sdparam *sdp;
-+ mbreg_t mbs;
-+ int tgt;
-+
-+ sdp = isp->isp_param;
-+ sdp += channel;
-+
-+ /*
-+ * Set (possibly new) Initiator ID.
-+ */
-+ mbs.param[0] = MBOX_SET_INIT_SCSI_ID;
-+ mbs.param[1] = (channel << 7) | sdp->isp_initiator_id;
-+ isp_mboxcmd(isp, &mbs, MBLOGALL);
-+ if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
-+ return;
-+ }
-+ isp_prt(isp, ISP_LOGINFO, "Initiator ID is %d on Channel %d",
-+ sdp->isp_initiator_id, channel);
-+
-+
-+ /*
-+ * Set current per-target parameters to an initial safe minimum.
-+ */
-+ for (tgt = 0; tgt < MAX_TARGETS; tgt++) {
-+ int lun;
-+ u_int16_t sdf;
-+
-+ if (sdp->isp_devparam[tgt].dev_enable == 0) {
-+ continue;
-+ }
-+#ifndef ISP_TARGET_MODE
-+ sdf = sdp->isp_devparam[tgt].goal_flags;
-+ sdf &= DPARM_SAFE_DFLT;
-+ /*
-+ * It is not quite clear when this changed over so that
-+ * we could force narrow and async for 1000/1020 cards,
-+ * but assume that this is only the case for loaded
-+ * firmware.
-+ */
-+ if (isp->isp_loaded_fw) {
-+ sdf |= DPARM_NARROW | DPARM_ASYNC;
-+ }
-+#else
-+ /*
-+ * The !$*!)$!$)* f/w uses the same index into some
-+ * internal table to decide how to respond to negotiations,
-+ * so if we've said "let's be safe" for ID X, and ID X
-+ * selects *us*, the negotiations will back to 'safe'
-+ * (as in narrow/async). What the f/w *should* do is
-+ * use the initiator id settings to decide how to respond.
-+ */
-+ sdp->isp_devparam[tgt].goal_flags = sdf = DPARM_DEFAULT;
-+#endif
-+ mbs.param[0] = MBOX_SET_TARGET_PARAMS;
-+ mbs.param[1] = (channel << 15) | (tgt << 8);
-+ mbs.param[2] = sdf;
-+ if ((sdf & DPARM_SYNC) == 0) {
-+ mbs.param[3] = 0;
-+ } else {
-+ mbs.param[3] =
-+ (sdp->isp_devparam[tgt].goal_offset << 8) |
-+ (sdp->isp_devparam[tgt].goal_period);
-+ }
-+ isp_prt(isp, ISP_LOGDEBUG0,
-+ "Initial Settings bus%d tgt%d flags 0x%x off 0x%x per 0x%x",
-+ channel, tgt, mbs.param[2], mbs.param[3] >> 8,
-+ mbs.param[3] & 0xff);
-+ isp_mboxcmd(isp, &mbs, MBLOGNONE);
-+ if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
-+ sdf = DPARM_SAFE_DFLT;
-+ mbs.param[0] = MBOX_SET_TARGET_PARAMS;
-+ mbs.param[1] = (tgt << 8) | (channel << 15);
-+ mbs.param[2] = sdf;
-+ mbs.param[3] = 0;
-+ isp_mboxcmd(isp, &mbs, MBLOGALL);
-+ if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
-+ continue;
-+ }
-+ }
-+
-+ /*
-+ * We don't update any information directly from the f/w
-+ * because we need to run at least one command to cause a
-+ * new state to be latched up. So, we just assume that we
-+ * converge to the values we just had set.
-+ *
-+ * Ensure that we don't believe tagged queuing is enabled yet.
-+ * It turns out that sometimes the ISP just ignores our
-+ * attempts to set parameters for devices that it hasn't
-+ * seen yet.
-+ */
-+ sdp->isp_devparam[tgt].actv_flags = sdf & ~DPARM_TQING;
-+ for (lun = 0; lun < (int) isp->isp_maxluns; lun++) {
-+ mbs.param[0] = MBOX_SET_DEV_QUEUE_PARAMS;
-+ mbs.param[1] = (channel << 15) | (tgt << 8) | lun;
-+ mbs.param[2] = sdp->isp_max_queue_depth;
-+ mbs.param[3] = sdp->isp_devparam[tgt].exc_throttle;
-+ isp_mboxcmd(isp, &mbs, MBLOGALL);
-+ if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
-+ break;
-+ }
-+ }
-+ }
-+ for (tgt = 0; tgt < MAX_TARGETS; tgt++) {
-+ if (sdp->isp_devparam[tgt].dev_refresh) {
-+ isp->isp_sendmarker |= (1 << channel);
-+ isp->isp_update |= (1 << channel);
-+ break;
-+ }
-+ }
-+}
-+
-+/*
-+ * Fibre Channel specific initialization.
-+ *
-+ * Locks are held before coming here.
-+ */
-+static void
-+isp_fibre_init(struct ispsoftc *isp)
-+{
-+ fcparam *fcp;
-+ isp_icb_t local, *icbp = &local;
-+ mbreg_t mbs;
-+ int loopid;
-+ u_int64_t nwwn, pwwn;
-+
-+ fcp = isp->isp_param;
-+
-+ /*
-+ * Do this *before* initializing the firmware.
-+ */
-+ isp_mark_getpdb_all(isp);
-+ fcp->isp_fwstate = FW_CONFIG_WAIT;
-+ fcp->isp_loopstate = LOOP_NIL;
-+
-+ /*
-+ * If we have no role (neither target nor initiator), return.
-+ */
-+ if (isp->isp_role == ISP_ROLE_NONE) {
-+ return;
-+ }
-+
-+ loopid = fcp->isp_loopid;
-+ MEMZERO(icbp, sizeof (*icbp));
-+ icbp->icb_version = ICB_VERSION1;
-+
-+ /*
-+ * Firmware Options are either retrieved from NVRAM or
-+ * are patched elsewhere. We check them for sanity here
-+ * and make changes based on board revision, but otherwise
-+ * let others decide policy.
-+ */
-+
-+ /*
-+ * If this is a 2100 < revision 5, we have to turn off FAIRNESS.
-+ */
-+ if ((isp->isp_type == ISP_HA_FC_2100) && isp->isp_revision < 5) {
-+ fcp->isp_fwoptions &= ~ICBOPT_FAIRNESS;
-+ }
-+
-+ /*
-+ * We have to use FULL LOGIN even though it resets the loop too much
-+ * because otherwise port database entries don't get updated after
-+ * a LIP- this is a known f/w bug for 2100 f/w less than 1.17.0.
-+ */
-+ if (!ISP_FW_NEWER_THAN(isp, 1, 17, 0)) {
-+ fcp->isp_fwoptions |= ICBOPT_FULL_LOGIN;
-+ }
-+
-+ /*
-+ * Insist on Port Database Update Async notifications
-+ */
-+ fcp->isp_fwoptions |= ICBOPT_PDBCHANGE_AE;
-+
-+ /*
-+ * Make sure that target role reflects into fwoptions.
-+ */
-+ if (isp->isp_role & ISP_ROLE_TARGET) {
-+ fcp->isp_fwoptions |= ICBOPT_TGT_ENABLE;
-+ } else {
-+ fcp->isp_fwoptions &= ~ICBOPT_TGT_ENABLE;
-+ }
-+
-+ /*
-+ * Propagate all of this into the ICB structure.
-+ */
-+ icbp->icb_fwoptions = fcp->isp_fwoptions;
-+ icbp->icb_maxfrmlen = fcp->isp_maxfrmlen;
-+ if (icbp->icb_maxfrmlen < ICB_MIN_FRMLEN ||
-+ icbp->icb_maxfrmlen > ICB_MAX_FRMLEN) {
-+ isp_prt(isp, ISP_LOGERR,
-+ "bad frame length (%d) from NVRAM- using %d",
-+ fcp->isp_maxfrmlen, ICB_DFLT_FRMLEN);
-+ icbp->icb_maxfrmlen = ICB_DFLT_FRMLEN;
-+ }
-+ icbp->icb_maxalloc = fcp->isp_maxalloc;
-+ if (icbp->icb_maxalloc < 1) {
-+ isp_prt(isp, ISP_LOGERR,
-+ "bad maximum allocation (%d)- using 16", fcp->isp_maxalloc);
-+ icbp->icb_maxalloc = 16;
-+ }
-+ icbp->icb_execthrottle = fcp->isp_execthrottle;
-+ if (icbp->icb_execthrottle < 1) {
-+ isp_prt(isp, ISP_LOGERR,
-+ "bad execution throttle of %d- using 16",
-+ fcp->isp_execthrottle);
-+ icbp->icb_execthrottle = ICB_DFLT_THROTTLE;
-+ }
-+ icbp->icb_retry_delay = fcp->isp_retry_delay;
-+ icbp->icb_retry_count = fcp->isp_retry_count;
-+ icbp->icb_hardaddr = loopid;
-+ /*
-+ * Right now we just set extended options to prefer point-to-point
-+ * over loop based upon some soft config options.
-+ *
-+ * NB: for the 2300, ICBOPT_EXTENDED is required.
-+ */
-+ if (IS_2200(isp) || IS_23XX(isp)) {
-+ icbp->icb_fwoptions |= ICBOPT_EXTENDED;
-+ /*
-+ * Prefer or force Point-To-Point instead Loop?
-+ */
-+ switch(isp->isp_confopts & ISP_CFG_PORT_PREF) {
-+ case ISP_CFG_NPORT:
-+ icbp->icb_xfwoptions |= ICBXOPT_PTP_2_LOOP;
-+ break;
-+ case ISP_CFG_NPORT_ONLY:
-+ icbp->icb_xfwoptions |= ICBXOPT_PTP_ONLY;
-+ break;
-+ case ISP_CFG_LPORT_ONLY:
-+ icbp->icb_xfwoptions |= ICBXOPT_LOOP_ONLY;
-+ break;
-+ default:
-+ icbp->icb_xfwoptions |= ICBXOPT_LOOP_2_PTP;
-+ break;
-+ }
-+ if (IS_23XX(isp)) {
-+ /*
-+ * QLogic recommends that FAST Posting be turned
-+ * off for 23XX cards and instead allow the HBA
-+ * to write response queue entries and interrupt
-+ * after a delay (ZIO).
-+ *
-+ * If we set ZIO, it will disable fast posting,
-+ * so we don't need to clear it in fwoptions.
-+ */
-+#ifndef ISP_NO_ZIO
-+ icbp->icb_xfwoptions |= ICBXOPT_ZIO;
-+#else
-+ icbp->icb_fwoptions |= ICBOPT_FAST_POST;
-+#endif
-+#if 0
-+ /*
-+ * Values, in 100us increments. The default
-+ * is 2 (200us) if a value 0 (default) is
-+ * selected.
-+ */
-+ icbp->icb_idelaytimer = 2;
-+#endif
-+
-+ if (isp->isp_confopts & ISP_CFG_ONEGB) {
-+ icbp->icb_zfwoptions |= ICBZOPT_RATE_ONEGB;
-+ } else if (isp->isp_confopts & ISP_CFG_TWOGB) {
-+ icbp->icb_zfwoptions |= ICBZOPT_RATE_TWOGB;
-+ } else {
-+ icbp->icb_zfwoptions |= ICBZOPT_RATE_AUTO;
-+ }
-+ }
-+ }
-+
-+#ifndef ISP_NO_RIO_FC
-+ /*
-+ * RIO seems to be enabled in 2100s for fw >= 1.17.0.
-+ *
-+ * I've had some questionable problems with RIO on 2200.
-+ * More specifically, on a 2204 I had problems with RIO
-+ * on a Linux system where I was dropping commands right
-+ * and left. It's not clear to me what the actual problem
-+ * was.
-+ *
-+ * 23XX Cards do not support RIO. Instead they support ZIO.
-+ */
-+#if 0
-+ if (!IS_23XX(isp) && ISP_FW_NEWER_THAN(isp, 1, 17, 0)) {
-+ icbp->icb_xfwoptions |= ICBXOPT_RIO_16BIT;
-+ icbp->icb_racctimer = 4;
-+ icbp->icb_idelaytimer = 8;
-+ }
-+#endif
-+#endif
-+
-+ /*
-+ * For 22XX > 2.1.26 && 23XX, set someoptions.
-+ * XXX: Probably okay for newer 2100 f/w too.
-+ */
-+ if (ISP_FW_NEWER_THAN(isp, 2, 26, 0)) {
-+ /*
-+ * Turn on LIP F8 async event (1)
-+ * Turn on generate AE 8013 on all LIP Resets (2)
-+ * Disable LIP F7 switching (8)
-+ */
-+ mbs.param[0] = MBOX_SET_FIRMWARE_OPTIONS;
-+ mbs.param[1] = 0xb;
-+ mbs.param[2] = 0;
-+ mbs.param[3] = 0;
-+ isp_mboxcmd(isp, &mbs, MBLOGALL);
-+ }
-+ icbp->icb_logintime = 30; /* 30 second login timeout */
-+
-+ if (IS_23XX(isp)) {
-+ ISP_WRITE(isp, isp->isp_rqstinrp, 0);
-+ ISP_WRITE(isp, isp->isp_rqstoutrp, 0);
-+ ISP_WRITE(isp, isp->isp_respinrp, 0);
-+ ISP_WRITE(isp, isp->isp_respoutrp, 0);
-+ }
-+
-+ nwwn = ISP_NODEWWN(isp);
-+ pwwn = ISP_PORTWWN(isp);
-+ if (nwwn && pwwn) {
-+ icbp->icb_fwoptions |= ICBOPT_BOTH_WWNS;
-+ MAKE_NODE_NAME_FROM_WWN(icbp->icb_nodename, nwwn);
-+ MAKE_NODE_NAME_FROM_WWN(icbp->icb_portname, pwwn);
-+ isp_prt(isp, ISP_LOGDEBUG1,
-+ "Setting ICB Node 0x%08x%08x Port 0x%08x%08x",
-+ ((u_int32_t) (nwwn >> 32)),
-+ ((u_int32_t) (nwwn & 0xffffffff)),
-+ ((u_int32_t) (pwwn >> 32)),
-+ ((u_int32_t) (pwwn & 0xffffffff)));
-+ } else {
-+ isp_prt(isp, ISP_LOGDEBUG1, "Not using any WWNs");
-+ icbp->icb_fwoptions &= ~(ICBOPT_BOTH_WWNS|ICBOPT_FULL_LOGIN);
-+ }
-+ icbp->icb_rqstqlen = RQUEST_QUEUE_LEN(isp);
-+ icbp->icb_rsltqlen = RESULT_QUEUE_LEN(isp);
-+ icbp->icb_rqstaddr[RQRSP_ADDR0015] = DMA_WD0(isp->isp_rquest_dma);
-+ icbp->icb_rqstaddr[RQRSP_ADDR1631] = DMA_WD1(isp->isp_rquest_dma);
-+ icbp->icb_rqstaddr[RQRSP_ADDR3247] = DMA_WD2(isp->isp_rquest_dma);
-+ icbp->icb_rqstaddr[RQRSP_ADDR4863] = DMA_WD3(isp->isp_rquest_dma);
-+ icbp->icb_respaddr[RQRSP_ADDR0015] = DMA_WD0(isp->isp_result_dma);
-+ icbp->icb_respaddr[RQRSP_ADDR1631] = DMA_WD1(isp->isp_result_dma);
-+ icbp->icb_respaddr[RQRSP_ADDR3247] = DMA_WD2(isp->isp_result_dma);
-+ icbp->icb_respaddr[RQRSP_ADDR4863] = DMA_WD3(isp->isp_result_dma);
-+ isp_prt(isp, ISP_LOGDEBUG0,
-+ "isp_fibre_init: fwopt 0x%x xfwopt 0x%x zfwopt 0x%x",
-+ icbp->icb_fwoptions, icbp->icb_xfwoptions, icbp->icb_zfwoptions);
-+
-+ FC_SCRATCH_ACQUIRE(isp);
-+ isp_put_icb(isp, icbp, (isp_icb_t *)fcp->isp_scratch);
-+
-+ /*
-+ * Init the firmware
-+ */
-+ mbs.param[0] = MBOX_INIT_FIRMWARE;
-+ mbs.param[1] = 0;
-+ mbs.param[2] = DMA_WD1(fcp->isp_scdma);
-+ mbs.param[3] = DMA_WD0(fcp->isp_scdma);
-+ mbs.param[4] = 0;
-+ mbs.param[5] = 0;
-+ mbs.param[6] = DMA_WD3(fcp->isp_scdma);
-+ mbs.param[7] = DMA_WD2(fcp->isp_scdma);
-+ isp_mboxcmd(isp, &mbs, MBLOGALL);
-+ FC_SCRATCH_RELEASE(isp);
-+ if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
-+ return;
-+ }
-+ isp->isp_reqidx = isp->isp_reqodx = 0;
-+ isp->isp_residx = 0;
-+ isp->isp_sendmarker = 1;
-+
-+ /*
-+ * Whatever happens, we're now committed to being here.
-+ */
-+ isp->isp_state = ISP_INITSTATE;
-+}
-+
-+/*
-+ * Fibre Channel Support- get the port database for the id.
-+ *
-+ * Locks are held before coming here. Return 0 if success,
-+ * else failure.
-+ */
-+
-+static int
-+isp_getmap(struct ispsoftc *isp, fcpos_map_t *map)
-+{
-+ fcparam *fcp = (fcparam *) isp->isp_param;
-+ mbreg_t mbs;
-+
-+ mbs.param[0] = MBOX_GET_FC_AL_POSITION_MAP;
-+ mbs.param[1] = 0;
-+ mbs.param[2] = DMA_WD1(fcp->isp_scdma);
-+ mbs.param[3] = DMA_WD0(fcp->isp_scdma);
-+ /*
-+ * Unneeded. For the 2100, except for initializing f/w, registers
-+ * 4/5 have to not be written to.
-+ * mbs.param[4] = 0;
-+ * mbs.param[5] = 0;
-+ *
-+ */
-+ mbs.param[6] = 0;
-+ mbs.param[7] = 0;
-+ FC_SCRATCH_ACQUIRE(isp);
-+ isp_mboxcmd(isp, &mbs, MBLOGALL & ~MBOX_COMMAND_PARAM_ERROR);
-+ if (mbs.param[0] == MBOX_COMMAND_COMPLETE) {
-+ MEMCPY(map, fcp->isp_scratch, sizeof (fcpos_map_t));
-+ map->fwmap = mbs.param[1] != 0;
-+ FC_SCRATCH_RELEASE(isp);
-+ return (0);
-+ }
-+ FC_SCRATCH_RELEASE(isp);
-+ return (-1);
-+}
-+
-+static void
-+isp_mark_getpdb_all(struct ispsoftc *isp)
-+{
-+ fcparam *fcp = (fcparam *) isp->isp_param;
-+ int i;
-+ for (i = 0; i < MAX_FC_TARG; i++) {
-+ fcp->portdb[i].valid = fcp->portdb[i].fabric_dev = 0;
-+ }
-+}
-+
-+static int
-+isp_getpdb(struct ispsoftc *isp, int id, isp_pdb_t *pdbp)
-+{
-+ fcparam *fcp = (fcparam *) isp->isp_param;
-+ mbreg_t mbs;
-+
-+ mbs.param[0] = MBOX_GET_PORT_DB;
-+ mbs.param[1] = id << 8;
-+ mbs.param[2] = DMA_WD1(fcp->isp_scdma);
-+ mbs.param[3] = DMA_WD0(fcp->isp_scdma);
-+ /*
-+ * Unneeded. For the 2100, except for initializing f/w, registers
-+ * 4/5 have to not be written to.
-+ * mbs.param[4] = 0;
-+ * mbs.param[5] = 0;
-+ *
-+ */
-+ mbs.param[6] = DMA_WD3(fcp->isp_scdma);
-+ mbs.param[7] = DMA_WD2(fcp->isp_scdma);
-+ FC_SCRATCH_ACQUIRE(isp);
-+ isp_mboxcmd(isp, &mbs, MBLOGALL & ~MBOX_COMMAND_PARAM_ERROR);
-+ if (mbs.param[0] == MBOX_COMMAND_COMPLETE) {
-+ isp_get_pdb(isp, (isp_pdb_t *)fcp->isp_scratch, pdbp);
-+ FC_SCRATCH_RELEASE(isp);
-+ return (0);
-+ }
-+ FC_SCRATCH_RELEASE(isp);
-+ return (-1);
-+}
-+
-+static u_int64_t
-+isp_get_portname(struct ispsoftc *isp, int loopid, int nodename)
-+{
-+ u_int64_t wwn = 0;
-+ mbreg_t mbs;
-+
-+ mbs.param[0] = MBOX_GET_PORT_NAME;
-+ mbs.param[1] = loopid << 8;
-+ if (nodename)
-+ mbs.param[1] |= 1;
-+ isp_mboxcmd(isp, &mbs, MBLOGALL & ~MBOX_COMMAND_PARAM_ERROR);
-+ if (mbs.param[0] == MBOX_COMMAND_COMPLETE) {
-+ wwn =
-+ (((u_int64_t)(mbs.param[2] & 0xff)) << 56) |
-+ (((u_int64_t)(mbs.param[2] >> 8)) << 48) |
-+ (((u_int64_t)(mbs.param[3] & 0xff)) << 40) |
-+ (((u_int64_t)(mbs.param[3] >> 8)) << 32) |
-+ (((u_int64_t)(mbs.param[6] & 0xff)) << 24) |
-+ (((u_int64_t)(mbs.param[6] >> 8)) << 16) |
-+ (((u_int64_t)(mbs.param[7] & 0xff)) << 8) |
-+ (((u_int64_t)(mbs.param[7] >> 8)));
-+ }
-+ return (wwn);
-+}
-+
-+/*
-+ * Make sure we have good FC link and know our Loop ID.
-+ */
-+
-+static int
-+isp_fclink_test(struct ispsoftc *isp, int usdelay)
-+{
-+ static char *toponames[] = {
-+ "Private Loop",
-+ "FL Port",
-+ "N-Port to N-Port",
-+ "F Port",
-+ "F Port (no FLOGI_ACC response)"
-+ };
-+ mbreg_t mbs;
-+ int count, check_for_fabric;
-+ u_int8_t lwfs;
-+ fcparam *fcp;
-+ struct lportdb *lp;
-+ isp_pdb_t pdb;
-+
-+ fcp = isp->isp_param;
-+
-+ /*
-+ * XXX: Here is where we would start a 'loop dead' timeout
-+ */
-+
-+ /*
-+ * Wait up to N microseconds for F/W to go to a ready state.
-+ */
-+ lwfs = FW_CONFIG_WAIT;
-+ count = 0;
-+ while (count < usdelay) {
-+ u_int64_t enano;
-+ u_int32_t wrk;
-+ NANOTIME_T hra, hrb;
-+
-+ GET_NANOTIME(&hra);
-+ isp_fw_state(isp);
-+ if (lwfs != fcp->isp_fwstate) {
-+ isp_prt(isp, ISP_LOGINFO, "Firmware State <%s->%s>",
-+ isp2100_fw_statename((int)lwfs),
-+ isp2100_fw_statename((int)fcp->isp_fwstate));
-+ lwfs = fcp->isp_fwstate;
-+ }
-+ if (fcp->isp_fwstate == FW_READY) {
-+ break;
-+ }
-+ GET_NANOTIME(&hrb);
-+
-+ /*
-+ * Get the elapsed time in nanoseconds.
-+ * Always guaranteed to be non-zero.
-+ */
-+ enano = NANOTIME_SUB(&hrb, &hra);
-+
-+ isp_prt(isp, ISP_LOGDEBUG1,
-+ "usec%d: 0x%lx->0x%lx enano 0x%x%08x",
-+ count, (long) GET_NANOSEC(&hra), (long) GET_NANOSEC(&hrb),
-+ (u_int32_t)(enano >> 32), (u_int32_t)(enano & 0xffffffff));
-+
-+ /*
-+ * If the elapsed time is less than 1 millisecond,
-+ * delay a period of time up to that millisecond of
-+ * waiting.
-+ *
-+ * This peculiar code is an attempt to try and avoid
-+ * invoking u_int64_t math support functions for some
-+ * platforms where linkage is a problem.
-+ */
-+ if (enano < (1000 * 1000)) {
-+ count += 1000;
-+ enano = (1000 * 1000) - enano;
-+ while (enano > (u_int64_t) 4000000000U) {
-+ USEC_SLEEP(isp, 4000000);
-+ enano -= (u_int64_t) 4000000000U;
-+ }
-+ wrk = enano;
-+ wrk /= 1000;
-+ USEC_SLEEP(isp, wrk);
-+ } else {
-+ while (enano > (u_int64_t) 4000000000U) {
-+ count += 4000000;
-+ enano -= (u_int64_t) 4000000000U;
-+ }
-+ wrk = enano;
-+ count += (wrk / 1000);
-+ }
-+ }
-+
-+ /*
-+ * If we haven't gone to 'ready' state, return.
-+ */
-+ if (fcp->isp_fwstate != FW_READY) {
-+ return (-1);
-+ }
-+
-+ /*
-+ * Get our Loop ID (if possible). We really need to have it.
-+ */
-+ mbs.param[0] = MBOX_GET_LOOP_ID;
-+ isp_mboxcmd(isp, &mbs, MBLOGALL);
-+ if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
-+ return (-1);
-+ }
-+ fcp->isp_loopid = mbs.param[1];
-+ if (IS_2200(isp) || IS_23XX(isp)) {
-+ int topo = (int) mbs.param[6];
-+ if (topo < TOPO_NL_PORT || topo > TOPO_PTP_STUB)
-+ topo = TOPO_PTP_STUB;
-+ fcp->isp_topo = topo;
-+ } else {
-+ fcp->isp_topo = TOPO_NL_PORT;
-+ }
-+ fcp->isp_portid = fcp->isp_alpa = mbs.param[2] & 0xff;
-+
-+ /*
-+ * Check to see if we're on a fabric by trying to see if we
-+ * can talk to the fabric name server. This can be a bit
-+ * tricky because if we're a 2100, we should check always
-+ * (in case we're connected to a server doing aliasing).
-+ */
-+ fcp->isp_onfabric = 0;
-+
-+ if (IS_2100(isp)) {
-+ /*
-+ * Don't bother with fabric if we are using really old
-+ * 2100 firmware. It's just not worth it.
-+ */
-+ if (ISP_FW_NEWER_THAN(isp, 1, 15, 37)) {
-+ check_for_fabric = 1;
-+ } else {
-+ check_for_fabric = 0;
-+ }
-+ } else if (fcp->isp_topo == TOPO_FL_PORT ||
-+ fcp->isp_topo == TOPO_F_PORT) {
-+ check_for_fabric = 1;
-+ } else
-+ check_for_fabric = 0;
-+
-+ if (check_for_fabric && isp_getpdb(isp, FL_PORT_ID, &pdb) == 0) {
-+ int loopid = FL_PORT_ID;
-+ if (IS_2100(isp)) {
-+ fcp->isp_topo = TOPO_FL_PORT;
-+ }
-+
-+ if (BITS2WORD(pdb.pdb_portid_bits) == 0) {
-+ /*
-+ * Crock.
-+ */
-+ fcp->isp_topo = TOPO_NL_PORT;
-+ goto not_on_fabric;
-+ }
-+ fcp->isp_portid = mbs.param[2] | ((int) mbs.param[3] << 16);
-+
-+ /*
-+ * Save the Fabric controller's port database entry.
-+ */
-+ lp = &fcp->portdb[loopid];
-+ lp->node_wwn =
-+ (((u_int64_t)pdb.pdb_nodename[0]) << 56) |
-+ (((u_int64_t)pdb.pdb_nodename[1]) << 48) |
-+ (((u_int64_t)pdb.pdb_nodename[2]) << 40) |
-+ (((u_int64_t)pdb.pdb_nodename[3]) << 32) |
-+ (((u_int64_t)pdb.pdb_nodename[4]) << 24) |
-+ (((u_int64_t)pdb.pdb_nodename[5]) << 16) |
-+ (((u_int64_t)pdb.pdb_nodename[6]) << 8) |
-+ (((u_int64_t)pdb.pdb_nodename[7]));
-+ lp->port_wwn =
-+ (((u_int64_t)pdb.pdb_portname[0]) << 56) |
-+ (((u_int64_t)pdb.pdb_portname[1]) << 48) |
-+ (((u_int64_t)pdb.pdb_portname[2]) << 40) |
-+ (((u_int64_t)pdb.pdb_portname[3]) << 32) |
-+ (((u_int64_t)pdb.pdb_portname[4]) << 24) |
-+ (((u_int64_t)pdb.pdb_portname[5]) << 16) |
-+ (((u_int64_t)pdb.pdb_portname[6]) << 8) |
-+ (((u_int64_t)pdb.pdb_portname[7]));
-+ lp->roles =
-+ (pdb.pdb_prli_svc3 & SVC3_ROLE_MASK) >> SVC3_ROLE_SHIFT;
-+ lp->portid = BITS2WORD(pdb.pdb_portid_bits);
-+ lp->loopid = pdb.pdb_loopid;
-+ lp->loggedin = lp->valid = 1;
-+ fcp->isp_onfabric = 1;
-+ (void) isp_async(isp, ISPASYNC_PROMENADE, &loopid);
-+ isp_register_fc4_type(isp);
-+ } else {
-+not_on_fabric:
-+ fcp->isp_onfabric = 0;
-+ fcp->portdb[FL_PORT_ID].valid = 0;
-+ }
-+
-+ fcp->isp_gbspeed = 1;
-+ if (IS_23XX(isp)) {
-+ mbs.param[0] = MBOX_GET_SET_DATA_RATE;
-+ mbs.param[1] = MBGSD_GET_RATE;
-+ /* mbs.param[2] undefined if we're just getting rate */
-+ isp_mboxcmd(isp, &mbs, MBLOGALL);
-+ if (mbs.param[0] == MBOX_COMMAND_COMPLETE) {
-+ if (mbs.param[1] == MBGSD_TWOGB) {
-+ isp_prt(isp, ISP_LOGINFO, "2Gb link speed/s");
-+ fcp->isp_gbspeed = 2;
-+ }
-+ }
-+ }
-+
-+ isp_prt(isp, ISP_LOGCONFIG, topology, fcp->isp_loopid, fcp->isp_alpa,
-+ fcp->isp_portid, fcp->isp_loopstate, toponames[fcp->isp_topo]);
-+
-+ /*
-+ * Announce ourselves, too. This involves synthesizing an entry.
-+ */
-+ if (fcp->isp_iid_set == 0) {
-+ fcp->isp_iid_set = 1;
-+ fcp->isp_iid = fcp->isp_loopid;
-+ lp = &fcp->portdb[fcp->isp_iid];
-+ } else {
-+ lp = &fcp->portdb[fcp->isp_iid];
-+ if (fcp->isp_portid != lp->portid ||
-+ fcp->isp_loopid != lp->loopid ||
-+ fcp->isp_nodewwn != ISP_NODEWWN(isp) ||
-+ fcp->isp_portwwn != ISP_PORTWWN(isp)) {
-+ lp->valid = 0;
-+ count = fcp->isp_iid;
-+ (void) isp_async(isp, ISPASYNC_PROMENADE, &count);
-+ }
-+ }
-+ lp->loopid = fcp->isp_loopid;
-+ lp->portid = fcp->isp_portid;
-+ lp->node_wwn = ISP_NODEWWN(isp);
-+ lp->port_wwn = ISP_PORTWWN(isp);
-+ switch (isp->isp_role) {
-+ case ISP_ROLE_NONE:
-+ lp->roles = 0;
-+ break;
-+ case ISP_ROLE_TARGET:
-+ lp->roles = SVC3_TGT_ROLE >> SVC3_ROLE_SHIFT;
-+ break;
-+ case ISP_ROLE_INITIATOR:
-+ lp->roles = SVC3_INI_ROLE >> SVC3_ROLE_SHIFT;
-+ break;
-+ case ISP_ROLE_BOTH:
-+ lp->roles = (SVC3_INI_ROLE|SVC3_TGT_ROLE) >> SVC3_ROLE_SHIFT;
-+ break;
-+ }
-+ lp->loggedin = lp->valid = 1;
-+ count = fcp->isp_iid;
-+ (void) isp_async(isp, ISPASYNC_PROMENADE, &count);
-+ return (0);
-+}
-+
-+static char *
-+isp2100_fw_statename(int state)
-+{
-+ switch(state) {
-+ case FW_CONFIG_WAIT: return "Config Wait";
-+ case FW_WAIT_AL_PA: return "Waiting for AL_PA";
-+ case FW_WAIT_LOGIN: return "Wait Login";
-+ case FW_READY: return "Ready";
-+ case FW_LOSS_OF_SYNC: return "Loss Of Sync";
-+ case FW_ERROR: return "Error";
-+ case FW_REINIT: return "Re-Init";
-+ case FW_NON_PART: return "Nonparticipating";
-+ default: return "?????";
-+ }
-+}
-+
-+/*
-+ * Synchronize our soft copy of the port database with what the f/w thinks
-+ * (with a view toward possibly for a specific target....)
-+ */
-+
-+static int
-+isp_pdb_sync(struct ispsoftc *isp)
-+{
-+ struct lportdb *lp;
-+ fcparam *fcp = isp->isp_param;
-+ isp_pdb_t pdb;
-+ int loopid, base, lim;
-+
-+ /*
-+ * Make sure we're okay for doing this right now.
-+ */
-+ if (fcp->isp_loopstate != LOOP_PDB_RCVD &&
-+ fcp->isp_loopstate != LOOP_FSCAN_DONE &&
-+ fcp->isp_loopstate != LOOP_LSCAN_DONE) {
-+ return (-1);
-+ }
-+
-+ if (fcp->isp_topo == TOPO_FL_PORT || fcp->isp_topo == TOPO_NL_PORT ||
-+ fcp->isp_topo == TOPO_N_PORT) {
-+ if (fcp->isp_loopstate < LOOP_LSCAN_DONE) {
-+ if (isp_scan_loop(isp) != 0) {
-+ return (-1);
-+ }
-+ }
-+ }
-+ fcp->isp_loopstate = LOOP_SYNCING_PDB;
-+
-+ /*
-+ * If we get this far, we've settled our differences with the f/w
-+ * (for local loop device) and we can say that the loop state is ready.
-+ */
-+
-+ if (fcp->isp_topo == TOPO_NL_PORT) {
-+ fcp->loop_seen_once = 1;
-+ fcp->isp_loopstate = LOOP_READY;
-+ return (0);
-+ }
-+
-+ /*
-+ * Find all Fabric Entities that didn't make it from one scan to the
-+ * next and let the world know they went away. Scan the whole database.
-+ */
-+ for (lp = &fcp->portdb[0]; lp < &fcp->portdb[MAX_FC_TARG]; lp++) {
-+ if (lp->was_fabric_dev && lp->fabric_dev == 0) {
-+ loopid = lp - fcp->portdb;
-+ lp->valid = 0; /* should already be set */
-+ (void) isp_async(isp, ISPASYNC_PROMENADE, &loopid);
-+ MEMZERO((void *) lp, sizeof (*lp));
-+ continue;
-+ }
-+ lp->was_fabric_dev = lp->fabric_dev;
-+ }
-+
-+ if (fcp->isp_topo == TOPO_FL_PORT)
-+ base = FC_SNS_ID+1;
-+ else
-+ base = 0;
-+
-+ if (fcp->isp_topo == TOPO_N_PORT)
-+ lim = 1;
-+ else
-+ lim = MAX_FC_TARG;
-+
-+ /*
-+ * Now log in any fabric devices that the outer layer has
-+ * left for us to see. This seems the most sane policy
-+ * for the moment.
-+ */
-+ for (lp = &fcp->portdb[base]; lp < &fcp->portdb[lim]; lp++) {
-+ u_int32_t portid;
-+ mbreg_t mbs;
-+
-+ loopid = lp - fcp->portdb;
-+ if (loopid >= FL_PORT_ID && loopid <= FC_SNS_ID) {
-+ continue;
-+ }
-+
-+ /*
-+ * Anything here?
-+ */
-+ if (lp->port_wwn == 0) {
-+ continue;
-+ }
-+
-+ /*
-+ * Don't try to log into yourself.
-+ */
-+ if ((portid = lp->portid) == fcp->isp_portid) {
-+ continue;
-+ }
-+
-+
-+ /*
-+ * If we'd been logged in- see if we still are and we haven't
-+ * changed. If so, no need to log ourselves out, etc..
-+ *
-+ * Unfortunately, our charming Qlogic f/w has decided to
-+ * return a valid port database entry for a fabric device
-+ * that has, in fact, gone away. And it hangs trying to
-+ * log it out.
-+ */
-+ if (lp->loggedin && lp->force_logout == 0 &&
-+ isp_getpdb(isp, lp->loopid, &pdb) == 0) {
-+ int nrole;
-+ u_int64_t nwwnn, nwwpn;
-+ nwwnn =
-+ (((u_int64_t)pdb.pdb_nodename[0]) << 56) |
-+ (((u_int64_t)pdb.pdb_nodename[1]) << 48) |
-+ (((u_int64_t)pdb.pdb_nodename[2]) << 40) |
-+ (((u_int64_t)pdb.pdb_nodename[3]) << 32) |
-+ (((u_int64_t)pdb.pdb_nodename[4]) << 24) |
-+ (((u_int64_t)pdb.pdb_nodename[5]) << 16) |
-+ (((u_int64_t)pdb.pdb_nodename[6]) << 8) |
-+ (((u_int64_t)pdb.pdb_nodename[7]));
-+ nwwpn =
-+ (((u_int64_t)pdb.pdb_portname[0]) << 56) |
-+ (((u_int64_t)pdb.pdb_portname[1]) << 48) |
-+ (((u_int64_t)pdb.pdb_portname[2]) << 40) |
-+ (((u_int64_t)pdb.pdb_portname[3]) << 32) |
-+ (((u_int64_t)pdb.pdb_portname[4]) << 24) |
-+ (((u_int64_t)pdb.pdb_portname[5]) << 16) |
-+ (((u_int64_t)pdb.pdb_portname[6]) << 8) |
-+ (((u_int64_t)pdb.pdb_portname[7]));
-+ nrole = (pdb.pdb_prli_svc3 & SVC3_ROLE_MASK) >>
-+ SVC3_ROLE_SHIFT;
-+ if (pdb.pdb_loopid == lp->loopid && lp->portid ==
-+ (u_int32_t) BITS2WORD(pdb.pdb_portid_bits) &&
-+ nwwnn == lp->node_wwn && nwwpn == lp->port_wwn &&
-+ lp->roles == nrole && lp->force_logout == 0) {
-+ lp->loggedin = lp->valid = 1;
-+ isp_prt(isp, ISP_LOGCONFIG, lretained,
-+ (int) (lp - fcp->portdb),
-+ (int) lp->loopid, lp->portid);
-+ continue;
-+ }
-+ }
-+
-+ if (fcp->isp_fwstate != FW_READY ||
-+ fcp->isp_loopstate != LOOP_SYNCING_PDB) {
-+ return (-1);
-+ }
-+
-+ /*
-+ * Force a logout if we were logged in.
-+ */
-+ if (lp->loggedin) {
-+ if (lp->force_logout ||
-+ isp_getpdb(isp, lp->loopid, &pdb) == 0) {
-+ mbs.param[0] = MBOX_FABRIC_LOGOUT;
-+ mbs.param[1] = lp->loopid << 8;
-+ mbs.param[2] = 0;
-+ mbs.param[3] = 0;
-+ isp_mboxcmd(isp, &mbs, MBLOGNONE);
-+ isp_prt(isp, ISP_LOGINFO, plogout,
-+ (int) (lp - fcp->portdb), lp->loopid,
-+ lp->portid);
-+ }
-+ lp->force_logout = lp->loggedin = 0;
-+ if (fcp->isp_fwstate != FW_READY ||
-+ fcp->isp_loopstate != LOOP_SYNCING_PDB) {
-+ return (-1);
-+ }
-+ }
-+
-+ /*
-+ * And log in....
-+ */
-+ loopid = lp - fcp->portdb;
-+ lp->loopid = FL_PORT_ID;
-+ do {
-+ mbs.param[0] = MBOX_FABRIC_LOGIN;
-+ mbs.param[1] = loopid << 8;
-+ mbs.param[2] = portid >> 16;
-+ mbs.param[3] = portid & 0xffff;
-+ isp_mboxcmd(isp, &mbs, MBLOGALL & ~(MBOX_LOOP_ID_USED |
-+ MBOX_PORT_ID_USED | MBOX_COMMAND_ERROR));
-+ if (fcp->isp_fwstate != FW_READY ||
-+ fcp->isp_loopstate != LOOP_SYNCING_PDB) {
-+ return (-1);
-+ }
-+ switch (mbs.param[0]) {
-+ case MBOX_LOOP_ID_USED:
-+ /*
-+ * Try the next available loop id.
-+ */
-+ loopid++;
-+ break;
-+ case MBOX_PORT_ID_USED:
-+ /*
-+ * This port is already logged in.
-+ * Snaffle the loop id it's using if it's
-+ * nonzero, otherwise we're hosed.
-+ */
-+ if (mbs.param[1] != 0) {
-+ loopid = mbs.param[1];
-+ isp_prt(isp, ISP_LOGINFO, retained,
-+ loopid, (int) (lp - fcp->portdb),
-+ lp->portid);
-+ } else {
-+ loopid = MAX_FC_TARG;
-+ break;
-+ }
-+ /* FALLTHROUGH */
-+ case MBOX_COMMAND_COMPLETE:
-+ lp->loggedin = 1;
-+ lp->loopid = loopid;
-+ break;
-+ case MBOX_COMMAND_ERROR:
-+ isp_prt(isp, ISP_LOGINFO, plogierr,
-+ portid, mbs.param[1]);
-+ /* FALLTHROUGH */
-+ case MBOX_ALL_IDS_USED: /* We're outta IDs */
-+ default:
-+ loopid = MAX_FC_TARG;
-+ break;
-+ }
-+ } while (lp->loopid == FL_PORT_ID && loopid < MAX_FC_TARG);
-+
-+ /*
-+ * If we get here and we haven't set a Loop ID,
-+ * we failed to log into this device.
-+ */
-+
-+ if (lp->loopid == FL_PORT_ID) {
-+ lp->loopid = 0;
-+ continue;
-+ }
-+
-+ /*
-+ * Make sure we can get the approriate port information.
-+ */
-+ if (isp_getpdb(isp, lp->loopid, &pdb) != 0) {
-+ isp_prt(isp, ISP_LOGWARN, nopdb, lp->portid);
-+ goto dump_em;
-+ }
-+
-+ if (fcp->isp_fwstate != FW_READY ||
-+ fcp->isp_loopstate != LOOP_SYNCING_PDB) {
-+ return (-1);
-+ }
-+
-+ if (pdb.pdb_loopid != lp->loopid) {
-+ isp_prt(isp, ISP_LOGWARN, pdbmfail1,
-+ lp->portid, pdb.pdb_loopid);
-+ goto dump_em;
-+ }
-+
-+ if (lp->portid != (u_int32_t) BITS2WORD(pdb.pdb_portid_bits)) {
-+ isp_prt(isp, ISP_LOGWARN, pdbmfail2,
-+ lp->portid, BITS2WORD(pdb.pdb_portid_bits));
-+ goto dump_em;
-+ }
-+
-+ lp->roles =
-+ (pdb.pdb_prli_svc3 & SVC3_ROLE_MASK) >> SVC3_ROLE_SHIFT;
-+ lp->node_wwn =
-+ (((u_int64_t)pdb.pdb_nodename[0]) << 56) |
-+ (((u_int64_t)pdb.pdb_nodename[1]) << 48) |
-+ (((u_int64_t)pdb.pdb_nodename[2]) << 40) |
-+ (((u_int64_t)pdb.pdb_nodename[3]) << 32) |
-+ (((u_int64_t)pdb.pdb_nodename[4]) << 24) |
-+ (((u_int64_t)pdb.pdb_nodename[5]) << 16) |
-+ (((u_int64_t)pdb.pdb_nodename[6]) << 8) |
-+ (((u_int64_t)pdb.pdb_nodename[7]));
-+ lp->port_wwn =
-+ (((u_int64_t)pdb.pdb_portname[0]) << 56) |
-+ (((u_int64_t)pdb.pdb_portname[1]) << 48) |
-+ (((u_int64_t)pdb.pdb_portname[2]) << 40) |
-+ (((u_int64_t)pdb.pdb_portname[3]) << 32) |
-+ (((u_int64_t)pdb.pdb_portname[4]) << 24) |
-+ (((u_int64_t)pdb.pdb_portname[5]) << 16) |
-+ (((u_int64_t)pdb.pdb_portname[6]) << 8) |
-+ (((u_int64_t)pdb.pdb_portname[7]));
-+ /*
-+ * Check to make sure this all makes sense.
-+ */
-+ if (lp->node_wwn && lp->port_wwn) {
-+ lp->valid = 1;
-+ loopid = lp - fcp->portdb;
-+ (void) isp_async(isp, ISPASYNC_PROMENADE, &loopid);
-+ continue;
-+ }
-+dump_em:
-+ lp->valid = 0;
-+ isp_prt(isp, ISP_LOGINFO,
-+ ldumped, loopid, lp->loopid, lp->portid);
-+ mbs.param[0] = MBOX_FABRIC_LOGOUT;
-+ mbs.param[1] = lp->loopid << 8;
-+ mbs.param[2] = 0;
-+ mbs.param[3] = 0;
-+ isp_mboxcmd(isp, &mbs, MBLOGNONE);
-+ if (fcp->isp_fwstate != FW_READY ||
-+ fcp->isp_loopstate != LOOP_SYNCING_PDB) {
-+ return (-1);
-+ }
-+ }
-+ /*
-+ * If we get here, we've for sure seen not only a valid loop
-+ * but know what is or isn't on it, so mark this for usage
-+ * in isp_start.
-+ */
-+ fcp->loop_seen_once = 1;
-+ fcp->isp_loopstate = LOOP_READY;
-+ return (0);
-+}
-+
-+static int
-+isp_scan_loop(struct ispsoftc *isp)
-+{
-+ struct lportdb *lp;
-+ fcparam *fcp = isp->isp_param;
-+ isp_pdb_t pdb;
-+ int loopid, lim, hival;
-+
-+ switch (fcp->isp_topo) {
-+ case TOPO_NL_PORT:
-+ hival = FL_PORT_ID;
-+ break;
-+ case TOPO_N_PORT:
-+ hival = 2;
-+ break;
-+ case TOPO_FL_PORT:
-+ hival = FC_PORT_ID;
-+ break;
-+ default:
-+ fcp->isp_loopstate = LOOP_LSCAN_DONE;
-+ return (0);
-+ }
-+ fcp->isp_loopstate = LOOP_SCANNING_LOOP;
-+
-+ /*
-+ * make sure the temp port database is clean...
-+ */
-+ MEMZERO((void *)fcp->tport, sizeof (fcp->tport));
-+
-+ /*
-+ * Run through the local loop ports and get port database info
-+ * for each loop ID.
-+ *
-+ * There's a somewhat unexplained situation where the f/w passes back
-+ * the wrong database entity- if that happens, just restart (up to
-+ * FL_PORT_ID times).
-+ */
-+ for (lim = loopid = 0; loopid < hival; loopid++) {
-+ lp = &fcp->tport[loopid];
-+
-+ /*
-+ * Don't even try for ourselves...
-+ */
-+ if (loopid == fcp->isp_loopid)
-+ continue;
-+
-+ lp->node_wwn = isp_get_portname(isp, loopid, 1);
-+ if (fcp->isp_loopstate < LOOP_SCANNING_LOOP)
-+ return (-1);
-+ if (lp->node_wwn == 0)
-+ continue;
-+ lp->port_wwn = isp_get_portname(isp, loopid, 0);
-+ if (fcp->isp_loopstate < LOOP_SCANNING_LOOP)
-+ return (-1);
-+ if (lp->port_wwn == 0) {
-+ lp->node_wwn = 0;
-+ continue;
-+ }
-+
-+ /*
-+ * Get an entry....
-+ */
-+ if (isp_getpdb(isp, loopid, &pdb) != 0) {
-+ if (fcp->isp_loopstate < LOOP_SCANNING_LOOP)
-+ return (-1);
-+ continue;
-+ }
-+ if (fcp->isp_loopstate < LOOP_SCANNING_LOOP) {
-+ return (-1);
-+ }
-+
-+ /*
-+ * If the returned database element doesn't match what we
-+ * asked for, restart the process entirely (up to a point...).
-+ */
-+ if (pdb.pdb_loopid != loopid) {
-+ loopid = 0;
-+ if (lim++ < hival) {
-+ continue;
-+ }
-+ isp_prt(isp, ISP_LOGWARN,
-+ "giving up on synchronizing the port database");
-+ return (-1);
-+ }
-+
-+ /*
-+ * Save the pertinent info locally.
-+ */
-+ lp->node_wwn =
-+ (((u_int64_t)pdb.pdb_nodename[0]) << 56) |
-+ (((u_int64_t)pdb.pdb_nodename[1]) << 48) |
-+ (((u_int64_t)pdb.pdb_nodename[2]) << 40) |
-+ (((u_int64_t)pdb.pdb_nodename[3]) << 32) |
-+ (((u_int64_t)pdb.pdb_nodename[4]) << 24) |
-+ (((u_int64_t)pdb.pdb_nodename[5]) << 16) |
-+ (((u_int64_t)pdb.pdb_nodename[6]) << 8) |
-+ (((u_int64_t)pdb.pdb_nodename[7]));
-+ lp->port_wwn =
-+ (((u_int64_t)pdb.pdb_portname[0]) << 56) |
-+ (((u_int64_t)pdb.pdb_portname[1]) << 48) |
-+ (((u_int64_t)pdb.pdb_portname[2]) << 40) |
-+ (((u_int64_t)pdb.pdb_portname[3]) << 32) |
-+ (((u_int64_t)pdb.pdb_portname[4]) << 24) |
-+ (((u_int64_t)pdb.pdb_portname[5]) << 16) |
-+ (((u_int64_t)pdb.pdb_portname[6]) << 8) |
-+ (((u_int64_t)pdb.pdb_portname[7]));
-+ lp->roles =
-+ (pdb.pdb_prli_svc3 & SVC3_ROLE_MASK) >> SVC3_ROLE_SHIFT;
-+ lp->portid = BITS2WORD(pdb.pdb_portid_bits);
-+ lp->loopid = pdb.pdb_loopid;
-+ }
-+
-+ /*
-+ * Mark all of the permanent local loop database entries as invalid
-+ * (except our own entry).
-+ */
-+ for (loopid = 0; loopid < hival; loopid++) {
-+ if (loopid == fcp->isp_iid) {
-+ fcp->portdb[loopid].valid = 1;
-+ fcp->portdb[loopid].loopid = fcp->isp_loopid;
-+ continue;
-+ }
-+ fcp->portdb[loopid].valid = 0;
-+ }
-+
-+ /*
-+ * Now merge our local copy of the port database into our saved copy.
-+ * Notify the outer layers of new devices arriving.
-+ */
-+ for (loopid = 0; loopid < hival; loopid++) {
-+ int i;
-+
-+ /*
-+ * If we don't have a non-zero Port WWN, we're not here.
-+ */
-+ if (fcp->tport[loopid].port_wwn == 0) {
-+ continue;
-+ }
-+
-+ /*
-+ * Skip ourselves.
-+ */
-+ if (loopid == fcp->isp_iid) {
-+ continue;
-+ }
-+
-+ /*
-+ * For the purposes of deciding whether this is the
-+ * 'same' device or not, we only search for an identical
-+ * Port WWN. Node WWNs may or may not be the same as
-+ * the Port WWN, and there may be multiple different
-+ * Port WWNs with the same Node WWN. It would be chaos
-+ * to have multiple identical Port WWNs, so we don't
-+ * allow that.
-+ */
-+
-+ for (i = 0; i < hival; i++) {
-+ int j;
-+ if (fcp->portdb[i].port_wwn == 0)
-+ continue;
-+ if (fcp->portdb[i].port_wwn !=
-+ fcp->tport[loopid].port_wwn)
-+ continue;
-+ /*
-+ * We found this WWN elsewhere- it's changed
-+ * loopids then. We don't change it's actual
-+ * position in our cached port database- we
-+ * just change the actual loop ID we'd use.
-+ */
-+ if (fcp->portdb[i].loopid != loopid) {
-+ isp_prt(isp, ISP_LOGINFO, portshift, i,
-+ fcp->portdb[i].loopid,
-+ fcp->portdb[i].portid, loopid,
-+ fcp->tport[loopid].portid);
-+ }
-+ fcp->portdb[i].portid = fcp->tport[loopid].portid;
-+ fcp->portdb[i].loopid = loopid;
-+ fcp->portdb[i].valid = 1;
-+ fcp->portdb[i].roles = fcp->tport[loopid].roles;
-+
-+ /*
-+ * Now make sure this Port WWN doesn't exist elsewhere
-+ * in the port database.
-+ */
-+ for (j = i+1; j < hival; j++) {
-+ if (fcp->portdb[i].port_wwn !=
-+ fcp->portdb[j].port_wwn) {
-+ continue;
-+ }
-+ isp_prt(isp, ISP_LOGWARN, portdup, j, i);
-+ /*
-+ * Invalidate the 'old' *and* 'new' ones.
-+ * This is really harsh and not quite right,
-+ * but if this happens, we really don't know
-+ * who is what at this point.
-+ */
-+ fcp->portdb[i].valid = 0;
-+ fcp->portdb[j].valid = 0;
-+ }
-+ break;
-+ }
-+
-+ /*
-+ * If we didn't traverse the entire port database,
-+ * then we found (and remapped) an existing entry.
-+ * No need to notify anyone- go for the next one.
-+ */
-+ if (i < hival) {
-+ isp_prt(isp, ISP_LOGINFO, retained,
-+ fcp->portdb[i].loopid, i, fcp->portdb[i].portid);
-+ continue;
-+ }
-+
-+ /*
-+ * We've not found this Port WWN anywhere. It's a new entry.
-+ * See if we can leave it where it is (with target == loopid).
-+ */
-+ if (fcp->portdb[loopid].port_wwn != 0) {
-+ for (lim = 0; lim < hival; lim++) {
-+ if (fcp->portdb[lim].port_wwn == 0)
-+ break;
-+ }
-+ /* "Cannot Happen" */
-+ if (lim == hival) {
-+ isp_prt(isp, ISP_LOGWARN, "Remap Overflow");
-+ continue;
-+ }
-+ i = lim;
-+ } else {
-+ i = loopid;
-+ }
-+
-+ /*
-+ * NB: The actual loopid we use here is loopid- we may
-+ * in fact be at a completely different index (target).
-+ */
-+ fcp->portdb[i].loopid = loopid;
-+ fcp->portdb[i].port_wwn = fcp->tport[loopid].port_wwn;
-+ fcp->portdb[i].node_wwn = fcp->tport[loopid].node_wwn;
-+ fcp->portdb[i].roles = fcp->tport[loopid].roles;
-+ fcp->portdb[i].portid = fcp->tport[loopid].portid;
-+ fcp->portdb[i].valid = 1;
-+
-+ /*
-+ * Tell the outside world we've arrived.
-+ */
-+ (void) isp_async(isp, ISPASYNC_PROMENADE, &i);
-+ }
-+
-+ /*
-+ * Now find all previously used targets that are now invalid and
-+ * notify the outer layers that they're gone.
-+ */
-+ for (lp = &fcp->portdb[0]; lp < &fcp->portdb[hival]; lp++) {
-+ if (lp->valid || lp->port_wwn == 0) {
-+ continue;
-+ }
-+
-+ /*
-+ * Tell the outside world we've gone
-+ * away and erase our pdb entry.
-+ *
-+ */
-+ loopid = lp - fcp->portdb;
-+ (void) isp_async(isp, ISPASYNC_PROMENADE, &loopid);
-+ MEMZERO((void *) lp, sizeof (*lp));
-+ }
-+ fcp->isp_loopstate = LOOP_LSCAN_DONE;
-+ return (0);
-+}
-+
-+
-+static int
-+isp_fabric_mbox_cmd(struct ispsoftc *isp, mbreg_t *mbp)
-+{
-+ isp_mboxcmd(isp, mbp, MBLOGNONE);
-+ if (mbp->param[0] != MBOX_COMMAND_COMPLETE) {
-+ if (FCPARAM(isp)->isp_loopstate == LOOP_SCANNING_FABRIC) {
-+ FCPARAM(isp)->isp_loopstate = LOOP_PDB_RCVD;
-+ }
-+ if (mbp->param[0] == MBOX_COMMAND_ERROR) {
-+ char tbuf[16];
-+ char *m;
-+ switch (mbp->param[1]) {
-+ case 1:
-+ m = "No Loop";
-+ break;
-+ case 2:
-+ m = "Failed to allocate IOCB buffer";
-+ break;
-+ case 3:
-+ m = "Failed to allocate XCB buffer";
-+ break;
-+ case 4:
-+ m = "timeout or transmit failed";
-+ break;
-+ case 5:
-+ m = "no fabric loop";
-+ break;
-+ case 6:
-+ m = "remote device not a target";
-+ break;
-+ default:
-+ SNPRINTF(tbuf, sizeof tbuf, "%x",
-+ mbp->param[1]);
-+ m = tbuf;
-+ break;
-+ }
-+ isp_prt(isp, ISP_LOGERR, "SNS Failed- %s", m);
-+ }
-+ return (-1);
-+ }
-+
-+ if (FCPARAM(isp)->isp_fwstate != FW_READY ||
-+ FCPARAM(isp)->isp_loopstate < LOOP_SCANNING_FABRIC) {
-+ return (-1);
-+ }
-+ return(0);
-+}
-+
-+#ifdef ISP_USE_GA_NXT
-+static int
-+isp_scan_fabric(struct ispsoftc *isp, int ftype)
-+{
-+ fcparam *fcp = isp->isp_param;
-+ u_int32_t portid, first_portid, last_portid;
-+ int hicap, last_port_same;
-+
-+ if (fcp->isp_onfabric == 0) {
-+ fcp->isp_loopstate = LOOP_FSCAN_DONE;
-+ return (0);
-+ }
-+
-+ FC_SCRATCH_ACQUIRE(isp);
-+
-+ /*
-+ * Since Port IDs are 24 bits, we can check against having seen
-+ * anything yet with this value.
-+ */
-+ last_port_same = 0;
-+ last_portid = 0xffffffff; /* not a port */
-+ first_portid = portid = fcp->isp_portid;
-+ fcp->isp_loopstate = LOOP_SCANNING_FABRIC;
-+
-+ for (hicap = 0; hicap < GA_NXT_MAX; hicap++) {
-+ mbreg_t mbs;
-+ sns_screq_t *rq;
-+ sns_ga_nxt_rsp_t *rs0, *rs1;
-+ struct lportdb lcl;
-+ u_int8_t sc[SNS_GA_NXT_RESP_SIZE];
-+
-+ rq = (sns_screq_t *)sc;
-+ MEMZERO((void *) rq, SNS_GA_NXT_REQ_SIZE);
-+ rq->snscb_rblen = SNS_GA_NXT_RESP_SIZE >> 1;
-+ rq->snscb_addr[RQRSP_ADDR0015] = DMA_WD0(fcp->isp_scdma+0x100);
-+ rq->snscb_addr[RQRSP_ADDR1631] = DMA_WD1(fcp->isp_scdma+0x100);
-+ rq->snscb_addr[RQRSP_ADDR3247] = DMA_WD2(fcp->isp_scdma+0x100);
-+ rq->snscb_addr[RQRSP_ADDR4863] = DMA_WD3(fcp->isp_scdma+0x100);
-+ rq->snscb_sblen = 6;
-+ rq->snscb_data[0] = SNS_GA_NXT;
-+ rq->snscb_data[4] = portid & 0xffff;
-+ rq->snscb_data[5] = (portid >> 16) & 0xff;
-+ isp_put_sns_request(isp, rq, (sns_screq_t *) fcp->isp_scratch);
-+ MEMORYBARRIER(isp, SYNC_SFORDEV, 0, SNS_GA_NXT_REQ_SIZE);
-+ mbs.param[0] = MBOX_SEND_SNS;
-+ mbs.param[1] = SNS_GA_NXT_REQ_SIZE >> 1;
-+ mbs.param[2] = DMA_WD1(fcp->isp_scdma);
-+ mbs.param[3] = DMA_WD0(fcp->isp_scdma);
-+ /*
-+ * Leave 4 and 5 alone
-+ */
-+ mbs.param[6] = DMA_WD3(fcp->isp_scdma);
-+ mbs.param[7] = DMA_WD2(fcp->isp_scdma);
-+ if (isp_fabric_mbox_cmd(isp, &mbs)) {
-+ if (fcp->isp_loopstate >= LOOP_SCANNING_FABRIC) {
-+ fcp->isp_loopstate = LOOP_PDB_RCVD;
-+ }
-+ FC_SCRATCH_RELEASE(isp);
-+ return (-1);
-+ }
-+ MEMORYBARRIER(isp, SYNC_SFORCPU, 0x100, SNS_GA_NXT_RESP_SIZE);
-+ rs1 = (sns_ga_nxt_rsp_t *) sc;
-+ rs0 = (sns_ga_nxt_rsp_t *) ((u_int8_t *)fcp->isp_scratch+0x100);
-+ isp_get_ga_nxt_response(isp, rs0, rs1);
-+ if (rs1->snscb_cthdr.ct_response != FS_ACC) {
-+ int level;
-+ if (rs1->snscb_cthdr.ct_reason == 9 &&
-+ rs1->snscb_cthdr.ct_explanation == 7)
-+ level = ISP_LOGDEBUG0;
-+ else
-+ level = ISP_LOGWARN;
-+ isp_prt(isp, level, swrej, "GA_NXT",
-+ rs1->snscb_cthdr.ct_reason,
-+ rs1->snscb_cthdr.ct_explanation, portid);
-+ FC_SCRATCH_RELEASE(isp);
-+ fcp->isp_loopstate = LOOP_FSCAN_DONE;
-+ return (0);
-+ }
-+ portid =
-+ (((u_int32_t) rs1->snscb_port_id[0]) << 16) |
-+ (((u_int32_t) rs1->snscb_port_id[1]) << 8) |
-+ (((u_int32_t) rs1->snscb_port_id[2]));
-+
-+ /*
-+ * XXX: We should check to make sure that this entry
-+ * XXX: supports the type(s) we are interested in.
-+ */
-+ /*
-+ * Okay, we now have information about a fabric object.
-+ * If it is the type we're interested in, tell the outer layers
-+ * about it. The outer layer needs to know: Port ID, WWNN,
-+ * WWPN, FC4 type, and port type.
-+ *
-+ * The lportdb structure is adequate for this.
-+ */
-+ MEMZERO(&lcl, sizeof (lcl));
-+ lcl.port_type = rs1->snscb_port_type;
-+ lcl.fc4_type = ftype;
-+ lcl.portid = portid;
-+ lcl.node_wwn =
-+ (((u_int64_t)rs1->snscb_nodename[0]) << 56) |
-+ (((u_int64_t)rs1->snscb_nodename[1]) << 48) |
-+ (((u_int64_t)rs1->snscb_nodename[2]) << 40) |
-+ (((u_int64_t)rs1->snscb_nodename[3]) << 32) |
-+ (((u_int64_t)rs1->snscb_nodename[4]) << 24) |
-+ (((u_int64_t)rs1->snscb_nodename[5]) << 16) |
-+ (((u_int64_t)rs1->snscb_nodename[6]) << 8) |
-+ (((u_int64_t)rs1->snscb_nodename[7]));
-+ lcl.port_wwn =
-+ (((u_int64_t)rs1->snscb_portname[0]) << 56) |
-+ (((u_int64_t)rs1->snscb_portname[1]) << 48) |
-+ (((u_int64_t)rs1->snscb_portname[2]) << 40) |
-+ (((u_int64_t)rs1->snscb_portname[3]) << 32) |
-+ (((u_int64_t)rs1->snscb_portname[4]) << 24) |
-+ (((u_int64_t)rs1->snscb_portname[5]) << 16) |
-+ (((u_int64_t)rs1->snscb_portname[6]) << 8) |
-+ (((u_int64_t)rs1->snscb_portname[7]));
-+
-+ /*
-+ * Does this fabric object support the type we want?
-+ * If not, skip it.
-+ */
-+ if (rs1->snscb_fc4_types[ftype >> 5] & (1 << (ftype & 0x1f))) {
-+ if (first_portid == portid) {
-+ lcl.last_fabric_dev = 1;
-+ } else {
-+ lcl.last_fabric_dev = 0;
-+ }
-+ (void) isp_async(isp, ISPASYNC_FABRIC_DEV, &lcl);
-+ } else {
-+ isp_prt(isp, ISP_LOGDEBUG0,
-+ "PortID 0x%x doesn't support FC4 type 0x%x",
-+ portid, ftype);
-+ }
-+ if (first_portid == portid) {
-+ fcp->isp_loopstate = LOOP_FSCAN_DONE;
-+ FC_SCRATCH_RELEASE(isp);
-+ return (0);
-+ }
-+ if (portid == last_portid) {
-+ if (last_port_same++ > 20) {
-+ isp_prt(isp, ISP_LOGWARN,
-+ "tangled fabric database detected");
-+ break;
-+ }
-+ } else {
-+ last_port_same = 0 ;
-+ last_portid = portid;
-+ }
-+ }
-+ FC_SCRATCH_RELEASE(isp);
-+ if (hicap >= GA_NXT_MAX) {
-+ isp_prt(isp, ISP_LOGWARN, "fabric too big (> %d)", GA_NXT_MAX);
-+ }
-+ fcp->isp_loopstate = LOOP_FSCAN_DONE;
-+ return (0);
-+}
-+#else
-+#define GIDLEN ((ISP2100_SCRLEN >> 1) + 16)
-+#define NGENT ((GIDLEN - 16) >> 2)
-+
-+#define IGPOFF (ISP2100_SCRLEN - GIDLEN)
-+#define GXOFF (256)
-+
-+static int
-+isp_scan_fabric(struct ispsoftc *isp, int ftype)
-+{
-+ fcparam *fcp = FCPARAM(isp);
-+ mbreg_t mbs;
-+ int i;
-+ sns_gid_ft_req_t *rq;
-+ sns_gid_ft_rsp_t *rs0, *rs1;
-+
-+ if (fcp->isp_onfabric == 0) {
-+ fcp->isp_loopstate = LOOP_FSCAN_DONE;
-+ return (0);
-+ }
-+
-+ FC_SCRATCH_ACQUIRE(isp);
-+ fcp->isp_loopstate = LOOP_SCANNING_FABRIC;
-+
-+ rq = (sns_gid_ft_req_t *)fcp->tport;
-+ MEMZERO((void *) rq, SNS_GID_FT_REQ_SIZE);
-+ rq->snscb_rblen = GIDLEN >> 1;
-+ rq->snscb_addr[RQRSP_ADDR0015] = DMA_WD0(fcp->isp_scdma+IGPOFF);
-+ rq->snscb_addr[RQRSP_ADDR1631] = DMA_WD1(fcp->isp_scdma+IGPOFF);
-+ rq->snscb_addr[RQRSP_ADDR3247] = DMA_WD2(fcp->isp_scdma+IGPOFF);
-+ rq->snscb_addr[RQRSP_ADDR4863] = DMA_WD3(fcp->isp_scdma+IGPOFF);
-+ rq->snscb_sblen = 6;
-+ rq->snscb_cmd = SNS_GID_FT;
-+ rq->snscb_mword_div_2 = NGENT;
-+ rq->snscb_fc4_type = ftype;
-+ isp_put_gid_ft_request(isp, rq, (sns_gid_ft_req_t *) fcp->isp_scratch);
-+ MEMORYBARRIER(isp, SYNC_SFORDEV, 0, SNS_GID_FT_REQ_SIZE);
-+ mbs.param[0] = MBOX_SEND_SNS;
-+ mbs.param[1] = SNS_GID_FT_REQ_SIZE >> 1;
-+ mbs.param[2] = DMA_WD1(fcp->isp_scdma);
-+ mbs.param[3] = DMA_WD0(fcp->isp_scdma);
-+
-+ /*
-+ * Leave 4 and 5 alone
-+ */
-+ mbs.param[6] = DMA_WD3(fcp->isp_scdma);
-+ mbs.param[7] = DMA_WD2(fcp->isp_scdma);
-+ if (isp_fabric_mbox_cmd(isp, &mbs)) {
-+ if (fcp->isp_loopstate >= LOOP_SCANNING_FABRIC) {
-+ fcp->isp_loopstate = LOOP_PDB_RCVD;
-+ }
-+ FC_SCRATCH_RELEASE(isp);
-+ return (-1);
-+ }
-+ if (fcp->isp_loopstate != LOOP_SCANNING_FABRIC) {
-+ FC_SCRATCH_RELEASE(isp);
-+ return (-1);
-+ }
-+ MEMORYBARRIER(isp, SYNC_SFORCPU, IGPOFF, GIDLEN);
-+ rs1 = (sns_gid_ft_rsp_t *) fcp->tport;
-+ rs0 = (sns_gid_ft_rsp_t *) ((u_int8_t *)fcp->isp_scratch+IGPOFF);
-+ isp_get_gid_ft_response(isp, rs0, rs1, NGENT);
-+ if (rs1->snscb_cthdr.ct_response != FS_ACC) {
-+ int level;
-+ if (rs1->snscb_cthdr.ct_reason == 9 &&
-+ rs1->snscb_cthdr.ct_explanation == 7)
-+ level = ISP_LOGDEBUG0;
-+ else
-+ level = ISP_LOGWARN;
-+ isp_prt(isp, level, swrej, "GID_FT",
-+ rs1->snscb_cthdr.ct_reason,
-+ rs1->snscb_cthdr.ct_explanation, 0);
-+ FC_SCRATCH_RELEASE(isp);
-+ fcp->isp_loopstate = LOOP_FSCAN_DONE;
-+ return (0);
-+ }
-+
-+ /*
-+ * Okay, we now have a list of Port IDs for this class of device.
-+ * Go through the list and for each one get the WWPN/WWNN for it
-+ * and tell the outer layers about it. The outer layer needs to
-+ * know: Port ID, WWNN, WWPN, FC4 type, and (possibly) port type.
-+ *
-+ * The lportdb structure is adequate for this.
-+ */
-+ i = -1;
-+ do {
-+ sns_gxn_id_req_t grqbuf, *gq = &grqbuf;
-+ sns_gxn_id_rsp_t *gs0, grsbuf, *gs1 = &grsbuf;
-+ struct lportdb lcl;
-+#if 0
-+ sns_gff_id_rsp_t *fs0, ffsbuf, *fs1 = &ffsbuf;
-+#endif
-+
-+ i++;
-+ MEMZERO(&lcl, sizeof (lcl));
-+ lcl.fc4_type = ftype;
-+ lcl.portid =
-+ (((u_int32_t) rs1->snscb_ports[i].portid[0]) << 16) |
-+ (((u_int32_t) rs1->snscb_ports[i].portid[1]) << 8) |
-+ (((u_int32_t) rs1->snscb_ports[i].portid[2]));
-+
-+ MEMZERO((void *) gq, sizeof (sns_gxn_id_req_t));
-+ gq->snscb_rblen = SNS_GXN_ID_RESP_SIZE >> 1;
-+ gq->snscb_addr[RQRSP_ADDR0015] = DMA_WD0(fcp->isp_scdma+GXOFF);
-+ gq->snscb_addr[RQRSP_ADDR1631] = DMA_WD1(fcp->isp_scdma+GXOFF);
-+ gq->snscb_addr[RQRSP_ADDR3247] = DMA_WD2(fcp->isp_scdma+GXOFF);
-+ gq->snscb_addr[RQRSP_ADDR4863] = DMA_WD3(fcp->isp_scdma+GXOFF);
-+ gq->snscb_sblen = 6;
-+ gq->snscb_cmd = SNS_GPN_ID;
-+ gq->snscb_portid = lcl.portid;
-+ isp_put_gxn_id_request(isp, gq,
-+ (sns_gxn_id_req_t *) fcp->isp_scratch);
-+ MEMORYBARRIER(isp, SYNC_SFORDEV, 0, SNS_GXN_ID_REQ_SIZE);
-+ mbs.param[0] = MBOX_SEND_SNS;
-+ mbs.param[1] = SNS_GXN_ID_REQ_SIZE >> 1;
-+ mbs.param[2] = DMA_WD1(fcp->isp_scdma);
-+ mbs.param[3] = DMA_WD0(fcp->isp_scdma);
-+ /*
-+ * Leave 4 and 5 alone
-+ */
-+ mbs.param[6] = DMA_WD3(fcp->isp_scdma);
-+ mbs.param[7] = DMA_WD2(fcp->isp_scdma);
-+ if (isp_fabric_mbox_cmd(isp, &mbs)) {
-+ if (fcp->isp_loopstate >= LOOP_SCANNING_FABRIC) {
-+ fcp->isp_loopstate = LOOP_PDB_RCVD;
-+ }
-+ FC_SCRATCH_RELEASE(isp);
-+ return (-1);
-+ }
-+ if (fcp->isp_loopstate != LOOP_SCANNING_FABRIC) {
-+ FC_SCRATCH_RELEASE(isp);
-+ return (-1);
-+ }
-+ MEMORYBARRIER(isp, SYNC_SFORCPU, GXOFF, SNS_GXN_ID_RESP_SIZE);
-+ gs0 = (sns_gxn_id_rsp_t *) ((u_int8_t *)fcp->isp_scratch+GXOFF);
-+ isp_get_gxn_id_response(isp, gs0, gs1);
-+ if (gs1->snscb_cthdr.ct_response != FS_ACC) {
-+ isp_prt(isp, ISP_LOGWARN, swrej, "GPN_ID",
-+ gs1->snscb_cthdr.ct_reason,
-+ gs1->snscb_cthdr.ct_explanation, lcl.portid);
-+ if (fcp->isp_loopstate != LOOP_SCANNING_FABRIC) {
-+ FC_SCRATCH_RELEASE(isp);
-+ return (-1);
-+ }
-+ continue;
-+ }
-+ lcl.port_wwn =
-+ (((u_int64_t)gs1->snscb_wwn[0]) << 56) |
-+ (((u_int64_t)gs1->snscb_wwn[1]) << 48) |
-+ (((u_int64_t)gs1->snscb_wwn[2]) << 40) |
-+ (((u_int64_t)gs1->snscb_wwn[3]) << 32) |
-+ (((u_int64_t)gs1->snscb_wwn[4]) << 24) |
-+ (((u_int64_t)gs1->snscb_wwn[5]) << 16) |
-+ (((u_int64_t)gs1->snscb_wwn[6]) << 8) |
-+ (((u_int64_t)gs1->snscb_wwn[7]));
-+
-+ MEMZERO((void *) gq, sizeof (sns_gxn_id_req_t));
-+ gq->snscb_rblen = SNS_GXN_ID_RESP_SIZE >> 1;
-+ gq->snscb_addr[RQRSP_ADDR0015] = DMA_WD0(fcp->isp_scdma+GXOFF);
-+ gq->snscb_addr[RQRSP_ADDR1631] = DMA_WD1(fcp->isp_scdma+GXOFF);
-+ gq->snscb_addr[RQRSP_ADDR3247] = DMA_WD2(fcp->isp_scdma+GXOFF);
-+ gq->snscb_addr[RQRSP_ADDR4863] = DMA_WD3(fcp->isp_scdma+GXOFF);
-+ gq->snscb_sblen = 6;
-+ gq->snscb_cmd = SNS_GNN_ID;
-+ gq->snscb_portid = lcl.portid;
-+ isp_put_gxn_id_request(isp, gq,
-+ (sns_gxn_id_req_t *) fcp->isp_scratch);
-+ MEMORYBARRIER(isp, SYNC_SFORDEV, 0, SNS_GXN_ID_REQ_SIZE);
-+ mbs.param[0] = MBOX_SEND_SNS;
-+ mbs.param[1] = SNS_GXN_ID_REQ_SIZE >> 1;
-+ mbs.param[2] = DMA_WD1(fcp->isp_scdma);
-+ mbs.param[3] = DMA_WD0(fcp->isp_scdma);
-+ /*
-+ * Leave 4 and 5 alone
-+ */
-+ mbs.param[6] = DMA_WD3(fcp->isp_scdma);
-+ mbs.param[7] = DMA_WD2(fcp->isp_scdma);
-+ if (isp_fabric_mbox_cmd(isp, &mbs)) {
-+ if (fcp->isp_loopstate >= LOOP_SCANNING_FABRIC) {
-+ fcp->isp_loopstate = LOOP_PDB_RCVD;
-+ }
-+ FC_SCRATCH_RELEASE(isp);
-+ return (-1);
-+ }
-+ if (fcp->isp_loopstate != LOOP_SCANNING_FABRIC) {
-+ FC_SCRATCH_RELEASE(isp);
-+ return (-1);
-+ }
-+ MEMORYBARRIER(isp, SYNC_SFORCPU, GXOFF, SNS_GXN_ID_RESP_SIZE);
-+ gs0 = (sns_gxn_id_rsp_t *) ((u_int8_t *)fcp->isp_scratch+GXOFF);
-+ isp_get_gxn_id_response(isp, gs0, gs1);
-+ if (gs1->snscb_cthdr.ct_response != FS_ACC) {
-+ isp_prt(isp, ISP_LOGWARN, swrej, "GNN_ID",
-+ gs1->snscb_cthdr.ct_reason,
-+ gs1->snscb_cthdr.ct_explanation, lcl.portid);
-+ if (fcp->isp_loopstate != LOOP_SCANNING_FABRIC) {
-+ FC_SCRATCH_RELEASE(isp);
-+ return (-1);
-+ }
-+ continue;
-+ }
-+ lcl.node_wwn =
-+ (((u_int64_t)gs1->snscb_wwn[0]) << 56) |
-+ (((u_int64_t)gs1->snscb_wwn[1]) << 48) |
-+ (((u_int64_t)gs1->snscb_wwn[2]) << 40) |
-+ (((u_int64_t)gs1->snscb_wwn[3]) << 32) |
-+ (((u_int64_t)gs1->snscb_wwn[4]) << 24) |
-+ (((u_int64_t)gs1->snscb_wwn[5]) << 16) |
-+ (((u_int64_t)gs1->snscb_wwn[6]) << 8) |
-+ (((u_int64_t)gs1->snscb_wwn[7]));
-+
-+ /*
-+ * The QLogic f/w is bouncing this with a parameter error.
-+ */
-+#if 0
-+ /*
-+ * Try and get FC4 Features (FC-GS-3 only).
-+ * We can use the sns_gxn_id_req_t for this request.
-+ */
-+ MEMZERO((void *) gq, sizeof (sns_gxn_id_req_t));
-+ gq->snscb_rblen = SNS_GFF_ID_RESP_SIZE >> 1;
-+ gq->snscb_addr[RQRSP_ADDR0015] = DMA_WD0(fcp->isp_scdma+GXOFF);
-+ gq->snscb_addr[RQRSP_ADDR1631] = DMA_WD1(fcp->isp_scdma+GXOFF);
-+ gq->snscb_addr[RQRSP_ADDR3247] = DMA_WD2(fcp->isp_scdma+GXOFF);
-+ gq->snscb_addr[RQRSP_ADDR4863] = DMA_WD3(fcp->isp_scdma+GXOFF);
-+ gq->snscb_sblen = 6;
-+ gq->snscb_cmd = SNS_GFF_ID;
-+ gq->snscb_portid = lcl.portid;
-+ isp_put_gxn_id_request(isp, gq,
-+ (sns_gxn_id_req_t *) fcp->isp_scratch);
-+ MEMORYBARRIER(isp, SYNC_SFORDEV, 0, SNS_GXN_ID_REQ_SIZE);
-+ mbs.param[0] = MBOX_SEND_SNS;
-+ mbs.param[1] = SNS_GXN_ID_REQ_SIZE >> 1;
-+ mbs.param[2] = DMA_WD1(fcp->isp_scdma);
-+ mbs.param[3] = DMA_WD0(fcp->isp_scdma);
-+ /*
-+ * Leave 4 and 5 alone
-+ */
-+ mbs.param[6] = DMA_WD3(fcp->isp_scdma);
-+ mbs.param[7] = DMA_WD2(fcp->isp_scdma);
-+ if (isp_fabric_mbox_cmd(isp, &mbs)) {
-+ if (fcp->isp_loopstate >= LOOP_SCANNING_FABRIC) {
-+ fcp->isp_loopstate = LOOP_PDB_RCVD;
-+ }
-+ FC_SCRATCH_RELEASE(isp);
-+ return (-1);
-+ }
-+ if (fcp->isp_loopstate != LOOP_SCANNING_FABRIC) {
-+ FC_SCRATCH_RELEASE(isp);
-+ return (-1);
-+ }
-+ MEMORYBARRIER(isp, SYNC_SFORCPU, GXOFF, SNS_GFF_ID_RESP_SIZE);
-+ fs0 = (sns_gff_id_rsp_t *) ((u_int8_t *)fcp->isp_scratch+GXOFF);
-+ isp_get_gff_id_response(isp, fs0, fs1);
-+ if (fs1->snscb_cthdr.ct_response != FS_ACC) {
-+ isp_prt(isp, /* ISP_LOGDEBUG0 */ ISP_LOGWARN,
-+ swrej, "GFF_ID",
-+ fs1->snscb_cthdr.ct_reason,
-+ fs1->snscb_cthdr.ct_explanation, lcl.portid);
-+ if (fcp->isp_loopstate != LOOP_SCANNING_FABRIC) {
-+ FC_SCRATCH_RELEASE(isp);
-+ return (-1);
-+ }
-+ } else {
-+ int index = (ftype >> 3);
-+ int bshft = (ftype & 0x7) * 4;
-+ int fc4_fval =
-+ (fs1->snscb_fc4_features[index] >> bshft) & 0xf;
-+ if (fc4_fval & 0x1) {
-+ lcl.roles |=
-+ (SVC3_INI_ROLE >> SVC3_ROLE_SHIFT);
-+ }
-+ if (fc4_fval & 0x2) {
-+ lcl.roles |=
-+ (SVC3_TGT_ROLE >> SVC3_ROLE_SHIFT);
-+ }
-+ }
-+#endif
-+
-+ /*
-+ * If we really want to know what kind of port type this is,
-+ * we have to run another CT command. Otherwise, we'll leave
-+ * it as undefined.
-+ *
-+ lcl.port_type = 0;
-+ */
-+ if (rs1->snscb_ports[i].control & 0x80) {
-+ lcl.last_fabric_dev = 1;
-+ } else {
-+ lcl.last_fabric_dev = 0;
-+ }
-+ (void) isp_async(isp, ISPASYNC_FABRIC_DEV, &lcl);
-+
-+ } while ((rs1->snscb_ports[i].control & 0x80) == 0 && i < NGENT-1);
-+
-+ /*
-+ * If we're not at the last entry, our list isn't big enough.
-+ */
-+ if ((rs1->snscb_ports[i].control & 0x80) == 0) {
-+ isp_prt(isp, ISP_LOGWARN, "fabric too big for scratch area");
-+ }
-+
-+ FC_SCRATCH_RELEASE(isp);
-+ fcp->isp_loopstate = LOOP_FSCAN_DONE;
-+ return (0);
-+}
-+#endif
-+
-+static void
-+isp_register_fc4_type(struct ispsoftc *isp)
-+{
-+ fcparam *fcp = isp->isp_param;
-+ u_int8_t local[SNS_RFT_ID_REQ_SIZE];
-+ sns_screq_t *reqp = (sns_screq_t *) local;
-+ mbreg_t mbs;
-+
-+ MEMZERO((void *) reqp, SNS_RFT_ID_REQ_SIZE);
-+ reqp->snscb_rblen = SNS_RFT_ID_RESP_SIZE >> 1;
-+ reqp->snscb_addr[RQRSP_ADDR0015] = DMA_WD0(fcp->isp_scdma + 0x100);
-+ reqp->snscb_addr[RQRSP_ADDR1631] = DMA_WD1(fcp->isp_scdma + 0x100);
-+ reqp->snscb_addr[RQRSP_ADDR3247] = DMA_WD2(fcp->isp_scdma + 0x100);
-+ reqp->snscb_addr[RQRSP_ADDR4863] = DMA_WD3(fcp->isp_scdma + 0x100);
-+ reqp->snscb_sblen = 22;
-+ reqp->snscb_data[0] = SNS_RFT_ID;
-+ reqp->snscb_data[4] = fcp->isp_portid & 0xffff;
-+ reqp->snscb_data[5] = (fcp->isp_portid >> 16) & 0xff;
-+ reqp->snscb_data[6] = (1 << FC4_SCSI);
-+#if 0
-+ reqp->snscb_data[6] |= (1 << FC4_IP); /* ISO/IEC 8802-2 LLC/SNAP */
-+#endif
-+ FC_SCRATCH_ACQUIRE(isp);
-+ isp_put_sns_request(isp, reqp, (sns_screq_t *) fcp->isp_scratch);
-+ mbs.param[0] = MBOX_SEND_SNS;
-+ mbs.param[1] = SNS_RFT_ID_REQ_SIZE >> 1;
-+ mbs.param[2] = DMA_WD1(fcp->isp_scdma);
-+ mbs.param[3] = DMA_WD0(fcp->isp_scdma);
-+ /*
-+ * Leave 4 and 5 alone
-+ */
-+ mbs.param[6] = DMA_WD3(fcp->isp_scdma);
-+ mbs.param[7] = DMA_WD2(fcp->isp_scdma);
-+ isp_mboxcmd(isp, &mbs, MBLOGALL);
-+ FC_SCRATCH_RELEASE(isp);
-+ if (mbs.param[0] == MBOX_COMMAND_COMPLETE) {
-+ isp_prt(isp, ISP_LOGDEBUG0, "Register FC4 types succeeded");
-+ }
-+}
-+
-+/*
-+ * Start a command. Locking is assumed done in the caller.
-+ */
-+
-+int
-+isp_start(XS_T *xs)
-+{
-+ struct ispsoftc *isp;
-+ u_int16_t nxti, optr, handle;
-+ u_int8_t local[QENTRY_LEN];
-+ ispreq_t *reqp, *qep;
-+ int target, i;
-+
-+ XS_INITERR(xs);
-+ isp = XS_ISP(xs);
-+
-+ /*
-+ * Check to make sure we're supporting initiator role.
-+ */
-+ if ((isp->isp_role & ISP_ROLE_INITIATOR) == 0) {
-+ XS_SETERR(xs, HBA_SELTIMEOUT);
-+ return (CMD_COMPLETE);
-+ }
-+
-+ /*
-+ * Now make sure we're running.
-+ */
-+
-+ if (isp->isp_state != ISP_RUNSTATE) {
-+ isp_prt(isp, ISP_LOGERR, "Adapter not at RUNSTATE");
-+ XS_SETERR(xs, HBA_BOTCH);
-+ return (CMD_COMPLETE);
-+ }
-+
-+ /*
-+ * Check command CDB length, etc.. We really are limited to 16 bytes
-+ * for Fibre Channel, but can do up to 44 bytes in parallel SCSI,
-+ * but probably only if we're running fairly new firmware (we'll
-+ * let the old f/w choke on an extended command queue entry).
-+ */
-+
-+ if (XS_CDBLEN(xs) > (IS_FC(isp)? 16 : 44) || XS_CDBLEN(xs) == 0) {
-+ isp_prt(isp, ISP_LOGERR,
-+ "unsupported cdb length (%d, CDB[0]=0x%x)",
-+ XS_CDBLEN(xs), XS_CDBP(xs)[0] & 0xff);
-+ XS_SETERR(xs, HBA_BOTCH);
-+ return (CMD_COMPLETE);
-+ }
-+
-+ /*
-+ * Check to see whether we have good firmware state still or
-+ * need to refresh our port database for this target.
-+ */
-+ target = XS_TGT(xs);
-+ if (IS_FC(isp)) {
-+ fcparam *fcp = isp->isp_param;
-+ struct lportdb *lp;
-+#ifdef HANDLE_LOOPSTATE_IN_OUTER_LAYERS
-+ if (fcp->isp_fwstate != FW_READY ||
-+ fcp->isp_loopstate != LOOP_READY) {
-+ return (CMD_RQLATER);
-+ }
-+
-+ /*
-+ * If we're not on a Fabric, we can't have a target
-+ * above FL_PORT_ID-1.
-+ *
-+ * If we're on a fabric and *not* connected as an F-port,
-+ * we can't have a target less than FC_SNS_ID+1. This
-+ * keeps us from having to sort out the difference between
-+ * local public loop devices and those which we might get
-+ * from a switch's database.
-+ */
-+ if (fcp->isp_onfabric == 0) {
-+ if (target >= FL_PORT_ID) {
-+ XS_SETERR(xs, HBA_SELTIMEOUT);
-+ return (CMD_COMPLETE);
-+ }
-+ } else {
-+ if (target >= FL_PORT_ID && target <= FC_SNS_ID) {
-+ XS_SETERR(xs, HBA_SELTIMEOUT);
-+ return (CMD_COMPLETE);
-+ }
-+ /*
-+ * We used to exclude having local loop ports
-+ * at the same time that we have fabric ports.
-+ * That is, we used to exclude having ports
-+ * at < FL_PORT_ID if we're FL-port.
-+ *
-+ * That's wrong. The only thing that could be
-+ * dicey is if the switch you're connected to
-+ * has these local loop ports appear on the
-+ * fabric and we somehow attach them twice.
-+ */
-+ }
-+#else
-+ /*
-+ * Check for f/w being in ready state. If the f/w
-+ * isn't in ready state, then we don't know our
-+ * loop ID and the f/w hasn't completed logging
-+ * into all targets on the loop. If this is the
-+ * case, then bounce the command. We pretend this is
-+ * a SELECTION TIMEOUT error if we've never gone to
-+ * FW_READY state at all- in this case we may not
-+ * be hooked to a loop at all and we shouldn't hang
-+ * the machine for this. Otherwise, defer this command
-+ * until later.
-+ */
-+ if (fcp->isp_fwstate != FW_READY) {
-+ /*
-+ * Give ourselves at most a 250ms delay.
-+ */
-+ if (isp_fclink_test(isp, 250000)) {
-+ XS_SETERR(xs, HBA_SELTIMEOUT);
-+ if (fcp->loop_seen_once) {
-+ return (CMD_RQLATER);
-+ } else {
-+ return (CMD_COMPLETE);
-+ }
-+ }
-+ }
-+
-+ /*
-+ * If we're not on a Fabric, we can't have a target
-+ * above FL_PORT_ID-1.
-+ *
-+ * If we're on a fabric and *not* connected as an F-port,
-+ * we can't have a target less than FC_SNS_ID+1. This
-+ * keeps us from having to sort out the difference between
-+ * local public loop devices and those which we might get
-+ * from a switch's database.
-+ */
-+ if (fcp->isp_onfabric == 0) {
-+ if (target >= FL_PORT_ID) {
-+ XS_SETERR(xs, HBA_SELTIMEOUT);
-+ return (CMD_COMPLETE);
-+ }
-+ } else {
-+ if (target >= FL_PORT_ID && target <= FC_SNS_ID) {
-+ XS_SETERR(xs, HBA_SELTIMEOUT);
-+ return (CMD_COMPLETE);
-+ }
-+ if (fcp->isp_topo != TOPO_F_PORT &&
-+ target < FL_PORT_ID) {
-+ XS_SETERR(xs, HBA_SELTIMEOUT);
-+ return (CMD_COMPLETE);
-+ }
-+ }
-+
-+ /*
-+ * If our loop state is such that we haven't yet received
-+ * a "Port Database Changed" notification (after a LIP or
-+ * a Loop Reset or firmware initialization), then defer
-+ * sending commands for a little while, but only if we've
-+ * seen a valid loop at one point (otherwise we can get
-+ * stuck at initialization time).
-+ */
-+ if (fcp->isp_loopstate < LOOP_PDB_RCVD) {
-+ XS_SETERR(xs, HBA_SELTIMEOUT);
-+ if (fcp->loop_seen_once) {
-+ return (CMD_RQLATER);
-+ } else {
-+ return (CMD_COMPLETE);
-+ }
-+ }
-+
-+ /*
-+ * If we're in the middle of loop or fabric scanning
-+ * or merging the port databases, retry this command later.
-+ */
-+ if (fcp->isp_loopstate == LOOP_SCANNING_FABRIC ||
-+ fcp->isp_loopstate == LOOP_SCANNING_LOOP ||
-+ fcp->isp_loopstate == LOOP_SYNCING_PDB) {
-+ return (CMD_RQLATER);
-+ }
-+
-+ /*
-+ * If our loop state is now such that we've just now
-+ * received a Port Database Change notification, then
-+ * we have to go off and (re)scan the fabric. We back
-+ * out and try again later if this doesn't work.
-+ */
-+ if (fcp->isp_loopstate == LOOP_PDB_RCVD && fcp->isp_onfabric) {
-+ if (isp_scan_fabric(isp, FC4_SCSI)) {
-+ return (CMD_RQLATER);
-+ }
-+ if (fcp->isp_fwstate != FW_READY ||
-+ fcp->isp_loopstate < LOOP_FSCAN_DONE) {
-+ return (CMD_RQLATER);
-+ }
-+ }
-+
-+ /*
-+ * If our loop state is now such that we've just now
-+ * received a Port Database Change notification, then
-+ * we have to go off and (re)synchronize our port
-+ * database.
-+ */
-+ if (fcp->isp_loopstate < LOOP_READY) {
-+ if (isp_pdb_sync(isp)) {
-+ return (CMD_RQLATER);
-+ }
-+ if (fcp->isp_fwstate != FW_READY ||
-+ fcp->isp_loopstate != LOOP_READY) {
-+ return (CMD_RQLATER);
-+ }
-+ }
-+
-+ /*
-+ * XXX: Here's were we would cancel any loop_dead flag
-+ * XXX: also cancel in dead_loop timeout that's running
-+ */
-+#endif
-+
-+ /*
-+ * Now check whether we should even think about pursuing this.
-+ */
-+ lp = &fcp->portdb[target];
-+ if (lp->valid == 0) {
-+ XS_SETERR(xs, HBA_SELTIMEOUT);
-+ return (CMD_COMPLETE);
-+ }
-+ if ((lp->roles & (SVC3_TGT_ROLE >> SVC3_ROLE_SHIFT)) == 0) {
-+ isp_prt(isp, ISP_LOGDEBUG2,
-+ "Target %d does not have target service", target);
-+ XS_SETERR(xs, HBA_SELTIMEOUT);
-+ return (CMD_COMPLETE);
-+ }
-+ /*
-+ * Now turn target into what the actual Loop ID is.
-+ */
-+ target = lp->loopid;
-+ }
-+
-+ /*
-+ * Next check to see if any HBA or Device
-+ * parameters need to be updated.
-+ */
-+ if (isp->isp_update != 0) {
-+ isp_update(isp);
-+ }
-+
-+ if (isp_getrqentry(isp, &nxti, &optr, (void *)&qep)) {
-+ isp_prt(isp, ISP_LOGDEBUG0, "Request Queue Overflow");
-+ XS_SETERR(xs, HBA_BOTCH);
-+ return (CMD_EAGAIN);
-+ }
-+
-+ /*
-+ * Now see if we need to synchronize the ISP with respect to anything.
-+ * We do dual duty here (cough) for synchronizing for busses other
-+ * than which we got here to send a command to.
-+ */
-+ reqp = (ispreq_t *) local;
-+ if (isp->isp_sendmarker) {
-+ u_int8_t n = (IS_DUALBUS(isp)? 2: 1);
-+ /*
-+ * Check ports to send markers for...
-+ */
-+ for (i = 0; i < n; i++) {
-+ if ((isp->isp_sendmarker & (1 << i)) == 0) {
-+ continue;
-+ }
-+ MEMZERO((void *) reqp, QENTRY_LEN);
-+ reqp->req_header.rqs_entry_count = 1;
-+ reqp->req_header.rqs_entry_type = RQSTYPE_MARKER;
-+ reqp->req_modifier = SYNC_ALL;
-+ reqp->req_target = i << 7; /* insert bus number */
-+ isp_put_request(isp, reqp, qep);
-+ ISP_ADD_REQUEST(isp, nxti);
-+ isp->isp_sendmarker &= ~(1 << i);
-+ if (isp_getrqentry(isp, &nxti, &optr, (void *) &qep)) {
-+ isp_prt(isp, ISP_LOGDEBUG0,
-+ "Request Queue Overflow+");
-+ XS_SETERR(xs, HBA_BOTCH);
-+ return (CMD_EAGAIN);
-+ }
-+ }
-+ }
-+
-+ MEMZERO((void *)reqp, QENTRY_LEN);
-+ reqp->req_header.rqs_entry_count = 1;
-+ if (IS_FC(isp)) {
-+ reqp->req_header.rqs_entry_type = RQSTYPE_T2RQS;
-+ } else {
-+ if (XS_CDBLEN(xs) > 12)
-+ reqp->req_header.rqs_entry_type = RQSTYPE_CMDONLY;
-+ else
-+ reqp->req_header.rqs_entry_type = RQSTYPE_REQUEST;
-+ }
-+ /* reqp->req_header.rqs_flags = 0; */
-+ /* reqp->req_header.rqs_seqno = 0; */
-+ if (IS_FC(isp)) {
-+ /*
-+ * See comment in isp_intr
-+ */
-+ /* XS_RESID(xs) = 0; */
-+
-+ /*
-+ * Fibre Channel always requires some kind of tag.
-+ * The Qlogic drivers seem be happy not to use a tag,
-+ * but this breaks for some devices (IBM drives).
-+ */
-+ if (XS_TAG_P(xs)) {
-+ ((ispreqt2_t *)reqp)->req_flags = XS_TAG_TYPE(xs);
-+ } else {
-+ /*
-+ * If we don't know what tag to use, use HEAD OF QUEUE
-+ * for Request Sense or Simple.
-+ */
-+ if (XS_CDBP(xs)[0] == 0x3) /* REQUEST SENSE */
-+ ((ispreqt2_t *)reqp)->req_flags = REQFLAG_HTAG;
-+ else
-+ ((ispreqt2_t *)reqp)->req_flags = REQFLAG_STAG;
-+ }
-+ } else {
-+ sdparam *sdp = (sdparam *)isp->isp_param;
-+ sdp += XS_CHANNEL(xs);
-+ if ((sdp->isp_devparam[target].actv_flags & DPARM_TQING) &&
-+ XS_TAG_P(xs)) {
-+ reqp->req_flags = XS_TAG_TYPE(xs);
-+ }
-+ }
-+ reqp->req_target = target | (XS_CHANNEL(xs) << 7);
-+ if (IS_SCSI(isp)) {
-+ reqp->req_lun_trn = XS_LUN(xs);
-+ reqp->req_cdblen = XS_CDBLEN(xs);
-+ } else {
-+ if (FCPARAM(isp)->isp_fwattr & ISP_FW_ATTR_SCCLUN)
-+ ((ispreqt2_t *)reqp)->req_scclun = XS_LUN(xs);
-+ else
-+ ((ispreqt2_t *)reqp)->req_lun_trn = XS_LUN(xs);
-+ }
-+ MEMCPY(reqp->req_cdb, XS_CDBP(xs), XS_CDBLEN(xs));
-+
-+ reqp->req_time = XS_TIME(xs) / 1000;
-+ if (reqp->req_time == 0 && XS_TIME(xs)) {
-+ reqp->req_time = 1;
-+ }
-+
-+ if (isp_save_xs(isp, xs, &handle)) {
-+ isp_prt(isp, ISP_LOGDEBUG0, "out of xflist pointers");
-+ XS_SETERR(xs, HBA_BOTCH);
-+ return (CMD_EAGAIN);
-+ }
-+ reqp->req_handle = handle;
-+
-+ /*
-+ * Set up DMA and/or do any bus swizzling of the request entry
-+ * so that the Qlogic F/W understands what is being asked of it.
-+ */
-+ i = ISP_DMASETUP(isp, xs, reqp, &nxti, optr);
-+ if (i != CMD_QUEUED) {
-+ isp_destroy_handle(isp, handle);
-+ /*
-+ * dmasetup sets actual error in packet, and
-+ * return what we were given to return.
-+ */
-+ return (i);
-+ }
-+ XS_SETERR(xs, HBA_NOERROR);
-+ isp_prt(isp, ISP_LOGDEBUG2,
-+ "START cmd for %d.%d.%d cmd 0x%x datalen %ld",
-+ XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs), XS_CDBP(xs)[0],
-+ (long) XS_XFRLEN(xs));
-+ ISP_ADD_REQUEST(isp, nxti);
-+ isp->isp_nactive++;
-+ return (CMD_QUEUED);
-+}
-+
-+/*
-+ * isp control
-+ * Locks (ints blocked) assumed held.
-+ */
-+
-+int
-+isp_control(struct ispsoftc *isp, ispctl_t ctl, void *arg)
-+{
-+ XS_T *xs;
-+ mbreg_t mbs;
-+ int bus, tgt;
-+ u_int16_t handle;
-+
-+ switch (ctl) {
-+ default:
-+ isp_prt(isp, ISP_LOGERR, "Unknown Control Opcode 0x%x", ctl);
-+ break;
-+
-+ case ISPCTL_RESET_BUS:
-+ /*
-+ * Issue a bus reset.
-+ */
-+ mbs.param[0] = MBOX_BUS_RESET;
-+ mbs.param[2] = 0;
-+ if (IS_SCSI(isp)) {
-+ mbs.param[1] =
-+ ((sdparam *) isp->isp_param)->isp_bus_reset_delay;
-+ if (mbs.param[1] < 2)
-+ mbs.param[1] = 2;
-+ bus = *((int *) arg);
-+ if (IS_DUALBUS(isp))
-+ mbs.param[2] = bus;
-+ } else {
-+ mbs.param[1] = 10;
-+ bus = 0;
-+ }
-+ isp->isp_sendmarker |= (1 << bus);
-+ isp_mboxcmd(isp, &mbs, MBLOGALL);
-+ if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
-+ break;
-+ }
-+ isp_prt(isp, ISP_LOGINFO,
-+ "driver initiated bus reset of bus %d", bus);
-+ return (0);
-+
-+ case ISPCTL_RESET_DEV:
-+ tgt = (*((int *) arg)) & 0xffff;
-+ bus = (*((int *) arg)) >> 16;
-+ mbs.param[0] = MBOX_ABORT_TARGET;
-+ mbs.param[1] = (tgt << 8) | (bus << 15);
-+ mbs.param[2] = 3; /* 'delay', in seconds */
-+ isp_mboxcmd(isp, &mbs, MBLOGALL);
-+ if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
-+ break;
-+ }
-+ isp_prt(isp, ISP_LOGINFO,
-+ "Target %d on Bus %d Reset Succeeded", tgt, bus);
-+ isp->isp_sendmarker |= (1 << bus);
-+ return (0);
-+
-+ case ISPCTL_ABORT_CMD:
-+ xs = (XS_T *) arg;
-+ tgt = XS_TGT(xs);
-+ handle = isp_find_handle(isp, xs);
-+ if (handle == 0) {
-+ isp_prt(isp, ISP_LOGWARN,
-+ "cannot find handle for command to abort");
-+ break;
-+ }
-+ bus = XS_CHANNEL(xs);
-+ mbs.param[0] = MBOX_ABORT;
-+ if (IS_FC(isp)) {
-+ if (FCPARAM(isp)->isp_fwattr & ISP_FW_ATTR_SCCLUN) {
-+ mbs.param[1] = tgt << 8;
-+ mbs.param[4] = 0;
-+ mbs.param[5] = 0;
-+ mbs.param[6] = XS_LUN(xs);
-+ } else {
-+ mbs.param[1] = tgt << 8 | XS_LUN(xs);
-+ }
-+ } else {
-+ mbs.param[1] =
-+ (bus << 15) | (XS_TGT(xs) << 8) | XS_LUN(xs);
-+ }
-+ mbs.param[3] = 0;
-+ mbs.param[2] = handle;
-+ isp_mboxcmd(isp, &mbs, MBLOGALL & ~MBOX_COMMAND_ERROR);
-+ if (mbs.param[0] == MBOX_COMMAND_COMPLETE) {
-+ return (0);
-+ }
-+ /*
-+ * XXX: Look for command in the REQUEST QUEUE. That is,
-+ * XXX: It hasen't been picked up by firmware yet.
-+ */
-+ break;
-+
-+ case ISPCTL_UPDATE_PARAMS:
-+
-+ isp_update(isp);
-+ return (0);
-+
-+ case ISPCTL_FCLINK_TEST:
-+
-+ if (IS_FC(isp)) {
-+ int usdelay = (arg)? *((int *) arg) : 250000;
-+ return (isp_fclink_test(isp, usdelay));
-+ }
-+ break;
-+
-+ case ISPCTL_SCAN_FABRIC:
-+
-+ if (IS_FC(isp)) {
-+ int ftype = (arg)? *((int *) arg) : FC4_SCSI;
-+ return (isp_scan_fabric(isp, ftype));
-+ }
-+ break;
-+
-+ case ISPCTL_SCAN_LOOP:
-+
-+ if (IS_FC(isp)) {
-+ return (isp_scan_loop(isp));
-+ }
-+ break;
-+
-+ case ISPCTL_PDB_SYNC:
-+
-+ if (IS_FC(isp)) {
-+ return (isp_pdb_sync(isp));
-+ }
-+ break;
-+
-+ case ISPCTL_SEND_LIP:
-+
-+ if (IS_FC(isp)) {
-+ mbs.param[0] = MBOX_INIT_LIP;
-+ isp_mboxcmd(isp, &mbs, MBLOGALL);
-+ if (mbs.param[0] == MBOX_COMMAND_COMPLETE) {
-+ return (0);
-+ }
-+ }
-+ break;
-+
-+ case ISPCTL_GET_POSMAP:
-+
-+ if (IS_FC(isp) && arg) {
-+ return (isp_getmap(isp, arg));
-+ }
-+ break;
-+
-+ case ISPCTL_RUN_MBOXCMD:
-+
-+ isp_mboxcmd(isp, arg, MBLOGALL);
-+ return(0);
-+
-+#ifdef ISP_TARGET_MODE
-+ case ISPCTL_TOGGLE_TMODE:
-+ {
-+
-+ /*
-+ * We don't check/set against role here- that's the
-+ * responsibility for the outer layer to coordinate.
-+ */
-+ if (IS_SCSI(isp)) {
-+ int param = *(int *)arg;
-+ mbs.param[0] = MBOX_ENABLE_TARGET_MODE;
-+ mbs.param[1] = param & 0xffff;
-+ mbs.param[2] = param >> 16;
-+ isp_mboxcmd(isp, &mbs, MBLOGALL);
-+ if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
-+ break;
-+ }
-+ }
-+ return (0);
-+ }
-+#endif
-+ }
-+ return (-1);
-+}
-+
-+/*
-+ * Interrupt Service Routine(s).
-+ *
-+ * External (OS) framework has done the appropriate locking,
-+ * and the locking will be held throughout this function.
-+ */
-+
-+/*
-+ * Limit our stack depth by sticking with the max likely number
-+ * of completions on a request queue at any one time.
-+ */
-+#ifndef MAX_REQUESTQ_COMPLETIONS
-+#define MAX_REQUESTQ_COMPLETIONS 64
-+#endif
-+
-+void
-+isp_intr(struct ispsoftc *isp, u_int16_t isr, u_int16_t sema, u_int16_t mbox)
-+{
-+ XS_T *complist[MAX_REQUESTQ_COMPLETIONS], *xs;
-+ u_int16_t iptr, optr, junk;
-+ int i, nlooked = 0, ndone = 0;
-+
-+again:
-+ /*
-+ * Is this a mailbox related interrupt?
-+ * The mailbox semaphore will be nonzero if so.
-+ */
-+ if (sema) {
-+ if (mbox & 0x4000) {
-+ isp->isp_intmboxc++;
-+ if (isp->isp_mboxbsy) {
-+ int i = 0, obits = isp->isp_obits;
-+ isp->isp_mboxtmp[i++] = mbox;
-+ for (i = 1; i < MAX_MAILBOX; i++) {
-+ if ((obits & (1 << i)) == 0) {
-+ continue;
-+ }
-+ isp->isp_mboxtmp[i] =
-+ ISP_READ(isp, MBOX_OFF(i));
-+ }
-+ if (isp->isp_mbxwrk0) {
-+ if (isp_mbox_continue(isp) == 0) {
-+ return;
-+ }
-+ }
-+ MBOX_NOTIFY_COMPLETE(isp);
-+ } else {
-+ isp_prt(isp, ISP_LOGWARN,
-+ "Mbox Command Async (0x%x) with no waiters",
-+ mbox);
-+ }
-+ } else if (isp_parse_async(isp, mbox) < 0) {
-+ return;
-+ }
-+ if ((IS_FC(isp) && mbox != ASYNC_RIO_RESP) ||
-+ isp->isp_state != ISP_RUNSTATE) {
-+ ISP_WRITE(isp, HCCR, HCCR_CMD_CLEAR_RISC_INT);
-+ ISP_WRITE(isp, BIU_SEMA, 0);
-+ return;
-+ }
-+ }
-+
-+ /*
-+ * We can't be getting this now.
-+ */
-+ if (isp->isp_state != ISP_RUNSTATE) {
-+ isp_prt(isp, ISP_LOGWARN,
-+ "interrupt (ISR=%x SEMA=%x) when not ready", isr, sema);
-+ /*
-+ * Thank you very much! *Burrrp*!
-+ */
-+ WRITE_RESPONSE_QUEUE_OUT_POINTER(isp,
-+ READ_RESPONSE_QUEUE_IN_POINTER(isp));
-+
-+ ISP_WRITE(isp, HCCR, HCCR_CMD_CLEAR_RISC_INT);
-+ ISP_WRITE(isp, BIU_SEMA, 0);
-+ return;
-+ }
-+
-+ /*
-+ * Get the current Response Queue Out Pointer.
-+ *
-+ * If we're a 2300, we can ask what hardware what it thinks.
-+ */
-+ if (IS_23XX(isp)) {
-+ optr = ISP_READ(isp, isp->isp_respoutrp);
-+ /*
-+ * Debug: to be taken out eventually
-+ */
-+ if (isp->isp_residx != optr) {
-+ isp_prt(isp, ISP_LOGWARN, "optr %x soft optr %x",
-+ optr, isp->isp_residx);
-+ }
-+ } else {
-+ optr = isp->isp_residx;
-+ }
-+
-+ /*
-+ * You *must* read the Response Queue In Pointer
-+ * prior to clearing the RISC interrupt.
-+ *
-+ * Debounce the 2300 if revision less than 2.
-+ */
-+ if (IS_2100(isp) || (IS_2300(isp) && isp->isp_revision < 2)) {
-+ i = 0;
-+ do {
-+ iptr = READ_RESPONSE_QUEUE_IN_POINTER(isp);
-+ junk = READ_RESPONSE_QUEUE_IN_POINTER(isp);
-+ } while (junk != iptr && ++i < 1000);
-+
-+ if (iptr != junk) {
-+ ISP_WRITE(isp, HCCR, HCCR_CMD_CLEAR_RISC_INT);
-+ isp_prt(isp, ISP_LOGWARN,
-+ "Response Queue Out Pointer Unstable (%x, %x)",
-+ iptr, junk);
-+ return;
-+ }
-+ } else {
-+ iptr = READ_RESPONSE_QUEUE_IN_POINTER(isp);
-+ }
-+ isp->isp_resodx = iptr;
-+
-+
-+ if (optr == iptr && sema == 0) {
-+ /*
-+ * There are a lot of these- reasons unknown- mostly on
-+ * faster Alpha machines.
-+ *
-+ * I tried delaying after writing HCCR_CMD_CLEAR_RISC_INT to
-+ * make sure the old interrupt went away (to avoid 'ringing'
-+ * effects), but that didn't stop this from occurring.
-+ */
-+ if (IS_23XX(isp)) {
-+ USEC_DELAY(100);
-+ iptr = READ_RESPONSE_QUEUE_IN_POINTER(isp);
-+ junk = ISP_READ(isp, BIU_R2HSTSLO);
-+ } else {
-+ junk = ISP_READ(isp, BIU_ISR);
-+ }
-+ if (optr == iptr) {
-+ if (IS_23XX(isp)) {
-+ ;
-+ } else {
-+ sema = ISP_READ(isp, BIU_SEMA);
-+ mbox = ISP_READ(isp, OUTMAILBOX0);
-+ if ((sema & 0x3) && (mbox & 0x8000)) {
-+ goto again;
-+ }
-+ }
-+ isp->isp_intbogus++;
-+ isp_prt(isp, ISP_LOGDEBUG1,
-+ "bogus intr- isr %x (%x) iptr %x optr %x",
-+ isr, junk, iptr, optr);
-+ }
-+ }
-+ isp->isp_resodx = iptr;
-+ ISP_WRITE(isp, HCCR, HCCR_CMD_CLEAR_RISC_INT);
-+ ISP_WRITE(isp, BIU_SEMA, 0);
-+
-+ if (isp->isp_rspbsy) {
-+ return;
-+ }
-+ isp->isp_rspbsy = 1;
-+
-+ while (optr != iptr) {
-+ ispstatusreq_t local, *sp = &local;
-+ isphdr_t *hp;
-+ int type;
-+ u_int16_t oop;
-+ int buddaboom = 0;
-+
-+ hp = (isphdr_t *) ISP_QUEUE_ENTRY(isp->isp_result, optr);
-+ oop = optr;
-+ optr = ISP_NXT_QENTRY(optr, RESULT_QUEUE_LEN(isp));
-+ nlooked++;
-+ /*
-+ * Synchronize our view of this response queue entry.
-+ */
-+ MEMORYBARRIER(isp, SYNC_RESULT, oop, QENTRY_LEN);
-+
-+ type = isp_get_response_type(isp, hp);
-+
-+ if (type == RQSTYPE_RESPONSE) {
-+ isp_get_response(isp, (ispstatusreq_t *) hp, sp);
-+ } else if (type == RQSTYPE_RIO2) {
-+ isp_rio2_t rio;
-+ isp_get_rio2(isp, (isp_rio2_t *) hp, &rio);
-+ for (i = 0; i < rio.req_header.rqs_seqno; i++) {
-+ isp_fastpost_complete(isp, rio.req_handles[i]);
-+ }
-+ if (isp->isp_fpcchiwater < rio.req_header.rqs_seqno)
-+ isp->isp_fpcchiwater = rio.req_header.rqs_seqno;
-+ MEMZERO(hp, QENTRY_LEN); /* PERF */
-+ continue;
-+ } else {
-+ /*
-+ * Somebody reachable via isp_handle_other_response
-+ * may have updated the response queue pointers for
-+ * us, so we reload our goal index.
-+ */
-+ if (isp_handle_other_response(isp, type, hp, &optr)) {
-+ iptr = isp->isp_resodx;
-+ MEMZERO(hp, QENTRY_LEN); /* PERF */
-+ continue;
-+ }
-+
-+ /*
-+ * After this point, we'll just look at the header as
-+ * we don't know how to deal with the rest of the
-+ * response.
-+ */
-+ isp_get_response(isp, (ispstatusreq_t *) hp, sp);
-+
-+ /*
-+ * It really has to be a bounced request just copied
-+ * from the request queue to the response queue. If
-+ * not, something bad has happened.
-+ */
-+ if (sp->req_header.rqs_entry_type != RQSTYPE_REQUEST) {
-+ isp_prt(isp, ISP_LOGERR, notresp,
-+ sp->req_header.rqs_entry_type, oop, optr,
-+ nlooked);
-+ if (isp->isp_dblev & ISP_LOGDEBUG0) {
-+ isp_print_bytes(isp, "Queue Entry",
-+ QENTRY_LEN, sp);
-+ }
-+ MEMZERO(hp, QENTRY_LEN); /* PERF */
-+ continue;
-+ }
-+ buddaboom = 1;
-+ }
-+
-+ if (sp->req_header.rqs_flags & 0xf) {
-+#define _RQS_OFLAGS \
-+ ~(RQSFLAG_CONTINUATION|RQSFLAG_FULL|RQSFLAG_BADHEADER|RQSFLAG_BADPACKET)
-+ if (sp->req_header.rqs_flags & RQSFLAG_CONTINUATION) {
-+ isp_prt(isp, ISP_LOGWARN,
-+ "continuation segment");
-+ WRITE_RESPONSE_QUEUE_OUT_POINTER(isp, optr);
-+ continue;
-+ }
-+ if (sp->req_header.rqs_flags & RQSFLAG_FULL) {
-+ isp_prt(isp, ISP_LOGDEBUG1,
-+ "internal queues full");
-+ /*
-+ * We'll synthesize a QUEUE FULL message below.
-+ */
-+ }
-+ if (sp->req_header.rqs_flags & RQSFLAG_BADHEADER) {
-+ isp_prt(isp, ISP_LOGERR, "bad header flag");
-+ buddaboom++;
-+ }
-+ if (sp->req_header.rqs_flags & RQSFLAG_BADPACKET) {
-+ isp_prt(isp, ISP_LOGERR, "bad request packet");
-+ buddaboom++;
-+ }
-+ if (sp->req_header.rqs_flags & _RQS_OFLAGS) {
-+ isp_prt(isp, ISP_LOGERR,
-+ "unknown flags (0x%x) in response",
-+ sp->req_header.rqs_flags);
-+ buddaboom++;
-+ }
-+#undef _RQS_OFLAGS
-+ }
-+ if (sp->req_handle > isp->isp_maxcmds || sp->req_handle < 1) {
-+ MEMZERO(hp, QENTRY_LEN); /* PERF */
-+ isp_prt(isp, ISP_LOGERR,
-+ "bad request handle %d (type 0x%x, flags 0x%x)",
-+ sp->req_handle, sp->req_header.rqs_entry_type,
-+ sp->req_header.rqs_flags);
-+ WRITE_RESPONSE_QUEUE_OUT_POINTER(isp, optr);
-+ continue;
-+ }
-+ xs = isp_find_xs(isp, sp->req_handle);
-+ if (xs == NULL) {
-+ u_int8_t ts = sp->req_completion_status & 0xff;
-+ MEMZERO(hp, QENTRY_LEN); /* PERF */
-+ /*
-+ * Only whine if this isn't the expected fallout of
-+ * aborting the command.
-+ */
-+ if (sp->req_header.rqs_entry_type != RQSTYPE_RESPONSE) {
-+ isp_prt(isp, ISP_LOGERR,
-+ "cannot find handle 0x%x (type 0x%x)",
-+ sp->req_handle,
-+ sp->req_header.rqs_entry_type);
-+ } else if (ts != RQCS_ABORTED) {
-+ isp_prt(isp, ISP_LOGERR,
-+ "cannot find handle 0x%x (status 0x%x)",
-+ sp->req_handle, ts);
-+ }
-+ WRITE_RESPONSE_QUEUE_OUT_POINTER(isp, optr);
-+ continue;
-+ }
-+ isp_destroy_handle(isp, sp->req_handle);
-+ if (sp->req_status_flags & RQSTF_BUS_RESET) {
-+ XS_SETERR(xs, HBA_BUSRESET);
-+ isp->isp_sendmarker |= (1 << XS_CHANNEL(xs));
-+ }
-+ if (buddaboom) {
-+ XS_SETERR(xs, HBA_BOTCH);
-+ }
-+
-+ if (IS_FC(isp) && (sp->req_scsi_status & RQCS_SV)) {
-+ /*
-+ * Fibre Channel F/W doesn't say we got status
-+ * if there's Sense Data instead. I guess they
-+ * think it goes w/o saying.
-+ */
-+ sp->req_state_flags |= RQSF_GOT_STATUS;
-+ }
-+ if (sp->req_state_flags & RQSF_GOT_STATUS) {
-+ *XS_STSP(xs) = sp->req_scsi_status & 0xff;
-+ }
-+
-+ switch (sp->req_header.rqs_entry_type) {
-+ case RQSTYPE_RESPONSE:
-+ XS_SET_STATE_STAT(isp, xs, sp);
-+ isp_parse_status(isp, sp, xs);
-+ if ((XS_NOERR(xs) || XS_ERR(xs) == HBA_NOERROR) &&
-+ (*XS_STSP(xs) == SCSI_BUSY)) {
-+ XS_SETERR(xs, HBA_TGTBSY);
-+ }
-+ if (IS_SCSI(isp)) {
-+ XS_RESID(xs) = sp->req_resid;
-+ if ((sp->req_state_flags & RQSF_GOT_STATUS) &&
-+ (*XS_STSP(xs) == SCSI_CHECK) &&
-+ (sp->req_state_flags & RQSF_GOT_SENSE)) {
-+ XS_SAVE_SENSE(xs, sp);
-+ }
-+ /*
-+ * A new synchronous rate was negotiated for
-+ * this target. Mark state such that we'll go
-+ * look up that which has changed later.
-+ */
-+ if (sp->req_status_flags & RQSTF_NEGOTIATION) {
-+ int t = XS_TGT(xs);
-+ sdparam *sdp = isp->isp_param;
-+ sdp += XS_CHANNEL(xs);
-+ sdp->isp_devparam[t].dev_refresh = 1;
-+ isp->isp_update |=
-+ (1 << XS_CHANNEL(xs));
-+ }
-+ } else {
-+ if (sp->req_status_flags & RQSF_XFER_COMPLETE) {
-+ XS_RESID(xs) = 0;
-+ } else if (sp->req_scsi_status & RQCS_RESID) {
-+ XS_RESID(xs) = sp->req_resid;
-+ } else {
-+ XS_RESID(xs) = 0;
-+ }
-+ if ((sp->req_state_flags & RQSF_GOT_STATUS) &&
-+ (*XS_STSP(xs) == SCSI_CHECK) &&
-+ (sp->req_scsi_status & RQCS_SV)) {
-+ XS_SAVE_SENSE(xs, sp);
-+ /* solely for the benefit of debug */
-+ sp->req_state_flags |= RQSF_GOT_SENSE;
-+ }
-+ }
-+ isp_prt(isp, ISP_LOGDEBUG2,
-+ "asked for %ld got resid %ld", (long) XS_XFRLEN(xs),
-+ (long) sp->req_resid);
-+ break;
-+ case RQSTYPE_REQUEST:
-+ if (sp->req_header.rqs_flags & RQSFLAG_FULL) {
-+ /*
-+ * Force Queue Full status.
-+ */
-+ *XS_STSP(xs) = SCSI_QFULL;
-+ XS_SETERR(xs, HBA_NOERROR);
-+ } else if (XS_NOERR(xs)) {
-+ /*
-+ * ????
-+ */
-+ isp_prt(isp, ISP_LOGDEBUG0,
-+ "Request Queue Entry bounced back");
-+ XS_SETERR(xs, HBA_BOTCH);
-+ }
-+ XS_RESID(xs) = XS_XFRLEN(xs);
-+ break;
-+ default:
-+ isp_prt(isp, ISP_LOGWARN,
-+ "unhandled response queue type 0x%x",
-+ sp->req_header.rqs_entry_type);
-+ if (XS_NOERR(xs)) {
-+ XS_SETERR(xs, HBA_BOTCH);
-+ }
-+ break;
-+ }
-+
-+ /*
-+ * Free any dma resources. As a side effect, this may
-+ * also do any cache flushing necessary for data coherence. */
-+ if (XS_XFRLEN(xs)) {
-+ ISP_DMAFREE(isp, xs, sp->req_handle);
-+ }
-+
-+ if (((isp->isp_dblev & (ISP_LOGDEBUG2|ISP_LOGDEBUG3))) ||
-+ ((isp->isp_dblev & ISP_LOGDEBUG1) && ((!XS_NOERR(xs)) ||
-+ (*XS_STSP(xs) != SCSI_GOOD)))) {
-+ char skey;
-+ if (sp->req_state_flags & RQSF_GOT_SENSE) {
-+ skey = XS_SNSKEY(xs) & 0xf;
-+ if (skey < 10)
-+ skey += '0';
-+ else
-+ skey += 'a' - 10;
-+ } else if (*XS_STSP(xs) == SCSI_CHECK) {
-+ skey = '?';
-+ } else {
-+ skey = '.';
-+ }
-+ isp_prt(isp, ISP_LOGALL, finmsg, XS_CHANNEL(xs),
-+ XS_TGT(xs), XS_LUN(xs), XS_XFRLEN(xs), XS_RESID(xs),
-+ *XS_STSP(xs), skey, XS_ERR(xs));
-+ }
-+
-+ if (isp->isp_nactive > 0)
-+ isp->isp_nactive--;
-+ complist[ndone++] = xs; /* defer completion call until later */
-+ MEMZERO(hp, QENTRY_LEN); /* PERF */
-+ if (ndone == MAX_REQUESTQ_COMPLETIONS) {
-+ break;
-+ }
-+ }
-+
-+ /*
-+ * If we looked at any commands, then it's valid to find out
-+ * what the outpointer is. It also is a trigger to update the
-+ * ISP's notion of what we've seen so far.
-+ */
-+ if (nlooked) {
-+ WRITE_RESPONSE_QUEUE_OUT_POINTER(isp, optr);
-+ /*
-+ * While we're at it, read the requst queue out pointer.
-+ */
-+ isp->isp_reqodx = READ_REQUEST_QUEUE_OUT_POINTER(isp);
-+ if (isp->isp_rscchiwater < ndone)
-+ isp->isp_rscchiwater = ndone;
-+ }
-+
-+ isp->isp_residx = optr;
-+ isp->isp_rspbsy = 0;
-+ for (i = 0; i < ndone; i++) {
-+ xs = complist[i];
-+ if (xs) {
-+ isp->isp_rsltccmplt++;
-+ isp_done(xs);
-+ }
-+ }
-+}
-+
-+/*
-+ * Support routines.
-+ */
-+
-+static int
-+isp_parse_async(struct ispsoftc *isp, u_int16_t mbox)
-+{
-+ int rval = 0;
-+ int bus;
-+
-+ if (IS_DUALBUS(isp)) {
-+ bus = ISP_READ(isp, OUTMAILBOX6);
-+ } else {
-+ bus = 0;
-+ }
-+ isp_prt(isp, ISP_LOGDEBUG2, "Async Mbox 0x%x", mbox);
-+
-+ switch (mbox) {
-+ case ASYNC_BUS_RESET:
-+ isp->isp_sendmarker |= (1 << bus);
-+#ifdef ISP_TARGET_MODE
-+ if (isp_target_async(isp, bus, mbox))
-+ rval = -1;
-+#endif
-+ isp_async(isp, ISPASYNC_BUS_RESET, &bus);
-+ break;
-+ case ASYNC_SYSTEM_ERROR:
-+#ifdef ISP_FW_CRASH_DUMP
-+ /*
-+ * If we have crash dumps enabled, it's up to the handler
-+ * for isp_async to reinit stuff and restart the firmware
-+ * after performing the crash dump. The reason we do things
-+ * this way is that we may need to activate a kernel thread
-+ * to do all the crash dump goop.
-+ */
-+ isp_async(isp, ISPASYNC_FW_CRASH, NULL);
-+#else
-+ isp_async(isp, ISPASYNC_FW_CRASH, NULL);
-+ isp_reinit(isp);
-+ isp_async(isp, ISPASYNC_FW_RESTARTED, NULL);
-+#endif
-+ rval = -1;
-+ break;
-+
-+ case ASYNC_RQS_XFER_ERR:
-+ isp_prt(isp, ISP_LOGERR, "Request Queue Transfer Error");
-+ break;
-+
-+ case ASYNC_RSP_XFER_ERR:
-+ isp_prt(isp, ISP_LOGERR, "Response Queue Transfer Error");
-+ break;
-+
-+ case ASYNC_QWAKEUP:
-+ /*
-+ * We've just been notified that the Queue has woken up.
-+ * We don't need to be chatty about this- just unlatch things
-+ * and move on.
-+ */
-+ mbox = READ_REQUEST_QUEUE_OUT_POINTER(isp);
-+ break;
-+
-+ case ASYNC_TIMEOUT_RESET:
-+ isp_prt(isp, ISP_LOGWARN,
-+ "timeout initiated SCSI bus reset of bus %d", bus);
-+ isp->isp_sendmarker |= (1 << bus);
-+#ifdef ISP_TARGET_MODE
-+ if (isp_target_async(isp, bus, mbox))
-+ rval = -1;
-+#endif
-+ break;
-+
-+ case ASYNC_DEVICE_RESET:
-+ isp_prt(isp, ISP_LOGINFO, "device reset on bus %d", bus);
-+ isp->isp_sendmarker |= (1 << bus);
-+#ifdef ISP_TARGET_MODE
-+ if (isp_target_async(isp, bus, mbox))
-+ rval = -1;
-+#endif
-+ break;
-+
-+ case ASYNC_EXTMSG_UNDERRUN:
-+ isp_prt(isp, ISP_LOGWARN, "extended message underrun");
-+ break;
-+
-+ case ASYNC_SCAM_INT:
-+ isp_prt(isp, ISP_LOGINFO, "SCAM interrupt");
-+ break;
-+
-+ case ASYNC_HUNG_SCSI:
-+ isp_prt(isp, ISP_LOGERR,
-+ "stalled SCSI Bus after DATA Overrun");
-+ /* XXX: Need to issue SCSI reset at this point */
-+ break;
-+
-+ case ASYNC_KILLED_BUS:
-+ isp_prt(isp, ISP_LOGERR, "SCSI Bus reset after DATA Overrun");
-+ break;
-+
-+ case ASYNC_BUS_TRANSIT:
-+ mbox = ISP_READ(isp, OUTMAILBOX2);
-+ switch (mbox & 0x1c00) {
-+ case SXP_PINS_LVD_MODE:
-+ isp_prt(isp, ISP_LOGINFO, "Transition to LVD mode");
-+ SDPARAM(isp)->isp_diffmode = 0;
-+ SDPARAM(isp)->isp_ultramode = 0;
-+ SDPARAM(isp)->isp_lvdmode = 1;
-+ break;
-+ case SXP_PINS_HVD_MODE:
-+ isp_prt(isp, ISP_LOGINFO,
-+ "Transition to Differential mode");
-+ SDPARAM(isp)->isp_diffmode = 1;
-+ SDPARAM(isp)->isp_ultramode = 0;
-+ SDPARAM(isp)->isp_lvdmode = 0;
-+ break;
-+ case SXP_PINS_SE_MODE:
-+ isp_prt(isp, ISP_LOGINFO,
-+ "Transition to Single Ended mode");
-+ SDPARAM(isp)->isp_diffmode = 0;
-+ SDPARAM(isp)->isp_ultramode = 1;
-+ SDPARAM(isp)->isp_lvdmode = 0;
-+ break;
-+ default:
-+ isp_prt(isp, ISP_LOGWARN,
-+ "Transition to Unknown Mode 0x%x", mbox);
-+ break;
-+ }
-+ /*
-+ * XXX: Set up to renegotiate again!
-+ */
-+ /* Can only be for a 1080... */
-+ isp->isp_sendmarker |= (1 << bus);
-+ break;
-+
-+ /*
-+ * We can use bus, which will always be zero for FC cards,
-+ * as a mailbox pattern accumulator to be checked below.
-+ */
-+ case ASYNC_RIO5:
-+ bus = 0x1ce; /* outgoing mailbox regs 1-3, 6-7 */
-+ break;
-+
-+ case ASYNC_RIO4:
-+ bus = 0x14e; /* outgoing mailbox regs 1-3, 6 */
-+ break;
-+
-+ case ASYNC_RIO3:
-+ bus = 0x10e; /* outgoing mailbox regs 1-3 */
-+ break;
-+
-+ case ASYNC_RIO2:
-+ bus = 0x106; /* outgoing mailbox regs 1-2 */
-+ break;
-+
-+ case ASYNC_RIO1:
-+ case ASYNC_CMD_CMPLT:
-+ bus = 0x102; /* outgoing mailbox regs 1 */
-+ break;
-+
-+ case ASYNC_RIO_RESP:
-+ return (rval);
-+
-+ case ASYNC_CTIO_DONE:
-+ {
-+#ifdef ISP_TARGET_MODE
-+ int handle =
-+ (ISP_READ(isp, OUTMAILBOX2) << 16) |
-+ (ISP_READ(isp, OUTMAILBOX1));
-+ if (isp_target_async(isp, handle, mbox))
-+ rval = -1;
-+#else
-+ isp_prt(isp, ISP_LOGINFO, "Fast Posting CTIO done");
-+#endif
-+ isp->isp_fphccmplt++; /* count it as a fast posting intr */
-+ break;
-+ }
-+ case ASYNC_LIP_F8:
-+ case ASYNC_LIP_OCCURRED:
-+ FCPARAM(isp)->isp_lipseq =
-+ ISP_READ(isp, OUTMAILBOX1);
-+ FCPARAM(isp)->isp_fwstate = FW_CONFIG_WAIT;
-+ FCPARAM(isp)->isp_loopstate = LOOP_LIP_RCVD;
-+ isp->isp_sendmarker = 1;
-+ isp_mark_getpdb_all(isp);
-+ isp_async(isp, ISPASYNC_LIP, NULL);
-+#ifdef ISP_TARGET_MODE
-+ if (isp_target_async(isp, bus, mbox))
-+ rval = -1;
-+#endif
-+ /*
-+ * We've had problems with data corruption occuring on
-+ * commands that complete (with no apparent error) after
-+ * we receive a LIP. This has been observed mostly on
-+ * Local Loop topologies. To be safe, let's just mark
-+ * all active commands as dead.
-+ */
-+ if (FCPARAM(isp)->isp_topo == TOPO_NL_PORT ||
-+ FCPARAM(isp)->isp_topo == TOPO_FL_PORT) {
-+ int i, j;
-+ for (i = j = 0; i < isp->isp_maxcmds; i++) {
-+ XS_T *xs;
-+ xs = isp->isp_xflist[i];
-+ if (xs != NULL) {
-+ j++;
-+ XS_SETERR(xs, HBA_BUSRESET);
-+ }
-+ }
-+ if (j) {
-+ isp_prt(isp, ISP_LOGERR,
-+ "LIP destroyed %d active commands", j);
-+ }
-+ }
-+ break;
-+
-+ case ASYNC_LOOP_UP:
-+ isp->isp_sendmarker = 1;
-+ FCPARAM(isp)->isp_fwstate = FW_CONFIG_WAIT;
-+ FCPARAM(isp)->isp_loopstate = LOOP_LIP_RCVD;
-+ isp_mark_getpdb_all(isp);
-+ isp_async(isp, ISPASYNC_LOOP_UP, NULL);
-+#ifdef ISP_TARGET_MODE
-+ if (isp_target_async(isp, bus, mbox))
-+ rval = -1;
-+#endif
-+ break;
-+
-+ case ASYNC_LOOP_DOWN:
-+ isp->isp_sendmarker = 1;
-+ FCPARAM(isp)->isp_fwstate = FW_CONFIG_WAIT;
-+ FCPARAM(isp)->isp_loopstate = LOOP_NIL;
-+ isp_mark_getpdb_all(isp);
-+ isp_async(isp, ISPASYNC_LOOP_DOWN, NULL);
-+#ifdef ISP_TARGET_MODE
-+ if (isp_target_async(isp, bus, mbox))
-+ rval = -1;
-+#endif
-+ break;
-+
-+ case ASYNC_LOOP_RESET:
-+ isp->isp_sendmarker = 1;
-+ FCPARAM(isp)->isp_fwstate = FW_CONFIG_WAIT;
-+ FCPARAM(isp)->isp_loopstate = LOOP_NIL;
-+ isp_mark_getpdb_all(isp);
-+ isp_async(isp, ISPASYNC_LOOP_RESET, NULL);
-+#ifdef ISP_TARGET_MODE
-+ if (isp_target_async(isp, bus, mbox))
-+ rval = -1;
-+#endif
-+ break;
-+
-+ case ASYNC_PDB_CHANGED:
-+ isp->isp_sendmarker = 1;
-+ FCPARAM(isp)->isp_loopstate = LOOP_PDB_RCVD;
-+ isp_mark_getpdb_all(isp);
-+ isp_async(isp, ISPASYNC_CHANGE_NOTIFY, ISPASYNC_CHANGE_PDB);
-+ break;
-+
-+ case ASYNC_CHANGE_NOTIFY:
-+ /*
-+ * Not correct, but it will force us to rescan the loop.
-+ */
-+ FCPARAM(isp)->isp_loopstate = LOOP_PDB_RCVD;
-+ isp_mark_getpdb_all(isp);
-+ isp_async(isp, ISPASYNC_CHANGE_NOTIFY, ISPASYNC_CHANGE_SNS);
-+ break;
-+
-+ case ASYNC_PTPMODE:
-+ if (FCPARAM(isp)->isp_onfabric)
-+ FCPARAM(isp)->isp_topo = TOPO_F_PORT;
-+ else
-+ FCPARAM(isp)->isp_topo = TOPO_N_PORT;
-+ isp_mark_getpdb_all(isp);
-+ isp->isp_sendmarker = 1;
-+ FCPARAM(isp)->isp_fwstate = FW_CONFIG_WAIT;
-+ FCPARAM(isp)->isp_loopstate = LOOP_LIP_RCVD;
-+ isp_async(isp, ISPASYNC_CHANGE_NOTIFY, ISPASYNC_CHANGE_OTHER);
-+#ifdef ISP_TARGET_MODE
-+ if (isp_target_async(isp, bus, mbox))
-+ rval = -1;
-+#endif
-+ isp_prt(isp, ISP_LOGINFO, "Point-to-Point mode");
-+ break;
-+
-+ case ASYNC_CONNMODE:
-+ mbox = ISP_READ(isp, OUTMAILBOX1);
-+ isp_mark_getpdb_all(isp);
-+ switch (mbox) {
-+ case ISP_CONN_LOOP:
-+ isp_prt(isp, ISP_LOGINFO,
-+ "Point-to-Point -> Loop mode");
-+ break;
-+ case ISP_CONN_PTP:
-+ isp_prt(isp, ISP_LOGINFO,
-+ "Loop -> Point-to-Point mode");
-+ break;
-+ case ISP_CONN_BADLIP:
-+ isp_prt(isp, ISP_LOGWARN,
-+ "Point-to-Point -> Loop mode (BAD LIP)");
-+ break;
-+ case ISP_CONN_FATAL:
-+ isp_prt(isp, ISP_LOGERR, "FATAL CONNECTION ERROR");
-+#ifdef ISP_FW_CRASH_DUMP
-+ isp_async(isp, ISPASYNC_FW_CRASH, NULL);
-+#else
-+ isp_async(isp, ISPASYNC_FW_CRASH, NULL);
-+ isp_reinit(isp);
-+ isp_async(isp, ISPASYNC_FW_RESTARTED, NULL);
-+#endif
-+ return (-1);
-+ case ISP_CONN_LOOPBACK:
-+ isp_prt(isp, ISP_LOGWARN,
-+ "Looped Back in Point-to-Point mode");
-+ break;
-+ default:
-+ isp_prt(isp, ISP_LOGWARN,
-+ "Unknown connection mode (0x%x)", mbox);
-+ break;
-+ }
-+ isp_async(isp, ISPASYNC_CHANGE_NOTIFY, ISPASYNC_CHANGE_OTHER);
-+ isp->isp_sendmarker = 1;
-+ FCPARAM(isp)->isp_fwstate = FW_CONFIG_WAIT;
-+ FCPARAM(isp)->isp_loopstate = LOOP_LIP_RCVD;
-+ break;
-+
-+ default:
-+ isp_prt(isp, ISP_LOGWARN, "Unknown Async Code 0x%x", mbox);
-+ break;
-+ }
-+
-+ if (bus & 0x100) {
-+ int i, nh;
-+ u_int16_t handles[5];
-+
-+ for (nh = 0, i = 1; i < MAX_MAILBOX; i++) {
-+ if ((bus & (1 << i)) == 0) {
-+ continue;
-+ }
-+ handles[nh++] = ISP_READ(isp, MBOX_OFF(i));
-+ }
-+ for (i = 0; i < nh; i++) {
-+ isp_fastpost_complete(isp, handles[i]);
-+ isp_prt(isp, ISP_LOGDEBUG3,
-+ "fast post completion of %u", handles[i]);
-+ }
-+ if (isp->isp_fpcchiwater < nh)
-+ isp->isp_fpcchiwater = nh;
-+ } else {
-+ isp->isp_intoasync++;
-+ }
-+ return (rval);
-+}
-+
-+/*
-+ * Handle other response entries. A pointer to the request queue output
-+ * index is here in case we want to eat several entries at once, although
-+ * this is not used currently.
-+ */
-+
-+static int
-+isp_handle_other_response(struct ispsoftc *isp, int type,
-+ isphdr_t *hp, u_int16_t *optrp)
-+{
-+ switch (type) {
-+ case RQSTYPE_STATUS_CONT:
-+ isp_prt(isp, ISP_LOGINFO, "Ignored Continuation Response");
-+ return (1);
-+ case RQSTYPE_ATIO:
-+ case RQSTYPE_CTIO:
-+ case RQSTYPE_ENABLE_LUN:
-+ case RQSTYPE_MODIFY_LUN:
-+ case RQSTYPE_NOTIFY:
-+ case RQSTYPE_NOTIFY_ACK:
-+ case RQSTYPE_CTIO1:
-+ case RQSTYPE_ATIO2:
-+ case RQSTYPE_CTIO2:
-+ case RQSTYPE_CTIO3:
-+ isp->isp_rsltccmplt++; /* count as a response completion */
-+#ifdef ISP_TARGET_MODE
-+ if (isp_target_notify(isp, (ispstatusreq_t *) hp, optrp)) {
-+ return (1);
-+ }
-+#endif
-+ /* FALLTHROUGH */
-+ case RQSTYPE_REQUEST:
-+ default:
-+ if (isp_async(isp, ISPASYNC_UNHANDLED_RESPONSE, hp)) {
-+ return (1);
-+ }
-+ isp_prt(isp, ISP_LOGWARN, "Unhandled Response Type 0x%x",
-+ isp_get_response_type(isp, hp));
-+ return (0);
-+ }
-+}
-+
-+static void
-+isp_parse_status(struct ispsoftc *isp, ispstatusreq_t *sp, XS_T *xs)
-+{
-+ switch (sp->req_completion_status & 0xff) {
-+ case RQCS_COMPLETE:
-+ if (XS_NOERR(xs)) {
-+ XS_SETERR(xs, HBA_NOERROR);
-+ }
-+ return;
-+
-+ case RQCS_INCOMPLETE:
-+ if ((sp->req_state_flags & RQSF_GOT_TARGET) == 0) {
-+ isp_prt(isp, ISP_LOGDEBUG1,
-+ "Selection Timeout for %d.%d.%d",
-+ XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs));
-+ if (XS_NOERR(xs)) {
-+ XS_SETERR(xs, HBA_SELTIMEOUT);
-+ }
-+ return;
-+ }
-+ isp_prt(isp, ISP_LOGERR,
-+ "command incomplete for %d.%d.%d, state 0x%x",
-+ XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs),
-+ sp->req_state_flags);
-+ break;
-+
-+ case RQCS_DMA_ERROR:
-+ isp_prt(isp, ISP_LOGERR, "DMA error for command on %d.%d.%d",
-+ XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs));
-+ break;
-+
-+ case RQCS_TRANSPORT_ERROR:
-+ {
-+ char buf[172];
-+ SNPRINTF(buf, sizeof (buf), "states=>");
-+ if (sp->req_state_flags & RQSF_GOT_BUS) {
-+ SNPRINTF(buf, sizeof (buf), "%s GOT_BUS", buf);
-+ }
-+ if (sp->req_state_flags & RQSF_GOT_TARGET) {
-+ SNPRINTF(buf, sizeof (buf), "%s GOT_TGT", buf);
-+ }
-+ if (sp->req_state_flags & RQSF_SENT_CDB) {
-+ SNPRINTF(buf, sizeof (buf), "%s SENT_CDB", buf);
-+ }
-+ if (sp->req_state_flags & RQSF_XFRD_DATA) {
-+ SNPRINTF(buf, sizeof (buf), "%s XFRD_DATA", buf);
-+ }
-+ if (sp->req_state_flags & RQSF_GOT_STATUS) {
-+ SNPRINTF(buf, sizeof (buf), "%s GOT_STS", buf);
-+ }
-+ if (sp->req_state_flags & RQSF_GOT_SENSE) {
-+ SNPRINTF(buf, sizeof (buf), "%s GOT_SNS", buf);
-+ }
-+ if (sp->req_state_flags & RQSF_XFER_COMPLETE) {
-+ SNPRINTF(buf, sizeof (buf), "%s XFR_CMPLT", buf);
-+ }
-+ SNPRINTF(buf, sizeof (buf), "%s\nstatus=>", buf);
-+ if (sp->req_status_flags & RQSTF_DISCONNECT) {
-+ SNPRINTF(buf, sizeof (buf), "%s Disconnect", buf);
-+ }
-+ if (sp->req_status_flags & RQSTF_SYNCHRONOUS) {
-+ SNPRINTF(buf, sizeof (buf), "%s Sync_xfr", buf);
-+ }
-+ if (sp->req_status_flags & RQSTF_PARITY_ERROR) {
-+ SNPRINTF(buf, sizeof (buf), "%s Parity", buf);
-+ }
-+ if (sp->req_status_flags & RQSTF_BUS_RESET) {
-+ SNPRINTF(buf, sizeof (buf), "%s Bus_Reset", buf);
-+ }
-+ if (sp->req_status_flags & RQSTF_DEVICE_RESET) {
-+ SNPRINTF(buf, sizeof (buf), "%s Device_Reset", buf);
-+ }
-+ if (sp->req_status_flags & RQSTF_ABORTED) {
-+ SNPRINTF(buf, sizeof (buf), "%s Aborted", buf);
-+ }
-+ if (sp->req_status_flags & RQSTF_TIMEOUT) {
-+ SNPRINTF(buf, sizeof (buf), "%s Timeout", buf);
-+ }
-+ if (sp->req_status_flags & RQSTF_NEGOTIATION) {
-+ SNPRINTF(buf, sizeof (buf), "%s Negotiation", buf);
-+ }
-+ isp_prt(isp, ISP_LOGERR, "%s", buf);
-+ isp_prt(isp, ISP_LOGERR, "transport error for %d.%d.%d:\n%s",
-+ XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs), buf);
-+ break;
-+ }
-+ case RQCS_RESET_OCCURRED:
-+ isp_prt(isp, ISP_LOGWARN,
-+ "bus reset destroyed command for %d.%d.%d",
-+ XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs));
-+ isp->isp_sendmarker |= (1 << XS_CHANNEL(xs));
-+ if (XS_NOERR(xs)) {
-+ XS_SETERR(xs, HBA_BUSRESET);
-+ }
-+ return;
-+
-+ case RQCS_ABORTED:
-+ isp_prt(isp, ISP_LOGERR, "command aborted for %d.%d.%d",
-+ XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs));
-+ isp->isp_sendmarker |= (1 << XS_CHANNEL(xs));
-+ if (XS_NOERR(xs)) {
-+ XS_SETERR(xs, HBA_ABORTED);
-+ }
-+ return;
-+
-+ case RQCS_TIMEOUT:
-+ isp_prt(isp, ISP_LOGWARN, "command timed out for %d.%d.%d",
-+ XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs));
-+ /*
-+ * Check to see if we logged out the device.
-+ */
-+ if (IS_FC(isp)) {
-+ if ((sp->req_completion_status & RQSTF_LOGOUT) &&
-+ FCPARAM(isp)->portdb[XS_TGT(xs)].valid &&
-+ FCPARAM(isp)->portdb[XS_TGT(xs)].fabric_dev) {
-+ FCPARAM(isp)->portdb[XS_TGT(xs)].relogin = 1;
-+ }
-+ }
-+ if (XS_NOERR(xs)) {
-+ XS_SETERR(xs, HBA_CMDTIMEOUT);
-+ }
-+ return;
-+
-+ case RQCS_DATA_OVERRUN:
-+ XS_RESID(xs) = sp->req_resid;
-+ isp_prt(isp, ISP_LOGERR, "data overrun for command on %d.%d.%d",
-+ XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs));
-+ if (XS_NOERR(xs)) {
-+ XS_SETERR(xs, HBA_DATAOVR);
-+ }
-+ return;
-+
-+ case RQCS_COMMAND_OVERRUN:
-+ isp_prt(isp, ISP_LOGERR,
-+ "command overrun for command on %d.%d.%d",
-+ XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs));
-+ break;
-+
-+ case RQCS_STATUS_OVERRUN:
-+ isp_prt(isp, ISP_LOGERR,
-+ "status overrun for command on %d.%d.%d",
-+ XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs));
-+ break;
-+
-+ case RQCS_BAD_MESSAGE:
-+ isp_prt(isp, ISP_LOGERR,
-+ "msg not COMMAND COMPLETE after status %d.%d.%d",
-+ XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs));
-+ break;
-+
-+ case RQCS_NO_MESSAGE_OUT:
-+ isp_prt(isp, ISP_LOGERR,
-+ "No MESSAGE OUT phase after selection on %d.%d.%d",
-+ XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs));
-+ break;
-+
-+ case RQCS_EXT_ID_FAILED:
-+ isp_prt(isp, ISP_LOGERR, "EXTENDED IDENTIFY failed %d.%d.%d",
-+ XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs));
-+ break;
-+
-+ case RQCS_IDE_MSG_FAILED:
-+ isp_prt(isp, ISP_LOGERR,
-+ "INITIATOR DETECTED ERROR rejected by %d.%d.%d",
-+ XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs));
-+ break;
-+
-+ case RQCS_ABORT_MSG_FAILED:
-+ isp_prt(isp, ISP_LOGERR, "ABORT OPERATION rejected by %d.%d.%d",
-+ XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs));
-+ break;
-+
-+ case RQCS_REJECT_MSG_FAILED:
-+ isp_prt(isp, ISP_LOGERR, "MESSAGE REJECT rejected by %d.%d.%d",
-+ XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs));
-+ break;
-+
-+ case RQCS_NOP_MSG_FAILED:
-+ isp_prt(isp, ISP_LOGERR, "NOP rejected by %d.%d.%d",
-+ XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs));
-+ break;
-+
-+ case RQCS_PARITY_ERROR_MSG_FAILED:
-+ isp_prt(isp, ISP_LOGERR,
-+ "MESSAGE PARITY ERROR rejected by %d.%d.%d",
-+ XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs));
-+ break;
-+
-+ case RQCS_DEVICE_RESET_MSG_FAILED:
-+ isp_prt(isp, ISP_LOGWARN,
-+ "BUS DEVICE RESET rejected by %d.%d.%d",
-+ XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs));
-+ break;
-+
-+ case RQCS_ID_MSG_FAILED:
-+ isp_prt(isp, ISP_LOGERR, "IDENTIFY rejected by %d.%d.%d",
-+ XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs));
-+ break;
-+
-+ case RQCS_UNEXP_BUS_FREE:
-+ isp_prt(isp, ISP_LOGERR, "%d.%d.%d had an unexpected bus free",
-+ XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs));
-+ break;
-+
-+ case RQCS_DATA_UNDERRUN:
-+ {
-+ if (IS_FC(isp)) {
-+ int ru_marked = (sp->req_scsi_status & RQCS_RU) != 0;
-+ if (!ru_marked || sp->req_resid > XS_XFRLEN(xs)) {
-+ isp_prt(isp, ISP_LOGWARN, bun, XS_TGT(xs),
-+ XS_LUN(xs), XS_XFRLEN(xs), sp->req_resid,
-+ (ru_marked)? "marked" : "not marked");
-+ if (XS_NOERR(xs)) {
-+ XS_SETERR(xs, HBA_BOTCH);
-+ }
-+ return;
-+ }
-+ }
-+ XS_RESID(xs) = sp->req_resid;
-+ if (XS_NOERR(xs)) {
-+ XS_SETERR(xs, HBA_NOERROR);
-+ }
-+ return;
-+ }
-+
-+ case RQCS_XACT_ERR1:
-+ isp_prt(isp, ISP_LOGERR, xact1, XS_CHANNEL(xs),
-+ XS_TGT(xs), XS_LUN(xs));
-+ break;
-+
-+ case RQCS_XACT_ERR2:
-+ isp_prt(isp, ISP_LOGERR, xact2,
-+ XS_LUN(xs), XS_TGT(xs), XS_CHANNEL(xs));
-+ break;
-+
-+ case RQCS_XACT_ERR3:
-+ isp_prt(isp, ISP_LOGERR, xact3,
-+ XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs));
-+ break;
-+
-+ case RQCS_BAD_ENTRY:
-+ isp_prt(isp, ISP_LOGERR, "Invalid IOCB entry type detected");
-+ break;
-+
-+ case RQCS_QUEUE_FULL:
-+ isp_prt(isp, ISP_LOGDEBUG0,
-+ "internal queues full for %d.%d.%d status 0x%x",
-+ XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs), *XS_STSP(xs));
-+
-+ /*
-+ * If QFULL or some other status byte is set, then this
-+ * isn't an error, per se.
-+ *
-+ * Unfortunately, some QLogic f/w writers have, in
-+ * some cases, ommitted to *set* status to QFULL.
-+ *
-+
-+ if (*XS_STSP(xs) != SCSI_GOOD && XS_NOERR(xs)) {
-+ XS_SETERR(xs, HBA_NOERROR);
-+ return;
-+ }
-+
-+ *
-+ *
-+ */
-+
-+ *XS_STSP(xs) = SCSI_QFULL;
-+ XS_SETERR(xs, HBA_NOERROR);
-+ return;
-+
-+ case RQCS_PHASE_SKIPPED:
-+ isp_prt(isp, ISP_LOGERR, pskip, XS_CHANNEL(xs),
-+ XS_TGT(xs), XS_LUN(xs));
-+ break;
-+
-+ case RQCS_ARQS_FAILED:
-+ isp_prt(isp, ISP_LOGERR,
-+ "Auto Request Sense failed for %d.%d.%d",
-+ XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs));
-+ if (XS_NOERR(xs)) {
-+ XS_SETERR(xs, HBA_ARQFAIL);
-+ }
-+ return;
-+
-+ case RQCS_WIDE_FAILED:
-+ isp_prt(isp, ISP_LOGERR,
-+ "Wide Negotiation failed for %d.%d.%d",
-+ XS_TGT(xs), XS_LUN(xs), XS_CHANNEL(xs));
-+ if (IS_SCSI(isp)) {
-+ sdparam *sdp = isp->isp_param;
-+ sdp += XS_CHANNEL(xs);
-+ sdp->isp_devparam[XS_TGT(xs)].goal_flags &= ~DPARM_WIDE;
-+ sdp->isp_devparam[XS_TGT(xs)].dev_update = 1;
-+ isp->isp_update |= (1 << XS_CHANNEL(xs));
-+ }
-+ if (XS_NOERR(xs)) {
-+ XS_SETERR(xs, HBA_NOERROR);
-+ }
-+ return;
-+
-+ case RQCS_SYNCXFER_FAILED:
-+ isp_prt(isp, ISP_LOGERR,
-+ "SDTR Message failed for target %d.%d.%d",
-+ XS_TGT(xs), XS_LUN(xs), XS_CHANNEL(xs));
-+ if (IS_SCSI(isp)) {
-+ sdparam *sdp = isp->isp_param;
-+ sdp += XS_CHANNEL(xs);
-+ sdp->isp_devparam[XS_TGT(xs)].goal_flags &= ~DPARM_SYNC;
-+ sdp->isp_devparam[XS_TGT(xs)].dev_update = 1;
-+ isp->isp_update |= (1 << XS_CHANNEL(xs));
-+ }
-+ break;
-+
-+ case RQCS_LVD_BUSERR:
-+ isp_prt(isp, ISP_LOGERR,
-+ "Bad LVD condition while talking to %d.%d.%d",
-+ XS_TGT(xs), XS_LUN(xs), XS_CHANNEL(xs));
-+ break;
-+
-+ case RQCS_PORT_UNAVAILABLE:
-+ /*
-+ * No such port on the loop. Moral equivalent of SELTIMEO
-+ */
-+ case RQCS_PORT_LOGGED_OUT:
-+ /*
-+ * It was there (maybe)- treat as a selection timeout.
-+ */
-+ if ((sp->req_completion_status & 0xff) == RQCS_PORT_UNAVAILABLE)
-+ isp_prt(isp, ISP_LOGINFO,
-+ "port unavailable for target %d", XS_TGT(xs));
-+ else
-+ isp_prt(isp, ISP_LOGINFO,
-+ "port logout for target %d", XS_TGT(xs));
-+ /*
-+ * If we're on a local loop, force a LIP (which is overkill)
-+ * to force a re-login of this unit. If we're on fabric,
-+ * then we'll have to relogin as a matter of course.
-+ */
-+ if (FCPARAM(isp)->isp_topo == TOPO_NL_PORT ||
-+ FCPARAM(isp)->isp_topo == TOPO_FL_PORT) {
-+ mbreg_t mbs;
-+ mbs.param[0] = MBOX_INIT_LIP;
-+ isp_mboxcmd_qnw(isp, &mbs, 1);
-+ }
-+
-+ /*
-+ * Probably overkill.
-+ */
-+ isp->isp_sendmarker = 1;
-+ FCPARAM(isp)->isp_loopstate = LOOP_PDB_RCVD;
-+ isp_mark_getpdb_all(isp);
-+ isp_async(isp, ISPASYNC_CHANGE_NOTIFY, ISPASYNC_CHANGE_OTHER);
-+ if (XS_NOERR(xs)) {
-+ XS_SETERR(xs, HBA_SELTIMEOUT);
-+ }
-+ return;
-+
-+ case RQCS_PORT_CHANGED:
-+ isp_prt(isp, ISP_LOGWARN,
-+ "port changed for target %d", XS_TGT(xs));
-+ if (XS_NOERR(xs)) {
-+ XS_SETERR(xs, HBA_SELTIMEOUT);
-+ }
-+ return;
-+
-+ case RQCS_PORT_BUSY:
-+ isp_prt(isp, ISP_LOGWARN,
-+ "port busy for target %d", XS_TGT(xs));
-+ if (XS_NOERR(xs)) {
-+ XS_SETERR(xs, HBA_TGTBSY);
-+ }
-+ return;
-+
-+ default:
-+ isp_prt(isp, ISP_LOGERR, "Unknown Completion Status 0x%x",
-+ sp->req_completion_status);
-+ break;
-+ }
-+ if (XS_NOERR(xs)) {
-+ XS_SETERR(xs, HBA_BOTCH);
-+ }
-+}
-+
-+static void
-+isp_fastpost_complete(struct ispsoftc *isp, u_int16_t fph)
-+{
-+ XS_T *xs;
-+
-+ if (fph == 0) {
-+ return;
-+ }
-+ xs = isp_find_xs(isp, fph);
-+ if (xs == NULL) {
-+ isp_prt(isp, ISP_LOGWARN,
-+ "Command for fast post handle 0x%x not found", fph);
-+ return;
-+ }
-+ isp_destroy_handle(isp, fph);
-+
-+ /*
-+ * Since we don't have a result queue entry item,
-+ * we must believe that SCSI status is zero and
-+ * that all data transferred.
-+ */
-+ XS_SET_STATE_STAT(isp, xs, NULL);
-+ XS_RESID(xs) = 0;
-+ *XS_STSP(xs) = SCSI_GOOD;
-+ if (XS_XFRLEN(xs)) {
-+ ISP_DMAFREE(isp, xs, fph);
-+ }
-+ if (isp->isp_nactive)
-+ isp->isp_nactive--;
-+ isp->isp_fphccmplt++;
-+ isp_done(xs);
-+}
-+
-+static int
-+isp_mbox_continue(struct ispsoftc *isp)
-+{
-+ mbreg_t mbs;
-+ u_int16_t *ptr;
-+
-+ switch (isp->isp_lastmbxcmd) {
-+ case MBOX_WRITE_RAM_WORD:
-+ case MBOX_READ_RAM_WORD:
-+ case MBOX_READ_RAM_WORD_EXTENDED:
-+ break;
-+ default:
-+ return (1);
-+ }
-+ if (isp->isp_mboxtmp[0] != MBOX_COMMAND_COMPLETE) {
-+ isp->isp_mbxwrk0 = 0;
-+ return (-1);
-+ }
-+
-+
-+ /*
-+ * Clear the previous interrupt.
-+ */
-+ ISP_WRITE(isp, HCCR, HCCR_CMD_CLEAR_RISC_INT);
-+ ISP_WRITE(isp, BIU_SEMA, 0);
-+
-+ /*
-+ * Continue with next word.
-+ */
-+ ptr = isp->isp_mbxworkp;
-+ switch (isp->isp_lastmbxcmd) {
-+ case MBOX_WRITE_RAM_WORD:
-+ mbs.param[2] = *ptr++;
-+ mbs.param[1] = isp->isp_mbxwrk1++;
-+ break;
-+ case MBOX_READ_RAM_WORD:
-+ case MBOX_READ_RAM_WORD_EXTENDED:
-+ *ptr++ = isp->isp_mboxtmp[2];
-+ mbs.param[1] = isp->isp_mbxwrk1++;
-+ break;
-+ }
-+ isp->isp_mbxworkp = ptr;
-+ mbs.param[0] = isp->isp_lastmbxcmd;
-+ isp->isp_mbxwrk0 -= 1;
-+ isp_mboxcmd_qnw(isp, &mbs, 0);
-+ return (0);
-+}
-+
-+
-+#define HIBYT(x) ((x) >> 0x8)
-+#define LOBYT(x) ((x) & 0xff)
-+#define ISPOPMAP(a, b) (((a) << 8) | (b))
-+static const u_int16_t mbpscsi[] = {
-+ ISPOPMAP(0x01, 0x01), /* 0x00: MBOX_NO_OP */
-+ ISPOPMAP(0x1f, 0x01), /* 0x01: MBOX_LOAD_RAM */
-+ ISPOPMAP(0x03, 0x01), /* 0x02: MBOX_EXEC_FIRMWARE */
-+ ISPOPMAP(0x1f, 0x01), /* 0x03: MBOX_DUMP_RAM */
-+ ISPOPMAP(0x07, 0x07), /* 0x04: MBOX_WRITE_RAM_WORD */
-+ ISPOPMAP(0x03, 0x07), /* 0x05: MBOX_READ_RAM_WORD */
-+ ISPOPMAP(0x3f, 0x3f), /* 0x06: MBOX_MAILBOX_REG_TEST */
-+ ISPOPMAP(0x03, 0x07), /* 0x07: MBOX_VERIFY_CHECKSUM */
-+ ISPOPMAP(0x01, 0x0f), /* 0x08: MBOX_ABOUT_FIRMWARE */
-+ ISPOPMAP(0x00, 0x00), /* 0x09: */
-+ ISPOPMAP(0x00, 0x00), /* 0x0a: */
-+ ISPOPMAP(0x00, 0x00), /* 0x0b: */
-+ ISPOPMAP(0x00, 0x00), /* 0x0c: */
-+ ISPOPMAP(0x00, 0x00), /* 0x0d: */
-+ ISPOPMAP(0x01, 0x05), /* 0x0e: MBOX_CHECK_FIRMWARE */
-+ ISPOPMAP(0x00, 0x00), /* 0x0f: */
-+ ISPOPMAP(0x1f, 0x1f), /* 0x10: MBOX_INIT_REQ_QUEUE */
-+ ISPOPMAP(0x3f, 0x3f), /* 0x11: MBOX_INIT_RES_QUEUE */
-+ ISPOPMAP(0x0f, 0x0f), /* 0x12: MBOX_EXECUTE_IOCB */
-+ ISPOPMAP(0x03, 0x03), /* 0x13: MBOX_WAKE_UP */
-+ ISPOPMAP(0x01, 0x3f), /* 0x14: MBOX_STOP_FIRMWARE */
-+ ISPOPMAP(0x0f, 0x0f), /* 0x15: MBOX_ABORT */
-+ ISPOPMAP(0x03, 0x03), /* 0x16: MBOX_ABORT_DEVICE */
-+ ISPOPMAP(0x07, 0x07), /* 0x17: MBOX_ABORT_TARGET */
-+ ISPOPMAP(0x07, 0x07), /* 0x18: MBOX_BUS_RESET */
-+ ISPOPMAP(0x03, 0x07), /* 0x19: MBOX_STOP_QUEUE */
-+ ISPOPMAP(0x03, 0x07), /* 0x1a: MBOX_START_QUEUE */
-+ ISPOPMAP(0x03, 0x07), /* 0x1b: MBOX_SINGLE_STEP_QUEUE */
-+ ISPOPMAP(0x03, 0x07), /* 0x1c: MBOX_ABORT_QUEUE */
-+ ISPOPMAP(0x03, 0x4f), /* 0x1d: MBOX_GET_DEV_QUEUE_STATUS */
-+ ISPOPMAP(0x00, 0x00), /* 0x1e: */
-+ ISPOPMAP(0x01, 0x07), /* 0x1f: MBOX_GET_FIRMWARE_STATUS */
-+ ISPOPMAP(0x01, 0x07), /* 0x20: MBOX_GET_INIT_SCSI_ID */
-+ ISPOPMAP(0x01, 0x07), /* 0x21: MBOX_GET_SELECT_TIMEOUT */
-+ ISPOPMAP(0x01, 0xc7), /* 0x22: MBOX_GET_RETRY_COUNT */
-+ ISPOPMAP(0x01, 0x07), /* 0x23: MBOX_GET_TAG_AGE_LIMIT */
-+ ISPOPMAP(0x01, 0x03), /* 0x24: MBOX_GET_CLOCK_RATE */
-+ ISPOPMAP(0x01, 0x07), /* 0x25: MBOX_GET_ACT_NEG_STATE */
-+ ISPOPMAP(0x01, 0x07), /* 0x26: MBOX_GET_ASYNC_DATA_SETUP_TIME */
-+ ISPOPMAP(0x01, 0x07), /* 0x27: MBOX_GET_PCI_PARAMS */
-+ ISPOPMAP(0x03, 0x4f), /* 0x28: MBOX_GET_TARGET_PARAMS */
-+ ISPOPMAP(0x03, 0x0f), /* 0x29: MBOX_GET_DEV_QUEUE_PARAMS */
-+ ISPOPMAP(0x01, 0x07), /* 0x2a: MBOX_GET_RESET_DELAY_PARAMS */
-+ ISPOPMAP(0x00, 0x00), /* 0x2b: */
-+ ISPOPMAP(0x00, 0x00), /* 0x2c: */
-+ ISPOPMAP(0x00, 0x00), /* 0x2d: */
-+ ISPOPMAP(0x00, 0x00), /* 0x2e: */
-+ ISPOPMAP(0x00, 0x00), /* 0x2f: */
-+ ISPOPMAP(0x03, 0x03), /* 0x30: MBOX_SET_INIT_SCSI_ID */
-+ ISPOPMAP(0x07, 0x07), /* 0x31: MBOX_SET_SELECT_TIMEOUT */
-+ ISPOPMAP(0xc7, 0xc7), /* 0x32: MBOX_SET_RETRY_COUNT */
-+ ISPOPMAP(0x07, 0x07), /* 0x33: MBOX_SET_TAG_AGE_LIMIT */
-+ ISPOPMAP(0x03, 0x03), /* 0x34: MBOX_SET_CLOCK_RATE */
-+ ISPOPMAP(0x07, 0x07), /* 0x35: MBOX_SET_ACT_NEG_STATE */
-+ ISPOPMAP(0x07, 0x07), /* 0x36: MBOX_SET_ASYNC_DATA_SETUP_TIME */
-+ ISPOPMAP(0x07, 0x07), /* 0x37: MBOX_SET_PCI_CONTROL_PARAMS */
-+ ISPOPMAP(0x4f, 0x4f), /* 0x38: MBOX_SET_TARGET_PARAMS */
-+ ISPOPMAP(0x0f, 0x0f), /* 0x39: MBOX_SET_DEV_QUEUE_PARAMS */
-+ ISPOPMAP(0x07, 0x07), /* 0x3a: MBOX_SET_RESET_DELAY_PARAMS */
-+ ISPOPMAP(0x00, 0x00), /* 0x3b: */
-+ ISPOPMAP(0x00, 0x00), /* 0x3c: */
-+ ISPOPMAP(0x00, 0x00), /* 0x3d: */
-+ ISPOPMAP(0x00, 0x00), /* 0x3e: */
-+ ISPOPMAP(0x00, 0x00), /* 0x3f: */
-+ ISPOPMAP(0x01, 0x03), /* 0x40: MBOX_RETURN_BIOS_BLOCK_ADDR */
-+ ISPOPMAP(0x3f, 0x01), /* 0x41: MBOX_WRITE_FOUR_RAM_WORDS */
-+ ISPOPMAP(0x03, 0x07), /* 0x42: MBOX_EXEC_BIOS_IOCB */
-+ ISPOPMAP(0x00, 0x00), /* 0x43: */
-+ ISPOPMAP(0x00, 0x00), /* 0x44: */
-+ ISPOPMAP(0x03, 0x03), /* 0x45: SET SYSTEM PARAMETER */
-+ ISPOPMAP(0x01, 0x03), /* 0x46: GET SYSTEM PARAMETER */
-+ ISPOPMAP(0x00, 0x00), /* 0x47: */
-+ ISPOPMAP(0x01, 0xcf), /* 0x48: GET SCAM CONFIGURATION */
-+ ISPOPMAP(0xcf, 0xcf), /* 0x49: SET SCAM CONFIGURATION */
-+ ISPOPMAP(0x03, 0x03), /* 0x4a: MBOX_SET_FIRMWARE_FEATURES */
-+ ISPOPMAP(0x01, 0x03), /* 0x4b: MBOX_GET_FIRMWARE_FEATURES */
-+ ISPOPMAP(0x00, 0x00), /* 0x4c: */
-+ ISPOPMAP(0x00, 0x00), /* 0x4d: */
-+ ISPOPMAP(0x00, 0x00), /* 0x4e: */
-+ ISPOPMAP(0x00, 0x00), /* 0x4f: */
-+ ISPOPMAP(0xdf, 0xdf), /* 0x50: LOAD RAM A64 */
-+ ISPOPMAP(0xdf, 0xdf), /* 0x51: DUMP RAM A64 */
-+ ISPOPMAP(0xdf, 0xff), /* 0x52: INITIALIZE REQUEST QUEUE A64 */
-+ ISPOPMAP(0xef, 0xff), /* 0x53: INITIALIZE RESPONSE QUEUE A64 */
-+ ISPOPMAP(0xcf, 0x01), /* 0x54: EXECUTE IOCB A64 */
-+ ISPOPMAP(0x07, 0x01), /* 0x55: ENABLE TARGET MODE */
-+ ISPOPMAP(0x03, 0x0f), /* 0x56: GET TARGET STATUS */
-+ ISPOPMAP(0x00, 0x00), /* 0x57: */
-+ ISPOPMAP(0x00, 0x00), /* 0x58: */
-+ ISPOPMAP(0x00, 0x00), /* 0x59: */
-+ ISPOPMAP(0x03, 0x03), /* 0x5a: SET DATA OVERRUN RECOVERY MODE */
-+ ISPOPMAP(0x01, 0x03), /* 0x5b: GET DATA OVERRUN RECOVERY MODE */
-+ ISPOPMAP(0x0f, 0x0f), /* 0x5c: SET HOST DATA */
-+ ISPOPMAP(0x01, 0x01) /* 0x5d: GET NOST DATA */
-+};
-+
-+#ifndef ISP_STRIPPED
-+static char *scsi_mbcmd_names[] = {
-+ "NO-OP",
-+ "LOAD RAM",
-+ "EXEC FIRMWARE",
-+ "DUMP RAM",
-+ "WRITE RAM WORD",
-+ "READ RAM WORD",
-+ "MAILBOX REG TEST",
-+ "VERIFY CHECKSUM",
-+ "ABOUT FIRMWARE",
-+ NULL,
-+ NULL,
-+ NULL,
-+ NULL,
-+ NULL,
-+ "CHECK FIRMWARE",
-+ NULL,
-+ "INIT REQUEST QUEUE",
-+ "INIT RESULT QUEUE",
-+ "EXECUTE IOCB",
-+ "WAKE UP",
-+ "STOP FIRMWARE",
-+ "ABORT",
-+ "ABORT DEVICE",
-+ "ABORT TARGET",
-+ "BUS RESET",
-+ "STOP QUEUE",
-+ "START QUEUE",
-+ "SINGLE STEP QUEUE",
-+ "ABORT QUEUE",
-+ "GET DEV QUEUE STATUS",
-+ NULL,
-+ "GET FIRMWARE STATUS",
-+ "GET INIT SCSI ID",
-+ "GET SELECT TIMEOUT",
-+ "GET RETRY COUNT",
-+ "GET TAG AGE LIMIT",
-+ "GET CLOCK RATE",
-+ "GET ACT NEG STATE",
-+ "GET ASYNC DATA SETUP TIME",
-+ "GET PCI PARAMS",
-+ "GET TARGET PARAMS",
-+ "GET DEV QUEUE PARAMS",
-+ "GET RESET DELAY PARAMS",
-+ NULL,
-+ NULL,
-+ NULL,
-+ NULL,
-+ NULL,
-+ "SET INIT SCSI ID",
-+ "SET SELECT TIMEOUT",
-+ "SET RETRY COUNT",
-+ "SET TAG AGE LIMIT",
-+ "SET CLOCK RATE",
-+ "SET ACT NEG STATE",
-+ "SET ASYNC DATA SETUP TIME",
-+ "SET PCI CONTROL PARAMS",
-+ "SET TARGET PARAMS",
-+ "SET DEV QUEUE PARAMS",
-+ "SET RESET DELAY PARAMS",
-+ NULL,
-+ NULL,
-+ NULL,
-+ NULL,
-+ NULL,
-+ "RETURN BIOS BLOCK ADDR",
-+ "WRITE FOUR RAM WORDS",
-+ "EXEC BIOS IOCB",
-+ NULL,
-+ NULL,
-+ "SET SYSTEM PARAMETER",
-+ "GET SYSTEM PARAMETER",
-+ NULL,
-+ "GET SCAM CONFIGURATION",
-+ "SET SCAM CONFIGURATION",
-+ "SET FIRMWARE FEATURES",
-+ "GET FIRMWARE FEATURES",
-+ NULL,
-+ NULL,
-+ NULL,
-+ NULL,
-+ "LOAD RAM A64",
-+ "DUMP RAM A64",
-+ "INITIALIZE REQUEST QUEUE A64",
-+ "INITIALIZE RESPONSE QUEUE A64",
-+ "EXECUTE IOCB A64",
-+ "ENABLE TARGET MODE",
-+ "GET TARGET MODE STATE",
-+ NULL,
-+ NULL,
-+ NULL,
-+ "SET DATA OVERRUN RECOVERY MODE",
-+ "GET DATA OVERRUN RECOVERY MODE",
-+ "SET HOST DATA",
-+ "GET NOST DATA",
-+};
-+#endif
-+
-+static const u_int16_t mbpfc[] = {
-+ ISPOPMAP(0x01, 0x01), /* 0x00: MBOX_NO_OP */
-+ ISPOPMAP(0x1f, 0x01), /* 0x01: MBOX_LOAD_RAM */
-+ ISPOPMAP(0x03, 0x01), /* 0x02: MBOX_EXEC_FIRMWARE */
-+ ISPOPMAP(0xdf, 0x01), /* 0x03: MBOX_DUMP_RAM */
-+ ISPOPMAP(0x07, 0x07), /* 0x04: MBOX_WRITE_RAM_WORD */
-+ ISPOPMAP(0x03, 0x07), /* 0x05: MBOX_READ_RAM_WORD */
-+ ISPOPMAP(0xff, 0xff), /* 0x06: MBOX_MAILBOX_REG_TEST */
-+ ISPOPMAP(0x03, 0x05), /* 0x07: MBOX_VERIFY_CHECKSUM */
-+ ISPOPMAP(0x01, 0x4f), /* 0x08: MBOX_ABOUT_FIRMWARE */
-+ ISPOPMAP(0xdf, 0x01), /* 0x09: LOAD RAM */
-+ ISPOPMAP(0xdf, 0x01), /* 0x0a: DUMP RAM */
-+ ISPOPMAP(0x00, 0x00), /* 0x0b: */
-+ ISPOPMAP(0x00, 0x00), /* 0x0c: */
-+ ISPOPMAP(0x00, 0x00), /* 0x0d: */
-+ ISPOPMAP(0x01, 0x05), /* 0x0e: MBOX_CHECK_FIRMWARE */
-+ ISPOPMAP(0x03, 0x07), /* 0x0f: MBOX_READ_RAM_WORD_EXTENDED(1) */
-+ ISPOPMAP(0x1f, 0x11), /* 0x10: MBOX_INIT_REQ_QUEUE */
-+ ISPOPMAP(0x2f, 0x21), /* 0x11: MBOX_INIT_RES_QUEUE */
-+ ISPOPMAP(0x0f, 0x01), /* 0x12: MBOX_EXECUTE_IOCB */
-+ ISPOPMAP(0x03, 0x03), /* 0x13: MBOX_WAKE_UP */
-+ ISPOPMAP(0x01, 0xff), /* 0x14: MBOX_STOP_FIRMWARE */
-+ ISPOPMAP(0x4f, 0x01), /* 0x15: MBOX_ABORT */
-+ ISPOPMAP(0x07, 0x01), /* 0x16: MBOX_ABORT_DEVICE */
-+ ISPOPMAP(0x07, 0x01), /* 0x17: MBOX_ABORT_TARGET */
-+ ISPOPMAP(0x03, 0x03), /* 0x18: MBOX_BUS_RESET */
-+ ISPOPMAP(0x07, 0x05), /* 0x19: MBOX_STOP_QUEUE */
-+ ISPOPMAP(0x07, 0x05), /* 0x1a: MBOX_START_QUEUE */
-+ ISPOPMAP(0x07, 0x05), /* 0x1b: MBOX_SINGLE_STEP_QUEUE */
-+ ISPOPMAP(0x07, 0x05), /* 0x1c: MBOX_ABORT_QUEUE */
-+ ISPOPMAP(0x07, 0x03), /* 0x1d: MBOX_GET_DEV_QUEUE_STATUS */
-+ ISPOPMAP(0x00, 0x00), /* 0x1e: */
-+ ISPOPMAP(0x01, 0x07), /* 0x1f: MBOX_GET_FIRMWARE_STATUS */
-+ ISPOPMAP(0x01, 0x4f), /* 0x20: MBOX_GET_LOOP_ID */
-+ ISPOPMAP(0x00, 0x00), /* 0x21: */
-+ ISPOPMAP(0x01, 0x07), /* 0x22: MBOX_GET_RETRY_COUNT */
-+ ISPOPMAP(0x00, 0x00), /* 0x23: */
-+ ISPOPMAP(0x00, 0x00), /* 0x24: */
-+ ISPOPMAP(0x00, 0x00), /* 0x25: */
-+ ISPOPMAP(0x00, 0x00), /* 0x26: */
-+ ISPOPMAP(0x00, 0x00), /* 0x27: */
-+ ISPOPMAP(0x01, 0x03), /* 0x28: MBOX_GET_FIRMWARE_OPTIONS */
-+ ISPOPMAP(0x03, 0x07), /* 0x29: MBOX_GET_PORT_QUEUE_PARAMS */
-+ ISPOPMAP(0x00, 0x00), /* 0x2a: */
-+ ISPOPMAP(0x00, 0x00), /* 0x2b: */
-+ ISPOPMAP(0x00, 0x00), /* 0x2c: */
-+ ISPOPMAP(0x00, 0x00), /* 0x2d: */
-+ ISPOPMAP(0x00, 0x00), /* 0x2e: */
-+ ISPOPMAP(0x00, 0x00), /* 0x2f: */
-+ ISPOPMAP(0x00, 0x00), /* 0x30: */
-+ ISPOPMAP(0x00, 0x00), /* 0x31: */
-+ ISPOPMAP(0x07, 0x07), /* 0x32: MBOX_SET_RETRY_COUNT */
-+ ISPOPMAP(0x00, 0x00), /* 0x33: */
-+ ISPOPMAP(0x00, 0x00), /* 0x34: */
-+ ISPOPMAP(0x00, 0x00), /* 0x35: */
-+ ISPOPMAP(0x00, 0x00), /* 0x36: */
-+ ISPOPMAP(0x00, 0x00), /* 0x37: */
-+ ISPOPMAP(0x0f, 0x01), /* 0x38: MBOX_SET_FIRMWARE_OPTIONS */
-+ ISPOPMAP(0x0f, 0x07), /* 0x39: MBOX_SET_PORT_QUEUE_PARAMS */
-+ ISPOPMAP(0x00, 0x00), /* 0x3a: */
-+ ISPOPMAP(0x00, 0x00), /* 0x3b: */
-+ ISPOPMAP(0x00, 0x00), /* 0x3c: */
-+ ISPOPMAP(0x00, 0x00), /* 0x3d: */
-+ ISPOPMAP(0x00, 0x00), /* 0x3e: */
-+ ISPOPMAP(0x00, 0x00), /* 0x3f: */
-+ ISPOPMAP(0x03, 0x01), /* 0x40: MBOX_LOOP_PORT_BYPASS */
-+ ISPOPMAP(0x03, 0x01), /* 0x41: MBOX_LOOP_PORT_ENABLE */
-+ ISPOPMAP(0x03, 0x07), /* 0x42: MBOX_GET_RESOURCE_COUNTS */
-+ ISPOPMAP(0x01, 0x01), /* 0x43: MBOX_REQUEST_NON_PARTICIPATING_MODE */
-+ ISPOPMAP(0x00, 0x00), /* 0x44: */
-+ ISPOPMAP(0x00, 0x00), /* 0x45: */
-+ ISPOPMAP(0x00, 0x00), /* 0x46: */
-+ ISPOPMAP(0xcf, 0x03), /* 0x47: GET PORT_DATABASE ENHANCED */
-+ ISPOPMAP(0x00, 0x00), /* 0x48: */
-+ ISPOPMAP(0x00, 0x00), /* 0x49: */
-+ ISPOPMAP(0x00, 0x00), /* 0x4a: */
-+ ISPOPMAP(0x00, 0x00), /* 0x4b: */
-+ ISPOPMAP(0x00, 0x00), /* 0x4c: */
-+ ISPOPMAP(0x00, 0x00), /* 0x4d: */
-+ ISPOPMAP(0x00, 0x00), /* 0x4e: */
-+ ISPOPMAP(0x00, 0x00), /* 0x4f: */
-+ ISPOPMAP(0x00, 0x00), /* 0x50: */
-+ ISPOPMAP(0x00, 0x00), /* 0x51: */
-+ ISPOPMAP(0x00, 0x00), /* 0x52: */
-+ ISPOPMAP(0x00, 0x00), /* 0x53: */
-+ ISPOPMAP(0xcf, 0x01), /* 0x54: EXECUTE IOCB A64 */
-+ ISPOPMAP(0x00, 0x00), /* 0x55: */
-+ ISPOPMAP(0x00, 0x00), /* 0x56: */
-+ ISPOPMAP(0x00, 0x00), /* 0x57: */
-+ ISPOPMAP(0x00, 0x00), /* 0x58: */
-+ ISPOPMAP(0x00, 0x00), /* 0x59: */
-+ ISPOPMAP(0x00, 0x00), /* 0x5a: */
-+ ISPOPMAP(0x03, 0x01), /* 0x5b: MBOX_DRIVER_HEARTBEAT */
-+ ISPOPMAP(0xcf, 0x01), /* 0x5c: MBOX_FW_HEARTBEAT */
-+ ISPOPMAP(0x07, 0x03), /* 0x5d: MBOX_GET_SET_DATA_RATE */
-+ ISPOPMAP(0x00, 0x00), /* 0x5e: */
-+ ISPOPMAP(0x00, 0x00), /* 0x5f: */
-+ ISPOPMAP(0xfd, 0x31), /* 0x60: MBOX_INIT_FIRMWARE */
-+ ISPOPMAP(0x00, 0x00), /* 0x61: */
-+ ISPOPMAP(0x01, 0x01), /* 0x62: MBOX_INIT_LIP */
-+ ISPOPMAP(0xcd, 0x03), /* 0x63: MBOX_GET_FC_AL_POSITION_MAP */
-+ ISPOPMAP(0xcf, 0x01), /* 0x64: MBOX_GET_PORT_DB */
-+ ISPOPMAP(0x07, 0x01), /* 0x65: MBOX_CLEAR_ACA */
-+ ISPOPMAP(0x07, 0x01), /* 0x66: MBOX_TARGET_RESET */
-+ ISPOPMAP(0x07, 0x01), /* 0x67: MBOX_CLEAR_TASK_SET */
-+ ISPOPMAP(0x07, 0x01), /* 0x68: MBOX_ABORT_TASK_SET */
-+ ISPOPMAP(0x01, 0x07), /* 0x69: MBOX_GET_FW_STATE */
-+ ISPOPMAP(0x03, 0xcf), /* 0x6a: MBOX_GET_PORT_NAME */
-+ ISPOPMAP(0xcf, 0x01), /* 0x6b: MBOX_GET_LINK_STATUS */
-+ ISPOPMAP(0x0f, 0x01), /* 0x6c: MBOX_INIT_LIP_RESET */
-+ ISPOPMAP(0x00, 0x00), /* 0x6d: */
-+ ISPOPMAP(0xcf, 0x03), /* 0x6e: MBOX_SEND_SNS */
-+ ISPOPMAP(0x0f, 0x07), /* 0x6f: MBOX_FABRIC_LOGIN */
-+ ISPOPMAP(0x03, 0x01), /* 0x70: MBOX_SEND_CHANGE_REQUEST */
-+ ISPOPMAP(0x03, 0x03), /* 0x71: MBOX_FABRIC_LOGOUT */
-+ ISPOPMAP(0x0f, 0x0f), /* 0x72: MBOX_INIT_LIP_LOGIN */
-+ ISPOPMAP(0x00, 0x00), /* 0x73: */
-+ ISPOPMAP(0x07, 0x01), /* 0x74: LOGIN LOOP PORT */
-+ ISPOPMAP(0xcf, 0x03), /* 0x75: GET PORT/NODE NAME LIST */
-+ ISPOPMAP(0x4f, 0x01), /* 0x76: SET VENDOR ID */
-+ ISPOPMAP(0xcd, 0x01), /* 0x77: INITIALIZE IP MAILBOX */
-+ ISPOPMAP(0x00, 0x00), /* 0x78: */
-+ ISPOPMAP(0x00, 0x00), /* 0x79: */
-+ ISPOPMAP(0x00, 0x00), /* 0x7a: */
-+ ISPOPMAP(0x00, 0x00), /* 0x7b: */
-+ ISPOPMAP(0x4f, 0x03), /* 0x7c: Get ID List */
-+ ISPOPMAP(0xcf, 0x01), /* 0x7d: SEND LFA */
-+ ISPOPMAP(0x07, 0x01) /* 0x7e: Lun RESET */
-+};
-+/*
-+ * Footnotes
-+ *
-+ * (1): this sets bits 21..16 in mailbox register #8, which we nominally
-+ * do not access at this time in the core driver. The caller is
-+ * responsible for setting this register first (Gross!).
-+ */
-+
-+#ifndef ISP_STRIPPED
-+static char *fc_mbcmd_names[] = {
-+ "NO-OP",
-+ "LOAD RAM",
-+ "EXEC FIRMWARE",
-+ "DUMP RAM",
-+ "WRITE RAM WORD",
-+ "READ RAM WORD",
-+ "MAILBOX REG TEST",
-+ "VERIFY CHECKSUM",
-+ "ABOUT FIRMWARE",
-+ "LOAD RAM",
-+ "DUMP RAM",
-+ NULL,
-+ NULL,
-+ "READ RAM WORD EXTENDED",
-+ "CHECK FIRMWARE",
-+ NULL,
-+ "INIT REQUEST QUEUE",
-+ "INIT RESULT QUEUE",
-+ "EXECUTE IOCB",
-+ "WAKE UP",
-+ "STOP FIRMWARE",
-+ "ABORT",
-+ "ABORT DEVICE",
-+ "ABORT TARGET",
-+ "BUS RESET",
-+ "STOP QUEUE",
-+ "START QUEUE",
-+ "SINGLE STEP QUEUE",
-+ "ABORT QUEUE",
-+ "GET DEV QUEUE STATUS",
-+ NULL,
-+ "GET FIRMWARE STATUS",
-+ "GET LOOP ID",
-+ NULL,
-+ "GET RETRY COUNT",
-+ NULL,
-+ NULL,
-+ NULL,
-+ NULL,
-+ NULL,
-+ "GET FIRMWARE OPTIONS",
-+ "GET PORT QUEUE PARAMS",
-+ NULL,
-+ NULL,
-+ NULL,
-+ NULL,
-+ NULL,
-+ NULL,
-+ NULL,
-+ NULL,
-+ "SET RETRY COUNT",
-+ NULL,
-+ NULL,
-+ NULL,
-+ NULL,
-+ NULL,
-+ "SET FIRMWARE OPTIONS",
-+ "SET PORT QUEUE PARAMS",
-+ NULL,
-+ NULL,
-+ NULL,
-+ NULL,
-+ NULL,
-+ NULL,
-+ "LOOP PORT BYPASS",
-+ "LOOP PORT ENABLE",
-+ "GET RESOURCE COUNTS",
-+ "REQUEST NON PARTICIPATING MODE",
-+ NULL,
-+ NULL,
-+ NULL,
-+ "GET PORT DATABASE,, ENHANCED",
-+ NULL,
-+ NULL,
-+ NULL,
-+ NULL,
-+ NULL,
-+ NULL,
-+ NULL,
-+ NULL,
-+ NULL,
-+ NULL,
-+ NULL,
-+ NULL,
-+ "EXECUTE IOCB A64",
-+ NULL,
-+ NULL,
-+ NULL,
-+ NULL,
-+ NULL,
-+ NULL,
-+ "DRIVER HEARTBEAT",
-+ NULL,
-+ "GET/SET DATA RATE",
-+ NULL,
-+ NULL,
-+ "INIT FIRMWARE",
-+ NULL,
-+ "INIT LIP",
-+ "GET FC-AL POSITION MAP",
-+ "GET PORT DATABASE",
-+ "CLEAR ACA",
-+ "TARGET RESET",
-+ "CLEAR TASK SET",
-+ "ABORT TASK SET",
-+ "GET FW STATE",
-+ "GET PORT NAME",
-+ "GET LINK STATUS",
-+ "INIT LIP RESET",
-+ NULL,
-+ "SEND SNS",
-+ "FABRIC LOGIN",
-+ "SEND CHANGE REQUEST",
-+ "FABRIC LOGOUT",
-+ "INIT LIP LOGIN",
-+ NULL,
-+ "LOGIN LOOP PORT",
-+ "GET PORT/NODE NAME LIST",
-+ "SET VENDOR ID",
-+ "INITIALIZE IP MAILBOX",
-+ NULL,
-+ NULL,
-+ NULL,
-+ NULL,
-+ "Get ID List",
-+ "SEND LFA",
-+ "Lun RESET"
-+};
-+#endif
-+
-+static void
-+isp_mboxcmd_qnw(struct ispsoftc *isp, mbreg_t *mbp, int nodelay)
-+{
-+ unsigned int ibits, obits, box, opcode;
-+ const u_int16_t *mcp;
-+
-+ if (IS_FC(isp)) {
-+ mcp = mbpfc;
-+ } else {
-+ mcp = mbpscsi;
-+ }
-+ opcode = mbp->param[0];
-+ ibits = HIBYT(mcp[opcode]) & NMBOX_BMASK(isp);
-+ obits = LOBYT(mcp[opcode]) & NMBOX_BMASK(isp);
-+ for (box = 0; box < MAX_MAILBOX; box++) {
-+ if (ibits & (1 << box)) {
-+ ISP_WRITE(isp, MBOX_OFF(box), mbp->param[box]);
-+ }
-+ if (nodelay == 0) {
-+ isp->isp_mboxtmp[box] = mbp->param[box] = 0;
-+ }
-+ }
-+ if (nodelay == 0) {
-+ isp->isp_lastmbxcmd = opcode;
-+ isp->isp_obits = obits;
-+ isp->isp_mboxbsy = 1;
-+ }
-+ ISP_WRITE(isp, HCCR, HCCR_CMD_SET_HOST_INT);
-+ /*
-+ * Oddly enough, if we're not delaying for an answer,
-+ * delay a bit to give the f/w a chance to pick up the
-+ * command.
-+ */
-+ if (nodelay) {
-+ USEC_DELAY(1000);
-+ }
-+}
-+
-+static void
-+isp_mboxcmd(struct ispsoftc *isp, mbreg_t *mbp, int logmask)
-+{
-+ char *cname, *xname, tname[16], mname[16];
-+ unsigned int lim, ibits, obits, box, opcode;
-+ const u_int16_t *mcp;
-+
-+ if (IS_FC(isp)) {
-+ mcp = mbpfc;
-+ lim = (sizeof (mbpfc) / sizeof (mbpfc[0]));
-+ } else {
-+ mcp = mbpscsi;
-+ lim = (sizeof (mbpscsi) / sizeof (mbpscsi[0]));
-+ }
-+
-+ if ((opcode = mbp->param[0]) >= lim) {
-+ mbp->param[0] = MBOX_INVALID_COMMAND;
-+ isp_prt(isp, ISP_LOGERR, "Unknown Command 0x%x", opcode);
-+ return;
-+ }
-+
-+ ibits = HIBYT(mcp[opcode]) & NMBOX_BMASK(isp);
-+ obits = LOBYT(mcp[opcode]) & NMBOX_BMASK(isp);
-+
-+ if (ibits == 0 && obits == 0) {
-+ mbp->param[0] = MBOX_COMMAND_PARAM_ERROR;
-+ isp_prt(isp, ISP_LOGERR, "no parameters for 0x%x", opcode);
-+ return;
-+ }
-+
-+ /*
-+ * Get exclusive usage of mailbox registers.
-+ */
-+ MBOX_ACQUIRE(isp);
-+
-+ for (box = 0; box < MAX_MAILBOX; box++) {
-+ if (ibits & (1 << box)) {
-+ ISP_WRITE(isp, MBOX_OFF(box), mbp->param[box]);
-+ }
-+ isp->isp_mboxtmp[box] = mbp->param[box] = 0;
-+ }
-+
-+ isp->isp_lastmbxcmd = opcode;
-+
-+ /*
-+ * We assume that we can't overwrite a previous command.
-+ */
-+ isp->isp_obits = obits;
-+ isp->isp_mboxbsy = 1;
-+
-+ /*
-+ * Set Host Interrupt condition so that RISC will pick up mailbox regs.
-+ */
-+ ISP_WRITE(isp, HCCR, HCCR_CMD_SET_HOST_INT);
-+
-+ /*
-+ * While we haven't finished the command, spin our wheels here.
-+ */
-+ MBOX_WAIT_COMPLETE(isp);
-+
-+ if (isp->isp_mboxbsy) {
-+ /*
-+ * Command timed out.
-+ */
-+ isp->isp_mboxbsy = 0;
-+ MBOX_RELEASE(isp);
-+ return;
-+ }
-+
-+ /*
-+ * Copy back output registers.
-+ */
-+ for (box = 0; box < MAX_MAILBOX; box++) {
-+ if (obits & (1 << box)) {
-+ mbp->param[box] = isp->isp_mboxtmp[box];
-+ }
-+ }
-+
-+ MBOX_RELEASE(isp);
-+
-+ if (logmask == 0 || opcode == MBOX_EXEC_FIRMWARE) {
-+ return;
-+ }
-+#ifdef ISP_STRIPPED
-+ cname = NULL;
-+#else
-+ cname = (IS_FC(isp))? fc_mbcmd_names[opcode] : scsi_mbcmd_names[opcode];
-+#endif
-+ if (cname == NULL) {
-+ cname = tname;
-+ SNPRINTF(tname, sizeof tname, "opcode %x", opcode);
-+ }
-+
-+ /*
-+ * Just to be chatty here...
-+ */
-+ xname = NULL;
-+ switch (mbp->param[0]) {
-+ case MBOX_COMMAND_COMPLETE:
-+ break;
-+ case MBOX_INVALID_COMMAND:
-+ if (logmask & MBLOGMASK(MBOX_COMMAND_COMPLETE))
-+ xname = "INVALID COMMAND";
-+ break;
-+ case MBOX_HOST_INTERFACE_ERROR:
-+ if (logmask & MBLOGMASK(MBOX_HOST_INTERFACE_ERROR))
-+ xname = "HOST INTERFACE ERROR";
-+ break;
-+ case MBOX_TEST_FAILED:
-+ if (logmask & MBLOGMASK(MBOX_TEST_FAILED))
-+ xname = "TEST FAILED";
-+ break;
-+ case MBOX_COMMAND_ERROR:
-+ if (logmask & MBLOGMASK(MBOX_COMMAND_ERROR))
-+ xname = "COMMAND ERROR";
-+ break;
-+ case MBOX_COMMAND_PARAM_ERROR:
-+ if (logmask & MBLOGMASK(MBOX_COMMAND_PARAM_ERROR))
-+ xname = "COMMAND PARAMETER ERROR";
-+ break;
-+ case MBOX_LOOP_ID_USED:
-+ if (logmask & MBLOGMASK(MBOX_LOOP_ID_USED))
-+ xname = "LOOP ID ALREADY IN USE";
-+ break;
-+ case MBOX_PORT_ID_USED:
-+ if (logmask & MBLOGMASK(MBOX_PORT_ID_USED))
-+ xname = "PORT ID ALREADY IN USE";
-+ break;
-+ case MBOX_ALL_IDS_USED:
-+ if (logmask & MBLOGMASK(MBOX_ALL_IDS_USED))
-+ xname = "ALL LOOP IDS IN USE";
-+ break;
-+ case 0: /* special case */
-+ xname = "TIMEOUT";
-+ break;
-+ default:
-+ SNPRINTF(mname, sizeof mname, "error 0x%x", mbp->param[0]);
-+ xname = mname;
-+ break;
-+ }
-+ if (xname)
-+ isp_prt(isp, ISP_LOGALL, "Mailbox Command '%s' failed (%s)",
-+ cname, xname);
-+}
-+
-+static void
-+isp_fw_state(struct ispsoftc *isp)
-+{
-+ if (IS_FC(isp)) {
-+ mbreg_t mbs;
-+ fcparam *fcp = isp->isp_param;
-+
-+ mbs.param[0] = MBOX_GET_FW_STATE;
-+ isp_mboxcmd(isp, &mbs, MBLOGALL);
-+ if (mbs.param[0] == MBOX_COMMAND_COMPLETE) {
-+ fcp->isp_fwstate = mbs.param[1];
-+ }
-+ }
-+}
-+
-+static void
-+isp_update(struct ispsoftc *isp)
-+{
-+ int bus, upmask;
-+
-+ for (bus = 0, upmask = isp->isp_update; upmask != 0; bus++) {
-+ if (upmask & (1 << bus)) {
-+ isp_update_bus(isp, bus);
-+ }
-+ upmask &= ~(1 << bus);
-+ }
-+}
-+
-+static void
-+isp_update_bus(struct ispsoftc *isp, int bus)
-+{
-+ int tgt;
-+ mbreg_t mbs;
-+ sdparam *sdp;
-+
-+ isp->isp_update &= ~(1 << bus);
-+ if (IS_FC(isp)) {
-+ /*
-+ * There are no 'per-bus' settings for Fibre Channel.
-+ */
-+ return;
-+ }
-+ sdp = isp->isp_param;
-+ sdp += bus;
-+
-+ for (tgt = 0; tgt < MAX_TARGETS; tgt++) {
-+ u_int16_t flags, period, offset;
-+ int get;
-+
-+ if (sdp->isp_devparam[tgt].dev_enable == 0) {
-+ sdp->isp_devparam[tgt].dev_update = 0;
-+ sdp->isp_devparam[tgt].dev_refresh = 0;
-+ isp_prt(isp, ISP_LOGDEBUG0,
-+ "skipping target %d bus %d update", tgt, bus);
-+ continue;
-+ }
-+ /*
-+ * If the goal is to update the status of the device,
-+ * take what's in goal_flags and try and set the device
-+ * toward that. Otherwise, if we're just refreshing the
-+ * current device state, get the current parameters.
-+ */
-+
-+ /*
-+ * Refresh overrides set
-+ */
-+ if (sdp->isp_devparam[tgt].dev_refresh) {
-+ mbs.param[0] = MBOX_GET_TARGET_PARAMS;
-+ sdp->isp_devparam[tgt].dev_refresh = 0;
-+ get = 1;
-+ } else if (sdp->isp_devparam[tgt].dev_update) {
-+ mbs.param[0] = MBOX_SET_TARGET_PARAMS;
-+ /*
-+ * Make sure goal_flags has "Renegotiate on Error"
-+ * on and "Freeze Queue on Error" off.
-+ */
-+ sdp->isp_devparam[tgt].goal_flags |= DPARM_RENEG;
-+ sdp->isp_devparam[tgt].goal_flags &= ~DPARM_QFRZ;
-+
-+ mbs.param[2] = sdp->isp_devparam[tgt].goal_flags;
-+
-+ /*
-+ * Insist that PARITY must be enabled
-+ * if SYNC or WIDE is enabled.
-+ */
-+ if ((mbs.param[2] & (DPARM_SYNC|DPARM_WIDE)) != 0) {
-+ mbs.param[2] |= DPARM_PARITY;
-+ }
-+
-+ if ((mbs.param[2] & DPARM_SYNC) == 0) {
-+ mbs.param[3] = 0;
-+ } else {
-+ mbs.param[3] =
-+ (sdp->isp_devparam[tgt].goal_offset << 8) |
-+ (sdp->isp_devparam[tgt].goal_period);
-+ }
-+ /*
-+ * A command completion later that has
-+ * RQSTF_NEGOTIATION set can cause
-+ * the dev_refresh/announce cycle also.
-+ *
-+ * Note: It is really important to update our current
-+ * flags with at least the state of TAG capabilities-
-+ * otherwise we might try and send a tagged command
-+ * when we have it all turned off. So change it here
-+ * to say that current already matches goal.
-+ */
-+ sdp->isp_devparam[tgt].actv_flags &= ~DPARM_TQING;
-+ sdp->isp_devparam[tgt].actv_flags |=
-+ (sdp->isp_devparam[tgt].goal_flags & DPARM_TQING);
-+ isp_prt(isp, ISP_LOGDEBUG0,
-+ "bus %d set tgt %d flags 0x%x off 0x%x period 0x%x",
-+ bus, tgt, mbs.param[2], mbs.param[3] >> 8,
-+ mbs.param[3] & 0xff);
-+ sdp->isp_devparam[tgt].dev_update = 0;
-+ sdp->isp_devparam[tgt].dev_refresh = 1;
-+ get = 0;
-+ } else {
-+ continue;
-+ }
-+ mbs.param[1] = (bus << 15) | (tgt << 8);
-+ isp_mboxcmd(isp, &mbs, MBLOGALL);
-+ if (get == 0) {
-+ isp->isp_sendmarker |= (1 << bus);
-+ continue;
-+ }
-+ flags = mbs.param[2];
-+ period = mbs.param[3] & 0xff;
-+ offset = mbs.param[3] >> 8;
-+ sdp->isp_devparam[tgt].actv_flags = flags;
-+ sdp->isp_devparam[tgt].actv_period = period;
-+ sdp->isp_devparam[tgt].actv_offset = offset;
-+ get = (bus << 16) | tgt;
-+ (void) isp_async(isp, ISPASYNC_NEW_TGT_PARAMS, &get);
-+ }
-+
-+ for (tgt = 0; tgt < MAX_TARGETS; tgt++) {
-+ if (sdp->isp_devparam[tgt].dev_update ||
-+ sdp->isp_devparam[tgt].dev_refresh) {
-+ isp->isp_update |= (1 << bus);
-+ break;
-+ }
-+ }
-+}
-+
-+#ifndef DEFAULT_FRAMESIZE
-+#define DEFAULT_FRAMESIZE(isp) ICB_DFLT_FRMLEN
-+#endif
-+#ifndef DEFAULT_EXEC_THROTTLE
-+#define DEFAULT_EXEC_THROTTLE(isp) ISP_EXEC_THROTTLE
-+#endif
-+
-+static void
-+isp_setdfltparm(struct ispsoftc *isp, int channel)
-+{
-+ int tgt;
-+ mbreg_t mbs;
-+ sdparam *sdp;
-+
-+ if (IS_FC(isp)) {
-+ fcparam *fcp = (fcparam *) isp->isp_param;
-+ int nvfail;
-+
-+ fcp += channel;
-+ if (fcp->isp_gotdparms) {
-+ return;
-+ }
-+ fcp->isp_gotdparms = 1;
-+ fcp->isp_maxfrmlen = DEFAULT_FRAMESIZE(isp);
-+ fcp->isp_maxalloc = ICB_DFLT_ALLOC;
-+ fcp->isp_execthrottle = DEFAULT_EXEC_THROTTLE(isp);
-+ fcp->isp_retry_delay = ICB_DFLT_RDELAY;
-+ fcp->isp_retry_count = ICB_DFLT_RCOUNT;
-+ /* Platform specific.... */
-+ fcp->isp_loopid = DEFAULT_LOOPID(isp);
-+ fcp->isp_nodewwn = DEFAULT_NODEWWN(isp);
-+ fcp->isp_portwwn = DEFAULT_PORTWWN(isp);
-+ fcp->isp_fwoptions = 0;
-+ fcp->isp_fwoptions |= ICBOPT_FAIRNESS;
-+ fcp->isp_fwoptions |= ICBOPT_PDBCHANGE_AE;
-+ fcp->isp_fwoptions |= ICBOPT_HARD_ADDRESS;
-+#ifndef ISP_NO_FASTPOST_FC
-+ fcp->isp_fwoptions |= ICBOPT_FAST_POST;
-+#endif
-+ if (isp->isp_confopts & ISP_CFG_FULL_DUPLEX)
-+ fcp->isp_fwoptions |= ICBOPT_FULL_DUPLEX;
-+
-+ /*
-+ * Make sure this is turned off now until we get
-+ * extended options from NVRAM
-+ */
-+ fcp->isp_fwoptions &= ~ICBOPT_EXTENDED;
-+
-+ /*
-+ * Now try and read NVRAM unless told to not do so.
-+ * This will set fcparam's isp_nodewwn && isp_portwwn.
-+ */
-+ if ((isp->isp_confopts & ISP_CFG_NONVRAM) == 0) {
-+ nvfail = isp_read_nvram(isp);
-+ if (nvfail)
-+ isp->isp_confopts |= ISP_CFG_NONVRAM;
-+ } else {
-+ nvfail = 1;
-+ }
-+ /*
-+ * Set node && port to override platform set defaults
-+ * unless the nvram read failed (or none was done),
-+ * or the platform code wants to use what had been
-+ * set in the defaults.
-+ */
-+ if (nvfail) {
-+ isp->isp_confopts |= ISP_CFG_OWNWWPN|ISP_CFG_OWNWWNN;
-+ }
-+ if (isp->isp_confopts & ISP_CFG_OWNWWNN) {
-+ isp_prt(isp, ISP_LOGCONFIG, "Using Node WWN 0x%08x%08x",
-+ (u_int32_t) (DEFAULT_NODEWWN(isp) >> 32),
-+ (u_int32_t) (DEFAULT_NODEWWN(isp) & 0xffffffff));
-+ ISP_NODEWWN(isp) = DEFAULT_NODEWWN(isp);
-+ } else {
-+ /*
-+ * We always start out with values derived
-+ * from NVRAM or our platform default.
-+ */
-+ ISP_NODEWWN(isp) = fcp->isp_nodewwn;
-+ }
-+ if (isp->isp_confopts & ISP_CFG_OWNWWPN) {
-+ isp_prt(isp, ISP_LOGCONFIG, "Using Port WWN 0x%08x%08x",
-+ (u_int32_t) (DEFAULT_PORTWWN(isp) >> 32),
-+ (u_int32_t) (DEFAULT_PORTWWN(isp) & 0xffffffff));
-+ ISP_PORTWWN(isp) = DEFAULT_PORTWWN(isp);
-+ } else {
-+ /*
-+ * We always start out with values derived
-+ * from NVRAM or our platform default.
-+ */
-+ ISP_PORTWWN(isp) = fcp->isp_portwwn;
-+ }
-+ return;
-+ }
-+
-+ sdp = (sdparam *) isp->isp_param;
-+ sdp += channel;
-+
-+ /*
-+ * Been there, done that, got the T-shirt...
-+ */
-+ if (sdp->isp_gotdparms) {
-+ return;
-+ }
-+ sdp->isp_gotdparms = 1;
-+
-+ /*
-+ * Establish some default parameters.
-+ */
-+ sdp->isp_cmd_dma_burst_enable = 0;
-+ sdp->isp_data_dma_burst_enabl = 1;
-+ sdp->isp_fifo_threshold = 0;
-+ sdp->isp_initiator_id = DEFAULT_IID(isp);
-+ if (isp->isp_type >= ISP_HA_SCSI_1040) {
-+ sdp->isp_async_data_setup = 9;
-+ } else {
-+ sdp->isp_async_data_setup = 6;
-+ }
-+ sdp->isp_selection_timeout = 250;
-+ sdp->isp_max_queue_depth = MAXISPREQUEST(isp);
-+ sdp->isp_tag_aging = 8;
-+ sdp->isp_bus_reset_delay = 5;
-+ /*
-+ * Don't retry selection, busy or queue full automatically- reflect
-+ * these back to us.
-+ */
-+ sdp->isp_retry_count = 0;
-+ sdp->isp_retry_delay = 0;
-+
-+ for (tgt = 0; tgt < MAX_TARGETS; tgt++) {
-+ sdp->isp_devparam[tgt].exc_throttle = ISP_EXEC_THROTTLE;
-+ sdp->isp_devparam[tgt].dev_enable = 1;
-+ }
-+
-+ /*
-+ * If we've not been told to avoid reading NVRAM, try and read it.
-+ * If we're successful reading it, we can then return because NVRAM
-+ * will tell us what the desired settings are. Otherwise, we establish
-+ * some reasonable 'fake' nvram and goal defaults.
-+ */
-+
-+ if ((isp->isp_confopts & ISP_CFG_NONVRAM) == 0) {
-+ if (isp_read_nvram(isp) == 0) {
-+ return;
-+ }
-+ }
-+
-+ /*
-+ * Now try and see whether we have specific values for them.
-+ */
-+ if ((isp->isp_confopts & ISP_CFG_NONVRAM) == 0) {
-+ mbs.param[0] = MBOX_GET_ACT_NEG_STATE;
-+ isp_mboxcmd(isp, &mbs, MBLOGNONE);
-+ if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
-+ sdp->isp_req_ack_active_neg = 1;
-+ sdp->isp_data_line_active_neg = 1;
-+ } else {
-+ sdp->isp_req_ack_active_neg =
-+ (mbs.param[1+channel] >> 4) & 0x1;
-+ sdp->isp_data_line_active_neg =
-+ (mbs.param[1+channel] >> 5) & 0x1;
-+ }
-+ }
-+
-+ isp_prt(isp, ISP_LOGDEBUG0, sc0, sc3,
-+ 0, sdp->isp_fifo_threshold, sdp->isp_initiator_id,
-+ sdp->isp_bus_reset_delay, sdp->isp_retry_count,
-+ sdp->isp_retry_delay, sdp->isp_async_data_setup);
-+ isp_prt(isp, ISP_LOGDEBUG0, sc1, sc3,
-+ sdp->isp_req_ack_active_neg, sdp->isp_data_line_active_neg,
-+ sdp->isp_data_dma_burst_enabl, sdp->isp_cmd_dma_burst_enable,
-+ sdp->isp_selection_timeout, sdp->isp_max_queue_depth);
-+
-+ /*
-+ * The trick here is to establish a default for the default (honk!)
-+ * state (goal_flags). Then try and get the current status from
-+ * the card to fill in the current state. We don't, in fact, set
-+ * the default to the SAFE default state- that's not the goal state.
-+ */
-+ for (tgt = 0; tgt < MAX_TARGETS; tgt++) {
-+ u_int8_t off, per;
-+ sdp->isp_devparam[tgt].actv_offset = 0;
-+ sdp->isp_devparam[tgt].actv_period = 0;
-+ sdp->isp_devparam[tgt].actv_flags = 0;
-+
-+ sdp->isp_devparam[tgt].goal_flags =
-+ sdp->isp_devparam[tgt].nvrm_flags = DPARM_DEFAULT;
-+
-+ /*
-+ * We default to Wide/Fast for versions less than a 1040
-+ * (unless it's SBus).
-+ */
-+ if (IS_ULTRA3(isp)) {
-+ off = ISP_80M_SYNCPARMS >> 8;
-+ per = ISP_80M_SYNCPARMS & 0xff;
-+ } else if (IS_ULTRA2(isp)) {
-+ off = ISP_40M_SYNCPARMS >> 8;
-+ per = ISP_40M_SYNCPARMS & 0xff;
-+ } else if (IS_1240(isp)) {
-+ off = ISP_20M_SYNCPARMS >> 8;
-+ per = ISP_20M_SYNCPARMS & 0xff;
-+ } else if ((isp->isp_bustype == ISP_BT_SBUS &&
-+ isp->isp_type < ISP_HA_SCSI_1020A) ||
-+ (isp->isp_bustype == ISP_BT_PCI &&
-+ isp->isp_type < ISP_HA_SCSI_1040) ||
-+ (isp->isp_clock && isp->isp_clock < 60) ||
-+ (sdp->isp_ultramode == 0)) {
-+ off = ISP_10M_SYNCPARMS >> 8;
-+ per = ISP_10M_SYNCPARMS & 0xff;
-+ } else {
-+ off = ISP_20M_SYNCPARMS_1040 >> 8;
-+ per = ISP_20M_SYNCPARMS_1040 & 0xff;
-+ }
-+ sdp->isp_devparam[tgt].goal_offset =
-+ sdp->isp_devparam[tgt].nvrm_offset = off;
-+ sdp->isp_devparam[tgt].goal_period =
-+ sdp->isp_devparam[tgt].nvrm_period = per;
-+
-+ isp_prt(isp, ISP_LOGDEBUG0, sc2, sc3,
-+ channel, tgt, sdp->isp_devparam[tgt].nvrm_flags,
-+ sdp->isp_devparam[tgt].nvrm_offset,
-+ sdp->isp_devparam[tgt].nvrm_period);
-+ }
-+}
-+
-+/*
-+ * Re-initialize the ISP and complete all orphaned commands
-+ * with a 'botched' notice. The reset/init routines should
-+ * not disturb an already active list of commands.
-+ *
-+ * Locks held prior to coming here.
-+ */
-+
-+void
-+isp_reinit(struct ispsoftc *isp)
-+{
-+ XS_T *xs;
-+ u_int16_t handle;
-+
-+ if (IS_FC(isp)) {
-+ isp_mark_getpdb_all(isp);
-+ }
-+ isp_reset(isp);
-+ if (isp->isp_state != ISP_RESETSTATE) {
-+ isp_prt(isp, ISP_LOGERR, "isp_reinit cannot reset card");
-+ } else if (isp->isp_role != ISP_ROLE_NONE) {
-+ isp_init(isp);
-+ if (isp->isp_state == ISP_INITSTATE) {
-+ isp->isp_state = ISP_RUNSTATE;
-+ }
-+ if (isp->isp_state != ISP_RUNSTATE) {
-+ isp_prt(isp, ISP_LOGERR,
-+ "isp_reinit cannot restart card");
-+ }
-+ }
-+ isp->isp_nactive = 0;
-+
-+ for (handle = 1; (int) handle <= isp->isp_maxcmds; handle++) {
-+ xs = isp_find_xs(isp, handle);
-+ if (xs == NULL) {
-+ continue;
-+ }
-+ isp_destroy_handle(isp, handle);
-+ if (XS_XFRLEN(xs)) {
-+ ISP_DMAFREE(isp, xs, handle);
-+ XS_RESID(xs) = XS_XFRLEN(xs);
-+ } else {
-+ XS_RESID(xs) = 0;
-+ }
-+ XS_SETERR(xs, HBA_BUSRESET);
-+ isp_done(xs);
-+ }
-+}
-+
-+/*
-+ * NVRAM Routines
-+ */
-+static int
-+isp_read_nvram(struct ispsoftc *isp)
-+{
-+ int i, amt;
-+ u_int8_t csum, minversion;
-+ union {
-+ u_int8_t _x[ISP2100_NVRAM_SIZE];
-+ u_int16_t _s[ISP2100_NVRAM_SIZE>>1];
-+ } _n;
-+#define nvram_data _n._x
-+#define nvram_words _n._s
-+
-+ if (IS_FC(isp)) {
-+ amt = ISP2100_NVRAM_SIZE;
-+ minversion = 1;
-+ } else if (IS_ULTRA2(isp)) {
-+ amt = ISP1080_NVRAM_SIZE;
-+ minversion = 0;
-+ } else {
-+ amt = ISP_NVRAM_SIZE;
-+ minversion = 2;
-+ }
-+
-+ /*
-+ * Just read the first two words first to see if we have a valid
-+ * NVRAM to continue reading the rest with.
-+ */
-+ for (i = 0; i < 2; i++) {
-+ isp_rdnvram_word(isp, i, &nvram_words[i]);
-+ }
-+ if (nvram_data[0] != 'I' || nvram_data[1] != 'S' ||
-+ nvram_data[2] != 'P') {
-+ if (isp->isp_bustype != ISP_BT_SBUS) {
-+ isp_prt(isp, ISP_LOGWARN, "invalid NVRAM header");
-+ isp_prt(isp, ISP_LOGDEBUG0, "%x %x %x",
-+ nvram_data[0], nvram_data[1], nvram_data[2]);
-+ }
-+ return (-1);
-+ }
-+ for (i = 2; i < amt>>1; i++) {
-+ isp_rdnvram_word(isp, i, &nvram_words[i]);
-+ }
-+ for (csum = 0, i = 0; i < amt; i++) {
-+ csum += nvram_data[i];
-+ }
-+ if (csum != 0) {
-+ isp_prt(isp, ISP_LOGWARN, "invalid NVRAM checksum");
-+ return (-1);
-+ }
-+ if (ISP_NVRAM_VERSION(nvram_data) < minversion) {
-+ isp_prt(isp, ISP_LOGWARN, "version %d NVRAM not understood",
-+ ISP_NVRAM_VERSION(nvram_data));
-+ return (-1);
-+ }
-+
-+ if (IS_ULTRA3(isp)) {
-+ isp_parse_nvram_12160(isp, 0, nvram_data);
-+ if (IS_12160(isp))
-+ isp_parse_nvram_12160(isp, 1, nvram_data);
-+ } else if (IS_1080(isp)) {
-+ isp_parse_nvram_1080(isp, 0, nvram_data);
-+ } else if (IS_1280(isp) || IS_1240(isp)) {
-+ isp_parse_nvram_1080(isp, 0, nvram_data);
-+ isp_parse_nvram_1080(isp, 1, nvram_data);
-+ } else if (IS_SCSI(isp)) {
-+ isp_parse_nvram_1020(isp, nvram_data);
-+ } else {
-+ isp_parse_nvram_2100(isp, nvram_data);
-+ }
-+ return (0);
-+#undef nvram_data
-+#undef nvram_words
-+}
-+
-+static void
-+isp_rdnvram_word(struct ispsoftc *isp, int wo, u_int16_t *rp)
-+{
-+ int i, cbits;
-+ u_int16_t bit, rqst;
-+
-+ ISP_WRITE(isp, BIU_NVRAM, BIU_NVRAM_SELECT);
-+ USEC_DELAY(2);
-+ ISP_WRITE(isp, BIU_NVRAM, BIU_NVRAM_SELECT|BIU_NVRAM_CLOCK);
-+ USEC_DELAY(2);
-+
-+ if (IS_FC(isp)) {
-+ wo &= ((ISP2100_NVRAM_SIZE >> 1) - 1);
-+ if (IS_2312(isp) && isp->isp_port) {
-+ wo += 128;
-+ }
-+ rqst = (ISP_NVRAM_READ << 8) | wo;
-+ cbits = 10;
-+ } else if (IS_ULTRA2(isp)) {
-+ wo &= ((ISP1080_NVRAM_SIZE >> 1) - 1);
-+ rqst = (ISP_NVRAM_READ << 8) | wo;
-+ cbits = 10;
-+ } else {
-+ wo &= ((ISP_NVRAM_SIZE >> 1) - 1);
-+ rqst = (ISP_NVRAM_READ << 6) | wo;
-+ cbits = 8;
-+ }
-+
-+ /*
-+ * Clock the word select request out...
-+ */
-+ for (i = cbits; i >= 0; i--) {
-+ if ((rqst >> i) & 1) {
-+ bit = BIU_NVRAM_SELECT | BIU_NVRAM_DATAOUT;
-+ } else {
-+ bit = BIU_NVRAM_SELECT;
-+ }
-+ ISP_WRITE(isp, BIU_NVRAM, bit);
-+ USEC_DELAY(2);
-+ ISP_WRITE(isp, BIU_NVRAM, bit | BIU_NVRAM_CLOCK);
-+ USEC_DELAY(2);
-+ ISP_WRITE(isp, BIU_NVRAM, bit);
-+ USEC_DELAY(2);
-+ }
-+ /*
-+ * Now read the result back in (bits come back in MSB format).
-+ */
-+ *rp = 0;
-+ for (i = 0; i < 16; i++) {
-+ u_int16_t rv;
-+ *rp <<= 1;
-+ ISP_WRITE(isp, BIU_NVRAM, BIU_NVRAM_SELECT|BIU_NVRAM_CLOCK);
-+ USEC_DELAY(2);
-+ rv = ISP_READ(isp, BIU_NVRAM);
-+ if (rv & BIU_NVRAM_DATAIN) {
-+ *rp |= 1;
-+ }
-+ USEC_DELAY(2);
-+ ISP_WRITE(isp, BIU_NVRAM, BIU_NVRAM_SELECT);
-+ USEC_DELAY(2);
-+ }
-+ ISP_WRITE(isp, BIU_NVRAM, 0);
-+ USEC_DELAY(2);
-+ ISP_SWIZZLE_NVRAM_WORD(isp, rp);
-+}
-+
-+static void
-+isp_parse_nvram_1020(struct ispsoftc *isp, u_int8_t *nvram_data)
-+{
-+ sdparam *sdp = (sdparam *) isp->isp_param;
-+ int tgt;
-+
-+ sdp->isp_fifo_threshold =
-+ ISP_NVRAM_FIFO_THRESHOLD(nvram_data) |
-+ (ISP_NVRAM_FIFO_THRESHOLD_128(nvram_data) << 2);
-+
-+ if ((isp->isp_confopts & ISP_CFG_OWNLOOPID) == 0)
-+ sdp->isp_initiator_id =
-+ ISP_NVRAM_INITIATOR_ID(nvram_data);
-+
-+ sdp->isp_bus_reset_delay =
-+ ISP_NVRAM_BUS_RESET_DELAY(nvram_data);
-+
-+ sdp->isp_retry_count =
-+ ISP_NVRAM_BUS_RETRY_COUNT(nvram_data);
-+
-+ sdp->isp_retry_delay =
-+ ISP_NVRAM_BUS_RETRY_DELAY(nvram_data);
-+
-+ sdp->isp_async_data_setup =
-+ ISP_NVRAM_ASYNC_DATA_SETUP_TIME(nvram_data);
-+
-+ if (isp->isp_type >= ISP_HA_SCSI_1040) {
-+ if (sdp->isp_async_data_setup < 9) {
-+ sdp->isp_async_data_setup = 9;
-+ }
-+ } else {
-+ if (sdp->isp_async_data_setup != 6) {
-+ sdp->isp_async_data_setup = 6;
-+ }
-+ }
-+
-+ sdp->isp_req_ack_active_neg =
-+ ISP_NVRAM_REQ_ACK_ACTIVE_NEGATION(nvram_data);
-+
-+ sdp->isp_data_line_active_neg =
-+ ISP_NVRAM_DATA_LINE_ACTIVE_NEGATION(nvram_data);
-+
-+ sdp->isp_data_dma_burst_enabl =
-+ ISP_NVRAM_DATA_DMA_BURST_ENABLE(nvram_data);
-+
-+ sdp->isp_cmd_dma_burst_enable =
-+ ISP_NVRAM_CMD_DMA_BURST_ENABLE(nvram_data);
-+
-+ sdp->isp_tag_aging =
-+ ISP_NVRAM_TAG_AGE_LIMIT(nvram_data);
-+
-+ sdp->isp_selection_timeout =
-+ ISP_NVRAM_SELECTION_TIMEOUT(nvram_data);
-+
-+ sdp->isp_max_queue_depth =
-+ ISP_NVRAM_MAX_QUEUE_DEPTH(nvram_data);
-+
-+ sdp->isp_fast_mttr = ISP_NVRAM_FAST_MTTR_ENABLE(nvram_data);
-+
-+ isp_prt(isp, ISP_LOGDEBUG0, sc0, sc4,
-+ 0, sdp->isp_fifo_threshold, sdp->isp_initiator_id,
-+ sdp->isp_bus_reset_delay, sdp->isp_retry_count,
-+ sdp->isp_retry_delay, sdp->isp_async_data_setup);
-+ isp_prt(isp, ISP_LOGDEBUG0, sc1, sc4,
-+ sdp->isp_req_ack_active_neg, sdp->isp_data_line_active_neg,
-+ sdp->isp_data_dma_burst_enabl, sdp->isp_cmd_dma_burst_enable,
-+ sdp->isp_selection_timeout, sdp->isp_max_queue_depth);
-+
-+ for (tgt = 0; tgt < MAX_TARGETS; tgt++) {
-+ sdp->isp_devparam[tgt].dev_enable =
-+ ISP_NVRAM_TGT_DEVICE_ENABLE(nvram_data, tgt);
-+ sdp->isp_devparam[tgt].exc_throttle =
-+ ISP_NVRAM_TGT_EXEC_THROTTLE(nvram_data, tgt);
-+ sdp->isp_devparam[tgt].nvrm_offset =
-+ ISP_NVRAM_TGT_SYNC_OFFSET(nvram_data, tgt);
-+ sdp->isp_devparam[tgt].nvrm_period =
-+ ISP_NVRAM_TGT_SYNC_PERIOD(nvram_data, tgt);
-+ /*
-+ * We probably shouldn't lie about this, but it
-+ * it makes it much safer if we limit NVRAM values
-+ * to sanity.
-+ */
-+ if (isp->isp_type < ISP_HA_SCSI_1040) {
-+ /*
-+ * If we're not ultra, we can't possibly
-+ * be a shorter period than this.
-+ */
-+ if (sdp->isp_devparam[tgt].nvrm_period < 0x19) {
-+ sdp->isp_devparam[tgt].nvrm_period = 0x19;
-+ }
-+ if (sdp->isp_devparam[tgt].nvrm_offset > 0xc) {
-+ sdp->isp_devparam[tgt].nvrm_offset = 0x0c;
-+ }
-+ } else {
-+ if (sdp->isp_devparam[tgt].nvrm_offset > 0x8) {
-+ sdp->isp_devparam[tgt].nvrm_offset = 0x8;
-+ }
-+ }
-+ sdp->isp_devparam[tgt].nvrm_flags = 0;
-+ if (ISP_NVRAM_TGT_RENEG(nvram_data, tgt))
-+ sdp->isp_devparam[tgt].nvrm_flags |= DPARM_RENEG;
-+ sdp->isp_devparam[tgt].nvrm_flags |= DPARM_ARQ;
-+ if (ISP_NVRAM_TGT_TQING(nvram_data, tgt))
-+ sdp->isp_devparam[tgt].nvrm_flags |= DPARM_TQING;
-+ if (ISP_NVRAM_TGT_SYNC(nvram_data, tgt))
-+ sdp->isp_devparam[tgt].nvrm_flags |= DPARM_SYNC;
-+ if (ISP_NVRAM_TGT_WIDE(nvram_data, tgt))
-+ sdp->isp_devparam[tgt].nvrm_flags |= DPARM_WIDE;
-+ if (ISP_NVRAM_TGT_PARITY(nvram_data, tgt))
-+ sdp->isp_devparam[tgt].nvrm_flags |= DPARM_PARITY;
-+ if (ISP_NVRAM_TGT_DISC(nvram_data, tgt))
-+ sdp->isp_devparam[tgt].nvrm_flags |= DPARM_DISC;
-+ sdp->isp_devparam[tgt].actv_flags = 0; /* we don't know */
-+ isp_prt(isp, ISP_LOGDEBUG0, sc2, sc4,
-+ 0, tgt, sdp->isp_devparam[tgt].nvrm_flags,
-+ sdp->isp_devparam[tgt].nvrm_offset,
-+ sdp->isp_devparam[tgt].nvrm_period);
-+ sdp->isp_devparam[tgt].goal_offset =
-+ sdp->isp_devparam[tgt].nvrm_offset;
-+ sdp->isp_devparam[tgt].goal_period =
-+ sdp->isp_devparam[tgt].nvrm_period;
-+ sdp->isp_devparam[tgt].goal_flags =
-+ sdp->isp_devparam[tgt].nvrm_flags;
-+ }
-+}
-+
-+static void
-+isp_parse_nvram_1080(struct ispsoftc *isp, int bus, u_int8_t *nvram_data)
-+{
-+ sdparam *sdp = (sdparam *) isp->isp_param;
-+ int tgt;
-+
-+ sdp += bus;
-+
-+ sdp->isp_fifo_threshold =
-+ ISP1080_NVRAM_FIFO_THRESHOLD(nvram_data);
-+
-+ if ((isp->isp_confopts & ISP_CFG_OWNLOOPID) == 0)
-+ sdp->isp_initiator_id =
-+ ISP1080_NVRAM_INITIATOR_ID(nvram_data, bus);
-+
-+ sdp->isp_bus_reset_delay =
-+ ISP1080_NVRAM_BUS_RESET_DELAY(nvram_data, bus);
-+
-+ sdp->isp_retry_count =
-+ ISP1080_NVRAM_BUS_RETRY_COUNT(nvram_data, bus);
-+
-+ sdp->isp_retry_delay =
-+ ISP1080_NVRAM_BUS_RETRY_DELAY(nvram_data, bus);
-+
-+ sdp->isp_async_data_setup =
-+ ISP1080_NVRAM_ASYNC_DATA_SETUP_TIME(nvram_data, bus);
-+
-+ sdp->isp_req_ack_active_neg =
-+ ISP1080_NVRAM_REQ_ACK_ACTIVE_NEGATION(nvram_data, bus);
-+
-+ sdp->isp_data_line_active_neg =
-+ ISP1080_NVRAM_DATA_LINE_ACTIVE_NEGATION(nvram_data, bus);
-+
-+ sdp->isp_data_dma_burst_enabl =
-+ ISP1080_NVRAM_BURST_ENABLE(nvram_data);
-+
-+ sdp->isp_cmd_dma_burst_enable =
-+ ISP1080_NVRAM_BURST_ENABLE(nvram_data);
-+
-+ sdp->isp_selection_timeout =
-+ ISP1080_NVRAM_SELECTION_TIMEOUT(nvram_data, bus);
-+
-+ sdp->isp_max_queue_depth =
-+ ISP1080_NVRAM_MAX_QUEUE_DEPTH(nvram_data, bus);
-+
-+ isp_prt(isp, ISP_LOGDEBUG0, sc0, sc4,
-+ bus, sdp->isp_fifo_threshold, sdp->isp_initiator_id,
-+ sdp->isp_bus_reset_delay, sdp->isp_retry_count,
-+ sdp->isp_retry_delay, sdp->isp_async_data_setup);
-+ isp_prt(isp, ISP_LOGDEBUG0, sc1, sc4,
-+ sdp->isp_req_ack_active_neg, sdp->isp_data_line_active_neg,
-+ sdp->isp_data_dma_burst_enabl, sdp->isp_cmd_dma_burst_enable,
-+ sdp->isp_selection_timeout, sdp->isp_max_queue_depth);
-+
-+
-+ for (tgt = 0; tgt < MAX_TARGETS; tgt++) {
-+ sdp->isp_devparam[tgt].dev_enable =
-+ ISP1080_NVRAM_TGT_DEVICE_ENABLE(nvram_data, tgt, bus);
-+ sdp->isp_devparam[tgt].exc_throttle =
-+ ISP1080_NVRAM_TGT_EXEC_THROTTLE(nvram_data, tgt, bus);
-+ sdp->isp_devparam[tgt].nvrm_offset =
-+ ISP1080_NVRAM_TGT_SYNC_OFFSET(nvram_data, tgt, bus);
-+ sdp->isp_devparam[tgt].nvrm_period =
-+ ISP1080_NVRAM_TGT_SYNC_PERIOD(nvram_data, tgt, bus);
-+ sdp->isp_devparam[tgt].nvrm_flags = 0;
-+ if (ISP1080_NVRAM_TGT_RENEG(nvram_data, tgt, bus))
-+ sdp->isp_devparam[tgt].nvrm_flags |= DPARM_RENEG;
-+ sdp->isp_devparam[tgt].nvrm_flags |= DPARM_ARQ;
-+ if (ISP1080_NVRAM_TGT_TQING(nvram_data, tgt, bus))
-+ sdp->isp_devparam[tgt].nvrm_flags |= DPARM_TQING;
-+ if (ISP1080_NVRAM_TGT_SYNC(nvram_data, tgt, bus))
-+ sdp->isp_devparam[tgt].nvrm_flags |= DPARM_SYNC;
-+ if (ISP1080_NVRAM_TGT_WIDE(nvram_data, tgt, bus))
-+ sdp->isp_devparam[tgt].nvrm_flags |= DPARM_WIDE;
-+ if (ISP1080_NVRAM_TGT_PARITY(nvram_data, tgt, bus))
-+ sdp->isp_devparam[tgt].nvrm_flags |= DPARM_PARITY;
-+ if (ISP1080_NVRAM_TGT_DISC(nvram_data, tgt, bus))
-+ sdp->isp_devparam[tgt].nvrm_flags |= DPARM_DISC;
-+ sdp->isp_devparam[tgt].actv_flags = 0;
-+ isp_prt(isp, ISP_LOGDEBUG0, sc2, sc4,
-+ bus, tgt, sdp->isp_devparam[tgt].nvrm_flags,
-+ sdp->isp_devparam[tgt].nvrm_offset,
-+ sdp->isp_devparam[tgt].nvrm_period);
-+ sdp->isp_devparam[tgt].goal_offset =
-+ sdp->isp_devparam[tgt].nvrm_offset;
-+ sdp->isp_devparam[tgt].goal_period =
-+ sdp->isp_devparam[tgt].nvrm_period;
-+ sdp->isp_devparam[tgt].goal_flags =
-+ sdp->isp_devparam[tgt].nvrm_flags;
-+ }
-+}
-+
-+static void
-+isp_parse_nvram_12160(struct ispsoftc *isp, int bus, u_int8_t *nvram_data)
-+{
-+ sdparam *sdp = (sdparam *) isp->isp_param;
-+ int tgt;
-+
-+ sdp += bus;
-+
-+ sdp->isp_fifo_threshold =
-+ ISP12160_NVRAM_FIFO_THRESHOLD(nvram_data);
-+
-+ if ((isp->isp_confopts & ISP_CFG_OWNLOOPID) == 0)
-+ sdp->isp_initiator_id =
-+ ISP12160_NVRAM_INITIATOR_ID(nvram_data, bus);
-+
-+ sdp->isp_bus_reset_delay =
-+ ISP12160_NVRAM_BUS_RESET_DELAY(nvram_data, bus);
-+
-+ sdp->isp_retry_count =
-+ ISP12160_NVRAM_BUS_RETRY_COUNT(nvram_data, bus);
-+
-+ sdp->isp_retry_delay =
-+ ISP12160_NVRAM_BUS_RETRY_DELAY(nvram_data, bus);
-+
-+ sdp->isp_async_data_setup =
-+ ISP12160_NVRAM_ASYNC_DATA_SETUP_TIME(nvram_data, bus);
-+
-+ sdp->isp_req_ack_active_neg =
-+ ISP12160_NVRAM_REQ_ACK_ACTIVE_NEGATION(nvram_data, bus);
-+
-+ sdp->isp_data_line_active_neg =
-+ ISP12160_NVRAM_DATA_LINE_ACTIVE_NEGATION(nvram_data, bus);
-+
-+ sdp->isp_data_dma_burst_enabl =
-+ ISP12160_NVRAM_BURST_ENABLE(nvram_data);
-+
-+ sdp->isp_cmd_dma_burst_enable =
-+ ISP12160_NVRAM_BURST_ENABLE(nvram_data);
-+
-+ sdp->isp_selection_timeout =
-+ ISP12160_NVRAM_SELECTION_TIMEOUT(nvram_data, bus);
-+
-+ sdp->isp_max_queue_depth =
-+ ISP12160_NVRAM_MAX_QUEUE_DEPTH(nvram_data, bus);
-+
-+ isp_prt(isp, ISP_LOGDEBUG0, sc0, sc4,
-+ bus, sdp->isp_fifo_threshold, sdp->isp_initiator_id,
-+ sdp->isp_bus_reset_delay, sdp->isp_retry_count,
-+ sdp->isp_retry_delay, sdp->isp_async_data_setup);
-+ isp_prt(isp, ISP_LOGDEBUG0, sc1, sc4,
-+ sdp->isp_req_ack_active_neg, sdp->isp_data_line_active_neg,
-+ sdp->isp_data_dma_burst_enabl, sdp->isp_cmd_dma_burst_enable,
-+ sdp->isp_selection_timeout, sdp->isp_max_queue_depth);
-+
-+ for (tgt = 0; tgt < MAX_TARGETS; tgt++) {
-+ sdp->isp_devparam[tgt].dev_enable =
-+ ISP12160_NVRAM_TGT_DEVICE_ENABLE(nvram_data, tgt, bus);
-+ sdp->isp_devparam[tgt].exc_throttle =
-+ ISP12160_NVRAM_TGT_EXEC_THROTTLE(nvram_data, tgt, bus);
-+ sdp->isp_devparam[tgt].nvrm_offset =
-+ ISP12160_NVRAM_TGT_SYNC_OFFSET(nvram_data, tgt, bus);
-+ sdp->isp_devparam[tgt].nvrm_period =
-+ ISP12160_NVRAM_TGT_SYNC_PERIOD(nvram_data, tgt, bus);
-+ sdp->isp_devparam[tgt].nvrm_flags = 0;
-+ if (ISP12160_NVRAM_TGT_RENEG(nvram_data, tgt, bus))
-+ sdp->isp_devparam[tgt].nvrm_flags |= DPARM_RENEG;
-+ sdp->isp_devparam[tgt].nvrm_flags |= DPARM_ARQ;
-+ if (ISP12160_NVRAM_TGT_TQING(nvram_data, tgt, bus))
-+ sdp->isp_devparam[tgt].nvrm_flags |= DPARM_TQING;
-+ if (ISP12160_NVRAM_TGT_SYNC(nvram_data, tgt, bus))
-+ sdp->isp_devparam[tgt].nvrm_flags |= DPARM_SYNC;
-+ if (ISP12160_NVRAM_TGT_WIDE(nvram_data, tgt, bus))
-+ sdp->isp_devparam[tgt].nvrm_flags |= DPARM_WIDE;
-+ if (ISP12160_NVRAM_TGT_PARITY(nvram_data, tgt, bus))
-+ sdp->isp_devparam[tgt].nvrm_flags |= DPARM_PARITY;
-+ if (ISP12160_NVRAM_TGT_DISC(nvram_data, tgt, bus))
-+ sdp->isp_devparam[tgt].nvrm_flags |= DPARM_DISC;
-+ sdp->isp_devparam[tgt].actv_flags = 0;
-+ isp_prt(isp, ISP_LOGDEBUG0, sc2, sc4,
-+ bus, tgt, sdp->isp_devparam[tgt].nvrm_flags,
-+ sdp->isp_devparam[tgt].nvrm_offset,
-+ sdp->isp_devparam[tgt].nvrm_period);
-+ sdp->isp_devparam[tgt].goal_offset =
-+ sdp->isp_devparam[tgt].nvrm_offset;
-+ sdp->isp_devparam[tgt].goal_period =
-+ sdp->isp_devparam[tgt].nvrm_period;
-+ sdp->isp_devparam[tgt].goal_flags =
-+ sdp->isp_devparam[tgt].nvrm_flags;
-+ }
-+}
-+
-+static void
-+isp_parse_nvram_2100(struct ispsoftc *isp, u_int8_t *nvram_data)
-+{
-+ fcparam *fcp = (fcparam *) isp->isp_param;
-+ u_int64_t wwn;
-+
-+ /*
-+ * There is NVRAM storage for both Port and Node entities-
-+ * but the Node entity appears to be unused on all the cards
-+ * I can find. However, we should account for this being set
-+ * at some point in the future.
-+ *
-+ * Qlogic WWNs have an NAA of 2, but usually nothing shows up in
-+ * bits 48..60. In the case of the 2202, it appears that they do
-+ * use bit 48 to distinguish between the two instances on the card.
-+ * The 2204, which I've never seen, *probably* extends this method.
-+ */
-+ wwn = ISP2100_NVRAM_PORT_NAME(nvram_data);
-+ if (wwn) {
-+ isp_prt(isp, ISP_LOGCONFIG, "NVRAM Port WWN 0x%08x%08x",
-+ (u_int32_t) (wwn >> 32), (u_int32_t) (wwn & 0xffffffff));
-+ if ((wwn >> 60) == 0) {
-+ wwn |= (((u_int64_t) 2)<< 60);
-+ }
-+ }
-+ fcp->isp_portwwn = wwn;
-+ if (IS_2200(isp) || IS_23XX(isp)) {
-+ wwn = ISP2200_NVRAM_NODE_NAME(nvram_data);
-+ if (wwn) {
-+ isp_prt(isp, ISP_LOGCONFIG, "NVRAM Node WWN 0x%08x%08x",
-+ (u_int32_t) (wwn >> 32),
-+ (u_int32_t) (wwn & 0xffffffff));
-+ if ((wwn >> 60) == 0) {
-+ wwn |= (((u_int64_t) 2)<< 60);
-+ }
-+ }
-+ } else {
-+ wwn &= ~((u_int64_t) 0xfff << 48);
-+ }
-+ fcp->isp_nodewwn = wwn;
-+
-+ /*
-+ * Make sure we have both Node and Port as non-zero values.
-+ */
-+ if (fcp->isp_nodewwn != 0 && fcp->isp_portwwn == 0) {
-+ fcp->isp_portwwn = fcp->isp_nodewwn;
-+ } else if (fcp->isp_nodewwn == 0 && fcp->isp_portwwn != 0) {
-+ fcp->isp_nodewwn = fcp->isp_portwwn;
-+ }
-+
-+ /*
-+ * Make the Node and Port values sane if they're NAA == 2.
-+ * This means to clear bits 48..56 for the Node WWN and
-+ * make sure that there's some non-zero value in 48..56
-+ * for the Port WWN.
-+ */
-+ if (fcp->isp_nodewwn && fcp->isp_portwwn) {
-+ if ((fcp->isp_nodewwn & (((u_int64_t) 0xfff) << 48)) != 0 &&
-+ (fcp->isp_nodewwn >> 60) == 2) {
-+ fcp->isp_nodewwn &= ~((u_int64_t) 0xfff << 48);
-+ }
-+ if ((fcp->isp_portwwn & (((u_int64_t) 0xfff) << 48)) == 0 &&
-+ (fcp->isp_portwwn >> 60) == 2) {
-+ fcp->isp_portwwn |= ((u_int64_t) 1 << 56);
-+ }
-+ }
-+
-+ isp_prt(isp, ISP_LOGDEBUG0,
-+ "NVRAM: maxfrmlen %d execthrottle %d fwoptions 0x%x loopid %x",
-+ ISP2100_NVRAM_MAXFRAMELENGTH(nvram_data),
-+ ISP2100_NVRAM_EXECUTION_THROTTLE(nvram_data),
-+ ISP2100_NVRAM_OPTIONS(nvram_data),
-+ ISP2100_NVRAM_HARDLOOPID(nvram_data));
-+
-+ fcp->isp_maxalloc =
-+ ISP2100_NVRAM_MAXIOCBALLOCATION(nvram_data);
-+ if ((isp->isp_confopts & ISP_CFG_OWNFSZ) == 0)
-+ fcp->isp_maxfrmlen =
-+ ISP2100_NVRAM_MAXFRAMELENGTH(nvram_data);
-+ fcp->isp_retry_delay =
-+ ISP2100_NVRAM_RETRY_DELAY(nvram_data);
-+ fcp->isp_retry_count =
-+ ISP2100_NVRAM_RETRY_COUNT(nvram_data);
-+ if ((isp->isp_confopts & ISP_CFG_OWNLOOPID) == 0)
-+ fcp->isp_loopid =
-+ ISP2100_NVRAM_HARDLOOPID(nvram_data);
-+ if ((isp->isp_confopts & ISP_CFG_OWNEXCTHROTTLE) == 0)
-+ fcp->isp_execthrottle =
-+ ISP2100_NVRAM_EXECUTION_THROTTLE(nvram_data);
-+ fcp->isp_fwoptions = ISP2100_NVRAM_OPTIONS(nvram_data);
-+}
-+
-+#ifdef ISP_FW_CRASH_DUMP
-+static void isp2200_fw_dump(struct ispsoftc *);
-+static void isp2300_fw_dump(struct ispsoftc *);
-+
-+static void
-+isp2200_fw_dump(struct ispsoftc *isp)
-+{
-+ int i, j;
-+ mbreg_t mbs;
-+ u_int16_t *ptr;
-+
-+ ptr = FCPARAM(isp)->isp_dump_data;
-+ if (ptr == NULL) {
-+ isp_prt(isp, ISP_LOGERR,
-+ "No place to dump RISC registers and SRAM");
-+ return;
-+ }
-+ if (*ptr++) {
-+ isp_prt(isp, ISP_LOGERR,
-+ "dump area for RISC registers and SRAM already used");
-+ return;
-+ }
-+ ISP_WRITE(isp, HCCR, HCCR_CMD_PAUSE);
-+ for (i = 0; i < 100; i++) {
-+ USEC_DELAY(100);
-+ if (ISP_READ(isp, HCCR) & HCCR_PAUSE) {
-+ break;
-+ }
-+ }
-+ if (ISP_READ(isp, HCCR) & HCCR_PAUSE) {
-+ /*
-+ * PBIU Registers
-+ */
-+ for (i = 0; i < 8; i++) {
-+ *ptr++ = ISP_READ(isp, BIU_BLOCK + (i << 1));
-+ }
-+
-+ /*
-+ * Mailbox Registers
-+ */
-+ for (i = 0; i < 8; i++) {
-+ *ptr++ = ISP_READ(isp, MBOX_BLOCK + (i << 1));
-+ }
-+
-+ /*
-+ * DMA Registers
-+ */
-+ for (i = 0; i < 48; i++) {
-+ *ptr++ = ISP_READ(isp, DMA_BLOCK + 0x20 + (i << 1));
-+ }
-+
-+ /*
-+ * RISC H/W Registers
-+ */
-+ ISP_WRITE(isp, BIU2100_CSR, 0);
-+ for (i = 0; i < 16; i++) {
-+ *ptr++ = ISP_READ(isp, BIU_BLOCK + 0xA0 + (i << 1));
-+ }
-+
-+ /*
-+ * RISC GP Registers
-+ */
-+ for (j = 0; j < 8; j++) {
-+ ISP_WRITE(isp, BIU_BLOCK + 0xA4, 0x2000 + (j << 8));
-+ for (i = 0; i < 16; i++) {
-+ *ptr++ =
-+ ISP_READ(isp, BIU_BLOCK + 0x80 + (i << 1));
-+ }
-+ }
-+
-+ /*
-+ * Frame Buffer Hardware Registers
-+ */
-+ ISP_WRITE(isp, BIU2100_CSR, 0x10);
-+ for (i = 0; i < 16; i++) {
-+ *ptr++ = ISP_READ(isp, BIU_BLOCK + 0x80 + (i << 1));
-+ }
-+
-+ /*
-+ * Fibre Protocol Module 0 Hardware Registers
-+ */
-+ ISP_WRITE(isp, BIU2100_CSR, 0x20);
-+ for (i = 0; i < 64; i++) {
-+ *ptr++ = ISP_READ(isp, BIU_BLOCK + 0x80 + (i << 1));
-+ }
-+
-+ /*
-+ * Fibre Protocol Module 1 Hardware Registers
-+ */
-+ ISP_WRITE(isp, BIU2100_CSR, 0x30);
-+ for (i = 0; i < 64; i++) {
-+ *ptr++ = ISP_READ(isp, BIU_BLOCK + 0x80 + (i << 1));
-+ }
-+ } else {
-+ isp_prt(isp, ISP_LOGERR, "RISC Would Not Pause");
-+ return;
-+ }
-+ isp_prt(isp, ISP_LOGALL,
-+ "isp_fw_dump: RISC registers dumped successfully");
-+ ISP_WRITE(isp, BIU2100_CSR, BIU2100_SOFT_RESET);
-+ for (i = 0; i < 100; i++) {
-+ USEC_DELAY(100);
-+ if (ISP_READ(isp, OUTMAILBOX0) == 0) {
-+ break;
-+ }
-+ }
-+ if (ISP_READ(isp, OUTMAILBOX0) != 0) {
-+ isp_prt(isp, ISP_LOGERR, "Board Would Not Reset");
-+ return;
-+ }
-+ ISP_WRITE(isp, HCCR, HCCR_CMD_PAUSE);
-+ for (i = 0; i < 100; i++) {
-+ USEC_DELAY(100);
-+ if (ISP_READ(isp, HCCR) & HCCR_PAUSE) {
-+ break;
-+ }
-+ }
-+ if ((ISP_READ(isp, HCCR) & HCCR_PAUSE) == 0) {
-+ isp_prt(isp, ISP_LOGERR, "RISC Would Not Pause After Reset");
-+ return;
-+ }
-+ ISP_WRITE(isp, RISC_EMB, 0xf2);
-+ ISP_WRITE(isp, HCCR, HCCR_CMD_RELEASE);
-+ for (i = 0; i < 100; i++) {
-+ USEC_DELAY(100);
-+ if ((ISP_READ(isp, HCCR) & HCCR_PAUSE) == 0) {
-+ break;
-+ }
-+ }
-+ ENABLE_INTS(isp);
-+ mbs.param[0] = MBOX_READ_RAM_WORD;
-+ mbs.param[1] = 0x1000;
-+ isp->isp_mbxworkp = (void *) ptr;
-+ isp->isp_mbxwrk0 = 0xefff; /* continuation count */
-+ isp->isp_mbxwrk1 = 0x1001; /* next SRAM address */
-+ isp_control(isp, ISPCTL_RUN_MBOXCMD, &mbs);
-+ if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
-+ isp_prt(isp, ISP_LOGWARN,
-+ "RAM DUMP FAILED @ WORD %x", isp->isp_mbxwrk1);
-+ return;
-+ }
-+ ptr = isp->isp_mbxworkp; /* finish fetch of final word */
-+ *ptr++ = isp->isp_mboxtmp[2];
-+ isp_prt(isp, ISP_LOGALL, "isp_fw_dump: SRAM dumped successfully");
-+ FCPARAM(isp)->isp_dump_data[0] = isp->isp_type; /* now used */
-+ (void) isp_async(isp, ISPASYNC_FW_DUMPED, 0);
-+}
-+
-+static void
-+isp2300_fw_dump(struct ispsoftc *isp)
-+{
-+ int i, j;
-+ mbreg_t mbs;
-+ u_int16_t *ptr;
-+
-+ ptr = FCPARAM(isp)->isp_dump_data;
-+ if (ptr == NULL) {
-+ isp_prt(isp, ISP_LOGERR,
-+ "No place to dump RISC registers and SRAM");
-+ return;
-+ }
-+ if (*ptr++) {
-+ isp_prt(isp, ISP_LOGERR,
-+ "dump area for RISC registers and SRAM already used");
-+ return;
-+ }
-+ ISP_WRITE(isp, HCCR, HCCR_CMD_PAUSE);
-+ for (i = 0; i < 100; i++) {
-+ USEC_DELAY(100);
-+ if (ISP_READ(isp, HCCR) & HCCR_PAUSE) {
-+ break;
-+ }
-+ }
-+ if (ISP_READ(isp, HCCR) & HCCR_PAUSE) {
-+ /*
-+ * PBIU registers
-+ */
-+ for (i = 0; i < 8; i++) {
-+ *ptr++ = ISP_READ(isp, BIU_BLOCK + (i << 1));
-+ }
-+
-+ /*
-+ * ReqQ-RspQ-Risc2Host Status registers
-+ */
-+ for (i = 0; i < 8; i++) {
-+ *ptr++ = ISP_READ(isp, BIU_BLOCK + 0x10 + (i << 1));
-+ }
-+
-+ /*
-+ * Mailbox Registers
-+ */
-+ for (i = 0; i < 32; i++) {
-+ *ptr++ =
-+ ISP_READ(isp, PCI_MBOX_REGS2300_OFF + (i << 1));
-+ }
-+
-+ /*
-+ * Auto Request Response DMA registers
-+ */
-+ ISP_WRITE(isp, BIU2100_CSR, 0x40);
-+ for (i = 0; i < 32; i++) {
-+ *ptr++ = ISP_READ(isp, BIU_BLOCK + 0x80 + (i << 1));
-+ }
-+
-+ /*
-+ * DMA registers
-+ */
-+ ISP_WRITE(isp, BIU2100_CSR, 0x50);
-+ for (i = 0; i < 48; i++) {
-+ *ptr++ = ISP_READ(isp, BIU_BLOCK + 0x80 + (i << 1));
-+ }
-+
-+ /*
-+ * RISC hardware registers
-+ */
-+ ISP_WRITE(isp, BIU2100_CSR, 0);
-+ for (i = 0; i < 16; i++) {
-+ *ptr++ = ISP_READ(isp, BIU_BLOCK + 0xA0 + (i << 1));
-+ }
-+
-+ /*
-+ * RISC GP? registers
-+ */
-+ for (j = 0; j < 8; j++) {
-+ ISP_WRITE(isp, BIU_BLOCK + 0xA4, 0x2000 + (j << 9));
-+ for (i = 0; i < 16; i++) {
-+ *ptr++ =
-+ ISP_READ(isp, BIU_BLOCK + 0x80 + (i << 1));
-+ }
-+ }
-+
-+ /*
-+ * frame buffer hardware registers
-+ */
-+ ISP_WRITE(isp, BIU2100_CSR, 0x10);
-+ for (i = 0; i < 64; i++) {
-+ *ptr++ = ISP_READ(isp, BIU_BLOCK + 0x80 + (i << 1));
-+ }
-+
-+ /*
-+ * FPM B0 hardware registers
-+ */
-+ ISP_WRITE(isp, BIU2100_CSR, 0x20);
-+ for (i = 0; i < 64; i++) {
-+ *ptr++ = ISP_READ(isp, BIU_BLOCK + 0x80 + (i << 1));
-+ }
-+
-+ /*
-+ * FPM B1 hardware registers
-+ */
-+ ISP_WRITE(isp, BIU2100_CSR, 0x30);
-+ for (i = 0; i < 64; i++) {
-+ *ptr++ = ISP_READ(isp, BIU_BLOCK + 0x80 + (i << 1));
-+ }
-+ } else {
-+ isp_prt(isp, ISP_LOGERR, "RISC Would Not Pause");
-+ return;
-+ }
-+ isp_prt(isp, ISP_LOGALL,
-+ "isp_fw_dump: RISC registers dumped successfully");
-+ ISP_WRITE(isp, BIU2100_CSR, BIU2100_SOFT_RESET);
-+ for (i = 0; i < 100; i++) {
-+ USEC_DELAY(100);
-+ if (ISP_READ(isp, OUTMAILBOX0) == 0) {
-+ break;
-+ }
-+ }
-+ if (ISP_READ(isp, OUTMAILBOX0) != 0) {
-+ isp_prt(isp, ISP_LOGERR, "Board Would Not Reset");
-+ return;
-+ }
-+ ENABLE_INTS(isp);
-+ mbs.param[0] = MBOX_READ_RAM_WORD;
-+ mbs.param[1] = 0x800;
-+ isp->isp_mbxworkp = (void *) ptr;
-+ isp->isp_mbxwrk0 = 0xf7ff; /* continuation count */
-+ isp->isp_mbxwrk1 = 0x801; /* next SRAM address */
-+ isp_control(isp, ISPCTL_RUN_MBOXCMD, &mbs);
-+ if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
-+ isp_prt(isp, ISP_LOGWARN,
-+ "RAM DUMP FAILED @ WORD %x", isp->isp_mbxwrk1);
-+ return;
-+ }
-+ ptr = isp->isp_mbxworkp; /* finish fetch of final word */
-+ *ptr++ = isp->isp_mboxtmp[2];
-+
-+ /*
-+ * We don't have access to mailbox registers 8.. onward
-+ * in our 'common' device model- so we have to set it
-+ * here and hope it stays the same!
-+ */
-+ ISP_WRITE(isp, PCI_MBOX_REGS2300_OFF + (8 << 1), 0x1);
-+
-+ mbs.param[0] = MBOX_READ_RAM_WORD_EXTENDED;
-+ mbs.param[1] = 0;
-+ isp->isp_mbxworkp = (void *) ptr;
-+ isp->isp_mbxwrk0 = 0xffff; /* continuation count */
-+ isp->isp_mbxwrk1 = 0x1; /* next SRAM address */
-+ isp_control(isp, ISPCTL_RUN_MBOXCMD, &mbs);
-+ if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
-+ isp_prt(isp, ISP_LOGWARN,
-+ "RAM DUMP FAILED @ WORD %x", 0x10000 + isp->isp_mbxwrk1);
-+ return;
-+ }
-+ ptr = isp->isp_mbxworkp; /* finish final word */
-+ *ptr++ = mbs.param[2];
-+ isp_prt(isp, ISP_LOGALL, "isp_fw_dump: SRAM dumped successfully");
-+ FCPARAM(isp)->isp_dump_data[0] = isp->isp_type; /* now used */
-+ (void) isp_async(isp, ISPASYNC_FW_DUMPED, 0);
-+}
-+
-+void
-+isp_fw_dump(struct ispsoftc *isp)
-+{
-+ if (IS_2200(isp))
-+ isp2200_fw_dump(isp);
-+ else if (IS_23XX(isp))
-+ isp2300_fw_dump(isp);
-+}
-+#endif
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/scsi/isp/isp_cb_ops.c 2003-07-19 17:06:33.000000000 -0700
-@@ -0,0 +1,646 @@
-+/* %W% */
-+/*
-+ * Qlogic ISP Host Adapter procfs and open/close entry points
-+ *---------------------------------------
-+ *
-+ * Copyright (c) 2003 by Matthew Jacob
-+ * All rights reserved.
-+ *
-+ * Redistribution and use in source and binary forms, with or without
-+ * modification, are permitted provided that the following conditions
-+ * are met:
-+ * 1. Redistributions of source code must retain the above copyright
-+ * notice, this list of conditions, and the following disclaimer,
-+ * without modification, immediately at the beginning of the file.
-+ * 2. The name of the author may not be used to endorse or promote products
-+ * derived from this software without specific prior written permission.
-+ *
-+ * Alternatively, this software may be distributed under the terms of the
-+ * the GNU Public License ("GPL").
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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)
-+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-+ * SUCH DAMAGE.
-+ *
-+ * Matthew Jacob
-+ * Feral Software
-+ * PMB #825
-+ * 5214-F Diamond Hts Blvd
-+ * San Francisco, CA, 94131
-+ * mjacob@feral.com
-+ *
-+ *----
-+ * proc safe pretty print code courtesy of Gerard Roudier (groudier@free.fr)
-+ *
-+ */
-+
-+#include "isp_linux.h"
-+#include "isp_ioctl.h"
-+#include <asm/uaccess.h>
-+#ifdef CONFIG_PROC_FS
-+
-+/*
-+ * 'safe' proc pretty print code
-+ */
-+struct info_str {
-+ char *buffer;
-+ int length;
-+ off_t offset;
-+ int pos;
-+};
-+
-+static void
-+copy_mem_info(struct info_str *info, char *data, int len)
-+{
-+ if (info->pos + len > info->offset + info->length)
-+ len = info->offset + info->length - info->pos;
-+
-+ if (info->pos + len < info->offset) {
-+ info->pos += len;
-+ return;
-+ }
-+
-+ if (info->pos < info->offset) {
-+ off_t partial;
-+
-+ partial = info->offset - info->pos;
-+ data += partial;
-+ info->pos += partial;
-+ len -= partial;
-+ }
-+
-+ if (len > 0) {
-+ memcpy(info->buffer, data, len);
-+ info->pos += len;
-+ info->buffer += len;
-+ }
-+}
-+
-+static int
-+copy_info(struct info_str *info, char *fmt, ...)
-+{
-+ va_list args;
-+ char buf[256];
-+ int len;
-+
-+ va_start(args, fmt);
-+ len = vsprintf(buf, fmt, args);
-+ va_end(args);
-+
-+ copy_mem_info(info, buf, len);
-+ return (len);
-+}
-+
-+
-+int
-+isplinux_proc_info(char *buf, char **st, off_t off, int len, int host, int io)
-+{
-+ int i;
-+ struct info_str info;
-+ struct ispsoftc *isp;
-+
-+ isp = isplist;
-+ while (isp) {
-+ if (isp->isp_host->host_no == host) {
-+ break;
-+ }
-+ isp = isp->isp_next;
-+ }
-+ if (isp == NULL) {
-+ return (-ENODEV);
-+ }
-+
-+ if (io) {
-+ buf[len] = 0;
-+ io = -ENOSYS;
-+ if (strncmp(buf, "debug=", 6) == 0) {
-+ unsigned long debug;
-+ char *p = &buf[6], *q;
-+ debug = simple_strtoul(p, &q, 16);
-+ if (q == &buf[6]) {
-+ isp_prt(isp, ISP_LOGERR, "Garbled Debug Line '%s'", buf);
-+ return (-EINVAL);
-+ }
-+ isp_prt(isp, ISP_LOGINFO, "setting debug level to 0x%lx", debug);
-+ ISP_LOCKU_SOFTC(isp);
-+ isp->isp_dblev = debug;
-+ ISP_UNLKU_SOFTC(isp);
-+ io = len;
-+ } else if (strncmp(buf, "rescan", 6) == 0) {
-+ if (IS_FC(isp)) {
-+ SEND_THREAD_EVENT(isp, ISP_THREAD_FC_RESCAN, 1);
-+ io = len;
-+ }
-+ } else if (strncmp(buf, "lip", 3) == 0) {
-+ if (IS_FC(isp)) {
-+ ISP_LOCKU_SOFTC(isp);
-+ (void) isp_control(isp, ISPCTL_SEND_LIP, 0);
-+ ISP_UNLKU_SOFTC(isp);
-+ io = len;
-+ }
-+ } else if (strncmp(buf, "busreset=", 9) == 0) {
-+ char *p = &buf[6], *q;
-+ int bus = (int) simple_strtoul(p, &q, 16);
-+ if (q == &buf[6]) {
-+ isp_prt(isp, ISP_LOGERR, "Garbled Bus Reset Line '%s'", buf);
-+ return (-EINVAL);
-+ }
-+ ISP_LOCKU_SOFTC(isp);
-+ (void) isp_control(isp, ISPCTL_RESET_BUS, &bus);
-+ ISP_UNLKU_SOFTC(isp);
-+ io = len;
-+ } else if (strncmp(buf, "devreset=", 9) == 0) {
-+ char *p = &buf[6], *q;
-+ int dev = (int) simple_strtoul(p, &q, 16);
-+ if (q == &buf[6]) {
-+ isp_prt(isp, ISP_LOGERR, "Garbled Dev Reset Line '%s'", buf);
-+ return (-EINVAL);
-+ }
-+ /* always bus 0 */
-+ ISP_LOCKU_SOFTC(isp);
-+ (void) isp_control(isp, ISPCTL_RESET_DEV, &dev);
-+ ISP_UNLKU_SOFTC(isp);
-+ io = len;
-+ } else if (strncmp(buf, "reset", 5) == 0) {
-+ ISP_LOCKU_SOFTC(isp);
-+ io = isp_drain_reset(isp, "proc_reset");
-+ ISP_UNLKU_SOFTC(isp);
-+ if (io == 0)
-+ io = len;
-+ else
-+ io = -EIO;
-+ } else if (strncmp(buf, "drain", 5) == 0) {
-+ ISP_LOCKU_SOFTC(isp);
-+ io = isp_drain(isp, "proc_reset");
-+ ISP_UNLKU_SOFTC(isp);
-+ if (io == 0)
-+ io = len;
-+ else
-+ io = -EIO;
-+ }
-+#ifdef ISP_FW_CRASH_DUMP
-+ else if (strncmp(buf, "fwcrash", 7) == 0) {
-+ if (IS_FC(isp)) {
-+ ISP_LOCKU_SOFTC(isp);
-+ SEND_THREAD_EVENT(isp, ISP_THREAD_FW_CRASH_DUMP, 0);
-+ ISP_UNLKU_SOFTC(isp);
-+ io = len;
-+ }
-+ }
-+#endif
-+ return (io);
-+ }
-+
-+ ISP_LOCKU_SOFTC(isp);
-+ if (st)
-+ *st = buf;
-+ info.buffer = buf;
-+ info.length = len;
-+ info.offset = off;
-+ info.pos = 0;
-+
-+ copy_info(&info, (char *)isplinux_info(isp->isp_host));
-+#ifdef HBA_VERSION
-+ copy_info(&info, "\n HBA Version %s, built %s, %s",
-+ HBA_VERSION, __DATE__, __TIME__);
-+#endif
-+ copy_info(&info, "\n DEVID %x role %d\n",
-+ isp->isp_osinfo.device_id, isp->isp_role);
-+ copy_info(&info,
-+ " Interrupt Stats:\n"
-+ " total=0x%08x%08x bogus=0x%08x%08x\n"
-+ " MboxC=0x%08x%08x async=0x%08x%08x\n"
-+ " CRslt=0x%08x%08x CPost=0x%08x%08x\n"
-+ " RspnsCHiWater=0x%04x FastPostC_Hiwater=0x%04x\n",
-+ (u_int32_t) (isp->isp_intcnt >> 32),
-+ (u_int32_t) (isp->isp_intcnt & 0xffffffff),
-+ (u_int32_t) (isp->isp_intbogus >> 32),
-+ (u_int32_t) (isp->isp_intbogus & 0xffffffff),
-+ (u_int32_t) (isp->isp_intmboxc >> 32),
-+ (u_int32_t) (isp->isp_intmboxc & 0xffffffff),
-+ (u_int32_t) (isp->isp_intoasync >> 32),
-+ (u_int32_t) (isp->isp_intoasync & 0xffffffff),
-+ (u_int32_t) (isp->isp_rsltccmplt >> 32),
-+ (u_int32_t) (isp->isp_rsltccmplt & 0xffffffff),
-+ (u_int32_t) (isp->isp_fphccmplt >> 32),
-+ (u_int32_t) (isp->isp_fphccmplt & 0xffffffff),
-+ isp->isp_rscchiwater, isp->isp_fpcchiwater);
-+ copy_info(&info,
-+ " Request In %d Request Out %d Result %d Nactv %d"
-+ " HiWater %u QAVAIL %d WtQHi %d\n",
-+ isp->isp_reqidx, isp->isp_reqodx, isp->isp_residx, isp->isp_nactive,
-+ isp->isp_osinfo.hiwater, ISP_QAVAIL(isp),
-+ isp->isp_osinfo.wqhiwater);
-+ for (i = 0; i < isp->isp_maxcmds; i++) {
-+ if (isp->isp_xflist[i]) {
-+ copy_info(&info, " %d:%p", i, isp->isp_xflist[i]);
-+ }
-+ }
-+ copy_info(&info, "\n");
-+ if (isp->isp_osinfo.wqnext) {
-+ Scsi_Cmnd *f = isp->isp_osinfo.wqnext;
-+ copy_info(&info, "WaitQ(%d)", isp->isp_osinfo.wqcnt);
-+ while (f) {
-+ copy_info(&info, "->%p", f);
-+ f = (Scsi_Cmnd *) f->host_scribble;
-+ }
-+ copy_info(&info, "\n");
-+ }
-+ if (isp->isp_osinfo.dqnext) {
-+ Scsi_Cmnd *f = isp->isp_osinfo.dqnext;
-+ copy_info(&info, "DoneQ");
-+ while (f) {
-+ copy_info(&info, "->%p", f);
-+ f = (Scsi_Cmnd *) f->host_scribble;
-+ }
-+ copy_info(&info, "\n");
-+ }
-+ if (IS_FC(isp)) {
-+ fcparam *fcp = isp->isp_param;
-+ copy_info(&info,
-+ "Loop ID: %d AL_PA 0x%x Port ID 0x%x FW State %x Loop State %x\n",
-+ fcp->isp_loopid, fcp->isp_alpa, fcp->isp_portid, fcp->isp_fwstate,
-+ fcp->isp_loopstate);
-+ copy_info(&info, "Port WWN 0x%08x%08x Node WWN 0x%08x%08x\n",
-+ (unsigned int) (ISP_PORTWWN(isp) >> 32),
-+ (unsigned int) (ISP_PORTWWN(isp) & 0xffffffff),
-+ (unsigned int) (ISP_NODEWWN(isp) >> 32),
-+ (unsigned int) (ISP_NODEWWN(isp) & 0xffffffff));
-+ for (i = 0; i < MAX_FC_TARG; i++) {
-+ if (fcp->portdb[i].valid == 0 && i < FL_PORT_ID)
-+ continue;
-+ if (fcp->portdb[i].port_wwn == 0)
-+ continue;
-+ copy_info(&info, "TGT % 3d Loop ID % 3d Port id 0x%04x, role %s"
-+ "\n Port WWN 0x%08x%08x Node WWN 0x%08x%08x\n\n", i,
-+ fcp->portdb[i].loopid,
-+ fcp->portdb[i].portid, class3_roles[fcp->portdb[i].roles],
-+ (unsigned int) (fcp->portdb[i].port_wwn >> 32),
-+ (unsigned int) (fcp->portdb[i].port_wwn & 0xffffffff),
-+ (unsigned int) (fcp->portdb[i].node_wwn >> 32),
-+ (unsigned int) (fcp->portdb[i].node_wwn & 0xffffffff));
-+ }
-+ } else {
-+ sdparam *sdp = (sdparam *)isp->isp_param;
-+
-+ copy_info(&info, "Initiator ID: %d\n", sdp->isp_initiator_id);
-+ copy_info(&info, "Target Flag Period Offset\n");
-+ for (i = 0; i < MAX_TARGETS; i++) {
-+ copy_info(&info, "%6d: 0x%04x 0x%04x 0x%x\n",
-+ i, sdp->isp_devparam[i].actv_flags,
-+ sdp->isp_devparam[i].actv_offset,
-+ sdp->isp_devparam[i].actv_period);
-+ }
-+ if (IS_DUALBUS(isp)) {
-+ sdp++;
-+ copy_info(&info, "\nInitiator ID: %d, Channel B\n",
-+ sdp->isp_initiator_id);
-+ copy_info(&info,
-+ "Target CurFlag DevFlag Period Offset B-Channel\n");
-+ for (i = 0; i < MAX_TARGETS; i++) {
-+ copy_info(&info, "%6d: 0x%04x 0x%04x 0x%x\n",
-+ i, sdp->isp_devparam[i].actv_flags,
-+ sdp->isp_devparam[i].actv_offset,
-+ sdp->isp_devparam[i].actv_period);
-+ }
-+ }
-+ }
-+ ISP_UNLKU_SOFTC(isp);
-+ return (info.pos > info.offset ? info.pos - info.offset : 0);
-+}
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
-+static int isp_open(struct inode *, struct file *);
-+static int isp_close(struct inode *, struct file *);
-+static int
-+isp_ioctl(struct inode *, struct file *, unsigned int, unsigned long);
-+
-+struct file_operations isp_procfs_operations = {
-+ owner: THIS_MODULE,
-+ open: isp_open,
-+ release: isp_close,
-+ ioctl: isp_ioctl,
-+};
-+
-+static struct proc_dir_entry *isp_root = 0;
-+
-+void
-+isplinux_init_proc(struct ispsoftc *isp)
-+{
-+ struct proc_dir_entry *isp_entry;
-+ char tbuf[64];
-+
-+ SNPRINTF(tbuf, sizeof(tbuf), "isp%d@0x%x", isp->isp_unit,
-+ isp->isp_osinfo.device_id);
-+ if (isp_root == NULL) {
-+ isp_root = proc_mkdir("isp", 0);
-+ }
-+ if (isp_root) {
-+ isp_entry = create_proc_entry(tbuf, S_IFREG|S_IRUGO|S_IWUSR, isp_root);
-+ if (isp_entry == NULL) {
-+ return;
-+ }
-+ isp_entry->proc_fops = &isp_procfs_operations;
-+ }
-+}
-+
-+void
-+isplinux_undo_proc(struct ispsoftc *isp)
-+{
-+ char tbuf[64];
-+ SNPRINTF(tbuf, sizeof(tbuf), "isp/isp%d@0x%x", isp->isp_unit,
-+ isp->isp_osinfo.device_id);
-+ remove_proc_entry(tbuf, 0);
-+ remove_proc_entry("isp", 0);
-+}
-+
-+static struct ispsoftc *
-+get_isp_from_procname(const unsigned char *name)
-+{
-+ struct ispsoftc *isp;
-+
-+ for (isp = isplist; isp; isp = isp->isp_next) {
-+ char tbuf[32];
-+ SNPRINTF(tbuf, sizeof(tbuf), "isp%d@0x%x", isp->isp_unit,
-+ isp->isp_osinfo.device_id);
-+ if (strcmp(name, tbuf) == 0) {
-+ return (isp);
-+ }
-+ }
-+ return (0);
-+}
-+
-+static int
-+isp_open(struct inode *ip, struct file *fp)
-+{
-+ struct ispsoftc *isp = get_isp_from_procname(fp->f_dentry->d_name.name);
-+ if (isp == NULL) {
-+ return (-ENXIO);
-+ }
-+ if (isp->isp_isopen) {
-+ return (-EBUSY);
-+ }
-+ isp->isp_isopen = 1;
-+ fp->private_data = isp;
-+ return (0);
-+}
-+
-+static int
-+isp_close(struct inode *ip, struct file *fp)
-+{
-+ struct ispsoftc *isp = fp->private_data;
-+ isp->isp_isopen = 0;
-+ return (0);
-+}
-+
-+static int
-+isp_ioctl(struct inode *ip, struct file *fp, unsigned int c, unsigned long arg)
-+{
-+ struct ispsoftc *isp = fp->private_data;
-+ int rv, inarg, outarg;
-+ fcparam *fcp;
-+
-+ if (isp == (struct ispsoftc *)NULL) {
-+ return -ENXIO;
-+ }
-+
-+ if (IS_SCSI(isp)) {
-+ switch (c) {
-+ case ISP_SDBLEV:
-+ case ISP_RESCAN:
-+ case ISP_GETROLE:
-+ case ISP_SETROLE:
-+ case ISP_RESETHBA:
-+ break;
-+ default:
-+ return (-EINVAL);
-+ }
-+ fcp = NULL;
-+ } else {
-+ fcp = isp->isp_param;
-+ }
-+
-+ rv = 0;
-+ isp_prt(isp, ISP_LOGDEBUG0, "isp_ioctl: cmd=%x", c);
-+
-+ switch (c) {
-+ case ISP_GET_STATS:
-+ {
-+ isp_stats_t stats;
-+
-+ MEMZERO(&stats, sizeof stats);
-+ stats.isp_stat_version = ISP_STATS_VERSION;
-+ stats.isp_type = isp->isp_type;
-+ stats.isp_revision = isp->isp_revision;
-+ ISP_LOCK_SOFTC(isp);
-+ stats.isp_stats[ISP_INTCNT] = isp->isp_intcnt;
-+ stats.isp_stats[ISP_INTBOGUS] = isp->isp_intbogus;
-+ stats.isp_stats[ISP_INTMBOXC] = isp->isp_intmboxc;
-+ stats.isp_stats[ISP_INGOASYNC] = isp->isp_intoasync;
-+ stats.isp_stats[ISP_RSLTCCMPLT] = isp->isp_rsltccmplt;
-+ stats.isp_stats[ISP_FPHCCMCPLT] = isp->isp_fphccmplt;
-+ stats.isp_stats[ISP_RSCCHIWAT] = isp->isp_rscchiwater;
-+ stats.isp_stats[ISP_FPCCHIWAT] = isp->isp_fpcchiwater;
-+ ISP_UNLK_SOFTC(isp);
-+ if (COPYOUT(&stats, (void *)arg, sizeof (stats), 0)) {
-+ rv = EFAULT;
-+ }
-+ break;
-+ }
-+ case ISP_CLR_STATS:
-+ ISP_LOCK_SOFTC(isp);
-+ isp->isp_intcnt = 0;
-+ isp->isp_intbogus = 0;
-+ isp->isp_intmboxc = 0;
-+ isp->isp_intoasync = 0;
-+ isp->isp_rsltccmplt = 0;
-+ isp->isp_fphccmplt = 0;
-+ isp->isp_rscchiwater = 0;
-+ isp->isp_fpcchiwater = 0;
-+ ISP_UNLK_SOFTC(isp);
-+ break;
-+#ifdef ISP_FW_CRASH_DUMP
-+ case ISP_GET_FW_CRASH_DUMP:
-+ {
-+ u_int16_t *ptr = fcp->isp_dump_data;
-+ size_t sz;
-+ if (IS_2200(isp))
-+ sz = QLA2200_RISC_IMAGE_DUMP_SIZE;
-+ else
-+ sz = QLA2300_RISC_IMAGE_DUMP_SIZE;
-+ ISP_LOCK_SOFTC(isp);
-+ if (ptr && *ptr) {
-+ if (COPYOUT(ptr, (void *)arg, sz, mode)) {
-+ rv = EFAULT;
-+ } else {
-+ *ptr = 0;
-+ }
-+ } else {
-+ rv = ENXIO;
-+ }
-+ ISP_UNLK_SOFTC(isp);
-+ break;
-+ }
-+
-+ case ISP_FORCE_CRASH_DUMP:
-+ ISP_LOCK_SOFTC(isp);
-+ isp_async(isp, ISPASYNC_FW_CRASH, NULL);
-+ ISP_UNLK_SOFTC(isp);
-+ break;
-+#endif
-+ case ISP_SDBLEV:
-+ if (COPYIN((void *)arg, &inarg, sizeof (inarg), 0)) {
-+ rv = EFAULT;
-+ break;
-+ }
-+ outarg = isp->isp_dblev;
-+ isp->isp_dblev = inarg;
-+ if (COPYOUT(&outarg, (void *)arg, sizeof (outarg), 0)) {
-+ rv = EFAULT;
-+ break;
-+ }
-+ break;
-+
-+ case ISP_RESCAN:
-+ if (IS_FC(isp)) {
-+ ISP_LOCKU_SOFTC(isp);
-+ SEND_THREAD_EVENT(isp, ISP_THREAD_FC_RESCAN, 0)
-+ ISP_UNLKU_SOFTC(isp);
-+ }
-+ break;
-+
-+ case ISP_GETROLE:
-+ outarg = isp->isp_role;
-+ if (COPYOUT(&outarg, (void *)arg, sizeof (outarg), 0)) {
-+ rv = EFAULT;
-+ break;
-+ }
-+ break;
-+
-+ case ISP_SETROLE:
-+ if (COPYIN((void *)arg, &inarg, sizeof (inarg), 0)) {
-+ rv = EFAULT;
-+ break;
-+ }
-+ if (inarg & ~(ISP_ROLE_INITIATOR|ISP_ROLE_TARGET)) {
-+ rv = EINVAL;
-+ break;
-+ }
-+ /*
-+ * Check to see if we're already in that role.
-+ */
-+ if (isp->isp_role == inarg) {
-+ outarg = isp->isp_role;
-+ if (COPYOUT(&outarg, (void *)arg, sizeof (outarg), mode)) {
-+ rv = EFAULT;
-+ }
-+ break;
-+ }
-+ /*FALLTHROUGH*/
-+ case ISP_RESETHBA:
-+ {
-+ ISP_LOCK_SOFTC(isp);
-+ if (c == ISP_SETROLE) {
-+ outarg = isp->isp_role;
-+ isp->isp_role = inarg;
-+ }
-+ if (isp_drain_reset(isp, "isp_ioctl")) {
-+ ISP_UNLK_SOFTC(isp);
-+ rv = EIO;
-+ break;
-+ }
-+ isp_async(isp, ISPASYNC_FW_RESTARTED, NULL);
-+ ISP_UNLK_SOFTC(isp);
-+ if (c == ISP_SETROLE &&
-+ COPYOUT(&outarg, (void *)arg, sizeof (outarg), mode)) {
-+ rv = EFAULT;
-+ break;
-+ }
-+ break;
-+ }
-+ case ISP_FC_LIP:
-+ ISP_LOCK_SOFTC(isp);
-+ if (isp_control(isp, ISPCTL_SEND_LIP, NULL)) {
-+ rv = EIO;
-+ }
-+ ISP_UNLK_SOFTC(isp);
-+ break;
-+ case ISP_FC_GETDINFO:
-+ {
-+ struct isp_fc_device local, *ifc = &local;
-+ struct lportdb *lp;
-+
-+ if (COPYIN((void *)arg, ifc, sizeof (*ifc), mode)) {
-+ rv = EFAULT;
-+ break;
-+ }
-+ if (ifc->loopid < 0 || ifc->loopid >= MAX_FC_TARG) {
-+ rv = EINVAL;
-+ break;
-+ }
-+ ISP_LOCK_SOFTC(isp);
-+ lp = &FCPARAM(isp)->portdb[ifc->loopid];
-+ if (lp->valid) {
-+ ifc->loopid = lp->loopid;
-+ ifc->portid = lp->portid;
-+ ifc->node_wwn = lp->node_wwn;
-+ ifc->port_wwn = lp->port_wwn;
-+ rv = 0;
-+ } else {
-+ rv = ENODEV;
-+ }
-+ ISP_UNLK_SOFTC(isp);
-+ if (rv == 0) {
-+ if (COPYOUT((void *)ifc, (void *)arg,
-+ sizeof (*ifc), mode)) {
-+ rv = EFAULT;
-+ }
-+ }
-+ break;
-+ }
-+ case ISP_FC_GETHINFO:
-+ {
-+ struct isp_hba_device local, *hba = &local;
-+ MEMZERO(hba, sizeof (*hba));
-+ ISP_LOCK_SOFTC(isp);
-+ hba->fc_speed = FCPARAM(isp)->isp_gbspeed;
-+ hba->fc_scsi_supported = 1;
-+ hba->fc_topology = FCPARAM(isp)->isp_topo + 1;
-+ hba->fc_loopid = FCPARAM(isp)->isp_loopid;
-+ hba->active_node_wwn = FCPARAM(isp)->isp_nodewwn;
-+ hba->active_port_wwn = FCPARAM(isp)->isp_portwwn;
-+ ISP_UNLK_SOFTC(isp);
-+ if (COPYOUT(hba, (void *)arg, sizeof (*hba), mode)) {
-+ rv = EFAULT;
-+ break;
-+ }
-+ break;
-+ }
-+ default:
-+ rv = EINVAL;
-+ break;
-+ }
-+ return(rv? -rv : 0);
-+}
-+#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) */
-+#endif
-+/*
-+ * mode: c
-+ * Local variables:
-+ * c-indent-level: 4
-+ * c-brace-imaginary-offset: 0
-+ * c-brace-offset: -4
-+ * c-argdecl-indent: 4
-+ * c-label-offset: -4
-+ * c-continued-statement-offset: 4
-+ * c-continued-brace-offset: 0
-+ * End:
-+ */
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/scsi/isp/isp_inline.h 2003-07-19 17:06:33.000000000 -0700
-@@ -0,0 +1,1495 @@
-+/* @(#)isp_inline.h 1.20 */
-+/*
-+ * Qlogic Host Adapter Inline Functions
-+ *
-+ * Copyright (c) 1999, 2000, 2001 by Matthew Jacob
-+ * Feral Software
-+ * All rights reserved.
-+ * mjacob@feral.com
-+ *
-+ * Redistribution and use in source and binary forms, with or without
-+ * modification, are permitted provided that the following conditions
-+ * are met:
-+ * 1. Redistributions of source code must retain the above copyright
-+ * notice immediately at the beginning of the file, without modification,
-+ * this list of conditions, and the following disclaimer.
-+ * 2. The name of the author may not be used to endorse or promote products
-+ * derived from this software without specific prior written permission.
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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)
-+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-+ * SUCH DAMAGE.
-+ *
-+ */
-+#ifndef _ISP_INLINE_H
-+#define _ISP_INLINE_H
-+
-+/*
-+ * Handle Functions.
-+ * For each outstanding command there will be a non-zero handle.
-+ * There will be at most isp_maxcmds handles, and isp_lasthdls
-+ * will be a seed for the last handled allocated.
-+ */
-+
-+static INLINE int isp_save_xs(struct ispsoftc *, XS_T *, u_int16_t *);
-+static INLINE XS_T *isp_find_xs(struct ispsoftc *, u_int16_t);
-+static INLINE u_int16_t isp_find_handle(struct ispsoftc *, XS_T *);
-+static INLINE int isp_handle_index(u_int16_t);
-+static INLINE void isp_destroy_handle(struct ispsoftc *, u_int16_t);
-+static INLINE void isp_remove_handle(struct ispsoftc *, XS_T *);
-+
-+static INLINE int
-+isp_save_xs(struct ispsoftc *isp, XS_T *xs, u_int16_t *handlep)
-+{
-+ int i, j;
-+
-+ for (j = isp->isp_lasthdls, i = 0; i < (int) isp->isp_maxcmds; i++) {
-+ if (isp->isp_xflist[j] == NULL) {
-+ break;
-+ }
-+ if (++j == isp->isp_maxcmds) {
-+ j = 0;
-+ }
-+ }
-+ if (i == isp->isp_maxcmds) {
-+ return (-1);
-+ }
-+ isp->isp_xflist[j] = xs;
-+ *handlep = j+1;
-+ if (++j == isp->isp_maxcmds)
-+ j = 0;
-+ isp->isp_lasthdls = (u_int16_t)j;
-+ return (0);
-+}
-+
-+static INLINE XS_T *
-+isp_find_xs(struct ispsoftc *isp, u_int16_t handle)
-+{
-+ if (handle < 1 || handle > (u_int16_t) isp->isp_maxcmds) {
-+ return (NULL);
-+ } else {
-+ return (isp->isp_xflist[handle - 1]);
-+ }
-+}
-+
-+static INLINE u_int16_t
-+isp_find_handle(struct ispsoftc *isp, XS_T *xs)
-+{
-+ int i;
-+ if (xs != NULL) {
-+ for (i = 0; i < isp->isp_maxcmds; i++) {
-+ if (isp->isp_xflist[i] == xs) {
-+ return ((u_int16_t) i+1);
-+ }
-+ }
-+ }
-+ return (0);
-+}
-+
-+static INLINE int
-+isp_handle_index(u_int16_t handle)
-+{
-+ return (handle-1);
-+}
-+
-+static INLINE void
-+isp_destroy_handle(struct ispsoftc *isp, u_int16_t handle)
-+{
-+ if (handle > 0 && handle <= (u_int16_t) isp->isp_maxcmds) {
-+ isp->isp_xflist[isp_handle_index(handle)] = NULL;
-+ }
-+}
-+
-+static INLINE void
-+isp_remove_handle(struct ispsoftc *isp, XS_T *xs)
-+{
-+ isp_destroy_handle(isp, isp_find_handle(isp, xs));
-+}
-+
-+static INLINE int
-+isp_getrqentry(struct ispsoftc *, u_int16_t *, u_int16_t *, void **);
-+
-+static INLINE int
-+isp_getrqentry(struct ispsoftc *isp, u_int16_t *iptrp,
-+ u_int16_t *optrp, void **resultp)
-+{
-+ volatile u_int16_t iptr, optr;
-+
-+ optr = isp->isp_reqodx = READ_REQUEST_QUEUE_OUT_POINTER(isp);
-+ iptr = isp->isp_reqidx;
-+ *resultp = ISP_QUEUE_ENTRY(isp->isp_rquest, iptr);
-+ iptr = ISP_NXT_QENTRY(iptr, RQUEST_QUEUE_LEN(isp));
-+ if (iptr == optr) {
-+ return (1);
-+ }
-+ if (optrp)
-+ *optrp = optr;
-+ if (iptrp)
-+ *iptrp = iptr;
-+ return (0);
-+}
-+
-+static INLINE void isp_print_qentry (struct ispsoftc *, char *, int, void *);
-+
-+
-+#define TBA (4 * (((QENTRY_LEN >> 2) * 3) + 1) + 1)
-+static INLINE void
-+isp_print_qentry(struct ispsoftc *isp, char *msg, int idx, void *arg)
-+{
-+ char buf[TBA];
-+ int amt, i, j;
-+ u_int8_t *ptr = arg;
-+
-+ isp_prt(isp, ISP_LOGALL, "%s index %d=>", msg, idx);
-+ for (buf[0] = 0, amt = i = 0; i < 4; i++) {
-+ buf[0] = 0;
-+ SNPRINTF(buf, TBA, " ");
-+ for (j = 0; j < (QENTRY_LEN >> 2); j++) {
-+ SNPRINTF(buf, TBA, "%s %02x", buf, ptr[amt++] & 0xff);
-+ }
-+ isp_prt(isp, ISP_LOGALL, buf);
-+ }
-+}
-+
-+static INLINE void isp_print_bytes(struct ispsoftc *, char *, int, void *);
-+
-+static INLINE void
-+isp_print_bytes(struct ispsoftc *isp, char *msg, int amt, void *arg)
-+{
-+ char buf[128];
-+ u_int8_t *ptr = arg;
-+ int off;
-+
-+ if (msg)
-+ isp_prt(isp, ISP_LOGALL, "%s:", msg);
-+ off = 0;
-+ buf[0] = 0;
-+ while (off < amt) {
-+ int j, to;
-+ to = off;
-+ for (j = 0; j < 16; j++) {
-+ SNPRINTF(buf, 128, "%s %02x", buf, ptr[off++] & 0xff);
-+ if (off == amt)
-+ break;
-+ }
-+ isp_prt(isp, ISP_LOGALL, "0x%08x:%s", to, buf);
-+ buf[0] = 0;
-+ }
-+}
-+
-+/*
-+ * Do the common path to try and ensure that link is up, we've scanned
-+ * the fabric (if we're on a fabric), and that we've synchronized this
-+ * all with our own database and done the appropriate logins.
-+ *
-+ * We repeatedly check for firmware state and loop state after each
-+ * action because things may have changed while we were doing this.
-+ * Any failure or change of state causes us to return a nonzero value.
-+ *
-+ * We honor HBA roles in that if we're not in Initiator mode, we don't
-+ * attempt to sync up the database (that's for somebody else to do,
-+ * if ever).
-+ *
-+ * We assume we enter here with any locks held.
-+ */
-+
-+static INLINE int isp_fc_runstate(struct ispsoftc *, int);
-+
-+static INLINE int
-+isp_fc_runstate(struct ispsoftc *isp, int tval)
-+{
-+ fcparam *fcp;
-+ int *tptr;
-+
-+ if (IS_SCSI(isp))
-+ return (0);
-+
-+ tptr = tval? &tval : NULL;
-+ if (isp_control(isp, ISPCTL_FCLINK_TEST, tptr) != 0) {
-+ return (-1);
-+ }
-+ fcp = FCPARAM(isp);
-+ if (fcp->isp_fwstate != FW_READY || fcp->isp_loopstate < LOOP_PDB_RCVD)
-+ return (-1);
-+ if (isp_control(isp, ISPCTL_SCAN_FABRIC, NULL) != 0) {
-+ return (-1);
-+ }
-+ if (isp_control(isp, ISPCTL_SCAN_LOOP, NULL) != 0) {
-+ return (-1);
-+ }
-+ if ((isp->isp_role & ISP_ROLE_INITIATOR) == 0) {
-+ return (0);
-+ }
-+ if (isp_control(isp, ISPCTL_PDB_SYNC, NULL) != 0) {
-+ return (-1);
-+ }
-+ if (fcp->isp_fwstate != FW_READY || fcp->isp_loopstate != LOOP_READY) {
-+ return (-1);
-+ }
-+ return (0);
-+}
-+
-+/*
-+ * Functions to move stuff to a form that the QLogic RISC engine understands
-+ * and functions to move stuff back to a form the processor understands.
-+ *
-+ * Each platform is required to provide the 8, 16 and 32 bit
-+ * swizzle and unswizzle macros (ISP_IOX{PUT|GET}_{8,16,32})
-+ *
-+ * The assumption is that swizzling and unswizzling is mostly done 'in place'
-+ * (with a few exceptions for efficiency).
-+ */
-+
-+static INLINE void isp_copy_out_hdr(struct ispsoftc *, isphdr_t *, isphdr_t *);
-+static INLINE void isp_copy_in_hdr(struct ispsoftc *, isphdr_t *, isphdr_t *);
-+static INLINE int isp_get_response_type(struct ispsoftc *, isphdr_t *);
-+
-+static INLINE void
-+isp_put_request(struct ispsoftc *, ispreq_t *, ispreq_t *);
-+static INLINE void
-+isp_put_request_t2(struct ispsoftc *, ispreqt2_t *, ispreqt2_t *);
-+static INLINE void
-+isp_put_request_t3(struct ispsoftc *, ispreqt3_t *, ispreqt3_t *);
-+static INLINE void
-+isp_put_extended_request(struct ispsoftc *, ispextreq_t *, ispextreq_t *);
-+static INLINE void
-+isp_put_cont_req(struct ispsoftc *, ispcontreq_t *, ispcontreq_t *);
-+static INLINE void
-+isp_put_cont64_req(struct ispsoftc *, ispcontreq64_t *, ispcontreq64_t *);
-+static INLINE void
-+isp_get_response(struct ispsoftc *, ispstatusreq_t *, ispstatusreq_t *);
-+static INLINE void
-+isp_get_response_x(struct ispsoftc *, ispstatus_cont_t *, ispstatus_cont_t *);
-+static INLINE void
-+isp_get_rio2(struct ispsoftc *, isp_rio2_t *, isp_rio2_t *);
-+static INLINE void
-+isp_put_icb(struct ispsoftc *, isp_icb_t *, isp_icb_t *);
-+static INLINE void
-+isp_get_pdb(struct ispsoftc *, isp_pdb_t *, isp_pdb_t *);
-+static INLINE void
-+isp_get_ct_hdr(struct ispsoftc *isp, ct_hdr_t *, ct_hdr_t *);
-+static INLINE void
-+isp_put_sns_request(struct ispsoftc *, sns_screq_t *, sns_screq_t *);
-+static INLINE void
-+isp_put_gid_ft_request(struct ispsoftc *, sns_gid_ft_req_t *,
-+ sns_gid_ft_req_t *);
-+static INLINE void
-+isp_put_gxn_id_request(struct ispsoftc *, sns_gxn_id_req_t *,
-+ sns_gxn_id_req_t *);
-+static INLINE void
-+isp_get_sns_response(struct ispsoftc *, sns_scrsp_t *, sns_scrsp_t *, int);
-+static INLINE void
-+isp_get_gid_ft_response(struct ispsoftc *, sns_gid_ft_rsp_t *,
-+ sns_gid_ft_rsp_t *, int);
-+static INLINE void
-+isp_get_gxn_id_response(struct ispsoftc *, sns_gxn_id_rsp_t *,
-+ sns_gxn_id_rsp_t *);
-+static INLINE void
-+isp_get_gff_id_response(struct ispsoftc *, sns_gff_id_rsp_t *,
-+ sns_gff_id_rsp_t *);
-+static INLINE void
-+isp_get_ga_nxt_response(struct ispsoftc *, sns_ga_nxt_rsp_t *,
-+ sns_ga_nxt_rsp_t *);
-+#ifdef ISP_TARGET_MODE
-+#ifndef _ISP_TARGET_H
-+#include "isp_target.h"
-+#endif
-+static INLINE void
-+isp_put_atio(struct ispsoftc *, at_entry_t *, at_entry_t *);
-+static INLINE void
-+isp_get_atio(struct ispsoftc *, at_entry_t *, at_entry_t *);
-+static INLINE void
-+isp_put_atio2(struct ispsoftc *, at2_entry_t *, at2_entry_t *);
-+static INLINE void
-+isp_get_atio2(struct ispsoftc *, at2_entry_t *, at2_entry_t *);
-+static INLINE void
-+isp_put_ctio(struct ispsoftc *, ct_entry_t *, ct_entry_t *);
-+static INLINE void
-+isp_get_ctio(struct ispsoftc *, ct_entry_t *, ct_entry_t *);
-+static INLINE void
-+isp_put_ctio2(struct ispsoftc *, ct2_entry_t *, ct2_entry_t *);
-+static INLINE void
-+isp_get_ctio2(struct ispsoftc *, ct2_entry_t *, ct2_entry_t *);
-+static INLINE void
-+isp_put_enable_lun(struct ispsoftc *, lun_entry_t *, lun_entry_t *);
-+static INLINE void
-+isp_get_enable_lun(struct ispsoftc *, lun_entry_t *, lun_entry_t *);
-+static INLINE void
-+isp_put_notify(struct ispsoftc *, in_entry_t *, in_entry_t *);
-+static INLINE void
-+isp_get_notify(struct ispsoftc *, in_entry_t *, in_entry_t *);
-+static INLINE void
-+isp_put_notify_fc(struct ispsoftc *, in_fcentry_t *, in_fcentry_t *);
-+static INLINE void
-+isp_get_notify_fc(struct ispsoftc *, in_fcentry_t *, in_fcentry_t *);
-+static INLINE void
-+isp_put_notify_ack(struct ispsoftc *, na_entry_t *, na_entry_t *);
-+static INLINE void
-+isp_get_notify_ack(struct ispsoftc *, na_entry_t *, na_entry_t *);
-+static INLINE void
-+isp_put_notify_ack_fc(struct ispsoftc *, na_fcentry_t *, na_fcentry_t *);
-+static INLINE void
-+isp_get_notify_ack_fc(struct ispsoftc *, na_fcentry_t *, na_fcentry_t *);
-+#endif
-+
-+#define ISP_IS_SBUS(isp) \
-+ (ISP_SBUS_SUPPORTED && (isp)->isp_bustype == ISP_BT_SBUS)
-+
-+/*
-+ * Swizzle/Copy Functions
-+ */
-+static INLINE void
-+isp_copy_out_hdr(struct ispsoftc *isp, isphdr_t *hpsrc, isphdr_t *hpdst)
-+{
-+ if (ISP_IS_SBUS(isp)) {
-+ ISP_IOXPUT_8(isp, hpsrc->rqs_entry_type,
-+ &hpdst->rqs_entry_count);
-+ ISP_IOXPUT_8(isp, hpsrc->rqs_entry_count,
-+ &hpdst->rqs_entry_type);
-+ ISP_IOXPUT_8(isp, hpsrc->rqs_seqno,
-+ &hpdst->rqs_flags);
-+ ISP_IOXPUT_8(isp, hpsrc->rqs_flags,
-+ &hpdst->rqs_seqno);
-+ } else {
-+ ISP_IOXPUT_8(isp, hpsrc->rqs_entry_type,
-+ &hpdst->rqs_entry_type);
-+ ISP_IOXPUT_8(isp, hpsrc->rqs_entry_count,
-+ &hpdst->rqs_entry_count);
-+ ISP_IOXPUT_8(isp, hpsrc->rqs_seqno,
-+ &hpdst->rqs_seqno);
-+ ISP_IOXPUT_8(isp, hpsrc->rqs_flags,
-+ &hpdst->rqs_flags);
-+ }
-+}
-+
-+static INLINE void
-+isp_copy_in_hdr(struct ispsoftc *isp, isphdr_t *hpsrc, isphdr_t *hpdst)
-+{
-+ if (ISP_IS_SBUS(isp)) {
-+ ISP_IOXGET_8(isp, &hpsrc->rqs_entry_type,
-+ hpdst->rqs_entry_count);
-+ ISP_IOXGET_8(isp, &hpsrc->rqs_entry_count,
-+ hpdst->rqs_entry_type);
-+ ISP_IOXGET_8(isp, &hpsrc->rqs_seqno,
-+ hpdst->rqs_flags);
-+ ISP_IOXGET_8(isp, &hpsrc->rqs_flags,
-+ hpdst->rqs_seqno);
-+ } else {
-+ ISP_IOXGET_8(isp, &hpsrc->rqs_entry_type,
-+ hpdst->rqs_entry_type);
-+ ISP_IOXGET_8(isp, &hpsrc->rqs_entry_count,
-+ hpdst->rqs_entry_count);
-+ ISP_IOXGET_8(isp, &hpsrc->rqs_seqno,
-+ hpdst->rqs_seqno);
-+ ISP_IOXGET_8(isp, &hpsrc->rqs_flags,
-+ hpdst->rqs_flags);
-+ }
-+}
-+
-+static INLINE int
-+isp_get_response_type(struct ispsoftc *isp, isphdr_t *hp)
-+{
-+ u_int8_t type;
-+ if (ISP_IS_SBUS(isp)) {
-+ ISP_IOXGET_8(isp, &hp->rqs_entry_count, type);
-+ } else {
-+ ISP_IOXGET_8(isp, &hp->rqs_entry_type, type);
-+ }
-+ return ((int)type);
-+}
-+
-+static INLINE void
-+isp_put_request(struct ispsoftc *isp, ispreq_t *rqsrc, ispreq_t *rqdst)
-+{
-+ int i;
-+ isp_copy_out_hdr(isp, &rqsrc->req_header, &rqdst->req_header);
-+ ISP_IOXPUT_32(isp, rqsrc->req_handle, &rqdst->req_handle);
-+ if (ISP_IS_SBUS(isp)) {
-+ ISP_IOXPUT_8(isp, rqsrc->req_lun_trn, &rqdst->req_target);
-+ ISP_IOXPUT_8(isp, rqsrc->req_target, &rqdst->req_lun_trn);
-+ } else {
-+ ISP_IOXPUT_8(isp, rqsrc->req_lun_trn, &rqdst->req_lun_trn);
-+ ISP_IOXPUT_8(isp, rqsrc->req_target, &rqdst->req_target);
-+ }
-+ ISP_IOXPUT_16(isp, rqsrc->req_cdblen, &rqdst->req_cdblen);
-+ ISP_IOXPUT_16(isp, rqsrc->req_flags, &rqdst->req_flags);
-+ ISP_IOXPUT_16(isp, rqsrc->req_time, &rqdst->req_time);
-+ ISP_IOXPUT_16(isp, rqsrc->req_seg_count, &rqdst->req_seg_count);
-+ for (i = 0; i < 12; i++) {
-+ ISP_IOXPUT_8(isp, rqsrc->req_cdb[i], &rqdst->req_cdb[i]);
-+ }
-+ for (i = 0; i < ISP_RQDSEG; i++) {
-+ ISP_IOXPUT_32(isp, rqsrc->req_dataseg[i].ds_base,
-+ &rqdst->req_dataseg[i].ds_base);
-+ ISP_IOXPUT_32(isp, rqsrc->req_dataseg[i].ds_count,
-+ &rqdst->req_dataseg[i].ds_count);
-+ }
-+}
-+
-+static INLINE void
-+isp_put_request_t2(struct ispsoftc *isp, ispreqt2_t *tqsrc, ispreqt2_t *tqdst)
-+{
-+ int i;
-+ isp_copy_out_hdr(isp, &tqsrc->req_header, &tqdst->req_header);
-+ ISP_IOXPUT_32(isp, tqsrc->req_handle, &tqdst->req_handle);
-+ ISP_IOXPUT_8(isp, tqsrc->req_lun_trn, &tqdst->req_lun_trn);
-+ ISP_IOXPUT_8(isp, tqsrc->req_target, &tqdst->req_target);
-+ ISP_IOXPUT_16(isp, tqsrc->req_scclun, &tqdst->req_scclun);
-+ ISP_IOXPUT_16(isp, tqsrc->req_flags, &tqdst->req_flags);
-+ ISP_IOXPUT_16(isp, tqsrc->_res2, &tqdst->_res2);
-+ ISP_IOXPUT_16(isp, tqsrc->req_time, &tqdst->req_time);
-+ ISP_IOXPUT_16(isp, tqsrc->req_seg_count, &tqdst->req_seg_count);
-+ for (i = 0; i < 16; i++) {
-+ ISP_IOXPUT_8(isp, tqsrc->req_cdb[i], &tqdst->req_cdb[i]);
-+ }
-+ ISP_IOXPUT_32(isp, tqsrc->req_totalcnt, &tqdst->req_totalcnt);
-+ for (i = 0; i < ISP_RQDSEG_T2; i++) {
-+ ISP_IOXPUT_32(isp, tqsrc->req_dataseg[i].ds_base,
-+ &tqdst->req_dataseg[i].ds_base);
-+ ISP_IOXPUT_32(isp, tqsrc->req_dataseg[i].ds_count,
-+ &tqdst->req_dataseg[i].ds_count);
-+ }
-+}
-+
-+static INLINE void
-+isp_put_request_t3(struct ispsoftc *isp, ispreqt3_t *tqsrc, ispreqt3_t *tqdst)
-+{
-+ int i;
-+ isp_copy_out_hdr(isp, &tqsrc->req_header, &tqdst->req_header);
-+ ISP_IOXPUT_32(isp, tqsrc->req_handle, &tqdst->req_handle);
-+ ISP_IOXPUT_8(isp, tqsrc->req_lun_trn, &tqdst->req_lun_trn);
-+ ISP_IOXPUT_8(isp, tqsrc->req_target, &tqdst->req_target);
-+ ISP_IOXPUT_16(isp, tqsrc->req_scclun, &tqdst->req_scclun);
-+ ISP_IOXPUT_16(isp, tqsrc->req_flags, &tqdst->req_flags);
-+ ISP_IOXPUT_16(isp, tqsrc->_res2, &tqdst->_res2);
-+ ISP_IOXPUT_16(isp, tqsrc->req_time, &tqdst->req_time);
-+ ISP_IOXPUT_16(isp, tqsrc->req_seg_count, &tqdst->req_seg_count);
-+ for (i = 0; i < 16; i++) {
-+ ISP_IOXPUT_8(isp, tqsrc->req_cdb[i], &tqdst->req_cdb[i]);
-+ }
-+ ISP_IOXPUT_32(isp, tqsrc->req_totalcnt, &tqdst->req_totalcnt);
-+ for (i = 0; i < ISP_RQDSEG_T3; i++) {
-+ ISP_IOXPUT_32(isp, tqsrc->req_dataseg[i].ds_base,
-+ &tqdst->req_dataseg[i].ds_base);
-+ ISP_IOXPUT_32(isp, tqsrc->req_dataseg[i].ds_basehi,
-+ &tqdst->req_dataseg[i].ds_basehi);
-+ ISP_IOXPUT_32(isp, tqsrc->req_dataseg[i].ds_count,
-+ &tqdst->req_dataseg[i].ds_count);
-+ }
-+}
-+
-+static INLINE void
-+isp_put_extended_request(struct ispsoftc *isp, ispextreq_t *xqsrc,
-+ ispextreq_t *xqdst)
-+{
-+ int i;
-+ isp_copy_out_hdr(isp, &xqsrc->req_header, &xqdst->req_header);
-+ ISP_IOXPUT_32(isp, xqsrc->req_handle, &xqdst->req_handle);
-+ if (ISP_IS_SBUS(isp)) {
-+ ISP_IOXPUT_8(isp, xqsrc->req_lun_trn, &xqdst->req_target);
-+ ISP_IOXPUT_8(isp, xqsrc->req_target, &xqdst->req_lun_trn);
-+ } else {
-+ ISP_IOXPUT_8(isp, xqsrc->req_lun_trn, &xqdst->req_lun_trn);
-+ ISP_IOXPUT_8(isp, xqsrc->req_target, &xqdst->req_target);
-+ }
-+ ISP_IOXPUT_16(isp, xqsrc->req_cdblen, &xqdst->req_cdblen);
-+ ISP_IOXPUT_16(isp, xqsrc->req_flags, &xqdst->req_flags);
-+ ISP_IOXPUT_16(isp, xqsrc->req_time, &xqdst->req_time);
-+ ISP_IOXPUT_16(isp, xqsrc->req_seg_count, &xqdst->req_seg_count);
-+ for (i = 0; i < 44; i++) {
-+ ISP_IOXPUT_8(isp, xqsrc->req_cdb[i], &xqdst->req_cdb[i]);
-+ }
-+}
-+
-+static INLINE void
-+isp_put_cont_req(struct ispsoftc *isp, ispcontreq_t *cqsrc, ispcontreq_t *cqdst)
-+{
-+ int i;
-+ isp_copy_out_hdr(isp, &cqsrc->req_header, &cqdst->req_header);
-+ for (i = 0; i < ISP_CDSEG; i++) {
-+ ISP_IOXPUT_32(isp, cqsrc->req_dataseg[i].ds_base,
-+ &cqdst->req_dataseg[i].ds_base);
-+ ISP_IOXPUT_32(isp, cqsrc->req_dataseg[i].ds_count,
-+ &cqdst->req_dataseg[i].ds_count);
-+ }
-+}
-+
-+static INLINE void
-+isp_put_cont64_req(struct ispsoftc *isp, ispcontreq64_t *cqsrc,
-+ ispcontreq64_t *cqdst)
-+{
-+ int i;
-+ isp_copy_out_hdr(isp, &cqsrc->req_header, &cqdst->req_header);
-+ for (i = 0; i < ISP_CDSEG64; i++) {
-+ ISP_IOXPUT_32(isp, cqsrc->req_dataseg[i].ds_base,
-+ &cqdst->req_dataseg[i].ds_base);
-+ ISP_IOXPUT_32(isp, cqsrc->req_dataseg[i].ds_basehi,
-+ &cqdst->req_dataseg[i].ds_basehi);
-+ ISP_IOXPUT_32(isp, cqsrc->req_dataseg[i].ds_count,
-+ &cqdst->req_dataseg[i].ds_count);
-+ }
-+}
-+
-+static INLINE void
-+isp_get_response(struct ispsoftc *isp, ispstatusreq_t *spsrc,
-+ ispstatusreq_t *spdst)
-+{
-+ int i;
-+ isp_copy_in_hdr(isp, &spsrc->req_header, &spdst->req_header);
-+ ISP_IOXGET_32(isp, &spsrc->req_handle, spdst->req_handle);
-+ ISP_IOXGET_16(isp, &spsrc->req_scsi_status, spdst->req_scsi_status);
-+ ISP_IOXGET_16(isp, &spsrc->req_completion_status,
-+ spdst->req_completion_status);
-+ ISP_IOXGET_16(isp, &spsrc->req_state_flags, spdst->req_state_flags);
-+ ISP_IOXGET_16(isp, &spsrc->req_status_flags, spdst->req_status_flags);
-+ ISP_IOXGET_16(isp, &spsrc->req_time, spdst->req_time);
-+ ISP_IOXGET_16(isp, &spsrc->req_sense_len, spdst->req_sense_len);
-+ ISP_IOXGET_32(isp, &spsrc->req_resid, spdst->req_resid);
-+ for (i = 0; i < 8; i++) {
-+ ISP_IOXGET_8(isp, &spsrc->req_response[i],
-+ spdst->req_response[i]);
-+ }
-+ for (i = 0; i < 32; i++) {
-+ ISP_IOXGET_8(isp, &spsrc->req_sense_data[i],
-+ spdst->req_sense_data[i]);
-+ }
-+}
-+
-+static INLINE void
-+isp_get_response_x(struct ispsoftc *isp, ispstatus_cont_t *cpsrc,
-+ ispstatus_cont_t *cpdst)
-+{
-+ int i;
-+ isp_copy_in_hdr(isp, &cpsrc->req_header, &cpdst->req_header);
-+ for (i = 0; i < 60; i++) {
-+ ISP_IOXGET_8(isp, &cpsrc->req_sense_data[i],
-+ cpdst->req_sense_data[i]);
-+ }
-+}
-+
-+static INLINE void
-+isp_get_rio2(struct ispsoftc *isp, isp_rio2_t *r2src, isp_rio2_t *r2dst)
-+{
-+ int i;
-+ isp_copy_in_hdr(isp, &r2src->req_header, &r2dst->req_header);
-+ if (r2dst->req_header.rqs_seqno > 30)
-+ r2dst->req_header.rqs_seqno = 30;
-+ for (i = 0; i < r2dst->req_header.rqs_seqno; i++) {
-+ ISP_IOXGET_16(isp, &r2src->req_handles[i],
-+ r2dst->req_handles[i]);
-+ }
-+ while (i < 30) {
-+ r2dst->req_handles[i++] = 0;
-+ }
-+}
-+
-+static INLINE void
-+isp_put_icb(struct ispsoftc *isp, isp_icb_t *Is, isp_icb_t *Id)
-+{
-+ int i;
-+ ISP_SWAP8(Is->icb_version, Is->_reserved0);
-+ ISP_IOXPUT_8(isp, Is->icb_version, &Id->icb_version);
-+ ISP_IOXPUT_8(isp, Is->_reserved0, &Id->_reserved0);
-+ ISP_IOXPUT_16(isp, Is->icb_fwoptions, &Id->icb_fwoptions);
-+ ISP_IOXPUT_16(isp, Is->icb_maxfrmlen, &Id->icb_maxfrmlen);
-+ ISP_IOXPUT_16(isp, Is->icb_maxalloc, &Id->icb_maxalloc);
-+ ISP_IOXPUT_16(isp, Is->icb_execthrottle, &Id->icb_execthrottle);
-+ ISP_SWAP8(Is->icb_retry_count, Is->icb_retry_delay);
-+ ISP_IOXPUT_8(isp, Is->icb_retry_count, &Id->icb_retry_count);
-+ ISP_IOXPUT_8(isp, Is->icb_retry_delay, &Id->icb_retry_delay);
-+ for (i = 0; i < 8; i++) {
-+ ISP_IOXPUT_8(isp, Is->icb_portname[i], &Id->icb_portname[i]);
-+ }
-+ ISP_IOXPUT_16(isp, Is->icb_hardaddr, &Id->icb_hardaddr);
-+ ISP_SWAP8(Is->icb_iqdevtype, Is->icb_logintime);
-+ ISP_IOXPUT_8(isp, Is->icb_iqdevtype, &Id->icb_iqdevtype);
-+ ISP_IOXPUT_8(isp, Is->icb_logintime, &Id->icb_logintime);
-+ for (i = 0; i < 8; i++) {
-+ ISP_IOXPUT_8(isp, Is->icb_nodename[i], &Id->icb_nodename[i]);
-+ }
-+ ISP_IOXPUT_16(isp, Is->icb_rqstout, &Id->icb_rqstout);
-+ ISP_IOXPUT_16(isp, Is->icb_rspnsin, &Id->icb_rspnsin);
-+ ISP_IOXPUT_16(isp, Is->icb_rqstqlen, &Id->icb_rqstqlen);
-+ ISP_IOXPUT_16(isp, Is->icb_rsltqlen, &Id->icb_rsltqlen);
-+ for (i = 0; i < 4; i++) {
-+ ISP_IOXPUT_16(isp, Is->icb_rqstaddr[i], &Id->icb_rqstaddr[i]);
-+ }
-+ for (i = 0; i < 4; i++) {
-+ ISP_IOXPUT_16(isp, Is->icb_respaddr[i], &Id->icb_respaddr[i]);
-+ }
-+ ISP_IOXPUT_16(isp, Is->icb_lunenables, &Id->icb_lunenables);
-+ ISP_SWAP8(Is->icb_ccnt, Is->icb_icnt);
-+ ISP_IOXPUT_8(isp, Is->icb_ccnt, &Id->icb_ccnt);
-+ ISP_IOXPUT_8(isp, Is->icb_icnt, &Id->icb_icnt);
-+ ISP_IOXPUT_16(isp, Is->icb_lunetimeout, &Id->icb_lunetimeout);
-+ ISP_IOXPUT_16(isp, Is->icb_xfwoptions, &Id->icb_xfwoptions);
-+ ISP_SWAP8(Is->icb_racctimer, Is->icb_idelaytimer);
-+ ISP_IOXPUT_8(isp, Is->icb_racctimer, &Id->icb_racctimer);
-+ ISP_IOXPUT_8(isp, Is->icb_idelaytimer, &Id->icb_idelaytimer);
-+ ISP_IOXPUT_16(isp, Is->icb_zfwoptions, &Id->icb_zfwoptions);
-+}
-+
-+static INLINE void
-+isp_get_pdb(struct ispsoftc *isp, isp_pdb_t *src, isp_pdb_t *dst)
-+{
-+ int i;
-+ ISP_IOXGET_16(isp, &src->pdb_options, dst->pdb_options);
-+ ISP_IOXGET_8(isp, &src->pdb_mstate, dst->pdb_mstate);
-+ ISP_IOXGET_8(isp, &src->pdb_sstate, dst->pdb_sstate);
-+ for (i = 0; i < 4; i++) {
-+ ISP_IOXGET_8(isp, &src->pdb_hardaddr_bits[i],
-+ dst->pdb_hardaddr_bits[i]);
-+ }
-+ for (i = 0; i < 4; i++) {
-+ ISP_IOXGET_8(isp, &src->pdb_portid_bits[i],
-+ dst->pdb_portid_bits[i]);
-+ }
-+ for (i = 0; i < 8; i++) {
-+ ISP_IOXGET_8(isp, &src->pdb_nodename[i], dst->pdb_nodename[i]);
-+ }
-+ for (i = 0; i < 8; i++) {
-+ ISP_IOXGET_8(isp, &src->pdb_portname[i], dst->pdb_portname[i]);
-+ }
-+ ISP_IOXGET_16(isp, &src->pdb_execthrottle, dst->pdb_execthrottle);
-+ ISP_IOXGET_16(isp, &src->pdb_exec_count, dst->pdb_exec_count);
-+ ISP_IOXGET_8(isp, &src->pdb_retry_count, dst->pdb_retry_count);
-+ ISP_IOXGET_8(isp, &src->pdb_retry_delay, dst->pdb_retry_delay);
-+ ISP_IOXGET_16(isp, &src->pdb_resalloc, dst->pdb_resalloc);
-+ ISP_IOXGET_16(isp, &src->pdb_curalloc, dst->pdb_curalloc);
-+ ISP_IOXGET_16(isp, &src->pdb_qhead, dst->pdb_qhead);
-+ ISP_IOXGET_16(isp, &src->pdb_qtail, dst->pdb_qtail);
-+ ISP_IOXGET_16(isp, &src->pdb_tl_next, dst->pdb_tl_next);
-+ ISP_IOXGET_16(isp, &src->pdb_tl_last, dst->pdb_tl_last);
-+ ISP_IOXGET_16(isp, &src->pdb_features, dst->pdb_features);
-+ ISP_IOXGET_16(isp, &src->pdb_pconcurrnt, dst->pdb_pconcurrnt);
-+ ISP_IOXGET_16(isp, &src->pdb_roi, dst->pdb_roi);
-+ ISP_IOXGET_8(isp, &src->pdb_target, dst->pdb_target);
-+ ISP_IOXGET_8(isp, &src->pdb_initiator, dst->pdb_initiator);
-+ ISP_IOXGET_16(isp, &src->pdb_rdsiz, dst->pdb_rdsiz);
-+ ISP_IOXGET_16(isp, &src->pdb_ncseq, dst->pdb_ncseq);
-+ ISP_IOXGET_16(isp, &src->pdb_noseq, dst->pdb_noseq);
-+ ISP_IOXGET_16(isp, &src->pdb_labrtflg, dst->pdb_labrtflg);
-+ ISP_IOXGET_16(isp, &src->pdb_lstopflg, dst->pdb_lstopflg);
-+ ISP_IOXGET_16(isp, &src->pdb_sqhead, dst->pdb_sqhead);
-+ ISP_IOXGET_16(isp, &src->pdb_sqtail, dst->pdb_sqtail);
-+ ISP_IOXGET_16(isp, &src->pdb_ptimer, dst->pdb_ptimer);
-+ ISP_IOXGET_16(isp, &src->pdb_nxt_seqid, dst->pdb_nxt_seqid);
-+ ISP_IOXGET_16(isp, &src->pdb_fcount, dst->pdb_fcount);
-+ ISP_IOXGET_16(isp, &src->pdb_prli_len, dst->pdb_prli_len);
-+ ISP_IOXGET_16(isp, &src->pdb_prli_svc0, dst->pdb_prli_svc0);
-+ ISP_IOXGET_16(isp, &src->pdb_prli_svc3, dst->pdb_prli_svc3);
-+ ISP_IOXGET_16(isp, &src->pdb_loopid, dst->pdb_loopid);
-+ ISP_IOXGET_16(isp, &src->pdb_il_ptr, dst->pdb_il_ptr);
-+ ISP_IOXGET_16(isp, &src->pdb_sl_ptr, dst->pdb_sl_ptr);
-+}
-+
-+
-+/*
-+ * CT_HDR canonicalization- only needed for SNS responses
-+ */
-+static INLINE void
-+isp_get_ct_hdr(struct ispsoftc *isp, ct_hdr_t *src, ct_hdr_t *dst)
-+{
-+ ISP_IOXGET_8(isp, &src->ct_revision, dst->ct_revision);
-+ ISP_IOXGET_8(isp, &src->ct_portid[0], dst->ct_portid[0]);
-+ ISP_IOXGET_8(isp, &src->ct_portid[1], dst->ct_portid[1]);
-+ ISP_IOXGET_8(isp, &src->ct_portid[2], dst->ct_portid[2]);
-+ ISP_IOXGET_8(isp, &src->ct_fcs_type, dst->ct_fcs_type);
-+ ISP_IOXGET_8(isp, &src->ct_fcs_subtype, dst->ct_fcs_subtype);
-+ ISP_IOXGET_8(isp, &src->ct_options, dst->ct_options);
-+ ISP_IOXGET_8(isp, &src->ct_res0, dst->ct_res0);
-+ ISP_IOXGET_16(isp, &src->ct_response, dst->ct_response);
-+ dst->ct_response = (dst->ct_response << 8) | (dst->ct_response >> 8);
-+ ISP_IOXGET_16(isp, &src->ct_resid, dst->ct_resid);
-+ dst->ct_resid = (dst->ct_resid << 8) | (dst->ct_resid >> 8);
-+ ISP_IOXGET_8(isp, &src->ct_res1, dst->ct_res1);
-+ ISP_IOXGET_8(isp, &src->ct_reason, dst->ct_reason);
-+ ISP_IOXGET_8(isp, &src->ct_explanation, dst->ct_explanation);
-+ ISP_IOXGET_8(isp, &src->ct_vunique, dst->ct_vunique);
-+}
-+
-+/*
-+ * Generic SNS request - not particularly useful since the per-command data
-+ * isn't always 16 bit words.
-+ */
-+static INLINE void
-+isp_put_sns_request(struct ispsoftc *isp, sns_screq_t *src, sns_screq_t *dst)
-+{
-+ int i, nw = (int) src->snscb_sblen;
-+ ISP_IOXPUT_16(isp, src->snscb_rblen, &dst->snscb_rblen);
-+ for (i = 0; i < 4; i++) {
-+ ISP_IOXPUT_16(isp, src->snscb_addr[i], &dst->snscb_addr[i]);
-+ }
-+ ISP_IOXPUT_16(isp, src->snscb_sblen, &dst->snscb_sblen);
-+ for (i = 0; i < nw; i++) {
-+ ISP_IOXPUT_16(isp, src->snscb_data[i], &dst->snscb_data[i]);
-+ }
-+
-+}
-+
-+static INLINE void
-+isp_put_gid_ft_request(struct ispsoftc *isp, sns_gid_ft_req_t *src,
-+ sns_gid_ft_req_t *dst)
-+{
-+ ISP_IOXPUT_16(isp, src->snscb_rblen, &dst->snscb_rblen);
-+ ISP_IOXPUT_16(isp, src->snscb_res0, &dst->snscb_res0);
-+ ISP_IOXPUT_16(isp, src->snscb_addr[0], &dst->snscb_addr[0]);
-+ ISP_IOXPUT_16(isp, src->snscb_addr[1], &dst->snscb_addr[1]);
-+ ISP_IOXPUT_16(isp, src->snscb_addr[2], &dst->snscb_addr[2]);
-+ ISP_IOXPUT_16(isp, src->snscb_addr[3], &dst->snscb_addr[3]);
-+ ISP_IOXPUT_16(isp, src->snscb_sblen, &dst->snscb_sblen);
-+ ISP_IOXPUT_16(isp, src->snscb_res1, &dst->snscb_res1);
-+ ISP_IOXPUT_16(isp, src->snscb_cmd, &dst->snscb_cmd);
-+ ISP_IOXPUT_16(isp, src->snscb_mword_div_2, &dst->snscb_mword_div_2);
-+ ISP_IOXPUT_32(isp, src->snscb_res3, &dst->snscb_res3);
-+ ISP_IOXPUT_32(isp, src->snscb_fc4_type, &dst->snscb_fc4_type);
-+}
-+
-+static INLINE void
-+isp_put_gxn_id_request(struct ispsoftc *isp, sns_gxn_id_req_t *src,
-+ sns_gxn_id_req_t *dst)
-+{
-+ ISP_IOXPUT_16(isp, src->snscb_rblen, &dst->snscb_rblen);
-+ ISP_IOXPUT_16(isp, src->snscb_res0, &dst->snscb_res0);
-+ ISP_IOXPUT_16(isp, src->snscb_addr[0], &dst->snscb_addr[0]);
-+ ISP_IOXPUT_16(isp, src->snscb_addr[1], &dst->snscb_addr[1]);
-+ ISP_IOXPUT_16(isp, src->snscb_addr[2], &dst->snscb_addr[2]);
-+ ISP_IOXPUT_16(isp, src->snscb_addr[3], &dst->snscb_addr[3]);
-+ ISP_IOXPUT_16(isp, src->snscb_sblen, &dst->snscb_sblen);
-+ ISP_IOXPUT_16(isp, src->snscb_res1, &dst->snscb_res1);
-+ ISP_IOXPUT_16(isp, src->snscb_cmd, &dst->snscb_cmd);
-+ ISP_IOXPUT_16(isp, src->snscb_res2, &dst->snscb_res2);
-+ ISP_IOXPUT_32(isp, src->snscb_res3, &dst->snscb_res3);
-+ ISP_IOXPUT_32(isp, src->snscb_portid, &dst->snscb_portid);
-+}
-+
-+/*
-+ * Generic SNS response - not particularly useful since the per-command data
-+ * isn't always 16 bit words.
-+ */
-+static INLINE void
-+isp_get_sns_response(struct ispsoftc *isp, sns_scrsp_t *src,
-+ sns_scrsp_t *dst, int nwords)
-+{
-+ int i;
-+ isp_get_ct_hdr(isp, &src->snscb_cthdr, &dst->snscb_cthdr);
-+ ISP_IOXGET_8(isp, &src->snscb_port_type, dst->snscb_port_type);
-+ for (i = 0; i < 3; i++) {
-+ ISP_IOXGET_8(isp, &src->snscb_port_id[i],
-+ dst->snscb_port_id[i]);
-+ }
-+ for (i = 0; i < 8; i++) {
-+ ISP_IOXGET_8(isp, &src->snscb_portname[i],
-+ dst->snscb_portname[i]);
-+ }
-+ for (i = 0; i < nwords; i++) {
-+ ISP_IOXGET_16(isp, &src->snscb_data[i], dst->snscb_data[i]);
-+ }
-+}
-+
-+static INLINE void
-+isp_get_gid_ft_response(struct ispsoftc *isp, sns_gid_ft_rsp_t *src,
-+ sns_gid_ft_rsp_t *dst, int nwords)
-+{
-+ int i;
-+ isp_get_ct_hdr(isp, &src->snscb_cthdr, &dst->snscb_cthdr);
-+ for (i = 0; i < nwords; i++) {
-+ int j;
-+ ISP_IOXGET_8(isp,
-+ &src->snscb_ports[i].control,
-+ dst->snscb_ports[i].control);
-+ for (j = 0; j < 3; j++) {
-+ ISP_IOXGET_8(isp,
-+ &src->snscb_ports[i].portid[j],
-+ dst->snscb_ports[i].portid[j]);
-+ }
-+ if (dst->snscb_ports[i].control & 0x80) {
-+ break;
-+ }
-+ }
-+}
-+
-+static INLINE void
-+isp_get_gxn_id_response(struct ispsoftc *isp, sns_gxn_id_rsp_t *src,
-+ sns_gxn_id_rsp_t *dst)
-+{
-+ int i;
-+ isp_get_ct_hdr(isp, &src->snscb_cthdr, &dst->snscb_cthdr);
-+ for (i = 0; i < 8; i++)
-+ ISP_IOXGET_8(isp, &src->snscb_wwn[i], dst->snscb_wwn[i]);
-+}
-+
-+static INLINE void
-+isp_get_gff_id_response(struct ispsoftc *isp, sns_gff_id_rsp_t *src,
-+ sns_gff_id_rsp_t *dst)
-+{
-+ int i;
-+ isp_get_ct_hdr(isp, &src->snscb_cthdr, &dst->snscb_cthdr);
-+ for (i = 0; i < 32; i++) {
-+ ISP_IOXGET_32(isp, &src->snscb_fc4_features[i],
-+ dst->snscb_fc4_features[i]);
-+ }
-+}
-+
-+static INLINE void
-+isp_get_ga_nxt_response(struct ispsoftc *isp, sns_ga_nxt_rsp_t *src,
-+ sns_ga_nxt_rsp_t *dst)
-+{
-+ int i;
-+ isp_get_ct_hdr(isp, &src->snscb_cthdr, &dst->snscb_cthdr);
-+ ISP_IOXGET_8(isp, &src->snscb_port_type, dst->snscb_port_type);
-+ for (i = 0; i < 3; i++) {
-+ ISP_IOXGET_8(isp, &src->snscb_port_id[i],
-+ dst->snscb_port_id[i]);
-+ }
-+ for (i = 0; i < 8; i++) {
-+ ISP_IOXGET_8(isp, &src->snscb_portname[i],
-+ dst->snscb_portname[i]);
-+ }
-+ ISP_IOXGET_8(isp, &src->snscb_pnlen, dst->snscb_pnlen);
-+ for (i = 0; i < 255; i++) {
-+ ISP_IOXGET_8(isp, &src->snscb_pname[i], dst->snscb_pname[i]);
-+ }
-+ for (i = 0; i < 8; i++) {
-+ ISP_IOXGET_8(isp, &src->snscb_nodename[i],
-+ dst->snscb_nodename[i]);
-+ }
-+ ISP_IOXGET_8(isp, &src->snscb_nnlen, dst->snscb_nnlen);
-+ for (i = 0; i < 255; i++) {
-+ ISP_IOXGET_8(isp, &src->snscb_nname[i], dst->snscb_nname[i]);
-+ }
-+ for (i = 0; i < 8; i++) {
-+ ISP_IOXGET_8(isp, &src->snscb_ipassoc[i],
-+ dst->snscb_ipassoc[i]);
-+ }
-+ for (i = 0; i < 16; i++) {
-+ ISP_IOXGET_8(isp, &src->snscb_ipaddr[i], dst->snscb_ipaddr[i]);
-+ }
-+ for (i = 0; i < 4; i++) {
-+ ISP_IOXGET_8(isp, &src->snscb_svc_class[i],
-+ dst->snscb_svc_class[i]);
-+ }
-+ for (i = 0; i < 32; i++) {
-+ ISP_IOXGET_8(isp, &src->snscb_fc4_types[i],
-+ dst->snscb_fc4_types[i]);
-+ }
-+ for (i = 0; i < 8; i++) {
-+ ISP_IOXGET_8(isp, &src->snscb_fpname[i], dst->snscb_fpname[i]);
-+ }
-+ ISP_IOXGET_8(isp, &src->snscb_reserved, dst->snscb_reserved);
-+ for (i = 0; i < 3; i++) {
-+ ISP_IOXGET_8(isp, &src->snscb_hardaddr[i],
-+ dst->snscb_hardaddr[i]);
-+ }
-+}
-+
-+#ifdef ISP_TARGET_MODE
-+static INLINE void
-+isp_put_atio(struct ispsoftc *isp, at_entry_t *atsrc, at_entry_t *atdst)
-+{
-+ int i;
-+ isp_copy_out_hdr(isp, &atsrc->at_header, &atdst->at_header);
-+ ISP_IOXPUT_16(isp, atsrc->at_reserved, &atdst->at_reserved);
-+ ISP_IOXPUT_16(isp, atsrc->at_handle, &atdst->at_handle);
-+ if (ISP_IS_SBUS(isp)) {
-+ ISP_IOXPUT_8(isp, atsrc->at_lun, &atdst->at_iid);
-+ ISP_IOXPUT_8(isp, atsrc->at_iid, &atdst->at_lun);
-+ ISP_IOXPUT_8(isp, atsrc->at_cdblen, &atdst->at_tgt);
-+ ISP_IOXPUT_8(isp, atsrc->at_tgt, &atdst->at_cdblen);
-+ ISP_IOXPUT_8(isp, atsrc->at_status, &atdst->at_scsi_status);
-+ ISP_IOXPUT_8(isp, atsrc->at_scsi_status, &atdst->at_status);
-+ ISP_IOXPUT_8(isp, atsrc->at_tag_val, &atdst->at_tag_type);
-+ ISP_IOXPUT_8(isp, atsrc->at_tag_type, &atdst->at_tag_val);
-+ } else {
-+ ISP_IOXPUT_8(isp, atsrc->at_lun, &atdst->at_lun);
-+ ISP_IOXPUT_8(isp, atsrc->at_iid, &atdst->at_iid);
-+ ISP_IOXPUT_8(isp, atsrc->at_cdblen, &atdst->at_cdblen);
-+ ISP_IOXPUT_8(isp, atsrc->at_tgt, &atdst->at_tgt);
-+ ISP_IOXPUT_8(isp, atsrc->at_status, &atdst->at_status);
-+ ISP_IOXPUT_8(isp, atsrc->at_scsi_status,
-+ &atdst->at_scsi_status);
-+ ISP_IOXPUT_8(isp, atsrc->at_tag_val, &atdst->at_tag_val);
-+ ISP_IOXPUT_8(isp, atsrc->at_tag_type, &atdst->at_tag_type);
-+ }
-+ ISP_IOXPUT_32(isp, atsrc->at_flags, &atdst->at_flags);
-+ for (i = 0; i < ATIO_CDBLEN; i++) {
-+ ISP_IOXPUT_8(isp, atsrc->at_cdb[i], &atdst->at_cdb[i]);
-+ }
-+ for (i = 0; i < QLTM_SENSELEN; i++) {
-+ ISP_IOXPUT_8(isp, atsrc->at_sense[i], &atdst->at_sense[i]);
-+ }
-+}
-+
-+static INLINE void
-+isp_get_atio(struct ispsoftc *isp, at_entry_t *atsrc, at_entry_t *atdst)
-+{
-+ int i;
-+ isp_copy_in_hdr(isp, &atsrc->at_header, &atdst->at_header);
-+ ISP_IOXGET_16(isp, &atsrc->at_reserved, atdst->at_reserved);
-+ ISP_IOXGET_16(isp, &atsrc->at_handle, atdst->at_handle);
-+ if (ISP_IS_SBUS(isp)) {
-+ ISP_IOXGET_8(isp, &atsrc->at_lun, atdst->at_iid);
-+ ISP_IOXGET_8(isp, &atsrc->at_iid, atdst->at_lun);
-+ ISP_IOXGET_8(isp, &atsrc->at_cdblen, atdst->at_tgt);
-+ ISP_IOXGET_8(isp, &atsrc->at_tgt, atdst->at_cdblen);
-+ ISP_IOXGET_8(isp, &atsrc->at_status, atdst->at_scsi_status);
-+ ISP_IOXGET_8(isp, &atsrc->at_scsi_status, atdst->at_status);
-+ ISP_IOXGET_8(isp, &atsrc->at_tag_val, atdst->at_tag_type);
-+ ISP_IOXGET_8(isp, &atsrc->at_tag_type, atdst->at_tag_val);
-+ } else {
-+ ISP_IOXGET_8(isp, &atsrc->at_lun, atdst->at_lun);
-+ ISP_IOXGET_8(isp, &atsrc->at_iid, atdst->at_iid);
-+ ISP_IOXGET_8(isp, &atsrc->at_cdblen, atdst->at_cdblen);
-+ ISP_IOXGET_8(isp, &atsrc->at_tgt, atdst->at_tgt);
-+ ISP_IOXGET_8(isp, &atsrc->at_status, atdst->at_status);
-+ ISP_IOXGET_8(isp, &atsrc->at_scsi_status,
-+ atdst->at_scsi_status);
-+ ISP_IOXGET_8(isp, &atsrc->at_tag_val, atdst->at_tag_val);
-+ ISP_IOXGET_8(isp, &atsrc->at_tag_type, atdst->at_tag_type);
-+ }
-+ ISP_IOXGET_32(isp, &atsrc->at_flags, atdst->at_flags);
-+ for (i = 0; i < ATIO_CDBLEN; i++) {
-+ ISP_IOXGET_8(isp, &atsrc->at_cdb[i], atdst->at_cdb[i]);
-+ }
-+ for (i = 0; i < QLTM_SENSELEN; i++) {
-+ ISP_IOXGET_8(isp, &atsrc->at_sense[i], atdst->at_sense[i]);
-+ }
-+}
-+
-+static INLINE void
-+isp_put_atio2(struct ispsoftc *isp, at2_entry_t *atsrc, at2_entry_t *atdst)
-+{
-+ int i;
-+ isp_copy_out_hdr(isp, &atsrc->at_header, &atdst->at_header);
-+ ISP_IOXPUT_32(isp, atsrc->at_reserved, &atdst->at_reserved);
-+ ISP_IOXPUT_8(isp, atsrc->at_lun, &atdst->at_lun);
-+ ISP_IOXPUT_8(isp, atsrc->at_iid, &atdst->at_iid);
-+ ISP_IOXPUT_16(isp, atsrc->at_rxid, &atdst->at_rxid);
-+ ISP_IOXPUT_16(isp, atsrc->at_flags, &atdst->at_flags);
-+ ISP_IOXPUT_16(isp, atsrc->at_status, &atdst->at_status);
-+ ISP_IOXPUT_8(isp, atsrc->at_crn, &atdst->at_crn);
-+ ISP_IOXPUT_8(isp, atsrc->at_taskcodes, &atdst->at_taskcodes);
-+ ISP_IOXPUT_8(isp, atsrc->at_taskflags, &atdst->at_taskflags);
-+ ISP_IOXPUT_8(isp, atsrc->at_execodes, &atdst->at_execodes);
-+ for (i = 0; i < ATIO2_CDBLEN; i++) {
-+ ISP_IOXPUT_8(isp, atsrc->at_cdb[i], &atdst->at_cdb[i]);
-+ }
-+ ISP_IOXPUT_32(isp, atsrc->at_datalen, &atdst->at_datalen);
-+ ISP_IOXPUT_16(isp, atsrc->at_scclun, &atdst->at_scclun);
-+ for (i = 0; i < 4; i++) {
-+ ISP_IOXPUT_16(isp, atsrc->at_wwpn[i], &atdst->at_wwpn[i]);
-+ }
-+ for (i = 0; i < 6; i++) {
-+ ISP_IOXPUT_16(isp, atsrc->at_reserved2[i],
-+ &atdst->at_reserved2[i]);
-+ }
-+ ISP_IOXPUT_16(isp, atsrc->at_oxid, &atdst->at_oxid);
-+}
-+
-+static INLINE void
-+isp_get_atio2(struct ispsoftc *isp, at2_entry_t *atsrc, at2_entry_t *atdst)
-+{
-+ int i;
-+ isp_copy_in_hdr(isp, &atsrc->at_header, &atdst->at_header);
-+ ISP_IOXGET_32(isp, &atsrc->at_reserved, atdst->at_reserved);
-+ ISP_IOXGET_8(isp, &atsrc->at_lun, atdst->at_lun);
-+ ISP_IOXGET_8(isp, &atsrc->at_iid, atdst->at_iid);
-+ ISP_IOXGET_16(isp, &atsrc->at_rxid, atdst->at_rxid);
-+ ISP_IOXGET_16(isp, &atsrc->at_flags, atdst->at_flags);
-+ ISP_IOXGET_16(isp, &atsrc->at_status, atdst->at_status);
-+ ISP_IOXGET_8(isp, &atsrc->at_crn, atdst->at_crn);
-+ ISP_IOXGET_8(isp, &atsrc->at_taskcodes, atdst->at_taskcodes);
-+ ISP_IOXGET_8(isp, &atsrc->at_taskflags, atdst->at_taskflags);
-+ ISP_IOXGET_8(isp, &atsrc->at_execodes, atdst->at_execodes);
-+ for (i = 0; i < ATIO2_CDBLEN; i++) {
-+ ISP_IOXGET_8(isp, &atsrc->at_cdb[i], atdst->at_cdb[i]);
-+ }
-+ ISP_IOXGET_32(isp, &atsrc->at_datalen, atdst->at_datalen);
-+ ISP_IOXGET_16(isp, &atsrc->at_scclun, atdst->at_scclun);
-+ for (i = 0; i < 4; i++) {
-+ ISP_IOXGET_16(isp, &atsrc->at_wwpn[i], atdst->at_wwpn[i]);
-+ }
-+ for (i = 0; i < 6; i++) {
-+ ISP_IOXGET_16(isp, &atsrc->at_reserved2[i],
-+ atdst->at_reserved2[i]);
-+ }
-+ ISP_IOXGET_16(isp, &atsrc->at_oxid, atdst->at_oxid);
-+}
-+
-+static INLINE void
-+isp_put_ctio(struct ispsoftc *isp, ct_entry_t *ctsrc, ct_entry_t *ctdst)
-+{
-+ int i;
-+ isp_copy_out_hdr(isp, &ctsrc->ct_header, &ctdst->ct_header);
-+ ISP_IOXPUT_16(isp, ctsrc->ct_reserved, &ctdst->ct_reserved);
-+ ISP_IOXPUT_16(isp, ctsrc->ct_fwhandle, &ctdst->ct_fwhandle);
-+ if (ISP_IS_SBUS(isp)) {
-+ ISP_IOXPUT_8(isp, ctsrc->ct_iid, &ctdst->ct_lun);
-+ ISP_IOXPUT_8(isp, ctsrc->ct_lun, &ctdst->ct_iid);
-+ ISP_IOXPUT_8(isp, ctsrc->ct_tgt, &ctdst->ct_reserved2);
-+ ISP_IOXPUT_8(isp, ctsrc->ct_reserved2, &ctdst->ct_tgt);
-+ ISP_IOXPUT_8(isp, ctsrc->ct_status, &ctdst->ct_scsi_status);
-+ ISP_IOXPUT_8(isp, ctsrc->ct_scsi_status, &ctdst->ct_status);
-+ ISP_IOXPUT_8(isp, ctsrc->ct_tag_type, &ctdst->ct_tag_val);
-+ ISP_IOXPUT_8(isp, ctsrc->ct_tag_val, &ctdst->ct_tag_type);
-+ } else {
-+ ISP_IOXPUT_8(isp, ctsrc->ct_iid, &ctdst->ct_iid);
-+ ISP_IOXPUT_8(isp, ctsrc->ct_lun, &ctdst->ct_lun);
-+ ISP_IOXPUT_8(isp, ctsrc->ct_tgt, &ctdst->ct_tgt);
-+ ISP_IOXPUT_8(isp, ctsrc->ct_reserved2, &ctdst->ct_reserved2);
-+ ISP_IOXPUT_8(isp, ctsrc->ct_scsi_status,
-+ &ctdst->ct_scsi_status);
-+ ISP_IOXPUT_8(isp, ctsrc->ct_status, &ctdst->ct_status);
-+ ISP_IOXPUT_8(isp, ctsrc->ct_tag_type, &ctdst->ct_tag_type);
-+ ISP_IOXPUT_8(isp, ctsrc->ct_tag_val, &ctdst->ct_tag_val);
-+ }
-+ ISP_IOXPUT_32(isp, ctsrc->ct_flags, &ctdst->ct_flags);
-+ ISP_IOXPUT_32(isp, ctsrc->ct_xfrlen, &ctdst->ct_xfrlen);
-+ ISP_IOXPUT_32(isp, ctsrc->ct_resid, &ctdst->ct_resid);
-+ ISP_IOXPUT_16(isp, ctsrc->ct_timeout, &ctdst->ct_timeout);
-+ ISP_IOXPUT_16(isp, ctsrc->ct_seg_count, &ctdst->ct_seg_count);
-+ for (i = 0; i < ISP_RQDSEG; i++) {
-+ ISP_IOXPUT_32(isp, ctsrc->ct_dataseg[i].ds_base,
-+ &ctdst->ct_dataseg[i].ds_base);
-+ ISP_IOXPUT_32(isp, ctsrc->ct_dataseg[i].ds_count,
-+ &ctdst->ct_dataseg[i].ds_count);
-+ }
-+}
-+
-+static INLINE void
-+isp_get_ctio(struct ispsoftc *isp, ct_entry_t *ctsrc, ct_entry_t *ctdst)
-+{
-+ int i;
-+ isp_copy_in_hdr(isp, &ctsrc->ct_header, &ctdst->ct_header);
-+ ISP_IOXGET_16(isp, &ctsrc->ct_reserved, ctdst->ct_reserved);
-+ ISP_IOXGET_16(isp, &ctsrc->ct_fwhandle, ctdst->ct_fwhandle);
-+ if (ISP_IS_SBUS(isp)) {
-+ ISP_IOXGET_8(isp, &ctsrc->ct_lun, ctdst->ct_iid);
-+ ISP_IOXGET_8(isp, &ctsrc->ct_iid, ctdst->ct_lun);
-+ ISP_IOXGET_8(isp, &ctsrc->ct_reserved2, ctdst->ct_tgt);
-+ ISP_IOXGET_8(isp, &ctsrc->ct_tgt, ctdst->ct_reserved2);
-+ ISP_IOXGET_8(isp, &ctsrc->ct_status, ctdst->ct_scsi_status);
-+ ISP_IOXGET_8(isp, &ctsrc->ct_scsi_status, ctdst->ct_status);
-+ ISP_IOXGET_8(isp, &ctsrc->ct_tag_val, ctdst->ct_tag_type);
-+ ISP_IOXGET_8(isp, &ctsrc->ct_tag_type, ctdst->ct_tag_val);
-+ } else {
-+ ISP_IOXGET_8(isp, &ctsrc->ct_lun, ctdst->ct_lun);
-+ ISP_IOXGET_8(isp, &ctsrc->ct_iid, ctdst->ct_iid);
-+ ISP_IOXGET_8(isp, &ctsrc->ct_reserved2, ctdst->ct_reserved2);
-+ ISP_IOXGET_8(isp, &ctsrc->ct_tgt, ctdst->ct_tgt);
-+ ISP_IOXGET_8(isp, &ctsrc->ct_status, ctdst->ct_status);
-+ ISP_IOXGET_8(isp, &ctsrc->ct_scsi_status,
-+ ctdst->ct_scsi_status);
-+ ISP_IOXGET_8(isp, &ctsrc->ct_tag_val, ctdst->ct_tag_val);
-+ ISP_IOXGET_8(isp, &ctsrc->ct_tag_type, ctdst->ct_tag_type);
-+ }
-+ ISP_IOXGET_32(isp, &ctsrc->ct_flags, ctdst->ct_flags);
-+ ISP_IOXGET_32(isp, &ctsrc->ct_xfrlen, ctdst->ct_xfrlen);
-+ ISP_IOXGET_32(isp, &ctsrc->ct_resid, ctdst->ct_resid);
-+ ISP_IOXGET_16(isp, &ctsrc->ct_timeout, ctdst->ct_timeout);
-+ ISP_IOXGET_16(isp, &ctsrc->ct_seg_count, ctdst->ct_seg_count);
-+ for (i = 0; i < ISP_RQDSEG; i++) {
-+ ISP_IOXGET_32(isp,
-+ &ctsrc->ct_dataseg[i].ds_base,
-+ ctdst->ct_dataseg[i].ds_base);
-+ ISP_IOXGET_32(isp,
-+ &ctsrc->ct_dataseg[i].ds_count,
-+ ctdst->ct_dataseg[i].ds_count);
-+ }
-+}
-+
-+static INLINE void
-+isp_put_ctio2(struct ispsoftc *isp, ct2_entry_t *ctsrc, ct2_entry_t *ctdst)
-+{
-+ int i;
-+ isp_copy_out_hdr(isp, &ctsrc->ct_header, &ctdst->ct_header);
-+ ISP_IOXPUT_16(isp, ctsrc->ct_reserved, &ctdst->ct_reserved);
-+ ISP_IOXPUT_16(isp, ctsrc->ct_fwhandle, &ctdst->ct_fwhandle);
-+ ISP_IOXPUT_8(isp, ctsrc->ct_lun, &ctdst->ct_lun);
-+ ISP_IOXPUT_8(isp, ctsrc->ct_iid, &ctdst->ct_iid);
-+ ISP_IOXPUT_16(isp, ctsrc->ct_rxid, &ctdst->ct_rxid);
-+ ISP_IOXPUT_16(isp, ctsrc->ct_flags, &ctdst->ct_flags);
-+ ISP_IOXPUT_16(isp, ctsrc->ct_timeout, &ctdst->ct_timeout);
-+ ISP_IOXPUT_16(isp, ctsrc->ct_seg_count, &ctdst->ct_seg_count);
-+ ISP_IOXPUT_32(isp, ctsrc->ct_resid, &ctdst->ct_resid);
-+ ISP_IOXPUT_32(isp, ctsrc->ct_reloff, &ctdst->ct_reloff);
-+ if ((ctsrc->ct_flags & CT2_FLAG_MMASK) == CT2_FLAG_MODE0) {
-+ ISP_IOXPUT_32(isp, ctsrc->rsp.m0._reserved,
-+ &ctdst->rsp.m0._reserved);
-+ ISP_IOXPUT_16(isp, ctsrc->rsp.m0._reserved2,
-+ &ctdst->rsp.m0._reserved2);
-+ ISP_IOXPUT_16(isp, ctsrc->rsp.m0.ct_scsi_status,
-+ &ctdst->rsp.m0.ct_scsi_status);
-+ ISP_IOXPUT_32(isp, ctsrc->rsp.m0.ct_xfrlen,
-+ &ctdst->rsp.m0.ct_xfrlen);
-+ if (ctsrc->ct_header.rqs_entry_type == RQSTYPE_CTIO2) {
-+ for (i = 0; i < ISP_RQDSEG_T2; i++) {
-+ ISP_IOXPUT_32(isp,
-+ ctsrc->rsp.m0.ct_dataseg[i].ds_base,
-+ &ctdst->rsp.m0.ct_dataseg[i].ds_base);
-+ ISP_IOXPUT_32(isp,
-+ ctsrc->rsp.m0.ct_dataseg[i].ds_count,
-+ &ctdst->rsp.m0.ct_dataseg[i].ds_count);
-+ }
-+ } else if (ctsrc->ct_header.rqs_entry_type == RQSTYPE_CTIO3) {
-+ for (i = 0; i < ISP_RQDSEG_T3; i++) {
-+ ISP_IOXPUT_32(isp,
-+ ctsrc->rsp.m0.ct_dataseg64[i].ds_base,
-+ &ctdst->rsp.m0.ct_dataseg64[i].ds_base);
-+ ISP_IOXPUT_32(isp,
-+ ctsrc->rsp.m0.ct_dataseg64[i].ds_basehi,
-+ &ctdst->rsp.m0.ct_dataseg64[i].ds_basehi);
-+ ISP_IOXPUT_32(isp,
-+ ctsrc->rsp.m0.ct_dataseg64[i].ds_count,
-+ &ctdst->rsp.m0.ct_dataseg64[i].ds_count);
-+ }
-+ } else if (ctsrc->ct_header.rqs_entry_type == RQSTYPE_CTIO4) {
-+ ISP_IOXPUT_16(isp, ctsrc->rsp.m0.ct_dslist.ds_type,
-+ &ctdst->rsp.m0.ct_dslist.ds_type);
-+ ISP_IOXPUT_32(isp, ctsrc->rsp.m0.ct_dslist.ds_segment,
-+ &ctdst->rsp.m0.ct_dslist.ds_segment);
-+ ISP_IOXPUT_32(isp, ctsrc->rsp.m0.ct_dslist.ds_base,
-+ &ctdst->rsp.m0.ct_dslist.ds_base);
-+ }
-+ } else if ((ctsrc->ct_flags & CT2_FLAG_MMASK) == CT2_FLAG_MODE1) {
-+ ISP_IOXPUT_16(isp, ctsrc->rsp.m1._reserved,
-+ &ctdst->rsp.m1._reserved);
-+ ISP_IOXPUT_16(isp, ctsrc->rsp.m1._reserved2,
-+ &ctdst->rsp.m1._reserved2);
-+ ISP_IOXPUT_16(isp, ctsrc->rsp.m1.ct_senselen,
-+ &ctdst->rsp.m1.ct_senselen);
-+ ISP_IOXPUT_16(isp, ctsrc->rsp.m1.ct_scsi_status,
-+ &ctdst->rsp.m1.ct_scsi_status);
-+ ISP_IOXPUT_16(isp, ctsrc->rsp.m1.ct_resplen,
-+ &ctdst->rsp.m1.ct_resplen);
-+ for (i = 0; i < MAXRESPLEN; i++) {
-+ ISP_IOXPUT_8(isp, ctsrc->rsp.m1.ct_resp[i],
-+ &ctdst->rsp.m1.ct_resp[i]);
-+ }
-+ } else {
-+ ISP_IOXPUT_32(isp, ctsrc->rsp.m2._reserved,
-+ &ctdst->rsp.m2._reserved);
-+ ISP_IOXPUT_16(isp, ctsrc->rsp.m2._reserved2,
-+ &ctdst->rsp.m2._reserved2);
-+ ISP_IOXPUT_16(isp, ctsrc->rsp.m2._reserved3,
-+ &ctdst->rsp.m2._reserved3);
-+ ISP_IOXPUT_32(isp, ctsrc->rsp.m2.ct_datalen,
-+ &ctdst->rsp.m2.ct_datalen);
-+ ISP_IOXPUT_32(isp, ctsrc->rsp.m2.ct_fcp_rsp_iudata.ds_base,
-+ &ctdst->rsp.m2.ct_fcp_rsp_iudata.ds_base);
-+ ISP_IOXPUT_32(isp, ctsrc->rsp.m2.ct_fcp_rsp_iudata.ds_count,
-+ &ctdst->rsp.m2.ct_fcp_rsp_iudata.ds_count);
-+ }
-+}
-+
-+static INLINE void
-+isp_get_ctio2(struct ispsoftc *isp, ct2_entry_t *ctsrc, ct2_entry_t *ctdst)
-+{
-+ int i;
-+ isp_copy_in_hdr(isp, &ctsrc->ct_header, &ctdst->ct_header);
-+ ISP_IOXGET_16(isp, &ctsrc->ct_reserved, ctdst->ct_reserved);
-+ ISP_IOXGET_16(isp, &ctsrc->ct_fwhandle, ctdst->ct_fwhandle);
-+ ISP_IOXGET_8(isp, &ctsrc->ct_lun, ctdst->ct_lun);
-+ ISP_IOXGET_8(isp, &ctsrc->ct_iid, ctdst->ct_iid);
-+ ISP_IOXGET_16(isp, &ctsrc->ct_rxid, ctdst->ct_rxid);
-+ ISP_IOXGET_16(isp, &ctsrc->ct_flags, ctdst->ct_flags);
-+ ISP_IOXGET_16(isp, &ctsrc->ct_status, ctdst->ct_status);
-+ ISP_IOXGET_16(isp, &ctsrc->ct_timeout, ctdst->ct_timeout);
-+ ISP_IOXGET_16(isp, &ctsrc->ct_seg_count, ctdst->ct_seg_count);
-+ ISP_IOXGET_32(isp, &ctsrc->ct_reloff, ctdst->ct_reloff);
-+ ISP_IOXGET_32(isp, &ctsrc->ct_resid, ctdst->ct_resid);
-+ for (i = 0; i < 4; i++) {
-+ ISP_IOXGET_32(isp, &ctsrc->rsp.fw._reserved[i],
-+ ctdst->rsp.fw._reserved[i]);
-+ }
-+ ISP_IOXGET_16(isp, &ctsrc->rsp.fw.ct_scsi_status,
-+ ctdst->rsp.fw.ct_scsi_status);
-+ for (i = 0; i < QLTM_SENSELEN; i++) {
-+ ISP_IOXGET_8(isp, &ctsrc->rsp.fw.ct_sense[i],
-+ ctdst->rsp.fw.ct_sense[i]);
-+ }
-+}
-+
-+static INLINE void
-+isp_put_enable_lun(struct ispsoftc *isp, lun_entry_t *lesrc, lun_entry_t *ledst)
-+{
-+ int i;
-+ isp_copy_out_hdr(isp, &lesrc->le_header, &ledst->le_header);
-+ ISP_IOXPUT_32(isp, lesrc->le_reserved, &ledst->le_reserved);
-+ if (ISP_IS_SBUS(isp)) {
-+ ISP_IOXPUT_8(isp, lesrc->le_lun, &ledst->le_rsvd);
-+ ISP_IOXPUT_8(isp, lesrc->le_rsvd, &ledst->le_lun);
-+ ISP_IOXPUT_8(isp, lesrc->le_ops, &ledst->le_tgt);
-+ ISP_IOXPUT_8(isp, lesrc->le_tgt, &ledst->le_ops);
-+ ISP_IOXPUT_8(isp, lesrc->le_status, &ledst->le_reserved2);
-+ ISP_IOXPUT_8(isp, lesrc->le_reserved2, &ledst->le_status);
-+ ISP_IOXPUT_8(isp, lesrc->le_cmd_count, &ledst->le_in_count);
-+ ISP_IOXPUT_8(isp, lesrc->le_in_count, &ledst->le_cmd_count);
-+ ISP_IOXPUT_8(isp, lesrc->le_cdb6len, &ledst->le_cdb7len);
-+ ISP_IOXPUT_8(isp, lesrc->le_cdb7len, &ledst->le_cdb6len);
-+ } else {
-+ ISP_IOXPUT_8(isp, lesrc->le_lun, &ledst->le_lun);
-+ ISP_IOXPUT_8(isp, lesrc->le_rsvd, &ledst->le_rsvd);
-+ ISP_IOXPUT_8(isp, lesrc->le_ops, &ledst->le_ops);
-+ ISP_IOXPUT_8(isp, lesrc->le_tgt, &ledst->le_tgt);
-+ ISP_IOXPUT_8(isp, lesrc->le_status, &ledst->le_status);
-+ ISP_IOXPUT_8(isp, lesrc->le_reserved2, &ledst->le_reserved2);
-+ ISP_IOXPUT_8(isp, lesrc->le_cmd_count, &ledst->le_cmd_count);
-+ ISP_IOXPUT_8(isp, lesrc->le_in_count, &ledst->le_in_count);
-+ ISP_IOXPUT_8(isp, lesrc->le_cdb6len, &ledst->le_cdb6len);
-+ ISP_IOXPUT_8(isp, lesrc->le_cdb7len, &ledst->le_cdb7len);
-+ }
-+ ISP_IOXPUT_32(isp, lesrc->le_flags, &ledst->le_flags);
-+ ISP_IOXPUT_16(isp, lesrc->le_timeout, &ledst->le_timeout);
-+ for (i = 0; i < 20; i++) {
-+ ISP_IOXPUT_8(isp, lesrc->le_reserved3[i],
-+ &ledst->le_reserved3[i]);
-+ }
-+}
-+
-+static INLINE void
-+isp_get_enable_lun(struct ispsoftc *isp, lun_entry_t *lesrc, lun_entry_t *ledst)
-+{
-+ int i;
-+ isp_copy_in_hdr(isp, &lesrc->le_header, &ledst->le_header);
-+ ISP_IOXGET_32(isp, &lesrc->le_reserved, ledst->le_reserved);
-+ if (ISP_IS_SBUS(isp)) {
-+ ISP_IOXGET_8(isp, &lesrc->le_lun, ledst->le_rsvd);
-+ ISP_IOXGET_8(isp, &lesrc->le_rsvd, ledst->le_lun);
-+ ISP_IOXGET_8(isp, &lesrc->le_ops, ledst->le_tgt);
-+ ISP_IOXGET_8(isp, &lesrc->le_tgt, ledst->le_ops);
-+ ISP_IOXGET_8(isp, &lesrc->le_status, ledst->le_reserved2);
-+ ISP_IOXGET_8(isp, &lesrc->le_reserved2, ledst->le_status);
-+ ISP_IOXGET_8(isp, &lesrc->le_cmd_count, ledst->le_in_count);
-+ ISP_IOXGET_8(isp, &lesrc->le_in_count, ledst->le_cmd_count);
-+ ISP_IOXGET_8(isp, &lesrc->le_cdb6len, ledst->le_cdb7len);
-+ ISP_IOXGET_8(isp, &lesrc->le_cdb7len, ledst->le_cdb6len);
-+ } else {
-+ ISP_IOXGET_8(isp, &lesrc->le_lun, ledst->le_lun);
-+ ISP_IOXGET_8(isp, &lesrc->le_rsvd, ledst->le_rsvd);
-+ ISP_IOXGET_8(isp, &lesrc->le_ops, ledst->le_ops);
-+ ISP_IOXGET_8(isp, &lesrc->le_tgt, ledst->le_tgt);
-+ ISP_IOXGET_8(isp, &lesrc->le_status, ledst->le_status);
-+ ISP_IOXGET_8(isp, &lesrc->le_reserved2, ledst->le_reserved2);
-+ ISP_IOXGET_8(isp, &lesrc->le_cmd_count, ledst->le_cmd_count);
-+ ISP_IOXGET_8(isp, &lesrc->le_in_count, ledst->le_in_count);
-+ ISP_IOXGET_8(isp, &lesrc->le_cdb6len, ledst->le_cdb6len);
-+ ISP_IOXGET_8(isp, &lesrc->le_cdb7len, ledst->le_cdb7len);
-+ }
-+ ISP_IOXGET_32(isp, &lesrc->le_flags, ledst->le_flags);
-+ ISP_IOXGET_16(isp, &lesrc->le_timeout, ledst->le_timeout);
-+ for (i = 0; i < 20; i++) {
-+ ISP_IOXGET_8(isp, &lesrc->le_reserved3[i],
-+ ledst->le_reserved3[i]);
-+ }
-+}
-+
-+static INLINE void
-+isp_put_notify(struct ispsoftc *isp, in_entry_t *insrc, in_entry_t *indst)
-+{
-+ int i;
-+ isp_copy_out_hdr(isp, &insrc->in_header, &indst->in_header);
-+ ISP_IOXPUT_32(isp, insrc->in_reserved, &indst->in_reserved);
-+ if (ISP_IS_SBUS(isp)) {
-+ ISP_IOXPUT_8(isp, insrc->in_lun, &indst->in_iid);
-+ ISP_IOXPUT_8(isp, insrc->in_iid, &indst->in_lun);
-+ ISP_IOXPUT_8(isp, insrc->in_reserved2, &indst->in_tgt);
-+ ISP_IOXPUT_8(isp, insrc->in_tgt, &indst->in_reserved2);
-+ ISP_IOXPUT_8(isp, insrc->in_status, &indst->in_rsvd2);
-+ ISP_IOXPUT_8(isp, insrc->in_rsvd2, &indst->in_status);
-+ ISP_IOXPUT_8(isp, insrc->in_tag_val, &indst->in_tag_type);
-+ ISP_IOXPUT_8(isp, insrc->in_tag_type, &indst->in_tag_val);
-+ } else {
-+ ISP_IOXPUT_8(isp, insrc->in_lun, &indst->in_lun);
-+ ISP_IOXPUT_8(isp, insrc->in_iid, &indst->in_iid);
-+ ISP_IOXPUT_8(isp, insrc->in_reserved2, &indst->in_reserved2);
-+ ISP_IOXPUT_8(isp, insrc->in_tgt, &indst->in_tgt);
-+ ISP_IOXPUT_8(isp, insrc->in_status, &indst->in_status);
-+ ISP_IOXPUT_8(isp, insrc->in_rsvd2, &indst->in_rsvd2);
-+ ISP_IOXPUT_8(isp, insrc->in_tag_val, &indst->in_tag_val);
-+ ISP_IOXPUT_8(isp, insrc->in_tag_type, &indst->in_tag_type);
-+ }
-+ ISP_IOXPUT_32(isp, insrc->in_flags, &indst->in_flags);
-+ ISP_IOXPUT_16(isp, insrc->in_seqid, &indst->in_seqid);
-+ for (i = 0; i < IN_MSGLEN; i++) {
-+ ISP_IOXPUT_8(isp, insrc->in_msg[i], &indst->in_msg[i]);
-+ }
-+ for (i = 0; i < IN_RSVDLEN; i++) {
-+ ISP_IOXPUT_8(isp, insrc->in_reserved3[i],
-+ &indst->in_reserved3[i]);
-+ }
-+ for (i = 0; i < QLTM_SENSELEN; i++) {
-+ ISP_IOXPUT_8(isp, insrc->in_sense[i],
-+ &indst->in_sense[i]);
-+ }
-+}
-+
-+static INLINE void
-+isp_get_notify(struct ispsoftc *isp, in_entry_t *insrc, in_entry_t *indst)
-+{
-+ int i;
-+ isp_copy_in_hdr(isp, &insrc->in_header, &indst->in_header);
-+ ISP_IOXGET_32(isp, &insrc->in_reserved, indst->in_reserved);
-+ if (ISP_IS_SBUS(isp)) {
-+ ISP_IOXGET_8(isp, &insrc->in_lun, indst->in_iid);
-+ ISP_IOXGET_8(isp, &insrc->in_iid, indst->in_lun);
-+ ISP_IOXGET_8(isp, &insrc->in_reserved2, indst->in_tgt);
-+ ISP_IOXGET_8(isp, &insrc->in_tgt, indst->in_reserved2);
-+ ISP_IOXGET_8(isp, &insrc->in_status, indst->in_rsvd2);
-+ ISP_IOXGET_8(isp, &insrc->in_rsvd2, indst->in_status);
-+ ISP_IOXGET_8(isp, &insrc->in_tag_val, indst->in_tag_type);
-+ ISP_IOXGET_8(isp, &insrc->in_tag_type, indst->in_tag_val);
-+ } else {
-+ ISP_IOXGET_8(isp, &insrc->in_lun, indst->in_lun);
-+ ISP_IOXGET_8(isp, &insrc->in_iid, indst->in_iid);
-+ ISP_IOXGET_8(isp, &insrc->in_reserved2, indst->in_reserved2);
-+ ISP_IOXGET_8(isp, &insrc->in_tgt, indst->in_tgt);
-+ ISP_IOXGET_8(isp, &insrc->in_status, indst->in_status);
-+ ISP_IOXGET_8(isp, &insrc->in_rsvd2, indst->in_rsvd2);
-+ ISP_IOXGET_8(isp, &insrc->in_tag_val, indst->in_tag_val);
-+ ISP_IOXGET_8(isp, &insrc->in_tag_type, indst->in_tag_type);
-+ }
-+ ISP_IOXGET_32(isp, &insrc->in_flags, indst->in_flags);
-+ ISP_IOXGET_16(isp, &insrc->in_seqid, indst->in_seqid);
-+ for (i = 0; i < IN_MSGLEN; i++) {
-+ ISP_IOXGET_8(isp, &insrc->in_msg[i], indst->in_msg[i]);
-+ }
-+ for (i = 0; i < IN_RSVDLEN; i++) {
-+ ISP_IOXGET_8(isp, &insrc->in_reserved3[i],
-+ indst->in_reserved3[i]);
-+ }
-+ for (i = 0; i < QLTM_SENSELEN; i++) {
-+ ISP_IOXGET_8(isp, &insrc->in_sense[i],
-+ indst->in_sense[i]);
-+ }
-+}
-+
-+static INLINE void
-+isp_put_notify_fc(struct ispsoftc *isp, in_fcentry_t *insrc,
-+ in_fcentry_t *indst)
-+{
-+ isp_copy_out_hdr(isp, &insrc->in_header, &indst->in_header);
-+ ISP_IOXPUT_32(isp, insrc->in_reserved, &indst->in_reserved);
-+ ISP_IOXPUT_8(isp, insrc->in_lun, &indst->in_lun);
-+ ISP_IOXPUT_8(isp, insrc->in_iid, &indst->in_iid);
-+ ISP_IOXPUT_16(isp, insrc->in_scclun, &indst->in_scclun);
-+ ISP_IOXPUT_32(isp, insrc->in_reserved2, &indst->in_reserved2);
-+ ISP_IOXPUT_16(isp, insrc->in_status, &indst->in_status);
-+ ISP_IOXPUT_16(isp, insrc->in_task_flags, &indst->in_task_flags);
-+ ISP_IOXPUT_16(isp, insrc->in_seqid, &indst->in_seqid);
-+}
-+
-+static INLINE void
-+isp_get_notify_fc(struct ispsoftc *isp, in_fcentry_t *insrc,
-+ in_fcentry_t *indst)
-+{
-+ isp_copy_in_hdr(isp, &insrc->in_header, &indst->in_header);
-+ ISP_IOXGET_32(isp, &insrc->in_reserved, indst->in_reserved);
-+ ISP_IOXGET_8(isp, &insrc->in_lun, indst->in_lun);
-+ ISP_IOXGET_8(isp, &insrc->in_iid, indst->in_iid);
-+ ISP_IOXGET_16(isp, &insrc->in_scclun, indst->in_scclun);
-+ ISP_IOXGET_32(isp, &insrc->in_reserved2, indst->in_reserved2);
-+ ISP_IOXGET_16(isp, &insrc->in_status, indst->in_status);
-+ ISP_IOXGET_16(isp, &insrc->in_task_flags, indst->in_task_flags);
-+ ISP_IOXGET_16(isp, &insrc->in_seqid, indst->in_seqid);
-+}
-+
-+static INLINE void
-+isp_put_notify_ack(struct ispsoftc *isp, na_entry_t *nasrc, na_entry_t *nadst)
-+{
-+ int i;
-+ isp_copy_out_hdr(isp, &nasrc->na_header, &nadst->na_header);
-+ ISP_IOXPUT_32(isp, nasrc->na_reserved, &nadst->na_reserved);
-+ if (ISP_IS_SBUS(isp)) {
-+ ISP_IOXPUT_8(isp, nasrc->na_lun, &nadst->na_iid);
-+ ISP_IOXPUT_8(isp, nasrc->na_iid, &nadst->na_lun);
-+ ISP_IOXPUT_8(isp, nasrc->na_status, &nadst->na_event);
-+ ISP_IOXPUT_8(isp, nasrc->na_event, &nadst->na_status);
-+ } else {
-+ ISP_IOXPUT_8(isp, nasrc->na_lun, &nadst->na_lun);
-+ ISP_IOXPUT_8(isp, nasrc->na_iid, &nadst->na_iid);
-+ ISP_IOXPUT_8(isp, nasrc->na_status, &nadst->na_status);
-+ ISP_IOXPUT_8(isp, nasrc->na_event, &nadst->na_event);
-+ }
-+ ISP_IOXPUT_32(isp, nasrc->na_flags, &nadst->na_flags);
-+ for (i = 0; i < NA_RSVDLEN; i++) {
-+ ISP_IOXPUT_16(isp, nasrc->na_reserved3[i],
-+ &nadst->na_reserved3[i]);
-+ }
-+}
-+
-+static INLINE void
-+isp_get_notify_ack(struct ispsoftc *isp, na_entry_t *nasrc, na_entry_t *nadst)
-+{
-+ int i;
-+ isp_copy_in_hdr(isp, &nasrc->na_header, &nadst->na_header);
-+ ISP_IOXGET_32(isp, &nasrc->na_reserved, nadst->na_reserved);
-+ if (ISP_IS_SBUS(isp)) {
-+ ISP_IOXGET_8(isp, &nasrc->na_lun, nadst->na_iid);
-+ ISP_IOXGET_8(isp, &nasrc->na_iid, nadst->na_lun);
-+ ISP_IOXGET_8(isp, &nasrc->na_status, nadst->na_event);
-+ ISP_IOXGET_8(isp, &nasrc->na_event, nadst->na_status);
-+ } else {
-+ ISP_IOXGET_8(isp, &nasrc->na_lun, nadst->na_lun);
-+ ISP_IOXGET_8(isp, &nasrc->na_iid, nadst->na_iid);
-+ ISP_IOXGET_8(isp, &nasrc->na_status, nadst->na_status);
-+ ISP_IOXGET_8(isp, &nasrc->na_event, nadst->na_event);
-+ }
-+ ISP_IOXGET_32(isp, &nasrc->na_flags, nadst->na_flags);
-+ for (i = 0; i < NA_RSVDLEN; i++) {
-+ ISP_IOXGET_16(isp, &nasrc->na_reserved3[i],
-+ nadst->na_reserved3[i]);
-+ }
-+}
-+
-+static INLINE void
-+isp_put_notify_ack_fc(struct ispsoftc *isp, na_fcentry_t *nasrc,
-+ na_fcentry_t *nadst)
-+{
-+ int i;
-+ isp_copy_out_hdr(isp, &nasrc->na_header, &nadst->na_header);
-+ ISP_IOXPUT_32(isp, nasrc->na_reserved, &nadst->na_reserved);
-+ ISP_IOXPUT_8(isp, nasrc->na_lun, &nadst->na_lun);
-+ ISP_IOXPUT_8(isp, nasrc->na_iid, &nadst->na_iid);
-+ ISP_IOXPUT_16(isp, nasrc->na_scclun, &nadst->na_scclun);
-+ ISP_IOXPUT_16(isp, nasrc->na_flags, &nadst->na_flags);
-+ ISP_IOXPUT_16(isp, nasrc->na_reserved2, &nadst->na_reserved2);
-+ ISP_IOXPUT_16(isp, nasrc->na_status, &nadst->na_status);
-+ ISP_IOXPUT_16(isp, nasrc->na_task_flags, &nadst->na_task_flags);
-+ ISP_IOXPUT_16(isp, nasrc->na_seqid, &nadst->na_seqid);
-+ for (i = 0; i < NA2_RSVDLEN; i++) {
-+ ISP_IOXPUT_16(isp, nasrc->na_reserved3[i],
-+ &nadst->na_reserved3[i]);
-+ }
-+}
-+
-+static INLINE void
-+isp_get_notify_ack_fc(struct ispsoftc *isp, na_fcentry_t *nasrc,
-+ na_fcentry_t *nadst)
-+{
-+ int i;
-+ isp_copy_in_hdr(isp, &nasrc->na_header, &nadst->na_header);
-+ ISP_IOXGET_32(isp, &nasrc->na_reserved, nadst->na_reserved);
-+ ISP_IOXGET_8(isp, &nasrc->na_lun, nadst->na_lun);
-+ ISP_IOXGET_8(isp, &nasrc->na_iid, nadst->na_iid);
-+ ISP_IOXGET_16(isp, &nasrc->na_scclun, nadst->na_scclun);
-+ ISP_IOXGET_16(isp, &nasrc->na_flags, nadst->na_flags);
-+ ISP_IOXGET_16(isp, &nasrc->na_reserved2, nadst->na_reserved2);
-+ ISP_IOXGET_16(isp, &nasrc->na_status, nadst->na_status);
-+ ISP_IOXGET_16(isp, &nasrc->na_task_flags, nadst->na_task_flags);
-+ ISP_IOXGET_16(isp, &nasrc->na_seqid, nadst->na_seqid);
-+ for (i = 0; i < NA2_RSVDLEN; i++) {
-+ ISP_IOXGET_16(isp, &nasrc->na_reserved3[i],
-+ nadst->na_reserved3[i]);
-+ }
-+}
-+#endif
-+#endif /* _ISP_INLINE_H */
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/scsi/isp/isp_ioctl.h 2003-07-19 17:06:33.000000000 -0700
-@@ -0,0 +1,128 @@
-+/* %W% */
-+/*
-+ * ioctl definitions for Qlogic FC/SCSI HBA driver
-+ */
-+#define ISP_IOC (0x4D4A5100) /* 'MJQ' << 8 */
-+
-+/*
-+ * This ioctl sets/retrieves the debugging level for this hba instance.
-+ * Note that this is not a simple integer level- see ispvar.h for definitions.
-+ *
-+ * The arguments is a pointer to an integer with the new debugging level.
-+ * The old value is written into this argument.
-+ */
-+
-+#define ISP_SDBLEV (ISP_IOC | 1)
-+
-+/*
-+ * This ioctl resets the HBA. Use with caution.
-+ */
-+#define ISP_RESETHBA (ISP_IOC | 2)
-+
-+/*
-+ * This ioctl performs a fibre chanel rescan.
-+ */
-+#define ISP_RESCAN (ISP_IOC | 3)
-+
-+/*
-+ * This ioctl performs a reset and then will set the adapter to the
-+ * role that was passed in (the old role will be returned). It almost
-+ * goes w/o saying: use with caution.
-+ */
-+#define ISP_SETROLE (ISP_IOC | 4)
-+
-+#define ISP_ROLE_NONE 0x0
-+#define ISP_ROLE_INITIATOR 0x1
-+#define ISP_ROLE_TARGET 0x2
-+#define ISP_ROLE_BOTH (ISP_ROLE_TARGET|ISP_ROLE_INITIATOR)
-+#ifndef ISP_DEFAULT_ROLES
-+#define ISP_DEFAULT_ROLES ISP_ROLE_BOTH
-+#endif
-+
-+/*
-+ * Get the current adapter role
-+ */
-+#define ISP_GETROLE (ISP_IOC | 5)
-+
-+/*
-+ * Get/Clear Stats
-+ */
-+#define ISP_STATS_VERSION 0
-+typedef struct {
-+ u_int8_t isp_stat_version;
-+ u_int8_t isp_type; /* (ro) reflects chip type */
-+ u_int8_t isp_revision; /* (ro) reflects chip version */
-+ u_int8_t unused1;
-+ u_int32_t unused2;
-+ /*
-+ * Statistics Counters
-+ */
-+#define ISP_NSTATS 16
-+#define ISP_INTCNT 0
-+#define ISP_INTBOGUS 1
-+#define ISP_INTMBOXC 2
-+#define ISP_INGOASYNC 3
-+#define ISP_RSLTCCMPLT 4
-+#define ISP_FPHCCMCPLT 5
-+#define ISP_RSCCHIWAT 6
-+#define ISP_FPCCHIWAT 7
-+ u_int64_t isp_stats[ISP_NSTATS];
-+} isp_stats_t;
-+
-+#define ISP_GET_STATS (ISP_IOC | 6)
-+#define ISP_CLR_STATS (ISP_IOC | 7)
-+
-+/*
-+ * Initiate a LIP
-+ */
-+#define ISP_FC_LIP (ISP_IOC | 8)
-+
-+/*
-+ * Return the Port Database structure for the named device, or ENODEV if none.
-+ * Caller fills in virtual loopid (0..255), aka 'target'. The driver returns
-+ * ENODEV (if nothing valid there) or the actual loopid (for local loop devices
-+ * only), 24 bit Port ID and Node and Port WWNs.
-+ */
-+struct isp_fc_device {
-+ u_int32_t loopid; /* 0..255 */
-+ u_int32_t portid; /* 24 bit Port ID */
-+ u_int64_t node_wwn;
-+ u_int64_t port_wwn;
-+};
-+#define ISP_FC_GETDINFO (ISP_IOC | 9)
-+
-+/*
-+ * Get F/W crash dump
-+ */
-+#define ISP_GET_FW_CRASH_DUMP (ISP_IOC | 10)
-+#define ISP_FORCE_CRASH_DUMP (ISP_IOC | 11)
-+
-+/*
-+ * Get information about this Host Adapter, including current connection
-+ * topology and capabilities.
-+ */
-+struct isp_hba_device {
-+ u_int32_t
-+ : 8,
-+ : 4,
-+ fc_speed : 4, /* Gbps */
-+ : 2,
-+ fc_class2 : 1,
-+ fc_ip_supported : 1,
-+ fc_scsi_supported : 1,
-+ fc_topology : 3,
-+ fc_loopid : 8;
-+ u_int64_t nvram_node_wwn;
-+ u_int64_t nvram_port_wwn;
-+ u_int64_t active_node_wwn;
-+ u_int64_t active_port_wwn;
-+};
-+
-+#define ISP_TOPO_UNKNOWN 0 /* connection topology unknown */
-+#define ISP_TOPO_FCAL 1 /* private or PL_DA */
-+#define ISP_TOPO_LPORT 2 /* public loop */
-+#define ISP_TOPO_NPORT 3 /* N-port */
-+#define ISP_TOPO_FPORT 4 /* F-port */
-+
-+#define ISP_FC_GETHINFO (ISP_IOC|12)
-+
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/scsi/isp/isp_linux.c 2003-07-19 17:06:33.000000000 -0700
-@@ -0,0 +1,3015 @@
-+/* @(#)isp_linux.c 1.66 */
-+/*
-+ * Qlogic ISP Host Adapter Common Bus Linux routies
-+ *---------------------------------------
-+ *
-+ * Copyright (c) 1998, 1999, 2000, 2001 by Matthew Jacob
-+ * All rights reserved.
-+ *
-+ * Redistribution and use in source and binary forms, with or without
-+ * modification, are permitted provided that the following conditions
-+ * are met:
-+ * 1. Redistributions of source code must retain the above copyright
-+ * notice, this list of conditions, and the following disclaimer,
-+ * without modification, immediately at the beginning of the file.
-+ * 2. The name of the author may not be used to endorse or promote products
-+ * derived from this software without specific prior written permission.
-+ *
-+ * Alternatively, this software may be distributed under the terms of the
-+ * the GNU Public License ("GPL").
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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)
-+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-+ * SUCH DAMAGE.
-+ *
-+ * Matthew Jacob
-+ * Feral Software
-+ * PMB #825
-+ * 5214-F Diamond Hts Blvd
-+ * San Francisco, CA, 94131
-+ * mjacob@feral.com
-+ *
-+ *--------
-+ * Bug fixes from Janice McLaughlin (janus@somemore.com)
-+ * gratefully acknowledged.
-+ *
-+ */
-+
-+#define ISP_MODULE 1
-+#include "isp_linux.h"
-+#include "linux/smp_lock.h"
-+
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0)
-+#define scsi_add_timer _scsi_add_timer
-+#define scsi_delete_timer _scsi_delete_timer
-+static INLINE void _scsi_add_timer(Scsi_Cmnd *, int, void ((*)(Scsi_Cmnd *)));
-+static INLINE int _scsi_delete_timer(Scsi_Cmnd *);
-+
-+static INLINE void
-+scsi_add_timer(Scsi_Cmnd *SCset, int timeout, void (*complete)(Scsi_Cmnd *))
-+{
-+ if (SCset->eh_timeout.function != NULL) {
-+ del_timer(&SCset->eh_timeout);
-+ }
-+ SCset->eh_timeout.data = (unsigned long) SCset;
-+ SCset->eh_timeout.expires = jiffies + timeout;
-+ SCset->eh_timeout.function = (void (*)(unsigned long))complete;
-+ add_timer(&SCset->eh_timeout);
-+}
-+static INLINE int
-+scsi_delete_timer(Scsi_Cmnd *SCset)
-+{
-+ if (SCset->eh_timeout.function != NULL) {
-+ del_timer(&SCset->eh_timeout);
-+ }
-+ SCset->eh_timeout.data = 0UL;
-+ SCset->eh_timeout.function = NULL;
-+ return 0;
-+}
-+#else
-+extern void scsi_add_timer(Scsi_Cmnd *, int, void ((*)(Scsi_Cmnd *)));
-+extern int scsi_delete_timer(Scsi_Cmnd *);
-+#endif
-+static int isp_task_thread(void *);
-+
-+struct ispsoftc *isplist = NULL;
-+const char *class3_roles[4] = {
-+ "None", "Target", "Initiator", "Target/Initiator"
-+};
-+int isp_debug = 0;
-+int isp_throttle = 0;
-+int isp_cmd_per_lun = 0;
-+int isp_unit_seed = 0;
-+int isp_disable = 0;
-+int isp_nofwreload = 0;
-+int isp_nonvram = 0;
-+int isp_maxluns = 8;
-+int isp_fcduplex = 0;
-+int isp_nport_only = 0;
-+int isp_loop_only = 0;
-+int isp_deadloop_time = 30; /* how long to wait before assume loop dead */
-+int isp_xtime = 0;
-+int isp_default_frame_size;
-+int isp_default_exec_throttle;
-+
-+static char *isp_roles;
-+static char *isp_wwpns;
-+static char *isp_wwnns;
-+
-+
-+#ifdef LINUX_ISP_TARGET_MODE
-+#ifndef ISP_PARENT_TARGET
-+#define ISP_PARENT_TARGET scsi_target_handler
-+#endif
-+extern void ISP_PARENT_TARGET (qact_e, void *);
-+static void isp_taction(qact_e, void *);
-+static INLINE int nolunsenabled(struct ispsoftc *, int);
-+static void isp_target_start_ctio(struct ispsoftc *, tmd_cmd_t *);
-+static int isp_handle_platform_atio(struct ispsoftc *, at_entry_t *);
-+static int isp_handle_platform_atio2(struct ispsoftc *, at2_entry_t *);
-+static int isp_handle_platform_ctio(struct ispsoftc *, void *);
-+static int isp_handle_platform_ctio_fastpost(struct ispsoftc *, u_int32_t);
-+static void isp_target_putback_atio(struct ispsoftc *, tmd_cmd_t *);
-+static void isp_complete_ctio(struct ispsoftc *, tmd_cmd_t *);
-+#endif
-+
-+extern int isplinux_pci_detect(Scsi_Host_Template *);
-+extern void isplinux_pci_release(struct Scsi_Host *);
-+
-+int
-+isplinux_detect(Scsi_Host_Template *tmpt)
-+{
-+ int rval;
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0)
-+ extern struct proc_dir_entry proc_scsi_qlc;
-+ tmpt->proc_dir = &proc_scsi_qlc;
-+#else
-+ tmpt->proc_name = "isp";
-+#endif
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+ spin_unlock_irq(&io_request_lock);
-+ rval = isplinux_pci_detect(tmpt);
-+ spin_lock_irq(&io_request_lock);
-+#else
-+ rval = isplinux_pci_detect(tmpt);
-+#endif
-+ return (rval);
-+}
-+
-+/* io_request_lock *not* held here */
-+int
-+isplinux_release(struct Scsi_Host *host)
-+{
-+ struct ispsoftc *isp = (struct ispsoftc *) host->hostdata;
-+#ifdef ISP_TARGET_MODE
-+ isp_detach_target(isp);
-+#endif
-+ if (isp->isp_osinfo.task_thread) {
-+ SEND_THREAD_EVENT(isp, ISP_THREAD_EXIT, 1);
-+ }
-+ ISP_LOCKU_SOFTC(isp);
-+ isp->isp_role = ISP_ROLE_NONE;
-+ ISP_WRITE(isp, HCCR, HCCR_CMD_PAUSE);
-+ if (IS_FC(isp)) {
-+ ISP_WRITE(isp, BIU2100_CSR, BIU2100_FPM0_REGS);
-+ ISP_WRITE(isp, FPM_DIAG_CONFIG, FPM_SOFT_RESET);
-+ ISP_WRITE(isp, BIU2100_CSR, BIU2100_FB_REGS);
-+ ISP_WRITE(isp, FBM_CMD, FBMCMD_FIFO_RESET_ALL);
-+ ISP_WRITE(isp, BIU2100_CSR, BIU2100_RISC_REGS);
-+ }
-+ isp->dogactive = 0;
-+ del_timer(&isp->isp_osinfo.timer);
-+ DISABLE_INTS(isp);
-+ if (isp->isp_bustype == ISP_BT_PCI) {
-+ isplinux_pci_release(host);
-+ }
-+ ISP_UNLKU_SOFTC(isp);
-+#ifdef ISP_FW_CRASH_DUMP
-+ if (FCPARAM(isp)->isp_dump_data) {
-+ size_t amt;
-+ if (IS_2200(isp))
-+ amt = QLA2200_RISC_IMAGE_DUMP_SIZE;
-+ else
-+ amt = QLA2200_RISC_IMAGE_DUMP_SIZE;
-+ isp_prt(isp, ISP_LOGCONFIG, "freeing crash dump area");
-+ isp_kfree(FCPARAM(isp)->isp_dump_data, amt);
-+ FCPARAM(isp)->isp_dump_data = 0;
-+ }
-+#if defined(CONFIG_PROC_FS) && LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
-+ /*
-+ * Undo any PROCFS stuff
-+ */
-+ isplinux_undo_proc(isp);
-+#endif
-+ return (1);
-+#endif
-+}
-+
-+const char *
-+isplinux_info(struct Scsi_Host *host)
-+{
-+ struct ispsoftc *isp = (struct ispsoftc *) host->hostdata;
-+ if (IS_FC(isp)) {
-+ static char *foo = "Driver for a Qlogic ISP 2X00 Host Adapter";
-+ foo[26] = '0';
-+ foo[27] = '0';
-+ if (isp->isp_type == ISP_HA_FC_2100)
-+ foo[25] = '1';
-+ else if (isp->isp_type == ISP_HA_FC_2200)
-+ foo[25] = '2';
-+ else if (isp->isp_type == ISP_HA_FC_2300)
-+ foo[25] = '3';
-+ else if (isp->isp_type == ISP_HA_FC_2312) {
-+ foo[25] = '3';
-+ foo[26] = '1';
-+ foo[27] = '2';
-+ }
-+ return (foo);
-+ } else if (IS_1240(isp)) {
-+ return ("Driver for a Qlogic ISP 1240 Host Adapter");
-+ } else if (IS_1080(isp)) {
-+ return ("Driver for a Qlogic ISP 1080 Host Adapter");
-+ } else if (IS_1280(isp)) {
-+ return ("Driver for a Qlogic ISP 1280 Host Adapter");
-+ } else if (IS_10160(isp)) {
-+ return ("Driver for a Qlogic ISP 10160 Host Adapter");
-+ } else if (IS_12160(isp)) {
-+ return ("Driver for a Qlogic ISP 12160 Host Adapter");
-+ } else {
-+ return ("Driver for a Qlogic ISP 1020/1040 Host Adapter");
-+ }
-+}
-+
-+static INLINE void
-+isplinux_append_to_waitq(struct ispsoftc *isp, Scsi_Cmnd *Cmnd)
-+{
-+ /*
-+ * If we're a fibre channel card and we consider the loop to be
-+ * down, we just finish the command here and now.
-+ */
-+ if (IS_FC(isp) && isp->isp_deadloop) {
-+ XS_INITERR(Cmnd);
-+ XS_SETERR(Cmnd, DID_NO_CONNECT);
-+
-+ /*
-+ * Add back a timer else scsi_done drops this on the floor.
-+ */
-+ scsi_add_timer(Cmnd, Cmnd->timeout_per_command, Cmnd->done);
-+ isp_prt(isp, ISP_LOGDEBUG0, "giving up on target %d", XS_TGT(Cmnd));
-+ ISP_UNLK_SOFTC(isp);
-+ ISP_LOCK_SCSI_DONE(isp);
-+ (*Cmnd->scsi_done)(Cmnd);
-+ ISP_UNLK_SCSI_DONE(isp);
-+ ISP_LOCK_SOFTC(isp);
-+ return;
-+ }
-+
-+ isp->isp_osinfo.wqcnt++;
-+ if (isp->isp_osinfo.wqhiwater < isp->isp_osinfo.wqcnt)
-+ isp->isp_osinfo.wqhiwater = isp->isp_osinfo.wqcnt;
-+ if (isp->isp_osinfo.wqnext == NULL) {
-+ isp->isp_osinfo.wqtail = isp->isp_osinfo.wqnext = Cmnd;
-+ } else {
-+ isp->isp_osinfo.wqtail->host_scribble = (unsigned char *) Cmnd;
-+ isp->isp_osinfo.wqtail = Cmnd;
-+ }
-+ Cmnd->host_scribble = NULL;
-+
-+
-+ /*
-+ * Stop the clock for this command.
-+ */
-+ (void) scsi_delete_timer(Cmnd);
-+}
-+
-+static INLINE void
-+isplinux_insert_head_waitq(struct ispsoftc *isp, Scsi_Cmnd *Cmnd)
-+{
-+ isp->isp_osinfo.wqcnt++;
-+ if (isp->isp_osinfo.wqnext == NULL) {
-+ isp->isp_osinfo.wqtail = isp->isp_osinfo.wqnext = Cmnd;
-+ Cmnd->host_scribble = NULL;
-+ } else {
-+ Cmnd->host_scribble = (unsigned char *) isp->isp_osinfo.wqnext;
-+ isp->isp_osinfo.wqnext = Cmnd;
-+ }
-+}
-+
-+static INLINE Scsi_Cmnd *
-+isp_remove_from_waitq(Scsi_Cmnd *Cmnd)
-+{
-+ struct ispsoftc *isp;
-+ Scsi_Cmnd *f;
-+ if (Cmnd == NULL)
-+ return (Cmnd);
-+ isp = XS_ISP(Cmnd);
-+ if ((f = isp->isp_osinfo.wqnext) == Cmnd) {
-+ isp->isp_osinfo.wqnext = (Scsi_Cmnd *) Cmnd->host_scribble;
-+ } else {
-+ Scsi_Cmnd *b = f;
-+ while (f) {
-+ f = (Scsi_Cmnd *) b->host_scribble;
-+ if (f == Cmnd) {
-+ b->host_scribble = f->host_scribble;
-+ if (isp->isp_osinfo.wqtail == Cmnd)
-+ isp->isp_osinfo.wqtail = b;
-+ break;
-+ }
-+ b = f;
-+ }
-+ }
-+ if (f) {
-+ f->host_scribble = NULL;
-+ isp->isp_osinfo.wqcnt -= 1;
-+ }
-+ return (f);
-+}
-+
-+static INLINE void
-+isplinux_runwaitq(struct ispsoftc *isp)
-+{
-+ Scsi_Cmnd *f;
-+ if (isp->isp_blocked || isp->isp_draining)
-+ return;
-+ while ((f = isp_remove_from_waitq(isp->isp_osinfo.wqnext)) != NULL) {
-+ int result = isp_start(f);
-+ /*
-+ * Restart the timer for this command if it is queued or completing.
-+ */
-+ if (result == CMD_QUEUED || result == CMD_COMPLETE) {
-+ int ntime = f->timeout_per_command * (isp_xtime? isp_xtime : 1);
-+ scsi_add_timer(f, ntime, f->done);
-+ }
-+ if (result == CMD_QUEUED) {
-+ if (isp->isp_osinfo.hiwater < isp->isp_nactive)
-+ isp->isp_osinfo.hiwater = isp->isp_nactive;
-+ continue;
-+ }
-+
-+ /*
-+ * If we cannot start a command on a fibre channel card, it means
-+ * that loop state isn't ready for us to do so. Activate the FC
-+ * thread to rediscover loop and fabric residency- but not if
-+ * we consider the loop to be dead. If the loop is considered dead,
-+ * we wait until a PDB Changed after a Loop UP activates the FC
-+ * thread.
-+ */
-+ if (result == CMD_RQLATER && IS_FC(isp) && isp->isp_deadloop == 0) {
-+ SEND_THREAD_EVENT(isp, ISP_THREAD_FC_RESCAN, 0);
-+ }
-+
-+ /*
-+ * Put the command back on the wait queue. Don't change any
-+ * timer parameters for it because they were established
-+ * when we originally put the command on the waitq in the first
-+ * place.
-+ */
-+ if (result == CMD_EAGAIN || result == CMD_RQLATER) {
-+ isplinux_insert_head_waitq(isp, f);
-+ break;
-+ }
-+ if (result == CMD_COMPLETE) {
-+ isp_done(f);
-+ } else {
-+ panic("isplinux_runwaitq: result %d", result);
-+ }
-+ }
-+}
-+
-+static INLINE void
-+isplinux_flushwaitq(struct ispsoftc *isp)
-+{
-+ Scsi_Cmnd *Cmnd, *Ncmnd;
-+
-+ if ((Cmnd = isp->isp_osinfo.wqnext) == NULL) {
-+ return;
-+ }
-+ isp->isp_osinfo.wqnext = isp->isp_osinfo.wqtail = NULL;
-+ isp->isp_osinfo.wqcnt = 0;
-+ ISP_UNLK_SOFTC(isp);
-+ do {
-+ Ncmnd = (Scsi_Cmnd *) Cmnd->host_scribble;
-+ Cmnd->host_scribble = NULL;
-+ XS_INITERR(Cmnd);
-+ XS_SETERR(Cmnd, DID_NO_CONNECT);
-+ /*
-+ * Add back a timer else scsi_done drops this on the floor.
-+ */
-+ scsi_add_timer(Cmnd, Cmnd->timeout_per_command, Cmnd->done);
-+ ISP_LOCK_SCSI_DONE(isp);
-+ (*Cmnd->scsi_done)(Cmnd);
-+ ISP_UNLK_SCSI_DONE(isp);
-+ } while ((Cmnd = Ncmnd) != NULL);
-+ ISP_LOCK_SOFTC(isp);
-+}
-+
-+static INLINE Scsi_Cmnd *
-+isplinux_remove_from_doneq(Scsi_Cmnd *Cmnd)
-+{
-+ Scsi_Cmnd *f;
-+ struct ispsoftc *isp;
-+
-+ if (Cmnd == NULL)
-+ return (NULL);
-+ isp = XS_ISP(Cmnd);
-+ if (isp->isp_osinfo.dqnext == NULL)
-+ return (NULL);
-+ if ((f = isp->isp_osinfo.dqnext) == Cmnd) {
-+ isp->isp_osinfo.dqnext = (Scsi_Cmnd *) Cmnd->host_scribble;
-+ } else {
-+ Scsi_Cmnd *b = f;
-+ while (f) {
-+ f = (Scsi_Cmnd *) b->host_scribble;
-+ if (f == Cmnd) {
-+ b->host_scribble = f->host_scribble;
-+ if (isp->isp_osinfo.dqtail == Cmnd)
-+ isp->isp_osinfo.dqtail = b;
-+ break;
-+ }
-+ b = f;
-+ }
-+ }
-+ if (f) {
-+ f->host_scribble = NULL;
-+ }
-+ return (f);
-+}
-+
-+int
-+isplinux_queuecommand(Scsi_Cmnd *Cmnd, void (*donecmd)(Scsi_Cmnd *))
-+{
-+ struct Scsi_Host *host = XS_HOST(Cmnd);
-+ struct ispsoftc *isp = (struct ispsoftc *) (host->hostdata);
-+ int result;
-+
-+
-+ Cmnd->scsi_done = donecmd;
-+ Cmnd->sense_buffer[0] = 0;
-+ if (isp_xtime) {
-+ Cmnd->timeout *= isp_xtime;
-+ }
-+
-+ ISP_DRIVER_ENTRY_LOCK(isp);
-+ ISP_LOCK_SOFTC(isp);
-+
-+ /*
-+ * First off, see whether we need to (re)init the HBA.
-+ * If we need to and fail to, pretend that this was a selection timeout.
-+ */
-+ if (isp->isp_state != ISP_RUNSTATE) {
-+ if (isp->isp_role != ISP_ROLE_NONE) {
-+ isplinux_reinit(isp);
-+ }
-+ if (isp->isp_state != ISP_RUNSTATE) {
-+ ISP_UNLK_SOFTC(isp);
-+ ISP_DRIVER_EXIT_LOCK(isp);
-+ XS_INITERR(Cmnd);
-+ XS_SETERR(Cmnd, DID_NO_CONNECT);
-+ (*Cmnd->scsi_done)(Cmnd);
-+ return (0);
-+ }
-+ }
-+
-+
-+ /*
-+ * See if we're currently blocked. If we are, just queue up the command
-+ * to be run later.
-+ */
-+ if (isp->isp_blocked || isp->isp_draining) {
-+ isplinux_append_to_waitq(isp, Cmnd);
-+ ISP_UNLK_SOFTC(isp);
-+ ISP_DRIVER_EXIT_LOCK(isp);
-+ return (0);
-+ }
-+
-+ /*
-+ * Next see if we have any stored up commands to run. If so, run them.
-+ * If we get back from this with commands still ready to run, put the
-+ * current command at the tail of waiting commands to be run later.
-+ */
-+
-+ isplinux_runwaitq(isp);
-+ if (isp->isp_osinfo.wqnext) {
-+ isplinux_append_to_waitq(isp, Cmnd);
-+ ISP_UNLK_SOFTC(isp);
-+ ISP_DRIVER_EXIT_LOCK(isp);
-+ return (0);
-+ }
-+
-+ /*
-+ * Finally, try and run this command.
-+ */
-+
-+ result = isp_start(Cmnd);
-+ if (result == CMD_QUEUED) {
-+ if (isp->isp_osinfo.hiwater < isp->isp_nactive)
-+ isp->isp_osinfo.hiwater = isp->isp_nactive;
-+ result = 0;
-+ if (isp_xtime) {
-+ int ntime = isp_xtime * Cmnd->timeout_per_command;
-+ scsi_delete_timer(Cmnd);
-+ scsi_add_timer(Cmnd, ntime, Cmnd->done);
-+ }
-+ } else if (result == CMD_EAGAIN) {
-+ /*
-+ * We ran out of request queue space (or could not
-+ * get DMA resources). Tell the upper layer to try
-+ * later.
-+ */
-+ result = 1;
-+ } else if (result == CMD_RQLATER) {
-+ /*
-+ * Temporarily hold off on this one.
-+ * Typically this means for fibre channel
-+ * that the loop is down or we're processing
-+ * some other change (e.g., fabric membership
-+ * change)
-+ */
-+ isplinux_append_to_waitq(isp, Cmnd);
-+ if (IS_FC(isp) && isp->isp_deadloop == 0) {
-+ SEND_THREAD_EVENT(isp, ISP_THREAD_FC_RESCAN, 0);
-+ }
-+ result = 0;
-+ } else if (result == CMD_COMPLETE) {
-+ result = -1;
-+ } else {
-+ panic("unknown return code %d from isp_start", result);
-+ }
-+ ISP_UNLK_SOFTC(isp);
-+ ISP_DRIVER_EXIT_LOCK(isp);
-+ if (result == -1) {
-+ Cmnd->result &= ~0xff;
-+ Cmnd->result |= Cmnd->SCp.Status;
-+ Cmnd->host_scribble = NULL;
-+ (*Cmnd->scsi_done)(Cmnd);
-+ result = 0;
-+ }
-+ return (result);
-+}
-+
-+static INLINE void isplinux_scsi_probe_done(Scsi_Cmnd *);
-+
-+static INLINE void
-+isplinux_scsi_probe_done(Scsi_Cmnd *Cmnd)
-+{
-+ struct ispsoftc *isp = XS_ISP(Cmnd);
-+
-+ /*
-+ * If we haven't seen this target yet, check the command result. If
-+ * it was an inquiry and it succeeded okay, then we can update our
-+ * notions about this target's capabilities.
-+ *
-+ * If the command did *not* succeed, we also update our notions about
-+ * this target's capabilities (pessimistically) - it's probably not there.
-+ * All of this so we can know when we're done so we stop wasting cycles
-+ * seeing whether we can enable sync mode or not.
-+ */
-+
-+ if (isp->isp_psco[XS_CHANNEL(Cmnd)][XS_TGT(Cmnd)] == 0) {
-+ int i, b;
-+ caddr_t iqd;
-+ sdparam *sdp = (sdparam *) isp->isp_param;
-+
-+ sdp += XS_CHANNEL(Cmnd);
-+ if (Cmnd->cmnd[0] == 0x12 && host_byte(Cmnd->result) == DID_OK) {
-+ if (Cmnd->use_sg == 0) {
-+ iqd = (caddr_t) Cmnd->buffer;
-+ } else {
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+ iqd = ((struct scatterlist *) Cmnd->request_buffer)->address;
-+#else
-+ struct scatterlist *sg;
-+ sg = (struct scatterlist *) Cmnd->request_buffer;
-+ iqd = page_address(sg->page) + sg->offset;
-+#endif
-+ }
-+ sdp->isp_devparam[XS_TGT(Cmnd)].goal_flags &=
-+ ~(DPARM_TQING|DPARM_SYNC|DPARM_WIDE);
-+ if (iqd[7] & 0x2) {
-+ sdp->isp_devparam[XS_TGT(Cmnd)].goal_flags |= DPARM_TQING;
-+ }
-+ if (iqd[7] & 0x10) {
-+ sdp->isp_devparam[XS_TGT(Cmnd)].goal_flags |= DPARM_SYNC;
-+ }
-+ if (iqd[7] & 0x20) {
-+ sdp->isp_devparam[XS_TGT(Cmnd)].goal_flags |= DPARM_WIDE;
-+ }
-+ sdp->isp_devparam[XS_TGT(Cmnd)].dev_update = 1;
-+ isp->isp_psco[XS_CHANNEL(Cmnd)][XS_TGT(Cmnd)] = 1;
-+ } else if (host_byte(Cmnd->result) != DID_OK) {
-+ isp->isp_psco[XS_CHANNEL(Cmnd)][XS_TGT(Cmnd)] = 1;
-+ }
-+
-+ isp->isp_dutydone = 1;
-+ for (b = 0; b < (IS_DUALBUS(isp)?2 : 1) && isp->isp_dutydone; b++) {
-+ for (i = 0; i < MAX_TARGETS; i++) {
-+ if (i != sdp->isp_initiator_id) {
-+ if (isp->isp_psco[b][i] == 0) {
-+ isp->isp_dutydone = 0;
-+ break;
-+ }
-+ }
-+ }
-+ }
-+
-+ /*
-+ * Have we scanned all busses and all targets? You only get
-+ * one chance (per reset) to see what devices on this bus have
-+ * to offer.
-+ */
-+ if (isp->isp_dutydone) {
-+ for (b = 0; b < (IS_DUALBUS(isp)?2 : 1) && isp->isp_dutydone; b++) {
-+ for (i = 0; i < MAX_TARGETS; i++) {
-+ isp->isp_psco[b][i] = 0;
-+ }
-+ isp->isp_update |= (1 << b);
-+ }
-+ }
-+ }
-+}
-+
-+void
-+isp_done(Scsi_Cmnd *Cmnd)
-+{
-+ struct ispsoftc *isp = XS_ISP(Cmnd);
-+
-+ if (IS_SCSI(isp) && isp->isp_dutydone == 0) {
-+ isplinux_scsi_probe_done(Cmnd);
-+ }
-+
-+ Cmnd->result &= ~0xff;
-+ Cmnd->result |= Cmnd->SCp.Status;
-+
-+ if (Cmnd->SCp.Status != GOOD) {
-+ isp_prt(isp, ISP_LOGDEBUG0, "%d.%d.%d: cmd finishes with status 0x%x",
-+ XS_CHANNEL(Cmnd), XS_TGT(Cmnd), XS_LUN(Cmnd), Cmnd->SCp.Status);
-+ }
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,99)
-+ Cmnd->resid = XS_RESID(Cmnd);
-+#endif
-+ /*
-+ * Queue command on completion queue.
-+ */
-+ if (isp->isp_osinfo.dqnext == NULL) {
-+ isp->isp_osinfo.dqnext = Cmnd;
-+ } else {
-+ isp->isp_osinfo.dqtail->host_scribble = (unsigned char *) Cmnd;
-+ }
-+ isp->isp_osinfo.dqtail = Cmnd;
-+ Cmnd->host_scribble = NULL;
-+}
-+
-+/*
-+ * Error handling routines
-+ */
-+
-+int
-+isplinux_abort(Scsi_Cmnd *Cmnd)
-+{
-+ struct ispsoftc *isp;
-+ u_int16_t handle;
-+
-+ if (Cmnd == NULL || XS_HOST(Cmnd) == NULL) {
-+ return (FAILED);
-+ }
-+
-+ isp = XS_ISP(Cmnd);
-+ if (Cmnd->serial_number != Cmnd->serial_number_at_timeout) {
-+ isp_prt(isp, ISP_LOGWARN, "isplinux_abort: serial number mismatch");
-+ return (FAILED);
-+ }
-+ ISP_DRIVER_ENTRY_LOCK(isp);
-+ ISP_LOCKU_SOFTC(isp);
-+ handle = isp_find_handle(isp, Cmnd);
-+ if (handle == 0) {
-+ int wqfnd = 0;
-+ Scsi_Cmnd *NewCmnd = isp_remove_from_waitq(Cmnd);
-+ if (NewCmnd == NULL) {
-+ NewCmnd = isplinux_remove_from_doneq(Cmnd);
-+ wqfnd++;
-+ }
-+ ISP_UNLKU_SOFTC(isp);
-+ isp_prt(isp, ISP_LOGINFO,
-+ "isplinux_abort: found %d:%p for non-running cmd for %d.%d.%d",
-+ wqfnd, NewCmnd, XS_CHANNEL(Cmnd), XS_TGT(Cmnd), XS_LUN(Cmnd));
-+ if (NewCmnd == NULL) {
-+ ISP_DRIVER_EXIT_LOCK(isp);
-+ return (FAILED);
-+ }
-+ } else {
-+ if (isp_control(isp, ISPCTL_ABORT_CMD, Cmnd)) {
-+ ISP_UNLKU_SOFTC(isp);
-+ ISP_DRIVER_EXIT_LOCK(isp);
-+ return (FAILED);
-+ }
-+ if (isp->isp_nactive > 0)
-+ isp->isp_nactive--;
-+ isp_destroy_handle(isp, handle);
-+ ISP_UNLKU_SOFTC(isp);
-+ ISP_DRIVER_EXIT_LOCK(isp);
-+ isp_prt(isp, ISP_LOGINFO,
-+ "isplinux_abort: aborted running cmd (handle 0x%x) for %d.%d.%d",
-+ handle, XS_CHANNEL(Cmnd), XS_TGT(Cmnd), XS_LUN(Cmnd));
-+ }
-+ Cmnd->result = DID_ABORT << 16;
-+ (*Cmnd->scsi_done)(Cmnd);
-+ return (SUCCESS);
-+}
-+
-+/*
-+ * XXX: What does the midlayer expect for commands in process?
-+ * XXX: Are we supposed to clean up dead commands ourselves?
-+ */
-+int
-+isplinux_bdr(Scsi_Cmnd *Cmnd)
-+{
-+ struct ispsoftc *isp;
-+ int arg;
-+
-+ if (Cmnd == NULL || XS_HOST(Cmnd) == NULL) {
-+ return (FAILED);
-+ }
-+
-+ isp = XS_ISP(Cmnd);
-+ arg = XS_CHANNEL(Cmnd) << 16 | XS_TGT(Cmnd);
-+ ISP_DRIVER_ENTRY_LOCK(isp);
-+ ISP_LOCKU_SOFTC(isp);
-+ arg = isp_control(isp, ISPCTL_RESET_DEV, &arg);
-+ ISP_UNLKU_SOFTC(isp);
-+ ISP_DRIVER_EXIT_LOCK(isp);
-+ isp_prt(isp, ISP_LOGINFO, "Bus Device Reset %succesfully sent to %d.%d.%d",
-+ arg == 0? "s" : "uns", XS_CHANNEL(Cmnd), XS_TGT(Cmnd), XS_LUN(Cmnd));
-+ return ((arg == 0)? SUCCESS : FAILED);
-+}
-+
-+/*
-+ * XXX: What does the midlayer expect for commands in process?
-+ */
-+int
-+isplinux_sreset(Scsi_Cmnd *Cmnd)
-+{
-+ struct ispsoftc *isp;
-+ int arg;
-+
-+ if (Cmnd == NULL || XS_HOST(Cmnd) == NULL)
-+ return (FAILED);
-+
-+ isp = XS_ISP(Cmnd);
-+ arg = XS_CHANNEL(Cmnd);
-+ ISP_DRIVER_ENTRY_LOCK(isp);
-+ ISP_LOCKU_SOFTC(isp);
-+ arg = isp_control(isp, ISPCTL_RESET_BUS, &arg);
-+ ISP_UNLKU_SOFTC(isp);
-+ ISP_DRIVER_EXIT_LOCK(isp);
-+ isp_prt(isp, ISP_LOGINFO, "SCSI Bus Reset on Channel %d %succesful",
-+ XS_CHANNEL(Cmnd), arg == 0? "s" : "uns");
-+ return ((arg == 0)? SUCCESS : FAILED);
-+}
-+
-+/*
-+ * We call completion on any commands owned here-
-+ * except the one we were called with.
-+ */
-+int
-+isplinux_hreset(Scsi_Cmnd *Cmnd)
-+{
-+ Scsi_Cmnd *tmp, *dq, *wq, *xqf, *xql;
-+ struct ispsoftc *isp;
-+ u_int16_t handle;
-+
-+ if (Cmnd == NULL || XS_HOST(Cmnd) == NULL)
-+ return (FAILED);
-+
-+ isp = XS_ISP(Cmnd);
-+
-+ isp_prt(isp, ISP_LOGINFO, "Resetting Host Adapter");
-+
-+ ISP_DRIVER_ENTRY_LOCK(isp);
-+ ISP_LOCKU_SOFTC(isp);
-+
-+ /*
-+ * Save pending, running, and completed commands.
-+ */
-+ xql = xqf = NULL;
-+ for (handle = 1; handle <= isp->isp_maxcmds; handle++) {
-+ tmp = isp_find_xs(isp, handle);
-+ if (tmp == NULL) {
-+ continue;
-+ }
-+ isp_destroy_handle(isp, handle);
-+ tmp->host_scribble = NULL;
-+ if (xqf) {
-+ xql->host_scribble = (unsigned char *) tmp;
-+ } else {
-+ xqf = xql = tmp;
-+ }
-+ xql = tmp;
-+ }
-+ dq = isp->isp_osinfo.dqnext;
-+ isp->isp_osinfo.dqnext = NULL;
-+ wq = isp->isp_osinfo.wqnext;
-+ isp->isp_osinfo.wqnext = NULL;
-+ isp->isp_nactive = 0;
-+
-+ isplinux_reinit(isp);
-+
-+ ISP_UNLKU_SOFTC(isp);
-+ ISP_DRIVER_EXIT_LOCK(isp);
-+
-+ /*
-+ * Call completion on the detritus, skipping the one we were called with.
-+ */
-+ while ((tmp = xqf) != NULL) {
-+ xqf = (Scsi_Cmnd *) tmp->host_scribble;
-+ tmp->host_scribble = NULL;
-+ if (tmp == Cmnd)
-+ continue;
-+ tmp->result = DID_RESET << 16;
-+ /*
-+ * Get around silliness in midlayer.
-+ */
-+ tmp->flags |= IS_RESETTING;
-+ if (tmp->scsi_done)
-+ (*tmp->scsi_done)(tmp);
-+ }
-+ while ((tmp = wq) != NULL) {
-+ wq = (Scsi_Cmnd *) tmp->host_scribble;
-+ tmp->host_scribble = NULL;
-+ if (tmp == Cmnd)
-+ continue;
-+ tmp->result = DID_RESET << 16;
-+ /*
-+ * Get around silliness in midlayer.
-+ */
-+ tmp->flags |= IS_RESETTING;
-+ if (tmp->scsi_done)
-+ (*tmp->scsi_done)(tmp);
-+ }
-+ while ((tmp = dq) != NULL) {
-+ dq = (Scsi_Cmnd *) tmp->host_scribble;
-+ tmp->host_scribble = NULL;
-+ if (tmp == Cmnd)
-+ continue;
-+ tmp->result = DID_RESET << 16;
-+ /*
-+ * Get around silliness in midlayer.
-+ */
-+ tmp->flags |= IS_RESETTING;
-+ if (tmp->scsi_done)
-+ (*tmp->scsi_done)(tmp);
-+ }
-+ Cmnd->result = DID_RESET << 16;
-+ return (SUCCESS);
-+}
-+
-+
-+#ifdef LINUX_ISP_TARGET_MODE
-+void
-+isp_attach_target(struct ispsoftc *isp)
-+{
-+ int i;
-+ hba_register_t hba;
-+
-+ isp->isp_osinfo.pool = isp_kzalloc(NTGT_CMDS * TMD_SIZE, GFP_KERNEL);
-+ if (isp->isp_osinfo.pool == NULL) {
-+ isp_prt(isp, ISP_LOGERR, "cannot allocate TMD structures");
-+ return;
-+ }
-+ for (i = 0; i < NTGT_CMDS-1; i++) {
-+ isp->isp_osinfo.pool[i].cd_private = &isp->isp_osinfo.pool[i+1];
-+ }
-+ isp->isp_osinfo.pending_t = NULL;
-+ isp->isp_osinfo.tfreelist = isp->isp_osinfo.pool;
-+
-+ hba.r_identity = isp;
-+ sprintf(hba.r_name, "isp");
-+ hba.r_inst = isp->isp_unit;
-+ hba.r_version = QR_VERSION;
-+ hba.r_action = (void (*)(tact_e, void *))isp_taction;
-+ if (IS_FC(isp)) {
-+ hba.r_type = R_FC;
-+ } else{
-+ hba.r_type = R_SCSI;
-+ }
-+ ISP_UNLKU_SOFTC(isp);
-+ ISP_PARENT_TARGET(QOUT_HBA_REG, &hba);
-+ ISP_LOCKU_SOFTC(isp);
-+}
-+
-+void
-+isp_detach_target(struct ispsoftc *isp)
-+{
-+ hba_register_t hba;
-+
-+ hba.r_identity = isp;
-+ sprintf(hba.r_name, "isp");
-+ hba.r_inst = isp->isp_unit;
-+ hba.r_version = QR_VERSION;
-+ hba.r_action = (void (*)(tact_e, void *))isp_taction;
-+ if (IS_FC(isp)) {
-+ hba.r_type = R_FC;
-+ } else{
-+ hba.r_type = R_SCSI;
-+ }
-+ ISP_PARENT_TARGET(QOUT_HBA_UNREG, &hba);
-+ if (isp->isp_osinfo.pool) {
-+ isp_kfree(isp->isp_osinfo.pool, NTGT_CMDS * TMD_SIZE);
-+ isp->isp_osinfo.pool = 0;
-+ }
-+}
-+
-+static void
-+isp_taction(qact_e action, void *arg)
-+{
-+ tmd_cmd_t *tmd;
-+ struct ispsoftc *isp;
-+
-+ switch (action) {
-+ case QIN_HBA_REG:
-+ {
-+ hba_register_t *hp = (hba_register_t *) arg;
-+ isp = hp->r_identity;
-+ isp_prt(isp, ISP_LOGINFO, "completed target registration");
-+ ISP_LOCK_SOFTC(isp);
-+ isp->isp_osinfo.hcb = 1;
-+ ISP_UNLK_SOFTC(isp);
-+ ISP_PARENT_TARGET(QOUT_HBA_REG, hp);
-+ break;
-+ }
-+ case QIN_ENABLE:
-+ case QIN_DISABLE:
-+ {
-+ enadis_t *ep = arg;
-+ int bus, lun, tgt, chan;
-+
-+ isp = ep->cd_hba;
-+ bus = (int) ep->cd_chan;
-+ lun = (int) ep->cd_lun;
-+ tgt = (int) ep->cd_tgt;
-+ chan = (int) ep->cd_chan;
-+ ep->cd_error = isp_en_dis_lun(isp, (action == QIN_ENABLE)? 1 : chan,
-+ bus, tgt, lun);
-+ ISP_PARENT_TARGET(action, ep);
-+ break;
-+ }
-+ case QIN_TMD_CONT:
-+ tmd = (tmd_cmd_t *) arg;
-+ isp = tmd->cd_hba;
-+ isp_target_start_ctio(isp, tmd);
-+ break;
-+
-+ case QIN_TMD_FIN:
-+ tmd = (tmd_cmd_t *) arg;
-+ isp = tmd->cd_hba;
-+ MEMZERO(tmd, TMD_SIZE);
-+ ISP_LOCK_SOFTC(isp);
-+ tmd->cd_private = isp->isp_osinfo.tfreelist;
-+ isp->isp_osinfo.tfreelist = tmd;
-+ ISP_UNLK_SOFTC(isp);
-+ break;
-+
-+ case QIN_IOCTL:
-+ {
-+ ioctl_cmd_t *ip = arg;
-+ ip->i_errno = ENOTTY;
-+ ISP_PARENT_TARGET(QOUT_IOCTL, ip);
-+ break;
-+ }
-+ case QIN_HBA_UNREG:
-+ {
-+ hba_register_t *hp = (hba_register_t *) arg;
-+ isp = hp->r_identity;
-+ isp->isp_osinfo.hcb = 0;
-+ ISP_PARENT_TARGET(QOUT_HBA_REG, hp);
-+ break;
-+ }
-+ default:
-+ break;
-+ }
-+}
-+
-+static INLINE int
-+nolunsenabled(struct ispsoftc *isp, int port)
-+{
-+ int i, wbase, wend;
-+
-+ if (IS_FC(isp)) {
-+ wbase = 0;
-+ wend = TM_MAX_LUN_FC >> 5;
-+ } else {
-+ if (port) {
-+ wend = TM_MAX_LUN_FC >> 5;
-+ wbase = wend >> 1;
-+ } else {
-+ wend = (TM_MAX_LUN_FC >> 5) >> 1;
-+ wbase = 0;
-+ }
-+ }
-+ for (i = wbase; i < wend; i++) {
-+ if (isp->isp_osinfo.lunbmap[i]) {
-+ return (0);
-+ }
-+ }
-+ return (1);
-+}
-+
-+
-+
-+static void
-+isp_target_start_ctio(struct ispsoftc *isp, tmd_cmd_t *tmd)
-+{
-+ void *qe;
-+ u_int16_t *hp, save_handle;
-+ u_int32_t *rp;
-+ u_int16_t nxti, optr;
-+ u_int8_t local[QENTRY_LEN];
-+
-+ /*
-+ * If the transfer length is zero, we have to be sending status.
-+ * If we're sending data, we have to have one and only one data
-+ * direction set.
-+ */
-+ if (tmd->cd_xfrlen == 0) {
-+ if ((tmd->cd_hflags & CDFH_STSVALID) == 0) {
-+ isp_prt(isp, ISP_LOGERR, "CTIO, no data, and no status is wrong");
-+ tmd->cd_error = -EINVAL;
-+ tmd->cd_lflags |= CDFL_ERROR;
-+ return;
-+ }
-+ } else {
-+ if ((tmd->cd_hflags & CDFH_DATA_MASK) == 0) {
-+ isp_prt(isp, ISP_LOGERR, "data CTIO with no direction is wrong");
-+ tmd->cd_error = -EINVAL;
-+ tmd->cd_lflags |= CDFL_ERROR;
-+ return;
-+ }
-+ if ((tmd->cd_hflags & CDFH_DATA_MASK) == CDFH_DATA_MASK) {
-+ isp_prt(isp, ISP_LOGERR, "data CTIO with both directions is wrong");
-+ tmd->cd_error = -EINVAL;
-+ tmd->cd_lflags |= CDFL_ERROR;
-+ return;
-+ }
-+ }
-+ tmd->cd_lflags &= ~CDFL_ERROR;
-+ MEMZERO(local, QENTRY_LEN);
-+
-+ ISP_LOCK_SOFTC(isp);
-+ if (isp_getrqentry(isp, &nxti, &optr, &qe)) {
-+ isp_prt(isp, ISP_LOGWARN,
-+ "isp_target_start_ctio: request queue overflow");
-+ tmd->cd_error = -ENOMEM;
-+ tmd->cd_lflags |= CDFL_ERROR;
-+ ISP_UNLK_SOFTC(isp);
-+ return;
-+ }
-+
-+ /*
-+ * We're either moving data or completing a command here (or both).
-+ */
-+
-+ if (IS_FC(isp)) {
-+ ct2_entry_t *cto = (ct2_entry_t *) local;
-+ u_int16_t *ssptr = NULL;
-+
-+ cto->ct_header.rqs_entry_type = RQSTYPE_CTIO2;
-+ cto->ct_header.rqs_entry_count = 1;
-+ cto->ct_iid = tmd->cd_iid;
-+ if ((FCPARAM(isp)->isp_fwattr & ISP_FW_ATTR_SCCLUN) == 0)
-+ cto->ct_lun = tmd->cd_lun;
-+ else
-+ cto->ct_lun = 0;
-+ cto->ct_rxid = tmd->cd_tagval;
-+ if (cto->ct_rxid == 0) {
-+ isp_prt(isp, ISP_LOGERR, "a tagval of zero is not acceptable");
-+ tmd->cd_error = -EINVAL;
-+ tmd->cd_lflags |= CDFL_ERROR;
-+ ISP_UNLK_SOFTC(isp);
-+ return;
-+ }
-+ cto->ct_flags = CT2_FASTPOST;
-+
-+ if (tmd->cd_xfrlen == 0) {
-+ cto->ct_flags |= CT2_FLAG_MODE1 | CT2_NO_DATA | CT2_SENDSTATUS;
-+ ssptr = &cto->rsp.m1.ct_scsi_status;
-+ *ssptr = tmd->cd_scsi_status;
-+ if ((tmd->cd_hflags & CDFH_SNSVALID) != 0) {
-+ MEMCPY(cto->rsp.m1.ct_resp, tmd->cd_sense, QLTM_SENSELEN);
-+ cto->rsp.m1.ct_senselen = QLTM_SENSELEN;
-+ cto->rsp.m1.ct_scsi_status |= CT2_SNSLEN_VALID;
-+ }
-+ } else {
-+ cto->ct_flags |= CT2_FLAG_MODE0;
-+ if (tmd->cd_hflags & CDFH_DATA_IN) {
-+ cto->ct_flags |= CT2_DATA_IN;
-+ } else {
-+ cto->ct_flags |= CT2_DATA_OUT;
-+ }
-+ if (tmd->cd_hflags & CDFH_STSVALID) {
-+ ssptr = &cto->rsp.m0.ct_scsi_status;
-+ cto->ct_flags |= CT2_SENDSTATUS;
-+ cto->rsp.m0.ct_scsi_status = tmd->cd_scsi_status;
-+ /*
-+ * It will be up to the low level mapping routine
-+ * to check for sense data.
-+ */
-+ }
-+ /*
-+ * We assume we'll transfer what we say we'll transfer.
-+ * It should get added back in if we fail.
-+ */
-+ tmd->cd_resid -= tmd->cd_xfrlen;
-+ }
-+
-+ if (ssptr && tmd->cd_resid) {
-+ cto->ct_resid = tmd->cd_resid;
-+ *ssptr |= CT2_DATA_UNDER;
-+ } else {
-+ cto->ct_resid = 0;
-+ }
-+ isp_prt(isp, ISP_LOGTDEBUG0,
-+ "CTIO2[%x] ssts %x flags %x resid %d",
-+ cto->ct_rxid, tmd->cd_scsi_status, cto->ct_flags, cto->ct_resid);
-+ hp = &cto->ct_syshandle;
-+ rp = &cto->ct_resid;
-+ if (cto->ct_flags & CT2_SENDSTATUS) {
-+ cto->ct_flags |= CT2_CCINCR;
-+ }
-+ } else {
-+ ct_entry_t *cto = (ct_entry_t *) local;
-+
-+ cto->ct_header.rqs_entry_type = RQSTYPE_CTIO;
-+ cto->ct_header.rqs_entry_count = 1;
-+ cto->ct_iid = tmd->cd_iid;
-+ cto->ct_tgt = tmd->cd_tgt;
-+ cto->ct_lun = tmd->cd_lun;
-+ cto->ct_flags = 0;
-+ cto->ct_fwhandle = AT_GET_HANDLE(tmd->cd_tagval);
-+ if (AT_HAS_TAG(tmd->cd_tagval)) {
-+ cto->ct_tag_val = AT_GET_TAG(tmd->cd_tagval);
-+ cto->ct_flags |= CT_TQAE;
-+ }
-+ if (tmd->cd_lflags & CDFL_NODISC) {
-+ cto->ct_flags |= CT_NODISC;
-+ }
-+ if (tmd->cd_xfrlen == 0) {
-+ cto->ct_flags |= CT_NO_DATA | CT_SENDSTATUS;
-+ cto->ct_scsi_status = tmd->cd_scsi_status;
-+ cto->ct_resid = 0;
-+ } else {
-+ if (tmd->cd_hflags & CDFH_STSVALID) {
-+ cto->ct_flags |= CT_SENDSTATUS;
-+ }
-+ if (tmd->cd_hflags & CDFH_DATA_IN) {
-+ cto->ct_flags |= CT_DATA_IN;
-+ } else {
-+ cto->ct_flags |= CT_DATA_OUT;
-+ }
-+ /*
-+ * We assume we'll transfer what we say we'll transfer.
-+ * Otherwise, the command is dead.
-+ */
-+ tmd->cd_resid -= tmd->cd_xfrlen;
-+ if (tmd->cd_hflags & CDFH_STSVALID) {
-+ cto->ct_resid = tmd->cd_resid;
-+ }
-+ }
-+ isp_prt(isp, ISP_LOGTDEBUG0, "CTIO[%x] ssts %x resid %d cd_hflags %x",
-+ AT_GET_HANDLE(tmd->cd_tagval), tmd->cd_scsi_status, tmd->cd_resid,
-+ tmd->cd_hflags);
-+ hp = &cto->ct_syshandle;
-+ rp = &cto->ct_resid;
-+ if (cto->ct_flags & CT_SENDSTATUS) {
-+ cto->ct_flags |= CT_CCINCR;
-+ }
-+ }
-+
-+ if (isp_save_xs(isp, (XS_T *)tmd, hp)) {
-+ isp_prt(isp, ISP_LOGERR, "isp_target_start_ctio: No XFLIST pointers");
-+ tmd->cd_error = -ENOMEM;
-+ tmd->cd_lflags |= CDFL_ERROR;
-+ ISP_UNLK_SOFTC(isp);
-+ ISP_PARENT_TARGET(QOUT_TMD_DONE, tmd);
-+ return;
-+ }
-+
-+ /*
-+ * Call the dma setup routines for this entry (and any subsequent
-+ * CTIOs) if there's data to move, and then tell the f/w it's got
-+ * new things to play with. As with isp_start's usage of DMA setup,
-+ * any swizzling is done in the machine dependent layer. Because
-+ * of this, we put the request onto the queue area first in native
-+ * format.
-+ */
-+
-+ save_handle = *hp;
-+ switch (ISP_DMASETUP(isp, (XS_T *)tmd, (ispreq_t *) local, &nxti, optr)) {
-+ case CMD_QUEUED:
-+ ISP_ADD_REQUEST(isp, nxti);
-+ ISP_UNLK_SOFTC(isp);
-+ return;
-+
-+ case CMD_EAGAIN:
-+ tmd->cd_error = -ENOMEM;
-+ tmd->cd_lflags |= CDFL_ERROR;
-+ isp_destroy_handle(isp, save_handle);
-+ break;
-+
-+ case CMD_COMPLETE:
-+ tmd->cd_error = *rp; /* propagated back */
-+ tmd->cd_lflags |= CDFL_ERROR;
-+ isp_destroy_handle(isp, save_handle);
-+ break;
-+
-+ default:
-+ tmd->cd_error = -EFAULT; /* probably dma mapping failure */
-+ tmd->cd_lflags |= CDFL_ERROR;
-+ isp_destroy_handle(isp, save_handle);
-+ break;
-+ }
-+ ISP_UNLK_SOFTC(isp);
-+ ISP_PARENT_TARGET(QOUT_TMD_DONE, tmd);
-+}
-+
-+/*
-+ * Handle ATIO stuff that the generic code can't.
-+ * This means handling CDBs.
-+ */
-+
-+static int
-+isp_handle_platform_atio(struct ispsoftc *isp, at_entry_t *aep)
-+{
-+ tmd_cmd_t *tmd;
-+ int status;
-+
-+ /*
-+ * The firmware status (except for the QLTM_SVALID bit)
-+ * indicates why this ATIO was sent to us.
-+ *
-+ * If QLTM_SVALID is set, the firware has recommended Sense Data.
-+ *
-+ * If the DISCONNECTS DISABLED bit is set in the flags field,
-+ * we're still connected on the SCSI bus.
-+ */
-+ status = aep->at_status;
-+
-+ if ((status & ~QLTM_SVALID) == AT_PHASE_ERROR) {
-+ /*
-+ * Bus Phase Sequence error. We should have sense data
-+ * suggested by the f/w. I'm not sure quite yet what
-+ * to do about this.
-+ */
-+ isp_prt(isp, ISP_LOGERR, "PHASE ERROR in atio");
-+ isp_endcmd(isp, aep, SCSI_BUSY, 0);
-+ return (0);
-+ }
-+
-+ if ((status & ~QLTM_SVALID) != AT_CDB) {
-+ isp_prt(isp, ISP_LOGERR, "bad atio (0x%x) leaked to platform", status);
-+ isp_endcmd(isp, aep, SCSI_BUSY, 0);
-+ return (0);
-+ }
-+
-+ if ((tmd = isp->isp_osinfo.tfreelist) == NULL) {
-+ /*
-+ * We're out of resources.
-+ *
-+ * Because we can't autofeed sense data back with a command for
-+ * parallel SCSI, we can't give back a CHECK CONDITION. We'll give
-+ * back a QUEUE FULL or BUSY status instead.
-+ */
-+ isp_prt(isp, ISP_LOGERR,
-+ "no ATIOS for lun %d from initiator %d on channel %d",
-+ aep->at_lun, GET_IID_VAL(aep->at_iid), GET_BUS_VAL(aep->at_iid));
-+ if (aep->at_flags & AT_TQAE)
-+ isp_endcmd(isp, aep, SCSI_QFULL, 0);
-+ else
-+ isp_endcmd(isp, aep, SCSI_BUSY, 0);
-+ return (0);
-+ }
-+ isp->isp_osinfo.tfreelist = tmd->cd_private;
-+ tmd->cd_lflags = CDFL_BUSY;
-+ tmd->cd_chan = GET_BUS_VAL(aep->at_iid);
-+ tmd->cd_iid = GET_IID_VAL(aep->at_iid);
-+ tmd->cd_tgt = aep->at_tgt;
-+ tmd->cd_lun = aep->at_lun;
-+ if (aep->at_flags & AT_NODISC) {
-+ tmd->cd_lflags |= CDFL_NODISC;
-+ }
-+ if (status & QLTM_SVALID) {
-+ MEMCPY(tmd->cd_sense, aep->at_sense, QLTM_SENSELEN);
-+ tmd->cd_lflags |= CDFL_SNSVALID;
-+ }
-+ MEMCPY(tmd->cd_cdb, aep->at_cdb, min(TMD_CDBLEN, ATIO_CDBLEN));
-+ AT_MAKE_TAGID(tmd->cd_tagval, aep);
-+ tmd->cd_tagtype = aep->at_tag_type;
-+ tmd->cd_hba = isp;
-+ tmd->cd_data = NULL;
-+ tmd->cd_hflags = 0;
-+ tmd->cd_totlen = tmd->cd_resid = tmd->cd_xfrlen = tmd->cd_error = 0;
-+ tmd->cd_scsi_status = 0;
-+ isp_prt(isp, ISP_LOGTDEBUG1,
-+ "ATIO[%x] CDB=0x%x bus %d iid%d->lun%d tag 0x%x ttype 0x%x %s",
-+ aep->at_handle, aep->at_cdb[0] & 0xff, GET_BUS_VAL(aep->at_iid),
-+ GET_IID_VAL(aep->at_iid), aep->at_lun, aep->at_tag_val & 0xff,
-+ aep->at_tag_type, (aep->at_flags & AT_NODISC)?
-+ "nondisc" : "disconnecting");
-+ if (isp->isp_osinfo.hcb == 0) {
-+ isp_endcmd(isp, aep, SCSI_BUSY, 0);
-+ } else {
-+ isp->isp_osinfo.tfreelist = tmd->cd_private;
-+ tmd->cd_lreserved[0].bytes[0] = QOUT_TMD_START;
-+ tmd->cd_lreserved[1].ptrs[0] = isp->isp_osinfo.pending_t;
-+ isp->isp_osinfo.pending_t = tmd;
-+ }
-+ return (0);
-+}
-+
-+static int
-+isp_handle_platform_atio2(struct ispsoftc *isp, at2_entry_t *aep)
-+{
-+ tmd_cmd_t *tmd;
-+ int lun;
-+
-+ /*
-+ * The firmware status (except for the QLTM_SVALID bit)
-+ * indicates why this ATIO was sent to us.
-+ *
-+ * If QLTM_SVALID is set, the firware has recommended Sense Data.
-+ */
-+ if ((aep->at_status & ~QLTM_SVALID) != AT_CDB) {
-+ isp_prt(isp, ISP_LOGERR, "bad atio (0x%x) leaked to platform",
-+ aep->at_status);
-+ isp_endcmd(isp, aep, SCSI_BUSY, 0);
-+ return (0);
-+ }
-+ if (FCPARAM(isp)->isp_fwattr & ISP_FW_ATTR_SCCLUN)
-+ lun = aep->at_scclun;
-+ else
-+ lun = aep->at_lun;
-+
-+ /*
-+ * If we're out of resources, just send a QFULL status back.
-+ */
-+ if ((tmd = isp->isp_osinfo.tfreelist) == NULL) {
-+ isp_endcmd(isp, aep, SCSI_QFULL, 0);
-+ return (0);
-+ }
-+ tmd->cd_lflags = CDFL_BUSY;
-+ tmd->cd_iid = aep->at_iid;
-+ tmd->cd_tgt = ((fcparam *)isp->isp_param)->isp_loopid;
-+ tmd->cd_lun = lun;
-+ tmd->cd_chan = 0;
-+ MEMCPY(tmd->cd_cdb, aep->at_cdb, min(TMD_CDBLEN, ATIO2_CDBLEN));
-+ switch (aep->at_taskflags & ATIO2_TC_ATTR_MASK) {
-+ case ATIO2_TC_ATTR_SIMPLEQ:
-+ tmd->cd_tagtype = MSG_SIMPLE_Q_TAG;
-+ break;
-+ case ATIO2_TC_ATTR_HEADOFQ:
-+ tmd->cd_tagtype = MSG_HEAD_OF_Q_TAG;
-+ break;
-+ case ATIO2_TC_ATTR_ORDERED:
-+ tmd->cd_tagtype = MSG_ORDERED_Q_TAG;
-+ break;
-+ case ATIO2_TC_ATTR_ACAQ: /* ?? */
-+ case ATIO2_TC_ATTR_UNTAGGED:
-+ default:
-+ tmd->cd_tagtype = 0;
-+ break;
-+ }
-+ switch (aep->at_execodes & (ATIO2_EX_WRITE|ATIO2_EX_READ)) {
-+ case ATIO2_EX_WRITE:
-+ tmd->cd_lflags |= CDFL_DATA_OUT;
-+ break;
-+ case ATIO2_EX_READ:
-+ tmd->cd_lflags |= CDFL_DATA_IN;
-+ break;
-+ case ATIO2_EX_WRITE|ATIO2_EX_READ:
-+ tmd->cd_lflags |= CDFL_BIDIR;
-+ isp_prt(isp, ISP_LOGWARN, "ATIO2 with both read/write set");
-+ break;
-+ default:
-+ break;
-+ }
-+ tmd->cd_tagval = aep->at_rxid;
-+ tmd->cd_hba = isp;
-+ tmd->cd_data = NULL;
-+ tmd->cd_hflags = 0;
-+ tmd->cd_totlen = aep->at_datalen;
-+ tmd->cd_resid = tmd->cd_xfrlen = tmd->cd_error = 0;
-+ tmd->cd_scsi_status = 0;
-+ if ((isp->isp_dblev & ISP_LOGTDEBUG0) || isp->isp_osinfo.hcb == 0) {
-+ const char *sstr;
-+ switch (tmd->cd_lflags & CDFL_BIDIR) {
-+ default:
-+ sstr = "nodatadir";
-+ break;
-+ case CDFL_DATA_OUT:
-+ sstr = "DATA OUT";
-+ break;
-+ case CDFL_DATA_IN:
-+ sstr = "DATA IN";
-+ break;
-+ case CDFL_DATA_OUT|CDFL_DATA_IN:
-+ sstr = "BIDIR";
-+ break;
-+ }
-+ isp_prt(isp, ISP_LOGALL,
-+ "ATIO2[%x] CDB=0x%x iid %d for lun %d tcode 0x%x dlen %d %s",
-+ aep->at_rxid, aep->at_cdb[0] & 0xff, aep->at_iid,
-+ lun, aep->at_taskcodes, aep->at_datalen, sstr);
-+ }
-+ if (isp->isp_osinfo.hcb == 0) {
-+ if (aep->at_cdb[0] == INQUIRY && lun == 0) {
-+ if (aep->at_cdb[1] == 0 && aep->at_cdb[2] == 0) {
-+ static u_int8_t inqdata[] = {
-+ DEFAULT_DEVICE_TYPE, 0x0, 0x2, 0x2, 32, 0, 0, 0x40,
-+ 'L', 'I', 'N', 'U', 'X', ' ', ' ', ' ',
-+ 'T', 'A', 'R', 'G', 'E', 'T', ' ', 'D',
-+ 'D', 'E', 'V', 'I', 'C', 'E', ' ', ' ',
-+ '0', '0', '0', '1'
-+ };
-+ struct scatterlist single, *dp = &single;
-+ MEMZERO(dp, sizeof (*dp));
-+ dp->address = inqdata;
-+ dp->length = sizeof (inqdata);
-+ tmd->cd_data = dp;
-+ tmd->cd_resid = tmd->cd_xfrlen = sizeof (inqdata);
-+ tmd->cd_hflags |= CDFH_DATA_IN|CDFH_STSVALID;
-+ ISP_DROP_LK_SOFTC(isp);
-+ isp_target_start_ctio(isp, tmd);
-+ ISP_IGET_LK_SOFTC(isp);
-+ } else {
-+ /*
-+ * Illegal field in CDB
-+ * 0x24 << 24 | 0x5 << 12 | ECMD_SVALID | SCSI_CHECK
-+ */
-+ isp_endcmd(isp, aep, 0x24005102, 0);
-+ }
-+ } else if (lun == 0) {
-+ /*
-+ * Not Ready, Cause Not Reportable
-+ *
-+ * 0x4 << 24 | 0x2 << 12 | ECMD_SVALID | SCSI_CHECK
-+ */
-+ isp_endcmd(isp, aep, 0x04002102, 0);
-+ } else {
-+ /*
-+ * Logical Unit Not Supported:
-+ * 0x25 << 24 | 0x5 << 12 | ECMD_SVALID | SCSI_CHECK
-+ */
-+ isp_endcmd(isp, aep, 0x25005102, 0);
-+ }
-+ MEMZERO(tmd, TMD_SIZE);
-+ return (0);
-+ }
-+ isp->isp_osinfo.tfreelist = tmd->cd_private;
-+ tmd->cd_lreserved[0].bytes[0] = QOUT_TMD_START;
-+ tmd->cd_lreserved[1].ptrs[0] = isp->isp_osinfo.pending_t;
-+ isp->isp_osinfo.pending_t = tmd;
-+ return (0);
-+}
-+
-+static int
-+isp_handle_platform_ctio(struct ispsoftc *isp, void *arg)
-+{
-+ tmd_cmd_t *tmd;
-+ int sentstatus, ok, resid = 0, sts;
-+
-+ /*
-+ * CTIO and CTIO2 are close enough....
-+ */
-+ tmd = (tmd_cmd_t *) isp_find_xs(isp, ((ct_entry_t *)arg)->ct_syshandle);
-+ if (tmd == NULL) {
-+ isp_prt(isp, ISP_LOGERR, "isp_handle_platform_ctio: null tmd");
-+ return (0);
-+ }
-+ isp_destroy_handle(isp, ((ct_entry_t *)arg)->ct_syshandle);
-+
-+ if (IS_FC(isp)) {
-+ ct2_entry_t *ct = arg;
-+ sentstatus = ct->ct_flags & CT2_SENDSTATUS;
-+ if (sentstatus) {
-+ tmd->cd_lflags |= CDFL_SENTSTATUS;
-+ }
-+ sts = ct->ct_status & ~QLTM_SVALID;
-+ ok = (ct->ct_status & ~QLTM_SVALID) == CT_OK;
-+ if (ok && sentstatus && (tmd->cd_hflags & CDFH_SNSVALID)) {
-+ tmd->cd_lflags |= CDFL_SENTSENSE;
-+ }
-+ isp_prt(isp, ISP_LOGTDEBUG1,
-+ "CTIO2[%x] sts 0x%x flg 0x%x sns %d %s",
-+ ct->ct_rxid, ct->ct_status, ct->ct_flags,
-+ (tmd->cd_lflags & CDFL_SENTSENSE) != 0,
-+ sentstatus? "FIN" : "MID");
-+ if ((ct->ct_flags & CT2_DATAMASK) != CT2_NO_DATA) {
-+ resid = ct->ct_resid;
-+ }
-+ } else {
-+ ct_entry_t *ct = arg;
-+ sts = ct->ct_status & ~QLTM_SVALID;
-+ sentstatus = ct->ct_flags & CT_SENDSTATUS;
-+ if (sentstatus) {
-+ tmd->cd_lflags |= CDFL_SENTSTATUS;
-+ }
-+ ok = (ct->ct_status & ~QLTM_SVALID) == CT_OK;
-+ if (ok && sentstatus && (tmd->cd_hflags & CDFH_SNSVALID)) {
-+ tmd->cd_lflags |= CDFL_SENTSENSE;
-+ }
-+ isp_prt(isp, ISP_LOGTDEBUG1,
-+ "CTIO[%x] tag %x iid %x tgt %d lun %d sts 0x%x flg %x %s",
-+ ct->ct_fwhandle, ct->ct_tag_val, ct->ct_iid, ct->ct_tgt,
-+ ct->ct_lun, ct->ct_status, ct->ct_flags,
-+ sentstatus? "FIN" : "MID");
-+ if (ct->ct_status & QLTM_SVALID) {
-+ char *sp = (char *)ct;
-+ sp += CTIO_SENSE_OFFSET;
-+ MEMCPY(tmd->cd_sense, sp, QLTM_SENSELEN);
-+ tmd->cd_lflags |= CDFL_SNSVALID;
-+ }
-+ if ((ct->ct_flags & CT_DATAMASK) != CT_NO_DATA) {
-+ resid = ct->ct_resid;
-+ }
-+ }
-+ tmd->cd_resid += resid;
-+
-+ /*
-+ * We're here either because intermediate data transfers are done
-+ * and/or the final status CTIO (which may have joined with a
-+ * Data Transfer) is done.
-+ *
-+ * In any case, for this platform, the upper layers figure out
-+ * what to do next, so all we do here is collect status and
-+ * pass information along.
-+ */
-+ isp_prt(isp, ISP_LOGTDEBUG0, "%s CTIO done (resid %d)",
-+ (sentstatus)? " FINAL " : "MIDTERM ", tmd->cd_resid);
-+
-+ if (!ok) {
-+ isp_prt(isp, ISP_LOGERR, "CTIO ended with badstate (0x%x)", sts);
-+ tmd->cd_lflags |= CDFL_ERROR;
-+ tmd->cd_error = -EIO;
-+ isp_target_putback_atio(isp, tmd);
-+ } else {
-+ isp_complete_ctio(isp, tmd);
-+ }
-+ return (0);
-+}
-+
-+static int
-+isp_handle_platform_ctio_fastpost(struct ispsoftc *isp, u_int32_t token)
-+{
-+ tmd_cmd_t *tmd;
-+ u_int16_t handle;
-+
-+ handle = token & 0xffff;
-+ tmd = (tmd_cmd_t *) isp_find_xs(isp, handle);
-+ if (tmd == NULL) {
-+ isp_prt(isp, ISP_LOGERR,
-+ "isp_handle_platform_ctio_fastpost: null tmd");
-+ return (0);
-+ }
-+ isp_destroy_handle(isp, handle);
-+ isp_prt(isp, ISP_LOGTDEBUG1, "CTIOx[%x] fastpost complete", tmd->cd_tagval);
-+ /*
-+ * In this implementation we only set fast posting for the last ctio2
-+ * of a command where we haven't sent sense data as well.
-+ */
-+ tmd->cd_lflags |= CDFL_SENTSTATUS;
-+ isp_complete_ctio(isp, tmd);
-+ return (0);
-+}
-+
-+static void
-+isp_target_putback_atio(struct ispsoftc *isp, tmd_cmd_t *tmd)
-+{
-+ u_int16_t nxti;
-+ u_int8_t local[QENTRY_LEN];
-+ void *qe;
-+
-+ if (isp_getrqentry(isp, &nxti, NULL, &qe)) {
-+ isp_prt(isp, ISP_LOGWARN,
-+ "isp_target_putback_atio: Request Queue Overflow");
-+ /* XXXX */
-+ isp_complete_ctio(isp, tmd);
-+ return;
-+ }
-+ MEMZERO(local, sizeof (local));
-+ if (IS_FC(isp)) {
-+ at2_entry_t *at = (at2_entry_t *) local;
-+ at->at_header.rqs_entry_type = RQSTYPE_ATIO2;
-+ at->at_header.rqs_entry_count = 1;
-+ if (FCPARAM(isp)->isp_fwattr & ISP_FW_ATTR_SCCLUN)
-+ at->at_scclun = (uint16_t) tmd->cd_lun;
-+ else
-+ at->at_lun = (uint8_t) tmd->cd_lun;
-+ at->at_status = CT_OK;
-+ at->at_rxid = tmd->cd_tagval;
-+ isp_put_atio2(isp, at, qe);
-+ } else {
-+ at_entry_t *at = (at_entry_t *)local;
-+ at->at_header.rqs_entry_type = RQSTYPE_ATIO;
-+ at->at_header.rqs_entry_count = 1;
-+ at->at_iid = tmd->cd_iid;
-+ at->at_iid |= tmd->cd_chan << 7;
-+ at->at_tgt = tmd->cd_tgt;
-+ at->at_lun = tmd->cd_lun;
-+ at->at_status = CT_OK;
-+ at->at_tag_val = AT_GET_TAG(tmd->cd_tagval);
-+ at->at_handle = AT_GET_HANDLE(tmd->cd_tagval);
-+ isp_put_atio(isp, at, qe);
-+ }
-+ ISP_TDQE(isp, "isp_target_putback_atio", isp->isp_reqidx, qe);
-+ ISP_ADD_REQUEST(isp, nxti);
-+ isp_complete_ctio(isp, tmd);
-+}
-+
-+static void
-+isp_complete_ctio(struct ispsoftc *isp, tmd_cmd_t *tmd)
-+{
-+ if (isp->isp_osinfo.hcb == 0) {
-+ isp_prt(isp, ISP_LOGWARN, "nobody to tell about completing command");
-+ MEMZERO(tmd, TMD_SIZE);
-+ tmd->cd_private = isp->isp_osinfo.tfreelist;
-+ isp->isp_osinfo.tfreelist = tmd;
-+ } else {
-+ tmd->cd_lreserved[0].bytes[0] = QOUT_TMD_DONE;
-+ tmd->cd_lreserved[1].ptrs[0] = isp->isp_osinfo.pending_t;
-+ isp->isp_osinfo.pending_t = tmd;
-+ }
-+}
-+
-+int
-+isp_en_dis_lun(struct ispsoftc *isp, int enable, int bus, int tgt, int lun)
-+{
-+ DECLARE_MUTEX_LOCKED(rsem);
-+ u_int16_t rstat;
-+ int rv, enabled, cmd;
-+
-+ /*
-+ * First, we can't do anything unless we have an upper
-+ * level target driver to route commands to.
-+ */
-+ if (isp->isp_osinfo.hcb == 0) {
-+ return (-EINVAL);
-+ }
-+
-+ /*
-+ * Second, check for sanity of enable argument.
-+ */
-+ enabled = ((isp->isp_osinfo.tmflags & (1 << bus)) != 0);
-+ if (enable == 0 && enabled == 0) {
-+ return (-EINVAL);
-+ }
-+
-+ /*
-+ * Third, check to see if we're enabling on fibre channel
-+ * and don't yet have a notion of who the heck we are (no
-+ * loop yet).
-+ */
-+ if (IS_FC(isp) && !enabled) {
-+ ISP_LOCK_SOFTC(isp);
-+ if ((isp->isp_role & ISP_ROLE_TARGET) == 0) {
-+ isp->isp_role |= ISP_ROLE_TARGET;
-+ if (isp_drain_reset(isp, "lun enables")) {
-+ return (-EIO);
-+ }
-+ }
-+ ISP_UNLK_SOFTC(isp);
-+ SEND_THREAD_EVENT(isp, ISP_THREAD_FC_RESCAN, 1);
-+ }
-+
-+ /*
-+ * If this is a wildcard target, select our initiator
-+ * id/loop id for use as what we enable as.
-+ */
-+
-+ if (tgt == -1) {
-+ if (IS_FC(isp)) {
-+ tgt = ((fcparam *)isp->isp_param)->isp_loopid;
-+ } else {
-+ tgt = ((sdparam *)isp->isp_param)->isp_initiator_id;
-+ }
-+ }
-+
-+ /*
-+ * Do some sanity checking on lun arguments.
-+ */
-+
-+ if (lun < 0 || lun >= (IS_FC(isp)? TM_MAX_LUN_FC : TM_MAX_LUN_SCSI)) {
-+ return (-EINVAL);
-+ }
-+
-+ /*
-+ * Snag the semaphore on the return state value on enables/disables.
-+ */
-+ if (down_interruptible(&isp->isp_osinfo.tgt_inisem)) {
-+ return (-EINTR);
-+ }
-+
-+ if (enable && LUN_BTST(isp, bus, lun)) {
-+ up(&isp->isp_osinfo.tgt_inisem);
-+ return (-EEXIST);
-+ }
-+ if (!enable && !LUN_BTST(isp, bus, lun)) {
-+ up(&isp->isp_osinfo.tgt_inisem);
-+ return (-NODEV);
-+ }
-+
-+ if (enable && nolunsenabled(isp, bus)) {
-+ int av = (bus << 31) | ENABLE_TARGET_FLAG;
-+ ISP_LOCK_SOFTC(isp);
-+ rv = isp_control(isp, ISPCTL_TOGGLE_TMODE, &av);
-+ ISP_UNLK_SOFTC(isp);
-+ if (rv) {
-+ up(&isp->isp_osinfo.tgt_inisem);
-+ return (-EIO);
-+ }
-+ }
-+
-+ ISP_LOCK_SOFTC(isp);
-+ isp->isp_osinfo.rsemap = &rsem;
-+ if (enable) {
-+ u_int32_t seq = isp->isp_osinfo.rollinfo++;
-+ int n, ulun = lun;
-+
-+ cmd = RQSTYPE_ENABLE_LUN;
-+ n = DFLT_INOT_CNT;
-+ if (IS_FC(isp) && lun != 0) {
-+ cmd = RQSTYPE_MODIFY_LUN;
-+ n = 0;
-+ /*
-+ * For SCC firmware, we only deal with setting
-+ * (enabling or modifying) lun 0.
-+ */
-+ ulun = 0;
-+ }
-+ rstat = LUN_ERR;
-+ if (isp_lun_cmd(isp, cmd, bus, tgt, ulun, DFLT_CMND_CNT, n, seq)) {
-+ isp_prt(isp, ISP_LOGERR, "isp_lun_cmd failed");
-+ goto out;
-+ }
-+ ISP_UNLK_SOFTC(isp);
-+ down(isp->isp_osinfo.rsemap);
-+ ISP_LOCK_SOFTC(isp);
-+ isp->isp_osinfo.rsemap = NULL;
-+ rstat = isp->isp_osinfo.rstatus;
-+ if (rstat != LUN_OK) {
-+ isp_prt(isp, ISP_LOGERR, "MODIFY/ENABLE LUN returned 0x%x", rstat);
-+ goto out;
-+ }
-+ } else {
-+ int n, ulun = lun;
-+ u_int32_t seq;
-+
-+ rstat = LUN_ERR;
-+ seq = isp->isp_osinfo.rollinfo++;
-+ cmd = -RQSTYPE_MODIFY_LUN;
-+
-+ n = DFLT_INOT_CNT;
-+ if (IS_FC(isp) && lun != 0) {
-+ n = 0;
-+ /*
-+ * For SCC firmware, we only deal with setting
-+ * (enabling or modifying) lun 0.
-+ */
-+ ulun = 0;
-+ }
-+ if (isp_lun_cmd(isp, cmd, bus, tgt, ulun, DFLT_CMND_CNT, n, seq)) {
-+ isp_prt(isp, ISP_LOGERR, "isp_lun_cmd failed");
-+ goto out;
-+ }
-+ ISP_UNLK_SOFTC(isp);
-+ down(isp->isp_osinfo.rsemap);
-+ ISP_LOCK_SOFTC(isp);
-+ isp->isp_osinfo.rsemap = NULL;
-+ rstat = isp->isp_osinfo.rstatus;
-+ if (rstat != LUN_OK) {
-+ isp_prt(isp, ISP_LOGERR, "MODIFY LUN returned 0x%x", rstat);
-+ goto out;
-+ }
-+ if (IS_FC(isp) && lun) {
-+ goto out;
-+ }
-+ seq = isp->isp_osinfo.rollinfo++;
-+ isp->isp_osinfo.rsemap = &rsem;
-+
-+ rstat = LUN_ERR;
-+ cmd = -RQSTYPE_ENABLE_LUN;
-+ if (isp_lun_cmd(isp, cmd, bus, tgt, lun, 0, 0, seq)) {
-+ isp_prt(isp, ISP_LOGERR, "isp_lun_cmd failed");
-+ goto out;
-+ }
-+ ISP_UNLK_SOFTC(isp);
-+ down(isp->isp_osinfo.rsemap);
-+ ISP_LOCK_SOFTC(isp);
-+ isp->isp_osinfo.rsemap = NULL;
-+ rstat = isp->isp_osinfo.rstatus;
-+ if (rstat != LUN_OK) {
-+ isp_prt(isp, ISP_LOGERR, "DISABLE LUN returned 0x%x", rstat);
-+ goto out;
-+ }
-+ }
-+out:
-+
-+ if (rstat != LUN_OK) {
-+ isp_prt(isp, ISP_LOGERR, "lun %d %sable failed", lun,
-+ (enable) ? "en" : "dis");
-+ ISP_UNLK_SOFTC(isp);
-+ up(&isp->isp_osinfo.tgt_inisem);
-+ return (-EIO);
-+ } else {
-+ isp_prt(isp, ISP_LOGINFO,
-+ "lun %d now %sabled for target mode on channel %d", lun,
-+ (enable)? "en" : "dis", bus);
-+ if (enable == 0) {
-+ LUN_BCLR(isp, bus, lun);
-+ if (nolunsenabled(isp, bus)) {
-+ int av = bus << 31;
-+ rv = isp_control(isp, ISPCTL_TOGGLE_TMODE, &av);
-+ if (rv) {
-+ isp_prt(isp, ISP_LOGERR,
-+ "failed to disable target mode on channel %d", bus);
-+ /* but proceed */
-+ ISP_UNLK_SOFTC(isp);
-+ return (-EIO);
-+ }
-+ isp->isp_osinfo.tmflags &= ~(1 << bus);
-+ isp->isp_role &= ~ISP_ROLE_TARGET;
-+ if (IS_FC(isp)) {
-+ if (isp_drain_reset(isp, "lun disables")) {
-+ return (-EIO);
-+ }
-+ if ((isp->isp_role & ISP_ROLE_INITIATOR) != 0) {
-+ ISP_UNLK_SOFTC(isp);
-+ SEND_THREAD_EVENT(isp, ISP_THREAD_FC_RESCAN, 1);
-+ ISP_LOCK_SOFTC(isp);
-+ }
-+ }
-+ }
-+ } else {
-+ isp->isp_osinfo.tmflags |= (1 << bus);
-+ LUN_BSET(isp, bus, lun);
-+ }
-+ ISP_UNLK_SOFTC(isp);
-+ up(&isp->isp_osinfo.tgt_inisem);
-+ return (0);
-+ }
-+}
-+#endif
-+
-+#ifdef ISP_PRIVATE_ASYNC
-+#define ISP_ASYNC isp_async_level1
-+#else
-+#define ISP_ASYNC isp_async
-+#endif
-+
-+int
-+ISP_ASYNC(struct ispsoftc *isp, ispasync_t cmd, void *arg)
-+{
-+ switch (cmd) {
-+ case ISPASYNC_NEW_TGT_PARAMS:
-+ if (IS_SCSI(isp)) {
-+ sdparam *sdp = isp->isp_param;
-+ char *wt;
-+ int mhz, flags, bus, tgt, period;
-+
-+ tgt = *((int *) arg);
-+ bus = (tgt >> 16) & 0xffff;
-+ tgt &= 0xffff;
-+
-+ sdp += bus;
-+ flags = sdp->isp_devparam[tgt].actv_flags;
-+ period = sdp->isp_devparam[tgt].actv_period;
-+ if ((flags & DPARM_SYNC) && period &&
-+ (sdp->isp_devparam[tgt].actv_offset) != 0) {
-+ if (sdp->isp_lvdmode || period < 0xc) {
-+ switch (period) {
-+ case 0x9:
-+ mhz = 80;
-+ break;
-+ case 0xa:
-+ mhz = 40;
-+ break;
-+ case 0xb:
-+ mhz = 33;
-+ break;
-+ case 0xc:
-+ mhz = 25;
-+ break;
-+ default:
-+ mhz = 1000 / (period * 4);
-+ break;
-+ }
-+ } else {
-+ mhz = 1000 / (period * 4);
-+ }
-+ } else {
-+ mhz = 0;
-+ }
-+ switch (flags & (DPARM_WIDE|DPARM_TQING)) {
-+ case DPARM_WIDE:
-+ wt = ", 16 bit wide";
-+ break;
-+ case DPARM_TQING:
-+ wt = ", Tagged Queueing Enabled";
-+ break;
-+ case DPARM_WIDE|DPARM_TQING:
-+ wt = ", 16 bit wide, Tagged Queueing Enabled";
-+ break;
-+ default:
-+ wt = " ";
-+ break;
-+ }
-+ if (mhz) {
-+ isp_prt(isp, ISP_LOGINFO,
-+ "Channel %d Target %d at %dMHz Max Offset %d%s",
-+ bus, tgt, mhz, sdp->isp_devparam[tgt].actv_offset, wt);
-+ } else {
-+ isp_prt(isp, ISP_LOGINFO, "Channel %d Target %d Async Mode%s",
-+ bus, tgt, wt);
-+ }
-+ }
-+ break;
-+ case ISPASYNC_LIP:
-+ isp_prt(isp, ISP_LOGINFO, "LIP Received");
-+ break;
-+ case ISPASYNC_LOOP_RESET:
-+ isp_prt(isp, ISP_LOGINFO, "Loop Reset Received");
-+ break;
-+ case ISPASYNC_BUS_RESET:
-+ isp_prt(isp, ISP_LOGINFO, "SCSI bus %d reset detected", *((int *) arg));
-+ break;
-+ case ISPASYNC_LOOP_DOWN:
-+ isp_prt(isp, ISP_LOGINFO, "Loop DOWN");
-+ break;
-+ case ISPASYNC_LOOP_UP:
-+ isp_prt(isp, ISP_LOGINFO, "Loop UP");
-+ break;
-+ case ISPASYNC_PROMENADE:
-+ {
-+ fcparam *fcp = isp->isp_param;
-+ struct lportdb *lp;
-+ int tgt;
-+
-+ tgt = *((int *) arg);
-+ lp = &fcp->portdb[tgt];
-+
-+ if (lp->valid) {
-+ isp_prt(isp, ISP_LOGINFO,
-+ "ID %d (Loop 0x%x) Port WWN 0x%08x%08x @ 0x%x arrived, role %s",
-+ tgt, lp->loopid, (unsigned int) (lp->port_wwn >> 32),
-+ (unsigned int) (lp->port_wwn & 0xffffffff), lp->portid,
-+ class3_roles[fcp->portdb[tgt].roles]);
-+ } else {
-+ isp_prt(isp, ISP_LOGINFO,
-+ "ID %d (Loop 0x%x) Port WWN 0x%08x%08x @ 0x%x departed", tgt,
-+ lp->loopid, (unsigned int) (lp->port_wwn >> 32),
-+ (unsigned int) (lp->port_wwn & 0xffffffff), lp->portid);
-+#ifdef DEVICE_POLICY_IS_FLUID
-+ MEMZERO((void *) lp, sizeof (*lp));
-+#endif
-+ }
-+ break;
-+ }
-+ case ISPASYNC_CHANGE_NOTIFY:
-+ if (arg == ISPASYNC_CHANGE_PDB) {
-+ isp_prt(isp, ISP_LOGINFO,
-+ "Port Database Changed");
-+ } else if (arg == ISPASYNC_CHANGE_SNS) {
-+ isp_prt(isp, ISP_LOGINFO,
-+ "Name Server Database Changed");
-+ }
-+ SEND_THREAD_EVENT(isp, ISP_THREAD_FC_RESCAN, 0);
-+ break;
-+ case ISPASYNC_FABRIC_DEV:
-+ {
-+ int target, base, lim;
-+ fcparam *fcp = isp->isp_param;
-+ struct lportdb *lp = NULL;
-+ struct lportdb *clp = (struct lportdb *) arg;
-+ char *pt;
-+
-+ switch (clp->port_type) {
-+ case 1:
-+ pt = " N_Port";
-+ break;
-+ case 2:
-+ pt = " NL_Port";
-+ break;
-+ case 3:
-+ pt = "F/NL_Port";
-+ break;
-+ case 0x7f:
-+ pt = " Nx_Port";
-+ break;
-+ case 0x81:
-+ pt = " F_port";
-+ break;
-+ case 0x82:
-+ pt = " FL_Port";
-+ break;
-+ case 0x84:
-+ pt = " E_port";
-+ break;
-+ default:
-+ pt = " ";
-+ break;
-+ }
-+
-+ isp_prt(isp, ISP_LOGINFO,
-+ "%s Fabric Device @ PortID 0x%x", pt, clp->portid);
-+
-+ /*
-+ * If we don't have an initiator role we bail.
-+ *
-+ * We just use ISPASYNC_FABRIC_DEV for announcement purposes.
-+ */
-+
-+ if ((isp->isp_role & ISP_ROLE_INITIATOR) == 0) {
-+ break;
-+ }
-+
-+ /*
-+ * Is this entry for us? If so, we bail.
-+ */
-+
-+ if (fcp->isp_portid == clp->portid) {
-+ break;
-+ }
-+
-+ /*
-+ * Else, the default policy is to find room for it in
-+ * our local port database. Later, when we execute
-+ * the call to isp_pdb_sync either this newly arrived
-+ * or already logged in device will be (re)announced.
-+ */
-+
-+ if (fcp->isp_topo == TOPO_FL_PORT)
-+ base = FC_SNS_ID+1;
-+ else
-+ base = 0;
-+
-+ if (fcp->isp_topo == TOPO_N_PORT)
-+ lim = 1;
-+ else
-+ lim = MAX_FC_TARG;
-+
-+ /*
-+ * Is it already in our list?
-+ */
-+ for (target = base; target < lim; target++) {
-+ if (target >= FL_PORT_ID && target <= FC_SNS_ID) {
-+ continue;
-+ }
-+ lp = &fcp->portdb[target];
-+ if (lp->port_wwn == clp->port_wwn &&
-+ lp->node_wwn == clp->node_wwn) {
-+ lp->fabric_dev = 1;
-+ /*
-+ * Propagate possibly new port id.
-+ */
-+ lp->portid = clp->portid;
-+ break;
-+ }
-+ }
-+ if (target < lim) {
-+ break;
-+ }
-+ for (target = base; target < lim; target++) {
-+ if (target >= FL_PORT_ID && target <= FC_SNS_ID) {
-+ continue;
-+ }
-+ lp = &fcp->portdb[target];
-+ if (lp->port_wwn == 0) {
-+ break;
-+ }
-+ }
-+ if (target == lim) {
-+ isp_prt(isp, ISP_LOGWARN,
-+ "out of space for fabric devices");
-+ break;
-+ }
-+ lp->port_type = clp->port_type;
-+ lp->fc4_type = clp->fc4_type;
-+ lp->node_wwn = clp->node_wwn;
-+ lp->port_wwn = clp->port_wwn;
-+ lp->portid = clp->portid;
-+ lp->fabric_dev = 1;
-+ break;
-+ }
-+#ifdef LINUX_ISP_TARGET_MODE
-+ case ISPASYNC_TARGET_MESSAGE:
-+ {
-+ tmd_msg_t *mp = arg;
-+ isp_prt(isp, ISP_LOGTDEBUG2,
-+ "bus %d iid %d tgt %d lun %d ttype %x tval %x msg[0]=%x",
-+ mp->nt_bus, (int) mp->nt_iid, (int) mp->nt_tgt, (int) mp->nt_lun,
-+ mp->nt_tagtype, mp->nt_tagval, mp->nt_msg[0]);
-+ break;
-+ }
-+ case ISPASYNC_TARGET_EVENT:
-+ {
-+ tmd_event_t *ep = arg;
-+ switch (ep->ev_event) {
-+ case ASYNC_CTIO_DONE:
-+ /*
-+ * ACK the interrupt first
-+ */
-+ ISP_WRITE(isp, BIU_SEMA, 0);
-+ ISP_WRITE(isp, HCCR, HCCR_CMD_CLEAR_RISC_INT);
-+ isp_handle_platform_ctio_fastpost(isp, ep->ev_bus);
-+ break;
-+ default:
-+ isp_prt(isp, ISP_LOGTDEBUG2,
-+ "bus %d event code 0x%x", ep->ev_bus, ep->ev_event);
-+ }
-+ break;
-+ }
-+ case ISPASYNC_TARGET_ACTION:
-+ switch (((isphdr_t *)arg)->rqs_entry_type) {
-+ default:
-+ isp_prt(isp, ISP_LOGWARN, "event 0x%x for unhandled target action",
-+ ((isphdr_t *)arg)->rqs_entry_type);
-+ break;
-+ case RQSTYPE_ATIO:
-+ (void) isp_handle_platform_atio(isp, (at_entry_t *) arg);
-+ break;
-+ case RQSTYPE_ATIO2:
-+ (void) isp_handle_platform_atio2(isp, (at2_entry_t *)arg);
-+ break;
-+ case RQSTYPE_CTIO2:
-+ case RQSTYPE_CTIO:
-+ (void) isp_handle_platform_ctio(isp, arg);
-+ break;
-+ case RQSTYPE_ENABLE_LUN:
-+ case RQSTYPE_MODIFY_LUN:
-+ isp->isp_osinfo.rstatus = ((lun_entry_t *)arg)->le_status;
-+ if (isp->isp_osinfo.rsemap) {
-+ up(isp->isp_osinfo.rsemap);
-+ }
-+ break;
-+ }
-+ break;
-+#endif
-+ case ISPASYNC_UNHANDLED_RESPONSE:
-+ break;
-+ case ISPASYNC_FW_CRASH:
-+ {
-+ u_int16_t mbox1, mbox6;
-+ mbox1 = ISP_READ(isp, OUTMAILBOX1);
-+ if (IS_DUALBUS(isp)) {
-+ mbox6 = ISP_READ(isp, OUTMAILBOX6);
-+ } else {
-+ mbox6 = 0;
-+ }
-+ isp_prt(isp, ISP_LOGERR,
-+ "Internal F/W Error on bus %d @ RISC Address 0x%x", mbox6, mbox1);
-+#ifdef ISP_FW_CRASH_DUMP
-+ if (IS_FC(isp)) {
-+ isp->isp_blocked = 1;
-+ SEND_THREAD_EVENT(isp, ISP_THREAD_FW_CRASH_DUMP, 0);
-+ } else {
-+ isp_reinit(isp);
-+ isp_async(isp, ISPASYNC_FW_RESTARTED, NULL);
-+ }
-+#endif
-+ break;
-+ }
-+ case ISPASYNC_FW_RESTARTED:
-+ {
-+ if (IS_FC(isp)) {
-+ SEND_THREAD_EVENT(isp, ISP_THREAD_FC_RESCAN, 0);
-+ }
-+ break;
-+ }
-+ default:
-+ return (-1);
-+ }
-+ return (0);
-+}
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+#include "sd.h"
-+int
-+isplinux_biosparam(Disk *disk, kdev_t n, int ip[])
-+{
-+ int size = disk->capacity;
-+ ip[0] = 64;
-+ ip[1] = 32;
-+ ip[2] = size >> 11;
-+ if (ip[2] > 1024) {
-+ ip[0] = 255;
-+ ip[1] = 63;
-+ ip[2] = size / (ip[0] * ip[1]);
-+ }
-+ return (0);
-+}
-+
-+/*
-+ * Set the queue depth for this device.
-+ */
-+
-+void
-+isplinux_sqd(struct Scsi_Host *host, Scsi_Device *devs)
-+{
-+ while (devs) {
-+ if (devs->host == host && devs->tagged_supported == 0) {
-+ /*
-+ * If this device doesn't support tagged operations, don't waste
-+ * queue space for it, even if it has multiple luns.
-+ */
-+ devs->queue_depth = 2;
-+ } else if (devs->host == host) {
-+ int depth = 2;
-+ struct ispsoftc *isp = (struct ispsoftc *) host->hostdata;
-+
-+ if (IS_SCSI(isp)) {
-+ sdparam *sdp = isp->isp_param;
-+ sdp += devs->channel;
-+ depth = sdp->isp_devparam[devs->id].exc_throttle;
-+ } else {
-+ depth = FCPARAM(isp)->isp_execthrottle;
-+ }
-+ if (isp_throttle) {
-+ /*
-+ * This limit is due to the size of devs->queue_depth
-+ */
-+ depth = (unsigned char) min(isp_throttle, 255);;
-+ }
-+ if (depth < 4) {
-+ depth = 4;
-+ }
-+ devs->queue_depth = depth;
-+ }
-+ devs = devs->next;
-+ }
-+}
-+
-+#else
-+int
-+isplinux_biosparam(struct scsi_device *sdev, struct block_device *n,
-+ sector_t capacity, int ip[])
-+{
-+ int size = capacity;
-+ ip[0] = 64;
-+ ip[1] = 32;
-+ ip[2] = size >> 11;
-+ if (ip[2] > 1024) {
-+ ip[0] = 255;
-+ ip[1] = 63;
-+ ip[2] = size / (ip[0] * ip[1]);
-+ }
-+ return (0);
-+}
-+
-+static int
-+isplinux_slave_configure(Scsi_Device * device)
-+{
-+ if (device->tagged_supported) {
-+ /*
-+ * FIX LATER
-+ */
-+ scsi_adjust_queue_depth(device, MSG_ORDERED_TAG, 63);
-+ }
-+ return 0;
-+}
-+#endif
-+
-+/*
-+ * Periodic watchdog timer.. the main purpose here is to restart
-+ * commands that were pegged on resources, etc...
-+ */
-+void
-+isplinux_timer(unsigned long arg)
-+{
-+ Scsi_Cmnd *Cmnd;
-+ struct ispsoftc *isp = (struct ispsoftc *) arg;
-+
-+ ISP_ILOCK_SOFTC(isp);
-+ if (IS_FC(isp)) {
-+ int rql;
-+ if (isp->isp_role & ISP_ROLE_INITIATOR)
-+ rql = LOOP_READY;
-+ else
-+ rql = LOOP_LSCAN_DONE;
-+ if (isp->isp_fcrswdog || FCPARAM(isp)->isp_fwstate != FW_READY ||
-+ FCPARAM(isp)->isp_loopstate < rql) {
-+ isp->isp_fcrswdog = 0;
-+ if (isp->isp_deadloop == 0 && isp->isp_role != ISP_ROLE_NONE) {
-+ SEND_THREAD_EVENT(isp, ISP_THREAD_FC_RESCAN, 0);
-+ }
-+ }
-+ }
-+ isplinux_runwaitq(isp);
-+ if ((Cmnd = isp->isp_osinfo.dqnext) != NULL) {
-+ isp->isp_osinfo.dqnext = isp->isp_osinfo.dqtail = NULL;
-+ }
-+ if (isp->dogactive) {
-+ isp->isp_osinfo.timer.expires = jiffies + ISP_WATCH_TIME;
-+ add_timer(&isp->isp_osinfo.timer);
-+ }
-+ ISP_IUNLK_SOFTC(isp);
-+ if (Cmnd) {
-+ ISP_LOCK_SCSI_DONE(isp);
-+ while (Cmnd) {
-+ Scsi_Cmnd *f = (Scsi_Cmnd *) Cmnd->host_scribble;
-+ Cmnd->host_scribble = NULL;
-+ /*
-+ * Get around silliness in midlayer.
-+ */
-+ if (host_byte(Cmnd->result) == DID_RESET) {
-+ Cmnd->flags |= IS_RESETTING;
-+ }
-+ (*Cmnd->scsi_done)(Cmnd);
-+ Cmnd = f;
-+ }
-+ ISP_UNLK_SCSI_DONE(isp);
-+ }
-+}
-+
-+void
-+isplinux_mbtimer(unsigned long arg)
-+{
-+ struct ispsoftc *isp = (struct ispsoftc *) arg;
-+ ISP_ILOCK_SOFTC(isp);
-+ if (isp->mbox_waiting) {
-+ isp->mbox_waiting = 0;
-+ up(&isp->mbox_c_sem);
-+ }
-+ ISP_IUNLK_SOFTC(isp);
-+}
-+
-+irqreturn_t
-+isplinux_intr(int irq, void *arg, struct pt_regs *pt)
-+{
-+ struct ispsoftc *isp = arg;
-+ u_int16_t isr, sema, mbox;
-+ Scsi_Cmnd *Cmnd;
-+
-+ ISP_ILOCK_SOFTC(isp);
-+ isp->isp_intcnt++;
-+ if (ISP_READ_ISR(isp, &isr, &sema, &mbox) == 0) {
-+ isp->isp_intbogus++;
-+ ISP_IUNLK_SOFTC(isp);
-+ return IRQ_NONE;
-+ }
-+ isp_intr(isp, isr, sema, mbox);
-+ isplinux_runwaitq(isp);
-+ if ((Cmnd = isp->isp_osinfo.dqnext) != NULL) {
-+ isp->isp_osinfo.dqnext = isp->isp_osinfo.dqtail = NULL;
-+ }
-+#ifdef LINUX_ISP_TARGET_MODE
-+ if (isp->isp_osinfo.pending_t) {
-+ struct tmd_cmd *tmd = isp->isp_osinfo.pending_t;
-+ isp->isp_osinfo.pending_t = NULL;
-+ ISP_IUNLK_SOFTC(isp);
-+ do {
-+ struct tmd_cmd *next = tmd->cd_lreserved[1].ptrs[0];
-+ tmd->cd_lreserved[1].ptrs[0] = NULL;
-+ ISP_PARENT_TARGET(tmd->cd_lreserved[0].bytes[0], tmd);
-+ tmd = next;
-+ } while (tmd != NULL);
-+ } else {
-+ ISP_IUNLK_SOFTC(isp);
-+ }
-+#else
-+ ISP_IUNLK_SOFTC(isp);
-+#endif
-+ if (Cmnd) {
-+ ISP_LOCK_SCSI_DONE(isp);
-+ while (Cmnd) {
-+ Scsi_Cmnd *f = (Scsi_Cmnd *) Cmnd->host_scribble;
-+ Cmnd->host_scribble = NULL;
-+ /*
-+ * Get around silliness in midlayer.
-+ */
-+ if (host_byte(Cmnd->result) == DID_RESET) {
-+ Cmnd->flags |= IS_RESETTING;
-+ }
-+ (*Cmnd->scsi_done)(Cmnd);
-+ Cmnd = f;
-+ }
-+ ISP_UNLK_SCSI_DONE(isp);
-+ }
-+ return IRQ_HANDLED;
-+}
-+
-+static INLINE int
-+isp_parse_rolearg(struct ispsoftc *isp, char *roles)
-+{
-+ char *role = roles;
-+
-+ while (role && *role) {
-+ unsigned int id;
-+ char *eqtok, *commatok, *p, *q;
-+
-+ eqtok = role;
-+ eqtok = strchr(role, '=');
-+ if (eqtok == NULL)
-+ break;
-+ *eqtok = 0;
-+ commatok = strchr(eqtok+1, ',');
-+ if (commatok)
-+ *commatok = 0;
-+ if (strncmp(role, "0x", 2) == 0)
-+ q = role + 2;
-+ else
-+ q = role;
-+ if (*q == '*')
-+ id = isp->isp_osinfo.device_id;
-+ else
-+ id = simple_strtoul(q, &p, 16);
-+ *eqtok = '=';
-+ if (p != q && id == isp->isp_osinfo.device_id) {
-+ p = eqtok + 1;
-+ if (strcmp(p, "none") == 0) {
-+ if (commatok) {
-+ *commatok = ',';
-+ }
-+ return (ISP_ROLE_NONE);
-+ }
-+ if (strcmp(p, "target") == 0) {
-+ if (commatok) {
-+ *commatok = ',';
-+ }
-+ return (ISP_ROLE_TARGET);
-+ }
-+ if (strcmp(p, "initiator") == 0) {
-+ if (commatok) {
-+ *commatok = ',';
-+ }
-+ return (ISP_ROLE_INITIATOR);
-+ }
-+ if (strcmp(p, "both") == 0) {
-+ if (commatok) {
-+ *commatok = ',';
-+ }
-+ return (ISP_ROLE_BOTH);
-+ }
-+ break;
-+ }
-+ if (commatok) {
-+ role = commatok+1;
-+ *commatok = ',';
-+ } else {
-+ break;
-+ }
-+ }
-+ return (ISP_DEFAULT_ROLES);
-+}
-+
-+static INLINE u_int64_t
-+isp_parse_wwnarg(struct ispsoftc *isp, char *wwns)
-+{
-+ char *wwnt = wwns;
-+ u_int64_t wwn = 0;
-+
-+ while (wwn == 0 && wwnt && *wwnt) {
-+ unsigned int id;
-+ char *eqtok, *commatok, *p, *q;
-+
-+ eqtok = wwnt;
-+ eqtok = strchr(wwnt, '=');
-+ if (eqtok == NULL)
-+ break;
-+ *eqtok = 0;
-+ commatok = strchr(eqtok+1, ',');
-+ if (commatok)
-+ *commatok = 0;
-+ if (strncmp(wwnt, "0x", 2) == 0)
-+ q = wwnt + 2;
-+ else
-+ q = wwnt;
-+ id = simple_strtoul(q, &p, 16);
-+ if (p != q && id == isp->isp_osinfo.device_id) {
-+ unsigned long t, t2;
-+ p = eqtok + 1;
-+ while (*p) {
-+ p++;
-+ }
-+ p -= 8;
-+ if (p > eqtok + 1) {
-+ char *q;
-+ char c;
-+ q = p;
-+ t = simple_strtoul(p, &q, 16);
-+ c = *p;
-+ *p = 0;
-+ t2 = simple_strtoul(eqtok+1, NULL, 16);
-+ *p = c;
-+ } else {
-+ t = simple_strtoul(eqtok+1, NULL, 16);
-+ t2 = 0;
-+ }
-+ wwn = (((u_int64_t) t2) << 32) | (u_int64_t) t;
-+ }
-+ *eqtok = '=';
-+ if (commatok) {
-+ wwnt = commatok+1;
-+ *commatok = ',';
-+ } else {
-+ break;
-+ }
-+ }
-+ return (wwn);
-+}
-+
-+void
-+isplinux_common_init(struct ispsoftc *isp)
-+{
-+ /*
-+ * Set up config options, etc...
-+ */
-+ if (isp_debug) {
-+ isp->isp_dblev = isp_debug;
-+ } else {
-+ isp->isp_dblev = ISP_LOGCONFIG|ISP_LOGWARN|ISP_LOGERR;
-+ }
-+
-+ if (isp_nofwreload & (1 << isp->isp_unit)) {
-+ isp->isp_confopts |= ISP_CFG_NORELOAD;
-+ }
-+ if (isp_nonvram & (1 << isp->isp_unit)) {
-+ isp->isp_confopts |= ISP_CFG_NONVRAM;
-+ }
-+ if (IS_FC(isp)) {
-+ if (isp_fcduplex & (1 << isp->isp_unit)) {
-+ isp->isp_confopts |= ISP_CFG_FULL_DUPLEX;
-+ }
-+ isp->isp_defwwpn = isp_parse_wwnarg(isp, isp_wwpns);
-+ if (isp->isp_defwwpn == 0) {
-+ isp->isp_defwwpn = (u_int64_t) 0x400000007F7F7F01;
-+ } else {
-+ isp->isp_confopts |= ISP_CFG_OWNWWPN;
-+ }
-+ isp->isp_defwwnn = isp_parse_wwnarg(isp, isp_wwnns);
-+ if (isp->isp_defwwnn == 0) {
-+ isp->isp_defwwnn = (u_int64_t) 0x400000007F7F7F02;
-+ } else {
-+ isp->isp_confopts |= ISP_CFG_OWNWWNN;
-+ }
-+ isp->isp_osinfo.host->max_id = MAX_FC_TARG;
-+ if (IS_2200(isp) || IS_2300(isp)) {
-+ if (isp_nport_only & (1 << isp->isp_unit)) {
-+ isp->isp_confopts |= ISP_CFG_NPORT_ONLY;
-+ } else if (isp_loop_only & (1 << isp->isp_unit)) {
-+ isp->isp_confopts |= ISP_CFG_LPORT_ONLY;
-+ } else {
-+ isp->isp_confopts |= ISP_CFG_NPORT;
-+ }
-+ }
-+ isp->isp_osinfo.host->this_id = MAX_FC_TARG+1;
-+#ifdef ISP_FW_CRASH_DUMP
-+ if (IS_2200(isp))
-+ FCPARAM(isp)->isp_dump_data =
-+ isp_kalloc(QLA2200_RISC_IMAGE_DUMP_SIZE, GFP_KERNEL);
-+ else if (IS_23XX(isp))
-+ FCPARAM(isp)->isp_dump_data =
-+ isp_kalloc(QLA2300_RISC_IMAGE_DUMP_SIZE, GFP_KERNEL);
-+ if (FCPARAM(isp)->isp_dump_data) {
-+ isp_prt(isp, ISP_LOGCONFIG, "f/w crash dump area allocated");
-+ FCPARAM(isp)->isp_dump_data[0] = 0;
-+ }
-+#endif
-+ if (isp_default_frame_size) {
-+ if (isp_default_frame_size != 512 &&
-+ isp_default_frame_size != 1024 &&
-+ isp_default_frame_size != 2048) {
-+ isp_prt(isp, ISP_LOGERR,
-+ "bad frame size (%d), defaulting to (%d)",
-+ isp_default_frame_size, ICB_DFLT_FRMLEN);
-+ isp_default_frame_size = 0;
-+ }
-+ }
-+ if (isp_default_frame_size) {
-+ isp->isp_confopts |= ISP_CFG_OWNFSZ;
-+ isp->isp_osinfo.storep->fibre_scsi.default_frame_size =
-+ isp_default_frame_size;
-+ } else {
-+ isp->isp_osinfo.storep->fibre_scsi.default_frame_size =
-+ isp_default_frame_size = ICB_DFLT_FRMLEN;
-+ }
-+ if (isp_default_exec_throttle) {
-+ if (isp_default_exec_throttle < 16 ||
-+ isp_default_exec_throttle > 255) {
-+ isp_prt(isp, ISP_LOGERR,
-+ "bad execution throttle size (%d), defaulting to (%d)",
-+ isp_default_exec_throttle, ICB_DFLT_THROTTLE);
-+ isp_default_exec_throttle = 0;
-+ }
-+ }
-+ if (isp_default_exec_throttle) {
-+ isp->isp_confopts |= ISP_CFG_OWNEXCTHROTTLE;
-+ isp->isp_osinfo.storep->fibre_scsi.default_exec_throttle =
-+ isp_default_exec_throttle;
-+ } else {
-+ isp->isp_osinfo.storep->fibre_scsi.default_exec_throttle =
-+ ICB_DFLT_THROTTLE;
-+ }
-+ } else {
-+ isp->isp_osinfo.host->max_id = MAX_TARGETS;
-+ isp->isp_osinfo.host->this_id = 7; /* temp default */
-+ }
-+ isp->isp_role = isp_parse_rolearg(isp, isp_roles);
-+
-+
-+ /*
-+ * Initialize locks
-+ */
-+ ISP_LOCK_INIT(isp);
-+ ISP_TLOCK_INIT(isp);
-+ sema_init(&isp->mbox_sem, 1);
-+ sema_init(&isp->mbox_c_sem, 0);
-+ sema_init(&isp->fcs_sem, 1);
-+
-+#if defined(CONFIG_PROC_FS) && LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
-+ /*
-+ * Initialize any PROCFS stuff
-+ */
-+ isplinux_init_proc(isp);
-+#endif
-+
-+ /*
-+ * Start watchdog timer
-+ */
-+ ISP_LOCK_SOFTC(isp);
-+ init_timer(&isp->isp_osinfo.timer);
-+ isp->isp_osinfo.timer.data = (unsigned long) isp;
-+ isp->isp_osinfo.timer.function = isplinux_timer;
-+ isp->isp_osinfo.timer.expires = jiffies + ISP_WATCH_TIME;
-+ add_timer(&isp->isp_osinfo.timer);
-+ isp->dogactive = 1;
-+ if (IS_FC(isp)) {
-+ DECLARE_MUTEX_LOCKED(sem);
-+ ISP_UNLK_SOFTC(isp);
-+ isp->isp_osinfo.task_ctl_sem = &sem;
-+ kernel_thread(isp_task_thread, isp, 0);
-+ down(&sem);
-+ isp->isp_osinfo.task_ctl_sem = NULL;
-+ ISP_LOCK_SOFTC(isp);
-+ }
-+ isplinux_reinit(isp);
-+#ifdef LINUX_ISP_TARGET_MODE
-+ sema_init(&isp->isp_osinfo.tgt_inisem, 1);
-+#endif
-+#ifdef ISP_TARGET_MODE
-+ isp_attach_target(isp);
-+#endif
-+ ISP_UNLK_SOFTC(isp);
-+}
-+
-+void
-+isplinux_reinit(struct ispsoftc *isp)
-+{
-+ int maxluns = isp_maxluns;
-+ isp_reset(isp);
-+ if (isp->isp_state != ISP_RESETSTATE) {
-+ isp_prt(isp, ISP_LOGERR, "failed to enter RESET state");
-+ return;
-+ }
-+ /*
-+ * Until the midlayer starts using REPORT LUNS to dertermine how many
-+ * luns there are for SCSI-3 devices and sets a reasonable limit for
-+ * SCSI-2 devices, we'll follow this ruleset:
-+ *
-+ * If our isp_maxluns parameter is unchanged from its default, we
-+ * limit ourselves to 8 luns for parallel SCSI, 256 for FC-SCSI.
-+ *
-+ * If somebody has set isp_maxluns away from the fefault, we follow that.
-+ *
-+ * We filter any value through the HBA maximum
-+ */
-+ if (isp_maxluns == 8) {
-+ if (IS_FC(isp)) {
-+ maxluns = 256;
-+ }
-+ }
-+ isp->isp_osinfo.host->max_lun = min(maxluns, ISP_MAX_LUNS(isp));
-+ isp_init(isp);
-+ if (isp->isp_role == ISP_ROLE_NONE) {
-+ return;
-+ }
-+ if (isp->isp_state != ISP_INITSTATE) {
-+ isp_prt(isp, ISP_LOGERR, "failed to enter INIT state");
-+ return;
-+ }
-+ isp->isp_state = ISP_RUNSTATE;
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
-+ isp->isp_osinfo.host->can_queue = isp->isp_maxcmds;
-+#else
-+ isp->isp_osinfo.host->can_queue = min(255, isp->isp_maxcmds);
-+#endif
-+ if (isp->isp_osinfo.host->can_queue == 0)
-+ isp->isp_osinfo.host->can_queue = 1;
-+
-+ if (IS_FC(isp)) {
-+ isp->isp_osinfo.host->this_id = MAX_FC_TARG;
-+ /*
-+ * This is *not* the same as execution throttle- that is set
-+ * in isplinux_sqd and is per-device.
-+ *
-+ * What we try and do here is take how much we can queue at
-+ * a given time and spread it, reasonably, over all the luns
-+ * we expect to run at a time.
-+ */
-+ if (isp_cmd_per_lun) {
-+ isp->isp_osinfo.host->cmd_per_lun = isp_cmd_per_lun;
-+ } else {
-+ /*
-+ * JAWAG.
-+ */
-+ isp->isp_osinfo.host->cmd_per_lun = isp->isp_maxcmds >> 3;
-+ }
-+
-+ /*
-+ * We seem to need a bit of settle time.
-+ */
-+ USEC_DELAY(1 * 1000000);
-+ } else {
-+ int bus;
-+
-+ if (isp_cmd_per_lun) {
-+ isp->isp_osinfo.host->cmd_per_lun = isp_cmd_per_lun;
-+ } else {
-+ /*
-+ * Maximum total commands spread over either 8 targets,
-+ * or 4 targets, 2 luns, etc.
-+ */
-+ isp->isp_osinfo.host->cmd_per_lun = isp->isp_maxcmds >> 3;
-+ }
-+
-+ /*
-+ * No way to give different ID's for the second bus.
-+ */
-+ isp->isp_osinfo.host->this_id = SDPARAM(isp)->isp_initiator_id;
-+ bus = 0;
-+ (void) isp_control(isp, ISPCTL_RESET_BUS, &bus);
-+ if (IS_DUALBUS(isp)) {
-+ bus = 1;
-+ (void) isp_control(isp, ISPCTL_RESET_BUS, &bus);
-+ }
-+ /*
-+ * Bus Reset delay handled by firmware.
-+ */
-+ }
-+}
-+
-+int
-+isp_drain_reset(struct ispsoftc *isp, char *msg)
-+{
-+ isp->isp_blocked = 1;
-+ /*
-+ * Drain active commands.
-+ */
-+ if (isp_drain(isp, msg)) {
-+ isp->isp_failed = 1;
-+ isp->isp_blocked = 0;
-+ return (-1);
-+ }
-+ isp_reinit(isp);
-+ if ((isp->isp_role == ISP_ROLE_NONE && isp->isp_state < ISP_RESETSTATE) ||
-+ (isp->isp_role != ISP_ROLE_NONE && isp->isp_state < ISP_RUNSTATE)) {
-+ isp->isp_blocked = 0;
-+ return (-1);
-+ }
-+ isp->isp_failed = 0;
-+ isp->isp_blocked = 0;
-+ return (0);
-+}
-+
-+int
-+isp_drain(struct ispsoftc *isp, char *whom)
-+{
-+ int nslept;
-+
-+ if (isp->isp_nactive == 0)
-+ return (0);
-+
-+ isp->isp_draining = 1;
-+ nslept = 0;
-+ isp_prt(isp, ISP_LOGDEBUG0, "draining %d commands", isp->isp_nactive);
-+ while (isp->isp_nactive) {
-+ USEC_SLEEP(isp, 100000); /* drops lock */
-+ if (++nslept >= (60 * 10)) { /* 60 seconds */
-+ isp_prt(isp, ISP_LOGERR, "%s: command drain timed out", whom);
-+ isp->isp_draining = 0;
-+ return (-1);
-+ }
-+ }
-+ isp_prt(isp, ISP_LOGDEBUG0, "done draining commands");
-+ isp->isp_draining = 0;
-+ isplinux_runwaitq(isp);
-+ return (0);
-+}
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+#define ISP_THREAD_CAN_EXIT isp->isp_host->loaded_as_module
-+#else
-+#define ISP_THREAD_CAN_EXIT 0
-+#endif
-+
-+static int
-+isp_task_thread(void *arg)
-+{
-+ DECLARE_MUTEX_LOCKED(thread_sleep_semaphore);
-+ struct ispsoftc *isp = arg;
-+ unsigned long flags;
-+ int action, nactions, exit_thread = 0;
-+ isp_thread_action_t curactions[MAX_THREAD_ACTION];
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+ /* XXX: Not really sure why the 2.5.X changes do this */
-+ if (ISP_THREAD_CAN_EXIT) {
-+ siginitsetinv(¤t->blocked, sigmask(SIGHUP));
-+ } else {
-+ siginitsetinv(¤t->blocked, 0);
-+ }
-+ lock_kernel();
-+ daemonize();
-+ sprintf(current->comm, "isp_thrd%d", isp->isp_unit);
-+#else
-+ lock_kernel();
-+ daemonize("isp_thrd%d", isp->isp_unit);
-+#endif
-+ isp->isp_osinfo.task_thread = current;
-+ isp->isp_osinfo.task_request = &thread_sleep_semaphore;
-+ unlock_kernel();
-+
-+ if (isp->isp_osinfo.task_ctl_sem) {
-+ up(isp->isp_osinfo.task_ctl_sem);
-+ }
-+ isp_prt(isp, ISP_LOGDEBUG1, "isp_task_thread starting");
-+
-+ while (exit_thread == 0) {
-+ isp_prt(isp, ISP_LOGDEBUG1, "isp_task_thread sleeping");
-+ down_interruptible(&thread_sleep_semaphore);
-+ if (ISP_THREAD_CAN_EXIT) {
-+ if (signal_pending(current))
-+ break;
-+ }
-+ isp_prt(isp, ISP_LOGDEBUG1, "isp_task_thread running");
-+
-+ spin_lock_irqsave(&isp->isp_osinfo.tlock, flags);
-+ nactions = isp->isp_osinfo.nt_actions;
-+ isp->isp_osinfo.nt_actions = 0;
-+ for (action = 0; action < nactions; action++) {
-+ curactions[action] = isp->isp_osinfo.t_actions[action];
-+ isp->isp_osinfo.t_actions[action].thread_action = 0;
-+ isp->isp_osinfo.t_actions[action].thread_waiter = 0;
-+ }
-+ spin_unlock_irqrestore(&isp->isp_osinfo.tlock, flags);
-+
-+ for (action = 0; action < nactions; action++) {
-+ isp_thread_action_t *tap = &curactions[action];
-+ isp_prt(isp, ISP_LOGDEBUG1, "isp_task_thread[%d]: action %d (%p)",
-+ action, tap->thread_action, tap->thread_waiter);
-+ switch (tap->thread_action) {
-+ case ISP_THREAD_NIL:
-+ break;
-+#ifdef ISP_FW_CRASH_DUMP
-+ case ISP_THREAD_FW_CRASH_DUMP:
-+ ISP_LOCKU_SOFTC(isp);
-+ FCPARAM(isp)->isp_fwstate = FW_CONFIG_WAIT;
-+ FCPARAM(isp)->isp_loopstate = LOOP_NIL;
-+ isp_fw_dump(isp);
-+ SEND_THREAD_EVENT(isp, ISP_THREAD_REINIT, 0);
-+ ISP_UNLKU_SOFTC(isp);
-+ break;
-+#endif
-+ case ISP_THREAD_REINIT:
-+ {
-+ int level;
-+ ISP_LOCKU_SOFTC(isp);
-+ level = (isp->isp_role == ISP_ROLE_NONE)?
-+ ISP_RESETSTATE : ISP_INITSTATE;
-+ isp_reinit(isp);
-+ if (isp->isp_state >= level) {
-+ isp_async(isp, ISPASYNC_FW_RESTARTED, NULL);
-+ } else {
-+ SEND_THREAD_EVENT(isp, ISP_THREAD_REINIT, 0);
-+ }
-+ ISP_UNLKU_SOFTC(isp);
-+ break;
-+ }
-+ case ISP_THREAD_FC_RESCAN:
-+ ISP_LOCKU_SOFTC(isp);
-+ if (isp_fc_runstate(isp, 250000) == 0) {
-+ isp->isp_deadloop = 0;
-+ isp->isp_downcnt = 0;
-+ isp->isp_fcrspend = 0;
-+ isp->isp_blocked = 0;
-+ isplinux_runwaitq(isp);
-+ } else {
-+ /*
-+ * Try again in a little while.
-+ */
-+ isp->isp_fcrspend = 0;
-+ if (++isp->isp_downcnt == isp_deadloop_time) {
-+ isp_prt(isp, ISP_LOGWARN, "assuming loop is dead");
-+ FCPARAM(isp)->loop_seen_once = 0;
-+ isp->isp_deadloop = 1;
-+ isp->isp_downcnt = 0;
-+ isp->isp_blocked = 0; /* unblock anyway */
-+ isplinux_flushwaitq(isp);
-+ } else {
-+ isp->isp_fcrswdog = 1;
-+ }
-+ }
-+ ISP_UNLKU_SOFTC(isp);
-+ break;
-+ case ISP_THREAD_EXIT:
-+ if (ISP_THREAD_CAN_EXIT) {
-+ exit_thread = 1;
-+ }
-+ break;
-+ default:
-+ break;
-+ }
-+ if (tap->thread_waiter) {
-+ isp_prt(isp, ISP_LOGDEBUG1, "isp_task_thread signalling %p",
-+ tap->thread_waiter);
-+ up(tap->thread_waiter);
-+ }
-+ }
-+ }
-+ isp_prt(isp, ISP_LOGDEBUG1, "isp_task_thread exiting");
-+ isp->isp_osinfo.task_request = NULL;
-+ return (0);
-+}
-+
-+void
-+isp_prt(struct ispsoftc *isp, int level, const char *fmt, ...)
-+{
-+ char buf[256];
-+ char *prefl;
-+ va_list ap;
-+
-+ if (level != ISP_LOGALL && (level & isp->isp_dblev) == 0) {
-+ return;
-+ }
-+ if (level & ISP_LOGERR) {
-+ prefl = KERN_ERR "%s: ";
-+ } else if (level & ISP_LOGWARN) {
-+ prefl = KERN_WARNING "%s: ";
-+ } else if (level & ISP_LOGINFO) {
-+ prefl = KERN_NOTICE "%s: ";
-+ } else if (level & ISP_LOGCONFIG) {
-+ prefl = KERN_INFO "%s: ";
-+ } else {
-+ prefl = "%s: ";
-+ }
-+ printk(prefl, isp->isp_name);
-+ va_start(ap, fmt);
-+ vsprintf(buf, fmt, ap);
-+ va_end(ap);
-+ printk("%s\n", buf);
-+}
-+
-+char *
-+isp_snprintf(char *buf, size_t amt, const char *fmt, ...)
-+{
-+ va_list ap;
-+ ARGSUSED(amt);
-+ va_start(ap, fmt);
-+ (void) vsprintf(buf, fmt, ap);
-+ va_end(ap);
-+ return (buf);
-+}
-+
-+#ifdef MODULE
-+#ifndef ISP_LICENSE
-+#define ISP_LICENSE "Dual BSD/GPL"
-+#endif
-+#ifdef MODULE_LICENSE
-+MODULE_LICENSE( ISP_LICENSE );
-+#endif
-+MODULE_PARM(isp_debug, "i");
-+MODULE_PARM(isp_disable, "i");
-+MODULE_PARM(isp_nonvram, "i");
-+MODULE_PARM(isp_nofwreload, "i");
-+MODULE_PARM(isp_maxluns, "i");
-+MODULE_PARM(isp_throttle, "i");
-+MODULE_PARM(isp_cmd_per_lun, "i");
-+MODULE_PARM(isp_roles, "s");
-+MODULE_PARM(isp_fcduplex, "i");
-+MODULE_PARM(isp_wwpns, "s");
-+MODULE_PARM(isp_wwnns, "s");
-+MODULE_PARM(isp_nport_only, "i");
-+MODULE_PARM(isp_loop_only, "i");
-+MODULE_PARM(isp_deadloop_time, "i");
-+MODULE_PARM(isp_xtime, "i");
-+MODULE_PARM(isp_default_frame_size, "i");
-+MODULE_PARM(isp_default_exec_throttle, "i");
-+#endif
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,27)
-+struct proc_dir_entry proc_scsi_qlc = {
-+ PROC_SCSI_QLOGICISP, 3, "isp", S_IFDIR | S_IRUGO | S_IXUGO, 2
-+};
-+#endif
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) || defined(MODULE)
-+Scsi_Host_Template driver_template = QLOGICISP;
-+#include "scsi_module.c"
-+#endif
-+/*
-+ * mode: c
-+ * Local variables:
-+ * c-indent-level: 4
-+ * c-brace-imaginary-offset: 0
-+ * c-brace-offset: -4
-+ * c-argdecl-indent: 4
-+ * c-label-offset: -4
-+ * c-continued-statement-offset: 4
-+ * c-continued-brace-offset: 0
-+ * End:
-+ */
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/scsi/isp/isp_linux.h 2003-07-19 17:06:33.000000000 -0700
-@@ -0,0 +1,1035 @@
-+/* @(#)isp_linux.h 1.51 */
-+/*
-+ * Qlogic ISP SCSI Host Adapter Linux Wrapper Definitions
-+ *---------------------------------------
-+ * Copyright (c) 1998, 1999, 2000, 2001 by Matthew Jacob
-+ * All rights reserved.
-+ *
-+ * Redistribution and use in source and binary forms, with or without
-+ * modification, are permitted provided that the following conditions
-+ * are met:
-+ * 1. Redistributions of source code must retain the above copyright
-+ * notice, this list of conditions, and the following disclaimer,
-+ * without modification, immediately at the beginning of the file.
-+ * 2. The name of the author may not be used to endorse or promote products
-+ * derived from this software without specific prior written permission.
-+ *
-+ * Alternatively, this software may be distributed under the terms of the
-+ * the GNU Public License ("GPL").
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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)
-+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-+ * SUCH DAMAGE.
-+ *
-+ * Matthew Jacob
-+ * Feral Software
-+ * PMB #825
-+ * 5214-F Diamond Hts Blvd
-+ * San Francisco, CA, 94131
-+ * mjacob@feral.com
-+ */
-+
-+#ifndef _ISP_LINUX_H
-+#define _ISP_LINUX_H
-+
-+#include <linux/vmalloc.h>
-+
-+#ifndef ISP_MODULE
-+#define __NO_VERSION__
-+#endif
-+#ifdef LINUX_ISP_TARGET_MODE
-+#define EXPORT_SYMTAB
-+#endif
-+
-+#include <linux/version.h>
-+#ifndef KERNEL_VERSION
-+#define KERNEL_VERSION(v,p,s) (((v)<<16)+(p<<8)+s)
-+#endif
-+#define _KVC KERNEL_VERSION
-+
-+#if LINUX_VERSION_CODE <= _KVC(2,2,0)
-+#error "Linux 2.0 and 2.1 kernels are not supported anymore"
-+#endif
-+#if LINUX_VERSION_CODE >= _KVC(2,3,0) && LINUX_VERSION_CODE < _KVC(2,4,0)
-+#error "Linux 2.3 kernels are not supported"
-+#endif
-+
-+#ifndef UNUSED_PARAMETER
-+#define UNUSED_PARAMETER(x) (void) x
-+#endif
-+
-+#include <linux/autoconf.h>
-+#ifdef CONFIG_SMP
-+#define __SMP__ 1
-+#endif
-+
-+#define COPYIN(u, k, n, m) \
-+ copy_from_user((void*)(k), (const void*)(u), (n))
-+#define COPYOUT(k, u, n, m) \
-+ copy_to_user((void*)(u), (const void*)(k), (n))
-+
-+/*
-+ * Be nice and get ourselves out of the way of other drivers.
-+ * Note that if all the other drivers are there, then the only
-+ * thing we'd attach to that they wouldn't would be the obsolete
-+ * and unavailable 1240 or the 23XX.
-+ */
-+#ifdef CONFIG_SCSI_QLOGIC_ISP
-+#define ISP_DISABLE_1020_SUPPORT 1
-+#endif
-+#ifdef CONFIG_SCSI_QLOGIC_FC
-+#define ISP_DISABLE_2100_SUPPORT 1
-+#define ISP_DISABLE_2200_SUPPORT 1
-+#endif
-+#ifdef CONFIG_SCSI_QLOGIC_1280
-+#define ISP_DISABLE_1080_SUPPORT 1
-+#define ISP_DISABLE_12160_SUPPORT 1
-+#endif
-+
-+#include <linux/module.h>
-+#include <linux/config.h>
-+#include <linux/init.h>
-+#include <linux/types.h>
-+#include <linux/blk.h>
-+#include <linux/blkdev.h>
-+#include <linux/delay.h>
-+#include <linux/ioport.h>
-+#include <linux/mm.h>
-+#include <linux/sched.h>
-+#include <linux/stat.h>
-+#include <linux/pci.h>
-+#include <asm/dma.h>
-+#include <asm/io.h>
-+#include <asm/irq.h>
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
-+#include <linux/smp.h>
-+#include <linux/spinlock.h>
-+#else
-+#include <asm/spinlock.h>
-+#endif
-+#include <asm/system.h>
-+#include <asm/byteorder.h>
-+#include <linux/interrupt.h>
-+#include "scsi.h"
-+#include "hosts.h"
-+
-+#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,2,14)
-+#define DECLARE_MUTEX_LOCKED(sem) struct semaphore sem = MUTEX_LOCKED
-+#define __set_current_state(state_value) \
-+ do { current->state = (state_value); } while (0)
-+static __inline void daemonize(void);
-+static __inline void daemonize(void)
-+{
-+ struct fs_struct *fs;
-+
-+ exit_mm(current);
-+ current->session = 1;
-+ current->pgrp = 1;
-+ current->tty = NULL;
-+ exit_fs(current); /* current->fs->count--; */
-+ fs = init_task.fs;
-+ current->fs = fs;
-+ atomic_inc(&fs->count);
-+}
-+#endif
-+/*
-+ * These bits and pieces of keeping track of Linux versions
-+ * and some of the various foo items for locking/unlocking
-+ * gratefully borrowed from (amongst others) Doug Ledford
-+ * and Gerard Roudier.
-+ */
-+
-+#define PWRB(p, o, r) pci_write_config_byte(p->pci_dev, o, r)
-+#define PWRW(p, o, r) pci_write_config_word(p->pci_dev, o, r)
-+#define PWRL(p, o, r) pci_write_config_dword(p->pci_dev, o, r)
-+#define PRDW(p, o, r) pci_read_config_word(p->pci_dev, o, r)
-+#define PRDD(p, o, r) pci_read_config_dword(p->pci_dev, o, r)
-+#define PRDB(p, o, r) pci_read_config_byte(p->pci_dev, o, r)
-+
-+#ifndef bus_dvma_to_mem
-+#if defined (__alpha__)
-+#define bus_dvma_to_mem(p) ((p) & 0xfffffffful)
-+#else
-+#define bus_dvma_to_mem(p) (p)
-+#endif
-+#endif
-+
-+#if defined (__powerpc__)
-+#undef __pa
-+#define __pa(x) x
-+#endif
-+#if defined (__i386__) && LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
-+#undef __pa
-+#define __pa(x) x
-+#endif
-+#if defined (__sparc__) && LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
-+#undef __pa
-+#define __pa(x) x
-+#endif
-+#if defined (__alpha__) && LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
-+#undef __pa
-+#define __pa(x) x
-+#endif
-+
-+/*
-+ * Efficiency- get rid of SBus code && tests unless we need them.
-+ */
-+#if defined(__sparcv9__ ) || defined(__sparc__)
-+#define ISP_SBUS_SUPPORTED 1
-+#else
-+#define ISP_SBUS_SUPPORTED 0
-+#endif
-+
-+#define ISP_PLATFORM_VERSION_MAJOR 2
-+#define ISP_PLATFORM_VERSION_MINOR 1
-+
-+#ifndef BIG_ENDIAN
-+#define BIG_ENDIAN 4321
-+#endif
-+#ifndef LITTLE_ENDIAN
-+#define LITTLE_ENDIAN 1234
-+#endif
-+
-+#ifdef __BIG_ENDIAN
-+#define BYTE_ORDER BIG_ENDIAN
-+#endif
-+#ifdef __LITTLE_ENDIAN
-+#define BYTE_ORDER LITTLE_ENDIAN
-+#endif
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0)
-+#define DMA_ADDR_T unsigned long
-+#define QLA_SG_C(sg) sg->length
-+#define QLA_SG_A(sg) virt_to_bus(sg->address)
-+#else
-+#define DMA_ADDR_T dma_addr_t
-+#define QLA_SG_C(sg) sg_dma_len(sg)
-+#define QLA_SG_A(sg) sg_dma_address(sg)
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,16)
-+#define DMA_HTYPE_T char *
-+#define QLA_HANDLE(cmd) (cmd)->SCp.ptr
-+#else
-+#define DMA_HTYPE_T dma_addr_t
-+#define QLA_HANDLE(cmd) (cmd)->SCp.dma_handle
-+#endif
-+#endif
-+
-+#define HANDLE_LOOPSTATE_IN_OUTER_LAYERS 1
-+#ifdef min
-+#undef min
-+#endif
-+#ifdef max
-+#undef max
-+#endif
-+
-+
-+/*
-+ * Normally this should be taken care of by typedefs,
-+ * but linux includes are a complete dog's breakfast.
-+ */
-+
-+#define u_int8_t unsigned char
-+#define u_int16_t unsigned short
-+#define u_int32_t unsigned int
-+#if BITS_PER_LONG == 64
-+#define u_int64_t unsigned long
-+#else
-+#define u_int64_t unsigned long long
-+#endif
-+#define int8_t char
-+#define int16_t short
-+#define int32_t int
-+#define u_long unsigned long
-+#define u_int unsigned int
-+#define u_char unsigned char
-+typedef u_long vm_offset_t;
-+
-+#ifdef LINUX_ISP_TARGET_MODE
-+#define DEFAULT_DEVICE_TYPE 3
-+#define NTGT_CMDS 256
-+
-+#define _WIX(isp, b, ix) (((b << 6)) | (ix >> 5))
-+#define _BIX(isp, ix) (1 << (ix & 0x1f))
-+
-+#define LUN_BTST(isp, b, ix) \
-+ (((isp)->isp_osinfo.lunbmap[_WIX(isp, b, ix)] & _BIX(isp, ix)) != 0)
-+
-+#define LUN_BSET(isp, b, ix) \
-+ isp->isp_osinfo.lunbmap[_WIX(isp, b, ix)] |= _BIX(isp, ix)
-+
-+#define LUN_BCLR(isp, b, ix) \
-+ isp->isp_osinfo.lunbmap[_WIX(isp, b, ix)] &= ~_BIX(isp, ix)
-+
-+#endif
-+
-+typedef struct {
-+ enum {
-+ ISP_THREAD_NIL=1,
-+ ISP_THREAD_FC_RESCAN,
-+ ISP_THREAD_REINIT,
-+ ISP_THREAD_FW_CRASH_DUMP,
-+ ISP_THREAD_EXIT
-+ } thread_action;
-+ struct semaphore * thread_waiter;
-+} isp_thread_action_t;
-+#define MAX_THREAD_ACTION 10
-+
-+union pstore;
-+struct isposinfo {
-+ struct ispsoftc * isp_next;
-+ struct Scsi_Host * host;
-+ Scsi_Cmnd *wqnext, *wqtail;
-+ Scsi_Cmnd *dqnext, *dqtail;
-+ union pstore *storep;
-+ char hbaname[16];
-+ unsigned short instance;
-+ unsigned short wqcnt;
-+ unsigned short wqhiwater;
-+ unsigned short hiwater;
-+ struct timer_list timer;
-+ struct timer_list _mbtimer;
-+ struct semaphore _mbox_sem;
-+ struct semaphore _mbox_c_sem;
-+ struct semaphore _fcs_sem;
-+ spinlock_t slock;
-+ unsigned volatile int
-+ _downcnt : 8,
-+ : 15,
-+ _isopen : 1,
-+ _deadloop : 1,
-+ _draining : 1,
-+ _blocked : 1,
-+ _fcrswdog : 1,
-+ _fcrspend : 1,
-+ _dogactive : 1,
-+ _mbox_waiting : 1,
-+ _mbintsok : 1;
-+ void * misc[8]; /* private platform variant usage */
-+ unsigned long _iflags;
-+ struct task_struct * task_thread;
-+ struct semaphore * task_request;
-+ struct semaphore * task_ctl_sem;
-+ spinlock_t tlock;
-+ unsigned int nt_actions;
-+ unsigned int device_id;
-+ isp_thread_action_t t_actions[MAX_THREAD_ACTION];
-+#ifdef LINUX_ISP_TARGET_MODE
-+#define TM_WANTED 0x08
-+#define TM_BUSY 0x04
-+#define TM_TMODE_ENABLED 0x03
-+ u_int32_t rollinfo : 16,
-+ rstatus : 8,
-+ : 3,
-+ hcb : 1,
-+ tmflags : 4;
-+ struct semaphore tgt_inisem;
-+ struct semaphore * rsemap;
-+ /*
-+ * This is very inefficient, but is in fact big enough
-+ * to cover a complete bitmap for Fibre Channel, as well
-+ * as the dual bus SCSI cards. This works out without
-+ * overflow easily because the most you can enable
-+ * for the SCSI cards is 64 luns (x 2 busses).
-+ *
-+ * For Fibre Channel, we can run the max luns up to 16384
-+ * but we'll default to the minimum we can support here.
-+ */
-+#define TM_MAX_LUN_FC 128
-+#define TM_MAX_LUN_SCSI 64
-+ u_int32_t lunbmap[TM_MAX_LUN_FC >> 5];
-+ struct tmd_cmd * pending_t;
-+ struct tmd_cmd * tfreelist;
-+ struct tmd_cmd * pool;
-+#endif
-+};
-+#define mbtimer isp_osinfo._mbtimer
-+#define dogactive isp_osinfo._dogactive
-+#define mbox_sem isp_osinfo._mbox_sem
-+#define mbox_c_sem isp_osinfo._mbox_c_sem
-+#define fcs_sem isp_osinfo._fcs_sem
-+#define mbintsok isp_osinfo._mbintsok
-+#define mbox_waiting isp_osinfo._mbox_waiting
-+#define isp_pbuf isp_osinfo._pbuf
-+#define isp_fcrspend isp_osinfo._fcrspend
-+#define isp_fcrswdog isp_osinfo._fcrswdog
-+#define isp_blocked isp_osinfo._blocked
-+#define isp_draining isp_osinfo._draining
-+#define isp_downcnt isp_osinfo._downcnt
-+#define isp_isopen isp_osinfo._isopen
-+#define isp_deadloop isp_osinfo._deadloop
-+
-+#define iflags isp_osinfo._iflags
-+
-+#define SEND_THREAD_EVENT(isp, action, dowait) \
-+if (isp->isp_osinfo.task_request) { \
-+ unsigned long flags; \
-+ spin_lock_irqsave(&isp->isp_osinfo.tlock, flags); \
-+ if (isp->isp_osinfo.nt_actions >= MAX_THREAD_ACTION) { \
-+ spin_unlock_irqrestore(&isp->isp_osinfo.tlock, flags); \
-+ isp_prt(isp, ISP_LOGERR, "thread event overflow"); \
-+ } else if (action == ISP_THREAD_FC_RESCAN && isp->isp_fcrspend) { \
-+ spin_unlock_irqrestore(&isp->isp_osinfo.tlock, flags); \
-+ } else { \
-+ DECLARE_MUTEX_LOCKED(sem); \
-+ isp_thread_action_t *tap; \
-+ tap = &isp->isp_osinfo.t_actions[isp->isp_osinfo.nt_actions++]; \
-+ tap->thread_action = action; \
-+ if (dowait) \
-+ tap->thread_waiter = &sem; \
-+ else \
-+ tap->thread_waiter = 0; \
-+ if (action == ISP_THREAD_FC_RESCAN) \
-+ isp->isp_fcrspend = 1; \
-+ up(isp->isp_osinfo.task_request); \
-+ spin_unlock_irqrestore(&isp->isp_osinfo.tlock, flags); \
-+ if (dowait) { \
-+ down(&sem); \
-+ isp_prt(isp, ISP_LOGDEBUG1, \
-+ "action %d done from %p", action, &sem); \
-+ } else { \
-+ isp_prt(isp, ISP_LOGDEBUG1, \
-+ "action %d sent", action); \
-+ } \
-+ } \
-+}
-+
-+/*
-+ * Locking macros...
-+ */
-+#define ISP_LOCK_INIT(isp) spin_lock_init(&isp->isp_osinfo.slock)
-+#define ISP_LOCK_SOFTC(isp) { \
-+ unsigned long _flags; \
-+ spin_lock_irqsave(&isp->isp_osinfo.slock, _flags); \
-+ isp->iflags = _flags; \
-+ }
-+#define ISP_UNLK_SOFTC(isp) { \
-+ unsigned long _flags = isp->iflags; \
-+ spin_unlock_irqrestore(&isp->isp_osinfo.slock, _flags); \
-+ }
-+
-+#define ISP_ILOCK_SOFTC ISP_LOCK_SOFTC
-+#define ISP_IUNLK_SOFTC ISP_UNLK_SOFTC
-+#define ISP_IGET_LK_SOFTC ISP_LOCK_SOFTC
-+#define ISP_DROP_LK_SOFTC ISP_UNLK_SOFTC
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0)
-+#define ISP_LOCK_SCSI_DONE(isp) { \
-+ unsigned long _flags; \
-+ spin_lock_irqsave(&io_request_lock, _flags); \
-+ isp->iflags = _flags; \
-+ }
-+#define ISP_UNLK_SCSI_DONE(isp) { \
-+ unsigned long _flags = isp->iflags; \
-+ spin_unlock_irqrestore(&io_request_lock, _flags); \
-+ }
-+#else
-+#define ISP_LOCK_SCSI_DONE(isp) do { } while(0)
-+#define ISP_UNLK_SCSI_DONE(isp) do { } while(0)
-+#endif
-+#define ISP_LOCKU_SOFTC ISP_ILOCK_SOFTC
-+#define ISP_UNLKU_SOFTC ISP_IUNLK_SOFTC
-+#define ISP_TLOCK_INIT(isp) spin_lock_init(&isp->isp_osinfo.tlock)
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+#define ISP_DRIVER_ENTRY_LOCK(isp) spin_unlock_irq(&io_request_lock)
-+#define ISP_DRIVER_EXIT_LOCK(isp) spin_lock_irq(&io_request_lock)
-+#else
-+#define ISP_DRIVER_ENTRY_LOCK(isp) \
-+ spin_unlock_irq(isp->isp_osinfo.host->host_lock)
-+#define ISP_DRIVER_EXIT_LOCK(isp) \
-+ spin_lock_irq(isp->isp_osinfo.host->host_lock)
-+#endif
-+
-+#define ISP_MUST_POLL(isp) (in_interrupt() || isp->mbintsok == 0)
-+/*
-+ * Misc SCSI defines
-+ */
-+#define MSG_SIMPLE_Q_TAG 0x21
-+#define MSG_HEAD_OF_Q_TAG 0x22
-+#define MSG_ORDERED_Q_TAG 0x23
-+
-+/*
-+ * Required Macros/Defines
-+ */
-+
-+#define INLINE __inline
-+
-+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,4,18) && \
-+ defined(CONFIG_HIGHMEM64G) && !defined(LINUX_ISP_TARGET_MODE)
-+#define ISP_DAC_SUPPORTED 1
-+#else
-+#define ISP_DAC_SUPPORTED 0
-+#endif
-+
-+#define ISP2100_SCRLEN 0x800
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0)
-+#define MEMZERO _isp_memzero
-+#define MEMCPY _isp_memcpy
-+#else
-+#define MEMZERO(b, a) memset(b, 0, a)
-+#define MEMCPY memcpy
-+#endif
-+#define SNPRINTF isp_snprintf
-+#define USEC_DELAY _isp_usec_delay
-+#define USEC_SLEEP(isp, x) \
-+ ISP_DROP_LK_SOFTC(isp); \
-+ __set_current_state(TASK_UNINTERRUPTIBLE); \
-+ (void) schedule_timeout(_usec_to_jiffies(x)); \
-+ ISP_IGET_LK_SOFTC(isp)
-+
-+#define NANOTIME_T struct timeval
-+/* for prior to 2.2.19, use do_gettimeofday, and, well, it'll be inaccurate */
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,18)
-+#define GET_NANOTIME(ptr) \
-+ (ptr)->tv_sec = 0, (ptr)->tv_usec = 0, get_fast_time(ptr)
-+#else
-+#define GET_NANOTIME(ptr) \
-+ (ptr)->tv_sec = 0, (ptr)->tv_usec = 0, do_gettimeofday(ptr)
-+#endif
-+#define GET_NANOSEC(x) \
-+ ((u_int64_t) ((((u_int64_t)(x)->tv_sec) * 1000000 + (x)->tv_usec)))
-+#define NANOTIME_SUB _isp_microtime_sub
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0)
-+#define MAXISPREQUEST(isp) 256
-+#else
-+#define MAXISPREQUEST(isp) ((IS_FC(isp) || IS_ULTRA2(isp))? 1024 : 256)
-+#endif
-+
-+#if defined(__i386__)
-+#define MEMORYBARRIER(isp, type, offset, size) barrier()
-+#elif defined(__alpha__)
-+#define MEMORYBARRIER(isp, type, offset, size) mb()
-+#elif defined(__sparc__)
-+#define MEMORYBARRIER(isp, type, offset, size) mb()
-+#elif defined(__powerpc__)
-+#define MEMORYBARRIER(isp, type, offset, size) \
-+ __asm__ __volatile__("eieio" ::: "memory")
-+#else
-+# ifdef mb
-+# define MEMORYBARRIER(isp, type, offset, size) mb()
-+# else
-+# define MEMORYBARRIER(isp, type, offset, size) barrier()
-+# endif
-+#endif
-+
-+#define MBOX_ACQUIRE(isp) \
-+ /* \
-+ * Try and acquire semaphore the easy way first- \
-+ * with our lock already held. \
-+ */ \
-+ if (down_trylock(&isp->mbox_sem)) { \
-+ if (in_interrupt()) { \
-+ mbp->param[0] = MBOX_HOST_INTERFACE_ERROR; \
-+ isp_prt(isp, ISP_LOGERR, "cannot acquire MBOX sema"); \
-+ return; \
-+ } \
-+ ISP_DROP_LK_SOFTC(isp); \
-+ down(&isp->mbox_sem); \
-+ ISP_IGET_LK_SOFTC(isp); \
-+ }
-+
-+#define MBOX_WAIT_COMPLETE(isp) \
-+ if (ISP_MUST_POLL(isp)) { \
-+ int j, lim = 5000000; \
-+ if (isp->isp_mbxwrk0) { \
-+ lim *= 12; \
-+ } \
-+ for (j = 0; j < 5000000; j += 100) { \
-+ u_int16_t isr, sema, mbox; \
-+ if (isp->isp_mboxbsy == 0) { \
-+ break; \
-+ } \
-+ if (ISP_READ_ISR(isp, &isr, &sema, &mbox)) { \
-+ isp_intr(isp, isr, sema, mbox); \
-+ if (isp->isp_mboxbsy == 0) { \
-+ break; \
-+ } \
-+ } \
-+ ISP_DROP_LK_SOFTC(isp); \
-+ udelay(100); \
-+ ISP_IGET_LK_SOFTC(isp); \
-+ } \
-+ if (isp->isp_mboxbsy != 0) { \
-+ isp_prt(isp, ISP_LOGWARN, \
-+ "Polled Mailbox Command (0x%x) Timeout", \
-+ isp->isp_lastmbxcmd); \
-+ isp->isp_mboxbsy = 0; \
-+ } \
-+ } else { \
-+ int lim = (isp->isp_mbxwrk0)? 60 : 5; \
-+ init_timer(&isp->mbtimer); \
-+ isp->mbtimer.data = (unsigned long) isp; \
-+ isp->mbtimer.function = isplinux_mbtimer; \
-+ isp->mbtimer.expires = jiffies + (lim * HZ); \
-+ add_timer(&isp->mbtimer); \
-+ isp->mbox_waiting = 1; \
-+ ISP_DROP_LK_SOFTC(isp); \
-+ down(&isp->mbox_c_sem); \
-+ ISP_IGET_LK_SOFTC(isp); \
-+ isp->mbox_waiting = 0; \
-+ del_timer(&isp->mbtimer); \
-+ if (isp->isp_mboxbsy != 0) { \
-+ isp_prt(isp, ISP_LOGWARN, \
-+ "Interrupting Mailbox Command (0x%x) Timeout",\
-+ isp->isp_lastmbxcmd); \
-+ isp->isp_mboxbsy = 0; \
-+ } \
-+ }
-+
-+#define MBOX_NOTIFY_COMPLETE(isp) \
-+ if (isp->mbox_waiting) { \
-+ isp->mbox_waiting = 0; \
-+ up(&isp->mbox_c_sem); \
-+ } \
-+ isp->isp_mboxbsy = 0
-+
-+#define MBOX_RELEASE(isp) up(&isp->mbox_sem)
-+
-+#define FC_SCRATCH_ACQUIRE(isp) \
-+ /* \
-+ * Try and acquire semaphore the easy way first- \
-+ * with our lock already held. \
-+ */ \
-+ if (in_interrupt()) { \
-+ while (down_trylock(&isp->fcs_sem)) { \
-+ ISP_DROP_LK_SOFTC(isp); \
-+ USEC_DELAY(5000); \
-+ ISP_IGET_LK_SOFTC(isp); \
-+ } \
-+ } else { \
-+ ISP_DROP_LK_SOFTC(isp); \
-+ down(&isp->fcs_sem); \
-+ ISP_IGET_LK_SOFTC(isp); \
-+ }
-+
-+#define FC_SCRATCH_RELEASE(isp) up(&isp->fcs_sem)
-+
-+
-+#ifndef SCSI_GOOD
-+#define SCSI_GOOD 0x0
-+#endif
-+#ifndef SCSI_CHECK
-+#define SCSI_CHECK 0x2
-+#endif
-+#ifndef SCSI_BUSY
-+#define SCSI_BUSY 0x8
-+#endif
-+#ifndef SCSI_QFULL
-+#define SCSI_QFULL 0x28
-+#endif
-+
-+#define XS_T Scsi_Cmnd
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+#define XS_HOST(Cmnd) Cmnd->device->host
-+#define XS_ISP(Cmnd) ((struct ispsoftc *) (Cmnd)->host->hostdata)
-+#define XS_CHANNEL(Cmnd) (Cmnd)->channel
-+#define XS_TGT(Cmnd) (Cmnd)->target
-+#define XS_LUN(Cmnd) (Cmnd)->lun
-+#else
-+#define XS_HOST(Cmnd) Cmnd->device->host
-+#define XS_ISP(Cmnd) \
-+ ((struct ispsoftc *) (Cmnd)->device->host->hostdata)
-+#define XS_CHANNEL(Cmnd) (Cmnd)->device->channel
-+#define XS_TGT(Cmnd) (Cmnd)->device->id
-+#define XS_LUN(Cmnd) (Cmnd)->device->lun
-+#endif
-+#define XS_CDBP(Cmnd) (Cmnd)->cmnd
-+#define XS_CDBLEN(Cmnd) (Cmnd)->cmd_len
-+#define XS_XFRLEN(Cmnd) (Cmnd)->request_bufflen
-+#define XS_TIME(Cmnd) (Cmnd)->timeout
-+#define XS_RESID(Cmnd) (Cmnd)->SCp.this_residual
-+#define XS_STSP(Cmnd) (&(Cmnd)->SCp.Status)
-+#define XS_SNSP(Cmnd) (Cmnd)->sense_buffer
-+#define XS_SNSLEN(Cmnd) (sizeof (Cmnd)->sense_buffer)
-+#define XS_SNSKEY(Cmnd) ((Cmnd)->sense_buffer[2] & 0xf)
-+#define XS_TAG_P(Cmnd) (Cmnd->device->tagged_supported != 0)
-+#define XS_TAG_TYPE(xs) REQFLAG_STAG
-+
-+#define XS_SETERR(xs, v) \
-+ if ((v) == HBA_TGTBSY) { \
-+ (xs)->SCp.Status = SCSI_BUSY; \
-+ } else { \
-+ (xs)->result &= ~0xff0000; \
-+ (xs)->result |= ((v) << 16); \
-+ }
-+
-+# define HBA_NOERROR DID_OK
-+# define HBA_BOTCH DID_ERROR
-+# define HBA_CMDTIMEOUT DID_TIME_OUT
-+# define HBA_SELTIMEOUT DID_NO_CONNECT
-+# define HBA_TGTBSY 123456 /* special handling */
-+# define HBA_BUSRESET DID_RESET
-+# define HBA_ABORTED DID_ABORT
-+# define HBA_DATAOVR DID_ERROR
-+# define HBA_ARQFAIL DID_ERROR
-+
-+#define XS_ERR(xs) host_byte((xs)->result)
-+
-+#define XS_NOERR(xs) host_byte((xs)->result) == DID_OK
-+
-+#define XS_INITERR(xs) (xs)->result = 0, (xs)->SCp.Status = 0
-+
-+#define XS_SAVE_SENSE(Cmnd, sp) \
-+ MEMCPY(&Cmnd->sense_buffer, sp->req_sense_data, \
-+ min(sizeof Cmnd->sense_buffer, sp->req_sense_len))
-+
-+#define XS_SET_STATE_STAT(a, b, c)
-+
-+#define DEFAULT_IID(x) 7
-+#define DEFAULT_LOOPID(x) 111
-+#define DEFAULT_NODEWWN(isp) (isp)->isp_defwwnn
-+#define DEFAULT_PORTWWN(isp) (isp)->isp_defwwpn
-+#define DEFAULT_FRAME_SIZE(isp) \
-+ (IS_SCSI(isp)? 0 : isp->isp_osinfo.storep->fibre_scsi.default_frame_size)
-+#define DEFAULT_EXEC_ALLOC(isp) \
-+ (IS_SCSI(isp)? 0 : isp->isp_osinfo.storep->fibre_scsi.default_exec_alloc)
-+#define ISP_NODEWWN(isp) (isp)->isp_nvramwwnn
-+#define ISP_PORTWWN(isp) (isp)->isp_nvramwwpn
-+
-+#define ISP_IOXPUT_8(isp, s, d) *(d) = s
-+#define ISP_IOXPUT_16(isp, s, d) *(d) = cpu_to_le16(s)
-+#define ISP_IOXPUT_32(isp, s, d) *(d) = cpu_to_le32(s)
-+
-+#define ISP_IOXGET_8(isp, s, d) d = *(s)
-+#define ISP_IOXGET_16(isp, s, d) d = le16_to_cpu(*((u_int16_t *)s))
-+#define ISP_IOXGET_32(isp, s, d) d = le32_to_cpu(*((u_int32_t *)s))
-+
-+#define ISP_SWIZZLE_NVRAM_WORD(isp, rp) *rp = le16_to_cpu(*rp)
-+
-+
-+/*
-+ * Includes of common header files
-+ */
-+#include "ispreg.h"
-+#include "ispvar.h"
-+#include "ispmbox.h"
-+
-+/*
-+ * isp_osinfo definitions, extensions and shorthand.
-+ */
-+
-+/*
-+ * Parameter storage. The order of tags is important- sdparam && fcp
-+ * must come first because isp->isp_params is set to point there...
-+ */
-+union pstore {
-+ struct {
-+ sdparam _sdp[2]; /* they need to be sequential */
-+ u_char psc_opts[2][MAX_TARGETS];
-+ u_char dutydone;
-+ } parallel_scsi;
-+ struct {
-+ fcparam fcp;
-+ u_int64_t wwnn;
-+ u_int64_t wwpn;
-+ u_int64_t nvram_wwnn;
-+ u_int64_t nvram_wwpn;
-+ u_int16_t default_frame_size;
-+ u_int16_t default_exec_throttle;
-+ } fibre_scsi;
-+};
-+#define isp_next isp_osinfo.isp_next
-+#define isp_name isp_osinfo.hbaname
-+#define isp_host isp_osinfo.host
-+#define isp_unit isp_osinfo.instance
-+#define isp_psco isp_osinfo.storep->parallel_scsi.psc_opts
-+#define isp_dutydone isp_osinfo.storep->parallel_scsi.dutydone
-+#define isp_defwwnn isp_osinfo.storep->fibre_scsi.wwnn
-+#define isp_defwwpn isp_osinfo.storep->fibre_scsi.wwpn
-+#define isp_nvramwwnn isp_osinfo.storep->fibre_scsi.nvram_wwnn
-+#define isp_nvramwwpn isp_osinfo.storep->fibre_scsi.nvram_wwpn
-+
-+/*
-+ * Driver prototypes..
-+ */
-+void isplinux_timer(unsigned long);
-+void isplinux_mbtimer(unsigned long);
-+irqreturn_t isplinux_intr(int, void *, struct pt_regs *);
-+void isplinux_common_init(struct ispsoftc *);
-+#ifdef CONFIG_PROC_FS
-+void isplinux_init_proc(struct ispsoftc *);
-+void isplinux_undo_proc(struct ispsoftc *);
-+#endif
-+void isplinux_reinit(struct ispsoftc *);
-+void isplinux_sqd(struct Scsi_Host *, Scsi_Device *);
-+
-+int isp_drain_reset(struct ispsoftc *, char *);
-+int isp_drain(struct ispsoftc *, char *);
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0)
-+static INLINE void _isp_memcpy(void *, void *, size_t);
-+static INLINE void _isp_memzero(void *, size_t);
-+#endif
-+static INLINE u_int64_t _isp_microtime_sub(struct timeval *, struct timeval *);
-+static INLINE void _isp_usec_delay(unsigned int);
-+static INLINE unsigned long _usec_to_jiffies(unsigned int);
-+
-+int isplinux_proc_info(char *, char **, off_t, int, int, int);
-+int isplinux_detect(Scsi_Host_Template *);
-+int isplinux_release(struct Scsi_Host *);
-+#define ISPLINUX_RELEASE isplinux_release
-+const char *isplinux_info(struct Scsi_Host *);
-+int isplinux_queuecommand(Scsi_Cmnd *, void (* done)(Scsi_Cmnd *));
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+int isplinux_biosparam(Disk *, kdev_t, int[]);
-+#else
-+int isplinux_biosparam(struct scsi_device *, struct block_device *,
-+ sector_t, int[]);
-+#endif
-+
-+
-+/*
-+ * Driver wide data...
-+ */
-+extern int isp_debug;
-+extern int isp_unit_seed;
-+extern int isp_disable;
-+extern int isp_nofwreload;
-+extern int isp_nonvram;
-+extern int isp_fcduplex;
-+extern struct ispsoftc *isplist;
-+extern const char *class3_roles[4];
-+
-+/*
-+ * Platform private flags
-+ */
-+#ifndef NULL
-+#define NULL ((void *) 0)
-+#endif
-+
-+#define ISP_WATCH_TIME HZ
-+
-+#ifndef min
-+#define min(a,b) (((a)<(b))?(a):(b))
-+#endif
-+#ifndef max
-+#define max(a, b) (((a) > (b)) ? (a) : (b))
-+#endif
-+#ifndef roundup
-+#define roundup(x, y) ((((x)+((y)-1))/(y))*(y))
-+#endif
-+#ifndef ARGSUSED
-+#define ARGSUSED(x) x = x
-+#endif
-+
-+
-+
-+
-+/*
-+ * Platform specific 'inline' or support functions
-+ */
-+
-+#ifdef __sparc__
-+#define _SBSWAP(isp, b, c) \
-+ if (isp->isp_bustype == ISP_BT_SBUS) { \
-+ u_int8_t tmp = b; \
-+ b = c; \
-+ c = tmp; \
-+ }
-+#else
-+#define _SBSWAP(a, b, c)
-+#endif
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0)
-+static INLINE void
-+_isp_memcpy(void *to, void *from, size_t amt)
-+{
-+ unsigned char *x = to; unsigned char *y = from;
-+ while (amt-- != 0) *x++ = *y++;
-+}
-+
-+static INLINE void
-+_isp_memzero(void *to, size_t amt)
-+{
-+ unsigned char *x = to;
-+ while (amt-- != 0) *x++ = 0;
-+}
-+
-+static INLINE unsigned long IspOrder(int);
-+static INLINE unsigned long
-+IspOrder(int nelem)
-+{
-+ unsigned long order, rsize;
-+
-+ order = 0;
-+ rsize = PAGE_SIZE;
-+ while (rsize < (unsigned long) ISP_QUEUE_SIZE(nelem)) {
-+ order++;
-+ rsize <<= 1;
-+ }
-+ return (order);
-+}
-+#endif
-+
-+static INLINE u_int64_t
-+_isp_microtime_sub(struct timeval *b, struct timeval *a)
-+{
-+ u_int64_t elapsed;
-+ struct timeval x = *b;
-+ x.tv_sec -= a->tv_sec;
-+ x.tv_usec -= a->tv_usec;
-+ if (x.tv_usec < 0) {
-+ x.tv_sec--;
-+ x.tv_usec += 1000000;
-+ }
-+ if (x.tv_usec >= 1000000) {
-+ x.tv_sec++;
-+ x.tv_usec -= 1000000;
-+ }
-+ elapsed = GET_NANOSEC(&x);
-+ if (elapsed == 0)
-+ elapsed++;
-+ if ((int64_t) elapsed < 0) /* !!!! */
-+ return (1000);
-+ return (elapsed * 1000);
-+}
-+
-+static INLINE void
-+_isp_usec_delay(unsigned int usecs)
-+{
-+ while (usecs > 1000) {
-+ mdelay(1);
-+ usecs -= 1000;
-+ }
-+ if (usecs)
-+ udelay(usecs);
-+}
-+
-+static INLINE unsigned long
-+_usec_to_jiffies(unsigned int usecs)
-+{
-+ struct timespec lt;
-+ if (usecs == 0)
-+ usecs++;
-+ lt.tv_sec = 0;
-+ lt.tv_nsec = usecs * 1000;
-+ return (timespec_to_jiffies(<));
-+}
-+
-+#define GetPages(a) __get_dma_pages(GFP_ATOMIC|GFP_DMA, a)
-+#define RlsPages(a, b) free_pages((unsigned long) a, b)
-+
-+char *isp_snprintf(char *, size_t, const char *, ...);
-+
-+static INLINE void *isp_kalloc(size_t, int);
-+static INLINE void *isp_kzalloc(size_t, int);
-+static INLINE void isp_kfree(void *, size_t);
-+
-+static INLINE void *
-+isp_kalloc(size_t size, int flags)
-+{
-+ void *ptr;
-+ if (size > PAGE_SIZE) {
-+ ptr = vmalloc(size);
-+ } else {
-+ ptr = kmalloc(size, flags);
-+ }
-+ return (ptr);
-+}
-+
-+static INLINE void *
-+isp_kzalloc(size_t size, int flags)
-+{
-+ void *ptr = isp_kalloc(size, flags);
-+ if (ptr != NULL){
-+ memset(ptr, 0, size);
-+ }
-+ return (ptr);
-+}
-+
-+static INLINE void
-+isp_kfree(void *ptr, size_t size)
-+{
-+ if (size > PAGE_SIZE) {
-+ vfree(ptr);
-+ } else {
-+ kfree(ptr);
-+ }
-+}
-+
-+/*
-+ * Common inline functions
-+ */
-+
-+#include "isp_inline.h"
-+
-+#ifdef ISP_TARGET_MODE
-+void isp_attach_target(ispsoftc_t *);
-+void isp_detach_target(ispsoftc_t *);
-+int isp_target_async(struct ispsoftc *, int, int);
-+int isp_target_notify(struct ispsoftc *, void *, u_int16_t *);
-+#endif
-+#ifdef LINUX_ISP_TARGET_MODE
-+int isp_en_dis_lun(struct ispsoftc *, int, int, int, int);
-+#endif
-+/*
-+ * Config data
-+ */
-+
-+int isplinux_abort(Scsi_Cmnd *);
-+int isplinux_bdr(Scsi_Cmnd *);
-+int isplinux_sreset(Scsi_Cmnd *);
-+int isplinux_hreset(Scsi_Cmnd *);
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+#define QLOGICISP { \
-+ next: NULL, \
-+ module: NULL, \
-+ proc_info: isplinux_proc_info, \
-+ name: "Qlogic ISP 10X0/2X00", \
-+ detect: isplinux_detect, \
-+ release: ISPLINUX_RELEASE, \
-+ info: isplinux_info, \
-+ queuecommand: isplinux_queuecommand, \
-+ use_new_eh_code: 1, \
-+ eh_abort_handler: isplinux_abort, \
-+ eh_device_reset_handler: isplinux_bdr, \
-+ eh_bus_reset_handler: isplinux_sreset, \
-+ eh_host_reset_handler: isplinux_hreset, \
-+ bios_param: isplinux_biosparam, \
-+ can_queue: 1, \
-+ sg_tablesize: SG_ALL, \
-+ use_clustering: ENABLE_CLUSTERING, \
-+ cmd_per_lun: 1 \
-+}
-+#else
-+#define QLOGICISP { \
-+ module: NULL, \
-+ proc_info: isplinux_proc_info, \
-+ name: "Qlogic ISP 10X0/2X00", \
-+ detect: isplinux_detect, \
-+ release: ISPLINUX_RELEASE, \
-+ info: isplinux_info, \
-+ queuecommand: isplinux_queuecommand, \
-+ eh_abort_handler: isplinux_abort, \
-+ eh_device_reset_handler: isplinux_bdr, \
-+ eh_bus_reset_handler: isplinux_sreset, \
-+ eh_host_reset_handler: isplinux_hreset, \
-+ bios_param: isplinux_biosparam, \
-+ can_queue: 1, \
-+ sg_tablesize: SG_ALL, \
-+ use_clustering: ENABLE_CLUSTERING, \
-+ cmd_per_lun: 1, \
-+ slave_configure: isplinux_slave_configure, \
-+}
-+#endif
-+/*
-+ * mode: c
-+ * Local variables:
-+ * c-indent-level: 4
-+ * c-brace-imaginary-offset: 0
-+ * c-brace-offset: -4
-+ * c-argdecl-indent: 4
-+ * c-label-offset: -4
-+ * c-continued-statement-offset: 4
-+ * c-continued-brace-offset: 0
-+ * End:
-+ */
-+#endif /* _ISP_LINUX_H */
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/scsi/isp/ispmbox.h 2003-07-19 17:06:33.000000000 -0700
-@@ -0,0 +1,938 @@
-+/* @(#)ispmbox.h 1.24 */
-+/*
-+ * Mailbox and Queue Entry Definitions for for Qlogic ISP SCSI adapters.
-+ *
-+ * Copyright (c) 1997, 1998, 1999, 2000 by Matthew Jacob
-+ * All rights reserved.
-+ *
-+ * Redistribution and use in source and binary forms, with or without
-+ * modification, are permitted provided that the following conditions
-+ * are met:
-+ * 1. Redistributions of source code must retain the above copyright
-+ * notice immediately at the beginning of the file, without modification,
-+ * this list of conditions, and the following disclaimer.
-+ * 2. The name of the author may not be used to endorse or promote products
-+ * derived from this software without specific prior written permission.
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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)
-+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-+ * SUCH DAMAGE.
-+ *
-+ */
-+#ifndef _ISPMBOX_H
-+#define _ISPMBOX_H
-+
-+/*
-+ * Mailbox Command Opcodes
-+ */
-+#define MBOX_NO_OP 0x0000
-+#define MBOX_LOAD_RAM 0x0001
-+#define MBOX_EXEC_FIRMWARE 0x0002
-+#define MBOX_DUMP_RAM 0x0003
-+#define MBOX_WRITE_RAM_WORD 0x0004
-+#define MBOX_READ_RAM_WORD 0x0005
-+#define MBOX_MAILBOX_REG_TEST 0x0006
-+#define MBOX_VERIFY_CHECKSUM 0x0007
-+#define MBOX_ABOUT_FIRMWARE 0x0008
-+ /* 9 */
-+ /* a */
-+ /* b */
-+ /* c */
-+ /* d */
-+#define MBOX_CHECK_FIRMWARE 0x000e
-+#define MBOX_READ_RAM_WORD_EXTENDED 0x000f
-+#define MBOX_INIT_REQ_QUEUE 0x0010
-+#define MBOX_INIT_RES_QUEUE 0x0011
-+#define MBOX_EXECUTE_IOCB 0x0012
-+#define MBOX_WAKE_UP 0x0013
-+#define MBOX_STOP_FIRMWARE 0x0014
-+#define MBOX_ABORT 0x0015
-+#define MBOX_ABORT_DEVICE 0x0016
-+#define MBOX_ABORT_TARGET 0x0017
-+#define MBOX_BUS_RESET 0x0018
-+#define MBOX_STOP_QUEUE 0x0019
-+#define MBOX_START_QUEUE 0x001a
-+#define MBOX_SINGLE_STEP_QUEUE 0x001b
-+#define MBOX_ABORT_QUEUE 0x001c
-+#define MBOX_GET_DEV_QUEUE_STATUS 0x001d
-+ /* 1e */
-+#define MBOX_GET_FIRMWARE_STATUS 0x001f
-+#define MBOX_GET_INIT_SCSI_ID 0x0020
-+#define MBOX_GET_SELECT_TIMEOUT 0x0021
-+#define MBOX_GET_RETRY_COUNT 0x0022
-+#define MBOX_GET_TAG_AGE_LIMIT 0x0023
-+#define MBOX_GET_CLOCK_RATE 0x0024
-+#define MBOX_GET_ACT_NEG_STATE 0x0025
-+#define MBOX_GET_ASYNC_DATA_SETUP_TIME 0x0026
-+#define MBOX_GET_SBUS_PARAMS 0x0027
-+#define MBOX_GET_PCI_PARAMS MBOX_GET_SBUS_PARAMS
-+#define MBOX_GET_TARGET_PARAMS 0x0028
-+#define MBOX_GET_DEV_QUEUE_PARAMS 0x0029
-+#define MBOX_GET_RESET_DELAY_PARAMS 0x002a
-+ /* 2b */
-+ /* 2c */
-+ /* 2d */
-+ /* 2e */
-+ /* 2f */
-+#define MBOX_SET_INIT_SCSI_ID 0x0030
-+#define MBOX_SET_SELECT_TIMEOUT 0x0031
-+#define MBOX_SET_RETRY_COUNT 0x0032
-+#define MBOX_SET_TAG_AGE_LIMIT 0x0033
-+#define MBOX_SET_CLOCK_RATE 0x0034
-+#define MBOX_SET_ACT_NEG_STATE 0x0035
-+#define MBOX_SET_ASYNC_DATA_SETUP_TIME 0x0036
-+#define MBOX_SET_SBUS_CONTROL_PARAMS 0x0037
-+#define MBOX_SET_PCI_PARAMETERS 0x0037
-+#define MBOX_SET_TARGET_PARAMS 0x0038
-+#define MBOX_SET_DEV_QUEUE_PARAMS 0x0039
-+#define MBOX_SET_RESET_DELAY_PARAMS 0x003a
-+ /* 3b */
-+ /* 3c */
-+ /* 3d */
-+ /* 3e */
-+ /* 3f */
-+#define MBOX_RETURN_BIOS_BLOCK_ADDR 0x0040
-+#define MBOX_WRITE_FOUR_RAM_WORDS 0x0041
-+#define MBOX_EXEC_BIOS_IOCB 0x0042
-+#define MBOX_SET_FW_FEATURES 0x004a
-+#define MBOX_GET_FW_FEATURES 0x004b
-+#define FW_FEATURE_FAST_POST 0x1
-+#define FW_FEATURE_LVD_NOTIFY 0x2
-+#define FW_FEATURE_RIO_32BIT 0x4
-+#define FW_FEATURE_RIO_16BIT 0x8
-+
-+#define MBOX_INIT_REQ_QUEUE_A64 0x0052
-+#define MBOX_INIT_RES_QUEUE_A64 0x0053
-+
-+#define MBOX_ENABLE_TARGET_MODE 0x0055
-+#define ENABLE_TARGET_FLAG 0x8000
-+#define ENABLE_TQING_FLAG 0x0004
-+#define ENABLE_MANDATORY_DISC 0x0002
-+#define MBOX_GET_TARGET_STATUS 0x0056
-+
-+/* These are for the ISP2X00 FC cards */
-+#define MBOX_GET_LOOP_ID 0x0020
-+#define MBOX_GET_FIRMWARE_OPTIONS 0x0028
-+#define MBOX_SET_FIRMWARE_OPTIONS 0x0038
-+#define MBOX_GET_RESOURCE_COUNT 0x0042
-+#define MBOX_ENHANCED_GET_PDB 0x0047
-+#define MBOX_EXEC_COMMAND_IOCB_A64 0x0054
-+#define MBOX_INIT_FIRMWARE 0x0060
-+#define MBOX_GET_INIT_CONTROL_BLOCK 0x0061
-+#define MBOX_INIT_LIP 0x0062
-+#define MBOX_GET_FC_AL_POSITION_MAP 0x0063
-+#define MBOX_GET_PORT_DB 0x0064
-+#define MBOX_CLEAR_ACA 0x0065
-+#define MBOX_TARGET_RESET 0x0066
-+#define MBOX_CLEAR_TASK_SET 0x0067
-+#define MBOX_ABORT_TASK_SET 0x0068
-+#define MBOX_GET_FW_STATE 0x0069
-+#define MBOX_GET_PORT_NAME 0x006A
-+#define MBOX_GET_LINK_STATUS 0x006B
-+#define MBOX_INIT_LIP_RESET 0x006C
-+#define MBOX_SEND_SNS 0x006E
-+#define MBOX_FABRIC_LOGIN 0x006F
-+#define MBOX_SEND_CHANGE_REQUEST 0x0070
-+#define MBOX_FABRIC_LOGOUT 0x0071
-+#define MBOX_INIT_LIP_LOGIN 0x0072
-+
-+#define MBOX_DRIVER_HEARTBEAT 0x005B
-+#define MBOX_FW_HEARTBEAT 0x005C
-+
-+#define MBOX_GET_SET_DATA_RATE 0x005D /* 23XX only */
-+#define MBGSD_GET_RATE 0
-+#define MBGSD_SET_RATE 1
-+#define MBGSD_ONEGB 0
-+#define MBGSD_TWOGB 1
-+#define MBGSD_AUTO 2
-+
-+
-+#define ISP2100_SET_PCI_PARAM 0x00ff
-+
-+#define MBOX_BUSY 0x04
-+
-+typedef struct {
-+ u_int16_t param[8];
-+} mbreg_t;
-+
-+/*
-+ * Mailbox Command Complete Status Codes
-+ */
-+#define MBOX_COMMAND_COMPLETE 0x4000
-+#define MBOX_INVALID_COMMAND 0x4001
-+#define MBOX_HOST_INTERFACE_ERROR 0x4002
-+#define MBOX_TEST_FAILED 0x4003
-+#define MBOX_COMMAND_ERROR 0x4005
-+#define MBOX_COMMAND_PARAM_ERROR 0x4006
-+#define MBOX_PORT_ID_USED 0x4007
-+#define MBOX_LOOP_ID_USED 0x4008
-+#define MBOX_ALL_IDS_USED 0x4009
-+#define MBOX_NOT_LOGGED_IN 0x400A
-+#define MBLOGALL 0x000f
-+#define MBLOGNONE 0x0000
-+#define MBLOGMASK(x) ((x) & 0xf)
-+
-+/*
-+ * Asynchronous event status codes
-+ */
-+#define ASYNC_BUS_RESET 0x8001
-+#define ASYNC_SYSTEM_ERROR 0x8002
-+#define ASYNC_RQS_XFER_ERR 0x8003
-+#define ASYNC_RSP_XFER_ERR 0x8004
-+#define ASYNC_QWAKEUP 0x8005
-+#define ASYNC_TIMEOUT_RESET 0x8006
-+#define ASYNC_DEVICE_RESET 0x8007
-+#define ASYNC_EXTMSG_UNDERRUN 0x800A
-+#define ASYNC_SCAM_INT 0x800B
-+#define ASYNC_HUNG_SCSI 0x800C
-+#define ASYNC_KILLED_BUS 0x800D
-+#define ASYNC_BUS_TRANSIT 0x800E /* LVD -> HVD, eg. */
-+#define ASYNC_LIP_OCCURRED 0x8010
-+#define ASYNC_LOOP_UP 0x8011
-+#define ASYNC_LOOP_DOWN 0x8012
-+#define ASYNC_LOOP_RESET 0x8013
-+#define ASYNC_PDB_CHANGED 0x8014
-+#define ASYNC_CHANGE_NOTIFY 0x8015
-+#define ASYNC_LIP_F8 0x8016
-+#define ASYNC_CMD_CMPLT 0x8020
-+#define ASYNC_CTIO_DONE 0x8021
-+#define ASYNC_IP_XMIT_DONE 0x8022
-+#define ASYNC_IP_RECV_DONE 0x8023
-+#define ASYNC_IP_BROADCAST 0x8024
-+#define ASYNC_IP_RCVQ_LOW 0x8025
-+#define ASYNC_IP_RCVQ_EMPTY 0x8026
-+#define ASYNC_IP_RECV_DONE_ALIGNED 0x8027
-+#define ASYNC_PTPMODE 0x8030
-+#define ASYNC_RIO1 0x8031
-+#define ASYNC_RIO2 0x8032
-+#define ASYNC_RIO3 0x8033
-+#define ASYNC_RIO4 0x8034
-+#define ASYNC_RIO5 0x8035
-+#define ASYNC_CONNMODE 0x8036
-+#define ISP_CONN_LOOP 1
-+#define ISP_CONN_PTP 2
-+#define ISP_CONN_BADLIP 3
-+#define ISP_CONN_FATAL 4
-+#define ISP_CONN_LOOPBACK 5
-+#define ASYNC_RIO_RESP 0x8040
-+#define ASYNC_RIO_COMP 0x8042
-+/*
-+ * 2.01.31 2200 Only. Need Bit 13 in Mailbox 1 for Set Firmware Options
-+ * mailbox command to enable this.
-+ */
-+#define ASYNC_QFULL_SENT 0x8049
-+
-+/*
-+ * Mailbox Usages
-+ */
-+
-+#define WRITE_REQUEST_QUEUE_IN_POINTER(isp, value) \
-+ ISP_WRITE(isp, isp->isp_rqstinrp, value)
-+
-+#define READ_REQUEST_QUEUE_OUT_POINTER(isp) \
-+ ISP_READ(isp, isp->isp_rqstoutrp)
-+
-+#define READ_RESPONSE_QUEUE_IN_POINTER(isp) \
-+ ISP_READ(isp, isp->isp_respinrp)
-+
-+#define WRITE_RESPONSE_QUEUE_OUT_POINTER(isp, value) \
-+ ISP_WRITE(isp, isp->isp_respoutrp, value)
-+
-+/*
-+ * Command Structure Definitions
-+ */
-+
-+typedef struct {
-+ u_int32_t ds_base;
-+ u_int32_t ds_count;
-+} ispds_t;
-+
-+typedef struct {
-+ u_int32_t ds_base;
-+ u_int32_t ds_basehi;
-+ u_int32_t ds_count;
-+} ispds64_t;
-+
-+#define DSTYPE_32BIT 0
-+#define DSTYPE_64BIT 1
-+typedef struct {
-+ u_int16_t ds_type; /* 0-> ispds_t, 1-> ispds64_t */
-+ u_int32_t ds_segment; /* unused */
-+ u_int32_t ds_base; /* 32 bit address of DSD list */
-+} ispdslist_t;
-+
-+
-+/*
-+ * These elements get swizzled around for SBus instances.
-+ */
-+#define ISP_SWAP8(a, b) { \
-+ u_int8_t tmp; \
-+ tmp = a; \
-+ a = b; \
-+ b = tmp; \
-+}
-+typedef struct {
-+ u_int8_t rqs_entry_type;
-+ u_int8_t rqs_entry_count;
-+ u_int8_t rqs_seqno;
-+ u_int8_t rqs_flags;
-+} isphdr_t;
-+
-+/* RQS Flag definitions */
-+#define RQSFLAG_CONTINUATION 0x01
-+#define RQSFLAG_FULL 0x02
-+#define RQSFLAG_BADHEADER 0x04
-+#define RQSFLAG_BADPACKET 0x08
-+
-+/* RQS entry_type definitions */
-+#define RQSTYPE_REQUEST 0x01
-+#define RQSTYPE_DATASEG 0x02
-+#define RQSTYPE_RESPONSE 0x03
-+#define RQSTYPE_MARKER 0x04
-+#define RQSTYPE_CMDONLY 0x05
-+#define RQSTYPE_ATIO 0x06 /* Target Mode */
-+#define RQSTYPE_CTIO 0x07 /* Target Mode */
-+#define RQSTYPE_SCAM 0x08
-+#define RQSTYPE_A64 0x09
-+#define RQSTYPE_A64_CONT 0x0a
-+#define RQSTYPE_ENABLE_LUN 0x0b /* Target Mode */
-+#define RQSTYPE_MODIFY_LUN 0x0c /* Target Mode */
-+#define RQSTYPE_NOTIFY 0x0d /* Target Mode */
-+#define RQSTYPE_NOTIFY_ACK 0x0e /* Target Mode */
-+#define RQSTYPE_CTIO1 0x0f /* Target Mode */
-+#define RQSTYPE_STATUS_CONT 0x10
-+#define RQSTYPE_T2RQS 0x11
-+#define RQSTYPE_IP_XMIT 0x13
-+#define RQSTYPE_T4RQS 0x15
-+#define RQSTYPE_ATIO2 0x16 /* Target Mode */
-+#define RQSTYPE_CTIO2 0x17 /* Target Mode */
-+#define RQSTYPE_CSET0 0x18
-+#define RQSTYPE_T3RQS 0x19
-+#define RQSTYPE_IP_XMIT_64 0x1b
-+#define RQSTYPE_CTIO4 0x1e /* Target Mode */
-+#define RQSTYPE_CTIO3 0x1f /* Target Mode */
-+#define RQSTYPE_RIO1 0x21
-+#define RQSTYPE_RIO2 0x22
-+#define RQSTYPE_IP_RECV 0x23
-+#define RQSTYPE_IP_RECV_CONT 0x24
-+
-+
-+#define ISP_RQDSEG 4
-+typedef struct {
-+ isphdr_t req_header;
-+ u_int32_t req_handle;
-+ u_int8_t req_lun_trn;
-+ u_int8_t req_target;
-+ u_int16_t req_cdblen;
-+#define req_modifier req_cdblen /* marker packet */
-+ u_int16_t req_flags;
-+ u_int16_t req_reserved;
-+ u_int16_t req_time;
-+ u_int16_t req_seg_count;
-+ u_int8_t req_cdb[12];
-+ ispds_t req_dataseg[ISP_RQDSEG];
-+} ispreq_t;
-+
-+#define ispreq64_t ispreqt3_t /* same as.... */
-+#define ISP_RQDSEG_A64 2
-+
-+/*
-+ * A request packet can also be a marker packet.
-+ */
-+#define SYNC_DEVICE 0
-+#define SYNC_TARGET 1
-+#define SYNC_ALL 2
-+
-+#define ISP_RQDSEG_T2 3
-+typedef struct {
-+ isphdr_t req_header;
-+ u_int32_t req_handle;
-+ u_int8_t req_lun_trn;
-+ u_int8_t req_target;
-+ u_int16_t req_scclun;
-+ u_int16_t req_flags;
-+ u_int16_t _res2;
-+ u_int16_t req_time;
-+ u_int16_t req_seg_count;
-+ u_int8_t req_cdb[16];
-+ u_int32_t req_totalcnt;
-+ ispds_t req_dataseg[ISP_RQDSEG_T2];
-+} ispreqt2_t;
-+
-+#define ISP_RQDSEG_T3 2
-+typedef struct {
-+ isphdr_t req_header;
-+ u_int32_t req_handle;
-+ u_int8_t req_lun_trn;
-+ u_int8_t req_target;
-+ u_int16_t req_scclun;
-+ u_int16_t req_flags;
-+ u_int16_t _res2;
-+ u_int16_t req_time;
-+ u_int16_t req_seg_count;
-+ u_int8_t req_cdb[16];
-+ u_int32_t req_totalcnt;
-+ ispds64_t req_dataseg[ISP_RQDSEG_T3];
-+} ispreqt3_t;
-+
-+/* req_flag values */
-+#define REQFLAG_NODISCON 0x0001
-+#define REQFLAG_HTAG 0x0002
-+#define REQFLAG_OTAG 0x0004
-+#define REQFLAG_STAG 0x0008
-+#define REQFLAG_TARGET_RTN 0x0010
-+
-+#define REQFLAG_NODATA 0x0000
-+#define REQFLAG_DATA_IN 0x0020
-+#define REQFLAG_DATA_OUT 0x0040
-+#define REQFLAG_DATA_UNKNOWN 0x0060
-+
-+#define REQFLAG_DISARQ 0x0100
-+#define REQFLAG_FRC_ASYNC 0x0200
-+#define REQFLAG_FRC_SYNC 0x0400
-+#define REQFLAG_FRC_WIDE 0x0800
-+#define REQFLAG_NOPARITY 0x1000
-+#define REQFLAG_STOPQ 0x2000
-+#define REQFLAG_XTRASNS 0x4000
-+#define REQFLAG_PRIORITY 0x8000
-+
-+typedef struct {
-+ isphdr_t req_header;
-+ u_int32_t req_handle;
-+ u_int8_t req_lun_trn;
-+ u_int8_t req_target;
-+ u_int16_t req_cdblen;
-+ u_int16_t req_flags;
-+ u_int16_t _res1;
-+ u_int16_t req_time;
-+ u_int16_t req_seg_count;
-+ u_int8_t req_cdb[44];
-+} ispextreq_t;
-+
-+#define ISP_CDSEG 7
-+typedef struct {
-+ isphdr_t req_header;
-+ u_int32_t _res1;
-+ ispds_t req_dataseg[ISP_CDSEG];
-+} ispcontreq_t;
-+
-+#define ISP_CDSEG64 5
-+typedef struct {
-+ isphdr_t req_header;
-+ ispds64_t req_dataseg[ISP_CDSEG64];
-+} ispcontreq64_t;
-+
-+typedef struct {
-+ isphdr_t req_header;
-+ u_int32_t req_handle;
-+ u_int16_t req_scsi_status;
-+ u_int16_t req_completion_status;
-+ u_int16_t req_state_flags;
-+ u_int16_t req_status_flags;
-+ u_int16_t req_time;
-+#define req_response_len req_time /* FC only */
-+ u_int16_t req_sense_len;
-+ u_int32_t req_resid;
-+ u_int8_t req_response[8]; /* FC only */
-+ u_int8_t req_sense_data[32];
-+} ispstatusreq_t;
-+
-+typedef struct {
-+ isphdr_t req_header;
-+ u_int8_t req_sense_data[60];
-+} ispstatus_cont_t;
-+
-+/*
-+ * For Qlogic 2X00, the high order byte of SCSI status has
-+ * additional meaning.
-+ */
-+#define RQCS_RU 0x800 /* Residual Under */
-+#define RQCS_RO 0x400 /* Residual Over */
-+#define RQCS_RESID (RQCS_RU|RQCS_RO)
-+#define RQCS_SV 0x200 /* Sense Length Valid */
-+#define RQCS_RV 0x100 /* FCP Response Length Valid */
-+
-+/*
-+ * Completion Status Codes.
-+ */
-+#define RQCS_COMPLETE 0x0000
-+#define RQCS_DMA_ERROR 0x0002
-+#define RQCS_RESET_OCCURRED 0x0004
-+#define RQCS_ABORTED 0x0005
-+#define RQCS_TIMEOUT 0x0006
-+#define RQCS_DATA_OVERRUN 0x0007
-+#define RQCS_DATA_UNDERRUN 0x0015
-+#define RQCS_QUEUE_FULL 0x001C
-+
-+/* 1X00 Only Completion Codes */
-+#define RQCS_INCOMPLETE 0x0001
-+#define RQCS_TRANSPORT_ERROR 0x0003
-+#define RQCS_COMMAND_OVERRUN 0x0008
-+#define RQCS_STATUS_OVERRUN 0x0009
-+#define RQCS_BAD_MESSAGE 0x000a
-+#define RQCS_NO_MESSAGE_OUT 0x000b
-+#define RQCS_EXT_ID_FAILED 0x000c
-+#define RQCS_IDE_MSG_FAILED 0x000d
-+#define RQCS_ABORT_MSG_FAILED 0x000e
-+#define RQCS_REJECT_MSG_FAILED 0x000f
-+#define RQCS_NOP_MSG_FAILED 0x0010
-+#define RQCS_PARITY_ERROR_MSG_FAILED 0x0011
-+#define RQCS_DEVICE_RESET_MSG_FAILED 0x0012
-+#define RQCS_ID_MSG_FAILED 0x0013
-+#define RQCS_UNEXP_BUS_FREE 0x0014
-+#define RQCS_XACT_ERR1 0x0018
-+#define RQCS_XACT_ERR2 0x0019
-+#define RQCS_XACT_ERR3 0x001A
-+#define RQCS_BAD_ENTRY 0x001B
-+#define RQCS_PHASE_SKIPPED 0x001D
-+#define RQCS_ARQS_FAILED 0x001E
-+#define RQCS_WIDE_FAILED 0x001F
-+#define RQCS_SYNCXFER_FAILED 0x0020
-+#define RQCS_LVD_BUSERR 0x0021
-+
-+/* 2X00 Only Completion Codes */
-+#define RQCS_PORT_UNAVAILABLE 0x0028
-+#define RQCS_PORT_LOGGED_OUT 0x0029
-+#define RQCS_PORT_CHANGED 0x002A
-+#define RQCS_PORT_BUSY 0x002B
-+
-+/*
-+ * 1X00 specific State Flags
-+ */
-+#define RQSF_GOT_BUS 0x0100
-+#define RQSF_GOT_TARGET 0x0200
-+#define RQSF_SENT_CDB 0x0400
-+#define RQSF_XFRD_DATA 0x0800
-+#define RQSF_GOT_STATUS 0x1000
-+#define RQSF_GOT_SENSE 0x2000
-+#define RQSF_XFER_COMPLETE 0x4000
-+
-+/*
-+ * 2X00 specific State Flags
-+ * (same as 1X00 except RQSF_GOT_BUS/RQSF_GOT_TARGET are not available)
-+ */
-+#define RQSF_DATA_IN 0x0020
-+#define RQSF_DATA_OUT 0x0040
-+#define RQSF_STAG 0x0008
-+#define RQSF_OTAG 0x0004
-+#define RQSF_HTAG 0x0002
-+/*
-+ * 1X00 Status Flags
-+ */
-+#define RQSTF_DISCONNECT 0x0001
-+#define RQSTF_SYNCHRONOUS 0x0002
-+#define RQSTF_PARITY_ERROR 0x0004
-+#define RQSTF_BUS_RESET 0x0008
-+#define RQSTF_DEVICE_RESET 0x0010
-+#define RQSTF_ABORTED 0x0020
-+#define RQSTF_TIMEOUT 0x0040
-+#define RQSTF_NEGOTIATION 0x0080
-+
-+/*
-+ * 2X00 specific state flags
-+ */
-+/* RQSF_SENT_CDB */
-+/* RQSF_XFRD_DATA */
-+/* RQSF_GOT_STATUS */
-+/* RQSF_XFER_COMPLETE */
-+
-+/*
-+ * 2X00 specific status flags
-+ */
-+/* RQSTF_ABORTED */
-+/* RQSTF_TIMEOUT */
-+#define RQSTF_DMA_ERROR 0x0080
-+#define RQSTF_LOGOUT 0x2000
-+
-+/*
-+ * Miscellaneous
-+ */
-+#ifndef ISP_EXEC_THROTTLE
-+#define ISP_EXEC_THROTTLE 16
-+#endif
-+
-+/*
-+ * About Firmware returns an 'attribute' word in mailbox 6.
-+ */
-+#define ISP_FW_ATTR_TMODE 0x01
-+#define ISP_FW_ATTR_SCCLUN 0x02
-+#define ISP_FW_ATTR_FABRIC 0x04
-+#define ISP_FW_ATTR_CLASS2 0x08
-+#define ISP_FW_ATTR_FCTAPE 0x10
-+#define ISP_FW_ATTR_IP 0x20
-+
-+/*
-+ * Reduced Interrupt Operation Response Queue Entreis
-+ */
-+
-+typedef struct {
-+ isphdr_t req_header;
-+ u_int32_t req_handles[15];
-+} isp_rio1_t;
-+
-+typedef struct {
-+ isphdr_t req_header;
-+ u_int16_t req_handles[30];
-+} isp_rio2_t;
-+
-+/*
-+ * FC (ISP2100) specific data structures
-+ */
-+
-+/*
-+ * Initialization Control Block
-+ *
-+ * Version One (prime) format.
-+ */
-+typedef struct isp_icb {
-+ u_int8_t icb_version;
-+ u_int8_t _reserved0;
-+ u_int16_t icb_fwoptions;
-+ u_int16_t icb_maxfrmlen;
-+ u_int16_t icb_maxalloc;
-+ u_int16_t icb_execthrottle;
-+ u_int8_t icb_retry_count;
-+ u_int8_t icb_retry_delay;
-+ u_int8_t icb_portname[8];
-+ u_int16_t icb_hardaddr;
-+ u_int8_t icb_iqdevtype;
-+ u_int8_t icb_logintime;
-+ u_int8_t icb_nodename[8];
-+ u_int16_t icb_rqstout;
-+ u_int16_t icb_rspnsin;
-+ u_int16_t icb_rqstqlen;
-+ u_int16_t icb_rsltqlen;
-+ u_int16_t icb_rqstaddr[4];
-+ u_int16_t icb_respaddr[4];
-+ u_int16_t icb_lunenables;
-+ u_int8_t icb_ccnt;
-+ u_int8_t icb_icnt;
-+ u_int16_t icb_lunetimeout;
-+ u_int16_t _reserved1;
-+ u_int16_t icb_xfwoptions;
-+ u_int8_t icb_racctimer;
-+ u_int8_t icb_idelaytimer;
-+ u_int16_t icb_zfwoptions;
-+ u_int16_t _reserved2[13];
-+} isp_icb_t;
-+#define ICB_VERSION1 1
-+
-+#define ICBOPT_HARD_ADDRESS 0x0001
-+#define ICBOPT_FAIRNESS 0x0002
-+#define ICBOPT_FULL_DUPLEX 0x0004
-+#define ICBOPT_FAST_POST 0x0008
-+#define ICBOPT_TGT_ENABLE 0x0010
-+#define ICBOPT_INI_DISABLE 0x0020
-+#define ICBOPT_INI_ADISC 0x0040
-+#define ICBOPT_INI_TGTTYPE 0x0080
-+#define ICBOPT_PDBCHANGE_AE 0x0100
-+#define ICBOPT_NOLIP 0x0200
-+#define ICBOPT_SRCHDOWN 0x0400
-+#define ICBOPT_PREVLOOP 0x0800
-+#define ICBOPT_STOP_ON_QFULL 0x1000
-+#define ICBOPT_FULL_LOGIN 0x2000
-+#define ICBOPT_BOTH_WWNS 0x4000
-+#define ICBOPT_EXTENDED 0x8000
-+
-+#define ICBXOPT_CLASS2_ACK0 0x0200
-+#define ICBXOPT_CLASS2 0x0100
-+#define ICBXOPT_LOOP_ONLY (0 << 4)
-+#define ICBXOPT_PTP_ONLY (1 << 4)
-+#define ICBXOPT_LOOP_2_PTP (2 << 4)
-+#define ICBXOPT_PTP_2_LOOP (3 << 4)
-+
-+/*
-+ * The lower 4 bits of the xfwoptions field are the OPERATION MODE bits.
-+ * RIO is not defined for the 23XX cards
-+ */
-+#define ICBXOPT_RIO_OFF 0
-+#define ICBXOPT_RIO_16BIT 1
-+#define ICBXOPT_RIO_32BIT 2
-+#define ICBXOPT_RIO_16BIT_IOCB 3
-+#define ICBXOPT_RIO_32BIT_IOCB 4
-+#define ICBXOPT_ZIO 5
-+
-+#define ICBZOPT_ENA_RDXFR_RDY 0x01
-+#define ICBZOPT_ENA_OOF (1 << 6) /* out of order frame handling */
-+/* These 3 only apply to the 2300 */
-+#define ICBZOPT_RATE_ONEGB (MBGSD_ONEGB << 14)
-+#define ICBZOPT_RATE_TWOGB (MBGSD_TWOGB << 14)
-+#define ICBZOPT_RATE_AUTO (MBGSD_AUTO << 14)
-+
-+
-+#define ICB_MIN_FRMLEN 256
-+#define ICB_MAX_FRMLEN 2112
-+#define ICB_DFLT_FRMLEN 1024
-+#define ICB_DFLT_ALLOC 256
-+#define ICB_DFLT_THROTTLE 16
-+#define ICB_DFLT_RDELAY 5
-+#define ICB_DFLT_RCOUNT 3
-+
-+
-+#define RQRSP_ADDR0015 0
-+#define RQRSP_ADDR1631 1
-+#define RQRSP_ADDR3247 2
-+#define RQRSP_ADDR4863 3
-+
-+
-+#define ICB_NNM0 7
-+#define ICB_NNM1 6
-+#define ICB_NNM2 5
-+#define ICB_NNM3 4
-+#define ICB_NNM4 3
-+#define ICB_NNM5 2
-+#define ICB_NNM6 1
-+#define ICB_NNM7 0
-+
-+#define MAKE_NODE_NAME_FROM_WWN(array, wwn) \
-+ array[ICB_NNM0] = (u_int8_t) ((wwn >> 0) & 0xff), \
-+ array[ICB_NNM1] = (u_int8_t) ((wwn >> 8) & 0xff), \
-+ array[ICB_NNM2] = (u_int8_t) ((wwn >> 16) & 0xff), \
-+ array[ICB_NNM3] = (u_int8_t) ((wwn >> 24) & 0xff), \
-+ array[ICB_NNM4] = (u_int8_t) ((wwn >> 32) & 0xff), \
-+ array[ICB_NNM5] = (u_int8_t) ((wwn >> 40) & 0xff), \
-+ array[ICB_NNM6] = (u_int8_t) ((wwn >> 48) & 0xff), \
-+ array[ICB_NNM7] = (u_int8_t) ((wwn >> 56) & 0xff)
-+
-+/*
-+ * FC-AL Position Map
-+ *
-+ * This is an at most 128 byte map that returns either
-+ * the LILP or Firmware generated list of ports.
-+ *
-+ * We deviate a bit from the returned qlogic format to
-+ * use an extra bit to say whether this was a LILP or
-+ * f/w generated map.
-+ */
-+typedef struct {
-+ u_int8_t fwmap : 1,
-+ count : 7;
-+ u_int8_t map[127];
-+} fcpos_map_t;
-+
-+/*
-+ * Port Data Base Element
-+ */
-+
-+typedef struct {
-+ u_int16_t pdb_options;
-+ u_int8_t pdb_mstate;
-+ u_int8_t pdb_sstate;
-+#define BITS2WORD(x) ((x)[0] << 16 | (x)[3] << 8 | (x)[2])
-+ u_int8_t pdb_hardaddr_bits[4];
-+ u_int8_t pdb_portid_bits[4];
-+ u_int8_t pdb_nodename[8];
-+ u_int8_t pdb_portname[8];
-+ u_int16_t pdb_execthrottle;
-+ u_int16_t pdb_exec_count;
-+ u_int8_t pdb_retry_count;
-+ u_int8_t pdb_retry_delay;
-+ u_int16_t pdb_resalloc;
-+ u_int16_t pdb_curalloc;
-+ u_int16_t pdb_qhead;
-+ u_int16_t pdb_qtail;
-+ u_int16_t pdb_tl_next;
-+ u_int16_t pdb_tl_last;
-+ u_int16_t pdb_features; /* PLOGI, Common Service */
-+ u_int16_t pdb_pconcurrnt; /* PLOGI, Common Service */
-+ u_int16_t pdb_roi; /* PLOGI, Common Service */
-+ u_int8_t pdb_target;
-+ u_int8_t pdb_initiator; /* PLOGI, Class 3 Control Flags */
-+ u_int16_t pdb_rdsiz; /* PLOGI, Class 3 */
-+ u_int16_t pdb_ncseq; /* PLOGI, Class 3 */
-+ u_int16_t pdb_noseq; /* PLOGI, Class 3 */
-+ u_int16_t pdb_labrtflg;
-+ u_int16_t pdb_lstopflg;
-+ u_int16_t pdb_sqhead;
-+ u_int16_t pdb_sqtail;
-+ u_int16_t pdb_ptimer;
-+ u_int16_t pdb_nxt_seqid;
-+ u_int16_t pdb_fcount;
-+ u_int16_t pdb_prli_len;
-+ u_int16_t pdb_prli_svc0;
-+ u_int16_t pdb_prli_svc3;
-+ u_int16_t pdb_loopid;
-+ u_int16_t pdb_il_ptr;
-+ u_int16_t pdb_sl_ptr;
-+} isp_pdb_t;
-+
-+#define PDB_OPTIONS_XMITTING (1<<11)
-+#define PDB_OPTIONS_LNKXMIT (1<<10)
-+#define PDB_OPTIONS_ABORTED (1<<9)
-+#define PDB_OPTIONS_ADISC (1<<1)
-+
-+#define PDB_STATE_DISCOVERY 0
-+#define PDB_STATE_WDISC_ACK 1
-+#define PDB_STATE_PLOGI 2
-+#define PDB_STATE_PLOGI_ACK 3
-+#define PDB_STATE_PRLI 4
-+#define PDB_STATE_PRLI_ACK 5
-+#define PDB_STATE_LOGGED_IN 6
-+#define PDB_STATE_PORT_UNAVAIL 7
-+#define PDB_STATE_PRLO 8
-+#define PDB_STATE_PRLO_ACK 9
-+#define PDB_STATE_PLOGO 10
-+#define PDB_STATE_PLOG_ACK 11
-+
-+#define SVC3_TGT_ROLE 0x10
-+#define SVC3_INI_ROLE 0x20
-+#define SVC3_ROLE_MASK 0x30
-+#define SVC3_ROLE_SHIFT 4
-+
-+/*
-+ * CT definition
-+ *
-+ * This is as the QLogic f/w documentations defines it- which is just opposite,
-+ * bit wise, from what the specification defines it as. Additionally, the
-+ * ct_response and ct_resid (really from FC-GS-2) need to be byte swapped.
-+ */
-+
-+typedef struct {
-+ u_int8_t ct_revision;
-+ u_int8_t ct_portid[3];
-+ u_int8_t ct_fcs_type;
-+ u_int8_t ct_fcs_subtype;
-+ u_int8_t ct_options;
-+ u_int8_t ct_res0;
-+ u_int16_t ct_response;
-+ u_int16_t ct_resid;
-+ u_int8_t ct_res1;
-+ u_int8_t ct_reason;
-+ u_int8_t ct_explanation;
-+ u_int8_t ct_vunique;
-+} ct_hdr_t;
-+#define FS_ACC 0x8002
-+#define FS_RJT 0x8001
-+
-+#define FC4_IP 5 /* ISO/EEC 8802-2 LLC/SNAP "Out of Order Delivery" */
-+#define FC4_SCSI 8 /* SCSI-3 via Fivre Channel Protocol (FCP) */
-+#define FC4_FC_SVC 0x20 /* Fibre Channel Services */
-+
-+#define SNS_GA_NXT 0x100
-+#define SNS_GPN_ID 0x112
-+#define SNS_GNN_ID 0x113
-+#define SNS_GFF_ID 0x11F
-+#define SNS_GID_FT 0x171
-+#define SNS_RFT_ID 0x217
-+typedef struct {
-+ u_int16_t snscb_rblen; /* response buffer length (words) */
-+ u_int16_t snscb_res0;
-+ u_int16_t snscb_addr[4]; /* response buffer address */
-+ u_int16_t snscb_sblen; /* subcommand buffer length (words) */
-+ u_int16_t snscb_res1;
-+ u_int16_t snscb_data[1]; /* variable data */
-+} sns_screq_t; /* Subcommand Request Structure */
-+
-+typedef struct {
-+ u_int16_t snscb_rblen; /* response buffer length (words) */
-+ u_int16_t snscb_res0;
-+ u_int16_t snscb_addr[4]; /* response buffer address */
-+ u_int16_t snscb_sblen; /* subcommand buffer length (words) */
-+ u_int16_t snscb_res1;
-+ u_int16_t snscb_cmd;
-+ u_int16_t snscb_res2;
-+ u_int32_t snscb_res3;
-+ u_int32_t snscb_port;
-+} sns_ga_nxt_req_t;
-+#define SNS_GA_NXT_REQ_SIZE (sizeof (sns_ga_nxt_req_t))
-+
-+typedef struct {
-+ u_int16_t snscb_rblen; /* response buffer length (words) */
-+ u_int16_t snscb_res0;
-+ u_int16_t snscb_addr[4]; /* response buffer address */
-+ u_int16_t snscb_sblen; /* subcommand buffer length (words) */
-+ u_int16_t snscb_res1;
-+ u_int16_t snscb_cmd;
-+ u_int16_t snscb_res2;
-+ u_int32_t snscb_res3;
-+ u_int32_t snscb_portid;
-+} sns_gxn_id_req_t;
-+#define SNS_GXN_ID_REQ_SIZE (sizeof (sns_gxn_id_req_t))
-+
-+typedef struct {
-+ u_int16_t snscb_rblen; /* response buffer length (words) */
-+ u_int16_t snscb_res0;
-+ u_int16_t snscb_addr[4]; /* response buffer address */
-+ u_int16_t snscb_sblen; /* subcommand buffer length (words) */
-+ u_int16_t snscb_res1;
-+ u_int16_t snscb_cmd;
-+ u_int16_t snscb_mword_div_2;
-+ u_int32_t snscb_res3;
-+ u_int32_t snscb_fc4_type;
-+} sns_gid_ft_req_t;
-+#define SNS_GID_FT_REQ_SIZE (sizeof (sns_gid_ft_req_t))
-+
-+typedef struct {
-+ u_int16_t snscb_rblen; /* response buffer length (words) */
-+ u_int16_t snscb_res0;
-+ u_int16_t snscb_addr[4]; /* response buffer address */
-+ u_int16_t snscb_sblen; /* subcommand buffer length (words) */
-+ u_int16_t snscb_res1;
-+ u_int16_t snscb_cmd;
-+ u_int16_t snscb_res2;
-+ u_int32_t snscb_res3;
-+ u_int32_t snscb_port;
-+ u_int32_t snscb_fc4_types[8];
-+} sns_rft_id_req_t;
-+#define SNS_RFT_ID_REQ_SIZE (sizeof (sns_rft_id_req_t))
-+
-+typedef struct {
-+ ct_hdr_t snscb_cthdr;
-+ u_int8_t snscb_port_type;
-+ u_int8_t snscb_port_id[3];
-+ u_int8_t snscb_portname[8];
-+ u_int16_t snscb_data[1]; /* variable data */
-+} sns_scrsp_t; /* Subcommand Response Structure */
-+
-+typedef struct {
-+ ct_hdr_t snscb_cthdr;
-+ u_int8_t snscb_port_type;
-+ u_int8_t snscb_port_id[3];
-+ u_int8_t snscb_portname[8];
-+ u_int8_t snscb_pnlen; /* symbolic port name length */
-+ u_int8_t snscb_pname[255]; /* symbolic port name */
-+ u_int8_t snscb_nodename[8];
-+ u_int8_t snscb_nnlen; /* symbolic node name length */
-+ u_int8_t snscb_nname[255]; /* symbolic node name */
-+ u_int8_t snscb_ipassoc[8];
-+ u_int8_t snscb_ipaddr[16];
-+ u_int8_t snscb_svc_class[4];
-+ u_int8_t snscb_fc4_types[32];
-+ u_int8_t snscb_fpname[8];
-+ u_int8_t snscb_reserved;
-+ u_int8_t snscb_hardaddr[3];
-+} sns_ga_nxt_rsp_t; /* Subcommand Response Structure */
-+#define SNS_GA_NXT_RESP_SIZE (sizeof (sns_ga_nxt_rsp_t))
-+
-+typedef struct {
-+ ct_hdr_t snscb_cthdr;
-+ u_int8_t snscb_wwn[8];
-+} sns_gxn_id_rsp_t;
-+#define SNS_GXN_ID_RESP_SIZE (sizeof (sns_gxn_id_rsp_t))
-+
-+typedef struct {
-+ ct_hdr_t snscb_cthdr;
-+ u_int32_t snscb_fc4_features[32];
-+} sns_gff_id_rsp_t;
-+#define SNS_GFF_ID_RESP_SIZE (sizeof (sns_gff_id_rsp_t))
-+
-+typedef struct {
-+ ct_hdr_t snscb_cthdr;
-+ struct {
-+ u_int8_t control;
-+ u_int8_t portid[3];
-+ } snscb_ports[1];
-+} sns_gid_ft_rsp_t;
-+#define SNS_GID_FT_RESP_SIZE(x) ((sizeof (sns_gid_ft_rsp_t)) + ((x - 1) << 2))
-+
-+#define SNS_RFT_ID_RESP_SIZE (sizeof (ct_hdr_t))
-+
-+#endif /* _ISPMBOX_H */
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/scsi/isp/isp_pci.c 2003-07-19 17:06:34.000000000 -0700
-@@ -0,0 +1,2363 @@
-+/* @(#)isp_pci.c 1.39 */
-+/*
-+ * Qlogic ISP Host Adapter PCI specific probe and attach routines
-+ *---------------------------------------
-+ * Copyright (c) 1998, 1999, 2000, 2001 by Matthew Jacob
-+ * All rights reserved.
-+ *
-+ * Redistribution and use in source and binary forms, with or without
-+ * modification, are permitted provided that the following conditions
-+ * are met:
-+ * 1. Redistributions of source code must retain the above copyright
-+ * notice, this list of conditions, and the following disclaimer,
-+ * without modification, immediately at the beginning of the file.
-+ * 2. The name of the author may not be used to endorse or promote products
-+ * derived from this software without specific prior written permission.
-+ *
-+ * Alternatively, this software may be distributed under the terms of the
-+ * the GNU Public License ("GPL").
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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)
-+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-+ * SUCH DAMAGE.
-+ *
-+ * Matthew Jacob
-+ * Feral Software
-+ * PMB #825
-+ * 5214-F Diamond Hts Blvd
-+ * San Francisco, CA, 94131
-+ * mjacob@feral.com
-+ */
-+
-+#include "isp_linux.h"
-+#if defined(__powerpc__) || defined(__sparc__)
-+static int isp_pci_mapmem = 0xffffffff;
-+#else
-+static int isp_pci_mapmem = 0;
-+#endif
-+#if defined(__sparc__)
-+#undef ioremap_nocache
-+#define ioremap_nocache ioremap
-+#endif
-+static int isplinux_pci_init(struct Scsi_Host *);
-+static u_int16_t isp_pci_rd_reg(struct ispsoftc *, int);
-+static void isp_pci_wr_reg(struct ispsoftc *, int, u_int16_t);
-+#if !(defined(ISP_DISABLE_1080_SUPPORT) && defined(ISP_DISABLE_12160_SUPPORT))
-+static u_int16_t isp_pci_rd_reg_1080(struct ispsoftc *, int);
-+static void isp_pci_wr_reg_1080(struct ispsoftc *, int, u_int16_t);
-+#endif
-+static int
-+isp_pci_rd_isr(struct ispsoftc *, u_int16_t *, u_int16_t *, u_int16_t *);
-+#ifndef ISP_DISABLE_2300_SUPPORT
-+static int
-+isp_pci_rd_isr_2300(struct ispsoftc *, u_int16_t *, u_int16_t *, u_int16_t *);
-+#endif
-+static int isp_pci_mbxdma(struct ispsoftc *);
-+static int
-+isp_pci_dmasetup(struct ispsoftc *, XS_T *, ispreq_t *, u_int16_t *, u_int16_t);
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
-+static void isp_pci_dmateardown(struct ispsoftc *, XS_T *, u_int16_t);
-+#define IS_HIGH_ISP_ADDR(addr) (addr >= (u_int64_t) 0x100000000)
-+#else
-+#define isp_pci_dmateardown NULL
-+#define IS_HIGH_ISP_ADDR(addr) 0
-+#define sg_dma_address(sg) virt_to_bus(sg->address)
-+#define sg_dma_len(sg) sg->length
-+#endif
-+
-+#if ISP_DAC_SUPPORTED == 1
-+#define ISP_A64 1
-+#define HIWD(x) ((x) >> 32)
-+#else
-+#define ISP_A64 0
-+#define HIWD(x) 0
-+#endif
-+#define LOWD(x) x
-+
-+static void isp_pci_reset1(struct ispsoftc *);
-+static void isp_pci_dumpregs(struct ispsoftc *, const char *);
-+
-+#ifndef ISP_CODE_ORG
-+#define ISP_CODE_ORG 0x1000
-+#endif
-+
-+#ifndef ISP_DISABLE_1020_SUPPORT
-+#include "asm_1040.h"
-+#define ISP_1040_RISC_CODE (u_int16_t *) isp_1040_risc_code
-+#else
-+#define ISP_1040_RISC_CODE NULL
-+#endif
-+
-+#ifndef ISP_DISABLE_1080_SUPPORT
-+#include "asm_1080.h"
-+#define ISP_1080_RISC_CODE (u_int16_t *) isp_1080_risc_code
-+#else
-+#define ISP_1080_RISC_CODE NULL
-+#endif
-+
-+#ifndef ISP_DISABLE_12160_SUPPORT
-+#include "asm_12160.h"
-+#define ISP_12160_RISC_CODE (u_int16_t *) isp_12160_risc_code
-+#else
-+#define ISP_12160_RISC_CODE NULL
-+#endif
-+
-+#ifndef ISP_DISABLE_2100_SUPPORT
-+#include "asm_2100.h"
-+#define ISP_2100_RISC_CODE (u_int16_t *) isp_2100_risc_code
-+#else
-+#define ISP_2100_RISC_CODE NULL
-+#endif
-+
-+#ifndef ISP_DISABLE_2200_SUPPORT
-+#include "asm_2200.h"
-+#define ISP_2200_RISC_CODE (u_int16_t *) isp_2200_risc_code
-+#else
-+#define ISP_2200_RISC_CODE NULL
-+#endif
-+
-+#ifndef ISP_DISABLE_2300_SUPPORT
-+#include "asm_2300.h"
-+#define ISP_2300_RISC_CODE (u_int16_t *) isp_2300_risc_code
-+#else
-+#define ISP_2300_RISC_CODE NULL
-+#endif
-+
-+#ifndef ISP_DISABLE_1020_SUPPORT
-+static struct ispmdvec mdvec = {
-+ isp_pci_rd_isr,
-+ isp_pci_rd_reg,
-+ isp_pci_wr_reg,
-+ isp_pci_mbxdma,
-+ isp_pci_dmasetup,
-+ isp_pci_dmateardown,
-+ NULL,
-+ isp_pci_reset1,
-+ isp_pci_dumpregs,
-+ ISP_1040_RISC_CODE,
-+ BIU_BURST_ENABLE|BIU_PCI_CONF1_FIFO_64
-+};
-+#endif
-+
-+#ifndef ISP_DISABLE_1080_SUPPORT
-+static struct ispmdvec mdvec_1080 = {
-+ isp_pci_rd_isr,
-+ isp_pci_rd_reg_1080,
-+ isp_pci_wr_reg_1080,
-+ isp_pci_mbxdma,
-+ isp_pci_dmasetup,
-+ isp_pci_dmateardown,
-+ NULL,
-+ isp_pci_reset1,
-+ isp_pci_dumpregs,
-+ ISP_1080_RISC_CODE,
-+ BIU_BURST_ENABLE|BIU_PCI_CONF1_FIFO_128
-+};
-+#endif
-+
-+#ifndef ISP_DISABLE_12160_SUPPORT
-+static struct ispmdvec mdvec_12160 = {
-+ isp_pci_rd_isr,
-+ isp_pci_rd_reg_1080,
-+ isp_pci_wr_reg_1080,
-+ isp_pci_mbxdma,
-+ isp_pci_dmasetup,
-+ isp_pci_dmateardown,
-+ NULL,
-+ isp_pci_reset1,
-+ isp_pci_dumpregs,
-+ ISP_12160_RISC_CODE,
-+ BIU_BURST_ENABLE|BIU_PCI_CONF1_FIFO_128
-+};
-+#endif
-+
-+#ifndef ISP_DISABLE_2100_SUPPORT
-+static struct ispmdvec mdvec_2100 = {
-+ isp_pci_rd_isr,
-+ isp_pci_rd_reg,
-+ isp_pci_wr_reg,
-+ isp_pci_mbxdma,
-+ isp_pci_dmasetup,
-+ isp_pci_dmateardown,
-+ NULL,
-+ isp_pci_reset1,
-+ isp_pci_dumpregs,
-+ ISP_2100_RISC_CODE
-+};
-+#endif
-+
-+#ifndef ISP_DISABLE_2200_SUPPORT
-+static struct ispmdvec mdvec_2200 = {
-+ isp_pci_rd_isr,
-+ isp_pci_rd_reg,
-+ isp_pci_wr_reg,
-+ isp_pci_mbxdma,
-+ isp_pci_dmasetup,
-+ isp_pci_dmateardown,
-+ NULL,
-+ isp_pci_reset1,
-+ isp_pci_dumpregs,
-+ ISP_2200_RISC_CODE
-+};
-+#endif
-+
-+#ifndef ISP_DISABLE_2300_SUPPORT
-+static struct ispmdvec mdvec_2300 = {
-+ isp_pci_rd_isr_2300,
-+ isp_pci_rd_reg,
-+ isp_pci_wr_reg,
-+ isp_pci_mbxdma,
-+ isp_pci_dmasetup,
-+ isp_pci_dmateardown,
-+ NULL,
-+ isp_pci_reset1,
-+ isp_pci_dumpregs,
-+ ISP_2300_RISC_CODE
-+};
-+#endif
-+
-+#ifndef PCI_DEVICE_ID_QLOGIC_ISP1020
-+#define PCI_DEVICE_ID_QLOGIC_ISP1020 0x1020
-+#endif
-+
-+#ifndef PCI_DEVICE_ID_QLOGIC_ISP1020
-+#define PCI_DEVICE_ID_QLOGIC_ISP1020 0x1020
-+#endif
-+
-+#ifndef PCI_DEVICE_ID_QLOGIC_ISP1080
-+#define PCI_DEVICE_ID_QLOGIC_ISP1080 0x1080
-+#endif
-+
-+#ifndef PCI_DEVICE_ID_QLOGIC_ISP10160
-+#define PCI_DEVICE_ID_QLOGIC_ISP10160 0x1016
-+#endif
-+
-+#ifndef PCI_DEVICE_ID_QLOGIC_ISP12160
-+#define PCI_DEVICE_ID_QLOGIC_ISP12160 0x1216
-+#endif
-+
-+#ifndef PCI_DEVICE_ID_QLOGIC_ISP1240
-+#define PCI_DEVICE_ID_QLOGIC_ISP1240 0x1240
-+#endif
-+
-+#ifndef PCI_DEVICE_ID_QLOGIC_ISP1280
-+#define PCI_DEVICE_ID_QLOGIC_ISP1280 0x1280
-+#endif
-+
-+#ifndef PCI_DEVICE_ID_QLOGIC_ISP2100
-+#define PCI_DEVICE_ID_QLOGIC_ISP2100 0x2100
-+#endif
-+
-+#ifndef PCI_DEVICE_ID_QLOGIC_ISP2200
-+#define PCI_DEVICE_ID_QLOGIC_ISP2200 0x2200
-+#endif
-+
-+#ifndef PCI_DEVICE_ID_QLOGIC_ISP2300
-+#define PCI_DEVICE_ID_QLOGIC_ISP2300 0x2300
-+#endif
-+
-+#ifndef PCI_DEVICE_ID_QLOGIC_ISP2312
-+#define PCI_DEVICE_ID_QLOGIC_ISP2312 0x2312
-+#endif
-+
-+#define PCI_DFLT_LTNCY 0x40
-+#define PCI_DFLT_LNSZ 0x10
-+#define PCI_CMD_ISP \
-+ (PCI_COMMAND_MASTER|PCI_COMMAND_INVALIDATE|PCI_COMMAND_PARITY|PCI_COMMAND_SERR)
-+
-+/*
-+ * Encapsulating softc... Order of elements is important. The tag
-+ * pci_isp must come first because of multiple structure punning
-+ * (Scsi_Host * == struct isp_pcisoftc * == struct ispsofct *).
-+ */
-+struct isp_pcisoftc {
-+ struct ispsoftc pci_isp;
-+ struct pci_dev * pci_dev;
-+ vm_offset_t port; /* I/O port address */
-+ vm_offset_t paddr; /* Physical Memory Address */
-+ vm_offset_t vaddr; /* Mapped Memory Address */
-+ vm_offset_t poff[_NREG_BLKS];
-+ union pstore params;
-+};
-+
-+/*
-+ * Gratefully borrowed from Gerard Roudier's sym53c8xx driver
-+ */
-+static INLINE vm_offset_t
-+map_pci_mem(u_long base, u_long size)
-+{
-+ u_long page_base = ((u_long) base) & PAGE_MASK;
-+ u_long page_offs = ((u_long) base) - page_base;
-+ u_long map_size = roundup(page_offs+size, PAGE_SIZE);
-+ u_long page_remapped = (u_long) ioremap_nocache(page_base, map_size);
-+ (void) map_size;
-+ return (vm_offset_t) (page_remapped ? (page_remapped + page_offs) : 0);
-+}
-+
-+static INLINE
-+void unmap_pci_mem(vm_offset_t vaddr, u_long size)
-+{
-+ if (vaddr)
-+ iounmap((void *) (vaddr & PAGE_MASK));
-+}
-+
-+static INLINE int
-+map_isp_mem(struct isp_pcisoftc *isp_pci, u_short cmd, vm_offset_t mem_base)
-+{
-+ if (cmd & PCI_COMMAND_MEMORY) {
-+ isp_pci->paddr = __pa(mem_base);
-+ isp_pci->paddr &= PCI_BASE_ADDRESS_MEM_MASK;
-+ isp_pci->vaddr = map_pci_mem(isp_pci->paddr, 0xff);
-+ return (isp_pci->vaddr != (vm_offset_t) 0);
-+ }
-+ return (0);
-+}
-+
-+static INLINE int
-+map_isp_io(struct isp_pcisoftc *isp_pci, u_short cmd, vm_offset_t io_base)
-+{
-+ if ((cmd & PCI_COMMAND_IO) && (io_base & 3) == 1) {
-+ isp_pci->port = io_base & PCI_BASE_ADDRESS_IO_MASK;
-+#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,5,0)
-+ if (check_region(isp_pci->port, 0xff)) {
-+ return (0);
-+ }
-+#endif
-+ request_region(isp_pci->port, 0xff, "isp");
-+ return (1);
-+ }
-+ return (0);
-+}
-+
-+#define ISP_PCI_BUS pcidev->bus->number
-+#define ISP_PCI_DEVICE pcidev->devfn
-+#define ISEARCH_RESET pcidev = NULL
-+#define ISEARCH(x) \
-+ (pcidev = pci_find_device(PCI_VENDOR_ID_QLOGIC, x, pcidev)) != NULL
-+#define ISEARCH_NEXT
-+#define ISTORE_ARGS struct pci_dev *pcidev
-+#define ISTORE_FNDARGS ISTORE_ARGS
-+#define ISTORE_FNCARGS pcidev
-+#define ISTORE_ISP_INFO(x) (x)->pci_dev = pcidev
-+
-+static INLINE struct isp_pcisoftc *
-+isplinux_pci_addhost(Scsi_Host_Template *tmpt, ISTORE_FNDARGS)
-+{
-+ struct Scsi_Host *host;
-+ struct ispsoftc *isp;
-+ struct isp_pcisoftc *pci_isp;
-+
-+ host = scsi_register(tmpt, sizeof(struct isp_pcisoftc));
-+ if (host == NULL) {
-+ printk("isplinux_pci_addhost: scsi_register failed\n");
-+ return (NULL);
-+ }
-+ pci_isp = (struct isp_pcisoftc *) host->hostdata;
-+ if (pci_isp == NULL) {
-+ printk("isplinux_pci_addhost: cannot get softc out of scsi_register\n");
-+ return (NULL);
-+ }
-+ ISTORE_ISP_INFO(pci_isp);
-+ isp = (struct ispsoftc *) pci_isp;
-+ isp->isp_host = host;
-+ isp->isp_osinfo.storep = &pci_isp->params;
-+ if (isplinux_pci_init(host)) {
-+ scsi_unregister(host);
-+ return (NULL);
-+ }
-+ isp->isp_next = isplist;
-+ isplist = isp;
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,4)
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,61)
-+ scsi_set_device(host, &pci_isp->pci_dev->dev);
-+#else
-+ scsi_set_pci_device(host, pci_isp->pci_dev);
-+#endif
-+#endif
-+ return (pci_isp);
-+}
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,18) && \
-+ LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+#include <linux/reboot.h>
-+static int
-+isp_notify_reboot(struct notifier_block *ispnb, unsigned long Event, void *b)
-+{
-+ struct ispsoftc *isp;
-+ switch (Event) {
-+ case SYS_RESTART:
-+ case SYS_HALT:
-+ case SYS_POWER_OFF:
-+ break;
-+ default:
-+ return (NOTIFY_DONE);
-+ }
-+ for (isp = isplist; isp != NULL; isp = isp->isp_next) {
-+ ISP_LOCKU_SOFTC(isp);
-+ ISP_WRITE(isp, HCCR, HCCR_CMD_PAUSE);
-+ if (IS_FC(isp)) {
-+ ISP_WRITE(isp, BIU2100_CSR, BIU2100_FPM0_REGS);
-+ ISP_WRITE(isp, FPM_DIAG_CONFIG, FPM_SOFT_RESET);
-+ ISP_WRITE(isp, BIU2100_CSR, BIU2100_FB_REGS);
-+ ISP_WRITE(isp, FBM_CMD, FBMCMD_FIFO_RESET_ALL);
-+ ISP_WRITE(isp, BIU2100_CSR, BIU2100_RISC_REGS);
-+ }
-+ ISP_UNLKU_SOFTC(isp);
-+ }
-+ return (NOTIFY_OK);
-+}
-+static struct notifier_block isp_notifier = {
-+ notifier_call: isp_notify_reboot,
-+ next: NULL,
-+ priority: 0
-+};
-+#endif
-+
-+static int isp_nfound = 0;
-+int
-+isplinux_pci_detect(Scsi_Host_Template *tmpt)
-+{
-+ static const char *fmt =
-+ "ISP SCSI and Fibre Channel Host Adapter Driver\n"
-+ " Linux Platform Version %d.%d\n"
-+ " Common Core Code Version %d.%d\n"
-+ " Built on %s, %s\n";
-+ struct isp_pcisoftc *pci_isp;
-+ ISTORE_ARGS;
-+
-+ printk(fmt, ISP_PLATFORM_VERSION_MAJOR, ISP_PLATFORM_VERSION_MINOR,
-+ ISP_CORE_VERSION_MAJOR, ISP_CORE_VERSION_MINOR, __DATE__ , __TIME__ );
-+
-+#ifndef ISP_DISABLE_1020_SUPPORT
-+ for (ISEARCH_RESET; ISEARCH(PCI_DEVICE_ID_QLOGIC_ISP1020); ISEARCH_NEXT) {
-+ pci_isp = isplinux_pci_addhost(tmpt, ISTORE_FNCARGS);
-+ if (pci_isp) {
-+ isp_nfound++;
-+ }
-+ }
-+#endif
-+
-+#ifndef ISP_DISABLE_1080_SUPPORT
-+ for (ISEARCH_RESET; ISEARCH(PCI_DEVICE_ID_QLOGIC_ISP1240); ISEARCH_NEXT) {
-+ pci_isp = isplinux_pci_addhost(tmpt, ISTORE_FNCARGS);
-+ if (pci_isp) {
-+ isp_nfound++;
-+ }
-+ }
-+ for (ISEARCH_RESET; ISEARCH(PCI_DEVICE_ID_QLOGIC_ISP1080); ISEARCH_NEXT) {
-+ pci_isp = isplinux_pci_addhost(tmpt, ISTORE_FNCARGS);
-+ if (pci_isp) {
-+ isp_nfound++;
-+ }
-+ }
-+ for (ISEARCH_RESET; ISEARCH(PCI_DEVICE_ID_QLOGIC_ISP1280); ISEARCH_NEXT) {
-+ pci_isp = isplinux_pci_addhost(tmpt, ISTORE_FNCARGS);
-+ if (pci_isp) {
-+ isp_nfound++;
-+ }
-+ }
-+#endif
-+
-+#ifndef ISP_DISABLE_12160_SUPPORT
-+ for (ISEARCH_RESET; ISEARCH(PCI_DEVICE_ID_QLOGIC_ISP10160); ISEARCH_NEXT) {
-+ pci_isp = isplinux_pci_addhost(tmpt, ISTORE_FNCARGS);
-+ if (pci_isp) {
-+ isp_nfound++;
-+ }
-+ }
-+ for (ISEARCH_RESET; ISEARCH(PCI_DEVICE_ID_QLOGIC_ISP12160); ISEARCH_NEXT) {
-+ pci_isp = isplinux_pci_addhost(tmpt, ISTORE_FNCARGS);
-+ if (pci_isp) {
-+ isp_nfound++;
-+ }
-+ }
-+#endif
-+
-+#ifndef ISP_DISABLE_2100_SUPPORT
-+ for (ISEARCH_RESET; ISEARCH(PCI_DEVICE_ID_QLOGIC_ISP2100); ISEARCH_NEXT) {
-+ pci_isp = isplinux_pci_addhost(tmpt, ISTORE_FNCARGS);
-+ if (pci_isp) {
-+ isp_nfound++;
-+ }
-+ }
-+#endif
-+
-+#ifndef ISP_DISABLE_2200_SUPPORT
-+ for (ISEARCH_RESET; ISEARCH(PCI_DEVICE_ID_QLOGIC_ISP2200); ISEARCH_NEXT) {
-+ pci_isp = isplinux_pci_addhost(tmpt, ISTORE_FNCARGS);
-+ if (pci_isp) {
-+ isp_nfound++;
-+ }
-+ }
-+#endif
-+
-+#ifndef ISP_DISABLE_2300_SUPPORT
-+ for (ISEARCH_RESET; ISEARCH(PCI_DEVICE_ID_QLOGIC_ISP2300); ISEARCH_NEXT) {
-+ pci_isp = isplinux_pci_addhost(tmpt, ISTORE_FNCARGS);
-+ if (pci_isp) {
-+ isp_nfound++;
-+ }
-+ }
-+ for (ISEARCH_RESET; ISEARCH(PCI_DEVICE_ID_QLOGIC_ISP2312); ISEARCH_NEXT) {
-+ pci_isp = isplinux_pci_addhost(tmpt, ISTORE_FNCARGS);
-+ if (pci_isp) {
-+ isp_nfound++;
-+ }
-+ }
-+#endif
-+ /*
-+ * Don't do reboot notifier stuff for 2.5.X yet
-+ */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,18) && \
-+ LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+ if (isp_nfound) {
-+ register_reboot_notifier(&isp_notifier);
-+ }
-+#endif
-+ return (isp_nfound);
-+}
-+
-+void
-+isplinux_pci_release(struct Scsi_Host *host)
-+{
-+ struct ispsoftc *isp = (struct ispsoftc *) host->hostdata;
-+ struct isp_pcisoftc *pcs = (struct isp_pcisoftc *) host->hostdata;
-+ free_irq(host->irq, pcs);
-+ if (pcs->vaddr != 0) {
-+ unmap_pci_mem(pcs->vaddr, 0xff);
-+ pcs->vaddr = 0;
-+ } else {
-+ release_region(pcs->port, 0xff);
-+ pcs->port = 0;
-+ }
-+ kfree(isp->isp_xflist);
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
-+ pci_free_consistent(pcs->pci_dev, RQUEST_QUEUE_LEN(isp) * QENTRY_LEN,
-+ isp->isp_rquest, isp->isp_rquest_dma);
-+ pci_free_consistent(pcs->pci_dev, RESULT_QUEUE_LEN(isp) * QENTRY_LEN,
-+ isp->isp_result, isp->isp_result_dma);
-+ if (IS_FC(isp)) {
-+ pci_free_consistent(pcs->pci_dev, ISP2100_SCRLEN,
-+ FCPARAM(isp)->isp_scratch, FCPARAM(isp)->isp_scdma);
-+ }
-+#else
-+ RlsPages(isp->isp_rquest, IspOrder(RQUEST_QUEUE_LEN(isp)));
-+ RlsPages(isp->isp_result, IspOrder(RESULT_QUEUE_LEN(isp)));
-+ if (IS_FC(isp) && FCPARAM(isp)->isp_scratch) {
-+ RlsPages(FCPARAM(isp)->isp_scratch, 1);
-+ }
-+#endif
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,18) && \
-+ LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+ if (--isp_nfound <= 0) {
-+ unregister_reboot_notifier(&isp_notifier);
-+ }
-+#endif
-+}
-+
-+static int
-+isplinux_pci_init(struct Scsi_Host *host)
-+{
-+ static char *nomap = "cannot map either memory or I/O space";
-+ unsigned long io_base, mem_base;
-+ unsigned int irq, pci_cmd_isp = PCI_CMD_ISP;
-+ struct isp_pcisoftc *isp_pci;
-+ u_char rev, lnsz, timer;
-+ u_short vid, did, cmd;
-+ char loc[32];
-+ struct ispsoftc *isp;
-+
-+ isp_pci = (struct isp_pcisoftc *) host->hostdata;
-+ isp = (struct ispsoftc *) isp_pci;
-+ sprintf(loc, "isp@<PCI%d,Slot%d,Func%d>", isp_pci->pci_dev->bus->number,
-+ PCI_SLOT(isp_pci->pci_dev->devfn), PCI_FUNC(isp_pci->pci_dev->devfn));
-+ if (PRDW(isp_pci, PCI_COMMAND, &cmd) ||
-+ PRDB(isp_pci, PCI_CACHE_LINE_SIZE, &lnsz) ||
-+ PRDB(isp_pci, PCI_LATENCY_TIMER, &timer) ||
-+ PRDB(isp_pci, PCI_CLASS_REVISION, &rev)) {
-+ printk("%s: error reading PCI configuration", loc);
-+ return (1);
-+ }
-+ vid = isp_pci->pci_dev->vendor;
-+ did = isp_pci->pci_dev->device;
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
-+ io_base = pci_resource_start(isp_pci->pci_dev, 0);
-+ if (pci_resource_flags(isp_pci->pci_dev, 0) & PCI_BASE_ADDRESS_MEM_TYPE_64)
-+ irq = 2;
-+ else
-+ irq = 1;
-+ mem_base = pci_resource_start(isp_pci->pci_dev, irq);
-+ if (pci_resource_flags(isp_pci->pci_dev, irq) &
-+ PCI_BASE_ADDRESS_MEM_TYPE_64) {
-+#if BITS_PER_LONG == 64
-+ mem_base |= pci_resource_start(isp_pci->pci_dev, irq+1) << 32;
-+#else
-+ isp_pci_mapmem &= ~(1 << isp->isp_unit);
-+#endif
-+ }
-+#else /* LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) */
-+ io_base = isp_pci->pci_dev->base_address[0];
-+ mem_base = isp_pci->pci_dev->base_address[1];
-+ if (mem_base & PCI_BASE_ADDRESS_MEM_TYPE_64) {
-+#if BITS_PER_LONG == 64
-+ mem_base |= isp_pci->pci_dev->base_address[2] << 32;
-+#else
-+ isp_pci_mapmem &= ~(1 << isp->isp_unit);
-+#endif
-+ }
-+#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) */
-+ irq = isp_pci->pci_dev->irq;
-+
-+ if (vid != PCI_VENDOR_ID_QLOGIC) {
-+ printk("%s: 0x%04x is not QLogic's PCI Vendor ID\n", loc, vid);
-+ return (1);
-+ }
-+
-+ isp_pci->poff[BIU_BLOCK >> _BLK_REG_SHFT] = BIU_REGS_OFF;
-+ isp_pci->poff[MBOX_BLOCK >> _BLK_REG_SHFT] = PCI_MBOX_REGS_OFF;
-+ isp_pci->poff[SXP_BLOCK >> _BLK_REG_SHFT] = PCI_SXP_REGS_OFF;
-+ isp_pci->poff[RISC_BLOCK >> _BLK_REG_SHFT] = PCI_RISC_REGS_OFF;
-+ isp_pci->poff[DMA_BLOCK >> _BLK_REG_SHFT] = DMA_REGS_OFF;
-+ switch (did) {
-+ case PCI_DEVICE_ID_QLOGIC_ISP1020:
-+ break;
-+ case PCI_DEVICE_ID_QLOGIC_ISP1080:
-+ case PCI_DEVICE_ID_QLOGIC_ISP1240:
-+ case PCI_DEVICE_ID_QLOGIC_ISP1280:
-+ case PCI_DEVICE_ID_QLOGIC_ISP10160:
-+ case PCI_DEVICE_ID_QLOGIC_ISP12160:
-+ isp_pci->poff[DMA_BLOCK >> _BLK_REG_SHFT] = ISP1080_DMA_REGS_OFF;
-+ break;
-+ case PCI_DEVICE_ID_QLOGIC_ISP2200:
-+ case PCI_DEVICE_ID_QLOGIC_ISP2100:
-+ isp_pci->poff[MBOX_BLOCK >> _BLK_REG_SHFT] = PCI_MBOX_REGS2100_OFF;
-+ break;
-+ case PCI_DEVICE_ID_QLOGIC_ISP2300:
-+ pci_cmd_isp &= ~PCI_COMMAND_INVALIDATE; /* per errata */
-+ isp_pci->poff[MBOX_BLOCK >> _BLK_REG_SHFT] = PCI_MBOX_REGS2300_OFF;
-+ break;
-+ case PCI_DEVICE_ID_QLOGIC_ISP2312:
-+ isp->isp_port = PCI_FUNC(isp_pci->pci_dev->devfn);
-+ isp_pci->poff[MBOX_BLOCK >> _BLK_REG_SHFT] = PCI_MBOX_REGS2300_OFF;
-+ break;
-+ default:
-+ printk("%s: Device ID 0x%04x is not a known Qlogic Device", loc, did);
-+ return (1);
-+ }
-+
-+ /*
-+ * Bump unit seed- we're here, whether we complete the attachment or not.
-+ */
-+ isp->isp_unit = isp_unit_seed++;
-+ sprintf(isp->isp_name, "isp%d", isp->isp_unit);
-+
-+ isp->isp_osinfo.device_id =
-+ ((isp_pci->pci_dev->bus->number) << 16) |
-+ (PCI_SLOT(isp_pci->pci_dev->devfn) << 8) |
-+ (PCI_FUNC(isp_pci->pci_dev->devfn));
-+
-+ if (isp_disable & (1 << isp->isp_unit)) {
-+ isp_prt(isp, ISP_LOGALL, "disabled at user request");
-+ return (1);
-+ }
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
-+ if (pci_enable_device(isp_pci->pci_dev)) {
-+ printk("%s: fails to be PCI_ENABLEd\n", loc);
-+ return (1);
-+ }
-+ (void) PRDW(isp_pci, PCI_COMMAND, &cmd);
-+#endif
-+
-+ if ((cmd & PCI_CMD_ISP) != pci_cmd_isp) {
-+ if (isp_debug & ISP_LOGINFO)
-+ printk("%s: rewriting command register from 0x%x to 0x%x\n",
-+ loc, cmd, (cmd & ~PCI_CMD_ISP) | pci_cmd_isp);
-+ cmd &= ~PCI_CMD_ISP;
-+ cmd |= pci_cmd_isp;
-+ PWRW(isp_pci, PCI_COMMAND, cmd);
-+ }
-+
-+ if (lnsz != PCI_DFLT_LNSZ) {
-+ if (isp_debug & ISP_LOGINFO)
-+ printk("%s: rewriting cache line size from 0x%x to 0x%x\n",
-+ loc, lnsz, PCI_DFLT_LNSZ);
-+ lnsz = PCI_DFLT_LNSZ;
-+ PWRB(isp_pci, PCI_CACHE_LINE_SIZE, lnsz);
-+ }
-+
-+#ifdef __sparc__
-+ if (PRDB(isp_pci, PCI_MIN_GNT, &rev)) {
-+ printk("%s: unable to read min grant\n", loc);
-+ return (1);
-+ }
-+ if (rev) {
-+ rev = (rev << 3) & 0xff;
-+ }
-+ if (rev == 0) {
-+ rev = 64;
-+ }
-+ if (isp_debug & ISP_LOGINFO) {
-+ printk("%s: rewriting latency timer from 0x%x to 0x%x\n",
-+ loc, timer, rev);
-+ }
-+ PWRB(isp_pci, PCI_LATENCY_TIMER, rev);
-+#else
-+ if (timer < PCI_DFLT_LTNCY) {
-+ if (isp_debug & ISP_LOGINFO)
-+ printk("%s: rewriting latency timer from 0x%x to 0x%x\n",
-+ loc, timer, PCI_DFLT_LTNCY);
-+ timer = PCI_DFLT_LTNCY;
-+ PWRB(isp_pci, PCI_LATENCY_TIMER, timer);
-+ }
-+#endif
-+
-+ if ((cmd & (PCI_COMMAND_MEMORY|PCI_COMMAND_IO)) == 0) {
-+#ifdef __powerpc__
-+ if (io_base == 0 && mem_base == 0) {
-+ printk("%s: you lose- no register access defined.\n", loc);
-+ return (1);
-+ }
-+ if (io_base)
-+ cmd |= PCI_COMMAND_IO;
-+ if (mem_base)
-+ cmd |= PCI_COMMAND_MEMORY;
-+ PWRW(isp_pci, PCI_COMMAND, cmd);
-+#else
-+ printk("%s: you lose- no register access defined.\n", loc);
-+ return (1);
-+#endif
-+ }
-+
-+ /*
-+ * Disable the ROM.
-+ */
-+ PWRL(isp_pci, PCI_ROM_ADDRESS, 0);
-+
-+ /*
-+ * Set up stuff...
-+ */
-+ isp_pci->port = isp_pci->vaddr = 0;
-+
-+ /*
-+ * If we prefer to map memory space over I/O, try that first.
-+ */
-+ if (isp_pci_mapmem & (1 << isp->isp_unit)) {
-+ if (map_isp_mem(isp_pci, cmd, mem_base) == 0) {
-+ if (map_isp_io(isp_pci, cmd, io_base) == 0) {
-+ isp_prt(isp, ISP_LOGERR, nomap);
-+ return (1);
-+ }
-+ }
-+ } else {
-+ if (map_isp_io(isp_pci, cmd, io_base) == 0) {
-+ if (map_isp_mem(isp_pci, cmd, mem_base) == 0) {
-+ isp_prt(isp, ISP_LOGERR, nomap);
-+ return (1);
-+ }
-+ }
-+ }
-+ if (isp_pci->vaddr) {
-+ isp_prt(isp, ISP_LOGCONFIG,
-+ "mapped memory 0x%lx at 0x%lx\n", isp_pci->paddr, isp_pci->vaddr);
-+ host->io_port = isp_pci->paddr;
-+ } else {
-+ isp_prt(isp, ISP_LOGCONFIG,
-+ "mapped I/O space at 0x%lx\n", isp_pci->port);
-+ host->io_port = isp_pci->port;
-+ }
-+ host->irq = 0;
-+ isp_pci->pci_isp.isp_revision = rev;
-+#ifndef ISP_DISABLE_1020_SUPPORT
-+ if (did == PCI_DEVICE_ID_QLOGIC_ISP1020) {
-+ isp_pci->pci_isp.isp_mdvec = &mdvec;
-+ isp_pci->pci_isp.isp_type = ISP_HA_SCSI_UNKNOWN;
-+ }
-+#endif
-+#ifndef ISP_DISABLE_1080_SUPPORT
-+ if (did == PCI_DEVICE_ID_QLOGIC_ISP1080) {
-+ isp_pci->pci_isp.isp_mdvec = &mdvec_1080;
-+ isp_pci->pci_isp.isp_type = ISP_HA_SCSI_1080;
-+ }
-+ if (did == PCI_DEVICE_ID_QLOGIC_ISP1240) {
-+ isp_pci->pci_isp.isp_mdvec = &mdvec_1080;
-+ isp_pci->pci_isp.isp_type = ISP_HA_SCSI_1240;
-+ host->max_channel = 1;
-+ }
-+ if (did == PCI_DEVICE_ID_QLOGIC_ISP1280) {
-+ isp_pci->pci_isp.isp_mdvec = &mdvec_1080;
-+ isp_pci->pci_isp.isp_type = ISP_HA_SCSI_1280;
-+ host->max_channel = 1;
-+ }
-+#endif
-+#ifndef ISP_DISABLE_12160_SUPPORT
-+ if (did == PCI_DEVICE_ID_QLOGIC_ISP10160) {
-+ isp_pci->pci_isp.isp_mdvec = &mdvec_12160;
-+ isp_pci->pci_isp.isp_type = ISP_HA_SCSI_12160;
-+ }
-+ if (did == PCI_DEVICE_ID_QLOGIC_ISP12160) {
-+ isp_pci->pci_isp.isp_mdvec = &mdvec_12160;
-+ isp_pci->pci_isp.isp_type = ISP_HA_SCSI_12160;
-+ host->max_channel = 1;
-+ }
-+#endif
-+#ifndef ISP_DISABLE_2100_SUPPORT
-+ if (did == PCI_DEVICE_ID_QLOGIC_ISP2100) {
-+ isp_pci->pci_isp.isp_mdvec = &mdvec_2100;
-+ isp_pci->pci_isp.isp_type = ISP_HA_FC_2100;
-+ }
-+#endif
-+#ifndef ISP_DISABLE_2200_SUPPORT
-+ if (did == PCI_DEVICE_ID_QLOGIC_ISP2200) {
-+ isp_pci->pci_isp.isp_mdvec = &mdvec_2200;
-+ isp_pci->pci_isp.isp_type = ISP_HA_FC_2200;
-+ }
-+#endif
-+#ifndef ISP_DISABLE_2300_SUPPORT
-+ if (did == PCI_DEVICE_ID_QLOGIC_ISP2300) {
-+ isp_pci->pci_isp.isp_mdvec = &mdvec_2300;
-+ isp_pci->pci_isp.isp_type = ISP_HA_FC_2300;
-+ }
-+ if (did == PCI_DEVICE_ID_QLOGIC_ISP2312) {
-+ isp_pci->pci_isp.isp_mdvec = &mdvec_2300;
-+ isp_pci->pci_isp.isp_type = ISP_HA_FC_2312;
-+ }
-+
-+ if (IS_23XX(isp)) {
-+ /*
-+ * Can't tell if the ROM will hang on 'ABOUT FIRMWARE' command
-+ */
-+ isp->isp_touched = 1;
-+ }
-+#endif
-+
-+ if (request_irq(irq, isplinux_intr, SA_SHIRQ, isp->isp_name, isp_pci)) {
-+ isp_prt(isp, ISP_LOGERR, "could not snag irq %u (0x%x)", irq, irq);
-+ goto bad;
-+ }
-+ host->irq = irq;
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+ host->select_queue_depths = isplinux_sqd;
-+#endif
-+ isp->isp_param = &isp_pci->params;
-+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,4,19)
-+ host->highmem_io = 0;
-+ if (IS_FC(isp) || IS_ULTRA2(isp) || IS_1240(isp)) {
-+ if (!ISP_A64 || pci_set_dma_mask(isp_pci->pci_dev, (u64) 0xffffffffffffffffULL)) {
-+ if (pci_set_dma_mask(isp_pci->pci_dev, (u64)0xffffffff)) {
-+ isp_prt(isp, ISP_LOGERR, "cannot set 32 bit dma mask");
-+ goto bad;
-+ } else {
-+ isp_prt(isp, ISP_LOGCONFIG, "enabling 32 bit DMA");
-+ host->highmem_io = 1;
-+ }
-+ } else {
-+ isp_prt(isp, ISP_LOGCONFIG, "enabling 64 bit DMA");
-+ }
-+ host->highmem_io = 1;
-+ }
-+#endif
-+
-+ /*
-+ * At this point, we're committed to keeping this adapter around.
-+ */
-+ isplinux_common_init(isp);
-+ return (0);
-+bad:
-+ if (host->irq) {
-+ DISABLE_INTS(isp);
-+ free_irq(host->irq, isp_pci);
-+ host->irq = 0;
-+ }
-+ if (isp_pci->vaddr != 0) {
-+ unmap_pci_mem(isp_pci->vaddr, 0xff);
-+ isp_pci->vaddr = 0;
-+ } else {
-+ release_region(isp_pci->port, 0xff);
-+ isp_pci->port = 0;
-+ }
-+ return (1);
-+}
-+
-+static INLINE u_int16_t
-+ispregrd(struct isp_pcisoftc *pcs, vm_offset_t offset)
-+{
-+ u_int16_t rv;
-+ if (pcs->vaddr) {
-+ offset += pcs->vaddr;
-+ rv = readw(offset);
-+ } else {
-+ offset += pcs->port;
-+ rv = inw(offset);
-+ }
-+ return (rv);
-+}
-+
-+static INLINE void
-+ispregwr(struct isp_pcisoftc *pcs, vm_offset_t offset, u_int16_t val)
-+{
-+ if (pcs->vaddr) {
-+ offset += pcs->vaddr;
-+ writew(val, offset);
-+ } else {
-+ offset += pcs->port;
-+ outw(val, offset);
-+ }
-+ MEMORYBARRIER(isp, SYNC_REG, offset, 2);
-+}
-+
-+static INLINE int
-+isp_pci_rd_debounced(struct isp_pcisoftc *pcs, vm_offset_t off, u_int16_t *rp)
-+{
-+ u_int16_t val0, val1;
-+ int i = 0;
-+ do {
-+ val0 = ispregrd(pcs, off);
-+ val1 = ispregrd(pcs, off);
-+ } while (val0 != val1 && ++i < 1000);
-+ if (val0 != val1) {
-+ return (1);
-+ }
-+ *rp = val0;
-+ return (0);
-+}
-+
-+#define IspVirt2Off(a, x) \
-+ ((a)->poff[((x) & _BLK_REG_MASK) >> _BLK_REG_SHFT] + ((x) & 0xff))
-+
-+static int
-+isp_pci_rd_isr(struct ispsoftc *isp, u_int16_t *isrp,
-+ u_int16_t *semap, u_int16_t *mbp)
-+{
-+ struct isp_pcisoftc *pcs = (struct isp_pcisoftc *) isp;
-+ u_int16_t isr, sema;
-+
-+ if (IS_2100(isp)) {
-+ if (isp_pci_rd_debounced(pcs, IspVirt2Off(pcs, BIU_ISR), &isr)) {
-+ return (0);
-+ }
-+ if (isp_pci_rd_debounced(pcs, IspVirt2Off(pcs, BIU_SEMA), &sema)) {
-+ return (0);
-+ }
-+ } else {
-+ isr = ispregrd(pcs, IspVirt2Off(pcs, BIU_ISR));
-+ sema = ispregrd(pcs, IspVirt2Off(pcs, BIU_SEMA));
-+ }
-+ isp_prt(isp, ISP_LOGDEBUG3, "ISR 0x%x SEMA 0x%x", isr, sema);
-+ isr &= INT_PENDING_MASK(isp);
-+ sema &= BIU_SEMA_LOCK;
-+ if (isr == 0 && sema == 0) {
-+ return (0);
-+ }
-+ *isrp = isr;
-+ if ((*semap = sema) != 0) {
-+ if (IS_2100(isp)) {
-+ if (isp_pci_rd_debounced(pcs, IspVirt2Off(pcs, OUTMAILBOX0), mbp)) {
-+ return (0);
-+ }
-+ } else {
-+ *mbp = ispregrd(pcs, IspVirt2Off(pcs, OUTMAILBOX0));
-+ }
-+ }
-+ return (1);
-+}
-+
-+#ifndef ISP_DISABLE_2300_SUPPORT
-+static INLINE u_int32_t
-+ispregrd32(struct isp_pcisoftc *pcs, vm_offset_t offset)
-+{
-+ u_int32_t rv;
-+ if (pcs->vaddr) {
-+ offset += pcs->vaddr;
-+ rv = readl(offset);
-+ } else {
-+ offset += pcs->port;
-+ rv = inl(offset);
-+ }
-+ return (rv);
-+}
-+
-+static int
-+isp_pci_rd_isr_2300(struct ispsoftc *isp, u_int16_t *isrp,
-+ u_int16_t *semap, u_int16_t *mbox0p)
-+{
-+ struct isp_pcisoftc *pcs = (struct isp_pcisoftc *) isp;
-+ u_int32_t r2hisr;
-+
-+ /*
-+ * Avoid parity errors on the 2312.
-+ */
-+ if (!(ispregrd(pcs, IspVirt2Off(pcs, BIU_ISR)) & BIU2100_ISR_RISC_INT)) {
-+ *isrp = 0;
-+ return (0);
-+ }
-+
-+ r2hisr = ispregrd32(pcs, IspVirt2Off(pcs, BIU_R2HSTSLO));
-+ isp_prt(isp, ISP_LOGDEBUG3, "RISC2HOST ISR 0x%x", r2hisr);
-+ if ((r2hisr & BIU_R2HST_INTR) == 0) {
-+ *isrp = 0;
-+ return (0);
-+ }
-+ switch (r2hisr & BIU_R2HST_ISTAT_MASK) {
-+ case ISPR2HST_ROM_MBX_OK:
-+ case ISPR2HST_ROM_MBX_FAIL:
-+ case ISPR2HST_MBX_OK:
-+ case ISPR2HST_MBX_FAIL:
-+ case ISPR2HST_ASYNC_EVENT:
-+ *isrp = r2hisr & 0xffff;
-+ *mbox0p = (r2hisr >> 16);
-+ *semap = 1;
-+ return (1);
-+ case ISPR2HST_RIO_16:
-+ *isrp = r2hisr & 0xffff;
-+ *mbox0p = ASYNC_RIO1;
-+ *semap = 1;
-+ return (1);
-+ case ISPR2HST_FPOST:
-+ *isrp = r2hisr & 0xffff;
-+ *mbox0p = ASYNC_CMD_CMPLT;
-+ *semap = 1;
-+ return (1);
-+ case ISPR2HST_FPOST_CTIO:
-+ *isrp = r2hisr & 0xffff;
-+ *mbox0p = ASYNC_CTIO_DONE;
-+ *semap = 1;
-+ return (1);
-+ case ISPR2HST_RSPQ_UPDATE:
-+ *isrp = r2hisr & 0xffff;
-+ *mbox0p = 0;
-+ *semap = 0;
-+ return (1);
-+ default:
-+ return (0);
-+ }
-+}
-+#endif
-+
-+static u_int16_t
-+isp_pci_rd_reg(struct ispsoftc *isp, int regoff)
-+{
-+ u_int16_t rv, oldconf = 0;
-+ struct isp_pcisoftc *pcs = (struct isp_pcisoftc *) isp;
-+
-+ if ((regoff & _BLK_REG_MASK) == SXP_BLOCK) {
-+ /*
-+ * We will assume that someone has paused the RISC processor.
-+ */
-+ oldconf = ispregrd(pcs, IspVirt2Off(pcs, BIU_CONF1));
-+ ispregwr(pcs, IspVirt2Off(pcs, BIU_CONF1), oldconf | BIU_PCI_CONF1_SXP);
-+ }
-+ rv = ispregrd(pcs, IspVirt2Off(pcs, regoff));
-+ if ((regoff & _BLK_REG_MASK) == SXP_BLOCK) {
-+ ispregwr(pcs, IspVirt2Off(pcs, BIU_CONF1), oldconf);
-+ }
-+ return (rv);
-+}
-+
-+static void
-+isp_pci_wr_reg(struct ispsoftc *isp, int regoff, u_int16_t val)
-+{
-+ struct isp_pcisoftc *pcs = (struct isp_pcisoftc *) isp;
-+ u_int16_t oldconf = 0;
-+ if ((regoff & _BLK_REG_MASK) == SXP_BLOCK) {
-+ /*
-+ * We will assume that someone has paused the RISC processor.
-+ */
-+ oldconf = ispregrd(pcs, IspVirt2Off(pcs, BIU_CONF1));
-+ ispregwr(pcs, IspVirt2Off(pcs, BIU_CONF1), oldconf | BIU_PCI_CONF1_SXP);
-+ }
-+ ispregwr(pcs, IspVirt2Off(pcs, regoff), val);
-+ if ((regoff & _BLK_REG_MASK) == SXP_BLOCK) {
-+ ispregwr(pcs, IspVirt2Off(pcs, BIU_CONF1), oldconf);
-+ }
-+}
-+
-+#if !(defined(ISP_DISABLE_1080_SUPPORT) && defined(ISP_DISABLE_12160_SUPPORT))
-+static u_int16_t
-+isp_pci_rd_reg_1080(struct ispsoftc *isp, int regoff)
-+{
-+ struct isp_pcisoftc *pcs = (struct isp_pcisoftc *) isp;
-+ u_int16_t rv, oldconf = 0;
-+
-+ if ((regoff & _BLK_REG_MASK) == SXP_BLOCK ||
-+ (regoff & _BLK_REG_MASK) == (SXP_BLOCK|SXP_BANK1_SELECT)) {
-+ u_int16_t tmpconf;
-+ /*
-+ * We will assume that someone has paused the RISC processor.
-+ */
-+ oldconf = ispregrd(pcs, IspVirt2Off(pcs, BIU_CONF1));
-+ tmpconf = oldconf & ~BIU_PCI1080_CONF1_DMA;
-+ if (IS_1280(isp)) {
-+ if (regoff & SXP_BANK1_SELECT) {
-+ tmpconf |= BIU_PCI1080_CONF1_SXP0;
-+ } else {
-+ tmpconf |= BIU_PCI1080_CONF1_SXP1;
-+ }
-+ } else {
-+ tmpconf |= BIU_PCI1080_CONF1_SXP0;
-+ }
-+ ispregwr(pcs, IspVirt2Off(pcs, BIU_CONF1), tmpconf);
-+ } else if ((regoff & _BLK_REG_MASK) == DMA_BLOCK) {
-+ oldconf = ispregrd(pcs, IspVirt2Off(pcs, BIU_CONF1));
-+ ispregwr(pcs, IspVirt2Off(pcs, BIU_CONF1),
-+ oldconf | BIU_PCI1080_CONF1_DMA);
-+ }
-+ rv = ispregrd(pcs, IspVirt2Off(pcs, regoff));
-+ if (oldconf) {
-+ ispregwr(pcs, IspVirt2Off(pcs, BIU_CONF1), oldconf);
-+ }
-+ return (rv);
-+}
-+
-+static void
-+isp_pci_wr_reg_1080(struct ispsoftc *isp, int regoff, u_int16_t val)
-+{
-+ struct isp_pcisoftc *pcs = (struct isp_pcisoftc *) isp;
-+ u_int16_t oldconf = 0;
-+
-+ if ((regoff & _BLK_REG_MASK) == SXP_BLOCK ||
-+ (regoff & _BLK_REG_MASK) == (SXP_BLOCK|SXP_BANK1_SELECT)) {
-+ u_int16_t tmpconf;
-+ /*
-+ * We will assume that someone has paused the RISC processor.
-+ */
-+ oldconf = ispregrd(pcs, IspVirt2Off(pcs, BIU_CONF1));
-+ tmpconf = oldconf & ~BIU_PCI1080_CONF1_DMA;
-+ if (IS_1280(isp)) {
-+ if (regoff & SXP_BANK1_SELECT) {
-+ tmpconf |= BIU_PCI1080_CONF1_SXP0;
-+ } else {
-+ tmpconf |= BIU_PCI1080_CONF1_SXP1;
-+ }
-+ } else {
-+ tmpconf |= BIU_PCI1080_CONF1_SXP0;
-+ }
-+ ispregwr(pcs, IspVirt2Off(pcs, BIU_CONF1), tmpconf);
-+ } else if ((regoff & _BLK_REG_MASK) == DMA_BLOCK) {
-+ oldconf = ispregrd(pcs, IspVirt2Off(pcs, BIU_CONF1));
-+ ispregwr(pcs, IspVirt2Off(pcs, BIU_CONF1),
-+ oldconf | BIU_PCI1080_CONF1_DMA);
-+ }
-+ ispregwr(pcs, IspVirt2Off(pcs, regoff), val);
-+ if (oldconf) {
-+ ispregwr(pcs, IspVirt2Off(pcs, BIU_CONF1), oldconf);
-+ }
-+}
-+#endif
-+
-+static int
-+isp_pci_mbxdma(struct ispsoftc *isp)
-+{
-+ if (isp->isp_xflist == NULL) {
-+ size_t amt = isp->isp_maxcmds * sizeof (XS_T **);
-+ isp->isp_xflist = kmalloc(amt, GFP_KERNEL);
-+ if (isp->isp_xflist == NULL) {
-+ isp_prt(isp, ISP_LOGERR, "unable to allocate xflist array");
-+ return (1);
-+ }
-+ MEMZERO(isp->isp_xflist, amt);
-+ }
-+ if (isp->isp_rquest == NULL) {
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
-+ struct isp_pcisoftc *pcs = (struct isp_pcisoftc *) isp;
-+ dma_addr_t busaddr;
-+ isp->isp_rquest =
-+ pci_alloc_consistent(pcs->pci_dev,
-+ RQUEST_QUEUE_LEN(isp) * QENTRY_LEN, &busaddr);
-+ if (isp->isp_rquest == NULL) {
-+ isp_prt(isp, ISP_LOGERR, "unable to allocate request queue");
-+ return (1);
-+ }
-+ isp->isp_rquest_dma = busaddr;
-+#else
-+ isp->isp_rquest = (caddr_t) GetPages(IspOrder(RQUEST_QUEUE_LEN(isp)));
-+ if (isp->isp_rquest == NULL) {
-+ isp_prt(isp, ISP_LOGERR, "unable to allocate request queue");
-+ return (1);
-+ }
-+ /*
-+ * Map the Request queue.
-+ */
-+ isp->isp_rquest_dma = virt_to_bus(isp->isp_rquest);
-+#endif
-+ if (isp->isp_rquest_dma & 0x3f) {
-+ isp_prt(isp, ISP_LOGERR, "Request Queue not on 64 byte boundary");
-+ return (1);
-+ }
-+ MEMZERO(isp->isp_rquest, ISP_QUEUE_SIZE(RQUEST_QUEUE_LEN(isp)));
-+ }
-+
-+ if (isp->isp_result == NULL) {
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
-+ struct isp_pcisoftc *pcs = (struct isp_pcisoftc *) isp;
-+ dma_addr_t busaddr;
-+ isp->isp_result =
-+ pci_alloc_consistent(pcs->pci_dev,
-+ RESULT_QUEUE_LEN(isp) * QENTRY_LEN, &busaddr);
-+ if (isp->isp_result == NULL) {
-+ isp_prt(isp, ISP_LOGERR, "unable to allocate result queue");
-+ return (1);
-+ }
-+ isp->isp_result_dma = busaddr;
-+#else
-+ isp->isp_result = (caddr_t) GetPages(IspOrder(RESULT_QUEUE_LEN(isp)));
-+ if (isp->isp_result == NULL) {
-+ isp_prt(isp, ISP_LOGERR, "unable to allocate result queue");
-+ free_pages((unsigned long)isp->isp_rquest,
-+ IspOrder(RQUEST_QUEUE_LEN(isp)));
-+ return (1);
-+ }
-+ /*
-+ * Map the result queue.
-+ */
-+ isp->isp_result_dma = virt_to_bus(isp->isp_result);
-+#endif
-+ if (isp->isp_rquest_dma & 0x3f) {
-+ isp_prt(isp, ISP_LOGERR, "Result Queue not on 64 byte boundary");
-+ return (1);
-+ }
-+ MEMZERO(isp->isp_result, ISP_QUEUE_SIZE(RESULT_QUEUE_LEN(isp)));
-+ }
-+
-+ if (IS_FC(isp)) {
-+ fcparam *fcp = isp->isp_param;
-+ if (fcp->isp_scratch == NULL) {
-+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,3,92)
-+ struct isp_pcisoftc *pcs = (struct isp_pcisoftc *) isp;
-+ dma_addr_t busaddr;
-+ fcp->isp_scratch =
-+ pci_alloc_consistent(pcs->pci_dev, ISP2100_SCRLEN, &busaddr);
-+ if (fcp->isp_scratch == NULL) {
-+ isp_prt(isp, ISP_LOGERR, "unable to allocate scratch space");
-+ return (1);
-+ }
-+ fcp->isp_scdma = busaddr;
-+#else
-+ /*
-+ * Just get a page....
-+ */
-+ fcp->isp_scratch = (void *) GetPages(1);
-+ if (fcp->isp_scratch == NULL) {
-+ isp_prt(isp, ISP_LOGERR, "unable to allocate scratch space");
-+ return (1);
-+ }
-+ fcp->isp_scdma = virt_to_bus((void *)fcp->isp_scratch);
-+#endif
-+ MEMZERO(fcp->isp_scratch, ISP2100_SCRLEN);
-+ if (fcp->isp_scdma & 0x7) {
-+ isp_prt(isp, ISP_LOGERR, "scratch space not 8 byte aligned");
-+ return (1);
-+ }
-+ }
-+ }
-+ return (0);
-+}
-+
-+#ifdef LINUX_ISP_TARGET_MODE
-+/*
-+ * We need to handle DMA for target mode differently from initiator mode.
-+ *
-+ * DMA mapping and construction and submission of CTIO Request Entries
-+ * and rendevous for completion are very tightly coupled because we start
-+ * out by knowing (per platform) how much data we have to move, but we
-+ * don't know, up front, how many DMA mapping segments will have to be used
-+ * cover that data, so we don't know how many CTIO Request Entries we
-+ * will end up using. Further, for performance reasons we may want to
-+ * (on the last CTIO for Fibre Channel), send status too (if all went well).
-+ *
-+ * The standard vector still goes through isp_pci_dmasetup, but the callback
-+ * for the DMA mapping routines comes here instead with the whole transfer
-+ * mapped and a pointer to a partially filled in already allocated request
-+ * queue entry. We finish the job.
-+ */
-+
-+static int tdma_mk(struct ispsoftc *, tmd_cmd_t *, ct_entry_t *,
-+ u_int16_t *, u_int16_t);
-+#define STATUS_WITH_DATA 1
-+
-+static int
-+tdma_mk(struct ispsoftc *isp, tmd_cmd_t *tcmd, ct_entry_t *cto,
-+ u_int16_t *nxtip, u_int16_t optr)
-+{
-+ static const char ctx[] =
-+ "CTIO[%x] lun %d for iid%d flgs 0x%x sts 0x%x ssts 0x%x res %u %s";
-+ struct scatterlist *sg;
-+ ct_entry_t *qe;
-+ u_int8_t scsi_status;
-+ u_int16_t curi, nxti, handle;
-+ u_int32_t sflags;
-+ int32_t resid;
-+ int nth_ctio, nctios, send_status, nseg;
-+
-+
-+ curi = isp->isp_reqidx;
-+ qe = (ct_entry_t *) ISP_QUEUE_ENTRY(isp->isp_rquest, isp->isp_reqidx);
-+
-+ cto->ct_xfrlen = 0;
-+ cto->ct_seg_count = 0;
-+ cto->ct_header.rqs_entry_count = 1;
-+ MEMZERO(cto->ct_dataseg, sizeof (cto->ct_dataseg));
-+
-+ if (tcmd->cd_xfrlen == 0) {
-+ ISP_TDQE(isp, "tdma_mk[no data]", curi, cto);
-+ isp_prt(isp, ISP_LOGTDEBUG1, ctx, cto->ct_fwhandle, (int) tcmd->cd_lun,
-+ (int) cto->ct_iid, cto->ct_flags, cto->ct_status,
-+ cto->ct_scsi_status, cto->ct_resid, "<END>");
-+ isp_put_ctio(isp, cto, qe);
-+ return (CMD_QUEUED);
-+ }
-+
-+ sg = tcmd->cd_data;
-+ nseg = 0;
-+ resid = (int32_t) tcmd->cd_xfrlen;
-+ while (resid > 0) {
-+ nseg++;
-+ resid -= sg_dma_len(sg);
-+ sg++;
-+ }
-+ sg = tcmd->cd_data;
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
-+ {
-+ struct isp_pcisoftc *pcs = (struct isp_pcisoftc *) isp;
-+ int new_seg_cnt;
-+ new_seg_cnt = pci_map_sg(pcs->pci_dev, sg, nseg,
-+ (cto->ct_flags & CT_DATA_IN)? PCI_DMA_TODEVICE : PCI_DMA_FROMDEVICE);
-+ if (new_seg_cnt == 0) {
-+ isp_prt(isp, ISP_LOGWARN, "unable to dma map request");
-+ cto->ct_resid = -ENOMEM;
-+ return (CMD_COMPLETE);
-+ }
-+ if (new_seg_cnt != nseg) {
-+ isp_prt(isp, ISP_LOGERR, "new seg cnt != old");
-+ cto->ct_resid = -EINVAL;
-+ return (CMD_COMPLETE);
-+ }
-+ }
-+#endif
-+ nctios = nseg / ISP_RQDSEG;
-+ if (nseg % ISP_RQDSEG) {
-+ nctios++;
-+ }
-+
-+ /*
-+ * Save handle, and potentially any SCSI status, which
-+ * we'll reinsert on the last CTIO we're going to send.
-+ */
-+ handle = cto->ct_syshandle;
-+ cto->ct_syshandle = 0;
-+ cto->ct_header.rqs_seqno = 0;
-+ send_status = (cto->ct_flags & CT_SENDSTATUS) != 0;
-+
-+ if (send_status) {
-+ sflags = cto->ct_flags & (CT_SENDSTATUS | CT_CCINCR);
-+ cto->ct_flags &= ~(CT_SENDSTATUS|CT_CCINCR);
-+ /*
-+ * Preserve residual.
-+ */
-+ resid = cto->ct_resid;
-+
-+ /*
-+ * Save actual SCSI status.
-+ */
-+ scsi_status = cto->ct_scsi_status;
-+
-+#ifndef STATUS_WITH_DATA
-+ sflags |= CT_NO_DATA;
-+ /*
-+ * We can't do a status at the same time as a data CTIO, so
-+ * we need to synthesize an extra CTIO at this level.
-+ */
-+ nctios++;
-+#endif
-+ } else {
-+ sflags = scsi_status = resid = 0;
-+ }
-+
-+ cto->ct_resid = 0;
-+ cto->ct_scsi_status = 0;
-+
-+ nxti = *nxtip;
-+
-+ for (nth_ctio = 0; nth_ctio < nctios; nth_ctio++) {
-+ int seglim;
-+
-+ seglim = nseg;
-+ if (seglim) {
-+ int seg;
-+
-+ if (seglim > ISP_RQDSEG)
-+ seglim = ISP_RQDSEG;
-+
-+ for (seg = 0; seg < seglim; seg++, nseg--) {
-+ /*
-+ * Unlike normal initiator commands, we don't do
-+ * any swizzling here.
-+ */
-+ cto->ct_dataseg[seg].ds_base = (u_int32_t) sg_dma_address(sg);
-+ cto->ct_dataseg[seg].ds_count = (u_int32_t) sg_dma_len(sg);
-+ cto->ct_xfrlen += sg_dma_len(sg);
-+ sg++;
-+ }
-+ cto->ct_seg_count = seg;
-+ } else {
-+ /*
-+ * This case should only happen when we're
-+ * sending an extra CTIO with final status.
-+ */
-+ if (send_status == 0) {
-+ isp_prt(isp, ISP_LOGERR,
-+ "tdma_mk ran out of segments, no status to send");
-+ return (CMD_EAGAIN);
-+ }
-+ }
-+
-+ /*
-+ * At this point, the fields ct_lun, ct_iid, ct_tagval, ct_tagtype, and
-+ * ct_timeout have been carried over unchanged from what our caller had
-+ * set.
-+ *
-+ * The dataseg fields and the seg_count fields we just got through
-+ * setting. The data direction we've preserved all along and only
-+ * clear it if we're now sending status.
-+ */
-+
-+ if (nth_ctio == nctios - 1) {
-+ /*
-+ * We're the last in a sequence of CTIOs, so mark this
-+ * CTIO and save the handle to the command such that when
-+ * this CTIO completes we can free dma resources and
-+ * do whatever else we need to do to finish the rest
-+ * of the command.
-+ */
-+ cto->ct_syshandle = handle;
-+ cto->ct_header.rqs_seqno = 1;
-+
-+ if (send_status) {
-+ cto->ct_scsi_status = scsi_status;
-+ cto->ct_flags |= sflags;
-+ cto->ct_resid = resid;
-+ }
-+ if (send_status) {
-+ isp_prt(isp, ISP_LOGTDEBUG1, ctx,
-+ cto->ct_fwhandle, (int) tcmd->cd_lun, (int) cto->ct_iid,
-+ cto->ct_flags, cto->ct_status, cto->ct_scsi_status,
-+ cto->ct_resid, "<END>");
-+ } else {
-+ isp_prt(isp, ISP_LOGTDEBUG1, ctx,
-+ cto->ct_fwhandle, (int) tcmd->cd_lun, (int) cto->ct_iid,
-+ cto->ct_flags, cto->ct_status, cto->ct_scsi_status,
-+ cto->ct_resid, "<MID>");
-+ }
-+ isp_put_ctio(isp, cto, qe);
-+ ISP_TDQE(isp, "last tdma_mk", curi, cto);
-+ if (nctios > 1) {
-+ MEMORYBARRIER(isp, SYNC_REQUEST, curi, QENTRY_LEN);
-+ }
-+ } else {
-+ ct_entry_t *oqe = qe;
-+
-+ /*
-+ * Make sure handle fields are clean
-+ */
-+ cto->ct_syshandle = 0;
-+ cto->ct_header.rqs_seqno = 0;
-+
-+ isp_prt(isp, ISP_LOGTDEBUG1,
-+ "CTIO[%x] lun%d for ID%d ct_flags 0x%x",
-+ cto->ct_fwhandle, (int) tcmd->cd_lun,
-+ (int) cto->ct_iid, cto->ct_flags);
-+
-+ /*
-+ * Get a new CTIO
-+ */
-+ qe = (ct_entry_t *) ISP_QUEUE_ENTRY(isp->isp_rquest, nxti);
-+ nxti = ISP_NXT_QENTRY(nxti, RQUEST_QUEUE_LEN(isp));
-+ if (nxti == optr) {
-+ isp_prt(isp, ISP_LOGERR, "queue overflow in tdma_mk");
-+ return (CMD_EAGAIN);
-+ }
-+
-+ /*
-+ * Now that we're done with the old CTIO,
-+ * flush it out to the request queue.
-+ */
-+ ISP_TDQE(isp, "tdma_mk", curi, cto);
-+ isp_put_ctio(isp, cto, oqe);
-+ if (nth_ctio != 0) {
-+ MEMORYBARRIER(isp, SYNC_REQUEST, curi, QENTRY_LEN);
-+ }
-+ curi = ISP_NXT_QENTRY(curi, RQUEST_QUEUE_LEN(isp));
-+
-+ /*
-+ * Reset some fields in the CTIO so we can reuse
-+ * for the next one we'll flush to the request
-+ * queue.
-+ */
-+ cto->ct_header.rqs_entry_type = RQSTYPE_CTIO;
-+ cto->ct_header.rqs_entry_count = 1;
-+ cto->ct_header.rqs_flags = 0;
-+ cto->ct_status = 0;
-+ cto->ct_scsi_status = 0;
-+ cto->ct_xfrlen = 0;
-+ cto->ct_resid = 0;
-+ cto->ct_seg_count = 0;
-+ MEMZERO(cto->ct_dataseg, sizeof (cto->ct_dataseg));
-+ }
-+ }
-+ *nxtip = nxti;
-+ return (CMD_QUEUED);
-+}
-+
-+static int tdma_mkfc(struct ispsoftc *, tmd_cmd_t *, ct2_entry_t *,
-+ u_int16_t *, u_int16_t);
-+
-+
-+/*
-+ * We're passed a pointer to a prototype ct2_entry_t.
-+ *
-+ * If it doesn't contain any data movement, it has to be for sending status,
-+ * possibly with Sense Data as well, so we send a single CTIO2. This should
-+ * be a Mode 1 CTIO2, and it's up to the caller to set up the Sense Data
-+ * and flags appropriately.
-+ *
-+ * If it does contain data movement, it may *also* be for sending status
-+ * (possibly with Sense Data also). It's possible to describe to the firmware
-+ * what we want in one CTIO2. However, under some conditions it is not,
-+ * so we must also send a *second* CTIO2 after the first one.
-+ *
-+ * If the data to be sent is in segments that exceeds that which we can
-+ * fit into a CTIO2 (likely, as there's only room for 3 segments), we
-+ * utilize normal continuation entries, which get pushed after the
-+ * first CTIO2, and possibly are followed by a final CTIO2.
-+ *
-+ * In any case, it's up to the caller to send us a Mode 0 CTIO2 describing
-+ * the data to be moved (if any) and the appropriate flags indicating
-+ * status. We'll clear and set as appropriate. We'll also check to see
-+ * whether Sense Data is attempting to be sent and retrieve it as appropriate.
-+ *
-+ * In all cases the caller should not assume that the prototype CTIO2
-+ * has been left unchanged.
-+ */
-+
-+static int
-+tdma_mkfc(struct ispsoftc *isp, tmd_cmd_t *tmd, ct2_entry_t *cto,
-+ u_int16_t *nxtip, u_int16_t optr)
-+{
-+ static const char ctx[] =
-+ "CTIO2[%x] lun %d for iid %d flgs 0x%x sts 0x%x ssts 0x%x res %d %s";
-+ struct scatterlist *sg;
-+ void *qe;
-+ ct2_entry_t ct2, *cto2;
-+ u_int16_t swd, curi, nxti;
-+ u_int32_t bc;
-+ long xfcnt; /* must be signed */
-+ int nseg, seg;
-+
-+ nxti = *nxtip;
-+ curi = isp->isp_reqidx;
-+ qe = ISP_QUEUE_ENTRY(isp->isp_rquest, curi);
-+ if (cto->ct_flags & CT2_FASTPOST) {
-+ if ((tmd->cd_hflags & (CDFH_STSVALID|CDFH_SNSVALID)) != CDFH_STSVALID) {
-+ cto->ct_flags &= ~CT2_FASTPOST;
-+ }
-+ }
-+
-+ /*
-+ * Handle commands that transfer no data right away.
-+ */
-+ if (tmd->cd_xfrlen == 0) {
-+ if ((cto->ct_flags & CT2_FLAG_MMASK) != CT2_FLAG_MODE1) {
-+ isp_prt(isp, ISP_LOGERR,
-+ "tdma_mkfc, a status CTIO2 without MODE1 set (0x%x)",
-+ cto->ct_flags);
-+ cto->ct_resid = -EINVAL;
-+ return (CMD_COMPLETE);
-+ }
-+ cto->ct_header.rqs_entry_count = 1;
-+ cto->ct_header.rqs_seqno = 1;
-+
-+ /* ct_syshandle contains the synchronization handle set by caller */
-+ /*
-+ * We preserve ct_lun, ct_iid, ct_rxid. We set the data movement
-+ * flags to NO DATA and clear relative offset flags. We preserve
-+ * ct_resid and the response area. We assume that if there is
-+ * associated sense data that it has been appropriately set by
-+ * the caller.
-+ */
-+ cto->ct_flags |= CT2_NO_DATA;
-+ if (cto->ct_resid > 0)
-+ cto->rsp.m1.ct_scsi_status |= CT2_DATA_UNDER;
-+ else if (cto->ct_resid < 0)
-+ cto->rsp.m1.ct_scsi_status |= CT2_DATA_OVER;
-+ cto->ct_seg_count = 0;
-+ cto->ct_reloff = 0;
-+ isp_prt(isp, ISP_LOGTDEBUG1, ctx, cto->ct_rxid, (int) tmd->cd_lun,
-+ cto->ct_iid, cto->ct_flags, cto->ct_status,
-+ cto->rsp.m1.ct_scsi_status, cto->ct_resid, "<END>");
-+ isp_put_ctio2(isp, cto, qe);
-+ ISP_TDQE(isp, "tdma_mkfc[no data]", curi, qe);
-+ return (CMD_QUEUED);
-+ }
-+
-+ if ((cto->ct_flags & CT2_FLAG_MMASK) != CT2_FLAG_MODE0) {
-+ isp_prt(isp, ISP_LOGERR,
-+ "tdma_mkfc, a data CTIO2 without MODE0 set (0x%x)", cto->ct_flags);
-+ cto->ct_resid = -EINVAL;
-+ return (CMD_COMPLETE);
-+ }
-+
-+ /*
-+ * First, count and map all S/G segments
-+ *
-+ * The byte counter has to be signed because
-+ * we can have descriptors that are, in fact,
-+ * longer than our data transfer count.
-+ */
-+ sg = tmd->cd_data;
-+ nseg = 0;
-+ xfcnt = tmd->cd_xfrlen;
-+ while (xfcnt > 0) {
-+ nseg++;
-+ xfcnt -= sg_dma_len(sg);
-+ sg++;
-+ }
-+ sg = tmd->cd_data;
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
-+ {
-+ struct isp_pcisoftc *pcs = (struct isp_pcisoftc *) isp;
-+ int new_seg_cnt;
-+ new_seg_cnt = pci_map_sg(pcs->pci_dev, sg, nseg,
-+ (cto->ct_flags & CT2_DATA_IN)? PCI_DMA_TODEVICE : PCI_DMA_FROMDEVICE);
-+ if (new_seg_cnt == 0) {
-+ isp_prt(isp, ISP_LOGWARN, "unable to dma map request");
-+ cto->ct_resid = -ENOMEM;
-+ return (CMD_COMPLETE);
-+ }
-+ if (new_seg_cnt != nseg) {
-+ isp_prt(isp, ISP_LOGERR, "new seg cnt != old");
-+ cto->ct_resid = -EINVAL;
-+ return (CMD_COMPLETE);
-+ }
-+ }
-+#endif
-+
-+ /*
-+ * Second, figure out whether we need to send a final separate CTIO2
-+ *
-+ * The 2100/2200 firmware documentation indicates that if we have
-+ * good SCSI status (0), but still have a residual, we can still
-+ * describe this as part of a Mode 0 CTIO2. The 2300 firmware docs
-+ * seem to indicate that if we wish to convey a non-zero residual,
-+ * we can't do it as part of a Mode 0 CTIO2. To be safe, as well
-+ * as follow the most likely occurrences, we'll push a second
-+ * Mode 1 CTIO2 in any case that we have nonzero SCSI status
-+ * or a residual.
-+ */
-+ swd = cto->rsp.m0.ct_scsi_status;
-+
-+ if ((cto->ct_flags & CT2_SENDSTATUS) && ((swd & 0xf) || cto->ct_resid)) {
-+ cto2 = &ct2;
-+ /*
-+ * Copy over CTIO2
-+ */
-+ MEMCPY(cto2, cto, sizeof (ct2_entry_t));
-+
-+ /*
-+ * Clear fields from first CTIO2 that now need to be cleared
-+ */
-+ cto->ct_flags &= ~(CT2_SENDSTATUS|CT2_CCINCR|CT2_FASTPOST);
-+ cto->ct_resid = 0;
-+ cto->ct_syshandle = 0;
-+ cto->rsp.m0.ct_scsi_status = 0;
-+
-+ /*
-+ * Reset fields in the second CTIO2 as appropriate.
-+ */
-+ cto2->ct_flags &= ~(CT2_FLAG_MMASK|CT2_DATAMASK);
-+ cto2->ct_flags |= CT2_NO_DATA|CT2_NO_DATA|CT2_FLAG_MODE1;
-+ cto2->ct_seg_count = 0;
-+ cto2->ct_reloff = 0;
-+ MEMZERO(&cto2->rsp, sizeof (cto2->rsp));
-+ cto2->rsp.m1.ct_scsi_status = swd;
-+ if ((swd & 0xf) == SCSI_CHECK && (swd & CT2_SNSLEN_VALID)) {
-+ MEMCPY(cto2->rsp.m1.ct_resp, tmd->cd_sense, QLTM_SENSELEN);
-+ cto2->rsp.m1.ct_senselen = QLTM_SENSELEN;
-+ cto2->rsp.m1.ct_scsi_status |= CT2_SNSLEN_VALID;
-+ }
-+ } else {
-+ cto2 = NULL;
-+ }
-+
-+ /*
-+ * Third, Fill in the data segments in the first CTIO2 itself.
-+ */
-+ xfcnt = tmd->cd_xfrlen;
-+ cto->ct_seg_count = nseg;
-+
-+ for (seg = 0; seg < min(nseg, ISP_RQDSEG_T2); seg++) {
-+ cto->rsp.m0.ct_dataseg[seg].ds_base = sg_dma_address(sg);
-+ bc = min(sg_dma_len(sg), xfcnt);
-+ cto->rsp.m0.ct_dataseg[seg].ds_count = bc;
-+ cto->rsp.m0.ct_xfrlen += bc;
-+ xfcnt -= bc;
-+ isp_prt(isp, ISP_LOGTDEBUG1, " ent0[%d]%lx:%lu", seg,
-+ (unsigned long)sg_dma_address(sg), (unsigned long)sg_dma_len(sg));
-+ sg++;
-+ }
-+
-+ /*
-+ * Now do any continuation segments that are required.
-+ */
-+ while (seg < nseg) {
-+ int curseg;
-+ ispcontreq_t local, *crq = &local;
-+
-+ qe = (ispcontreq_t *) ISP_QUEUE_ENTRY(isp->isp_rquest, nxti);
-+ curi = nxti;
-+ nxti = ISP_NXT_QENTRY(curi, RQUEST_QUEUE_LEN(isp));
-+ if (nxti == optr) {
-+ isp_prt(isp, ISP_LOGTDEBUG0,
-+ "tdma_mkfc: request queue overflow");
-+ cto->ct_resid = -EAGAIN;
-+ return (CMD_COMPLETE);
-+ }
-+ cto->ct_header.rqs_entry_count++;
-+ MEMZERO((void *)crq, sizeof (*crq));
-+ crq->req_header.rqs_entry_count = 1;
-+ crq->req_header.rqs_entry_type = RQSTYPE_DATASEG;
-+ for (curseg = 0; seg < nseg && curseg < ISP_CDSEG; curseg++, seg++) {
-+ crq->req_dataseg[curseg].ds_base = sg_dma_address(sg);
-+ bc = min(sg_dma_len(sg), xfcnt);
-+ crq->req_dataseg[curseg].ds_count = bc;
-+ cto->rsp.m0.ct_xfrlen += bc;
-+ xfcnt -= bc;
-+ isp_prt(isp, ISP_LOGTDEBUG1, " ent%d[%d]%lx:%lu",
-+ cto->ct_header.rqs_entry_count - 1, curseg,
-+ (unsigned long)sg_dma_address(sg), (unsigned long)bc);
-+ sg++;
-+ }
-+ isp_put_cont_req(isp, crq, (ispcontreq_t *)qe);
-+ MEMORYBARRIER(isp, SYNC_REQUEST, curi, QENTRY_LEN);
-+ ISP_TDQE(isp, "tdma_mkfc:cont", curi, cto);
-+ }
-+
-+ /*
-+ * If we have a final CTIO2, allocate and push *that*
-+ * onto the request queue.
-+ */
-+ if (cto2) {
-+ qe = (ct2_entry_t *) ISP_QUEUE_ENTRY(isp->isp_rquest, nxti);
-+ curi = nxti;
-+ nxti = ISP_NXT_QENTRY(curi, RQUEST_QUEUE_LEN(isp));
-+ if (nxti == optr) {
-+ isp_prt(isp, ISP_LOGTDEBUG0,
-+ "tdma_mkfc: request queue overflow");
-+ cto->ct_resid = -EAGAIN;
-+ return (CMD_COMPLETE);
-+ }
-+ MEMORYBARRIER(isp, SYNC_REQUEST, curi, QENTRY_LEN);
-+ isp_put_ctio2(isp, cto2, (ct2_entry_t *)qe);
-+ ISP_TDQE(isp, "tdma_mkfc:final", curi, cto2);
-+ }
-+ qe = ISP_QUEUE_ENTRY(isp->isp_rquest, isp->isp_reqidx);
-+ isp_put_ctio2(isp, cto, qe);
-+ ISP_TDQE(isp, "tdma_mkfc", isp->isp_reqidx, cto);
-+ *nxtip = nxti;
-+ return (CMD_QUEUED);
-+}
-+#endif
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
-+#define FOURG_SEG(x) (((u64) (x)) & 0xffffffff00000000ULL)
-+
-+static int
-+isp_pci_dmasetup(struct ispsoftc *isp, Scsi_Cmnd *Cmnd, ispreq_t *rq,
-+ u_int16_t *nxi, u_int16_t optr)
-+{
-+ struct scatterlist *sg, *savesg;
-+ DMA_ADDR_T one_shot_addr, last_synthetic_addr;
-+ unsigned int one_shot_length, last_synthetic_count;
-+ int segcnt, seg, ovseg, seglim;
-+ void *h;
-+ u_int16_t nxti;
-+
-+
-+#ifdef LINUX_ISP_TARGET_MODE
-+ if (rq->req_header.rqs_entry_type == RQSTYPE_CTIO ||
-+ rq->req_header.rqs_entry_type == RQSTYPE_CTIO2) {
-+ int s;
-+ if (IS_SCSI(isp))
-+ s = tdma_mk(isp, (tmd_cmd_t *)Cmnd, (ct_entry_t *)rq, nxi, optr);
-+ else
-+ s = tdma_mkfc(isp, (tmd_cmd_t *)Cmnd, (ct2_entry_t *)rq, nxi, optr);
-+ return (s);
-+ }
-+#endif
-+
-+ nxti = *nxi;
-+ h = (void *) ISP_QUEUE_ENTRY(isp->isp_rquest, isp->isp_reqidx);
-+
-+ if (Cmnd->sc_data_direction == SCSI_DATA_NONE ||
-+ Cmnd->request_bufflen == 0) {
-+ rq->req_seg_count = 1;
-+ goto mbxsync;
-+ }
-+
-+ if (IS_FC(isp)) {
-+ seglim = ISP_RQDSEG_T2;
-+ ((ispreqt2_t *)rq)->req_totalcnt = Cmnd->request_bufflen;
-+ if (Cmnd->sc_data_direction == SCSI_DATA_WRITE) {
-+ ((ispreqt2_t *)rq)->req_flags |= REQFLAG_DATA_OUT;
-+ } else if (Cmnd->sc_data_direction == SCSI_DATA_READ) {
-+ ((ispreqt2_t *)rq)->req_flags |= REQFLAG_DATA_IN;
-+ } else {
-+ isp_prt(isp, ISP_LOGERR,
-+ "unkown data direction (%x) for %d byte request (opcode 0x%x)",
-+ Cmnd->sc_data_direction, Cmnd->request_bufflen, Cmnd->cmnd[0]);
-+ XS_SETERR(Cmnd, HBA_BOTCH);
-+ return (CMD_COMPLETE);
-+ }
-+ } else {
-+ if (Cmnd->cmd_len > 12)
-+ seglim = 0;
-+ else
-+ seglim = ISP_RQDSEG;
-+ if (Cmnd->sc_data_direction == SCSI_DATA_WRITE) {
-+ rq->req_flags |= REQFLAG_DATA_OUT;
-+ } else if (Cmnd->sc_data_direction == SCSI_DATA_READ) {
-+ rq->req_flags |= REQFLAG_DATA_IN;
-+ } else {
-+ isp_prt(isp, ISP_LOGERR,
-+ "unkown data direction (%x) for %d byte request (opcode 0x%x)",
-+ Cmnd->sc_data_direction, Cmnd->request_bufflen, Cmnd->cmnd[0]);
-+ XS_SETERR(Cmnd, HBA_BOTCH);
-+ return (CMD_COMPLETE);
-+ }
-+ }
-+
-+ one_shot_addr = (DMA_ADDR_T) 0;
-+ one_shot_length = 0;
-+ if ((segcnt = Cmnd->use_sg) == 0) {
-+ struct isp_pcisoftc *pcs = (struct isp_pcisoftc *) isp;
-+ segcnt = 1;
-+ sg = NULL;
-+ one_shot_length = Cmnd->request_bufflen;
-+ one_shot_addr = pci_map_single(pcs->pci_dev,
-+ Cmnd->request_buffer, Cmnd->request_bufflen,
-+ scsi_to_pci_dma_dir(Cmnd->sc_data_direction));
-+ QLA_HANDLE(Cmnd) = (DMA_HTYPE_T) one_shot_addr;
-+ } else {
-+ struct isp_pcisoftc *pcs = (struct isp_pcisoftc *) isp;
-+ sg = (struct scatterlist *) Cmnd->request_buffer;
-+ segcnt = pci_map_sg(pcs->pci_dev, sg, Cmnd->use_sg,
-+ scsi_to_pci_dma_dir(Cmnd->sc_data_direction));
-+ }
-+ if (segcnt == 0) {
-+ isp_prt(isp, ISP_LOGWARN, "unable to dma map request");
-+ XS_SETERR(Cmnd, HBA_BOTCH);
-+ return (CMD_EAGAIN);
-+ }
-+ savesg = sg;
-+
-+again:
-+ last_synthetic_count = 0;
-+ last_synthetic_addr = 0;
-+ for (seg = 0, rq->req_seg_count = 0;
-+ seg < segcnt && rq->req_seg_count < seglim;
-+ seg++, rq->req_seg_count++) {
-+ DMA_ADDR_T addr;
-+ unsigned int length;
-+
-+ if (sg) {
-+ length = QLA_SG_C(sg);
-+ addr = QLA_SG_A(sg);
-+ sg++;
-+ } else {
-+ length = one_shot_length;
-+ addr = one_shot_addr;
-+ }
-+
-+ if (ISP_A64 && IS_HIGH_ISP_ADDR(addr)) {
-+ if (IS_FC(isp)) {
-+ if (rq->req_header.rqs_entry_type != RQSTYPE_T3RQS) {
-+ rq->req_header.rqs_entry_type = RQSTYPE_T3RQS;
-+ seglim = ISP_RQDSEG_T3;
-+ sg = savesg;
-+ goto again;
-+ }
-+ } else {
-+ if (rq->req_header.rqs_entry_type != RQSTYPE_A64) {
-+ rq->req_header.rqs_entry_type = RQSTYPE_A64;
-+ seglim = ISP_RQDSEG_A64;
-+ sg = savesg;
-+ goto again;
-+ }
-+ }
-+ }
-+ if (ISP_A64 && rq->req_header.rqs_entry_type == RQSTYPE_T3RQS) {
-+ ispreqt3_t *rq3 = (ispreqt3_t *)rq;
-+ rq3->req_dataseg[rq3->req_seg_count].ds_count = length;
-+ rq3->req_dataseg[rq3->req_seg_count].ds_base = LOWD(addr);
-+ rq3->req_dataseg[rq3->req_seg_count].ds_basehi = HIWD(addr);
-+ /*
-+ * Make sure we don't cross a 4GB boundary.
-+ */
-+ if (FOURG_SEG(addr) != FOURG_SEG(addr + length)) {
-+ isp_prt(isp, ISP_LOGDEBUG1, "seg0[%d]%llx:%u (TRUNC'd)",
-+ rq->req_seg_count, (long long)addr, length);
-+ rq3->req_dataseg[rq3->req_seg_count].ds_count =
-+ (unsigned int) (FOURG_SEG(addr + length) - addr);
-+ addr += rq3->req_dataseg[rq3->req_seg_count].ds_count;
-+ length -= rq3->req_dataseg[rq3->req_seg_count].ds_count;
-+ /*
-+ * Do we have space to split it here?
-+ */
-+ if (rq3->req_seg_count == seglim - 1) {
-+ last_synthetic_count = length;
-+ last_synthetic_addr = addr;
-+ } else {
-+ rq3->req_seg_count++;
-+ rq3->req_dataseg[rq3->req_seg_count].ds_count = length;
-+ rq3->req_dataseg[rq3->req_seg_count].ds_base = LOWD(addr);
-+ rq3->req_dataseg[rq3->req_seg_count].ds_basehi = HIWD(addr);
-+ }
-+ }
-+ } else if (ISP_A64 && rq->req_header.rqs_entry_type == RQSTYPE_A64) {
-+ ispreq64_t *rq6 = (ispreq64_t *)rq;
-+ rq6->req_dataseg[rq6->req_seg_count].ds_count = length;
-+ rq6->req_dataseg[rq6->req_seg_count].ds_base = LOWD(addr);
-+ rq6->req_dataseg[rq6->req_seg_count].ds_basehi = HIWD(addr);
-+ /*
-+ * Make sure we don't cross a 4GB boundary.
-+ */
-+ if (FOURG_SEG(addr) != FOURG_SEG(addr + length)) {
-+ isp_prt(isp, ISP_LOGDEBUG1, "seg0[%d]%llx:%u (TRUNC'd)",
-+ rq->req_seg_count, (long long)addr, length);
-+ rq6->req_dataseg[rq6->req_seg_count].ds_count =
-+ (unsigned int) (FOURG_SEG(addr + length) - addr);
-+ addr += rq6->req_dataseg[rq6->req_seg_count].ds_count;
-+ length -= rq6->req_dataseg[rq6->req_seg_count].ds_count;
-+ /*
-+ * Do we have space to split it here?
-+ */
-+ if (rq6->req_seg_count == seglim - 1) {
-+ last_synthetic_count = length;
-+ last_synthetic_addr = LOWD(addr);
-+ } else {
-+ rq6->req_seg_count++;
-+ rq6->req_dataseg[rq6->req_seg_count].ds_count = length;
-+ rq6->req_dataseg[rq6->req_seg_count].ds_base = LOWD(addr);
-+ rq6->req_dataseg[rq6->req_seg_count].ds_basehi = HIWD(addr);
-+ }
-+ }
-+ } else if (rq->req_header.rqs_entry_type == RQSTYPE_T2RQS) {
-+ ispreqt2_t *rq2 = (ispreqt2_t *)rq;
-+ rq2->req_dataseg[rq2->req_seg_count].ds_count = length;
-+ rq2->req_dataseg[rq2->req_seg_count].ds_base = addr;
-+ } else {
-+ rq->req_dataseg[rq->req_seg_count].ds_count = length;
-+ rq->req_dataseg[rq->req_seg_count].ds_base = addr;
-+ }
-+ isp_prt(isp, ISP_LOGDEBUG1, "seg0[%d]%llx:%u",
-+ rq->req_seg_count, (long long)addr, length);
-+ }
-+
-+ if (seg == segcnt && last_synthetic_count == 0) {
-+ goto mbxsync;
-+ }
-+
-+ do {
-+ int lim;
-+ u_int16_t curip;
-+ ispcontreq_t local, *crq = &local, *qep;
-+
-+ curip = nxti;
-+ qep = (ispcontreq_t *) ISP_QUEUE_ENTRY(isp->isp_rquest, curip);
-+ nxti = ISP_NXT_QENTRY((curip), RQUEST_QUEUE_LEN(isp));
-+ if (nxti == optr) {
-+ isp_pci_dmateardown(isp, Cmnd, 0);
-+ isp_prt(isp, ISP_LOGDEBUG0, "out of space for continuations");
-+ XS_SETERR(Cmnd, HBA_BOTCH);
-+ return (CMD_EAGAIN);
-+ }
-+ rq->req_header.rqs_entry_count++;
-+ MEMZERO((void *)crq, sizeof (*crq));
-+ crq->req_header.rqs_entry_count = 1;
-+ if (rq->req_header.rqs_entry_type == RQSTYPE_T3RQS ||
-+ rq->req_header.rqs_entry_type == RQSTYPE_A64) {
-+ crq->req_header.rqs_entry_type = RQSTYPE_A64_CONT;
-+ lim = ISP_CDSEG64;
-+ } else {
-+ crq->req_header.rqs_entry_type = RQSTYPE_DATASEG;
-+ lim = ISP_CDSEG;
-+ }
-+
-+ for (ovseg = 0; (seg < segcnt || last_synthetic_count) && ovseg < lim;
-+ rq->req_seg_count++, seg++, ovseg++, sg++) {
-+ DMA_ADDR_T addr;
-+ unsigned int length;
-+
-+ if (last_synthetic_count) {
-+ addr = last_synthetic_addr;
-+ length = last_synthetic_count;
-+ last_synthetic_count = 0;
-+ sg--;
-+ seg--;
-+ } else {
-+ addr = QLA_SG_A(sg);
-+ length = QLA_SG_C(sg);
-+ }
-+
-+ if (length == 0) {
-+ panic("zero length s-g element at line %d", __LINE__);
-+ }
-+ isp_prt(isp, ISP_LOGDEBUG1, "seg%d[%d]%llx:%u",
-+ rq->req_header.rqs_entry_count-1, ovseg,
-+ (unsigned long long) addr, length);
-+
-+ if (crq->req_header.rqs_entry_type == RQSTYPE_A64_CONT) {
-+ ispcontreq64_t *xrq = (ispcontreq64_t *) crq;
-+ xrq->req_dataseg[ovseg].ds_count = length;
-+ xrq->req_dataseg[ovseg].ds_base = LOWD(addr);
-+ xrq->req_dataseg[ovseg].ds_basehi = HIWD(addr);
-+ /*
-+ * Make sure we don't cross a 4GB boundary.
-+ */
-+ if (FOURG_SEG(addr) != FOURG_SEG(addr + length)) {
-+ isp_prt(isp, ISP_LOGDEBUG1, "seg0[%d]%llx:%u (TRUNC'd)",
-+ rq->req_seg_count, (long long)addr, length);
-+ xrq->req_dataseg[ovseg].ds_count =
-+ (unsigned int) (FOURG_SEG(addr + length) - addr);
-+ addr += xrq->req_dataseg[ovseg].ds_count;
-+ length -= xrq->req_dataseg[ovseg].ds_count;
-+ /*
-+ * Do we have space to split it here?
-+ */
-+ if (ovseg == lim - 1) {
-+ last_synthetic_count = length;
-+ last_synthetic_addr = addr;
-+ } else {
-+ ovseg++;
-+ xrq->req_dataseg[ovseg].ds_count = length;
-+ xrq->req_dataseg[ovseg].ds_base = LOWD(addr);
-+ xrq->req_dataseg[ovseg].ds_basehi = HIWD(addr);
-+ }
-+ }
-+ continue;
-+ }
-+ /*
-+ * We get here if we're a 32 bit continuation entry.
-+ * We also check for being over 32 bits with our PCI
-+ * address. If we are, we set ourselves up to do 64
-+ * bit addressing and start the whole mapping process
-+ * all over again- we apparently can't really mix types
-+ */
-+ if (ISP_A64 && IS_HIGH_ISP_ADDR(addr)) {
-+ if (IS_FC(isp)) {
-+ rq->req_header.rqs_entry_type = RQSTYPE_T3RQS;
-+ seglim = ISP_RQDSEG_T3;
-+ } else {
-+ rq->req_header.rqs_entry_type = RQSTYPE_A64;
-+ seglim = ISP_RQDSEG_A64;
-+ }
-+ sg = savesg;
-+ nxti = *nxi;
-+ rq->req_header.rqs_entry_count = 1;
-+ goto again;
-+ }
-+ crq->req_dataseg[ovseg].ds_count = length;
-+ crq->req_dataseg[ovseg].ds_base = addr;
-+ }
-+ MEMORYBARRIER(isp, SYNC_REQUEST, curip, QENTRY_LEN);
-+ if (crq->req_header.rqs_entry_type == RQSTYPE_A64_CONT) {
-+ isp_put_cont64_req(isp,
-+ (ispcontreq64_t *)crq, (ispcontreq64_t *)qep);
-+ } else {
-+ isp_put_cont_req(isp, crq, qep);
-+ }
-+ } while (seg < segcnt || last_synthetic_count);
-+mbxsync:
-+ if (rq->req_header.rqs_entry_type == RQSTYPE_T3RQS) {
-+ isp_put_request_t3(isp, (ispreqt3_t *) rq, (ispreqt3_t *) h);
-+ } else if (rq->req_header.rqs_entry_type == RQSTYPE_T2RQS) {
-+ isp_put_request_t2(isp, (ispreqt2_t *) rq, (ispreqt2_t *) h);
-+ } else {
-+ isp_put_request(isp, (ispreq_t *) rq, (ispreq_t *) h);
-+ }
-+ *nxi = nxti;
-+ return (CMD_QUEUED);
-+}
-+
-+static void
-+isp_pci_dmateardown(struct ispsoftc *isp, Scsi_Cmnd *Cmnd, u_int16_t handle)
-+{
-+#ifdef LINUX_ISP_TARGET_MODE
-+ if (Cmnd->sc_magic != SCSI_CMND_MAGIC) {
-+ struct isp_pcisoftc *pcs = (struct isp_pcisoftc *)isp;
-+ tmd_cmd_t *tmd = (tmd_cmd_t *) Cmnd;
-+ struct scatterlist *sg = tmd->cd_data;
-+ int nseg = 0;
-+
-+ while (sg->address) {
-+ nseg++;
-+ sg++;
-+ }
-+ pci_unmap_sg(pcs->pci_dev, tmd->cd_data, nseg,
-+ (tmd->cd_hflags & CDFH_DATA_IN)? PCI_DMA_TODEVICE :
-+ PCI_DMA_FROMDEVICE);
-+ } else
-+#endif
-+ if (Cmnd->sc_data_direction != SCSI_DATA_NONE) {
-+ struct isp_pcisoftc *pcs = (struct isp_pcisoftc *)isp;
-+ if (Cmnd->use_sg) {
-+ pci_unmap_sg(pcs->pci_dev, (struct scatterlist *)Cmnd->buffer,
-+ Cmnd->use_sg, scsi_to_pci_dma_dir(Cmnd->sc_data_direction));
-+ } else if (Cmnd->request_bufflen) {
-+ DMA_ADDR_T handle = (DMA_ADDR_T) QLA_HANDLE(Cmnd);
-+ pci_unmap_single(pcs->pci_dev, handle, Cmnd->request_bufflen,
-+ scsi_to_pci_dma_dir(Cmnd->sc_data_direction));
-+ }
-+ }
-+}
-+
-+#else
-+
-+static int
-+isp_pci_dmasetup(struct ispsoftc *isp, Scsi_Cmnd *Cmnd, ispreq_t *rq,
-+ u_int16_t *nxi, u_int16_t optr)
-+{
-+ struct scatterlist *sg;
-+ DMA_ADDR_T one_shot_addr;
-+ unsigned int one_shot_length;
-+ int segcnt, seg, ovseg, seglim;
-+ void *h;
-+ u_int16_t nxti;
-+
-+#ifdef LINUX_ISP_TARGET_MODE
-+ if (rq->req_header.rqs_entry_type == RQSTYPE_CTIO ||
-+ rq->req_header.rqs_entry_type == RQSTYPE_CTIO2) {
-+ int s;
-+ if (IS_SCSI(isp))
-+ s = tdma_mk(isp, (tmd_cmd_t *)Cmnd, (ct_entry_t *)rq, nxi, optr);
-+ else
-+ s = tdma_mkfc(isp, (tmd_cmd_t *)Cmnd, (ct2_entry_t *)rq, nxi, optr);
-+ return (s);
-+ }
-+#endif
-+
-+ nxti = *nxi;
-+ h = (void *) ISP_QUEUE_ENTRY(isp->isp_rquest, isp->isp_reqidx);
-+
-+ if (Cmnd->request_bufflen == 0) {
-+ rq->req_seg_count = 1;
-+ goto mbxsync;
-+ }
-+
-+ if (IS_FC(isp)) {
-+ if (rq->req_header.rqs_entry_type == RQSTYPE_T3RQS)
-+ seglim = ISP_RQDSEG_T3;
-+ else
-+ seglim = ISP_RQDSEG_T2;
-+ ((ispreqt2_t *)rq)->req_totalcnt = Cmnd->request_bufflen;
-+ /*
-+ * Linux doesn't make it easy to tell which direction
-+ * the data is expected to go, and you really need to
-+ * know this for FC. We'll have to assume that some
-+ * of these commands that might be used for writes
-+ * our outbounds and all else are inbound.
-+ */
-+ switch (Cmnd->cmnd[0]) {
-+ case FORMAT_UNIT:
-+ case WRITE_6:
-+ case MODE_SELECT:
-+ case SEND_DIAGNOSTIC:
-+ case WRITE_10:
-+ case WRITE_BUFFER:
-+ case WRITE_LONG:
-+ case WRITE_SAME:
-+ case MODE_SELECT_10:
-+ case WRITE_12:
-+ case WRITE_VERIFY_12:
-+ case SEND_VOLUME_TAG:
-+ ((ispreqt2_t *)rq)->req_flags |= REQFLAG_DATA_OUT;
-+ break;
-+ default:
-+ ((ispreqt2_t *)rq)->req_flags |= REQFLAG_DATA_IN;
-+ }
-+ } else {
-+ if (Cmnd->cmd_len > 12)
-+ seglim = 0;
-+ else
-+ seglim = ISP_RQDSEG;
-+ rq->req_flags |= REQFLAG_DATA_OUT | REQFLAG_DATA_IN;
-+ }
-+
-+ one_shot_addr = (DMA_ADDR_T) 0;
-+ one_shot_length = 0;
-+ if ((segcnt = Cmnd->use_sg) == 0) {
-+ segcnt = 1;
-+ sg = NULL;
-+ one_shot_length = Cmnd->request_bufflen;
-+ one_shot_addr = virt_to_bus(Cmnd->request_buffer);
-+ } else {
-+ sg = (struct scatterlist *) Cmnd->request_buffer;
-+ }
-+ if (segcnt == 0) {
-+ isp_prt(isp, ISP_LOGWARN, "unable to dma map request");
-+ XS_SETERR(Cmnd, HBA_BOTCH);
-+ return (CMD_EAGAIN);
-+ }
-+
-+ for (seg = 0, rq->req_seg_count = 0;
-+ seg < segcnt && rq->req_seg_count < seglim;
-+ seg++, rq->req_seg_count++) {
-+ DMA_ADDR_T addr;
-+ unsigned int length;
-+
-+ if (sg) {
-+ length = QLA_SG_C(sg);
-+ addr = QLA_SG_A(sg);
-+ sg++;
-+ } else {
-+ length = one_shot_length;
-+ addr = one_shot_addr;
-+ }
-+
-+ if (rq->req_header.rqs_entry_type == RQSTYPE_T2RQS) {
-+ ispreqt2_t *rq2 = (ispreqt2_t *)rq;
-+ rq2->req_dataseg[rq2->req_seg_count].ds_count = length;
-+ rq2->req_dataseg[rq2->req_seg_count].ds_base = addr;
-+ } else {
-+ rq->req_dataseg[rq->req_seg_count].ds_count = length;
-+ rq->req_dataseg[rq->req_seg_count].ds_base = addr;
-+ }
-+ isp_prt(isp, ISP_LOGDEBUG1, "seg0[%d]%llx:%u from %p", seg,
-+ (long long)addr, length, sg? sg->address : Cmnd->request_buffer);
-+ }
-+
-+ if (seg == segcnt) {
-+ goto mbxsync;
-+ }
-+
-+ do {
-+ int lim;
-+ u_int16_t curip;
-+ ispcontreq_t local, *crq = &local, *qep;
-+
-+ curip = nxti;
-+ qep = (ispcontreq_t *) ISP_QUEUE_ENTRY(isp->isp_rquest, curip);
-+ nxti = ISP_NXT_QENTRY((curip), RQUEST_QUEUE_LEN(isp));
-+ if (nxti == optr) {
-+ isp_prt(isp, ISP_LOGDEBUG0, "out of space for continuations");
-+ XS_SETERR(Cmnd, HBA_BOTCH);
-+ return (CMD_EAGAIN);
-+ }
-+ rq->req_header.rqs_entry_count++;
-+ MEMZERO((void *)crq, sizeof (*crq));
-+ crq->req_header.rqs_entry_count = 1;
-+ if (rq->req_header.rqs_entry_type == RQSTYPE_T3RQS) {
-+ lim = ISP_CDSEG64;
-+ crq->req_header.rqs_entry_type = RQSTYPE_A64_CONT;
-+ } else {
-+ lim = ISP_CDSEG;
-+ crq->req_header.rqs_entry_type = RQSTYPE_DATASEG;
-+ }
-+
-+ for (ovseg = 0; seg < segcnt && ovseg < lim;
-+ rq->req_seg_count++, seg++, ovseg++, sg++) {
-+ if (sg_dma_len(sg) == 0) {
-+ panic("zero length s-g element at line %d", __LINE__);
-+ }
-+ crq->req_dataseg[ovseg].ds_count = QLA_SG_C(sg);
-+ crq->req_dataseg[ovseg].ds_base = QLA_SG_A(sg);
-+ isp_prt(isp, ISP_LOGDEBUG1, "seg%d[%d]%llx:%u from %p",
-+ rq->req_header.rqs_entry_count-1, ovseg,
-+ (unsigned long long) QLA_SG_A(sg), QLA_SG_C(sg), sg->address);
-+ }
-+ MEMORYBARRIER(isp, SYNC_REQUEST, curip, QENTRY_LEN);
-+ isp_put_cont_req(isp, crq, qep);
-+ } while (seg < segcnt);
-+mbxsync:
-+ if (rq->req_header.rqs_entry_type == RQSTYPE_T3RQS) {
-+ isp_put_request_t3(isp, (ispreqt3_t *) rq, (ispreqt3_t *) h);
-+ } else if (rq->req_header.rqs_entry_type == RQSTYPE_T2RQS) {
-+ isp_put_request_t2(isp, (ispreqt2_t *) rq, (ispreqt2_t *) h);
-+ } else {
-+ isp_put_request(isp, (ispreq_t *) rq, (ispreq_t *) h);
-+ }
-+ *nxi = nxti;
-+ return (CMD_QUEUED);
-+}
-+#endif
-+
-+static void
-+isp_pci_reset1(struct ispsoftc *isp)
-+{
-+ isp_pci_wr_reg(isp, HCCR, PCI_HCCR_CMD_BIOS);
-+ ENABLE_INTS(isp);
-+ isp->mbintsok = 1;
-+}
-+
-+static void
-+isp_pci_dumpregs(struct ispsoftc *isp, const char *msg)
-+{
-+ struct isp_pcisoftc *pcs = (struct isp_pcisoftc *) isp;
-+ u_int16_t csr;
-+
-+ pci_read_config_word(pcs->pci_dev, PCI_COMMAND, &csr);
-+ printk("%s: ", isp->isp_name);
-+ if (msg)
-+ printk("%s\n", msg);
-+ if (IS_SCSI(isp))
-+ printk(" biu_conf1=%x", ISP_READ(isp, BIU_CONF1));
-+ else
-+ printk(" biu_csr=%x", ISP_READ(isp, BIU2100_CSR));
-+ printk(" biu_icr=%x biu_isr=%x biu_sema=%x ", ISP_READ(isp, BIU_ICR),
-+ ISP_READ(isp, BIU_ISR), ISP_READ(isp, BIU_SEMA));
-+ printk("risc_hccr=%x\n", ISP_READ(isp, HCCR));
-+ if (IS_SCSI(isp)) {
-+ ISP_WRITE(isp, HCCR, HCCR_CMD_PAUSE);
-+ printk(" cdma_conf=%x cdma_sts=%x cdma_fifostat=%x\n",
-+ ISP_READ(isp, CDMA_CONF), ISP_READ(isp, CDMA_STATUS),
-+ ISP_READ(isp, CDMA_FIFO_STS));
-+ printk(" ddma_conf=%x ddma_sts=%x ddma_fifostat=%x\n",
-+ ISP_READ(isp, DDMA_CONF), ISP_READ(isp, DDMA_STATUS),
-+ ISP_READ(isp, DDMA_FIFO_STS));
-+ printk(" sxp_int=%x sxp_gross=%x sxp(scsi_ctrl)=%x\n",
-+ ISP_READ(isp, SXP_INTERRUPT),
-+ ISP_READ(isp, SXP_GROSS_ERR),
-+ ISP_READ(isp, SXP_PINS_CTRL));
-+ ISP_WRITE(isp, HCCR, HCCR_CMD_RELEASE);
-+ }
-+ printk(" mbox regs: %x %x %x %x %x\n",
-+ ISP_READ(isp, OUTMAILBOX0), ISP_READ(isp, OUTMAILBOX1),
-+ ISP_READ(isp, OUTMAILBOX2), ISP_READ(isp, OUTMAILBOX3),
-+ ISP_READ(isp, OUTMAILBOX4));
-+ printk(" PCI Status Command/Status=%x\n", csr);
-+}
-+
-+#ifdef MODULE
-+MODULE_PARM(isp_pci_mapmem, "i");
-+#endif
-+/*
-+ * mode: c
-+ * Local variables:
-+ * c-indent-level: 4
-+ * c-brace-imaginary-offset: 0
-+ * c-brace-offset: -4
-+ * c-argdecl-indent: 4
-+ * c-label-offset: -4
-+ * c-continued-statement-offset: 4
-+ * c-continued-brace-offset: 0
-+ * End:
-+ */
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/scsi/isp/ispreg.h 2003-07-19 17:06:33.000000000 -0700
-@@ -0,0 +1,1011 @@
-+/* @(#)ispreg.h 1.6 */
-+/*
-+ * Machine Independent (well, as best as possible) register
-+ * definitions for Qlogic ISP SCSI adapters.
-+ *
-+ * Copyright (c) 1997, 1998, 1999, 2000 by Matthew Jacob
-+ * All rights reserved.
-+ *
-+ * Redistribution and use in source and binary forms, with or without
-+ * modification, are permitted provided that the following conditions
-+ * are met:
-+ * 1. Redistributions of source code must retain the above copyright
-+ * notice immediately at the beginning of the file, without modification,
-+ * this list of conditions, and the following disclaimer.
-+ * 2. The name of the author may not be used to endorse or promote products
-+ * derived from this software without specific prior written permission.
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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)
-+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-+ * SUCH DAMAGE.
-+ */
-+#ifndef _ISPREG_H
-+#define _ISPREG_H
-+
-+/*
-+ * Hardware definitions for the Qlogic ISP registers.
-+ */
-+
-+/*
-+ * This defines types of access to various registers.
-+ *
-+ * R: Read Only
-+ * W: Write Only
-+ * RW: Read/Write
-+ *
-+ * R*, W*, RW*: Read Only, Write Only, Read/Write, but only
-+ * if RISC processor in ISP is paused.
-+ */
-+
-+/*
-+ * Offsets for various register blocks.
-+ *
-+ * Sad but true, different architectures have different offsets.
-+ *
-+ * Don't be alarmed if none of this makes sense. The original register
-+ * layout set some defines in a certain pattern. Everything else has been
-+ * grafted on since. For example, the ISP1080 manual will state that DMA
-+ * registers start at 0x80 from the base of the register address space.
-+ * That's true, but for our purposes, we define DMA_REGS_OFF for the 1080
-+ * to start at offset 0x60 because the DMA registers are all defined to
-+ * be DMA_BLOCK+0x20 and so on. Clear?
-+ */
-+
-+#define BIU_REGS_OFF 0x00
-+
-+#define PCI_MBOX_REGS_OFF 0x70
-+#define PCI_MBOX_REGS2100_OFF 0x10
-+#define PCI_MBOX_REGS2300_OFF 0x40
-+#define SBUS_MBOX_REGS_OFF 0x80
-+
-+#define PCI_SXP_REGS_OFF 0x80
-+#define SBUS_SXP_REGS_OFF 0x200
-+
-+#define PCI_RISC_REGS_OFF 0x80
-+#define SBUS_RISC_REGS_OFF 0x400
-+
-+/* Bless me! Chip designers have putzed it again! */
-+#define ISP1080_DMA_REGS_OFF 0x60
-+#define DMA_REGS_OFF 0x00 /* same as BIU block */
-+
-+#define SBUS_REGSIZE 0x450
-+#define PCI_REGSIZE 0x100
-+
-+/*
-+ * NB: The *_BLOCK definitions have no specific hardware meaning.
-+ * They serve simply to note to the MD layer which block of
-+ * registers offsets are being accessed.
-+ */
-+#define _NREG_BLKS 5
-+#define _BLK_REG_SHFT 13
-+#define _BLK_REG_MASK (7 << _BLK_REG_SHFT)
-+#define BIU_BLOCK (0 << _BLK_REG_SHFT)
-+#define MBOX_BLOCK (1 << _BLK_REG_SHFT)
-+#define SXP_BLOCK (2 << _BLK_REG_SHFT)
-+#define RISC_BLOCK (3 << _BLK_REG_SHFT)
-+#define DMA_BLOCK (4 << _BLK_REG_SHFT)
-+
-+/*
-+ * Bus Interface Block Register Offsets
-+ */
-+
-+#define BIU_ID_LO (BIU_BLOCK+0x0) /* R : Bus ID, Low */
-+#define BIU2100_FLASH_ADDR (BIU_BLOCK+0x0)
-+#define BIU_ID_HI (BIU_BLOCK+0x2) /* R : Bus ID, High */
-+#define BIU2100_FLASH_DATA (BIU_BLOCK+0x2)
-+#define BIU_CONF0 (BIU_BLOCK+0x4) /* R : Bus Configuration #0 */
-+#define BIU_CONF1 (BIU_BLOCK+0x6) /* R : Bus Configuration #1 */
-+#define BIU2100_CSR (BIU_BLOCK+0x6)
-+#define BIU_ICR (BIU_BLOCK+0x8) /* RW : Bus Interface Ctrl */
-+#define BIU_ISR (BIU_BLOCK+0xA) /* R : Bus Interface Status */
-+#define BIU_SEMA (BIU_BLOCK+0xC) /* RW : Bus Semaphore */
-+#define BIU_NVRAM (BIU_BLOCK+0xE) /* RW : Bus NVRAM */
-+/*
-+ * These are specific to the 2300.
-+ *
-+ * They *claim* you can read BIU_R2HSTSLO with a full 32 bit access
-+ * and get both registers, but I'm a bit dubious about that. But the
-+ * point here is that the top 16 bits are firmware defined bits that
-+ * the RISC processor uses to inform the host about something- usually
-+ * something which was nominally in a mailbox register.
-+ */
-+#define BIU_REQINP (BIU_BLOCK+0x10) /* Request Queue In */
-+#define BIU_REQOUTP (BIU_BLOCK+0x12) /* Request Queue Out */
-+#define BIU_RSPINP (BIU_BLOCK+0x14) /* Response Queue In */
-+#define BIU_RSPOUTP (BIU_BLOCK+0x16) /* Response Queue Out */
-+
-+#define BIU_R2HSTSLO (BIU_BLOCK+0x18)
-+#define BIU_R2HSTSHI (BIU_BLOCK+0x1A)
-+
-+#define BIU_R2HST_INTR (1 << 15) /* RISC to Host Interrupt */
-+#define BIU_R2HST_PAUSED (1 << 8) /* RISC paused */
-+#define BIU_R2HST_ISTAT_MASK 0x3f /* intr information && status */
-+#define ISPR2HST_ROM_MBX_OK 0x1 /* ROM mailbox cmd done ok */
-+#define ISPR2HST_ROM_MBX_FAIL 0x2 /* ROM mailbox cmd done fail */
-+#define ISPR2HST_MBX_OK 0x10 /* mailbox cmd done ok */
-+#define ISPR2HST_MBX_FAIL 0x11 /* mailbox cmd done fail */
-+#define ISPR2HST_ASYNC_EVENT 0x12 /* Async Event */
-+#define ISPR2HST_RSPQ_UPDATE 0x13 /* Response Queue Update */
-+#define ISPR2HST_RQST_UPDATE 0x14 /* Resquest Queue Update */
-+#define ISPR2HST_RIO_16 0x15 /* RIO 1-16 */
-+#define ISPR2HST_FPOST 0x16 /* Low 16 bits fast post */
-+#define ISPR2HST_FPOST_CTIO 0x17 /* Low 16 bits fast post ctio */
-+
-+#define DFIFO_COMMAND (BIU_BLOCK+0x60) /* RW : Command FIFO Port */
-+#define RDMA2100_CONTROL DFIFO_COMMAND
-+#define DFIFO_DATA (BIU_BLOCK+0x62) /* RW : Data FIFO Port */
-+
-+/*
-+ * Putzed DMA register layouts.
-+ */
-+#define CDMA_CONF (DMA_BLOCK+0x20) /* RW*: DMA Configuration */
-+#define CDMA2100_CONTROL CDMA_CONF
-+#define CDMA_CONTROL (DMA_BLOCK+0x22) /* RW*: DMA Control */
-+#define CDMA_STATUS (DMA_BLOCK+0x24) /* R : DMA Status */
-+#define CDMA_FIFO_STS (DMA_BLOCK+0x26) /* R : DMA FIFO Status */
-+#define CDMA_COUNT (DMA_BLOCK+0x28) /* RW*: DMA Transfer Count */
-+#define CDMA_ADDR0 (DMA_BLOCK+0x2C) /* RW*: DMA Address, Word 0 */
-+#define CDMA_ADDR1 (DMA_BLOCK+0x2E) /* RW*: DMA Address, Word 1 */
-+#define CDMA_ADDR2 (DMA_BLOCK+0x30) /* RW*: DMA Address, Word 2 */
-+#define CDMA_ADDR3 (DMA_BLOCK+0x32) /* RW*: DMA Address, Word 3 */
-+
-+#define DDMA_CONF (DMA_BLOCK+0x40) /* RW*: DMA Configuration */
-+#define TDMA2100_CONTROL DDMA_CONF
-+#define DDMA_CONTROL (DMA_BLOCK+0x42) /* RW*: DMA Control */
-+#define DDMA_STATUS (DMA_BLOCK+0x44) /* R : DMA Status */
-+#define DDMA_FIFO_STS (DMA_BLOCK+0x46) /* R : DMA FIFO Status */
-+#define DDMA_COUNT_LO (DMA_BLOCK+0x48) /* RW*: DMA Xfer Count, Low */
-+#define DDMA_COUNT_HI (DMA_BLOCK+0x4A) /* RW*: DMA Xfer Count, High */
-+#define DDMA_ADDR0 (DMA_BLOCK+0x4C) /* RW*: DMA Address, Word 0 */
-+#define DDMA_ADDR1 (DMA_BLOCK+0x4E) /* RW*: DMA Address, Word 1 */
-+/* these are for the 1040A cards */
-+#define DDMA_ADDR2 (DMA_BLOCK+0x50) /* RW*: DMA Address, Word 2 */
-+#define DDMA_ADDR3 (DMA_BLOCK+0x52) /* RW*: DMA Address, Word 3 */
-+
-+
-+/*
-+ * Bus Interface Block Register Definitions
-+ */
-+/* BUS CONFIGURATION REGISTER #0 */
-+#define BIU_CONF0_HW_MASK 0x000F /* Hardware revision mask */
-+/* BUS CONFIGURATION REGISTER #1 */
-+
-+#define BIU_SBUS_CONF1_PARITY 0x0100 /* Enable parity checking */
-+#define BIU_SBUS_CONF1_FCODE_MASK 0x00F0 /* Fcode cycle mask */
-+
-+#define BIU_PCI_CONF1_FIFO_128 0x0040 /* 128 bytes FIFO threshold */
-+#define BIU_PCI_CONF1_FIFO_64 0x0030 /* 64 bytes FIFO threshold */
-+#define BIU_PCI_CONF1_FIFO_32 0x0020 /* 32 bytes FIFO threshold */
-+#define BIU_PCI_CONF1_FIFO_16 0x0010 /* 16 bytes FIFO threshold */
-+#define BIU_BURST_ENABLE 0x0004 /* Global enable Bus bursts */
-+#define BIU_SBUS_CONF1_FIFO_64 0x0003 /* 64 bytes FIFO threshold */
-+#define BIU_SBUS_CONF1_FIFO_32 0x0002 /* 32 bytes FIFO threshold */
-+#define BIU_SBUS_CONF1_FIFO_16 0x0001 /* 16 bytes FIFO threshold */
-+#define BIU_SBUS_CONF1_FIFO_8 0x0000 /* 8 bytes FIFO threshold */
-+#define BIU_SBUS_CONF1_BURST8 0x0008 /* Enable 8-byte bursts */
-+#define BIU_PCI_CONF1_SXP 0x0008 /* SXP register select */
-+
-+#define BIU_PCI1080_CONF1_SXP0 0x0100 /* SXP bank #1 select */
-+#define BIU_PCI1080_CONF1_SXP1 0x0200 /* SXP bank #2 select */
-+#define BIU_PCI1080_CONF1_DMA 0x0300 /* DMA bank select */
-+
-+/* ISP2100 Bus Control/Status Register */
-+
-+#define BIU2100_ICSR_REGBSEL 0x30 /* RW: register bank select */
-+#define BIU2100_RISC_REGS (0 << 4) /* RISC Regs */
-+#define BIU2100_FB_REGS (1 << 4) /* FrameBuffer Regs */
-+#define BIU2100_FPM0_REGS (2 << 4) /* FPM 0 Regs */
-+#define BIU2100_FPM1_REGS (3 << 4) /* FPM 1 Regs */
-+#define BIU2100_PCI64 0x04 /* R: 64 Bit PCI slot */
-+#define BIU2100_FLASH_ENABLE 0x02 /* RW: Enable Flash RAM */
-+#define BIU2100_SOFT_RESET 0x01
-+/* SOFT RESET FOR ISP2100 is same bit, but in this register, not ICR */
-+
-+
-+/* BUS CONTROL REGISTER */
-+#define BIU_ICR_ENABLE_DMA_INT 0x0020 /* Enable DMA interrupts */
-+#define BIU_ICR_ENABLE_CDMA_INT 0x0010 /* Enable CDMA interrupts */
-+#define BIU_ICR_ENABLE_SXP_INT 0x0008 /* Enable SXP interrupts */
-+#define BIU_ICR_ENABLE_RISC_INT 0x0004 /* Enable Risc interrupts */
-+#define BIU_ICR_ENABLE_ALL_INTS 0x0002 /* Global enable all inter */
-+#define BIU_ICR_SOFT_RESET 0x0001 /* Soft Reset of ISP */
-+
-+#define BIU2100_ICR_ENABLE_ALL_INTS 0x8000
-+#define BIU2100_ICR_ENA_FPM_INT 0x0020
-+#define BIU2100_ICR_ENA_FB_INT 0x0010
-+#define BIU2100_ICR_ENA_RISC_INT 0x0008
-+#define BIU2100_ICR_ENA_CDMA_INT 0x0004
-+#define BIU2100_ICR_ENABLE_RXDMA_INT 0x0002
-+#define BIU2100_ICR_ENABLE_TXDMA_INT 0x0001
-+#define BIU2100_ICR_DISABLE_ALL_INTS 0x0000
-+
-+#define ENABLE_INTS(isp) (IS_SCSI(isp))? \
-+ ISP_WRITE(isp, BIU_ICR, BIU_ICR_ENABLE_RISC_INT | BIU_ICR_ENABLE_ALL_INTS) : \
-+ ISP_WRITE(isp, BIU_ICR, BIU2100_ICR_ENA_RISC_INT | BIU2100_ICR_ENABLE_ALL_INTS)
-+
-+#define INTS_ENABLED(isp) ((IS_SCSI(isp))? \
-+ (ISP_READ(isp, BIU_ICR) & (BIU_ICR_ENABLE_RISC_INT|BIU_ICR_ENABLE_ALL_INTS)) :\
-+ (ISP_READ(isp, BIU_ICR) & \
-+ (BIU2100_ICR_ENA_RISC_INT|BIU2100_ICR_ENABLE_ALL_INTS)))
-+
-+#define DISABLE_INTS(isp) ISP_WRITE(isp, BIU_ICR, 0)
-+
-+/* BUS STATUS REGISTER */
-+#define BIU_ISR_DMA_INT 0x0020 /* DMA interrupt pending */
-+#define BIU_ISR_CDMA_INT 0x0010 /* CDMA interrupt pending */
-+#define BIU_ISR_SXP_INT 0x0008 /* SXP interrupt pending */
-+#define BIU_ISR_RISC_INT 0x0004 /* Risc interrupt pending */
-+#define BIU_ISR_IPEND 0x0002 /* Global interrupt pending */
-+
-+#define BIU2100_ISR_INT_PENDING 0x8000 /* Global interrupt pending */
-+#define BIU2100_ISR_FPM_INT 0x0020 /* FPM interrupt pending */
-+#define BIU2100_ISR_FB_INT 0x0010 /* FB interrupt pending */
-+#define BIU2100_ISR_RISC_INT 0x0008 /* Risc interrupt pending */
-+#define BIU2100_ISR_CDMA_INT 0x0004 /* CDMA interrupt pending */
-+#define BIU2100_ISR_RXDMA_INT_PENDING 0x0002 /* Global interrupt pending */
-+#define BIU2100_ISR_TXDMA_INT_PENDING 0x0001 /* Global interrupt pending */
-+
-+#define INT_PENDING(isp, isr) (IS_FC(isp)? \
-+ ((isr & BIU2100_ISR_RISC_INT) != 0) : ((isr & BIU_ISR_RISC_INT) != 0))
-+
-+#define INT_PENDING_MASK(isp) \
-+ (IS_FC(isp)? BIU2100_ISR_RISC_INT: BIU_ISR_RISC_INT)
-+
-+/* BUS SEMAPHORE REGISTER */
-+#define BIU_SEMA_STATUS 0x0002 /* Semaphore Status Bit */
-+#define BIU_SEMA_LOCK 0x0001 /* Semaphore Lock Bit */
-+
-+/* NVRAM SEMAPHORE REGISTER */
-+#define BIU_NVRAM_CLOCK 0x0001
-+#define BIU_NVRAM_SELECT 0x0002
-+#define BIU_NVRAM_DATAOUT 0x0004
-+#define BIU_NVRAM_DATAIN 0x0008
-+#define ISP_NVRAM_READ 6
-+
-+/* COMNMAND && DATA DMA CONFIGURATION REGISTER */
-+#define DMA_ENABLE_SXP_DMA 0x0008 /* Enable SXP to DMA Data */
-+#define DMA_ENABLE_INTS 0x0004 /* Enable interrupts to RISC */
-+#define DMA_ENABLE_BURST 0x0002 /* Enable Bus burst trans */
-+#define DMA_DMA_DIRECTION 0x0001 /*
-+ * Set DMA direction:
-+ * 0 - DMA FIFO to host
-+ * 1 - Host to DMA FIFO
-+ */
-+
-+/* COMMAND && DATA DMA CONTROL REGISTER */
-+#define DMA_CNTRL_SUSPEND_CHAN 0x0010 /* Suspend DMA transfer */
-+#define DMA_CNTRL_CLEAR_CHAN 0x0008 /*
-+ * Clear FIFO and DMA Channel,
-+ * reset DMA registers
-+ */
-+#define DMA_CNTRL_CLEAR_FIFO 0x0004 /* Clear DMA FIFO */
-+#define DMA_CNTRL_RESET_INT 0x0002 /* Clear DMA interrupt */
-+#define DMA_CNTRL_STROBE 0x0001 /* Start DMA transfer */
-+
-+/*
-+ * Variants of same for 2100
-+ */
-+#define DMA_CNTRL2100_CLEAR_CHAN 0x0004
-+#define DMA_CNTRL2100_RESET_INT 0x0002
-+
-+
-+
-+/* DMA STATUS REGISTER */
-+#define DMA_SBUS_STATUS_PIPE_MASK 0x00C0 /* DMA Pipeline status mask */
-+#define DMA_SBUS_STATUS_CHAN_MASK 0x0030 /* Channel status mask */
-+#define DMA_SBUS_STATUS_BUS_PARITY 0x0008 /* Parity Error on bus */
-+#define DMA_SBUS_STATUS_BUS_ERR 0x0004 /* Error Detected on bus */
-+#define DMA_SBUS_STATUS_TERM_COUNT 0x0002 /* DMA Transfer Completed */
-+#define DMA_SBUS_STATUS_INTERRUPT 0x0001 /* Enable DMA channel inter */
-+
-+#define DMA_PCI_STATUS_INTERRUPT 0x8000 /* Enable DMA channel inter */
-+#define DMA_PCI_STATUS_RETRY_STAT 0x4000 /* Retry status */
-+#define DMA_PCI_STATUS_CHAN_MASK 0x3000 /* Channel status mask */
-+#define DMA_PCI_STATUS_FIFO_OVR 0x0100 /* DMA FIFO overrun cond */
-+#define DMA_PCI_STATUS_FIFO_UDR 0x0080 /* DMA FIFO underrun cond */
-+#define DMA_PCI_STATUS_BUS_ERR 0x0040 /* Error Detected on bus */
-+#define DMA_PCI_STATUS_BUS_PARITY 0x0020 /* Parity Error on bus */
-+#define DMA_PCI_STATUS_CLR_PEND 0x0010 /* DMA clear pending */
-+#define DMA_PCI_STATUS_TERM_COUNT 0x0008 /* DMA Transfer Completed */
-+#define DMA_PCI_STATUS_DMA_SUSP 0x0004 /* DMA suspended */
-+#define DMA_PCI_STATUS_PIPE_MASK 0x0003 /* DMA Pipeline status mask */
-+
-+/* DMA Status Register, pipeline status bits */
-+#define DMA_SBUS_PIPE_FULL 0x00C0 /* Both pipeline stages full */
-+#define DMA_SBUS_PIPE_OVERRUN 0x0080 /* Pipeline overrun */
-+#define DMA_SBUS_PIPE_STAGE1 0x0040 /*
-+ * Pipeline stage 1 Loaded,
-+ * stage 2 empty
-+ */
-+#define DMA_PCI_PIPE_FULL 0x0003 /* Both pipeline stages full */
-+#define DMA_PCI_PIPE_OVERRUN 0x0002 /* Pipeline overrun */
-+#define DMA_PCI_PIPE_STAGE1 0x0001 /*
-+ * Pipeline stage 1 Loaded,
-+ * stage 2 empty
-+ */
-+#define DMA_PIPE_EMPTY 0x0000 /* All pipeline stages empty */
-+
-+/* DMA Status Register, channel status bits */
-+#define DMA_SBUS_CHAN_SUSPEND 0x0030 /* Channel error or suspended */
-+#define DMA_SBUS_CHAN_TRANSFER 0x0020 /* Chan transfer in progress */
-+#define DMA_SBUS_CHAN_ACTIVE 0x0010 /* Chan trans to host active */
-+#define DMA_PCI_CHAN_TRANSFER 0x3000 /* Chan transfer in progress */
-+#define DMA_PCI_CHAN_SUSPEND 0x2000 /* Channel error or suspended */
-+#define DMA_PCI_CHAN_ACTIVE 0x1000 /* Chan trans to host active */
-+#define ISP_DMA_CHAN_IDLE 0x0000 /* Chan idle (normal comp) */
-+
-+
-+/* DMA FIFO STATUS REGISTER */
-+#define DMA_FIFO_STATUS_OVERRUN 0x0200 /* FIFO Overrun Condition */
-+#define DMA_FIFO_STATUS_UNDERRUN 0x0100 /* FIFO Underrun Condition */
-+#define DMA_FIFO_SBUS_COUNT_MASK 0x007F /* FIFO Byte count mask */
-+#define DMA_FIFO_PCI_COUNT_MASK 0x00FF /* FIFO Byte count mask */
-+
-+/*
-+ * Mailbox Block Register Offsets
-+ */
-+
-+#define INMAILBOX0 (MBOX_BLOCK+0x0)
-+#define INMAILBOX1 (MBOX_BLOCK+0x2)
-+#define INMAILBOX2 (MBOX_BLOCK+0x4)
-+#define INMAILBOX3 (MBOX_BLOCK+0x6)
-+#define INMAILBOX4 (MBOX_BLOCK+0x8)
-+#define INMAILBOX5 (MBOX_BLOCK+0xA)
-+#define INMAILBOX6 (MBOX_BLOCK+0xC)
-+#define INMAILBOX7 (MBOX_BLOCK+0xE)
-+
-+#define OUTMAILBOX0 (MBOX_BLOCK+0x0)
-+#define OUTMAILBOX1 (MBOX_BLOCK+0x2)
-+#define OUTMAILBOX2 (MBOX_BLOCK+0x4)
-+#define OUTMAILBOX3 (MBOX_BLOCK+0x6)
-+#define OUTMAILBOX4 (MBOX_BLOCK+0x8)
-+#define OUTMAILBOX5 (MBOX_BLOCK+0xA)
-+#define OUTMAILBOX6 (MBOX_BLOCK+0xC)
-+#define OUTMAILBOX7 (MBOX_BLOCK+0xE)
-+
-+#define MBOX_OFF(n) (MBOX_BLOCK + ((n) << 1))
-+#define NMBOX(isp) \
-+ (((((isp)->isp_type & ISP_HA_SCSI) >= ISP_HA_SCSI_1040A) || \
-+ ((isp)->isp_type & ISP_HA_FC))? 8 : 6)
-+#define NMBOX_BMASK(isp) \
-+ (((((isp)->isp_type & ISP_HA_SCSI) >= ISP_HA_SCSI_1040A) || \
-+ ((isp)->isp_type & ISP_HA_FC))? 0xff : 0x3f)
-+
-+#define MAX_MAILBOX 8
-+
-+/*
-+ * Fibre Protocol Module and Frame Buffer Register Offsets/Definitions (2X00).
-+ * NB: The RISC processor must be paused and the appropriate register
-+ * bank selected via BIU2100_CSR bits.
-+ */
-+
-+#define FPM_DIAG_CONFIG (BIU_BLOCK + 0x96)
-+#define FPM_SOFT_RESET 0x0100
-+
-+#define FBM_CMD (BIU_BLOCK + 0xB8)
-+#define FBMCMD_FIFO_RESET_ALL 0xA000
-+
-+
-+/*
-+ * SXP Block Register Offsets
-+ */
-+#define SXP_PART_ID (SXP_BLOCK+0x0) /* R : Part ID Code */
-+#define SXP_CONFIG1 (SXP_BLOCK+0x2) /* RW*: Configuration Reg #1 */
-+#define SXP_CONFIG2 (SXP_BLOCK+0x4) /* RW*: Configuration Reg #2 */
-+#define SXP_CONFIG3 (SXP_BLOCK+0x6) /* RW*: Configuration Reg #2 */
-+#define SXP_INSTRUCTION (SXP_BLOCK+0xC) /* RW*: Instruction Pointer */
-+#define SXP_RETURN_ADDR (SXP_BLOCK+0x10) /* RW*: Return Address */
-+#define SXP_COMMAND (SXP_BLOCK+0x14) /* RW*: Command */
-+#define SXP_INTERRUPT (SXP_BLOCK+0x18) /* R : Interrupt */
-+#define SXP_SEQUENCE (SXP_BLOCK+0x1C) /* RW*: Sequence */
-+#define SXP_GROSS_ERR (SXP_BLOCK+0x1E) /* R : Gross Error */
-+#define SXP_EXCEPTION (SXP_BLOCK+0x20) /* RW*: Exception Enable */
-+#define SXP_OVERRIDE (SXP_BLOCK+0x24) /* RW*: Override */
-+#define SXP_LIT_BASE (SXP_BLOCK+0x28) /* RW*: Literal Base */
-+#define SXP_USER_FLAGS (SXP_BLOCK+0x2C) /* RW*: User Flags */
-+#define SXP_USER_EXCEPT (SXP_BLOCK+0x30) /* RW*: User Exception */
-+#define SXP_BREAKPOINT (SXP_BLOCK+0x34) /* RW*: Breakpoint */
-+#define SXP_SCSI_ID (SXP_BLOCK+0x40) /* RW*: SCSI ID */
-+#define SXP_DEV_CONFIG1 (SXP_BLOCK+0x42) /* RW*: Device Config Reg #1 */
-+#define SXP_DEV_CONFIG2 (SXP_BLOCK+0x44) /* RW*: Device Config Reg #2 */
-+#define SXP_PHASE_PTR (SXP_BLOCK+0x48) /* RW*: SCSI Phase Pointer */
-+#define SXP_BUF_PTR (SXP_BLOCK+0x4C) /* RW*: SCSI Buffer Pointer */
-+#define SXP_BUF_CTR (SXP_BLOCK+0x50) /* RW*: SCSI Buffer Counter */
-+#define SXP_BUFFER (SXP_BLOCK+0x52) /* RW*: SCSI Buffer */
-+#define SXP_BUF_BYTE (SXP_BLOCK+0x54) /* RW*: SCSI Buffer Byte */
-+#define SXP_BUF_WD (SXP_BLOCK+0x56) /* RW*: SCSI Buffer Word */
-+#define SXP_BUF_WD_TRAN (SXP_BLOCK+0x58) /* RW*: SCSI Buffer Wd xlate */
-+#define SXP_FIFO (SXP_BLOCK+0x5A) /* RW*: SCSI FIFO */
-+#define SXP_FIFO_STATUS (SXP_BLOCK+0x5C) /* RW*: SCSI FIFO Status */
-+#define SXP_FIFO_TOP (SXP_BLOCK+0x5E) /* RW*: SCSI FIFO Top Resid */
-+#define SXP_FIFO_BOTTOM (SXP_BLOCK+0x60) /* RW*: SCSI FIFO Bot Resid */
-+#define SXP_TRAN_REG (SXP_BLOCK+0x64) /* RW*: SCSI Transferr Reg */
-+#define SXP_TRAN_CNT_LO (SXP_BLOCK+0x68) /* RW*: SCSI Trans Count */
-+#define SXP_TRAN_CNT_HI (SXP_BLOCK+0x6A) /* RW*: SCSI Trans Count */
-+#define SXP_TRAN_CTR_LO (SXP_BLOCK+0x6C) /* RW*: SCSI Trans Counter */
-+#define SXP_TRAN_CTR_HI (SXP_BLOCK+0x6E) /* RW*: SCSI Trans Counter */
-+#define SXP_ARB_DATA (SXP_BLOCK+0x70) /* R : SCSI Arb Data */
-+#define SXP_PINS_CTRL (SXP_BLOCK+0x72) /* RW*: SCSI Control Pins */
-+#define SXP_PINS_DATA (SXP_BLOCK+0x74) /* RW*: SCSI Data Pins */
-+#define SXP_PINS_DIFF (SXP_BLOCK+0x76) /* RW*: SCSI Diff Pins */
-+
-+/* for 1080/1280/1240 only */
-+#define SXP_BANK1_SELECT 0x100
-+
-+
-+/* SXP CONF1 REGISTER */
-+#define SXP_CONF1_ASYNCH_SETUP 0xF000 /* Asynchronous setup time */
-+#define SXP_CONF1_SELECTION_UNIT 0x0000 /* Selection time unit */
-+#define SXP_CONF1_SELECTION_TIMEOUT 0x0600 /* Selection timeout */
-+#define SXP_CONF1_CLOCK_FACTOR 0x00E0 /* Clock factor */
-+#define SXP_CONF1_SCSI_ID 0x000F /* SCSI id */
-+
-+/* SXP CONF2 REGISTER */
-+#define SXP_CONF2_DISABLE_FILTER 0x0040 /* Disable SCSI rec filters */
-+#define SXP_CONF2_REQ_ACK_PULLUPS 0x0020 /* Enable req/ack pullups */
-+#define SXP_CONF2_DATA_PULLUPS 0x0010 /* Enable data pullups */
-+#define SXP_CONF2_CONFIG_AUTOLOAD 0x0008 /* Enable dev conf auto-load */
-+#define SXP_CONF2_RESELECT 0x0002 /* Enable reselection */
-+#define SXP_CONF2_SELECT 0x0001 /* Enable selection */
-+
-+/* SXP INTERRUPT REGISTER */
-+#define SXP_INT_PARITY_ERR 0x8000 /* Parity error detected */
-+#define SXP_INT_GROSS_ERR 0x4000 /* Gross error detected */
-+#define SXP_INT_FUNCTION_ABORT 0x2000 /* Last cmd aborted */
-+#define SXP_INT_CONDITION_FAILED 0x1000 /* Last cond failed test */
-+#define SXP_INT_FIFO_EMPTY 0x0800 /* SCSI FIFO is empty */
-+#define SXP_INT_BUF_COUNTER_ZERO 0x0400 /* SCSI buf count == zero */
-+#define SXP_INT_XFER_ZERO 0x0200 /* SCSI trans count == zero */
-+#define SXP_INT_INT_PENDING 0x0080 /* SXP interrupt pending */
-+#define SXP_INT_CMD_RUNNING 0x0040 /* SXP is running a command */
-+#define SXP_INT_INT_RETURN_CODE 0x000F /* Interrupt return code */
-+
-+
-+/* SXP GROSS ERROR REGISTER */
-+#define SXP_GROSS_OFFSET_RESID 0x0040 /* Req/Ack offset not zero */
-+#define SXP_GROSS_OFFSET_UNDERFLOW 0x0020 /* Req/Ack offset underflow */
-+#define SXP_GROSS_OFFSET_OVERFLOW 0x0010 /* Req/Ack offset overflow */
-+#define SXP_GROSS_FIFO_UNDERFLOW 0x0008 /* SCSI FIFO underflow */
-+#define SXP_GROSS_FIFO_OVERFLOW 0x0004 /* SCSI FIFO overflow */
-+#define SXP_GROSS_WRITE_ERR 0x0002 /* SXP and RISC wrote to reg */
-+#define SXP_GROSS_ILLEGAL_INST 0x0001 /* Bad inst loaded into SXP */
-+
-+/* SXP EXCEPTION REGISTER */
-+#define SXP_EXCEPT_USER_0 0x8000 /* Enable user exception #0 */
-+#define SXP_EXCEPT_USER_1 0x4000 /* Enable user exception #1 */
-+#define PCI_SXP_EXCEPT_SCAM 0x0400 /* SCAM Selection enable */
-+#define SXP_EXCEPT_BUS_FREE 0x0200 /* Enable Bus Free det */
-+#define SXP_EXCEPT_TARGET_ATN 0x0100 /* Enable TGT mode atten det */
-+#define SXP_EXCEPT_RESELECTED 0x0080 /* Enable ReSEL exc handling */
-+#define SXP_EXCEPT_SELECTED 0x0040 /* Enable SEL exc handling */
-+#define SXP_EXCEPT_ARBITRATION 0x0020 /* Enable ARB exc handling */
-+#define SXP_EXCEPT_GROSS_ERR 0x0010 /* Enable gross error except */
-+#define SXP_EXCEPT_BUS_RESET 0x0008 /* Enable Bus Reset except */
-+
-+ /* SXP OVERRIDE REGISTER */
-+#define SXP_ORIDE_EXT_TRIGGER 0x8000 /* Enable external trigger */
-+#define SXP_ORIDE_STEP 0x4000 /* Enable single step mode */
-+#define SXP_ORIDE_BREAKPOINT 0x2000 /* Enable breakpoint reg */
-+#define SXP_ORIDE_PIN_WRITE 0x1000 /* Enable write to SCSI pins */
-+#define SXP_ORIDE_FORCE_OUTPUTS 0x0800 /* Force SCSI outputs on */
-+#define SXP_ORIDE_LOOPBACK 0x0400 /* Enable SCSI loopback mode */
-+#define SXP_ORIDE_PARITY_TEST 0x0200 /* Enable parity test mode */
-+#define SXP_ORIDE_TRISTATE_ENA_PINS 0x0100 /* Tristate SCSI enable pins */
-+#define SXP_ORIDE_TRISTATE_PINS 0x0080 /* Tristate SCSI pins */
-+#define SXP_ORIDE_FIFO_RESET 0x0008 /* Reset SCSI FIFO */
-+#define SXP_ORIDE_CMD_TERMINATE 0x0004 /* Terminate cur SXP com */
-+#define SXP_ORIDE_RESET_REG 0x0002 /* Reset SXP registers */
-+#define SXP_ORIDE_RESET_MODULE 0x0001 /* Reset SXP module */
-+
-+/* SXP COMMANDS */
-+#define SXP_RESET_BUS_CMD 0x300b
-+
-+/* SXP SCSI ID REGISTER */
-+#define SXP_SELECTING_ID 0x0F00 /* (Re)Selecting id */
-+#define SXP_SELECT_ID 0x000F /* Select id */
-+
-+/* SXP DEV CONFIG1 REGISTER */
-+#define SXP_DCONF1_SYNC_HOLD 0x7000 /* Synchronous data hold */
-+#define SXP_DCONF1_SYNC_SETUP 0x0F00 /* Synchronous data setup */
-+#define SXP_DCONF1_SYNC_OFFSET 0x000F /* Synchronous data offset */
-+
-+
-+/* SXP DEV CONFIG2 REGISTER */
-+#define SXP_DCONF2_FLAGS_MASK 0xF000 /* Device flags */
-+#define SXP_DCONF2_WIDE 0x0400 /* Enable wide SCSI */
-+#define SXP_DCONF2_PARITY 0x0200 /* Enable parity checking */
-+#define SXP_DCONF2_BLOCK_MODE 0x0100 /* Enable blk mode xfr count */
-+#define SXP_DCONF2_ASSERTION_MASK 0x0007 /* Assersion period mask */
-+
-+
-+/* SXP PHASE POINTER REGISTER */
-+#define SXP_PHASE_STATUS_PTR 0x1000 /* Status buffer offset */
-+#define SXP_PHASE_MSG_IN_PTR 0x0700 /* Msg in buffer offset */
-+#define SXP_PHASE_COM_PTR 0x00F0 /* Command buffer offset */
-+#define SXP_PHASE_MSG_OUT_PTR 0x0007 /* Msg out buffer offset */
-+
-+
-+/* SXP FIFO STATUS REGISTER */
-+#define SXP_FIFO_TOP_RESID 0x8000 /* Top residue reg full */
-+#define SXP_FIFO_ACK_RESID 0x4000 /* Wide transfers odd resid */
-+#define SXP_FIFO_COUNT_MASK 0x001C /* Words in SXP FIFO */
-+#define SXP_FIFO_BOTTOM_RESID 0x0001 /* Bottom residue reg full */
-+
-+
-+/* SXP CONTROL PINS REGISTER */
-+#define SXP_PINS_CON_PHASE 0x8000 /* Scsi phase valid */
-+#define SXP_PINS_CON_PARITY_HI 0x0400 /* Parity pin */
-+#define SXP_PINS_CON_PARITY_LO 0x0200 /* Parity pin */
-+#define SXP_PINS_CON_REQ 0x0100 /* SCSI bus REQUEST */
-+#define SXP_PINS_CON_ACK 0x0080 /* SCSI bus ACKNOWLEDGE */
-+#define SXP_PINS_CON_RST 0x0040 /* SCSI bus RESET */
-+#define SXP_PINS_CON_BSY 0x0020 /* SCSI bus BUSY */
-+#define SXP_PINS_CON_SEL 0x0010 /* SCSI bus SELECT */
-+#define SXP_PINS_CON_ATN 0x0008 /* SCSI bus ATTENTION */
-+#define SXP_PINS_CON_MSG 0x0004 /* SCSI bus MESSAGE */
-+#define SXP_PINS_CON_CD 0x0002 /* SCSI bus COMMAND */
-+#define SXP_PINS_CON_IO 0x0001 /* SCSI bus INPUT */
-+
-+/*
-+ * Set the hold time for the SCSI Bus Reset to be 250 ms
-+ */
-+#define SXP_SCSI_BUS_RESET_HOLD_TIME 250
-+
-+/* SXP DIFF PINS REGISTER */
-+#define SXP_PINS_DIFF_SENSE 0x0200 /* DIFFSENS sig on SCSI bus */
-+#define SXP_PINS_DIFF_MODE 0x0100 /* DIFFM signal */
-+#define SXP_PINS_DIFF_ENABLE_OUTPUT 0x0080 /* Enable SXP SCSI data drv */
-+#define SXP_PINS_DIFF_PINS_MASK 0x007C /* Differential control pins */
-+#define SXP_PINS_DIFF_TARGET 0x0002 /* Enable SXP target mode */
-+#define SXP_PINS_DIFF_INITIATOR 0x0001 /* Enable SXP initiator mode */
-+
-+/* Ultra2 only */
-+#define SXP_PINS_LVD_MODE 0x1000
-+#define SXP_PINS_HVD_MODE 0x0800
-+#define SXP_PINS_SE_MODE 0x0400
-+
-+/* The above have to be put together with the DIFFM pin to make sense */
-+#define ISP1080_LVD_MODE (SXP_PINS_LVD_MODE)
-+#define ISP1080_HVD_MODE (SXP_PINS_HVD_MODE|SXP_PINS_DIFF_MODE)
-+#define ISP1080_SE_MODE (SXP_PINS_SE_MODE)
-+#define ISP1080_MODE_MASK \
-+ (SXP_PINS_LVD_MODE|SXP_PINS_HVD_MODE|SXP_PINS_SE_MODE|SXP_PINS_DIFF_MODE)
-+
-+/*
-+ * RISC and Host Command and Control Block Register Offsets
-+ */
-+
-+#define RISC_ACC RISC_BLOCK+0x0 /* RW*: Accumulator */
-+#define RISC_R1 RISC_BLOCK+0x2 /* RW*: GP Reg R1 */
-+#define RISC_R2 RISC_BLOCK+0x4 /* RW*: GP Reg R2 */
-+#define RISC_R3 RISC_BLOCK+0x6 /* RW*: GP Reg R3 */
-+#define RISC_R4 RISC_BLOCK+0x8 /* RW*: GP Reg R4 */
-+#define RISC_R5 RISC_BLOCK+0xA /* RW*: GP Reg R5 */
-+#define RISC_R6 RISC_BLOCK+0xC /* RW*: GP Reg R6 */
-+#define RISC_R7 RISC_BLOCK+0xE /* RW*: GP Reg R7 */
-+#define RISC_R8 RISC_BLOCK+0x10 /* RW*: GP Reg R8 */
-+#define RISC_R9 RISC_BLOCK+0x12 /* RW*: GP Reg R9 */
-+#define RISC_R10 RISC_BLOCK+0x14 /* RW*: GP Reg R10 */
-+#define RISC_R11 RISC_BLOCK+0x16 /* RW*: GP Reg R11 */
-+#define RISC_R12 RISC_BLOCK+0x18 /* RW*: GP Reg R12 */
-+#define RISC_R13 RISC_BLOCK+0x1a /* RW*: GP Reg R13 */
-+#define RISC_R14 RISC_BLOCK+0x1c /* RW*: GP Reg R14 */
-+#define RISC_R15 RISC_BLOCK+0x1e /* RW*: GP Reg R15 */
-+#define RISC_PSR RISC_BLOCK+0x20 /* RW*: Processor Status */
-+#define RISC_IVR RISC_BLOCK+0x22 /* RW*: Interrupt Vector */
-+#define RISC_PCR RISC_BLOCK+0x24 /* RW*: Processor Ctrl */
-+#define RISC_RAR0 RISC_BLOCK+0x26 /* RW*: Ram Address #0 */
-+#define RISC_RAR1 RISC_BLOCK+0x28 /* RW*: Ram Address #1 */
-+#define RISC_LCR RISC_BLOCK+0x2a /* RW*: Loop Counter */
-+#define RISC_PC RISC_BLOCK+0x2c /* R : Program Counter */
-+#define RISC_MTR RISC_BLOCK+0x2e /* RW*: Memory Timing */
-+#define RISC_MTR2100 RISC_BLOCK+0x30
-+
-+#define RISC_EMB RISC_BLOCK+0x30 /* RW*: Ext Mem Boundary */
-+#define DUAL_BANK 8
-+#define RISC_SP RISC_BLOCK+0x32 /* RW*: Stack Pointer */
-+#define RISC_HRL RISC_BLOCK+0x3e /* R *: Hardware Rev Level */
-+#define HCCR RISC_BLOCK+0x40 /* RW : Host Command & Ctrl */
-+#define BP0 RISC_BLOCK+0x42 /* RW : Processor Brkpt #0 */
-+#define BP1 RISC_BLOCK+0x44 /* RW : Processor Brkpt #1 */
-+#define TCR RISC_BLOCK+0x46 /* W : Test Control */
-+#define TMR RISC_BLOCK+0x48 /* W : Test Mode */
-+
-+
-+/* PROCESSOR STATUS REGISTER */
-+#define RISC_PSR_FORCE_TRUE 0x8000
-+#define RISC_PSR_LOOP_COUNT_DONE 0x4000
-+#define RISC_PSR_RISC_INT 0x2000
-+#define RISC_PSR_TIMER_ROLLOVER 0x1000
-+#define RISC_PSR_ALU_OVERFLOW 0x0800
-+#define RISC_PSR_ALU_MSB 0x0400
-+#define RISC_PSR_ALU_CARRY 0x0200
-+#define RISC_PSR_ALU_ZERO 0x0100
-+
-+#define RISC_PSR_PCI_ULTRA 0x0080
-+#define RISC_PSR_SBUS_ULTRA 0x0020
-+
-+#define RISC_PSR_DMA_INT 0x0010
-+#define RISC_PSR_SXP_INT 0x0008
-+#define RISC_PSR_HOST_INT 0x0004
-+#define RISC_PSR_INT_PENDING 0x0002
-+#define RISC_PSR_FORCE_FALSE 0x0001
-+
-+
-+/* Host Command and Control */
-+#define HCCR_CMD_NOP 0x0000 /* NOP */
-+#define HCCR_CMD_RESET 0x1000 /* Reset RISC */
-+#define HCCR_CMD_PAUSE 0x2000 /* Pause RISC */
-+#define HCCR_CMD_RELEASE 0x3000 /* Release Paused RISC */
-+#define HCCR_CMD_STEP 0x4000 /* Single Step RISC */
-+#define HCCR_2X00_DISABLE_PARITY_PAUSE 0x4001 /*
-+ * Disable RISC pause on FPM
-+ * parity error.
-+ */
-+#define HCCR_CMD_SET_HOST_INT 0x5000 /* Set Host Interrupt */
-+#define HCCR_CMD_CLEAR_HOST_INT 0x6000 /* Clear Host Interrupt */
-+#define HCCR_CMD_CLEAR_RISC_INT 0x7000 /* Clear RISC interrupt */
-+#define HCCR_CMD_BREAKPOINT 0x8000 /* Change breakpoint enables */
-+#define PCI_HCCR_CMD_BIOS 0x9000 /* Write BIOS (disable) */
-+#define PCI_HCCR_CMD_PARITY 0xA000 /* Write parity enable */
-+#define PCI_HCCR_CMD_PARITY_ERR 0xE000 /* Generate parity error */
-+#define HCCR_CMD_TEST_MODE 0xF000 /* Set Test Mode */
-+
-+#define ISP2100_HCCR_PARITY_ENABLE_2 0x0400
-+#define ISP2100_HCCR_PARITY_ENABLE_1 0x0200
-+#define ISP2100_HCCR_PARITY_ENABLE_0 0x0100
-+#define ISP2100_HCCR_PARITY 0x0001
-+
-+#define PCI_HCCR_PARITY 0x0400 /* Parity error flag */
-+#define PCI_HCCR_PARITY_ENABLE_1 0x0200 /* Parity enable bank 1 */
-+#define PCI_HCCR_PARITY_ENABLE_0 0x0100 /* Parity enable bank 0 */
-+
-+#define HCCR_HOST_INT 0x0080 /* R : Host interrupt set */
-+#define HCCR_RESET 0x0040 /* R : reset in progress */
-+#define HCCR_PAUSE 0x0020 /* R : RISC paused */
-+
-+#define PCI_HCCR_BIOS 0x0001 /* W : BIOS enable */
-+
-+/*
-+ * NVRAM Definitions (PCI cards only)
-+ */
-+
-+#define ISPBSMX(c, byte, shift, mask) \
-+ (((c)[(byte)] >> (shift)) & (mask))
-+/*
-+ * Qlogic 1020/1040 NVRAM is an array of 128 bytes.
-+ *
-+ * Some portion of the front of this is for general host adapter properties
-+ * This is followed by an array of per-target parameters, and is tailed off
-+ * with a checksum xor byte at offset 127. For non-byte entities data is
-+ * stored in Little Endian order.
-+ */
-+
-+#define ISP_NVRAM_SIZE 128
-+
-+#define ISP_NVRAM_VERSION(c) (c)[4]
-+#define ISP_NVRAM_FIFO_THRESHOLD(c) ISPBSMX(c, 5, 0, 0x03)
-+#define ISP_NVRAM_BIOS_DISABLE(c) ISPBSMX(c, 5, 2, 0x01)
-+#define ISP_NVRAM_HBA_ENABLE(c) ISPBSMX(c, 5, 3, 0x01)
-+#define ISP_NVRAM_INITIATOR_ID(c) ISPBSMX(c, 5, 4, 0x0f)
-+#define ISP_NVRAM_BUS_RESET_DELAY(c) (c)[6]
-+#define ISP_NVRAM_BUS_RETRY_COUNT(c) (c)[7]
-+#define ISP_NVRAM_BUS_RETRY_DELAY(c) (c)[8]
-+#define ISP_NVRAM_ASYNC_DATA_SETUP_TIME(c) ISPBSMX(c, 9, 0, 0x0f)
-+#define ISP_NVRAM_REQ_ACK_ACTIVE_NEGATION(c) ISPBSMX(c, 9, 4, 0x01)
-+#define ISP_NVRAM_DATA_LINE_ACTIVE_NEGATION(c) ISPBSMX(c, 9, 5, 0x01)
-+#define ISP_NVRAM_DATA_DMA_BURST_ENABLE(c) ISPBSMX(c, 9, 6, 0x01)
-+#define ISP_NVRAM_CMD_DMA_BURST_ENABLE(c) ISPBSMX(c, 9, 7, 0x01)
-+#define ISP_NVRAM_TAG_AGE_LIMIT(c) (c)[10]
-+#define ISP_NVRAM_LOWTRM_ENABLE(c) ISPBSMX(c, 11, 0, 0x01)
-+#define ISP_NVRAM_HITRM_ENABLE(c) ISPBSMX(c, 11, 1, 0x01)
-+#define ISP_NVRAM_PCMC_BURST_ENABLE(c) ISPBSMX(c, 11, 2, 0x01)
-+#define ISP_NVRAM_ENABLE_60_MHZ(c) ISPBSMX(c, 11, 3, 0x01)
-+#define ISP_NVRAM_SCSI_RESET_DISABLE(c) ISPBSMX(c, 11, 4, 0x01)
-+#define ISP_NVRAM_ENABLE_AUTO_TERM(c) ISPBSMX(c, 11, 5, 0x01)
-+#define ISP_NVRAM_FIFO_THRESHOLD_128(c) ISPBSMX(c, 11, 6, 0x01)
-+#define ISP_NVRAM_AUTO_TERM_SUPPORT(c) ISPBSMX(c, 11, 7, 0x01)
-+#define ISP_NVRAM_SELECTION_TIMEOUT(c) (((c)[12]) | ((c)[13] << 8))
-+#define ISP_NVRAM_MAX_QUEUE_DEPTH(c) (((c)[14]) | ((c)[15] << 8))
-+#define ISP_NVRAM_SCSI_BUS_SIZE(c) ISPBSMX(c, 16, 0, 0x01)
-+#define ISP_NVRAM_SCSI_BUS_TYPE(c) ISPBSMX(c, 16, 1, 0x01)
-+#define ISP_NVRAM_ADAPTER_CLK_SPEED(c) ISPBSMX(c, 16, 2, 0x01)
-+#define ISP_NVRAM_SOFT_TERM_SUPPORT(c) ISPBSMX(c, 16, 3, 0x01)
-+#define ISP_NVRAM_FLASH_ONBOARD(c) ISPBSMX(c, 16, 4, 0x01)
-+#define ISP_NVRAM_FAST_MTTR_ENABLE(c) ISPBSMX(c, 22, 0, 0x01)
-+
-+#define ISP_NVRAM_TARGOFF 28
-+#define ISP_NVARM_TARGSIZE 6
-+#define _IxT(tgt, tidx) \
-+ (ISP_NVRAM_TARGOFF + (ISP_NVARM_TARGSIZE * (tgt)) + (tidx))
-+#define ISP_NVRAM_TGT_RENEG(c, t) ISPBSMX(c, _IxT(t, 0), 0, 0x01)
-+#define ISP_NVRAM_TGT_QFRZ(c, t) ISPBSMX(c, _IxT(t, 0), 1, 0x01)
-+#define ISP_NVRAM_TGT_ARQ(c, t) ISPBSMX(c, _IxT(t, 0), 2, 0x01)
-+#define ISP_NVRAM_TGT_TQING(c, t) ISPBSMX(c, _IxT(t, 0), 3, 0x01)
-+#define ISP_NVRAM_TGT_SYNC(c, t) ISPBSMX(c, _IxT(t, 0), 4, 0x01)
-+#define ISP_NVRAM_TGT_WIDE(c, t) ISPBSMX(c, _IxT(t, 0), 5, 0x01)
-+#define ISP_NVRAM_TGT_PARITY(c, t) ISPBSMX(c, _IxT(t, 0), 6, 0x01)
-+#define ISP_NVRAM_TGT_DISC(c, t) ISPBSMX(c, _IxT(t, 0), 7, 0x01)
-+#define ISP_NVRAM_TGT_EXEC_THROTTLE(c, t) ISPBSMX(c, _IxT(t, 1), 0, 0xff)
-+#define ISP_NVRAM_TGT_SYNC_PERIOD(c, t) ISPBSMX(c, _IxT(t, 2), 0, 0xff)
-+#define ISP_NVRAM_TGT_SYNC_OFFSET(c, t) ISPBSMX(c, _IxT(t, 3), 0, 0x0f)
-+#define ISP_NVRAM_TGT_DEVICE_ENABLE(c, t) ISPBSMX(c, _IxT(t, 3), 4, 0x01)
-+#define ISP_NVRAM_TGT_LUN_DISABLE(c, t) ISPBSMX(c, _IxT(t, 3), 5, 0x01)
-+
-+/*
-+ * Qlogic 1080/1240 NVRAM is an array of 256 bytes.
-+ *
-+ * Some portion of the front of this is for general host adapter properties
-+ * This is followed by an array of per-target parameters, and is tailed off
-+ * with a checksum xor byte at offset 256. For non-byte entities data is
-+ * stored in Little Endian order.
-+ */
-+
-+#define ISP1080_NVRAM_SIZE 256
-+
-+#define ISP1080_NVRAM_VERSION(c) ISP_NVRAM_VERSION(c)
-+
-+/* Offset 5 */
-+/*
-+ u_int8_t bios_configuration_mode :2;
-+ u_int8_t bios_disable :1;
-+ u_int8_t selectable_scsi_boot_enable :1;
-+ u_int8_t cd_rom_boot_enable :1;
-+ u_int8_t disable_loading_risc_code :1;
-+ u_int8_t enable_64bit_addressing :1;
-+ u_int8_t unused_7 :1;
-+ */
-+
-+/* Offsets 6, 7 */
-+/*
-+ u_int8_t boot_lun_number :5;
-+ u_int8_t scsi_bus_number :1;
-+ u_int8_t unused_6 :1;
-+ u_int8_t unused_7 :1;
-+ u_int8_t boot_target_number :4;
-+ u_int8_t unused_12 :1;
-+ u_int8_t unused_13 :1;
-+ u_int8_t unused_14 :1;
-+ u_int8_t unused_15 :1;
-+ */
-+
-+#define ISP1080_NVRAM_HBA_ENABLE(c) ISPBSMX(c, 16, 3, 0x01)
-+
-+#define ISP1080_NVRAM_BURST_ENABLE(c) ISPBSMX(c, 16, 1, 0x01)
-+#define ISP1080_NVRAM_FIFO_THRESHOLD(c) ISPBSMX(c, 16, 4, 0x0f)
-+
-+#define ISP1080_NVRAM_AUTO_TERM_SUPPORT(c) ISPBSMX(c, 17, 7, 0x01)
-+#define ISP1080_NVRAM_BUS0_TERM_MODE(c) ISPBSMX(c, 17, 0, 0x03)
-+#define ISP1080_NVRAM_BUS1_TERM_MODE(c) ISPBSMX(c, 17, 2, 0x03)
-+
-+#define ISP1080_ISP_PARAMETER(c) \
-+ (((c)[18]) | ((c)[19] << 8))
-+
-+#define ISP1080_FAST_POST(c) ISPBSMX(c, 20, 0, 0x01)
-+#define ISP1080_REPORT_LVD_TRANSITION(c) ISPBSMX(c, 20, 1, 0x01)
-+
-+#define ISP1080_BUS1_OFF 112
-+
-+#define ISP1080_NVRAM_INITIATOR_ID(c, b) \
-+ ISPBSMX(c, ((b == 0)? 0 : ISP1080_BUS1_OFF) + 24, 0, 0x0f)
-+#define ISP1080_NVRAM_BUS_RESET_DELAY(c, b) \
-+ (c)[((b == 0)? 0 : ISP1080_BUS1_OFF) + 25]
-+#define ISP1080_NVRAM_BUS_RETRY_COUNT(c, b) \
-+ (c)[((b == 0)? 0 : ISP1080_BUS1_OFF) + 26]
-+#define ISP1080_NVRAM_BUS_RETRY_DELAY(c, b) \
-+ (c)[((b == 0)? 0 : ISP1080_BUS1_OFF) + 27]
-+
-+#define ISP1080_NVRAM_ASYNC_DATA_SETUP_TIME(c, b) \
-+ ISPBSMX(c, ((b == 0)? 0 : ISP1080_BUS1_OFF) + 28, 0, 0x0f)
-+#define ISP1080_NVRAM_REQ_ACK_ACTIVE_NEGATION(c, b) \
-+ ISPBSMX(c, ((b == 0)? 0 : ISP1080_BUS1_OFF) + 28, 4, 0x01)
-+#define ISP1080_NVRAM_DATA_LINE_ACTIVE_NEGATION(c, b) \
-+ ISPBSMX(c, ((b == 0)? 0 : ISP1080_BUS1_OFF) + 28, 5, 0x01)
-+#define ISP1080_NVRAM_SELECTION_TIMEOUT(c, b) \
-+ (((c)[((b == 0)? 0 : ISP1080_BUS1_OFF) + 30]) | \
-+ ((c)[((b == 0)? 0 : ISP1080_BUS1_OFF) + 31] << 8))
-+#define ISP1080_NVRAM_MAX_QUEUE_DEPTH(c, b) \
-+ (((c)[((b == 0)? 0 : ISP1080_BUS1_OFF) + 32]) | \
-+ ((c)[((b == 0)? 0 : ISP1080_BUS1_OFF) + 33] << 8))
-+
-+#define ISP1080_NVRAM_TARGOFF(b) \
-+ ((b == 0)? 40: (40 + ISP1080_BUS1_OFF))
-+#define ISP1080_NVRAM_TARGSIZE 6
-+#define _IxT8(tgt, tidx, b) \
-+ (ISP1080_NVRAM_TARGOFF((b)) + (ISP1080_NVRAM_TARGSIZE * (tgt)) + (tidx))
-+
-+#define ISP1080_NVRAM_TGT_RENEG(c, t, b) \
-+ ISPBSMX(c, _IxT8(t, 0, (b)), 0, 0x01)
-+#define ISP1080_NVRAM_TGT_QFRZ(c, t, b) \
-+ ISPBSMX(c, _IxT8(t, 0, (b)), 1, 0x01)
-+#define ISP1080_NVRAM_TGT_ARQ(c, t, b) \
-+ ISPBSMX(c, _IxT8(t, 0, (b)), 2, 0x01)
-+#define ISP1080_NVRAM_TGT_TQING(c, t, b) \
-+ ISPBSMX(c, _IxT8(t, 0, (b)), 3, 0x01)
-+#define ISP1080_NVRAM_TGT_SYNC(c, t, b) \
-+ ISPBSMX(c, _IxT8(t, 0, (b)), 4, 0x01)
-+#define ISP1080_NVRAM_TGT_WIDE(c, t, b) \
-+ ISPBSMX(c, _IxT8(t, 0, (b)), 5, 0x01)
-+#define ISP1080_NVRAM_TGT_PARITY(c, t, b) \
-+ ISPBSMX(c, _IxT8(t, 0, (b)), 6, 0x01)
-+#define ISP1080_NVRAM_TGT_DISC(c, t, b) \
-+ ISPBSMX(c, _IxT8(t, 0, (b)), 7, 0x01)
-+#define ISP1080_NVRAM_TGT_EXEC_THROTTLE(c, t, b) \
-+ ISPBSMX(c, _IxT8(t, 1, (b)), 0, 0xff)
-+#define ISP1080_NVRAM_TGT_SYNC_PERIOD(c, t, b) \
-+ ISPBSMX(c, _IxT8(t, 2, (b)), 0, 0xff)
-+#define ISP1080_NVRAM_TGT_SYNC_OFFSET(c, t, b) \
-+ ISPBSMX(c, _IxT8(t, 3, (b)), 0, 0x0f)
-+#define ISP1080_NVRAM_TGT_DEVICE_ENABLE(c, t, b) \
-+ ISPBSMX(c, _IxT8(t, 3, (b)), 4, 0x01)
-+#define ISP1080_NVRAM_TGT_LUN_DISABLE(c, t, b) \
-+ ISPBSMX(c, _IxT8(t, 3, (b)), 5, 0x01)
-+
-+#define ISP12160_NVRAM_HBA_ENABLE ISP1080_NVRAM_HBA_ENABLE
-+#define ISP12160_NVRAM_BURST_ENABLE ISP1080_NVRAM_BURST_ENABLE
-+#define ISP12160_NVRAM_FIFO_THRESHOLD ISP1080_NVRAM_FIFO_THRESHOLD
-+#define ISP12160_NVRAM_AUTO_TERM_SUPPORT ISP1080_NVRAM_AUTO_TERM_SUPPORT
-+#define ISP12160_NVRAM_BUS0_TERM_MODE ISP1080_NVRAM_BUS0_TERM_MODE
-+#define ISP12160_NVRAM_BUS1_TERM_MODE ISP1080_NVRAM_BUS1_TERM_MODE
-+#define ISP12160_ISP_PARAMETER ISP12160_ISP_PARAMETER
-+#define ISP12160_FAST_POST ISP1080_FAST_POST
-+#define ISP12160_REPORT_LVD_TRANSITION ISP1080_REPORT_LVD_TRANSTION
-+
-+#define ISP12160_NVRAM_INITIATOR_ID \
-+ ISP1080_NVRAM_INITIATOR_ID
-+#define ISP12160_NVRAM_BUS_RESET_DELAY \
-+ ISP1080_NVRAM_BUS_RESET_DELAY
-+#define ISP12160_NVRAM_BUS_RETRY_COUNT \
-+ ISP1080_NVRAM_BUS_RETRY_COUNT
-+#define ISP12160_NVRAM_BUS_RETRY_DELAY \
-+ ISP1080_NVRAM_BUS_RETRY_DELAY
-+#define ISP12160_NVRAM_ASYNC_DATA_SETUP_TIME \
-+ ISP1080_NVRAM_ASYNC_DATA_SETUP_TIME
-+#define ISP12160_NVRAM_REQ_ACK_ACTIVE_NEGATION \
-+ ISP1080_NVRAM_REQ_ACK_ACTIVE_NEGATION
-+#define ISP12160_NVRAM_DATA_LINE_ACTIVE_NEGATION \
-+ ISP1080_NVRAM_DATA_LINE_ACTIVE_NEGATION
-+#define ISP12160_NVRAM_SELECTION_TIMEOUT \
-+ ISP1080_NVRAM_SELECTION_TIMEOUT
-+#define ISP12160_NVRAM_MAX_QUEUE_DEPTH \
-+ ISP1080_NVRAM_MAX_QUEUE_DEPTH
-+
-+
-+#define ISP12160_BUS0_OFF 24
-+#define ISP12160_BUS1_OFF 136
-+
-+#define ISP12160_NVRAM_TARGOFF(b) \
-+ (((b == 0)? ISP12160_BUS0_OFF : ISP12160_BUS1_OFF) + 16)
-+
-+#define ISP12160_NVRAM_TARGSIZE 6
-+#define _IxT16(tgt, tidx, b) \
-+ (ISP12160_NVRAM_TARGOFF((b))+(ISP12160_NVRAM_TARGSIZE * (tgt))+(tidx))
-+
-+#define ISP12160_NVRAM_TGT_RENEG(c, t, b) \
-+ ISPBSMX(c, _IxT16(t, 0, (b)), 0, 0x01)
-+#define ISP12160_NVRAM_TGT_QFRZ(c, t, b) \
-+ ISPBSMX(c, _IxT16(t, 0, (b)), 1, 0x01)
-+#define ISP12160_NVRAM_TGT_ARQ(c, t, b) \
-+ ISPBSMX(c, _IxT16(t, 0, (b)), 2, 0x01)
-+#define ISP12160_NVRAM_TGT_TQING(c, t, b) \
-+ ISPBSMX(c, _IxT16(t, 0, (b)), 3, 0x01)
-+#define ISP12160_NVRAM_TGT_SYNC(c, t, b) \
-+ ISPBSMX(c, _IxT16(t, 0, (b)), 4, 0x01)
-+#define ISP12160_NVRAM_TGT_WIDE(c, t, b) \
-+ ISPBSMX(c, _IxT16(t, 0, (b)), 5, 0x01)
-+#define ISP12160_NVRAM_TGT_PARITY(c, t, b) \
-+ ISPBSMX(c, _IxT16(t, 0, (b)), 6, 0x01)
-+#define ISP12160_NVRAM_TGT_DISC(c, t, b) \
-+ ISPBSMX(c, _IxT16(t, 0, (b)), 7, 0x01)
-+
-+#define ISP12160_NVRAM_TGT_EXEC_THROTTLE(c, t, b) \
-+ ISPBSMX(c, _IxT16(t, 1, (b)), 0, 0xff)
-+#define ISP12160_NVRAM_TGT_SYNC_PERIOD(c, t, b) \
-+ ISPBSMX(c, _IxT16(t, 2, (b)), 0, 0xff)
-+
-+#define ISP12160_NVRAM_TGT_SYNC_OFFSET(c, t, b) \
-+ ISPBSMX(c, _IxT16(t, 3, (b)), 0, 0x1f)
-+#define ISP12160_NVRAM_TGT_DEVICE_ENABLE(c, t, b) \
-+ ISPBSMX(c, _IxT16(t, 3, (b)), 5, 0x01)
-+
-+#define ISP12160_NVRAM_PPR_OPTIONS(c, t, b) \
-+ ISPBSMX(c, _IxT16(t, 4, (b)), 0, 0x0f)
-+#define ISP12160_NVRAM_PPR_WIDTH(c, t, b) \
-+ ISPBSMX(c, _IxT16(t, 4, (b)), 4, 0x03)
-+#define ISP12160_NVRAM_PPR_ENABLE(c, t, b) \
-+ ISPBSMX(c, _IxT16(t, 4, (b)), 7, 0x01)
-+
-+/*
-+ * Qlogic 2XXX NVRAM is an array of 256 bytes.
-+ *
-+ * Some portion of the front of this is for general RISC engine parameters,
-+ * mostly reflecting the state of the last INITIALIZE FIRMWARE mailbox command.
-+ *
-+ * This is followed by some general host adapter parameters, and ends with
-+ * a checksum xor byte at offset 255. For non-byte entities data is stored
-+ * in Little Endian order.
-+ */
-+#define ISP2100_NVRAM_SIZE 256
-+/* ISP_NVRAM_VERSION is in same overall place */
-+#define ISP2100_NVRAM_RISCVER(c) (c)[6]
-+#define ISP2100_NVRAM_OPTIONS(c) (c)[8]
-+#define ISP2100_NVRAM_MAXFRAMELENGTH(c) (((c)[10]) | ((c)[11] << 8))
-+#define ISP2100_NVRAM_MAXIOCBALLOCATION(c) (((c)[12]) | ((c)[13] << 8))
-+#define ISP2100_NVRAM_EXECUTION_THROTTLE(c) (((c)[14]) | ((c)[15] << 8))
-+#define ISP2100_NVRAM_RETRY_COUNT(c) (c)[16]
-+#define ISP2100_NVRAM_RETRY_DELAY(c) (c)[17]
-+
-+#define ISP2100_NVRAM_PORT_NAME(c) (\
-+ (((u_int64_t)(c)[18]) << 56) | \
-+ (((u_int64_t)(c)[19]) << 48) | \
-+ (((u_int64_t)(c)[20]) << 40) | \
-+ (((u_int64_t)(c)[21]) << 32) | \
-+ (((u_int64_t)(c)[22]) << 24) | \
-+ (((u_int64_t)(c)[23]) << 16) | \
-+ (((u_int64_t)(c)[24]) << 8) | \
-+ (((u_int64_t)(c)[25]) << 0))
-+
-+#define ISP2100_NVRAM_HARDLOOPID(c) (c)[26]
-+
-+#define ISP2200_NVRAM_NODE_NAME(c) (\
-+ (((u_int64_t)(c)[30]) << 56) | \
-+ (((u_int64_t)(c)[31]) << 48) | \
-+ (((u_int64_t)(c)[32]) << 40) | \
-+ (((u_int64_t)(c)[33]) << 32) | \
-+ (((u_int64_t)(c)[34]) << 24) | \
-+ (((u_int64_t)(c)[35]) << 16) | \
-+ (((u_int64_t)(c)[36]) << 8) | \
-+ (((u_int64_t)(c)[37]) << 0))
-+
-+#define ISP2100_NVRAM_HBA_OPTIONS(c) (c)[70]
-+#define ISP2100_NVRAM_HBA_DISABLE(c) ISPBSMX(c, 70, 0, 0x01)
-+#define ISP2100_NVRAM_BIOS_DISABLE(c) ISPBSMX(c, 70, 1, 0x01)
-+#define ISP2100_NVRAM_LUN_DISABLE(c) ISPBSMX(c, 70, 2, 0x01)
-+#define ISP2100_NVRAM_ENABLE_SELECT_BOOT(c) ISPBSMX(c, 70, 3, 0x01)
-+#define ISP2100_NVRAM_DISABLE_CODELOAD(c) ISPBSMX(c, 70, 4, 0x01)
-+#define ISP2100_NVRAM_SET_CACHELINESZ(c) ISPBSMX(c, 70, 5, 0x01)
-+
-+#define ISP2100_NVRAM_BOOT_NODE_NAME(c) (\
-+ (((u_int64_t)(c)[72]) << 56) | \
-+ (((u_int64_t)(c)[73]) << 48) | \
-+ (((u_int64_t)(c)[74]) << 40) | \
-+ (((u_int64_t)(c)[75]) << 32) | \
-+ (((u_int64_t)(c)[76]) << 24) | \
-+ (((u_int64_t)(c)[77]) << 16) | \
-+ (((u_int64_t)(c)[78]) << 8) | \
-+ (((u_int64_t)(c)[79]) << 0))
-+
-+#define ISP2100_NVRAM_BOOT_LUN(c) (c)[80]
-+
-+#define ISP2200_HBA_FEATURES(c) (c)[232] | ((c)[233] << 8)
-+
-+/*
-+ * Firmware Crash Dump
-+ *
-+ * QLogic needs specific information format when they look at firmware crashes.
-+ *
-+ * This is incredibly kernel memory consumptive (to say the least), so this
-+ * code is only compiled in when needed.
-+ */
-+
-+#define QLA2200_RISC_IMAGE_DUMP_SIZE \
-+ (1 * sizeof (u_int16_t)) + /* 'used' flag (also HBA type) */ \
-+ (352 * sizeof (u_int16_t)) + /* RISC registers */ \
-+ (61440 * sizeof (u_int16_t)) /* RISC SRAM (offset 0x1000..0xffff) */
-+#define QLA2300_RISC_IMAGE_DUMP_SIZE \
-+ (1 * sizeof (u_int16_t)) + /* 'used' flag (also HBA type) */ \
-+ (464 * sizeof (u_int16_t)) + /* RISC registers */ \
-+ (63488 * sizeof (u_int16_t)) + /* RISC SRAM (0x0800..0xffff) */ \
-+ (4096 * sizeof (u_int16_t)) + /* RISC SRAM (0x10000..0x10FFF) */ \
-+ (61440 * sizeof (u_int16_t)) /* RISC SRAM (0x11000..0x1FFFF) */
-+/* the larger of the two */
-+#define ISP_CRASH_IMAGE_SIZE QLA2300_RISC_IMAGE_DUMP_SIZE
-+#endif /* _ISPREG_H */
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/scsi/isp/isp_target.c 2003-07-19 17:06:33.000000000 -0700
-@@ -0,0 +1,1195 @@
-+/* @(#)isp_target.c 1.21 */
-+/*
-+ * Machine and OS Independent Target Mode Code for the Qlogic SCSI/FC adapters.
-+ *
-+ * Copyright (c) 1999, 2000, 2001 by Matthew Jacob
-+ * All rights reserved.
-+ * mjacob@feral.com
-+ *
-+ * Redistribution and use in source and binary forms, with or without
-+ * modification, are permitted provided that the following conditions
-+ * are met:
-+ * 1. Redistributions of source code must retain the above copyright
-+ * notice immediately at the beginning of the file, without modification,
-+ * this list of conditions, and the following disclaimer.
-+ * 2. The name of the author may not be used to endorse or promote products
-+ * derived from this software without specific prior written permission.
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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)
-+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-+ * SUCH DAMAGE.
-+ */
-+
-+/*
-+ * Bug fixes gratefully acknowledged from:
-+ * Oded Kedem <oded@kashya.com>
-+ */
-+/*
-+ * Include header file appropriate for platform we're building on.
-+ */
-+
-+#ifdef __NetBSD__
-+#include <dev/ic/isp_netbsd.h>
-+#endif
-+#ifdef __FreeBSD__
-+#include <dev/isp/isp_freebsd.h>
-+#endif
-+#ifdef __OpenBSD__
-+#include <dev/ic/isp_openbsd.h>
-+#endif
-+#ifdef __linux__
-+#include "isp_linux.h"
-+#endif
-+
-+#ifdef ISP_TARGET_MODE
-+static const char atiocope[] =
-+ "ATIO returned for lun %d because it was in the middle of Bus Device Reset "
-+ "on bus %d";
-+static const char atior[] =
-+ "ATIO returned on for lun %d on from IID %d because a Bus Reset occurred "
-+ "on bus %d";
-+
-+static void isp_got_msg(struct ispsoftc *, int, in_entry_t *);
-+static void isp_got_msg_fc(struct ispsoftc *, int, in_fcentry_t *);
-+static void isp_notify_ack(struct ispsoftc *, void *);
-+static void isp_handle_atio(struct ispsoftc *, at_entry_t *);
-+static void isp_handle_atio2(struct ispsoftc *, at2_entry_t *);
-+static void isp_handle_ctio(struct ispsoftc *, ct_entry_t *);
-+static void isp_handle_ctio2(struct ispsoftc *, ct2_entry_t *);
-+
-+/*
-+ * The Qlogic driver gets an interrupt to look at response queue entries.
-+ * Some of these are status completions for initiatior mode commands, but
-+ * if target mode is enabled, we get a whole wad of response queue entries
-+ * to be handled here.
-+ *
-+ * Basically the split into 3 main groups: Lun Enable/Modification responses,
-+ * SCSI Command processing, and Immediate Notification events.
-+ *
-+ * You start by writing a request queue entry to enable target mode (and
-+ * establish some resource limitations which you can modify later).
-+ * The f/w responds with a LUN ENABLE or LUN MODIFY response with
-+ * the status of this action. If the enable was successful, you can expect...
-+ *
-+ * Response queue entries with SCSI commands encapsulate show up in an ATIO
-+ * (Accept Target IO) type- sometimes with enough info to stop the command at
-+ * this level. Ultimately the driver has to feed back to the f/w's request
-+ * queue a sequence of CTIOs (continue target I/O) that describe data to
-+ * be moved and/or status to be sent) and finally finishing with sending
-+ * to the f/w's response queue an ATIO which then completes the handshake
-+ * with the f/w for that command. There's a lot of variations on this theme,
-+ * including flags you can set in the CTIO for the Qlogic 2X00 fibre channel
-+ * cards that 'auto-replenish' the f/w's ATIO count, but this is the basic
-+ * gist of it.
-+ *
-+ * The third group that can show up in the response queue are Immediate
-+ * Notification events. These include things like notifications of SCSI bus
-+ * resets, or Bus Device Reset messages or other messages received. This
-+ * a classic oddbins area. It can get a little weird because you then turn
-+ * around and acknowledge the Immediate Notify by writing an entry onto the
-+ * request queue and then the f/w turns around and gives you an acknowledgement
-+ * to *your* acknowledgement on the response queue (the idea being to let
-+ * the f/w tell you when the event is *really* over I guess).
-+ *
-+ */
-+
-+
-+/*
-+ * A new response queue entry has arrived. The interrupt service code
-+ * has already swizzled it into the platform dependent from canonical form.
-+ *
-+ * Because of the way this driver is designed, unfortunately most of the
-+ * actual synchronization work has to be done in the platform specific
-+ * code- we have no synchroniation primitives in the common code.
-+ */
-+
-+int
-+isp_target_notify(struct ispsoftc *isp, void *vptr, u_int16_t *optrp)
-+{
-+ u_int16_t status, seqid;
-+ union {
-+ at_entry_t *atiop;
-+ at2_entry_t *at2iop;
-+ ct_entry_t *ctiop;
-+ ct2_entry_t *ct2iop;
-+ lun_entry_t *lunenp;
-+ in_entry_t *inotp;
-+ in_fcentry_t *inot_fcp;
-+ na_entry_t *nackp;
-+ na_fcentry_t *nack_fcp;
-+ isphdr_t *hp;
-+ void * *vp;
-+#define atiop unp.atiop
-+#define at2iop unp.at2iop
-+#define ctiop unp.ctiop
-+#define ct2iop unp.ct2iop
-+#define lunenp unp.lunenp
-+#define inotp unp.inotp
-+#define inot_fcp unp.inot_fcp
-+#define nackp unp.nackp
-+#define nack_fcp unp.nack_fcp
-+#define hdrp unp.hp
-+ } unp;
-+ u_int8_t local[QENTRY_LEN];
-+ int bus, type, rval = 1;
-+
-+ type = isp_get_response_type(isp, (isphdr_t *)vptr);
-+ unp.vp = vptr;
-+
-+ ISP_TDQE(isp, "isp_target_notify", (int) *optrp, vptr);
-+
-+ switch(type) {
-+ case RQSTYPE_ATIO:
-+ isp_get_atio(isp, atiop, (at_entry_t *) local);
-+ isp_handle_atio(isp, (at_entry_t *) local);
-+ break;
-+ case RQSTYPE_CTIO:
-+ isp_get_ctio(isp, ctiop, (ct_entry_t *) local);
-+ isp_handle_ctio(isp, (ct_entry_t *) local);
-+ break;
-+ case RQSTYPE_ATIO2:
-+ isp_get_atio2(isp, at2iop, (at2_entry_t *) local);
-+ isp_handle_atio2(isp, (at2_entry_t *) local);
-+ break;
-+ case RQSTYPE_CTIO2:
-+ isp_get_ctio2(isp, ct2iop, (ct2_entry_t *) local);
-+ isp_handle_ctio2(isp, (ct2_entry_t *) local);
-+ break;
-+ case RQSTYPE_ENABLE_LUN:
-+ case RQSTYPE_MODIFY_LUN:
-+ isp_get_enable_lun(isp, lunenp, (lun_entry_t *) local);
-+ (void) isp_async(isp, ISPASYNC_TARGET_ACTION, local);
-+ break;
-+
-+ case RQSTYPE_NOTIFY:
-+ /*
-+ * Either the ISP received a SCSI message it can't
-+ * handle, or it's returning an Immed. Notify entry
-+ * we sent. We can send Immed. Notify entries to
-+ * increment the firmware's resource count for them
-+ * (we set this initially in the Enable Lun entry).
-+ */
-+ bus = 0;
-+ if (IS_FC(isp)) {
-+ isp_get_notify_fc(isp, inot_fcp, (in_fcentry_t *)local);
-+ inot_fcp = (in_fcentry_t *) local;
-+ status = inot_fcp->in_status;
-+ seqid = inot_fcp->in_seqid;
-+ } else {
-+ isp_get_notify(isp, inotp, (in_entry_t *)local);
-+ inotp = (in_entry_t *) local;
-+ status = inotp->in_status & 0xff;
-+ seqid = inotp->in_seqid;
-+ if (IS_DUALBUS(isp)) {
-+ bus = GET_BUS_VAL(inotp->in_iid);
-+ SET_BUS_VAL(inotp->in_iid, 0);
-+ }
-+ }
-+ isp_prt(isp, ISP_LOGTDEBUG0,
-+ "Immediate Notify On Bus %d, status=0x%x seqid=0x%x",
-+ bus, status, seqid);
-+
-+ /*
-+ * ACK it right away.
-+ */
-+ isp_notify_ack(isp, (status == IN_RESET)? NULL : local);
-+ switch (status) {
-+ case IN_RESET:
-+ (void) isp_async(isp, ISPASYNC_BUS_RESET, &bus);
-+ break;
-+ case IN_MSG_RECEIVED:
-+ case IN_IDE_RECEIVED:
-+ if (IS_FC(isp)) {
-+ isp_got_msg_fc(isp, bus, (in_fcentry_t *)local);
-+ } else {
-+ isp_got_msg(isp, bus, (in_entry_t *)local);
-+ }
-+ break;
-+ case IN_RSRC_UNAVAIL:
-+ isp_prt(isp, ISP_LOGWARN, "Firmware out of ATIOs");
-+ break;
-+ case IN_PORT_LOGOUT:
-+ case IN_ABORT_TASK:
-+ case IN_PORT_CHANGED:
-+ case IN_GLOBAL_LOGO:
-+ (void) isp_async(isp, ISPASYNC_TARGET_ACTION, &local);
-+ break;
-+ default:
-+ isp_prt(isp, ISP_LOGERR,
-+ "bad status (0x%x) in isp_target_notify", status);
-+ break;
-+ }
-+ break;
-+
-+ case RQSTYPE_NOTIFY_ACK:
-+ /*
-+ * The ISP is acknowledging our acknowledgement of an
-+ * Immediate Notify entry for some asynchronous event.
-+ */
-+ if (IS_FC(isp)) {
-+ isp_get_notify_ack_fc(isp, nack_fcp,
-+ (na_fcentry_t *)local);
-+ nack_fcp = (na_fcentry_t *)local;
-+ isp_prt(isp, ISP_LOGTDEBUG1,
-+ "Notify Ack status=0x%x seqid 0x%x",
-+ nack_fcp->na_status, nack_fcp->na_seqid);
-+ } else {
-+ isp_get_notify_ack(isp, nackp, (na_entry_t *)local);
-+ nackp = (na_entry_t *)local;
-+ isp_prt(isp, ISP_LOGTDEBUG1,
-+ "Notify Ack event 0x%x status=0x%x seqid 0x%x",
-+ nackp->na_event, nackp->na_status, nackp->na_seqid);
-+ }
-+ break;
-+ default:
-+ isp_prt(isp, ISP_LOGERR,
-+ "Unknown entry type 0x%x in isp_target_notify", type);
-+ rval = 0;
-+ break;
-+ }
-+#undef atiop
-+#undef at2iop
-+#undef ctiop
-+#undef ct2iop
-+#undef lunenp
-+#undef inotp
-+#undef inot_fcp
-+#undef nackp
-+#undef nack_fcp
-+#undef hdrp
-+ return (rval);
-+}
-+
-+
-+/*
-+ * Toggle (on/off) target mode for bus/target/lun
-+ *
-+ * The caller has checked for overlap and legality.
-+ *
-+ * Note that not all of bus, target or lun can be paid attention to.
-+ * Note also that this action will not be complete until the f/w writes
-+ * response entry. The caller is responsible for synchronizing this.
-+ */
-+int
-+isp_lun_cmd(struct ispsoftc *isp, int cmd, int bus, int tgt, int lun,
-+ int cmd_cnt, int inot_cnt, u_int32_t opaque)
-+{
-+ lun_entry_t el;
-+ u_int16_t nxti, optr;
-+ void *outp;
-+
-+
-+ MEMZERO(&el, sizeof (el));
-+ if (IS_DUALBUS(isp)) {
-+ el.le_rsvd = (bus & 0x1) << 7;
-+ }
-+ el.le_cmd_count = cmd_cnt;
-+ el.le_in_count = inot_cnt;
-+ if (cmd == RQSTYPE_ENABLE_LUN) {
-+ if (IS_SCSI(isp)) {
-+ el.le_flags = LUN_TQAE|LUN_DISAD;
-+ el.le_cdb6len = 12;
-+ el.le_cdb7len = 12;
-+ }
-+ } else if (cmd == -RQSTYPE_ENABLE_LUN) {
-+ cmd = RQSTYPE_ENABLE_LUN;
-+ el.le_cmd_count = 0;
-+ el.le_in_count = 0;
-+ } else if (cmd == -RQSTYPE_MODIFY_LUN) {
-+ cmd = RQSTYPE_MODIFY_LUN;
-+ el.le_ops = LUN_CCDECR | LUN_INDECR;
-+ } else {
-+ el.le_ops = LUN_CCINCR | LUN_ININCR;
-+ }
-+ el.le_header.rqs_entry_type = cmd;
-+ el.le_header.rqs_entry_count = 1;
-+ el.le_reserved = opaque;
-+ if (IS_SCSI(isp)) {
-+ el.le_tgt = tgt;
-+ el.le_lun = lun;
-+ } else if ((FCPARAM(isp)->isp_fwattr & ISP_FW_ATTR_SCCLUN) == 0) {
-+ el.le_lun = lun;
-+ }
-+ el.le_timeout = 2;
-+
-+ if (isp_getrqentry(isp, &nxti, &optr, &outp)) {
-+ isp_prt(isp, ISP_LOGERR,
-+ "Request Queue Overflow in isp_lun_cmd");
-+ return (-1);
-+ }
-+ ISP_TDQE(isp, "isp_lun_cmd", (int) optr, &el);
-+ isp_put_enable_lun(isp, &el, outp);
-+ ISP_ADD_REQUEST(isp, nxti);
-+ return (0);
-+}
-+
-+
-+int
-+isp_target_put_entry(struct ispsoftc *isp, void *ap)
-+{
-+ void *outp;
-+ u_int16_t nxti, optr;
-+ u_int8_t etype = ((isphdr_t *) ap)->rqs_entry_type;
-+
-+ if (isp_getrqentry(isp, &nxti, &optr, &outp)) {
-+ isp_prt(isp, ISP_LOGWARN,
-+ "Request Queue Overflow in isp_target_put_entry");
-+ return (-1);
-+ }
-+ switch (etype) {
-+ case RQSTYPE_ATIO:
-+ isp_put_atio(isp, (at_entry_t *) ap, (at_entry_t *) outp);
-+ break;
-+ case RQSTYPE_ATIO2:
-+ isp_put_atio2(isp, (at2_entry_t *) ap, (at2_entry_t *) outp);
-+ break;
-+ case RQSTYPE_CTIO:
-+ isp_put_ctio(isp, (ct_entry_t *) ap, (ct_entry_t *) outp);
-+ break;
-+ case RQSTYPE_CTIO2:
-+ isp_put_ctio2(isp, (ct2_entry_t *) ap, (ct2_entry_t *) outp);
-+ break;
-+ default:
-+ isp_prt(isp, ISP_LOGERR,
-+ "Unknown type 0x%x in isp_put_entry", etype);
-+ return (-1);
-+ }
-+
-+ ISP_TDQE(isp, "isp_target_put_entry", (int) optr, ap);
-+ ISP_ADD_REQUEST(isp, nxti);
-+ return (0);
-+}
-+
-+int
-+isp_target_put_atio(struct ispsoftc *isp, void *arg)
-+{
-+ union {
-+ at_entry_t _atio;
-+ at2_entry_t _atio2;
-+ } atun;
-+
-+ MEMZERO(&atun, sizeof atun);
-+ if (IS_FC(isp)) {
-+ at2_entry_t *aep = arg;
-+ atun._atio2.at_header.rqs_entry_type = RQSTYPE_ATIO2;
-+ atun._atio2.at_header.rqs_entry_count = 1;
-+ if (FCPARAM(isp)->isp_fwattr & ISP_FW_ATTR_SCCLUN) {
-+ atun._atio2.at_scclun = (u_int16_t) aep->at_scclun;
-+ } else {
-+ atun._atio2.at_lun = (u_int8_t) aep->at_lun;
-+ }
-+ atun._atio2.at_iid = aep->at_iid;
-+ atun._atio2.at_rxid = aep->at_rxid;
-+ atun._atio2.at_status = CT_OK;
-+ } else {
-+ at_entry_t *aep = arg;
-+ atun._atio.at_header.rqs_entry_type = RQSTYPE_ATIO;
-+ atun._atio.at_header.rqs_entry_count = 1;
-+ atun._atio.at_handle = aep->at_handle;
-+ atun._atio.at_iid = aep->at_iid;
-+ atun._atio.at_tgt = aep->at_tgt;
-+ atun._atio.at_lun = aep->at_lun;
-+ atun._atio.at_tag_type = aep->at_tag_type;
-+ atun._atio.at_tag_val = aep->at_tag_val;
-+ atun._atio.at_status = (aep->at_flags & AT_TQAE);
-+ atun._atio.at_status |= CT_OK;
-+ }
-+ return (isp_target_put_entry(isp, &atun));
-+}
-+
-+/*
-+ * Command completion- both for handling cases of no resources or
-+ * no blackhole driver, or other cases where we have to, inline,
-+ * finish the command sanely, or for normal command completion.
-+ *
-+ * The 'completion' code value has the scsi status byte in the low 8 bits.
-+ * If status is a CHECK CONDITION and bit 8 is nonzero, then bits 12..15 have
-+ * the sense key and bits 16..23 have the ASCQ and bits 24..31 have the ASC
-+ * values.
-+ *
-+ * NB: the key, asc, ascq, cannot be used for parallel SCSI as it doesn't
-+ * NB: inline SCSI sense reporting. As such, we lose this information. XXX.
-+ *
-+ * For both parallel && fibre channel, we use the feature that does
-+ * an automatic resource autoreplenish so we don't have then later do
-+ * put of an atio to replenish the f/w's resource count.
-+ */
-+
-+int
-+isp_endcmd(struct ispsoftc *isp, void *arg, u_int32_t code, u_int16_t hdl)
-+{
-+ int sts;
-+ union {
-+ ct_entry_t _ctio;
-+ ct2_entry_t _ctio2;
-+ } un;
-+
-+ MEMZERO(&un, sizeof un);
-+ sts = code & 0xff;
-+
-+ if (IS_FC(isp)) {
-+ at2_entry_t *aep = arg;
-+ ct2_entry_t *cto = &un._ctio2;
-+
-+ cto->ct_header.rqs_entry_type = RQSTYPE_CTIO2;
-+ cto->ct_header.rqs_entry_count = 1;
-+ cto->ct_iid = aep->at_iid;
-+ if ((FCPARAM(isp)->isp_fwattr & ISP_FW_ATTR_SCCLUN) == 0) {
-+ cto->ct_lun = aep->at_lun;
-+ }
-+ cto->ct_rxid = aep->at_rxid;
-+ cto->rsp.m1.ct_scsi_status = sts & 0xff;
-+ cto->ct_flags = CT2_SENDSTATUS | CT2_NO_DATA | CT2_FLAG_MODE1;
-+ if (hdl == 0) {
-+ cto->ct_flags |= CT2_CCINCR;
-+ }
-+ if (aep->at_datalen) {
-+ cto->ct_resid = aep->at_datalen;
-+ cto->rsp.m1.ct_scsi_status |= CT2_DATA_UNDER;
-+ }
-+ if ((sts & 0xff) == SCSI_CHECK && (sts & ECMD_SVALID)) {
-+ cto->rsp.m1.ct_resp[0] = 0xf0;
-+ cto->rsp.m1.ct_resp[2] = (code >> 12) & 0xf;
-+ cto->rsp.m1.ct_resp[7] = 8;
-+ cto->rsp.m1.ct_resp[12] = (code >> 24) & 0xff;
-+ cto->rsp.m1.ct_resp[13] = (code >> 16) & 0xff;
-+ cto->rsp.m1.ct_senselen = 16;
-+ cto->rsp.m1.ct_scsi_status |= CT2_SNSLEN_VALID;
-+ }
-+ cto->ct_syshandle = hdl;
-+ } else {
-+ at_entry_t *aep = arg;
-+ ct_entry_t *cto = &un._ctio;
-+
-+ cto->ct_header.rqs_entry_type = RQSTYPE_CTIO;
-+ cto->ct_header.rqs_entry_count = 1;
-+ cto->ct_fwhandle = aep->at_handle;
-+ cto->ct_iid = aep->at_iid;
-+ cto->ct_tgt = aep->at_tgt;
-+ cto->ct_lun = aep->at_lun;
-+ cto->ct_tag_type = aep->at_tag_type;
-+ cto->ct_tag_val = aep->at_tag_val;
-+ if (aep->at_flags & AT_TQAE) {
-+ cto->ct_flags |= CT_TQAE;
-+ }
-+ cto->ct_flags = CT_SENDSTATUS | CT_NO_DATA;
-+ if (hdl == 0) {
-+ cto->ct_flags |= CT_CCINCR;
-+ }
-+ cto->ct_scsi_status = sts;
-+ cto->ct_syshandle = hdl;
-+ }
-+ return (isp_target_put_entry(isp, &un));
-+}
-+
-+int
-+isp_target_async(struct ispsoftc *isp, int bus, int event)
-+{
-+ tmd_event_t evt;
-+ tmd_msg_t msg;
-+
-+ switch (event) {
-+ /*
-+ * These three we handle here to propagate an effective bus reset
-+ * upstream, but these do not require any immediate notify actions
-+ * so we return when done.
-+ */
-+ case ASYNC_LIP_F8:
-+ case ASYNC_LIP_OCCURRED:
-+ case ASYNC_LOOP_UP:
-+ case ASYNC_LOOP_DOWN:
-+ case ASYNC_LOOP_RESET:
-+ case ASYNC_PTPMODE:
-+ /*
-+ * These don't require any immediate notify actions. We used
-+ * treat them like SCSI Bus Resets, but that was just plain
-+ * wrong. Let the normal CTIO completion report what occurred.
-+ */
-+ return (0);
-+
-+ case ASYNC_BUS_RESET:
-+ case ASYNC_TIMEOUT_RESET:
-+ if (IS_FC(isp)) {
-+ return (0); /* we'll be getting an inotify instead */
-+ }
-+ evt.ev_bus = bus;
-+ evt.ev_event = event;
-+ (void) isp_async(isp, ISPASYNC_TARGET_EVENT, &evt);
-+ break;
-+ case ASYNC_DEVICE_RESET:
-+ /*
-+ * Bus Device Reset resets a specific target, so
-+ * we pass this as a synthesized message.
-+ */
-+ MEMZERO(&msg, sizeof msg);
-+ if (IS_FC(isp)) {
-+ msg.nt_iid = FCPARAM(isp)->isp_loopid;
-+ } else {
-+ msg.nt_iid = SDPARAM(isp)->isp_initiator_id;
-+ }
-+ msg.nt_bus = bus;
-+ msg.nt_msg[0] = MSG_BUS_DEV_RESET;
-+ (void) isp_async(isp, ISPASYNC_TARGET_MESSAGE, &msg);
-+ break;
-+ case ASYNC_CTIO_DONE:
-+ evt.ev_bus = bus;
-+ evt.ev_event = event;
-+ (void) isp_async(isp, ISPASYNC_TARGET_EVENT, &evt);
-+ return (0);
-+ default:
-+ isp_prt(isp, ISP_LOGERR,
-+ "isp_target_async: unknown event 0x%x", event);
-+ break;
-+ }
-+ if (isp->isp_state == ISP_RUNSTATE)
-+ isp_notify_ack(isp, NULL);
-+ return(0);
-+}
-+
-+
-+/*
-+ * Process a received message.
-+ * The ISP firmware can handle most messages, there are only
-+ * a few that we need to deal with:
-+ * - abort: clean up the current command
-+ * - abort tag and clear queue
-+ */
-+
-+static void
-+isp_got_msg(struct ispsoftc *isp, int bus, in_entry_t *inp)
-+{
-+ u_int8_t status = inp->in_status & ~QLTM_SVALID;
-+
-+ if (status == IN_IDE_RECEIVED || status == IN_MSG_RECEIVED) {
-+ tmd_msg_t msg;
-+
-+ MEMZERO(&msg, sizeof (msg));
-+ msg.nt_bus = bus;
-+ msg.nt_iid = inp->in_iid;
-+ msg.nt_tgt = inp->in_tgt;
-+ msg.nt_lun = inp->in_lun;
-+ msg.nt_tagtype = inp->in_tag_type;
-+ msg.nt_tagval = inp->in_tag_val;
-+ MEMCPY(msg.nt_msg, inp->in_msg, IN_MSGLEN);
-+ (void) isp_async(isp, ISPASYNC_TARGET_MESSAGE, &msg);
-+ } else {
-+ isp_prt(isp, ISP_LOGERR,
-+ "unknown immediate notify status 0x%x", inp->in_status);
-+ }
-+}
-+
-+/*
-+ * Synthesize a message from the task management flags in a FCP_CMND_IU.
-+ */
-+static void
-+isp_got_msg_fc(struct ispsoftc *isp, int bus, in_fcentry_t *inp)
-+{
-+ int lun;
-+ static const char f1[] = "%s from iid %d lun %d seq 0x%x";
-+ static const char f2[] =
-+ "unknown %s 0x%x lun %d iid %d task flags 0x%x seq 0x%x\n";
-+
-+ if (FCPARAM(isp)->isp_fwattr & ISP_FW_ATTR_SCCLUN) {
-+ lun = inp->in_scclun;
-+ } else {
-+ lun = inp->in_lun;
-+ }
-+
-+ if (inp->in_status != IN_MSG_RECEIVED) {
-+ isp_prt(isp, ISP_LOGINFO, f2, "immediate notify status",
-+ inp->in_status, lun, inp->in_iid,
-+ inp->in_task_flags, inp->in_seqid);
-+ } else {
-+ tmd_msg_t msg;
-+
-+ MEMZERO(&msg, sizeof (msg));
-+ msg.nt_bus = bus;
-+ msg.nt_iid = inp->in_iid;
-+ msg.nt_tagval = inp->in_seqid;
-+ msg.nt_lun = lun;
-+
-+ if (inp->in_task_flags & TASK_FLAGS_ABORT_TASK) {
-+ isp_prt(isp, ISP_LOGINFO, f1, "ABORT TASK",
-+ inp->in_iid, lun, inp->in_seqid);
-+ msg.nt_msg[0] = MSG_ABORT_TAG;
-+ } else if (inp->in_task_flags & TASK_FLAGS_CLEAR_TASK_SET) {
-+ isp_prt(isp, ISP_LOGINFO, f1, "CLEAR TASK SET",
-+ inp->in_iid, lun, inp->in_seqid);
-+ msg.nt_msg[0] = MSG_CLEAR_QUEUE;
-+ } else if (inp->in_task_flags & TASK_FLAGS_TARGET_RESET) {
-+ isp_prt(isp, ISP_LOGINFO, f1, "TARGET RESET",
-+ inp->in_iid, lun, inp->in_seqid);
-+ msg.nt_msg[0] = MSG_BUS_DEV_RESET;
-+ } else if (inp->in_task_flags & TASK_FLAGS_CLEAR_ACA) {
-+ isp_prt(isp, ISP_LOGINFO, f1, "CLEAR ACA",
-+ inp->in_iid, lun, inp->in_seqid);
-+ /* ???? */
-+ msg.nt_msg[0] = MSG_REL_RECOVERY;
-+ } else if (inp->in_task_flags & TASK_FLAGS_TERMINATE_TASK) {
-+ isp_prt(isp, ISP_LOGINFO, f1, "TERMINATE TASK",
-+ inp->in_iid, lun, inp->in_seqid);
-+ msg.nt_msg[0] = MSG_TERM_IO_PROC;
-+ } else {
-+ isp_prt(isp, ISP_LOGWARN, f2, "task flag",
-+ inp->in_status, lun, inp->in_iid,
-+ inp->in_task_flags, inp->in_seqid);
-+ }
-+ if (msg.nt_msg[0]) {
-+ (void) isp_async(isp, ISPASYNC_TARGET_MESSAGE, &msg);
-+ }
-+ }
-+}
-+
-+static void
-+isp_notify_ack(struct ispsoftc *isp, void *arg)
-+{
-+ char storage[QENTRY_LEN];
-+ u_int16_t nxti, optr;
-+ void *outp;
-+
-+ if (isp_getrqentry(isp, &nxti, &optr, &outp)) {
-+ isp_prt(isp, ISP_LOGWARN,
-+ "Request Queue Overflow For isp_notify_ack");
-+ return;
-+ }
-+
-+ MEMZERO(storage, QENTRY_LEN);
-+
-+ if (IS_FC(isp)) {
-+ na_fcentry_t *na = (na_fcentry_t *) storage;
-+ if (arg) {
-+ in_fcentry_t *inp = arg;
-+ MEMCPY(storage, arg, sizeof (isphdr_t));
-+ na->na_iid = inp->in_iid;
-+ if (FCPARAM(isp)->isp_fwattr & ISP_FW_ATTR_SCCLUN) {
-+ na->na_lun = inp->in_scclun;
-+ } else {
-+ na->na_lun = inp->in_lun;
-+ }
-+ na->na_task_flags = inp->in_task_flags;
-+ na->na_seqid = inp->in_seqid;
-+ na->na_flags = NAFC_RCOUNT;
-+ na->na_status = inp->in_status;
-+ if (inp->in_status == IN_RESET) {
-+ na->na_flags |= NAFC_RST_CLRD;
-+ }
-+ } else {
-+ na->na_flags = NAFC_RST_CLRD;
-+ }
-+ na->na_header.rqs_entry_type = RQSTYPE_NOTIFY_ACK;
-+ na->na_header.rqs_entry_count = 1;
-+ isp_put_notify_ack_fc(isp, na, (na_fcentry_t *)outp);
-+ } else {
-+ na_entry_t *na = (na_entry_t *) storage;
-+ if (arg) {
-+ in_entry_t *inp = arg;
-+ MEMCPY(storage, arg, sizeof (isphdr_t));
-+ na->na_iid = inp->in_iid;
-+ na->na_lun = inp->in_lun;
-+ na->na_tgt = inp->in_tgt;
-+ na->na_seqid = inp->in_seqid;
-+ if (inp->in_status == IN_RESET) {
-+ na->na_event = NA_RST_CLRD;
-+ }
-+ } else {
-+ na->na_event = NA_RST_CLRD;
-+ }
-+ na->na_header.rqs_entry_type = RQSTYPE_NOTIFY_ACK;
-+ na->na_header.rqs_entry_count = 1;
-+ isp_put_notify_ack(isp, na, (na_entry_t *)outp);
-+ }
-+ ISP_TDQE(isp, "isp_notify_ack", (int) optr, storage);
-+ ISP_ADD_REQUEST(isp, nxti);
-+}
-+
-+static void
-+isp_handle_atio(struct ispsoftc *isp, at_entry_t *aep)
-+{
-+ int lun;
-+ lun = aep->at_lun;
-+ /*
-+ * The firmware status (except for the QLTM_SVALID bit) indicates
-+ * why this ATIO was sent to us.
-+ *
-+ * If QLTM_SVALID is set, the firware has recommended Sense Data.
-+ *
-+ * If the DISCONNECTS DISABLED bit is set in the flags field,
-+ * we're still connected on the SCSI bus - i.e. the initiator
-+ * did not set DiscPriv in the identify message. We don't care
-+ * about this so it's ignored.
-+ */
-+
-+ switch(aep->at_status & ~QLTM_SVALID) {
-+ case AT_PATH_INVALID:
-+ /*
-+ * ATIO rejected by the firmware due to disabled lun.
-+ */
-+ isp_prt(isp, ISP_LOGERR,
-+ "rejected ATIO for disabled lun %d", lun);
-+ break;
-+ case AT_NOCAP:
-+ /*
-+ * Requested Capability not available
-+ * We sent an ATIO that overflowed the firmware's
-+ * command resource count.
-+ */
-+ isp_prt(isp, ISP_LOGERR,
-+ "rejected ATIO for lun %d because of command count"
-+ " overflow", lun);
-+ break;
-+
-+ case AT_BDR_MSG:
-+ /*
-+ * If we send an ATIO to the firmware to increment
-+ * its command resource count, and the firmware is
-+ * recovering from a Bus Device Reset, it returns
-+ * the ATIO with this status. We set the command
-+ * resource count in the Enable Lun entry and do
-+ * not increment it. Therefore we should never get
-+ * this status here.
-+ */
-+ isp_prt(isp, ISP_LOGERR, atiocope, lun,
-+ GET_BUS_VAL(aep->at_iid));
-+ break;
-+
-+ case AT_CDB: /* Got a CDB */
-+ case AT_PHASE_ERROR: /* Bus Phase Sequence Error */
-+ /*
-+ * Punt to platform specific layer.
-+ */
-+ (void) isp_async(isp, ISPASYNC_TARGET_ACTION, aep);
-+ break;
-+
-+ case AT_RESET:
-+ /*
-+ * A bus reset came along and blew away this command. Why
-+ * they do this in addition the async event code stuff,
-+ * I dunno.
-+ *
-+ * Ignore it because the async event will clear things
-+ * up for us.
-+ */
-+ isp_prt(isp, ISP_LOGWARN, atior, lun,
-+ GET_IID_VAL(aep->at_iid), GET_BUS_VAL(aep->at_iid));
-+ break;
-+
-+
-+ default:
-+ isp_prt(isp, ISP_LOGERR,
-+ "Unknown ATIO status 0x%x from initiator %d for lun %d",
-+ aep->at_status, aep->at_iid, lun);
-+ (void) isp_target_put_atio(isp, aep);
-+ break;
-+ }
-+}
-+
-+static void
-+isp_handle_atio2(struct ispsoftc *isp, at2_entry_t *aep)
-+{
-+ int lun;
-+
-+ if (FCPARAM(isp)->isp_fwattr & ISP_FW_ATTR_SCCLUN) {
-+ lun = aep->at_scclun;
-+ } else {
-+ lun = aep->at_lun;
-+ }
-+
-+ /*
-+ * The firmware status (except for the QLTM_SVALID bit) indicates
-+ * why this ATIO was sent to us.
-+ *
-+ * If QLTM_SVALID is set, the firware has recommended Sense Data.
-+ *
-+ * If the DISCONNECTS DISABLED bit is set in the flags field,
-+ * we're still connected on the SCSI bus - i.e. the initiator
-+ * did not set DiscPriv in the identify message. We don't care
-+ * about this so it's ignored.
-+ */
-+
-+ switch(aep->at_status & ~QLTM_SVALID) {
-+ case AT_PATH_INVALID:
-+ /*
-+ * ATIO rejected by the firmware due to disabled lun.
-+ */
-+ isp_prt(isp, ISP_LOGERR,
-+ "rejected ATIO2 for disabled lun %d", lun);
-+ break;
-+ case AT_NOCAP:
-+ /*
-+ * Requested Capability not available
-+ * We sent an ATIO that overflowed the firmware's
-+ * command resource count.
-+ */
-+ isp_prt(isp, ISP_LOGERR,
-+ "rejected ATIO2 for lun %d- command count overflow", lun);
-+ break;
-+
-+ case AT_BDR_MSG:
-+ /*
-+ * If we send an ATIO to the firmware to increment
-+ * its command resource count, and the firmware is
-+ * recovering from a Bus Device Reset, it returns
-+ * the ATIO with this status. We set the command
-+ * resource count in the Enable Lun entry and no
-+ * not increment it. Therefore we should never get
-+ * this status here.
-+ */
-+ isp_prt(isp, ISP_LOGERR, atiocope, lun, 0);
-+ break;
-+
-+ case AT_CDB: /* Got a CDB */
-+ /*
-+ * Punt to platform specific layer.
-+ */
-+ (void) isp_async(isp, ISPASYNC_TARGET_ACTION, aep);
-+ break;
-+
-+ case AT_RESET:
-+ /*
-+ * A bus reset came along an blew away this command. Why
-+ * they do this in addition the async event code stuff,
-+ * I dunno.
-+ *
-+ * Ignore it because the async event will clear things
-+ * up for us.
-+ */
-+ isp_prt(isp, ISP_LOGERR, atior, lun, aep->at_iid, 0);
-+ break;
-+
-+
-+ default:
-+ isp_prt(isp, ISP_LOGERR,
-+ "Unknown ATIO2 status 0x%x from initiator %d for lun %d",
-+ aep->at_status, aep->at_iid, lun);
-+ (void) isp_target_put_atio(isp, aep);
-+ break;
-+ }
-+}
-+
-+static void
-+isp_handle_ctio(struct ispsoftc *isp, ct_entry_t *ct)
-+{
-+ void *xs;
-+ int pl = ISP_LOGTDEBUG2;
-+ char *fmsg = NULL;
-+
-+ if (ct->ct_syshandle) {
-+ xs = isp_find_xs(isp, ct->ct_syshandle);
-+ if (xs == NULL)
-+ pl = ISP_LOGALL;
-+ } else {
-+ xs = NULL;
-+ }
-+
-+ switch(ct->ct_status & ~QLTM_SVALID) {
-+ case CT_OK:
-+ /*
-+ * There are generally 3 possibilities as to why we'd get
-+ * this condition:
-+ * We disconnected after receiving a CDB.
-+ * We sent or received data.
-+ * We sent status & command complete.
-+ */
-+
-+ if (ct->ct_flags & CT_SENDSTATUS) {
-+ break;
-+ } else if ((ct->ct_flags & CT_DATAMASK) == CT_NO_DATA) {
-+ /*
-+ * Nothing to do in this case.
-+ */
-+ isp_prt(isp, pl, "CTIO- iid %d disconnected OK",
-+ ct->ct_iid);
-+ return;
-+ }
-+ break;
-+
-+ case CT_BDR_MSG:
-+ /*
-+ * Bus Device Reset message received or the SCSI Bus has
-+ * been Reset; the firmware has gone to Bus Free.
-+ *
-+ * The firmware generates an async mailbox interupt to
-+ * notify us of this and returns outstanding CTIOs with this
-+ * status. These CTIOs are handled in that same way as
-+ * CT_ABORTED ones, so just fall through here.
-+ */
-+ fmsg = "Bus Device Reset";
-+ /*FALLTHROUGH*/
-+ case CT_RESET:
-+ if (fmsg == NULL)
-+ fmsg = "Bus Reset";
-+ /*FALLTHROUGH*/
-+ case CT_ABORTED:
-+ /*
-+ * When an Abort message is received the firmware goes to
-+ * Bus Free and returns all outstanding CTIOs with the status
-+ * set, then sends us an Immediate Notify entry.
-+ */
-+ if (fmsg == NULL)
-+ fmsg = "ABORT TAG message sent by Initiator";
-+
-+ isp_prt(isp, ISP_LOGWARN, "CTIO destroyed by %s", fmsg);
-+ break;
-+
-+ case CT_INVAL:
-+ /*
-+ * CTIO rejected by the firmware due to disabled lun.
-+ * "Cannot Happen".
-+ */
-+ isp_prt(isp, ISP_LOGERR,
-+ "Firmware rejected CTIO for disabled lun %d",
-+ ct->ct_lun);
-+ break;
-+
-+ case CT_NOPATH:
-+ /*
-+ * CTIO rejected by the firmware due "no path for the
-+ * nondisconnecting nexus specified". This means that
-+ * we tried to access the bus while a non-disconnecting
-+ * command is in process.
-+ */
-+ isp_prt(isp, ISP_LOGERR,
-+ "Firmware rejected CTIO for bad nexus %d/%d/%d",
-+ ct->ct_iid, ct->ct_tgt, ct->ct_lun);
-+ break;
-+
-+ case CT_RSELTMO:
-+ fmsg = "Reselection";
-+ /*FALLTHROUGH*/
-+ case CT_TIMEOUT:
-+ if (fmsg == NULL)
-+ fmsg = "Command";
-+ isp_prt(isp, ISP_LOGERR, "Firmware timed out on %s", fmsg);
-+ break;
-+
-+ case CT_PANIC:
-+ if (fmsg == NULL)
-+ fmsg = "Unrecoverable Error";
-+ /*FALLTHROUGH*/
-+ case CT_ERR:
-+ if (fmsg == NULL)
-+ fmsg = "Completed with Error";
-+ /*FALLTHROUGH*/
-+ case CT_PHASE_ERROR:
-+ if (fmsg == NULL)
-+ fmsg = "Phase Sequence Error";
-+ /*FALLTHROUGH*/
-+ case CT_TERMINATED:
-+ if (fmsg == NULL)
-+ fmsg = "terminated by TERMINATE TRANSFER";
-+ /*FALLTHROUGH*/
-+ case CT_NOACK:
-+ if (fmsg == NULL)
-+ fmsg = "unacknowledged Immediate Notify pending";
-+ isp_prt(isp, ISP_LOGERR, "CTIO returned by f/w- %s", fmsg);
-+ break;
-+ default:
-+ isp_prt(isp, ISP_LOGERR, "Unknown CTIO status 0x%x",
-+ ct->ct_status & ~QLTM_SVALID);
-+ break;
-+ }
-+
-+ if (xs == NULL) {
-+ /*
-+ * There may be more than one CTIO for a data transfer,
-+ * or this may be a status CTIO we're not monitoring.
-+ *
-+ * The assumption is that they'll all be returned in the
-+ * order we got them.
-+ */
-+ if (ct->ct_syshandle == 0) {
-+ if ((ct->ct_flags & CT_SENDSTATUS) == 0) {
-+ isp_prt(isp, pl,
-+ "intermediate CTIO completed ok");
-+ } else {
-+ isp_prt(isp, pl,
-+ "unmonitored CTIO completed ok");
-+ }
-+ } else {
-+ isp_prt(isp, pl,
-+ "NO xs for CTIO (handle 0x%x) status 0x%x",
-+ ct->ct_syshandle, ct->ct_status & ~QLTM_SVALID);
-+ }
-+ } else {
-+ /*
-+ * Final CTIO completed. Release DMA resources and
-+ * notify platform dependent layers.
-+ */
-+ if ((ct->ct_flags & CT_DATAMASK) != CT_NO_DATA) {
-+ ISP_DMAFREE(isp, xs, ct->ct_syshandle);
-+ }
-+ isp_prt(isp, pl, "final CTIO complete");
-+ /*
-+ * The platform layer will destroy the handle if appropriate.
-+ */
-+ (void) isp_async(isp, ISPASYNC_TARGET_ACTION, ct);
-+ }
-+}
-+
-+static void
-+isp_handle_ctio2(struct ispsoftc *isp, ct2_entry_t *ct)
-+{
-+ XS_T *xs;
-+ int pl = ISP_LOGTDEBUG2;
-+ char *fmsg = NULL;
-+
-+ if (ct->ct_syshandle) {
-+ xs = isp_find_xs(isp, ct->ct_syshandle);
-+ if (xs == NULL)
-+ pl = ISP_LOGALL;
-+ } else {
-+ xs = NULL;
-+ }
-+
-+ switch(ct->ct_status & ~QLTM_SVALID) {
-+ case CT_BUS_ERROR:
-+ isp_prt(isp, ISP_LOGERR, "PCI DMA Bus Error");
-+ /* FALL Through */
-+ case CT_DATA_OVER:
-+ case CT_DATA_UNDER:
-+ case CT_OK:
-+ /*
-+ * There are generally 2 possibilities as to why we'd get
-+ * this condition:
-+ * We sent or received data.
-+ * We sent status & command complete.
-+ */
-+
-+ break;
-+
-+ case CT_BDR_MSG:
-+ /*
-+ * Target Reset function received.
-+ *
-+ * The firmware generates an async mailbox interupt to
-+ * notify us of this and returns outstanding CTIOs with this
-+ * status. These CTIOs are handled in that same way as
-+ * CT_ABORTED ones, so just fall through here.
-+ */
-+ fmsg = "TARGET RESET Task Management Function Received";
-+ /*FALLTHROUGH*/
-+ case CT_RESET:
-+ if (fmsg == NULL)
-+ fmsg = "LIP Reset";
-+ /*FALLTHROUGH*/
-+ case CT_ABORTED:
-+ /*
-+ * When an Abort message is received the firmware goes to
-+ * Bus Free and returns all outstanding CTIOs with the status
-+ * set, then sends us an Immediate Notify entry.
-+ */
-+ if (fmsg == NULL)
-+ fmsg = "ABORT Task Management Function Received";
-+
-+ isp_prt(isp, ISP_LOGERR, "CTIO2 destroyed by %s", fmsg);
-+ break;
-+
-+ case CT_INVAL:
-+ /*
-+ * CTIO rejected by the firmware - invalid data direction.
-+ */
-+ isp_prt(isp, ISP_LOGERR, "CTIO2 had wrong data directiond");
-+ break;
-+
-+ case CT_RSELTMO:
-+ fmsg = "failure to reconnect to initiator";
-+ /*FALLTHROUGH*/
-+ case CT_TIMEOUT:
-+ if (fmsg == NULL)
-+ fmsg = "command";
-+ isp_prt(isp, ISP_LOGERR, "Firmware timed out on %s", fmsg);
-+ break;
-+
-+ case CT_ERR:
-+ fmsg = "Completed with Error";
-+ /*FALLTHROUGH*/
-+ case CT_LOGOUT:
-+ if (fmsg == NULL)
-+ fmsg = "Port Logout";
-+ /*FALLTHROUGH*/
-+ case CT_PORTNOTAVAIL:
-+ if (fmsg == NULL)
-+ fmsg = "Port not available";
-+ /*FALLTHROUGH*/
-+ case CT_PORTCHANGED:
-+ if (fmsg == NULL)
-+ fmsg = "Port Changed";
-+ /*FALLTHROUGH*/
-+ case CT_NOACK:
-+ if (fmsg == NULL)
-+ fmsg = "unacknowledged Immediate Notify pending";
-+ isp_prt(isp, ISP_LOGERR, "CTIO returned by f/w- %s", fmsg);
-+ break;
-+
-+ case CT_INVRXID:
-+ /*
-+ * CTIO rejected by the firmware because an invalid RX_ID.
-+ * Just print a message.
-+ */
-+ isp_prt(isp, ISP_LOGERR,
-+ "CTIO2 completed with Invalid RX_ID 0x%x", ct->ct_rxid);
-+ break;
-+
-+ default:
-+ isp_prt(isp, ISP_LOGERR, "Unknown CTIO2 status 0x%x",
-+ ct->ct_status & ~QLTM_SVALID);
-+ break;
-+ }
-+
-+ if (xs == NULL) {
-+ /*
-+ * There may be more than one CTIO for a data transfer,
-+ * or this may be a status CTIO we're not monitoring.
-+ *
-+ * The assumption is that they'll all be returned in the
-+ * order we got them.
-+ */
-+ if (ct->ct_syshandle == 0) {
-+ if ((ct->ct_flags & CT_SENDSTATUS) == 0) {
-+ isp_prt(isp, pl,
-+ "intermediate CTIO completed ok");
-+ } else {
-+ isp_prt(isp, pl,
-+ "unmonitored CTIO completed ok");
-+ }
-+ } else {
-+ isp_prt(isp, pl,
-+ "NO xs for CTIO (handle 0x%x) status 0x%x",
-+ ct->ct_syshandle, ct->ct_status & ~QLTM_SVALID);
-+ }
-+ } else {
-+ if ((ct->ct_flags & CT2_DATAMASK) != CT2_NO_DATA) {
-+ ISP_DMAFREE(isp, xs, ct->ct_syshandle);
-+ }
-+ if (ct->ct_flags & CT_SENDSTATUS) {
-+ /*
-+ * Sent status and command complete.
-+ *
-+ * We're now really done with this command, so we
-+ * punt to the platform dependent layers because
-+ * only there can we do the appropriate command
-+ * complete thread synchronization.
-+ */
-+ isp_prt(isp, pl, "status CTIO complete");
-+ } else {
-+ /*
-+ * Final CTIO completed. Release DMA resources and
-+ * notify platform dependent layers.
-+ */
-+ isp_prt(isp, pl, "data CTIO complete");
-+ }
-+ (void) isp_async(isp, ISPASYNC_TARGET_ACTION, ct);
-+ /*
-+ * The platform layer will destroy the handle if appropriate.
-+ */
-+ }
-+}
-+#endif
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/scsi/isp/isp_target.h 2003-07-19 17:06:33.000000000 -0700
-@@ -0,0 +1,562 @@
-+/* @(#)isp_target.h 1.18 */
-+/*
-+ * Qlogic Target Mode Structure and Flag Definitions
-+ *
-+ * Copyright (c) 1997, 1998
-+ * Patrick Stirling
-+ * pms@psconsult.com
-+ * All rights reserved.
-+ *
-+ * Additional Copyright (c) 1999, 2000, 2001
-+ * Matthew Jacob
-+ * mjacob@feral.com
-+ * All rights reserved.
-+ *
-+ *
-+ * Redistribution and use in source and binary forms, with or without
-+ * modification, are permitted provided that the following conditions
-+ * are met:
-+ * 1. Redistributions of source code must retain the above copyright
-+ * notice immediately at the beginning of the file, without modification,
-+ * this list of conditions, and the following disclaimer.
-+ * 2. The name of the author may not be used to endorse or promote products
-+ * derived from this software without specific prior written permission.
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS BE LIABLE FOR
-+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-+ * SUCH DAMAGE.
-+ *
-+ */
-+#ifndef _ISP_TARGET_H
-+#define _ISP_TARGET_H
-+
-+/*
-+ * Defines for all entry types
-+ */
-+#define QLTM_SVALID 0x80
-+#define QLTM_SENSELEN 18
-+
-+/*
-+ * Structure for Enable Lun and Modify Lun queue entries
-+ */
-+typedef struct {
-+ isphdr_t le_header;
-+ u_int32_t le_reserved;
-+ u_int8_t le_lun;
-+ u_int8_t le_rsvd;
-+ u_int8_t le_ops; /* Modify LUN only */
-+ u_int8_t le_tgt; /* Not for FC */
-+ u_int32_t le_flags; /* Not for FC */
-+ u_int8_t le_status;
-+ u_int8_t le_reserved2;
-+ u_int8_t le_cmd_count;
-+ u_int8_t le_in_count;
-+ u_int8_t le_cdb6len; /* Not for FC */
-+ u_int8_t le_cdb7len; /* Not for FC */
-+ u_int16_t le_timeout;
-+ u_int16_t le_reserved3[20];
-+} lun_entry_t;
-+
-+/*
-+ * le_flags values
-+ */
-+#define LUN_TQAE 0x00000002 /* bit1 Tagged Queue Action Enable */
-+#define LUN_DSSM 0x01000000 /* bit24 Disable Sending SDP Message */
-+#define LUN_DISAD 0x02000000 /* bit25 Disable autodisconnect */
-+#define LUN_DM 0x40000000 /* bit30 Disconnects Mandatory */
-+
-+/*
-+ * le_ops values
-+ */
-+#define LUN_CCINCR 0x01 /* increment command count */
-+#define LUN_CCDECR 0x02 /* decrement command count */
-+#define LUN_ININCR 0x40 /* increment immed. notify count */
-+#define LUN_INDECR 0x80 /* decrement immed. notify count */
-+
-+/*
-+ * le_status values
-+ */
-+#define LUN_OK 0x01 /* we be rockin' */
-+#define LUN_ERR 0x04 /* request completed with error */
-+#define LUN_INVAL 0x06 /* invalid request */
-+#define LUN_NOCAP 0x16 /* can't provide requested capability */
-+#define LUN_ENABLED 0x3E /* LUN already enabled */
-+
-+/*
-+ * Immediate Notify Entry structure
-+ */
-+#define IN_MSGLEN 8 /* 8 bytes */
-+#define IN_RSVDLEN 8 /* 8 words */
-+typedef struct {
-+ isphdr_t in_header;
-+ u_int32_t in_reserved;
-+ u_int8_t in_lun; /* lun */
-+ u_int8_t in_iid; /* initiator */
-+ u_int8_t in_reserved2;
-+ u_int8_t in_tgt; /* target */
-+ u_int32_t in_flags;
-+ u_int8_t in_status;
-+ u_int8_t in_rsvd2;
-+ u_int8_t in_tag_val; /* tag value */
-+ u_int8_t in_tag_type; /* tag type */
-+ u_int16_t in_seqid; /* sequence id */
-+ u_int8_t in_msg[IN_MSGLEN]; /* SCSI message bytes */
-+ u_int16_t in_reserved3[IN_RSVDLEN];
-+ u_int8_t in_sense[QLTM_SENSELEN];/* suggested sense data */
-+} in_entry_t;
-+
-+typedef struct {
-+ isphdr_t in_header;
-+ u_int32_t in_reserved;
-+ u_int8_t in_lun; /* lun */
-+ u_int8_t in_iid; /* initiator */
-+ u_int16_t in_scclun;
-+ u_int32_t in_reserved2;
-+ u_int16_t in_status;
-+ u_int16_t in_task_flags;
-+ u_int16_t in_seqid; /* sequence id */
-+} in_fcentry_t;
-+
-+/*
-+ * Values for the in_status field
-+ */
-+#define IN_REJECT 0x0D /* Message Reject message received */
-+#define IN_RESET 0x0E /* Bus Reset occurred */
-+#define IN_NO_RCAP 0x16 /* requested capability not available */
-+#define IN_IDE_RECEIVED 0x33 /* Initiator Detected Error msg received */
-+#define IN_RSRC_UNAVAIL 0x34 /* resource unavailable */
-+#define IN_MSG_RECEIVED 0x36 /* SCSI message received */
-+#define IN_ABORT_TASK 0x20 /* task named in RX_ID is being aborted (FC) */
-+#define IN_PORT_LOGOUT 0x29 /* port has logged out (FC) */
-+#define IN_PORT_CHANGED 0x2A /* port changed */
-+#define IN_GLOBAL_LOGO 0x2E /* all ports logged out */
-+#define IN_NO_NEXUS 0x3B /* Nexus not established */
-+
-+/*
-+ * Values for the in_task_flags field- should only get one at a time!
-+ */
-+#define TASK_FLAGS_ABORT_TASK (1<<9)
-+#define TASK_FLAGS_CLEAR_TASK_SET (1<<10)
-+#define TASK_FLAGS_TARGET_RESET (1<<13)
-+#define TASK_FLAGS_CLEAR_ACA (1<<14)
-+#define TASK_FLAGS_TERMINATE_TASK (1<<15)
-+
-+#ifndef MSG_ABORT_TAG
-+#define MSG_ABORT_TAG 0x06
-+#endif
-+#ifndef MSG_CLEAR_QUEUE
-+#define MSG_CLEAR_QUEUE 0x0e
-+#endif
-+#ifndef MSG_BUS_DEV_RESET
-+#define MSG_BUS_DEV_RESET 0x0b
-+#endif
-+#ifndef MSG_REL_RECOVERY
-+#define MSG_REL_RECOVERY 0x10
-+#endif
-+#ifndef MSG_TERM_IO_PROC
-+#define MSG_TERM_IO_PROC 0x11
-+#endif
-+
-+
-+/*
-+ * Notify Acknowledge Entry structure
-+ */
-+#define NA_RSVDLEN 22
-+typedef struct {
-+ isphdr_t na_header;
-+ u_int32_t na_reserved;
-+ u_int8_t na_lun; /* lun */
-+ u_int8_t na_iid; /* initiator */
-+ u_int8_t na_reserved2;
-+ u_int8_t na_tgt; /* target */
-+ u_int32_t na_flags;
-+ u_int8_t na_status;
-+ u_int8_t na_event;
-+ u_int16_t na_seqid; /* sequence id */
-+ u_int16_t na_reserved3[NA_RSVDLEN];
-+} na_entry_t;
-+
-+/*
-+ * Value for the na_event field
-+ */
-+#define NA_RST_CLRD 0x80 /* Clear an async event notification */
-+#define NA_OK 0x01 /* Notify Acknowledge Succeeded */
-+#define NA_INVALID 0x06 /* Invalid Notify Acknowledge */
-+
-+#define NA2_RSVDLEN 21
-+typedef struct {
-+ isphdr_t na_header;
-+ u_int32_t na_reserved;
-+ u_int8_t na_lun; /* lun */
-+ u_int8_t na_iid; /* initiator */
-+ u_int16_t na_scclun;
-+ u_int16_t na_flags;
-+ u_int16_t na_reserved2;
-+ u_int16_t na_status;
-+ u_int16_t na_task_flags;
-+ u_int16_t na_seqid; /* sequence id */
-+ u_int16_t na_reserved3[NA2_RSVDLEN];
-+} na_fcentry_t;
-+#define NAFC_RCOUNT 0x80 /* increment resource count */
-+#define NAFC_RST_CLRD 0x20 /* Clear LIP Reset */
-+/*
-+ * Accept Target I/O Entry structure
-+ */
-+#define ATIO_CDBLEN 26
-+
-+typedef struct {
-+ isphdr_t at_header;
-+ u_int16_t at_reserved;
-+ u_int16_t at_handle;
-+ u_int8_t at_lun; /* lun */
-+ u_int8_t at_iid; /* initiator */
-+ u_int8_t at_cdblen; /* cdb length */
-+ u_int8_t at_tgt; /* target */
-+ u_int32_t at_flags;
-+ u_int8_t at_status; /* firmware status */
-+ u_int8_t at_scsi_status; /* scsi status */
-+ u_int8_t at_tag_val; /* tag value */
-+ u_int8_t at_tag_type; /* tag type */
-+ u_int8_t at_cdb[ATIO_CDBLEN]; /* received CDB */
-+ u_int8_t at_sense[QLTM_SENSELEN];/* suggested sense data */
-+} at_entry_t;
-+
-+/*
-+ * at_flags values
-+ */
-+#define AT_NODISC 0x00008000 /* disconnect disabled */
-+#define AT_TQAE 0x00000002 /* Tagged Queue Action enabled */
-+
-+/*
-+ * at_status values
-+ */
-+#define AT_PATH_INVALID 0x07 /* ATIO sent to firmware for disabled lun */
-+#define AT_RESET 0x0E /* SCSI Bus Reset Occurred */
-+#define AT_PHASE_ERROR 0x14 /* Bus phase sequence error */
-+#define AT_NOCAP 0x16 /* Requested capability not available */
-+#define AT_BDR_MSG 0x17 /* Bus Device Reset msg received */
-+#define AT_CDB 0x3D /* CDB received */
-+
-+/*
-+ * Macros to create and fetch and test concatenated handle and tag value macros
-+ */
-+
-+#define AT_MAKE_TAGID(tid, aep) \
-+ tid = ((aep)->at_handle << 16); \
-+ if ((aep)->at_flags & AT_TQAE) \
-+ (tid) |= ((aep)->at_tag_val + 1)
-+
-+#define CT_MAKE_TAGID(tid, ct) \
-+ tid = ((ct)->ct_fwhandle << 16); \
-+ if ((ct)->ct_flags & CT_TQAE) \
-+ (tid) |= ((ct)->ct_tag_val + 1)
-+
-+#define AT_HAS_TAG(val) ((val) & 0xffff)
-+#define AT_GET_TAG(val) AT_HAS_TAG(val) - 1
-+#define AT_GET_HANDLE(val) ((val) >> 16)
-+
-+/*
-+ * Accept Target I/O Entry structure, Type 2
-+ */
-+#define ATIO2_CDBLEN 16
-+
-+typedef struct {
-+ isphdr_t at_header;
-+ u_int32_t at_reserved;
-+ u_int8_t at_lun; /* lun or reserved */
-+ u_int8_t at_iid; /* initiator */
-+ u_int16_t at_rxid; /* response ID */
-+ u_int16_t at_flags;
-+ u_int16_t at_status; /* firmware status */
-+ u_int8_t at_crn; /* command reference number */
-+ u_int8_t at_taskcodes;
-+ u_int8_t at_taskflags;
-+ u_int8_t at_execodes;
-+ u_int8_t at_cdb[ATIO2_CDBLEN]; /* received CDB */
-+ u_int32_t at_datalen; /* allocated data len */
-+ u_int16_t at_scclun; /* SCC Lun or reserved */
-+ u_int16_t at_wwpn[4]; /* WWPN of initiator */
-+ u_int16_t at_reserved2[6];
-+ u_int16_t at_oxid;
-+} at2_entry_t;
-+
-+#define ATIO2_WWPN_OFFSET 0x2A
-+#define ATIO2_OXID_OFFSET 0x3E
-+
-+#define ATIO2_TC_ATTR_MASK 0x7
-+#define ATIO2_TC_ATTR_SIMPLEQ 0
-+#define ATIO2_TC_ATTR_HEADOFQ 1
-+#define ATIO2_TC_ATTR_ORDERED 2
-+#define ATIO2_TC_ATTR_ACAQ 4
-+#define ATIO2_TC_ATTR_UNTAGGED 5
-+
-+#define ATIO2_EX_WRITE 0x1
-+#define ATIO2_EX_READ 0x2
-+
-+/*
-+ * Continue Target I/O Entry structure
-+ * Request from driver. The response from the
-+ * ISP firmware is the same except that the last 18
-+ * bytes are overwritten by suggested sense data if
-+ * the 'autosense valid' bit is set in the status byte.
-+ */
-+typedef struct {
-+ isphdr_t ct_header;
-+ u_int16_t ct_reserved;
-+#define ct_syshandle ct_reserved /* we use this */
-+ u_int16_t ct_fwhandle; /* required by f/w */
-+ u_int8_t ct_lun; /* lun */
-+ u_int8_t ct_iid; /* initiator id */
-+ u_int8_t ct_reserved2;
-+ u_int8_t ct_tgt; /* our target id */
-+ u_int32_t ct_flags;
-+ u_int8_t ct_status; /* isp status */
-+ u_int8_t ct_scsi_status; /* scsi status */
-+ u_int8_t ct_tag_val; /* tag value */
-+ u_int8_t ct_tag_type; /* tag type */
-+ u_int32_t ct_xfrlen; /* transfer length */
-+ u_int32_t ct_resid; /* residual length */
-+ u_int16_t ct_timeout;
-+ u_int16_t ct_seg_count;
-+ /*
-+ * This is so we can share tag name space with
-+ * CTIO{2,3,4} with the minimum of pain.
-+ */
-+ union {
-+ ispds_t ct_a[ISP_RQDSEG];
-+ } _u;
-+#define ct_dataseg _u.ct_a
-+} ct_entry_t;
-+
-+/*
-+ * For some of the dual port SCSI adapters, port (bus #) is reported
-+ * in the MSbit of ct_iid. Bit fields are a bit too awkward here.
-+ *
-+ * Note that this does not apply to FC adapters at all which can and
-+ * do report IIDs between 129 && 255 (these represent devices that have
-+ * logged in across a SCSI fabric).
-+ */
-+#define GET_IID_VAL(x) (x & 0x3f)
-+#define GET_BUS_VAL(x) ((x >> 7) & 0x1)
-+#define SET_IID_VAL(y, x) y = ((y & ~0x3f) | (x & 0x3f))
-+#define SET_BUS_VAL(y, x) y = ((y & 0x3f) | ((x & 0x1) << 7))
-+
-+/*
-+ * ct_flags values
-+ */
-+#define CT_TQAE 0x00000002 /* bit 1, Tagged Queue Action enable */
-+#define CT_DATA_IN 0x00000040 /* bits 6&7, Data direction */
-+#define CT_DATA_OUT 0x00000080 /* bits 6&7, Data direction */
-+#define CT_NO_DATA 0x000000C0 /* bits 6&7, Data direction */
-+#define CT_CCINCR 0x00000100 /* bit 8, autoincrement atio count */
-+#define CT_DATAMASK 0x000000C0 /* bits 6&7, Data direction */
-+#define CT_INISYNCWIDE 0x00004000 /* bit 14, Do Sync/Wide Negotiation */
-+#define CT_NODISC 0x00008000 /* bit 15, Disconnects disabled */
-+#define CT_DSDP 0x01000000 /* bit 24, Disable Save Data Pointers */
-+#define CT_SENDRDP 0x04000000 /* bit 26, Send Restore Pointers msg */
-+#define CT_SENDSTATUS 0x80000000 /* bit 31, Send SCSI status byte */
-+
-+/*
-+ * ct_status values
-+ * - set by the firmware when it returns the CTIO
-+ */
-+#define CT_OK 0x01 /* completed without error */
-+#define CT_ABORTED 0x02 /* aborted by host */
-+#define CT_ERR 0x04 /* see sense data for error */
-+#define CT_INVAL 0x06 /* request for disabled lun */
-+#define CT_NOPATH 0x07 /* invalid ITL nexus */
-+#define CT_INVRXID 0x08 /* (FC only) Invalid RX_ID */
-+#define CT_DATA_OVER 0x09 /* (FC only) Data Overrun */
-+#define CT_RSELTMO 0x0A /* reselection timeout after 2 tries */
-+#define CT_TIMEOUT 0x0B /* timed out */
-+#define CT_RESET 0x0E /* SCSI Bus Reset occurred */
-+#define CT_PARITY 0x0F /* Uncorrectable Parity Error */
-+#define CT_BUS_ERROR 0x10 /* (FC Only) DMA PCI Error */
-+#define CT_PANIC 0x13 /* Unrecoverable Error */
-+#define CT_PHASE_ERROR 0x14 /* Bus phase sequence error */
-+#define CT_BDR_MSG 0x17 /* Bus Device Reset msg received */
-+#define CT_DATA_UNDER 0x15 /* (FC only) Data Underrun */
-+#define CT_TERMINATED 0x19 /* due to Terminate Transfer mbox cmd */
-+#define CT_PORTNOTAVAIL 0x28 /* port not available */
-+#define CT_LOGOUT 0x29 /* port logout */
-+#define CT_PORTCHANGED 0x2A /* port changed */
-+#define CT_IDE 0x33 /* Initiator Detected Error */
-+#define CT_NOACK 0x35 /* Outstanding Immed. Notify. entry */
-+
-+/*
-+ * When the firmware returns a CTIO entry, it may overwrite the last
-+ * part of the structure with sense data. This starts at offset 0x2E
-+ * into the entry, which is in the middle of ct_dataseg[1]. Rather
-+ * than define a new struct for this, I'm just using the sense data
-+ * offset.
-+ */
-+#define CTIO_SENSE_OFFSET 0x2E
-+
-+/*
-+ * Entry length in u_longs. All entries are the same size so
-+ * any one will do as the numerator.
-+ */
-+#define UINT32_ENTRY_SIZE (sizeof(at_entry_t)/sizeof(u_int32_t))
-+
-+/*
-+ * QLA2100 CTIO (type 2) entry
-+ */
-+#define MAXRESPLEN 26
-+typedef struct {
-+ isphdr_t ct_header;
-+ u_int16_t ct_reserved;
-+ u_int16_t ct_fwhandle; /* just to match CTIO */
-+ u_int8_t ct_lun; /* lun */
-+ u_int8_t ct_iid; /* initiator id */
-+ u_int16_t ct_rxid; /* response ID */
-+ u_int16_t ct_flags;
-+ u_int16_t ct_status; /* isp status */
-+ u_int16_t ct_timeout;
-+ u_int16_t ct_seg_count;
-+ u_int32_t ct_reloff; /* relative offset */
-+ int32_t ct_resid; /* residual length */
-+ union {
-+ /*
-+ * The three different modes that the target driver
-+ * can set the CTIO{2,3,4} up as.
-+ *
-+ * The first is for sending FCP_DATA_IUs as well as
-+ * (optionally) sending a terminal SCSI status FCP_RSP_IU.
-+ *
-+ * The second is for sending SCSI sense data in an FCP_RSP_IU.
-+ * Note that no FCP_DATA_IUs will be sent.
-+ *
-+ * The third is for sending FCP_RSP_IUs as built specifically
-+ * in system memory as located by the isp_dataseg.
-+ */
-+ struct {
-+ u_int32_t _reserved;
-+ u_int16_t _reserved2;
-+ u_int16_t ct_scsi_status;
-+ u_int32_t ct_xfrlen;
-+ union {
-+ ispds_t ct_a[ISP_RQDSEG_T2]; /* CTIO2 */
-+ ispds64_t ct_b[ISP_RQDSEG_T3]; /* CTIO3 */
-+ ispdslist_t ct_c; /* CTIO4 */
-+ } _u;
-+#define ct_dataseg _u.ct_a
-+#define ct_dataseg64 _u.ct_b
-+#define ct_dslist _u.ct_c
-+ } m0;
-+ struct {
-+ u_int16_t _reserved;
-+ u_int16_t _reserved2;
-+ u_int16_t ct_senselen;
-+ u_int16_t ct_scsi_status;
-+ u_int16_t ct_resplen;
-+ u_int8_t ct_resp[MAXRESPLEN];
-+ } m1;
-+ struct {
-+ u_int32_t _reserved;
-+ u_int16_t _reserved2;
-+ u_int16_t _reserved3;
-+ u_int32_t ct_datalen;
-+ ispds_t ct_fcp_rsp_iudata;
-+ } m2;
-+ /*
-+ * CTIO2 returned from F/W...
-+ */
-+ struct {
-+ u_int32_t _reserved[4];
-+ u_int16_t ct_scsi_status;
-+ u_int8_t ct_sense[QLTM_SENSELEN];
-+ } fw;
-+ } rsp;
-+} ct2_entry_t;
-+
-+/*
-+ * ct_flags values for CTIO2
-+ */
-+#define CT2_FLAG_MMASK 0x0003
-+#define CT2_FLAG_MODE0 0x0000
-+#define CT2_FLAG_MODE1 0x0001
-+#define CT2_FLAG_MODE2 0x0002
-+#define CT2_DATA_IN CT_DATA_IN
-+#define CT2_DATA_OUT CT_DATA_OUT
-+#define CT2_NO_DATA CT_NO_DATA
-+#define CT2_DATAMASK CT_DATAMASK
-+#define CT2_CCINCR 0x0100
-+#define CT2_FASTPOST 0x0200
-+#define CT2_TERMINATE 0x4000
-+#define CT2_SENDSTATUS 0x8000
-+
-+/*
-+ * ct_status values are (mostly) the same as that for ct_entry.
-+ */
-+
-+/*
-+ * ct_scsi_status values- the low 8 bits are the normal SCSI status
-+ * we know and love. The upper 8 bits are validity markers for FCP_RSP_IU
-+ * fields.
-+ */
-+#define CT2_RSPLEN_VALID 0x0100
-+#define CT2_SNSLEN_VALID 0x0200
-+#define CT2_DATA_OVER 0x0400
-+#define CT2_DATA_UNDER 0x0800
-+
-+/*
-+ * Debug macros
-+ */
-+
-+#define ISP_TDQE(isp, msg, idx, arg) \
-+ if (isp->isp_dblev & ISP_LOGTDEBUG2) isp_print_qentry(isp, msg, idx, arg)
-+
-+#ifdef ISP_TARGET_FUNCTIONS
-+/*
-+ * The functions below are for the publicly available
-+ * target mode functions that are internal to the Qlogic driver.
-+ */
-+
-+/*
-+ * This function handles new response queue entry appropriate for target mode.
-+ */
-+int isp_target_notify(struct ispsoftc *, void *, u_int16_t *);
-+
-+/*
-+ * Enable/Disable/Modify a logical unit.
-+ * (softc, cmd, bus, tgt, lun, cmd_cnt, inotify_cnt, opaque)
-+ */
-+#define DFLT_CMND_CNT 0xfe /* unmonitored */
-+#define DFLT_INOT_CNT 16
-+int isp_lun_cmd(struct ispsoftc *, int, int, int, int, int, int, u_int32_t);
-+
-+/*
-+ * General request queue 'put' routine for target mode entries.
-+ */
-+int isp_target_put_entry(struct ispsoftc *isp, void *);
-+
-+/*
-+ * General routine to put back an ATIO entry-
-+ * used for replenishing f/w resource counts.
-+ * The argument is a pointer to a source ATIO
-+ * or ATIO2.
-+ */
-+int isp_target_put_atio(struct ispsoftc *, void *);
-+
-+/*
-+ * General routine to send a final CTIO for a command- used mostly for
-+ * local responses.
-+ */
-+int isp_endcmd(struct ispsoftc *, void *, u_int32_t, u_int16_t);
-+#define ECMD_SVALID 0x100
-+
-+/*
-+ * Handle an asynchronous event
-+ *
-+ * Return nonzero if the interrupt that generated this event has been dismissed.
-+ */
-+
-+int isp_target_async(struct ispsoftc *, int, int);
-+#endif
-+#endif /* _ISP_TARGET_H */
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/scsi/isp/isp_tpublic.h 2003-07-19 17:06:33.000000000 -0700
-@@ -0,0 +1,396 @@
-+/* @(#)isp_tpublic.h 1.11 */
-+/*
-+ * Qlogic ISP Host Adapter Public Target Interface Structures && Routines
-+ *---------------------------------------
-+ * Copyright (c) 2000, 2001, 2002, 2003 by Matthew Jacob
-+ * All rights reserved.
-+ *
-+ * Redistribution and use in source and binary forms, with or without
-+ * modification, are permitted provided that the following conditions
-+ * are met:
-+ * 1. Redistributions of source code must retain the above copyright
-+ * notice, this list of conditions, and the following disclaimer,
-+ * without modification, immediately at the beginning of the file.
-+ * 2. The name of the author may not be used to endorse or promote products
-+ * derived from this software without specific prior written permission.
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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)
-+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-+ * SUCH DAMAGE.
-+ *
-+ * Matthew Jacob
-+ * Feral Software
-+ * mjacob@feral.com
-+ */
-+
-+/*
-+ * Required software target mode message and event handling structures.
-+ *
-+ * The message and event structures are used by the MI layer
-+ * to propagate messages and events upstream.
-+ */
-+
-+#ifndef IN_MSGLEN
-+#define IN_MSGLEN 8
-+#endif
-+typedef struct {
-+ void * nt_hba; /* HBA tag */
-+ u_int64_t nt_iid; /* inititator id */
-+ u_int64_t nt_tgt; /* target id */
-+ u_int64_t nt_lun; /* logical unit */
-+ u_int32_t nt_tagval; /* tag value */
-+ u_int8_t nt_bus; /* bus */
-+ u_int8_t nt_tagtype; /* tag type */
-+ u_int8_t nt_msg[IN_MSGLEN]; /* message content */
-+} tmd_msg_t;
-+
-+typedef struct {
-+ void * ev_hba; /* HBA tag */
-+ u_int32_t ev_bus; /* bus */
-+ u_int32_t ev_event; /* type of async event */
-+} tmd_event_t;
-+
-+/*
-+ * Suggested Software Target Mode Command Handling structure.
-+ *
-+ * A note about terminology:
-+ *
-+ * MD stands for "Machine Dependent".
-+ *
-+ * This driver is structured in three layers: Outer MD, core, and inner MD.
-+ * The latter also is bus dependent (i.e., is cognizant of PCI bus issues
-+ * as well as platform issues).
-+ *
-+ *
-+ * "Outer Layer" means "Other Module"
-+ *
-+ * Some additional module that actually implements SCSI target command
-+ * policy is the recipient of incoming commands and the source of the
-+ * disposition for them.
-+ *
-+ * The command structure below is one suggested possible MD command structure,
-+ * but since the handling of thbis is entirely in the MD layer, there is
-+ * no explicit or implicit requirement that it be used.
-+ *
-+ * The cd_private tag should be used by the MD layer to keep a free list
-+ * of these structures. Code outside of this driver can then use this
-+ * to identify it's own unit structures. That is, when not on the MD
-+ * layer's freelist, the MD layer should shove into it the identifier
-+ * that the outer layer has for it- passed in on an initial QIN_HBA_REG
-+ * call (see below).
-+ *
-+ * The cd_hba tag is a tag that uniquely identifies the HBA this target
-+ * mode command is coming from. The outer layer has to pass this back
-+ * unchanged to avoid chaos.
-+ *
-+ * The cd_iid, cd_tgt, cd_lun and cd_bus tags are used to identify the
-+ * id of the initiator who sent us a command, the target claim to be, the
-+ * lun on the target we claim to be, and the bus instance (for multiple
-+ * bus host adapters) that this applies to (consider it an extra Port
-+ * parameter). The iid, tgt and lun values are deliberately chosen to be
-+ * fat so that, for example, World Wide Names can be used instead of
-+ * the units that the Qlogic firmware uses (in the case where the MD
-+ * layer maintains a port database, for example).
-+ *
-+ * The cd_tagtype field specifies what kind of command tag has been
-+ * sent with the command. The cd_tagval is the tag's value (low 16
-+ * bits). It also contains (in the upper 16 bits) any command handle.
-+ *
-+ *
-+ * N.B.: when the MD layer sends this command to outside software
-+ * the outside software likely *MUST* return the same cd_tagval that
-+ * was in place because this value is likely what the Qlogic f/w uses
-+ * to identify a command.
-+ *
-+ * The cd_cdb contains storage for the passed in command descriptor block.
-+ * This is the maximum size we can get out of the Qlogic f/w. There's no
-+ * passed in length because whoever decodes the command to act upon it
-+ * will know what the appropriate length is.
-+ *
-+ * The tag cd_lflags are the flags set by the MD driver when it gets
-+ * command incoming or when it needs to inform any outside entities
-+ * that the last requested action failed.
-+ *
-+ * The tag cd_hflags should be set by any outside software to indicate
-+ * the validity of sense and status fields (defined below) and to indicate
-+ * the direction data is expected to move. It is an error to have both
-+ * CDFH_DATA_IN and CDFH_DATA_OUT set.
-+ *
-+ * If the CDFH_STSVALID flag is set, the command should be completed (after
-+ * sending any data and/or status). If CDFH_SNSVALID is set and the MD layer
-+ * can also handle sending the associated sense data (either back with an
-+ * FCP RESPONSE IU for Fibre Channel or otherwise automatically handling a
-+ * REQUEST SENSE from the initator for this target/lun), the MD layer will
-+ * set the CDFL_SENTSENSE flag on successful transmission of the sense data.
-+ * It is an error for the CDFH_SNSVALID bit to be set and CDFH_STSVALID not
-+ * to be set. It is an error for the CDFH_SNSVALID be set and the associated
-+ * SCSI status (cd_scsi_status) not be set to CHECK CONDITON.
-+ *
-+ * The tag cd_data points to a data segment to either be filled or
-+ * read from depending on the direction of data movement. The tag
-+ * is undefined if no data direction is set. The MD layer and outer
-+ * layers must agree on the meaning of cd_data.
-+ *
-+ * The tag cd_totlen is the total data amount expected to be moved
-+ * over the life of the command. It *may* be set by the MD layer, possibly
-+ * from the datalen field of an FCP CMND IU unit. If it shows up in the outer
-+ * layers set to zero and the CDB indicates data should be moved, the outer
-+ * layer should set it to the amount expected to be moved.
-+ *
-+ * The tag cd_resid should be the total residual of data not transferred.
-+ * The outer layers need to set this at the begining of command processing
-+ * to equal cd_totlen. As data is successfully moved, this value is decreased.
-+ * At the end of a command, any nonzero residual indicates the number of bytes
-+ * requested but not moved. XXXXXXXXXXXXXXXXXXXXXXX TOO VAGUE!!!
-+ *
-+ * The tag cd_xfrlen is the length of the currently active data transfer.
-+ * This allows several interations between any outside software and the
-+ * MD layer to move data.
-+ *
-+ * The reason that total length and total residual have to be tracked
-+ * is that fibre channel FCP DATA IU units have to have a relative
-+ * offset field.
-+ *
-+ * N.B.: there is no necessary 1-to-1 correspondence between any one
-+ * data transfer segment and the number of CTIOs that will be generated
-+ * satisfy the current data transfer segment. It's not also possible to
-+ * predict how big a transfer can be before it will be 'too big'. Be
-+ * reasonable- a 64KB transfer is 'reasonable'. A 1MB transfer may not
-+ * be. A 32MB transfer is unreasonable. The problem here has to do with
-+ * how CTIOs can be used to map passed data pointers. In systems which
-+ * have page based scatter-gather requirements, each PAGESIZEd chunk will
-+ * consume one data segment descriptor- you get 3 or 4 of them per CTIO.
-+ * The size of the REQUEST QUEUE you drop a CTIO onto is finite (typically
-+ * it's 256, but on some systems it's even smaller, and note you have to
-+ * sure this queue with the initiator side of this driver).
-+ *
-+ * The tags cd_sense and cd_scsi_status are pretty obvious.
-+ *
-+ * The tag cd_error is to communicate between the MD layer and outer software
-+ * the current error conditions.
-+ *
-+ * The tag cd_lreserved, cd_hreserved are scratch areas for use for the MD
-+ * and outer layers respectively.
-+ *
-+ */
-+
-+#ifndef TMD_CDBLEN
-+#define TMD_CDBLEN 18 /* 16 bytes, plus pad for alignment */
-+#endif
-+#ifndef QLTM_SENSELEN
-+#define QLTM_SENSELEN 18
-+#endif
-+#ifndef QCDS
-+#define QCDS 8
-+#endif
-+
-+typedef struct tmd_cmd {
-+ void * cd_private; /* private data pointer */
-+ void * cd_hba; /* HBA tag */
-+ void * cd_data; /* 'pointer' to data */
-+ u_int64_t cd_iid; /* initiator ID */
-+ u_int64_t cd_tgt; /* target id */
-+ u_int64_t cd_lun; /* logical unit */
-+ u_int32_t cd_tagval; /* tag value */
-+ u_int32_t cd_lflags; /* flags lower level sets */
-+ u_int32_t cd_hflags; /* flags higher level sets */
-+ u_int32_t cd_totlen; /* total data requirement */
-+ u_int32_t cd_resid; /* total data residual */
-+ u_int32_t cd_xfrlen; /* current data requirement */
-+ int32_t cd_error; /* current error */
-+ u_int16_t cd_scsi_status; /* closing SCSI status */
-+ u_int8_t cd_chan; /* channel on card */
-+ u_int8_t cd_tagtype; /* tag type */
-+ u_int8_t cd_sense[QLTM_SENSELEN];
-+ u_int8_t cd_cdb[TMD_CDBLEN]; /* Command */
-+ union {
-+ void * ptrs[QCDS / sizeof (void *)];
-+ u_int64_t llongs[QCDS / sizeof (u_int64_t)];
-+ u_int32_t longs[QCDS / sizeof (u_int32_t)];
-+ u_int16_t shorts[QCDS / sizeof (u_int16_t)];
-+ u_int8_t bytes[QCDS];
-+ } cd_lreserved[2], cd_hreserved[2];
-+} tmd_cmd_t;
-+
-+#ifndef TMD_SIZE
-+#define TMD_SIZE (sizeof (tmd_cmd_t))
-+#endif
-+
-+/*
-+ * Note that NODISC (obviously) doesn't apply to non-SPI transport.
-+ *
-+ * Note that knowing the data direction and lengh at the time of receipt of
-+ * a command from the initiator is a feature only of Fibre Channel.
-+ *
-+ * The CDFL_BIDIR is in anticipation of the adoption of some newer
-+ * features required by OSD.
-+ *
-+ * The principle selector for MD layer to know whether data is to
-+ * be transferred in any QOUT_TMD_CONT call is cd_xfrlen- the
-+ * flags CDFH_DATA_IN and CDFH_DATA_OUT define which direction.
-+ */
-+#define CDFL_SNSVALID 0x01 /* sense data (from f/w) good */
-+#define CDFL_SENTSTATUS 0x02 /* last action sent status */
-+#define CDFL_DATA_IN 0x04 /* target (us) -> initiator (them) */
-+#define CDFL_DATA_OUT 0x08 /* initiator (them) -> target (us) */
-+#define CDFL_BIDIR 0x0C /* bidirectional data */
-+#define CDFL_ERROR 0x10 /* last action ended in error */
-+#define CDFL_NODISC 0x20 /* disconnects disabled */
-+#define CDFL_SENTSENSE 0x40 /* last action sent sense data */
-+#define CDFL_BUSY 0x80 /* this command is not on a free list */
-+#define CDFL_PRIVATE 0xFF000000 /* private layer flags */
-+
-+#define CDFH_SNSVALID 0x01 /* sense data (from outer layer) good */
-+#define CDFH_STSVALID 0x02 /* status valid */
-+#define CDFH_DATA_IN 0x04 /* target (us) -> initiator (them) */
-+#define CDFH_DATA_OUT 0x08 /* initiator (them) -> target (us) */
-+#define CDFH_DATA_MASK 0x0C /* mask to cover data direction */
-+#define CDFH_PRIVATE 0xFF000000 /* private layer flags */
-+
-+
-+/*
-+ * Action codes set by the Qlogic MD target driver for
-+ * the external layer to figure out what to do with.
-+ */
-+typedef enum {
-+ QOUT_HBA_REG=0, /* the argument is a pointer to a hba_register_t */
-+ QOUT_ENABLE, /* the argument is a pointer to a enadis_t */
-+ QOUT_DISABLE, /* the argument is a pointer to a enadis_t */
-+ QOUT_TMD_START, /* the argument is a pointer to a tmd_cmd_t */
-+ QOUT_TMD_DONE, /* the argument is a pointer to a tmd_cmd_t */
-+ QOUT_TEVENT, /* the argument is a pointer to a tmd_event_t */
-+ QOUT_TMSG, /* the argument is a pointer to a tmd_msg_t */
-+ QOUT_IOCTL, /* the argument is a pointer to a ioctl_cmd_t */
-+ QOUT_HBA_UNREG /* the argument is a pointer to a hba_register_t */
-+} tact_e;
-+
-+/*
-+ * Action codes set by the external layer for the
-+ * MD Qlogic driver to figure out what to do with.
-+ */
-+typedef enum {
-+ QIN_HBA_REG=99, /* the argument is a pointer to a hba_register_t */
-+ QIN_ENABLE, /* the argument is a pointer to a enadis_t */
-+ QIN_DISABLE, /* the argument is a pointer to a enadis_t */
-+ QIN_TMD_CONT, /* the argument is a pointer to a tmd_cmd_t */
-+ QIN_TMD_FIN, /* the argument is a pointer to a tmd_cmd_t */
-+ QIN_IOCTL, /* the argument is a pointer to a ioctl_cmd_t */
-+ QIN_HBA_UNREG, /* the argument is a pointer to a hba_register_t */
-+} qact_e;
-+
-+
-+/*
-+ * A word about the START/CONT/DONE/FIN dance:
-+ *
-+ * When the HBA is enabled for receiving commands, one may show up
-+ * without notice. When that happens, the Qlogic target mode driver
-+ * gets a tmd_cmd_t, fills it with the info that just arrived, and
-+ * calls the outer layer with a QOUT_TMD_START code and pointer to
-+ * the tmd_cmd_t.
-+ *
-+ * The outer layer decodes the command, fetches data, prepares stuff,
-+ * whatever, and starts by passing back the pointer with a QIN_TMD_CONT
-+ * code which causes the Qlogic target mode driver to generate CTIOs to
-+ * satisfy whatever action needs to be taken. When those CTIOs complete,
-+ * the Qlogic target driver sends the pointer to the cmd_tmd_t back with
-+ * a QOUT_TMD_DONE code. This repeats for as long as necessary.
-+ *
-+ * The outer layer signals it wants to end the command by settings within
-+ * the tmd_cmd_t itself. When the final QIN_TMD_CONT is reported completed,
-+ * the outer layer frees the tmd_cmd_t by sending the pointer to it
-+ * back with a QIN_TMD_FIN code.
-+ *
-+ * The graph looks like:
-+ *
-+ * QOUT_TMD_START -> [ QIN_TMD_CONT -> QOUT_TMD_DONE ] * -> QIN_TMD_FIN.
-+ *
-+ */
-+
-+/*
-+ * A word about ENABLE/DISABLE: the argument is a pointer to a enadis_t
-+ * with cd_hba, cd_iid, cd_chan, cd_tgt and cd_lun filled out.
-+ *
-+ * If an error occurs in either enabling or disabling the described lun
-+ * cd_error is set with an appropriate non-zero value.
-+ *
-+ * Logical unit zero must be the first enabled and the last disabled.
-+ */
-+typedef struct {
-+ void * cd_private; /* for outer layer usage */
-+ void * cd_hba; /* HBA tag */
-+ u_int64_t cd_iid; /* initiator ID */
-+ u_int64_t cd_tgt; /* target id */
-+ u_int64_t cd_lun; /* logical unit */
-+ u_int8_t cd_chan; /* channel on card */
-+ int32_t cd_error;
-+} enadis_t;
-+
-+/*
-+ * This structure is used to register to other software modules the
-+ * binding of an HBA identifier, driver name and instance and the
-+ * lun width capapbilities of this target driver. It's up to each
-+ * platform to figure out how it wants to do this, but a typical
-+ * sequence would be for the MD layer to find some external module's
-+ * entry point and start by sending a QOUT_HBA_REG with info filled
-+ * in, and the external module to call back with a QIN_HBA_REG that
-+ * passes back the corresponding information.
-+ */
-+#define QR_VERSION 1
-+typedef struct {
-+ void * r_identity;
-+ void (*r_action)(qact_e, void *);
-+ char r_name[8];
-+ int r_inst;
-+ int r_version;
-+ enum { R_FC, R_SCSI } r_type;
-+} hba_register_t;
-+
-+/*
-+ * This structure is used to pass an encapsulated ioctl through to the
-+ * MD layer. In many implementations it's often convenient to open just
-+ * one device, but actions you want to take need to be taken on the
-+ * underlying HBA. Rather than invent a separate protocol for each action,
-+ * an ioctl passthrough seems simpler.
-+ *
-+ * In order to avoid cross domain copy problems, though, the caller will
-+ * be responsible for allocating and providing a staging area for all ioctl
-+ * related data. This, unavoidably, requires some ioctl decode capability
-+ * in the outer layer code.`
-+ *
-+ * And also, albeit being cheesy, we'll define a few internal ioctls here.
-+ */
-+typedef struct {
-+ void * i_identity; /* HBA tag */
-+ void * i_syncptr; /* synchronization pointer */
-+ int i_cmd; /* ioctl command */
-+ void * i_arg; /* ioctl argument area */
-+ int i_errno; /* ioctl error return */
-+} ioctl_cmd_t;
-+
-+#define QI_IOC ('Q' << 8)
-+#define QI_SCSI_TINI QI_IOC|0
-+#define QI_SCSI_CMD QI_IOC|1
-+#define QI_WWPN_XLT QI_IOC|2
-+
-+/*
-+ * Target handler functions.
-+ *
-+ * The MD target handler function (the outer layer calls this)
-+ * should be be prototyped like:
-+ *
-+ * void target_action(qact_e, void *arg)
-+ *
-+ * The outer layer target handler function (the MD layer calls this)
-+ * should be be prototyped like:
-+ *
-+ * void system_target_handler(tact_e, void *arg)
-+ */
-+
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/scsi/isp/ispvar.h 2003-07-19 17:06:33.000000000 -0700
-@@ -0,0 +1,902 @@
-+/* @(#)ispvar.h 1.44 */
-+/*
-+ * Soft Definitions for for Qlogic ISP SCSI adapters.
-+ *
-+ * Copyright (c) 1997, 1998, 1999, 2000 by Matthew Jacob
-+ * All rights reserved.
-+ *
-+ * Redistribution and use in source and binary forms, with or without
-+ * modification, are permitted provided that the following conditions
-+ * are met:
-+ * 1. Redistributions of source code must retain the above copyright
-+ * notice immediately at the beginning of the file, without modification,
-+ * this list of conditions, and the following disclaimer.
-+ * 2. The name of the author may not be used to endorse or promote products
-+ * derived from this software without specific prior written permission.
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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)
-+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-+ * SUCH DAMAGE.
-+ *
-+ */
-+
-+#ifndef _ISPVAR_H
-+#define _ISPVAR_H
-+
-+#if defined(__NetBSD__) || defined(__OpenBSD__)
-+#include <dev/ic/ispmbox.h>
-+#ifdef ISP_TARGET_MODE
-+#include <dev/ic/isp_target.h>
-+#include <dev/ic/isp_tpublic.h>
-+#endif
-+#endif
-+#ifdef __FreeBSD__
-+#include <dev/isp/ispmbox.h>
-+#ifdef ISP_TARGET_MODE
-+#include <dev/isp/isp_target.h>
-+#include <dev/isp/isp_tpublic.h>
-+#endif
-+#endif
-+#ifdef __linux__
-+#include "ispmbox.h"
-+#ifdef ISP_TARGET_MODE
-+#include "isp_target.h"
-+#include "isp_tpublic.h"
-+#endif
-+#endif
-+
-+#define ISP_CORE_VERSION_MAJOR 2
-+#define ISP_CORE_VERSION_MINOR 7
-+
-+/*
-+ * Vector for bus specific code to provide specific services.
-+ */
-+struct ispsoftc;
-+struct ispmdvec {
-+ int (*dv_rd_isr)
-+ (struct ispsoftc *, u_int16_t *, u_int16_t *, u_int16_t *);
-+ u_int16_t (*dv_rd_reg) (struct ispsoftc *, int);
-+ void (*dv_wr_reg) (struct ispsoftc *, int, u_int16_t);
-+ int (*dv_mbxdma) (struct ispsoftc *);
-+ int (*dv_dmaset) (struct ispsoftc *,
-+ XS_T *, ispreq_t *, u_int16_t *, u_int16_t);
-+ void (*dv_dmaclr)
-+ (struct ispsoftc *, XS_T *, u_int16_t);
-+ void (*dv_reset0) (struct ispsoftc *);
-+ void (*dv_reset1) (struct ispsoftc *);
-+ void (*dv_dregs) (struct ispsoftc *, const char *);
-+ u_int16_t *dv_ispfw; /* ptr to f/w */
-+ u_int16_t dv_conf1;
-+ u_int16_t dv_clock; /* clock frequency */
-+};
-+
-+/*
-+ * Overall parameters
-+ */
-+#define MAX_TARGETS 16
-+#define MAX_FC_TARG 256
-+#define ISP_MAX_TARGETS(isp) (IS_FC(isp)? MAX_FC_TARG : MAX_TARGETS)
-+#define ISP_MAX_LUNS(isp) (isp)->isp_maxluns
-+
-+/*
-+ * 'Types'
-+ */
-+#ifdef ISP_DAC_SUPPORTED
-+typedef u_int64_t isp_dma_addr_t;
-+#else
-+typedef u_int32_t isp_dma_addr_t;
-+#endif
-+
-+/*
-+ * Macros to access ISP registers through bus specific layers-
-+ * mostly wrappers to vector through the mdvec structure.
-+ */
-+#define ISP_READ_ISR(isp, isrp, semap, mbox0p) \
-+ (*(isp)->isp_mdvec->dv_rd_isr)(isp, isrp, semap, mbox0p)
-+
-+#define ISP_READ(isp, reg) \
-+ (*(isp)->isp_mdvec->dv_rd_reg)((isp), (reg))
-+
-+#define ISP_WRITE(isp, reg, val) \
-+ (*(isp)->isp_mdvec->dv_wr_reg)((isp), (reg), (val))
-+
-+#define ISP_MBOXDMASETUP(isp) \
-+ (*(isp)->isp_mdvec->dv_mbxdma)((isp))
-+
-+#define ISP_DMASETUP(isp, xs, req, iptrp, optr) \
-+ (*(isp)->isp_mdvec->dv_dmaset)((isp), (xs), (req), (iptrp), (optr))
-+
-+#define ISP_DMAFREE(isp, xs, hndl) \
-+ if ((isp)->isp_mdvec->dv_dmaclr) \
-+ (*(isp)->isp_mdvec->dv_dmaclr)((isp), (xs), (hndl))
-+
-+#define ISP_RESET0(isp) \
-+ if ((isp)->isp_mdvec->dv_reset0) (*(isp)->isp_mdvec->dv_reset0)((isp))
-+#define ISP_RESET1(isp) \
-+ if ((isp)->isp_mdvec->dv_reset1) (*(isp)->isp_mdvec->dv_reset1)((isp))
-+#define ISP_DUMPREGS(isp, m) \
-+ if ((isp)->isp_mdvec->dv_dregs) (*(isp)->isp_mdvec->dv_dregs)((isp),(m))
-+
-+#define ISP_SETBITS(isp, reg, val) \
-+ (*(isp)->isp_mdvec->dv_wr_reg)((isp), (reg), ISP_READ((isp), (reg)) | (val))
-+
-+#define ISP_CLRBITS(isp, reg, val) \
-+ (*(isp)->isp_mdvec->dv_wr_reg)((isp), (reg), ISP_READ((isp), (reg)) & ~(val))
-+
-+/*
-+ * The MEMORYBARRIER macro is defined per platform (to provide synchronization
-+ * on Request and Response Queues, Scratch DMA areas, and Registers)
-+ *
-+ * Defined Memory Barrier Synchronization Types
-+ */
-+#define SYNC_REQUEST 0 /* request queue synchronization */
-+#define SYNC_RESULT 1 /* result queue synchronization */
-+#define SYNC_SFORDEV 2 /* scratch, sync for ISP */
-+#define SYNC_SFORCPU 3 /* scratch, sync for CPU */
-+#define SYNC_REG 4 /* for registers */
-+
-+/*
-+ * Request/Response Queue defines and macros.
-+ * The maximum is defined per platform (and can be based on board type).
-+ */
-+/* This is the size of a queue entry (request and response) */
-+#define QENTRY_LEN 64
-+/* Both request and result queue length must be a power of two */
-+#define RQUEST_QUEUE_LEN(x) MAXISPREQUEST(x)
-+#ifdef ISP_TARGET_MODE
-+#define RESULT_QUEUE_LEN(x) MAXISPREQUEST(x)
-+#else
-+#define RESULT_QUEUE_LEN(x) \
-+ (((MAXISPREQUEST(x) >> 2) < 64)? 64 : MAXISPREQUEST(x) >> 2)
-+#endif
-+#define ISP_QUEUE_ENTRY(q, idx) ((q) + ((idx) * QENTRY_LEN))
-+#define ISP_QUEUE_SIZE(n) ((n) * QENTRY_LEN)
-+#define ISP_NXT_QENTRY(idx, qlen) (((idx) + 1) & ((qlen)-1))
-+#define ISP_QFREE(in, out, qlen) \
-+ ((in == out)? (qlen - 1) : ((in > out)? \
-+ ((qlen - 1) - (in - out)) : (out - in - 1)))
-+#define ISP_QAVAIL(isp) \
-+ ISP_QFREE(isp->isp_reqidx, isp->isp_reqodx, RQUEST_QUEUE_LEN(isp))
-+
-+#define ISP_ADD_REQUEST(isp, nxti) \
-+ MEMORYBARRIER(isp, SYNC_REQUEST, isp->isp_reqidx, QENTRY_LEN); \
-+ WRITE_REQUEST_QUEUE_IN_POINTER(isp, nxti); \
-+ isp->isp_reqidx = nxti
-+
-+/*
-+ * SCSI Specific Host Adapter Parameters- per bus, per target
-+ */
-+
-+typedef struct {
-+ u_int isp_gotdparms : 1,
-+ isp_req_ack_active_neg : 1,
-+ isp_data_line_active_neg: 1,
-+ isp_cmd_dma_burst_enable: 1,
-+ isp_data_dma_burst_enabl: 1,
-+ isp_fifo_threshold : 3,
-+ isp_ultramode : 1,
-+ isp_diffmode : 1,
-+ isp_lvdmode : 1,
-+ isp_fast_mttr : 1, /* fast sram */
-+ isp_initiator_id : 4,
-+ isp_async_data_setup : 4;
-+ u_int16_t isp_selection_timeout;
-+ u_int16_t isp_max_queue_depth;
-+ u_int8_t isp_tag_aging;
-+ u_int8_t isp_bus_reset_delay;
-+ u_int8_t isp_retry_count;
-+ u_int8_t isp_retry_delay;
-+ struct {
-+ u_int32_t
-+ exc_throttle : 8,
-+ : 1,
-+ dev_enable : 1, /* ignored */
-+ dev_update : 1,
-+ dev_refresh : 1,
-+ actv_offset : 4,
-+ goal_offset : 4,
-+ nvrm_offset : 4;
-+ u_int8_t actv_period; /* current sync period */
-+ u_int8_t goal_period; /* goal sync period */
-+ u_int8_t nvrm_period; /* nvram sync period */
-+ u_int16_t actv_flags; /* current device flags */
-+ u_int16_t goal_flags; /* goal device flags */
-+ u_int16_t nvrm_flags; /* nvram device flags */
-+ } isp_devparam[MAX_TARGETS];
-+} sdparam;
-+
-+/*
-+ * Device Flags
-+ */
-+#define DPARM_DISC 0x8000
-+#define DPARM_PARITY 0x4000
-+#define DPARM_WIDE 0x2000
-+#define DPARM_SYNC 0x1000
-+#define DPARM_TQING 0x0800
-+#define DPARM_ARQ 0x0400
-+#define DPARM_QFRZ 0x0200
-+#define DPARM_RENEG 0x0100
-+#define DPARM_NARROW 0x0080
-+#define DPARM_ASYNC 0x0040
-+#define DPARM_PPR 0x0020
-+#define DPARM_DEFAULT (0xFF00 & ~DPARM_QFRZ)
-+#define DPARM_SAFE_DFLT (DPARM_DEFAULT & ~(DPARM_WIDE|DPARM_SYNC|DPARM_TQING))
-+
-+
-+/* technically, not really correct, as they need to be rated based upon clock */
-+#define ISP_80M_SYNCPARMS 0x0c09
-+#define ISP_40M_SYNCPARMS 0x0c0a
-+#define ISP_20M_SYNCPARMS 0x0c0c
-+#define ISP_20M_SYNCPARMS_1040 0x080c
-+#define ISP_10M_SYNCPARMS 0x0c19
-+#define ISP_08M_SYNCPARMS 0x0c25
-+#define ISP_05M_SYNCPARMS 0x0c32
-+#define ISP_04M_SYNCPARMS 0x0c41
-+
-+/*
-+ * Fibre Channel Specifics
-+ */
-+#define FL_PORT_ID 0x7e /* FL_Port Special ID */
-+#define FC_PORT_ID 0x7f /* Fabric Controller Special ID */
-+#define FC_SNS_ID 0x80 /* SNS Server Special ID */
-+
-+/* #define ISP_USE_GA_NXT 1 */ /* Use GA_NXT with switches */
-+#ifndef GA_NXT_MAX
-+#define GA_NXT_MAX 256
-+#endif
-+
-+typedef struct {
-+ u_int32_t isp_fwoptions : 16,
-+ isp_gbspeed : 2,
-+ isp_iid_set : 1,
-+ loop_seen_once : 1,
-+ isp_loopstate : 4, /* Current Loop State */
-+ isp_fwstate : 3, /* ISP F/W state */
-+ isp_gotdparms : 1,
-+ isp_topo : 3,
-+ isp_onfabric : 1;
-+ u_int8_t isp_iid; /* 'initiator' id */
-+ u_int8_t isp_loopid; /* hard loop id */
-+ u_int8_t isp_alpa; /* ALPA */
-+ u_int32_t isp_portid;
-+ volatile u_int16_t isp_lipseq; /* LIP sequence # */
-+ u_int16_t isp_fwattr; /* firmware attributes */
-+ u_int8_t isp_execthrottle;
-+ u_int8_t isp_retry_delay;
-+ u_int8_t isp_retry_count;
-+ u_int8_t isp_reserved;
-+ u_int16_t isp_maxalloc;
-+ u_int16_t isp_maxfrmlen;
-+ u_int64_t isp_nodewwn;
-+ u_int64_t isp_portwwn;
-+ /*
-+ * Port Data Base. This is indexed by 'target', which is invariate.
-+ * However, elements within can move around due to loop changes,
-+ * so the actual loop ID passed to the F/W is in this structure.
-+ * The first time the loop is seen up, loopid will match the index
-+ * (except for fabric nodes which are above mapped above FC_SNS_ID
-+ * and are completely virtual), but subsequent LIPs can cause things
-+ * to move around.
-+ */
-+ struct lportdb {
-+ u_int32_t
-+ port_type : 8,
-+ loopid : 8,
-+ fc4_type : 4,
-+ last_fabric_dev : 1,
-+ : 2,
-+ relogin : 1,
-+ force_logout : 1,
-+ was_fabric_dev : 1,
-+ fabric_dev : 1,
-+ loggedin : 1,
-+ roles : 2,
-+ valid : 1;
-+ u_int32_t portid;
-+ u_int64_t node_wwn;
-+ u_int64_t port_wwn;
-+ } portdb[MAX_FC_TARG], tport[FC_PORT_ID];
-+
-+ /*
-+ * Scratch DMA mapped in area to fetch Port Database stuff, etc.
-+ */
-+ caddr_t isp_scratch;
-+ isp_dma_addr_t isp_scdma;
-+#ifdef ISP_FW_CRASH_DUMP
-+ u_int16_t *isp_dump_data;
-+#endif
-+} fcparam;
-+
-+#define FW_CONFIG_WAIT 0
-+#define FW_WAIT_AL_PA 1
-+#define FW_WAIT_LOGIN 2
-+#define FW_READY 3
-+#define FW_LOSS_OF_SYNC 4
-+#define FW_ERROR 5
-+#define FW_REINIT 6
-+#define FW_NON_PART 7
-+
-+#define LOOP_NIL 0
-+#define LOOP_LIP_RCVD 1
-+#define LOOP_PDB_RCVD 2
-+#define LOOP_SCANNING_FABRIC 3
-+#define LOOP_FSCAN_DONE 4
-+#define LOOP_SCANNING_LOOP 5
-+#define LOOP_LSCAN_DONE 6
-+#define LOOP_SYNCING_PDB 7
-+#define LOOP_READY 8
-+
-+#define TOPO_NL_PORT 0
-+#define TOPO_FL_PORT 1
-+#define TOPO_N_PORT 2
-+#define TOPO_F_PORT 3
-+#define TOPO_PTP_STUB 4
-+
-+/*
-+ * Soft Structure per host adapter
-+ */
-+typedef struct ispsoftc {
-+ /*
-+ * Platform (OS) specific data
-+ */
-+ struct isposinfo isp_osinfo;
-+
-+ /*
-+ * Pointer to bus specific functions and data
-+ */
-+ struct ispmdvec * isp_mdvec;
-+
-+ /*
-+ * (Mostly) nonvolatile state. Board specific parameters
-+ * may contain some volatile state (e.g., current loop state).
-+ */
-+
-+ void * isp_param; /* type specific */
-+ u_int16_t isp_fwrev[3]; /* Loaded F/W revision */
-+ u_int16_t isp_romfw_rev[3]; /* PROM F/W revision */
-+ u_int16_t isp_maxcmds; /* max possible I/O cmds */
-+ u_int8_t isp_type; /* HBA Chip Type */
-+ u_int8_t isp_revision; /* HBA Chip H/W Revision */
-+ u_int32_t isp_maxluns; /* maximum luns supported */
-+
-+ u_int32_t isp_clock : 8, /* input clock */
-+ : 4,
-+ isp_port : 1, /* 23XX only */
-+ isp_failed : 1, /* board failed */
-+ isp_open : 1, /* opened (ioctl) */
-+ isp_touched : 1, /* board ever seen? */
-+ isp_bustype : 1, /* SBus or PCI */
-+ isp_loaded_fw : 1, /* loaded firmware */
-+ isp_role : 2, /* roles supported */
-+ isp_dblev : 12; /* debug log mask */
-+
-+ u_int32_t isp_confopts; /* config options */
-+
-+ u_int16_t isp_rqstinrp; /* register for REQINP */
-+ u_int16_t isp_rqstoutrp; /* register for REQOUTP */
-+ u_int16_t isp_respinrp; /* register for RESINP */
-+ u_int16_t isp_respoutrp; /* register for RESOUTP */
-+
-+ /*
-+ * Instrumentation
-+ */
-+ u_int64_t isp_intcnt; /* total int count */
-+ u_int64_t isp_intbogus; /* spurious int count */
-+ u_int64_t isp_intmboxc; /* mbox completions */
-+ u_int64_t isp_intoasync; /* other async */
-+ u_int64_t isp_rsltccmplt; /* CMDs on result q */
-+ u_int64_t isp_fphccmplt; /* CMDs via fastpost */
-+ u_int16_t isp_rscchiwater;
-+ u_int16_t isp_fpcchiwater;
-+
-+ /*
-+ * Volatile state
-+ */
-+
-+ volatile u_int32_t
-+ isp_obits : 8, /* mailbox command output */
-+ isp_mboxbsy : 1, /* mailbox command active */
-+ isp_state : 3,
-+ isp_sendmarker : 2, /* send a marker entry */
-+ isp_update : 2, /* update parameters */
-+ isp_nactive : 16; /* how many commands active */
-+ volatile u_int16_t isp_reqodx; /* index of last ISP pickup */
-+ volatile u_int16_t isp_reqidx; /* index of next request */
-+ volatile u_int16_t isp_residx; /* index of next result */
-+ volatile u_int16_t isp_resodx; /* index of next result */
-+ volatile u_int16_t isp_rspbsy;
-+ volatile u_int16_t isp_lasthdls; /* last handle seed */
-+ volatile u_int16_t isp_mboxtmp[MAX_MAILBOX];
-+ volatile u_int16_t isp_lastmbxcmd; /* last mbox command sent */
-+ volatile u_int16_t isp_mbxwrk0;
-+ volatile u_int16_t isp_mbxwrk1;
-+ volatile u_int16_t isp_mbxwrk2;
-+ void * isp_mbxworkp;
-+
-+ /*
-+ * Active commands are stored here, indexed by handle functions.
-+ */
-+ XS_T **isp_xflist;
-+
-+ /*
-+ * request/result queue pointers and dma handles for them.
-+ */
-+ caddr_t isp_rquest;
-+ caddr_t isp_result;
-+ isp_dma_addr_t isp_rquest_dma;
-+ isp_dma_addr_t isp_result_dma;
-+} ispsoftc_t;
-+
-+#define SDPARAM(isp) ((sdparam *) (isp)->isp_param)
-+#define FCPARAM(isp) ((fcparam *) (isp)->isp_param)
-+
-+/*
-+ * ISP Driver Run States
-+ */
-+#define ISP_NILSTATE 0
-+#define ISP_RESETSTATE 1
-+#define ISP_INITSTATE 2
-+#define ISP_RUNSTATE 3
-+
-+/*
-+ * ISP Configuration Options
-+ */
-+#define ISP_CFG_NORELOAD 0x80 /* don't download f/w */
-+#define ISP_CFG_NONVRAM 0x40 /* ignore NVRAM */
-+#define ISP_CFG_TWOGB 0x20 /* force 2GB connection (23XX only) */
-+#define ISP_CFG_ONEGB 0x10 /* force 1GB connection (23XX only) */
-+#define ISP_CFG_FULL_DUPLEX 0x01 /* Full Duplex (Fibre Channel only) */
-+#define ISP_CFG_PORT_PREF 0x0C /* Mask for Port Prefs (2200 only) */
-+#define ISP_CFG_LPORT 0x00 /* prefer {N/F}L-Port connection */
-+#define ISP_CFG_NPORT 0x04 /* prefer {N/F}-Port connection */
-+#define ISP_CFG_NPORT_ONLY 0x08 /* insist on {N/F}-Port connection */
-+#define ISP_CFG_LPORT_ONLY 0x0C /* insist on {N/F}L-Port connection */
-+#define ISP_CFG_OWNWWPN 0x100 /* override NVRAM wwpn */
-+#define ISP_CFG_OWNWWNN 0x200 /* override NVRAM wwnn */
-+#define ISP_CFG_OWNFSZ 0x400 /* override NVRAM frame size */
-+#define ISP_CFG_OWNLOOPID 0x800 /* override NVRAM loopid */
-+#define ISP_CFG_OWNEXCTHROTTLE 0x1000 /* override NVRAM execution throttle */
-+
-+/*
-+ * Prior to calling isp_reset for the first time, the outer layer
-+ * should set isp_role to one of NONE, INITIATOR, TARGET, BOTH.
-+ *
-+ * If you set ISP_ROLE_NONE, the cards will be reset, new firmware loaded,
-+ * NVRAM read, and defaults set, but any further initialization (e.g.
-+ * INITIALIZE CONTROL BLOCK commands for 2X00 cards) won't be done.
-+ *
-+ * If INITIATOR MODE isn't set, attempts to run commands will be stopped
-+ * at isp_start and completed with the moral equivalent of SELECTION TIMEOUT.
-+ *
-+ * If TARGET MODE is set, it doesn't mean that the rest of target mode support
-+ * needs to be enabled, or will even work. What happens with the 2X00 cards
-+ * here is that if you have enabled it with TARGET MODE as part of the ICB
-+ * options, but you haven't given the f/w any ram resources for ATIOs or
-+ * Immediate Notifies, the f/w just handles what it can and you never see
-+ * anything. Basically, it sends a single byte of data (the first byte,
-+ * which you can set as part of the INITIALIZE CONTROL BLOCK command) for
-+ * INQUIRY, and sends back QUEUE FULL status for any other command.
-+ *
-+ */
-+#define ISP_ROLE_NONE 0x0
-+#define ISP_ROLE_INITIATOR 0x1
-+#define ISP_ROLE_TARGET 0x2
-+#define ISP_ROLE_BOTH (ISP_ROLE_TARGET|ISP_ROLE_INITIATOR)
-+#define ISP_ROLE_EITHER ISP_ROLE_BOTH
-+#ifndef ISP_DEFAULT_ROLES
-+#define ISP_DEFAULT_ROLES ISP_ROLE_INITIATOR
-+#endif
-+
-+
-+/*
-+ * Firmware related defines
-+ */
-+#define ISP_CODE_ORG 0x1000 /* default f/w code start */
-+#define ISP_CODE_ORG_2300 0x0800 /* ..except for 2300s */
-+#define ISP_FW_REV(maj, min, mic) ((maj << 24) | (min << 16) | mic)
-+#define ISP_FW_MAJOR(code) ((code >> 24) & 0xff)
-+#define ISP_FW_MINOR(code) ((code >> 16) & 0xff)
-+#define ISP_FW_MICRO(code) ((code >> 8) & 0xff)
-+#define ISP_FW_REVX(xp) ((xp[0]<<24) | (xp[1] << 16) | xp[2])
-+#define ISP_FW_MAJORX(xp) (xp[0])
-+#define ISP_FW_MINORX(xp) (xp[1])
-+#define ISP_FW_MICROX(xp) (xp[2])
-+#define ISP_FW_NEWER_THAN(i, major, minor, micro) \
-+ (ISP_FW_REVX((i)->isp_fwrev) > ISP_FW_REV(major, minor, micro))
-+
-+/*
-+ * Bus (implementation) types
-+ */
-+#define ISP_BT_PCI 0 /* PCI Implementations */
-+#define ISP_BT_SBUS 1 /* SBus Implementations */
-+
-+/*
-+ * If we have not otherwise defined SBus support away make sure
-+ * it is defined here such that the code is included as default
-+ */
-+#ifndef ISP_SBUS_SUPPORTED
-+#define ISP_SBUS_SUPPORTED 1
-+#endif
-+
-+/*
-+ * Chip Types
-+ */
-+#define ISP_HA_SCSI 0xf
-+#define ISP_HA_SCSI_UNKNOWN 0x1
-+#define ISP_HA_SCSI_1020 0x2
-+#define ISP_HA_SCSI_1020A 0x3
-+#define ISP_HA_SCSI_1040 0x4
-+#define ISP_HA_SCSI_1040A 0x5
-+#define ISP_HA_SCSI_1040B 0x6
-+#define ISP_HA_SCSI_1040C 0x7
-+#define ISP_HA_SCSI_1240 0x8
-+#define ISP_HA_SCSI_1080 0x9
-+#define ISP_HA_SCSI_1280 0xa
-+#define ISP_HA_SCSI_10160 0xb
-+#define ISP_HA_SCSI_12160 0xc
-+#define ISP_HA_FC 0xf0
-+#define ISP_HA_FC_2100 0x10
-+#define ISP_HA_FC_2200 0x20
-+#define ISP_HA_FC_2300 0x30
-+#define ISP_HA_FC_2312 0x40
-+
-+#define IS_SCSI(isp) (isp->isp_type & ISP_HA_SCSI)
-+#define IS_1240(isp) (isp->isp_type == ISP_HA_SCSI_1240)
-+#define IS_1080(isp) (isp->isp_type == ISP_HA_SCSI_1080)
-+#define IS_1280(isp) (isp->isp_type == ISP_HA_SCSI_1280)
-+#define IS_10160(isp) (isp->isp_type == ISP_HA_SCSI_10160)
-+#define IS_12160(isp) (isp->isp_type == ISP_HA_SCSI_12160)
-+
-+#define IS_12X0(isp) (IS_1240(isp) || IS_1280(isp))
-+#define IS_1X160(isp) (IS_10160(isp) || IS_12160(isp))
-+#define IS_DUALBUS(isp) (IS_12X0(isp) || IS_12160(isp))
-+#define IS_ULTRA2(isp) (IS_1080(isp) || IS_1280(isp) || IS_1X160(isp))
-+#define IS_ULTRA3(isp) (IS_1X160(isp))
-+
-+#define IS_FC(isp) ((isp)->isp_type & ISP_HA_FC)
-+#define IS_2100(isp) ((isp)->isp_type == ISP_HA_FC_2100)
-+#define IS_2200(isp) ((isp)->isp_type == ISP_HA_FC_2200)
-+#define IS_23XX(isp) ((isp)->isp_type >= ISP_HA_FC_2300)
-+#define IS_2300(isp) ((isp)->isp_type == ISP_HA_FC_2300)
-+#define IS_2312(isp) ((isp)->isp_type == ISP_HA_FC_2312)
-+
-+/*
-+ * DMA cookie macros
-+ */
-+#ifdef ISP_DAC_SUPPORTRED
-+#define DMA_WD3(x) (((x) >> 48) & 0xffff)
-+#define DMA_WD2(x) (((x) >> 32) & 0xffff)
-+#else
-+#define DMA_WD3(x) 0
-+#define DMA_WD2(x) 0
-+#endif
-+#define DMA_WD1(x) (((x) >> 16) & 0xffff)
-+#define DMA_WD0(x) (((x) & 0xffff))
-+
-+/*
-+ * Core System Function Prototypes
-+ */
-+
-+/*
-+ * Reset Hardware. Totally. Assumes that you'll follow this with
-+ * a call to isp_init.
-+ */
-+void isp_reset(struct ispsoftc *);
-+
-+/*
-+ * Initialize Hardware to known state
-+ */
-+void isp_init(struct ispsoftc *);
-+
-+/*
-+ * Reset the ISP and call completion for any orphaned commands.
-+ */
-+void isp_reinit(struct ispsoftc *);
-+
-+#ifdef ISP_FW_CRASH_DUMP
-+/*
-+ * Dump firmware entry point.
-+ */
-+void isp_fw_dump(struct ispsoftc *isp);
-+#endif
-+
-+/*
-+ * Internal Interrupt Service Routine
-+ *
-+ * The outer layers do the spade work to get the appropriate status register,
-+ * semaphore register and first mailbox register (if appropriate). This also
-+ * means that most spurious/bogus interrupts not for us can be filtered first.
-+ */
-+void isp_intr(struct ispsoftc *, u_int16_t, u_int16_t, u_int16_t);
-+
-+
-+/*
-+ * Command Entry Point- Platform Dependent layers call into this
-+ */
-+int isp_start(XS_T *);
-+/* these values are what isp_start returns */
-+#define CMD_COMPLETE 101 /* command completed */
-+#define CMD_EAGAIN 102 /* busy- maybe retry later */
-+#define CMD_QUEUED 103 /* command has been queued for execution */
-+#define CMD_RQLATER 104 /* requeue this command later */
-+
-+/*
-+ * Command Completion Point- Core layers call out from this with completed cmds
-+ */
-+void isp_done(XS_T *);
-+
-+/*
-+ * Platform Dependent to External to Internal Control Function
-+ *
-+ * Assumes locks are held on entry. You should note that with many of
-+ * these commands and locks may be released while this is occurring.
-+ *
-+ * A few notes about some of these functions:
-+ *
-+ * ISPCTL_FCLINK_TEST tests to make sure we have good fibre channel link.
-+ * The argument is a pointer to an integer which is the time, in microseconds,
-+ * we should wait to see whether we have good link. This test, if successful,
-+ * lets us know our connection topology and our Loop ID/AL_PA and so on.
-+ * You can't get anywhere without this.
-+ *
-+ * ISPCTL_SCAN_FABRIC queries the name server (if we're on a fabric) for
-+ * all entities using the FC Generic Services subcommand GET ALL NEXT.
-+ * For each found entity, an ISPASYNC_FABRICDEV event is generated (see
-+ * below).
-+ *
-+ * ISPCTL_SCAN_LOOP does a local loop scan. This is only done if the connection
-+ * topology is NL or FL port (private or public loop). Since the Qlogic f/w
-+ * 'automatically' manages local loop connections, this function essentially
-+ * notes the arrival, departure, and possible shuffling around of local loop
-+ * entities. Thus for each arrival and departure this generates an isp_async
-+ * event of ISPASYNC_PROMENADE (see below).
-+ *
-+ * ISPCTL_PDB_SYNC is somewhat misnamed. It actually is the final step, in
-+ * order, of ISPCTL_FCLINK_TEST, ISPCTL_SCAN_FABRIC, and ISPCTL_SCAN_LOOP.
-+ * The main purpose of ISPCTL_PDB_SYNC is to complete management of logging
-+ * and logging out of fabric devices (if one is on a fabric) and then marking
-+ * the 'loop state' as being ready to now be used for sending commands to
-+ * devices. Originally fabric name server and local loop scanning were
-+ * part of this function. It's now been separated to allow for finer control.
-+ */
-+typedef enum {
-+ ISPCTL_RESET_BUS, /* Reset Bus */
-+ ISPCTL_RESET_DEV, /* Reset Device */
-+ ISPCTL_ABORT_CMD, /* Abort Command */
-+ ISPCTL_UPDATE_PARAMS, /* Update Operating Parameters (SCSI) */
-+ ISPCTL_FCLINK_TEST, /* Test FC Link Status */
-+ ISPCTL_SCAN_FABRIC, /* (Re)scan Fabric Name Server */
-+ ISPCTL_SCAN_LOOP, /* (Re)scan Local Loop */
-+ ISPCTL_PDB_SYNC, /* Synchronize Port Database */
-+ ISPCTL_SEND_LIP, /* Send a LIP */
-+ ISPCTL_GET_POSMAP, /* Get FC-AL position map */
-+ ISPCTL_RUN_MBOXCMD, /* run a mailbox command */
-+ ISPCTL_TOGGLE_TMODE /* toggle target mode */
-+} ispctl_t;
-+int isp_control(struct ispsoftc *, ispctl_t, void *);
-+
-+
-+/*
-+ * Platform Dependent to Internal to External Control Function
-+ * (each platform must provide such a function)
-+ *
-+ * Assumes locks are held.
-+ *
-+ * A few notes about some of these functions:
-+ *
-+ * ISPASYNC_CHANGE_NOTIFY notifies the outer layer that a change has
-+ * occurred that invalidates the list of fabric devices known and/or
-+ * the list of known loop devices. The argument passed is a pointer
-+ * whose values are defined below (local loop change, name server
-+ * change, other). 'Other' may simply be a LIP, or a change in
-+ * connection topology.
-+ *
-+ * ISPASYNC_FABRIC_DEV announces the next element in a list of
-+ * fabric device names we're getting out of the name server. The
-+ * argument points to a GET ALL NEXT response structure. The list
-+ * is known to terminate with an entry that refers to ourselves.
-+ * One of the main purposes of this function is to allow outer
-+ * layers, which are OS dependent, to set policy as to which fabric
-+ * devices might actually be logged into (and made visible) later
-+ * at ISPCTL_PDB_SYNC time. Since there's a finite number of fabric
-+ * devices that we can log into (256 less 3 'reserved' for F-port
-+ * topologies), and fabrics can grow up to 8 million or so entries
-+ * (24 bits of Port Address, less a wad of reserved spaces), clearly
-+ * we had better let the OS determine login policy.
-+ *
-+ * ISPASYNC_PROMENADE has an argument that is a pointer to an integer which
-+ * is an index into the portdb in the softc ('target'). Whether that entry's
-+ * valid tag is set or not says whether something has arrived or departed.
-+ * The name refers to a favorite pastime of many city dwellers- watching
-+ * people come and go, talking of Michaelangelo, and so on..
-+ *
-+ * ISPASYNC_UNHANDLED_RESPONSE gives outer layers a chance to parse a
-+ * response queue entry not otherwise handled. The outer layer should
-+ * return non-zero if it handled it. The 'arg' points to an unmassaged
-+ * response queue entry.
-+ */
-+
-+typedef enum {
-+ ISPASYNC_NEW_TGT_PARAMS, /* New Target Parameters Negotiated */
-+ ISPASYNC_BUS_RESET, /* Bus Was Reset */
-+ ISPASYNC_LOOP_DOWN, /* FC Loop Down */
-+ ISPASYNC_LOOP_UP, /* FC Loop Up */
-+ ISPASYNC_LIP, /* LIP Received */
-+ ISPASYNC_LOOP_RESET, /* Loop Reset Received */
-+ ISPASYNC_CHANGE_NOTIFY, /* FC Change Notification */
-+ ISPASYNC_FABRIC_DEV, /* FC Fabric Device Arrival */
-+ ISPASYNC_PROMENADE, /* FC Objects coming && going */
-+ ISPASYNC_TARGET_MESSAGE, /* target message */
-+ ISPASYNC_TARGET_EVENT, /* target asynchronous event */
-+ ISPASYNC_TARGET_ACTION, /* other target command action */
-+ ISPASYNC_CONF_CHANGE, /* Platform Configuration Change */
-+ ISPASYNC_UNHANDLED_RESPONSE, /* Unhandled Response Entry */
-+ ISPASYNC_FW_CRASH, /* Firmware has crashed */
-+ ISPASYNC_FW_DUMPED, /* Firmware crashdump taken */
-+ ISPASYNC_FW_RESTARTED /* Firmware has been restarted */
-+} ispasync_t;
-+int isp_async(struct ispsoftc *, ispasync_t, void *);
-+
-+#define ISPASYNC_CHANGE_PDB ((void *) 0)
-+#define ISPASYNC_CHANGE_SNS ((void *) 1)
-+#define ISPASYNC_CHANGE_OTHER ((void *) 2)
-+
-+/*
-+ * Platform Dependent Error and Debug Printout
-+ */
-+#ifdef __GNUC__
-+void isp_prt(struct ispsoftc *, int level, const char *, ...)
-+ __attribute__((__format__(__printf__,3,4)));
-+#else
-+void isp_prt(struct ispsoftc *, int level, const char *, ...);
-+#endif
-+
-+#define ISP_LOGALL 0x0 /* log always */
-+#define ISP_LOGCONFIG 0x1 /* log configuration messages */
-+#define ISP_LOGINFO 0x2 /* log informational messages */
-+#define ISP_LOGWARN 0x4 /* log warning messages */
-+#define ISP_LOGERR 0x8 /* log error messages */
-+#define ISP_LOGDEBUG0 0x10 /* log simple debug messages */
-+#define ISP_LOGDEBUG1 0x20 /* log intermediate debug messages */
-+#define ISP_LOGDEBUG2 0x40 /* log most debug messages */
-+#define ISP_LOGDEBUG3 0x80 /* log high frequency debug messages */
-+#define ISP_LOGDEBUG4 0x100 /* log high frequency debug messages */
-+#define ISP_LOGTDEBUG0 0x200 /* log simple debug messages (target mode) */
-+#define ISP_LOGTDEBUG1 0x400 /* log intermediate debug messages (target) */
-+#define ISP_LOGTDEBUG2 0x800 /* log all debug messages (target) */
-+
-+/*
-+ * Each Platform provides it's own isposinfo substructure of the ispsoftc
-+ * defined above.
-+ *
-+ * Each platform must also provide the following macros/defines:
-+ *
-+ *
-+ * INLINE - platform specific define for 'inline' functions
-+ *
-+ * ISP_DAC_SUPPORTED - Is DAC (Dual Address Cycle) is supported?
-+ * Basically means whether or not DMA for PCI
-+ * PCI cards (Ultra2 or better or FC) works
-+ * above 4GB.
-+ *
-+ * ISP2100_SCRLEN - length for the Fibre Channel scratch DMA area
-+ *
-+ * MEMZERO(dst, src) platform zeroing function
-+ * MEMCPY(dst, src, count) platform copying function
-+ * SNPRINTF(buf, bufsize, fmt, ...) snprintf
-+ * USEC_DELAY(usecs) microsecond spindelay function
-+ * USEC_SLEEP(isp, usecs) microsecond sleep function
-+ *
-+ * NANOTIME_T nanosecond time type
-+ *
-+ * GET_NANOTIME(NANOTIME_T *) get current nanotime.
-+ *
-+ * GET_NANOSEC(NANOTIME_T *) get u_int64_t from NANOTIME_T
-+ *
-+ * NANOTIME_SUB(NANOTIME_T *, NANOTIME_T *)
-+ * subtract two NANOTIME_T values
-+ *
-+ *
-+ * MAXISPREQUEST(struct ispsoftc *) maximum request queue size
-+ * for this particular board type
-+ *
-+ * MEMORYBARRIER(struct ispsoftc *, barrier_type, offset, size)
-+ *
-+ * Function/Macro the provides memory synchronization on
-+ * various objects so that the ISP's and the system's view
-+ * of the same object is consistent.
-+ *
-+ * MBOX_ACQUIRE(struct ispsoftc *) acquire lock on mailbox regs
-+ * MBOX_WAIT_COMPLETE(struct ispsoftc *) wait for mailbox cmd to be done
-+ * MBOX_NOTIFY_COMPLETE(struct ispsoftc *) notification of mbox cmd donee
-+ * MBOX_RELEASE(struct ispsoftc *) release lock on mailbox regs
-+ *
-+ * FC_SCRATCH_ACQUIRE(struct ispsoftc *) acquire lock on FC scratch area
-+ * FC_SCRATCH_RELEASE(struct ispsoftc *) acquire lock on FC scratch area
-+ *
-+ * SCSI_GOOD SCSI 'Good' Status
-+ * SCSI_CHECK SCSI 'Check Condition' Status
-+ * SCSI_BUSY SCSI 'Busy' Status
-+ * SCSI_QFULL SCSI 'Queue Full' Status
-+ *
-+ * XS_T Platform SCSI transaction type (i.e., command for HBA)
-+ * XS_ISP(xs) gets an instance out of an XS_T
-+ * XS_CHANNEL(xs) gets the channel (bus # for DUALBUS cards) ""
-+ * XS_TGT(xs) gets the target ""
-+ * XS_LUN(xs) gets the lun ""
-+ * XS_CDBP(xs) gets a pointer to the scsi CDB ""
-+ * XS_CDBLEN(xs) gets the CDB's length ""
-+ * XS_XFRLEN(xs) gets the associated data transfer length ""
-+ * XS_TIME(xs) gets the time (in milliseconds) for this command
-+ * XS_RESID(xs) gets the current residual count
-+ * XS_STSP(xs) gets a pointer to the SCSI status byte ""
-+ * XS_SNSP(xs) gets a pointer to the associate sense data
-+ * XS_SNSLEN(xs) gets the length of sense data storage
-+ * XS_SNSKEY(xs) dereferences XS_SNSP to get the current stored Sense Key
-+ * XS_TAG_P(xs) predicate of whether this command should be tagged
-+ * XS_TAG_TYPE(xs) which type of tag to use
-+ * XS_SETERR(xs) set error state
-+ *
-+ * HBA_NOERROR command has no erros
-+ * HBA_BOTCH hba botched something
-+ * HBA_CMDTIMEOUT command timed out
-+ * HBA_SELTIMEOUT selection timed out (also port logouts for FC)
-+ * HBA_TGTBSY target returned a BUSY status
-+ * HBA_BUSRESET bus reset destroyed command
-+ * HBA_ABORTED command was aborted (by request)
-+ * HBA_DATAOVR a data overrun was detected
-+ * HBA_ARQFAIL Automatic Request Sense failed
-+ *
-+ * XS_ERR(xs) return current error state
-+ * XS_NOERR(xs) there is no error currently set
-+ * XS_INITERR(xs) initialize error state
-+ *
-+ * XS_SAVE_SENSE(xs, sp) save sense data
-+ *
-+ * XS_SET_STATE_STAT(isp, sp, xs) platform dependent interpreter of
-+ * response queue entry status bits
-+ *
-+ *
-+ * DEFAULT_IID(struct ispsoftc *) Default SCSI initiator ID
-+ * DEFAULT_LOOPID(struct ispsoftc *) Default FC Loop ID
-+ * DEFAULT_NODEWWN(struct ispsoftc *) Default Node WWN
-+ * DEFAULT_PORTWWN(struct ispsoftc *) Default Port WWN
-+ * DEFAULT_FRAMESIZE(struct ispsoftc *) Default Frame Size
-+ * DEFAULT_EXEC_THROTTLE(struct ispsoftc *) Default Execution Throttle
-+ * These establish reasonable defaults for each platform.
-+ * These must be available independent of card NVRAM and are
-+ * to be used should NVRAM not be readable.
-+ *
-+ * ISP_NODEWWN(struct ispsoftc *) FC Node WWN to use
-+ * ISP_PORTWWN(struct ispsoftc *) FC Port WWN to use
-+ *
-+ * These are to be used after NVRAM is read. The tags
-+ * in fcparam.isp_{node,port}wwn reflect the values
-+ * read from NVRAM (possibly corrected for card botches).
-+ * Each platform can take that information and override
-+ * it or ignore and return the Node and Port WWNs to be
-+ * used when sending the Qlogic f/w the Initialization Control
-+ * Block.
-+ *
-+ * (XXX these do endian specific transformations- in transition XXX)
-+ *
-+ * ISP_IOXPUT_8(struct ispsoftc *, u_int8_t srcval, u_int8_t *dstptr)
-+ * ISP_IOXPUT_16(struct ispsoftc *, u_int16_t srcval, u_int16_t *dstptr)
-+ * ISP_IOXPUT_32(struct ispsoftc *, u_int32_t srcval, u_int32_t *dstptr)
-+ *
-+ * ISP_IOXGET_8(struct ispsoftc *, u_int8_t *srcptr, u_int8_t dstrval)
-+ * ISP_IOXGET_16(struct ispsoftc *, u_int16_t *srcptr, u_int16_t dstrval)
-+ * ISP_IOXGET_32(struct ispsoftc *, u_int32_t *srcptr, u_int32_t dstrval)
-+ *
-+ * ISP_SWIZZLE_NVRAM_WORD(struct ispsoftc *, u_int16_t *)
-+ */
-+
-+#endif /* _ISPVAR_H */
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/scsi/isp/Makefile 2003-07-19 17:06:33.000000000 -0700
-@@ -0,0 +1,7 @@
-+obj-$(CONFIG_SCSI_FERAL_ISP) += isp_mod.o
-+
-+EXTRA_CFLAGS += -Idrivers/scsi -g
-+EXTRA_LDFLAGS += -g
-+
-+isp_mod-y += isp_pci.o isp_linux.o isp.o \
-+ isp_cb_ops.o isp_target.o
---- linux-2.6.0-test1/drivers/scsi/jazz_esp.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/jazz_esp.c 2003-07-19 17:03:50.000000000 -0700
-@@ -11,7 +11,7 @@
- #include <linux/types.h>
- #include <linux/string.h>
- #include <linux/slab.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/proc_fs.h>
- #include <linux/stat.h>
-
---- linux-2.6.0-test1/drivers/scsi/Kconfig 2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/Kconfig 2003-07-19 17:06:33.000000000 -0700
-@@ -1834,6 +1834,15 @@ config WD33C93_PIO
-
- # bool 'Cyberstorm Mk III SCSI support (EXPERIMENTAL)' CONFIG_CYBERSTORMIII_SCSI
- # bool 'GVP Turbo 040/060 SCSI support (EXPERIMENTAL)' CONFIG_GVP_TURBO_SCSI
-+
-+config SCSI_FERAL_ISP
-+ tristate "Feral ISP driver for 10x0/12x0/2x00"
-+ depends on SCSI
-+ help
-+ Feral Driver for the following qlogic ISP chips
-+ 1020/1040/1080/1280/12160/2100/2200/2300
-+ If this doesn't work, there are other drivers for these chips
-+ below.
- endmenu
-
- source "drivers/scsi/pcmcia/Kconfig"
---- linux-2.6.0-test1/drivers/scsi/lasi700.c 2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/lasi700.c 2003-07-19 17:03:50.000000000 -0700
-@@ -128,7 +128,8 @@ lasi700_driver_callback(struct parisc_de
- }
-
- dev_set_drvdata(&dev->dev, host);
-- scsi_add_host(host, &dev->dev);
-+ scsi_add_host(host, &dev->dev); /* XXX handle failure */
-+ scsi_scan_host(host);
-
- return 0;
-
-@@ -165,7 +166,6 @@ static void __exit
- lasi700_exit(void)
- {
- unregister_parisc_driver(&lasi700_driver);
-- scsi_sysfs_release_attributes(&lasi700_template);
- }
-
- module_init(lasi700_init);
---- linux-2.6.0-test1/drivers/scsi/mac53c94.c 2003-06-14 12:17:57.000000000 -0700
-+++ 25/drivers/scsi/mac53c94.c 2003-07-19 17:03:50.000000000 -0700
-@@ -12,7 +12,7 @@
- #include <linux/types.h>
- #include <linux/string.h>
- #include <linux/slab.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/proc_fs.h>
- #include <linux/stat.h>
- #include <linux/spinlock.h>
---- linux-2.6.0-test1/drivers/scsi/mac_esp.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/mac_esp.c 2003-07-19 17:03:50.000000000 -0700
-@@ -19,7 +19,7 @@
- #include <linux/ctype.h>
- #include <linux/string.h>
- #include <linux/slab.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/proc_fs.h>
- #include <linux/stat.h>
- #include <linux/init.h>
---- linux-2.6.0-test1/drivers/scsi/mac_scsi.c 2003-06-14 12:17:57.000000000 -0700
-+++ 25/drivers/scsi/mac_scsi.c 2003-07-19 17:03:50.000000000 -0700
-@@ -39,7 +39,7 @@
- #include <linux/sched.h>
- #include <linux/ioport.h>
- #include <linux/init.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/interrupt.h>
-
- #include <asm/io.h>
---- linux-2.6.0-test1/drivers/scsi/Makefile 2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/Makefile 2003-07-19 17:06:33.000000000 -0700
-@@ -70,6 +70,7 @@ obj-$(CONFIG_SCSI_NCR53C406A) += NCR53c4
- obj-$(CONFIG_SCSI_NCR_D700) += NCR_D700.o 53c700.o
- obj-$(CONFIG_SCSI_NCR_Q720) += NCR_Q720_mod.o
- obj-$(CONFIG_SCSI_SYM53C416) += sym53c416.o
-+obj-$(CONFIG_SCSI_FERAL_ISP) += isp/
- obj-$(CONFIG_SCSI_QLOGIC_FAS) += qlogicfas.o
- obj-$(CONFIG_SCSI_QLOGIC_ISP) += qlogicisp.o
- obj-$(CONFIG_SCSI_QLOGIC_FC) += qlogicfc.o
---- linux-2.6.0-test1/drivers/scsi/mca_53c9x.c 2003-06-14 12:18:05.000000000 -0700
-+++ 25/drivers/scsi/mca_53c9x.c 2003-07-19 17:03:50.000000000 -0700
-@@ -37,7 +37,7 @@
- #include <linux/types.h>
- #include <linux/string.h>
- #include <linux/slab.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/proc_fs.h>
- #include <linux/stat.h>
- #include <linux/mca-legacy.h>
---- linux-2.6.0-test1/drivers/scsi/megaraid.c 2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/megaraid.c 2003-07-19 17:03:50.000000000 -0700
-@@ -32,7 +32,7 @@
-
- #include <linux/mm.h>
- #include <linux/fs.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <asm/uaccess.h>
- #include <asm/io.h>
- #include <linux/delay.h>
---- linux-2.6.0-test1/drivers/scsi/mesh.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/mesh.c 2003-07-19 17:03:50.000000000 -0700
-@@ -21,7 +21,7 @@
- #include <linux/types.h>
- #include <linux/string.h>
- #include <linux/slab.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/proc_fs.h>
- #include <linux/stat.h>
- #include <linux/interrupt.h>
---- linux-2.6.0-test1/drivers/scsi/mvme147.c 2003-06-14 12:18:05.000000000 -0700
-+++ 25/drivers/scsi/mvme147.c 2003-07-19 17:03:50.000000000 -0700
-@@ -1,6 +1,6 @@
- #include <linux/types.h>
- #include <linux/mm.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/sched.h>
- #include <linux/version.h>
- #include <linux/interrupt.h>
---- linux-2.6.0-test1/drivers/scsi/mvme16x.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/mvme16x.c 2003-07-19 17:03:50.000000000 -0700
-@@ -5,7 +5,7 @@
- */
- #include <linux/types.h>
- #include <linux/mm.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/sched.h>
- #include <linux/version.h>
-
---- linux-2.6.0-test1/drivers/scsi/NCR53c406a.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/NCR53c406a.c 2003-07-19 17:05:05.000000000 -0700
-@@ -51,7 +51,7 @@
- #include <asm/bitops.h>
- #include <asm/irq.h>
-
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/spinlock.h>
- #include "scsi.h"
- #include "hosts.h"
-@@ -450,6 +450,7 @@ static __inline__ int NCR53c406a_pio_wri
-
- static int __init NCR53c406a_detect(Scsi_Host_Template * tpnt)
- {
-+ int present = 0;
- struct Scsi_Host *shpnt = NULL;
- #ifndef PORT_BASE
- int i;
-@@ -522,7 +523,7 @@ static int __init NCR53c406a_detect(Scsi
-
- DEB(printk("NCR53c406a: using port_base 0x%x\n", port_base));
-
-- tpnt->present = 1;
-+ present = 1;
- tpnt->proc_name = "NCR53c406a";
-
- shpnt = scsi_register(tpnt, 0);
-@@ -576,7 +577,7 @@ static int __init NCR53c406a_detect(Scsi
- sprintf(info_msg, "NCR53c406a at 0x%x, IRQ %d, %s PIO mode.", port_base, irq_level, fast_pio ? "fast" : "slow");
- #endif
-
-- return (tpnt->present);
-+ return (present);
-
- #if USE_DMA
- err_free_irq:
---- linux-2.6.0-test1/drivers/scsi/ncr53c8xx.c 2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/ncr53c8xx.c 2003-07-19 17:03:50.000000000 -0700
-@@ -140,7 +140,7 @@
- #include <linux/timer.h>
- #include <linux/stat.h>
-
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
-
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,1,35)
- #include <linux/init.h>
---- linux-2.6.0-test1/drivers/scsi/NCR53C9x.c 2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/NCR53C9x.c 2003-07-19 17:03:50.000000000 -0700
-@@ -29,7 +29,7 @@
- #include <linux/types.h>
- #include <linux/string.h>
- #include <linux/slab.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/interrupt.h>
- #include <linux/proc_fs.h>
- #include <linux/stat.h>
---- linux-2.6.0-test1/drivers/scsi/NCR_D700.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/NCR_D700.c 2003-07-19 17:03:50.000000000 -0700
-@@ -218,7 +218,8 @@ NCR_D700_probe_one(struct NCR_D700_priva
- goto irq_failed;
- }
-
-- scsi_add_host(host, p->dev);
-+ scsi_add_host(host, p->dev); /* XXX handle failure */
-+ scsi_scan_host(host);
-
- p->hosts[siop] = host;
- hostdata->dev = p->dev;
-@@ -387,7 +388,6 @@ static int __init NCR_D700_init(void)
- static void __exit NCR_D700_exit(void)
- {
- mca_unregister_driver(&NCR_D700_driver);
-- scsi_sysfs_release_attributes(&NCR_D700_driver_template);
- }
-
- module_init(NCR_D700_init);
---- linux-2.6.0-test1/drivers/scsi/NCR_Q720.c 2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/NCR_Q720.c 2003-07-19 17:03:50.000000000 -0700
-@@ -85,6 +85,7 @@ NCR_Q720_probe_one(struct NCR_Q720_priva
- __u8 scsr1 = readb(vaddr + NCR_Q720_SCSR_OFFSET + 1);
- __u8 differential = readb(vaddr + NCR_Q720_SCSR_OFFSET) & 0x20;
- __u8 version;
-+ int error;
-
- scsi_id = scsr1 >> 4;
- /* enable burst length 16 (FIXME: should allow this) */
-@@ -120,9 +121,12 @@ NCR_Q720_probe_one(struct NCR_Q720_priva
- scsr1 &= ~0x01;
- writeb(scsr1, vaddr + NCR_Q720_SCSR_OFFSET + 1);
-
-- scsi_add_host(p->hosts[siop], p->dev);
--
-- return 0;
-+ error = scsi_add_host(p->hosts[siop], p->dev);
-+ if (error)
-+ ncr53c8xx_release(p->hosts[siop]);
-+ else
-+ scsi_scan_host(p->hosts[siop]);
-+ return error;
-
- fail:
- return -ENODEV;
-@@ -347,7 +351,6 @@ static void __exit
- NCR_Q720_exit(void)
- {
- mca_unregister_driver(&NCR_Q720_driver);
-- //scsi_sysfs_release_attributes(&NCR_Q720_driver_template);
- }
-
- module_init(NCR_Q720_init);
---- linux-2.6.0-test1/drivers/scsi/nsp32.c 2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/nsp32.c 2003-07-19 17:03:50.000000000 -0700
-@@ -25,7 +25,7 @@
- #include <linux/timer.h>
- #include <linux/ioport.h>
- #include <linux/major.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/interrupt.h>
- #include <linux/pci.h>
- #include <linux/delay.h>
-@@ -1820,7 +1820,8 @@ static int nsp32_detect(struct pci_dev *
- goto free_irq;
- }
-
-- scsi_add_host(host, &pdev->dev);
-+ scsi_add_host(host, &pdev->dev); /* XXX handle failure */
-+ scsi_scan_host(host);
- pci_set_drvdata(pdev, host);
- return 0;
-
---- linux-2.6.0-test1/drivers/scsi/oktagon_esp.c 2003-06-14 12:17:56.000000000 -0700
-+++ 25/drivers/scsi/oktagon_esp.c 2003-07-19 17:03:50.000000000 -0700
-@@ -20,7 +20,7 @@
- #include <linux/types.h>
- #include <linux/string.h>
- #include <linux/slab.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/proc_fs.h>
- #include <linux/stat.h>
- #include <linux/reboot.h>
---- linux-2.6.0-test1/drivers/scsi/osst.c 2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/osst.c 2003-07-19 17:03:50.000000000 -0700
-@@ -46,7 +46,7 @@ const char * osst_version = "0.99.0";
- #include <linux/spinlock.h>
- #include <linux/vmalloc.h>
- #include <linux/version.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/devfs_fs_kernel.h>
- #include <asm/uaccess.h>
- #include <asm/dma.h>
---- linux-2.6.0-test1/drivers/scsi/pas16.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/pas16.c 2003-07-19 17:03:50.000000000 -0700
-@@ -117,7 +117,8 @@
- #include <linux/proc_fs.h>
- #include <linux/sched.h>
- #include <asm/io.h>
--#include <linux/blk.h>
-+#include <asm/dma.h>
-+#include <linux/blkdev.h>
- #include <linux/delay.h>
- #include <linux/interrupt.h>
- #include <linux/stat.h>
---- linux-2.6.0-test1/drivers/scsi/pc980155.c 2003-06-14 12:17:57.000000000 -0700
-+++ 25/drivers/scsi/pc980155.c 2003-07-19 17:03:50.000000000 -0700
-@@ -11,7 +11,7 @@
- */
-
- #include <linux/module.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/ioport.h>
- #include <linux/interrupt.h>
- #include <linux/types.h>
---- linux-2.6.0-test1/drivers/scsi/pci2000.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/pci2000.c 2003-07-19 17:03:50.000000000 -0700
-@@ -35,7 +35,7 @@
- ****************************************************************************/
- #define PCI2000_VERSION "1.20"
-
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/interrupt.h>
- #include <linux/module.h>
- #include <linux/kernel.h>
---- linux-2.6.0-test1/drivers/scsi/pci2220i.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/pci2220i.c 2003-07-19 17:03:50.000000000 -0700
-@@ -50,7 +50,7 @@
- #include <linux/sched.h>
- #include <linux/proc_fs.h>
- #include <linux/stat.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/timer.h>
- #include <linux/spinlock.h>
-
---- linux-2.6.0-test1/drivers/scsi/pcmcia/aha152x_stub.c 2003-06-14 12:18:33.000000000 -0700
-+++ 25/drivers/scsi/pcmcia/aha152x_stub.c 2003-07-19 17:03:50.000000000 -0700
-@@ -44,7 +44,7 @@
- #include <linux/ioport.h>
- #include <scsi/scsi.h>
- #include <linux/major.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <scsi/scsi_ioctl.h>
-
- #include "scsi.h"
-@@ -278,7 +278,8 @@ static void aha152x_config_cs(dev_link_t
- goto cs_failed;
- }
-
-- scsi_add_host(host, NULL);
-+ scsi_add_host(host, NULL); /* XXX handle failure */
-+ scsi_scan_host(host);
-
- sprintf(info->node.dev_name, "scsi%d", host->host_no);
- link->dev = &info->node;
---- linux-2.6.0-test1/drivers/scsi/pcmcia/fdomain_stub.c 2003-06-14 12:18:23.000000000 -0700
-+++ 25/drivers/scsi/pcmcia/fdomain_stub.c 2003-07-19 17:03:50.000000000 -0700
-@@ -41,7 +41,7 @@
- #include <linux/ioport.h>
- #include <scsi/scsi.h>
- #include <linux/major.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <scsi/scsi_ioctl.h>
-
- #include "scsi.h"
-@@ -254,7 +254,8 @@ static void fdomain_config(dev_link_t *l
- goto cs_failed;
- }
-
-- scsi_add_host(host, NULL);
-+ scsi_add_host(host, NULL); /* XXX handle failure */
-+ scsi_scan_host(host);
-
- sprintf(info->node.dev_name, "scsi%d", host->host_no);
- link->dev = &info->node;
---- linux-2.6.0-test1/drivers/scsi/pcmcia/nsp_cs.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/pcmcia/nsp_cs.c 2003-07-19 17:03:50.000000000 -0700
-@@ -44,7 +44,7 @@
- #include <linux/interrupt.h>
- #include <linux/module.h>
- #include <linux/major.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/stat.h>
-
- #include <asm/io.h>
-@@ -1773,7 +1773,8 @@ static void nsp_cs_config(dev_link_t *li
- req.Base+req.Size-1);
- printk("\n");
-
-- scsi_add_host(host, NULL);
-+ scsi_add_host(host, NULL); /* XXX handle failure */
-+ scsi_scan_host(host);
- link->state &= ~DEV_CONFIG_PENDING;
- return;
-
---- linux-2.6.0-test1/drivers/scsi/pcmcia/qlogic_stub.c 2003-06-14 12:18:22.000000000 -0700
-+++ 25/drivers/scsi/pcmcia/qlogic_stub.c 2003-07-19 17:03:50.000000000 -0700
-@@ -42,7 +42,7 @@
- #include <asm/io.h>
- #include <scsi/scsi.h>
- #include <linux/major.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <scsi/scsi_ioctl.h>
-
- #include "scsi.h"
-@@ -270,7 +270,8 @@ static void qlogic_config(dev_link_t * l
- link->dev = &info->node;
- info->host = host;
-
-- scsi_add_host(host, NULL);
-+ scsi_add_host(host, NULL); /* XXX handle failure */
-+ scsi_scan_host(host);
-
- out:
- link->state &= ~DEV_CONFIG_PENDING;
---- linux-2.6.0-test1/drivers/scsi/pluto.c 2003-06-14 12:18:07.000000000 -0700
-+++ 25/drivers/scsi/pluto.c 2003-07-19 17:03:50.000000000 -0700
-@@ -9,7 +9,7 @@
- #include <linux/types.h>
- #include <linux/string.h>
- #include <linux/slab.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/proc_fs.h>
- #include <linux/stat.h>
- #include <linux/init.h>
---- linux-2.6.0-test1/drivers/scsi/ppa.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/ppa.c 2003-07-19 17:03:50.000000000 -0700
-@@ -15,7 +15,7 @@
- /* The following #define is to avoid a clash with hosts.c */
- #define PPA_CODE 1
-
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <asm/io.h>
- #include <linux/parport.h>
- #include <linux/workqueue.h>
---- linux-2.6.0-test1/drivers/scsi/ppa.h 2003-06-14 12:18:30.000000000 -0700
-+++ 25/drivers/scsi/ppa.h 2003-07-19 17:03:50.000000000 -0700
-@@ -82,7 +82,7 @@
- #include <linux/delay.h>
- #include <linux/proc_fs.h>
- #include <linux/stat.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/sched.h>
- #include <linux/interrupt.h>
-
---- linux-2.6.0-test1/drivers/scsi/psi240i.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/psi240i.c 2003-07-19 17:03:50.000000000 -0700
-@@ -26,7 +26,7 @@
-
- #include <linux/module.h>
-
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/kernel.h>
- #include <linux/types.h>
- #include <linux/string.h>
---- linux-2.6.0-test1/drivers/scsi/qla1280.c 2003-06-14 12:18:51.000000000 -0700
-+++ 25/drivers/scsi/qla1280.c 2003-07-19 17:03:50.000000000 -0700
-@@ -252,7 +252,7 @@
- #include <linux/timer.h>
- #include <linux/pci.h>
- #include <linux/proc_fs.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/workqueue.h>
- #include <linux/stat.h>
- #include <linux/slab.h>
-@@ -327,7 +327,7 @@
- /* 3.16 */
- #ifdef QLA_64BIT_PTR
- #define pci_dma_lo32(a) (a & 0xffffffff)
--#define pci_dma_hi32(a) (a >> 32)
-+#define pci_dma_hi32(a) ((a >> 16)>>16)
- #else
- #define pci_dma_lo32(a) (a & 0xffffffff)
- #define pci_dma_hi32(a) 0
---- linux-2.6.0-test1/drivers/scsi/qlogicfas.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/qlogicfas.c 2003-07-19 17:03:50.000000000 -0700
-@@ -127,7 +127,7 @@
- #endif
-
- #include <linux/module.h>
--#include <linux/blk.h> /* to get disk capacity */
-+#include <linux/blkdev.h> /* to get disk capacity */
- #include <linux/kernel.h>
- #include <linux/string.h>
- #include <linux/init.h>
-@@ -140,6 +140,7 @@
-
- #include <asm/io.h>
- #include <asm/irq.h>
-+#include <asm/dma.h>
-
- #include "scsi.h"
- #include "hosts.h"
---- linux-2.6.0-test1/drivers/scsi/qlogicfc.c 2003-06-14 12:18:29.000000000 -0700
-+++ 25/drivers/scsi/qlogicfc.c 2003-07-19 17:03:50.000000000 -0700
-@@ -50,7 +50,7 @@
- *
- */
-
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/kernel.h>
- #include <linux/string.h>
- #include <linux/ioport.h>
---- linux-2.6.0-test1/drivers/scsi/qlogicisp.c 2003-06-14 12:18:35.000000000 -0700
-+++ 25/drivers/scsi/qlogicisp.c 2003-07-19 17:03:50.000000000 -0700
-@@ -20,7 +20,7 @@
- * General Public License for more details.
- */
-
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/config.h>
- #include <linux/kernel.h>
- #include <linux/string.h>
---- linux-2.6.0-test1/drivers/scsi/qlogicpti.c 2003-06-14 12:18:25.000000000 -0700
-+++ 25/drivers/scsi/qlogicpti.c 2003-07-19 17:03:50.000000000 -0700
-@@ -17,7 +17,7 @@
- #include <linux/types.h>
- #include <linux/string.h>
- #include <linux/slab.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/proc_fs.h>
- #include <linux/stat.h>
- #include <linux/init.h>
---- linux-2.6.0-test1/drivers/scsi/scsicam.c 2003-06-14 12:18:23.000000000 -0700
-+++ 25/drivers/scsi/scsicam.c 2003-07-19 17:03:50.000000000 -0700
-@@ -15,7 +15,7 @@
- #include <linux/fs.h>
- #include <linux/genhd.h>
- #include <linux/kernel.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/buffer_head.h>
- #include <asm/unaligned.h>
- #include "scsi.h"
---- linux-2.6.0-test1/drivers/scsi/scsi_debug.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/scsi_debug.c 2003-07-19 17:03:50.000000000 -0700
-@@ -41,7 +41,7 @@
- #include <linux/vmalloc.h>
- #include <linux/moduleparam.h>
-
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include "scsi.h"
- #include "hosts.h"
- #include <scsi/scsicam.h>
-@@ -687,7 +687,7 @@ static int resp_mode_sense(unsigned char
- pcontrol = (cmd[2] & 0xc0) >> 6;
- pcode = cmd[2] & 0x3f;
- msense_6 = (MODE_SENSE == cmd[0]);
-- alloc_len = msense_6 ? cmd[4] : ((cmd[7] << 8) | cmd[6]);
-+ alloc_len = msense_6 ? cmd[4] : ((cmd[7] << 8) | cmd[8]);
- /* printk(KERN_INFO "msense: dbd=%d pcontrol=%d pcode=%d "
- "msense_6=%d alloc_len=%d\n", dbd, pcontrol, pcode, "
- "msense_6, alloc_len); */
-@@ -1701,7 +1701,8 @@ static int sdebug_driver_probe(struct de
- printk(KERN_ERR "%s: scsi_add_host failed\n", __FUNCTION__);
- error = -ENODEV;
- scsi_host_put(hpnt);
-- }
-+ } else
-+ scsi_scan_host(hpnt);
-
-
- return error;
---- linux-2.6.0-test1/drivers/scsi/scsi.h 2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/scsi.h 2003-07-19 17:03:50.000000000 -0700
-@@ -174,11 +174,6 @@ extern const char *scsi_extd_sense_forma
- #define SCSI_MLQUEUE_DEVICE_BUSY 0x1056
- #define SCSI_MLQUEUE_EH_RETRY 0x1057
-
--extern int scsi_sysfs_modify_sdev_attribute(struct device_attribute ***dev_attrs,
-- struct device_attribute *attr);
--extern int scsi_sysfs_modify_shost_attribute(struct class_device_attribute ***class_attrs,
-- struct class_device_attribute *attr);
--
- /*
- * Legacy dma direction interfaces.
- *
---- linux-2.6.0-test1/drivers/scsi/scsi_ioctl.c 2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/scsi_ioctl.c 2003-07-19 17:03:50.000000000 -0700
-@@ -18,7 +18,7 @@
- #include <linux/mm.h>
- #include <linux/string.h>
-
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include "scsi.h"
- #include "hosts.h"
- #include <scsi/scsi_ioctl.h>
---- linux-2.6.0-test1/drivers/scsi/scsi_lib.c 2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/scsi_lib.c 2003-07-19 17:03:50.000000000 -0700
-@@ -8,7 +8,7 @@
- */
-
- #include <linux/bio.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/completion.h>
- #include <linux/kernel.h>
- #include <linux/mempool.h>
-@@ -444,22 +444,8 @@ static void scsi_run_queue(struct reques
- */
- static void scsi_requeue_command(struct request_queue *q, struct scsi_cmnd *cmd)
- {
-- unsigned long flags;
--
-- spin_lock_irqsave(q->queue_lock, flags);
-- cmd->request->special = cmd;
-- if (blk_rq_tagged(cmd->request))
-- blk_queue_end_tag(q, cmd->request);
--
-- /*
-- * set REQ_SPECIAL - we have a command
-- * clear REQ_DONTPREP - we assume the sg table has been
-- * nuked so we need to set it up again.
-- */
-- cmd->request->flags |= REQ_SPECIAL;
- cmd->request->flags &= ~REQ_DONTPREP;
-- __elv_add_request(q, cmd->request, 0, 0);
-- spin_unlock_irqrestore(q->queue_lock, flags);
-+ blk_insert_request(q, cmd->request, 1, cmd);
-
- scsi_run_queue(q);
- }
-@@ -1213,9 +1199,7 @@ static void scsi_request_fn(struct reque
- * later time.
- */
- spin_lock_irq(q->queue_lock);
-- if (blk_rq_tagged(req))
-- blk_queue_end_tag(q, req);
-- __elv_add_request(q, req, 0, 0);
-+ blk_requeue_request(q, req);
- sdev->device_busy--;
- if(sdev->device_busy == 0)
- blk_plug_device(q);
-@@ -1426,17 +1410,17 @@ __scsi_mode_sense(struct scsi_request *s
- if(scsi_status_is_good(sreq->sr_result)) {
- data->header_length = header_length;
- if(use_10_for_ms) {
-- data->length = buffer[0]*256 + buffer[1];
-+ data->length = buffer[0]*256 + buffer[1] + 2;
- data->medium_type = buffer[2];
- data->device_specific = buffer[3];
- data->longlba = buffer[4] & 0x01;
- data->block_descriptor_length = buffer[6]*256
- + buffer[7];
- } else {
-- data->length = buffer[0];
-+ data->length = buffer[0] + 1;
- data->medium_type = buffer[1];
-- data->device_specific = buffer[3];
-- data->block_descriptor_length = buffer[4];
-+ data->device_specific = buffer[2];
-+ data->block_descriptor_length = buffer[3];
- }
- }
-
---- linux-2.6.0-test1/drivers/scsi/scsi_module.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/scsi_module.c 2003-07-19 17:05:05.000000000 -0700
-@@ -33,13 +33,14 @@ static int __init init_this_scsi_driver(
- INIT_LIST_HEAD(&sht->legacy_hosts);
-
- sht->detect(sht);
-- if (!sht->present)
-+ if (list_empty(&sht->legacy_hosts))
- return -ENODEV;
-
- list_for_each_entry(shost, &sht->legacy_hosts, sht_legacy_list) {
- error = scsi_add_host(shost, NULL);
- if (error)
- goto fail;
-+ scsi_scan_host(shost);
- }
- return 0;
- fail:
---- linux-2.6.0-test1/drivers/scsi/scsi_pc98.c 2003-06-14 12:17:56.000000000 -0700
-+++ 25/drivers/scsi/scsi_pc98.c 2003-07-19 17:03:50.000000000 -0700
-@@ -8,7 +8,7 @@
- #include <linux/fs.h>
- #include <linux/kernel.h>
- #include <linux/genhd.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <asm/pc9800.h>
-
- #include "scsi.h"
---- linux-2.6.0-test1/drivers/scsi/scsi_priv.h 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/scsi_priv.h 2003-07-19 17:05:05.000000000 -0700
-@@ -90,11 +90,15 @@ extern void scsi_exit_queue(void);
-
- /* scsi_proc.c */
- #ifdef CONFIG_PROC_FS
-+extern void scsi_proc_hostdir_add(struct scsi_host_template *);
-+extern void scsi_proc_hostdir_rm(struct scsi_host_template *);
- extern void scsi_proc_host_add(struct Scsi_Host *);
- extern void scsi_proc_host_rm(struct Scsi_Host *);
- extern int scsi_init_procfs(void);
- extern void scsi_exit_procfs(void);
- #else
-+# define scsi_proc_hostdir_add(sht) do { } while (0)
-+# define scsi_proc_hostdir_rm(sht) do { } while (0)
- # define scsi_proc_host_add(shost) do { } while (0)
- # define scsi_proc_host_rm(shost) do { } while (0)
- # define scsi_init_procfs() (0)
-@@ -102,7 +106,6 @@ extern void scsi_exit_procfs(void);
- #endif /* CONFIG_PROC_FS */
-
- /* scsi_scan.c */
--extern void scsi_scan_host(struct Scsi_Host *);
- extern void scsi_forget_host(struct Scsi_Host *);
- extern void scsi_free_sdev(struct scsi_device *);
- extern void scsi_free_shost(struct Scsi_Host *);
-@@ -117,11 +120,6 @@ extern void scsi_sysfs_remove_host(struc
- extern int scsi_sysfs_register(void);
- extern void scsi_sysfs_unregister(void);
-
--/* definitions for the linker default sections covering the host
-- * class and device attributes */
--extern struct class_device_attribute *scsi_sysfs_shost_attrs[];
--extern struct device_attribute *scsi_sysfs_sdev_attrs[];
--
- extern struct class shost_class;
- extern struct bus_type scsi_bus_type;
-
---- linux-2.6.0-test1/drivers/scsi/scsi_proc.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/scsi_proc.c 2003-07-19 17:05:05.000000000 -0700
-@@ -23,7 +23,7 @@
- #include <linux/slab.h>
- #include <linux/proc_fs.h>
- #include <linux/errno.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/seq_file.h>
- #include <asm/uaccess.h>
-
-@@ -41,6 +41,8 @@
- struct proc_dir_entry *proc_scsi;
- EXPORT_SYMBOL(proc_scsi);
-
-+/* Protect sht->present and sht->proc_dir */
-+static DECLARE_MUTEX(global_host_template_sem);
-
- static int proc_scsi_read(char *buffer, char **start, off_t offset,
- int length, int *eof, void *data)
-@@ -77,16 +79,10 @@ out:
- return ret;
- }
-
--void scsi_proc_host_add(struct Scsi_Host *shost)
-+void scsi_proc_hostdir_add(struct scsi_host_template *sht)
- {
-- struct scsi_host_template *sht = shost->hostt;
-- struct proc_dir_entry *p;
-- char name[10];
--
-- if (!sht->proc_info)
-- return;
--
-- if (!sht->proc_dir) {
-+ down(&global_host_template_sem);
-+ if (!sht->present++) {
- sht->proc_dir = proc_mkdir(sht->proc_name, proc_scsi);
- if (!sht->proc_dir) {
- printk(KERN_ERR "%s: proc_mkdir failed for %s\n",
-@@ -95,6 +91,27 @@ void scsi_proc_host_add(struct Scsi_Host
- }
- sht->proc_dir->owner = sht->module;
- }
-+ up(&global_host_template_sem);
-+}
-+
-+void scsi_proc_hostdir_rm(struct scsi_host_template *sht)
-+{
-+ down(&global_host_template_sem);
-+ if (!--sht->present && sht->proc_dir) {
-+ remove_proc_entry(sht->proc_name, proc_scsi);
-+ sht->proc_dir = NULL;
-+ }
-+ up(&global_host_template_sem);
-+}
-+
-+void scsi_proc_host_add(struct Scsi_Host *shost)
-+{
-+ struct scsi_host_template *sht = shost->hostt;
-+ struct proc_dir_entry *p;
-+ char name[10];
-+
-+ if (!sht->proc_dir)
-+ return;
-
- sprintf(name,"%d", shost->host_no);
- p = create_proc_read_entry(name, S_IFREG | S_IRUGO | S_IWUSR,
-@@ -107,20 +124,18 @@ void scsi_proc_host_add(struct Scsi_Host
- }
-
- p->write_proc = proc_scsi_write_proc;
-- p->owner = shost->hostt->module;
-+ p->owner = sht->module;
- }
-
- void scsi_proc_host_rm(struct Scsi_Host *shost)
- {
-- struct scsi_host_template *sht = shost->hostt;
- char name[10];
-
-- if (sht->proc_info) {
-- sprintf(name,"%d", shost->host_no);
-- remove_proc_entry(name, sht->proc_dir);
-- if (!sht->present)
-- remove_proc_entry(sht->proc_name, proc_scsi);
-- }
-+ if (!shost->hostt->proc_dir)
-+ return;
-+
-+ sprintf(name,"%d", shost->host_no);
-+ remove_proc_entry(name, shost->hostt->proc_dir);
- }
-
- static int proc_print_scsidevice(struct device *dev, void *data)
---- linux-2.6.0-test1/drivers/scsi/scsi_scan.c 2003-07-10 18:50:31.000000000 -0700
-+++ 25/drivers/scsi/scsi_scan.c 2003-07-19 17:03:50.000000000 -0700
-@@ -29,7 +29,7 @@
- #include <linux/module.h>
- #include <linux/moduleparam.h>
- #include <linux/init.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
-
- #include "scsi.h"
- #include "hosts.h"
-@@ -464,8 +464,7 @@ static void scsi_set_name(struct scsi_de
- while (i >= 0 && type[i] == ' ')
- type[i--] = '\0';
-
-- snprintf(sdev->sdev_driverfs_dev.name, DEVICE_NAME_SIZE, "SCSI %s",
-- type);
-+ snprintf(sdev->sdev_gendev.name, DEVICE_NAME_SIZE, "SCSI %s", type);
- }
-
- /**
---- linux-2.6.0-test1/drivers/scsi/scsi_syms.c 2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/scsi_syms.c 2003-07-19 17:03:50.000000000 -0700
-@@ -11,7 +11,7 @@
- #include <linux/slab.h>
- #include <linux/ioport.h>
- #include <linux/kernel.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/fs.h>
-
- #include <asm/system.h>
-@@ -34,6 +34,7 @@ EXPORT_SYMBOL(scsi_register_driver);
- EXPORT_SYMBOL(scsi_register_interface);
- EXPORT_SYMBOL(scsi_host_alloc);
- EXPORT_SYMBOL(scsi_add_host);
-+EXPORT_SYMBOL(scsi_scan_host);
- EXPORT_SYMBOL(scsi_remove_host);
- EXPORT_SYMBOL(scsi_host_get);
- EXPORT_SYMBOL(scsi_host_put);
---- linux-2.6.0-test1/drivers/scsi/scsi_sysfs.c 2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/scsi_sysfs.c 2003-07-19 17:03:50.000000000 -0700
-@@ -45,7 +45,7 @@ shost_rd_attr(cmd_per_lun, "%hd\n");
- shost_rd_attr(sg_tablesize, "%hu\n");
- shost_rd_attr(unchecked_isa_dma, "%d\n");
-
--struct class_device_attribute *scsi_sysfs_shost_attrs[] = {
-+static struct class_device_attribute *scsi_sysfs_shost_attrs[] = {
- &class_device_attr_unique_id,
- &class_device_attr_host_busy,
- &class_device_attr_cmd_per_lun,
-@@ -204,7 +204,7 @@ store_rescan_field (struct device *dev,
- static DEVICE_ATTR(rescan, S_IWUSR, NULL, store_rescan_field)
-
- /* Default template for device attributes. May NOT be modified */
--struct device_attribute *scsi_sysfs_sdev_attrs[] = {
-+static struct device_attribute *scsi_sysfs_sdev_attrs[] = {
- &dev_attr_device_blocked,
- &dev_attr_queue_depth,
- &dev_attr_type,
-@@ -228,6 +228,42 @@ static void scsi_device_release(struct d
- scsi_free_sdev(sdev);
- }
-
-+static struct device_attribute *attr_overridden(
-+ struct device_attribute **attrs,
-+ struct device_attribute *attr)
-+{
-+ int i;
-+
-+ if (!attrs)
-+ return NULL;
-+ for (i = 0; attrs[i]; i++)
-+ if (!strcmp(attrs[i]->attr.name, attr->attr.name))
-+ return attrs[i];
-+ return NULL;
-+}
-+
-+static int attr_add(struct device *dev, struct device_attribute *attr)
-+{
-+ struct device_attribute *base_attr;
-+
-+ /*
-+ * Spare the caller from having to copy things it's not interested in.
-+ */
-+ base_attr = attr_overridden(scsi_sysfs_sdev_attrs, attr);
-+ if (base_attr) {
-+ /* extend permissions */
-+ attr->attr.mode |= base_attr->attr.mode;
-+
-+ /* override null show/store with default */
-+ if (!attr->show)
-+ attr->show = base_attr->show;
-+ if (!attr->store)
-+ attr->store = base_attr->store;
-+ }
-+
-+ return device_create_file(dev, attr);
-+}
-+
- /**
- * scsi_device_register - register a scsi device with the scsi bus
- * @sdev: scsi_device to register
-@@ -239,20 +275,20 @@ int scsi_device_register(struct scsi_dev
- {
- int error = 0, i;
-
-- device_initialize(&sdev->sdev_driverfs_dev);
-- sprintf(sdev->sdev_driverfs_dev.bus_id,"%d:%d:%d:%d",
-+ device_initialize(&sdev->sdev_gendev);
-+ sprintf(sdev->sdev_gendev.bus_id,"%d:%d:%d:%d",
- sdev->host->host_no, sdev->channel, sdev->id, sdev->lun);
-- sdev->sdev_driverfs_dev.parent = &sdev->host->host_gendev;
-- sdev->sdev_driverfs_dev.bus = &scsi_bus_type;
-- sdev->sdev_driverfs_dev.release = scsi_device_release;
-+ sdev->sdev_gendev.parent = &sdev->host->shost_gendev;
-+ sdev->sdev_gendev.bus = &scsi_bus_type;
-+ sdev->sdev_gendev.release = scsi_device_release;
-
- class_device_initialize(&sdev->sdev_classdev);
-- sdev->sdev_classdev.dev = &sdev->sdev_driverfs_dev;
-+ sdev->sdev_classdev.dev = &sdev->sdev_gendev;
- sdev->sdev_classdev.class = &sdev_class;
- snprintf(sdev->sdev_classdev.class_id, BUS_ID_SIZE, "%d:%d:%d:%d",
- sdev->host->host_no, sdev->channel, sdev->id, sdev->lun);
-
-- error = device_add(&sdev->sdev_driverfs_dev);
-+ error = device_add(&sdev->sdev_gendev);
- if (error) {
- printk(KERN_INFO "error 1\n");
- return error;
-@@ -260,16 +296,28 @@ int scsi_device_register(struct scsi_dev
- error = class_device_add(&sdev->sdev_classdev);
- if (error) {
- printk(KERN_INFO "error 2\n");
-- device_unregister(&sdev->sdev_driverfs_dev);
-+ device_unregister(&sdev->sdev_gendev);
- return error;
- }
-
-- for (i = 0; !error && sdev->host->hostt->sdev_attrs[i] != NULL; i++)
-- error = device_create_file(&sdev->sdev_driverfs_dev,
-- sdev->host->hostt->sdev_attrs[i]);
--
-- if (error)
-- scsi_device_unregister(sdev);
-+ if (sdev->host->hostt->sdev_attrs) {
-+ for (i = 0; sdev->host->hostt->sdev_attrs[i]; i++) {
-+ error = attr_add(&sdev->sdev_gendev,
-+ sdev->host->hostt->sdev_attrs[i]);
-+ if (error)
-+ scsi_device_unregister(sdev);
-+ }
-+ }
-+
-+ for (i = 0; scsi_sysfs_sdev_attrs[i]; i++) {
-+ if (!attr_overridden(sdev->host->hostt->sdev_attrs,
-+ scsi_sysfs_sdev_attrs[i])) {
-+ error = device_create_file(&sdev->sdev_gendev,
-+ scsi_sysfs_sdev_attrs[i]);
-+ if (error)
-+ scsi_device_unregister(sdev);
-+ }
-+ }
-
- return error;
- }
-@@ -280,12 +328,8 @@ int scsi_device_register(struct scsi_dev
- **/
- void scsi_device_unregister(struct scsi_device *sdev)
- {
-- int i;
--
-- for (i = 0; sdev->host->hostt->sdev_attrs[i] != NULL; i++)
-- device_remove_file(&sdev->sdev_driverfs_dev, sdev->host->hostt->sdev_attrs[i]);
- class_device_unregister(&sdev->sdev_classdev);
-- device_unregister(&sdev->sdev_driverfs_dev);
-+ device_unregister(&sdev->sdev_gendev);
- }
-
- int scsi_register_driver(struct device_driver *drv)
-@@ -315,20 +359,57 @@ static void scsi_host_release(struct dev
-
- void scsi_sysfs_init_host(struct Scsi_Host *shost)
- {
-- device_initialize(&shost->host_gendev);
-- snprintf(shost->host_gendev.bus_id, BUS_ID_SIZE, "host%d",
-+ device_initialize(&shost->shost_gendev);
-+ snprintf(shost->shost_gendev.bus_id, BUS_ID_SIZE, "host%d",
- shost->host_no);
-- snprintf(shost->host_gendev.name, DEVICE_NAME_SIZE, "%s",
-+ snprintf(shost->shost_gendev.name, DEVICE_NAME_SIZE, "%s",
- shost->hostt->proc_name);
-- shost->host_gendev.release = scsi_host_release;
-+ shost->shost_gendev.release = scsi_host_release;
-
-- class_device_initialize(&shost->class_dev);
-- shost->class_dev.dev = &shost->host_gendev;
-- shost->class_dev.class = &shost_class;
-- snprintf(shost->class_dev.class_id, BUS_ID_SIZE, "host%d",
-+ class_device_initialize(&shost->shost_classdev);
-+ shost->shost_classdev.dev = &shost->shost_gendev;
-+ shost->shost_classdev.class = &shost_class;
-+ snprintf(shost->shost_classdev.class_id, BUS_ID_SIZE, "host%d",
- shost->host_no);
- }
-
-+static struct class_device_attribute *class_attr_overridden(
-+ struct class_device_attribute **attrs,
-+ struct class_device_attribute *attr)
-+{
-+ int i;
-+
-+ if (!attrs)
-+ return NULL;
-+ for (i = 0; attrs[i]; i++)
-+ if (!strcmp(attrs[i]->attr.name, attr->attr.name))
-+ return attrs[i];
-+ return NULL;
-+}
-+
-+static int class_attr_add(struct class_device *classdev,
-+ struct class_device_attribute *attr)
-+{
-+ struct class_device_attribute *base_attr;
-+
-+ /*
-+ * Spare the caller from having to copy things it's not interested in.
-+ */
-+ base_attr = class_attr_overridden(scsi_sysfs_shost_attrs, attr);
-+ if (base_attr) {
-+ /* extend permissions */
-+ attr->attr.mode |= base_attr->attr.mode;
-+
-+ /* override null show/store with default */
-+ if (!attr->show)
-+ attr->show = base_attr->show;
-+ if (!attr->store)
-+ attr->store = base_attr->store;
-+ }
-+
-+ return class_device_create_file(classdev, attr);
-+}
-+
- /**
- * scsi_sysfs_add_host - add scsi host to subsystem
- * @shost: scsi host struct to add to subsystem
-@@ -336,31 +417,44 @@ void scsi_sysfs_init_host(struct Scsi_Ho
- **/
- int scsi_sysfs_add_host(struct Scsi_Host *shost, struct device *dev)
- {
-- int i, error;
-+ int error, i;
-
-- if (!shost->host_gendev.parent)
-- shost->host_gendev.parent = dev ? dev : &legacy_bus;
-+ if (!shost->shost_gendev.parent)
-+ shost->shost_gendev.parent = dev ? dev : &legacy_bus;
-
-- error = device_add(&shost->host_gendev);
-+ error = device_add(&shost->shost_gendev);
- if (error)
- return error;
-
-- error = class_device_add(&shost->class_dev);
-+ error = class_device_add(&shost->shost_classdev);
- if (error)
- goto clean_device;
-
-- for (i = 0; !error && shost->hostt->shost_attrs[i] != NULL; i++)
-- error = class_device_create_file(&shost->class_dev,
-- shost->hostt->shost_attrs[i]);
-- if (error)
-- goto clean_class;
-+ if (shost->hostt->shost_attrs) {
-+ for (i = 0; shost->hostt->shost_attrs[i]; i++) {
-+ error = class_attr_add(&shost->shost_classdev,
-+ shost->hostt->shost_attrs[i]);
-+ if (error)
-+ goto clean_class;
-+ }
-+ }
-+
-+ for (i = 0; scsi_sysfs_shost_attrs[i]; i++) {
-+ if (!class_attr_overridden(shost->hostt->shost_attrs,
-+ scsi_sysfs_shost_attrs[i])) {
-+ error = class_device_create_file(&shost->shost_classdev,
-+ scsi_sysfs_shost_attrs[i]);
-+ if (error)
-+ goto clean_class;
-+ }
-+ }
-
- return error;
-
- clean_class:
-- class_device_del(&shost->class_dev);
-+ class_device_del(&shost->shost_classdev);
- clean_device:
-- device_del(&shost->host_gendev);
-+ device_del(&shost->shost_gendev);
-
- return error;
- }
-@@ -371,133 +465,6 @@ clean_device:
- **/
- void scsi_sysfs_remove_host(struct Scsi_Host *shost)
- {
-- class_device_del(&shost->class_dev);
-- device_del(&shost->host_gendev);
--}
--
--/** scsi_sysfs_modify_shost_attribute - modify or add a host class attribute
-- *
-- * @class_attrs:host class attribute list to be added to or modified
-- * @attr: individual attribute to change or added
-- *
-- * returns zero if successful or error if not
-- **/
--int scsi_sysfs_modify_shost_attribute(
-- struct class_device_attribute ***class_attrs,
-- struct class_device_attribute *attr)
--{
-- int modify = -1;
-- int num_attrs;
--
-- if(*class_attrs == NULL)
-- *class_attrs = scsi_sysfs_shost_attrs;
--
-- for(num_attrs=0; (*class_attrs)[num_attrs] != NULL; num_attrs++)
-- if(strcmp((*class_attrs)[num_attrs]->attr.name,
-- attr->attr.name) == 0)
-- modify = num_attrs;
--
-- if(*class_attrs == scsi_sysfs_shost_attrs || modify < 0) {
-- /* note: need space for null at the end as well */
-- struct class_device_attribute **tmp_attrs =
-- kmalloc(sizeof(*tmp_attrs) *
-- (num_attrs + (modify >= 0 ? 1 : 2)),
-- GFP_KERNEL);
-- if(tmp_attrs == NULL)
-- return -ENOMEM;
-- memcpy(tmp_attrs, *class_attrs, sizeof(*tmp_attrs) *
-- (num_attrs + 1));
-- if(*class_attrs != scsi_sysfs_shost_attrs)
-- kfree(*class_attrs);
-- *class_attrs = tmp_attrs;
-- }
-- if(modify >= 0) {
-- /* spare the caller from having to copy things it's
-- * not interested in */
-- struct class_device_attribute *old_attr =
-- (*class_attrs)[modify];
-- /* extend permissions */
-- attr->attr.mode |= old_attr->attr.mode;
--
-- /* override null show/store with default */
-- if(attr->show == NULL)
-- attr->show = old_attr->show;
-- if(attr->store == NULL)
-- attr->store = old_attr->store;
-- (*class_attrs)[modify] = attr;
-- } else {
-- (*class_attrs)[num_attrs++] = attr;
-- (*class_attrs)[num_attrs] = NULL;
-- }
--
-- return 0;
--}
--EXPORT_SYMBOL(scsi_sysfs_modify_shost_attribute);
--
--/** scsi_sysfs_modify_sdev_attribute - modify or add a host device attribute
-- *
-- * @dev_attrs: pointer to the attribute list to be added to or modified
-- * @attr: individual attribute to change or added
-- *
-- * returns zero if successful or error if not
-- **/
--int scsi_sysfs_modify_sdev_attribute(struct device_attribute ***dev_attrs,
-- struct device_attribute *attr)
--{
-- int modify = -1;
-- int num_attrs;
--
-- if(*dev_attrs == NULL)
-- *dev_attrs = scsi_sysfs_sdev_attrs;
--
-- for(num_attrs=0; (*dev_attrs)[num_attrs] != NULL; num_attrs++)
-- if(strcmp((*dev_attrs)[num_attrs]->attr.name,
-- attr->attr.name) == 0)
-- modify = num_attrs;
--
-- if(*dev_attrs == scsi_sysfs_sdev_attrs || modify < 0) {
-- /* note: need space for null at the end as well */
-- struct device_attribute **tmp_attrs =
-- kmalloc(sizeof(*tmp_attrs) *
-- (num_attrs + (modify >= 0 ? 1 : 2)),
-- GFP_KERNEL);
-- if(tmp_attrs == NULL)
-- return -ENOMEM;
-- memcpy(tmp_attrs, *dev_attrs, sizeof(*tmp_attrs) *
-- (num_attrs + 1));
-- if(*dev_attrs != scsi_sysfs_sdev_attrs)
-- kfree(*dev_attrs);
-- *dev_attrs = tmp_attrs;
-- }
-- if(modify >= 0) {
-- /* spare the caller from having to copy things it's
-- * not interested in */
-- struct device_attribute *old_attr =
-- (*dev_attrs)[modify];
-- /* extend permissions */
-- attr->attr.mode |= old_attr->attr.mode;
--
-- /* override null show/store with default */
-- if(attr->show == NULL)
-- attr->show = old_attr->show;
-- if(attr->store == NULL)
-- attr->store = old_attr->store;
-- (*dev_attrs)[modify] = attr;
-- } else {
-- (*dev_attrs)[num_attrs++] = attr;
-- (*dev_attrs)[num_attrs] = NULL;
-- }
--
-- return 0;
--}
--EXPORT_SYMBOL(scsi_sysfs_modify_sdev_attribute);
--
--void scsi_sysfs_release_attributes(struct scsi_host_template *hostt)
--{
-- if(hostt->sdev_attrs != scsi_sysfs_sdev_attrs)
-- kfree(hostt->sdev_attrs);
--
-- if(hostt->shost_attrs != scsi_sysfs_shost_attrs)
-- kfree(hostt->shost_attrs);
-+ class_device_del(&shost->shost_classdev);
-+ device_del(&shost->shost_gendev);
- }
--EXPORT_SYMBOL(scsi_sysfs_release_attributes);
---- linux-2.6.0-test1/drivers/scsi/sd.c 2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/sd.c 2003-07-19 17:03:50.000000000 -0700
-@@ -43,7 +43,7 @@
- #include <linux/init.h>
- #include <linux/reboot.h>
- #include <linux/vmalloc.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/blkpg.h>
- #include <asm/uaccess.h>
-
-@@ -606,35 +606,8 @@ not_present:
-
- static void sd_rescan(struct device *dev)
- {
-- struct scsi_device *sdp = to_scsi_device(dev);
- struct scsi_disk *sdkp = dev_get_drvdata(dev);
-- struct gendisk *gd;
-- struct scsi_request *SRpnt;
-- unsigned char *buffer;
--
-- if (!sdkp || sdp->online == FALSE || !sdkp->media_present)
-- return;
--
-- gd = sdkp->disk;
--
-- SCSI_LOG_HLQUEUE(3, printk("sd_rescan: disk=%s\n", gd->disk_name));
--
-- SRpnt = scsi_allocate_request(sdp);
-- if (!SRpnt) {
-- printk(KERN_WARNING "(sd_rescan:) Request allocation "
-- "failure.\n");
-- return;
-- }
--
-- if (sdkp->device->host->unchecked_isa_dma)
-- buffer = kmalloc(512, GFP_DMA);
-- else
-- buffer = kmalloc(512, GFP_KERNEL);
--
-- sd_read_capacity(sdkp, gd->disk_name, SRpnt, buffer);
-- set_capacity(gd, sdkp->capacity);
-- scsi_release_request(SRpnt);
-- kfree(buffer);
-+ sd_revalidate_disk(sdkp->disk);
- }
-
- static struct block_device_operations sd_fops = {
-@@ -1318,7 +1291,7 @@ static int sd_probe(struct device *dev)
-
- sd_revalidate_disk(gd);
-
-- gd->driverfs_dev = &sdp->sdev_driverfs_dev;
-+ gd->driverfs_dev = &sdp->sdev_gendev;
- gd->flags = GENHD_FL_DRIVERFS;
- if (sdp->removable)
- gd->flags |= GENHD_FL_REMOVABLE;
---- linux-2.6.0-test1/drivers/scsi/seagate.c 2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/seagate.c 2003-07-19 17:03:50.000000000 -0700
-@@ -95,7 +95,7 @@
- #include <linux/proc_fs.h>
- #include <linux/init.h>
- #include <linux/delay.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/stat.h>
-
- #include <asm/io.h>
---- linux-2.6.0-test1/drivers/scsi/sg.c 2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/sg.c 2003-07-19 17:06:39.000000000 -0700
-@@ -61,7 +61,7 @@ static int sg_version_num = 30529; /* 2
- #include <asm/uaccess.h>
- #include <asm/system.h>
-
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include "scsi.h"
- #include "hosts.h"
- #include <scsi/scsi_driver.h>
-@@ -83,7 +83,7 @@ static void sg_proc_cleanup(void);
- #define SG_ALLOW_DIO_DEF 0
- #define SG_ALLOW_DIO_CODE /* compile out by commenting this define */
-
--#define SG_MAX_DEVS_MASK ((1U << KDEV_MINOR_BITS) - 1)
-+#define SG_MAX_DEVS_MASK 255
-
- /*
- * Suppose you want to calculate the formula muldiv(x,m,d)=int(x * m / d)
---- linux-2.6.0-test1/drivers/scsi/sgiwd93.c 2003-06-14 12:18:34.000000000 -0700
-+++ 25/drivers/scsi/sgiwd93.c 2003-07-19 17:03:50.000000000 -0700
-@@ -15,7 +15,7 @@
- #include <linux/init.h>
- #include <linux/types.h>
- #include <linux/mm.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/version.h>
- #include <linux/delay.h>
- #include <linux/spinlock.h>
---- linux-2.6.0-test1/drivers/scsi/sim710.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/sim710.c 2003-07-19 17:03:50.000000000 -0700
-@@ -29,7 +29,7 @@
- #include <linux/config.h>
- #include <linux/module.h>
-
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/device.h>
- #include <linux/init.h>
- #include <linux/mca.h>
-@@ -138,7 +138,8 @@ sim710_probe_common(struct device *dev,
- goto out_unregister;
- }
-
-- scsi_add_host(host, dev);
-+ scsi_add_host(host, dev); /* XXX handle failure */
-+ scsi_scan_host(host);
- hostdata->dev = dev;
-
- return 0;
---- linux-2.6.0-test1/drivers/scsi/sr.c 2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/sr.c 2003-07-19 17:06:39.000000000 -0700
-@@ -43,7 +43,7 @@
- #include <linux/cdrom.h>
- #include <linux/interrupt.h>
- #include <linux/init.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <asm/uaccess.h>
-
- #include "scsi.h"
-@@ -59,7 +59,7 @@
- MODULE_PARM(xa_test, "i"); /* see sr_ioctl.c */
-
-
--#define SR_DISKS (1 << KDEV_MINOR_BITS)
-+#define SR_DISKS 256
-
- #define MAX_RETRIES 3
- #define SR_TIMEOUT (30 * HZ)
-@@ -533,7 +533,7 @@ static int sr_probe(struct device *dev)
-
- snprintf(disk->devfs_name, sizeof(disk->devfs_name),
- "%s/cd", sdev->devfs_name);
-- disk->driverfs_dev = &sdev->sdev_driverfs_dev;
-+ disk->driverfs_dev = &sdev->sdev_gendev;
- register_cdrom(&cd->cdi);
- set_capacity(disk, cd->capacity);
- disk->private_data = &cd->driver;
---- linux-2.6.0-test1/drivers/scsi/sr_ioctl.c 2003-06-14 12:18:24.000000000 -0700
-+++ 25/drivers/scsi/sr_ioctl.c 2003-07-19 17:03:50.000000000 -0700
-@@ -4,7 +4,7 @@
- #include <linux/fs.h>
- #include <linux/errno.h>
- #include <linux/string.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/blkpg.h>
- #include <linux/cdrom.h>
- #include <asm/io.h>
---- linux-2.6.0-test1/drivers/scsi/sr_vendor.c 2003-06-14 12:18:09.000000000 -0700
-+++ 25/drivers/scsi/sr_vendor.c 2003-07-19 17:03:50.000000000 -0700
-@@ -39,7 +39,7 @@
- #include <linux/string.h>
- #include <linux/bcd.h>
-
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include "scsi.h"
- #include "hosts.h"
- #include <scsi/scsi_ioctl.h>
---- linux-2.6.0-test1/drivers/scsi/st.c 2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/st.c 2003-07-19 17:03:50.000000000 -0700
-@@ -32,7 +32,7 @@ static char *verstr = "20030622";
- #include <linux/ioctl.h>
- #include <linux/fcntl.h>
- #include <linux/spinlock.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/moduleparam.h>
- #include <linux/devfs_fs_kernel.h>
- #include <asm/uaccess.h>
---- linux-2.6.0-test1/drivers/scsi/sun3_scsi.c 2003-06-14 12:17:57.000000000 -0700
-+++ 25/drivers/scsi/sun3_scsi.c 2003-07-19 17:03:50.000000000 -0700
-@@ -61,7 +61,7 @@
- #include <linux/sched.h>
- #include <linux/ioport.h>
- #include <linux/init.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
-
- #include <asm/io.h>
- #include <asm/system.h>
---- linux-2.6.0-test1/drivers/scsi/sun3_scsi_vme.c 2003-06-14 12:18:52.000000000 -0700
-+++ 25/drivers/scsi/sun3_scsi_vme.c 2003-07-19 17:03:50.000000000 -0700
-@@ -23,7 +23,7 @@
- #include <linux/sched.h>
- #include <linux/ioport.h>
- #include <linux/init.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
-
- #include <asm/io.h>
- #include <asm/system.h>
---- linux-2.6.0-test1/drivers/scsi/sun3x_esp.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/sun3x_esp.c 2003-07-19 17:03:50.000000000 -0700
-@@ -9,7 +9,7 @@
- #include <linux/types.h>
- #include <linux/string.h>
- #include <linux/slab.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/proc_fs.h>
- #include <linux/stat.h>
- #include <linux/delay.h>
---- linux-2.6.0-test1/drivers/scsi/sym53c416.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/sym53c416.c 2003-07-19 17:03:50.000000000 -0700
-@@ -40,7 +40,7 @@
- #include <asm/dma.h>
- #include <asm/system.h>
- #include <asm/io.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/version.h>
- #include <linux/isapnp.h>
- #include "scsi.h"
---- linux-2.6.0-test1/drivers/scsi/sym53c8xx_2/sym_glue.c 2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/sym53c8xx_2/sym_glue.c 2003-07-19 17:03:50.000000000 -0700
-@@ -1110,6 +1110,7 @@ static int sym_eh_handler(int op, char *
- int sts = -1;
- struct sym_eh_wait eh, *ep = &eh;
- char devname[20];
-+ unsigned long flags;
-
- sprintf(devname, "%s:%d:%d", sym_name(np), cmd->device->id, cmd->device->lun);
-
-@@ -1201,7 +1202,11 @@ finish:
- ep->timer.data = (u_long)cmd;
- ep->timed_out = 1; /* Be pessimistic for once :) */
- add_timer(&ep->timer);
-+ local_save_flags(flags);
-+ spin_unlock_irq(cmd->device->host->host_lock);
- down(&ep->sem);
-+ local_irq_restore(flags);
-+ spin_lock(cmd->device->host->host_lock);
- if (ep->timed_out)
- sts = -2;
- }
---- linux-2.6.0-test1/drivers/scsi/sym53c8xx_2/sym_glue.h 2003-06-14 12:18:51.000000000 -0700
-+++ 25/drivers/scsi/sym53c8xx_2/sym_glue.h 2003-07-19 17:03:50.000000000 -0700
-@@ -84,7 +84,7 @@
- #include <linux/stat.h>
- #include <linux/interrupt.h>
-
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
-
- #ifdef __sparc__
- # include <asm/irq.h>
---- linux-2.6.0-test1/drivers/scsi/sym53c8xx_2/sym_hipd.c 2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/sym53c8xx_2/sym_hipd.c 2003-07-19 17:04:52.000000000 -0700
-@@ -800,7 +800,8 @@ static int sym_prepare_setting(hcb_p np,
- * Btw, 'period' is in tenths of nanoseconds.
- */
- period = (4 * div_10M[0] + np->clock_khz - 1) / np->clock_khz;
-- if (period <= 250) np->minsync = 10;
-+ if (period == 250) np->minsync = 9;
-+ else if (period <= 250) np->minsync = 10;
- else if (period <= 303) np->minsync = 11;
- else if (period <= 500) np->minsync = 12;
- else np->minsync = (period + 40 - 1) / 40;
---- linux-2.6.0-test1/drivers/scsi/sym53c8xx.c 2003-06-14 12:18:25.000000000 -0700
-+++ 25/drivers/scsi/sym53c8xx.c 2003-07-19 17:03:50.000000000 -0700
-@@ -123,7 +123,7 @@
- #include <linux/timer.h>
- #include <linux/stat.h>
-
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
-
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,1,35)
- #include <linux/init.h>
-@@ -1327,7 +1327,7 @@ MODULE_PARM(sym53c8xx, "s");
- #define SetScsiAbortResult(cmd) SetScsiResult(cmd, DID_ABORT, 0xff)
- #endif
-
--static void sym53c8xx_intr(int irq, void *dev_id, struct pt_regs * regs);
-+static irqreturn_t sym53c8xx_intr(int irq, void *dev_id, struct pt_regs * regs);
- static void sym53c8xx_timeout(unsigned long np);
-
- #define initverbose (driver_setup.verbose)
-@@ -7374,7 +7374,7 @@ void ncr_complete (ncb_p np, ccb_p cp)
- }
- if (cp->xerr_status & XE_BAD_PHASE) {
- PRINT_ADDR(cmd);
-- printk ("illegal scsi phase (4/5).\n");
-+ printk ("invalid scsi phase (4/5).\n");
- }
- if (cp->xerr_status & XE_SODL_UNRUN) {
- PRINT_ADDR(cmd);
-@@ -13660,7 +13660,7 @@ printk("sym53c8xx : command successfully
- ** routine for each host that uses this IRQ.
- */
-
--static void sym53c8xx_intr(int irq, void *dev_id, struct pt_regs * regs)
-+static irqreturn_t sym53c8xx_intr(int irq, void *dev_id, struct pt_regs * regs)
- {
- unsigned long flags;
- ncb_p np = (ncb_p) dev_id;
-@@ -13685,6 +13685,7 @@ static void sym53c8xx_intr(int irq, void
- ncr_flush_done_cmds(done_list);
- NCR_UNLOCK_SCSI_DONE(done_list->device->host, flags);
- }
-+ return IRQ_HANDLED;
- }
-
- /*
---- linux-2.6.0-test1/drivers/scsi/t128.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/t128.c 2003-07-19 17:03:50.000000000 -0700
-@@ -110,7 +110,7 @@
- #include <linux/signal.h>
- #include <linux/sched.h>
- #include <asm/io.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/interrupt.h>
- #include <linux/stat.h>
- #include <linux/init.h>
---- linux-2.6.0-test1/drivers/scsi/tmscsim.c 2003-06-14 12:18:52.000000000 -0700
-+++ 25/drivers/scsi/tmscsim.c 2003-07-19 17:03:50.000000000 -0700
-@@ -224,7 +224,7 @@
- #include <linux/mm.h>
- #include <linux/config.h>
- #include <linux/version.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/timer.h>
-
- #include "scsi.h"
---- linux-2.6.0-test1/drivers/scsi/u14-34f.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/u14-34f.c 2003-07-19 17:03:50.000000000 -0700
-@@ -414,7 +414,7 @@
- #include <asm/system.h>
- #include <asm/byteorder.h>
- #include <linux/proc_fs.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/interrupt.h>
- #include <linux/stat.h>
- #include <linux/pci.h>
---- linux-2.6.0-test1/drivers/scsi/ultrastor.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/ultrastor.c 2003-07-19 17:03:50.000000000 -0700
-@@ -128,7 +128,7 @@
- */
-
- #include <linux/module.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/interrupt.h>
- #include <linux/stddef.h>
- #include <linux/string.h>
---- linux-2.6.0-test1/drivers/scsi/wd33c93.c 2003-06-14 12:18:25.000000000 -0700
-+++ 25/drivers/scsi/wd33c93.c 2003-07-19 17:03:50.000000000 -0700
-@@ -79,7 +79,7 @@
- #include <linux/delay.h>
- #include <linux/version.h>
- #include <linux/init.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <asm/irq.h>
-
- #include "scsi.h"
---- linux-2.6.0-test1/drivers/scsi/wd7000.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/wd7000.c 2003-07-19 17:03:50.000000000 -0700
-@@ -174,7 +174,7 @@
- #include <linux/spinlock.h>
- #include <linux/ioport.h>
- #include <linux/proc_fs.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/init.h>
- #include <linux/stat.h>
-
---- linux-2.6.0-test1/drivers/scsi/zalon.c 2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/zalon.c 2003-07-19 17:03:50.000000000 -0700
-@@ -7,7 +7,7 @@
- #include <linux/types.h>
- #include <linux/stat.h>
- #include <linux/mm.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/sched.h>
- #include <linux/version.h>
- #include <linux/config.h>
-@@ -85,7 +85,7 @@ zalon_scsi_callback(struct parisc_device
- {
- struct gsc_irq gsc_irq;
- u32 zalon_vers;
-- int irq;
-+ int irq, error = -ENODEV;
- unsigned long zalon = dev->hpa;
- unsigned long io_port = zalon + GSC_SCSI_ZALON_OFFSET;
- static int unit = 0;
-@@ -147,11 +147,18 @@ zalon_scsi_callback(struct parisc_device
-
- dev_set_drvdata(&dev->dev, host);
-
-- scsi_add_host(host, &dev->dev);
-+ error = scsi_add_host(host, &dev->dev);
-+ if (error)
-+ goto fail_free_irq;
-
-+ scsi_scan_host(host);
- return 0;
-+
-+ fail_free_irq:
-+ free_irq(irq, host);
- fail:
-- return -ENODEV;
-+ ncr53c8xx_release(host);
-+ return error;
- }
-
- static struct parisc_device_id zalon_tbl[] = {
---- linux-2.6.0-test1/drivers/serial/8250.c 2003-07-02 14:53:16.000000000 -0700
-+++ 25/drivers/serial/8250.c 2003-07-19 17:04:02.000000000 -0700
-@@ -823,7 +823,7 @@ receive_chars(struct uart_8250_port *up,
- if (unlikely(tty->flip.count >= TTY_FLIPBUF_SIZE)) {
- tty->flip.work.func((void *)tty);
- if (tty->flip.count >= TTY_FLIPBUF_SIZE)
-- return; // if TTY_DONT_FLIP is set
-+ return; /* if TTY_DONT_FLIP is set */
- }
- ch = serial_inp(up, UART_RX);
- *tty->flip.char_buf_ptr = ch;
-@@ -1183,13 +1183,20 @@ static void serial8250_break_ctl(struct
- serial_out(up, UART_LCR, up->lcr);
- spin_unlock_irqrestore(&up->port.lock, flags);
- }
-+#ifdef CONFIG_KGDB
-+static int kgdb_irq = -1;
-+#endif
-
- static int serial8250_startup(struct uart_port *port)
- {
- struct uart_8250_port *up = (struct uart_8250_port *)port;
- unsigned long flags;
- int retval;
--
-+#ifdef CONFIG_KGDB
-+ if ( up->port.irq == kgdb_irq){
-+ return -EBUSY;
-+ }
-+#endif
- if (up->port.type == PORT_16C950) {
- /* Wake up and initialize UART */
- up->acr = 0;
-@@ -1853,6 +1860,11 @@ static void __init serial8250_register_p
- for (i = 0; i < UART_NR; i++) {
- struct uart_8250_port *up = &serial8250_ports[i];
-
-+#ifdef CONFIG_KGDB
-+ if(up->port.irq == kgdb_irq){
-+ up->port.iobase = up->port.mapbase = 0;
-+ }
-+#endif
- up->port.line = i;
- up->port.ops = &serial8250_pops;
- init_timer(&up->timer);
-@@ -2116,7 +2128,31 @@ void serial8250_resume_port(int line, u3
- {
- uart_resume_port(&serial8250_reg, &serial8250_ports[line].port, level);
- }
--
-+#ifdef CONFIG_KGDB
-+/*
-+ * Find all the ports using the given irq and shut them down.
-+ * Result should be that the irq will be released.
-+ */
-+void shutdown_for_kgdb(struct async_struct * info)
-+{
-+ int irq = info->state->irq;
-+ struct uart_8250_port *up;
-+ int ttyS;
-+
-+ kgdb_irq = irq; /* save for later init */
-+ for (ttyS = 0; ttyS < UART_NR; ttyS++){
-+ up = &serial8250_ports[ttyS];
-+ if( up->port.irq == irq && (irq_lists + irq)->head){
-+#ifdef CONFIG_DEBUG_SPINLOCK /* ugly business... */
-+ if(up->port.lock.magic != SPINLOCK_MAGIC){
-+ spin_lock_init(&up->port.lock);
-+ }
-+#endif
-+ serial8250_shutdown(&up->port);
-+ }
-+ }
-+}
-+#endif
- static int __init serial8250_init(void)
- {
- int ret, i;
---- linux-2.6.0-test1/drivers/serial/core.c 2003-07-10 18:50:31.000000000 -0700
-+++ 25/drivers/serial/core.c 2003-07-19 17:03:50.000000000 -0700
-@@ -1667,23 +1667,25 @@ static int uart_line_info(char *buf, str
- return ret + 1;
- }
-
-- status = port->ops->get_mctrl(port);
--
-- ret += sprintf(buf + ret, " tx:%d rx:%d",
-- port->icount.tx, port->icount.rx);
-- if (port->icount.frame)
-- ret += sprintf(buf + ret, " fe:%d",
-- port->icount.frame);
-- if (port->icount.parity)
-- ret += sprintf(buf + ret, " pe:%d",
-- port->icount.parity);
-- if (port->icount.brk)
-- ret += sprintf(buf + ret, " brk:%d",
-- port->icount.brk);
-- if (port->icount.overrun)
-- ret += sprintf(buf + ret, " oe:%d",
-- port->icount.overrun);
--
-+ if(capable(CAP_SYS_ADMIN))
-+ {
-+ status = port->ops->get_mctrl(port);
-+
-+ ret += sprintf(buf + ret, " tx:%d rx:%d",
-+ port->icount.tx, port->icount.rx);
-+ if (port->icount.frame)
-+ ret += sprintf(buf + ret, " fe:%d",
-+ port->icount.frame);
-+ if (port->icount.parity)
-+ ret += sprintf(buf + ret, " pe:%d",
-+ port->icount.parity);
-+ if (port->icount.brk)
-+ ret += sprintf(buf + ret, " brk:%d",
-+ port->icount.brk);
-+ if (port->icount.overrun)
-+ ret += sprintf(buf + ret, " oe:%d",
-+ port->icount.overrun);
-+
- #define INFOBIT(bit,str) \
- if (port->mctrl & (bit)) \
- strncat(stat_buf, (str), sizeof(stat_buf) - \
-@@ -1693,19 +1695,22 @@ static int uart_line_info(char *buf, str
- strncat(stat_buf, (str), sizeof(stat_buf) - \
- strlen(stat_buf) - 2)
-
-- stat_buf[0] = '\0';
-- stat_buf[1] = '\0';
-- INFOBIT(TIOCM_RTS, "|RTS");
-- STATBIT(TIOCM_CTS, "|CTS");
-- INFOBIT(TIOCM_DTR, "|DTR");
-- STATBIT(TIOCM_DSR, "|DSR");
-- STATBIT(TIOCM_CAR, "|CD");
-- STATBIT(TIOCM_RNG, "|RI");
-- if (stat_buf[0])
-- stat_buf[0] = ' ';
-- strcat(stat_buf, "\n");
--
-- ret += sprintf(buf + ret, stat_buf);
-+ stat_buf[0] = '\0';
-+ stat_buf[1] = '\0';
-+ INFOBIT(TIOCM_RTS, "|RTS");
-+ STATBIT(TIOCM_CTS, "|CTS");
-+ INFOBIT(TIOCM_DTR, "|DTR");
-+ STATBIT(TIOCM_DSR, "|DSR");
-+ STATBIT(TIOCM_CAR, "|CD");
-+ STATBIT(TIOCM_RNG, "|RI");
-+ if (stat_buf[0])
-+ stat_buf[0] = ' ';
-+ strcat(stat_buf, "\n");
-+
-+ ret += sprintf(buf + ret, stat_buf);
-+ }
-+#undef STATBIT
-+#undef INFOBIT
- return ret;
- }
-
---- linux-2.6.0-test1/drivers/serial/Kconfig 2003-07-02 14:53:16.000000000 -0700
-+++ 25/drivers/serial/Kconfig 2003-07-19 17:03:50.000000000 -0700
-@@ -404,14 +404,19 @@ config SERIAL_SUNSAB_CONSOLE
- on your Sparc system as the console, you can do so by answering
- Y to this option.
-
--config V850E_NB85E_UART
-+config V850E_UART
- bool "NEC V850E on-chip UART support"
-- depends on V850E_NB85E || V850E2_ANNA || V850E_AS85EP1
-+ depends on V850E_MA1 || V850E_ME2 || V850E_TEG || V850E2_ANNA || V850E_AS85EP1
- default y
-
--config V850E_NB85E_UART_CONSOLE
-+config V850E_UARTB
-+ bool
-+ depends V850E_UART && V850E_ME2
-+ default y
-+
-+config V850E_UART_CONSOLE
- bool "Use NEC V850E on-chip UART for console"
-- depends on V850E_NB85E_UART
-+ depends on V850E_UART
-
- config SERIAL98
- tristate "PC-9800 8251-based primary serial port support"
-@@ -426,12 +431,12 @@ config SERIAL98_CONSOLE
-
- config SERIAL_CORE
- tristate
-- default m if SERIAL_AMBA!=y && SERIAL_CLPS711X!=y && SERIAL_21285!=y && !SERIAL_SA1100 && !SERIAL_ANAKIN && !SERIAL_UART00 && SERIAL_8250!=y && SERIAL_MUX!=y && !SERIAL_ROCKETPORT && !SERIAL_SUNCORE && !V850E_NB85E_UART && (SERIAL_AMBA=m || SERIAL_CLPS711X=m || SERIAL_21285=m || SERIAL_8250=m || SERIAL_MUX=m || SERIAL98=m)
-- default y if SERIAL_AMBA=y || SERIAL_CLPS711X=y || SERIAL_21285=y || SERIAL_SA1100 || SERIAL_ANAKIN || SERIAL_UART00 || SERIAL_8250=y || SERIAL_MUX=y || SERIAL_ROCKETPORT || SERIAL_SUNCORE || V850E_NB85E_UART || SERIAL98=y
-+ default m if SERIAL_AMBA!=y && SERIAL_CLPS711X!=y && SERIAL_21285!=y && !SERIAL_SA1100 && !SERIAL_ANAKIN && !SERIAL_UART00 && SERIAL_8250!=y && SERIAL_MUX!=y && !SERIAL_ROCKETPORT && !SERIAL_SUNCORE && !V850E_UART && (SERIAL_AMBA=m || SERIAL_CLPS711X=m || SERIAL_21285=m || SERIAL_8250=m || SERIAL_MUX=m || SERIAL98=m)
-+ default y if SERIAL_AMBA=y || SERIAL_CLPS711X=y || SERIAL_21285=y || SERIAL_SA1100 || SERIAL_ANAKIN || SERIAL_UART00 || SERIAL_8250=y || SERIAL_MUX=y || SERIAL_ROCKETPORT || SERIAL_SUNCORE || V850E_UART || SERIAL98=y
-
- config SERIAL_CORE_CONSOLE
- bool
-- depends on SERIAL_AMBA_CONSOLE || SERIAL_CLPS711X_CONSOLE || SERIAL_21285_CONSOLE || SERIAL_SA1100_CONSOLE || SERIAL_ANAKIN_CONSOLE || SERIAL_UART00_CONSOLE || SERIAL_8250_CONSOLE || SERIAL_MUX_CONSOLE || SERIAL_SUNZILOG_CONSOLE || SERIAL_SUNSU_CONSOLE || SERIAL_SUNSAB_CONSOLE || V850E_NB85E_UART_CONSOLE || SERIAL98_CONSOLE
-+ depends on SERIAL_AMBA_CONSOLE || SERIAL_CLPS711X_CONSOLE || SERIAL_21285_CONSOLE || SERIAL_SA1100_CONSOLE || SERIAL_ANAKIN_CONSOLE || SERIAL_UART00_CONSOLE || SERIAL_8250_CONSOLE || SERIAL_MUX_CONSOLE || SERIAL_SUNZILOG_CONSOLE || SERIAL_SUNSU_CONSOLE || SERIAL_SUNSAB_CONSOLE || V850E_UART_CONSOLE || SERIAL98_CONSOLE
- default y
-
- config SERIAL_68328
---- linux-2.6.0-test1/drivers/serial/Makefile 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/serial/Makefile 2003-07-19 17:03:50.000000000 -0700
-@@ -29,5 +29,5 @@ obj-$(CONFIG_SERIAL_MUX) += mux.o
- obj-$(CONFIG_SERIAL_68328) += 68328serial.o
- obj-$(CONFIG_SERIAL_68360) += 68360serial.o
- obj-$(CONFIG_SERIAL_COLDFIRE) += mcfserial.o
--obj-$(CONFIG_V850E_NB85E_UART) += nb85e_uart.o
-+obj-$(CONFIG_V850E_UART) += v850e_uart.o
- obj-$(CONFIG_SERIAL98) += serial98.o
---- linux-2.6.0-test1/drivers/serial/nb85e_uart.c 2003-06-14 12:18:30.000000000 -0700
-+++ /dev/null 2002-08-30 16:31:37.000000000 -0700
-@@ -1,610 +0,0 @@
--/*
-- * drivers/serial/nb85e_uart.c -- Serial I/O using V850E/NB85E on-chip UART
-- *
-- * Copyright (C) 2001,02,03 NEC Corporation
-- * Copyright (C) 2001,02,03 Miles Bader <miles@gnu.org>
-- *
-- * This file is subject to the terms and conditions of the GNU General
-- * Public License. See the file COPYING in the main directory of this
-- * archive for more details.
-- *
-- * Written by Miles Bader <miles@gnu.org>
-- */
--
--#include <linux/kernel.h>
--#include <linux/init.h>
--#include <linux/module.h>
--#include <linux/console.h>
--#include <linux/tty.h>
--#include <linux/tty_flip.h>
--#include <linux/serial.h>
--#include <linux/serial_core.h>
--
--#include <asm/nb85e_uart.h>
--#include <asm/nb85e_utils.h>
--
--/* Initial UART state. This may be overridden by machine-dependent headers. */
--#ifndef NB85E_UART_INIT_BAUD
--#define NB85E_UART_INIT_BAUD 115200
--#endif
--#ifndef NB85E_UART_INIT_CFLAGS
--#define NB85E_UART_INIT_CFLAGS (B115200 | CS8 | CREAD)
--#endif
--
--/* XXX This should be in a header file. */
--#define NB85E_UART_BRGC_MIN 8
--
--/* A string used for prefixing printed descriptions; since the same UART
-- macro is actually used on other chips than the V850E/NB85E. This must
-- be a constant string. */
--#ifndef NB85E_UART_CHIP_NAME
--#define NB85E_UART_CHIP_NAME "V850E/NB85E"
--#endif
--
--\f
--/* Helper functions for doing baud-rate/frequency calculations. */
--
--/* Calculate the minimum value for CKSR on this processor. */
--static inline unsigned cksr_min (void)
--{
-- int min = 0;
-- unsigned freq = NB85E_UART_BASE_FREQ;
-- while (freq > NB85E_UART_CKSR_MAX_FREQ) {
-- freq >>= 1;
-- min++;
-- }
-- return min;
--}
--
--/* Minimum baud rate possible. */
--#define min_baud() \
-- ((NB85E_UART_BASE_FREQ >> NB85E_UART_CKSR_MAX) / (2 * 255) + 1)
--
--/* Maximum baud rate possible. The error is quite high at max, though. */
--#define max_baud() \
-- ((NB85E_UART_BASE_FREQ >> cksr_min()) / (2 * NB85E_UART_BRGC_MIN))
--
--\f
--/* Low-level UART functions. */
--
--/* These masks define which control bits affect TX/RX modes, respectively. */
--#define RX_BITS \
-- (NB85E_UART_ASIM_PS_MASK | NB85E_UART_ASIM_CL_8 | NB85E_UART_ASIM_ISRM)
--#define TX_BITS \
-- (NB85E_UART_ASIM_PS_MASK | NB85E_UART_ASIM_CL_8 | NB85E_UART_ASIM_SL_2)
--
--/* The UART require various delays after writing control registers. */
--static inline void nb85e_uart_delay (unsigned cycles)
--{
-- /* The loop takes 2 insns, so loop CYCLES / 2 times. */
-- register unsigned count = cycles >> 1;
-- while (--count != 0)
-- /* nothing */;
--}
--
--/* Configure and turn on uart channel CHAN, using the termios `control
-- modes' bits in CFLAGS, and a baud-rate of BAUD. */
--void nb85e_uart_configure (unsigned chan, unsigned cflags, unsigned baud)
--{
-- int flags;
-- unsigned new_config = 0; /* What we'll write to the control reg. */
-- unsigned new_clk_divlog2; /* New baud-rate generate clock divider. */
-- unsigned new_brgen_count; /* New counter max for baud-rate generator.*/
-- /* These are the current values corresponding to the above. */
-- unsigned old_config, old_clk_divlog2, old_brgen_count;
--
-- /* Calculate new baud-rate generator config values. */
--
-- /* Calculate the log2 clock divider and baud-rate counter values
-- (note that the UART divides the resulting clock by 2, so
-- multiply BAUD by 2 here to compensate). */
-- calc_counter_params (NB85E_UART_BASE_FREQ, baud * 2,
-- cksr_min(), NB85E_UART_CKSR_MAX, 8/*bits*/,
-- &new_clk_divlog2, &new_brgen_count);
--
-- /* Figure out new configuration of control register. */
-- if (cflags & CSTOPB)
-- /* Number of stop bits, 1 or 2. */
-- new_config |= NB85E_UART_ASIM_SL_2;
-- if ((cflags & CSIZE) == CS8)
-- /* Number of data bits, 7 or 8. */
-- new_config |= NB85E_UART_ASIM_CL_8;
-- if (! (cflags & PARENB))
-- /* No parity check/generation. */
-- new_config |= NB85E_UART_ASIM_PS_NONE;
-- else if (cflags & PARODD)
-- /* Odd parity check/generation. */
-- new_config |= NB85E_UART_ASIM_PS_ODD;
-- else
-- /* Even parity check/generation. */
-- new_config |= NB85E_UART_ASIM_PS_EVEN;
-- if (cflags & CREAD)
-- /* Reading enabled. */
-- new_config |= NB85E_UART_ASIM_RXE;
--
-- new_config |= NB85E_UART_ASIM_TXE; /* Writing is always enabled. */
-- new_config |= NB85E_UART_ASIM_CAE;
-- new_config |= NB85E_UART_ASIM_ISRM; /* Errors generate a read-irq. */
--
-- /* Disable interrupts while we're twiddling the hardware. */
-- local_irq_save (flags);
--
--#ifdef NB85E_UART_PRE_CONFIGURE
-- NB85E_UART_PRE_CONFIGURE (chan, cflags, baud);
--#endif
--
-- old_config = NB85E_UART_ASIM (chan);
-- old_clk_divlog2 = NB85E_UART_CKSR (chan);
-- old_brgen_count = NB85E_UART_BRGC (chan);
--
-- if (new_clk_divlog2 != old_clk_divlog2
-- || new_brgen_count != old_brgen_count)
-- {
-- /* The baud rate has changed. First, disable the UART. */
-- NB85E_UART_ASIM (chan) = 0;
-- old_config = 0;
-- /* Reprogram the baud-rate generator. */
-- NB85E_UART_CKSR (chan) = new_clk_divlog2;
-- NB85E_UART_BRGC (chan) = new_brgen_count;
-- }
--
-- if (! (old_config & NB85E_UART_ASIM_CAE)) {
-- /* If we are enabling the uart for the first time, start
-- by turning on the enable bit, which must be done
-- before turning on any other bits. */
-- NB85E_UART_ASIM (chan) = NB85E_UART_ASIM_CAE;
-- /* Enabling the uart also resets it. */
-- old_config = NB85E_UART_ASIM_CAE;
-- }
--
-- if (new_config != old_config) {
-- /* Which of the TXE/RXE bits we'll temporarily turn off
-- before changing other control bits. */
-- unsigned temp_disable = 0;
-- /* Which of the TXE/RXE bits will be enabled. */
-- unsigned enable = 0;
-- unsigned changed_bits = new_config ^ old_config;
--
-- /* Which of RX/TX will be enabled in the new configuration. */
-- if (new_config & RX_BITS)
-- enable |= (new_config & NB85E_UART_ASIM_RXE);
-- if (new_config & TX_BITS)
-- enable |= (new_config & NB85E_UART_ASIM_TXE);
--
-- /* Figure out which of RX/TX needs to be disabled; note
-- that this will only happen if they're not already
-- disabled. */
-- if (changed_bits & RX_BITS)
-- temp_disable |= (old_config & NB85E_UART_ASIM_RXE);
-- if (changed_bits & TX_BITS)
-- temp_disable |= (old_config & NB85E_UART_ASIM_TXE);
--
-- /* We have to turn off RX and/or TX mode before changing
-- any associated control bits. */
-- if (temp_disable)
-- NB85E_UART_ASIM (chan) = old_config & ~temp_disable;
--
-- /* Write the new control bits, while RX/TX are disabled. */
-- if (changed_bits & ~enable)
-- NB85E_UART_ASIM (chan) = new_config & ~enable;
--
-- /* The UART may not be reset properly unless we
-- wait at least 2 `basic-clocks' until turning
-- on the TXE/RXE bits again. A `basic clock'
-- is the clock used by the baud-rate generator, i.e.,
-- the cpu clock divided by the 2^new_clk_divlog2. */
-- nb85e_uart_delay (1 << (new_clk_divlog2 + 1));
--
-- /* Write the final version, with enable bits turned on. */
-- NB85E_UART_ASIM (chan) = new_config;
-- }
--
-- local_irq_restore (flags);
--}
--
--\f
--/* Low-level console. */
--
--#ifdef CONFIG_V850E_NB85E_UART_CONSOLE
--
--static void nb85e_uart_cons_write (struct console *co,
-- const char *s, unsigned count)
--{
-- if (count > 0) {
-- unsigned chan = co->index;
-- unsigned irq = IRQ_INTST (chan);
-- int irq_was_enabled, irq_was_pending, flags;
--
-- /* We don't want to get `transmission completed' (INTST)
-- interrupts, since we're busy-waiting, so we disable
-- them while sending (we don't disable interrupts
-- entirely because sending over a serial line is really
-- slow). We save the status of INTST and restore it
-- when we're done so that using printk doesn't
-- interfere with normal serial transmission (other than
-- interleaving the output, of course!). This should
-- work correctly even if this function is interrupted
-- and the interrupt printks something. */
--
-- /* Disable interrupts while fiddling with INTST. */
-- local_irq_save (flags);
-- /* Get current INTST status. */
-- irq_was_enabled = nb85e_intc_irq_enabled (irq);
-- irq_was_pending = nb85e_intc_irq_pending (irq);
-- /* Disable INTST if necessary. */
-- if (irq_was_enabled)
-- nb85e_intc_disable_irq (irq);
-- /* Turn interrupts back on. */
-- local_irq_restore (flags);
--
-- /* Send characters. */
-- while (count > 0) {
-- int ch = *s++;
--
-- if (ch == '\n') {
-- /* We don't have the benefit of a tty
-- driver, so translate NL into CR LF. */
-- nb85e_uart_wait_for_xmit_ok (chan);
-- nb85e_uart_putc (chan, '\r');
-- }
--
-- nb85e_uart_wait_for_xmit_ok (chan);
-- nb85e_uart_putc (chan, ch);
--
-- count--;
-- }
--
-- /* Restore saved INTST status. */
-- if (irq_was_enabled) {
-- /* Wait for the last character we sent to be
-- completely transmitted (as we'll get an INTST
-- interrupt at that point). */
-- nb85e_uart_wait_for_xmit_done (chan);
-- /* Clear pending interrupts received due
-- to our transmission, unless there was already
-- one pending, in which case we want the
-- handler to be called. */
-- if (! irq_was_pending)
-- nb85e_intc_clear_pending_irq (irq);
-- /* ... and then turn back on handling. */
-- nb85e_intc_enable_irq (irq);
-- }
-- }
--}
--
--extern struct uart_driver nb85e_uart_driver;
--static struct console nb85e_uart_cons =
--{
-- .name = "ttyS",
-- .write = nb85e_uart_cons_write,
-- .device = uart_console_device,
-- .flags = CON_PRINTBUFFER,
-- .cflag = NB85E_UART_INIT_CFLAGS,
-- .index = -1,
-- .data = &nb85e_uart_driver,
--};
--
--void nb85e_uart_cons_init (unsigned chan)
--{
-- nb85e_uart_configure (chan, NB85E_UART_INIT_CFLAGS,
-- NB85E_UART_INIT_BAUD);
-- nb85e_uart_cons.index = chan;
-- register_console (&nb85e_uart_cons);
-- printk ("Console: %s on-chip UART channel %d\n",
-- NB85E_UART_CHIP_NAME, chan);
--}
--
--#define NB85E_UART_CONSOLE &nb85e_uart_cons
--
--#else /* !CONFIG_V850E_NB85E_UART_CONSOLE */
--#define NB85E_UART_CONSOLE 0
--#endif /* CONFIG_V850E_NB85E_UART_CONSOLE */
--\f
--/* TX/RX interrupt handlers. */
--
--static void nb85e_uart_stop_tx (struct uart_port *port, unsigned tty_stop);
--
--void nb85e_uart_tx (struct uart_port *port)
--{
-- struct circ_buf *xmit = &port->info->xmit;
-- int stopped = uart_tx_stopped (port);
--
-- if (nb85e_uart_xmit_ok (port->line)) {
-- int tx_ch;
--
-- if (port->x_char) {
-- tx_ch = port->x_char;
-- port->x_char = 0;
-- } else if (!uart_circ_empty (xmit) && !stopped) {
-- tx_ch = xmit->buf[xmit->tail];
-- xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1);
-- } else
-- goto no_xmit;
--
-- nb85e_uart_putc (port->line, tx_ch);
-- port->icount.tx++;
--
-- if (uart_circ_chars_pending (xmit) < WAKEUP_CHARS)
-- uart_write_wakeup (port);
-- }
--
-- no_xmit:
-- if (uart_circ_empty (xmit) || stopped)
-- nb85e_uart_stop_tx (port, stopped);
--}
--
--static void nb85e_uart_tx_irq (int irq, void *data, struct pt_regs *regs)
--{
-- struct uart_port *port = data;
-- nb85e_uart_tx (port);
--}
--
--static void nb85e_uart_rx_irq (int irq, void *data, struct pt_regs *regs)
--{
-- struct uart_port *port = data;
-- unsigned ch_stat = TTY_NORMAL;
-- unsigned ch = NB85E_UART_RXB (port->line);
-- unsigned err = NB85E_UART_ASIS (port->line);
--
-- if (err) {
-- if (err & NB85E_UART_ASIS_OVE) {
-- ch_stat = TTY_OVERRUN;
-- port->icount.overrun++;
-- } else if (err & NB85E_UART_ASIS_FE) {
-- ch_stat = TTY_FRAME;
-- port->icount.frame++;
-- } else if (err & NB85E_UART_ASIS_PE) {
-- ch_stat = TTY_PARITY;
-- port->icount.parity++;
-- }
-- }
--
-- port->icount.rx++;
--
-- tty_insert_flip_char (port->info->tty, ch, ch_stat);
-- tty_schedule_flip (port->info->tty);
--}
--\f
--/* Control functions for the serial framework. */
--
--static void nb85e_uart_nop (struct uart_port *port) { }
--static int nb85e_uart_success (struct uart_port *port) { return 0; }
--
--static unsigned nb85e_uart_tx_empty (struct uart_port *port)
--{
-- return TIOCSER_TEMT; /* Can't detect. */
--}
--
--static void nb85e_uart_set_mctrl (struct uart_port *port, unsigned mctrl)
--{
--#ifdef NB85E_UART_SET_RTS
-- NB85E_UART_SET_RTS (port->line, (mctrl & TIOCM_RTS));
--#endif
--}
--
--static unsigned nb85e_uart_get_mctrl (struct uart_port *port)
--{
-- /* We don't support DCD or DSR, so consider them permanently active. */
-- int mctrl = TIOCM_CAR | TIOCM_DSR;
--
-- /* We may support CTS. */
--#ifdef NB85E_UART_CTS
-- mctrl |= NB85E_UART_CTS(port->line) ? TIOCM_CTS : 0;
--#else
-- mctrl |= TIOCM_CTS;
--#endif
--
-- return mctrl;
--}
--
--static void nb85e_uart_start_tx (struct uart_port *port, unsigned tty_start)
--{
-- nb85e_intc_disable_irq (IRQ_INTST (port->line));
-- nb85e_uart_tx (port);
-- nb85e_intc_enable_irq (IRQ_INTST (port->line));
--}
--
--static void nb85e_uart_stop_tx (struct uart_port *port, unsigned tty_stop)
--{
-- nb85e_intc_disable_irq (IRQ_INTST (port->line));
--}
--
--static void nb85e_uart_start_rx (struct uart_port *port)
--{
-- nb85e_intc_enable_irq (IRQ_INTSR (port->line));
--}
--
--static void nb85e_uart_stop_rx (struct uart_port *port)
--{
-- nb85e_intc_disable_irq (IRQ_INTSR (port->line));
--}
--
--static void nb85e_uart_break_ctl (struct uart_port *port, int break_ctl)
--{
-- /* Umm, do this later. */
--}
--
--static int nb85e_uart_startup (struct uart_port *port)
--{
-- int err;
--
-- /* Alloc RX irq. */
-- err = request_irq (IRQ_INTSR (port->line), nb85e_uart_rx_irq,
-- SA_INTERRUPT, "nb85e_uart", port);
-- if (err)
-- return err;
--
-- /* Alloc TX irq. */
-- err = request_irq (IRQ_INTST (port->line), nb85e_uart_tx_irq,
-- SA_INTERRUPT, "nb85e_uart", port);
-- if (err) {
-- free_irq (IRQ_INTSR (port->line), port);
-- return err;
-- }
--
-- nb85e_uart_start_rx (port);
--
-- return 0;
--}
--
--static void nb85e_uart_shutdown (struct uart_port *port)
--{
-- /* Disable port interrupts. */
-- free_irq (IRQ_INTST (port->line), port);
-- free_irq (IRQ_INTSR (port->line), port);
--
-- /* Turn off xmit/recv enable bits. */
-- NB85E_UART_ASIM (port->line)
-- &= ~(NB85E_UART_ASIM_TXE | NB85E_UART_ASIM_RXE);
-- /* Then reset the channel. */
-- NB85E_UART_ASIM (port->line) = 0;
--}
--
--static void
--nb85e_uart_set_termios (struct uart_port *port, struct termios *termios,
-- struct termios *old)
--{
-- unsigned cflags = termios->c_cflag;
--
-- /* Restrict flags to legal values. */
-- if ((cflags & CSIZE) != CS7 && (cflags & CSIZE) != CS8)
-- /* The new value of CSIZE is invalid, use the old value. */
-- cflags = (cflags & ~CSIZE)
-- | (old ? (old->c_cflag & CSIZE) : CS8);
--
-- termios->c_cflag = cflags;
--
-- nb85e_uart_configure (port->line, cflags,
-- uart_get_baud_rate (port, termios, old,
-- min_baud(), max_baud()));
--}
--
--static const char *nb85e_uart_type (struct uart_port *port)
--{
-- return port->type == PORT_NB85E_UART ? "nb85e_uart" : 0;
--}
--
--static void nb85e_uart_config_port (struct uart_port *port, int flags)
--{
-- if (flags & UART_CONFIG_TYPE)
-- port->type = PORT_NB85E_UART;
--}
--
--static int
--nb85e_uart_verify_port (struct uart_port *port, struct serial_struct *ser)
--{
-- if (ser->type != PORT_UNKNOWN && ser->type != PORT_NB85E_UART)
-- return -EINVAL;
-- if (ser->irq != IRQ_INTST (port->line))
-- return -EINVAL;
-- return 0;
--}
--
--static struct uart_ops nb85e_uart_ops = {
-- .tx_empty = nb85e_uart_tx_empty,
-- .get_mctrl = nb85e_uart_get_mctrl,
-- .set_mctrl = nb85e_uart_set_mctrl,
-- .start_tx = nb85e_uart_start_tx,
-- .stop_tx = nb85e_uart_stop_tx,
-- .stop_rx = nb85e_uart_stop_rx,
-- .enable_ms = nb85e_uart_nop,
-- .break_ctl = nb85e_uart_break_ctl,
-- .startup = nb85e_uart_startup,
-- .shutdown = nb85e_uart_shutdown,
-- .set_termios = nb85e_uart_set_termios,
-- .type = nb85e_uart_type,
-- .release_port = nb85e_uart_nop,
-- .request_port = nb85e_uart_success,
-- .config_port = nb85e_uart_config_port,
-- .verify_port = nb85e_uart_verify_port,
--};
--\f
--/* Initialization and cleanup. */
--
--static struct uart_driver nb85e_uart_driver = {
-- .owner = THIS_MODULE,
-- .driver_name = "nb85e_uart",
-- .devfs_name = "tts/",
-- .dev_name = "ttyS",
-- .major = TTY_MAJOR,
-- .minor = NB85E_UART_MINOR_BASE,
-- .nr = NB85E_UART_NUM_CHANNELS,
-- .cons = NB85E_UART_CONSOLE,
--};
--
--
--static struct uart_port nb85e_uart_ports[NB85E_UART_NUM_CHANNELS];
--
--static int __init nb85e_uart_init (void)
--{
-- int rval;
--
-- printk (KERN_INFO "%s on-chip UART\n", NB85E_UART_CHIP_NAME);
--
-- rval = uart_register_driver (&nb85e_uart_driver);
-- if (rval == 0) {
-- unsigned chan;
--
-- for (chan = 0; chan < NB85E_UART_NUM_CHANNELS; chan++) {
-- struct uart_port *port = &nb85e_uart_ports[chan];
--
-- memset (port, 0, sizeof *port);
--
-- port->ops = &nb85e_uart_ops;
-- port->line = chan;
-- port->iotype = SERIAL_IO_MEM;
-- port->flags = UPF_BOOT_AUTOCONF;
--
-- /* We actually use multiple IRQs, but the serial
-- framework seems to mainly use this for
-- informational purposes anyway. Here we use the TX
-- irq. */
-- port->irq = IRQ_INTST (chan);
--
-- /* The serial framework doesn't really use these
-- membase/mapbase fields for anything useful, but
-- it requires that they be something non-zero to
-- consider the port `valid', and also uses them
-- for informational purposes. */
-- port->membase = (void *)NB85E_UART_BASE_ADDR (chan);
-- port->mapbase = NB85E_UART_BASE_ADDR (chan);
--
-- /* The framework insists on knowing the uart's master
-- clock freq, though it doesn't seem to do anything
-- useful for us with it. We must make it at least
-- higher than (the maximum baud rate * 16), otherwise
-- the framework will puke during its internal
-- calculations, and force the baud rate to be 9600.
-- To be accurate though, just repeat the calculation
-- we use when actually setting the speed.
--
-- The `* 8' means `* 16 / 2': 16 to account for for
-- the serial framework's built-in bias, and 2 because
-- there's an additional / 2 in the hardware. */
-- port->uartclk =
-- (NB85E_UART_BASE_FREQ >> cksr_min()) * 8;
--
-- uart_add_one_port (&nb85e_uart_driver, port);
-- }
-- }
--
-- return rval;
--}
--
--static void __exit nb85e_uart_exit (void)
--{
-- unsigned chan;
--
-- for (chan = 0; chan < NB85E_UART_NUM_CHANNELS; chan++)
-- uart_remove_one_port (&nb85e_uart_driver,
-- &nb85e_uart_ports[chan]);
--
-- uart_unregister_driver (&nb85e_uart_driver);
--}
--
--module_init (nb85e_uart_init);
--module_exit (nb85e_uart_exit);
--
--MODULE_AUTHOR ("Miles Bader");
--MODULE_DESCRIPTION ("NEC " NB85E_UART_CHIP_NAME " on-chip UART");
--MODULE_LICENSE ("GPL");
---- linux-2.6.0-test1/drivers/serial/sunsu.c 2003-07-02 14:53:16.000000000 -0700
-+++ 25/drivers/serial/sunsu.c 2003-07-19 17:03:50.000000000 -0700
-@@ -102,6 +102,7 @@ struct uart_sunsu_port {
- int l1_down;
- #ifdef CONFIG_SERIO
- struct serio serio;
-+ int serio_open;
- #endif
- };
-
-@@ -1021,12 +1022,13 @@ static int sunsu_serio_write(struct seri
-
- static int sunsu_serio_open(struct serio *serio)
- {
-+ struct uart_sunsu_port *up = serio->driver;
- unsigned long flags;
- int ret;
-
- spin_lock_irqsave(&sunsu_serio_lock, flags);
-- if (serio->private == NULL) {
-- serio->private = (void *) -1L;
-+ if (!up->serio_open) {
-+ up->serio_open = 1;
- ret = 0;
- } else
- ret = -EBUSY;
-@@ -1037,10 +1039,11 @@ static int sunsu_serio_open(struct serio
-
- static void sunsu_serio_close(struct serio *serio)
- {
-+ struct uart_sunsu_port *up = serio->driver;
- unsigned long flags;
-
- spin_lock_irqsave(&sunsu_serio_lock, flags);
-- serio->private = NULL;
-+ up->serio_open = 0;
- spin_unlock_irqrestore(&sunsu_serio_lock, flags);
- }
-
---- linux-2.6.0-test1/drivers/serial/sunzilog.c 2003-07-02 14:53:16.000000000 -0700
-+++ 25/drivers/serial/sunzilog.c 2003-07-19 17:03:50.000000000 -0700
-@@ -112,6 +112,7 @@ struct uart_sunzilog_port {
-
- #ifdef CONFIG_SERIO
- struct serio serio;
-+ int serio_open;
- #endif
- };
-
-@@ -1311,12 +1312,13 @@ static int sunzilog_serio_write(struct s
-
- static int sunzilog_serio_open(struct serio *serio)
- {
-+ struct uart_sunzilog_port *up = serio->driver;
- unsigned long flags;
- int ret;
-
- spin_lock_irqsave(&sunzilog_serio_lock, flags);
-- if (serio->private == NULL) {
-- serio->private = (void *) -1L;
-+ if (!up->serio_open) {
-+ up->serio_open = 1;
- ret = 0;
- } else
- ret = -EBUSY;
-@@ -1327,10 +1329,11 @@ static int sunzilog_serio_open(struct se
-
- static void sunzilog_serio_close(struct serio *serio)
- {
-+ struct uart_sunzilog_port *up = serio->driver;
- unsigned long flags;
-
- spin_lock_irqsave(&sunzilog_serio_lock, flags);
-- serio->private = NULL;
-+ up->serio_open = 0;
- spin_unlock_irqrestore(&sunzilog_serio_lock, flags);
- }
-
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/serial/v850e_uart.c 2003-07-19 17:03:50.000000000 -0700
-@@ -0,0 +1,549 @@
-+/*
-+ * drivers/serial/v850e_uart.c -- Serial I/O using V850E on-chip UART or UARTB
-+ *
-+ * Copyright (C) 2001,02,03 NEC Electronics Corporation
-+ * Copyright (C) 2001,02,03 Miles Bader <miles@gnu.org>
-+ *
-+ * This file is subject to the terms and conditions of the GNU General
-+ * Public License. See the file COPYING in the main directory of this
-+ * archive for more details.
-+ *
-+ * Written by Miles Bader <miles@gnu.org>
-+ */
-+
-+/* This driver supports both the original V850E UART interface (called
-+ merely `UART' in the docs) and the newer `UARTB' interface, which is
-+ roughly a superset of the first one. The selection is made at
-+ configure time -- if CONFIG_V850E_UARTB is defined, then UARTB is
-+ presumed, otherwise the old UART -- as these are on-CPU UARTS, a system
-+ can never have both.
-+
-+ The UARTB interface also has a 16-entry FIFO mode, which is not
-+ yet supported by this driver. */
-+
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/module.h>
-+#include <linux/console.h>
-+#include <linux/tty.h>
-+#include <linux/tty_flip.h>
-+#include <linux/serial.h>
-+#include <linux/serial_core.h>
-+
-+#include <asm/v850e_uart.h>
-+
-+/* Initial UART state. This may be overridden by machine-dependent headers. */
-+#ifndef V850E_UART_INIT_BAUD
-+#define V850E_UART_INIT_BAUD 115200
-+#endif
-+#ifndef V850E_UART_INIT_CFLAGS
-+#define V850E_UART_INIT_CFLAGS (B115200 | CS8 | CREAD)
-+#endif
-+
-+/* A string used for prefixing printed descriptions; since the same UART
-+ macro is actually used on other chips than the V850E. This must be a
-+ constant string. */
-+#ifndef V850E_UART_CHIP_NAME
-+#define V850E_UART_CHIP_NAME "V850E"
-+#endif
-+
-+#define V850E_UART_MINOR_BASE 64 /* First tty minor number */
-+
-+\f
-+/* Low-level UART functions. */
-+
-+/* Configure and turn on uart channel CHAN, using the termios `control
-+ modes' bits in CFLAGS, and a baud-rate of BAUD. */
-+void v850e_uart_configure (unsigned chan, unsigned cflags, unsigned baud)
-+{
-+ int flags;
-+ v850e_uart_speed_t old_speed;
-+ v850e_uart_config_t old_config;
-+ v850e_uart_speed_t new_speed = v850e_uart_calc_speed (baud);
-+ v850e_uart_config_t new_config = v850e_uart_calc_config (cflags);
-+
-+ /* Disable interrupts while we're twiddling the hardware. */
-+ local_irq_save (flags);
-+
-+#ifdef V850E_UART_PRE_CONFIGURE
-+ V850E_UART_PRE_CONFIGURE (chan, cflags, baud);
-+#endif
-+
-+ old_config = V850E_UART_CONFIG (chan);
-+ old_speed = v850e_uart_speed (chan);
-+
-+ if (! v850e_uart_speed_eq (old_speed, new_speed)) {
-+ /* The baud rate has changed. First, disable the UART. */
-+ V850E_UART_CONFIG (chan) = V850E_UART_CONFIG_FINI;
-+ old_config = 0; /* Force the uart to be re-initialized. */
-+
-+ /* Reprogram the baud-rate generator. */
-+ v850e_uart_set_speed (chan, new_speed);
-+ }
-+
-+ if (! (old_config & V850E_UART_CONFIG_ENABLED)) {
-+ /* If we are using the uart for the first time, start by
-+ enabling it, which must be done before turning on any
-+ other bits. */
-+ V850E_UART_CONFIG (chan) = V850E_UART_CONFIG_INIT;
-+ /* See the initial state. */
-+ old_config = V850E_UART_CONFIG (chan);
-+ }
-+
-+ if (new_config != old_config) {
-+ /* Which of the TXE/RXE bits we'll temporarily turn off
-+ before changing other control bits. */
-+ unsigned temp_disable = 0;
-+ /* Which of the TXE/RXE bits will be enabled. */
-+ unsigned enable = 0;
-+ unsigned changed_bits = new_config ^ old_config;
-+
-+ /* Which of RX/TX will be enabled in the new configuration. */
-+ if (new_config & V850E_UART_CONFIG_RX_BITS)
-+ enable |= (new_config & V850E_UART_CONFIG_RX_ENABLE);
-+ if (new_config & V850E_UART_CONFIG_TX_BITS)
-+ enable |= (new_config & V850E_UART_CONFIG_TX_ENABLE);
-+
-+ /* Figure out which of RX/TX needs to be disabled; note
-+ that this will only happen if they're not already
-+ disabled. */
-+ if (changed_bits & V850E_UART_CONFIG_RX_BITS)
-+ temp_disable
-+ |= (old_config & V850E_UART_CONFIG_RX_ENABLE);
-+ if (changed_bits & V850E_UART_CONFIG_TX_BITS)
-+ temp_disable
-+ |= (old_config & V850E_UART_CONFIG_TX_ENABLE);
-+
-+ /* We have to turn off RX and/or TX mode before changing
-+ any associated control bits. */
-+ if (temp_disable)
-+ V850E_UART_CONFIG (chan) = old_config & ~temp_disable;
-+
-+ /* Write the new control bits, while RX/TX are disabled. */
-+ if (changed_bits & ~enable)
-+ V850E_UART_CONFIG (chan) = new_config & ~enable;
-+
-+ v850e_uart_config_delay (new_config, new_speed);
-+
-+ /* Write the final version, with enable bits turned on. */
-+ V850E_UART_CONFIG (chan) = new_config;
-+ }
-+
-+ local_irq_restore (flags);
-+}
-+
-+\f
-+/* Low-level console. */
-+
-+#ifdef CONFIG_V850E_UART_CONSOLE
-+
-+static void v850e_uart_cons_write (struct console *co,
-+ const char *s, unsigned count)
-+{
-+ if (count > 0) {
-+ unsigned chan = co->index;
-+ unsigned irq = V850E_UART_TX_IRQ (chan);
-+ int irq_was_enabled, irq_was_pending, flags;
-+
-+ /* We don't want to get `transmission completed'
-+ interrupts, since we're busy-waiting, so we disable them
-+ while sending (we don't disable interrupts entirely
-+ because sending over a serial line is really slow). We
-+ save the status of the tx interrupt and restore it when
-+ we're done so that using printk doesn't interfere with
-+ normal serial transmission (other than interleaving the
-+ output, of course!). This should work correctly even if
-+ this function is interrupted and the interrupt printks
-+ something. */
-+
-+ /* Disable interrupts while fiddling with tx interrupt. */
-+ local_irq_save (flags);
-+ /* Get current tx interrupt status. */
-+ irq_was_enabled = v850e_intc_irq_enabled (irq);
-+ irq_was_pending = v850e_intc_irq_pending (irq);
-+ /* Disable tx interrupt if necessary. */
-+ if (irq_was_enabled)
-+ v850e_intc_disable_irq (irq);
-+ /* Turn interrupts back on. */
-+ local_irq_restore (flags);
-+
-+ /* Send characters. */
-+ while (count > 0) {
-+ int ch = *s++;
-+
-+ if (ch == '\n') {
-+ /* We don't have the benefit of a tty
-+ driver, so translate NL into CR LF. */
-+ v850e_uart_wait_for_xmit_ok (chan);
-+ v850e_uart_putc (chan, '\r');
-+ }
-+
-+ v850e_uart_wait_for_xmit_ok (chan);
-+ v850e_uart_putc (chan, ch);
-+
-+ count--;
-+ }
-+
-+ /* Restore saved tx interrupt status. */
-+ if (irq_was_enabled) {
-+ /* Wait for the last character we sent to be
-+ completely transmitted (as we'll get an
-+ interrupt interrupt at that point). */
-+ v850e_uart_wait_for_xmit_done (chan);
-+ /* Clear pending interrupts received due
-+ to our transmission, unless there was already
-+ one pending, in which case we want the
-+ handler to be called. */
-+ if (! irq_was_pending)
-+ v850e_intc_clear_pending_irq (irq);
-+ /* ... and then turn back on handling. */
-+ v850e_intc_enable_irq (irq);
-+ }
-+ }
-+}
-+
-+extern struct uart_driver v850e_uart_driver;
-+static struct console v850e_uart_cons =
-+{
-+ .name = "ttyS",
-+ .write = v850e_uart_cons_write,
-+ .device = uart_console_device,
-+ .flags = CON_PRINTBUFFER,
-+ .cflag = V850E_UART_INIT_CFLAGS,
-+ .index = -1,
-+ .data = &v850e_uart_driver,
-+};
-+
-+void v850e_uart_cons_init (unsigned chan)
-+{
-+ v850e_uart_configure (chan, V850E_UART_INIT_CFLAGS,
-+ V850E_UART_INIT_BAUD);
-+ v850e_uart_cons.index = chan;
-+ register_console (&v850e_uart_cons);
-+ printk ("Console: %s on-chip UART channel %d\n",
-+ V850E_UART_CHIP_NAME, chan);
-+}
-+
-+/* This is what the init code actually calls. */
-+static int v850e_uart_console_init (void)
-+{
-+ v850e_uart_cons_init (V850E_UART_CONSOLE_CHANNEL);
-+ return 0;
-+}
-+console_initcall(v850e_uart_console_init);
-+
-+#define V850E_UART_CONSOLE &v850e_uart_cons
-+
-+#else /* !CONFIG_V850E_UART_CONSOLE */
-+#define V850E_UART_CONSOLE 0
-+#endif /* CONFIG_V850E_UART_CONSOLE */
-+\f
-+/* TX/RX interrupt handlers. */
-+
-+static void v850e_uart_stop_tx (struct uart_port *port, unsigned tty_stop);
-+
-+void v850e_uart_tx (struct uart_port *port)
-+{
-+ struct circ_buf *xmit = &port->info->xmit;
-+ int stopped = uart_tx_stopped (port);
-+
-+ if (v850e_uart_xmit_ok (port->line)) {
-+ int tx_ch;
-+
-+ if (port->x_char) {
-+ tx_ch = port->x_char;
-+ port->x_char = 0;
-+ } else if (!uart_circ_empty (xmit) && !stopped) {
-+ tx_ch = xmit->buf[xmit->tail];
-+ xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1);
-+ } else
-+ goto no_xmit;
-+
-+ v850e_uart_putc (port->line, tx_ch);
-+ port->icount.tx++;
-+
-+ if (uart_circ_chars_pending (xmit) < WAKEUP_CHARS)
-+ uart_write_wakeup (port);
-+ }
-+
-+ no_xmit:
-+ if (uart_circ_empty (xmit) || stopped)
-+ v850e_uart_stop_tx (port, stopped);
-+}
-+
-+static irqreturn_t v850e_uart_tx_irq(int irq, void *data, struct pt_regs *regs)
-+{
-+ struct uart_port *port = data;
-+ v850e_uart_tx (port);
-+ return IRQ_HANDLED;
-+}
-+
-+static irqreturn_t v850e_uart_rx_irq(int irq, void *data, struct pt_regs *regs)
-+{
-+ struct uart_port *port = data;
-+ unsigned ch_stat = TTY_NORMAL;
-+ unsigned ch = v850e_uart_getc (port->line);
-+ unsigned err = v850e_uart_err (port->line);
-+
-+ if (err) {
-+ if (err & V850E_UART_ERR_OVERRUN) {
-+ ch_stat = TTY_OVERRUN;
-+ port->icount.overrun++;
-+ } else if (err & V850E_UART_ERR_FRAME) {
-+ ch_stat = TTY_FRAME;
-+ port->icount.frame++;
-+ } else if (err & V850E_UART_ERR_PARITY) {
-+ ch_stat = TTY_PARITY;
-+ port->icount.parity++;
-+ }
-+ }
-+
-+ port->icount.rx++;
-+
-+ tty_insert_flip_char (port->info->tty, ch, ch_stat);
-+ tty_schedule_flip (port->info->tty);
-+
-+ return IRQ_HANDLED;
-+}
-+
-+\f
-+/* Control functions for the serial framework. */
-+
-+static void v850e_uart_nop (struct uart_port *port) { }
-+static int v850e_uart_success (struct uart_port *port) { return 0; }
-+
-+static unsigned v850e_uart_tx_empty (struct uart_port *port)
-+{
-+ return TIOCSER_TEMT; /* Can't detect. */
-+}
-+
-+static void v850e_uart_set_mctrl (struct uart_port *port, unsigned mctrl)
-+{
-+#ifdef V850E_UART_SET_RTS
-+ V850E_UART_SET_RTS (port->line, (mctrl & TIOCM_RTS));
-+#endif
-+}
-+
-+static unsigned v850e_uart_get_mctrl (struct uart_port *port)
-+{
-+ /* We don't support DCD or DSR, so consider them permanently active. */
-+ int mctrl = TIOCM_CAR | TIOCM_DSR;
-+
-+ /* We may support CTS. */
-+#ifdef V850E_UART_CTS
-+ mctrl |= V850E_UART_CTS(port->line) ? TIOCM_CTS : 0;
-+#else
-+ mctrl |= TIOCM_CTS;
-+#endif
-+
-+ return mctrl;
-+}
-+
-+static void v850e_uart_start_tx (struct uart_port *port, unsigned tty_start)
-+{
-+ v850e_intc_disable_irq (V850E_UART_TX_IRQ (port->line));
-+ v850e_uart_tx (port);
-+ v850e_intc_enable_irq (V850E_UART_TX_IRQ (port->line));
-+}
-+
-+static void v850e_uart_stop_tx (struct uart_port *port, unsigned tty_stop)
-+{
-+ v850e_intc_disable_irq (V850E_UART_TX_IRQ (port->line));
-+}
-+
-+static void v850e_uart_start_rx (struct uart_port *port)
-+{
-+ v850e_intc_enable_irq (V850E_UART_RX_IRQ (port->line));
-+}
-+
-+static void v850e_uart_stop_rx (struct uart_port *port)
-+{
-+ v850e_intc_disable_irq (V850E_UART_RX_IRQ (port->line));
-+}
-+
-+static void v850e_uart_break_ctl (struct uart_port *port, int break_ctl)
-+{
-+ /* Umm, do this later. */
-+}
-+
-+static int v850e_uart_startup (struct uart_port *port)
-+{
-+ int err;
-+
-+ /* Alloc RX irq. */
-+ err = request_irq (V850E_UART_RX_IRQ (port->line), v850e_uart_rx_irq,
-+ SA_INTERRUPT, "v850e_uart", port);
-+ if (err)
-+ return err;
-+
-+ /* Alloc TX irq. */
-+ err = request_irq (V850E_UART_TX_IRQ (port->line), v850e_uart_tx_irq,
-+ SA_INTERRUPT, "v850e_uart", port);
-+ if (err) {
-+ free_irq (V850E_UART_RX_IRQ (port->line), port);
-+ return err;
-+ }
-+
-+ v850e_uart_start_rx (port);
-+
-+ return 0;
-+}
-+
-+static void v850e_uart_shutdown (struct uart_port *port)
-+{
-+ /* Disable port interrupts. */
-+ free_irq (V850E_UART_TX_IRQ (port->line), port);
-+ free_irq (V850E_UART_RX_IRQ (port->line), port);
-+
-+ /* Turn off xmit/recv enable bits. */
-+ V850E_UART_CONFIG (port->line)
-+ &= ~(V850E_UART_CONFIG_TX_ENABLE
-+ | V850E_UART_CONFIG_RX_ENABLE);
-+ /* Then reset the channel. */
-+ V850E_UART_CONFIG (port->line) = 0;
-+}
-+
-+static void
-+v850e_uart_set_termios (struct uart_port *port, struct termios *termios,
-+ struct termios *old)
-+{
-+ unsigned cflags = termios->c_cflag;
-+
-+ /* Restrict flags to legal values. */
-+ if ((cflags & CSIZE) != CS7 && (cflags & CSIZE) != CS8)
-+ /* The new value of CSIZE is invalid, use the old value. */
-+ cflags = (cflags & ~CSIZE)
-+ | (old ? (old->c_cflag & CSIZE) : CS8);
-+
-+ termios->c_cflag = cflags;
-+
-+ v850e_uart_configure (port->line, cflags,
-+ uart_get_baud_rate (port, termios, old,
-+ v850e_uart_min_baud(),
-+ v850e_uart_max_baud()));
-+}
-+
-+static const char *v850e_uart_type (struct uart_port *port)
-+{
-+ return port->type == PORT_V850E_UART ? "v850e_uart" : 0;
-+}
-+
-+static void v850e_uart_config_port (struct uart_port *port, int flags)
-+{
-+ if (flags & UART_CONFIG_TYPE)
-+ port->type = PORT_V850E_UART;
-+}
-+
-+static int
-+v850e_uart_verify_port (struct uart_port *port, struct serial_struct *ser)
-+{
-+ if (ser->type != PORT_UNKNOWN && ser->type != PORT_V850E_UART)
-+ return -EINVAL;
-+ if (ser->irq != V850E_UART_TX_IRQ (port->line))
-+ return -EINVAL;
-+ return 0;
-+}
-+
-+static struct uart_ops v850e_uart_ops = {
-+ .tx_empty = v850e_uart_tx_empty,
-+ .get_mctrl = v850e_uart_get_mctrl,
-+ .set_mctrl = v850e_uart_set_mctrl,
-+ .start_tx = v850e_uart_start_tx,
-+ .stop_tx = v850e_uart_stop_tx,
-+ .stop_rx = v850e_uart_stop_rx,
-+ .enable_ms = v850e_uart_nop,
-+ .break_ctl = v850e_uart_break_ctl,
-+ .startup = v850e_uart_startup,
-+ .shutdown = v850e_uart_shutdown,
-+ .set_termios = v850e_uart_set_termios,
-+ .type = v850e_uart_type,
-+ .release_port = v850e_uart_nop,
-+ .request_port = v850e_uart_success,
-+ .config_port = v850e_uart_config_port,
-+ .verify_port = v850e_uart_verify_port,
-+};
-+\f
-+/* Initialization and cleanup. */
-+
-+static struct uart_driver v850e_uart_driver = {
-+ .owner = THIS_MODULE,
-+ .driver_name = "v850e_uart",
-+ .devfs_name = "tts/",
-+ .dev_name = "ttyS",
-+ .major = TTY_MAJOR,
-+ .minor = V850E_UART_MINOR_BASE,
-+ .nr = V850E_UART_NUM_CHANNELS,
-+ .cons = V850E_UART_CONSOLE,
-+};
-+
-+
-+static struct uart_port v850e_uart_ports[V850E_UART_NUM_CHANNELS];
-+
-+static int __init v850e_uart_init (void)
-+{
-+ int rval;
-+
-+ printk (KERN_INFO "%s on-chip UART\n", V850E_UART_CHIP_NAME);
-+
-+ rval = uart_register_driver (&v850e_uart_driver);
-+ if (rval == 0) {
-+ unsigned chan;
-+
-+ for (chan = 0; chan < V850E_UART_NUM_CHANNELS; chan++) {
-+ struct uart_port *port = &v850e_uart_ports[chan];
-+
-+ memset (port, 0, sizeof *port);
-+
-+ port->ops = &v850e_uart_ops;
-+ port->line = chan;
-+ port->iotype = SERIAL_IO_MEM;
-+ port->flags = UPF_BOOT_AUTOCONF;
-+
-+ /* We actually use multiple IRQs, but the serial
-+ framework seems to mainly use this for
-+ informational purposes anyway. Here we use the TX
-+ irq. */
-+ port->irq = V850E_UART_TX_IRQ (chan);
-+
-+ /* The serial framework doesn't really use these
-+ membase/mapbase fields for anything useful, but
-+ it requires that they be something non-zero to
-+ consider the port `valid', and also uses them
-+ for informational purposes. */
-+ port->membase = (void *)V850E_UART_BASE_ADDR (chan);
-+ port->mapbase = V850E_UART_BASE_ADDR (chan);
-+
-+ /* The framework insists on knowing the uart's master
-+ clock freq, though it doesn't seem to do anything
-+ useful for us with it. We must make it at least
-+ higher than (the maximum baud rate * 16), otherwise
-+ the framework will puke during its internal
-+ calculations, and force the baud rate to be 9600.
-+ To be accurate though, just repeat the calculation
-+ we use when actually setting the speed. */
-+ port->uartclk = v850e_uart_max_clock() * 16;
-+
-+ uart_add_one_port (&v850e_uart_driver, port);
-+ }
-+ }
-+
-+ return rval;
-+}
-+
-+static void __exit v850e_uart_exit (void)
-+{
-+ unsigned chan;
-+
-+ for (chan = 0; chan < V850E_UART_NUM_CHANNELS; chan++)
-+ uart_remove_one_port (&v850e_uart_driver,
-+ &v850e_uart_ports[chan]);
-+
-+ uart_unregister_driver (&v850e_uart_driver);
-+}
-+
-+module_init (v850e_uart_init);
-+module_exit (v850e_uart_exit);
-+
-+MODULE_AUTHOR ("Miles Bader");
-+MODULE_DESCRIPTION ("NEC " V850E_UART_CHIP_NAME " on-chip UART");
-+MODULE_LICENSE ("GPL");
---- linux-2.6.0-test1/drivers/telephony/ixj.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/telephony/ixj.c 2003-07-19 17:03:50.000000000 -0700
-@@ -23,6 +23,7 @@
- * Fixes: David Huggins-Daines, <dhd@cepstral.com>
- * Fabio Ferrari, <fabio.ferrari@digitro.com.br>
- * Artis Kugevics, <artis@mt.lv>
-+ * Daniele Bellucci, <bellucda@tiscali.it>
- *
- * More information about the hardware related to this driver can be found
- * at our website: http://www.quicknet.net
-@@ -45,6 +46,10 @@ static char ixj_c_revision[] = "$Revisio
-
- /*
- * $Log: ixj.c,v $
-+ *
-+ * Revision 4.8 2003/07/09 19:39:00 Daniele Bellucci
-+ * Audit some copy_*_user and minor cleanup.
-+ *
- * Revision 4.7 2001/08/13 06:19:33 craigs
- * Added additional changes from Alan Cox and John Anderson for
- * 2.2 to 2.4 cleanup and bounds checking
-@@ -363,12 +368,9 @@ static IXJ ixj[IXJMAX];
- static IXJ *ixj_alloc(void)
- {
- int cnt;
-- for(cnt=0; cnt<IXJMAX; cnt++)
-- {
-+ for(cnt=0; cnt<IXJMAX; cnt++) {
- if(!ixj[cnt].DSPbase)
-- {
- return &ixj[cnt];
-- }
- }
- return NULL;
- }
-@@ -6260,9 +6262,11 @@ static int ixj_ioctl(struct inode *inode
- break;
- case IXJCTL_CIDCW:
- if(arg) {
-- copy_from_user(&j->cid_send, (char *)arg, sizeof(PHONE_CID));
-- }
-- else {
-+ if (copy_from_user(&j->cid_send, (char *)arg, sizeof(PHONE_CID))) {
-+ retval = -EFAULT;
-+ break;
-+ }
-+ } else {
- memset(&j->cid_send, 0, sizeof(PHONE_CID));
- }
- ixj_write_cidcw(j);
-@@ -6273,14 +6277,12 @@ static int ixj_ioctl(struct inode *inode
- /* Fall through */
- case PHONE_RING_START:
- if(arg) {
-- if(copy_from_user(&j->cid_send, (char *)arg, sizeof(PHONE_CID)))
-- {
-+ if (copy_from_user(&j->cid_send, (char *)arg, sizeof(PHONE_CID))) {
- retval = -EFAULT;
- break;
- }
- ixj_write_cid(j);
-- }
-- else {
-+ } else {
- memset(&j->cid_send, 0, sizeof(PHONE_CID));
- }
- ixj_ring_start(j);
-@@ -6696,7 +6698,8 @@ static int ixj_ioctl(struct inode *inode
- case IXJCTL_SET_FILTER_RAW:
- if (copy_from_user(&jfr, (char *) arg, sizeof(jfr)))
- retval = -EFAULT;
-- retval = ixj_init_filter_raw(j, &jfr);
-+ else
-+ retval = ixj_init_filter_raw(j, &jfr);
- break;
- case IXJCTL_GET_FILTER_HIST:
- if(arg<0||arg>3)
-@@ -6705,8 +6708,10 @@ static int ixj_ioctl(struct inode *inode
- retval = j->filter_hist[arg];
- break;
- case IXJCTL_INIT_TONE:
-- copy_from_user(&ti, (char *) arg, sizeof(ti));
-- retval = ixj_init_tone(j, &ti);
-+ if (copy_from_user(&ti, (char *) arg, sizeof(ti)))
-+ retval = -EFAULT;
-+ else
-+ retval = ixj_init_tone(j, &ti);
- break;
- case IXJCTL_TONE_CADENCE:
- retval = ixj_build_cadence(j, (IXJ_CADENCE *) arg);
-@@ -6715,8 +6720,10 @@ static int ixj_ioctl(struct inode *inode
- retval = ixj_build_filter_cadence(j, (IXJ_FILTER_CADENCE *) arg);
- break;
- case IXJCTL_SIGCTL:
-- if (copy_from_user(&j->sigdef, (char *)arg, sizeof(IXJ_SIGDEF)))
-+ if (copy_from_user(&j->sigdef, (char *)arg, sizeof(IXJ_SIGDEF))) {
- retval = -EFAULT;
-+ break;
-+ }
- j->ixj_signals[j->sigdef.event] = j->sigdef.signal;
- if(j->sigdef.event < 33) {
- raise = 1;
-@@ -7693,7 +7700,7 @@ MODULE_DESCRIPTION("Quicknet VoIP Teleph
- MODULE_AUTHOR("Ed Okerson <eokerson@quicknet.net>");
- MODULE_LICENSE("GPL");
-
--void ixj_exit(void)
-+static void __exit ixj_exit(void)
- {
- cleanup();
- }
-@@ -7852,7 +7859,7 @@ int __init ixj_probe_pci(int *cnt)
- return probe;
- }
-
--int __init ixj_init(void)
-+static int __init ixj_init(void)
- {
- int cnt = 0;
- int probe = 0;
---- linux-2.6.0-test1/drivers/telephony/Kconfig 2003-06-14 12:18:00.000000000 -0700
-+++ 25/drivers/telephony/Kconfig 2003-07-19 17:03:50.000000000 -0700
-@@ -39,7 +39,7 @@ config PHONE_IXJ
-
- config PHONE_IXJ_PCMCIA
- tristate "QuickNet Internet LineJack/PhoneJack PCMCIA support"
-- depends on PHONE_IXJ
-+ depends on PHONE_IXJ && PCMCIA
- help
- Say Y here to configure in PCMCIA service support for the Quicknet
- cards manufactured by Quicknet Technologies, Inc. This changes the
---- linux-2.6.0-test1/drivers/usb/class/bluetty.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/usb/class/bluetty.c 2003-07-19 17:03:50.000000000 -0700
-@@ -1320,7 +1320,8 @@ int usb_bluetooth_init(void)
-
- bluetooth_tty_driver->owner = THIS_MODULE;
- bluetooth_tty_driver->driver_name = "usb-bluetooth";
-- bluetooth_tty_driver->name = "usb/ttub/";
-+ bluetooth_tty_driver->name = "ttyUB";
-+ bluetooth_tty_driver->devfs_name = "usb/ttub/";
- bluetooth_tty_driver->major = BLUETOOTH_TTY_MAJOR;
- bluetooth_tty_driver->minor_start = 0;
- bluetooth_tty_driver->type = TTY_DRIVER_TYPE_SERIAL;
---- linux-2.6.0-test1/drivers/usb/class/cdc-acm.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/usb/class/cdc-acm.c 2003-07-19 17:03:50.000000000 -0700
-@@ -765,7 +765,8 @@ static int __init acm_init(void)
- return -ENOMEM;
- acm_tty_driver->owner = THIS_MODULE,
- acm_tty_driver->driver_name = "acm",
-- acm_tty_driver->name = "usb/acm/",
-+ acm_tty_driver->name = "ttyACM",
-+ acm_tty_driver->devfs_name = "usb/acm/",
- acm_tty_driver->major = ACM_TTY_MAJOR,
- acm_tty_driver->minor_start = 0,
- acm_tty_driver->type = TTY_DRIVER_TYPE_SERIAL,
---- linux-2.6.0-test1/drivers/usb/class/usblp.c 2003-07-13 21:44:34.000000000 -0700
-+++ 25/drivers/usb/class/usblp.c 2003-07-19 17:03:50.000000000 -0700
-@@ -359,7 +359,6 @@ static int usblp_open(struct inode *inod
- file->private_data = usblp;
-
- usblp->writeurb->transfer_buffer_length = 0;
-- usblp->writeurb->status = 0;
- usblp->wcomplete = 1; /* we begin writeable */
- usblp->rcomplete = 0;
-
-@@ -833,22 +832,15 @@ static int usblp_probe(struct usb_interf
- init_waitqueue_head(&usblp->wait);
- usblp->ifnum = intf->altsetting->desc.bInterfaceNumber;
-
-- retval = usb_register_dev(intf, &usblp_class);
-- if (retval) {
-- err("Not able to get a minor for this device.");
-- goto abort;
-- }
-- usblp->minor = intf->minor;
--
- usblp->writeurb = usb_alloc_urb(0, GFP_KERNEL);
- if (!usblp->writeurb) {
- err("out of memory");
-- goto abort_minor;
-+ goto abort;
- }
- usblp->readurb = usb_alloc_urb(0, GFP_KERNEL);
- if (!usblp->readurb) {
- err("out of memory");
-- goto abort_minor;
-+ goto abort;
- }
-
- /* Malloc device ID string buffer to the largest expected length,
-@@ -856,7 +848,7 @@ static int usblp_probe(struct usb_interf
- * could change in length. */
- if (!(usblp->device_id_string = kmalloc(USBLP_DEVICE_ID_SIZE, GFP_KERNEL))) {
- err("out of memory for device_id_string");
-- goto abort_minor;
-+ goto abort;
- }
-
- usblp->writebuf = usblp->readbuf = NULL;
-@@ -868,19 +860,19 @@ static int usblp_probe(struct usb_interf
- if (!(usblp->writebuf = usb_buffer_alloc(dev, USBLP_BUF_SIZE,
- GFP_KERNEL, &usblp->writeurb->transfer_dma))) {
- err("out of memory for write buf");
-- goto abort_minor;
-+ goto abort;
- }
- if (!(usblp->readbuf = usb_buffer_alloc(dev, USBLP_BUF_SIZE,
- GFP_KERNEL, &usblp->readurb->transfer_dma))) {
- err("out of memory for read buf");
-- goto abort_minor;
-+ goto abort;
- }
-
- /* Allocate buffer for printer status */
- usblp->statusbuf = kmalloc(STATUS_BUF_SIZE, GFP_KERNEL);
- if (!usblp->statusbuf) {
- err("out of memory for statusbuf");
-- goto abort_minor;
-+ goto abort;
- }
-
- /* Lookup quirks for this printer. */
-@@ -894,12 +886,12 @@ static int usblp_probe(struct usb_interf
- dbg("incompatible printer-class device 0x%4.4X/0x%4.4X",
- dev->descriptor.idVendor,
- dev->descriptor.idProduct);
-- goto abort_minor;
-+ goto abort;
- }
-
- /* Setup the selected alternate setting and endpoints. */
- if (usblp_set_protocol(usblp, protocol) < 0)
-- goto abort_minor;
-+ goto abort;
-
- /* Retrieve and store the device ID string. */
- usblp_cache_device_id_string(usblp);
-@@ -920,10 +912,17 @@ static int usblp_probe(struct usb_interf
-
- usblp->present = 1;
-
-+ retval = usb_register_dev(intf, &usblp_class);
-+ if (retval) {
-+ err("Not able to get a minor for this device.");
-+ goto abort_intfdata;
-+ }
-+ usblp->minor = intf->minor;
-+
- return 0;
-
--abort_minor:
-- usb_deregister_dev(intf, &usblp_class);
-+abort_intfdata:
-+ usb_set_intfdata (intf, NULL);
- abort:
- if (usblp) {
- if (usblp->writebuf)
---- linux-2.6.0-test1/drivers/usb/core/file.c 2003-06-14 12:18:51.000000000 -0700
-+++ 25/drivers/usb/core/file.c 2003-07-19 17:06:13.000000000 -0700
-@@ -93,7 +93,7 @@ static ssize_t show_dev(struct class_dev
- {
- struct usb_interface *intf = class_dev_to_usb_interface(class_dev);
- dev_t dev = MKDEV(USB_MAJOR, intf->minor);
-- return sprintf(buf, "%04x\n", dev);
-+ return print_dev_t(buf, dev);
- }
- static CLASS_DEVICE_ATTR(dev, S_IRUGO, show_dev, NULL);
-
---- linux-2.6.0-test1/drivers/usb/core/hcd.c 2003-07-02 14:53:16.000000000 -0700
-+++ 25/drivers/usb/core/hcd.c 2003-07-19 17:03:50.000000000 -0700
-@@ -1293,7 +1293,8 @@ rescan:
- }
-
- /* then kill any current requests */
-- spin_lock_irqsave (&hcd_data_lock, flags);
-+ local_irq_save (flags);
-+ spin_lock (&hcd_data_lock);
- list_for_each_entry (urb, &dev->urb_list, urb_list) {
- int tmp = urb->pipe;
-
-@@ -1311,13 +1312,13 @@ rescan:
- if (urb->status != -EINPROGRESS)
- continue;
- usb_get_urb (urb);
-- spin_unlock_irqrestore (&hcd_data_lock, flags);
-+ spin_unlock (&hcd_data_lock);
-
-- spin_lock_irqsave (&urb->lock, flags);
-+ spin_lock (&urb->lock);
- tmp = urb->status;
- if (tmp == -EINPROGRESS)
- urb->status = -ESHUTDOWN;
-- spin_unlock_irqrestore (&urb->lock, flags);
-+ spin_unlock (&urb->lock);
-
- /* kick hcd unless it's already returning this */
- if (tmp == -EINPROGRESS) {
-@@ -1340,7 +1341,8 @@ rescan:
- /* list contents may have changed */
- goto rescan;
- }
-- spin_unlock_irqrestore (&hcd_data_lock, flags);
-+ spin_unlock (&hcd_data_lock);
-+ local_irq_restore (flags);
-
- /* synchronize with the hardware, so old configuration state
- * clears out immediately (and will be freed).
---- linux-2.6.0-test1/drivers/usb/core/hcd-pci.c 2003-07-02 14:53:16.000000000 -0700
-+++ 25/drivers/usb/core/hcd-pci.c 2003-07-19 17:03:50.000000000 -0700
-@@ -81,7 +81,7 @@ int usb_hcd_pci_probe (struct pci_dev *d
-
- if (!dev->irq) {
- err ("Found HC with no IRQ. Check BIOS/PCI %s setup!",
-- dev->slot_name);
-+ pci_name(dev));
- return -ENODEV;
- }
-
-@@ -99,7 +99,7 @@ int usb_hcd_pci_probe (struct pci_dev *d
- retval = -EFAULT;
- clean_1:
- release_mem_region (resource, len);
-- err ("init %s fail, %d", dev->slot_name, retval);
-+ err ("init %s fail, %d", pci_name(dev), retval);
- return retval;
- }
-
-@@ -136,7 +136,7 @@ clean_2:
- goto clean_1;
- } else {
- release_region (resource, len);
-- err ("init %s fail, %d", dev->slot_name, retval);
-+ err ("init %s fail, %d", pci_name(dev), retval);
- return retval;
- }
- }
-@@ -144,7 +144,7 @@ clean_2:
- hcd->driver = driver;
- hcd->description = driver->description;
- hcd->pdev = dev;
-- hcd->self.bus_name = dev->slot_name;
-+ hcd->self.bus_name = pci_name(dev);
- hcd->product_desc = dev->dev.name;
- hcd->self.controller = &dev->dev;
- hcd->controller = hcd->self.controller;
-@@ -279,6 +279,7 @@ EXPORT_SYMBOL (usb_hcd_pci_remove);
- /**
- * usb_hcd_pci_suspend - power management suspend of a PCI-based HCD
- * @dev: USB Host Controller being suspended
-+ * @state: state that the controller is going into
- *
- * Store this function in the HCD's struct pci_driver as suspend().
- */
---- linux-2.6.0-test1/drivers/usb/core/usb.c 2003-07-02 14:53:16.000000000 -0700
-+++ 25/drivers/usb/core/usb.c 2003-07-19 17:03:50.000000000 -0700
-@@ -80,6 +80,23 @@ static struct device_driver usb_generic_
-
- static int usb_generic_driver_data;
-
-+/* deallocate hcd/hardware state ... and nuke all pending urbs */
-+static void nuke_urbs(struct usb_device *dev)
-+{
-+ void (*disable)(struct usb_device *, int);
-+ int i;
-+
-+ if (!dev || !dev->bus || !dev->bus->op || !dev->bus->op->disable)
-+ return;
-+ dbg("nuking urbs assigned to %s", dev->dev.bus_id);
-+
-+ disable = dev->bus->op->disable;
-+ for (i = 0; i < 15; i++) {
-+ disable(dev, i);
-+ disable(dev, USB_DIR_IN | i);
-+ }
-+}
-+
- /* needs to be called with BKL held */
- int usb_device_probe(struct device *dev)
- {
-@@ -116,6 +133,9 @@ int usb_device_remove(struct device *dev
-
- down(&driver->serialize);
-
-+ /* release all urbs for this device */
-+ nuke_urbs(interface_to_usbdev(intf));
-+
- if (intf->driver && intf->driver->disconnect)
- intf->driver->disconnect(intf);
-
-@@ -896,6 +916,9 @@ void usb_disconnect(struct usb_device **
- usb_disconnect(child);
- }
-
-+ /* deallocate hcd/hardware state ... and nuke all pending urbs */
-+ nuke_urbs(dev);
-+
- /* disconnect() drivers from interfaces (a key side effect) */
- dev_dbg (&dev->dev, "unregistering interfaces\n");
- if (dev->actconfig) {
-@@ -908,16 +931,6 @@ void usb_disconnect(struct usb_device **
- }
- }
-
-- /* deallocate hcd/hardware state */
-- if (ops->disable) {
-- void (*disable)(struct usb_device *, int) = ops->disable;
--
-- for (i = 0; i < 15; i++) {
-- disable (dev, i);
-- disable (dev, USB_DIR_IN | i);
-- }
-- }
--
- dev_dbg (&dev->dev, "unregistering device\n");
- /* Free the device number and remove the /proc/bus/usb entry */
- if (dev->devnum > 0) {
---- linux-2.6.0-test1/drivers/usb/gadget/ether.c 2003-06-14 12:18:35.000000000 -0700
-+++ 25/drivers/usb/gadget/ether.c 2003-07-19 17:03:50.000000000 -0700
-@@ -1,5 +1,5 @@
- /*
-- * ether.c -- CDC 1.1 Ethernet gadget driver
-+ * ether.c -- Ethernet gadget driver, with CDC and non-CDC options
- *
- * Copyright (C) 2003 David Brownell
- *
-@@ -58,21 +58,23 @@
- /*-------------------------------------------------------------------------*/
-
- /*
-- * "Communications Device Class" (CDC) Ethernet class driver
-+ * Ethernet gadget driver -- with CDC and non-CDC options
- *
- * CDC Ethernet is the standard USB solution for sending Ethernet frames
- * using USB. Real hardware tends to use the same framing protocol but look
- * different for control features. And Microsoft pushes their own approach
- * (RNDIS) instead of the standard.
-+ *
-+ * There's some hardware that can't talk CDC. We make that hardware
-+ * implement a "minimalist" vendor-agnostic CDC core: same framing, but
-+ * link-level setup only requires activating the configuration.
- */
-
--#define DRIVER_DESC "CDC Ethernet Gadget"
--#define DRIVER_VERSION "29 April 2003"
-+#define DRIVER_DESC "Ethernet Gadget"
-+#define DRIVER_VERSION "Bastille Day 2003"
-
- static const char shortname [] = "ether";
- static const char driver_desc [] = DRIVER_DESC;
--static const char control_name [] = "Communications Control";
--static const char data_name [] = "CDC Ethernet Data";
-
- #define MIN_PACKET sizeof(struct ethhdr)
- #define MAX_PACKET ETH_DATA_LEN /* biggest packet we'll rx/tx */
-@@ -92,8 +94,7 @@ struct eth_dev {
- const struct usb_endpoint_descriptor
- *in, *out, *status;
-
-- struct semaphore mutex;
-- struct net_device net;
-+ struct net_device *net;
- struct net_device_stats stats;
- atomic_t tx_qlen;
-
-@@ -112,7 +113,7 @@ struct eth_dev {
-
- static unsigned qmult = 4;
-
--#define HS_FACTOR 15
-+#define HS_FACTOR 5
-
- #define qlen(gadget) \
- (qmult*((gadget->speed == USB_SPEED_HIGH) ? HS_FACTOR : 1))
-@@ -128,7 +129,7 @@ module_param (qmult, uint, S_IRUGO|S_IWU
-
- /* Thanks to NetChip Technologies for donating this product ID.
- *
-- * DO NOT REUSE THESE IDs with any other driver!! Ever!!
-+ * DO NOT REUSE THESE IDs with a protocol-incompatible driver!! Ever!!
- * Instead: allocate your own, using normal USB-IF procedures.
- */
- #define DRIVER_VENDOR_NUM 0x0525 /* NetChip */
-@@ -158,6 +159,11 @@ module_param (qmult, uint, S_IRUGO|S_IWU
- * for some reason doesn't handle full speed bulk maxpacket of 64.
- */
-
-+#define DEV_CONFIG_VALUE 3 /* some hardware cares */
-+
-+/* #undef on hardware that can't implement CDC */
-+#define DEV_CONFIG_CDC
-+
- /*
- * NetChip 2280, PCI based.
- *
-@@ -172,7 +178,7 @@ module_param (qmult, uint, S_IRUGO|S_IWU
- #define DRIVER_VERSION_NUM 0x0101
- #define EP0_MAXPACKET 64
- static const char EP_OUT_NAME [] = "ep-a";
--#define EP_OUT_NUM 2
-+#define EP_OUT_NUM 1
- static const char EP_IN_NAME [] = "ep-b";
- #define EP_IN_NUM 2
- static const char EP_STATUS_NAME [] = "ep-f";
-@@ -194,22 +200,21 @@ static inline void hw_optimize (struct u
- #endif
-
- /*
-- * PXA-250 UDC: widely used in second gen Linux-capable PDAs.
-+ * PXA-2xx UDC: widely used in second gen Linux-capable ARM PDAs
-+ * and other products.
- *
-- * no limitations except from set_interface: docs say "no" to a third
-- * interface. and the interrupt-only endpoints don't toggle, so we'll
-- * just use a bulk-capable one instead.
-+ * multiple interfaces (or altsettings) aren't usable. so this hardware
-+ * can't implement CDC, which needs both capabilities.
- */
--#ifdef CONFIG_USB_ETH_PXA250
--#define CHIP "pxa250"
-+#ifdef CONFIG_USB_ETH_PXA2XX
-+#undef DEV_CONFIG_CDC
-+#define CHIP "pxa2xx"
- #define DRIVER_VERSION_NUM 0x0103
- #define EP0_MAXPACKET 16
--static const char EP_OUT_NAME [] = "ep12out-bulk";
--#define EP_OUT_NUM 12
--static const char EP_IN_NAME [] = "ep11in-bulk";
--#define EP_IN_NUM 11
--static const char EP_STATUS_NAME [] = "ep6in-bulk";
--#define EP_STATUS_NUM 6
-+static const char EP_OUT_NAME [] = "ep2out-bulk";
-+#define EP_OUT_NUM 2
-+static const char EP_IN_NAME [] = "ep1in-bulk";
-+#define EP_IN_NUM 1
- /* doesn't support bus-powered operation */
- #define SELFPOWER USB_CONFIG_ATT_SELFPOWER
- /* supports remote wakeup, but this driver doesn't */
-@@ -247,6 +252,29 @@ static const char EP_IN_NAME [] = "ep2in
- # error Configure some USB peripheral controller driver!
- #endif
-
-+/* We normally expect hardware that can talk CDC. That involves
-+ * using multiple interfaces and altsettings, and maybe a status
-+ * interrupt. Driver binding to be done according to USB-IF class,
-+ * though you can use different VENDOR and PRODUCT numbers if you
-+ * want (and they're officially assigned).
-+ *
-+ * For hardware that can't talk CDC, we use the same vendor ID that
-+ * ARM Linux has used for ethernet-over-usb, both with sa1100 and
-+ * with pxa250. We're protocol-compatible, if the host-side drivers
-+ * use the endpoint descriptors. DRIVER_VERSION_NUM is nonzero, so
-+ * drivers that need to hard-wire endpoint numbers have a hook.
-+ */
-+#ifdef DEV_CONFIG_CDC
-+#define DEV_CONFIG_CLASS USB_CLASS_COMM
-+#else
-+#define DEV_CONFIG_CLASS USB_CLASS_VENDOR_SPEC
-+#undef EP_STATUS_NUM
-+#undef DRIVER_VENDOR_NUM
-+#undef DRIVER_PRODUCT_NUM
-+#define DRIVER_VENDOR_NUM 0x049f
-+#define DRIVER_PRODUCT_NUM 0x505a
-+#endif /* CONFIG_CDC_ETHER */
-+
- /* power usage is config specific.
- * hardware that supports remote wakeup defaults to disabling it.
- */
-@@ -274,7 +302,8 @@ static const char EP_IN_NAME [] = "ep2in
- /*-------------------------------------------------------------------------*/
-
- #define xprintk(d,level,fmt,args...) \
-- dev_printk(level , &(d)->gadget->dev , fmt , ## args)
-+ printk(level "%s %s: " fmt , shortname , (d)->gadget->dev.bus_id , \
-+ ## args)
-
- #ifdef DEBUG
- #undef DEBUG
-@@ -309,7 +338,7 @@ static const char EP_IN_NAME [] = "ep2in
- /*
- * DESCRIPTORS ... most are static, but strings and (full) configuration
- * descriptors are built on demand. Notice how most of the cdc descriptors
-- * add no value to simple (typical) configurations.
-+ * aren't needed in the "minimalist" mode.
- */
-
- #define STRING_MANUFACTURER 1
-@@ -323,15 +352,14 @@ static const char EP_IN_NAME [] = "ep2in
- /*
- * This device advertises one configuration.
- */
--#define CONFIG_CDC_ETHER 3
--
- static const struct usb_device_descriptor
- device_desc = {
- .bLength = sizeof device_desc,
- .bDescriptorType = USB_DT_DEVICE,
-
- .bcdUSB = __constant_cpu_to_le16 (0x0200),
-- .bDeviceClass = USB_CLASS_COMM,
-+
-+ .bDeviceClass = DEV_CONFIG_CLASS,
- .bDeviceSubClass = 0,
- .bDeviceProtocol = 0,
- .bMaxPacketSize0 = EP0_MAXPACKET,
-@@ -350,13 +378,26 @@ eth_config = {
- .bDescriptorType = USB_DT_CONFIG,
-
- /* compute wTotalLength on the fly */
-+#ifdef DEV_CONFIG_CDC
- .bNumInterfaces = 2,
-- .bConfigurationValue = CONFIG_CDC_ETHER,
-+#else
-+ .bNumInterfaces = 1,
-+#endif
-+ .bConfigurationValue = DEV_CONFIG_VALUE,
- .iConfiguration = STRING_PRODUCT,
- .bmAttributes = USB_CONFIG_ATT_ONE | SELFPOWER | WAKEUP,
- .bMaxPower = (MAX_USB_POWER + 1) / 2,
- };
-
-+#ifdef DEV_CONFIG_CDC
-+
-+/*
-+ * Compared to the "minimalist" non-CDC model, the CDC model adds
-+ * three class descriptors, two interface descrioptors, and a status
-+ * endpoint. Both have a "data" interface and two bulk endpoints.
-+ * There are also differences in how control requests are handled.
-+ */
-+
- /* master comm interface optionally has a status notification endpoint */
-
- static const struct usb_interface_descriptor
-@@ -446,7 +487,7 @@ static const struct ether_desc ether_des
- * some drivers (like current Linux cdc-ether!) "need" it to exist even
- * if they ignore the connect/disconnect notifications that real aether
- * can provide. more advanced cdc configurations might want to support
-- * encapsulated commands.
-+ * encapsulated commands (vendor-specific, using control-OUT).
- */
-
- #define LOG2_STATUS_INTERVAL_MSEC 6
-@@ -494,6 +535,29 @@ data_intf = {
- .bInterfaceProtocol = 0,
- .iInterface = STRING_DATA,
- };
-+#else
-+
-+/*
-+ * "Minimalist" non-CDC option is a simple vendor-neutral model that most
-+ * full speed controllers can handle: one interface, two bulk endpoints.
-+ */
-+
-+static const struct usb_interface_descriptor
-+data_intf = {
-+ .bLength = sizeof data_intf,
-+ .bDescriptorType = USB_DT_INTERFACE,
-+
-+ .bInterfaceNumber = 0,
-+ .bAlternateSetting = 0,
-+ .bNumEndpoints = 2,
-+ .bInterfaceClass = USB_CLASS_VENDOR_SPEC,
-+ .bInterfaceSubClass = 0,
-+ .bInterfaceProtocol = 0,
-+ .iInterface = STRING_DATA,
-+};
-+
-+#endif /* DEV_CONFIG_CDC */
-+
-
- static const struct usb_endpoint_descriptor
- fs_source_desc = {
-@@ -563,12 +627,12 @@ dev_qualifier = {
- .bDescriptorType = USB_DT_DEVICE_QUALIFIER,
-
- .bcdUSB = __constant_cpu_to_le16 (0x0200),
-- .bDeviceClass = USB_CLASS_VENDOR_SPEC,
-+ .bDeviceClass = DEV_CONFIG_CLASS,
-
- /* assumes ep0 uses the same value for both speeds ... */
- .bMaxPacketSize0 = EP0_MAXPACKET,
-
-- .bNumConfigurations = 2,
-+ .bNumConfigurations = 1,
- };
-
- /* maxpacket and other transfer characteristics vary by speed. */
-@@ -581,16 +645,24 @@ dev_qualifier = {
-
- #endif /* !HIGHSPEED */
-
-+/*-------------------------------------------------------------------------*/
-+
-+/* descriptors that are built on-demand */
-+
-+#ifdef DEV_CONFIG_CDC
- /* address that the host will use ... usually assigned at random */
- static char ethaddr [2 * ETH_ALEN + 1];
-+#endif
-
- /* static strings, in iso 8859/1 */
- static struct usb_string strings [] = {
- { STRING_MANUFACTURER, UTS_SYSNAME " " UTS_RELEASE "/" CHIP, },
- { STRING_PRODUCT, driver_desc, },
-+#ifdef DEV_CONFIG_CDC
- { STRING_ETHADDR, ethaddr, },
-- { STRING_CONTROL, control_name, },
-- { STRING_DATA, data_name, },
-+ { STRING_CONTROL, "CDC Communications Control", },
-+#endif
-+ { STRING_DATA, "Ethernet Data", },
- { } /* end of list */
- };
-
-@@ -607,14 +679,18 @@ static int
- config_buf (enum usb_device_speed speed, u8 *buf, u8 type, unsigned index)
- {
- const unsigned config_len = USB_DT_CONFIG_SIZE
-- + 3 * USB_DT_INTERFACE_SIZE
-+#ifdef DEV_CONFIG_CDC
-+ + 2 * USB_DT_INTERFACE_SIZE
- + sizeof header_desc
- + sizeof union_desc
- + sizeof ether_desc
- #ifdef EP_STATUS_NUM
- + USB_DT_ENDPOINT_SIZE
- #endif
-+#endif /* DEV_CONFIG_CDC */
-+ + USB_DT_INTERFACE_SIZE
- + 2 * USB_DT_ENDPOINT_SIZE;
-+
- #ifdef HIGHSPEED
- int hs;
- #endif
-@@ -636,6 +712,7 @@ config_buf (enum usb_device_speed speed,
- hs = !hs;
- #endif
-
-+#ifdef DEV_CONFIG_CDC
- /* control interface, class descriptors, optional status endpoint */
- memcpy (buf, &control_intf, USB_DT_INTERFACE_SIZE);
- buf += USB_DT_INTERFACE_SIZE;
-@@ -660,6 +737,7 @@ config_buf (enum usb_device_speed speed,
- /* default data altsetting has no endpoints */
- memcpy (buf, &data_nop_intf, USB_DT_INTERFACE_SIZE);
- buf += USB_DT_INTERFACE_SIZE;
-+#endif /* DEV_CONFIG_CDC */
-
- /* the "real" data interface has two endpoints */
- memcpy (buf, &data_intf, USB_DT_INTERFACE_SIZE);
-@@ -684,6 +762,8 @@ config_buf (enum usb_device_speed speed,
-
- /*-------------------------------------------------------------------------*/
-
-+static void eth_start (struct eth_dev *dev, int gfp_flags);
-+
- static int
- set_ether_config (struct eth_dev *dev, int gfp_flags)
- {
-@@ -694,7 +774,8 @@ set_ether_config (struct eth_dev *dev, i
- gadget_for_each_ep (ep, gadget) {
- const struct usb_endpoint_descriptor *d;
-
-- /* NOTE: the host isn't allowed to use these two data
-+#ifdef DEV_CONFIG_CDC
-+ /* With CDC, the host isn't allowed to use these two data
- * endpoints in the default altsetting for the interface.
- * so we don't activate them yet.
- */
-@@ -714,10 +795,11 @@ set_ether_config (struct eth_dev *dev, i
- dev->out_ep = ep;
- dev->out = d;
- continue;
-+ }
-
- #ifdef EP_STATUS_NUM
- /* optional status/notification endpoint */
-- } else if (strcmp (ep->name, EP_STATUS_NAME) == 0) {
-+ else if (strcmp (ep->name, EP_STATUS_NAME) == 0) {
- d = ep_desc (gadget, &hs_status_desc, &fs_status_desc);
- result = usb_ep_enable (ep, d);
- if (result == 0) {
-@@ -726,16 +808,57 @@ set_ether_config (struct eth_dev *dev, i
- dev->status = d;
- continue;
- }
-+ }
- #endif
-
-+#else /* !CONFIG_CDC_ETHER */
-+
-+ /* non-CDC is simpler: if the device is there,
-+ * it's live with rx and tx endpoints.
-+ */
-+ /* one endpoint writes data back IN to the host */
-+ if (strcmp (ep->name, EP_IN_NAME) == 0) {
-+ d = ep_desc (gadget, &hs_source_desc, &fs_source_desc);
-+ result = usb_ep_enable (ep, d);
-+ if (result == 0) {
-+ ep->driver_data = dev;
-+ dev->in_ep = ep;
-+ dev->in = d;
-+ continue;
-+ }
-+
-+ /* one endpoint just reads OUT packets */
-+ } else if (strcmp (ep->name, EP_OUT_NAME) == 0) {
-+ d = ep_desc (gadget, &hs_sink_desc, &fs_sink_desc);
-+ result = usb_ep_enable (ep, d);
-+ if (result == 0) {
-+ ep->driver_data = dev;
-+ dev->out_ep = ep;
-+ dev->out = d;
-+ continue;
-+ }
-+ }
-+
-+#endif /* !CONFIG_CDC_ETHER */
-+
- /* ignore any other endpoints */
-- } else
-+ else
- continue;
-
- /* stop on error */
- ERROR (dev, "can't enable %s, result %d\n", ep->name, result);
- break;
- }
-+ if (!result && (!dev->in_ep || !dev->out_ep))
-+ result = -ENODEV;
-+
-+#ifndef DEV_CONFIG_CDC
-+ if (result == 0) {
-+ netif_carrier_on (dev->net);
-+ if (netif_running (dev->net))
-+ eth_start (dev, GFP_ATOMIC);
-+ }
-+#endif /* !CONFIG_CDC_ETHER */
-
- if (result == 0)
- DEBUG (dev, "qlen %d\n", qlen (gadget));
-@@ -751,8 +874,8 @@ static void eth_reset_config (struct eth
-
- DEBUG (dev, "%s\n", __FUNCTION__);
-
-- netif_stop_queue (&dev->net);
-- netif_carrier_off (&dev->net);
-+ netif_stop_queue (dev->net);
-+ netif_carrier_off (dev->net);
-
- /* just disable endpoints, forcing completion of pending i/o.
- * all our completion handlers free their requests in this case.
-@@ -797,7 +920,7 @@ eth_set_config (struct eth_dev *dev, uns
- hw_optimize (gadget);
-
- switch (number) {
-- case CONFIG_CDC_ETHER:
-+ case DEV_CONFIG_VALUE:
- result = set_ether_config (dev, gfp_flags);
- break;
- default:
-@@ -807,8 +930,6 @@ eth_set_config (struct eth_dev *dev, uns
- return result;
- }
-
-- if (!result && (!dev->in_ep || !dev->out_ep))
-- result = -ENODEV;
- if (result)
- eth_reset_config (dev);
- else {
-@@ -896,6 +1017,7 @@ static void issue_start_status (struct e
- * FIXME ugly idiom, maybe we'd be better with just
- * a "cancel the whole queue" primitive since any
- * unlink-one primitive has way too many error modes.
-+ * here, we "know" toggle is already clear...
- */
- usb_ep_disable (dev->status_ep);
- usb_ep_enable (dev->status_ep, dev->status);
-@@ -953,8 +1075,6 @@ static void eth_setup_complete (struct u
- */
- #define CDC_SET_ETHERNET_PACKET_FILTER 0x43 /* required */
-
--static void eth_start (struct eth_dev *dev, int gfp_flags);
--
- /*
- * The setup() callback implements all the ep0 functionality that's not
- * handled lower down. CDC has a number of less-common features:
-@@ -1018,6 +1138,17 @@ eth_setup (struct usb_gadget *gadget, co
- value = eth_set_config (dev, ctrl->wValue, GFP_ATOMIC);
- spin_unlock (&dev->lock);
- break;
-+#ifdef CONFIG_USB_ETH_PXA2XX
-+ /* PXA UDC prevents us from using SET_INTERFACE in normal ways.
-+ * And it hides GET_CONFIGURATION and GET_INTERFACE too.
-+ */
-+ case USB_REQ_SET_INTERFACE:
-+ spin_lock (&dev->lock);
-+ value = eth_set_config (dev, DEV_CONFIG_VALUE, GFP_ATOMIC);
-+ spin_unlock (&dev->lock);
-+ break;
-+
-+#else /* hardware that that stays out of our way */
- case USB_REQ_GET_CONFIGURATION:
- if (ctrl->bRequestType != USB_DIR_IN)
- break;
-@@ -1056,15 +1187,15 @@ eth_setup (struct usb_gadget *gadget, co
- if (ctrl->wValue == 1) {
- usb_ep_enable (dev->in_ep, dev->in);
- usb_ep_enable (dev->out_ep, dev->out);
-- netif_carrier_on (&dev->net);
-+ netif_carrier_on (dev->net);
- #ifdef EP_STATUS_NUM
- issue_start_status (dev);
- #endif
-- if (netif_running (&dev->net))
-+ if (netif_running (dev->net))
- eth_start (dev, GFP_ATOMIC);
- } else {
-- netif_stop_queue (&dev->net);
-- netif_carrier_off (&dev->net);
-+ netif_stop_queue (dev->net);
-+ netif_carrier_off (dev->net);
- }
- value = 0;
- break;
-@@ -1079,12 +1210,14 @@ eth_setup (struct usb_gadget *gadget, co
-
- /* if carrier is on, data interface is active. */
- *(u8 *)req->buf =
-- ((ctrl->wIndex == 1) && netif_carrier_ok (&dev->net))
-+ ((ctrl->wIndex == 1) && netif_carrier_ok (dev->net))
- ? 1
- : 0,
- value = min (ctrl->wLength, (u16) 1);
- break;
-+#endif
-
-+#ifdef DEV_CONFIG_CDC
- case CDC_SET_ETHERNET_PACKET_FILTER:
- /* see 6.2.30: no data, wIndex = interface,
- * wValue = packet filter bitmap
-@@ -1099,6 +1232,7 @@ eth_setup (struct usb_gadget *gadget, co
- */
- value = 0;
- break;
-+#endif /* DEV_CONFIG_CDC */
-
- default:
- VDEBUG (dev,
-@@ -1129,8 +1263,8 @@ eth_disconnect (struct usb_gadget *gadge
- unsigned long flags;
-
- spin_lock_irqsave (&dev->lock, flags);
-- netif_stop_queue (&dev->net);
-- netif_carrier_off (&dev->net);
-+ netif_stop_queue (dev->net);
-+ netif_carrier_off (dev->net);
- eth_reset_config (dev);
- spin_unlock_irqrestore (&dev->lock, flags);
-
-@@ -1175,10 +1309,10 @@ static int eth_ethtool_ioctl (struct net
-
- memset (&info, 0, sizeof info);
- info.cmd = ETHTOOL_GDRVINFO;
-- strncpy (info.driver, shortname, sizeof info.driver);
-- strncpy (info.version, DRIVER_VERSION, sizeof info.version);
-- strncpy (info.fw_version, CHIP, sizeof info.fw_version);
-- strncpy (info.bus_info, dev->gadget->dev.bus_id,
-+ strlcpy (info.driver, shortname, sizeof info.driver);
-+ strlcpy (info.version, DRIVER_VERSION, sizeof info.version);
-+ strlcpy (info.fw_version, CHIP, sizeof info.fw_version);
-+ strlcpy (info.bus_info, dev->gadget->dev.bus_id,
- sizeof info.bus_info);
- if (copy_to_user (useraddr, &info, sizeof (info)))
- return -EFAULT;
-@@ -1227,7 +1361,7 @@ rx_submit (struct eth_dev *dev, struct u
- int retval = 0;
- size_t size;
-
-- size = (sizeof (struct ethhdr) + dev->net.mtu + RX_EXTRA);
-+ size = (sizeof (struct ethhdr) + dev->net->mtu + RX_EXTRA);
-
- if ((skb = alloc_skb (size, gfp_flags)) == 0) {
- DEBUG (dev, "no rx skb\n");
-@@ -1241,16 +1375,9 @@ rx_submit (struct eth_dev *dev, struct u
- req->complete = rx_complete;
- req->context = skb;
-
-- if (netif_running (&dev->net)) {
-- retval = usb_ep_queue (dev->out_ep, req, gfp_flags);
-- if (retval == -ENOMEM)
-- defer_kevent (dev, WORK_RX_MEMORY);
-- if (retval)
-- DEBUG (dev, "%s %d\n", __FUNCTION__, retval);
-- } else {
-- DEBUG (dev, "%s stopped\n", __FUNCTION__);
-- retval = -ENOLINK;
-- }
-+ retval = usb_ep_queue (dev->out_ep, req, gfp_flags);
-+ if (retval == -ENOMEM)
-+ defer_kevent (dev, WORK_RX_MEMORY);
- if (retval) {
- DEBUG (dev, "rx submit --> %d\n", retval);
- dev_kfree_skb_any (skb);
-@@ -1278,8 +1405,8 @@ static void rx_complete (struct usb_ep *
- break;
- }
-
-- skb->dev = &dev->net;
-- skb->protocol = eth_type_trans (skb, &dev->net);
-+ skb->dev = dev->net;
-+ skb->protocol = eth_type_trans (skb, dev->net);
- dev->stats.rx_packets++;
- dev->stats.rx_bytes += skb->len;
-
-@@ -1294,9 +1421,7 @@ static void rx_complete (struct usb_ep *
- case -ECONNRESET: // unlink
- case -ESHUTDOWN: // disconnect etc
- VDEBUG (dev, "rx shutdown, code %d\n", status);
-- usb_ep_free_request (dev->out_ep, req);
-- req = 0;
-- break;
-+ goto clean;
-
- /* data overrun */
- case -EOVERFLOW:
-@@ -1311,7 +1436,11 @@ static void rx_complete (struct usb_ep *
-
- if (skb)
- dev_kfree_skb_any (skb);
--
-+ if (!netif_running (dev->net)) {
-+clean:
-+ usb_ep_free_request (dev->out_ep, req);
-+ req = 0;
-+ }
- if (req)
- rx_submit (dev, req, GFP_ATOMIC);
- }
-@@ -1323,7 +1452,7 @@ static void eth_work (void *_dev)
- if (test_bit (WORK_RX_MEMORY, &dev->todo)) {
- struct usb_request *req = 0;
-
-- if (netif_running (&dev->net))
-+ if (netif_running (dev->net))
- req = usb_ep_alloc_request (dev->in_ep, GFP_KERNEL);
- else
- clear_bit (WORK_RX_MEMORY, &dev->todo);
-@@ -1342,18 +1471,25 @@ static void tx_complete (struct usb_ep *
- struct sk_buff *skb = req->context;
- struct eth_dev *dev = ep->driver_data;
-
-- if (req->status)
-+ switch (req->status) {
-+ default:
- dev->stats.tx_errors++;
-- else
-+ VDEBUG (dev, "tx err %d\n", req->status);
-+ /* FALLTHROUGH */
-+ case -ECONNRESET: // unlink
-+ case -ESHUTDOWN: // disconnect etc
-+ break;
-+ case 0:
- dev->stats.tx_bytes += skb->len;
-+ }
- dev->stats.tx_packets++;
-
- usb_ep_free_request (ep, req);
- dev_kfree_skb_any (skb);
-
- atomic_inc (&dev->tx_qlen);
-- if (netif_carrier_ok (&dev->net))
-- netif_wake_queue (&dev->net);
-+ if (netif_carrier_ok (dev->net))
-+ netif_wake_queue (dev->net);
- }
-
- static int eth_start_xmit (struct sk_buff *skb, struct net_device *net)
-@@ -1437,7 +1573,7 @@ static void eth_start (struct eth_dev *d
-
- /* and open the tx floodgates */
- atomic_set (&dev->tx_qlen, size);
-- netif_wake_queue (&dev->net);
-+ netif_wake_queue (dev->net);
- }
-
- static int eth_open (struct net_device *net)
-@@ -1445,10 +1581,8 @@ static int eth_open (struct net_device *
- struct eth_dev *dev = (struct eth_dev *) net->priv;
-
- DEBUG (dev, "%s\n", __FUNCTION__);
-- down (&dev->mutex);
-- if (netif_carrier_ok (&dev->net))
-+ if (netif_carrier_ok (dev->net))
- eth_start (dev, GFP_KERNEL);
-- up (&dev->mutex);
- return 0;
- }
-
-@@ -1457,7 +1591,6 @@ static int eth_stop (struct net_device *
- struct eth_dev *dev = (struct eth_dev *) net->priv;
-
- DEBUG (dev, "%s\n", __FUNCTION__);
-- down (&dev->mutex);
- netif_stop_queue (net);
-
- DEBUG (dev, "stop stats: rx/tx %ld/%ld, errs %ld/%ld\n",
-@@ -1469,7 +1602,7 @@ static int eth_stop (struct net_device *
- if (dev->gadget->speed != USB_SPEED_UNKNOWN) {
- usb_ep_disable (dev->in_ep);
- usb_ep_disable (dev->out_ep);
-- if (netif_carrier_ok (&dev->net)) {
-+ if (netif_carrier_ok (dev->net)) {
- DEBUG (dev, "host still using in/out endpoints\n");
- usb_ep_enable (dev->in_ep, dev->in);
- usb_ep_enable (dev->out_ep, dev->out);
-@@ -1480,7 +1613,6 @@ static int eth_stop (struct net_device *
- #endif
- }
-
-- up (&dev->mutex);
- return 0;
- }
-
-@@ -1492,7 +1624,6 @@ eth_unbind (struct usb_gadget *gadget)
- struct eth_dev *dev = get_gadget_data (gadget);
-
- DEBUG (dev, "unbind\n");
-- down (&dev->mutex);
-
- /* we've already been disconnected ... no i/o is active */
- if (dev->req) {
-@@ -1500,15 +1631,13 @@ eth_unbind (struct usb_gadget *gadget)
- dev->req->buf, dev->req->dma,
- USB_BUFSIZ);
- usb_ep_free_request (gadget->ep0, dev->req);
-+ dev->req = 0;
- }
-
-- unregister_netdev (&dev->net);
-- up (&dev->mutex);
-+ unregister_netdev (dev->net);
-
- /* assuming we used keventd, it must quiesce too */
- flush_scheduled_work ();
--
-- kfree (dev);
- set_gadget_data (gadget, 0);
- }
-
-@@ -1517,22 +1646,24 @@ eth_bind (struct usb_gadget *gadget)
- {
- struct eth_dev *dev;
- struct net_device *net;
-+ int status = -ENOMEM;
-+#ifdef DEV_CONFIG_CDC
- u8 node_id [ETH_ALEN];
-
- /* just one upstream link at a time */
- if (ethaddr [0] != 0)
- return -ENODEV;
-+#endif
-
-- dev = kmalloc (sizeof *dev, SLAB_KERNEL);
-- if (!dev)
-- return -ENOMEM;
-- memset (dev, 0, sizeof *dev);
-+ net = alloc_etherdev (sizeof *dev);
-+ if (!net)
-+ return status;
-+ dev = net->priv;
- spin_lock_init (&dev->lock);
-- init_MUTEX_LOCKED (&dev->mutex);
- INIT_WORK (&dev->work, eth_work, dev);
-
- /* network device setup */
-- net = &dev->net;
-+ dev->net = net;
- SET_MODULE_OWNER (net);
- net->priv = dev;
- strcpy (net->name, "usb%d");
-@@ -1545,6 +1676,7 @@ eth_bind (struct usb_gadget *gadget)
- net->dev_addr [0] &= 0xfe; // clear multicast bit
- net->dev_addr [0] |= 0x02; // set local assignment bit (IEEE802)
-
-+#ifdef DEV_CONFIG_CDC
- /* ... another address for the host, on the other end of the
- * link, gets exported through CDC (see CDC spec table 41)
- */
-@@ -1554,6 +1686,7 @@ eth_bind (struct usb_gadget *gadget)
- snprintf (ethaddr, sizeof ethaddr, "%02X%02X%02X%02X%02X%02X",
- node_id [0], node_id [1], node_id [2],
- node_id [3], node_id [4], node_id [5]);
-+#endif
-
- net->change_mtu = eth_change_mtu;
- net->get_stats = eth_get_stats;
-@@ -1567,36 +1700,38 @@ eth_bind (struct usb_gadget *gadget)
- /* preallocate control response and buffer */
- dev->req = usb_ep_alloc_request (gadget->ep0, GFP_KERNEL);
- if (!dev->req)
-- goto enomem;
-+ goto fail;
- dev->req->complete = eth_setup_complete;
- dev->req->buf = usb_ep_alloc_buffer (gadget->ep0, USB_BUFSIZ,
- &dev->req->dma, GFP_KERNEL);
- if (!dev->req->buf) {
- usb_ep_free_request (gadget->ep0, dev->req);
-- goto enomem;
-+ goto fail;
- }
-
- /* finish hookup to lower layer ... */
- dev->gadget = gadget;
- set_gadget_data (gadget, dev);
- gadget->ep0->driver_data = dev;
--
-+ INFO (dev, "%s, " CHIP ", version: " DRIVER_VERSION "\n", driver_desc);
-+#ifdef DEV_CONFIG_CDC
-+ INFO (dev, "CDC host enet %s\n", ethaddr);
-+#endif
-+
- /* two kinds of host-initiated state changes:
- * - iff DATA transfer is active, carrier is "on"
- * - tx queueing enabled if open *and* carrier is "on"
- */
-- INFO (dev, "%s, host enet %s, version: " DRIVER_VERSION "\n",
-- driver_desc, ethaddr);
-- register_netdev (&dev->net);
-- netif_stop_queue (&dev->net);
-- netif_carrier_off (&dev->net);
--
-- up (&dev->mutex);
-- return 0;
-+ netif_stop_queue (dev->net);
-+ netif_carrier_off (dev->net);
-
--enomem:
-+ // SET_NETDEV_DEV (dev->net, &gadget->dev);
-+ status = register_netdev (dev->net);
-+ if (status == 0)
-+ return status;
-+fail:
- eth_unbind (gadget);
-- return -ENOMEM;
-+ return status;
- }
-
- /*-------------------------------------------------------------------------*/
---- linux-2.6.0-test1/drivers/usb/gadget/net2280.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/usb/gadget/net2280.c 2003-07-19 17:03:50.000000000 -0700
-@@ -2496,7 +2496,7 @@ static void net2280_remove (struct pci_d
- device_remove_file (&pdev->dev, &dev_attr_registers);
- pci_set_drvdata (pdev, 0);
-
-- INFO (dev, "unbind from pci %s\n", pdev->slot_name);
-+ INFO (dev, "unbind from pci %s\n", pci_name(pdev));
-
- kfree (dev);
- the_controller = 0;
-@@ -2518,7 +2518,7 @@ static int net2280_probe (struct pci_dev
- * usb_gadget_driver_{register,unregister}() must change.
- */
- if (the_controller) {
-- WARN (the_controller, "ignoring %s\n", pdev->slot_name);
-+ WARN (the_controller, "ignoring %s\n", pci_name(pdev));
- return -EBUSY;
- }
-
-@@ -2534,7 +2534,7 @@ static int net2280_probe (struct pci_dev
- dev->pdev = pdev;
- dev->gadget.ops = &net2280_ops;
-
-- strcpy (dev->gadget.dev.bus_id, pdev->slot_name);
-+ strcpy (dev->gadget.dev.bus_id, pci_name(pdev));
- strcpy (dev->gadget.dev.name, pdev->dev.name);
- dev->gadget.dev.parent = &pdev->dev;
- dev->gadget.dev.dma_mask = pdev->dev.dma_mask;
---- linux-2.6.0-test1/drivers/usb/gadget/net2280.h 2003-06-14 12:18:29.000000000 -0700
-+++ 25/drivers/usb/gadget/net2280.h 2003-07-19 17:03:50.000000000 -0700
-@@ -654,7 +654,7 @@ static inline void net2280_led_shutdown
-
- #define xprintk(dev,level,fmt,args...) \
- printk(level "%s %s: " fmt , driver_name , \
-- dev->pdev->slot_name , ## args)
-+ pci_name(dev->pdev) , ## args)
-
- #ifdef DEBUG
- #undef DEBUG
---- linux-2.6.0-test1/drivers/usb/gadget/zero.c 2003-06-14 12:18:08.000000000 -0700
-+++ 25/drivers/usb/gadget/zero.c 2003-07-19 17:03:50.000000000 -0700
-@@ -92,7 +92,7 @@
-
- /*-------------------------------------------------------------------------*/
-
--#define DRIVER_VERSION "19 Feb 2003"
-+#define DRIVER_VERSION "Bastille Day 2003"
-
- static const char shortname [] = "zero";
- static const char longname [] = "Gadget Zero";
-@@ -160,18 +160,18 @@ static inline void hw_optimize (struct u
- #endif
-
- /*
-- * PXA-250 UDC: widely used in second gen Linux-capable PDAs.
-+ * PXA-2xx UDC: widely used in second gen Linux-capable PDAs.
- *
- * This has fifteen fixed-function full speed endpoints, and it
- * can support all USB transfer types.
- *
-- * It only supports three configurations (numbered 1, 2, or 3)
-- * with two interfaces each ... there's partial hardware support
-- * for set_configuration and set_interface, preventing some more
-- * interesting config/interface/endpoint arrangements.
-+ * These supports three or four configurations, with fixed numbers.
-+ * The hardware interprets SET_INTERFACE, net effect is that you
-+ * can't use altsettings or reset the interfaces independently.
-+ * So stick to a single interface.
- */
--#ifdef CONFIG_USB_ZERO_PXA250
--#define CHIP "pxa250"
-+#ifdef CONFIG_USB_ZERO_PXA2XX
-+#define CHIP "pxa2xx"
- #define DRIVER_VERSION_NUM 0x0103
- #define EP0_MAXPACKET 16
- static const char EP_OUT_NAME [] = "ep12out-bulk";
-@@ -291,9 +291,12 @@ struct zero_dev {
-
- static unsigned buflen = 4096;
- static unsigned qlen = 32;
-+static unsigned pattern = 0;
-
- module_param (buflen, uint, S_IRUGO|S_IWUSR);
- module_param (qlen, uint, S_IRUGO|S_IWUSR);
-+module_param (pattern, uint, S_IRUGO|S_IWUSR);
-+
-
- /*
- * Normally the "loopback" configuration is second (index 1) so
-@@ -497,8 +500,8 @@ static struct usb_gadget_strings stringt
-
- /*
- * config descriptors are also handcrafted. these must agree with code
-- * that sets configurations, and with code managing interface altsettings.
-- * other complexity may come from:
-+ * that sets configurations, and with code managing interfaces and their
-+ * altsettings. other complexity may come from:
- *
- * - high speed support, including "other speed config" rules
- * - multiple configurations
-@@ -506,7 +509,7 @@ static struct usb_gadget_strings stringt
- * - embedded class or vendor-specific descriptors
- *
- * this handles high speed, and has a second config that could as easily
-- * have been an alternate interface setting.
-+ * have been an alternate interface setting (on most hardware).
- *
- * NOTE: to demonstrate (and test) more USB capabilities, this driver
- * should include an altsetting to test interrupt transfers, including
-@@ -608,16 +611,29 @@ check_read_data (
- struct usb_request *req
- )
- {
-- int i;
-+ unsigned i;
-+ u8 *buf = req->buf;
-
-- for (i = 0; i < req->actual; i++) {
-- if (((u8 *)req->buf) [i] != 0) {
-- ERROR (dev, "nonzero OUT byte from host, "
-- "buf [%d] = %d\n",
-- i, ((u8 *)req->buf) [i]);
-- usb_ep_set_halt (ep);
-- return -EINVAL;
-+ for (i = 0; i < req->actual; i++, buf++) {
-+ switch (pattern) {
-+ /* all-zeroes has no synchronization issues */
-+ case 0:
-+ if (*buf == 0)
-+ continue;
-+ break;
-+ /* mod63 stays in sync with short-terminated transfers,
-+ * or otherwise when host and gadget agree on how large
-+ * each usb transfer request should be. resync is done
-+ * with set_interface or set_config.
-+ */
-+ case 1:
-+ if (*buf == (u8)(i % 63))
-+ continue;
-+ break;
- }
-+ ERROR (dev, "bad OUT byte, buf [%d] = %d\n", i, *buf);
-+ usb_ep_set_halt (ep);
-+ return -EINVAL;
- }
- return 0;
- }
-@@ -629,7 +645,18 @@ reinit_write_data (
- struct usb_request *req
- )
- {
-- memset (req->buf, 0, req->length);
-+ unsigned i;
-+ u8 *buf = req->buf;
-+
-+ switch (pattern) {
-+ case 0:
-+ memset (req->buf, 0, req->length);
-+ break;
-+ case 1:
-+ for (i = 0; i < req->length; i++)
-+ *buf++ = (u8) (i % 63);
-+ break;
-+ }
- }
-
- /* if there is only one request in the queue, there'll always be an
-@@ -651,10 +678,13 @@ static void source_sink_complete (struct
- break;
-
- /* this endpoint is normally active while we're configured */
-+ case -ECONNABORTED: /* hardware forced ep reset */
- case -ECONNRESET: /* request dequeued */
- case -ESHUTDOWN: /* disconnect from host */
- VDEBUG (dev, "%s gone (%d), %d/%d\n", ep->name, status,
- req->actual, req->length);
-+ if (ep == dev->out_ep)
-+ check_read_data (dev, ep, req);
- free_ep_req (ep, req);
- return;
-
-@@ -693,6 +723,9 @@ source_sink_start_ep (struct usb_ep *ep,
- memset (req->buf, 0, req->length);
- req->complete = source_sink_complete;
-
-+ if (strcmp (ep->name, EP_IN_NAME) == 0)
-+ reinit_write_data (ep->driver_data, ep, req);
-+
- status = usb_ep_queue (ep, req, gfp_flags);
- if (status) {
- struct zero_dev *dev = ep->driver_data;
-@@ -801,6 +834,8 @@ static void loopback_complete (struct us
- * rely on the hardware driver to clean up on disconnect or
- * endpoint disable.
- */
-+ case -ECONNABORTED: /* hardware forced ep reset */
-+ case -ECONNRESET: /* request dequeued */
- case -ESHUTDOWN: /* disconnect from host */
- free_ep_req (ep, req);
- return;
-@@ -905,7 +940,7 @@ static void zero_reset_config (struct ze
- *
- * note that some device controller hardware will constrain what this
- * code can do, perhaps by disallowing more than one configuration or
-- * by limiting configuration choices (like the pxa250).
-+ * by limiting configuration choices (like the pxa2xx).
- */
- static int
- zero_set_config (struct zero_dev *dev, unsigned number, int gfp_flags)
-@@ -1046,7 +1081,8 @@ zero_setup (struct usb_gadget *gadget, c
- break;
-
- /* until we add altsetting support, or other interfaces,
-- * only 0/0 are possible.
-+ * only 0/0 are possible. pxa2xx only supports 0/0 (poorly)
-+ * and already killed pending endpoint I/O.
- */
- case USB_REQ_SET_INTERFACE:
- if (ctrl->bRequestType != USB_RECIP_INTERFACE)
---- linux-2.6.0-test1/drivers/usb/host/ohci-hcd.c 2003-06-14 12:17:57.000000000 -0700
-+++ 25/drivers/usb/host/ohci-hcd.c 2003-07-19 17:03:50.000000000 -0700
-@@ -319,6 +319,7 @@ ohci_endpoint_disable (struct usb_hcd *h
- int epnum = ep & USB_ENDPOINT_NUMBER_MASK;
- unsigned long flags;
- struct ed *ed;
-+ unsigned limit = 1000;
-
- /* ASSERT: any requests/urbs are being unlinked */
- /* ASSERT: nobody can be submitting urbs for this any more */
-@@ -337,6 +338,8 @@ rescan:
- ed->state = ED_IDLE;
- switch (ed->state) {
- case ED_UNLINK: /* wait for hw to finish? */
-+ /* major IRQ delivery trouble loses INTR_SF too... */
-+ WARN_ON (limit-- == 0);
- spin_unlock_irqrestore (&ohci->lock, flags);
- set_current_state (TASK_UNINTERRUPTIBLE);
- schedule_timeout (1);
---- linux-2.6.0-test1/drivers/usb/host/ohci-q.c 2003-06-14 12:18:34.000000000 -0700
-+++ 25/drivers/usb/host/ohci-q.c 2003-07-19 17:03:50.000000000 -0700
-@@ -43,6 +43,16 @@ finish_urb (struct ohci_hcd *ohci, struc
- spin_lock (&urb->lock);
- if (likely (urb->status == -EINPROGRESS))
- urb->status = 0;
-+ /* report short control reads right even though the data TD always
-+ * has TD_R set. (much simpler, but creates the 1-td limit.)
-+ */
-+ if (unlikely (urb->transfer_flags & URB_SHORT_NOT_OK)
-+ && unlikely (usb_pipecontrol (urb->pipe))
-+ && urb->actual_length < urb->transfer_buffer_length
-+ && usb_pipein (urb->pipe)
-+ && urb->status == 0) {
-+ urb->status = -EREMOTEIO;
-+ }
- spin_unlock (&urb->lock);
-
- // what lock protects these?
---- linux-2.6.0-test1/drivers/usb/host/uhci-hcd.c 2003-07-02 14:53:16.000000000 -0700
-+++ 25/drivers/usb/host/uhci-hcd.c 2003-07-19 17:03:50.000000000 -0700
-@@ -2007,19 +2007,17 @@ static int suspend_allowed(struct uhci_h
- unsigned int io_addr = uhci->io_addr;
- int i;
-
-- if (!uhci->hcd.pdev ||
-- uhci->hcd.pdev->vendor != PCI_VENDOR_ID_INTEL ||
-- uhci->hcd.pdev->device != PCI_DEVICE_ID_INTEL_82371AB_2)
-+ if (!uhci->hcd.pdev || uhci->hcd.pdev->vendor != PCI_VENDOR_ID_INTEL)
- return 1;
-
-- /* This is a 82371AB/EB/MB USB controller which has a bug that
-- * causes false resume indications if any port has an
-- * over current condition. To prevent problems, we will not
-- * allow a global suspend if any ports are OC.
-+ /* Some of Intel's USB controllers have a bug that causes false
-+ * resume indications if any port has an over current condition.
-+ * To prevent problems, we will not allow a global suspend if
-+ * any ports are OC.
- *
-- * Some motherboards using the 82371AB/EB/MB (but not the USB portion)
-- * appear to hardwire the over current inputs active to disable
-- * the USB ports.
-+ * Some motherboards using Intel's chipsets (but not using all
-+ * the USB ports) appear to hardwire the over current inputs active
-+ * to disable the USB ports.
- */
-
- /* check for over current condition on any port */
---- linux-2.6.0-test1/drivers/usb/image/hpusbscsi.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/usb/image/hpusbscsi.c 2003-07-19 17:03:50.000000000 -0700
-@@ -9,7 +9,7 @@
- #include <linux/smp_lock.h>
- #include <linux/usb.h>
- #include <asm/atomic.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include "../../scsi/scsi.h"
- #include "../../scsi/hosts.h"
-
-@@ -109,7 +109,8 @@ hpusbscsi_usb_probe(struct usb_interface
- goto out_unlink_controlurb;
-
- new->host->hostdata[0] = (unsigned long)new;
-- scsi_add_host(new->host, &intf->dev);
-+ scsi_add_host(new->host, &intf->dev); /* XXX handle failure */
-+ scsi_scan_host(new->host);
-
- new->sense_command[0] = REQUEST_SENSE;
- new->sense_command[4] = HPUSBSCSI_SENSE_LENGTH;
-@@ -306,7 +307,10 @@ DEBUG("Getting status byte %d \n",hpusbs
- if(unlikely(u->status < 0)) {
- if (likely(hpusbscsi->state != HP_STATE_FREE))
- handle_usb_error(hpusbscsi);
-- return;
-+ if (u->status == -ECONNRESET || u->status == -ENOENT || u->status == -ESHUTDOWN)
-+ return;
-+ else
-+ goto resub;
- }
-
- scsi_state = hpusbscsi->scsi_state_byte;
-@@ -348,6 +352,8 @@ DEBUG("Getting status byte %d \n",hpusbs
- TRACE_STATE;
- break;
- }
-+resub:
-+ usb_submit_urb(u, GFP_ATOMIC);
- }
-
- static void simple_command_callback(struct urb *u, struct pt_regs *regs)
-@@ -427,7 +433,7 @@ static void simple_done (struct urb *u,
- hpusbscsi->state = HP_STATE_WAIT;
- } else {
- issue_request_sense(hpusbscsi);
-- }
-+ }
- }
- } else {
- if (likely(hpusbscsi->scallback != NULL))
---- linux-2.6.0-test1/drivers/usb/image/microtek.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/usb/image/microtek.c 2003-07-19 17:03:50.000000000 -0700
-@@ -134,7 +134,7 @@
- #include <linux/proc_fs.h>
-
- #include <asm/atomic.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include "../../scsi/scsi.h"
- #include "../../scsi/hosts.h"
-
-@@ -817,7 +817,8 @@ static int mts_usb_probe(struct usb_inte
- goto out_free_urb;
-
- new_desc->host->hostdata[0] = (unsigned long)new_desc;
-- scsi_add_host(new_desc->host, NULL);
-+ scsi_add_host(new_desc->host, NULL); /* XXX handle failure */
-+ scsi_scan_host(new_desc->host);
-
- usb_set_intfdata(intf, new_desc);
- return 0;
---- linux-2.6.0-test1/drivers/usb/image/scanner.c 2003-06-14 12:18:05.000000000 -0700
-+++ 25/drivers/usb/image/scanner.c 2003-07-19 17:03:50.000000000 -0700
-@@ -364,6 +364,11 @@
- * Mustek, Pacific Image Electronics, Plustek, and Visioneer scanners.
- * Fixed names of some other scanners.
- *
-+ * 0.4.14 2003-07-15
-+ * - Fixed race between open and probe (Oliver Neukum).
-+ * - Added vendor/product ids for Avision, Canon, HP, Microtek and Relisys scanners.
-+ * - Clean up irq urb when not enough memory is available.
-+ *
- * TODO
- * - Performance
- * - Select/poll methods
-@@ -1068,6 +1073,9 @@ probe_scanner(struct usb_interface *intf
- /* Ok, now initialize all the relevant values */
- if (!(scn->obuf = (char *)kmalloc(OBUF_SIZE, GFP_KERNEL))) {
- err("probe_scanner(%d): Not enough memory for the output buffer.", intf->minor);
-+ if (have_intr)
-+ usb_unlink_urb(scn->scn_irq);
-+ usb_free_urb(scn->scn_irq);
- kfree(scn);
- up(&scn_mutex);
- return -ENOMEM;
-@@ -1076,6 +1084,9 @@ probe_scanner(struct usb_interface *intf
-
- if (!(scn->ibuf = (char *)kmalloc(IBUF_SIZE, GFP_KERNEL))) {
- err("probe_scanner(%d): Not enough memory for the input buffer.", intf->minor);
-+ if (have_intr)
-+ usb_unlink_urb(scn->scn_irq);
-+ usb_free_urb(scn->scn_irq);
- kfree(scn->obuf);
- kfree(scn);
- up(&scn_mutex);
-@@ -1117,10 +1128,9 @@ probe_scanner(struct usb_interface *intf
- info ("USB scanner device (0x%04x/0x%04x) now attached to %s",
- dev->descriptor.idVendor, dev->descriptor.idProduct, name);
-
-- up(&scn_mutex);
--
- usb_set_intfdata(intf, scn);
--
-+ up(&scn_mutex);
-+
- return 0;
- }
-
---- linux-2.6.0-test1/drivers/usb/image/scanner.h 2003-06-14 12:18:08.000000000 -0700
-+++ 25/drivers/usb/image/scanner.h 2003-07-19 17:03:50.000000000 -0700
-@@ -43,7 +43,7 @@
-
- // #define DEBUG
-
--#define DRIVER_VERSION "0.4.13"
-+#define DRIVER_VERSION "0.4.14"
- #define DRIVER_DESC "USB Scanner Driver"
-
- #include <linux/usb.h>
-@@ -103,6 +103,7 @@ static struct usb_device_id scanner_devi
- /* Avision */
- { USB_DEVICE(0x0638, 0x0268) }, /* iVina 1200U */
- { USB_DEVICE(0x0638, 0x0a10) }, /* iVina FB1600 (=Umax Astra 4500) */
-+ { USB_DEVICE(0x0638, 0x0a20) }, /* iVina FB1800 (=Umax Astra 4700) */
- /* Benq: see Acer */
- /* Brother */
- { USB_DEVICE(0x04f9, 0x010f) }, /* MFC 5100C */
-@@ -115,10 +116,12 @@ static struct usb_device_id scanner_devi
- { USB_DEVICE(0x04a9, 0x2206) }, /* CanoScan N650U/N656U */
- { USB_DEVICE(0x04a9, 0x2207) }, /* CanoScan N1220U */
- { USB_DEVICE(0x04a9, 0x2208) }, /* CanoScan D660U */
-+ { USB_DEVICE(0x04a9, 0x220a) }, /* CanoScan D2400UF */
- { USB_DEVICE(0x04a9, 0x220b) }, /* CanoScan D646U */
- { USB_DEVICE(0x04a9, 0x220c) }, /* CanoScan D1250U2 */
- { USB_DEVICE(0x04a9, 0x220d) }, /* CanoScan N670U/N676U/LIDE 20 */
- { USB_DEVICE(0x04a9, 0x220e) }, /* CanoScan N1240U/LIDE 30 */
-+ { USB_DEVICE(0x04a9, 0x220f) }, /* CanoScan 8000F */
- { USB_DEVICE(0x04a9, 0x2213) }, /* LIDE 50 */
- { USB_DEVICE(0x04a9, 0x3042) }, /* FS4000US */
- /* Colorado -- See Primax/Colorado below */
-@@ -158,6 +161,7 @@ static struct usb_device_id scanner_devi
- { USB_DEVICE(0x03f0, 0x0901) }, /* ScanJet 2300C */
- { USB_DEVICE(0x03F0, 0x1005) }, /* ScanJet 5400C */
- { USB_DEVICE(0x03F0, 0x1105) }, /* ScanJet 5470C */
-+ { USB_DEVICE(0x03f0, 0x1205) }, /* ScanJet 5550C */
- { USB_DEVICE(0x03f0, 0x1305) }, /* Scanjet 4570c */
- { USB_DEVICE(0x03f0, 0x1411) }, /* PSC 750 */
- { USB_DEVICE(0x03f0, 0x2005) }, /* ScanJet 3570c */
-@@ -173,6 +177,7 @@ static struct usb_device_id scanner_devi
- /* Memorex */
- { USB_DEVICE(0x0461, 0x0346) }, /* 6136u - repackaged Primax ? */
- /* Microtek */
-+ { USB_DEVICE(0x05da, 0x20c9) }, /* ScanMaker 6700 */
- { USB_DEVICE(0x05da, 0x30ce) }, /* ScanMaker 3800 */
- { USB_DEVICE(0x05da, 0x30cf) }, /* ScanMaker 4800 */
- { USB_DEVICE(0x04a7, 0x0224) }, /* Scanport 3000 (actually Visioneer?)*/
-@@ -250,6 +255,7 @@ static struct usb_device_id scanner_devi
- { USB_DEVICE(0x06dc, 0x0014) }, /* Winscan Pro 2448U */
- /* Relisis */
- // { USB_DEVICE(0x0475, 0x0103) }, /* Episode - undetected endpoint */
-+ { USB_DEVICE(0x0475, 0x0210) }, /* Scorpio Ultra 3 */
- /* Seiko/Epson Corp. */
- { USB_DEVICE(0x04b8, 0x0101) }, /* Perfection 636U and 636Photo */
- { USB_DEVICE(0x04b8, 0x0102) }, /* GT-2200 */
---- linux-2.6.0-test1/drivers/usb/media/dabusb.c 2003-06-14 12:18:23.000000000 -0700
-+++ 25/drivers/usb/media/dabusb.c 2003-07-19 17:03:50.000000000 -0700
-@@ -721,7 +721,7 @@ static struct usb_class_driver dabusb_cl
-
-
- /* --------------------------------------------------------------------- */
--static int dabusb_probe (struct usb_interface *intf,
-+static int dabusb_probe (struct usb_interface *intf,
- const struct usb_device_id *id)
- {
- struct usb_device *usbdev = interface_to_usbdev(intf);
-@@ -738,9 +738,7 @@ static int dabusb_probe (struct usb_inte
- if (intf->altsetting->desc.bInterfaceNumber != _DABUSB_IF && usbdev->descriptor.idProduct == 0x9999)
- return -ENODEV;
-
-- retval = usb_register_dev(intf, &dabusb_class);
-- if (retval)
-- return -ENOMEM;
-+
-
- s = &dabusb[intf->minor];
-
-@@ -766,8 +764,15 @@ static int dabusb_probe (struct usb_inte
- }
- }
- dbg("bound to interface: %d", ifnum);
-- up (&s->mutex);
- usb_set_intfdata (intf, s);
-+ up (&s->mutex);
-+
-+ retval = usb_register_dev(intf, &dabusb_class);
-+ if (retval) {
-+ usb_set_intfdata (intf, NULL);
-+ return -ENOMEM;
-+ }
-+
- return 0;
-
- reject:
---- linux-2.6.0-test1/drivers/usb/media/vicam.c 2003-06-26 22:07:25.000000000 -0700
-+++ 25/drivers/usb/media/vicam.c 2003-07-19 17:04:54.000000000 -0700
-@@ -611,15 +611,20 @@ vicam_ioctl(struct inode *inode, struct
-
- case VIDIOCSPICT:
- {
-- struct video_picture *vp = (struct video_picture *) arg;
-+ struct video_picture vp;
-
-- DBG("VIDIOCSPICT depth = %d, pal = %d\n", vp->depth,
-- vp->palette);
-+ if (copy_from_user(&vp, arg, sizeof (vp))) {
-+ retval = -EFAULT;
-+ break;
-+ }
-
-- cam->gain = vp->brightness >> 8;
-+ DBG("VIDIOCSPICT depth = %d, pal = %d\n", vp.depth,
-+ vp.palette);
-
-- if (vp->depth != 24
-- || vp->palette != VIDEO_PALETTE_RGB24)
-+ cam->gain = vp.brightness >> 8;
-+
-+ if (vp.depth != 24
-+ || vp.palette != VIDEO_PALETTE_RGB24)
- retval = -EINVAL;
-
- break;
-@@ -652,10 +657,15 @@ vicam_ioctl(struct inode *inode, struct
- case VIDIOCSWIN:
- {
-
-- struct video_window *vw = (struct video_window *) arg;
-- DBG("VIDIOCSWIN %d x %d\n", vw->width, vw->height);
-+ struct video_window vw;
-+
-+ if (copy_from_user(&vw, arg, sizeof (vw))) {
-+ retval = -EFAULT;
-+ break;
-+ }
-+ DBG("VIDIOCSWIN %d x %d\n", vw.width, vw.height);
-
-- if ( vw->width != 320 || vw->height != 240 )
-+ if ( vw.width != 320 || vw.height != 240 )
- retval = -EFAULT;
-
- break;
---- linux-2.6.0-test1/drivers/usb/misc/usblcd.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/usb/misc/usblcd.c 2003-07-19 17:03:50.000000000 -0700
-@@ -1,4 +1,4 @@
--/*****************************************************************************
-+/*****************************************************************************
- * USBLCD Kernel Driver *
- * See http://www.usblcd.de for Hardware and Documentation. *
- * Version 1.03 *
-@@ -18,7 +18,7 @@
- #include <asm/uaccess.h>
- #include <linux/usb.h>
-
--#define DRIVER_VERSION "USBLCD Driver Version 1.03"
-+#define DRIVER_VERSION "USBLCD Driver Version 1.04"
-
- #define USBLCD_MINOR 144
-
-@@ -257,7 +257,7 @@ static int probe_lcd(struct usb_interfac
- struct lcd_usb_data *lcd = &lcd_instance;
- int i;
- int retval;
--
-+
- if (dev->descriptor.idProduct != 0x0001 ) {
- warn(KERN_INFO "USBLCD model not supported.");
- return -ENODEV;
-@@ -274,30 +274,32 @@ static int probe_lcd(struct usb_interfac
- (i & 0xF000)>>12,(i & 0xF00)>>8,(i & 0xF0)>>4,(i & 0xF),
- dev->devnum);
-
-- retval = usb_register_dev(intf, &usb_lcd_class);
-- if (retval) {
-- err("Not able to get a minor for this device.");
-- return -ENOMEM;
-- }
-+
-
- lcd->present = 1;
- lcd->lcd_dev = dev;
-
- if (!(lcd->obuf = (char *) kmalloc(OBUF_SIZE, GFP_KERNEL))) {
- err("probe_lcd: Not enough memory for the output buffer");
-- usb_deregister_dev(intf, &usb_lcd_class);
- return -ENOMEM;
- }
- dbg("probe_lcd: obuf address:%p", lcd->obuf);
-
- if (!(lcd->ibuf = (char *) kmalloc(IBUF_SIZE, GFP_KERNEL))) {
- err("probe_lcd: Not enough memory for the input buffer");
-- usb_deregister_dev(intf, &usb_lcd_class);
- kfree(lcd->obuf);
- return -ENOMEM;
- }
- dbg("probe_lcd: ibuf address:%p", lcd->ibuf);
-
-+ retval = usb_register_dev(intf, &usb_lcd_class);
-+ if (retval) {
-+ err("Not able to get a minor for this device.");
-+ kfree(lcd->obuf);
-+ kfree(lcd->ibuf);
-+ return -ENOMEM;
-+ }
-+
- usb_set_intfdata (intf, lcd);
- return 0;
- }
---- linux-2.6.0-test1/drivers/usb/misc/usbtest.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/usb/misc/usbtest.c 2003-07-19 17:03:50.000000000 -0700
-@@ -47,6 +47,7 @@ struct usbtest_info {
- const char *name;
- u8 ep_in; /* bulk/intr source */
- u8 ep_out; /* bulk/intr sink */
-+ unsigned autoconf : 1;
- int alt;
- };
-
-@@ -78,6 +79,61 @@ static struct usb_device *testdev_to_usb
-
- /*-------------------------------------------------------------------------*/
-
-+static int
-+get_endpoints (struct usbtest_dev *dev, struct usb_interface *intf)
-+{
-+ int tmp;
-+ struct usb_host_interface *alt;
-+ struct usb_host_endpoint *in, *out;
-+ struct usb_device *udev;
-+
-+ for (tmp = 0; tmp < intf->max_altsetting; tmp++) {
-+ unsigned ep;
-+
-+ in = out = 0;
-+ alt = intf->altsetting + tmp;
-+
-+ /* take the first altsetting with in-bulk + out-bulk;
-+ * ignore other endpoints and altsetttings.
-+ */
-+ for (ep = 0; ep < alt->desc.bNumEndpoints; ep++) {
-+ struct usb_host_endpoint *e;
-+
-+ e = alt->endpoint + ep;
-+ if (e->desc.bmAttributes != USB_ENDPOINT_XFER_BULK)
-+ continue;
-+ if (e->desc.bEndpointAddress & USB_DIR_IN) {
-+ if (!in)
-+ in = e;
-+ } else {
-+ if (!out)
-+ out = e;
-+ }
-+ if (in && out)
-+ goto found;
-+ }
-+ }
-+ return -EINVAL;
-+
-+found:
-+ udev = testdev_to_usbdev (dev);
-+ if (alt->desc.bAlternateSetting != 0) {
-+ tmp = usb_set_interface (udev,
-+ alt->desc.bInterfaceNumber,
-+ alt->desc.bAlternateSetting);
-+ if (tmp < 0)
-+ return tmp;
-+ }
-+
-+ dev->in_pipe = usb_rcvbulkpipe (udev,
-+ in->desc.bEndpointAddress & USB_ENDPOINT_NUMBER_MASK);
-+ dev->out_pipe = usb_sndbulkpipe (udev,
-+ out->desc.bEndpointAddress & USB_ENDPOINT_NUMBER_MASK);
-+ return 0;
-+}
-+
-+/*-------------------------------------------------------------------------*/
-+
- /* Support for testing basic non-queued I/O streams.
- *
- * These just package urbs as requests that can be easily canceled.
-@@ -1275,14 +1331,26 @@ usbtest_probe (struct usb_interface *int
- wtest = " intr-out";
- }
- } else {
-- if (info->ep_in) {
-- dev->in_pipe = usb_rcvbulkpipe (udev, info->ep_in);
-- rtest = " bulk-in";
-+ if (info->autoconf) {
-+ int status;
-+
-+ status = get_endpoints (dev, intf);
-+ if (status < 0) {
-+ dbg ("couldn't get endpoints, %d\n", status);
-+ return status;
-+ }
-+ } else {
-+ if (info->ep_in)
-+ dev->in_pipe = usb_rcvbulkpipe (udev,
-+ info->ep_in);
-+ if (info->ep_out)
-+ dev->out_pipe = usb_sndbulkpipe (udev,
-+ info->ep_out);
- }
-- if (info->ep_out) {
-- dev->out_pipe = usb_sndbulkpipe (udev, info->ep_out);
-+ if (dev->in_pipe)
-+ rtest = " bulk-in";
-+ if (dev->out_pipe)
- wtest = " bulk-out";
-- }
- }
-
- usb_set_intfdata (intf, dev);
-@@ -1336,11 +1404,6 @@ static struct usbtest_info ez2_info = {
- };
-
- /* ezusb family device with dedicated usb test firmware,
-- * or a peripheral running Linux and 'zero.c' test firmware.
-- *
-- * FIXME usbtest should read the descriptors, since compatible
-- * test firmware might run on hardware (pxa250 for one) that
-- * can't configure an ep2in-bulk.
- */
- static struct usbtest_info fw_info = {
- .name = "usb test device",
-@@ -1349,10 +1412,20 @@ static struct usbtest_info fw_info = {
- .alt = 0,
- };
-
-+/* peripheral running Linux and 'zero.c' test firmware, or
-+ * its user-mode cousin. different versions of this use
-+ * different hardware with the same vendor/product codes.
-+ * host side MUST rely on the endpoint descriptors.
-+ */
-+static struct usbtest_info gz_info = {
-+ .name = "Linux gadget zero",
-+ .autoconf = 1,
-+ .alt = 0,
-+};
-+
- static struct usbtest_info um_info = {
-- .name = "user mode test driver",
-- .ep_in = 7,
-- .ep_out = 3,
-+ .name = "Linux user mode test driver",
-+ .autoconf = 1,
- .alt = -1,
- };
-
-@@ -1418,7 +1491,7 @@ static struct usb_device_id id_table []
-
- /* "Gadget Zero" firmware runs under Linux */
- { USB_DEVICE (0x0525, 0xa4a0),
-- .driver_info = (unsigned long) &fw_info,
-+ .driver_info = (unsigned long) &gz_info,
- },
-
- /* so does a user-mode variant */
---- linux-2.6.0-test1/drivers/usb/net/ax8817x.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/usb/net/ax8817x.c 2003-07-19 17:03:50.000000000 -0700
-@@ -1208,6 +1208,7 @@ static int ax8817x_bind(struct usb_inter
- net->init = ax8817x_net_init;
- net->priv = ax_info;
-
-+ SET_NETDEV_DEV(net, &intf->dev);
- ret = register_netdev(net);
- if (ret < 0) {
- err("%s: Failed net init (%d)\n", __FUNCTION__, ret);
---- linux-2.6.0-test1/drivers/usb/net/catc.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/usb/net/catc.c 2003-07-19 17:03:50.000000000 -0700
-@@ -936,6 +936,7 @@ static int catc_probe(struct usb_interfa
- printk("%2.2x.\n", netdev->dev_addr[i]);
- usb_set_intfdata(intf, catc);
-
-+ SET_NETDEV_DEV(netdev, &intf->dev);
- if (register_netdev(netdev) != 0) {
- usb_set_intfdata(intf, NULL);
- usb_free_urb(catc->ctrl_urb);
---- linux-2.6.0-test1/drivers/usb/net/kaweth.c 2003-07-02 14:53:16.000000000 -0700
-+++ 25/drivers/usb/net/kaweth.c 2003-07-19 17:03:50.000000000 -0700
-@@ -1123,8 +1123,9 @@ static int kaweth_probe(
- if (dma_supported (&intf->dev, 0xffffffffffffffffULL))
- kaweth->net->features |= NETIF_F_HIGHDMA;
-
-+ SET_NETDEV_DEV(netdev, &intf->dev);
- if (register_netdev(netdev) != 0) {
-- kaweth_err("Error calling init_etherdev.");
-+ kaweth_err("Error registering netdev.");
- goto err_intfdata;
- }
-
---- linux-2.6.0-test1/drivers/usb/net/pegasus.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/usb/net/pegasus.c 2003-07-19 17:03:50.000000000 -0700
-@@ -1262,7 +1262,6 @@ static int pegasus_probe(struct usb_inte
- }
- set_ethernet_addr(pegasus);
- fill_skb_pool(pegasus);
-- printk("%s: %s\n", net->name, usb_dev_id[dev_index].name);
- if (pegasus->features & PEGASUS_II) {
- info("setup Pegasus II specific registers");
- setup_pegasus_II(pegasus);
-@@ -1273,9 +1272,11 @@ static int pegasus_probe(struct usb_inte
- pegasus->phy = 1;
- }
- usb_set_intfdata(intf, pegasus);
-+ SET_NETDEV_DEV(net, &intf->dev);
- res = register_netdev(net);
- if (res)
- goto out4;
-+ printk("%s: %s\n", net->name, usb_dev_id[dev_index].name);
- return 0;
-
- out4:
---- linux-2.6.0-test1/drivers/usb/net/rtl8150.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/usb/net/rtl8150.c 2003-07-19 17:03:50.000000000 -0700
-@@ -830,6 +830,7 @@ static int rtl8150_probe(struct usb_inte
-
- usb_set_intfdata(intf, dev);
-
-+ SET_NETDEV_DEV(netdev, &intf->dev);
- if (register_netdev(netdev) != 0) {
- err("couldn't register the device");
- goto out2;
---- linux-2.6.0-test1/drivers/usb/net/usbnet.c 2003-07-13 21:44:34.000000000 -0700
-+++ 25/drivers/usb/net/usbnet.c 2003-07-19 17:03:50.000000000 -0700
-@@ -2602,7 +2602,7 @@ usbnet_probe (struct usb_interface *udev
-
- dev->maxpacket = usb_maxpacket (dev->udev, dev->out, 1);
-
-- SET_NETDEV_DEV(dev->net, &dev->udev->dev);
-+ SET_NETDEV_DEV(dev->net, &udev->dev);
- status = register_netdev (dev->net);
- if (status)
- goto out3;
---- linux-2.6.0-test1/drivers/usb/serial/ftdi_sio.c 2003-07-13 21:44:34.000000000 -0700
-+++ 25/drivers/usb/serial/ftdi_sio.c 2003-07-19 17:03:50.000000000 -0700
-@@ -257,6 +257,7 @@ static struct usb_device_id id_table_8U2
- { USB_DEVICE_VER(FTDI_VID, FTDI_XF_634_PID, 0, 0x3ff) },
- { USB_DEVICE_VER(FTDI_VID, FTDI_XF_632_PID, 0, 0x3ff) },
- { USB_DEVICE_VER(FTDI_VID, FTDI_VNHCPCUSB_D_PID, 0, 0x3ff) },
-+ { USB_DEVICE_VER(FTDI_VID, FTDI_DSS20_PID, 0, 0x3ff) },
- { USB_DEVICE_VER(FTDI_MTXORB_VID, FTDI_MTXORB_0_PID, 0, 0x3ff) },
- { USB_DEVICE_VER(FTDI_MTXORB_VID, FTDI_MTXORB_1_PID, 0, 0x3ff) },
- { USB_DEVICE_VER(FTDI_MTXORB_VID, FTDI_MTXORB_2_PID, 0, 0x3ff) },
-@@ -321,6 +322,7 @@ static struct usb_device_id id_table_FT2
- { USB_DEVICE_VER(FTDI_VID, FTDI_XF_634_PID, 0x400, 0xffff) },
- { USB_DEVICE_VER(FTDI_VID, FTDI_XF_632_PID, 0x400, 0xffff) },
- { USB_DEVICE_VER(FTDI_VID, FTDI_VNHCPCUSB_D_PID, 0x400, 0xffff) },
-+ { USB_DEVICE_VER(FTDI_VID, FTDI_DSS20_PID, 0x400, 0xffff) },
- { USB_DEVICE_VER(FTDI_MTXORB_VID, FTDI_MTXORB_0_PID, 0x400, 0xffff) },
- { USB_DEVICE_VER(FTDI_MTXORB_VID, FTDI_MTXORB_1_PID, 0x400, 0xffff) },
- { USB_DEVICE_VER(FTDI_MTXORB_VID, FTDI_MTXORB_2_PID, 0x400, 0xffff) },
-@@ -396,6 +398,7 @@ static __devinitdata struct usb_device_i
- { USB_DEVICE(FTDI_VID, FTDI_RELAIS_PID) },
- { USB_DEVICE(FTDI_VID, FTDI_XF_634_PID) },
- { USB_DEVICE(FTDI_VID, FTDI_XF_632_PID) },
-+ { USB_DEVICE(FTDI_VID, FTDI_DSS20_PID) },
- { USB_DEVICE(FTDI_NF_RIC_VID, FTDI_NF_RIC_PID) },
- { USB_DEVICE(FTDI_VID, FTDI_VNHCPCUSB_D_PID) },
- { USB_DEVICE(FTDI_MTXORB_VID, FTDI_MTXORB_0_PID) },
---- linux-2.6.0-test1/drivers/usb/serial/ftdi_sio.h 2003-07-13 21:44:34.000000000 -0700
-+++ 25/drivers/usb/serial/ftdi_sio.h 2003-07-19 17:03:50.000000000 -0700
-@@ -105,7 +105,13 @@
- #define SEALEVEL_2803_6_PID 0X2863 /* SeaLINK+8 (2803) Port 6 */
- #define SEALEVEL_2803_7_PID 0X2873 /* SeaLINK+8 (2803) Port 7 */
- #define SEALEVEL_2803_8_PID 0X2883 /* SeaLINK+8 (2803) Port 8 */
-+
-+/*
-+ * DSS-20 Sync Station for Sony Ericsson P800
-+ */
-
-+#define FTDI_DSS20_PID 0xFC82
-+
- /*
- * Home Electronics (www.home-electro.com) USB gadgets
- */
---- linux-2.6.0-test1/drivers/usb/serial/ipaq.c 2003-06-14 12:18:30.000000000 -0700
-+++ 25/drivers/usb/serial/ipaq.c 2003-07-19 17:03:50.000000000 -0700
-@@ -125,10 +125,13 @@ static struct usb_device_id ipaq_id_tabl
- { USB_DEVICE(LINKUP_VENDOR_ID, LINKUP_PRODUCT_ID) },
- { USB_DEVICE(MICROSOFT_VENDOR_ID, MICROSOFT_00CE_ID) },
- { USB_DEVICE(PORTATEC_VENDOR_ID, PORTATEC_PRODUCT_ID) },
-+ { USB_DEVICE(ROVER_VENDOR_ID, ROVER_P5_ID) },
- { USB_DEVICE(SAGEM_VENDOR_ID, SAGEM_WIRELESS_ID) },
- { USB_DEVICE(SOCKET_VENDOR_ID, SOCKET_PRODUCT_ID) },
- { USB_DEVICE(TOSHIBA_VENDOR_ID, TOSHIBA_PRODUCT_ID) },
-+ { USB_DEVICE(TOSHIBA_VENDOR_ID, TOSHIBA_E310_ID) },
- { USB_DEVICE(TOSHIBA_VENDOR_ID, TOSHIBA_E740_ID) },
-+ { USB_DEVICE(TOSHIBA_VENDOR_ID, TOSHIBA_E335_ID) },
- { USB_DEVICE(HTC_VENDOR_ID, HTC_PRODUCT_ID) },
- { USB_DEVICE(NEC_VENDOR_ID, NEC_PRODUCT_ID) },
- { USB_DEVICE(ASUS_VENDOR_ID, ASUS_A600_PRODUCT_ID) },
---- linux-2.6.0-test1/drivers/usb/serial/ipaq.h 2003-06-14 12:17:56.000000000 -0700
-+++ 25/drivers/usb/serial/ipaq.h 2003-07-19 17:03:50.000000000 -0700
-@@ -61,6 +61,9 @@
- #define PORTATEC_VENDOR_ID 0x0961
- #define PORTATEC_PRODUCT_ID 0x0010
-
-+#define ROVER_VENDOR_ID 0x047b
-+#define ROVER_P5_ID 0x3000
-+
- #define SAGEM_VENDOR_ID 0x5e04
- #define SAGEM_WIRELESS_ID 0xce00
-
-@@ -69,7 +72,9 @@
-
- #define TOSHIBA_VENDOR_ID 0x0930
- #define TOSHIBA_PRODUCT_ID 0x0700
-+#define TOSHIBA_E310_ID 0x0705
- #define TOSHIBA_E740_ID 0x0706
-+#define TOSHIBA_E335_ID 0x0707
-
- #define HTC_VENDOR_ID 0x0bb4
- #define HTC_PRODUCT_ID 0x00ce
---- linux-2.6.0-test1/drivers/usb/serial/usb-serial.c 2003-06-14 12:18:08.000000000 -0700
-+++ 25/drivers/usb/serial/usb-serial.c 2003-07-19 17:03:50.000000000 -0700
-@@ -530,7 +530,9 @@ static void serial_close(struct tty_stru
- /* if disconnect beat us to the punch here, there's nothing to do */
- if (tty && tty->driver_data) {
- __serial_close(port, filp);
-+ tty->driver_data = NULL;
- }
-+ port->tty = NULL;
- }
-
- static int serial_write (struct tty_struct * tty, int from_user, const unsigned char *buf, int count)
---- linux-2.6.0-test1/drivers/usb/serial/visor.c 2003-07-02 14:53:16.000000000 -0700
-+++ 25/drivers/usb/serial/visor.c 2003-07-19 17:03:50.000000000 -0700
-@@ -509,18 +509,17 @@ static void visor_write_bulk_callback (s
- {
- struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
-
-+ /* free up the transfer buffer, as usb_free_urb() does not do this */
-+ kfree (urb->transfer_buffer);
-+
- if (port_paranoia_check (port, __FUNCTION__))
- return;
-
- dbg("%s - port %d", __FUNCTION__, port->number);
-
-- if (urb->status) {
-- dbg("%s - nonzero write bulk status received: %d", __FUNCTION__, urb->status);
-- return;
-- }
--
-- /* free up the transfer buffer, as usb_free_urb() does not do this */
-- kfree (urb->transfer_buffer);
-+ if (urb->status)
-+ dbg("%s - nonzero write bulk status received: %d",
-+ __FUNCTION__, urb->status);
-
- schedule_work(&port->work);
- }
---- linux-2.6.0-test1/drivers/usb/storage/debug.h 2003-06-14 12:18:52.000000000 -0700
-+++ 25/drivers/usb/storage/debug.h 2003-07-19 17:03:50.000000000 -0700
-@@ -46,7 +46,6 @@
-
- #include <linux/config.h>
- #include <linux/kernel.h>
--#include <linux/blk.h>
- #include <linux/cdrom.h>
- #include "usb.h"
-
---- linux-2.6.0-test1/drivers/usb/storage/isd200.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/usb/storage/isd200.c 2003-07-19 17:03:50.000000000 -0700
-@@ -280,6 +280,7 @@ struct isd200_info {
-
- /* maximum number of LUNs supported */
- unsigned char MaxLUNs;
-+ struct scsi_cmnd srb;
- };
-
-
-@@ -404,15 +405,15 @@ static int isd200_action( struct us_data
- void* pointer, int value )
- {
- union ata_cdb ata;
-- struct scsi_cmnd srb;
- struct scsi_device srb_dev;
- struct isd200_info *info = (struct isd200_info *)us->extra;
-+ struct scsi_cmnd *srb = &info->srb;
- int status;
-
- memset(&ata, 0, sizeof(ata));
-- memset(&srb, 0, sizeof(srb));
- memset(&srb_dev, 0, sizeof(srb_dev));
-- srb.device = &srb_dev;
-+ srb->device = &srb_dev;
-+ ++srb->serial_number;
-
- ata.generic.SignatureByte0 = info->ConfigData.ATAMajorCommand;
- ata.generic.SignatureByte1 = info->ConfigData.ATAMinorCommand;
-@@ -425,9 +426,9 @@ static int isd200_action( struct us_data
- ata.generic.RegisterSelect =
- REG_CYLINDER_LOW | REG_CYLINDER_HIGH |
- REG_STATUS | REG_ERROR;
-- srb.sc_data_direction = SCSI_DATA_READ;
-- srb.request_buffer = pointer;
-- srb.request_bufflen = value;
-+ srb->sc_data_direction = SCSI_DATA_READ;
-+ srb->request_buffer = pointer;
-+ srb->request_bufflen = value;
- break;
-
- case ACTION_ENUM:
-@@ -437,7 +438,7 @@ static int isd200_action( struct us_data
- ACTION_SELECT_5;
- ata.generic.RegisterSelect = REG_DEVICE_HEAD;
- ata.write.DeviceHeadByte = value;
-- srb.sc_data_direction = SCSI_DATA_NONE;
-+ srb->sc_data_direction = SCSI_DATA_NONE;
- break;
-
- case ACTION_RESET:
-@@ -446,7 +447,7 @@ static int isd200_action( struct us_data
- ACTION_SELECT_3|ACTION_SELECT_4;
- ata.generic.RegisterSelect = REG_DEVICE_CONTROL;
- ata.write.DeviceControlByte = ATA_DC_RESET_CONTROLLER;
-- srb.sc_data_direction = SCSI_DATA_NONE;
-+ srb->sc_data_direction = SCSI_DATA_NONE;
- break;
-
- case ACTION_REENABLE:
-@@ -455,7 +456,7 @@ static int isd200_action( struct us_data
- ACTION_SELECT_3|ACTION_SELECT_4;
- ata.generic.RegisterSelect = REG_DEVICE_CONTROL;
- ata.write.DeviceControlByte = ATA_DC_REENABLE_CONTROLLER;
-- srb.sc_data_direction = SCSI_DATA_NONE;
-+ srb->sc_data_direction = SCSI_DATA_NONE;
- break;
-
- case ACTION_SOFT_RESET:
-@@ -464,16 +465,16 @@ static int isd200_action( struct us_data
- ata.generic.RegisterSelect = REG_DEVICE_HEAD | REG_COMMAND;
- ata.write.DeviceHeadByte = info->DeviceHead;
- ata.write.CommandByte = WIN_SRST;
-- srb.sc_data_direction = SCSI_DATA_NONE;
-+ srb->sc_data_direction = SCSI_DATA_NONE;
- break;
-
- case ACTION_IDENTIFY:
- US_DEBUGP(" isd200_action(IDENTIFY)\n");
- ata.generic.RegisterSelect = REG_COMMAND;
- ata.write.CommandByte = WIN_IDENTIFY;
-- srb.sc_data_direction = SCSI_DATA_READ;
-- srb.request_buffer = (void *)&info->drive;
-- srb.request_bufflen = sizeof(struct hd_driveid);
-+ srb->sc_data_direction = SCSI_DATA_READ;
-+ srb->request_buffer = (void *)&info->drive;
-+ srb->request_bufflen = sizeof(struct hd_driveid);
- break;
-
- default:
-@@ -481,9 +482,9 @@ static int isd200_action( struct us_data
- break;
- }
-
-- memcpy(srb.cmnd, &ata, sizeof(ata.generic));
-- srb.cmd_len = sizeof(ata.generic);
-- status = usb_stor_Bulk_transport(&srb, us);
-+ memcpy(srb->cmnd, &ata, sizeof(ata.generic));
-+ srb->cmd_len = sizeof(ata.generic);
-+ status = usb_stor_Bulk_transport(srb, us);
- if (status == USB_STOR_TRANSPORT_GOOD)
- status = ISD200_GOOD;
- else {
-@@ -834,7 +835,7 @@ static int isd200_try_enum(struct us_dat
- int detect )
- {
- int status = ISD200_GOOD;
-- unsigned char regs[8];
-+ unsigned char *regs = us->iobuf;
- unsigned long endTime;
- struct isd200_info *info = (struct isd200_info *)us->extra;
- int recheckAsMaster = FALSE;
-@@ -856,7 +857,7 @@ static int isd200_try_enum(struct us_dat
- break;
-
- status = isd200_action( us, ACTION_READ_STATUS,
-- regs, sizeof(regs) );
-+ regs, 8 );
- if ( status != ISD200_GOOD )
- break;
-
---- linux-2.6.0-test1/drivers/usb/storage/jumpshot.c 2003-06-14 12:17:56.000000000 -0700
-+++ 25/drivers/usb/storage/jumpshot.c 2003-07-19 17:03:50.000000000 -0700
-@@ -86,7 +86,6 @@ static inline int jumpshot_bulk_write(st
-
- static int jumpshot_get_status(struct us_data *us)
- {
-- unsigned char reply;
- int rc;
-
- if (!us)
-@@ -94,14 +93,14 @@ static int jumpshot_get_status(struct us
-
- // send the setup
- rc = usb_stor_ctrl_transfer(us, us->recv_ctrl_pipe,
-- 0, 0xA0, 0, 7, &reply, 1);
-+ 0, 0xA0, 0, 7, us->iobuf, 1);
-
- if (rc != USB_STOR_XFER_GOOD)
- return USB_STOR_TRANSPORT_ERROR;
-
-- if (reply != 0x50) {
-+ if (us->iobuf[0] != 0x50) {
- US_DEBUGP("jumpshot_get_status: 0x%2x\n",
-- (unsigned short) (reply));
-+ us->iobuf[0]);
- return USB_STOR_TRANSPORT_ERROR;
- }
-
-@@ -115,7 +114,7 @@ static int jumpshot_read_data(struct us_
- unsigned char *dest,
- int use_sg)
- {
-- unsigned char command[] = { 0, 0, 0, 0, 0, 0xe0, 0x20 };
-+ unsigned char *command = us->iobuf;
- unsigned char *buffer = NULL;
- unsigned char *ptr;
- unsigned char thistime;
-@@ -154,7 +153,8 @@ static int jumpshot_read_data(struct us_
- command[3] = (sector >> 8) & 0xFF;
- command[4] = (sector >> 16) & 0xFF;
-
-- command[5] |= (sector >> 24) & 0x0F;
-+ command[5] = 0xE0 | ((sector >> 24) & 0x0F);
-+ command[6] = 0x20;
-
- // send the setup + command
- result = usb_stor_ctrl_transfer(us, us->send_ctrl_pipe,
-@@ -199,7 +199,7 @@ static int jumpshot_write_data(struct us
- unsigned char *src,
- int use_sg)
- {
-- unsigned char command[7] = { 0, 0, 0, 0, 0, 0xE0, 0x30 };
-+ unsigned char *command = us->iobuf;
- unsigned char *buffer = NULL;
- unsigned char *ptr;
- unsigned char thistime;
-@@ -240,7 +240,8 @@ static int jumpshot_write_data(struct us
- command[3] = (sector >> 8) & 0xFF;
- command[4] = (sector >> 16) & 0xFF;
-
-- command[5] |= (sector >> 24) & 0x0F;
-+ command[5] = 0xE0 | ((sector >> 24) & 0x0F);
-+ command[6] = 0x30;
-
- // send the setup + command
- result = usb_stor_ctrl_transfer(us, us->send_ctrl_pipe,
-@@ -291,13 +292,19 @@ static int jumpshot_write_data(struct us
- static int jumpshot_id_device(struct us_data *us,
- struct jumpshot_info *info)
- {
-- unsigned char command[2] = { 0xe0, 0xec };
-- unsigned char reply[512];
-+ unsigned char *command = us->iobuf;
-+ unsigned char *reply;
- int rc;
-
- if (!us || !info)
- return USB_STOR_TRANSPORT_ERROR;
-
-+ command[0] = 0xE0;
-+ command[1] = 0xEC;
-+ reply = kmalloc(512, GFP_NOIO);
-+ if (!reply)
-+ return USB_STOR_TRANSPORT_ERROR;
-+
- // send the setup
- rc = usb_stor_ctrl_transfer(us, us->send_ctrl_pipe,
- 0, 0x20, 0, 6, command, 2);
-@@ -305,20 +312,27 @@ static int jumpshot_id_device(struct us_
- if (rc != USB_STOR_XFER_GOOD) {
- US_DEBUGP("jumpshot_id_device: Gah! "
- "send_control for read_capacity failed\n");
-- return rc;
-+ rc = USB_STOR_TRANSPORT_ERROR;
-+ goto leave;
- }
-
- // read the reply
- rc = jumpshot_bulk_read(us, reply, sizeof(reply));
-- if (rc != USB_STOR_XFER_GOOD)
-- return USB_STOR_TRANSPORT_ERROR;
-+ if (rc != USB_STOR_XFER_GOOD) {
-+ rc = USB_STOR_TRANSPORT_ERROR;
-+ goto leave;
-+ }
-
- info->sectors = ((u32)(reply[117]) << 24) |
- ((u32)(reply[116]) << 16) |
- ((u32)(reply[115]) << 8) |
- ((u32)(reply[114]) );
-
-- return USB_STOR_TRANSPORT_GOOD;
-+ rc = USB_STOR_TRANSPORT_GOOD;
-+
-+ leave:
-+ kfree(reply);
-+ return rc;
- }
-
- static int jumpshot_handle_mode_sense(struct us_data *us,
---- linux-2.6.0-test1/drivers/usb/storage/protocol.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/usb/storage/protocol.c 2003-07-19 17:03:50.000000000 -0700
-@@ -130,8 +130,9 @@ static void fix_read_capacity(Scsi_Cmnd
- void usb_stor_qic157_command(Scsi_Cmnd *srb, struct us_data *us)
- {
- /* Pad the ATAPI command with zeros
-+ *
- * NOTE: This only works because a Scsi_Cmnd struct field contains
-- * a unsigned char cmnd[12], so we know we have storage available
-+ * a unsigned char cmnd[16], so we know we have storage available
- */
- for (; srb->cmd_len<12; srb->cmd_len++)
- srb->cmnd[srb->cmd_len] = 0;
-@@ -149,13 +150,10 @@ void usb_stor_qic157_command(Scsi_Cmnd *
-
- void usb_stor_ATAPI_command(Scsi_Cmnd *srb, struct us_data *us)
- {
-- int old_cmnd = 0;
--
-- /* Fix some commands -- this is a form of mode translation
-- * ATAPI devices only accept 12 byte long commands
-+ /* Pad the ATAPI command with zeros
- *
- * NOTE: This only works because a Scsi_Cmnd struct field contains
-- * a unsigned char cmnd[12], so we know we have storage available
-+ * a unsigned char cmnd[16], so we know we have storage available
- */
-
- /* Pad the ATAPI command with zeros */
-@@ -165,60 +163,10 @@ void usb_stor_ATAPI_command(Scsi_Cmnd *s
- /* set command length to 12 bytes */
- srb->cmd_len = 12;
-
-- /* determine the correct (or minimum) data length for these commands */
-- switch (srb->cmnd[0]) {
--
-- /* change MODE_SENSE/MODE_SELECT from 6 to 10 byte commands */
-- case MODE_SENSE:
-- case MODE_SELECT:
-- /* save the command so we can tell what it was */
-- old_cmnd = srb->cmnd[0];
--
-- srb->cmnd[11] = 0;
-- srb->cmnd[10] = 0;
-- srb->cmnd[9] = 0;
-- srb->cmnd[8] = srb->cmnd[4];
-- srb->cmnd[7] = 0;
-- srb->cmnd[6] = 0;
-- srb->cmnd[5] = 0;
-- srb->cmnd[4] = 0;
-- srb->cmnd[3] = 0;
-- srb->cmnd[2] = srb->cmnd[2];
-- srb->cmnd[1] = srb->cmnd[1];
-- srb->cmnd[0] = srb->cmnd[0] | 0x40;
-- break;
--
-- /* change READ_6/WRITE_6 to READ_10/WRITE_10, which
-- * are ATAPI commands */
-- case WRITE_6:
-- case READ_6:
-- srb->cmnd[11] = 0;
-- srb->cmnd[10] = 0;
-- srb->cmnd[9] = 0;
-- srb->cmnd[8] = srb->cmnd[4];
-- srb->cmnd[7] = 0;
-- srb->cmnd[6] = 0;
-- srb->cmnd[5] = srb->cmnd[3];
-- srb->cmnd[4] = srb->cmnd[2];
-- srb->cmnd[3] = srb->cmnd[1] & 0x1F;
-- srb->cmnd[2] = 0;
-- srb->cmnd[1] = srb->cmnd[1] & 0xE0;
-- srb->cmnd[0] = srb->cmnd[0] | 0x20;
-- break;
-- } /* end switch on cmnd[0] */
--
-- /* convert MODE_SELECT data here */
-- if (old_cmnd == MODE_SELECT)
-- usb_stor_scsiSense6to10(srb);
--
- /* send the command to the transport layer */
- usb_stor_invoke_transport(srb, us);
-- if (srb->result == SAM_STAT_GOOD) {
--
-- /* Fix the MODE_SENSE data if we translated the command */
-- if (old_cmnd == MODE_SENSE)
-- usb_stor_scsiSense10to6(srb);
-
-+ if (srb->result == SAM_STAT_GOOD) {
- /* fix the INQUIRY data if necessary */
- fix_inquiry_data(srb);
- }
-@@ -227,19 +175,23 @@ void usb_stor_ATAPI_command(Scsi_Cmnd *s
-
- void usb_stor_ufi_command(Scsi_Cmnd *srb, struct us_data *us)
- {
-- int old_cmnd = 0;
--
- /* fix some commands -- this is a form of mode translation
- * UFI devices only accept 12 byte long commands
- *
- * NOTE: This only works because a Scsi_Cmnd struct field contains
-- * a unsigned char cmnd[12], so we know we have storage available
-+ * a unsigned char cmnd[16], so we know we have storage available
- */
-
-+ /* Pad the ATAPI command with zeros */
-+ for (; srb->cmd_len<12; srb->cmd_len++)
-+ srb->cmnd[srb->cmd_len] = 0;
-+
- /* set command length to 12 bytes (this affects the transport layer) */
- srb->cmd_len = 12;
-
-- /* determine the correct (or minimum) data length for these commands */
-+ /* XXX We should be constantly re-evaluating the need for these */
-+
-+ /* determine the correct data length for these commands */
- switch (srb->cmnd[0]) {
-
- /* for INQUIRY, UFI devices only ever return 36 bytes */
-@@ -247,33 +199,6 @@ void usb_stor_ufi_command(Scsi_Cmnd *srb
- srb->cmnd[4] = 36;
- break;
-
-- /* change MODE_SENSE/MODE_SELECT from 6 to 10 byte commands */
-- case MODE_SENSE:
-- case MODE_SELECT:
-- /* save the command so we can tell what it was */
-- old_cmnd = srb->cmnd[0];
--
-- srb->cmnd[11] = 0;
-- srb->cmnd[10] = 0;
-- srb->cmnd[9] = 0;
--
-- /* if we're sending data, we send all. If getting data,
-- * get the minimum */
-- if (srb->cmnd[0] == MODE_SELECT)
-- srb->cmnd[8] = srb->cmnd[4];
-- else
-- srb->cmnd[8] = 8;
--
-- srb->cmnd[7] = 0;
-- srb->cmnd[6] = 0;
-- srb->cmnd[5] = 0;
-- srb->cmnd[4] = 0;
-- srb->cmnd[3] = 0;
-- srb->cmnd[2] = srb->cmnd[2];
-- srb->cmnd[1] = srb->cmnd[1];
-- srb->cmnd[0] = srb->cmnd[0] | 0x40;
-- break;
--
- /* again, for MODE_SENSE_10, we get the minimum (8) */
- case MODE_SENSE_10:
- srb->cmnd[7] = 0;
-@@ -284,38 +209,12 @@ void usb_stor_ufi_command(Scsi_Cmnd *srb
- case REQUEST_SENSE:
- srb->cmnd[4] = 18;
- break;
--
-- /* change READ_6/WRITE_6 to READ_10/WRITE_10, which
-- * are UFI commands */
-- case WRITE_6:
-- case READ_6:
-- srb->cmnd[11] = 0;
-- srb->cmnd[10] = 0;
-- srb->cmnd[9] = 0;
-- srb->cmnd[8] = srb->cmnd[4];
-- srb->cmnd[7] = 0;
-- srb->cmnd[6] = 0;
-- srb->cmnd[5] = srb->cmnd[3];
-- srb->cmnd[4] = srb->cmnd[2];
-- srb->cmnd[3] = srb->cmnd[1] & 0x1F;
-- srb->cmnd[2] = 0;
-- srb->cmnd[1] = srb->cmnd[1] & 0xE0;
-- srb->cmnd[0] = srb->cmnd[0] | 0x20;
-- break;
- } /* end switch on cmnd[0] */
-
-- /* convert MODE_SELECT data here */
-- if (old_cmnd == MODE_SELECT)
-- usb_stor_scsiSense6to10(srb);
--
- /* send the command to the transport layer */
- usb_stor_invoke_transport(srb, us);
-- if (srb->result == SAM_STAT_GOOD) {
--
-- /* Fix the MODE_SENSE data if we translated the command */
-- if (old_cmnd == MODE_SENSE)
-- usb_stor_scsiSense10to6(srb);
-
-+ if (srb->result == SAM_STAT_GOOD) {
- /* Fix the data for an INQUIRY, if necessary */
- fix_inquiry_data(srb);
- }
-@@ -323,68 +222,10 @@ void usb_stor_ufi_command(Scsi_Cmnd *srb
-
- void usb_stor_transparent_scsi_command(Scsi_Cmnd *srb, struct us_data *us)
- {
-- int old_cmnd = 0;
--
-- /* This code supports devices which do not support {READ|WRITE}_6
-- * Apparently, neither Windows or MacOS will use these commands,
-- * so some devices do not support them
-- */
-- if (us->flags & US_FL_MODE_XLATE) {
-- US_DEBUGP("Invoking Mode Translation\n");
-- /* save the old command for later */
-- old_cmnd = srb->cmnd[0];
--
-- switch (srb->cmnd[0]) {
-- /* change READ_6/WRITE_6 to READ_10/WRITE_10 */
-- case WRITE_6:
-- case READ_6:
-- srb->cmd_len = 12;
-- srb->cmnd[11] = 0;
-- srb->cmnd[10] = 0;
-- srb->cmnd[9] = 0;
-- srb->cmnd[8] = srb->cmnd[4];
-- srb->cmnd[7] = 0;
-- srb->cmnd[6] = 0;
-- srb->cmnd[5] = srb->cmnd[3];
-- srb->cmnd[4] = srb->cmnd[2];
-- srb->cmnd[3] = srb->cmnd[1] & 0x1F;
-- srb->cmnd[2] = 0;
-- srb->cmnd[1] = srb->cmnd[1] & 0xE0;
-- srb->cmnd[0] = srb->cmnd[0] | 0x20;
-- break;
--
-- /* convert MODE_SELECT data here */
-- case MODE_SENSE:
-- case MODE_SELECT:
-- srb->cmd_len = 12;
-- srb->cmnd[11] = 0;
-- srb->cmnd[10] = 0;
-- srb->cmnd[9] = 0;
-- srb->cmnd[8] = srb->cmnd[4];
-- srb->cmnd[7] = 0;
-- srb->cmnd[6] = 0;
-- srb->cmnd[5] = 0;
-- srb->cmnd[4] = 0;
-- srb->cmnd[3] = 0;
-- srb->cmnd[2] = srb->cmnd[2];
-- srb->cmnd[1] = srb->cmnd[1];
-- srb->cmnd[0] = srb->cmnd[0] | 0x40;
-- break;
-- } /* switch (srb->cmnd[0]) */
-- } /* if (us->flags & US_FL_MODE_XLATE) */
--
-- /* convert MODE_SELECT data here */
-- if ((us->flags & US_FL_MODE_XLATE) && (old_cmnd == MODE_SELECT))
-- usb_stor_scsiSense6to10(srb);
--
- /* send the command to the transport layer */
- usb_stor_invoke_transport(srb, us);
-- if (srb->result == SAM_STAT_GOOD) {
--
-- /* Fix the MODE_SENSE data if we translated the command */
-- if ((us->flags & US_FL_MODE_XLATE) && (old_cmnd == MODE_SENSE))
-- usb_stor_scsiSense10to6(srb);
-
-+ if (srb->result == SAM_STAT_GOOD) {
- /* Fix the INQUIRY data if necessary */
- fix_inquiry_data(srb);
-
---- linux-2.6.0-test1/drivers/usb/storage/protocol.h 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/usb/storage/protocol.h 2003-07-19 17:03:50.000000000 -0700
-@@ -41,7 +41,7 @@
- #ifndef _PROTOCOL_H_
- #define _PROTOCOL_H_
-
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include "scsi.h"
- #include "usb.h"
-
---- linux-2.6.0-test1/drivers/usb/storage/scsiglue.c 2003-07-02 14:53:16.000000000 -0700
-+++ 25/drivers/usb/storage/scsiglue.c 2003-07-19 17:03:50.000000000 -0700
-@@ -263,7 +263,6 @@ static int proc_info (struct Scsi_Host *
-
- #define DO_FLAG(a) if (f & US_FL_##a) pos += sprintf(pos, " " #a)
- DO_FLAG(SINGLE_LUN);
-- DO_FLAG(MODE_XLATE);
- DO_FLAG(SCM_MULT_TARG);
- DO_FLAG(FIX_INQUIRY);
- DO_FLAG(FIX_CAPACITY);
-@@ -346,499 +345,3 @@ unsigned char usb_stor_sense_invalidCDB[
- [12] = 0x24 /* Invalid Field in CDB */
- };
-
--#define USB_STOR_SCSI_SENSE_HDRSZ 4
--#define USB_STOR_SCSI_SENSE_10_HDRSZ 8
--
--struct usb_stor_scsi_sense_hdr
--{
-- __u8* dataLength;
-- __u8* mediumType;
-- __u8* devSpecParms;
-- __u8* blkDescLength;
--};
--
--typedef struct usb_stor_scsi_sense_hdr Usb_Stor_Scsi_Sense_Hdr;
--
--union usb_stor_scsi_sense_hdr_u
--{
-- Usb_Stor_Scsi_Sense_Hdr hdr;
-- __u8* array[USB_STOR_SCSI_SENSE_HDRSZ];
--};
--
--typedef union usb_stor_scsi_sense_hdr_u Usb_Stor_Scsi_Sense_Hdr_u;
--
--struct usb_stor_scsi_sense_hdr_10
--{
-- __u8* dataLengthMSB;
-- __u8* dataLengthLSB;
-- __u8* mediumType;
-- __u8* devSpecParms;
-- __u8* reserved1;
-- __u8* reserved2;
-- __u8* blkDescLengthMSB;
-- __u8* blkDescLengthLSB;
--};
--
--typedef struct usb_stor_scsi_sense_hdr_10 Usb_Stor_Scsi_Sense_Hdr_10;
--
--union usb_stor_scsi_sense_hdr_10_u
--{
-- Usb_Stor_Scsi_Sense_Hdr_10 hdr;
-- __u8* array[USB_STOR_SCSI_SENSE_10_HDRSZ];
--};
--
--typedef union usb_stor_scsi_sense_hdr_10_u Usb_Stor_Scsi_Sense_Hdr_10_u;
--
--void usb_stor_scsiSenseParseBuffer( Scsi_Cmnd* , Usb_Stor_Scsi_Sense_Hdr_u*,
-- Usb_Stor_Scsi_Sense_Hdr_10_u*, int* );
--
--int usb_stor_scsiSense10to6( Scsi_Cmnd* the10 )
--{
-- __u8 *buffer=0;
-- int outputBufferSize = 0;
-- int length=0;
-- struct scatterlist *sg = 0;
-- int i=0, j=0, element=0;
-- Usb_Stor_Scsi_Sense_Hdr_u the6Locations;
-- Usb_Stor_Scsi_Sense_Hdr_10_u the10Locations;
-- int sb=0,si=0,db=0,di=0;
-- int sgLength=0;
--
-- US_DEBUGP("-- converting 10 byte sense data to 6 byte\n");
-- the10->cmnd[0] = the10->cmnd[0] & 0xBF;
--
-- /* Determine buffer locations */
-- usb_stor_scsiSenseParseBuffer( the10, &the6Locations, &the10Locations,
-- &length );
--
-- /* Work out minimum buffer to output */
-- outputBufferSize = *the10Locations.hdr.dataLengthLSB;
-- outputBufferSize += USB_STOR_SCSI_SENSE_HDRSZ;
--
-- /* Check to see if we need to trucate the output */
-- if ( outputBufferSize > length )
-- {
-- printk( KERN_WARNING USB_STORAGE
-- "Had to truncate MODE_SENSE_10 buffer into MODE_SENSE.\n" );
-- printk( KERN_WARNING USB_STORAGE
-- "outputBufferSize is %d and length is %d.\n",
-- outputBufferSize, length );
-- }
-- outputBufferSize = length;
--
-- /* Data length */
-- if ( *the10Locations.hdr.dataLengthMSB != 0 ) /* MSB must be zero */
-- {
-- printk( KERN_WARNING USB_STORAGE
-- "Command will be truncated to fit in SENSE6 buffer.\n" );
-- *the6Locations.hdr.dataLength = 0xff;
-- }
-- else
-- {
-- *the6Locations.hdr.dataLength = *the10Locations.hdr.dataLengthLSB;
-- }
--
-- /* Medium type and DevSpecific parms */
-- *the6Locations.hdr.mediumType = *the10Locations.hdr.mediumType;
-- *the6Locations.hdr.devSpecParms = *the10Locations.hdr.devSpecParms;
--
-- /* Block descriptor length */
-- if ( *the10Locations.hdr.blkDescLengthMSB != 0 ) /* MSB must be zero */
-- {
-- printk( KERN_WARNING USB_STORAGE
-- "Command will be truncated to fit in SENSE6 buffer.\n" );
-- *the6Locations.hdr.blkDescLength = 0xff;
-- }
-- else
-- {
-- *the6Locations.hdr.blkDescLength = *the10Locations.hdr.blkDescLengthLSB;
-- }
--
-- if ( the10->use_sg == 0 )
-- {
-- buffer = the10->request_buffer;
-- /* Copy the rest of the data */
-- memmove( &(buffer[USB_STOR_SCSI_SENSE_HDRSZ]),
-- &(buffer[USB_STOR_SCSI_SENSE_10_HDRSZ]),
-- outputBufferSize - USB_STOR_SCSI_SENSE_HDRSZ );
-- /* initialise last bytes left in buffer due to smaller header */
-- memset( &(buffer[outputBufferSize
-- -(USB_STOR_SCSI_SENSE_10_HDRSZ-USB_STOR_SCSI_SENSE_HDRSZ)]),
-- 0,
-- USB_STOR_SCSI_SENSE_10_HDRSZ-USB_STOR_SCSI_SENSE_HDRSZ );
-- }
-- else
-- {
-- sg = (struct scatterlist *) the10->request_buffer;
-- /* scan through this scatterlist and figure out starting positions */
-- for ( i=0; i < the10->use_sg; i++)
-- {
-- sgLength = sg[i].length;
-- for ( j=0; j<sgLength; j++ )
-- {
-- /* get to end of header */
-- if ( element == USB_STOR_SCSI_SENSE_HDRSZ )
-- {
-- db=i;
-- di=j;
-- }
-- if ( element == USB_STOR_SCSI_SENSE_10_HDRSZ )
-- {
-- sb=i;
-- si=j;
-- /* we've found both sets now, exit loops */
-- j=sgLength;
-- i=the10->use_sg;
-- }
-- element++;
-- }
-- }
--
-- /* Now we know where to start the copy from */
-- element = USB_STOR_SCSI_SENSE_HDRSZ;
-- while ( element < outputBufferSize
-- -(USB_STOR_SCSI_SENSE_10_HDRSZ-USB_STOR_SCSI_SENSE_HDRSZ) )
-- {
-- /* check limits */
-- if ( sb >= the10->use_sg ||
-- si >= sg[sb].length ||
-- db >= the10->use_sg ||
-- di >= sg[db].length )
-- {
-- printk( KERN_ERR USB_STORAGE
-- "Buffer overrun averted, this shouldn't happen!\n" );
-- break;
-- }
--
-- /* copy one byte */
-- {
-- char *src = sg_address(sg[sb]) + si;
-- char *dst = sg_address(sg[db]) + di;
--
-- *dst = *src;
-- }
--
-- /* get next destination */
-- if ( sg[db].length-1 == di )
-- {
-- db++;
-- di=0;
-- }
-- else
-- {
-- di++;
-- }
--
-- /* get next source */
-- if ( sg[sb].length-1 == si )
-- {
-- sb++;
-- si=0;
-- }
-- else
-- {
-- si++;
-- }
--
-- element++;
-- }
-- /* zero the remaining bytes */
-- while ( element < outputBufferSize )
-- {
-- /* check limits */
-- if ( db >= the10->use_sg ||
-- di >= sg[db].length )
-- {
-- printk( KERN_ERR USB_STORAGE
-- "Buffer overrun averted, this shouldn't happen!\n" );
-- break;
-- }
--
-- *(char*)(sg_address(sg[db])) = 0;
--
-- /* get next destination */
-- if ( sg[db].length-1 == di )
-- {
-- db++;
-- di=0;
-- }
-- else
-- {
-- di++;
-- }
-- element++;
-- }
-- }
--
-- /* All done any everything was fine */
-- return 0;
--}
--
--int usb_stor_scsiSense6to10( Scsi_Cmnd* the6 )
--{
-- /* will be used to store part of buffer */
-- __u8 tempBuffer[USB_STOR_SCSI_SENSE_10_HDRSZ-USB_STOR_SCSI_SENSE_HDRSZ],
-- *buffer=0;
-- int outputBufferSize = 0;
-- int length=0;
-- struct scatterlist *sg = 0;
-- int i=0, j=0, element=0;
-- Usb_Stor_Scsi_Sense_Hdr_u the6Locations;
-- Usb_Stor_Scsi_Sense_Hdr_10_u the10Locations;
-- int sb=0,si=0,db=0,di=0;
-- int lsb=0,lsi=0,ldb=0,ldi=0;
--
-- US_DEBUGP("-- converting 6 byte sense data to 10 byte\n");
-- the6->cmnd[0] = the6->cmnd[0] | 0x40;
--
-- /* Determine buffer locations */
-- usb_stor_scsiSenseParseBuffer( the6, &the6Locations, &the10Locations,
-- &length );
--
-- /* Work out minimum buffer to output */
-- outputBufferSize = *the6Locations.hdr.dataLength;
-- outputBufferSize += USB_STOR_SCSI_SENSE_10_HDRSZ;
--
-- /* Check to see if we need to trucate the output */
-- if ( outputBufferSize > length )
-- {
-- printk( KERN_WARNING USB_STORAGE
-- "Had to truncate MODE_SENSE into MODE_SENSE_10 buffer.\n" );
-- printk( KERN_WARNING USB_STORAGE
-- "outputBufferSize is %d and length is %d.\n",
-- outputBufferSize, length );
-- }
-- outputBufferSize = length;
--
-- /* Block descriptor length - save these before overwriting */
-- tempBuffer[2] = *the10Locations.hdr.blkDescLengthMSB;
-- tempBuffer[3] = *the10Locations.hdr.blkDescLengthLSB;
-- *the10Locations.hdr.blkDescLengthLSB = *the6Locations.hdr.blkDescLength;
-- *the10Locations.hdr.blkDescLengthMSB = 0;
--
-- /* reserved - save these before overwriting */
-- tempBuffer[0] = *the10Locations.hdr.reserved1;
-- tempBuffer[1] = *the10Locations.hdr.reserved2;
-- *the10Locations.hdr.reserved1 = *the10Locations.hdr.reserved2 = 0;
--
-- /* Medium type and DevSpecific parms */
-- *the10Locations.hdr.devSpecParms = *the6Locations.hdr.devSpecParms;
-- *the10Locations.hdr.mediumType = *the6Locations.hdr.mediumType;
--
-- /* Data length */
-- *the10Locations.hdr.dataLengthLSB = *the6Locations.hdr.dataLength;
-- *the10Locations.hdr.dataLengthMSB = 0;
--
-- if ( !the6->use_sg )
-- {
-- buffer = the6->request_buffer;
-- /* Copy the rest of the data */
-- memmove( &(buffer[USB_STOR_SCSI_SENSE_10_HDRSZ]),
-- &(buffer[USB_STOR_SCSI_SENSE_HDRSZ]),
-- outputBufferSize-USB_STOR_SCSI_SENSE_10_HDRSZ );
-- /* Put the first four bytes (after header) in place */
-- memcpy( &(buffer[USB_STOR_SCSI_SENSE_10_HDRSZ]),
-- tempBuffer,
-- USB_STOR_SCSI_SENSE_10_HDRSZ-USB_STOR_SCSI_SENSE_HDRSZ );
-- }
-- else
-- {
-- sg = (struct scatterlist *) the6->request_buffer;
-- /* scan through this scatterlist and figure out ending positions */
-- for ( i=0; i < the6->use_sg; i++)
-- {
-- for ( j=0; j<sg[i].length; j++ )
-- {
-- /* get to end of header */
-- if ( element == USB_STOR_SCSI_SENSE_HDRSZ )
-- {
-- ldb=i;
-- ldi=j;
-- }
-- if ( element == USB_STOR_SCSI_SENSE_10_HDRSZ )
-- {
-- lsb=i;
-- lsi=j;
-- /* we've found both sets now, exit loops */
-- j=sg[i].length;
-- i=the6->use_sg;
-- break;
-- }
-- element++;
-- }
-- }
-- /* scan through this scatterlist and figure out starting positions */
-- element = length-1;
-- /* destination is the last element */
-- db=the6->use_sg-1;
-- di=sg[db].length-1;
-- for ( i=the6->use_sg-1; i >= 0; i--)
-- {
-- for ( j=sg[i].length-1; j>=0; j-- )
-- {
-- /* get to end of header and find source for copy */
-- if ( element == length - 1
-- - (USB_STOR_SCSI_SENSE_10_HDRSZ-USB_STOR_SCSI_SENSE_HDRSZ) )
-- {
-- sb=i;
-- si=j;
-- /* we've found both sets now, exit loops */
-- j=-1;
-- i=-1;
-- }
-- element--;
-- }
-- }
-- /* Now we know where to start the copy from */
-- element = length-1
-- - (USB_STOR_SCSI_SENSE_10_HDRSZ-USB_STOR_SCSI_SENSE_HDRSZ);
-- while ( element >= USB_STOR_SCSI_SENSE_10_HDRSZ )
-- {
-- /* check limits */
-- if ( ( sb <= lsb && si < lsi ) ||
-- ( db <= ldb && di < ldi ) )
-- {
-- printk( KERN_ERR USB_STORAGE
-- "Buffer overrun averted, this shouldn't happen!\n" );
-- break;
-- }
--
-- /* copy one byte */
-- {
-- char *src = sg_address(sg[sb]) + si;
-- char *dst = sg_address(sg[db]) + di;
--
-- *dst = *src;
-- }
--
-- /* get next destination */
-- if ( di == 0 )
-- {
-- db--;
-- di=sg[db].length-1;
-- }
-- else
-- {
-- di--;
-- }
--
-- /* get next source */
-- if ( si == 0 )
-- {
-- sb--;
-- si=sg[sb].length-1;
-- }
-- else
-- {
-- si--;
-- }
--
-- element--;
-- }
-- /* copy the remaining four bytes */
-- while ( element >= USB_STOR_SCSI_SENSE_HDRSZ )
-- {
-- /* check limits */
-- if ( db <= ldb && di < ldi )
-- {
-- printk( KERN_ERR USB_STORAGE
-- "Buffer overrun averted, this shouldn't happen!\n" );
-- break;
-- }
--
-- {
-- char *dst = sg_address(sg[db]) + di;
--
-- *dst = tempBuffer[element-USB_STOR_SCSI_SENSE_HDRSZ];
-- }
--
--
-- /* get next destination */
-- if ( di == 0 )
-- {
-- db--;
-- di=sg[db].length-1;
-- }
-- else
-- {
-- di--;
-- }
-- element--;
-- }
-- }
--
-- /* All done and everything was fine */
-- return 0;
--}
--
--void usb_stor_scsiSenseParseBuffer( Scsi_Cmnd* srb, Usb_Stor_Scsi_Sense_Hdr_u* the6,
-- Usb_Stor_Scsi_Sense_Hdr_10_u* the10,
-- int* length_p )
--
--{
-- int i = 0, j=0, element=0;
-- struct scatterlist *sg = 0;
-- int length = 0;
-- __u8* buffer=0;
--
-- /* are we scatter-gathering? */
-- if ( srb->use_sg != 0 )
-- {
-- /* loop over all the scatter gather structures and
-- * get pointer to the data members in the headers
-- * (also work out the length while we're here)
-- */
-- sg = (struct scatterlist *) srb->request_buffer;
-- for (i = 0; i < srb->use_sg; i++)
-- {
-- length += sg[i].length;
-- /* We only do the inner loop for the headers */
-- if ( element < USB_STOR_SCSI_SENSE_10_HDRSZ )
-- {
-- /* scan through this scatterlist */
-- for ( j=0; j<sg[i].length; j++ )
-- {
-- if ( element < USB_STOR_SCSI_SENSE_HDRSZ )
-- {
-- /* fill in the pointers for both header types */
-- the6->array[element] = sg_address(sg[i]) + j;
-- the10->array[element] = sg_address(sg[i]) + j;
--
-- }
-- else if ( element < USB_STOR_SCSI_SENSE_10_HDRSZ )
-- {
-- /* only the longer headers still cares now */
-- the10->array[element] = sg_address(sg[i]) + j;
--
-- }
-- /* increase element counter */
-- element++;
-- }
-- }
-- }
-- }
-- else
-- {
-- length = srb->request_bufflen;
-- buffer = srb->request_buffer;
-- if ( length < USB_STOR_SCSI_SENSE_10_HDRSZ )
-- printk( KERN_ERR USB_STORAGE
-- "Buffer length smaller than header!!" );
-- for( i=0; i<USB_STOR_SCSI_SENSE_10_HDRSZ; i++ )
-- {
-- if ( i < USB_STOR_SCSI_SENSE_HDRSZ )
-- {
-- the6->array[i] = &(buffer[i]);
-- the10->array[i] = &(buffer[i]);
-- }
-- else
-- {
-- the10->array[i] = &(buffer[i]);
-- }
-- }
-- }
--
-- /* Set value of length passed in */
-- *length_p = length;
--}
--
---- linux-2.6.0-test1/drivers/usb/storage/scsiglue.h 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/usb/storage/scsiglue.h 2003-07-19 17:03:50.000000000 -0700
-@@ -41,7 +41,7 @@
- #ifndef _SCSIGLUE_H_
- #define _SCSIGLUE_H_
-
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include "scsi.h"
- #include "hosts.h"
-
---- linux-2.6.0-test1/drivers/usb/storage/sddr09.c 2003-06-14 12:18:30.000000000 -0700
-+++ 25/drivers/usb/storage/sddr09.c 2003-07-19 17:03:50.000000000 -0700
-@@ -261,12 +261,13 @@ sddr09_send_scsi_command(struct us_data
- */
- static int
- sddr09_test_unit_ready(struct us_data *us) {
-- unsigned char command[6] = {
-- 0, LUNBITS, 0, 0, 0, 0
-- };
-+ unsigned char *command = us->iobuf;
- int result;
-
-- result = sddr09_send_scsi_command(us, command, sizeof(command));
-+ memset(command, 0, 6);
-+ command[1] = LUNBITS;
-+
-+ result = sddr09_send_scsi_command(us, command, 6);
-
- US_DEBUGP("sddr09_test_unit_ready returns %d\n", result);
-
-@@ -281,12 +282,15 @@ sddr09_test_unit_ready(struct us_data *u
- */
- static int
- sddr09_request_sense(struct us_data *us, unsigned char *sensebuf, int buflen) {
-- unsigned char command[12] = {
-- 0x03, LUNBITS, 0, 0, buflen, 0, 0, 0, 0, 0, 0, 0
-- };
-+ unsigned char *command = us->iobuf;
- int result;
-
-- result = sddr09_send_scsi_command(us, command, sizeof(command));
-+ memset(command, 0, 12);
-+ command[0] = 0x03;
-+ command[1] = LUNBITS;
-+ command[4] = buflen;
-+
-+ result = sddr09_send_scsi_command(us, command, 12);
- if (result != USB_STOR_TRANSPORT_GOOD) {
- US_DEBUGP("request sense failed\n");
- return result;
-@@ -331,20 +335,23 @@ sddr09_readX(struct us_data *us, int x,
- int nr_of_pages, int bulklen, unsigned char *buf,
- int use_sg) {
-
-- unsigned char command[12] = {
-- 0xe8, LUNBITS | x, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-- };
-+ unsigned char *command = us->iobuf;
- int result;
-
-+ command[0] = 0xE8;
-+ command[1] = LUNBITS | x;
- command[2] = MSB_of(fromaddress>>16);
- command[3] = LSB_of(fromaddress>>16);
- command[4] = MSB_of(fromaddress & 0xFFFF);
- command[5] = LSB_of(fromaddress & 0xFFFF);
--
-+ command[6] = 0;
-+ command[7] = 0;
-+ command[8] = 0;
-+ command[9] = 0;
- command[10] = MSB_of(nr_of_pages);
- command[11] = LSB_of(nr_of_pages);
-
-- result = sddr09_send_scsi_command(us, command, sizeof(command));
-+ result = sddr09_send_scsi_command(us, command, 12);
-
- if (result != USB_STOR_TRANSPORT_GOOD) {
- US_DEBUGP("Result for send_control in sddr09_read2%d %d\n",
-@@ -458,17 +465,18 @@ sddr09_read23(struct us_data *us, unsign
- */
- static int
- sddr09_erase(struct us_data *us, unsigned long Eaddress) {
-- unsigned char command[12] = {
-- 0xea, LUNBITS, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-- };
-+ unsigned char *command = us->iobuf;
- int result;
-
-+ memset(command, 0, 12);
-+ command[0] = 0xEA;
-+ command[1] = LUNBITS;
- command[6] = MSB_of(Eaddress>>16);
- command[7] = LSB_of(Eaddress>>16);
- command[8] = MSB_of(Eaddress & 0xFFFF);
- command[9] = LSB_of(Eaddress & 0xFFFF);
-
-- result = sddr09_send_scsi_command(us, command, sizeof(command));
-+ result = sddr09_send_scsi_command(us, command, 12);
-
- if (result != USB_STOR_TRANSPORT_GOOD)
- US_DEBUGP("Result for send_control in sddr09_erase %d\n",
-@@ -493,11 +501,12 @@ sddr09_writeX(struct us_data *us,
- unsigned long Waddress, unsigned long Eaddress,
- int nr_of_pages, int bulklen, unsigned char *buf, int use_sg) {
-
-- unsigned char command[12] = {
-- 0xe9, LUNBITS, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-- };
-+ unsigned char *command = us->iobuf;
- int result;
-
-+ command[0] = 0xE9;
-+ command[1] = LUNBITS;
-+
- command[2] = MSB_of(Waddress>>16);
- command[3] = LSB_of(Waddress>>16);
- command[4] = MSB_of(Waddress & 0xFFFF);
-@@ -511,7 +520,7 @@ sddr09_writeX(struct us_data *us,
- command[10] = MSB_of(nr_of_pages);
- command[11] = LSB_of(nr_of_pages);
-
-- result = sddr09_send_scsi_command(us, command, sizeof(command));
-+ result = sddr09_send_scsi_command(us, command, 12);
-
- if (result != USB_STOR_TRANSPORT_GOOD) {
- US_DEBUGP("Result for send_control in sddr09_writeX %d\n",
-@@ -554,15 +563,15 @@ sddr09_write_inplace(struct us_data *us,
- */
- static int
- sddr09_read_sg_test_only(struct us_data *us) {
-- unsigned char command[15] = {
-- 0xe7, LUNBITS, 0
-- };
-+ unsigned char *command = us->iobuf;
- int result, bulklen, nsg, ct;
- unsigned char *buf;
- unsigned long address;
-
- nsg = bulklen = 0;
--
-+ command[0] = 0xE7;
-+ command[1] = LUNBITS;
-+ command[2] = 0;
- address = 040000; ct = 1;
- nsg++;
- bulklen += (ct << 9);
-@@ -628,20 +637,22 @@ sddr09_read_sg_test_only(struct us_data
- static int
- sddr09_read_status(struct us_data *us, unsigned char *status) {
-
-- unsigned char command[12] = {
-- 0xec, LUNBITS, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-- };
-- unsigned char data[64];
-+ unsigned char *command = us->iobuf;
-+ unsigned char *data = us->iobuf;
- int result;
-
- US_DEBUGP("Reading status...\n");
-
-- result = sddr09_send_scsi_command(us, command, sizeof(command));
-+ memset(command, 0, 12);
-+ command[0] = 0xEC;
-+ command[1] = LUNBITS;
-+
-+ result = sddr09_send_scsi_command(us, command, 12);
- if (result != USB_STOR_TRANSPORT_GOOD)
- return result;
-
- result = usb_stor_bulk_transfer_buf(us, us->recv_bulk_pipe,
-- data, sizeof(data), NULL);
-+ data, 64, NULL);
- *status = data[0];
- return (result == USB_STOR_XFER_GOOD ?
- USB_STOR_TRANSPORT_GOOD : USB_STOR_TRANSPORT_ERROR);
-@@ -953,13 +964,15 @@ sddr09_read_control(struct us_data *us,
- */
- static int
- sddr09_read_deviceID(struct us_data *us, unsigned char *deviceID) {
-- unsigned char command[12] = {
-- 0xed, LUNBITS, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-- };
-- unsigned char content[64];
-+ unsigned char *command = us->iobuf;
-+ unsigned char *content = us->iobuf;
- int result, i;
-
-- result = sddr09_send_scsi_command(us, command, sizeof(command));
-+ memset(command, 0, 12);
-+ command[0] = 0xED;
-+ command[1] = LUNBITS;
-+
-+ result = sddr09_send_scsi_command(us, command, 12);
- if (result != USB_STOR_TRANSPORT_GOOD)
- return result;
-
-@@ -1006,11 +1019,13 @@ sddr09_get_wp(struct us_data *us, struct
- static int
- sddr09_reset(struct us_data *us) {
-
-- unsigned char command[12] = {
-- 0xeb, LUNBITS, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-- };
-+ unsigned char *command = us->iobuf;
-+
-+ memset(command, 0, 12);
-+ command[0] = 0xEB;
-+ command[1] = LUNBITS;
-
-- return sddr09_send_scsi_command(us, command, sizeof(command));
-+ return sddr09_send_scsi_command(us, command, 12);
- }
- #endif
-
-@@ -1313,7 +1328,7 @@ sddr09_init_card_info(struct us_data *us
- int
- sddr09_init(struct us_data *us) {
- int result;
-- unsigned char data[18];
-+ unsigned char *data = us->iobuf;
-
- result = sddr09_send_command(us, 0x01, USB_DIR_IN, data, 2);
- if (result != USB_STOR_TRANSPORT_GOOD) {
-@@ -1333,10 +1348,10 @@ sddr09_init(struct us_data *us) {
- US_DEBUGP("SDDR09init: %02X %02X\n", data[0], data[1]);
- // get 07 00
-
-- result = sddr09_request_sense(us, data, sizeof(data));
-+ result = sddr09_request_sense(us, data, 18);
- if (result == USB_STOR_TRANSPORT_GOOD && data[2] != 0) {
- int j;
-- for (j=0; j<sizeof(data); j++)
-+ for (j=0; j<18; j++)
- printk(" %02X", data[j]);
- printk("\n");
- // get 70 00 00 00 00 00 00 * 00 00 00 00 00 00
---- linux-2.6.0-test1/drivers/usb/storage/sddr55.c 2003-06-14 12:18:07.000000000 -0700
-+++ 25/drivers/usb/storage/sddr55.c 2003-07-19 17:03:50.000000000 -0700
-@@ -91,13 +91,14 @@ sddr55_bulk_transport(struct us_data *us
- static int sddr55_status(struct us_data *us)
- {
- int result;
-- unsigned char command[8] = {
-- 0, 0, 0, 0, 0, 0xb0, 0, 0x80
-- };
-- unsigned char status[8];
-+ unsigned char *command = us->iobuf;
-+ unsigned char *status = us->iobuf;
- struct sddr55_card_info *info = (struct sddr55_card_info *)us->extra;
-
- /* send command */
-+ memset(command, 0, 8);
-+ command[5] = 0xB0;
-+ command[7] = 0x80;
- result = sddr55_bulk_transport(us,
- SCSI_DATA_WRITE, command, 8);
-
-@@ -158,10 +159,8 @@ static int sddr55_read_data(struct us_da
- int use_sg) {
-
- int result = USB_STOR_TRANSPORT_GOOD;
-- unsigned char command[8] = {
-- 0, 0, 0, 0, 0, 0xb0, 0, 0x85
-- };
-- unsigned char status[8];
-+ unsigned char *command = us->iobuf;
-+ unsigned char *status = us->iobuf;
- struct sddr55_card_info *info = (struct sddr55_card_info *)us->extra;
-
- unsigned int pba;
-@@ -205,11 +204,15 @@ static int sddr55_read_data(struct us_da
-
- address = (pba << info->blockshift) + page;
-
-+ command[0] = 0;
- command[1] = LSB_of(address>>16);
- command[2] = LSB_of(address>>8);
- command[3] = LSB_of(address);
-
-+ command[4] = 0;
-+ command[5] = 0xB0;
- command[6] = LSB_of(pages << (1 - info->smallpageshift));
-+ command[7] = 0x85;
-
- /* send command */
- result = sddr55_bulk_transport(us,
-@@ -274,10 +277,8 @@ static int sddr55_write_data(struct us_d
- int use_sg) {
-
- int result = USB_STOR_TRANSPORT_GOOD;
-- unsigned char command[8] = {
-- 0, 0, 0, 0, 0, 0xb0, 0, 0x86
-- };
-- unsigned char status[8];
-+ unsigned char *command = us->iobuf;
-+ unsigned char *status = us->iobuf;
- struct sddr55_card_info *info = (struct sddr55_card_info *)us->extra;
-
- unsigned int pba;
-@@ -380,6 +381,8 @@ static int sddr55_write_data(struct us_d
- command[6] = MSB_of(lba % 1000);
-
- command[4] |= LSB_of(pages >> info->smallpageshift);
-+ command[5] = 0xB0;
-+ command[7] = 0x86;
-
- /* send command */
- result = sddr55_bulk_transport(us,
-@@ -473,11 +476,12 @@ static int sddr55_read_deviceID(struct u
- unsigned char *deviceID) {
-
- int result;
-- unsigned char command[8] = {
-- 0, 0, 0, 0, 0, 0xb0, 0, 0x84
-- };
-- unsigned char content[64];
-+ unsigned char *command = us->iobuf;
-+ unsigned char *content = us->iobuf;
-
-+ memset(command, 0, 8);
-+ command[5] = 0xB0;
-+ command[7] = 0x84;
- result = sddr55_bulk_transport(us, SCSI_DATA_WRITE, command, 8);
-
- US_DEBUGP("Result of send_control for device ID is %d\n",
-@@ -598,7 +602,7 @@ static int sddr55_read_map(struct us_dat
- struct sddr55_card_info *info = (struct sddr55_card_info *)(us->extra);
- int numblocks;
- unsigned char *buffer;
-- unsigned char command[8] = { 0, 0, 0, 0, 0, 0xb0, 0, 0x8a};
-+ unsigned char *command = us->iobuf;
- int i;
- unsigned short lba;
- unsigned short max_lba;
-@@ -614,7 +618,10 @@ static int sddr55_read_map(struct us_dat
- if (!buffer)
- return -1;
-
-+ memset(command, 0, 8);
-+ command[5] = 0xB0;
- command[6] = numblocks * 2 / 256;
-+ command[7] = 0x8A;
-
- result = sddr55_bulk_transport(us, SCSI_DATA_WRITE, command, 8);
-
---- linux-2.6.0-test1/drivers/usb/storage/transport.h 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/usb/storage/transport.h 2003-07-19 17:03:50.000000000 -0700
-@@ -42,7 +42,7 @@
- #define _TRANSPORT_H_
-
- #include <linux/config.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include "usb.h"
- #include "scsi.h"
-
---- linux-2.6.0-test1/drivers/usb/storage/unusual_devs.h 2003-07-13 21:44:34.000000000 -0700
-+++ 25/drivers/usb/storage/unusual_devs.h 2003-07-19 17:03:50.000000000 -0700
-@@ -119,7 +119,7 @@ UNUSUAL_DEV( 0x04b8, 0x0602, 0x0110, 0x
- UNUSUAL_DEV( 0x04cb, 0x0100, 0x0000, 0x2210,
- "Fujifilm",
- "FinePix 1400Zoom",
-- US_SC_8070, US_PR_CBI, NULL, US_FL_FIX_INQUIRY),
-+ US_SC_DEVICE, US_PR_DEVICE, NULL, US_FL_FIX_INQUIRY),
-
- /* Reported by Peter Wächtler <pwaechtler@loewe-komp.de>
- * The device needs the flags only.
-@@ -236,7 +236,7 @@ UNUSUAL_DEV( 0x0525, 0xa140, 0x0100, 0x
- UNUSUAL_DEV( 0x054c, 0x0010, 0x0106, 0x0450,
- "Sony",
- "DSC-S30/S70/S75/505V/F505/F707/F717/P8",
-- US_SC_SCSI, US_PR_CB, NULL,
-+ US_SC_SCSI, US_PR_DEVICE, NULL,
- US_FL_SINGLE_LUN | US_FL_MODE_XLATE ),
-
- /* Reported by wim@geeks.nl */
-@@ -555,7 +555,7 @@ UNUSUAL_DEV( 0x0839, 0x000a, 0x0001, 0x0
- UNUSUAL_DEV( 0x08ca, 0x2011, 0x0000, 0x9999,
- "AIPTEK",
- "PocketCAM 3Mega",
-- US_SC_SCSI, US_PR_BULK, NULL,
-+ US_SC_DEVICE, US_PR_DEVICE, NULL,
- US_FL_MODE_XLATE ),
-
- /* aeb */
---- linux-2.6.0-test1/drivers/usb/storage/usb.c 2003-07-02 14:53:16.000000000 -0700
-+++ 25/drivers/usb/storage/usb.c 2003-07-19 17:03:50.000000000 -0700
-@@ -958,6 +958,8 @@ static int storage_probe(struct usb_inte
- goto BadDevice;
- }
-
-+ scsi_scan_host(us->host);
-+
- printk(KERN_DEBUG
- "WARNING: USB Mass Storage data integrity not assured\n");
- printk(KERN_DEBUG
---- linux-2.6.0-test1/drivers/usb/storage/usb.h 2003-07-02 14:53:16.000000000 -0700
-+++ 25/drivers/usb/storage/usb.h 2003-07-19 17:03:50.000000000 -0700
-@@ -45,7 +45,7 @@
- #define _USB_H_
-
- #include <linux/usb.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/smp_lock.h>
- #include <linux/completion.h>
- #include <linux/version.h>
-@@ -69,11 +69,10 @@ struct us_unusual_dev {
-
- /* Flag definitions: these entries are static */
- #define US_FL_SINGLE_LUN 0x00000001 /* allow access to only LUN 0 */
--#define US_FL_MODE_XLATE 0x00000002 /* translate _6 to _10 commands for
-- Win/MacOS compatibility */
-+#define US_FL_MODE_XLATE 0 /* [no longer used] */
- #define US_FL_IGNORE_SER 0 /* [no longer used] */
- #define US_FL_SCM_MULT_TARG 0x00000020 /* supports multiple targets */
--#define US_FL_FIX_INQUIRY 0x00000040 /* INQUIRY response needs fixing */
-+#define US_FL_FIX_INQUIRY 0x00000040 /* INQUIRY response needs faking */
- #define US_FL_FIX_CAPACITY 0x00000080 /* READ CAPACITY response too big */
-
- /* Dynamic flag definitions: used in set_bit() etc. */
---- linux-2.6.0-test1/drivers/usb/usb-skeleton.c 2003-07-13 21:44:34.000000000 -0700
-+++ 25/drivers/usb/usb-skeleton.c 2003-07-19 17:03:50.000000000 -0700
-@@ -507,7 +507,7 @@ static int skel_probe(struct usb_interfa
- struct usb_endpoint_descriptor *endpoint;
- size_t buffer_size;
- int i;
-- int retval;
-+ int retval = -ENOMEM;
-
- /* See if the device offered us matches what we can accept */
- if ((udev->descriptor.idVendor != USB_SKEL_VENDOR_ID) ||
-@@ -515,18 +515,11 @@ static int skel_probe(struct usb_interfa
- return -ENODEV;
- }
-
-- retval = usb_register_dev (interface, &skel_class);
-- if (retval) {
-- /* something prevented us from registering this driver */
-- err ("Not able to get a minor for this device.");
-- goto exit;
-- }
--
- /* allocate memory for our device state and initialize it */
- dev = kmalloc (sizeof(struct usb_skel), GFP_KERNEL);
- if (dev == NULL) {
- err ("Out of memory");
-- goto exit_minor;
-+ goto error;
- }
- memset (dev, 0x00, sizeof (*dev));
-
-@@ -603,24 +596,24 @@ static int skel_probe(struct usb_interfa
- /* allow device read, write and ioctl */
- dev->present = 1;
-
-+ /* we can register the device now, as it is ready */
-+ usb_set_intfdata (interface, dev);
-+ retval = usb_register_dev (interface, &skel_class);
-+ if (retval) {
-+ /* something prevented us from registering this driver */
-+ err ("Not able to get a minor for this device.");
-+ usb_set_intfdata (interface, NULL);
-+ goto error;
-+ }
-+
-+
- /* let the user know what node this device is now attached to */
- info ("USB Skeleton device now attached to USBSkel-%d", dev->minor);
--
-- goto exit;
-+ return 0;
-
- error:
- skel_delete (dev);
-- dev = NULL;
--
--exit_minor:
-- usb_deregister_dev (interface, &skel_class);
--
--exit:
-- if (dev) {
-- usb_set_intfdata (interface, dev);
-- return 0;
-- }
-- return -ENODEV;
-+ return retval;
- }
-
-
---- linux-2.6.0-test1/drivers/video/cfbimgblt.c 2003-06-26 22:07:25.000000000 -0700
-+++ 25/drivers/video/cfbimgblt.c 2003-07-19 17:04:55.000000000 -0700
-@@ -325,7 +325,7 @@ void cfb_imageblit(struct fb_info *p, co
- else
- slow_imageblit(image, p, dst1, fgcolor, bgcolor,
- start_index, pitch_index);
-- } else if (image->depth == bpp)
-+ } else if (image->depth <= bpp)
- color_imageblit(image, p, dst1, start_index, pitch_index);
- }
-
---- linux-2.6.0-test1/drivers/video/chipsfb.c 2003-06-14 12:18:09.000000000 -0700
-+++ 25/drivers/video/chipsfb.c 2003-07-19 17:04:55.000000000 -0700
-@@ -85,7 +85,7 @@ static struct pmu_sleep_notifier chips_s
- /*
- * Exported functions
- */
--int chips_init(void);
-+int chipsfb_init(void);
-
- static int chipsfb_pci_init(struct pci_dev *dp, const struct pci_device_id *);
- static int chipsfb_check_var(struct fb_var_screeninfo *var,
-@@ -460,7 +460,7 @@ static struct pci_driver chipsfb_driver
- .remove = __devexit_p(chipsfb_remove),
- };
-
--int __init chips_init(void)
-+int __init chipsfb_init(void)
- {
- return pci_module_init(&chipsfb_driver);
- }
---- linux-2.6.0-test1/drivers/video/console/fbcon.c 2003-06-14 12:18:25.000000000 -0700
-+++ 25/drivers/video/console/fbcon.c 2003-07-19 17:04:55.000000000 -0700
-@@ -195,8 +195,7 @@ static void fb_flashcursor(void *private
- {
- struct fb_info *info = (struct fb_info *) private;
-
-- /* Test to see if the cursor is erased but still on */
-- if (!info || (info->cursor.rop == ROP_COPY))
-+ if (!info)
- return;
- info->cursor.enable ^= 1;
- info->fbops->fb_cursor(info, &info->cursor);
-@@ -226,8 +225,7 @@ static void cursor_timer_handler(unsigne
- struct fb_info *info = (struct fb_info *) dev_addr;
-
- schedule_work(&info->queue);
-- cursor_timer.expires = jiffies + HZ / 5;
-- add_timer(&cursor_timer);
-+ mod_timer(&cursor_timer, jiffies + HZ/5);
- }
-
- int __init fb_console_setup(char *this_opt)
-@@ -308,97 +306,6 @@ int set_con2fb_map(int unit, int newidx)
- }
-
- /*
-- * drawing helpers
-- */
--static void putcs_unaligned(struct vc_data *vc, struct fb_info *info,
-- struct fb_image *image, int count,
-- const unsigned short *s)
--{
-- unsigned short charmask = vc->vc_hi_font_mask ? 0x1ff : 0xff;
-- unsigned int width = (vc->vc_font.width + 7) >> 3;
-- unsigned int cellsize = vc->vc_font.height * width;
-- unsigned int maxcnt = info->pixmap.size/cellsize;
-- unsigned int shift_low = 0, mod = vc->vc_font.width % 8;
-- unsigned int shift_high = 8, size, pitch, cnt, k;
-- unsigned int buf_align = info->pixmap.buf_align - 1;
-- unsigned int scan_align = info->pixmap.scan_align - 1;
-- unsigned int idx = vc->vc_font.width >> 3;
-- u8 mask, *src, *dst, *dst0;
--
-- while (count) {
-- if (count > maxcnt)
-- cnt = k = maxcnt;
-- else
-- cnt = k = count;
--
-- image->width = vc->vc_font.width * cnt;
-- pitch = ((image->width + 7) >> 3) + scan_align;
-- pitch &= ~scan_align;
-- size = pitch * vc->vc_font.height + buf_align;
-- size &= ~buf_align;
-- dst0 = info->pixmap.addr + fb_get_buffer_offset(info, size);
-- image->data = dst0;
-- while (k--) {
-- src = vc->vc_font.data + (scr_readw(s++) & charmask)*
-- cellsize;
-- dst = dst0;
-- mask = (u8) (0xfff << shift_high);
-- move_buf_unaligned(info, dst, src, pitch, image->height,
-- mask, shift_high, shift_low, mod, idx);
-- shift_low += mod;
-- dst0 += (shift_low >= 8) ? width : width - 1;
-- shift_low &= 7;
-- shift_high = 8 - shift_low;
-- }
-- info->fbops->fb_imageblit(info, image);
-- image->dx += cnt * vc->vc_font.width;
-- count -= cnt;
-- atomic_dec(&info->pixmap.count);
-- smp_mb__after_atomic_dec();
-- }
--}
--
--static void putcs_aligned(struct vc_data *vc, struct fb_info *info,
-- struct fb_image *image, int count,
-- const unsigned short *s)
--{
-- unsigned short charmask = vc->vc_hi_font_mask ? 0x1ff : 0xff;
-- unsigned int width = vc->vc_font.width >> 3;
-- unsigned int cellsize = vc->vc_font.height * width;
-- unsigned int maxcnt = info->pixmap.size/cellsize;
-- unsigned int scan_align = info->pixmap.scan_align - 1;
-- unsigned int buf_align = info->pixmap.buf_align - 1;
-- unsigned int pitch, cnt, size, k;
-- u8 *src, *dst, *dst0;
--
-- while (count) {
-- if (count > maxcnt)
-- cnt = k = maxcnt;
-- else
-- cnt = k = count;
--
-- pitch = width * cnt + scan_align;
-- pitch &= ~scan_align;
-- size = pitch * vc->vc_font.height + buf_align;
-- size &= ~buf_align;
-- image->width = vc->vc_font.width * cnt;
-- dst0 = info->pixmap.addr + fb_get_buffer_offset(info, size);
-- image->data = dst0;
-- while (k--) {
-- src = vc->vc_font.data + (scr_readw(s++)&charmask)*cellsize;
-- dst = dst0;
-- move_buf_aligned(info, dst, src, pitch, width, image->height);
-- dst0 += width;
-- }
-- info->fbops->fb_imageblit(info, image);
-- image->dx += cnt * vc->vc_font.width;
-- count -= cnt;
-- atomic_dec(&info->pixmap.count);
-- smp_mb__after_atomic_dec();
-- }
--}
--
--/*
- * Accelerated handlers.
- */
- void accel_bmove(struct vc_data *vc, struct fb_info *info, int sy,
-@@ -432,48 +339,21 @@ void accel_clear(struct vc_data *vc, str
- info->fbops->fb_fillrect(info, ®ion);
- }
-
--static void accel_putc(struct vc_data *vc, struct fb_info *info,
-- int c, int ypos, int xpos)
-+void accel_putcs(struct vc_data *vc, struct fb_info *info,
-+ const unsigned short *s, int count, int yy, int xx)
- {
- unsigned short charmask = vc->vc_hi_font_mask ? 0x1ff : 0xff;
- unsigned int width = (vc->vc_font.width + 7) >> 3;
-+ unsigned int cellsize = vc->vc_font.height * width;
-+ unsigned int maxcnt = info->pixmap.size/cellsize;
- unsigned int scan_align = info->pixmap.scan_align - 1;
- unsigned int buf_align = info->pixmap.buf_align - 1;
-+ unsigned int shift_low = 0, mod = vc->vc_font.width % 8;
-+ unsigned int shift_high = 8, pitch, cnt, size, k;
- int bgshift = (vc->vc_hi_font_mask) ? 13 : 12;
- int fgshift = (vc->vc_hi_font_mask) ? 9 : 8;
-- unsigned int size, pitch;
-- struct fb_image image;
-- u8 *src, *dst;
--
-- image.dx = xpos * vc->vc_font.width;
-- image.dy = ypos * vc->vc_font.height;
-- image.width = vc->vc_font.width;
-- image.height = vc->vc_font.height;
-- image.fg_color = attr_fgcol(fgshift, c);
-- image.bg_color = attr_bgcol(bgshift, c);
-- image.depth = 1;
--
-- pitch = width + scan_align;
-- pitch &= ~scan_align;
-- size = pitch * vc->vc_font.height;
-- size += buf_align;
-- size &= ~buf_align;
-- dst = info->pixmap.addr + fb_get_buffer_offset(info, size);
-- image.data = dst;
-- src = vc->vc_font.data + (c & charmask) * vc->vc_font.height * width;
--
-- move_buf_aligned(info, dst, src, pitch, width, image.height);
--
-- info->fbops->fb_imageblit(info, &image);
-- atomic_dec(&info->pixmap.count);
-- smp_mb__after_atomic_dec();
--}
--
--void accel_putcs(struct vc_data *vc, struct fb_info *info,
-- const unsigned short *s, int count, int yy, int xx)
--{
-- int bgshift = (vc->vc_hi_font_mask) ? 13 : 12;
-- int fgshift = (vc->vc_hi_font_mask) ? 9 : 8;
-+ unsigned int idx = vc->vc_font.width >> 3;
-+ u8 *src, *dst, *dst0, mask;
- struct fb_image image;
- u16 c = scr_readw(s);
-
-@@ -484,10 +364,44 @@ void accel_putcs(struct vc_data *vc, str
- image.height = vc->vc_font.height;
- image.depth = 1;
-
-- if (!(vc->vc_font.width & 7))
-- putcs_aligned(vc, info, &image, count, s);
-- else
-- putcs_unaligned(vc, info, &image, count, s);
-+ while (count) {
-+ if (count > maxcnt)
-+ cnt = k = maxcnt;
-+ else
-+ cnt = k = count;
-+
-+ image.width = vc->vc_font.width * cnt;
-+ pitch = ((image.width + 7) >> 3) + scan_align;
-+ pitch &= ~scan_align;
-+ size = pitch * vc->vc_font.height + buf_align;
-+ size &= ~buf_align;
-+ dst0 = fb_get_buffer_offset(info, &info->pixmap, size);
-+ image.data = dst0;
-+ while (k--) {
-+ src = vc->vc_font.data + (scr_readw(s++) & charmask)*cellsize;
-+ dst = dst0;
-+
-+ if (mod) {
-+ mask = (u8) (0xfff << shift_high);
-+ move_buf_unaligned(info, &info->pixmap, dst, src, pitch,
-+ image.height, mask, shift_high,
-+ shift_low, mod, idx);
-+ shift_low += mod;
-+ dst0 += (shift_low >= 8) ? width : width - 1;
-+ shift_low &= 7;
-+ shift_high = 8 - shift_low;
-+ } else {
-+ move_buf_aligned(info, &info->pixmap, dst, src, pitch, idx,
-+ image.height);
-+ dst0 += width;
-+ }
-+ }
-+ info->fbops->fb_imageblit(info, &image);
-+ image.dx += cnt * vc->vc_font.width;
-+ count -= cnt;
-+ atomic_dec(&info->pixmap.count);
-+ smp_mb__after_atomic_dec();
-+ }
- }
-
- void accel_clear_margins(struct vc_data *vc, struct fb_info *info,
-@@ -676,7 +590,7 @@ static const char *fbcon_startup(void)
- if (!info->queue.func) {
- INIT_WORK(&info->queue, fb_flashcursor, info);
-
-- cursor_timer.expires = jiffies + HZ / 50;
-+ cursor_timer.expires = jiffies + HZ / 5;
- cursor_timer.data = (unsigned long ) info;
- add_timer(&cursor_timer);
- }
-@@ -728,15 +642,13 @@ static __inline__ void updatescrollmode(
- static void fbcon_set_display(struct vc_data *vc, int init, int logo)
- {
- struct fb_info *info = registered_fb[(int) con2fb_map[vc->vc_num]];
-+ int nr_rows, nr_cols, old_rows, old_cols, i, charcnt = 256;
- struct display *p = &fb_display[vc->vc_num];
-- int nr_rows, nr_cols;
-- int old_rows, old_cols;
- unsigned short *save = NULL, *r, *q;
-- int i, charcnt = 256;
- struct font_desc *font;
-
- if (vc->vc_num != fg_console || (info->flags & FBINFO_FLAG_MODULE) ||
-- info->fix.type == FB_TYPE_TEXT)
-+ (info->fix.type == FB_TYPE_TEXT))
- logo = 0;
-
- info->var.xoffset = info->var.yoffset = p->yscroll = 0; /* reset wrap/pan */
-@@ -960,19 +872,51 @@ static void fbcon_clear(struct vc_data *
- accel_clear(vc, info, real_y(p, sy), sx, height, width);
- }
-
--
- static void fbcon_putc(struct vc_data *vc, int c, int ypos, int xpos)
- {
- struct fb_info *info = registered_fb[(int) con2fb_map[vc->vc_num]];
-+ unsigned short charmask = vc->vc_hi_font_mask ? 0x1ff : 0xff;
-+ unsigned int scan_align = info->pixmap.scan_align - 1;
-+ unsigned int buf_align = info->pixmap.buf_align - 1;
-+ unsigned int width = (vc->vc_font.width + 7) >> 3;
-+ int bgshift = (vc->vc_hi_font_mask) ? 13 : 12;
-+ int fgshift = (vc->vc_hi_font_mask) ? 9 : 8;
- struct display *p = &fb_display[vc->vc_num];
--
-+ unsigned int size, pitch;
-+ struct fb_image image;
-+ u8 *src, *dst;
-+
- if (!info->fbops->fb_blank && console_blanked)
- return;
-
- if (vt_cons[vc->vc_num]->vc_mode != KD_TEXT)
- return;
-
-- accel_putc(vc, info, c, real_y(p, ypos), xpos);
-+ image.dx = xpos * vc->vc_font.width;
-+ image.dy = real_y(p, ypos) * vc->vc_font.height;
-+ image.width = vc->vc_font.width;
-+ image.height = vc->vc_font.height;
-+ image.fg_color = attr_fgcol(fgshift, c);
-+ image.bg_color = attr_bgcol(bgshift, c);
-+ image.depth = 1;
-+
-+ src = vc->vc_font.data + (c & charmask) * vc->vc_font.height * width;
-+
-+ pitch = width + scan_align;
-+ pitch &= ~scan_align;
-+ size = pitch * vc->vc_font.height;
-+ size += buf_align;
-+ size &= ~buf_align;
-+
-+ dst = fb_get_buffer_offset(info, &info->pixmap, size);
-+ image.data = dst;
-+
-+ move_buf_aligned(info, &info->pixmap, dst, src, pitch, width,
-+ image.height);
-+
-+ info->fbops->fb_imageblit(info, &image);
-+ atomic_dec(&info->pixmap.count);
-+ smp_mb__after_atomic_dec();
- }
-
- static void fbcon_putcs(struct vc_data *vc, const unsigned short *s,
-@@ -994,12 +938,16 @@ static void fbcon_cursor(struct vc_data
- {
- struct fb_info *info = registered_fb[(int) con2fb_map[vc->vc_num]];
- unsigned short charmask = vc->vc_hi_font_mask ? 0x1ff : 0xff;
-+ unsigned int scan_align = info->sprite.scan_align - 1;
-+ unsigned int buf_align = info->sprite.buf_align - 1;
- int bgshift = (vc->vc_hi_font_mask) ? 13 : 12;
- int fgshift = (vc->vc_hi_font_mask) ? 9 : 8;
- struct display *p = &fb_display[vc->vc_num];
-- int w = (vc->vc_font.width + 7) >> 3, c;
-- int y = real_y(p, vc->vc_y);
-+ int y = real_y(p, vc->vc_y), d_pitch, dsize;
-+ int s_pitch = (vc->vc_font.width + 7) >> 3;
-+ int size = s_pitch * vc->vc_font.height, c;
- struct fb_cursor cursor;
-+ u8 *src, *dst;
-
- if (mode & CM_SOFTBACK) {
- mode &= ~CM_SOFTBACK;
-@@ -1012,28 +960,27 @@ static void fbcon_cursor(struct vc_data
- } else if (softback_lines)
- fbcon_set_origin(vc);
-
-- c = scr_readw((u16 *) vc->vc_pos);
--
-- cursor.image.data = vc->vc_font.data + ((c & charmask) * (w * vc->vc_font.height));
-- cursor.set = FB_CUR_SETCUR;
-- cursor.image.depth = 1;
--
- switch (mode) {
- case CM_ERASE:
-- if (info->cursor.rop == ROP_XOR) {
-+ del_timer(&cursor_timer);
-+ if (info->cursor.enable) {
- info->cursor.enable = 0;
-- info->cursor.rop = ROP_COPY;
-- info->fbops->fb_cursor(info, &cursor);
-- }
-+ info->fbops->fb_cursor(info, &info->cursor);
-+ }
- break;
- case CM_MOVE:
- case CM_DRAW:
-+ memset(&cursor, 0, sizeof(struct fb_cursor));
- info->cursor.enable = 1;
--
-+
-+ c = scr_readw((u16 *) vc->vc_pos);
-+
-+ src = vc->vc_font.data + ((c & charmask) * size);
- if (info->cursor.image.fg_color != attr_fgcol(fgshift, c) ||
- info->cursor.image.bg_color != attr_bgcol(bgshift, c)) {
- cursor.image.fg_color = attr_fgcol(fgshift, c);
- cursor.image.bg_color = attr_bgcol(bgshift, c);
-+ cursor.image.depth = 1;
- cursor.set |= FB_CUR_SETCMAP;
- }
-
-@@ -1056,18 +1003,29 @@ static void fbcon_cursor(struct vc_data
- cursor.set |= FB_CUR_SETHOT;
- }
-
-+ src = vc->vc_font.data + ((c & charmask) * size);
-+
-+ d_pitch = (s_pitch + scan_align) & ~scan_align;
-+ dsize = d_pitch * vc->vc_font.height + buf_align;
-+ dsize &= ~buf_align;
-+ dst = fb_get_buffer_offset(info, &info->sprite, dsize);
-+ move_buf_aligned(info, &info->sprite, dst, src, d_pitch, s_pitch, vc->vc_font.height);
-+ info->cursor.image.data = dst;
-+ cursor.set |= FB_CUR_SETSHAPE;
-+
- if ((cursor.set & FB_CUR_SETSIZE) || ((vc->vc_cursor_type & 0x0f) != p->cursor_shape)) {
-- char *mask = kmalloc(w*vc->vc_font.height, GFP_ATOMIC);
-- int cur_height, size, i = 0;
-+ char *mask = kmalloc(dsize, GFP_ATOMIC);
-+ int cur_height, i, j, k;
-
- if (!mask) return;
--
-+
-+ memset(mask, 0, dsize);
-+
- if (info->cursor.mask)
- kfree(info->cursor.mask);
- info->cursor.mask = mask;
-
- p->cursor_shape = vc->vc_cursor_type & 0x0f;
-- cursor.set |= FB_CUR_SETSHAPE;
-
- switch (vc->vc_cursor_type & 0x0f) {
- case CUR_NONE:
-@@ -1090,15 +1048,18 @@ static void fbcon_cursor(struct vc_data
- cur_height = vc->vc_font.height;
- break;
- }
-- size = (vc->vc_font.height - cur_height) * w;
-- while (size--)
-- mask[i++] = 0;
-- size = cur_height * w;
-- while (size--)
-- mask[i++] = 0xff;
-+ i = (vc->vc_font.height - cur_height) * d_pitch;
-+ for (j = 0; j < cur_height; j++) {
-+ for (k = 0; k < s_pitch; k++)
-+ mask[i++] = 0xff;
-+ i += (d_pitch - s_pitch);
-+ }
- }
- info->cursor.rop = ROP_XOR;
- info->fbops->fb_cursor(info, &cursor);
-+ atomic_dec(&info->sprite.count);
-+ smp_mb__after_atomic_dec();
-+ mod_timer(&cursor_timer, jiffies + HZ/5);
- vbl_cursor_cnt = CURSOR_DRAW_DELAY;
- break;
- }
-@@ -1826,9 +1787,11 @@ static int fbcon_do_set_font(struct vc_d
- vc->vc_font.height = h;
- if (vc->vc_hi_font_mask && cnt == 256) {
- vc->vc_hi_font_mask = 0;
-- if (vc->vc_can_do_color)
-+ if (vc->vc_can_do_color) {
- vc->vc_complement_mask >>= 1;
--
-+ vc->vc_s_complement_mask >>= 1;
-+ }
-+
- /* ++Edmund: reorder the attribute bits */
- if (vc->vc_can_do_color) {
- unsigned short *cp =
-@@ -1847,9 +1810,11 @@ static int fbcon_do_set_font(struct vc_d
- }
- } else if (!vc->vc_hi_font_mask && cnt == 512) {
- vc->vc_hi_font_mask = 0x100;
-- if (vc->vc_can_do_color)
-+ if (vc->vc_can_do_color) {
- vc->vc_complement_mask <<= 1;
--
-+ vc->vc_s_complement_mask <<= 1;
-+ }
-+
- /* ++Edmund: reorder the attribute bits */
- {
- unsigned short *cp =
---- linux-2.6.0-test1/drivers/video/controlfb.c 2003-06-14 12:18:00.000000000 -0700
-+++ 25/drivers/video/controlfb.c 2003-07-19 17:04:55.000000000 -0700
-@@ -136,8 +136,8 @@ static int controlfb_check_var (struct f
- /*
- * inititialization
- */
--int control_init(void);
--void control_setup(char *);
-+int controlfb_init(void);
-+void controlfb_setup(char *);
-
- /******************** Prototypes for internal functions **********************/
-
-@@ -475,7 +475,7 @@ try_again:
-
- /* Apply default var */
- var.activate = FB_ACTIVATE_NOW;
-- rc = fb_set_var(&var, &p->info);
-+ rc = fb_set_var(&p->info, &var);
- if (rc && (vmode != VMODE_640_480_60 || cmode != CMODE_8))
- goto try_again;
-
-@@ -553,7 +553,7 @@ static void control_set_hardware(struct
- /*
- * Called from fbmem.c for probing & initializing
- */
--int __init control_init(void)
-+int __init controlfb_init(void)
- {
- struct device_node *dp;
-
-@@ -1057,7 +1057,7 @@ static void control_cleanup(void)
- /*
- * Parse user speficied options (`video=controlfb:')
- */
--void __init control_setup(char *options)
-+void __init controlfb_setup(char *options)
- {
- char *this_opt;
-
---- linux-2.6.0-test1/drivers/video/epson1355fb.c 2003-06-14 12:17:57.000000000 -0700
-+++ 25/drivers/video/epson1355fb.c 2003-07-19 17:04:55.000000000 -0700
-@@ -1,541 +1,714 @@
- /*
-- * linux/drivers/video/epson1355fb.c
-- * -- Support for the Epson SED1355 LCD/CRT controller
-+ * linux/drivers/video/epson1355fb.c -- Epson S1D13505 frame buffer for 2.5.
- *
-- * Copyright (C) 2000 Philipp Rumpf <prumpf@tux.org>
-+ * Epson Research S1D13505 Embedded RAMDAC LCD/CRT Controller
-+ * (previously known as SED1355)
- *
-- * based on linux/drivers/video/skeletonfb.c, which was
-+ * Cf. http://www.erd.epson.com/vdc/html/S1D13505.html
-+ *
-+ *
-+ * Copyright (C) Hewlett-Packard Company. All rights reserved.
-+ *
-+ * Written by Christopher Hoover <ch@hpl.hp.com>
-+ *
-+ * Adapted from:
-+ *
-+ * linux/drivers/video/skeletonfb.c
-+ * Modified to new api Jan 2001 by James Simmons (jsimmons@transvirtual.com)
- * Created 28 Dec 1997 by Geert Uytterhoeven
- *
-+ * linux/drivers/video/epson1355fb.c (2.4 driver)
-+ * Copyright (C) 2000 Philipp Rumpf <prumpf@tux.org>
-+ *
- * This file is subject to the terms and conditions of the GNU General Public
-- * License. See the file COPYING in the main directory of this archive
-- * for more details.
-- */
--/* TODO (roughly in order of priority):
-- * 16 bpp support
-- * crt support
-- * hw cursor support
-- * SwivelView
-+ * License. See the file COPYING in the main directory of this archive for
-+ * more details.
-+ *
-+ *
-+ * Noteworthy Issues
-+ * -----------------
-+ *
-+ * This driver is complicated by the fact that this is a 16-bit chip
-+ * and, on at least one platform (ceiva), we can only do 16-bit reads
-+ * and writes to the framebuffer. We hide this from user space
-+ * except in the case of mmap().
-+ *
-+ *
-+ * To Do
-+ * -----
-+ *
-+ * - Test 8-bit pseudocolor mode
-+ * - Allow setting bpp, virtual resolution
-+ * - Implement horizontal panning
-+ * - (maybe) Implement hardware cursor
- */
-
--#include <asm/io.h>
--#include <linux/config.h>
--#include <linux/delay.h>
--#include <linux/errno.h>
--#include <linux/fb.h>
--#include <linux/init.h>
--#include <linux/kernel.h>
--#include <linux/slab.h>
--#include <linux/mm.h>
- #include <linux/module.h>
--#include <linux/sched.h>
-+#include <linux/kernel.h>
-+#include <linux/errno.h>
- #include <linux/string.h>
-+#include <linux/mm.h>
- #include <linux/tty.h>
--#include <video/fbcon-cfb8.h>
--#include <video/fbcon-mfb.h>
--#include <video/fbcon.h>
--
--/* Register defines. The docs don't seem to provide nice mnemonic names
-- * so I made them up myself ... */
--
--#define E1355_PANEL 0x02
--#define E1355_DISPLAY 0x0D
--#define E1355_MISC 0x1B
--#define E1355_GPIO 0x20
--#define E1355_LUT_INDEX 0x24
--#define E1355_LUT_DATA 0x26
-+#include <linux/slab.h>
-+#include <linux/delay.h>
-+#include <linux/fb.h>
-+#include <linux/init.h>
-+#include <linux/ioport.h>
-+#include <asm/types.h>
-+#include <asm/io.h>
-+#include <asm/uaccess.h>
-+
-+#include <video/epson1355.h>
-+
-+static struct fb_info info;
-+
-+static struct epson1355fb_par {
-+ unsigned long reg_addr;
-+} par;
-+
-+static u32 pseudo_palette[16];
-+
-+/* ------------------------------------------------------------------------- */
-
- #ifdef CONFIG_SUPERH
--#define E1355_REG_BASE CONFIG_E1355_REG_BASE
--#define E1355_FB_BASE CONFIG_E1355_FB_BASE
-
--static inline u8 e1355_read_reg(int index)
-+static inline u8 epson1355_read_reg(int index)
- {
-- return ctrl_inb(E1355_REG_BASE + index);
-+ return ctrl_inb(par.reg_addr + index);
- }
-
--static inline void e1355_write_reg(u8 data, int index)
-+static inline void epson1355_write_reg(u8 data, int index)
- {
-- ctrl_outb(data, E1355_REG_BASE + index);
-+ ctrl_outb(data, par.reg_addr + index);
- }
-
--static inline u16 e1355_read_reg16(int index)
-+#elif defined(CONFIG_ARM)
-+
-+# ifdef CONFIG_ARCH_CEIVA
-+# include <asm/arch/hardware.h>
-+# define EPSON1355FB_BASE_PHYS (CEIVA_PHYS_SED1355)
-+# endif
-+
-+static inline u8 epson1355_read_reg(int index)
- {
-- return e1355_read_reg(index) + (e1355_read_reg(index+1) << 8);
-+ return __raw_readb(par.reg_addr + index);
- }
-
--static inline void e1355_write_reg16(u16 data, int index)
-+static inline void epson1355_write_reg(u8 data, int index)
- {
-- e1355_write_reg((data&0xff), index);
-- e1355_write_reg(((data>>8)&0xff), index + 1);
-+ __raw_writeb(data, par.reg_addr + index);
- }
-+
- #else
--#error unknown architecture
-+# error "no architecture-specific epson1355_{read,write}_reg"
- #endif
-
--struct e1355fb_info {
-- struct fb_info_gen gen;
--};
--
--static int current_par_valid = 0;
--static struct display disp;
-+#ifndef EPSON1355FB_BASE_PHYS
-+# error "EPSON1355FB_BASE_PHYS is not defined"
-+#endif
-
--static struct fb_var_screeninfo default_var;
-+#define EPSON1355FB_REGS_OFS (0)
-+#define EPSON1355FB_REGS_PHYS (EPSON1355FB_BASE_PHYS + EPSON1355FB_REGS_OFS)
-+#define EPSON1355FB_REGS_LEN (64)
-
--int e1355fb_init(void);
--int e1355fb_setup(char*);
--static int e1355_encode_var(struct fb_var_screeninfo *var, const void *par,
-- struct fb_info_gen *info);
--/* ------------------- chipset specific functions -------------------------- */
-+#define EPSON1355FB_FB_OFS (0x00200000)
-+#define EPSON1355FB_FB_PHYS (EPSON1355FB_BASE_PHYS + EPSON1355FB_FB_OFS)
-+#define EPSON1355FB_FB_LEN (2 * 1024 * 1024)
-
-+/* ------------------------------------------------------------------------- */
-
--static void disable_hw_cursor(void)
-+static inline u16 epson1355_read_reg16(int index)
- {
-- u8 curs;
-+ u8 lo = epson1355_read_reg(index);
-+ u8 hi = epson1355_read_reg(index + 1);
-
-- curs = e1355_read_reg(0x27);
-- curs &= ~0xc0;
-- e1355_write_reg(curs, 0x27);
-+ return (hi << 8) | lo;
- }
-
--static void e1355_detect(void)
-+static inline void epson1355_write_reg16(u16 data, int index)
- {
-- u8 rev;
-+ u8 lo = data & 0xff;
-+ u8 hi = (data >> 8) & 0xff;
-
-- e1355_write_reg(0x00, E1355_MISC);
-+ epson1355_write_reg(lo, index);
-+ epson1355_write_reg(hi, index + 1);
-+}
-
-- rev = e1355_read_reg(0x00);
-+static inline u32 epson1355_read_reg20(int index)
-+{
-+ u8 b0 = epson1355_read_reg(index);
-+ u8 b1 = epson1355_read_reg(index + 1);
-+ u8 b2 = epson1355_read_reg(index + 2);
-
-- if ((rev & 0xfc) != 0x0c) {
-- printk(KERN_WARNING "Epson 1355 not detected\n");
-- }
-+ return (b2 & 0x0f) << 16 | (b1 << 8) | b0;
-+}
-
-- /* XXX */
-- disable_hw_cursor();
-+static inline void epson1355_write_reg20(u32 data, int index)
-+{
-+ u8 b0 = data & 0xff;
-+ u8 b1 = (data >> 8) & 0xff;
-+ u8 b2 = (data >> 16) & 0x0f;
-
-- e1355_encode_var(&default_var, NULL, NULL);
-+ epson1355_write_reg(b0, index);
-+ epson1355_write_reg(b1, index + 1);
-+ epson1355_write_reg(b2, index + 2);
- }
-
--struct e1355_par {
-- u32 xres;
-- u32 yres;
-+/* ------------------------------------------------------------------------- */
-
-- int bpp;
-- int mem_bpp;
-+static void set_lut(u8 index, u8 r, u8 g, u8 b)
-+{
-+ epson1355_write_reg(index, REG_LUT_ADDR);
-+ epson1355_write_reg(r, REG_LUT_DATA);
-+ epson1355_write_reg(g, REG_LUT_DATA);
-+ epson1355_write_reg(b, REG_LUT_DATA);
-+}
-
-- u32 panel_xres;
-- u32 panel_yres;
--
-- int panel_width;
-- int panel_ymul;
--};
-
--static int e1355_encode_fix(struct fb_fix_screeninfo *fix,
-- const void *raw_par,
-- struct fb_info_gen *info)
--{
-- const struct e1355_par *par = raw_par;
--
-- memset(fix, 0, sizeof *fix);
--
-- fix->type= FB_TYPE_PACKED_PIXELS;
-+/**
-+ * epson1355fb_setcolreg - sets a color register.
-+ * @regno: Which register in the CLUT we are programming
-+ * @red: The red value which can be up to 16 bits wide
-+ * @green: The green value which can be up to 16 bits wide
-+ * @blue: The blue value which can be up to 16 bits wide.
-+ * @transp: If supported the alpha value which can be up to 16 bits wide.
-+ * @info: frame buffer info structure
-+ *
-+ * Returns negative errno on error, or zero on success.
-+ */
-+static int epson1355fb_setcolreg(unsigned regno, unsigned r, unsigned g,
-+ unsigned b, unsigned transp,
-+ struct fb_info *info)
-+{
-+ if (info->var.grayscale)
-+ r = g = b = (19595 * r + 38470 * g + 7471 * b) >> 16;
-+
-+ switch (info->fix.visual) {
-+ case FB_VISUAL_TRUECOLOR:
-+ if (regno >= 16)
-+ return -EINVAL;
-
-- if (!par)
-- BUG();
-+ ((u32 *) info->pseudo_palette)[regno] =
-+ (r & 0xf800) | (g & 0xfc00) >> 5 | (b & 0xf800) >> 11;
-
-- if (par->bpp == 1) {
-- fix->visual = FB_VISUAL_MONO10;
-- } else if (par->bpp <= 8) {
-- fix->visual = FB_VISUAL_PSEUDOCOLOR;
-- } else {
-- fix->visual = FB_VISUAL_TRUECOLOR;
-- }
-+ break;
-+ case FB_VISUAL_PSEUDOCOLOR:
-+ if (regno >= 256)
-+ return -EINVAL;
-
-- return 0;
--}
-+ set_lut(regno, r >> 8, g >> 8, b >> 8);
-
--static int e1355_set_bpp(struct e1355_par *par, int bpp)
--{
-- int code;
-- u8 disp;
-- u16 bytes_per_line;
--
-- switch(bpp) {
-- case 1:
-- code = 0; break;
-- case 2:
-- code = 1; break;
-- case 4:
-- code = 2; break;
-- case 8:
-- code = 3; break;
-- case 16:
-- code = 5; break;
-+ break;
- default:
-- return -EINVAL; break;
-+ return -ENOSYS;
- }
--
-- disp = e1355_read_reg(E1355_DISPLAY);
-- disp &= ~0x1c;
-- disp |= code << 2;
-- e1355_write_reg(disp, E1355_DISPLAY);
--
-- bytes_per_line = (par->xres * bpp) >> 3;
--
-- e1355_write_reg16(bytes_per_line, 0x16);
--
-- par->bpp = bpp;
--
- return 0;
- }
--
--static int e1355_decode_var(const struct fb_var_screeninfo *var,
-- void *raw_par,
-- struct fb_info_gen *info)
-+
-+/* ------------------------------------------------------------------------- */
-+
-+/**
-+ * epson1355fb_pan_display - Pans the display.
-+ * @var: frame buffer variable screen structure
-+ * @info: frame buffer structure that represents a single frame buffer
-+ *
-+ * Pan (or wrap, depending on the `vmode' field) the display using the
-+ * `xoffset' and `yoffset' fields of the `var' structure.
-+ * If the values don't fit, return -EINVAL.
-+ *
-+ * Returns negative errno on error, or zero on success.
-+ */
-+static int epson1355fb_pan_display(struct fb_var_screeninfo *var,
-+ struct fb_info *info)
- {
-- struct e1355_par *par = raw_par;
-- int ret;
-+ u32 start;
-
-- if (!par)
-- BUG();
-+ if (var->xoffset != 0) /* not yet ... */
-+ return -EINVAL;
-
-- /*
-- * Don't allow setting any of these yet: xres and yres don't
-- * make sense for LCD panels; xres_virtual and yres_virtual
-- * should be supported fine by our hardware though.
-- */
-- if (var->xres != par->xres ||
-- var->yres != par->yres ||
-- var->xres != var->xres_virtual ||
-- var->yres != var->yres_virtual ||
-- var->xoffset != 0 ||
-- var->yoffset != 0)
-+ if (var->yoffset + info->var.yres > info->var.yres_virtual)
- return -EINVAL;
-
-- if(var->bits_per_pixel != par->bpp) {
-- ret = e1355_set_bpp(par, var->bits_per_pixel);
-+ start = (info->fix.line_length >> 1) * var->yoffset;
-
-- if (ret)
-- goto out_err;
-- }
--
-- return 0;
-+ epson1355_write_reg20(start, REG_SCRN1_DISP_START_ADDR0);
-
-- out_err:
-- return ret;
-+ return 0;
- }
-
--static void dump_panel_data(void)
-+/* ------------------------------------------------------------------------- */
-+
-+static void lcd_enable(int enable)
- {
-- u8 panel = e1355_read_reg(E1355_PANEL);
-- int width[2][4] = { { 4, 8, 16, -1 }, { 9, 12, 16, -1 } };
-+ u8 mode = epson1355_read_reg(REG_DISPLAY_MODE);
-
-- printk("%s %s %s panel, width %d bits\n",
-- panel & 2 ? "dual" : "single",
-- panel & 4 ? "color" : "mono",
-- panel & 1 ? "TFT" : "passive",
-- width[panel&1][(panel>>4)&3]);
-+ if (enable)
-+ mode |= 1;
-+ else
-+ mode &= ~1;
-
-- printk("resolution %d x %d\n",
-- (e1355_read_reg(0x04) + 1) * 8,
-- ((e1355_read_reg16(0x08) + 1) * (1 + ((panel & 3) == 2))));
-+ epson1355_write_reg(mode, REG_DISPLAY_MODE);
- }
-
--static int e1355_bpp_to_var(int bpp, struct fb_var_screeninfo *var)
-+#if defined(CONFIG_ARCH_CEIVA)
-+static void backlight_enable(int enable)
- {
-- switch(bpp) {
-- case 1:
-- case 2:
-- case 4:
-- case 8:
-- var->bits_per_pixel = bpp;
-- var->red.offset = var->green.offset = var->blue.offset = 0;
-- var->red.length = var->green.length = var->blue.length = bpp;
-+ /* ### this should be protected by a spinlock ... */
-+ u8 pddr = clps_readb(PDDR);
-+ if (enable)
-+ pddr |= (1 << 5);
-+ else
-+ pddr &= ~(1 << 5);
-+ clps_writeb(pddr, PDDR);
-+}
-+#else
-+static void backlight_enable(int enable)
-+{
-+}
-+#endif
-+
-+
-+/**
-+ * epson1355fb_blank - blanks the display.
-+ * @blank_mode: the blank mode we want.
-+ * @info: frame buffer structure that represents a single frame buffer
-+ *
-+ * Blank the screen if blank_mode != 0, else unblank. Return 0 if
-+ * blanking succeeded, != 0 if un-/blanking failed due to e.g. a
-+ * video mode which doesn't support it. Implements VESA suspend
-+ * and powerdown modes on hardware that supports disabling hsync/vsync:
-+ * blank_mode == 2: suspend vsync
-+ * blank_mode == 3: suspend hsync
-+ * blank_mode == 4: powerdown
-+ *
-+ * Returns negative errno on error, or zero on success.
-+ *
-+ */
-+static int epson1355fb_blank(int blank_mode, struct fb_info *info)
-+{
-+ switch (blank_mode) {
-+ case VESA_NO_BLANKING:
-+ lcd_enable(1);
-+ backlight_enable(1);
- break;
-- case 16:
-- var->bits_per_pixel = 16;
-- var->red.offset = 11;
-- var->red.length = 5;
-- var->green.offset = 5;
-- var->green.length = 6;
-- var->blue.offset = 0;
-- var->blue.length = 5;
-+ case VESA_VSYNC_SUSPEND:
-+ case VESA_HSYNC_SUSPEND:
-+ backlight_enable(0);
- break;
-+ case VESA_POWERDOWN:
-+ backlight_enable(0);
-+ lcd_enable(0);
-+ break;
-+ default:
-+ return -EINVAL;
- }
--
- return 0;
- }
-
--static int e1355_encode_var(struct fb_var_screeninfo *var, const void *raw_par,
-- struct fb_info_gen *info)
-+/* ------------------------------------------------------------------------- */
-+
-+/*
-+ * We can't use the cfb generic routines, as we have to limit
-+ * ourselves to 16-bit or 8-bit loads and stores to this 16-bit
-+ * chip.
-+ */
-+
-+static inline void epson1355fb_fb_writel(unsigned long v, unsigned long *a)
- {
-- u8 panel, display;
-- u32 xres, xres_virtual, yres;
-- static int width[2][4] = { { 4, 8, 16, -1 }, { 9, 12, 16, -1 } };
-- static int bpp_tab[8] = { 1, 2, 4, 8, 15, 16 };
-- int bpp, hw_bpp;
-- int is_color, is_dual, is_tft;
-- int lcd_enabled, crt_enabled;
-+ u16 *p = (u16 *) a;
-+ u16 l = v & 0xffff;
-+ u16 h = v >> 16;
-
-- panel = e1355_read_reg(E1355_PANEL);
-- display = e1355_read_reg(E1355_DISPLAY);
-+ fb_writew(l, p);
-+ fb_writew(h, p + 1);
-+}
-
-- is_color = (panel & 0x04) != 0;
-- is_dual = (panel & 0x02) != 0;
-- is_tft = (panel & 0x01) != 0;
-+static inline unsigned long epson1355fb_fb_readl(const unsigned long *a)
-+{
-+ const u16 *p = (u16 *) a;
-+ u16 l = fb_readw(p);
-+ u16 h = fb_readw(p + 1);
-
-- bpp = bpp_tab[(display>>2)&7];
-- e1355_bpp_to_var(bpp, var);
-+ return (h << 16) | l;
-+}
-
-- crt_enabled = (display & 0x02) != 0;
-- lcd_enabled = (display & 0x02) != 0;
-+#define FB_READL epson1355fb_fb_readl
-+#define FB_WRITEL epson1355fb_fb_writel
-
-- hw_bpp = width[is_tft][(panel>>4)&3];
-+/* ------------------------------------------------------------------------- */
-
-- xres = e1355_read_reg(0x04) + 1;
-- yres = e1355_read_reg16(0x08) + 1;
--
-- xres *= 8;
-- /* talk about weird hardware .. */
-- yres *= (is_dual && !crt_enabled) ? 2 : 1;
--
-- xres_virtual = e1355_read_reg16(0x16);
-- /* it's in 2-byte words initially */
-- xres_virtual *= 16;
-- xres_virtual /= var->bits_per_pixel;
-+static inline unsigned long copy_from_user16(void *to, const void *from,
-+ unsigned long n)
-+{
-+ u16 *dst = (u16 *) to;
-+ u16 *src = (u16 *) from;
-
-- var->xres = xres;
-- var->yres = yres;
-- var->xres_virtual = xres_virtual;
-- var->yres_virtual = yres;
-+ if (!access_ok(VERIFY_READ, from, n))
-+ return n;
-
-- var->xoffset = var->yoffset = 0;
-+ while (n > 1) {
-+ u16 v;
-+ if (__get_user(v, src))
-+ return n;
-
-- var->grayscale = !is_color;
--
-- return 0;
--}
-+ fb_writew(v, dst);
-
--#define is_dual(panel) (((panel)&3)==2)
-+ src++, dst++;
-+ n -= 2;
-+ }
-
--static void get_panel_data(struct e1355_par *par)
--{
-- u8 panel;
-- int width[2][4] = { { 4, 8, 16, -1 }, { 9, 12, 16, -1 } };
-+ if (n) {
-+ u8 v;
-
-- panel = e1355_read_reg(E1355_PANEL);
-+ if (__get_user(v, ((u8 *) src)))
-+ return n;
-
-- par->panel_width = width[panel&1][(panel>>4)&3];
-- par->panel_xres = (e1355_read_reg(0x04) + 1) * 8;
-- par->panel_ymul = is_dual(panel) ? 2 : 1;
-- par->panel_yres = ((e1355_read_reg16(0x08) + 1)
-- * par->panel_ymul);
-+ fb_writeb(v, dst);
-+ }
-+ return 0;
- }
-
--static void e1355_get_par(void *raw_par, struct fb_info_gen *info)
-+static inline unsigned long copy_to_user16(void *to, const void *from,
-+ unsigned long n)
- {
-- struct e1355_par *par = raw_par;
-+ u16 *dst = (u16 *) to;
-+ u16 *src = (u16 *) from;
-
-- get_panel_data(par);
--}
-+ if (!access_ok(VERIFY_WRITE, to, n))
-+ return n;
-
--static void e1355_set_par(const void *par, struct fb_info_gen *info)
--{
--}
-+ while (n > 1) {
-+ u16 v = fb_readw(src);
-
--static int e1355_getcolreg(unsigned regno, unsigned *red, unsigned *green,
-- unsigned *blue, unsigned *transp,
-- struct fb_info *info)
--{
-- u8 r, g, b;
-+ if (__put_user(v, dst))
-+ return n;
-
-- e1355_write_reg(regno, E1355_LUT_INDEX);
-- r = e1355_read_reg(E1355_LUT_DATA);
-- g = e1355_read_reg(E1355_LUT_DATA);
-- b = e1355_read_reg(E1355_LUT_DATA);
-+ src++, dst++;
-+ n -= 2;
-+ }
-
-- *red = r << 8;
-- *green = g << 8;
-- *blue = b << 8;
-+ if (n) {
-+ u8 v = fb_readb(src);
-
-+ if (__put_user(v, ((u8 *) dst)))
-+ return n;
-+ }
- return 0;
- }
-
--static int e1355fb_setcolreg(unsigned regno, unsigned red, unsigned green,
-- unsigned blue, unsigned transp,
-- struct fb_info *info)
--{
-- u8 r = (red >> 8) & 0xf0;
-- u8 g = (green>>8) & 0xf0;
-- u8 b = (blue>> 8) & 0xf0;
--
-- e1355_write_reg(regno, E1355_LUT_INDEX);
-- e1355_write_reg(r, E1355_LUT_DATA);
-- e1355_write_reg(g, E1355_LUT_DATA);
-- e1355_write_reg(b, E1355_LUT_DATA);
--
-- return 0;
--}
-
--static int e1355_pan_display(const struct fb_var_screeninfo *var,
-- struct fb_info_gen *info)
-+static ssize_t
-+epson1355fb_read(struct file *file, char *buf, size_t count, loff_t * ppos)
- {
-- BUG();
--
-- return -EINVAL;
-+ unsigned long p = *ppos;
-+
-+ /* from fbmem.c except for our own copy_*_user */
-+ if (p >= info.fix.smem_len)
-+ return 0;
-+ if (count >= info.fix.smem_len)
-+ count = info.fix.smem_len;
-+ if (count + p > info.fix.smem_len)
-+ count = info.fix.smem_len - p;
-+
-+ if (count) {
-+ char *base_addr;
-+
-+ base_addr = info.screen_base;
-+ count -= copy_to_user16(buf, base_addr + p, count);
-+ if (!count)
-+ return -EFAULT;
-+ *ppos += count;
-+ }
-+ return count;
- }
-
--/*
-- * The AERO_HACKS parts disable/enable the backlight on the Compaq Aero 8000.
-- * I'm not sure they aren't dangerous to the hardware, so be warned.
-- */
--#undef AERO_HACKS
-+static ssize_t
-+epson1355fb_write(struct file *file, const char *buf,
-+ size_t count, loff_t * ppos)
-+{
-+ unsigned long p = *ppos;
-+ int err;
-+
-+ /* from fbmem.c except for our own copy_*_user */
-+ if (p > info.fix.smem_len)
-+ return -ENOSPC;
-+ if (count >= info.fix.smem_len)
-+ count = info.fix.smem_len;
-+ err = 0;
-+ if (count + p > info.fix.smem_len) {
-+ count = info.fix.smem_len - p;
-+ err = -ENOSPC;
-+ }
-
--static int e1355_blank(int blank_mode, struct fb_info_gen *info)
--{
-- u8 disp;
-+ if (count) {
-+ char *base_addr;
-
-- switch (blank_mode) {
-- case VESA_NO_BLANKING:
-- disp = e1355_read_reg(E1355_DISPLAY);
-- disp |= 1;
-- e1355_write_reg(disp, E1355_DISPLAY);
--
--#ifdef AERO_HACKS
-- e1355_write_reg(0x6, 0x20);
--#endif
-- break;
-+ base_addr = info.screen_base;
-+ count -= copy_from_user16(base_addr + p, buf, count);
-+ *ppos += count;
-+ err = -EFAULT;
-+ }
-+ if (count)
-+ return count;
-+ return err;
-+}
-+
-+/* ------------------------------------------------------------------------- */
-+
-+static struct fb_ops epson1355fb_fbops = {
-+ .owner = THIS_MODULE,
-+ .fb_setcolreg = epson1355fb_setcolreg,
-+ .fb_pan_display = epson1355fb_pan_display,
-+ .fb_blank = epson1355fb_blank,
-+ .fb_fillrect = cfb_fillrect,
-+ .fb_copyarea = cfb_copyarea,
-+ .fb_imageblit = cfb_imageblit,
-+ .fb_read = epson1355fb_read,
-+ .fb_write = epson1355fb_write,
-+ .fb_cursor = soft_cursor,
-+};
-
-- case VESA_VSYNC_SUSPEND:
-- case VESA_HSYNC_SUSPEND:
-- case VESA_POWERDOWN:
-- disp = e1355_read_reg(E1355_DISPLAY);
-- disp &= ~1;
-- e1355_write_reg(disp, E1355_DISPLAY);
-+/* ------------------------------------------------------------------------- */
-
--#ifdef AERO_HACKS
-- e1355_write_reg(0x0, 0x20);
--#endif
-- break;
-+static __init unsigned int get_fb_size(struct fb_info *info)
-+{
-+ unsigned int size = 2 * 1024 * 1024;
-+ char *p = info->screen_base;
-
-- default:
-- return -EINVAL;
-- }
-+ /* the 512k framebuffer is aliased at start + 0x80000 * n */
-+ fb_writeb(1, p);
-+ fb_writeb(0, p + 0x80000);
-+ if (!fb_readb(p))
-+ size = 512 * 1024;
-
-- return 0;
-+ fb_writeb(0, p);
-+
-+ return size;
- }
-
--static struct display_switch e1355_dispsw;
-+static int epson1355_width_tab[2][4] __initdata =
-+ { {4, 8, 16, -1}, {9, 12, 16, -1} };
-+static int epson1355_bpp_tab[8] __initdata = { 1, 2, 4, 8, 15, 16 };
-
--static void e1355_set_disp(const void *unused, struct display *disp,
-- struct fb_info_gen *info)
-+static void __init fetch_hw_state(struct fb_info *info)
- {
-- struct display_switch *d;
-+ struct fb_var_screeninfo *var = &info->var;
-+ struct fb_fix_screeninfo *fix = &info->fix;
-+ u8 panel, display;
-+ u16 offset;
-+ u32 xres, yres;
-+ u32 xres_virtual, yres_virtual;
-+ int bpp, lcd_bpp;
-+ int is_color, is_dual, is_tft;
-+ int lcd_enabled, crt_enabled;
-+
-+ fix->type = FB_TYPE_PACKED_PIXELS;
-+
-+ display = epson1355_read_reg(REG_DISPLAY_MODE);
-+ bpp = epson1355_bpp_tab[(display >> 2) & 7];
-
-- disp->dispsw = &e1355_dispsw;
--
-- switch(disp->var.bits_per_pixel) {
--#ifdef FBCON_HAS_MFB
-- case 1:
-- d = &fbcon_mfb; break;
--#endif
--#ifdef FBCON_HAS_CFB8
-+ switch (bpp) {
- case 8:
-- d = &fbcon_cfb8; break;
--#endif
-+ fix->visual = FB_VISUAL_PSEUDOCOLOR;
-+ var->bits_per_pixel = 8;
-+ var->red.offset = var->green.offset = var->blue.offset = 0;
-+ var->red.length = var->green.length = var->blue.length = 8;
-+ break;
-+ case 16:
-+ /* 5-6-5 RGB */
-+ fix->visual = FB_VISUAL_TRUECOLOR;
-+ var->bits_per_pixel = 16;
-+ var->red.offset = 11;
-+ var->red.length = 5;
-+ var->green.offset = 5;
-+ var->green.length = 6;
-+ var->blue.offset = 0;
-+ var->blue.length = 5;
-+ break;
- default:
-- BUG(); break;
-+ BUG();
- }
-
-- memcpy(&e1355_dispsw, d, sizeof *d);
-+ if (fix->visual == FB_VISUAL_TRUECOLOR) {
-+ info->pseudo_palette = &pseudo_palette;
-+ fb_alloc_cmap(&(info->cmap), 16, 0);
-+ } else
-+ fb_alloc_cmap(&(info->cmap), 1 << bpp, 0);
-+
-+ panel = epson1355_read_reg(REG_PANEL_TYPE);
-+ is_color = (panel & 0x04) != 0;
-+ is_dual = (panel & 0x02) != 0;
-+ is_tft = (panel & 0x01) != 0;
-+ crt_enabled = (display & 0x02) != 0;
-+ lcd_enabled = (display & 0x01) != 0;
-+ lcd_bpp = epson1355_width_tab[is_tft][(panel >> 4) & 3];
-+
-+ xres = (epson1355_read_reg(REG_HORZ_DISP_WIDTH) + 1) * 8;
-+ yres = (epson1355_read_reg16(REG_VERT_DISP_HEIGHT0) + 1) *
-+ ((is_dual && !crt_enabled) ? 2 : 1);
-+ offset = epson1355_read_reg16(REG_MEM_ADDR_OFFSET0) & 0x7ff;
-+ xres_virtual = offset * 16 / bpp;
-+ yres_virtual = fix->smem_len / (offset * 2);
-+
-+ var->xres = xres;
-+ var->yres = yres;
-+ var->xres_virtual = xres_virtual;
-+ var->yres_virtual = yres_virtual;
-+ var->xoffset = var->yoffset = 0;
-+
-+ fix->line_length = offset * 2;
-+
-+ fix->xpanstep = 0; /* no pan yet */
-+ fix->ypanstep = 1;
-+ fix->ywrapstep = 0;
-+ fix->accel = FB_ACCEL_NONE;
-+
-+ var->grayscale = !is_color;
-
-- /* reading is terribly slow for us */
--#if 0 /* XXX: need to work out why this doesn't work */
-- e1355_dispsw.bmove = fbcon_redraw_bmove;
-+#ifdef DEBUG
-+ printk(KERN_INFO
-+ "epson1355fb: xres=%d, yres=%d, "
-+ "is_color=%d, is_dual=%d, is_tft=%d\n",
-+ xres, yres, is_color, is_dual, is_tft);
-+ printk(KERN_INFO
-+ "epson1355fb: bpp=%d, lcd_bpp=%d, "
-+ "crt_enabled=%d, lcd_enabled=%d\n",
-+ bpp, lcd_bpp, crt_enabled, lcd_enabled);
- #endif
- }
-
--/* ------------ Interfaces to hardware functions ------------ */
-
-+static void clearfb16(struct fb_info *info)
-+{
-+ u16 *dst = (u16 *) info->screen_base;
-+ unsigned long n = info->fix.smem_len;
-
--struct fbgen_hwswitch e1355_switch = {
-- .detect = e1355_detect,
-- .encode_fix = e1355_encode_fix,
-- .decode_var = e1355_decode_var,
-- .encode_var = e1355_encode_var,
-- .get_par = e1355_get_par,
-- .set_par = e1355_set_par,
-- .getcolreg = e1355_getcolreg,
-- .pan_display = e1355_pan_display,
-- .blank = e1355_blank,
-- .set_disp = e1355_set_disp,
--};
-+ while (n > 1) {
-+ fb_writew(0, dst);
-+ dst++, n -= 2;
-+ }
-
-+ if (n)
-+ fb_writeb(0, dst);
-+}
-
--/* ------------ Hardware Independent Functions ------------ */
-+static void epson1355fb_deinit(void);
-
-+int __init epson1355fb_init(void)
-+{
-+ u8 revision;
-+ int rc = 0;
-
--static struct fb_ops e1355fb_ops = {
-- .owner = THIS_MODULE,
-- .fb_get_fix = fbgen_get_fix,
-- .fb_get_var = fbgen_get_var,
-- .fb_set_var = fbgen_set_var,
-- .fb_get_cmap = fbgen_get_cmap,
-- .fb_set_cmap = gen_set_cmap,
-- .fb_setcolreg = e1355fb_setcolreg,
-- .fb_pan_display =fbgen_pan_display,
-- .fb_blank = fbgen_blank,
--};
-+ if (!request_mem_region
-+ (EPSON1355FB_REGS_PHYS, EPSON1355FB_REGS_LEN,
-+ "S1D13505 registers")) {
-+ printk(KERN_ERR "epson1355fb: unable to reserve "
-+ "registers at 0x%0x\n", EPSON1355FB_REGS_PHYS);
-+ rc = -EBUSY;
-+ goto bail;
-+ }
-
--static struct e1355fb_info fb_info;
-+ if (!request_mem_region(EPSON1355FB_FB_PHYS, EPSON1355FB_FB_LEN,
-+ "S1D13505 framebuffer")) {
-+ printk(KERN_ERR "epson1355fb: unable to reserve "
-+ "framebuffer at 0x%0x\n", EPSON1355FB_FB_PHYS);
-+ rc = -EBUSY;
-+ goto bail;
-+ }
-+
-+ par.reg_addr = (unsigned long)
-+ ioremap(EPSON1355FB_REGS_PHYS, EPSON1355FB_REGS_LEN);
-+ if (!par.reg_addr) {
-+ printk(KERN_ERR "epson1355fb: unable to map registers\n");
-+ rc = -ENOMEM;
-+ goto bail;
-+ }
-+
-+ info.screen_base =
-+ ioremap(EPSON1355FB_FB_PHYS, EPSON1355FB_FB_LEN);
-+ if (!info.screen_base) {
-+ printk(KERN_ERR
-+ "epson1355fb: unable to map framebuffer\n");
-+ rc = -ENOMEM;
-+ goto bail;
-+ }
-+
-+ revision = epson1355_read_reg(REG_REVISION_CODE);
-+ if ((revision >> 2) != 3) {
-+ printk(KERN_INFO "epson1355fb: epson1355 not found\n");
-+ rc = -ENODEV;
-+ goto bail;
-+ }
-+
-+ info.fix.mmio_start = EPSON1355FB_REGS_PHYS;
-+ info.fix.mmio_len = EPSON1355FB_REGS_LEN;
-+ info.fix.smem_start = EPSON1355FB_FB_PHYS;
-+ info.fix.smem_len = get_fb_size(&info);
-+
-+ printk(KERN_INFO
-+ "epson1355fb: regs mapped at 0x%lx, fb %d KiB mapped at 0x%p\n",
-+ par.reg_addr, info.fix.smem_len / 1024, info.screen_base);
-+
-+ strcpy(info.fix.id, "S1D13505");
-+ info.par = ∥
-+ info.node = NODEV;
-+ info.fbops = &epson1355fb_fbops;
-+ info.flags = FBINFO_FLAG_DEFAULT;
-+
-+ /* we expect the boot loader to have initialized the chip
-+ with appropriate parameters from which we can determinte
-+ the flavor of lcd panel attached */
-+ fetch_hw_state(&info);
-+
-+ /* turn this puppy on ... */
-+ clearfb16(&info);
-+ backlight_enable(1);
-+ lcd_enable(1);
-+
-+ if (register_framebuffer(&info) < 0) {
-+ rc = -EINVAL;
-+ goto bail;
-+ }
-+
-+ printk(KERN_INFO "fb%d: %s frame buffer device\n",
-+ minor(info.node), info.fix.id);
-
--int __init e1355fb_setup(char *str)
--{
- return 0;
-+
-+ bail:
-+ epson1355fb_deinit();
-+ return rc;
- }
-
--int __init e1355fb_init(void)
-+static void epson1355fb_deinit(void)
- {
-- fb_info.gen.fbhw = &e1355_switch;
-- fb_info.gen.fbhw->detect();
-- strcpy(fb_info.gen.info.modename, "SED1355");
-- fb_info.gen.info.changevar = NULL;
-- fb_info.gen.info.fbops = &e1355fb_ops;
-- fb_info.gen.info.screen_base = (void *)E1355_FB_BASE;
-- fb_info.gen.currcon = -1;
-- fb_info.gen.info.disp = &disp;
-- fb_info.gen.parsize = sizeof(struct e1355_par);
-- fb_info.gen.info.switch_con = &fbgen_switch;
-- fb_info.gen.info.updatevar = &fbgen_update_var;
-- fb_info.gen.info.flags = FBINFO_FLAG_DEFAULT;
-- /* This should give a reasonable default video mode */
-- fbgen_get_var(&disp.var, -1, &fb_info.gen.info);
-- fbgen_do_set_var(&disp.var, 1, &fb_info.gen);
-- fbgen_set_disp(-1, &fb_info.gen);
-- if (disp.var.bits_per_pixel > 1)
-- do_install_cmap(0, &fb_info.gen);
-- if (register_framebuffer(&fb_info.gen.info) < 0)
-- return -EINVAL;
-- printk(KERN_INFO "fb%d: %s frame buffer device\n", fb_info.gen.info.node,
-- fb_info.gen.info.modename);
-+ fb_dealloc_cmap(&info.cmap);
-
-- return 0;
-+ if (info.screen_base)
-+ iounmap(info.screen_base);
-+ if (par.reg_addr)
-+ iounmap((void *) par.reg_addr);
-+
-+ release_mem_region(EPSON1355FB_FB_PHYS, EPSON1355FB_FB_LEN);
-+ release_mem_region(EPSON1355FB_REGS_PHYS, EPSON1355FB_REGS_LEN);
- }
-
-+static void __exit epson1355fb_cleanup(void)
-+{
-+ backlight_enable(0);
-+ lcd_enable(0);
-
-- /*
-- * Cleanup
-- */
--
--void e1355fb_cleanup(struct fb_info *info)
--{
-- /*
-- * If your driver supports multiple boards, you should unregister and
-- * clean up all instances.
-- */
--
-- unregister_framebuffer(info);
-- /* ... */
-+ unregister_framebuffer(&info);
-+ epson1355fb_deinit();
- }
-
-+/* ------------------------------------------------------------------------- */
-+
-+#ifdef MODULE
-+module_init(epson1355fb_init);
-+#endif
-+module_exit(epson1355fb_cleanup);
-+
-+MODULE_AUTHOR("Christopher Hoover <ch@hpl.hp.com>");
-+MODULE_DESCRIPTION("Framebuffer driver for Epson S1D13505");
- MODULE_LICENSE("GPL");
---- linux-2.6.0-test1/drivers/video/fbmem.c 2003-06-14 12:17:55.000000000 -0700
-+++ 25/drivers/video/fbmem.c 2003-07-19 17:04:55.000000000 -0700
-@@ -25,7 +25,6 @@
- #include <linux/mman.h>
- #include <linux/tty.h>
- #include <linux/init.h>
--#include <linux/linux_logo.h>
- #include <linux/proc_fs.h>
- #ifdef CONFIG_KMOD
- #include <linux/kmod.h>
-@@ -102,13 +101,13 @@ extern int hgafb_setup(char*);
- extern int matroxfb_init(void);
- extern int matroxfb_setup(char*);
- extern int hpfb_init(void);
--extern int control_init(void);
--extern int control_setup(char*);
--extern int platinum_init(void);
--extern int platinum_setup(char*);
-+extern int controlfb_init(void);
-+extern int controlfb_setup(char*);
-+extern int platinumfb_init(void);
-+extern int platinumfb_setup(char*);
- extern int valkyriefb_init(void);
- extern int valkyriefb_setup(char*);
--extern int chips_init(void);
-+extern int chipsfb_init(void);
- extern int g364fb_init(void);
- extern int sa1100fb_init(void);
- extern int fm2fb_init(void);
-@@ -135,8 +134,7 @@ extern int tx3912fb_init(void);
- extern int tx3912fb_setup(char*);
- extern int radeonfb_init(void);
- extern int radeonfb_setup(char*);
--extern int e1355fb_init(void);
--extern int e1355fb_setup(char*);
-+extern int epson1355fb_init(void);
- extern int pvr2fb_init(void);
- extern int pvr2fb_setup(char*);
- extern int sstfb_init(void);
-@@ -218,16 +216,16 @@ static struct {
- { "radeonfb", radeonfb_init, radeonfb_setup },
- #endif
- #ifdef CONFIG_FB_CONTROL
-- { "controlfb", control_init, control_setup },
-+ { "controlfb", controlfb_init, controlfb_setup },
- #endif
- #ifdef CONFIG_FB_PLATINUM
-- { "platinumfb", platinum_init, platinum_setup },
-+ { "platinumfb", platinumfb_init, platinumfb_setup },
- #endif
- #ifdef CONFIG_FB_VALKYRIE
- { "valkyriefb", valkyriefb_init, valkyriefb_setup },
- #endif
- #ifdef CONFIG_FB_CT65550
-- { "chipsfb", chips_init, NULL },
-+ { "chipsfb", chipsfb_init, NULL },
- #endif
- #ifdef CONFIG_FB_IMSTT
- { "imsttfb", imsttfb_init, imsttfb_setup },
-@@ -342,8 +340,8 @@ static struct {
- #ifdef CONFIG_FB_TX3912
- { "tx3912fb", tx3912fb_init, tx3912fb_setup },
- #endif
--#ifdef CONFIG_FB_E1355
-- { "e1355fb", e1355fb_init, e1355fb_setup },
-+#ifdef CONFIG_FB_EPSON1355
-+ { "s1d1355fb", epson1355fb_init, NULL },
- #endif
- #ifdef CONFIG_FB_PVR2
- { "pvr2fb", pvr2fb_init, pvr2fb_setup },
-@@ -409,20 +407,20 @@ void sys_outbuf(u8 *src, u8 *dst, unsign
- memcpy(dst, src, size);
- }
-
--void move_buf_aligned(struct fb_info *info, u8 *dst, u8 *src, u32 d_pitch,
-- u32 s_pitch, u32 height)
-+void move_buf_aligned(struct fb_info *info, struct fb_pixmap *buf, u8 *dst, u8 *src,
-+ u32 d_pitch, u32 s_pitch, u32 height)
- {
- int i;
-
- for (i = height; i--; ) {
-- info->pixmap.outbuf(src, dst, s_pitch);
-+ buf->outbuf(src, dst, s_pitch);
- src += s_pitch;
- dst += d_pitch;
- }
- }
-
--void move_buf_unaligned(struct fb_info *info, u8 *dst, u8 *src, u32 d_pitch,
-- u32 height, u32 mask, u32 shift_high, u32 shift_low,
-+void move_buf_unaligned(struct fb_info *info, struct fb_pixmap *buf, u8 *dst, u8 *src,
-+ u32 d_pitch, u32 height, u32 mask, u32 shift_high, u32 shift_low,
- u32 mod, u32 idx)
- {
- int i, j;
-@@ -430,21 +428,21 @@ void move_buf_unaligned(struct fb_info *
-
- for (i = height; i--; ) {
- for (j = 0; j < idx; j++) {
-- tmp = info->pixmap.inbuf(dst+j);
-+ tmp = buf->inbuf(dst+j);
- tmp &= mask;
- tmp |= *src >> shift_low;
-- info->pixmap.outbuf(&tmp, dst+j, 1);
-+ buf->outbuf(&tmp, dst+j, 1);
- tmp = *src << shift_high;
-- info->pixmap.outbuf(&tmp, dst+j+1, 1);
-+ buf->outbuf(&tmp, dst+j+1, 1);
- src++;
- }
-- tmp = info->pixmap.inbuf(dst+idx);
-+ tmp = buf->inbuf(dst+idx);
- tmp &= mask;
- tmp |= *src >> shift_low;
-- info->pixmap.outbuf(&tmp, dst+idx, 1);
-+ buf->outbuf(&tmp, dst+idx, 1);
- if (shift_high < mod) {
- tmp = *src << shift_high;
-- info->pixmap.outbuf(&tmp, dst+idx+1, 1);
-+ buf->outbuf(&tmp, dst+idx+1, 1);
- }
- src++;
- dst += d_pitch;
-@@ -455,26 +453,29 @@ void move_buf_unaligned(struct fb_info *
- * we need to lock this section since fb_cursor
- * may use fb_imageblit()
- */
--u32 fb_get_buffer_offset(struct fb_info *info, u32 size)
-+char* fb_get_buffer_offset(struct fb_info *info, struct fb_pixmap *buf, u32 size)
- {
-- u32 align = info->pixmap.buf_align - 1;
-+ u32 align = buf->buf_align - 1;
- u32 offset, count = 1000;
-+ char *addr = buf->addr;
-
-- spin_lock(&info->pixmap.lock);
-- offset = info->pixmap.offset + align;
-- offset &= ~align;
-- if (offset + size > info->pixmap.size) {
-- while (atomic_read(&info->pixmap.count) && count--);
-- if (info->fbops->fb_sync &&
-- info->pixmap.flags & FB_PIXMAP_SYNC)
-- info->fbops->fb_sync(info);
-- offset = 0;
-+ spin_lock(&buf->lock);
-+ if (!(buf->flags & FB_PIXMAP_IO)) {
-+ offset = buf->offset + align;
-+ offset &= ~align;
-+ if (offset + size > buf->size) {
-+ while (atomic_read(&buf->count) && count--);
-+ if (info->fbops->fb_sync && (buf->flags & FB_PIXMAP_SYNC))
-+ info->fbops->fb_sync(info);
-+ offset = 0;
-+ }
-+ buf->offset = offset + size;
-+ addr += offset;
- }
-- info->pixmap.offset = offset + size;
-- atomic_inc(&info->pixmap.count);
-+ atomic_inc(&buf->count);
- smp_mb__after_atomic_inc();
-- spin_unlock(&info->pixmap.lock);
-- return offset;
-+ spin_unlock(&buf->lock);
-+ return addr;
- }
-
- #ifdef CONFIG_LOGO
-@@ -656,7 +657,7 @@ int fb_prepare_logo(struct fb_info *info
- }
-
- /* Return if no suitable logo was found */
-- fb_logo.logo = fb_find_logo(info->var.bits_per_pixel);
-+ fb_logo.logo = find_logo(info->var.bits_per_pixel);
-
- if (!fb_logo.logo || fb_logo.logo->height > info->var.yres) {
- fb_logo.logo = NULL;
-@@ -726,8 +727,6 @@ int fb_show_logo(struct fb_info *info)
- x <= info->var.xres-fb_logo.logo->width; x += (fb_logo.logo->width + 8)) {
- image.dx = x;
- info->fbops->fb_imageblit(info, &image);
-- //atomic_dec(&info->pixmap.count);
-- //smp_mb__after_atomic_dec();
- }
-
- if (palette != NULL)
-@@ -1238,6 +1237,22 @@ register_framebuffer(struct fb_info *fb_
- fb_info->pixmap.inbuf = sys_inbuf;
- spin_lock_init(&fb_info->pixmap.lock);
-
-+ if (fb_info->sprite.addr == NULL) {
-+ fb_info->sprite.addr = kmalloc(FBPIXMAPSIZE, GFP_KERNEL);
-+ if (fb_info->sprite.addr) {
-+ fb_info->sprite.size = FBPIXMAPSIZE;
-+ fb_info->sprite.buf_align = 1;
-+ fb_info->sprite.scan_align = 1;
-+ fb_info->sprite.flags = FB_PIXMAP_IO;
-+ }
-+ }
-+ fb_info->sprite.offset = 0;
-+ if (fb_info->sprite.outbuf == NULL)
-+ fb_info->sprite.outbuf = sys_outbuf;
-+ if (fb_info->sprite.inbuf == NULL)
-+ fb_info->sprite.inbuf = sys_inbuf;
-+ spin_lock_init(&fb_info->sprite.lock);
-+
- registered_fb[i] = fb_info;
-
- devfs_mk_cdev(MKDEV(FB_MAJOR, i),
---- linux-2.6.0-test1/drivers/video/g364fb.c 2003-06-14 12:17:58.000000000 -0700
-+++ 25/drivers/video/g364fb.c 2003-07-19 17:04:55.000000000 -0700
-@@ -127,20 +127,55 @@ static struct fb_ops g364fb_ops = {
-
- int g364fb_cursor(struct fb_info *info, struct fb_cursor *cursor)
- {
-+
-+ /* Turn the cursor off before we start changing it. */
-+ *(unsigned int *) CTLA_REG |= CURS_TOGGLE;
-+
-+ if (cursor->set & FB_CUR_SETHOT)
-+ info->cursor.hot = cursor->hot;
-
-- switch (cursor->enable) {
-- case CM_ERASE:
-- *(unsigned int *) CTLA_REG |= CURS_TOGGLE;
-- break;
-+ if (cursor->set & FB_CUR_SETPOS) {
-+ unsigned int tmp;
-+
-+ info->cursor.image.dx = cursor->image.dx;
-+ info->cursor.image.dy = cursor->image.dy;
-+
-+ tmp = cursor->image.dy - info->var.yoffset;
-+ tmp |= (cursor->image.dx - info->var.xoffset) << 12;
-+
-+ *(unsigned int *) CURS_POS_REG = tmp;
-+ }
-
-- case CM_MOVE:
-- case CM_DRAW:
-+ if (cursor->set & FB_CUR_SETSIZE) {
-+ info->cursor.image.height = cursor->image.height;
-+ info->cursor.image.width = cursor->image.width;
-+
-+ /* set the whole cursor to transparent */
-+ for (i = 0; i < 512; i++)
-+ *(unsigned short *) (CURS_PAT_REG + i * 8) = 0;
-+ }
-+
-+ if (cursor->set & FB_CUR_SETCMAP) {
-+ volatile unsigned int *curs_pal_ptr =
-+ (volatile unsigned int *) CURS_PAL_REG;
-+
-+ /* setup cursor */
-+ curs_pal_ptr[0] |= 0x00ffffff;
-+ curs_pal_ptr[2] |= 0x00ffffff;
-+ curs_pal_ptr[4] |= 0x00ffffff;
-+ }
-+
-+ if (cursor->set & FB_CUR_SETSHAPE) {
-+ /*
-+ * switch the last two lines to cursor palette 3
-+ * we assume here, that FONTSIZE_X is 8
-+ */
-+ *(unsigned short *) (CURS_PAT_REG + 14 * 64) = 0xffff;
-+ *(unsigned short *) (CURS_PAT_REG + 15 * 64) = 0xffff;
-+ }
-+
-+ if (info->cursor.enable)
- *(unsigned int *) CTLA_REG &= ~CURS_TOGGLE;
-- *(unsigned int *) CURS_POS_REG =
-- ((x * fontwidth(p)) << 12) | ((y * fontheight(p)) -
-- info->var.yoffset);
-- break;
-- }
- return 0;
- }
-
-@@ -196,10 +231,6 @@ static int g364fb_setcolreg(u_int regno,
- */
- int __init g364fb_init(void)
- {
-- volatile unsigned int *pal_ptr =
-- (volatile unsigned int *) CLR_PAL_REG;
-- volatile unsigned int *curs_pal_ptr =
-- (volatile unsigned int *) CURS_PAL_REG;
- int mem, i, j;
-
- /* TBD: G364 detection */
-@@ -212,23 +243,6 @@ int __init g364fb_init(void)
- (*((volatile unsigned int *) VDISPLAY_REG) & 0x00ffffff) / 2;
- *(volatile unsigned int *) CTLA_REG |= ENABLE_VTG;
-
-- /* setup cursor */
-- curs_pal_ptr[0] |= 0x00ffffff;
-- curs_pal_ptr[2] |= 0x00ffffff;
-- curs_pal_ptr[4] |= 0x00ffffff;
--
-- /*
-- * first set the whole cursor to transparent
-- */
-- for (i = 0; i < 512; i++)
-- *(unsigned short *) (CURS_PAT_REG + i * 8) = 0;
--
-- /*
-- * switch the last two lines to cursor palette 3
-- * we assume here, that FONTSIZE_X is 8
-- */
-- *(unsigned short *) (CURS_PAT_REG + 14 * 64) = 0xffff;
-- *(unsigned short *) (CURS_PAT_REG + 15 * 64) = 0xffff;
- fb_var.xres_virtual = fbvar.xres;
- fb_fix.line_length = (xres / 8) * fb_var.bits_per_pixel;
- fb_fix.smem_start = 0x40000000; /* physical address */
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/video/i2c.c 2003-07-19 17:04:55.000000000 -0700
-@@ -0,0 +1,333 @@
-+/*
-+ * Generic i2c interface for the framebuffer layer
-+ *
-+ * (c) 2003 "Crazy" James Simmons <jsimmons@infradead.org>
-+ * Based on the ALSA i2c interface
-+ * Gerd Knorr <kraxel@cs.tu-berlin.de>
-+ * Jaroslav Kysela <perex@suse.cz>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You 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/init.h>
-+#include <linux/slab.h>
-+#include <linux/string.h>
-+#include <linux/errno.h>
-+#include <linux/fb.h>
-+#include "i2c.h"
-+
-+MODULE_AUTHOR("James Simmons <jsimmons@infradead.org>");
-+MODULE_DESCRIPTION("Generic i2c interface for the Framebuffer layer");
-+MODULE_LICENSE("GPL");
-+
-+static int fb_i2c_bit_sendbytes(fb_i2c_device_t *device, unsigned char *bytes, int count);
-+static int fb_i2c_bit_readbytes(fb_i2c_device_t *device, unsigned char *bytes, int count);
-+static int fb_i2c_bit_probeaddr(fb_i2c_bus_t *bus, unsigned short addr);
-+
-+static fb_i2c_ops_t fb_i2c_bit_ops = {
-+ .sendbytes = fb_i2c_bit_sendbytes,
-+ .readbytes = fb_i2c_bit_readbytes,
-+ .probeaddr = fb_i2c_bit_probeaddr,
-+};
-+
-+static int fb_i2c_bus_free(fb_i2c_bus_t *bus)
-+{
-+ fb_i2c_bus_t *slave;
-+ fb_i2c_device_t *device;
-+
-+ fb_assert(bus != NULL, return -EINVAL);
-+ while (!list_empty(&bus->devices)) {
-+ device = fb_i2c_device(bus->devices.next);
-+ fb_i2c_device_free(device);
-+ }
-+ if (bus->master)
-+ list_del(&bus->buses);
-+ else {
-+ while (!list_empty(&bus->buses)) {
-+ slave = fb_i2c_slave_bus(bus->buses.next);
-+ fb_device_free(bus->card, slave);
-+ }
-+ }
-+ if (bus->private_free)
-+ bus->private_free(bus);
-+ fb_magic_kfree(bus);
-+ return 0;
-+}
-+
-+static int fb_i2c_bus_dev_free(fb_device_t *device)
-+{
-+ fb_i2c_bus_t *bus = fb_magic_cast(fb_i2c_bus_t, device->device_data, return -ENXIO);
-+ return fb_i2c_bus_free(bus);
-+}
-+
-+int fb_i2c_bus_create(fb_card_t *card, const char *name, fb_i2c_bus_t *master, fb_i2c_bus_t **ri2c)
-+{
-+ static fb_device_ops_t ops = {
-+ .dev_free = fb_i2c_bus_dev_free,
-+ };
-+ fb_i2c_bus_t *bus;
-+ int err;
-+
-+ *ri2c = NULL;
-+ bus = (fb_i2c_bus_t *)fb_magic_kcalloc(fb_i2c_bus_t, 0, GFP_KERNEL);
-+ if (bus == NULL)
-+ return -ENOMEM;
-+ spin_lock_init(&bus->lock);
-+ INIT_LIST_HEAD(&bus->devices);
-+ INIT_LIST_HEAD(&bus->buses);
-+ bus->card = card;
-+ bus->ops = &fb_i2c_bit_ops;
-+ if (master) {
-+ list_add_tail(&bus->buses, &master->buses);
-+ bus->master = master;
-+ }
-+ strlcpy(bus->name, name, sizeof(bus->name));
-+ if ((err = fb_device_new(card, SNDRV_DEV_LOWLEVEL, bus, &ops)) < 0) {
-+ fb_i2c_bus_free(bus);
-+ return err;
-+ }
-+ *ri2c = bus;
-+ return 0;
-+}
-+
-+int fb_i2c_device_create(fb_i2c_bus_t *bus, const char *name, unsigned char addr, fb_i2c_device_t **rdevice)
-+{
-+ fb_i2c_device_t *device;
-+
-+ *rdevice = NULL;
-+ fb_assert(bus != NULL, return -EINVAL);
-+ device = (fb_i2c_device_t *)fb_magic_kcalloc(fb_i2c_device_t, 0, GFP_KERNEL);
-+ if (device == NULL)
-+ return -ENOMEM;
-+ device->addr = addr;
-+ strlcpy(device->name, name, sizeof(device->name));
-+ list_add_tail(&device->list, &bus->devices);
-+ device->bus = bus;
-+ *rdevice = device;
-+ return 0;
-+}
-+
-+int fb_i2c_device_free(fb_i2c_device_t *device)
-+{
-+ if (device->bus)
-+ list_del(&device->list);
-+ if (device->private_free)
-+ device->private_free(device);
-+ fb_magic_kfree(device);
-+ return 0;
-+}
-+
-+int fb_i2c_sendbytes(fb_i2c_device_t *device, unsigned char *bytes, int count)
-+{
-+ return device->bus->ops->sendbytes(device, bytes, count);
-+}
-+
-+
-+int fb_i2c_readbytes(fb_i2c_device_t *device, unsigned char *bytes, int count)
-+{
-+ return device->bus->ops->readbytes(device, bytes, count);
-+}
-+
-+int fb_i2c_probeaddr(fb_i2c_bus_t *bus, unsigned short addr)
-+{
-+ return bus->ops->probeaddr(bus, addr);
-+}
-+
-+/*
-+ * bit-operations
-+ */
-+
-+static inline void fb_i2c_bit_hw_start(fb_i2c_bus_t *bus)
-+{
-+ if (bus->hw_ops.bit->start)
-+ bus->hw_ops.bit->start(bus);
-+}
-+
-+static inline void fb_i2c_bit_hw_stop(fb_i2c_bus_t *bus)
-+{
-+ if (bus->hw_ops.bit->stop)
-+ bus->hw_ops.bit->stop(bus);
-+}
-+
-+static void fb_i2c_bit_direction(fb_i2c_bus_t *bus, int clock, int data)
-+{
-+ if (bus->hw_ops.bit->direction)
-+ bus->hw_ops.bit->direction(bus, clock, data);
-+}
-+
-+static void fb_i2c_bit_set(fb_i2c_bus_t *bus, int clock, int data)
-+{
-+ bus->hw_ops.bit->setlines(bus, clock, data);
-+}
-+
-+#if 0
-+static int fb_i2c_bit_clock(fb_i2c_bus_t *bus)
-+{
-+ if (bus->hw_ops.bit->getclock)
-+ return bus->hw_ops.bit->getclock(bus);
-+ return -ENXIO;
-+}
-+#endif
-+
-+static int fb_i2c_bit_data(fb_i2c_bus_t *bus, int ack)
-+{
-+ return bus->hw_ops.bit->getdata(bus, ack);
-+}
-+
-+static void fb_i2c_bit_start(fb_i2c_bus_t *bus)
-+{
-+ fb_i2c_bit_hw_start(bus);
-+ fb_i2c_bit_direction(bus, 1, 1); /* SCL - wr, SDA - wr */
-+ fb_i2c_bit_set(bus, 1, 1);
-+ fb_i2c_bit_set(bus, 1, 0);
-+ fb_i2c_bit_set(bus, 0, 0);
-+}
-+
-+static void fb_i2c_bit_stop(fb_i2c_bus_t *bus)
-+{
-+ fb_i2c_bit_set(bus, 0, 0);
-+ fb_i2c_bit_set(bus, 1, 0);
-+ fb_i2c_bit_set(bus, 1, 1);
-+ fb_i2c_bit_hw_stop(bus);
-+}
-+
-+static void fb_i2c_bit_send(fb_i2c_bus_t *bus, int data)
-+{
-+ fb_i2c_bit_set(bus, 0, data);
-+ fb_i2c_bit_set(bus, 1, data);
-+ fb_i2c_bit_set(bus, 0, data);
-+}
-+
-+static int fb_i2c_bit_ack(fb_i2c_bus_t *bus)
-+{
-+ int ack;
-+
-+ fb_i2c_bit_set(bus, 0, 1);
-+ fb_i2c_bit_set(bus, 1, 1);
-+ fb_i2c_bit_direction(bus, 1, 0); /* SCL - wr, SDA - rd */
-+ ack = fb_i2c_bit_data(bus, 1);
-+ fb_i2c_bit_direction(bus, 1, 1); /* SCL - wr, SDA - wr */
-+ fb_i2c_bit_set(bus, 0, 1);
-+ return ack ? -EIO : 0;
-+}
-+
-+static int fb_i2c_bit_sendbyte(fb_i2c_bus_t *bus, unsigned char data)
-+{
-+ int i, err;
-+
-+ for (i = 7; i >= 0; i--)
-+ fb_i2c_bit_send(bus, !!(data & (1 << i)));
-+ if ((err = fb_i2c_bit_ack(bus)) < 0)
-+ return err;
-+ return 0;
-+}
-+
-+static int fb_i2c_bit_readbyte(fb_i2c_bus_t *bus, int last)
-+{
-+ int i;
-+ unsigned char data = 0;
-+
-+ fb_i2c_bit_set(bus, 0, 1);
-+ fb_i2c_bit_direction(bus, 1, 0); /* SCL - wr, SDA - rd */
-+ for (i = 7; i >= 0; i--) {
-+ fb_i2c_bit_set(bus, 1, 1);
-+ if (fb_i2c_bit_data(bus, 0))
-+ data |= (1 << i);
-+ fb_i2c_bit_set(bus, 0, 1);
-+ }
-+ fb_i2c_bit_direction(bus, 1, 1); /* SCL - wr, SDA - wr */
-+ fb_i2c_bit_send(bus, !!last);
-+ return data;
-+}
-+
-+static int fb_i2c_bit_sendbytes(fb_i2c_device_t *device, unsigned char *bytes, int count)
-+{
-+ fb_i2c_bus_t *bus = device->bus;
-+ int err, res = 0;
-+
-+ if (device->flags & FB_I2C_DEVICE_ADDRTEN)
-+ return -EIO; /* not yet implemented */
-+ fb_i2c_bit_start(bus);
-+ if ((err = fb_i2c_bit_sendbyte(bus, device->addr << 1)) < 0) {
-+ fb_i2c_bit_hw_stop(bus);
-+ return err;
-+ }
-+ while (count-- > 0) {
-+ if ((err = fb_i2c_bit_sendbyte(bus, *bytes++)) < 0) {
-+ fb_i2c_bit_hw_stop(bus);
-+ return err;
-+ }
-+ res++;
-+ }
-+ fb_i2c_bit_stop(bus);
-+ return res;
-+}
-+
-+static int fb_i2c_bit_readbytes(fb_i2c_device_t *device, unsigned char *bytes, int count)
-+{
-+ fb_i2c_bus_t *bus = device->bus;
-+ int err, res = 0;
-+
-+ if (device->flags & FB_I2C_DEVICE_ADDRTEN)
-+ return -EIO; /* not yet implemented */
-+ fb_i2c_bit_start(bus);
-+ if ((err = fb_i2c_bit_sendbyte(bus, (device->addr << 1) | 1)) < 0) {
-+ fb_i2c_bit_hw_stop(bus);
-+ return err;
-+ }
-+ while (count-- > 0) {
-+ if ((err = fb_i2c_bit_readbyte(bus, count == 0)) < 0) {
-+ fb_i2c_bit_hw_stop(bus);
-+ return err;
-+ }
-+ *bytes++ = (unsigned char)err;
-+ res++;
-+ }
-+ fb_i2c_bit_stop(bus);
-+ return res;
-+}
-+
-+static int fb_i2c_bit_probeaddr(fb_i2c_bus_t *bus, unsigned short addr)
-+{
-+ int err;
-+
-+ if (addr & 0x8000) /* 10-bit address */
-+ return -EIO; /* not yet implemented */
-+ if (addr & 0x7f80) /* invalid address */
-+ return -EINVAL;
-+ fb_i2c_bit_start(bus);
-+ err = fb_i2c_bit_sendbyte(bus, addr << 1);
-+ fb_i2c_bit_stop(bus);
-+ return err;
-+}
-+
-+EXPORT_SYMBOL(fb_i2c_bus_create);
-+EXPORT_SYMBOL(fb_i2c_device_create);
-+EXPORT_SYMBOL(fb_i2c_device_free);
-+EXPORT_SYMBOL(fb_i2c_sendbytes);
-+EXPORT_SYMBOL(fb_i2c_readbytes);
-+EXPORT_SYMBOL(fb_i2c_probeaddr);
-+
-+static int __init alsa_i2c_init(void)
-+{
-+ return 0;
-+}
-+
-+static void __exit alsa_i2c_exit(void)
-+{
-+}
-+
-+module_init(alsa_i2c_init)
-+module_exit(alsa_i2c_exit)
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/video/i2c.h 2003-07-19 17:04:55.000000000 -0700
-@@ -0,0 +1,102 @@
-+#ifndef __FB_I2C_H
-+#define __FB_I2C_H
-+
-+/*
-+ *
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You 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
-+ *
-+ *
-+ */
-+
-+typedef struct _fb_i2c_device fb_i2c_device_t;
-+typedef struct _fb_i2c_bus fb_i2c_bus_t;
-+
-+#define FB_I2C_DEVICE_ADDRTEN (1<<0) /* 10-bit I2C address */
-+
-+struct _fb_i2c_device {
-+ struct list_head list;
-+ fb_i2c_bus_t *bus; /* I2C bus */
-+ char name[32]; /* some useful device name */
-+ unsigned short flags; /* device flags */
-+ unsigned short addr; /* device address (might be 10-bit) */
-+ unsigned long private_value;
-+ void *private_data;
-+ void (*private_free)(fb_i2c_device_t *device);
-+};
-+
-+#define fb_i2c_device(n) list_entry(n, fb_i2c_device_t, list)
-+
-+typedef struct _fb_i2c_bit_ops {
-+ void (*start)(fb_i2c_bus_t *bus); /* transfer start */
-+ void (*stop)(fb_i2c_bus_t *bus); /* transfer stop */
-+ void (*direction)(fb_i2c_bus_t *bus, int clock, int data); /* set line direction (0 = write, 1 = read) */
-+ void (*setlines)(fb_i2c_bus_t *bus, int clock, int data);
-+ int (*getclock)(fb_i2c_bus_t *bus);
-+ int (*getdata)(fb_i2c_bus_t *bus, int ack);
-+} fb_i2c_bit_ops_t;
-+
-+typedef struct _fb_i2c_ops {
-+ int (*sendbytes)(fb_i2c_device_t *device, unsigned char *bytes, int count);
-+ int (*readbytes)(fb_i2c_device_t *device, unsigned char *bytes, int count);
-+ int (*probeaddr)(fb_i2c_bus_t *bus, unsigned short addr);
-+} fb_i2c_ops_t;
-+
-+struct _fb_i2c_bus {
-+ fb_card_t *card; /* card which I2C belongs to */
-+ char name[32]; /* some useful label */
-+
-+ spinlock_t lock;
-+
-+ fb_i2c_bus_t *master; /* master bus when SCK/SCL is shared */
-+ struct list_head buses; /* master: slave buses sharing SCK/SCL, slave: link list */
-+
-+ struct list_head devices; /* attached devices to this bus */
-+
-+ union {
-+ fb_i2c_bit_ops_t *bit;
-+ void *ops;
-+ } hw_ops; /* lowlevel operations */
-+ fb_i2c_ops_t *ops; /* midlevel operations */
-+
-+ unsigned long private_value;
-+ void *private_data;
-+ void (*private_free)(fb_i2c_bus_t *bus);
-+};
-+
-+#define fb_i2c_slave_bus(n) list_entry(n, fb_i2c_bus_t, buses)
-+
-+int fb_i2c_bus_create(fb_card_t *card, const char *name, fb_i2c_bus_t *master, fb_i2c_bus_t **ri2c);
-+int fb_i2c_device_create(fb_i2c_bus_t *bus, const char *name, unsigned char addr, fb_i2c_device_t **rdevice);
-+int fb_i2c_device_free(fb_i2c_device_t *device);
-+
-+static inline void fb_i2c_lock(fb_i2c_bus_t *bus) {
-+ if (bus->master)
-+ spin_lock(&bus->master->lock);
-+ else
-+ spin_lock(&bus->lock);
-+}
-+static inline void fb_i2c_unlock(fb_i2c_bus_t *bus) {
-+ if (bus->master)
-+ spin_unlock(&bus->master->lock);
-+ else
-+ spin_unlock(&bus->lock);
-+}
-+
-+int fb_i2c_sendbytes(fb_i2c_device_t *device, unsigned char *bytes, int count);
-+int fb_i2c_readbytes(fb_i2c_device_t *device, unsigned char *bytes, int count);
-+int fb_i2c_probeaddr(fb_i2c_bus_t *bus, unsigned short addr);
-+
-+#endif /* __FB_I2C_H */
---- linux-2.6.0-test1/drivers/video/Kconfig 2003-06-14 12:17:56.000000000 -0700
-+++ 25/drivers/video/Kconfig 2003-07-19 17:04:55.000000000 -0700
-@@ -423,35 +423,15 @@ config FB_PVR2_DEBUG
- messages. Most people will want to say N here. If unsure, you will
- also want to say N.
-
--config FB_E1355
-+config FB_EPSON1355
- bool "Epson 1355 framebuffer support"
-- depends on FB && SUPERH
-+ depends on FB && (SUPERH || ARCH_CEIVA)
- help
- Build in support for the SED1355 Epson Research Embedded RAMDAC
- LCD/CRT Controller (since redesignated as the S1D13505) as a
- framebuffer. Product specs at
- <http://www.erd.epson.com/vdc/html/products.htm>.
-
--config E1355_REG_BASE
-- hex "Register Base Address"
-- depends on FB_E1355
-- default "a8000000"
-- help
-- Epson SED1355/S1D13505 LCD/CRT controller register base address.
-- See the manuals at
-- <http://www.erd.epson.com/vdc/html/contents/S1D13505.htm> for
-- discussion.
--
--config E1355_FB_BASE
-- hex "Framebuffer Base Address"
-- depends on FB_E1355
-- default "a8200000"
-- help
-- Epson SED1355/S1D13505 LCD/CRT controller memory base address. See
-- the manuals at
-- <http://www.erd.epson.com/vdc/html/contents/S1D13505.htm> for
-- discussion.
--
- config FB_RIVA
- tristate "nVidia Riva support"
- depends on FB && PCI
-@@ -725,23 +705,43 @@ config FB_SIS
- tristate "SIS acceleration"
- depends on FB && PCI
- help
-- This is the frame buffer device driver for the SiS 630 and 640 Super
-- Socket 7 UMA cards. Specs available at <http://www.sis.com.tw/>.
-+ This is the frame buffer device driver for SiS VGA chipsets. It
-+ supports the SiS 300, 540, 630, 730, 315, 550, 650, M650, 651,
-+ 740 and possibly (because untested) the Xabre (SiS330).
-+
-+ Specs available at <http://www.sis.com.tw/>.
-+
-+ See <http://www.winischhofer.net/linuxsisvga.shtml> for
-+ documentation and updates.
-+
-+ The driver is also available as a module ( = code which can be
-+ inserted and removed from the running kernel whenever you want). The
-+ module will be called sisfb. If you want to compile it as a
-+ module, say M here and read Documentation/modules.txt.
-
- config FB_SIS_300
-- bool "SIS 630/540/730 support"
-+ bool "SIS 300/630/540/730 support"
- depends on FB_SIS
- help
-- This is the frame buffer device driver for the SiS 630 and related
-- Super Socket 7 UMA cards. Specs available at
-- <http://www.sis.com.tw/>.
-+ This is the frame buffer device driver for the SiS 300, 540, 630
-+ and 730 VGA controllers.
-+
-+ Specs available at <http://www.sis.com.tw/>.
-+
-+ See <http://www.winischhofer.net/linuxsisvga.shtml> for
-+ documentation and updates.
-
- config FB_SIS_315
-- bool "SIS 315H/315 support"
-+ bool "SIS 315/550/65x/740/330 support"
- depends on FB_SIS
- help
-- This is the frame buffer device driver for the SiS 315 graphics
-- card. Specs available at <http://www.sis.com.tw/>.
-+ This is the frame buffer device driver for the SiS 315, 550, 65x
-+ (650, 651, M650), 740 and Xabre (330) VGA controllers.
-+
-+ Specs available at <http://www.sis.com.tw/>.
-+
-+ See <http://www.winischhofer.net/linuxsisvga.shtml> for
-+ documentation and updates.
-
- config FB_NEOMAGIC
- tristate "NeoMagic display support"
---- linux-2.6.0-test1/drivers/video/logo/logo.c 2003-06-14 12:18:23.000000000 -0700
-+++ 25/drivers/video/logo/logo.c 2003-07-19 17:04:55.000000000 -0700
-@@ -32,8 +32,7 @@ extern const struct linux_logo logo_supe
- extern const struct linux_logo logo_superh_vga16;
- extern const struct linux_logo logo_superh_clut224;
-
--
--const struct linux_logo *fb_find_logo(int depth)
-+const struct linux_logo *find_logo(int depth)
- {
- const struct linux_logo *logo = 0;
-
-@@ -66,7 +65,7 @@ const struct linux_logo *fb_find_logo(in
- #endif
- #ifdef CONFIG_LOGO_DEC_CLUT224
- /* DEC Linux logo on MIPS/MIPS64 */
-- if (mips_machgroup == MACH_GROUP_SGI)
-+ if (mips_machgroup == MACH_GROUP_DEC)
- logo = &logo_dec_clut224;
- #endif
- #ifdef CONFIG_LOGO_MAC_CLUT224
---- linux-2.6.0-test1/drivers/video/macfb.c 2003-06-14 12:17:58.000000000 -0700
-+++ 25/drivers/video/macfb.c 2003-07-19 17:04:55.000000000 -0700
-@@ -233,11 +233,11 @@ static int dafb_setpalette (unsigned int
-
- /* Loop until we get to the register we want */
- for (i = 0; i < regno; i++) {
-- nubus_writeb(info->cmap[i].red >> 8, &dafb_cmap_regs->lut);
-+ nubus_writeb(info->cmap.red[i] >> 8, &dafb_cmap_regs->lut);
- nop();
-- nubus_writeb(info->cmap[i].green >> 8, &dafb_cmap_regs->lut);
-+ nubus_writeb(info->cmap.green[i] >> 8, &dafb_cmap_regs->lut);
- nop();
-- nubus_writeb(info->cmap[i].blue >> 8, &dafb_cmap_regs->lut);
-+ nubus_writeb(info->cmap.blue[i] >> 8, &dafb_cmap_regs->lut);
- nop();
- }
- }
-@@ -528,10 +528,10 @@ static int macfb_setcolreg(unsigned regn
- * != 0 for invalid regno.
- */
-
-- if (regno >= info->cmap.len)
-+ if (regno >= fb_info->cmap.len)
- return 1;
-
-- switch (info->var.bits_per_pixel) {
-+ switch (fb_info->var.bits_per_pixel) {
- case 1:
- /* We shouldn't get here */
- break;
-@@ -539,21 +539,21 @@ static int macfb_setcolreg(unsigned regn
- case 4:
- case 8:
- if (macfb_setpalette)
-- macfb_setpalette(regno, red, green, blue, info);
-+ macfb_setpalette(regno, red, green, blue, fb_info);
- else
- return 1;
- break;
- case 16:
-- if (info->var.red.offset == 10) {
-+ if (fb_info->var.red.offset == 10) {
- /* 1:5:5:5 */
-- ((u32*) (info->pseudo_palette))[regno] =
-+ ((u32*) (fb_info->pseudo_palette))[regno] =
- ((red & 0xf800) >> 1) |
- ((green & 0xf800) >> 6) |
- ((blue & 0xf800) >> 11) |
- ((transp != 0) << 15);
- } else {
- /* 0:5:6:5 */
-- ((u32*) (info->pseudo_palette))[regno] =
-+ ((u32*) (fb_info->pseudo_palette))[regno] =
- ((red & 0xf800) ) |
- ((green & 0xfc00) >> 5) |
- ((blue & 0xf800) >> 11);
-@@ -565,19 +565,19 @@ static int macfb_setcolreg(unsigned regn
- red >>= 8;
- green >>= 8;
- blue >>= 8;
-- ((u32 *)(info->pseudo_palette))[regno] =
-- (red << info->var.red.offset) |
-- (green << info->var.green.offset) |
-- (blue << info->var.blue.offset);
-+ ((u32 *)(fb_info->pseudo_palette))[regno] =
-+ (red << fb_info->var.red.offset) |
-+ (green << fb_info->var.green.offset) |
-+ (blue << fb_info->var.blue.offset);
- break;
- case 32:
- red >>= 8;
- green >>= 8;
- blue >>= 8;
-- ((u32 *)(info->pseudo_palette))[regno] =
-- (red << info->var.red.offset) |
-- (green << info->var.green.offset) |
-- (blue << info->var.blue.offset);
-+ ((u32 *)(fb_info->pseudo_palette))[regno] =
-+ (red << fb_info->var.red.offset) |
-+ (green << fb_info->var.green.offset) |
-+ (blue << fb_info->var.blue.offset);
- break;
- }
- return 0;
---- linux-2.6.0-test1/drivers/video/Makefile 2003-06-14 12:17:58.000000000 -0700
-+++ 25/drivers/video/Makefile 2003-07-19 17:03:50.000000000 -0700
-@@ -69,7 +69,7 @@ obj-$(CONFIG_FB_SA1100) += sa1
- obj-$(CONFIG_FB_VIRTUAL) += vfb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o
- obj-$(CONFIG_FB_HIT) += hitfb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o
- obj-$(CONFIG_FB_E1355) += epson1355fb.o
--obj-$(CONFIG_FB_PVR2) += pvr2fb.o
-+obj-$(CONFIG_FB_PVR2) += pvr2fb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o
- obj-$(CONFIG_FB_VOODOO1) += sstfb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o
-
- obj-$(CONFIG_FB_FFB) += ffb.o sbuslib.o cfbimgblt.o cfbcopyarea.o
---- linux-2.6.0-test1/drivers/video/neofb.c 2003-06-14 12:18:24.000000000 -0700
-+++ 25/drivers/video/neofb.c 2003-07-19 17:04:55.000000000 -0700
-@@ -81,9 +81,10 @@ extern int tosh_smm(SMMRegisters *regs);
- #include <asm/mtrr.h>
- #endif
-
-+#include <video/vga.h>
- #include <video/neomagic.h>
-
--#define NEOFB_VERSION "0.4.1"
-+#define NEOFB_VERSION "0.4.2"
-
- /* --------------------------------------------------------------------- */
-
-@@ -370,37 +371,55 @@ static int vgaHWInit(const struct fb_var
- static void vgaHWLock(void)
- {
- /* Protect CRTC[0-7] */
-- VGAwCR(0x11, VGArCR(0x11) | 0x80);
-+ vga_wcrt(NULL, 0x11, vga_rcrt(NULL, 0x11) | 0x80);
- }
-
- static void vgaHWUnlock(void)
- {
- /* Unprotect CRTC[0-7] */
-- VGAwCR(0x11, VGArCR(0x11) & ~0x80);
-+ vga_wcrt(NULL, 0x11, vga_rcrt(NULL, 0x11) & ~0x80);
- }
-
- static void neoLock(void)
- {
-- VGAwGR(0x09, 0x00);
-+ vga_wgfx(NULL, 0x09, 0x00);
- vgaHWLock();
- }
-
- static void neoUnlock(void)
- {
- vgaHWUnlock();
-- VGAwGR(0x09, 0x26);
-+ vga_wgfx(NULL, 0x09, 0x26);
- }
-
- /*
-- * vgaHWSeqReset
-- * perform a sequencer reset.
-+ * VGA Palette management
- */
--void vgaHWSeqReset(int start)
-+static int paletteEnabled = 0;
-+
-+inline void VGAenablePalette(void)
-+{
-+ vga_r(NULL, VGA_IS1_RC);
-+ vga_w(NULL, VGA_ATT_W, 0x00);
-+ paletteEnabled = 1;
-+}
-+
-+inline void VGAdisablePalette(void)
- {
-- if (start)
-- VGAwSEQ(0x00, 0x01); /* Synchronous Reset */
-+ vga_r(NULL, VGA_IS1_RC);
-+ vga_w(NULL, VGA_ATT_W, 0x20);
-+ paletteEnabled = 0;
-+}
-+
-+inline void VGAwATTR(u8 index, u8 value)
-+{
-+ if (paletteEnabled)
-+ index &= ~0x20;
- else
-- VGAwSEQ(0x00, 0x03); /* End Reset */
-+ index |= 0x20;
-+
-+ vga_r(NULL, VGA_IS1_RC);
-+ vga_wattr(NULL, index, value);
- }
-
- void vgaHWProtect(int on)
-@@ -411,21 +430,18 @@ void vgaHWProtect(int on)
- /*
- * Turn off screen and disable sequencer.
- */
-- tmp = VGArSEQ(0x01);
--
-- vgaHWSeqReset(1); /* start synchronous reset */
-- VGAwSEQ(0x01, tmp | 0x20); /* disable the display */
-+ tmp = vga_rseq(NULL, 0x01);
-+ vga_wseq(NULL, 0x00, 0x01); /* Synchronous Reset */
-+ vga_wseq(NULL, 0x01, tmp | 0x20); /* disable the display */
-
- VGAenablePalette();
- } else {
- /*
- * Reenable sequencer, then turn on screen.
- */
--
-- tmp = VGArSEQ(0x01);
--
-- VGAwSEQ(0x01, tmp & ~0x20); /* reenable display */
-- vgaHWSeqReset(0); /* clear synchronousreset */
-+ tmp = vga_rseq(NULL, 0x01);
-+ vga_wseq(NULL, 0x01, tmp & ~0x20); /* reenable display */
-+ vga_wseq(NULL, 0x00, 0x03); /* clear synchronousreset */
-
- VGAdisablePalette();
- }
-@@ -436,19 +452,19 @@ static void vgaHWRestore(const struct fb
- {
- int i;
-
-- VGAwMISC(par->MiscOutReg);
-+ vga_w(NULL, VGA_MIS_W, par->MiscOutReg);
-
- for (i = 1; i < 5; i++)
-- VGAwSEQ(i, par->Sequencer[i]);
-+ vga_wseq(NULL, i, par->Sequencer[i]);
-
- /* Ensure CRTC registers 0-7 are unlocked by clearing bit 7 or CRTC[17] */
-- VGAwCR(17, par->CRTC[17] & ~0x80);
-+ vga_wcrt(NULL, 17, par->CRTC[17] & ~0x80);
-
- for (i = 0; i < 25; i++)
-- VGAwCR(i, par->CRTC[i]);
-+ vga_wcrt(NULL, i, par->CRTC[i]);
-
- for (i = 0; i < 9; i++)
-- VGAwGR(i, par->Graphics[i]);
-+ vga_wgfx(NULL, i, par->Graphics[i]);
-
- VGAenablePalette();
-
-@@ -981,13 +997,13 @@ static int neofb_set_par(struct fb_info
- }
-
- /* alread unlocked above */
-- /* BOGUS VGAwGR (0x09, 0x26); */
-+ /* BOGUS vga_wgfx(NULL, 0x09, 0x26); */
-
- /* don't know what this is, but it's 0 from bootup anyway */
-- VGAwGR(0x15, 0x00);
-+ vga_wgfx(NULL, 0x15, 0x00);
-
- /* was set to 0x01 by my bios in text and vesa modes */
-- VGAwGR(0x0A, par->GeneralLockReg);
-+ vga_wgfx(NULL, 0x0A, par->GeneralLockReg);
-
- /*
- * The color mode needs to be set before calling vgaHWRestore
-@@ -996,7 +1012,7 @@ static int neofb_set_par(struct fb_info
- * NOTE: Make sure we don't change bits make sure we don't change
- * any reserved bits.
- */
-- temp = VGArGR(0x90);
-+ temp = vga_rgfx(NULL, 0x90);
- switch (info->fix.accel) {
- case FB_ACCEL_NEOMAGIC_NM2070:
- temp &= 0xF0; /* Save bits 7:4 */
-@@ -1015,7 +1031,7 @@ static int neofb_set_par(struct fb_info
- break;
- }
-
-- VGAwGR(0x90, temp);
-+ vga_wgfx(NULL, 0x90, temp);
-
- /*
- * In some rare cases a lockup might occur if we don't delay
-@@ -1027,9 +1043,9 @@ static int neofb_set_par(struct fb_info
- * Disable horizontal and vertical graphics and text expansions so
- * that vgaHWRestore works properly.
- */
-- temp = VGArGR(0x25);
-+ temp = vga_rgfx(NULL, 0x25);
- temp &= 0x39;
-- VGAwGR(0x25, temp);
-+ vga_wgfx(NULL, 0x25, temp);
-
- /*
- * Sleep for 200ms to make sure that the two operations above have
-@@ -1041,19 +1057,18 @@ static int neofb_set_par(struct fb_info
- * This function handles restoring the generic VGA registers. */
- vgaHWRestore(info, par);
-
--
-- VGAwGR(0x0E, par->ExtCRTDispAddr);
-- VGAwGR(0x0F, par->ExtCRTOffset);
-- temp = VGArGR(0x10);
-+ vga_wgfx(NULL, 0x0E, par->ExtCRTDispAddr);
-+ vga_wgfx(NULL, 0x0F, par->ExtCRTOffset);
-+ temp = vga_rgfx(NULL, 0x10);
- temp &= 0x0F; /* Save bits 3:0 */
- temp |= (par->SysIfaceCntl1 & ~0x0F); /* VESA Bios sets bit 1! */
-- VGAwGR(0x10, temp);
-+ vga_wgfx(NULL, 0x10, temp);
-
-- VGAwGR(0x11, par->SysIfaceCntl2);
-- VGAwGR(0x15, 0 /*par->SingleAddrPage */ );
-- VGAwGR(0x16, 0 /*par->DualAddrPage */ );
-+ vga_wgfx(NULL, 0x11, par->SysIfaceCntl2);
-+ vga_wgfx(NULL, 0x15, 0 /*par->SingleAddrPage */ );
-+ vga_wgfx(NULL, 0x16, 0 /*par->DualAddrPage */ );
-
-- temp = VGArGR(0x20);
-+ temp = vga_rgfx(NULL, 0x20);
- switch (info->fix.accel) {
- case FB_ACCEL_NEOMAGIC_NM2070:
- temp &= 0xFC; /* Save bits 7:2 */
-@@ -1074,73 +1089,72 @@ static int neofb_set_par(struct fb_info
- temp |= (par->PanelDispCntlReg1 & ~0x98);
- break;
- }
-- VGAwGR(0x20, temp);
-+ vga_wgfx(NULL, 0x20, temp);
-
-- temp = VGArGR(0x25);
-+ temp = vga_rgfx(NULL, 0x25);
- temp &= 0x38; /* Save bits 5:3 */
- temp |= (par->PanelDispCntlReg2 & ~0x38);
-- VGAwGR(0x25, temp);
-+ vga_wgfx(NULL, 0x25, temp);
-
- if (info->fix.accel != FB_ACCEL_NEOMAGIC_NM2070) {
-- temp = VGArGR(0x30);
-+ temp = vga_rgfx(NULL, 0x30);
- temp &= 0xEF; /* Save bits 7:5 and bits 3:0 */
- temp |= (par->PanelDispCntlReg3 & ~0xEF);
-- VGAwGR(0x30, temp);
-+ vga_wgfx(NULL, 0x30, temp);
- }
-
-- VGAwGR(0x28, par->PanelVertCenterReg1);
-- VGAwGR(0x29, par->PanelVertCenterReg2);
-- VGAwGR(0x2a, par->PanelVertCenterReg3);
-+ vga_wgfx(NULL, 0x28, par->PanelVertCenterReg1);
-+ vga_wgfx(NULL, 0x29, par->PanelVertCenterReg2);
-+ vga_wgfx(NULL, 0x2a, par->PanelVertCenterReg3);
-
- if (info->fix.accel != FB_ACCEL_NEOMAGIC_NM2070) {
-- VGAwGR(0x32, par->PanelVertCenterReg4);
-- VGAwGR(0x33, par->PanelHorizCenterReg1);
-- VGAwGR(0x34, par->PanelHorizCenterReg2);
-- VGAwGR(0x35, par->PanelHorizCenterReg3);
-+ vga_wgfx(NULL, 0x32, par->PanelVertCenterReg4);
-+ vga_wgfx(NULL, 0x33, par->PanelHorizCenterReg1);
-+ vga_wgfx(NULL, 0x34, par->PanelHorizCenterReg2);
-+ vga_wgfx(NULL, 0x35, par->PanelHorizCenterReg3);
- }
-
- if (info->fix.accel == FB_ACCEL_NEOMAGIC_NM2160)
-- VGAwGR(0x36, par->PanelHorizCenterReg4);
-+ vga_wgfx(NULL, 0x36, par->PanelHorizCenterReg4);
-
- if (info->fix.accel == FB_ACCEL_NEOMAGIC_NM2200 ||
- info->fix.accel == FB_ACCEL_NEOMAGIC_NM2230 ||
- info->fix.accel == FB_ACCEL_NEOMAGIC_NM2360 ||
- info->fix.accel == FB_ACCEL_NEOMAGIC_NM2380) {
-- VGAwGR(0x36, par->PanelHorizCenterReg4);
-- VGAwGR(0x37, par->PanelVertCenterReg5);
-- VGAwGR(0x38, par->PanelHorizCenterReg5);
-+ vga_wgfx(NULL, 0x36, par->PanelHorizCenterReg4);
-+ vga_wgfx(NULL, 0x37, par->PanelVertCenterReg5);
-+ vga_wgfx(NULL, 0x38, par->PanelHorizCenterReg5);
-
- clock_hi = 1;
- }
-
- /* Program VCLK3 if needed. */
-- if (par->ProgramVCLK && ((VGArGR(0x9B) != par->VCLK3NumeratorLow)
-- || (VGArGR(0x9F) != par->VCLK3Denominator)
-- || (clock_hi && ((VGArGR(0x8F) & ~0x0f)
-- != (par->
-- VCLK3NumeratorHigh &
-+ if (par->ProgramVCLK && ((vga_rgfx(NULL, 0x9B) != par->VCLK3NumeratorLow)
-+ || (vga_rgfx(NULL, 0x9F) != par->VCLK3Denominator)
-+ || (clock_hi && ((vga_rgfx(NULL, 0x8F) & ~0x0f)
-+ != (par->VCLK3NumeratorHigh &
- ~0x0F))))) {
-- VGAwGR(0x9B, par->VCLK3NumeratorLow);
-+ vga_wgfx(NULL, 0x9B, par->VCLK3NumeratorLow);
- if (clock_hi) {
-- temp = VGArGR(0x8F);
-+ temp = vga_rgfx(NULL, 0x8F);
- temp &= 0x0F; /* Save bits 3:0 */
- temp |= (par->VCLK3NumeratorHigh & ~0x0F);
-- VGAwGR(0x8F, temp);
-+ vga_wgfx(NULL, 0x8F, temp);
- }
-- VGAwGR(0x9F, par->VCLK3Denominator);
-+ vga_wgfx(NULL, 0x9F, par->VCLK3Denominator);
- }
-
- if (par->biosMode)
-- VGAwCR(0x23, par->biosMode);
-+ vga_wcrt(NULL, 0x23, par->biosMode);
-
-- VGAwGR(0x93, 0xc0); /* Gives 5x faster framebuffer writes !!! */
-+ vga_wgfx(NULL, 0x93, 0xc0); /* Gives 5x faster framebuffer writes !!! */
-
- /* Program vertical extension register */
- if (info->fix.accel == FB_ACCEL_NEOMAGIC_NM2200 ||
- info->fix.accel == FB_ACCEL_NEOMAGIC_NM2230 ||
- info->fix.accel == FB_ACCEL_NEOMAGIC_NM2360 ||
- info->fix.accel == FB_ACCEL_NEOMAGIC_NM2380) {
-- VGAwCR(0x70, par->VerticalExt);
-+ vga_wcrt(NULL, 0x70, par->VerticalExt);
- }
-
- vgaHWProtect(0); /* Turn on screen */
-@@ -1180,16 +1194,16 @@ static void neofb_update_start(struct fb
- /*
- * These are the generic starting address registers.
- */
-- VGAwCR(0x0C, (Base & 0x00FF00) >> 8);
-- VGAwCR(0x0D, (Base & 0x00FF));
-+ vga_wcrt(NULL, 0x0C, (Base & 0x00FF00) >> 8);
-+ vga_wcrt(NULL, 0x0D, (Base & 0x00FF));
-
- /*
- * Make sure we don't clobber some other bits that might already
- * have been set. NOTE: NM2200 has a writable bit 3, but it shouldn't
- * be needed.
- */
-- oldExtCRTDispAddr = VGArGR(0x0E);
-- VGAwGR(0x0E, (((Base >> 16) & 0x0f) | (oldExtCRTDispAddr & 0xf0)));
-+ oldExtCRTDispAddr = vga_rgfx(NULL, 0x0E);
-+ vga_wgfx(NULL, 0x0E, (((Base >> 16) & 0x0f) | (oldExtCRTDispAddr & 0xf0)));
-
- neoLock();
- }
-@@ -1353,7 +1367,7 @@ neo2200_fillrect(struct fb_info *info, c
- }
-
- par->neo2200->dstStart =
-- dst * ((info->var.bits_per_pixel + 7) / 8);
-+ dst * ((info->var.bits_per_pixel + 7) >> 3);
- par->neo2200->xyExt =
- (rect->height << 16) | (rect->width & 0xffff);
- }
-@@ -1361,26 +1375,22 @@ neo2200_fillrect(struct fb_info *info, c
- static void
- neo2200_copyarea(struct fb_info *info, const struct fb_copyarea *area)
- {
-- struct neofb_par *par = (struct neofb_par *) info->par;
- u32 sx = area->sx, sy = area->sy, dx = area->dx, dy = area->dy;
-+ struct neofb_par *par = (struct neofb_par *) info->par;
- u_long src, dst, bltCntl;
--
-+
- bltCntl = NEO_BC3_FIFO_EN | NEO_BC3_SKIP_MAPPING | 0x0C0000;
-
-- if (sy < dy) {
-+ if ((dy > sy) || ((dy == sy) && (dx > sx))) {
-+ /* Start with the lower right corner */
- sy += (area->height - 1);
- dy += (area->height - 1);
--
-- bltCntl |= NEO_BC0_DST_Y_DEC | NEO_BC0_SRC_Y_DEC;
-- }
--
-- if (area->sx < area->dx) {
- sx += (area->width - 1);
-- dx += (area->width - 1);
--
-- bltCntl |= NEO_BC0_X_DEC;
-- }
--
-+ dx += (area->width - 1);
-+
-+ bltCntl |= NEO_BC0_X_DEC | NEO_BC0_DST_Y_DEC | NEO_BC0_SRC_Y_DEC;
-+ }
-+
- src = sx * (info->var.bits_per_pixel >> 3) + sy*info->fix.line_length;
- dst = dx * (info->var.bits_per_pixel >> 3) + dy*info->fix.line_length;
-
-@@ -1725,16 +1735,16 @@ static int __devinit neo_init_hw(struct
- printk(KERN_DEBUG "--- Neo extended register dump ---\n");
- for (w = 0; w < 0x85; w++)
- printk(KERN_DEBUG "CR %p: %p\n", (void *) w,
-- (void *) VGArCR(w));
-+ (void *) vga_rcrt(NULL, w);
- for (w = 0; w < 0xC7; w++)
- printk(KERN_DEBUG "GR %p: %p\n", (void *) w,
-- (void *) VGArGR(w));
-+ (void *) vga_rgfx(NULL, w));
- #endif
-
- /* Determine the panel type */
-- VGAwGR(0x09, 0x26);
-- type = VGArGR(0x21);
-- display = VGArGR(0x20);
-+ vga_wgfx(NULL, 0x09, 0x26);
-+ type = vga_rgfx(NULL, 0x21);
-+ display = vga_rgfx(NULL, 0x20);
- if (!par->internal_display && !par->external_display) {
- par->internal_display = display & 2 || !(display & 3) ? 1 : 0;
- par->external_display = display & 1;
-@@ -1744,8 +1754,8 @@ static int __devinit neo_init_hw(struct
- }
-
- /* Determine panel width -- used in NeoValidMode. */
-- w = VGArGR(0x20);
-- VGAwGR(0x09, 0x00);
-+ w = vga_rgfx(NULL, 0x20);
-+ vga_wgfx(NULL, 0x09, 0x00);
- switch ((w & 0x18) >> 3) {
- case 0x00:
- par->NeoPanelWidth = 640;
---- linux-2.6.0-test1/drivers/video/platinumfb.c 2003-06-14 12:18:07.000000000 -0700
-+++ 25/drivers/video/platinumfb.c 2003-07-19 17:04:55.000000000 -0700
-@@ -104,8 +104,8 @@ static int platinum_var_to_par(const str
- * Interface used by the world
- */
-
--int platinum_init(void);
--int platinum_setup(char*);
-+int platinumfb_init(void);
-+int platinumfb_setup(char*);
-
- static struct fb_ops platinumfb_ops = {
- .owner = THIS_MODULE,
-@@ -399,7 +399,7 @@ try_again:
- /* Apply default var */
- p->info.var = var;
- var.activate = FB_ACTIVATE_NOW;
-- rc = fb_set_var(&var, &p->info);
-+ rc = fb_set_var(&p->info, &var);
- if (rc && (default_vmode != VMODE_640_480_60 || default_cmode != CMODE_8))
- goto try_again;
-
-@@ -413,7 +413,7 @@ try_again:
- return 1;
- }
-
--int __init platinum_init(void)
-+int __init platinumfb_init(void)
- {
- struct device_node *dp;
-
-@@ -597,7 +597,7 @@ static int platinum_par_to_var(struct fb
- /*
- * Parse user speficied options (`video=platinumfb:')
- */
--int __init platinum_setup(char *options)
-+int __init platinumfb_setup(char *options)
- {
- char *this_opt;
-
---- linux-2.6.0-test1/drivers/video/pvr2fb.c 2003-06-14 12:17:57.000000000 -0700
-+++ 25/drivers/video/pvr2fb.c 2003-07-19 17:03:50.000000000 -0700
-@@ -4,7 +4,7 @@
- * Dreamcast.
- *
- * Copyright (c) 2001 M. R. Brown <mrbrown@0xd6.org>
-- * Copyright (c) 2001 Paul Mundt <lethal@chaoticdreams.org>
-+ * Copyright (c) 2001, 2002, 2003 Paul Mundt <lethal@linux-sh.org>
- *
- * This file is part of the LinuxDC project (linuxdc.sourceforge.net).
- *
-@@ -12,14 +12,15 @@
-
- /*
- * This driver is mostly based on the excellent amifb and vfb sources. It uses
-- * an odd scheme for converting hardware values to/from framebuffer values, here are
-- * some hacked-up formulas:
-+ * an odd scheme for converting hardware values to/from framebuffer values,
-+ * here are some hacked-up formulas:
- *
-- * The Dreamcast has screen offsets from each side of its four borders and the start
-- * offsets of the display window. I used these values to calculate 'pseudo' values
-- * (think of them as placeholders) for the fb video mode, so that when it came time
-- * to convert these values back into their hardware values, I could just add mode-
-- * specific offsets to get the correct mode settings:
-+ * The Dreamcast has screen offsets from each side of its four borders and
-+ * the start offsets of the display window. I used these values to calculate
-+ * 'pseudo' values (think of them as placeholders) for the fb video mode, so
-+ * that when it came time to convert these values back into their hardware
-+ * values, I could just add mode- specific offsets to get the correct mode
-+ * settings:
- *
- * left_margin = diwstart_h - borderstart_h;
- * right_margin = borderstop_h - (diwstart_h + xres);
-@@ -29,9 +30,9 @@
- * hsync_len = borderstart_h + (hsync_total - borderstop_h);
- * vsync_len = borderstart_v + (vsync_total - borderstop_v);
- *
-- * Then, when it's time to convert back to hardware settings, the only constants
-- * are the borderstart_* offsets, all other values are derived from the fb video
-- * mode:
-+ * Then, when it's time to convert back to hardware settings, the only
-+ * constants are the borderstart_* offsets, all other values are derived from
-+ * the fb video mode:
- *
- * // PAL
- * borderstart_h = 116;
-@@ -57,7 +58,6 @@
- #include <linux/interrupt.h>
- #include <linux/fb.h>
- #include <linux/init.h>
--#include <linux/console.h>
-
- #ifdef CONFIG_SH_DREAMCAST
- #include <asm/io.h>
-@@ -66,14 +66,9 @@
- #endif
-
- #ifdef CONFIG_MTRR
-- #include <asm/mtrr.h>
-+#include <asm/mtrr.h>
- #endif
-
--#include <video/fbcon.h>
--#include <video/fbcon-cfb16.h>
--#include <video/fbcon-cfb24.h>
--#include <video/fbcon-cfb32.h>
--
- #ifdef CONFIG_FB_PVR2_DEBUG
- # define DPRINTK(fmt, args...) printk(KERN_DEBUG "%s: " fmt, __FUNCTION__ , ## args)
- #else
-@@ -124,16 +119,6 @@ static struct pvr2_params outputs[] __in
- */
-
- static struct pvr2fb_par {
--
-- int xres;
-- int yres;
-- int vxres;
-- int vyres;
-- int xoffset;
-- int yoffset;
-- u_short bpp;
--
-- u_long pixclock;
- u_short hsync_total; /* Clocks/line */
- u_short vsync_total; /* Lines/field */
- u_short borderstart_h;
-@@ -144,53 +129,49 @@ static struct pvr2fb_par {
- u_short diwstart_v; /* Vertical offset of the display field, for
- interlaced modes, this is the long field */
- u_long disp_start; /* Address of image within VRAM */
--
-- u_long next_line; /* Modulo for next line */
--
- u_char is_interlaced; /* Is the display interlaced? */
- u_char is_doublescan; /* Are scanlines output twice? (doublescan) */
- u_char is_lowres; /* Is horizontal pixel-doubling enabled? */
-+} *currentpar;
-
-- u_long bordercolor; /* RGB888 format border color */
--
-- u_long vmode;
--
--} currentpar;
--
--static int currbpp;
--static struct display disp;
--static struct fb_info fb_info;
-+static struct fb_info *fb_info;
- static int pvr2fb_inverse = 0;
-
--static struct { u_short red, green, blue, alpha; } palette[256];
--static union {
--#ifdef FBCON_HAS_CFB16
-- u16 cfb16[16];
--#endif
--#ifdef FBCON_HAS_CFB24
-- u32 cfb24[16];
--#endif
--#ifdef FBCON_HAS_CFB32
-- u32 cfb32[16];
--#endif
--} fbcon_cmap;
-+static struct fb_fix_screeninfo pvr2_fix __initdata = {
-+ .id = "NEC PowerVR2",
-+ .type = FB_TYPE_PACKED_PIXELS,
-+ .visual = FB_VISUAL_TRUECOLOR,
-+ .ypanstep = 1,
-+ .ywrapstep = 1,
-+ .accel = FB_ACCEL_NONE,
-+};
-
--static char pvr2fb_name[16] = "NEC PowerVR2";
-+static struct fb_var_screeninfo pvr2_var __initdata = {
-+ .xres = 640,
-+ .yres = 480,
-+ .xres_virtual = 640,
-+ .yres_virtual = 480,
-+ .bits_per_pixel =16,
-+ .red = { 11, 5, 0 },
-+ .green = { 5, 6, 0 },
-+ .blue = { 0, 5, 0 },
-+ .activate = FB_ACTIVATE_NOW,
-+ .height = -1,
-+ .width = -1,
-+ .vmode = FB_VMODE_NONINTERLACED,
-+};
-
- #define VIDEOMEMSIZE (8*1024*1024)
- static u_long videomemory = 0xa5000000, videomemorysize = VIDEOMEMSIZE;
- static int cable_type = -1;
- static int video_output = -1;
-
--#ifdef CONFIG_MTRR
--static int enable_mtrr = 1;
--static int mtrr_handle;
--#endif
-+static int nopan = 0;
-+static int nowrap = 1;
-
- /*
- * We do all updating, blanking, etc. during the vertical retrace period
- */
--
- static u_short do_vmode_full = 0; /* Change the video mode */
- static u_short do_vmode_pan = 0; /* Update the video mode */
- static short do_blank = 0; /* (Un)Blank the screen */
-@@ -201,50 +182,15 @@ static u_short is_blanked = 0; /* Is th
-
- int pvr2fb_setup(char*);
-
--static int pvr2fb_get_fix(struct fb_fix_screeninfo *fix, int con,
-- struct fb_info *info);
--static int pvr2fb_get_var(struct fb_var_screeninfo *var, int con,
-- struct fb_info *info);
--static int pvr2fb_set_var(struct fb_var_screeninfo *var, int con,
-- struct fb_info *info);
--static int pvr2fb_pan_display(struct fb_var_screeninfo *var, int con,
-- struct fb_info *info);
--static int pvr2fb_get_cmap(struct fb_cmap *cmap, int kspc, int con,
-- struct fb_info *info);
--static int pvr2fb_set_cmap(struct fb_cmap *cmap, int kspc, int con,
-- struct fb_info *info);
- static int pvr2fb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
- u_int transp, struct fb_info *info);
- static int pvr2fb_blank(int blank, struct fb_info *info);
--
-- /*
-- * Interface to the low level console driver
-- */
--
--static int pvr2fbcon_switch(int con, struct fb_info *info);
--static int pvr2fbcon_updatevar(int con, struct fb_info *info);
--
-- /*
-- * Internal/hardware-specific routines
-- */
--
- static u_long get_line_length(int xres_virtual, int bpp);
- static void set_color_bitfields(struct fb_var_screeninfo *var);
--static int pvr2_getcolreg(u_int regno, u_int *red, u_int *green, u_int *blue,
-- u_int *transp, struct fb_info *info);
--
--static int pvr2_encode_fix(struct fb_fix_screeninfo *fix,
-- struct pvr2fb_par *par);
--static int pvr2_decode_var(struct fb_var_screeninfo *var,
-- struct pvr2fb_par *par);
--static int pvr2_encode_var(struct fb_var_screeninfo *var,
-- struct pvr2fb_par *par);
--static void pvr2_get_par(struct pvr2fb_par *par);
--static void pvr2_set_var(struct fb_var_screeninfo *var);
--static void pvr2_pan_var(struct fb_var_screeninfo *var);
--static int pvr2_update_par(void);
--static void pvr2_update_display(void);
--static void pvr2_init_display(void);
-+static int pvr2fb_check_var(struct fb_var_screeninfo *var, struct fb_info *info);
-+static int pvr2fb_set_par(struct fb_info *info);
-+static void pvr2_update_display(struct fb_info *info);
-+static void pvr2_init_display(struct fb_info *info);
- static void pvr2_do_blank(void);
- static irqreturn_t pvr2fb_interrupt(int irq, void *dev_id, struct pt_regs *fp);
- static int pvr2_init_cable(void);
-@@ -252,19 +198,18 @@ static int pvr2_get_param(const struct p
- int val, int size);
-
- static struct fb_ops pvr2fb_ops = {
-- .owner = THIS_MODULE,
-- .fb_get_fix = pvr2fb_get_fix,
-- .fb_get_var = pvr2fb_get_var,
-- .fb_set_var = pvr2fb_set_var,
-- .fb_get_cmap = pvr2fb_get_cmap,
-- .fb_set_cmap = pvr2fb_set_cmap,
-- .fb_setcolreg = pvr2fb_setcolreg,
-- .fb_pan_display = pvr2fb_pan_display,
-- .fb_blank = pvr2fb_blank,
-+ .owner = THIS_MODULE,
-+ .fb_setcolreg = pvr2fb_setcolreg,
-+ .fb_blank = pvr2fb_blank,
-+ .fb_check_var = pvr2fb_check_var,
-+ .fb_set_par = pvr2fb_set_par,
-+ .fb_fillrect = cfb_fillrect,
-+ .fb_copyarea = cfb_copyarea,
-+ .fb_imageblit = cfb_imageblit,
-+ .fb_cursor = soft_cursor,
- };
-
- static struct fb_videomode pvr2_modedb[] __initdata = {
--
- /*
- * Broadcast video modes (PAL and NTSC). I'm unfamiliar with
- * PAL-M and PAL-N, but from what I've read both modes parallel PAL and
-@@ -275,21 +220,16 @@ static struct fb_videomode pvr2_modedb[]
- /* 640x480 @ 60Hz interlaced (NTSC) */
- "ntsc_640x480i", 60, 640, 480, TV_CLK, 38, 33, 0, 18, 146, 26,
- FB_SYNC_BROADCAST, FB_VMODE_INTERLACED | FB_VMODE_YWRAP
-- },
--
-- {
-+ }, {
- /* 640x240 @ 60Hz (NTSC) */
- /* XXX: Broken! Don't use... */
- "ntsc_640x240", 60, 640, 240, TV_CLK, 38, 33, 0, 0, 146, 22,
- FB_SYNC_BROADCAST, FB_VMODE_YWRAP
-- },
--
-- {
-+ }, {
- /* 640x480 @ 60hz (VGA) */
- "vga_640x480", 60, 640, 480, VGA_CLK, 38, 33, 0, 18, 146, 26,
- 0, FB_VMODE_YWRAP
-- },
--
-+ },
- };
-
- #define NUM_TOTAL_MODES ARRAY_SIZE(pvr2_modedb)
-@@ -301,222 +241,10 @@ static struct fb_videomode pvr2_modedb[]
- static int defmode = DEFMODE_NTSC;
- static char *mode_option __initdata = NULL;
-
--/* Get the fixed part of the display */
--
--static int pvr2fb_get_fix(struct fb_fix_screeninfo *fix, int con,
-- struct fb_info *info)
--{
-- struct pvr2fb_par par;
--
-- if (con == -1)
-- pvr2_get_par(&par);
-- else {
-- int err;
--
-- if ((err = pvr2_decode_var(&fb_display[con].var, &par)))
-- return err;
-- }
-- return pvr2_encode_fix(fix, &par);
--}
--
--/* Get the user-defined part of the display */
--
--static int pvr2fb_get_var(struct fb_var_screeninfo *var, int con,
-- struct fb_info *info)
--{
-- int err = 0;
--
-- if (con == -1) {
-- struct pvr2fb_par par;
--
-- pvr2_get_par(&par);
-- err = pvr2_encode_var(var, &par);
-- } else
-- *var = fb_display[con].var;
--
-- return err;
--}
--
--/* Set the user-defined part of the display */
--
--static int pvr2fb_set_var(struct fb_var_screeninfo *var, int con,
-- struct fb_info *info)
--{
-- int err, activate = var->activate;
-- int oldxres, oldyres, oldvxres, oldvyres, oldbpp;
-- struct pvr2fb_par par;
--
-- struct display *display;
-- if (con >= 0)
-- display = &fb_display[con];
-- else
-- display = &disp; /* used during initialization */
--
-- /*
-- * FB_VMODE_CONUPDATE and FB_VMODE_SMOOTH_XPAN are equal!
-- * as FB_VMODE_SMOOTH_XPAN is only used internally
-- */
--
-- if (var->vmode & FB_VMODE_CONUPDATE) {
-- var->vmode |= FB_VMODE_YWRAP;
-- var->xoffset = display->var.xoffset;
-- var->yoffset = display->var.yoffset;
-- }
-- if ((err = pvr2_decode_var(var, &par)))
-- return err;
-- pvr2_encode_var(var, &par);
--
-- /* Do memory check and bitfield set here?? */
--
-- if ((activate & FB_ACTIVATE_MASK) == FB_ACTIVATE_NOW) {
-- oldxres = display->var.xres;
-- oldyres = display->var.yres;
-- oldvxres = display->var.xres_virtual;
-- oldvyres = display->var.yres_virtual;
-- oldbpp = display->var.bits_per_pixel;
-- display->var = *var;
-- if (oldxres != var->xres || oldyres != var->yres ||
-- oldvxres != var->xres_virtual || oldvyres != var->yres_virtual ||
-- oldbpp != var->bits_per_pixel) {
-- struct fb_fix_screeninfo fix;
--
-- pvr2_encode_fix(&fix, &par);
-- display->scrollmode = SCROLL_YREDRAW;
-- display->visual = fix.visual;
-- display->type = fix.type;
-- display->type_aux = fix.type_aux;
-- display->ypanstep = fix.ypanstep;
-- display->ywrapstep = fix.ywrapstep;
-- display->line_length = fix.line_length;
-- display->can_soft_blank = 1;
-- display->inverse = pvr2fb_inverse;
-- switch (var->bits_per_pixel) {
--#ifdef FBCON_HAS_CFB16
-- case 16:
-- display->dispsw = &fbcon_cfb16;
-- display->dispsw_data = fbcon_cmap.cfb16;
-- break;
--#endif
--#ifdef FBCON_HAS_CFB24
-- case 24:
-- display->dispsw = &fbcon_cfb24;
-- display->dispsw_data = fbcon_cmap.cfb24;
-- break;
--#endif
--#ifdef FBCON_HAS_CFB32
-- case 32:
-- display->dispsw = &fbcon_cfb32;
-- display->dispsw_data = fbcon_cmap.cfb32;
-- break;
--#endif
-- default:
-- display->dispsw = &fbcon_dummy;
-- break;
-- }
-- if (fb_info.changevar)
-- (*fb_info.changevar)(con);
-- }
-- if (oldbpp != var->bits_per_pixel) {
-- if ((err = fb_alloc_cmap(&display->cmap, 0, 0)))
-- return err;
-- do_install_cmap(con, info);
-- }
-- if (con == info->currcon)
-- pvr2_set_var(&display->var);
-- }
--
-- return 0;
--}
--
--/*
-- * Pan or wrap the display.
-- * This call looks only at xoffset, yoffset and the FB_VMODE_YRAP flag
-- */
--
--static int pvr2fb_pan_display(struct fb_var_screeninfo *var, int con,
-- struct fb_info *info)
--{
-- if (var->vmode & FB_VMODE_YWRAP) {
-- if (var->yoffset<0 || var->yoffset >=
-- fb_display[con].var.yres_virtual || var->xoffset)
-- return -EINVAL;
-- } else {
-- if (var->xoffset+fb_display[con].var.xres >
-- fb_display[con].var.xres_virtual ||
-- var->yoffset+fb_display[con].var.yres >
-- fb_display[con].var.yres_virtual)
-- return -EINVAL;
-- }
-- if (con == info->currcon)
-- pvr2_pan_var(var);
-- fb_display[con].var.xoffset = var->xoffset;
-- fb_display[con].var.yoffset = var->yoffset;
-- if (var->vmode & FB_VMODE_YWRAP)
-- fb_display[con].var.vmode |= FB_VMODE_YWRAP;
-- else
-- fb_display[con].var.vmode &= ~FB_VMODE_YWRAP;
--
-- return 0;
--}
--
--/* Get the colormap */
--
--static int pvr2fb_get_cmap(struct fb_cmap *cmap, int kspc, int con,
-- struct fb_info *info)
--{
-- if (con == info->currcon) /* current console? */
-- return fb_get_cmap(cmap, kspc, pvr2_getcolreg, info);
-- else if (fb_display[con].cmap.len) /* non default colormap? */
-- fb_copy_cmap(&fb_display[con].cmap, cmap, kspc ? 0 : 2);
-- else
-- fb_copy_cmap(fb_default_cmap(1<<fb_display[con].var.bits_per_pixel),
-- cmap, kspc ? 0 : 2);
-- return 0;
--}
--
--/* Set the colormap */
--
--static int pvr2fb_set_cmap(struct fb_cmap *cmap, int kspc, int con,
-- struct fb_info *info)
--{
-- int err;
--
-- if (!fb_display[con].cmap.len) { /* no colormap allocated? */
-- if ((err = fb_alloc_cmap(&fb_display[con].cmap,
-- 1<<fb_display[con].var.bits_per_pixel,
-- 0)))
-- return err;
-- }
-- if (con == info->currcon) /* current console? */
-- return fb_set_cmap(cmap, kspc, info);
-- else
-- fb_copy_cmap(cmap, &fb_display[con].cmap, kspc ? 0 : 1);
--
-- return 0;
--}
--
--static int pvr2fbcon_switch(int con, struct fb_info *info)
--{
-- /* Do we have to save the colormap? */
-- if (fb_display[info->currcon].cmap.len)
-- fb_get_cmap(&fb_display[info->currcon].cmap, 1, pvr2_getcolreg, info);
--
-- info->currcon = con;
-- pvr2_set_var(&fb_display[con].var);
-- /* Install new colormap */
-- do_install_cmap(con, info);
-- return 0;
--}
--
--static int pvr2fbcon_updatevar(int con, struct fb_info *info)
--{
-- pvr2_pan_var(&fb_display[con].var);
-- return 0;
--}
--
- static int pvr2fb_blank(int blank, struct fb_info *info)
- {
- do_blank = blank ? blank : -1;
-+ return 0;
- }
-
- static inline u_long get_line_length(int xres_virtual, int bpp)
-@@ -548,52 +276,29 @@ static void set_color_bitfields(struct f
- }
- }
-
--static int pvr2_getcolreg(u_int regno, u_int *red, u_int *green, u_int *blue,
-- u_int *transp, struct fb_info *info)
--{
-- if (regno > 255)
-- return 1;
--
-- *red = palette[regno].red;
-- *green = palette[regno].green;
-- *blue = palette[regno].blue;
-- *transp = 0;
-- return 0;
--}
--
- static int pvr2fb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
- u_int transp, struct fb_info *info)
- {
- if (regno > 255)
- return 1;
-
-- palette[regno].red = red;
-- palette[regno].green = green;
-- palette[regno].blue = blue;
--
- if (regno < 16) {
-- switch (currbpp) {
--#ifdef FBCON_HAS_CFB16
-+ switch (info->var.bits_per_pixel) {
- case 16: /* RGB 565 */
-- fbcon_cmap.cfb16[regno] = (red & 0xf800) |
-- ((green & 0xfc00) >> 5) |
-+ ((u16*)(info->pseudo_palette))[regno] = (red & 0xf800) |
-+ ((green & 0xfc00) >> 5) |
- ((blue & 0xf800) >> 11);
- break;
--#endif
--#ifdef FBCON_HAS_CFB24
- case 24: /* RGB 888 */
- red >>= 8; green >>= 8; blue >>= 8;
-- fbcon_cmap.cfb24[regno] = (red << 16) | (green << 8) | blue;
-+ ((u32*)(info->pseudo_palette))[regno] = (red << 16) | (green << 8) | blue;
- break;
--#endif
--#ifdef FBCON_HAS_CFB32
- case 32: /* ARGB 8888 */
- red >>= 8; green >>= 8; blue >>= 8;
-- fbcon_cmap.cfb32[regno] = (red << 16) | (green << 8) | blue;
-+ ((u32*)(info->pseudo_palette))[regno] = (transp << 24) |(red << 16) | (green << 8) | blue;
- break;
--#endif
- default:
-- DPRINTK("Invalid bit depth %d?!?\n", currbpp);
-+ DPRINTK("Invalid bit depth %d?!?\n", info->var.bits_per_pixel);
- return 1;
- }
- }
-@@ -601,85 +306,33 @@ static int pvr2fb_setcolreg(u_int regno,
- return 0;
- }
-
--
--static int pvr2_encode_fix(struct fb_fix_screeninfo *fix,
-- struct pvr2fb_par *par)
--{
-- memset(fix, 0, sizeof(struct fb_fix_screeninfo));
-- strcpy(fix->id, pvr2fb_name);
-- fix->smem_start = videomemory;
-- fix->smem_len = videomemorysize;
-- fix->type = FB_TYPE_PACKED_PIXELS;
-- fix->type_aux = 0;
-- fix->visual = FB_VISUAL_TRUECOLOR;
--
-- if (par->vmode & FB_VMODE_YWRAP) {
-- fix->ywrapstep = 1;
-- fix->xpanstep = fix->ypanstep = 0;
-- } else {
-- fix->ywrapstep = 0;
-- fix->xpanstep = 1;
-- fix->ypanstep = 1;
-- }
-- fix->line_length = par->next_line;
--
-- return 0;
--}
--
--/*
-- * Create a hardware video mode using the framebuffer values. If a value needs
-- * to be clipped or constrained it's done here. This routine needs a bit more
-- * work to make sure we're doing the right tests at the right time.
-- */
--static int pvr2_decode_var(struct fb_var_screeninfo *var,
-- struct pvr2fb_par *par)
-+static int pvr2fb_set_par(struct fb_info *info)
- {
-+ struct pvr2fb_par *par = (struct pvr2fb_par *)info->par;
-+ struct fb_var_screeninfo *var = &info->var;
- u_long line_length;
- u_short vtotal;
-
-- if (var->pixclock != TV_CLK && var->pixclock != VGA_CLK) {
-- DPRINTK("Invalid pixclock value %d\n", var->pixclock);
-- return -EINVAL;
-- }
-- par->pixclock = var->pixclock;
--
-- if ((par->xres = var->xres) < 320)
-- par->xres = 320;
-- if ((par->yres = var->yres) < 240)
-- par->yres = 240;
-- if ((par->vxres = var->xres_virtual) < par->xres)
-- par->vxres = par->xres;
-- if ((par->vyres = var->yres_virtual) < par->yres)
-- par->vyres = par->yres;
--
-- if ((par->bpp = var->bits_per_pixel) <= 16)
-- par->bpp = 16;
-- else if ((par->bpp = var->bits_per_pixel) <= 24)
-- par->bpp = 24;
-- else if ((par->bpp = var->bits_per_pixel) <= 32)
-- par->bpp = 32;
--
-- currbpp = par->bpp;
--
- /*
- * XXX: It's possible that a user could use a VGA box, change the cable
-- * type in hardware (i.e. switch from VGA<->composite), then change modes
-- * (i.e. switching to another VT). If that happens we should automagically
-- * change the output format to cope, but currently I don't have a VGA box
-- * to make sure this works properly.
-+ * type in hardware (i.e. switch from VGA<->composite), then change
-+ * modes (i.e. switching to another VT). If that happens we should
-+ * automagically change the output format to cope, but currently I
-+ * don't have a VGA box to make sure this works properly.
- */
- cable_type = pvr2_init_cable();
- if (cable_type == CT_VGA && video_output != VO_VGA)
- video_output = VO_VGA;
-
-- par->vmode = var->vmode & FB_VMODE_MASK;
-- if (par->vmode & FB_VMODE_INTERLACED && video_output != VO_VGA)
-+ var->vmode &= FB_VMODE_MASK;
-+ if (var->vmode & FB_VMODE_INTERLACED && video_output != VO_VGA)
- par->is_interlaced = 1;
- /*
- * XXX: Need to be more creative with this (i.e. allow doublecan for
- * PAL/NTSC output).
- */
-- par->is_doublescan = (par->yres < 480 && video_output == VO_VGA);
-+ if (var->vmode & FB_VMODE_DOUBLE && video_output == VO_VGA)
-+ par->is_doublescan = 1;
-
- par->hsync_total = var->left_margin + var->xres + var->right_margin +
- var->hsync_len;
-@@ -691,22 +344,12 @@ static int pvr2_decode_var(struct fb_var
- if (par->is_interlaced)
- vtotal /= 2;
- if (vtotal > (PAL_VTOTAL + NTSC_VTOTAL)/2) {
-- /* PAL video output */
-- /* XXX: Should be using a range here ... ? */
-- if (par->hsync_total != PAL_HTOTAL) {
-- DPRINTK("invalid hsync total for PAL\n");
-- return -EINVAL;
-- }
- /* XXX: Check for start values here... */
- /* XXX: Check hardware for PAL-compatibility */
- par->borderstart_h = 116;
- par->borderstart_v = 44;
- } else {
- /* NTSC video output */
-- if (par->hsync_total != NTSC_HTOTAL) {
-- DPRINTK("invalid hsync total for NTSC\n");
-- return -EINVAL;
-- }
- par->borderstart_h = 126;
- par->borderstart_v = 18;
- }
-@@ -714,155 +357,123 @@ static int pvr2_decode_var(struct fb_var
- /* VGA mode */
- /* XXX: What else needs to be checked? */
- /*
-- * XXX: We have a little freedom in VGA modes, what ranges should
-- * be here (i.e. hsync/vsync totals, etc.)?
-+ * XXX: We have a little freedom in VGA modes, what ranges
-+ * should be here (i.e. hsync/vsync totals, etc.)?
- */
- par->borderstart_h = 126;
- par->borderstart_v = 40;
- }
-
- /* Calculate the remainding offsets */
-- par->borderstop_h = par->borderstart_h + par->hsync_total -
-- var->hsync_len;
-- par->borderstop_v = par->borderstart_v + par->vsync_total -
-- var->vsync_len;
- par->diwstart_h = par->borderstart_h + var->left_margin;
- par->diwstart_v = par->borderstart_v + var->upper_margin;
-+ par->borderstop_h = par->diwstart_h + var->xres +
-+ var->right_margin;
-+ par->borderstop_v = par->diwstart_v + var->yres +
-+ var->lower_margin;
-+
- if (!par->is_interlaced)
- par->borderstop_v /= 2;
--
-- if (par->xres < 640)
-+ if (info->var.xres < 640)
- par->is_lowres = 1;
-
-- /* XXX: Needs testing. */
-- if (!((par->vmode ^ var->vmode) & FB_VMODE_YWRAP)) {
-- par->xoffset = var->xoffset;
-- par->yoffset = var->yoffset;
-- if (par->vmode & FB_VMODE_YWRAP) {
-- if (par->xoffset || par->yoffset < 0 || par->yoffset >=
-- par->vyres)
-- par->xoffset = par->yoffset = 0;
-- } else {
-- if (par->xoffset < 0 || par->xoffset > par->vxres-par->xres ||
-- par->yoffset < 0 || par->yoffset > par->vyres-par->yres)
-- par->xoffset = par->yoffset = 0;
-- }
-- } else
-- par->xoffset = par->yoffset = 0;
--
-- /* Check memory sizes */
- line_length = get_line_length(var->xres_virtual, var->bits_per_pixel);
-- if (line_length * var->yres_virtual > videomemorysize)
-- return -ENOMEM;
-- par->disp_start = videomemory + (get_line_length(par->vxres, par->bpp) *
-- par->yoffset) * get_line_length(par->xoffset, par->bpp);
-- par->next_line = line_length;
--
-+ par->disp_start = videomemory + (line_length * var->yoffset) * line_length;
-+ info->fix.line_length = line_length;
- return 0;
- }
-
--static int pvr2_encode_var(struct fb_var_screeninfo *var,
-- struct pvr2fb_par *par)
-+static int pvr2fb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
- {
-- memset(var, 0, sizeof(struct fb_var_screeninfo));
-+ u_short vtotal, hsync_total;
-+ u_long line_length;
-
-- var->xres = par->xres;
-- var->yres = par->yres;
-- var->xres_virtual = par->vxres;
-- var->yres_virtual = par->vyres;
-- var->xoffset = par->xoffset;
-- var->yoffset = par->yoffset;
-+ if (var->pixclock != TV_CLK || var->pixclock != VGA_CLK) {
-+ DPRINTK("Invalid pixclock value %d\n", var->pixclock);
-+ return -EINVAL;
-+ }
-
-- var->bits_per_pixel = par->bpp;
-- set_color_bitfields(var);
-+ if (var->xres < 320)
-+ var->xres = 320;
-+ if (var->yres < 240)
-+ var->yres = 240;
-+ if (var->xres_virtual < var->xres)
-+ var->xres_virtual = var->xres;
-+ if (var->yres_virtual < var->yres)
-+ var->yres_virtual = var->yres;
-+
-+ if (var->bits_per_pixel <= 16)
-+ var->bits_per_pixel = 16;
-+ else if (var->bits_per_pixel <= 24)
-+ var->bits_per_pixel = 24;
-+ else if (var->bits_per_pixel <= 32)
-+ var->bits_per_pixel = 32;
-
-- var->activate = FB_ACTIVATE_NOW;
-- var->height = -1;
-- var->width = -1;
-+ set_color_bitfields(var);
-
-- var->pixclock = par->pixclock;
-+ if (var->vmode & FB_VMODE_YWRAP) {
-+ if (var->xoffset || var->yoffset < 0 ||
-+ var->yoffset >= var->yres_virtual) {
-+ var->xoffset = var->yoffset = 0;
-+ } else {
-+ if (var->xoffset > var->xres_virtual - var->xres ||
-+ var->yoffset > var->yres_virtual - var->yres ||
-+ var->xoffset < 0 || var->yoffset < 0)
-+ var->xoffset = var->yoffset = 0;
-+ }
-+ } else {
-+ var->xoffset = var->yoffset = 0;
-+ }
-
-- if (par->is_doublescan)
-+ /*
-+ * XXX: Need to be more creative with this (i.e. allow doublecan for
-+ * PAL/NTSC output).
-+ */
-+ if (var->yres < 480 && video_output == VO_VGA)
- var->vmode = FB_VMODE_DOUBLE;
-
-- if (par->is_interlaced)
-- var->vmode |= FB_VMODE_INTERLACED;
-- else
-- var->vmode |= FB_VMODE_NONINTERLACED;
--
-- var->right_margin = par->borderstop_h - (par->diwstart_h + par->xres);
-- var->left_margin = par->diwstart_h - par->borderstart_h;
-- var->hsync_len = par->borderstart_h + (par->hsync_total - par->borderstop_h);
-- var->upper_margin = par->diwstart_v - par->borderstart_v;
-- var->lower_margin = par->borderstop_v - (par->diwstart_v + par->yres);
-- var->vsync_len = par->borderstart_v + (par->vsync_total - par->borderstop_v);
- if (video_output != VO_VGA)
-- var->sync = FB_SYNC_BROADCAST;
--
-- if (par->vmode & FB_VMODE_YWRAP)
-- var->vmode |= FB_VMODE_YWRAP;
--
-- return 0;
--}
--
--static void pvr2_get_par(struct pvr2fb_par *par)
--{
-- *par = currentpar;
--}
--
--/* Setup the new videomode in hardware */
--
--static void pvr2_set_var(struct fb_var_screeninfo *var)
--{
-- do_vmode_pan = 0;
-- do_vmode_full = 0;
-- pvr2_decode_var(var, ¤tpar);
--
-- do_vmode_full = 1;
--}
--
--/*
-- * Pan or wrap the display
-- * This call looks only at xoffset, yoffset and the FB_VMODE_YWRAP flag in `var'.
-- */
--static void pvr2_pan_var(struct fb_var_screeninfo *var)
--{
-- struct pvr2fb_par *par = ¤tpar;
-+ var->sync = FB_SYNC_BROADCAST | FB_VMODE_INTERLACED;
-
-- par->xoffset = var->xoffset;
-- par->yoffset = var->yoffset;
-- if (var->vmode & FB_VMODE_YWRAP)
-- par->vmode |= FB_VMODE_YWRAP;
-- else
-- par->vmode &= ~FB_VMODE_YWRAP;
--
-- do_vmode_pan = 0;
-- pvr2_update_par();
-- do_vmode_pan = 1;
--}
--
--static int pvr2_update_par(void)
--{
-- struct pvr2fb_par *par = ¤tpar;
-- u_long move;
--
-- move = get_line_length(par->xoffset, par->bpp);
-- if (par->yoffset) {
-- par->disp_start += (par->next_line * par->yoffset) + move;
-- } else
-- par->disp_start += move;
-+ hsync_total = var->left_margin + var->xres + var->right_margin +
-+ var->hsync_len;
-+ vtotal = var->upper_margin + var->yres + var->lower_margin +
-+ var->vsync_len;
-
-+ if (var->sync & FB_SYNC_BROADCAST) {
-+ if (var->vmode & FB_VMODE_INTERLACED)
-+ vtotal /= 2;
-+ if (vtotal > (PAL_VTOTAL + NTSC_VTOTAL)/2) {
-+ /* PAL video output */
-+ /* XXX: Should be using a range here ... ? */
-+ if (hsync_total != PAL_HTOTAL) {
-+ DPRINTK("invalid hsync total for PAL\n");
-+ return -EINVAL;
-+ }
-+ } else {
-+ /* NTSC video output */
-+ if (hsync_total != NTSC_HTOTAL) {
-+ DPRINTK("invalid hsync total for NTSC\n");
-+ return -EINVAL;
-+ }
-+ }
-+ }
-+ /* Check memory sizes */
-+ line_length = get_line_length(var->xres_virtual, var->bits_per_pixel);
-+ if (line_length * var->yres_virtual > videomemorysize)
-+ return -ENOMEM;
- return 0;
- }
-
--static void pvr2_update_display(void)
-+static void pvr2_update_display(struct fb_info *info)
- {
-- struct pvr2fb_par *par = ¤tpar;
-+ struct pvr2fb_par *par = (struct pvr2fb_par *) info->par;
-+ struct fb_var_screeninfo *var = &info->var;
-
- /* Update the start address of the display image */
- ctrl_outl(par->disp_start, DISP_DIWADDRL);
- ctrl_outl(par->disp_start +
-- get_line_length(par->xoffset + par->xres, par->bpp),
-+ get_line_length(var->xoffset+var->xres, var->bits_per_pixel),
- DISP_DIWADDRS);
- }
-
-@@ -872,11 +483,12 @@ static void pvr2_update_display(void)
- * registers are still undocumented.
- */
-
--static void pvr2_init_display(void)
-+static void pvr2_init_display(struct fb_info *info)
- {
-- struct pvr2fb_par *par = ¤tpar;
-+ struct pvr2fb_par *par = (struct pvr2fb_par *) info->par;
-+ struct fb_var_screeninfo *var = &info->var;
- u_short diw_height, diw_width, diw_modulo = 1;
-- u_short bytesperpixel = par->bpp / 8;
-+ u_short bytesperpixel = var->bits_per_pixel >> 3;
-
- /* hsync and vsync totals */
- ctrl_outl((par->vsync_total << 16) | par->hsync_total, DISP_SYNCSIZE);
-@@ -885,16 +497,16 @@ static void pvr2_init_display(void)
- /* since we're "panning" within vram, we need to offset things based
- * on the offset from the virtual x start to our real gfx. */
- if (video_output != VO_VGA && par->is_interlaced)
-- diw_modulo += par->next_line / 4;
-- diw_height = (par->is_interlaced ? par->yres / 2 : par->yres);
-- diw_width = get_line_length(par->xres, par->bpp) / 4;
-+ diw_modulo += info->fix.line_length / 4;
-+ diw_height = (par->is_interlaced ? var->yres / 2 : var->yres);
-+ diw_width = get_line_length(var->xres, var->bits_per_pixel) / 4;
- ctrl_outl((diw_modulo << 20) | (--diw_height << 10) | --diw_width,
- DISP_DIWSIZE);
-
- /* display address, long and short fields */
- ctrl_outl(par->disp_start, DISP_DIWADDRL);
- ctrl_outl(par->disp_start +
-- get_line_length(par->xoffset + par->xres, par->bpp),
-+ get_line_length(var->xoffset+var->xres, var->bits_per_pixel),
- DISP_DIWADDRS);
-
- /* border horizontal, border vertical, border color */
-@@ -919,7 +531,6 @@ static void pvr2_init_display(void)
- /* video enable, color sync, interlace,
- * hsync and vsync polarity (currently unused) */
- ctrl_outl(0x100 | ((par->is_interlaced /*|4*/) << 4), DISP_SYNCCONF);
--
- }
-
- /* Simulate blanking by making the border cover the entire screen */
-@@ -941,23 +552,20 @@ static void pvr2_do_blank(void)
-
- static irqreturn_t pvr2fb_interrupt(int irq, void *dev_id, struct pt_regs *fp)
- {
-- if (do_vmode_pan || do_vmode_full)
-- pvr2_update_display();
-+ struct fb_info *info = dev_id;
-
-+ if (do_vmode_pan || do_vmode_full)
-+ pvr2_update_display(info);
- if (do_vmode_full)
-- pvr2_init_display();
--
-+ pvr2_init_display(info);
- if (do_vmode_pan)
- do_vmode_pan = 0;
--
-+ if (do_vmode_full)
-+ do_vmode_full = 0;
- if (do_blank) {
- pvr2_do_blank();
- do_blank = 0;
- }
--
-- if (do_vmode_full) {
-- do_vmode_full = 0;
-- }
- return IRQ_HANDLED;
- }
-
-@@ -991,94 +599,120 @@ static int pvr2_init_cable(void)
-
- int __init pvr2fb_init(void)
- {
-- struct fb_var_screeninfo var;
- u_long modememused;
-+ int err = -EINVAL;
-
-- if (!MACH_DREAMCAST)
-+ if (!mach_is_dreamcast())
- return -ENXIO;
-
-+ fb_info = kmalloc(sizeof(struct fb_info) + sizeof(struct pvr2fb_par) +
-+ sizeof(u32) * 16, GFP_KERNEL);
-+
-+ if (!fb_info) {
-+ printk(KERN_ERR "Failed to allocate memory for fb_info\n");
-+ return -ENOMEM;
-+ }
-+
-+ memset(fb_info, 0, sizeof(fb_info) + sizeof(struct pvr2fb_par) + sizeof(u32) * 16);
-+
-+ currentpar = (struct pvr2fb_par *)(fb_info + 1);
-+
- /* Make a guess at the monitor based on the attached cable */
- if (pvr2_init_cable() == CT_VGA) {
-- fb_info.monspecs.hfmin = 30000;
-- fb_info.monspecs.hfmax = 70000;
-- fb_info.monspecs.vfmin = 60;
-- fb_info.monspecs.vfmax = 60;
-- }
-- else { /* Not VGA, using a TV (taken from acornfb) */
-- fb_info.monspecs.hfmin = 15469;
-- fb_info.monspecs.hfmax = 15781;
-- fb_info.monspecs.vfmin = 49;
-- fb_info.monspecs.vfmax = 51;
-+ fb_info->monspecs.hfmin = 30000;
-+ fb_info->monspecs.hfmax = 70000;
-+ fb_info->monspecs.vfmin = 60;
-+ fb_info->monspecs.vfmax = 60;
-+ } else {
-+ /* Not VGA, using a TV (taken from acornfb) */
-+ fb_info->monspecs.hfmin = 15469;
-+ fb_info->monspecs.hfmax = 15781;
-+ fb_info->monspecs.vfmin = 49;
-+ fb_info->monspecs.vfmax = 51;
- }
-
-- /* XXX: This needs to pull default video output via BIOS or other means */
-+ /*
-+ * XXX: This needs to pull default video output via BIOS or other means
-+ */
- if (video_output < 0) {
-- if (cable_type == CT_VGA)
-+ if (cable_type == CT_VGA) {
- video_output = VO_VGA;
-- else
-+ } else {
- video_output = VO_NTSC;
-+ }
- }
-
-- strcpy(fb_info.modename, pvr2fb_name);
-- fb_info.changevar = NULL;
-- fb_info.fbops = &pvr2fb_ops;
-- fb_info.screen_base = (char *) videomemory;
-- fb_info.disp = &disp;
-- fb_info.currcon = -1;
-- fb_info.switch_con = &pvr2fbcon_switch;
-- fb_info.updatevar = &pvr2fbcon_updatevar;
-- fb_info.flags = FBINFO_FLAG_DEFAULT;
-- memset(&var, 0, sizeof(var));
-+ pvr2_fix.smem_start = videomemory;
-+ pvr2_fix.smem_len = videomemorysize;
-+
-+ fb_info->screen_base = ioremap_nocache(pvr2_fix.smem_start,
-+ pvr2_fix.smem_len);
-+
-+ if (!fb_info->screen_base) {
-+ printk("Failed to remap MMIO space\n");
-+ err = -ENXIO;
-+ goto out_err;
-+ }
-+
-+ memset_io((unsigned long)fb_info->screen_base, 0, pvr2_fix.smem_len);
-+
-+ pvr2_fix.ypanstep = nopan ? 0 : 1;
-+ pvr2_fix.ywrapstep = nowrap ? 0 : 1;
-+
-+ fb_info->fbops = &pvr2fb_ops;
-+ fb_info->fix = pvr2_fix;
-+ fb_info->par = currentpar;
-+ fb_info->pseudo_palette = (void *)(fb_info->par + 1);
-+ fb_info->flags = FBINFO_FLAG_DEFAULT;
-
- if (video_output == VO_VGA)
- defmode = DEFMODE_VGA;
-
-- if (!fb_find_mode(&var, &fb_info, mode_option, pvr2_modedb,
-- NUM_TOTAL_MODES, &pvr2_modedb[defmode], 16)) {
-- return -EINVAL;
-- }
-+ if (!mode_option)
-+ mode_option = "640x480@60";
-
-- if (request_irq(HW_EVENT_VSYNC, pvr2fb_interrupt, 0,
-- "pvr2 VBL handler", ¤tpar)) {
-- DPRINTK("couldn't register VBL int\n");
-- return -EBUSY;
-- }
-+ if (!fb_find_mode(&fb_info->var, fb_info, mode_option, pvr2_modedb,
-+ NUM_TOTAL_MODES, &pvr2_modedb[defmode], 16))
-+ fb_info->var = pvr2_var;
-
--#ifdef CONFIG_MTRR
-- if (enable_mtrr) {
-- mtrr_handle = mtrr_add(videomemory, videomemorysize, MTRR_TYPE_WRCOMB, 1);
-- printk("pvr2fb: MTRR turned on\n");
-+ if (request_irq(HW_EVENT_VSYNC, pvr2fb_interrupt, 0,
-+ "pvr2 VBL handler", fb_info)) {
-+ err = -EBUSY;
-+ goto out_err;
- }
--#endif
-
-- pvr2fb_set_var(&var, -1, &fb_info);
-+ if (register_framebuffer(fb_info) < 0)
-+ goto reg_failed;
-
-- if (register_framebuffer(&fb_info) < 0)
-- return -EINVAL;
-+ modememused = get_line_length(fb_info->var.xres_virtual,
-+ fb_info->var.bits_per_pixel);
-+ modememused *= fb_info->var.yres_virtual;
-
-- modememused = get_line_length(var.xres_virtual, var.bits_per_pixel);
-- modememused *= var.yres_virtual;
- printk("fb%d: %s frame buffer device, using %ldk/%ldk of video memory\n",
-- fb_info.node, fb_info.modename, modememused>>10,
-+ fb_info->node, fb_info->fix.id, modememused>>10,
- videomemorysize>>10);
- printk("fb%d: Mode %dx%d-%d pitch = %ld cable: %s video output: %s\n",
-- fb_info.node, var.xres, var.yres, var.bits_per_pixel,
-- get_line_length(var.xres, var.bits_per_pixel),
-+ fb_info->node, fb_info->var.xres, fb_info->var.yres,
-+ fb_info->var.bits_per_pixel,
-+ get_line_length(fb_info->var.xres, fb_info->var.bits_per_pixel),
- (char *)pvr2_get_param(cables, NULL, cable_type, 3),
- (char *)pvr2_get_param(outputs, NULL, video_output, 3));
-
- return 0;
-+
-+reg_failed:
-+ free_irq(HW_EVENT_VSYNC, 0);
-+out_err:
-+ kfree(fb_info);
-+
-+ return err;
- }
-
- static void __exit pvr2fb_exit(void)
- {
--#ifdef CONFIG_MTRR
-- if (enable_mtrr) {
-- mtrr_del(mtrr_handle, videomemory, videomemorysize);
-- printk("pvr2fb: MTRR turned off\n");
-- }
--#endif
-- unregister_framebuffer(&fb_info);
-+ unregister_framebuffer(fb_info);
-+ free_irq(HW_EVENT_VSYNC, 0);
-+ kfree(fb_info);
- }
-
- static int __init pvr2_get_param(const struct pvr2_params *p, const char *s,
-@@ -1102,7 +736,6 @@ static int __init pvr2_get_param(const s
- * Parse command arguments. Supported arguments are:
- * inverse Use inverse color maps
- * nomtrr Disable MTRR usage
-- * font:<fontname> Specify console font
- * cable:composite|rgb|vga Override the video cable type
- * output:NTSC|PAL|VGA Override the video output format
- *
-@@ -1117,8 +750,6 @@ int __init pvr2fb_setup(char *options)
- char cable_arg[80];
- char output_arg[80];
-
-- fb_info.fontname[0] = '\0';
--
- if (!options || !*options)
- return 0;
-
-@@ -1128,23 +759,21 @@ int __init pvr2fb_setup(char *options)
- if (!strcmp(this_opt, "inverse")) {
- pvr2fb_inverse = 1;
- fb_invert_cmaps();
-- } else if (!strncmp(this_opt, "font:", 5))
-- strcpy(fb_info.fontname, this_opt + 5);
-- else if (!strncmp(this_opt, "cable:", 6))
-+ } else if (!strncmp(this_opt, "cable:", 6)) {
- strcpy(cable_arg, this_opt + 6);
-- else if (!strncmp(this_opt, "output:", 7))
-+ } else if (!strncmp(this_opt, "output:", 7)) {
- strcpy(output_arg, this_opt + 7);
--#ifdef CONFIG_MTRR
-- else if (!strncmp(this_opt, "nomtrr", 6))
-- enable_mtrr = 0;
--#endif
-- else
-+ } else if (!strncmp(this_opt, "nopan", 5)) {
-+ nopan = 1;
-+ } else if (!strncmp(this_opt, "nowrap", 6)) {
-+ nowrap = 1;
-+ } else {
- mode_option = this_opt;
-+ }
- }
-
- if (*cable_arg)
- cable_type = pvr2_get_param(cables, cable_arg, 0, 3);
--
- if (*output_arg)
- video_output = pvr2_get_param(outputs, output_arg, 0, 3);
-
---- linux-2.6.0-test1/drivers/video/sis/300vtbl.h 2003-06-14 12:17:59.000000000 -0700
-+++ 25/drivers/video/sis/300vtbl.h 2003-07-19 17:04:55.000000000 -0700
-@@ -1,7 +1,30 @@
--
--
--/* Register settings for SiS 300 series */
--
-+/* $XFree86$ */
-+/*
-+ * Register settings for SiS 300 series
-+ *
-+ * Copyright 2002, 2003 by Thomas Winischhofer, Vienna, Austria
-+ *
-+ * Permission to use, copy, modify, distribute, and sell this software and its
-+ * documentation for any purpose is hereby granted without fee, provided that
-+ * the above copyright notice appear in all copies and that both that
-+ * copyright notice and this permission notice appear in supporting
-+ * documentation, and that the name of the copyright holder not be used in
-+ * advertising or publicity pertaining to distribution of the software without
-+ * specific, written prior permission. The copyright holder makes no representations
-+ * about the suitability of this software for any purpose. It is provided
-+ * "as is" without express or implied warranty.
-+ *
-+ * THE COPYRIGHT HOLDER DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-+ * EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-+ * PERFORMANCE OF THIS SOFTWARE.
-+ *
-+ * Author: Thomas Winischhofer <thomas@winischhofer.net>
-+ *
-+ */
-
- typedef struct _SiS300_StStruct
- {
-@@ -39,470 +62,109 @@ static const SiS300_StStruct SiS300_SMo
- {0xff, 0, 0, 0, 0, 0, 0, 0}
- };
-
--typedef struct _SiS300_StandTableStruct
--{
-- UCHAR CRT_COLS;
-- UCHAR ROWS;
-- UCHAR CHAR_HEIGHT;
-- USHORT CRT_LEN;
-- UCHAR SR[4];
-- UCHAR MISC;
-- UCHAR CRTC[0x19];
-- UCHAR ATTR[0x14];
-- UCHAR GRC[9];
--} SiS300_StandTableStruct;
--
--static const SiS300_StandTableStruct SiS300_StandTable[] =
--{
-- {0x28,0x18,0x08,0x0800, /* 0x00 */
-- {0x09,0x03,0x00,0x02},
-- 0x63,
-- {0x2d,0x27,0x28,0x90,0x2b,0xa0,0xbf,0x1f,
-- 0x00,0xc7,0x06,0x07,0x00,0x00,0x00,0x00,
-- 0x9c,0x8e,0x8f,0x14,0x1f,0x96,0xb9,0xa3,
-- 0xff},
-- {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
-- 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
-- 0x08,0x00,0x0f,0x00},
-- {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
-- 0xff} },
-- {0x28,0x18,0x08,0x0800, /* 0x01 */
-- {0x09,0x03,0x00,0x02},
-- 0x63,
-- {0x2d,0x27,0x28,0x90,0x2b,0xa0,0xbf,0x1f,
-- 0x00,0xc7,0x06,0x07,0x00,0x00,0x00,0x00,
-- 0x9c,0x8e,0x8f,0x14,0x1f,0x96,0xb9,0xa3,
-- 0xff},
-- {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
-- 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
-- 0x08,0x00,0x0f,0x00},
-- {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
-- 0xff} },
-- {0x50,0x18,0x08,0x1000, /* 0x02 */
-- {0x01,0x03,0x00,0x02},
-- 0x63,
-- {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
-- 0x00,0xc7,0x06,0x07,0x00,0x00,0x00,0x00,
-- 0x9c,0x8e,0x8f,0x28,0x1f,0x96,0xb9,0xa3,
-- 0xff},
-- {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
-- 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
-- 0x08,0x00,0x0f,0x00},
-- {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
-- 0xff} },
-- {0x50,0x18,0x08,0x1000, /* 0x03 */
-- {0x01,0x03,0x00,0x02},
-- 0x63,
-- {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
-- 0x00,0xc7,0x06,0x07,0x00,0x00,0x00,0x00,
-- 0x9c,0x8e,0x8f,0x28,0x1f,0x96,0xb9,0xa3,
-- 0xff},
-- {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
-- 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
-- 0x08,0x00,0x0f,0x00},
-- {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
-- 0xff} },
-- {0x28,0x18,0x08,0x4000, /* 0x04 */
-- {0x09,0x03,0x00,0x02},
-- 0x63,
-- {0x2d,0x27,0x28,0x90,0x2b,0x80,0xbf,0x1f,
-- 0x00,0xc1,0x00,0x00,0x00,0x00,0x00,0x00,
-- 0x9c,0x8e,0x8f,0x14,0x00,0x96,0xb9,0xa2,
-- 0xff},
-- {0x00,0x13,0x15,0x17,0x02,0x04,0x06,0x07,
-- 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
-- 0x01,0x00,0x03,0x00},
-- {0x00,0x00,0x00,0x00,0x00,0x30,0x0f,0x00,
-- 0xff} },
-- {0x28,0x18,0x08,0x4000, /* 0x05 */
-- {0x09,0x03,0x00,0x02},
-- 0x63,
-- {0x2d,0x27,0x28,0x90,0x2b,0x80,0xbf,0x1f,
-- 0x00,0xc1,0x00,0x00,0x00,0x00,0x00,0x00,
-- 0x9c,0x8e,0x8f,0x14,0x00,0x96,0xb9,0xa2,
-- 0xff},
-- {0x00,0x13,0x15,0x17,0x02,0x04,0x06,0x07,
-- 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
-- 0x01,0x00,0x03,0x00},
-- {0x00,0x00,0x00,0x00,0x00,0x30,0x0f,0x00,
-- 0xff} },
-- {0x50,0x18,0x08,0x4000, /* 0x06 */
-- {0x01,0x01,0x00,0x06},
-- 0x63,
-- {0x5f,0x4f,0x50,0x82,0x54,0x80,0xbf,0x1f,
-- 0x00,0xc1,0x00,0x00,0x00,0x00,0x00,0x00,
-- 0x9c,0x8e,0x8f,0x28,0x00,0x96,0xb9,0xc2,
-- 0xff},
-- {0x00,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
-- 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
-- 0x01,0x00,0x01,0x00},
-- {0x00,0x00,0x00,0x00,0x00,0x00,0x0d,0x00,
-- 0xff} },
-- {0x50,0x18,0x0e,0x1000, /* 0x07 */
-- {0x00,0x03,0x00,0x03},
-- 0xa6,
-- {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
-- 0x00,0x4d,0x0b,0x0c,0x00,0x00,0x00,0x00,
-- 0x83,0x85,0x5d,0x28,0x0d,0x63,0xba,0xa3,
-- 0xff},
-- {0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,
-- 0x10,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
-- 0x0e,0x00,0x0f,0x08},
-- {0x00,0x00,0x00,0x00,0x00,0x10,0x0a,0x00,
-- 0xff} },
--/* MDA_DAC*/
-- {0x00,0x00,0x00,0x0000, /* 0x08 */
-- {0x00,0x00,0x00,0x15},
-- 0x15,
-- {0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,
-- 0x15,0x15,0x15,0x15,0x15,0x15,0x3f,0x3f,
-- 0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x00,0x00,
-- 0x00},
-- {0x00,0x00,0x00,0x00,0x00,0x15,0x15,0x15,
-- 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,
-- 0x15,0x15,0x15,0x15},
-- {0x15,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
-- 0x3f} },
--/* CGA_DAC*/
-- {0x00,0x10,0x04,0x0114, /* 0x09 */
-- {0x11,0x09,0x15,0x00},
-- 0x10,
-- {0x04,0x14,0x01,0x11,0x09,0x15,0x2a,0x3a,
-- 0x2e,0x3e,0x2b,0x3b,0x2f,0x3f,0x2a,0x3a,
-- 0x2e,0x3e,0x2b,0x3b,0x2f,0x3f,0x00,0x10,
-- 0x04},
-- {0x14,0x01,0x11,0x09,0x15,0x00,0x10,0x04,
-- 0x14,0x01,0x11,0x09,0x15,0x2a,0x3a,0x2e,
-- 0x3e,0x2b,0x3b,0x2f},
-- {0x3f,0x2a,0x3a,0x2e,0x3e,0x2b,0x3b,0x2f,
-- 0x3f} },
--/* EGA_DAC*/
-- {0x00,0x10,0x04,0x0114, /* 0x0a */
-- {0x11,0x05,0x15,0x20},
-- 0x30,
-- {0x24,0x34,0x21,0x31,0x25,0x35,0x08,0x18,
-- 0x0c,0x1c,0x09,0x19,0x0d,0x1d,0x28,0x38,
-- 0x2c,0x3c,0x29,0x39,0x2d,0x3d,0x02,0x12,
-- 0x06},
-- {0x16,0x03,0x13,0x07,0x17,0x22,0x32,0x26,
-- 0x36,0x23,0x33,0x27,0x37,0x0a,0x1a,0x0e,
-- 0x1e,0x0b,0x1b,0x0f},
-- {0x1f,0x2a,0x3a,0x2e,0x3e,0x2b,0x3b,0x2f,
-- 0x3f} },
--/* VGA_DAC*/
-- {0x00,0x10,0x04,0x0114, /* 0x0b */
-- {0x11,0x09,0x15,0x2a},
-- 0x3a,
-- {0x2e,0x3e,0x2b,0x3b,0x2f,0x3f,0x00,0x05,
-- 0x08,0x0b,0x0e,0x11,0x14,0x18,0x1c,0x20,
-- 0x24,0x28,0x2d,0x32,0x38,0x3f,0x00,0x10,
-- 0x1f},
-- {0x2f,0x3f,0x1f,0x27,0x2f,0x37,0x3f,0x2d,
-- 0x31,0x36,0x3a,0x3f,0x00,0x07,0x0e,0x15,
-- 0x1c,0x0e,0x11,0x15},
-- {0x18,0x1c,0x14,0x16,0x18,0x1a,0x1c,0x00,
-- 0x04} },
-- {0x08,0x0c,0x10,0x0a08, /* 0x0c */
-- {0x0c,0x0e,0x10,0x0b},
-- 0x0c,
-- {0x0d,0x0f,0x10,0x10,0x01,0x08,0x00,0x00,
-- 0x00,0x00,0x01,0x00,0x02,0x02,0x01,0x00,
-- 0x04,0x04,0x01,0x00,0x05,0x02,0x05,0x00,
-- 0x06},
-- {0x01,0x06,0x05,0x06,0x00,0x08,0x01,0x08,
-- 0x00,0x07,0x02,0x07,0x06,0x07,0x00,0x00,
-- 0x00,0x00,0x00,0x00},
-- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-- 0x00} },
-- {0x28,0x18,0x08,0x2000, /* 0x0d */
-- {0x09,0x0f,0x00,0x06},
-- 0x63,
-- {0x2d,0x27,0x28,0x90,0x2b,0x80,0xbf,0x1f,
-- 0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,
-- 0x9c,0x8e,0x8f,0x14,0x00,0x96,0xb9,0xe3,
-- 0xff},
-- {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
-- 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
-- 0x01,0x00,0x0f,0x00},
-- {0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x0f,
-- 0xff} },
-- {0x50,0x18,0x08,0x4000, /* 0x0e */
-- {0x01,0x0f,0x00,0x06},
-- 0x63,
-- {0x5f,0x4f,0x50,0x82,0x54,0x80,0xbf,0x1f,
-- 0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,
-- 0x9c,0x8e,0x8f,0x28,0x00,0x96,0xb9,0xe3,
-- 0xff},
-- {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
-- 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
-- 0x01,0x00,0x0f,0x00},
-- {0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x0f,
-- 0xff} },
-- {0x00,0x00,0x00,0x0000, /* 0x0f */ /* TW: Standtable for VGA modes */
-- {0x01,0x0f,0x00,0x0e},
-- 0x23,
-- {0x5f,0x4f,0x50,0x82,0x54,0x80,0x0b,0x3e,
-- 0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
-- 0xea,0x8c,0xdf,0x28,0x40,0xe7,0x04,0xa3,
-- 0xff},
-- {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
-- 0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,
-- 0x01,0x00,0x00,0x00},
-- {0x00,0x00,0x00,0x00,0x00,0x40,0x05,0x0f,
-- 0xff} },
-- {0x4a,0x36,0x00,0x00c0, /* 0x10 */
-- {0x00,0x00,0x00,0x00},
-- 0x00,
-- {0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x3a,
-- 0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,
-- 0x00,0x00,0x1a,0x00,0x57,0x39,0x00,0xc0,
-- 0x00},
-- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-- 0x00,0x00,0x00,0x00},
-- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-- 0x00} },
-- {0x50,0x18,0x0e,0x8000, /* 0x11 */
-- {0x01,0x0f,0x00,0x06},
-- 0xa2,
-- {0x5f,0x4f,0x50,0x82,0x54,0x80,0xbf,0x1f,
-- 0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
-- 0x83,0x85,0x5d,0x28,0x0f,0x63,0xba,0xe3,
-- 0xff},
-- {0x00,0x08,0x00,0x00,0x18,0x18,0x00,0x00,
-- 0x00,0x08,0x00,0x00,0x00,0x18,0x00,0x00,
-- 0x0b,0x00,0x05,0x00},
-- {0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x05,
-- 0xff} },
-- {0x50,0x18,0x0e,0x8000, /* 0x12 */
-- {0x01,0x0f,0x00,0x06},
-- 0xa3,
-- {0x5f,0x4f,0x50,0x82,0x54,0x80,0xbf,0x1f,
-- 0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
-- 0x83,0x85,0x5d,0x28,0x0f,0x63,0xba,0xe3,
-- 0xff},
-- {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
-- 0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
-- 0x01,0x00,0x0f,0x00},
-- {0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x0f,
-- 0xff} },
-- {0x28,0x18,0x0e,0x0800, /* 0x13 */
-- {0x09,0x03,0x00,0x02},
-- 0xa3,
-- {0x2d,0x27,0x28,0x90,0x2b,0xa0,0xbf,0x1f,
-- 0x00,0x4d,0x0b,0x0c,0x00,0x00,0x00,0x00,
-- 0x83,0x85,0x5d,0x14,0x1f,0x63,0xba,0xa3,
-- 0xff},
-- {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
-- 0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
-- 0x08,0x00,0x0f,0x00},
-- {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
-- 0xff} },
-- {0x28,0x18,0x0e,0x0800, /* 0x14 */
-- {0x09,0x03,0x00,0x02},
-- 0xa3,
-- {0x2d,0x27,0x28,0x90,0x2b,0xa0,0xbf,0x1f,
-- 0x00,0x4d,0x0b,0x0c,0x00,0x00,0x00,0x00,
-- 0x83,0x85,0x5d,0x14,0x1f,0x63,0xba,0xa3,
-- 0xff},
-- {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
-- 0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
-- 0x08,0x00,0x0f,0x00},
-- {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
-- 0xff} },
-- {0x50,0x18,0x0e,0x1000, /* 0x15 */
-- {0x01,0x03,0x00,0x02},
-- 0xa3,
-- {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
-- 0x00,0x4d,0x0b,0x0c,0x00,0x00,0x00,0x00,
-- 0x83,0x85,0x5d,0x28,0x1f,0x63,0xba,0xa3,
-- 0xff},
-- {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
-- 0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
-- 0x08,0x00,0x0f,0x00},
-- {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
-- 0xff} },
-- {0x50,0x18,0x0e,0x1000, /* 0x16 */
-- {0x01,0x03,0x00,0x02},
-- 0xa3,
-- {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
-- 0x00,0x4d,0x0b,0x0c,0x00,0x00,0x00,0x00,
-- 0x83,0x85,0x5d,0x28,0x1f,0x63,0xba,0xa3,
-- 0xff},
-- {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
-- 0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
-- 0x08,0x00,0x0f,0x00},
-- {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
-- 0xff} },
-- {0x28,0x18,0x10,0x0800, /* 0x17 */
-- {0x08,0x03,0x00,0x02},
-- 0x67,
-- {0x2d,0x27,0x28,0x90,0x2b,0xa0,0xbf,0x1f,
-- 0x00,0x4f,0x0d,0x0e,0x00,0x00,0x00,0x00,
-- 0x9c,0x8e,0x8f,0x14,0x1f,0x96,0xb9,0xa3,
-- 0xff},
-- {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
-- 0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
-- 0x0c,0x00,0x0f,0x08},
-- {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
-- 0xff} },
-- {0x50,0x18,0x10,0x1000, /* 0x18 */
-- {0x00,0x03,0x00,0x02},
-- 0x67,
-- {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
-- 0x00,0x4f,0x0d,0x0e,0x00,0x00,0x00,0x00,
-- 0x9c,0x8e,0x8f,0x28,0x1f,0x96,0xb9,0xa3,
-- 0xff},
-- {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
-- 0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
-- 0x0c,0x00,0x0f,0x08},
-- {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
-- 0xff} },
-- {0x50,0x18,0x10,0x1000, /* 0x19 */
-- {0x00,0x03,0x00,0x02},
-- 0x66,
-- {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
-- 0x00,0x4f,0x0d,0x0e,0x00,0x00,0x00,0x00,
-- 0x9c,0x8e,0x8f,0x28,0x0f,0x96,0xb9,0xa3,
-- 0xff},
-- {0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,
-- 0x10,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
-- 0x0e,0x00,0x0f,0x08},
-- {0x00,0x00,0x00,0x00,0x00,0x10,0x0a,0x00,
-- 0xff} },
-- {0x50,0x1d,0x10,0xa000, /* 0x1a */
-- {0x01,0x0f,0x00,0x06},
-- 0xe3,
-- {0x5f,0x4f,0x50,0x82,0x54,0x80,0x0b,0x3e,
-- 0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
-- 0xea,0x8c,0xdf,0x28,0x00,0xe7,0x04,0xc3,
-- 0xff},
-- {0x00,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
-- 0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
-- 0x01,0x00,0x0f,0x00},
-- {0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x01,
-- 0xff} },
-- {0x50,0x1d,0x10,0xa000, /* 0x1b */
-- {0x01,0x0f,0x00,0x06},
-- 0xe3,
-- {0x5f,0x4f,0x50,0x82,0x54,0x80,0x0b,0x3e,
-- 0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
-- 0xea,0x8c,0xdf,0x28,0x00,0xe7,0x04,0xe3,
-- 0xff},
-- {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
-- 0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
-- 0x01,0x00,0x0f,0x00},
-- {0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x0f,
-- 0xff} },
-- {0x28,0x18,0x08,0x2000, /* 0x1c */
-- {0x01,0x0f,0x00,0x0e},
-- 0x63,
-- {0x5f,0x4f,0x50,0x82,0x54,0x80,0xbf,0x1f,
-- 0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,
-- 0x9c,0x8e,0x8f,0x28,0x40,0x96,0xb9,0xa3,
-- 0xff},
-- {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
-- 0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,
-- 0x41,0x00,0x0f,0x00},
-- {0x00,0x00,0x00,0x00,0x00,0x40,0x05,0x0f,
-- 0xff} }
--};
--
- typedef struct _SiS300_ExtStruct
- {
-- UCHAR Ext_ModeID;
-+ UCHAR Ext_ModeID;
- USHORT Ext_ModeFlag;
- USHORT Ext_ModeInfo;
-- USHORT Ext_Point;
- USHORT Ext_VESAID;
-- UCHAR Ext_VESAMEMSize;
-- UCHAR Ext_RESINFO;
-- UCHAR VB_ExtTVFlickerIndex;
-- UCHAR VB_ExtTVEdgeIndex;
-- UCHAR VB_ExtTVYFilterIndex;
-- UCHAR REFindex;
-+ UCHAR Ext_RESINFO;
-+ UCHAR VB_ExtTVFlickerIndex;
-+ UCHAR VB_ExtTVEdgeIndex;
-+ UCHAR VB_ExtTVYFilterIndex;
-+ UCHAR REFindex;
- } SiS300_ExtStruct;
-
- static const SiS300_ExtStruct SiS300_EModeIDTable[] =
- {
-- {0x6a,0x2212,0x47,0x3563,0x0102,0x08,0x07,0x00,0x00,0x00,0x00}, /* 800x600x? */
-- {0x2e,0x0a1b,0x36,0x3539,0x0101,0x08,0x06,0x00,0x00,0x00,0x08},
-- {0x2f,0x021b,0x35,0x3532,0x0100,0x08,0x05,0x00,0x00,0x00,0x10}, /* 640x400x8 */
-- {0x30,0x2a1b,0x47,0x3563,0x0103,0x08,0x07,0x00,0x00,0x00,0x00},
-- {0x31,0x0a1b,0xad,0x3630,0x0000,0x08,0x0c,0x00,0x00,0x00,0x11}, /* 720x480x8 */
-- {0x32,0x2a1b,0xae,0x3637,0x0000,0x08,0x0d,0x00,0x00,0x00,0x12}, /* 720x576x8 */
-- {0x33,0x0a1d,0xad,0x3630,0x0000,0x08,0x0c,0x00,0x00,0x00,0x11}, /* 720x480x16 */
-- {0x34,0x2a1d,0xae,0x3637,0x0000,0x08,0x0d,0x00,0x00,0x00,0x12}, /* 720x576x16 */
-- {0x35,0x0a1f,0xad,0x3630,0x0000,0x08,0x0c,0x00,0x00,0x00,0x11}, /* 720x480x32 */
-- {0x36,0x2a1f,0xae,0x3637,0x0000,0x08,0x0d,0x00,0x00,0x00,0x12}, /* 720x576x32 */
-- {0x37,0x0212,0x58,0x358d,0x0104,0x08,0x08,0x00,0x00,0x00,0x13}, /* 1024x768x? */
-- {0x38,0x0a1b,0x58,0x358d,0x0105,0x08,0x08,0x00,0x00,0x00,0x13}, /* 1024x768x8 */
-- {0x3a,0x0e3b,0x69,0x35be,0x0107,0x08,0x09,0x00,0x00,0x00,0x1a}, /* 1280x1024x8 */
-- {0x3c,0x063b,0x7a,0x35d4,0x0130,0x08,0x0a,0x00,0x00,0x00,0x1e},
-- {0x3d,0x067d,0x7a,0x35d4,0x0131,0x08,0x0a,0x00,0x00,0x00,0x1e},
-- {0x40,0x921c,0x00,0x3516,0x010d,0x08,0x00,0x00,0x00,0x00,0x23},
-- {0x41,0x921d,0x00,0x3516,0x010e,0x08,0x00,0x00,0x00,0x00,0x23},
-- {0x43,0x0a1c,0x36,0x3539,0x0110,0x08,0x06,0x00,0x00,0x00,0x08},
-- {0x44,0x0a1d,0x36,0x3539,0x0111,0x08,0x06,0x00,0x00,0x00,0x08},
-- {0x46,0x2a1c,0x47,0x3563,0x0113,0x08,0x07,0x00,0x00,0x00,0x00}, /* 800x600 */
-- {0x47,0x2a1d,0x47,0x3563,0x0114,0x08,0x07,0x00,0x00,0x00,0x00}, /* 800x600 */
-- {0x49,0x0a3c,0x58,0x358d,0x0116,0x08,0x08,0x00,0x00,0x00,0x13},
-- {0x4a,0x0a3d,0x58,0x358d,0x0117,0x08,0x08,0x00,0x00,0x00,0x13},
-- {0x4c,0x0e7c,0x69,0x35be,0x0119,0x08,0x09,0x00,0x00,0x00,0x1a},
-- {0x4d,0x0e7d,0x69,0x35be,0x011a,0x08,0x09,0x00,0x00,0x00,0x1a},
-- {0x50,0x921b,0x01,0x351d,0x0132,0x08,0x01,0x00,0x00,0x00,0x24},
-- {0x51,0xb21b,0x13,0x3524,0x0133,0x08,0x03,0x00,0x00,0x00,0x25}, /* 400x300 */
-- {0x52,0x921b,0x24,0x352b,0x0134,0x08,0x04,0x00,0x00,0x00,0x26},
-- {0x56,0x921d,0x01,0x351d,0x0135,0x08,0x01,0x00,0x00,0x00,0x24},
-- {0x57,0xb21d,0x13,0x3524,0x0136,0x08,0x03,0x00,0x00,0x00,0x25}, /* 400x300 */
-- {0x58,0x921d,0x24,0x352b,0x0137,0x08,0x04,0x00,0x00,0x00,0x26},
-- {0x59,0x921b,0x00,0x3516,0x0138,0x08,0x00,0x00,0x00,0x00,0x23},
-- {0x5c,0x921f,0x24,0x352b,0x0000,0x08,0x04,0x00,0x00,0x00,0x26}, /* TW: inserted 512x384x32 */
-- {0x5d,0x021d,0x35,0x3532,0x0139,0x08,0x05,0x00,0x00,0x00,0x10}, /* 640x400x16 */
-- {0x5e,0x021f,0x35,0x3532,0x0000,0x08,0x05,0x00,0x00,0x00,0x10}, /* TW: inserted 640x400x32 */
-- {0x62,0x0a3f,0x36,0x3539,0x013a,0x08,0x06,0x00,0x00,0x00,0x08},
-- {0x63,0x2a3f,0x47,0x3563,0x013b,0x08,0x07,0x00,0x00,0x00,0x00}, /* 800x600 */
-- {0x64,0x0a7f,0x58,0x358d,0x013c,0x08,0x08,0x00,0x00,0x00,0x13},
-- {0x65,0x0eff,0x69,0x35be,0x013d,0x08,0x09,0x00,0x00,0x00,0x1a},
-- {0x66,0x06ff,0x7a,0x35d4,0x013e,0x08,0x0a,0x00,0x00,0x00,0x1e},
-- {0x68,0x067b,0x8b,0x35ef,0x013f,0x08,0x0b,0x00,0x00,0x00,0x27},
-- {0x69,0x06fd,0x8b,0x35ef,0x0140,0x08,0x0b,0x00,0x00,0x00,0x27},
-- {0x6b,0x07ff,0x8b,0x35ef,0x0000,0x10,0x0b,0x00,0x00,0x00,0x27},
-- {0x6c,0x067b,0x9c,0x35f6,0x0000,0x08,0x11,0x00,0x00,0x00,0x28}, /* TW: 2048x1536x8 - not in BIOS! */
-- {0x6d,0x06fd,0x9c,0x35f6,0x0000,0x10,0x11,0x00,0x00,0x00,0x28}, /* TW: 2048x1536x16 - not in BIOS! */
-- {0x6e,0x0a3b,0x6f,0x35b2,0x0000,0x08,0x0e,0x00,0x00,0x00,0x29}, /* 1280x960x8 */
-- {0x6f,0x0a7d,0x6f,0x35b2,0x0000,0x08,0x0e,0x00,0x00,0x00,0x29}, /* 1280x960x16 */
-- /* TW: 16:9 modes copied from 310/325 series - not in ANY BIOS */
-- {0x70,0x2a1b,0x40,0x3b52,0x0000,0x08,0x12,0x00,0x00,0x07,0x2d}, /* 800x480x8 */
-- {0x71,0x0a1b,0x51,0x3b63,0x0000,0x08,0x13,0x00,0x00,0x00,0x30}, /* 1024x576x8 */
-- {0x74,0x0a1d,0x51,0x3b63,0x0000,0x08,0x13,0x00,0x00,0x00,0x30}, /* 1024x576x16 */
-- {0x75,0x0e3d,0x62,0x3b74,0x0000,0x08,0x14,0x00,0x00,0x00,0x33}, /* 1280x720x16 */
-- {0x76,0x2a1f,0x40,0x3b52,0x0000,0x08,0x12,0x00,0x00,0x07,0x2d}, /* 800x480x32 */
-- {0x77,0x0a3f,0x51,0x3b63,0x0000,0x08,0x13,0x00,0x00,0x00,0x30}, /* 1024x576x32 */
-- {0x78,0x0eff,0x62,0x3b74,0x0000,0x08,0x14,0x00,0x00,0x00,0x33}, /* 1280x720x32 */
-- {0x79,0x0e3b,0x62,0x3b74,0x0000,0x08,0x14,0x00,0x00,0x00,0x33}, /* 1280x720x8 */
-- {0x7a,0x2a1d,0x40,0x3b52,0x0000,0x08,0x12,0x00,0x00,0x07,0x2d}, /* 800x480x16 */
-- /* TW: End of new 16:9 modes */
-- {0x7b,0x0aff,0x6f,0x35b2,0x0000,0x08,0x0e,0x00,0x00,0x00,0x29}, /* 1280x960x32 */
-- {0x20,0x0a1b,0x54,0x0000,0x0000,0x08,0x0f,0x00,0x00,0x00,0x2b}, /* 1024x600 */
-- {0x21,0x0a3d,0x54,0x0000,0x0000,0x08,0x0f,0x00,0x00,0x00,0x2b},
-- {0x22,0x0a7f,0x54,0x0000,0x0000,0x08,0x0f,0x00,0x00,0x00,0x2b},
-- {0x23,0x0a1b,0xc5,0x0000,0x0000,0x08,0x10,0x00,0x00,0x00,0x2c}, /* 1152x768 */
-- {0x24,0x0a3d,0xc5,0x431d,0x0000,0x08,0x10,0x00,0x00,0x00,0x2c},
-- {0x25,0x0a7f,0xc5,0x431d,0x0000,0x08,0x10,0x00,0x00,0x00,0x2c},
-- {0x29,0x0e1b,0xc5,0x0000,0x0000,0x08,0x15,0x00,0x00,0x00,0x36}, /* TW: NEW 1152x864 - not in BIOS */
-- {0x2a,0x0e3d,0xc5,0x0000,0x0000,0x08,0x15,0x00,0x00,0x00,0x36},
-- {0x2b,0x0e7f,0xc5,0x0000,0x0000,0x08,0x15,0x00,0x00,0x00,0x36},
-- {0x39,0x2a1b,0xd6,0x0000,0x0000,0x08,0x16,0x00,0x00,0x00,0x38}, /* TW: NEW 848x480 - not in BIOS */
-- {0x3b,0x2a3d,0xd6,0x0000,0x0000,0x08,0x16,0x00,0x00,0x00,0x38},
-- {0x3e,0x2a7f,0xd6,0x0000,0x0000,0x08,0x16,0x00,0x00,0x00,0x38},
-- {0x3f,0x2a1b,0xd7,0x0000,0x0000,0x08,0x17,0x00,0x00,0x00,0x3a}, /* TW: NEW 856x480 - not in BIOS */
-- {0x42,0x2a3d,0xd7,0x0000,0x0000,0x08,0x17,0x00,0x00,0x00,0x3a},
-- {0x45,0x2a7f,0xd7,0x0000,0x0000,0x08,0x17,0x00,0x00,0x00,0x3a},
-- {0x48,0x223b,0xe8,0x0000,0x0000,0x08,0x18,0x00,0x00,0x00,0x3c}, /* TW: NEW 1360x768 - not in BIOS */
-- {0x4b,0x227d,0xe8,0x0000,0x0000,0x08,0x18,0x00,0x00,0x00,0x3c},
-- {0x4e,0x22ff,0xe8,0x0000,0x0000,0x08,0x18,0x00,0x00,0x00,0x3c},
-- {0xff,0x0000,0x00,0x0000,0xffff,0x00,0x00,0x00,0x00,0x00,0x00}
-+ {0x6a,0x2212,0x0407,0x0102,SIS_RI_800x600, 0x00,0x00,0x00,0x00}, /* 800x600x? */
-+ {0x2e,0x0a1b,0x0306,0x0101,SIS_RI_640x480, 0x00,0x00,0x00,0x08},
-+ {0x2f,0x021b,0x0305,0x0100,SIS_RI_640x400, 0x00,0x00,0x00,0x10}, /* 640x400x8 */
-+ {0x30,0x2a1b,0x0407,0x0103,SIS_RI_800x600, 0x00,0x00,0x00,0x00},
-+ {0x31,0x0a1b,0x0a0d,0x0000,SIS_RI_720x480, 0x00,0x00,0x00,0x11}, /* 720x480x8 */
-+ {0x32,0x2a1b,0x0a0e,0x0000,SIS_RI_720x576, 0x00,0x00,0x00,0x12}, /* 720x576x8 */
-+ {0x33,0x0a1d,0x0a0d,0x0000,SIS_RI_720x480, 0x00,0x00,0x00,0x11}, /* 720x480x16 */
-+ {0x34,0x2a1d,0x0a0e,0x0000,SIS_RI_720x576, 0x00,0x00,0x00,0x12}, /* 720x576x16 */
-+ {0x35,0x0a1f,0x0a0d,0x0000,SIS_RI_720x480, 0x00,0x00,0x00,0x11}, /* 720x480x32 */
-+ {0x36,0x2a1f,0x0a0e,0x0000,SIS_RI_720x576, 0x00,0x00,0x00,0x12}, /* 720x576x32 */
-+ {0x37,0x0212,0x0508,0x0104,SIS_RI_1024x768, 0x00,0x00,0x00,0x13}, /* 1024x768x? */
-+ {0x38,0x0a1b,0x0508,0x0105,SIS_RI_1024x768, 0x00,0x00,0x00,0x13}, /* 1024x768x8 */
-+ {0x3a,0x0e3b,0x0609,0x0107,SIS_RI_1280x1024,0x00,0x00,0x00,0x1a}, /* 1280x1024x8 */
-+ {0x3c,0x063b,0x070a,0x0130,SIS_RI_1600x1200,0x00,0x00,0x00,0x1e},
-+ {0x3d,0x067d,0x070a,0x0131,SIS_RI_1600x1200,0x00,0x00,0x00,0x1e},
-+ {0x40,0x921c,0x0000,0x010d,SIS_RI_320x200, 0x00,0x00,0x00,0x23}, /* 320x200x15 */
-+ {0x41,0x921d,0x0000,0x010e,SIS_RI_320x200, 0x00,0x00,0x00,0x23}, /* 320x200x16 */
-+ {0x43,0x0a1c,0x0306,0x0110,SIS_RI_640x480, 0x00,0x00,0x00,0x08},
-+ {0x44,0x0a1d,0x0306,0x0111,SIS_RI_640x480, 0x00,0x00,0x00,0x08},
-+ {0x46,0x2a1c,0x0407,0x0113,SIS_RI_800x600, 0x00,0x00,0x00,0x00}, /* 800x600x15 */
-+ {0x47,0x2a1d,0x0407,0x0114,SIS_RI_800x600, 0x00,0x00,0x00,0x00}, /* 800x600x16 */
-+ {0x49,0x0a3c,0x0508,0x0116,SIS_RI_1024x768, 0x00,0x00,0x00,0x13},
-+ {0x4a,0x0a3d,0x0508,0x0117,SIS_RI_1024x768, 0x00,0x00,0x00,0x13},
-+ {0x4c,0x0e7c,0x0609,0x0119,SIS_RI_1280x1024,0x00,0x00,0x00,0x1a},
-+ {0x4d,0x0e7d,0x0609,0x011a,SIS_RI_1280x1024,0x00,0x00,0x00,0x1a},
-+ {0x50,0x921b,0x0001,0x0132,SIS_RI_320x240, 0x00,0x00,0x00,0x24}, /* 320x240x8 */
-+ {0x51,0xb21b,0x0103,0x0133,SIS_RI_400x300, 0x00,0x00,0x00,0x25}, /* 400x300x8 */
-+ {0x52,0x921b,0x0204,0x0134,SIS_RI_512x384, 0x00,0x00,0x00,0x26}, /* 512x384x8 */
-+ {0x56,0x921d,0x0001,0x0135,SIS_RI_320x240, 0x00,0x00,0x00,0x24}, /* 320x240x16 */
-+ {0x57,0xb21d,0x0103,0x0136,SIS_RI_400x300, 0x00,0x00,0x00,0x25}, /* 400x300x16 */
-+ {0x58,0x921d,0x0204,0x0137,SIS_RI_512x384, 0x00,0x00,0x00,0x26}, /* 512x384x16 */
-+ {0x59,0x921b,0x0000,0x0138,SIS_RI_320x200, 0x00,0x00,0x00,0x23}, /* 320x200x8 */
-+ {0x5c,0x921f,0x0204,0x0000,SIS_RI_512x384, 0x00,0x00,0x00,0x26}, /* 512x384x32 */
-+ {0x5d,0x021d,0x0305,0x0139,SIS_RI_640x400, 0x00,0x00,0x00,0x10}, /* 640x400x16 */
-+ {0x5e,0x021f,0x0305,0x0000,SIS_RI_640x400, 0x00,0x00,0x00,0x10}, /* 640x400x32 */
-+ {0x62,0x0a3f,0x0306,0x013a,SIS_RI_640x480, 0x00,0x00,0x00,0x08},
-+ {0x63,0x2a3f,0x0407,0x013b,SIS_RI_800x600, 0x00,0x00,0x00,0x00}, /* 800x600x32 */
-+ {0x64,0x0a7f,0x0508,0x013c,SIS_RI_1024x768, 0x00,0x00,0x00,0x13},
-+ {0x65,0x0eff,0x0609,0x013d,SIS_RI_1280x1024,0x00,0x00,0x00,0x1a},
-+ {0x66,0x06ff,0x070a,0x013e,SIS_RI_1600x1200,0x00,0x00,0x00,0x1e},
-+ {0x68,0x067b,0x080b,0x013f,SIS_RI_1920x1440,0x00,0x00,0x00,0x27},
-+ {0x69,0x06fd,0x080b,0x0140,SIS_RI_1920x1440,0x00,0x00,0x00,0x27},
-+ {0x6b,0x07ff,0x080b,0x0000,SIS_RI_1920x1440,0x00,0x00,0x00,0x27},
-+ {0x6c,0x067b,0x090c,0x0000,SIS_RI_2048x1536,0x00,0x00,0x00,0x28}, /* 2048x1536x8 - not in BIOS! */
-+ {0x6d,0x06fd,0x090c,0x0000,SIS_RI_2048x1536,0x00,0x00,0x00,0x28}, /* 2048x1536x16 - not in BIOS! */
-+ {0x70,0x2a1b,0x0400,0x0000,SIS_RI_800x480, 0x00,0x00,0x07,0x2d}, /* 800x480x8 */
-+ {0x71,0x0a1b,0x0501,0x0000,SIS_RI_1024x576, 0x00,0x00,0x00,0x30}, /* 1024x576x8 */
-+ {0x74,0x0a1d,0x0501,0x0000,SIS_RI_1024x576, 0x00,0x00,0x00,0x30}, /* 1024x576x16 */
-+ {0x75,0x0e3d,0x0602,0x0000,SIS_RI_1280x720, 0x00,0x00,0x00,0x33}, /* 1280x720x16 */
-+ {0x76,0x2a1f,0x0400,0x0000,SIS_RI_800x480, 0x00,0x00,0x07,0x2d}, /* 800x480x32 */
-+ {0x77,0x0a3f,0x0501,0x0000,SIS_RI_1024x576, 0x00,0x00,0x00,0x30}, /* 1024x576x32 */
-+ {0x78,0x0eff,0x0602,0x0000,SIS_RI_1280x720, 0x00,0x00,0x00,0x33}, /* 1280x720x32 */
-+ {0x79,0x0e3b,0x0602,0x0000,SIS_RI_1280x720, 0x00,0x00,0x00,0x33}, /* 1280x720x8 */
-+ {0x7a,0x2a1d,0x0400,0x0000,SIS_RI_800x480, 0x00,0x00,0x07,0x2d}, /* 800x480x16 */
-+ {0x7c,0x0a3b,0x060f,0x0000,SIS_RI_1280x960, 0x00,0x00,0x00,0x29}, /* 1280x960x8 */
-+ {0x7d,0x0a7d,0x060f,0x0000,SIS_RI_1280x960, 0x00,0x00,0x00,0x29}, /* 1280x960x16 */
-+ {0x7e,0x0aff,0x060f,0x0000,SIS_RI_1280x960, 0x00,0x00,0x00,0x29}, /* 1280x960x32 */
-+ {0x20,0x0a1b,0x0504,0x0000,SIS_RI_1024x600, 0x00,0x00,0x00,0x2b}, /* 1024x600 */
-+ {0x21,0x0a3d,0x0504,0x0000,SIS_RI_1024x600, 0x00,0x00,0x00,0x2b},
-+ {0x22,0x0a7f,0x0504,0x0000,SIS_RI_1024x600, 0x00,0x00,0x00,0x2b},
-+ {0x23,0x0a1b,0x0c05,0x0000,SIS_RI_1152x768, 0x00,0x00,0x00,0x2c}, /* 1152x768 */
-+ {0x24,0x0a3d,0x0c05,0x0000,SIS_RI_1152x768, 0x00,0x00,0x00,0x2c},
-+ {0x25,0x0a7f,0x0c05,0x0000,SIS_RI_1152x768, 0x00,0x00,0x00,0x2c},
-+ {0x29,0x0e1b,0x0c05,0x0000,SIS_RI_1152x864, 0x00,0x00,0x00,0x36}, /* 1152x864 */
-+ {0x2a,0x0e3d,0x0c05,0x0000,SIS_RI_1152x864, 0x00,0x00,0x00,0x36},
-+ {0x2b,0x0e7f,0x0c05,0x0000,SIS_RI_1152x864, 0x00,0x00,0x00,0x36},
-+ {0x39,0x2a1b,0x0d06,0x0000,SIS_RI_848x480, 0x00,0x00,0x00,0x38}, /* 848x480 */
-+ {0x3b,0x2a3d,0x0d06,0x0000,SIS_RI_848x480, 0x00,0x00,0x00,0x38},
-+ {0x3e,0x2a7f,0x0d06,0x0000,SIS_RI_848x480, 0x00,0x00,0x00,0x38},
-+ {0x3f,0x2a1b,0x0d07,0x0000,SIS_RI_856x480, 0x00,0x00,0x00,0x3a}, /* 856x480 */
-+ {0x42,0x2a3d,0x0d07,0x0000,SIS_RI_856x480, 0x00,0x00,0x00,0x3a},
-+ {0x45,0x2a7f,0x0d07,0x0000,SIS_RI_856x480, 0x00,0x00,0x00,0x3a},
-+ {0x48,0x223b,0x0e08,0x0000,SIS_RI_1360x768, 0x00,0x00,0x00,0x3c}, /* 1360x768 */
-+ {0x4b,0x227d,0x0e08,0x0000,SIS_RI_1360x768, 0x00,0x00,0x00,0x3c},
-+ {0x4e,0x22ff,0x0e08,0x0000,SIS_RI_1360x768, 0x00,0x00,0x00,0x3c},
-+ {0x4f,0x921f,0x0000,0x0000,SIS_RI_320x200, 0x00,0x00,0x00,0x23}, /* 320x200x32 */
-+ {0x53,0x921f,0x0001,0x0000,SIS_RI_320x240, 0x00,0x00,0x00,0x24}, /* 320x240x32 */
-+ {0x54,0xb21f,0x0103,0x0000,SIS_RI_400x300, 0x00,0x00,0x00,0x25}, /* 400x300x32 */
-+ {0x55,0x2e3b,0x0609,0x0000,SIS_RI_1280x768, 0x00,0x00,0x00,0x3d}, /* 1280x768 */
-+ {0x5a,0x2e7d,0x0609,0x0000,SIS_RI_1280x768, 0x00,0x00,0x00,0x3d},
-+ {0x5b,0x2eff,0x0609,0x0000,SIS_RI_1280x768, 0x00,0x00,0x00,0x3d},
-+ {0x5f,0x2a1b,0x0f0e,0x0000,SIS_RI_768x576, 0x00,0x00,0x00,0x3e}, /* 768x576x8 */
-+ {0x60,0x2a1d,0x0f0e,0x0000,SIS_RI_768x576, 0x00,0x00,0x00,0x3e}, /* 768x576x16 */
-+ {0x61,0x2a1f,0x0f0e,0x0000,SIS_RI_768x576, 0x00,0x00,0x00,0x3e}, /* 768x576x32 */
-+ {0x67,0x2e3b,0x0e08,0x0000,SIS_RI_1360x1024,0x00,0x00,0x00,0x3f}, /* 1360x1024x8 (BARCO) */
-+ {0x6f,0x2e7d,0x0e08,0x0000,SIS_RI_1360x1024,0x00,0x00,0x00,0x3f}, /* 1360x1024x16 (BARCO) */
-+ {0x72,0x2eff,0x0e08,0x0000,SIS_RI_1360x1024,0x00,0x00,0x00,0x3f}, /* 1360x1024x32 (BARCO) */
-+ {0xff,0x0000,0x0000,0xffff,0x00, 0x00,0x00,0x00,0x00}
- };
-
- typedef struct _SiS300_Ext2Struct
-@@ -514,76 +176,77 @@ typedef struct _SiS300_Ext2Struct
- UCHAR ModeID;
- USHORT XRes;
- USHORT YRes;
-- USHORT ROM_OFFSET;
- } SiS300_Ext2Struct;
-
- static const SiS300_Ext2Struct SiS300_RefIndex[] =
- { /* TW: Don't ever insert anything here, table is indexed */
-- {0x085f,0x0d,0x03,0x05,0x6a, 800, 600,0x3563}, /* 00 */
-- {0x0467,0x0e,0x44,0x05,0x6a, 800, 600,0x3568}, /* 01 */
-- {0x0067,0x0f,0x07,0x48,0x6a, 800, 600,0x356d}, /* 02 - CRT1CRTC was 0x4f */
-- {0x0067,0x10,0x06,0x8b,0x6a, 800, 600,0x3572}, /* 03 */
-- {0x0147,0x11,0x08,0x00,0x6a, 800, 600,0x3577}, /* 04 */
-- {0x0147,0x12,0x0c,0x00,0x6a, 800, 600,0x357c}, /* 05 */
-- {0x0047,0x11,0x4e,0x00,0x6a, 800, 600,0x3581}, /* 06 - CRT1CRTC was 0x51 */
-- {0x0047,0x11,0x13,0x00,0x6a, 800, 600,0x3586}, /* 07 */
-- {0xc85f,0x05,0x00,0x04,0x2e, 640, 480,0x3539}, /* 08 */
-- {0xc067,0x06,0x02,0x04,0x2e, 640, 480,0x353e}, /* 09 */
-- {0xc067,0x07,0x02,0x47,0x2e, 640, 480,0x3543}, /* 0a */
-- {0xc067,0x08,0x03,0x8a,0x2e, 640, 480,0x3548}, /* 0b */
-- {0xc047,0x09,0x05,0x00,0x2e, 640, 480,0x354d}, /* 0c */
-- {0xc047,0x0a,0x08,0x00,0x2e, 640, 480,0x3552}, /* 0d */
-- {0xc047,0x0b,0x0a,0x00,0x2e, 640, 480,0x3557}, /* 0e */
-- {0xc047,0x0c,0x10,0x00,0x2e, 640, 480,0x355c}, /* 0f */
-- {0x487f,0x04,0x00,0x00,0x2f, 640, 400,0x3532}, /* 10 */
-- {0xc00f,0x31,0x01,0x06,0x31, 720, 480,0x3630}, /* 11 */
-- {0x000f,0x32,0x03,0x06,0x32, 720, 576,0x3637}, /* 12 */
-- {0x0187,0x15,0x05,0x00,0x37,1024, 768,0x358d}, /* 13 */
-- {0xc877,0x16,0x09,0x06,0x37,1024, 768,0x3592}, /* 14 */
-- {0xc067,0x17,0x0b,0x49,0x37,1024, 768,0x3597}, /* 15 - CRT1CRTC was 0x97 */
-- {0x0267,0x18,0x0d,0x00,0x37,1024, 768,0x359c}, /* 16 */
-- {0x0047,0x19,0x11,0x8c,0x37,1024, 768,0x35a1}, /* 17 - CRT1CRTC was 0x59 */
-- {0x0047,0x1a,0x52,0x00,0x37,1024, 768,0x35a6}, /* 18 */
-- {0x0007,0x1b,0x16,0x00,0x37,1024, 768,0x35ab}, /* 19 - CRT1CRTC was 0x5b */
-- {0x0387,0x1c,0x4d,0x00,0x3a,1280,1024,0x35be}, /* 1a - CRT1CRTC was 0x5c */
-- {0x0077,0x1d,0x14,0x07,0x3a,1280,1024,0x35c3}, /* 1b */
-- {0x0047,0x1e,0x17,0x00,0x3a,1280,1024,0x35c8}, /* 1c */
-- {0x0007,0x1f,0x98,0x00,0x3a,1280,1024,0x35cd}, /* 1d */
-- {0x0007,0x20,0x59,0x00,0x3c,1600,1200,0x35d4}, /* 1e - CRT1CRTC was 0x60 */
-- {0x0007,0x21,0x5a,0x00,0x3c,1600,1200,0x35d9}, /* 1f */
-- {0x0007,0x22,0x1b,0x00,0x3c,1600,1200,0x35de}, /* 20 */
-- {0x0007,0x23,0x1d,0x00,0x3c,1600,1200,0x35e3}, /* 21 - CRT1CRTC was 0x63 */
-- {0x0007,0x24,0x1e,0x00,0x3c,1600,1200,0x35e8}, /* 22 */
-- {0x407f,0x00,0x00,0x00,0x40, 320, 200,0x3516}, /* 23 */
-- {0xc07f,0x01,0x00,0x04,0x50, 320, 240,0x351d}, /* 24 */
-- {0x0077,0x02,0x04,0x05,0x51, 400, 300,0x3524}, /* 25 */
-- {0xc877,0x03,0x09,0x06,0x52, 512, 384,0x352b}, /* 26 */ /* was c077 */
-- {0x8207,0x25,0x1f,0x00,0x68,1920,1440,0x35ef}, /* 27 */
-- {0x0007,0x26,0x20,0x00,0x6c,2048,1536,0x35f6}, /* 28 */
-- {0x0067,0x27,0x14,0x08,0x6e,1280, 960,0x35b7}, /* 29 - TW: 1280x960-60 */
-- {0x0027,0x45,0x3c,0x08,0x6e,1280, 960,0x35b7}, /* 2a - TW: 1280x960-85 */
-- {0xc077,0x33,0x09,0x06,0x20,1024, 600,0x0000}, /* 2b */
-- {0xc077,0x34,0x0b,0x06,0x23,1152, 768,0x0000}, /* 2c */ /* VCLK 0x09 */
-- {0x0057,0x35,0x27,0x08,0x70, 800, 480,0x3b52}, /* 2d - TW: 16:9 modes */
-- {0x0047,0x36,0x37,0x08,0x70, 800, 480,0x3b57}, /* 2e */
-- {0x0047,0x37,0x08,0x08,0x70, 800, 480,0x3b5c}, /* 2f */
-- {0x0057,0x38,0x09,0x09,0x71,1024, 576,0x3b63}, /* 30 */
-- {0x0047,0x39,0x38,0x09,0x71,1024, 576,0x3b68}, /* 31 */
-- {0x0047,0x3a,0x11,0x09,0x71,1024, 576,0x3b6d}, /* 32 */
-- {0x0057,0x3b,0x39,0x0a,0x75,1280, 720,0x3b74}, /* 33 */
-- {0x0047,0x3c,0x3a,0x0a,0x75,1280, 720,0x3b79}, /* 34 */
-- {0x0007,0x3d,0x3b,0x0a,0x75,1280, 720,0x3b7e}, /* 35 - TW: END of 16:9 modes */
-- {0x0047,0x3e,0x34,0x06,0x29,1152, 864,0x0000}, /* 36 TW: 1152x864-75Hz - Non-BIOS, new */
-- {0x0047,0x44,0x3a,0x06,0x29,1152, 864,0x0000}, /* 37 TW: 1152x864-85Hz - Non-BIOS, new */
-- {0x00c7,0x3f,0x28,0x00,0x39, 848, 480,0x0000}, /* 38 TW: 848x480-38Hzi - Non-BIOS, new */
-- {0xc047,0x40,0x3d,0x00,0x39, 848, 480,0x0000}, /* 39 TW: 848x480-60Hz - Non-BIOS, new */
-- {0x00c7,0x41,0x28,0x00,0x3f, 856, 480,0x0000}, /* 3a TW: 856x480-38Hzi - Non-BIOS, new */
-- {0xc047,0x42,0x28,0x00,0x3f, 856, 480,0x0000}, /* 3b TW: 856x480-60Hz - Non-BIOS, new */
-- {0x0047,0x43,0x3e,0x00,0x48,1360, 768,0x0000}, /* 3c TW: 1360x768-60Hz - Non-BIOS, new */
-- {0xffff,0,0,0,0,0,0,0}
-+ {0x085f,0x0d,0x03,0x05,0x6a, 800, 600}, /* 00 */
-+ {0x0467,0x0e,0x44,0x05,0x6a, 800, 600}, /* 01 */
-+ {0x0067,0x0f,0x07,0x48,0x6a, 800, 600}, /* 02 - CRT1CRTC was 0x4f */
-+ {0x0067,0x10,0x06,0x8b,0x6a, 800, 600}, /* 03 */
-+ {0x0147,0x11,0x08,0x00,0x6a, 800, 600}, /* 04 */
-+ {0x0147,0x12,0x0c,0x00,0x6a, 800, 600}, /* 05 */
-+ {0x0047,0x11,0x4e,0x00,0x6a, 800, 600}, /* 06 - CRT1CRTC was 0x51 */
-+ {0x0047,0x11,0x13,0x00,0x6a, 800, 600}, /* 07 */
-+ {0xc85f,0x05,0x00,0x04,0x2e, 640, 480}, /* 08 */
-+ {0xc067,0x06,0x02,0x04,0x2e, 640, 480}, /* 09 */
-+ {0xc067,0x07,0x02,0x47,0x2e, 640, 480}, /* 0a */
-+ {0xc067,0x08,0x03,0x8a,0x2e, 640, 480}, /* 0b */
-+ {0xc047,0x09,0x05,0x00,0x2e, 640, 480}, /* 0c */
-+ {0xc047,0x0a,0x08,0x00,0x2e, 640, 480}, /* 0d */
-+ {0xc047,0x0b,0x0a,0x00,0x2e, 640, 480}, /* 0e */
-+ {0xc047,0x0c,0x10,0x00,0x2e, 640, 480}, /* 0f */
-+ {0x487f,0x04,0x00,0x00,0x2f, 640, 400}, /* 10 */
-+ {0xc00f,0x31,0x01,0x06,0x31, 720, 480}, /* 11 */
-+ {0x000f,0x32,0x03,0x06,0x32, 720, 576}, /* 12 */
-+ {0x0187,0x15,0x05,0x00,0x37,1024, 768}, /* 13 */
-+ {0xc877,0x16,0x09,0x06,0x37,1024, 768}, /* 14 */
-+ {0xc067,0x17,0x0b,0x49,0x37,1024, 768}, /* 15 - CRT1CRTC was 0x97 */
-+ {0x0267,0x18,0x0d,0x00,0x37,1024, 768}, /* 16 */
-+ {0x0047,0x19,0x11,0x8c,0x37,1024, 768}, /* 17 - CRT1CRTC was 0x59 */
-+ {0x0047,0x1a,0x52,0x00,0x37,1024, 768}, /* 18 */
-+ {0x0007,0x1b,0x16,0x00,0x37,1024, 768}, /* 19 - CRT1CRTC was 0x5b */
-+ {0x0387,0x1c,0x4d,0x00,0x3a,1280,1024}, /* 1a - CRT1CRTC was 0x5c */
-+ {0x0077,0x1d,0x14,0x07,0x3a,1280,1024}, /* 1b */
-+ {0x0047,0x1e,0x17,0x00,0x3a,1280,1024}, /* 1c */
-+ {0x0007,0x1f,0x98,0x00,0x3a,1280,1024}, /* 1d */
-+ {0x0007,0x20,0x59,0x00,0x3c,1600,1200}, /* 1e - CRT1CRTC was 0x60 */
-+ {0x0007,0x21,0x5a,0x00,0x3c,1600,1200}, /* 1f */
-+ {0x0007,0x22,0x1b,0x00,0x3c,1600,1200}, /* 20 */
-+ {0x0007,0x23,0x1d,0x00,0x3c,1600,1200}, /* 21 - CRT1CRTC was 0x63 */
-+ {0x0007,0x24,0x1e,0x00,0x3c,1600,1200}, /* 22 */
-+ {0x407f,0x00,0x00,0x00,0x40, 320, 200}, /* 23 */
-+ {0xc07f,0x01,0x00,0x04,0x50, 320, 240}, /* 24 */
-+ {0x0077,0x02,0x04,0x05,0x51, 400, 300}, /* 25 */
-+ {0xc877,0x03,0x09,0x06,0x52, 512, 384}, /* 26 */ /* was c077 */
-+ {0x8207,0x25,0x1f,0x00,0x68,1920,1440}, /* 27 */
-+ {0x0007,0x26,0x20,0x00,0x6c,2048,1536}, /* 28 */
-+ {0x0067,0x27,0x14,0x08,0x6e,1280, 960}, /* 29 - TW: 1280x960-60 */
-+ {0x0027,0x45,0x3c,0x08,0x6e,1280, 960}, /* 2a - TW: 1280x960-85 */
-+ {0xc077,0x33,0x09,0x06,0x20,1024, 600}, /* 2b */
-+ {0xc077,0x34,0x0b,0x06,0x23,1152, 768}, /* 2c */ /* VCLK 0x09 */
-+ {0x0057,0x35,0x27,0x08,0x70, 800, 480}, /* 2d */
-+ {0x0047,0x36,0x37,0x08,0x70, 800, 480}, /* 2e */
-+ {0x0047,0x37,0x08,0x08,0x70, 800, 480}, /* 2f */
-+ {0x0057,0x38,0x09,0x09,0x71,1024, 576}, /* 30 */
-+ {0x0047,0x39,0x38,0x09,0x71,1024, 576}, /* 31 */
-+ {0x0047,0x3a,0x11,0x09,0x71,1024, 576}, /* 32 */
-+ {0x0057,0x3b,0x39,0x0a,0x75,1280, 720}, /* 33 */
-+ {0x0047,0x3c,0x3a,0x0a,0x75,1280, 720}, /* 34 */
-+ {0x0007,0x3d,0x3b,0x0a,0x75,1280, 720}, /* 35 */
-+ {0x0047,0x3e,0x34,0x06,0x29,1152, 864}, /* 36 1152x864-75Hz */
-+ {0x0047,0x44,0x3a,0x06,0x29,1152, 864}, /* 37 1152x864-85Hz */
-+ {0x00c7,0x3f,0x28,0x00,0x39, 848, 480}, /* 38 848x480-38Hzi */
-+ {0xc047,0x40,0x3d,0x00,0x39, 848, 480}, /* 39 848x480-60Hz */
-+ {0x00c7,0x41,0x28,0x00,0x3f, 856, 480}, /* 3a 856x480-38Hzi */
-+ {0xc047,0x42,0x28,0x00,0x3f, 856, 480}, /* 3b 856x480-60Hz */
-+ {0x0047,0x43,0x3e,0x00,0x48,1360, 768}, /* 3c 1360x768-60Hz */
-+ {0x0077,0x46,0x3f,0x08,0x55,1280, 768}, /* 3d 1280x768-60Hz */
-+ {0x000f,0x47,0x03,0x06,0x5f, 768, 576}, /* 3e 768x576 */
-+ {0x0027,0x48,0x13,0x08,0x67,1360,1024}, /* 3f 1360x1024-59Hz (BARCO1366 only) */
-+ {0xffff, 0, 0, 0, 0, 0, 0}
- };
-
--/*add for 300 oem util*/
- typedef struct _SiS_VBModeIDTableStruct
- {
- UCHAR ModeID;
-@@ -649,9 +312,8 @@ static const SiS_VBModeIDTableStruct Si
- {0x6e,0x00,0x00,0x01,0x00,0x00,0x0b,0x0d},
- {0x6f,0x00,0x00,0x01,0x00,0x00,0x0b,0x0d},
- {0x7b,0x00,0x00,0x01,0x00,0x00,0x0b,0x0d},
-- {0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00} /* TW: added! */
-+ {0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00}
- };
--/*end*/
-
- typedef struct _SiS300_CRT1TableStruct
- {
-@@ -660,15 +322,32 @@ typedef struct _SiS300_CRT1TableStruct
-
- static const SiS300_CRT1TableStruct SiS300_CRT1Table[] =
- {
-- {{0x2d,0x27,0x28,0x90,0x2c,0x80,0xbf,0x1f, /* 0x00 */
-- 0x9c,0x8e,0x8f,0x96,0xb9,0x30,0x00,0x00,
-+#if 1
-+ {{0x2d,0x27,0x28,0x90,0x2c,0x80,0xbf,0x1f, /* 0x00 - 320x200 */
-+ 0x9c,0x8e,0x8f,0x96,0xb9,0x30,0x00,0x00, /* HRE [4],[15] is invalid - but correcting it does not work */
-+ 0x00}},
-+#endif
-+#if 0
-+ {{0x2d,0x27,0x27,0x91,0x2c,0x92,0xbf,0x1f, /* 0x00 - corrected 320x200-72 - does not work */
-+ 0x9c,0x8e,0x8f,0x96,0xb9,0x30,0x00,0x04,
- 0x00}},
-- {{0x2d,0x27,0x28,0x90,0x2c,0x80,0x0b,0x3e,
-- 0xe9,0x8b,0xdf,0xe7,0x04,0x00,0x00,0x00,
-+#endif
-+ {{0x2d,0x27,0x28,0x90,0x2c,0x80,0x0b,0x3e, /* 0x01 */
-+ 0xe9,0x8b,0xdf,0xe7,0x04,0x00,0x00,0x00, /* HRE [4],[15] is invalid - but correcting it does not work */
- 0x00}},
-- {{0x3d,0x31,0x31,0x81,0x37,0x1f,0x72,0xf0,
-+#if 0
-+ {{0x2d,0x27,0x27,0x91,0x2c,0x92,0x0b,0x3e, /* 0x01 - corrected 320x240-60 - does not work */
-+ 0xe9,0x8b,0xdf,0xe7,0x04,0x00,0x00,0x04,
-+ 0x00}},
-+#endif
-+ {{0x3d,0x31,0x31,0x81,0x37,0x1f,0x72,0xf0, /* 0x02 */
-+ 0x58,0x8c,0x57,0x57,0x73,0x20,0x00,0x05,
-+ 0x01}},
-+#if 0
-+ {{0x3d,0x31,0x31,0x81,0x37,0x1f,0x72,0xf0, /* 0x02 - corrected 400x300-60 */
- 0x58,0x8c,0x57,0x57,0x73,0x20,0x00,0x05,
- 0x01}},
-+#endif
- {{0x4f,0x3f,0x3f,0x93,0x45,0x0d,0x24,0xf5,
- 0x02,0x88,0xff,0xff,0x25,0x10,0x00,0x01,
- 0x01}},
-@@ -683,7 +362,7 @@ static const SiS300_CRT1TableStruct SiS
- {{0x5f,0x4f,0x4f,0x83,0x55,0x81,0x0b,0x3e, /* 0x05 - corrected 640x480-60 */
- 0xe9,0x8b,0xdf,0xe8,0x0c,0x00,0x00,0x05,
- 0x00}},
-- #if 0
-+#if 0
- {{0x63,0x4f,0x50,0x86,0x56,0x9b,0x06,0x3e, /* 0x06 */
- 0xe8,0x8b,0xdf,0xe7,0xff,0x10,0x00,0x01,
- 0x00}},
-@@ -841,15 +520,10 @@ static const SiS300_CRT1TableStruct SiS
- {{0xa3,0x7f,0x7f,0x87,0x86,0x97,0x1e,0xf1, /* 0x33 - 1024x600 */
- 0xae,0x85,0x57,0x57,0x1f,0x30,0x00,0x02,
- 0x01}},
--#if 0
-- {{0xa3,0x7f,0x7f,0x87,0x86,0x97,0x24,0xf5, /* 0x34 - 1152x768 */
-- 0x02,0x88,0xff,0xff,0x25,0x10,0x00,0x02,
-- 0x01}},
--#endif
-- {{0xa3,0x8f,0x8f,0x97,0x96,0x97,0x24,0xf5, /* 0x34 - 1152x768 - TW: corrected */
-+ {{0xa3,0x8f,0x8f,0x97,0x96,0x97,0x24,0xf5, /* 0x34 - 1152x768 - corrected */
- 0x02,0x88,0xff,0xff,0x25,0x10,0x00,0x02,
- 0x01}},
-- {{0x7f,0x63,0x63,0x83,0x6c,0x1c,0x72,0xba, /* 0x35 - NEW 16:9 modes, not in BIOS ------ */
-+ {{0x7f,0x63,0x63,0x83,0x6c,0x1c,0x72,0xba, /* 0x35 */
- 0x27,0x8b,0xdf,0xdf,0x73,0x00,0x00,0x06,
- 0x01}}, /* 0x35 */
- {{0x7f,0x63,0x63,0x83,0x69,0x13,0x6f,0xba,
-@@ -864,7 +538,7 @@ static const SiS300_CRT1TableStruct SiS
- {{0x9f,0x7f,0x7f,0x83,0x85,0x91,0x1e,0xf1,
- 0xad,0x81,0x3f,0x3f,0x1f,0x30,0x00,0x02,
- 0x01}}, /* 0x39 */
-- {{0xa7,0x7f,0x7f,0x88,0x89,0x95,0x26,0xf1, /* TW: 95 was 15 - illegal HBE! */
-+ {{0xa7,0x7f,0x7f,0x88,0x89,0x95,0x26,0xf1, /* 95 was 15 - illegal HBE! */
- 0xb1,0x85,0x3f,0x3f,0x27,0x30,0x00,0x02,
- 0x01}}, /* 0x3a */
- {{0xce,0x9f,0x9f,0x92,0xa9,0x17,0x28,0xc4,
-@@ -875,36 +549,40 @@ static const SiS300_CRT1TableStruct SiS
- 0x01}}, /* 0x3c */
- {{0xd3,0x9f,0x9f,0x97,0xab,0x1f,0x2e,0xd4,
- 0x7d,0x81,0xcf,0xcf,0x2f,0x21,0x00,0x07,
-- 0x01}}, /* 0x3d */ /* TW: End of 16:9 modes --------------- */
-- {{0xc3,0x8f,0x8f,0x87,0x9b,0x0b,0x82,0xef, /* TW: New, 1152x864-75 (not in any BIOS) */
-+ 0x01}}, /* 0x3d */
-+ {{0xc3,0x8f,0x8f,0x87,0x9b,0x0b,0x82,0xef, /* 1152x864-75 */
- 0x60,0x83,0x5f,0x5f,0x83,0x10,0x00,0x07,
- 0x01}}, /* 0x3e */
-- {{0x86,0x69,0x69,0x8A,0x74,0x06,0x8C,0x15, /* TW: New, 848x480-38i, not in BIOS */
-+ {{0x86,0x69,0x69,0x8A,0x74,0x06,0x8C,0x15, /* 848x480-38i */
- 0x4F,0x83,0xEF,0xEF,0x8D,0x30,0x00,0x02,
- 0x00}}, /* 0x3f */
--#if 0
-- {{0x81,0x69,0x69,0x85,0x70,0x00,0x0F,0x3E, /* TW: New, 848x480-60, not in BIOS - incorrect for Philips panel */
-- 0xEB,0x8E,0xDF,0xDF,0x10,0x00,0x00,0x02,
-- 0x00}}, /* 0x40 */
--#endif
-- {{0x83,0x69,0x69,0x87,0x6f,0x1d,0x03,0x3E, /* TW: New, 848x480-60, not in BIOS */
-+ {{0x83,0x69,0x69,0x87,0x6f,0x1d,0x03,0x3E, /* 848x480-60 */
- 0xE5,0x8d,0xDF,0xe4,0x04,0x00,0x00,0x06,
- 0x00}}, /* 0x40 */
-- {{0x86,0x6A,0x6A,0x8A,0x74,0x06,0x8C,0x15, /* TW: New, 856x480-38i, not in BIOS */
-+ {{0x86,0x6A,0x6A,0x8A,0x74,0x06,0x8C,0x15, /* 856x480-38i */
- 0x4F,0x83,0xEF,0xEF,0x8D,0x30,0x00,0x02,
- 0x00}}, /* 0x41 */
-- {{0x81,0x6A,0x6A,0x85,0x70,0x00,0x0F,0x3E, /* TW: New, 856x480-60, not in BIOS */
-+ {{0x81,0x6A,0x6A,0x85,0x70,0x00,0x0F,0x3E, /* 856x480-60 */
- 0xEB,0x8E,0xDF,0xDF,0x10,0x00,0x00,0x02,
- 0x00}}, /* 0x42 */
-- {{0xdd,0xa9,0xa9,0x81,0xb4,0x97,0x26,0xfd, /* TW: New, 1360x768-60, not in BIOS */
-+ {{0xdd,0xa9,0xa9,0x81,0xb4,0x97,0x26,0xfd, /* 1360x768-60 */
- 0x01,0x8d,0xff,0x00,0x27,0x10,0x00,0x03,
- 0x01}}, /* 0x43 */
-- {{0xd9,0x8f,0x8f,0x9d,0xba,0x0a,0x8a,0xff, /* TW: New, 1152x864-84 (not in any BIOS) */
-+ {{0xd9,0x8f,0x8f,0x9d,0xba,0x0a,0x8a,0xff, /* 1152x864-84 */
- 0x60,0x8b,0x5f,0x5f,0x8b,0x10,0x00,0x03,
-- 0x01}}, /* 0x44 */
-- {{0xd3,0x9f,0x9f,0x97,0xab,0x1f,0xf1,0xff, /* TW: New, 1280x960-85 (not in any BIOS) */
-+ 0x01}}, /* 0x44 */
-+ {{0xd3,0x9f,0x9f,0x97,0xab,0x1f,0xf1,0xff, /* 1280x960-85 */
- 0xc0,0x83,0xbf,0xbf,0xf2,0x10,0x00,0x07,
-- 0x01}} /* 0x45 */
-+ 0x01}}, /* 0x45 */
-+ {{0xce,0x9f,0x9f,0x92,0xa9,0x17,0x20,0xf5, /* 1280x768-60 */
-+ 0x03,0x88,0xff,0xff,0x21,0x10,0x00,0x07,
-+ 0x01}}, /* 0x46 */
-+ {{0x7b,0x5f,0x63,0x9f,0x6a,0x93,0x6f,0xf0, /* 768x576 */
-+ 0x58,0x8a,0x3f,0x57,0x70,0x20,0x00,0x05,
-+ 0x01}}, /* 0x47 */
-+ {{0xce,0xa9,0xa9,0x92,0xb1,0x07,0x28,0x52, /* 1360x1024 (Barco iQ Pro R300) */
-+ 0x02,0x8e,0xff,0x00,0x29,0x0d,0x00,0x03,
-+ 0x00}} /* 0x48 */
- };
-
- typedef struct _SiS300_MCLKDataStruct
-@@ -913,8 +591,8 @@ typedef struct _SiS300_MCLKDataStruct
- USHORT CLOCK;
- } SiS300_MCLKDataStruct;
-
--static const SiS300_MCLKDataStruct SiS300_MCLKData_630[] = /* 630 */
--{ /* TW: at 0x54 in BIOS */
-+static const SiS300_MCLKDataStruct SiS300_MCLKData_630[] =
-+{
- { 0x5a,0x64,0x80, 66},
- { 0xb3,0x45,0x80, 83},
- { 0x37,0x61,0x80,100},
-@@ -925,8 +603,8 @@ static const SiS300_MCLKDataStruct SiS3
- { 0x37,0x61,0x80,100}
- };
-
--static const SiS300_MCLKDataStruct SiS300_MCLKData_300[] = /* 300 */
--{ /* TW: at 0x54 in BIOS */
-+static const SiS300_MCLKDataStruct SiS300_MCLKData_300[] =
-+{
- { 0x68,0x43,0x80,125},
- { 0x68,0x43,0x80,125},
- { 0x68,0x43,0x80,125},
-@@ -937,6 +615,7 @@ static const SiS300_MCLKDataStruct SiS3
- { 0x37,0x61,0x80,100}
- };
-
-+#ifdef LINUXBIOS
- typedef struct _SiS300_ECLKDataStruct
- {
- UCHAR SR2E,SR2F,SR30;
-@@ -954,6 +633,7 @@ static const SiS300_ECLKDataStruct SiS3
- { 0x54,0x43,0x80,100},
- { 0x54,0x43,0x80,100}
- };
-+#endif
-
- typedef struct _SiS300_VCLKDataStruct
- {
-@@ -964,71 +644,77 @@ typedef struct _SiS300_VCLKDataStruct
- static const SiS300_VCLKDataStruct SiS300_VCLKData[] =
- {
- { 0x1b,0xe1, 25}, /* 0x00 */
-- { 0x4e,0xe4, 28},
-+ { 0x4e,0xe4, 28}, /* 0x01 */
- { 0x57,0xe4, 32}, /* 0x02 */
-- { 0xc3,0xc8, 36},
-+ { 0xc3,0xc8, 36}, /* 0x03 */
- { 0x42,0xc3, 40}, /* 0x04 */
-- { 0x5d,0xc4, 45},
-+ { 0x5d,0xc4, 45}, /* 0x05 */
- { 0x52,0x65, 50}, /* 0x06 */
-- { 0x53,0x65, 50},
-+ { 0x53,0x65, 50}, /* 0x07 */
- { 0x6d,0x66, 56}, /* 0x08 */
-- { 0x5a,0x64, 65},
-+ { 0x5a,0x64, 65}, /* 0x09 */
- { 0x46,0x44, 68}, /* 0x0a */
-- { 0x3e,0x43, 75},
-- { 0x6d,0x46, 76}, /* 0x0c: 800x600 | LVDS_2(CH), MITAC(CH); - 730, A901(301B): 0xb1,0x46, 76 */
-- { 0x41,0x43, 79},
-+ { 0x3e,0x43, 75}, /* 0x0b */
-+ { 0x6d,0x46, 76}, /* 0x0c */ /* 800x600 | LVDS_2(CH), MITAC(CH); - 730, A901(301B): 0xb1,0x46, 76 */
-+ { 0x41,0x43, 79}, /* 0x0d */
- { 0x31,0x42, 79}, /* 0x0e */
-- { 0x46,0x25, 85},
-+ { 0x46,0x25, 85}, /* 0x0f */
- { 0x78,0x29, 87}, /* 0x10 */
-- { 0x62,0x44, 95},
-+ { 0x62,0x44, 95}, /* 0x11 */
- { 0x2b,0x22,105}, /* 0x12 */
-- { 0x49,0x24,106},
-+ { 0x49,0x24,106}, /* 0x13 */
- { 0xc3,0x28,108}, /* 0x14 */
-- { 0x3c,0x23,109},
-+ { 0x3c,0x23,109}, /* 0x15 */
- { 0xf7,0x2c,132}, /* 0x16 */
-- { 0xd4,0x28,136},
-+ { 0xd4,0x28,136}, /* 0x17 */
- { 0x41,0x05,158}, /* 0x18 */
-- { 0x43,0x05,162},
-+ { 0x43,0x05,162}, /* 0x19 */
- { 0xe1,0x0f,175}, /* 0x1a */
- { 0xfc,0x12,189}, /* 0x1b */
- { 0xde,0x26,194}, /* 0x1c */
-- { 0x54,0x05,203},
-+ { 0x54,0x05,203}, /* 0x1d */
- { 0x3f,0x03,230}, /* 0x1e */
-- { 0x30,0x02,234},
-+ { 0x30,0x02,234}, /* 0x1f */
- { 0x24,0x01,266}, /* 0x20 */
-- { 0x52,0x2a, 54}, /* 301 TV */
-- { 0x52,0x6a, 27}, /* 301 TV */
-- { 0x62,0x24, 70}, /* 301 TV */
-- { 0x62,0x64, 70}, /* 301 TV */
-- { 0xa8,0x4c, 30}, /* 301 TV */
-- { 0x20,0x26, 33}, /* 301 TV */
-- { 0x31,0xc2, 39},
-- { 0xbf,0xc8, 35}, /* 0x28 - 856x480 */
-- { 0x60,0x36, 30}, /* 0x29 CH/UNTSC TEXT | LVDS_2(CH) - 730, A901(301B), Mitac(CH): 0xe0, 0xb6, 30 */
-- { 0x40,0x4a, 28},
-- { 0x9f,0x46, 44},
-- { 0x97,0x2c, 26},
-- { 0x44,0xe4, 25},
-- { 0x7e,0x32, 47},
-- { 0x8a,0x24, 31}, /* 0x2f CH/PAL TEXT | LVDS_2(CH), Mitac(CH) - 730, A901(301B): 0x57, 0xe4, 31 */
-- { 0x97,0x2c, 26},
-- { 0xce,0x3c, 39},
-- { 0x52,0x4a, 36}, /* 0x32 CH/PAL 800x600 5/6 */
-- { 0x34,0x61, 95},
-- { 0x78,0x27,108},
-- { 0xce,0x25,189}, /* 0x35 */
-- { 0x45,0x6b, 21}, /* 0x36 */ /* TW: Added from Mitac */
-- { 0x52,0xe2, 49}, /* 0x37 - added for 16:9 modes (not in any BIOS) */
-- { 0x2b,0x61, 78}, /* 0x38 - added for 16:9 modes (not in any BIOS) */
-- { 0x70,0x44,108}, /* 0x39 - added for 16:9 modes (not in any BIOS) */
-- { 0x54,0x42,135}, /* 0x3a - added for 16:9 modes (not in any BIOS) */
-- { 0x41,0x22,157}, /* 0x3b - added for 16:9 modes (not in any BIOS) */
-- { 0x52,0x07,149}, /* 0x3c - added for 1280x960-85 (not in any BIOS)*/
-- { 0x62,0xc6, 34}, /* 0x3d - added for 848x480-60 (not in any BIOS) */
-- { 0x30,0x23, 88}, /* 0x3e - added for 1360x768-60 (not in any BIOS)*/
-- { 0x3f,0x64, 46}, /* 0x3f - added for 640x480-100 (not in any BIOS)*/
-- { 0x72,0x2a, 76}, /* 0x40 - test for SiS730 */
-- { 0x15,0x21, 79}, /* 0x41 - test for SiS730 */
-+ { 0x52,0x2a, 54}, /* 0x21 */ /* 301 TV */
-+ { 0x52,0x6a, 27}, /* 0x22 */ /* 301 TV */
-+ { 0x62,0x24, 70}, /* 0x23 */ /* 301 TV */
-+ { 0x62,0x64, 70}, /* 0x24 */ /* 301 TV */
-+ { 0xa8,0x4c, 30}, /* 0x25 */ /* 301 TV */
-+ { 0x20,0x26, 33}, /* 0x26 */ /* 301 TV */
-+ { 0x31,0xc2, 39}, /* 0x27 */
-+ { 0xbf,0xc8, 35}, /* 0x28 */ /* 856x480 */
-+ { 0x60,0x36, 30}, /* 0x29 */ /* CH/UNTSC TEXT | LVDS_2(CH) - 730, A901(301B), Mitac(CH): 0xe0, 0xb6, 30 */
-+ { 0x40,0x4a, 28}, /* 0x2a */
-+ { 0x9f,0x46, 44}, /* 0x2b */
-+ { 0x97,0x2c, 26}, /* 0x2c */
-+ { 0x44,0xe4, 25}, /* 0x2d */
-+ { 0x7e,0x32, 47}, /* 0x2e */
-+ { 0x8a,0x24, 31}, /* 0x2f */ /* CH/PAL TEXT | LVDS_2(CH), Mitac(CH) - 730, A901(301B): 0x57, 0xe4, 31 */
-+ { 0x97,0x2c, 26}, /* 0x30 */
-+ { 0xce,0x3c, 39}, /* 0x31 */
-+ { 0x52,0x4a, 36}, /* 0x32 */ /* CH/PAL 800x600 5/6 */
-+ { 0x34,0x61, 95}, /* 0x33 */
-+ { 0x78,0x27,108}, /* 0x34 */ /* Replacement for index 0x14 for 630 (?) */
-+ { 0xce,0x25,189}, /* 0x35 */ /* Replacement for index 0x1b for 730 (and 540?) */
-+ { 0x45,0x6b, 21}, /* 0x36 */
-+ { 0x52,0xe2, 49}, /* 0x37 */ /* 16:9 modes */
-+ { 0x2b,0x61, 78}, /* 0x38 */ /* 16:9 modes */
-+ { 0x70,0x44,108}, /* 0x39 */ /* 16:9 modes */
-+ { 0x54,0x42,135}, /* 0x3a */ /* 16:9 modes */
-+ { 0x41,0x22,157}, /* 0x3b */ /* 16:9 modes */
-+ { 0x52,0x07,149}, /* 0x3c */ /* 1280x960-85 */
-+ { 0x62,0xc6, 34}, /* 0x3d */ /* 848x480-60 */
-+ { 0x30,0x23, 88}, /* 0x3e */ /* 1360x768-60 */
-+#if 0
-+ { 0x3f,0x64, 46}, /* 0x3f */ /* 640x480-100 */
-+#endif
-+ { 0x70,0x29, 81}, /* 0x3f */ /* 1280x768-60 */
-+ { 0x72,0x2a, 76}, /* 0x40 */ /* test for SiS730 */
-+ { 0x15,0x21, 79}, /* 0x41 */ /* test for SiS730 */
-+ { 0xa1,0x42,108}, /* 0x42 */ /* 1280x960 LCD */
-+ { 0x37,0x61,100}, /* 0x43 */ /* 1280x960 LCD */
-+ { 0xe3,0x9a,106}, /* 0x44 */ /* 1360x1024 - special for Barco iQ R300 */
- { 0xff,0x00, 0}
- };
-
-@@ -1089,66 +775,10 @@ static const SiS300_VCLKDataStruct SiS3
- static const UCHAR SiS300_ScreenOffset[] =
- {
- 0x14,0x19,0x20,0x28,0x32,0x40,0x50,
-- 0x64,0x78,0x80,0x2d,0x35,0x48,0x35, /* 0x35 for 848 and 856 */
-- 0x55,0xff /* 0x55 for 1360 */
-+ 0x64,0x78,0x80,0x2d,0x35,0x48,0x35,
-+ 0x55,0x30,0xff
- };
-
--typedef struct _SiS300_StResInfoStruct
--{
-- USHORT HTotal;
-- USHORT VTotal;
--} SiS300_StResInfoStruct;
--
--static const SiS300_StResInfoStruct SiS300_StResInfo[] =
--{
-- { 640,400},
-- { 640,350},
-- { 720,400},
-- { 720,350},
-- { 640,480}
--};
--
--typedef struct _SiS300_ModeResInfoStruct
--{
-- USHORT HTotal;
-- USHORT VTotal;
-- UCHAR XChar;
-- UCHAR YChar;
--} SiS300_ModeResInfoStruct;
--
--static const SiS300_ModeResInfoStruct SiS300_ModeResInfo[] =
--{
-- { 320, 200, 8, 8}, /* 0x00 */
-- { 320, 240, 8, 8}, /* 0x01 */
-- { 320, 400, 8, 8}, /* 0x02 */
-- { 400, 300, 8, 8}, /* 0x03 */
-- { 512, 384, 8, 8}, /* 0x04 */
-- { 640, 400, 8,16}, /* 0x05 */
-- { 640, 480, 8,16}, /* 0x06 */
-- { 800, 600, 8,16}, /* 0x07 */
-- { 1024, 768, 8,16}, /* 0x08 */
-- { 1280,1024, 8,16}, /* 0x09 */
-- { 1600,1200, 8,16}, /* 0x0a */
-- { 1920,1440, 8,16}, /* 0x0b */
-- { 720, 480, 8,16}, /* 0x0c */
-- { 720, 576, 8,16}, /* 0x0d */
-- { 1280, 960, 8,16}, /* 0x0e */
-- { 1024, 600, 8,16}, /* 0x0f */
-- { 1152, 768, 8,16}, /* 0x10 */
-- { 2048,1536, 8,16}, /* 0x11 - TW: Not in BIOS! */
-- { 800, 480, 8,16}, /* 0x12 - TW: New, not in any BIOS */
-- { 1024, 576, 8,16}, /* 0x13 - TW: New, not in any BIOS */
-- { 1280, 720, 8,16}, /* 0x14 - TW: New, not in any BIOS */
-- { 1152, 864, 8,16}, /* 0x15 - TW: New, not in any BIOS */
-- { 848, 480, 8,16}, /* 0x16 - TW: New, not in any BIOS */
-- { 856, 480, 8,16}, /* 0x17 - TW: New, not in any BIOS */
-- { 1360, 768, 8,16} /* 0x18 - TW: New, not in any BIOS */
--};
--
--static const UCHAR SiS300_OutputSelect = 0x40;
--
--static const UCHAR SiS300_SoftSetting = 0x30;
--
- #ifndef LINUX_XF86
- static UCHAR SiS300_SR07 = 0x10;
- #endif
-@@ -1183,7 +813,7 @@ static UCHAR SiS300_CRT2Data_4_10 = 0x80
- static const USHORT SiS300_RGBSenseData = 0xd1;
- static const USHORT SiS300_VideoSenseData = 0xb3;
- static const USHORT SiS300_YCSenseData = 0xb9;
--static const USHORT SiS300_RGBSenseData2 = 0x0190; /*301b*/
-+static const USHORT SiS300_RGBSenseData2 = 0x0190;
- static const USHORT SiS300_VideoSenseData2 = 0x0174;
- static const USHORT SiS300_YCSenseData2 = 0x016b;
-
-@@ -1192,15 +822,6 @@ static const UCHAR SiS300_CR40[5][4];
- static UCHAR SiS300_CR49[2];
- #endif
-
--static const UCHAR SiS300_NTSCPhase[] = {0x21,0xed,0xba,0x08}; /* TW: Was {0x21,0xed,0x8a,0x08}; */
--static const UCHAR SiS300_PALPhase[] = {0x2a,0x05,0xe3,0x00}; /* TW: Was {0x2a,0x05,0xd3,0x00}; */
--static const UCHAR SiS300_PALMPhase[] = {0x21,0xE4,0x2E,0x9B}; /* palmn */
--static const UCHAR SiS300_PALNPhase[] = {0x21,0xF4,0x3E,0xBA};
--static const UCHAR SiS300_NTSCPhase2[] = {0x21,0xF0,0x7B,0xD6}; /* 301b */
--static const UCHAR SiS300_PALPhase2[] = {0x2a,0x09,0x86,0xe9}; /* 301b */
--static const UCHAR SiS300_PALMPhase2[] = {0x21,0xE6,0xEF,0xA4}; /* TW: palm 301b*/
--static const UCHAR SiS300_PALNPhase2[] = {0x21,0xF6,0x94,0x46}; /* TW: paln 301b*/
--
- typedef struct _SiS300_PanelDelayTblStruct
- {
- UCHAR timer[2];
-@@ -1208,7 +829,7 @@ typedef struct _SiS300_PanelDelayTblStru
-
- static const SiS300_PanelDelayTblStruct SiS300_PanelDelayTbl[] =
- {
-- {{0x05,0xaa}}, /* TW: From 2.04.5a */
-+ {{0x05,0xaa}},
- {{0x05,0x14}},
- {{0x05,0x36}},
- {{0x05,0x14}},
-@@ -1355,309 +976,6 @@ static const SiS300_LCDDataStruct SiS30
- { 1, 1,1688,1066,1688,1066}
- };
-
--static const SiS300_LCDDataStruct SiS300_LCD1280x960Data[] =
--{
-- { 9, 2, 800, 500,1800,1000},
-- { 9, 2, 800, 500,1800,1000},
-- { 4, 1, 900, 500,1800,1000},
-- { 4, 1, 900, 500,1800,1000},
-- { 9, 2, 800, 500,1800,1000},
-- { 30, 11,1056, 625,1800,1000},
-- { 5, 3,1350, 800,1800,1000},
-- { 1, 1,1576,1050,1576,1050},
-- { 1, 1,1800,1000,1800,1000}
--};
--
--static const SiS300_LCDDataStruct SiS300_ExtLCD1400x1050Data[] = /* TW: New */
--{
-- { 0, 0, 0, 0, 0, 0},
-- { 0, 0, 0, 0, 0, 0},
-- { 0, 0, 0, 0, 0, 0},
-- { 0, 0, 0, 0, 0, 0},
-- { 0, 0, 0, 0, 0, 0},
-- { 0, 0, 0, 0, 0, 0},
-- { 0, 0, 0, 0, 0, 0},
-- { 0, 0, 0, 0, 0, 0},
-- { 0, 0, 0, 0, 0, 0},
-- { 0, 0, 0, 0, 0, 0}
--};
--
--static const SiS300_LCDDataStruct SiS300_ExtLCD1600x1200Data[] = /* TW: New */
--{
-- { 0, 0, 0, 0, 0, 0},
-- { 0, 0, 0, 0, 0, 0},
-- { 0, 0, 0, 0, 0, 0},
-- { 0, 0, 0, 0, 0, 0},
-- { 0, 0, 0, 0, 0, 0},
-- { 0, 0, 0, 0, 0, 0},
-- { 0, 0, 0, 0, 0, 0},
-- { 0, 0, 0, 0, 0, 0},
-- { 0, 0, 0, 0, 0, 0},
-- { 0, 0, 0, 0, 0, 0}
--};
--
--static const SiS300_LCDDataStruct SiS300_StLCD1400x1050Data[] = /* TW: New */
--{
-- { 0, 0, 0, 0, 0, 0},
-- { 0, 0, 0, 0, 0, 0},
-- { 0, 0, 0, 0, 0, 0},
-- { 0, 0, 0, 0, 0, 0},
-- { 0, 0, 0, 0, 0, 0},
-- { 0, 0, 0, 0, 0, 0},
-- { 0, 0, 0, 0, 0, 0},
-- { 0, 0, 0, 0, 0, 0},
-- { 0, 0, 0, 0, 0, 0},
-- { 0, 0, 0, 0, 0, 0}
--};
--
--static const SiS300_LCDDataStruct SiS300_StLCD1600x1200Data[] = /* TW: New */
--{
-- { 0, 0, 0, 0, 0, 0},
-- { 0, 0, 0, 0, 0, 0},
-- { 0, 0, 0, 0, 0, 0},
-- { 0, 0, 0, 0, 0, 0},
-- { 0, 0, 0, 0, 0, 0},
-- { 0, 0, 0, 0, 0, 0},
-- { 0, 0, 0, 0, 0, 0},
-- { 0, 0, 0, 0, 0, 0},
-- { 0, 0, 0, 0, 0, 0},
-- { 0, 0, 0, 0, 0, 0}
--};
--
--static const SiS300_LCDDataStruct SiS300_NoScaleData1400x1050[] = /* TW: New */
--{
-- { 0, 0, 0, 0, 0, 0},
-- { 0, 0, 0, 0, 0, 0},
-- { 0, 0, 0, 0, 0, 0},
-- { 0, 0, 0, 0, 0, 0},
-- { 0, 0, 0, 0, 0, 0},
-- { 0, 0, 0, 0, 0, 0},
-- { 0, 0, 0, 0, 0, 0},
-- { 0, 0, 0, 0, 0, 0},
-- { 0, 0, 0, 0, 0, 0},
-- { 0, 0, 0, 0, 0, 0}
--};
--
--static const SiS300_LCDDataStruct SiS300_NoScaleData1600x1200[] = /* TW: New */
--{
-- { 0, 0, 0, 0, 0, 0},
-- { 0, 0, 0, 0, 0, 0},
-- { 0, 0, 0, 0, 0, 0},
-- { 0, 0, 0, 0, 0, 0},
-- { 0, 0, 0, 0, 0, 0},
-- { 0, 0, 0, 0, 0, 0},
-- { 0, 0, 0, 0, 0, 0},
-- { 0, 0, 0, 0, 0, 0},
-- { 0, 0, 0, 0, 0, 0},
-- { 0, 0, 0, 0, 0, 0}
--};
--
--
--typedef struct _SiS300_TVDataStruct
--{
-- USHORT RVBHCMAX;
-- USHORT RVBHCFACT;
-- USHORT VGAHT;
-- USHORT VGAVT;
-- USHORT TVHDE;
-- USHORT TVVDE;
-- USHORT RVBHRS;
-- UCHAR FlickerMode;
-- USHORT HALFRVBHRS;
-- UCHAR RY1COE;
-- UCHAR RY2COE;
-- UCHAR RY3COE;
-- UCHAR RY4COE;
--} SiS300_TVDataStruct;
--
--static const SiS300_TVDataStruct SiS300_StPALData[] =
--{
-- { 1, 1, 864, 525,1270, 400, 100, 0, 760,0xf4,0xff,0x1c,0x22},
-- { 1, 1, 864, 525,1270, 350, 100, 0, 760,0xf4,0xff,0x1c,0x22},
-- { 1, 1, 864, 525,1270, 400, 0, 0, 720,0xf1,0x04,0x1f,0x18},
-- { 1, 1, 864, 525,1270, 350, 0, 0, 720,0xf4,0x0b,0x1c,0x0a},
-- { 1, 1, 864, 525,1270, 480, 50, 0, 760,0xf4,0xff,0x1c,0x22},
-- { 1, 1, 864, 525,1270, 600, 50, 0, 0,0xf4,0xff,0x1c,0x22}
--};
--
--static const SiS300_TVDataStruct SiS300_ExtPALData[] =
--{
-- { 27, 10, 848, 448,1270, 530, 50, 0, 50,0xf4,0xff,0x1c,0x22},
-- { 108, 35, 848, 398,1270, 530, 50, 0, 50,0xf4,0xff,0x1c,0x22},
-- { 12, 5, 954, 448,1270, 530, 50, 0, 50,0xf1,0x04,0x1f,0x18},
-- { 9, 4, 960, 463,1644, 438, 50, 0, 50,0xf4,0x0b,0x1c,0x0a},
-- { 9, 4, 848, 528,1270, 530, 0, 0, 50,0xf5,0xfb,0x1b,0x2a},
-- { 36, 25,1060, 648,1316, 530, 438, 0, 438,0xeb,0x05,0x25,0x16},
-- { 3, 2,1080, 619,1270, 540, 438, 0, 438,0xf3,0x00,0x1d,0x20},
-- { 1, 1,1170, 821,1270, 520, 686, 0, 686,0xF3,0x00,0x1D,0x20}
--
--};
--
--static const SiS300_TVDataStruct SiS300_StNTSCData[] =
--{
-- { 1, 1, 858, 525,1270, 400, 50, 0, 760,0xf1,0x04,0x1f,0x18},
-- { 1, 1, 858, 525,1270, 350, 50, 0, 640,0xf1,0x04,0x1f,0x18},
-- { 1, 1, 858, 525,1270, 400, 0, 0, 720,0xf1,0x04,0x1f,0x18},
-- { 1, 1, 858, 525,1270, 350, 0, 0, 720,0xf4,0x0b,0x1c,0x0a},
-- { 1, 1, 858, 525,1270, 480, 0, 0, 760,0xf1,0x04,0x1f,0x18}
--};
--
--static const SiS300_TVDataStruct SiS300_ExtNTSCData[] =
--{
-- { 143, 65, 858, 443,1270, 440, 171, 0, 171,0xf1,0x04,0x1f,0x18},
-- { 88, 35, 858, 393,1270, 440, 171, 0, 171,0xf1,0x04,0x1f,0x18},
-- { 143, 70, 924, 443,1270, 440, 92, 0, 92,0xf1,0x04,0x1f,0x18},
-- { 143, 70, 924, 393,1270, 440, 92, 0, 92,0xf4,0x0b,0x1c,0x0a},
-- { 143, 76, 836, 523,1270, 440, 224, 0, 0,0xf1,0x05,0x1f,0x16},
-- { 143, 120,1056, 643,1270, 440, 0, 128, 0,0xf4,0x10,0x1c,0x00},
-- { 143, 76, 836, 523,1270, 440, 0, 128, 0,0xee,0x0c,0x22,0x08},
-- { 65, 64,1056, 791,1270, 480, 638, 0, 0,0xf1,0x04,0x1f,0x18}
--};
--
--#if 0
--static const SiS300_TVDataStruct SiS300_St1HiTVData[]=
--{
--
--};
--#endif
--
--static const SiS300_TVDataStruct SiS300_St2HiTVData[]=
--{
-- { 3, 1, 0x348,0x1e3,0x670,0x3c0,0x032, 0, 0, 0x00,0x00,0x00,0x00},
-- { 1, 1, 0x37c,0x233,0x2b2,0x2bc, 0, 0, 0, 0x00,0x00,0x00,0x00},
-- { 3, 1, 0x348,0x1e3,0x670,0x3c0,0x032, 0, 0, 0x00,0x00,0x00,0x00},
-- { 1, 1, 0x3e8,0x233,0x311,0x2bc, 0, 0, 0, 0x00,0x00,0x00,0x00},
-- { 5, 2, 0x348,0x233,0x670,0x3c0,0x08d,128, 0, 0x00,0x00,0x00,0x00},
-- { 8, 5, 0x41a,0x2ab,0x670,0x3c0,0x17c,128, 0, 0x00,0x00,0x00,0x00}
--};
--
--static const SiS300_TVDataStruct SiS300_ExtHiTVData[]=
--{
-- { 6, 1, 0x348,0x233,0x660,0x3c0, 0, 0, 0, 0x00,0x00,0x00,0x00},
-- { 3, 1, 0x3c0,0x233,0x660,0x3c0, 0, 0, 0, 0x00,0x00,0x00,0x00},
-- { 3, 1, 0x348,0x1e3,0x660,0x3c0, 0, 0, 0, 0x00,0x00,0x00,0x00},
-- { 3, 1, 0x3c0,0x233,0x660,0x3c0, 0, 0, 0, 0x00,0x00,0x00,0x00},
-- { 5, 1, 0x348,0x233,0x670,0x3c0,0x166,128, 0, 0x00,0x00,0x00,0x00},
-- { 16, 5, 0x41a,0x2ab,0x670,0x3c0,0x143,128, 0, 0x00,0x00,0x00,0x00},
-- { 25, 12, 0x4ec,0x353,0x670,0x3c0,0x032, 0, 0, 0x00,0x00,0x00,0x00},
-- { 5, 4, 0x627,0x464,0x670,0x3c0,0x128, 0, 0, 0x00,0x00,0x00,0x00},
-- { 4, 1, 0x41a,0x233,0x670,0x3c0,0x143,128, 0, 0x00,0x00,0x00,0x00},
-- { 5, 2, 0x578,0x293,0x670,0x3c0,0x032, 0, 0, 0x00,0x00,0x00,0x00},
-- { 8, 5, 0x6d6,0x323,0x670,0x3c0,0x128, 0, 0, 0x00,0x00,0x00,0x00}
--};
--
--static const UCHAR SiS300_NTSCTiming[] =
--{
-- 0x17,0x1d,0x03,0x09,0x05,0x06,0x0c,0x0c,
-- 0x94,0x49,0x01,0x0a,0x06,0x0d,0x04,0x0a,
-- 0x06,0x14,0x0d,0x04,0x0a,0x00,0x85,0x1b,
-- 0x0c,0x50,0x00,0x97,0x00,0xda,0x4a,0x17, /* (in 2.06.50) */
--/* 0x0c,0x50,0x00,0x99,0x00,0xec,0x4a,0x17, (in 2.04.5a) */
-- 0x7d,0x05,0x4b,0x00,0x00,0xe2,0x00,0x02, /* (in 2.06.50) */
--/* 0x88,0x00,0x4b,0x00,0x00,0xe2,0x00,0x02, (in 2.04.5a) */
-- 0x03,0x0a,0x65,0x9d,0x08,0x92,0x8f,0x40,
-- 0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x50,
-- 0x00,0x40,0x44,0x00,0xdb,0x02,0x3b,0x00
--};
--
--static const UCHAR SiS300_PALTiming[] =
--{
-- 0x19,0x52,0x35,0x6e,0x04,0x38,0x3d,0x70,
-- 0x94,0x49,0x01,0x12,0x06,0x3e,0x35,0x6d,
-- 0x06,0x14,0x3e,0x35,0x6d,0x00,0x45,0x2b,
-- 0x70,0x50,0x00,0x9b,0x00,0xd9,0x5d,0x17, /* (in 2.06.50) */
--/* 0x70,0x50,0x00,0x97,0x00,0xd7,0x5d,0x17, (in 2.04.5a) */
-- 0x7d,0x05,0x45,0x00,0x00,0xe8,0x00,0x02, /* (in 2.06.50) */
--/* 0x88,0x00,0x45,0x00,0x00,0xe8,0x00,0x02, (in 2.04.5a) */
-- 0x0d,0x00,0x68,0xb0,0x0b,0x92,0x8f,0x40,
-- 0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x63,
-- 0x00,0x40,0x3e,0x00,0xe1,0x02,0x28,0x00
--};
--
--static const UCHAR SiS300_HiTVExtTiming[] = /* TW: New */
--{
-- 0x32,0x65,0x2c,0x5f,0x08,0x31,0x3a,0x64,
-- 0x28,0x02,0x01,0x3d,0x06,0x3e,0x35,0x6d,
-- 0x06,0x14,0x3e,0x35,0x6d,0x00,0xc5,0x3f,
-- 0x64,0x90,0x33,0x8c,0x18,0x36,0x3e,0x13,
-- 0x2a,0xde,0x2a,0x44,0x40,0x2a,0x44,0x40,
-- 0x8e,0x8e,0x82,0x07,0x0b,0x92,0x0f,0x40,
-- 0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x3d,
-- 0x63,0x4f,0x27,0x00,0xfc,0xff,0x6a,0x00
--};
--
--static const UCHAR SiS300_HiTVSt1Timing[] = /* TW: New */
--{
-- 0x32,0x65,0x2c,0x5f,0x08,0x31,0x3a,0x65,
-- 0x28,0x02,0x01,0x3d,0x06,0x3e,0x35,0x6d,
-- 0x06,0x14,0x3e,0x35,0x6d,0x00,0xc5,0x3f,
-- 0x65,0x90,0x7b,0xa8,0x03,0xf0,0x87,0x03,
-- 0x11,0x15,0x11,0xcf,0x10,0x11,0xcf,0x10,
-- 0x35,0x35,0x3b,0x69,0x1d,0x92,0x0f,0x40,
-- 0x60,0x80,0x14,0x90,0x8c,0x60,0x04,0x86,
-- 0xaf,0x5d,0x0e,0x00,0xfc,0xff,0x2d,0x00
--};
--
--static const UCHAR SiS300_HiTVSt2Timing[] = /* TW: New */
--{
-- 0x32,0x65,0x2c,0x5f,0x08,0x31,0x3a,0x64,
-- 0x28,0x02,0x01,0x3d,0x06,0x3e,0x35,0x6d,
-- 0x06,0x14,0x3e,0x35,0x6d,0x00,0xc5,0x3f,
-- 0x64,0x90,0x33,0x8c,0x18,0x36,0x3e,0x13,
-- 0x2a,0xde,0x2a,0x44,0x40,0x2a,0x44,0x40,
-- 0x8e,0x8e,0x82,0x07,0x0b,0x92,0x0f,0x40,
-- 0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x3d,
-- 0x63,0x4f,0x27,0x00,0xfc,0xff,0x6a,0x00
--};
--
--static const UCHAR SiS300_HiTVTextTiming[] = /* TW: New */
--{
-- 0x32,0x65,0x2c,0x5f,0x08,0x31,0x3a,0x65,
-- 0x28,0x02,0x01,0x3d,0x06,0x3e,0x35,0x6d,
-- 0x06,0x14,0x3e,0x35,0x6d,0x00,0xc5,0x3f,
-- 0x65,0x90,0xe7,0xbc,0x03,0x0c,0x97,0x03,
-- 0x14,0x78,0x14,0x08,0x20,0x14,0x08,0x20,
-- 0xc8,0xc8,0x3b,0xd2,0x26,0x92,0x0f,0x40,
-- 0x60,0x80,0x14,0x90,0x8c,0x60,0x04,0x96,
-- 0x72,0x5c,0x11,0x00,0xfc,0xff,0x32,0x00
--};
--
--static const UCHAR SiS300_HiTVGroup3Data[] = /* TW: New */
--{
-- 0x00,0x1a,0x22,0x63,0x62,0x22,0x08,0x5f,
-- 0x05,0x21,0xb2,0xb2,0x55,0x77,0x2a,0xa6,
-- 0x25,0x2f,0x47,0xfa,0xc8,0xff,0x8e,0x20,
-- 0x8c,0x6e,0x60,0x2e,0x58,0x48,0x72,0x44,
-- 0x56,0x36,0x4f,0x6e,0x3f,0x80,0x00,0x80,
-- 0x4f,0x7f,0x03,0xa8,0x7d,0x20,0x1a,0xa9,
-- 0x14,0x05,0x03,0x7e,0x64,0x31,0x14,0x75,
-- 0x18,0x05,0x18,0x05,0x4c,0xa8,0x01
--};
--
--static const UCHAR SiS300_HiTVGroup3Simu[] = /* TW: New */
--{
-- 0x00,0x1a,0x22,0x63,0x62,0x22,0x08,0x95,
-- 0xdb,0x20,0xb8,0xb8,0x55,0x47,0x2a,0xa6,
-- 0x25,0x2f,0x47,0xfa,0xc8,0xff,0x8e,0x20,
-- 0x8c,0x6e,0x60,0x15,0x26,0xd3,0xe4,0x11,
-- 0x56,0x36,0x4f,0x6e,0x3f,0x80,0x00,0x80,
-- 0x67,0x36,0x01,0x47,0x0e,0x10,0xbe,0xb4,
-- 0x01,0x05,0x03,0x7e,0x65,0x31,0x14,0x75,
-- 0x18,0x05,0x18,0x05,0x4c,0xa8,0x01
--};
--
--static const UCHAR SiS300_HiTVGroup3Text[] = /* TW: New */
--{
-- 0x00,0x1a,0x22,0x63,0x62,0x22,0x08,0xa7,
-- 0xf5,0x20,0xce,0xce,0x55,0x47,0x2a,0xa6,
-- 0x25,0x2f,0x47,0xfa,0xc8,0xff,0x8e,0x20,
-- 0x8c,0x6e,0x60,0x18,0x2c,0x0c,0x20,0x22,
-- 0x56,0x36,0x4f,0x6e,0x3f,0x80,0x00,0x80,
-- 0x93,0x3c,0x01,0x50,0x2f,0x10,0xf4,0xca,
-- 0x01,0x05,0x03,0x7e,0x65,0x31,0x14,0x75,
-- 0x18,0x05,0x18,0x05,0x4c,0xa8,0x01
--};
--
- typedef struct _SiS300_LVDSDataStruct
- {
- USHORT VGAHT;
-@@ -1666,366 +984,14 @@ typedef struct _SiS300_LVDSDataStruct
- USHORT LCDVT;
- } SiS300_LVDSDataStruct;
-
--static const SiS300_LVDSDataStruct SiS300_LVDS320x480Data_1[] =
--{
-- {848, 433,400, 525},
-- {848, 389,400, 525},
-- {848, 433,400, 525},
-- {848, 389,400, 525},
-- {848, 518,400, 525},
-- {1056,628,400, 525},
-- {400, 525,400, 525},
-- {800, 449,1000, 644},
-- {800, 525,1000, 635}
--};
--
--static const SiS300_LVDSDataStruct SiS300_LVDS800x600Data_1[] =
--{
-- {848, 433,1060, 629},
-- {848, 389,1060, 629},
-- {848, 433,1060, 629},
-- {848, 389,1060, 629},
-- {848, 518,1060, 629},
-- {1056, 628,1056, 628},
-- {1056, 628,1056, 628},
-- {800, 449,1000, 644},
-- {800, 525,1000, 635}
--};
--
--static const SiS300_LVDSDataStruct SiS300_LVDS800x600Data_2[] =
--{
-- {1056, 628,1056, 628},
-- {1056, 628,1056, 628},
-- {1056, 628,1056, 628},
-- {1056, 628,1056, 628},
-- {1056, 628,1056, 628},
-- {1056, 628,1056, 628},
-- {1056, 628,1056, 628},
-- {800, 449,1000, 644},
-- {800, 525,1000, 635}
--};
--
--static const SiS300_LVDSDataStruct SiS300_LVDS1024x768Data_1[] =
--{
-- {840, 438,1344, 806},
-- {840, 409,1344, 806},
-- {840, 438,1344, 806},
-- {840, 409,1344, 806},
-- {840, 518,1344, 806},
-- {1050, 638,1344, 806},
-- {1344, 806,1344, 806},
-- {800, 449,1280, 801},
-- {800, 525,1280, 813}
--};
--
--static const SiS300_LVDSDataStruct SiS300_LVDS1024x768Data_2[] =
--{
-- {1344, 806,1344, 806},
-- {1344, 806,1344, 806},
-- {1344, 806,1344, 806},
-- {1344, 806,1344, 806},
-- {1344, 806,1344, 806},
-- {1344, 806,1344, 806},
-- {1344, 806,1344, 806},
-- {800, 449,1280, 801},
-- {800, 525,1280, 813}
--};
--
--static const SiS300_LVDSDataStruct SiS300_LVDS1280x1024Data_1[]=
--{
-- {1048, 442,1688,1066},
-- {1048, 392,1688,1066},
-- {1048, 442,1688,1066},
-- {1048, 392,1688,1066},
-- {1048, 522,1688,1066},
-- {1208, 642,1688,1066},
-- {1432, 810,1688,1066},
-- {1688,1066,1688,1066}
--};
--
--static const SiS300_LVDSDataStruct SiS300_LVDS1280x1024Data_2[]=
--{
-- {1688,1066,1688,1066},
-- {1688,1066,1688,1066},
-- {1688,1066,1688,1066},
-- {1688,1066,1688,1066},
-- {1688,1066,1688,1066},
-- {1688,1066,1688,1066},
-- {1688,1066,1688,1066},
-- {1688,1066,1688,1066}
--};
--
--static const SiS300_LVDSDataStruct SiS300_LVDS1400x1050Data_1[] =
--{
-- {928, 416, 1688, 1066},
-- {928, 366, 1688, 1066},
-- {928, 416, 1688, 1066},
-- {928, 366, 1688, 1066},
-- {928, 496, 1688, 1066},
-- {1088, 616, 1688, 1066},
-- {1312, 784, 1688, 1066},
-- {1568, 1040, 1688, 1066},
-- {1688, 1066, 1688, 1066}
--};
--
--static const SiS300_LVDSDataStruct SiS300_LVDS1400x1050Data_2[] =
--{
-- {1688,1066, 1688,1066},
-- {1688,1066, 1688,1066},
-- {1688,1066, 1688,1066},
-- {1688,1066, 1688,1066},
-- {1688,1066, 1688,1066},
-- {1688,1066, 1688,1066},
-- {1688,1066, 1688,1066},
-- {1688,1066, 1688,1066},
-- {1688,1066, 1688,1066},
--};
--
--static const SiS300_LVDSDataStruct SiS300_LVDS1600x1200Data_1[]=
--{
-- {1088, 450, 2048,1250},
-- {1088, 400, 2048,1250},
-- {1088, 450, 2048,1250},
-- {1088, 400, 2048,1250},
-- {1088, 530, 2048,1250},
-- {1248, 650, 2048,1250},
-- {1472, 818, 2048,1250},
-- {1728,1066, 2048,1250},
-- {1848,1066, 2048,1250},
-- {2048,1250, 2048,1250}
--};
--
--static const SiS300_LVDSDataStruct SiS300_LVDS1600x1200Data_2[]=
--{
-- {2048,1250, 2048,1250},
-- {2048,1250, 2048,1250},
-- {2048,1250, 2048,1250},
-- {2048,1250, 2048,1250},
-- {2048,1250, 2048,1250},
-- {2048,1250, 2048,1250},
-- {2048,1250, 2048,1250},
-- {2048,1250, 2048,1250},
-- {2048,1250, 2048,1250},
-- {2048,1250, 2048,1250}
--};
--
--static const SiS300_LVDSDataStruct SiS300_LVDS1280x768Data_1[]=
--{
-- { 768, 438, 1408, 806},
-- { 768, 388, 1408, 806},
-- { 768, 438, 1408, 806},
-- { 768, 388, 1408, 806},
-- { 768, 518, 1408, 806},
-- { 928, 638, 1408, 806},
-- {1152, 806, 1408, 806},
-- {1408, 806, 1408, 806},
-- {1408, 806, 1408, 806}
--};
--
--static const SiS300_LVDSDataStruct SiS300_LVDS1280x768Data_2[]=
--{
-- {1408, 806, 1408, 806},
-- {1408, 806, 1408, 806},
-- {1408, 806, 1408, 806},
-- {1408, 806, 1408, 806},
-- {1408, 806, 1408, 806},
-- {1408, 806, 1408, 806},
-- {1408, 806, 1408, 806},
-- {1408, 806, 1408, 806},
-- {1408, 806, 1408, 806}
--};
--
--static const SiS300_LVDSDataStruct SiS300_LVDS1024x600Data_1[] =
--{
-- {840, 604,1344, 800},
-- {840, 560,1344, 800},
-- {840, 604,1344, 800},
-- {840, 560,1344, 800},
-- {840, 689,1344, 800},
-- {1050, 800,1344, 800},
-- {1344, 800,1344, 800},
-- {800, 449,1280, 789},
-- {800, 525,1280, 785}
--};
--
--static const SiS300_LVDSDataStruct SiS300_LVDS1024x600Data_2[] =
--{
-- {1344, 800,1344, 800},
-- {1344, 800,1344, 800},
-- {1344, 800,1344, 800},
-- {1344, 800,1344, 800},
-- {1344, 800,1344, 800},
-- {1344, 800,1344, 800},
-- {1344, 800,1344, 800},
-- {800, 449,1280, 801},
-- {800, 525,1280, 813}
--};
--
--static const SiS300_LVDSDataStruct SiS300_LVDS1152x768Data_1[] =
--{
-- {840, 438,1344, 806},
-- {840, 409,1344, 806},
-- {840, 438,1344, 806},
-- {840, 409,1344, 806},
-- {840, 518,1344, 806},
-- {1050, 638,1344, 806},
-- {1344, 806,1344, 806},
-- {800, 449,1280, 801},
-- {800, 525,1280, 813}
--};
--
--static const SiS300_LVDSDataStruct SiS300_LVDS1152x768Data_2[] =
--{
-- {1344, 806,1344, 806},
-- {1344, 806,1344, 806},
-- {1344, 806,1344, 806},
-- {1344, 806,1344, 806},
-- {1344, 806,1344, 806},
-- {1344, 806,1344, 806},
-- {1344, 806,1344, 806},
-- {800, 449,1280, 801},
-- {800, 525,1280, 813}
--};
--
--/* TW: pass 1:1 data */
--static const SiS300_LVDSDataStruct SiS300_LVDSXXXxXXXData_1[]=
--{
-- { 800, 449, 800, 449},
-- { 800, 449, 800, 449},
-- { 900, 449, 900, 449},
-- { 900, 449, 900, 449},
-- { 800, 525, 800, 525}, /* 640x480 */
-- {1056, 628, 1056, 628}, /* 800x600 */
-- {1344, 806, 1344, 806}, /* 1024x768 */
-- {1344,1066, 1344,1066}, /* 1280x1024 */ /* INSERTED ! */
-- {1688, 806, 1688, 806}, /* 1280x768 ! */
-- /* No other panels ! */
--};
--
--static const SiS300_LVDSDataStruct SiS300_LVDS640x480Data_1[] =
--{
-- {800, 449, 800, 449},
-- {800, 449, 800, 449},
-- {800, 449, 800, 449},
-- {800, 449, 800, 449},
-- {800, 525, 800, 525},
-- {1056, 628,1056, 628},
-- {1056, 628,1056, 628},
-- {1056, 628,1056, 628},
-- {1056, 628,1056, 628}
--};
--
--static const SiS300_LVDSDataStruct SiS300_LVDS1280x960Data_1[] = /* TW: New */
--{
-- {840, 438,1344, 806},
-- {840, 409,1344, 806},
-- {840, 438,1344, 806},
-- {840, 409,1344, 806},
-- {840, 518,1344, 806},
-- {1050, 638,1344, 806},
-- {1344, 806,1344, 806},
-- {800, 449,1280, 801},
-- {800, 525,1280, 813}
--};
--
--static const SiS300_LVDSDataStruct SiS300_LVDS1280x960Data_2[] = /* TW: New */
--{
-- {1344, 806,1344, 806},
-- {1344, 806,1344, 806},
-- {1344, 806,1344, 806},
-- {1344, 806,1344, 806},
-- {1344, 806,1344, 806},
-- {1344, 806,1344, 806},
-- {1344, 806,1344, 806},
-- {800, 449,1280, 801},
-- {800, 525,1280, 813}
--};
--
--static const SiS300_LVDSDataStruct SiS300_LCDA1400x1050Data_1[] = /* TW: New */
--{ /* TW: Might be temporary (invalid) data */
-- {928, 416, 1688, 1066},
-- {928, 366, 1688, 1066},
-- {1008, 416, 1688, 1066},
-- {1008, 366, 1688, 1066},
-- {1200, 530, 1688, 1066},
-- {1088, 616, 1688, 1066},
-- {1312, 784, 1688, 1066},
-- {1568, 1040, 1688, 1066},
-- {1688, 1066, 1688, 1066}
--};
--
--static const SiS300_LVDSDataStruct SiS300_LCDA1400x1050Data_2[] = /* TW: New */
--{ /* TW: Temporary data. Not valid */
-- {1344, 806,1344, 806},
-- {1344, 806,1344, 806},
-- {1344, 806,1344, 806},
-- {1344, 806,1344, 806},
-- {1344, 806,1344, 806},
-- {1344, 806,1344, 806},
-- {1344, 806,1344, 806},
-- {800, 449,1280, 801},
-- {800, 525,1280, 813}
--};
--
--static const SiS300_LVDSDataStruct SiS300_LCDA1600x1200Data_1[] = /* TW: New */
--{ /* TW: Temporary data. Not valid */
-- {1344, 806,1344, 806},
-- {1344, 806,1344, 806},
-- {1344, 806,1344, 806},
-- {1344, 806,1344, 806},
-- {1344, 806,1344, 806},
-- {1344, 806,1344, 806},
-- {1344, 806,1344, 806},
-- {800, 449,1280, 801},
-- {800, 525,1280, 813}
--};
--
--static const SiS300_LVDSDataStruct SiS300_LCDA1600x1200Data_2[] = /* TW: New */
--{ /* TW: Temporary data. Not valid */
-- {0, 0, 0, 0},
-- {0, 0, 0, 0},
-- {0, 0, 0, 0},
-- {0, 0, 0, 0},
-- {0, 0, 0, 0},
-- {0, 0, 0, 0},
-- {0, 0, 0, 0},
-- {0, 0, 0, 0},
-- {0, 0, 0, 0},
-- {0, 0, 0, 0},
-- {0, 0, 0, 0},
-- {0, 0, 0, 0}
--};
--
--
--/* TW: New: */
--static const SiS300_LVDSDataStruct SiS300_CHTVUNTSCData[] =
--{
-- {840, 600, 840, 600},
-- {840, 600, 840, 600},
-- {840, 600, 840, 600},
-- {840, 600, 840, 600},
-- {784, 600, 784, 600},
-- {1064, 750,1064, 750}
--};
--
--static const SiS300_LVDSDataStruct SiS300_CHTVONTSCData[] =
--{
-- {840, 525, 840, 525},
-- {840, 525, 840, 525},
-- {840, 525, 840, 525},
-- {840, 525, 840, 525},
-- {784, 525, 784, 525},
-- {1040, 700,1040, 700}
--};
--
- static const SiS300_LVDSDataStruct SiS300_CHTVUPALData[] =
- {
- {1008, 625,1008, 625},
- {1008, 625,1008, 625},
- {1008, 625,1008, 625},
- {1008, 625,1008, 625},
-- {840, 750, 840, 750},
-- {936, 836, 936, 836}
-+ { 840, 750, 840, 750},
-+ { 936, 836, 936, 836}
- };
-
- static const SiS300_LVDSDataStruct SiS300_CHTVOPALData[] =
-@@ -2034,8 +1000,8 @@ static const SiS300_LVDSDataStruct SiS3
- {1008, 625,1008, 625},
- {1008, 625,1008, 625},
- {1008, 625,1008, 625},
-- {840, 625, 840, 625},
-- {960, 750, 960, 750}
-+ { 840, 625, 840, 625},
-+ { 960, 750, 960, 750}
- };
-
- static const SiS300_LVDSDataStruct SiS300_CHTVSOPALData[] =
-@@ -2044,12 +1010,10 @@ static const SiS300_LVDSDataStruct SiS3
- {1008, 625,1008, 625},
- {1008, 625,1008, 625},
- {1008, 625,1008, 625},
-- {840, 500, 840, 500},
-- {944, 625, 944, 625}
-+ { 840, 500, 840, 500},
-+ { 944, 625, 944, 625}
- };
-
--/* TW: new end */
--
- typedef struct _SiS300_LVDSDesStruct
- {
- USHORT LCDHDES;
-@@ -2058,57 +1022,90 @@ typedef struct _SiS300_LVDSDesStruct
-
- static const SiS300_LVDSDesStruct SiS300_PanelType00_1[] =
- {
-+ { 1059, 626 }, /* 2.08 */
-+ { 1059, 624 },
-+ { 1059, 626 },
-+ { 1059, 624 },
-+ { 1059, 624 },
-+ { 0, 627 },
-+ { 0, 627 },
-+ { 0, 0 },
-+ { 0, 0 }
-+#if 0
- {0, 626},
- {0, 624},
- {0, 626},
- {0, 624},
- {0, 624},
-- { 0, 627},
-- { 0, 627},
-- { 0, 0},
-- { 0, 0}
-+ {0, 627},
-+ {0, 627},
-+ {0, 0},
-+ {0, 0}
-+#endif
- };
-
- static const SiS300_LVDSDesStruct SiS300_PanelType01_1[] =
- {
-+ { 0, 0 }, /* 2.08 */
-+ { 0, 0 },
-+ { 0, 0 },
-+ { 0, 0 },
-+ { 0, 0 },
-+ { 0, 0 },
-+ { 0, 0 },
-+ { 0, 0 },
-+ { 0, 0 }
-+#if 0
- {1343, 798},
- {1343, 794},
- {1343, 798},
- {1343, 794},
- {1343, 0},
- {1343, 0},
-- { 0, 805},
-- { 0, 794},
-- { 0, 0}
-+ { 0, 805},
-+ { 0, 794},
-+ { 0, 0}
-+#endif
- };
-
- static const SiS300_LVDSDesStruct SiS300_PanelType02_1[] =
- {
-+ { 1059, 626 }, /* 2.08 */
-+ { 1059, 624 },
-+ { 1059, 626 },
-+ { 1059, 624 },
-+ { 1059, 624 },
-+ { 0, 627 },
-+ { 0, 627 },
-+ { 0, 0 },
-+ { 0, 0 }
-+#if 0
- {0, 626},
- {0, 624},
- {0, 626},
- {0, 624},
- {0, 624},
-- { 0, 627},
-- { 0, 627},
-- { 0, 0},
-- { 0, 0}
-+ {0, 627},
-+ {0, 627},
-+ {0, 0},
-+ {0, 0}
-+#endif
- };
-
- static const SiS300_LVDSDesStruct SiS300_PanelType03_1[] =
- {
-- { 8, 436},
-- { 8, 440},
-- { 8, 436},
-- { 8, 440},
-- { 8, 512},
-+ { 8, 436},
-+ { 8, 440},
-+ { 8, 436},
-+ { 8, 440},
-+ { 8, 512},
- {1343, 798},
- {1343, 794},
- {1343, 798},
- {1343, 794}
- };
-
--static const SiS300_LVDSDesStruct SiS300_PanelType04_1[] =
-+static const SiS300_LVDSDesStruct SiS300_PanelType04_1[] = /* 1280x1024 */
- {
- {1343, 798},
- {1343, 794},
-@@ -2116,9 +1113,9 @@ static const SiS300_LVDSDesStruct SiS30
- {1343, 794},
- {1343, 0},
- {1343, 0},
-- { 0, 805},
-- { 0, 794},
-- { 0, 0}
-+ { 0, 805},
-+ { 0, 794},
-+ { 0, 0}
- };
-
- static const SiS300_LVDSDesStruct SiS300_PanelType05_1[] =
-@@ -2129,9 +1126,9 @@ static const SiS300_LVDSDesStruct SiS30
- {1343, 794},
- {1343, 0},
- {1343, 0},
-- { 0, 805},
-- { 0, 794},
-- { 0, 0}
-+ { 0, 805},
-+ { 0, 794},
-+ { 0, 0}
- };
-
- static const SiS300_LVDSDesStruct SiS300_PanelType06_1[] =
-@@ -2142,9 +1139,9 @@ static const SiS300_LVDSDesStruct SiS30
- {1343, 794},
- {1343, 0},
- {1343, 0},
-- { 0, 805},
-- { 0, 794},
-- { 0, 0}
-+ { 0, 805},
-+ { 0, 794},
-+ { 0, 0}
- };
-
- static const SiS300_LVDSDesStruct SiS300_PanelType07_1[] =
-@@ -2155,9 +1152,9 @@ static const SiS300_LVDSDesStruct SiS30
- {1343, 794},
- {1343, 0},
- {1343, 0},
-- { 0, 805},
-- { 0, 794},
-- { 0, 0}
-+ { 0, 805},
-+ { 0, 794},
-+ { 0, 0}
- };
-
- static const SiS300_LVDSDesStruct SiS300_PanelType08_1[] =
-@@ -2167,10 +1164,10 @@ static const SiS300_LVDSDesStruct SiS30
- {1059, 626},
- {1059, 624},
- {1059, 624},
-- { 0, 627},
-- { 0, 627},
-- { 0, 0},
-- { 0, 0}
-+ { 0, 627},
-+ { 0, 627},
-+ { 0, 0},
-+ { 0, 0}
- };
-
- static const SiS300_LVDSDesStruct SiS300_PanelType09_1[] =
-@@ -2181,9 +1178,9 @@ static const SiS300_LVDSDesStruct SiS30
- {1343, 794},
- {1343, 0},
- {1343, 0},
-- { 0, 805},
-- { 0, 794},
-- { 0, 0}
-+ { 0, 805},
-+ { 0, 794},
-+ { 0, 0}
- };
-
- static const SiS300_LVDSDesStruct SiS300_PanelType0a_1[] =
-@@ -2193,23 +1190,23 @@ static const SiS300_LVDSDesStruct SiS30
- {1059, 626},
- {1059, 624},
- {1059, 624},
-- { 0, 627},
-- { 0, 627},
-- { 0, 0},
-- { 0, 0}
-+ { 0, 627},
-+ { 0, 627},
-+ { 0, 0},
-+ { 0, 0}
- };
-
- static const SiS300_LVDSDesStruct SiS300_PanelType0b_1[] =
- {
-- {1343, 0},
-- {1343, 0},
-- {1343, 0},
-- {1343, 0},
-- {1343, 0}, /* 640x480 - BIOS 1343, 0 */
-- {1343, 0},
-- { 0, 799},
-- { 0, 0},
-- { 0, 0}
-+ {1343, 0},
-+ {1343, 0},
-+ {1343, 0},
-+ {1343, 0},
-+ {1343, 0},
-+ {1343, 0},
-+ { 0, 799},
-+ { 0, 0},
-+ { 0, 0}
- };
-
- static const SiS300_LVDSDesStruct SiS300_PanelType0c_1[] =
-@@ -2220,9 +1217,9 @@ static const SiS300_LVDSDesStruct SiS30
- {1343, 794},
- {1343, 0},
- {1343, 0},
-- { 0, 805},
-- { 0, 794},
-- { 0, 0}
-+ { 0, 805},
-+ { 0, 794},
-+ { 0, 0}
- };
-
- static const SiS300_LVDSDesStruct SiS300_PanelType0d_1[] =
-@@ -2233,9 +1230,9 @@ static const SiS300_LVDSDesStruct SiS30
- {1343, 794},
- {1343, 0},
- {1343, 0},
-- { 0, 805},
-- { 0, 794},
-- { 0, 0}
-+ { 0, 805},
-+ { 0, 794},
-+ { 0, 0}
- };
-
- static const SiS300_LVDSDesStruct SiS300_PanelType0e_1[] =
-@@ -2244,11 +1241,11 @@ static const SiS300_LVDSDesStruct SiS30
- {1343, 794},
- {1343, 798},
- {1343, 794},
-- {1343, 0}, /* 640x480 */
-- {1343, 0}, /* 800x600 */
-- { 0, 805}, /* 1024x768 */
-- { 0, 794}, /* 1280x1024 */
-- { 0, 0} /* 1280x960 - not applicable */
-+ {1343, 0}, /* 640x480 */
-+ {1343, 0}, /* 800x600 */
-+ { 0, 805}, /* 1024x768 */
-+ { 0, 794}, /* 1280x1024 */
-+ { 0, 0} /* 1280x960 - not applicable */
- };
-
- static const SiS300_LVDSDesStruct SiS300_PanelType0f_1[] =
-@@ -2259,9 +1256,9 @@ static const SiS300_LVDSDesStruct SiS30
- {1343, 794},
- {1343, 0},
- {1343, 0},
-- { 0, 805},
-- { 0, 794},
-- { 0, 0}
-+ { 0, 805},
-+ { 0, 794},
-+ { 0, 0}
- };
-
- static const SiS300_LVDSDesStruct SiS300_PanelType00_2[] =
-@@ -2271,10 +1268,10 @@ static const SiS300_LVDSDesStruct SiS30
- {976, 527},
- {976, 502},
- {976, 567},
-- { 0, 627},
-- { 0, 627},
-- { 0, 0},
-- { 0, 0}
-+ { 0, 627},
-+ { 0, 627},
-+ { 0, 0},
-+ { 0, 0}
- };
-
- static const SiS300_LVDSDesStruct SiS300_PanelType01_2[] =
-@@ -2285,9 +1282,9 @@ static const SiS300_LVDSDesStruct SiS30
- {1152, 597},
- {1152, 662},
- {1232, 722},
-- { 0, 805},
-- { 0, 794},
-- { 0, 0}
-+ { 0, 805},
-+ { 0, 794},
-+ { 0, 0}
- };
-
- static const SiS300_LVDSDesStruct SiS300_PanelType02_2[] =
-@@ -2297,10 +1294,10 @@ static const SiS300_LVDSDesStruct SiS30
- {976, 527},
- {976, 502},
- {976, 567},
-- { 0, 627},
-- { 0, 627},
-- { 0, 0},
-- { 0, 0}
-+ { 0, 627},
-+ { 0, 627},
-+ { 0, 0},
-+ { 0, 0}
- };
-
- static const SiS300_LVDSDesStruct SiS300_PanelType03_2[] =
-@@ -2472,156 +1469,57 @@ static const SiS300_LVDSDesStruct SiS30
- { 0, 0}
- };
-
--static const SiS300_LVDSDesStruct SiS300_PanelTypeNS_1[]=
-+/* Custom data for Barco iQ R200/300/400 (BIOS 2.00.07) */
-+static const SiS300_LVDSDesStruct SiS300_PanelType04_1a[] = /* 1280x1024 (1366x1024) */
- {
-- { 8, 0},
-- { 8, 0},
-- { 8, 0},
-- { 8, 0},
-- { 8, 0},
-- { 0, 0},
-- { 0, 0},
-- { 0, 0},
-- { 0, 806},
-- { 0, 0 }
--};
--
--static const SiS300_LVDSDesStruct SiS300_PanelTypeNS_2[] =
--{
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0}
--};
--
--static const SiS300_LVDSDesStruct SiS300_PanelType1076_1[] = /* TW: New */
--{
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0}
--};
--
--static const SiS300_LVDSDesStruct SiS300_PanelType1076_2[] = /* TW: New */
--{
-- { 1152, 622 },
-- { 1152, 597 },
-- { 1152, 622 },
-- { 1152, 597 },
-- { 1152, 622 },
-- { 1232, 722 },
-- { 0, 0 },
-- { 0, 794 },
-- { 0, 0 }
--};
--
--static const SiS300_LVDSDesStruct SiS300_PanelType1210_1[] = /* TW: New */
--{
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0}
--};
--
--static const SiS300_LVDSDesStruct SiS300_PanelType1210_2[] = /* TW: New */
--{
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0}
--};
--
--static const SiS300_LVDSDesStruct SiS300_PanelType1296_1[] = /* TW: New */
--{
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0}
--};
--
--static const SiS300_LVDSDesStruct SiS300_PanelType1296_2[] = /* TW: New */
--{
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0}
--};
--
--
--/* TW: New */
--static const SiS300_LVDSDesStruct SiS300_CHTVUNTSCDesData[] =
--{
-- { 0, 0},
-- { 0, 0},
-- { 0, 0},
-- { 0, 0},
-- { 0, 0},
-- { 0, 0}
--};
--
--static const SiS300_LVDSDesStruct SiS300_CHTVONTSCDesData[] =
--{
-- { 0, 0},
-- { 0, 0},
-- { 0, 0},
-- { 0, 0},
-- { 0, 0},
-- { 0, 0}
--};
--
--static const SiS300_LVDSDesStruct SiS300_CHTVUPALDesData[] =
--{
-- {256, 0},
-- {256, 0},
-- {256, 0},
-- {256, 0},
-- { 0, 0},
-- { 0, 0}
-+ {1330, 798}, /* 320x200 */
-+ {1330, 794},
-+ {1330, 798},
-+ {1330, 794},
-+ {1330, 0}, /* 640x480 / 320x240 */
-+ {1343, 0}, /* 800x600 / 400x300 */
-+ { 0, 805}, /* 1024x768 / 512x384 */
-+ {1688,1066}, /* 1280x1024 */
-+ { 0, 0} /* 1360x1024 */
- };
-
--static const SiS300_LVDSDesStruct SiS300_CHTVOPALDesData[] =
-+static const SiS300_LVDSDesStruct SiS300_PanelType04_2a[] =
- {
-- {256, 0},
-- {256, 0},
-- {256, 0},
-- {256, 0},
-- { 0, 0},
-- { 0, 0}
-+ {1152, 622},
-+ {1152, 597},
-+ {1152, 622},
-+ {1152, 597},
-+ {1152, 662},
-+ {1232, 722},
-+ { 0, 805},
-+ {1688,1066},
-+ { 0, 0}
-+};
-+
-+/* Custom data for Barco iQ G200/300/400 (BIOS 2.00.07) */
-+static const SiS300_LVDSDesStruct SiS300_PanelType04_1b[] = /* 1024x768 */
-+{
-+ {1330, 798}, /* 320x200 */
-+ {1330, 794},
-+ {1330, 798},
-+ {1330, 794},
-+ {1330, 0}, /* 640x480 / 320x240 */
-+ {1343, 0}, /* 800x600 / 400x300 */
-+ { 0, 805} /* 1024x768 / 512x384 */
-+};
-+
-+static const SiS300_LVDSDesStruct SiS300_PanelType04_2b[] =
-+{
-+ {1152, 622},
-+ {1152, 597},
-+ {1152, 622},
-+ {1152, 597},
-+ {1152, 662},
-+ {1232, 722},
-+ { 0, 805}
- };
--/* TW: New end */
-
--/* TW: New for SiS300+301LV */
-+
- typedef struct _SiS300_Part2PortTblStruct
- {
- UCHAR CR[12];
-@@ -2726,6 +1624,28 @@ static const SiS300_LVDSCRT1DataStruct
- 0x01 }}
- };
-
-+static const SiS300_LVDSCRT1DataStruct SiS300_LVDSCRT1800x600_1_H[] =
-+{
-+ {{0x30,0x27,0x94,0x2c,0x92,0xaf,0x1f,
-+ 0x90,0x85,0x8f,0xab,0x30,0x00,0x04,
-+ 0x00 }},
-+ {{0x30,0x27,0x94,0x2c,0x92,0x83,0x1f,
-+ 0x5e,0x83,0x5d,0x79,0x10,0x00,0x04,
-+ 0x00 }},
-+ {{0x30,0x27,0x94,0x2c,0x92,0xaf,0x1f,
-+ 0x90,0x85,0x8f,0xab,0x30,0x00,0x04,
-+ 0x00 }},
-+ {{0x30,0x27,0x94,0x2c,0x92,0x83,0x1f,
-+ 0x5e,0x83,0x5d,0x79,0x10,0x00,0x04,
-+ 0x00 }},
-+ {{0x30,0x27,0x94,0x2c,0x92,0x04,0x3e,
-+ 0xe0,0x85,0xdf,0xfb,0x10,0x00,0x04,
-+ 0x00 }},
-+ {{0x3d,0x31,0x81,0x37,0x1f,0x72,0xf0,
-+ 0x58,0x8c,0x57,0x73,0x20,0x00,0x05,
-+ 0x01 }}
-+};
-+
- static const SiS300_LVDSCRT1DataStruct SiS300_LVDSCRT11024x768_1[] =
- {
- {{0x64,0x4f,0x88,0x54,0x9f,0xc4,0x1f,
-@@ -2751,55 +1671,31 @@ static const SiS300_LVDSCRT1DataStruct
- 0x01}}
- };
-
--static const SiS300_LVDSCRT1DataStruct SiS300_LVDSCRT11280x1024_1[] =
--{
-- {{0x63,0x4f,0x87,0x54,0x9f,0xb4,0x1f,
-- 0x92,0x89,0x8f,0xb5,0x30,0x00,0x01,
-- 0x00 }},
-- {{0x63,0x4f,0x87,0x54,0x9f,0x82,0x1f,
-- 0x60,0x87,0x5d,0x83,0x10,0x00,0x01,
-- 0x00 }},
-- {{0x63,0x4f,0x87,0x54,0x9f,0xb4,0x1f,
-- 0x92,0x89,0x8f,0xb5,0x30,0x00,0x01,
-- 0x00 }},
-- {{0x63,0x4f,0x87,0x54,0x9f,0x82,0x1f,
-- 0x60,0x87,0x5d,0x83,0x10,0x00,0x01,
-- 0x00 }},
-- {{0x63,0x4f,0x87,0x54,0x9f,0x04,0x3e,
-- 0xe2,0x89,0xdf,0x05,0x00,0x00,0x01,
-- 0x00 }},
-- {{0x7e,0x63,0x82,0x68,0x15,0x7c,0xf0,
-- 0x5a,0x8f,0x57,0x7d,0x20,0x00,0x26,
-- 0x01 }},
-- {{0xa3,0x7f,0x87,0x86,0x97,0x24,0xf5,
-- 0x02,0x88,0xff,0x25,0x10,0x00,0x02,
-- 0x01 }}
--};
--
--static const SiS300_LVDSCRT1DataStruct SiS300_LVDSCRT1800x600_1_H[] =
-+static const SiS300_LVDSCRT1DataStruct SiS300_LVDSCRT11024x768_1_H[] =
- {
-- {{0x30,0x27,0x94,0x2c,0x92,0xaf,0x1f,
-- 0x90,0x85,0x8f,0xab,0x30,0x00,0x04,
-- 0x00 }},
-- {{0x30,0x27,0x94,0x2c,0x92,0x83,0x1f,
-- 0x5e,0x83,0x5d,0x79,0x10,0x00,0x04,
-- 0x00 }},
-- {{0x30,0x27,0x94,0x2c,0x92,0xaf,0x1f,
-- 0x90,0x85,0x8f,0xab,0x30,0x00,0x04,
-- 0x00 }},
-- {{0x30,0x27,0x94,0x2c,0x92,0x83,0x1f,
-- 0x5e,0x83,0x5d,0x79,0x10,0x00,0x04,
-- 0x00 }},
-- {{0x30,0x27,0x94,0x2c,0x92,0x04,0x3e,
-- 0xe0,0x85,0xdf,0xfb,0x10,0x00,0x04,
-+ {{0x2f,0x27,0x93,0x2b,0x90,0xc4,0x1f,
-+ 0x92,0x89,0x8f,0xb5,0x30,0x00,0x44,
- 0x00 }},
-- {{0x3d,0x31,0x81,0x37,0x1f,0x72,0xf0,
-- 0x58,0x8c,0x57,0x73,0x20,0x00,0x05,
-+ {{0x2f,0x27,0x93,0x2b,0x90,0x97,0x1f,
-+ 0x60,0x87,0x5D,0x83,0x10,0x00,0x44,
-+ 0x00}},
-+ {{0x2f,0x27,0x93,0x2b,0x90,0xc4,0x1f,
-+ 0x92,0x89,0x8f,0xb5,0x30,0x00,0x44,
-+ 0x00}},
-+ {{0x2f,0x27,0x93,0x2b,0x90,0x97,0x1f,
-+ 0x60,0x87,0x5D,0x83,0x10,0x00,0x44,
-+ 0x00}},
-+ {{0x2f,0x27,0x93,0x2b,0x90,0x04,0x3e,
-+ 0xE2,0x89,0xdf,0x05,0x00,0x00,0x44,
-+ 0x00}},
-+ {{0x3c,0x31,0x80,0x35,0x1c,0x7c,0xf0,
-+ 0x5A,0x8F,0x57,0x7D,0x20,0x00,0x55,
-+ 0x01}},
-+ {{0x4f,0x3F,0x93,0x45,0x0D,0x24,0xf5,
-+ 0x02,0x88,0xff,0x25,0x10,0x00,0x01,
- 0x01 }}
--};
-
--static const SiS300_LVDSCRT1DataStruct SiS300_LVDSCRT11024x768_1_H[] =
--{
-+#if 0
- {{0x37,0x27,0x9B,0x2b,0x94,0xc4,0x1f,
- 0x92,0x89,0x8f,0xb5,0x30,0x00,0x44,
- 0x00 }},
-@@ -2821,6 +1717,32 @@ static const SiS300_LVDSCRT1DataStruct
- {{0x4f,0x3F,0x93,0x45,0x0D,0x24,0xf5,
- 0x02,0x88,0xFf,0x25,0x10,0x00,0x01,
- 0x01 }}
-+#endif
-+};
-+
-+static const SiS300_LVDSCRT1DataStruct SiS300_LVDSCRT11280x1024_1[] =
-+{
-+ {{0x63,0x4f,0x87,0x54,0x9f,0xb4,0x1f,
-+ 0x92,0x89,0x8f,0xb5,0x30,0x00,0x01,
-+ 0x00 }},
-+ {{0x63,0x4f,0x87,0x54,0x9f,0x82,0x1f,
-+ 0x60,0x87,0x5d,0x83,0x10,0x00,0x01,
-+ 0x00 }},
-+ {{0x63,0x4f,0x87,0x54,0x9f,0xb4,0x1f,
-+ 0x92,0x89,0x8f,0xb5,0x30,0x00,0x01,
-+ 0x00 }},
-+ {{0x63,0x4f,0x87,0x54,0x9f,0x82,0x1f,
-+ 0x60,0x87,0x5d,0x83,0x10,0x00,0x01,
-+ 0x00 }},
-+ {{0x63,0x4f,0x87,0x54,0x9f,0x04,0x3e,
-+ 0xe2,0x89,0xdf,0x05,0x00,0x00,0x01,
-+ 0x00 }},
-+ {{0x7e,0x63,0x82,0x68,0x15,0x7c,0xf0,
-+ 0x5a,0x8f,0x57,0x7d,0x20,0x00,0x26,
-+ 0x01 }},
-+ {{0xa3,0x7f,0x87,0x86,0x97,0x24,0xf5,
-+ 0x02,0x88,0xff,0x25,0x10,0x00,0x02,
-+ 0x01 }}
- };
-
- static const SiS300_LVDSCRT1DataStruct SiS300_LVDSCRT11280x1024_1_H[] =
-@@ -2870,32 +1792,29 @@ static const SiS300_LVDSCRT1DataStruct
- 0x01 }}
- };
-
--static const SiS300_LVDSCRT1DataStruct SiS300_LVDSCRT11024x768_2[] =
-+static const SiS300_LVDSCRT1DataStruct SiS300_LVDSCRT1800x600_2_H[] =
- {
-- {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
-- 0x4a,0x80,0x8f,0x25,0x30,0x00,0x06,
-+ {{0x3d,0x27,0x81,0x32,0x1a,0x72,0x3e,
-+ 0xf4,0x88,0x8f,0x73,0x20,0x00,0x05,
- 0x00 }},
-- {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
-- 0x31,0x87,0x5d,0x25,0x30,0x00,0x06,
-+ {{0x3d,0x27,0x81,0x32,0x1a,0x72,0x3e,
-+ 0xdb,0x8f,0x5d,0x73,0x20,0x00,0x05,
- 0x00 }},
-- {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
-- 0x4a,0x80,0x8f,0x25,0x30,0x00,0x06,
-+ {{0x3d,0x27,0x81,0x32,0x1a,0x72,0x3e,
-+ 0xf4,0x88,0x8f,0x73,0x20,0x00,0x05,
- 0x00 }},
-- {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
-- 0x31,0x87,0x5d,0x25,0x30,0x00,0x06,
-+ {{0x3d,0x27,0x81,0x3a,0x1a,0x72,0x3e,
-+ 0xdb,0x8f,0x5d,0x73,0x20,0x00,0x05,
- 0x00 }},
-- {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
-- 0x72,0x88,0xdf,0x25,0x30,0x00,0x06,
-+ {{0x3d,0x27,0x81,0x32,0x1a,0x72,0xba,
-+ 0x1c,0x80,0xdf,0x73,0x00,0x00,0x05,
- 0x00 }},
-- {{0xa3,0x63,0x87,0x78,0x89,0x24,0xf1,
-- 0xae,0x84,0x57,0x25,0x30,0x00,0x02,
-- 0x01 }},
-- {{0xa3,0x7f,0x87,0x86,0x97,0x24,0xf5,
-- 0x02,0x88,0xff,0x25,0x10,0x00,0x02,
-+ {{0x3d,0x31,0x81,0x37,0x1f,0x72,0xf0,
-+ 0x58,0x8c,0x57,0x73,0x20,0x00,0x05,
- 0x01 }}
- };
-
--static const SiS300_LVDSCRT1DataStruct SiS300_LVDSCRT11280x1024_2[] =
-+static const SiS300_LVDSCRT1DataStruct SiS300_LVDSCRT11024x768_2[] =
- {
- {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
- 0x4a,0x80,0x8f,0x25,0x30,0x00,0x06,
-@@ -2920,28 +1839,6 @@ static const SiS300_LVDSCRT1DataStruct
- 0x01 }}
- };
-
--static const SiS300_LVDSCRT1DataStruct SiS300_LVDSCRT1800x600_2_H[] =
--{
-- {{0x3d,0x27,0x81,0x32,0x1a,0x72,0x3e,
-- 0xf4,0x88,0x8f,0x73,0x20,0x00,0x05,
-- 0x00 }},
-- {{0x3d,0x27,0x81,0x32,0x1a,0x72,0x3e,
-- 0xdb,0x8f,0x5d,0x73,0x20,0x00,0x05,
-- 0x00 }},
-- {{0x3d,0x27,0x81,0x32,0x1a,0x72,0x3e,
-- 0xf4,0x88,0x8f,0x73,0x20,0x00,0x05,
-- 0x00 }},
-- {{0x3d,0x27,0x81,0x3a,0x1a,0x72,0x3e,
-- 0xdb,0x8f,0x5d,0x73,0x20,0x00,0x05,
-- 0x00 }},
-- {{0x3d,0x27,0x81,0x32,0x1a,0x72,0xba,
-- 0x1c,0x80,0xdf,0x73,0x00,0x00,0x05,
-- 0x00 }},
-- {{0x3d,0x31,0x81,0x37,0x1f,0x72,0xf0,
-- 0x58,0x8c,0x57,0x73,0x20,0x00,0x05,
-- 0x01 }}
--};
--
- static const SiS300_LVDSCRT1DataStruct SiS300_LVDSCRT11024x768_2_H[] =
- {
- {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
-@@ -2967,6 +1864,31 @@ static const SiS300_LVDSCRT1DataStruct
- 0x01 }}
- };
-
-+static const SiS300_LVDSCRT1DataStruct SiS300_LVDSCRT11280x1024_2[] =
-+{
-+ {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
-+ 0x4a,0x80,0x8f,0x25,0x30,0x00,0x06,
-+ 0x00 }},
-+ {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
-+ 0x31,0x87,0x5d,0x25,0x30,0x00,0x06,
-+ 0x00 }},
-+ {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
-+ 0x4a,0x80,0x8f,0x25,0x30,0x00,0x06,
-+ 0x00 }},
-+ {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
-+ 0x31,0x87,0x5d,0x25,0x30,0x00,0x06,
-+ 0x00 }},
-+ {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
-+ 0x72,0x88,0xdf,0x25,0x30,0x00,0x06,
-+ 0x00 }},
-+ {{0xa3,0x63,0x87,0x78,0x89,0x24,0xf1,
-+ 0xae,0x84,0x57,0x25,0x30,0x00,0x02,
-+ 0x01 }},
-+ {{0xa3,0x7f,0x87,0x86,0x97,0x24,0xf5,
-+ 0x02,0x88,0xff,0x25,0x10,0x00,0x02,
-+ 0x01 }}
-+};
-+
- static const SiS300_LVDSCRT1DataStruct SiS300_LVDSCRT11280x1024_2_H[] =
- {
- {{0x4f,0x27,0x93,0x39,0x81,0x24,0xbb,
-@@ -2992,207 +1914,6 @@ static const SiS300_LVDSCRT1DataStruct
- 0x01}}
- };
-
--static const SiS300_LVDSCRT1DataStruct SiS300_LVDSCRT11024x600_1[] =
--{
-- {{0x64,0x4f,0x88,0x54,0x9f,0x5a,0x3e,
-- 0xe8,0x8f,0x8f,0x5b,0x00,0x00,0x01,
-- 0x00}},
-- {{0x64,0x4f,0x88,0x54,0x9f,0x2e,0x3e,
-- 0xb9,0x80,0x5d,0x2f,0x00,0x00,0x01,
-- 0x00}},
-- {{0x64,0x4f,0x88,0x54,0x9f,0x5a,0x3e,
-- 0xe8,0x8f,0x8f,0x5b,0x00,0x00,0x01,
-- 0x00}},
-- {{0x64,0x4f,0x88,0x54,0x9f,0x2e,0x3e,
-- 0xb9,0x80,0x5d,0x2f,0x00,0x00,0x01,
-- 0x00}},
-- {{0x64,0x4f,0x88,0x54,0x9f,0xaf,0xba,
-- 0x3b,0x82,0xdf,0xb0,0x00,0x00,0x01,
-- 0x00}},
-- {{0x7e,0x63,0x82,0x68,0x15,0x1e,0xf1,
-- 0xae,0x85,0x57,0x1f,0x30,0x00,0x26,
-- 0x01}},
-- {{0xa3,0x7f,0x87,0x86,0x97,0x1e,0xf1,
-- 0xae,0x85,0x57,0x1f,0x30,0x00,0x02,
-- 0x01}}
--};
--
--static const SiS300_LVDSCRT1DataStruct SiS300_LVDSCRT11024x600_1_H[] =
--{
-- {{0x2f,0x27,0x93,0x2b,0x90,0xc4,0x1f,
-- 0x92,0x89,0x8f,0xb5,0x30,0x00,0x44,
-- 0x00}},
-- {{0x2f,0x27,0x93,0x2b,0x90,0x97,0x1f,
-- 0x60,0x87,0x5d,0x83,0x10,0x00,0x44,
-- 0x00}},
-- {{0x2f,0x27,0x93,0x2b,0x90,0xc4,0x1f,
-- 0x92,0x89,0x8f,0xb5,0x30,0x00,0x44,
-- 0x00}},
-- {{0x2f,0x27,0x93,0x2b,0x90,0x97,0x1f,
-- 0x60,0x87,0x5d,0x83,0x10,0x00,0x44,
-- 0x00}},
-- {{0x2f,0x27,0x93,0x2b,0x90,0x04,0x3e,
-- 0xe2,0x89,0xdf,0x05,0x00,0x00,0x44,
-- 0x00}},
-- {{0x3c,0x31,0x80,0x35,0x1c,0x7c,0xf0,
-- 0x5a,0x8f,0x57,0x7d,0x20,0x00,0x55,
-- 0x01}},
-- {{0x4f,0x3f,0x93,0x45,0x0d,0x24,0xf5,
-- 0x02,0x88,0xff,0x25,0x10,0x00,0x01,
-- 0x01}}
--};
--
--static const SiS300_LVDSCRT1DataStruct SiS300_LVDSCRT11024x600_2[] =
--{
-- {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
-- 0x4a,0x80,0x8f,0x25,0x30,0x00,0x06,
-- 0x00}},
-- {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
-- 0x31,0x87,0x5d,0x25,0x30,0x00,0x06,
-- 0x00}},
-- {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
-- 0x4a,0x80,0x8f,0x25,0x30,0x00,0x06,
-- 0x00}},
-- {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
-- 0x31,0x87,0x5d,0x25,0x30,0x00,0x06,
-- 0x00}},
-- {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
-- 0x72,0x88,0xdf,0x25,0x30,0x00,0x06,
-- 0x00}},
-- {{0xa3,0x63,0x87,0x78,0x89,0x24,0xf1,
-- 0xae,0x84,0x57,0x25,0x30,0x00,0x02,
-- 0x01}},
-- {{0xa3,0x7f,0x87,0x86,0x97,0x24,0xf5,
-- 0x02,0x88,0xff,0x25,0x10,0x00,0x02,
-- 0x01}}
--};
--
--static const SiS300_LVDSCRT1DataStruct SiS300_LVDSCRT11024x600_2_H[] =
--{
-- {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
-- 0x4a,0x80,0x8f,0x25,0x30,0x00,0x01,
-- 0x00}},
-- {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
-- 0x31,0x87,0x5d,0x25,0x30,0x00,0x01,
-- 0x00}},
-- {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
-- 0x4a,0x80,0x8f,0x25,0x30,0x00,0x01,
-- 0x00}},
-- {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
-- 0x31,0x87,0x5d,0x25,0x30,0x00,0x01,
-- 0x00}},
-- {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
-- 0x72,0x88,0xdf,0x25,0x30,0x00,0x01,
-- 0x00}},
-- {{0x4f,0x31,0x93,0x3e,0x06,0x24,0xf1,
-- 0xae,0x84,0x57,0x25,0x30,0x00,0x01,
-- 0x01}},
-- {{0x4f,0x3f,0x93,0x45,0x0d,0x24,0xf5,
-- 0x02,0x88,0xff,0x25,0x10,0x00,0x01,
-- 0x01}}
--};
--
--static const SiS300_LVDSCRT1DataStruct SiS300_LVDSCRT11152x768_1[] =
--{
-- {{0x64,0x4f,0x88,0x54,0x9f,0xc4,0x1f,
-- 0x92,0x89,0x8f,0xb5,0x30,0x00,0x01,
-- 0x00}},
-- {{0x64,0x4f,0x88,0x54,0x9f,0x97,0x1f,
-- 0x60,0x87,0x5d,0x83,0x10,0x00,0x01,
-- 0x00}},
-- {{0x64,0x4f,0x88,0x54,0x9f,0xc4,0x1f,
-- 0x92,0x89,0x8f,0xb5,0x30,0x00,0x01,
-- 0x00}},
-- {{0x64,0x4f,0x88,0x54,0x9f,0x97,0x1f,
-- 0x60,0x87,0x5d,0x83,0x10,0x00,0x01,
-- 0x00}},
-- {{0x64,0x4f,0x88,0x54,0x9f,0x04,0x3e,
-- 0xe2,0x89,0xdf,0x05,0x00,0x00,0x01,
-- 0x00}},
-- {{0x7e,0x63,0x82,0x68,0x15,0x7c,0xf0,
-- 0x5a,0x8f,0x57,0x7d,0x20,0x00,0x26,
-- 0x01}},
-- {{0xa3,0x7f,0x87,0x86,0x97,0x24,0xf5,
-- 0x02,0x88,0xff,0x25,0x10,0x00,0x02,
-- 0x01}}
--};
--
--static const SiS300_LVDSCRT1DataStruct SiS300_LVDSCRT11152x768_1_H[] =
--{
-- {{0x2f,0x27,0x93,0x2b,0x90,0xc4,0x1f,
-- 0x92,0x89,0x8f,0xb5,0x30,0x00,0x44,
-- 0x00}},
-- {{0x2f,0x27,0x93,0x2b,0x90,0x97,0x1f,
-- 0x60,0x87,0x5d,0x83,0x10,0x00,0x44,
-- 0x00}},
-- {{0x2f,0x27,0x93,0x2b,0x90,0xc4,0x1f,
-- 0x92,0x89,0x8f,0xb5,0x30,0x00,0x44,
-- 0x00}},
-- {{0x2f,0x27,0x93,0x2b,0x90,0x97,0x1f,
-- 0x60,0x87,0x5d,0x83,0x10,0x00,0x44,
-- 0x00}},
-- {{0x2f,0x27,0x93,0x2b,0x90,0x04,0x3e,
-- 0xe2,0x89,0xdf,0x05,0x00,0x00,0x44,
-- 0x00}},
-- {{0x3c,0x31,0x80,0x35,0x1c,0x7c,0xf0,
-- 0x5a,0x8f,0x57,0x7d,0x20,0x00,0x55,
-- 0x01}},
-- {{0x4f,0x3f,0x93,0x45,0x0d,0x24,0xf5,
-- 0x02,0x88,0xff,0x25,0x10,0x00,0x01,
-- 0x01}}
--};
--
--static const SiS300_LVDSCRT1DataStruct SiS300_LVDSCRT11152x768_2[] =
--{
-- {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
-- 0x4a,0x80,0x8f,0x25,0x30,0x00,0x06,
-- 0x00}},
-- {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
-- 0x31,0x87,0x5d,0x25,0x30,0x00,0x06,
-- 0x00}},
-- {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
-- 0x4a,0x80,0x8f,0x25,0x30,0x00,0x06,
-- 0x00}},
-- {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
-- 0x31,0x87,0x5d,0x25,0x30,0x00,0x06,
-- 0x00}},
-- {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
-- 0x72,0x88,0xdf,0x25,0x30,0x00,0x06,
-- 0x00}},
-- {{0xa3,0x63,0x87,0x78,0x89,0x24,0xf1,
-- 0xae,0x84,0x57,0x25,0x30,0x00,0x02,
-- 0x01}},
-- {{0xa3,0x7f,0x87,0x86,0x97,0x24,0xf5,
-- 0x02,0x88,0xff,0x25,0x10,0x00,0x02,
-- 0x01}}
--};
--
--static const SiS300_LVDSCRT1DataStruct SiS300_LVDSCRT11152x768_2_H[] =
--{
-- {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
-- 0x4a,0x80,0x8f,0x25,0x30,0x00,0x01,
-- 0x00}},
-- {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
-- 0x31,0x87,0x5d,0x25,0x30,0x00,0x01,
-- 0x00}},
-- {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
-- 0x4a,0x80,0x8f,0x25,0x30,0x00,0x01,
-- 0x00}},
-- {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
-- 0x31,0x87,0x5d,0x25,0x30,0x00,0x01,
-- 0x00}},
-- {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
-- 0x72,0x88,0xdf,0x25,0x30,0x00,0x01,
-- 0x00}},
-- {{0x4f,0x31,0x93,0x3e,0x06,0x24,0xf1,
-- 0xae,0x84,0x57,0x25,0x30,0x00,0x01,
-- 0x01}},
-- {{0x4f,0x3f,0x93,0x45,0x0d,0x24,0xf5,
-- 0x02,0x88,0xff,0x25,0x10,0x00,0x01,
-- 0x01}}
--};
--
--/* TW: New */
- static const SiS300_LVDSCRT1DataStruct SiS300_CHTVCRT1UNTSC[] =
- {
- {{0x64,0x4f,0x88,0x56,0x9f,0x56,0x3e,
-@@ -3302,9 +2023,7 @@ static const SiS300_LVDSCRT1DataStruct
- 0x90,0x8c,0x57,0xed,0x20,0x00,0x05,
- 0x01 }}
- };
--/* TW: New end */
-
--/* TW: New */
- typedef struct _SiS300_CHTVRegDataStruct
- {
- UCHAR Reg[16];
-@@ -3361,9 +2080,7 @@ static const SiS300_CHTVRegDataStruct Si
- {{0x60,0x30,0x00,0x10,0x00,0,0,0,0,0,0,0,0,0,0,0}}, /* TW: Mode 13: 640x480 PAL 5/4 */
- {{0x81,0x50,0x00,0x1b,0x00,0,0,0,0,0,0,0,0,0,0,0}} /* TW: Mode 19: 800x600 PAL 1/1 */
- };
--/* TW: New end */
-
--/* TW: New */
- static const UCHAR SiS300_CHTVVCLKUNTSC[] = {0x29,0x29,0x29,0x29,0x2a,0x2e};
-
- static const UCHAR SiS300_CHTVVCLKONTSC[] = {0x2c,0x2c,0x2c,0x2c,0x2d,0x2b};
-@@ -3375,6 +2092,5 @@ static const UCHAR SiS300_CHTVVCLKUPAL[]
- static const UCHAR SiS300_CHTVVCLKOPAL[] = {0x2f,0x2f,0x2f,0x2f,0x30,0x32};
-
- static const UCHAR SiS300_CHTVVCLKSOPAL[] = {0x2f,0x2f,0x2f,0x2f,0x36,0x29};
--/* TW: New end */
-
-
---- linux-2.6.0-test1/drivers/video/sis/310vtbl.h 2003-06-14 12:18:23.000000000 -0700
-+++ 25/drivers/video/sis/310vtbl.h 2003-07-19 17:04:55.000000000 -0700
-@@ -1,7 +1,30 @@
--
--
--/* Register settings for SiS 310/325/330 series */
--
-+/* $XFree86$ */
-+/*
-+ * Register settings for SiS 315/330 series
-+ *
-+ * Copyright 2002, 2003 by Thomas Winischhofer, Vienna, Austria
-+ *
-+ * Permission to use, copy, modify, distribute, and sell this software and its
-+ * documentation for any purpose is hereby granted without fee, provided that
-+ * the above copyright notice appear in all copies and that both that
-+ * copyright notice and this permission notice appear in supporting
-+ * documentation, and that the name of the copyright holder not be used in
-+ * advertising or publicity pertaining to distribution of the software without
-+ * specific, written prior permission. The copyright holder makes no representations
-+ * about the suitability of this software for any purpose. It is provided
-+ * "as is" without express or implied warranty.
-+ *
-+ * THE COPYRIGHT HOLDER DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-+ * EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-+ * PERFORMANCE OF THIS SOFTWARE.
-+ *
-+ * Author: Thomas Winischhofer <thomas@winischhofer.net>
-+ *
-+ */
-
- typedef struct _SiS310_StStruct
- {
-@@ -39,466 +62,12 @@ static const SiS310_StStruct SiS310_SMod
- {0xff,0x0000,0x00,0x00,0x00,0x00,0x00,0x00}
- };
-
--typedef struct _SiS310_StandTableStruct
--{
-- UCHAR CRT_COLS;
-- UCHAR ROWS;
-- UCHAR CHAR_HEIGHT;
-- USHORT CRT_LEN;
-- UCHAR SR[4];
-- UCHAR MISC;
-- UCHAR CRTC[0x19];
-- UCHAR ATTR[0x14];
-- UCHAR GRC[9];
--} SiS310_StandTableStruct;
--
--static const SiS310_StandTableStruct SiS310_StandTable[]=
--{
--/* 0x00: MD_0_200 */
-- {
-- 0x28,0x18,0x08,0x0800,
-- {0x09,0x03,0x00,0x02},
-- 0x63,
-- {0x2d,0x27,0x28,0x90,0x2b,0xa0,0xbf,0x1f,
-- 0x00,0xc7,0x06,0x07,0x00,0x00,0x00,0x00,
-- 0x9c,0x8e,0x8f,0x14,0x1f,0x96,0xb9,0xa3,
-- 0xff},
-- {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
-- 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
-- 0x08,0x00,0x0f,0x00},
-- {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
-- 0xff}
-- },
--/* 0x01: MD_1_200 */
-- {
-- 0x28,0x18,0x08,0x0800,
-- {0x09,0x03,0x00,0x02},
-- 0x63,
-- {0x2d,0x27,0x28,0x90,0x2b,0xa0,0xbf,0x1f,
-- 0x00,0xc7,0x06,0x07,0x00,0x00,0x00,0x00,
-- 0x9c,0x8e,0x8f,0x14,0x1f,0x96,0xb9,0xa3,
-- 0xff},
-- {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
-- 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
-- 0x08,0x00,0x0f,0x00},
-- {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
-- 0xff}
-- },
--/* 0x02: MD_2_200 */
-- {
-- 0x50,0x18,0x08,0x1000,
-- {0x01,0x03,0x00,0x02},
-- 0x63,
-- {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
-- 0x00,0xc7,0x06,0x07,0x00,0x00,0x00,0x00,
-- 0x9c,0x8e,0x8f,0x28,0x1f,0x96,0xb9,0xa3,
-- 0xff},
-- {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
-- 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
-- 0x08,0x00,0x0f,0x00},
-- {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
-- 0xff}
-- },
--/* 0x03: MD_3_200 - mode 0x03 - 0 */
-- {
-- 0x50,0x18,0x08,0x1000,
-- {0x01,0x03,0x00,0x02},
-- 0x63,
-- {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
-- 0x00,0xc7,0x06,0x07,0x00,0x00,0x00,0x00,
-- 0x9c,0x8e,0x8f,0x28,0x1f,0x96,0xb9,0xa3,
-- 0xff},
-- {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
-- 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
-- 0x08,0x00,0x0f,0x00},
-- {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
-- 0xff}
-- },
--/* 0x04: MD_4 */
-- {
-- 0x28,0x18,0x08,0x4000,
-- {0x09,0x03,0x00,0x02},
-- 0x63,
-- {0x2d,0x27,0x28,0x90,0x2c,0x80,0xbf,0x1f,
-- 0x00,0xc1,0x00,0x00,0x00,0x00,0x00,0x00,
-- 0x9c,0x8e,0x8f,0x14,0x00,0x96,0xb9,0xa2,
-- 0xff},
-- {0x00,0x13,0x15,0x17,0x02,0x04,0x06,0x07,
-- 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
-- 0x01,0x00,0x03,0x00},
-- {0x00,0x00,0x00,0x00,0x00,0x30,0x0f,0x00,
-- 0xff}
-- },
--/* 0x05: MD_5 */
-- {
-- 0x28,0x18,0x08,0x4000,
-- {0x09,0x03,0x00,0x02},
-- 0x63,
-- {0x2d,0x27,0x28,0x90,0x2c,0x80,0xbf,0x1f,
-- 0x00,0xc1,0x00,0x00,0x00,0x00,0x00,0x00,
-- 0x9c,0x8e,0x8f,0x14,0x00,0x96,0xb9,0xa2,
-- 0xff},
-- {0x00,0x13,0x15,0x17,0x02,0x04,0x06,0x07,
-- 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
-- 0x01,0x00,0x03,0x00},
-- {0x00,0x00,0x00,0x00,0x00,0x30,0x0f,0x00,
-- 0xff}
-- },
--/* 0x06: MD_6 */
-- {
-- 0x50,0x18,0x08,0x4000,
-- {0x01,0x01,0x00,0x06},
-- 0x63,
-- {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
-- 0x00,0xc1,0x00,0x00,0x00,0x00,0x00,0x00,
-- 0x9c,0x8e,0x8f,0x28,0x00,0x96,0xb9,0xc2,
-- 0xff},
-- {0x00,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
-- 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
-- 0x01,0x00,0x01,0x00},
-- {0x00,0x00,0x00,0x00,0x00,0x00,0x0d,0x00,
-- 0xff}
-- },
--/* 0x07: MD_7 */
-- {
-- 0x50,0x18,0x0e,0x1000,
-- {0x00,0x03,0x00,0x03},
-- 0xa6,
-- {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
-- 0x00,0x4d,0x0b,0x0c,0x00,0x00,0x00,0x00,
-- 0x83,0x85,0x5d,0x28,0x0d,0x63,0xba,0xa3,
-- 0xff},
-- {0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,
-- 0x10,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
-- 0x0e,0x00,0x0f,0x08},
-- {0x00,0x00,0x00,0x00,0x00,0x10,0x0a,0x00,
-- 0xff}
-- },
--/* 0x08: MDA_DAC */
-- {
-- 0x00,0x00,0x00,0x0000,
-- {0x00,0x00,0x00,0x15},
-- 0x15,
-- {0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,
-- 0x15,0x15,0x15,0x15,0x15,0x15,0x3f,0x3f,
-- 0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x00,0x00,
-- 0x00},
-- {0x00,0x00,0x00,0x00,0x00,0x15,0x15,0x15,
-- 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,
-- 0x15,0x15,0x15,0x15},
-- {0x15,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
-- 0x3f}
-- },
--/* 0x09: CGA_DAC */
-- {
-- 0x00,0x10,0x04,0x0114,
-- {0x11,0x09,0x15,0x00},
-- 0x10,
-- {0x04,0x14,0x01,0x11,0x09,0x15,0x2a,0x3a,
-- 0x2e,0x3e,0x2b,0x3b,0x2f,0x3f,0x2a,0x3a,
-- 0x2e,0x3e,0x2b,0x3b,0x2f,0x3f,0x00,0x10,
-- 0x04},
-- {0x14,0x01,0x11,0x09,0x15,0x00,0x10,0x04,
-- 0x14,0x01,0x11,0x09,0x15,0x2a,0x3a,0x2e,
-- 0x3e,0x2b,0x3b,0x2f},
-- {0x3f,0x2a,0x3a,0x2e,0x3e,0x2b,0x3b,0x2f,
-- 0x3f}
-- },
--/* 0x0a: EGA_DAC */
-- {
-- 0x00,0x10,0x04,0x0114,
-- {0x11,0x05,0x15,0x20},
-- 0x30,
-- {0x24,0x34,0x21,0x31,0x25,0x35,0x08,0x18,
-- 0x0c,0x1c,0x09,0x19,0x0d,0x1d,0x28,0x38,
-- 0x2c,0x3c,0x29,0x39,0x2d,0x3d,0x02,0x12,
-- 0x06},
-- {0x16,0x03,0x13,0x07,0x17,0x22,0x32,0x26,
-- 0x36,0x23,0x33,0x27,0x37,0x0a,0x1a,0x0e,
-- 0x1e,0x0b,0x1b,0x0f},
-- {0x1f,0x2a,0x3a,0x2e,0x3e,0x2b,0x3b,0x2f,
-- 0x3f}
-- },
--/* 0x0b: VGA_DAC */
-- {
-- 0x00,0x10,0x04,0x0114,
-- {0x11,0x09,0x15,0x2a},
-- 0x3a,
-- {0x2e,0x3e,0x2b,0x3b,0x2f,0x3f,0x00,0x05,
-- 0x08,0x0b,0x0e,0x11,0x14,0x18,0x1c,0x20,
-- 0x24,0x28,0x2d,0x32,0x38,0x3f,0x00,0x10,
-- 0x1f},
-- {0x2f,0x3f,0x1f,0x27,0x2f,0x37,0x3f,0x2d,
-- 0x31,0x36,0x3a,0x3f,0x00,0x07,0x0e,0x15,
-- 0x1c,0x0e,0x11,0x15},
-- {0x18,0x1c,0x14,0x16,0x18,0x1a,0x1c,0x00,
-- 0x04}
-- },
--/* 0x0c */
-- {
-- 0x08,0x0c,0x10,0x0a08,
-- {0x0c,0x0e,0x10,0x0b},
-- 0x0c,
-- {0x0d,0x0f,0x10,0x10,0x01,0x08,0x00,0x00,
-- 0x00,0x00,0x01,0x00,0x02,0x02,0x01,0x00,
-- 0x04,0x04,0x01,0x00,0x05,0x02,0x05,0x00,
-- 0x06},
-- {0x01,0x06,0x05,0x06,0x00,0x08,0x01,0x08,
-- 0x00,0x07,0x02,0x07,0x06,0x07,0x00,0x00,
-- 0x00,0x00,0x00,0x00},
-- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-- 0x00}
-- },
--/* 0x0d: MD_D */
-- {
-- 0x28,0x18,0x08,0x2000,
-- {0x09,0x0f,0x00,0x06},
-- 0x63,
-- {0x2d,0x27,0x28,0x90,0x2c,0x80,0xbf,0x1f,
-- 0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,
-- 0x9c,0x8e,0x8f,0x14,0x00,0x96,0xb9,0xe3,
-- 0xff},
-- {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
-- 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
-- 0x01,0x00,0x0f,0x00},
-- {0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x0f,
-- 0xff}
-- },
--/* 0x0e: MD_E */
-- {
-- 0x50,0x18,0x08,0x4000,
-- {0x01,0x0f,0x00,0x06},
-- 0x63,
-- {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
-- 0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,
-- 0x9c,0x8e,0x8f,0x28,0x00,0x96,0xb9,0xe3,
-- 0xff},
-- {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
-- 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
-- 0x01,0x00,0x0f,0x00},
-- {0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x0f,
-- 0xff}
-- },
--/* 0x0f: ExtVGATable - modes > 0x13 */
-- {
-- 0x00,0x00,0x00,0x0000,
-- {0x01,0x0f,0x00,0x0e},
-- 0x23,
-- {0x5f,0x4f,0x50,0x82,0x54,0x80,0x0b,0x3e,
-- 0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
-- 0xea,0x8c,0xdf,0x28,0x40,0xe7,0x04,0xa3,
-- 0xff},
-- {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
-- 0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,
-- 0x01,0x00,0x00,0x00},
-- {0x00,0x00,0x00,0x00,0x00,0x40,0x05,0x0f,
-- 0xff}
-- },
--/* 0x10: ROM_SAVEPTR */
-- {
-- 0x9f,0x3b,0x00,0x00c0,
-- {0x00,0x00,0x00,0x00},
-- 0x00,
-- {0x00,0x00,0x00,0x00,0x00,0x00,0xbb,0x3f,
-- 0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,
-- 0x00,0x00,0x1a,0x00,0xac,0x3e,0x00,0xc0,
-- 0x00},
-- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-- 0x00,0x00,0x00,0x00},
-- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-- 0x00}
-- },
--/* 0x11: MD_F */
-- {
-- 0x50,0x18,0x0e,0x8000,
-- {0x01,0x0f,0x00,0x06},
-- 0xa2,
-- {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
-- 0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
-- 0x82,0x84,0x5d,0x28,0x0f,0x63,0xba,0xe3,
-- 0xff},
-- {0x00,0x08,0x00,0x00,0x18,0x18,0x00,0x00,
-- 0x00,0x08,0x00,0x00,0x00,0x18,0x00,0x00,
-- 0x0b,0x00,0x05,0x00},
-- {0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x05,
-- 0xff}
-- },
--/* 0x12: MD_10 */
-- {
-- 0x50,0x18,0x0e,0x8000,
-- {0x01,0x0f,0x00,0x06},
-- 0xa3,
-- {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
-- 0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
-- 0x82,0x84,0x5d,0x28,0x0f,0x63,0xba,0xe3,
-- 0xff},
-- {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
-- 0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
-- 0x01,0x00,0x0f,0x00},
-- {0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x0f,
-- 0xff}
-- },
--/* 0x13: MD_0_350 */
-- {
-- 0x28,0x18,0x0e,0x0800,
-- {0x09,0x03,0x00,0x02},
-- 0xa3,
-- {0x2d,0x27,0x28,0x90,0x2b,0xb1,0xbf,0x1f,
-- 0x00,0x4d,0x0b,0x0c,0x00,0x00,0x00,0x00,
-- 0x83,0x85,0x5d,0x14,0x1f,0x63,0xba,0xa3,
-- 0xff},
-- {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
-- 0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
-- 0x08,0x00,0x0f,0x00},
-- {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
-- 0xff}
-- },
--/* 0x14: MD_1_350 */
-- {
-- 0x28,0x18,0x0e,0x0800,
-- {0x09,0x03,0x00,0x02},
-- 0xa3,
-- {0x2d,0x27,0x28,0x90,0x2b,0xa0,0xbf,0x1f,
-- 0x00,0x4d,0x0b,0x0c,0x00,0x00,0x00,0x00,
-- 0x83,0x85,0x5d,0x14,0x1f,0x63,0xba,0xa3,
-- 0xff},
-- {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
-- 0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
-- 0x08,0x00,0x0f,0x00},
-- {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
-- 0xff}
-- },
--/* 0x15: MD_2_350 */
-- {
-- 0x50,0x18,0x0e,0x1000,
-- {0x01,0x03,0x00,0x02},
-- 0xa3,
-- {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
-- 0x00,0x4d,0x0b,0x0c,0x00,0x00,0x00,0x00,
-- 0x83,0x85,0x5d,0x28,0x1f,0x63,0xba,0xa3,
-- 0xff},
-- {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
-- 0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
-- 0x08,0x00,0x0f,0x00},
-- {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
-- 0xff}
-- },
--/* 0x16: MD_3_350 - mode 0x03 - 1 */
-- {
-- 0x50,0x18,0x0e,0x1000,
-- {0x01,0x03,0x00,0x02},
-- 0xa3,
-- {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
-- 0x00,0x4d,0x0b,0x0c,0x00,0x00,0x00,0x00,
-- 0x83,0x85,0x5d,0x28,0x1f,0x63,0xba,0xa3,
-- 0xff},
-- {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
-- 0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
-- 0x08,0x00,0x0f,0x00},
-- {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
-- 0xff}
-- },
--/* 0x17: MD_0_1_400 */
-- {
-- 0x28,0x18,0x10,0x0800,
-- {0x08,0x03,0x00,0x02},
-- 0x67,
-- {0x2d,0x27,0x28,0x90,0x2b,0xb1,0xbf,0x1f,
-- 0x00,0x4f,0x0d,0x0e,0x00,0x00,0x00,0x00,
-- 0x9c,0x8e,0x8f,0x14,0x1f,0x96,0xb9,0xa3,
-- 0xff},
-- {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
-- 0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
-- 0x0c,0x00,0x0f,0x08},
-- {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
-- 0xff}
-- },
--/* 0x18: MD_2_3_400 - mode 0x03 - 2 */
-- {
-- 0x50,0x18,0x10,0x1000,
-- {0x00,0x03,0x00,0x02},
-- 0x67,
-- {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
-- 0x00,0x4f,0x0d,0x0e,0x00,0x00,0x00,0x00,
-- 0x9c,0x8e,0x8f,0x28,0x1f,0x96,0xb9,0xa3,
-- 0xff},
-- {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
-- 0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
-- 0x0c,0x00,0x0f,0x08},
-- {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
-- 0xff}
-- },
--/* 0x19: MD_7_400 */
-- {
-- 0x50,0x18,0x10,0x1000,
-- {0x00,0x03,0x00,0x02},
-- 0x66,
-- {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
-- 0x00,0x4f,0x0d,0x0e,0x00,0x00,0x00,0x00,
-- 0x9c,0x8e,0x8f,0x28,0x0f,0x96,0xb9,0xa3,
-- 0xff},
-- {0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,
-- 0x10,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
-- 0x0e,0x00,0x0f,0x08},
-- {0x00,0x00,0x00,0x00,0x00,0x10,0x0a,0x00,
-- 0xff}
-- },
--/* 0x1a: MD_11 */
-- {
-- 0x50,0x1d,0x10,0xa000,
-- {0x01,0x0f,0x00,0x06},
-- 0xe3,
-- {0x5f,0x4f,0x50,0x82,0x55,0x81,0x0b,0x3e,
-- 0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
-- 0xe9,0x8b,0xdf,0x28,0x00,0xe7,0x04,0xc3,
-- 0xff},
-- {0x00,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
-- 0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
-- 0x01,0x00,0x0f,0x00},
-- {0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x01,
-- 0xff}
-- },
--/* 0x1b: ExtEGATable - Modes <= 0x02 */
-- {
-- 0x50,0x1d,0x10,0xa000,
-- {0x01,0x0f,0x00,0x06},
-- 0xe3,
-- {0x5f,0x4f,0x50,0x82,0x55,0x81,0x0b,0x3e,
-- 0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
-- 0xe9,0x8b,0xdf,0x28,0x00,0xe7,0x04,0xe3,
-- 0xff},
-- {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
-- 0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
-- 0x01,0x00,0x0f,0x00},
-- {0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x0f,
-- 0xff}
-- },
--/* 0x1c: MD_13 */
-- {
-- 0x28,0x18,0x08,0x2000,
-- {0x01,0x0f,0x00,0x0e},
-- 0x63,
-- {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
-- 0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,
-- 0x9c,0x8e,0x8f,0x28,0x40,0x96,0xb9,0xa3,
-- 0xff},
-- {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
-- 0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,
-- 0x41,0x00,0x0f,0x00},
-- {0x00,0x00,0x00,0x00,0x00,0x40,0x05,0x0f,
-- 0xff}
-- }
--};
--
- typedef struct _SiS310_ExtStruct
- {
- UCHAR Ext_ModeID;
- USHORT Ext_ModeFlag;
- USHORT Ext_ModeInfo;
-- USHORT Ext_Point; /* TW: Address of table entry in (older) BIOS image */
- USHORT Ext_VESAID;
-- UCHAR Ext_VESAMEMSize;
- UCHAR Ext_RESINFO;
- UCHAR VB_ExtTVFlickerIndex;
- UCHAR VB_ExtTVEdgeIndex;
-@@ -506,93 +75,93 @@ typedef struct _SiS310_ExtStruct
- UCHAR REFindex;
- } SiS310_ExtStruct;
-
--/* TW: Checked with 650/LVDS and 650/301LVx 1.10.6s */
- static const SiS310_ExtStruct SiS310_EModeIDTable[]=
- {
-- {0x6a,0x2212,0x0407,0x3a81,0x0102,0x08,0x07,0x00,0x00,0x07,0x00}, /* 800x600x? */
-- {0x2e,0x0a1b,0x0306,0x3a57,0x0101,0x08,0x06,0x00,0x00,0x05,0x08}, /* 640x480x8 */
--/* {0x2e,0x021b,0x0306,0x3a57,0x0101,0x08,0x06,0x00,0x00,0x05,0x08}, */ /* 640x480x8 - 650/LVDS BIOS (no CRt2Mode) */
-- {0x2f,0x0a1b,0x0305,0x3a50,0x0100,0x08,0x05,0x00,0x00,0x05,0x10}, /* 640x400x8 */
--/* {0x2f,0x021b,0x0305,0x3a50,0x0100,0x08,0x05,0x00,0x00,0x05,0x10}, */ /* 640x400x8 - 650/LVDS BIOS (no CRt2Mode) */
-- {0x30,0x2a1b,0x0407,0x3a81,0x0103,0x08,0x07,0x00,0x00,0x07,0x00}, /* 800x600x8 */
--/* {0x30,0x221b,0x0407,0x3a81,0x0103,0x08,0x07,0x00,0x00,0x07,0x00}, */ /* 800x600x8 - 650/LVDS BIOS (no CRt2Mode) */
--/* {0x31,0x0a1b,0x030d,0x3b85,0x0000,0x08,0x0d,0x00,0x00,0x06,0x11}, */ /* 720x480x8 */
-- {0x31,0x0a1b,0x0a0d,0x3b85,0x0000,0x08,0x0d,0x00,0x00,0x06,0x11}, /* 720x480x8 BIOS (301/LVDS) */
-- {0x32,0x0a1b,0x0a0e,0x3b8c,0x0000,0x08,0x0e,0x00,0x00,0x06,0x12}, /* 720x576x8 */
-- {0x33,0x0a1d,0x0a0d,0x3b85,0x0000,0x08,0x0d,0x00,0x00,0x06,0x11}, /* 720x480x16 */
-- {0x34,0x2a1d,0x0a0e,0x3b8c,0x0000,0x08,0x0e,0x00,0x00,0x06,0x12}, /* 720x576x16 */
-- {0x35,0x0a1f,0x0a0d,0x3b85,0x0000,0x08,0x0d,0x00,0x00,0x06,0x11}, /* 720x480x32 */
-- {0x36,0x2a1f,0x0a0e,0x3b8c,0x0000,0x08,0x0e,0x00,0x00,0x06,0x12}, /* 720x576x32 */
-- {0x37,0x0212,0x0508,0x3aab,0x0104,0x08,0x08,0x00,0x00,0x08,0x13}, /* 1024x768x? */
-- {0x38,0x0a1b,0x0508,0x3aab,0x0105,0x08,0x08,0x00,0x00,0x08,0x13}, /* 1024x768x8 */
-- {0x3a,0x0e3b,0x0609,0x3adc,0x0107,0x08,0x09,0x00,0x00,0x00,0x1a}, /* 1280x1024x8 */
-- {0x3c,0x0e3b,0x070a,0x3af2,0x0130,0x08,0x0a,0x00,0x00,0x00,0x1e}, /* 1600x1200x8 */
-- {0x3d,0x0e7d,0x070a,0x3af2,0x0131,0x08,0x0a,0x00,0x00,0x00,0x1e}, /* 1600x1200x16 - 650/301LVx - no CRT2Mode? */
-- {0x40,0x9a1c,0x0000,0x3a34,0x010d,0x08,0x00,0x00,0x00,0x04,0x25},
-- {0x41,0x9a1d,0x0000,0x3a34,0x010e,0x08,0x00,0x00,0x00,0x04,0x25},
-- {0x43,0x0a1c,0x0306,0x3a57,0x0110,0x08,0x06,0x00,0x00,0x05,0x08},
-- {0x44,0x0a1d,0x0306,0x3a57,0x0111,0x08,0x06,0x00,0x00,0x05,0x08}, /* 640x480x16 */
-- {0x46,0x2a1c,0x0407,0x3a81,0x0113,0x08,0x07,0x00,0x00,0x07,0x00},
-- {0x47,0x2a1d,0x0407,0x3a81,0x0114,0x08,0x07,0x00,0x00,0x07,0x00}, /* 800x600x16 */
-- {0x49,0x0a3c,0x0508,0x3aab,0x0116,0x08,0x08,0x00,0x00,0x00,0x13},
-- {0x4a,0x0a3d,0x0508,0x3aab,0x0117,0x08,0x08,0x00,0x00,0x08,0x13}, /* 1024x768x16 */
-- {0x4c,0x0e7c,0x0609,0x3adc,0x0119,0x08,0x09,0x00,0x00,0x00,0x1a},
-- {0x4d,0x0e7d,0x0609,0x3adc,0x011a,0x08,0x09,0x00,0x00,0x00,0x1a}, /* 1280x1024x16 */
-- {0x50,0x9a1b,0x0001,0x3a3b,0x0132,0x08,0x01,0x00,0x00,0x04,0x26}, /* 320x240 */
-- {0x51,0xba1b,0x0103,0x3a42,0x0133,0x08,0x03,0x00,0x00,0x07,0x27},
-- {0x52,0xba1b,0x0204,0x3a49,0x0134,0x08,0x04,0x00,0x00,0x00,0x28}, /* 650/301 BIOS */
-- {0x56,0x9a1d,0x0001,0x3a3b,0x0135,0x08,0x01,0x00,0x00,0x04,0x26},
-- {0x57,0xba1d,0x0103,0x3a42,0x0136,0x08,0x03,0x00,0x00,0x07,0x27},
-- {0x58,0xba1d,0x0204,0x3a49,0x0137,0x08,0x04,0x00,0x00,0x00,0x28}, /* BIOS (301+LVDS) */
-- {0x59,0x9a1b,0x0000,0x3a34,0x0138,0x08,0x00,0x00,0x00,0x04,0x25}, /* 320x200 */
-- {0x5A,0x021b,0x0014,0x3b83,0x0138,0x08,0x01,0x00,0x00,0x04,0x3f}, /* 320x480x8 fstn add new mode*/
-- {0x5B,0x0a1d,0x0014,0x3b83,0x0135,0x08,0x01,0x00,0x00,0x04,0x3f}, /* 320x480x16 fstn add new mode*/
-- {0x5c,0xba1f,0x0204,0x3a49,0x0000,0x08,0x04,0x00,0x00,0x00,0x28}, /* TW: inserted 512x384x32 */
-- {0x5d,0x0a1d,0x0305,0x3a50,0x0139,0x08,0x05,0x00,0x00,0x07,0x10},
-- {0x5e,0x0a1f,0x0305,0x3a50,0x0000,0x08,0x05,0x00,0x00,0x07,0x10}, /* TW: Inserted 640x400x32 */
-- {0x62,0x0a3f,0x0306,0x3a57,0x013a,0x08,0x06,0x00,0x00,0x05,0x08}, /* 640x480x32 */
-- {0x63,0x2a3f,0x0407,0x3a81,0x013b,0x08,0x07,0x00,0x00,0x07,0x00}, /* 800x600x32 */
-- {0x64,0x0a7f,0x0508,0x3aab,0x013c,0x08,0x08,0x00,0x00,0x08,0x13}, /* 1024x768x32 */
-- {0x65,0x0eff,0x0609,0x3adc,0x013d,0x08,0x09,0x00,0x00,0x00,0x1a}, /* 1280x1024x32 */
-- {0x66,0x0eff,0x070a,0x3af2,0x013e,0x08,0x0a,0x00,0x00,0x00,0x1e}, /* 1600x1200x32 */
-- {0x68,0x067b,0x080b,0x3b17,0x013f,0x08,0x0b,0x00,0x00,0x00,0x29}, /* 1920x1440x8 */
-- {0x69,0x06fd,0x080b,0x3b17,0x0140,0x08,0x0b,0x00,0x00,0x00,0x29}, /* 1920x1440x16 */
-- {0x6b,0x07ff,0x080b,0x3b17,0x0141,0x10,0x0b,0x00,0x00,0x00,0x29}, /* 1920x1440x32 */
-- {0x6c,0x067b,0x090c,0x3b37,0x0000,0x08,0x0c,0x00,0x00,0x00,0x2f}, /* 2048x1536x8 */
-- {0x6d,0x06fd,0x090c,0x3b37,0x0000,0x10,0x0c,0x00,0x00,0x00,0x2f}, /* 2048x1536x16 */
-- {0x6e,0x07ff,0x090c,0x3b37,0x0000,0x10,0x0c,0x00,0x00,0x00,0x2f}, /* 2048x1536x32 */
-- {0x70,0x2a1b,0x0410,0x3b52,0x0000,0x08,0x10,0x00,0x00,0x07,0x34}, /* 800x480x8 */
-- {0x71,0x0a1b,0x0511,0x3b63,0x0000,0x08,0x11,0x00,0x00,0x00,0x37}, /* 1024x576x8 */
-- {0x74,0x0a1d,0x0511,0x3b63,0x0000,0x08,0x11,0x00,0x00,0x00,0x37}, /* 1024x576x16 */
-- {0x75,0x0a3d,0x0612,0x3b74,0x0000,0x08,0x12,0x00,0x00,0x00,0x3a}, /* 1280x720x16 */
-- {0x76,0x2a1f,0x0410,0x3b52,0x0000,0x08,0x10,0x00,0x00,0x07,0x34}, /* 800x480x32 */
-- {0x77,0x0a1f,0x0511,0x3b63,0x0000,0x08,0x11,0x00,0x00,0x00,0x37}, /* 1024x576x32 */
-- {0x78,0x0a3f,0x0612,0x3b74,0x0000,0x08,0x12,0x00,0x00,0x00,0x3a}, /* 1280x720x32 */
-- {0x79,0x0a3b,0x0612,0x3b74,0x0000,0x08,0x12,0x00,0x00,0x00,0x3a}, /* 1280x720x8 */
-- {0x7a,0x2a1d,0x0410,0x3b52,0x0000,0x08,0x10,0x00,0x00,0x07,0x34}, /* 800x480x16 */
-- {0x7c,0x0e3b,0x060f,0x3ad0,0x0000,0x08,0x0f,0x00,0x00,0x00,0x3d}, /* 1280x960x8 - TW */
-- {0x7d,0x0e7d,0x060f,0x3ad0,0x0000,0x08,0x0f,0x00,0x00,0x00,0x3d}, /* 1280x960x16 - TW */
-- {0x7e,0x0eff,0x060f,0x3ad0,0x0000,0x08,0x0f,0x00,0x00,0x00,0x3d}, /* 1280x960x32 - TW */
-- /* TW: 650/LVDS BIOS new modes */
-- {0x23,0x0e3b,0x0614,0x36f7,0x0000,0x08,0x14,0x00,0x00,0x00,0x40}, /* 1280x768x8 */
-- {0x24,0x0e7d,0x0614,0x36f7,0x0000,0x08,0x14,0x00,0x00,0x00,0x40}, /* 1280x768x16 */
-- {0x25,0x0eff,0x0614,0x36f7,0x0000,0x08,0x14,0x00,0x00,0x00,0x40}, /* 1280x768x32 */
-- {0x26,0x0e3b,0x0c15,0x36fe,0x0000,0x08,0x15,0x00,0x00,0x00,0x41}, /* 1400x1050x8 */
-- {0x27,0x0e7d,0x0c15,0x36fe,0x0000,0x08,0x15,0x00,0x00,0x00,0x41}, /* 1400x1050x16 */
-- {0x28,0x0eff,0x0c15,0x36fe,0x0000,0x08,0x15,0x00,0x00,0x00,0x41}, /* 1400x1050x32*/
-- {0x29,0x0e1b,0x0d16,0x0000,0x0000,0x08,0x16,0x00,0x00,0x00,0x43}, /* TW: NEW 1152x864 - not in BIOS */
-- {0x2a,0x0e3d,0x0d16,0x0000,0x0000,0x08,0x16,0x00,0x00,0x00,0x43},
-- {0x2b,0x0e7f,0x0d16,0x0000,0x0000,0x08,0x16,0x00,0x00,0x00,0x43},
-- {0x39,0x2a1b,0x0b17,0x0000,0x0000,0x08,0x17,0x00,0x00,0x00,0x45}, /* TW: NEW 848x480 - not in BIOS */
-- {0x3b,0x2a3d,0x0b17,0x0000,0x0000,0x08,0x17,0x00,0x00,0x00,0x45},
-- {0x3e,0x2a7f,0x0b17,0x0000,0x0000,0x08,0x17,0x00,0x00,0x00,0x45},
-- {0x3f,0x2a1b,0x0b13,0x0000,0x0000,0x08,0x13,0x00,0x00,0x00,0x47}, /* TW: NEW 856x480 - not in BIOS */
-- {0x42,0x2a3d,0x0b13,0x0000,0x0000,0x08,0x13,0x00,0x00,0x00,0x47},
-- {0x45,0x2a7f,0x0b13,0x0000,0x0000,0x08,0x13,0x00,0x00,0x00,0x47},
-- {0x48,0x2a1b,0x0e18,0x0000,0x0000,0x08,0x18,0x00,0x00,0x00,0x49}, /* TW: NEW 1360x768 - not in BIOS */
-- {0x4b,0x2a3d,0x0e18,0x0000,0x0000,0x08,0x18,0x00,0x00,0x00,0x49},
-- {0x4e,0x2a7f,0x0e18,0x0000,0x0000,0x08,0x18,0x00,0x00,0x00,0x49},
-- {0xff,0x0000,0x0000,0x0000,0x0000,0x00,0x00,0x00,0x00,0x00,0x00}
-+ {0x6a,0x2212,0x0407,0x0102,SIS_RI_800x600, 0x00,0x00,0x07,0x00}, /* 800x600x? */
-+ {0x2e,0x0a1b,0x0306,0x0101,SIS_RI_640x480, 0x00,0x00,0x05,0x08}, /* 640x480x8 */
-+ {0x2f,0x0a1b,0x0305,0x0100,SIS_RI_640x400, 0x00,0x00,0x05,0x10}, /* 640x400x8 */
-+ {0x30,0x2a1b,0x0407,0x0103,SIS_RI_800x600, 0x00,0x00,0x07,0x00}, /* 800x600x8 */
-+ {0x31,0x0a1b,0x0a0d,0x0000,SIS_RI_720x480, 0x00,0x00,0x06,0x11}, /* 720x480x8 */
-+ {0x32,0x0a1b,0x0a0e,0x0000,SIS_RI_720x576, 0x00,0x00,0x06,0x12}, /* 720x576x8 */
-+ {0x33,0x0a1d,0x0a0d,0x0000,SIS_RI_720x480, 0x00,0x00,0x06,0x11}, /* 720x480x16 */
-+ {0x34,0x2a1d,0x0a0e,0x0000,SIS_RI_720x576, 0x00,0x00,0x06,0x12}, /* 720x576x16 */
-+ {0x35,0x0a1f,0x0a0d,0x0000,SIS_RI_720x480, 0x00,0x00,0x06,0x11}, /* 720x480x32 */
-+ {0x36,0x2a1f,0x0a0e,0x0000,SIS_RI_720x576, 0x00,0x00,0x06,0x12}, /* 720x576x32 */
-+ {0x37,0x0212,0x0508,0x0104,SIS_RI_1024x768, 0x00,0x00,0x08,0x13}, /* 1024x768x? */
-+ {0x38,0x0a1b,0x0508,0x0105,SIS_RI_1024x768, 0x00,0x00,0x08,0x13}, /* 1024x768x8 */
-+ {0x3a,0x0e3b,0x0609,0x0107,SIS_RI_1280x1024,0x00,0x00,0x00,0x1a}, /* 1280x1024x8 */
-+ {0x3c,0x0e3b,0x070a,0x0130,SIS_RI_1600x1200,0x00,0x00,0x00,0x1e}, /* 1600x1200x8 */
-+ {0x3d,0x0e7d,0x070a,0x0131,SIS_RI_1600x1200,0x00,0x00,0x00,0x1e}, /* 1600x1200x16 */
-+ {0x40,0x9a1c,0x0000,0x010d,SIS_RI_320x200, 0x00,0x00,0x04,0x25}, /* 320x200x15 */
-+ {0x41,0x9a1d,0x0000,0x010e,SIS_RI_320x200, 0x00,0x00,0x04,0x25}, /* 320x200x16 */
-+ {0x43,0x0a1c,0x0306,0x0110,SIS_RI_640x480, 0x00,0x00,0x05,0x08},
-+ {0x44,0x0a1d,0x0306,0x0111,SIS_RI_640x480, 0x00,0x00,0x05,0x08}, /* 640x480x16 */
-+ {0x46,0x2a1c,0x0407,0x0113,SIS_RI_800x600, 0x00,0x00,0x07,0x00},
-+ {0x47,0x2a1d,0x0407,0x0114,SIS_RI_800x600, 0x00,0x00,0x07,0x00}, /* 800x600x16 */
-+ {0x49,0x0a3c,0x0508,0x0116,SIS_RI_1024x768, 0x00,0x00,0x00,0x13},
-+ {0x4a,0x0a3d,0x0508,0x0117,SIS_RI_1024x768, 0x00,0x00,0x08,0x13}, /* 1024x768x16 */
-+ {0x4c,0x0e7c,0x0609,0x0119,SIS_RI_1280x1024,0x00,0x00,0x00,0x1a},
-+ {0x4d,0x0e7d,0x0609,0x011a,SIS_RI_1280x1024,0x00,0x00,0x00,0x1a}, /* 1280x1024x16 */
-+ {0x50,0x9a1b,0x0001,0x0132,SIS_RI_320x240, 0x00,0x00,0x04,0x26}, /* 320x240x8 */
-+ {0x51,0xba1b,0x0103,0x0133,SIS_RI_400x300, 0x00,0x00,0x07,0x27}, /* 400x300x8 */
-+ {0x52,0xba1b,0x0204,0x0134,SIS_RI_512x384, 0x00,0x00,0x00,0x28}, /* 512x384x8 */
-+ {0x56,0x9a1d,0x0001,0x0135,SIS_RI_320x240, 0x00,0x00,0x04,0x26}, /* 320x240x16 */
-+ {0x57,0xba1d,0x0103,0x0136,SIS_RI_400x300, 0x00,0x00,0x07,0x27}, /* 400x300x16 */
-+ {0x58,0xba1d,0x0204,0x0137,SIS_RI_512x384, 0x00,0x00,0x00,0x28}, /* 512x384x16 */
-+ {0x59,0x9a1b,0x0000,0x0138,SIS_RI_320x200, 0x00,0x00,0x04,0x25}, /* 320x200x8 */
-+ {0x5a,0x021b,0x0014,0x0138,SIS_RI_320x240, 0x00,0x00,0x04,0x3f}, /* 320x240x8 fstn */
-+ {0x5b,0x0a1d,0x0014,0x0135,SIS_RI_320x240, 0x00,0x00,0x04,0x3f}, /* 320x240x16 fstn */
-+ {0x5c,0xba1f,0x0204,0x0000,SIS_RI_512x384, 0x00,0x00,0x00,0x28}, /* 512x384x32 */
-+ {0x5d,0x0a1d,0x0305,0x0139,SIS_RI_640x400, 0x00,0x00,0x07,0x10},
-+ {0x5e,0x0a1f,0x0305,0x0000,SIS_RI_640x400, 0x00,0x00,0x07,0x10}, /* 640x400x32 */
-+ {0x62,0x0a3f,0x0306,0x013a,SIS_RI_640x480, 0x00,0x00,0x05,0x08}, /* 640x480x32 */
-+ {0x63,0x2a3f,0x0407,0x013b,SIS_RI_800x600, 0x00,0x00,0x07,0x00}, /* 800x600x32 */
-+ {0x64,0x0a7f,0x0508,0x013c,SIS_RI_1024x768, 0x00,0x00,0x08,0x13}, /* 1024x768x32 */
-+ {0x65,0x0eff,0x0609,0x013d,SIS_RI_1280x1024,0x00,0x00,0x00,0x1a}, /* 1280x1024x32 */
-+ {0x66,0x0eff,0x070a,0x013e,SIS_RI_1600x1200,0x00,0x00,0x00,0x1e}, /* 1600x1200x32 */
-+ {0x68,0x067b,0x080b,0x013f,SIS_RI_1920x1440,0x00,0x00,0x00,0x29}, /* 1920x1440x8 */
-+ {0x69,0x06fd,0x080b,0x0140,SIS_RI_1920x1440,0x00,0x00,0x00,0x29}, /* 1920x1440x16 */
-+ {0x6b,0x07ff,0x080b,0x0141,SIS_RI_1920x1440,0x00,0x00,0x00,0x29}, /* 1920x1440x32 */
-+ {0x6c,0x067b,0x090c,0x0000,SIS_RI_2048x1536,0x00,0x00,0x00,0x2f}, /* 2048x1536x8 */
-+ {0x6d,0x06fd,0x090c,0x0000,SIS_RI_2048x1536,0x00,0x00,0x00,0x2f}, /* 2048x1536x16 */
-+ {0x6e,0x07ff,0x090c,0x0000,SIS_RI_2048x1536,0x00,0x00,0x00,0x2f}, /* 2048x1536x32 */
-+ {0x70,0x2a1b,0x0410,0x0000,SIS_RI_800x480, 0x00,0x00,0x07,0x34}, /* 800x480x8 */
-+ {0x71,0x0a1b,0x0511,0x0000,SIS_RI_1024x576, 0x00,0x00,0x00,0x37}, /* 1024x576x8 */
-+ {0x74,0x0a1d,0x0511,0x0000,SIS_RI_1024x576, 0x00,0x00,0x00,0x37}, /* 1024x576x16 */
-+ {0x75,0x0a3d,0x0612,0x0000,SIS_RI_1280x720, 0x00,0x00,0x00,0x3a}, /* 1280x720x16 */
-+ {0x76,0x2a1f,0x0410,0x0000,SIS_RI_800x480, 0x00,0x00,0x07,0x34}, /* 800x480x32 */
-+ {0x77,0x0a1f,0x0511,0x0000,SIS_RI_1024x576, 0x00,0x00,0x00,0x37}, /* 1024x576x32 */
-+ {0x78,0x0a3f,0x0612,0x0000,SIS_RI_1280x720, 0x00,0x00,0x00,0x3a}, /* 1280x720x32 */
-+ {0x79,0x0a3b,0x0612,0x0000,SIS_RI_1280x720, 0x00,0x00,0x00,0x3a}, /* 1280x720x8 */
-+ {0x7a,0x2a1d,0x0410,0x0000,SIS_RI_800x480, 0x00,0x00,0x07,0x34}, /* 800x480x16 */
-+ {0x7c,0x0e3b,0x060f,0x0000,SIS_RI_1280x960, 0x00,0x00,0x00,0x3d}, /* 1280x960x8 */
-+ {0x7d,0x0e7d,0x060f,0x0000,SIS_RI_1280x960, 0x00,0x00,0x00,0x3d}, /* 1280x960x16 */
-+ {0x7e,0x0eff,0x060f,0x0000,SIS_RI_1280x960, 0x00,0x00,0x00,0x3d}, /* 1280x960x32 */
-+ {0x23,0x0e3b,0x0614,0x0000,SIS_RI_1280x768, 0x00,0x00,0x00,0x40}, /* 1280x768x8 */
-+ {0x24,0x0e7d,0x0614,0x0000,SIS_RI_1280x768, 0x00,0x00,0x00,0x40}, /* 1280x768x16 */
-+ {0x25,0x0eff,0x0614,0x0000,SIS_RI_1280x768, 0x00,0x00,0x00,0x40}, /* 1280x768x32 */
-+ {0x26,0x0e3b,0x0c15,0x0000,SIS_RI_1400x1050,0x00,0x00,0x00,0x41}, /* 1400x1050x8 */
-+ {0x27,0x0e7d,0x0c15,0x0000,SIS_RI_1400x1050,0x00,0x00,0x00,0x41}, /* 1400x1050x16 */
-+ {0x28,0x0eff,0x0c15,0x0000,SIS_RI_1400x1050,0x00,0x00,0x00,0x41}, /* 1400x1050x32*/
-+ {0x29,0x0e1b,0x0d16,0x0000,SIS_RI_1152x864, 0x00,0x00,0x00,0x43}, /* 1152x864 */
-+ {0x2a,0x0e3d,0x0d16,0x0000,SIS_RI_1152x864, 0x00,0x00,0x00,0x43},
-+ {0x2b,0x0e7f,0x0d16,0x0000,SIS_RI_1152x864, 0x00,0x00,0x00,0x43},
-+ {0x39,0x2a1b,0x0b17,0x0000,SIS_RI_848x480, 0x00,0x00,0x00,0x45}, /* 848x480 */
-+ {0x3b,0x2a3d,0x0b17,0x0000,SIS_RI_848x480, 0x00,0x00,0x00,0x45},
-+ {0x3e,0x2a7f,0x0b17,0x0000,SIS_RI_848x480, 0x00,0x00,0x00,0x45},
-+ {0x3f,0x2a1b,0x0b13,0x0000,SIS_RI_856x480, 0x00,0x00,0x00,0x47}, /* 856x480 */
-+ {0x42,0x2a3d,0x0b13,0x0000,SIS_RI_856x480, 0x00,0x00,0x00,0x47},
-+ {0x45,0x2a7f,0x0b13,0x0000,SIS_RI_856x480, 0x00,0x00,0x00,0x47},
-+ {0x48,0x2a1b,0x0e18,0x0000,SIS_RI_1360x768, 0x00,0x00,0x00,0x49}, /* 1360x768 */
-+ {0x4b,0x2a3d,0x0e18,0x0000,SIS_RI_1360x768, 0x00,0x00,0x00,0x49},
-+ {0x4e,0x2a7f,0x0e18,0x0000,SIS_RI_1360x768, 0x00,0x00,0x00,0x49},
-+ {0x4f,0x9a1f,0x0000,0x0000,SIS_RI_320x200, 0x00,0x00,0x04,0x25}, /* 320x200x32 */
-+ {0x53,0x9a1f,0x0001,0x0000,SIS_RI_320x240, 0x00,0x00,0x04,0x26}, /* 320x240x32 */
-+ {0x54,0xba1f,0x0103,0x0000,SIS_RI_400x300, 0x00,0x00,0x07,0x27}, /* 400x300x32 */
-+ {0x5f,0x2a1b,0x0f0e,0x0000,SIS_RI_768x576, 0x00,0x00,0x00,0x4a}, /* 768x576x8 */
-+ {0x60,0x2a1d,0x0f0e,0x0000,SIS_RI_768x576, 0x00,0x00,0x00,0x4a}, /* 768x576x16 */
-+ {0x61,0x2a1f,0x0f0e,0x0000,SIS_RI_768x576, 0x00,0x00,0x00,0x4a}, /* 768x576x32 */
-+ {0xff,0x0000,0x0000,0x0000,0x00, 0x00,0x00,0x00,0x00}
- };
-
- typedef struct _SiS310_Ext2Struct
-@@ -604,89 +173,87 @@ typedef struct _SiS310_Ext2Struct
- UCHAR ModeID;
- USHORT XRes;
- USHORT YRes;
-- USHORT ROM_OFFSET;
- } SiS310_Ext2Struct;
-
- static const SiS310_Ext2Struct SiS310_RefIndex[]=
- {
--/* {0x005f,0x0d,0x03,0x05,0x6a, 800, 600,0x3a81}, 0x0 - TW: Patch for Chrontel 7019 */
-- {0x085f,0x0d,0x03,0x05,0x6a, 800, 600,0x3a81}, /* 0x0 */
-- {0x0467,0x0e,0x04,0x05,0x6a, 800, 600,0x3a86}, /* 0x1 */
-- {0x0067,0x0f,0x08,0x48,0x6a, 800, 600,0x3a8b}, /* 0x2 */
-- {0x0067,0x10,0x07,0x8b,0x6a, 800, 600,0x3a90}, /* 0x3 */
-- {0x0147,0x11,0x0a,0x00,0x6a, 800, 600,0x3a95}, /* 0x4 */
-- {0x0147,0x12,0x0d,0x00,0x6a, 800, 600,0x3a9a}, /* 0x5 - 4147 TW: Test sync change */
-- {0x0047,0x13,0x13,0x00,0x6a, 800, 600,0x3a9f}, /* 0x6 - 4047 */
-- {0x0047,0x14,0x1c,0x00,0x6a, 800, 600,0x3aa4}, /* 0x7 - 4047 */
--/* {0xc05f,0x05,0x00,0x04,0x2e, 640, 480,0x3a57}, 0x8 - TW: Patch for Chrontel 7019 */
-- {0xc85f,0x05,0x00,0x04,0x2e, 640, 480,0x3a57}, /* 0x8 */
-- {0xc067,0x06,0x02,0x04,0x2e, 640, 480,0x3a5c}, /* 0x9 */
-- {0xc067,0x07,0x02,0x47,0x2e, 640, 480,0x3a61}, /* 0xa */
-- {0xc067,0x08,0x03,0x8a,0x2e, 640, 480,0x3a66}, /* 0xb */
-- {0xc047,0x09,0x05,0x00,0x2e, 640, 480,0x3a6b}, /* 0xc - 4047 */
-- {0xc047,0x0a,0x09,0x00,0x2e, 640, 480,0x3a70}, /* 0xd - 4047 */
-- {0xc047,0x0b,0x0e,0x00,0x2e, 640, 480,0x3a75}, /* 0xe - 4047 */
-- {0xc047,0x0c,0x15,0x00,0x2e, 640, 480,0x3a7a}, /* 0xf */
-- {0x407f,0x04,0x00,0x00,0x2f, 640, 400,0x3a50}, /* 0x10 */
-- {0xc00f,0x3c,0x01,0x06,0x31, 720, 480,0x3b85}, /* 0x11 */
-- {0x000f,0x3d,0x03,0x06,0x32, 720, 576,0x3b8c}, /* 0x12 */
-- {0x0187,0x15,0x06,0x00,0x37,1024, 768,0x3aab}, /* 0x13 */
-- {0xc877,0x16,0x0b,0x06,0x37,1024, 768,0x3ab0}, /* 0x14 */
-- {0xc067,0x17,0x0f,0x49,0x37,1024, 768,0x3ab5}, /* 0x15 */
-- {0x0267,0x18,0x11,0x00,0x37,1024, 768,0x3aba}, /* 0x16 */
-- {0x0047,0x19,0x16,0x8c,0x37,1024, 768,0x3abf}, /* 0x17 */
-- {0x0047,0x1a,0x1b,0x00,0x37,1024, 768,0x3ac4}, /* 0x18 - 4047 */
-- {0x0007,0x1b,0x1f,0x00,0x37,1024, 768,0x3ac9}, /* 0x19 - 4047 */
-- {0x0387,0x1c,0x11,0x00,0x3a,1280,1024,0x3adc}, /* 0x1a */
-- {0x0077,0x1d,0x19,0x07,0x3a,1280,1024,0x3ae1}, /* 0x1b */
-- {0x0047,0x1e,0x1e,0x00,0x3a,1280,1024,0x3ae6}, /* 0x1c */
-- {0x0007,0x1f,0x20,0x00,0x3a,1280,1024,0x3aeb}, /* 0x1d */
-- {0x0027,0x20,0x21,0x09,0x3c,1600,1200,0x3af2}, /* 0x1e */
-- {0x0007,0x21,0x22,0x00,0x3c,1600,1200,0x3af7}, /* 0x1f */
-- {0x0007,0x22,0x23,0x00,0x3c,1600,1200,0x3afc}, /* 0x20 */
-- {0x0007,0x23,0x25,0x00,0x3c,1600,1200,0x3b01}, /* 0x21 */
-- {0x0007,0x24,0x26,0x00,0x3c,1600,1200,0x3b06}, /* 0x22 */
-- {0x0007,0x25,0x2c,0x00,0x3c,1600,1200,0x3b0b}, /* 0x23 */
-- {0x0007,0x26,0x34,0x00,0x3c,1600,1200,0x3b10}, /* 0x24 */
-- {0x407f,0x00,0x00,0x00,0x40, 320, 200,0x3a34}, /* 0x25 */
-- {0xc07f,0x01,0x00,0x04,0x50, 320, 240,0x3a3b}, /* 0x26 */
-- {0x007f,0x02,0x04,0x05,0x51, 400, 300,0x3a42}, /* 0x27 */
-- {0xc077,0x03,0x0b,0x06,0x52, 512, 384,0x3a49}, /* 0x28 */
-- {0x8007,0x27,0x27,0x00,0x68,1920,1440,0x3b17}, /* 0x29 */
-- {0x4007,0x28,0x29,0x00,0x68,1920,1440,0x3b1c}, /* 0x2a */
-- {0x4007,0x29,0x2e,0x00,0x68,1920,1440,0x3b21}, /* 0x2b */
-- {0x4007,0x2a,0x30,0x00,0x68,1920,1440,0x3b26}, /* 0x2c */
-- {0x4007,0x2b,0x35,0x00,0x68,1920,1440,0x3b2b}, /* 0x2d */
-- {0x4005,0x2c,0x39,0x00,0x68,1920,1440,0x3b30}, /* 0x2e */
-- {0x4007,0x2d,0x2b,0x00,0x6c,2048,1536,0x3b37}, /* 0x2f */
-- {0x4007,0x2e,0x31,0x00,0x6c,2048,1536,0x3b3c}, /* 0x30 */
-- {0x4007,0x2f,0x33,0x00,0x6c,2048,1536,0x3b41}, /* 0x31 */
-- {0x4007,0x30,0x37,0x00,0x6c,2048,1536,0x3b46}, /* 0x32 */
-- {0x4005,0x31,0x38,0x00,0x6c,2048,1536,0x3b4b}, /* 0x33 */
-- {0x0057,0x32,0x40,0x08,0x70, 800, 480,0x3b52}, /* 0x34 */
-- {0x0047,0x33,0x07,0x08,0x70, 800, 480,0x3b57}, /* 0x35 */
-- {0x0047,0x34,0x0a,0x08,0x70, 800, 480,0x3b5c}, /* 0x36 */
-- {0x0057,0x35,0x0b,0x09,0x71,1024, 576,0x3b63}, /* 0x37 */
-- {0x0047,0x36,0x11,0x09,0x71,1024, 576,0x3b68}, /* 0x38 */
-- {0x0047,0x37,0x16,0x09,0x71,1024, 576,0x3b6d}, /* 0x39 */
-- {0x0057,0x38,0x19,0x0a,0x75,1280, 720,0x3b74}, /* 0x3a */
-- {0x0047,0x39,0x1e,0x0a,0x75,1280, 720,0x3b79}, /* 0x3b */
-- {0x0007,0x3a,0x20,0x0a,0x75,1280, 720,0x3b7e}, /* 0x3c */
-- {0x0067,0x3b,0x19,0x08,0x7c,1280, 960,0x3ad0}, /* 0x3d */
-- {0x0027,0x4c,0x59,0x08,0x7c,1280, 960,0x3ad0}, /* 0x3e */
-- {0xc07f,0x01,0x00,0x06,0x5a, 320, 480,0x3b83}, /* 0x3f */ /* FSTN mode */
-- {0x0077,0x42,0x12,0x08,0x23,1280, 768,0x0000}, /* 0x40 */
-- {0x0067,0x43,0x4d,0x08,0x26,1400,1050,0x0000}, /* 0x41 */
-- {0x0007,0x4b,0x5a,0x08,0x26,1400,1050,0x0000}, /* 0x42 */ /* TW: new, not in any BIOS */
-- {0x0047,0x44,0x19,0x00,0x29,1152, 864,0x0000}, /* 0x43 TW: Non-BIOS, new */
-- {0x0047,0x4a,0x1e,0x00,0x29,1152, 864,0x0000}, /* 0x44 TW: Non-BIOS, new */
-- {0x00c7,0x45,0x57,0x00,0x39, 848, 480,0x0000}, /* 0x45 TW: 848x480-38Hzi - Non-BIOS, new */
-- {0xc047,0x46,0x55,0x00,0x39, 848, 480,0x0000}, /* 0x46 TW: 848x480-60Hz - Non-BIOS, new */
-- {0x00c7,0x47,0x57,0x00,0x3f, 856, 480,0x0000}, /* 0x47 TW: 856x480-38Hzi - Non-BIOS, new */
-- {0xc047,0x48,0x57,0x00,0x3f, 856, 480,0x0000}, /* 0x48 TW: 856x480-60Hz - Non-BIOS, new */
-- {0x0047,0x49,0x58,0x00,0x48,1360, 768,0x0000}, /* 0x49 TW: 1360x768-60Hz - Non-BIOS, new */
-- {0xffff,0x00,0x00,0x00,0x00, 0, 0,0x0000}
--};
-+ {0x085f,0x0d,0x03,0x05,0x6a, 800, 600}, /* 0x0 */
-+ {0x0467,0x0e,0x04,0x05,0x6a, 800, 600}, /* 0x1 */
-+ {0x0067,0x0f,0x08,0x48,0x6a, 800, 600}, /* 0x2 */
-+ {0x0067,0x10,0x07,0x8b,0x6a, 800, 600}, /* 0x3 */
-+ {0x0147,0x11,0x0a,0x00,0x6a, 800, 600}, /* 0x4 */
-+ {0x0147,0x12,0x0d,0x00,0x6a, 800, 600}, /* 0x5 - TW: Test sync change */
-+ {0x0047,0x13,0x13,0x00,0x6a, 800, 600}, /* 0x6 */
-+ {0x0047,0x14,0x1c,0x00,0x6a, 800, 600}, /* 0x7 */
-+ {0xc85f,0x05,0x00,0x04,0x2e, 640, 480}, /* 0x8 */
-+ {0xc067,0x06,0x02,0x04,0x2e, 640, 480}, /* 0x9 */
-+ {0xc067,0x07,0x02,0x47,0x2e, 640, 480}, /* 0xa */
-+ {0xc067,0x08,0x03,0x8a,0x2e, 640, 480}, /* 0xb */
-+ {0xc047,0x09,0x05,0x00,0x2e, 640, 480}, /* 0xc */
-+ {0xc047,0x0a,0x09,0x00,0x2e, 640, 480}, /* 0xd */
-+ {0xc047,0x0b,0x0e,0x00,0x2e, 640, 480}, /* 0xe */
-+ {0xc047,0x0c,0x15,0x00,0x2e, 640, 480}, /* 0xf */
-+ {0x407f,0x04,0x00,0x00,0x2f, 640, 400}, /* 0x10 */
-+ {0xc00f,0x3c,0x01,0x06,0x31, 720, 480}, /* 0x11 */
-+ {0x000f,0x3d,0x03,0x06,0x32, 720, 576}, /* 0x12 */
-+ {0x0187,0x15,0x06,0x00,0x37,1024, 768}, /* 0x13 */
-+ {0xc877,0x16,0x0b,0x06,0x37,1024, 768}, /* 0x14 */
-+ {0xc067,0x17,0x0f,0x49,0x37,1024, 768}, /* 0x15 */
-+ {0x0267,0x18,0x11,0x00,0x37,1024, 768}, /* 0x16 */
-+ {0x0047,0x19,0x16,0x8c,0x37,1024, 768}, /* 0x17 */
-+ {0x0047,0x1a,0x1b,0x00,0x37,1024, 768}, /* 0x18 */
-+ {0x0007,0x1b,0x1f,0x00,0x37,1024, 768}, /* 0x19 */
-+ {0x0387,0x1c,0x11,0x00,0x3a,1280,1024}, /* 0x1a */
-+ {0x0077,0x1d,0x19,0x07,0x3a,1280,1024}, /* 0x1b */
-+ {0x0047,0x1e,0x1e,0x00,0x3a,1280,1024}, /* 0x1c */
-+ {0x0007,0x1f,0x20,0x00,0x3a,1280,1024}, /* 0x1d */
-+ {0x0867,0x20,0x21,0x09,0x3c,1600,1200}, /* 0x1e */
-+ {0x0007,0x21,0x22,0x00,0x3c,1600,1200}, /* 0x1f */
-+ {0x0007,0x22,0x23,0x00,0x3c,1600,1200}, /* 0x20 */
-+ {0x0007,0x23,0x25,0x00,0x3c,1600,1200}, /* 0x21 */
-+ {0x0007,0x24,0x26,0x00,0x3c,1600,1200}, /* 0x22 */
-+ {0x0007,0x25,0x2c,0x00,0x3c,1600,1200}, /* 0x23 */
-+ {0x0007,0x26,0x34,0x00,0x3c,1600,1200}, /* 0x24 */
-+ {0x407f,0x00,0x00,0x00,0x40, 320, 200}, /* 0x25 */
-+ {0xc07f,0x01,0x00,0x04,0x50, 320, 240}, /* 0x26 */
-+ {0x007f,0x02,0x04,0x05,0x51, 400, 300}, /* 0x27 */
-+ {0xc077,0x03,0x0b,0x06,0x52, 512, 384}, /* 0x28 */
-+ {0x8007,0x27,0x27,0x00,0x68,1920,1440}, /* 0x29 */
-+ {0x4007,0x28,0x29,0x00,0x68,1920,1440}, /* 0x2a */
-+ {0x4007,0x29,0x2e,0x00,0x68,1920,1440}, /* 0x2b */
-+ {0x4007,0x2a,0x30,0x00,0x68,1920,1440}, /* 0x2c */
-+ {0x4007,0x2b,0x35,0x00,0x68,1920,1440}, /* 0x2d */
-+ {0x4005,0x2c,0x39,0x00,0x68,1920,1440}, /* 0x2e */
-+ {0x4007,0x2d,0x2b,0x00,0x6c,2048,1536}, /* 0x2f */
-+ {0x4007,0x2e,0x31,0x00,0x6c,2048,1536}, /* 0x30 */
-+ {0x4007,0x2f,0x33,0x00,0x6c,2048,1536}, /* 0x31 */
-+ {0x4007,0x30,0x37,0x00,0x6c,2048,1536}, /* 0x32 */
-+ {0x4005,0x31,0x38,0x00,0x6c,2048,1536}, /* 0x33 */
-+ {0x0057,0x32,0x40,0x08,0x70, 800, 480}, /* 0x34 */
-+ {0x0047,0x33,0x07,0x08,0x70, 800, 480}, /* 0x35 */
-+ {0x0047,0x34,0x0a,0x08,0x70, 800, 480}, /* 0x36 */
-+ {0x0057,0x35,0x0b,0x09,0x71,1024, 576}, /* 0x37 */
-+ {0x0047,0x36,0x11,0x09,0x71,1024, 576}, /* 0x38 */
-+ {0x0047,0x37,0x16,0x09,0x71,1024, 576}, /* 0x39 */
-+ {0x0057,0x38,0x19,0x0a,0x75,1280, 720}, /* 0x3a */
-+ {0x0047,0x39,0x1e,0x0a,0x75,1280, 720}, /* 0x3b */
-+ {0x0007,0x3a,0x20,0x0a,0x75,1280, 720}, /* 0x3c */
-+ {0x0067,0x3b,0x19,0x08,0x7c,1280, 960}, /* 0x3d */
-+ {0x0027,0x4c,0x59,0x08,0x7c,1280, 960}, /* 0x3e */
-+ {0xc07f,0x4e,0x00,0x06,0x5a, 320, 240}, /* 0x3f */ /* FSTN 320x240 */
-+ {0x0077,0x42,0x5b,0x08,0x23,1280, 768}, /* 0x40 */ /* TW: 0x5b was 0x12 */
-+ {0x0067,0x43,0x4d,0x08,0x26,1400,1050}, /* 0x41 */
-+ {0x0007,0x4b,0x5a,0x08,0x26,1400,1050}, /* 0x42 TW: not in any BIOS */
-+ {0x0047,0x44,0x19,0x00,0x29,1152, 864}, /* 0x43 TW: Non-BIOS, new */
-+ {0x0047,0x4a,0x1e,0x00,0x29,1152, 864}, /* 0x44 TW: Non-BIOS, new */
-+ {0x00c7,0x45,0x57,0x00,0x39, 848, 480}, /* 0x45 TW: 848x480-38Hzi - Non-BIOS, new */
-+ {0xc047,0x46,0x55,0x00,0x39, 848, 480}, /* 0x46 TW: 848x480-60Hz - Non-BIOS, new */
-+ {0x00c7,0x47,0x57,0x00,0x3f, 856, 480}, /* 0x47 TW: 856x480-38Hzi - Non-BIOS, new */
-+ {0xc047,0x48,0x57,0x00,0x3f, 856, 480}, /* 0x48 TW: 856x480-60Hz - Non-BIOS, new */
-+ {0x0047,0x49,0x58,0x00,0x48,1360, 768}, /* 0x49 TW: 1360x768-60Hz - Non-BIOS, new */
-+ {0x000f,0x4d,0x03,0x06,0x5f, 768, 576}, /* 0x4a TW: 768x576 */
-+ {0xffff,0x00,0x00,0x00,0x00, 0, 0}
-+};
-
- typedef struct _SiS310_CRT1TableStruct
- {
-@@ -710,7 +277,7 @@ static const SiS310_CRT1TableStruct SiS3
- {{0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
- 0x9c,0x8e,0x8f,0x96,0xb9,0x30,0x00,0x05,
- 0x00}}, /* 0x4 */
--#if 0
-+#if 0
- {{0x5f,0x4f,0x50,0x82,0x55,0x81,0x0b,0x3e,
- 0xe9,0x8b,0xdf,0xe7,0x04,0x00,0x00,0x05,
- 0x00}}, /* 0x5 */
-@@ -940,19 +507,25 @@ static const SiS310_CRT1TableStruct SiS3
- 0x00}}, /* 0x4b */
- {{0xd3,0x9f,0x9f,0x97,0xab,0x1f,0xf1,0xff, /* TW: New, 1280x960-85, not in any BIOS */
- 0xc0,0x83,0xbf,0xbf,0xf2,0x10,0x00,0x07,
-- 0x01}} /* 0x4c */
-+ 0x01}}, /* 0x4c */
-+ {{0x7b,0x5f,0x63,0x9f,0x6a,0x93,0x6f,0xf0, /* 768x576 */
-+ 0x58,0x8a,0x3f,0x57,0x70,0x20,0x00,0x05,
-+ 0x01}}, /* 0x4d */
-+ {{0x2d,0x27,0x28,0x90,0x2c,0x80,0x0b,0x3e, /* FSTN 320x480, TEMP - possibly invalid */
-+ 0xe9,0x8b,0xdf,0xe7,0x04,0x00,0x00,0x00,
-+ 0x00}} /* 0x4e */
- };
-
--
- typedef struct _SiS310_MCLKDataStruct
- {
- UCHAR SR28,SR29,SR2A;
- USHORT CLOCK;
- } SiS310_MCLKDataStruct;
-
-+#ifdef LINUXBIOS
- static const SiS310_MCLKDataStruct SiS310_MCLKData_0_315[] =
- {
-- { 0x3b,0x22,0x01,143}, /* TW: Was { 0x5c,0x23,0x01,166}, */
-+ { 0x3b,0x22,0x01,143},
- { 0x5c,0x23,0x01,166},
- { 0x5c,0x23,0x01,166},
- { 0x5c,0x23,0x01,166},
-@@ -962,7 +535,7 @@ static const SiS310_MCLKDataStruct SiS31
- { 0x5c,0x23,0x01,166}
- };
-
--static const SiS310_MCLKDataStruct SiS310_MCLKData_0_650[] = /* @ 0x54 */
-+static const SiS310_MCLKDataStruct SiS310_MCLKData_0_650[] =
- {
- { 0x5a,0x64,0x82, 66},
- { 0xb3,0x45,0x82, 83},
-@@ -973,8 +546,22 @@ static const SiS310_MCLKDataStruct SiS31
- { 0x37,0x22,0x82,133},
- { 0x37,0x22,0x82,133}
- };
-+#endif
-+
-+static const SiS310_MCLKDataStruct SiS310_MCLKData_0_330[] =
-+{
-+ { 0x5c,0x23,0x01,166},
-+ { 0x5c,0x23,0x01,166},
-+ { 0x7c,0x08,0x01,200},
-+ { 0x79,0x06,0x01,250},
-+ { 0x7c,0x08,0x01,200},
-+ { 0x7c,0x08,0x01,200},
-+ { 0x7c,0x08,0x01,200},
-+ { 0x79,0x06,0x01,250}
-+};
-
--static const SiS310_MCLKDataStruct SiS310_MCLKData_0_330[] = /* @ 0x54 */
-+#ifdef LINUXBIOS
-+static const SiS310_MCLKDataStruct SiS310_MCLKData_0_660[] = /* TODO */
- {
- { 0x5c,0x23,0x01,166},
- { 0x5c,0x23,0x01,166},
-@@ -985,8 +572,9 @@ static const SiS310_MCLKDataStruct SiS31
- { 0x7c,0x08,0x01,200},
- { 0x79,0x06,0x01,250}
- };
-+#endif
-
--static const SiS310_MCLKDataStruct SiS310_MCLKData_1[] = /* @ 0x155 */
-+static const SiS310_MCLKDataStruct SiS310_MCLKData_1[] =
- {
- { 0x29,0x21,0x82,150},
- { 0x5c,0x23,0x82,166},
-@@ -998,6 +586,7 @@ static const SiS310_MCLKDataStruct SiS31
- { 0x37,0x22,0x82,133}
- };
-
-+#ifdef LINUXBIOS
- typedef struct _SiS310_ECLKDataStruct
- {
- UCHAR SR2E,SR2F,SR30;
-@@ -1011,6 +600,7 @@ static const SiS310_ECLKDataStruct SiS31
- { 0x5c,0x23,0x01,166},
- { 0x5c,0x23,0x01,166}
- };
-+#endif
-
- typedef struct _SiS310_VCLKDataStruct
- {
-@@ -1020,22 +610,22 @@ typedef struct _SiS310_VCLKDataStruct
-
- static const SiS310_VCLKDataStruct SiS310_VCLKData[]=
- {
-- { 0x1b,0xe1, 25}, /* 0x0 */ /* 650/LVDS BIOS: @ 0x5647 */
-- { 0x4e,0xe4, 28}, /* 0x1 */
-- { 0x57,0xe4, 31}, /* 0x2 */
-- { 0xc3,0xc8, 36}, /* 0x3 */
-- { 0x42,0xe2, 40}, /* 0x4 */
-- { 0xfe,0xcd, 43}, /* 0x5 */
-- { 0x5d,0xc4, 44}, /* 0x6 */
-- { 0x52,0xe2, 49}, /* 0x7 */
-- { 0x53,0xe2, 50}, /* 0x8 */
-- { 0x74,0x67, 52}, /* 0x9 */
-- { 0x6d,0x66, 56}, /* 0xa */
-- { 0x5a,0x64, 65}, /* 0xb */ /* TW: was 6c c3 - WRONG */
-- { 0x46,0x44, 67}, /* 0xc */
-- { 0xb1,0x46, 68}, /* 0xd */
-- { 0xd3,0x4a, 72}, /* 0xe */
-- { 0x29,0x61, 75}, /* 0xf */
-+ { 0x1b,0xe1, 25}, /* 0x00 */
-+ { 0x4e,0xe4, 28}, /* 0x01 */
-+ { 0x57,0xe4, 31}, /* 0x02 */
-+ { 0xc3,0xc8, 36}, /* 0x03 */
-+ { 0x42,0xe2, 40}, /* 0x04 */
-+ { 0xfe,0xcd, 43}, /* 0x05 */
-+ { 0x5d,0xc4, 44}, /* 0x06 */
-+ { 0x52,0xe2, 49}, /* 0x07 */
-+ { 0x53,0xe2, 50}, /* 0x08 */
-+ { 0x74,0x67, 52}, /* 0x09 */
-+ { 0x6d,0x66, 56}, /* 0x0a */
-+ { 0x5a,0x64, 65}, /* 0x0b */ /* TW: was 6c c3 - WRONG */
-+ { 0x46,0x44, 67}, /* 0x0c */
-+ { 0xb1,0x46, 68}, /* 0x0d */
-+ { 0xd3,0x4a, 72}, /* 0x0e */
-+ { 0x29,0x61, 75}, /* 0x0f */
- { 0x6e,0x46, 76}, /* 0x10 */
- { 0x2b,0x61, 78}, /* 0x11 */
- { 0x31,0x42, 79}, /* 0x12 */
-@@ -1045,7 +635,7 @@ static const SiS310_VCLKDataStruct SiS31
- { 0x62,0x44, 94}, /* 0x16 */
- { 0x2b,0x41,104}, /* 0x17 */
- { 0x3a,0x23,105}, /* 0x18 */
-- { 0x70,0x44,108}, /* 0x19 */
-+ { 0x70,0x44,108}, /* 0x19 */ /* 1400x1050 LCD */
- { 0x3c,0x23,109}, /* 0x1a */
- { 0x5e,0x43,113}, /* 0x1b */
- { 0xbc,0x44,116}, /* 0x1c */
-@@ -1078,12 +668,12 @@ static const SiS310_VCLKDataStruct SiS31
- { 0xea,0x08,340}, /* 0x37 */
- { 0xe8,0x07,376}, /* 0x38 */
- { 0xde,0x06,389}, /* 0x39 */
-- { 0x52,0x2a, 54}, /* 0x3a */
-- { 0x52,0x6a, 27}, /* 0x3b */
-- { 0x62,0x24, 70}, /* 0x3c */
-- { 0x62,0x64, 70}, /* 0x3d */
-- { 0xa8,0x4c, 30}, /* 0x3e */
-- { 0x20,0x26, 33}, /* 0x3f */
-+ { 0x52,0x2a, 54}, /* 0x3a */ /* 301 TV */
-+ { 0x52,0x6a, 27}, /* 0x3b */ /* 301 TV */
-+ { 0x62,0x24, 70}, /* 0x3c */ /* 301 TV */
-+ { 0x62,0x64, 70}, /* 0x3d */ /* 301 TV */
-+ { 0xa8,0x4c, 30}, /* 0x3e */ /* 301 TV */
-+ { 0x20,0x26, 33}, /* 0x3f */ /* 301 TV */
- { 0x31,0xc2, 39}, /* 0x40 */
- { 0x60,0x36, 30}, /* 0x41 */ /* Chrontel */
- { 0x40,0x4a, 28}, /* 0x42 */ /* Chrontel */
-@@ -1096,7 +686,7 @@ static const SiS310_VCLKDataStruct SiS31
- { 0xce,0x3c, 39}, /* 0x49 */
- { 0x52,0x4a, 36}, /* 0x4a */ /* Chrontel */
- { 0x34,0x61, 95}, /* 0x4b */
-- { 0x78,0x27,108}, /* 0x4c - was 102 */ /* TW: Last entry in 650/301 BIOS */
-+ { 0x78,0x27,108}, /* 0x4c - was 102 */
- { 0x66,0x43,123}, /* 0x4d */ /* Modes 0x26-0x28 (1400x1050) */
- { 0x41,0x4e, 21}, /* 0x4e */
- { 0xa1,0x4a, 29}, /* 0x4f */ /* Chrontel */
-@@ -1110,7 +700,8 @@ static const SiS310_VCLKDataStruct SiS31
- { 0xbf,0xc8, 35}, /* 0x57 - added for 856x480-38i,60 (not in any BIOS) */
- { 0x30,0x23, 88}, /* 0x58 - added for 1360x768-62 (is 60Hz!) (not in any BIOS) */
- { 0x52,0x07,149}, /* 0x59 - added for 1280x960-85 (Not in any BIOS) */
-- { 0x56,0x07,156} /* 0x5a - added for 1400x1050-75 */
-+ { 0x56,0x07,156}, /* 0x5a - added for 1400x1050-75 */
-+ { 0x70,0x29, 81} /* 0x5b */ /* 1280x768 LCD */
- };
-
- typedef struct _SiS310_VBVCLKDataStruct
-@@ -1121,22 +712,22 @@ typedef struct _SiS310_VBVCLKDataStruct
-
- static const SiS310_VBVCLKDataStruct SiS310_VBVCLKData[]=
- {
-- { 0x1b,0xe1, 25}, /* 0x0 */ /* 650/LVDS BIOS: @ 0x579c */
-- { 0x4e,0xe4, 28}, /* 0x1 */
-- { 0x57,0xe4, 31}, /* 0x2 */
-- { 0xc3,0xc8, 36}, /* 0x3 */
-- { 0x42,0x47, 40}, /* 0x4 */
-- { 0xfe,0xcd, 43}, /* 0x5 */
-- { 0x5d,0xc4, 44}, /* 0x6 */
-- { 0x52,0x47, 49}, /* 0x7 */
-- { 0x53,0x47, 50}, /* 0x8 */
-- { 0x74,0x67, 52}, /* 0x9 */
-- { 0x6d,0x66, 56}, /* 0xa */
-- { 0x35,0x62, 65}, /* 0xb */ /* Was 0x5a,0x64 - 650/LVDS+301 bios: 35,62 */
-- { 0x46,0x44, 67}, /* 0xc */
-- { 0xb1,0x46, 68}, /* 0xd */
-- { 0xd3,0x4a, 72}, /* 0xe */
-- { 0x29,0x61, 75}, /* 0xf */
-+ { 0x1b,0xe1, 25}, /* 0x00 */
-+ { 0x4e,0xe4, 28}, /* 0x01 */
-+ { 0x57,0xe4, 31}, /* 0x02 */
-+ { 0xc3,0xc8, 36}, /* 0x03 */
-+ { 0x42,0x47, 40}, /* 0x04 */
-+ { 0xfe,0xcd, 43}, /* 0x05 */
-+ { 0x5d,0xc4, 44}, /* 0x06 */
-+ { 0x52,0x47, 49}, /* 0x07 */
-+ { 0x53,0x47, 50}, /* 0x08 */
-+ { 0x74,0x67, 52}, /* 0x09 */
-+ { 0x6d,0x66, 56}, /* 0x0a */
-+ { 0x35,0x62, 65}, /* 0x0b */ /* Was 0x5a,0x64 - 650/LVDS+301 bios: 35,62 */
-+ { 0x46,0x44, 67}, /* 0x0c */
-+ { 0xb1,0x46, 68}, /* 0x0d */
-+ { 0xd3,0x4a, 72}, /* 0x0e */
-+ { 0x29,0x61, 75}, /* 0x0f */
- { 0x6d,0x46, 75}, /* 0x10 */
- { 0x41,0x43, 78}, /* 0x11 */
- { 0x31,0x42, 79}, /* 0x12 */
-@@ -1146,7 +737,7 @@ static const SiS310_VBVCLKDataStruct SiS
- { 0x62,0x44, 94}, /* 0x16 */
- { 0x2b,0x22,104}, /* 0x17 */
- { 0x49,0x24,105}, /* 0x18 */
-- { 0xf8,0x2f,108}, /* 0x19 */
-+ { 0xf8,0x2f,108}, /* 0x19 */ /* 1400x1050 LCD */
- { 0x3c,0x23,109}, /* 0x1a */
- { 0x5e,0x43,113}, /* 0x1b */
- { 0xbc,0x44,116}, /* 0x1c */
-@@ -1179,19 +770,19 @@ static const SiS310_VBVCLKDataStruct SiS
- { 0xea,0x08,340}, /* 0x37 */
- { 0xe8,0x07,376}, /* 0x38 */
- { 0xde,0x06,389}, /* 0x39 */
-- { 0x52,0x2a, 54}, /* 0x3a */
-- { 0x52,0x6a, 27}, /* 0x3b */
-- { 0x62,0x24, 70}, /* 0x3c */
-- { 0x62,0x64, 70}, /* 0x3d */
-- { 0xa8,0x4c, 30}, /* 0x3e */
-- { 0x20,0x26, 33}, /* 0x3f */
-+ { 0x52,0x2a, 54}, /* 0x3a */ /* 301 TV */
-+ { 0x52,0x6a, 27}, /* 0x3b */ /* 301 TV */
-+ { 0x62,0x24, 70}, /* 0x3c */ /* 301 TV */
-+ { 0x62,0x64, 70}, /* 0x3d */ /* 301 TV */
-+ { 0xa8,0x4c, 30}, /* 0x3e */ /* 301 TV */
-+ { 0x20,0x26, 33}, /* 0x3f */ /* 301 TV */
- { 0x31,0xc2, 39}, /* 0x40 */
-- { 0x2e,0x48, 25}, /* 0x41 */
-- { 0x24,0x46, 25}, /* 0x42 */
-- { 0x26,0x64, 28}, /* 0x43 */
-- { 0x37,0x64, 40}, /* 0x44 */
-- { 0xa1,0x42,108}, /* 0x45 */
-- { 0x37,0x61,100}, /* 0x46 */
-+ { 0x2e,0x48, 25}, /* 0x41 */ /* Replacement for LCD on 315 for index 0 */
-+ { 0x24,0x46, 25}, /* 0x42 */ /* Replacement for LCD on 315 for modes 0x01, 0x03, 0x0f, 0x10, 0x12 */
-+ { 0x26,0x64, 28}, /* 0x43 */ /* Replacement for LCD on 315 for index 1 */
-+ { 0x37,0x64, 40}, /* 0x44 */ /* Replacement for LCD on 315 for index 4 */
-+ { 0xa1,0x42,108}, /* 0x45 */ /* 1280x960 LCD */
-+ { 0x37,0x61,100}, /* 0x46 */ /* 1280x960 LCD */
- { 0x78,0x27,108}, /* 0x47 */
- { 0x97,0x2c, 26}, /* 0x48 */ /* UNUSED - Entries from here new, not in any BIOS */
- { 0xce,0x3c, 39}, /* 0x49 */ /* UNUSED */
-@@ -1211,72 +802,17 @@ static const SiS310_VBVCLKDataStruct SiS
- { 0xbf,0xc8, 35}, /* 0x57 */ /* 856x480-38i,60 */
- { 0x30,0x23, 88}, /* 0x58 */ /* 1360x768-62 (is 60Hz!) TEMP, UNUSED */
- { 0x52,0x07,149}, /* 0x59 */ /* 1280x960-85 - UNUSED */
-- { 0x56,0x07,156} /* 0x5a */ /* 1400x1050-75 - UNUSED */
-+ { 0x56,0x07,156}, /* 0x5a */ /* 1400x1050-75 - UNUSED */
-+ { 0x70,0x29, 81} /* 0x5b */ /* 1280x768 LCD */
- };
-
- static const UCHAR SiS310_ScreenOffset[] =
- {
- 0x14,0x19,0x20,0x28,0x32,0x40,0x50,0x64,
-- 0x78,0x80,0x2d,0x35,0x57,0x48,0x55,
-+ 0x78,0x80,0x2d,0x35,0x57,0x48,0x55,0x30,
- 0xff
--}; /* TW: Added 1400x1050, 1152x864, 848/856x480, 1360x768 */
--
--typedef struct _SiS310_StResInfoStruct
--{
-- USHORT HTotal;
-- USHORT VTotal;
--} SiS310_StResInfoStruct;
--
--static const SiS310_StResInfoStruct SiS310_StResInfo[]=
--{
-- { 640,400},
-- { 640,350},
-- { 720,400},
-- { 720,350},
-- { 640,480}
--};
--
--typedef struct _SiS310_ModeResInfoStruct
--{
-- USHORT HTotal;
-- USHORT VTotal;
-- UCHAR XChar;
-- UCHAR YChar;
--} SiS310_ModeResInfoStruct;
--
--static const SiS310_ModeResInfoStruct SiS310_ModeResInfo[] =
--{
-- { 320, 200, 8, 8}, /* 0x00 */
-- { 320, 240, 8, 8}, /* 0x01 */
-- { 320, 400, 8, 8}, /* 0x02 */
-- { 400, 300, 8, 8}, /* 0x03 */
-- { 512, 384, 8, 8}, /* 0x04 */
-- { 640, 400, 8,16}, /* 0x05 */
-- { 640, 480, 8,16}, /* 0x06 */
-- { 800, 600, 8,16}, /* 0x07 */
-- { 1024, 768, 8,16}, /* 0x08 */
-- { 1280,1024, 8,16}, /* 0x09 */
-- { 1600,1200, 8,16}, /* 0x0a */
-- { 1920,1440, 8,16}, /* 0x0b */
-- { 2048,1536, 8,16}, /* 0x0c */
-- { 720, 480, 8,16}, /* 0x0d */
-- { 720, 576, 8,16}, /* 0x0e */
-- { 1280, 960, 8,16}, /* 0x0f */
-- { 800, 480, 8,16}, /* 0x10 */
-- { 1024, 576, 8,16}, /* 0x11 */
-- { 1280, 720, 8,16}, /* 0x12 */
-- { 856, 480, 8,16}, /* 0x13 - TW: New, not in any BIOS */
-- { 1280, 768, 8,16}, /* 0x14 20; TW: New */
-- { 1400,1050, 8,16}, /* 0x15 21; TW: New */
-- { 1152, 864, 8,16}, /* 0x16 - TW: New, not in any BIOS */
-- { 848, 480, 8,16}, /* 0x17 - TW: New, not in any BIOS */
-- { 1360, 768, 8,16} /* 0x18 - TW: New, not in any BIOS */
- };
-
--static const UCHAR SiS310_OutputSelect = 0x40;
--
--static const UCHAR SiS310_SoftSetting = 0x30; /* TW: RAM setting */
--
- static const UCHAR SiS310_SR15[8][4]={
- {0x00,0x04,0x60,0x60},
- {0x0f,0x0f,0x0f,0x0f},
-@@ -1322,16 +858,6 @@ static const USHORT SiS310_VideoSenseDat
- static const USHORT SiS310_YCSenseData2 = 0x016b;
- #endif
-
--static const UCHAR SiS310_NTSCPhase[] = {0x21,0xed,0xba,0x08}; /* TW: Was {0x21,0xed,0x8a,0x08}; */
--static const UCHAR SiS310_PALPhase[] = {0x2a,0x05,0xe3,0x00}; /* TW: Was {0x2a,0x05,0xd3,0x00}; */
--static const UCHAR SiS310_PALMPhase[] = {0x21,0xE4,0x2E,0x9B}; /* TW: palm*/
--static const UCHAR SiS310_PALNPhase[] = {0x21,0xF4,0x3E,0xBA}; /* TW: paln*/
--static const UCHAR SiS310_NTSCPhase2[] = {0x21,0xF0,0x7B,0xD6};
--static const UCHAR SiS310_PALPhase2[] = {0x2a,0x09,0x86,0xe9};
--static const UCHAR SiS310_PALMPhase2[] = {0x21,0xE6,0xEF,0xA4}; /* TW: palm 301b*/
--static const UCHAR SiS310_PALNPhase2[] = {0x21,0xF6,0x94,0x46}; /* TW: paln 301b*/
--static const UCHAR SiS310_SpecialPhase[] = {0x1e,0x8c,0x5c,0x7a};
--
- typedef struct _SiS310_LCDDataStruct
- {
- USHORT RVBHCMAX;
-@@ -1353,25 +879,6 @@ static const SiS310_LCDDataStruct SiS31
- { 1, 1,1344, 806,1344, 806}
- };
-
--#if 0 /* Seems out-dated, all BIOSes since 03/27/2002 have the other version */
--static const SiS310_LCDDataStruct SiS310_ExtLCD1024x768Data[] =
--{
-- { 12, 5, 896, 512,1344, 806},
-- { 12, 5, 896, 510,1344, 806},
-- { 32, 15,1008, 505,1344, 806},
-- { 32, 15,1008, 514,1344, 806},
-- { 12, 5, 896, 500,1344, 806},
-- { 42, 25,1024, 625,1344, 806},
-- { 1, 1,1344, 806,1344, 806},
-- { 12, 5, 896, 500,1344, 806},
-- { 42, 25,1024, 625,1344, 806},
-- { 1, 1,1344, 806,1344, 806},
-- { 12, 5, 896, 500,1344, 806},
-- { 42, 25,1024, 625,1344, 806},
-- { 1, 1,1344, 806,1344, 806}
--};
--#endif
--
- static const SiS310_LCDDataStruct SiS310_ExtLCD1024x768Data[] =
- {
- { 42, 25,1536, 419,1344, 806},
-@@ -1463,272 +970,14 @@ static const SiS310_LCDDataStruct SiS31
- { 1, 1,1688,1066,1688,1066}
- };
-
--static const SiS310_LCDDataStruct SiS310_LCD1280x960Data[] =
--{
-- { 9, 2, 800, 500,1800,1000},
-- { 9, 2, 800, 500,1800,1000},
-- { 4, 1, 900, 500,1800,1000},
-- { 4, 1, 900, 500,1800,1000},
-- { 9, 2, 800, 500,1800,1000},
-- { 30, 11,1056, 625,1800,1000},
-- { 5, 3,1350, 800,1800,1000},
-- { 1, 1,1576,1050,1576,1050},
-- { 1, 1,1800,1000,1800,1000}
--};
--
--static const SiS310_LCDDataStruct SiS310_StLCD1400x1050Data[] =
--{ /* TW: New from 1.11.6s */
-- { 211, 100, 2100, 408, 1688, 1066 },
-- { 211, 64, 1536, 358, 1688, 1066 },
-- { 211, 100, 2100, 408, 1688, 1066 },
-- { 211, 64, 1536, 358, 1688, 1066 },
-- { 211, 48, 840, 488, 1688, 1066 },
-- { 211, 72, 1008, 609, 1688, 1066 },
-- { 211, 128, 1400, 776, 1688, 1066 },
-- { 211, 205, 1680, 1041, 1688, 1066 },
-- { 1, 1, 1688, 1066, 1688, 1066 }
--};
--
--static const SiS310_LCDDataStruct SiS310_ExtLCD1400x1050Data[] =
--{ /* TW: New from 1.11.6s */
-- { 211, 100, 2100, 408, 1688, 1066 },
-- { 211, 64, 1536, 358, 1688, 1066 },
-- { 211, 100, 2100, 408, 1688, 1066 },
-- { 211, 64, 1536, 358, 1688, 1066 },
-- { 211, 48, 840, 488, 1688, 1066 },
-- { 211, 72, 1008, 609, 1688, 1066 },
-- { 211, 128, 1400, 776, 1688, 1066 },
-- { 211, 205, 1680, 1041, 1688, 1066 },
-- { 1, 1, 1688, 1066, 1688, 1066 }
--};
--
--static const SiS310_LCDDataStruct SiS310_NoScaleData1400x1050[] =
--{ /* TW: To be checked (BIOS uses 1280x1024 data, one line too short) */
-- { 1, 1, 1688, 1066, 1688, 1066 },
-- { 1, 1, 1688, 1066, 1688, 1066 },
-- { 1, 1, 1688, 1066, 1688, 1066 },
-- { 1, 1, 1688, 1066, 1688, 1066 },
-- { 1, 1, 1688, 1066, 1688, 1066 },
-- { 1, 1, 1688, 1066, 1688, 1066 },
-- { 1, 1, 1688, 1066, 1688, 1066 },
-- { 1, 1, 1688, 1066, 1688, 1066 },
-- { 1, 1, 1688, 1066, 1688, 1066 }
--};
--
--static const SiS310_LCDDataStruct SiS310_StLCD1600x1200Data[] =
--{ /* TODO */
-- { 0, 0, 0, 0, 0, 0}
--};
--
--static const SiS310_LCDDataStruct SiS310_ExtLCD1600x1200Data[] =
--{ /* TODO */
-- { 0, 0, 0, 0, 0, 0}
--};
--
--static const SiS310_LCDDataStruct SiS310_NoScaleData1600x1200[] =
--{ /* TODO */
-- { 0, 0, 0, 0, 0, 0}
--};
--
--typedef struct _SiS310_TVDataStruct
--{
-- USHORT RVBHCMAX;
-- USHORT RVBHCFACT;
-- USHORT VGAHT;
-- USHORT VGAVT;
-- USHORT TVHDE;
-- USHORT TVVDE;
-- USHORT RVBHRS;
-- UCHAR FlickerMode;
-- USHORT HALFRVBHRS;
-- UCHAR RY1COE;
-- UCHAR RY2COE;
-- UCHAR RY3COE;
-- UCHAR RY4COE;
--} SiS310_TVDataStruct;
--
--static const SiS310_TVDataStruct SiS310_StPALData[]=
--{
-- { 1, 1, 864, 525,1270, 400, 100, 0, 760,0xf4,0xff,0x1c,0x22},
-- { 1, 1, 864, 525,1270, 350, 100, 0, 760,0xf4,0xff,0x1c,0x22},
-- { 1, 1, 864, 525,1270, 400, 0, 0, 720,0xf1,0x04,0x1f,0x18},
-- { 1, 1, 864, 525,1270, 350, 0, 0, 720,0xf4,0x0b,0x1c,0x0a},
-- { 1, 1, 864, 525,1270, 480, 50, 0, 760,0xf4,0xff,0x1c,0x22},
-- { 1, 1, 864, 525,1270, 600, 50, 0, 0,0xf4,0xff,0x1c,0x22}
--};
--
--static const SiS310_TVDataStruct SiS310_ExtPALData[] =
--{
-- { 27, 10, 848, 448,1270, 530, 50, 0, 50,0xf4,0xff,0x1c,0x22},
-- { 108, 35, 848, 398,1270, 530, 50, 0, 50,0xf4,0xff,0x1c,0x22},
-- { 12, 5, 954, 448,1270, 530, 50, 0, 50,0xf1,0x04,0x1f,0x18},
-- { 9, 4, 960, 463,1644, 438, 50, 0, 50,0xf4,0x0b,0x1c,0x0a},
-- { 9, 4, 848, 528,1270, 530, 0, 0, 50,0xf5,0xfb,0x1b,0x2a}, /* 640x480 */
-- { 36, 25,1060, 648,1316, 530, 438, 0, 438,0xeb,0x05,0x25,0x16}, /* 800x600 */
-- { 3, 2,1080, 619,1270, 540, 438, 0, 438,0xf3,0x00,0x1d,0x20}, /* 720x480/576 */
-- { 1, 1,1170, 821,1270, 520, 686, 0, 686,0xF3,0x00,0x1D,0x20} /* 1024x768 */
--};
--
--static const SiS310_TVDataStruct SiS310_StNTSCData[]=
--{
-- { 1, 1, 858, 525,1270, 400, 50, 0, 760,0xf1,0x04,0x1f,0x18},
-- { 1, 1, 858, 525,1270, 350, 50, 0, 640,0xf1,0x04,0x1f,0x18},
-- { 1, 1, 858, 525,1270, 400, 0, 0, 720,0xf1,0x04,0x1f,0x18},
-- { 1, 1, 858, 525,1270, 350, 0, 0, 720,0xf4,0x0b,0x1c,0x0a},
-- { 1, 1, 858, 525,1270, 480, 0, 0, 760,0xf1,0x04,0x1f,0x18}
--};
--
--static const SiS310_TVDataStruct SiS310_ExtNTSCData[]=
--{
-- { 143, 65, 858, 443,1270, 440, 171, 0, 171,0xf1,0x04,0x1f,0x18},
-- { 88, 35, 858, 393,1270, 440, 171, 0, 171,0xf1,0x04,0x1f,0x18},
-- { 143, 70, 924, 443,1270, 440, 92, 0, 92,0xf1,0x04,0x1f,0x18},
-- { 143, 70, 924, 393,1270, 440, 92, 0, 92,0xf4,0x0b,0x1c,0x0a},
-- { 143, 76, 836, 523,1270, 440, 224, 0, 0,0xf1,0x05,0x1f,0x16}, /* 640x480 */
-- { 143, 120,1056, 643,1270, 440, 0, 128, 0,0xf4,0x10,0x1c,0x00}, /* 800x600 */
-- { 2, 1, 858, 503,1270, 480, 0, 128, 0,0xee,0x0c,0x22,0x08}, /* 720x480/576 */
-- { 65, 64,1056, 791,1270, 480, 638, 0, 0,0xEE,0x0C,0x22,0x08} /* 1024x768 */
--};
--
--#if 0
--static const SiS310_TVDataStruct SiS310_St1HiTVData[]=
--{
--
--};
--#endif
--
--static const SiS310_TVDataStruct SiS310_St2HiTVData[]=
--{
-- { 3, 1, 0x348,0x1e3,0x670,0x3c0,0x032, 0, 0, 0x00,0x00,0x00,0x00},
-- { 1, 1, 0x37c,0x233,0x2b2,0x2bc, 0, 0, 0, 0x00,0x00,0x00,0x00},
-- { 3, 1, 0x348,0x1e3,0x670,0x3c0,0x032, 0, 0, 0x00,0x00,0x00,0x00},
-- { 1, 1, 0x3e8,0x233,0x311,0x2bc, 0, 0, 0, 0x00,0x00,0x00,0x00},
-- { 5, 2, 0x348,0x233,0x670,0x3c0,0x08d,128, 0, 0x00,0x00,0x00,0x00},
-- { 8, 5, 0x41a,0x2ab,0x670,0x3c0,0x17c,128, 0, 0x00,0x00,0x00,0x00}
--};
--
--static const SiS310_TVDataStruct SiS310_ExtHiTVData[]=
--{
-- { 6, 1, 0x348,0x233,0x660,0x3c0, 0, 0, 0, 0x00,0x00,0x00,0x00},
-- { 3, 1, 0x3c0,0x233,0x660,0x3c0, 0, 0, 0, 0x00,0x00,0x00,0x00},
-- { 3, 1, 0x348,0x1e3,0x660,0x3c0, 0, 0, 0, 0x00,0x00,0x00,0x00},
-- { 3, 1, 0x3c0,0x233,0x660,0x3c0, 0, 0, 0, 0x00,0x00,0x00,0x00},
-- { 5, 1, 0x348,0x233,0x670,0x3c0,0x166,128, 0, 0x00,0x00,0x00,0x00},
-- { 16, 5, 0x41a,0x2ab,0x670,0x3c0,0x143,128, 0, 0x00,0x00,0x00,0x00},
-- { 25, 12, 0x4ec,0x353,0x670,0x3c0,0x032, 0, 0, 0x00,0x00,0x00,0x00},
-- { 5, 4, 0x627,0x464,0x670,0x3c0,0x128, 0, 0, 0x00,0x00,0x00,0x00},
-- { 4, 1, 0x41a,0x233,0x670,0x3c0,0x143,128, 0, 0x00,0x00,0x00,0x00},
-- { 5, 2, 0x578,0x293,0x670,0x3c0,0x032, 0, 0, 0x00,0x00,0x00,0x00},
-- { 8, 5, 0x6d6,0x323,0x670,0x3c0,0x128, 0, 0, 0x00,0x00,0x00,0x00}
--};
--
--static const UCHAR SiS310_NTSCTiming[] = {
-- 0x17,0x1d,0x03,0x09,0x05,0x06,0x0c,0x0c,
-- 0x94,0x49,0x01,0x0a,0x06,0x0d,0x04,0x0a,
-- 0x06,0x14,0x0d,0x04,0x0a,0x00,0x85,0x1b,
-- 0x0c,0x50,0x00,0x97,0x00,0xda,0x4a,0x17,
-- 0x7d,0x05,0x4b,0x00,0x00,0xe2,0x00,0x02,
-- 0x03,0x0a,0x65,0x9d,0x08,0x92,0x8f,0x40,
-- 0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x50,
-- 0x00,0x40,0x44,0x00,0xdb,0x02,0x3b,0x00
--};
--
--static const UCHAR SiS310_PALTiming[] = {
-- 0x19,0x52,0x35,0x6e,0x04,0x38,0x3d,0x70,
-- 0x94,0x49,0x01,0x12,0x06,0x3e,0x35,0x6d,
-- 0x06,0x14,0x3e,0x35,0x6d,0x00,0x45,0x2b,
-- 0x70,0x50,0x00,0x9b,0x00,0xd9,0x5d,0x17,
-- 0x7d,0x05,0x45,0x00,0x00,0xe8,0x00,0x02,
-- 0x0d,0x00,0x68,0xb0,0x0b,0x92,0x8f,0x40,
-- 0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x63,
-- 0x00,0x40,0x3e,0x00,0xe1,0x02,0x28,0x00
--};
--
--static const UCHAR SiS310_HiTVExtTiming[] = {
-- 0x32,0x65,0x2c,0x5f,0x08,0x31,0x3a,0x64,
-- 0x28,0x02,0x01,0x3d,0x06,0x3e,0x35,0x6d,
-- 0x06,0x14,0x3e,0x35,0x6d,0x00,0xc5,0x3f,
-- 0x64,0x90,0x33,0x8c,0x18,0x36,0x3e,0x13,
-- 0x2a,0xde,0x2a,0x44,0x40,0x2a,0x44,0x40,
-- 0x8e,0x8e,0x82,0x07,0x0b,0x92,0x0f,0x40,
-- 0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x3d,
-- 0x63,0x4f,0x27,0x00,0xfc,0xff,0x6a,0x00
--};
--
--static const UCHAR SiS310_HiTVSt1Timing[] = {
-- 0x32,0x65,0x2c,0x5f,0x08,0x31,0x3a,0x65,
-- 0x28,0x02,0x01,0x3d,0x06,0x3e,0x35,0x6d,
-- 0x06,0x14,0x3e,0x35,0x6d,0x00,0xc5,0x3f,
-- 0x65,0x90,0x7b,0xa8,0x03,0xf0,0x87,0x03,
-- 0x11,0x15,0x11,0xcf,0x10,0x11,0xcf,0x10,
-- 0x35,0x35,0x3b,0x69,0x1d,0x92,0x0f,0x40,
-- 0x60,0x80,0x14,0x90,0x8c,0x60,0x04,0x86,
-- 0xaf,0x5d,0x0e,0x00,0xfc,0xff,0x2d,0x00
--};
--
--static const UCHAR SiS310_HiTVSt2Timing[] = {
-- 0x32,0x65,0x2c,0x5f,0x08,0x31,0x3a,0x64,
-- 0x28,0x02,0x01,0x3d,0x06,0x3e,0x35,0x6d,
-- 0x06,0x14,0x3e,0x35,0x6d,0x00,0xc5,0x3f,
-- 0x64,0x90,0x33,0x8c,0x18,0x36,0x3e,0x13,
-- 0x2a,0xde,0x2a,0x44,0x40,0x2a,0x44,0x40,
-- 0x8e,0x8e,0x82,0x07,0x0b,0x92,0x0f,0x40,
-- 0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x3d,
-- 0x63,0x4f,0x27,0x00,0xfc,0xff,0x6a,0x00
--};
--
--static const UCHAR SiS310_HiTVTextTiming[] = {
-- 0x32,0x65,0x2c,0x5f,0x08,0x31,0x3a,0x65,
-- 0x28,0x02,0x01,0x3d,0x06,0x3e,0x35,0x6d,
-- 0x06,0x14,0x3e,0x35,0x6d,0x00,0xc5,0x3f,
-- 0x65,0x90,0xe7,0xbc,0x03,0x0c,0x97,0x03,
-- 0x14,0x78,0x14,0x08,0x20,0x14,0x08,0x20,
-- 0xc8,0xc8,0x3b,0xd2,0x26,0x92,0x0f,0x40,
-- 0x60,0x80,0x14,0x90,0x8c,0x60,0x04,0x96,
-- 0x72,0x5c,0x11,0x00,0xfc,0xff,0x32,0x00
--};
--
--static const UCHAR SiS310_HiTVGroup3Data[] = {
-- 0x00,0x1a,0x22,0x63,0x62,0x22,0x08,0x5f,
-- 0x05,0x21,0xb2,0xb2,0x55,0x77,0x2a,0xa6,
-- 0x25,0x2f,0x47,0xfa,0xc8,0xff,0x8e,0x20,
-- 0x8c,0x6e,0x60,0x2e,0x58,0x48,0x72,0x44,
-- 0x56,0x36,0x4f,0x6e,0x3f,0x80,0x00,0x80,
-- 0x4f,0x7f,0x03,0xa8,0x7d,0x20,0x1a,0xa9,
-- 0x14,0x05,0x03,0x7e,0x64,0x31,0x14,0x75,
-- 0x18,0x05,0x18,0x05,0x4c,0xa8,0x01
--};
--
--static const UCHAR SiS310_HiTVGroup3Simu[] = {
-- 0x00,0x1a,0x22,0x63,0x62,0x22,0x08,0x95,
-- 0xdb,0x20,0xb8,0xb8,0x55,0x47,0x2a,0xa6,
-- 0x25,0x2f,0x47,0xfa,0xc8,0xff,0x8e,0x20,
-- 0x8c,0x6e,0x60,0x15,0x26,0xd3,0xe4,0x11,
-- 0x56,0x36,0x4f,0x6e,0x3f,0x80,0x00,0x80,
-- 0x67,0x36,0x01,0x47,0x0e,0x10,0xbe,0xb4,
-- 0x01,0x05,0x03,0x7e,0x65,0x31,0x14,0x75,
-- 0x18,0x05,0x18,0x05,0x4c,0xa8,0x01
--};
--
--static const UCHAR SiS310_HiTVGroup3Text[] = {
-- 0x00,0x1a,0x22,0x63,0x62,0x22,0x08,0xa7,
-- 0xf5,0x20,0xce,0xce,0x55,0x47,0x2a,0xa6,
-- 0x25,0x2f,0x47,0xfa,0xc8,0xff,0x8e,0x20,
-- 0x8c,0x6e,0x60,0x18,0x2c,0x0c,0x20,0x22,
-- 0x56,0x36,0x4f,0x6e,0x3f,0x80,0x00,0x80,
-- 0x93,0x3c,0x01,0x50,0x2f,0x10,0xf4,0xca,
-- 0x01,0x05,0x03,0x7e,0x65,0x31,0x14,0x75,
-- 0x18,0x05,0x18,0x05,0x4c,0xa8,0x01
--};
--
- typedef struct _SiS310_PanelDelayTblStruct
- {
- UCHAR timer[2];
- } SiS310_PanelDelayTblStruct;
-
--static const SiS310_PanelDelayTblStruct SiS310_PanelDelayTbl[]=
-+static const SiS310_PanelDelayTblStruct SiS310_PanelDelayTbl[]=
- {
-- {{0x10,0x40}}, /* TW: from 650/301LVx 1.10.6s BIOS */
-+ {{0x10,0x40}},
- {{0x10,0x40}},
- {{0x10,0x40}},
- {{0x10,0x40}},
-@@ -1744,24 +993,6 @@ static const SiS310_PanelDelayTblStruct
- {{0x10,0x40}},
- {{0x10,0x40}},
- {{0x10,0x40}}
--#if 0
-- {{0x28,0xc8}}, /* TW: from 650/301LV BIOS */
-- {{0x28,0xc8}},
-- {{0x28,0xc8}},
-- {{0x28,0xc8}},
-- {{0x28,0xc8}},
-- {{0x28,0xc8}},
-- {{0x28,0xc8}},
-- {{0x28,0xc8}},
-- {{0x28,0xc8}},
-- {{0x28,0xc8}},
-- {{0x28,0xc8}},
-- {{0x28,0xc8}},
-- {{0x28,0xc8}},
-- {{0x28,0xc8}},
-- {{0x28,0xc8}},
-- {{0x28,0xc8}}
--#endif
- };
-
- static const SiS310_PanelDelayTblStruct SiS310_PanelDelayTblLVDS[]=
-@@ -1792,363 +1023,7 @@ typedef struct _SiS310_LVDSDataStruct
- USHORT LCDVT;
- } SiS310_LVDSDataStruct;
-
--static const SiS310_LVDSDataStruct SiS310_LVDS320x480Data_1[]=
--{
-- { 848, 433, 400, 525},
-- { 848, 389, 400, 525},
-- { 848, 433, 400, 525},
-- { 848, 389, 400, 525},
-- { 848, 518, 400, 525},
-- {1056, 628, 400, 525},
-- { 400, 525, 400, 525},
-- { 800, 449,1000, 644},
-- { 800, 525,1000, 635}
--};
--
--static const SiS310_LVDSDataStruct SiS310_LVDS800x600Data_1[]=
--{
-- { 848, 433,1060, 629},
-- { 848, 389,1060, 629},
-- { 848, 433,1060, 629},
-- { 848, 389,1060, 629},
-- { 848, 518,1060, 629},
-- {1056, 628,1056, 628},
-- {1056, 628,1056, 628},
-- { 800, 449,1000, 644},
-- { 800, 525,1000, 635}
--};
--
--static const SiS310_LVDSDataStruct SiS310_LVDS800x600Data_2[]=
--{
-- {1056, 628,1056, 628},
-- {1056, 628,1056, 628},
-- {1056, 628,1056, 628},
-- {1056, 628,1056, 628},
-- {1056, 628,1056, 628},
-- {1056, 628,1056, 628},
-- {1056, 628,1056, 628},
-- { 800, 449,1000, 644},
-- { 800, 525,1000, 635}
--};
--
--static const SiS310_LVDSDataStruct SiS310_LVDS1024x768Data_1[]=
--{
-- { 840, 438,1344, 806},
-- { 840, 409,1344, 806},
-- { 840, 438,1344, 806},
-- { 840, 409,1344, 806},
-- { 840, 518,1344, 806}, /* 640x480 */
-- {1050, 638,1344, 806}, /* 800x600 */
-- {1344, 806,1344, 806}, /* 1024x768 */
-- { 800, 449,1280, 801},
-- { 800, 525,1280, 813}
--};
--
--static const SiS310_LVDSDataStruct SiS310_LVDS1024x768Data_2[]=
--{
-- {1344, 806,1344, 806},
-- {1344, 806,1344, 806},
-- {1344, 806,1344, 806},
-- {1344, 806,1344, 806},
-- {1344, 806,1344, 806},
-- {1344, 806,1344, 806},
-- {1344, 806,1344, 806},
-- { 800, 449,1280, 801},
-- { 800, 525,1280, 813}
--};
--
--static const SiS310_LVDSDataStruct SiS310_LVDS1280x1024Data_1[]=
--{
-- {1048, 442,1688,1066},
-- {1048, 392,1688,1066},
-- {1048, 442,1688,1066},
-- {1048, 392,1688,1066},
-- {1048, 522,1688,1066},
-- {1208, 642,1688,1066},
-- {1432, 810,1688,1066},
-- {1688,1066,1688,1066}
--};
--
--static const SiS310_LVDSDataStruct SiS310_LVDS1280x1024Data_2[]=
--{
-- {1688,1066,1688,1066},
-- {1688,1066,1688,1066},
-- {1688,1066,1688,1066},
-- {1688,1066,1688,1066},
-- {1688,1066,1688,1066},
-- {1688,1066,1688,1066},
-- {1688,1066,1688,1066},
-- {1688,1066,1688,1066}
--};
--
--static const SiS310_LVDSDataStruct SiS310_LVDS1400x1050Data_1[]=
--{
-- { 928, 416, 1688,1066},
-- { 928, 366, 1688,1066},
-- { 928, 416, 1688,1066},
-- { 928, 366, 1688,1066},
-- { 928, 496, 1688,1066},
-- {1088, 616, 1688,1066},
-- {1312, 784, 1688,1066},
-- {1568,1040, 1688,1066},
-- {1688,1066, 1688,1066}
--};
--
--static const SiS310_LVDSDataStruct SiS310_LVDS1400x1050Data_2[]=
--{
-- {1688,1066, 1688,1066},
-- {1688,1066, 1688,1066},
-- {1688,1066, 1688,1066},
-- {1688,1066, 1688,1066},
-- {1688,1066, 1688,1066},
-- {1688,1066, 1688,1066},
-- {1688,1066, 1688,1066},
-- {1688,1066, 1688,1066},
-- {1688,1066, 1688,1066},
--};
--
--static const SiS310_LVDSDataStruct SiS310_LVDS1600x1200Data_1[]=
--{
-- {1088, 450, 2048,1250},
-- {1088, 400, 2048,1250},
-- {1088, 450, 2048,1250},
-- {1088, 400, 2048,1250},
-- {1088, 530, 2048,1250},
-- {1248, 650, 2048,1250},
-- {1472, 818, 2048,1250},
-- {1728,1066, 2048,1250},
-- {1848,1066, 2048,1250},
-- {2048,1250, 2048,1250}
--};
--
--static const SiS310_LVDSDataStruct SiS310_LVDS1600x1200Data_2[]=
--{
-- {2048,1250, 2048,1250},
-- {2048,1250, 2048,1250},
-- {2048,1250, 2048,1250},
-- {2048,1250, 2048,1250},
-- {2048,1250, 2048,1250},
-- {2048,1250, 2048,1250},
-- {2048,1250, 2048,1250},
-- {2048,1250, 2048,1250},
-- {2048,1250, 2048,1250},
-- {2048,1250, 2048,1250}
--};
--
--static const SiS310_LVDSDataStruct SiS310_LVDS1280x768Data_1[]=
--{
-- { 768, 438, 1408, 806},
-- { 768, 388, 1408, 806},
-- { 768, 438, 1408, 806},
-- { 768, 388, 1408, 806},
-- { 768, 518, 1408, 806},
-- { 928, 638, 1408, 806},
-- {1152, 806, 1408, 806},
-- {1408, 806, 1408, 806},
-- {1408, 806, 1408, 806}
--};
--
--static const SiS310_LVDSDataStruct SiS310_LVDS1280x768Data_2[]=
--{
-- {1408, 806, 1408, 806},
-- {1408, 806, 1408, 806},
-- {1408, 806, 1408, 806},
-- {1408, 806, 1408, 806},
-- {1408, 806, 1408, 806},
-- {1408, 806, 1408, 806},
-- {1408, 806, 1408, 806},
-- {1408, 806, 1408, 806},
-- {1408, 806, 1408, 806}
--};
--
--static const SiS310_LVDSDataStruct SiS310_LVDS1024x600Data_1[]=
--{
-- { 840, 604, 1344, 800},
-- { 840, 560, 1344, 800},
-- { 840, 604, 1344, 800},
-- { 840, 560, 1344, 800},
-- { 840, 689, 1344, 800},
-- {1050, 800, 1344, 800},
-- {1344, 800, 1344, 800},
-- { 800, 449, 1280, 801},
-- { 800, 525, 1280, 813}
--};
--
--static const SiS310_LVDSDataStruct SiS310_LVDS1024x600Data_2[]=
--{
-- {1344, 800, 1344, 800},
-- {1344, 800, 1344, 800},
-- {1344, 800, 1344, 800},
-- {1344, 800, 1344, 800},
-- {1344, 800, 1344, 800},
-- {1344, 800, 1344, 800},
-- {1344, 800, 1344, 800},
-- { 800, 449, 1280, 801},
-- { 800, 525, 1280, 813}
--};
--
--static const SiS310_LVDSDataStruct SiS310_LVDS1152x768Data_1[]=
--{
-- { 840, 438, 1344, 806},
-- { 840, 409, 1344, 806},
-- { 840, 438, 1344, 806},
-- { 840, 409, 1344, 806},
-- { 840, 518, 1344, 806},
-- {1050, 638, 1344, 806},
-- {1344, 806, 1344, 806},
-- { 800, 449, 1280, 801},
-- { 800, 525, 1280, 813}
--};
--
--static const SiS310_LVDSDataStruct SiS310_LVDS1152x768Data_2[]=
--{
-- {1344, 806, 1344, 806},
-- {1344, 806, 1344, 806},
-- {1344, 806, 1344, 806},
-- {1344, 806, 1344, 806},
-- {1344, 806, 1344, 806},
-- {1344, 806, 1344, 806},
-- {1344, 806, 1344, 806},
-- { 800, 449, 1280, 801},
-- { 800, 525, 1280, 813}
--};
--
--/* TW: Pass 1:1 data */
--static const SiS310_LVDSDataStruct SiS310_LVDSXXXxXXXData_1[]=
--{
-- { 800, 449, 800, 449},
-- { 800, 449, 800, 449},
-- { 900, 449, 900, 449},
-- { 900, 449, 900, 449},
-- { 800, 525, 800, 525}, /* 640x480 */
-- {1056, 628, 1056, 628}, /* 800x600 */
-- {1344, 806, 1344, 806}, /* 1024x768 */
-- {1344,1066, 1344,1066}, /* 1280x1024 */ /* INSERTED ! */
-- {1688, 806, 1688, 806}, /* 1280x768 ! */
-- /* No other panels ! */
--};
--
--static const SiS310_LVDSDataStruct SiS310_LVDS640x480Data_1[]=
--{
-- { 800, 449, 800, 449},
-- { 800, 449, 800, 449},
-- { 800, 449, 800, 449},
-- { 800, 449, 800, 449},
-- { 800, 525, 800, 525},
-- {1056, 628,1056, 628},
-- {1056, 628,1056, 628},
-- {1056, 628,1056, 628},
-- {1056, 628,1056, 628}
--};
--
--static const SiS310_LVDSDataStruct SiS310_LVDS1280x960Data_1[]=
--{
-- { 840, 438,1344, 806},
-- { 840, 409,1344, 806},
-- { 840, 438,1344, 806},
-- { 840, 409,1344, 806},
-- { 840, 518,1344, 806},
-- {1050, 638,1344, 806},
-- {1344, 806,1344, 806},
-- { 800, 449,1280, 801},
-- { 800, 525,1280, 813}
--};
--
--static const SiS310_LVDSDataStruct SiS310_LVDS1280x960Data_2[]=
--{
-- {1344, 806,1344, 806},
-- {1344, 806,1344, 806},
-- {1344, 806,1344, 806},
-- {1344, 806,1344, 806},
-- {1344, 806,1344, 806},
-- {1344, 806,1344, 806},
-- {1344, 806,1344, 806},
-- { 800, 449,1280, 801},
-- { 800, 525,1280, 813}
--};
--
--/* LCDA */
--
--static const SiS310_LVDSDataStruct SiS310_LCDA1400x1050Data_1[]=
--{ /* TW: Might be temporary (invalid) data */
-- { 928, 416, 1688,1066},
-- { 928, 366, 1688,1066},
-- {1008, 416, 1688,1066},
-- {1008, 366, 1688,1066},
-- {1200, 530, 1688,1066},
-- {1088, 616, 1688,1066},
-- {1312, 784, 1688,1066},
-- {1568,1040, 1688,1066},
-- {1688,1066, 1688,1066}
--};
--
--static const SiS310_LVDSDataStruct SiS310_LCDA1400x1050Data_2[]=
--{ /* TW: Temporary data. Not valid */
-- {1344, 806,1344, 806},
-- {1344, 806,1344, 806},
-- {1344, 806,1344, 806},
-- {1344, 806,1344, 806},
-- {1344, 806,1344, 806},
-- {1344, 806,1344, 806},
-- {1344, 806,1344, 806},
-- { 800, 449,1280, 801},
-- { 800, 525,1280, 813}
--};
--
--static const SiS310_LVDSDataStruct SiS310_LCDA1600x1200Data_1[]=
--{ /* TW: Temporary data. Not valid */
-- {1344, 806,1344, 806},
-- {1344, 806,1344, 806},
-- {1344, 806,1344, 806},
-- {1344, 806,1344, 806},
-- {1344, 806,1344, 806},
-- {1344, 806,1344, 806},
-- {1344, 806,1344, 806},
-- { 800, 449,1280, 801},
-- { 800, 525,1280, 813}
--};
--
--static const SiS310_LVDSDataStruct SiS310_LCDA1600x1200Data_2[]=
--{ /* TW: Temporary data. Not valid */
-- {0, 0, 0, 0},
-- {0, 0, 0, 0},
-- {0, 0, 0, 0},
-- {0, 0, 0, 0},
-- {0, 0, 0, 0},
-- {0, 0, 0, 0},
-- {0, 0, 0, 0},
-- {0, 0, 0, 0},
-- {0, 0, 0, 0},
-- {0, 0, 0, 0},
-- {0, 0, 0, 0},
-- {0, 0, 0, 0}
--};
--
--/* Chrontel TV */
--
--static const SiS310_LVDSDataStruct SiS310_CHTVUNTSCData[]=
--{
-- { 840, 600, 840, 600},
-- { 840, 600, 840, 600},
-- { 840, 600, 840, 600},
-- { 840, 600, 840, 600},
-- { 784, 600, 784, 600},
-- {1064, 750,1064, 750},
-- {1160, 945,1160, 945} /* TW: For Ch7019 1024 */
--};
--
--static const SiS310_LVDSDataStruct SiS310_CHTVONTSCData[]=
--{
-- { 840, 525, 840, 525},
-- { 840, 525, 840, 525},
-- { 840, 525, 840, 525},
-- { 840, 525, 840, 525},
-- { 784, 525, 784, 525},
-- {1040, 700,1040, 700},
-- {1160, 840,1160, 840} /* TW: For Ch7019 1024 */
--};
--
--static const SiS310_LVDSDataStruct SiS310_CHTVUPALData[]=
-+static const SiS310_LVDSDataStruct SiS310_CHTVUPALData[]=
- {
- {1008, 625,1008, 625},
- {1008, 625,1008, 625},
-@@ -2156,7 +1031,7 @@ static const SiS310_LVDSDataStruct SiS3
- {1008, 625,1008, 625},
- { 840, 625, 840, 625},
- { 960, 750, 960, 750},
-- {1400,1000,1400,1000} /* TW: For Ch7019 1024 */
-+ {1400,1000,1400,1000}
- };
-
- static const SiS310_LVDSDataStruct SiS310_CHTVOPALData[]=
-@@ -2167,7 +1042,7 @@ static const SiS310_LVDSDataStruct SiS3
- {1008, 625,1008, 625},
- { 840, 625, 840, 625},
- { 944, 625, 944, 625},
-- {1400, 875,1400, 875} /* TW: For Ch7019 1024 */
-+ {1400, 875,1400, 875}
- };
-
- static const SiS310_LVDSDataStruct SiS310_CHTVUPALMData[]=
-@@ -2178,7 +1053,7 @@ static const SiS310_LVDSDataStruct SiS3
- { 840, 600, 840, 600},
- { 784, 600, 784, 600},
- {1064, 750,1064, 750},
-- {1160, 945,1160, 945} /* TW: For Ch7019 1024 */
-+ {1160, 945,1160, 945}
- };
-
- static const SiS310_LVDSDataStruct SiS310_CHTVOPALMData[]=
-@@ -2189,7 +1064,7 @@ static const SiS310_LVDSDataStruct SiS3
- { 840, 525, 840, 525},
- { 784, 525, 784, 525},
- {1040, 700,1040, 700},
-- {1160, 840,1160, 840} /* TW: For Ch7019 1024 */
-+ {1160, 840,1160, 840}
- };
-
- static const SiS310_LVDSDataStruct SiS310_CHTVUPALNData[]=
-@@ -2200,7 +1075,7 @@ static const SiS310_LVDSDataStruct SiS3
- {1008, 625,1008, 625},
- { 840, 625, 840, 625},
- { 960, 750, 960, 750},
-- {1400,1000,1400,1000} /* TW: For Ch7019 1024 */
-+ {1400,1000,1400,1000}
- };
-
- static const SiS310_LVDSDataStruct SiS310_CHTVOPALNData[]=
-@@ -2211,7 +1086,7 @@ static const SiS310_LVDSDataStruct SiS3
- {1008, 625,1008, 625},
- { 840, 625, 840, 625},
- { 944, 625, 944, 625},
-- {1400, 875,1400, 875} /* TW: For Ch7019 1024 */
-+ {1400, 875,1400, 875}
- };
-
- static const SiS310_LVDSDataStruct SiS310_CHTVSOPALData[]= /* TW: (super overscan - no effect on 7019) */
-@@ -2231,7 +1106,7 @@ typedef struct _SiS310_LVDSDesStruct
- USHORT LCDVDES;
- } SiS310_LVDSDesStruct;
-
--static const SiS310_LVDSDesStruct SiS310_PanelType00_1[]=
-+static const SiS310_LVDSDesStruct SiS310_PanelType00_1[]= /* 800x600 */
- {
- { 0, 0},
- { 0, 0},
-@@ -2244,7 +1119,7 @@ static const SiS310_LVDSDesStruct SiS31
- { 0, 0}
- };
-
--static const SiS310_LVDSDesStruct SiS310_PanelType01_1[]=
-+static const SiS310_LVDSDesStruct SiS310_PanelType01_1[]= /* 1024x768 */
- {
- { 0, 0},
- { 0, 0},
-@@ -2257,7 +1132,7 @@ static const SiS310_LVDSDesStruct SiS31
- { 0, 0}
- };
-
--static const SiS310_LVDSDesStruct SiS310_PanelType02_1[]=
-+static const SiS310_LVDSDesStruct SiS310_PanelType02_1[]= /* 1280x1024 */
- {
- { 0, 0},
- { 0, 0},
-@@ -2382,33 +1257,31 @@ static const SiS310_LVDSDesStruct SiS31
- { 0, 0}
- };
-
--static const SiS310_LVDSDesStruct SiS310_PanelType0b_1[]=
--{
-- {1343, 798},
-- {1343, 794},
-- {1343, 798},
-- {1343, 794},
-- {1343, 0},
-- {1343, 0},
-- { 0, 805},
-- { 0, 794},
-- { 0, 0}
--};
--
--static const SiS310_LVDSDesStruct SiS310_PanelType0c_1[]=
-+static const SiS310_LVDSDesStruct SiS310_PanelType0b_1[]= /* 640x480_2 */
- {
-- {1343, 798},
-- {1343, 794},
-- {1343, 798},
-- {1343, 794},
-- {1343, 0},
-- {1343, 0},
-- { 0, 805},
-- { 0, 794},
-- { 0, 0}
-+ { 0, 524},
-+ { 0, 524},
-+ { 0, 524},
-+ { 0, 524},
-+ { 0, 524},
-+ { 0, 524},
-+ { 8, 524},
-+ { 0, 524}
-+};
-+
-+static const SiS310_LVDSDesStruct SiS310_PanelType0c_1[]= /* 640x480_3 */
-+{
-+ { 0, 524},
-+ { 0, 524},
-+ { 0, 524},
-+ { 0, 524},
-+ { 0, 524},
-+ { 0, 524},
-+ { 8, 524},
-+ { 0, 524}
- };
-
--static const SiS310_LVDSDesStruct SiS310_PanelType0d_1[]=
-+static const SiS310_LVDSDesStruct SiS310_PanelType0d_1[]=
- {
- {1343, 798},
- {1343, 794},
-@@ -2604,7 +1477,7 @@ static const SiS310_LVDSDesStruct SiS31
- { 0, 0}
- };
-
--static const SiS310_LVDSDesStruct SiS310_PanelType0b_2[]=
-+static const SiS310_LVDSDesStruct SiS310_PanelType0b_2[]= /* 640x480_2 */
- {
- {1152, 622},
- {1152, 597},
-@@ -2617,7 +1490,7 @@ static const SiS310_LVDSDesStruct SiS31
- { 0, 0}
- };
-
--static const SiS310_LVDSDesStruct SiS310_PanelType0c_2[]=
-+static const SiS310_LVDSDesStruct SiS310_PanelType0c_2[]= /* 640x480_3 */
- {
- {1152, 622},
- {1152, 597},
-@@ -2669,184 +1542,6 @@ static const SiS310_LVDSDesStruct SiS31
- { 0, 0}
- };
-
--static const SiS310_LVDSDesStruct SiS310_PanelTypeNS_1[]=
--{
-- { 8, 0},
-- { 8, 0},
-- { 8, 0},
-- { 8, 0},
-- { 8, 0},
-- { 0, 0},
-- { 0, 0},
-- { 0, 0},
-- { 0, 806},
-- { 0, 0 }
--};
--
--static const SiS310_LVDSDesStruct SiS310_PanelTypeNS_2[] =
--{
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0}
--};
--
--static const SiS310_LVDSDesStruct SiS310_PanelType1076_1[]=
--{ /* 1024x768 - Checked (1.10.6s) */
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0}
--};
--
--static const SiS310_LVDSDesStruct SiS310_PanelType1076_2[]=
--{ /* 1024x768 - Checked (1.10.6s) */
-- { 1184, 622 },
-- { 1184, 597 },
-- { 1184, 622 },
-- { 1184, 597 },
-- { 1152, 622 },
-- { 1232, 722 },
-- { 0, 0 },
-- { 0, 794 },
-- { 0, 0 }
--};
--
--static const SiS310_LVDSDesStruct SiS310_PanelType1210_1[]=
--{ /* 1280x1024 - Checked (1.10.6s) */
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0}
--};
--
--static const SiS310_LVDSDesStruct SiS310_PanelType1210_2[]=
--{ /* 1280x1024 - Checked (1.10.6s) */
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0}
--};
--
--static const SiS310_LVDSDesStruct SiS310_PanelType1296_1[]=
--{ /* 1400x1050 - Checked (1.10.6s) */
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0}
--};
--
--static const SiS310_LVDSDesStruct SiS310_PanelType1296_2[]=
--{ /* 1400x1050 - Checked (1.10.6s) - looks heavily invalid */
-- { 808 , 740},
-- { 0 , 715},
-- { 632 , 740},
-- { 632 , 715},
-- { 1307, 780},
-- { 1387,1157},
-- { 1499, 924},
-- { 1627,1052},
-- { 0 , 0}
--};
--
--static const SiS310_LVDSDesStruct SiS310_PanelType1600_1[]=
--{ /* 1600x1200 - Checked (1.10.6s) */
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0}
--};
--
--static const SiS310_LVDSDesStruct SiS310_PanelType1600_2[]=
--{ /* 1600x1200 - Checked (1.10.6s) - looks heavily invalid, not copied */
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0},
-- { 0 , 0}
--};
--
--static const SiS310_LVDSDesStruct SiS310_CHTVUNTSCDesData[]=
--{
-- { 0, 0},
-- { 0, 0},
-- { 0, 0},
-- { 0, 0},
-- { 0, 0},
-- { 0, 0},
-- { 0, 0}
--};
--
--static const SiS310_LVDSDesStruct SiS310_CHTVONTSCDesData[]=
--{
-- { 0, 0},
-- { 0, 0},
-- { 0, 0},
-- { 0, 0},
-- { 0, 0},
-- { 0, 0},
-- { 0, 0}
--};
--
--static const SiS310_LVDSDesStruct SiS310_CHTVUPALDesData[]=
--{
-- {256, 0},
-- {256, 0},
-- {256, 0},
-- {256, 0},
-- { 0, 0},
-- { 0, 0},
-- { 0, 0}
--};
--
--static const SiS310_LVDSDesStruct SiS310_CHTVOPALDesData[]=
--{
-- {256, 0},
-- {256, 0},
-- {256, 0},
-- {256, 0},
-- { 0, 0},
-- { 0, 0},
-- { 0, 0}
--};
--
- typedef struct _SiS310_Part2PortTblStruct
- {
- UCHAR CR[12];
-@@ -2866,16 +1561,15 @@ static const SiS310_Part2PortTblStruct S
- };
-
- static const SiS310_Part2PortTblStruct SiS310_CRT2Part2_1280x1024_1[] =
--{ /* TW: Temporary data, invalid */
-- {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x42}},
-- {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x42}},
-- {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x42}},
-- {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x42}},
-- {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x32}},
-- {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x32}},
-- {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x32}},
-- {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x32}},
-- {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x42}}
-+{ /* TW: BIOS data invalid, last row taken from _3 */
-+ {{0x25,0x12,0x51,0x6E,0x48,0x99,0x35,0x89,0x47,0xC1,0x49,0x33}},
-+ {{0x2C,0x12,0x38,0x55,0x2F,0x99,0x35,0x89,0x47,0xC1,0x49,0x33}},
-+ {{0x25,0x12,0x51,0x6E,0x48,0x99,0x35,0x89,0x47,0xC1,0x49,0x33}},
-+ {{0x2C,0x12,0x38,0x55,0x2F,0xC1,0x35,0xB1,0x47,0xE9,0x71,0x33}},
-+ {{0x2D,0x12,0x79,0x96,0x70,0x99,0x35,0x89,0x47,0xC1,0x49,0x33}},
-+ {{0x29,0x12,0xB5,0xD2,0xAC,0xE9,0x35,0xD9,0x47,0x11,0x99,0x33}},
-+ {{0x36,0x13,0x02,0x25,0xFF,0x03,0x45,0x09,0x07,0xF9,0x00,0x24}},
-+ {{0x47,0x1C,0x14,0x29,0xFF,0xBD,0x23,0x0A,0x07,0x23,0x8A,0x12}}
- };
-
- static const SiS310_Part2PortTblStruct SiS310_CRT2Part2_1400x1050_1[] =
-@@ -2912,7 +1606,8 @@ static const SiS310_Part2PortTblStruct S
- {{0x2c,0x12,0x38,0x55,0x2f,0xc1,0x35,0xb1,0x47,0xe9,0x71,0x33}},
- {{0x2d,0x12,0x79,0x96,0x70,0x99,0x35,0x89,0x47,0xc1,0x49,0x33}},
- {{0x29,0x12,0xb5,0xd2,0xac,0xe9,0x35,0xd9,0x47,0x11,0x99,0x33}},
-- {{0x36,0x13,0x13,0x25,0xff,0x59,0x45,0x09,0x07,0xf9,0x09,0x24}},
-+ {{0x36,0x13,0x13,0x25,0xff,0x59,0x45,0x09,0x07,0xf9,0x09,0x24}}, /* old */
-+/* 0x36,0x13,0x02,0x25,0xff,0x03,0x45,0x09,0x07,0xf9,0x00,0x24 new? */
- {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}},
- {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}}
- };
-@@ -2959,6 +1654,7 @@ static const SiS310_Part2PortTblStruct S
-
- static const SiS310_Part2PortTblStruct SiS310_CRT2Part2_1024x768_3[] =
- { /* TW: Data from 650/301LVx 1.10.6s */
-+#if 0
- {{0x25,0x13,0xc9,0x25,0xff,0x59,0x45,0x09,0x07,0xf9,0x09,0x24}},
- {{0x2c,0x13,0x9a,0x25,0xff,0x59,0x45,0x09,0x07,0xf9,0x09,0x24}},
- {{0x25,0x13,0xc9,0x24,0xff,0x59,0x45,0x09,0x07,0xf9,0x09,0x24}},
-@@ -2968,56 +1664,55 @@ static const SiS310_Part2PortTblStruct S
- {{0x36,0x13,0x13,0x25,0xff,0x59,0x45,0x09,0x07,0xf9,0x09,0x24}},
- {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}},
- {{0x25,0x13,0xc9,0x25,0xff,0xf9,0x45,0x09,0x07,0xf9,0x09,0x24}}
--#if 0 /* TW: Data from 650/301LV */
-- {{0x25,0x12,0xc9,0xdc,0xb6,0x59,0x45,0x09,0x07,0xf9,0x09,0x24}},
-- {{0x2c,0x12,0x9a,0xae,0x88,0x59,0x45,0x09,0x07,0xf9,0x09,0x24}},
-- {{0x25,0x12,0xc9,0xdc,0xb6,0x59,0x45,0x09,0x07,0xf9,0x09,0x24}},
-- {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}},
-- {{0x38,0x13,0x13,0x25,0xff,0x59,0x45,0x09,0x07,0xf9,0x09,0x24}},
-- {{0x38,0x18,0x16,0x00,0x00,0x59,0x45,0x09,0x07,0xf9,0x09,0x24}},
-- {{0x36,0x13,0x13,0x25,0xff,0x59,0x45,0x09,0x07,0xf9,0x09,0x24}},
-- {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}}
--#endif
-+#endif /* Data from my 301LV */
-+ {{0x36,0x13,0x02,0x25,0xff,0x21,0x45,0x09,0x07,0x88,0x09,0x24}}, /* @@@@@ TEST */
-+ {{0x36,0x13,0x02,0x25,0xff,0x21,0x45,0x09,0x07,0x88,0x09,0x24}},
-+ {{0x36,0x13,0x02,0x25,0xff,0x21,0x45,0x09,0x07,0x88,0x09,0x24}},
-+ {{0x36,0x13,0x02,0x25,0xff,0x21,0x45,0x09,0x07,0x88,0x09,0x24}},
-+ {{0x36,0x13,0x02,0x25,0xff,0x21,0x45,0x09,0x07,0x88,0x09,0x24}},
-+ {{0x36,0x13,0x02,0x25,0xff,0x21,0x45,0x09,0x07,0x88,0x09,0x24}},
-+ {{0x36,0x13,0x02,0x25,0xff,0x21,0x45,0x09,0x07,0x88,0x09,0x24}},
-+ {{0x36,0x13,0x02,0x25,0xff,0x21,0x45,0x09,0x07,0x88,0x09,0x24}},
-+ {{0x36,0x13,0x02,0x25,0xff,0x21,0x45,0x09,0x07,0x88,0x09,0x24}}
- };
-
- /* 1 2 4 5 6 1c 1d 1f 20 21 23 25 */
- static const SiS310_Part2PortTblStruct SiS310_CRT2Part2_1280x1024_3[] =
--{ /* TW: Temporary data, invalid */
-- {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x42}},
-- {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x42}},
-- {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x42}},
-- {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x42}},
-- {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x32}},
-- {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x32}},
-- {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x32}},
-- {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x32}},
-- {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x32}}
-+{
-+ {{0x31,0x1B,0xC4,0xDA,0xB0,0xBD,0x23,0x0A,0x07,0x23,0x8A,0x12}},
-+ {{0x34,0x1B,0x9F,0xC0,0x80,0xB8,0x23,0x0A,0x07,0x14,0x8A,0x12}},
-+ {{0x3E,0x1B,0xCF,0xF0,0xB0,0xB8,0x23,0x0A,0x07,0x14,0x8A,0x12}},
-+ {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}},
-+ {{0x48,0x1C,0x15,0x29,0xFF,0xBD,0x23,0x0A,0x07,0x23,0x8A,0x12}},
-+ {{0x48,0x1C,0x15,0x29,0xFF,0xBD,0x23,0x0A,0x07,0x23,0x8A,0x12}},
-+ {{0x48,0x1C,0x15,0x29,0xFF,0xBD,0x23,0x0A,0x07,0x23,0x8A,0x12}},
-+ {{0x47,0x1C,0x14,0x29,0xFF,0xBD,0x23,0x0A,0x07,0x23,0x8A,0x12}}
- };
-
- static const SiS310_Part2PortTblStruct SiS310_CRT2Part2_1400x1050_3[] =
- {
-- {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x42}},
-- {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x42}},
-- {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x42}},
-- {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x42}},
-- {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x32}},
-- {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x32}},
-- {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x32}},
-- {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x32}},
-- {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x32}}
-+ {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x42}},
-+ {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x42}},
-+ {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x42}},
-+ {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x42}},
-+ {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x32}},
-+ {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x32}},
-+ {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x32}},
-+ {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x32}},
-+ {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x32}}
- };
-
- static const SiS310_Part2PortTblStruct SiS310_CRT2Part2_1600x1200_3[] =
- { /* TW: Temporary data, invalid */
-- {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x42}},
-- {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x42}},
-- {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x42}},
-- {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x42}},
-- {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x32}},
-- {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x32}},
-- {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x32}},
-- {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x32}},
-- {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x32}}
-+ {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x42}},
-+ {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x42}},
-+ {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x42}},
-+ {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x42}},
-+ {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x32}},
-+ {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x32}},
-+ {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x32}},
-+ {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x32}},
-+ {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x32}}
- };
-
- typedef struct _SiS310_LCDACRT1DataStruct
-@@ -3054,7 +1749,7 @@ static const SiS310_LCDACRT1DataStruct
- };
-
- static const SiS310_LCDACRT1DataStruct SiS310_LCDACRT11024x768_1[]=
--{ /* TW: Checked (1.10.6s) */
-+{
- {{0x73,0x4f,0x4f,0x97,0x55,0x86,0xc4,0x1f,
- 0x92,0x89,0x8f,0x8f,0xb5,0x30,0x00,0x05,
- 0x00}},
-@@ -3079,7 +1774,7 @@ static const SiS310_LCDACRT1DataStruct
- };
-
- static const SiS310_LCDACRT1DataStruct SiS310_LCDACRT11280x1024_1[]=
--{ /* Checked (1.10.6s) */
-+{
- {{0x7e,0x4f,0x4f,0x82,0x58,0x06,0xb8,0x1f,
- 0x90,0x84,0x8f,0x8f,0xb9,0x30,0x00,0x06,
- 0x00}},
-@@ -3107,7 +1802,7 @@ static const SiS310_LCDACRT1DataStruct
- };
-
- static const SiS310_LCDACRT1DataStruct SiS310_LCDACRT11400x1050_1[]=
--{ /* Checked (1.10.6s) */
-+{
- {{0x6f,0x4f,0x4f,0x93,0x54,0x82,0x9e,0x1f,
- 0x93,0x86,0x8f,0x8f,0x9f,0x30,0x00,0x05,
- 0x00}},
-@@ -3200,7 +1895,7 @@ static const SiS310_LCDACRT1DataStruct
- };
-
- static const SiS310_LCDACRT1DataStruct SiS310_LCDACRT11024x768_1_H[]=
--{ /* TW: Checked (1.10.6s) */
-+{
- {{0x4b,0x27,0x27,0x8f,0x2b,0x03,0xc4,0x1f,
- 0x92,0x89,0x8f,0x8f,0xb5,0x30,0x00,0x44,
- 0x00}},
-@@ -3225,7 +1920,7 @@ static const SiS310_LCDACRT1DataStruct
- };
-
- static const SiS310_LCDACRT1DataStruct SiS310_LCDACRT11280x1024_1_H[]=
--{ /* Checked (1.10.6s) */
-+{
- {{0x56,0x27,0x27,0x9a,0x30,0x1e,0xb8,0x1f,
- 0x90,0x84,0x8f,0x8f,0xb9,0x30,0x00,0x05,
- 0x00}},
-@@ -3250,7 +1945,7 @@ static const SiS310_LCDACRT1DataStruct
- };
-
- static const SiS310_LCDACRT1DataStruct SiS310_LCDACRT11400x1050_1_H[]=
--{ /* Checked (1.10.6s) */
-+{
- {{0x47,0x27,0x27,0x8b,0x2c,0x1a,0x9e,0x1f,
- 0x93,0x86,0x8f,0x8f,0x9f,0x30,0x00,0x05,
- 0x00}},
-@@ -3343,7 +2038,7 @@ static const SiS310_LCDACRT1DataStruct
- };
-
- static const SiS310_LCDACRT1DataStruct SiS310_LCDACRT11024x768_2[]=
--{ /* Checked (1.10.6s) */
-+{
- {{0xa3,0x4f,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
- 0x4a,0x80,0x8f,0x8f,0x25,0x30,0x00,0x06,
- 0x00}},
-@@ -3368,7 +2063,7 @@ static const SiS310_LCDACRT1DataStruct
- };
-
- static const SiS310_LCDACRT1DataStruct SiS310_LCDACRT11280x1024_2[]=
--{ /* Checked (1.10.6s) */
-+{
- {{0xa3,0x4f,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
- 0x4a,0x80,0x8f,0x8f,0x25,0x30,0x00,0x06,
- 0x00}},
-@@ -3393,7 +2088,7 @@ static const SiS310_LCDACRT1DataStruct
- };
-
- static const SiS310_LCDACRT1DataStruct SiS310_LCDACRT11400x1050_2[]=
--{ /* Checked (1.10.6s) */
-+{
- {{0xce,0x4f,0x4f,0x92,0x8c,0x1a,0x28,0x9a,
- 0xdb,0x8f,0x8f,0x8f,0x29,0x21,0x00,0x03,
- 0x00}},
-@@ -3486,7 +2181,7 @@ static const SiS310_LCDACRT1DataStruct
- };
-
- static const SiS310_LCDACRT1DataStruct SiS310_LCDACRT11024x768_2_H[]=
--{ /* Checked (1.10.6s) */
-+{
- {{0x4f,0x27,0x27,0x93,0x39,0x01,0x24,0xbb,
- 0x4a,0x80,0x8f,0x8f,0x25,0x30,0x00,0x01,
- 0x00 }},
-@@ -3511,7 +2206,7 @@ static const SiS310_LCDACRT1DataStruct
- };
-
- static const SiS310_LCDACRT1DataStruct SiS310_LCDACRT11280x1024_2_H[]=
--{ /* Checked (1.10.6s) */
-+{
- {{0x4f,0x27,0x27,0x93,0x39,0x81,0x24,0xbb,
- 0x4a,0x80,0x8f,0x8f,0x25,0x30,0x00,0x01,
- 0x00 }},
-@@ -3536,7 +2231,7 @@ static const SiS310_LCDACRT1DataStruct
- };
-
- static const SiS310_LCDACRT1DataStruct SiS310_LCDACRT11400x1050_2_H[]=
--{ /* Checked (1.10.6s) */
-+{
- {{0xa6,0x27,0x27,0x8a,0x64,0x92,0x28,0x9a,
- 0xdb,0x8f,0x8f,0x8f,0x29,0x21,0x00,0x06,
- 0x00}},
-@@ -3605,32 +2300,7 @@ typedef struct _SiS310_LVDSCRT1DataStruc
- UCHAR CR[15];
- } SiS310_LVDSCRT1DataStruct;
-
--static const SiS310_LVDSCRT1DataStruct SiS310_LVDSCRT1320x480_1[] =
--{
-- {{0x65,0x4f,0x89,0x56,0x83,0xaa,0x1f,
-- 0x90,0x85,0x8f,0xab,0x30,0x00,0x05,
-- 0x00 }},
-- {{0x65,0x4f,0x89,0x56,0x83,0x83,0x1f,
-- 0x5e,0x83,0x5d,0x79,0x10,0x00,0x05,
-- 0x00 }},
-- {{0x65,0x4f,0x89,0x54,0x9f,0xc4,0x1f,
-- 0x92,0x89,0x8f,0xb5,0x30,0x00,0x01,
-- 0x00 }},
-- {{0x65,0x4f,0x89,0x56,0x83,0x83,0x1f,
-- 0x5e,0x83,0x5d,0x79,0x10,0x00,0x05,
-- 0x00 }},
-- {{0x65,0x4f,0x89,0x56,0x83,0x04,0x3e,
-- 0xe0,0x85,0xdf,0xfb,0x10,0x00,0x05,
-- 0x00 }},
-- {{0x7f,0x63,0x83,0x6c,0x1c,0x72,0xf0,
-- 0x58,0x8c,0x57,0x73,0x20,0x00,0x06,
-- 0x01 }},
-- {{0x2d,0x27,0x90,0x2c,0x80,0x0b,0x3e,
-- 0xe9,0x8b,0xe7,0x04,0x00,0x00,0x00,
-- 0x00 }}
--};
--
--static const SiS310_LVDSCRT1DataStruct SiS310_LVDSCRT1800x600_1[] =
-+static const SiS310_LVDSCRT1DataStruct SiS310_LVDSCRT1800x600_1[] =
- {
- {{0x6b,0x4f,0x8f,0x55,0x85,0xaa,0x1f,
- 0x90,0x85,0x8f,0xab,0x30,0x00,0x05,
-@@ -3924,63 +2594,7 @@ static const SiS310_LVDSCRT1DataStruct
- 0x01}}
- };
-
--static const SiS310_LVDSCRT1DataStruct SiS310_LVDSCRT1XXXxXXX_1[] =
--{
-- {{0x5f,0x4f,0x82,0x55,0x81,0xbf,0x1f,
-- 0x9c,0x8e,0x96,0xb9,0x30,0x00,0x05,
-- 0x00}},
-- {{0x5f,0x4f,0x82,0x55,0x81,0xbf,0x1f,
-- 0x9c,0x8e,0x96,0xb9,0x30,0x00,0x05,
-- 0x00}},
-- {{0x5f,0x4f,0x82,0x55,0x81,0xbf,0x1f,
-- 0x9c,0x8e,0x96,0xb9,0x30,0x00,0x05,
-- 0x00}},
-- {{0x5f,0x4f,0x82,0x55,0x81,0xbf,0x1f,
-- 0x9c,0x8e,0x96,0xb9,0x30,0x00,0x05,
-- 0x00}},
-- {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
-- 0xe9,0x8b,0xe7,0x04,0x00,0x00,0x05,
-- 0x00}},
-- {{0x7f,0x63,0x83,0x6c,0x1c,0x72,0xf0,
-- 0x58,0x8c,0x57,0x73,0x20,0x00,0x06,
-- 0x01}},
-- {{0xa3,0x7f,0x87,0x86,0x97,0x24,0xf5,
-- 0x02,0x88,0xff,0x25,0x10,0x00,0x02,
-- 0x01}},
-- {{0xce,0x9f,0x92,0xa8,0x14,0x28,0x5a,
-- 0x00,0x84,0xff,0x29,0x09,0x00,0x07,
-- 0x01}},
-- {{0xce,0x9f,0x92,0xa9,0x17,0x24,0xf5,
-- 0x02,0x88,0xff,0x25,0x10,0x00,0x07,
-- 0x01}}
--};
--
--static const SiS310_LVDSCRT1DataStruct SiS310_LVDSCRT1XXXxXXX_1_H[] =
--{
-- {{0x38,0x27,0x9c,0x2c,0x80,0xbf,0x1f,
-- 0x9c,0x8e,0x96,0xb9,0x30,0x00,0x00,
-- 0x00}},
-- {{0x38,0x27,0x9c,0x2c,0x80,0xbf,0x1f,
-- 0x9c,0x8e,0x96,0xb9,0x30,0x00,0x00,
-- 0x00}},
-- {{0x38,0x27,0x9c,0x2c,0x80,0xbf,0x1f,
-- 0x9c,0x8e,0x96,0xb9,0x30,0x00,0x00,
-- 0x00}},
-- {{0x38,0x27,0x9c,0x2c,0x80,0xbf,0x1f,
-- 0x9c,0x8e,0x96,0xb9,0x30,0x00,0x00,
-- 0x00}},
-- {{0x38,0x27,0x9c,0x2c,0x80,0x0b,0x3e,
-- 0xe9,0x8b,0xe7,0x04,0x00,0x00,0x00,
-- 0x00}},
-- {{0x4d,0x31,0x91,0x3b,0x03,0x72,0xf0,
-- 0x58,0x8c,0x57,0x73,0x20,0x00,0x01,
-- 0x01}},
-- {{0x63,0x3f,0x87,0x4a,0x92,0x24,0xf5,
-- 0x02,0x88,0xff,0x25,0x10,0x00,0x01,
-- 0x01}}
--};
--
--static const SiS310_LVDSCRT1DataStruct SiS310_LVDSCRT11400x1050_1[] =
-+static const SiS310_LVDSCRT1DataStruct SiS310_LVDSCRT11400x1050_1[] =
- {
- {{0x6f,0x4f,0x93,0x54,0x82,0x9e,0x1f,
- 0x8f,0x81,0x8f,0x9f,0x30,0x00,0x05,
-@@ -4220,332 +2834,8 @@ static const SiS310_LVDSCRT1DataStruct
- #endif
- };
-
--static const SiS310_LVDSCRT1DataStruct SiS310_LVDSCRT11280x768_1[] =
--{
-- {{0x5b,0x4f,0x9f,0x55,0x19,0xb4,0x1f,
-- 0x9c,0x8e,0x8f,0xb5,0x10,0x00,0x01,
-- 0x00}},
-- {{0x5b,0x4f,0x9f,0x55,0x19,0x82,0x1f,
-- 0x6a,0x8c,0x5d,0x83,0x30,0x00,0x01,
-- 0x00}},
-- {{0x5b,0x4f,0x9f,0x55,0x19,0xb4,0x1f,
-- 0x9c,0x8e,0x8f,0xb5,0x10,0x00,0x01,
-- 0x00}},
-- {{0x5b,0x4f,0x9f,0x55,0x19,0x82,0x1f,
-- 0x6a,0x8c,0x5d,0x83,0x30,0x00,0x01,
-- 0x00}},
-- {{0x5b,0x4f,0x9f,0x55,0x19,0x04,0x3e,
-- 0xec,0x8e,0xdf,0x05,0x20,0x00,0x01,
-- 0x00}},
-- {{0x6f,0x63,0x93,0x69,0x8d,0x7c,0xf0,
-- 0x64,0x86,0x57,0x7d,0x20,0x00,0x05,
-- 0x01}},
-- {{0x8b,0x7f,0x8f,0x85,0x09,0x24,0xf5,
-- 0x0c,0x8e,0xff,0x25,0x30,0x00,0x02,
-- 0x01}},
-- {{0xab,0x9f,0x8f,0xa5,0x89,0x24,0xf5,
-- 0x0c,0x8e,0xff,0x25,0x30,0x00,0x06,
-- 0x01}},
-- {{0xab,0x9f,0x8f,0xa5,0x89,0x24,0xf5,
-- 0x0c,0x8e,0xff,0x25,0x30,0x00,0x06,
-- 0x01}}
--};
--
--static const SiS310_LVDSCRT1DataStruct SiS310_LVDSCRT11280x768_1_H[] =
--{
-- {{0x47,0x27,0x8b,0x2c,0x1a,0x9e,0x1f,
-- 0x93,0x86,0x8f,0x9f,0x30,0x00,0x05,
-- 0x00}},
-- {{0x47,0x27,0x8b,0x2c,0x1a,0x6c,0x1f,
-- 0x60,0x84,0x5d,0x6d,0x10,0x00,0x05,
-- 0x00}},
-- {{0x47,0x27,0x8b,0x30,0x1e,0x9e,0x1f,
-- 0x92,0x86,0x8f,0x9f,0x30,0x00,0x05,
-- 0x00}},
-- {{0x47,0x27,0x8b,0x2c,0x1a,0x6c,0x1f,
-- 0x60,0x84,0x5d,0x6d,0x10,0x00,0x05,
-- 0x00}},
-- {{0x47,0x27,0x8b,0x2c,0x1a,0xee,0x1f,
-- 0xe2,0x86,0xdf,0xef,0x10,0x00,0x05,
-- 0x00}},
-- {{0x51,0x31,0x95,0x36,0x04,0x66,0xf0,
-- 0x5a,0x8e,0x57,0x67,0x20,0x00,0x01,
-- 0x01}},
-- {{0x5f,0x3f,0x83,0x44,0x92,0x0e,0xf5,
-- 0x02,0x86,0xff,0x0f,0x10,0x00,0x01,
-- 0x01}},
-- {{0x6f,0x4f,0x93,0x54,0x82,0x0e,0x5a,
-- 0x02,0x86,0xff,0x0f,0x09,0x00,0x05,
-- 0x01}},
-- {{0x6f,0x4f,0x93,0x54,0x82,0x0e,0x5a,
-- 0x02,0x86,0xff,0x0f,0x09,0x00,0x05,
-- 0x01}}
--};
--
--static const SiS310_LVDSCRT1DataStruct SiS310_LVDSCRT11280x768_2[] =
-+static const SiS310_LVDSCRT1DataStruct SiS310_LVDSCRT11600x1200_1[] =
- {
-- {{0xab,0x60,0x9f,0x80,0x04,0x24,0xbb,
-- 0x54,0x86,0xdb,0xda,0x00,0x00,0x02,
-- 0x00}},
-- {{0xab,0x60,0x9f,0x80,0x04,0x24,0xbb,
-- 0x3b,0x8d,0xc2,0xc1,0x00,0x00,0x02,
-- 0x00}},
-- {{0xab,0x60,0x9f,0x80,0x04,0x24,0xbb,
-- 0x54,0x86,0xdb,0xda,0x00,0x00,0x02,
-- 0x00}},
-- {{0xab,0x60,0x9f,0x80,0x04,0x24,0xbb,
-- 0x3b,0x8d,0xc2,0xc1,0x00,0x00,0x02,
-- 0x00}},
-- {{0xab,0x60,0x9f,0x80,0x04,0x24,0xb3,
-- 0x7c,0x8e,0x03,0x02,0x10,0x00,0x02,
-- 0x01}},
-- {{0xab,0x63,0x8f,0x8a,0x8e,0x24,0xf1,
-- 0xb6,0x88,0x57,0x25,0x10,0x00,0x02,
-- 0x01}},
-- {{0xab,0x7f,0x8f,0x98,0x9c,0x24,0xf5,
-- 0x0a,0x8c,0xff,0x25,0x30,0x00,0x02,
-- 0x01}},
-- {{0xab,0x9f,0x8f,0xa8,0x8c,0x24,0xf5,
-- 0x0a,0x8c,0xff,0x25,0x30,0x00,0x06,
-- 0x01}},
-- {{0xab,0x9f,0x8f,0xa8,0x8c,0x24,0xf5,
-- 0x0a,0x8c,0xff,0x25,0x30,0x00,0x06,
-- 0x01}}
--};
--
--static const SiS310_LVDSCRT1DataStruct SiS310_LVDSCRT11280x768_2_H[] =
--{
-- {{0x83,0x38,0x97,0x58,0x9c,0x24,0xbb,
-- 0x54,0x86,0xdb,0xda,0x00,0x00,0x01,
-- 0x00}},
-- {{0x83,0x38,0x97,0x58,0x9c,0x24,0xbb,
-- 0x3b,0x8d,0xc2,0xc1,0x00,0x00,0x01,
-- 0x00}},
-- {{0x83,0x38,0x97,0x58,0x9c,0x24,0xbb,
-- 0x54,0x86,0xdb,0xda,0x00,0x00,0x01,
-- 0x00}},
-- {{0x83,0x38,0x97,0x58,0x9c,0x24,0xbb,
-- 0x3b,0x8d,0xc2,0xc1,0x00,0x00,0x01,
-- 0x00}},
-- {{0x83,0x38,0x97,0x58,0x9c,0x24,0xb3,
-- 0x7c,0x8e,0x03,0x02,0x10,0x00,0x01,
-- 0x01}},
-- {{0x79,0x31,0x9d,0x58,0x9c,0x24,0xf1,
-- 0xb6,0x88,0x57,0x25,0x10,0x00,0x01,
-- 0x01}},
-- {{0x6b,0x3f,0x8f,0x58,0x9c,0x24,0xf5,
-- 0x0a,0x8c,0xff,0x25,0x30,0x00,0x01,
-- 0x01}},
-- {{0xab,0x9f,0x8f,0xa8,0x8c,0x24,0xf5,
-- 0x0a,0x8c,0xff,0x25,0x30,0x00,0x06,
-- 0x01}},
-- {{0xab,0x9f,0x8f,0xa8,0x8c,0x24,0xf5,
-- 0x0a,0x8c,0xff,0x25,0x30,0x00,0x06,
-- 0x01}}
--};
--
--static const SiS310_LVDSCRT1DataStruct SiS310_LVDSCRT11024x600_1[] =
--{
-- {{0x64,0x4f,0x88,0x54,0x9f,0x5a,0x3e,
-- 0xe8,0x8f,0x8f,0x5b,0x00,0x00,0x01,
-- 0x00}},
-- {{0x64,0x4f,0x88,0x54,0x9f,0x2e,0x3e,
-- 0xb9,0x80,0x5d,0x2f,0x00,0x00,0x01,
-- 0x00}},
-- {{0x64,0x4f,0x88,0x54,0x9f,0x5a,0x3e,
-- 0xe8,0x8f,0x8f,0x5b,0x00,0x00,0x01,
-- 0x00}},
-- {{0x64,0x4f,0x88,0x54,0x9f,0x2e,0x3e,
-- 0xb9,0x80,0x5d,0x2f,0x00,0x00,0x01,
-- 0x00}},
-- {{0x64,0x4f,0x88,0x54,0x9f,0xaf,0xba,
-- 0x3b,0x82,0xdf,0xb0,0x00,0x00,0x01,
-- 0x00}},
-- {{0x7e,0x63,0x82,0x68,0x15,0x1e,0xf1,
-- 0xae,0x85,0x57,0x1f,0x30,0x00,0x26,
-- 0x01}},
-- {{0xa3,0x7f,0x87,0x86,0x97,0x1e,0xf1,
-- 0xae,0x85,0x57,0x1f,0x30,0x00,0x02,
-- 0x01}}
--};
--
--static const SiS310_LVDSCRT1DataStruct SiS310_LVDSCRT11024x600_1_H[] =
--{
-- {{0x2f,0x27,0x93,0x2b,0x90,0xc4,0x1f,
-- 0x92,0x89,0x8f,0xb5,0x30,0x00,0x44,
-- 0x00}},
-- {{0x2f,0x27,0x93,0x2b,0x90,0x97,0x1f,
-- 0x60,0x87,0x5d,0x83,0x10,0x00,0x44,
-- 0x00}},
-- {{0x2f,0x27,0x93,0x2b,0x90,0xc4,0x1f,
-- 0x92,0x89,0x8f,0xb5,0x30,0x00,0x44,
-- 0x00}},
-- {{0x2f,0x27,0x93,0x2b,0x90,0x97,0x1f,
-- 0x60,0x87,0x5d,0x83,0x10,0x00,0x44,
-- 0x00}},
-- {{0x2f,0x27,0x93,0x2b,0x90,0x04,0x3e,
-- 0xe2,0x89,0xdf,0x05,0x00,0x00,0x44,
-- 0x00}},
-- {{0x3c,0x31,0x80,0x35,0x1c,0x7c,0xf0,
-- 0x5a,0x8f,0x57,0x7d,0x20,0x00,0x55,
-- 0x01}},
-- {{0x4f,0x3f,0x93,0x45,0x0d,0x24,0xf5,
-- 0x02,0x88,0xff,0x25,0x10,0x00,0x01,
-- 0x01}}
--};
--
--static const SiS310_LVDSCRT1DataStruct SiS310_LVDSCRT11024x600_2[] =
--{
-- {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
-- 0x4a,0x80,0x8f,0x25,0x30,0x00,0x06,
-- 0x00}},
-- {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
-- 0x31,0x87,0x5d,0x25,0x30,0x00,0x06,
-- 0x00}},
-- {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
-- 0x4a,0x80,0x8f,0x25,0x30,0x00,0x06,
-- 0x00}},
-- {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
-- 0x31,0x87,0x5d,0x25,0x30,0x00,0x06,
-- 0x00}},
-- {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
-- 0x72,0x88,0xdf,0x25,0x30,0x00,0x06,
-- 0x00}},
-- {{0xa3,0x63,0x87,0x78,0x89,0x24,0xf1,
-- 0xae,0x84,0x57,0x25,0x30,0x00,0x02,
-- 0x01}},
-- {{0xa3,0x7f,0x87,0x86,0x97,0x24,0xf5,
-- 0x02,0x88,0xff,0x25,0x10,0x00,0x02,
-- 0x01}}
--};
--
--static const SiS310_LVDSCRT1DataStruct SiS310_LVDSCRT11024x600_2_H[] =
--{
-- {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
-- 0x4a,0x80,0x8f,0x25,0x30,0x00,0x01,
-- 0x00}},
-- {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
-- 0x31,0x87,0x5d,0x25,0x30,0x00,0x01,
-- 0x00}},
-- {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
-- 0x4a,0x80,0x8f,0x25,0x30,0x00,0x01,
-- 0x00}},
-- {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
-- 0x31,0x87,0x5d,0x25,0x30,0x00,0x01,
-- 0x00}},
-- {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
-- 0x72,0x88,0xdf,0x25,0x30,0x00,0x01,
-- 0x00}},
-- {{0x4f,0x31,0x93,0x3e,0x06,0x24,0xf1,
-- 0xae,0x84,0x57,0x25,0x30,0x00,0x01,
-- 0x01}},
-- {{0x4f,0x3f,0x93,0x45,0x0d,0x24,0xf5,
-- 0x02,0x88,0xff,0x25,0x10,0x00,0x01,
-- 0x01}}
--};
--
--static const SiS310_LVDSCRT1DataStruct SiS310_LVDSCRT11152x768_1[] =
--{
-- {{0x64,0x4f,0x88,0x54,0x9f,0xc4,0x1f,
-- 0x92,0x89,0x8f,0xb5,0x30,0x00,0x01,
-- 0x00}},
-- {{0x64,0x4f,0x88,0x54,0x9f,0x97,0x1f,
-- 0x60,0x87,0x5d,0x83,0x10,0x00,0x01,
-- 0x00}},
-- {{0x64,0x4f,0x88,0x54,0x9f,0xc4,0x1f,
-- 0x92,0x89,0x8f,0xb5,0x30,0x00,0x01,
-- 0x00}},
-- {{0x64,0x4f,0x88,0x54,0x9f,0x97,0x1f,
-- 0x60,0x87,0x5d,0x83,0x10,0x00,0x01,
-- 0x00}},
-- {{0x64,0x4f,0x88,0x54,0x9f,0x04,0x3e,
-- 0xe2,0x89,0xdf,0x05,0x00,0x00,0x01,
-- 0x00}},
-- {{0x7e,0x63,0x82,0x68,0x15,0x7c,0xf0,
-- 0x5a,0x8f,0x57,0x7d,0x20,0x00,0x26,
-- 0x01}},
-- {{0xa3,0x7f,0x87,0x86,0x97,0x24,0xf5,
-- 0x02,0x88,0xff,0x25,0x10,0x00,0x02,
-- 0x01}}
--};
--
--static const SiS310_LVDSCRT1DataStruct SiS310_LVDSCRT11152x768_1_H[] =
--{
-- {{0x2f,0x27,0x93,0x2b,0x90,0xc4,0x1f,
-- 0x92,0x89,0x8f,0xb5,0x30,0x00,0x44,
-- 0x00}},
-- {{0x2f,0x27,0x93,0x2b,0x90,0x97,0x1f,
-- 0x60,0x87,0x5d,0x83,0x10,0x00,0x44,
-- 0x00}},
-- {{0x2f,0x27,0x93,0x2b,0x90,0xc4,0x1f,
-- 0x92,0x89,0x8f,0xb5,0x30,0x00,0x44,
-- 0x00}},
-- {{0x2f,0x27,0x93,0x2b,0x90,0x97,0x1f,
-- 0x60,0x87,0x5d,0x83,0x10,0x00,0x44,
-- 0x00}},
-- {{0x2f,0x27,0x93,0x2b,0x90,0x04,0x3e,
-- 0xe2,0x89,0xdf,0x05,0x00,0x00,0x44,
-- 0x00}},
-- {{0x3c,0x31,0x80,0x35,0x1c,0x7c,0xf0,
-- 0x5a,0x8f,0x57,0x7d,0x20,0x00,0x55,
-- 0x01}},
-- {{0x4f,0x3f,0x93,0x45,0x0d,0x24,0xf5,
-- 0x02,0x88,0xff,0x25,0x10,0x00,0x01,
-- 0x01}}
--};
--
--static const SiS310_LVDSCRT1DataStruct SiS310_LVDSCRT11152x768_2[] =
--{
-- {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
-- 0x4a,0x80,0x8f,0x25,0x30,0x00,0x06,
-- 0x00}},
-- {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
-- 0x31,0x87,0x5d,0x25,0x30,0x00,0x06,
-- 0x00}},
-- {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
-- 0x4a,0x80,0x8f,0x25,0x30,0x00,0x06,
-- 0x00}},
-- {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
-- 0x31,0x87,0x5d,0x25,0x30,0x00,0x06,
-- 0x00}},
-- {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
-- 0x72,0x88,0xdf,0x25,0x30,0x00,0x06,
-- 0x00}},
-- {{0xa3,0x63,0x87,0x78,0x89,0x24,0xf1,
-- 0xae,0x84,0x57,0x25,0x30,0x00,0x02,
-- 0x01}},
-- {{0xa3,0x7f,0x87,0x86,0x97,0x24,0xf5,
-- 0x02,0x88,0xff,0x25,0x10,0x00,0x02,
-- 0x01}}
--};
--
--static const SiS310_LVDSCRT1DataStruct SiS310_LVDSCRT11152x768_2_H[] =
--{
-- {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
-- 0x4a,0x80,0x8f,0x25,0x30,0x00,0x01,
-- 0x00}},
-- {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
-- 0x31,0x87,0x5d,0x25,0x30,0x00,0x01,
-- 0x00}},
-- {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
-- 0x4a,0x80,0x8f,0x25,0x30,0x00,0x01,
-- 0x00}},
-- {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
-- 0x31,0x87,0x5d,0x25,0x30,0x00,0x01,
-- 0x00}},
-- {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
-- 0x72,0x88,0xdf,0x25,0x30,0x00,0x01,
-- 0x00}},
-- {{0x4f,0x31,0x93,0x3e,0x06,0x24,0xf1,
-- 0xae,0x84,0x57,0x25,0x30,0x00,0x01,
-- 0x01}},
-- {{0x4f,0x3f,0x93,0x45,0x0d,0x24,0xf5,
-- 0x02,0x88,0xff,0x25,0x10,0x00,0x01,
-- 0x01}}
--};
--
--static const SiS310_LVDSCRT1DataStruct SiS310_LVDSCRT11600x1200_1[] =
--{
- {{0x83,0x4f,0x87,0x51,0x09,0xc0,0x1f,
- 0x90,0x84,0x8f,0xc1,0x30,0x00,0x06,
- 0x00}},
-@@ -4701,7 +2991,7 @@ static const SiS310_LVDSCRT1DataStruct
- {{0x80,0x63,0x84,0x6d,0x0f,0xec,0xf0,
- 0x7a,0x8f,0x57,0xed,0x20,0x00,0x06,
- 0x01 }},
-- {{0x8c,0x7f,0x90,0x86,0x09,0xaf,0xf5, /* TW: 1024x768 */
-+ {{0x8c,0x7f,0x90,0x86,0x09,0xaf,0xf5,
- 0x36,0x88,0xff,0xb0,0x10,0x00,0x02,
- 0x01}}
- };
-@@ -4726,7 +3016,7 @@ static const SiS310_LVDSCRT1DataStruct
- {{0x7d,0x63,0x81,0x68,0x0e,0xba,0xf0,
- 0x78,0x8a,0x57,0xbb,0x20,0x00,0x06,
- 0x01 }},
-- {{0x8c,0x7f,0x90,0x82,0x06,0x46,0xf5, /* TW: 1024x768 */
-+ {{0x8c,0x7f,0x90,0x82,0x06,0x46,0xf5,
- 0x15,0x88,0xff,0x47,0x70,0x00,0x02,
- 0x01 }}
- };
-@@ -4751,7 +3041,7 @@ static const SiS310_LVDSCRT1DataStruct
- {{0x73,0x63,0x97,0x69,0x8b,0xec,0xf0,
- 0x90,0x8c,0x57,0xed,0x20,0x00,0x05,
- 0x01 }},
-- {{0xaa,0x7f,0x8e,0x8e,0x96,0xe6,0xf5, /* TW: 1024x768 */
-+ {{0xaa,0x7f,0x8e,0x8e,0x96,0xe6,0xf5,
- 0x50,0x88,0xff,0xe7,0x10,0x00,0x02,
- 0x01}}
- };
-@@ -4776,7 +3066,7 @@ static const SiS310_LVDSCRT1DataStruct
- {{0x71,0x63,0x95,0x69,0x8c,0x6f,0xf0,
- 0x5a,0x8b,0x57,0x70,0x20,0x00,0x05,
- 0x01 }},
-- {{0xaa,0x7f,0x8e,0x8f,0x96,0x69,0xf5, /* TW: 1024x768 */
-+ {{0xaa,0x7f,0x8e,0x8f,0x96,0x69,0xf5,
- 0x28,0x88,0xff,0x6a,0x10,0x00,0x02,
- 0x01 }}
- };
-@@ -4801,12 +3091,11 @@ static const SiS310_LVDSCRT1DataStruct
- {{0x71,0x63,0x95,0x69,0x8c,0x6f,0xf0,
- 0x5a,0x8b,0x57,0x70,0x20,0x00,0x05,
- 0x01 }},
-- {{0xaa,0x7f,0x8e,0x8f,0x96,0x69,0xf5, /* TW: 1024x768 */
-+ {{0xaa,0x7f,0x8e,0x8f,0x96,0x69,0xf5,
- 0x28,0x88,0xff,0x6a,0x10,0x00,0x02,
- 0x01 }}
- };
-
--/* TW: Data for Chrontel 7019 */
- typedef struct _SiS310_CHTVRegDataStruct
- {
- UCHAR Reg[16];
---- linux-2.6.0-test1/drivers/video/sis/init301.c 2003-07-13 21:44:34.000000000 -0700
-+++ 25/drivers/video/sis/init301.c 2003-07-19 17:04:55.000000000 -0700
-@@ -1,27 +1,11 @@
- /* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/sis/init301.c,v 1.3 2002/22/04 01:16:16 dawes Exp $ */
- /*
-- * Mode switching code (CRT2 section) for SiS 300/540/630/730/315/550/650/740/330
-- * (Universal module for Linux kernel framebuffer, XFree86 4.x)
-+ * Mode switching code (CRT2 section) for SiS 300/540/630/730/315/550/650/740/330/660
-+ * (Universal module for Linux kernel framebuffer and XFree86 4.x)
- *
- * Assembler-To-C translation
- * Copyright 2002, 2003 by Thomas Winischhofer <thomas@winischhofer.net>
-- * Minor parts Copyright SiS, Inc.
-- *
-- * Based on BIOS
-- * 1.10.07, 1.10a for 650/CH7019
-- * 1.11.21a for 740/CH7019
-- * 1.11.05 for 650/LVDS (w/o Chrontel)
-- * 1.07.1b, 1.10.6s, 1.11.6w, 1.11.7w, 1.11.8r for 650/301(B/LV), 650/302LV
-- * 2.04.50 (I) and 2.04.5c (II) for 630/301(B)
-- * 2.02.3b, 2.03.02, 2.04.2c, 2.04.5c, 2.07a and 2.08.b3 for 630/LVDS/LVDS+CH7005
-- * 2.04.5c, 2.04.6c for 730+LVDS+CH7005
-- * 1.09b for 315/301(B)
-- * 1.16.51 for 300+301LV (ECS A907)
-- * 1.01.03 for 330 (Xabre 400)
-- *
-- * Known bugs:
-- * 1024x768 panel, expanding (CR37=1): Mode 640x480 does not work on SOME panels
-- * therefore, we always do the scaling ourselves for now.
-+ * Formerly based on non-functional code-fragements by SiS, Inc.
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
-@@ -73,8 +57,8 @@
- #define SiS_I2CDELAYSHORT 150
-
- BOOLEAN
--SiS_SetCRT2Group301(SiS_Private *SiS_Pr, USHORT BaseAddr,UCHAR *ROMAddr,USHORT ModeNo,
-- PSIS_HW_DEVICE_INFO HwDeviceExtension)
-+SiS_SetCRT2Group(SiS_Private *SiS_Pr, USHORT BaseAddr,UCHAR *ROMAddr,USHORT ModeNo,
-+ PSIS_HW_DEVICE_INFO HwDeviceExtension)
- {
- USHORT ModeIdIndex;
- USHORT RefreshRateTableIndex;
-@@ -85,9 +69,9 @@ SiS_SetCRT2Group301(SiS_Private *SiS_Pr,
- SiS_SearchModeID(SiS_Pr,ROMAddr,&ModeNo,&ModeIdIndex);
- } else {
- ModeIdIndex = 0;
-- }
-+ }
-
-- /* TW: Used for shifting CR33 */
-+ /* Used for shifting CR33 */
- SiS_Pr->SiS_SelectCRT2Rate = 4;
-
- SiS_UnLockCRT2(SiS_Pr, HwDeviceExtension, BaseAddr);
-@@ -110,8 +94,6 @@ SiS_SetCRT2Group301(SiS_Private *SiS_Pr,
- return(TRUE);
- }
-
-- if(SiS_Pr->UseCustomMode) return(FALSE);
--
- SiS_GetCRT2Data(SiS_Pr,ROMAddr,ModeNo,ModeIdIndex,RefreshRateTableIndex,
- HwDeviceExtension);
-
-@@ -153,9 +135,9 @@ SiS_SetCRT2Group301(SiS_Private *SiS_Pr,
- SiS_SetGroup5(SiS_Pr,HwDeviceExtension, BaseAddr,ROMAddr,
- ModeNo,ModeIdIndex);
-
-- /* TW: For 301BDH (Panel link initialization): */
-+ /* For 301BDH (Panel link initialization): */
- if((SiS_Pr->SiS_VBType & VB_NoLCD) && (SiS_Pr->SiS_VBInfo & SetCRT2ToLCD)) {
-- if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel640x480) {
-+ if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel640x480) {
- if(!((SiS_Pr->SiS_SetFlag & SetDOSMode) && ((ModeNo == 0x03) || (ModeNo = 0x10)))) {
- if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
- SiS_ModCRT1CRTC(SiS_Pr,ROMAddr,ModeNo,ModeIdIndex,
-@@ -176,10 +158,10 @@ SiS_SetCRT2Group301(SiS_Private *SiS_Pr,
- RefreshRateTableIndex,HwDeviceExtension);
- }
- }
-- if(SiS_Pr->SiS_IF_DEF_FSTN == 0) {
-- SiS_SetCRT2ECLK(SiS_Pr,ROMAddr,ModeNo,ModeIdIndex,
-- RefreshRateTableIndex,HwDeviceExtension);
-- }
-+
-+ SiS_SetCRT2ECLK(SiS_Pr,ROMAddr,ModeNo,ModeIdIndex,
-+ RefreshRateTableIndex,HwDeviceExtension);
-+
- if(SiS_LowModeStuff(SiS_Pr,ModeNo,HwDeviceExtension)) {
- if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
- if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
-@@ -199,74 +181,64 @@ SiS_SetCRT2Group301(SiS_Private *SiS_Pr,
- }
-
- #ifdef SIS300
-- if ( (HwDeviceExtension->jChipType == SIS_540) ||
-- (HwDeviceExtension->jChipType == SIS_630) ||
-- (HwDeviceExtension->jChipType == SIS_730) ||
-- (HwDeviceExtension->jChipType == SIS_300) )
-- {
-- if(SiS_LowModeStuff(SiS_Pr,ModeNo,HwDeviceExtension)) {
-- if(SiS_Pr->SiS_UseOEM) {
-- if((SiS_Pr->SiS_UseROM) && ROMAddr && (SiS_Pr->SiS_UseOEM == -1)) {
-- if((ROMAddr[0x233] == 0x12) && (ROMAddr[0x234] == 0x34)) {
-- SiS_OEM300Setting(SiS_Pr,HwDeviceExtension,BaseAddr,ROMAddr,ModeNo);
-- }
-- } else {
-- SiS_OEM300Setting(SiS_Pr,HwDeviceExtension,BaseAddr,ROMAddr,ModeNo);
-- }
-- }
-- }
-- }
--#endif
--
--#ifdef SIS315H
-- if ( (HwDeviceExtension->jChipType == SIS_315H) ||
-- (HwDeviceExtension->jChipType == SIS_315) ||
-- (HwDeviceExtension->jChipType == SIS_315PRO)||
-- (HwDeviceExtension->jChipType == SIS_550) ||
-- (HwDeviceExtension->jChipType == SIS_740) ||
-- (HwDeviceExtension->jChipType == SIS_650) ||
-- (HwDeviceExtension->jChipType == SIS_330) )
-- {
-- if(SiS_LowModeStuff(SiS_Pr,ModeNo,HwDeviceExtension)) {
-- SiS_FinalizeLCD(SiS_Pr,BaseAddr,ROMAddr,ModeNo,ModeIdIndex, HwDeviceExtension);
--#if 0 /* Instead of FinalizeLCD(), older BIOSes (A92x) used OEMLCD() */
-- SiS_OEMLCD(SiS_Pr,HwDeviceExtension,BaseAddr,ROMAddr,ModeNo,ModeIdIndex);
--#endif
-- if(SiS_Pr->SiS_UseOEM) {
-- SiS_OEM310Setting(SiS_Pr,HwDeviceExtension,BaseAddr,ROMAddr,ModeNo,ModeIdIndex);
-- }
-- SiS_CRT2AutoThreshold(SiS_Pr,BaseAddr);
-- }
-- }
--#endif
--
- if(HwDeviceExtension->jChipType < SIS_315H) {
-+ if(SiS_LowModeStuff(SiS_Pr,ModeNo,HwDeviceExtension)) {
-+ if(SiS_Pr->SiS_UseOEM) {
-+ if((SiS_Pr->SiS_UseROM) && ROMAddr && (SiS_Pr->SiS_UseOEM == -1)) {
-+ if((ROMAddr[0x233] == 0x12) && (ROMAddr[0x234] == 0x34)) {
-+ SiS_OEM300Setting(SiS_Pr,HwDeviceExtension,BaseAddr,ROMAddr,ModeNo,ModeIdIndex,
-+ RefreshRateTableIndex);
-+ }
-+ } else {
-+ SiS_OEM300Setting(SiS_Pr,HwDeviceExtension,BaseAddr,ROMAddr,ModeNo,ModeIdIndex,
-+ RefreshRateTableIndex);
-+ }
-+ }
-+ if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
-+ if((SiS_Pr->SiS_CustomT == CUT_BARCO1366) ||
-+ (SiS_Pr->SiS_CustomT == CUT_BARCO1024)) {
-+ SetOEMLCDData2(SiS_Pr,HwDeviceExtension,BaseAddr,ROMAddr,ModeNo,
-+ ModeIdIndex,RefreshRateTableIndex);
-+ }
-+ if(HwDeviceExtension->jChipType == SIS_730) {
-+ SiS_DisplayOn(SiS_Pr);
-+ }
-+ }
-+ }
- if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
- if(HwDeviceExtension->jChipType != SIS_730) {
- SiS_DisplayOn(SiS_Pr);
- }
- }
- }
-+#endif
-
-- if(SiS_LowModeStuff(SiS_Pr,ModeNo,HwDeviceExtension)) {
-- if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
-- if(HwDeviceExtension->jChipType == SIS_730) {
-- SiS_DisplayOn(SiS_Pr);
-- }
-+#ifdef SIS315H
-+ if(HwDeviceExtension->jChipType >= SIS_315H) {
-+ if(SiS_LowModeStuff(SiS_Pr,ModeNo,HwDeviceExtension)) {
-+ SiS_FinalizeLCD(SiS_Pr,BaseAddr,ROMAddr,ModeNo,ModeIdIndex, HwDeviceExtension);
-+ if(SiS_Pr->SiS_UseOEM) {
-+ SiS_OEM310Setting(SiS_Pr,HwDeviceExtension,BaseAddr,ROMAddr,ModeNo,ModeIdIndex);
-+ }
-+ SiS_CRT2AutoThreshold(SiS_Pr,BaseAddr);
- }
-+ }
-+#endif
-+
-+ if(SiS_LowModeStuff(SiS_Pr,ModeNo,HwDeviceExtension)) {
- SiS_EnableBridge(SiS_Pr,HwDeviceExtension,BaseAddr);
- }
-
- SiS_DisplayOn(SiS_Pr);
-
- if(SiS_Pr->SiS_IF_DEF_CH70xx == 1) {
-- if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
-- /* TW: Disable LCD panel when using TV */
-- SiS_SetRegOR(SiS_Pr->SiS_P3c4,0x11,0x0C);
-- } else {
-- /* TW: Disable TV when using LCD */
-- SiS_SetCH70xxANDOR(SiS_Pr,0x010E,0xF8);
-- }
-+ if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
-+ /* Disable LCD panel when using TV */
-+ SiS_SetRegOR(SiS_Pr->SiS_P3c4,0x11,0x0C);
-+ } else {
-+ /* Disable TV when using LCD */
-+ SiS_SetCH70xxANDOR(SiS_Pr,0x010E,0xF8);
-+ }
- }
-
- if(SiS_LowModeStuff(SiS_Pr,ModeNo,HwDeviceExtension)) {
-@@ -283,7 +255,7 @@ SiS_LowModeStuff(SiS_Private *SiS_Pr, US
- USHORT temp,temp1,temp2;
-
- if((ModeNo != 0x03) && (ModeNo != 0x10) && (ModeNo != 0x12))
-- return(1);
-+ return(1);
- temp = SiS_GetReg1(SiS_Pr->SiS_P3d4,0x11);
- SiS_SetRegOR(SiS_Pr->SiS_P3d4,0x11,0x80);
- temp1 = SiS_GetReg1(SiS_Pr->SiS_P3d4,0x00);
-@@ -304,7 +276,7 @@ SiS_LowModeStuff(SiS_Private *SiS_Pr, US
- }
- }
-
--/* TW: Set Part1 registers */
-+/* Set Part1 registers */
- void
- SiS_SetGroup1(SiS_Private *SiS_Pr,USHORT BaseAddr,UCHAR *ROMAddr,USHORT ModeNo,
- USHORT ModeIdIndex,PSIS_HW_DEVICE_INFO HwDeviceExtension,
-@@ -313,25 +285,29 @@ SiS_SetGroup1(SiS_Private *SiS_Pr,USHORT
- USHORT temp=0, tempax=0, tempbx=0, tempcx=0;
- USHORT pushbx=0, CRT1Index=0;
- #ifdef SIS315H
-- USHORT pushcx=0, tempbl=0;
-+ USHORT tempbl=0;
- #endif
- USHORT modeflag, resinfo=0;
-
-- if(ModeNo<=0x13) {
-- modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
-+ if(ModeNo <= 0x13) {
-+ modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
- } else {
-+ if(SiS_Pr->UseCustomMode) {
-+ modeflag = SiS_Pr->CModeFlag;
-+ } else {
- CRT1Index = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRT1CRTC;
- resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
- modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
-+ }
- }
-
- if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
--
-- SiS_SetCRT2Sync(SiS_Pr,BaseAddr,ROMAddr,ModeNo,
-- RefreshRateTableIndex,HwDeviceExtension);
- #ifdef SIS315H
-- SiS_SetGroup1_LCDA(SiS_Pr,BaseAddr,ROMAddr,ModeNo,ModeIdIndex,
-- HwDeviceExtension,RefreshRateTableIndex);
-+ SiS_SetCRT2Sync(SiS_Pr,BaseAddr,ROMAddr,ModeNo,
-+ RefreshRateTableIndex,HwDeviceExtension);
-+
-+ SiS_SetGroup1_LCDA(SiS_Pr,BaseAddr,ROMAddr,ModeNo,ModeIdIndex,
-+ HwDeviceExtension,RefreshRateTableIndex);
- #endif
- } else {
-
-@@ -367,13 +343,13 @@ SiS_SetGroup1(SiS_Private *SiS_Pr,USHORT
- #ifdef SIS300 /* ------------- 300 series --------------*/
-
- temp = (SiS_Pr->SiS_VGAHT - 1) & 0x0FF; /* BTVGA2HT 0x08,0x09 */
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x08,temp); /* TW: CRT2 Horizontal Total */
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x08,temp); /* CRT2 Horizontal Total */
-
- temp = (((SiS_Pr->SiS_VGAHT - 1) & 0xFF00) >> 8) << 4;
-- SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x09,0x0f,temp); /* TW: CRT2 Horizontal Total Overflow [7:4] */
-+ SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x09,0x0f,temp); /* CRT2 Horizontal Total Overflow [7:4] */
-
- temp = (SiS_Pr->SiS_VGAHDE + 12) & 0x0FF; /* BTVGA2HDEE 0x0A,0x0C */
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x0A,temp); /* TW: CRT2 Horizontal Display Enable End */
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x0A,temp); /* CRT2 Horizontal Display Enable End */
-
- pushbx = SiS_Pr->SiS_VGAHDE + 12; /* bx BTVGA@HRS 0x0B,0x0C */
- tempcx = (SiS_Pr->SiS_VGAHT - SiS_Pr->SiS_VGAHDE) >> 2;
-@@ -382,108 +358,129 @@ SiS_SetGroup1(SiS_Private *SiS_Pr,USHORT
- tempcx += tempbx;
-
- if(SiS_Pr->SiS_IF_DEF_LVDS == 0) {
-- if(SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC){
-- /* CRT1Index &= 0x3F; - Not any longer */
-- tempbx = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[4];
-- tempbx |= ((SiS_Pr->SiS_CRT1Table[CRT1Index].CR[14] & 0xC0) << 2);
-- tempbx = (tempbx - 1) << 3;
-- tempcx = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[5];
-- tempcx &= 0x1F;
-- temp = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[15];
-- temp = (temp & 0x04) << (6-2);
-- tempcx = (tempcx | temp);
-- tempcx--;
-- tempcx <<= 3;
-- }
--
-- if((SiS_Pr->SiS_VBInfo & SetCRT2ToTV) && (resinfo == 0x08)){
-- if(!(SiS_Pr->SiS_VBInfo & SetPALTV)){
-- tempbx = 1040;
-- tempcx = 1042;
-- }
-- }
-+
-+ if(SiS_Pr->UseCustomMode) {
-+ tempbx = SiS_Pr->CHSyncStart + 12;
-+ tempcx = SiS_Pr->CHSyncEnd + 12;
-+ }
-+
-+ if(SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC) {
-+ unsigned char cr4, cr14, cr5, cr15;
-+ if(SiS_Pr->UseCustomMode) {
-+ cr4 = SiS_Pr->CCRT1CRTC[4];
-+ cr14 = SiS_Pr->CCRT1CRTC[14];
-+ cr5 = SiS_Pr->CCRT1CRTC[5];
-+ cr15 = SiS_Pr->CCRT1CRTC[15];
-+ } else {
-+ cr4 = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[4];
-+ cr14 = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[14];
-+ cr5 = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[5];
-+ cr15 = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[15];
-+ }
-+ tempbx = ((cr4 | ((cr14 & 0xC0) << 2)) - 1) << 3;
-+ tempcx = (((cr5 & 0x1F) | ((cr15 & 0x04) << (6-2))) - 1) << 3;
-+ }
-+
-+ if((SiS_Pr->SiS_VBInfo & SetCRT2ToTV) && (resinfo == SIS_RI_1024x768)){
-+ if(!(SiS_Pr->SiS_VBInfo & SetPALTV)){
-+ tempbx = 1040;
-+ tempcx = 1042;
-+ }
-+ }
- }
-
- temp = tempbx & 0x00FF;
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x0B,temp); /* TW: CRT2 Horizontal Retrace Start */
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x0B,temp); /* CRT2 Horizontal Retrace Start */
- #endif /* SIS300 */
-
- } else {
-
--#ifdef SIS315H /* ----------------- 310/325/330 series ------------- */
-+#ifdef SIS315H /* ------------------- 315/330 series --------------- */
-
- tempcx = SiS_Pr->SiS_VGAHT; /* BTVGA2HT 0x08,0x09 */
-- pushcx = tempcx;
- if(modeflag & HalfDCLK) {
--#ifndef NEWCH701x
-- if((SiS_Pr->SiS_IF_DEF_LVDS == 1) && (SiS_Pr->SiS_IF_DEF_CH70xx == 0)) {
--#endif
-+ if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
- tempax = SiS_Pr->SiS_VGAHDE >> 1;
- tempcx = SiS_Pr->SiS_HT - SiS_Pr->SiS_HDE + tempax;
- if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
- tempcx = SiS_Pr->SiS_HT - tempax;
- }
--#ifndef NEWCH701x
- } else {
- tempcx >>= 1;
- }
--#endif
- }
- tempcx--;
-
- temp = tempcx & 0xff;
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x08,temp); /* TW: CRT2 Horizontal Total */
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x08,temp); /* CRT2 Horizontal Total */
-
- temp = ((tempcx & 0xff00) >> 8) << 4;
-- SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x09,0x0F,temp); /* TW: CRT2 Horizontal Total Overflow [7:4] */
-+ SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x09,0x0F,temp); /* CRT2 Horizontal Total Overflow [7:4] */
-
-- tempcx = pushcx; /* BTVGA2HDEE 0x0A,0x0C */
-+ tempcx = SiS_Pr->SiS_VGAHT; /* BTVGA2HDEE 0x0A,0x0C */
- tempbx = SiS_Pr->SiS_VGAHDE;
- tempcx -= tempbx;
- tempcx >>= 2;
- if(modeflag & HalfDCLK) {
-- tempbx >>= 1;
-- tempcx >>= 1;
-+ tempbx >>= 1;
-+ tempcx >>= 1;
- }
- tempbx += 16;
-
- temp = tempbx & 0xff;
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x0A,temp); /* TW: CRT2 Horizontal Display Enable End */
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x0A,temp); /* CRT2 Horizontal Display Enable End */
-
- pushbx = tempbx;
- tempcx >>= 1;
- tempbx += tempcx;
- tempcx += tempbx;
-
-- if(SiS_Pr->SiS_IF_DEF_LVDS==0) {
-+ if(SiS_Pr->SiS_IF_DEF_LVDS == 0) {
-+
-+ if(SiS_Pr->UseCustomMode) {
-+ tempbx = SiS_Pr->CHSyncStart + 16;
-+ tempcx = SiS_Pr->CHSyncEnd + 16;
-+ tempax = SiS_Pr->SiS_VGAHT;
-+ if(modeflag & HalfDCLK) tempax >>= 1;
-+ tempax--;
-+ if(tempcx > tempax) tempcx = tempax;
-+ }
-+
- if(SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC) {
-- tempbx = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[4];
-- tempbx |= ((SiS_Pr->SiS_CRT1Table[CRT1Index].CR[14] & 0xC0) << 2);
-- tempbx = (tempbx - 3) << 3; /*(VGAHRS-3)*8 */
-- tempcx = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[5];
-- tempcx &= 0x1F;
-- temp = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[15];
-- temp = (temp & 0x04) << (5-2); /* VGAHRE D[5] */
-- tempcx = (tempcx | temp); /* (VGAHRE-3)*8 */
-- tempcx -= 3;
-- tempcx <<= 3;
-- tempcx &= 0x00FF;
-- tempcx |= (tempbx & 0xFF00);
-- tempbx += 16;
-- tempcx += 16;
-- tempax = SiS_Pr->SiS_VGAHT;
-- if(modeflag & HalfDCLK) tempax >>= 1;
-- tempax--;
-- if(tempcx > tempax) tempcx = tempax;
-+ unsigned char cr4, cr14, cr5, cr15;
-+ if(SiS_Pr->UseCustomMode) {
-+ cr4 = SiS_Pr->CCRT1CRTC[4];
-+ cr14 = SiS_Pr->CCRT1CRTC[14];
-+ cr5 = SiS_Pr->CCRT1CRTC[5];
-+ cr15 = SiS_Pr->CCRT1CRTC[15];
-+ } else {
-+ cr4 = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[4];
-+ cr14 = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[14];
-+ cr5 = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[5];
-+ cr15 = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[15];
-+ }
-+ tempbx = ((cr4 | ((cr14 & 0xC0) << 2)) - 3) << 3; /* (VGAHRS-3)*8 */
-+ tempcx = (((cr5 & 0x1f) | ((cr15 & 0x04) << (5-2))) - 3) << 3; /* (VGAHRE-3)*8 */
-+ tempcx &= 0x00FF;
-+ tempcx |= (tempbx & 0xFF00);
-+ tempbx += 16;
-+ tempcx += 16;
-+ tempax = SiS_Pr->SiS_VGAHT;
-+ if(modeflag & HalfDCLK) tempax >>= 1;
-+ tempax--;
-+ if(tempcx > tempax) tempcx = tempax;
- }
-- if((SiS_Pr->SiS_VBInfo & SetCRT2ToTV) && (resinfo == 0x08)){
-- if(!(SiS_Pr->SiS_VBInfo & SetPALTV)){
-- tempbx = 1040;
-- tempcx = 1042;
-- }
-+ if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
-+ if(!(SiS_Pr->SiS_VBInfo & SetPALTV)) {
-+ if(resinfo == SIS_RI_1024x768) {
-+ tempbx = 1040;
-+ tempcx = 1042;
-+ }
-+ }
- }
-- /* TW: Makes no sense, but is in 650/302LV 1.10.6s */
-- if((SiS_Pr->SiS_VBInfo & SetCRT2ToTV) && (resinfo == 0x08)){
-+#if 0
-+ /* Makes no sense, but is in 650/30xLV 1.10.6s */
-+ if((SiS_Pr->SiS_VBInfo & SetCRT2ToTV) && (resinfo == SIS_RI_1024x768)){
- if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVisionTV)) {
- if(!(SiS_Pr->SiS_VBInfo & SetPALTV)) {
- tempbx = 1040;
-@@ -491,25 +488,26 @@ SiS_SetGroup1(SiS_Private *SiS_Pr,USHORT
- }
- }
- }
-+#endif
- }
-
- temp = tempbx & 0xff;
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x0B,temp); /* TW: CRT2 Horizontal Retrace Start */
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x0B,temp); /* CRT2 Horizontal Retrace Start */
- #endif /* SIS315H */
-
-- } /* 310/325/330 series */
-+ } /* 315/330 series */
-
-- /* TW: The following is done for all bridge/chip types/series */
-+ /* The following is done for all bridge/chip types/series */
-
- tempax = tempbx & 0xFF00;
- tempbx = pushbx;
- tempbx = (tempbx & 0x00FF) | ((tempbx & 0xFF00) << 4);
- tempax |= (tempbx & 0xFF00);
- temp = (tempax & 0xFF00) >> 8;
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x0C,temp); /* TW: Overflow */
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x0C,temp); /* Overflow */
-
- temp = tempcx & 0x00FF;
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x0D,temp); /* TW: CRT2 Horizontal Retrace End */
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x0D,temp); /* CRT2 Horizontal Retrace End */
-
- /* 2. Vertical setup */
-
-@@ -517,30 +515,30 @@ SiS_SetGroup1(SiS_Private *SiS_Pr,USHORT
- temp = tempcx & 0x00FF;
-
- if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
-- if(HwDeviceExtension->jChipType < SIS_315H) {
-- if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
-- if(SiS_Pr->SiS_VBInfo & (SetCRT2ToSVIDEO | SetCRT2ToAVIDEO)) {
-- temp--;
-- }
-- }
-- } else {
-- temp--;
-- }
-+ if(HwDeviceExtension->jChipType < SIS_315H) {
-+ if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
-+ if(SiS_Pr->SiS_VBInfo & (SetCRT2ToSVIDEO | SetCRT2ToAVIDEO)) {
-+ temp--;
-+ }
-+ }
-+ } else {
-+ temp--;
-+ }
- } else if(HwDeviceExtension->jChipType >= SIS_315H) {
-- /* TW: 650/30xLV 1.10.6s */
-- temp--;
-+ /* 650/30xLV 1.10.6s */
-+ temp--;
- }
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x0E,temp); /* TW: CRT2 Vertical Total */
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x0E,temp); /* CRT2 Vertical Total */
-
- tempbx = SiS_Pr->SiS_VGAVDE - 1;
- temp = tempbx & 0x00FF;
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x0F,temp); /* TW: CRT2 Vertical Display Enable End */
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x0F,temp); /* CRT2 Vertical Display Enable End */
-
- temp = ((tempbx & 0xFF00) << 3) >> 8;
- temp |= ((tempcx & 0xFF00) >> 8);
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x12,temp); /* TW: Overflow (and HWCursor Test Mode) */
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x12,temp); /* Overflow (and HWCursor Test Mode) */
-
-- /* TW: 650/LVDS (1.10.07), 650/30xLV (1.10.6s) */
-+ /* 650/LVDS (1.10.07), 650/30xLV (1.10.6s) */
- if(HwDeviceExtension->jChipType >= SIS_315H) {
- tempbx++;
- tempax = tempbx;
-@@ -553,29 +551,44 @@ SiS_SetGroup1(SiS_Private *SiS_Pr,USHORT
- tempcx += tempbx;
- tempcx++;
- } else {
-- /* TW: 300 series, LVDS/301B: */
-+ /* 300 series, LVDS/301B: */
- tempbx = (SiS_Pr->SiS_VGAVT + SiS_Pr->SiS_VGAVDE) >> 1; /* BTVGA2VRS 0x10,0x11 */
- tempcx = ((SiS_Pr->SiS_VGAVT - SiS_Pr->SiS_VGAVDE) >> 4) + tempbx + 1; /* BTVGA2VRE 0x11 */
- }
-
- if(SiS_Pr->SiS_IF_DEF_LVDS == 0) {
-- if(SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC){
-- tempbx = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[8];
-- temp = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[7];
-- if(temp & 0x04) tempbx |= 0x0100;
-- if(temp & 0x80) tempbx |= 0x0200;
-- temp = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[13];
-- if(temp & 0x08) tempbx |= 0x0400;
-- temp = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[9];
-- tempcx = (tempcx & 0xFF00) | (temp & 0x00FF);
-+
-+ if(SiS_Pr->UseCustomMode) {
-+ tempbx = SiS_Pr->CVSyncStart;
-+ tempcx = (tempcx & 0xFF00) | (SiS_Pr->CVSyncEnd & 0x00FF);
-+ }
-+
-+ if(SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC) {
-+ unsigned char cr8, cr7, cr13, cr9;
-+ if(SiS_Pr->UseCustomMode) {
-+ cr8 = SiS_Pr->CCRT1CRTC[8];
-+ cr7 = SiS_Pr->CCRT1CRTC[7];
-+ cr13 = SiS_Pr->CCRT1CRTC[13];
-+ cr9 = SiS_Pr->CCRT1CRTC[9];
-+ } else {
-+ cr8 = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[8];
-+ cr7 = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[7];
-+ cr13 = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[13];
-+ cr9 = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[9];
-+ }
-+ tempbx = cr8;
-+ if(cr7 & 0x04) tempbx |= 0x0100;
-+ if(cr7 & 0x80) tempbx |= 0x0200;
-+ if(cr13 & 0x08) tempbx |= 0x0400;
-+ tempcx = (tempcx & 0xFF00) | (cr9 & 0x00FF);
- }
- }
- temp = tempbx & 0x00FF;
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x10,temp); /* TW: CRT2 Vertical Retrace Start */
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x10,temp); /* CRT2 Vertical Retrace Start */
-
- temp = ((tempbx & 0xFF00) >> 8) << 4;
- temp |= (tempcx & 0x000F);
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x11,temp); /* TW: CRT2 Vert. Retrace End; Overflow; "Enable CRTC Check" */
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x11,temp); /* CRT2 Vert. Retrace End; Overflow; "Enable CRTC Check" */
-
- /* 3. Panel compensation delay */
-
-@@ -590,18 +603,18 @@ SiS_SetGroup1(SiS_Private *SiS_Pr,USHORT
- temp = 0x10;
- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) temp = 0x2c;
- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) temp = 0x20;
-- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x960) temp = 0x24;
- }
- if(SiS_Pr->SiS_VBType & VB_SIS301) {
- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) temp = 0x20;
- }
- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x960) temp = 0x24;
-+ if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_PanelCustom) temp = 0x2c;
- if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) temp = 0x08;
- if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVisionTV) {
- if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) temp = 0x2c;
- else temp = 0x20;
- }
-- if((ROMAddr) && (SiS_Pr->SiS_UseROM) && (SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV)) {
-+ if((ROMAddr) && (SiS_Pr->SiS_UseROM)) {
- if(ROMAddr[0x220] & 0x80) {
- if(SiS_Pr->SiS_VBInfo & (SetCRT2ToTV-SetCRT2ToHiVisionTV))
- temp = ROMAddr[0x221];
-@@ -636,19 +649,20 @@ SiS_SetGroup1(SiS_Private *SiS_Pr,USHORT
- }
- }
-
-- SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x13,~0x03C,temp); /* TW: Panel Link Delay Compensation; (Software Command Reset; Power Saving) */
-+ SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x13,~0x03C,temp); /* Panel Link Delay Compensation; (Software Command Reset; Power Saving) */
-
- #endif /* SIS300 */
-
- } else {
-
--#ifdef SIS315H /* ----------- 310/325/330 series ---------------*/
-+#ifdef SIS315H /* --------------- 315/330 series ---------------*/
-
- if(SiS_Pr->SiS_IF_DEF_LVDS == 0) {
- temp = 0x10;
- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) temp = 0x2c;
- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) temp = 0x20;
- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x960) temp = 0x24;
-+ if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_PanelCustom) temp = 0x2c;
- if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
- temp = 0x08;
- if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVisionTV) {
-@@ -664,7 +678,7 @@ SiS_SetGroup1(SiS_Private *SiS_Pr,USHORT
- }
- }
- }
-- if(SiS_Pr->SiS_VBType & VB_SIS301B302B) {
-+ if((SiS_Pr->SiS_VBType & VB_SIS301B302B) && (!(SiS_Pr->SiS_VBType & VB_NoLCD))) {
- tempbl = 0x00;
- if((ROMAddr) && (SiS_Pr->SiS_UseROM)) {
- if(HwDeviceExtension->jChipType < SIS_330) {
-@@ -689,8 +703,16 @@ SiS_SetGroup1(SiS_Private *SiS_Pr,USHORT
- if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToTV)) tempbl = 0x0F;
- }
- }
-+
-+ if(SiS_Pr->SiS_IF_DEF_DSTN || SiS_Pr->SiS_IF_DEF_FSTN) {
-+ temp = 0x08;
-+ tempbl = 0;
-+ if((ROMAddr) && (SiS_Pr->SiS_UseROM)) {
-+ if(ROMAddr[0x13c] & 0x80) tempbl = 0xf0;
-+ }
-+ }
- }
-- SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2D,tempbl,temp); /* TW: Panel Link Delay Compensation */
-+ SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2D,tempbl,temp); /* Panel Link Delay Compensation */
-
- tempax = 0;
- if (modeflag & DoubleScanMode) tempax |= 0x80;
-@@ -705,14 +727,13 @@ SiS_SetGroup1(SiS_Private *SiS_Pr,USHORT
-
- if(SiS_Pr->SiS_IF_DEF_LVDS == 0) {
-
-- /* TW: For 301BDH, we set up the Panel Link */
-- if( (SiS_Pr->SiS_VBType & VB_NoLCD) &&
-- (SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) ) {
-+ /* For 301BDH with LCD, we set up the Panel Link */
-+ if( (SiS_Pr->SiS_VBType & VB_NoLCD) && (SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) ) {
-
- SiS_SetGroup1_LVDS(SiS_Pr,BaseAddr,ROMAddr,ModeNo,ModeIdIndex,
- HwDeviceExtension,RefreshRateTableIndex);
-
-- } else if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
-+ } else if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
-
- SiS_SetGroup1_301(SiS_Pr,BaseAddr,ROMAddr,ModeNo,ModeIdIndex,
- HwDeviceExtension,RefreshRateTableIndex);
-@@ -749,23 +770,27 @@ SiS_SetGroup1_301(SiS_Private *SiS_Pr, U
- USHORT push1,push2;
- USHORT tempax,tempbx,tempcx,temp;
- USHORT resinfo,modeflag;
-+ unsigned char p1_7, p1_8;
-
- if(ModeNo <= 0x13) {
-- modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
-- resinfo = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ResInfo;
-+ modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
-+ resinfo = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ResInfo;
- } else {
-+ if(SiS_Pr->UseCustomMode) {
-+ modeflag = SiS_Pr->CModeFlag;
-+ resinfo = 0;
-+ } else {
- modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
- resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
-+ }
- }
-
-- /* TW: The following is only done if bridge is in slave mode: */
-+ /* The following is only done if bridge is in slave mode: */
-
- tempax = 0xFFFF;
- if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToTV)) tempax = SiS_GetVGAHT2(SiS_Pr);
-
-- if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
-- modeflag |= Charx8Dot;
-- }
-+ if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) modeflag |= Charx8Dot;
-
- if(modeflag & Charx8Dot) tempcx = 0x08;
- else tempcx = 0x09;
-@@ -777,8 +802,7 @@ SiS_SetGroup1_301(SiS_Private *SiS_Pr, U
- tempax = (tempax / tempcx) - 5;
- tempbx = tempax & 0x00FF;
-
-- temp = 0xFF; /* set MAX HT */
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x03,temp);
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x03,0xff); /* set MAX HT */
-
- tempax = SiS_Pr->SiS_VGAHDE; /* 0x04 Horizontal Display End */
- if(modeflag & HalfDCLK) tempax >>= 1;
-@@ -789,13 +813,13 @@ SiS_SetGroup1_301(SiS_Private *SiS_Pr, U
-
- temp = (tempbx & 0xFF00) >> 8;
- if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
-- if(!(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV)) {
-- temp += 2;
-- }
-- }
-+ if(!(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV)) {
-+ temp += 2;
-+ }
-+ }
- if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVisionTV) {
- if(SiS_Pr->SiS_HiVision == 3) {
-- if(resinfo == 7) temp -= 2;
-+ if(resinfo == SIS_RI_800x600) temp -= 2;
- }
- }
- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x05,temp); /* 0x05 Horizontal Display Start */
-@@ -804,140 +828,133 @@ SiS_SetGroup1_301(SiS_Private *SiS_Pr, U
-
- if((SiS_Pr->SiS_VBInfo & SetCRT2ToHiVisionTV) &&
- (SiS_Pr->SiS_HiVision == 3)) {
-- temp = (tempbx & 0x00FF) - 1;
-- if(!(modeflag & HalfDCLK)) {
-- temp -= 6;
-- if(SiS_Pr->SiS_SetFlag & TVSimuMode) {
-- temp -= 2;
-- if(ModeNo > 0x13) temp -= 10;
-- }
-- }
-+ temp = (tempbx & 0x00FF) - 1;
-+ if(!(modeflag & HalfDCLK)) {
-+ temp -= 6;
-+ if(SiS_Pr->SiS_SetFlag & TVSimuMode) {
-+ temp -= 2;
-+ if(ModeNo > 0x13) temp -= 10;
-+ }
-+ }
- } else {
-- tempcx = tempbx & 0x00FF;
-- tempbx = (tempbx & 0xFF00) >> 8;
-- tempcx = (tempcx + tempbx) >> 1;
-- temp = (tempcx & 0x00FF) + 2;
-- if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV){
-- temp--;
-- if(!(modeflag & HalfDCLK)){
-- if((modeflag & Charx8Dot)){
-- temp += 4;
-- if(SiS_Pr->SiS_VGAHDE >= 800) temp -= 6;
-- if(HwDeviceExtension->jChipType >= SIS_315H) {
-- if(SiS_Pr->SiS_VGAHDE == 800) temp += 2;
-- }
-- }
-- }
-- } else {
-- if(!(modeflag & HalfDCLK)) {
-- temp -= 4;
-- if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel1280x960) {
-- if(SiS_Pr->SiS_VGAHDE >= 800) {
-- temp -= 7;
-- if(HwDeviceExtension->jChipType < SIS_315H) {
-- /* 650/301LV(x) does not do this, 630/301B, 300/301LV do */
-- if(SiS_Pr->SiS_ModeType == ModeEGA) {
-- if(SiS_Pr->SiS_VGAVDE == 1024) {
-- temp += 15;
-- if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel1280x1024)
-- temp += 7;
-- }
-- }
-- }
-- if(SiS_Pr->SiS_VGAHDE >= 1280) {
-- if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel1280x960) {
-- if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) temp += 28;
-- }
-- }
-- }
-- }
-- }
-- }
-+ tempcx = tempbx & 0x00FF;
-+ tempbx = (tempbx & 0xFF00) >> 8;
-+ tempcx = (tempcx + tempbx) >> 1;
-+ temp = (tempcx & 0x00FF) + 2;
-+ if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
-+ temp--;
-+ if(!(modeflag & HalfDCLK)) {
-+ if((modeflag & Charx8Dot)) {
-+ temp += 4;
-+ if(SiS_Pr->SiS_VGAHDE >= 800) temp -= 6;
-+ if(HwDeviceExtension->jChipType >= SIS_315H) {
-+ if(SiS_Pr->SiS_VGAHDE == 800) temp += 2;
-+ }
-+ }
-+ }
-+ } else {
-+ if(!(modeflag & HalfDCLK)) {
-+ temp -= 4;
-+ if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel1280x960) {
-+ if(SiS_Pr->SiS_VGAHDE >= 800) {
-+ temp -= 7;
-+ if(HwDeviceExtension->jChipType < SIS_315H) {
-+ /* 650/301LV(x) does not do this, 630/301B, 300/301LV do */
-+ if(SiS_Pr->SiS_ModeType == ModeEGA) {
-+ if(SiS_Pr->SiS_VGAVDE == 1024) {
-+ temp += 15;
-+ if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel1280x1024)
-+ temp += 7;
-+ }
-+ }
-+ }
-+ if(SiS_Pr->SiS_VGAHDE >= 1280) {
-+ if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) temp += 28;
-+ }
-+ }
-+ }
-+ }
-+ }
- }
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x07,temp); /* 0x07 Horizontal Retrace Start */
-
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x08,0x00); /* 0x08 Horizontal Retrace End */
-+ p1_7 = temp;
-+ p1_8 = 0x00;
-
- if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
- if(SiS_Pr->SiS_SetFlag & TVSimuMode) {
-- if(ModeNo <= 0x01) {
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x07,0x2a);
-- if(!(SiS_Pr->SiS_VBInfo & SetPALTV)) {
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x08,0x61);
-- } else {
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x08,0x41);
-- }
-- } else if(SiS_Pr->SiS_ModeType == ModeText) {
-- if(!(SiS_Pr->SiS_VBInfo & SetPALTV)) {
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x07,0x54);
-- } else {
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x07,0x55);
-- }
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x08,0x00);
-- } else if(ModeNo <= 0x13) {
-- if(modeflag & HalfDCLK) {
-- if(!(SiS_Pr->SiS_VBInfo & SetPALTV)) {
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x07,0x30);
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x08,0x03);
-- } else {
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x07,0x2f);
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x08,0x02);
-- }
-- } else {
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x07,0x5b);
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x08,0x03);
-- }
-- } else if( ((HwDeviceExtension->jChipType >= SIS_315H) && (ModeNo == 0x50)) ||
-- ((HwDeviceExtension->jChipType < SIS_315H) && (resinfo == 0 || resinfo == 1)) ) {
-- if(!(SiS_Pr->SiS_VBInfo & SetPALTV)) {
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x07,0x30);
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x08,0x03);
-- } else {
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x07,0x2f);
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x08,0x03);
-- }
-- }
--
-+ if(ModeNo <= 0x01) {
-+ p1_7 = 0x2a;
-+ if(!(SiS_Pr->SiS_VBInfo & SetPALTV)) p1_8 = 0x61;
-+ else p1_8 = 0x41;
-+ } else if(SiS_Pr->SiS_ModeType == ModeText) {
-+ if(!(SiS_Pr->SiS_VBInfo & SetPALTV)) p1_7 = 0x54;
-+ else p1_7 = 0x55;
-+ p1_8 = 0x00;
-+ } else if(ModeNo <= 0x13) {
-+ if(modeflag & HalfDCLK) {
-+ if(!(SiS_Pr->SiS_VBInfo & SetPALTV)) {
-+ p1_7 = 0x30;
-+ p1_8 = 0x03;
-+ } else {
-+ p1_7 = 0x2f;
-+ p1_8 = 0x02;
-+ }
-+ } else {
-+ p1_7 = 0x5b;
-+ p1_8 = 0x03;
-+ }
-+ } else if( ((HwDeviceExtension->jChipType >= SIS_315H) &&
-+ ((ModeNo == 0x50) || (ModeNo = 0x56) || (ModeNo = 0x53))) ||
-+ ((HwDeviceExtension->jChipType < SIS_315H) &&
-+ (resinfo == SIS_RI_320x200 || resinfo == SIS_RI_320x240)) ) {
-+ if(!(SiS_Pr->SiS_VBInfo & SetPALTV)) {
-+ p1_7 = 0x30,
-+ p1_8 = 0x03;
-+ } else {
-+ p1_7 = 0x2f;
-+ p1_8 = 0x03;
-+ }
-+ }
- }
- }
-+
- if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVisionTV) {
- if(SiS_Pr->SiS_HiVision & 0x03) {
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x07,0xb2);
-+ p1_7 = 0xb2;
- if(SiS_Pr->SiS_HiVision & 0x02) {
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x07,0xab);
-+ p1_7 = 0xab;
- }
- }
- }
-
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x07,p1_7); /* 0x07 Horizontal Retrace Start */
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x08,p1_8); /* 0x08 Horizontal Retrace End */
-+
-+
- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x18,0x03); /* 0x18 SR08 (FIFO Threshold?) */
-
- SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x19,0xF0);
-
-- tempbx = SiS_Pr->SiS_VGAVT;
-- push1 = tempbx;
--
- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x09,0xFF); /* 0x09 Set Max VT */
-
- tempcx = 0x121;
- tempbx = SiS_Pr->SiS_VGAVDE; /* 0x0E Vertical Display End */
-- if(tempbx == 357) tempbx = 350;
-- if(tempbx == 360) tempbx = 350;
-- if(tempbx == 375) tempbx = 350;
-- if(tempbx == 405) tempbx = 400;
-- if(tempbx == 420) tempbx = 400;
-- if(tempbx == 525) tempbx = 480;
-+ if (tempbx == 357) tempbx = 350;
-+ else if(tempbx == 360) tempbx = 350;
-+ else if(tempbx == 375) tempbx = 350;
-+ else if(tempbx == 405) tempbx = 400;
-+ else if(tempbx == 420) tempbx = 400;
-+ else if(tempbx == 525) tempbx = 480;
- push2 = tempbx;
- if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
-- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) {
-- if(!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) {
-- if(tempbx == 350) tempbx += 5;
-- if(tempbx == 480) tempbx += 5;
-- }
-- }
-+ if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) {
-+ if(!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) {
-+ if (tempbx == 350) tempbx += 5;
-+ else if(tempbx == 480) tempbx += 5;
-+ }
-+ }
- }
-- tempbx--;
-- temp = tempbx & 0x00FF;
-- tempbx--;
-+ tempbx -= 2;
- temp = tempbx & 0x00FF;
- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x10,temp); /* 0x10 vertical Blank Start */
-
-@@ -945,126 +962,91 @@ SiS_SetGroup1_301(SiS_Private *SiS_Pr, U
- tempbx--;
- temp = tempbx & 0x00FF;
- #if 0
-- /* TW: Missing code from 630/301B 2.04.5a and 650/302LV 1.10.6s (calles int 2f) */
-+ /* Missing code from 630/301B 2.04.5a and 650/302LV 1.10.6s (calles int 2f) */
- if(xxx()) {
- if(temp == 0xdf) temp = 0xda;
- }
- #endif
- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x0E,temp);
-
-- if(tempbx & 0x0100) {
-- tempcx |= 0x0002;
-- if(SiS_Pr->SiS_VBType & VB_SIS301) tempcx |= 0x000a;
-- }
-+ if(tempbx & 0x0100) tempcx |= 0x0002;
-
- tempax = 0x000B;
- if(modeflag & DoubleScanMode) tempax |= 0x8000;
-
-- if(tempbx & 0x0200) {
-- tempcx |= 0x0040;
-- if(SiS_Pr->SiS_VBType & VB_SIS301) tempax |= 0x2000;
-- }
--
-- if(SiS_Pr->SiS_VBType & VB_SIS301) {
-- if(SiS_Pr->SiS_VBInfo & SetPALTV) {
-- if(SiS_Pr->SiS_VGAVDE == 480) {
-- tempax = (tempax & 0x00ff) | 0x2000;
-- if(modeflag & DoubleScanMode) tempax |= 0x8000;
-- }
-- }
-- }
-+ if(tempbx & 0x0200) tempcx |= 0x0040;
-
- temp = (tempax & 0xFF00) >> 8;
- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x0B,temp);
-
-- if(tempbx & 0x0400) tempcx |= 0x0600;
-+ if(tempbx & 0x0400) tempcx |= 0x0600;
-
- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x11,0x00); /* 0x11 Vertical Blank End */
-
-- tempax = push1;
-- tempax -= tempbx;
-- tempax >>= 2;
-- push1 = tempax;
-+ tempax = (SiS_Pr->SiS_VGAVT - tempbx) >> 2;
-
-- if(HwDeviceExtension->jChipType >= SIS_315H) {
-- /* TW: 650/30xLV 1.10.6s */
-- if(ModeNo > 0x13) {
-- if(resinfo != 0x09) { /* 1280x1024 */
-- tempax <<= 1;
-- tempbx += tempax;
-- }
-- } else {
-- if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel1400x1050) {
-- tempax <<= 1;
-- tempbx += tempax;
-- }
-- }
-- } else if((resinfo != 0x09) || (SiS_Pr->SiS_VBType & VB_SIS301)) {
-- tempax <<= 1;
-- tempbx += tempax;
-+ if((ModeNo > 0x13) || (HwDeviceExtension->jChipType < SIS_315H)) {
-+ if(resinfo != SIS_RI_1280x1024) {
-+ tempbx += (tempax << 1);
-+ }
-+ } else if(HwDeviceExtension->jChipType >= SIS_315H) {
-+ if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel1400x1050) {
-+ tempbx += (tempax << 1);
-+ }
- }
-
-- if( (SiS_Pr->SiS_VBInfo & SetCRT2ToHiVisionTV) &&
-- (SiS_Pr->SiS_HiVision == 3) ) {
-- tempbx -= 10;
-+ if((SiS_Pr->SiS_VBInfo & SetCRT2ToHiVisionTV) &&
-+ (SiS_Pr->SiS_HiVision == 3)) {
-+ tempbx -= 10;
- } else {
-- if(SiS_Pr->SiS_SetFlag & TVSimuMode) {
-- if(SiS_Pr->SiS_VBInfo & SetPALTV) {
-- if(!(SiS_Pr->SiS_HiVision & 0x03)) {
-- tempbx += 40;
-- if(HwDeviceExtension->jChipType >= SIS_315H) {
-- if(SiS_Pr->SiS_VGAHDE == 800) tempbx += 10;
-- }
-- }
-- }
-- }
-+ if(SiS_Pr->SiS_SetFlag & TVSimuMode) {
-+ if(SiS_Pr->SiS_VBInfo & SetPALTV) {
-+ if(!(SiS_Pr->SiS_HiVision & 0x03)) {
-+ tempbx += 40;
-+ if(HwDeviceExtension->jChipType >= SIS_315H) {
-+ if(SiS_Pr->SiS_VGAHDE == 800) tempbx += 10;
-+ }
-+ }
-+ }
-+ }
- }
-- tempax = push1;
- tempax >>= 2;
- tempax++;
- tempax += tempbx;
- push1 = tempax;
- if(SiS_Pr->SiS_VBInfo & SetPALTV) {
-- if(tempbx <= 513) {
-- if(tempax >= 513) tempbx = 513;
-- }
-+ if(tempbx <= 513) {
-+ if(tempax >= 513) tempbx = 513;
-+ }
- }
- temp = tempbx & 0x00FF;
- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x0C,temp); /* 0x0C Vertical Retrace Start */
-
-- if(!(SiS_Pr->SiS_VBType & VB_SIS301)) {
-- tempbx--;
-- temp = tempbx & 0x00FF;
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x10,temp);
--
-- if(tempbx & 0x0100) tempcx |= 0x0008;
-+ tempbx--;
-+ temp = tempbx & 0x00FF;
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x10,temp);
-
-- if(tempbx & 0x0200) {
-- SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x0B,0x20);
-- }
-+ if(tempbx & 0x0100) tempcx |= 0x0008;
-
-- tempbx++;
-+ if(tempbx & 0x0200) {
-+ SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x0B,0x20);
- }
-+ tempbx++;
-+
- if(tempbx & 0x0100) tempcx |= 0x0004;
- if(tempbx & 0x0200) tempcx |= 0x0080;
- if(tempbx & 0x0400) {
-- if(SiS_Pr->SiS_VBType & VB_SIS301) tempcx |= 0x0800;
-- else tempcx |= 0x0C00;
-+ if(SiS_Pr->SiS_VBType & VB_SIS301) tempcx |= 0x0800;
-+ else tempcx |= 0x0C00;
- }
-
- tempbx = push1;
-- temp = tempbx & 0x00FF;
-- temp &= 0x0F;
-+ temp = tempbx & 0x000F;
- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x0D,temp); /* 0x0D vertical Retrace End */
-
- if(tempbx & 0x0010) tempcx |= 0x2000;
-
- temp = tempcx & 0x00FF;
-- if(SiS_Pr->SiS_VBType & VB_SIS301) {
-- if(SiS_Pr->SiS_VBInfo & SetPALTV) {
-- if(SiS_Pr->SiS_VGAVDE == 480) temp = 0xa3;
-- }
-- }
- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x0A,temp); /* 0x0A CR07 */
-
- temp = (tempcx & 0xFF00) >> 8;
-@@ -1074,8 +1056,8 @@ SiS_SetGroup1_301(SiS_Private *SiS_Pr, U
- temp = (tempax & 0xFF00) >> 8;
- temp = (temp >> 1) & 0x09;
- if(!(SiS_Pr->SiS_VBType & VB_SIS301)) {
-- /* Only use 8 dot clock */
-- temp |= 0x01;
-+ /* Only use 8 dot clock */
-+ temp |= 0x01;
- }
- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x16,temp); /* 0x16 SR01 */
-
-@@ -1084,16 +1066,15 @@ SiS_SetGroup1_301(SiS_Private *SiS_Pr, U
- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x12,0x00); /* 0x12 CR17 */
-
- if(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit) {
-- if(IS_SIS650) {
-- /* TW: 650/30xLV 1.10.6s */
-- if(SiS_GetReg1(SiS_Pr->SiS_Part1Port,0x00) & 0x01) {
-- temp = 0x80;
-- }
-- } else temp = 0x80;
-- } else temp = 0x00;
-+ if(IS_SIS650) {
-+ /* 650/30xLV 1.10.6s */
-+ if(SiS_GetReg1(SiS_Pr->SiS_Part1Port,0x00) & 0x01) {
-+ temp = 0x80;
-+ }
-+ } else temp = 0x80;
-+ } else temp = 0x00;
- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x1A,temp); /* 0x1A SR0E */
-
-- return;
- }
-
- void
-@@ -1108,40 +1089,52 @@ SiS_SetGroup1_LVDS(SiS_Private *SiS_Pr,U
- #endif
- ULONG tempeax=0, tempebx, tempecx, tempvcfact=0;
-
-+ /* This is not supported on LVDS */
-+ if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_PanelCustom) return;
-+ if(SiS_Pr->UseCustomMode) return;
-+
- if(ModeNo <= 0x13) {
-- modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
-- resinfo = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ResInfo;
-+ modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
-+ resinfo = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ResInfo;
- } else {
-- modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
-- resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
-+ modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
-+ resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
- }
-
-- /* TW: Set up Panel Link */
-+ /* Set up Panel Link */
-
- /* 1. Horizontal setup */
-
- tempax = SiS_Pr->SiS_LCDHDES;
-
-- if( (SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480) &&
-- (!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) ) {
-- tempax -= 8;
-+ if((!SiS_Pr->SiS_IF_DEF_FSTN) && (!SiS_Pr->SiS_IF_DEF_DSTN)) {
-+ if( (SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480) &&
-+ (!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) ) {
-+ tempax -= 8;
-+ }
- }
-
- tempcx = SiS_Pr->SiS_HT; /* Horiz. Total */
-
- tempbx = SiS_Pr->SiS_HDE; /* Horiz. Display End */
-
-+ if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480_2 ||
-+ SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480_3) {
-+ tempbx >>= 1;
-+ }
-+
- if(!(SiS_Pr->SiS_LCDInfo & LCDPass11)) {
- if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
-- if((!SiS_Pr->SiS_IF_DEF_DSTN) && (SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel640x480)) {
-- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel800x600) tempbx = 800;
-- else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x600) tempbx = 1024; /* TW */
-- else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) tempbx = 1024;
-- else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1152x768) tempbx = 1152; /* TW */
-- else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x768) tempbx = 1280;
-- else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) tempbx = 1280;
-- else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050) tempbx = 1400;
-- else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1600x1200) tempbx = 1600;
-+ if(SiS_Pr->SiS_IF_DEF_FSTN || SiS_Pr->SiS_IF_DEF_DSTN) {
-+ tempbx = SiS_Pr->PanelXRes;
-+ } else if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel640x480) {
-+ tempbx = SiS_Pr->PanelXRes;
-+ if(SiS_Pr->SiS_CustomT == CUT_BARCO1024) {
-+ tempbx = 800;
-+ if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel800x600) {
-+ tempbx = 1024;
-+ }
-+ }
- }
- }
- }
-@@ -1154,13 +1147,17 @@ SiS_SetGroup1_LVDS(SiS_Private *SiS_Pr,U
- if(tempax >= SiS_Pr->SiS_HT) tempax -= SiS_Pr->SiS_HT;
-
- push2 = tempax;
--
-- if(!(SiS_Pr->SiS_LCDInfo & LCDPass11)) {
-- if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
-- if((!SiS_Pr->SiS_IF_DEF_DSTN) && (SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel640x480)) {
-- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel800x600) tempcx = 0x0028;
-- else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x600) tempcx = 0x0018;
-- else if( (SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) ||
-+
-+ if((!SiS_Pr->SiS_IF_DEF_FSTN) &&
-+ (!SiS_Pr->SiS_IF_DEF_DSTN) &&
-+ (SiS_Pr->SiS_CustomT != CUT_BARCO1366) &&
-+ (SiS_Pr->SiS_CustomT != CUT_BARCO1024)) {
-+ if(!(SiS_Pr->SiS_LCDInfo & LCDPass11)) {
-+ if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
-+ if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel640x480) {
-+ if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel800x600) tempcx = 0x0028;
-+ else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x600) tempcx = 0x0018;
-+ else if( (SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) ||
- (SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1152x768) ) {
- if(HwDeviceExtension->jChipType < SIS_315H) {
- if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
-@@ -1174,11 +1171,12 @@ SiS_SetGroup1_LVDS(SiS_Private *SiS_Pr,U
- } else {
- tempcx = 0x0018;
- }
-+ }
-+ else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x768) tempcx = 0x0028;
-+ else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) tempcx = 0x0030;
-+ else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050) tempcx = 0x0030;
-+ else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1600x1200) tempcx = 0x0040;
- }
-- else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x768) tempcx = 0x0028;
-- else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) tempcx = 0x0030;
-- else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050) tempcx = 0x0030;
-- else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1600x1200) tempcx = 0x0040;
- }
- }
- }
-@@ -1188,14 +1186,17 @@ SiS_SetGroup1_LVDS(SiS_Private *SiS_Pr,U
-
- tempax = tempcx >> 3; /* BPLHRS */
- temp = tempax & 0x00FF;
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x14,temp); /* Part1_14h; TW: Panel Link Horizontal Retrace Start */
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x14,temp); /* Part1_14h; Panel Link Horizontal Retrace Start */
-
- if(SiS_Pr->SiS_LCDInfo & LCDPass11) {
- temp = (tempax & 0x00FF) + 2;
- } else {
- temp = (tempax & 0x00FF) + 10;
- if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
-- if(!SiS_Pr->SiS_IF_DEF_DSTN) {
-+ if((!SiS_Pr->SiS_IF_DEF_DSTN) &&
-+ (!SiS_Pr->SiS_IF_DEF_FSTN) &&
-+ (SiS_Pr->SiS_CustomT != CUT_BARCO1366) &&
-+ (SiS_Pr->SiS_CustomT != CUT_BARCO1024)) {
- if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel640x480) {
- temp += 6;
- if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel800x600) {
-@@ -1219,47 +1220,57 @@ SiS_SetGroup1_LVDS(SiS_Private *SiS_Pr,U
-
- temp &= 0x1F;
- temp |= ((tempcx & 0x0007) << 5);
-- if(SiS_Pr->SiS_IF_DEF_FSTN) temp = 0x20;
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x15,temp); /* Part1_15h; TW: Panel Link Horizontal Retrace End/Skew */
-+#if 0
-+ if(SiS_Pr->SiS_IF_DEF_FSTN) temp = 0x20; /* WRONG? BIOS loads cl, not ah */
-+#endif
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x15,temp); /* Part1_15h; Panel Link Horizontal Retrace End/Skew */
-
- tempbx = push2;
- tempcx = push1; /* lcdhdes */
-
- temp = (tempcx & 0x0007); /* BPLHDESKEW */
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x1A,temp); /* Part1_1Ah; TW: Panel Link Vertical Retrace Start (2:0) */
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x1A,temp); /* Part1_1Ah; Panel Link Vertical Retrace Start (2:0) */
-
- tempcx >>= 3; /* BPLHDES */
- temp = (tempcx & 0x00FF);
-- if(ModeNo == 0x5b) temp--;
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x16,temp); /* Part1_16h; TW: Panel Link Horizontal Display Enable Start */
-+#if 0 /* Not 550 FSTN */
-+ if(HwDeviceExtension->jChipType >= SIS_315H) {
-+ if(ModeNo == 0x5b) temp--; */
-+ }
-+#endif
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x16,temp); /* Part1_16h; Panel Link Horizontal Display Enable Start */
-
-- if(HwDeviceExtension->jChipType < SIS_315H) {
-+ if((HwDeviceExtension->jChipType < SIS_315H) ||
-+ (SiS_Pr->SiS_IF_DEF_FSTN) ||
-+ (SiS_Pr->SiS_IF_DEF_DSTN)) {
- if(tempbx & 0x07) tempbx += 8;
- }
- tempbx >>= 3; /* BPLHDEE */
- temp = tempbx & 0x00FF;
-- if(ModeNo == 0x5b) temp--;
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x17,temp); /* Part1_17h; TW: Panel Link Horizontal Display Enable End */
--
-+#if 0 /* Not 550 FSTN */
-+ if(HwDeviceExtension->jChipType >= SIS_315H) {
-+ if(ModeNo == 0x5b) temp--;
-+ }
-+#endif
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x17,temp); /* Part1_17h; Panel Link Horizontal Display Enable End */
-+
- /* 2. Vertical setup */
-
- if(HwDeviceExtension->jChipType < SIS_315H) {
- tempcx = SiS_Pr->SiS_VGAVT;
- tempbx = SiS_Pr->SiS_VGAVDE;
-- if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
-- if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel640x480) {
-- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel800x600) tempbx = 600;
-- else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x600) tempbx = 600;
-- else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) tempbx = 768;
-- else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1152x768) tempbx = 768;
-- else tempbx = 1024;
-- }
-+ if((SiS_Pr->SiS_CustomT != CUT_BARCO1366) && (SiS_Pr->SiS_CustomT != CUT_BARCO1024)) {
-+ if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
-+ if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel640x480) {
-+ tempbx = SiS_Pr->PanelYRes;
-+ }
-+ }
- }
- tempcx -= tempbx;
-
- } else {
-
-- tempcx = SiS_Pr->SiS_VGAVT - SiS_Pr->SiS_VGAVDE; /* VGAVT-VGAVDE */
-+ tempcx = SiS_Pr->SiS_VGAVT - SiS_Pr->SiS_VGAVDE; /* VGAVT-VGAVDE */
-
- }
-
-@@ -1268,18 +1279,20 @@ SiS_SetGroup1_LVDS(SiS_Private *SiS_Pr,U
-
- tempax = SiS_Pr->SiS_VGAVDE;
-
-- if((SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) && (!SiS_Pr->SiS_IF_DEF_DSTN)) {
-- if( (SiS_Pr->SiS_IF_DEF_TRUMPION == 0) &&
-- (!(SiS_Pr->SiS_LCDInfo & LCDPass11)) &&
-- (SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel640x480) ) {
-- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel800x600) tempax = 600;
-- else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x600) tempax = 600;
-- else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) tempax = 768;
-- else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1152x768) tempax = 768;
-- else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x768) tempax = 768;
-- else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) tempax = 1024;
-- else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050) tempax = 1050;
-- else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1600x1200) tempax = 1200;
-+ if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
-+ if((SiS_Pr->SiS_CustomT == CUT_BARCO1366) || (SiS_Pr->SiS_CustomT == CUT_BARCO1024)) {
-+ if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel640x480) {
-+ tempax = 600;
-+ if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel800x600) {
-+ tempax = 768;
-+ }
-+ }
-+ } else if( (SiS_Pr->SiS_IF_DEF_TRUMPION == 0) &&
-+ (!(SiS_Pr->SiS_LCDInfo & LCDPass11)) &&
-+ ((SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel640x480) ||
-+ (SiS_Pr->SiS_IF_DEF_FSTN) ||
-+ (SiS_Pr->SiS_IF_DEF_DSTN)) ) {
-+ tempax = SiS_Pr->PanelYRes;
- }
- }
-
-@@ -1290,11 +1303,24 @@ SiS_SetGroup1_LVDS(SiS_Private *SiS_Pr,U
-
- tempcx >>= 1;
-
-- if((SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) && (SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel640x480)) {
-- if(!(SiS_Pr->SiS_LCDInfo & LCDPass11)) {
-- if(!SiS_Pr->SiS_IF_DEF_DSTN) {
-- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel800x600) tempcx = 0x0001;
-- else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x600) tempcx = 0x0001;
-+ if((SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) &&
-+ (SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel640x480) &&
-+ (SiS_Pr->SiS_CustomT != CUT_BARCO1366) &&
-+ (SiS_Pr->SiS_CustomT != CUT_BARCO1024)) {
-+ if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480_2 ||
-+ SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480_3) {
-+ tempcx = 0x0017;
-+ } else if(!(SiS_Pr->SiS_LCDInfo & LCDPass11)) {
-+ if(SiS_Pr->SiS_IF_DEF_FSTN || SiS_Pr->SiS_IF_DEF_DSTN) {
-+ if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel800x600) tempcx = 0x0003;
-+ else if((SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) ||
-+ (SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x768)) tempcx = 0x0003;
-+ else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) tempcx = 0x0001;
-+ else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050) tempcx = 0x0001;
-+ else tempcx = 0x0057;
-+ } else {
-+ if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel800x600) tempcx = 0x0001;
-+ else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x600) tempcx = 0x0001;
- else if((SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) ||
- (SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1152x768)) {
- if(HwDeviceExtension->jChipType < SIS_315H) {
-@@ -1304,7 +1330,7 @@ SiS_SetGroup1_LVDS(SiS_Private *SiS_Pr,U
- tempcx = 0x0003;
- #endif
- } else {
-- tempcx = 0x0002; /* TW: A901; sometimes 0x0003; */
-+ tempcx = 0x0002; /* A901; sometimes 0x0003; */
- }
- } else tempcx = 0x0003;
- }
-@@ -1319,26 +1345,32 @@ SiS_SetGroup1_LVDS(SiS_Private *SiS_Pr,U
-
- tempbx += tempcx; /* BPLVRS */
-
-- if(HwDeviceExtension->jChipType < SIS_315H) {
-- tempbx++;
-+ if((HwDeviceExtension->jChipType < SIS_315H) ||
-+ (SiS_Pr->SiS_IF_DEF_FSTN) ||
-+ (SiS_Pr->SiS_IF_DEF_DSTN)) {
-+ tempbx++;
- }
-
- if(tempbx >= SiS_Pr->SiS_VT) tempbx -= SiS_Pr->SiS_VT;
-
- temp = tempbx & 0x00FF;
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x18,temp); /* Part1_18h; TW: Panel Link Vertical Retrace Start */
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x18,temp); /* Part1_18h; Panel Link Vertical Retrace Start */
-
- tempcx >>= 3;
-
-- if(!(SiS_Pr->SiS_LCDInfo & LCDPass11)) {
-+ if((!(SiS_Pr->SiS_LCDInfo & LCDPass11)) &&
-+ (SiS_Pr->SiS_CustomT != CUT_BARCO1366) &&
-+ (SiS_Pr->SiS_CustomT != CUT_BARCO1024)) {
- if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
- if( (HwDeviceExtension->jChipType < SIS_315H) &&
- (SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480) ) tempcx = 0x0001;
-+ else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480_2) tempcx = 0x0002;
-+ else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480_3) tempcx = 0x0002;
- else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel800x600) tempcx = 0x0003;
- else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x600) tempcx = 0x0005;
- else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1152x768) tempcx = 0x0005;
- else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x768) tempcx = 0x0011;
-- else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) tempcx = 0x0005;
-+ else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) tempcx = 0x0005;
- else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050) tempcx = 0x0002;
- else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1600x1200) tempcx = 0x0011;
- else if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel640x480) {
-@@ -1360,26 +1392,36 @@ SiS_SetGroup1_LVDS(SiS_Private *SiS_Pr,U
-
- tempcx = tempcx + tempbx + 1; /* BPLVRE */
- temp = tempcx & 0x000F;
-- SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x19,0xf0,temp); /* Part1_19h; TW: Panel Link Vertical Retrace End (3:0); Misc. */
-+ if(SiS_Pr->SiS_IF_DEF_FSTN ||
-+ SiS_Pr->SiS_IF_DEF_DSTN ||
-+ (SiS_Pr->SiS_CustomT == CUT_BARCO1366) ||
-+ (SiS_Pr->SiS_CustomT == CUT_BARCO1024)) {
-+ temp |= 0x30;
-+ }
-+ SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x19,0xf0,temp); /* Part1_19h; Panel Link Vertical Retrace End (3:0); Misc. */
-
- temp = ((tempbx & 0x0700) >> 8) << 3; /* BPLDESKEW =0 */
-- if(SiS_Pr->SiS_VGAVDE != SiS_Pr->SiS_VDE) temp |= 0x40;
-- if(SiS_Pr->SiS_SetFlag & EnableLVDSDDA) temp |= 0x40;
-+ if(SiS_Pr->SiS_IF_DEF_FSTN || SiS_Pr->SiS_IF_DEF_DSTN) {
-+ if(SiS_Pr->SiS_HDE != 640) {
-+ if(SiS_Pr->SiS_VGAVDE != SiS_Pr->SiS_VDE) temp |= 0x40;
-+ }
-+ } else if(SiS_Pr->SiS_VGAVDE != SiS_Pr->SiS_VDE) temp |= 0x40;
-+ if(SiS_Pr->SiS_SetFlag & EnableLVDSDDA) temp |= 0x40;
- if(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit) {
-- if(HwDeviceExtension->jChipType >= SIS_315H) {
-- if(SiS_GetReg1(SiS_Pr->SiS_Part1Port,0x00) & 0x01) {
-- temp |= 0x80;
-- }
-- } else {
-- if( (HwDeviceExtension->jChipType == SIS_630) ||
-- (HwDeviceExtension->jChipType == SIS_730) ) {
-- if(HwDeviceExtension->jChipRevision >= 0x30) {
-- temp |= 0x80;
-- }
-- }
-- }
-+ if(HwDeviceExtension->jChipType >= SIS_315H) {
-+ if(SiS_GetReg1(SiS_Pr->SiS_Part1Port,0x00) & 0x01) {
-+ temp |= 0x80;
-+ }
-+ } else {
-+ if( (HwDeviceExtension->jChipType == SIS_630) ||
-+ (HwDeviceExtension->jChipType == SIS_730) ) {
-+ if(HwDeviceExtension->jChipRevision >= 0x30) {
-+ temp |= 0x80;
-+ }
-+ }
-+ }
- }
-- SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x1A,0x87,temp); /* Part1_1Ah; TW: Panel Link Control Signal (7:3); Vertical Retrace Start (2:0) */
-+ SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x1A,0x87,temp); /* Part1_1Ah; Panel Link Control Signal (7:3); Vertical Retrace Start (2:0) */
-
- if (HwDeviceExtension->jChipType < SIS_315H) {
-
-@@ -1396,19 +1438,19 @@ SiS_SetGroup1_LVDS(SiS_Private *SiS_Pr,U
- }
-
- temp = (USHORT)(tempebx & 0x00FF);
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x1E,temp); /* Part1_1Eh; TW: Panel Link Vertical Scaling Factor */
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x1E,temp); /* Part1_1Eh; Panel Link Vertical Scaling Factor */
-
- #endif /* SIS300 */
-
- } else {
-
--#ifdef SIS315H /* 310/325 series */
-+#ifdef SIS315H /* 315 series */
-
--#ifdef NEWCH701x
-- SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x1E,0x03);
--#else
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x1E,0x23);
--#endif
-+ if(HwDeviceExtension->jChipType == SIS_740) {
-+ SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x1E,0x03);
-+ } else {
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x1E,0x23);
-+ }
-
- tempeax = SiS_Pr->SiS_VGAVDE << 18;
- temp = (USHORT)(tempeax % (ULONG)SiS_Pr->SiS_VDE);
-@@ -1417,12 +1459,13 @@ SiS_SetGroup1_LVDS(SiS_Private *SiS_Pr,U
- tempebx = tempeax; /* BPLVCFACT */
- tempvcfact = tempeax;
- temp = (USHORT)(tempebx & 0x00FF);
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x37,temp); /* Part1_37h; TW: Panel Link Vertical Scaling Factor */
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x37,temp); /* Part1_37h; Panel Link Vertical Scaling Factor */
- temp = (USHORT)((tempebx & 0x00FF00) >> 8);
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x36,temp); /* Part1_36h; TW: Panel Link Vertical Scaling Factor */
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x36,temp); /* Part1_36h; Panel Link Vertical Scaling Factor */
- temp = (USHORT)((tempebx & 0x00030000) >> 16);
-+ temp &= 0x03;
- if(SiS_Pr->SiS_VDE == SiS_Pr->SiS_VGAVDE) temp |= 0x04;
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x35,temp); /* Part1_35h; TW: Panel Link Vertical Scaling Factor */
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x35,temp); /* Part1_35h; Panel Link Vertical Scaling Factor */
-
- #endif /* SIS315H */
-
-@@ -1434,47 +1477,50 @@ SiS_SetGroup1_LVDS(SiS_Private *SiS_Pr,U
- push1 = temp;
-
- if(!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
-- if(!SiS_Pr->SiS_IF_DEF_DSTN){
-+ if(!SiS_Pr->SiS_IF_DEF_FSTN && !SiS_Pr->SiS_IF_DEF_DSTN) {
- if(HwDeviceExtension->jChipType < SIS_315H) {
- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x600) {
-- if(resinfo == 15) tempcx++;
-+ if(resinfo == SIS_RI_1024x600) tempcx++;
- if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
-- if(resinfo == 7) tempcx++;
-+ if(resinfo == SIS_RI_800x600) tempcx++;
- }
- } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel800x600) {
-- if(resinfo == 7) tempcx++;
-- if(resinfo == 8) tempcx++; /* TW: Doesnt make sense anyway... */
-- } else if(resinfo == 8) tempcx++;
-+ if(resinfo == SIS_RI_800x600) tempcx++;
-+ if(resinfo == SIS_RI_1024x768) tempcx++; /* Doesnt make sense anyway... */
-+ } else if(resinfo == SIS_RI_1024x768) tempcx++;
- } else {
- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel800x600) {
-- if(resinfo == 7) tempcx++;
-+ if(resinfo == SIS_RI_800x600) tempcx++;
- }
- }
- }
- }
-
- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480) {
-- tempcx = SiS_Pr->SiS_VGAVDE;
-- tempbx = SiS_Pr->SiS_VGAVDE - 1;
-+ if((!SiS_Pr->SiS_IF_DEF_FSTN) && (!SiS_Pr->SiS_IF_DEF_DSTN)) {
-+ tempcx = SiS_Pr->SiS_VGAVDE;
-+ tempbx = SiS_Pr->SiS_VGAVDE - 1;
-+ }
- }
-
- temp = ((tempbx & 0x0700) >> 8) << 3;
- temp |= ((tempcx & 0x0700) >> 8);
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x1D,temp); /* Part1_1Dh; TW: Vertical Display Overflow; Control Signal */
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x1D,temp); /* Part1_1Dh; Vertical Display Overflow; Control Signal */
-
- temp = tempbx & 0x00FF;
-- if(SiS_Pr->SiS_IF_DEF_FSTN) temp++;
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x1C,temp); /* Part1_1Ch; TW: Panel Link Vertical Display Enable End */
-+ /* if(SiS_Pr->SiS_IF_DEF_FSTN) temp++; */
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x1C,temp); /* Part1_1Ch; Panel Link Vertical Display Enable End */
-
- temp = tempcx & 0x00FF;
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x1B,temp); /* Part1_1Bh; TW: Panel Link Vertical Display Enable Start */
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x1B,temp); /* Part1_1Bh; Panel Link Vertical Display Enable Start */
-
- /* 3. Additional horizontal setup (scaling, etc) */
-
- tempecx = SiS_Pr->SiS_VGAHDE;
- if(HwDeviceExtension->jChipType >= SIS_315H) {
-- if(modeflag & HalfDCLK)
-- tempecx >>= 1;
-+ if((!SiS_Pr->SiS_IF_DEF_FSTN) && (!SiS_Pr->SiS_IF_DEF_DSTN)) {
-+ if(modeflag & HalfDCLK) tempecx >>= 1;
-+ }
- }
- tempebx = SiS_Pr->SiS_HDE;
- if(tempecx == tempebx) tempeax = 0xFFFF;
-@@ -1484,134 +1530,162 @@ SiS_SetGroup1_LVDS(SiS_Private *SiS_Pr,U
- temp = (USHORT)(tempeax % tempebx);
- tempeax = tempeax / tempebx;
- if(HwDeviceExtension->jChipType >= SIS_315H) {
-- if(temp) tempeax++;
-+ if(temp) tempeax++;
- }
- }
- tempecx = tempeax;
-
- if(HwDeviceExtension->jChipType >= SIS_315H) {
-- tempeax = SiS_Pr->SiS_VGAHDE;
-- if(modeflag & HalfDCLK) tempeax >>= 1;
-- tempeax <<= 16;
-- tempeax = (tempeax / tempecx) - 1;
-+ tempeax = SiS_Pr->SiS_VGAHDE;
-+ if((!SiS_Pr->SiS_IF_DEF_FSTN) && (!SiS_Pr->SiS_IF_DEF_DSTN)) {
-+ if(modeflag & HalfDCLK) tempeax >>= 1;
-+ }
-+ tempeax <<= 16;
-+ tempeax = (tempeax / tempecx) - 1;
- } else {
-- tempeax = ((SiS_Pr->SiS_VGAHT << 16) / tempecx) - 1;
-+ tempeax = ((SiS_Pr->SiS_VGAHT << 16) / tempecx) - 1;
- }
- tempecx <<= 16;
- tempecx |= (tempeax & 0xFFFF);
- temp = (USHORT)(tempecx & 0x00FF);
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x1F,temp); /* Part1_1Fh; TW: Panel Link DDA Operational Number in each horiz. line */
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x1F,temp); /* Part1_1Fh; Panel Link DDA Operational Number in each horiz. line */
-
- tempbx = SiS_Pr->SiS_VDE;
- if(HwDeviceExtension->jChipType >= SIS_315H) {
-- tempeax = (SiS_Pr->SiS_VGAVDE << 18) / tempvcfact;
-- tempbx = (USHORT)(tempeax & 0x0FFFF);
-+ tempeax = (SiS_Pr->SiS_VGAVDE << 18) / tempvcfact;
-+ tempbx = (USHORT)(tempeax & 0x0FFFF);
- } else {
-- tempax = SiS_Pr->SiS_VGAVDE << 6;
-- tempbx = push1;
-- tempbx &= 0x3f;
-- if(tempbx == 0) tempbx = 64;
-- tempax = tempax / tempbx;
-- tempbx = tempax;
-+ tempeax = SiS_Pr->SiS_VGAVDE << 6;
-+ tempbx = push1 & 0x3f;
-+ if(tempbx == 0) tempbx = 64;
-+ tempeax /= tempbx;
-+ tempbx = (USHORT)(tempeax & 0x0FFFF);
- }
- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) tempbx--;
-- if(SiS_Pr->SiS_SetFlag & EnableLVDSDDA) tempbx = 1;
-+ if(SiS_Pr->SiS_SetFlag & EnableLVDSDDA) {
-+ if((!SiS_Pr->SiS_IF_DEF_FSTN) && (!SiS_Pr->SiS_IF_DEF_DSTN)) tempbx = 1;
-+ else if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel640x480) tempbx = 1;
-+ }
-
- temp = ((tempbx & 0xFF00) >> 8) << 3;
- temp |= (USHORT)((tempecx & 0x0700) >> 8);
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x20,temp); /* Part1_20h; TW: Overflow register */
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x20,temp); /* Part1_20h; Overflow register */
-
- temp = tempbx & 0x00FF;
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x21,temp); /* Part1_21h; TW: Panel Link Vertical Accumulator Register */
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x21,temp); /* Part1_21h; Panel Link Vertical Accumulator Register */
-
- tempecx >>= 16; /* BPLHCFACT */
-- if(HwDeviceExtension->jChipType < SIS_315H) {
-- if(modeflag & HalfDCLK) tempecx >>= 1;
-+ if((HwDeviceExtension->jChipType < SIS_315H) || (SiS_Pr->SiS_IF_DEF_FSTN) || (SiS_Pr->SiS_IF_DEF_DSTN)) {
-+ if(modeflag & HalfDCLK) tempecx >>= 1;
- }
- temp = (USHORT)((tempecx & 0xFF00) >> 8);
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x22,temp); /* Part1_22h; TW: Panel Link Horizontal Scaling Factor High */
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x22,temp); /* Part1_22h; Panel Link Horizontal Scaling Factor High */
-
- temp = (USHORT)(tempecx & 0x00FF);
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x23,temp); /* Part1_22h; TW: Panel Link Horizontal Scaling Factor Low */
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x23,temp); /* Part1_22h; Panel Link Horizontal Scaling Factor Low */
-
- /* 630/301B and 630/LVDS do something for 640x480 panels here */
-
- #ifdef SIS315H
-- /* TW: DSTN/FSTN initialisation - hardcoded for 320x480 panel */
-- if(SiS_Pr->SiS_IF_DEF_DSTN) {
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x1E,0x01);
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x25,0x00);
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x26,0x00);
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x27,0x00);
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x28,0x87);
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x29,0x5A);
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x2A,0x4B);
-- SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x44,~0x007,0x03);
-- tempbx = SiS_Pr->SiS_HDE + 64; /*Blps = lcdhdee(lcdhdes+HDE) + 64*/
-- temp = tempbx & 0x00FF;
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x38,temp);
-- temp=((tempbx & 0xFF00) >> 8) << 3;
-- SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x35,~0x078,temp);
-- tempbx += 32; /*Blpe=lBlps+32*/
-- temp = tempbx & 0x00FF;
-- if(SiS_Pr->SiS_IF_DEF_FSTN) temp=0;
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x39,temp);
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x3A,0x00); /*Bflml=0*/
-- SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x3C,~0x007,0x00);
-- tempbx = SiS_Pr->SiS_VDE / 2;
-- temp = tempbx & 0x00FF;
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x3B,temp);
-- temp = ((tempbx & 0xFF00) >> 8) << 3;
-- SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x3C,~0x038,temp);
-- tempeax = SiS_Pr->SiS_HDE << 2; /* BDxFIFOSTOP = (HDE*4)/128 */
-- tempebx = 128;
-- temp = (USHORT)(tempeax % tempebx);
-- tempeax = tempeax / tempebx;
-- if(temp != 0) tempeax++;
-- temp = (USHORT)(tempeax & 0x003F);
-- SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x45,~0x0FF,temp);
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x3F,0x00); /* BDxWadrst0 */
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x3E,0x00);
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x3D,0x10);
-- SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x3C,~0x040,0x00);
-- tempax = SiS_Pr->SiS_HDE >> 4; /* BDxWadroff = HDE*4/8/8 */
-- pushcx = tempax;
-- temp = tempax & 0x00FF;
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x43,temp);
-- temp = ((tempax & 0xFF00) >> 8) << 3;
-- SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x44,~0x0F8,temp);
-- tempax = SiS_Pr->SiS_VDE; /*BDxWadrst1 = BDxWadrst0 + BDxWadroff * VDE */
-- tempeax = (tempax * pushcx);
-- tempebx = 0x00100000 + tempeax;
-- temp = (USHORT)tempebx & 0x000000FF;
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x42,temp);
-- temp = (USHORT)((tempebx & 0x0000FF00)>>8);
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x41,temp);
-- temp = (USHORT)((tempebx & 0x00FF0000)>>16);
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x40,temp);
-- temp = (USHORT)(((tempebx & 0x01000000)>>24) << 7);
-- SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x3C,~0x080,temp);
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x2F,0x03);
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x03,0x50);
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x04,0x00);
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x2F,0x01);
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x13,0x00);
-- SiS_SetReg1(SiS_Pr->SiS_P3c4,0x05,0x86); /* Unlock */
-- SiS_SetReg1(SiS_Pr->SiS_P3c4,0x1e,0x62);
-- if(SiS_Pr->SiS_IF_DEF_FSTN){
-- SiS_SetReg1(SiS_Pr->SiS_P3c4,0x2b,0x1b);
-- SiS_SetReg1(SiS_Pr->SiS_P3c4,0x2c,0xe3);
-- SiS_SetReg1(SiS_Pr->SiS_P3c4,0x1e,0x62);
-- SiS_SetReg1(SiS_Pr->SiS_P3c4,0x2e,0x04);
-- SiS_SetReg1(SiS_Pr->SiS_P3c4,0x2f,0x42);
-- SiS_SetReg1(SiS_Pr->SiS_P3c4,0x32,0x01);
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x2b,0x02);
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x2c,0x00);
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x2d,0x00);
-- }
-- SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x19,0x0f,0x30);
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x1e,0x7d);
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x2e,0xe0);
-+ if(SiS_Pr->SiS_IF_DEF_FSTN || SiS_Pr->SiS_IF_DEF_DSTN) {
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x25,0x00);
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x26,0x00);
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x27,0x00);
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x28,0x87);
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x29,0x5A);
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x2A,0x4B);
-+ SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x44,~0x007,0x03);
-+ tempax = SiS_Pr->SiS_HDE; /* Blps = lcdhdee(lcdhdes+HDE) + 64 */
-+ if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480_2 ||
-+ SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480_3) tempax >>= 1;
-+ tempax += 64;
-+ temp = tempax & 0x00FF;
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x38,temp);
-+ temp = ((tempax & 0xFF00) >> 8) << 3;
-+ SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x35,~0x078,temp);
-+ tempax += 32; /* Blpe=lBlps+32 */
-+ temp = tempax & 0x00FF;
-+ if(SiS_Pr->SiS_IF_DEF_FSTN) temp = 0;
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x39,temp);
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x3A,0x00); /* Bflml=0 */
-+ SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x3C,~0x007,0x00);
-+
-+ tempax = SiS_Pr->SiS_VDE;
-+ if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480_2 ||
-+ SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480_3) tempax >>= 1;
-+ tempax >>= 1;
-+ temp = tempax & 0x00FF;
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x3B,temp);
-+ temp = ((tempax & 0xFF00) >> 8) << 3;
-+ SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x3C,~0x038,temp);
-+
-+ tempeax = SiS_Pr->SiS_HDE;
-+ if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480_2 ||
-+ SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480_3) tempeax >>= 1;
-+ tempeax <<= 2; /* BDxFIFOSTOP = (HDE*4)/128 */
-+ tempebx = 128;
-+ temp = (USHORT)(tempeax % tempebx);
-+ tempeax = tempeax / tempebx;
-+ if(temp) tempeax++;
-+ temp = (USHORT)(tempeax & 0x003F);
-+ SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x45,~0x0FF,temp);
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x3F,0x00); /* BDxWadrst0 */
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x3E,0x00);
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x3D,0x10);
-+ SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x3C,~0x040,0x00);
-+
-+ tempax = SiS_Pr->SiS_HDE;
-+ if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480_2 ||
-+ SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480_3) tempax >>= 1;
-+ tempax >>= 4; /* BDxWadroff = HDE*4/8/8 */
-+ pushcx = tempax;
-+ temp = tempax & 0x00FF;
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x43,temp);
-+ temp = ((tempax & 0xFF00) >> 8) << 3;
-+ SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x44,~0x0F8,temp);
-+
-+ tempax = SiS_Pr->SiS_VDE; /* BDxWadrst1 = BDxWadrst0 + BDxWadroff * VDE */
-+ if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480_2 ||
-+ SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480_3) tempax >>= 1;
-+ tempeax = (tempax * pushcx);
-+ tempebx = 0x00100000 + tempeax;
-+ temp = (USHORT)tempebx & 0x000000FF;
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x42,temp);
-+ temp = (USHORT)((tempebx & 0x0000FF00) >> 8);
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x41,temp);
-+ temp = (USHORT)((tempebx & 0x00FF0000) >> 16);
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x40,temp);
-+ temp = (USHORT)(((tempebx & 0x01000000) >> 24) << 7);
-+ SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x3C,~0x080,temp);
-+
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x2F,0x03);
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x03,0x50);
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x04,0x00);
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x2F,0x01);
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x19,0x38);
-+
-+ if(SiS_Pr->SiS_IF_DEF_FSTN) {
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x2b,0x02);
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x2c,0x00);
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x2d,0x00);
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x35,0x0c);
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x36,0x00);
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x37,0x00);
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x38,0x80);
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x39,0xA0);
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x3a,0x00);
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x3b,0xf0);
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x3c,0x00);
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x3d,0x10);
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x3e,0x00);
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x3f,0x00);
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x40,0x10);
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x41,0x25);
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x42,0x80);
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x43,0x14);
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x44,0x03);
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x45,0x0a);
-+ }
- }
- #endif /* SIS315H */
-
-@@ -1629,7 +1703,7 @@ SiS_CRT2AutoThreshold(SiS_Private *SiS_P
-
-
- #ifdef SIS315H
--/* TW: For LVDS / 302B/30xLV - LCDA (this must only be called on 310/325 series!) */
-+/* For LVDS / 302B/30xLV - LCDA (this must only be called on 315 series!) */
- void
- SiS_SetGroup1_LCDA(SiS_Private *SiS_Pr, USHORT BaseAddr,UCHAR *ROMAddr,USHORT ModeNo,USHORT ModeIdIndex,
- PSIS_HW_DEVICE_INFO HwDeviceExtension,USHORT RefreshRateTableIndex)
-@@ -1638,6 +1712,10 @@ SiS_SetGroup1_LCDA(SiS_Private *SiS_Pr,
- USHORT push1,push2,tempax,tempbx,tempcx,temp;
- ULONG tempeax=0,tempebx,tempecx,tempvcfact;
-
-+ /* This is not supported with LCDA */
-+ if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_PanelCustom) return;
-+ if(SiS_Pr->UseCustomMode) return;
-+
- if(IS_SIS330) {
- SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2D,0x10); /* Xabre 1.01.03 */
- } else if(IS_SIS740) {
-@@ -1645,7 +1723,7 @@ SiS_SetGroup1_LCDA(SiS_Private *SiS_Pr,
- SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x13,0xfb,0x04); /* 740/LVDS */
- SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2D,0x03);
- } else {
-- SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2D,0x10); /* 740/301LV 1.10.1i */
-+ SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2D,0x10); /* 740/301LV, 301BDH */
- }
- } else {
- if(SiS_Pr->SiS_IF_DEF_LVDS == 1) { /* 650/LVDS */
-@@ -1669,10 +1747,7 @@ SiS_SetGroup1_LCDA(SiS_Private *SiS_Pr,
- tempcx = SiS_Pr->SiS_HT;
-
- if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
-- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) tempbx = 1024;
-- else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050) tempbx = 1400;
-- else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1600x1200) tempbx = 1600;
-- else tempbx = 1280;
-+ tempbx = SiS_Pr->PanelXRes;
- }
- tempcx -= tempbx; /* HT-HDE */
- push1 = tempax;
-@@ -1684,7 +1759,7 @@ SiS_SetGroup1_LCDA(SiS_Private *SiS_Pr,
-
- tempcx >>= 2;
-
-- /* TW: 650/30xLV 1.10.6s, 740/LVDS */
-+ /* 650/30xLV 1.10.6s, 740/LVDS */
- if( ((SiS_Pr->SiS_IF_DEF_LVDS == 0) && (SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA)) ||
- ((SiS_Pr->SiS_IF_DEF_LVDS == 1) && (SiS_Pr->SiS_VBInfo & SetCRT2ToLCD)) ) {
- if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel640x480) {
-@@ -1748,13 +1823,10 @@ SiS_SetGroup1_LCDA(SiS_Private *SiS_Pr,
- tempbx = SiS_Pr->SiS_LCDVDES; /* VGAVDES */
- push1 = tempbx;
- if(SiS_Pr->SiS_IF_DEF_TRUMPION == 0) {
-- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) tempax = 768;
-- else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x768) tempax = 768;
-- else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) tempax = 1024;
-- else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050) tempax = 1050;
-- else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1600x1200) tempax = 1200;
-- else tempax = 960;
-- } else tempax = SiS_Pr->SiS_VGAVDE; /* Trumpion */
-+ tempax = SiS_Pr->PanelYRes;
-+ } else {
-+ tempax = SiS_Pr->SiS_VGAVDE;
-+ }
-
- tempbx += tempax;
- tempax = SiS_Pr->SiS_VT; /* VT */
-@@ -1764,7 +1836,7 @@ SiS_SetGroup1_LCDA(SiS_Private *SiS_Pr,
-
- tempcx >>= 2;
-
-- /* TW: 650/30xLV 1.10.6s, 740/LVDS */
-+ /* 650/30xLV 1.10.6s, 740/LVDS */
- if( ((SiS_Pr->SiS_IF_DEF_LVDS == 0) && (SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA)) ||
- ((SiS_Pr->SiS_IF_DEF_LVDS == 1) && (SiS_Pr->SiS_VBInfo & SetCRT2ToLCD)) ) {
- if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel640x480) {
-@@ -1806,7 +1878,7 @@ SiS_SetGroup1_LCDA(SiS_Private *SiS_Pr,
- if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
- SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x19,0xF0,temp);
- } else {
-- /* TW: 650/30xLV 1.10.6s, Xabre */
-+ /* 650/30xLV 1.10.6s, Xabre */
- temp |= 0xC0;
- SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x19,0xF0,temp); /* Part1_19h */
- }
-@@ -1823,7 +1895,7 @@ SiS_SetGroup1_LCDA(SiS_Private *SiS_Pr,
- }
- } else {
- if(IS_SIS650) {
-- /* TW: 650/30xLV 1.10.6s */
-+ /* 650/30xLV 1.10.6s */
- if(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit) {
- if(SiS_GetReg1(SiS_Pr->SiS_Part1Port,0x00) & 0x01) temp |= 0x80;
- }
-@@ -1839,7 +1911,7 @@ SiS_SetGroup1_LCDA(SiS_Private *SiS_Pr,
-
- if(!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel800x600) {
-- if(resinfo == 7) tempcx++;
-+ if(resinfo == SIS_RI_800x600) tempcx++;
- }
- }
- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480) {
-@@ -1925,15 +1997,15 @@ SiS_SetGroup1_LCDA(SiS_Private *SiS_Pr,
- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x23,temp);
-
- #if 0
-- /* TW: Missing code (calles int 2f) (650/302LV 1.10.6s; 1.10.7w doesn't do this) */
-+ /* Missing code (calles int 2f) (650/302LV 1.10.6s; 1.10.7w doesn't do this) */
- if(xxx()) {
- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x0e,0xda);
- }
- #endif
-
-- /* TW: Only for LVDS and 301LV/302LV */
-+ /* Only for LVDS and 301LV/302LV */
- if((SiS_Pr->SiS_IF_DEF_LVDS == 1) || (SiS_Pr->SiS_VBInfo & VB_SIS301LV302LV)){
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x1e,0x20);
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x1e,0x20);
- }
-
- return;
-@@ -1951,10 +2023,10 @@ void SiS_SetCRT2Offset(SiS_Private *SiS_
-
- offset = SiS_GetOffset(SiS_Pr,ROMAddr,ModeNo,ModeIdIndex,RefreshRateTableIndex,
- HwDeviceExtension);
--#if 0
-- if(SiS_Pr->LCDResInfo == 13) offset >>= 1;
-- if(SiS_Pr->LCDResInfo == 12) offset >>= 1;
--#endif
-+
-+ if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480_2 ||
-+ SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480_3) offset >>= 1;
-+
- temp = (UCHAR)(offset & 0xFF);
- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x07,temp);
- temp = (UCHAR)((offset & 0xFF00) >> 8);
-@@ -1976,13 +2048,7 @@ SiS_GetOffset(SiS_Private *SiS_Pr, UCHAR
- } else {
- infoflag = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_InfoFlag;
- modeinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeInfo;
--
-- if(HwDeviceExtension->jChipType < SIS_315H ) {
-- index = (modeinfo >> 4) & 0xFF;
-- } else {
-- index = (modeinfo >> 8) & 0xFF;
-- }
--
-+ index = (modeinfo >> 8) & 0xFF;
- temp = SiS_Pr->SiS_ScreenOffset[index];
- }
-
-@@ -1992,9 +2058,8 @@ SiS_GetOffset(SiS_Private *SiS_Pr, UCHAR
-
- temp *= colordepth;
-
-- /* TW: For 1400x1050 and 856x480 */
-- if( ( ((ModeNo >= 0x26) && (ModeNo <= 0x28)) ||
-- ModeNo == 0x3f ||
-+ if( ( ((ModeNo >= 0x26) && (ModeNo <= 0x28)) ||
-+ ModeNo == 0x3f ||
- ModeNo == 0x42 ||
- ModeNo == 0x45 ) ||
- (SiS_Pr->UseCustomMode && (SiS_Pr->CHDisplay % 16)) ) {
-@@ -2012,7 +2077,8 @@ SiS_GetColorDepth(SiS_Private *SiS_Pr, U
- SHORT index;
- USHORT modeflag;
-
-- if(SiS_Pr->UseCustomMode) {
-+ /* Do NOT check UseCustomMode, will skrew up FIFO */
-+ if(ModeNo == 0xfe) {
- modeflag = SiS_Pr->CModeFlag;
- } else {
- if(ModeNo <= 0x13)
-@@ -2035,7 +2101,11 @@ SiS_SetCRT2Sync(SiS_Private *SiS_Pr, USH
- flag = 0;
- tempbl = 0xC0;
-
-- infoflag = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_InfoFlag;
-+ if(SiS_Pr->UseCustomMode) {
-+ infoflag = SiS_Pr->CInfoFlag;
-+ } else {
-+ infoflag = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_InfoFlag;
-+ }
-
- if(SiS_Pr->SiS_IF_DEF_LVDS == 1) { /* LVDS */
-
-@@ -2044,12 +2114,19 @@ SiS_SetCRT2Sync(SiS_Private *SiS_Pr, USH
- } else if((SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) && (SiS_Pr->SiS_LCDInfo & LCDSync)) {
- tempah = SiS_Pr->SiS_LCDInfo;
- } else tempah = infoflag >> 8;
--
-+
- tempah &= 0xC0;
--
-+
- tempah |= 0x20;
- if(!(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit)) tempah |= 0x10;
-
-+ if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
-+ if((SiS_Pr->SiS_CustomT == CUT_BARCO1366) ||
-+ (SiS_Pr->SiS_CustomT == CUT_BARCO1024)) {
-+ tempah |= 0xc0;
-+ }
-+ }
-+
- if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
- if(HwDeviceExtension->jChipType >= SIS_315H) {
- tempah >>= 3;
-@@ -2079,9 +2156,11 @@ SiS_SetCRT2Sync(SiS_Private *SiS_Pr, USH
- tempah |= 0x20;
- if(!(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit)) tempah |= 0x10;
-
-+#if 0
- if (SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480) {
-- /* TW: BIOS does something here @@@ */
-+ /* BIOS does something here @@@ */
- }
-+#endif
-
- tempah &= 0x3f;
- tempah |= tempbl;
-@@ -2089,16 +2168,11 @@ SiS_SetCRT2Sync(SiS_Private *SiS_Pr, USH
-
- } else { /* 630 - 301 */
-
-- if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
-- tempah = SiS_Pr->SiS_LCDInfo;
-- if(SiS_Pr->SiS_LCDInfo & DontExpandLCDShift) { /* ! */
-- flag = 1;
-- }
-- }
-- if(flag != 1) tempah = infoflag >> 8;
-+ tempah = infoflag >> 8;
- tempah &= 0xC0;
-- tempah |= 0x30;
-- SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x19,0x3F,tempah);
-+ tempah |= 0x20;
-+ if(!(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit)) tempah |= 0x10;
-+ SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x19,0x0F,tempah);
-
- }
-
-@@ -2106,9 +2180,9 @@ SiS_SetCRT2Sync(SiS_Private *SiS_Pr, USH
-
- } else {
-
--#ifdef SIS315H /* ----- 310/325 series ---- */
-+#ifdef SIS315H /* ------- 315 series ------ */
-
-- if(SiS_Pr->SiS_VBType & VB_SIS301LV302LV) { /* 310/325 - 30xLV */
-+ if(SiS_Pr->SiS_VBType & VB_SIS301LV302LV) { /* 315 - 30xLV */
-
- tempah = SiS_GetReg1(SiS_Pr->SiS_P3d4,0x37);
- tempah &= 0xC0;
-@@ -2116,24 +2190,33 @@ SiS_SetCRT2Sync(SiS_Private *SiS_Pr, USH
- if(!(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit)) tempah |= 0x10;
- SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x19,0x0F,tempah);
-
-- } else { /* 310/325 - 301, 301B */
-+ } else { /* 315 - 301, 301B */
-
- tempah = infoflag >> 8;
- tempah &= 0xC0;
-- if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
-- if(SiS_Pr->SiS_LCDInfo & LCDSync) {
-- tempah = SiS_Pr->SiS_LCDInfo;
-- tempah &= 0xC0;
-+ if(!SiS_Pr->UseCustomMode) {
-+ if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
-+ if(SiS_Pr->SiS_LCDInfo & LCDSync) {
-+ tempah = SiS_Pr->SiS_LCDInfo;
-+ tempah &= 0xC0;
-+ }
- }
- }
-
- tempah |= 0x20;
- if(!(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit)) tempah |= 0x10;
-+
- #if 0
- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480) {
-- /* TW: BIOS does something here @@@ */
-+ /* BIOS does something here @@@ */
- }
--#endif
-+#endif
-+
-+ if(SiS_Pr->SiS_VBType & VB_NoLCD) { /* TEST, imitate BIOS bug */
-+ if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
-+ tempah |= 0xc0;
-+ }
-+ }
- SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x19,0x0F,tempah);
-
- }
-@@ -2143,7 +2226,7 @@ SiS_SetCRT2Sync(SiS_Private *SiS_Pr, USH
- }
- }
-
--/* TW: Set CRT2 FIFO on 300/630/730 */
-+/* Set CRT2 FIFO on 300/630/730 */
- #ifdef SIS300
- void
- SiS_SetCRT2FIFO_300(SiS_Private *SiS_Pr, UCHAR *ROMAddr,USHORT ModeNo,
-@@ -2197,7 +2280,7 @@ SiS_SetCRT2FIFO_300(SiS_Private *SiS_Pr,
-
- if(!SiS_Pr->CRT1UsesCustomMode) {
-
-- CRT1ModeNo = SiS_Pr->SiS_CRT1Mode; /* get CRT1 ModeNo */
-+ CRT1ModeNo = SiS_Pr->SiS_CRT1Mode; /* get CRT1 ModeNo */
- SiS_SearchModeID(SiS_Pr,ROMAddr,&CRT1ModeNo,&modeidindex);
- SiS_Pr->SiS_SetFlag &= (~ProgrammingCRT2);
- SiS_Pr->SiS_SelectCRT2Rate = 0;
-@@ -2205,20 +2288,32 @@ SiS_SetCRT2FIFO_300(SiS_Private *SiS_Pr,
- modeidindex,HwDeviceExtension);
-
- if(CRT1ModeNo >= 0x13) {
-- index = SiS_Pr->SiS_RefIndex[refreshratetableindex].Ext_CRTVCLK;
-- index &= 0x3F;
-- VCLK = SiS_Pr->SiS_VCLKData[index].CLOCK; /* Get VCLK */
-- data2 = SiS_Pr->SiS_ModeType - 2;
-+ index = SiS_Pr->SiS_RefIndex[refreshratetableindex].Ext_CRTVCLK;
-+ index &= 0x3F;
-+ VCLK = SiS_Pr->SiS_VCLKData[index].CLOCK; /* Get VCLK */
-+
-+ colorth = SiS_GetColorDepth(SiS_Pr,ROMAddr,CRT1ModeNo,modeidindex); /* Get colordepth */
-+ colorth >>= 1;
-+ if(!colorth) colorth++;
- }
--
-+
- } else {
-
- CRT1ModeNo = 0xfe;
-- VCLK = SiS_Pr->CSRClock; /* Get VCLK */
-- data2 = (SiS_Pr->CModeFlag & ModeInfoFlag) - 2;
--
-- }
--
-+ VCLK = SiS_Pr->CSRClock_CRT1; /* Get VCLK */
-+ data2 = (SiS_Pr->CModeFlag_CRT1 & ModeInfoFlag) - 2;
-+ switch(data2) { /* Get color depth */
-+ case 0 : colorth = 1; break;
-+ case 1 : colorth = 1; break;
-+ case 2 : colorth = 2; break;
-+ case 3 : colorth = 2; break;
-+ case 4 : colorth = 3; break;
-+ case 5 : colorth = 4; break;
-+ default: colorth = 2;
-+ }
-+
-+ }
-+
- if(CRT1ModeNo >= 0x13) {
- if(HwDeviceExtension->jChipType == SIS_300) {
- index = SiS_GetReg1(SiS_Pr->SiS_P3c4,0x3A);
-@@ -2227,22 +2322,8 @@ SiS_SetCRT2FIFO_300(SiS_Private *SiS_Pr,
- }
- index &= 0x07;
- MCLK = SiS_Pr->SiS_MCLKData_0[index].CLOCK; /* Get MCLK */
--
--#ifdef TWDEBUG
-- xf86DrvMsg(0, X_INFO, "FIFO2: CRT1Mode 0x%x VCLK %d MCLK %d modetype-2 = %d\n",
-- CRT1ModeNo, VCLK, MCLK, data2);
--#endif
--
-- switch(data2) { /* Get color depth */
-- case 0 : colorth = 1; break;
-- case 1 : colorth = 1; break;
-- case 2 : colorth = 2; break;
-- case 3 : colorth = 2; break;
-- case 4 : colorth = 3; break;
-- case 5 : colorth = 4; break;
-- default: colorth = 2; break;
-- }
-- data2 = (colorth * VCLK) / MCLK;
-+
-+ data2 = (colorth * VCLK) / MCLK;
-
- temp = SiS_GetReg1(SiS_Pr->SiS_P3c4,0x14);
- temp = ((temp & 0x00FF) >> 6) << 1;
-@@ -2252,22 +2333,12 @@ SiS_SetCRT2FIFO_300(SiS_Private *SiS_Pr,
-
- data2 = temp - data2;
-
--#ifdef TWDEBUG
-- xf86DrvMsg(0, X_INFO, "FIFO2: data2 (step1) = %d\n",
-- data2);
--#endif
--
- if((28 * 16) % data2) {
- data2 = (28 * 16) / data2;
- data2++;
- } else {
- data2 = (28 * 16) / data2;
- }
--
--#ifdef TWDEBUG
-- xf86DrvMsg(0, X_INFO, "FIFO2: data2 (step2) = %d\n",
-- data2);
--#endif
-
- if(HwDeviceExtension->jChipType == SIS_300) {
-
-@@ -2313,10 +2384,6 @@ SiS_SetCRT2FIFO_300(SiS_Private *SiS_Pr,
- temp &= 0x0F;
- tempal |= temp;
-
--#ifdef TWDEBUG
-- xf86DrvMsg(0, X_INFO, "FIFO2: Latencyfactorindex = 0x%x\n", tempal);
--#endif
--
- tempbx = tempal; /* BIOS BUG (2.04.5d, 2.04.6a use ah here, which is unset!) */
- tempbx = 0; /* -- do it like the BIOS anyway... */
- tempax = tempbx;
-@@ -2341,7 +2408,7 @@ SiS_SetCRT2FIFO_300(SiS_Private *SiS_Pr,
- SiS_SetReg4(0xcf8,0x800000A0);
- eax = SiS_GetReg3(0xcfc);
- #else
-- /* TW: We use pci functions X offers. We use tag 0, because
-+ /* We use pci functions X offers. We use tag 0, because
- * we want to read/write to the host bridge (which is always
- * 00:00.0 on 630, 730 and 540), not the VGA device.
- */
-@@ -2368,43 +2435,41 @@ SiS_SetCRT2FIFO_300(SiS_Private *SiS_Pr,
- if(!(temp & 0x80)) data += 5;
- }
-
--#ifdef TWDEBUG
-- xf86DrvMsg(0, X_INFO, "FIFO2: latencyfactor (CRT1) = %d\n", data);
--#endif
--
- data += data2; /* CRT1 Request Period */
-
--#ifdef TWDEBUG
-- xf86DrvMsg(0, X_INFO, "FIFO2: CRT1 request period = %d\n", data);
--#endif
--
-- CRT2ModeNo = ModeNo;
- SiS_Pr->SiS_SetFlag |= ProgrammingCRT2;
- SiS_Pr->SiS_SelectCRT2Rate = SelectRate_backup;
-- SiS_SearchModeID(SiS_Pr,ROMAddr,&CRT2ModeNo,&modeidindex);
-
-- refreshratetableindex = SiS_GetRatePtrCRT2(SiS_Pr,ROMAddr,CRT2ModeNo,
-- modeidindex,HwDeviceExtension);
-+ if(!SiS_Pr->UseCustomMode) {
-+
-+ CRT2ModeNo = ModeNo;
-+ SiS_SearchModeID(SiS_Pr,ROMAddr,&CRT2ModeNo,&modeidindex);
-+
-+ refreshratetableindex = SiS_GetRatePtrCRT2(SiS_Pr,ROMAddr,CRT2ModeNo,
-+ modeidindex,HwDeviceExtension);
-+
-+ index = SiS_GetVCLK2Ptr(SiS_Pr,ROMAddr,CRT2ModeNo,modeidindex,
-+ refreshratetableindex,HwDeviceExtension);
-+ VCLK = SiS_Pr->SiS_VCLKData[index].CLOCK; /* Get VCLK */
-+
-+ if((SiS_Pr->SiS_CustomT == CUT_BARCO1366) || (SiS_Pr->SiS_CustomT == CUT_BARCO1024)) {
-+ if((ROMAddr) && SiS_Pr->SiS_UseROM) {
-+ if(ROMAddr[0x220] & 0x01) {
-+ VCLK = ROMAddr[0x229] | (ROMAddr[0x22a] << 8);
-+ }
-+ }
-+ }
-+
-+ } else {
-+
-+ CRT2ModeNo = 0xfe;
-+ VCLK = SiS_Pr->CSRClock; /* Get VCLK */
-
-- index = SiS_GetVCLK2Ptr(SiS_Pr,ROMAddr,CRT2ModeNo,modeidindex,
-- refreshratetableindex,HwDeviceExtension);
-- VCLK = SiS_Pr->SiS_VCLKData[index].CLOCK; /* Get VCLK */
--
-- data2 = SiS_Pr->SiS_ModeType - 2;
-- switch(data2) { /* Get color depth */
-- case 0 : colorth = 1; break;
-- case 1 : colorth = 1; break;
-- case 2 : colorth = 2; break;
-- case 3 : colorth = 2; break;
-- case 4 : colorth = 3; break;
-- case 5 : colorth = 4; break;
-- default: colorth = 2; break;
- }
--
--#ifdef TWDEBUG
-- xf86DrvMsg(0, X_INFO, "FIFO2: CRT2Mode 0x%x VCLK %d MCLK %d modetype-2 = %d, colorth %d\n",
-- CRT2ModeNo, VCLK, MCLK, data2, colorth);
--#endif
-+
-+ colorth = SiS_GetColorDepth(SiS_Pr,ROMAddr,CRT2ModeNo,modeidindex); /* Get colordepth */
-+ colorth >>= 1;
-+ if(!colorth) colorth++;
-
- data = data * VCLK * colorth;
- if(data % (MCLK << 4)) {
-@@ -2414,10 +2479,6 @@ SiS_SetCRT2FIFO_300(SiS_Private *SiS_Pr,
- data = data / (MCLK << 4);
- }
-
--#ifdef TWDEBUG
-- xf86DrvMsg(0, X_INFO, "FIFO2: data (unclipped) = 0x%x\n", data);
--#endif
--
- if(data <= 6) data = 6;
- if(data > 0x14) data = 0x14;
-
-@@ -2456,13 +2517,13 @@ SiS_SetCRT2FIFO_300(SiS_Private *SiS_Pr,
- }
- #endif
-
--/* TW: Set FIFO on 310/325/330 series */
-+/* Set FIFO on 315/330 series */
- #ifdef SIS315H
- void
- SiS_SetCRT2FIFO_310(SiS_Private *SiS_Pr, UCHAR *ROMAddr,USHORT ModeNo,
- PSIS_HW_DEVICE_INFO HwDeviceExtension)
- {
--
-+#if 0 /* This code is obsolete */
- UCHAR CombCode[] = { 1, 1, 1, 4, 3, 1, 3, 4,
- 4, 1, 4, 4, 5, 1, 5, 4};
- UCHAR CRT2ThLow[] = { 39, 63, 55, 79, 78,102, 90,114,
-@@ -2474,11 +2535,13 @@ SiS_SetCRT2FIFO_310(SiS_Private *SiS_Pr,
- USHORT ModeIdIndex;
- USHORT RefreshRateTableIndex;
- USHORT SelectRate_backup;
--
-+
- SelectRate_backup = SiS_Pr->SiS_SelectCRT2Rate;
--
-+#endif
-+
- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x01,0x3B);
-
-+#if 0
- if(!SiS_Pr->CRT1UsesCustomMode) {
-
- CRT1ModeNo = SiS_Pr->SiS_CRT1Mode; /* get CRT1 ModeNo */
-@@ -2489,28 +2552,27 @@ SiS_SetCRT2FIFO_310(SiS_Private *SiS_Pr,
-
- /* Get REFIndex for crt1 refreshrate */
- RefreshRateTableIndex = SiS_GetRatePtrCRT2(SiS_Pr,ROMAddr,CRT1ModeNo,
-- ModeIdIndex,HwDeviceExtension);
-+ ModeIdIndex,HwDeviceExtension);
-+ index = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRTVCLK;
-+ tempax = SiS_Pr->SiS_VCLKData[index].CLOCK; /* Get VCLK */
-
-- index = SiS_GetVCLK2Ptr(SiS_Pr,ROMAddr,CRT1ModeNo,ModeIdIndex,
-- RefreshRateTableIndex,HwDeviceExtension);
-- tempax = SiS_Pr->SiS_VCLKData[index].CLOCK; /* Get VCLK */
--
- tempbx = SiS_GetColorDepth(SiS_Pr,ROMAddr,CRT1ModeNo,ModeIdIndex); /* Get colordepth */
- tempbx >>= 1;
-- if(!tempbx) tempbx++;
--
-+ if(!tempbx) tempbx++;
-+
- } else {
--
-- tempax = SiS_Pr->CSRClock; /* Get VCLK */
-- tempbx = (SiS_Pr->CModeFlag & ModeInfoFlag) - 2;
-+
-+ CRT1ModeNo = 0xfe;
-+ tempax = SiS_Pr->CSRClock_CRT1; /* Get VCLK */
-+ tempbx = (SiS_Pr->CModeFlag_CRT1 & ModeInfoFlag) - 2;
- switch(tempbx) { /* Get color depth */
-- case 0 : tempbx = 1; break;
-- case 1 : tempbx = 1; break;
-- case 2 : tempbx = 2; break;
-- case 3 : tempbx = 2; break;
-- case 4 : tempbx = 3; break;
-- case 5 : tempbx = 4; break;
-- default: tempbx = 2; break;
-+ case 0 : tempbx = 1; break;
-+ case 1 : tempbx = 1; break;
-+ case 2 : tempbx = 2; break;
-+ case 3 : tempbx = 2; break;
-+ case 4 : tempbx = 3; break;
-+ case 5 : tempbx = 4; break;
-+ default: tempbx = 2;
- }
-
- }
-@@ -2523,13 +2585,6 @@ SiS_SetCRT2FIFO_310(SiS_Private *SiS_Pr,
-
- tempbx = tempax;
-
--#if 0 /* TW: BIOS code is skrewed */
-- if(SiS_GetReg1(SiS_Pr->SiS_P3c4,0x14) & 0x02) {
-- tempax = 16;
-- } else {
-- tempax = 8;
-- }
--#endif
- tempax = 16;
-
- tempax -= tempbx;
-@@ -2556,24 +2611,33 @@ SiS_SetCRT2FIFO_310(SiS_Private *SiS_Pr,
-
- tempcx += temp3; /* CRT1 Request Period */
-
-- CRT2ModeNo = ModeNo; /* get CRT2 ModeNo */
-- SiS_SearchModeID(SiS_Pr,ROMAddr,&CRT2ModeNo,&ModeIdIndex); /* Get ModeID Table */
--
- SiS_Pr->SiS_SetFlag |= ProgrammingCRT2;
- SiS_Pr->SiS_SelectCRT2Rate = SelectRate_backup;
-
-- RefreshRateTableIndex = SiS_GetRatePtrCRT2(SiS_Pr,ROMAddr,CRT2ModeNo,
-- ModeIdIndex,HwDeviceExtension);
-+ if(!SiS_Pr->UseCustomMode) {
-+
-+ CRT2ModeNo = ModeNo; /* get CRT2 ModeNo */
-+ SiS_SearchModeID(SiS_Pr,ROMAddr,&CRT2ModeNo,&ModeIdIndex);
-+
-+ RefreshRateTableIndex = SiS_GetRatePtrCRT2(SiS_Pr,ROMAddr,CRT2ModeNo,
-+ ModeIdIndex,HwDeviceExtension);
-+
-+ index = SiS_GetVCLK2Ptr(SiS_Pr,ROMAddr,CRT2ModeNo,ModeIdIndex,
-+ RefreshRateTableIndex,HwDeviceExtension);
-+ if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
-+ tempax = SiS_Pr->SiS_VCLKData[index].CLOCK; /* Get VCLK */
-+ } else {
-+ tempax = SiS_Pr->SiS_VBVCLKData[index].CLOCK;
-+ }
-
-- index = SiS_GetVCLK2Ptr(SiS_Pr,ROMAddr,CRT2ModeNo,ModeIdIndex,
-- RefreshRateTableIndex,HwDeviceExtension);
-- if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
-- tempax = SiS_Pr->SiS_VCLKData[index].CLOCK; /* Get VCLK */
- } else {
-- tempax = SiS_Pr->SiS_VBVCLKData[index].CLOCK; /* Get VCLK */
-+
-+ CRT2ModeNo = 0xfe; /* Get VCLK */
-+ tempax = SiS_Pr->CSRClock;
-+
- }
-
-- tempbx = SiS_GetColorDepth(SiS_Pr,ROMAddr,CRT2ModeNo,ModeIdIndex); /* Get colordepth */
-+ tempbx = SiS_GetColorDepth(SiS_Pr,ROMAddr,CRT2ModeNo,ModeIdIndex); /* Get colordepth */
- tempbx >>= 1;
- if(!tempbx) tempbx++;
-
-@@ -2590,12 +2654,16 @@ SiS_SetCRT2FIFO_310(SiS_Private *SiS_Pr,
-
- if (tempax > 0x37) tempax = 0x37;
-
-- /* TW: 650/LVDS (1.10.07, 1.10.00), 650/301LV, 740, 330 overrule calculated value; 315 does not */
-+ /* 650/LVDS, 650/301LV, 740, 330 overrule calculated value; 315 does not */
- if(HwDeviceExtension->jChipType >= SIS_650) {
- tempax = 0x04;
- }
--
- SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x02,~0x3F,tempax);
-+#else
-+
-+ SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x02,~0x3F,0x04);
-+
-+#endif
- }
-
- USHORT
-@@ -2611,9 +2679,10 @@ SiS_GetMCLK(SiS_Private *SiS_Pr, UCHAR *
- return(SiS_Pr->SiS_MCLKData_0[index].CLOCK);
- }
- }
-+
- #endif
-
--/* TW: Checked against 650/LVDS 1.10.07 BIOS */
-+/* Checked against 650/LVDS 1.10.07 BIOS */
- void
- SiS_GetLVDSDesData(SiS_Private *SiS_Pr, UCHAR *ROMAddr,USHORT ModeNo,USHORT ModeIdIndex,
- USHORT RefreshRateTableIndex,
-@@ -2623,6 +2692,13 @@ SiS_GetLVDSDesData(SiS_Private *SiS_Pr,
- USHORT PanelIndex,ResIndex;
- const SiS_LVDSDesStruct *PanelDesPtr = NULL;
-
-+ if((SiS_Pr->UseCustomMode) ||
-+ (SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_PanelCustom)) {
-+ SiS_Pr->SiS_LCDHDES = 0;
-+ SiS_Pr->SiS_LCDVDES = 0;
-+ return;
-+ }
-+
- if((SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) && (SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) ) {
-
- #ifdef SIS315H
-@@ -2689,11 +2765,11 @@ SiS_GetLVDSDesData(SiS_Private *SiS_Pr,
- case 52: PanelDesPtr = SiS_Pr->SiS_CHTVUPALDesData; break;
- case 53: PanelDesPtr = SiS_Pr->SiS_CHTVOPALDesData; break;
- default:
-- if(HwDeviceExtension->jChipType < SIS_315H)
-- PanelDesPtr = SiS_Pr->SiS_PanelType0e_1;
-- else
-- PanelDesPtr = SiS_Pr->SiS_PanelType01_1;
-- break;
-+ if(HwDeviceExtension->jChipType < SIS_315H)
-+ PanelDesPtr = SiS_Pr->SiS_PanelType0e_1;
-+ else
-+ PanelDesPtr = SiS_Pr->SiS_PanelType01_1;
-+ break;
- }
- }
- SiS_Pr->SiS_LCDHDES = (PanelDesPtr+ResIndex)->LCDHDES;
-@@ -2710,7 +2786,7 @@ SiS_GetLVDSDesData(SiS_Private *SiS_Pr,
- } else {
- if(!(SiS_Pr->SiS_SetFlag & SetDOSMode)) {
- if( (HwDeviceExtension->jChipType < SIS_315H) ||
-- (SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel1280x1024) ) {
-+ (SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel1280x1024) ) {
- if(SiS_Pr->SiS_LCDResInfo >= SiS_Pr->SiS_Panel1024x768){
- if(ModeNo <= 0x13) {
- modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
-@@ -2737,7 +2813,7 @@ SiS_GetLVDSDesData(SiS_Private *SiS_Pr,
- }
- }
- }
-- return;
-+
- }
-
- void
-@@ -2757,11 +2833,11 @@ SiS_GetLVDSDesPtr(SiS_Private *SiS_Pr, U
-
- tempbx = 0;
- if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
-- if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD)) {
-+ if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
- tempbx = 50;
- if((SiS_Pr->SiS_VBInfo & SetPALTV) && (!SiS_Pr->SiS_CHPALM)) tempbx += 2;
- if(SiS_Pr->SiS_VBInfo & SetCHTVOverScan) tempbx += 1;
-- /* TW: Nothing special needed for SOverscan */
-+ /* Nothing special needed for SOverscan */
- /* PALM uses NTSC data, PALN uses PAL data */
- }
- }
-@@ -2773,7 +2849,7 @@ SiS_GetLVDSDesPtr(SiS_Private *SiS_Pr, U
- if(modeflag & HalfDCLK) tempbx++;
- }
- }
-- /* TW: 630/LVDS and 650/LVDS (1.10.07) BIOS */
-+ /* 630/LVDS and 650/LVDS (1.10.07) BIOS */
- if(SiS_Pr->SiS_SetFlag & SetDOSMode) {
- if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel640x480) {
- tempal = 0x07;
-@@ -2833,14 +2909,13 @@ SiS_SetCRT2ModeRegs(SiS_Private *SiS_Pr,
- }
- }
-
-- /* TW: BIOS does not do this (neither 301 nor LVDS) */
-+ /* BIOS does not do this (neither 301 nor LVDS) */
- /* (But it's harmless; see SetCRT2Offset) */
- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x03,0x00); /* fix write part1 index 0 BTDRAM bit Bug */
-
-- /* TW: Removed 301B302B301LV302LV check here to match 650/LVDS BIOS */
- if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
-
-- /* TW: 1. for LVDS/302B/302LV **LCDA** */
-+ /* 1. for LVDS/302B/302LV **LCDA** */
-
- SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x00,0xAF,0x40); /* FUNCTION CONTROL */
- SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2E,0xF7);
-@@ -2855,23 +2930,23 @@ SiS_SetCRT2ModeRegs(SiS_Private *SiS_Pr,
-
- #ifdef SIS300 /* ---- 300 series ---- */
-
-- /* For 301BDH: */
-+ /* For 301BDH: (with LCD via LVDS) */
- if(SiS_Pr->SiS_VBType & VB_NoLCD) {
-- temp = SiS_GetReg1(SiS_Pr->SiS_P3c4,0x32);
-- temp &= 0xef;
-- temp |= 0x02;
-- if((SiS_Pr->SiS_VBInfo & SetCRT2ToTV) || (SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC)) {
-- temp |= 0x10;
-- temp &= 0xfd;
-- }
-- SiS_SetReg1(SiS_Pr->SiS_P3c4,0x32,temp);
-+ temp = SiS_GetReg1(SiS_Pr->SiS_P3c4,0x32);
-+ temp &= 0xef;
-+ temp |= 0x02;
-+ if((SiS_Pr->SiS_VBInfo & SetCRT2ToTV) || (SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC)) {
-+ temp |= 0x10;
-+ temp &= 0xfd;
-+ }
-+ SiS_SetReg1(SiS_Pr->SiS_P3c4,0x32,temp);
- }
-
- if(ModeNo > 0x13) {
-- tempcl -= ModeVGA;
-- if((tempcl > 0) || (tempcl == 0)) { /* TW: tempcl is USHORT -> always true! */
-- tempah = ((0x10 >> tempcl) | 0x80);
-- }
-+ tempcl -= ModeVGA;
-+ if((tempcl > 0) || (tempcl == 0)) { /* tempcl is USHORT -> always true! */
-+ tempah = ((0x10 >> tempcl) | 0x80);
-+ }
- } else tempah = 0x80;
-
- if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) tempah ^= 0xA0;
-@@ -2880,7 +2955,7 @@ SiS_SetCRT2ModeRegs(SiS_Private *SiS_Pr,
-
- } else {
-
--#ifdef SIS315H /* ---- 310/325/330 series ---- */
-+#ifdef SIS315H /* ------- 315/330 series ------ */
-
- if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
- if(SiS_Pr->SiS_VBInfo & CRT2DisplayFlag) {
-@@ -2889,12 +2964,12 @@ SiS_SetCRT2ModeRegs(SiS_Private *SiS_Pr,
- }
-
- if(ModeNo > 0x13) {
-- tempcl -= ModeVGA;
-- if((tempcl > 0) || (tempcl == 0)) { /* TW: tempcl is USHORT -> always true! */
-- tempah = (0x08 >> tempcl);
-- if (tempah == 0) tempah = 1;
-- tempah |= 0x40;
-- }
-+ tempcl -= ModeVGA;
-+ if((tempcl > 0) || (tempcl == 0)) { /* tempcl is USHORT -> always true! */
-+ tempah = (0x08 >> tempcl);
-+ if (tempah == 0) tempah = 1;
-+ tempah |= 0x40;
-+ }
- } else tempah = 0x40;
-
- if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) tempah ^= 0x50;
-@@ -2921,7 +2996,7 @@ SiS_SetCRT2ModeRegs(SiS_Private *SiS_Pr,
-
- if(SiS_Pr->SiS_IF_DEF_LVDS == 0) {
-
-- /* TW: 2. for 301 (301B, 302B 301LV, 302LV non-LCDA) */
-+ /* 2. for 301 (301B, 302B 301LV, 302LV non-LCDA) */
-
- tempah = 0x01;
- if(!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
-@@ -2938,7 +3013,7 @@ SiS_SetCRT2ModeRegs(SiS_Private *SiS_Pr,
-
- if(HwDeviceExtension->jChipType < SIS_315H) {
-
-- /* --- 300 series --- */
-+ /* ---- 300 series ---- */
-
- tempah = (tempah << 5) & 0xFF;
- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x01,tempah);
-@@ -2946,7 +3021,7 @@ SiS_SetCRT2ModeRegs(SiS_Private *SiS_Pr,
-
- } else {
-
-- /* --- 310 series --- */
-+ /* ---- 315 series ---- */
-
- SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2E,0xF8,tempah);
-
-@@ -2956,9 +3031,9 @@ SiS_SetCRT2ModeRegs(SiS_Private *SiS_Pr,
- tempah |= 0x10;
- }
-
-- /* TW: 630/301 BIOS */
- if((HwDeviceExtension->jChipType < SIS_315H) && (SiS_Pr->SiS_VBType & VB_SIS301)) {
-- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) {
-+ if((SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) ||
-+ (SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x960)) {
- tempah |= 0x80;
- }
- } else {
-@@ -2996,28 +3071,31 @@ SiS_SetCRT2ModeRegs(SiS_Private *SiS_Pr,
- }
- }
- }
-- /* TW: For 302LV dual-channel */
-+
-+ /* For 302LV dual-channel */
- if(HwDeviceExtension->jChipType >= SIS_315H) {
-- if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
-- if(SiS_GetReg1(SiS_Pr->SiS_P3d4,0x39) & 0x04)
-- tempah |= 0x40;
-- }
-+ if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
-+ if(SiS_GetReg1(SiS_Pr->SiS_P3d4,0x39) & 0x04)
-+ tempah |= 0x40;
-+ }
- }
-
- if((SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) ||
-- (SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x960)) {
-- tempah |= 0x80;
-+ (SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x960) ||
-+ ((SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_PanelCustom) &&
-+ (SiS_Pr->CP_MaxX >= 1280) && (SiS_Pr->CP_MaxY >= 960))) {
-+ tempah |= 0x80;
- }
-
- SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x0C,tempah);
-
- } else {
-
-- /* TW: 3. for LVDS */
-+ /* 3. for LVDS */
-
- if(HwDeviceExtension->jChipType >= SIS_315H) {
-
-- /* TW: Inserted this entire section (BIOS 650/LVDS); added ModeType check
-+ /* Inserted this entire section (BIOS 650/LVDS); added ModeType check
- * (LVDS can only be slave in 8bpp modes)
- */
- tempah = 0x80;
-@@ -3043,7 +3121,7 @@ SiS_SetCRT2ModeRegs(SiS_Private *SiS_Pr,
-
- } else {
-
-- /* TW: (added ModeType check) */
-+ /* (added ModeType check) */
- tempah = 0;
- if( (!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) && (SiS_Pr->SiS_ModeType > ModeVGA) ) {
- tempah |= 0x02;
-@@ -3060,50 +3138,69 @@ SiS_SetCRT2ModeRegs(SiS_Private *SiS_Pr,
-
- }
-
-- /* TW: Inserted the entire following section */
-+ /* Inserted the entire following section */
-
- if(SiS_Pr->SiS_IF_DEF_LVDS == 0) {
-
- if(HwDeviceExtension->jChipType >= SIS_315H) {
-
- #ifdef SIS315H
-+
-+ unsigned char bridgerev = SiS_GetReg1(SiS_Pr->SiS_Part4Port,0x01);;
-+
-+ /* The following is nearly unpreditable and varies from machine
-+ * to machine. Especially the 301DH seems to be a real trouble
-+ * maker. Some BIOSes simply set the registers (like in the
-+ * NoLCD-if-statements here), some set them according to the
-+ * LCDA stuff. It is very likely that some machines are not
-+ * treated correctly in the following, very case-orientated
-+ * code. What do I do then...?
-+ */
-+
-+ /* 740 variants match for 30xB, 301B-DH, 30xLV */
-+
- if(!(IS_SIS740)) {
- tempah = 0x04; /* For all bridges */
- tempbl = 0xfb;
- if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA)) {
- tempah = 0x00;
-- if(SiS_IsDualEdge(SiS_Pr, HwDeviceExtension, BaseAddr))
-+ if(SiS_IsDualEdge(SiS_Pr, HwDeviceExtension, BaseAddr)) {
- tempbl = 0xff;
-+ }
- }
- SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x13,tempbl,tempah);
- }
--
-- if(IS_SIS740) {
-+
-+ /* The following two are responsible for eventually wrong colors
-+ * in TV output. The DH (VB_NoLCD) conditions are unknown; the
-+ * b0 was found in some 651 machine (Pim); the b1 version in a
-+ * 650 box (Jake). What is the criteria?
-+ */
-+
-+ if(IS_SIS740) {
- tempah = 0x30;
- tempbl = 0xcf;
- if(SiS_Pr->SiS_VBInfo & DisableCRT2Display) {
- tempah = 0x00;
- }
-- SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2c,tempbl,tempah);
-+ SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2c,tempbl,tempah);
-+ } else if(SiS_Pr->SiS_VBType & VB_SIS301) {
-+ /* Fixes "TV-blue-bug" on 315+301 */
-+ SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2c,0xCF); /* For 301 */
-+ } else if(SiS_Pr->SiS_VBType & VB_SIS301LV302LV) {
-+ SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2c,0xCF,0x30); /* For 30xLV */
-+ } else if((SiS_Pr->SiS_VBType & VB_NoLCD) && (bridgerev == 0xb0)) {
-+ SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2c,0xCF,0x30); /* For 30xB-DH rev b0 (or "DH on 651"?) */
- } else {
-- /* TW: This in order to fix "TV-blue-bug" on 315+301 */
-- if(SiS_Pr->SiS_VBType & VB_SIS301) {
-- SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2c,0xCF); /* For 301 */
-- } else {
-- if(SiS_Pr->SiS_VBType & VB_SIS301LV302LV) {
-- SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2c,0xCF,0x30); /* For 30xLV */
-- } else {
-- tempah = 0x30; /* For 301B */
-- tempbl = 0xcf;
-- if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA)) {
-- tempah = 0x00;
-- if(SiS_IsDualEdge(SiS_Pr, HwDeviceExtension, BaseAddr)) {
-- tempbl = 0xff;
-- }
-- }
-- SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2c,tempbl,tempah);
-+ tempah = 0x30; /* For 30xB (and 301BDH rev b1) */
-+ tempbl = 0xcf;
-+ if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA)) {
-+ tempah = 0x00;
-+ if(SiS_IsDualEdge(SiS_Pr, HwDeviceExtension, BaseAddr)) {
-+ tempbl = 0xff;
- }
- }
-+ SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2c,tempbl,tempah);
- }
-
- if(IS_SIS740) {
-@@ -3111,25 +3208,25 @@ SiS_SetCRT2ModeRegs(SiS_Private *SiS_Pr,
- tempbl = 0x3f;
- if(SiS_Pr->SiS_VBInfo & DisableCRT2Display) {
- tempah = 0x00;
-- }
-- SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x21,tempbl,tempah);
-+ }
-+ SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x21,tempbl,tempah);
-+ } else if(SiS_Pr->SiS_VBType & VB_SIS301LV302LV) {
-+ SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x21,0x3f,0xc0); /* For 30xLV */
-+ } else if((SiS_Pr->SiS_VBType & VB_NoLCD) && (bridgerev == 0xb0)) {
-+ SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x21,0x3f,0xc0); /* For 30xB-DH rev b0 (or "DH on 651"? */
- } else {
-- if(SiS_Pr->SiS_VBType & VB_SIS301LV302LV) { /* For 30xLV */
-- SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x21,0x3f,0xc0);
-- } else { /* For 301, 301B */
-- tempah = 0xc0;
-- tempbl = 0x3f;
-- if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA)) {
-- tempah = 0x00;
-- if(SiS_IsDualEdge(SiS_Pr, HwDeviceExtension, BaseAddr)) {
-- tempbl = 0xff;
-- }
-- }
-- SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x21,tempbl,tempah);
-+ tempah = 0xc0; /* For 301, 301B (and 301BDH rev b1) */
-+ tempbl = 0x3f;
-+ if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA)) {
-+ tempah = 0x00;
-+ if(SiS_IsDualEdge(SiS_Pr, HwDeviceExtension, BaseAddr)) {
-+ tempbl = 0xff;
-+ }
- }
-+ SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x21,tempbl,tempah);
- }
-
-- if(IS_SIS740) {
-+ if(IS_SIS740) {
- tempah = 0x80;
- tempbl = 0x7f;
- if(SiS_Pr->SiS_VBInfo & DisableCRT2Display) {
-@@ -3141,8 +3238,9 @@ SiS_SetCRT2ModeRegs(SiS_Private *SiS_Pr,
- tempbl = 0x7f;
- if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA)) {
- tempbl = 0xff;
-- if(!(SiS_IsDualEdge(SiS_Pr, HwDeviceExtension, BaseAddr)))
-+ if(!(SiS_IsDualEdge(SiS_Pr, HwDeviceExtension, BaseAddr))) {
- tempah |= 0x80;
-+ }
- }
- SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x23,tempbl,tempah);
- }
-@@ -3174,16 +3272,32 @@ SiS_SetCRT2ModeRegs(SiS_Private *SiS_Pr,
- tempbl = 0xfb;
- if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA)) {
- tempah = 0x00;
-- if(SiS_IsDualEdge(SiS_Pr, HwDeviceExtension, BaseAddr))
-+ if(SiS_IsDualEdge(SiS_Pr, HwDeviceExtension, BaseAddr)) {
- tempbl = 0xff;
-+ }
- }
- SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x13,tempbl,tempah);
-
-- if(SiS_Pr->SiS_VBInfo & DisableCRT2Display)
-+ if(SiS_Pr->SiS_VBInfo & DisableCRT2Display) {
- SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x13,0xfb,0x00);
-+ }
-
- SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2c,0xcf,0x30);
-
-+ } else if(HwDeviceExtension->jChipType == SIS_550) {
-+
-+#if 0
-+ tempah = 0x00;
-+ tempbl = 0xfb;
-+ if(SiS_Pr->SiS_VBInfo & DisableCRT2Display) {
-+ tempah = 0x00;
-+ tempbl = 0xfb;
-+ }
-+ SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x13,tempbl,tempah);
-+#endif
-+ SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x13,0xfb);
-+
-+ SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2c,0xcf,0x30);
- }
-
- }
-@@ -3209,10 +3323,9 @@ SiS_GetCRT2Data(SiS_Private *SiS_Pr, UCH
- HwDeviceExtension);
- } else {
-
-- if( (SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) &&
-- (SiS_Pr->SiS_VBType & VB_NoLCD) ) {
--
-- /* TW: Need LVDS Data for LCD on 301BDH */
-+ if( (SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) && (SiS_Pr->SiS_VBType & VB_NoLCD) ) {
-+
-+ /* Need LVDS Data for LCD on 301B-DH */
- SiS_GetCRT2DataLVDS(SiS_Pr,ROMAddr,ModeNo,ModeIdIndex,RefreshRateTableIndex,
- HwDeviceExtension);
-
-@@ -3282,18 +3395,16 @@ SiS_GetCRT2DataLVDS(SiS_Private *SiS_Pr,
-
- } else {
-
-- /* TW: 301BDH needs LVDS Data */
-- if( (SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) &&
-- (SiS_Pr->SiS_VBType & VB_NoLCD) ) {
-+ /* 301BDH needs LVDS Data */
-+ if( (SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) && (SiS_Pr->SiS_VBType & VB_NoLCD) ) {
- SiS_Pr->SiS_IF_DEF_LVDS = 1;
- }
-
- SiS_GetCRT2Ptr(SiS_Pr,ROMAddr,ModeNo,ModeIdIndex,RefreshRateTableIndex,
- &CRT2Index,&ResIndex,HwDeviceExtension);
-
-- /* TW: 301BDH needs LVDS Data */
-- if( (SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) &&
-- (SiS_Pr->SiS_VBType & VB_NoLCD) ) {
-+ /* 301BDH needs LVDS Data */
-+ if( (SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) && (SiS_Pr->SiS_VBType & VB_NoLCD) ) {
- SiS_Pr->SiS_IF_DEF_LVDS = 0;
- }
-
-@@ -3321,11 +3432,16 @@ SiS_GetCRT2DataLVDS(SiS_Private *SiS_Pr,
- case 20: LVDSData = SiS_Pr->SiS_LVDS1280x768Data_2; break;
- case 21: LVDSData = SiS_Pr->SiS_LVDS1600x1200Data_1; break;
- case 22: LVDSData = SiS_Pr->SiS_LVDS1600x1200Data_2; break;
-+ case 30: LVDSData = SiS_Pr->SiS_LVDS640x480Data_2; break;
-+ case 80: LVDSData = SiS_Pr->SiS_LVDSBARCO1366Data_1; break;
-+ case 81: LVDSData = SiS_Pr->SiS_LVDSBARCO1366Data_2; break;
-+ case 82: LVDSData = SiS_Pr->SiS_LVDSBARCO1024Data_1; break;
-+ case 83: LVDSData = SiS_Pr->SiS_LVDSBARCO1024Data_2; break;
- case 90: LVDSData = SiS_Pr->SiS_CHTVUPALMData; break;
- case 91: LVDSData = SiS_Pr->SiS_CHTVOPALMData; break;
- case 92: LVDSData = SiS_Pr->SiS_CHTVUPALNData; break;
- case 93: LVDSData = SiS_Pr->SiS_CHTVOPALNData; break;
-- case 99: LVDSData = SiS_Pr->SiS_CHTVSOPALData; break; /* TW: Super Overscan */
-+ case 99: LVDSData = SiS_Pr->SiS_CHTVSOPALData; break; /* Super Overscan */
- default: LVDSData = SiS_Pr->SiS_LVDS1024x768Data_1; break;
- }
- }
-@@ -3337,67 +3453,36 @@ SiS_GetCRT2DataLVDS(SiS_Private *SiS_Pr,
-
- if(SiS_Pr->SiS_IF_DEF_LVDS == 0) {
-
-- if(!(SiS_Pr->SiS_LCDInfo & DontExpandLCD)){
-- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768){
-- SiS_Pr->SiS_HDE = 1024;
-- SiS_Pr->SiS_VDE = 768;
-- } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024){
-- SiS_Pr->SiS_HDE = 1280;
-- SiS_Pr->SiS_VDE = 1024;
-- } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050){
-- SiS_Pr->SiS_HDE = 1400;
-- SiS_Pr->SiS_VDE = 1050;
-- } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1600x1200){
-- SiS_Pr->SiS_HDE = 1600;
-- SiS_Pr->SiS_VDE = 1200;
-- } else {
-- SiS_Pr->SiS_HDE = 1280;
-- SiS_Pr->SiS_VDE = 960;
-- }
-- }
-+ if(!(SiS_Pr->SiS_LCDInfo & DontExpandLCD)) {
-+ SiS_Pr->SiS_HDE = SiS_Pr->PanelXRes;
-+ SiS_Pr->SiS_VDE = SiS_Pr->PanelYRes;
-+ }
-
- } else {
-
-- if(SiS_Pr->SiS_IF_DEF_TRUMPION == 0) {
-- if((SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) && (!(SiS_Pr->SiS_LCDInfo & LCDPass11))) {
-- if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel640x480) {
-- if((!(SiS_Pr->SiS_LCDInfo & DontExpandLCD)) || (SiS_Pr->SiS_SetFlag & SetDOSMode)) {
-- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel800x600) {
-- SiS_Pr->SiS_HDE = 800;
-- SiS_Pr->SiS_VDE = 600;
-- } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x600) {
-- SiS_Pr->SiS_HDE = 1024;
-- SiS_Pr->SiS_VDE = 600;
-- } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) {
-- SiS_Pr->SiS_HDE = 1024;
-- SiS_Pr->SiS_VDE = 768;
-- } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1152x768) {
-- SiS_Pr->SiS_HDE = 1152;
-- SiS_Pr->SiS_VDE = 768;
-- } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1152x864) {
-- SiS_Pr->SiS_HDE = 1152;
-- SiS_Pr->SiS_VDE = 864;
-- } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x768) {
-- SiS_Pr->SiS_HDE = 1280;
-- SiS_Pr->SiS_VDE = 768;
-- } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) {
-- SiS_Pr->SiS_HDE = 1280;
-- SiS_Pr->SiS_VDE = 1024;
-- } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050) {
-- SiS_Pr->SiS_HDE = 1400;
-- SiS_Pr->SiS_VDE = 1050;
-- } else {
-- SiS_Pr->SiS_HDE = 1600;
-- SiS_Pr->SiS_VDE = 1200;
-- }
-- if(SiS_Pr->SiS_IF_DEF_FSTN) {
-- SiS_Pr->SiS_HDE = 320;
-- SiS_Pr->SiS_VDE = 480;
-- }
-- }
-+ if(SiS_Pr->SiS_IF_DEF_TRUMPION == 0) {
-+ if((SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) && (!(SiS_Pr->SiS_LCDInfo & LCDPass11))) {
-+ if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel640x480) {
-+ if((!(SiS_Pr->SiS_LCDInfo & DontExpandLCD)) || (SiS_Pr->SiS_SetFlag & SetDOSMode)) {
-+ SiS_Pr->SiS_HDE = SiS_Pr->PanelXRes;
-+ SiS_Pr->SiS_VDE = SiS_Pr->PanelYRes;
-+
-+ if(SiS_Pr->SiS_CustomT == CUT_BARCO1366) {
-+ if(ResIndex < 0x08) {
-+ SiS_Pr->SiS_HDE = 1280;
-+ SiS_Pr->SiS_VDE = 1024;
-+ }
-+ }
-+#if 0
-+ if(SiS_Pr->SiS_IF_DEF_FSTN) {
-+ SiS_Pr->SiS_HDE = 320;
-+ SiS_Pr->SiS_VDE = 480;
-+ }
-+#endif
-+ }
-+ }
- }
-- }
-- }
-+ }
- }
- }
-
-@@ -3413,11 +3498,16 @@ SiS_GetCRT2Data301(SiS_Private *SiS_Pr,
- const SiS_TVDataStruct *TVPtr = NULL;
-
- if(ModeNo <= 0x13) {
-- modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
-- resinfo = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ResInfo;
-+ modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
-+ resinfo = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ResInfo;
- } else {
-+ if(SiS_Pr->UseCustomMode) {
-+ modeflag = SiS_Pr->CModeFlag;
-+ resinfo = 0;
-+ } else {
- modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
- resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
-+ }
- }
-
- SiS_Pr->SiS_NewFlickerMode = 0;
-@@ -3429,20 +3519,29 @@ SiS_GetCRT2Data301(SiS_Private *SiS_Pr,
-
- SiS_GetCRT2ResInfo(SiS_Pr,ROMAddr,ModeNo,ModeIdIndex,HwDeviceExtension);
-
-- /* TW: For VGA2 ("RAMDAC2") */
--
- if(SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC){
-- SiS_GetRAMDAC2DATA(SiS_Pr,ROMAddr,ModeNo,ModeIdIndex,RefreshRateTableIndex,
-- HwDeviceExtension);
-- return;
-- }
-
-- /* TW: For TV */
-+ if(SiS_Pr->UseCustomMode) {
-
-- if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
-+ SiS_Pr->SiS_RVBHCMAX = 1;
-+ SiS_Pr->SiS_RVBHCFACT = 1;
-+ SiS_Pr->SiS_VGAHT = SiS_Pr->CHTotal;
-+ SiS_Pr->SiS_VGAVT = SiS_Pr->CVTotal;
-+ SiS_Pr->SiS_HT = SiS_Pr->CHTotal;
-+ SiS_Pr->SiS_VT = SiS_Pr->CVTotal;
-+ SiS_Pr->SiS_HDE = SiS_Pr->SiS_VGAHDE;
-+ SiS_Pr->SiS_VDE = SiS_Pr->SiS_VGAVDE;
-
-- SiS_GetCRT2Ptr(SiS_Pr,ROMAddr,ModeNo,ModeIdIndex,RefreshRateTableIndex,
-- &CRT2Index,&ResIndex,HwDeviceExtension);
-+ } else {
-+
-+ SiS_GetRAMDAC2DATA(SiS_Pr,ROMAddr,ModeNo,ModeIdIndex,RefreshRateTableIndex,
-+ HwDeviceExtension);
-+ }
-+
-+ } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
-+
-+ SiS_GetCRT2Ptr(SiS_Pr,ROMAddr,ModeNo,ModeIdIndex,RefreshRateTableIndex,
-+ &CRT2Index,&ResIndex,HwDeviceExtension);
-
- switch (CRT2Index) {
- case 2: TVPtr = SiS_Pr->SiS_ExtHiTVData; break;
-@@ -3452,7 +3551,7 @@ SiS_GetCRT2Data301(SiS_Private *SiS_Pr,
- case 4: TVPtr = SiS_Pr->SiS_ExtNTSCData; break;
- case 8: TVPtr = SiS_Pr->SiS_StPALData; break;
- case 9: TVPtr = SiS_Pr->SiS_StNTSCData; break;
-- default: TVPtr = SiS_Pr->SiS_StPALData; break; /* TW: Just to avoid a crash */
-+ default: TVPtr = SiS_Pr->SiS_StPALData; break; /* Just to avoid a crash */
- }
-
- SiS_Pr->SiS_RVBHCMAX = (TVPtr+ResIndex)->RVBHCMAX;
-@@ -3464,18 +3563,16 @@ SiS_GetCRT2Data301(SiS_Private *SiS_Pr,
- SiS_Pr->SiS_RVBHRS = (TVPtr+ResIndex)->RVBHRS;
- SiS_Pr->SiS_NewFlickerMode = (TVPtr+ResIndex)->FlickerMode;
- if(modeflag & HalfDCLK) {
-- SiS_Pr->SiS_RVBHRS = (TVPtr+ResIndex)->HALFRVBHRS;
-+ SiS_Pr->SiS_RVBHRS = (TVPtr+ResIndex)->HALFRVBHRS;
- }
-
- if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVisionTV) {
-
- if(SiS_Pr->SiS_HiVision != 3) {
--
-- if(resinfo == 0x08) SiS_Pr->SiS_NewFlickerMode = 0x40;
-- if(resinfo == 0x09) SiS_Pr->SiS_NewFlickerMode = 0x40;
-- if(resinfo == 0x12) SiS_Pr->SiS_NewFlickerMode = 0x40;
--
-- }
-+ if(resinfo == SIS_RI_1024x768) SiS_Pr->SiS_NewFlickerMode = 0x40;
-+ if(resinfo == SIS_RI_1280x1024) SiS_Pr->SiS_NewFlickerMode = 0x40;
-+ if(resinfo == SIS_RI_1280x720) SiS_Pr->SiS_NewFlickerMode = 0x40;
-+ }
-
- switch(SiS_Pr->SiS_HiVision) {
- case 2:
-@@ -3504,119 +3601,127 @@ SiS_GetCRT2Data301(SiS_Private *SiS_Pr,
-
- } else {
-
-- SiS_Pr->SiS_RY1COE = (TVPtr+ResIndex)->RY1COE;
-- SiS_Pr->SiS_RY2COE = (TVPtr+ResIndex)->RY2COE;
-- SiS_Pr->SiS_RY3COE = (TVPtr+ResIndex)->RY3COE;
-- SiS_Pr->SiS_RY4COE = (TVPtr+ResIndex)->RY4COE;
--
-- if(modeflag & HalfDCLK) {
-- SiS_Pr->SiS_RY1COE = 0x00;
-- SiS_Pr->SiS_RY2COE = 0xf4;
-- SiS_Pr->SiS_RY3COE = 0x10;
-- SiS_Pr->SiS_RY4COE = 0x38;
-- }
--
-- if(!(SiS_Pr->SiS_VBInfo & SetPALTV)) {
-- SiS_Pr->SiS_HT = NTSCHT;
-- if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
-- if((ModeNo == 0x4a) || (ModeNo == 0x38)) SiS_Pr->SiS_HT = NTSC2HT;
-- }
-- SiS_Pr->SiS_VT = NTSCVT;
-- } else {
-- SiS_Pr->SiS_HT = PALHT;
-- SiS_Pr->SiS_VT = PALVT;
-- }
-+ SiS_Pr->SiS_RY1COE = (TVPtr+ResIndex)->RY1COE;
-+ SiS_Pr->SiS_RY2COE = (TVPtr+ResIndex)->RY2COE;
-+ SiS_Pr->SiS_RY3COE = (TVPtr+ResIndex)->RY3COE;
-+ SiS_Pr->SiS_RY4COE = (TVPtr+ResIndex)->RY4COE;
-+
-+ if(modeflag & HalfDCLK) {
-+ SiS_Pr->SiS_RY1COE = 0x00;
-+ SiS_Pr->SiS_RY2COE = 0xf4;
-+ SiS_Pr->SiS_RY3COE = 0x10;
-+ SiS_Pr->SiS_RY4COE = 0x38;
-+ }
-+
-+ if(!(SiS_Pr->SiS_VBInfo & SetPALTV)) {
-+ SiS_Pr->SiS_HT = NTSCHT;
-+ if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
-+ if((ModeNo == 0x64) || (ModeNo == 0x4a) || (ModeNo == 0x38)) SiS_Pr->SiS_HT = NTSC2HT;
-+ }
-+ SiS_Pr->SiS_VT = NTSCVT;
-+ } else {
-+ SiS_Pr->SiS_HT = PALHT;
-+ SiS_Pr->SiS_VT = PALVT;
-+ }
-
- }
-
-- return;
-- }
-+ } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
-+
-+ if(SiS_Pr->UseCustomMode) {
-
-- /* TW: For LCD */
-+ SiS_Pr->SiS_RVBHCMAX = 1;
-+ SiS_Pr->SiS_RVBHCFACT = 1;
-+ SiS_Pr->SiS_VGAHT = SiS_Pr->CHTotal;
-+ SiS_Pr->SiS_VGAVT = SiS_Pr->CVTotal;
-+ SiS_Pr->SiS_HT = SiS_Pr->CHTotal;
-+ SiS_Pr->SiS_VT = SiS_Pr->CVTotal;
-+ SiS_Pr->SiS_HDE = SiS_Pr->SiS_VGAHDE;
-+ SiS_Pr->SiS_VDE = SiS_Pr->SiS_VGAVDE;
-
-- if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
-+ } else {
-
-- SiS_GetCRT2Ptr(SiS_Pr,ROMAddr,ModeNo,ModeIdIndex,RefreshRateTableIndex,
-- &CRT2Index,&ResIndex,HwDeviceExtension);
-+ SiS_GetCRT2Ptr(SiS_Pr,ROMAddr,ModeNo,ModeIdIndex,RefreshRateTableIndex,
-+ &CRT2Index,&ResIndex,HwDeviceExtension);
-+
-+ switch(CRT2Index) {
-+ case 0: LCDPtr = SiS_Pr->SiS_ExtLCD1024x768Data; break; /* VESA Timing */
-+ case 1: LCDPtr = SiS_Pr->SiS_ExtLCD1280x1024Data; break; /* VESA Timing */
-+ case 5: LCDPtr = SiS_Pr->SiS_StLCD1024x768Data; break; /* Obviously unused */
-+ case 6: LCDPtr = SiS_Pr->SiS_StLCD1280x1024Data; break; /* Obviously unused */
-+ case 10: LCDPtr = SiS_Pr->SiS_St2LCD1024x768Data; break; /* Non-VESA Timing */
-+ case 11: LCDPtr = SiS_Pr->SiS_St2LCD1280x1024Data; break; /* Non-VESA Timing */
-+ case 13: LCDPtr = SiS_Pr->SiS_NoScaleData1024x768; break; /* Non-expanding */
-+ case 14: LCDPtr = SiS_Pr->SiS_NoScaleData1280x1024; break; /* Non-expanding */
-+ case 15: LCDPtr = SiS_Pr->SiS_LCD1280x960Data; break; /* 1280x960 */
-+ case 20: LCDPtr = SiS_Pr->SiS_ExtLCD1400x1050Data; break; /* VESA Timing */
-+ case 21: LCDPtr = SiS_Pr->SiS_NoScaleData1400x1050; break; /* Non-expanding (let panel scale) */
-+ case 22: LCDPtr = SiS_Pr->SiS_StLCD1400x1050Data; break; /* Non-VESA Timing (let panel scale) */
-+ case 23: LCDPtr = SiS_Pr->SiS_ExtLCD1600x1200Data; break; /* VESA Timing */
-+ case 24: LCDPtr = SiS_Pr->SiS_NoScaleData1600x1200; break; /* Non-expanding */
-+ case 25: LCDPtr = SiS_Pr->SiS_StLCD1600x1200Data; break; /* Non-VESA Timing */
-+ case 26: LCDPtr = SiS_Pr->SiS_ExtLCD1280x768Data; break; /* VESA Timing */
-+ case 27: LCDPtr = SiS_Pr->SiS_NoScaleData1280x768; break; /* Non-expanding */
-+ case 28: LCDPtr = SiS_Pr->SiS_StLCD1280x768Data; break; /* Non-VESA Timing */
-+ case 29: LCDPtr = SiS_Pr->SiS_NoScaleData; break; /* Generic no-scale data */
-+ default: LCDPtr = SiS_Pr->SiS_ExtLCD1024x768Data; break; /* Just to avoid a crash */
-+ }
-+
-+ SiS_Pr->SiS_RVBHCMAX = (LCDPtr+ResIndex)->RVBHCMAX;
-+ SiS_Pr->SiS_RVBHCFACT = (LCDPtr+ResIndex)->RVBHCFACT;
-+ SiS_Pr->SiS_VGAHT = (LCDPtr+ResIndex)->VGAHT;
-+ SiS_Pr->SiS_VGAVT = (LCDPtr+ResIndex)->VGAVT;
-+ SiS_Pr->SiS_HT = (LCDPtr+ResIndex)->LCDHT;
-+ SiS_Pr->SiS_VT = (LCDPtr+ResIndex)->LCDVT;
-
-- switch (CRT2Index) {
-- case 0: LCDPtr = SiS_Pr->SiS_ExtLCD1024x768Data; break; /* VESA Timing */
-- case 1: LCDPtr = SiS_Pr->SiS_ExtLCD1280x1024Data; break; /* VESA Timing */
-- case 5: LCDPtr = SiS_Pr->SiS_StLCD1024x768Data; break; /* Obviously unused */
-- case 6: LCDPtr = SiS_Pr->SiS_StLCD1280x1024Data; break; /* Obviously unused */
-- case 10: LCDPtr = SiS_Pr->SiS_St2LCD1024x768Data; break; /* Non-VESA Timing */
-- case 11: LCDPtr = SiS_Pr->SiS_St2LCD1280x1024Data; break; /* Non-VESA Timing */
-- case 13: LCDPtr = SiS_Pr->SiS_NoScaleData1024x768; break; /* Non-expanding */
-- case 14: LCDPtr = SiS_Pr->SiS_NoScaleData1280x1024; break; /* Non-expanding */
-- case 15: LCDPtr = SiS_Pr->SiS_LCD1280x960Data; break; /* 1280x960 */
-- case 20: LCDPtr = SiS_Pr->SiS_ExtLCD1400x1050Data; break; /* VESA Timing */
-- case 21: LCDPtr = SiS_Pr->SiS_NoScaleData1400x1050; break; /* Non-expanding (let panel scale) */
-- case 22: LCDPtr = SiS_Pr->SiS_StLCD1400x1050Data; break; /* Non-VESA Timing (let panel scale) */
-- case 23: LCDPtr = SiS_Pr->SiS_ExtLCD1600x1200Data; break; /* VESA Timing */
-- case 24: LCDPtr = SiS_Pr->SiS_NoScaleData1600x1200; break; /* Non-expanding */
-- case 25: LCDPtr = SiS_Pr->SiS_StLCD1600x1200Data; break; /* Non-VESA Timing */
-- default: LCDPtr = SiS_Pr->SiS_ExtLCD1024x768Data; break; /* Just to avoid a crash */
-- }
--
-- SiS_Pr->SiS_RVBHCMAX = (LCDPtr+ResIndex)->RVBHCMAX;
-- SiS_Pr->SiS_RVBHCFACT = (LCDPtr+ResIndex)->RVBHCFACT;
-- SiS_Pr->SiS_VGAHT = (LCDPtr+ResIndex)->VGAHT;
-- SiS_Pr->SiS_VGAVT = (LCDPtr+ResIndex)->VGAVT;
-- SiS_Pr->SiS_HT = (LCDPtr+ResIndex)->LCDHT;
-- SiS_Pr->SiS_VT = (LCDPtr+ResIndex)->LCDVT;
--
- #ifdef TWDEBUG
-- xf86DrvMsg(0, X_INFO,
-- "GetCRT2Data: Index %d ResIndex %d\n", CRT2Index, ResIndex);
--#endif
-+ xf86DrvMsg(0, X_INFO,
-+ "GetCRT2Data: Index %d ResIndex %d\n", CRT2Index, ResIndex);
-+#endif
-
-- tempax = 1024;
-- if(SiS_Pr->SiS_SetFlag & LCDVESATiming) {
-- if(HwDeviceExtension->jChipType < SIS_315H) {
-- if (SiS_Pr->SiS_VGAVDE == 350) tempbx = 560;
-- else if(SiS_Pr->SiS_VGAVDE == 400) tempbx = 640;
-- else tempbx = 768;
-- } else {
-- tempbx = 768;
-- }
-- } else {
-- if (SiS_Pr->SiS_VGAVDE == 357) tempbx = 527;
-- else if(SiS_Pr->SiS_VGAVDE == 420) tempbx = 620;
-- else if(SiS_Pr->SiS_VGAVDE == 525) tempbx = 775;
-- else if(SiS_Pr->SiS_VGAVDE == 600) tempbx = 775;
-- else if(SiS_Pr->SiS_VGAVDE == 350) tempbx = 560;
-- else if(SiS_Pr->SiS_VGAVDE == 400) tempbx = 640;
-- else tempbx = 768;
-- }
-- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) {
-- tempax = 1280;
-- if (SiS_Pr->SiS_VGAVDE == 360) tempbx = 768;
-- else if(SiS_Pr->SiS_VGAVDE == 375) tempbx = 800;
-- else if(SiS_Pr->SiS_VGAVDE == 405) tempbx = 864;
-- else tempbx = 1024;
-- }
-- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x960) {
-- tempax = 1280;
-- if (SiS_Pr->SiS_VGAVDE == 350) tempbx = 700;
-- else if(SiS_Pr->SiS_VGAVDE == 400) tempbx = 800;
-- else if(SiS_Pr->SiS_VGAVDE == 1024) tempbx = 960;
-- else tempbx = 960;
-- }
-- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050) {
-- tempax = 1400;
-- tempbx = 1050;
-- }
-- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1600x1200) {
-- tempax = 1600;
-- tempbx = 1200;
-- }
-- if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
-- tempax = SiS_Pr->SiS_VGAHDE;
-- tempbx = SiS_Pr->SiS_VGAVDE;
-- }
-- SiS_Pr->SiS_HDE = tempax;
-- SiS_Pr->SiS_VDE = tempbx;
-- return;
-+ if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) {
-+ tempax = 1024;
-+ if(SiS_Pr->SiS_SetFlag & LCDVESATiming) {
-+ if(HwDeviceExtension->jChipType < SIS_315H) {
-+ if (SiS_Pr->SiS_VGAVDE == 350) tempbx = 560;
-+ else if(SiS_Pr->SiS_VGAVDE == 400) tempbx = 640;
-+ else tempbx = 768;
-+ } else {
-+ tempbx = 768;
-+ }
-+ } else {
-+ if (SiS_Pr->SiS_VGAVDE == 357) tempbx = 527;
-+ else if(SiS_Pr->SiS_VGAVDE == 420) tempbx = 620;
-+ else if(SiS_Pr->SiS_VGAVDE == 525) tempbx = 775;
-+ else if(SiS_Pr->SiS_VGAVDE == 600) tempbx = 775;
-+ else if(SiS_Pr->SiS_VGAVDE == 350) tempbx = 560;
-+ else if(SiS_Pr->SiS_VGAVDE == 400) tempbx = 640;
-+ else tempbx = 768;
-+ }
-+ } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) {
-+ tempax = 1280;
-+ if (SiS_Pr->SiS_VGAVDE == 360) tempbx = 768;
-+ else if(SiS_Pr->SiS_VGAVDE == 375) tempbx = 800;
-+ else if(SiS_Pr->SiS_VGAVDE == 405) tempbx = 864;
-+ else tempbx = 1024;
-+ } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x960) {
-+ tempax = 1280;
-+ if (SiS_Pr->SiS_VGAVDE == 350) tempbx = 700;
-+ else if(SiS_Pr->SiS_VGAVDE == 400) tempbx = 800;
-+ else if(SiS_Pr->SiS_VGAVDE == 1024) tempbx = 960;
-+ else tempbx = 960;
-+ } else {
-+ tempax = SiS_Pr->PanelXRes;
-+ tempbx = SiS_Pr->PanelYRes;
-+ }
-+ if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
-+ tempax = SiS_Pr->SiS_VGAHDE;
-+ tempbx = SiS_Pr->SiS_VGAVDE;
-+ }
-+ SiS_Pr->SiS_HDE = tempax;
-+ SiS_Pr->SiS_VDE = tempbx;
-+ return;
-+ }
- }
- }
-
-@@ -3626,9 +3731,9 @@ SiS_GetResInfo(SiS_Private *SiS_Pr, UCHA
- USHORT resindex;
-
- if(ModeNo <= 0x13)
-- resindex=SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ResInfo;
-+ resindex=SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ResInfo;
- else
-- resindex=SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
-+ resindex=SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
-
- return(resindex);
- }
-@@ -3639,41 +3744,46 @@ SiS_GetCRT2ResInfo(SiS_Private *SiS_Pr,
- {
- USHORT xres,yres,modeflag=0,resindex;
-
-+ if(SiS_Pr->UseCustomMode) {
-+ SiS_Pr->SiS_VGAHDE = SiS_Pr->SiS_HDE = SiS_Pr->CHDisplay;
-+ SiS_Pr->SiS_VGAVDE = SiS_Pr->SiS_VDE = SiS_Pr->CVDisplay;
-+ return;
-+ }
-+
- resindex = SiS_GetResInfo(SiS_Pr,ROMAddr,ModeNo,ModeIdIndex);
-
- if(ModeNo <= 0x13) {
-- xres = SiS_Pr->SiS_StResInfo[resindex].HTotal;
-- yres = SiS_Pr->SiS_StResInfo[resindex].VTotal;
-+ xres = SiS_Pr->SiS_StResInfo[resindex].HTotal;
-+ yres = SiS_Pr->SiS_StResInfo[resindex].VTotal;
- } else {
-- xres = SiS_Pr->SiS_ModeResInfo[resindex].HTotal;
-- yres = SiS_Pr->SiS_ModeResInfo[resindex].VTotal;
-- modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
-+ xres = SiS_Pr->SiS_ModeResInfo[resindex].HTotal;
-+ yres = SiS_Pr->SiS_ModeResInfo[resindex].VTotal;
-+ modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
- }
-
-- if((HwDeviceExtension->jChipType >= SIS_315H) && (SiS_Pr->SiS_IF_DEF_LVDS == 1)) {
-- if((ModeNo != 0x03) && (SiS_Pr->SiS_SetFlag & SetDOSMode)) {
-- if(yres == 350) yres = 400;
-- }
-- if(SiS_GetReg1(SiS_Pr->SiS_P3d4,0x3a) & 0x01) {
-- if(ModeNo == 0x12) yres = 400;
-- }
-- }
-+ if((!SiS_Pr->SiS_IF_DEF_DSTN) && (!SiS_Pr->SiS_IF_DEF_FSTN)) {
-+
-+ if((HwDeviceExtension->jChipType >= SIS_315H) && (SiS_Pr->SiS_IF_DEF_LVDS == 1)) {
-+ if((ModeNo != 0x03) && (SiS_Pr->SiS_SetFlag & SetDOSMode)) {
-+ if(yres == 350) yres = 400;
-+ }
-+ if(SiS_GetReg1(SiS_Pr->SiS_P3d4,0x3a) & 0x01) {
-+ if(ModeNo == 0x12) yres = 400;
-+ }
-+ }
-+
-+ if(ModeNo > 0x13) {
-+ if(modeflag & HalfDCLK) xres *= 2;
-+ if(modeflag & DoubleScanMode) yres *= 2;
-+ }
-
-- if(ModeNo > 0x13) {
-- if(SiS_Pr->SiS_IF_DEF_FSTN == 1){
-- xres *= 2;
-- yres *= 2;
-- } else {
-- if(modeflag & HalfDCLK) xres *= 2;
-- if(modeflag & DoubleScanMode) yres *= 2;
-- }
- }
-
- if(SiS_Pr->SiS_IF_DEF_LVDS == 0) {
- if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
- if(xres == 720) xres = 640;
- } else {
-- if(SiS_Pr->SiS_VBType & VB_NoLCD) { /* TW: 301BDH */
-+ if(SiS_Pr->SiS_VBType & VB_NoLCD) { /* 301BDH */
- if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
- if(xres == 720) xres = 640;
- }
-@@ -3694,9 +3804,8 @@ SiS_GetCRT2ResInfo(SiS_Private *SiS_Pr,
- if(xres == 720) xres = 640;
- }
- if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
-- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) {
-+ if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) {
- if(ModeNo <= 0x13) {
-- /* TW: This is wrong for 640x400 *graphics* mode */
- if(yres == 400) yres = 405;
- }
- if(yres == 350) yres = 360;
-@@ -3719,12 +3828,15 @@ SiS_GetCRT2ResInfo(SiS_Private *SiS_Pr,
- } else {
- if(xres == 720) xres = 640;
- if(SiS_Pr->SiS_SetFlag & SetDOSMode) {
-- yres = 400;
-- if(HwDeviceExtension->jChipType >= SIS_315H) {
-- if(SiS_GetReg1(SiS_Pr->SiS_P3c4,0x17) & 0x80) yres = 480;
-- } else {
-- if(SiS_GetReg1(SiS_Pr->SiS_P3c4,0x13) & 0x80) yres = 480;
-- }
-+ yres = 400;
-+ if(HwDeviceExtension->jChipType >= SIS_315H) {
-+ if(SiS_GetReg1(SiS_Pr->SiS_P3c4,0x17) & 0x80) yres = 480;
-+ } else {
-+ if(SiS_GetReg1(SiS_Pr->SiS_P3c4,0x13) & 0x80) yres = 480;
-+ }
-+ if(SiS_Pr->SiS_IF_DEF_DSTN || SiS_Pr->SiS_IF_DEF_FSTN) {
-+ yres = 480;
-+ }
- }
- }
- SiS_Pr->SiS_VGAHDE = SiS_Pr->SiS_HDE = xres;
-@@ -3739,6 +3851,13 @@ SiS_GetCRT2Ptr(SiS_Private *SiS_Pr, UCHA
- USHORT tempbx=0,tempal=0;
- USHORT Flag,resinfo=0;
-
-+ if(ModeNo <= 0x13) {
-+ tempal = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC;
-+ } else {
-+ tempal = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC;
-+ resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
-+ }
-+
- if(SiS_Pr->SiS_IF_DEF_LVDS == 0) {
-
- if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) { /* LCD */
-@@ -3753,15 +3872,32 @@ SiS_GetCRT2Ptr(SiS_Private *SiS_Pr, UCHA
- tempbx = 23;
- if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) tempbx = 24;
- else if(!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) tempbx = 25;
-+#if 0
-+ } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x768) {
-+ tempbx = 26;
-+ if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) tempbx = 27;
-+ else if(!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) tempbx = 28;
-+#endif
- } else if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
-- tempbx = 13;
-- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) tempbx++;
-+ if(SiS_Pr->SiS_VBType & VB_SIS301LV302LV) {
-+ if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) tempbx = 13;
-+ else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) tempbx = 14;
-+ else tempbx = 29;
-+ } else {
-+ tempbx = 29;
-+ if(ModeNo >= 0x13) {
-+ /* 1280x768 and 1280x960 have same CRT2CRTC,
-+ * so we change it here if 1280x960 is chosen
-+ */
-+ if(resinfo == SIS_RI_1280x960) tempal = 10;
-+ }
-+ }
- } else {
- tempbx = SiS_Pr->SiS_LCDResInfo - SiS_Pr->SiS_Panel1024x768;
- if(!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) {
- tempbx += 5;
- /* GetRevisionID(); */
-- /* TW: BIOS only adds 5 once */
-+ /* BIOS only adds 5 once */
- tempbx += 5;
- }
- }
-@@ -3783,34 +3919,18 @@ SiS_GetCRT2Ptr(SiS_Private *SiS_Pr, UCHA
-
- }
-
-- if(ModeNo <= 0x13) {
-- tempal = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC;
-- } else {
-- tempal = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC;
-- resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
-- }
--
-- tempal &= 0x3F;
--
-- if((SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) &&
-- (SiS_Pr->SiS_VBInfo & (SetCRT2ToTV-SetCRT2ToHiVisionTV))) {
-- if(tempal == 0x06) tempal = 0x07;
-- }
--
-- /* TW: 300/301LV BIOS */
-- if((HwDeviceExtension->jChipType == SIS_300) &&
-- (SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV)) {
-- if(ModeNo > 0x13) {
-- if((resinfo == 0x0c) || (resinfo == 0x0d)) /* 720 (index diff. on 310/325!) */
-- tempal = 6;
-- }
-- }
-+ tempal &= 0x3F;
-
-- if(HwDeviceExtension->jChipType != SIS_300) {
-- if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
-- if((ModeNo == 0x31) || (ModeNo == 0x32)) tempal = 6;
-+ if(SiS_Pr->SiS_VBInfo & (SetCRT2ToTV - SetCRT2ToHiVisionTV)) {
-+ if(ModeNo > 0x13) {
-+ if(tempal == 6) tempal = 7;
-+ if((resinfo == SIS_RI_720x480) ||
-+ (resinfo == SIS_RI_720x576) ||
-+ (resinfo == SIS_RI_768x576)) {
-+ tempal = 6;
-+ }
- }
-- }
-+ }
-
- *CRT2Index = tempbx;
- *ResIndex = tempal;
-@@ -3820,25 +3940,22 @@ SiS_GetCRT2Ptr(SiS_Private *SiS_Pr, UCHA
- Flag = 1;
- tempbx = 0;
- if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
--
-- if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD)) {
-- Flag = 0;
-- tempbx = 10;
-- if(SiS_Pr->SiS_VBInfo & SetCHTVOverScan) tempbx += 1;
-- if(SiS_Pr->SiS_VBInfo & SetPALTV) {
-- tempbx += 2;
-- if(SiS_Pr->SiS_CHSOverScan) tempbx = 99;
-- if(SiS_Pr->SiS_CHPALM) {
-- tempbx = 90;
-- if(SiS_Pr->SiS_VBInfo & SetCHTVOverScan) tempbx += 1;
-- } else if(SiS_Pr->SiS_CHPALN) {
-- tempbx = 92;
-- if(SiS_Pr->SiS_VBInfo & SetCHTVOverScan) tempbx += 1;
-- }
--
-- }
-- }
--
-+ if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD)) {
-+ Flag = 0;
-+ tempbx = 10;
-+ if(SiS_Pr->SiS_VBInfo & SetCHTVOverScan) tempbx += 1;
-+ if(SiS_Pr->SiS_VBInfo & SetPALTV) {
-+ tempbx += 2;
-+ if(SiS_Pr->SiS_CHSOverScan) tempbx = 99;
-+ if(SiS_Pr->SiS_CHPALM) {
-+ tempbx = 90;
-+ if(SiS_Pr->SiS_VBInfo & SetCHTVOverScan) tempbx += 1;
-+ } else if(SiS_Pr->SiS_CHPALN) {
-+ tempbx = 92;
-+ if(SiS_Pr->SiS_VBInfo & SetCHTVOverScan) tempbx += 1;
-+ }
-+ }
-+ }
- }
-
- if(Flag) {
-@@ -3846,11 +3963,19 @@ SiS_GetCRT2Ptr(SiS_Private *SiS_Pr, UCHA
- if(SiS_Pr->SiS_LCDResInfo <= SiS_Pr->SiS_Panel1280x1024) {
- tempbx = SiS_Pr->SiS_LCDResInfo - SiS_Pr->SiS_PanelMinLVDS;
- if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) tempbx += 3;
-+ if(SiS_Pr->SiS_CustomT == CUT_BARCO1024) {
-+ tempbx = 82;
-+ if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) tempbx++;
-+ }
- } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x768) {
- tempbx = 18;
- if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) tempbx++;
-- } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480) {
-+ } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480) {
- tempbx = 6;
-+ } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480_2) {
-+ tempbx = 30;
-+ } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480_3) {
-+ tempbx = 30;
- } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x600) {
- tempbx = 15;
- if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) tempbx += 2;
-@@ -3863,27 +3988,25 @@ SiS_GetCRT2Ptr(SiS_Private *SiS_Pr, UCHA
- } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1600x1200) {
- tempbx = 21;
- if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) tempbx++;
-+ } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_PanelBarco1366) {
-+ tempbx = 80;
-+ if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) tempbx++;
- }
--
-+
- if(SiS_Pr->SiS_LCDInfo & LCDPass11) {
- tempbx = 7;
- }
-
- }
-
-- if(ModeNo <= 0x13)
-- tempal = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC;
-- else {
-- tempal = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC;
-- resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
-- }
--
-+#if 0
- if(SiS_Pr->SiS_IF_DEF_FSTN){
- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel320x480){
- tempbx = 14;
- tempal = 6;
- }
- }
-+#endif
-
- if(SiS_Pr->SiS_SetFlag & SetDOSMode) {
- if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel640x480) tempal = 7;
-@@ -3895,13 +4018,10 @@ SiS_GetCRT2Ptr(SiS_Private *SiS_Pr, UCHA
-
- if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
- if(ModeNo > 0x13) {
-- if(HwDeviceExtension->jChipType < SIS_315H) {
-- if((resinfo == 0x0c) || (resinfo == 0x0d)) /* 720 */
-- tempal = 6;
-- } else {
-- if((resinfo == 0x0d) || (resinfo == 0x0e)) /* 720 */
-- tempal = 6;
-- }
-+ if((resinfo == SIS_RI_720x480) ||
-+ (resinfo == SIS_RI_720x576) ||
-+ (resinfo == SIS_RI_768x576))
-+ tempal = 6;
- }
- }
-
-@@ -3969,8 +4089,9 @@ SiS_GetRatePtrCRT2(SiS_Private *SiS_Pr,
- USHORT RefreshRateTableIndex,i,backup_i;
- USHORT modeflag,index,temp,backupindex;
-
-- if(SiS_Pr->UseCustomMode) return 0;
--
-+ /* Do NOT check for UseCustomMode here, will skrew up FIFO */
-+ if(ModeNo == 0xfe) return 0;
-+
- if(ModeNo <= 0x13)
- modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
- else
-@@ -3984,7 +4105,7 @@ SiS_GetRatePtrCRT2(SiS_Private *SiS_Pr,
-
- if(ModeNo < 0x14) return(0xFFFF);
-
-- /* TW: CR33 holds refresh rate index for CRT1 [3:0] and CRT2 [7:4].
-+ /* CR33 holds refresh rate index for CRT1 [3:0] and CRT2 [7:4].
- * On LVDS machines, CRT2 index is always 0 and will be
- * set to 0 by the following code; this causes the function
- * to take the first non-interlaced mode in SiS_Ext2Struct
-@@ -3998,40 +4119,38 @@ SiS_GetRatePtrCRT2(SiS_Private *SiS_Pr,
- if(index > 0) index--;
-
- if(SiS_Pr->SiS_SetFlag & ProgrammingCRT2) {
-- if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
-+ if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
- if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) index = 0;
-- } else {
-+ } else {
- if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
-- if(SiS_Pr->SiS_VBType & VB_NoLCD)
-- index = 0;
-- else if(SiS_Pr->SiS_LCDInfo & DontExpandLCD)
-- index = backupindex = 0;
-+ if(SiS_Pr->SiS_VBType & VB_NoLCD)
-+ index = 0;
-+ else if(SiS_Pr->SiS_LCDInfo & DontExpandLCD)
-+ index = backupindex = 0;
- }
-- }
-- }
-+ }
-
-- if(SiS_Pr->SiS_SetFlag & ProgrammingCRT2) {
-- if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
-- if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
-- index = 0;
-- }
-- }
-- if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
-- if(SiS_Pr->SiS_IF_DEF_LVDS == 0) {
-- if(!(SiS_Pr->SiS_VBType & VB_NoLCD)) {
-- temp = LCDRefreshIndex[SiS_Pr->SiS_LCDResInfo];
-- if(index > temp) index = temp;
-- }
-- } else {
-- index = 0;
-- }
-- }
-+ if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
-+ if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
-+ index = 0;
-+ }
-+ }
-+ if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
-+ if(SiS_Pr->SiS_IF_DEF_LVDS == 0) {
-+ if(!(SiS_Pr->SiS_VBType & VB_NoLCD)) {
-+ temp = LCDRefreshIndex[SiS_Pr->SiS_LCDResInfo];
-+ if(index > temp) index = temp;
-+ }
-+ } else {
-+ index = 0;
-+ }
-+ }
- }
-
- RefreshRateTableIndex = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].REFindex;
- ModeNo = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].ModeID;
-
-- /* TW: 650/LVDS 1.10.07, 650/30xLV 1.10.6s */
-+ /* 650/LVDS 1.10.07, 650/30xLV 1.10.6s */
- if(HwDeviceExtension->jChipType >= SIS_315H) {
- if(!(SiS_Pr->SiS_VBInfo & DriverMode)) {
- if( (SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_VESAID == 0x105) ||
-@@ -4066,7 +4185,7 @@ SiS_GetRatePtrCRT2(SiS_Private *SiS_Pr,
- backup_i = i;
- if (!(SiS_AdjustCRT2Rate(SiS_Pr,ROMAddr,ModeNo,ModeIdIndex,
- RefreshRateTableIndex,&i,HwDeviceExtension))) {
-- /* TW: This is for avoiding random data to be used; i is
-+ /* This is for avoiding random data to be used; i is
- * in an undefined state if no matching CRT2 mode is
- * found.
- */
-@@ -4085,196 +4204,199 @@ SiS_AdjustCRT2Rate(SiS_Private *SiS_Pr,
- USHORT tempax,tempbx,resinfo;
- USHORT modeflag,infoflag;
-
-- if (ModeNo <= 0x13)
-+ if(ModeNo <= 0x13) {
- modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
-- else
-+ resinfo = 0;
-+ } else {
- modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
-+ resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
-+ }
-
-- resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
- tempbx = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex + (*i)].ModeID;
-
- tempax = 0;
-+
- if(SiS_Pr->SiS_IF_DEF_LVDS == 0) {
-+
- if(SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC) {
- tempax |= SupportRAMDAC2;
- if(HwDeviceExtension->jChipType >= SIS_315H) {
-- tempax |= SupportTV;
-- if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
-- if(!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
-- if(resinfo == 0x0a) tempax |= SupportTV1024;
-- }
-- }
-+ tempax |= SupportTV;
-+ if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
-+ if(!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
-+ if(resinfo == SIS_RI_1600x1200) tempax |= SupportTV1024;
-+ }
-+ }
- }
-- }
-- if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
-+ } else if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
- tempax |= SupportLCD;
- if(HwDeviceExtension->jChipType >= SIS_315H) {
- if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel1600x1200) {
- if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel1400x1050) {
-- if((resinfo == 6) && (SiS_Pr->SiS_LCDInfo & DontExpandLCD)) {
-+ if((resinfo == SIS_RI_640x480) && (SiS_Pr->SiS_LCDInfo & DontExpandLCD)) {
- (*i) = 0;
- return(1);
- } else {
- if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel1280x1024) {
-- if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel1280x960) {
-- if((resinfo == 6) && (SiS_Pr->SiS_LCDInfo & DontExpandLCD)) {
-- return(0);
-- } else {
-- if((resinfo >= 9) && (resinfo != 0x14)) {
-+ if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel1280x960) {
-+ if((resinfo == SIS_RI_640x480) && (SiS_Pr->SiS_LCDInfo & DontExpandLCD)) {
-+ return(0);
-+ } else {
-+ if((resinfo >= SIS_RI_1280x1024) && (resinfo != SIS_RI_1280x768)) {
- return(0);
-- }
-- }
-- }
-+ }
-+ }
-+ }
- }
- }
- }
- }
- } else {
- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x600) {
-- if((resinfo != 0x0f) && ((resinfo == 4) || (resinfo >= 8))) return(0);
-+ if( (resinfo != SIS_RI_1024x600) &&
-+ ((resinfo == SIS_RI_512x384) || (resinfo >= SIS_RI_1024x768))) return(0);
- } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1152x768) {
-- if((resinfo != 0x10) && (resinfo > 8)) return(0);
-+ if((resinfo != SIS_RI_1152x768) && (resinfo > SIS_RI_1024x768)) return(0);
- } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x960) {
-- if((resinfo != 0x0e) && (resinfo > 8)) return(0);
-+ if((resinfo != SIS_RI_1280x960) && (resinfo > SIS_RI_1024x768)) return(0);
- } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) {
-- if(resinfo > 9) return(0);
-+ if(resinfo > SIS_RI_1280x1024) return(0);
- } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) {
-- if(resinfo > 8) return(0);
-+ if(resinfo > SIS_RI_1024x768) return(0);
- } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel800x600) {
-- if((resinfo == 4) || (resinfo > 7)) return(0);
-+ if((resinfo == SIS_RI_512x384) || (resinfo > SIS_RI_800x600)) return(0);
- } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480) {
-- if((resinfo == 4) || (resinfo == 3) || (resinfo > 6)) return(0);
-+ if((resinfo == SIS_RI_512x384) ||
-+ (resinfo == SIS_RI_400x300) ||
-+ (resinfo > SIS_RI_640x480)) return(0);
- }
- }
-- }
-- if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVisionTV) {
-+ } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVisionTV) {
- if(SiS_Pr->SiS_HiVision == 3) {
- tempax |= SupportHiVisionTV2;
- if(SiS_Pr->SiS_VBInfo & SetInSlaveMode){
-- if(resinfo == 4) return(0);
-- if(resinfo == 3) return(0);
-- if(resinfo == 7) {
-+ if(resinfo == SIS_RI_512x384) return(0);
-+ if(resinfo == SIS_RI_400x300) return(0);
-+ if(resinfo == SIS_RI_800x600) {
- if(SiS_Pr->SiS_SetFlag & TVSimuMode) return(0);
- }
-- if(resinfo > 7) return(0);
-+ if(resinfo > SIS_RI_800x600) return(0);
- }
- } else {
- tempax |= SupportHiVisionTV;
- if(SiS_Pr->SiS_VBInfo & SetInSlaveMode){
-- if(resinfo == 4) return(0);
-- if((resinfo == 3) || (resinfo == 7)) {
-+ if(resinfo == SIS_RI_512x384) return(0);
-+ if((resinfo == SIS_RI_400x300) || (resinfo == SIS_RI_800x600)) {
- if(SiS_Pr->SiS_SetFlag & TVSimuMode) return(0);
- }
-- if(resinfo > 7) return(0);
-+ if(resinfo > SIS_RI_800x600) return(0);
- }
- }
-- } else {
-- if(SiS_Pr->SiS_VBInfo & (SetCRT2ToAVIDEO|SetCRT2ToSVIDEO|SetCRT2ToSCART)) {
-+ } else if(SiS_Pr->SiS_VBInfo & (SetCRT2ToAVIDEO|SetCRT2ToSVIDEO|SetCRT2ToSCART)) {
- tempax |= SupportTV;
- tempax |= SupportTV1024;
- if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
-- if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
-- if((SiS_Pr->SiS_VBInfo & SetNotSimuMode) && (SiS_Pr->SiS_VBInfo & SetPALTV)) {
-- if(resinfo != 8) {
-- if( (!(SiS_Pr->SiS_VBInfo & SetPALTV)) ||
-- ((SiS_Pr->SiS_VBInfo & SetPALTV) && (resinfo != 4)) ) {
-- tempax &= ~(SupportTV1024);
-- if(HwDeviceExtension->jChipType >= SIS_315H) {
-- if((modeflag & NoSupportSimuTV) && (SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
-- if( (!(SiS_Pr->SiS_VBInfo & SetPALTV)) ||
-- ((SiS_Pr->SiS_VBInfo & SetPALTV) && (resinfo != 7)) ) {
-- if(!(SiS_Pr->SiS_VBInfo & SetNotSimuMode)) return(0);
-- }
-- }
-- } else {
-- if( (resinfo != 3) ||
-- (!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) ||
-- (SiS_Pr->SiS_VBInfo & SetNotSimuMode) ) {
-- if(!(SiS_Pr->SiS_VBInfo & SetPALTV)) {
-- if((modeflag & NoSupportSimuTV) && (SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
-- if(resinfo == 3) return(0);
-- if(!(SiS_Pr->SiS_VBInfo & SetNotSimuMode)) return (0);
-- }
-- }
-- } else return(0);
-- }
-- }
-- }
-- } else {
-- tempax &= ~(SupportTV1024);
-- if(HwDeviceExtension->jChipType >= SIS_315H) {
-- if((modeflag & NoSupportSimuTV) && (SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
-- if( (!(SiS_Pr->SiS_VBInfo & SetPALTV)) ||
-- ((SiS_Pr->SiS_VBInfo & SetPALTV) && (resinfo != 7)) ) {
-+ if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
-+ if((SiS_Pr->SiS_VBInfo & SetNotSimuMode) && (SiS_Pr->SiS_VBInfo & SetPALTV)) {
-+ if(resinfo != SIS_RI_1024x768) {
-+ if( (!(SiS_Pr->SiS_VBInfo & SetPALTV)) ||
-+ ((SiS_Pr->SiS_VBInfo & SetPALTV) && (resinfo != SIS_RI_512x384)) ) {
-+ tempax &= ~(SupportTV1024);
-+ if(HwDeviceExtension->jChipType >= SIS_315H) {
-+ if((modeflag & NoSupportSimuTV) && (SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
-+ if( (!(SiS_Pr->SiS_VBInfo & SetPALTV)) ||
-+ ((SiS_Pr->SiS_VBInfo & SetPALTV) && (resinfo != SIS_RI_800x600)) ) {
- if(!(SiS_Pr->SiS_VBInfo & SetNotSimuMode)) return(0);
-- }
-- }
-- } else {
-- if( (resinfo != 3) ||
-- (!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) ||
-- (SiS_Pr->SiS_VBInfo & SetNotSimuMode) ) {
-- if(!(SiS_Pr->SiS_VBInfo & SetPALTV)) {
-- if((modeflag & NoSupportSimuTV) && (SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
-- if(resinfo == 3) return(0);
-- if(!(SiS_Pr->SiS_VBInfo & SetNotSimuMode)) return (0);
-- }
- }
-- } else return(0);
-- }
-- }
-- } else { /* slavemode */
-- if(resinfo != 8) {
-- if( (!(SiS_Pr->SiS_VBInfo & SetPALTV)) ||
-- ((SiS_Pr->SiS_VBInfo & SetPALTV) && (resinfo != 4) ) ) {
-- tempax &= ~(SupportTV1024);
-- if(HwDeviceExtension->jChipType >= SIS_315H) {
-- if((modeflag & NoSupportSimuTV) && (SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
-- if( (!(SiS_Pr->SiS_VBInfo & SetPALTV)) ||
-- ((SiS_Pr->SiS_VBInfo & SetPALTV) && (resinfo != 7)) ) {
-- if(!(SiS_Pr->SiS_VBInfo & SetNotSimuMode)) return(0);
-- }
-+ }
-+ } else {
-+ if( (resinfo != SIS_RI_400x300) ||
-+ (!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) ||
-+ (SiS_Pr->SiS_VBInfo & SetNotSimuMode) ) {
-+ if(!(SiS_Pr->SiS_VBInfo & SetPALTV)) {
-+ if((modeflag & NoSupportSimuTV) && (SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
-+ if(resinfo == SIS_RI_400x300) return(0);
-+ if(!(SiS_Pr->SiS_VBInfo & SetNotSimuMode)) return (0);
-+ }
- }
-- } else {
-- if( (resinfo != 3) ||
-- (!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) ||
-- (SiS_Pr->SiS_VBInfo & SetNotSimuMode) ) {
-- if(!(SiS_Pr->SiS_VBInfo & SetPALTV)) {
-- if((modeflag & NoSupportSimuTV) && (SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
-- if(resinfo == 3) return(0);
-- if(!(SiS_Pr->SiS_VBInfo & SetNotSimuMode)) return (0);
-- }
-- }
-- } else return(0);
-- }
-+ } else return(0);
-+ }
- }
-- }
-- }
-- } else { /* 301 */
-- tempax &= ~(SupportTV1024);
-- if(HwDeviceExtension->jChipType >= SIS_315H) {
-- if((modeflag & NoSupportSimuTV) && (SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
-- if( (!(SiS_Pr->SiS_VBInfo & SetPALTV)) ||
-- ((SiS_Pr->SiS_VBInfo & SetPALTV) && (resinfo != 7)) ) {
-- if(!(SiS_Pr->SiS_VBInfo & SetNotSimuMode)) return(0);
-- }
-- }
-- } else {
-- if( (resinfo != 3) ||
-- (!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) ||
-- (SiS_Pr->SiS_VBInfo & SetNotSimuMode) ) {
-- if(!(SiS_Pr->SiS_VBInfo & SetPALTV)) {
-- if((modeflag & NoSupportSimuTV) && (SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
-- if(resinfo == 3) return(0);
-- if(!(SiS_Pr->SiS_VBInfo & SetNotSimuMode)) return (0);
-- }
-+ }
-+ } else {
-+ tempax &= ~(SupportTV1024);
-+ if(HwDeviceExtension->jChipType >= SIS_315H) {
-+ if((modeflag & NoSupportSimuTV) && (SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
-+ if( (!(SiS_Pr->SiS_VBInfo & SetPALTV)) ||
-+ ((SiS_Pr->SiS_VBInfo & SetPALTV) && (resinfo != SIS_RI_800x600)) ) {
-+ if(!(SiS_Pr->SiS_VBInfo & SetNotSimuMode)) return(0);
-+ }
- }
-- } else return(0);
-- }
-- }
-- }
-- }
--
-- } else { /* TW: for LVDS */
-+ } else {
-+ if( (resinfo != SIS_RI_400x300) ||
-+ (!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) ||
-+ (SiS_Pr->SiS_VBInfo & SetNotSimuMode) ) {
-+ if(!(SiS_Pr->SiS_VBInfo & SetPALTV)) {
-+ if((modeflag & NoSupportSimuTV) && (SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
-+ if(resinfo == SIS_RI_400x300) return(0);
-+ if(!(SiS_Pr->SiS_VBInfo & SetNotSimuMode)) return (0);
-+ }
-+ }
-+ } else return(0);
-+ }
-+ }
-+ } else { /* slavemode */
-+ if(resinfo != SIS_RI_1024x768) {
-+ if( (!(SiS_Pr->SiS_VBInfo & SetPALTV)) ||
-+ ((SiS_Pr->SiS_VBInfo & SetPALTV) && (resinfo != SIS_RI_512x384) ) ) {
-+ tempax &= ~(SupportTV1024);
-+ if(HwDeviceExtension->jChipType >= SIS_315H) {
-+ if((modeflag & NoSupportSimuTV) && (SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
-+ if( (!(SiS_Pr->SiS_VBInfo & SetPALTV)) ||
-+ ((SiS_Pr->SiS_VBInfo & SetPALTV) && (resinfo != SIS_RI_800x600)) ) {
-+ if(!(SiS_Pr->SiS_VBInfo & SetNotSimuMode)) return(0);
-+ }
-+ }
-+ } else {
-+ if( (resinfo != SIS_RI_400x300) ||
-+ (!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) ||
-+ (SiS_Pr->SiS_VBInfo & SetNotSimuMode) ) {
-+ if(!(SiS_Pr->SiS_VBInfo & SetPALTV)) {
-+ if((modeflag & NoSupportSimuTV) && (SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
-+ if(resinfo == SIS_RI_400x300) return(0);
-+ if(!(SiS_Pr->SiS_VBInfo & SetNotSimuMode)) return (0);
-+ }
-+ }
-+ } else return(0);
-+ }
-+ }
-+ }
-+ }
-+ } else { /* 301 */
-+ tempax &= ~(SupportTV1024);
-+ if(HwDeviceExtension->jChipType >= SIS_315H) {
-+ if((modeflag & NoSupportSimuTV) && (SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
-+ if( (!(SiS_Pr->SiS_VBInfo & SetPALTV)) ||
-+ ((SiS_Pr->SiS_VBInfo & SetPALTV) && (resinfo != SIS_RI_800x600)) ) {
-+ if(!(SiS_Pr->SiS_VBInfo & SetNotSimuMode)) return(0);
-+ }
-+ }
-+ } else {
-+ if( (resinfo != SIS_RI_400x300) ||
-+ (!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) ||
-+ (SiS_Pr->SiS_VBInfo & SetNotSimuMode) ) {
-+ if(!(SiS_Pr->SiS_VBInfo & SetPALTV)) {
-+ if((modeflag & NoSupportSimuTV) && (SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
-+ if(resinfo == SIS_RI_400x300) return(0);
-+ if(!(SiS_Pr->SiS_VBInfo & SetNotSimuMode)) return (0);
-+ }
-+ }
-+ } else return(0);
-+ }
-+ }
-+ }
-+
-+ } else { /* for LVDS */
-
- if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
- if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
-@@ -4284,24 +4406,29 @@ SiS_AdjustCRT2Rate(SiS_Private *SiS_Pr,
- if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
- tempax |= SupportLCD;
- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x768) {
-- if((resinfo != 0x14) && (resinfo > 0x09)) return(0);
-+ if((resinfo != SIS_RI_1280x768) && (resinfo >= SIS_RI_1280x1024)) return(0);
- } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x600) {
-- if((resinfo != 0x0f) && (resinfo > 0x08)) return(0);
-+ if((resinfo != SIS_RI_1024x600) && (resinfo >= SIS_RI_1024x768)) return(0);
- } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1152x768) {
-- if((resinfo != 0x10) && (resinfo > 0x08)) return(0);
-+ if((resinfo != SIS_RI_1152x768) && (resinfo > SIS_RI_1024x768)) return(0);
- } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050) {
-- if((resinfo != 0x15) && (resinfo > 0x09)) return(0);
-+ if((resinfo != SIS_RI_1400x1050) && (resinfo > SIS_RI_1280x1024)) return(0);
-+ } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1600x1200) {
-+ if(resinfo > SIS_RI_1600x1200) return(0);
- } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) {
-- if(resinfo > 0x09) return(0);
-+ if(resinfo > SIS_RI_1280x1024) return(0);
- } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) {
-- if(resinfo > 0x08) return(0);
-+ if(resinfo > SIS_RI_1024x768) return(0);
- } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel800x600){
-- if(resinfo > 0x07) return(0);
-- if(resinfo == 0x04) return(0);
-+ if(resinfo > SIS_RI_800x600) return(0);
-+ if(resinfo == SIS_RI_512x384) return(0);
-+ } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_PanelBarco1366) {
-+ if((resinfo != SIS_RI_1360x1024) && (resinfo > SIS_RI_1280x1024)) return(0);
- }
- }
- }
-- /* TW: Look backwards in table for matching CRT2 mode */
-+
-+ /* Look backwards in table for matching CRT2 mode */
- for(; SiS_Pr->SiS_RefIndex[RefreshRateTableIndex+(*i)].ModeID == tempbx; (*i)--) {
- infoflag = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex + (*i)].Ext_InfoFlag;
- if(infoflag & tempax) {
-@@ -4309,7 +4436,7 @@ SiS_AdjustCRT2Rate(SiS_Private *SiS_Pr,
- }
- if ((*i) == 0) break;
- }
-- /* TW: Look through the whole mode-section of the table from the beginning
-+ /* Look through the whole mode-section of the table from the beginning
- * for a matching CRT2 mode if no mode was found yet.
- */
- for((*i) = 0; ; (*i)++) {
-@@ -4329,7 +4456,7 @@ SiS_SaveCRT2Info(SiS_Private *SiS_Pr, US
- {
- USHORT temp1,temp2;
-
-- /* TW: We store CRT1 ModeNo in CR34 */
-+ /* We store CRT1 ModeNo in CR34 */
- SiS_SetReg1(SiS_Pr->SiS_P3d4,0x34,ModeNo);
- temp1 = (SiS_Pr->SiS_VBInfo & SetInSlaveMode) >> 8;
- temp2 = ~(SetInSlaveMode >> 8);
-@@ -4345,16 +4472,16 @@ SiS_GetVBInfo(SiS_Private *SiS_Pr, USHOR
- USHORT modeflag, resinfo=0;
- UCHAR OutputSelect = *SiS_Pr->pSiS_OutputSelect;
-
-- if(SiS_Pr->UseCustomMode) {
-- modeflag = SiS_Pr->CModeFlag;
-+ if(ModeNo <= 0x13) {
-+ modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
- } else {
-- if (ModeNo <= 0x13)
-- modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
-- else {
-+ if(SiS_Pr->UseCustomMode) {
-+ modeflag = SiS_Pr->CModeFlag;
-+ } else {
- modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
- resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
-- }
-- }
-+ }
-+ }
-
- SiS_Pr->SiS_SetFlag = 0;
-
-@@ -4364,22 +4491,24 @@ SiS_GetVBInfo(SiS_Private *SiS_Pr, USHOR
- if(SiS_BridgeIsOn(SiS_Pr,BaseAddr,HwDeviceExtension) == 0) {
- temp = SiS_GetReg1(SiS_Pr->SiS_P3d4,0x30);
- #if 0
-- /* SiS_HiVision is only used on 310/325/330+30xLV */
-+ /* SiS_HiVision is only used on 315/330+30xLV */
- if(SiS_Pr->SiS_VBType & (VB_SIS301LV302LV)) {
-- if(SiS_Pr->SiS_HiVision & 0x03) { /* TW: New from 650/30xLV 1.10.6s */
-+ if(SiS_Pr->SiS_HiVision & 0x03) { /* New from 650/30xLV 1.10.6s */
- temp &= (SetCRT2ToHiVisionTV | SwitchToCRT2 | SetSimuScanMode); /* 0x83 */
- temp |= SetCRT2ToHiVisionTV; /* 0x80 */
- }
-- if(SiS_Pr->SiS_HiVision & 0x04) { /* TW: New from 650/30xLV 1.10.6s */
-+ if(SiS_Pr->SiS_HiVision & 0x04) { /* New from 650/30xLV 1.10.6s */
- temp &= (SetCRT2ToHiVisionTV | SwitchToCRT2 | SetSimuScanMode); /* 0x83 */
- temp |= SetCRT2ToSVIDEO; /* 0x08 */
- }
- }
--#endif
-+#endif
-+#if 0
- if(SiS_Pr->SiS_IF_DEF_FSTN) { /* fstn must set CR30=0x21 */
- temp = (SetCRT2ToLCD | SetSimuScanMode);
- SiS_SetReg1(SiS_Pr->SiS_P3d4,0x30,temp);
- }
-+#endif
- tempbx |= temp;
- tempax = SiS_GetReg1(SiS_Pr->SiS_P3d4,0x31) << 8;
- tempax &= (LoadDACFlag | DriverMode | SetDispDevSwitch | SetNotSimuMode | SetPALTV);
-@@ -4519,7 +4648,7 @@ SiS_GetVBInfo(SiS_Private *SiS_Pr, USHOR
- tempbx |= SetSimuScanMode;
- }
-
-- /* TW: LVDS (LCD/TV) and 301BDH (LCD) can only be slave in 8bpp modes */
-+ /* LVDS (LCD/TV) and 301BDH (LCD) can only be slave in 8bpp modes */
- if(SiS_Pr->SiS_ModeType <= ModeVGA) {
- if( (SiS_Pr->SiS_IF_DEF_LVDS == 1) ||
- ((tempbx & SetCRT2ToLCD) && (SiS_Pr->SiS_VBType & VB_NoLCD)) ) {
-@@ -4527,12 +4656,12 @@ SiS_GetVBInfo(SiS_Private *SiS_Pr, USHOR
- }
- }
-
-- if(!(tempbx & SetSimuScanMode)){
-+ if(!(tempbx & SetSimuScanMode)) {
- if(tempbx & SwitchToCRT2) {
- if((!(modeflag & CRT2Mode)) && (checkcrt2mode)) {
- if( (HwDeviceExtension->jChipType >= SIS_315H) &&
- (SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) ) {
-- if(resinfo != 0x0a)
-+ if(resinfo != SIS_RI_1600x1200)
- tempbx |= SetSimuScanMode;
- } else {
- tempbx |= SetSimuScanMode;
-@@ -4555,7 +4684,7 @@ SiS_GetVBInfo(SiS_Private *SiS_Pr, USHOR
- if((!(modeflag & CRT2Mode)) && (checkcrt2mode)) {
- if( (HwDeviceExtension->jChipType >= SIS_315H) &&
- (SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) ) {
-- if(resinfo != 0x0a) { /* TW: 650/301 BIOS */
-+ if(resinfo != SIS_RI_1600x1200) { /* 650/301 BIOS */
- tempbx |= SetInSlaveMode;
- if(SiS_Pr->SiS_IF_DEF_LVDS == 0) {
- if(tempbx & SetCRT2ToTV) {
-@@ -4563,7 +4692,7 @@ SiS_GetVBInfo(SiS_Private *SiS_Pr, USHOR
- SiS_Pr->SiS_SetFlag |= TVSimuMode;
- }
- }
-- } /* TW: 650/301 BIOS */
-+ } /* 650/301 BIOS */
- } else {
- tempbx |= SetInSlaveMode;
- if(SiS_Pr->SiS_IF_DEF_LVDS == 0) {
-@@ -4621,7 +4750,7 @@ SiS_GetVBInfo(SiS_Private *SiS_Pr, USHOR
- if(HwDeviceExtension->jChipType >= SIS_315H) {
- if(ROMAddr && SiS_Pr->SiS_UseROM) {
- OutputSelect = ROMAddr[0xf3];
-- if(HwDeviceExtension->jChipType == SIS_330) {
-+ if(HwDeviceExtension->jChipType >= SIS_330) {
- OutputSelect = ROMAddr[0x11b];
- }
- }
-@@ -4652,7 +4781,7 @@ SiS_GetVBInfo(SiS_Private *SiS_Pr, USHOR
- SiS_Pr->SiS_VBInfo = tempbx;
-
- if(HwDeviceExtension->jChipType == SIS_630) {
-- SiS_WhatIsThis(SiS_Pr, SiS_Pr->SiS_VBInfo);
-+ SiS_SetChrontelGPIO(SiS_Pr, SiS_Pr->SiS_VBInfo);
- }
-
- #ifdef TWDEBUG
-@@ -4666,61 +4795,35 @@ SiS_GetVBInfo(SiS_Private *SiS_Pr, USHOR
- #endif
- #endif
-
--#if 0 /* TW: Incomplete! (But does not seem to be required) */
-- if(HwDeviceExtension->jChipType < SIS_315H) {
-- /* TW: From A901/630+301B BIOS */
-- if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
-- if(SiS_GetReg1(SiS_Pr->SiS_P3c4,0x13) & 0x80)
-- }
-- if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD)) {
-- if(SiS_GetReg1(SiS_Pr->SiS_P3c4,0x13) & 0x80)
-- if( [si] == 3) ModeIdIndex = 0x3f2b;
-- }
-- }
-- SiS_SetRegAND(SiS_Pr->SiS_P3d4, 0x31, 0xF7);
-- if(ModeNo == 0x13) bp+4 = 0x03;
-- } else {
-- /* From 650/30xLV BIOS: */
-- SiS_SetRegAND(SiS_Pr->SiS_P3d4, 0x31, 0xF7);
-- if(ModeNo == 0x13) bp+4 = 0x03;
-- else bp+4 = ModeNo;
-- }
--#endif
--
-- /* TW: 630/301B and 650/301 (not 301LV!) BIOSes do more here, but this seems for DOS mode */
--
- }
-
-+/* Setup general purpose IO for Chrontel communication */
- void
--SiS_WhatIsThis(SiS_Private *SiS_Pr, USHORT myvbinfo)
-+SiS_SetChrontelGPIO(SiS_Private *SiS_Pr, USHORT myvbinfo)
- {
-- unsigned long eax, temp;
-- unsigned short temp1;
-+ unsigned long acpibase;
-+ unsigned short temp;
-
- if(!(SiS_Pr->SiS_ChSW)) return;
-
- #ifndef LINUX_XF86
-- SiS_SetReg4(0xcf8,0x80000874);
-- eax = SiS_GetReg3(0xcfc);
-+ SiS_SetReg4(0xcf8,0x80000874); /* get ACPI base */
-+ acpibase = SiS_GetReg3(0xcfc);
- #else
-- eax = pciReadLong(0x00000800, 0x74);
-+ acpibase = pciReadLong(0x00000800, 0x74);
- #endif
-- eax &= 0xFFFF;
-- temp = eax;
-- eax += 0x3c;
-- temp1 = SiS_GetReg4((USHORT)eax);
-- temp1 &= 0xFEFF;
-- SiS_SetReg5((USHORT)eax, temp1);
-- temp1 = SiS_GetReg4((USHORT)eax);
-- eax = temp;
-- eax += 0x3a;
-- temp1 = SiS_GetReg4((USHORT)eax);
-- temp1 &= 0xFEFF;
-+ acpibase &= 0xFFFF;
-+ temp = SiS_GetReg4((USHORT)(acpibase + 0x3c)); /* ACPI register 0x3c: GP Event 1 I/O mode select */
-+ temp &= 0xFEFF;
-+ SiS_SetReg5((USHORT)(acpibase + 0x3c), temp);
-+ temp = SiS_GetReg4((USHORT)(acpibase + 0x3c));
-+ temp = SiS_GetReg4((USHORT)(acpibase + 0x3a)); /* ACPI register 0x3a: GP Pin Level (low/high) */
-+ temp &= 0xFEFF;
- if(!(myvbinfo & SetCRT2ToTV)) {
-- temp1 |= 0x0100;
-+ temp |= 0x0100;
- }
-- SiS_SetReg5((USHORT)eax, temp1);
-- temp1 = SiS_GetReg4((USHORT)eax);
-+ SiS_SetReg5((USHORT)(acpibase + 0x3a), temp);
-+ temp = SiS_GetReg4((USHORT)(acpibase + 0x3a));
- }
-
- void
-@@ -4731,14 +4834,14 @@ SiS_GetRAMDAC2DATA(SiS_Private *SiS_Pr,
- USHORT temp1=0,modeflag=0,tempcx=0;
- USHORT StandTableIndex,CRT1Index;
- #ifdef SIS315H
-- USHORT ResInfo,DisplayType,temp=0;
-+ USHORT ResIndex,DisplayType,temp=0;
- const SiS_LVDSCRT1DataStruct *LVDSCRT1Ptr = NULL;
- #endif
-
- SiS_Pr->SiS_RVBHCMAX = 1;
- SiS_Pr->SiS_RVBHCFACT = 1;
-
-- if(ModeNo <= 0x13){
-+ if(ModeNo <= 0x13) {
-
- modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
- StandTableIndex = SiS_GetModePtr(SiS_Pr,ROMAddr,ModeNo,ModeIdIndex);
-@@ -4752,7 +4855,7 @@ SiS_GetRAMDAC2DATA(SiS_Private *SiS_Pr,
-
- #ifdef SIS315H
- temp = SiS_GetLVDSCRT1Ptr(SiS_Pr,ROMAddr,ModeNo,ModeIdIndex,
-- RefreshRateTableIndex,&ResInfo,&DisplayType);
-+ RefreshRateTableIndex,&ResIndex,&DisplayType);
-
- if(temp == 0) return;
-
-@@ -4795,16 +4898,16 @@ SiS_GetRAMDAC2DATA(SiS_Private *SiS_Pr,
- case 99: LVDSCRT1Ptr = SiS_Pr->SiS_CHTVCRT1OPAL; break;
- default: LVDSCRT1Ptr = SiS_Pr->SiS_LVDSCRT11024x768_1; break;
- }
-- tempax = (LVDSCRT1Ptr+ResInfo)->CR[0];
-- tempax |= (LVDSCRT1Ptr+ResInfo)->CR[14] << 8;
-+ tempax = (LVDSCRT1Ptr+ResIndex)->CR[0];
-+ tempax |= (LVDSCRT1Ptr+ResIndex)->CR[14] << 8;
- tempax &= 0x03FF;
-- tempbx = (LVDSCRT1Ptr+ResInfo)->CR[6];
-- tempcx = (LVDSCRT1Ptr+ResInfo)->CR[13] << 8;
-+ tempbx = (LVDSCRT1Ptr+ResIndex)->CR[6];
-+ tempcx = (LVDSCRT1Ptr+ResIndex)->CR[13] << 8;
- tempcx &= 0x0100;
- tempcx <<= 2;
- tempbx |= tempcx;
-- temp1 = (LVDSCRT1Ptr+ResInfo)->CR[7];
--#endif
-+ temp1 = (LVDSCRT1Ptr+ResIndex)->CR[7];
-+#endif
-
- } else {
-
-@@ -4840,11 +4943,12 @@ SiS_GetRAMDAC2DATA(SiS_Private *SiS_Pr,
- if(modeflag & Charx8Dot) tempax *= 8;
- else tempax *= 9;
-
-- /* TW: From 650/30xLV 1.10.6s */
-+ /* From 650/30xLV 1.10.6s */
- if(modeflag & HalfDCLK) tempax <<= 1;
-
-- SiS_Pr->SiS_VGAHT = SiS_Pr->SiS_HT = tempax;
- tempbx++;
-+
-+ SiS_Pr->SiS_VGAHT = SiS_Pr->SiS_HT = tempax;
- SiS_Pr->SiS_VGAVT = SiS_Pr->SiS_VT = tempbx;
- }
-
-@@ -4852,18 +4956,18 @@ void
- SiS_UnLockCRT2(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension,USHORT BaseAddr)
- {
- if(HwDeviceExtension->jChipType >= SIS_315H)
-- SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2f,0x01);
-+ SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2f,0x01);
- else
-- SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x24,0x01);
-+ SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x24,0x01);
- }
-
- void
- SiS_LockCRT2(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension,USHORT BaseAddr)
- {
- if(HwDeviceExtension->jChipType >= SIS_315H)
-- SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2F,0xFE);
-+ SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2F,0xFE);
- else
-- SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x24,0xFE);
-+ SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x24,0xFE);
- }
-
- void
-@@ -4872,7 +4976,6 @@ SiS_EnableCRT2(SiS_Private *SiS_Pr)
- SiS_SetRegOR(SiS_Pr->SiS_P3c4,0x1E,0x20);
- }
-
--/* Checked against all BIOSes */
- void
- SiS_DisableBridge(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension,USHORT BaseAddr)
- {
-@@ -4882,9 +4985,9 @@ SiS_DisableBridge(SiS_Private *SiS_Pr, P
- USHORT temp=0;
- UCHAR *ROMAddr = HwDeviceExtension->pjVirtualRomBase;
-
-- if (SiS_Pr->SiS_IF_DEF_LVDS == 0) {
-+ if(SiS_Pr->SiS_IF_DEF_LVDS == 0) {
-
-- if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) { /* ===== TW: For 30xB/LV ===== */
-+ if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) { /* ===== For 30xB/LV ===== */
-
- if(HwDeviceExtension->jChipType < SIS_315H) {
-
-@@ -4940,9 +5043,9 @@ SiS_DisableBridge(SiS_Private *SiS_Pr, P
-
- } else {
-
--#ifdef SIS315H /* 310/325 series */
-+#ifdef SIS315H /* 315 series */
-
-- if(IS_SIS650740) { /* 650, 740 */
-+ if(IS_SIS550650740660) { /* 550, 650, 740, 660 */
-
- #if 0
- if(SiS_GetReg1(SiS_Pr->SiS_Part4Port,0x00) != 1) return; /* From 1.10.7w */
-@@ -4966,22 +5069,35 @@ SiS_DisableBridge(SiS_Private *SiS_Pr, P
- SiS_SetReg3(SiS_Pr->SiS_P3c6,0x00);
-
- pushax = SiS_GetReg1(SiS_Pr->SiS_P3c4,0x06);
--
-+
- if(IS_SIS740) {
- SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x06,0xE3);
- }
-
- SiS_SetPanelDelay(SiS_Pr,ROMAddr, HwDeviceExtension, 3);
--
-- if(!(SiS_IsNotM650or651(SiS_Pr,HwDeviceExtension, BaseAddr))) {
-- tempah = 0xef;
-- if(SiS_IsVAMode(SiS_Pr,HwDeviceExtension, BaseAddr)) {
-- tempah = 0xf7;
-- }
-- SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x4c,tempah);
-+
-+ if(!(IS_SIS740)) {
-+ if(!(SiS_IsNotM650or651(SiS_Pr,HwDeviceExtension, BaseAddr))) {
-+ tempah = 0xef;
-+ if(SiS_IsVAMode(SiS_Pr,HwDeviceExtension, BaseAddr)) {
-+ tempah = 0xf7;
-+ }
-+ SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x4c,tempah);
-+ }
- }
-
-- }
-+ } else if(SiS_Pr->SiS_VBType & VB_NoLCD) {
-+ if(HwDeviceExtension->jChipType == SIS_650) {
-+ if(!(SiS_IsNotM650or651(SiS_Pr,HwDeviceExtension, BaseAddr))) {
-+ SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x4c,0xef);
-+ }
-+ if((!(SiS_IsDualEdge(SiS_Pr,HwDeviceExtension, BaseAddr))) ||
-+ (SiS_IsVAMode(SiS_Pr,HwDeviceExtension, BaseAddr)) ) {
-+ SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x26,0xFE,0x00);
-+ }
-+ SiS_SetPanelDelay(SiS_Pr, ROMAddr, HwDeviceExtension, 3);
-+ }
-+ }
-
- if(SiS_Pr->SiS_VBType & VB_SIS301B302B) {
- tempah = 0x3f;
-@@ -5046,8 +5162,8 @@ SiS_DisableBridge(SiS_Private *SiS_Pr, P
-
- if(SiS_Pr->SiS_VBType & VB_SIS301LV302LV) {
-
-- SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x1f,~0x10); /* 1.10.8r */
--
-+ SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x1f,~0x10); /* 1.10.8r, 8m */
-+
- tempah = 0x3f;
- if(SiS_IsDualEdge(SiS_Pr,HwDeviceExtension, BaseAddr)) {
- tempah = 0x7f;
-@@ -5057,9 +5173,9 @@ SiS_DisableBridge(SiS_Private *SiS_Pr, P
- }
- SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x1F,tempah);
-
-- if(SiS_IsNotM650or651(SiS_Pr,HwDeviceExtension, BaseAddr)) { /* 1.10.8r */
-+ if(SiS_IsNotM650or651(SiS_Pr,HwDeviceExtension, BaseAddr)) { /* 1.10.8r, 8m */
- SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2e,0x7f);
-- } /* 1.10.8r */
-+ } /* 1.10.8r, 8m */
-
- if(!(SiS_IsVAMode(SiS_Pr,HwDeviceExtension, BaseAddr))) {
- SiS_SetRegAND(SiS_Pr->SiS_Part2Port,0x00,0xdf);
-@@ -5075,81 +5191,33 @@ SiS_DisableBridge(SiS_Private *SiS_Pr, P
-
- SiS_SetReg1(SiS_Pr->SiS_P3c4,0x06,pushax);
-
-- }
--
--#if 0
-- } else if(IS_SIS740) { /* 740 */
--
-- if(SiS_Pr->SiS_VBType & VB_SIS301LV302LV) { /* 30xLV */
--
-- if( (!(SiS_IsDualEdge(SiS_Pr,HwDeviceExtension, BaseAddr))) ||
-- (SiS_IsVAMode(SiS_Pr,HwDeviceExtension, BaseAddr)) ) {
-- SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x26,0xFE,0x00);
-- }
--
-- SiS_SetReg3(SiS_Pr->SiS_P3c6,0x00);
-+ } else if(SiS_Pr->SiS_VBType & VB_NoLCD) {
-+ if(HwDeviceExtension->jChipType == SIS_650) {
-+ if((SiS_IsVAMode(SiS_Pr,HwDeviceExtension, BaseAddr)) ||
-+ (!(SiS_IsDualEdge(SiS_Pr,HwDeviceExtension, BaseAddr)))) {
-+ if((!(SiS_WeHaveBacklightCtrl(SiS_Pr,HwDeviceExtension, BaseAddr))) ||
-+ (!(SiS_CRT2IsLCD(SiS_Pr,BaseAddr,HwDeviceExtension)))) {
-+ SiS_SetPanelDelay(SiS_Pr, ROMAddr, HwDeviceExtension, 2);
-+ SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x26,0xFD,0x00);
-+ SiS_SetPanelDelay(SiS_Pr, ROMAddr, HwDeviceExtension, 4);
-+ }
-+ }
-+ }
-+ } else if(SiS_Pr->SiS_VBType & VB_SIS301B302B) {
-+ if(HwDeviceExtension->jChipType == SIS_650) {
-+ if(!(SiS_IsNotM650or651(SiS_Pr,HwDeviceExtension, BaseAddr))) {
-+ tempah = 0xef;
-+ if(SiS_IsDualEdge(SiS_Pr,HwDeviceExtension, BaseAddr)) {
-+ if(modenum > 0x13) {
-+ tempah = 0xf7;
-+ }
-+ }
-+ SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x4c,tempah);
-+ }
-+ }
-+ }
-
-- pushax = SiS_GetReg1(SiS_Pr->SiS_P3c4,0x06);
--
-- SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x06,0xE3);
--
-- SiS_SetPanelDelay(SiS_Pr,ROMAddr, HwDeviceExtension, 3);
--
-- if(SiS_IsVAMode(SiS_Pr,HwDeviceExtension, BaseAddr)) {
-- SiS_DisplayOff(SiS_Pr);
-- SiS_SetPanelDelay(SiS_Pr,ROMAddr, HwDeviceExtension, 2);
-- SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x32,0xDF);
-- SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x1E,0xDF);
-- } else {
-- SiS_DisplayOff(SiS_Pr);
-- SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x00,0x80);
-- SiS_SetPanelDelay(SiS_Pr,ROMAddr, HwDeviceExtension, 2);
-- SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x32,0xDF);
-- temp = SiS_GetReg1(SiS_Pr->SiS_Part1Port,0x00);
-- SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x00,0x10);
-- SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x1E,0xDF);
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x00,temp);
-- }
--
-- SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x1F,0x3F);
-- SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x1F,0xEF); /* (from 650) */
--
-- SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2e,0x7f);
--
-- if(!(SiS_IsVAMode(SiS_Pr,HwDeviceExtension, BaseAddr))) {
-- SiS_SetRegAND(SiS_Pr->SiS_Part2Port,0x00,0xdf);
-- }
--
-- if(!(SiS_WeHaveBacklightCtrl(SiS_Pr,HwDeviceExtension, BaseAddr))) {
-- if(!(SiS_IsVAMode(SiS_Pr,HwDeviceExtension, BaseAddr))) {
-- if(!(SiS_CRT2IsLCD(SiS_Pr,BaseAddr,HwDeviceExtension))) {
-- if(!(SiS_IsDualEdge(SiS_Pr,HwDeviceExtension, BaseAddr))) {
-- SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x26,0xFD,0x00);
-- }
-- }
-- }
-- }
-- SiS_SetReg1(SiS_Pr->SiS_P3c4,0x06,pushax);
--
-- } else { /* (301,) 301B */
--
-- if(SiS_Is301B(SiS_Pr,BaseAddr)) {
-- SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x1F,0x3F);
-- }
--
-- SiS_SetRegAND(SiS_Pr->SiS_Part2Port,0x00,0xDF);
-- SiS_DisplayOff(SiS_Pr);
-- SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x00,0x80);
-- SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x32,0xDF);
--
-- temp = SiS_GetReg1(SiS_Pr->SiS_Part1Port,0x00);
-- SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x00,0x10);
-- SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x1E,0xDF);
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x00,temp);
--
-- }
--#endif
-- } else { /* 315, 330 - all bridge types */
-+ } else { /* 315, 330 - all bridge types */
-
- if(SiS_Is301B(SiS_Pr,BaseAddr)) {
- tempah = 0x3f;
-@@ -5193,13 +5261,13 @@ SiS_DisableBridge(SiS_Private *SiS_Pr, P
-
- }
-
-- } else { /* ============ TW: For 301 ================ */
-+ } else { /* ============ For 301 ================ */
-
- if(HwDeviceExtension->jChipType < SIS_315H) {
-- if(SiS_CRT2IsLCD(SiS_Pr,BaseAddr,HwDeviceExtension)) {
-- SiS_SetRegANDOR(SiS_Pr->SiS_P3c4,0x11,0xF0,0x0B);
-- SiS_SetPanelDelay(SiS_Pr, ROMAddr, HwDeviceExtension, 1);
-- }
-+ if(!(SiS_CR36BIOSWord23b(SiS_Pr,HwDeviceExtension))) {
-+ SiS_SetRegANDOR(SiS_Pr->SiS_P3c4,0x11,0xF7,0x08);
-+ SiS_SetPanelDelay(SiS_Pr,ROMAddr, HwDeviceExtension, 3);
-+ }
- }
-
- SiS_SetRegAND(SiS_Pr->SiS_Part2Port,0x00,0xDF); /* disable VB */
-@@ -5218,18 +5286,23 @@ SiS_DisableBridge(SiS_Private *SiS_Pr, P
- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x00,temp);
- } else {
- SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x1E,0xDF); /* disable CRT2 */
-+ if( (!(SiS_CRT2IsLCD(SiS_Pr,BaseAddr,HwDeviceExtension))) ||
-+ (!(SiS_CR36BIOSWord23d(SiS_Pr,HwDeviceExtension))) ) {
-+ SiS_SetPanelDelay(SiS_Pr,ROMAddr, HwDeviceExtension, 2);
-+ SiS_SetRegANDOR(SiS_Pr->SiS_P3c4,0x11,0xFB,0x04);
-+ }
- }
-
- }
-
-- } else { /* ============ TW: For LVDS =============*/
-+ } else { /* ============ For LVDS =============*/
-
- if(HwDeviceExtension->jChipType < SIS_315H) {
-
- #ifdef SIS300 /* 300 series */
-
- if(SiS_Pr->SiS_IF_DEF_CH70xx == 1) {
-- SiS_SetCH700x(SiS_Pr,0x090E);
-+ SiS_SetCH700x(SiS_Pr,0x090E);
- }
-
- if(HwDeviceExtension->jChipType == SIS_730) {
-@@ -5245,17 +5318,17 @@ SiS_DisableBridge(SiS_Private *SiS_Pr, P
-
- if(!(SiS_GetReg1(SiS_Pr->SiS_P3c4,0x13) & 0x40)) {
-
-- if(!(SiS_CR36BIOSWord23b(SiS_Pr,HwDeviceExtension))) {
-+ if(!(SiS_CR36BIOSWord23b(SiS_Pr,HwDeviceExtension))) {
-
-- SiS_WaitVBRetrace(SiS_Pr,HwDeviceExtension);
-+ SiS_WaitVBRetrace(SiS_Pr,HwDeviceExtension);
-
-- if(!(SiS_GetReg1(SiS_Pr->SiS_P3c4,0x06) & 0x1c)) {
-- SiS_DisplayOff(SiS_Pr);
-- }
-+ if(!(SiS_GetReg1(SiS_Pr->SiS_P3c4,0x06) & 0x1c)) {
-+ SiS_DisplayOff(SiS_Pr);
-+ }
-
-- SiS_SetRegANDOR(SiS_Pr->SiS_P3c4,0x11,0xF7,0x08);
-- SiS_SetPanelDelay(SiS_Pr,ROMAddr, HwDeviceExtension, 3);
-- }
-+ SiS_SetRegANDOR(SiS_Pr->SiS_P3c4,0x11,0xF7,0x08);
-+ SiS_SetPanelDelay(SiS_Pr,ROMAddr, HwDeviceExtension, 3);
-+ }
- }
- }
- }
-@@ -5279,29 +5352,40 @@ SiS_DisableBridge(SiS_Private *SiS_Pr, P
-
- } else {
-
--#ifdef SIS315H /* 310/325 series */
-+#ifdef SIS315H /* 315 series */
-
- if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
-- temp = SiS_GetCH701x(SiS_Pr,0x61);
-- if(temp < 1) {
-- SiS_SetCH701x(SiS_Pr,0xac76);
-- SiS_SetCH701x(SiS_Pr,0x0066);
-- }
--
-- if(!(SiS_IsDualEdge(SiS_Pr,HwDeviceExtension, BaseAddr))) {
-+
-+ if(HwDeviceExtension->jChipType == SIS_740) {
-+ temp = SiS_GetCH701x(SiS_Pr,0x61);
-+ if(temp < 1) {
-+ SiS_SetCH701x(SiS_Pr,0xac76);
-+ SiS_SetCH701x(SiS_Pr,0x0066);
-+ }
-+
-+ if(!(SiS_IsDualEdge(SiS_Pr,HwDeviceExtension, BaseAddr))) {
- SiS_SetCH701x(SiS_Pr,0x3e49);
-- } else if(SiS_IsTVOrYPbPrOrScart(SiS_Pr,HwDeviceExtension, BaseAddr)) {
-+ } else if(SiS_IsTVOrYPbPrOrScart(SiS_Pr,HwDeviceExtension, BaseAddr)) {
- SiS_SetCH701x(SiS_Pr,0x3e49);
-+ }
- }
--
-+
- if(!(SiS_IsDualEdge(SiS_Pr,HwDeviceExtension, BaseAddr))) {
- SiS_Chrontel701xBLOff(SiS_Pr);
-- SiS_Chrontel701xOff(SiS_Pr);
-+ SiS_Chrontel701xOff(SiS_Pr,HwDeviceExtension);
- } else if(SiS_IsVAMode(SiS_Pr,HwDeviceExtension, BaseAddr)) {
- SiS_Chrontel701xBLOff(SiS_Pr);
-- SiS_Chrontel701xOff(SiS_Pr);
-+ SiS_Chrontel701xOff(SiS_Pr,HwDeviceExtension);
- }
--
-+
-+ if(HwDeviceExtension->jChipType != SIS_740) {
-+ if(!(SiS_IsDualEdge(SiS_Pr,HwDeviceExtension, BaseAddr))) {
-+ SiS_SetCH701x(SiS_Pr,0x0149);
-+ } else if(SiS_IsTVOrYPbPrOrScart(SiS_Pr,HwDeviceExtension, BaseAddr)) {
-+ SiS_SetCH701x(SiS_Pr,0x0149);
-+ }
-+ }
-+
- }
-
- if(SiS_Pr->SiS_IF_DEF_CH70xx == 0) {
-@@ -5325,6 +5409,10 @@ SiS_DisableBridge(SiS_Private *SiS_Pr, P
- SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x00,0x80);
- }
-
-+ if(HwDeviceExtension->jChipType == SIS_740) {
-+ SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2e,0x7f);
-+ }
-+
- SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x32,0xDF);
-
- if(SiS_Pr->SiS_IF_DEF_CH70xx == 0) {
-@@ -5337,15 +5425,27 @@ SiS_DisableBridge(SiS_Private *SiS_Pr, P
-
- if(SiS_Pr->SiS_IF_DEF_CH70xx == 0) {
- if(SiS_CRT2IsLCD(SiS_Pr, BaseAddr,HwDeviceExtension)) {
-- SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x1e,0xdf);
-+ SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x1e,0xdf);
-+ if(HwDeviceExtension->jChipType == SIS_550) {
-+ SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x1e,0xbf);
-+ SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x1e,0xef);
-+ }
-+ }
-+ } else {
-+ if(HwDeviceExtension->jChipType == SIS_740) {
-+ if(SiS_IsLCDOrLCDA(SiS_Pr,HwDeviceExtension, BaseAddr)) {
-+ SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x1e,0xdf);
- }
-- } else if(SiS_IsLCDOrLCDA(SiS_Pr,HwDeviceExtension, BaseAddr)) {
-- SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x1e,0xdf);
-+ } else {
-+ if(SiS_IsVAMode(SiS_Pr,HwDeviceExtension, BaseAddr)) {
-+ SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x1e,0xdf);
-+ }
-+ }
- }
-
- if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
- if(SiS_IsDualEdge(SiS_Pr,HwDeviceExtension, BaseAddr)) {
-- SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x13,0xff);
-+ /* SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x13,0xff); */
- } else {
- SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x13,0xfb);
- }
-@@ -5353,7 +5453,10 @@ SiS_DisableBridge(SiS_Private *SiS_Pr, P
-
- SiS_UnLockCRT2(SiS_Pr,HwDeviceExtension, BaseAddr);
-
-- if(SiS_Pr->SiS_IF_DEF_CH70xx == 0) {
-+ if(HwDeviceExtension->jChipType == SIS_550) {
-+ SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x01,0x80);
-+ SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x02,0x40);
-+ } else if(SiS_Pr->SiS_IF_DEF_CH70xx == 0) {
- SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2e,0xf7);
- } else if(!(SiS_IsDualEdge(SiS_Pr,HwDeviceExtension, BaseAddr))) {
- SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2e,0xf7);
-@@ -5361,7 +5464,7 @@ SiS_DisableBridge(SiS_Private *SiS_Pr, P
- SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2e,0xf7);
- }
-
--#if 0 /* TW: BIOS code makes no sense */
-+#if 0 /* BIOS code makes no sense */
- if(SiS_IsVAMode(SiS_Pr,HwDeviceExtension, BaseAddr)) {
- if(!(SiS_IsDualEdge(SiS_Pr,HwDeviceExtension, BaseAddr))) {
- if(SiS_WeHaveBacklightCtrl(SiS_Pr,HwDeviceExtension, BaseAddr)) {
-@@ -5387,7 +5490,6 @@ SiS_DisableBridge(SiS_Private *SiS_Pr, P
-
- }
-
--/* TW: Checked against all BIOSes */
- void
- SiS_EnableBridge(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension, USHORT BaseAddr)
- {
-@@ -5400,7 +5502,7 @@ SiS_EnableBridge(SiS_Private *SiS_Pr, PS
-
- if(SiS_Pr->SiS_IF_DEF_LVDS == 0) {
-
-- if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) { /* TW: ====== For 301B et al ====== */
-+ if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) { /* ====== For 301B et al ====== */
-
- if(HwDeviceExtension->jChipType < SIS_315H) {
-
-@@ -5497,9 +5599,9 @@ SiS_EnableBridge(SiS_Private *SiS_Pr, PS
-
- } else {
-
--#ifdef SIS315H /* 310/325 series */
-+#ifdef SIS315H /* 315 series */
-
-- if(IS_SIS650740) { /* 650 */
-+ if(IS_SIS550650740660) { /* 550, 650, 740, 660 */
-
- #if 0
- if(SiS_GetReg1(SiS_Pr->SiS_Part4Port,0x00) != 1) return; /* From 1.10.7w */
-@@ -5541,7 +5643,32 @@ SiS_EnableBridge(SiS_Private *SiS_Pr, PS
- delaylong = TRUE;
- }
-
-- }
-+ } else if(SiS_Pr->SiS_VBType & VB_NoLCD) {
-+ if(HwDeviceExtension->jChipType == SIS_650) {
-+ if(!(SiS_IsNotM650or651(SiS_Pr,HwDeviceExtension, BaseAddr))) {
-+ SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x4c,0x10);
-+ }
-+ if( (SiS_IsVAMode(SiS_Pr,HwDeviceExtension, BaseAddr)) ||
-+ (SiS_CRT2IsLCD(SiS_Pr,BaseAddr,HwDeviceExtension)) ) {
-+ SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x26,0x02);
-+ SiS_SetPanelDelay(SiS_Pr,ROMAddr, HwDeviceExtension, 0);
-+ }
-+ }
-+ } else if(SiS_Pr->SiS_VBType & VB_SIS301B302B) {
-+
-+ if(HwDeviceExtension->jChipType == SIS_650) {
-+ if(!(SiS_IsNotM650or651(SiS_Pr,HwDeviceExtension, BaseAddr))) {
-+ tempah = 0x10;
-+ if(SiS_GetReg1(SiS_Pr->SiS_Part1Port,0x13) & 0x04) {
-+ tempah = 0x18;
-+ if((SiS_GetReg1(SiS_Pr->SiS_Part2Port,0x00) & 0x0f) == 0x0c) {
-+ tempah = 0x08;
-+ }
-+ }
-+ SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x4c,tempah);
-+ }
-+ }
-+ }
-
- if(!(SiS_IsVAMode(SiS_Pr,HwDeviceExtension, BaseAddr))) {
- temp = SiS_GetReg1(SiS_Pr->SiS_P3c4,0x32) & 0xDF;
-@@ -5595,11 +5722,24 @@ SiS_EnableBridge(SiS_Private *SiS_Pr, PS
- SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x30,0x00); /* All this from 1.10.7u */
- SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x27,0x0c);
- SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x30,0x20);
-- SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x31,0x05);
-- SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x32,0x60);
-- SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x33,0x00);
-- SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x34,0x10);
-- SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x30,0x40);
-+
-+ SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x31,0x12);
-+ SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x32,0xd0);
-+ SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x33,0x6b);
-+ if((SiS_GetReg1(SiS_Pr->SiS_P3d4,0x36) & 0x0f) == 0x02) {
-+ SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x31,0x0d);
-+ SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x32,0x70);
-+ SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x33,0x40);
-+ if(((SiS_GetReg1(SiS_Pr->SiS_P3d4,0x36) & 0xf0) != 0x03)) {
-+ SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x31,0x05);
-+ SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x32,0x60);
-+ SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x33,0x33); /* 00 */
-+ }
-+ }
-+ SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x34,0x10);
-+ if((SiS_GetReg1(SiS_Pr->SiS_P3d4,0x36) & 0x0f) != 0x03) {
-+ SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x30,0x40);
-+ }
-
- SiS_SetPanelDelay(SiS_Pr,ROMAddr, HwDeviceExtension, 2);
-
-@@ -5610,127 +5750,44 @@ SiS_EnableBridge(SiS_Private *SiS_Pr, PS
- if(!(SiS_WeHaveBacklightCtrl(SiS_Pr,HwDeviceExtension, BaseAddr))) {
- if( (SiS_IsVAMode(SiS_Pr,HwDeviceExtension, BaseAddr)) ||
- ((SiS_CRT2IsLCD(SiS_Pr,BaseAddr,HwDeviceExtension))) ) {
-- SiS_SetPanelDelayLoop(SiS_Pr,ROMAddr, HwDeviceExtension, 3, 10);
-- if(delaylong) {
-+ SiS_SetPanelDelayLoop(SiS_Pr,ROMAddr, HwDeviceExtension, 3, 10);
-+ if(delaylong) {
- SiS_SetPanelDelayLoop(SiS_Pr,ROMAddr, HwDeviceExtension, 3, 10);
-- }
-- SiS_WaitVBRetrace(SiS_Pr,HwDeviceExtension);
-- SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x26,0xfe,0x01);
-- }
-- }
-+ }
-+ SiS_WaitVBRetrace(SiS_Pr,HwDeviceExtension);
-+ SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x26,0xfe,0x01);
-+ }
-+ }
-
-- SiS_SetReg1(SiS_Pr->SiS_P3c4,0x06,pushax);
-- SiS_DisplayOn(SiS_Pr);
-- SiS_SetReg3(SiS_Pr->SiS_P3c6,0xff);
-+ SiS_SetReg1(SiS_Pr->SiS_P3c4,0x06,pushax);
-+ SiS_DisplayOn(SiS_Pr);
-+ SiS_SetReg3(SiS_Pr->SiS_P3c6,0xff);
-
-- if(!(SiS_WeHaveBacklightCtrl(SiS_Pr,HwDeviceExtension, BaseAddr))) {
-+ if(!(SiS_WeHaveBacklightCtrl(SiS_Pr,HwDeviceExtension, BaseAddr))) {
- SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x00,0x7f);
-- }
-+ }
- #if 0
-- SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x30,0x00);
-- SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x27,0x0c);
-- SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x30,0x20);
-- SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x31,0x05); /* 1.10.8r: 0x0d */
-- SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x32,0x60); /* 1.10.8r: 0x70 */
-- SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x33,0x00); /* 1.10.8r: 0x40 */
-- SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x34,0x10);
-- SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x30,0x40);
-+ SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x30,0x00);
-+ SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x27,0x0c);
-+ SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x30,0x20);
-+ SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x31,0x05); /* 1.10.8r: 0x0d */
-+ SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x32,0x60); /* 1.10.8r: 0x70 */
-+ SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x33,0x00); /* 1.10.8r: 0x40 */
-+ SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x34,0x10);
-+ SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x30,0x40);
- #endif
-+ } if(SiS_Pr->SiS_VBType & VB_NoLCD) {
-+ if(HwDeviceExtension->jChipType == SIS_650) {
-+ if(!(SiS_WeHaveBacklightCtrl(SiS_Pr,HwDeviceExtension, BaseAddr))) {
-+ if( (SiS_IsVAMode(SiS_Pr,HwDeviceExtension, BaseAddr)) ||
-+ (SiS_CRT2IsLCD(SiS_Pr,BaseAddr,HwDeviceExtension)) ) {
-+ SiS_SetPanelDelay(SiS_Pr,ROMAddr, HwDeviceExtension, 1);
-+ SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x26,0x01);
-+ }
-+ }
-+ }
-+ }
-
-- }
--
--#if 0
-- } else if(IS_SIS740) { /* 740 */
--
-- if(SiS_Pr->SiS_VBType & VB_SIS301LV302LV) { /* 30xLV */
--
-- SiS_SetReg3(SiS_Pr->SiS_P3c6,0x00);
-- SiS_DisplayOff(SiS_Pr);
-- pushax = SiS_GetReg1(SiS_Pr->SiS_P3c4,0x06);
-- SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x06,0xE3);
--
-- if( (SiS_IsVAMode(SiS_Pr,HwDeviceExtension, BaseAddr)) ||
-- (SiS_CRT2IsLCD(SiS_Pr,BaseAddr,HwDeviceExtension)) ) {
-- if(!(SiS_GetReg1(SiS_Pr->SiS_Part4Port,0x26) & 0x02)) {
-- SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x26,0x02);
-- SiS_SetPanelDelay(SiS_Pr,ROMAddr, HwDeviceExtension, 3);
-- }
-- }
--
-- if(!(SiS_IsVAMode(SiS_Pr,HwDeviceExtension, BaseAddr))) {
-- temp = SiS_GetReg1(SiS_Pr->SiS_P3c4,0x32) & 0xDF;
-- if(SiS_BridgeInSlave(SiS_Pr)) {
-- tempah = SiS_GetReg1(SiS_Pr->SiS_P3d4,0x30);
-- if(!(tempah & SetCRT2ToRAMDAC)) temp |= 0x20;
-- }
-- SiS_SetReg1(SiS_Pr->SiS_P3c4,0x32,temp);
--
-- SiS_SetRegOR(SiS_Pr->SiS_P3c4,0x1E,0x20);
-- SiS_SetPanelDelay(SiS_Pr,ROMAddr, HwDeviceExtension, 2);
-- }
--
-- if(SiS_IsVAMode(SiS_Pr,HwDeviceExtension, BaseAddr)) {
-- SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x1E,0x20);
-- }
--
-- SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x00,0x1f,0x20);
-- SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x1F,0xC0);
-- SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x1F,0x10); /* (taken from 650 1.10.8r) */
-- SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2E,0x80);
--
-- if(!(SiS_WeHaveBacklightCtrl(SiS_Pr,HwDeviceExtension, BaseAddr))) {
-- if( (SiS_IsVAMode(SiS_Pr,HwDeviceExtension, BaseAddr)) ||
-- (SiS_CRT2IsLCD(SiS_Pr,BaseAddr,HwDeviceExtension)) ) {
-- SiS_SetPanelDelayLoop(SiS_Pr,ROMAddr, HwDeviceExtension, 3, 10);
-- if(SiS_GetReg1(SiS_Pr->SiS_P3d4,0x31) & 0x40) {
-- SiS_WaitVBRetrace(SiS_Pr,HwDeviceExtension);
-- }
-- SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x26,0xfe,0x01);
-- SiS_SetPanelDelayLoop(SiS_Pr,ROMAddr, HwDeviceExtension, 3, 10);
-- SiS_WaitVBRetrace(SiS_Pr,HwDeviceExtension);
-- }
-- }
--
-- SiS_SetReg1(SiS_Pr->SiS_P3c4,0x06,pushax);
-- SiS_DisplayOn(SiS_Pr);
-- SiS_SetReg3(SiS_Pr->SiS_P3c6,0xff);
--
-- if(!(SiS_WeHaveBacklightCtrl(SiS_Pr,HwDeviceExtension, BaseAddr))) {
-- SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x00,0x7f);
-- }
--
-- } else { /* (301), 301B */
--
-- if(!(SiS_IsVAMode(SiS_Pr,HwDeviceExtension, BaseAddr))) {
-- temp = SiS_GetReg1(SiS_Pr->SiS_P3c4,0x32) & 0xDF;
-- if(SiS_BridgeInSlave(SiS_Pr)) {
-- tempah = SiS_GetReg1(SiS_Pr->SiS_P3d4,0x30);
-- if(!(tempah & SetCRT2ToRAMDAC)) temp |= 0x20;
-- }
-- SiS_SetReg1(SiS_Pr->SiS_P3c4,0x32,temp);
--
-- SiS_SetRegOR(SiS_Pr->SiS_P3c4,0x1E,0x20); /* enable CRT2 */
--
-- temp = SiS_GetReg1(SiS_Pr->SiS_Part1Port,0x2E);
-- if(!(temp & 0x80))
-- SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2E,0x80);
-- }
--
-- SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x00,0x1f,0x20);
--
-- if(SiS_Is301B(SiS_Pr,BaseAddr)) {
-- SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x1F,0xC0);
-- SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x00,0x7f);
-- } else {
-- SiS_VBLongWait(SiS_Pr);
-- SiS_DisplayOn(SiS_Pr);
-- SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x00,0x7F);
-- SiS_VBLongWait(SiS_Pr);
-- }
--
-- }
--#endif
--
- } else { /* 315, 330 */
-
- if(!(SiS_IsVAMode(SiS_Pr,HwDeviceExtension, BaseAddr))) {
-@@ -5782,11 +5839,11 @@ SiS_EnableBridge(SiS_Private *SiS_Pr, PS
-
- }
-
-- } else { /* ============ TW: For 301 ================ */
-+ } else { /* ============ For 301 ================ */
-
- if(HwDeviceExtension->jChipType < SIS_315H) {
- if(SiS_CRT2IsLCD(SiS_Pr,BaseAddr,HwDeviceExtension)) {
-- SiS_SetRegANDOR(SiS_Pr->SiS_P3c4,0x11,0xF0,0x0B);
-+ SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x11,0xFB);
- SiS_SetPanelDelay(SiS_Pr, ROMAddr, HwDeviceExtension, 0);
- }
- }
-@@ -5818,13 +5875,13 @@ SiS_EnableBridge(SiS_Private *SiS_Pr, PS
- if(HwDeviceExtension->jChipType < SIS_315H) {
- if(SiS_CRT2IsLCD(SiS_Pr,BaseAddr,HwDeviceExtension)) {
- SiS_SetPanelDelay(SiS_Pr, ROMAddr, HwDeviceExtension, 1);
-- SiS_SetRegANDOR(SiS_Pr->SiS_P3c4,0x11,0xF0,0x03);
-+ SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x11,0xF7);
- }
- }
-
- }
-
-- } else { /* =================== TW: For LVDS ================== */
-+ } else { /* =================== For LVDS ================== */
-
- if(HwDeviceExtension->jChipType < SIS_315H) {
-
-@@ -5875,7 +5932,7 @@ SiS_EnableBridge(SiS_Private *SiS_Pr, PS
-
- } else {
-
--#ifdef SIS315H /* 310/325 series */
-+#ifdef SIS315H /* 315 series */
-
- #if 0 /* BIOS code makes no sense */
- if(SiS_IsVAMode()) {
-@@ -5902,36 +5959,41 @@ SiS_EnableBridge(SiS_Private *SiS_Pr, PS
- SiS_Chrontel701xBLOff(SiS_Pr);
- }
-
-- SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2e,0x7f);
--
--#ifdef NEWCH701x
-- if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
-- if(SiS_IsLCDOrLCDA(SiS_Pr,HwDeviceExtension,BaseAddr)) {
-+ if(HwDeviceExtension->jChipType != SIS_550) {
-+ SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2e,0x7f);
-+ }
-+
-+ if(HwDeviceExtension->jChipType == SIS_740) {
-+ if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
-+ if(SiS_IsLCDOrLCDA(SiS_Pr,HwDeviceExtension,BaseAddr)) {
- SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x1E,0x20);
-- }
-+ }
-+ }
- }
--#endif
-
- temp1 = SiS_GetReg1(SiS_Pr->SiS_Part1Port,0x2E);
-- if (!(temp1 & 0x80))
-+ if(!(temp1 & 0x80))
- SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2E,0x80);
-
- if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
- if(temp) {
-- SiS_Chrontel701xBLOn(SiS_Pr);
-+ SiS_Chrontel701xBLOn(SiS_Pr, HwDeviceExtension);
- }
- }
-
- if(SiS_Pr->SiS_IF_DEF_CH70xx == 0) {
- if(SiS_CRT2IsLCD(SiS_Pr,BaseAddr,HwDeviceExtension)) {
- SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x1E,0x20);
-+ if(HwDeviceExtension->jChipType == SIS_550) {
-+ SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x1E,0x40);
-+ SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x1E,0x10);
-+ }
-+ }
-+ } else if(SiS_IsVAMode(SiS_Pr,HwDeviceExtension, BaseAddr)) {
-+ if(HwDeviceExtension->jChipType != SIS_740) {
-+ SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x1E,0x20);
- }
-- }
--#ifndef NEWCH701x
-- else if(SiS_IsVAMode(SiS_Pr,HwDeviceExtension, BaseAddr)) {
-- SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x1E,0x20);
- }
--#endif
-
- if(!(SiS_WeHaveBacklightCtrl(SiS_Pr,HwDeviceExtension, BaseAddr))) {
- SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x00,0x7f);
-@@ -5954,10 +6016,10 @@ SiS_EnableBridge(SiS_Private *SiS_Pr, PS
- if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
- if(!(SiS_WeHaveBacklightCtrl(SiS_Pr,HwDeviceExtension, BaseAddr))) {
- if(SiS_IsVAMode(SiS_Pr,HwDeviceExtension, BaseAddr)) {
-- SiS_Chrontel701xBLOn(SiS_Pr);
-+ SiS_Chrontel701xBLOn(SiS_Pr, HwDeviceExtension);
- SiS_ChrontelDoSomething4(SiS_Pr,HwDeviceExtension, BaseAddr);
- } else if(SiS_IsLCDOrLCDA(SiS_Pr,HwDeviceExtension, BaseAddr)) {
-- SiS_Chrontel701xBLOn(SiS_Pr);
-+ SiS_Chrontel701xBLOn(SiS_Pr, HwDeviceExtension);
- SiS_ChrontelDoSomething4(SiS_Pr,HwDeviceExtension, BaseAddr);
- }
- }
-@@ -5983,7 +6045,7 @@ SiS_SiS30xBLOn(SiS_Private *SiS_Pr, PSIS
- {
- USHORT BaseAddr = (USHORT)HwDeviceExtension->ulIOAddress;
-
-- /* TW: Switch on LCD backlight on SiS30xLV */
-+ /* Switch on LCD backlight on SiS30xLV */
- if( (SiS_IsVAMode(SiS_Pr,HwDeviceExtension, BaseAddr)) ||
- (SiS_CRT2IsLCD(SiS_Pr,BaseAddr,HwDeviceExtension)) ) {
- if(!(SiS_GetReg1(SiS_Pr->SiS_Part4Port,0x26) & 0x02)) {
-@@ -6001,7 +6063,7 @@ SiS_SiS30xBLOff(SiS_Private *SiS_Pr, PSI
- {
- USHORT BaseAddr = (USHORT)HwDeviceExtension->ulIOAddress;
-
-- /* TW: Switch off LCD backlight on SiS30xLV */
-+ /* Switch off LCD backlight on SiS30xLV */
- if( (!(SiS_IsDualEdge(SiS_Pr,HwDeviceExtension, BaseAddr))) ||
- (SiS_IsVAMode(SiS_Pr,HwDeviceExtension, BaseAddr)) ) {
- SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x26,0xFE,0x00);
-@@ -6023,12 +6085,14 @@ SiS_CR36BIOSWord23b(SiS_Private *SiS_Pr,
- UCHAR *ROMAddr;
-
- if((ROMAddr = (UCHAR *)HwDeviceExtension->pjVirtualRomBase) && SiS_Pr->SiS_UseROM) {
-- temp = SiS_GetReg1(SiS_Pr->SiS_P3d4,0x36) & 0xff;
-- temp >>= 4;
-- temp = 1 << temp;
-- temp1 = (ROMAddr[0x23c] << 8) | ROMAddr[0x23b];
-- if(temp1 & temp) return(1);
-- else return(0);
-+ if((ROMAddr[0x233] == 0x12) && (ROMAddr[0x234] == 0x34)) {
-+ temp = SiS_GetReg1(SiS_Pr->SiS_P3d4,0x36) & 0xff;
-+ temp >>= 4;
-+ temp = 1 << temp;
-+ temp1 = (ROMAddr[0x23c] << 8) | ROMAddr[0x23b];
-+ if(temp1 & temp) return(1);
-+ else return(0);
-+ } else return(0);
- } else {
- return(0);
- }
-@@ -6041,12 +6105,14 @@ SiS_CR36BIOSWord23d(SiS_Private *SiS_Pr,
- UCHAR *ROMAddr;
-
- if((ROMAddr = (UCHAR *)HwDeviceExtension->pjVirtualRomBase) && SiS_Pr->SiS_UseROM) {
-- temp = SiS_GetReg1(SiS_Pr->SiS_P3d4,0x36) & 0xff;
-- temp >>= 4;
-- temp = 1 << temp;
-- temp1 = (ROMAddr[0x23e] << 8) | ROMAddr[0x23d];
-- if(temp1 & temp) return(1);
-- else return(0);
-+ if((ROMAddr[0x233] == 0x12) && (ROMAddr[0x234] == 0x34)) {
-+ temp = SiS_GetReg1(SiS_Pr->SiS_P3d4,0x36) & 0xff;
-+ temp >>= 4;
-+ temp = 1 << temp;
-+ temp1 = (ROMAddr[0x23e] << 8) | ROMAddr[0x23d];
-+ if(temp1 & temp) return(1);
-+ else return(0);
-+ } else return(0);
- } else {
- return(0);
- }
-@@ -6143,7 +6209,7 @@ SiS_SetPanelDelay(SiS_Private *SiS_Pr, U
-
- #ifdef SIS315H
-
-- if(SiS_Pr->SiS_IF_DEF_LVDS == 1) { /* 310/325 series, LVDS */
-+ if(SiS_Pr->SiS_IF_DEF_LVDS == 1) { /* 315 series, LVDS */
-
- if(SiS_Pr->SiS_IF_DEF_CH70xx == 0) {
- PanelID = SiS_GetReg1(SiS_Pr->SiS_P3d4,0x36);
-@@ -6171,7 +6237,7 @@ SiS_SetPanelDelay(SiS_Private *SiS_Pr, U
- SiS_ShortDelay(SiS_Pr,Delay);
- }
-
-- } else { /* 310/325 series, 301(B) */
-+ } else { /* 315 series, 301(B) */
-
- PanelID = SiS_GetReg1(SiS_Pr->SiS_P3d4,0x36);
- DelayIndex = PanelID >> 4;
-@@ -6271,14 +6337,7 @@ SiS_IsVAMode(SiS_Private *SiS_Pr, PSIS_H
- if(HwDeviceExtension->jChipType >= SIS_315H) {
- flag = SiS_GetReg1(SiS_Pr->SiS_P3d4,0x38);
- if((flag & EnableDualEdge) && (flag & SetToLCDA)) return(1);
--#if 0 /* Not done in 650/30xLV 1.10.6s, but in 650/301LV */
-- else if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
-- if(flag) return(1);
-- else return(0);
-- }
--#endif
-- else
-- return(0);
-+ else return(0);
- } else
- #endif
- return(0);
-@@ -6325,7 +6384,9 @@ SiS_IsNotM650or651(SiS_Private *SiS_Pr,
- if(HwDeviceExtension->jChipType == SIS_650) {
- flag = SiS_GetReg1(SiS_Pr->SiS_P3d4,0x5f);
- flag &= 0xF0;
-- if((flag == 0xb0) || (flag == 0x90)) return 0;
-+ /* Check for revision != A0 only */
-+ if((flag == 0xe0) || (flag == 0xc0) ||
-+ (flag == 0xb0) || (flag == 0x90)) return 0;
- else return 1;
- } else
- #endif
-@@ -6443,7 +6504,7 @@ SiS_BridgeIsEnable(SiS_Private *SiS_Pr,
- if((flag == 0x80) || (flag == 0x20)) return 0;
- else return 1;
- } else {
-- /* 310/325 series (650/30xLV 1.10.6s) */
-+ /* 315 series (650/30xLV 1.10.6s) */
- flag &= 0x50;
- if((flag == 0x40) || (flag == 0x10)) return 0;
- else return 1;
-@@ -6493,8 +6554,8 @@ SiS_GetLCDResInfo(SiS_Private *SiS_Pr, U
- {
- USHORT temp,modeflag,resinfo=0;
- const unsigned char SiS300SeriesLCDRes[] =
-- { 0, 1, 2, 3, 7, 4, 5, 8,
-- 0, 0, 0, 0, 0, 0, 0, 0 };
-+ { 0, 1, 2, 3, 7, 4, 5, 8,
-+ 0, 0, 10, 0, 0, 0, 0, 15 };
-
- SiS_Pr->SiS_LCDResInfo = 0;
- SiS_Pr->SiS_LCDTypeInfo = 0;
-@@ -6517,11 +6578,13 @@ SiS_GetLCDResInfo(SiS_Private *SiS_Pr, U
-
- temp = SiS_GetReg1(SiS_Pr->SiS_P3d4,0x36);
-
-+#if 0
- /* FSTN: Fake CR36 (TypeInfo 2, ResInfo SiS_Panel320x480) */
- if(SiS_Pr->SiS_IF_DEF_FSTN) {
- temp = 0x20 | SiS_Pr->SiS_Panel320x480;
- SiS_SetReg1(SiS_Pr->SiS_P3d4,0x36,temp);
- }
-+#endif
-
- if(HwDeviceExtension->jChipType < SIS_315H) {
- SiS_Pr->SiS_LCDTypeInfo = temp >> 4;
-@@ -6530,14 +6593,16 @@ SiS_GetLCDResInfo(SiS_Private *SiS_Pr, U
- }
- temp &= 0x0f;
- if(HwDeviceExtension->jChipType < SIS_315H) {
-- /* TW: Translate 300 series LCDRes to 310/325 series for unified usage */
-+ /* Translate 300 series LCDRes to 315 series for unified usage */
- temp = SiS300SeriesLCDRes[temp];
- }
- SiS_Pr->SiS_LCDResInfo = temp;
-
-+#if 0
- if(SiS_Pr->SiS_IF_DEF_FSTN){
- SiS_Pr->SiS_LCDResInfo = SiS_Pr->SiS_Panel320x480;
- }
-+#endif
-
- if(SiS_Pr->SiS_IF_DEF_LVDS == 0) {
- if(SiS_Pr->SiS_LCDResInfo < SiS_Pr->SiS_PanelMin301)
-@@ -6547,75 +6612,109 @@ SiS_GetLCDResInfo(SiS_Private *SiS_Pr, U
- SiS_Pr->SiS_LCDResInfo = SiS_Pr->SiS_PanelMinLVDS;
- }
-
-- if(SiS_Pr->SiS_LCDResInfo > SiS_Pr->SiS_PanelMax)
-+ if((!SiS_Pr->CP_HaveCustomData) || (SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_PanelCustom)) {
-+ if(SiS_Pr->SiS_LCDResInfo > SiS_Pr->SiS_PanelMax)
- SiS_Pr->SiS_LCDResInfo = SiS_Pr->SiS_Panel1024x768;
-+ }
-+
-+ if(SiS_Pr->SiS_CustomT == CUT_BARCO1366) {
-+ SiS_Pr->SiS_LCDResInfo = Panel_Barco1366;
-+ }
-+
-+ switch(SiS_Pr->SiS_LCDResInfo) {
-+ case Panel_800x600: SiS_Pr->PanelXRes = 800; SiS_Pr->PanelYRes = 600; break;
-+ case Panel_1024x768: SiS_Pr->PanelXRes = 1024; SiS_Pr->PanelYRes = 768; break;
-+ case Panel_1280x1024: SiS_Pr->PanelXRes = 1280; SiS_Pr->PanelYRes = 1024; break;
-+ case Panel_640x480_3:
-+ case Panel_640x480_2:
-+ case Panel_640x480: SiS_Pr->PanelXRes = 640; SiS_Pr->PanelYRes = 480; break;
-+ case Panel_1024x600: SiS_Pr->PanelXRes = 1024; SiS_Pr->PanelYRes = 600; break;
-+ case Panel_1152x864: SiS_Pr->PanelXRes = 1152; SiS_Pr->PanelYRes = 864; break;
-+ case Panel_1280x960: SiS_Pr->PanelXRes = 1280; SiS_Pr->PanelYRes = 960; break;
-+ case Panel_1152x768: SiS_Pr->PanelXRes = 1152; SiS_Pr->PanelYRes = 768; break;
-+ case Panel_1400x1050: SiS_Pr->PanelXRes = 1400; SiS_Pr->PanelYRes = 1050; break;
-+ case Panel_1280x768: SiS_Pr->PanelXRes = 1280; SiS_Pr->PanelYRes = 768; break;
-+ case Panel_1600x1200: SiS_Pr->PanelXRes = 1600; SiS_Pr->PanelYRes = 1200; break;
-+ case Panel_320x480: SiS_Pr->PanelXRes = 320; SiS_Pr->PanelYRes = 480; break;
-+ case Panel_Custom: SiS_Pr->PanelXRes = SiS_Pr->CP_MaxX;
-+ SiS_Pr->PanelYRes = SiS_Pr->CP_MaxY;
-+ break;
-+ case Panel_Barco1366: SiS_Pr->PanelXRes = 1360; SiS_Pr->PanelYRes = 1024; break;
-+ default: SiS_Pr->PanelXRes = 1024; SiS_Pr->PanelYRes = 768; break;
-+ }
-
- temp = SiS_GetReg1(SiS_Pr->SiS_P3d4,0x37);
-+#if 0
- if(SiS_Pr->SiS_IF_DEF_FSTN){
-- /* TW: Fake LVDS bridge for FSTN */
-+ /* Fake LVDS bridge for FSTN */
- temp = 0x04;
- SiS_SetReg1(SiS_Pr->SiS_P3d4,0x37,temp);
- }
-+#endif
- SiS_Pr->SiS_LCDInfo = temp;
-
- if(!(SiS_Pr->UsePanelScaler)) SiS_Pr->SiS_LCDInfo &= ~DontExpandLCD;
- else if(SiS_Pr->UsePanelScaler == 1) SiS_Pr->SiS_LCDInfo |= DontExpandLCD;
-
-- /* TW: Inserted entire 315-block from 650/LVDS/30xLV BIOSes */
-+ if(SiS_Pr->SiS_IF_DEF_LVDS == 0) {
-+ if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
-+ /* For non-standard LCD resolution, we let the panel scale */
-+ if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_PanelCustom) {
-+ SiS_Pr->SiS_LCDInfo |= DontExpandLCD;
-+ } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) {
-+ if(ModeNo == 0x7c || ModeNo == 0x7d || ModeNo == 0x7e) {
-+ /* Bridge does not scale to 1280x960 */
-+ SiS_Pr->SiS_LCDInfo |= DontExpandLCD;
-+ } else if(ModeNo == 0x2f || ModeNo == 0x5d || ModeNo == 0x5e) {
-+ if(!(SiS_Pr->SiS_VBType & VB_SIS301LV302LV)) {
-+ /* Bridge does not scale to 640x400 */
-+ SiS_Pr->SiS_LCDInfo |= DontExpandLCD;
-+ }
-+ }
-+ } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x768) {
-+ /* TEMP - no idea about the timing and zoom factors */
-+ SiS_Pr->SiS_LCDInfo |= DontExpandLCD;
-+ } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050) {
-+ if(ModeNo == 0x3a || ModeNo == 0x4d || ModeNo == 0x65) {
-+ /* Bridge does not scale to 1280x1024 */
-+ SiS_Pr->SiS_LCDInfo |= DontExpandLCD;
-+ }
-+ } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1600x1200) {
-+ /* TEMP - no idea about the timing and zoom factors */
-+ SiS_Pr->SiS_LCDInfo |= DontExpandLCD;
-+ }
-+ }
-+ }
-+
-+
- if(HwDeviceExtension->jChipType >= SIS_315H) {
- #ifdef SIS315H
-- if(SiS_Pr->SiS_IF_DEF_LVDS == 0) {
-- if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
-- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050) {
-- if(ModeNo == 0x3a || ModeNo == 0x4d || ModeNo == 0x65) {
-- /* Bridge does not scale to 1280x1024 */
-- SiS_Pr->SiS_LCDInfo |= DontExpandLCD;
-- }
-- }
-- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) {
-- if(ModeNo == 0x7c || ModeNo == 0x7d || ModeNo == 0x7e) {
-- /* TW: Bridge does not scale to 1280x960 */
-- SiS_Pr->SiS_LCDInfo |= DontExpandLCD;
-- }
-- if(ModeNo == 0x2f || ModeNo == 0x5d || ModeNo == 0x5e) {
-- /* TW: Bridge does not scale to 640x400 */
-- SiS_Pr->SiS_LCDInfo |= DontExpandLCD;
-- }
-- }
-- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) {
-- if(ModeNo == 0x2f || ModeNo == 0x5d || ModeNo == 0x5e) {
-- /* TW: Most panels can't scale to 640x400 */
-- SiS_Pr->SiS_LCDInfo &= ~DontExpandLCD;
-- }
-- }
-- }
-- }
- if(SiS_GetReg1(SiS_Pr->SiS_P3d4,0x39) & 0x01) {
-- SiS_Pr->SiS_LCDInfo &= 0xFFEF;
-- SiS_Pr->SiS_LCDInfo |= LCDPass11;
-+ SiS_Pr->SiS_LCDInfo &= 0xFFEF;
-+ SiS_Pr->SiS_LCDInfo |= LCDPass11;
- }
- #endif
- } else {
- #ifdef SIS300
- if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
- if((ROMAddr) && SiS_Pr->SiS_UseROM) {
-- if(!(ROMAddr[0x235] & 0x02)) {
-- SiS_Pr->SiS_LCDInfo &= 0xEF;
-+ if((ROMAddr[0x233] == 0x12) && (ROMAddr[0x234] == 0x34)) {
-+ if(!(ROMAddr[0x235] & 0x02)) {
-+ SiS_Pr->SiS_LCDInfo &= 0xEF;
-+ }
- }
- }
-- } else {
-- if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
-- if((SiS_Pr->SiS_SetFlag & SetDOSMode) && ((ModeNo == 0x03) || (ModeNo == 0x10))) {
-- SiS_Pr->SiS_LCDInfo &= 0xEF;
-- }
-+ } else if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
-+ if((SiS_Pr->SiS_SetFlag & SetDOSMode) && ((ModeNo == 0x03) || (ModeNo == 0x10))) {
-+ SiS_Pr->SiS_LCDInfo &= 0xEF;
- }
- }
- #endif
- }
--
-- /* TW: With Trumpion, always Expanding */
-- if(SiS_Pr->SiS_IF_DEF_TRUMPION != 0){
-- SiS_Pr->SiS_LCDInfo &= (~DontExpandLCD);
-+
-+ /* Trumpion: Assume non-expanding */
-+ if(SiS_Pr->SiS_IF_DEF_TRUMPION != 0) {
-+ SiS_Pr->SiS_LCDInfo &= (~DontExpandLCD);
- }
-
- if(!((HwDeviceExtension->jChipType < SIS_315H) && (SiS_Pr->SiS_SetFlag & SetDOSMode))) {
-@@ -6624,7 +6723,7 @@ SiS_GetLCDResInfo(SiS_Private *SiS_Pr, U
- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x600) {
- if(ModeNo > 0x13) {
- if(!(SiS_Pr->SiS_LCDInfo & DontExpandLCD)) {
-- if((resinfo == 7) || (resinfo == 3)) {
-+ if((resinfo == SIS_RI_800x600) || (resinfo == SIS_RI_400x300)) {
- SiS_Pr->SiS_SetFlag |= EnableLVDSDDA;
- }
- }
-@@ -6644,9 +6743,9 @@ SiS_GetLCDResInfo(SiS_Private *SiS_Pr, U
- (SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480))) {
- if(ModeNo > 0x13) {
- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) {
-- if(resinfo == 4) SiS_Pr->SiS_SetFlag |= EnableLVDSDDA; /* 512x384 */
-+ if(resinfo == SIS_RI_512x384) SiS_Pr->SiS_SetFlag |= EnableLVDSDDA;
- } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel800x600) {
-- if(resinfo == 3) SiS_Pr->SiS_SetFlag |= EnableLVDSDDA; /* 400x300 */
-+ if(resinfo == SIS_RI_400x300) SiS_Pr->SiS_SetFlag |= EnableLVDSDDA;
- }
- }
- } else SiS_Pr->SiS_SetFlag |= EnableLVDSDDA;
-@@ -6665,19 +6764,21 @@ SiS_GetLCDResInfo(SiS_Private *SiS_Pr, U
- }
-
- #ifdef SIS315H
-- /* TW: 650/30xLV 1.10.6s */
-+ /* 650/30xLV 1.10.6s */
- if(HwDeviceExtension->jChipType >= SIS_315H) {
-- if(SiS_Pr->SiS_VBType & (VB_SIS302B | VB_SIS302LV)) {
-- /* Enable 302B/302LV dual link mode */
-- /* (302B is a theory - not in any BIOS */
-- temp = 0x00;
-- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050) temp = 0x04;
-- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) temp = 0x04;
-- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1600x1200) temp = 0x04;
-- SiS_SetReg1(SiS_Pr->SiS_P3d4,0x39,temp);
-- } else if(SiS_Pr->SiS_IF_DEF_LVDS == 0) {
-- SiS_SetReg1(SiS_Pr->SiS_P3d4,0x39,0x00);
-- }
-+ if(SiS_Pr->SiS_IF_DEF_LVDS == 0) {
-+ SiS_SetRegAND(SiS_Pr->SiS_P3d4,0x39,~0x04);
-+ if(SiS_Pr->SiS_VBType & (VB_SIS302B | VB_SIS302LV)) {
-+ /* Enable 302B/302LV dual link mode.
-+ * (302B is a theory - not in any BIOS)
-+ */
-+ if((SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050) ||
-+ (SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) ||
-+ (SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1600x1200)) {
-+ SiS_SetRegOR(SiS_Pr->SiS_P3d4,0x39,0x04);
-+ }
-+ }
-+ }
- }
- #endif
-
-@@ -6697,19 +6798,6 @@ SiS_GetLCDResInfo(SiS_Private *SiS_Pr, U
- }
-
- void
--SiS_PresetScratchregister(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension)
--{
-- return;
-- /*SiS_SetReg1(SiS_Pr->SiS_P3d4,0x30,0x21); */
-- /*SiS_SetReg1(SiS_Pr->SiS_P3d4,0x31,0x41); */
-- /*SiS_SetReg1(SiS_Pr->SiS_P3d4,0x32,0x28); */
-- /*SiS_SetReg1(SiS_Pr->SiS_P3d4,0x33,0x22); */
-- /*SiS_SetReg1(SiS_Pr->SiS_P3d4,0x35,0x43); */
-- /*SiS_SetReg1(SiS_Pr->SiS_P3d4,0x36,0x01); */
-- /*SiS_SetReg1(SiS_Pr->SiS_P3d4,0x37,0x00); */
--}
--
--void
- SiS_LongWait(SiS_Private *SiS_Pr)
- {
- USHORT i;
-@@ -6803,7 +6891,7 @@ SiS_WaitRetrace1(SiS_Private *SiS_Pr, PS
- #endif
- } else {
- #ifdef SIS300
--#if 0 /* TW: Not done in A901 BIOS */
-+#if 0 /* Not done in A901 BIOS */
- if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
- if(SiS_GetReg1(SiS_Pr->SiS_P3c4,0x1f) & 0xc0) return;
- }
-@@ -6898,7 +6986,51 @@ void SiS_SetRegOR(USHORT Port,USHORT Ind
-
- /* ========================================================= */
-
--/* TW: Set 301 TV Encoder (and some LCD relevant) registers */
-+static void
-+SiS_SetTVSpecial(SiS_Private *SiS_Pr, USHORT ModeNo)
-+{
-+ if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
-+ if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
-+ if(!(SiS_Pr->SiS_VBInfo & SetPALTV)) {
-+ if((ModeNo == 0x64) || (ModeNo == 0x4a) || (ModeNo == 0x38)) {
-+ SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x1c,0xa7);
-+ SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x1d,0x07);
-+ SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x1e,0xf2);
-+ SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x1f,0x6e);
-+ SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x20,0x17);
-+ SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x21,0x8b);
-+ SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x22,0x73);
-+ SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x23,0x53);
-+ SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x24,0x13);
-+ SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x25,0x40);
-+ SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x26,0x34);
-+ SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x27,0xf4);
-+ SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x28,0x63);
-+ SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x29,0xbb);
-+ SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x2a,0xcc);
-+ SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x2b,0x7a);
-+ SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x2c,0x58); /* 48 */
-+ SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x2d,0xe4);
-+ SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x2e,0x73);
-+ SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x2f,0xda); /* de */
-+ SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x30,0x13);
-+ if((SiS_GetReg1(SiS_Pr->SiS_P3d4,0x38)) & 0x40) {
-+ SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x01,0x14);
-+ } else {
-+ SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x01,0x15);
-+ }
-+ SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x02,0x1b);
-+ SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x43,0x72);
-+ }
-+ } else {
-+ SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x01,0x21);
-+ SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x02,0x5a);
-+ }
-+ }
-+ }
-+}
-+
-+/* Set 301 TV Encoder (and some LCD relevant) registers */
- void
- SiS_SetGroup2(SiS_Private *SiS_Pr, USHORT BaseAddr,UCHAR *ROMAddr, USHORT ModeNo,
- USHORT ModeIdIndex,USHORT RefreshRateTableIndex,
-@@ -6911,67 +7043,46 @@ SiS_SetGroup2(SiS_Private *SiS_Pr, USHOR
- #ifdef SIS315H
- const SiS_Part2PortTblStruct *CRT2Part2Ptr = NULL;
- USHORT resindex, CRT2Index;
--#endif
-+#endif
- USHORT modeflag, resinfo, crt2crtc;
-- ULONG longtemp, tempeax, tempebx, temp2, tempecx;
-+ ULONG longtemp, tempeax;
-+#ifdef SIS300
- const UCHAR atable[] = {
- 0xc3,0x9e,0xc3,0x9e,0x02,0x02,0x02,
- 0xab,0x87,0xab,0x9e,0xe7,0x02,0x02
- };
-+#endif
-
- #ifdef SIS315H
- if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
-- /* TW: 650/30xLV 1.10.6s: (Is at end of SetGroup2!) */
-+ /* 650/30xLV 1.10.6s: (Is at end of SetGroup2!) */
- if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050) {
- SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x1a,0xfc,0x03);
-- temp = 1;
-- if(ModeNo <= 0x13) temp = 3;
-+ temp = 0x01;
-+ if(ModeNo <= 0x13) temp = 0x03;
- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x0b,temp);
- }
- }
-- if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
-- if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
-- if(!(SiS_Pr->SiS_VBInfo & SetPALTV)) {
-- if((ModeNo == 0x4a) || (ModeNo == 0x38)) {
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x1c,0xa7);
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x1d,0x07);
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x1e,0xf2);
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x1f,0x6e);
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x20,0x17);
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x21,0x8b);
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x22,0x73);
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x23,0x53);
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x24,0x13);
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x25,0x40);
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x26,0x34);
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x27,0xf4);
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x28,0x63);
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x29,0xbb);
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x2a,0xcc);
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x2b,0x7a);
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x2c,0x58);
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x2d,0xe4);
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x2e,0x73);
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x2f,0xda);
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x30,0x13);
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x43,0x72);
-- }
-- }
-- }
-- }
-+ SiS_SetTVSpecial(SiS_Pr, ModeNo);
- return;
- }
--#endif
-+#endif
-
-- if(ModeNo<=0x13) {
-- modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag; /* si+St_ResInfo */
-- resinfo = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ResInfo;
-- crt2crtc = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC;
-+ if(ModeNo <= 0x13) {
-+ modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
-+ resinfo = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ResInfo;
-+ crt2crtc = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC;
- } else {
-- modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag; /* si+Ext_ResInfo */
-+ if(SiS_Pr->UseCustomMode) {
-+ modeflag = SiS_Pr->CModeFlag;
-+ resinfo = 0;
-+ crt2crtc = 0;
-+ } else {
-+ modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
- resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
- crt2crtc = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC;
-+ }
- }
-
- tempcx = SiS_Pr->SiS_VBInfo;
-@@ -6984,9 +7095,9 @@ SiS_SetGroup2(SiS_Private *SiS_Pr, USHOR
- temp |= ((tempbx & 0x00FF) >> 3);
- temp ^= 0x0C;
-
-- /* TW: From 1.10.7w (no vb check there; don't care - this only disables SVIDEO and CVBS signal) */
-+ /* From 1.10.7w (no vb check there; don't care - this only disables SVIDEO and CVBS signal) */
- if(SiS_Pr->SiS_VBType & VB_SIS301LV302LV) {
-- temp |= 0x0c;
-+ temp |= 0x0c;
- }
-
- PhasePoint = SiS_Pr->SiS_PALPhase;
-@@ -6994,44 +7105,44 @@ SiS_SetGroup2(SiS_Private *SiS_Pr, USHOR
-
- if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVisionTV) {
-
-- temp ^= 0x01;
-- if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
-- TimingPoint = SiS_Pr->SiS_HiTVSt2Timing;
-- if(SiS_Pr->SiS_SetFlag & TVSimuMode) {
-- if(modeflag & Charx8Dot) TimingPoint = SiS_Pr->SiS_HiTVSt1Timing;
-- else TimingPoint = SiS_Pr->SiS_HiTVTextTiming;
-- }
-- } else TimingPoint = SiS_Pr->SiS_HiTVExtTiming;
--
-- if(SiS_Pr->SiS_HiVision & 0x03) temp &= 0xfe;
--
-+ temp ^= 0x01;
-+ if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
-+ TimingPoint = SiS_Pr->SiS_HiTVSt2Timing;
-+ if(SiS_Pr->SiS_SetFlag & TVSimuMode) {
-+ if(modeflag & Charx8Dot) TimingPoint = SiS_Pr->SiS_HiTVSt1Timing;
-+ else TimingPoint = SiS_Pr->SiS_HiTVTextTiming;
-+ }
-+ } else TimingPoint = SiS_Pr->SiS_HiTVExtTiming;
-+
-+ if(SiS_Pr->SiS_HiVision & 0x03) temp &= 0xfe;
-+
- } else {
--
-- if(SiS_Pr->SiS_VBInfo & SetPALTV){
-
-- TimingPoint = SiS_Pr->SiS_PALTiming;
-- PhasePoint = SiS_Pr->SiS_PALPhase;
-+ if(SiS_Pr->SiS_VBInfo & SetPALTV){
-
-- if( (SiS_Pr->SiS_VBType & VB_SIS301B302B) &&
-- ( (!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) ||
-- (SiS_Pr->SiS_SetFlag & TVSimuMode) ) ) {
-- PhasePoint = SiS_Pr->SiS_PALPhase2;
-- }
-+ TimingPoint = SiS_Pr->SiS_PALTiming;
-+ PhasePoint = SiS_Pr->SiS_PALPhase;
-
-- } else {
-+ if( (SiS_Pr->SiS_VBType & VB_SIS301B302B) &&
-+ ( (!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) ||
-+ (SiS_Pr->SiS_SetFlag & TVSimuMode) ) ) {
-+ PhasePoint = SiS_Pr->SiS_PALPhase2;
-+ }
-+
-+ } else {
-
- temp |= 0x10;
-- TimingPoint = SiS_Pr->SiS_NTSCTiming;
-- PhasePoint = SiS_Pr->SiS_NTSCPhase;
-+ TimingPoint = SiS_Pr->SiS_NTSCTiming;
-+ PhasePoint = SiS_Pr->SiS_NTSCPhase;
-
- if( (SiS_Pr->SiS_VBType & VB_SIS301B302B) &&
- ( (!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) ||
- (SiS_Pr->SiS_SetFlag & TVSimuMode) ) ) {
-- PhasePoint = SiS_Pr->SiS_NTSCPhase2;
-+ PhasePoint = SiS_Pr->SiS_NTSCPhase2;
- }
-
-- }
--
-+ }
-+
- }
- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x00,temp);
-
-@@ -7044,36 +7155,35 @@ SiS_SetGroup2(SiS_Private *SiS_Pr, USHOR
- temp = 0x38;
- }
- if(temp) {
-- if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
-- if(SiS_GetReg1(SiS_Pr->SiS_P3d4,0x31) & 0x01) {
-- temp1 = SiS_GetReg1(SiS_Pr->SiS_P3d4,temp);
-- if(temp1 & EnablePALM) { /* 0x40 */
-- PhasePoint = SiS_Pr->SiS_PALMPhase;
-- if( (SiS_Pr->SiS_VBType & VB_SIS301B302B) &&
-- ( (!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) ||
-- (SiS_Pr->SiS_SetFlag & TVSimuMode) ) ) {
-- PhasePoint = SiS_Pr->SiS_PALMPhase2;
-- }
-- }
-- if(temp1 & EnablePALN) { /* 0x80 */
-- PhasePoint = SiS_Pr->SiS_PALNPhase;
-- if( (SiS_Pr->SiS_VBType & VB_SIS301B302B) &&
-- ( (!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) ||
-- (SiS_Pr->SiS_SetFlag & TVSimuMode) ) ) {
-- PhasePoint = SiS_Pr->SiS_PALNPhase2;
-- }
-- }
-- }
-- }
-+ if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
-+ if(SiS_GetReg1(SiS_Pr->SiS_P3d4,0x31) & 0x01) {
-+ temp1 = SiS_GetReg1(SiS_Pr->SiS_P3d4,temp);
-+ if(temp1 & EnablePALM) { /* 0x40 */
-+ PhasePoint = SiS_Pr->SiS_PALMPhase;
-+ if( (SiS_Pr->SiS_VBType & VB_SIS301B302B) &&
-+ ( (!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) ||
-+ (SiS_Pr->SiS_SetFlag & TVSimuMode) ) ) {
-+ PhasePoint = SiS_Pr->SiS_PALMPhase2;
-+ }
-+ }
-+ if(temp1 & EnablePALN) { /* 0x80 */
-+ PhasePoint = SiS_Pr->SiS_PALNPhase;
-+ if( (SiS_Pr->SiS_VBType & VB_SIS301B302B) &&
-+ ( (!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) ||
-+ (SiS_Pr->SiS_SetFlag & TVSimuMode) ) ) {
-+ PhasePoint = SiS_Pr->SiS_PALNPhase2;
-+ }
-+ }
-+ }
-+ }
- }
-
- #ifdef SIS315H
-- /* TW: 650/301LV BIOS */
- if(HwDeviceExtension->jChipType >= SIS_315H) {
- if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
- if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
- if(!(SiS_Pr->SiS_VBInfo & SetPALTV)) {
-- if((ModeNo == 0x4a) || (ModeNo == 0x38)) {
-+ if((ModeNo == 0x64) || (ModeNo == 0x4a) || (ModeNo == 0x38)) {
- PhasePoint = SiS_Pr->SiS_SpecialPhase;
- }
- }
-@@ -7094,12 +7204,12 @@ SiS_SetGroup2(SiS_Private *SiS_Pr, USHOR
- }
-
- if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
-- if(HwDeviceExtension->jChipType >= SIS_315H) {
-- if(!(SiS_Pr->SiS_ModeType & 0x07))
-+ if(HwDeviceExtension->jChipType >= SIS_315H) {
-+ if(!(SiS_Pr->SiS_ModeType & 0x07))
-+ SiS_SetRegAND(SiS_Pr->SiS_Part2Port,0x3A,0x1F);
-+ } else {
- SiS_SetRegAND(SiS_Pr->SiS_Part2Port,0x3A,0x1F);
-- } else {
-- SiS_SetRegAND(SiS_Pr->SiS_Part2Port,0x3A,0x1F);
-- }
-+ }
- }
-
- SiS_SetRegOR(SiS_Pr->SiS_Part2Port,0x0A,SiS_Pr->SiS_NewFlickerMode);
-@@ -7110,11 +7220,11 @@ SiS_SetGroup2(SiS_Private *SiS_Pr, USHOR
- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x38,SiS_Pr->SiS_RY4COE);
-
- if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVisionTV) {
-- if(SiS_Pr->SiS_HiVision == 3) tempax = 950;
-- else tempax = 440;
-+ if(SiS_Pr->SiS_HiVision == 3) tempax = 950;
-+ else tempax = 440;
- } else {
-- if(SiS_Pr->SiS_VBInfo & SetPALTV) tempax = 520;
-- else tempax = 440;
-+ if(SiS_Pr->SiS_VBInfo & SetPALTV) tempax = 520;
-+ else tempax = 440;
- }
-
- if( ( ( (!(SiS_Pr->SiS_VBInfo & SetCRT2ToTV)) || (SiS_Pr->SiS_HiVision == 3) ) && (SiS_Pr->SiS_VDE <= tempax) ) ||
-@@ -7134,18 +7244,18 @@ SiS_SetGroup2(SiS_Private *SiS_Pr, USHOR
- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x02,temp);
-
- if( (SiS_Pr->SiS_VBInfo & (SetCRT2ToTV - SetCRT2ToHiVisionTV)) &&
-- (SiS_Pr->SiS_HiVision != 3) &&
-- (SiS_Pr->SiS_VGAHDE >= 1024) ) {
-+ (SiS_Pr->SiS_HiVision != 3) &&
-+ (SiS_Pr->SiS_VGAHDE >= 1024) ) {
- if(SiS_Pr->SiS_VBInfo & SetPALTV) {
- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x01,0x19);
- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x02,0x52);
- } else {
- if(HwDeviceExtension->jChipType >= SIS_315H) {
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x01,0x17);
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x02,0x1d);
-+ SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x01,0x17);
-+ SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x02,0x1d);
- } else {
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x01,0x0b);
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x02,0x11);
-+ SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x01,0x0b);
-+ SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x02,0x11);
- }
- }
- }
-@@ -7154,7 +7264,7 @@ SiS_SetGroup2(SiS_Private *SiS_Pr, USHOR
-
- tempcx = SiS_Pr->SiS_HT;
-
-- /* TW: 650/30xLV 1.10.6s */
-+ /* 650/30xLV 1.10.6s */
- if(HwDeviceExtension->jChipType >= SIS_315H) {
- if(SiS_GetReg1(SiS_Pr->SiS_P3d4,0x39) & 0x04) {
- tempcx >>= 1;
-@@ -7181,7 +7291,7 @@ SiS_SetGroup2(SiS_Private *SiS_Pr, USHOR
- tempcx += 7;
- if((SiS_Pr->SiS_VBInfo & SetCRT2ToHiVisionTV) &&
- (SiS_Pr->SiS_HiVision == 3)) {
-- tempcx -= 4;
-+ tempcx -= 4;
- }
- temp = (tempcx & 0x00FF) << 4;
- SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x22,0x0F,temp);
-@@ -7201,8 +7311,8 @@ SiS_SetGroup2(SiS_Private *SiS_Pr, USHOR
- tempbx += 8;
- if((SiS_Pr->SiS_VBInfo & SetCRT2ToHiVisionTV) &&
- (SiS_Pr->SiS_HiVision == 3)) {
-- tempbx -= 4;
-- tempcx = tempbx;
-+ tempbx -= 4;
-+ tempcx = tempbx;
- }
- temp = (tempbx & 0x00FF) << 4;
- SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x29,0x0F,temp);
-@@ -7231,8 +7341,8 @@ SiS_SetGroup2(SiS_Private *SiS_Pr, USHOR
-
- tempcx -= 11;
- if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToTV)) {
-- tempax = SiS_GetVGAHT2(SiS_Pr) - 1;
-- tempcx = tempax;
-+ tempax = SiS_GetVGAHT2(SiS_Pr) - 1;
-+ tempcx = tempax;
- }
- temp = tempcx & 0x00FF;
- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x2E,temp);
-@@ -7242,38 +7352,38 @@ SiS_SetGroup2(SiS_Private *SiS_Pr, USHOR
- if(SiS_Pr->SiS_VGAVDE == 375) tempbx = 746;
- if(SiS_Pr->SiS_VGAVDE == 405) tempbx = 853;
- if(HwDeviceExtension->jChipType < SIS_315H) {
-- if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) tempbx >>= 1;
-+ if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) tempbx >>= 1;
- } else {
-- if((SiS_Pr->SiS_VBInfo & SetCRT2ToTV) && (!(SiS_Pr->SiS_HiVision & 0x03))) {
-- tempbx >>= 1;
-- if(SiS_Pr->SiS_SetFlag & TVSimuMode) {
-- if(ModeNo <= 0x13) {
-- if(crt2crtc == 1) {
-- tempbx++;
-- }
-- }
-- } else {
-- if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
-- if(crt2crtc == 4) /* TW: BIOS calls GetRatePtrCRT2 here - does not make sense */
-- if(SiS_Pr->SiS_ModeType <= 3) tempbx++;
-- }
-+ if((SiS_Pr->SiS_VBInfo & SetCRT2ToTV) && (!(SiS_Pr->SiS_HiVision & 0x03))) {
-+ tempbx >>= 1;
-+ if(SiS_Pr->SiS_SetFlag & TVSimuMode) {
-+ if(ModeNo <= 0x13) {
-+ if(crt2crtc == 1) {
-+ tempbx++;
-+ }
- }
-- }
-+ } else {
-+ if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
-+ if(crt2crtc == 4) /* BIOS calls GetRatePtrCRT2 here - does not make sense */
-+ if(SiS_Pr->SiS_ModeType <= 3) tempbx++;
-+ }
-+ }
-+ }
- }
- tempbx -= 2;
- temp = tempbx & 0x00FF;
- if((SiS_Pr->SiS_VBInfo & SetCRT2ToHiVisionTV) &&
- (SiS_Pr->SiS_HiVision == 3)) {
-- if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
-- if(ModeNo == 0x2f) temp++;
-- }
-+ if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
-+ if(ModeNo == 0x2f) temp++;
-+ }
- }
-- /* TW: From 1.10.7w - doesn't make sense */
-+ /* From 1.10.7w - doesn't make sense */
- if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
- if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
- if(!(SiS_Pr->SiS_VBInfo & SetPALTV)) {
- if(!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) { /* SetFlag?? */
-- if(ModeNo == 0x03) temp++;
-+ if(ModeNo == 0x03) temp++;
- }
- }
- }
-@@ -7285,15 +7395,15 @@ SiS_SetGroup2(SiS_Private *SiS_Pr, USHOR
- tempax |= (tempbx & 0xFF00);
- if(HwDeviceExtension->jChipType < SIS_315H) {
- if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVisionTV)) {
-- if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToSCART)) { /* TW: New from 630/301B (II) BIOS */
-+ if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToSCART)) { /* New from 630/301B (II) BIOS */
- tempax |= 0x1000;
- if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToSVIDEO)) tempax |= 0x2000;
- }
- }
- } else {
- /* TODO Check this with other BIOSes */
-- if((!(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVisionTV)) &&
-- (SiS_Pr->SiS_HiVision == 3)) {
-+ if((!(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVisionTV))
-+ /* && (SiS_Pr->SiS_HiVision == 3) */ ) {
- tempax |= 0x1000;
- if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToSVIDEO)) tempax |= 0x2000;
- }
-@@ -7301,12 +7411,12 @@ SiS_SetGroup2(SiS_Private *SiS_Pr, USHOR
- temp = (tempax & 0xFF00) >> 8;
- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x30,temp);
-
-- /* TW: 650/30xLV 1.10.6s */
-+ /* 650/30xLV 1.10.6s */
- if(HwDeviceExtension->jChipType > SIS_315H) {
- if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
- if( (SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050) ||
- (SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1600x1200) ) {
-- SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x10,0x60);
-+ SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x10,0x60);
- }
- }
- }
-@@ -7322,79 +7432,70 @@ SiS_SetGroup2(SiS_Private *SiS_Pr, USHOR
- }
- }
-
-- if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
-- tempbx = SiS_Pr->SiS_VDE;
-- if((SiS_Pr->SiS_VBInfo & SetCRT2ToTV) && (!(SiS_Pr->SiS_HiVision & 0x03))) {
-- tempbx >>= 1;
-- }
-- tempbx -= 3;
-- tempbx &= 0x03ff;
-- temp = ((tempbx & 0xFF00) >> 8) << 5;
-- temp |= 0x18;
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x46,temp);
-- temp = tempbx & 0x00FF;
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x47,temp); /* tv gatingno */
-- if(HwDeviceExtension->jChipType >= SIS_315H) { /* TW: 650/30xLV 1.10.6s */
-- if(SiS_Pr->SiS_VBType & VB_SIS301LV302LV) {
-- tempax = 0;
-- if(SiS_Pr->SiS_HiVision & 0x03) {
-- tempax = 0x3000;
-- if(SiS_Pr->SiS_HiVision & 0x01) tempax = 0x5000;
-- }
-- temp = (tempax & 0xFF00) >> 8;
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x4d,temp);
-- }
-- }
-+ if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
-+ tempbx = SiS_Pr->SiS_VDE;
-+ if((SiS_Pr->SiS_VBInfo & SetCRT2ToTV) && (!(SiS_Pr->SiS_HiVision & 0x03))) {
-+ tempbx >>= 1;
-+ }
-+ tempbx -= 3;
-+ tempbx &= 0x03ff;
-+ temp = ((tempbx & 0xFF00) >> 8) << 5;
-+ temp |= 0x18;
-+ SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x46,temp);
-+ temp = tempbx & 0x00FF;
-+ SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x47,temp); /* tv gatingno */
-+ if(HwDeviceExtension->jChipType >= SIS_315H) {
-+ if(SiS_Pr->SiS_VBType & VB_SIS301LV302LV) {
-+ tempax = 0;
-+ if(SiS_Pr->SiS_HiVision & 0x03) {
-+ tempax = 0x3000;
-+ if(SiS_Pr->SiS_HiVision & 0x01) tempax = 0x5000;
-+ }
-+ temp = (tempax & 0xFF00) >> 8;
-+ SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x4d,temp);
-+ }
-+ }
- }
-
- tempbx &= 0x00FF;
- if(!(modeflag & HalfDCLK)) {
-- tempcx = SiS_Pr->SiS_VGAHDE;
-- if(tempcx >= SiS_Pr->SiS_HDE) {
-- tempbx |= 0x2000;
-- tempax &= 0x00FF;
-- }
-+ if(SiS_Pr->SiS_VGAHDE >= SiS_Pr->SiS_HDE) {
-+ tempbx |= 0x2000;
-+ tempax &= 0x00FF;
-+ }
- }
-
- tempcx = 0x0101;
--/*if(SiS_Pr->SiS_VBInfo & (SetPALTV | SetCRT2ToTV)) { */ /*301b- TW: BIOS BUG? */
-+/*if(SiS_Pr->SiS_VBInfo & (SetPALTV | SetCRT2ToTV)) { */ /* BIOS BUG? */
- if(SiS_Pr->SiS_VBInfo & (SetCRT2ToTV - SetCRT2ToHiVisionTV)) {
-- if(!(SiS_Pr->SiS_HiVision & 0x03)) {
-- if(SiS_Pr->SiS_VGAHDE >= 1024) {
-- if((!(modeflag & HalfDCLK)) || (HwDeviceExtension->jChipType < SIS_315H)) { /* TW: This check not in 630/301B */
-- tempcx = 0x1920;
-- if(SiS_Pr->SiS_VGAHDE >= 1280) {
-- tempcx = 0x1420;
-- tempbx &= 0xDFFF;
-- }
-+ if(!(SiS_Pr->SiS_HiVision & 0x03)) {
-+ if(SiS_Pr->SiS_VGAHDE >= 1024) {
-+ if((!(modeflag & HalfDCLK)) || (HwDeviceExtension->jChipType < SIS_315H)) {
-+ tempcx = 0x1920;
-+ if(SiS_Pr->SiS_VGAHDE >= 1280) {
-+ tempcx = 0x1420;
-+ tempbx &= 0xDFFF;
-+ }
-+ }
- }
-- }
-- }
-+ }
- }
-
- if(!(tempbx & 0x2000)) {
-- if(modeflag & HalfDCLK) {
-- tempcx = (tempcx & 0xFF00) | (((tempcx & 0x00FF) << 1) & 0xff);
-- }
-- push1 = tempbx;
-- tempeax = SiS_Pr->SiS_VGAHDE;
-- tempebx = (tempcx & 0xFF00) >> 8;
-- longtemp = tempeax * tempebx;
-- tempecx = tempcx & 0x00FF;
-- longtemp /= tempecx;
-- longtemp <<= 0x0d;
-- if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
-+ if(modeflag & HalfDCLK) {
-+ tempcx = (tempcx & 0xFF00) | ((tempcx << 1) & 0x00FF);
-+ }
-+ longtemp = (SiS_Pr->SiS_VGAHDE * ((tempcx & 0xFF00) >> 8)) / (tempcx & 0x00FF);
-+ longtemp <<= 13;
-+ if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
- longtemp <<= 3;
-- }
-- tempecx = SiS_Pr->SiS_HDE;
-- temp2 = longtemp % tempecx;
-- tempeax = longtemp / tempecx;
-- if(temp2 != 0) tempeax++;
-- tempax = (USHORT)tempeax;
-- tempbx = push1;
-- tempcx = (tempcx & 0xff00) | (((tempax & 0xFF00) >> 8) >> 5);
-- tempbx |= (tempax & 0x1F00);
-- tempax = ((tempax & 0x00FF) << 8) | (tempax & 0x00FF);
-+ }
-+ tempeax = longtemp / SiS_Pr->SiS_HDE;
-+ if(longtemp % SiS_Pr->SiS_HDE) tempeax++;
-+ tempax = (USHORT)tempeax;
-+ tempcx = (tempcx & 0xFF00) | ((tempax & 0xFF00) >> (8 + 5));
-+ tempbx |= (tempax & 0x1F00);
-+ tempax = ((tempax & 0x00FF) << 8) | (tempax & 0x00FF);
- }
-
- temp = (tempax & 0xFF00) >> 8;
-@@ -7403,33 +7504,32 @@ SiS_SetGroup2(SiS_Private *SiS_Pr, USHOR
- SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x45,0xC0,temp);
-
- if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
-- temp = tempcx & 0x00FF;
-- if(tempbx & 0x2000) temp = 0;
-- temp |= 0x18;
-- SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x46,0xE0,temp);
-- if(SiS_Pr->SiS_VBInfo & SetPALTV) {
-- tempbx = 0x0382;
-- tempcx = 0x007e;
-- } else {
-- tempbx = 0x0369;
-- tempcx = 0x0061;
-- }
-- temp = (tempbx & 0x00FF) ;
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x4B,temp);
-- temp = (tempcx & 0x00FF) ;
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x4C,temp);
-- tempbx &= 0x03FF;
-- temp = (tempcx & 0xFF00) >> 8;
-- temp = (temp & 0x0003) << 2;
-- temp |= (tempbx >> 8);
-- if(HwDeviceExtension->jChipType < SIS_315H) {
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x4D,temp);
-- } else {
-- SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x4D,0xF0,temp);
-- }
-+ temp = tempcx & 0x00FF;
-+ if(tempbx & 0x2000) temp = 0;
-+ temp |= 0x18;
-+ SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x46,0xE0,temp);
-+
-+ if(SiS_Pr->SiS_VBInfo & SetPALTV) {
-+ tempbx = 0x0382;
-+ tempcx = 0x007e;
-+ } else {
-+ tempbx = 0x0369;
-+ tempcx = 0x0061;
-+ }
-+ temp = (tempbx & 0x00FF) ;
-+ SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x4B,temp);
-+ temp = (tempcx & 0x00FF) ;
-+ SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x4C,temp);
-+ temp = (tempcx & 0x0300) >> (8 - 2);
-+ temp |= ((tempbx >> 8) & 0x03);
-+ if(HwDeviceExtension->jChipType < SIS_315H) {
-+ SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x4D,temp);
-+ } else {
-+ SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x4D,0xF0,temp);
-+ }
-
-- temp = SiS_GetReg1(SiS_Pr->SiS_Part2Port,0x43);
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x43,(USHORT)(temp - 3));
-+ temp = SiS_GetReg1(SiS_Pr->SiS_Part2Port,0x43);
-+ SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x43,(USHORT)(temp - 3));
- }
-
- temp = 0;
-@@ -7440,23 +7540,33 @@ SiS_SetGroup2(SiS_Private *SiS_Pr, USHOR
- temp = 0x38;
- }
- if(temp) {
-- if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
-- if(SiS_GetReg1(SiS_Pr->SiS_P3d4,0x31) & 0x01) {
-- if(SiS_GetReg1(SiS_Pr->SiS_P3d4,temp) & EnablePALM) { /* 0x40 */
-- SiS_SetRegAND(SiS_Pr->SiS_Part2Port,0x00,0xEF);
-- temp = SiS_GetReg1(SiS_Pr->SiS_Part2Port,0x01);
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x01,temp - 1);
-- }
-- }
-- }
-+ if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
-+ if(SiS_GetReg1(SiS_Pr->SiS_P3d4,0x31) & 0x01) {
-+ if(SiS_GetReg1(SiS_Pr->SiS_P3d4,temp) & EnablePALM) { /* 0x40 */
-+ SiS_SetRegAND(SiS_Pr->SiS_Part2Port,0x00,0xEF);
-+ temp = SiS_GetReg1(SiS_Pr->SiS_Part2Port,0x01);
-+ SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x01,temp - 1);
-+ }
-+ }
-+ }
-+ }
-+
-+ if(HwDeviceExtension->jChipType >= SIS_315H) {
-+ if((SiS_Pr->SiS_VBType & VB_SIS301B302B) && (!(SiS_Pr->SiS_VBType & VB_NoLCD))) {
-+ if(!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
-+ SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x0B,0x00);
-+ }
-+ }
- }
-
-+#if 0 /* Old: Why HiVision? */
- if( (SiS_Pr->SiS_VBInfo & SetCRT2ToHiVisionTV) &&
- (!(SiS_Pr->SiS_VBType & VB_SIS301LV302LV)) ) {
-- if(!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x0B,0x00);
-- }
-+ if(!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
-+ SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x0B,0x00);
-+ }
- }
-+#endif
-
- if(HwDeviceExtension->jChipType < SIS_315H) {
- if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
-@@ -7465,74 +7575,43 @@ SiS_SetGroup2(SiS_Private *SiS_Pr, USHOR
- return;
- }
- } else {
-- /* TW: !!! The following is a duplicate, done for LCDA as well (see above) */
-+ /* !!! The following is a duplicate, done for LCDA as well (see above) */
- if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
-- if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
-- if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
-- if(!(SiS_Pr->SiS_VBInfo & SetPALTV)) {
-- if((ModeNo == 0x4a) || (ModeNo == 0x38)) {
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x1c,0xa7);
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x1d,0x07);
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x1e,0xf2);
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x1f,0x6e);
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x20,0x17);
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x21,0x8b);
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x22,0x73);
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x23,0x53);
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x24,0x13);
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x25,0x40);
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x26,0x34);
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x27,0xf4);
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x28,0x63);
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x29,0xbb);
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x2a,0xcc);
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x2b,0x7a);
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x2c,0x58);
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x2d,0xe4);
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x2e,0x73);
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x2f,0xda);
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x30,0x13);
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x43,0x72);
-- }
-- }
-- }
-- }
-- return;
-+ SiS_SetTVSpecial(SiS_Pr, ModeNo);
-+ return;
- }
- }
-
-- /* TW: From here: Part2 LCD setup */
-+ /* From here: Part2 LCD setup */
-
- tempbx = SiS_Pr->SiS_HDE;
- if(HwDeviceExtension->jChipType >= SIS_315H) {
-- /* TW: 650/30xLV 1.10.6s */
-- if(SiS_GetReg1(SiS_Pr->SiS_P3d4,0x39) & 0x04) tempbx >>= 1;
-+ /* 650/30xLV 1.10.6s */
-+ if(SiS_GetReg1(SiS_Pr->SiS_P3d4,0x39) & 0x04) tempbx >>= 1;
- }
- tempbx--; /* RHACTE=HDE-1 */
- temp = tempbx & 0x00FF;
- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x2C,temp);
-- temp = (tempbx & 0xFF00) >> 8;
-- temp <<= 4;
-+ temp = (tempbx & 0xFF00) >> 4;
- SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x2B,0x0F,temp);
-
- temp = 0x01;
- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) {
-- if(SiS_Pr->SiS_ModeType == ModeEGA) {
-- if(SiS_Pr->SiS_VGAHDE >= 1024) {
-- temp = 0x02;
-- if(HwDeviceExtension->jChipType >= SIS_315H) {
-- if(SiS_Pr->SiS_SetFlag & LCDVESATiming) {
-- temp = 0x01;
-+ if(SiS_Pr->SiS_ModeType == ModeEGA) {
-+ if(SiS_Pr->SiS_VGAHDE >= 1024) {
-+ temp = 0x02;
-+ if(HwDeviceExtension->jChipType >= SIS_315H) {
-+ if(SiS_Pr->SiS_SetFlag & LCDVESATiming) {
-+ temp = 0x01;
-+ }
- }
-- }
-- }
-- }
-+ }
-+ }
- }
- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x0B,temp);
-
-- tempbx = SiS_Pr->SiS_VDE; /* RTVACTEO=(VDE-1)&0xFF */
-- push1 = tempbx;
--
-+ tempbx = SiS_Pr->SiS_VDE; /* RTVACTEO = VDE - 1 */
-+ /* push1 = tempbx; */
- tempbx--;
- temp = tempbx & 0x00FF;
- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x03,temp);
-@@ -7540,10 +7619,9 @@ SiS_SetGroup2(SiS_Private *SiS_Pr, USHOR
- SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x0C,0xF8,temp);
-
- tempcx = SiS_Pr->SiS_VT;
-- push2 = tempcx;
--
-+ /* push2 = tempcx; */
- tempcx--;
-- temp = tempcx & 0x00FF; /* RVTVT=VT-1 */
-+ temp = tempcx & 0x00FF; /* RVTVT = VT - 1 */
- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x19,temp);
-
- temp = (tempcx & 0xFF00) >> 8;
-@@ -7551,30 +7629,26 @@ SiS_SetGroup2(SiS_Private *SiS_Pr, USHOR
-
- /* Enable dithering; newer versions only do this for 32bpp mode */
- if((HwDeviceExtension->jChipType == SIS_300) && (SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV)) {
-- if(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit) temp |= 0x10;
-+ if(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit) temp |= 0x10;
- } else if(HwDeviceExtension->jChipType < SIS_315H) {
-- if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) temp |= 0x10;
-- else {
-- if(SiS_Pr->SiS_LCDInfo & LCDSync) /* TW: 630/301 BIOS checks this */
-- temp |= 0x10;
-- }
-+ temp |= 0x10;
- } else {
-- if(SiS_Pr->SiS_VBType & VB_SIS301LV302LV) {
-- /* TW: 650/30xLV 1.10.6s */
-- if(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit) {
-- if(SiS_GetReg1(SiS_Pr->SiS_Part1Port,0x00) & 0x01) { /* 32bpp mode? */
-- temp |= 0x10;
-- }
-- }
-- } else {
-- temp |= 0x10;
-- }
-+ if(SiS_Pr->SiS_VBType & VB_SIS301LV302LV) {
-+ /* 650/30xLV 1.10.6s */
-+ if(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit) {
-+ if(SiS_GetReg1(SiS_Pr->SiS_Part1Port,0x00) & 0x01) { /* 32bpp mode? */
-+ temp |= 0x10;
-+ }
-+ }
-+ } else {
-+ temp |= 0x10;
-+ }
- }
-
- /* 630/301 does not do all this */
- if((SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) && (SiS_Pr->SiS_VBInfo & SetCRT2ToLCD)) {
- if((HwDeviceExtension->jChipType >= SIS_315H) && (SiS_Pr->SiS_VBType & VB_SIS301LV302LV)) {
-- /* TW: 650/30xLV 1.10.6s */
-+ /* 650/30xLV 1.10.6s */
- temp |= (SiS_GetReg1(SiS_Pr->SiS_P3d4,0x37) >> 6);
- temp |= 0x08; /* From 1.10.7w */
- if(!(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit)) temp |= 0x04; /* From 1.10.7w */
-@@ -7595,17 +7669,15 @@ SiS_SetGroup2(SiS_Private *SiS_Pr, USHOR
- SiS_SetRegAND(SiS_Pr->SiS_Part2Port,0x17,0xFB);
- SiS_SetRegAND(SiS_Pr->SiS_Part2Port,0x18,0xDF);
-
-- /* 1280x960, 1280x1024 and 1600x1200 data invalid/missing in tables, use old calculation */
-- if((HwDeviceExtension->jChipType >= SIS_315H) &&
-- (SiS_Pr->SiS_VBType & VB_SIS301LV302LV) &&
-- (SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel1280x1024) &&
-- (SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel1600x1200) &&
-- (SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel1280x960)) {
-+ /* much data invalid/missing in tables, use old calculation in such case */
-+ if((HwDeviceExtension->jChipType >= SIS_315H) &&
-+ (SiS_Pr->SiS_VBType & VB_SIS301LV302LV) &&
-+ ((SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) ||
-+ (SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) ||
-+ (SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050)) ) {
-
--#ifdef SIS315H /* ------------- 310/325/330 series ------------ */
-+#ifdef SIS315H /* ------------- 315/330 series ------------ */
-
-- /* TW: Inserted this entire section from 650/301LV(x) BIOS */
--
- /* Using this on the 301B with an auto-expanding 1024 panel (CR37=1) results
- * in a black bar in modes < 1024; if the panel is non-expanding, the bridge
- * scales all modes to 1024. All modes in both variants (exp/non-exp) work.
-@@ -7664,7 +7736,6 @@ SiS_SetGroup2(SiS_Private *SiS_Pr, USHOR
- }
- }
-
-- /* TW: 650/30xLV 1.10.6s: */
- /* !!! This is a duplicate, done for LCDA as well - see above */
- if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050) {
-@@ -7683,15 +7754,12 @@ SiS_SetGroup2(SiS_Private *SiS_Pr, USHOR
- * the bridge scales all modes to 1024.
- * !!! Malfunction at 640x480 and 640x400 when panel is auto-expanding - black screen !!!
- */
--
-+
-+ /* cx = VT - 1 */
-+
- tempcx++;
--
-- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) tempbx = 768;
-- else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) tempbx = 1024;
-- else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1600x1200) tempbx = 1200;
-- else if(SiS_Pr->SiS_VDE != 1024) tempbx = 960;
-- else tempbx = 1024;
--
-+
-+ tempbx = SiS_Pr->PanelYRes;
- #if 0 /* old */
- tempbx = 768;
- if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel1024x768) {
-@@ -7706,36 +7774,40 @@ SiS_SetGroup2(SiS_Private *SiS_Pr, USHOR
- }
- }
- #endif
--
-+
- if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
-- tempbx = SiS_Pr->SiS_VDE - 1;
-- tempcx--;
-+ tempbx = SiS_Pr->SiS_VDE - 1;
-+ tempcx--;
- }
--
-+
- tempax = 1;
- if(!(SiS_Pr->SiS_LCDInfo & DontExpandLCD)) {
-- if(tempbx != SiS_Pr->SiS_VDE) {
-- tempax = tempbx;
--/* if(SiS_Pr->SiS_VGAVDE == 525) tempax += 60; in 650/301B BIOS */
-- if(tempax < SiS_Pr->SiS_VDE) {
-- tempax = 0;
-- tempcx = 0;
-- } else {
-- tempax -= SiS_Pr->SiS_VDE;
-- }
-- tempax >>= 1;
-- }
-- tempcx -= tempax; /* lcdvdes */
-- tempbx -= tempax; /* lcdvdee */
-- } else {
-- tempax >>= 1;
-- tempcx -= tempax; /* lcdvdes */
-- tempbx -= tempax; /* lcdvdee */
-+ if(tempbx != SiS_Pr->SiS_VDE) {
-+ tempax = tempbx;
-+ if(tempax < SiS_Pr->SiS_VDE) {
-+ tempax = 0;
-+ tempcx = 0;
-+ } else {
-+ tempax -= SiS_Pr->SiS_VDE;
-+ }
-+ tempax >>= 1;
-+ }
-+ tempcx -= tempax; /* lcdvdes */
-+ tempbx -= tempax; /* lcdvdee */
- }
--
-+#if 0 /* meaningless: 1 / 2 = 0... */
-+ else {
-+ tempax >>= 1;
-+ tempcx -= tempax; /* lcdvdes */
-+ tempbx -= tempax; /* lcdvdee */
-+ }
-+#endif
-+
-+ /* Non-expanding: lcdvdees = tempcx = VT-1; lcdvdee = tempbx = VDE-1 */
-+
- #ifdef TWDEBUG
-- xf86DrvMsg(0, X_INFO, "lcdvds 0x%x lcdvde 0x%x\n", tempcx, tempbx);
--#endif
-+ xf86DrvMsg(0, X_INFO, "lcdvdes 0x%x lcdvdee 0x%x\n", tempcx, tempbx);
-+#endif
-
- temp = tempcx & 0x00FF; /* RVEQ1EQ=lcdvdes */
- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x05,temp);
-@@ -7746,140 +7818,183 @@ SiS_SetGroup2(SiS_Private *SiS_Pr, USHOR
- temp |= ((tempcx & 0xFF00) >> 8);
- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x02,temp);
-
-- tempbx = push2;
-- tempax = push1;
-- tempcx = tempbx;
-- tempcx -= tempax;
-- tempcx >>= 4;
-+ tempbx = SiS_Pr->SiS_VT; /* push2; */
-+ tempax = SiS_Pr->SiS_VDE; /* push1; */
-+ tempcx = (tempbx - tempax) >> 4;
- tempbx += tempax;
- tempbx >>= 1;
- if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) tempbx -= 10;
--
-+
-+ /* non-expanding: lcdvrs = tempbx = ((VT + VDE) / 2) - 10 */
-+
-+ if(SiS_Pr->UseCustomMode) {
-+ tempbx = SiS_Pr->CVSyncStart;
-+ }
-+
- #ifdef TWDEBUG
- xf86DrvMsg(0, X_INFO, "lcdvrs 0x%x\n", tempbx);
- #endif
-
-- temp = tempbx & 0x00FF; /* RTVACTEE=lcdvrs */
-+ temp = tempbx & 0x00FF; /* RTVACTEE = lcdvrs */
- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x04,temp);
-
- temp = ((tempbx & 0xFF00) >> 8) << 4;
- tempbx += (tempcx + 1);
- temp |= (tempbx & 0x000F);
-+
-+ if(SiS_Pr->UseCustomMode) {
-+ temp &= 0xf0;
-+ temp |= (SiS_Pr->CVSyncEnd & 0x0f);
-+ }
-+
-+#ifdef TWDEBUG
-+ xf86DrvMsg(0, X_INFO, "lcdvre[3:0] 0x%x\n", (temp & 0x0f));
-+#endif
-+
- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x01,temp);
-
-- /* TW: Code from 630/301B (I+II) BIOS */
-+ /* Code from 630/301B (I+II) BIOS */
-
-- if( ( ( (HwDeviceExtension->jChipType == SIS_630) ||
-- (HwDeviceExtension->jChipType == SIS_730) ) &&
-- (HwDeviceExtension->jChipRevision > 2) ) &&
-- (SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) &&
-- (!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) &&
-- (!(SiS_Pr->SiS_LCDInfo & DontExpandLCD)) ) {
-- if(ModeNo == 0x13) {
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x04,0xB9);
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x05,0xCC);
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x06,0xA6);
-- } else {
-- if((crt2crtc & 0x3F) == 4) {
-+ if(!SiS_Pr->UseCustomMode) {
-+ if( ( ( (HwDeviceExtension->jChipType == SIS_630) ||
-+ (HwDeviceExtension->jChipType == SIS_730) ) &&
-+ (HwDeviceExtension->jChipRevision > 2) ) &&
-+ (SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) &&
-+ (!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) &&
-+ (!(SiS_Pr->SiS_LCDInfo & DontExpandLCD)) ) {
-+ if(ModeNo == 0x13) {
-+ SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x04,0xB9);
-+ SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x05,0xCC);
-+ SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x06,0xA6);
-+ } else {
-+ if((crt2crtc & 0x3F) == 4) {
- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x01,0x2B);
- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x02,0x13);
- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x04,0xE5);
- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x05,0x08);
- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x06,0xE2);
-- }
-- }
-+ }
-+ }
-+ }
- }
-
-- /* TW: Inserted missing code from 630/301B BIOS;
-+ /* Inserted missing code from 630/301B BIOS;
- * Strangely, this is done in all 650 BIOSes as
- * well (although LCDTypeInfo is not used there
- * in the same way as on 300 series)
- */
-+#ifdef SIS300
-+ if(HwDeviceExtension->jChipType < SIS_315H) {
-+ if(!SiS_Pr->UseCustomMode) {
-+ if(SiS_Pr->SiS_LCDTypeInfo == 0x0c) {
-+ crt2crtc &= 0x1f;
-+ tempcx = 0;
-+ if(!(SiS_Pr->SiS_VBInfo & SetNotSimuMode)) {
-+ if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
-+ tempcx += 7;
-+ }
-+ }
-+ tempcx += crt2crtc;
-+ if(crt2crtc >= 4) {
-+ SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x06,0xff);
-+ }
-
-- if(SiS_Pr->SiS_LCDTypeInfo == 0x0c) {
-- crt2crtc &= 0x1f;
-- tempcx = 0;
-- if(!(SiS_Pr->SiS_VBInfo & SetNotSimuMode)) {
-- if (SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
-- tempcx += 7;
-- }
-- }
-- tempcx += crt2crtc;
-- if (crt2crtc >= 4) {
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x06,0xff);
-- }
--
-- if(!(SiS_Pr->SiS_VBInfo & SetNotSimuMode)) {
-- if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
-- if(crt2crtc == 4) {
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x01,0x28);
-+ if(!(SiS_Pr->SiS_VBInfo & SetNotSimuMode)) {
-+ if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
-+ if(crt2crtc == 4) {
-+ SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x01,0x28);
-+ }
-+ }
- }
-- }
-- }
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x02,0x18);
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x04,atable[tempcx]);
-+ SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x02,0x18);
-+ SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x04,atable[tempcx]);
-+ }
-+ }
- }
-+#endif
-
-- tempcx = (SiS_Pr->SiS_HT - SiS_Pr->SiS_HDE) >> 2; /* (HT-HDE)>>2 */
-+ tempcx = (SiS_Pr->SiS_HT - SiS_Pr->SiS_HDE) >> 2; /* (HT - HDE) >> 2 */
- tempbx = SiS_Pr->SiS_HDE + 7; /* lcdhdee */
- if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
-- tempbx += 2;
-+ tempbx += 2;
- }
- push1 = tempbx;
-+
- #ifdef TWDEBUG
-- xf86DrvMsg(0, X_INFO, "lcdhde 0x%x\n", tempbx);
--#endif
-- temp = tempbx & 0x00FF; /* RHEQPLE=lcdhdee */
-+ xf86DrvMsg(0, X_INFO, "lcdhdee 0x%x\n", tempbx);
-+#endif
-+
-+ temp = tempbx & 0x00FF; /* RHEQPLE = lcdhdee */
- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x23,temp);
- temp = (tempbx & 0xFF00) >> 8;
- SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x25,0xF0,temp);
-
- temp = 7;
- if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
-- temp += 2;
-+ temp += 2;
- }
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x1F,temp); /* RHBLKE=lcdhdes[7:0] */
-+ SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x1F,temp); /* RHBLKE = lcdhdes[7:0] */
- SiS_SetRegAND(SiS_Pr->SiS_Part2Port,0x20,0x0F); /* lcdhdes [11:8] */
-
- tempbx += tempcx;
- push2 = tempbx;
-+
-+ if(SiS_Pr->UseCustomMode) {
-+ tempbx = SiS_Pr->CHSyncStart + 7;
-+ if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
-+ tempbx += 2;
-+ }
-+ }
-+
- #ifdef TWDEBUG
- xf86DrvMsg(0, X_INFO, "lcdhrs 0x%x\n", tempbx);
- #endif
-- temp = tempbx & 0x00FF; /* RHBURSTS=lcdhrs */
-- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) {
-- if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
-- if(SiS_Pr->SiS_HDE == 1280) temp = 0x47;
-+
-+ temp = tempbx & 0x00FF; /* RHBURSTS = lcdhrs */
-+ if(!SiS_Pr->UseCustomMode) {
-+ if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) {
-+ if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
-+ if(SiS_Pr->SiS_HDE == 1280) temp = 0x47;
-+ }
- }
- }
- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x1C,temp);
-- temp = ((tempbx & 0xFF00) >> 8) << 4;
-+ temp = (tempbx & 0x0F00) >> 4;
- SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x1D,0x0F,temp);
-
- tempbx = push2;
- tempcx <<= 1;
- tempbx += tempcx;
-+
-+ if(SiS_Pr->UseCustomMode) {
-+ tempbx = SiS_Pr->CHSyncEnd + 7;
-+ if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
-+ tempbx += 2;
-+ }
-+ }
-+
- #ifdef TWDEBUG
- xf86DrvMsg(0, X_INFO, "lcdhre 0x%x\n", tempbx);
--#endif
-- temp = tempbx & 0x00FF; /* RHSYEXP2S=lcdhre */
-+#endif
-+
-+ temp = tempbx & 0x00FF; /* RHSYEXP2S = lcdhre */
- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x21,temp);
-
- if(!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) {
-- if(SiS_Pr->SiS_VGAVDE == 525) {
-- if(SiS_Pr->SiS_ModeType <= ModeVGA)
-- temp=0xC6;
-- else
-- temp=0xC3;
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x2f,temp);
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x30,0xB3);
-- } else if(SiS_Pr->SiS_VGAVDE == 420) {
-- if(SiS_Pr->SiS_ModeType <= ModeVGA)
-- temp=0x4F;
-- else
-- temp=0x4D;
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x2f,temp);
-- }
-+ if(SiS_Pr->SiS_VGAVDE == 525) {
-+ if(SiS_Pr->SiS_ModeType <= ModeVGA)
-+ temp=0xC6;
-+ else
-+ temp=0xC3;
-+ SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x2f,temp);
-+ SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x30,0xB3);
-+ } else if(SiS_Pr->SiS_VGAVDE == 420) {
-+ if(SiS_Pr->SiS_ModeType <= ModeVGA)
-+ temp=0x4F;
-+ else
-+ temp=0x4D;
-+ SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x2f,temp);
-+ }
- }
- SiS_Set300Part2Regs(SiS_Pr, HwDeviceExtension, ModeIdIndex,
- RefreshRateTableIndex, BaseAddr, ModeNo);
-@@ -7898,7 +8013,7 @@ SiS_GetVGAHT2(SiS_Private *SiS_Pr)
- return((USHORT) tempax);
- }
-
--/* TW: New from 300/301LV BIOS 1.16.51 for ECS A907. Seems highly preliminary. */
-+/* New from 300/301LV BIOS 1.16.51 for ECS A907. Seems highly preliminary. */
- void
- SiS_Set300Part2Regs(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension,
- USHORT ModeIdIndex, USHORT RefreshRateTableIndex,
-@@ -7910,18 +8025,19 @@ SiS_Set300Part2Regs(SiS_Private *SiS_Pr,
-
- if(HwDeviceExtension->jChipType != SIS_300) return;
- if(!(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV)) return;
-+ if(SiS_Pr->UseCustomMode) return;
-
-- if(ModeNo<=0x13) {
-- crt2crtc = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC;
-+ if(ModeNo <= 0x13) {
-+ crt2crtc = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC;
- } else {
-- crt2crtc = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC;
-+ crt2crtc = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC;
- }
-
- resindex = crt2crtc & 0x3F;
- if(SiS_Pr->SiS_SetFlag & LCDVESATiming) CRT2Part2Ptr = SiS_Pr->SiS_CRT2Part2_1024x768_1;
- else CRT2Part2Ptr = SiS_Pr->SiS_CRT2Part2_1024x768_2;
-
-- /* TW: The BIOS code (1.16.51) is obviously a fragment! */
-+ /* The BIOS code (1.16.51) is obviously a fragment! */
- if(ModeNo > 0x13) {
- CRT2Part2Ptr = SiS_Pr->SiS_CRT2Part2_1024x768_1;
- resindex = 4;
-@@ -7942,7 +8058,6 @@ SiS_Set300Part2Regs(SiS_Private *SiS_Pr,
- SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x25,0x0f,(CRT2Part2Ptr+resindex)->CR[11]);
- }
-
--/* TW: Set 301 Macrovision(tm) registers */
- void
- SiS_SetGroup3(SiS_Private *SiS_Pr, USHORT BaseAddr,UCHAR *ROMAddr,USHORT ModeNo,
- USHORT ModeIdIndex,PSIS_HW_DEVICE_INFO HwDeviceExtension)
-@@ -7954,24 +8069,35 @@ SiS_SetGroup3(SiS_Private *SiS_Pr, USHOR
-
- if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) return;
-
-- if(ModeNo<=0x13)
-- modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
-- else
-+ if(ModeNo<=0x13) {
-+ modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
-+ } else {
-+ if(SiS_Pr->UseCustomMode) {
-+ modeflag = SiS_Pr->CModeFlag;
-+ } else {
- modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
-+ }
-+ }
-
-+#ifndef SIS_CP
- SiS_SetReg1(SiS_Pr->SiS_Part3Port,0x00,0x00);
-+#endif
-+
-+#ifdef SIS_CP
-+ SIS_CP_INIT301_CP
-+#endif
-
- if(SiS_Pr->SiS_VBInfo & SetPALTV) {
-- SiS_SetReg1(SiS_Pr->SiS_Part3Port,0x13,0xFA);
-- SiS_SetReg1(SiS_Pr->SiS_Part3Port,0x14,0xC8);
-+ SiS_SetReg1(SiS_Pr->SiS_Part3Port,0x13,0xFA);
-+ SiS_SetReg1(SiS_Pr->SiS_Part3Port,0x14,0xC8);
- } else {
-- if(HwDeviceExtension->jChipType >= SIS_315H) {
-- SiS_SetReg1(SiS_Pr->SiS_Part3Port,0x13,0xF5);
-- SiS_SetReg1(SiS_Pr->SiS_Part3Port,0x14,0xB7);
-- } else {
-- SiS_SetReg1(SiS_Pr->SiS_Part3Port,0x13,0xF6);
-- SiS_SetReg1(SiS_Pr->SiS_Part3Port,0x14,0xBf);
-- }
-+ if(HwDeviceExtension->jChipType >= SIS_315H) {
-+ SiS_SetReg1(SiS_Pr->SiS_Part3Port,0x13,0xF5);
-+ SiS_SetReg1(SiS_Pr->SiS_Part3Port,0x14,0xB7);
-+ } else {
-+ SiS_SetReg1(SiS_Pr->SiS_Part3Port,0x13,0xF6);
-+ SiS_SetReg1(SiS_Pr->SiS_Part3Port,0x14,0xBf);
-+ }
- }
-
- temp = 0;
-@@ -7982,38 +8108,41 @@ SiS_SetGroup3(SiS_Private *SiS_Pr, USHOR
- temp = 0x38;
- }
- if(temp) {
-- if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
-- if(SiS_GetReg1(SiS_Pr->SiS_P3d4,0x31) & 0x01) {
-- if(SiS_GetReg1(SiS_Pr->SiS_P3d4,temp) & EnablePALM){ /* 0x40 */
-- SiS_SetReg1(SiS_Pr->SiS_Part3Port,0x13,0xFA);
-- SiS_SetReg1(SiS_Pr->SiS_Part3Port,0x14,0xC8);
-- SiS_SetReg1(SiS_Pr->SiS_Part3Port,0x3D,0xA8);
-- }
-- }
-- }
-+ if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
-+ if(SiS_GetReg1(SiS_Pr->SiS_P3d4,0x31) & 0x01) {
-+ if(SiS_GetReg1(SiS_Pr->SiS_P3d4,temp) & EnablePALM){ /* 0x40 */
-+ SiS_SetReg1(SiS_Pr->SiS_Part3Port,0x13,0xFA);
-+ SiS_SetReg1(SiS_Pr->SiS_Part3Port,0x14,0xC8);
-+ SiS_SetReg1(SiS_Pr->SiS_Part3Port,0x3D,0xA8);
-+ }
-+ }
-+ }
- }
-
- if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVisionTV) {
-- tempdi = SiS_Pr->SiS_HiTVGroup3Data;
-- if(SiS_Pr->SiS_SetFlag & TVSimuMode) {
-- tempdi = SiS_Pr->SiS_HiTVGroup3Simu;
-- if(!(modeflag & Charx8Dot)) {
-- tempdi = SiS_Pr->SiS_HiTVGroup3Text;
-- }
-- }
-- if(SiS_Pr->SiS_HiVision & 0x03) {
-- tempdi = SiS_HiTVGroup3_1;
-- if(SiS_Pr->SiS_HiVision & 0x02) tempdi = SiS_HiTVGroup3_2;
-- }
-- for(i=0; i<=0x3E; i++){
-- SiS_SetReg1(SiS_Pr->SiS_Part3Port,i,tempdi[i]);
-- }
-+ tempdi = SiS_Pr->SiS_HiTVGroup3Data;
-+ if(SiS_Pr->SiS_SetFlag & TVSimuMode) {
-+ tempdi = SiS_Pr->SiS_HiTVGroup3Simu;
-+ if(!(modeflag & Charx8Dot)) {
-+ tempdi = SiS_Pr->SiS_HiTVGroup3Text;
-+ }
-+ }
-+ if(SiS_Pr->SiS_HiVision & 0x03) {
-+ tempdi = SiS_HiTVGroup3_1;
-+ if(SiS_Pr->SiS_HiVision & 0x02) tempdi = SiS_HiTVGroup3_2;
-+ }
-+ for(i=0; i<=0x3E; i++){
-+ SiS_SetReg1(SiS_Pr->SiS_Part3Port,i,tempdi[i]);
-+ }
- }
-
-- return;
-+#ifdef SIS_CP
-+ SIS_CP_INIT301_CP2
-+#endif
-+
- }
-
--/* TW: Set 301 VGA2 registers */
-+/* Set 301 VGA2 registers */
- void
- SiS_SetGroup4(SiS_Private *SiS_Pr, USHORT BaseAddr,UCHAR *ROMAddr,USHORT ModeNo,
- USHORT ModeIdIndex,USHORT RefreshRateTableIndex,
-@@ -8022,17 +8151,20 @@ SiS_SetGroup4(SiS_Private *SiS_Pr, USHOR
- USHORT tempax,tempcx,tempbx,modeflag,temp,temp2,resinfo;
- ULONG tempebx,tempeax,templong;
-
--
-- if(ModeNo<=0x13) {
-- modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
-- resinfo = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ResInfo;
-+ if(ModeNo <= 0x13) {
-+ modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
-+ resinfo = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ResInfo;
- } else {
-+ if(SiS_Pr->UseCustomMode) {
-+ modeflag = SiS_Pr->CModeFlag;
-+ resinfo = 0;
-+ } else {
- modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
- resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
-+ }
- }
-
- if(HwDeviceExtension->jChipType >= SIS_315H) {
-- /* TW: From 650/302LV 1.10.6s (not for 300/301LV - no LCDA on this combination) */
- if(SiS_Pr->SiS_VBType & VB_SIS301LV302LV) {
- if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
- SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x24,0x0e);
-@@ -8049,10 +8181,10 @@ SiS_SetGroup4(SiS_Private *SiS_Pr, USHOR
- if(HwDeviceExtension->jChipType >= SIS_315H) {
- if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
- if(SiS_Pr->SiS_VBType & VB_SIS301LV302LV) {
-- /* TW: From 650/301LV (any, incl. 1.10.6s, 1.10.7w) */
-- /* TW: This is a duplicate; done at the end, too */
-+ /* From 650/301LV (any, incl. 1.10.6s, 1.10.7w) */
-+ /* This is a duplicate; done at the end, too */
- if(SiS_GetReg1(SiS_Pr->SiS_P3d4,0x39) & 0x04) {
-- SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x27,0x2c);
-+ SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x27,0x2c);
- }
- SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x2a,0x00);
- SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x30,0x00);
-@@ -8090,39 +8222,33 @@ SiS_SetGroup4(SiS_Private *SiS_Pr, USHOR
- tempbx = SiS_Pr->SiS_VGAHDE;
- if(modeflag & HalfDCLK) tempbx >>= 1;
-
-- /* TW: New for 650/301LV and 630/301B */
- temp = 0xA0;
- if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVisionTV) {
-- temp = 0;
-- if(tempbx > 800) {
-- temp = 0xA0;
-- if(tempbx != 1024) {
-- temp = 0xC0;
-- if(tempbx != 1280) temp = 0;
-- }
-- }
-- } else
-- if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
-- if(tempbx <= 800) {
-- temp = 0x80;
-- if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
-- temp = 0;
-- if(tempbx > 800) temp = 0x60;
-- }
-- }
-+ temp = 0;
-+ if(tempbx > 800) {
-+ temp = 0xA0;
-+ if(tempbx != 1024) {
-+ temp = 0xC0;
-+ if(tempbx != 1280) temp = 0;
-+ }
-+ }
-+ } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
-+ if(tempbx <= 800) {
-+ temp = 0x80;
-+ }
- } else {
-- temp = 0x80;
-- if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
-- temp = 0;
-- if(tempbx > 800) temp = 0x60;
-- }
-+ temp = 0x80;
-+ if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
-+ temp = 0;
-+ if(tempbx > 800) temp = 0x60;
-+ }
- }
- if(SiS_Pr->SiS_HiVision & 0x03) {
- temp = 0;
- if(SiS_Pr->SiS_VGAHDE == 1024) temp = 0x20;
- }
- if(HwDeviceExtension->jChipType >= SIS_315H) {
-- if(SiS_GetReg1(SiS_Pr->SiS_P3d4,0x39) & 0x04) temp = 0;
-+ if(SiS_GetReg1(SiS_Pr->SiS_P3d4,0x39) & 0x04) temp = 0;
- }
-
- if(SiS_Pr->SiS_VBType & VB_SIS301) {
-@@ -8144,10 +8270,10 @@ SiS_SetGroup4(SiS_Private *SiS_Pr, USHOR
-
- tempeax = SiS_Pr->SiS_VGAVDE;
- tempcx |= 0x4000;
-- if(tempeax <= tempebx){
-- tempcx ^= 0x4000;
-+ if(tempeax <= tempebx) {
-+ tempcx ^= 0x4000;
- } else {
-- tempeax -= tempebx;
-+ tempeax -= tempebx;
- }
-
- templong = (tempeax * 256 * 1024) % tempebx;
-@@ -8173,64 +8299,64 @@ SiS_SetGroup4(SiS_Private *SiS_Pr, USHOR
- tempax = SiS_Pr->SiS_VGAHDE;
- if(modeflag & HalfDCLK) tempax >>= 1;
- if((SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) || (SiS_Pr->SiS_HiVision & 0x03)) {
-- if(HwDeviceExtension->jChipType >= SIS_315H) {
-- if(SiS_GetReg1(SiS_Pr->SiS_P3d4,0x39) & 0x04) tempax >>= 1;
-- else if(tempax > 800) tempax -= 800;
-- } else {
-- if(tempax > 800) tempax -= 800;
-- }
-+ if(HwDeviceExtension->jChipType >= SIS_315H) {
-+ if(SiS_GetReg1(SiS_Pr->SiS_P3d4,0x39) & 0x04) tempax >>= 1;
-+ else if(tempax > 800) tempax -= 800;
-+ } else {
-+ if(tempax > 800) tempax -= 800;
-+ }
- }
-
- /* if((SiS_Pr->SiS_VBInfo & (SetCRT2ToTV | SetPALTV)) && (!(SiS_Pr->SiS_HiVision & 0x03))) { */
- if((SiS_Pr->SiS_VBInfo & (SetCRT2ToTV - SetCRT2ToHiVisionTV)) && (!(SiS_Pr->SiS_HiVision & 0x03))) {
-- if(tempax > 800) {
-- tempbx = 8;
-- if(tempax == 1024)
-- tempax *= 25;
-- else
-- tempax *= 20;
--
-- temp = tempax % 32;
-- tempax /= 32;
-- tempax--;
-- if (temp!=0) tempax++;
-- }
-+ if(tempax > 800) {
-+ tempbx = 8;
-+ if(tempax == 1024)
-+ tempax *= 25;
-+ else
-+ tempax *= 20;
-+
-+ temp = tempax % 32;
-+ tempax /= 32;
-+ tempax--;
-+ if (temp!=0) tempax++;
-+ }
- }
- tempax--;
- temp = (tempax & 0xFF00) >> 8;
- temp &= 0x03;
-- if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) { /* From 1.10.7w */
-- if(ModeNo > 0x13) { /* From 1.10.7w */
-- if(resinfo == 8) tempax = 0x1f; /* From 1.10.7w */
-- } /* From 1.10.7w */
-- } /* From 1.10.7w */
-+ if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) { /* From 1.10.7w */
-+ if(ModeNo > 0x13) { /* From 1.10.7w */
-+ if(resinfo == SIS_RI_1024x768) tempax = 0x1f; /* From 1.10.7w */
-+ } /* From 1.10.7w */
-+ } /* From 1.10.7w */
- SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x1D,tempax & 0x00FF);
- temp <<= 4;
- temp |= tempbx;
- SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x1E,temp);
-
- if(SiS_Pr->SiS_VBType & VB_SIS301LV302LV) {
-- if(IS_SIS650740) {
-- temp = 0x0026; /* 1.10.7w; 1.10.8r; needs corresponding code in Dis/EnableBridge! */
-+ if(IS_SIS550650740660) {
-+ temp = 0x0026; /* 1.10.7w; 1.10.8r; needs corresponding code in Dis/EnableBridge! */
- } else {
-- temp = 0x0036;
-+ temp = 0x0036;
- }
- } else {
-- temp = 0x0036;
-+ temp = 0x0036;
- }
- if((SiS_Pr->SiS_VBInfo & (SetCRT2ToTV - SetCRT2ToHiVisionTV)) &&
- (!(SiS_Pr->SiS_HiVision & 0x03))) {
-- temp |= 0x01;
-- if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
-- if(!(SiS_Pr->SiS_SetFlag & TVSimuMode))
-- temp &= 0xFE;
-- }
-+ temp |= 0x01;
-+ if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
-+ if(!(SiS_Pr->SiS_SetFlag & TVSimuMode))
-+ temp &= 0xFE;
-+ }
- }
- SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x1F,0xC0,temp);
-
- tempbx = SiS_Pr->SiS_HT;
- if(HwDeviceExtension->jChipType >= SIS_315H) {
-- if(SiS_GetReg1(SiS_Pr->SiS_P3d4,0x39) & 0x04) tempbx >>= 1;
-+ if(SiS_GetReg1(SiS_Pr->SiS_P3d4,0x39) & 0x04) tempbx >>= 1;
- }
- tempbx >>= 1;
- tempbx -= 2;
-@@ -8238,7 +8364,7 @@ SiS_SetGroup4(SiS_Private *SiS_Pr, USHOR
- SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x21,0xC0,temp);
- temp = tempbx & 0x00FF;
- SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x22,temp);
--
-+
- if(SiS_Pr->SiS_VBType & VB_SIS301LV302LV) {
- if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
- SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x24,0x0e);
-@@ -8246,24 +8372,24 @@ SiS_SetGroup4(SiS_Private *SiS_Pr, USHOR
- }
-
- if(HwDeviceExtension->jChipType >= SIS_315H) {
-- /* TW: 650/LV BIOS does this for all bridge types - assumingly wrong */
-- /* 315, 330, 650+301B BIOS don't do this at all */
-- /* TW: This is a duplicate; done for LCDA as well (see above) */
-- if(SiS_Pr->SiS_VBType & VB_SIS301LV302LV) {
-- if(SiS_GetReg1(SiS_Pr->SiS_P3d4,0x39) & 0x04) {
-- SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x27,0x2c);
-- }
-- SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x2a,0x00);
-- SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x30,0x00);
-- SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x34,0x10);
-- }
-+ /* 650/LV BIOS does this for all bridge types - assumingly wrong */
-+ /* 315, 330, 650+301B BIOS don't do this at all */
-+ /* This is a duplicate; done for LCDA as well (see above) */
-+ if(SiS_Pr->SiS_VBType & VB_SIS301LV302LV) {
-+ if(SiS_GetReg1(SiS_Pr->SiS_P3d4,0x39) & 0x04) {
-+ SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x27,0x2c);
-+ }
-+ SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x2a,0x00);
-+ SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x30,0x00);
-+ SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x34,0x10);
-+ }
- } else if(HwDeviceExtension->jChipType == SIS_300) {
-- /* TW: 300/301LV BIOS does this for all bridge types - assumingly wrong */
-- if(SiS_Pr->SiS_VBType & VB_SIS301LV302LV) {
-- SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x2a,0x00);
-- SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x30,0x00);
-- SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x34,0x10);
-- }
-+ /* 300/301LV BIOS does this for all bridge types - assumingly wrong */
-+ if(SiS_Pr->SiS_VBType & VB_SIS301LV302LV) {
-+ SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x2a,0x00);
-+ SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x30,0x00);
-+ SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x34,0x10);
-+ }
- }
-
- } /* 301B */
-@@ -8278,21 +8404,26 @@ SiS_SetCRT2VCLK(SiS_Private *SiS_Pr, USH
- USHORT RefreshRateTableIndex,PSIS_HW_DEVICE_INFO HwDeviceExtension)
- {
- USHORT vclkindex;
-- USHORT tempah;
-+ USHORT temp, reg1, reg2;
-
-- vclkindex = SiS_GetVCLK2Ptr(SiS_Pr,ROMAddr,ModeNo,ModeIdIndex,RefreshRateTableIndex,
-- HwDeviceExtension);
-+ if(SiS_Pr->UseCustomMode) {
-+ reg1 = SiS_Pr->CSR2B;
-+ reg2 = SiS_Pr->CSR2C;
-+ } else {
-+ vclkindex = SiS_GetVCLK2Ptr(SiS_Pr,ROMAddr,ModeNo,ModeIdIndex,RefreshRateTableIndex,
-+ HwDeviceExtension);
-+ reg1 = SiS_Pr->SiS_VBVCLKData[vclkindex].Part4_A;
-+ reg2 = SiS_Pr->SiS_VBVCLKData[vclkindex].Part4_B;
-+ }
-
- if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
-- tempah = SiS_Pr->SiS_VBVCLKData[vclkindex].Part4_A;
-- SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x0A,tempah);
-- tempah = SiS_Pr->SiS_VBVCLKData[vclkindex].Part4_B;
-- SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x0B,tempah);
-+ SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x0A,reg1);
-+ SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x0B,reg2);
- if(HwDeviceExtension->jChipType >= SIS_315H) {
- if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
- if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
- if(!(SiS_Pr->SiS_VBInfo & SetPALTV)) {
-- if((ModeNo == 0x4a) || (ModeNo == 0x38)) {
-+ if((ModeNo == 0x64) || (ModeNo == 0x4a) || (ModeNo == 0x38)) {
- SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x0a,0x57);
- SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x0b,0x46);
- SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x1f,0xf6);
-@@ -8303,15 +8434,13 @@ SiS_SetCRT2VCLK(SiS_Private *SiS_Pr, USH
- }
- } else {
- SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x0A,0x01);
-- tempah = SiS_Pr->SiS_VBVCLKData[vclkindex].Part4_B;
-- SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x0B,tempah);
-- tempah = SiS_Pr->SiS_VBVCLKData[vclkindex].Part4_A;
-- SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x0A,tempah);
-+ SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x0B,reg2);
-+ SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x0A,reg1);
- }
- SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x12,0x00);
-- tempah = 0x08;
-- if(SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC) tempah |= 0x20;
-- SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x12,tempah);
-+ temp = 0x08;
-+ if(SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC) temp |= 0x20;
-+ SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x12,temp);
- }
-
- USHORT
-@@ -8319,23 +8448,24 @@ SiS_GetVCLK2Ptr(SiS_Private *SiS_Pr, UCH
- USHORT RefreshRateTableIndex,PSIS_HW_DEVICE_INFO HwDeviceExtension)
- {
- USHORT tempbx;
-- const USHORT LCDXlat0VCLK[4] = {VCLK40, VCLK40, VCLK40, VCLK40};
-- const USHORT LVDSXlat1VCLK[4] = {VCLK40, VCLK40, VCLK40, VCLK40};
-+ const USHORT LCDXlat0VCLK[4] = {VCLK40, VCLK40, VCLK40, VCLK40};
-+ const USHORT LVDSXlat1VCLK[4] = {VCLK40, VCLK40, VCLK40, VCLK40};
-+ const USHORT LVDSXlat4VCLK[4] = {VCLK28, VCLK28, VCLK28, VCLK28};
- #ifdef SIS300
-- const USHORT LCDXlat1VCLK300[4] = {VCLK65, VCLK65, VCLK65, VCLK65};
-- const USHORT LCDXlat2VCLK300[4] = {VCLK108_2,VCLK108_2,VCLK108_2,VCLK108_2};
-- const USHORT LVDSXlat2VCLK300[4]= {VCLK65, VCLK65, VCLK65, VCLK65};
-- const USHORT LVDSXlat3VCLK300[4]= {VCLK65, VCLK65, VCLK65, VCLK65};
-+ const USHORT LCDXlat1VCLK300[4] = {VCLK65_300, VCLK65_300, VCLK65_300, VCLK65_300};
-+ const USHORT LCDXlat2VCLK300[4] = {VCLK108_2_300,VCLK108_2_300,VCLK108_2_300,VCLK108_2_300};
-+ const USHORT LVDSXlat2VCLK300[4]= {VCLK65_300, VCLK65_300, VCLK65_300, VCLK65_300};
-+ const USHORT LVDSXlat3VCLK300[4]= {VCLK65_300, VCLK65_300, VCLK65_300, VCLK65_300};
- #endif
- #ifdef SIS315H
-- const USHORT LCDXlat1VCLK310[4] = {VCLK65+2, VCLK65+2, VCLK65+2, VCLK65+2};
-- const USHORT LCDXlat2VCLK310[4] = {VCLK108_2+5,VCLK108_2+5,VCLK108_2+5,VCLK108_2+5};
-- const USHORT LVDSXlat2VCLK310[4]= {VCLK65+2, VCLK65+2, VCLK65+2, VCLK65+2};
-- const USHORT LVDSXlat3VCLK310[4]= {VCLK108_2+5,VCLK108_2+5,VCLK108_2+5,VCLK108_2+5};
-+ const USHORT LCDXlat1VCLK310[4] = {VCLK65_315, VCLK65_315, VCLK65_315, VCLK65_315};
-+ const USHORT LCDXlat2VCLK310[4] = {VCLK108_2_315,VCLK108_2_315,VCLK108_2_315,VCLK108_2_315};
-+ const USHORT LVDSXlat2VCLK310[4]= {VCLK65_315, VCLK65_315, VCLK65_315, VCLK65_315};
-+ const USHORT LVDSXlat3VCLK310[4]= {VCLK108_2_315,VCLK108_2_315,VCLK108_2_315,VCLK108_2_315};
- #endif
- USHORT CRT2Index,VCLKIndex=0;
- USHORT modeflag,resinfo;
-- const UCHAR *CHTVVCLKPtr=NULL;
-+ const UCHAR *CHTVVCLKPtr = NULL;
- const USHORT *LCDXlatVCLK1 = NULL;
- const USHORT *LCDXlatVCLK2 = NULL;
- const USHORT *LVDSXlatVCLK2 = NULL;
-@@ -8372,33 +8502,40 @@ SiS_GetVCLK2Ptr(SiS_Private *SiS_Pr, UCH
- if(SiS_Pr->SiS_SetFlag & ProgrammingCRT2) {
-
- CRT2Index >>= 6;
-- if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)){ /* LCD */
-+ if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) { /* LCD */
- if(HwDeviceExtension->jChipType < SIS_315H) {
-- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel800x600)
-+ if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel800x600) {
- VCLKIndex = LCDXlat0VCLK[CRT2Index];
-- else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768)
-+ } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) {
- VCLKIndex = LCDXlatVCLK1[CRT2Index];
-- else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x600)
-+ } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x600) {
- VCLKIndex = LCDXlatVCLK1[CRT2Index];
-- else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1152x768)
-+ } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1152x768) {
- VCLKIndex = LCDXlatVCLK1[CRT2Index];
-- else
-+ } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x768) {
-+ VCLKIndex = VCLK81_300; /* guessed */
-+ } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x960) {
-+ VCLKIndex = VCLK108_3_300;
-+ if(resinfo == SIS_RI_1280x1024) VCLKIndex = VCLK100_300;
-+ } else {
- VCLKIndex = LCDXlatVCLK2[CRT2Index];
-+ }
- } else {
-- /* TW: 330, 650/301LV BIOS does not check expanding, 315 does */
-- if( (HwDeviceExtension->jChipType > SIS_315PRO) ||
-+ if( (SiS_Pr->SiS_VBType & VB_SIS301LV302LV) ||
- (!(SiS_Pr->SiS_LCDInfo & DontExpandLCD)) ) {
- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) {
-- VCLKIndex = 0x19;
-+ VCLKIndex = VCLK108_2_315;
-+ } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x768) {
-+ VCLKIndex = VCLK81_315; /* guessed */
- } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050) {
-- VCLKIndex = 0x19;
-+ VCLKIndex = VCLK108_2_315;
- } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1600x1200) {
-- VCLKIndex = 0x21;
-+ VCLKIndex = VCLK162_315;
-+ } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x960) {
-+ VCLKIndex = VCLK108_3_315;
-+ if(resinfo == SIS_RI_1280x1024) VCLKIndex = VCLK100_315;
- } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) {
- VCLKIndex = LCDXlatVCLK1[CRT2Index];
-- } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x960) {
-- VCLKIndex = 0x45; /* TW: in VBVCLK table */
-- if(resinfo == 0x09) VCLKIndex++;
- } else {
- VCLKIndex = LCDXlatVCLK2[CRT2Index];
- }
-@@ -8408,12 +8545,18 @@ SiS_GetVCLK2Ptr(SiS_Private *SiS_Pr, UCH
- if(ModeNo > 0x13) {
- VCLKIndex = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRTVCLK;
- }
-- if(ModeNo <= 0x13) { /* TW: 315 BIOS */
-- if(SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC == 1) VCLKIndex = 0x42;
-+ if(ModeNo <= 0x13) {
-+ if(HwDeviceExtension->jChipType <= SIS_315PRO) {
-+ if(SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC == 1) VCLKIndex = 0x42;
-+ } else {
-+ if(SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC == 1) VCLKIndex = 0x00;
-+ }
-+ }
-+ if(HwDeviceExtension->jChipType <= SIS_315PRO) {
-+ if(VCLKIndex == 0) VCLKIndex = 0x41;
-+ if(VCLKIndex == 1) VCLKIndex = 0x43;
-+ if(VCLKIndex == 4) VCLKIndex = 0x44;
- }
-- if(VCLKIndex == 0) VCLKIndex = 0x41;
-- if(VCLKIndex == 1) VCLKIndex = 0x43;
-- if(VCLKIndex == 4) VCLKIndex = 0x44;
- }
- }
- } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) { /* TV */
-@@ -8429,9 +8572,11 @@ SiS_GetVCLK2Ptr(SiS_Private *SiS_Pr, UCH
- if(SiS_Pr->SiS_SetFlag & RPLLDIV2XO) VCLKIndex = TVVCLKDIV2;
- else VCLKIndex = TVVCLK;
- }
-- if(HwDeviceExtension->jChipType >= SIS_315H) {
-- VCLKIndex += 25;
-- }
-+ if(HwDeviceExtension->jChipType < SIS_315H) {
-+ VCLKIndex += TVCLKBASE_300;
-+ } else {
-+ VCLKIndex += TVCLKBASE_315;
-+ }
- } else { /* RAMDAC2 */
- VCLKIndex = (UCHAR)SiS_GetReg2((USHORT)(SiS_Pr->SiS_P3ca+0x02));
- VCLKIndex = ((VCLKIndex >> 2) & 0x03);
-@@ -8441,7 +8586,11 @@ SiS_GetVCLK2Ptr(SiS_Private *SiS_Pr, UCH
- VCLKIndex &= 0x3f;
- if( (HwDeviceExtension->jChipType == SIS_630) &&
- (HwDeviceExtension->jChipRevision >= 0x30)) {
-- if(VCLKIndex == 0x14) VCLKIndex = 0x2e;
-+ /* This is certainly wrong: It replaces clock
-+ * 108 by 47...
-+ */
-+ /* if(VCLKIndex == 0x14) VCLKIndex = 0x2e; */
-+ if(VCLKIndex == 0x14) VCLKIndex = 0x34;
- }
- }
- }
-@@ -8505,6 +8654,10 @@ SiS_GetVCLK2Ptr(SiS_Private *SiS_Pr, UCH
- if((SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel800x600) ||
- (SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel320x480))
- VCLKIndex = LVDSXlat1VCLK[VCLKIndex];
-+ else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480 ||
-+ SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480_2 ||
-+ SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480_3)
-+ VCLKIndex = LVDSXlat4VCLK[VCLKIndex];
- else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768)
- VCLKIndex = LVDSXlatVCLK2[VCLKIndex];
- else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x600)
-@@ -8513,6 +8666,11 @@ SiS_GetVCLK2Ptr(SiS_Private *SiS_Pr, UCH
- VCLKIndex = LVDSXlatVCLK2[VCLKIndex];
- else VCLKIndex = LVDSXlatVCLK3[VCLKIndex];
-
-+ if(SiS_Pr->SiS_CustomT == CUT_BARCO1366) {
-+ /* Special Timing: Barco iQ Pro R300/400 */
-+ VCLKIndex = 0x44;
-+ }
-+
- } else {
-
- VCLKIndex = (UCHAR)SiS_GetReg2((USHORT)(SiS_Pr->SiS_P3ca+0x02));
-@@ -8556,11 +8714,11 @@ SiS_GetVCLK2Ptr(SiS_Private *SiS_Pr, UCH
- #ifdef TWDEBUG
- xf86DrvMsg(0, X_INFO, "VCLKIndex %d (0x%x)\n", VCLKIndex, VCLKIndex);
- #endif
-- return (VCLKIndex);
-+ return(VCLKIndex);
- }
-
--/* TW: Set 301 Palette address port registers */
--/* TW: Checked against 650/301LV BIOS */
-+/* Set 301 Palette address port registers */
-+/* Checked against 650/301LV BIOS */
- void
- SiS_SetGroup5(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension, USHORT BaseAddr,
- UCHAR *ROMAddr, USHORT ModeNo, USHORT ModeIdIndex)
-@@ -8568,7 +8726,7 @@ SiS_SetGroup5(SiS_Private *SiS_Pr, PSIS_
-
- if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) return;
-
-- if(SiS_Pr->SiS_ModeType == ModeVGA){
-+ if(SiS_Pr->SiS_ModeType == ModeVGA) {
- if(!(SiS_Pr->SiS_VBInfo & (SetInSlaveMode | LoadDACFlag))){
- SiS_EnableCRT2(SiS_Pr);
- SiS_LoadDAC(SiS_Pr,HwDeviceExtension,ROMAddr,ModeNo,ModeIdIndex);
-@@ -8581,17 +8739,21 @@ SiS_ModCRT1CRTC(SiS_Private *SiS_Pr, UCH
- USHORT RefreshRateTableIndex,PSIS_HW_DEVICE_INFO HwDeviceExtension)
- {
- USHORT temp,tempah,i,modeflag,j;
-- USHORT ResInfo,DisplayType;
-+ USHORT ResIndex,DisplayType;
- const SiS_LVDSCRT1DataStruct *LVDSCRT1Ptr=NULL;
-
- if(ModeNo <= 0x13) {
-- modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
-+ modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
- } else {
-- modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
-+ modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
- }
-
-+ if((SiS_Pr->SiS_CustomT == CUT_BARCO1366) ||
-+ (SiS_Pr->SiS_CustomT == CUT_BARCO1024))
-+ return;
-+
- temp = SiS_GetLVDSCRT1Ptr(SiS_Pr,ROMAddr,ModeNo,ModeIdIndex,RefreshRateTableIndex,
-- &ResInfo,&DisplayType);
-+ &ResIndex,&DisplayType);
-
- if(temp == 0) return;
-
-@@ -8639,47 +8801,53 @@ SiS_ModCRT1CRTC(SiS_Private *SiS_Pr, UCH
- case 41: LVDSCRT1Ptr = SiS_Pr->SiS_LVDSCRT11280x768_1_H; break;
- case 42: LVDSCRT1Ptr = SiS_Pr->SiS_LVDSCRT11280x768_2; break;
- case 43: LVDSCRT1Ptr = SiS_Pr->SiS_LVDSCRT11280x768_2_H; break;
-+ case 50: LVDSCRT1Ptr = SiS_Pr->SiS_LVDSCRT1640x480_1; break;
-+ case 51: LVDSCRT1Ptr = SiS_Pr->SiS_LVDSCRT1640x480_1_H; break;
-+ case 52: LVDSCRT1Ptr = SiS_Pr->SiS_LVDSCRT1640x480_2; break;
-+ case 53: LVDSCRT1Ptr = SiS_Pr->SiS_LVDSCRT1640x480_2_H; break;
-+ case 54: LVDSCRT1Ptr = SiS_Pr->SiS_LVDSCRT1640x480_3; break;
-+ case 55: LVDSCRT1Ptr = SiS_Pr->SiS_LVDSCRT1640x480_3_H; break;
- case 99: LVDSCRT1Ptr = SiS_Pr->SiS_CHTVCRT1SOPAL; break;
- default: LVDSCRT1Ptr = SiS_Pr->SiS_LVDSCRT11024x768_1; break;
- }
-
- SiS_SetRegAND(SiS_Pr->SiS_P3d4,0x11,0x7f); /*unlock cr0-7 */
-
-- tempah = (LVDSCRT1Ptr+ResInfo)->CR[0];
-+ tempah = (LVDSCRT1Ptr + ResIndex)->CR[0];
- SiS_SetReg1(SiS_Pr->SiS_P3d4,0x00,tempah);
-
- for(i=0x02,j=1;i<=0x05;i++,j++){
-- tempah = (LVDSCRT1Ptr+ResInfo)->CR[j];
-+ tempah = (LVDSCRT1Ptr + ResIndex)->CR[j];
- SiS_SetReg1(SiS_Pr->SiS_P3d4,i,tempah);
- }
- for(i=0x06,j=5;i<=0x07;i++,j++){
-- tempah = (LVDSCRT1Ptr+ResInfo)->CR[j];
-+ tempah = (LVDSCRT1Ptr + ResIndex)->CR[j];
- SiS_SetReg1(SiS_Pr->SiS_P3d4,i,tempah);
- }
- for(i=0x10,j=7;i<=0x11;i++,j++){
-- tempah = (LVDSCRT1Ptr+ResInfo)->CR[j];
-+ tempah = (LVDSCRT1Ptr + ResIndex)->CR[j];
- SiS_SetReg1(SiS_Pr->SiS_P3d4,i,tempah);
- }
- for(i=0x15,j=9;i<=0x16;i++,j++){
-- tempah = (LVDSCRT1Ptr+ResInfo)->CR[j];
-+ tempah = (LVDSCRT1Ptr + ResIndex)->CR[j];
- SiS_SetReg1(SiS_Pr->SiS_P3d4,i,tempah);
- }
- for(i=0x0A,j=11;i<=0x0C;i++,j++){
-- tempah = (LVDSCRT1Ptr+ResInfo)->CR[j];
-+ tempah = (LVDSCRT1Ptr + ResIndex)->CR[j];
- SiS_SetReg1(SiS_Pr->SiS_P3c4,i,tempah);
- }
-
-- tempah = (LVDSCRT1Ptr+ResInfo)->CR[14];
-+ tempah = (LVDSCRT1Ptr + ResIndex)->CR[14];
- tempah &= 0xE0;
-- SiS_SetRegANDOR(SiS_Pr->SiS_P3c4,0x0E,0x1f,tempah);
-+ SiS_SetRegANDOR(SiS_Pr->SiS_P3c4,0x0E,0x1f,tempah);
-
-- tempah = (LVDSCRT1Ptr+ResInfo)->CR[14];
-+ tempah = (LVDSCRT1Ptr + ResIndex)->CR[14];
- tempah &= 0x01;
- tempah <<= 5;
- if(modeflag & DoubleScanMode) tempah |= 0x080;
- SiS_SetRegANDOR(SiS_Pr->SiS_P3d4,0x09,~0x020,tempah);
-
-- /* TW: 650/LVDS BIOS - doesn't make sense */
-+ /* 650/LVDS BIOS - doesn't make sense */
- if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
- if(modeflag & HalfDCLK)
- SiS_SetRegAND(SiS_Pr->SiS_P3d4,0x11,0x7f);
-@@ -8688,7 +8856,7 @@ SiS_ModCRT1CRTC(SiS_Private *SiS_Pr, UCH
-
- BOOLEAN
- SiS_GetLVDSCRT1Ptr(SiS_Private *SiS_Pr, UCHAR *ROMAddr,USHORT ModeNo,USHORT ModeIdIndex,
-- USHORT RefreshRateTableIndex,USHORT *ResInfo,
-+ USHORT RefreshRateTableIndex,USHORT *ResIndex,
- USHORT *DisplayType)
- {
- USHORT tempbx,modeflag=0;
-@@ -8757,19 +8925,33 @@ SiS_GetLVDSCRT1Ptr(SiS_Private *SiS_Pr,
- tempbx = 40;
- if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) tempbx += 2;
- if(modeflag & HalfDCLK) tempbx++;
-+ } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480_3) {
-+ tempbx = 54;
-+ if(modeflag & HalfDCLK) tempbx++;
-+ } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480_2) {
-+ tempbx = 52;
-+ if(modeflag & HalfDCLK) tempbx++;
-+ } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480) {
-+ tempbx = 50;
-+ if(modeflag & HalfDCLK) tempbx++;
- }
-+
- }
- if(SiS_Pr->SiS_LCDInfo & LCDPass11) {
- tempbx = 12;
- if(modeflag & HalfDCLK) tempbx++;
- }
- }
-- if(SiS_Pr->SiS_IF_DEF_FSTN){
-+
-+#if 0
-+ if(SiS_Pr->SiS_IF_DEF_FSTN) {
- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel320x480){
- tempbx = 22;
- }
- }
-- *ResInfo = CRT2CRTC & 0x3F;
-+#endif
-+
-+ *ResIndex = CRT2CRTC & 0x3F;
- *DisplayType = tempbx;
- return 1;
- }
-@@ -8778,54 +8960,54 @@ void
- SiS_SetCRT2ECLK(SiS_Private *SiS_Pr, UCHAR *ROMAddr, USHORT ModeNo,USHORT ModeIdIndex,
- USHORT RefreshRateTableIndex,PSIS_HW_DEVICE_INFO HwDeviceExtension)
- {
-- USHORT tempah,tempal,pushax;
-- USHORT vclkindex=0;
--
-+ USHORT clkbase, vclkindex=0;
-+ UCHAR sr2b, sr2c;
-+
- if((SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480) || (SiS_Pr->SiS_IF_DEF_TRUMPION == 1)) {
- SiS_Pr->SiS_SetFlag &= (~ProgrammingCRT2);
-- tempal = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRTVCLK;
-- tempal &= 0x3F;
-- if(tempal == 2) RefreshRateTableIndex--;
-+ if((SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRTVCLK & 0x3f) == 2) {
-+ RefreshRateTableIndex--;
-+ }
- vclkindex = SiS_GetVCLK2Ptr(SiS_Pr,ROMAddr,ModeNo,ModeIdIndex,
-- RefreshRateTableIndex,HwDeviceExtension);
-+ RefreshRateTableIndex,HwDeviceExtension);
- SiS_Pr->SiS_SetFlag |= ProgrammingCRT2;
- } else {
- vclkindex = SiS_GetVCLK2Ptr(SiS_Pr,ROMAddr,ModeNo,ModeIdIndex,
-- RefreshRateTableIndex,HwDeviceExtension);
-+ RefreshRateTableIndex,HwDeviceExtension);
- }
--
-- tempal = 0x02B;
-+
-+ sr2b = SiS_Pr->SiS_VCLKData[vclkindex].SR2B;
-+ sr2c = SiS_Pr->SiS_VCLKData[vclkindex].SR2C;
-+
-+ if((SiS_Pr->SiS_CustomT == CUT_BARCO1366) || (SiS_Pr->SiS_CustomT == CUT_BARCO1024)) {
-+ if((ROMAddr) && SiS_Pr->SiS_UseROM) {
-+ if(ROMAddr[0x220] & 0x01) {
-+ sr2b = ROMAddr[0x227];
-+ sr2c = ROMAddr[0x228];
-+ }
-+ }
-+ }
-+
-+ clkbase = 0x02B;
- if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA)) {
- if(!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
-- tempal += 3;
-+ clkbase += 3;
- }
- }
-+
- SiS_SetReg1(SiS_Pr->SiS_P3c4,0x05,0x86);
-- pushax = tempal;
- SiS_SetReg1(SiS_Pr->SiS_P3c4,0x31,0x20);
-- tempah = SiS_Pr->SiS_VCLKData[vclkindex].SR2B;
-- SiS_SetReg1(SiS_Pr->SiS_P3c4,tempal,tempah);
-- tempal++;
-- tempah = SiS_Pr->SiS_VCLKData[vclkindex].SR2C;
-- SiS_SetReg1(SiS_Pr->SiS_P3c4,tempal,tempah);
-+ SiS_SetReg1(SiS_Pr->SiS_P3c4,clkbase,sr2b);
-+ SiS_SetReg1(SiS_Pr->SiS_P3c4,clkbase+1,sr2c);
- SiS_SetReg1(SiS_Pr->SiS_P3c4,0x31,0x10);
-- tempal = pushax;
-- tempah = SiS_Pr->SiS_VCLKData[vclkindex].SR2B;
-- SiS_SetReg1(SiS_Pr->SiS_P3c4,tempal,tempah);
-- tempal++;
-- tempah = SiS_Pr->SiS_VCLKData[vclkindex].SR2C;
-- SiS_SetReg1(SiS_Pr->SiS_P3c4,tempal,tempah);
-+ SiS_SetReg1(SiS_Pr->SiS_P3c4,clkbase,sr2b);
-+ SiS_SetReg1(SiS_Pr->SiS_P3c4,clkbase+1,sr2c);
- SiS_SetReg1(SiS_Pr->SiS_P3c4,0x31,0x00);
-- tempal = pushax;
-- tempah = SiS_Pr->SiS_VCLKData[vclkindex].SR2B;
-- SiS_SetReg1(SiS_Pr->SiS_P3c4,tempal,tempah);
-- tempal++;
-- tempah = SiS_Pr->SiS_VCLKData[vclkindex].SR2C;
-- SiS_SetReg1(SiS_Pr->SiS_P3c4,tempal,tempah);
-- return;
-+ SiS_SetReg1(SiS_Pr->SiS_P3c4,clkbase,sr2b);
-+ SiS_SetReg1(SiS_Pr->SiS_P3c4,clkbase+1,sr2c);
- }
-
--#if 0 /* TW: Not used */
-+#if 0 /* Not used */
- void
- SiS_SetDefCRT2ExtRegs(SiS_Private *SiS_Pr, USHORT BaseAddr)
- {
-@@ -8844,7 +9026,7 @@ SiS_SetDefCRT2ExtRegs(SiS_Private *SiS_P
- }
- #endif
-
--/* TW: Start of Chrontel 70xx functions ---------------------- */
-+/* Start of Chrontel 70xx functions ---------------------- */
-
- /* Set-up the Chrontel Registers */
- void
-@@ -8890,44 +9072,44 @@ SiS_SetCHTVReg(SiS_Private *SiS_Pr, UCHA
- if(SiS_Pr->SiS_IF_DEF_CH70xx == 1) {
-
- #ifdef SIS300
--
-- /* Chrontel 7005 - I assume that it does not come with a 310/325 series chip */
-
-- /* TW: We don't support modes >800x600 */
-+ /* Chrontel 7005 - I assume that it does not come with a 315 series chip */
-+
-+ /* We don't support modes >800x600 */
- if (resindex > 5) return;
-
- if(SiS_Pr->SiS_VBInfo & SetPALTV) {
-- SiS_SetCH700x(SiS_Pr,0x4304); /* TW: 0x40=76uA (PAL); 0x03=15bit non-multi RGB*/
-- SiS_SetCH700x(SiS_Pr,0x6909); /* TW: Black level for PAL (105)*/
-+ SiS_SetCH700x(SiS_Pr,0x4304); /* 0x40=76uA (PAL); 0x03=15bit non-multi RGB*/
-+ SiS_SetCH700x(SiS_Pr,0x6909); /* Black level for PAL (105)*/
- } else {
-- SiS_SetCH700x(SiS_Pr,0x0304); /* TW: upper nibble=71uA (NTSC), 0x03=15bit non-multi RGB*/
-- SiS_SetCH700x(SiS_Pr,0x7109); /* TW: Black level for NTSC (113)*/
-+ SiS_SetCH700x(SiS_Pr,0x0304); /* upper nibble=71uA (NTSC), 0x03=15bit non-multi RGB*/
-+ SiS_SetCH700x(SiS_Pr,0x7109); /* Black level for NTSC (113)*/
- }
-
- temp = CHTVRegData[resindex].Reg[0];
-- tempbx=((temp&0x00FF)<<8)|0x00; /* TW: Mode register */
-+ tempbx=((temp&0x00FF)<<8)|0x00; /* Mode register */
- SiS_SetCH700x(SiS_Pr,tempbx);
- temp = CHTVRegData[resindex].Reg[1];
-- tempbx=((temp&0x00FF)<<8)|0x07; /* TW: Start active video register */
-+ tempbx=((temp&0x00FF)<<8)|0x07; /* Start active video register */
- SiS_SetCH700x(SiS_Pr,tempbx);
- temp = CHTVRegData[resindex].Reg[2];
-- tempbx=((temp&0x00FF)<<8)|0x08; /* TW: Position overflow register */
-+ tempbx=((temp&0x00FF)<<8)|0x08; /* Position overflow register */
- SiS_SetCH700x(SiS_Pr,tempbx);
- temp = CHTVRegData[resindex].Reg[3];
-- tempbx=((temp&0x00FF)<<8)|0x0A; /* TW: Horiz Position register */
-+ tempbx=((temp&0x00FF)<<8)|0x0A; /* Horiz Position register */
- SiS_SetCH700x(SiS_Pr,tempbx);
- temp = CHTVRegData[resindex].Reg[4];
-- tempbx=((temp&0x00FF)<<8)|0x0B; /* TW: Vertical Position register */
-+ tempbx=((temp&0x00FF)<<8)|0x0B; /* Vertical Position register */
- SiS_SetCH700x(SiS_Pr,tempbx);
-
-- /* TW: Set minimum flicker filter for Luma channel (SR1-0=00),
-+ /* Set minimum flicker filter for Luma channel (SR1-0=00),
- minimum text enhancement (S3-2=10),
- maximum flicker filter for Chroma channel (S5-4=10)
- =00101000=0x28 (When reading, S1-0->S3-2, and S3-2->S1-0!)
- */
- SiS_SetCH700x(SiS_Pr,0x2801);
-
-- /* TW: Set video bandwidth
-+ /* Set video bandwidth
- High bandwith Luma composite video filter(S0=1)
- low bandwith Luma S-video filter (S2-1=00)
- disable peak filter in S-video channel (S3=0)
-@@ -8936,22 +9118,24 @@ SiS_SetCHTVReg(SiS_Private *SiS_Pr, UCHA
- */
- SiS_SetCH700x(SiS_Pr,0xb103); /* old: 3103 */
-
-- /* TW: Register 0x3D does not exist in non-macrovision register map
-+ /* Register 0x3D does not exist in non-macrovision register map
- (Maybe this is a macrovision register?)
- */
-- /* SiS_SetCH70xx(SiS_Pr,0x003D); */
-+#ifndef SIS_CP
-+ SiS_SetCH70xx(SiS_Pr,0x003D);
-+#endif
-
-- /* TW: Register 0x10 only contains 1 writable bit (S0) for sensing,
-+ /* Register 0x10 only contains 1 writable bit (S0) for sensing,
- all other bits a read-only. Macrovision?
- */
- SiS_SetCH70xxANDOR(SiS_Pr,0x0010,0x1F);
-
-- /* TW: Register 0x11 only contains 3 writable bits (S0-S2) for
-+ /* Register 0x11 only contains 3 writable bits (S0-S2) for
- contrast enhancement (set to 010 -> gain 1 Yout = 17/16*(Yin-30) )
- */
- SiS_SetCH70xxANDOR(SiS_Pr,0x0211,0xF8);
-
-- /* TW: Clear DSEN
-+ /* Clear DSEN
- */
- SiS_SetCH70xxANDOR(SiS_Pr,0x001C,0xEF);
-
-@@ -8994,7 +9178,7 @@ SiS_SetCHTVReg(SiS_Private *SiS_Pr, UCHA
- }
- }
- } else { /* ---- PAL ---- */
-- /* TW: We don't play around with FSCI in PAL mode */
-+ /* We don't play around with FSCI in PAL mode */
- if (resindex == 0x04) {
- SiS_SetCH70xxANDOR(SiS_Pr,0x0020,0xEF); /* loop filter off */
- SiS_SetCH70xxANDOR(SiS_Pr,0x0121,0xFE); /* ACIV on */
-@@ -9012,7 +9196,7 @@ SiS_SetCHTVReg(SiS_Private *SiS_Pr, UCHA
-
- #ifdef SIS315H
-
-- /* TW: We don't support modes >1024x768 */
-+ /* We don't support modes >1024x768 */
- if (resindex > 6) return;
-
- temp = CHTVRegData[resindex].Reg[0];
-@@ -9082,26 +9266,29 @@ SiS_SetCHTVReg(SiS_Private *SiS_Pr, UCHA
- #endif /* 315 */
-
- }
-+
-+#ifdef SIS_CP
-+ SIS_CP_INIT301_CP3
-+#endif
-+
- }
-
--/* TW: Chrontel 701x functions ================================= */
-+/* Chrontel 701x functions ================================= */
-
- void
--SiS_Chrontel701xBLOn(SiS_Private *SiS_Pr)
-+SiS_Chrontel701xBLOn(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension)
- {
--#ifndef NEWCH701x
- USHORT temp;
--#endif
-
-- /* TW: Enable Chrontel 7019 LCD panel backlight */
-+ /* Enable Chrontel 7019 LCD panel backlight */
- if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
--#ifdef NEWCH701x
-+ if(HwDeviceExtension->jChipType == SIS_740) {
- SiS_SetCH701x(SiS_Pr,0x6566);
--#else
-+ } else {
- temp = SiS_GetCH701x(SiS_Pr,0x66);
- temp |= 0x20;
- SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x66);
--#endif
-+ }
- }
- }
-
-@@ -9110,7 +9297,7 @@ SiS_Chrontel701xBLOff(SiS_Private *SiS_P
- {
- USHORT temp;
-
-- /* TW: Disable Chrontel 7019 LCD panel backlight */
-+ /* Disable Chrontel 7019 LCD panel backlight */
- if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
- temp = SiS_GetCH701x(SiS_Pr,0x66);
- temp &= 0xDF;
-@@ -9118,47 +9305,54 @@ SiS_Chrontel701xBLOff(SiS_Private *SiS_P
- }
- }
-
--#ifdef SIS315H /* -------- 310/325 series only --------- */
-+#ifdef SIS315H /* ----------- 315 series only ---------- */
-
- void
- SiS_SetCH701xForLCD(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension,USHORT BaseAddr)
- {
--#ifdef NEWCH701x
-- UCHAR regtable[] = { 0x1c, 0x5f, 0x64, 0x6f, 0x70, 0x71,
-- 0x72, 0x73, 0x74, 0x76, 0x78, 0x7d, 0x66 };
-- UCHAR table1024[] = { 0x60, 0x02, 0x00, 0x07, 0x40, 0xed,
-- 0xa3, 0xc8, 0xc7, 0xac, 0xe0, 0x02, 0x44 };
-- UCHAR table1280[] = { 0x60, 0x03, 0x11, 0x00, 0x40, 0xe3,
-- 0xad, 0xdb, 0xf6, 0xac, 0xe0, 0x02, 0x44 };
-- UCHAR table1400[] = { 0x60, 0x03, 0x11, 0x00, 0x40, 0xe3,
-- 0xad, 0xdb, 0xf6, 0xac, 0xe0, 0x02, 0x44 };
-- UCHAR table1600[] = { 0x60, 0x04, 0x11, 0x00, 0x40, 0xe3,
-- 0xad, 0xde, 0xf6, 0xac, 0x60, 0x1a, 0x44 };
--#else
-- UCHAR regtable[] = { 0x1c, 0x5f, 0x64, 0x6f, 0x70, 0x71,
-- 0x72, 0x73, 0x74, 0x76, 0x78, 0x7d };
-- UCHAR table1024[] = { 0x60, 0x02, 0x00, 0x07, 0x40, 0xed,
-- 0xa3, 0xc8, 0xc7, 0xac, 0x60, 0x02 };
-- UCHAR table1280[] = { 0x60, 0x03, 0x11, 0x00, 0x40, 0xe3,
-- 0xad, 0xdb, 0xf6, 0xac, 0xe0, 0x02 };
-- UCHAR table1400[] = { 0x60, 0x03, 0x11, 0x00, 0x40, 0xef,
-- 0xad, 0xdb, 0xf6, 0xac, 0x60, 0x02 };
-- UCHAR table1600[] = { 0x60, 0x04, 0x11, 0x00, 0x40, 0xe3,
-- 0xad, 0xde, 0xf6, 0xac, 0x60, 0x1a };
--#endif
-+ UCHAR regtable[] = { 0x1c, 0x5f, 0x64, 0x6f, 0x70, 0x71,
-+ 0x72, 0x73, 0x74, 0x76, 0x78, 0x7d, 0x66 };
-+ UCHAR table1024_740[] = { 0x60, 0x02, 0x00, 0x07, 0x40, 0xed,
-+ 0xa3, 0xc8, 0xc7, 0xac, 0xe0, 0x02, 0x44 };
-+ UCHAR table1280_740[] = { 0x60, 0x03, 0x11, 0x00, 0x40, 0xe3,
-+ 0xad, 0xdb, 0xf6, 0xac, 0xe0, 0x02, 0x44 };
-+ UCHAR table1400_740[] = { 0x60, 0x03, 0x11, 0x00, 0x40, 0xe3,
-+ 0xad, 0xdb, 0xf6, 0xac, 0xe0, 0x02, 0x44 };
-+ UCHAR table1600_740[] = { 0x60, 0x04, 0x11, 0x00, 0x40, 0xe3,
-+ 0xad, 0xde, 0xf6, 0xac, 0x60, 0x1a, 0x44 };
-+ UCHAR table1024_650[] = { 0x60, 0x02, 0x00, 0x07, 0x40, 0xed,
-+ 0xa3, 0xc8, 0xc7, 0xac, 0x60, 0x02 };
-+ UCHAR table1280_650[] = { 0x60, 0x03, 0x11, 0x00, 0x40, 0xe3,
-+ 0xad, 0xdb, 0xf6, 0xac, 0xe0, 0x02 };
-+ UCHAR table1400_650[] = { 0x60, 0x03, 0x11, 0x00, 0x40, 0xef,
-+ 0xad, 0xdb, 0xf6, 0xac, 0x60, 0x02 };
-+ UCHAR table1600_650[] = { 0x60, 0x04, 0x11, 0x00, 0x40, 0xe3,
-+ 0xad, 0xde, 0xf6, 0xac, 0x60, 0x1a };
- UCHAR *tableptr = NULL;
- USHORT tempbh;
- int i;
-
-- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) {
-- tableptr = table1024;
-- } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) {
-- tableptr = table1280;
-- } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050) {
-- tableptr = table1400;
-- } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1600x1200) {
-- tableptr = table1600;
-- } else return;
-+ if(HwDeviceExtension->jChipType == SIS_740) {
-+ if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) {
-+ tableptr = table1024_740;
-+ } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) {
-+ tableptr = table1280_740;
-+ } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050) {
-+ tableptr = table1400_740;
-+ } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1600x1200) {
-+ tableptr = table1600_740;
-+ } else return;
-+ } else {
-+ if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) {
-+ tableptr = table1024_650;
-+ } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) {
-+ tableptr = table1280_650;
-+ } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050) {
-+ tableptr = table1400_650;
-+ } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1600x1200) {
-+ tableptr = table1600_650;
-+ } else return;
-+ }
-
- tempbh = SiS_GetCH701x(SiS_Pr,0x74);
- if((tempbh == 0xf6) || (tempbh == 0xc7)) {
-@@ -9172,54 +9366,64 @@ SiS_SetCH701xForLCD(SiS_Private *SiS_Pr,
- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050) return;
- }
- }
--#ifdef NEWCH701x /* New from 740/LVDS: */
-- for(i=0; i<0x0d; i++) {
--#else
-- for(i=0; i<0x0c; i++) {
--#endif
-+
-+ if(HwDeviceExtension->jChipType == SIS_740) {
-+ tempbh = 0x0d;
-+ } else {
-+ tempbh = 0x0c;
-+ }
-+ for(i = 0; i < tempbh; i++) {
- SiS_SetCH701x(SiS_Pr,(tableptr[i] << 8) | regtable[i]);
- }
-- SiS_ChrontelPowerSequencing(SiS_Pr);
-+ SiS_ChrontelPowerSequencing(SiS_Pr,HwDeviceExtension);
- tempbh = SiS_GetCH701x(SiS_Pr,0x1e);
- tempbh |= 0xc0;
- SiS_SetCH701x(SiS_Pr,(tempbh << 8) | 0x1e);
--
--#ifdef NEWCH701x /* 740/LVDS: */
-- tempbh = SiS_GetCH701x(SiS_Pr,0x1c);
-- tempbh &= 0xfb;
-- SiS_SetCH701x(SiS_Pr,(tempbh << 8) | 0x1c);
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port, 0x2d, 0x03);
-- tempbh = SiS_GetCH701x(SiS_Pr,0x64);
-- tempbh |= 0x40;
-- SiS_SetCH701x(SiS_Pr,(tempbh << 8) | 0x64);
-- tempbh = SiS_GetCH701x(SiS_Pr,0x03);
-- tempbh &= 0x3f;
-- SiS_SetCH701x(SiS_Pr,(tempbh << 8) | 0x03);
--#endif /* End 740/LVDS */
-+
-+ if(HwDeviceExtension->jChipType == SIS_740) {
-+ tempbh = SiS_GetCH701x(SiS_Pr,0x1c);
-+ tempbh &= 0xfb;
-+ SiS_SetCH701x(SiS_Pr,(tempbh << 8) | 0x1c);
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x2d,0x03);
-+ tempbh = SiS_GetCH701x(SiS_Pr,0x64);
-+ tempbh |= 0x40;
-+ SiS_SetCH701x(SiS_Pr,(tempbh << 8) | 0x64);
-+ tempbh = SiS_GetCH701x(SiS_Pr,0x03);
-+ tempbh &= 0x3f;
-+ SiS_SetCH701x(SiS_Pr,(tempbh << 8) | 0x03);
-+ }
- }
-
- void
--SiS_ChrontelPowerSequencing(SiS_Private *SiS_Pr)
--{
-- UCHAR regtable[] = { 0x67, 0x68, 0x69, 0x6a, 0x6b };
--#ifdef NEWCH701x
-- UCHAR table1024[] = { 0x01, 0x02, 0x01, 0x01, 0x01 };
-- UCHAR table1400[] = { 0x01, 0x6e, 0x01, 0x01, 0x01 };
--#else
-- UCHAR table1024[] = { 0x01, 0x02, 0x01, 0x01, 0x02 };
-- UCHAR table1400[] = { 0x01, 0x02, 0x01, 0x01, 0x02 };
--#endif
-+SiS_ChrontelPowerSequencing(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension)
-+{
-+ UCHAR regtable[] = { 0x67, 0x68, 0x69, 0x6a, 0x6b };
-+ UCHAR table1024_740[] = { 0x01, 0x02, 0x01, 0x01, 0x01 };
-+ UCHAR table1400_740[] = { 0x01, 0x6e, 0x01, 0x01, 0x01 };
-+ UCHAR table1024_650[] = { 0x01, 0x02, 0x01, 0x01, 0x02 };
-+ UCHAR table1400_650[] = { 0x01, 0x02, 0x01, 0x01, 0x02 };
- UCHAR *tableptr = NULL;
- int i;
-
- /* Set up Power up/down timing */
-- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) {
-- tableptr = table1024;
-- } else if((SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) ||
-- (SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050) ||
-- (SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1600x1200)) {
-- tableptr = table1400;
-- } else return;
-+
-+ if(HwDeviceExtension->jChipType == SIS_740) {
-+ if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) {
-+ tableptr = table1024_740;
-+ } else if((SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) ||
-+ (SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050) ||
-+ (SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1600x1200)) {
-+ tableptr = table1400_740;
-+ } else return;
-+ } else {
-+ if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) {
-+ tableptr = table1024_650;
-+ } else if((SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) ||
-+ (SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050) ||
-+ (SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1600x1200)) {
-+ tableptr = table1400_650;
-+ } else return;
-+ }
-
- for(i=0; i<5; i++) {
- SiS_SetCH701x(SiS_Pr,(tableptr[i] << 8) | regtable[i]);
-@@ -9232,66 +9436,72 @@ SiS_Chrontel701xOn(SiS_Private *SiS_Pr,
- USHORT temp;
-
- if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
--#ifdef NEWCH701x
-- temp = SiS_GetCH701x(SiS_Pr,0x1c);
-- temp |= 0x04;
-- SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x1c);
--#endif
-+ if(HwDeviceExtension->jChipType == SIS_740) {
-+ temp = SiS_GetCH701x(SiS_Pr,0x1c);
-+ temp |= 0x04;
-+ SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x1c);
-+ }
- if(SiS_IsYPbPr(SiS_Pr,HwDeviceExtension, BaseAddr)) {
- temp = SiS_GetCH701x(SiS_Pr,0x01);
- temp &= 0x3f;
-- temp |= 0x80; /* TW: Enable YPrPb (HDTV) */
-+ temp |= 0x80; /* Enable YPrPb (HDTV) */
- SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x01);
- }
- if(SiS_IsChScart(SiS_Pr,HwDeviceExtension, BaseAddr)) {
- temp = SiS_GetCH701x(SiS_Pr,0x01);
- temp &= 0x3f;
-- temp |= 0xc0; /* TW: Enable SCART + CVBS */
-+ temp |= 0xc0; /* Enable SCART + CVBS */
- SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x01);
- }
--#ifdef NEWCH701x
-- SiS_ChrontelDoSomething5(SiS_Pr);
-- SiS_SetCH701x(SiS_Pr,0x2049); /* TW: Enable TV path */
--#else
-- SiS_SetCH701x(SiS_Pr,0x2049); /* TW: Enable TV path */
-- temp = SiS_GetCH701x(SiS_Pr,0x49);
-- if(SiS_IsYPbPr(SiS_Pr,HwDeviceExtension, BaseAddr)) {
-- temp = SiS_GetCH701x(SiS_Pr,0x73);
-- temp |= 0x60;
-- SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x73);
-+ if(HwDeviceExtension->jChipType == SIS_740) {
-+ SiS_ChrontelDoSomething5(SiS_Pr);
-+ SiS_SetCH701x(SiS_Pr,0x2049); /* Enable TV path */
-+ } else {
-+ SiS_SetCH701x(SiS_Pr,0x2049); /* Enable TV path */
-+ temp = SiS_GetCH701x(SiS_Pr,0x49);
-+ if(SiS_IsYPbPr(SiS_Pr,HwDeviceExtension, BaseAddr)) {
-+ temp = SiS_GetCH701x(SiS_Pr,0x73);
-+ temp |= 0x60;
-+ SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x73);
-+ }
-+ temp = SiS_GetCH701x(SiS_Pr,0x47);
-+ temp &= 0x7f;
-+ SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x47);
-+ SiS_LongDelay(SiS_Pr,2);
-+ temp = SiS_GetCH701x(SiS_Pr,0x47);
-+ temp |= 0x80;
-+ SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x47);
- }
-- temp = SiS_GetCH701x(SiS_Pr,0x47);
-- temp &= 0x7f;
-- SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x47);
-- SiS_LongDelay(SiS_Pr,2);
-- temp = SiS_GetCH701x(SiS_Pr,0x47);
-- temp |= 0x80;
-- SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x47);
--#endif
- }
- }
-
- void
--SiS_Chrontel701xOff(SiS_Private *SiS_Pr)
-+SiS_Chrontel701xOff(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension)
- {
- USHORT temp;
-
-+ /* Complete power down of LVDS */
- if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
-+ if(HwDeviceExtension->jChipType == SIS_740) {
-+ SiS_LongDelay(SiS_Pr,1);
-+ SiS_GenericDelay(SiS_Pr,0x16ff);
-+ SiS_SetCH701x(SiS_Pr,0xac76);
-+ SiS_SetCH701x(SiS_Pr,0x0066);
-+ } else {
- SiS_LongDelay(SiS_Pr,2);
-- /* TW: Complete power down of LVDS */
- temp = SiS_GetCH701x(SiS_Pr,0x76);
- temp &= 0xfc;
- SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x76);
- SiS_SetCH701x(SiS_Pr,0x0066);
-+ }
- }
- }
-
--#ifdef NEWCH701x
- void
- SiS_ChrontelDoSomething5(SiS_Private *SiS_Pr)
- {
- unsigned char temp, temp1;
--
-+
- temp1 = SiS_GetCH701x(SiS_Pr,0x49);
- SiS_SetCH701x(SiS_Pr,0x3e49);
- temp = SiS_GetCH701x(SiS_Pr,0x47);
-@@ -9303,130 +9513,134 @@ SiS_ChrontelDoSomething5(SiS_Private *Si
- SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x47);
- SiS_SetCH701x(SiS_Pr,(temp1 << 8) | 0x49);
- }
--#endif
-
- void
- SiS_ChrontelResetDB(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension, USHORT BaseAddr)
- {
--#ifdef NEWCH701x
- USHORT temp;
--
-- /* 740/LVDS: */
-- temp = SiS_GetCH701x(SiS_Pr,0x4a);
-- temp &= 0x01;
-- if(!(temp)) {
--
-- if(SiS_WeHaveBacklightCtrl(SiS_Pr,HwDeviceExtension, BaseAddr)) {
-- temp = SiS_GetCH701x(SiS_Pr,0x49);
-- SiS_SetCH701x(SiS_Pr,0x3e49);
-- }
-- /* TW: Reset Chrontel 7019 datapath */
-+
-+ if(HwDeviceExtension->jChipType == SIS_740) {
-+ temp = SiS_GetCH701x(SiS_Pr,0x4a);
-+ temp &= 0x01;
-+ if(!(temp)) {
-+
-+ if(SiS_WeHaveBacklightCtrl(SiS_Pr,HwDeviceExtension, BaseAddr)) {
-+ temp = SiS_GetCH701x(SiS_Pr,0x49);
-+ SiS_SetCH701x(SiS_Pr,0x3e49);
-+ }
-+ /* Reset Chrontel 7019 datapath */
-+ SiS_SetCH701x(SiS_Pr,0x1048);
-+ SiS_LongDelay(SiS_Pr,1);
-+ SiS_SetCH701x(SiS_Pr,0x1848);
-+
-+ if(SiS_WeHaveBacklightCtrl(SiS_Pr,HwDeviceExtension, BaseAddr)) {
-+ SiS_ChrontelDoSomething5(SiS_Pr);
-+ SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x49);
-+ }
-+
-+ } else {
-+
-+ temp = SiS_GetCH701x(SiS_Pr,0x5c);
-+ temp &= 0xef;
-+ SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x5c);
-+ temp = SiS_GetCH701x(SiS_Pr,0x5c);
-+ temp |= 0x10;
-+ SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x5c);
-+ temp = SiS_GetCH701x(SiS_Pr,0x5c);
-+ temp &= 0xef;
-+ SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x5c);
-+ temp = SiS_GetCH701x(SiS_Pr,0x61);
-+ if(!temp) {
-+ SiS_SetCH701xForLCD(SiS_Pr,HwDeviceExtension,BaseAddr);
-+ }
-+ }
-+ } else { /* 650 */
-+ /* Reset Chrontel 7019 datapath */
- SiS_SetCH701x(SiS_Pr,0x1048);
- SiS_LongDelay(SiS_Pr,1);
- SiS_SetCH701x(SiS_Pr,0x1848);
--
-- if(SiS_WeHaveBacklightCtrl(SiS_Pr,HwDeviceExtension, BaseAddr)) {
-- SiS_ChrontelDoSomething5(SiS_Pr);
-- SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x49);
-- }
-- } else {
--
-- temp = SiS_GetCH701x(SiS_Pr,0x5c);
-- temp &= 0xef;
-- SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x5c);
-- temp = SiS_GetCH701x(SiS_Pr,0x5c);
-- temp |= 0x10;
-- SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x5c);
-- temp = SiS_GetCH701x(SiS_Pr,0x5c);
-- temp &= 0xef;
-- SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x5c);
-- temp = SiS_GetCH701x(SiS_Pr,0x61);
-- if(!temp) {
-- SiS_SetCH701xForLCD(SiS_Pr,HwDeviceExtension,BaseAddr);
-- }
-- }
--#else /* pre 740/LVDS code */
-- /* TW: Reset Chrontel 7019 datapath */
-- SiS_SetCH701x(SiS_Pr,0x1048);
-- SiS_LongDelay(SiS_Pr,1);
-- SiS_SetCH701x(SiS_Pr,0x1848);
--#endif
-+ }
- }
-
- void
- SiS_ChrontelDoSomething4(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension, USHORT BaseAddr)
- {
--#ifdef NEWCH701x
-- if(!(SiS_WeHaveBacklightCtrl(SiS_Pr,HwDeviceExtension, BaseAddr))) {
-- SiS_ChrontelDoSomething5(SiS_Pr);
-- }
--#else
- USHORT temp;
-
-- SiS_SetCH701x(SiS_Pr,0xaf76); /* Power up LVDS block */
-- temp = SiS_GetCH701x(SiS_Pr,0x49);
-- temp &= 1;
-- if(temp != 1) { /* TV block powered? (0 = yes, 1 = no) */
-- temp = SiS_GetCH701x(SiS_Pr,0x47);
-- temp &= 0x70;
-- SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x47); /* enable VSYNC */
-- SiS_LongDelay(SiS_Pr,3);
-- temp = SiS_GetCH701x(SiS_Pr,0x47);
-- temp |= 0x80;
-- SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x47); /* disable VSYNC */
-+ if(HwDeviceExtension->jChipType == SIS_740) {
-+
-+ if(SiS_WeHaveBacklightCtrl(SiS_Pr,HwDeviceExtension, BaseAddr)) {
-+ SiS_ChrontelDoSomething5(SiS_Pr);
-+ }
-+
-+ } else {
-+
-+ SiS_SetCH701x(SiS_Pr,0xaf76); /* Power up LVDS block */
-+ temp = SiS_GetCH701x(SiS_Pr,0x49);
-+ temp &= 1;
-+ if(temp != 1) { /* TV block powered? (0 = yes, 1 = no) */
-+ temp = SiS_GetCH701x(SiS_Pr,0x47);
-+ temp &= 0x70;
-+ SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x47); /* enable VSYNC */
-+ SiS_LongDelay(SiS_Pr,3);
-+ temp = SiS_GetCH701x(SiS_Pr,0x47);
-+ temp |= 0x80;
-+ SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x47); /* disable VSYNC */
-+ }
-+
- }
--#endif
- }
-
- void
- SiS_ChrontelDoSomething3(SiS_Private *SiS_Pr, USHORT ModeNo, PSIS_HW_DEVICE_INFO HwDeviceExtension,
- USHORT BaseAddr)
- {
--#ifdef NEWCH701x
-- USHORT temp;
--
-- temp = SiS_GetCH701x(SiS_Pr,0x61);
-- if(temp < 1) {
-- temp++;
-- SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x61);
-- }
-- SiS_SetCH701x(SiS_Pr,0x4566);
-- SiS_SetCH701x(SiS_Pr,0xaf76);
-- SiS_LongDelay(SiS_Pr,1);
-- SiS_GenericDelay(SiS_Pr,0x16ff);
--
--#else
- USHORT temp,temp1;
--
-- temp1 = 0;
-- temp = SiS_GetCH701x(SiS_Pr,0x61);
-- if(temp < 2) {
-- temp++;
-- SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x61);
-- temp1 = 1;
-- }
-- SiS_SetCH701x(SiS_Pr,0xac76);
-- temp = SiS_GetCH701x(SiS_Pr,0x66);
-- temp |= 0x5f;
-- SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x66);
-- if(ModeNo > 0x13) {
-- if(SiS_WeHaveBacklightCtrl(SiS_Pr,HwDeviceExtension, BaseAddr)) {
-- SiS_GenericDelay(SiS_Pr,0x3ff);
-- } else {
-- SiS_GenericDelay(SiS_Pr,0x2ff);
-- }
-- } else {
-- if(!temp1)
-- SiS_GenericDelay(SiS_Pr,0x2ff);
-+
-+ if(HwDeviceExtension->jChipType == SIS_740) {
-+
-+ temp = SiS_GetCH701x(SiS_Pr,0x61);
-+ if(temp < 1) {
-+ temp++;
-+ SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x61);
-+ }
-+ SiS_SetCH701x(SiS_Pr,0x4566);
-+ SiS_SetCH701x(SiS_Pr,0xaf76);
-+ SiS_LongDelay(SiS_Pr,1);
-+ SiS_GenericDelay(SiS_Pr,0x16ff);
-+
-+ } else { /* 650 */
-+
-+ temp1 = 0;
-+ temp = SiS_GetCH701x(SiS_Pr,0x61);
-+ if(temp < 2) {
-+ temp++;
-+ SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x61);
-+ temp1 = 1;
-+ }
-+ SiS_SetCH701x(SiS_Pr,0xac76);
-+ temp = SiS_GetCH701x(SiS_Pr,0x66);
-+ temp |= 0x5f;
-+ SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x66);
-+ if(ModeNo > 0x13) {
-+ if(SiS_WeHaveBacklightCtrl(SiS_Pr,HwDeviceExtension, BaseAddr)) {
-+ SiS_GenericDelay(SiS_Pr,0x3ff);
-+ } else {
-+ SiS_GenericDelay(SiS_Pr,0x2ff);
-+ }
-+ } else {
-+ if(!temp1)
-+ SiS_GenericDelay(SiS_Pr,0x2ff);
-+ }
-+ temp = SiS_GetCH701x(SiS_Pr,0x76);
-+ temp |= 0x03;
-+ SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x76);
-+ temp = SiS_GetCH701x(SiS_Pr,0x66);
-+ temp &= 0x7f;
-+ SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x66);
-+ SiS_LongDelay(SiS_Pr,1);
-+
- }
-- temp = SiS_GetCH701x(SiS_Pr,0x76);
-- temp |= 0x03;
-- SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x76);
-- temp = SiS_GetCH701x(SiS_Pr,0x66);
-- temp &= 0x7f;
-- SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x66);
-- SiS_LongDelay(SiS_Pr,1);
--#endif
- }
-
- void
-@@ -9443,9 +9657,9 @@ SiS_ChrontelDoSomething2(SiS_Private *Si
- temp &= 0x04;
- if(temp == 0x04) break;
-
--#ifdef NEWCH701x
-- SiS_SetCH701x(SiS_Pr,0xac76); /* 740/LVDS */
--#endif
-+ if(HwDeviceExtension->jChipType == SIS_740) {
-+ SiS_SetCH701x(SiS_Pr,0xac76);
-+ }
-
- SiS_SetCH701xForLCD(SiS_Pr,HwDeviceExtension,BaseAddr);
-
-@@ -9463,11 +9677,11 @@ SiS_ChrontelDoSomething2(SiS_Private *Si
- temp = SiS_GetCH701x(SiS_Pr,0x76);
- temp |= 0x04;
- SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x76);
--#ifdef NEWCH701x
-- SiS_SetCH701x(SiS_Pr,0xe078);
--#else
-- SiS_SetCH701x(SiS_Pr,0x6078);
--#endif
-+ if(HwDeviceExtension->jChipType == SIS_740) {
-+ SiS_SetCH701x(SiS_Pr,0xe078);
-+ } else {
-+ SiS_SetCH701x(SiS_Pr,0x6078);
-+ }
- SiS_LongDelay(SiS_Pr,2);
- } while(0);
-
-@@ -9485,51 +9699,52 @@ SiS_ChrontelDoSomething1(SiS_Private *Si
- temp &= 0xbf; /* Set datapath 2 to LVDS */
- SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x03);
-
--#ifdef NEWCH701x /* 740/LVDS: */
-+ if(HwDeviceExtension->jChipType == SIS_740) {
-+
-+ temp = SiS_GetCH701x(SiS_Pr,0x1c);
-+ temp &= 0xfb;
-+ SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x1c);
-+
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x2d,0x03);
-+
-+ temp = SiS_GetCH701x(SiS_Pr,0x64);
-+ temp |= 0x40;
-+ SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x64);
-+
-+ temp = SiS_GetCH701x(SiS_Pr,0x03);
-+ temp &= 0x3f;
-+ SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x03);
-+
-+ temp = SiS_GetCH701x(SiS_Pr,0x66);
-+ if(temp != 0x45) {
-+ SiS_ChrontelResetDB(SiS_Pr,HwDeviceExtension,BaseAddr);
-+ SiS_ChrontelDoSomething2(SiS_Pr,HwDeviceExtension,BaseAddr);
-+ temp = SiS_GetReg1(SiS_Pr->SiS_P3d4,0x34);
-+ SiS_ChrontelDoSomething3(SiS_Pr,temp,HwDeviceExtension,BaseAddr);
-+ }
-+
-+ } else { /* 650 */
-
-- temp = SiS_GetCH701x(SiS_Pr,0x1c);
-- temp &= 0xfb;
-- SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x1c);
--
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x2d,0x03);
--
-- temp = SiS_GetCH701x(SiS_Pr,0x64);
-- temp |= 0x40;
-- SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x64);
--
-- temp = SiS_GetCH701x(SiS_Pr,0x03);
-- temp &= 0x3f;
-- SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x03);
--
-- temp = SiS_GetCH701x(SiS_Pr,0x66);
-- if(temp != 0x45) {
- SiS_ChrontelResetDB(SiS_Pr,HwDeviceExtension,BaseAddr);
-- SiS_ChrontelDoSomething2(SiS_Pr,HwDeviceExtension,BaseAddr);
-- temp = SiS_GetReg1(SiS_Pr->SiS_P3d4,0x34);
-- SiS_ChrontelDoSomething3(SiS_Pr,temp,HwDeviceExtension,BaseAddr);
-- }
-
--#else /* pre-740/LVDS: */
-+ SiS_ChrontelDoSomething2(SiS_Pr,HwDeviceExtension,BaseAddr);
-
-- SiS_ChrontelResetDB(SiS_Pr);
-+ temp = SiS_GetReg1(SiS_Pr->SiS_P3d4,0x34);
-+ SiS_ChrontelDoSomething3(SiS_Pr,temp,HwDeviceExtension,BaseAddr);
-
-- SiS_ChrontelDoSomething2(SiS_Pr,HwDeviceExtension,BaseAddr);
-+ SiS_SetCH701x(SiS_Pr,0xaf76);
-
-- temp = SiS_GetReg1(SiS_Pr->SiS_P3d4,0x34);
-- SiS_ChrontelDoSomething3(SiS_Pr,temp,HwDeviceExtension,BaseAddr);
-+ }
-
-- SiS_SetCH701x(SiS_Pr,0xaf76);
--
--#endif /* End of pre-740/LVDS */
- }
-
--#endif /* 310/325 series --------------------------------- */
-+#endif /* 315 series ------------------------------------ */
-
--/* TW: End of Chrontel 701x functions ==================================== */
-+/* End of Chrontel 701x functions ==================================== */
-
--/* TW: Generic Read/write routines for Chrontel ========================== */
-+/* Generic Read/write routines for Chrontel ========================== */
-
--/* TW: The Chrontel is connected to the 630/730 via
-+/* The Chrontel is connected to the 630/730 via
- * the 630/730's DDC/I2C port.
- *
- * On 630(S)T chipset, the index changed from 0x11 to 0x0a,
-@@ -9539,13 +9754,13 @@ SiS_ChrontelDoSomething1(SiS_Private *Si
- void
- SiS_SetCH70xx(SiS_Private *SiS_Pr, USHORT tempbx)
- {
-- if (SiS_Pr->SiS_IF_DEF_CH70xx == 1)
-+ if(SiS_Pr->SiS_IF_DEF_CH70xx == 1)
- SiS_SetCH700x(SiS_Pr,tempbx);
- else
- SiS_SetCH701x(SiS_Pr,tempbx);
- }
-
--/* TW: Write to Chrontel 700x */
-+/* Write to Chrontel 700x */
- /* Parameter is [Data (S15-S8) | Register no (S7-S0)] */
- void
- SiS_SetCH700x(SiS_Private *SiS_Pr, USHORT tempbx)
-@@ -9553,100 +9768,100 @@ SiS_SetCH700x(SiS_Private *SiS_Pr, USHOR
- USHORT tempah,temp,i;
-
- if(!(SiS_Pr->SiS_ChrontelInit)) {
-- SiS_Pr->SiS_DDC_Index = 0x11; /* TW: Bit 0 = SC; Bit 1 = SD */
-+ SiS_Pr->SiS_DDC_Index = 0x11; /* Bit 0 = SC; Bit 1 = SD */
- SiS_Pr->SiS_DDC_Data = 0x02; /* Bitmask in IndexReg for Data */
- SiS_Pr->SiS_DDC_Clk = 0x01; /* Bitmask in IndexReg for Clk */
- SiS_Pr->SiS_DDC_DataShift = 0x00;
-- SiS_Pr->SiS_DDC_DeviceAddr = 0xEA; /* TW: DAB (Device Address Byte) */
-+ SiS_Pr->SiS_DDC_DeviceAddr = 0xEA; /* DAB (Device Address Byte) */
- }
-
-- for(i=0;i<10;i++) { /* TW: Do only 10 attempts to write */
-+ for(i=0;i<10;i++) { /* Do only 10 attempts to write */
- /* SiS_SetSwitchDDC2(SiS_Pr); */
-- if(SiS_SetStart(SiS_Pr)) continue; /* TW: Set start condition */
-+ if(SiS_SetStart(SiS_Pr)) continue; /* Set start condition */
- tempah = SiS_Pr->SiS_DDC_DeviceAddr;
-- temp = SiS_WriteDDC2Data(SiS_Pr,tempah); /* TW: Write DAB (S0=0=write) */
-- if(temp) continue; /* TW: (ERROR: no ack) */
-- tempah = tempbx & 0x00FF; /* TW: Write RAB */
-- tempah |= 0x80; /* TW: (set bit 7, see datasheet) */
-+ temp = SiS_WriteDDC2Data(SiS_Pr,tempah); /* Write DAB (S0=0=write) */
-+ if(temp) continue; /* (ERROR: no ack) */
-+ tempah = tempbx & 0x00FF; /* Write RAB */
-+ tempah |= 0x80; /* (set bit 7, see datasheet) */
- temp = SiS_WriteDDC2Data(SiS_Pr,tempah);
-- if(temp) continue; /* TW: (ERROR: no ack) */
-+ if(temp) continue; /* (ERROR: no ack) */
- tempah = (tempbx & 0xFF00) >> 8;
-- temp = SiS_WriteDDC2Data(SiS_Pr,tempah); /* TW: Write data */
-- if(temp) continue; /* TW: (ERROR: no ack) */
-- if(SiS_SetStop(SiS_Pr)) continue; /* TW: Set stop condition */
-+ temp = SiS_WriteDDC2Data(SiS_Pr,tempah); /* Write data */
-+ if(temp) continue; /* (ERROR: no ack) */
-+ if(SiS_SetStop(SiS_Pr)) continue; /* Set stop condition */
- SiS_Pr->SiS_ChrontelInit = 1;
- return;
- }
-
-- /* TW: For 630ST */
-+ /* For 630ST */
- if(!(SiS_Pr->SiS_ChrontelInit)) {
-- SiS_Pr->SiS_DDC_Index = 0x0a; /* TW: Bit 7 = SC; Bit 6 = SD */
-+ SiS_Pr->SiS_DDC_Index = 0x0a; /* Bit 7 = SC; Bit 6 = SD */
- SiS_Pr->SiS_DDC_Data = 0x80; /* Bitmask in IndexReg for Data */
- SiS_Pr->SiS_DDC_Clk = 0x40; /* Bitmask in IndexReg for Clk */
- SiS_Pr->SiS_DDC_DataShift = 0x00;
-- SiS_Pr->SiS_DDC_DeviceAddr = 0xEA; /* TW: DAB (Device Address Byte) */
-+ SiS_Pr->SiS_DDC_DeviceAddr = 0xEA; /* DAB (Device Address Byte) */
-
-- for(i=0;i<10;i++) { /* TW: Do only 10 attempts to write */
-+ for(i=0;i<10;i++) { /* Do only 10 attempts to write */
- /* SiS_SetSwitchDDC2(SiS_Pr); */
-- if (SiS_SetStart(SiS_Pr)) continue; /* TW: Set start condition */
-+ if (SiS_SetStart(SiS_Pr)) continue; /* Set start condition */
- tempah = SiS_Pr->SiS_DDC_DeviceAddr;
-- temp = SiS_WriteDDC2Data(SiS_Pr,tempah); /* TW: Write DAB (S0=0=write) */
-- if(temp) continue; /* TW: (ERROR: no ack) */
-- tempah = tempbx & 0x00FF; /* TW: Write RAB */
-- tempah |= 0x80; /* TW: (set bit 7, see datasheet) */
-+ temp = SiS_WriteDDC2Data(SiS_Pr,tempah); /* Write DAB (S0=0=write) */
-+ if(temp) continue; /* (ERROR: no ack) */
-+ tempah = tempbx & 0x00FF; /* Write RAB */
-+ tempah |= 0x80; /* (set bit 7, see datasheet) */
- temp = SiS_WriteDDC2Data(SiS_Pr,tempah);
-- if(temp) continue; /* TW: (ERROR: no ack) */
-+ if(temp) continue; /* (ERROR: no ack) */
- tempah = (tempbx & 0xFF00) >> 8;
-- temp = SiS_WriteDDC2Data(SiS_Pr,tempah); /* TW: Write data */
-- if(temp) continue; /* TW: (ERROR: no ack) */
-- if(SiS_SetStop(SiS_Pr)) continue; /* TW: Set stop condition */
-+ temp = SiS_WriteDDC2Data(SiS_Pr,tempah); /* Write data */
-+ if(temp) continue; /* (ERROR: no ack) */
-+ if(SiS_SetStop(SiS_Pr)) continue; /* Set stop condition */
- SiS_Pr->SiS_ChrontelInit = 1;
- return;
- }
- }
- }
-
--/* TW: Write to Chrontel 701x */
-+/* Write to Chrontel 701x */
- /* Parameter is [Data (S15-S8) | Register no (S7-S0)] */
- void
- SiS_SetCH701x(SiS_Private *SiS_Pr, USHORT tempbx)
- {
- USHORT tempah,temp,i;
-
-- SiS_Pr->SiS_DDC_Index = 0x11; /* TW: Bit 0 = SC; Bit 1 = SD */
-+ SiS_Pr->SiS_DDC_Index = 0x11; /* Bit 0 = SC; Bit 1 = SD */
- SiS_Pr->SiS_DDC_Data = 0x08; /* Bitmask in IndexReg for Data */
- SiS_Pr->SiS_DDC_Clk = 0x04; /* Bitmask in IndexReg for Clk */
- SiS_Pr->SiS_DDC_DataShift = 0x00;
-- SiS_Pr->SiS_DDC_DeviceAddr = 0xEA; /* TW: DAB (Device Address Byte) */
-+ SiS_Pr->SiS_DDC_DeviceAddr = 0xEA; /* DAB (Device Address Byte) */
-
-- for(i=0;i<10;i++) { /* TW: Do only 10 attempts to write */
-- if (SiS_SetStart(SiS_Pr)) continue; /* TW: Set start condition */
-+ for(i=0;i<10;i++) { /* Do only 10 attempts to write */
-+ if (SiS_SetStart(SiS_Pr)) continue; /* Set start condition */
- tempah = SiS_Pr->SiS_DDC_DeviceAddr;
-- temp = SiS_WriteDDC2Data(SiS_Pr,tempah); /* TW: Write DAB (S0=0=write) */
-- if(temp) continue; /* TW: (ERROR: no ack) */
-+ temp = SiS_WriteDDC2Data(SiS_Pr,tempah); /* Write DAB (S0=0=write) */
-+ if(temp) continue; /* (ERROR: no ack) */
- tempah = tempbx & 0x00FF;
-- temp = SiS_WriteDDC2Data(SiS_Pr,tempah); /* TW: Write RAB */
-- if(temp) continue; /* TW: (ERROR: no ack) */
-+ temp = SiS_WriteDDC2Data(SiS_Pr,tempah); /* Write RAB */
-+ if(temp) continue; /* (ERROR: no ack) */
- tempah = (tempbx & 0xFF00) >> 8;
-- temp = SiS_WriteDDC2Data(SiS_Pr,tempah); /* TW: Write data */
-- if(temp) continue; /* TW: (ERROR: no ack) */
-- if(SiS_SetStop(SiS_Pr)) continue; /* TW: Set stop condition */
-+ temp = SiS_WriteDDC2Data(SiS_Pr,tempah); /* Write data */
-+ if(temp) continue; /* (ERROR: no ack) */
-+ if(SiS_SetStop(SiS_Pr)) continue; /* Set stop condition */
- return;
- }
- }
-
--/* TW: Read from Chrontel 70xx */
-+/* Read from Chrontel 70xx */
- /* Parameter is [Register no (S7-S0)] */
- USHORT
- SiS_GetCH70xx(SiS_Private *SiS_Pr, USHORT tempbx)
- {
-- if (SiS_Pr->SiS_IF_DEF_CH70xx == 1)
-+ if(SiS_Pr->SiS_IF_DEF_CH70xx == 1)
- return(SiS_GetCH700x(SiS_Pr,tempbx));
- else
- return(SiS_GetCH701x(SiS_Pr,tempbx));
- }
-
--/* TW: Read from Chrontel 700x */
-+/* Read from Chrontel 700x */
- /* Parameter is [Register no (S7-S0)] */
- USHORT
- SiS_GetCH700x(SiS_Private *SiS_Pr, USHORT tempbx)
-@@ -9654,57 +9869,57 @@ SiS_GetCH700x(SiS_Private *SiS_Pr, USHOR
- USHORT tempah,temp,i;
-
- if(!(SiS_Pr->SiS_ChrontelInit)) {
-- SiS_Pr->SiS_DDC_Index = 0x11; /* TW: Bit 0 = SC; Bit 1 = SD */
-+ SiS_Pr->SiS_DDC_Index = 0x11; /* Bit 0 = SC; Bit 1 = SD */
- SiS_Pr->SiS_DDC_Data = 0x02; /* Bitmask in IndexReg for Data */
- SiS_Pr->SiS_DDC_Clk = 0x01; /* Bitmask in IndexReg for Clk */
- SiS_Pr->SiS_DDC_DataShift = 0x00;
-- SiS_Pr->SiS_DDC_DeviceAddr = 0xEA; /* TW: DAB */
-+ SiS_Pr->SiS_DDC_DeviceAddr = 0xEA; /* DAB */
- }
-
- SiS_Pr->SiS_DDC_ReadAddr = tempbx;
-
-- for(i=0;i<20;i++) { /* TW: Do only 20 attempts to read */
-+ for(i=0;i<20;i++) { /* Do only 20 attempts to read */
- /* SiS_SetSwitchDDC2(SiS_Pr); */
-- if(SiS_SetStart(SiS_Pr)) continue; /* TW: Set start condition */
-+ if(SiS_SetStart(SiS_Pr)) continue; /* Set start condition */
- tempah = SiS_Pr->SiS_DDC_DeviceAddr;
-- temp = SiS_WriteDDC2Data(SiS_Pr,tempah); /* TW: Write DAB (S0=0=write) */
-- if(temp) continue; /* TW: (ERROR: no ack) */
-- tempah = SiS_Pr->SiS_DDC_ReadAddr | 0x80; /* TW: Write RAB | 0x80 */
-+ temp = SiS_WriteDDC2Data(SiS_Pr,tempah); /* Write DAB (S0=0=write) */
-+ if(temp) continue; /* (ERROR: no ack) */
-+ tempah = SiS_Pr->SiS_DDC_ReadAddr | 0x80; /* Write RAB | 0x80 */
- temp = SiS_WriteDDC2Data(SiS_Pr,tempah);
-- if(temp) continue; /* TW: (ERROR: no ack) */
-- if (SiS_SetStart(SiS_Pr)) continue; /* TW: Re-start */
-+ if(temp) continue; /* (ERROR: no ack) */
-+ if (SiS_SetStart(SiS_Pr)) continue; /* Re-start */
- tempah = SiS_Pr->SiS_DDC_DeviceAddr | 0x01; /* DAB | 0x01 = Read */
-- temp = SiS_WriteDDC2Data(SiS_Pr,tempah); /* TW: DAB (S0=1=read) */
-- if(temp) continue; /* TW: (ERROR: no ack) */
-- tempah = SiS_ReadDDC2Data(SiS_Pr,tempah); /* TW: Read byte */
-- if (SiS_SetStop(SiS_Pr)) continue; /* TW: Stop condition */
-+ temp = SiS_WriteDDC2Data(SiS_Pr,tempah); /* DAB (S0=1=read) */
-+ if(temp) continue; /* (ERROR: no ack) */
-+ tempah = SiS_ReadDDC2Data(SiS_Pr,tempah); /* Read byte */
-+ if (SiS_SetStop(SiS_Pr)) continue; /* Stop condition */
- SiS_Pr->SiS_ChrontelInit = 1;
- return(tempah);
- }
-
-- /* TW: For 630ST */
-+ /* For 630ST */
- if(!SiS_Pr->SiS_ChrontelInit) {
-- SiS_Pr->SiS_DDC_Index = 0x0a; /* TW: Bit 0 = SC; Bit 1 = SD */
-+ SiS_Pr->SiS_DDC_Index = 0x0a; /* Bit 0 = SC; Bit 1 = SD */
- SiS_Pr->SiS_DDC_Data = 0x80; /* Bitmask in IndexReg for Data */
- SiS_Pr->SiS_DDC_Clk = 0x40; /* Bitmask in IndexReg for Clk */
- SiS_Pr->SiS_DDC_DataShift = 0x00;
-- SiS_Pr->SiS_DDC_DeviceAddr = 0xEA; /* TW: DAB (Device Address Byte) */
-+ SiS_Pr->SiS_DDC_DeviceAddr = 0xEA; /* DAB (Device Address Byte) */
-
-- for(i=0;i<20;i++) { /* TW: Do only 20 attempts to read */
-+ for(i=0;i<20;i++) { /* Do only 20 attempts to read */
- /* SiS_SetSwitchDDC2(SiS_Pr); */
-- if(SiS_SetStart(SiS_Pr)) continue; /* TW: Set start condition */
-+ if(SiS_SetStart(SiS_Pr)) continue; /* Set start condition */
- tempah = SiS_Pr->SiS_DDC_DeviceAddr;
-- temp = SiS_WriteDDC2Data(SiS_Pr,tempah); /* TW: Write DAB (S0=0=write) */
-- if(temp) continue; /* TW: (ERROR: no ack) */
-- tempah = SiS_Pr->SiS_DDC_ReadAddr | 0x80; /* TW: Write RAB | 0x80 */
-+ temp = SiS_WriteDDC2Data(SiS_Pr,tempah); /* Write DAB (S0=0=write) */
-+ if(temp) continue; /* (ERROR: no ack) */
-+ tempah = SiS_Pr->SiS_DDC_ReadAddr | 0x80; /* Write RAB | 0x80 */
- temp = SiS_WriteDDC2Data(SiS_Pr,tempah);
-- if(temp) continue; /* TW: (ERROR: no ack) */
-- if (SiS_SetStart(SiS_Pr)) continue; /* TW: Re-start */
-+ if(temp) continue; /* (ERROR: no ack) */
-+ if (SiS_SetStart(SiS_Pr)) continue; /* Re-start */
- tempah = SiS_Pr->SiS_DDC_DeviceAddr | 0x01; /* DAB | 0x01 = Read */
-- temp = SiS_WriteDDC2Data(SiS_Pr,tempah); /* TW: DAB (S0=1=read) */
-- if(temp) continue; /* TW: (ERROR: no ack) */
-- tempah = SiS_ReadDDC2Data(SiS_Pr,tempah); /* TW: Read byte */
-- if (SiS_SetStop(SiS_Pr)) continue; /* TW: Stop condition */
-+ temp = SiS_WriteDDC2Data(SiS_Pr,tempah); /* DAB (S0=1=read) */
-+ if(temp) continue; /* (ERROR: no ack) */
-+ tempah = SiS_ReadDDC2Data(SiS_Pr,tempah); /* Read byte */
-+ if (SiS_SetStop(SiS_Pr)) continue; /* Stop condition */
- SiS_Pr->SiS_ChrontelInit = 1;
- return(tempah);
- }
-@@ -9712,52 +9927,51 @@ SiS_GetCH700x(SiS_Private *SiS_Pr, USHOR
- return(0xFFFF);
- }
-
--/* TW: Read from Chrontel 701x */
-+/* Read from Chrontel 701x */
- /* Parameter is [Register no (S7-S0)] */
- USHORT
- SiS_GetCH701x(SiS_Private *SiS_Pr, USHORT tempbx)
- {
- USHORT tempah,temp,i;
-
-- SiS_Pr->SiS_DDC_Index = 0x11; /* TW: Bit 0 = SC; Bit 1 = SD */
-+ SiS_Pr->SiS_DDC_Index = 0x11; /* Bit 0 = SC; Bit 1 = SD */
- SiS_Pr->SiS_DDC_Data = 0x08; /* Bitmask in IndexReg for Data */
- SiS_Pr->SiS_DDC_Clk = 0x04; /* Bitmask in IndexReg for Clk */
- SiS_Pr->SiS_DDC_DataShift = 0x00;
-- SiS_Pr->SiS_DDC_DeviceAddr = 0xEA; /* TW: DAB */
-+ SiS_Pr->SiS_DDC_DeviceAddr = 0xEA; /* DAB */
- SiS_Pr->SiS_DDC_ReadAddr = tempbx;
-
-- for(i=0;i<20;i++) { /* TW: Do only 20 attempts to read */
-- if(SiS_SetStart(SiS_Pr)) continue; /* TW: Set start condition */
-+ for(i=0;i<20;i++) { /* Do only 20 attempts to read */
-+ if(SiS_SetStart(SiS_Pr)) continue; /* Set start condition */
- tempah = SiS_Pr->SiS_DDC_DeviceAddr;
-- temp = SiS_WriteDDC2Data(SiS_Pr,tempah); /* TW: Write DAB (S0=0=write) */
-- if(temp) continue; /* TW: (ERROR: no ack) */
-- tempah = SiS_Pr->SiS_DDC_ReadAddr; /* TW: Write RAB */
-+ temp = SiS_WriteDDC2Data(SiS_Pr,tempah); /* Write DAB (S0=0=write) */
-+ if(temp) continue; /* (ERROR: no ack) */
-+ tempah = SiS_Pr->SiS_DDC_ReadAddr; /* Write RAB */
- temp = SiS_WriteDDC2Data(SiS_Pr,tempah);
-- if(temp) continue; /* TW: (ERROR: no ack) */
-- if (SiS_SetStart(SiS_Pr)) continue; /* TW: Re-start */
-+ if(temp) continue; /* (ERROR: no ack) */
-+ if (SiS_SetStart(SiS_Pr)) continue; /* Re-start */
- tempah = SiS_Pr->SiS_DDC_DeviceAddr | 0x01; /* DAB | 0x01 = Read */
-- temp = SiS_WriteDDC2Data(SiS_Pr,tempah); /* TW: DAB (S0=1=read) */
-- if(temp) continue; /* TW: (ERROR: no ack) */
-- tempah = SiS_ReadDDC2Data(SiS_Pr,tempah); /* TW: Read byte */
-- SiS_SetStop(SiS_Pr); /* TW: Stop condition */
-+ temp = SiS_WriteDDC2Data(SiS_Pr,tempah); /* DAB (S0=1=read) */
-+ if(temp) continue; /* (ERROR: no ack) */
-+ tempah = SiS_ReadDDC2Data(SiS_Pr,tempah); /* Read byte */
-+ SiS_SetStop(SiS_Pr); /* Stop condition */
- return(tempah);
- }
- return 0xFFFF;
- }
-
--#ifdef LINUX_XF86
--/* TW: Our own DDC functions */
-+/* Our own DDC functions */
- USHORT
--SiS_InitDDCRegs(SiS_Private *SiS_Pr, SISPtr pSiS, USHORT adaptnum, USHORT DDCdatatype,
-- BOOLEAN checkcr32)
-+SiS_InitDDCRegs(SiS_Private *SiS_Pr, unsigned long VBFlags, int VGAEngine,
-+ USHORT adaptnum, USHORT DDCdatatype, BOOLEAN checkcr32)
- {
- unsigned char ddcdtype[] = { 0xa0, 0xa0, 0xa0, 0xa2, 0xa6 };
- unsigned char flag, cr32;
- USHORT temp = 0, myadaptnum = adaptnum;
-
- if(adaptnum != 0) {
-- if(!(pSiS->VBFlags & (VB_301|VB_301B|VB_302B))) return 0xFFFF;
-- if((pSiS->VBFlags & VB_30xBDH) && (adaptnum == 1)) return 0xFFFF;
-+ if(!(VBFlags & (VB_301|VB_301B|VB_302B))) return 0xFFFF;
-+ if((VBFlags & VB_30xBDH) && (adaptnum == 1)) return 0xFFFF;
- }
-
- /* adapternum for SiS bridges: 0 = CRT1, 1 = LCD, 2 = VGA2 */
-@@ -9771,8 +9985,9 @@ SiS_InitDDCRegs(SiS_Private *SiS_Pr, SIS
- flag = 0xff;
-
- cr32 = SiS_GetReg1(SiS_Pr->SiS_P3d4,0x32);
--
-- if(pSiS->VBFlags & VB_SISBRIDGE) {
-+
-+#if 0
-+ if(VBFlags & VB_SISBRIDGE) {
- if(myadaptnum == 0) {
- if(!(cr32 & 0x20)) {
- myadaptnum = 2;
-@@ -9785,18 +10000,19 @@ SiS_InitDDCRegs(SiS_Private *SiS_Pr, SIS
- }
- }
- }
-+#endif
-
-- if(pSiS->VGAEngine == SIS_300_VGA) { /* 300 series */
-+ if(VGAEngine == SIS_300_VGA) { /* 300 series */
-
- if(myadaptnum != 0) {
- flag = 0;
-- if(pSiS->VBFlags & VB_SISBRIDGE) {
-+ if(VBFlags & VB_SISBRIDGE) {
- SiS_Pr->SiS_DDC_Port = SiS_Pr->SiS_Part4Port;
- SiS_Pr->SiS_DDC_Index = 0x0f;
- }
- }
-
-- if(!(pSiS->VBFlags & VB_301)) {
-+ if(!(VBFlags & VB_301)) {
- if((cr32 & 0x80) && (checkcr32)) {
- if(myadaptnum >= 1) {
- if(!(cr32 & 0x08)) {
-@@ -9810,11 +10026,11 @@ SiS_InitDDCRegs(SiS_Private *SiS_Pr, SIS
- temp = 4 - (myadaptnum * 2);
- if(flag) temp = 0;
-
-- } else { /* 310/325/330 series */
-+ } else { /* 315/330 series */
-
- /* here we simplify: 0 = CRT1, 1 = CRT2 (VGA, LCD) */
-
-- if(pSiS->VBFlags & VB_SISBRIDGE) {
-+ if(VBFlags & VB_SISBRIDGE) {
- if(myadaptnum == 2) {
- myadaptnum = 1;
- }
-@@ -9822,7 +10038,7 @@ SiS_InitDDCRegs(SiS_Private *SiS_Pr, SIS
-
- if(myadaptnum == 1) {
- flag = 0;
-- if(pSiS->VBFlags & VB_SISBRIDGE) {
-+ if(VBFlags & VB_SISBRIDGE) {
- SiS_Pr->SiS_DDC_Port = SiS_Pr->SiS_Part4Port;
- SiS_Pr->SiS_DDC_Index = 0x0f;
- }
-@@ -9840,7 +10056,7 @@ SiS_InitDDCRegs(SiS_Private *SiS_Pr, SIS
- temp = myadaptnum;
- if(myadaptnum == 1) {
- temp = 0;
-- if(pSiS->VBFlags & VB_LVDS) flag = 0xff;
-+ if(VBFlags & VB_LVDS) flag = 0xff;
- }
-
- if(flag) temp = 0;
-@@ -9852,7 +10068,7 @@ SiS_InitDDCRegs(SiS_Private *SiS_Pr, SIS
- #ifdef TWDEBUG
- xf86DrvMsg(0, X_INFO, "DDC Port %x Index %x Shift %d\n",
- SiS_Pr->SiS_DDC_Port, SiS_Pr->SiS_DDC_Index, temp);
--#endif
-+#endif
-
- return 0;
- }
-@@ -9862,15 +10078,9 @@ SiS_WriteDABDDC(SiS_Private *SiS_Pr)
- {
- if(SiS_SetStart(SiS_Pr)) return 0xFFFF;
- if(SiS_WriteDDC2Data(SiS_Pr, SiS_Pr->SiS_DDC_DeviceAddr)) {
--#ifdef TWDEBUG
-- xf86DrvMsg(0, X_INFO, "WriteDAB 1 failed\n");
--#endif
- return 0xFFFF;
- }
- if(SiS_WriteDDC2Data(SiS_Pr, SiS_Pr->SiS_DDC_SecAddr)) {
--#ifdef TWDEBUG
-- xf86DrvMsg(0, X_INFO, "WriteDAB 2 failed\n");
--#endif
- return 0xFFFF;
- }
- return(0);
-@@ -9881,9 +10091,6 @@ SiS_PrepareReadDDC(SiS_Private *SiS_Pr)
- {
- if(SiS_SetStart(SiS_Pr)) return 0xFFFF;
- if(SiS_WriteDDC2Data(SiS_Pr, (SiS_Pr->SiS_DDC_DeviceAddr | 0x01))) {
--#ifdef TWDEBUG
-- xf86DrvMsg(0, X_INFO, "PrepareReadDDC 1 failed\n");
--#endif
- return 0xFFFF;
- }
- return(0);
-@@ -9921,9 +10128,6 @@ SiS_DoProbeDDC(SiS_Private *SiS_Pr)
- SiS_SetSwitchDDC2(SiS_Pr);
- if(SiS_PrepareDDC(SiS_Pr)) {
- SiS_SetStop(SiS_Pr);
--#ifdef TWDEBUG
-- xf86DrvMsg(0, X_INFO, "DoProbeDDC 1 failed at PrepareDDC\n");
--#endif
- return(0xFFFF);
- }
- mask = 0xf0;
-@@ -9972,7 +10176,7 @@ SiS_ProbeDDC(SiS_Private *SiS_Pr)
- }
-
- USHORT
--SiS_ReadDDC(SiS_Private *SiS_Pr, SISPtr pSiS, USHORT DDCdatatype, unsigned char *buffer)
-+SiS_ReadDDC(SiS_Private *SiS_Pr, USHORT DDCdatatype, unsigned char *buffer)
- {
- USHORT flag, length, i;
- unsigned char chksum,gotcha;
-@@ -10004,28 +10208,7 @@ SiS_ReadDDC(SiS_Private *SiS_Pr, SISPtr
- return(flag);
- }
-
--USHORT
--SiS_ReadLCDDDC(SiS_Private *SiS_Pr, USHORT length, unsigned char *buffer)
--{
-- USHORT i=0, flag=0;
--
-- length--;
--
-- SiS_SetSwitchDDC2(SiS_Pr);
-- if(!(SiS_PrepareDDC(SiS_Pr))) {
-- for(i=0; i<length; i++) {
-- buffer[i] = (unsigned char)SiS_ReadDDC2Data(SiS_Pr, 0);
-- SiS_SendACK(SiS_Pr, 0);
-- }
-- buffer[i] = (unsigned char)SiS_ReadDDC2Data(SiS_Pr, 0);
-- SiS_SendACK(SiS_Pr, 1);
-- } else flag = 0xFFFF;
--
-- SiS_SetStop(SiS_Pr);
-- return(0);
--}
--
--/* TW: Our private DDC function
-+/* Our private DDC functions
-
- It complies somewhat with the corresponding VESA function
- in arguments and return values.
-@@ -10036,7 +10219,7 @@ SiS_ReadLCDDDC(SiS_Private *SiS_Pr, USHO
-
- Arguments:
- adaptnum: 0=CRT1, 1=LCD, 2=VGA2
-- CRT2 DDC is only supported on SiS301, 301B (non-DH version), 302B.
-+ CRT2 DDC is only supported on SiS301, 301B, 302B.
- DDCdatatype: 0=Probe, 1=EDID, 2=EDID+VDIF, 3=EDID V2 (P&D), 4=EDID V2 (FPDI-2)
- buffer: ptr to 256 data bytes which will be filled with read data.
-
-@@ -10046,43 +10229,48 @@ SiS_ReadLCDDDC(SiS_Private *SiS_Pr, USHO
-
- */
- USHORT
--SiS_HandleDDC(SiS_Private *SiS_Pr, SISPtr pSiS, USHORT adaptnum,
-- USHORT DDCdatatype, unsigned char *buffer)
-+SiS_HandleDDC(SiS_Private *SiS_Pr, unsigned long VBFlags, int VGAEngine,
-+ USHORT adaptnum, USHORT DDCdatatype, unsigned char *buffer)
- {
- if(adaptnum > 2) return 0xFFFF;
- if(DDCdatatype > 4) return 0xFFFF;
-- if((!(pSiS->VBFlags & VB_VIDEOBRIDGE)) && (adaptnum > 0)) return 0xFFFF;
-- if(SiS_InitDDCRegs(SiS_Pr, pSiS, adaptnum, DDCdatatype, TRUE) == 0xFFFF) return 0xFFFF;
-+ if((!(VBFlags & VB_VIDEOBRIDGE)) && (adaptnum > 0)) return 0xFFFF;
-+ if(SiS_InitDDCRegs(SiS_Pr, VBFlags, VGAEngine, adaptnum, DDCdatatype, TRUE) == 0xFFFF) return 0xFFFF;
- if(DDCdatatype == 0) {
- return(SiS_ProbeDDC(SiS_Pr));
- } else {
-- return(SiS_ReadDDC(SiS_Pr, pSiS, DDCdatatype, buffer));
-+ return(SiS_ReadDDC(SiS_Pr, DDCdatatype, buffer));
- }
- }
-
-+#ifdef LINUX_XF86
- /* Sense the LCD parameters (CR36, CR37) via DDC */
- /* SiS30x(B) only */
- USHORT
- SiS_SenseLCDDDC(SiS_Private *SiS_Pr, SISPtr pSiS)
- {
-- USHORT DDCdatatype, paneltype, flag, xres, yres;
-+ USHORT DDCdatatype, paneltype, flag, xres=0, yres=0;
- USHORT index, myindex, lumsize, numcodes;
- unsigned char cr37=0, seekcode;
- BOOLEAN checkexpand = FALSE;
- int retry, i;
- unsigned char buffer[256];
--
-+
-+ for(i=0; i<7; i++) SiS_Pr->CP_DataValid[i] = FALSE;
-+ SiS_Pr->CP_HaveCustomData = FALSE;
-+ SiS_Pr->CP_MaxX = SiS_Pr->CP_MaxY = SiS_Pr->CP_MaxClock = 0;
-+
- if(!(pSiS->VBFlags & (VB_301|VB_301B|VB_302B))) return 0;
- if(pSiS->VBFlags & VB_30xBDH) return 0;
-
-- if(SiS_InitDDCRegs(SiS_Pr, pSiS, 1, 0, FALSE) == 0xFFFF) return 0;
-+ if(SiS_InitDDCRegs(SiS_Pr, pSiS->VBFlags, pSiS->VGAEngine, 1, 0, FALSE) == 0xFFFF) return 0;
-
- SiS_Pr->SiS_DDC_SecAddr = 0x00;
-
- /* Probe supported DA's */
- flag = SiS_ProbeDDC(SiS_Pr);
- #ifdef TWDEBUG
-- xf86DrvMsg(pSiS->pScrn->scrnIndex, X_INFO,
-+ xf86DrvMsg(pSiS->pScrn->scrnIndex, X_INFO,
- "CRT2 DDC capabilities 0x%x\n", flag);
- #endif
- if(flag & 0x10) {
-@@ -10099,7 +10287,7 @@ SiS_SenseLCDDDC(SiS_Private *SiS_Pr, SIS
- /* Read the entire EDID */
- retry = 2;
- do {
-- if(SiS_ReadDDC(SiS_Pr, pSiS, DDCdatatype, buffer)) {
-+ if(SiS_ReadDDC(SiS_Pr, DDCdatatype, buffer)) {
- xf86DrvMsg(pSiS->pScrn->scrnIndex, X_INFO,
- "CRT2: DDC read failed (attempt %d), %s\n",
- (3-retry), (retry == 1) ? "giving up" : "retrying");
-@@ -10132,7 +10320,7 @@ SiS_SenseLCDDDC(SiS_Private *SiS_Pr, SIS
- }
-
- if((buffer[0x18] & 0x18) != 0x08) {
-- xf86DrvMsg(pSiS->pScrn->scrnIndex, X_PROBED,
-+ xf86DrvMsg(pSiS->pScrn->scrnIndex, X_PROBED,
- "CRT2: Attached display is not of RGB but of %s type (0x%02x)\n",
- ((buffer[0x18] & 0x18) == 0x00) ? "monochrome/greyscale" :
- ( ((buffer[0x18] & 0x18) == 0x10) ? "non-RGB multicolor" :
-@@ -10140,103 +10328,226 @@ SiS_SenseLCDDDC(SiS_Private *SiS_Pr, SIS
- buffer[0x18]);
- return 0;
- }
--
-- /* Now analyze the first Detailed Timing Block and hope
-- * that the preferred timing mode is stored there.
-- */
-- xres = buffer[0x38] | ((buffer[0x3a] & 0xf0) << 4);
-- yres = buffer[0x3b] | ((buffer[0x3d] & 0xf0) << 4);
-+
-+ /* Now analyze the first Detailed Timing Block and see
-+ * if the preferred timing mode is stored there. If so,
-+ * check if this is a standard panel for which we already
-+ * know the timing.
-+ */
-+
-+ paneltype = Panel_Custom;
- checkexpand = FALSE;
-- switch(xres) {
-- case 800:
-- if(yres == 600) {
-- paneltype = Panel310_800x600;
-- checkexpand = TRUE;
-- }
-- break;
-- case 1024:
-- if(yres == 768) {
-- paneltype = Panel310_1024x768;
-- checkexpand = FALSE; /* expand causes error at 640x480, should otherwise be TRUE; */
-- }
-- break;
-- case 1280:
-- if(yres == 960) {
-- if(pSiS->VGAEngine == SIS_300_VGA) {
-- paneltype = Panel300_1280x960;
-- } else {
-- paneltype = Panel310_1280x960;
-- }
-- } else if(yres == 1024) {
-- paneltype = Panel310_1280x1024;
-- checkexpand = TRUE;
-- } else if(pSiS->VGAEngine == SIS_315_VGA) {
-+
-+ if(buffer[0x18] & 0x02) {
-+
-+ xres = buffer[0x38] | ((buffer[0x3a] & 0xf0) << 4);
-+ yres = buffer[0x3b] | ((buffer[0x3d] & 0xf0) << 4);
-+
-+ SiS_Pr->CP_PreferredX = xres;
-+ SiS_Pr->CP_PreferredY = yres;
-+
-+ switch(xres) {
-+ case 800:
-+ if(yres == 600) {
-+ paneltype = Panel_800x600;
-+ checkexpand = TRUE;
-+ }
-+ break;
-+ case 1024:
- if(yres == 768) {
-- paneltype = Panel310_1280x768; /* Panel size 1280x768 not supported yet */
-- checkexpand = TRUE;
-- }
-- }
-- break;
-- case 1400:
-- if(pSiS->VGAEngine == SIS_315_VGA) {
-- if(yres == 1050) {
-- paneltype = Panel310_1400x1050;
-- checkexpand = TRUE;
-- }
-- }
-- break;
-- case 1600:
-- if(pSiS->VGAEngine == SIS_315_VGA) {
-- if(yres == 1200) {
-- paneltype = Panel310_1600x1200;
-+ paneltype = Panel_1024x768;
-+ checkexpand = TRUE;
-+ }
-+ break;
-+ case 1280:
-+ if(yres == 1024) {
-+ paneltype = Panel_1280x1024;
- checkexpand = TRUE;
-- }
-- }
-- break;
-+ } else if(yres == 960) {
-+ if(pSiS->VGAEngine == SIS_300_VGA) {
-+ paneltype = Panel300_1280x960;
-+ } else {
-+ paneltype = Panel310_1280x960;
-+ }
-+ } else if(yres == 768) {
-+ paneltype = Panel_1280x768;
-+ checkexpand = FALSE;
-+ cr37 |= 0x10;
-+ }
-+ break;
-+ case 1400:
-+ if(pSiS->VGAEngine == SIS_315_VGA) {
-+ if(yres == 1050) {
-+ paneltype = Panel310_1400x1050;
-+ checkexpand = TRUE;
-+ }
-+ }
-+ break;
-+#if 0 /* Treat this as custom, as we have no valid timing data yet */
-+ case 1600:
-+ if(pSiS->VGAEngine == SIS_315_VGA) {
-+ if(yres == 1200) {
-+ paneltype = Panel310_1600x1200;
-+ checkexpand = TRUE;
-+ }
-+ }
-+ break;
-+#endif
-+ }
-+
-+ if(paneltype != Panel_Custom) {
-+ if((buffer[0x47] & 0x18) == 0x18) {
-+ cr37 |= ((((buffer[0x47] & 0x06) ^ 0x06) << 5) | 0x20);
-+ } else {
-+ /* What now? There is no digital separate output timing... */
-+ xf86DrvMsg(pSiS->pScrn->scrnIndex, X_WARNING,
-+ "CRT2: Unable to retrieve Sync polarity information\n");
-+ }
-+ }
-+
- }
-
-- if(buffer[0x18] & 0x02) {
-- /* If the preferred timing mode is stored in the first
-- * detailed timing block, we now can extract the sync
-- * polarisation information as well. This only works
-- * if the Flags indicate a digital separate output.
-- */
-- if((buffer[0x47] & 0x18) == 0x18) {
-- cr37 |= ((((buffer[0x47] & 0x06) ^ 0x06) << 5) | 0x20);
-- } else {
-- /* What now? There is no digital separate output timing... */
-- xf86DrvMsg(pSiS->pScrn->scrnIndex, X_WARNING,
-- "CRT2: Unable to retrieve Sync polarity information\n");
-- }
--
-- } else {
-- /* If the preferred timing mode is *not* stored in the first
-- * detailed timing block, we need to guess the resolution
-- * from the supported Established Timings and assume the
-- * default sync polarity
-- */
-+ /* If we still don't know what panel this is, we take it
-+ * as a custom panel and derive the timing data from the
-+ * detailed timing blocks
-+ */
-+ if(paneltype == Panel_Custom) {
-+
-+ BOOLEAN havesync = FALSE;
-+ int i, temp, base = 0x36;
-+ unsigned long estpack;
-+ unsigned short estx[] = {
-+ 720, 720, 640, 640, 640, 640, 800, 800,
-+ 800, 800, 832,1024,1024,1024,1024,1280,
-+ 1152
-+ };
-+ unsigned short esty[] = {
-+ 400, 400, 480, 480, 480, 480, 600, 600,
-+ 600, 600, 624, 768, 768, 768, 768,1024,
-+ 870
-+ };
-+
- paneltype = 0;
-- if(buffer[0x24] & 0x01) {
-- paneltype = Panel310_1280x1024;
-- checkexpand = TRUE;
-- cr37 |= 0x20;
-- } else if(buffer[0x24] & 0x0e) {
-- paneltype = Panel310_1024x768;
-- cr37 |= 0xe0;
-- checkexpand = FALSE; /* Bug at 640x480 */
-- } else if(buffer[0x23] & 0x01) {
-- paneltype = Panel310_800x600;
-- cr37 |= 0xe0;
-- checkexpand = TRUE;
-- }
-+
-+ /* Find the maximum resolution */
-+
-+ /* 1. From Established timings */
-+ estpack = (buffer[0x23] << 9) | (buffer[0x24] << 1) | ((buffer[0x25] >> 7) & 0x01);
-+ for(i=16; i>=0; i--) {
-+ if(estpack & (1 << i)) {
-+ if(estx[16 - i] > SiS_Pr->CP_MaxX) SiS_Pr->CP_MaxX = estx[16 - i];
-+ if(esty[16 - i] > SiS_Pr->CP_MaxY) SiS_Pr->CP_MaxY = esty[16 - i];
-+ }
-+ }
-+
-+ /* 2. From Standard Timings */
-+ for(i=0x26; i < 0x36; i+=2) {
-+ if((buffer[i] != 0x01) && (buffer[i+1] != 0x01)) {
-+ temp = (buffer[i] + 31) * 8;
-+ if(temp > SiS_Pr->CP_MaxX) SiS_Pr->CP_MaxX = temp;
-+ switch((buffer[i+1] & 0xc0) >> 6) {
-+ case 0x03: temp = temp * 9 / 16; break;
-+ case 0x02: temp = temp * 4 / 5; break;
-+ case 0x01: temp = temp * 3 / 4; break;
-+ }
-+ if(temp > SiS_Pr->CP_MaxY) SiS_Pr->CP_MaxY = temp;
-+ }
-+ }
-+
-+ /* Now extract the Detailed Timings and convert them into modes */
-+
-+ for(i = 0; i < 4; i++, base += 18) {
-+
-+ /* Is this a detailed timing block or a monitor descriptor? */
-+ if(buffer[base] || buffer[base+1] || buffer[base+2]) {
-+
-+ xres = buffer[base+2] | ((buffer[base+4] & 0xf0) << 4);
-+ yres = buffer[base+5] | ((buffer[base+7] & 0xf0) << 4);
-+
-+ SiS_Pr->CP_HDisplay[i] = xres;
-+ SiS_Pr->CP_HSyncStart[i] = xres + (buffer[base+8] | ((buffer[base+11] & 0xc0) << 2));
-+ SiS_Pr->CP_HSyncEnd[i] = SiS_Pr->CP_HSyncStart[i] + (buffer[base+9] | ((buffer[base+11] & 0x30) << 4));
-+ SiS_Pr->CP_HTotal[i] = xres + (buffer[base+3] | ((buffer[base+4] & 0x0f) << 8));
-+ SiS_Pr->CP_HBlankStart[i] = xres + 1;
-+ SiS_Pr->CP_HBlankEnd[i] = SiS_Pr->CP_HTotal[i];
-+
-+ SiS_Pr->CP_VDisplay[i] = yres;
-+ SiS_Pr->CP_VSyncStart[i] = yres + (((buffer[base+10] & 0xf0) >> 4) | ((buffer[base+11] & 0x0c) << 2));
-+ SiS_Pr->CP_VSyncEnd[i] = SiS_Pr->CP_VSyncStart[i] + ((buffer[base+10] & 0x0f) | ((buffer[base+11] & 0x03) << 4));
-+ SiS_Pr->CP_VTotal[i] = yres + (buffer[base+6] | ((buffer[base+7] & 0x0f) << 8));
-+ SiS_Pr->CP_VBlankStart[i] = yres + 1;
-+ SiS_Pr->CP_VBlankEnd[i] = SiS_Pr->CP_VTotal[i];
-+
-+ SiS_Pr->CP_Clock[i] = (buffer[base] | (buffer[base+1] << 8)) * 10;
-+
-+ SiS_Pr->CP_DataValid[i] = TRUE;
-+
-+ /* Sort out invalid timings, interlace and too high clocks */
-+ if((SiS_Pr->CP_HDisplay[i] > SiS_Pr->CP_HSyncStart[i]) ||
-+ (SiS_Pr->CP_HDisplay[i] >= SiS_Pr->CP_HSyncEnd[i]) ||
-+ (SiS_Pr->CP_HDisplay[i] >= SiS_Pr->CP_HTotal[i]) ||
-+ (SiS_Pr->CP_HSyncStart[i] >= SiS_Pr->CP_HSyncEnd[i]) ||
-+ (SiS_Pr->CP_HSyncStart[i] > SiS_Pr->CP_HTotal[i]) ||
-+ (SiS_Pr->CP_HSyncEnd[i] > SiS_Pr->CP_HTotal[i]) ||
-+ (SiS_Pr->CP_VDisplay[i] > SiS_Pr->CP_VSyncStart[i]) ||
-+ (SiS_Pr->CP_VDisplay[i] >= SiS_Pr->CP_VSyncEnd[i]) ||
-+ (SiS_Pr->CP_VDisplay[i] >= SiS_Pr->CP_VTotal[i]) ||
-+ (SiS_Pr->CP_VSyncStart[i] > SiS_Pr->CP_VSyncEnd[i]) ||
-+ (SiS_Pr->CP_VSyncStart[i] > SiS_Pr->CP_VTotal[i]) ||
-+ (SiS_Pr->CP_VSyncEnd[i] > SiS_Pr->CP_VTotal[i]) ||
-+ (SiS_Pr->CP_Clock[i] > 108000) ||
-+ (buffer[base+17] & 0x80)) {
-+
-+ SiS_Pr->CP_DataValid[i] = FALSE;
-+
-+ } else {
-+
-+ paneltype = Panel_Custom;
-+
-+ SiS_Pr->CP_HaveCustomData = TRUE;
-+
-+ if(xres > SiS_Pr->CP_MaxX) SiS_Pr->CP_MaxX = xres;
-+ if(yres > SiS_Pr->CP_MaxY) SiS_Pr->CP_MaxY = yres;
-+ if(SiS_Pr->CP_Clock[i] > SiS_Pr->CP_MaxClock) SiS_Pr->CP_MaxClock = SiS_Pr->CP_Clock[i];
-+
-+ SiS_Pr->CP_Vendor = buffer[9] | (buffer[8] << 8);
-+ SiS_Pr->CP_Product = buffer[10] | (buffer[11] << 8);
-+
-+ /* We must assume the panel can scale, since we have
-+ * no scaling data
-+ */
-+ checkexpand = FALSE;
-+ cr37 |= 0x10;
-+
-+ /* Extract the sync polarisation information. This only works
-+ * if the Flags indicate a digital separate output.
-+ */
-+ if((buffer[base+17] & 0x18) == 0x18) {
-+ SiS_Pr->CP_HSync_P[i] = (buffer[base+17] & 0x02) ? TRUE : FALSE;
-+ SiS_Pr->CP_VSync_P[i] = (buffer[base+17] & 0x04) ? TRUE : FALSE;
-+ SiS_Pr->CP_SyncValid[i] = TRUE;
-+ if(!havesync) {
-+ cr37 |= ((((buffer[base+17] & 0x06) ^ 0x06) << 5) | 0x20);
-+ havesync = TRUE;
-+ }
-+ } else {
-+ SiS_Pr->CP_SyncValid[i] = FALSE;
-+ }
-+ }
-+ }
-+ }
-+ if(!havesync) {
-+ xf86DrvMsg(pSiS->pScrn->scrnIndex, X_WARNING,
-+ "CRT2: Unable to retrieve Sync polarity information\n");
-+ }
- }
--
-- if(checkexpand) {
-- /* If any of the Established low-res modes is supported, the
-+
-+ if(paneltype && checkexpand) {
-+ /* If any of the Established low-res modes is supported, the
- * panel can scale automatically. For 800x600 panels, we only
- * check the even lower ones.
- */
-- if(paneltype == Panel310_800x600) {
-+ if(paneltype == Panel_800x600) {
- if(buffer[0x23] & 0xfc) cr37 |= 0x10;
- } else {
- if(buffer[0x23]) cr37 |= 0x10;
-@@ -10262,20 +10573,31 @@ SiS_SenseLCDDDC(SiS_Private *SiS_Pr, SIS
- buffer[0x41]);
- return 0;
- }
--
-- xres = buffer[0x76] | (buffer[0x77] << 8);
-- yres = buffer[0x78] | (buffer[0x79] << 8);
-+
-+ paneltype = Panel_Custom;
-+ SiS_Pr->CP_MaxX = xres = buffer[0x76] | (buffer[0x77] << 8);
-+ SiS_Pr->CP_MaxY = yres = buffer[0x78] | (buffer[0x79] << 8);
- switch(xres) {
- case 800:
- if(yres == 600) {
-- paneltype = Panel310_800x600;
-+ paneltype = Panel_800x600;
- checkexpand = TRUE;
- }
- break;
- case 1024:
- if(yres == 768) {
-- paneltype = Panel310_1024x768;
-- checkexpand = FALSE; /* Bug at 640x480; we do the scaling ourselves */
-+ paneltype = Panel_1024x768;
-+ checkexpand = TRUE;
-+ }
-+ break;
-+ case 1152:
-+ if(yres == 768) {
-+ if(pSiS->VGAEngine == SIS_300_VGA) {
-+ paneltype = Panel300_1152x768;
-+ } else {
-+ paneltype = Panel310_1152x768;
-+ }
-+ checkexpand = TRUE;
- }
- break;
- case 1280:
-@@ -10286,45 +10608,46 @@ SiS_SenseLCDDDC(SiS_Private *SiS_Pr, SIS
- paneltype = Panel300_1280x960;
- }
- } else if(yres == 1024) {
-- paneltype = Panel310_1280x1024;
-+ paneltype = Panel_1280x1024;
- checkexpand = TRUE;
-- } else if(pSiS->VGAEngine == SIS_315_VGA) {
-- if(yres == 768) {
-- paneltype = Panel310_1280x768; /* Panel size 1280x768 not supported yet */
-- checkexpand = TRUE;
-- }
-- }
-+ } else if(yres == 768) {
-+ paneltype = Panel_1280x768;
-+ checkexpand = FALSE;
-+ cr37 |= 0x10;
-+ }
- break;
- case 1400:
- if(pSiS->VGAEngine == SIS_315_VGA) {
- if(yres == 1050) {
- paneltype = Panel310_1400x1050;
- checkexpand = TRUE;
-- }
-+ }
- }
- break;
-+#if 0 /* Treat this one as custom since we have no timing data yet */
- case 1600:
- if(pSiS->VGAEngine == SIS_315_VGA) {
- if(yres == 1200) {
- paneltype = Panel310_1600x1200;
- checkexpand = TRUE;
-- }
-+ }
- }
- break;
-+#endif
- }
--
-+
- /* Determine if RGB18 or RGB24 */
- if(index) {
- if((buffer[index] == 0x20) || (buffer[index] == 0x34)) {
- cr37 |= 0x01;
- }
- }
--
-+
- if(checkexpand) {
- /* TODO - for now, we let the panel scale */
- cr37 |= 0x10;
- }
--
-+
- /* Now seek 4-Byte Timing codes and extract sync pol info */
- index = 0x80;
- if(buffer[0x7e] & 0x20) { /* skip Luminance Table (if provided) */
-@@ -10346,28 +10669,117 @@ SiS_SenseLCDDDC(SiS_Private *SiS_Pr, SIS
- if(buffer[myindex] == seekcode) {
- cr37 |= ((((buffer[myindex + 1] & 0x0c) ^ 0x0c) << 4) | 0x20);
- } else {
-- xf86DrvMsg(pSiS->pScrn->scrnIndex, X_WARNING,
-- "CRT2: Unable to retrieve Sync polarity information\n");
-+ xf86DrvMsg(pSiS->pScrn->scrnIndex, X_WARNING,
-+ "CRT2: Unable to retrieve Sync polarity information\n");
- }
- } else {
-- xf86DrvMsg(pSiS->pScrn->scrnIndex, X_WARNING,
-- "CRT2: Unable to retrieve Sync polarity information\n");
-+ xf86DrvMsg(pSiS->pScrn->scrnIndex, X_WARNING,
-+ "CRT2: Unable to retrieve Sync polarity information\n");
-+ }
-+
-+ /* Now seek the detailed timing descriptions for custom panels */
-+ if(paneltype == Panel_Custom) {
-+ index += (numcodes * 4);
-+ numcodes = buffer[0x7f] & 0x07;
-+ for(i=0; i<numcodes; i++) {
-+ xres = buffer[index+2] | ((buffer[index+4] & 0xf0) << 4);
-+ yres = buffer[index+5] | ((buffer[index+7] & 0xf0) << 4);
-+
-+ SiS_Pr->CP_HDisplay[i] = xres;
-+ SiS_Pr->CP_HSyncStart[i] = xres + (buffer[index+8] | ((buffer[index+11] & 0xc0) << 2));
-+ SiS_Pr->CP_HSyncEnd[i] = SiS_Pr->CP_HSyncStart[i] + (buffer[index+9] | ((buffer[index+11] & 0x30) << 4));
-+ SiS_Pr->CP_HTotal[i] = xres + (buffer[index+3] | ((buffer[index+4] & 0x0f) << 8));
-+ SiS_Pr->CP_HBlankStart[i] = xres + 1;
-+ SiS_Pr->CP_HBlankEnd[i] = SiS_Pr->CP_HTotal[i];
-+
-+ SiS_Pr->CP_VDisplay[i] = yres;
-+ SiS_Pr->CP_VSyncStart[i] = yres + (((buffer[index+10] & 0xf0) >> 4) | ((buffer[index+11] & 0x0c) << 2));
-+ SiS_Pr->CP_VSyncEnd[i] = SiS_Pr->CP_VSyncStart[i] + ((buffer[index+10] & 0x0f) | ((buffer[index+11] & 0x03) << 4));
-+ SiS_Pr->CP_VTotal[i] = yres + (buffer[index+6] | ((buffer[index+7] & 0x0f) << 8));
-+ SiS_Pr->CP_VBlankStart[i] = yres + 1;
-+ SiS_Pr->CP_VBlankEnd[i] = SiS_Pr->CP_VTotal[i];
-+
-+ SiS_Pr->CP_Clock[i] = (buffer[index] | (buffer[index+1] << 8)) * 10;
-+
-+ SiS_Pr->CP_DataValid[i] = TRUE;
-+
-+ if((SiS_Pr->CP_HDisplay[i] > SiS_Pr->CP_HSyncStart[i]) ||
-+ (SiS_Pr->CP_HDisplay[i] >= SiS_Pr->CP_HSyncEnd[i]) ||
-+ (SiS_Pr->CP_HDisplay[i] >= SiS_Pr->CP_HTotal[i]) ||
-+ (SiS_Pr->CP_HSyncStart[i] >= SiS_Pr->CP_HSyncEnd[i]) ||
-+ (SiS_Pr->CP_HSyncStart[i] > SiS_Pr->CP_HTotal[i]) ||
-+ (SiS_Pr->CP_HSyncEnd[i] > SiS_Pr->CP_HTotal[i]) ||
-+ (SiS_Pr->CP_VDisplay[i] > SiS_Pr->CP_VSyncStart[i]) ||
-+ (SiS_Pr->CP_VDisplay[i] >= SiS_Pr->CP_VSyncEnd[i]) ||
-+ (SiS_Pr->CP_VDisplay[i] >= SiS_Pr->CP_VTotal[i]) ||
-+ (SiS_Pr->CP_VSyncStart[i] > SiS_Pr->CP_VSyncEnd[i]) ||
-+ (SiS_Pr->CP_VSyncStart[i] > SiS_Pr->CP_VTotal[i]) ||
-+ (SiS_Pr->CP_VSyncEnd[i] > SiS_Pr->CP_VTotal[i]) ||
-+ (SiS_Pr->CP_Clock[i] > 108000) ||
-+ (buffer[index + 17] & 0x80)) {
-+
-+ SiS_Pr->CP_DataValid[i] = FALSE;
-+
-+ } else {
-+
-+ SiS_Pr->CP_HaveCustomData = TRUE;
-+
-+ if(SiS_Pr->CP_Clock[i] > SiS_Pr->CP_MaxClock) SiS_Pr->CP_MaxClock = SiS_Pr->CP_Clock[i];
-+
-+ SiS_Pr->CP_HSync_P[i] = (buffer[index + 17] & 0x02) ? TRUE : FALSE;
-+ SiS_Pr->CP_VSync_P[i] = (buffer[index + 17] & 0x04) ? TRUE : FALSE;
-+ SiS_Pr->CP_SyncValid[i] = TRUE;
-+
-+ SiS_Pr->CP_Vendor = buffer[2] | (buffer[1] << 8);
-+ SiS_Pr->CP_Product = buffer[3] | (buffer[4] << 8);
-+
-+ /* We must assume the panel can scale, since we have
-+ * no scaling data
-+ */
-+ cr37 |= 0x10;
-+
-+ }
-+ }
-+
- }
-
- break;
--
-+
- }
--
-+
- /* 1280x960 panels are always RGB24, unable to scale and use
- * high active sync polarity
- */
- if(pSiS->VGAEngine == SIS_315_VGA) {
-- if(paneltype == Panel310_1280x960) cr37 &= 0x0e;
-+ if(paneltype == Panel310_1280x960) cr37 &= 0x0e;
- } else {
-- if(paneltype == Panel300_1280x960) cr37 &= 0x0e;
-+ if(paneltype == Panel300_1280x960) cr37 &= 0x0e;
- }
--
-+
-+ for(i = 0; i < 7; i++) {
-+ if(SiS_Pr->CP_DataValid[i]) {
-+ xf86DrvMsg(pSiS->pScrn->scrnIndex, X_PROBED,
-+ "Non-standard LCD timing data no. %d:\n", i);
-+ xf86DrvMsg(pSiS->pScrn->scrnIndex, X_PROBED,
-+ " HDisplay %d HSync %d HSyncEnd %d HTotal %d\n",
-+ SiS_Pr->CP_HDisplay[i], SiS_Pr->CP_HSyncStart[i],
-+ SiS_Pr->CP_HSyncEnd[i], SiS_Pr->CP_HTotal[i]);
-+ xf86DrvMsg(pSiS->pScrn->scrnIndex, X_PROBED,
-+ " VDisplay %d VSync %d VSyncEnd %d VTotal %d\n",
-+ SiS_Pr->CP_VDisplay[i], SiS_Pr->CP_VSyncStart[i],
-+ SiS_Pr->CP_VSyncEnd[i], SiS_Pr->CP_VTotal[i]);
-+ xf86DrvMsg(pSiS->pScrn->scrnIndex, X_PROBED,
-+ " Pixel clock: %3.3fMhz\n", (float)SiS_Pr->CP_Clock[i] / 1000);
-+ xf86DrvMsg(pSiS->pScrn->scrnIndex, X_INFO,
-+ " To use this, add \"%dx%d\" to the list of Modes in the Display section\n",
-+ SiS_Pr->CP_HDisplay[i],
-+ SiS_Pr->CP_VDisplay[i]);
-+ }
-+ }
-+
- if(paneltype) {
-+ if(!SiS_Pr->CP_PreferredX) SiS_Pr->CP_PreferredX = SiS_Pr->CP_MaxX;
-+ if(!SiS_Pr->CP_PreferredY) SiS_Pr->CP_PreferredY = SiS_Pr->CP_MaxY;
- cr37 &= 0xf1;
- cr37 |= 0x02; /* SiS301 */
- SiS_SetRegANDOR(SiS_Pr->SiS_P3d4,0x36,0xf0,paneltype);
-@@ -10392,7 +10804,7 @@ SiS_SenseVGA2DDC(SiS_Private *SiS_Pr, SI
- if(!(pSiS->VBFlags & (VB_301|VB_301B|VB_302B))) return 0;
- /* if(pSiS->VBFlags & VB_30xBDH) return 0; */
-
-- if(SiS_InitDDCRegs(SiS_Pr, pSiS, 2, 0, FALSE) == 0xFFFF) return 0;
-+ if(SiS_InitDDCRegs(SiS_Pr, pSiS->VBFlags, pSiS->VGAEngine, 2, 0, FALSE) == 0xFFFF) return 0;
-
- SiS_Pr->SiS_DDC_SecAddr = 0x00;
-
-@@ -10416,7 +10828,7 @@ SiS_SenseVGA2DDC(SiS_Private *SiS_Pr, SI
- /* Read the entire EDID */
- retry = 2;
- do {
-- if(SiS_ReadDDC(SiS_Pr, pSiS, DDCdatatype, buffer)) {
-+ if(SiS_ReadDDC(SiS_Pr, DDCdatatype, buffer)) {
- xf86DrvMsg(pSiS->pScrn->scrnIndex, X_INFO,
- "CRT2: DDC read failed (attempt %d), %s\n",
- (3-retry), (retry == 1) ? "giving up" : "retrying");
-@@ -10435,6 +10847,8 @@ SiS_SenseVGA2DDC(SiS_Private *SiS_Pr, SI
- "CRT2: Attached display expects digital input\n");
- return 0;
- }
-+ SiS_Pr->CP_Vendor = buffer[9] | (buffer[8] << 8);
-+ SiS_Pr->CP_Product = buffer[10] | (buffer[11] << 8);
- foundcrt = TRUE;
- break;
- case 3:
-@@ -10448,198 +10862,19 @@ SiS_SenseVGA2DDC(SiS_Private *SiS_Pr, SI
- buffer[0x41]);
- return 0;
- }
-+ SiS_Pr->CP_Vendor = buffer[2] | (buffer[1] << 8);
-+ SiS_Pr->CP_Product = buffer[3] | (buffer[4] << 8);
- foundcrt = TRUE;
-- break;
-+ break;
- }
--
-+
- if(foundcrt) {
- SiS_SetRegOR(SiS_Pr->SiS_P3d4,0x32,0x10);
- }
- return(0);
- }
-
--#if 0
-- /* ----- */
--USHORT
--SiS_SenseLCDDDC(SiS_Private *SiS_Pr, SISPtr pSiS)
--{
-- USHORT DDCdatatype, paneltype, flag;
-- unsigned char cr36=0, cr37=0;
-- unsigned char tempal, tempah, tempbl, tempbh;
-- USHORT tempax, tempbx, tempcx, push1, push2, push3;
-- unsigned char addresstable[] = { 0x00, 0x22, 0x30, 0x40 };
-- int i;
-- unsigned char buffer[256];
--
-- if(pSiS->VGAEngine != SIS_315_VGA) return 0xFFFF;
-- if(!(pSiS->VBFlags & (VB_301B|VB_302B))) return 0xFFFF;
--
-- if(SiS_InitDDCRegs(SiS_Pr, pSiS, 1, 0, FALSE) == 0xFFFF) return 0xFFFF;
--
-- flag = SiS_ProbeDDC(SiS_Pr);
-- if(flag & 0x02) {
-- SiS_Pr->SiS_DDC_DeviceAddr = 0xa0; /* EDID V1 */
-- DDCdatatype = 1;
-- SiS_Pr->SiS_DDC_SecAddr = 0x3a;
-- } else if(flag & 0x08) {
-- SiS_Pr->SiS_DDC_DeviceAddr = 0xa2; /* EDID V2 (P&D-D Monitor) */
-- DDCdatatype = 3;
-- SiS_Pr->SiS_DDC_SecAddr = 0x76;
-- } else if(flag & 0x10) {
-- SiS_Pr->SiS_DDC_DeviceAddr = 0xa6; /* EDID V2 (FP) */
-- DDCdatatype = 4;
-- SiS_Pr->SiS_DDC_SecAddr = 0x76;
-- } else return 0xFFFF;
--
--
-- SiS_ReadLCDDDC(SiS_Pr, 4, buffer);
-- tempbl = buffer[0]; /* 3a - 76 */
-- tempbh = buffer[1]; /* 3b - 77 */
--
-- if(SiS_Pr->SiS_DDC_DeviceAddr == 0xa0) {
--
-- /* Read and analyze EDID V1 (res) */
--
-- tempah = 0x02; /* 1024x768 by default */
-- tempbl &= 0xf0;
-- if(tempbl != 0x40) {
-- tempah = 0x03; /* 1280x1024 by default */
-- if(tempbl == 0x50) {
-- if(!tempbh) {
-- tempbh = buffer[3] & 0xf0;
-- if(tempbh == 0x30) {
-- SiS_Pr->SiS_DDC_DeviceAddr = 0xa0;
-- SiS_Pr->SiS_DDC_SecAddr = 0x23;
-- SiS_ReadLCDDDC(SiS_Pr, 2, buffer);
-- tempbl = buffer[0]; /* 0x23 */
-- tempbh = buffer[1]; /* 0x24 */
-- if(tempbl) cr37 |= 0x10;
-- tempah = 0x0a; /* 1280x768 */
-- }
-- if(tempbh == 0x40) {
-- SiS_Pr->SiS_DDC_DeviceAddr = 0xa0;
-- SiS_Pr->SiS_DDC_SecAddr = 0x23;
-- SiS_ReadLCDDDC(SiS_Pr, 2, buffer);
-- tempbl = buffer[0]; /* 0x23 */
-- tempbh = buffer[1]; /* 0x24 */
-- if(tempbl) cr37 |= 0x10;
-- tempah = 0x03; /* 1280x1024 */
-- }
-- tempbh = 0x00;
-- }
-- }
-- if(tempbh == 0x00) goto cr36ready;
-- tempah = 0x07; /* 1280x960 */
-- if(tempbh == 0xc0) goto cr36ready;
-- }
-- SiS_Pr->SiS_DDC_DeviceAddr = 0xa0;
-- SiS_Pr->SiS_DDC_SecAddr = 0x18; /* feature support */
-- SiS_ReadLCDDDC(SiS_Pr, 2, buffer);
-- tempbl = buffer[0];
-- tempbh = buffer[1];
-- if(tempbl & 0x02) goto cr36ready;
-- SiS_Pr->SiS_DDC_DeviceAddr = 0xa0;
-- SiS_Pr->SiS_DDC_SecAddr = 0x23; /* Established Timings */
-- SiS_ReadLCDDDC(SiS_Pr, 2, buffer);
-- tempbl = buffer[0];
-- tempbh = buffer[1];
-- tempah = 0x03;
-- if(!(tempbh & 0x01)) tempah = 0x02;
-- if(!tempbl) cr37 |= 0x10;
--
-- } else {
--
-- /* Read and analyze EDID V2 (res) */
--
-- tempah = 0x02;
-- tempbx = tempbl | (tempbh << 8);
-- if(tempbx != 1024) tempah = 0x03;
--
-- }
--
--cr36ready:
-- cr36 = tempah;
--
-- if(SiS_Pr->SiS_DDC_DeviceAddr == 0xa0) {
--
-- /* Read and analyze EDID V1 (pol) */
--
-- SiS_Pr->SiS_DDC_SecAddr = 0x47;
-- SiS_ReadLCDDDC(SiS_Pr, 2, buffer);
-- tempah = buffer[0];
-- tempah &= 0x06;
-- tempah ^= 0x06;
-- tempah <<= 5;
-- tempah |= 0x20;
-- cr37 &= 0x1f;
-- cr37 |= tempah;
-- if((cr36 & 0x07) == 0x07) cr37 &= 0x0e;
--
-- } else {
--
-- /* Read and analyze EDID V2 (depth, pol) */
--
-- push1 = tempah;
-- SiS_Pr->SiS_DDC_SecAddr = 0x45;
-- SiS_ReadLCDDDC(SiS_Pr, 2, buffer);
-- tempah = 0x01;
-- if((buffer[0] != 0x20) && (buffer[0] != 0x34)) { /* RGB18 or 24? */
-- tempah = 0x00;
-- }
-- cr37 &= 0xfe;
-- cr37 |= tempah;
--
-- SiS_Pr->SiS_DDC_SecAddr = 0x7e;
-- SiS_ReadLCDDDC(SiS_Pr, 2, buffer);
-- tempax = (USHORT)(buffer[0] | (buffer[1] << 8));
-- push2 = tempax;
-- tempax &= 0x0003;
-- tempax *= 0x1b;
-- push3 = tempax;
-- tempax = (USHORT)buffer[0];
-- tempax &= 0x001c;
-- tempax >>= 2;
-- tempax *= 8;
-- tempbx = push3;
-- tempbx += tempax;
-- if(buffer[0] & 0x20) { /* Luminance table provided? */
-- SiS_Pr->SiS_DDC_SecAddr = 0x80;
-- SiS_ReadLCDDDC(SiS_Pr, 2, buffer);
-- tempax = buffer[0] | (buffer[1] << 8);
-- tempax &= 0x1f;
-- if(buffer[0] & 0x70) tempax <<= 1;
-- tempax++;
-- tempbx += tempax; /* yes -> skip it */
-- }
-- tempcx = push2;
-- tempax = push1 << 8;
-- tempbx = (tempbx & 0xff00) | (((tempbx & 0x00ff) + 0x80) & 0x00ff);
-- if(tempcx & 0xf800) {
-- tempal = addresstable[((tempax & 0xff00) >> 8)];
-- tempcx &= 0xf8ff;
-- tempcx >>= 11;
-- for(i=0; i<tempcx; i++) {
-- SiS_Pr->SiS_DDC_SecAddr = (tempbx & 0x00ff);
-- SiS_ReadLCDDDC(SiS_Pr, 2, buffer);
-- tempbx += 0x04;
-- if(buffer[0] == tempal) break;
-- }
-- tempah = buffer[1];
-- tempah &= 0x0c;
-- tempah ^= 0x0c;
-- tempah <<= 4;
-- tempah |= 0x20;
-- cr37 &= 0x1f;
-- cr37 |= tempah;
-- if((cr36 & 0x07) == 0x07) cr37 &= 0x0e;
-- }
-- }
-- xf86DrvMsg(0, X_INFO, "DDC: cr36 = 0x%02x, cr37 = 0x%02x\n", cr36, cr37);
-- return 0;
--}
--#endif
--
--/* TW: Generic I2C functions (compliant to i2c library) */
-+/* Generic I2C functions (compliant to i2c library) */
-
- #if 0
- USHORT
-@@ -10684,7 +10919,7 @@ SiS_SetCH70xxANDOR(SiS_Private *SiS_Pr,
- SiS_SetCH70xx(SiS_Pr,tempbl);
- }
-
--/* TW: Generic I2C functions for Chrontel --------- */
-+/* Generic I2C functions for Chrontel --------- */
-
- void
- SiS_SetSwitchDDC2(SiS_Private *SiS_Pr)
-@@ -10698,37 +10933,37 @@ SiS_SetSwitchDDC2(SiS_Private *SiS_Pr)
- SiS_WaitRetraceDDC(SiS_Pr);
- }
-
--/* TW: Set I2C start condition */
--/* TW: This is done by a SD high-to-low transition while SC is high */
-+/* Set I2C start condition */
-+/* This is done by a SD high-to-low transition while SC is high */
- USHORT
- SiS_SetStart(SiS_Private *SiS_Pr)
- {
-- if(SiS_SetSCLKLow(SiS_Pr)) return 0xFFFF; /* TW: (SC->low) */
-+ if(SiS_SetSCLKLow(SiS_Pr)) return 0xFFFF; /* (SC->low) */
- SiS_SetRegANDOR(SiS_Pr->SiS_DDC_Port,SiS_Pr->SiS_DDC_Index,
-- ~SiS_Pr->SiS_DDC_Data,SiS_Pr->SiS_DDC_Data); /* TW: SD->high */
-- if(SiS_SetSCLKHigh(SiS_Pr)) return 0xFFFF; /* TW: SC->high */
-+ ~SiS_Pr->SiS_DDC_Data,SiS_Pr->SiS_DDC_Data); /* SD->high */
-+ if(SiS_SetSCLKHigh(SiS_Pr)) return 0xFFFF; /* SC->high */
- SiS_SetRegANDOR(SiS_Pr->SiS_DDC_Port,SiS_Pr->SiS_DDC_Index,
-- ~SiS_Pr->SiS_DDC_Data,0x00); /* TW: SD->low = start condition */
-- if(SiS_SetSCLKHigh(SiS_Pr)) return 0xFFFF; /* TW: (SC->low) */
-+ ~SiS_Pr->SiS_DDC_Data,0x00); /* SD->low = start condition */
-+ if(SiS_SetSCLKHigh(SiS_Pr)) return 0xFFFF; /* (SC->low) */
- return 0;
- }
-
--/* TW: Set I2C stop condition */
--/* TW: This is done by a SD low-to-high transition while SC is high */
-+/* Set I2C stop condition */
-+/* This is done by a SD low-to-high transition while SC is high */
- USHORT
- SiS_SetStop(SiS_Private *SiS_Pr)
- {
-- if(SiS_SetSCLKLow(SiS_Pr)) return 0xFFFF; /* TW: (SC->low) */
-+ if(SiS_SetSCLKLow(SiS_Pr)) return 0xFFFF; /* (SC->low) */
- SiS_SetRegANDOR(SiS_Pr->SiS_DDC_Port,SiS_Pr->SiS_DDC_Index,
-- ~SiS_Pr->SiS_DDC_Data,0x00); /* TW: SD->low */
-- if(SiS_SetSCLKHigh(SiS_Pr)) return 0xFFFF; /* TW: SC->high */
-+ ~SiS_Pr->SiS_DDC_Data,0x00); /* SD->low */
-+ if(SiS_SetSCLKHigh(SiS_Pr)) return 0xFFFF; /* SC->high */
- SiS_SetRegANDOR(SiS_Pr->SiS_DDC_Port,SiS_Pr->SiS_DDC_Index,
-- ~SiS_Pr->SiS_DDC_Data,SiS_Pr->SiS_DDC_Data); /* TW: SD->high = stop condition */
-- if(SiS_SetSCLKHigh(SiS_Pr)) return 0xFFFF; /* TW: (SC->high) */
-+ ~SiS_Pr->SiS_DDC_Data,SiS_Pr->SiS_DDC_Data); /* SD->high = stop condition */
-+ if(SiS_SetSCLKHigh(SiS_Pr)) return 0xFFFF; /* (SC->high) */
- return 0;
- }
-
--/* TW: Write 8 bits of data */
-+/* Write 8 bits of data */
- USHORT
- SiS_WriteDDC2Data(SiS_Private *SiS_Pr, USHORT tempax)
- {
-@@ -10736,18 +10971,18 @@ SiS_WriteDDC2Data(SiS_Private *SiS_Pr, U
-
- flag=0x80;
- for(i=0;i<8;i++) {
-- SiS_SetSCLKLow(SiS_Pr); /* TW: SC->low */
-+ SiS_SetSCLKLow(SiS_Pr); /* SC->low */
- if(tempax & flag) {
- SiS_SetRegANDOR(SiS_Pr->SiS_DDC_Port,SiS_Pr->SiS_DDC_Index,
-- ~SiS_Pr->SiS_DDC_Data,SiS_Pr->SiS_DDC_Data); /* TW: Write bit (1) to SD */
-+ ~SiS_Pr->SiS_DDC_Data,SiS_Pr->SiS_DDC_Data); /* Write bit (1) to SD */
- } else {
- SiS_SetRegANDOR(SiS_Pr->SiS_DDC_Port,SiS_Pr->SiS_DDC_Index,
-- ~SiS_Pr->SiS_DDC_Data,0x00); /* TW: Write bit (0) to SD */
-+ ~SiS_Pr->SiS_DDC_Data,0x00); /* Write bit (0) to SD */
- }
-- SiS_SetSCLKHigh(SiS_Pr); /* TW: SC->high */
-+ SiS_SetSCLKHigh(SiS_Pr); /* SC->high */
- flag >>= 1;
- }
-- temp = SiS_CheckACK(SiS_Pr); /* TW: Check acknowledge */
-+ temp = SiS_CheckACK(SiS_Pr); /* Check acknowledge */
- return(temp);
- }
-
-@@ -10808,27 +11043,27 @@ SiS_DDC2Delay(SiS_Private *SiS_Pr, USHOR
- }
- }
-
--/* TW: Check I2C acknowledge */
-+/* Check I2C acknowledge */
- /* Returns 0 if ack ok, non-0 if ack not ok */
- USHORT
- SiS_CheckACK(SiS_Private *SiS_Pr)
- {
- USHORT tempah;
-
-- SiS_SetSCLKLow(SiS_Pr); /* TW: (SC->low) */
-+ SiS_SetSCLKLow(SiS_Pr); /* (SC->low) */
- SiS_SetRegANDOR(SiS_Pr->SiS_DDC_Port,SiS_Pr->SiS_DDC_Index,
-- ~SiS_Pr->SiS_DDC_Data,SiS_Pr->SiS_DDC_Data); /* TW: (SD->high) */
-- SiS_SetSCLKHigh(SiS_Pr); /* TW: SC->high = clock impulse for ack */
-- tempah = SiS_GetReg1(SiS_Pr->SiS_DDC_Port,SiS_Pr->SiS_DDC_Index);/* TW: Read SD */
-- SiS_SetSCLKLow(SiS_Pr); /* TW: SC->low = end of clock impulse */
-- if(tempah & SiS_Pr->SiS_DDC_Data) return(1); /* TW: Ack OK if bit = 0 */
-+ ~SiS_Pr->SiS_DDC_Data,SiS_Pr->SiS_DDC_Data); /* (SD->high) */
-+ SiS_SetSCLKHigh(SiS_Pr); /* SC->high = clock impulse for ack */
-+ tempah = SiS_GetReg1(SiS_Pr->SiS_DDC_Port,SiS_Pr->SiS_DDC_Index);/* Read SD */
-+ SiS_SetSCLKLow(SiS_Pr); /* SC->low = end of clock impulse */
-+ if(tempah & SiS_Pr->SiS_DDC_Data) return(1); /* Ack OK if bit = 0 */
- else return(0);
- }
-
--/* TW: End of I2C functions ----------------------- */
-+/* End of I2C functions ----------------------- */
-
-
--/* =============== SiS 310/325/330 O.E.M. ================= */
-+/* =============== SiS 315/330 O.E.M. ================= */
-
- #ifdef SIS315H
-
-@@ -10838,11 +11073,11 @@ GetRAMDACromptr(SiS_Private *SiS_Pr, PSI
- USHORT romptr;
-
- if(HwDeviceExtension->jChipType < SIS_330) {
-- romptr = ROMAddr[0x128] | (ROMAddr[0x129] << 8);
-+ romptr = ROMAddr[0x128] | (ROMAddr[0x129] << 8);
- if(SiS_Pr->SiS_VBType & VB_SIS301B302B)
- romptr = ROMAddr[0x12a] | (ROMAddr[0x12b] << 8);
- } else {
-- romptr = ROMAddr[0x1a8] | (ROMAddr[0x1a9] << 8);
-+ romptr = ROMAddr[0x1a8] | (ROMAddr[0x1a9] << 8);
- if(SiS_Pr->SiS_VBType & VB_SIS301B302B)
- romptr = ROMAddr[0x1aa] | (ROMAddr[0x1ab] << 8);
- }
-@@ -10855,11 +11090,11 @@ GetLCDromptr(SiS_Private *SiS_Pr, PSIS_H
- USHORT romptr;
-
- if(HwDeviceExtension->jChipType < SIS_330) {
-- romptr = ROMAddr[0x120] | (ROMAddr[0x121] << 8);
-+ romptr = ROMAddr[0x120] | (ROMAddr[0x121] << 8);
- if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV)
- romptr = ROMAddr[0x122] | (ROMAddr[0x123] << 8);
- } else {
-- romptr = ROMAddr[0x1a0] | (ROMAddr[0x1a1] << 8);
-+ romptr = ROMAddr[0x1a0] | (ROMAddr[0x1a1] << 8);
- if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV)
- romptr = ROMAddr[0x1a2] | (ROMAddr[0x1a3] << 8);
- }
-@@ -10884,10 +11119,22 @@ GetTVromptr(SiS_Private *SiS_Pr, PSIS_HW
- }
-
- static USHORT
--GetLCDPtrIndexBIOS(SiS_Private *SiS_Pr)
-+GetLCDPtrIndexBIOS(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension, USHORT BaseAddr)
- {
- USHORT index;
--
-+
-+ if((IS_SIS650) && (SiS_Pr->SiS_VBType & VB_SIS301LV302LV)) {
-+ if(!(SiS_IsNotM650or651(SiS_Pr,HwDeviceExtension, BaseAddr))) {
-+ if((index = SiS_GetReg1(SiS_Pr->SiS_P3d4,0x36) & 0xf0)) {
-+ index >>= 4;
-+ index *= 3;
-+ if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) index += 2;
-+ else if(!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) index++;
-+ return index;
-+ }
-+ }
-+ }
-+
- index = SiS_Pr->SiS_LCDResInfo & 0x0F;
- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050) index -= 5;
- else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1600x1200) index -= 6;
-@@ -10895,7 +11142,6 @@ GetLCDPtrIndexBIOS(SiS_Private *SiS_Pr)
- index *= 3;
- if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) index += 2;
- else if(!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) index++;
--
- return index;
- }
-
-@@ -10946,7 +11192,7 @@ SetDelayComp(SiS_Private *SiS_Pr, PSIS_H
- UCHAR *ROMAddr, USHORT ModeNo)
- {
- USHORT delay,index,myindex,temp,romptr=0;
--
-+
- if(SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC) { /* VGA */
-
- if((ROMAddr) && SiS_Pr->SiS_UseROM) {
-@@ -10971,8 +11217,10 @@ SetDelayComp(SiS_Private *SiS_Pr, PSIS_H
- }
-
- } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) { /* LCD */
-+
-+ if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_PanelCustom) return;
-
-- index = GetLCDPtrIndexBIOS(SiS_Pr);
-+ index = GetLCDPtrIndexBIOS(SiS_Pr, HwDeviceExtension, BaseAddr);
- myindex = GetLCDPtrIndex(SiS_Pr);
-
- if(IS_SIS650 && (SiS_Pr->SiS_VBType & VB_SIS301LV302LV)) { /* 650+30xLV */
-@@ -10980,7 +11228,7 @@ SetDelayComp(SiS_Private *SiS_Pr, PSIS_H
- if((ROMAddr) && SiS_Pr->SiS_UseROM) {
- #if 0 /* Always use the second pointer on 650; some BIOSes */
- /* still carry old 301 data at the first location */
-- romptr = ROMAddr[0x120] | (ROMAddr[0x121] << 8);
-+ romptr = ROMAddr[0x120] | (ROMAddr[0x121] << 8);
- if(SiS_Pr->SiS_VBType & VB_SIS302LV)
- #endif
- romptr = ROMAddr[0x122] | (ROMAddr[0x123] << 8);
-@@ -10994,13 +11242,13 @@ SetDelayComp(SiS_Private *SiS_Pr, PSIS_H
- #endif
- }
- } else {
-- delay = SiS310_LCDDelayCompensation_651301LV[myindex];
-+ delay = SiS310_LCDDelayCompensation_651301LV[myindex];
- if(SiS_Pr->SiS_VBType & VB_SIS302LV)
-- delay = SiS310_LCDDelayCompensation_651302LV[myindex];
-+ delay = SiS310_LCDDelayCompensation_651302LV[myindex];
- }
- } else {
- if((ROMAddr) && SiS_Pr->SiS_UseROM && /* 315, 330, 740, 650+301B */
-- (SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel1280x1024)) {
-+ (SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel1280x1024)) {
- romptr = GetLCDromptr(SiS_Pr, HwDeviceExtension, ROMAddr);
- if(!romptr) return;
- delay = ROMAddr[(romptr + index)];
-@@ -11008,7 +11256,7 @@ SetDelayComp(SiS_Private *SiS_Pr, PSIS_H
- delay = SiS310_LCDDelayCompensation_301[myindex];
- if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
- #if 0 /* This data is (like the one in the BIOS) wrong. */
-- if(IS_SIS650740) { /* V */
-+ if(IS_SIS550650740660) {
- delay = SiS310_LCDDelayCompensation_650301B[myindex];
- } else {
- #endif
-@@ -11088,14 +11336,16 @@ SetDelayComp(SiS_Private *SiS_Pr, PSIS_H
- } else {
- if(IS_SIS650 && (SiS_Pr->SiS_VBType & VB_SIS301LV302LV)) {
- temp = (SiS_GetReg1(SiS_Pr->SiS_P3d4,0x36) & 0xf0) >> 4;
-- if(temp == 8) {
-+ if(temp == 8) { /* 1400x1050 BIOS */
- delay &= 0x0f;
- delay |= 0xb0;
- } else if(temp == 6) {
- delay &= 0x0f;
- delay |= 0xc0;
-+ } else if(temp > 7) { /* 1280x1024 BIOS */
-+ delay = 0x35;
- }
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x2D,delay); /* index 2D D[3:0] */
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x2D,delay);
- } else {
- SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2D,0xF0,delay);
- }
-@@ -11118,7 +11368,7 @@ SetAntiFlicker(SiS_Private *SiS_Pr, PSIS
-
- if(ROMAddr && SiS_Pr->SiS_UseROM) {
- romptr = ROMAddr[0x112] | (ROMAddr[0x113] << 8);
-- if(HwDeviceExtension->jChipType == SIS_330) {
-+ if(HwDeviceExtension->jChipType >= SIS_330) {
- romptr = ROMAddr[0x192] | (ROMAddr[0x193] << 8);
- }
- }
-@@ -11150,7 +11400,7 @@ SetEdgeEnhance(SiS_Private *SiS_Pr, PSIS
-
- if(ROMAddr && SiS_Pr->SiS_UseROM) {
- romptr = ROMAddr[0x124] | (ROMAddr[0x125] << 8);
-- if(HwDeviceExtension->jChipType == SIS_330) {
-+ if(HwDeviceExtension->jChipType >= SIS_330) {
- romptr = ROMAddr[0x1a4] | (ROMAddr[0x1a5] << 8);
- }
- }
-@@ -11198,7 +11448,7 @@ SetYFilter(SiS_Private *SiS_Pr, PSIS_HW_
-
- if(ROMAddr && SiS_Pr->SiS_UseROM) {
- OutputSelect = ROMAddr[0xf3];
-- if(HwDeviceExtension->jChipType == SIS_330) {
-+ if(HwDeviceExtension->jChipType >= SIS_330) {
- OutputSelect = ROMAddr[0x11b];
- }
- }
-@@ -11262,17 +11512,17 @@ SetPhaseIncr(SiS_Private *SiS_Pr, PSIS_H
- */
- if((ROMAddr) && SiS_Pr->SiS_UseROM) {
- romptr = ROMAddr[0x116] | (ROMAddr[0x117] << 8);
-- if(HwDeviceExtension->jChipType == SIS_330) {
-+ if(HwDeviceExtension->jChipType >= SIS_330) {
- romptr = ROMAddr[0x196] | (ROMAddr[0x197] << 8);
- }
- if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
- romptr = ROMAddr[0x11c] | (ROMAddr[0x11d] << 8);
-- if(HwDeviceExtension->jChipType == SIS_330) {
-+ if(HwDeviceExtension->jChipType >= SIS_330) {
- romptr = ROMAddr[0x19c] | (ROMAddr[0x19d] << 8);
- }
- if((SiS_Pr->SiS_VBInfo & SetInSlaveMode) && (!(SiS_Pr->SiS_SetFlag & TVSimuMode))) {
- romptr = ROMAddr[0x116] | (ROMAddr[0x117] << 8);
-- if(HwDeviceExtension->jChipType == SIS_330) {
-+ if(HwDeviceExtension->jChipType >= SIS_330) {
- romptr = ROMAddr[0x196] | (ROMAddr[0x197] << 8);
- }
- }
-@@ -11296,19 +11546,19 @@ SetPhaseIncr(SiS_Private *SiS_Pr, PSIS_H
- }
- }
-
-- if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) { /* TW: 650/301LV: (VB_SIS301LV | VB_SIS302LV)) */
-+ if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) { /* 650/301LV: (VB_SIS301LV | VB_SIS302LV)) */
- if((!(SiS_Pr->SiS_VBInfo & SetPALTV)) && (ModeNo > 0x13)) {
-- if(resinfo == 6) {
-+ if(resinfo == SIS_RI_640x480) {
- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x31,0x21);
- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x32,0xf0);
- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x33,0xf5);
- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x34,0x7f);
-- } else if (resinfo == 7) {
-+ } else if (resinfo == SIS_RI_800x600) {
- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x31,0x21);
- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x32,0xf0);
- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x33,0xf5);
- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x34,0x7f);
-- } else if (resinfo == 8) {
-+ } else if (resinfo == SIS_RI_1024x768) {
- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x31,0x1e);
- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x32,0x8b);
- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x33,0xfb);
-@@ -11323,7 +11573,9 @@ SiS_OEM310Setting(SiS_Private *SiS_Pr, P
- UCHAR *ROMAddr,USHORT ModeNo,USHORT ModeIdIndex)
- {
- SetDelayComp(SiS_Pr,HwDeviceExtension,BaseAddr,ROMAddr,ModeNo);
-- /* TW: The TV functions are not for LVDS */
-+
-+ if(SiS_Pr->UseCustomMode) return;
-+
- if( (SiS_Pr->SiS_IF_DEF_LVDS == 0) && (SiS_Pr->SiS_VBInfo & SetCRT2ToTV) ) {
- SetAntiFlicker(SiS_Pr,HwDeviceExtension,BaseAddr,ROMAddr,ModeNo,ModeIdIndex);
- SetPhaseIncr(SiS_Pr,HwDeviceExtension,BaseAddr,ROMAddr,ModeNo,ModeIdIndex);
-@@ -11335,7 +11587,7 @@ SiS_OEM310Setting(SiS_Private *SiS_Pr, P
- }
-
- /* FinalizeLCD
-- * This finalizes some Part1 registers for the very panel used.
-+ * This finalizes some CRT2 registers for the very panel used.
- * If we have a backup if these registers, we use it; otherwise
- * we set the register according to most BIOSes. However, this
- * function looks quite different in every BIOS, so you better
-@@ -11350,6 +11602,9 @@ SiS_FinalizeLCD(SiS_Private *SiS_Pr, USH
-
- if(!(SiS_Pr->SiS_VBType & VB_SIS301LV302LV)) return;
-
-+ if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_PanelCustom) return;
-+ if(SiS_Pr->UseCustomMode) return;
-+
- if(ModeNo <= 0x13) {
- resinfo = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ResInfo;
- modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
-@@ -11358,20 +11613,31 @@ SiS_FinalizeLCD(SiS_Private *SiS_Pr, USH
- modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
- }
-
-+ if((SiS_GetReg1(SiS_Pr->SiS_P3d4, 0x5f) & 0xf0)) {
-+ SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x1e,0x03);
-+ }
-+
- if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) {
- SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x2a,0x00);
- SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x30,0x00);
- SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x34,0x10);
-+ } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) { /* For all panels? */
-+ SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x24,0xfc,0x01);
- }
- tempch = SiS_GetReg1(SiS_Pr->SiS_P3d4,0x36);
- tempch &= 0xf0;
- tempch >>= 4;
- if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
-+ if(tempch == 0x03) {
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x18,0x02);
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x1b,0x25);
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x1c,0x00);
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x1d,0x1b);
-+ }
- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050) {
- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x1f,0x76);
-- }
-- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) {
-+ } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) {
- if((SiS_Pr->Backup == TRUE) && (SiS_Pr->Backup_Mode == ModeNo)) {
- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x14,SiS_Pr->Backup_14);
- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x15,SiS_Pr->Backup_15);
-@@ -11387,14 +11653,14 @@ SiS_FinalizeLCD(SiS_Private *SiS_Pr, USH
- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x14,0x90);
- if(ModeNo <= 0x13) {
- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x18,0x11);
-- if((resinfo == 0) && (resinfo == 2)) return;
-+ if((resinfo == 0) || (resinfo == 2)) return;
- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x18,0x18);
-- if((resinfo == 1) && (resinfo == 3)) return;
-+ if((resinfo == 1) || (resinfo == 3)) return;
- }
- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x18,0x02);
-- if((ModeNo > 0x13) && (resinfo == 8)) {
-+ if((ModeNo > 0x13) && (resinfo == SIS_RI_1024x768)) {
- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x18,0x02); /* 1.10.7u */
--#if 0
-+#if 0
- tempbx = 806; /* 0x326 */ /* other older BIOSes */
- tempbx--;
- temp = tempbx & 0xff;
-@@ -11449,7 +11715,7 @@ SiS_FinalizeLCD(SiS_Private *SiS_Pr, USH
- tempbl = SiS_GetReg1(SiS_Pr->SiS_Part2Port,0x04);
- tempbx = (tempbh << 8) | tempbl;
- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) {
-- if((resinfo == 8) || (!(SiS_Pr->SiS_LCDInfo & DontExpandLCD))) {
-+ if((resinfo == SIS_RI_1024x768) || (!(SiS_Pr->SiS_LCDInfo & DontExpandLCD))) {
- if(SiS_Pr->SiS_SetFlag & LCDVESATiming) {
- tempbx = 770;
- } else {
-@@ -11477,67 +11743,56 @@ SiS_FinalizeLCD(SiS_Private *SiS_Pr, USH
- }
- }
-
--#if 0
--/* TW: New and checked from 650/301LV BIOS */
--/* This might clash with newer "FinalizeLCD()" function */
-+#endif
-+
-+
-+/* ================= SiS 300 O.E.M. ================== */
-+
-+#ifdef SIS300
-+
- void
--SiS_OEMLCD(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension,USHORT BaseAddr,
-- UCHAR *ROMAddr,USHORT ModeNo,USHORT ModeIdIndex)
-+SetOEMLCDData2(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension,USHORT BaseAddr,
-+ UCHAR *ROMAddr,USHORT ModeNo,USHORT ModeIdIndex, USHORT RefTabIndex)
- {
-- USHORT tempbx,tempah,tempbl,tempbh,tempcl;
--
-- if(!(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV)) return;
-+ USHORT crt2crtc=0, modeflag, myindex=0;
-+ UCHAR temp;
-+ int i;
-
-- if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
-- SiS_UnLockCRT2(SiS_Pr,HwDeviceExtension,BaseAddr);
-- tempbh = SiS_GetReg1(SiS_Pr->SiS_Part1Port,0x1a);
-- tempbh &= 0x38;
-- tempbh >>= 3;
-- tempbl = SiS_GetReg1(SiS_Pr->SiS_Part1Port,0x18);
-- tempbx = (tempbh << 8) | tempbl;
-- if(SiS_Pr->SiS_LCDTypeInfo == 1) tempbx -= 0x12;
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x18,tempbx & 0x00ff);
-- tempah = (tempbx & 0xff00) >> 8;
-- tempah &= 0x07;
-- tempah <<= 3;
-- SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x1a,0xc7,tempah);
-- tempah = SiS_GetReg1(SiS_Pr->SiS_Part1Port,0x19);
-- tempah &= 0x0f;
-- if(SiS_Pr->SiS_LCDTypeInfo == 1) tempah -= 2;
-- tempah &= 0x0f;
-- SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x19,0xF0,tempah);
-- tempah = SiS_GetReg1(SiS_Pr->SiS_Part1Port,0x14);
-- if(SiS_Pr->SiS_LCDTypeInfo == 1) tempah++;
-- tempah -= 8;
-- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x14,tempah);
-- } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
-- tempcl = tempbh = SiS_GetReg1(SiS_Pr->SiS_Part2Port,0x01);
-- tempbh &= 0x70;
-- tempbh >>= 4;
-- tempbl = SiS_GetReg1(SiS_Pr->SiS_Part2Port,0x04);
-- tempbx = (tempbh << 8) | tempbl;
-- if(SiS_Pr->SiS_LCDTypeInfo == 1) {
-- tempbx -= 0x1e;
-- tempcl &= 0x0f;
-- tempcl -= 4;
-- tempcl &= 0x0f;
-- }
-- tempbl = tempbx & 0x00ff;
-- tempbh = (tempbx >> 8) & 0x00ff;
-- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x04,tempbl);
-- tempbh <<= 4;
-- tempbh |= tempcl;
-- SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x01,0x80,tempbh);
-- }
--}
--#endif
-+ if(ModeNo <= 0x13) {
-+ modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
-+ crt2crtc = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC;
-+ } else {
-+ modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
-+ crt2crtc = SiS_Pr->SiS_RefIndex[RefTabIndex].Ext_CRT2CRTC;
-+ }
-
--#endif
-+ crt2crtc &= 0x3f;
-
-+ if(SiS_Pr->SiS_CustomT == CUT_BARCO1024) {
-+ SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x13,0xdf);
-+ }
-
--/* ================= SiS 300 O.E.M. ================== */
-+ if(SiS_Pr->SiS_CustomT == CUT_BARCO1366) {
-+ if(modeflag & HalfDCLK) myindex = 1;
-
--#ifdef SIS300
-+ if(SiS_LowModeStuff(SiS_Pr,ModeNo,HwDeviceExtension)) {
-+ for(i=0; i<7; i++) {
-+ if(barco_p1[myindex][crt2crtc][i][0]) {
-+ SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,
-+ barco_p1[myindex][crt2crtc][i][0],
-+ barco_p1[myindex][crt2crtc][i][2],
-+ barco_p1[myindex][crt2crtc][i][1]);
-+ }
-+ }
-+ }
-+ temp = SiS_GetReg1(SiS_Pr->SiS_Part1Port,0x00);
-+ if(temp & 0x80) {
-+ temp = SiS_GetReg1(SiS_Pr->SiS_Part1Port,0x18);
-+ temp++;
-+ SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x18,temp);
-+ }
-+ }
-+}
-
- #if 0 /* Not used */
- static USHORT
-@@ -11582,7 +11837,7 @@ GetOEMLCDPtr(SiS_Private *SiS_Pr, PSIS_H
-
- if(HwDeviceExtension->jChipType == SIS_300) {
-
-- tempbx = SiS_Pr->SiS_LCDResInfo - 2;
-+ tempbx = (SiS_GetReg1(SiS_Pr->SiS_P3d4,0x36) & 0x0f) - 2;
- if(!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) tempbx += 4;
- if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) {
- if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) tempbx += 3;
-@@ -11636,24 +11891,29 @@ SetOEMLCDDelay(SiS_Private *SiS_Pr, PSIS
- {
- USHORT index,temp,romptr=0;
-
-+ if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_PanelCustom) return;
-+
- if((ROMAddr) && SiS_Pr->SiS_UseROM) {
- if(!(ROMAddr[0x237] & 0x01)) return;
- if(!(ROMAddr[0x237] & 0x02)) return;
- romptr = ROMAddr[0x24b] | (ROMAddr[0x24c] << 8);
- }
-
-- /* TW: The Panel Compensation Delay should be set according to tables
-- * here. Unfortunately, various BIOS versions don't case about
-- * a uniform way using eg. ROM byte 0x220, but use different
-- * hard coded delays (0x04, 0x20, 0x18) in SetGroup1().
-- * Thus we don't set this if the user select a custom pdc or if
-- * we otherwise detected a valid pdc.
-+ /* The Panel Compensation Delay should be set according to tables
-+ * here. Unfortunately, various BIOS versions don't case about
-+ * a uniform way using eg. ROM byte 0x220, but use different
-+ * hard coded delays (0x04, 0x20, 0x18) in SetGroup1().
-+ * Thus we don't set this if the user select a custom pdc or if
-+ * we otherwise detected a valid pdc.
- */
- if(HwDeviceExtension->pdc) return;
-
- temp = GetOEMLCDPtr(SiS_Pr,HwDeviceExtension, ROMAddr, 0);
-
-- index = SiS_Pr->SiS_VBModeIDTable[ModeIdIndex].VB_LCDDelayIndex;
-+ if(SiS_Pr->UseCustomMode)
-+ index = 0;
-+ else
-+ index = SiS_Pr->SiS_VBModeIDTable[ModeIdIndex].VB_LCDDelayIndex;
-
- if(HwDeviceExtension->jChipType != SIS_300) {
- if(romptr) {
-@@ -11700,9 +11960,9 @@ SetOEMLCDDelay(SiS_Private *SiS_Pr, PSIS
-
- static void
- SetOEMLCDData(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension,USHORT BaseAddr,
-- UCHAR *ROMAddr,USHORT ModeNo,USHORT ModeIdIndex)
-+ UCHAR *ROMAddr,USHORT ModeNo,USHORT ModeIdIndex)
- {
--#if 0 /* TW: Unfinished; VData table missing */
-+#if 0 /* Unfinished; Data table missing */
- USHORT index,temp;
-
- if((ROMAddr) && SiS_Pr->SiS_UseROM) {
-@@ -11899,25 +12159,29 @@ SetOEMYFilter(SiS_Private *SiS_Pr, PSIS_
-
- void
- SiS_OEM300Setting(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension,
-- USHORT BaseAddr,UCHAR *ROMAddr,USHORT ModeNo)
-+ USHORT BaseAddr,UCHAR *ROMAddr,USHORT ModeNo,USHORT ModeIdIndex,
-+ USHORT RefTableIndex)
- {
-- USHORT ModeIdIndex;
-+ USHORT OEMModeIdIndex=0;
-
-- ModeIdIndex = SiS_SearchVBModeID(SiS_Pr,ROMAddr,&ModeNo);
-- if(!(ModeIdIndex)) return;
-+ if(!SiS_Pr->UseCustomMode) {
-+ OEMModeIdIndex = SiS_SearchVBModeID(SiS_Pr,ROMAddr,&ModeNo);
-+ if(!(OEMModeIdIndex)) return;
-+ }
-
- if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
-- SetOEMLCDDelay(SiS_Pr,HwDeviceExtension,BaseAddr,ROMAddr,ModeNo,ModeIdIndex);
-+ SetOEMLCDDelay(SiS_Pr,HwDeviceExtension,BaseAddr,ROMAddr,ModeNo,OEMModeIdIndex);
- if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
-- SetOEMLCDData(SiS_Pr,HwDeviceExtension,BaseAddr,ROMAddr,ModeNo,ModeIdIndex);
-+ SetOEMLCDData(SiS_Pr,HwDeviceExtension,BaseAddr,ROMAddr,ModeNo,OEMModeIdIndex);
- }
- }
-+ if(SiS_Pr->UseCustomMode) return;
- if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
-- SetOEMTVDelay(SiS_Pr,HwDeviceExtension,BaseAddr,ROMAddr,ModeNo,ModeIdIndex);
-+ SetOEMTVDelay(SiS_Pr,HwDeviceExtension,BaseAddr,ROMAddr,ModeNo,OEMModeIdIndex);
- if(SiS_Pr->SiS_IF_DEF_LVDS == 0) {
-- SetOEMAntiFlicker(SiS_Pr,HwDeviceExtension,BaseAddr,ROMAddr,ModeNo,ModeIdIndex);
-- SetOEMPhaseIncr(SiS_Pr,HwDeviceExtension,BaseAddr,ROMAddr,ModeNo,ModeIdIndex);
-- SetOEMYFilter(SiS_Pr,HwDeviceExtension,BaseAddr,ROMAddr,ModeNo,ModeIdIndex);
-+ SetOEMAntiFlicker(SiS_Pr,HwDeviceExtension,BaseAddr,ROMAddr,ModeNo,OEMModeIdIndex);
-+ SetOEMPhaseIncr(SiS_Pr,HwDeviceExtension,BaseAddr,ROMAddr,ModeNo,OEMModeIdIndex);
-+ SetOEMYFilter(SiS_Pr,HwDeviceExtension,BaseAddr,ROMAddr,ModeNo,OEMModeIdIndex);
- }
- }
- }
---- linux-2.6.0-test1/drivers/video/sis/init301.h 2003-06-14 12:18:21.000000000 -0700
-+++ 25/drivers/video/sis/init301.h 2003-07-19 17:04:55.000000000 -0700
-@@ -1,20 +1,39 @@
--/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/sis/init301.h,v 1.4 2000/12/02 01:16:17 dawes Exp $ */
-+/* $XFree86$ */
-+/*
-+ * Data and prototypes for init301.c
-+ *
-+ * Copyright 2002, 2003 by Thomas Winischhofer, Vienna, Austria
-+ *
-+ * Permission to use, copy, modify, distribute, and sell this software and its
-+ * documentation for any purpose is hereby granted without fee, provided that
-+ * the above copyright notice appear in all copies and that both that
-+ * copyright notice and this permission notice appear in supporting
-+ * documentation, and that the name of the copyright holder not be used in
-+ * advertising or publicity pertaining to distribution of the software without
-+ * specific, written prior permission. The copyright holder makes no representations
-+ * about the suitability of this software for any purpose. It is provided
-+ * "as is" without express or implied warranty.
-+ *
-+ * THE COPYRIGHT HOLDER DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-+ * EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-+ * PERFORMANCE OF THIS SOFTWARE.
-+ *
-+ * Author: Thomas Winischhofer <thomas@winischhofer.net>
-+ */
-+
- #ifndef _INIT301_
- #define _INIT301_
-
- #include "osdef.h"
-+
- #include "initdef.h"
- #include "vgatypes.h"
- #include "vstruct.h"
-
--#ifdef TC
--#include <stdio.h>
--#include <string.h>
--#include <conio.h>
--#include <dos.h>
--#include <stdlib.h>
--#endif
--
- #ifdef LINUX_XF86
- #include "xf86.h"
- #include "xf86Pci.h"
-@@ -24,6 +43,9 @@
- #endif
-
- #ifdef LINUX_KERNEL
-+#ifdef SIS_CP
-+#undef SIS_CP
-+#endif
- #include <linux/config.h>
- #include <linux/version.h>
- #include <asm/io.h>
-@@ -35,24 +57,60 @@
- #endif
- #endif
-
--#ifdef WIN2000
--#include <stdio.h>
--#include <string.h>
--#include <miniport.h>
--#include "dderror.h"
--#include "devioctl.h"
--#include "miniport.h"
--#include "ntddvdeo.h"
--#include "video.h"
--#include "sisv.h"
--#endif
-+const UCHAR SiS_HiVisionTable[3][64] = {
-+ {
-+ 0x17, 0x1d, 0x03, 0x09, 0x05, 0x06, 0x0c, 0x0c,
-+ 0x94, 0x49, 0x01, 0x0a, 0x06, 0x0d, 0x04, 0x0a,
-+ 0x06, 0x14, 0x0d, 0x04, 0x0a, 0x00, 0x85, 0x1b,
-+ 0x0c, 0x50, 0x00, 0x97, 0x00, 0xd4, 0x4a, 0x17,
-+ 0x7d, 0x05, 0x4b, 0x00, 0x00, 0xe2, 0x00, 0x02,
-+ 0x03, 0x0a, 0x65, 0x9d, 0x08, 0x92, 0x8f, 0x40,
-+ 0x60, 0x80, 0x14, 0x90, 0x8c, 0x60, 0x14, 0x53,
-+ 0x00, 0x40, 0x44, 0x00, 0xdb, 0x02, 0x3b, 0x00
-+ },
-+ {
-+ 0x1d, 0x1d, 0x06, 0x09, 0x0b, 0x0c, 0x0c, 0x0c,
-+ 0x98, 0x0a, 0x01, 0x0d, 0x06, 0x0d, 0x04, 0x0a,
-+ 0x06, 0x14, 0x0d, 0x04, 0x0a, 0x00, 0x85, 0x3f,
-+ 0x0c, 0x50, 0xb2, 0x2e, 0x16, 0xb5, 0xf4, 0x03,
-+ 0x7d, 0x11, 0x7d, 0xea, 0x30, 0x36, 0x18, 0x96,
-+ 0x21, 0x0a, 0x58, 0xee, 0x42, 0x92, 0x0f, 0x40,
-+ 0x60, 0x80, 0x14, 0x90, 0x8c, 0x60, 0x04, 0xf3,
-+ 0x00, 0x40, 0x11, 0x00, 0xfc, 0xff, 0x32, 0x00
-+ },
-+ {
-+ 0x13, 0x1d, 0xe8, 0x09, 0x09, 0xed, 0x0c, 0x0c,
-+ 0x98, 0x0a, 0x01, 0x0c, 0x06, 0x0d, 0x04, 0x0a,
-+ 0x06, 0x14, 0x0d, 0x04, 0x0a, 0x00, 0x85, 0x3f,
-+ 0xed, 0x50, 0x70, 0x9f, 0x16, 0x59, 0x2b, 0x13,
-+ 0x27, 0x0b, 0x27, 0xfc, 0x30, 0x27, 0x1c, 0xb0,
-+ 0x4b, 0x4b, 0x6f, 0x2f, 0x63, 0x92, 0x0f, 0x40,
-+ 0x60, 0x80, 0x14, 0x90, 0x8c, 0x60, 0x14, 0x2a,
-+ 0x00, 0x40, 0x11, 0x00, 0xfc, 0xff, 0x32, 0x00
-+ }
-+};
-
--#if 0
--extern const USHORT SiS_MDA_DAC[];
--extern const USHORT SiS_CGA_DAC[];
--extern const USHORT SiS_EGA_DAC[];
--extern const USHORT SiS_VGA_DAC[];
--#endif
-+const UCHAR SiS_HiTVGroup3_1[] = {
-+ 0x00, 0x14, 0x15, 0x25, 0x55, 0x15, 0x0b, 0x13,
-+ 0xb1, 0x41, 0x62, 0x62, 0xff, 0xf4, 0x45, 0xa6,
-+ 0x25, 0x2f, 0x67, 0xf6, 0xbf, 0xff, 0x8e, 0x20,
-+ 0xac, 0xda, 0x60, 0xfe, 0x6a, 0x9a, 0x06, 0x10,
-+ 0xd1, 0x04, 0x18, 0x0a, 0xff, 0x80, 0x00, 0x80,
-+ 0x3b, 0x77, 0x00, 0xef, 0xe0, 0x10, 0xb0, 0xe0,
-+ 0x10, 0x4f, 0x0f, 0x0f, 0x05, 0x0f, 0x08, 0x6e,
-+ 0x1a, 0x1f, 0x25, 0x2a, 0x4c, 0xaa, 0x01
-+};
-+
-+const UCHAR SiS_HiTVGroup3_2[] = {
-+ 0x00, 0x14, 0x15, 0x25, 0x55, 0x15, 0x0b, 0x7a,
-+ 0x54, 0x41, 0xe7, 0xe7, 0xff, 0xf4, 0x45, 0xa6,
-+ 0x25, 0x2f, 0x67, 0xf6, 0xbf, 0xff, 0x8e, 0x20,
-+ 0xac, 0x6a, 0x60, 0x2b, 0x52, 0xcd, 0x61, 0x10,
-+ 0x51, 0x04, 0x18, 0x0a, 0x1f, 0x80, 0x00, 0x80,
-+ 0xff, 0xa4, 0x04, 0x2b, 0x94, 0x21, 0x72, 0x94,
-+ 0x26, 0x05, 0x01, 0x0f, 0xed, 0x0f, 0x0a, 0x64,
-+ 0x18, 0x1d, 0x23, 0x28, 0x4c, 0xaa, 0x01
-+};
-
- extern BOOLEAN SiS_SearchVBModeID(SiS_Private *SiS_Pr, UCHAR *RomAddr, USHORT *);
-
-@@ -129,7 +187,6 @@ void SiS_GetVBInfo(SiS_Private *SiS_
- BOOLEAN SiS_BridgeIsOn(SiS_Private *SiS_Pr, USHORT BaseAddr,PSIS_HW_DEVICE_INFO);
- BOOLEAN SiS_BridgeIsEnable(SiS_Private *SiS_Pr, USHORT BaseAddr,PSIS_HW_DEVICE_INFO);
- BOOLEAN SiS_BridgeInSlave(SiS_Private *SiS_Pr);
--void SiS_PresetScratchregister(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension);
- void SiS_SetTVSystem(SiS_Private *SiS_Pr);
- void SiS_LongWait(SiS_Private *SiS_Pr);
- USHORT SiS_GetQueueConfig(SiS_Private *SiS_Pr);
-@@ -149,7 +206,7 @@ void SiS_GetLVDSDesPtrA(SiS_Private
- USHORT RefreshRateTableIndex,USHORT *PanelIndex,USHORT *ResIndex);
- #endif
- void SiS_SetTPData(SiS_Private *SiS_Pr);
--void SiS_WhatIsThis(SiS_Private *SiS_Pr, USHORT myvbinfo);
-+void SiS_SetChrontelGPIO(SiS_Private *SiS_Pr, USHORT myvbinfo);
- void SiS_ModCRT1CRTC(SiS_Private *SiS_Pr, UCHAR *ROMAddr,USHORT ModeNo,USHORT ModeIdIndex,
- USHORT RefreshRateTableIndex,PSIS_HW_DEVICE_INFO HwDeviceExtension);
- void SiS_SetCHTVReg(SiS_Private *SiS_Pr, UCHAR *ROMAddr,USHORT ModeNo,USHORT ModeIdIndex,
-@@ -178,20 +235,18 @@ USHORT SiS_SetSCLKHigh(SiS_Private *Si
- USHORT SiS_ReadDDC2Data(SiS_Private *SiS_Pr, USHORT tempax);
- USHORT SiS_WriteDDC2Data(SiS_Private *SiS_Pr, USHORT tempax);
- USHORT SiS_CheckACK(SiS_Private *SiS_Pr);
--USHORT SiS_ReadLCDDDC(SiS_Private *SiS_Pr, USHORT length, unsigned char *buffer);
--#ifdef LINUX_XF86
--USHORT SiS_SenseLCDDDC(SiS_Private *SiS_Pr, SISPtr pSiS);
--USHORT SiS_SenseVGA2DDC(SiS_Private *SiS_Pr, SISPtr pSiS);
--#endif
-+
- #ifdef SIS315H
- void SiS_OEM310Setting(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension,USHORT BaseAddr,
- UCHAR *ROMAddr,USHORT ModeNo,USHORT ModeIdIndex);
- void SiS_OEMLCD(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension,USHORT BaseAddr,
-- UCHAR *ROMAddr,USHORT ModeNo,USHORT ModeIdIndex);
-+ UCHAR *ROMAddr,USHORT ModeNo,USHORT ModeIdIndex,USHORT RefreshRateTableIndex);
- #endif
- #ifdef SIS300
- void SiS_OEM300Setting(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension,USHORT BaseAddr,
-- UCHAR *ROMAddr,USHORT ModeNo);
-+ UCHAR *ROMAddr,USHORT ModeNo, USHORT ModeIdIndex, USHORT RefTabindex);
-+void SetOEMLCDData2(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension,USHORT BaseAddr,
-+ UCHAR *ROMAddr, USHORT ModeNo, USHORT ModeIdIndex,USHORT RefTableIndex);
- #endif
- BOOLEAN SiS_LowModeStuff(SiS_Private *SiS_Pr, USHORT ModeNo,PSIS_HW_DEVICE_INFO HwDeviceExtension);
-
-@@ -200,8 +255,8 @@ BOOLEAN SiS_GetLCDResInfo(SiS_Private *
- /* void SiS_CHACRT1CRTC(SiS_Private *SiS_Pr, UCHAR *ROMAddr,USHORT ModeNo,USHORT ModeIdIndex,
- USHORT RefreshRateTableIndex); */
-
--BOOLEAN SiS_SetCRT2Group301(SiS_Private *SiS_Pr, USHORT BaseAddr,UCHAR *ROMAddr,USHORT ModeNo,
-- PSIS_HW_DEVICE_INFO HwDeviceExtension);
-+BOOLEAN SiS_SetCRT2Group(SiS_Private *SiS_Pr, USHORT BaseAddr,UCHAR *ROMAddr,USHORT ModeNo,
-+ PSIS_HW_DEVICE_INFO HwDeviceExtension);
- void SiS_SetGroup1(SiS_Private *SiS_Pr, USHORT BaseAddr,UCHAR *ROMAddr,USHORT ModeNo,USHORT ModeIdIndex,
- PSIS_HW_DEVICE_INFO HwDeviceExtension,USHORT RefreshRateTableIndex);
- void SiS_SetGroup1_LVDS(SiS_Private *SiS_Pr, USHORT BaseAddr,UCHAR *ROMAddr,USHORT ModeNo,USHORT ModeIdIndex,
-@@ -237,19 +292,19 @@ void SiS_VBWait(SiS_Private *SiS_Pr)
- void SiS_SiS30xBLOn(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension);
- void SiS_SiS30xBLOff(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension);
-
--void SiS_Chrontel701xBLOn(SiS_Private *SiS_Pr);
-+void SiS_Chrontel701xBLOn(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension);
- void SiS_Chrontel701xBLOff(SiS_Private *SiS_Pr);
- #ifdef SIS315H
- void SiS_Chrontel701xOn(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension,
- USHORT BaseAddr);
--void SiS_Chrontel701xOff(SiS_Private *SiS_Pr);
-+void SiS_Chrontel701xOff(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension);
- void SiS_ChrontelResetDB(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension, USHORT BaseAddr);
- void SiS_ChrontelDoSomething4(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension, USHORT BaseAddr);
- void SiS_ChrontelDoSomething3(SiS_Private *SiS_Pr, USHORT ModeNo, PSIS_HW_DEVICE_INFO HwDeviceExtension, USHORT BaseAddr);
- void SiS_ChrontelDoSomething2(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension, USHORT BaseAddr);
- void SiS_ChrontelDoSomething1(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension, USHORT BaseAddr);
- BOOLEAN SiS_WeHaveBacklightCtrl(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension, USHORT BaseAddr);
--void SiS_ChrontelPowerSequencing(SiS_Private *SiS_Pr);
-+void SiS_ChrontelPowerSequencing(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension);
- void SiS_SetCH701xForLCD(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension, USHORT BaseAddr);
- #ifdef NEWCH701x
- void SiS_ChrontelDoSomething5(SiS_Private *SiS_Pr);
-@@ -289,73 +344,21 @@ extern void SiS_LoadDAC(SiS_Privat
- extern UCHAR SiS_Get310DRAMType(SiS_Private *SiS_Pr, UCHAR *ROMAddr,PSIS_HW_DEVICE_INFO HwDeviceExtension);
- #endif
-
--#ifdef LINUX_XF86
- /* DDC functions */
--USHORT SiS_InitDDCRegs(SiS_Private *SiS_Pr, SISPtr pSiS, USHORT adaptnum, USHORT DDCdatatype, BOOLEAN checkcr32);
-+USHORT SiS_InitDDCRegs(SiS_Private *SiS_Pr, unsigned long VBFlags, int VGAEngine,
-+ USHORT adaptnum, USHORT DDCdatatype, BOOLEAN checkcr32);
- USHORT SiS_WriteDABDDC(SiS_Private *SiS_Pr);
- USHORT SiS_PrepareReadDDC(SiS_Private *SiS_Pr);
- USHORT SiS_PrepareDDC(SiS_Private *SiS_Pr);
- void SiS_SendACK(SiS_Private *SiS_Pr, USHORT yesno);
- USHORT SiS_DoProbeDDC(SiS_Private *SiS_Pr);
- USHORT SiS_ProbeDDC(SiS_Private *SiS_Pr);
--USHORT SiS_ReadDDC(SiS_Private *SiS_Pr, SISPtr pSiS, USHORT DDCdatatype, unsigned char *buffer);
--USHORT SiS_HandleDDC(SiS_Private *SiS_Pr, SISPtr pSiS, USHORT adaptnum,
-- USHORT DDCdatatype, unsigned char *buffer);
-+USHORT SiS_ReadDDC(SiS_Private *SiS_Pr, USHORT DDCdatatype, unsigned char *buffer);
-+USHORT SiS_HandleDDC(SiS_Private *SiS_Pr, unsigned long VBFlags, int VGAEngine,
-+ USHORT adaptnum, USHORT DDCdatatype, unsigned char *buffer);
-+#ifdef LINUX_XF86
-+USHORT SiS_SenseLCDDDC(SiS_Private *SiS_Pr, SISPtr pSiS);
-+USHORT SiS_SenseVGA2DDC(SiS_Private *SiS_Pr, SISPtr pSiS);
- #endif
-
--const UCHAR SiS_HiVisionTable[3][64] = {
-- {
-- 0x17, 0x1d, 0x03, 0x09, 0x05, 0x06, 0x0c, 0x0c,
-- 0x94, 0x49, 0x01, 0x0a, 0x06, 0x0d, 0x04, 0x0a,
-- 0x06, 0x14, 0x0d, 0x04, 0x0a, 0x00, 0x85, 0x1b,
-- 0x0c, 0x50, 0x00, 0x97, 0x00, 0xd4, 0x4a, 0x17,
-- 0x7d, 0x05, 0x4b, 0x00, 0x00, 0xe2, 0x00, 0x02,
-- 0x03, 0x0a, 0x65, 0x9d, 0x08, 0x92, 0x8f, 0x40,
-- 0x60, 0x80, 0x14, 0x90, 0x8c, 0x60, 0x14, 0x53,
-- 0x00, 0x40, 0x44, 0x00, 0xdb, 0x02, 0x3b, 0x00
-- },
-- {
-- 0x1d, 0x1d, 0x06, 0x09, 0x0b, 0x0c, 0x0c, 0x0c,
-- 0x98, 0x0a, 0x01, 0x0d, 0x06, 0x0d, 0x04, 0x0a,
-- 0x06, 0x14, 0x0d, 0x04, 0x0a, 0x00, 0x85, 0x3f,
-- 0x0c, 0x50, 0xb2, 0x2e, 0x16, 0xb5, 0xf4, 0x03,
-- 0x7d, 0x11, 0x7d, 0xea, 0x30, 0x36, 0x18, 0x96,
-- 0x21, 0x0a, 0x58, 0xee, 0x42, 0x92, 0x0f, 0x40,
-- 0x60, 0x80, 0x14, 0x90, 0x8c, 0x60, 0x04, 0xf3,
-- 0x00, 0x40, 0x11, 0x00, 0xfc, 0xff, 0x32, 0x00
-- },
-- {
-- 0x13, 0x1d, 0xe8, 0x09, 0x09, 0xed, 0x0c, 0x0c,
-- 0x98, 0x0a, 0x01, 0x0c, 0x06, 0x0d, 0x04, 0x0a,
-- 0x06, 0x14, 0x0d, 0x04, 0x0a, 0x00, 0x85, 0x3f,
-- 0xed, 0x50, 0x70, 0x9f, 0x16, 0x59, 0x2b, 0x13,
-- 0x27, 0x0b, 0x27, 0xfc, 0x30, 0x27, 0x1c, 0xb0,
-- 0x4b, 0x4b, 0x6f, 0x2f, 0x63, 0x92, 0x0f, 0x40,
-- 0x60, 0x80, 0x14, 0x90, 0x8c, 0x60, 0x14, 0x2a,
-- 0x00, 0x40, 0x11, 0x00, 0xfc, 0xff, 0x32, 0x00
-- }
--};
--
--const UCHAR SiS_HiTVGroup3_1[] = {
-- 0x00, 0x14, 0x15, 0x25, 0x55, 0x15, 0x0b, 0x13,
-- 0xb1, 0x41, 0x62, 0x62, 0xff, 0xf4, 0x45, 0xa6,
-- 0x25, 0x2f, 0x67, 0xf6, 0xbf, 0xff, 0x8e, 0x20,
-- 0xac, 0xda, 0x60, 0xfe, 0x6a, 0x9a, 0x06, 0x10,
-- 0xd1, 0x04, 0x18, 0x0a, 0xff, 0x80, 0x00, 0x80,
-- 0x3b, 0x77, 0x00, 0xef, 0xe0, 0x10, 0xb0, 0xe0,
-- 0x10, 0x4f, 0x0f, 0x0f, 0x05, 0x0f, 0x08, 0x6e,
-- 0x1a, 0x1f, 0x25, 0x2a, 0x4c, 0xaa, 0x01
--};
--
--const UCHAR SiS_HiTVGroup3_2[] = {
-- 0x00, 0x14, 0x15, 0x25, 0x55, 0x15, 0x0b, 0x7a,
-- 0x54, 0x41, 0xe7, 0xe7, 0xff, 0xf4, 0x45, 0xa6,
-- 0x25, 0x2f, 0x67, 0xf6, 0xbf, 0xff, 0x8e, 0x20,
-- 0xac, 0x6a, 0x60, 0x2b, 0x52, 0xcd, 0x61, 0x10,
-- 0x51, 0x04, 0x18, 0x0a, 0x1f, 0x80, 0x00, 0x80,
-- 0xff, 0xa4, 0x04, 0x2b, 0x94, 0x21, 0x72, 0x94,
-- 0x26, 0x05, 0x01, 0x0f, 0xed, 0x0f, 0x0a, 0x64,
-- 0x18, 0x1d, 0x23, 0x28, 0x4c, 0xaa, 0x01
--};
--
- #endif
---- linux-2.6.0-test1/drivers/video/sis/init.c 2003-06-14 12:18:05.000000000 -0700
-+++ 25/drivers/video/sis/init.c 2003-07-19 17:04:55.000000000 -0700
-@@ -1,24 +1,11 @@
- /* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/sis/init.c,v 1.3 2002/24/04 01:16:16 dawes Exp $ */
- /*
-- * Mode switching code (CRT1 section) for SiS 300/540/630/730/315/550/650/740/330
-+ * Mode switching code (CRT1 section) for SiS 300/540/630/730/315/550/650/740/330/660
- * (Universal module for Linux kernel framebuffer and XFree86 4.x)
- *
- * Assembler-To-C translation
-- * Copyright 2002 by Thomas Winischhofer <thomas@winischhofer.net>
-- * Minor parts Copyright SiS, Inc.
-- *
-- * Based on BIOS
-- * 1.10.07, 1.10a for 650/CH7019
-- * 1.11.21a for 740/CH7019
-- * 1.11.05 for 650/LVDS (w/o Chrontel)
-- * 1.07.1b, 1.11.6s, 1.11.6w, 1.11.7w, 1.11.8r for 650/301(B/LV)
-- * 2.04.50 (I) and 2.04.5c (II) for 630/301(B)
-- * 2.06.50 for 630/301B (dual VGA)
-- * 2.02.3b, 2.03.02, 2.04.5c, 2.07a and 2.08.b3 for 630/LVDS/LVDS+CH7005
-- * 2.04.5c, 2.04.6c for 730+LVDS+CH7005
-- * 1.09b for 315/301(B)
-- * 1.16.51 for 300+301LV (ECS A907)
-- * 1.01.03 for 330 (Xabre 400)
-+ * Copyright 2002, 2003 by Thomas Winischhofer <thomas@winischhofer.net>
-+ * Formerly based on non-functional code-fragements by SiS, Inc.
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
-@@ -61,12 +48,12 @@
- #ifdef LINUX_XF86
- BOOLEAN SiSBIOSSetMode(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension,
- ScrnInfoPtr pScrn, DisplayModePtr mode, BOOLEAN IsCustom);
--DisplayModePtr SiSBuildBuiltInModeList(ScrnInfoPtr pScrn);
--#ifdef SISDUALHEAD /* TW: For dual head */
-+DisplayModePtr SiSBuildBuiltInModeList(ScrnInfoPtr pScrn, BOOLEAN includelcdmodes, BOOLEAN isfordvi);
-+#ifdef SISDUALHEAD
- BOOLEAN SiSBIOSSetModeCRT1(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension,
- ScrnInfoPtr pScrn, DisplayModePtr mode, BOOLEAN IsCustom);
- BOOLEAN SiSBIOSSetModeCRT2(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension,
-- ScrnInfoPtr pScrn, DisplayModePtr mode);
-+ ScrnInfoPtr pScrn, DisplayModePtr mode, BOOLEAN IsCustom);
- #endif /* dual head */
- #endif /* linux_xf86 */
-
-@@ -90,49 +77,199 @@ BOOLEAN SiSSetMode(SiS_Private *SiS_Pr,
- static ULONG GetDRAMSize(SiS_Private *SiS_Pr,
- PSIS_HW_DEVICE_INFO HwDeviceExtension);
-
--static void DelaySeconds(int seconds);
--void SiS_DebugCode(SiS_Private *SiS_Pr, UCHAR code);
--
- static void
--DelaySeconds(int seconds)
-+InitCommonPointer(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension)
- {
-- int i;
--#ifdef WIN2000
-- int j;
--#endif
--
-- for (i=0;i<seconds;i++) {
--#ifdef TC
-- delay(1000);
--#endif
--
--#ifdef WIN2000
-- for (j=0;j<20000;j++)
-- VideoPortStallExecution(50);
--#endif
--
--#ifdef WINCE_HEADER
--#endif
--
--#ifdef LINUX_KERNEL
--#endif
-- }
--}
--
--void
--SiS_DebugCode(SiS_Private *SiS_Pr, UCHAR code)
--{
-- OutPortByte(0x80, code);
-- DelaySeconds(0x3);
-+ SiS_Pr->SiS_StResInfo = SiS_StResInfo;
-+ SiS_Pr->SiS_ModeResInfo = SiS_ModeResInfo;
-+ SiS_Pr->SiS_StandTable = SiS_StandTable;
-+ if(HwDeviceExtension->jChipType < SIS_315H) {
-+ SiS_StandTable[0x04].CRTC[4] = 0x2b;
-+ SiS_StandTable[0x05].CRTC[4] = 0x2b;
-+ SiS_StandTable[0x06].CRTC[4] = 0x54;
-+ SiS_StandTable[0x06].CRTC[5] = 0x80;
-+ SiS_StandTable[0x0d].CRTC[4] = 0x2b;
-+ SiS_StandTable[0x0e].CRTC[4] = 0x54;
-+ SiS_StandTable[0x0e].CRTC[5] = 0x80;
-+ SiS_StandTable[0x11].CRTC[4] = 0x54;
-+ SiS_StandTable[0x11].CRTC[5] = 0x80;
-+ SiS_StandTable[0x11].CRTC[16] = 0x83;
-+ SiS_StandTable[0x11].CRTC[17] = 0x85;
-+ SiS_StandTable[0x12].CRTC[4] = 0x54;
-+ SiS_StandTable[0x12].CRTC[5] = 0x80;
-+ SiS_StandTable[0x12].CRTC[16] = 0x83;
-+ SiS_StandTable[0x12].CRTC[17] = 0x85;
-+ SiS_StandTable[0x13].CRTC[5] = 0xa0;
-+ SiS_StandTable[0x17].CRTC[5] = 0xa0;
-+ SiS_StandTable[0x1a].CRTC[4] = 0x54;
-+ SiS_StandTable[0x1a].CRTC[5] = 0x80;
-+ SiS_StandTable[0x1a].CRTC[16] = 0xea;
-+ SiS_StandTable[0x1a].CRTC[17] = 0x8c;
-+ SiS_StandTable[0x1b].CRTC[4] = 0x54;
-+ SiS_StandTable[0x1b].CRTC[5] = 0x80;
-+ SiS_StandTable[0x1b].CRTC[16] = 0xea;
-+ SiS_StandTable[0x1b].CRTC[17] = 0x8c;
-+ SiS_StandTable[0x1c].CRTC[4] = 0x54;
-+ SiS_StandTable[0x1c].CRTC[5] = 0x80;
-+ } else {
-+ SiS_StandTable[0x04].CRTC[4] = 0x2c;
-+ SiS_StandTable[0x05].CRTC[4] = 0x2c;
-+ SiS_StandTable[0x06].CRTC[4] = 0x55;
-+ SiS_StandTable[0x06].CRTC[5] = 0x81;
-+ SiS_StandTable[0x0d].CRTC[4] = 0x2c;
-+ SiS_StandTable[0x0e].CRTC[4] = 0x55;
-+ SiS_StandTable[0x0e].CRTC[5] = 0x81;
-+ SiS_StandTable[0x11].CRTC[4] = 0x55;
-+ SiS_StandTable[0x11].CRTC[5] = 0x81;
-+ SiS_StandTable[0x11].CRTC[16] = 0x82;
-+ SiS_StandTable[0x11].CRTC[17] = 0x84;
-+ SiS_StandTable[0x12].CRTC[4] = 0x55;
-+ SiS_StandTable[0x12].CRTC[5] = 0x81;
-+ SiS_StandTable[0x12].CRTC[16] = 0x82;
-+ SiS_StandTable[0x12].CRTC[17] = 0x84;
-+ SiS_StandTable[0x13].CRTC[5] = 0xb1;
-+ SiS_StandTable[0x17].CRTC[5] = 0xb1;
-+ SiS_StandTable[0x1a].CRTC[4] = 0x55;
-+ SiS_StandTable[0x1a].CRTC[5] = 0x81;
-+ SiS_StandTable[0x1a].CRTC[16] = 0xe9;
-+ SiS_StandTable[0x1a].CRTC[17] = 0x8b;
-+ SiS_StandTable[0x1b].CRTC[4] = 0x55;
-+ SiS_StandTable[0x1b].CRTC[5] = 0x81;
-+ SiS_StandTable[0x1b].CRTC[16] = 0xe9;
-+ SiS_StandTable[0x1b].CRTC[17] = 0x8b;
-+ SiS_StandTable[0x1c].CRTC[4] = 0x55;
-+ SiS_StandTable[0x1c].CRTC[5] = 0x81;
-+ }
-+
-+ SiS_Pr->SiS_NTSCPhase = SiS_NTSCPhase;
-+ SiS_Pr->SiS_PALPhase = SiS_PALPhase;
-+ SiS_Pr->SiS_NTSCPhase2 = SiS_NTSCPhase2;
-+ SiS_Pr->SiS_PALPhase2 = SiS_PALPhase2;
-+ SiS_Pr->SiS_PALMPhase = SiS_PALMPhase;
-+ SiS_Pr->SiS_PALNPhase = SiS_PALNPhase;
-+ SiS_Pr->SiS_PALMPhase2 = SiS_PALMPhase2;
-+ SiS_Pr->SiS_PALNPhase2 = SiS_PALNPhase2;
-+ SiS_Pr->SiS_SpecialPhase = SiS_SpecialPhase;
-+
-+ SiS_Pr->SiS_NTSCTiming = SiS_NTSCTiming;
-+ SiS_Pr->SiS_PALTiming = SiS_PALTiming;
-+ SiS_Pr->SiS_HiTVSt1Timing = SiS_HiTVSt1Timing;
-+ SiS_Pr->SiS_HiTVSt2Timing = SiS_HiTVSt2Timing;
-+ SiS_Pr->SiS_HiTVTextTiming = SiS_HiTVTextTiming;
-+ SiS_Pr->SiS_HiTVExtTiming = SiS_HiTVExtTiming;
-+ SiS_Pr->SiS_HiTVGroup3Data = SiS_HiTVGroup3Data;
-+ SiS_Pr->SiS_HiTVGroup3Simu = SiS_HiTVGroup3Simu;
-+ SiS_Pr->SiS_HiTVGroup3Text = SiS_HiTVGroup3Text;
-+
-+ SiS_Pr->SiS_StPALData = SiS_StPALData;
-+ SiS_Pr->SiS_ExtPALData = SiS_ExtPALData;
-+ SiS_Pr->SiS_StNTSCData = SiS_StNTSCData;
-+ SiS_Pr->SiS_ExtNTSCData = SiS_ExtNTSCData;
-+/* SiS_Pr->SiS_St1HiTVData = SiS_St1HiTVData; */
-+ SiS_Pr->SiS_St2HiTVData = SiS_St2HiTVData;
-+ SiS_Pr->SiS_ExtHiTVData = SiS_ExtHiTVData;
-+
-+ SiS_Pr->pSiS_OutputSelect = &SiS_OutputSelect;
-+ SiS_Pr->pSiS_SoftSetting = &SiS_SoftSetting;
-+
-+ SiS_Pr->SiS_LCD1280x960Data = SiS_LCD1280x960Data;
-+ SiS_Pr->SiS_ExtLCD1400x1050Data = SiS_ExtLCD1400x1050Data;
-+ SiS_Pr->SiS_ExtLCD1600x1200Data = SiS_ExtLCD1600x1200Data;
-+ SiS_Pr->SiS_StLCD1400x1050Data = SiS_StLCD1400x1050Data;
-+ SiS_Pr->SiS_StLCD1600x1200Data = SiS_StLCD1600x1200Data;
-+ SiS_Pr->SiS_NoScaleData1400x1050 = SiS_NoScaleData1400x1050;
-+ SiS_Pr->SiS_NoScaleData1600x1200 = SiS_NoScaleData1600x1200;
-+ SiS_Pr->SiS_ExtLCD1280x768Data = SiS_ExtLCD1280x768Data;
-+ SiS_Pr->SiS_StLCD1280x768Data = SiS_StLCD1280x768Data;
-+ SiS_Pr->SiS_NoScaleData1280x768 = SiS_NoScaleData1280x768;
-+ SiS_Pr->SiS_NoScaleData = SiS_NoScaleData;
-+
-+ SiS_Pr->SiS_LVDS320x480Data_1 = SiS_LVDS320x480Data_1;
-+ SiS_Pr->SiS_LVDS800x600Data_1 = SiS_LVDS800x600Data_1;
-+ SiS_Pr->SiS_LVDS800x600Data_2 = SiS_LVDS800x600Data_2;
-+ SiS_Pr->SiS_LVDS1024x768Data_1 = SiS_LVDS1024x768Data_1;
-+ SiS_Pr->SiS_LVDS1024x768Data_2 = SiS_LVDS1024x768Data_2;
-+ SiS_Pr->SiS_LVDS1280x1024Data_1 = SiS_LVDS1280x1024Data_1;
-+ SiS_Pr->SiS_LVDS1280x1024Data_2 = SiS_LVDS1280x1024Data_2;
-+ SiS_Pr->SiS_LVDS1400x1050Data_1 = SiS_LVDS1400x1050Data_1;
-+ SiS_Pr->SiS_LVDS1400x1050Data_2 = SiS_LVDS1400x1050Data_2;
-+ SiS_Pr->SiS_LVDS1600x1200Data_1 = SiS_LVDS1600x1200Data_1;
-+ SiS_Pr->SiS_LVDS1600x1200Data_2 = SiS_LVDS1600x1200Data_2;
-+ SiS_Pr->SiS_LVDS1280x768Data_1 = SiS_LVDS1280x768Data_1;
-+ SiS_Pr->SiS_LVDS1280x768Data_2 = SiS_LVDS1280x768Data_2;
-+ SiS_Pr->SiS_LVDS1024x600Data_1 = SiS_LVDS1024x600Data_1;
-+ SiS_Pr->SiS_LVDS1024x600Data_2 = SiS_LVDS1024x600Data_2;
-+ SiS_Pr->SiS_LVDS1152x768Data_1 = SiS_LVDS1152x768Data_1;
-+ SiS_Pr->SiS_LVDS1152x768Data_2 = SiS_LVDS1152x768Data_2;
-+ SiS_Pr->SiS_LVDSXXXxXXXData_1 = SiS_LVDSXXXxXXXData_1;
-+ SiS_Pr->SiS_LVDS1280x960Data_1 = SiS_LVDS1280x960Data_1;
-+ SiS_Pr->SiS_LVDS1280x960Data_2 = SiS_LVDS1280x960Data_2;
-+ SiS_Pr->SiS_LVDS640x480Data_1 = SiS_LVDS640x480Data_1;
-+ SiS_Pr->SiS_LVDS1280x960Data_1 = SiS_LVDS1280x1024Data_1;
-+ SiS_Pr->SiS_LVDS1280x960Data_2 = SiS_LVDS1280x1024Data_2;
-+ SiS_Pr->SiS_LVDS640x480Data_1 = SiS_LVDS640x480Data_1;
-+ SiS_Pr->SiS_LVDS640x480Data_2 = SiS_LVDS640x480Data_2;
-+
-+ SiS_Pr->SiS_LVDSBARCO1366Data_1 = SiS_LVDSBARCO1366Data_1;
-+ SiS_Pr->SiS_LVDSBARCO1366Data_2 = SiS_LVDSBARCO1366Data_2;
-+ SiS_Pr->SiS_LVDSBARCO1024Data_1 = SiS_LVDSBARCO1024Data_1;
-+ SiS_Pr->SiS_LVDSBARCO1024Data_2 = SiS_LVDSBARCO1024Data_2;
-+
-+ SiS_Pr->SiS_LCDA1400x1050Data_1 = SiS_LCDA1400x1050Data_1;
-+ SiS_Pr->SiS_LCDA1400x1050Data_2 = SiS_LCDA1400x1050Data_2;
-+ SiS_Pr->SiS_LCDA1600x1200Data_1 = SiS_LCDA1600x1200Data_1;
-+ SiS_Pr->SiS_LCDA1600x1200Data_2 = SiS_LCDA1600x1200Data_2;
-+ SiS_Pr->SiS_CHTVUNTSCData = SiS_CHTVUNTSCData;
-+ SiS_Pr->SiS_CHTVONTSCData = SiS_CHTVONTSCData;
-+
-+ SiS_Pr->LVDS1024x768Des_1 = SiS_PanelType1076_1;
-+ SiS_Pr->LVDS1280x1024Des_1 = SiS_PanelType1210_1;
-+ SiS_Pr->LVDS1400x1050Des_1 = SiS_PanelType1296_1;
-+ SiS_Pr->LVDS1600x1200Des_1 = SiS_PanelType1600_1;
-+ SiS_Pr->LVDS1024x768Des_2 = SiS_PanelType1076_2;
-+ SiS_Pr->LVDS1280x1024Des_2 = SiS_PanelType1210_2;
-+ SiS_Pr->LVDS1400x1050Des_2 = SiS_PanelType1296_2;
-+ SiS_Pr->LVDS1600x1200Des_2 = SiS_PanelType1600_2;
-+
-+ SiS_Pr->SiS_PanelTypeNS_1 = SiS_PanelTypeNS_1;
-+ SiS_Pr->SiS_PanelTypeNS_2 = SiS_PanelTypeNS_2;
-+
-+ SiS_Pr->SiS_CHTVUNTSCDesData = SiS_CHTVUNTSCDesData;
-+ SiS_Pr->SiS_CHTVONTSCDesData = SiS_CHTVONTSCDesData;
-+ SiS_Pr->SiS_CHTVUPALDesData = SiS_CHTVUPALDesData;
-+ SiS_Pr->SiS_CHTVOPALDesData = SiS_CHTVOPALDesData;
-+
-+ SiS_Pr->SiS_LVDSCRT11280x768_1 = SiS_LVDSCRT11280x768_1;
-+ SiS_Pr->SiS_LVDSCRT11024x600_1 = SiS_LVDSCRT11024x600_1;
-+ SiS_Pr->SiS_LVDSCRT11152x768_1 = SiS_LVDSCRT11152x768_1;
-+ SiS_Pr->SiS_LVDSCRT11280x768_1_H = SiS_LVDSCRT11280x768_1_H;
-+ SiS_Pr->SiS_LVDSCRT11024x600_1_H = SiS_LVDSCRT11024x600_1_H;
-+ SiS_Pr->SiS_LVDSCRT11152x768_1_H = SiS_LVDSCRT11152x768_1_H;
-+ SiS_Pr->SiS_LVDSCRT11280x768_2 = SiS_LVDSCRT11280x768_2;
-+ SiS_Pr->SiS_LVDSCRT11024x600_2 = SiS_LVDSCRT11024x600_2;
-+ SiS_Pr->SiS_LVDSCRT11152x768_2 = SiS_LVDSCRT11152x768_2;
-+ SiS_Pr->SiS_LVDSCRT11280x768_2_H = SiS_LVDSCRT11280x768_2_H;
-+ SiS_Pr->SiS_LVDSCRT11024x600_2_H = SiS_LVDSCRT11024x600_2_H;
-+ SiS_Pr->SiS_LVDSCRT11152x768_2_H = SiS_LVDSCRT11152x768_2_H;
-+ SiS_Pr->SiS_LVDSCRT1320x480_1 = SiS_LVDSCRT1320x480_1;
-+ SiS_Pr->SiS_LVDSCRT1XXXxXXX_1 = SiS_LVDSCRT1XXXxXXX_1;
-+ SiS_Pr->SiS_LVDSCRT1XXXxXXX_1_H = SiS_LVDSCRT1XXXxXXX_1_H;
-+ SiS_Pr->SiS_LVDSCRT1640x480_1 = SiS_LVDSCRT1640x480_1;
-+ SiS_Pr->SiS_LVDSCRT1640x480_1_H = SiS_LVDSCRT1640x480_1_H;
-+ SiS_Pr->SiS_LVDSCRT1640x480_2 = SiS_LVDSCRT1640x480_2;
-+ SiS_Pr->SiS_LVDSCRT1640x480_2_H = SiS_LVDSCRT1640x480_2_H;
-+ SiS_Pr->SiS_LVDSCRT1640x480_3 = SiS_LVDSCRT1640x480_3;
-+ SiS_Pr->SiS_LVDSCRT1640x480_3_H = SiS_LVDSCRT1640x480_3_H;
- }
-
- #ifdef SIS300
- static void
- InitTo300Pointer(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension)
- {
-+ InitCommonPointer(SiS_Pr, HwDeviceExtension);
-+
- SiS_Pr->SiS_SModeIDTable = (SiS_StStruct *)SiS300_SModeIDTable;
- SiS_Pr->SiS_VBModeIDTable = (SiS_VBModeStruct *)SiS300_VBModeIDTable;
-- SiS_Pr->SiS_StandTable = (SiS_StandTableStruct *)SiS300_StandTable;
- SiS_Pr->SiS_EModeIDTable = (SiS_ExtStruct *)SiS300_EModeIDTable;
- SiS_Pr->SiS_RefIndex = (SiS_Ext2Struct *)SiS300_RefIndex;
- SiS_Pr->SiS_CRT1Table = (SiS_CRT1TableStruct *)SiS300_CRT1Table;
-@@ -141,15 +278,12 @@ InitTo300Pointer(SiS_Private *SiS_Pr, PS
- } else {
- SiS_Pr->SiS_MCLKData_0 = (SiS_MCLKDataStruct *)SiS300_MCLKData_630; /* 630, 730 */
- }
-+#ifdef LINUXBIOS
- SiS_Pr->SiS_ECLKData = (SiS_ECLKDataStruct *)SiS300_ECLKData;
-+#endif
- SiS_Pr->SiS_VCLKData = (SiS_VCLKDataStruct *)SiS300_VCLKData;
- SiS_Pr->SiS_VBVCLKData = (SiS_VBVCLKDataStruct *)SiS300_VCLKData;
- SiS_Pr->SiS_ScreenOffset = SiS300_ScreenOffset;
-- SiS_Pr->SiS_StResInfo = (SiS_StResInfoStruct *)SiS300_StResInfo;
-- SiS_Pr->SiS_ModeResInfo = (SiS_ModeResInfoStruct *)SiS300_ModeResInfo;
--
-- SiS_Pr->pSiS_OutputSelect = &SiS300_OutputSelect;
-- SiS_Pr->pSiS_SoftSetting = &SiS300_SoftSetting;
-
- SiS_Pr->SiS_SR15 = SiS300_SR15;
-
-@@ -178,15 +312,6 @@ InitTo300Pointer(SiS_Private *SiS_Pr, PS
- SiS_Pr->pSiS_YCSenseData2 = &SiS300_YCSenseData2;
- #endif
-
-- SiS_Pr->SiS_NTSCPhase = SiS300_NTSCPhase;
-- SiS_Pr->SiS_PALPhase = SiS300_PALPhase;
-- SiS_Pr->SiS_NTSCPhase2 = SiS300_NTSCPhase2;
-- SiS_Pr->SiS_PALPhase2 = SiS300_PALPhase2;
-- SiS_Pr->SiS_PALMPhase = SiS300_PALMPhase;
-- SiS_Pr->SiS_PALNPhase = SiS300_PALNPhase;
-- SiS_Pr->SiS_PALMPhase2 = SiS300_PALMPhase2;
-- SiS_Pr->SiS_PALNPhase2 = SiS300_PALNPhase2;
--
- SiS_Pr->SiS_StLCD1024x768Data = (SiS_LCDDataStruct *)SiS300_StLCD1024x768Data;
- SiS_Pr->SiS_ExtLCD1024x768Data = (SiS_LCDDataStruct *)SiS300_ExtLCD1024x768Data;
- SiS_Pr->SiS_St2LCD1024x768Data = (SiS_LCDDataStruct *)SiS300_St2LCD1024x768Data;
-@@ -195,68 +320,18 @@ InitTo300Pointer(SiS_Private *SiS_Pr, PS
- SiS_Pr->SiS_St2LCD1280x1024Data = (SiS_LCDDataStruct *)SiS300_St2LCD1280x1024Data;
- SiS_Pr->SiS_NoScaleData1024x768 = (SiS_LCDDataStruct *)SiS300_NoScaleData1024x768;
- SiS_Pr->SiS_NoScaleData1280x1024 = (SiS_LCDDataStruct *)SiS300_NoScaleData1280x1024;
-- SiS_Pr->SiS_LCD1280x960Data = (SiS_LCDDataStruct *)SiS300_LCD1280x960Data;
-- SiS_Pr->SiS_ExtLCD1400x1050Data = (SiS_LCDDataStruct *)SiS300_ExtLCD1400x1050Data;
-- SiS_Pr->SiS_ExtLCD1600x1200Data = (SiS_LCDDataStruct *)SiS300_ExtLCD1600x1200Data;
-- SiS_Pr->SiS_StLCD1400x1050Data = (SiS_LCDDataStruct *)SiS300_StLCD1400x1050Data;
-- SiS_Pr->SiS_StLCD1600x1200Data = (SiS_LCDDataStruct *)SiS300_StLCD1600x1200Data;
-- SiS_Pr->SiS_NoScaleData1400x1050 = (SiS_LCDDataStruct *)SiS300_NoScaleData1400x1050;
-- SiS_Pr->SiS_NoScaleData1600x1200 = (SiS_LCDDataStruct *)SiS300_NoScaleData1600x1200;
--
-- SiS_Pr->SiS_StPALData = (SiS_TVDataStruct *)SiS300_StPALData;
-- SiS_Pr->SiS_ExtPALData = (SiS_TVDataStruct *)SiS300_ExtPALData;
-- SiS_Pr->SiS_StNTSCData = (SiS_TVDataStruct *)SiS300_StNTSCData;
-- SiS_Pr->SiS_ExtNTSCData = (SiS_TVDataStruct *)SiS300_ExtNTSCData;
--/* SiS_Pr->SiS_St1HiTVData = (SiS_TVDataStruct *)SiS300_St1HiTVData; */
-- SiS_Pr->SiS_St2HiTVData = (SiS_TVDataStruct *)SiS300_St2HiTVData;
-- SiS_Pr->SiS_ExtHiTVData = (SiS_TVDataStruct *)SiS300_ExtHiTVData;
--
-- SiS_Pr->SiS_NTSCTiming = SiS300_NTSCTiming;
-- SiS_Pr->SiS_PALTiming = SiS300_PALTiming;
-- SiS_Pr->SiS_HiTVSt1Timing = SiS300_HiTVSt1Timing;
-- SiS_Pr->SiS_HiTVSt2Timing = SiS300_HiTVSt2Timing;
-- SiS_Pr->SiS_HiTVTextTiming = SiS300_HiTVTextTiming;
-- SiS_Pr->SiS_HiTVGroup3Data = SiS300_HiTVGroup3Data;
-- SiS_Pr->SiS_HiTVGroup3Simu = SiS300_HiTVGroup3Simu;
-- SiS_Pr->SiS_HiTVGroup3Text = SiS300_HiTVGroup3Text;
-
- SiS_Pr->SiS_PanelDelayTbl = (SiS_PanelDelayTblStruct *)SiS300_PanelDelayTbl;
- SiS_Pr->SiS_PanelDelayTblLVDS = (SiS_PanelDelayTblStruct *)SiS300_PanelDelayTblLVDS;
-
-- SiS_Pr->SiS_LVDS800x600Data_1 = (SiS_LVDSDataStruct *)SiS300_LVDS800x600Data_1;
-- SiS_Pr->SiS_LVDS800x600Data_2 = (SiS_LVDSDataStruct *)SiS300_LVDS800x600Data_2;
-- SiS_Pr->SiS_LVDS1024x768Data_1 = (SiS_LVDSDataStruct *)SiS300_LVDS1024x768Data_1;
-- SiS_Pr->SiS_LVDS1024x768Data_2 = (SiS_LVDSDataStruct *)SiS300_LVDS1024x768Data_2;
-- SiS_Pr->SiS_LVDS1280x1024Data_1 = (SiS_LVDSDataStruct *)SiS300_LVDS1280x1024Data_1;
-- SiS_Pr->SiS_LVDS1280x1024Data_2 = (SiS_LVDSDataStruct *)SiS300_LVDS1280x1024Data_2;
-- SiS_Pr->SiS_LVDS1280x960Data_1 = (SiS_LVDSDataStruct *)SiS300_LVDS1280x1024Data_1;
-- SiS_Pr->SiS_LVDS1280x960Data_2 = (SiS_LVDSDataStruct *)SiS300_LVDS1280x1024Data_2;
-- SiS_Pr->SiS_LVDS1400x1050Data_1 = (SiS_LVDSDataStruct *)SiS300_LVDS1400x1050Data_1;
-- SiS_Pr->SiS_LVDS1400x1050Data_2 = (SiS_LVDSDataStruct *)SiS300_LVDS1400x1050Data_2;
-- SiS_Pr->SiS_LVDS1600x1200Data_1 = (SiS_LVDSDataStruct *)SiS300_LVDS1600x1200Data_1;
-- SiS_Pr->SiS_LVDS1600x1200Data_2 = (SiS_LVDSDataStruct *)SiS300_LVDS1600x1200Data_2;
-- SiS_Pr->SiS_LVDS1280x768Data_1 = (SiS_LVDSDataStruct *)SiS300_LVDS1280x768Data_1;
-- SiS_Pr->SiS_LVDS1280x768Data_2 = (SiS_LVDSDataStruct *)SiS300_LVDS1280x768Data_2;
-- SiS_Pr->SiS_LVDS1024x600Data_1 = (SiS_LVDSDataStruct *)SiS300_LVDS1024x600Data_1;
-- SiS_Pr->SiS_LVDS1024x600Data_2 = (SiS_LVDSDataStruct *)SiS300_LVDS1024x600Data_2;
-- SiS_Pr->SiS_LVDS1152x768Data_1 = (SiS_LVDSDataStruct *)SiS300_LVDS1152x768Data_1;
-- SiS_Pr->SiS_LVDS1152x768Data_2 = (SiS_LVDSDataStruct *)SiS300_LVDS1152x768Data_2;
-- SiS_Pr->SiS_LVDSXXXxXXXData_1 = (SiS_LVDSDataStruct *)SiS300_LVDSXXXxXXXData_1;
-- SiS_Pr->SiS_LVDS320x480Data_1 = (SiS_LVDSDataStruct *)SiS300_LVDS320x480Data_1;
-- SiS_Pr->SiS_LVDS640x480Data_1 = (SiS_LVDSDataStruct *)SiS300_LVDS640x480Data_1;
-- SiS_Pr->SiS_LCDA1400x1050Data_1 = (SiS_LVDSDataStruct *)SiS300_LCDA1400x1050Data_1;
-- SiS_Pr->SiS_LCDA1400x1050Data_2 = (SiS_LVDSDataStruct *)SiS300_LCDA1400x1050Data_2;
-- SiS_Pr->SiS_LCDA1600x1200Data_1 = (SiS_LVDSDataStruct *)SiS300_LCDA1600x1200Data_1;
-- SiS_Pr->SiS_LCDA1600x1200Data_2 = (SiS_LVDSDataStruct *)SiS300_LCDA1600x1200Data_2;
-- SiS_Pr->SiS_CHTVUNTSCData = (SiS_LVDSDataStruct *)SiS300_CHTVUNTSCData;
-- SiS_Pr->SiS_CHTVONTSCData = (SiS_LVDSDataStruct *)SiS300_CHTVONTSCData;
- SiS_Pr->SiS_CHTVUPALData = (SiS_LVDSDataStruct *)SiS300_CHTVUPALData;
- SiS_Pr->SiS_CHTVOPALData = (SiS_LVDSDataStruct *)SiS300_CHTVOPALData;
-- SiS_Pr->SiS_CHTVUPALMData = (SiS_LVDSDataStruct *)SiS300_CHTVUNTSCData; /* not supported on 300 series */
-- SiS_Pr->SiS_CHTVOPALMData = (SiS_LVDSDataStruct *)SiS300_CHTVONTSCData; /* not supported on 300 series */
-+ SiS_Pr->SiS_CHTVUPALMData = SiS_CHTVUNTSCData; /* not supported on 300 series */
-+ SiS_Pr->SiS_CHTVOPALMData = SiS_CHTVONTSCData; /* not supported on 300 series */
- SiS_Pr->SiS_CHTVUPALNData = (SiS_LVDSDataStruct *)SiS300_CHTVUPALData; /* not supported on 300 series */
- SiS_Pr->SiS_CHTVOPALNData = (SiS_LVDSDataStruct *)SiS300_CHTVOPALData; /* not supported on 300 series */
- SiS_Pr->SiS_CHTVSOPALData = (SiS_LVDSDataStruct *)SiS300_CHTVSOPALData;
-+
- SiS_Pr->SiS_PanelType00_1 = (SiS_LVDSDesStruct *)SiS300_PanelType00_1;
- SiS_Pr->SiS_PanelType01_1 = (SiS_LVDSDesStruct *)SiS300_PanelType01_1;
- SiS_Pr->SiS_PanelType02_1 = (SiS_LVDSDesStruct *)SiS300_PanelType02_1;
-@@ -289,32 +364,28 @@ InitTo300Pointer(SiS_Private *SiS_Pr, PS
- SiS_Pr->SiS_PanelType0d_2 = (SiS_LVDSDesStruct *)SiS300_PanelType0d_2;
- SiS_Pr->SiS_PanelType0e_2 = (SiS_LVDSDesStruct *)SiS300_PanelType0e_2;
- SiS_Pr->SiS_PanelType0f_2 = (SiS_LVDSDesStruct *)SiS300_PanelType0f_2;
-- SiS_Pr->SiS_PanelTypeNS_1 = (SiS_LVDSDesStruct *)SiS300_PanelTypeNS_1;
-- SiS_Pr->SiS_PanelTypeNS_2 = (SiS_LVDSDesStruct *)SiS300_PanelTypeNS_2;
-- SiS_Pr->SiS_CHTVUNTSCDesData = (SiS_LVDSDesStruct *)SiS300_CHTVUNTSCDesData;
-- SiS_Pr->SiS_CHTVONTSCDesData = (SiS_LVDSDesStruct *)SiS300_CHTVONTSCDesData;
-- SiS_Pr->SiS_CHTVUPALDesData = (SiS_LVDSDesStruct *)SiS300_CHTVUPALDesData;
-- SiS_Pr->SiS_CHTVOPALDesData = (SiS_LVDSDesStruct *)SiS300_CHTVOPALDesData;
-+
-+ if(SiS_Pr->SiS_CustomT == CUT_BARCO1366) {
-+ SiS_Pr->SiS_PanelType04_1 = (SiS_LVDSDesStruct *)SiS300_PanelType04_1a;
-+ SiS_Pr->SiS_PanelType04_2 = (SiS_LVDSDesStruct *)SiS300_PanelType04_2a;
-+ }
-+ if(SiS_Pr->SiS_CustomT == CUT_BARCO1024) {
-+ SiS_Pr->SiS_PanelType04_1 = (SiS_LVDSDesStruct *)SiS300_PanelType04_1b;
-+ SiS_Pr->SiS_PanelType04_2 = (SiS_LVDSDesStruct *)SiS300_PanelType04_2b;
-+ }
-+
- SiS_Pr->SiS_LVDSCRT1800x600_1 = (SiS_LVDSCRT1DataStruct *)SiS300_LVDSCRT1800x600_1;
- SiS_Pr->SiS_LVDSCRT11024x768_1 = (SiS_LVDSCRT1DataStruct *)SiS300_LVDSCRT11024x768_1;
- SiS_Pr->SiS_LVDSCRT11280x1024_1 = (SiS_LVDSCRT1DataStruct *)SiS300_LVDSCRT11280x1024_1;
-- SiS_Pr->SiS_LVDSCRT11024x600_1 = (SiS_LVDSCRT1DataStruct *)SiS300_LVDSCRT11024x600_1;
-- SiS_Pr->SiS_LVDSCRT11152x768_1 = (SiS_LVDSCRT1DataStruct *)SiS300_LVDSCRT11152x768_1;
- SiS_Pr->SiS_LVDSCRT1800x600_1_H = (SiS_LVDSCRT1DataStruct *)SiS300_LVDSCRT1800x600_1_H;
- SiS_Pr->SiS_LVDSCRT11024x768_1_H = (SiS_LVDSCRT1DataStruct *)SiS300_LVDSCRT11024x768_1_H;
- SiS_Pr->SiS_LVDSCRT11280x1024_1_H = (SiS_LVDSCRT1DataStruct *)SiS300_LVDSCRT11280x1024_1_H;
-- SiS_Pr->SiS_LVDSCRT11024x600_1_H = (SiS_LVDSCRT1DataStruct *)SiS300_LVDSCRT11024x600_1_H;
-- SiS_Pr->SiS_LVDSCRT11152x768_1_H = (SiS_LVDSCRT1DataStruct *)SiS300_LVDSCRT11152x768_1_H;
- SiS_Pr->SiS_LVDSCRT1800x600_2 = (SiS_LVDSCRT1DataStruct *)SiS300_LVDSCRT1800x600_2;
- SiS_Pr->SiS_LVDSCRT11024x768_2 = (SiS_LVDSCRT1DataStruct *)SiS300_LVDSCRT11024x768_2;
- SiS_Pr->SiS_LVDSCRT11280x1024_2 = (SiS_LVDSCRT1DataStruct *)SiS300_LVDSCRT11280x1024_2;
-- SiS_Pr->SiS_LVDSCRT11024x600_2 = (SiS_LVDSCRT1DataStruct *)SiS300_LVDSCRT11024x600_2;
-- SiS_Pr->SiS_LVDSCRT11152x768_2 = (SiS_LVDSCRT1DataStruct *)SiS300_LVDSCRT11152x768_2;
- SiS_Pr->SiS_LVDSCRT1800x600_2_H = (SiS_LVDSCRT1DataStruct *)SiS300_LVDSCRT1800x600_2_H;
- SiS_Pr->SiS_LVDSCRT11024x768_2_H = (SiS_LVDSCRT1DataStruct *)SiS300_LVDSCRT11024x768_2_H;
- SiS_Pr->SiS_LVDSCRT11280x1024_2_H = (SiS_LVDSCRT1DataStruct *)SiS300_LVDSCRT11280x1024_2_H;
-- SiS_Pr->SiS_LVDSCRT11024x600_2_H = (SiS_LVDSCRT1DataStruct *)SiS300_LVDSCRT11024x600_2_H;
-- SiS_Pr->SiS_LVDSCRT11152x768_2_H = (SiS_LVDSCRT1DataStruct *)SiS300_LVDSCRT11152x768_2_H;
- SiS_Pr->SiS_CHTVCRT1UNTSC = (SiS_LVDSCRT1DataStruct *)SiS300_CHTVCRT1UNTSC;
- SiS_Pr->SiS_CHTVCRT1ONTSC = (SiS_LVDSCRT1DataStruct *)SiS300_CHTVCRT1ONTSC;
- SiS_Pr->SiS_CHTVCRT1UPAL = (SiS_LVDSCRT1DataStruct *)SiS300_CHTVCRT1UPAL;
-@@ -339,7 +410,6 @@ InitTo300Pointer(SiS_Private *SiS_Pr, PS
- SiS_Pr->SiS_CHTVVCLKOPALN = SiS300_CHTVVCLKOPAL; /* not supported on 300 series */
- SiS_Pr->SiS_CHTVVCLKSOPAL = SiS300_CHTVVCLKSOPAL;
-
-- /* TW: New from 300/301LV BIOS */
- SiS_Pr->SiS_CRT2Part2_1024x768_1 = (SiS_Part2PortTblStruct *)SiS300_CRT2Part2_1024x768_1;
- SiS_Pr->SiS_CRT2Part2_1280x1024_1 = (SiS_Part2PortTblStruct *)SiS300_CRT2Part2_1280x1024_1;
- SiS_Pr->SiS_CRT2Part2_1400x1050_1 = (SiS_Part2PortTblStruct *)SiS300_CRT2Part2_1400x1050_1;
-@@ -353,7 +423,7 @@ InitTo300Pointer(SiS_Private *SiS_Pr, PS
- SiS_Pr->SiS_CRT2Part2_1400x1050_3 = (SiS_Part2PortTblStruct *)SiS300_CRT2Part2_1400x1050_3;
- SiS_Pr->SiS_CRT2Part2_1600x1200_3 = (SiS_Part2PortTblStruct *)SiS300_CRT2Part2_1600x1200_3;
-
-- /* TW: LCDResInfo will on 300 series be translated to 310/325 series definitions */
-+ /* TW: LCDResInfo will on 300 series be translated to 315 series definitions */
- SiS_Pr->SiS_Panel320x480 = Panel_320x480;
- SiS_Pr->SiS_Panel640x480 = Panel_640x480;
- SiS_Pr->SiS_Panel800x600 = Panel_800x600;
-@@ -362,13 +432,17 @@ InitTo300Pointer(SiS_Private *SiS_Pr, PS
- SiS_Pr->SiS_Panel1280x960 = Panel_1280x960;
- SiS_Pr->SiS_Panel1024x600 = Panel_1024x600;
- SiS_Pr->SiS_Panel1152x768 = Panel_1152x768;
-- SiS_Pr->SiS_Panel1600x1200 = 16; /* TW: Something illegal */
-- SiS_Pr->SiS_Panel1400x1050 = 16; /* TW: Something illegal */
-- SiS_Pr->SiS_Panel1152x864 = 16; /* TW: Something illegal */
-- SiS_Pr->SiS_Panel1280x768 = 16; /* TW: Something illegal */
-+ SiS_Pr->SiS_Panel1280x768 = Panel_1280x768;
-+ SiS_Pr->SiS_Panel1600x1200 = 255; /* TW: Something illegal */
-+ SiS_Pr->SiS_Panel1400x1050 = 255; /* TW: Something illegal */
-+ SiS_Pr->SiS_Panel640x480_2 = 255; /* TW: Something illegal */
-+ SiS_Pr->SiS_Panel640x480_3 = 255; /* TW: Something illegal */
-+ SiS_Pr->SiS_Panel1152x864 = 255; /* TW: Something illegal */
- SiS_Pr->SiS_PanelMax = Panel_320x480; /* TW: highest value */
- SiS_Pr->SiS_PanelMinLVDS = Panel_800x600; /* TW: Lowest value LVDS */
- SiS_Pr->SiS_PanelMin301 = Panel_1024x768; /* TW: lowest value 301 */
-+ SiS_Pr->SiS_PanelCustom = Panel_Custom;
-+ SiS_Pr->SiS_PanelBarco1366 = Panel_Barco1366;
- }
- #endif
-
-@@ -376,29 +450,33 @@ InitTo300Pointer(SiS_Private *SiS_Pr, PS
- static void
- InitTo310Pointer(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension)
- {
-+ InitCommonPointer(SiS_Pr, HwDeviceExtension);
-+
- SiS_Pr->SiS_SModeIDTable = (SiS_StStruct *)SiS310_SModeIDTable;
-- SiS_Pr->SiS_StandTable = (SiS_StandTableStruct *)SiS310_StandTable;
- SiS_Pr->SiS_EModeIDTable = (SiS_ExtStruct *)SiS310_EModeIDTable;
- SiS_Pr->SiS_RefIndex = (SiS_Ext2Struct *)SiS310_RefIndex;
- SiS_Pr->SiS_CRT1Table = (SiS_CRT1TableStruct *)SiS310_CRT1Table;
- /* TW: MCLK is different */
-- if(HwDeviceExtension->jChipType == SIS_330) {
-+#ifdef LINUXBIOS
-+ if(HwDeviceExtension->jChipType == SIS_660) {
-+ SiS_Pr->SiS_MCLKData_0 = (SiS_MCLKDataStruct *)SiS310_MCLKData_0_660; /* 660 */
-+ } else if(HwDeviceExtension->jChipType == SIS_330) {
-+#endif
- SiS_Pr->SiS_MCLKData_0 = (SiS_MCLKDataStruct *)SiS310_MCLKData_0_330; /* 330 */
-+#ifdef LINUXBIOS
- } else if(HwDeviceExtension->jChipType > SIS_315PRO) {
- SiS_Pr->SiS_MCLKData_0 = (SiS_MCLKDataStruct *)SiS310_MCLKData_0_650; /* 550, 650, 740 */
- } else {
- SiS_Pr->SiS_MCLKData_0 = (SiS_MCLKDataStruct *)SiS310_MCLKData_0_315; /* 315 */
- }
-+#endif
- SiS_Pr->SiS_MCLKData_1 = (SiS_MCLKDataStruct *)SiS310_MCLKData_1;
-+#ifdef LINUXBIOS
- SiS_Pr->SiS_ECLKData = (SiS_ECLKDataStruct *)SiS310_ECLKData;
-+#endif
- SiS_Pr->SiS_VCLKData = (SiS_VCLKDataStruct *)SiS310_VCLKData;
- SiS_Pr->SiS_VBVCLKData = (SiS_VBVCLKDataStruct *)SiS310_VBVCLKData;
- SiS_Pr->SiS_ScreenOffset = SiS310_ScreenOffset;
-- SiS_Pr->SiS_StResInfo = (SiS_StResInfoStruct *)SiS310_StResInfo;
-- SiS_Pr->SiS_ModeResInfo = (SiS_ModeResInfoStruct *)SiS310_ModeResInfo;
--
-- SiS_Pr->pSiS_OutputSelect = &SiS310_OutputSelect;
-- SiS_Pr->pSiS_SoftSetting = &SiS310_SoftSetting;
-
- SiS_Pr->SiS_SR15 = SiS310_SR15;
-
-@@ -427,16 +505,6 @@ InitTo310Pointer(SiS_Private *SiS_Pr, PS
- SiS_Pr->pSiS_YCSenseData2 = &SiS310_YCSenseData2;
- #endif
-
-- SiS_Pr->SiS_NTSCPhase = SiS310_NTSCPhase;
-- SiS_Pr->SiS_PALPhase = SiS310_PALPhase;
-- SiS_Pr->SiS_NTSCPhase2 = SiS310_NTSCPhase2;
-- SiS_Pr->SiS_PALPhase2 = SiS310_PALPhase2;
-- SiS_Pr->SiS_PALMPhase = SiS310_PALMPhase;
-- SiS_Pr->SiS_PALNPhase = SiS310_PALNPhase;
-- SiS_Pr->SiS_PALMPhase2 = SiS310_PALMPhase2;
-- SiS_Pr->SiS_PALNPhase2 = SiS310_PALNPhase2;
-- SiS_Pr->SiS_SpecialPhase = SiS310_SpecialPhase;
--
- SiS_Pr->SiS_StLCD1024x768Data = (SiS_LCDDataStruct *)SiS310_StLCD1024x768Data;
- SiS_Pr->SiS_ExtLCD1024x768Data = (SiS_LCDDataStruct *)SiS310_ExtLCD1024x768Data;
- SiS_Pr->SiS_St2LCD1024x768Data = (SiS_LCDDataStruct *)SiS310_St2LCD1024x768Data;
-@@ -445,62 +513,10 @@ InitTo310Pointer(SiS_Private *SiS_Pr, PS
- SiS_Pr->SiS_St2LCD1280x1024Data = (SiS_LCDDataStruct *)SiS310_St2LCD1280x1024Data;
- SiS_Pr->SiS_NoScaleData1024x768 = (SiS_LCDDataStruct *)SiS310_NoScaleData1024x768;
- SiS_Pr->SiS_NoScaleData1280x1024 = (SiS_LCDDataStruct *)SiS310_NoScaleData1280x1024;
-- SiS_Pr->SiS_LCD1280x960Data = (SiS_LCDDataStruct *)SiS310_LCD1280x960Data;
-- SiS_Pr->SiS_ExtLCD1400x1050Data = (SiS_LCDDataStruct *)SiS310_ExtLCD1400x1050Data;
-- SiS_Pr->SiS_ExtLCD1600x1200Data = (SiS_LCDDataStruct *)SiS310_ExtLCD1600x1200Data;
-- SiS_Pr->SiS_StLCD1400x1050Data = (SiS_LCDDataStruct *)SiS310_StLCD1400x1050Data;
-- SiS_Pr->SiS_StLCD1600x1200Data = (SiS_LCDDataStruct *)SiS310_StLCD1600x1200Data;
-- SiS_Pr->SiS_NoScaleData1400x1050 = (SiS_LCDDataStruct *)SiS310_NoScaleData1400x1050;
-- SiS_Pr->SiS_NoScaleData1600x1200 = (SiS_LCDDataStruct *)SiS310_NoScaleData1600x1200;
--
-- SiS_Pr->SiS_StPALData = (SiS_TVDataStruct *)SiS310_StPALData;
-- SiS_Pr->SiS_ExtPALData = (SiS_TVDataStruct *)SiS310_ExtPALData;
-- SiS_Pr->SiS_StNTSCData = (SiS_TVDataStruct *)SiS310_StNTSCData;
-- SiS_Pr->SiS_ExtNTSCData = (SiS_TVDataStruct *)SiS310_ExtNTSCData;
--/* SiS_Pr->SiS_St1HiTVData = (SiS_TVDataStruct *)SiS310_St1HiTVData; */
-- SiS_Pr->SiS_St2HiTVData = (SiS_TVDataStruct *)SiS310_St2HiTVData;
-- SiS_Pr->SiS_ExtHiTVData = (SiS_TVDataStruct *)SiS310_ExtHiTVData;
--
-- SiS_Pr->SiS_NTSCTiming = SiS310_NTSCTiming;
-- SiS_Pr->SiS_PALTiming = SiS310_PALTiming;
-- SiS_Pr->SiS_HiTVSt1Timing = SiS310_HiTVSt1Timing;
-- SiS_Pr->SiS_HiTVSt2Timing = SiS310_HiTVSt2Timing;
-- SiS_Pr->SiS_HiTVTextTiming = SiS310_HiTVTextTiming;
-- SiS_Pr->SiS_HiTVExtTiming = SiS310_HiTVExtTiming;
-- SiS_Pr->SiS_HiTVGroup3Data = SiS310_HiTVGroup3Data;
-- SiS_Pr->SiS_HiTVGroup3Simu = SiS310_HiTVGroup3Simu;
-- SiS_Pr->SiS_HiTVGroup3Text = SiS310_HiTVGroup3Text;
-
-- SiS_Pr->SiS_PanelDelayTbl = (SiS_PanelDelayTblStruct *)SiS310_PanelDelayTbl;
-+ SiS_Pr->SiS_PanelDelayTbl = (SiS_PanelDelayTblStruct *)SiS310_PanelDelayTbl;
- SiS_Pr->SiS_PanelDelayTblLVDS = (SiS_PanelDelayTblStruct *)SiS310_PanelDelayTblLVDS;
-
-- SiS_Pr->SiS_LVDS800x600Data_1 = (SiS_LVDSDataStruct *)SiS310_LVDS800x600Data_1;
-- SiS_Pr->SiS_LVDS800x600Data_2 = (SiS_LVDSDataStruct *)SiS310_LVDS800x600Data_2;
-- SiS_Pr->SiS_LVDS1024x768Data_1 = (SiS_LVDSDataStruct *)SiS310_LVDS1024x768Data_1;
-- SiS_Pr->SiS_LVDS1024x768Data_2 = (SiS_LVDSDataStruct *)SiS310_LVDS1024x768Data_2;
-- SiS_Pr->SiS_LVDS1280x1024Data_1 = (SiS_LVDSDataStruct *)SiS310_LVDS1280x1024Data_1;
-- SiS_Pr->SiS_LVDS1280x1024Data_2 = (SiS_LVDSDataStruct *)SiS310_LVDS1280x1024Data_2;
-- SiS_Pr->SiS_LVDS1280x960Data_1 = (SiS_LVDSDataStruct *)SiS310_LVDS1280x960Data_1;
-- SiS_Pr->SiS_LVDS1280x960Data_2 = (SiS_LVDSDataStruct *)SiS310_LVDS1280x960Data_2;
-- SiS_Pr->SiS_LVDS1400x1050Data_1 = (SiS_LVDSDataStruct *)SiS310_LVDS1400x1050Data_1;
-- SiS_Pr->SiS_LVDS1400x1050Data_2 = (SiS_LVDSDataStruct *)SiS310_LVDS1400x1050Data_2;
-- SiS_Pr->SiS_LVDS1600x1200Data_1 = (SiS_LVDSDataStruct *)SiS310_LVDS1600x1200Data_1;
-- SiS_Pr->SiS_LVDS1600x1200Data_2 = (SiS_LVDSDataStruct *)SiS310_LVDS1600x1200Data_2;
-- SiS_Pr->SiS_LVDS1280x768Data_1 = (SiS_LVDSDataStruct *)SiS310_LVDS1280x768Data_1;
-- SiS_Pr->SiS_LVDS1280x768Data_2 = (SiS_LVDSDataStruct *)SiS310_LVDS1280x768Data_2;
-- SiS_Pr->SiS_LVDS1024x600Data_1 = (SiS_LVDSDataStruct *)SiS310_LVDS1024x600Data_1;
-- SiS_Pr->SiS_LVDS1024x600Data_2 = (SiS_LVDSDataStruct *)SiS310_LVDS1024x600Data_2;
-- SiS_Pr->SiS_LVDS1152x768Data_1 = (SiS_LVDSDataStruct *)SiS310_LVDS1152x768Data_1;
-- SiS_Pr->SiS_LVDS1152x768Data_2 = (SiS_LVDSDataStruct *)SiS310_LVDS1152x768Data_2;
-- SiS_Pr->SiS_LVDSXXXxXXXData_1 = (SiS_LVDSDataStruct *)SiS310_LVDSXXXxXXXData_1;
-- SiS_Pr->SiS_LVDS320x480Data_1 = (SiS_LVDSDataStruct *)SiS310_LVDS320x480Data_1;
-- SiS_Pr->SiS_LVDS640x480Data_1 = (SiS_LVDSDataStruct *)SiS310_LVDS640x480Data_1;
-- SiS_Pr->SiS_LCDA1400x1050Data_1 = (SiS_LVDSDataStruct *)SiS310_LCDA1400x1050Data_1;
-- SiS_Pr->SiS_LCDA1400x1050Data_2 = (SiS_LVDSDataStruct *)SiS310_LCDA1400x1050Data_2;
-- SiS_Pr->SiS_LCDA1600x1200Data_1 = (SiS_LVDSDataStruct *)SiS310_LCDA1600x1200Data_1;
-- SiS_Pr->SiS_LCDA1600x1200Data_2 = (SiS_LVDSDataStruct *)SiS310_LCDA1600x1200Data_2;
-- SiS_Pr->SiS_CHTVUNTSCData = (SiS_LVDSDataStruct *)SiS310_CHTVUNTSCData;
-- SiS_Pr->SiS_CHTVONTSCData = (SiS_LVDSDataStruct *)SiS310_CHTVONTSCData;
- SiS_Pr->SiS_CHTVUPALData = (SiS_LVDSDataStruct *)SiS310_CHTVUPALData;
- SiS_Pr->SiS_CHTVOPALData = (SiS_LVDSDataStruct *)SiS310_CHTVOPALData;
- SiS_Pr->SiS_CHTVUPALMData = (SiS_LVDSDataStruct *)SiS310_CHTVUPALMData;
-@@ -508,6 +524,7 @@ InitTo310Pointer(SiS_Private *SiS_Pr, PS
- SiS_Pr->SiS_CHTVUPALNData = (SiS_LVDSDataStruct *)SiS310_CHTVUPALNData;
- SiS_Pr->SiS_CHTVOPALNData = (SiS_LVDSDataStruct *)SiS310_CHTVOPALNData;
- SiS_Pr->SiS_CHTVSOPALData = (SiS_LVDSDataStruct *)SiS310_CHTVSOPALData;
-+
- SiS_Pr->SiS_PanelType00_1 = (SiS_LVDSDesStruct *)SiS310_PanelType00_1;
- SiS_Pr->SiS_PanelType01_1 = (SiS_LVDSDesStruct *)SiS310_PanelType01_1;
- SiS_Pr->SiS_PanelType02_1 = (SiS_LVDSDesStruct *)SiS310_PanelType02_1;
-@@ -540,19 +557,7 @@ InitTo310Pointer(SiS_Private *SiS_Pr, PS
- SiS_Pr->SiS_PanelType0d_2 = (SiS_LVDSDesStruct *)SiS310_PanelType0d_2;
- SiS_Pr->SiS_PanelType0e_2 = (SiS_LVDSDesStruct *)SiS310_PanelType0e_2;
- SiS_Pr->SiS_PanelType0f_2 = (SiS_LVDSDesStruct *)SiS310_PanelType0f_2;
-- SiS_Pr->SiS_PanelTypeNS_1 = (SiS_LVDSDesStruct *)SiS310_PanelTypeNS_1;
-- SiS_Pr->SiS_PanelTypeNS_2 = (SiS_LVDSDesStruct *)SiS310_PanelTypeNS_2;
--
-- SiS_Pr->LVDS1024x768Des_1 = (SiS_LVDSDesStruct *)SiS310_PanelType1076_1;
-- SiS_Pr->LVDS1280x1024Des_1 = (SiS_LVDSDesStruct *)SiS310_PanelType1210_1;
-- SiS_Pr->LVDS1400x1050Des_1 = (SiS_LVDSDesStruct *)SiS310_PanelType1296_1 ;
-- SiS_Pr->LVDS1600x1200Des_1 = (SiS_LVDSDesStruct *)SiS310_PanelType1600_1 ;
-- SiS_Pr->LVDS1024x768Des_2 = (SiS_LVDSDesStruct *)SiS310_PanelType1076_2;
-- SiS_Pr->LVDS1280x1024Des_2 = (SiS_LVDSDesStruct *)SiS310_PanelType1210_2;
-- SiS_Pr->LVDS1400x1050Des_2 = (SiS_LVDSDesStruct *)SiS310_PanelType1296_2;
-- SiS_Pr->LVDS1600x1200Des_2 = (SiS_LVDSDesStruct *)SiS310_PanelType1600_2 ;
-
-- /* TW: New from 650/301LV BIOS */
- SiS_Pr->SiS_CRT2Part2_1024x768_1 = (SiS_Part2PortTblStruct *)SiS310_CRT2Part2_1024x768_1;
- SiS_Pr->SiS_CRT2Part2_1280x1024_1 = (SiS_Part2PortTblStruct *)SiS310_CRT2Part2_1280x1024_1;
- SiS_Pr->SiS_CRT2Part2_1400x1050_1 = (SiS_Part2PortTblStruct *)SiS310_CRT2Part2_1400x1050_1;
-@@ -566,51 +571,32 @@ InitTo310Pointer(SiS_Private *SiS_Pr, PS
- SiS_Pr->SiS_CRT2Part2_1400x1050_3 = (SiS_Part2PortTblStruct *)SiS310_CRT2Part2_1400x1050_3;
- SiS_Pr->SiS_CRT2Part2_1600x1200_3 = (SiS_Part2PortTblStruct *)SiS310_CRT2Part2_1600x1200_3;
-
-- SiS_Pr->SiS_CHTVUNTSCDesData = (SiS_LVDSDesStruct *)SiS310_CHTVUNTSCDesData;
-- SiS_Pr->SiS_CHTVONTSCDesData = (SiS_LVDSDesStruct *)SiS310_CHTVONTSCDesData;
-- SiS_Pr->SiS_CHTVUPALDesData = (SiS_LVDSDesStruct *)SiS310_CHTVUPALDesData;
-- SiS_Pr->SiS_CHTVOPALDesData = (SiS_LVDSDesStruct *)SiS310_CHTVOPALDesData;
--
- SiS_Pr->SiS_LVDSCRT1800x600_1 = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT1800x600_1;
- SiS_Pr->SiS_LVDSCRT11024x768_1 = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT11024x768_1;
- SiS_Pr->SiS_LVDSCRT11280x1024_1 = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT11280x1024_1;
- SiS_Pr->SiS_LVDSCRT11400x1050_1 = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT11400x1050_1;
-- SiS_Pr->SiS_LVDSCRT11280x768_1 = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT11280x768_1;
-- SiS_Pr->SiS_LVDSCRT11024x600_1 = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT11024x600_1;
-- SiS_Pr->SiS_LVDSCRT11152x768_1 = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT11152x768_1;
- SiS_Pr->SiS_LVDSCRT11600x1200_1 = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT11600x1200_1;
- SiS_Pr->SiS_LVDSCRT1800x600_1_H = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT1800x600_1_H;
- SiS_Pr->SiS_LVDSCRT11024x768_1_H = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT11024x768_1_H;
- SiS_Pr->SiS_LVDSCRT11280x1024_1_H = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT11280x1024_1_H;
- SiS_Pr->SiS_LVDSCRT11400x1050_1_H = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT11400x1050_1_H;
-- SiS_Pr->SiS_LVDSCRT11280x768_1_H = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT11280x768_1_H;
-- SiS_Pr->SiS_LVDSCRT11024x600_1_H = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT11024x600_1_H;
-- SiS_Pr->SiS_LVDSCRT11152x768_1_H = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT11152x768_1_H;
- SiS_Pr->SiS_LVDSCRT11600x1200_1_H = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT11600x1200_1_H;
- SiS_Pr->SiS_LVDSCRT1800x600_2 = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT1800x600_2;
- SiS_Pr->SiS_LVDSCRT11024x768_2 = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT11024x768_2;
- SiS_Pr->SiS_LVDSCRT11280x1024_2 = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT11280x1024_2;
- SiS_Pr->SiS_LVDSCRT11400x1050_2 = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT11400x1050_2;
-- SiS_Pr->SiS_LVDSCRT11280x768_2 = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT11280x768_2;
-- SiS_Pr->SiS_LVDSCRT11024x600_2 = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT11024x600_2;
-- SiS_Pr->SiS_LVDSCRT11152x768_2 = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT11152x768_2;
- SiS_Pr->SiS_LVDSCRT11600x1200_2 = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT11600x1200_2;
- SiS_Pr->SiS_LVDSCRT1800x600_2_H = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT1800x600_2_H;
- SiS_Pr->SiS_LVDSCRT11024x768_2_H = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT11024x768_2_H;
- SiS_Pr->SiS_LVDSCRT11280x1024_2_H = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT11280x1024_2_H;
- SiS_Pr->SiS_LVDSCRT11400x1050_2_H = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT11400x1050_2_H;
-- SiS_Pr->SiS_LVDSCRT11280x768_2_H = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT11280x768_2_H;
-- SiS_Pr->SiS_LVDSCRT11024x600_2_H = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT11024x600_2_H;
-- SiS_Pr->SiS_LVDSCRT11152x768_2_H = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT11152x768_2_H;
- SiS_Pr->SiS_LVDSCRT11600x1200_2_H = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT11600x1200_2_H;
-- SiS_Pr->SiS_LVDSCRT1XXXxXXX_1 = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT1XXXxXXX_1;
-- SiS_Pr->SiS_LVDSCRT1XXXxXXX_1_H = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT1XXXxXXX_1_H;
-- SiS_Pr->SiS_LVDSCRT1320x480_1 = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT1320x480_1;
-- SiS_Pr->SiS_CHTVCRT1UNTSC = (SiS_LVDSCRT1DataStruct *)SiS310_CHTVCRT1UNTSC;
-- SiS_Pr->SiS_CHTVCRT1ONTSC = (SiS_LVDSCRT1DataStruct *)SiS310_CHTVCRT1ONTSC;
-- SiS_Pr->SiS_CHTVCRT1UPAL = (SiS_LVDSCRT1DataStruct *)SiS310_CHTVCRT1UPAL;
-- SiS_Pr->SiS_CHTVCRT1OPAL = (SiS_LVDSCRT1DataStruct *)SiS310_CHTVCRT1OPAL;
-- SiS_Pr->SiS_CHTVCRT1SOPAL = (SiS_LVDSCRT1DataStruct *)SiS310_CHTVCRT1SOPAL;
-+ SiS_Pr->SiS_CHTVCRT1UNTSC = (SiS_LVDSCRT1DataStruct *)SiS310_CHTVCRT1UNTSC;
-+ SiS_Pr->SiS_CHTVCRT1ONTSC = (SiS_LVDSCRT1DataStruct *)SiS310_CHTVCRT1ONTSC;
-+ SiS_Pr->SiS_CHTVCRT1UPAL = (SiS_LVDSCRT1DataStruct *)SiS310_CHTVCRT1UPAL;
-+ SiS_Pr->SiS_CHTVCRT1OPAL = (SiS_LVDSCRT1DataStruct *)SiS310_CHTVCRT1OPAL;
-+ SiS_Pr->SiS_CHTVCRT1SOPAL = (SiS_LVDSCRT1DataStruct *)SiS310_CHTVCRT1SOPAL;
-+
- SiS_Pr->SiS_CHTVReg_UNTSC = (SiS_CHTVRegDataStruct *)SiS310_CHTVReg_UNTSC;
- SiS_Pr->SiS_CHTVReg_ONTSC = (SiS_CHTVRegDataStruct *)SiS310_CHTVReg_ONTSC;
- SiS_Pr->SiS_CHTVReg_UPAL = (SiS_CHTVRegDataStruct *)SiS310_CHTVReg_UPAL;
-@@ -620,6 +606,7 @@ InitTo310Pointer(SiS_Private *SiS_Pr, PS
- SiS_Pr->SiS_CHTVReg_UPALN = (SiS_CHTVRegDataStruct *)SiS310_CHTVReg_UPALN;
- SiS_Pr->SiS_CHTVReg_OPALN = (SiS_CHTVRegDataStruct *)SiS310_CHTVReg_OPALN;
- SiS_Pr->SiS_CHTVReg_SOPAL = (SiS_CHTVRegDataStruct *)SiS310_CHTVReg_SOPAL;
-+
- SiS_Pr->SiS_LCDACRT1800x600_1 = (SiS_LCDACRT1DataStruct *)SiS310_LCDACRT1800x600_1;
- SiS_Pr->SiS_LCDACRT11024x768_1 = (SiS_LCDACRT1DataStruct *)SiS310_LCDACRT11024x768_1;
- SiS_Pr->SiS_LCDACRT11280x1024_1 = (SiS_LCDACRT1DataStruct *)SiS310_LCDACRT11280x1024_1;
-@@ -640,6 +627,7 @@ InitTo310Pointer(SiS_Private *SiS_Pr, PS
- SiS_Pr->SiS_LCDACRT11280x1024_2_H = (SiS_LCDACRT1DataStruct *)SiS310_LCDACRT11280x1024_2_H;
- SiS_Pr->SiS_LCDACRT11400x1050_2_H = (SiS_LCDACRT1DataStruct *)SiS310_LCDACRT11400x1050_2_H;
- SiS_Pr->SiS_LCDACRT11600x1200_2_H = (SiS_LCDACRT1DataStruct *)SiS310_LCDACRT11600x1200_2_H;
-+
- SiS_Pr->SiS_CHTVVCLKUNTSC = SiS310_CHTVVCLKUNTSC;
- SiS_Pr->SiS_CHTVVCLKONTSC = SiS310_CHTVVCLKONTSC;
- SiS_Pr->SiS_CHTVVCLKUPAL = SiS310_CHTVVCLKUPAL;
-@@ -662,9 +650,13 @@ InitTo310Pointer(SiS_Private *SiS_Pr, PS
- SiS_Pr->SiS_Panel1152x864 = Panel_1152x864;
- SiS_Pr->SiS_Panel1280x768 = Panel_1280x768;
- SiS_Pr->SiS_Panel1024x600 = Panel_1024x600;
-+ SiS_Pr->SiS_Panel640x480_2 = Panel_640x480_2;
-+ SiS_Pr->SiS_Panel640x480_3 = Panel_640x480_3;
- SiS_Pr->SiS_PanelMax = Panel_320x480; /* TW: highest value */
- SiS_Pr->SiS_PanelMinLVDS = Panel_800x600; /* TW: lowest value LVDS/LCDA */
- SiS_Pr->SiS_PanelMin301 = Panel_1024x768; /* TW: lowest value 301 */
-+ SiS_Pr->SiS_PanelCustom = Panel_Custom;
-+ SiS_Pr->SiS_PanelBarco1366 = 255;
- }
- #endif
-
-@@ -727,7 +719,8 @@ SiSInit(SiS_Private *SiS_Pr, PSIS_HW_DEV
- (HwDeviceExtension->jChipType == SIS_550) ||
- (HwDeviceExtension->jChipType == SIS_650) ||
- (HwDeviceExtension->jChipType == SIS_740) ||
-- (HwDeviceExtension->jChipType == SIS_330))
-+ (HwDeviceExtension->jChipType == SIS_330) ||
-+ (HwDeviceExtension->jChipType == SIS_660))
- InitTo310Pointer(SiS_Pr, HwDeviceExtension);
- #endif
-
-@@ -896,7 +889,8 @@ SiSInit(SiS_Private *SiS_Pr, PSIS_HW_DEV
- (HwDeviceExtension->jChipType == SIS_550) ||
- (HwDeviceExtension->jChipType == SIS_650) ||
- (HwDeviceExtension->jChipType == SIS_740) ||
-- (HwDeviceExtension->jChipType == SIS_330)) {
-+ (HwDeviceExtension->jChipType == SIS_330) ||
-+ (HwDeviceExtension->jChipType == SIS_660)) {
- for(i=0x12; i<=0x1B; i++) SiS_SetReg1(SiS_Pr->SiS_P3c4,i,0);
- for(i=0x79; i<=0x7C; i++) SiS_SetReg1(SiS_Pr->SiS_P3d4,i,0);
- }
-@@ -953,14 +947,15 @@ SiSInit(SiS_Private *SiS_Pr, PSIS_HW_DEV
- if((HwDeviceExtension->jChipType == SIS_315H) ||
- (HwDeviceExtension->jChipType == SIS_315) ||
- (HwDeviceExtension->jChipType == SIS_315PRO) ||
-- (HwDeviceExtension->jChipType == SIS_330) ) {
-+ (HwDeviceExtension->jChipType == SIS_330)) {
- if((*SiS_Pr->pSiS_SoftSetting & SoftDRAMType) == 0) {
- temp = (UCHAR)SiS_GetReg1(SiS_Pr->SiS_P3c4,0x3A) & 0x03;
- }
- }
- if((HwDeviceExtension->jChipType == SIS_550) ||
- (HwDeviceExtension->jChipType == SIS_740) ||
-- (HwDeviceExtension->jChipType == SIS_650)) {
-+ (HwDeviceExtension->jChipType == SIS_650) ||
-+ (HwDeviceExtension->jChipType == SIS_660)) {
- if((*SiS_Pr->pSiS_SoftSetting & SoftDRAMType) == 0) {
- temp = (UCHAR)SiS_GetReg1(SiS_Pr->SiS_P3c4,0x13) & 0x07;
- }
-@@ -977,7 +972,7 @@ SiSInit(SiS_Private *SiS_Pr, PSIS_HW_DEV
- if((HwDeviceExtension->jChipType != SIS_540) &&
- (HwDeviceExtension->jChipType != SIS_630) &&
- (HwDeviceExtension->jChipType != SIS_730)){
-- for(i=0x15;i<0x1C;i++) {
-+ for(i=0x15; i<0x1C; i++) {
- SiS_SetReg1(SiS_Pr->SiS_P3c4,i,SiS_Pr->SiS_SR15[i-0x15][SiS_Pr->SiS_RAMType]);
- }
- }
-@@ -1023,7 +1018,8 @@ SiSInit(SiS_Private *SiS_Pr, PSIS_HW_DEV
- (HwDeviceExtension->jChipType == SIS_550) ||
- (HwDeviceExtension->jChipType == SIS_650) ||
- (HwDeviceExtension->jChipType == SIS_740) ||
-- (HwDeviceExtension->jChipType == SIS_330))
-+ (HwDeviceExtension->jChipType == SIS_330) ||
-+ (HwDeviceExtension->jChipType == SIS_660))
- SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x2E,0x08); /* use VB */
- #endif
-
-@@ -1180,7 +1176,8 @@ SiS_Set_LVDS_TRUMPION(SiS_Private *SiS_P
- #ifdef SIS315H
- if((HwDeviceExtension->jChipType == SIS_650) ||
- (HwDeviceExtension->jChipType == SIS_740) ||
-- (HwDeviceExtension->jChipType == SIS_330)) {
-+ (HwDeviceExtension->jChipType == SIS_330) ||
-+ (HwDeviceExtension->jChipType == SIS_660)) {
- #if 0 /* TW: This is not required */
- /* TW: Read POWER_ON_TRAP and copy to CR37 */
- temp = (UCHAR)SiS_GetReg1(SiS_Pr->SiS_P3c4,0x1A);
-@@ -1299,7 +1296,7 @@ SiS_ChkBUSWidth_300(SiS_Private *SiS_Pr,
- #endif
- /* =============== SiS 300 dram sizing end =============== */
-
--/* ============ SiS 310/325 dram sizing begin ============== */
-+/* ============ SiS 315 dram sizing begin ============== */
- #ifdef SIS315H
-
- /* TW: Moved Get310DRAMType further down */
-@@ -1893,8 +1890,7 @@ SiS_Get310DRAMType(SiS_Private *SiS_Pr,
- if(*SiS_Pr->pSiS_SoftSetting & SoftDRAMType) {
- data = *SiS_Pr->pSiS_SoftSetting & 0x03;
- } else {
-- if((HwDeviceExtension->jChipType > SIS_315PRO) &&
-- (HwDeviceExtension->jChipType < SIS_330)) {
-+ if(IS_SIS550650740660) {
- data = SiS_GetReg1(SiS_Pr->SiS_P3c4,0x13) & 0x07;
- } else { /* TW: 315, 330 */
- data = SiS_GetReg1(SiS_Pr->SiS_P3c4,0x3a) & 0x03;
-@@ -1934,13 +1930,17 @@ void SiSRegInit(SiS_Private *SiS_Pr, USH
- SiS_Pr->SiS_P3c7 = BaseAddr + 0x17;
- SiS_Pr->SiS_P3c8 = BaseAddr + 0x18;
- SiS_Pr->SiS_P3c9 = BaseAddr + 0x19;
-- SiS_Pr->SiS_P3da = BaseAddr + 0x2A;
-- SiS_Pr->SiS_Part1Port = BaseAddr + SIS_CRT2_PORT_04; /* Digital video interface registers (LCD) */
-- SiS_Pr->SiS_Part2Port = BaseAddr + SIS_CRT2_PORT_10; /* 301 TV Encoder registers */
-- SiS_Pr->SiS_Part3Port = BaseAddr + SIS_CRT2_PORT_12; /* 301 Macrovision registers */
-- SiS_Pr->SiS_Part4Port = BaseAddr + SIS_CRT2_PORT_14; /* 301 VGA2 (and LCD) registers */
-- SiS_Pr->SiS_Part5Port = BaseAddr + SIS_CRT2_PORT_14+2; /* 301 palette address port registers */
-- SiS_Pr->SiS_DDC_Port = BaseAddr + 0x14; /* DDC Port ( = P3C4, SR11/0A) */
-+ SiS_Pr->SiS_P3cb = BaseAddr + 0x1b;
-+ SiS_Pr->SiS_P3cd = BaseAddr + 0x1d;
-+ SiS_Pr->SiS_P3da = BaseAddr + 0x2a;
-+ SiS_Pr->SiS_Part1Port = BaseAddr + SIS_CRT2_PORT_04; /* Digital video interface registers (LCD) */
-+ SiS_Pr->SiS_Part2Port = BaseAddr + SIS_CRT2_PORT_10; /* 301 TV Encoder registers */
-+ SiS_Pr->SiS_Part3Port = BaseAddr + SIS_CRT2_PORT_12; /* 301 Macrovision registers */
-+ SiS_Pr->SiS_Part4Port = BaseAddr + SIS_CRT2_PORT_14; /* 301 VGA2 (and LCD) registers */
-+ SiS_Pr->SiS_Part5Port = BaseAddr + SIS_CRT2_PORT_14 + 2; /* 301 palette address port registers */
-+ SiS_Pr->SiS_DDC_Port = BaseAddr + 0x14; /* DDC Port ( = P3C4, SR11/0A) */
-+ SiS_Pr->SiS_VidCapt = BaseAddr + SIS_VIDEO_CAPTURE;
-+ SiS_Pr->SiS_VidPlay = BaseAddr + SIS_VIDEO_PLAYBACK;
- }
-
- void
-@@ -1965,7 +1965,8 @@ SiSInitPCIetc(SiS_Private *SiS_Pr, PSIS_
- (HwDeviceExtension->jChipType == SIS_550) ||
- (HwDeviceExtension->jChipType == SIS_650) ||
- (HwDeviceExtension->jChipType == SIS_740) ||
-- (HwDeviceExtension->jChipType == SIS_330)) {
-+ (HwDeviceExtension->jChipType == SIS_330) ||
-+ (HwDeviceExtension->jChipType == SIS_660)) {
- /* TW: This seems to be done the same way on these chipsets */
- SiS_SetReg1(SiS_Pr->SiS_P3c4,0x20,0xa1);
- SiS_SetRegANDOR(SiS_Pr->SiS_P3c4,0x1E,0xFF,0x5A);
-@@ -1987,10 +1988,14 @@ SiSSetLVDSetc(SiS_Private *SiS_Pr, PSIS_
-
- SiS_Pr->SiS_ChrontelInit = 0;
-
-- if((ModeNo == 0x5a) || (ModeNo == 0x5b)) {
-- SiS_Pr->SiS_IF_DEF_DSTN = 1; /* for 550 dstn */
-- SiS_Pr->SiS_IF_DEF_FSTN = 1; /* for fstn */
-+#if 0
-+ if(HwDeviceExtension->jChipType >= SIS_315H) {
-+ if((ModeNo == 0x5a) || (ModeNo == 0x5b)) {
-+ SiS_Pr->SiS_IF_DEF_DSTN = 1; /* for 550 dstn */
-+ SiS_Pr->SiS_IF_DEF_FSTN = 1; /* for fstn */
-+ }
- }
-+#endif
-
- #ifdef SIS300
- if((HwDeviceExtension->jChipType == SIS_540) ||
-@@ -2015,11 +2020,14 @@ SiSSetLVDSetc(SiS_Private *SiS_Pr, PSIS_
- if((HwDeviceExtension->jChipType == SIS_550) ||
- (HwDeviceExtension->jChipType == SIS_650) ||
- (HwDeviceExtension->jChipType == SIS_740) ||
-- (HwDeviceExtension->jChipType == SIS_330))
-+ (HwDeviceExtension->jChipType == SIS_330) ||
-+ (HwDeviceExtension->jChipType == SIS_660))
- {
-- /* TW: CR37 is different on 310/325 series */
-+ /* TW: CR37 is different on 315 series */
-+#if 0
- if(SiS_Pr->SiS_IF_DEF_FSTN) /* fstn: set CR37=0x04 */
- SiS_SetReg1(SiS_Pr->SiS_P3d4,0x37,0x04); /* (fake LVDS bridge) */
-+#endif
-
- temp=SiS_GetReg1(SiS_Pr->SiS_P3d4,0x37);
- temp = (temp & 0x0E) >> 1;
-@@ -2044,7 +2052,8 @@ SiSInitPtr(SiS_Private *SiS_Pr, PSIS_HW_
- (HwDeviceExtension->jChipType == SIS_550) ||
- (HwDeviceExtension->jChipType == SIS_650) ||
- (HwDeviceExtension->jChipType == SIS_740) ||
-- (HwDeviceExtension->jChipType == SIS_330))
-+ (HwDeviceExtension->jChipType == SIS_330) ||
-+ (HwDeviceExtension->jChipType == SIS_660))
- InitTo310Pointer(SiS_Pr, HwDeviceExtension);
- #endif
-
-@@ -2073,14 +2082,21 @@ SiSDetermineROMUsage(SiS_Private *SiS_Pr
- SiS_Pr->SiS_UseROM = TRUE;
- else SiS_Pr->SiS_UseROM = FALSE;
- } else if(HwDeviceExtension->jChipType < SIS_315H) {
-+#if 0
- /* TW: Rest of 300 series: We don't use the ROM image if
- * the BIOS version < 2.0.0 as such old BIOSes don't
- * have the needed data at the expected locations.
- */
- if(ROMAddr[0x06] < '2') SiS_Pr->SiS_UseROM = FALSE;
- else SiS_Pr->SiS_UseROM = TRUE;
-+#else
-+ /* Sony's VAIO BIOS 1.09 follows the standard, so perhaps
-+ * the others do as well
-+ */
-+ SiS_Pr->SiS_UseROM = TRUE;
-+#endif
- } else {
-- /* TW: 310/325/330 series stick to the standard */
-+ /* TW: 315/330 series stick to the standard */
- SiS_Pr->SiS_UseROM = TRUE;
- }
- } else SiS_Pr->SiS_UseROM = FALSE;
-@@ -2104,24 +2120,27 @@ SiSBIOSSetMode(SiS_Private *SiS_Pr, PSIS
- SiS_Pr->UseCustomMode = FALSE;
-
- if((IsCustom) && (SiS_CheckBuildCustomMode(pScrn, mode, pSiS->VBFlags))) {
--
-- xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 3, "Setting custom mode %dx%d\n",
-- SiS_Pr->CHDisplay, SiS_Pr->CVDisplay);
--
-+
-+ xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 3, "Setting custom mode %dx%d\n",
-+ SiS_Pr->CHDisplay,
-+ (mode->Flags & V_INTERLACE ? SiS_Pr->CVDisplay * 2 :
-+ (mode->Flags & V_DBLSCAN ? SiS_Pr->CVDisplay / 2 :
-+ SiS_Pr->CVDisplay)));
-+
- return(SiSSetMode(SiS_Pr, HwDeviceExtension, pScrn, ModeNo, TRUE));
--
-+
- }
--
-- ModeNo = SiS_CalcModeIndex(pScrn, mode);
-+
-+ ModeNo = SiS_CalcModeIndex(pScrn, mode, pSiS->HaveCustomModes);
- if(!ModeNo) return FALSE;
-
-- xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 3, "Setting mode 0x%x\n", ModeNo);
-+ xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 3, "Setting standard mode 0x%x\n", ModeNo);
-
- return(SiSSetMode(SiS_Pr, HwDeviceExtension, pScrn, ModeNo, TRUE));
- }
-
- #ifdef SISDUALHEAD
--/* TW: Set CRT1 mode (used for dual head) */
-+/* TW: Set CRT1 mode (used for dual head and MergedFB) */
- BOOLEAN
- SiSBIOSSetModeCRT1(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension, ScrnInfoPtr pScrn,
- DisplayModePtr mode, BOOLEAN IsCustom)
-@@ -2134,31 +2153,37 @@ SiSBIOSSetModeCRT1(SiS_Private *SiS_Pr,
- SISEntPtr pSiSEnt = pSiS->entityPrivate;
- unsigned char backupreg=0;
- BOOLEAN backupcustom;
--
- UShort ModeNo=0;
-
- SiS_Pr->UseCustomMode = FALSE;
--
-+
- if((IsCustom) && (SiS_CheckBuildCustomMode(pScrn, mode, pSiS->VBFlags))) {
--
-+
-+ USHORT temptemp = SiS_Pr->CVDisplay;
-+
-+ if(SiS_Pr->CModeFlag & DoubleScanMode) temptemp >>= 1;
-+ else if(SiS_Pr->CInfoFlag & InterlaceMode) temptemp <<= 1;
-+
- xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 3,
-- "Setting custom mode %dx%d in CRT1\n",
-- SiS_Pr->CHDisplay, SiS_Pr->CVDisplay);
-+ "Setting custom mode %dx%d on CRT1\n",
-+ SiS_Pr->CHDisplay, temptemp);
- ModeNo = 0xfe;
--
-+
- } else {
-
-- ModeNo = SiS_CalcModeIndex(pScrn, mode);
-+ ModeNo = SiS_CalcModeIndex(pScrn, mode, pSiS->HaveCustomModes);
- if(!ModeNo) return FALSE;
-
- xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 3,
-- "Setting mode 0x%x on CRT1\n", ModeNo);
-+ "Setting standard mode 0x%x on CRT1\n", ModeNo);
- }
-
- SiSInitPtr(SiS_Pr, HwDeviceExtension);
-
- SiSRegInit(SiS_Pr, BaseAddr);
-
-+ SiS_GetSysFlags(SiS_Pr, HwDeviceExtension);
-+
- SiS_Pr->SiS_VGAINFO = SiS_GetSetBIOSScratch(pScrn, 0x489, 0xff);
-
- SiSInitPCIetc(SiS_Pr, HwDeviceExtension);
-@@ -2167,7 +2192,7 @@ SiSBIOSSetModeCRT1(SiS_Private *SiS_Pr,
-
- SiSDetermineROMUsage(SiS_Pr, HwDeviceExtension, ROMAddr);
-
-- /* TW: We don't clear the buffer under X */
-+ /* We don't clear the buffer under X */
- SiS_Pr->SiS_flag_clearbuffer = 0;
-
- /* 1.Openkey */
-@@ -2175,8 +2200,8 @@ SiSBIOSSetModeCRT1(SiS_Private *SiS_Pr,
-
- SiS_UnLockCRT2(SiS_Pr, HwDeviceExtension, BaseAddr);
-
-+ /* 2.Get ModeID Table */
- if(!SiS_Pr->UseCustomMode) {
-- /* 2.Get ModeID Table */
- temp = SiS_SearchModeID(SiS_Pr, ROMAddr,&ModeNo,&ModeIdIndex);
- if(temp == 0) return(0);
- } else {
-@@ -2201,53 +2226,65 @@ SiSBIOSSetModeCRT1(SiS_Private *SiS_Pr,
- SiS_GetLCDResInfo(SiS_Pr, ROMAddr,ModeNo,ModeIdIndex,HwDeviceExtension);
-
- if(HwDeviceExtension->jChipType >= SIS_315H) {
-- if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
-- if(SiS_GetReg1(SiS_Pr->SiS_P3c4,0x17) & 0x08) {
-+ if(SiS_GetReg1(SiS_Pr->SiS_P3c4,0x17) & 0x08) {
-+ if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
- if(ModeNo != 0x10) SiS_Pr->SiS_SetFlag |= SetDOSMode;
-+ } else if((IS_SIS651) && (SiS_Pr->SiS_VBType & VB_NoLCD)) {
-+ SiS_Pr->SiS_SetFlag |= SetDOSMode;
- }
- }
-
-- /* TW: New from 650/LV 1.10.6x */
- if(IS_SIS650) {
-- if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
-- SiS_SetRegAND(SiS_Pr->SiS_P3d4,0x51,0x1f);
-- SiS_SetRegAND(SiS_Pr->SiS_P3d4,0x56,0xe7);
-- }
-+ if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
-+ SiS_SetRegAND(SiS_Pr->SiS_P3d4,0x51,0x1f);
-+ if(IS_SIS651) SiS_SetRegOR(SiS_Pr->SiS_P3d4,0x51,0x20);
-+ SiS_SetRegAND(SiS_Pr->SiS_P3d4,0x56,0xe7);
-+ }
- }
- }
-
-- /* TW: Set mode on CRT1 */
-+ /* Set mode on CRT1 */
- SiS_SetCRT1Group(SiS_Pr, ROMAddr,HwDeviceExtension,ModeNo,ModeIdIndex,BaseAddr);
-
-- pSiSEnt->CRT1ModeNo = ModeNo;
-- pSiSEnt->CRT1DMode = mode;
--
-- /* TW: SetPitch: Adapt to virtual size & position */
-+ /* SetPitch: Adapt to virtual size & position */
- SiS_SetPitchCRT1(SiS_Pr, pScrn, BaseAddr);
-
-+ if(pSiS->DualHeadMode) {
-+ pSiSEnt->CRT1ModeNo = ModeNo;
-+ pSiSEnt->CRT1DMode = mode;
-+ }
-+
-+ if(SiS_Pr->UseCustomMode) {
-+ SiS_Pr->CRT1UsesCustomMode = TRUE;
-+ SiS_Pr->CSRClock_CRT1 = SiS_Pr->CSRClock;
-+ SiS_Pr->CModeFlag_CRT1 = SiS_Pr->CModeFlag;
-+ } else {
-+ SiS_Pr->CRT1UsesCustomMode = FALSE;
-+ }
-+
- /* We have to reset CRT2 if changing mode on CRT1 */
-- if(pSiSEnt->CRT2ModeNo != -1) {
-- xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 3,
-- "(Re-)Setting mode 0x%x on CRT2\n",
-- pSiSEnt->CRT2ModeNo);
-- backupcustom = SiS_Pr->UseCustomMode;
-- if(SiS_Pr->UseCustomMode) {
-- SiS_Pr->CRT1UsesCustomMode = TRUE;
-- } else {
-- SiS_Pr->CRT1UsesCustomMode = FALSE;
-- }
-- SiSBIOSSetModeCRT2(SiS_Pr, HwDeviceExtension, pSiSEnt->pScrn_1,
-- pSiSEnt->CRT2DMode);
-- SiS_Pr->UseCustomMode = backupcustom;
-- SiS_Pr->CRT1UsesCustomMode = FALSE;
-+ if(pSiS->DualHeadMode) {
-+ if(pSiSEnt->CRT2ModeNo != -1) {
-+ xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 3,
-+ "(Re-)Setting mode for CRT2\n");
-+ backupcustom = SiS_Pr->UseCustomMode;
-+ SiSBIOSSetModeCRT2(SiS_Pr, HwDeviceExtension, pSiSEnt->pScrn_1,
-+ pSiSEnt->CRT2DMode, pSiSEnt->CRT2IsCustom);
-+ SiS_Pr->UseCustomMode = backupcustom;
-+ }
- }
--
-+
-+ /* Warning: From here, the custom mode entries in SiS_Pr are
-+ * possibly overwritten
-+ */
-+
- SiS_HandleCRT1(SiS_Pr);
-
-+ SiS_StrangeStuff(SiS_Pr, HwDeviceExtension);
-+
- SiS_DisplayOn(SiS_Pr);
- SiS_SetReg3(SiS_Pr->SiS_P3c6,0xFF);
-
-- /* TW: New from 650/LV 1.10.6x and 1.10.7w, 630/301B 2.06.50 */
- if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
- if(HwDeviceExtension->jChipType >= SIS_315H) {
- SiS_SetReg1(SiS_Pr->SiS_P3d4,0x38,backupreg);
-@@ -2266,7 +2303,7 @@ SiSBIOSSetModeCRT1(SiS_Private *SiS_Pr,
- /* TW: Set CRT2 mode (used for dual head) */
- BOOLEAN
- SiSBIOSSetModeCRT2(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension, ScrnInfoPtr pScrn,
-- DisplayModePtr mode)
-+ DisplayModePtr mode, BOOLEAN IsCustom)
- {
- ULONG temp;
- USHORT ModeIdIndex;
-@@ -2276,16 +2313,52 @@ SiSBIOSSetModeCRT2(SiS_Private *SiS_Pr,
- SISPtr pSiS = SISPTR(pScrn);
- SISEntPtr pSiSEnt = pSiS->entityPrivate;
- unsigned char tempr1, tempr2, backupreg=0;
--
-+
- SiS_Pr->UseCustomMode = FALSE;
--
-- ModeNo = SiS_CalcModeIndex(pScrn, mode);
-- if(!ModeNo) return FALSE;
-+
-+ /* Remember: Custom modes for CRT2 are ONLY supported
-+ * -) on 315/330 series,
-+ * -) on the 301 and 30xB, and
-+ * -) if CRT2 is LCD or VGA
-+ */
-+
-+ if((IsCustom) && (SiS_CheckBuildCustomMode(pScrn, mode, pSiS->VBFlags))) {
-+
-+ ModeNo = 0xfe;
-+
-+ } else {
-+
-+ BOOLEAN havecustommodes = pSiS->HaveCustomModes;
-+
-+#ifdef SISMERGED
-+ if(pSiS->MergedFB) havecustommodes = pSiS->HaveCustomModes2;
-+#endif
-+
-+ ModeNo = SiS_CalcModeIndex(pScrn, mode, havecustommodes);
-+ if(!ModeNo) return FALSE;
-+
-+ }
-+
-+ /* Save mode info so we can set it from within SetMode for CRT1 */
-+ if(pSiS->DualHeadMode) {
-+ pSiSEnt->CRT2ModeNo = ModeNo;
-+ pSiSEnt->CRT2DMode = mode;
-+ pSiSEnt->CRT2IsCustom = IsCustom;
-+
-+ /* We can't set CRT2 mode before CRT1 mode is set */
-+ if(pSiSEnt->CRT1ModeNo == -1) {
-+ xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 3,
-+ "Setting CRT2 mode delayed until after setting CRT1 mode\n");
-+ return TRUE;
-+ }
-+ }
-
- SiSInitPtr(SiS_Pr, HwDeviceExtension);
-
- SiSRegInit(SiS_Pr, BaseAddr);
-
-+ SiS_GetSysFlags(SiS_Pr, HwDeviceExtension);
-+
- SiS_Pr->SiS_VGAINFO = SiS_GetSetBIOSScratch(pScrn, 0x489, 0xff);
-
- SiSInitPCIetc(SiS_Pr, HwDeviceExtension);
-@@ -2294,22 +2367,26 @@ SiSBIOSSetModeCRT2(SiS_Private *SiS_Pr,
-
- SiSDetermineROMUsage(SiS_Pr, HwDeviceExtension, ROMAddr);
-
-- /* TW: We don't clear the buffer under X */
-+ /* We don't clear the buffer under X */
- SiS_Pr->SiS_flag_clearbuffer=0;
-
-- /* TW: Save ModeNo so we can set it from within SetMode for CRT1 */
-- pSiSEnt->CRT2ModeNo = ModeNo;
-- pSiSEnt->CRT2DMode = mode;
--
-- /* TW: We can't set CRT2 mode before CRT1 mode is set */
-- if(pSiSEnt->CRT1ModeNo == -1) {
-- xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 3,
-- "Setting CRT2 mode delayed until after setting CRT1 mode\n");
-- return TRUE;
-- }
-+ if(SiS_Pr->UseCustomMode) {
-+
-+ USHORT temptemp = SiS_Pr->CVDisplay;
-+
-+ if(SiS_Pr->CModeFlag & DoubleScanMode) temptemp >>= 1;
-+ else if(SiS_Pr->CInfoFlag & InterlaceMode) temptemp <<= 1;
-+
-+ xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 3,
-+ "Setting custom mode %dx%d on CRT2\n",
-+ SiS_Pr->CHDisplay, temptemp);
-+
-+ } else {
-
-- xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 3,
-- "Setting mode 0x%x on CRT2\n", ModeNo);
-+ xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 3,
-+ "Setting standard mode 0x%x on CRT2\n", ModeNo);
-+
-+ }
-
- /* 1.Openkey */
- SiS_SetReg1(SiS_Pr->SiS_P3c4,0x05,0x86);
-@@ -2317,10 +2394,14 @@ SiSBIOSSetModeCRT2(SiS_Private *SiS_Pr,
- SiS_UnLockCRT2(SiS_Pr, HwDeviceExtension, BaseAddr);
-
- /* 2.Get ModeID */
-- temp = SiS_SearchModeID(SiS_Pr, ROMAddr,&ModeNo,&ModeIdIndex);
-- if(temp == 0) return(0);
-+ if(!SiS_Pr->UseCustomMode) {
-+ temp = SiS_SearchModeID(SiS_Pr, ROMAddr,&ModeNo,&ModeIdIndex);
-+ if(temp == 0) return(0);
-+ } else {
-+ ModeIdIndex = 0;
-+ }
-
-- /* TW: Determine VBType (301,301B,301LV,302B,302LV) */
-+ /* Determine VBType (301,301B,301LV,302B,302LV) */
- SiS_GetVBType(SiS_Pr, BaseAddr,HwDeviceExtension);
-
- if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
-@@ -2343,15 +2424,22 @@ SiSBIOSSetModeCRT2(SiS_Private *SiS_Pr,
- }
- }
-
-- /* TW: Get VB information (connectors, connected devices) */
-- SiS_GetVBInfo(SiS_Pr, BaseAddr,ROMAddr,ModeNo,ModeIdIndex,HwDeviceExtension,1);
-+ /* Get VB information (connectors, connected devices) */
-+ if(!SiS_Pr->UseCustomMode) {
-+ SiS_GetVBInfo(SiS_Pr, BaseAddr,ROMAddr,ModeNo,ModeIdIndex,HwDeviceExtension,1);
-+ } else {
-+ /* If this is a custom mode, we don't check the modeflag for CRT2Mode */
-+ SiS_GetVBInfo(SiS_Pr, BaseAddr,ROMAddr,ModeNo,ModeIdIndex,HwDeviceExtension,0);
-+ }
- SiS_SetHiVision(SiS_Pr, BaseAddr,HwDeviceExtension);
- SiS_GetLCDResInfo(SiS_Pr, ROMAddr,ModeNo,ModeIdIndex,HwDeviceExtension);
-
- if(HwDeviceExtension->jChipType >= SIS_315H) {
-- if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
-- if(SiS_GetReg1(SiS_Pr->SiS_P3c4,0x17) & 0x08) {
-+ if(SiS_GetReg1(SiS_Pr->SiS_P3c4,0x17) & 0x08) {
-+ if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
- if(ModeNo != 0x10) SiS_Pr->SiS_SetFlag |= SetDOSMode;
-+ } else if((IS_SIS651) && (SiS_Pr->SiS_VBType & VB_NoLCD)) {
-+ SiS_Pr->SiS_SetFlag |= SetDOSMode;
- }
- }
- }
-@@ -2364,17 +2452,19 @@ SiSBIOSSetModeCRT2(SiS_Private *SiS_Pr,
- case VB_CHIP_302:
- case VB_CHIP_302B:
- case VB_CHIP_302LV:
-- SiS_SetCRT2Group301(SiS_Pr, BaseAddr,ROMAddr,ModeNo,HwDeviceExtension);
-+ SiS_SetCRT2Group(SiS_Pr, BaseAddr,ROMAddr,ModeNo,HwDeviceExtension);
- break;
- case VB_CHIP_UNKNOWN:
-- if (SiS_Pr->SiS_IF_DEF_LVDS == 1 ||
-- SiS_Pr->SiS_IF_DEF_CH70xx != 0 ||
-- SiS_Pr->SiS_IF_DEF_TRUMPION != 0) {
-- SiS_SetCRT2Group301(SiS_Pr,BaseAddr,ROMAddr,ModeNo,HwDeviceExtension);
-+ if(SiS_Pr->SiS_IF_DEF_LVDS == 1 ||
-+ SiS_Pr->SiS_IF_DEF_CH70xx != 0 ||
-+ SiS_Pr->SiS_IF_DEF_TRUMPION != 0) {
-+ SiS_SetCRT2Group(SiS_Pr,BaseAddr,ROMAddr,ModeNo,HwDeviceExtension);
- }
- break;
- }
-
-+ SiS_StrangeStuff(SiS_Pr, HwDeviceExtension);
-+
- SiS_DisplayOn(SiS_Pr);
- SiS_SetReg3(SiS_Pr->SiS_P3c6,0xFF);
-
-@@ -2386,7 +2476,6 @@ SiSBIOSSetModeCRT2(SiS_Private *SiS_Pr,
- }
- }
-
-- /* TW: New from 650/LV 1.10.6x and 1.10.7w, 630 2.06.50 */
- if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
- if(HwDeviceExtension->jChipType >= SIS_315H) {
- if(SiS_IsVAMode(SiS_Pr,HwDeviceExtension, BaseAddr)) {
-@@ -2412,7 +2501,7 @@ SiSBIOSSetModeCRT2(SiS_Private *SiS_Pr,
- }
- }
-
-- /* TW: SetPitch: Adapt to virtual size & position */
-+ /* SetPitch: Adapt to virtual size & position */
- SiS_SetPitchCRT2(SiS_Pr, pScrn, BaseAddr);
-
- return TRUE;
-@@ -2448,6 +2537,8 @@ SiSSetMode(SiS_Private *SiS_Pr, PSIS_HW_
-
- SiSRegInit(SiS_Pr, BaseAddr);
-
-+ SiS_GetSysFlags(SiS_Pr, HwDeviceExtension);
-+
- #ifdef LINUX_XF86
- if(pScrn) SiS_Pr->SiS_VGAINFO = SiS_GetSetBIOSScratch(pScrn, 0x489, 0xff);
- else
-@@ -2458,7 +2549,7 @@ SiSSetMode(SiS_Private *SiS_Pr, PSIS_HW_
- #ifdef TWDEBUG
- xf86DrvMsg(0, X_INFO, "VGAInfo 0x%02x\n", SiS_Pr->SiS_VGAINFO);
- #endif
--#endif
-+#endif
-
- SiSInitPCIetc(SiS_Pr, HwDeviceExtension);
-
-@@ -2472,7 +2563,7 @@ SiSSetMode(SiS_Private *SiS_Pr, PSIS_HW_
- }
-
- #ifdef LINUX_XF86
-- /* TW: We never clear the buffer in X */
-+ /* We never clear the buffer in X */
- ModeNo |= 0x8000;
- #endif
-
-@@ -2501,10 +2592,10 @@ SiSSetMode(SiS_Private *SiS_Pr, PSIS_HW_
-
- }
-
-- /* TW: Determine VBType (301,301B,301LV,302B,302LV) */
-+ /* Determine VBType (301,301B,301LV,302B,302LV) */
- SiS_GetVBType(SiS_Pr,BaseAddr,HwDeviceExtension);
-
-- /* TW: Init/restore some VB registers */
-+ /* Init/restore some VB registers */
- if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
- if(HwDeviceExtension->jChipType >= SIS_315H) {
- SiS_UnLockCRT2(SiS_Pr,HwDeviceExtension,BaseAddr);
-@@ -2525,8 +2616,12 @@ SiSSetMode(SiS_Private *SiS_Pr, PSIS_HW_
- }
- }
-
-- /* TW: Get VB information (connectors, connected devices) */
-- SiS_GetVBInfo(SiS_Pr,BaseAddr,ROMAddr,ModeNo,ModeIdIndex,HwDeviceExtension,1);
-+ /* Get VB information (connectors, connected devices) */
-+ if(SiS_Pr->UseCustomMode) {
-+ SiS_GetVBInfo(SiS_Pr,BaseAddr,ROMAddr,ModeNo,ModeIdIndex,HwDeviceExtension,0);
-+ } else {
-+ SiS_GetVBInfo(SiS_Pr,BaseAddr,ROMAddr,ModeNo,ModeIdIndex,HwDeviceExtension,1);
-+ }
- SiS_SetHiVision(SiS_Pr,BaseAddr,HwDeviceExtension);
- SiS_GetLCDResInfo(SiS_Pr,ROMAddr,ModeNo,ModeIdIndex,HwDeviceExtension);
-
-@@ -2535,22 +2630,32 @@ SiSSetMode(SiS_Private *SiS_Pr, PSIS_HW_
- if(!temp) return(0);
-
- if(HwDeviceExtension->jChipType >= SIS_315H) {
-- if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
-- if(SiS_GetReg1(SiS_Pr->SiS_P3c4,0x17) & 0x08) {
-+ if(SiS_GetReg1(SiS_Pr->SiS_P3c4,0x17) & 0x08) {
-+ if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
- if(ModeNo != 0x10) SiS_Pr->SiS_SetFlag |= SetDOSMode;
-+ } else if((IS_SIS651) && (SiS_Pr->SiS_VBType & VB_NoLCD)) {
-+ SiS_Pr->SiS_SetFlag |= SetDOSMode;
- }
- }
-
-- /* TW: New from 650/LV 1.10.6x; not in any BIOS for other chipsets */
- if(IS_SIS650) {
-- if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
-- SiS_SetRegAND(SiS_Pr->SiS_P3d4,0x51,0x1f);
-- SiS_SetRegAND(SiS_Pr->SiS_P3d4,0x56,0xe7);
-- }
-+ if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
-+ SiS_SetRegAND(SiS_Pr->SiS_P3d4,0x51,0x1f);
-+ if(IS_SIS651) SiS_SetRegOR(SiS_Pr->SiS_P3d4,0x51,0x20);
-+ SiS_SetRegAND(SiS_Pr->SiS_P3d4,0x56,0xe7);
-+ }
- }
- }
-
-- /* TW: Set mode on CRT1 */
-+ if(SiS_Pr->UseCustomMode) {
-+ SiS_Pr->CRT1UsesCustomMode = TRUE;
-+ SiS_Pr->CSRClock_CRT1 = SiS_Pr->CSRClock;
-+ SiS_Pr->CModeFlag_CRT1 = SiS_Pr->CModeFlag;
-+ } else {
-+ SiS_Pr->CRT1UsesCustomMode = FALSE;
-+ }
-+
-+ /* Set mode on CRT1 */
- if(SiS_Pr->SiS_VBInfo & (SetSimuScanMode | SetCRT2ToLCDA)) {
- SiS_SetCRT1Group(SiS_Pr,ROMAddr,HwDeviceExtension,ModeNo,ModeIdIndex,BaseAddr);
- } else {
-@@ -2559,7 +2664,7 @@ SiSSetMode(SiS_Private *SiS_Pr, PSIS_HW_
- }
- }
-
-- /* TW: Set mode on CRT2 */
-+ /* Set mode on CRT2 */
- if(SiS_Pr->SiS_VBInfo & (SetSimuScanMode | SwitchToCRT2 | SetCRT2ToLCDA)) {
- switch (HwDeviceExtension->ujVBChipID) {
- case VB_CHIP_301:
-@@ -2568,18 +2673,20 @@ SiSSetMode(SiS_Private *SiS_Pr, PSIS_HW_
- case VB_CHIP_302:
- case VB_CHIP_302B:
- case VB_CHIP_302LV:
-- SiS_SetCRT2Group301(SiS_Pr,BaseAddr,ROMAddr,ModeNo,HwDeviceExtension);
-+ SiS_SetCRT2Group(SiS_Pr,BaseAddr,ROMAddr,ModeNo,HwDeviceExtension);
- break;
- case VB_CHIP_UNKNOWN:
- if(SiS_Pr->SiS_IF_DEF_LVDS == 1 ||
- SiS_Pr->SiS_IF_DEF_CH70xx != 0 ||
- SiS_Pr->SiS_IF_DEF_TRUMPION != 0)
-- SiS_SetCRT2Group301(SiS_Pr,BaseAddr,ROMAddr,ModeNo,HwDeviceExtension);
-+ SiS_SetCRT2Group(SiS_Pr,BaseAddr,ROMAddr,ModeNo,HwDeviceExtension);
- break;
- }
- }
-
- SiS_HandleCRT1(SiS_Pr);
-+
-+ SiS_StrangeStuff(SiS_Pr, HwDeviceExtension);
-
- SiS_DisplayOn(SiS_Pr);
- SiS_SetReg3(SiS_Pr->SiS_P3c6,0xFF);
-@@ -2592,7 +2699,6 @@ SiSSetMode(SiS_Private *SiS_Pr, PSIS_HW_
- }
- }
-
-- /* TW: New from 650/LV 1.10.6x and 1.10.7w */
- if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
- if(HwDeviceExtension->jChipType >= SIS_315H) {
- if(SiS_IsVAMode(SiS_Pr,HwDeviceExtension, BaseAddr)) {
-@@ -2627,7 +2733,7 @@ SiSSetMode(SiS_Private *SiS_Pr, PSIS_HW_
-
- #ifdef LINUX_XF86
- if(pScrn) {
-- /* TW: SetPitch: Adapt to virtual size & position */
-+ /* SetPitch: Adapt to virtual size & position */
- if((ModeNo > 0x13) && (dosetpitch)) {
- SiS_SetPitch(SiS_Pr, pScrn, BaseAddr);
- }
-@@ -2637,7 +2743,7 @@ SiSSetMode(SiS_Private *SiS_Pr, PSIS_HW_
- }
- #endif
-
--#ifndef LINUX_XF86 /* TW: We never lock registers in XF86 */
-+#ifndef LINUX_XF86 /* We never lock registers in XF86 */
- if(KeepLockReg == 0xA1) SiS_SetReg1(SiS_Pr->SiS_P3c4,0x05,0x86);
- else SiS_SetReg1(SiS_Pr->SiS_P3c4,0x05,0x00);
- #endif
-@@ -2646,10 +2752,15 @@ SiSSetMode(SiS_Private *SiS_Pr, PSIS_HW_
- }
-
- void
--SiS_SetEnableDstn(SiS_Private *SiS_Pr) /* TW: Called from sis_main.c */
-+SiS_SetEnableDstn(SiS_Private *SiS_Pr, int enable)
-+{
-+ SiS_Pr->SiS_IF_DEF_DSTN = enable ? 1 : 0;
-+}
-+
-+void
-+SiS_SetEnableFstn(SiS_Private *SiS_Pr, int enable)
- {
-- /* For 550 dstn */
-- SiS_Pr->SiS_IF_DEF_DSTN = 1;
-+ SiS_Pr->SiS_IF_DEF_FSTN = enable ? 1 : 0;
- }
-
- void
-@@ -2663,13 +2774,73 @@ SiS_HandleCRT1(SiS_Private *SiS_Pr)
- SiS_SetRegAND(SiS_Pr->SiS_P3d4,0x63,0xbf);
-
- #if 0
-- if(!(SiS_GetReg1(SiS_Pr->SiS_P3c4,0x15) & 0x01))
-- SiS_SetRegOR(SiS_Pr->SiS_P3d4,0x63,0x40);
-+ if(!(SiS_GetReg1(SiS_Pr->SiS_P3c4,0x15) & 0x01)) {
-+ if((SiS_GetReg1(SiS_Pr->SiS_P3c4,0x15) & 0x0a) ||
-+ (SiS_GetReg1(SiS_Pr->SiS_P3c4,0x16) & 0x01)) {
-+ SiS_SetRegOR(SiS_Pr->SiS_P3d4,0x63,0x40);
-+ }
- }
- #endif
- }
-
- void
-+SiS_GetSysFlags(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension)
-+{
-+ unsigned char cr5f, temp1, temp2;
-+
-+ /* You should use the macros, not these flags directly */
-+
-+ SiS_Pr->SiS_SysFlags = 0;
-+ if(HwDeviceExtension->jChipType == SIS_650) {
-+ cr5f = SiS_GetReg1(SiS_Pr->SiS_P3d4,0x5f) & 0xf0;
-+ SiS_SetRegAND(SiS_Pr->SiS_P3d4,0x5c,0x07);
-+ temp1 = SiS_GetReg1(SiS_Pr->SiS_P3d4,0x5c) & 0xf8;
-+ SiS_SetRegOR(SiS_Pr->SiS_P3d4,0x5c,0xf8);
-+ temp2 = SiS_GetReg1(SiS_Pr->SiS_P3d4,0x5c) & 0xf8;
-+ if((!temp1) || (temp2)) {
-+ switch(cr5f) {
-+ case 0x80:
-+ case 0x90:
-+ case 0xc0:
-+ SiS_Pr->SiS_SysFlags |= SF_IsM650; break;
-+ case 0xa0:
-+ case 0xb0:
-+ case 0xe0:
-+ SiS_Pr->SiS_SysFlags |= SF_Is651; break;
-+ }
-+ } else {
-+ switch(cr5f) {
-+ case 0x90:
-+ temp1 = SiS_GetReg1(SiS_Pr->SiS_P3d4,0x5c) & 0xf8;
-+ switch(temp1) {
-+ case 0x00: SiS_Pr->SiS_SysFlags |= SF_IsM652; break;
-+ case 0x40: SiS_Pr->SiS_SysFlags |= SF_IsM653; break;
-+ default: SiS_Pr->SiS_SysFlags |= SF_IsM650; break;
-+ }
-+ break;
-+ case 0xb0:
-+ SiS_Pr->SiS_SysFlags |= SF_Is652; break;
-+ default:
-+ SiS_Pr->SiS_SysFlags |= SF_IsM650; break;
-+ }
-+ }
-+ }
-+}
-+
-+void
-+SiS_StrangeStuff(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension)
-+{
-+ if((IS_SIS651) || (IS_SISM650)) {
-+ SiS_SetReg1(SiS_Pr->SiS_VidCapt, 0x3f, 0x00); /* Fiddle with capture regs */
-+ SiS_SetReg1(SiS_Pr->SiS_VidCapt, 0x00, 0x00);
-+ SiS_SetReg1(SiS_Pr->SiS_VidPlay, 0x00, 0x86); /* (BIOS does NOT unlock) */
-+ SiS_SetRegAND(SiS_Pr->SiS_VidPlay, 0x30, 0xfe); /* Fiddle with video regs */
-+ SiS_SetRegAND(SiS_Pr->SiS_VidPlay, 0x3f, 0xef);
-+ }
-+ /* !!! This does not support modes < 0x13 !!! */
-+}
-+
-+void
- SiS_SetCRT1Group(SiS_Private *SiS_Pr, UCHAR *ROMAddr,PSIS_HW_DEVICE_INFO HwDeviceExtension,
- USHORT ModeNo,USHORT ModeIdIndex,USHORT BaseAddr)
- {
-@@ -2683,6 +2854,9 @@ SiS_SetCRT1Group(SiS_Private *SiS_Pr, UC
- }
- }
-
-+ /* 550, 651 */
-+ SiS_WhatTheHellIsThis(SiS_Pr,HwDeviceExtension,BaseAddr);
-+
- SiS_SetSeqRegs(SiS_Pr,ROMAddr,StandTableIndex);
- SiS_SetMiscRegs(SiS_Pr,ROMAddr,StandTableIndex);
- SiS_SetCRTCRegs(SiS_Pr,ROMAddr,HwDeviceExtension,StandTableIndex);
-@@ -2759,15 +2933,20 @@ void
- SiS_SetPitch(SiS_Private *SiS_Pr, ScrnInfoPtr pScrn, UShort BaseAddr)
- {
- SISPtr pSiS = SISPTR(pScrn);
-+ BOOLEAN isslavemode = FALSE;
-+
-+ if( (pSiS->VBFlags & VB_VIDEOBRIDGE) &&
-+ ( ((pSiS->VGAEngine == SIS_300_VGA) && (SiS_GetReg1(SiS_Pr->SiS_Part1Port,0x00) & 0xa0) == 0x20) ||
-+ ((pSiS->VGAEngine == SIS_315_VGA) && (SiS_GetReg1(SiS_Pr->SiS_Part1Port,0x00) & 0x50) == 0x10) ) ) {
-+ isslavemode = TRUE;
-+ }
-
-- /* TW: We need to set pitch for CRT1 if bridge is in SlaveMode, too */
-- if( (pSiS->VBFlags & DISPTYPE_DISP1) ||
-- ( (pSiS->VBFlags & VB_VIDEOBRIDGE) &&
-- ( ((pSiS->VGAEngine == SIS_300_VGA) && (SiS_GetReg1(SiS_Pr->SiS_Part1Port,0x00) & 0xa0) == 0x20) ||
-- ((pSiS->VGAEngine == SIS_315_VGA) && (SiS_GetReg1(SiS_Pr->SiS_Part1Port,0x00) & 0x50) == 0x10) ) ) ) {
-+ /* We need to set pitch for CRT1 if bridge is in slave mode, too */
-+ if( (pSiS->VBFlags & DISPTYPE_DISP1) || (isslavemode) ) {
- SiS_SetPitchCRT1(SiS_Pr, pScrn, BaseAddr);
- }
-- if (pSiS->VBFlags & DISPTYPE_DISP2) {
-+ /* We must not set the pitch for CRT2 if bridge is in slave mode */
-+ if( (pSiS->VBFlags & DISPTYPE_DISP2) && (!isslavemode) ) {
- SiS_SetPitchCRT2(SiS_Pr, pScrn, BaseAddr);
- }
- }
-@@ -2790,7 +2969,7 @@ SiS_SetPitchCRT2(SiS_Private *SiS_Pr, Sc
- SISPtr pSiS = SISPTR(pScrn);
- ULong HDisplay,temp;
-
-- HDisplay = pSiS->scrnPitch / 8;
-+ HDisplay = pSiS->scrnPitch2 / 8;
-
- /* Unlock CRT2 */
- if (pSiS->VGAEngine == SIS_315_VGA)
-@@ -2880,7 +3059,6 @@ SiS_SearchModeID(SiS_Private *SiS_Pr, UC
- return TRUE;
- }
-
--/* For SiS 300 oem util: Search VBModeID */
- BOOLEAN
- SiS_SearchVBModeID(SiS_Private *SiS_Pr, UCHAR *ROMAddr, USHORT *ModeNo)
- {
-@@ -2946,6 +3124,81 @@ SiS_GetModePtr(SiS_Private *SiS_Pr, UCHA
- return index;
- }
-
-+static void
-+SiS_WhatIsThis1a(SiS_Private *SiS_Pr, USHORT somevalue)
-+{
-+ USHORT temp, tempbl, tempbh;
-+
-+ tempbl = tempbh = somevalue;
-+ temp = SiS_GetReg2(SiS_Pr->SiS_P3cb);
-+ temp &= 0xf0;
-+ tempbl >>= 4;
-+ temp |= tempbl;
-+ SiS_SetReg3(SiS_Pr->SiS_P3cb, temp);
-+ temp = SiS_GetReg2(SiS_Pr->SiS_P3cd);
-+ temp &= 0xf0;
-+ tempbh &= 0x0f;
-+ temp |= tempbh;
-+ SiS_SetReg3(SiS_Pr->SiS_P3cd, temp);
-+}
-+
-+static void
-+SiS_WhatIsThis1b(SiS_Private *SiS_Pr, USHORT somevalue)
-+{
-+ USHORT temp, tempbl, tempbh;
-+
-+ tempbl = tempbh = somevalue;
-+ temp = SiS_GetReg2(SiS_Pr->SiS_P3cb);
-+ temp &= 0x0f;
-+ tempbl &= 0xf0;
-+ temp |= tempbl;
-+ SiS_SetReg3(SiS_Pr->SiS_P3cb, temp);
-+ temp = SiS_GetReg2(SiS_Pr->SiS_P3cd);
-+ temp &= 0x0f;
-+ tempbh <<= 4;
-+ temp |= tempbh;
-+ SiS_SetReg3(SiS_Pr->SiS_P3cd, temp);
-+}
-+
-+static void
-+SiS_WhatIsThis2b(SiS_Private *SiS_Pr, USHORT somevalue)
-+{
-+ SiS_WhatIsThis1a(SiS_Pr, somevalue);
-+ SiS_WhatIsThis1b(SiS_Pr, somevalue);
-+}
-+
-+static void
-+SiS_WhatIsThis1(SiS_Private *SiS_Pr)
-+{
-+ SiS_WhatIsThis2b(SiS_Pr, 0);
-+}
-+
-+static void
-+SiS_WhatIsThis2a(SiS_Private *SiS_Pr, USHORT somevalue)
-+{
-+ USHORT temp = somevalue >> 8;
-+
-+ temp &= 0x07;
-+ temp |= (temp << 4);
-+ SiS_SetReg1(SiS_Pr->SiS_P3c4,0x1d,temp);
-+ SiS_WhatIsThis2b(SiS_Pr, somevalue);
-+}
-+
-+static void
-+SiS_WhatIsThis2(SiS_Private *SiS_Pr)
-+{
-+ SiS_WhatIsThis2a(SiS_Pr, 0);
-+}
-+
-+void
-+SiS_WhatTheHellIsThis(SiS_Private *SiS_Pr,PSIS_HW_DEVICE_INFO HwDeviceExtension,USHORT BaseAddr)
-+{
-+ if(IS_SIS65x) {
-+ SiS_WhatIsThis1(SiS_Pr);
-+ SiS_WhatIsThis2(SiS_Pr);
-+ }
-+}
-+
- void
- SiS_SetSeqRegs(SiS_Private *SiS_Pr, UCHAR *ROMAddr,USHORT StandTableIndex)
- {
-@@ -3027,7 +3280,7 @@ SiS_SetCRTCRegs(SiS_Private *SiS_Pr, UCH
- (HwDeviceExtension->jChipRevision >= 0x30) ) { /* for 630S0 */
- if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
- if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToTV)) {
-- SiS_SetReg1(SiS_Pr->SiS_P3d4,0x18,0xFE);
-+ SiS_SetReg1(SiS_Pr->SiS_P3d4,0x18,0xFE);
- }
- }
- }
-@@ -3065,7 +3318,7 @@ SiS_SetATTRegs(SiS_Private *SiS_Pr, UCHA
- }
- if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
- if(HwDeviceExtension->jChipType >= SIS_315H) {
-- if(IS_SIS650740 || IS_SIS550) {
-+ if(IS_SIS550650740660) {
- /* 315, 330 don't do this */
- if(SiS_Pr->SiS_VBType & VB_SIS301B302B) {
- if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) ARdata=0;
-@@ -3148,7 +3401,7 @@ SiS_SetCRT1CRTC(SiS_Private *SiS_Pr, UCH
- USHORT tempah,i,modeflag,j;
- #ifdef SIS315H
- USHORT temp;
-- USHORT ResInfo,DisplayType;
-+ USHORT ResIndex,DisplayType;
- const SiS_LCDACRT1DataStruct *LCDACRT1Ptr = NULL;
- #endif
-
-@@ -3171,7 +3424,7 @@ SiS_SetCRT1CRTC(SiS_Private *SiS_Pr, UCH
- /* LCDA */
-
- temp = SiS_GetLCDACRT1Ptr(SiS_Pr,ROMAddr,ModeNo,ModeIdIndex,
-- RefreshRateTableIndex,&ResInfo,&DisplayType);
-+ RefreshRateTableIndex,&ResIndex,&DisplayType);
-
- switch(DisplayType) {
- case Panel_800x600 : LCDACRT1Ptr = SiS_Pr->SiS_LCDACRT1800x600_1; break;
-@@ -3197,30 +3450,30 @@ SiS_SetCRT1CRTC(SiS_Private *SiS_Pr, UCH
- default: LCDACRT1Ptr = SiS_Pr->SiS_LCDACRT11024x768_1; break;
- }
-
-- tempah = (LCDACRT1Ptr+ResInfo)->CR[0];
-+ tempah = (LCDACRT1Ptr+ResIndex)->CR[0];
- SiS_SetReg1(SiS_Pr->SiS_P3d4,0x00,tempah);
- for(i=0x01,j=1;i<=0x07;i++,j++){
-- tempah = (LCDACRT1Ptr+ResInfo)->CR[j];
-+ tempah = (LCDACRT1Ptr+ResIndex)->CR[j];
- SiS_SetReg1(SiS_Pr->SiS_P3d4,i,tempah);
- }
- for(i=0x10,j=8;i<=0x12;i++,j++){
-- tempah = (LCDACRT1Ptr+ResInfo)->CR[j];
-+ tempah = (LCDACRT1Ptr+ResIndex)->CR[j];
- SiS_SetReg1(SiS_Pr->SiS_P3d4,i,tempah);
- }
- for(i=0x15,j=11;i<=0x16;i++,j++){
-- tempah =(LCDACRT1Ptr+ResInfo)->CR[j];
-+ tempah =(LCDACRT1Ptr+ResIndex)->CR[j];
- SiS_SetReg1(SiS_Pr->SiS_P3d4,i,tempah);
- }
- for(i=0x0A,j=13;i<=0x0C;i++,j++){
-- tempah = (LCDACRT1Ptr+ResInfo)->CR[j];
-+ tempah = (LCDACRT1Ptr+ResIndex)->CR[j];
- SiS_SetReg1(SiS_Pr->SiS_P3c4,i,tempah);
- }
-
-- tempah = (LCDACRT1Ptr+ResInfo)->CR[16];
-+ tempah = (LCDACRT1Ptr+ResIndex)->CR[16];
- tempah &= 0x0E0;
- SiS_SetReg1(SiS_Pr->SiS_P3c4,0x0E,tempah);
-
-- tempah = (LCDACRT1Ptr+ResInfo)->CR[16];
-+ tempah = (LCDACRT1Ptr+ResIndex)->CR[16];
- tempah &= 0x01;
- tempah <<= 5;
- if(modeflag & DoubleScanMode) tempah |= 0x080;
-@@ -3301,7 +3554,7 @@ SiS_SetCRT1CRTC(SiS_Private *SiS_Pr, UCH
-
- BOOLEAN
- SiS_GetLCDACRT1Ptr(SiS_Private *SiS_Pr, UCHAR *ROMAddr,USHORT ModeNo,USHORT ModeIdIndex,
-- USHORT RefreshRateTableIndex,USHORT *ResInfo,
-+ USHORT RefreshRateTableIndex,USHORT *ResIndex,
- USHORT *DisplayType)
- {
- USHORT tempbx=0,modeflag=0;
-@@ -3320,7 +3573,7 @@ SiS_GetLCDACRT1Ptr(SiS_Private *SiS_Pr,
- if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) tempbx += 32;
- if(modeflag & HalfDCLK) tempbx += 16;
-
-- *ResInfo = CRT2CRTC & 0x3F;
-+ *ResIndex = CRT2CRTC & 0x3F;
- *DisplayType = tempbx;
-
- return 1;
-@@ -3490,11 +3743,11 @@ SiS_SetCRT1ModeRegs(SiS_Private *SiS_Pr,
-
- data2 = 0;
- if(ModeNo > 0x13) {
-- if(SiS_Pr->SiS_ModeType > 0x02) {
-- data2 |= 0x02;
-- data3 = (SiS_Pr->SiS_ModeType - ModeVGA) << 2;
-- data2 |= data3;
-- }
-+ if(SiS_Pr->SiS_ModeType > 0x02) {
-+ data2 |= 0x02;
-+ data3 = (SiS_Pr->SiS_ModeType - ModeVGA) << 2;
-+ data2 |= data3;
-+ }
- }
- #ifdef TWDEBUG
- xf86DrvMsg(0, X_INFO, "Debug: Mode infoflag = %x, Chiptype %d\n",
-@@ -3517,7 +3770,8 @@ SiS_SetCRT1ModeRegs(SiS_Private *SiS_Pr,
- if(HwDeviceExtension->jChipType != SIS_300) {
- data = 0x0000;
- if(infoflag & InterlaceMode) {
-- if(xres == 1024) data = 0x0035;
-+ if(xres <= 800) data = 0x0020;
-+ else if(xres <= 1024) data = 0x0035;
- else data = 0x0048;
- }
- data2 = data & 0x00FF;
-@@ -3549,6 +3803,7 @@ SiS_SetCRT1ModeRegs(SiS_Private *SiS_Pr,
- } else {
- SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x0F,0xB7);
- }
-+ /* 651 BIOS does something for mode 0x12 here */
- }
-
- if(HwDeviceExtension->jChipType != SIS_300) {
-@@ -3679,7 +3934,7 @@ SiS_SetVCLKState(SiS_Private *SiS_Pr, UC
- if(VCLK >= 150) data2 |= 0x08; /* VCLK > 150 */
- SiS_SetRegANDOR(SiS_Pr->SiS_P3c4,0x32,0xF7,data2);
-
-- } else { /* 310/325 series */
-+ } else { /* 315 series */
-
- data = 0;
- if(VCLK >= 166) data |= 0x0c; /* TW: Was 200; is 166 in 650, 315 and 330 BIOSes */
-@@ -3688,12 +3943,6 @@ SiS_SetVCLKState(SiS_Private *SiS_Pr, UC
- if(VCLK >= 166) { /* TW: Was 200, is 166 in 650, 315 and 330 BIOSes */
- SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x1f,0xe7);
- }
--#if 0 /* Not done in 315 and 650/301LV/LVDS BIOSes: */
-- data = SiS_GetReg1(SiS_Pr->SiS_P3c4,0x1F); /* DAC pedestal */
-- data &= 0xE7;
-- if(VCLK<200) data |= 0x10;
-- SiS_SetReg1(SiS_Pr->SiS_P3c4,0x1F,data); /* DAC pedestal */
--#endif
- }
-
- data2 = 0x03;
-@@ -3918,7 +4167,8 @@ GetDRAMSize(SiS_Private *SiS_Pr, PSIS_HW
-
- } else if((HwDeviceExtension->jChipType == SIS_550) ||
- (HwDeviceExtension->jChipType == SIS_740) ||
-- (HwDeviceExtension->jChipType == SIS_650)) {
-+ (HwDeviceExtension->jChipType == SIS_650) ||
-+ (HwDeviceExtension->jChipType == SIS_660)) {
-
- counter = SiS_GetReg1(SiS_Pr->SiS_P3c4,0x14) & 0x3F;
- counter++;
-@@ -4728,7 +4978,7 @@ SiS_GetSenseStatus(SiS_Private *SiS_Pr,
- SiS_Pr->SiS_SetFlag = 0x00;
- SiS_Pr->SiS_ModeType = ModeVGA;
- SiS_Pr->SiS_VBInfo = SetCRT2ToRAMDAC |LoadDACFlag |SetInSlaveMode;
-- SiS_SetCRT2Group301(SiS_Pr, BaseAddr,ROMAddr,SenseModeNo,HwDeviceExtension);
-+ SiS_SetCRT2Group(SiS_Pr, BaseAddr,ROMAddr,SenseModeNo,HwDeviceExtension);
- for(i=0;i<20;i++) {
- SiS_LongWait(SiS_Pr);
- }
-@@ -4766,7 +5016,7 @@ SiS_GetSenseStatus(SiS_Private *SiS_Pr,
- #ifdef SIS315H
- if(HwDeviceExtension->jChipType >= SIS_315H) {
- OutputSelect = ROMAddr[0xf3];
-- if(HwDeviceExtension->jChipType == SIS_330) {
-+ if(HwDeviceExtension->jChipType >= SIS_330) {
- OutputSelect = ROMAddr[0x11b];
- }
- }
-@@ -4814,7 +5064,7 @@ SiS_GetSenseStatus(SiS_Private *SiS_Pr,
- SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x00,P2reg0);
- if(!(P2reg0 & 0x20)) {
- SiS_Pr->SiS_VBInfo = DisableCRT2Display;
-- SiS_SetCRT2Group301(SiS_Pr,BaseAddr,ROMAddr,SenseModeNo,HwDeviceExtension);
-+ SiS_SetCRT2Group(SiS_Pr,BaseAddr,ROMAddr,SenseModeNo,HwDeviceExtension);
- }
- }
- }
-@@ -4884,111 +5134,6 @@ SiS_SenseCHTV(SiS_Private *SiS_Pr)
- }
- #endif /* LINUXBIOS */
-
--/* ================ for TC only ================= */
--
--#ifdef TC
--
--int
--INT1AReturnCode(union REGS regs)
--{
-- if (regs.x.cflag)
-- {
-- /*printf("Error to find pci device!\n"); */
-- return 1;
-- }
--
-- switch(regs.h.ah)
-- {
-- case 0: return 0;
-- break;
-- case 0x81: printf("Function not support\n");
-- break;
-- case 0x83: printf("bad vendor id\n");
-- break;
-- case 0x86: printf("device not found\n");
-- break;
-- case 0x87: printf("bad register number\n");
-- break;
-- case 0x88: printf("set failed\n");
-- break;
-- case 0x89: printf("buffer too small");
-- break;
-- }
-- return 1;
--}
--
--unsigned
--FindPCIIOBase(unsigned index,unsigned deviceid)
--{
-- union REGS regs;
--
-- regs.h.ah = 0xb1; /*PCI_FUNCTION_ID */
-- regs.h.al = 0x02; /*FIND_PCI_DEVICE */
-- regs.x.cx = deviceid;
-- regs.x.dx = 0x1039;
-- regs.x.si = index; /* find n-th device */
--
-- int86(0x1A, ®s, ®s);
--
-- if (INT1AReturnCode(regs)!=0)
-- return 0;
--
-- /* regs.h.bh *//* bus number */
-- /* regs.h.bl *//* device number */
-- regs.h.ah = 0xb1; /*PCI_FUNCTION_ID */
-- regs.h.al = 0x09; /*READ_CONFIG_WORD */
-- regs.x.cx = deviceid;
-- regs.x.dx = 0x1039;
-- regs.x.di = 0x18; /* register number */
-- int86(0x1A, ®s, ®s);
--
-- if (INT1AReturnCode(regs)!=0)
-- return 0;
-- return regs.x.cx;
--}
--
--
--void
--main(int argc, char *argv[])
--{
-- SIS_HW_DEVICE_INFO HwDeviceExtension;
-- USHORT temp;
-- USHORT ModeNo;
--
-- /*HwDeviceExtension.pjVirtualRomBase =(PUCHAR) MK_FP(0xC000,0); */
-- /*HwDeviceExtension.pjVideoMemoryAddress = (PUCHAR)MK_FP(0xA000,0);*/
--
--#ifdef SIS300
-- HwDeviceExtension.ulIOAddress = (FindPCIIOBase(0,0x6300)&0xFF80) + 0x30;
-- HwDeviceExtension.jChipType = SIS_630;
--#endif
--
--#ifdef SIS315H
--// HwDeviceExtension.ulIOAddress = (FindPCIIOBase(0,0x5315)&0xFF80) + 0x30;
--// HwDeviceExtension.jChipType = SIS_550;
-- HwDeviceExtension.ulIOAddress = (FindPCIIOBase(0,0x325)&0xFF80) + 0x30;
-- HwDeviceExtension.jChipType = SIS_315H;
--#endif
--
-- HwDeviceExtension.ujVBChipID = VB_CHIP_301;
-- strcpy(HwDeviceExtension.szVBIOSVer,"0.84");
-- HwDeviceExtension.bSkipDramSizing = FALSE;
-- HwDeviceExtension.ulVideoMemorySize = 0;
-- if(argc==2) {
-- ModeNo=atoi(argv[1]);
-- }
-- else {
-- ModeNo=0x2e;
-- /*ModeNo=0x37; */ /* 1024x768x 4bpp */
-- /*ModeNo=0x38; *//* 1024x768x 8bpp */
-- /*ModeNo=0x4A; *//* 1024x768x 16bpp */
-- /*ModeNo=0x47;*/ /* 800x600x 16bpp */
-- }
-- /* SiSInit(SiS_Pr, &HwDeviceExtension);*/
-- SiSSetMode(SiS_Pr, &HwDeviceExtension, ModeNo);
--}
--#endif /* TC END */
--
- /* ================ XFREE86 ================= */
-
- /* Helper functions */
-@@ -5000,44 +5145,78 @@ SiS_CheckBuildCustomMode(ScrnInfoPtr pSc
- SISPtr pSiS = SISPTR(pScrn);
- int out_n, out_dn, out_div, out_sbit, out_scale;
- int depth = pSiS->CurrentLayout.bitsPerPixel;
--
--#ifdef SISDUALHEAD
-- if( ((!pSiS->DualHeadMode) && (VBFlags & DISPTYPE_DISP2)) ||
-- ((pSiS->DualHeadMode) && (!pSiS->SecondHead)) ) return 0;
--#else
-- if(VBFlags & DISPTYPE_DISP2) return 0;
--#endif
-+ unsigned int vclk[5];
-+
-+#define Midx 0
-+#define Nidx 1
-+#define VLDidx 2
-+#define Pidx 3
-+#define PSNidx 4
-+
-+ pSiS->SiS_Pr->CModeFlag = 0;
-
- pSiS->SiS_Pr->CDClock = mode->Clock;
--
-+
- pSiS->SiS_Pr->CHDisplay = mode->HDisplay;
- pSiS->SiS_Pr->CHSyncStart = mode->HSyncStart;
- pSiS->SiS_Pr->CHSyncEnd = mode->HSyncEnd;
- pSiS->SiS_Pr->CHTotal = mode->HTotal;
-- pSiS->SiS_Pr->CHBlankStart = pSiS->SiS_Pr->CHDisplay;
-- pSiS->SiS_Pr->CHBlankEnd = pSiS->SiS_Pr->CHTotal;
--
-+
- pSiS->SiS_Pr->CVDisplay = mode->VDisplay;
- pSiS->SiS_Pr->CVSyncStart = mode->VSyncStart;
- pSiS->SiS_Pr->CVSyncEnd = mode->VSyncEnd;
- pSiS->SiS_Pr->CVTotal = mode->VTotal;
-+
-+ pSiS->SiS_Pr->CFlags = mode->Flags;
-+
-+ if(pSiS->SiS_Pr->CFlags & V_INTERLACE) {
-+ pSiS->SiS_Pr->CVDisplay >>= 1;
-+ pSiS->SiS_Pr->CVSyncStart >>= 1;
-+ pSiS->SiS_Pr->CVSyncEnd >>= 1;
-+ pSiS->SiS_Pr->CVTotal >>= 1;
-+ }
-+ if(pSiS->SiS_Pr->CFlags & V_DBLSCAN) {
-+ /* pSiS->SiS_Pr->CDClock <<= 1; */
-+ pSiS->SiS_Pr->CVDisplay <<= 1;
-+ pSiS->SiS_Pr->CVSyncStart <<= 1;
-+ pSiS->SiS_Pr->CVSyncEnd <<= 1;
-+ pSiS->SiS_Pr->CVTotal <<= 1;
-+ }
-+
-+ pSiS->SiS_Pr->CHBlankStart = pSiS->SiS_Pr->CHDisplay;
-+ pSiS->SiS_Pr->CHBlankEnd = pSiS->SiS_Pr->CHTotal;
- pSiS->SiS_Pr->CVBlankStart = pSiS->SiS_Pr->CVSyncStart - 1;
- pSiS->SiS_Pr->CVBlankEnd = pSiS->SiS_Pr->CVTotal;
--
-- pSiS->SiS_Pr->CFlags = mode->Flags;
-
-- SiS_compute_vclk(pSiS->SiS_Pr->CDClock, &out_n, &out_dn, &out_div, &out_sbit, &out_scale);
--
-+ if(SiS_compute_vclk(pSiS->SiS_Pr->CDClock, &out_n, &out_dn, &out_div, &out_sbit, &out_scale)) {
-+ pSiS->SiS_Pr->CSR2B = (out_div == 2) ? 0x80 : 0x00;
-+ pSiS->SiS_Pr->CSR2B |= ((out_n - 1) & 0x7f);
-+ pSiS->SiS_Pr->CSR2C = (out_dn - 1) & 0x1f;
-+ pSiS->SiS_Pr->CSR2C |= (((out_scale - 1) & 3) << 5);
-+ pSiS->SiS_Pr->CSR2C |= ((out_sbit & 0x01) << 7);
-+#ifdef TWDEBUG
-+ xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Clock %d: n %d dn %d div %d sb %d sc %d\n",
-+ pSiS->SiS_Pr->CDClock, out_n, out_dn, out_div, out_sbit, out_scale);
-+#endif
-+ } else {
-+ SiSCalcClock(pScrn, pSiS->SiS_Pr->CDClock, 2, vclk);
-+ pSiS->SiS_Pr->CSR2B = (vclk[VLDidx] == 2) ? 0x80 : 0x00;
-+ pSiS->SiS_Pr->CSR2B |= (vclk[Midx] - 1) & 0x7f;
-+ pSiS->SiS_Pr->CSR2C = (vclk[Nidx] - 1) & 0x1f;
-+ if(vclk[Pidx] <= 4) {
-+ /* postscale 1,2,3,4 */
-+ pSiS->SiS_Pr->CSR2C |= ((vclk[Pidx] - 1) & 3) << 5;
-+ } else {
-+ /* postscale 6,8 */
-+ pSiS->SiS_Pr->CSR2C |= (((vclk[Pidx] / 2) - 1) & 3) << 5;
-+ pSiS->SiS_Pr->CSR2C |= 0x80;
-+ }
- #ifdef TWDEBUG
-- xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Clock %d: n %d dn %d div %d sb %d sc %d\n",
-- pSiS->SiS_Pr->CDClock, out_n, out_dn, out_div, out_sbit, out_scale);
--#endif
--
-- pSiS->SiS_Pr->CSR2B = (out_div == 2) ? 0x80 : 0x00;
-- pSiS->SiS_Pr->CSR2B |= ((out_n - 1) & 0x7f);
-- pSiS->SiS_Pr->CSR2C = (out_dn - 1) & 0x1f;
-- pSiS->SiS_Pr->CSR2C |= (((out_scale - 1) & 3) << 5);
-- pSiS->SiS_Pr->CSR2C |= ((out_sbit & 0x01) << 7);
-+ xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Clock %d: n %d dn %d div %d sc %d\n",
-+ pSiS->SiS_Pr->CDClock, vclk[Midx], vclk[Nidx], vclk[VLDidx], vclk[Pidx]);
-+#endif
-+ }
-+
- pSiS->SiS_Pr->CSRClock = (pSiS->SiS_Pr->CDClock / 1000) + 1;
-
- pSiS->SiS_Pr->CCRT1CRTC[0] = ((pSiS->SiS_Pr->CHTotal >> 3) - 5) & 0xff;
-@@ -5045,9 +5224,9 @@ SiS_CheckBuildCustomMode(ScrnInfoPtr pSc
- pSiS->SiS_Pr->CCRT1CRTC[2] = (pSiS->SiS_Pr->CHBlankStart >> 3) - 1;
- pSiS->SiS_Pr->CCRT1CRTC[3] = (((pSiS->SiS_Pr->CHBlankEnd >> 3) - 1) & 0x1F) | 0x80;
- pSiS->SiS_Pr->CCRT1CRTC[4] = (pSiS->SiS_Pr->CHSyncStart >> 3) + 3;
-- pSiS->SiS_Pr->CCRT1CRTC[5] = ((((pSiS->SiS_Pr->CHBlankEnd >> 3) - 1) & 0x20) << 2) |
-+ pSiS->SiS_Pr->CCRT1CRTC[5] = ((((pSiS->SiS_Pr->CHBlankEnd >> 3) - 1) & 0x20) << 2) |
- (((pSiS->SiS_Pr->CHSyncEnd >> 3) + 3) & 0x1F);
--
-+
- pSiS->SiS_Pr->CCRT1CRTC[6] = (pSiS->SiS_Pr->CVTotal - 2) & 0xFF;
- pSiS->SiS_Pr->CCRT1CRTC[7] = (((pSiS->SiS_Pr->CVTotal - 2) & 0x100) >> 8)
- | (((pSiS->SiS_Pr->CVDisplay - 1) & 0x100) >> 7)
-@@ -5057,50 +5236,50 @@ SiS_CheckBuildCustomMode(ScrnInfoPtr pSc
- | (((pSiS->SiS_Pr->CVTotal - 2) & 0x200) >> 4)
- | (((pSiS->SiS_Pr->CVDisplay - 1) & 0x200) >> 3)
- | ((pSiS->SiS_Pr->CVSyncStart & 0x200) >> 2);
--
-+
- pSiS->SiS_Pr->CCRT1CRTC[16] = ((((pSiS->SiS_Pr->CVBlankStart - 1) & 0x200) >> 4) >> 5); /* cr9 */
--
--#if 0
-+
-+#if 0
- if (mode->VScan >= 32)
- regp->CRTC[9] |= 0x1F;
- else if (mode->VScan > 1)
- regp->CRTC[9] |= mode->VScan - 1;
--#endif
-+#endif
-
-- pSiS->SiS_Pr->CCRT1CRTC[8] = (pSiS->SiS_Pr->CVSyncStart - 1) & 0xFF; /* cr10 */
-- pSiS->SiS_Pr->CCRT1CRTC[9] = ((pSiS->SiS_Pr->CVSyncEnd - 1) & 0x0F) | 0x80; /* cr11 */
-- pSiS->SiS_Pr->CCRT1CRTC[10] = (pSiS->SiS_Pr->CVDisplay - 1) & 0xFF; /* cr12 */
-- pSiS->SiS_Pr->CCRT1CRTC[11] = (pSiS->SiS_Pr->CVBlankStart - 1) & 0xFF; /* cr15 */
-- pSiS->SiS_Pr->CCRT1CRTC[12] = (pSiS->SiS_Pr->CVBlankEnd - 1) & 0xFF; /* cr16 */
--
-- pSiS->SiS_Pr->CCRT1CRTC[13] =
-+ pSiS->SiS_Pr->CCRT1CRTC[8] = (pSiS->SiS_Pr->CVSyncStart ) & 0xFF; /* cr10 */
-+ pSiS->SiS_Pr->CCRT1CRTC[9] = ((pSiS->SiS_Pr->CVSyncEnd ) & 0x0F) | 0x80; /* cr11 */
-+ pSiS->SiS_Pr->CCRT1CRTC[10] = (pSiS->SiS_Pr->CVDisplay - 1) & 0xFF; /* cr12 */
-+ pSiS->SiS_Pr->CCRT1CRTC[11] = (pSiS->SiS_Pr->CVBlankStart - 1) & 0xFF; /* cr15 */
-+ pSiS->SiS_Pr->CCRT1CRTC[12] = (pSiS->SiS_Pr->CVBlankEnd - 1) & 0xFF; /* cr16 */
-+
-+ pSiS->SiS_Pr->CCRT1CRTC[13] =
- GETBITSTR((pSiS->SiS_Pr->CVTotal -2), 10:10, 0:0) |
- GETBITSTR((pSiS->SiS_Pr->CVDisplay -1), 10:10, 1:1) |
- GETBITSTR((pSiS->SiS_Pr->CVBlankStart-1), 10:10, 2:2) |
- GETBITSTR((pSiS->SiS_Pr->CVSyncStart ), 10:10, 3:3) |
- GETBITSTR((pSiS->SiS_Pr->CVBlankEnd -1), 8:8, 4:4) |
-- GETBITSTR((pSiS->SiS_Pr->CVSyncEnd -1), 4:4, 5:5) ;
-+ GETBITSTR((pSiS->SiS_Pr->CVSyncEnd ), 4:4, 5:5) ;
-
-- pSiS->SiS_Pr->CCRT1CRTC[14] =
-+ pSiS->SiS_Pr->CCRT1CRTC[14] =
- GETBITSTR((pSiS->SiS_Pr->CHTotal >> 3) - 5, 9:8, 1:0) |
- GETBITSTR((pSiS->SiS_Pr->CHDisplay >> 3) - 1, 9:8, 3:2) |
- GETBITSTR((pSiS->SiS_Pr->CHBlankStart >> 3) - 1, 9:8, 5:4) |
- GETBITSTR((pSiS->SiS_Pr->CHSyncStart >> 3) + 3, 9:8, 7:6) ;
-
--
-+
- pSiS->SiS_Pr->CCRT1CRTC[15] =
- GETBITSTR((pSiS->SiS_Pr->CHBlankEnd >> 3) - 1, 7:6, 1:0) |
-- GETBITSTR((pSiS->SiS_Pr->CHSyncEnd >> 3) + 3, 5:5, 2:2) ;
--
-+ GETBITSTR((pSiS->SiS_Pr->CHSyncEnd >> 3) + 3, 5:5, 2:2) ;
-+
- switch(depth) {
-- case 8:
-- pSiS->SiS_Pr->CModeFlag = 0x223b;
-+ case 8:
-+ pSiS->SiS_Pr->CModeFlag |= 0x223b;
- break;
-- case 16:
-- pSiS->SiS_Pr->CModeFlag = 0x227d;
-+ case 16:
-+ pSiS->SiS_Pr->CModeFlag |= 0x227d;
- break;
-- case 32:
-- pSiS->SiS_Pr->CModeFlag = 0x22ff;
-+ case 32:
-+ pSiS->SiS_Pr->CModeFlag |= 0x22ff;
- break;
- default:
- return 0;
-@@ -5114,9 +5293,9 @@ SiS_CheckBuildCustomMode(ScrnInfoPtr pSc
- pSiS->SiS_Pr->CModeFlag |= LineCompareOff;
- if(pSiS->SiS_Pr->CFlags & V_CLKDIV2)
- pSiS->SiS_Pr->CModeFlag |= HalfDCLK;
--
-+
- pSiS->SiS_Pr->CInfoFlag = 0x0007;
-- if(pSiS->SiS_Pr->CFlags & V_NHSYNC)
-+ if(pSiS->SiS_Pr->CFlags & V_NHSYNC)
- pSiS->SiS_Pr->CInfoFlag |= 0x4000;
- if(pSiS->SiS_Pr->CFlags & V_NVSYNC)
- pSiS->SiS_Pr->CInfoFlag |= 0x8000;
-@@ -5152,13 +5331,13 @@ SiS_CheckBuildCustomMode(ScrnInfoPtr pSc
- pSiS->SiS_Pr->CSR2B,
- pSiS->SiS_Pr->CSR2C,
- pSiS->SiS_Pr->CSRClock);
--#endif
-+#endif
- return 1;
- }
-
- /* TW: Build a list of supported modes */
- DisplayModePtr
--SiSBuildBuiltInModeList(ScrnInfoPtr pScrn)
-+SiSBuildBuiltInModeList(ScrnInfoPtr pScrn, BOOLEAN includelcdmodes, BOOLEAN isfordvi)
- {
- SISPtr pSiS = SISPTR(pScrn);
- unsigned short VRE, VBE, VRS, VBS, VDE, VT;
-@@ -5166,11 +5345,16 @@ SiSBuildBuiltInModeList(ScrnInfoPtr pScr
- unsigned char sr_data, cr_data, cr_data2, cr_data3;
- unsigned char sr2b, sr2c;
- float num, denum, postscalar, divider;
-- int A, B, C, D, E, F, temp, i, j, index, vclkindex;
-- DisplayModePtr new = NULL, current = NULL, first = NULL, backup = NULL;
-+ int A, B, C, D, E, F, temp, i, j, k, l, index, vclkindex;
-+ DisplayModePtr new = NULL, current = NULL, first = NULL;
-+ BOOLEAN done = FALSE;
-+#if 0
-+ DisplayModePtr backup = NULL;
-+#endif
-
- pSiS->backupmodelist = NULL;
--
-+ pSiS->AddedPlasmaModes = FALSE;
-+
- /* Initialize our pointers */
- if(pSiS->VGAEngine == SIS_300_VGA) {
- #ifdef SIS300
-@@ -5194,15 +5378,20 @@ SiSBuildBuiltInModeList(ScrnInfoPtr pScr
- if(pSiS->VGAEngine == SIS_300_VGA) index &= 0x3F;
- #endif
-
-- if(((pSiS->SiS_Pr->SiS_RefIndex[i].XRes < 512) && (!pSiS->DSTN)) ||
-- ((pSiS->DSTN) &&
-- (pSiS->SiS_Pr->SiS_RefIndex[i].XRes < 512) &&
-- (pSiS->SiS_Pr->SiS_RefIndex[i].XRes != 320) &&
-- (pSiS->SiS_Pr->SiS_RefIndex[i].YRes != 480))) {
-+ /* 0x5a (320x240) is a pure FTSN mode, not DSTN! */
-+ if((!pSiS->FSTN) &&
-+ (pSiS->SiS_Pr->SiS_RefIndex[i].ModeID == 0x5a)) {
- i++;
- continue;
- }
--
-+ if((pSiS->FSTN) &&
-+ (pSiS->SiS_Pr->SiS_RefIndex[i].XRes == 320) &&
-+ (pSiS->SiS_Pr->SiS_RefIndex[i].YRes == 240) &&
-+ (pSiS->SiS_Pr->SiS_RefIndex[i].ModeID != 0x5a)) {
-+ i++;
-+ continue;
-+ }
-+
- if(!(new = xalloc(sizeof(DisplayModeRec)))) return first;
- memset(new, 0, sizeof(DisplayModeRec));
- if(!(new->name = xalloc(10))) {
-@@ -5216,13 +5405,13 @@ SiSBuildBuiltInModeList(ScrnInfoPtr pScr
- }
-
- current = new;
--
-+
- sprintf(current->name, "%dx%d", pSiS->SiS_Pr->SiS_RefIndex[i].XRes,
- pSiS->SiS_Pr->SiS_RefIndex[i].YRes);
-
- current->status = MODE_OK;
-
-- current->type = M_T_DEFAULT;
-+ current->type = M_T_DEFAULT;
-
- vclkindex = pSiS->SiS_Pr->SiS_RefIndex[i].Ext_CRTVCLK;
- if(pSiS->VGAEngine == SIS_300_VGA) vclkindex &= 0x3F;
-@@ -5235,7 +5424,7 @@ SiSBuildBuiltInModeList(ScrnInfoPtr pScr
- ( (((sr2c >> 5) & 0x03) == 0x02) ? 6.0 : 8.0) : (((sr2c >> 5) & 0x03) + 1.0);
- num = (sr2b & 0x7f) + 1.0;
- denum = (sr2c & 0x1f) + 1.0;
--
-+
- #ifdef TWDEBUG
- xf86DrvMsg(0, X_INFO, "------------\n");
- xf86DrvMsg(0, X_INFO, "sr2b: %x sr2c %x div %f ps %f num %f denum %f\n",
-@@ -5303,10 +5492,29 @@ SiSBuildBuiltInModeList(ScrnInfoPtr pScr
-
- D = B - F - C;
-
-- current->HDisplay = (E * 8);
-- current->HSyncStart = (E * 8) + (F * 8);
-- current->HSyncEnd = (E * 8) + (F * 8) + (C * 8);
-- current->HTotal = (E * 8) + (F * 8) + (C * 8) + (D * 8);
-+ if((pSiS->SiS_Pr->SiS_RefIndex[i].XRes == 320) &&
-+ ((pSiS->SiS_Pr->SiS_RefIndex[i].YRes == 200) ||
-+ (pSiS->SiS_Pr->SiS_RefIndex[i].YRes == 240))) {
-+
-+ /* Terrible hack, but correct CRTC data for
-+ * these modes only produces a black screen...
-+ * (HRE is 0, leading into a too large C and
-+ * a negative D. The CRT controller does not
-+ * seem to like correcting HRE to 50
-+ */
-+ current->HDisplay = 320;
-+ current->HSyncStart = 328;
-+ current->HSyncEnd = 376;
-+ current->HTotal = 400;
-+
-+ } else {
-+
-+ current->HDisplay = (E * 8);
-+ current->HSyncStart = (E * 8) + (F * 8);
-+ current->HSyncEnd = (E * 8) + (F * 8) + (C * 8);
-+ current->HTotal = (E * 8) + (F * 8) + (C * 8) + (D * 8);
-+
-+ }
-
- #ifdef TWDEBUG
- xf86DrvMsg(0, X_INFO,
-@@ -5430,7 +5638,7 @@ SiSBuildBuiltInModeList(ScrnInfoPtr pScr
- current->VSyncStart <<= 1;
- current->VSyncEnd <<= 1;
- current->VTotal <<= 1;
-- current->VTotal |= 1;
-+ current->VTotal |= 1;
- }
- if(current->Flags & V_DBLSCAN) {
- current->Clock >>= 1;
-@@ -5440,6 +5648,7 @@ SiSBuildBuiltInModeList(ScrnInfoPtr pScr
- current->VTotal >>= 1;
- }
-
-+#if 0
- if((backup = xalloc(sizeof(DisplayModeRec)))) {
- if(!pSiS->backupmodelist) pSiS->backupmodelist = backup;
- else {
-@@ -5458,6 +5667,7 @@ SiSBuildBuiltInModeList(ScrnInfoPtr pScr
- backup->Flags = current->Flags;
- backup->Clock = current->Clock;
- }
-+#endif
-
- #ifdef TWDEBUG
- xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-@@ -5470,6 +5680,187 @@ SiSBuildBuiltInModeList(ScrnInfoPtr pScr
- i++;
- }
-
-+ /* Add non-standard LCD modes for panel's detailed timings */
-+
-+ if(!includelcdmodes) return first;
-+
-+ xf86DrvMsg(0, X_INFO, "Checking database for vendor %x, product %x\n",
-+ pSiS->SiS_Pr->CP_Vendor, pSiS->SiS_Pr->CP_Product);
-+
-+ i = 0;
-+ while((!done) && (SiS_PlasmaTable[i].vendor) && (pSiS->SiS_Pr->CP_Vendor)) {
-+
-+ if(SiS_PlasmaTable[i].vendor == pSiS->SiS_Pr->CP_Vendor) {
-+
-+ for(j=0; j<SiS_PlasmaTable[i].productnum; j++) {
-+
-+ if(SiS_PlasmaTable[i].product[j] == pSiS->SiS_Pr->CP_Product) {
-+
-+ xf86DrvMsg(pScrn->scrnIndex, X_PROBED,
-+ "Identified %s panel, adding specific modes\n",
-+ SiS_PlasmaTable[i].plasmaname);
-+
-+ for(k=0; k<SiS_PlasmaTable[i].modenum; k++) {
-+
-+ if(isfordvi) {
-+ if(!(SiS_PlasmaTable[i].plasmamodes[k] & 0x80)) continue;
-+ } else {
-+ if(!(SiS_PlasmaTable[i].plasmamodes[k] & 0x40)) continue;
-+ }
-+
-+ if(!(new = xalloc(sizeof(DisplayModeRec)))) return first;
-+
-+ memset(new, 0, sizeof(DisplayModeRec));
-+ if(!(new->name = xalloc(10))) {
-+ xfree(new);
-+ return first;
-+ }
-+ if(!first) first = new;
-+ if(current) {
-+ current->next = new;
-+ new->prev = current;
-+ }
-+
-+ current = new;
-+
-+ pSiS->AddedPlasmaModes = TRUE;
-+
-+ l = SiS_PlasmaTable[i].plasmamodes[k] & 0x3f;
-+
-+ sprintf(current->name, "%dx%d", SiS_PlasmaMode[l].HDisplay,
-+ SiS_PlasmaMode[l].VDisplay);
-+
-+ current->status = MODE_OK;
-+
-+ current->type = M_T_BUILTIN;
-+
-+ current->Clock = SiS_PlasmaMode[l].clock;
-+ current->SynthClock = current->Clock;
-+
-+ current->HDisplay = SiS_PlasmaMode[l].HDisplay;
-+ current->HSyncStart = current->HDisplay + SiS_PlasmaMode[l].HFrontPorch;
-+ current->HSyncEnd = current->HSyncStart + SiS_PlasmaMode[l].HSyncWidth;
-+ current->HTotal = SiS_PlasmaMode[l].HTotal;
-+
-+ current->VDisplay = SiS_PlasmaMode[l].VDisplay;
-+ current->VSyncStart = current->VDisplay + SiS_PlasmaMode[l].VFrontPorch;
-+ current->VSyncEnd = current->VSyncStart + SiS_PlasmaMode[l].VSyncWidth;
-+ current->VTotal = SiS_PlasmaMode[l].VTotal;
-+
-+ current->CrtcHDisplay = current->HDisplay;
-+ current->CrtcHBlankStart = current->HSyncStart;
-+ current->CrtcHSyncStart = current->HSyncStart;
-+ current->CrtcHSyncEnd = current->HSyncEnd;
-+ current->CrtcHBlankEnd = current->HSyncEnd;
-+ current->CrtcHTotal = current->HTotal;
-+
-+ current->CrtcVDisplay = current->VDisplay;
-+ current->CrtcVBlankStart = current->VSyncStart;
-+ current->CrtcVSyncStart = current->VSyncStart;
-+ current->CrtcVSyncEnd = current->VSyncEnd;
-+ current->CrtcVBlankEnd = current->VSyncEnd;
-+ current->CrtcVTotal = current->VTotal;
-+
-+ if(SiS_PlasmaMode[l].SyncFlags & SIS_PL_HSYNCP)
-+ current->Flags |= V_PHSYNC;
-+ else
-+ current->Flags |= V_NHSYNC;
-+
-+ if(SiS_PlasmaMode[l].SyncFlags & SIS_PL_VSYNCP)
-+ current->Flags |= V_PVSYNC;
-+ else
-+ current->Flags |= V_NVSYNC;
-+
-+ if(current->HDisplay > pSiS->LCDwidth)
-+ pSiS->LCDwidth = pSiS->SiS_Pr->CP_MaxX = current->HDisplay;
-+ if(current->VDisplay > pSiS->LCDheight)
-+ pSiS->LCDheight = pSiS->SiS_Pr->CP_MaxY = current->VDisplay;
-+
-+ }
-+ done = TRUE;
-+ break;
-+ }
-+ }
-+ }
-+
-+ i++;
-+
-+ }
-+
-+ if(pSiS->SiS_Pr->CP_HaveCustomData) {
-+
-+ for(i=0; i<7; i++) {
-+
-+ if(pSiS->SiS_Pr->CP_DataValid[i]) {
-+
-+ if(!(new = xalloc(sizeof(DisplayModeRec)))) return first;
-+
-+ memset(new, 0, sizeof(DisplayModeRec));
-+ if(!(new->name = xalloc(10))) {
-+ xfree(new);
-+ return first;
-+ }
-+ if(!first) first = new;
-+ if(current) {
-+ current->next = new;
-+ new->prev = current;
-+ }
-+
-+ current = new;
-+
-+ sprintf(current->name, "%dx%d", pSiS->SiS_Pr->CP_HDisplay[i],
-+ pSiS->SiS_Pr->CP_VDisplay[i]);
-+
-+ current->status = MODE_OK;
-+
-+ current->type = M_T_BUILTIN;
-+
-+ current->Clock = pSiS->SiS_Pr->CP_Clock[i];
-+ current->SynthClock = current->Clock;
-+
-+ current->HDisplay = pSiS->SiS_Pr->CP_HDisplay[i];
-+ current->HSyncStart = pSiS->SiS_Pr->CP_HSyncStart[i];
-+ current->HSyncEnd = pSiS->SiS_Pr->CP_HSyncEnd[i];
-+ current->HTotal = pSiS->SiS_Pr->CP_HTotal[i];
-+
-+ current->VDisplay = pSiS->SiS_Pr->CP_VDisplay[i];
-+ current->VSyncStart = pSiS->SiS_Pr->CP_VSyncStart[i];
-+ current->VSyncEnd = pSiS->SiS_Pr->CP_VSyncEnd[i];
-+ current->VTotal = pSiS->SiS_Pr->CP_VTotal[i];
-+
-+ current->CrtcHDisplay = current->HDisplay;
-+ current->CrtcHBlankStart = pSiS->SiS_Pr->CP_HBlankStart[i];
-+ current->CrtcHSyncStart = current->HSyncStart;
-+ current->CrtcHSyncEnd = current->HSyncEnd;
-+ current->CrtcHBlankEnd = pSiS->SiS_Pr->CP_HBlankEnd[i];
-+ current->CrtcHTotal = current->HTotal;
-+
-+ current->CrtcVDisplay = current->VDisplay;
-+ current->CrtcVBlankStart = pSiS->SiS_Pr->CP_VBlankStart[i];
-+ current->CrtcVSyncStart = current->VSyncStart;
-+ current->CrtcVSyncEnd = current->VSyncEnd;
-+ current->CrtcVBlankEnd = pSiS->SiS_Pr->CP_VBlankEnd[i];
-+ current->CrtcVTotal = current->VTotal;
-+
-+ if(pSiS->SiS_Pr->CP_SyncValid[i]) {
-+ if(pSiS->SiS_Pr->CP_HSync_P[i])
-+ current->Flags |= V_PHSYNC;
-+ else
-+ current->Flags |= V_NHSYNC;
-+
-+ if(pSiS->SiS_Pr->CP_VSync_P[i])
-+ current->Flags |= V_PVSYNC;
-+ else
-+ current->Flags |= V_NVSYNC;
-+ } else {
-+ /* No sync data? Use positive sync... */
-+ current->Flags |= V_PHSYNC;
-+ current->Flags |= V_PVSYNC;
-+ }
-+ }
-+ }
-+ }
-+
- return first;
-
- }
-@@ -5486,25 +5877,25 @@ sisfb_mode_rate_to_dclock(SiS_Private *S
- UCHAR *ROMAddr = HwDeviceExtension->pjVirtualRomBase;
- ULONG temp = 0;
- int Clock;
--
-+
- if(HwDeviceExtension->jChipType < SIS_315H) {
- #ifdef SIS300
- InitTo300Pointer(SiS_Pr, HwDeviceExtension);
- #else
-- return 65;
-+ return 65 * 1000 * 1000;
- #endif
- } else {
- #ifdef SIS315H
- InitTo310Pointer(SiS_Pr, HwDeviceExtension);
- #else
-- return 65;
-+ return 65 * 1000 * 1000;
- #endif
- }
--
-+
- temp = SiS_SearchModeID(SiS_Pr, ROMAddr, &ModeNo, &ModeIdIndex);
- if(!temp) {
- printk(KERN_ERR "Could not find mode %x\n", ModeNo);
-- return 65;
-+ return 65 * 1000 * 1000;
- }
-
- RefreshRateTableIndex = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].REFindex;
-@@ -5518,6 +5909,56 @@ sisfb_mode_rate_to_dclock(SiS_Private *S
- return(Clock);
- }
-
-+BOOLEAN
-+sisfb_gettotalfrommode(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension,
-+ unsigned char modeno, int *htotal, int *vtotal, unsigned char rateindex)
-+{
-+ USHORT ModeNo = modeno;
-+ USHORT ModeIdIndex = 0, CRT1Index = 0;
-+ USHORT RefreshRateTableIndex = 0;
-+ UCHAR *ROMAddr = HwDeviceExtension->pjVirtualRomBase;
-+ ULONG temp = 0;
-+ unsigned char sr_data, cr_data, cr_data2;
-+
-+ if(HwDeviceExtension->jChipType < SIS_315H) {
-+#ifdef SIS300
-+ InitTo300Pointer(SiS_Pr, HwDeviceExtension);
-+#else
-+ return FALSE;
-+#endif
-+ } else {
-+#ifdef SIS315H
-+ InitTo310Pointer(SiS_Pr, HwDeviceExtension);
-+#else
-+ return FALSE;
-+#endif
-+ }
-+
-+ temp = SiS_SearchModeID(SiS_Pr, ROMAddr, &ModeNo, &ModeIdIndex);
-+ if(!temp) return FALSE;
-+
-+ RefreshRateTableIndex = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].REFindex;
-+ RefreshRateTableIndex += (rateindex - 1);
-+ CRT1Index = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRT1CRTC;
-+
-+ sr_data = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[14];
-+ cr_data = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[0];
-+ *htotal = (((cr_data & 0xff) | ((unsigned short) (sr_data & 0x03) << 8)) + 5) * 8;
-+
-+ sr_data = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[13];
-+ cr_data = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[6];
-+ cr_data2 = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[7];
-+ *vtotal = ((cr_data & 0xFF) |
-+ ((unsigned short)(cr_data2 & 0x01) << 8) |
-+ ((unsigned short)(cr_data2 & 0x20) << 4) |
-+ ((unsigned short)(sr_data & 0x01) << 10)) + 2;
-+
-+ if(SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_InfoFlag & InterlaceMode)
-+ *vtotal *= 2;
-+
-+ return TRUE;
-+}
-+
- int
- sisfb_mode_rate_to_ddata(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension,
- unsigned char modeno, unsigned char rateindex,
-@@ -5606,17 +6047,32 @@ sisfb_mode_rate_to_ddata(SiS_Private *Si
- C = (temp > 0) ? temp : (temp + 64);
-
- D = B - F - C;
--
-- *left_margin = D * 8;
-- *right_margin = F * 8;
-- *hsync_len = C * 8;
-+
-+ if((SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].XRes == 320) &&
-+ ((SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].YRes == 200) ||
-+ (SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].YRes == 240))) {
-+
-+ /* Terrible hack, but the correct CRTC data for
-+ * these modes only produces a black screen...
-+ */
-+ *left_margin = (400 - 376);
-+ *right_margin = (328 - 320);
-+ *hsync_len = (376 - 328);
-+
-+ } else {
-+
-+ *left_margin = D * 8;
-+ *right_margin = F * 8;
-+ *hsync_len = C * 8;
-+
-+ }
-
- sr_data = SiS_Pr->SiS_CRT1Table[index].CR[13];
-
- cr_data = SiS_Pr->SiS_CRT1Table[index].CR[6];
--
-+
- cr_data2 = SiS_Pr->SiS_CRT1Table[index].CR[7];
--
-+
- /* Vertical total */
- VT = (cr_data & 0xFF) |
- ((unsigned short) (cr_data2 & 0x01) << 8) |
-@@ -5699,19 +6155,19 @@ sisfb_mode_rate_to_ddata(SiS_Private *Si
- j++;
- }
- }
--
--#if 0 /* That's bullshit, only the resolution needs to be shifted */
-+
- if((*vmode & FB_VMODE_MASK) == FB_VMODE_INTERLACED) {
-+#if 0 /* Do this? */
- *upper_margin <<= 1;
- *lower_margin <<= 1;
- *vsync_len <<= 1;
-+#endif
- } else if((*vmode & FB_VMODE_MASK) == FB_VMODE_DOUBLE) {
- *upper_margin >>= 1;
- *lower_margin >>= 1;
- *vsync_len >>= 1;
-- }
--#endif
--
-+ }
-+
- return 1;
- }
-
---- linux-2.6.0-test1/drivers/video/sis/initdef.h 2003-06-14 12:18:24.000000000 -0700
-+++ 25/drivers/video/sis/initdef.h 2003-07-19 17:04:55.000000000 -0700
-@@ -1,5 +1,29 @@
- /* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/sis/initdef.h,v 1.4 2000/12/02 01:16:17 dawes Exp $ */
--
-+/*
-+ * Global definitions for init.c and init301.c
-+ *
-+ * Copyright 2002, 2003 by Thomas Winischhofer, Vienna, Austria
-+ *
-+ * Permission to use, copy, modify, distribute, and sell this software and its
-+ * documentation for any purpose is hereby granted without fee, provided that
-+ * the above copyright notice appear in all copies and that both that
-+ * copyright notice and this permission notice appear in supporting
-+ * documentation, and that the name of the copyright holder not be used in
-+ * advertising or publicity pertaining to distribution of the software without
-+ * specific, written prior permission. The copyright holder makes no representations
-+ * about the suitability of this software for any purpose. It is provided
-+ * "as is" without express or implied warranty.
-+ *
-+ * THE COPYRIGHT HOLDER DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-+ * EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-+ * PERFORMANCE OF THIS SOFTWARE.
-+ *
-+ * Author: Thomas Winischhofer <thomas@winischhofer.net>
-+ */
-
- #ifndef _INITDEF_
- #define _INITDEF_
-@@ -22,12 +46,18 @@
- #define VB_SIS301B302B (VB_SIS301B|VB_SIS302B)
- #define VB_SIS301LV302LV (VB_SIS301LV|VB_SIS302LV)
-
--#define IS_SIS650740 ((HwDeviceExtension->jChipType >= SIS_650) && (HwDeviceExtension->jChipType < SIS_330))
--
- #define IS_SIS650 (HwDeviceExtension->jChipType == SIS_650)
- #define IS_SIS740 (HwDeviceExtension->jChipType == SIS_740)
- #define IS_SIS330 (HwDeviceExtension->jChipType == SIS_330)
- #define IS_SIS550 (HwDeviceExtension->jChipType == SIS_550)
-+#define IS_SIS651 (SiS_Pr->SiS_SysFlags & (SF_Is651 | SF_Is652))
-+#define IS_SISM650 (SiS_Pr->SiS_SysFlags & (SF_IsM650 | SF_IsM652 | SF_IsM653))
-+#define IS_SIS65x (IS_SIS651 || IS_SISM650)
-+#define IS_SIS660 (HwDeviceExtension->jChipType == SIS_660)
-+#define IS_SIS650660 (IS_SIS650 || IS_SIS660)
-+#define IS_SIS650740 ((HwDeviceExtension->jChipType >= SIS_650) && (HwDeviceExtension->jChipType < SIS_330))
-+#define IS_SIS650740660 (IS_SIS650 || IS_SIS660 || IS_SIS740)
-+#define IS_SIS550650740660 (IS_SIS550 || IS_SIS650 || IS_SIS660 || IS_SIS740)
-
- #define CRT1Len 17
- #define LVDSCRT1Len 15
-@@ -63,7 +93,7 @@
- #define SupportTV 0x0008
- #define SupportHiVisionTV 0x0010
- #define SupportLCD 0x0020
--#define SupportRAMDAC2 0x0040
-+#define SupportRAMDAC2 0x0040
- #define NoSupportTV 0x0070
- #define NoSupportHiVisionTV 0x0060
- #define NoSupportLCD 0x0058
-@@ -105,6 +135,24 @@
- #define HotKeySwitch 0x8000 /* TW: ? */
- #define SetCRT2ToLCDA 0x8000
-
-+/* SetFlag */
-+#define ProgrammingCRT2 0x01
-+#define TVSimuMode 0x02
-+#define RPLLDIV2XO 0x04
-+#define LCDVESATiming 0x08
-+#define EnableLVDSDDA 0x10
-+#define SetDispDevSwitchFlag 0x20
-+#define CheckWinDos 0x40
-+#define SetDOSMode 0x80
-+
-+/* SysFlags */
-+#define SF_Is651 0x0001
-+#define SF_IsM650 0x0002
-+#define SF_Is652 0x0004
-+#define SF_IsM652 0x0008
-+#define SF_IsM653 0x0010
-+#define SF_Is660 0x8000
-+
- #define PanelRGB18Bit 0x0100
- #define PanelRGB24Bit 0x0000
-
-@@ -112,7 +160,7 @@
- #define TVOverScanShift 4
- #define ClearBufferFlag 0x20
-
--/* CR32 (Newer 630, and 310/325 series)
-+/* CR32 (Newer 630, and 315 series)
-
- [0] VB connected with CVBS
- [1] VB connected with SVHS
-@@ -134,7 +182,7 @@
- 011 LVDS + Tumpion Zurac
- 100 LVDS + Chrontel 7005
- 110 Chrontel 7005
-- 310/325 series
-+ 315 series
- 001 SiS30x (never seen)
- 010 LVDS
- 011 LVDS + Chrontel 7019
-@@ -163,14 +211,15 @@
- #define LCDSyncBit 0x00e0
- #define LCDSyncShift 6
-
--/* CR38 (310/325 series) */
-+/* CR38 (315 series) */
- #define EnableDualEdge 0x01
- #define SetToLCDA 0x02 /* LCD channel A (302B/LV and 650+LVDS only) */
- #define EnableSiSHiVision 0x04 /* HiVision (HDTV) on SiS bridge */
- #define EnableLVDSScart 0x04 /* Scart on Ch7019 (unofficial definition - TW) */
- #define EnableLVDSHiVision 0x08 /* YPbPr color format (480i HDTV); only on 650/Ch7019 systems */
--#define SiSHiVision1 0x10 /* See SetHiVision() */
--#define SiSHiVision2 0x20
-+#define EnableHiVision750 0x08 /* Enable 750P HiVision mode (30xLV only) */
-+#define EnableHiVision525 0x10 /* Enable 525P HiVision mode (30xLV only) */
-+#define SiSHiVision2 0x20 /* ? - | --- mask 0x38 combinations have different meaning! */
- #define EnablePALM 0x40 /* 1 = Set PALM */
- #define EnablePALN 0x80 /* 1 = Set PALN */
-
-@@ -184,7 +233,7 @@
- #define Enable302LV_DualLink 0x04 /* 30xNEW (302LV) only; set by mode switching function */
-
-
--/* CR79 (310/325 series only)
-+/* CR79 (315 series only)
- [3-0] Notify driver
- 0001 Mode Switch event (set by BIOS)
- 0010 Epansion On/Off event
-@@ -202,16 +251,6 @@
- [7] TV UnderScan/OverScan (set by BIOS)
- */
-
--/* SetFlag */
--#define ProgrammingCRT2 0x01
--#define TVSimuMode 0x02
--#define RPLLDIV2XO 0x04
--#define LCDVESATiming 0x08
--#define EnableLVDSDDA 0x10
--#define SetDispDevSwitchFlag 0x20
--#define CheckWinDos 0x40
--#define SetDOSMode 0x80
--
- /* LCDResInfo */
- #define Panel300_800x600 0x01 /* CR36 */
- #define Panel300_1024x768 0x02
-@@ -220,7 +259,10 @@
- #define Panel300_640x480 0x05
- #define Panel300_1024x600 0x06
- #define Panel300_1152x768 0x07
--#define Panel300_320x480 0x08 /* fstn - TW: This is fake, can be any */
-+#define Panel300_1280x768 0x0a
-+#define Panel300_320x480 0x0e /* fstn - TW: This is fake, can be any */
-+#define Panel300_Custom 0x0f
-+#define Panel300_Barco1366 0x10
-
- #define Panel310_800x600 0x01
- #define Panel310_1024x768 0x02
-@@ -231,9 +273,12 @@
- #define Panel310_1280x960 0x07
- #define Panel310_1152x768 0x08 /* LVDS only */
- #define Panel310_1400x1050 0x09
--#define Panel310_1280x768 0x0a /* LVDS only */
-+#define Panel310_1280x768 0x0a
- #define Panel310_1600x1200 0x0b
--#define Panel310_320x480 0x0c /* fstn - TW: This is fake, can be any */
-+#define Panel310_640x480_2 0x0c
-+#define Panel310_640x480_3 0x0d
-+#define Panel310_320x480 0x0e /* fstn - TW: This is fake, can be any */
-+#define Panel310_Custom 0x0f
-
- #define Panel_800x600 0x01 /* Unified values */
- #define Panel_1024x768 0x02
-@@ -246,7 +291,42 @@
- #define Panel_1400x1050 0x09
- #define Panel_1280x768 0x0a /* LVDS only */
- #define Panel_1600x1200 0x0b
--#define Panel_320x480 0x0c /* fstn - TW: This is fake, can be any */
-+#define Panel_640x480_2 0x0c
-+#define Panel_640x480_3 0x0d
-+#define Panel_320x480 0x0e /* fstn - TW: This is fake, can be any */
-+#define Panel_Custom 0x0f
-+#define Panel_Barco1366 0x10
-+
-+/* Index in ModeResInfo table */
-+#define SIS_RI_320x200 0
-+#define SIS_RI_320x240 1
-+#define SIS_RI_320x400 2
-+#define SIS_RI_400x300 3
-+#define SIS_RI_512x384 4
-+#define SIS_RI_640x400 5
-+#define SIS_RI_640x480 6
-+#define SIS_RI_800x600 7
-+#define SIS_RI_1024x768 8
-+#define SIS_RI_1280x1024 9
-+#define SIS_RI_1600x1200 10
-+#define SIS_RI_1920x1440 11
-+#define SIS_RI_2048x1536 12
-+#define SIS_RI_720x480 13
-+#define SIS_RI_720x576 14
-+#define SIS_RI_1280x960 15
-+#define SIS_RI_800x480 16
-+#define SIS_RI_1024x576 17
-+#define SIS_RI_1280x720 18
-+#define SIS_RI_856x480 19
-+#define SIS_RI_1280x768 20
-+#define SIS_RI_1400x1050 21
-+#define SIS_RI_1152x864 22
-+#define SIS_RI_848x480 23
-+#define SIS_RI_1360x768 24
-+#define SIS_RI_1024x600 25
-+#define SIS_RI_1152x768 26
-+#define SIS_RI_768x576 27
-+#define SIS_RI_1360x1024 28
-
- #define ExtChipType 0x0e
- #define ExtChip301 0x02
-@@ -278,15 +358,32 @@
- #define VCLKStartFreq 25
- #define SoftDramType 0x80
-
--#define VCLK40 0x04 /* Index in VCLKData array */
--#define VCLK65 0x09 /* Index in VCLKData array */
--#define VCLK108_2 0x14 /* Index in VCLKData array */
--#define TVVCLKDIV2 0x21 /* Indices in (VB)VCLKData arrays */
--#define TVVCLK 0x22
--#define HiTVVCLKDIV2 0x23
--#define HiTVVCLK 0x24
--#define HiTVSimuVCLK 0x25
--#define HiTVTextVCLK 0x26
-+/* Indices in (VB)VCLKData tables */
-+
-+#define VCLK28 0x00 /* Index in VCLKData table (300 and 315) */
-+#define VCLK40 0x04 /* Index in VCLKData table (300 and 315) */
-+#define VCLK65_300 0x09 /* Index in VCLKData table (300) */
-+#define VCLK108_2_300 0x14 /* Index in VCLKData table (300) */
-+#define VCLK81_300 0x3f /* Index in VCLKData table (300) */
-+#define VCLK108_3_300 0x42 /* Index in VCLKData table (300) */
-+#define VCLK100_300 0x43 /* Index in VCLKData table (300) */
-+#define VCLK65_315 0x0b /* Index in (VB)VCLKData table (315) */
-+#define VCLK108_2_315 0x19 /* Index in (VB)VCLKData table (315) */
-+#define VCLK81_315 0x5b /* Index in (VB)VCLKData table (315) */
-+#define VCLK162_315 0x21 /* Index in (VB)VCLKData table (315) */
-+#define VCLK108_3_315 0x45 /* Index in VBVCLKData table (315) */
-+#define VCLK100_315 0x46 /* Index in VBVCLKData table (315) */
-+
-+#define TVCLKBASE_300 0x21 /* Indices on TV clocks in VCLKData table (300) */
-+#define TVCLKBASE_315 0x3a /* Indices on TV clocks in (VB)VCLKData table (315) */
-+#define TVVCLKDIV2 0x00 /* Index relative to TVCLKBASE */
-+#define TVVCLK 0x01 /* Index relative to TVCLKBASE */
-+#define HiTVVCLKDIV2 0x02 /* Index relative to TVCLKBASE */
-+#define HiTVVCLK 0x03 /* Index relative to TVCLKBASE */
-+#define HiTVSimuVCLK 0x04 /* Index relative to TVCLKBASE */
-+#define HiTVTextVCLK 0x05 /* Index relative to TVCLKBASE */
-+
-+/* ------------------------------ */
-
- #define LoadDACFlag 0x1000
- #define AfterLockCRT2 0x4000
-@@ -306,6 +403,8 @@
- #define HotPlugFunction 0x08
- #define StStructSize 0x06
-
-+#define SIS_VIDEO_CAPTURE 0x00 - 0x30
-+#define SIS_VIDEO_PLAYBACK 0x02 - 0x30
- #define SIS_CRT2_PORT_04 0x04 - 0x30
- #define SIS_CRT2_PORT_10 0x10 - 0x30
- #define SIS_CRT2_PORT_12 0x12 - 0x30
-@@ -393,7 +492,7 @@
-
- /*
- =============================================================
-- for 310/325 series
-+ for 315 series
- =============================================================
- */
- #define SoftDRAMType 0x80
---- linux-2.6.0-test1/drivers/video/sis/init.h 2003-06-14 12:18:30.000000000 -0700
-+++ 25/drivers/video/sis/init.h 2003-07-19 17:04:55.000000000 -0700
-@@ -1,19 +1,39 @@
-+/* $XFree86$ */
-+/*
-+ * Data and prototypes for init.c
-+ *
-+ * Copyright 2002, 2003 by Thomas Winischhofer, Vienna, Austria
-+ *
-+ * Permission to use, copy, modify, distribute, and sell this software and its
-+ * documentation for any purpose is hereby granted without fee, provided that
-+ * the above copyright notice appear in all copies and that both that
-+ * copyright notice and this permission notice appear in supporting
-+ * documentation, and that the name of the copyright holder not be used in
-+ * advertising or publicity pertaining to distribution of the software without
-+ * specific, written prior permission. The copyright holder makes no representations
-+ * about the suitability of this software for any purpose. It is provided
-+ * "as is" without express or implied warranty.
-+ *
-+ * THE COPYRIGHT HOLDER DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-+ * EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-+ * PERFORMANCE OF THIS SOFTWARE.
-+ *
-+ * Author: Thomas Winischhofer <thomas@winischhofer.net>
-+ */
-+
- #ifndef _INIT_
- #define _INIT_
-
- #include "osdef.h"
-+
- #include "initdef.h"
- #include "vgatypes.h"
- #include "vstruct.h"
-
--#ifdef TC
--#include <stdio.h>
--#include <string.h>
--#include <conio.h>
--#include <dos.h>
--#include <stdlib.h>
--#endif
--
- #ifdef LINUX_XF86
- #include "xf86.h"
- #include "xf86Pci.h"
-@@ -24,6 +44,9 @@
- #endif
-
- #ifdef LINUX_KERNEL
-+#ifdef SIS_CP
-+#undef SIS_CP
-+#endif
- #include <linux/config.h>
- #include <linux/version.h>
- #include <linux/types.h>
-@@ -36,19 +59,6 @@
- #endif
- #endif
-
--#ifdef WIN2000
--#include <stdio.h>
--#include <string.h>
--#include <miniport.h>
--#include "dderror.h"
--#include "devioctl.h"
--#include "miniport.h"
--#include "ntddvdeo.h"
--#include "video.h"
--#include "sisv.h"
--#include "tools.h"
--#endif
--
- const USHORT SiS_DRAMType[17][5]={
- {0x0C,0x0A,0x02,0x40,0x39},
- {0x0D,0x0A,0x01,0x40,0x48},
-@@ -144,6 +154,2175 @@ const USHORT SiS_VGA_DAC[] =
- 0x0B,0x0C,0x0D,0x0F,0x10
- };
-
-+static const SiS_StResInfoStruct SiS_StResInfo[]=
-+{
-+ { 640,400},
-+ { 640,350},
-+ { 720,400},
-+ { 720,350},
-+ { 640,480}
-+};
-+
-+static const SiS_ModeResInfoStruct SiS_ModeResInfo[] =
-+{
-+ { 320, 200, 8, 8}, /* 0x00 */
-+ { 320, 240, 8, 8}, /* 0x01 */
-+ { 320, 400, 8, 8}, /* 0x02 */
-+ { 400, 300, 8, 8}, /* 0x03 */
-+ { 512, 384, 8, 8}, /* 0x04 */
-+ { 640, 400, 8,16}, /* 0x05 */
-+ { 640, 480, 8,16}, /* 0x06 */
-+ { 800, 600, 8,16}, /* 0x07 */
-+ { 1024, 768, 8,16}, /* 0x08 */
-+ { 1280,1024, 8,16}, /* 0x09 */
-+ { 1600,1200, 8,16}, /* 0x0a */
-+ { 1920,1440, 8,16}, /* 0x0b */
-+ { 2048,1536, 8,16}, /* 0x0c */
-+ { 720, 480, 8,16}, /* 0x0d */
-+ { 720, 576, 8,16}, /* 0x0e */
-+ { 1280, 960, 8,16}, /* 0x0f */
-+ { 800, 480, 8,16}, /* 0x10 */
-+ { 1024, 576, 8,16}, /* 0x11 */
-+ { 1280, 720, 8,16}, /* 0x12 */
-+ { 856, 480, 8,16}, /* 0x13 */
-+ { 1280, 768, 8,16}, /* 0x14 */
-+ { 1400,1050, 8,16}, /* 0x15 */
-+ { 1152, 864, 8,16}, /* 0x16 */
-+ { 848, 480, 8,16}, /* 0x17 */
-+ { 1360, 768, 8,16}, /* 0x18 */
-+ { 1024, 600, 8,16}, /* 0x19 */
-+ { 1152, 768, 8,16}, /* 0x1a */
-+ { 768, 576, 8,16}, /* 0x1b */
-+ { 1360,1024, 8,16} /* 0x1c */
-+};
-+
-+static SiS_StandTableStruct SiS_StandTable[]=
-+{
-+/* 0x00: MD_0_200 */
-+ {
-+ 0x28,0x18,0x08,0x0800,
-+ {0x09,0x03,0x00,0x02},
-+ 0x63,
-+ {0x2d,0x27,0x28,0x90,0x2b,0xa0,0xbf,0x1f,
-+ 0x00,0xc7,0x06,0x07,0x00,0x00,0x00,0x00,
-+ 0x9c,0x8e,0x8f,0x14,0x1f,0x96,0xb9,0xa3,
-+ 0xff},
-+ {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
-+ 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
-+ 0x08,0x00,0x0f,0x00},
-+ {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
-+ 0xff}
-+ },
-+/* 0x01: MD_1_200 */
-+ {
-+ 0x28,0x18,0x08,0x0800,
-+ {0x09,0x03,0x00,0x02},
-+ 0x63,
-+ {0x2d,0x27,0x28,0x90,0x2b,0xa0,0xbf,0x1f,
-+ 0x00,0xc7,0x06,0x07,0x00,0x00,0x00,0x00,
-+ 0x9c,0x8e,0x8f,0x14,0x1f,0x96,0xb9,0xa3,
-+ 0xff},
-+ {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
-+ 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
-+ 0x08,0x00,0x0f,0x00},
-+ {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
-+ 0xff}
-+ },
-+/* 0x02: MD_2_200 */
-+ {
-+ 0x50,0x18,0x08,0x1000,
-+ {0x01,0x03,0x00,0x02},
-+ 0x63,
-+ {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
-+ 0x00,0xc7,0x06,0x07,0x00,0x00,0x00,0x00,
-+ 0x9c,0x8e,0x8f,0x28,0x1f,0x96,0xb9,0xa3,
-+ 0xff},
-+ {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
-+ 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
-+ 0x08,0x00,0x0f,0x00},
-+ {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
-+ 0xff}
-+ },
-+/* 0x03: MD_3_200 - mode 0x03 - 0 */
-+ {
-+ 0x50,0x18,0x08,0x1000,
-+ {0x01,0x03,0x00,0x02},
-+ 0x63,
-+ {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
-+ 0x00,0xc7,0x06,0x07,0x00,0x00,0x00,0x00,
-+ 0x9c,0x8e,0x8f,0x28,0x1f,0x96,0xb9,0xa3,
-+ 0xff},
-+ {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
-+ 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
-+ 0x08,0x00,0x0f,0x00},
-+ {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
-+ 0xff}
-+ },
-+/* 0x04: MD_4 */
-+ {
-+ 0x28,0x18,0x08,0x4000,
-+ {0x09,0x03,0x00,0x02},
-+ 0x63,
-+ {0x2d,0x27,0x28,0x90,0x2c,0x80,0xbf,0x1f, /* 0x2c is 2b for 300 */
-+ 0x00,0xc1,0x00,0x00,0x00,0x00,0x00,0x00,
-+ 0x9c,0x8e,0x8f,0x14,0x00,0x96,0xb9,0xa2,
-+ 0xff},
-+ {0x00,0x13,0x15,0x17,0x02,0x04,0x06,0x07,
-+ 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
-+ 0x01,0x00,0x03,0x00},
-+ {0x00,0x00,0x00,0x00,0x00,0x30,0x0f,0x00,
-+ 0xff}
-+ },
-+/* 0x05: MD_5 */
-+ {
-+ 0x28,0x18,0x08,0x4000,
-+ {0x09,0x03,0x00,0x02},
-+ 0x63,
-+ {0x2d,0x27,0x28,0x90,0x2c,0x80,0xbf,0x1f, /* 0x2c is 2b for 300 */
-+ 0x00,0xc1,0x00,0x00,0x00,0x00,0x00,0x00,
-+ 0x9c,0x8e,0x8f,0x14,0x00,0x96,0xb9,0xa2,
-+ 0xff},
-+ {0x00,0x13,0x15,0x17,0x02,0x04,0x06,0x07,
-+ 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
-+ 0x01,0x00,0x03,0x00},
-+ {0x00,0x00,0x00,0x00,0x00,0x30,0x0f,0x00,
-+ 0xff}
-+ },
-+/* 0x06: MD_6 */
-+ {
-+ 0x50,0x18,0x08,0x4000,
-+ {0x01,0x01,0x00,0x06},
-+ 0x63,
-+ {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f, /* 55,81 is 54,80 for 300 */
-+ 0x00,0xc1,0x00,0x00,0x00,0x00,0x00,0x00,
-+ 0x9c,0x8e,0x8f,0x28,0x00,0x96,0xb9,0xc2,
-+ 0xff},
-+ {0x00,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
-+ 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
-+ 0x01,0x00,0x01,0x00},
-+ {0x00,0x00,0x00,0x00,0x00,0x00,0x0d,0x00,
-+ 0xff}
-+ },
-+/* 0x07: MD_7 */
-+ {
-+ 0x50,0x18,0x0e,0x1000,
-+ {0x00,0x03,0x00,0x03},
-+ 0xa6,
-+ {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
-+ 0x00,0x4d,0x0b,0x0c,0x00,0x00,0x00,0x00,
-+ 0x83,0x85,0x5d,0x28,0x0d,0x63,0xba,0xa3,
-+ 0xff},
-+ {0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,
-+ 0x10,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
-+ 0x0e,0x00,0x0f,0x08},
-+ {0x00,0x00,0x00,0x00,0x00,0x10,0x0a,0x00,
-+ 0xff}
-+ },
-+/* 0x08: MDA_DAC */
-+ {
-+ 0x00,0x00,0x00,0x0000,
-+ {0x00,0x00,0x00,0x15},
-+ 0x15,
-+ {0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,
-+ 0x15,0x15,0x15,0x15,0x15,0x15,0x3f,0x3f,
-+ 0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x00,0x00,
-+ 0x00},
-+ {0x00,0x00,0x00,0x00,0x00,0x15,0x15,0x15,
-+ 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,
-+ 0x15,0x15,0x15,0x15},
-+ {0x15,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
-+ 0x3f}
-+ },
-+/* 0x09: CGA_DAC */
-+ {
-+ 0x00,0x10,0x04,0x0114,
-+ {0x11,0x09,0x15,0x00},
-+ 0x10,
-+ {0x04,0x14,0x01,0x11,0x09,0x15,0x2a,0x3a,
-+ 0x2e,0x3e,0x2b,0x3b,0x2f,0x3f,0x2a,0x3a,
-+ 0x2e,0x3e,0x2b,0x3b,0x2f,0x3f,0x00,0x10,
-+ 0x04},
-+ {0x14,0x01,0x11,0x09,0x15,0x00,0x10,0x04,
-+ 0x14,0x01,0x11,0x09,0x15,0x2a,0x3a,0x2e,
-+ 0x3e,0x2b,0x3b,0x2f},
-+ {0x3f,0x2a,0x3a,0x2e,0x3e,0x2b,0x3b,0x2f,
-+ 0x3f}
-+ },
-+/* 0x0a: EGA_DAC */
-+ {
-+ 0x00,0x10,0x04,0x0114,
-+ {0x11,0x05,0x15,0x20},
-+ 0x30,
-+ {0x24,0x34,0x21,0x31,0x25,0x35,0x08,0x18,
-+ 0x0c,0x1c,0x09,0x19,0x0d,0x1d,0x28,0x38,
-+ 0x2c,0x3c,0x29,0x39,0x2d,0x3d,0x02,0x12,
-+ 0x06},
-+ {0x16,0x03,0x13,0x07,0x17,0x22,0x32,0x26,
-+ 0x36,0x23,0x33,0x27,0x37,0x0a,0x1a,0x0e,
-+ 0x1e,0x0b,0x1b,0x0f},
-+ {0x1f,0x2a,0x3a,0x2e,0x3e,0x2b,0x3b,0x2f,
-+ 0x3f}
-+ },
-+/* 0x0b: VGA_DAC */
-+ {
-+ 0x00,0x10,0x04,0x0114,
-+ {0x11,0x09,0x15,0x2a},
-+ 0x3a,
-+ {0x2e,0x3e,0x2b,0x3b,0x2f,0x3f,0x00,0x05,
-+ 0x08,0x0b,0x0e,0x11,0x14,0x18,0x1c,0x20,
-+ 0x24,0x28,0x2d,0x32,0x38,0x3f,0x00,0x10,
-+ 0x1f},
-+ {0x2f,0x3f,0x1f,0x27,0x2f,0x37,0x3f,0x2d,
-+ 0x31,0x36,0x3a,0x3f,0x00,0x07,0x0e,0x15,
-+ 0x1c,0x0e,0x11,0x15},
-+ {0x18,0x1c,0x14,0x16,0x18,0x1a,0x1c,0x00,
-+ 0x04}
-+ },
-+/* 0x0c */
-+ {
-+ 0x08,0x0c,0x10,0x0a08,
-+ {0x0c,0x0e,0x10,0x0b},
-+ 0x0c,
-+ {0x0d,0x0f,0x10,0x10,0x01,0x08,0x00,0x00,
-+ 0x00,0x00,0x01,0x00,0x02,0x02,0x01,0x00,
-+ 0x04,0x04,0x01,0x00,0x05,0x02,0x05,0x00,
-+ 0x06},
-+ {0x01,0x06,0x05,0x06,0x00,0x08,0x01,0x08,
-+ 0x00,0x07,0x02,0x07,0x06,0x07,0x00,0x00,
-+ 0x00,0x00,0x00,0x00},
-+ {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-+ 0x00}
-+ },
-+/* 0x0d: MD_D */
-+ {
-+ 0x28,0x18,0x08,0x2000,
-+ {0x09,0x0f,0x00,0x06},
-+ 0x63,
-+ {0x2d,0x27,0x28,0x90,0x2c,0x80,0xbf,0x1f, /* 2c is 2b for 300 */
-+ 0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,
-+ 0x9c,0x8e,0x8f,0x14,0x00,0x96,0xb9,0xe3,
-+ 0xff},
-+ {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
-+ 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
-+ 0x01,0x00,0x0f,0x00},
-+ {0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x0f,
-+ 0xff}
-+ },
-+/* 0x0e: MD_E */
-+ {
-+ 0x50,0x18,0x08,0x4000,
-+ {0x01,0x0f,0x00,0x06},
-+ 0x63,
-+ {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f, /* 55,81 is 54,80 for 300 */
-+ 0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,
-+ 0x9c,0x8e,0x8f,0x28,0x00,0x96,0xb9,0xe3,
-+ 0xff},
-+ {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
-+ 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
-+ 0x01,0x00,0x0f,0x00},
-+ {0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x0f,
-+ 0xff}
-+ },
-+/* 0x0f: ExtVGATable - modes > 0x13 */
-+ {
-+ 0x00,0x00,0x00,0x0000,
-+ {0x01,0x0f,0x00,0x0e},
-+ 0x23,
-+ {0x5f,0x4f,0x50,0x82,0x54,0x80,0x0b,0x3e,
-+ 0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
-+ 0xea,0x8c,0xdf,0x28,0x40,0xe7,0x04,0xa3,
-+ 0xff},
-+ {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
-+ 0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,
-+ 0x01,0x00,0x00,0x00},
-+ {0x00,0x00,0x00,0x00,0x00,0x40,0x05,0x0f,
-+ 0xff}
-+ },
-+/* 0x10: ROM_SAVEPTR - totally different for 300 */
-+ {
-+ 0x9f,0x3b,0x00,0x00c0,
-+ {0x00,0x00,0x00,0x00},
-+ 0x00,
-+ {0x00,0x00,0x00,0x00,0x00,0x00,0xbb,0x3f,
-+ 0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,
-+ 0x00,0x00,0x1a,0x00,0xac,0x3e,0x00,0xc0,
-+ 0x00},
-+ {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-+ 0x00,0x00,0x00,0x00},
-+ {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-+ 0x00}
-+ },
-+/* 0x11: MD_F */
-+ {
-+ 0x50,0x18,0x0e,0x8000,
-+ {0x01,0x0f,0x00,0x06},
-+ 0xa2,
-+ {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f, /* 55,81 is 54,80 on 300 */
-+ 0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
-+ 0x82,0x84,0x5d,0x28,0x0f,0x63,0xba,0xe3, /* 82,84 is 83,85 on 300 */
-+ 0xff},
-+ {0x00,0x08,0x00,0x00,0x18,0x18,0x00,0x00,
-+ 0x00,0x08,0x00,0x00,0x00,0x18,0x00,0x00,
-+ 0x0b,0x00,0x05,0x00},
-+ {0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x05,
-+ 0xff}
-+ },
-+/* 0x12: MD_10 */
-+ {
-+ 0x50,0x18,0x0e,0x8000,
-+ {0x01,0x0f,0x00,0x06},
-+ 0xa3,
-+ {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f, /* 55,81 is 54,80 on 300 */
-+ 0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
-+ 0x82,0x84,0x5d,0x28,0x0f,0x63,0xba,0xe3, /* 82,84 is 83,85 on 300 */
-+ 0xff},
-+ {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
-+ 0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
-+ 0x01,0x00,0x0f,0x00},
-+ {0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x0f,
-+ 0xff}
-+ },
-+/* 0x13: MD_0_350 */
-+ {
-+ 0x28,0x18,0x0e,0x0800,
-+ {0x09,0x03,0x00,0x02},
-+ 0xa3,
-+ {0x2d,0x27,0x28,0x90,0x2b,0xb1,0xbf,0x1f, /* b1 is a0 on 300 */
-+ 0x00,0x4d,0x0b,0x0c,0x00,0x00,0x00,0x00,
-+ 0x83,0x85,0x5d,0x14,0x1f,0x63,0xba,0xa3,
-+ 0xff},
-+ {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
-+ 0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
-+ 0x08,0x00,0x0f,0x00},
-+ {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
-+ 0xff}
-+ },
-+/* 0x14: MD_1_350 */
-+ {
-+ 0x28,0x18,0x0e,0x0800,
-+ {0x09,0x03,0x00,0x02},
-+ 0xa3,
-+ {0x2d,0x27,0x28,0x90,0x2b,0xa0,0xbf,0x1f,
-+ 0x00,0x4d,0x0b,0x0c,0x00,0x00,0x00,0x00,
-+ 0x83,0x85,0x5d,0x14,0x1f,0x63,0xba,0xa3,
-+ 0xff},
-+ {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
-+ 0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
-+ 0x08,0x00,0x0f,0x00},
-+ {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
-+ 0xff}
-+ },
-+/* 0x15: MD_2_350 */
-+ {
-+ 0x50,0x18,0x0e,0x1000,
-+ {0x01,0x03,0x00,0x02},
-+ 0xa3,
-+ {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
-+ 0x00,0x4d,0x0b,0x0c,0x00,0x00,0x00,0x00,
-+ 0x83,0x85,0x5d,0x28,0x1f,0x63,0xba,0xa3,
-+ 0xff},
-+ {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
-+ 0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
-+ 0x08,0x00,0x0f,0x00},
-+ {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
-+ 0xff}
-+ },
-+/* 0x16: MD_3_350 - mode 0x03 - 1 */
-+ {
-+ 0x50,0x18,0x0e,0x1000,
-+ {0x01,0x03,0x00,0x02},
-+ 0xa3,
-+ {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
-+ 0x00,0x4d,0x0b,0x0c,0x00,0x00,0x00,0x00,
-+ 0x83,0x85,0x5d,0x28,0x1f,0x63,0xba,0xa3,
-+ 0xff},
-+ {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
-+ 0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
-+ 0x08,0x00,0x0f,0x00},
-+ {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
-+ 0xff}
-+ },
-+/* 0x17: MD_0_1_400 */
-+ {
-+ 0x28,0x18,0x10,0x0800,
-+ {0x08,0x03,0x00,0x02},
-+ 0x67,
-+ {0x2d,0x27,0x28,0x90,0x2b,0xb1,0xbf,0x1f, /* b1 is a0 on 300 */
-+ 0x00,0x4f,0x0d,0x0e,0x00,0x00,0x00,0x00,
-+ 0x9c,0x8e,0x8f,0x14,0x1f,0x96,0xb9,0xa3,
-+ 0xff},
-+ {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
-+ 0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
-+ 0x0c,0x00,0x0f,0x08},
-+ {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
-+ 0xff}
-+ },
-+/* 0x18: MD_2_3_400 - mode 0x03 - 2 */
-+ {
-+ 0x50,0x18,0x10,0x1000,
-+ {0x00,0x03,0x00,0x02},
-+ 0x67,
-+ {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
-+ 0x00,0x4f,0x0d,0x0e,0x00,0x00,0x00,0x00,
-+ 0x9c,0x8e,0x8f,0x28,0x1f,0x96,0xb9,0xa3,
-+ 0xff},
-+ {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
-+ 0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
-+ 0x0c,0x00,0x0f,0x08},
-+ {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
-+ 0xff}
-+ },
-+/* 0x19: MD_7_400 */
-+ {
-+ 0x50,0x18,0x10,0x1000,
-+ {0x00,0x03,0x00,0x02},
-+ 0x66,
-+ {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
-+ 0x00,0x4f,0x0d,0x0e,0x00,0x00,0x00,0x00,
-+ 0x9c,0x8e,0x8f,0x28,0x0f,0x96,0xb9,0xa3,
-+ 0xff},
-+ {0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,
-+ 0x10,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
-+ 0x0e,0x00,0x0f,0x08},
-+ {0x00,0x00,0x00,0x00,0x00,0x10,0x0a,0x00,
-+ 0xff}
-+ },
-+/* 0x1a: MD_11 */
-+ {
-+ 0x50,0x1d,0x10,0xa000,
-+ {0x01,0x0f,0x00,0x06},
-+ 0xe3,
-+ {0x5f,0x4f,0x50,0x82,0x55,0x81,0x0b,0x3e, /* 55,81 is 54,80 on 300 */
-+ 0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
-+ 0xe9,0x8b,0xdf,0x28,0x00,0xe7,0x04,0xc3, /* e9,8b is ea,8c on 300 */
-+ 0xff},
-+ {0x00,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
-+ 0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
-+ 0x01,0x00,0x0f,0x00},
-+ {0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x01,
-+ 0xff}
-+ },
-+/* 0x1b: ExtEGATable - Modes <= 0x02 */
-+ {
-+ 0x50,0x1d,0x10,0xa000,
-+ {0x01,0x0f,0x00,0x06},
-+ 0xe3,
-+ {0x5f,0x4f,0x50,0x82,0x55,0x81,0x0b,0x3e, /* 55,81 is 54,80 on 300 */
-+ 0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
-+ 0xe9,0x8b,0xdf,0x28,0x00,0xe7,0x04,0xe3, /* e9,8b is ea,8c on 300 */
-+ 0xff},
-+ {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
-+ 0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
-+ 0x01,0x00,0x0f,0x00},
-+ {0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x0f,
-+ 0xff}
-+ },
-+/* 0x1c: MD_13 */
-+ {
-+ 0x28,0x18,0x08,0x2000,
-+ {0x01,0x0f,0x00,0x0e},
-+ 0x63,
-+ {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f, /* 55,81 is 54,80 on 300 */
-+ 0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,
-+ 0x9c,0x8e,0x8f,0x28,0x40,0x96,0xb9,0xa3,
-+ 0xff},
-+ {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
-+ 0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,
-+ 0x41,0x00,0x0f,0x00},
-+ {0x00,0x00,0x00,0x00,0x00,0x40,0x05,0x0f,
-+ 0xff}
-+ }
-+};
-+
-+static const UCHAR SiS_NTSCTiming[] = {
-+ 0x17,0x1d,0x03,0x09,0x05,0x06,0x0c,0x0c,
-+ 0x94,0x49,0x01,0x0a,0x06,0x0d,0x04,0x0a,
-+ 0x06,0x14,0x0d,0x04,0x0a,0x00,0x85,0x1b,
-+ 0x0c,0x50,0x00,0x97,0x00,0xda,0x4a,0x17,
-+ 0x7d,0x05,0x4b,0x00,0x00,0xe2,0x00,0x02,
-+ 0x03,0x0a,0x65,0x9d,0x08,0x92,0x8f,0x40,
-+ 0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x50,
-+ 0x00,0x40,0x44,0x00,0xdb,0x02,0x3b,0x00
-+};
-+
-+static const UCHAR SiS_PALTiming[] = {
-+ 0x19,0x52,0x35,0x6e,0x04,0x38,0x3d,0x70,
-+ 0x94,0x49,0x01,0x12,0x06,0x3e,0x35,0x6d,
-+ 0x06,0x14,0x3e,0x35,0x6d,0x00,0x45,0x2b,
-+ 0x70,0x50,0x00,0x9b,0x00,0xd9,0x5d,0x17,
-+ 0x7d,0x05,0x45,0x00,0x00,0xe8,0x00,0x02,
-+ 0x0d,0x00,0x68,0xb0,0x0b,0x92,0x8f,0x40,
-+ 0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x63,
-+ 0x00,0x40,0x3e,0x00,0xe1,0x02,0x28,0x00
-+};
-+
-+static const UCHAR SiS_HiTVExtTiming[] = {
-+ 0x32,0x65,0x2c,0x5f,0x08,0x31,0x3a,0x64,
-+ 0x28,0x02,0x01,0x3d,0x06,0x3e,0x35,0x6d,
-+ 0x06,0x14,0x3e,0x35,0x6d,0x00,0xc5,0x3f,
-+ 0x64,0x90,0x33,0x8c,0x18,0x36,0x3e,0x13,
-+ 0x2a,0xde,0x2a,0x44,0x40,0x2a,0x44,0x40,
-+ 0x8e,0x8e,0x82,0x07,0x0b,0x92,0x0f,0x40,
-+ 0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x3d,
-+ 0x63,0x4f,0x27,0x00,0xfc,0xff,0x6a,0x00
-+};
-+
-+static const UCHAR SiS_HiTVSt1Timing[] = {
-+ 0x32,0x65,0x2c,0x5f,0x08,0x31,0x3a,0x65,
-+ 0x28,0x02,0x01,0x3d,0x06,0x3e,0x35,0x6d,
-+ 0x06,0x14,0x3e,0x35,0x6d,0x00,0xc5,0x3f,
-+ 0x65,0x90,0x7b,0xa8,0x03,0xf0,0x87,0x03,
-+ 0x11,0x15,0x11,0xcf,0x10,0x11,0xcf,0x10,
-+ 0x35,0x35,0x3b,0x69,0x1d,0x92,0x0f,0x40,
-+ 0x60,0x80,0x14,0x90,0x8c,0x60,0x04,0x86,
-+ 0xaf,0x5d,0x0e,0x00,0xfc,0xff,0x2d,0x00
-+};
-+
-+static const UCHAR SiS_HiTVSt2Timing[] = {
-+ 0x32,0x65,0x2c,0x5f,0x08,0x31,0x3a,0x64,
-+ 0x28,0x02,0x01,0x3d,0x06,0x3e,0x35,0x6d,
-+ 0x06,0x14,0x3e,0x35,0x6d,0x00,0xc5,0x3f,
-+ 0x64,0x90,0x33,0x8c,0x18,0x36,0x3e,0x13,
-+ 0x2a,0xde,0x2a,0x44,0x40,0x2a,0x44,0x40,
-+ 0x8e,0x8e,0x82,0x07,0x0b,0x92,0x0f,0x40,
-+ 0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x3d,
-+ 0x63,0x4f,0x27,0x00,0xfc,0xff,0x6a,0x00
-+};
-+
-+static const UCHAR SiS_HiTVTextTiming[] = {
-+ 0x32,0x65,0x2c,0x5f,0x08,0x31,0x3a,0x65,
-+ 0x28,0x02,0x01,0x3d,0x06,0x3e,0x35,0x6d,
-+ 0x06,0x14,0x3e,0x35,0x6d,0x00,0xc5,0x3f,
-+ 0x65,0x90,0xe7,0xbc,0x03,0x0c,0x97,0x03,
-+ 0x14,0x78,0x14,0x08,0x20,0x14,0x08,0x20,
-+ 0xc8,0xc8,0x3b,0xd2,0x26,0x92,0x0f,0x40,
-+ 0x60,0x80,0x14,0x90,0x8c,0x60,0x04,0x96,
-+ 0x72,0x5c,0x11,0x00,0xfc,0xff,0x32,0x00
-+};
-+
-+static const UCHAR SiS_HiTVGroup3Data[] = {
-+ 0x00,0x1a,0x22,0x63,0x62,0x22,0x08,0x5f,
-+ 0x05,0x21,0xb2,0xb2,0x55,0x77,0x2a,0xa6,
-+ 0x25,0x2f,0x47,0xfa,0xc8,0xff,0x8e,0x20,
-+ 0x8c,0x6e,0x60,0x2e,0x58,0x48,0x72,0x44,
-+ 0x56,0x36,0x4f,0x6e,0x3f,0x80,0x00,0x80,
-+ 0x4f,0x7f,0x03,0xa8,0x7d,0x20,0x1a,0xa9,
-+ 0x14,0x05,0x03,0x7e,0x64,0x31,0x14,0x75,
-+ 0x18,0x05,0x18,0x05,0x4c,0xa8,0x01
-+};
-+
-+static const UCHAR SiS_HiTVGroup3Simu[] = {
-+ 0x00,0x1a,0x22,0x63,0x62,0x22,0x08,0x95,
-+ 0xdb,0x20,0xb8,0xb8,0x55,0x47,0x2a,0xa6,
-+ 0x25,0x2f,0x47,0xfa,0xc8,0xff,0x8e,0x20,
-+ 0x8c,0x6e,0x60,0x15,0x26,0xd3,0xe4,0x11,
-+ 0x56,0x36,0x4f,0x6e,0x3f,0x80,0x00,0x80,
-+ 0x67,0x36,0x01,0x47,0x0e,0x10,0xbe,0xb4,
-+ 0x01,0x05,0x03,0x7e,0x65,0x31,0x14,0x75,
-+ 0x18,0x05,0x18,0x05,0x4c,0xa8,0x01
-+};
-+
-+static const UCHAR SiS_HiTVGroup3Text[] = {
-+ 0x00,0x1a,0x22,0x63,0x62,0x22,0x08,0xa7,
-+ 0xf5,0x20,0xce,0xce,0x55,0x47,0x2a,0xa6,
-+ 0x25,0x2f,0x47,0xfa,0xc8,0xff,0x8e,0x20,
-+ 0x8c,0x6e,0x60,0x18,0x2c,0x0c,0x20,0x22,
-+ 0x56,0x36,0x4f,0x6e,0x3f,0x80,0x00,0x80,
-+ 0x93,0x3c,0x01,0x50,0x2f,0x10,0xf4,0xca,
-+ 0x01,0x05,0x03,0x7e,0x65,0x31,0x14,0x75,
-+ 0x18,0x05,0x18,0x05,0x4c,0xa8,0x01
-+};
-+
-+static const UCHAR SiS_NTSCPhase[] = {0x21,0xed,0xba,0x08}; /* Was {0x21,0xed,0x8a,0x08}; */
-+static const UCHAR SiS_PALPhase[] = {0x2a,0x05,0xe3,0x00}; /* Was {0x2a,0x05,0xd3,0x00}; */
-+static const UCHAR SiS_PALMPhase[] = {0x21,0xE4,0x2E,0x9B};
-+static const UCHAR SiS_PALNPhase[] = {0x21,0xF4,0x3E,0xBA};
-+static const UCHAR SiS_NTSCPhase2[] = {0x21,0xF0,0x7B,0xD6};
-+static const UCHAR SiS_PALPhase2[] = {0x2a,0x09,0x86,0xe9};
-+static const UCHAR SiS_PALMPhase2[] = {0x21,0xE6,0xEF,0xA4};
-+static const UCHAR SiS_PALNPhase2[] = {0x21,0xF6,0x94,0x46};
-+static const UCHAR SiS_SpecialPhase[] = {0x1e,0x8c,0x5c,0x7a};
-+
-+static const SiS_TVDataStruct SiS_StPALData[]=
-+{
-+ { 1, 1, 864, 525,1270, 400, 100, 0, 760,0xf4,0xff,0x1c,0x22},
-+ { 1, 1, 864, 525,1270, 350, 100, 0, 760,0xf4,0xff,0x1c,0x22},
-+ { 1, 1, 864, 525,1270, 400, 0, 0, 720,0xf1,0x04,0x1f,0x18},
-+ { 1, 1, 864, 525,1270, 350, 0, 0, 720,0xf4,0x0b,0x1c,0x0a},
-+ { 1, 1, 864, 525,1270, 480, 50, 0, 760,0xf4,0xff,0x1c,0x22},
-+ { 1, 1, 864, 525,1270, 600, 50, 0, 0,0xf4,0xff,0x1c,0x22}
-+};
-+
-+static const SiS_TVDataStruct SiS_ExtPALData[] =
-+{
-+ { 27, 10, 848, 448,1270, 530, 50, 0, 50,0xf4,0xff,0x1c,0x22}, /* 640x400, 320x200 */
-+ { 108, 35, 848, 398,1270, 530, 50, 0, 50,0xf4,0xff,0x1c,0x22},
-+ { 12, 5, 954, 448,1270, 530, 50, 0, 50,0xf1,0x04,0x1f,0x18},
-+ { 9, 4, 960, 463,1644, 438, 50, 0, 50,0xf4,0x0b,0x1c,0x0a},
-+ { 9, 4, 848, 528,1270, 530, 0, 0, 50,0xf5,0xfb,0x1b,0x2a}, /* 640x480, 320x240 */
-+ { 36, 25,1060, 648,1316, 530, 438, 0, 438,0xeb,0x05,0x25,0x16}, /* 800x600, 400x300 */
-+ { 3, 2,1080, 619,1270, 540, 438, 0, 438,0xf3,0x00,0x1d,0x20}, /* 720x576 */
-+ { 1, 1,1170, 821,1270, 520, 686, 0, 686,0xF3,0x00,0x1D,0x20} /* 1024x768 */
-+};
-+
-+static const SiS_TVDataStruct SiS_StNTSCData[]=
-+{
-+ { 1, 1, 858, 525,1270, 400, 50, 0, 760,0xf1,0x04,0x1f,0x18},
-+ { 1, 1, 858, 525,1270, 350, 50, 0, 640,0xf1,0x04,0x1f,0x18},
-+ { 1, 1, 858, 525,1270, 400, 0, 0, 720,0xf1,0x04,0x1f,0x18},
-+ { 1, 1, 858, 525,1270, 350, 0, 0, 720,0xf4,0x0b,0x1c,0x0a},
-+ { 1, 1, 858, 525,1270, 480, 0, 0, 760,0xf1,0x04,0x1f,0x18}
-+};
-+
-+static const SiS_TVDataStruct SiS_ExtNTSCData[]=
-+{
-+ { 143, 65, 858, 443,1270, 440, 171, 0, 171,0xf1,0x04,0x1f,0x18}, /* 640x400, 320x200 */
-+ { 88, 35, 858, 393,1270, 440, 171, 0, 171,0xf1,0x04,0x1f,0x18},
-+ { 143, 70, 924, 443,1270, 440, 92, 0, 92,0xf1,0x04,0x1f,0x18},
-+ { 143, 70, 924, 393,1270, 440, 92, 0, 92,0xf4,0x0b,0x1c,0x0a},
-+ { 143, 76, 836, 523,1270, 440, 224, 0, 0,0xf1,0x05,0x1f,0x16}, /* 640x480, 320x240 */
-+ { 143, 120,1056, 643,1270, 440, 0, 128, 0,0xf4,0x10,0x1c,0x00}, /* 800x600, 400x300 */
-+ { 143, 76, 836, 523,1270, 440, 0, 128, 0,0xee,0x0c,0x22,0x08}, /* 720x480 - BETTER (from 300 series) */
-+/*{ 2, 1, 858, 503,1270, 480, 0, 128, 0,0xee,0x0c,0x22,0x08},*/ /* 720x480 (old, from 650) */
-+ { 1, 1,1100, 811,1412, 440, 0, 128, 0,0xee,0x0c,0x22,0x08} /* 1024x768 CORRECTED */
-+/*{ 65, 64,1056, 791,1270, 480, 638, 0, 0,0xEE,0x0C,0x22,0x08} */ /* 1024x768 */
-+#if 0 /* 300 series was: */
-+ { 143, 65, 858, 443,1270, 440, 171, 0, 171,0xf1,0x04,0x1f,0x18},
-+ { 88, 35, 858, 393,1270, 440, 171, 0, 171,0xf1,0x04,0x1f,0x18},
-+ { 143, 70, 924, 443,1270, 440, 92, 0, 92,0xf1,0x04,0x1f,0x18},
-+ { 143, 70, 924, 393,1270, 440, 92, 0, 92,0xf4,0x0b,0x1c,0x0a},
-+ { 143, 76, 836, 523,1270, 440, 224, 0, 0,0xf1,0x05,0x1f,0x16},
-+ { 143, 120,1056, 643,1270, 440, 0, 128, 0,0xf4,0x10,0x1c,0x00},
-+ { 143, 76, 836, 523,1270, 440, 0, 128, 0,0xee,0x0c,0x22,0x08},
-+ { 65, 64,1056, 791,1270, 480, 638, 0, 0,0xf1,0x04,0x1f,0x18}
-+#endif
-+};
-+
-+
-+static const SiS_TVDataStruct SiS_St2HiTVData[]=
-+{
-+ { 3, 1, 0x348,0x1e3,0x670,0x3c0,0x032, 0, 0, 0x00,0x00,0x00,0x00},
-+ { 1, 1, 0x37c,0x233,0x2b2,0x2bc, 0, 0, 0, 0x00,0x00,0x00,0x00},
-+ { 3, 1, 0x348,0x1e3,0x670,0x3c0,0x032, 0, 0, 0x00,0x00,0x00,0x00},
-+ { 1, 1, 0x3e8,0x233,0x311,0x2bc, 0, 0, 0, 0x00,0x00,0x00,0x00},
-+ { 5, 2, 0x348,0x233,0x670,0x3c0,0x08d,128, 0, 0x00,0x00,0x00,0x00},
-+ { 8, 5, 0x41a,0x2ab,0x670,0x3c0,0x17c,128, 0, 0x00,0x00,0x00,0x00}
-+};
-+
-+static const SiS_TVDataStruct SiS_ExtHiTVData[]=
-+{
-+ { 6, 1, 0x348,0x233,0x660,0x3c0, 0, 0, 0, 0x00,0x00,0x00,0x00},
-+ { 3, 1, 0x3c0,0x233,0x660,0x3c0, 0, 0, 0, 0x00,0x00,0x00,0x00},
-+ { 3, 1, 0x348,0x1e3,0x660,0x3c0, 0, 0, 0, 0x00,0x00,0x00,0x00},
-+ { 3, 1, 0x3c0,0x233,0x660,0x3c0, 0, 0, 0, 0x00,0x00,0x00,0x00},
-+ { 5, 1, 0x348,0x233,0x670,0x3c0,0x166,128, 0, 0x00,0x00,0x00,0x00}, /* 640x480 */
-+ { 16, 5, 0x41a,0x2ab,0x670,0x3c0,0x143,128, 0, 0x00,0x00,0x00,0x00}, /* 800x600 */
-+ { 25, 12, 0x4ec,0x353,0x670,0x3c0,0x032, 0, 0, 0x00,0x00,0x00,0x00}, /* 1024x768 */
-+ { 5, 4, 0x627,0x464,0x670,0x3c0,0x128, 0, 0, 0x00,0x00,0x00,0x00}, /* 1280x1024 */
-+ { 4, 1, 0x41a,0x233,0x670,0x3c0,0x143,128, 0, 0x00,0x00,0x00,0x00}, /* 800x480 */
-+ { 5, 2, 0x578,0x293,0x670,0x3c0,0x032, 0, 0, 0x00,0x00,0x00,0x00}, /* 1024x576 */
-+ { 8, 5, 0x6d6,0x323,0x670,0x3c0,0x128, 0, 0, 0x00,0x00,0x00,0x00} /* 1280x720 */
-+};
-+
-+static const UCHAR SiS_OutputSelect = 0x40;
-+
-+static const UCHAR SiS_SoftSetting = 0x30; /* RAM setting */
-+
-+static const SiS_LCDDataStruct SiS_LCD1280x960Data[] =
-+{
-+ { 9, 2, 800, 500,1800,1000},
-+ { 9, 2, 800, 500,1800,1000},
-+ { 4, 1, 900, 500,1800,1000},
-+ { 4, 1, 900, 500,1800,1000},
-+ { 9, 2, 800, 500,1800,1000},
-+ { 30, 11,1056, 625,1800,1000},
-+ { 5, 3,1350, 800,1800,1000},
-+ { 1, 1,1576,1050,1576,1050},
-+ { 1, 1,1800,1000,1800,1000}
-+};
-+
-+static const SiS_LCDDataStruct SiS_StLCD1280x768Data[] =
-+{
-+ { 211, 100, 2100, 408, 1688, 802 }, /* These values are *wrong* */
-+ { 211, 64, 1536, 358, 1688, 802 }, /* (which is why they aren't used yet) */
-+ { 211, 100, 2100, 408, 1688, 802 },
-+ { 211, 64, 1536, 358, 1688, 802 },
-+ { 211, 48, 840, 488, 1688, 802 },
-+ { 211, 72, 1008, 609, 1688, 802 },
-+ { 211, 128, 1400, 776, 1688, 802 },
-+ { 211, 205, 1680, 1041, 1688, 802 },
-+ { 1, 1, 1688, 802, 1688, 802 } /* That's the only one that *might* be correct */
-+};
-+
-+static const SiS_LCDDataStruct SiS_ExtLCD1280x768Data[] =
-+{
-+ { 211, 100, 2100, 408, 1688, 802 }, /* These values are *wrong* */
-+ { 211, 64, 1536, 358, 1688, 802 }, /* (which is why they aren't used yet) */
-+ { 211, 100, 2100, 408, 1688, 802 },
-+ { 211, 64, 1536, 358, 1688, 802 },
-+ { 211, 48, 840, 488, 1688, 802 },
-+ { 211, 72, 1008, 609, 1688, 802 },
-+ { 211, 128, 1400, 776, 1688, 802 },
-+ { 211, 205, 1680, 1041, 1688, 802 },
-+ { 1, 1, 1688, 802, 1688, 802 } /* That's the only one that *might* be correct */
-+};
-+
-+static const SiS_LCDDataStruct SiS_NoScaleData1280x768[] =
-+{ /* All values guessed */
-+ { 1, 1, 1688, 802, 1688, 802},
-+ { 1, 1, 1688, 802, 1688, 802},
-+ { 1, 1, 1688, 802, 1688, 802},
-+ { 1, 1, 1688, 802, 1688, 802},
-+ { 1, 1, 1688, 802, 1688, 802},
-+ { 1, 1, 1688, 802, 1688, 802},
-+ { 1, 1, 1688, 802, 1688, 802},
-+ { 1, 1, 1688, 802, 1688, 802},
-+ { 1, 1, 1688, 802, 1688, 802}
-+};
-+
-+static const SiS_LCDDataStruct SiS_StLCD1400x1050Data[] =
-+{
-+ { 211, 100, 2100, 408, 1688, 1066 },
-+ { 211, 64, 1536, 358, 1688, 1066 },
-+ { 211, 100, 2100, 408, 1688, 1066 },
-+ { 211, 64, 1536, 358, 1688, 1066 },
-+ { 211, 48, 840, 488, 1688, 1066 },
-+ { 211, 72, 1008, 609, 1688, 1066 },
-+ { 211, 128, 1400, 776, 1688, 1066 },
-+ { 211, 205, 1680, 1041, 1688, 1066 },
-+ { 1, 1, 1688, 1066, 1688, 1066 }
-+};
-+
-+static const SiS_LCDDataStruct SiS_ExtLCD1400x1050Data[] =
-+{
-+ { 211, 100, 2100, 408, 1688, 1066 },
-+ { 211, 64, 1536, 358, 1688, 1066 },
-+ { 211, 100, 2100, 408, 1688, 1066 },
-+ { 211, 64, 1536, 358, 1688, 1066 },
-+ { 211, 48, 840, 488, 1688, 1066 },
-+ { 211, 72, 1008, 609, 1688, 1066 },
-+ { 211, 128, 1400, 776, 1688, 1066 },
-+ { 211, 205, 1680, 1041, 1688, 1066 },
-+ { 1, 1, 1688, 1066, 1688, 1066 }
-+};
-+
-+static const SiS_LCDDataStruct SiS_NoScaleData1400x1050[] =
-+{
-+ { 1, 1, 1688, 1066, 1688, 1066 },
-+ { 1, 1, 1688, 1066, 1688, 1066 },
-+ { 1, 1, 1688, 1066, 1688, 1066 },
-+ { 1, 1, 1688, 1066, 1688, 1066 },
-+ { 1, 1, 1688, 1066, 1688, 1066 },
-+ { 1, 1, 1688, 1066, 1688, 1066 },
-+ { 1, 1, 1688, 1066, 1688, 1066 },
-+ { 1, 1, 1688, 1066, 1688, 1066 },
-+ { 1, 1, 1688, 1066, 1688, 1066 }
-+};
-+
-+static const SiS_LCDDataStruct SiS_StLCD1600x1200Data[] =
-+{ /* TODO */
-+ { 0, 0, 0, 0, 0, 0}
-+};
-+
-+static const SiS_LCDDataStruct SiS_ExtLCD1600x1200Data[] =
-+{ /* TODO */
-+ { 0, 0, 0, 0, 0, 0}
-+};
-+
-+static const SiS_LCDDataStruct SiS_NoScaleData1600x1200[] =
-+{ /* TODO - values guessed */
-+ {1, 1, 2048, 1250, 2048, 1250},
-+ {1, 1, 2048, 1250, 2048, 1250},
-+ {1, 1, 2048, 1250, 2048, 1250},
-+ {1, 1, 2048, 1250, 2048, 1250},
-+ {1, 1, 2048, 1250, 2048, 1250},
-+ {1, 1, 2048, 1250, 2048, 1250},
-+ {1, 1, 2048, 1250, 2048, 1250},
-+ {1, 1, 2048, 1250, 2048, 1250},
-+ {1, 1, 2048, 1250, 2048, 1250},
-+ {1, 1, 2048, 1250, 2048, 1250}
-+};
-+
-+static const SiS_LCDDataStruct SiS_NoScaleData[] =
-+{
-+ { 1, 1, 800, 449, 800, 449 },
-+ { 1, 1, 800, 449, 800, 449 },
-+ { 1, 1, 900, 449, 900, 449 },
-+ { 1, 1, 900, 449, 900, 449 },
-+ { 1, 1, 800, 525, 800, 525 },
-+ { 1, 1,1056, 628,1056, 628 },
-+ { 1, 1,1344, 806,1344, 806 },
-+ { 1, 1,1688,1066,1688,1066 },
-+ { 1, 1,1688, 802,1688, 802 }, /* 1280x768: 802 was 806 in both cases */
-+ { 1, 1,2048,1250,2048,1250 }, /* 1600x1200 (guessed) */
-+ { 1, 1,1800,1000,1800,1000 } /* 1280x960 */
-+};
-+
-+static const SiS_LVDSDataStruct SiS_LVDS320x480Data_1[]=
-+{
-+ { 848, 433, 400, 525},
-+ { 848, 389, 400, 525},
-+ { 848, 433, 400, 525},
-+ { 848, 389, 400, 525},
-+ { 848, 518, 400, 525},
-+ {1056, 628, 400, 525},
-+ { 400, 525, 400, 525},
-+ { 800, 449,1000, 644},
-+ { 800, 525,1000, 635}
-+};
-+
-+static const SiS_LVDSDataStruct SiS_LVDS800x600Data_1[]=
-+{
-+ { 848, 433,1060, 629},
-+ { 848, 389,1060, 629},
-+ { 848, 433,1060, 629},
-+ { 848, 389,1060, 629},
-+ { 848, 518,1060, 629},
-+ {1056, 628,1056, 628},
-+ {1056, 628,1056, 628},
-+ { 800, 449,1000, 644},
-+ { 800, 525,1000, 635}
-+};
-+
-+static const SiS_LVDSDataStruct SiS_LVDS800x600Data_2[]=
-+{
-+ {1056, 628,1056, 628},
-+ {1056, 628,1056, 628},
-+ {1056, 628,1056, 628},
-+ {1056, 628,1056, 628},
-+ {1056, 628,1056, 628},
-+ {1056, 628,1056, 628},
-+ {1056, 628,1056, 628},
-+ { 800, 449,1000, 644},
-+ { 800, 525,1000, 635}
-+};
-+
-+
-+
-+static const SiS_LVDSDataStruct SiS_LVDS1280x1024Data_1[]=
-+{
-+ {1048, 442,1688,1066},
-+ {1048, 392,1688,1066},
-+ {1048, 442,1688,1066},
-+ {1048, 392,1688,1066},
-+ {1048, 522,1688,1066},
-+ {1208, 642,1688,1066},
-+ {1432, 810,1688,1066},
-+ {1688,1066,1688,1066}
-+};
-+
-+static const SiS_LVDSDataStruct SiS_LVDS1280x1024Data_2[]=
-+{
-+ {1688,1066,1688,1066},
-+ {1688,1066,1688,1066},
-+ {1688,1066,1688,1066},
-+ {1688,1066,1688,1066},
-+ {1688,1066,1688,1066},
-+ {1688,1066,1688,1066},
-+ {1688,1066,1688,1066},
-+ {1688,1066,1688,1066}
-+};
-+
-+static const SiS_LVDSDataStruct SiS_LVDS1024x768Data_1[]=
-+{
-+ { 840, 438,1344, 806},
-+ { 840, 409,1344, 806},
-+ { 840, 438,1344, 806},
-+ { 840, 409,1344, 806},
-+ { 840, 518,1344, 806}, /* 640x480 */
-+ {1050, 638,1344, 806}, /* 800x600 */
-+ {1344, 806,1344, 806}, /* 1024x768 */
-+ { 800, 449,1280, 801},
-+ { 800, 525,1280, 813}
-+};
-+
-+static const SiS_LVDSDataStruct SiS_LVDS1024x768Data_2[]=
-+{
-+ {1344, 806,1344, 806},
-+ {1344, 806,1344, 806},
-+ {1344, 806,1344, 806},
-+ {1344, 806,1344, 806},
-+ {1344, 806,1344, 806},
-+ {1344, 806,1344, 806},
-+ {1344, 806,1344, 806},
-+ { 800, 449,1280, 801},
-+ { 800, 525,1280, 813}
-+};
-+
-+/* Custom data for Barco iQ R300 */
-+static const SiS_LVDSDataStruct SiS_LVDSBARCO1366Data_1[]=
-+{
-+ { 832, 438,1331, 806},
-+ { 832, 388,1331, 806},
-+ { 832, 438,1331, 806},
-+ { 832, 388,1331, 806},
-+ { 832, 518,1331, 806},
-+ {1050, 638,1344, 806},
-+ {1344, 806,1344, 806},
-+ {1688,1066,1688,1066},
-+ {1688,1066,1688,1066} /* 1360x1024 */
-+};
-+
-+/* Custom data for Barco iQ R300 */
-+static const SiS_LVDSDataStruct SiS_LVDSBARCO1366Data_2[]=
-+{
-+ {1344, 806,1344, 806},
-+ {1344, 806,1344, 806},
-+ {1344, 806,1344, 806},
-+ {1344, 806,1344, 806},
-+ {1344, 806,1344, 806},
-+ {1344, 806,1344, 806},
-+ {1344, 806,1344, 806},
-+ {1688,1066,1688,1066},
-+ {1688,1066,1688,1066} /* 1360x1024 */
-+};
-+
-+static const SiS_LVDSDataStruct SiS_LVDSBARCO1024Data_1[]=
-+{
-+ { 832, 438,1331, 806},
-+ { 832, 409,1331, 806},
-+ { 832, 438,1331, 806},
-+ { 832, 409,1331, 806},
-+ { 832, 518,1331, 806}, /* 640x480 */
-+ {1050, 638,1344, 806}, /* 800x600 */
-+ {1344, 806,1344, 806}, /* 1024x768 */
-+};
-+
-+static const SiS_LVDSDataStruct SiS_LVDSBARCO1024Data_2[]=
-+{
-+ {1344, 806,1344, 806},
-+ {1344, 806,1344, 806},
-+ {1344, 806,1344, 806},
-+ {1344, 806,1344, 806},
-+ {1344, 806,1344, 806},
-+ {1344, 806,1344, 806},
-+ {1344, 806,1344, 806},
-+};
-+
-+static const SiS_LVDSDataStruct SiS_LVDS1400x1050Data_1[]=
-+{
-+ { 928, 416, 1688,1066},
-+ { 928, 366, 1688,1066},
-+ { 928, 416, 1688,1066},
-+ { 928, 366, 1688,1066},
-+ { 928, 496, 1688,1066},
-+ {1088, 616, 1688,1066},
-+ {1312, 784, 1688,1066},
-+ {1568,1040, 1688,1066},
-+ {1688,1066, 1688,1066}
-+};
-+
-+static const SiS_LVDSDataStruct SiS_LVDS1400x1050Data_2[]=
-+{
-+ {1688,1066, 1688,1066},
-+ {1688,1066, 1688,1066},
-+ {1688,1066, 1688,1066},
-+ {1688,1066, 1688,1066},
-+ {1688,1066, 1688,1066},
-+ {1688,1066, 1688,1066},
-+ {1688,1066, 1688,1066},
-+ {1688,1066, 1688,1066},
-+ {1688,1066, 1688,1066},
-+};
-+
-+static const SiS_LVDSDataStruct SiS_LVDS1600x1200Data_1[]=
-+{
-+ {1088, 450, 2048,1250},
-+ {1088, 400, 2048,1250},
-+ {1088, 450, 2048,1250},
-+ {1088, 400, 2048,1250},
-+ {1088, 530, 2048,1250},
-+ {1248, 650, 2048,1250},
-+ {1472, 818, 2048,1250},
-+ {1728,1066, 2048,1250},
-+ {1848,1066, 2048,1250},
-+ {2048,1250, 2048,1250}
-+};
-+
-+static const SiS_LVDSDataStruct SiS_LVDS1600x1200Data_2[]=
-+{
-+ {2048,1250, 2048,1250},
-+ {2048,1250, 2048,1250},
-+ {2048,1250, 2048,1250},
-+ {2048,1250, 2048,1250},
-+ {2048,1250, 2048,1250},
-+ {2048,1250, 2048,1250},
-+ {2048,1250, 2048,1250},
-+ {2048,1250, 2048,1250},
-+ {2048,1250, 2048,1250},
-+ {2048,1250, 2048,1250}
-+};
-+
-+static const SiS_LVDSDataStruct SiS_LVDS1280x768Data_1[]=
-+{
-+ { 768, 438, 1408, 806},
-+ { 768, 388, 1408, 806},
-+ { 768, 438, 1408, 806},
-+ { 768, 388, 1408, 806},
-+ { 768, 518, 1408, 806},
-+ { 928, 638, 1408, 806},
-+ {1152, 806, 1408, 806},
-+ {1408, 806, 1408, 806},
-+ {1408, 806, 1408, 806}
-+};
-+
-+static const SiS_LVDSDataStruct SiS_LVDS1280x768Data_2[]=
-+{
-+ {1408, 806, 1408, 806},
-+ {1408, 806, 1408, 806},
-+ {1408, 806, 1408, 806},
-+ {1408, 806, 1408, 806},
-+ {1408, 806, 1408, 806},
-+ {1408, 806, 1408, 806},
-+ {1408, 806, 1408, 806},
-+ {1408, 806, 1408, 806},
-+ {1408, 806, 1408, 806}
-+};
-+
-+static const SiS_LVDSDataStruct SiS_LVDS1024x600Data_1[] =
-+{
-+ {840, 604,1344, 800},
-+ {840, 560,1344, 800},
-+ {840, 604,1344, 800},
-+ {840, 560,1344, 800},
-+ {840, 689,1344, 800},
-+ {1050, 800,1344, 800},
-+ {1344, 800,1344, 800},
-+ {800, 449,1280, 789},
-+ {800, 525,1280, 785}
-+};
-+
-+static const SiS_LVDSDataStruct SiS_LVDS1024x600Data_2[] =
-+{
-+ {1344, 800,1344, 800},
-+ {1344, 800,1344, 800},
-+ {1344, 800,1344, 800},
-+ {1344, 800,1344, 800},
-+ {1344, 800,1344, 800},
-+ {1344, 800,1344, 800},
-+ {1344, 800,1344, 800},
-+ { 800, 449,1280, 801},
-+ { 800, 525,1280, 813}
-+};
-+
-+static const SiS_LVDSDataStruct SiS_LVDS1152x768Data_1[] =
-+{
-+ { 840, 438,1344, 806},
-+ { 840, 409,1344, 806},
-+ { 840, 438,1344, 806},
-+ { 840, 409,1344, 806},
-+ { 840, 518,1344, 806},
-+ {1050, 638,1344, 806},
-+ {1344, 806,1344, 806},
-+ { 800, 449,1280, 801},
-+ { 800, 525,1280, 813}
-+};
-+
-+static const SiS_LVDSDataStruct SiS_LVDS1152x768Data_2[] =
-+{
-+ {1344, 806,1344, 806},
-+ {1344, 806,1344, 806},
-+ {1344, 806,1344, 806},
-+ {1344, 806,1344, 806},
-+ {1344, 806,1344, 806},
-+ {1344, 806,1344, 806},
-+ {1344, 806,1344, 806},
-+ { 800, 449,1280, 801},
-+ { 800, 525,1280, 813}
-+};
-+
-+/* TW: Pass 1:1 data */
-+static const SiS_LVDSDataStruct SiS_LVDSXXXxXXXData_1[]=
-+{
-+ { 800, 449, 800, 449},
-+ { 800, 449, 800, 449},
-+ { 900, 449, 900, 449},
-+ { 900, 449, 900, 449},
-+ { 800, 525, 800, 525}, /* 640x480 */
-+ {1056, 628, 1056, 628}, /* 800x600 */
-+ {1344, 806, 1344, 806}, /* 1024x768 */
-+ {1344,1066, 1344,1066}, /* 1280x1024 */ /* INSERTED ! */
-+ {1688, 806, 1688, 806}, /* 1280x768 */
-+ /* No other panels ! */
-+};
-+
-+static const SiS_LVDSDataStruct SiS_LVDS640x480Data_1[]=
-+{
-+ { 800, 445, 800, 525}, /* 800, 449, 800, 449 */
-+ { 800, 395, 800, 525},
-+ { 800, 445, 800, 525},
-+ { 800, 395, 800, 525},
-+ { 800, 525, 800, 525},
-+ { 800, 525, 800, 525}, /* pseudo */
-+ { 800, 525, 800, 525} /* pseudo */
-+};
-+
-+/* FSTN 320x240 */
-+static const SiS_LVDSDataStruct SiS_LVDS640x480Data_2[]=
-+{
-+ { 800, 445, 800, 525},
-+ { 800, 395, 800, 525},
-+ { 800, 445, 800, 525},
-+ { 800, 395, 800, 525},
-+ { 800, 525, 800, 525},
-+ { 800, 525, 800, 525}, /* pseudo */
-+ { 800, 525, 800, 525} /* pseudo */
-+};
-+
-+
-+static const SiS_LVDSDataStruct SiS_LVDS1280x960Data_1[]=
-+{
-+ { 840, 438,1344, 806},
-+ { 840, 409,1344, 806},
-+ { 840, 438,1344, 806},
-+ { 840, 409,1344, 806},
-+ { 840, 518,1344, 806},
-+ {1050, 638,1344, 806},
-+ {1344, 806,1344, 806},
-+ { 800, 449,1280, 801},
-+ { 800, 525,1280, 813}
-+};
-+
-+static const SiS_LVDSDataStruct SiS_LVDS1280x960Data_2[]=
-+{
-+ {1344, 806,1344, 806},
-+ {1344, 806,1344, 806},
-+ {1344, 806,1344, 806},
-+ {1344, 806,1344, 806},
-+ {1344, 806,1344, 806},
-+ {1344, 806,1344, 806},
-+ {1344, 806,1344, 806},
-+ { 800, 449,1280, 801},
-+ { 800, 525,1280, 813}
-+};
-+
-+/* LCDA */
-+
-+static const SiS_LVDSDataStruct SiS_LCDA1400x1050Data_1[]=
-+{ /* TW: Might be temporary (invalid) data */
-+ { 928, 416, 1688,1066},
-+ { 928, 366, 1688,1066},
-+ {1008, 416, 1688,1066},
-+ {1008, 366, 1688,1066},
-+ {1200, 530, 1688,1066},
-+ {1088, 616, 1688,1066},
-+ {1312, 784, 1688,1066},
-+ {1568,1040, 1688,1066},
-+ {1688,1066, 1688,1066}
-+};
-+
-+static const SiS_LVDSDataStruct SiS_LCDA1400x1050Data_2[]=
-+{ /* TW: Temporary data. Not valid */
-+ {1344, 806,1344, 806},
-+ {1344, 806,1344, 806},
-+ {1344, 806,1344, 806},
-+ {1344, 806,1344, 806},
-+ {1344, 806,1344, 806},
-+ {1344, 806,1344, 806},
-+ {1344, 806,1344, 806},
-+ { 800, 449,1280, 801},
-+ { 800, 525,1280, 813}
-+};
-+
-+static const SiS_LVDSDataStruct SiS_LCDA1600x1200Data_1[]=
-+{ /* TW: Temporary data. Not valid */
-+ {1344, 806,1344, 806},
-+ {1344, 806,1344, 806},
-+ {1344, 806,1344, 806},
-+ {1344, 806,1344, 806},
-+ {1344, 806,1344, 806},
-+ {1344, 806,1344, 806},
-+ {1344, 806,1344, 806},
-+ { 800, 449,1280, 801},
-+ { 800, 525,1280, 813}
-+};
-+
-+static const SiS_LVDSDataStruct SiS_LCDA1600x1200Data_2[]=
-+{ /* TW: Temporary data. Not valid */
-+ {0, 0, 0, 0},
-+ {0, 0, 0, 0},
-+ {0, 0, 0, 0},
-+ {0, 0, 0, 0},
-+ {0, 0, 0, 0},
-+ {0, 0, 0, 0},
-+ {0, 0, 0, 0},
-+ {0, 0, 0, 0},
-+ {0, 0, 0, 0},
-+ {0, 0, 0, 0},
-+ {0, 0, 0, 0},
-+ {0, 0, 0, 0}
-+};
-+
-+static const SiS_LVDSDataStruct SiS_CHTVUNTSCData[]=
-+{
-+ { 840, 600, 840, 600},
-+ { 840, 600, 840, 600},
-+ { 840, 600, 840, 600},
-+ { 840, 600, 840, 600},
-+ { 784, 600, 784, 600},
-+ {1064, 750,1064, 750},
-+ {1160, 945,1160, 945}
-+};
-+
-+static const SiS_LVDSDataStruct SiS_CHTVONTSCData[]=
-+{
-+ { 840, 525, 840, 525},
-+ { 840, 525, 840, 525},
-+ { 840, 525, 840, 525},
-+ { 840, 525, 840, 525},
-+ { 784, 525, 784, 525},
-+ {1040, 700,1040, 700},
-+ {1160, 840,1160, 840}
-+};
-+
-+static const SiS_LVDSDesStruct SiS_PanelType1076_1[]=
-+{ /* 1024x768 */
-+ { 0 , 0},
-+ { 0 , 0},
-+ { 0 , 0},
-+ { 0 , 0},
-+ { 0 , 0},
-+ { 0 , 0},
-+ { 0 , 0},
-+ { 0 , 0},
-+ { 0 , 0}
-+};
-+
-+static const SiS_LVDSDesStruct SiS_PanelType1076_2[]=
-+{ /* 1024x768 */
-+ { 1184, 622 },
-+ { 1184, 597 },
-+ { 1184, 622 },
-+ { 1184, 597 },
-+ { 1152, 622 },
-+ { 1232, 722 },
-+ { 0, 0 },
-+ { 0, 794 },
-+ { 0, 0 }
-+};
-+
-+static const SiS_LVDSDesStruct SiS_PanelType1210_1[]=
-+{ /* 1280x1024 */
-+ { 0 , 0},
-+ { 0 , 0},
-+ { 0 , 0},
-+ { 0 , 0},
-+ { 0 , 0},
-+ { 0 , 0},
-+ { 0 , 0},
-+ { 0 , 0},
-+ { 0 , 0}
-+};
-+
-+static const SiS_LVDSDesStruct SiS_PanelType1210_2[]=
-+{ /* 1280x1024 */
-+ { 0 , 0},
-+ { 0 , 0},
-+ { 0 , 0},
-+ { 0 , 0},
-+ { 0 , 0},
-+ { 0 , 0},
-+ { 0 , 0},
-+ { 0 , 0},
-+ { 0 , 0}
-+};
-+
-+static const SiS_LVDSDesStruct SiS_PanelType1296_1[]=
-+{ /* 1400x1050 */
-+ { 0 , 0},
-+ { 0 , 0},
-+ { 0 , 0},
-+ { 0 , 0},
-+ { 0 , 0},
-+ { 0 , 0},
-+ { 0 , 0},
-+ { 0 , 0},
-+ { 0 , 0}
-+};
-+
-+static const SiS_LVDSDesStruct SiS_PanelType1296_2[]=
-+{ /* 1400x1050 - looks heavily invalid */
-+ { 808 , 740},
-+ { 0 , 715},
-+ { 632 , 740},
-+ { 632 , 715},
-+ { 1307, 780},
-+ { 1387,1157},
-+ { 1499, 924},
-+ { 1627,1052},
-+ { 0 , 0}
-+};
-+
-+static const SiS_LVDSDesStruct SiS_PanelType1600_1[]=
-+{ /* 1600x1200 */
-+ { 0 , 0},
-+ { 0 , 0},
-+ { 0 , 0},
-+ { 0 , 0},
-+ { 0 , 0},
-+ { 0 , 0},
-+ { 0 , 0},
-+ { 0 , 0},
-+ { 0 , 0},
-+ { 0 , 0}
-+};
-+
-+static const SiS_LVDSDesStruct SiS_PanelType1600_2[]=
-+{ /* 1600x1200 - BIOS looks heavily invalid, not copied */
-+ { 0 , 0},
-+ { 0 , 0},
-+ { 0 , 0},
-+ { 0 , 0},
-+ { 0 , 0},
-+ { 0 , 0},
-+ { 0 , 0},
-+ { 0 , 0},
-+ { 0 , 0},
-+ { 0 , 0}
-+};
-+
-+static const SiS_LVDSDesStruct SiS_PanelTypeNS_1[]=
-+{
-+ { 8, 0},
-+ { 8, 0},
-+ { 8, 0},
-+ { 8, 0},
-+ { 8, 0},
-+ { 0, 0},
-+ { 0, 0},
-+ { 0, 0},
-+ { 0, 806},
-+ { 0, 0 }
-+};
-+
-+static const SiS_LVDSDesStruct SiS_PanelTypeNS_2[] =
-+{
-+ { 0 , 0},
-+ { 0 , 0},
-+ { 0 , 0},
-+ { 0 , 0},
-+ { 0 , 0},
-+ { 0 , 0},
-+ { 0 , 0},
-+ { 0 , 0},
-+ { 0 , 0},
-+ { 0 , 0}
-+};
-+
-+static const SiS_LVDSDesStruct SiS_CHTVUNTSCDesData[]=
-+{
-+ { 0, 0},
-+ { 0, 0},
-+ { 0, 0},
-+ { 0, 0},
-+ { 0, 0},
-+ { 0, 0},
-+ { 0, 0}
-+};
-+
-+static const SiS_LVDSDesStruct SiS_CHTVONTSCDesData[]=
-+{
-+ { 0, 0},
-+ { 0, 0},
-+ { 0, 0},
-+ { 0, 0},
-+ { 0, 0},
-+ { 0, 0},
-+ { 0, 0}
-+};
-+
-+static const SiS_LVDSDesStruct SiS_CHTVUPALDesData[]=
-+{
-+ {256, 0},
-+ {256, 0},
-+ {256, 0},
-+ {256, 0},
-+ { 0, 0},
-+ { 0, 0},
-+ { 0, 0}
-+};
-+
-+static const SiS_LVDSDesStruct SiS_CHTVOPALDesData[]=
-+{
-+ {256, 0},
-+ {256, 0},
-+ {256, 0},
-+ {256, 0},
-+ { 0, 0},
-+ { 0, 0},
-+ { 0, 0}
-+};
-+
-+static const SiS_LVDSCRT1DataStruct SiS_LVDSCRT1320x480_1[] =
-+{
-+ {{0x65,0x4f,0x89,0x56,0x83,0xaa,0x1f,
-+ 0x90,0x85,0x8f,0xab,0x30,0x00,0x05,
-+ 0x00 }},
-+ {{0x65,0x4f,0x89,0x56,0x83,0x83,0x1f,
-+ 0x5e,0x83,0x5d,0x79,0x10,0x00,0x05,
-+ 0x00 }},
-+ {{0x65,0x4f,0x89,0x54,0x9f,0xc4,0x1f,
-+ 0x92,0x89,0x8f,0xb5,0x30,0x00,0x01,
-+ 0x00 }},
-+ {{0x65,0x4f,0x89,0x56,0x83,0x83,0x1f,
-+ 0x5e,0x83,0x5d,0x79,0x10,0x00,0x05,
-+ 0x00 }},
-+ {{0x65,0x4f,0x89,0x56,0x83,0x04,0x3e,
-+ 0xe0,0x85,0xdf,0xfb,0x10,0x00,0x05,
-+ 0x00 }},
-+ {{0x7f,0x63,0x83,0x6c,0x1c,0x72,0xf0,
-+ 0x58,0x8c,0x57,0x73,0x20,0x00,0x06,
-+ 0x01 }},
-+ {{0x2d,0x27,0x90,0x2c,0x80,0x0b,0x3e,
-+ 0xe9,0x8b,0xe7,0x04,0x00,0x00,0x00,
-+ 0x00 }}
-+};
-+
-+static const SiS_LVDSCRT1DataStruct SiS_LVDSCRT11024x600_1[] =
-+{
-+ {{0x64,0x4f,0x88,0x54,0x9f,0x5a,0x3e,
-+ 0xe8,0x8f,0x8f,0x5b,0x00,0x00,0x01,
-+ 0x00}},
-+ {{0x64,0x4f,0x88,0x54,0x9f,0x2e,0x3e,
-+ 0xb9,0x80,0x5d,0x2f,0x00,0x00,0x01,
-+ 0x00}},
-+ {{0x64,0x4f,0x88,0x54,0x9f,0x5a,0x3e,
-+ 0xe8,0x8f,0x8f,0x5b,0x00,0x00,0x01,
-+ 0x00}},
-+ {{0x64,0x4f,0x88,0x54,0x9f,0x2e,0x3e,
-+ 0xb9,0x80,0x5d,0x2f,0x00,0x00,0x01,
-+ 0x00}},
-+ {{0x64,0x4f,0x88,0x54,0x9f,0xaf,0xba,
-+ 0x3b,0x82,0xdf,0xb0,0x00,0x00,0x01,
-+ 0x00}},
-+ {{0x7e,0x63,0x82,0x68,0x15,0x1e,0xf1,
-+ 0xae,0x85,0x57,0x1f,0x30,0x00,0x26,
-+ 0x01}},
-+ {{0xa3,0x7f,0x87,0x86,0x97,0x1e,0xf1,
-+ 0xae,0x85,0x57,0x1f,0x30,0x00,0x02,
-+ 0x01}}
-+};
-+
-+static const SiS_LVDSCRT1DataStruct SiS_LVDSCRT11024x600_1_H[] =
-+{
-+ {{0x2f,0x27,0x93,0x2b,0x90,0xc4,0x1f,
-+ 0x92,0x89,0x8f,0xb5,0x30,0x00,0x44,
-+ 0x00}},
-+ {{0x2f,0x27,0x93,0x2b,0x90,0x97,0x1f,
-+ 0x60,0x87,0x5d,0x83,0x10,0x00,0x44,
-+ 0x00}},
-+ {{0x2f,0x27,0x93,0x2b,0x90,0xc4,0x1f,
-+ 0x92,0x89,0x8f,0xb5,0x30,0x00,0x44,
-+ 0x00}},
-+ {{0x2f,0x27,0x93,0x2b,0x90,0x97,0x1f,
-+ 0x60,0x87,0x5d,0x83,0x10,0x00,0x44,
-+ 0x00}},
-+ {{0x2f,0x27,0x93,0x2b,0x90,0x04,0x3e,
-+ 0xe2,0x89,0xdf,0x05,0x00,0x00,0x44,
-+ 0x00}},
-+ {{0x3c,0x31,0x80,0x35,0x1c,0x7c,0xf0,
-+ 0x5a,0x8f,0x57,0x7d,0x20,0x00,0x55,
-+ 0x01}},
-+ {{0x4f,0x3f,0x93,0x45,0x0d,0x24,0xf5,
-+ 0x02,0x88,0xff,0x25,0x10,0x00,0x01,
-+ 0x01}}
-+};
-+
-+static const SiS_LVDSCRT1DataStruct SiS_LVDSCRT11024x600_2[] =
-+{
-+ {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
-+ 0x4a,0x80,0x8f,0x25,0x30,0x00,0x06,
-+ 0x00}},
-+ {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
-+ 0x31,0x87,0x5d,0x25,0x30,0x00,0x06,
-+ 0x00}},
-+ {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
-+ 0x4a,0x80,0x8f,0x25,0x30,0x00,0x06,
-+ 0x00}},
-+ {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
-+ 0x31,0x87,0x5d,0x25,0x30,0x00,0x06,
-+ 0x00}},
-+ {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
-+ 0x72,0x88,0xdf,0x25,0x30,0x00,0x06,
-+ 0x00}},
-+ {{0xa3,0x63,0x87,0x78,0x89,0x24,0xf1,
-+ 0xae,0x84,0x57,0x25,0x30,0x00,0x02,
-+ 0x01}},
-+ {{0xa3,0x7f,0x87,0x86,0x97,0x24,0xf5,
-+ 0x02,0x88,0xff,0x25,0x10,0x00,0x02,
-+ 0x01}}
-+};
-+
-+static const SiS_LVDSCRT1DataStruct SiS_LVDSCRT11024x600_2_H[] =
-+{
-+ {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
-+ 0x4a,0x80,0x8f,0x25,0x30,0x00,0x01,
-+ 0x00}},
-+ {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
-+ 0x31,0x87,0x5d,0x25,0x30,0x00,0x01,
-+ 0x00}},
-+ {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
-+ 0x4a,0x80,0x8f,0x25,0x30,0x00,0x01,
-+ 0x00}},
-+ {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
-+ 0x31,0x87,0x5d,0x25,0x30,0x00,0x01,
-+ 0x00}},
-+ {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
-+ 0x72,0x88,0xdf,0x25,0x30,0x00,0x01,
-+ 0x00}},
-+ {{0x4f,0x31,0x93,0x3e,0x06,0x24,0xf1,
-+ 0xae,0x84,0x57,0x25,0x30,0x00,0x01,
-+ 0x01}},
-+ {{0x4f,0x3f,0x93,0x45,0x0d,0x24,0xf5,
-+ 0x02,0x88,0xff,0x25,0x10,0x00,0x01,
-+ 0x01}}
-+};
-+
-+static const SiS_LVDSCRT1DataStruct SiS_LVDSCRT11152x768_1[] =
-+{
-+ {{0x64,0x4f,0x88,0x54,0x9f,0xc4,0x1f,
-+ 0x92,0x89,0x8f,0xb5,0x30,0x00,0x01,
-+ 0x00}},
-+ {{0x64,0x4f,0x88,0x54,0x9f,0x97,0x1f,
-+ 0x60,0x87,0x5d,0x83,0x10,0x00,0x01,
-+ 0x00}},
-+ {{0x64,0x4f,0x88,0x54,0x9f,0xc4,0x1f,
-+ 0x92,0x89,0x8f,0xb5,0x30,0x00,0x01,
-+ 0x00}},
-+ {{0x64,0x4f,0x88,0x54,0x9f,0x97,0x1f,
-+ 0x60,0x87,0x5d,0x83,0x10,0x00,0x01,
-+ 0x00}},
-+ {{0x64,0x4f,0x88,0x54,0x9f,0x04,0x3e,
-+ 0xe2,0x89,0xdf,0x05,0x00,0x00,0x01,
-+ 0x00}},
-+ {{0x7e,0x63,0x82,0x68,0x15,0x7c,0xf0,
-+ 0x5a,0x8f,0x57,0x7d,0x20,0x00,0x26,
-+ 0x01}},
-+ {{0xa3,0x7f,0x87,0x86,0x97,0x24,0xf5,
-+ 0x02,0x88,0xff,0x25,0x10,0x00,0x02,
-+ 0x01}}
-+};
-+
-+static const SiS_LVDSCRT1DataStruct SiS_LVDSCRT11152x768_1_H[] =
-+{
-+ {{0x2f,0x27,0x93,0x2b,0x90,0xc4,0x1f,
-+ 0x92,0x89,0x8f,0xb5,0x30,0x00,0x44,
-+ 0x00}},
-+ {{0x2f,0x27,0x93,0x2b,0x90,0x97,0x1f,
-+ 0x60,0x87,0x5d,0x83,0x10,0x00,0x44,
-+ 0x00}},
-+ {{0x2f,0x27,0x93,0x2b,0x90,0xc4,0x1f,
-+ 0x92,0x89,0x8f,0xb5,0x30,0x00,0x44,
-+ 0x00}},
-+ {{0x2f,0x27,0x93,0x2b,0x90,0x97,0x1f,
-+ 0x60,0x87,0x5d,0x83,0x10,0x00,0x44,
-+ 0x00}},
-+ {{0x2f,0x27,0x93,0x2b,0x90,0x04,0x3e,
-+ 0xe2,0x89,0xdf,0x05,0x00,0x00,0x44,
-+ 0x00}},
-+ {{0x3c,0x31,0x80,0x35,0x1c,0x7c,0xf0,
-+ 0x5a,0x8f,0x57,0x7d,0x20,0x00,0x55,
-+ 0x01}},
-+ {{0x4f,0x3f,0x93,0x45,0x0d,0x24,0xf5,
-+ 0x02,0x88,0xff,0x25,0x10,0x00,0x01,
-+ 0x01}}
-+};
-+
-+static const SiS_LVDSCRT1DataStruct SiS_LVDSCRT11152x768_2[] =
-+{
-+ {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
-+ 0x4a,0x80,0x8f,0x25,0x30,0x00,0x06,
-+ 0x00}},
-+ {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
-+ 0x31,0x87,0x5d,0x25,0x30,0x00,0x06,
-+ 0x00}},
-+ {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
-+ 0x4a,0x80,0x8f,0x25,0x30,0x00,0x06,
-+ 0x00}},
-+ {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
-+ 0x31,0x87,0x5d,0x25,0x30,0x00,0x06,
-+ 0x00}},
-+ {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
-+ 0x72,0x88,0xdf,0x25,0x30,0x00,0x06,
-+ 0x00}},
-+ {{0xa3,0x63,0x87,0x78,0x89,0x24,0xf1,
-+ 0xae,0x84,0x57,0x25,0x30,0x00,0x02,
-+ 0x01}},
-+ {{0xa3,0x7f,0x87,0x86,0x97,0x24,0xf5,
-+ 0x02,0x88,0xff,0x25,0x10,0x00,0x02,
-+ 0x01}}
-+};
-+
-+static const SiS_LVDSCRT1DataStruct SiS_LVDSCRT11152x768_2_H[] =
-+{
-+ {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
-+ 0x4a,0x80,0x8f,0x25,0x30,0x00,0x01,
-+ 0x00}},
-+ {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
-+ 0x31,0x87,0x5d,0x25,0x30,0x00,0x01,
-+ 0x00}},
-+ {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
-+ 0x4a,0x80,0x8f,0x25,0x30,0x00,0x01,
-+ 0x00}},
-+ {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
-+ 0x31,0x87,0x5d,0x25,0x30,0x00,0x01,
-+ 0x00}},
-+ {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
-+ 0x72,0x88,0xdf,0x25,0x30,0x00,0x01,
-+ 0x00}},
-+ {{0x4f,0x31,0x93,0x3e,0x06,0x24,0xf1,
-+ 0xae,0x84,0x57,0x25,0x30,0x00,0x01,
-+ 0x01}},
-+ {{0x4f,0x3f,0x93,0x45,0x0d,0x24,0xf5,
-+ 0x02,0x88,0xff,0x25,0x10,0x00,0x01,
-+ 0x01}}
-+};
-+
-+static const SiS_LVDSCRT1DataStruct SiS_LVDSCRT11280x768_1[] =
-+{
-+ {{0x5b,0x4f,0x9f,0x55,0x19,0xb4,0x1f,
-+ 0x9c,0x8e,0x8f,0xb5,0x10,0x00,0x01,
-+ 0x00}},
-+ {{0x5b,0x4f,0x9f,0x55,0x19,0x82,0x1f,
-+ 0x6a,0x8c,0x5d,0x83,0x30,0x00,0x01,
-+ 0x00}},
-+ {{0x5b,0x4f,0x9f,0x55,0x19,0xb4,0x1f,
-+ 0x9c,0x8e,0x8f,0xb5,0x10,0x00,0x01,
-+ 0x00}},
-+ {{0x5b,0x4f,0x9f,0x55,0x19,0x82,0x1f,
-+ 0x6a,0x8c,0x5d,0x83,0x30,0x00,0x01,
-+ 0x00}},
-+ {{0x5b,0x4f,0x9f,0x55,0x19,0x04,0x3e,
-+ 0xec,0x8e,0xdf,0x05,0x20,0x00,0x01,
-+ 0x00}},
-+ {{0x6f,0x63,0x93,0x69,0x8d,0x7c,0xf0,
-+ 0x64,0x86,0x57,0x7d,0x20,0x00,0x05,
-+ 0x01}},
-+ {{0x8b,0x7f,0x8f,0x85,0x09,0x24,0xf5,
-+ 0x0c,0x8e,0xff,0x25,0x30,0x00,0x02,
-+ 0x01}},
-+ {{0xab,0x9f,0x8f,0xa5,0x89,0x24,0xf5,
-+ 0x0c,0x8e,0xff,0x25,0x30,0x00,0x06,
-+ 0x01}},
-+ {{0xab,0x9f,0x8f,0xa5,0x89,0x24,0xf5,
-+ 0x0c,0x8e,0xff,0x25,0x30,0x00,0x06,
-+ 0x01}}
-+};
-+
-+static const SiS_LVDSCRT1DataStruct SiS_LVDSCRT11280x768_1_H[] =
-+{
-+ {{0x47,0x27,0x8b,0x2c,0x1a,0x9e,0x1f,
-+ 0x93,0x86,0x8f,0x9f,0x30,0x00,0x05,
-+ 0x00}},
-+ {{0x47,0x27,0x8b,0x2c,0x1a,0x6c,0x1f,
-+ 0x60,0x84,0x5d,0x6d,0x10,0x00,0x05,
-+ 0x00}},
-+ {{0x47,0x27,0x8b,0x30,0x1e,0x9e,0x1f,
-+ 0x92,0x86,0x8f,0x9f,0x30,0x00,0x05,
-+ 0x00}},
-+ {{0x47,0x27,0x8b,0x2c,0x1a,0x6c,0x1f,
-+ 0x60,0x84,0x5d,0x6d,0x10,0x00,0x05,
-+ 0x00}},
-+ {{0x47,0x27,0x8b,0x2c,0x1a,0xee,0x1f,
-+ 0xe2,0x86,0xdf,0xef,0x10,0x00,0x05,
-+ 0x00}},
-+ {{0x51,0x31,0x95,0x36,0x04,0x66,0xf0,
-+ 0x5a,0x8e,0x57,0x67,0x20,0x00,0x01,
-+ 0x01}},
-+ {{0x5f,0x3f,0x83,0x44,0x92,0x0e,0xf5,
-+ 0x02,0x86,0xff,0x0f,0x10,0x00,0x01,
-+ 0x01}},
-+ {{0x6f,0x4f,0x93,0x54,0x82,0x0e,0x5a,
-+ 0x02,0x86,0xff,0x0f,0x09,0x00,0x05,
-+ 0x01}},
-+ {{0x6f,0x4f,0x93,0x54,0x82,0x0e,0x5a,
-+ 0x02,0x86,0xff,0x0f,0x09,0x00,0x05,
-+ 0x01}}
-+};
-+
-+static const SiS_LVDSCRT1DataStruct SiS_LVDSCRT11280x768_2[] =
-+{
-+ {{0xab,0x60,0x9f,0x80,0x04,0x24,0xbb,
-+ 0x54,0x86,0xdb,0xda,0x00,0x00,0x02,
-+ 0x00}},
-+ {{0xab,0x60,0x9f,0x80,0x04,0x24,0xbb,
-+ 0x3b,0x8d,0xc2,0xc1,0x00,0x00,0x02,
-+ 0x00}},
-+ {{0xab,0x60,0x9f,0x80,0x04,0x24,0xbb,
-+ 0x54,0x86,0xdb,0xda,0x00,0x00,0x02,
-+ 0x00}},
-+ {{0xab,0x60,0x9f,0x80,0x04,0x24,0xbb,
-+ 0x3b,0x8d,0xc2,0xc1,0x00,0x00,0x02,
-+ 0x00}},
-+ {{0xab,0x60,0x9f,0x80,0x04,0x24,0xb3,
-+ 0x7c,0x8e,0x03,0x02,0x10,0x00,0x02,
-+ 0x01}},
-+ {{0xab,0x63,0x8f,0x8a,0x8e,0x24,0xf1,
-+ 0xb6,0x88,0x57,0x25,0x10,0x00,0x02,
-+ 0x01}},
-+ {{0xab,0x7f,0x8f,0x98,0x9c,0x24,0xf5,
-+ 0x0a,0x8c,0xff,0x25,0x30,0x00,0x02,
-+ 0x01}},
-+ {{0xab,0x9f,0x8f,0xa8,0x8c,0x24,0xf5,
-+ 0x0a,0x8c,0xff,0x25,0x30,0x00,0x06,
-+ 0x01}},
-+ {{0xab,0x9f,0x8f,0xa8,0x8c,0x24,0xf5,
-+ 0x0a,0x8c,0xff,0x25,0x30,0x00,0x06,
-+ 0x01}}
-+};
-+
-+static const SiS_LVDSCRT1DataStruct SiS_LVDSCRT11280x768_2_H[] =
-+{
-+ {{0x83,0x38,0x97,0x58,0x9c,0x24,0xbb,
-+ 0x54,0x86,0xdb,0xda,0x00,0x00,0x01,
-+ 0x00}},
-+ {{0x83,0x38,0x97,0x58,0x9c,0x24,0xbb,
-+ 0x3b,0x8d,0xc2,0xc1,0x00,0x00,0x01,
-+ 0x00}},
-+ {{0x83,0x38,0x97,0x58,0x9c,0x24,0xbb,
-+ 0x54,0x86,0xdb,0xda,0x00,0x00,0x01,
-+ 0x00}},
-+ {{0x83,0x38,0x97,0x58,0x9c,0x24,0xbb,
-+ 0x3b,0x8d,0xc2,0xc1,0x00,0x00,0x01,
-+ 0x00}},
-+ {{0x83,0x38,0x97,0x58,0x9c,0x24,0xb3,
-+ 0x7c,0x8e,0x03,0x02,0x10,0x00,0x01,
-+ 0x01}},
-+ {{0x79,0x31,0x9d,0x58,0x9c,0x24,0xf1,
-+ 0xb6,0x88,0x57,0x25,0x10,0x00,0x01,
-+ 0x01}},
-+ {{0x6b,0x3f,0x8f,0x58,0x9c,0x24,0xf5,
-+ 0x0a,0x8c,0xff,0x25,0x30,0x00,0x01,
-+ 0x01}},
-+ {{0xab,0x9f,0x8f,0xa8,0x8c,0x24,0xf5,
-+ 0x0a,0x8c,0xff,0x25,0x30,0x00,0x06,
-+ 0x01}},
-+ {{0xab,0x9f,0x8f,0xa8,0x8c,0x24,0xf5,
-+ 0x0a,0x8c,0xff,0x25,0x30,0x00,0x06,
-+ 0x01}}
-+};
-+
-+static const SiS_LVDSCRT1DataStruct SiS_LVDSCRT1XXXxXXX_1[] =
-+{
-+ {{0x5f,0x4f,0x82,0x55,0x81,0xbf,0x1f,
-+ 0x9c,0x8e,0x96,0xb9,0x30,0x00,0x05,
-+ 0x00}},
-+ {{0x5f,0x4f,0x82,0x55,0x81,0xbf,0x1f,
-+ 0x9c,0x8e,0x96,0xb9,0x30,0x00,0x05,
-+ 0x00}},
-+ {{0x5f,0x4f,0x82,0x55,0x81,0xbf,0x1f,
-+ 0x9c,0x8e,0x96,0xb9,0x30,0x00,0x05,
-+ 0x00}},
-+ {{0x5f,0x4f,0x82,0x55,0x81,0xbf,0x1f,
-+ 0x9c,0x8e,0x96,0xb9,0x30,0x00,0x05,
-+ 0x00}},
-+ {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
-+ 0xe9,0x8b,0xe7,0x04,0x00,0x00,0x05,
-+ 0x00}},
-+ {{0x7f,0x63,0x83,0x6c,0x1c,0x72,0xf0,
-+ 0x58,0x8c,0x57,0x73,0x20,0x00,0x06,
-+ 0x01}},
-+ {{0xa3,0x7f,0x87,0x86,0x97,0x24,0xf5,
-+ 0x02,0x88,0xff,0x25,0x10,0x00,0x02,
-+ 0x01}},
-+ {{0xce,0x9f,0x92,0xa8,0x14,0x28,0x5a,
-+ 0x00,0x84,0xff,0x29,0x09,0x00,0x07,
-+ 0x01}},
-+ {{0xce,0x9f,0x92,0xa9,0x17,0x24,0xf5,
-+ 0x02,0x88,0xff,0x25,0x10,0x00,0x07,
-+ 0x01}}
-+};
-+
-+static const SiS_LVDSCRT1DataStruct SiS_LVDSCRT1XXXxXXX_1_H[] =
-+{
-+ {{0x38,0x27,0x9c,0x2c,0x80,0xbf,0x1f,
-+ 0x9c,0x8e,0x96,0xb9,0x30,0x00,0x00,
-+ 0x00}},
-+ {{0x38,0x27,0x9c,0x2c,0x80,0xbf,0x1f,
-+ 0x9c,0x8e,0x96,0xb9,0x30,0x00,0x00,
-+ 0x00}},
-+ {{0x38,0x27,0x9c,0x2c,0x80,0xbf,0x1f,
-+ 0x9c,0x8e,0x96,0xb9,0x30,0x00,0x00,
-+ 0x00}},
-+ {{0x38,0x27,0x9c,0x2c,0x80,0xbf,0x1f,
-+ 0x9c,0x8e,0x96,0xb9,0x30,0x00,0x00,
-+ 0x00}},
-+ {{0x38,0x27,0x9c,0x2c,0x80,0x0b,0x3e,
-+ 0xe9,0x8b,0xe7,0x04,0x00,0x00,0x00,
-+ 0x00}},
-+ {{0x4d,0x31,0x91,0x3b,0x03,0x72,0xf0,
-+ 0x58,0x8c,0x57,0x73,0x20,0x00,0x01,
-+ 0x01}},
-+ {{0x63,0x3f,0x87,0x4a,0x92,0x24,0xf5,
-+ 0x02,0x88,0xff,0x25,0x10,0x00,0x01,
-+ 0x01}}
-+};
-+
-+static const SiS_LVDSCRT1DataStruct SiS_LVDSCRT1640x480_1[] =
-+{
-+ {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
-+ 0xe9,0x8b,0xdf,0x04,0x30,0x00,0x05,
-+ 0x00}},
-+ {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
-+ 0xe9,0x8b,0xdf,0x04,0x30,0x00,0x05,
-+ 0x00}},
-+ {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
-+ 0xe9,0x8b,0xdf,0x04,0x30,0x00,0x05,
-+ 0x00}},
-+ {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
-+ 0xe9,0x8b,0xdf,0x04,0x30,0x00,0x05,
-+ 0x00}},
-+ {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
-+ 0xe9,0x8b,0xdf,0x04,0x30,0x00,0x05,
-+ 0x00}},
-+ {{0x7f,0x63,0x83,0x6c,0x1c,0x72,0xf0,
-+ 0x58,0x8c,0x57,0x73,0x20,0x00,0x06,
-+ 0x01}}
-+};
-+
-+static const SiS_LVDSCRT1DataStruct SiS_LVDSCRT1640x480_1_H[] =
-+{
-+ {{0x2d,0x28,0x90,0x2b,0xa0,0xbf,0x1f,
-+ 0x9c,0x8e,0x96,0xb9,0x00,0x00,0x00,
-+ 0x00}},
-+ {{0x2d,0x28,0x90,0x2b,0xa0,0xbf,0x1f,
-+ 0x83,0x85,0x63,0xba,0x00,0x00,0x00,
-+ 0x00}},
-+ {{0x2d,0x28,0x90,0x2b,0xa0,0xbf,0x1f,
-+ 0x9c,0x8e,0x96,0xb9,0x00,0x00,0x00,
-+ 0x00}},
-+ {{0x2d,0x28,0x90,0x2b,0xa0,0xbf,0x1f,
-+ 0x83,0x85,0x63,0xba,0x00,0x00,0x00,
-+ 0x00}},
-+ {{0x2d,0x28,0x90,0x2c,0x80,0x0b,0x3e,
-+ 0xe9,0x8b,0xe7,0x04,0x00,0x00,0x00,
-+ 0x00}}
-+};
-+
-+static const SiS_LVDSCRT1DataStruct SiS_LVDSCRT1640x480_2[] =
-+{
-+ {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
-+ 0xe9,0x8b,0xdf,0x04,0x30,0x00,0x05,
-+ 0x00}},
-+ {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
-+ 0xe9,0x8b,0xdf,0x04,0x30,0x00,0x05,
-+ 0x00}},
-+ {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
-+ 0xe9,0x8b,0xdf,0x04,0x30,0x00,0x05,
-+ 0x00}},
-+ {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
-+ 0xe9,0x8b,0xdf,0x04,0x30,0x00,0x05,
-+ 0x00}},
-+ {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
-+ 0xe9,0x8b,0xdf,0x04,0x30,0x00,0x05,
-+ 0x00}},
-+ {{0x7f,0x63,0x83,0x6c,0x1c,0x72,0xf0,
-+ 0x58,0x8c,0x57,0x73,0x20,0x00,0x06,
-+ 0x01}},
-+ {{0x2d,0x27,0x90,0x2c,0x80,0x0b,0x3e,
-+ 0xe9,0x8b,0xe7,0x04,0x00,0x00,0x00,
-+ 0x00}}
-+};
-+
-+static const SiS_LVDSCRT1DataStruct SiS_LVDSCRT1640x480_2_H[] =
-+{
-+ {{0x65,0x4f,0x89,0x56,0x83,0xaa,0x1f,
-+ 0x90,0x85,0x8f,0xab,0x30,0x00,0x05,
-+ 0x00}},
-+ {{0x65,0x4f,0x89,0x56,0x83,0x83,0x1f,
-+ 0x5e,0x83,0x5d,0x79,0x10,0x00,0x05,
-+ 0x00}},
-+ {{0x65,0x4f,0x89,0x54,0x9f,0xc4,0x1f,
-+ 0x92,0x89,0x8f,0xb5,0x30,0x00,0x01,
-+ 0x00}},
-+ {{0x65,0x4f,0x89,0x56,0x83,0x83,0x1f,
-+ 0x5e,0x83,0x5d,0x79,0x10,0x00,0x05,
-+ 0x00}},
-+ {{0x65,0x4f,0x89,0x56,0x83,0x04,0x3e,
-+ 0xe0,0x85,0xdf,0xfb,0x10,0x00,0x05,
-+ 0x00}},
-+ {{0x7f,0x63,0x83,0x6c,0x1c,0x72,0xf0,
-+ 0x58,0x8c,0x57,0x73,0x20,0x00,0x06,
-+ 0x01}},
-+ {{0x2d,0x27,0x90,0x2c,0x80,0x0b,0x3e,
-+ 0xe9,0x8b,0xe7,0x04,0x00,0x00,0x00,
-+ 0x00}}
-+};
-+
-+static const SiS_LVDSCRT1DataStruct SiS_LVDSCRT1640x480_3[] =
-+{
-+ {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
-+ 0xe9,0x8b,0xdf,0x04,0x00,0x00,0x05,
-+ 0x00}},
-+ {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
-+ 0xe9,0x8b,0xdf,0x04,0x00,0x00,0x05,
-+ 0x00}},
-+ {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
-+ 0xe9,0x8b,0xdf,0x04,0x00,0x00,0x05,
-+ 0x00}},
-+ {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
-+ 0xe9,0x8b,0xdf,0x04,0x00,0x00,0x05,
-+ 0x00}},
-+ {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
-+ 0xe9,0x8b,0xdf,0x04,0x00,0x00,0x05,
-+ 0x00}},
-+ {{0x7f,0x63,0x83,0x6c,0x1c,0x72,0xf0,
-+ 0x58,0x8c,0x57,0x73,0x20,0x00,0x06,
-+ 0x01}},
-+ {{0x2d,0x27,0x90,0x2c,0x80,0x0b,0x3e,
-+ 0xe9,0x8b,0xe7,0x04,0x00,0x00,0x00,
-+ 0x00}}
-+};
-+
-+static const SiS_LVDSCRT1DataStruct SiS_LVDSCRT1640x480_3_H[] =
-+{
-+ {{0x65,0x4f,0x89,0x56,0x83,0xaa,0x1f,
-+ 0x90,0x85,0x8f,0xab,0x30,0x00,0x05,
-+ 0x00}},
-+ {{0x65,0x4f,0x89,0x56,0x83,0x83,0x1f,
-+ 0x5e,0x83,0x5d,0x79,0x10,0x00,0x05,
-+ 0x00}},
-+ {{0x65,0x4f,0x89,0x54,0x9f,0xc4,0x1f,
-+ 0x92,0x89,0x8f,0xb5,0x30,0x00,0x01,
-+ 0x00}},
-+ {{0x65,0x4f,0x89,0x56,0x83,0x83,0x1f,
-+ 0x5e,0x83,0x5d,0x79,0x10,0x00,0x05,
-+ 0x00}},
-+ {{0x65,0x4f,0x89,0x56,0x83,0x04,0x3e,
-+ 0xe0,0x85,0xdf,0xfb,0x10,0x00,0x05,
-+ 0x00}},
-+ {{0x7f,0x63,0x83,0x6c,0x1c,0x72,0xf0,
-+ 0x58,0x8c,0x57,0x73,0x20,0x00,0x06,
-+ 0x01}},
-+ {{0x2d,0x27,0x90,0x2c,0x80,0x0b,0x3e,
-+ 0xe9,0x8b,0xe7,0x04,0x00,0x00,0x00,
-+ 0x00}}
-+};
-+
-+#define SIS_PL_HSYNCP 0x01
-+#define SIS_PL_HSYNCN 0x02
-+#define SIS_PL_VSYNCP 0x04
-+#define SIS_PL_VSYNCN 0x08
-+#define SIS_PL_DVI 0x80
-+
-+typedef struct _SiS_PlasmaModes
-+{
-+ const char *name;
-+ ULONG clock;
-+ USHORT HDisplay, HTotal, HFrontPorch, HSyncWidth;
-+ USHORT VDisplay, VTotal, VFrontPorch, VSyncWidth;
-+ UCHAR SyncFlags;
-+} SiS_PlasmaModes;
-+
-+
-+typedef struct _SiS_PlasmaTables
-+{
-+ USHORT vendor;
-+ UCHAR productnum;
-+ USHORT product[5];
-+ const char *plasmaname;
-+ UCHAR modenum;
-+ UCHAR plasmamodes[20]; /* | 0x80 = DVI-capable, | 0x40 = analog */
-+} SiS_PlasmaTables;
-+
-+static const SiS_PlasmaModes SiS_PlasmaMode[] = {
-+ { "640x400", /* 00: IBM 400@70 */
-+ 25175,
-+ 640, 800, 17, 64,
-+ 400, 449, 13, 2,
-+ SIS_PL_HSYNCN | SIS_PL_VSYNCN },
-+ { "640x480", /* 01: VESA 480@72 */
-+ 31500,
-+ 640, 832, 24, 40,
-+ 480, 520, 9, 3,
-+ SIS_PL_HSYNCN | SIS_PL_VSYNCN },
-+ { "800x600", /* 02: VESA 600@72 */
-+ 50000,
-+ 800, 1040, 56, 120,
-+ 600, 666, 37, 6,
-+ SIS_PL_HSYNCP | SIS_PL_VSYNCP },
-+ { "864x480", /* 03: Cereb wide 1 */
-+ 42526,
-+ 864, 1134, 22, 86,
-+ 480, 500, 1, 3,
-+ SIS_PL_HSYNCP | SIS_PL_VSYNCN },
-+ { "848x480", /* 04: VESA wide (NEC1) */
-+ 33750,
-+ 848, 1088, 16, 112,
-+ 480, 517, 6, 8,
-+ SIS_PL_HSYNCP | SIS_PL_VSYNCP },
-+ { "1024x576", /* 05: VESA wide (NEC2) */
-+ 47250,
-+ 1024, 1320, 16, 144,
-+ 576, 596, 2, 4,
-+ SIS_PL_HSYNCP | SIS_PL_VSYNCP },
-+ { "1280x720", /* 06: VESA wide (NEC3) */
-+ 76500,
-+ 1280, 1696, 48, 176,
-+ 720, 750, 4, 8,
-+ SIS_PL_HSYNCP | SIS_PL_VSYNCP },
-+ { "1360x765", /* 07: VESA wide (NEC4) */
-+ 85500,
-+ 1360, 1792, 64, 176,
-+ 765, 795, 4, 8,
-+ SIS_PL_HSYNCP | SIS_PL_VSYNCP },
-+ { "1024x600", /* 08: CEREB wide 2 */
-+ 51200,
-+ 1024, 1352, 51, 164,
-+ 600, 628, 1, 4,
-+ SIS_PL_HSYNCN | SIS_PL_VSYNCP },
-+ { "1024x768", /* 09: VESA 768@75 */
-+ 78750,
-+ 1024, 1312, 16, 96,
-+ 768, 800, 1, 3,
-+ SIS_PL_HSYNCP | SIS_PL_VSYNCP },
-+ { "1152x864", /* 10: VESA 1152x864@75 */
-+ 108000,
-+ 1152, 1600, 64, 128,
-+ 864, 900, 1, 3,
-+ SIS_PL_HSYNCP | SIS_PL_VSYNCP },
-+ { "1280x1024", /* 11: VESA 1024@60 */
-+ 108000,
-+ 1280, 1688, 48, 112,
-+ 1024, 1066, 1, 3,
-+ SIS_PL_HSYNCP | SIS_PL_VSYNCP },
-+ { "1280x768", /* 12: W_XGA */
-+ 81000,
-+ 1280, 1688, 48, 112,
-+ 768, 802, 3, 6,
-+ SIS_PL_HSYNCP | SIS_PL_VSYNCN },
-+ { "1280x768", /* 13: I/O Data W_XGA@56Hz */
-+ 76064,
-+ 1280, 1688, 48, 112,
-+ 768, 802, 2, 3,
-+ SIS_PL_HSYNCP | SIS_PL_VSYNCP },
-+ { "1376x768", /* 14: I/O Wide XGA */
-+ 87340,
-+ 1376, 1808, 32, 128,
-+ 768, 806, 3, 6,
-+ SIS_PL_HSYNCN | SIS_PL_VSYNCP },
-+ { "1280x960", /* 15: VESA 960@60 */
-+ 108000,
-+ 1280, 1800, 96, 112,
-+ 960, 1000, 1, 3,
-+ SIS_PL_HSYNCP | SIS_PL_VSYNCP },
-+ { "1400x1050", /* 16: VESA 1050@60Hz */
-+ 108000,
-+ 1400, 1688, 48, 112,
-+ 1050, 1066, 1, 3,
-+ SIS_PL_HSYNCN | SIS_PL_VSYNCN },
-+ { "1360x768", /* 17: VESA wide (NEC4/2) */
-+ 85500,
-+ 1360, 1792, 64, 112,
-+ 765, 795, 3, 6,
-+ SIS_PL_HSYNCP | SIS_PL_VSYNCP },
-+ { "800x600", /* 18: VESA 600@56 */
-+ 36000,
-+ 800, 1024, 24, 2,
-+ 600, 625, 1, 2,
-+ SIS_PL_HSYNCP | SIS_PL_VSYNCP }
-+};
-+
-+static const SiS_PlasmaTables SiS_PlasmaTable[] = {
-+#if 0 /* Product IDs missing */
-+ { 0x38a3, 4,
-+ { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
-+ "NEC PlasmaSync 42VP4/42VP4D/42VP4G/42VP4DG",
-+ 14, /* All DVI, except 0, 7, 13; 3, 15, 16 unknown */
-+ { 0|0x40, 1|0xc0, 2|0xc0, 3|0xc0, 4|0xc0, 7|0x40, 9|0xc0,10|0xc0,11|0xc0,12|0xc0,
-+ 13|0x40,14|0xc0,15|0xc0,16|0xc0, 0 , 0 , 0 , 0 , 0 , 0 }
-+ },
-+ { 0x38a3, 3,
-+ { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
-+ "NEC PlasmaSync 42PD1/50PD1/50PD2",
-+ 5, /* DVI entirely unknown */
-+ { 0|0x40, 1|0xc0, 2|0xc0, 4|0xc0, 9|0xc0, 0 , 0 , 0 , 0 , 0 ,
-+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 }
-+ },
-+ { 0x38a3, 1,
-+ { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
-+ "NEC PlasmaSync 42PD3",
-+ 10, /* DVI entirely unknown */
-+ { 0|0x40, 1|0xc0, 2|0xc0, 3|0xc0, 4|0xc0, 5|0xc0, 6|0xc0, 7|0x40, 8|0xc0, 9|0xc0,
-+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 }
-+ },
-+ { 0x38a3, 2,
-+ { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
-+ "NEC PlasmaSync 42VM3/61XM1",
-+ 11, /* DVI entirely unknown */
-+ { 0|0x40, 1|0xc0, 2|0xc0, 3|0xc0, 4|0xc0, 5|0xc0, 6|0xc0, 8|0xc0, 9|0xc0,11|0xc0,
-+ 17|0xc0, 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 }
-+ },
-+ { 0x38a3, 2,
-+ { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
-+ "NEC PlasmaSync 42MP1/42MP2",
-+ 6, /* DVI entirely unknown */
-+ { 0|0x40, 1|0xc0, 2|0xc0, 4|0xc0, 9|0xc0,11|0xc0, 0 , 0 , 0 , 0 ,
-+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 }
-+ },
-+ { 0x38a3, 1,
-+ { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
-+ "NEC PlasmaSync 50MP1",
-+ 10, /* DVI entirely unknown */
-+ { 0|0x40, 1|0xc0, 2|0xc0, 4|0xc0, 7|0x40, 9|0xc0,10|0xc0,11|0xc0,13|0x40,14|0xc0,
-+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 }
-+ },
-+#endif
-+ { 0x38a3, 4,
-+ { 0xa482, 0xa483, 0x0000, 0x0000, 0x0000 },
-+ "NEC PlasmaSync 42MP3/42MP4/50MP2/61MP1",
-+ 11, /* All DVI except 0, 7, 13, 17 */
-+ { 0|0x40, 1|0xc0, 2|0xc0, 4|0xc0, 7|0x40, 9|0xc0,10|0xc0,11|0xc0,13|0x40,14|0xc0,
-+ 17|0x40, 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 }
-+ },
-+#if 0 /* Product IDs missing */
-+ { 0x38a3, 1,
-+ { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
-+ "NEC PlasmaSync 3300W",
-+ 3,
-+ { 0|0x40, 1|0xc0,18|0xc0, 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
-+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 }
-+ },
-+ { 0x38a3, 1,
-+ { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
-+ "NEC PlasmaSync 4200W",
-+ 4, /* DVI entirely unknown */
-+ { 0|0x40, 1|0xc0, 2|0xc0, 4|0xc0, 0 , 0 , 0 , 0 , 0 , 0 ,
-+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 }
-+ },
-+ { 0x38a3, 1,
-+ { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
-+ "NEC PlasmaSync 4210W",
-+ 6, /* DVI entirely unknown */
-+ { 0|0x40, 1|0xc0, 2|0xc0, 4|0xc0, 9|0xc0,11|0xc0, 0 , 0 , 0 , 0 ,
-+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 }
-+ },
-+ { 0x38a3, 1,
-+ { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
-+ "NEC PlasmaSync 5000W",
-+ 7, /* DVI entirely unknown */
-+ { 0|0x40, 1|0xc0, 2|0xc0, 4|0xc0, 7|0x40, 9|0xc0,11|0xc0, 0 , 0 , 0 ,
-+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 }
-+ },
-+#endif
-+ { 0x412f, 1,
-+ { 0x000c, 0x0000, 0x0000, 0x0000, 0x0000 },
-+ "Pioneer 503CMX",
-+ 6, /* DVI unknown */
-+ { 1|0xc0, 2|0xc0, 9|0xc0,11|0xc0,12|0xc0,15|0xc0, 0 , 0 , 0 , 0 ,
-+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 }
-+ },
-+ { 0x34a9, 1,
-+ { 0xa00e, 0x0000, 0x0000, 0x0000, 0x0000 },
-+ "Panasonic TH-42",
-+ 5, /* No DVI output */
-+ { 1|0x40, 2|0x40, 4|0x40, 9|0x40,15|0x40, 0 , 0 , 0 , 0 , 0 ,
-+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 }
-+ },
-+ { 0x0000 }
-+};
-+
- void SiS_SetReg1(USHORT, USHORT, USHORT);
- void SiS_SetReg2(SiS_Private *, USHORT, USHORT, USHORT);
- void SiS_SetReg3(USHORT, USHORT);
-@@ -158,6 +2337,7 @@ void SiS_SetMemoryClock(SiS_Private
- void SiS_SetDRAMModeRegister(SiS_Private *SiS_Pr, UCHAR *ROMAddr,PSIS_HW_DEVICE_INFO HwDeviceExtension);
- BOOLEAN SiS_SearchVBModeID(SiS_Private *SiS_Pr, UCHAR *ROMAddr, USHORT *ModeNo);
- void SiS_IsLowResolution(SiS_Private *SiS_Pr, UCHAR *ROMAddr,USHORT ModeNo,USHORT ModeIdIndex);
-+void SiS_GetSysFlags(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension);
-
- #ifdef SIS300
- void SiS_SetDRAMSize_300(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension);
-@@ -192,12 +2372,15 @@ void SiS_VerifyMclk(SiS_Private *SiS
-
- void SiS_HandleCRT1(SiS_Private *SiS_Pr);
- void SiS_Handle301B_1400x1050(SiS_Private *SiS_Pr, USHORT ModeNo);
--void SiS_SetEnableDstn(SiS_Private *SiS_Pr);
-+void SiS_SetEnableDstn(SiS_Private *SiS_Pr, int enable);
-+void SiS_SetEnableFstn(SiS_Private *SiS_Pr, int enable);
- void SiS_Delay15us(SiS_Private *SiS_Pr);
- BOOLEAN SiS_SearchModeID(SiS_Private *SiS_Pr, UCHAR *ROMAddr, USHORT *ModeNo,USHORT *ModeIdIndex);
- BOOLEAN SiS_CheckMemorySize(SiS_Private *SiS_Pr, UCHAR *ROMAddr,PSIS_HW_DEVICE_INFO HwDeviceExtension,
- USHORT ModeNo,USHORT ModeIdIndex);
- UCHAR SiS_GetModePtr(SiS_Private *SiS_Pr, UCHAR *ROMAddr, USHORT ModeNo,USHORT ModeIdIndex);
-+void SiS_WhatTheHellIsThis(SiS_Private *SiS_Pr,PSIS_HW_DEVICE_INFO HwDeviceExtension,USHORT BaseAddr);
-+void SiS_StrangeStuff(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension);
- void SiS_SetSeqRegs(SiS_Private *SiS_Pr, UCHAR *ROMAddr,USHORT StandTableIndex);
- void SiS_SetMiscRegs(SiS_Private *SiS_Pr, UCHAR *ROMAddr,USHORT StandTableIndex);
- void SiS_SetCRTCRegs(SiS_Private *SiS_Pr, UCHAR *ROMAddr,PSIS_HW_DEVICE_INFO HwDeviceExtension,
-@@ -267,19 +2450,19 @@ void SiS_SetPitchCRT1(SiS_Private *S
- void SiS_SetPitchCRT2(SiS_Private *SiS_Pr, ScrnInfoPtr pScrn, UShort BaseAddr);
- extern int SiS_compute_vclk(int Clock, int *out_n, int *out_dn, int *out_div,
- int *out_sbit, int *out_scale);
-+extern void SiSCalcClock(ScrnInfoPtr pScrn, int clock, int max_VLD, unsigned int *vclk);
-+
- extern unsigned char SiS_GetSetBIOSScratch(ScrnInfoPtr pScrn, USHORT offset, unsigned char value);
- extern unsigned char SiS_GetSetModeID(ScrnInfoPtr pScrn, unsigned char id);
--extern USHORT SiS_CalcModeIndex(ScrnInfoPtr pScrn, DisplayModePtr mode);
-+extern USHORT SiS_CalcModeIndex(ScrnInfoPtr pScrn, DisplayModePtr mode, BOOLEAN hcm);
- #endif
-
- extern USHORT SiS_GetOffset(SiS_Private *SiS_Pr, UCHAR *ROMAddr,USHORT ModeNo,USHORT ModeIdIndex,
- USHORT RefreshRateTableIndex,PSIS_HW_DEVICE_INFO HwDeviceExtension);
- extern USHORT SiS_GetColorDepth(SiS_Private *SiS_Pr, UCHAR *ROMAddr,USHORT ModeNo,USHORT ModeIdIndex);
- extern void SiS_DisableBridge(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension, USHORT BaseAddr);
--extern BOOLEAN SiS_SetCRT2Group301(SiS_Private *SiS_Pr, USHORT BaseAddr,UCHAR *ROMAddr,USHORT ModeNo,
-- PSIS_HW_DEVICE_INFO HwDeviceExtension);
--extern void SiS_PresetScratchregister(SiS_Private *SiS_Pr, USHORT SiS_P3d4,
-- PSIS_HW_DEVICE_INFO HwDeviceExtension);
-+extern BOOLEAN SiS_SetCRT2Group(SiS_Private *SiS_Pr, USHORT BaseAddr,UCHAR *ROMAddr,USHORT ModeNo,
-+ PSIS_HW_DEVICE_INFO HwDeviceExtension);
- extern void SiS_UnLockCRT2(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension,USHORT BaseAddr);
- extern void SiS_LockCRT2(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension,USHORT BaseAddr);
- extern BOOLEAN SiS_BridgeIsOn(SiS_Private *SiS_Pr, USHORT BaseAddr);
-@@ -321,10 +2504,12 @@ int sisfb_mode_rate_to_dclock(SiS_Pri
- unsigned char modeno, unsigned char rateindex);
- int sisfb_mode_rate_to_ddata(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension,
- unsigned char modeno, unsigned char rateindex,
-- ULONG *left_margin, ULONG *right_margin,
-+ ULONG *left_margin, ULONG *right_margin,
- ULONG *upper_margin, ULONG *lower_margin,
- ULONG *hsync_len, ULONG *vsync_len,
- ULONG *sync, ULONG *vmode);
-+BOOLEAN sisfb_gettotalfrommode(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension,
-+ unsigned char modeno, int *htotal, int *vtotal, unsigned char rateindex);
- #endif
-
- #endif
---- linux-2.6.0-test1/drivers/video/sis/oem300.h 2003-06-14 12:18:05.000000000 -0700
-+++ 25/drivers/video/sis/oem300.h 2003-07-19 17:04:55.000000000 -0700
-@@ -1,5 +1,30 @@
--
--/* OEM Data for 300 series */
-+/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/sis/oem300.h.c,v 1.0 2001/11/30 12:12:01 eich Exp $ */
-+/*
-+ * OEM Data for 300 series
-+ *
-+ * Copyright 2002, 2003 by Thomas Winischhofer, Vienna, Austria
-+ *
-+ * Permission to use, copy, modify, distribute, and sell this software and its
-+ * documentation for any purpose is hereby granted without fee, provided that
-+ * the above copyright notice appear in all copies and that both that
-+ * copyright notice and this permission notice appear in supporting
-+ * documentation, and that the name of the copyright holder not be used in
-+ * advertising or publicity pertaining to distribution of the software without
-+ * specific, written prior permission. The copyright holder makes no representations
-+ * about the suitability of this software for any purpose. It is provided
-+ * "as is" without express or implied warranty.
-+ *
-+ * THE COPYRIGHT HOLDER DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-+ * EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-+ * PERFORMANCE OF THIS SOFTWARE.
-+ *
-+ * Author: Thomas Winischhofer <thomas@winischhofer.net>
-+ *
-+ */
-
- const UCHAR SiS300_OEMTVDelay301[8][4] =
- {
-@@ -680,325 +705,147 @@ const UCHAR SiS300_Filter2[10][9][7] =
- }
- };
-
--const UCHAR SiS300_LCDHData[24][11][5] = {
-+/* Custom data for Barco iQ Pro R300 */
-+const UCHAR barco_p1[2][9][7][3] = {
- {
-- {0x67,0x91,0x84,0x5e,0x00},
-- {0x67,0x91,0x84,0x5e,0x00},
-- {0x67,0x91,0x84,0x5e,0x00},
-- {0x67,0x91,0x84,0x5e,0x00},
-- {0x67,0x91,0x84,0x5e,0x00},
-- {0x67,0x91,0x84,0x5e,0x00},
-- {0x67,0x91,0x84,0x5e,0x00},
-- {0x65,0xef,0x83,0x5c,0x00},
-- {0x65,0xef,0x83,0x5c,0x00},
-- {0x8a,0x14,0x00,0x80,0x00},
-- {0x8a,0x14,0x00,0x80,0x00}
-- },
-- {
-- {0x4e,0x18,0x90,0x38,0x00},
-- {0x4e,0x18,0x90,0x38,0x00},
-- {0x8e,0x18,0x28,0x78,0x00},
-- {0x8e,0x18,0x28,0x78,0x00},
-- {0x8e,0x18,0x28,0x78,0x00},
-- {0x4e,0x18,0x90,0x38,0x00},
-- {0x4e,0x18,0x90,0x38,0x00},
-- {0x67,0x11,0x9a,0x56,0x00},
-- {0x67,0x11,0x9a,0x56,0x00},
-- {0x8a,0x14,0x00,0x80,0x00},
-- {0x8a,0x14,0x00,0x80,0x00}
-- },
-- {
-- {0x67,0x91,0x84,0x5e,0x00},
-- {0x67,0x91,0x84,0x5e,0x00},
-- {0x67,0x91,0x84,0x5e,0x00},
-- {0x67,0x91,0x84,0x5e,0x00},
-- {0x67,0x91,0x84,0x5e,0x00},
-- {0x67,0x91,0x84,0x5e,0x00},
-- {0x67,0x91,0x84,0x5e,0x00},
-- {0x65,0xef,0x83,0x5c,0x00},
-- {0x65,0xef,0x83,0x5c,0x00},
-- {0x8a,0x14,0x00,0x80,0x00},
-- {0x8a,0x14,0x00,0x80,0x00}
-- },
-- {
-- {0x4e,0x18,0x90,0x38,0x00},
-- {0x4e,0x18,0x90,0x38,0x00},
-- {0x8e,0x18,0x28,0x78,0x00},
-- {0x8e,0x18,0x28,0x78,0x00},
-- {0x8e,0x18,0x28,0x78,0x00},
-- {0x4e,0x18,0x90,0x38,0x00},
-- {0x4e,0x18,0x90,0x38,0x00},
-- {0x67,0x11,0x9a,0x56,0x00},
-- {0x67,0x11,0x9a,0x56,0x00},
-- {0x8a,0x14,0x00,0x80,0x00},
-- {0x8a,0x14,0x00,0x80,0x00}
-- },
-- {
-- {0x67,0x91,0x84,0x5e,0x00},
-- {0x67,0x91,0x84,0x5e,0x00},
-- {0x67,0x91,0x84,0x5e,0x00},
-- {0x67,0x91,0x84,0x5e,0x00},
-- {0x67,0x91,0x84,0x5e,0x00},
-- {0x67,0x91,0x84,0x5e,0x00},
-- {0x67,0x91,0x84,0x5e,0x00},
-- {0x65,0xef,0x83,0x5c,0x00},
-- {0x65,0xef,0x83,0x5c,0x00},
-- {0x8a,0x14,0x00,0x80,0x00},
-- {0x8a,0x14,0x00,0x80,0x00}
-- },
-- {
-- {0x4E,0x18,0x90,0x38,0x00},
-- {0x4E,0x18,0x90,0x38,0x00},
-- {0x8E,0x18,0x28,0x78,0x00},
-- {0x8E,0x18,0x28,0x78,0x00},
-- {0x8E,0x18,0x28,0x78,0x00},
-- {0x4E,0x18,0x90,0x38,0x00},
-- {0x4E,0x18,0x90,0x38,0x00},
-- {0x67,0x11,0x9A,0x56,0x00},
-- {0x67,0x11,0x9A,0x56,0x00},
-- {0x8A,0x14,0x00,0x80,0x00},
-- {0x8A,0x14,0x00,0x80,0x00}
-- },
-- {
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x65,0xEF,0x83,0x5C,0x00},
-- {0x65,0xEF,0x83,0x5C,0x00},
-- {0x8A,0x14,0x00,0x80,0x00},
-- {0x8A,0x14,0x00,0x80,0x00}
-- },
-- {
-- {0x4E,0x18,0x90,0x38,0x00},
-- {0x4E,0x18,0x90,0x38,0x00},
-- {0x8E,0x18,0x28,0x78,0x00},
-- {0x8E,0x18,0x28,0x78,0x00},
-- {0x8E,0x18,0x28,0x78,0x00},
-- {0x4E,0x18,0x90,0x38,0x00},
-- {0x4E,0x18,0x90,0x38,0x00},
-- {0x67,0x11,0x9A,0x56,0x00},
-- {0x67,0x11,0x9A,0x56,0x00},
-- {0x8A,0x14,0x00,0x80,0x00},
-- {0x8A,0x14,0x00,0x80,0x00}
-- },
-- {
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x65,0xEF,0x83,0x5C,0x00},
-- {0x65,0xEF,0x83,0x5C,0x00},
-- {0x8A,0x14,0x00,0x80,0x00},
-- {0x8A,0x14,0x00,0x80,0x00}
-- },
-- {
-- {0x4E,0x18,0x90,0x38,0x00},
-- {0x4E,0x18,0x90,0x38,0x00},
-- {0x8E,0x18,0x28,0x78,0x00},
-- {0x8E,0x18,0x28,0x78,0x00},
-- {0x8E,0x18,0x28,0x78,0x00},
-- {0x4E,0x18,0x90,0x38,0x00},
-- {0x4E,0x18,0x90,0x38,0x00},
-- {0x67,0x11,0x9A,0x56,0x00},
-- {0x67,0x11,0x9A,0x56,0x00},
-- {0x8A,0x14,0x00,0x80,0x00},
-- {0x8A,0x14,0x00,0x80,0x00}
-- },
-- {
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x65,0xEF,0x83,0x5C,0x00},
-- {0x65,0xEF,0x83,0x5C,0x00},
-- {0x8A,0x14,0x00,0x80,0x00},
-- {0x8A,0x14,0x00,0x80,0x00}
-- },
-- {
-- {0x4E,0x18,0x90,0x38,0x00},
-- {0x4E,0x18,0x90,0x38,0x00},
-- {0x8E,0x18,0x28,0x78,0x00},
-- {0x8E,0x18,0x28,0x78,0x00},
-- {0x8E,0x18,0x28,0x78,0x00},
-- {0x4E,0x18,0x90,0x38,0x00},
-- {0x4E,0x18,0x90,0x38,0x00},
-- {0x67,0x11,0x9A,0x56,0x00},
-- {0x67,0x11,0x9A,0x56,0x00},
-- {0x8A,0x14,0x00,0x80,0x00},
-- {0x8A,0x14,0x00,0x80,0x00}
-- },
-- {
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x65,0xEF,0x83,0x5C,0x00},
-- {0x65,0xEF,0x83,0x5C,0x00},
-- {0x8A,0x14,0x00,0x80,0x00},
-- {0x8A,0x14,0x00,0x80,0x00}
-- },
-- {
-- {0x4E,0x18,0x90,0x38,0x00},
-- {0x4E,0x18,0x90,0x38,0x00},
-- {0x8E,0x18,0x28,0x78,0x00},
-- {0x8E,0x18,0x28,0x78,0x00},
-- {0x8E,0x18,0x28,0x78,0x00},
-- {0x4E,0x18,0x90,0x38,0x00},
-- {0x4E,0x18,0x90,0x38,0x00},
-- {0x67,0x11,0x9A,0x56,0x00},
-- {0x67,0x11,0x9A,0x56,0x00},
-- {0x8A,0x14,0x00,0x80,0x00},
-- {0x8A,0x14,0x00,0x80,0x00}
-- },
-- {
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x65,0xEF,0x83,0x5C,0x00},
-- {0x65,0xEF,0x83,0x5C,0x00},
-- {0x8A,0x14,0x00,0x80,0x00},
-- {0x8A,0x14,0x00,0x80,0x00}
-- },
-- {
-- {0x4E,0x18,0x90,0x38,0x00},
-- {0x4E,0x18,0x90,0x38,0x00},
-- {0x8E,0x18,0x28,0x78,0x00},
-- {0x8E,0x18,0x28,0x78,0x00},
-- {0x8E,0x18,0x28,0x78,0x00},
-- {0x4E,0x18,0x90,0x38,0x00},
-- {0x4E,0x18,0x90,0x38,0x00},
-- {0x67,0x11,0x9A,0x56,0x00},
-- {0x67,0x11,0x9A,0x56,0x00},
-- {0x8A,0x14,0x00,0x80,0x00},
-- {0x8A,0x14,0x00,0x80,0x00}
-- },
-- {
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x65,0xEF,0x83,0x5C,0x00},
-- {0x65,0xEF,0x83,0x5C,0x00},
-- {0x8A,0x14,0x00,0x80,0x00},
-- {0x8A,0x14,0x00,0x80,0x00}
-- },
-- {
-- {0x4E,0x18,0x90,0x38,0x00},
-- {0x4E,0x18,0x90,0x38,0x00},
-- {0x8E,0x18,0x28,0x78,0x00},
-- {0x8E,0x18,0x28,0x78,0x00},
-- {0x8E,0x18,0x28,0x78,0x00},
-- {0x4E,0x18,0x90,0x38,0x00},
-- {0x4E,0x18,0x90,0x38,0x00},
-- {0x67,0x11,0x9A,0x56,0x00},
-- {0x67,0x11,0x9A,0x56,0x00},
-- {0x8A,0x14,0x00,0x80,0x00},
-- {0x8A,0x14,0x00,0x80,0x00}
-- },
-- {
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x65,0xEF,0x83,0x5C,0x00},
-- {0x65,0xEF,0x83,0x5C,0x00},
-- {0x8A,0x14,0x00,0x80,0x00},
-- {0x8A,0x14,0x00,0x80,0x00}
-- },
-- {
-- {0x4E,0x18,0x90,0x38,0x00},
-- {0x4E,0x18,0x90,0x38,0x00},
-- {0x8E,0x18,0x28,0x78,0x00},
-- {0x8E,0x18,0x28,0x78,0x00},
-- {0x8E,0x18,0x28,0x78,0x00},
-- {0x4E,0x18,0x90,0x38,0x00},
-- {0x4E,0x18,0x90,0x38,0x00},
-- {0x67,0x11,0x9A,0x56,0x00},
-- {0x67,0x11,0x9A,0x56,0x00},
-- {0x8A,0x14,0x00,0x80,0x00},
-- {0x8A,0x14,0x00,0x80,0x00}
-- },
-- {
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x65,0xEF,0x83,0x5C,0x00},
-- {0x65,0xEF,0x83,0x5C,0x00},
-- {0x8A,0x14,0x00,0x80,0x00},
-- {0x8A,0x14,0x00,0x80,0x00}
-- },
-- {
-- {0x4E,0x18,0x90,0x38,0x00},
-- {0x4E,0x18,0x90,0x38,0x00},
-- {0x8E,0x18,0x28,0x78,0x00},
-- {0x8E,0x18,0x28,0x78,0x00},
-- {0x8E,0x18,0x28,0x78,0x00},
-- {0x4E,0x18,0x90,0x38,0x00},
-- {0x4E,0x18,0x90,0x38,0x00},
-- {0x67,0x11,0x9A,0x56,0x00},
-- {0x67,0x11,0x9A,0x56,0x00},
-- {0x8A,0x14,0x00,0x80,0x00},
-- {0x8A,0x14,0x00,0x80,0x00}
-- },
-- {
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x67,0x91,0x84,0x5E,0x00},
-- {0x65,0xEF,0x83,0x5C,0x00},
-- {0x65,0xEF,0x83,0x5C,0x00},
-- {0x8A,0x14,0x00,0x80,0x00},
-- {0x8A,0x14,0x00,0x80,0x00}
-- },
-- {
-- {0x4E,0x18,0x90,0x38,0x00},
-- {0x4E,0x18,0x90,0x38,0x00},
-- {0x8E,0x18,0x28,0x78,0x00},
-- {0x8E,0x18,0x28,0x78,0x00},
-- {0x8E,0x18,0x28,0x78,0x00},
-- {0x4E,0x18,0x90,0x38,0x00},
-- {0x4E,0x18,0x90,0x38,0x00},
-- {0x67,0x11,0x9A,0x56,0x00},
-- {0x67,0x11,0x9A,0x56,0x00},
-- {0x8A,0x14,0x00,0x80,0x00},
-- {0x8A,0x14,0x00,0x80,0x00}
-+ { { 0x16, 0xcf, 0x00 },
-+ { 0x18, 0x00, 0x00 },
-+ { 0x1a, 0xe7, 0x00 },
-+ { 0x1b, 0x26, 0x00 },
-+ { 0x1c, 0xff, 0x00 },
-+ { 0x1d, 0x1c, 0x00 },
-+ { 0x1e, 0x19, 0x00 }
-+ },
-+ {
-+ { 0x16, 0xcf, 0x00 },
-+ { 0x18, 0x00, 0x00 },
-+ { 0x1a, 0xe7, 0x00 },
-+ { 0x1b, 0x1e, 0x00 },
-+ { 0x1c, 0xff, 0x00 },
-+ { 0x1d, 0x1c, 0x00 },
-+ { 0x1e, 0x16, 0x00 }
-+ },
-+ {
-+ { 0x16, 0xcf, 0x00 },
-+ { 0x1a, 0xe7, 0x00 },
-+ { 0x1b, 0x26, 0x00 },
-+ { 0x1c, 0xff, 0x00 },
-+ { 0x1d, 0x1c, 0x00 },
-+ { 0x1e, 0x19, 0x00 },
-+ { 0, 0, 0 }
-+ },
-+ {
-+ { 0, 0, 0 }
-+ },
-+ {
-+ { 0x16, 0xcf, 0x00 },
-+ { 0x1a, 0xe7, 0x00 },
-+ { 0x1b, 0x26, 0x00 },
-+ { 0x1c, 0xff, 0x00 },
-+ { 0x1d, 0x1c, 0x00 },
-+ { 0x1e, 0x1e, 0x00 },
-+ { 0, 0, 0 }
-+ },
-+ {
-+ { 0x16, 0xd1, 0x00 },
-+ { 0x18, 0x00, 0x00 },
-+ { 0x1a, 0xe7, 0x00 },
-+ { 0x1b, 0x11, 0x00 },
-+ { 0x1c, 0xff, 0x00 },
-+ { 0x1d, 0x1c, 0x00 },
-+ { 0x1e, 0x26, 0x00 }
-+ },
-+ {
-+ { 0x16, 0xd1, 0x00 },
-+ { 0x1a, 0xe7, 0x00 },
-+ { 0x1b, 0x26, 0x00 },
-+ { 0x1c, 0xff, 0x00 },
-+ { 0x1d, 0x1c, 0x00 },
-+ { 0x1e, 0x30, 0x00 },
-+ { 0, 0, 0 }
-+ },
-+ {
-+ { 0x16, 0x00, 0x00 },
-+ { 0x17, 0xa0, 0x00 },
-+ { 0x1a, 0xa0, 0x00 },
-+ { 0x1b, 0x2a, 0x00 },
-+ { 0x1c, 0xff, 0x00 },
-+ { 0x1d, 0x1c, 0x00 },
-+ { 0, 0, 0 }
-+ },
-+ {
-+ { 0x16, 0x00, 0x00 },
-+ { 0x17, 0xaa, 0x00 },
-+ { 0x1a, 0xa0, 0x00 },
-+ { 0x1b, 0x2a, 0x00 },
-+ { 0x1c, 0xff, 0x00 },
-+ { 0x1d, 0x1c, 0x00 },
-+ { 0, 0, 0 }
-+ }
-+ },
-+ {
-+ {
-+ { 0x16, 0xcf, 0x00 },
-+ { 0x18, 0x00, 0x00 },
-+ { 0x1a, 0xe7, 0x00 },
-+ { 0x1b, 0x26, 0x00 },
-+ { 0x1c, 0xff, 0x00 },
-+ { 0x1d, 0x1c, 0x00 },
-+ { 0x1e, 0x19, 0x00 }
-+ },
-+ {
-+ { 0, 0, 0 }
-+ },
-+ {
-+ { 0x16, 0xcf, 0x00 },
-+ { 0x18, 0x00, 0x00 },
-+ { 0x1a, 0xe7, 0x00 },
-+ { 0x1b, 0x26, 0x00 },
-+ { 0x1c, 0xff, 0x00 },
-+ { 0x1d, 0x1c, 0x00 },
-+ { 0x1e, 0x19, 0x00 },
-+ },
-+ {
-+ { 0, 0, 0 }
-+ },
-+ {
-+ { 0x16, 0xcf, 0x00 },
-+ { 0x18, 0x00, 0x00 },
-+ { 0x1a, 0xe7, 0x00 },
-+ { 0x1b, 0x26, 0x00 },
-+ { 0x1c, 0xff, 0x00 },
-+ { 0x1d, 0x1c, 0x00 },
-+ { 0x1e, 0x1e, 0x00 }
-+ },
-+ {
-+ { 0x16, 0xd1, 0x00 },
-+ { 0x18, 0x00, 0x00 },
-+ { 0x1a, 0xe6, 0x00 },
-+ { 0x1b, 0x11, 0x00 },
-+ { 0x1c, 0xff, 0x00 },
-+ { 0x1d, 0x1c, 0x00 },
-+ { 0x1e, 0x26, 0x00 }
-+ },
-+ {
-+ { 0x18, 0x00, 0x00 },
-+ { 0x1a, 0xe0, 0x00 },
-+ { 0x1b, 0x26, 0x00 },
-+ { 0x1c, 0xff, 0x00 },
-+ { 0x1d, 0x1c, 0x00 },
-+ { 0x1e, 0x30, 0x00 },
-+ { 0, 0, 0 }
-+ },
-+ {
-+ { 0, 0, 0 }
-+ },
-+ {
-+ { 0, 0, 0 }
-+ }
- }
- };
-
--#if 0
--const UCHAR SiS300_LCDVData[24][11][6] = {
-- {
-- {
-- },
--};
--#endif
-+
-+
-+
-+
-+
---- linux-2.6.0-test1/drivers/video/sis/oem310.h 2003-06-14 12:17:55.000000000 -0700
-+++ 25/drivers/video/sis/oem310.h 2003-07-19 17:04:55.000000000 -0700
-@@ -1,5 +1,30 @@
--
--/* OEM Data for 310/325/330 series */
-+/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/sis/oem300.h.c,v 1.0 2001/11/30 12:12:01 eich Exp $ */
-+/*
-+ * OEM Data for 315/330 series
-+ *
-+ * Copyright 2002, 2003 by Thomas Winischhofer, Vienna, Austria
-+ *
-+ * Permission to use, copy, modify, distribute, and sell this software and its
-+ * documentation for any purpose is hereby granted without fee, provided that
-+ * the above copyright notice appear in all copies and that both that
-+ * copyright notice and this permission notice appear in supporting
-+ * documentation, and that the name of the copyright holder not be used in
-+ * advertising or publicity pertaining to distribution of the software without
-+ * specific, written prior permission. The copyright holder makes no representations
-+ * about the suitability of this software for any purpose. It is provided
-+ * "as is" without express or implied warranty.
-+ *
-+ * THE COPYRIGHT HOLDER DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-+ * EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-+ * PERFORMANCE OF THIS SOFTWARE.
-+ *
-+ * Author: Thomas Winischhofer <thomas@winischhofer.net>
-+ *
-+ */
-
- const UCHAR SiS310_LCDDelayCompensation_301[] = /* 301 */
- {
-@@ -100,7 +125,7 @@ const UCHAR SiS310_LCDDelayCompensation_
-
- const UCHAR SiS310_LCDDelayCompensation_651301LV[] = /* M650/651 301LV */
- {
-- 0x33,0x33,0x33, /* 800x600 (guessed) */
-+ 0x33,0x33,0x33, /* 800x600 (guessed) - new: PanelType, not PanelRes ! */
- 0x33,0x33,0x33, /* 1024x768 */
- 0x33,0x33,0x33, /* 1280x1024 */
- 0x33,0x33,0x33, /* 640x480 (unknown) */
---- linux-2.6.0-test1/drivers/video/sis/osdef.h 2003-06-14 12:17:56.000000000 -0700
-+++ 25/drivers/video/sis/osdef.h 2003-07-19 17:04:55.000000000 -0700
-@@ -1,79 +1,43 @@
--/* #define WINCE_HEADER */
--/* #define WIN2000 */
--/* #define TC */
-+
-+/* OS depending defines */
-+
-+/* The choices are: */
-+
- #define LINUX_KERNEL /* Kernel framebuffer */
- /* #define LINUX_XF86 */ /* XFree86 */
-
- /**********************************************************************/
--#ifdef LINUX_KERNEL
-- #include <linux/config.h>
-- #include <linux/version.h>
-- #ifdef CONFIG_FB_SIS_300
-- #define SIS300
-- #endif
--
-- #ifdef CONFIG_FB_SIS_315
-- #define SIS315H
-- #endif
-- #if 1
-- #define SISFBACCEL /* Include 2D acceleration */
-- #endif
-- #if 1
-- #define SISFB_PAN /* Include Y-Panning code */
-- #endif
--#else
--/* #define SIS300*/
-- #define SIS315H
--#endif
--#ifdef LINUX_XF86
-- #define SIS300
-- /* #define SIS315H */ /* TW: done above */
--#endif
-+#ifdef LINUX_KERNEL /* -------------------------- */
-+#include <linux/config.h>
-+#include <linux/version.h>
-
--/**********************************************************************/
--#ifdef TC
--#endif
--#ifdef WIN2000
--#endif
--#ifdef WINCE_HEADER
--#endif
--#ifdef LINUX_XF86
-+#ifdef CONFIG_FB_SIS_300
-+#define SIS300
- #endif
--#ifdef LINUX_KERNEL
--#endif
--/**********************************************************************/
--#ifdef TC
--#define SiS_SetMemory(MemoryAddress,MemorySize,value) memset(MemoryAddress, value, MemorySize);
--#endif
--#ifdef WIN2000
--#define SiS_SetMemory(MemoryAddress,MemorySize,value) MemFill((PVOID) MemoryAddress,(ULONG) MemorySize,(UCHAR) value);
-+
-+#ifdef CONFIG_FB_SIS_315
-+#define SIS315H
- #endif
--#ifdef WINCE_HEADER
--#define SiS_SetMemory(MemoryAddress,MemorySize,value) memset(MemoryAddress, value, MemorySize);
-+
-+#if 1
-+#define SISFBACCEL /* Include 2D acceleration */
- #endif
--#ifdef LINUX_XF86
--#define SiS_SetMemory(MemoryAddress,MemorySize,value) memset(MemoryAddress, value, MemorySize)
-+
- #endif
--#ifdef LINUX_KERNEL
--#define SiS_SetMemory(MemoryAddress,MemorySize,value) memset(MemoryAddress, value, MemorySize)
-+
-+#ifdef LINUX_XF86 /* ----------------------------- */
-+#define SIS300
-+#define SIS315H
- #endif
--/**********************************************************************/
-
- /**********************************************************************/
--
--#ifdef TC
--#define SiS_MemoryCopy(Destination,Soruce,Length) memmove(Destination, Soruce, Length);
--#endif
--#ifdef WIN2000
--#define SiS_MemoryCopy(Destination,Soruce,Length) /*VideoPortMoveMemory((PUCHAR)Destination , Soruce,length);*/
--#endif
--#ifdef WINCE_HEADER
--#define SiS_MemoryCopy(Destination,Soruce,Length) memmove(Destination, Soruce, Length);
--#endif
- #ifdef LINUX_XF86
-+#define SiS_SetMemory(MemoryAddress,MemorySize,value) memset(MemoryAddress, value, MemorySize)
- #define SiS_MemoryCopy(Destination,Soruce,Length) memcpy(Destination,Soruce,Length)
- #endif
-+
- #ifdef LINUX_KERNEL
-+#define SiS_SetMemory(MemoryAddress,MemorySize,value) memset(MemoryAddress, value, MemorySize)
- #define SiS_MemoryCopy(Destination,Soruce,Length) memcpy(Destination,Soruce,Length)
- #endif
-
-@@ -104,19 +68,6 @@
- #endif /* InPortLong */
-
- /**********************************************************************/
--/* TC */
--/**********************************************************************/
--
--#ifdef TC
--#define OutPortByte(p,v) outp((unsigned short)(p),(unsigned char)(v))
--#define OutPortWord(p,v) outp((unsigned short)(p),(unsigned short)(v))
--#define OutPortLong(p,v) outp((unsigned short)(p),(unsigned long)(v))
--#define InPortByte(p) inp((unsigned short)(p))
--#define InPortWord(p) inp((unsigned short)(p))
--#define InPortLong(p) ((inp((unsigned short)(p+2))<<16) | inp((unsigned short)(p)))
--#endif
--
--/**********************************************************************/
- /* LINUX XF86 */
- /**********************************************************************/
-
-@@ -142,29 +93,4 @@
- #define InPortLong(p) inl((u16)(p))
- #endif
-
--/**********************************************************************/
--/* WIN 2000 */
--/**********************************************************************/
--
--#ifdef WIN2000
--#define OutPortByte(p,v) VideoPortWritePortUchar ((PUCHAR) (p), (UCHAR) (v))
--#define OutPortWord(p,v) VideoPortWritePortUshort((PUSHORT) (p), (USHORT) (v))
--#define OutPortLong(p,v) VideoPortWritePortUlong ((PULONG) (p), (ULONG) (v))
--#define InPortByte(p) VideoPortReadPortUchar ((PUCHAR) (p))
--#define InPortWord(p) VideoPortReadPortUshort ((PUSHORT) (p))
--#define InPortLong(p) VideoPortReadPortUlong ((PULONG) (p))
--#endif
-
--
--/**********************************************************************/
--/* WIN CE */
--/**********************************************************************/
--
--#ifdef WINCE_HEADER
--#define OutPortByte(p,v) WRITE_PORT_UCHAR ((PUCHAR) (p), (UCHAR) (v))
--#define OutPortWord(p,v) WRITE_PORT_USHORT((PUSHORT) (p), (USHORT) (v))
--#define OutPortLong(p,v) WRITE_PORT_ULONG ((PULONG) (p), (ULONG) (v))
--#define InPortByte(p) READ_PORT_UCHAR ((PUCHAR) (p))
--#define InPortWord(p) READ_PORT_USHORT ((PUSHORT) (p))
--#define InPortLong(p) READ_PORT_ULONG ((PULONG) (p))
--#endif
---- linux-2.6.0-test1/drivers/video/sis/sis_accel.c 2003-06-14 12:18:52.000000000 -0700
-+++ 25/drivers/video/sis/sis_accel.c 2003-07-19 17:04:55.000000000 -0700
-@@ -1,5 +1,5 @@
- /*
-- * SiS 300/630/730/540/315/550/650/740 frame buffer driver
-+ * SiS 300/630/730/540/315/550/650/740/330/660 frame buffer driver
- * for Linux kernels 2.4.x and 2.5.x
- *
- * 2D acceleration part
-@@ -211,7 +211,7 @@ SiS300SubsequentSolidFillRect(int x, int
- SiS300DoCMD
- }
-
--/* 310/325 series ------------------------------------------------ */
-+/* 315 series ---------------------------------------------------- */
-
- static void
- SiS310SetupForScreenToScreenCopy(int xdir, int ydir, int rop,
-@@ -230,7 +230,7 @@ SiS310SetupForScreenToScreenCopy(int xdi
- /* SiSSetupCMDFlag(BITBLT | SRCVIDEO) */
- }
- SiS310SetupCMDFlag(ivideo.SiS310_AccelDepth)
-- /* TW: The 310/325 series is smart enough to know the direction */
-+ /* TW: The 315 series is smart enough to know the direction */
- }
-
- static void
-@@ -328,11 +328,13 @@ void sisfb_syncaccel(void)
- }
- }
-
--#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,34) /* --- KERNEL 2.5.34 and later --- */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0) /* --------------- 2.5 --------------- */
-
- int fbcon_sis_sync(struct fb_info *info)
- {
-- if(!sisfb_accel) return 0;
-+ if(!ivideo.accel)
-+ return 0;
-+
- CRITFLAGS
- if(sisvga_engine == SIS_300_VGA) {
- SiS300Sync();
-@@ -352,7 +354,7 @@ void fbcon_sis_fillrect(struct fb_info *
- if(!rect->width || !rect->height)
- return;
-
-- if(!sisfb_accel) {
-+ if(!ivideo.accel) {
- cfb_fillrect(info, rect);
- return;
- }
-@@ -388,7 +390,7 @@ void fbcon_sis_copyarea(struct fb_info *
- CRITFLAGS
-
- TWDEBUG("Inside sis_copyarea");
-- if(!sisfb_accel) {
-+ if(!ivideo.accel) {
- cfb_copyarea(info, area);
- return;
- }
-@@ -418,7 +420,7 @@ void fbcon_sis_copyarea(struct fb_info *
-
- #endif
-
--#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,5,33) /* ------ KERNEL <2.5.34 ------ */
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0) /* -------------- 2.4 --------------- */
-
- void fbcon_sis_bmove(struct display *p, int srcy, int srcx,
- int dsty, int dstx, int height, int width)
-@@ -591,38 +593,38 @@ void fbcon_sis_revc(struct display *p, i
-
- #ifdef FBCON_HAS_CFB8
- struct display_switch fbcon_sis8 = {
-- setup: fbcon_cfb8_setup,
-- bmove: fbcon_sis_bmove,
-- clear: fbcon_sis_clear8,
-- putc: fbcon_cfb8_putc,
-- putcs: fbcon_cfb8_putcs,
-- revc: fbcon_cfb8_revc,
-- clear_margins: fbcon_cfb8_clear_margins,
-- fontwidthmask: FONTWIDTH(4)|FONTWIDTH(8)|FONTWIDTH(12)|FONTWIDTH(16)
-+ .setup = fbcon_cfb8_setup,
-+ .bmove = fbcon_sis_bmove,
-+ .clear = fbcon_sis_clear8,
-+ .putc = fbcon_cfb8_putc,
-+ .putcs = fbcon_cfb8_putcs,
-+ .revc = fbcon_cfb8_revc,
-+ .clear_margins = fbcon_cfb8_clear_margins,
-+ .fontwidthmask = FONTWIDTH(4)|FONTWIDTH(8)|FONTWIDTH(12)|FONTWIDTH(16)
- };
- #endif
- #ifdef FBCON_HAS_CFB16
- struct display_switch fbcon_sis16 = {
-- setup: fbcon_cfb16_setup,
-- bmove: fbcon_sis_bmove,
-- clear: fbcon_sis_clear16,
-- putc: fbcon_cfb16_putc,
-- putcs: fbcon_cfb16_putcs,
-- revc: fbcon_sis_revc,
-- clear_margins: fbcon_cfb16_clear_margins,
-- fontwidthmask: FONTWIDTH(4)|FONTWIDTH(8)|FONTWIDTH(12)|FONTWIDTH(16)
-+ .setup = fbcon_cfb16_setup,
-+ .bmove = fbcon_sis_bmove,
-+ .clear = fbcon_sis_clear16,
-+ .putc = fbcon_cfb16_putc,
-+ .putcs = fbcon_cfb16_putcs,
-+ .revc = fbcon_sis_revc,
-+ .clear_margins = fbcon_cfb16_clear_margins,
-+ .fontwidthmask = FONTWIDTH(4)|FONTWIDTH(8)|FONTWIDTH(12)|FONTWIDTH(16)
- };
- #endif
- #ifdef FBCON_HAS_CFB32
- struct display_switch fbcon_sis32 = {
-- setup: fbcon_cfb32_setup,
-- bmove: fbcon_sis_bmove,
-- clear: fbcon_sis_clear32,
-- putc: fbcon_cfb32_putc,
-- putcs: fbcon_cfb32_putcs,
-- revc: fbcon_sis_revc,
-- clear_margins: fbcon_cfb32_clear_margins,
-- fontwidthmask: FONTWIDTH(4)|FONTWIDTH(8)|FONTWIDTH(12)|FONTWIDTH(16)
-+ .setup = fbcon_cfb32_setup,
-+ .bmove = fbcon_sis_bmove,
-+ .clear = fbcon_sis_clear32,
-+ .putc = fbcon_cfb32_putc,
-+ .putcs = fbcon_cfb32_putcs,
-+ .revc = fbcon_sis_revc,
-+ .clear_margins = fbcon_cfb32_clear_margins,
-+ .fontwidthmask = FONTWIDTH(4)|FONTWIDTH(8)|FONTWIDTH(12)|FONTWIDTH(16)
- };
- #endif
-
---- linux-2.6.0-test1/drivers/video/sis/sis_accel.h 2003-06-14 12:18:08.000000000 -0700
-+++ 25/drivers/video/sis/sis_accel.h 2003-07-19 17:04:55.000000000 -0700
-@@ -47,7 +47,7 @@
- #define TRAPAZOID_FILL 0x00000005 /* Fill trapezoid */
- #define TRANSPARENT_BITBLT 0x00000006 /* Transparent Blit */
-
--/* Additional engine commands for 310/325 */
-+/* Additional engine commands for 315 */
- #define ALPHA_BLEND 0x00000007 /* Alpha blend ? */
- #define A3D_FUNCTION 0x00000008 /* 3D command ? */
- #define CLEAR_Z_BUFFER 0x00000009 /* ? */
-@@ -90,11 +90,11 @@
- #define NO_RESET_COUNTER 0x00400000
- #define NO_LAST_PIXEL 0x00200000
-
--/* Subfunctions for Color/Enhanced Color Expansion (310/325 only) */
-+/* Subfunctions for Color/Enhanced Color Expansion (315 only) */
- #define COLOR_TO_MONO 0x00100000
- #define AA_TEXT 0x00200000
-
--/* Some general registers for 310/325 series */
-+/* Some general registers for 315 series */
- #define SRC_ADDR 0x8200
- #define SRC_PITCH 0x8204
- #define AGP_BASE 0x8206 /* color-depth dependent value */
-@@ -326,7 +326,7 @@ int CmdQueLen;
-
-
-
--/* ----------- SiS 310/325 series --------------- */
-+/* -------------- SiS 315 series --------------- */
-
- /* Q_STATUS:
- bit 31 = 1: All engines idle and all queues empty
-@@ -342,7 +342,7 @@ int CmdQueLen;
- bits 7:0: 2D counter 1
-
- Where is the command queue length (current amount of commands the queue
-- can accept) on the 310/325 series? (The current implementation is taken
-+ can accept) on the 315 series? (The current implementation is taken
- from 300 series and certainly wrong...)
- */
-
---- linux-2.6.0-test1/drivers/video/sis/sis_main.c 2003-06-14 12:18:25.000000000 -0700
-+++ 25/drivers/video/sis/sis_main.c 2003-07-19 17:04:55.000000000 -0700
-@@ -1,25 +1,18 @@
- /*
-- * SiS 300/630/730/540/315/550/650/740 frame buffer device
-+ * SiS 300/630/730/540/315/550/650/740/330/660 frame buffer device
- * for Linux kernels 2.4.x and 2.5.x
- *
-- * Partly based on the VBE 2.0 compliant graphic boards framebuffer driver,
-- * which is (c) 1998 Gerd Knorr <kraxel@goldbach.in-berlin.de>
-+ * (C) 1999 Silicon Integrated Systems, Inc.
-+ * (C) 2001-2003 Thomas Winischhofer, Vienna, Austria.
- *
- * Authors: SiS (www.sis.com.tw)
-- * (Various others)
-- * Thomas Winischhofer <thomas@winischhofer.net>:
-- * - SiS Xabre (330) support
-- * - many fixes and enhancements for all chipset series,
-- * - extended bridge handling, TV output for Chrontel 7005
-- * - 650/LVDS support (for LCD panels up to 1600x1200)
-- * - 650/740/Chrontel 7019 support
-- * - 30xB/30xLV LCD, TV and VGA2 support
-- * - memory queue handling enhancements,
-- * - 2D acceleration and y-panning,
-- * - portation to 2.5 API
-- * - etc.
-- * (see http://www.winischhofer.net/
-- * for more information and updates)
-+ * Thomas Winischhofer <thomas@winischhofer.net>
-+ *
-+ * See http://www.winischhofer.net/ for more information and updates
-+ *
-+ * Originally based on the VBE 2.0 compliant graphic boards framebuffer driver,
-+ * which is (c) 1998 Gerd Knorr <kraxel@goldbach.in-berlin.de>
-+ *
- */
-
- #include <linux/config.h>
-@@ -43,6 +36,7 @@
- #include <linux/fs.h>
- #include <linux/agp_backend.h>
- #include <linux/types.h>
-+#include <asm/uaccess.h>
-
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
- #include <linux/spinlock.h>
-@@ -79,6 +73,12 @@
- #endif
- #endif
-
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,69)
-+#error "This version of sisfb requires at least 2.5.69"
-+#endif
-+#endif
-+
- /* -------------------- Macro definitions ---------------------------- */
-
- #undef SISFBDEBUG /* TW: no debugging */
-@@ -178,9 +178,12 @@ BOOLEAN sisfb_query_north_bridge_space(P
- case SIS_650:
- nbridge_id = PCI_DEVICE_ID_SI_650;
- break;
-- case SIS_740:
-+ case SIS_740:
- nbridge_id = PCI_DEVICE_ID_SI_740;
- break;
-+ case SIS_660:
-+ nbridge_id = PCI_DEVICE_ID_SI_660;
-+ break;
- default:
- nbridge_id = 0;
- break;
-@@ -207,64 +210,288 @@ BOOLEAN sisfb_query_north_bridge_space(P
-
- /* ------------------ Internal helper routines ----------------- */
-
--static void sisfb_search_mode(const char *name)
-+static BOOLEAN sisfb_verify_rate(struct sisfb_monitor *monitor, int mode_idx, int rate_idx, int rate)
- {
-- int i = 0, j = 0;
-+ int htotal, vtotal;
-+ unsigned int dclock, hsync;
-
-- if(name == NULL) {
-- printk(KERN_ERR "sisfb: Internal error, using default mode.\n");
-- sisfb_mode_idx = DEFAULT_MODE;
-- return;
-+ if(!monitor->datavalid) return TRUE;
-+
-+ if(mode_idx < 0) return FALSE;
-+
-+ if(rate < (monitor->vmin - 1)) return FALSE;
-+ if(rate > (monitor->vmax + 1)) return FALSE;
-+
-+ if(sisfb_gettotalfrommode(&SiS_Pr, &sishw_ext, sisbios_mode[mode_idx].mode_no,
-+ &htotal, &vtotal, rate_idx)) {
-+ dclock = (htotal * vtotal * rate) / 1000;
-+ if(dclock > (monitor->dclockmax + 1000)) return FALSE;
-+ hsync = dclock / htotal;
-+ if(hsync < (monitor->hmin - 1)) return FALSE;
-+ if(hsync > (monitor->hmax + 1)) return FALSE;
-+ } else {
-+ return FALSE;
- }
--
--#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
-- if (!strcmp(name, sisbios_mode[MODE_INDEX_NONE].name)) {
-- printk(KERN_ERR "sisfb: Mode 'none' not supported anymore. Using default.\n");
-- sisfb_mode_idx = DEFAULT_MODE;
-- return;
-+ return TRUE;
-+};
-+
-+static BOOLEAN sisfb_interpret_edid(struct sisfb_monitor *monitor, unsigned char *buffer)
-+{
-+ int i, j, xres, yres, refresh, index;
-+ u32 emodes;
-+
-+ if(buffer[0] != 0x00 || buffer[1] != 0xff ||
-+ buffer[2] != 0xff || buffer[3] != 0xff ||
-+ buffer[4] != 0xff || buffer[5] != 0xff ||
-+ buffer[6] != 0xff || buffer[7] != 0x00) {
-+ printk(KERN_INFO "sisfb: Bad EDID header\n");
-+ return FALSE;
- }
--#endif
-
-- while(sisbios_mode[i].mode_no != 0) {
-- if (!strcmp(name, sisbios_mode[i].name)) {
-- sisfb_mode_idx = i;
-- j = 1;
-- break;
-- }
-- i++;
-+ if(buffer[0x12] != 0x01) {
-+ printk(KERN_INFO "sisfb: EDID version %d not supported\n",
-+ buffer[0x12]);
-+ return FALSE;
-+ }
-+
-+ monitor->feature = buffer[0x18];
-+
-+ if(!buffer[0x14] & 0x80) {
-+ if(!(buffer[0x14] & 0x08)) {
-+ printk(KERN_INFO "sisfb: WARNING: Monitor does not support separate syncs\n");
-+ }
-+ }
-+
-+ if(buffer[0x13] >= 0x01) {
-+ /* EDID V1 rev 1 and 2: Search for monitor descriptor
-+ * to extract ranges
-+ */
-+ j = 0x36;
-+ for(i=0; i<4; i++) {
-+ if(buffer[j] == 0x00 && buffer[j + 1] == 0x00 &&
-+ buffer[j + 2] == 0x00 && buffer[j + 3] == 0xfd &&
-+ buffer[j + 4] == 0x00) {
-+ monitor->hmin = buffer[j + 7];
-+ monitor->hmax = buffer[j + 8];
-+ monitor->vmin = buffer[j + 5];
-+ monitor->vmax = buffer[j + 6];
-+ monitor->dclockmax = buffer[j + 9] * 10 * 1000;
-+ monitor->datavalid = TRUE;
-+ break;
-+ }
-+ j += 18;
-+ }
-+ }
-+
-+ if(!monitor->datavalid) {
-+ /* Otherwise: Get a range from the list of supported
-+ * Estabished Timings. This is not entirely accurate,
-+ * because fixed frequency monitors are not supported
-+ * that way.
-+ */
-+ monitor->hmin = 65535; monitor->hmax = 0;
-+ monitor->vmin = 65535; monitor->vmax = 0;
-+ monitor->dclockmax = 0;
-+ emodes = buffer[0x23] | (buffer[0x24] << 8) | (buffer[0x25] << 16);
-+ for(i = 0; i < 13; i++) {
-+ if(emodes & sisfb_ddcsmodes[i].mask) {
-+ if(monitor->hmin > sisfb_ddcsmodes[i].h) monitor->hmin = sisfb_ddcsmodes[i].h;
-+ if(monitor->hmax < sisfb_ddcsmodes[i].h) monitor->hmax = sisfb_ddcsmodes[i].h + 1;
-+ if(monitor->vmin > sisfb_ddcsmodes[i].v) monitor->vmin = sisfb_ddcsmodes[i].v;
-+ if(monitor->vmax < sisfb_ddcsmodes[i].v) monitor->vmax = sisfb_ddcsmodes[i].v;
-+ if(monitor->dclockmax < sisfb_ddcsmodes[i].d) monitor->dclockmax = sisfb_ddcsmodes[i].d;
-+ }
-+ }
-+ index = 0x26;
-+ for(i = 0; i < 8; i++) {
-+ xres = (buffer[index] + 31) * 8;
-+ switch(buffer[index + 1] & 0xc0) {
-+ case 0xc0: yres = (xres * 9) / 16; break;
-+ case 0x80: yres = (xres * 4) / 5; break;
-+ case 0x40: yres = (xres * 3) / 4; break;
-+ default: yres = xres; break;
-+ }
-+ refresh = (buffer[index + 1] & 0x3f) + 60;
-+ if((xres >= 640) && (yres >= 480)) {
-+ for(j = 0; j < 8; j++) {
-+ if((xres == sisfb_ddcfmodes[j].x) &&
-+ (yres == sisfb_ddcfmodes[j].y) &&
-+ (refresh == sisfb_ddcfmodes[j].v)) {
-+ if(monitor->hmin > sisfb_ddcfmodes[j].h) monitor->hmin = sisfb_ddcfmodes[j].h;
-+ if(monitor->hmax < sisfb_ddcfmodes[j].h) monitor->hmax = sisfb_ddcfmodes[j].h + 1;
-+ if(monitor->vmin > sisfb_ddcsmodes[j].v) monitor->vmin = sisfb_ddcsmodes[j].v;
-+ if(monitor->vmax < sisfb_ddcsmodes[j].v) monitor->vmax = sisfb_ddcsmodes[j].v;
-+ if(monitor->dclockmax < sisfb_ddcsmodes[j].d) monitor->dclockmax = sisfb_ddcsmodes[i].d;
-+ }
-+ }
-+ }
-+ index += 2;
-+ }
-+ if((monitor->hmin <= monitor->hmax) && (monitor->vmin <= monitor->vmax)) {
-+ monitor->datavalid = TRUE;
-+ }
-+ }
-+
-+ return(monitor->datavalid);
-+}
-+
-+static void sisfb_handle_ddc(struct sisfb_monitor *monitor, int crtno)
-+{
-+ USHORT temp, i, realcrtno = crtno;
-+ unsigned char buffer[256];
-+
-+ monitor->datavalid = FALSE;
-+
-+ if(crtno) {
-+ if(ivideo.vbflags & CRT2_LCD) realcrtno = 1;
-+ else if(ivideo.vbflags & CRT2_VGA) realcrtno = 2;
-+ else return;
-+ }
-+
-+ if((sisfb_crt1off) && (!crtno)) return;
-+
-+ temp = SiS_HandleDDC(&SiS_Pr, ivideo.vbflags, sisvga_engine, realcrtno, 0, &buffer[0]);
-+ if((!temp) || (temp == 0xffff)) {
-+ printk(KERN_INFO "sisfb: CRT%d DDC probing failed\n", crtno + 1);
-+ return;
-+ } else {
-+ printk(KERN_INFO "sisfb: CRT%d DDC supported\n", crtno + 1);
-+ printk(KERN_INFO "sisfb: CRT%d DDC level: %s%s%s%s\n",
-+ crtno + 1,
-+ (temp & 0x1a) ? "" : "[none of the supported]",
-+ (temp & 0x02) ? "2 " : "",
-+ (temp & 0x08) ? "D&P" : "",
-+ (temp & 0x10) ? "FPDI-2" : "");
-+ if(temp & 0x02) {
-+ i = 3; /* Number of retrys */
-+ do {
-+ temp = SiS_HandleDDC(&SiS_Pr, ivideo.vbflags, sisvga_engine,
-+ realcrtno, 1, &buffer[0]);
-+ } while((temp) && i--);
-+ if(!temp) {
-+ if(sisfb_interpret_edid(monitor, &buffer[0])) {
-+ printk(KERN_INFO "sisfb: Monitor range H %d-%dKHz, V %d-%dHz, Max. dotclock %dMHz\n",
-+ monitor->hmin, monitor->hmax, monitor->vmin, monitor->vmax,
-+ monitor->dclockmax / 1000);
-+ } else {
-+ printk(KERN_INFO "sisfb: CRT%d DDC EDID corrupt\n", crtno + 1);
-+ }
-+ } else {
-+ printk(KERN_INFO "sisfb: CRT%d DDC reading failed\n", crtno + 1);
-+ }
-+ } else {
-+ printk(KERN_INFO "sisfb: VESA D&P and FPDI-2 not supported yet\n");
-+ }
- }
-- if(!j) printk(KERN_INFO "sisfb: Invalid mode '%s'\n", name);
- }
-
--static void sisfb_search_vesamode(unsigned int vesamode)
-+static void sisfb_search_vesamode(unsigned int vesamode, BOOLEAN quiet)
- {
- int i = 0, j = 0;
-
- if(vesamode == 0) {
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
- sisfb_mode_idx = MODE_INDEX_NONE;
- #else
-- printk(KERN_ERR "sisfb: Mode 'none' not supported anymore. Using default.\n");
-+ if(!quiet)
-+ printk(KERN_ERR "sisfb: Mode 'none' not supported anymore. Using default.\n");
- sisfb_mode_idx = DEFAULT_MODE;
--#endif
-+#endif
- return;
- }
-
- vesamode &= 0x1dff; /* Clean VESA mode number from other flags */
-
-+ while(sisbios_mode[i++].mode_no != 0) {
-+ if( (sisbios_mode[i-1].vesa_mode_no_1 == vesamode) ||
-+ (sisbios_mode[i-1].vesa_mode_no_2 == vesamode) ) {
-+ if(sisfb_fstn) {
-+ if(sisbios_mode[i-1].mode_no == 0x50 ||
-+ sisbios_mode[i-1].mode_no == 0x56 ||
-+ sisbios_mode[i-1].mode_no == 0x53) continue;
-+ } else {
-+ if(sisbios_mode[i-1].mode_no == 0x5a ||
-+ sisbios_mode[i-1].mode_no == 0x5b) continue;
-+ }
-+ sisfb_mode_idx = i - 1;
-+ j = 1;
-+ break;
-+ }
-+ }
-+ if((!j) && !quiet) printk(KERN_ERR "sisfb: Invalid VESA mode 0x%x'\n", vesamode);
-+}
-+
-+static void sisfb_search_mode(char *name, BOOLEAN quiet)
-+{
-+ int i = 0;
-+ unsigned int j = 0, xres = 0, yres = 0, depth = 0, rate = 0;
-+ char strbuf[16], strbuf1[20];
-+ char *nameptr = name;
-+
-+ if(name == NULL) {
-+ if(!quiet)
-+ printk(KERN_ERR "sisfb: Internal error, using default mode.\n");
-+ sisfb_mode_idx = DEFAULT_MODE;
-+ return;
-+ }
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
-+ if (!strcmp(name, sisbios_mode[MODE_INDEX_NONE].name)) {
-+ if(!quiet)
-+ printk(KERN_ERR "sisfb: Mode 'none' not supported anymore. Using default.\n");
-+ sisfb_mode_idx = DEFAULT_MODE;
-+ return;
-+ }
-+#endif
-+ if(strlen(name) <= 19) {
-+ strcpy(strbuf1, name);
-+ for(i=0; i<strlen(strbuf1); i++) {
-+ if(strbuf1[i] < '0' || strbuf1[i] > '9') strbuf1[i] = ' ';
-+ }
-+
-+ /* This does some fuzzy mode naming detection */
-+ if(sscanf(strbuf1, "%u %u %u %u", &xres, &yres, &depth, &rate) == 4) {
-+ if((rate <= 32) || (depth > 32)) {
-+ j = rate; rate = depth; depth = j;
-+ }
-+ sprintf(strbuf, "%ux%ux%u", xres, yres, depth);
-+ nameptr = strbuf;
-+ ivideo.refresh_rate = sisfb_parm_rate = rate;
-+ } else if(sscanf(strbuf1, "%u %u %u", &xres, &yres, &depth) == 3) {
-+ sprintf(strbuf, "%ux%ux%u", xres, yres, depth);
-+ nameptr = strbuf;
-+ } else {
-+ xres = 0;
-+ if((sscanf(strbuf1, "%u %u", &xres, &yres) == 2) && (xres != 0)) {
-+ sprintf(strbuf, "%ux%ux8", xres, yres);
-+ nameptr = strbuf;
-+ } else {
-+ sisfb_search_vesamode(simple_strtoul(name, NULL, 0), quiet);
-+ return;
-+ }
-+ }
-+ }
-+
-+ i = 0; j = 0;
- while(sisbios_mode[i].mode_no != 0) {
-- if( (sisbios_mode[i].vesa_mode_no_1 == vesamode) ||
-- (sisbios_mode[i].vesa_mode_no_2 == vesamode) ) {
-- sisfb_mode_idx = i;
-- j = 1;
-- break;
-+ if(!strcmp(nameptr, sisbios_mode[i++].name)) {
-+ if(sisfb_fstn) {
-+ if(sisbios_mode[i-1].mode_no == 0x50 ||
-+ sisbios_mode[i-1].mode_no == 0x56 ||
-+ sisbios_mode[i-1].mode_no == 0x53) continue;
-+ } else {
-+ if(sisbios_mode[i-1].mode_no == 0x5a ||
-+ sisbios_mode[i-1].mode_no == 0x5b) continue;
-+ }
-+ sisfb_mode_idx = i - 1;
-+ j = 1;
-+ break;
- }
-- i++;
- }
-- if(!j) printk(KERN_INFO "sisfb: Invalid VESA mode 0x%x'\n", vesamode);
-+ if((!j) && !quiet) printk(KERN_ERR "sisfb: Invalid mode '%s'\n", nameptr);
- }
-
--static int sisfb_validate_mode(int myindex)
-+static int sisfb_validate_mode(int myindex, unsigned long vbflags)
- {
- u16 xres, yres;
-
-@@ -283,8 +510,8 @@ static int sisfb_validate_mode(int myind
- }
- #endif
-
-- switch (ivideo.disp_state & DISPTYPE_DISP2) {
-- case DISPTYPE_LCD:
-+ switch (vbflags & VB_DISPTYPE_DISP2) {
-+ case CRT2_LCD:
- switch (sishw_ext.ulCRT2LCDType) {
- case LCD_640x480:
- xres = 640; yres = 480; break;
-@@ -306,24 +533,49 @@ static int sisfb_validate_mode(int myind
- xres = 1400; yres = 1050; break;
- case LCD_1600x1200:
- xres = 1600; yres = 1200; break;
-- case LCD_320x480: /* TW: FSTN */
-+ case LCD_320x480: /* FSTN (old) */
- xres = 320; yres = 480; break;
-+ case LCD_640x480_2: /* FSTN (new) */
-+ case LCD_640x480_3:
-+ xres = 640; yres = 480; break;
- default:
- xres = 0; yres = 0; break;
- }
-+ if(SiS_Pr.SiS_CustomT == CUT_BARCO1366) {
-+ xres = 1360; yres = 1024;
-+ }
- if(sisbios_mode[myindex].xres > xres) {
- return(-1);
- }
- if(sisbios_mode[myindex].yres > yres) {
- return(-1);
- }
-- if((sishw_ext.usExternalChip == 0x01) || /* LVDS */
-- (sishw_ext.usExternalChip == 0x05) || /* LVDS+Chrontel */
-- (sishw_ext.Is301BDH)) { /* 301B-DH */
-+ if(vbflags & (VB_LVDS | VB_30xBDH)) {
- switch (sisbios_mode[myindex].xres) {
-+ case 320:
-+ if((sisbios_mode[myindex].yres != 200) &&
-+ (sisbios_mode[myindex].yres != 240))
-+ return(-1);
-+ if((sisbios_mode[myindex].yres == 240) ||
-+ (sisbios_mode[myindex].yres == 480)) {
-+ if(!sisfb_fstn) {
-+ if(sisbios_mode[myindex].mode_no == 0x5a ||
-+ sisbios_mode[myindex].mode_no == 0x5b)
-+ return(-1);
-+ } else {
-+ if(sisbios_mode[myindex].mode_no == 0x50 ||
-+ sisbios_mode[myindex].mode_no == 0x56 ||
-+ sisbios_mode[myindex].mode_no == 0x53)
-+ return(-1);
-+ }
-+ }
-+ break;
-+ case 400:
-+ if(sisbios_mode[myindex].yres != 300) return(-1);
-+ break;
- case 512:
-- if(sisbios_mode[myindex].yres != 512) return -1;
-- if(sishw_ext.ulCRT2LCDType == LCD_1024x600) return -1;
-+ if(sisbios_mode[myindex].yres != 384) return(-1);
-+ if(sishw_ext.ulCRT2LCDType == LCD_1024x600) return(-1);
- break;
- case 640:
- if((sisbios_mode[myindex].yres != 400) &&
-@@ -331,115 +583,130 @@ static int sisfb_validate_mode(int myind
- return -1;
- break;
- case 800:
-- if(sisbios_mode[myindex].yres != 600) return -1;
-+ if(sisbios_mode[myindex].yres != 600) return(-1);
- break;
- case 1024:
- if((sisbios_mode[myindex].yres != 600) &&
- (sisbios_mode[myindex].yres != 768))
-- return -1;
-+ return(-1);
- if((sisbios_mode[myindex].yres == 600) &&
- (sishw_ext.ulCRT2LCDType != LCD_1024x600))
-- return -1;
-+ return(-1);
- break;
- case 1152:
-- if((sisbios_mode[myindex].yres) != 768) return -1;
-- if(sishw_ext.ulCRT2LCDType != LCD_1152x768) return -1;
-+ if((sisbios_mode[myindex].yres) != 768) return(-1);
-+ if(sishw_ext.ulCRT2LCDType != LCD_1152x768) return(-1);
- break;
- case 1280:
- if((sisbios_mode[myindex].yres != 768) &&
- (sisbios_mode[myindex].yres != 1024))
-- return -1;
-+ return(-1);
- if((sisbios_mode[myindex].yres == 768) &&
- (sishw_ext.ulCRT2LCDType != LCD_1280x768))
-- return -1;
-+ return(-1);
-+ break;
-+ case 1360:
-+ if(SiS_Pr.SiS_CustomT != CUT_BARCO1366) return(-1);
-+ if(sisbios_mode[myindex].yres != 1024) return(-1);
- break;
- case 1400:
-- if(sisbios_mode[myindex].yres != 1050) return -1;
-+ if(sisbios_mode[myindex].yres != 1050) return(-1);
- break;
- case 1600:
-- if(sisbios_mode[myindex].yres != 1200) return -1;
-+ if(sisbios_mode[myindex].yres != 1200) return(-1);
- break;
- default:
-- return -1;
-+ return(-1);
- }
- } else {
- switch (sisbios_mode[myindex].xres) {
-+ case 320:
-+ if((sisbios_mode[myindex].yres != 200) &&
-+ (sisbios_mode[myindex].yres != 240))
-+ return -1;
-+ break;
-+ case 400:
-+ if(sisbios_mode[myindex].yres != 300) return(-1);
-+ break;
- case 512:
-- if(sisbios_mode[myindex].yres != 512) return -1;
-+ if(sisbios_mode[myindex].yres != 384) return(-1);
- break;
- case 640:
- if((sisbios_mode[myindex].yres != 400) &&
- (sisbios_mode[myindex].yres != 480))
-- return -1;
-+ return(-1);
- break;
- case 800:
-- if(sisbios_mode[myindex].yres != 600) return -1;
-+ if(sisbios_mode[myindex].yres != 600) return(-1);
- break;
- case 1024:
-- if(sisbios_mode[myindex].yres != 768) return -1;
-+ if(sisbios_mode[myindex].yres != 768) return(-1);
- break;
- case 1280:
- if((sisbios_mode[myindex].yres != 960) &&
-+ (sisbios_mode[myindex].yres != 768) &&
- (sisbios_mode[myindex].yres != 1024))
-- return -1;
-- if(sisbios_mode[myindex].yres == 960) {
-- if(sishw_ext.ulCRT2LCDType == LCD_1400x1050)
-- return -1;
-+ return(-1);
-+ if((sisbios_mode[myindex].yres == 768) ||
-+ (sisbios_mode[myindex].yres == 960)) {
-+ if(sishw_ext.ulCRT2LCDType == LCD_1400x1050)
-+ return(-1);
-+ }
-+ if(sisbios_mode[myindex].yres == 768) {
-+ if(sishw_ext.ulCRT2LCDType == LCD_1280x960)
-+ return(-1);
- }
- break;
- case 1400:
-- if(sisbios_mode[myindex].yres != 1050) return -1;
-+ if(sisbios_mode[myindex].yres != 1050) return(-1);
- break;
- case 1600:
-- if(sisbios_mode[myindex].yres != 1200) return -1;
-+ if(sisbios_mode[myindex].yres != 1200) return(-1);
- break;
- default:
-- return -1;
-+ return(-1);
- }
- }
- break;
-- case DISPTYPE_TV:
-+ case CRT2_TV:
- switch (sisbios_mode[myindex].xres) {
- case 512:
-+ if(vbflags & VB_CHRONTEL) return(-1);
-+ if((vbflags & VB_SISBRIDGE) && (vbflags & TV_NTSC))
-+ return(-1);
-+ /* fall through */
- case 640:
- case 800:
- break;
- case 720:
-- if (ivideo.TV_type == TVMODE_NTSC) {
-+ if(vbflags & VB_CHRONTEL) return -1;
-+ if(vbflags & TV_NTSC) {
- if (sisbios_mode[myindex].yres != 480) {
- return(-1);
- }
-- } else if (ivideo.TV_type == TVMODE_PAL) {
-+ } else if(vbflags & TV_PAL) {
- if (sisbios_mode[myindex].yres != 576) {
- return(-1);
- }
- }
-- /* TW: LVDS/CHRONTEL does not support 720 */
-- if (ivideo.hasVB == HASVB_LVDS_CHRONTEL ||
-- ivideo.hasVB == HASVB_CHRONTEL) {
-- return(-1);
-- }
- break;
- case 1024:
-- if (ivideo.TV_type == TVMODE_NTSC) {
-- if(sisbios_mode[myindex].bpp == 32) {
-- return(-1);
-- }
-- }
-- /* TW: LVDS/CHRONTEL only supports < 800 (1024 on 650/Ch7019)*/
-- if (ivideo.hasVB == HASVB_LVDS_CHRONTEL ||
-- ivideo.hasVB == HASVB_CHRONTEL) {
-- if(ivideo.chip < SIS_315H) {
-+ if(vbflags & VB_301) return(-1);
-+ if(vbflags & VB_CHRONTEL) {
-+ if(ivideo.chip < SIS_315H) {
- return(-1);
-- }
-+ }
- }
- break;
- default:
- return(-1);
- }
- break;
-- case DISPTYPE_CRT2:
-- if(sisbios_mode[myindex].xres > 1280) return -1;
-+ case CRT2_VGA:
-+ if(sisbios_mode[myindex].xres > 1600) return(-1);
-+ if(!(vbflags & (VB_301B|VB_302B))) {
-+ if(sisbios_mode[myindex].xres > 1400) return(-1);
-+ }
- break;
- }
- return(myindex);
-@@ -456,12 +723,17 @@ static void sisfb_search_crt2type(const
- if (!strcmp(name, sis_crt2type[i].name)) {
- sisfb_crt2type = sis_crt2type[i].type_no;
- sisfb_tvplug = sis_crt2type[i].tvplug_no;
-+ sisfb_dstn = (sis_crt2type[i].flags & FL_550_DSTN) ? 1 : 0;
-+ sisfb_fstn = (sis_crt2type[i].flags & FL_550_FSTN) ? 1 : 0;
- break;
- }
- i++;
- }
- if(sisfb_crt2type < 0)
-- printk(KERN_INFO "sisfb: Invalid CRT2 type: %s\n", name);
-+ printk(KERN_ERR "sisfb: Invalid CRT2 type: %s\n", name);
-+ if(ivideo.chip != SIS_550) {
-+ sisfb_dstn = sisfb_fstn = 0;
-+ }
- }
-
- static void sisfb_search_queuemode(const char *name)
-@@ -479,16 +751,16 @@ static void sisfb_search_queuemode(const
- i++;
- }
- if (sisfb_queuemode < 0)
-- printk(KERN_INFO "sisfb: Invalid queuemode type: %s\n", name);
-+ printk(KERN_ERR "sisfb: Invalid queuemode type: %s\n", name);
- }
-
--static u8 sisfb_search_refresh_rate(unsigned int rate)
-+static u8 sisfb_search_refresh_rate(unsigned int rate, int mode_idx)
- {
- u16 xres, yres;
- int i = 0;
-
-- xres = sisbios_mode[sisfb_mode_idx].xres;
-- yres = sisbios_mode[sisfb_mode_idx].yres;
-+ xres = sisbios_mode[mode_idx].xres;
-+ yres = sisbios_mode[mode_idx].yres;
-
- sisfb_rate_idx = 0;
- while ((sisfb_vrate[i].idx != 0) && (sisfb_vrate[i].xres <= xres)) {
-@@ -537,7 +809,7 @@ static void sisfb_search_tvstd(const cha
-
- while (sis_tvtype[i].type_no != -1) {
- if (!strcmp(name, sis_tvtype[i].name)) {
-- sisfb_tvmode = sis_tvtype[i].type_no;
-+ ivideo.vbflags |= sis_tvtype[i].type_no;
- break;
- }
- i++;
-@@ -546,13 +818,13 @@ static void sisfb_search_tvstd(const cha
-
- static BOOLEAN sisfb_bridgeisslave(void)
- {
-- unsigned char usScratchP1_00;
-+ unsigned char P1_00;
-
-- if(ivideo.hasVB == HASVB_NONE) return FALSE;
-+ if(!(ivideo.vbflags & VB_VIDEOBRIDGE)) return FALSE;
-
-- inSISIDXREG(SISPART1,0x00,usScratchP1_00);
-- if( ((sisvga_engine == SIS_300_VGA) && (usScratchP1_00 & 0xa0) == 0x20) ||
-- ((sisvga_engine == SIS_315_VGA) && (usScratchP1_00 & 0x50) == 0x10) ) {
-+ inSISIDXREG(SISPART1,0x00,P1_00);
-+ if( ((sisvga_engine == SIS_300_VGA) && (P1_00 & 0xa0) == 0x20) ||
-+ ((sisvga_engine == SIS_315_VGA) && (P1_00 & 0x50) == 0x10) ) {
- return TRUE;
- } else {
- return FALSE;
-@@ -597,7 +869,7 @@ static BOOLEAN sisfbcheckvretracecrt2(vo
-
- static BOOLEAN sisfb_CheckVBRetrace(void)
- {
-- if(ivideo.disp_state & DISPTYPE_DISP2) {
-+ if(ivideo.currentvbflags & VB_DISPTYPE_DISP2) {
- if(sisfb_bridgeisslave()) {
- return(sisfbcheckvretracecrt1());
- } else {
-@@ -607,60 +879,195 @@ static BOOLEAN sisfb_CheckVBRetrace(void
- return(sisfbcheckvretracecrt1());
- }
-
-+static int sisfb_myblank(int blank)
-+{
-+ u8 sr01, sr11, sr1f, cr63=0, p2_0, p1_13;
-+ BOOLEAN backlight = TRUE;
-+
-+ switch(blank) {
-+ case 0: /* on */
-+ sr01 = 0x00;
-+ sr11 = 0x00;
-+ sr1f = 0x00;
-+ cr63 = 0x00;
-+ p2_0 = 0x20;
-+ p1_13 = 0x00;
-+ backlight = TRUE;
-+ break;
-+ case 1: /* blank */
-+ sr01 = 0x20;
-+ sr11 = 0x00;
-+ sr1f = 0x00;
-+ cr63 = 0x00;
-+ p2_0 = 0x20;
-+ p1_13 = 0x00;
-+ backlight = TRUE;
-+ break;
-+ case 2: /* no vsync */
-+ sr01 = 0x20;
-+ sr11 = 0x08;
-+ sr1f = 0x80;
-+ cr63 = 0x40;
-+ p2_0 = 0x40;
-+ p1_13 = 0x80;
-+ backlight = FALSE;
-+ break;
-+ case 3: /* no hsync */
-+ sr01 = 0x20;
-+ sr11 = 0x08;
-+ sr1f = 0x40;
-+ cr63 = 0x40;
-+ p2_0 = 0x80;
-+ p1_13 = 0x40;
-+ backlight = FALSE;
-+ break;
-+ case 4: /* off */
-+ sr01 = 0x20;
-+ sr11 = 0x08;
-+ sr1f = 0xc0;
-+ cr63 = 0x40;
-+ p2_0 = 0xc0;
-+ p1_13 = 0xc0;
-+ backlight = FALSE;
-+ break;
-+ default:
-+ return 1;
-+ }
-+
-+ if(ivideo.currentvbflags & VB_DISPTYPE_CRT1) {
-+
-+ setSISIDXREG(SISSR, 0x01, ~0x20, sr01);
-+
-+ if( (!sisfb_thismonitor.datavalid) ||
-+ ((sisfb_thismonitor.datavalid) &&
-+ (sisfb_thismonitor.feature & 0xe0))) {
-+
-+ if(sisvga_engine == SIS_315_VGA) {
-+ setSISIDXREG(SISCR, 0x63, 0xbf, cr63);
-+ }
-+
-+ setSISIDXREG(SISSR, 0x1f, 0x3f, sr1f);
-+ }
-+
-+ }
-+
-+ if(ivideo.currentvbflags & CRT2_LCD) {
-+
-+ if(ivideo.vbflags & (VB_301LV|VB_302LV)) {
-+ if(backlight) {
-+ SiS_SiS30xBLOn(&SiS_Pr, &sishw_ext);
-+ } else {
-+ SiS_SiS30xBLOff(&SiS_Pr, &sishw_ext);
-+ }
-+ } else if(sisvga_engine == SIS_315_VGA) {
-+ if(ivideo.vbflags & VB_CHRONTEL) {
-+ if(backlight) {
-+ SiS_Chrontel701xBLOn(&SiS_Pr,&sishw_ext);
-+ } else {
-+ SiS_Chrontel701xBLOff(&SiS_Pr);
-+ }
-+ }
-+ }
-+
-+ if(((sisvga_engine == SIS_300_VGA) &&
-+ (ivideo.vbflags & (VB_301|VB_30xBDH|VB_LVDS))) ||
-+ ((sisvga_engine == SIS_315_VGA) &&
-+ ((ivideo.vbflags & (VB_LVDS | VB_CHRONTEL)) == VB_LVDS))) {
-+ setSISIDXREG(SISSR, 0x11, ~0x0c, sr11);
-+ }
-+
-+ if(sisvga_engine == SIS_300_VGA) {
-+ if((ivideo.vbflags & (VB_301B|VB_302B)) &&
-+ (!(ivideo.vbflags & VB_30xBDH))) {
-+ setSISIDXREG(SISPART1, 0x13, 0x3f, p1_13);
-+ }
-+ } else if(sisvga_engine == SIS_315_VGA) {
-+ if((ivideo.vbflags & (VB_301B|VB_302B)) &&
-+ (!(ivideo.vbflags & VB_30xBDH))) {
-+ setSISIDXREG(SISPART2, 0x00, 0x1f, p2_0);
-+ }
-+ }
-+
-+ } else if(ivideo.currentvbflags & CRT2_VGA) {
-+
-+ if(ivideo.vbflags & (VB_301B|VB_302B)) {
-+ setSISIDXREG(SISPART2, 0x00, 0x1f, p2_0);
-+ }
-+
-+ }
-+
-+ return(0);
-+}
-+
- /* ----------- FBDev related routines for all series ----------- */
-
-+static void sisfb_set_vparms(void)
-+{
-+ switch(ivideo.video_bpp) {
-+ case 8:
-+ ivideo.DstColor = 0x0000;
-+ ivideo.SiS310_AccelDepth = 0x00000000;
-+ ivideo.video_cmap_len = 256;
-+ break;
-+ case 16:
-+ ivideo.DstColor = 0x8000;
-+ ivideo.SiS310_AccelDepth = 0x00010000;
-+ ivideo.video_cmap_len = 16;
-+ break;
-+ case 32:
-+ ivideo.DstColor = 0xC000;
-+ ivideo.SiS310_AccelDepth = 0x00020000;
-+ ivideo.video_cmap_len = 16;
-+ break;
-+ default:
-+ ivideo.video_cmap_len = 16;
-+ printk(KERN_ERR "sisfb: Unsupported depth %d", ivideo.video_bpp);
-+ ivideo.accel = 0;
-+ break;
-+ }
-+}
-+
- static int sisfb_do_set_var(struct fb_var_screeninfo *var, int isactive,
- struct fb_info *info)
- {
-- unsigned int htotal =
-- var->left_margin + var->xres + var->right_margin +
-- var->hsync_len;
-- unsigned int vtotal = 0;
-+ unsigned int htotal = 0, vtotal = 0;
- double drate = 0, hrate = 0;
- int found_mode = 0;
- int old_mode;
-- unsigned char reg;
-+ u32 pixclock;
-
-- TWDEBUG("Inside do_set_var");
--
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-- inSISIDXREG(SISCR,0x34,reg);
-- if(reg & 0x80) {
-- printk(KERN_INFO "sisfb: Cannot change display mode, X server is active\n");
-- return -EBUSY;
-- }
--#endif
-+ htotal = var->left_margin + var->xres + var->right_margin + var->hsync_len;
-+
-+ vtotal = var->upper_margin + var->lower_margin + var->vsync_len;
-+
-+ pixclock = var->pixclock;
-
- if((var->vmode & FB_VMODE_MASK) == FB_VMODE_NONINTERLACED) {
-- vtotal = var->upper_margin + var->yres + var->lower_margin +
-- var->vsync_len;
-+ vtotal += var->yres;
- vtotal <<= 1;
- } else if((var->vmode & FB_VMODE_MASK) == FB_VMODE_DOUBLE) {
-- vtotal = var->upper_margin + var->yres + var->lower_margin +
-- var->vsync_len;
-+ vtotal += var->yres;
- vtotal <<= 2;
- } else if((var->vmode & FB_VMODE_MASK) == FB_VMODE_INTERLACED) {
-- vtotal = var->upper_margin + (var->yres/2) + var->lower_margin +
-- var->vsync_len;
-- } else vtotal = var->upper_margin + var->yres + var->lower_margin +
-- var->vsync_len;
-+ vtotal += var->yres;
-+ vtotal <<= 1;
-+ } else vtotal += var->yres;
-
- if(!(htotal) || !(vtotal)) {
- DPRINTK("sisfb: Invalid 'var' information\n");
- return -EINVAL;
- }
-
-- if(var->pixclock && htotal && vtotal) {
-- drate = 1E12 / var->pixclock;
-+ if(pixclock && htotal && vtotal) {
-+ drate = 1E12 / pixclock;
- hrate = drate / htotal;
- ivideo.refresh_rate = (unsigned int) (hrate / vtotal * 2 + 0.5);
- } else ivideo.refresh_rate = 60;
-
-- /* TW: Calculation wrong for 1024x600 - force it to 60Hz */
-- if((var->xres == 1024) && (var->yres == 600)) ivideo.refresh_rate = 60;
--
-+#if 0
- printk(KERN_DEBUG "sisfb: Change mode to %dx%dx%d-%dHz\n",
- var->xres,var->yres,var->bits_per_pixel,ivideo.refresh_rate);
-+#endif
-
- old_mode = sisfb_mode_idx;
- sisfb_mode_idx = 0;
-@@ -678,7 +1085,7 @@ static int sisfb_do_set_var(struct fb_va
- }
-
- if(found_mode)
-- sisfb_mode_idx = sisfb_validate_mode(sisfb_mode_idx);
-+ sisfb_mode_idx = sisfb_validate_mode(sisfb_mode_idx, ivideo.currentvbflags);
- else
- sisfb_mode_idx = -1;
-
-@@ -689,12 +1096,21 @@ static int sisfb_do_set_var(struct fb_va
- return -EINVAL;
- }
-
-- if(sisfb_search_refresh_rate(ivideo.refresh_rate) == 0) {
-+ if(sisfb_search_refresh_rate(ivideo.refresh_rate, sisfb_mode_idx) == 0) {
- sisfb_rate_idx = sisbios_mode[sisfb_mode_idx].rate_idx;
- ivideo.refresh_rate = 60;
- }
-
- #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+ if(sisfb_thismonitor.datavalid) {
-+ if(!sisfb_verify_rate(&sisfb_thismonitor, sisfb_mode_idx,
-+ sisfb_rate_idx, ivideo.refresh_rate)) {
-+ printk(KERN_INFO "sisfb: WARNING: Refresh rate exceeds monitor specs!\n");
-+ }
-+ }
-+#endif
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
- if(((var->activate & FB_ACTIVATE_MASK) == FB_ACTIVATE_NOW) && isactive) {
- #else
- if(isactive) {
-@@ -707,15 +1123,7 @@ static int sisfb_do_set_var(struct fb_va
- }
-
- outSISIDXREG(SISSR, IND_SIS_PASSWORD, SIS_PASSWORD);
--
-- sisfb_post_setmode();
--
-- DPRINTK("sisfb: Set new mode: %dx%dx%d-%d \n",
-- sisbios_mode[sisfb_mode_idx].xres,
-- sisbios_mode[sisfb_mode_idx].yres,
-- sisbios_mode[sisfb_mode_idx].bpp,
-- ivideo.refresh_rate);
--
-+
- ivideo.video_bpp = sisbios_mode[sisfb_mode_idx].bpp;
- ivideo.video_vwidth = ivideo.video_width = sisbios_mode[sisfb_mode_idx].xres;
- ivideo.video_vheight = ivideo.video_height = sisbios_mode[sisfb_mode_idx].yres;
-@@ -725,54 +1133,39 @@ static int sisfb_do_set_var(struct fb_va
- if(sisfb_accel) {
- ivideo.accel = (var->accel_flags & FB_ACCELF_TEXT) ? -1 : 0;
- }
-- switch(ivideo.video_bpp) {
-- case 8:
-- ivideo.DstColor = 0x0000;
-- ivideo.SiS310_AccelDepth = 0x00000000;
-- ivideo.video_cmap_len = 256;
-- break;
-- case 16:
-- ivideo.DstColor = 0x8000;
-- ivideo.SiS310_AccelDepth = 0x00010000;
-- ivideo.video_cmap_len = 16;
-- break;
-- case 32:
-- ivideo.DstColor = 0xC000;
-- ivideo.SiS310_AccelDepth = 0x00020000;
-- ivideo.video_cmap_len = 16;
-- break;
-- default:
-- ivideo.video_cmap_len = 16;
-- printk(KERN_ERR "sisfb: Unsupported depth %d", ivideo.video_bpp);
-- ivideo.accel = 0;
-- break;
-- }
-+
-+ sisfb_set_vparms();
-+
-+ ivideo.current_width = ivideo.video_width;
-+ ivideo.current_height = ivideo.video_height;
-+ ivideo.current_bpp = ivideo.video_bpp;
-+ ivideo.current_htotal = htotal;
-+ ivideo.current_vtotal = vtotal;
-+ ivideo.current_pixclock = var->pixclock;
-+ ivideo.current_refresh_rate = ivideo.refresh_rate;
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
-+ sisfb_lastrates[sisfb_mode_no] = ivideo.refresh_rate;
-+#endif
-+
-+ sisfb_post_setmode();
-
- }
-- TWDEBUG("End of do_set_var");
- return 0;
- }
-
--#ifdef SISFB_PAN
- static int sisfb_pan_var(struct fb_var_screeninfo *var)
- {
- unsigned int base;
-
-- TWDEBUG("Inside pan_var");
--
- if (var->xoffset > (var->xres_virtual - var->xres)) {
-- printk(KERN_INFO "Pan: xo: %d xv %d xr %d\n",
-- var->xoffset, var->xres_virtual, var->xres);
- return -EINVAL;
- }
- if(var->yoffset > (var->yres_virtual - var->yres)) {
-- printk(KERN_INFO "Pan: yo: %d yv %d yr %d\n",
-- var->yoffset, var->yres_virtual, var->yres);
- return -EINVAL;
-- }
--
-- base = var->yoffset * var->xres_virtual + var->xoffset;
--
-+ }
-+
-+ base = var->yoffset * var->xres_virtual + var->xoffset;
-+
- /* calculate base bpp dep. */
- switch(var->bits_per_pixel) {
- case 16:
-@@ -794,7 +1187,7 @@ static int sisfb_pan_var(struct fb_var_s
- if(sisvga_engine == SIS_315_VGA) {
- setSISIDXREG(SISSR, 0x37, 0xFE, (base >> 24) & 0x01);
- }
-- if(ivideo.disp_state & DISPTYPE_DISP2) {
-+ if(ivideo.currentvbflags & VB_DISPTYPE_DISP2) {
- orSISIDXREG(SISPART1, sisfb_CRT2_write_enable, 0x01);
- outSISIDXREG(SISPART1, 0x06, (base & 0xFF));
- outSISIDXREG(SISPART1, 0x05, ((base >> 8) & 0xFF));
-@@ -803,10 +1196,8 @@ static int sisfb_pan_var(struct fb_var_s
- setSISIDXREG(SISPART1, 0x02, 0x7F, ((base >> 24) & 0x01) << 7);
- }
- }
-- TWDEBUG("End of pan_var");
- return 0;
- }
--#endif
-
- static void sisfb_bpp_to_var(struct fb_var_screeninfo *var)
- {
-@@ -843,22 +1234,24 @@ static void sisfb_bpp_to_var(struct fb_v
-
- void sis_dispinfo(struct ap_data *rec)
- {
-- rec->minfo.bpp = ivideo.video_bpp;
-- rec->minfo.xres = ivideo.video_width;
-- rec->minfo.yres = ivideo.video_height;
-- rec->minfo.v_xres = ivideo.video_vwidth;
-- rec->minfo.v_yres = ivideo.video_vheight;
-- rec->minfo.org_x = ivideo.org_x;
-- rec->minfo.org_y = ivideo.org_y;
-- rec->minfo.vrate = ivideo.refresh_rate;
-- rec->iobase = ivideo.vga_base - 0x30;
-- rec->mem_size = ivideo.video_size;
-- rec->disp_state = ivideo.disp_state;
-- rec->version = (VER_MAJOR << 24) | (VER_MINOR << 16) | VER_LEVEL;
-- rec->hasVB = ivideo.hasVB;
-- rec->TV_type = ivideo.TV_type;
-- rec->TV_plug = ivideo.TV_plug;
-- rec->chip = ivideo.chip;
-+ rec->minfo.bpp = ivideo.video_bpp;
-+ rec->minfo.xres = ivideo.video_width;
-+ rec->minfo.yres = ivideo.video_height;
-+ rec->minfo.v_xres = ivideo.video_vwidth;
-+ rec->minfo.v_yres = ivideo.video_vheight;
-+ rec->minfo.org_x = ivideo.org_x;
-+ rec->minfo.org_y = ivideo.org_y;
-+ rec->minfo.vrate = ivideo.refresh_rate;
-+ rec->iobase = ivideo.vga_base - 0x30;
-+ rec->mem_size = ivideo.video_size;
-+ rec->disp_state = ivideo.disp_state;
-+ rec->version = (VER_MAJOR << 24) | (VER_MINOR << 16) | VER_LEVEL;
-+ rec->hasVB = ivideo.hasVB;
-+ rec->TV_type = ivideo.TV_type;
-+ rec->TV_plug = ivideo.TV_plug;
-+ rec->chip = ivideo.chip;
-+ rec->vbflags = ivideo.vbflags;
-+ rec->currentvbflags = ivideo.currentvbflags;
- }
-
- /* ------------ FBDev related routines for 2.4 series ----------- */
-@@ -873,7 +1266,6 @@ static void sisfb_crtc_to_var(struct fb_
- int A, B, C, D, E, F, temp;
- double hrate, drate;
-
-- TWDEBUG("Inside crtc_to_var");
- inSISIDXREG(SISSR, IND_SIS_COLOR_MODE, sr_data);
-
- if (sr_data & SIS_INTERLACED_MODE)
-@@ -921,6 +1313,8 @@ static void sisfb_crtc_to_var(struct fb_
-
- inSISIDXREG(SISCR, 0x09, cr_data3);
-
-+ if(cr_data3 & 0x80) var->vmode = FB_VMODE_DOUBLE;
-+
- VBS = (cr_data & 0xff) | ((u16) (cr_data2 & 0x08) << 5) |
- ((u16) (cr_data3 & 0x20) << 4) | ((u16) (sr_data & 0x04) << 8);
-
-@@ -939,26 +1333,22 @@ static void sisfb_crtc_to_var(struct fb_
- D = B - F - C;
-
- var->yres = E;
--#ifndef SISFB_PAN
-- var->yres_virtual = E;
--#endif
-- /* TW: We have to report the physical dimension to the console! */
-+ var->upper_margin = D;
-+ var->lower_margin = F;
-+ var->vsync_len = C;
-+
- if ((var->vmode & FB_VMODE_MASK) == FB_VMODE_INTERLACED) {
- var->yres <<= 1;
--#ifndef SISFB_PAN
-- var->yres_virtual <<= 1;
--#endif
-+ var->upper_margin <<= 1;
-+ var->lower_margin <<= 1;
-+ var->vsync_len <<= 1;
- } else if ((var->vmode & FB_VMODE_MASK) == FB_VMODE_DOUBLE) {
- var->yres >>= 1;
--#ifndef SISFB_PAN
-- var->yres_virtual >>= 1;
--#endif
-+ var->upper_margin >>= 1;
-+ var->lower_margin >>= 1;
-+ var->vsync_len >>= 1;
- }
-
-- var->upper_margin = D;
-- var->lower_margin = F;
-- var->vsync_len = C;
--
- inSISIDXREG(SISSR, 0x0b, sr_data);
-
- inSISIDXREG(SISCR, 0x00, cr_data);
-@@ -999,10 +1389,20 @@ static void sisfb_crtc_to_var(struct fb_
- D = B - F - C;
-
- var->xres = var->xres_virtual = E * 8;
-- var->left_margin = D * 8;
-- var->right_margin = F * 8;
-- var->hsync_len = C * 8;
-
-+ if((var->xres == 320) &&
-+ (var->yres == 200 || var->yres == 240)) {
-+ /* Terrible hack, but the correct CRTC data for
-+ * these modes only produces a black screen...
-+ */
-+ var->left_margin = (400 - 376);
-+ var->right_margin = (328 - 320);
-+ var->hsync_len = (376 - 328);
-+ } else {
-+ var->left_margin = D * 8;
-+ var->right_margin = F * 8;
-+ var->hsync_len = C * 8;
-+ }
- var->activate = FB_ACTIVATE_NOW;
-
- var->sync = 0;
-@@ -1022,21 +1422,21 @@ static void sisfb_crtc_to_var(struct fb_
- VT <<= 1;
- HT = (HT + 5) * 8;
-
-+ if ((var->vmode & FB_VMODE_MASK) == FB_VMODE_INTERLACED) {
-+ VT <<= 1;
-+ }
- hrate = (double) ivideo.refresh_rate * (double) VT / 2;
- drate = hrate * HT;
- var->pixclock = (u32) (1E12 / drate);
-
--#ifdef SISFB_PAN
- if(sisfb_ypan) {
- var->yres_virtual = ivideo.heapstart / (var->xres * (var->bits_per_pixel >> 3));
- if(var->yres_virtual <= var->yres) {
- var->yres_virtual = var->yres;
- }
- } else
--#endif
-- var->yres_virtual = var->yres;
-+ var->yres_virtual = var->yres;
-
-- TWDEBUG("end of crtc_to_var");
- }
-
- static int sis_getcolreg(unsigned regno, unsigned *red, unsigned *green, unsigned *blue,
-@@ -1069,7 +1469,7 @@ static int sisfb_setcolreg(unsigned regn
- outSISREG(SISDACD, (red >> 10));
- outSISREG(SISDACD, (green >> 10));
- outSISREG(SISDACD, (blue >> 10));
-- if (ivideo.disp_state & DISPTYPE_DISP2) {
-+ if (ivideo.currentvbflags & VB_DISPTYPE_DISP2) {
- outSISREG(SISDAC2A, regno);
- outSISREG(SISDAC2D, (red >> 8));
- outSISREG(SISDAC2D, (green >> 8));
-@@ -1118,7 +1518,7 @@ static void sisfb_set_disp(int con, stru
- display->ywrapstep = fix.ywrapstep;
- display->line_length = fix.line_length;
- display->next_line = fix.line_length;
-- display->can_soft_blank = 0;
-+ display->can_soft_blank = 1;
- display->inverse = sisfb_inverse;
- display->var = *var;
-
-@@ -1162,17 +1562,12 @@ static void sisfb_set_disp(int con, stru
- display->dispsw = &sisfb_sw;
- restore_flags(flags);
-
--#ifdef SISFB_PAN
-- if((ivideo.accel) && (sisfb_ypan)) {
-- /* display->scrollmode = SCROLL_YPAN; - not defined */
-+ if(sisfb_ypan) {
-+ /* display->scrollmode = 0; */
- } else {
- display->scrollmode = SCROLL_YREDRAW;
- sisfb_sw.bmove = fbcon_redraw_bmove;
- }
--#else
-- display->scrollmode = SCROLL_YREDRAW;
-- sisfb_sw.bmove = fbcon_redraw_bmove;
--#endif
- }
-
- static void sisfb_do_install_cmap(int con, struct fb_info *info)
-@@ -1191,17 +1586,16 @@ static void sisfb_do_install_cmap(int co
- static int sisfb_get_var(struct fb_var_screeninfo *var, int con,
- struct fb_info *info)
- {
-- TWDEBUG("inside get_var");
- if(con == -1)
- memcpy(var, &default_var, sizeof(struct fb_var_screeninfo));
- else
- *var = fb_display[con].var;
-
-- /* For FSTN, DSTN */
-- if (var->xres == 320 && var->yres == 480)
-+ if(sisfb_fstn) {
-+ if (var->xres == 320 && var->yres == 480)
- var->yres = 240;
--
-- TWDEBUG("end of get_var");
-+ }
-+
- return 0;
- }
-
-@@ -1211,8 +1605,6 @@ static int sisfb_set_var(struct fb_var_s
- int err;
- unsigned int cols, rows;
-
-- TWDEBUG("inside set_var");
--
- fb_display[con].var.activate = FB_ACTIVATE_NOW;
- if(sisfb_do_set_var(var, con == currcon, info)) {
- sisfb_crtc_to_var(var);
-@@ -1233,16 +1625,17 @@ static int sisfb_set_var(struct fb_var_s
-
- cols = sisbios_mode[sisfb_mode_idx].cols;
- rows = sisbios_mode[sisfb_mode_idx].rows;
-- vc_resize_con(rows, cols, fb_display[con].conp->vc_num);
-+#if 0
-+ /* Why was this called here? */
-+ vc_resize_con(rows, cols, fb_display[con].conp->vc_num);
-+#endif
-
-- TWDEBUG("end of set_var");
- return 0;
- }
-
- static int sisfb_get_cmap(struct fb_cmap *cmap, int kspc, int con,
- struct fb_info *info)
- {
-- TWDEBUG("inside get_cmap");
- if (con == currcon)
- return fb_get_cmap(cmap, kspc, sis_getcolreg, info);
-
-@@ -1251,7 +1644,6 @@ static int sisfb_get_cmap(struct fb_cmap
- else
- fb_copy_cmap(fb_default_cmap(ivideo.video_cmap_len), cmap, kspc ? 0 : 2);
-
-- TWDEBUG("end of get_cmap");
- return 0;
- }
-
-@@ -1260,7 +1652,6 @@ static int sisfb_set_cmap(struct fb_cmap
- {
- int err;
-
-- TWDEBUG("inside set_cmap");
- if (!fb_display[con].cmap.len) {
- err = fb_alloc_cmap(&fb_display[con].cmap, ivideo.video_cmap_len, 0);
- if (err)
-@@ -1272,17 +1663,15 @@ static int sisfb_set_cmap(struct fb_cmap
-
- else
- fb_copy_cmap(cmap, &fb_display[con].cmap, kspc ? 0 : 1);
-- TWDEBUG("end of set_cmap");
-+
- return 0;
- }
-
--#ifdef SISFB_PAN
- static int sisfb_pan_display(struct fb_var_screeninfo *var, int con,
- struct fb_info* info)
- {
- int err;
--
-- TWDEBUG("inside pan_display");
-+
- if (var->vmode & FB_VMODE_YWRAP) {
- if (var->yoffset < 0 || var->yoffset >= fb_display[con].var.yres_virtual || var->xoffset)
- return -EINVAL;
-@@ -1303,10 +1692,8 @@ static int sisfb_pan_display(struct fb_v
- else
- fb_display[con].var.vmode &= ~FB_VMODE_YWRAP;
-
-- TWDEBUG("end of pan_display");
- return 0;
- }
--#endif
-
- static int sisfb_mmap(struct fb_info *info, struct file *file,
- struct vm_area_struct *vma)
-@@ -1316,7 +1703,6 @@ static int sisfb_mmap(struct fb_info *in
- unsigned long off;
- u32 len, mmio_off;
-
-- TWDEBUG("inside mmap");
- if(vma->vm_pgoff > (~0UL >> PAGE_SHIFT)) return -EINVAL;
-
- off = vma->vm_pgoff << PAGE_SHIFT;
-@@ -1355,7 +1741,6 @@ static int sisfb_mmap(struct fb_info *in
- vma->vm_page_prot))
- return -EAGAIN;
-
-- TWDEBUG("end of mmap");
- return 0;
- }
-
-@@ -1368,7 +1753,6 @@ static void sis_get_glyph(struct fb_info
- u8 *gbuf = gly->gmask;
- int size;
-
-- TWDEBUG("Inside get_glyph");
- gly->fontheight = fontheight(p);
- gly->fontwidth = fontwidth(p);
- widthb = (fontwidth(p) + 7) / 8;
-@@ -1382,16 +1766,11 @@ static void sis_get_glyph(struct fb_info
- size = fontheight(p) * widthb;
- memcpy(gbuf, cdat, size);
- gly->ngmask = size;
-- TWDEBUG("End of get_glyph");
- }
-
- static int sisfb_update_var(int con, struct fb_info *info)
- {
--#ifdef SISFB_PAN
- return(sisfb_pan_var(&fb_display[con].var));
--#else
-- return 0;
--#endif
- }
-
- static int sisfb_switch(int con, struct fb_info *info)
-@@ -1428,157 +1807,37 @@ static int sisfb_switch(int con, struct
-
- static void sisfb_blank(int blank, struct fb_info *info)
- {
-- u8 reg;
-+ sisfb_myblank(blank);
-+}
-+#endif
-
-- inSISIDXREG(SISCR, 0x17, reg);
-+/* ------------ FBDev related routines for 2.5 series ----------- */
-
-- if(blank > 0)
-- reg &= 0x7f;
-- else
-- reg |= 0x80;
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
-
-- outSISIDXREG(SISCR, 0x17, reg);
-- outSISIDXREG(SISSR, 0x00, 0x01); /* Synchronous Reset */
-- outSISIDXREG(SISSR, 0x00, 0x03); /* End Reset */
-- printk(KERN_DEBUG "sisfb_blank() called (%d)\n", blank);
-+static int sisfb_open(struct fb_info *info, int user)
-+{
-+ return 0;
- }
-
-+static int sisfb_release(struct fb_info *info, int user)
-+{
-+ return 0;
-+}
-
--static int sisfb_ioctl(struct inode *inode, struct file *file,
-- unsigned int cmd, unsigned long arg, int con,
-- struct fb_info *info)
-+static int sisfb_get_cmap_len(const struct fb_var_screeninfo *var)
- {
-- TWDEBUG("inside ioctl");
-- switch (cmd) {
-- case FBIO_ALLOC:
-- if (!capable(CAP_SYS_RAWIO))
-- return -EPERM;
-- sis_malloc((struct sis_memreq *) arg);
-- break;
-- case FBIO_FREE:
-- if (!capable(CAP_SYS_RAWIO))
-- return -EPERM;
-- sis_free(*(unsigned long *) arg);
-+ int rc = 16;
-+
-+ switch(var->bits_per_pixel) {
-+ case 8:
-+ rc = 256;
- break;
-- case FBIOGET_GLYPH:
-- sis_get_glyph(info,(SIS_GLYINFO *) arg);
-- break;
-- case FBIOGET_HWCINFO:
-- {
-- unsigned long *hwc_offset = (unsigned long *) arg;
--
-- if (sisfb_caps & HW_CURSOR_CAP)
-- *hwc_offset = sisfb_hwcursor_vbase -
-- (unsigned long) ivideo.video_vbase;
-- else
-- *hwc_offset = 0;
--
-- break;
-- }
-- case FBIOPUT_MODEINFO:
-- {
-- struct mode_info *x = (struct mode_info *)arg;
--
-- ivideo.video_bpp = x->bpp;
-- ivideo.video_width = x->xres;
-- ivideo.video_height = x->yres;
-- ivideo.video_vwidth = x->v_xres;
-- ivideo.video_vheight = x->v_yres;
-- ivideo.org_x = x->org_x;
-- ivideo.org_y = x->org_y;
-- ivideo.refresh_rate = x->vrate;
-- ivideo.video_linelength = ivideo.video_vwidth * (ivideo.video_bpp >> 3);
-- switch(ivideo.video_bpp) {
-- case 8:
-- ivideo.DstColor = 0x0000;
-- ivideo.SiS310_AccelDepth = 0x00000000;
-- ivideo.video_cmap_len = 256;
-- break;
-- case 16:
-- ivideo.DstColor = 0x8000;
-- ivideo.SiS310_AccelDepth = 0x00010000;
-- ivideo.video_cmap_len = 16;
-- break;
-- case 32:
-- ivideo.DstColor = 0xC000;
-- ivideo.SiS310_AccelDepth = 0x00020000;
-- ivideo.video_cmap_len = 16;
-- break;
-- default:
-- ivideo.video_cmap_len = 16;
-- printk(KERN_ERR "sisfb: Unsupported depth %d", ivideo.video_bpp);
-- ivideo.accel = 0;
-- break;
-- }
--
-- break;
-- }
-- case FBIOGET_DISPINFO:
-- sis_dispinfo((struct ap_data *)arg);
-- break;
-- case SISFB_GET_INFO: /* TW: New for communication with X driver */
-- {
-- sisfb_info *x = (sisfb_info *)arg;
--
-- x->sisfb_id = SISFB_ID;
-- x->sisfb_version = VER_MAJOR;
-- x->sisfb_revision = VER_MINOR;
-- x->sisfb_patchlevel = VER_LEVEL;
-- x->chip_id = ivideo.chip_id;
-- x->memory = ivideo.video_size / 1024;
-- x->heapstart = ivideo.heapstart / 1024;
-- x->fbvidmode = sisfb_mode_no;
-- x->sisfb_caps = sisfb_caps;
-- x->sisfb_tqlen = 512; /* yet unused */
-- x->sisfb_pcibus = ivideo.pcibus;
-- x->sisfb_pcislot = ivideo.pcislot;
-- x->sisfb_pcifunc = ivideo.pcifunc;
-- x->sisfb_lcdpdc = sisfb_detectedpdc;
-- x->sisfb_lcda = sisfb_detectedlcda;
-- break;
-- }
-- case SISFB_GET_VBRSTATUS:
-- {
-- unsigned long *vbrstatus = (unsigned long *) arg;
-- if(sisfb_CheckVBRetrace()) *vbrstatus = 1;
-- else *vbrstatus = 0;
-- }
-- default:
-- return -EINVAL;
-- }
-- TWDEBUG("end of ioctl");
-- return 0;
--
--}
--#endif
--
--/* ------------ FBDev related routines for 2.5 series ----------- */
--
--#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
--
--static int sisfb_open(struct fb_info *info, int user)
--{
-- return 0;
--}
--
--static int sisfb_release(struct fb_info *info, int user)
--{
-- return 0;
--}
--
--static int sisfb_get_cmap_len(const struct fb_var_screeninfo *var)
--{
-- int rc = 16;
--
-- switch(var->bits_per_pixel) {
-- case 8:
-- rc = 256;
-- break;
-- case 16:
-- rc = 16;
-- break;
-- case 32:
-- rc = 16;
-+ case 16:
-+ rc = 16;
-+ break;
-+ case 32:
-+ rc = 16;
- break;
- }
- return rc;
-@@ -1596,7 +1855,7 @@ static int sisfb_setcolreg(unsigned regn
- outSISREG(SISDACD, (red >> 10));
- outSISREG(SISDACD, (green >> 10));
- outSISREG(SISDACD, (blue >> 10));
-- if (ivideo.disp_state & DISPTYPE_DISP2) {
-+ if (ivideo.currentvbflags & VB_DISPTYPE_DISP2) {
- outSISREG(SISDAC2A, regno);
- outSISREG(SISDAC2D, (red >> 8));
- outSISREG(SISDAC2D, (green >> 8));
-@@ -1622,63 +1881,52 @@ static int sisfb_set_par(struct fb_info
- {
- int err;
-
-- TWDEBUG("inside set_par");
- if((err = sisfb_do_set_var(&info->var, 1, info)))
- return err;
-
- sisfb_get_fix(&info->fix, info->currcon, info);
-
-- TWDEBUG("end of set_par");
- return 0;
- }
-
- static int sisfb_check_var(struct fb_var_screeninfo *var,
- struct fb_info *info)
- {
-- unsigned int htotal =
-- var->left_margin + var->xres + var->right_margin +
-- var->hsync_len;
-- unsigned int vtotal = 0;
-+ unsigned int htotal = 0, vtotal = 0, myrateindex = 0;
- double drate = 0, hrate = 0;
- int found_mode = 0;
- int refresh_rate, search_idx;
-+ BOOLEAN recalc_clock = FALSE;
-+ u32 pixclock;
-+
-+ htotal = var->left_margin + var->xres + var->right_margin + var->hsync_len;
-
-- TWDEBUG("Inside check_var");
-+ vtotal = var->upper_margin + var->lower_margin + var->vsync_len;
-+
-+ pixclock = var->pixclock;
-
- if((var->vmode & FB_VMODE_MASK) == FB_VMODE_NONINTERLACED) {
-- vtotal = var->upper_margin + var->yres + var->lower_margin +
-- var->vsync_len;
-+ vtotal += var->yres;
- vtotal <<= 1;
- } else if((var->vmode & FB_VMODE_MASK) == FB_VMODE_DOUBLE) {
-- vtotal = var->upper_margin + var->yres + var->lower_margin +
-- var->vsync_len;
-+ vtotal += var->yres;
- vtotal <<= 2;
- } else if((var->vmode & FB_VMODE_MASK) == FB_VMODE_INTERLACED) {
-- vtotal = var->upper_margin + (var->yres/2) + var->lower_margin +
-- var->vsync_len;
-- } else vtotal = var->upper_margin + var->yres + var->lower_margin +
-- var->vsync_len;
-+ vtotal += var->yres;
-+ vtotal <<= 1;
-+ } else vtotal += var->yres;
-
- if(!(htotal) || !(vtotal)) {
- SISFAIL("sisfb: no valid timing data");
- }
-
-- if((var->pixclock) && (htotal)) {
-- drate = 1E12 / var->pixclock;
-- hrate = drate / htotal;
-- refresh_rate = (unsigned int) (hrate / vtotal * 2 + 0.5);
-- } else refresh_rate = 60;
--
-- /* TW: Calculation wrong for 1024x600 - force it to 60Hz */
-- if((var->xres == 1024) && (var->yres == 600)) refresh_rate = 60;
--
- search_idx = 0;
- while( (sisbios_mode[search_idx].mode_no != 0) &&
- (sisbios_mode[search_idx].xres <= var->xres) ) {
- if( (sisbios_mode[search_idx].xres == var->xres) &&
- (sisbios_mode[search_idx].yres == var->yres) &&
- (sisbios_mode[search_idx].bpp == var->bits_per_pixel)) {
-- if(sisfb_validate_mode(search_idx) > 0) {
-+ if(sisfb_validate_mode(search_idx, ivideo.currentvbflags) > 0) {
- found_mode = 1;
- break;
- }
-@@ -1687,38 +1935,95 @@ static int sisfb_check_var(struct fb_var
- }
-
- if(!found_mode) {
--
-- printk(KERN_ERR "sisfb: %dx%dx%d is no valid mode\n",
-- var->xres, var->yres, var->bits_per_pixel);
--
-+
- search_idx = 0;
- while(sisbios_mode[search_idx].mode_no != 0) {
--
- if( (var->xres <= sisbios_mode[search_idx].xres) &&
-- (var->yres <= sisbios_mode[search_idx].yres) &&
-+ (var->yres <= sisbios_mode[search_idx].yres) &&
- (var->bits_per_pixel == sisbios_mode[search_idx].bpp) ) {
-- if(sisfb_validate_mode(search_idx) > 0) {
-+ if(sisfb_validate_mode(search_idx, ivideo.currentvbflags) > 0) {
- found_mode = 1;
- break;
- }
- }
- search_idx++;
-- }
-+ }
- if(found_mode) {
-+ printk(KERN_DEBUG "sisfb: Adapted from %dx%dx%d to %dx%dx%d\n",
-+ var->xres, var->yres, var->bits_per_pixel,
-+ sisbios_mode[search_idx].xres,
-+ sisbios_mode[search_idx].yres,
-+ var->bits_per_pixel);
- var->xres = sisbios_mode[search_idx].xres;
- var->yres = sisbios_mode[search_idx].yres;
-- printk(KERN_DEBUG "sisfb: Adapted to mode %dx%dx%d\n",
-- var->xres, var->yres, var->bits_per_pixel);
--
-+
-+
- } else {
-- printk(KERN_ERR "sisfb: Failed to find similar mode to %dx%dx%d\n",
-+ printk(KERN_ERR "sisfb: Failed to find supported mode near %dx%dx%d\n",
- var->xres, var->yres, var->bits_per_pixel);
- return -EINVAL;
- }
- }
-
-- /* TW: TODO: Check the refresh rate */
--
-+ if( ((ivideo.vbflags & VB_LVDS) || /* Slave modes on LVDS and 301B-DH */
-+ ((ivideo.vbflags & VB_30xBDH) && (ivideo.currentvbflags & CRT2_LCD))) &&
-+ (var->bits_per_pixel == 8) ) {
-+ refresh_rate = 60;
-+ recalc_clock = TRUE;
-+ } else if( (ivideo.current_htotal == htotal) && /* x=x & y=y & c=c -> assume depth change */
-+ (ivideo.current_vtotal == vtotal) &&
-+ (ivideo.current_pixclock == pixclock) ) {
-+ drate = 1E12 / pixclock;
-+ hrate = drate / htotal;
-+ refresh_rate = (unsigned int) (hrate / vtotal * 2 + 0.5);
-+ } else if( ( (ivideo.current_htotal != htotal) || /* x!=x | y!=y & c=c -> invalid pixclock */
-+ (ivideo.current_vtotal != vtotal) ) &&
-+ (ivideo.current_pixclock == var->pixclock) ) {
-+ if(sisfb_lastrates[sisbios_mode[search_idx].mode_no]) {
-+ refresh_rate = sisfb_lastrates[sisbios_mode[search_idx].mode_no];
-+ } else if(sisfb_parm_rate != -1) {
-+ refresh_rate = sisfb_parm_rate;
-+ } else {
-+ refresh_rate = 60;
-+ }
-+ recalc_clock = TRUE;
-+ } else if((pixclock) && (htotal) && (vtotal)) {
-+ drate = 1E12 / pixclock;
-+ hrate = drate / htotal;
-+ refresh_rate = (unsigned int) (hrate / vtotal * 2 + 0.5);
-+ } else if(ivideo.current_refresh_rate) {
-+ refresh_rate = ivideo.current_refresh_rate;
-+ recalc_clock = TRUE;
-+ } else {
-+ refresh_rate = 60;
-+ recalc_clock = TRUE;
-+ }
-+
-+ myrateindex = sisfb_search_refresh_rate(refresh_rate, search_idx);
-+
-+ /* Eventually recalculate timing and clock */
-+ if(recalc_clock) {
-+ if(!myrateindex) myrateindex = sisbios_mode[search_idx].rate_idx;
-+ var->pixclock = (u32) (1E12 / sisfb_mode_rate_to_dclock(&SiS_Pr, &sishw_ext,
-+ sisbios_mode[search_idx].mode_no, myrateindex));
-+ sisfb_mode_rate_to_ddata(&SiS_Pr, &sishw_ext,
-+ sisbios_mode[search_idx].mode_no, myrateindex,
-+ &var->left_margin, &var->right_margin,
-+ &var->upper_margin, &var->lower_margin,
-+ &var->hsync_len, &var->vsync_len,
-+ &var->sync, &var->vmode);
-+ if((var->vmode & FB_VMODE_MASK) == FB_VMODE_DOUBLE) {
-+ var->pixclock <<= 1;
-+ }
-+ }
-+
-+ if(sisfb_thismonitor.datavalid) {
-+ if(!sisfb_verify_rate(&sisfb_thismonitor, search_idx,
-+ myrateindex, refresh_rate)) {
-+ printk(KERN_INFO "sisfb: WARNING: Refresh rate exceeds monitor specs!\n");
-+ }
-+ }
-+
- /* Adapt RGB settings */
- sisfb_bpp_to_var(var);
-
-@@ -1731,18 +2036,20 @@ static int sisfb_check_var(struct fb_var
- /* Horiz-panning not supported */
- if(var->xres != var->xres_virtual)
- var->xres_virtual = var->xres;
--
-- if(!sisfb_ypan) {
-- if(var->yres != var->yres_virtual)
-- var->yres_virtual = var->yres;
-- } else {
-+
-+ if(sisfb_ypan) {
- /* TW: Now patch yres_virtual if we use panning */
- /* *** May I do this? *** */
- var->yres_virtual = ivideo.heapstart / (var->xres * (var->bits_per_pixel >> 3));
-- if(var->yres_virtual <= var->yres) {
-+ if(var->yres_virtual <= var->yres) {
- /* TW: Paranoia check */
- var->yres_virtual = var->yres;
-- }
-+ }
-+ } else {
-+ if(var->yres != var->yres_virtual)
-+ var->yres_virtual = var->yres;
-+ var->xoffset = 0;
-+ var->yoffset = 0;
- }
-
- /* Truncate offsets to maximum if too high */
-@@ -1757,28 +2064,25 @@ static int sisfb_check_var(struct fb_var
- var->green.msb_right =
- var->blue.msb_right =
- var->transp.offset = var->transp.length = var->transp.msb_right = 0;
--
-- TWDEBUG("end of check_var");
-+
- return 0;
- }
-
--#ifdef SISFB_PAN
- static int sisfb_pan_display(struct fb_var_screeninfo *var,
- struct fb_info* info)
- {
- int err;
--
-- TWDEBUG("inside pan_display");
--
-+
- if (var->xoffset > (var->xres_virtual - var->xres))
- return -EINVAL;
- if (var->yoffset > (var->yres_virtual - var->yres))
- return -EINVAL;
-
- if (var->vmode & FB_VMODE_YWRAP) {
-- if (var->yoffset < 0
-- || var->yoffset >= info->var.yres_virtual
-- || var->xoffset) return -EINVAL;
-+ if (var->yoffset < 0 ||
-+ var->yoffset >= info->var.yres_virtual ||
-+ var->xoffset)
-+ return -EINVAL;
- } else {
- if (var->xoffset + info->var.xres > info->var.xres_virtual ||
- var->yoffset + info->var.yres > info->var.yres_virtual)
-@@ -1794,10 +2098,8 @@ static int sisfb_pan_display(struct fb_v
- else
- info->var.vmode &= ~FB_VMODE_YWRAP;
-
-- TWDEBUG("end of pan_display");
- return 0;
- }
--#endif
-
- static int sisfb_mmap(struct fb_info *info, struct file *file,
- struct vm_area_struct *vma)
-@@ -1806,7 +2108,6 @@ static int sisfb_mmap(struct fb_info *in
- unsigned long off;
- u32 len, mmio_off;
-
-- TWDEBUG("inside mmap");
- if(vma->vm_pgoff > (~0UL >> PAGE_SHIFT)) return -EINVAL;
-
- off = vma->vm_pgoff << PAGE_SHIFT;
-@@ -1844,139 +2145,141 @@ static int sisfb_mmap(struct fb_info *in
- vma->vm_page_prot))
- return -EAGAIN;
-
-- TWDEBUG("end of mmap");
- return 0;
- }
-
- static int sisfb_blank(int blank, struct fb_info *info)
- {
-- u8 reg;
-+ return(sisfb_myblank(blank));
-+}
-
-- inSISIDXREG(SISCR, 0x17, reg);
-+#endif
-
-- if(blank > 0)
-- reg &= 0x7f;
-- else
-- reg |= 0x80;
-+/* ----------- FBDev related routines for all series ---------- */
-
-- outSISIDXREG(SISCR, 0x17, reg);
-- outSISIDXREG(SISSR, 0x00, 0x01); /* Synchronous Reset */
-- outSISIDXREG(SISSR, 0x00, 0x03); /* End Reset */
-- return(0);
--}
-
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
- static int sisfb_ioctl(struct inode *inode, struct file *file,
-- unsigned int cmd, unsigned long arg,
-+ unsigned int cmd, unsigned long arg,
- struct fb_info *info)
-+#else
-+static int sisfb_ioctl(struct inode *inode, struct file *file,
-+ unsigned int cmd, unsigned long arg, int con,
-+ struct fb_info *info)
-+#endif
- {
-- TWDEBUG("inside ioctl");
-+ struct sis_memreq sismemreq;
-+ struct ap_data sisapdata;
-+ unsigned long sismembase = 0;
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+ SIS_GLYINFO sisglyinfo;
-+#endif
-+
- switch (cmd) {
- case FBIO_ALLOC:
-- if (!capable(CAP_SYS_RAWIO))
-+ if(!capable(CAP_SYS_RAWIO))
- return -EPERM;
-- sis_malloc((struct sis_memreq *) arg);
-+ if(copy_from_user(&sismemreq, (void *)arg, sizeof(sismemreq)))
-+ return -EFAULT;
-+ sis_malloc(&sismemreq);
-+ if(copy_to_user((void *)arg, &sismemreq, sizeof(sismemreq))) {
-+ sis_free(sismemreq.offset);
-+ return -EFAULT;
-+ }
- break;
- case FBIO_FREE:
-- if (!capable(CAP_SYS_RAWIO))
-+ if(!capable(CAP_SYS_RAWIO))
- return -EPERM;
-- sis_free(*(unsigned long *) arg);
-+ if(get_user(sismembase, (unsigned long *) arg))
-+ return -EFAULT;
-+ sis_free(sismembase);
- break;
-- case FBIOGET_HWCINFO:
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+ case FBIOGET_GLYPH:
-+ if(copy_from_user(&sisglyinfo, (void *)arg, sizeof(sisglyinfo)))
-+ return -EFAULT;
-+ sis_get_glyph(info, &sisglyinfo);
-+ break;
-+ case FBIOPUT_MODEINFO:
- {
-- unsigned long *hwc_offset = (unsigned long *) arg;
-+ struct mode_info x;
-
-- if (sisfb_caps & HW_CURSOR_CAP)
-- *hwc_offset = sisfb_hwcursor_vbase -
-- (unsigned long) ivideo.video_vbase;
-- else
-- *hwc_offset = 0;
-+ if(copy_from_user(&x, (void *)arg, sizeof(x)))
-+ return -EFAULT;
-
-+ ivideo.video_bpp = x.bpp;
-+ ivideo.video_width = x.xres;
-+ ivideo.video_height = x.yres;
-+ ivideo.video_vwidth = x.v_xres;
-+ ivideo.video_vheight = x.v_yres;
-+ ivideo.org_x = x.org_x;
-+ ivideo.org_y = x.org_y;
-+ ivideo.refresh_rate = x.vrate;
-+ ivideo.video_linelength = ivideo.video_vwidth * (ivideo.video_bpp >> 3);
-+ sisfb_set_vparms();
- break;
- }
-- case FBIOPUT_MODEINFO:
-+#endif
-+ case FBIOGET_HWCINFO:
- {
-- struct mode_info *x = (struct mode_info *)arg;
-+ unsigned long myhwcoffset = 0;
-
-- ivideo.video_bpp = x->bpp;
-- ivideo.video_width = x->xres;
-- ivideo.video_height = x->yres;
-- ivideo.video_vwidth = x->v_xres;
-- ivideo.video_vheight = x->v_yres;
-- ivideo.org_x = x->org_x;
-- ivideo.org_y = x->org_y;
-- ivideo.refresh_rate = x->vrate;
-- ivideo.video_linelength = ivideo.video_vwidth * (ivideo.video_bpp >> 3);
-- switch(ivideo.video_bpp) {
-- case 8:
-- ivideo.DstColor = 0x0000;
-- ivideo.SiS310_AccelDepth = 0x00000000;
-- ivideo.video_cmap_len = 256;
-- break;
-- case 16:
-- ivideo.DstColor = 0x8000;
-- ivideo.SiS310_AccelDepth = 0x00010000;
-- ivideo.video_cmap_len = 16;
-- break;
-- case 32:
-- ivideo.DstColor = 0xC000;
-- ivideo.SiS310_AccelDepth = 0x00020000;
-- ivideo.video_cmap_len = 16;
-- break;
-- default:
-- ivideo.video_cmap_len = 16;
-- printk(KERN_ERR "sisfb: Unsupported accel depth %d", ivideo.video_bpp);
-- ivideo.accel = 0;
-- break;
-- }
-+ if(sisfb_caps & HW_CURSOR_CAP)
-+ myhwcoffset = sisfb_hwcursor_vbase -
-+ (unsigned long) ivideo.video_vbase;
-+
-+ return put_user(myhwcoffset, (unsigned long *)arg);
-
- break;
- }
- case FBIOGET_DISPINFO:
-- sis_dispinfo((struct ap_data *)arg);
-+ sis_dispinfo(&sisapdata);
-+ if(copy_to_user((void *)arg, &sisapdata, sizeof(sisapdata)))
-+ return -EFAULT;
- break;
-- case SISFB_GET_INFO: /* TW: New for communication with X driver */
-+ case SISFB_GET_INFO: /* New for communication with X driver */
- {
-- sisfb_info *x = (sisfb_info *)arg;
-+ sisfb_info x;
-
-- x->sisfb_id = SISFB_ID;
-- x->sisfb_version = VER_MAJOR;
-- x->sisfb_revision = VER_MINOR;
-- x->sisfb_patchlevel = VER_LEVEL;
-- x->chip_id = ivideo.chip_id;
-- x->memory = ivideo.video_size / 1024;
-- x->heapstart = ivideo.heapstart / 1024;
-- x->fbvidmode = sisfb_mode_no;
-- x->sisfb_caps = sisfb_caps;
-- x->sisfb_tqlen = 512; /* yet unused */
-- x->sisfb_pcibus = ivideo.pcibus;
-- x->sisfb_pcislot = ivideo.pcislot;
-- x->sisfb_pcifunc = ivideo.pcifunc;
-- x->sisfb_lcdpdc = sisfb_detectedpdc;
-- x->sisfb_lcda = sisfb_detectedlcda;
-+ x.sisfb_id = SISFB_ID;
-+ x.sisfb_version = VER_MAJOR;
-+ x.sisfb_revision = VER_MINOR;
-+ x.sisfb_patchlevel = VER_LEVEL;
-+ x.chip_id = ivideo.chip_id;
-+ x.memory = ivideo.video_size / 1024;
-+ x.heapstart = ivideo.heapstart / 1024;
-+ x.fbvidmode = sisfb_mode_no;
-+ x.sisfb_caps = sisfb_caps;
-+ x.sisfb_tqlen = 512; /* yet unused */
-+ x.sisfb_pcibus = ivideo.pcibus;
-+ x.sisfb_pcislot = ivideo.pcislot;
-+ x.sisfb_pcifunc = ivideo.pcifunc;
-+ x.sisfb_lcdpdc = sisfb_detectedpdc;
-+ x.sisfb_lcda = sisfb_detectedlcda;
-+ x.sisfb_vbflags = ivideo.vbflags;
-+ x.sisfb_currentvbflags = ivideo.currentvbflags;
-+ if(copy_to_user((void *)arg, &x, sizeof(x)))
-+ return -EFAULT;
- break;
- }
- case SISFB_GET_VBRSTATUS:
- {
-- unsigned long *vbrstatus = (unsigned long *) arg;
-- if(sisfb_CheckVBRetrace()) *vbrstatus = 1;
-- else *vbrstatus = 0;
-+ if(sisfb_CheckVBRetrace())
-+ return put_user(1UL, (unsigned long *) arg);
-+ else
-+ return put_user(0UL, (unsigned long *) arg);
-+ break;
- }
- default:
- return -EINVAL;
- }
-- TWDEBUG("end of ioctl");
- return 0;
--
- }
-
--#endif
--
--/* ----------- FBDev related routines for all series ---------- */
-
- static int sisfb_get_fix(struct fb_fix_screeninfo *fix, int con,
- struct fb_info *info)
- {
-- TWDEBUG("inside get_fix");
- memset(fix, 0, sizeof(struct fb_fix_screeninfo));
-
- #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-@@ -1987,45 +2290,47 @@ static int sisfb_get_fix(struct fb_fix_s
-
- fix->smem_start = ivideo.video_base;
-
-- /* TW */
- if((!sisfb_mem) || (sisfb_mem > (ivideo.video_size/1024))) {
-- if (ivideo.video_size > 0x1000000) {
-- fix->smem_len = 0xc00000;
-- } else if (ivideo.video_size > 0x800000)
-- fix->smem_len = 0x800000;
-- else
-- fix->smem_len = 0x400000;
-+ if(sisvga_engine == SIS_300_VGA) {
-+ if(ivideo.video_size > 0x1000000) {
-+ fix->smem_len = 0xc00000;
-+ } else if(ivideo.video_size > 0x800000)
-+ fix->smem_len = 0x800000;
-+ else
-+ fix->smem_len = 0x400000;
-+ } else {
-+ fix->smem_len = ivideo.video_size - 0x100000;
-+ }
- } else
- fix->smem_len = sisfb_mem * 1024;
-
-- fix->type = video_type;
-+ fix->type = FB_TYPE_PACKED_PIXELS;
- fix->type_aux = 0;
- if(ivideo.video_bpp == 8)
- fix->visual = FB_VISUAL_PSEUDOCOLOR;
- else
- fix->visual = FB_VISUAL_TRUECOLOR;
- fix->xpanstep = 0;
--#ifdef SISFB_PAN
-+
- if(sisfb_ypan) fix->ypanstep = 1;
--#endif
-+
- fix->ywrapstep = 0;
- fix->line_length = ivideo.video_linelength;
- fix->mmio_start = ivideo.mmio_base;
- fix->mmio_len = sisfb_mmio_size;
- if(sisvga_engine == SIS_300_VGA)
- fix->accel = FB_ACCEL_SIS_GLAMOUR;
-- else if(ivideo.chip == SIS_330)
-+ else if((ivideo.chip == SIS_330) || (ivideo.chip == SIS_660))
- fix->accel = FB_ACCEL_SIS_XABRE;
-- else
-+ else
- fix->accel = FB_ACCEL_SIS_GLAMOUR_2;
--
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
- fix->reserved[0] = ivideo.video_size & 0xFFFF;
- fix->reserved[1] = (ivideo.video_size >> 16) & 0xFFFF;
- fix->reserved[2] = sisfb_caps;
--#endif
-+#endif
-
-- TWDEBUG("end of get_fix");
- return 0;
- }
-
-@@ -2033,17 +2338,15 @@ static int sisfb_get_fix(struct fb_fix_s
-
- #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
- static struct fb_ops sisfb_ops = {
-- owner: THIS_MODULE,
-- fb_get_fix: sisfb_get_fix,
-- fb_get_var: sisfb_get_var,
-- fb_set_var: sisfb_set_var,
-- fb_get_cmap: sisfb_get_cmap,
-- fb_set_cmap: sisfb_set_cmap,
--#ifdef SISFB_PAN
-- fb_pan_display: sisfb_pan_display,
--#endif
-- fb_ioctl: sisfb_ioctl,
-- fb_mmap: sisfb_mmap,
-+ .owner = THIS_MODULE,
-+ .fb_get_fix = sisfb_get_fix,
-+ .fb_get_var = sisfb_get_var,
-+ .fb_set_var = sisfb_set_var,
-+ .fb_get_cmap = sisfb_get_cmap,
-+ .fb_set_cmap = sisfb_set_cmap,
-+ .fb_pan_display = sisfb_pan_display,
-+ .fb_ioctl = sisfb_ioctl,
-+ .fb_mmap = sisfb_mmap,
- };
- #endif
-
-@@ -2056,9 +2359,7 @@ static struct fb_ops sisfb_ops = {
- .fb_check_var = sisfb_check_var,
- .fb_set_par = sisfb_set_par,
- .fb_setcolreg = sisfb_setcolreg,
--#ifdef SISFB_PAN
- .fb_pan_display = sisfb_pan_display,
--#endif
- .fb_blank = sisfb_blank,
- .fb_fillrect = fbcon_sis_fillrect,
- .fb_copyarea = fbcon_sis_copyarea,
-@@ -2106,12 +2407,12 @@ static int sisfb_get_dram_size_300(void)
- } else { /* 540, 630, 730 */
-
- pdev = pci_find_device(PCI_VENDOR_ID_SI, nbridge_id, pdev);
-- if (pdev) {
-+ if (pdev) {
- pci_read_config_byte(pdev, IND_BRI_DRAM_STATUS, &pci_data);
- pci_data = (pci_data & BRI_DRAM_SIZE_MASK) >> 4;
- ivideo.video_size = (unsigned int)(1 << (pci_data+21));
- pdev_valid = 1;
--
-+
- reg = SIS_DATA_BUS_64 << 6;
- switch (pci_data) {
- case BRI_DRAM_SIZE_2MB:
-@@ -2134,174 +2435,13 @@ static int sisfb_get_dram_size_300(void)
- break;
- }
- outSISIDXREG(SISSR, IND_SIS_DRAM_SIZE, reg);
-- }
-+ }
-
- if (!pdev_valid) return -1;
- }
- return 0;
- }
-
--static void sisfb_detect_VB_connect_300()
--{
-- u8 sr16, sr17, cr32, temp;
--
-- ivideo.TV_plug = ivideo.TV_type = 0;
--
-- switch(ivideo.hasVB) {
-- case HASVB_LVDS_CHRONTEL:
-- case HASVB_CHRONTEL:
-- SiS_SenseCh();
-- break;
-- case HASVB_301:
-- case HASVB_302:
-- SiS_Sense30x();
-- break;
-- }
--
-- inSISIDXREG(SISSR, IND_SIS_SCRATCH_REG_17, sr17);
-- inSISIDXREG(SISCR, IND_SIS_SCRATCH_REG_CR32, cr32);
--
-- if ((sr17 & 0x0F) && (ivideo.chip != SIS_300)) {
--
-- if ((sr17 & 0x01) && !sisfb_crt1off)
-- sisfb_crt1off = 0;
-- else {
-- if (sr17 & 0x0E)
-- sisfb_crt1off = 1;
-- else
-- sisfb_crt1off = 0;
-- }
--
-- if (sisfb_crt2type != -1)
-- /* TW: override detected CRT2 type */
-- ivideo.disp_state = sisfb_crt2type;
-- else if (sr17 & 0x04)
-- ivideo.disp_state = DISPTYPE_TV;
-- else if (sr17 & 0x02)
-- ivideo.disp_state = DISPTYPE_LCD;
-- else if (sr17 & 0x08 )
-- ivideo.disp_state = DISPTYPE_CRT2;
-- else
-- ivideo.disp_state = 0;
--
-- if(sisfb_tvplug != -1)
-- /* PR/TW: override detected TV type */
-- ivideo.TV_plug = sisfb_tvplug;
-- else if (sr17 & 0x20)
-- ivideo.TV_plug = TVPLUG_SVIDEO;
-- else if (sr17 & 0x10)
-- ivideo.TV_plug = TVPLUG_COMPOSITE;
--
-- inSISIDXREG(SISSR, IND_SIS_SCRATCH_REG_16, sr16);
-- if (sr16 & 0x20)
-- ivideo.TV_type = TVMODE_PAL;
-- else
-- ivideo.TV_type = TVMODE_NTSC;
--
-- } else {
--
-- if ((cr32 & SIS_CRT1) && !sisfb_crt1off)
-- sisfb_crt1off = 0;
-- else {
-- if (cr32 & 0x5F)
-- sisfb_crt1off = 1;
-- else
-- sisfb_crt1off = 0;
-- }
--
-- if (sisfb_crt2type != -1)
-- /* TW: override detected CRT2 type */
-- ivideo.disp_state = sisfb_crt2type;
-- else if (cr32 & SIS_VB_TV)
-- ivideo.disp_state = DISPTYPE_TV;
-- else if (cr32 & SIS_VB_LCD)
-- ivideo.disp_state = DISPTYPE_LCD;
-- else if (cr32 & SIS_VB_CRT2)
-- ivideo.disp_state = DISPTYPE_CRT2;
-- else
-- ivideo.disp_state = 0;
--
-- /* TW: Detect TV plug & type */
-- if(sisfb_tvplug != -1)
-- /* PR/TW: override with option */
-- ivideo.TV_plug = sisfb_tvplug;
-- else if (cr32 & SIS_VB_HIVISION) {
-- ivideo.TV_type = TVMODE_HIVISION;
-- ivideo.TV_plug = TVPLUG_SVIDEO;
-- }
-- else if (cr32 & SIS_VB_SVIDEO)
-- ivideo.TV_plug = TVPLUG_SVIDEO;
-- else if (cr32 & SIS_VB_COMPOSITE)
-- ivideo.TV_plug = TVPLUG_COMPOSITE;
-- else if (cr32 & SIS_VB_SCART)
-- ivideo.TV_plug = TVPLUG_SCART;
--
-- if (ivideo.TV_type == 0) {
-- inSISIDXREG(SISSR, IND_SIS_POWER_ON_TRAP, temp);
-- if (temp & 0x01)
-- ivideo.TV_type = TVMODE_PAL;
-- else
-- ivideo.TV_type = TVMODE_NTSC;
-- }
--
-- }
--
-- /* TW: Copy forceCRT1 option to CRT1off if option is given */
-- if (sisfb_forcecrt1 != -1) {
-- if(sisfb_forcecrt1) sisfb_crt1off = 0;
-- else sisfb_crt1off = 1;
-- }
--}
--
--static void sisfb_get_VB_type_300(void)
--{
-- u8 reg;
--
-- if(ivideo.chip != SIS_300) {
-- if(!sisfb_has_VB_300()) {
-- inSISIDXREG(SISCR, IND_SIS_SCRATCH_REG_CR37, reg);
-- switch ((reg & SIS_EXTERNAL_CHIP_MASK) >> 1) {
-- case SIS_EXTERNAL_CHIP_LVDS:
-- ivideo.hasVB = HASVB_LVDS;
-- break;
-- case SIS_EXTERNAL_CHIP_TRUMPION:
-- ivideo.hasVB = HASVB_TRUMPION;
-- break;
-- case SIS_EXTERNAL_CHIP_LVDS_CHRONTEL:
-- ivideo.hasVB = HASVB_LVDS_CHRONTEL;
-- break;
-- case SIS_EXTERNAL_CHIP_CHRONTEL:
-- ivideo.hasVB = HASVB_CHRONTEL;
-- break;
-- default:
-- break;
-- }
-- }
-- } else {
-- sisfb_has_VB_300();
-- }
--}
--
--static int sisfb_has_VB_300(void)
--{
-- u8 vb_chipid;
--
-- inSISIDXREG(SISPART4, 0x00, vb_chipid);
-- switch (vb_chipid) {
-- case 0x01:
-- ivideo.hasVB = HASVB_301;
-- break;
-- case 0x02:
-- ivideo.hasVB = HASVB_302;
-- break;
-- default:
-- ivideo.hasVB = HASVB_NONE;
-- return FALSE;
-- }
-- return TRUE;
--
--}
--
- #endif /* CONFIG_FB_SIS_300 */
-
-
-@@ -2314,14 +2454,18 @@ static int sisfb_get_dram_size_315(void)
- u8 pci_data;
- u8 reg = 0;
-
-- if (ivideo.chip == SIS_550 || ivideo.chip == SIS_650 || ivideo.chip == SIS_740) {
-+ if (ivideo.chip == SIS_550 ||
-+ ivideo.chip == SIS_650 ||
-+ ivideo.chip == SIS_740 ||
-+ ivideo.chip == SIS_660) {
-
- #ifdef LINUXBIOS
-
- while ((pdev = pci_find_device(PCI_VENDOR_ID_SI, PCI_ANY_ID, pdev)) != NULL) {
- if ((pdev->device == PCI_DEVICE_ID_SI_550) ||
-- (pdev->device == PCI_DEVICE_ID_SI_650) ||
-- (pdev->device == PCI_DEVICE_ID_SI_740)) {
-+ (pdev->device == PCI_DEVICE_ID_SI_650) ||
-+ (pdev->device == PCI_DEVICE_ID_SI_740) ||
-+ (pdev->device == PCI_DEVICE_ID_SI_660)) {
- pci_read_config_byte(pdev, IND_BRI_DRAM_STATUS,
- &pci_data);
- pci_data = (pci_data & BRI_DRAM_SIZE_MASK) >> 4;
-@@ -2425,7 +2569,7 @@ static int sisfb_get_dram_size_315(void)
- #endif
- return 0;
-
-- } else { /* 315 */
-+ } else { /* 315, 330 */
-
- inSISIDXREG(SISSR, IND_SIS_DRAM_SIZE, reg);
- switch ((reg & SIS315_DRAM_SIZE_MASK) >> 4) {
-@@ -2470,7 +2614,7 @@ static int sisfb_get_dram_size_315(void)
- case SIS315_DUAL_CHANNEL_1_RANK:
- ivideo.video_size <<= 1;
- break;
-- case SIS315_ASYM_DDR: /* TW: DDR asymentric */
-+ case SIS315_ASYM_DDR: /* TW: DDR asymetric */
- ivideo.video_size += (ivideo.video_size/2);
- break;
- }
-@@ -2483,128 +2627,242 @@ static int sisfb_get_dram_size_315(void)
-
- }
-
--static void sisfb_detect_VB_connect_315(void)
-+#endif /* CONFIG_FB_SIS_315 */
-+
-+
-+/* -------------- video bridge detection --------------- */
-+
-+static void sisfb_detect_VB_connect()
- {
-- u8 cr32, temp=0;
-+ u8 sr16, sr17, cr32, temp;
-
-- ivideo.TV_plug = ivideo.TV_type = 0;
-+ if(sisvga_engine == SIS_300_VGA) {
-+
-+ inSISIDXREG(SISSR, IND_SIS_SCRATCH_REG_17, sr17);
-+
-+ if ((sr17 & 0x0F) && (ivideo.chip != SIS_300)) {
-+
-+ /* Old BIOSes store the detected CRT2 type in SR17
-+ * instead of CR32. However, since our detection
-+ * routines store their results to CR32, we now copy
-+ * the remaining bits (for LCD and VGA) to CR32 for
-+ * unified usage.
-+ * SR17[0] CRT1 [1] LCD [2] TV [3] VGA2
-+ * [4] AVIDEO [5] SVIDEO
-+ */
-
-- switch(ivideo.hasVB) {
-- case HASVB_LVDS_CHRONTEL:
-- case HASVB_CHRONTEL:
-- SiS_SenseCh();
-- break;
-- case HASVB_301:
-- case HASVB_302:
-- SiS_Sense30x();
-- break;
-- }
-+#if 0
-+ if (sr17 & 0x01) orSISIDXREG(SISCR, 0x32, SIS_CRT1);
-+ else andSISIDXREG(SISCR, 0x32, ~SIS_CRT1);
-+
-+ if (sr17 & 0x02) orSISIDXREG(SISCR, 0x32, SIS_VB_LCD);
-+ else andSISIDXREG(SISCR, 0x32, ~SIS_VB_LCD);
-+
-+ /* no HiVision and no DVI connector here */
-+ andSISIDXREG(SISCR, 0x32, ~0xc0);
-+#endif
-+
-+ /* PAL/NTSC is stored on SR16 on such machines */
-+ if (!(ivideo.vbflags & (TV_PAL | TV_NTSC))) {
-+ inSISIDXREG(SISSR, IND_SIS_SCRATCH_REG_16, sr16);
-+ if (sr16 & 0x20)
-+ ivideo.vbflags |= TV_PAL;
-+ else
-+ ivideo.vbflags |= TV_NTSC;
-+ }
-
-+ }
-+
-+ }
-+
- inSISIDXREG(SISCR, IND_SIS_SCRATCH_REG_CR32, cr32);
-
-- if ((cr32 & SIS_CRT1) && !sisfb_crt1off)
-+ if (cr32 & SIS_CRT1)
- sisfb_crt1off = 0;
- else {
-- if (cr32 & 0x5F)
-+ if (cr32 & 0x5F)
- sisfb_crt1off = 1;
- else
- sisfb_crt1off = 0;
- }
-
-- if (sisfb_crt2type != -1)
-- /* TW: Override with option */
-- ivideo.disp_state = sisfb_crt2type;
-- else if (cr32 & SIS_VB_TV)
-- ivideo.disp_state = DISPTYPE_TV;
-- else if (cr32 & SIS_VB_LCD)
-- ivideo.disp_state = DISPTYPE_LCD;
-- else if (cr32 & SIS_VB_CRT2)
-- ivideo.disp_state = DISPTYPE_CRT2;
-- else
-- ivideo.disp_state = 0;
-+ ivideo.vbflags &= ~(CRT2_TV | CRT2_LCD | CRT2_VGA);
-
-+ if (cr32 & SIS_VB_TV)
-+ ivideo.vbflags |= CRT2_TV;
-+ if (cr32 & SIS_VB_LCD)
-+ ivideo.vbflags |= CRT2_LCD;
-+ if (cr32 & SIS_VB_CRT2)
-+ ivideo.vbflags |= CRT2_VGA;
-+
-+ /* TW: Detect/set TV plug & type */
- if(sisfb_tvplug != -1)
-- /* PR/TW: Override with option */
-- ivideo.TV_plug = sisfb_tvplug;
-- else if (cr32 & SIS_VB_HIVISION) {
-- ivideo.TV_type = TVMODE_HIVISION;
-- ivideo.TV_plug = TVPLUG_SVIDEO;
-- }
-+ ivideo.vbflags |= sisfb_tvplug;
-+ if (cr32 & SIS_VB_HIVISION)
-+ ivideo.vbflags |= (TV_HIVISION | TV_SVIDEO);
- else if (cr32 & SIS_VB_SVIDEO)
-- ivideo.TV_plug = TVPLUG_SVIDEO;
-+ ivideo.vbflags |= TV_SVIDEO;
- else if (cr32 & SIS_VB_COMPOSITE)
-- ivideo.TV_plug = TVPLUG_COMPOSITE;
-+ ivideo.vbflags |= TV_AVIDEO;
- else if (cr32 & SIS_VB_SCART)
-- ivideo.TV_plug = TVPLUG_SCART;
--
-- if(ivideo.TV_type == 0) {
-- /* TW: PAL/NTSC changed for 650 */
-- if((ivideo.chip <= SIS_315PRO) || (ivideo.chip >= SIS_330)) {
--
-- inSISIDXREG(SISCR, 0x38, temp);
-- if(temp & 0x10)
-- ivideo.TV_type = TVMODE_PAL;
-- else
-- ivideo.TV_type = TVMODE_NTSC;
-+ ivideo.vbflags |= TV_SCART;
-+
-+ if (!(ivideo.vbflags & (TV_PAL | TV_NTSC))) {
-+ if(sisvga_engine == SIS_300_VGA) {
-+ inSISIDXREG(SISSR, IND_SIS_POWER_ON_TRAP, temp);
-+ if (temp & 0x01)
-+ ivideo.vbflags |= TV_PAL;
-+ else
-+ ivideo.vbflags |= TV_NTSC;
-+ } else if((ivideo.chip <= SIS_315PRO) || (ivideo.chip == SIS_330)) {
-
-- } else {
-+ inSISIDXREG(SISCR, 0x38, temp);
-+ if(temp & 0x10)
-+ ivideo.vbflags |= TV_PAL;
-+ else
-+ ivideo.vbflags |= TV_NTSC;
-+
-+ } else {
-
-- inSISIDXREG(SISCR, 0x79, temp);
-- if(temp & 0x20)
-- ivideo.TV_type = TVMODE_PAL;
-- else
-- ivideo.TV_type = TVMODE_NTSC;
-- }
-+ inSISIDXREG(SISCR, 0x79, temp);
-+ if(temp & 0x20)
-+ ivideo.vbflags |= TV_PAL;
-+ else
-+ ivideo.vbflags |= TV_NTSC;
-+ }
- }
-
- /* TW: Copy forceCRT1 option to CRT1off if option is given */
- if (sisfb_forcecrt1 != -1) {
-- if (sisfb_forcecrt1) sisfb_crt1off = 0;
-- else sisfb_crt1off = 1;
-+ if(sisfb_forcecrt1) sisfb_crt1off = 0;
-+ else sisfb_crt1off = 1;
- }
--}
--
--static void sisfb_get_VB_type_315(void)
--{
-- u8 reg;
-
-- if (!sisfb_has_VB_315()) {
-- inSISIDXREG(SISCR, IND_SIS_SCRATCH_REG_CR37, reg);
-- switch ((reg & SIS_EXTERNAL_CHIP_MASK) >> 1) {
-- case SIS310_EXTERNAL_CHIP_LVDS:
-- ivideo.hasVB = HASVB_LVDS;
-- break;
-- case SIS310_EXTERNAL_CHIP_LVDS_CHRONTEL:
-- ivideo.hasVB = HASVB_LVDS_CHRONTEL;
-- break;
-- default:
-- break;
-- }
-- }
- }
-
--
--static int sisfb_has_VB_315(void)
-+static void sisfb_get_VB_type(void)
- {
- u8 vb_chipid;
-+ u8 reg;
-+ char stdstr[] = "sisfb: Detected";
-+ char bridgestr[] = "video bridge";
-+ char lvdsstr[] = "LVDS transmitter";
-+ char chrstr[] = "Chrontel TV encoder";
-+
-+ ivideo.hasVB = HASVB_NONE;
-+ sishw_ext.ujVBChipID = VB_CHIP_UNKNOWN;
-+ sishw_ext.Is301BDH = FALSE;
-+ sishw_ext.usExternalChip = 0;
-
- inSISIDXREG(SISPART4, 0x00, vb_chipid);
- switch (vb_chipid) {
- case 0x01:
- ivideo.hasVB = HASVB_301;
-+ inSISIDXREG(SISPART4, 0x01, reg);
-+ if(reg < 0xb0) {
-+ ivideo.vbflags |= VB_301;
-+ sishw_ext.ujVBChipID = VB_CHIP_301;
-+ printk(KERN_INFO "%s SiS301 %s\n", stdstr, bridgestr);
-+ } else if(reg < 0xd0) {
-+ ivideo.vbflags |= VB_301B;
-+ sishw_ext.ujVBChipID = VB_CHIP_301B;
-+ printk(KERN_INFO "%s SiS301B %s\n", stdstr, bridgestr);
-+ } else if(reg < 0xe0) {
-+ ivideo.vbflags |= VB_301LV;
-+ sishw_ext.ujVBChipID = VB_CHIP_301LV;
-+ printk(KERN_INFO "%s SiS301LV %s\n", stdstr, bridgestr);
-+ } else if(reg <= 0xe1) {
-+ ivideo.vbflags |= VB_302LV;
-+ sishw_ext.ujVBChipID = VB_CHIP_302LV;
-+ printk(KERN_INFO "%s SiS302LV %s\n", stdstr, bridgestr);
-+ }
- break;
- case 0x02:
- ivideo.hasVB = HASVB_302;
-+ inSISIDXREG(SISPART4, 0x01, reg);
-+ if(reg < 0xd0) {
-+ ivideo.vbflags |= VB_302B;
-+ sishw_ext.ujVBChipID = VB_CHIP_302B;
-+ printk(KERN_INFO "%s SiS302B %s\n", stdstr, bridgestr);
-+ } else if(reg < 0xe0) {
-+ ivideo.vbflags |= VB_301LV;
-+ sishw_ext.ujVBChipID = VB_CHIP_301LV;
-+ printk(KERN_INFO "%s SiS301LV %s\n", stdstr, bridgestr);
-+ } else if(reg <= 0xe1) {
-+ ivideo.vbflags |= VB_302LV;
-+ sishw_ext.ujVBChipID = VB_CHIP_302LV;
-+ printk(KERN_INFO "%s SiS302LV %s\n", stdstr, bridgestr);
-+ }
- break;
-- default:
-- ivideo.hasVB = HASVB_NONE;
-- return FALSE;
- }
-- return TRUE;
-+
-+ if(ivideo.vbflags & (VB_301B | VB_302B)) {
-+ inSISIDXREG(SISPART4,0x23,reg);
-+ if(!(reg & 0x02)) {
-+ sishw_ext.Is301BDH = TRUE;
-+ ivideo.vbflags |= VB_30xBDH;
-+ printk(KERN_INFO "This %s does not support LCD output\n", bridgestr);
-+ }
-+ }
-+
-+ if((!(ivideo.vbflags & VB_VIDEOBRIDGE)) && (ivideo.chip != SIS_300)) {
-+ inSISIDXREG(SISCR, IND_SIS_SCRATCH_REG_CR37, reg);
-+ reg &= SIS_EXTERNAL_CHIP_MASK;
-+ reg >>= 1;
-+ if(sisvga_engine == SIS_300_VGA) {
-+ switch (reg) {
-+ case SIS_EXTERNAL_CHIP_LVDS:
-+ ivideo.hasVB = HASVB_LVDS;
-+ ivideo.vbflags |= VB_LVDS;
-+ sishw_ext.usExternalChip = 0x01;
-+ printk(KERN_INFO "%s %s\n", stdstr, lvdsstr);
-+ break;
-+ case SIS_EXTERNAL_CHIP_TRUMPION:
-+ ivideo.hasVB = HASVB_TRUMPION;
-+ ivideo.vbflags |= VB_TRUMPION;
-+ sishw_ext.usExternalChip = 0x02;
-+ printk(KERN_INFO "%s Trumpion LCD scaler\n", stdstr);
-+ break;
-+ case SIS_EXTERNAL_CHIP_CHRONTEL:
-+ ivideo.hasVB = HASVB_CHRONTEL;
-+ ivideo.vbflags |= VB_CHRONTEL;
-+ sishw_ext.usExternalChip = 0x04;
-+ printk(KERN_INFO "%s %s\n", stdstr, chrstr);
-+ break;
-+ case SIS_EXTERNAL_CHIP_LVDS_CHRONTEL:
-+ ivideo.hasVB = HASVB_LVDS_CHRONTEL;
-+ ivideo.vbflags |= (VB_LVDS | VB_CHRONTEL);
-+ sishw_ext.usExternalChip = 0x05;
-+ printk(KERN_INFO "%s %s and %s\n", stdstr, lvdsstr, chrstr);
-+ break;
-+ }
-+ } else {
-+ switch (reg) {
-+ case SIS310_EXTERNAL_CHIP_LVDS:
-+ ivideo.hasVB = HASVB_LVDS;
-+ ivideo.vbflags |= VB_LVDS;
-+ sishw_ext.usExternalChip = 0x01;
-+ printk(KERN_INFO "%s %s\n", stdstr, lvdsstr);
-+ break;
-+ case SIS310_EXTERNAL_CHIP_LVDS_CHRONTEL:
-+ ivideo.hasVB = HASVB_LVDS_CHRONTEL;
-+ ivideo.vbflags |= (VB_LVDS | VB_CHRONTEL);
-+ sishw_ext.usExternalChip = 0x05;
-+ printk(KERN_INFO "%s %s and %s\n", stdstr, lvdsstr, chrstr);
-+ break;
-+ }
-+ }
-+
-+ }
-+
-+ if(ivideo.vbflags & VB_SISBRIDGE) {
-+ SiS_Sense30x();
-+ } else if(ivideo.vbflags & VB_CHRONTEL) {
-+ SiS_SenseCh();
-+ }
-+
- }
-
--#endif /* CONFIG_FB_SIS_315 */
--
- /* ------------------ Sensing routines ------------------ */
-
- /* TW: Determine and detect attached devices on SiS30x */
-@@ -2621,34 +2879,39 @@ SISDoSense(int tempbl, int tempbh, int t
- inSISIDXREG(SISPART4,0x03,temp);
- temp ^= 0x0e;
- temp &= tempch;
-- return(temp);
-+ return((temp == tempch));
- }
-
- void
- SiS_Sense30x(void)
- {
-- u8 backupP4_0d;
-+ u8 backupP4_0d,backupP2_00;
- u8 testsvhs_tempbl, testsvhs_tempbh;
- u8 testsvhs_tempcl, testsvhs_tempch;
- u8 testcvbs_tempbl, testcvbs_tempbh;
- u8 testcvbs_tempcl, testcvbs_tempch;
- u8 testvga2_tempbl, testvga2_tempbh;
- u8 testvga2_tempcl, testvga2_tempch;
-- int myflag, result;
-+ int myflag, result, haveresult, i, j;
-+ char stdstr[] = "sisfb: Detected";
-+ char tvstr[] = "TV connected to";
-
- inSISIDXREG(SISPART4,0x0d,backupP4_0d);
- outSISIDXREG(SISPART4,0x0d,(backupP4_0d | 0x04));
-
-+ inSISIDXREG(SISPART2,0x00,backupP2_00);
-+ outSISIDXREG(SISPART2,0x00,(backupP2_00 | 0x1c));
-+
- if(sisvga_engine == SIS_300_VGA) {
-
-- testvga2_tempbh = 0x00; testvga2_tempbl = 0xd1;
-- testsvhs_tempbh = 0x00; testsvhs_tempbl = 0xb9;
-- testcvbs_tempbh = 0x00; testcvbs_tempbl = 0xb3;
-- if((sishw_ext.ujVBChipID != VB_CHIP_301) &&
-- (sishw_ext.ujVBChipID != VB_CHIP_302) ) {
-- testvga2_tempbh = 0x01; testvga2_tempbl = 0x90;
-- testsvhs_tempbh = 0x01; testsvhs_tempbl = 0x6b;
-- testcvbs_tempbh = 0x01; testcvbs_tempbl = 0x74;
-+ if(ivideo.vbflags & (VB_301B|VB_302B|VB_301LV|VB_302LV)) {
-+ testvga2_tempbh = 0x01; testvga2_tempbl = 0x90;
-+ testsvhs_tempbh = 0x01; testsvhs_tempbl = 0x6b;
-+ testcvbs_tempbh = 0x01; testcvbs_tempbl = 0x74;
-+ } else {
-+ testvga2_tempbh = 0x00; testvga2_tempbl = 0xd1;
-+ testsvhs_tempbh = 0x00; testsvhs_tempbl = 0xb9;
-+ testcvbs_tempbh = 0x00; testcvbs_tempbl = 0xb3;
- }
- inSISIDXREG(SISPART4,0x01,myflag);
- if(myflag & 0x04) {
-@@ -2657,35 +2920,36 @@ SiS_Sense30x(void)
- testcvbs_tempbh = 0x00; testcvbs_tempbl = 0xee;
- }
- testvga2_tempch = 0x0e; testvga2_tempcl = 0x08;
-- testsvhs_tempch = 0x06; testsvhs_tempcl = 0x04;
-+ testsvhs_tempch = 0x04; testsvhs_tempcl = 0x04;
- testcvbs_tempch = 0x08; testcvbs_tempcl = 0x04;
-+ if(ivideo.vbflags & (VB_301LV|VB_302LV)) {
-+ testvga2_tempbh = 0x00; testvga2_tempbl = 0x00;
-+ testvga2_tempch = 0x00; testvga2_tempcl = 0x00;
-+ }
- if(ivideo.chip == SIS_300) {
- inSISIDXREG(SISSR,0x3b,myflag);
- if(!(myflag & 0x01)) {
-- testvga2_tempbh = 0x00; testvga2_tempbl = 0x00;
-- testvga2_tempch = 0x00; testvga2_tempcl = 0x00;
-+ testvga2_tempbh = 0x00; testvga2_tempbl = 0x00;
-+ testvga2_tempch = 0x00; testvga2_tempcl = 0x00;
- }
- }
-
- } else {
-
-- testvga2_tempbh = 0x00; testvga2_tempbl = 0xd1;
-- testsvhs_tempbh = 0x00; testsvhs_tempbl = 0xb9;
-- testcvbs_tempbh = 0x00; testcvbs_tempbl = 0xb3;
-- if((sishw_ext.ujVBChipID != VB_CHIP_301) &&
-- (sishw_ext.ujVBChipID != VB_CHIP_302)) {
-- testvga2_tempbh = 0x01; testvga2_tempbl = 0x90;
-- testsvhs_tempbh = 0x01; testsvhs_tempbl = 0x6b;
-- testcvbs_tempbh = 0x01; testcvbs_tempbl = 0x74;
-- if(sishw_ext.ujVBChipID == VB_CHIP_301LV ||
-- sishw_ext.ujVBChipID == VB_CHIP_302LV) {
-- testvga2_tempbh = 0x00; testvga2_tempbl = 0x00;
-- testsvhs_tempbh = 0x02; testsvhs_tempbl = 0x00;
-- testcvbs_tempbh = 0x01; testcvbs_tempbl = 0x00;
-- }
-+ if(ivideo.vbflags & (VB_301B|VB_302B)) {
-+ testvga2_tempbh = 0x01; testvga2_tempbl = 0x90;
-+ testsvhs_tempbh = 0x01; testsvhs_tempbl = 0x6b;
-+ testcvbs_tempbh = 0x01; testcvbs_tempbl = 0x74;
-+ } else if(ivideo.vbflags & (VB_301LV|VB_302LV)) {
-+ testvga2_tempbh = 0x00; testvga2_tempbl = 0x00;
-+ testsvhs_tempbh = 0x02; testsvhs_tempbl = 0x00;
-+ testcvbs_tempbh = 0x01; testcvbs_tempbl = 0x00;
-+ } else {
-+ testvga2_tempbh = 0x00; testvga2_tempbl = 0xd1;
-+ testsvhs_tempbh = 0x00; testsvhs_tempbl = 0xb9;
-+ testcvbs_tempbh = 0x00; testcvbs_tempbl = 0xb3;
- }
-- if(sishw_ext.ujVBChipID != VB_CHIP_301LV &&
-- sishw_ext.ujVBChipID != VB_CHIP_302LV) {
-+ if(ivideo.vbflags & (VB_301|VB_301B|VB_302B)) {
- inSISIDXREG(SISPART4,0x01,myflag);
- if(myflag & 0x04) {
- testvga2_tempbh = 0x00; testvga2_tempbl = 0xfd;
-@@ -2693,49 +2957,78 @@ SiS_Sense30x(void)
- testcvbs_tempbh = 0x00; testcvbs_tempbl = 0xee;
- }
- }
-- if((sishw_ext.ujVBChipID == VB_CHIP_301LV) ||
-- (sishw_ext.ujVBChipID == VB_CHIP_302LV) ) {
-+ if(ivideo.vbflags & (VB_301LV|VB_302LV)) {
- testvga2_tempbh = 0x00; testvga2_tempbl = 0x00;
- testvga2_tempch = 0x00; testvga2_tempcl = 0x00;
- testsvhs_tempch = 0x04; testsvhs_tempcl = 0x08;
- testcvbs_tempch = 0x08; testcvbs_tempcl = 0x08;
- } else {
- testvga2_tempch = 0x0e; testvga2_tempcl = 0x08;
-- testsvhs_tempch = 0x06; testsvhs_tempcl = 0x04;
-+ testsvhs_tempch = 0x04; testsvhs_tempcl = 0x04;
- testcvbs_tempch = 0x08; testcvbs_tempcl = 0x04;
- }
- }
-
- if(testvga2_tempch || testvga2_tempcl || testvga2_tempbh || testvga2_tempbl) {
-- result = SISDoSense(testvga2_tempbl, testvga2_tempbh,
-- testvga2_tempcl, testvga2_tempch);
-- if(result) {
-- printk(KERN_INFO "sisfb: Detected secondary VGA connection\n");
-- orSISIDXREG(SISCR, 0x32, 0x10);
-- }
-+ haveresult = 0;
-+ for(j = 0; j < 10; j++) {
-+ result = 0;
-+ for(i = 0; i < 3; i++) {
-+ if(SISDoSense(testvga2_tempbl, testvga2_tempbh,
-+ testvga2_tempcl, testvga2_tempch))
-+ result++;
-+ }
-+ if((result == 0) || (result >= 2)) break;
-+ }
-+ if(result) {
-+ printk(KERN_INFO "%s secondary VGA connection\n", stdstr);
-+ orSISIDXREG(SISCR, 0x32, 0x10);
-+ } else {
-+ andSISIDXREG(SISCR, 0x32, ~0x10);
-+ }
-+ }
-+
-+ haveresult = 0;
-+ for(j = 0; j < 10; j++) {
-+ result = 0;
-+ for(i = 0; i < 3; i++) {
-+ if(SISDoSense(testsvhs_tempbl, testsvhs_tempbh,
-+ testsvhs_tempcl, testsvhs_tempch))
-+ result++;
-+ }
-+ if((result == 0) || (result >= 2)) break;
- }
--
-- result = SISDoSense(testsvhs_tempbl, testsvhs_tempbh,
-- testsvhs_tempcl, testsvhs_tempch);
- if(result) {
-- printk(KERN_INFO "sisfb: Detected TV connected to SVHS output\n");
-- /* TW: So we can be sure that there IS a SVHS output */
-- ivideo.TV_plug = TVPLUG_SVIDEO;
-+ printk(KERN_INFO "%s %s SVIDEO output\n", stdstr, tvstr);
-+ ivideo.vbflags |= TV_SVIDEO;
- orSISIDXREG(SISCR, 0x32, 0x02);
-+ andSISIDXREG(SISCR, 0x32, ~0x05);
- }
-
- if(!result) {
-- result = SISDoSense(testcvbs_tempbl, testcvbs_tempbh,
-- testcvbs_tempcl, testcvbs_tempch);
-+
-+ haveresult = 0;
-+ for(j = 0; j < 10; j++) {
-+ result = 0;
-+ for(i = 0; i < 3; i++) {
-+ if(SISDoSense(testcvbs_tempbl, testcvbs_tempbh,
-+ testcvbs_tempcl, testcvbs_tempch))
-+ result++;
-+ }
-+ if((result == 0) || (result >= 2)) break;
-+ }
- if(result) {
-- printk(KERN_INFO "sisfb: Detected TV connected to CVBS output\n");
-- /* TW: So we can be sure that there IS a CVBS output */
-- ivideo.TV_plug = TVPLUG_COMPOSITE;
-+ printk(KERN_INFO "%s %s COMPOSITE output\n", stdstr, tvstr);
-+ ivideo.vbflags |= TV_AVIDEO;
- orSISIDXREG(SISCR, 0x32, 0x01);
-+ andSISIDXREG(SISCR, 0x32, ~0x06);
-+ } else {
-+ andSISIDXREG(SISCR, 0x32, ~0x07);
- }
- }
- SISDoSense(0, 0, 0, 0);
-
-+ outSISIDXREG(SISPART2,0x00,backupP2_00);
- outSISIDXREG(SISPART4,0x0d,backupP4_0d);
- }
-
-@@ -2744,51 +3037,84 @@ void
- SiS_SenseCh(void)
- {
-
-- u8 temp1;
--#ifdef CONFIG_FB_SIS_315
-- u8 temp2;
-+ u8 temp1, temp2;
-+#ifdef CONFIG_FB_SIS_300
-+ unsigned char test[3];
-+ int i;
- #endif
-+ char stdstr[] = "sisfb: Chrontel: Detected TV connected to";
-
- if(ivideo.chip < SIS_315H) {
-
- #ifdef CONFIG_FB_SIS_300
-- SiS_Pr.SiS_IF_DEF_CH70xx = 1; /* TW: Chrontel 7005 */
-+ SiS_Pr.SiS_IF_DEF_CH70xx = 1; /* Chrontel 700x */
-+ SiS_SetChrontelGPIO(&SiS_Pr, 0x9c); /* Set general purpose IO for Chrontel communication */
-+ SiS_DDC2Delay(&SiS_Pr, 1000);
- temp1 = SiS_GetCH700x(&SiS_Pr, 0x25);
-- if ((temp1 >= 50) && (temp1 <= 100)) {
-- /* TW: Read power status */
-+ /* TW: See Chrontel TB31 for explanation */
-+ temp2 = SiS_GetCH700x(&SiS_Pr, 0x0e);
-+ if(((temp2 & 0x07) == 0x01) || (temp2 & 0x04)) {
-+ SiS_SetCH700x(&SiS_Pr, 0x0b0e);
-+ SiS_DDC2Delay(&SiS_Pr, 300);
-+ }
-+ temp2 = SiS_GetCH700x(&SiS_Pr, 0x25);
-+ if(temp2 != temp1) temp1 = temp2;
-+
-+ if((temp1 >= 0x22) && (temp1 <= 0x50)) {
-+ /* Read power status */
- temp1 = SiS_GetCH700x(&SiS_Pr, 0x0e);
- if((temp1 & 0x03) != 0x03) {
-- /* TW: Power all outputs */
-- SiS_SetCH70xxANDOR(&SiS_Pr, 0x030E,0xF8);
-+ /* Power all outputs */
-+ SiS_SetCH700x(&SiS_Pr, 0x0B0E);
-+ SiS_DDC2Delay(&SiS_Pr, 300);
- }
-- /* TW: Sense connected TV devices */
-- SiS_SetCH700x(&SiS_Pr, 0x0110);
-- SiS_SetCH700x(&SiS_Pr, 0x0010);
-- temp1 = SiS_GetCH700x(&SiS_Pr, 0x10);
-- if(!(temp1 & 0x08)) {
-- printk(KERN_INFO
-- "sisfb: Chrontel: Detected TV connected to SVHS output\n");
-- /* TW: So we can be sure that there IS a SVHS output */
-- ivideo.TV_plug = TVPLUG_SVIDEO;
-+ /* Sense connected TV devices */
-+ for(i = 0; i < 3; i++) {
-+ SiS_SetCH700x(&SiS_Pr, 0x0110);
-+ SiS_DDC2Delay(&SiS_Pr, 0x96);
-+ SiS_SetCH700x(&SiS_Pr, 0x0010);
-+ SiS_DDC2Delay(&SiS_Pr, 0x96);
-+ temp1 = SiS_GetCH700x(&SiS_Pr, 0x10);
-+ if(!(temp1 & 0x08)) test[i] = 0x02;
-+ else if(!(temp1 & 0x02)) test[i] = 0x01;
-+ else test[i] = 0;
-+ SiS_DDC2Delay(&SiS_Pr, 0x96);
-+ }
-+
-+ if(test[0] == test[1]) temp1 = test[0];
-+ else if(test[0] == test[2]) temp1 = test[0];
-+ else if(test[1] == test[2]) temp1 = test[1];
-+ else {
-+ printk(KERN_INFO
-+ "sisfb: TV detection unreliable - test results varied\n");
-+ temp1 = test[2];
-+ }
-+ if(temp1 == 0x02) {
-+ printk(KERN_INFO "%s SVIDEO output\n", stdstr);
-+ ivideo.vbflags |= TV_SVIDEO;
- orSISIDXREG(SISCR, 0x32, 0x02);
-- } else if (!(temp1 & 0x02)) {
-- printk(KERN_INFO
-- "sisfb: Chrontel: Detected TV connected to CVBS output\n");
-- /* TW: So we can be sure that there IS a CVBS output */
-- ivideo.TV_plug = TVPLUG_COMPOSITE;
-+ andSISIDXREG(SISCR, 0x32, ~0x05);
-+ } else if (temp1 == 0x01) {
-+ printk(KERN_INFO "%s CVBS output\n", stdstr);
-+ ivideo.vbflags |= TV_AVIDEO;
- orSISIDXREG(SISCR, 0x32, 0x01);
-+ andSISIDXREG(SISCR, 0x32, ~0x06);
- } else {
- SiS_SetCH70xxANDOR(&SiS_Pr, 0x010E,0xF8);
-+ andSISIDXREG(SISCR, 0x32, ~0x07);
- }
- } else if(temp1 == 0) {
- SiS_SetCH70xxANDOR(&SiS_Pr, 0x010E,0xF8);
-+ andSISIDXREG(SISCR, 0x32, ~0x07);
- }
-+ /* Set general purpose IO for Chrontel communication */
-+ SiS_SetChrontelGPIO(&SiS_Pr, 0x00);
- #endif
-
- } else {
-
- #ifdef CONFIG_FB_SIS_315
-- SiS_Pr.SiS_IF_DEF_CH70xx = 2; /* TW: Chrontel 7019 */
-+ SiS_Pr.SiS_IF_DEF_CH70xx = 2; /* Chrontel 7019 */
- temp1 = SiS_GetCH701x(&SiS_Pr, 0x49);
- SiS_SetCH701x(&SiS_Pr, 0x2049);
- SiS_DDC2Delay(&SiS_Pr, 0x96);
-@@ -2808,22 +3134,24 @@ SiS_SenseCh(void)
- if( (temp1 & 0x01) && (temp1 & 0x02) ) temp1 = 0x04;
- switch(temp1) {
- case 0x01:
-- printk(KERN_INFO
-- "sisfb: Chrontel: Detected TV connected to CVBS output\n");
-- ivideo.TV_plug = TVPLUG_COMPOSITE;
-+ printk(KERN_INFO "%s CVBS output\n", stdstr);
-+ ivideo.vbflags |= TV_AVIDEO;
- orSISIDXREG(SISCR, 0x32, 0x01);
-+ andSISIDXREG(SISCR, 0x32, ~0x06);
- break;
- case 0x02:
-- printk(KERN_INFO
-- "sisfb: Chrontel: Detected TV connected to SVHS output\n");
-- ivideo.TV_plug = TVPLUG_SVIDEO;
-+ printk(KERN_INFO "%s SVIDEO output\n", stdstr);
-+ ivideo.vbflags |= TV_SVIDEO;
- orSISIDXREG(SISCR, 0x32, 0x02);
-+ andSISIDXREG(SISCR, 0x32, ~0x05);
- break;
- case 0x04:
-- /* TW: This should not happen */
-- printk(KERN_INFO
-- "sisfb: Chrontel: Detected TV connected to SCART output\n");
-+ printk(KERN_INFO "%s SCART output\n", stdstr);
-+ orSISIDXREG(SISCR, 0x32, 0x04);
-+ andSISIDXREG(SISCR, 0x32, ~0x03);
- break;
-+ default:
-+ andSISIDXREG(SISCR, 0x32, ~0x07);
- }
- #endif
-
-@@ -2860,14 +3188,20 @@ static int sisfb_heap_init(void)
- * in XF86Config-4.
- * The heap start can also be specified by parameter "mem" when starting the sisfb
- * driver. sisfb mem=1024 lets heap starts at 1MB, etc.
-+ * On the 315 series, the default is a 1MB heap since DRI is not supported
-+ * there.
- */
- if ((!sisfb_mem) || (sisfb_mem > (ivideo.video_size/1024))) {
-- if (ivideo.video_size > 0x1000000) {
-+ if(sisvga_engine == SIS_300_VGA) {
-+ if (ivideo.video_size > 0x1000000) {
- ivideo.heapstart = 0xc00000;
-- } else if (ivideo.video_size > 0x800000) {
-+ } else if (ivideo.video_size > 0x800000) {
- ivideo.heapstart = 0x800000;
-- } else {
-+ } else {
- ivideo.heapstart = 0x400000;
-+ }
-+ } else {
-+ ivideo.heapstart = ivideo.video_size - 0x100000;
- }
- } else {
- ivideo.heapstart = sisfb_mem * 1024;
-@@ -2883,7 +3217,7 @@ static int sisfb_heap_init(void)
- #ifdef CONFIG_FB_SIS_315
- if (sisvga_engine == SIS_315_VGA) {
- /* TW: Now initialize the 310 series' command queue mode.
-- * On 310/325, there are three queue modes available which
-+ * On 315, there are three queue modes available which
- * are chosen by setting bits 7:5 in SR26:
- * 1. MMIO queue mode (bit 5, 0x20). The hardware will keep
- * track of the queue, the FIFO, command parsing and so
-@@ -3333,7 +3667,6 @@ void sis_malloc(struct sis_memreq *req)
- req->offset = poh->offset;
- req->size = poh->size;
- }
--
- }
-
- void sis_free(unsigned long base)
-@@ -3352,35 +3685,70 @@ void sis_free(unsigned long base)
-
- static void sisfb_pre_setmode(void)
- {
-- u8 cr30 = 0, cr31 = 0;
-+ u8 cr30 = 0, cr31 = 0, cr33 = 0;
-+
-+ ivideo.currentvbflags &= (VB_VIDEOBRIDGE | VB_DISPTYPE_DISP2);
-
- inSISIDXREG(SISCR, 0x31, cr31);
- cr31 &= ~0x60;
-+ cr31 |= 0x04;
-+
-+ cr33 = sisfb_rate_idx & 0x0F;
-
-- switch (ivideo.disp_state & DISPTYPE_DISP2) {
-- case DISPTYPE_CRT2:
-- cr30 = (SIS_VB_OUTPUT_CRT2 | SIS_SIMULTANEOUS_VIEW_ENABLE);
-- cr31 |= SIS_DRIVER_MODE;
-- break;
-- case DISPTYPE_LCD:
-- cr30 = (SIS_VB_OUTPUT_LCD | SIS_SIMULTANEOUS_VIEW_ENABLE);
-- cr31 |= SIS_DRIVER_MODE;
-- break;
-- case DISPTYPE_TV:
-- if (ivideo.TV_type == TVMODE_HIVISION)
-+ SiS_SetEnableDstn(&SiS_Pr, FALSE);
-+ SiS_SetEnableFstn(&SiS_Pr, FALSE);
-+
-+ switch (ivideo.currentvbflags & VB_DISPTYPE_DISP2) {
-+ case CRT2_TV:
-+ ivideo.disp_state = DISPTYPE_TV;
-+ if (ivideo.vbflags & TV_HIVISION) {
- cr30 = (SIS_VB_OUTPUT_HIVISION | SIS_SIMULTANEOUS_VIEW_ENABLE);
-- else if (ivideo.TV_plug == TVPLUG_SVIDEO)
-+ ivideo.currentvbflags |= (TV_HIVISION | TV_SVIDEO);
-+ ivideo.TV_type = TVMODE_HIVISION;
-+ ivideo.TV_plug = TVPLUG_SVIDEO;
-+ } else if (ivideo.vbflags & TV_SVIDEO) {
- cr30 = (SIS_VB_OUTPUT_SVIDEO | SIS_SIMULTANEOUS_VIEW_ENABLE);
-- else if (ivideo.TV_plug == TVPLUG_COMPOSITE)
-+ ivideo.currentvbflags |= TV_SVIDEO;
-+ ivideo.TV_plug = TVPLUG_SVIDEO;
-+ } else if (ivideo.vbflags & TV_AVIDEO) {
- cr30 = (SIS_VB_OUTPUT_COMPOSITE | SIS_SIMULTANEOUS_VIEW_ENABLE);
-- else if (ivideo.TV_plug == TVPLUG_SCART)
-+ ivideo.currentvbflags |= TV_AVIDEO;
-+ ivideo.TV_plug = TVPLUG_COMPOSITE;
-+ } else if (ivideo.vbflags & TV_SCART) {
- cr30 = (SIS_VB_OUTPUT_SCART | SIS_SIMULTANEOUS_VIEW_ENABLE);
-+ ivideo.currentvbflags |= TV_SCART;
-+ ivideo.TV_plug = TVPLUG_SCART;
-+ }
- cr31 |= SIS_DRIVER_MODE;
-
-- if (sisfb_tvmode == 1 || ivideo.TV_type == TVMODE_PAL)
-- cr31 |= 0x01;
-- else
-- cr31 &= ~0x01;
-+ if(!(ivideo.vbflags & TV_HIVISION)) {
-+ if (ivideo.vbflags & TV_PAL) {
-+ cr31 |= 0x01;
-+ ivideo.currentvbflags |= TV_PAL;
-+ ivideo.TV_type = TVMODE_PAL;
-+ } else {
-+ cr31 &= ~0x01;
-+ ivideo.currentvbflags |= TV_NTSC;
-+ ivideo.TV_type = TVMODE_NTSC;
-+ }
-+ }
-+ break;
-+ case CRT2_LCD:
-+ ivideo.disp_state = DISPTYPE_LCD;
-+ cr30 = (SIS_VB_OUTPUT_LCD | SIS_SIMULTANEOUS_VIEW_ENABLE);
-+ cr31 |= SIS_DRIVER_MODE;
-+ SiS_SetEnableDstn(&SiS_Pr, sisfb_dstn);
-+ SiS_SetEnableFstn(&SiS_Pr, sisfb_fstn);
-+ break;
-+ case CRT2_VGA:
-+ ivideo.disp_state = DISPTYPE_CRT2;
-+ cr30 = (SIS_VB_OUTPUT_CRT2 | SIS_SIMULTANEOUS_VIEW_ENABLE);
-+ cr31 |= SIS_DRIVER_MODE;
-+ if(sisfb_nocrt2rate) {
-+ cr33 |= (sisbios_mode[sisfb_mode_idx].rate_idx << 4);
-+ } else {
-+ cr33 |= ((sisfb_rate_idx & 0x0F) << 4);
-+ }
- break;
- default: /* disable CRT2 */
- cr30 = 0x00;
-@@ -3389,8 +3757,7 @@ static void sisfb_pre_setmode(void)
-
- outSISIDXREG(SISCR, IND_SIS_SCRATCH_REG_CR30, cr30);
- outSISIDXREG(SISCR, IND_SIS_SCRATCH_REG_CR31, cr31);
--
-- outSISIDXREG(SISCR, IND_SIS_SCRATCH_REG_CR33, (sisfb_rate_idx & 0x0F));
-+ outSISIDXREG(SISCR, IND_SIS_SCRATCH_REG_CR33, cr33);
-
- if(ivideo.accel) sisfb_syncaccel();
-
-@@ -3400,67 +3767,89 @@ static void sisfb_pre_setmode(void)
- static void sisfb_post_setmode(void)
- {
- u8 reg;
-+ BOOLEAN crt1isoff = FALSE;
-+#ifdef CONFIG_FB_SIS_315
-+ u8 reg1;
-+#endif
-+#ifdef CONFIG_FB_SIS_300
- BOOLEAN doit = TRUE;
--#if 0 /* TW: Wrong: Is not in MMIO space, but in RAM */
-- /* Backup mode number to MMIO space */
-- if(ivideo.mmio_vbase) {
-- *(volatile u8 *)(((u8*)ivideo.mmio_vbase) + 0x449) = (unsigned char)sisfb_mode_no;
-- }
--#endif
--
-- if (ivideo.video_bpp == 8) {
-- /* TW: We can't switch off CRT1 on LVDS/Chrontel in 8bpp Modes */
-- if ((ivideo.hasVB == HASVB_LVDS) || (ivideo.hasVB == HASVB_LVDS_CHRONTEL)) {
-- doit = FALSE;
-- }
-- /* TW: We can't switch off CRT1 on 301B-DH in 8bpp Modes if using LCD */
-- if ( (sishw_ext.Is301BDH) && (ivideo.disp_state & DISPTYPE_LCD) ) {
-- doit = FALSE;
-- }
-- }
--
-+#endif
- /* TW: We can't switch off CRT1 if bridge is in slave mode */
-- if(ivideo.hasVB != HASVB_NONE) {
-- inSISIDXREG(SISPART1, 0x00, reg);
-+ if(ivideo.vbflags & VB_VIDEOBRIDGE) {
-+#ifdef CONFIG_FB_SIS_300
- if(sisvga_engine == SIS_300_VGA) {
-+ inSISIDXREG(SISPART1, 0x00, reg);
- if((reg & 0xa0) == 0x20) {
- doit = FALSE;
- }
- }
-- if(sisvga_engine == SIS_315_VGA) {
-- if((reg & 0x50) == 0x10) {
-- doit = FALSE;
-- }
-- }
-+#endif
- } else sisfb_crt1off = 0;
-
-- inSISIDXREG(SISCR, 0x17, reg);
-- if((sisfb_crt1off) && (doit))
-- reg &= ~0x80;
-- else
-- reg |= 0x80;
-- outSISIDXREG(SISCR, 0x17, reg);
-+ if(sisvga_engine == SIS_300_VGA) {
-
-- andSISIDXREG(SISSR, IND_SIS_RAMDAC_CONTROL, ~0x04);
-+#ifdef CONFIG_FB_SIS_300
-+ if((sisfb_crt1off) && (doit)) {
-+ crt1isoff = TRUE;
-+ reg = 0x00;
-+ } else {
-+ crt1isoff = FALSE;
-+ reg = 0x80;
-+ }
-+ setSISIDXREG(SISCR, 0x17, 0x7f, reg);
-+#endif
-
-- if((ivideo.disp_state & DISPTYPE_TV) && (ivideo.hasVB == HASVB_301)) {
-+ } else {
-+
-+#ifdef CONFIG_FB_SIS_315
-+ if(sisfb_crt1off) {
-+ crt1isoff = TRUE;
-+ reg = 0x40;
-+ reg1 = 0xc0;
-+ } else {
-+ crt1isoff = FALSE;
-+ reg = 0x00;
-+ reg1 = 0x00;
-+
-+ }
-+ setSISIDXREG(SISCR, 0x63, ~0x40, reg);
-+ setSISIDXREG(SISSR, 0x1f, ~0xc0, reg1);
-+#endif
-+
-+ }
-+
-+ if(crt1isoff) {
-+ ivideo.currentvbflags &= ~VB_DISPTYPE_CRT1;
-+ ivideo.currentvbflags |= VB_SINGLE_MODE;
-+ ivideo.disp_state |= DISPMODE_SINGLE;
-+ } else {
-+ ivideo.currentvbflags |= VB_DISPTYPE_CRT1;
-+ ivideo.disp_state |= DISPTYPE_CRT1;
-+ if(ivideo.currentvbflags & VB_DISPTYPE_CRT2) {
-+ ivideo.currentvbflags |= VB_MIRROR_MODE;
-+ ivideo.disp_state |= DISPMODE_MIRROR;
-+ } else {
-+ ivideo.currentvbflags |= VB_SINGLE_MODE;
-+ ivideo.disp_state |= DISPMODE_SINGLE;
-+ }
-+ }
-
-- inSISIDXREG(SISPART4, 0x01, reg);
-+ andSISIDXREG(SISSR, IND_SIS_RAMDAC_CONTROL, ~0x04);
-
-- if(reg < 0xB0) { /* Set filter for SiS301 */
-+ if((ivideo.currentvbflags & CRT2_TV) && (ivideo.vbflags & VB_301)) { /* Set filter for SiS301 */
-
- switch (ivideo.video_width) {
- case 320:
-- filter_tb = (ivideo.TV_type == TVMODE_NTSC) ? 4 : 12;
-+ filter_tb = (ivideo.vbflags & TV_NTSC) ? 4 : 12;
- break;
- case 640:
-- filter_tb = (ivideo.TV_type == TVMODE_NTSC) ? 5 : 13;
-+ filter_tb = (ivideo.vbflags & TV_NTSC) ? 5 : 13;
- break;
- case 720:
-- filter_tb = (ivideo.TV_type == TVMODE_NTSC) ? 6 : 14;
-+ filter_tb = (ivideo.vbflags & TV_NTSC) ? 6 : 14;
- break;
- case 800:
-- filter_tb = (ivideo.TV_type == TVMODE_NTSC) ? 7 : 15;
-+ filter_tb = (ivideo.vbflags & TV_NTSC) ? 7 : 15;
- break;
- default:
- filter = -1;
-@@ -3469,15 +3858,15 @@ static void sisfb_post_setmode(void)
-
- orSISIDXREG(SISPART1, sisfb_CRT2_write_enable, 0x01);
-
-- if(ivideo.TV_type == TVMODE_NTSC) {
-+ if(ivideo.vbflags & TV_NTSC) {
-
- andSISIDXREG(SISPART2, 0x3a, 0x1f);
-
-- if (ivideo.TV_plug == TVPLUG_SVIDEO) {
-+ if (ivideo.vbflags & TV_SVIDEO) {
-
- andSISIDXREG(SISPART2, 0x30, 0xdf);
-
-- } else if (ivideo.TV_plug == TVPLUG_COMPOSITE) {
-+ } else if (ivideo.vbflags & TV_AVIDEO) {
-
- orSISIDXREG(SISPART2, 0x30, 0x20);
-
-@@ -3503,15 +3892,15 @@ static void sisfb_post_setmode(void)
- }
- }
-
-- } else if(ivideo.TV_type == TVMODE_PAL) {
-+ } else if(ivideo.vbflags & TV_PAL) {
-
- andSISIDXREG(SISPART2, 0x3A, 0x1F);
-
-- if (ivideo.TV_plug == TVPLUG_SVIDEO) {
-+ if (ivideo.vbflags & TV_SVIDEO) {
-
- andSISIDXREG(SISPART2, 0x30, 0xDF);
-
-- } else if (ivideo.TV_plug == TVPLUG_COMPOSITE) {
-+ } else if (ivideo.vbflags & TV_AVIDEO) {
-
- orSISIDXREG(SISPART2, 0x30, 0x20);
-
-@@ -3539,7 +3928,7 @@ static void sisfb_post_setmode(void)
- }
-
- if ((filter >= 0) && (filter <=7)) {
-- DPRINTK("FilterTable[%d]-%d: %02x %02x %02x %02x\n", filter_tb, filter,
-+ DPRINTK("FilterTable[%d]-%d: %02x %02x %02x %02x\n", filter_tb, filter,
- sis_TV_filter[filter_tb].filter[filter][0],
- sis_TV_filter[filter_tb].filter[filter][1],
- sis_TV_filter[filter_tb].filter[filter][2],
-@@ -3550,8 +3939,6 @@ static void sisfb_post_setmode(void)
- outSISIDXREG(SISPART2, 0x37, (sis_TV_filter[filter_tb].filter[filter][2]));
- outSISIDXREG(SISPART2, 0x38, (sis_TV_filter[filter_tb].filter[filter][3]));
- }
--
-- }
-
- }
-
-@@ -3578,24 +3965,22 @@ int sisfb_setup(char *options)
- if (!*this_opt) continue;
-
- if (!strncmp(this_opt, "mode:", 5)) {
-- sisfb_search_mode(this_opt + 5);
-+ sisfb_search_mode(this_opt + 5, FALSE);
- } else if (!strncmp(this_opt, "vesa:", 5)) {
-- sisfb_search_vesamode(simple_strtoul(this_opt + 5, NULL, 0));
-+ sisfb_search_vesamode(simple_strtoul(this_opt + 5, NULL, 0), FALSE);
- #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
- } else if (!strcmp(this_opt, "inverse")) {
- sisfb_inverse = 1;
- /* fb_invert_cmaps(); */
- } else if (!strncmp(this_opt, "font:", 5)) {
- strcpy(sis_fb_info.fontname, this_opt + 5);
--#endif
-- } else if (!strncmp(this_opt, "mode:", 5)) {
-- sisfb_search_mode(this_opt + 5);
-- } else if (!strncmp(this_opt, "vesa:", 5)) {
-- sisfb_search_vesamode(simple_strtoul(this_opt + 5, NULL, 0));
-+#endif
- } else if (!strncmp(this_opt, "vrate:", 6)) {
- ivideo.refresh_rate = simple_strtoul(this_opt + 6, NULL, 0);
-+ sisfb_parm_rate = ivideo.refresh_rate;
- } else if (!strncmp(this_opt, "rate:", 5)) {
- ivideo.refresh_rate = simple_strtoul(this_opt + 5, NULL, 0);
-+ sisfb_parm_rate = ivideo.refresh_rate;
- } else if (!strncmp(this_opt, "off", 3)) {
- sisfb_off = 1;
- } else if (!strncmp(this_opt, "crt1off", 7)) {
-@@ -3612,10 +3997,6 @@ int sisfb_setup(char *options)
- sisfb_search_tvstd(this_opt + 7);
- } else if (!strncmp(this_opt, "mem:",4)) {
- sisfb_mem = simple_strtoul(this_opt + 4, NULL, 0);
-- } else if (!strncmp(this_opt, "dstn", 4)) {
-- enable_dstn = 1;
-- /* TW: DSTN overrules forcecrt2type */
-- sisfb_crt2type = DISPTYPE_LCD;
- } else if (!strncmp(this_opt, "queuemode:", 10)) {
- sisfb_search_queuemode(this_opt + 10);
- } else if (!strncmp(this_opt, "pdc:", 4)) {
-@@ -3632,17 +4013,18 @@ int sisfb_setup(char *options)
- sisfb_userom = (int)simple_strtoul(this_opt + 7, NULL, 0);
- } else if (!strncmp(this_opt, "useoem:", 7)) {
- sisfb_useoem = (int)simple_strtoul(this_opt + 7, NULL, 0);
-+ } else if (!strncmp(this_opt, "nocrt2rate", 10)) {
-+ sisfb_nocrt2rate = 1;
-+ } else if(this_opt[0] >= '0' && this_opt[0] <= '9') {
-+ sisfb_search_mode(this_opt, TRUE);
- } else {
- printk(KERN_INFO "sisfb: Invalid option %s\n", this_opt);
- }
-
- /* TW: Acceleration only with MMIO mode */
- if((sisfb_queuemode != -1) && (sisfb_queuemode != MMIO_CMD)) {
-- sisfb_ypan = 0;
- sisfb_accel = 0;
- }
-- /* TW: Panning only with acceleration */
-- if(sisfb_accel == 0) sisfb_ypan = 0;
-
- }
- return 0;
-@@ -3661,14 +4043,14 @@ static char *sis_find_rom(void)
- char *sis_sig_300[4] = {
- "300", "540", "630", "730"
- };
-- char *sis_sig_310[7] = {
-- "315", "315", "315", "5315", "6325", "6325", "Xabre"
-+ char *sis_sig_310[8] = {
-+ "315", "315", "315", "5315", "6325", "6325", "Xabre", "6330"
- };
- ushort sis_nums_300[4] = {
- SIS_300, SIS_540, SIS_630, SIS_730
- };
-- unsigned short sis_nums_310[7] = {
-- SIS_315PRO, SIS_315H, SIS_315, SIS_550, SIS_650, SIS_740, SIS_330
-+ unsigned short sis_nums_310[8] = {
-+ SIS_315PRO, SIS_315H, SIS_315, SIS_550, SIS_650, SIS_740, SIS_330, SIS_660
- };
-
- for(segstart=0x000c0000; segstart<0x000f0000; segstart+=0x00001000) {
-@@ -3705,7 +4087,7 @@ static char *sis_find_rom(void)
- }
- }
- if(stage != 4) {
-- for(i = 0;(i < 7) && (stage != 4); i++) {
-+ for(i = 0;(i < 8) && (stage != 4); i++) {
- if(strncmp(sis_sig_310[i], rom, strlen(sis_sig_310[i])) == 0) {
- if(sis_nums_310[i] == ivideo.chip) {
- stage = 4;
-@@ -3735,7 +4117,7 @@ int __init sisfb_init(void)
- int pdev_valid = 0;
- u32 reg32;
- u16 reg16;
-- u8 reg, reg1;
-+ u8 reg;
-
- /* outb(0x77, 0x80); */ /* What is this? */
-
-@@ -3751,12 +4133,14 @@ int __init sisfb_init(void)
- if (sisfb_off)
- return -ENXIO;
-
-- if (enable_dstn)
-- SiS_SetEnableDstn(&SiS_Pr);
--
- sisfb_registered = 0;
-+ sisfb_thismonitor.datavalid = FALSE;
-
- memset(&sis_fb_info, 0, sizeof(sis_fb_info));
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
-+ memset(&sisfb_lastrates[0], 0, 128);
-+#endif
-
- #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
- memset(&sis_disp, 0, sizeof(sis_disp));
-@@ -3877,6 +4261,12 @@ int __init sisfb_init(void)
- sisfb_hwcursor_size = HW_CURSOR_AREA_SIZE_315 * 2;
- sisfb_CRT2_write_enable = IND_SIS_CRT2_WRITE_ENABLE_315;
- break;
-+ case PCI_DEVICE_ID_SI_660_VGA:
-+ ivideo.chip = SIS_660;
-+ sisvga_engine = SIS_315_VGA;
-+ sisfb_hwcursor_size = HW_CURSOR_AREA_SIZE_315 * 2;
-+ sisfb_CRT2_write_enable = IND_SIS_CRT2_WRITE_ENABLE_315;
-+ break;
- #endif
- default:
- return -ENODEV;
-@@ -3902,30 +4292,34 @@ int __init sisfb_init(void)
- SiS_Pr.SiS_Backup70xx = 0xff;
- SiS_Pr.SiS_CHOverScan = -1;
- SiS_Pr.SiS_ChSW = FALSE;
-+ SiS_Pr.SiS_CustomT = CUT_NONE;
- SiS_Pr.SiS_UseLCDA = FALSE;
- SiS_Pr.UsePanelScaler = -1;
- SiSRegInit(&SiS_Pr, (USHORT)sishw_ext.ulIOAddress);
-
- #ifdef CONFIG_FB_SIS_300
-- /* TW: Find PCI systems for Chrontel/ISA bridge manipulation */
-+ /* TW: Find PCI systems for Chrontel/GPIO communication setup */
- if(ivideo.chip == SIS_630) {
-- int i=0;
-- do {
-- if(mychswtable[i].subsysVendor == ivideo.subsysvendor &&
-- mychswtable[i].subsysCard == ivideo.subsysdevice) {
-- SiS_Pr.SiS_ChSW = TRUE;
-- }
-- i++;
-- } while(mychswtable[i].subsysVendor != 0);
-+ int i=0;
-+ do {
-+ if(mychswtable[i].subsysVendor == ivideo.subsysvendor &&
-+ mychswtable[i].subsysCard == ivideo.subsysdevice) {
-+ SiS_Pr.SiS_ChSW = TRUE;
-+ printk(KERN_DEBUG "sisfb: Identified [%s %s] requiring Chrontel/GPIO setup\n",
-+ mychswtable[i].vendorName, mychswtable[i].cardName);
-+ break;
-+ }
-+ i++;
-+ } while(mychswtable[i].subsysVendor != 0);
- }
- #endif
-
- outSISIDXREG(SISSR, IND_SIS_PASSWORD, SIS_PASSWORD);
-
- #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
--#ifdef MODULE
-+#ifdef MODULE
- inSISIDXREG(SISCR,0x34,reg);
-- if(reg & 0x80) {
-+ if((reg & 0x80) && (reg != 0xff)) {
- if((sisbios_mode[sisfb_mode_idx].mode_no) != 0xFF) {
- printk(KERN_INFO "sisfb: Cannot initialize display mode, X server is active\n");
- return -EBUSY;
-@@ -3938,7 +4332,7 @@ int __init sisfb_init(void)
-
- #ifdef CONFIG_FB_SIS_300
- if (sisvga_engine == SIS_300_VGA) {
-- outSISIDXREG(SISSR, 0x28, 0x37);
-+ outSISIDXREG(SISSR, 0x28, 0x37); /* Reset memory clock */
-
- outSISIDXREG(SISSR, 0x29, 0x61);
-
-@@ -3946,7 +4340,8 @@ int __init sisfb_init(void)
- }
- #endif
- #ifdef CONFIG_FB_SIS_315
-- if (ivideo.chip == SIS_550 || ivideo.chip == SIS_650 || ivideo.chip == SIS_740) {
-+ if (ivideo.chip == SIS_550 || ivideo.chip == SIS_650 ||
-+ ivideo.chip == SIS_740 || ivideo.chip == SIS_660) {
- outSISIDXREG(SISSR, 0x28, 0x5a);
-
- outSISIDXREG(SISSR, 0x29, 0x64);
-@@ -3967,6 +4362,7 @@ int __init sisfb_init(void)
- case SIS_550:
- case SIS_650:
- case SIS_740:
-+ case SIS_660:
- sishw_ext.bIntegratedMMEnabled = TRUE;
- break;
- default:
-@@ -4006,13 +4402,45 @@ int __init sisfb_init(void)
- sishw_ext.pQueryNorthBridgeSpace = &sisfb_query_north_bridge_space;
- strcpy(sishw_ext.szVBIOSVer, "0.84");
-
-- /* TW: Mode numbers for 1280x960 are different for 300 and 310/325 series */
-+ /* Find systems for special custom timing */
-+ if(sishw_ext.UseROM) {
-+ int i=0,j;
-+ unsigned char *biosver = sishw_ext.pjVirtualRomBase + 0x06;
-+ unsigned char *biosdate = sishw_ext.pjVirtualRomBase + 0x2c;
-+ BOOLEAN footprint;
-+ do {
-+ if( (mycustomttable[i].chipID == ivideo.chip) &&
-+ (!strncmp(mycustomttable[i].biosversion, biosver, strlen(mycustomttable[i].biosversion))) &&
-+ (!strncmp(mycustomttable[i].biosdate, biosdate, strlen(mycustomttable[i].biosdate))) ) {
-+ footprint = TRUE;
-+ for(j=0; j<5; j++) {
-+ if(mycustomttable[i].biosFootprintAddr[j]) {
-+ if(sishw_ext.pjVirtualRomBase[mycustomttable[i].biosFootprintAddr[j]] !=
-+ mycustomttable[i].biosFootprintData[j])
-+ footprint = FALSE;
-+ }
-+ }
-+ if(footprint) {
-+ SiS_Pr.SiS_CustomT = mycustomttable[i].SpecialID;
-+ printk(KERN_DEBUG "sisfb: Identified [%s %s] for non-standard timing\n",
-+ mycustomttable[i].vendorName,
-+ mycustomttable[i].cardName);
-+ break;
-+ }
-+ }
-+ i++;
-+ } while(mycustomttable[i].chipID);
-+ }
-+
-+#ifdef CONFIG_FB_SIS_300
-+ /* TW: Mode numbers for 1280x768 are different for 300 and 315 series */
- if(sisvga_engine == SIS_300_VGA) {
-- sisbios_mode[MODEINDEX_1280x960].mode_no = 0x6e;
-- sisbios_mode[MODEINDEX_1280x960+1].mode_no = 0x6f;
-- sisbios_mode[MODEINDEX_1280x960+2].mode_no = 0x7b;
-- sisbios_mode[MODEINDEX_1280x960+3].mode_no = 0x7b;
-+ sisbios_mode[MODEINDEX_1280x768].mode_no = 0x55;
-+ sisbios_mode[MODEINDEX_1280x768+1].mode_no = 0x5a;
-+ sisbios_mode[MODEINDEX_1280x768+2].mode_no = 0x5b;
-+ sisbios_mode[MODEINDEX_1280x768+3].mode_no = 0x5b;
- }
-+#endif
-
- sishw_ext.pSR = vmalloc(sizeof(SIS_DSReg) * SR_BUFFER_SIZE);
- if (sishw_ext.pSR == NULL) {
-@@ -4167,121 +4595,54 @@ int __init sisfb_init(void)
- }
-
- ivideo.mtrr = (unsigned int) 0;
-+
-+ ivideo.vbflags = 0;
-
- if((sisfb_mode_idx < 0) || ((sisbios_mode[sisfb_mode_idx].mode_no) != 0xFF)) {
--
--#ifdef CONFIG_FB_SIS_300
-- if (sisvga_engine == SIS_300_VGA) {
-- sisfb_get_VB_type_300();
-- }
--#endif
--
--#ifdef CONFIG_FB_SIS_315
-- if (sisvga_engine == SIS_315_VGA) {
-- sisfb_get_VB_type_315();
-- }
--#endif
--
-+
- sishw_ext.ujVBChipID = VB_CHIP_UNKNOWN;
- sishw_ext.Is301BDH = FALSE;
- sishw_ext.usExternalChip = 0;
--
-- switch (ivideo.hasVB) {
--
-- case HASVB_301:
-- inSISIDXREG(SISPART4, 0x01, reg);
-- if (reg >= 0xE0) {
-- sishw_ext.ujVBChipID = VB_CHIP_302LV;
-- printk(KERN_INFO "sisfb: SiS302LV bridge detected (revision 0x%02x)\n",reg);
-- } else if (reg >= 0xD0) {
-- sishw_ext.ujVBChipID = VB_CHIP_301LV;
-- printk(KERN_INFO "sisfb: SiS301LV bridge detected (revision 0x%02x)\n",reg);
-- } else if (reg >= 0xB0) {
-- sishw_ext.ujVBChipID = VB_CHIP_301B;
-- inSISIDXREG(SISPART4,0x23,reg1);
-- if(!(reg1 & 0x02)) sishw_ext.Is301BDH = TRUE;
-- printk(KERN_INFO "sisfb: SiS301B%s bridge detected (revision 0x%02x)\n",
-- (sishw_ext.Is301BDH ? "-DH" : ""), reg);
-- } else {
-- sishw_ext.ujVBChipID = VB_CHIP_301;
-- printk(KERN_INFO "sisfb: SiS301 bridge detected\n");
-- }
-- break;
-- case HASVB_302:
-- inSISIDXREG(SISPART4, 0x01, reg);
-- if (reg >= 0xE0) {
-- sishw_ext.ujVBChipID = VB_CHIP_302LV;
-- printk(KERN_INFO "sisfb: SiS302LV bridge detected (revision 0x%02x)\n",reg);
-- } else if (reg >= 0xD0) {
-- sishw_ext.ujVBChipID = VB_CHIP_301LV;
-- printk(KERN_INFO "sisfb: SiS302LV bridge detected (revision 0x%02x)\n",reg);
-- } else if (reg >= 0xB0) {
-- inSISIDXREG(SISPART4,0x23,reg1);
-- if(!(reg1 & 0x02)) sishw_ext.Is301BDH = TRUE;
-- sishw_ext.ujVBChipID = VB_CHIP_302B;
-- printk(KERN_INFO "sisfb: SiS302B%s bridge detected (revision 0x%02x)\n",
-- (sishw_ext.Is301BDH ? "-DH" : ""), reg);
-- } else {
-- sishw_ext.ujVBChipID = VB_CHIP_302;
-- printk(KERN_INFO "sisfb: SiS302 bridge detected\n");
-- }
-- break;
-- case HASVB_LVDS:
-- sishw_ext.usExternalChip = 0x1;
-- printk(KERN_INFO "sisfb: LVDS transmitter detected\n");
-- break;
-- case HASVB_TRUMPION:
-- sishw_ext.usExternalChip = 0x2;
-- printk(KERN_INFO "sisfb: Trumpion Zurac LVDS scaler detected\n");
-- break;
-- case HASVB_CHRONTEL:
-- sishw_ext.usExternalChip = 0x4;
-- printk(KERN_INFO "sisfb: Chrontel TV encoder detected\n");
-- break;
-- case HASVB_LVDS_CHRONTEL:
-- sishw_ext.usExternalChip = 0x5;
-- printk(KERN_INFO "sisfb: LVDS transmitter and Chrontel TV encoder detected\n");
-- break;
-- default:
-- printk(KERN_INFO "sisfb: No or unknown bridge type detected\n");
-- break;
-- }
--
-- if (ivideo.hasVB != HASVB_NONE) {
--#ifdef CONFIG_FB_SIS_300
-- if (sisvga_engine == SIS_300_VGA) {
-- sisfb_detect_VB_connect_300();
-- }
--#endif
--#ifdef CONFIG_FB_SIS_315
-- if (sisvga_engine == SIS_315_VGA) {
-- sisfb_detect_VB_connect_315();
-- }
--#endif
-+
-+ sisfb_get_VB_type();
-+
-+ if(ivideo.vbflags & VB_VIDEOBRIDGE) {
-+ sisfb_detect_VB_connect();
- }
--
-- if (ivideo.disp_state & DISPTYPE_DISP2) {
-- if (sisfb_crt1off)
-- ivideo.disp_state |= DISPMODE_SINGLE;
-- else
-- ivideo.disp_state |= (DISPMODE_MIRROR | DISPTYPE_CRT1);
-- } else {
-- ivideo.disp_state = DISPMODE_SINGLE | DISPTYPE_CRT1;
-+
-+ ivideo.currentvbflags = ivideo.vbflags & VB_VIDEOBRIDGE;
-+
-+ if(ivideo.vbflags & VB_VIDEOBRIDGE) {
-+ if(sisfb_crt2type != -1) {
-+ if((sisfb_crt2type == CRT2_LCD) && (ivideo.vbflags & CRT2_LCD)) {
-+ ivideo.currentvbflags |= CRT2_LCD;
-+ } else if(sisfb_crt2type != CRT2_LCD) {
-+ ivideo.currentvbflags |= sisfb_crt2type;
-+ }
-+ } else {
-+ /* Chrontel 700x TV detection often unreliable, therefore use a
-+ * different default order on such machines
-+ */
-+ if((sisvga_engine == SIS_300_VGA) && (ivideo.vbflags & VB_CHRONTEL)) {
-+ if(ivideo.vbflags & CRT2_LCD) ivideo.currentvbflags |= CRT2_LCD;
-+ else if(ivideo.vbflags & CRT2_TV) ivideo.currentvbflags |= CRT2_TV;
-+ else if(ivideo.vbflags & CRT2_VGA) ivideo.currentvbflags |= CRT2_VGA;
-+ } else {
-+ if(ivideo.vbflags & CRT2_TV) ivideo.currentvbflags |= CRT2_TV;
-+ else if(ivideo.vbflags & CRT2_LCD) ivideo.currentvbflags |= CRT2_LCD;
-+ else if(ivideo.vbflags & CRT2_VGA) ivideo.currentvbflags |= CRT2_VGA;
-+ }
-+ }
- }
-
-- if (ivideo.disp_state & DISPTYPE_LCD) {
-- if (!enable_dstn) {
-- inSISIDXREG(SISCR, IND_SIS_LCD_PANEL, reg);
-- reg &= 0x0f;
-- if (sisvga_engine == SIS_300_VGA) {
-- sishw_ext.ulCRT2LCDType = sis300paneltype[reg];
-- } else {
-- sishw_ext.ulCRT2LCDType = sis310paneltype[reg];
-- }
-- } else {
-- /* TW: FSTN/DSTN */
-- sishw_ext.ulCRT2LCDType = LCD_320x480;
-- }
-+ if(ivideo.vbflags & CRT2_LCD) {
-+ inSISIDXREG(SISCR, IND_SIS_LCD_PANEL, reg);
-+ reg &= 0x0f;
-+ if(sisvga_engine == SIS_300_VGA) {
-+ sishw_ext.ulCRT2LCDType = sis300paneltype[reg];
-+ } else {
-+ sishw_ext.ulCRT2LCDType = sis310paneltype[reg];
-+ }
- }
-
- sisfb_detectedpdc = 0;
-@@ -4289,9 +4650,7 @@ int __init sisfb_init(void)
- #ifdef CONFIG_FB_SIS_300
- /* TW: Save the current PanelDelayCompensation if the LCD is currently used */
- if(sisvga_engine == SIS_300_VGA) {
-- if((sishw_ext.usExternalChip == 0x01) || /* LVDS */
-- (sishw_ext.usExternalChip == 0x05) || /* LVDS+Chrontel */
-- (sishw_ext.Is301BDH)) { /* 301B-DH */
-+ if(ivideo.vbflags & (VB_LVDS | VB_30xBDH)) {
- int tmp;
- inSISIDXREG(SISCR,0x30,tmp);
- if(tmp & 0x20) {
-@@ -4320,54 +4679,57 @@ int __init sisfb_init(void)
- #ifdef CONFIG_FB_SIS_315
- /* TW: Try to find about LCDA */
- if(sisvga_engine == SIS_315_VGA) {
-- if((sishw_ext.ujVBChipID == VB_CHIP_302B) ||
-- (sishw_ext.ujVBChipID == VB_CHIP_301LV) ||
-- (sishw_ext.ujVBChipID == VB_CHIP_302LV)) {
-- int tmp;
-- inSISIDXREG(SISCR,0x34,tmp);
-- if(tmp <= 0x13) {
-- /* Currently on LCDA? (Some BIOSes leave CR38) */
-- inSISIDXREG(SISCR,0x38,tmp);
-- if((tmp & 0x03) == 0x03) {
-- SiS_Pr.SiS_UseLCDA = TRUE;
-- } else {
-- /* Currently on LCDA? (Some newer BIOSes set D0 in CR35) */
-- inSISIDXREG(SISCR,0x35,tmp);
-- if(tmp & 0x01) {
-- SiS_Pr.SiS_UseLCDA = TRUE;
-- } else {
-- /* Currently on LCD? If so, we can find out
-- by peeking the mode register
-- */
-- inSISIDXREG(SISCR,0x30,tmp);
-- if(tmp & 0x20) {
-- inSISIDXREG(SISPART1,0x13,tmp);
-- if(tmp & 0x04) {
-- SiS_Pr.SiS_UseLCDA = TRUE;
-- }
-- }
-- }
-- }
-- }
-- if(SiS_Pr.SiS_UseLCDA) {
-- sisfb_detectedlcda = 0x03;
-- printk(KERN_INFO
-- "sisfb: Bridge uses LCDA for low resolution and text modes\n");
-- }
-+ if(ivideo.vbflags & (VB_302B | VB_301LV | VB_302LV)) {
-+ int tmp;
-+ inSISIDXREG(SISCR,0x34,tmp);
-+ if((tmp <= 0x13) || (tmp == 0xff)) {
-+ /* Currently on LCDA? (Some BIOSes leave CR38) */
-+ inSISIDXREG(SISCR,0x38,tmp);
-+ if((tmp & 0x03) == 0x03) SiS_Pr.SiS_UseLCDA = TRUE;
-+ else {
-+ /* Currently on LCDA? (Some newer BIOSes set D0 in CR35) */
-+ inSISIDXREG(SISCR,0x35,tmp);
-+ if(tmp & 0x01) SiS_Pr.SiS_UseLCDA = TRUE;
-+ else {
-+ /* Currently on LCD? If so, we can find out
-+ * by peeking the mode register
-+ */
-+ inSISIDXREG(SISCR,0x30,tmp);
-+ if(tmp & 0x20) {
-+ inSISIDXREG(SISPART1,0x13,tmp);
-+ if(tmp & 0x04) SiS_Pr.SiS_UseLCDA = TRUE;
-+ }
-+ }
-+ }
-+ }
-+ if(SiS_Pr.SiS_UseLCDA) {
-+ sisfb_detectedlcda = 0x03;
-+ printk(KERN_INFO
-+ "sisfb: Bridge uses LCDA for low resolution and text modes\n");
-+ }
- }
- }
- #endif
- #endif
-
-+ if (!sisfb_crt1off) {
-+ sisfb_handle_ddc(&sisfb_thismonitor, 0);
-+ } else {
-+ if ((ivideo.vbflags & (VB_301|VB_301B|VB_302B)) &&
-+ (ivideo.vbflags & (CRT2_VGA | CRT2_LCD))) {
-+ sisfb_handle_ddc(&sisfb_thismonitor, 1);
-+ }
-+ }
-+
- if (sisfb_mode_idx >= 0)
-- sisfb_mode_idx = sisfb_validate_mode(sisfb_mode_idx);
-+ sisfb_mode_idx = sisfb_validate_mode(sisfb_mode_idx, ivideo.currentvbflags);
-
- if (sisfb_mode_idx < 0) {
-- switch (ivideo.disp_state & DISPTYPE_DISP2) {
-- case DISPTYPE_LCD:
-+ switch (ivideo.currentvbflags & VB_DISPTYPE_DISP2) {
-+ case CRT2_LCD:
- sisfb_mode_idx = DEFAULT_LCDMODE;
- break;
-- case DISPTYPE_TV:
-+ case CRT2_TV:
- sisfb_mode_idx = DEFAULT_TVMODE;
- break;
- default:
-@@ -4379,39 +4741,27 @@ int __init sisfb_init(void)
- sisfb_mode_no = sisbios_mode[sisfb_mode_idx].mode_no;
-
- if (ivideo.refresh_rate != 0)
-- sisfb_search_refresh_rate(ivideo.refresh_rate);
-+ sisfb_search_refresh_rate(ivideo.refresh_rate, sisfb_mode_idx);
-
- if (sisfb_rate_idx == 0) {
- sisfb_rate_idx = sisbios_mode[sisfb_mode_idx].rate_idx;
- ivideo.refresh_rate = 60;
- }
-
-+ if (sisfb_thismonitor.datavalid) {
-+ if(!sisfb_verify_rate(&sisfb_thismonitor, sisfb_mode_idx,
-+ sisfb_rate_idx, ivideo.refresh_rate)) {
-+ printk(KERN_INFO "sisfb: WARNING: Refresh rate exceeds monitor specs!\n");
-+ }
-+ }
-+
- ivideo.video_bpp = sisbios_mode[sisfb_mode_idx].bpp;
- ivideo.video_vwidth = ivideo.video_width = sisbios_mode[sisfb_mode_idx].xres;
- ivideo.video_vheight = ivideo.video_height = sisbios_mode[sisfb_mode_idx].yres;
- ivideo.org_x = ivideo.org_y = 0;
- ivideo.video_linelength = ivideo.video_width * (ivideo.video_bpp >> 3);
-- switch(ivideo.video_bpp) {
-- case 8:
-- ivideo.DstColor = 0x0000;
-- ivideo.SiS310_AccelDepth = 0x00000000;
-- ivideo.video_cmap_len = 256;
-- break;
-- case 16:
-- ivideo.DstColor = 0x8000;
-- ivideo.SiS310_AccelDepth = 0x00010000;
-- ivideo.video_cmap_len = 16;
-- break;
-- case 32:
-- ivideo.DstColor = 0xC000;
-- ivideo.SiS310_AccelDepth = 0x00020000;
-- ivideo.video_cmap_len = 16;
-- break;
-- default:
-- ivideo.video_cmap_len = 16;
-- printk(KERN_INFO "sisfb: Unsupported depth %d", ivideo.video_bpp);
-- break;
-- }
-+
-+ sisfb_set_vparms();
-
- #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-
-@@ -4424,23 +4774,45 @@ int __init sisfb_init(void)
- sisfb_pre_setmode();
-
- if (SiSSetMode(&SiS_Pr, &sishw_ext, sisfb_mode_no) == 0) {
-- printk(KERN_ERR "sisfb: Setting mode[0x%x] failed, using default mode\n",
-+ printk(KERN_ERR "sisfb: Fatal error: Setting mode[0x%x] failed\n",
- sisfb_mode_no);
-- return -1;
-+ vfree(sishw_ext.pSR);
-+ vfree(sishw_ext.pCR);
-+ release_mem_region(ivideo.video_base, ivideo.video_size);
-+ release_mem_region(ivideo.mmio_base, sisfb_mmio_size);
-+ return -EINVAL;
- }
-
- outSISIDXREG(SISSR, IND_SIS_PASSWORD, SIS_PASSWORD);
-
- sisfb_post_setmode();
-+
-+ ivideo.accel = 0;
-+ if(sisfb_accel) {
-+ ivideo.accel = -1;
-+ default_var.accel_flags |= FB_ACCELF_TEXT;
-+ sisfb_initaccel();
-+ }
-
- sisfb_crtc_to_var(&default_var);
-
-+ sis_fb_info.node = -1;
-+ sis_fb_info.flags = FBINFO_FLAG_DEFAULT;
-+ sis_fb_info.blank = &sisfb_blank;
-+ sis_fb_info.fbops = &sisfb_ops;
-+ sis_fb_info.switch_con = &sisfb_switch;
-+ sis_fb_info.updatevar = &sisfb_update_var;
-+ sis_fb_info.changevar = NULL;
-+ sis_fb_info.disp = &sis_disp;
-+
-+ sisfb_set_disp(-1, &default_var, &sis_fb_info);
-+
- #else /* --------- For 2.5: Setup a somewhat sane default var ------------ */
-
- printk(KERN_INFO "sisfb: Default mode is %dx%dx%d (%dHz)\n",
- ivideo.video_width, ivideo.video_height, ivideo.video_bpp,
- ivideo.refresh_rate);
--
-+
- default_var.xres = default_var.xres_virtual = ivideo.video_width;
- default_var.yres = default_var.yres_virtual = ivideo.video_height;
- default_var.bits_per_pixel = ivideo.video_bpp;
-@@ -4457,50 +4829,26 @@ int __init sisfb_init(void)
- &default_var.upper_margin, &default_var.lower_margin,
- &default_var.hsync_len, &default_var.vsync_len,
- &default_var.sync, &default_var.vmode)) {
--
-- if((default_var.vmode & FB_VMODE_MASK) == FB_VMODE_INTERLACED) {
-- default_var.yres <<= 1;
-- default_var.yres_virtual <<= 1;
-- } else if((default_var.vmode & FB_VMODE_MASK) == FB_VMODE_DOUBLE) {
-- default_var.pixclock >>= 1;
-- default_var.yres >>= 1;
-- default_var.yres_virtual >>= 1;
-- }
--
-+ if((default_var.vmode & FB_VMODE_MASK) == FB_VMODE_DOUBLE) {
-+ default_var.pixclock <<= 1;
-+ }
- }
--#ifdef SISFB_PAN
-- if(sisfb_ypan) {
-- default_var.yres_virtual =
-- ivideo.heapstart / (default_var.xres * (default_var.bits_per_pixel >> 3));
-- if(default_var.yres_virtual <= default_var.yres) {
-- default_var.yres_virtual = default_var.yres;
-- }
-- }
--#endif
-
--#endif
--
- ivideo.accel = 0;
- if(sisfb_accel) {
- ivideo.accel = -1;
- default_var.accel_flags |= FB_ACCELF_TEXT;
- sisfb_initaccel();
- }
-+
-+ if(sisfb_ypan) {
-+ default_var.yres_virtual =
-+ ivideo.heapstart / (default_var.xres * (default_var.bits_per_pixel >> 3));
-+ if(default_var.yres_virtual <= default_var.yres) {
-+ default_var.yres_virtual = default_var.yres;
-+ }
-+ }
-
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0) /* ---- 2.4 series init ---- */
-- sis_fb_info.node = -1;
-- sis_fb_info.flags = FBINFO_FLAG_DEFAULT;
-- sis_fb_info.blank = &sisfb_blank;
-- sis_fb_info.fbops = &sisfb_ops;
-- sis_fb_info.switch_con = &sisfb_switch;
-- sis_fb_info.updatevar = &sisfb_update_var;
-- sis_fb_info.changevar = NULL;
-- sis_fb_info.disp = &sis_disp;
--
-- sisfb_set_disp(-1, &default_var, &sis_fb_info);
--#endif
--
--#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0) /* ---- 2.5 series init ---- */
- sis_fb_info.flags = FBINFO_FLAG_DEFAULT;
- sis_fb_info.var = default_var;
- sis_fb_info.fix = sisfb_fix;
-@@ -4513,6 +4861,8 @@ int __init sisfb_init(void)
- fb_alloc_cmap(&sis_fb_info.cmap, 256 , 0);
- #endif
-
-+ printk(KERN_INFO "sisfb: Initial vbflags 0x%lx\n", ivideo.vbflags);
-+
- #ifdef CONFIG_MTRR
- ivideo.mtrr = mtrr_add((unsigned int) ivideo.video_base,
- (unsigned int) ivideo.video_size,
-@@ -4526,11 +4876,17 @@ int __init sisfb_init(void)
- vc_resize_con(1, 1, 0);
- #endif
-
-- TWDEBUG("Before calling register_framebuffer");
--
-- if(register_framebuffer(&sis_fb_info) < 0)
-+ if(register_framebuffer(&sis_fb_info) < 0) {
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
-+ vfree(sishw_ext.pSR);
-+ vfree(sishw_ext.pCR);
-+ release_mem_region(ivideo.video_base, ivideo.video_size);
-+ release_mem_region(ivideo.mmio_base, sisfb_mmio_size);
-+#endif
-+ printk(KERN_ERR "sisfb: Fatal error: Failed to register framebuffer\n");
- return -EINVAL;
--
-+ }
-+
- sisfb_registered = 1;
-
- printk(KERN_INFO "sisfb: Installed SISFB_GET_INFO ioctl (%x)\n", SISFB_GET_INFO);
-@@ -4547,9 +4903,11 @@ int __init sisfb_init(void)
-
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
- printk(KERN_INFO "fb%d: %s frame buffer device, Version %d.%d.%02d\n",
-- sis_fb_info.node, myid, VER_MAJOR, VER_MINOR, VER_LEVEL);
-+ sis_fb_info.node, myid, VER_MAJOR, VER_MINOR, VER_LEVEL);
- #endif
-
-+ printk(KERN_INFO "sisfb: (C) 2001-2003 Thomas Winischhofer. All rights reserved.\n");
-+
- } /* TW: if mode = "none" */
- return 0;
- }
-@@ -4562,7 +4920,6 @@ static int vesa = -1;
- static unsigned int rate = 0;
- static unsigned int crt1off = 1;
- static unsigned int mem = 0;
--static unsigned int dstn = 0;
- static char *forcecrt2type = NULL;
- static int forcecrt1 = -1;
- static char *queuemode = NULL;
-@@ -4575,25 +4932,31 @@ static int inverse = 0;
- static int userom = 1;
- static int useoem = -1;
- static char *tvstandard = NULL;
-+static int nocrt2rate = 0;
-
--MODULE_DESCRIPTION("SiS 300/540/630/730/315/550/650/740/330 framebuffer driver");
-+MODULE_DESCRIPTION("SiS 300/540/630/730/315/550/650/740/330/660 framebuffer driver");
- MODULE_LICENSE("GPL");
--MODULE_AUTHOR("SiS; Thomas Winischhofer <thomas@winischhofer.net>; Various others");
-+MODULE_AUTHOR("Thomas Winischhofer <thomas@winischhofer.net>; SiS; Various others");
-
- #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
- MODULE_PARM(mode, "s");
- MODULE_PARM_DESC(mode,
- "\nSelects the desired display mode in the format [X]x[Y]x[Depth], eg.\n"
-- "800x600x16 (default: none if sisfb is a module; this leaves the\n"
-- "console untouched and the driver will only do the video memory\n"
-- "management for eg. DRM/DRI; 800x600x8 if sisfb is in the kernel)");
-+ "1024x768x16. Other formats supported include XxY-Depth and\n"
-+ "XxY-Depth@Rate. If the parameter is only one (decimal or hexadecimal)\n"
-+ "number, it will be interpreted as a VESA mode number. (default: none if\n"
-+ "sisfb is a module; this leaves the console untouched and the driver will\n"
-+ "only do the video memory management for eg. DRM/DRI; 800x600x8 if sisfb\n"
-+ "is in the kernel)");
- #endif
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
- MODULE_PARM(mode, "s");
- MODULE_PARM_DESC(mode,
-- "\nSelects the desired default display mode in the format [X]x[Y]x[Depth],\n"
-- "eg. 1024x768x16 (default: 800x600x8)");
--#endif
-+ "\nSelects the desired default display mode in the format XxYxDepth,\n"
-+ "eg. 1024x768x16. Other formats supported include XxY-Depth and\n"
-+ "XxY-Depth@Rate. If the parameter is only one (decimal or hexadecimal)\n"
-+ "number, it will be interpreted as a VESA mode number. (default: 800x600x8)");
-+#endif
-
- #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
- MODULE_PARM(vesa, "i");
-@@ -4603,17 +4966,18 @@ MODULE_PARM_DESC(vesa,
- "and the driver will only do the video memory management for eg. DRM/DRI;\n"
- "0x0103 if sisfb is in the kernel)");
- #endif
--#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
- MODULE_PARM(vesa, "i");
- MODULE_PARM_DESC(vesa,
- "\nSelects the desired default display mode by VESA defined mode number, eg.\n"
- "0x117 (default: 0x0103)");
--#endif
-+#endif
-
- MODULE_PARM(rate, "i");
- MODULE_PARM_DESC(rate,
- "\nSelects the desired vertical refresh rate for CRT1 (external VGA) in Hz.\n"
-- "(default: 60)");
-+ "If the mode is specified in the format XxY-Depth@Rate, this parameter\n"
-+ "will be ignored (default: 60)");
-
- MODULE_PARM(crt1off, "i");
- MODULE_PARM_DESC(crt1off,
-@@ -4624,14 +4988,9 @@ MODULE_PARM_DESC(filter,
- "\nSelects TV flicker filter type (only for systems with a SiS301 video bridge).\n"
- "(Possible values 0-7, default: [no filter])");
-
--MODULE_PARM(dstn, "i");
--MODULE_PARM_DESC(dstn,
-- "\nSelects DSTN/FSTN display mode for SiS550. This sets CRT2 type to LCD and\n"
-- "overrides forcecrt2type setting. (1=ON, 0=OFF) (default: 0)");
--
- MODULE_PARM(queuemode, "s");
- MODULE_PARM_DESC(queuemode,
-- "\nSelects the queue mode on 315/550/650/740/330. Possible choices are AGP, VRAM or\n"
-+ "\nSelects the queue mode on 315/550/650/740/330/660. Possible choices are AGP, VRAM,\n"
- "MMIO. AGP is only available if the kernel has AGP support. The queue mode is\n"
- "important to programs using the 2D/3D accelerator of the SiS chip. The modes\n"
- "require a totally different way of programming the engines. If any mode than\n"
-@@ -4673,56 +5032,61 @@ MODULE_PARM_DESC(pdc,
- MODULE_PARM(noaccel, "i");
- MODULE_PARM_DESC(noaccel,
- "\nIf set to anything other than 0, 2D acceleration and y-panning will be\n"
-- "disabled. (default: 0)");
-+ "disabled. (default: 0)");
-
- MODULE_PARM(noypan, "i");
- MODULE_PARM_DESC(noypan,
- "\nIf set to anything other than 0, y-panning will be disabled and scrolling\n"
-- "will be performed by redrawing the screen. This required 2D acceleration, so\n"
-- "if the option noaccel is set, y-panning will be disabled. (default: 0)");
-+ "will be performed by redrawing the screen. This required 2D acceleration, so\n"
-+ "if the option noaccel is set, y-panning will be disabled. (default: 0)");
-
- #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
- MODULE_PARM(inverse, "i");
- MODULE_PARM_DESC(inverse,
- "\nSetting this to anything but 0 should invert the display colors, but this\n"
-- "does not seem to work. (default: 0)");
-+ "does not seem to work. (default: 0)");
- #endif
-
- MODULE_PARM(userom, "i");
- MODULE_PARM_DESC(userom,
- "\nSetting this to 0 keeps sisfb from using the video BIOS data which is needed\n"
-- "for some LCD and TV setup. (default: 1)");
-+ "for some LCD and TV setup. (default: 1)");
-
- MODULE_PARM(useoem, "i");
- MODULE_PARM_DESC(useoem,
- "\nSetting this to 0 keeps sisfb from using its internel OEM data for some LCD\n"
-- "panels and TV connector types. (default: auto)");
-+ "panels and TV connector types. (default: auto)");
-
- MODULE_PARM(tvstandard, "s");
- MODULE_PARM_DESC(tvstandard,
- "\nThis allows overriding the BIOS default for the TV standard. Valid choices are\n"
-- "pal and ntsc. (default: auto)");
-+ "pal and ntsc. (default: auto)");
-
-+MODULE_PARM(nocrt2rate, "i");
-+MODULE_PARM_DESC(nocrt2rate,
-+ "\nSetting this to 1 will force the driver to use the default refresh rate for\n"
-+ "CRT2 if CRT2 type is VGA. (default: 0, use same rate as crt1)");
-+
- int init_module(void)
- {
- int err;
--
-+
-+ ivideo.refresh_rate = sisfb_parm_rate = rate;
-+
- if(mode)
-- sisfb_search_mode(mode);
-+ sisfb_search_mode(mode, FALSE);
- else if(vesa != -1)
-- sisfb_search_vesamode(vesa);
-- else
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+ sisfb_search_vesamode(vesa, FALSE);
-+ else
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
- /* For 2.4, set mode=none if no mode is given */
- sisfb_mode_idx = MODE_INDEX_NONE;
- #endif
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
-- /* For 2.5, we don't need this "mode=none" stuff anymore */
-+ /* For 2.5, we don't need this "mode=none" stuff anymore */
- sisfb_mode_idx = DEFAULT_MODE;
- #endif
-
-- ivideo.refresh_rate = rate;
--
- if(forcecrt2type)
- sisfb_search_crt2type(forcecrt2type);
-
-@@ -4745,9 +5109,6 @@ int init_module(void)
-
- if(noypan == 1) sisfb_ypan = 0;
- else if(noypan == 0) sisfb_ypan = 1;
--
-- /* TW: Panning only with acceleration */
-- if(sisfb_accel == 0) sisfb_ypan = 0;
-
- #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
- if(inverse) sisfb_inverse = 1;
-@@ -4759,17 +5120,11 @@ int init_module(void)
-
- sisfb_useoem = useoem;
-
-- enable_dstn = dstn;
--
-- /* TW: DSTN overrules forcecrt2type */
-- if (enable_dstn) sisfb_crt2type = DISPTYPE_LCD;
--
- if (queuemode) sisfb_search_queuemode(queuemode);
-
- /* TW: If other queuemode than MMIO, disable 2D accel and ypan */
- if((sisfb_queuemode != -1) && (sisfb_queuemode != MMIO_CMD)) {
- sisfb_accel = 0;
-- sisfb_ypan = 0;
- }
-
- if(pdc) {
-@@ -4777,6 +5132,8 @@ int init_module(void)
- sisfb_pdc = pdc & 0x3c;
- }
- }
-+
-+ sisfb_nocrt2rate = nocrt2rate;
-
- if((err = sisfb_init()) < 0) return err;
-
-@@ -4788,7 +5145,7 @@ void cleanup_module(void)
- /* TW: Release mem regions */
- release_mem_region(ivideo.video_base, ivideo.video_size);
- release_mem_region(ivideo.mmio_base, sisfb_mmio_size);
--
-+
- #ifdef CONFIG_MTRR
- /* TW: Release MTRR region */
- if(ivideo.mtrr) {
-@@ -4802,11 +5159,17 @@ void cleanup_module(void)
- if(sisfb_registered) {
- unregister_framebuffer(&sis_fb_info);
- }
--
-+
- if(sishw_ext.pSR) vfree(sishw_ext.pSR);
- if(sishw_ext.pCR) vfree(sishw_ext.pCR);
-
-- /* TODO: Restore the initial mode */
-+ /* TODO: Restore the initial mode
-+ * This sounds easy but is as good as impossible
-+ * on many machines with SiS chip and video bridge
-+ * since text modes are always set up differently
-+ * from machine to machine. Depends on the type
-+ * of integration between chipset and bridge.
-+ */
-
- printk(KERN_INFO "sisfb: Module unloaded\n");
- }
---- linux-2.6.0-test1/drivers/video/sis/sis_main.h 2003-06-14 12:18:04.000000000 -0700
-+++ 25/drivers/video/sis/sis_main.h 2003-07-19 17:04:55.000000000 -0700
-@@ -1,8 +1,6 @@
- #ifndef _SISFB_MAIN
- #define _SISFB_MAIN
-
--/* Comments and changes marked with "TW" by Thomas Winischhofer <thomas@winischhofer.net> */
--
- #include "vstruct.h"
-
- /* ------------------- Constant Definitions ------------------------- */
-@@ -14,11 +12,11 @@
-
- #define VER_MAJOR 1
- #define VER_MINOR 6
--#define VER_LEVEL 1
-+#define VER_LEVEL 11
-
- #include "sis.h"
-
--/* TW: To be included in pci_ids.h */
-+/* To be included in pci_ids.h */
- #ifndef PCI_DEVICE_ID_SI_650_VGA
- #define PCI_DEVICE_ID_SI_650_VGA 0x6325
- #endif
-@@ -31,6 +29,12 @@
- #ifndef PCI_DEVICE_ID_SI_330
- #define PCI_DEVICE_ID_SI_330 0x0330
- #endif
-+#ifndef PCI_DEVICE_ID_SI_660
-+#define PCI_DEVICE_ID_SI_660 0x0660
-+#endif
-+#ifndef PCI_DEVICE_ID_SI_660_VGA
-+#define PCI_DEVICE_ID_SI_660_VGA 0x6330
-+#endif
-
- /* To be included in fb.h */
- #ifndef FB_ACCEL_SIS_GLAMOUR_2
-@@ -59,7 +63,6 @@
- #define COMMAND_QUEUE_THRESHOLD 0x1F
- #endif
-
--/* TW */
- #define HW_CURSOR_AREA_SIZE_315 0x4000 /* 16K */
- #define HW_CURSOR_AREA_SIZE_300 0x1000 /* 4K */
-
-@@ -283,45 +286,43 @@
- /* Fbcon variables */
- static struct fb_info sis_fb_info;
-
--static int video_type = FB_TYPE_PACKED_PIXELS;
--
- static struct fb_var_screeninfo default_var = {
-- .xres = 0,
-- .yres = 0,
-- .xres_virtual = 0,
-- .yres_virtual = 0,
-- .xoffset = 0,
-- .yoffset = 0,
-- .bits_per_pixel = 0,
-- .grayscale = 0,
-- .red = {0, 8, 0},
-- .green = {0, 8, 0},
-- .blue = {0, 8, 0},
-- .transp = {0, 0, 0},
-- .nonstd = 0,
-- .activate = FB_ACTIVATE_NOW,
-- .height = -1,
-- .width = -1,
-- .accel_flags = 0,
-- .pixclock = 0,
-- .left_margin = 0,
-- .right_margin = 0,
-- .upper_margin = 0,
-- .lower_margin = 0,
-- .hsync_len = 0,
-- .vsync_len = 0,
-- .sync = 0,
-- .vmode = FB_VMODE_NONINTERLACED,
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-- .reserved = {0, 0, 0, 0, 0, 0}
--#endif
-+ .xres = 0,
-+ .yres = 0,
-+ .xres_virtual = 0,
-+ .yres_virtual = 0,
-+ .xoffset = 0,
-+ .yoffset = 0,
-+ .bits_per_pixel = 0,
-+ .grayscale = 0,
-+ .red = {0, 8, 0},
-+ .green = {0, 8, 0},
-+ .blue = {0, 8, 0},
-+ .transp = {0, 0, 0},
-+ .nonstd = 0,
-+ .activate = FB_ACTIVATE_NOW,
-+ .height = -1,
-+ .width = -1,
-+ .accel_flags = 0,
-+ .pixclock = 0,
-+ .left_margin = 0,
-+ .right_margin = 0,
-+ .upper_margin = 0,
-+ .lower_margin = 0,
-+ .hsync_len = 0,
-+ .vsync_len = 0,
-+ .sync = 0,
-+ .vmode = FB_VMODE_NONINTERLACED,
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+ .reserved = {0, 0, 0, 0, 0, 0}
-+#endif
- };
-
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
- static struct fb_fix_screeninfo sisfb_fix = {
- .id = "SiS",
- .type = FB_TYPE_PACKED_PIXELS,
-- .xpanstep = 1,
-+ .xpanstep = 0,
- .ypanstep = 1,
- };
- static char myid[20];
-@@ -347,26 +348,24 @@ static union {
- } sis_fbcon_cmap;
-
- static int sisfb_inverse = 0;
-+static int currcon = 0;
- #endif
-
--/* display status */
-+/* global flags */
- static int sisfb_off = 0;
- static int sisfb_crt1off = 0;
- static int sisfb_forcecrt1 = -1;
- static int sisvga_enabled = 0;
- static int sisfb_userom = 1;
- static int sisfb_useoem = -1;
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
--static int currcon = 0;
--#endif
--
--/* global flags */
--static int sisfb_registered;
--static int sisfb_tvmode = 0;
-+static int sisfb_parm_rate = -1;
-+static int sisfb_registered = 0;
- static int sisfb_mem = 0;
- static int sisfb_pdc = 0;
--static int enable_dstn = 0;
- static int sisfb_ypan = -1;
-+static int sisfb_nocrt2rate = 0;
-+static int sisfb_dstn = 0;
-+static int sisfb_fstn = 0;
-
- VGA_ENGINE sisvga_engine = UNKNOWN_VGA;
- int sisfb_accel = -1;
-@@ -375,22 +374,22 @@ int sisfb_accel = -1;
- static int sisfb_hwcursor_size = 0;
- static int sisfb_CRT2_write_enable = 0;
-
--int sisfb_crt2type = -1; /* TW: CRT2 type (for overriding autodetection) */
--int sisfb_tvplug = -1; /* PR: Tv plug type (for overriding autodetection) */
-+int sisfb_crt2type = -1; /* CRT2 type (for overriding autodetection) */
-+int sisfb_tvplug = -1; /* Tv plug type (for overriding autodetection) */
-
--int sisfb_queuemode = -1; /* TW: Use MMIO queue mode by default (310/325 series only) */
-+int sisfb_queuemode = -1; /* Use MMIO queue mode by default (315 series only) */
-
- unsigned char sisfb_detectedpdc = 0;
-
- unsigned char sisfb_detectedlcda = 0xff;
-
--/* data for sis components */
-+/* data for sis hardware ("par") */
- struct video_info ivideo;
-
--/* TW: For ioctl SISFB_GET_INFO */
-+/* For ioctl SISFB_GET_INFO */
- sisfb_info sisfbinfo;
-
--/* TW: Hardware extension; contains data on hardware */
-+/* Hardware extension; contains data on hardware */
- HW_DEVICE_EXTENSION sishw_ext = {
- NULL, NULL, FALSE, NULL, NULL,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-@@ -399,10 +398,10 @@ HW_DEVICE_EXTENSION sishw_ext = {
- 0
- };
-
--/* TW: SiS private structure */
-+/* SiS private structure */
- SiS_Private SiS_Pr;
-
--/* card parameters */
-+/* Card parameters */
- static unsigned long sisfb_mmio_size = 0;
- static u8 sisfb_caps = 0;
-
-@@ -412,7 +411,7 @@ typedef enum _SIS_CMDTYPE {
- VM_CMD_QUEUE,
- } SIS_CMDTYPE;
-
--/* Supported SiS Chips list */
-+/* List of supported chips */
- static struct board {
- u16 vendor, device;
- const char *name;
-@@ -426,14 +425,15 @@ static struct board {
- {PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_550_VGA, "SIS 550 VGA"},
- {PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_650_VGA, "SIS 650/M650/651/740 VGA"},
- {PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_330, "SIS 330"},
-+ {PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_660_VGA, "SIS 660 VGA"},
- {0, 0, NULL}
- };
-
- #define MD_SIS300 1
- #define MD_SIS315 2
-
--/* mode table */
--/* NOT const - will be patched for 1280x960 mode number chaos reasons */
-+/* Mode table */
-+/* NOT const - will be patched for 1280x768 mode number chaos reasons */
- struct _sisbios_mode {
- char name[15];
- u8 mode_no;
-@@ -447,14 +447,33 @@ struct _sisbios_mode {
- u16 rows;
- u8 chipset;
- } sisbios_mode[] = {
--#define MODE_INDEX_NONE 0 /* TW: index for mode=none */
-- {"none", 0xFF, 0x0000, 0x0000, 0, 0, 0, 0, 0, 0, MD_SIS300|MD_SIS315}, /* TW: for mode "none" */
-- {"320x240x16", 0x56, 0x0000, 0x0000, 320, 240, 16, 1, 40, 15, MD_SIS315},
-- {"320x480x8", 0x5A, 0x0000, 0x0000, 320, 480, 8, 1, 40, 30, MD_SIS315}, /* TW: FSTN */
-- {"320x480x16", 0x5B, 0x0000, 0x0000, 320, 480, 16, 1, 40, 30, MD_SIS315}, /* TW: FSTN */
-- {"640x480x8", 0x2E, 0x0101, 0x0101, 640, 480, 8, 1, 80, 30, MD_SIS300|MD_SIS315},
-+#define MODE_INDEX_NONE 0 /* index for mode=none */
-+ {"none", 0xff, 0x0000, 0x0000, 0, 0, 0, 0, 0, 0, MD_SIS300|MD_SIS315},
-+ {"320x200x8", 0x59, 0x0138, 0x0000, 320, 200, 8, 1, 40, 12, MD_SIS300|MD_SIS315},
-+ {"320x200x16", 0x41, 0x010e, 0x0000, 320, 200, 16, 1, 40, 12, MD_SIS300|MD_SIS315},
-+ {"320x200x24", 0x4f, 0x0000, 0x0000, 320, 200, 32, 1, 40, 12, MD_SIS300|MD_SIS315}, /* TW: That's for people who mix up color- and fb depth */
-+ {"320x200x32", 0x4f, 0x0000, 0x0000, 320, 200, 32, 1, 40, 12, MD_SIS300|MD_SIS315},
-+ {"320x240x8", 0x50, 0x0132, 0x0000, 320, 240, 8, 1, 40, 15, MD_SIS300|MD_SIS315},
-+ {"320x240x16", 0x56, 0x0135, 0x0000, 320, 240, 16, 1, 40, 15, MD_SIS300|MD_SIS315},
-+ {"320x240x24", 0x53, 0x0000, 0x0000, 320, 240, 32, 1, 40, 15, MD_SIS300|MD_SIS315},
-+ {"320x240x32", 0x53, 0x0000, 0x0000, 320, 240, 32, 1, 40, 15, MD_SIS300|MD_SIS315},
-+ {"320x240x8", 0x5a, 0x0132, 0x0000, 320, 480, 8, 1, 40, 30, MD_SIS315}, /* TW: FSTN */
-+ {"320x240x16", 0x5b, 0x0135, 0x0000, 320, 480, 16, 1, 40, 30, MD_SIS315}, /* TW: FSTN */
-+ {"400x300x8", 0x51, 0x0133, 0x0000, 400, 300, 8, 1, 50, 18, MD_SIS300|MD_SIS315},
-+ {"400x300x16", 0x57, 0x0136, 0x0000, 400, 300, 16, 1, 50, 18, MD_SIS300|MD_SIS315},
-+ {"400x300x24", 0x54, 0x0000, 0x0000, 400, 300, 32, 1, 50, 18, MD_SIS300|MD_SIS315},
-+ {"400x300x32", 0x54, 0x0000, 0x0000, 400, 300, 32, 1, 50, 18, MD_SIS300|MD_SIS315},
-+ {"512x384x8", 0x52, 0x0000, 0x0000, 512, 384, 8, 1, 64, 24, MD_SIS300|MD_SIS315},
-+ {"512x384x16", 0x58, 0x0000, 0x0000, 512, 384, 16, 1, 64, 24, MD_SIS300|MD_SIS315},
-+ {"512x384x24", 0x5c, 0x0000, 0x0000, 512, 384, 32, 1, 64, 24, MD_SIS300|MD_SIS315},
-+ {"512x384x32", 0x5c, 0x0000, 0x0000, 512, 384, 32, 1, 64, 24, MD_SIS300|MD_SIS315},
-+ {"640x400x8", 0x2f, 0x0000, 0x0000, 640, 400, 8, 1, 80, 25, MD_SIS300|MD_SIS315},
-+ {"640x400x16", 0x5d, 0x0000, 0x0000, 640, 400, 16, 1, 80, 25, MD_SIS300|MD_SIS315},
-+ {"640x400x24", 0x5e, 0x0000, 0x0000, 640, 400, 32, 1, 80, 25, MD_SIS300|MD_SIS315},
-+ {"640x400x32", 0x5e, 0x0000, 0x0000, 640, 400, 32, 1, 80, 25, MD_SIS300|MD_SIS315},
-+ {"640x480x8", 0x2e, 0x0101, 0x0101, 640, 480, 8, 1, 80, 30, MD_SIS300|MD_SIS315},
- {"640x480x16", 0x44, 0x0111, 0x0111, 640, 480, 16, 1, 80, 30, MD_SIS300|MD_SIS315},
-- {"640x480x24", 0x62, 0x013a, 0x0112, 640, 480, 32, 1, 80, 30, MD_SIS300|MD_SIS315}, /* TW: That's for people who mix up color- and fb depth */
-+ {"640x480x24", 0x62, 0x013a, 0x0112, 640, 480, 32, 1, 80, 30, MD_SIS300|MD_SIS315},
- {"640x480x32", 0x62, 0x013a, 0x0112, 640, 480, 32, 1, 80, 30, MD_SIS300|MD_SIS315},
- {"720x480x8", 0x31, 0x0000, 0x0000, 720, 480, 8, 1, 90, 30, MD_SIS300|MD_SIS315},
- {"720x480x16", 0x33, 0x0000, 0x0000, 720, 480, 16, 1, 90, 30, MD_SIS300|MD_SIS315},
-@@ -468,59 +487,79 @@ struct _sisbios_mode {
- {"800x480x16", 0x7a, 0x0000, 0x0000, 800, 480, 16, 1, 100, 30, MD_SIS300|MD_SIS315},
- {"800x480x24", 0x76, 0x0000, 0x0000, 800, 480, 32, 1, 100, 30, MD_SIS300|MD_SIS315},
- {"800x480x32", 0x76, 0x0000, 0x0000, 800, 480, 32, 1, 100, 30, MD_SIS300|MD_SIS315},
--#define DEFAULT_MODE 20 /* TW: index for 800x600x8 */
--#define DEFAULT_LCDMODE 20 /* TW: index for 800x600x8 */
--#define DEFAULT_TVMODE 20 /* TW: index for 800x600x8 */
-+#define DEFAULT_MODE 39 /* index for 800x600x8 */
-+#define DEFAULT_LCDMODE 39 /* index for 800x600x8 */
-+#define DEFAULT_TVMODE 39 /* index for 800x600x8 */
- {"800x600x8", 0x30, 0x0103, 0x0103, 800, 600, 8, 2, 100, 37, MD_SIS300|MD_SIS315},
- {"800x600x16", 0x47, 0x0114, 0x0114, 800, 600, 16, 2, 100, 37, MD_SIS300|MD_SIS315},
- {"800x600x24", 0x63, 0x013b, 0x0115, 800, 600, 32, 2, 100, 37, MD_SIS300|MD_SIS315},
- {"800x600x32", 0x63, 0x013b, 0x0115, 800, 600, 32, 2, 100, 37, MD_SIS300|MD_SIS315},
-+ {"848x480x8", 0x39, 0x0000, 0x0000, 848, 480, 8, 2, 106, 30, MD_SIS300|MD_SIS315},
-+ {"848x480x16", 0x3b, 0x0000, 0x0000, 848, 480, 16, 2, 106, 30, MD_SIS300|MD_SIS315},
-+ {"848x480x24", 0x3e, 0x0000, 0x0000, 848, 480, 32, 2, 106, 30, MD_SIS300|MD_SIS315},
-+ {"848x480x32", 0x3e, 0x0000, 0x0000, 848, 480, 32, 2, 106, 30, MD_SIS300|MD_SIS315},
-+ {"856x480x8", 0x3f, 0x0000, 0x0000, 856, 480, 8, 2, 107, 30, MD_SIS300|MD_SIS315},
-+ {"856x480x16", 0x42, 0x0000, 0x0000, 856, 480, 16, 2, 107, 30, MD_SIS300|MD_SIS315},
-+ {"856x480x24", 0x45, 0x0000, 0x0000, 856, 480, 32, 2, 107, 30, MD_SIS300|MD_SIS315},
-+ {"856x480x32", 0x45, 0x0000, 0x0000, 856, 480, 32, 2, 107, 30, MD_SIS300|MD_SIS315},
- {"1024x576x8", 0x71, 0x0000, 0x0000, 1024, 576, 8, 1, 128, 36, MD_SIS300|MD_SIS315},
- {"1024x576x16", 0x74, 0x0000, 0x0000, 1024, 576, 16, 1, 128, 36, MD_SIS300|MD_SIS315},
- {"1024x576x24", 0x77, 0x0000, 0x0000, 1024, 576, 32, 1, 128, 36, MD_SIS300|MD_SIS315},
- {"1024x576x32", 0x77, 0x0000, 0x0000, 1024, 576, 32, 1, 128, 36, MD_SIS300|MD_SIS315},
-- {"1024x600x8", 0x20, 0x0000, 0x0000, 1024, 600, 8, 1, 128, 37, MD_SIS300 }, /* TW: 300 series only */
-+ {"1024x600x8", 0x20, 0x0000, 0x0000, 1024, 600, 8, 1, 128, 37, MD_SIS300 },
- {"1024x600x16", 0x21, 0x0000, 0x0000, 1024, 600, 16, 1, 128, 37, MD_SIS300 },
- {"1024x600x24", 0x22, 0x0000, 0x0000, 1024, 600, 32, 1, 128, 37, MD_SIS300 },
- {"1024x600x32", 0x22, 0x0000, 0x0000, 1024, 600, 32, 1, 128, 37, MD_SIS300 },
- {"1024x768x8", 0x38, 0x0105, 0x0105, 1024, 768, 8, 2, 128, 48, MD_SIS300|MD_SIS315},
-- {"1024x768x16", 0x4A, 0x0117, 0x0117, 1024, 768, 16, 2, 128, 48, MD_SIS300|MD_SIS315},
-+ {"1024x768x16", 0x4a, 0x0117, 0x0117, 1024, 768, 16, 2, 128, 48, MD_SIS300|MD_SIS315},
- {"1024x768x24", 0x64, 0x013c, 0x0118, 1024, 768, 32, 2, 128, 48, MD_SIS300|MD_SIS315},
- {"1024x768x32", 0x64, 0x013c, 0x0118, 1024, 768, 32, 2, 128, 48, MD_SIS300|MD_SIS315},
-- {"1152x768x8", 0x23, 0x0000, 0x0000, 1152, 768, 8, 1, 144, 48, MD_SIS300 }, /* TW: 300 series only */
-+ {"1152x768x8", 0x23, 0x0000, 0x0000, 1152, 768, 8, 1, 144, 48, MD_SIS300 },
- {"1152x768x16", 0x24, 0x0000, 0x0000, 1152, 768, 16, 1, 144, 48, MD_SIS300 },
- {"1152x768x24", 0x25, 0x0000, 0x0000, 1152, 768, 32, 1, 144, 48, MD_SIS300 },
- {"1152x768x32", 0x25, 0x0000, 0x0000, 1152, 768, 32, 1, 144, 48, MD_SIS300 },
-+ {"1152x864x8", 0x29, 0x0000, 0x0000, 1152, 864, 8, 1, 144, 54, MD_SIS300|MD_SIS315},
-+ {"1152x864x16", 0x2a, 0x0000, 0x0000, 1152, 864, 16, 1, 144, 54, MD_SIS300|MD_SIS315},
-+ {"1152x864x24", 0x2b, 0x0000, 0x0000, 1152, 864, 32, 1, 144, 54, MD_SIS300|MD_SIS315},
-+ {"1152x864x32", 0x2b, 0x0000, 0x0000, 1152, 864, 32, 1, 144, 54, MD_SIS300|MD_SIS315},
- {"1280x720x8", 0x79, 0x0000, 0x0000, 1280, 720, 8, 1, 160, 45, MD_SIS300|MD_SIS315},
- {"1280x720x16", 0x75, 0x0000, 0x0000, 1280, 720, 16, 1, 160, 45, MD_SIS300|MD_SIS315},
- {"1280x720x24", 0x78, 0x0000, 0x0000, 1280, 720, 32, 1, 160, 45, MD_SIS300|MD_SIS315},
- {"1280x720x32", 0x78, 0x0000, 0x0000, 1280, 720, 32, 1, 160, 45, MD_SIS300|MD_SIS315},
-- {"1280x768x8", 0x23, 0x0000, 0x0000, 1280, 768, 8, 1, 160, 48, MD_SIS315}, /* TW: 310/325 series only */
-- {"1280x768x16", 0x24, 0x0000, 0x0000, 1280, 768, 16, 1, 160, 48, MD_SIS315},
-- {"1280x768x24", 0x25, 0x0000, 0x0000, 1280, 768, 32, 1, 160, 48, MD_SIS315},
-- {"1280x768x32", 0x25, 0x0000, 0x0000, 1280, 768, 32, 1, 160, 48, MD_SIS315},
--#define MODEINDEX_1280x960 48
-- {"1280x960x8", 0x7C, 0x0000, 0x0000, 1280, 960, 8, 1, 160, 60, MD_SIS300|MD_SIS315}, /* TW: Modenumbers being patched */
-- {"1280x960x16", 0x7D, 0x0000, 0x0000, 1280, 960, 16, 1, 160, 60, MD_SIS300|MD_SIS315},
-- {"1280x960x24", 0x7E, 0x0000, 0x0000, 1280, 960, 32, 1, 160, 60, MD_SIS300|MD_SIS315},
-- {"1280x960x32", 0x7E, 0x0000, 0x0000, 1280, 960, 32, 1, 160, 60, MD_SIS300|MD_SIS315},
-- {"1280x1024x8", 0x3A, 0x0107, 0x0107, 1280, 1024, 8, 2, 160, 64, MD_SIS300|MD_SIS315},
-- {"1280x1024x16", 0x4D, 0x011a, 0x011a, 1280, 1024, 16, 2, 160, 64, MD_SIS300|MD_SIS315},
-+#define MODEINDEX_1280x768 75
-+ {"1280x768x8", 0x23, 0x0000, 0x0000, 1280, 768, 8, 1, 160, 48, MD_SIS300|MD_SIS315},
-+ {"1280x768x16", 0x24, 0x0000, 0x0000, 1280, 768, 16, 1, 160, 48, MD_SIS300|MD_SIS315},
-+ {"1280x768x24", 0x25, 0x0000, 0x0000, 1280, 768, 32, 1, 160, 48, MD_SIS300|MD_SIS315},
-+ {"1280x768x32", 0x25, 0x0000, 0x0000, 1280, 768, 32, 1, 160, 48, MD_SIS300|MD_SIS315},
-+ {"1280x960x8", 0x7c, 0x0000, 0x0000, 1280, 960, 8, 1, 160, 60, MD_SIS300|MD_SIS315},
-+ {"1280x960x16", 0x7d, 0x0000, 0x0000, 1280, 960, 16, 1, 160, 60, MD_SIS300|MD_SIS315},
-+ {"1280x960x24", 0x7e, 0x0000, 0x0000, 1280, 960, 32, 1, 160, 60, MD_SIS300|MD_SIS315},
-+ {"1280x960x32", 0x7e, 0x0000, 0x0000, 1280, 960, 32, 1, 160, 60, MD_SIS300|MD_SIS315},
-+ {"1280x1024x8", 0x3a, 0x0107, 0x0107, 1280, 1024, 8, 2, 160, 64, MD_SIS300|MD_SIS315},
-+ {"1280x1024x16", 0x4d, 0x011a, 0x011a, 1280, 1024, 16, 2, 160, 64, MD_SIS300|MD_SIS315},
- {"1280x1024x24", 0x65, 0x013d, 0x011b, 1280, 1024, 32, 2, 160, 64, MD_SIS300|MD_SIS315},
- {"1280x1024x32", 0x65, 0x013d, 0x011b, 1280, 1024, 32, 2, 160, 64, MD_SIS300|MD_SIS315},
-- {"1400x1050x8", 0x26, 0x0000, 0x0000, 1400, 1050, 8, 1, 175, 65, MD_SIS315}, /* TW: 310/325 series only */
-+ {"1360x768x8", 0x48, 0x0000, 0x0000, 1360, 768, 8, 1, 170, 48, MD_SIS300|MD_SIS315},
-+ {"1360x768x16", 0x4b, 0x0000, 0x0000, 1360, 768, 16, 1, 170, 48, MD_SIS300|MD_SIS315},
-+ {"1360x768x24", 0x4e, 0x0000, 0x0000, 1360, 768, 32, 1, 170, 48, MD_SIS300|MD_SIS315},
-+ {"1360x768x32", 0x4e, 0x0000, 0x0000, 1360, 768, 32, 1, 170, 48, MD_SIS300|MD_SIS315},
-+ {"1360x1024x8", 0x67, 0x0000, 0x0000, 1360, 1024, 8, 1, 170, 64, MD_SIS300 },
-+ {"1360x1024x16", 0x6f, 0x0000, 0x0000, 1360, 1024, 16, 1, 170, 64, MD_SIS300 },
-+ {"1360x1024x24", 0x72, 0x0000, 0x0000, 1360, 1024, 32, 1, 170, 64, MD_SIS300 },
-+ {"1360x1024x32", 0x72, 0x0000, 0x0000, 1360, 1024, 32, 1, 170, 64, MD_SIS300 },
-+ {"1400x1050x8", 0x26, 0x0000, 0x0000, 1400, 1050, 8, 1, 175, 65, MD_SIS315},
- {"1400x1050x16", 0x27, 0x0000, 0x0000, 1400, 1050, 16, 1, 175, 65, MD_SIS315},
- {"1400x1050x24", 0x28, 0x0000, 0x0000, 1400, 1050, 32, 1, 175, 65, MD_SIS315},
- {"1400x1050x32", 0x28, 0x0000, 0x0000, 1400, 1050, 32, 1, 175, 65, MD_SIS315},
-- {"1600x1200x8", 0x3C, 0x0130, 0x011c, 1600, 1200, 8, 1, 200, 75, MD_SIS300|MD_SIS315},
-- {"1600x1200x16", 0x3D, 0x0131, 0x011e, 1600, 1200, 16, 1, 200, 75, MD_SIS300|MD_SIS315},
-+ {"1600x1200x8", 0x3c, 0x0130, 0x011c, 1600, 1200, 8, 1, 200, 75, MD_SIS300|MD_SIS315},
-+ {"1600x1200x16", 0x3d, 0x0131, 0x011e, 1600, 1200, 16, 1, 200, 75, MD_SIS300|MD_SIS315},
- {"1600x1200x24", 0x66, 0x013e, 0x011f, 1600, 1200, 32, 1, 200, 75, MD_SIS300|MD_SIS315},
- {"1600x1200x32", 0x66, 0x013e, 0x011f, 1600, 1200, 32, 1, 200, 75, MD_SIS300|MD_SIS315},
- {"1920x1440x8", 0x68, 0x013f, 0x0000, 1920, 1440, 8, 1, 240, 75, MD_SIS300|MD_SIS315},
- {"1920x1440x16", 0x69, 0x0140, 0x0000, 1920, 1440, 16, 1, 240, 75, MD_SIS300|MD_SIS315},
-- {"1920x1440x24", 0x6B, 0x0141, 0x0000, 1920, 1440, 32, 1, 240, 75, MD_SIS300|MD_SIS315},
-- {"1920x1440x32", 0x6B, 0x0141, 0x0000, 1920, 1440, 32, 1, 240, 75, MD_SIS300|MD_SIS315},
-- {"2048x1536x8", 0x6c, 0x0000, 0x0000, 2048, 1536, 8, 1, 256, 96, MD_SIS315}, /* TW: 310/325 series only */
-+ {"1920x1440x24", 0x6b, 0x0141, 0x0000, 1920, 1440, 32, 1, 240, 75, MD_SIS300|MD_SIS315},
-+ {"1920x1440x32", 0x6b, 0x0141, 0x0000, 1920, 1440, 32, 1, 240, 75, MD_SIS300|MD_SIS315},
-+ {"2048x1536x8", 0x6c, 0x0000, 0x0000, 2048, 1536, 8, 1, 256, 96, MD_SIS315},
- {"2048x1536x16", 0x6d, 0x0000, 0x0000, 2048, 1536, 16, 1, 256, 96, MD_SIS315},
- {"2048x1536x24", 0x6e, 0x0000, 0x0000, 2048, 1536, 32, 1, 256, 96, MD_SIS315},
- {"2048x1536x32", 0x6e, 0x0000, 0x0000, 2048, 1536, 32, 1, 256, 96, MD_SIS315},
-@@ -538,37 +577,45 @@ u8 sisfb_rate_idx = 0;
-
- /* TW: CR36 evaluation */
- const USHORT sis300paneltype[] =
-- { LCD_UNKNOWN, LCD_800x600, LCD_1024x768, LCD_1280x1024,
-- LCD_1280x960, LCD_640x480, LCD_1024x600, LCD_1152x768,
-- LCD_320x480, LCD_1024x768, LCD_1024x768, LCD_1024x768,
-- LCD_1024x768, LCD_1024x768, LCD_1024x768, LCD_1024x768 };
-+ { LCD_UNKNOWN, LCD_800x600, LCD_1024x768, LCD_1280x1024,
-+ LCD_1280x960, LCD_640x480, LCD_1024x600, LCD_1152x768,
-+ LCD_1024x768, LCD_1024x768, LCD_1024x768, LCD_1024x768,
-+ LCD_1024x768, LCD_1024x768, LCD_320x480, LCD_1024x768 };
-
- const USHORT sis310paneltype[] =
-- { LCD_UNKNOWN, LCD_800x600, LCD_1024x768, LCD_1280x1024,
-- LCD_640x480, LCD_1024x600, LCD_1152x864, LCD_1280x960,
-- LCD_1152x768, LCD_1400x1050,LCD_1280x768, LCD_1600x1200,
-- LCD_320x480, LCD_1024x768, LCD_1024x768, LCD_1024x768 };
-+ { LCD_UNKNOWN, LCD_800x600, LCD_1024x768, LCD_1280x1024,
-+ LCD_640x480, LCD_1024x600, LCD_1152x864, LCD_1280x960,
-+ LCD_1152x768, LCD_1400x1050, LCD_1280x768, LCD_1600x1200,
-+ LCD_640x480_2, LCD_640x480_3, LCD_320x480, LCD_1024x768 };
-+
-+#define FL_550_DSTN 0x01
-+#define FL_550_FSTN 0x02
-
- static const struct _sis_crt2type {
- char name[10];
- int type_no;
- int tvplug_no;
-+ unsigned short flags;
- } sis_crt2type[] = {
-- {"NONE", 0, -1},
-- {"LCD", DISPTYPE_LCD, -1},
-- {"TV", DISPTYPE_TV, -1},
-- {"VGA", DISPTYPE_CRT2, -1},
-- {"SVIDEO", DISPTYPE_TV, TVPLUG_SVIDEO},
-- {"COMPOSITE", DISPTYPE_TV, TVPLUG_COMPOSITE},
-- {"SCART", DISPTYPE_TV, TVPLUG_SCART},
-- {"none", 0, -1},
-- {"lcd", DISPTYPE_LCD, -1},
-- {"tv", DISPTYPE_TV, -1},
-- {"vga", DISPTYPE_CRT2, -1},
-- {"svideo", DISPTYPE_TV, TVPLUG_SVIDEO},
-- {"composite", DISPTYPE_TV, TVPLUG_COMPOSITE},
-- {"scart", DISPTYPE_TV, TVPLUG_SCART},
-- {"\0", -1, -1}
-+ {"NONE", 0, -1, 0},
-+ {"LCD", CRT2_LCD, -1, 0},
-+ {"TV", CRT2_TV, -1, 0},
-+ {"VGA", CRT2_VGA, -1, 0},
-+ {"SVIDEO", CRT2_TV, TV_SVIDEO, 0},
-+ {"COMPOSITE", CRT2_TV, TV_AVIDEO, 0},
-+ {"SCART", CRT2_TV, TV_SCART, 0},
-+ {"none", 0, -1, 0},
-+ {"lcd", CRT2_LCD, -1, 0},
-+ {"tv", CRT2_TV, -1, 0},
-+ {"vga", CRT2_VGA, -1, 0},
-+ {"svideo", CRT2_TV, TV_SVIDEO, 0},
-+ {"composite", CRT2_TV, TV_AVIDEO, 0},
-+ {"scart", CRT2_TV, TV_SCART, 0},
-+ {"DSTN", CRT2_LCD, -1, FL_550_DSTN},
-+ {"dstn", CRT2_LCD, -1, FL_550_DSTN},
-+ {"FSTN", CRT2_LCD, -1, FL_550_FSTN},
-+ {"fstn", CRT2_LCD, -1, FL_550_FSTN},
-+ {"\0", -1, -1, 0}
- };
-
- /* Queue mode selection for 310 series */
-@@ -590,10 +637,10 @@ static const struct _sis_tvtype {
- char name[6];
- int type_no;
- } sis_tvtype[] = {
-- {"PAL", 1},
-- {"NTSC", 2},
-- {"pal", 1},
-- {"ntsc", 2},
-+ {"PAL", TV_PAL},
-+ {"NTSC", TV_NTSC},
-+ {"pal", TV_PAL},
-+ {"ntsc", TV_NTSC},
- {"\0", -1}
- };
-
-@@ -602,33 +649,102 @@ static const struct _sis_vrate {
- u16 xres;
- u16 yres;
- u16 refresh;
-+ BOOLEAN SiS730valid32bpp;
- } sisfb_vrate[] = {
-- {1, 640, 480, 60}, {2, 640, 480, 72}, {3, 640, 480, 75}, {4, 640, 480, 85},
-- {5, 640, 480,100}, {6, 640, 480, 120}, {7, 640, 480, 160}, {8, 640, 480, 200},
-- {1, 720, 480, 60},
-- {1, 720, 576, 58},
-- {1, 800, 480, 60}, {2, 800, 480, 75}, {3, 800, 480, 85},
-- {1, 800, 600, 56}, {2, 800, 600, 60}, {3, 800, 600, 72}, {4, 800, 600, 75},
-- {5, 800, 600, 85}, {6, 800, 600, 100}, {7, 800, 600, 120}, {8, 800, 600, 160},
-- {1, 1024, 768, 43}, {2, 1024, 768, 60}, {3, 1024, 768, 70}, {4, 1024, 768, 75},
-- {5, 1024, 768, 85}, {6, 1024, 768, 100}, {7, 1024, 768, 120},
-- {1, 1024, 576, 60}, {2, 1024, 576, 75}, {3, 1024, 576, 85},
-- {1, 1024, 600, 60},
-- {1, 1152, 768, 60},
-- {1, 1280, 720, 60}, {2, 1280, 720, 75}, {3, 1280, 720, 85},
-- {1, 1280, 768, 60},
-- {1, 1280, 1024, 43}, {2, 1280, 1024, 60}, {3, 1280, 1024, 75}, {4, 1280, 1024, 85},
-- {1, 1280, 960, 70},
-- {1, 1400, 1050, 60},
-- {1, 1600, 1200, 60}, {2, 1600, 1200, 65}, {3, 1600, 1200, 70}, {4, 1600, 1200, 75},
-- {5, 1600, 1200, 85}, {6, 1600, 1200, 100}, {7, 1600, 1200, 120},
-- {1, 1920, 1440, 60}, {2, 1920, 1440, 65}, {3, 1920, 1440, 70}, {4, 1920, 1440, 75},
-- {5, 1920, 1440, 85}, {6, 1920, 1440, 100},
-- {1, 2048, 1536, 60}, {2, 2048, 1536, 65}, {3, 2048, 1536, 70}, {4, 2048, 1536, 75},
-- {5, 2048, 1536, 85},
-- {0, 0, 0, 0}
-+ {1, 320, 200, 70, TRUE},
-+ {1, 320, 240, 60, TRUE},
-+ {1, 320, 480, 60, TRUE},
-+ {1, 400, 300, 60, TRUE},
-+ {1, 512, 384, 60, TRUE},
-+ {1, 640, 400, 72, TRUE},
-+ {1, 640, 480, 60, TRUE}, {2, 640, 480, 72, TRUE}, {3, 640, 480, 75, TRUE},
-+ {4, 640, 480, 85, TRUE}, {5, 640, 480, 100, TRUE}, {6, 640, 480, 120, TRUE},
-+ {7, 640, 480, 160, TRUE}, {8, 640, 480, 200, TRUE},
-+ {1, 720, 480, 60, TRUE},
-+ {1, 720, 576, 58, TRUE},
-+ {1, 800, 480, 60, TRUE}, {2, 800, 480, 75, TRUE}, {3, 800, 480, 85, TRUE},
-+ {1, 800, 600, 56, TRUE}, {2, 800, 600, 60, TRUE}, {3, 800, 600, 72, TRUE},
-+ {4, 800, 600, 75, TRUE}, {5, 800, 600, 85, TRUE}, {6, 800, 600, 105, TRUE},
-+ {7, 800, 600, 120, TRUE}, {8, 800, 600, 160, TRUE},
-+ {1, 848, 480, 39, TRUE}, {2, 848, 480, 60, TRUE},
-+ {1, 856, 480, 39, TRUE}, {2, 856, 480, 60, TRUE},
-+ {1, 1024, 576, 60, TRUE}, {2, 1024, 576, 75, TRUE}, {3, 1024, 576, 85, TRUE},
-+ {1, 1024, 600, 60, TRUE},
-+ {1, 1024, 768, 43, TRUE}, {2, 1024, 768, 60, TRUE}, {3, 1024, 768, 70, FALSE},
-+ {4, 1024, 768, 75, FALSE}, {5, 1024, 768, 85, TRUE}, {6, 1024, 768, 100, TRUE},
-+ {7, 1024, 768, 120, TRUE},
-+ {1, 1152, 768, 60, TRUE},
-+ {1, 1152, 864, 75, TRUE}, {2, 1152, 864, 84, TRUE},
-+ {1, 1280, 720, 60, TRUE}, {2, 1280, 720, 75, TRUE}, {3, 1280, 720, 85, TRUE},
-+ {1, 1280, 768, 60, TRUE},
-+ {1, 1280, 960, 60, TRUE}, {2, 1280, 960, 85, TRUE},
-+ {1, 1280, 1024, 43, TRUE}, {2, 1280, 1024, 60, TRUE}, {3, 1280, 1024, 75, TRUE},
-+ {4, 1280, 1024, 85, TRUE},
-+ {1, 1360, 768, 60, TRUE},
-+ {1, 1360, 1024, 59, TRUE},
-+ {1, 1400, 1050, 60, TRUE}, {2, 1400, 1050, 75, TRUE},
-+ {1, 1600, 1200, 60, TRUE}, {2, 1600, 1200, 65, TRUE}, {3, 1600, 1200, 70, TRUE},
-+ {4, 1600, 1200, 75, TRUE}, {5, 1600, 1200, 85, TRUE}, {6, 1600, 1200, 100, TRUE},
-+ {7, 1600, 1200, 120, TRUE},
-+ {1, 1920, 1440, 60, TRUE}, {2, 1920, 1440, 65, TRUE}, {3, 1920, 1440, 70, TRUE},
-+ {4, 1920, 1440, 75, TRUE}, {5, 1920, 1440, 85, TRUE}, {6, 1920, 1440, 100, TRUE},
-+ {1, 2048, 1536, 60, TRUE}, {2, 2048, 1536, 65, TRUE}, {3, 2048, 1536, 70, TRUE},
-+ {4, 2048, 1536, 75, TRUE}, {5, 2048, 1536, 85, TRUE},
-+ {0, 0, 0, 0, FALSE}
-+};
-+
-+static struct sisfb_monitor {
-+ u16 hmin;
-+ u16 hmax;
-+ u16 vmin;
-+ u16 vmax;
-+ u32 dclockmax;
-+ u8 feature;
-+ BOOLEAN datavalid;
-+} sisfb_thismonitor;
-+
-+static const struct _sisfbddcsmodes {
-+ u32 mask;
-+ u16 h;
-+ u16 v;
-+ u32 d;
-+} sisfb_ddcsmodes[] = {
-+ { 0x10000, 67, 75, 108000},
-+ { 0x08000, 48, 72, 50000},
-+ { 0x04000, 46, 75, 49500},
-+ { 0x01000, 35, 43, 44900},
-+ { 0x00800, 48, 60, 65000},
-+ { 0x00400, 56, 70, 75000},
-+ { 0x00200, 60, 75, 78800},
-+ { 0x00100, 80, 75, 135000},
-+ { 0x00020, 31, 60, 25200},
-+ { 0x00008, 38, 72, 31500},
-+ { 0x00004, 37, 75, 31500},
-+ { 0x00002, 35, 56, 36000},
-+ { 0x00001, 38, 60, 40000}
-+};
-+
-+static const struct _sisfbddcfmodes {
-+ u16 x;
-+ u16 y;
-+ u16 v;
-+ u16 h;
-+ u32 d;
-+} sisfb_ddcfmodes[] = {
-+ { 1280, 1024, 85, 92, 157500},
-+ { 1600, 1200, 60, 75, 162000},
-+ { 1600, 1200, 65, 82, 175500},
-+ { 1600, 1200, 70, 88, 189000},
-+ { 1600, 1200, 75, 94, 202500},
-+ { 1600, 1200, 85, 107,229500},
-+ { 1920, 1440, 60, 90, 234000},
-+ { 1920, 1440, 75, 113,297000}
- };
-
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
-+static u8 sisfb_lastrates[128];
-+#endif
-+
- static const struct _chswtable {
- int subsysVendor;
- int subsysCard;
-@@ -636,9 +752,38 @@ static const struct _chswtable {
- char *cardName;
- } mychswtable[] = {
- { 0x1631, 0x1002, "Mitachi", "0x1002" },
-+ { 0x1071, 0x7521, "Mitac" , "7521P" },
- { 0, 0, "" , "" }
- };
-
-+static const struct _customttable {
-+ unsigned short chipID;
-+ char *biosversion;
-+ char *biosdate;
-+ unsigned short biosFootprintAddr[5];
-+ unsigned char biosFootprintData[5];
-+ char *vendorName;
-+ char *cardName;
-+ unsigned long SpecialID;
-+ char *optionName;
-+} mycustomttable[] = {
-+ { SIS_630, "2.00.07", "09/27/2002-13:38:25",
-+ { 0x220, 0x227, 0x228, 0x229, 0x22a },
-+ { 0x01, 0xe3, 0x9a, 0x6a, 0x00 },
-+ "Barco", "iQ R200L/300/400", CUT_BARCO1366, "BARCO1366"
-+ },
-+ { SIS_630, "2.00.07", "09/27/2002-13:38:25",
-+ { 0x220, 0x227, 0x228, 0x229, 0x22a },
-+ { 0x00, 0x5a, 0x64, 0x41, 0x00 },
-+ "Barco", "iQ G200L/300/400/500", CUT_BARCO1024, "BARCO1024"
-+ },
-+ { 0, "", "",
-+ { 0, 0, 0, 0 },
-+ { 0, 0, 0, 0 },
-+ "", "", CUT_NONE, ""
-+ }
-+};
-+
- #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
- /* Offscreen layout */
- typedef struct _SIS_GLYINFO {
-@@ -677,7 +822,6 @@ static unsigned long sisfb_heap_end;
- static unsigned long sisfb_heap_size;
- static SIS_HEAP sisfb_heap;
-
--// Eden Chen
- static const struct _sis_TV_filter {
- u8 filter[9][4];
- } sis_TV_filter[] = {
-@@ -829,9 +973,8 @@ static const struct _sis_TV_filter {
-
- static int filter = -1;
- static unsigned char filter_tb;
--//~Eden Chen
-
--/* ---------------------- Routine prototypes ------------------------- */
-+/* ---------------------- Prototypes ------------------------- */
-
- /* Interface used by the world */
- #ifndef MODULE
-@@ -894,10 +1037,6 @@ extern void fbcon_sis_fillrect(struc
- const struct fb_fillrect *rect);
- extern void fbcon_sis_copyarea(struct fb_info *info,
- const struct fb_copyarea *area);
--#if 0
--extern void cfb_imageblit(struct fb_info *info,
-- const struct fb_image *image);
--#endif
- extern int fbcon_sis_sync(struct fb_info *info);
- static int sisfb_ioctl(struct inode *inode,
- struct file *file,
-@@ -912,7 +1051,7 @@ extern int sisfb_mode_rate_to_ddata
- unsigned int *left_margin, unsigned int *right_margin,
- unsigned int *upper_margin, unsigned int *lower_margin,
- unsigned int *hsync_len, unsigned int *vsync_len,
-- unsigned int *sync, unsigned int *vmode);
-+ unsigned int *sync, unsigned int *vmode);
- #endif
-
- static int sisfb_get_fix(struct fb_fix_screeninfo *fix, int con,
-@@ -923,9 +1062,9 @@ extern int sisfb_initaccel(void);
- extern void sisfb_syncaccel(void);
-
- /* Internal general routines */
--static void sisfb_search_mode(const char *name);
--static int sisfb_validate_mode(int modeindex);
--static u8 sisfb_search_refresh_rate(unsigned int rate);
-+static void sisfb_search_mode(char *name, BOOLEAN quiet);
-+static int sisfb_validate_mode(int modeindex, unsigned long vbflags);
-+static u8 sisfb_search_refresh_rate(unsigned int rate, int index);
- static int sisfb_setcolreg(unsigned regno, unsigned red, unsigned green,
- unsigned blue, unsigned transp,
- struct fb_info *fb_info);
-@@ -939,6 +1078,12 @@ static BOOLEAN sisfb_CheckVBRetrace(voi
- static BOOLEAN sisfbcheckvretracecrt2(void);
- static BOOLEAN sisfbcheckvretracecrt1(void);
- static BOOLEAN sisfb_bridgeisslave(void);
-+static void sisfb_detect_VB_connect(void);
-+static void sisfb_get_VB_type(void);
-+
-+static void sisfb_handle_ddc(struct sisfb_monitor *monitor, int crtno);
-+static BOOLEAN sisfb_interpret_edid(struct sisfb_monitor *monitor, unsigned char *buffer);
-+
-
- /* SiS-specific Export functions */
- void sis_dispinfo(struct ap_data *rec);
-@@ -952,15 +1097,9 @@ u32 sisfb_get_reg3(u16 port)
- /* Chipset-dependent internal routines */
- #ifdef CONFIG_FB_SIS_300
- static int sisfb_get_dram_size_300(void);
--static void sisfb_detect_VB_connect_300(void);
--static void sisfb_get_VB_type_300(void);
--static int sisfb_has_VB_300(void);
- #endif
- #ifdef CONFIG_FB_SIS_315
- static int sisfb_get_dram_size_315(void);
--static void sisfb_detect_VB_connect_315(void);
--static void sisfb_get_VB_type_315(void);
--static int sisfb_has_VB_315(void);
- #endif
-
- /* Internal heap routines */
-@@ -978,23 +1117,33 @@ BOOLEAN sisfb_query_VGA_config_s
- BOOLEAN sisfb_query_north_bridge_space(PSIS_HW_DEVICE_INFO psishw_ext,
- unsigned long offset, unsigned long set, unsigned long *value);
-
--
- /* Routines from init.c/init301.c */
- extern void SiSRegInit(SiS_Private *SiS_Pr, USHORT BaseAddr);
- extern BOOLEAN SiSInit(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension);
- extern BOOLEAN SiSSetMode(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension, USHORT ModeNo);
--extern void SiS_SetEnableDstn(SiS_Private *SiS_Pr);
-+extern void SiS_SetEnableDstn(SiS_Private *SiS_Pr, int enable);
-+extern void SiS_SetEnableFstn(SiS_Private *SiS_Pr, int enable);
- extern void SiS_LongWait(SiS_Private *SiS_Pr);
-
--/* TW: Chrontel TV functions */
-+extern BOOLEAN sisfb_gettotalfrommode(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension,
-+ unsigned char modeno, int *htotal, int *vtotal, unsigned char rateindex);
-+
-+/* Chrontel TV functions */
- extern USHORT SiS_GetCH700x(SiS_Private *SiS_Pr, USHORT tempbx);
- extern void SiS_SetCH700x(SiS_Private *SiS_Pr, USHORT tempbx);
- extern USHORT SiS_GetCH701x(SiS_Private *SiS_Pr, USHORT tempbx);
- extern void SiS_SetCH701x(SiS_Private *SiS_Pr, USHORT tempbx);
- extern void SiS_SetCH70xxANDOR(SiS_Private *SiS_Pr, USHORT tempax,USHORT tempbh);
- extern void SiS_DDC2Delay(SiS_Private *SiS_Pr, USHORT delaytime);
--
--/* TW: Sensing routines */
-+extern void SiS_SetChrontelGPIO(SiS_Private *SiS_Pr, USHORT myvbinfo);
-+extern USHORT SiS_HandleDDC(SiS_Private *SiS_Pr, unsigned long VBFlags, int VGAEngine,
-+ USHORT adaptnum, USHORT DDCdatatype, unsigned char *buffer);
-+extern void SiS_Chrontel701xBLOn(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension);
-+extern void SiS_Chrontel701xBLOff(SiS_Private *SiS_Pr);
-+extern void SiS_SiS30xBLOn(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension);
-+extern void SiS_SiS30xBLOff(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension);
-+
-+/* Sensing routines */
- void SiS_Sense30x(void);
- int SISDoSense(int tempbl, int tempbh, int tempcl, int tempch);
- void SiS_SenseCh(void);
---- linux-2.6.0-test1/drivers/video/sis/vgatypes.h 2003-06-14 12:17:55.000000000 -0700
-+++ 25/drivers/video/sis/vgatypes.h 2003-07-19 17:04:55.000000000 -0700
-@@ -1,3 +1,30 @@
-+/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/sis/vgatypes.h,v 1.0 2001/06/15 21:23:00 dawes Exp $ */
-+/*
-+ * General type definitions for universal mode switching modules
-+ *
-+ * Copyright 2002, 2003 by Thomas Winischhofer, Vienna, Austria
-+ *
-+ * Permission to use, copy, modify, distribute, and sell this software and its
-+ * documentation for any purpose is hereby granted without fee, provided that
-+ * the above copyright notice appear in all copies and that both that
-+ * copyright notice and this permission notice appear in supporting
-+ * documentation, and that the name of the copyright holder not be used in
-+ * advertising or publicity pertaining to distribution of the software without
-+ * specific, written prior permission. The copyright holder makes no representations
-+ * about the suitability of this software for any purpose. It is provided
-+ * "as is" without express or implied warranty.
-+ *
-+ * THE COPYRIGHT HOLDER DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-+ * EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-+ * PERFORMANCE OF THIS SOFTWARE.
-+ *
-+ * Author: Thomas Winischhofer <thomas@winischhofer.net>
-+ *
-+ */
- #ifndef _VGATYPES_
- #define _VGATYPES_
-
-@@ -5,7 +32,7 @@
- #include "xf86Pci.h"
- #endif
-
--#ifdef LINUX_KERNEL /* TW: We don't want the X driver to depend on kernel source */
-+#ifdef LINUX_KERNEL /* We don't want the X driver to depend on kernel source */
- #include <linux/ioctl.h>
- #endif
-
-@@ -72,18 +99,15 @@ typedef void VOID;
- typedef UCHAR BOOLEAN;
- #endif
-
--#ifndef WINCE_HEADER
- #ifndef bool
- typedef UCHAR bool;
- #endif
--#endif /*WINCE_HEADER*/
-
- #ifndef VBIOS_VER_MAX_LENGTH
- #define VBIOS_VER_MAX_LENGTH 4
- #endif
-
- #ifndef LINUX_KERNEL /* For kernel, this is defined in sisfb.h */
--#ifndef WIN2000
- #ifndef SIS_CHIP_TYPE
- typedef enum _SIS_CHIP_TYPE {
- SIS_VGALegacy = 0,
-@@ -101,19 +125,18 @@ typedef enum _SIS_CHIP_TYPE {
- SIS_550,
- SIS_650,
- SIS_740,
-- SIS_330,
-+ SIS_330,
-+ SIS_660,
- MAX_SIS_CHIP
- } SIS_CHIP_TYPE;
- #endif
- #endif
--#endif
-
--#ifndef WIN2000
- #ifndef SIS_VB_CHIP_TYPE
- typedef enum _SIS_VB_CHIP_TYPE {
- VB_CHIP_Legacy = 0,
- VB_CHIP_301,
-- VB_CHIP_301B,
-+ VB_CHIP_301B,
- VB_CHIP_301LV,
- VB_CHIP_302,
- VB_CHIP_302B,
-@@ -122,9 +145,7 @@ typedef enum _SIS_VB_CHIP_TYPE {
- MAX_VB_CHIP
- } SIS_VB_CHIP_TYPE;
- #endif
--#endif
-
--#ifndef WIN2000
- #ifndef SIS_LCD_TYPE
- typedef enum _SIS_LCD_TYPE {
- LCD_INVALID = 0,
-@@ -136,18 +157,19 @@ typedef enum _SIS_LCD_TYPE {
- LCD_1600x1200,
- LCD_1920x1440,
- LCD_2048x1536,
-- LCD_320x480, /* TW: FSTN */
-+ LCD_320x480, /* FSTN, DSTN */
- LCD_1400x1050,
- LCD_1152x864,
- LCD_1152x768,
- LCD_1280x768,
- LCD_1024x600,
-+ LCD_640x480_2, /* FSTN, DSTN */
-+ LCD_640x480_3, /* FSTN, DSTN */
-+ LCD_CUSTOM,
- LCD_UNKNOWN
- } SIS_LCD_TYPE;
- #endif
--#endif
-
--#ifndef WIN2000 /* mark by Paul, Move definition to sisv.h*/
- #ifndef PSIS_DSReg
- typedef struct _SIS_DSReg
- {
-@@ -162,7 +184,6 @@ typedef struct _SIS_HW_DEVICE_INFO SIS_
-
- typedef BOOLEAN (*PSIS_QUERYSPACE) (PSIS_HW_DEVICE_INFO, ULONG, ULONG, ULONG *);
-
--
- struct _SIS_HW_DEVICE_INFO
- {
- PVOID pDevice; /* The pointer to the physical device data structure
-@@ -173,7 +194,7 @@ struct _SIS_HW_DEVICE_INFO
- /* Note:ROM image file is the file of VBIOS ROM */
-
- BOOLEAN UseROM; /* TW: Use the ROM image if provided */
--
-+
- UCHAR *pjCustomizedROMImage;/* base virtual address of ROM image file. */
- /* wincE:ROM image file is the file for OEM */
- /* customized table */
-@@ -195,7 +216,7 @@ struct _SIS_HW_DEVICE_INFO
- /* defined in the data structure type */
- /* "SIS_VB_CHIP_TYPE" */
-
-- USHORT usExternalChip; /* NO VB or other video bridge(not */
-+ USHORT usExternalChip; /* NO VB or other video bridge (other than */
- /* SiS video bridge) */
- /* if ujVBChipID = VB_CHIP_UNKNOWN, */
- /* then bit0=1 : LVDS,bit1=1 : trumpion, */
-@@ -207,7 +228,7 @@ struct _SIS_HW_DEVICE_INFO
- /* 011:Trumpion LVDS Scaling Chip */
- /* 100:LVDS(LCD-out)+Chrontel 7005 */
- /* 101:Single Chrontel 7005 */
-- /* TW: This has changed on 310/325 series! */
-+ /* TW: This has changed on 315 series! */
-
- ULONG ulCRT2LCDType; /* defined in the data structure type */
- /* "SIS_LCD_TYPE" */
-@@ -244,7 +265,6 @@ struct _SIS_HW_DEVICE_INFO
- #endif
- };
- #endif
--#endif
-
-
- /* TW: Addtional IOCTL for communication sisfb <> X driver */
-@@ -288,8 +308,6 @@ struct _SISFB_INFO {
- };
- #endif
-
--#ifndef WIN2000
--#ifndef WINCE_HEADER
- #ifndef BUS_DATA_TYPE
- typedef enum _BUS_DATA_TYPE {
- ConfigurationSpaceUndefined = -1,
-@@ -307,7 +325,6 @@ typedef enum _BUS_DATA_TYPE {
- MaximumBusDataType
- } BUS_DATA_TYPE, *PBUS_DATA_TYPE;
- #endif
--#endif /* WINCE_HEADER */
-
- #ifndef PCI_TYPE0_ADDRESSES
- #define PCI_TYPE0_ADDRESSES 6
-@@ -317,7 +334,6 @@ typedef enum _BUS_DATA_TYPE {
- #define PCI_TYPE1_ADDRESSES 2
- #endif
-
--#ifndef WINCE_HEADER
- #ifndef PCI_COMMON_CONFIG
- typedef struct _PCI_COMMON_CONFIG {
- USHORT VendorID; /* (ro) */
-@@ -355,7 +371,6 @@ typedef struct _PCI_COMMON_CONFIG {
-
- } PCI_COMMON_CONFIG, *PPCI_COMMON_CONFIG;
- #endif
--#endif /* WINCE_HEADER */
-
- #ifndef FIELD_OFFSET
- #define FIELD_OFFSET(type, field) ((LONG)&(((type *)0)->field))
-@@ -364,6 +379,6 @@ typedef struct _PCI_COMMON_CONFIG {
- #ifndef PCI_COMMON_HDR_LENGTH
- #define PCI_COMMON_HDR_LENGTH (FIELD_OFFSET (PCI_COMMON_CONFIG, DeviceSpecific))
- #endif
--#endif
-
- #endif
-+
---- linux-2.6.0-test1/drivers/video/sis/vstruct.h 2003-06-14 12:18:25.000000000 -0700
-+++ 25/drivers/video/sis/vstruct.h 2003-07-19 17:04:55.000000000 -0700
-@@ -1,3 +1,32 @@
-+/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/sis/vstruct.h,v 1.0 2001/06/15 21:23:00 dawes Exp $ */
-+/*
-+ * General structure definitions for universal mode switching modules
-+ *
-+ * Copyright 2002, 2003 by Thomas Winischhofer, Vienna, Austria
-+ *
-+ * Permission to use, copy, modify, distribute, and sell this software and its
-+ * documentation for any purpose is hereby granted without fee, provided that
-+ * the above copyright notice appear in all copies and that both that
-+ * copyright notice and this permission notice appear in supporting
-+ * documentation, and that the name of the copyright holder not be used in
-+ * advertising or publicity pertaining to distribution of the software without
-+ * specific, written prior permission. The copyright holder makes no representations
-+ * about the suitability of this software for any purpose. It is provided
-+ * "as is" without express or implied warranty.
-+ *
-+ * THE COPYRIGHT HOLDER DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-+ * EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-+ * PERFORMANCE OF THIS SOFTWARE.
-+ *
-+ * Author: Thomas Winischhofer <thomas@winischhofer.net>
-+ * ?
-+ *
-+ */
-+
- #ifdef _INIT_
- #define EXTERN
- #else
-@@ -58,7 +87,6 @@ typedef struct _SiS_LVDSCRT1DataStruct
- UCHAR CR[15];
- } SiS_LVDSCRT1DataStruct;
-
--/*add for LCDA*/
- typedef struct _SiS_LCDACRT1DataStruct
- {
- UCHAR CR[17];
-@@ -111,9 +139,7 @@ typedef struct _SiS_ExtStruct
- UCHAR Ext_ModeID;
- USHORT Ext_ModeFlag;
- USHORT Ext_ModeInfo;
-- USHORT Ext_Point;
- USHORT Ext_VESAID;
-- UCHAR Ext_VESAMEMSize;
- UCHAR Ext_RESINFO;
- UCHAR VB_ExtTVFlickerIndex;
- UCHAR VB_ExtTVEdgeIndex;
-@@ -130,7 +156,6 @@ typedef struct _SiS_Ext2Struct
- UCHAR ModeID;
- USHORT XRes;
- USHORT YRes;
-- USHORT ROM_OFFSET;
- } SiS_Ext2Struct;
-
- typedef struct _SiS_Part2PortTblStruct
-@@ -183,6 +208,12 @@ typedef struct _SiS_ModeResInfoStruct
-
- typedef UCHAR DRAM4Type[4];
-
-+/* Defines for SiS_Customt */
-+#define CUT_NONE 0
-+#define CUT_FORCENONE 1
-+#define CUT_BARCO1366 2
-+#define CUT_BARCO1024 3
-+
- typedef struct _SiS_Private
- {
- #ifdef LINUX_KERNEL
-@@ -198,25 +229,34 @@ typedef struct _SiS_Private
- USHORT SiS_P3c7;
- USHORT SiS_P3c8;
- USHORT SiS_P3c9;
-+ USHORT SiS_P3cb;
-+ USHORT SiS_P3cd;
- USHORT SiS_P3da;
- USHORT SiS_Part1Port;
- USHORT SiS_Part2Port;
- USHORT SiS_Part3Port;
- USHORT SiS_Part4Port;
- USHORT SiS_Part5Port;
-+ USHORT SiS_VidCapt;
-+ USHORT SiS_VidPlay;
- USHORT SiS_IF_DEF_LVDS;
- USHORT SiS_IF_DEF_TRUMPION;
- USHORT SiS_IF_DEF_DSTN;
- USHORT SiS_IF_DEF_FSTN;
- USHORT SiS_IF_DEF_CH70xx;
- USHORT SiS_IF_DEF_HiVision;
-+ USHORT SiS_SysFlags;
- UCHAR SiS_VGAINFO;
-+#ifndef LINUX_KERNEL
-+ USHORT SiS_CP1, SiS_CP2, SiS_CP3, SiS_CP4;
-+#endif
- BOOLEAN SiS_UseROM;
- int SiS_CHOverScan;
- BOOLEAN SiS_CHSOverScan;
- BOOLEAN SiS_ChSW;
- BOOLEAN SiS_UseLCDA;
- int SiS_UseOEM;
-+ ULONG SiS_CustomT;
- USHORT SiS_Backup70xx;
- USHORT SiS_CRT1Mode;
- USHORT SiS_flag_clearbuffer;
-@@ -270,15 +310,18 @@ typedef struct _SiS_Private
- USHORT SiS_Panel1280x768;
- USHORT SiS_Panel1024x600;
- USHORT SiS_Panel640x480;
-+ USHORT SiS_Panel640x480_2;
-+ USHORT SiS_Panel640x480_3;
- USHORT SiS_Panel1152x864;
-+ USHORT SiS_PanelCustom;
-+ USHORT SiS_PanelBarco1366;
- USHORT SiS_PanelMax;
- USHORT SiS_PanelMinLVDS;
- USHORT SiS_PanelMin301;
- USHORT SiS_ChrontelInit;
-
-- /* Pointers: */
- const SiS_StStruct *SiS_SModeIDTable;
-- const SiS_StandTableStruct *SiS_StandTable;
-+ SiS_StandTableStruct *SiS_StandTable;
- const SiS_ExtStruct *SiS_EModeIDTable;
- const SiS_Ext2Struct *SiS_RefIndex;
- const SiS_VBModeStruct *SiS_VBModeIDTable;
-@@ -316,7 +359,7 @@ typedef struct _SiS_Private
- const USHORT *pSiS_RGBSenseData;
- const USHORT *pSiS_VideoSenseData;
- const USHORT *pSiS_YCSenseData;
-- const USHORT *pSiS_RGBSenseData2; /*301b*/
-+ const USHORT *pSiS_RGBSenseData2;
- const USHORT *pSiS_VideoSenseData2;
- const USHORT *pSiS_YCSenseData2;
- #endif
-@@ -340,15 +383,18 @@ typedef struct _SiS_Private
- const SiS_LCDDataStruct *SiS_LCD1280x960Data;
- const SiS_LCDDataStruct *SiS_NoScaleData1400x1050;
- const SiS_LCDDataStruct *SiS_NoScaleData1600x1200;
-+ const SiS_LCDDataStruct *SiS_NoScaleData1280x768;
- const SiS_LCDDataStruct *SiS_StLCD1400x1050Data;
- const SiS_LCDDataStruct *SiS_StLCD1600x1200Data;
-+ const SiS_LCDDataStruct *SiS_StLCD1280x768Data;
- const SiS_LCDDataStruct *SiS_ExtLCD1400x1050Data;
- const SiS_LCDDataStruct *SiS_ExtLCD1600x1200Data;
-+ const SiS_LCDDataStruct *SiS_ExtLCD1280x768Data;
-+ const SiS_LCDDataStruct *SiS_NoScaleData;
- const SiS_TVDataStruct *SiS_StPALData;
- const SiS_TVDataStruct *SiS_ExtPALData;
- const SiS_TVDataStruct *SiS_StNTSCData;
- const SiS_TVDataStruct *SiS_ExtNTSCData;
--/* const SiS_TVDataStruct *SiS_St1HiTVData; */
- const SiS_TVDataStruct *SiS_St2HiTVData;
- const SiS_TVDataStruct *SiS_ExtHiTVData;
- const UCHAR *SiS_NTSCTiming;
-@@ -381,12 +427,17 @@ typedef struct _SiS_Private
- const SiS_LVDSDataStruct *SiS_LVDS1152x768Data_1;
- const SiS_LVDSDataStruct *SiS_LVDS1152x768Data_2;
- const SiS_LVDSDataStruct *SiS_LVDS640x480Data_1;
-+ const SiS_LVDSDataStruct *SiS_LVDS640x480Data_2;
- const SiS_LVDSDataStruct *SiS_LVDS320x480Data_1;
- const SiS_LVDSDataStruct *SiS_LCDA1400x1050Data_1;
- const SiS_LVDSDataStruct *SiS_LCDA1400x1050Data_2;
- const SiS_LVDSDataStruct *SiS_LCDA1600x1200Data_1;
- const SiS_LVDSDataStruct *SiS_LCDA1600x1200Data_2;
- const SiS_LVDSDataStruct *SiS_LVDSXXXxXXXData_1;
-+ const SiS_LVDSDataStruct *SiS_LVDSBARCO1366Data_1;
-+ const SiS_LVDSDataStruct *SiS_LVDSBARCO1366Data_2;
-+ const SiS_LVDSDataStruct *SiS_LVDSBARCO1024Data_1;
-+ const SiS_LVDSDataStruct *SiS_LVDSBARCO1024Data_2;
- const SiS_LVDSDataStruct *SiS_CHTVUNTSCData;
- const SiS_LVDSDataStruct *SiS_CHTVONTSCData;
- const SiS_LVDSDataStruct *SiS_CHTVUPALData;
-@@ -478,6 +529,12 @@ typedef struct _SiS_Private
- const SiS_LVDSCRT1DataStruct *SiS_LVDSCRT11600x1200_2_H;
- const SiS_LVDSCRT1DataStruct *SiS_LVDSCRT1XXXxXXX_1;
- const SiS_LVDSCRT1DataStruct *SiS_LVDSCRT1XXXxXXX_1_H;
-+ const SiS_LVDSCRT1DataStruct *SiS_LVDSCRT1640x480_1;
-+ const SiS_LVDSCRT1DataStruct *SiS_LVDSCRT1640x480_1_H;
-+ const SiS_LVDSCRT1DataStruct *SiS_LVDSCRT1640x480_2;
-+ const SiS_LVDSCRT1DataStruct *SiS_LVDSCRT1640x480_2_H;
-+ const SiS_LVDSCRT1DataStruct *SiS_LVDSCRT1640x480_3;
-+ const SiS_LVDSCRT1DataStruct *SiS_LVDSCRT1640x480_3_H;
- const SiS_LVDSCRT1DataStruct *SiS_CHTVCRT1UNTSC;
- const SiS_LVDSCRT1DataStruct *SiS_CHTVCRT1ONTSC;
- const SiS_LVDSCRT1DataStruct *SiS_CHTVCRT1UPAL;
-@@ -507,7 +564,6 @@ typedef struct _SiS_Private
- const SiS_LCDACRT1DataStruct *SiS_LCDACRT11400x1050_2_H;
- const SiS_LCDACRT1DataStruct *SiS_LCDACRT11600x1200_2_H;
-
-- /* TW: New for 650/301LV */
- const SiS_Part2PortTblStruct *SiS_CRT2Part2_1024x768_1;
- const SiS_Part2PortTblStruct *SiS_CRT2Part2_1280x1024_1;
- const SiS_Part2PortTblStruct *SiS_CRT2Part2_1400x1050_1;
-@@ -539,6 +595,9 @@ typedef struct _SiS_Private
- const UCHAR *SiS_CHTVVCLKUPALN;
- const UCHAR *SiS_CHTVVCLKOPALN;
- const UCHAR *SiS_CHTVVCLKSOPAL;
-+
-+ USHORT PanelXRes;
-+ USHORT PanelYRes;
-
- BOOLEAN UseCustomMode;
- BOOLEAN CRT1UsesCustomMode;
-@@ -560,8 +619,11 @@ typedef struct _SiS_Private
- UCHAR CSR2B;
- UCHAR CSR2C;
- USHORT CSRClock;
-+ USHORT CSRClock_CRT1;
- USHORT CModeFlag;
-+ USHORT CModeFlag_CRT1;
- USHORT CInfoFlag;
-+
- BOOLEAN SiS_CHPALM;
- BOOLEAN SiS_CHPALN;
-
-@@ -578,7 +640,21 @@ typedef struct _SiS_Private
- UCHAR Backup_1c;
- UCHAR Backup_1d;
-
-- int UsePanelScaler;
-+ int UsePanelScaler;
-+
-+ USHORT CP_Vendor, CP_Product;
-+ BOOLEAN CP_HaveCustomData;
-+ int CP_PreferredX, CP_PreferredY;
-+ int CP_MaxX, CP_MaxY, CP_MaxClock;
-+ int CP_HDisplay[7], CP_VDisplay[7]; /* For Custom LCD panel dimensions */
-+ int CP_HTotal[7], CP_VTotal[7];
-+ int CP_HSyncStart[7], CP_VSyncStart[7];
-+ int CP_HSyncEnd[7], CP_VSyncEnd[7];
-+ int CP_HBlankStart[7], CP_VBlankStart[7];
-+ int CP_HBlankEnd[7], CP_VBlankEnd[7];
-+ int CP_Clock[7];
-+ BOOLEAN CP_DataValid[7];
-+ BOOLEAN CP_HSync_P[7], CP_VSync_P[7], CP_SyncValid[7];
- } SiS_Private;
-
- #endif
---- linux-2.6.0-test1/drivers/video/skeletonfb.c 2003-06-14 12:17:59.000000000 -0700
-+++ 25/drivers/video/skeletonfb.c 2003-07-19 17:04:55.000000000 -0700
-@@ -1,7 +1,7 @@
- /*
- * linux/drivers/video/skeletonfb.c -- Skeleton for a frame buffer device
- *
-- * Modified to new api Jan 2001 by James Simmons (jsimmons@transvirtual.com)
-+ * Modified to new api Jan 2001 by James Simmons (jsimmons@infradead.org)
- *
- * Created 28 Dec 1997 by Geert Uytterhoeven
- *
-@@ -469,15 +469,71 @@ void xxxfb_imageblit(struct fb_info *p,
- int xxxfb_cursor(struct fb_info *info, struct fb_cursor *cursor)
- {
- /*
-- * @set: Which fields we are altering in struct fb_cursor
-+ * @set: Which fields we are altering in struct fb_cursor
- * @enable: Disable or enable the cursor
-- * @rop: The bit operation we want to do.
-- * @mask: This is the cursor mask bitmap.
-- * @dest: A image of the area we are going to display the cursor.
-- * Used internally by the driver.
-- * @hot: The hot spot.
-- * @image: The actual data for the cursor image.
-+ * @rop: The bit operation we want to do.
-+ * @hot: The hot spot.
-+ * @image: The actual data for the cursor image.
-+ * @mask: This is the cursor mask bitmap.
- */
-+
-+ /* Disable hardware cursor. We don't want to display the cursor
-+ while changing it. Note we use the enable and rop fields in
-+ struct fb_cursor that is apart of struct fb_info. Not the
-+ cursor data passed in from userland. */
-+
-+ if (cursor->set & FB_CUR_SETHOT) {
-+ info->cursor.hot = cursor->hot;
-+ /* Set the hardware cursor's hot spot */
-+ }
-+
-+ if (cursor->set & FB_CUR_SETPOS) {
-+ info->cursor.image.dx = cursor->image.dx;
-+ info->cursor.image.dy = cursor->image.dy;
-+ /* Set the hardware cursor's position */
-+ }
-+
-+ if (cursor->set & FB_CUR_SETSIZE) {
-+ info->cursor.image.height = cursor->image.height;
-+ info->cursor.image.width = cursor->image.width;
-+ /* Set the hardware cursor's size */
-+ }
-+
-+ if (cursor->set & FB_CUR_SETCMAP) {
-+ if (cursor->image.depth == 1) {
-+ info->cursor.image.fg_color = cursor->image.fg_color;
-+ info->cursor.image.bg_color = cursor->image.bg_color;
-+ } else {
-+ if (cursor->image.cmap.len)
-+ fb_copy_cmap(&cursor->image.cmap, &info->cursor.image.cmap, 0);
-+ }
-+ info->curosr.image.depth = cursor->image.depth;
-+
-+ /* Set the hardware cursor's color map */
-+ }
-+
-+ /*
-+ * Set the cursor shape. The two pieces needed to create
-+ * the final image is mask and image.data. The mask is
-+ * combined with image.data according to the rop field.
-+ */
-+ if (cursor->set & FB_CUR_SETSHAPE) {
-+ switch (info->cursor.rop) {
-+ case ROP_XOR:
-+ /* ... */
-+ break;
-+ case ROP_COPY:
-+ default:
-+ /* ... */
-+ break;
-+ }
-+ /* ... */
-+ }
-+
-+ if (info->cursor.enable) {
-+ /* Now we turn the hardware cursor on */
-+ }
-+ return 0;
- }
-
- /**
---- linux-2.6.0-test1/drivers/video/softcursor.c 2003-06-14 12:18:22.000000000 -0700
-+++ 25/drivers/video/softcursor.c 2003-07-19 17:04:55.000000000 -0700
-@@ -21,9 +21,14 @@ int soft_cursor(struct fb_info *info, st
- {
- unsigned int scan_align = info->pixmap.scan_align - 1;
- unsigned int buf_align = info->pixmap.buf_align - 1;
-- unsigned int i, size, dsize, s_pitch, d_pitch;
-- u8 *dst, src[64];
--
-+ u8 *dst = (u8 *) info->cursor.image.data;
-+ unsigned int i, size, pitch;
-+
-+ pitch = ((info->cursor.image.width + 7) >> 3) + scan_align;
-+ pitch &= ~scan_align;
-+ size = pitch * info->cursor.image.height + buf_align;
-+ size &= ~buf_align;
-+
- if (cursor->set & FB_CUR_SETSIZE) {
- info->cursor.image.height = cursor->image.height;
- info->cursor.image.width = cursor->image.width;
-@@ -48,34 +53,27 @@ int soft_cursor(struct fb_info *info, st
- info->cursor.image.depth = cursor->image.depth;
- }
-
-- s_pitch = (info->cursor.image.width + 7) >> 3;
-- dsize = s_pitch * info->cursor.image.height;
-- d_pitch = (s_pitch + scan_align) & ~scan_align;
-- size = d_pitch * info->cursor.image.height + buf_align;
-- size &= ~buf_align;
-- dst = info->pixmap.addr + fb_get_buffer_offset(info, size);
--
-- if (info->cursor.enable) {
-+ if (cursor->set & FB_CUR_SETSHAPE) {
- switch (info->cursor.rop) {
- case ROP_XOR:
-- for (i = 0; i < dsize; i++)
-- src[i] = cursor->image.data[i] ^ info->cursor.mask[i];
-+ for (i = 0; i < size; i++)
-+ dst[i] ^= info->cursor.mask[i];
- break;
- case ROP_COPY:
- default:
-- for (i = 0; i < dsize; i++)
-- src[i] = cursor->image.data[i] & info->cursor.mask[i];
-+ for (i = 0; i < size; i++)
-+ dst[i] &= info->cursor.mask[i];
- break;
- }
-- } else
-- memcpy(src, cursor->image.data, dsize);
--
-- move_buf_aligned(info, dst, src, d_pitch, s_pitch, info->cursor.image.height);
-- info->cursor.image.data = dst;
-+ }
-
-- info->fbops->fb_imageblit(info, &info->cursor.image);
-- atomic_dec(&info->pixmap.count);
-- smp_mb__after_atomic_dec();
-+ if (!info->cursor.enable) {
-+ for (i = 0; i < size; i++)
-+ dst[i] ^= info->cursor.mask[i];
-+ }
-+
-+ if (info->cursor.image.data)
-+ info->fbops->fb_imageblit(info, &info->cursor.image);
- return 0;
- }
-
---- linux-2.6.0-test1/drivers/video/valkyriefb.c 2003-06-14 12:18:30.000000000 -0700
-+++ 25/drivers/video/valkyriefb.c 2003-07-19 17:04:55.000000000 -0700
-@@ -51,7 +51,6 @@
- #include <linux/delay.h>
- #include <linux/interrupt.h>
- #include <linux/fb.h>
--#include <linux/selection.h>
- #include <linux/init.h>
- #include <linux/pci.h>
- #include <linux/nvram.h>
-@@ -66,15 +65,9 @@
- #endif
- #include <asm/pgtable.h>
-
--#include <video/fbcon.h>
--#include <video/fbcon-cfb8.h>
--#include <video/fbcon-cfb16.h>
--#include <video/macmodes.h>
--
-+#include "macmodes.h"
- #include "valkyriefb.h"
-
--static int can_soft_blank = 1;
--
- #ifdef CONFIG_MAC
- /* We don't yet have functions to read the PRAM... perhaps we can
- adapt them from the PPC code? */
-@@ -84,27 +77,17 @@ static int default_cmode = CMODE_8;
- static int default_vmode = VMODE_NVRAM;
- static int default_cmode = CMODE_NVRAM;
- #endif
--static char fontname[40] __initdata = { 0 };
--
--static int switching = 0;
-
- struct fb_par_valkyrie {
- int vmode, cmode;
- int xres, yres;
- int vxres, vyres;
-- int xoffset, yoffset;
-+ struct valkyrie_regvals *init;
- };
-
- struct fb_info_valkyrie {
-- struct fb_info info;
-- struct fb_fix_screeninfo fix;
-- struct fb_var_screeninfo var;
-- struct display disp;
-- struct fb_par_valkyrie par;
-- struct {
-- __u8 red, green, blue;
-- } palette[256];
--
-+ struct fb_info info;
-+ struct fb_par_valkyrie par;
- struct cmap_regs *cmap_regs;
- unsigned long cmap_regs_phys;
-
-@@ -116,9 +99,8 @@ struct fb_info_valkyrie {
-
- int sense;
- unsigned long total_vram;
--#ifdef FBCON_HAS_CFB16
-- u16 fbcon_cfb16_cmap[16];
--#endif
-+
-+ u32 pseudo_palette[16];
- };
-
- /*
-@@ -127,10 +109,9 @@ struct fb_info_valkyrie {
- int valkyriefb_init(void);
- int valkyriefb_setup(char*);
-
--static int valkyrie_set_var(struct fb_var_screeninfo *var, int con,
-- struct fb_info *info);
--static int valkyrie_get_cmap(struct fb_cmap *cmap, int kspc, int con,
-- struct fb_info *info);
-+static int valkyriefb_check_var(struct fb_var_screeninfo *var,
-+ struct fb_info *info);
-+static int valkyriefb_set_par(struct fb_info *info);
- static int valkyriefb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
- u_int transp, struct fb_info *info);
- static int valkyriefb_blank(int blank_mode, struct fb_info *info);
-@@ -138,136 +119,69 @@ static int valkyriefb_blank(int blank_mo
- static int read_valkyrie_sense(struct fb_info_valkyrie *p);
- static inline int valkyrie_vram_reqd(int video_mode, int color_mode);
- static void set_valkyrie_clock(unsigned char *params);
--static void valkyrie_set_par(const struct fb_par_valkyrie *p, struct fb_info_valkyrie *info);
- static inline int valkyrie_par_to_var(struct fb_par_valkyrie *par, struct fb_var_screeninfo *var);
- static int valkyrie_var_to_par(struct fb_var_screeninfo *var,
- struct fb_par_valkyrie *par, const struct fb_info *fb_info);
-
- static void valkyrie_init_info(struct fb_info *info, struct fb_info_valkyrie *p);
--static void valkyrie_par_to_display(struct fb_par_valkyrie *par,
-- struct display *disp, struct fb_fix_screeninfo *fix, struct fb_info_valkyrie *p);
--static void valkyrie_init_display(struct display *disp);
--static void valkyrie_par_to_fix(struct fb_par_valkyrie *par, struct fb_fix_screeninfo *fix,
-- struct fb_info_valkyrie *p);
-+static void valkyrie_par_to_fix(struct fb_par_valkyrie *par, struct fb_fix_screeninfo *fix);
- static void valkyrie_init_fix(struct fb_fix_screeninfo *fix, struct fb_info_valkyrie *p);
-
- static struct fb_ops valkyriefb_ops = {
- .owner = THIS_MODULE,
-- .fb_set_var = valkyrie_set_var,
-- .fb_get_cmap = valkyrie_get_cmap,
-- .fb_set_cmap = gen_set_cmap,
-+ .fb_check_var = valkyriefb_check_var,
-+ .fb_set_par = valkyriefb_set_par,
- .fb_setcolreg = valkyriefb_setcolreg,
- .fb_blank = valkyriefb_blank,
-+ .fb_fillrect = cfb_fillrect,
-+ .fb_copyarea = cfb_copyarea,
-+ .fb_imageblit = cfb_imageblit,
-+ .fb_cursor = soft_cursor,
- };
-
--static int valkyriefb_getcolreg(u_int regno, u_int *red, u_int *green,
-- u_int *blue, u_int *transp, struct fb_info *info);
--
--/* Sets everything according to var */
--static int valkyrie_set_var(struct fb_var_screeninfo *var, int con,
-- struct fb_info *info)
-+/* Sets the video mode according to info->var */
-+static int valkyriefb_set_par(struct fb_info *info)
- {
- struct fb_info_valkyrie *p = (struct fb_info_valkyrie *) info;
-- struct display *disp;
-- struct fb_par_valkyrie par;
-- int depthchange, err;
-+ volatile struct valkyrie_regs *valkyrie_regs = p->valkyrie_regs;
-+ struct fb_par_valkyrie *par = info->par;
-+ struct valkyrie_regvals *init;
-+ int err;
-
-- disp = (con >= 0) ? &fb_display[con] : &p->disp;
-- if ((err = valkyrie_var_to_par(var, &par, info))) {
-- /* printk (KERN_ERR "Error in valkyrie_set_var, calling valkyrie_var_to_par: %d.\n", err); */
-+ if ((err = valkyrie_var_to_par(&info->var, par, info)))
- return err;
-- }
--
-- if ((var->activate & FB_ACTIVATE_MASK) != FB_ACTIVATE_NOW) {
-- /* printk(KERN_ERR "Not activating, in valkyrie_set_var.\n"); */
-- valkyrie_par_to_var(&par, var);
-- return 0;
-- }
-
-- /*
-- * I know, we want to use fb_display[con], but grab certain info
-- * from p->var instead.
-- */
--#define DIRTY(x) (p->var.x != var->x)
-- depthchange = DIRTY(bits_per_pixel);
-- /* adding "&& !DIRTY(pixclock)" corrects vmode-switching problems */
-- if(!DIRTY(xres) && !DIRTY(yres) && !DIRTY(xres_virtual) &&
-- !DIRTY(yres_virtual) && !DIRTY(bits_per_pixel) && !DIRTY(pixclock)) {
-- valkyrie_par_to_var(&par, var);
-- p->var = disp->var = *var;
-- return 0;
-- }
-+ valkyrie_par_to_fix(par, &info->fix);
-
-- p->par = par;
-- valkyrie_par_to_var(&par, var);
-- p->var = *var;
-- valkyrie_par_to_fix(&par, &p->fix, p);
-- valkyrie_par_to_display(&par, disp, &p->fix, p);
-- p->disp = *disp;
--
-- if (info->changevar && !switching) {
-- /* Don't want to do this if just switching consoles. */
-- (*info->changevar)(con);
-- }
-- if (con == info->currcon)
-- valkyrie_set_par(&par, p);
-- if (depthchange)
-- if ((err = fb_alloc_cmap(&disp->cmap, 0, 0)))
-- return err;
-- if (depthchange || switching)
-- do_install_cmap(con, info);
-- return 0;
--}
-+ /* Reset the valkyrie */
-+ out_8(&valkyrie_regs->status.r, 0);
-+ udelay(100);
-
--static int valkyrie_get_cmap(struct fb_cmap *cmap, int kspc, int con,
-- struct fb_info *info)
--{
-- if (con == info->currcon) {
-- /* current console? */
-- return fb_get_cmap(cmap, kspc, valkyriefb_getcolreg, info);
-- }
-- if (fb_display[con].cmap.len) { /* non default colormap? */
-- fb_copy_cmap(&fb_display[con].cmap, cmap, kspc? 0: 2);
-- }
-- else {
-- int size = fb_display[con].var.bits_per_pixel == 16 ? 32 : 256;
-- fb_copy_cmap(fb_default_cmap(size), cmap, kspc ? 0 : 2);
-- }
-- return 0;
--}
-+ /* Initialize display timing registers */
-+ init = par->init;
-+ out_8(&valkyrie_regs->mode.r, init->mode | 0x80);
-+ out_8(&valkyrie_regs->depth.r, par->cmode + 3);
-+ set_valkyrie_clock(init->clock_params);
-+ udelay(100);
-
--static int valkyriefb_switch(int con, struct fb_info *fb)
--{
-- struct fb_info_valkyrie *info = (struct fb_info_valkyrie *) fb;
-- struct fb_par_valkyrie par;
-+ /* Turn on display */
-+ out_8(&valkyrie_regs->mode.r, init->mode);
-
-- if (fb_display[fb->currcon].cmap.len)
-- fb_get_cmap(&fb_display[fb->currcon].cmap, 1, valkyriefb_getcolreg,
-- fb);
-- fb->currcon = con;
--#if 1
-- valkyrie_var_to_par(&fb_display[fb->currcon].var, &par, fb);
-- valkyrie_set_par(&par, info);
-- do_install_cmap(con, fb);
--#else
-- /* I see no reason not to do this. Minus info->changevar(). */
-- /* DOH. This makes valkyrie_set_var compare, you guessed it, */
-- /* fb_display[con].var (first param), and fb_display[con].var! */
-- /* Perhaps I just fixed that... */
-- switching = 1;
-- valkyrie_set_var(&fb_display[con].var, con, info);
-- switching = 0;
--#endif
- return 0;
- }
-
--static int valkyriefb_updatevar(int con, struct fb_info *info)
-+static int
-+valkyriefb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
- {
-+ int err;
-+ struct fb_par_valkyrie par;
-+
-+ if ((err = valkyrie_var_to_par(var, &par, info)))
-+ return err;
-+ valkyrie_par_to_var(&par, var);
- return 0;
- }
-
--static int valkyriefb_blank(int blank_mode, struct fb_info *info)
--{
- /*
- * Blank the screen if blank_mode != 0, else unblank. If blank_mode == NULL
- * then the caller blanks by setting the CLUT (Color Look Up Table) to all
-@@ -278,48 +192,34 @@ static int valkyriefb_blank(int blank_mo
- * blank_mode == 3: suspend hsync
- * blank_mode == 4: powerdown
- */
-- struct fb_info_valkyrie *p = (struct fb_info_valkyrie *) info;
-- struct valkyrie_regvals *init;
-- unsigned char vmode;
--
-- if (p->disp.can_soft_blank
-- && ((vmode = p->par.vmode) > 0)
-- && (vmode <= VMODE_MAX)
-- && ((init = valkyrie_reg_init[vmode - 1]) != NULL)) {
-- if (blank_mode)
-- --blank_mode;
-- switch (blank_mode) {
-- default: /* unblank */
-- out_8(&p->valkyrie_regs->mode.r, init->mode);
-- break;
-- case VESA_VSYNC_SUSPEND:
-- case VESA_HSYNC_SUSPEND:
-- /*
-- * [kps] Value extracted from MacOS. I don't know
-- * whether this bit disables hsync or vsync, or
-- * whether the hardware can do the other as well.
-- */
-- out_8(&p->valkyrie_regs->mode.r, init->mode | 0x40);
-- break;
-- case VESA_POWERDOWN:
-- out_8(&p->valkyrie_regs->mode.r, 0x66);
-- break;
-- }
-- }
-- return 0;
--}
--
--static int valkyriefb_getcolreg(u_int regno, u_int *red, u_int *green,
-- u_int *blue, u_int *transp, struct fb_info *info)
-+static int valkyriefb_blank(int blank_mode, struct fb_info *info)
- {
- struct fb_info_valkyrie *p = (struct fb_info_valkyrie *) info;
-+ struct fb_par_valkyrie *par = info->par;
-+ struct valkyrie_regvals *init = par->init;
-
-- if (regno > 255)
-+ if (init == NULL)
- return 1;
-- *red = (p->palette[regno].red<<8) | p->palette[regno].red;
-- *green = (p->palette[regno].green<<8) | p->palette[regno].green;
-- *blue = (p->palette[regno].blue<<8) | p->palette[regno].blue;
-
-+ switch (blank_mode) {
-+ case 0: /* unblank */
-+ out_8(&p->valkyrie_regs->mode.r, init->mode);
-+ break;
-+ case 1:
-+ return 1; /* get caller to set CLUT to all black */
-+ case VESA_VSYNC_SUSPEND+1:
-+ case VESA_HSYNC_SUSPEND+1:
-+ /*
-+ * [kps] Value extracted from MacOS. I don't know
-+ * whether this bit disables hsync or vsync, or
-+ * whether the hardware can do the other as well.
-+ */
-+ out_8(&p->valkyrie_regs->mode.r, init->mode | 0x40);
-+ break;
-+ case VESA_POWERDOWN+1:
-+ out_8(&p->valkyrie_regs->mode.r, 0x66);
-+ break;
-+ }
- return 0;
- }
-
-@@ -328,16 +228,13 @@ static int valkyriefb_setcolreg(u_int re
- {
- struct fb_info_valkyrie *p = (struct fb_info_valkyrie *) info;
- volatile struct cmap_regs *cmap_regs = p->cmap_regs;
--
-+ struct fb_par_valkyrie *par = info->par;
-
- if (regno > 255)
- return 1;
- red >>= 8;
- green >>= 8;
- blue >>= 8;
-- p->palette[regno].red = red;
-- p->palette[regno].green = green;
-- p->palette[regno].blue = blue;
-
- /* tell clut which address to fill */
- out_8(&p->cmap_regs->addr, regno);
-@@ -347,11 +244,9 @@ static int valkyriefb_setcolreg(u_int re
- out_8(&cmap_regs->lut, green);
- out_8(&cmap_regs->lut, blue);
-
-- if (regno < 16) {
--#ifdef FBCON_HAS_CFB16
-- p->fbcon_cfb16_cmap[regno] = (regno << 10) | (regno << 5) | regno;
--#endif
-- }
-+ if (regno < 16 && par->cmode == CMODE_16)
-+ ((u32 *)info->pseudo_palette)[regno] =
-+ (regno << 10) | (regno << 5) | regno;
-
- return 0;
- }
-@@ -359,10 +254,11 @@ static int valkyriefb_setcolreg(u_int re
- static int valkyrie_vram_reqd(int video_mode, int color_mode)
- {
- int pitch;
-+ struct valkyrie_regvals *init = valkyrie_reg_init[video_mode-1];
-
-- if ((pitch = valkyrie_reg_init[video_mode-1]->pitch[color_mode]) == 0)
-- pitch = 2 * valkyrie_reg_init[video_mode-1]->pitch[0];
-- return valkyrie_reg_init[video_mode-1]->vres * pitch;
-+ if ((pitch = init->pitch[color_mode]) == 0)
-+ pitch = 2 * init->pitch[0];
-+ return init->vres * pitch;
- }
-
- static void set_valkyrie_clock(unsigned char *params)
-@@ -380,14 +276,10 @@ static void set_valkyrie_clock(unsigned
- #endif
- }
-
--static void __init init_valkyrie(struct fb_info_valkyrie *p)
-+static void __init valkyrie_choose_mode(struct fb_info_valkyrie *p)
- {
-- struct fb_par_valkyrie *par = &p->par;
-- struct fb_var_screeninfo var;
-- int j, k;
--
- p->sense = read_valkyrie_sense(p);
-- printk(KERN_INFO "Monitor sense value = 0x%x, ", p->sense);
-+ printk(KERN_INFO "Monitor sense value = 0x%x\n", p->sense);
-
- /* Try to pick a video mode out of NVRAM if we have one. */
- #ifndef CONFIG_MAC
-@@ -409,80 +301,22 @@ static void __init init_valkyrie(struct
- #endif
-
- /*
-- * Reduce the pixel size if we don't have enough VRAM or bandwitdh.
-+ * Reduce the pixel size if we don't have enough VRAM or bandwidth.
- */
-- if (default_cmode < CMODE_8
-- || default_cmode > CMODE_16
-- || valkyrie_reg_init[default_vmode-1]->pitch[default_cmode] == 0
-- || valkyrie_vram_reqd(default_vmode, default_cmode) > p->total_vram)
-+ if (default_cmode < CMODE_8 || default_cmode > CMODE_16
-+ || valkyrie_reg_init[default_vmode-1]->pitch[default_cmode] == 0
-+ || valkyrie_vram_reqd(default_vmode, default_cmode) > p->total_vram)
- default_cmode = CMODE_8;
--
-- printk(KERN_INFO "using video mode %d and color mode %d.\n", default_vmode, default_cmode);
-
-- mac_vmode_to_var(default_vmode, default_cmode, &var);
-- if (valkyrie_var_to_par(&var, par, &p->info)) {
-- printk(KERN_ERR "valkyriefb: can't set default video mode\n");
-- return ;
-- }
--
-- valkyrie_init_fix(&p->fix, p);
-- valkyrie_par_to_fix(&p->par, &p->fix, p);
-- valkyrie_par_to_var(&p->par, &p->var);
-- valkyrie_init_display(&p->disp);
-- valkyrie_par_to_display(&p->par, &p->disp, &p->fix, p);
-- valkyrie_init_info(&p->info, p);
--
-- /* Initialize colormap */
-- for (j = 0; j < 16; j++) {
-- k = color_table[j];
-- p->palette[j].red = default_red[k];
-- p->palette[j].green = default_grn[k];
-- p->palette[j].blue = default_blu[k];
-- }
--
-- valkyrie_set_var (&var, -1, &p->info);
--
-- if (register_framebuffer(&p->info) < 0) {
-- kfree(p);
-- return;
-- }
--
-- printk(KERN_INFO "fb%d: valkyrie frame buffer device\n", p->info.node);
--}
--
--static void valkyrie_set_par(const struct fb_par_valkyrie *par,
-- struct fb_info_valkyrie *p)
--{
-- struct valkyrie_regvals *init;
-- volatile struct valkyrie_regs *valkyrie_regs = p->valkyrie_regs;
-- int vmode, cmode;
--
-- vmode = par->vmode;
-- cmode = par->cmode;
--
-- if (vmode <= 0
-- || vmode > VMODE_MAX
-- || (init = valkyrie_reg_init[vmode - 1]) == NULL)
-- panic("valkyrie: display mode %d not supported", vmode);
--
-- /* Reset the valkyrie */
-- out_8(&valkyrie_regs->status.r, 0);
-- udelay(100);
--
-- /* Initialize display timing registers */
-- out_8(&valkyrie_regs->mode.r, init->mode | 0x80);
-- out_8(&valkyrie_regs->depth.r, cmode + 3);
-- set_valkyrie_clock(init->clock_params);
-- udelay(100);
--
-- /* Turn on display */
-- out_8(&valkyrie_regs->mode.r, init->mode);
-+ printk(KERN_INFO "using video mode %d and color mode %d.\n",
-+ default_vmode, default_cmode);
- }
-
- int __init valkyriefb_init(void)
- {
- struct fb_info_valkyrie *p;
- unsigned long frame_buffer_phys, cmap_regs_phys, flags;
-+ int err;
-
- #ifdef CONFIG_MAC
- if (!MACH_IS_MAC)
-@@ -503,10 +337,11 @@ int __init valkyriefb_init(void)
- if (dp == 0)
- return 0;
-
-- if(dp->n_addrs != 1) {
-- printk(KERN_ERR "expecting 1 address for valkyrie (got %d)", dp->n_addrs);
-+ if (dp->n_addrs != 1) {
-+ printk(KERN_ERR "expecting 1 address for valkyrie (got %d)\n",
-+ dp->n_addrs);
- return 0;
-- }
-+ }
-
- frame_buffer_phys = dp->addrs[0].address;
- cmap_regs_phys = dp->addrs[0].address+0x304000;
-@@ -515,7 +350,7 @@ int __init valkyriefb_init(void)
-
- p = kmalloc(sizeof(*p), GFP_ATOMIC);
- if (p == 0)
-- return 0;
-+ return -ENOMEM;
- memset(p, 0, sizeof(*p));
-
- /* Map in frame buffer and registers */
-@@ -524,14 +359,42 @@ int __init valkyriefb_init(void)
- return 0;
- }
- p->total_vram = 0x100000;
-- p->frame_buffer_phys = frame_buffer_phys;
-+ p->frame_buffer_phys = frame_buffer_phys;
- p->frame_buffer = __ioremap(frame_buffer_phys, p->total_vram, flags);
- p->cmap_regs_phys = cmap_regs_phys;
- p->cmap_regs = ioremap(p->cmap_regs_phys, 0x1000);
- p->valkyrie_regs_phys = cmap_regs_phys+0x6000;
- p->valkyrie_regs = ioremap(p->valkyrie_regs_phys, 0x1000);
-- init_valkyrie(p);
-+ err = -ENOMEM;
-+ if (p->frame_buffer == NULL || p->cmap_regs == NULL
-+ || p->valkyrie_regs == NULL) {
-+ printk(KERN_ERR "valkyriefb: couldn't map resources\n");
-+ goto out_free;
-+ }
-+
-+ valkyrie_choose_mode(p);
-+ mac_vmode_to_var(default_vmode, default_cmode, &p->info.var);
-+ valkyrie_init_info(&p->info, p);
-+ valkyrie_init_fix(&p->info.fix, p);
-+ if (valkyriefb_set_par(&p->info))
-+ /* "can't happen" */
-+ printk(KERN_ERR "valkyriefb: can't set default video mode\n");
-+
-+ if ((err = register_framebuffer(&p->info)) != 0)
-+ goto out_free;
-+
-+ printk(KERN_INFO "fb%d: valkyrie frame buffer device\n", p->info.node);
- return 0;
-+
-+ out_free:
-+ if (p->frame_buffer)
-+ iounmap(p->frame_buffer);
-+ if (p->cmap_regs)
-+ iounmap(p->cmap_regs);
-+ if (p->valkyrie_regs)
-+ iounmap(p->valkyrie_regs);
-+ kfree(p);
-+ return err;
- }
-
- /*
-@@ -541,22 +404,22 @@ static int read_valkyrie_sense(struct fb
- {
- int sense, in;
-
-- out_8(&p->valkyrie_regs->msense.r, 0); /* release all lines */
-- __delay(20000);
-- sense = ((in = in_8(&p->valkyrie_regs->msense.r)) & 0x70) << 4;
-- /* drive each sense line low in turn and collect the other 2 */
-- out_8(&p->valkyrie_regs->msense.r, 4); /* drive A low */
-- __delay(20000);
-- sense |= ((in = in_8(&p->valkyrie_regs->msense.r)) & 0x30);
-- out_8(&p->valkyrie_regs->msense.r, 2); /* drive B low */
-- __delay(20000);
-- sense |= ((in = in_8(&p->valkyrie_regs->msense.r)) & 0x40) >> 3;
-+ out_8(&p->valkyrie_regs->msense.r, 0); /* release all lines */
-+ __delay(20000);
-+ sense = ((in = in_8(&p->valkyrie_regs->msense.r)) & 0x70) << 4;
-+ /* drive each sense line low in turn and collect the other 2 */
-+ out_8(&p->valkyrie_regs->msense.r, 4); /* drive A low */
-+ __delay(20000);
-+ sense |= ((in = in_8(&p->valkyrie_regs->msense.r)) & 0x30);
-+ out_8(&p->valkyrie_regs->msense.r, 2); /* drive B low */
-+ __delay(20000);
-+ sense |= ((in = in_8(&p->valkyrie_regs->msense.r)) & 0x40) >> 3;
- sense |= (in & 0x10) >> 2;
-- out_8(&p->valkyrie_regs->msense.r, 1); /* drive C low */
-- __delay(20000);
-- sense |= ((in = in_8(&p->valkyrie_regs->msense.r)) & 0x60) >> 5;
-+ out_8(&p->valkyrie_regs->msense.r, 1); /* drive C low */
-+ __delay(20000);
-+ sense |= ((in = in_8(&p->valkyrie_regs->msense.r)) & 0x60) >> 5;
-
-- out_8(&p->valkyrie_regs->msense.r, 7);
-+ out_8(&p->valkyrie_regs->msense.r, 7);
-
- return sense;
- }
-@@ -565,8 +428,6 @@ static int read_valkyrie_sense(struct fb
- * This routine takes a user-supplied var,
- * and picks the best vmode/cmode from it.
- */
--static int valkyrie_var_to_par(struct fb_var_screeninfo *var,
-- struct fb_par_valkyrie *par, const struct fb_info *fb_info)
-
- /* [bkn] I did a major overhaul of this function.
- *
-@@ -589,55 +450,56 @@ static int valkyrie_var_to_par(struct fb
- * good start...
- */
-
-+static int valkyrie_var_to_par(struct fb_var_screeninfo *var,
-+ struct fb_par_valkyrie *par, const struct fb_info *fb_info)
- {
-- int bpp = var->bits_per_pixel;
-+ int vmode, cmode;
- struct valkyrie_regvals *init;
- struct fb_info_valkyrie *p = (struct fb_info_valkyrie *) fb_info;
-
--
-- if(mac_var_to_vmode(var, &par->vmode, &par->cmode) != 0) {
-- printk(KERN_ERR "valkyrie_var_to_par: %dx%dx%d unsuccessful.\n",var->xres,var->yres,var->bits_per_pixel);
-+ if (mac_var_to_vmode(var, &vmode, &cmode) != 0) {
-+ printk(KERN_ERR "valkyriefb: can't do %dx%dx%d.\n",
-+ var->xres, var->yres, var->bits_per_pixel);
- return -EINVAL;
- }
-
- /* Check if we know about the wanted video mode */
-- if(!valkyrie_reg_init[par->vmode-1]) {
-- printk(KERN_ERR "valkyrie_var_to_par: vmode %d not valid.\n", par->vmode);
-+ if (vmode < 1 || vmode > VMODE_MAX || !valkyrie_reg_init[vmode-1]) {
-+ printk(KERN_ERR "valkyriefb: vmode %d not valid.\n", vmode);
- return -EINVAL;
- }
--
-- par->xres = var->xres;
-- par->yres = var->yres;
-- par->xoffset = 0;
-- par->yoffset = 0;
-- par->vxres = par->xres;
-- par->vyres = par->yres;
-
-- if (var->xres_virtual > var->xres || var->yres_virtual > var->yres
-- || var->xoffset != 0 || var->yoffset != 0) {
-+ if (cmode != CMODE_8 && cmode != CMODE_16) {
-+ printk(KERN_ERR "valkyriefb: cmode %d not valid.\n", cmode);
- return -EINVAL;
- }
-
-- if (bpp <= 8)
-- par->cmode = CMODE_8;
-- else if (bpp <= 16)
-- par->cmode = CMODE_16;
-- else {
-- printk(KERN_ERR "valkyrie_var_to_par: cmode %d not supported.\n", par->cmode);
-+ if (var->xres_virtual > var->xres || var->yres_virtual > var->yres
-+ || var->xoffset != 0 || var->yoffset != 0) {
- return -EINVAL;
- }
-
-- init = valkyrie_reg_init[par->vmode-1];
-- if (init->pitch[par->cmode] == 0) {
-- printk(KERN_ERR "valkyrie_var_to_par: vmode %d does not support cmode %d.\n", par->vmode, par->cmode);
-+ init = valkyrie_reg_init[vmode-1];
-+ if (init->pitch[cmode] == 0) {
-+ printk(KERN_ERR "valkyriefb: vmode %d does not support "
-+ "cmode %d.\n", vmode, cmode);
- return -EINVAL;
- }
-
-- if (valkyrie_vram_reqd(par->vmode, par->cmode) > p->total_vram) {
-- printk(KERN_ERR "valkyrie_var_to_par: not enough ram for vmode %d, cmode %d.\n", par->vmode, par->cmode);
-+ if (valkyrie_vram_reqd(vmode, cmode) > p->total_vram) {
-+ printk(KERN_ERR "valkyriefb: not enough ram for vmode %d, "
-+ "cmode %d.\n", vmode, cmode);
- return -EINVAL;
- }
-
-+ par->vmode = vmode;
-+ par->cmode = cmode;
-+ par->init = init;
-+ par->xres = var->xres;
-+ par->yres = var->yres;
-+ par->vxres = par->xres;
-+ par->vyres = par->yres;
-+
- return 0;
- }
-
-@@ -653,7 +515,9 @@ static void valkyrie_init_fix(struct fb_
- fix->mmio_start = p->valkyrie_regs_phys;
- fix->mmio_len = sizeof(struct valkyrie_regs);
- fix->type = FB_TYPE_PACKED_PIXELS;
--
-+ fix->smem_start = p->frame_buffer_phys + 0x1000;
-+ fix->smem_len = p->total_vram;
-+
- fix->type_aux = 0;
- fix->ywrapstep = 0;
- fix->ypanstep = 0;
-@@ -663,67 +527,23 @@ static void valkyrie_init_fix(struct fb_
-
- /* Fix must already be inited above */
- static void valkyrie_par_to_fix(struct fb_par_valkyrie *par,
-- struct fb_fix_screeninfo *fix,
-- struct fb_info_valkyrie *p)
-+ struct fb_fix_screeninfo *fix)
- {
-- fix->smem_start = p->frame_buffer_phys + 0x1000;
--#if 1
- fix->smem_len = valkyrie_vram_reqd(par->vmode, par->cmode);
--#else
-- fix->smem_len = p->total_vram;
--#endif
- fix->visual = (par->cmode == CMODE_8) ?
- FB_VISUAL_PSEUDOCOLOR : FB_VISUAL_DIRECTCOLOR;
- fix->line_length = par->vxres << par->cmode;
- /* ywrapstep, xpanstep, ypanstep */
- }
-
--static void valkyrie_init_display(struct display *disp)
--{
-- memset(disp, 0, sizeof(*disp));
-- disp->can_soft_blank = can_soft_blank;
-- disp->scrollmode = SCROLL_YREDRAW;
--}
--
--static void valkyrie_par_to_display(struct fb_par_valkyrie *par,
-- struct display *disp, struct fb_fix_screeninfo *fix, struct fb_info_valkyrie *p)
--{
-- disp->var = p->var;
--
-- if(disp->scrollmode != SCROLL_YREDRAW) {
-- printk(KERN_ERR "Scroll mode not YREDRAW in valkyrie_par_to_display\n");
-- disp->scrollmode = SCROLL_YREDRAW;
-- }
-- switch (par->cmode) {
--#ifdef FBCON_HAS_CFB8
-- case CMODE_8:
-- disp->dispsw = &fbcon_cfb8;
-- break;
--#endif
--#ifdef FBCON_HAS_CFB16
-- case CMODE_16:
-- disp->dispsw = &fbcon_cfb16;
-- disp->dispsw_data = p->fbcon_cfb16_cmap;
-- break;
--#endif
-- default:
-- disp->dispsw = &fbcon_dummy;
-- break;
-- }
--}
--
- static void __init valkyrie_init_info(struct fb_info *info, struct fb_info_valkyrie *p)
- {
-- strcpy(info->modename, p->fix.id);
- info->fbops = &valkyriefb_ops;
- info->screen_base = (char *) p->frame_buffer + 0x1000;
-- info->disp = &p->disp;
-- info->currcon = -1;
-- strcpy(info->fontname, fontname);
-- info->changevar = NULL;
-- info->switch_con = &valkyriefb_switch;
-- info->updatevar = &valkyriefb_updatevar;
- info->flags = FBINFO_FLAG_DEFAULT;
-+ info->pseudo_palette = p->pseudo_palette;
-+ fb_alloc_cmap(&info->cmap, 256, 0);
-+ info->par = &p->par;
- }
-
-
-@@ -738,41 +558,23 @@ int __init valkyriefb_setup(char *option
- return 0;
-
- while ((this_opt = strsep(&options, ",")) != NULL) {
-- if (!strncmp(this_opt, "font:", 5)) {
-- char *p;
-- int i;
--
-- p = this_opt + 5;
-- for (i = 0; i < sizeof(fontname) - 1; i++)
-- if (!*p || *p == ' ' || *p == ',')
-- break;
-- memcpy(fontname, this_opt + 5, i);
-- fontname[i] = 0;
-- }
-- else if (!strncmp(this_opt, "vmode:", 6)) {
-+ if (!strncmp(this_opt, "vmode:", 6)) {
- int vmode = simple_strtoul(this_opt+6, NULL, 0);
-- if (vmode > 0 && vmode <= VMODE_MAX)
-+ if (vmode > 0 && vmode <= VMODE_MAX)
- default_vmode = vmode;
- }
- else if (!strncmp(this_opt, "cmode:", 6)) {
- int depth = simple_strtoul(this_opt+6, NULL, 0);
- switch (depth) {
-- case 8:
-- default_cmode = CMODE_8;
-- break;
-- case 15:
-- case 16:
-- default_cmode = CMODE_16;
-- break;
-+ case 8:
-+ default_cmode = CMODE_8;
-+ break;
-+ case 15:
-+ case 16:
-+ default_cmode = CMODE_16;
-+ break;
- }
- }
-- /* XXX - remove these options once blanking has been tested */
-- else if (!strncmp(this_opt, "noblank", 7)) {
-- can_soft_blank = 0;
-- }
-- else if (!strncmp(this_opt, "blank", 5)) {
-- can_soft_blank = 1;
-- }
- }
- return 0;
- }
---- linux-2.6.0-test1/drivers/video/vesafb.c 2003-06-14 12:17:57.000000000 -0700
-+++ 25/drivers/video/vesafb.c 2003-07-19 17:03:50.000000000 -0700
-@@ -51,7 +51,7 @@ static struct fb_info fb_info;
- static u32 pseudo_palette[17];
-
- static int inverse = 0;
--static int mtrr = 0;
-+static int mtrr = 1;
-
- static int pmi_setpal = 0; /* pmi for palette changes ??? */
- static int ypan = 0; /* 0..nothing, 1..ypan, 2..ywrap */
-@@ -208,6 +208,8 @@ int __init vesafb_setup(char *options)
- pmi_setpal=1;
- else if (! strcmp(this_opt, "mtrr"))
- mtrr=1;
-+ else if (! strcmp(this_opt, "nomtrr"))
-+ mtrr=0;
- }
- return 0;
- }
-@@ -231,6 +233,12 @@ int __init vesafb_init(void)
- vesafb_fix.visual = (vesafb_defined.bits_per_pixel == 8) ?
- FB_VISUAL_PSEUDOCOLOR : FB_VISUAL_TRUECOLOR;
-
-+ /* limit framebuffer size to 16 MB. Otherwise we'll eat tons of
-+ * kernel address space for nothing if the gfx card has alot of
-+ * memory (>= 128 MB isn't uncommon these days ...) */
-+ if (vesafb_fix.smem_len > 16 * 1024 * 1024)
-+ vesafb_fix.smem_len = 16 * 1024 * 1024;
-+
- #ifndef __i386__
- screen_info.vesapm_seg = 0;
- #endif
---- linux-2.6.0-test1/fs/aio.c 2003-07-13 21:44:34.000000000 -0700
-+++ 25/fs/aio.c 2003-07-19 17:07:03.000000000 -0700
-@@ -28,6 +28,8 @@
- #include <linux/module.h>
- #include <linux/highmem.h>
- #include <linux/workqueue.h>
-+#include <linux/writeback.h>
-+#include <linux/pagemap.h>
-
- #include <asm/kmap_types.h>
- #include <asm/uaccess.h>
-@@ -39,6 +41,9 @@
- #define dprintk(x...) do { ; } while (0)
- #endif
-
-+long aio_run = 0; /* for testing only */
-+long aio_wakeups = 0; /* for testing only */
-+
- /*------ sysctl variables----*/
- atomic_t aio_nr = ATOMIC_INIT(0); /* current system wide number of aio requests */
- unsigned aio_max_nr = 0x10000; /* system wide maximum number of aio requests */
-@@ -48,6 +53,7 @@ static kmem_cache_t *kiocb_cachep;
- static kmem_cache_t *kioctx_cachep;
-
- static struct workqueue_struct *aio_wq;
-+static struct workqueue_struct *aio_fput_wq;
-
- /* Used for rare fput completion. */
- static void aio_fput_routine(void *);
-@@ -75,6 +81,7 @@ static int __init aio_setup(void)
- panic("unable to create kioctx cache");
-
- aio_wq = create_workqueue("aio");
-+ aio_fput_wq = create_workqueue("aio_fput");
-
- pr_debug("aio_setup: sizeof(struct page) = %d\n", (int)sizeof(struct page));
-
-@@ -281,6 +288,7 @@ static void aio_cancel_all(struct kioctx
- struct kiocb *iocb = list_kiocb(pos);
- list_del_init(&iocb->ki_list);
- cancel = iocb->ki_cancel;
-+ kiocbSetCancelled(iocb);
- if (cancel) {
- iocb->ki_users++;
- spin_unlock_irq(&ctx->ctx_lock);
-@@ -341,6 +349,11 @@ void exit_aio(struct mm_struct *mm)
- aio_cancel_all(ctx);
-
- wait_for_all_aios(ctx);
-+ /*
-+ * this is an overkill, but ensures we don't leave
-+ * the ctx on the aio_wq
-+ */
-+ flush_workqueue(aio_wq);
-
- if (1 != atomic_read(&ctx->users))
- printk(KERN_DEBUG
-@@ -395,6 +408,7 @@ static struct kiocb *__aio_get_req(struc
- req->ki_cancel = NULL;
- req->ki_retry = NULL;
- req->ki_user_obj = NULL;
-+ INIT_LIST_HEAD(&req->ki_run_list);
-
- /* Check if the completion queue has enough free space to
- * accept an event from this io.
-@@ -494,7 +508,7 @@ static int __aio_put_req(struct kioctx *
- spin_lock(&fput_lock);
- list_add(&req->ki_list, &fput_head);
- spin_unlock(&fput_lock);
-- queue_work(aio_wq, &fput_work);
-+ queue_work(aio_fput_wq, &fput_work);
- } else
- really_put_req(ctx, req);
- return 1;
-@@ -536,65 +550,302 @@ struct kioctx *lookup_ioctx(unsigned lon
- return ioctx;
- }
-
-+/*
-+ * use_mm
-+ * Makes the calling kernel thread take on the specified
-+ * mm context.
-+ * Called by the retry thread execute retries within the
-+ * iocb issuer's mm context, so that copy_from/to_user
-+ * operations work seamlessly for aio.
-+ * (Note: this routine is intended to be called only
-+ * from a kernel thread context)
-+ */
- static void use_mm(struct mm_struct *mm)
- {
-- struct mm_struct *active_mm = current->active_mm;
-+ struct mm_struct *active_mm;
-+ struct task_struct *tsk = current;
-+
-+ task_lock(tsk);
-+ active_mm = tsk->active_mm;
- atomic_inc(&mm->mm_count);
-- current->mm = mm;
-- if (mm != active_mm) {
-- current->active_mm = mm;
-- activate_mm(active_mm, mm);
-- }
-+ tsk->mm = mm;
-+ tsk->active_mm = mm;
-+ activate_mm(active_mm, mm);
-+ task_unlock(tsk);
-+
- mmdrop(active_mm);
- }
-
--static void unuse_mm(struct mm_struct *mm)
-+/*
-+ * unuse_mm
-+ * Reverses the effect of use_mm, i.e. releases the
-+ * specified mm context which was earlier taken on
-+ * by the calling kernel thread
-+ * (Note: this routine is intended to be called only
-+ * from a kernel thread context)
-+ *
-+ * Comments: Called with ctx->ctx_lock held. This nests
-+ * task_lock instead ctx_lock.
-+ */
-+void unuse_mm(struct mm_struct *mm)
- {
-- current->mm = NULL;
-+ struct task_struct *tsk = current;
-+
-+ task_lock(tsk);
-+ tsk->mm = NULL;
- /* active_mm is still 'mm' */
-- enter_lazy_tlb(mm, current);
-+ enter_lazy_tlb(mm, tsk);
-+ task_unlock(tsk);
- }
-
--/* Run on kevent's context. FIXME: needs to be per-cpu and warn if an
-- * operation blocks.
-+/*
-+ * Queue up a kiocb to be retried. Assumes that the kiocb
-+ * has already been marked as kicked, and places it on
-+ * the retry run list for the corresponding ioctx, if it
-+ * isn't already queued. Returns 1 if it actually queued
-+ * the kiocb (to tell the caller to activate the work
-+ * queue to process it), or 0, if it found that it was
-+ * already queued.
-+ *
-+ * Should be called with the spin lock iocb->ki_ctx->ctx_lock
-+ * held
- */
--static void aio_kick_handler(void *data)
-+static inline int __queue_kicked_iocb(struct kiocb *iocb)
- {
-- struct kioctx *ctx = data;
-+ struct kioctx *ctx = iocb->ki_ctx;
-
-- use_mm(ctx->mm);
-+ if (list_empty(&iocb->ki_run_list)) {
-+ list_add_tail(&iocb->ki_run_list,
-+ &ctx->run_list);
-+ iocb->ki_queued++;
-+ return 1;
-+ }
-+ return 0;
-+}
-
-- spin_lock_irq(&ctx->ctx_lock);
-- while (!list_empty(&ctx->run_list)) {
-- struct kiocb *iocb;
-- long ret;
-+/* aio_run_iocb
-+ * This is the core aio execution routine. It is
-+ * invoked both for initial i/o submission and
-+ * subsequent retries via the aio_kick_handler.
-+ * Expects to be invoked with iocb->ki_ctx->lock
-+ * already held. The lock is released and reaquired
-+ * as needed during processing.
-+ *
-+ * Calls the iocb retry method (already setup for the
-+ * iocb on initial submission) for operation specific
-+ * handling, but takes care of most of common retry
-+ * execution details for a given iocb. The retry method
-+ * needs to be non-blocking as far as possible, to avoid
-+ * holding up other iocbs waiting to be serviced by the
-+ * retry kernel thread.
-+ *
-+ * The trickier parts in this code have to do with
-+ * ensuring that only one retry instance is in progress
-+ * for a given iocb at any time. Providing that guarantee
-+ * simplifies the coding of individual aio operations as
-+ * it avoids various potential races.
-+ */
-+static ssize_t aio_run_iocb(struct kiocb *iocb)
-+{
-+ struct kioctx *ctx = iocb->ki_ctx;
-+ ssize_t (*retry)(struct kiocb *);
-+ ssize_t ret;
-
-- iocb = list_entry(ctx->run_list.next, struct kiocb,
-- ki_run_list);
-- list_del(&iocb->ki_run_list);
-- iocb->ki_users ++;
-- spin_unlock_irq(&ctx->ctx_lock);
-+ if (iocb->ki_retried++ > 1024*1024) {
-+ printk("Maximal retry count. Bytes done %Zd\n",
-+ iocb->ki_nbytes - iocb->ki_left);
-+ return -EAGAIN;
-+ }
-+
-+ if (!(iocb->ki_retried & 0xff)) {
-+ pr_debug("%ld retry: %d of %d (kick %ld, Q %ld run %ld, wake %ld)\n",
-+ iocb->ki_retried,
-+ iocb->ki_nbytes - iocb->ki_left, iocb->ki_nbytes,
-+ iocb->ki_kicked, iocb->ki_queued, aio_run, aio_wakeups);
-+ }
-+
-+ if (!(retry = iocb->ki_retry)) {
-+ printk("aio_run_iocb: iocb->ki_retry = NULL\n");
-+ return 0;
-+ }
-+
-+ /*
-+ * We don't want the next retry iteration for this
-+ * operation to start until this one has returned and
-+ * updated the iocb state. However, wait_queue functions
-+ * can trigger a kick_iocb from interrupt context in the
-+ * meantime, indicating that data is available for the next
-+ * iteration. We want to remember that and enable the
-+ * next retry iteration _after_ we are through with
-+ * this one.
-+ *
-+ * So, in order to be able to register a "kick", but
-+ * prevent it from being queued now, we clear the kick
-+ * flag, but make the kick code *think* that the iocb is
-+ * still on the run list until we are actually done.
-+ * When we are done with this iteration, we check if
-+ * the iocb was kicked in the meantime and if so, queue
-+ * it up afresh.
-+ */
-+
-+ kiocbClearKicked(iocb);
-+
-+ /*
-+ * This is so that aio_complete knows it doesn't need to
-+ * pull the iocb off the run list (We can't just call
-+ * INIT_LIST_HEAD because we don't want a kick_iocb to
-+ * queue this on the run list yet)
-+ */
-+ iocb->ki_run_list.next = iocb->ki_run_list.prev = NULL;
-+ iocb->ki_retry = NULL;
-+ spin_unlock_irq(&ctx->ctx_lock);
-+
-+ /* Quit retrying if the i/o has been cancelled */
-+ if (kiocbIsCancelled(iocb)) {
-+ ret = -EINTR;
-+ aio_complete(iocb, ret, 0);
-+ /* must not access the iocb after this */
-+ goto out;
-+ }
-+
-+ /*
-+ * Now we are all set to call the retry method in async
-+ * context. By setting this thread's io_wait context
-+ * to point to the wait queue entry inside the currently
-+ * running iocb for the duration of the retry, we ensure
-+ * that async notification wakeups are queued by the
-+ * operation instead of blocking waits, and when notified,
-+ * cause the iocb to be kicked for continuation (through
-+ * the aio_wake_function callback).
-+ */
-+ BUG_ON(current->io_wait != NULL);
-+ current->io_wait = &iocb->ki_wait;
-+ ret = retry(iocb);
-+ current->io_wait = NULL;
-
-- kiocbClearKicked(iocb);
-- ret = iocb->ki_retry(iocb);
-+ if (-EIOCBRETRY != ret) {
- if (-EIOCBQUEUED != ret) {
-+ BUG_ON(!list_empty(&iocb->ki_wait.task_list));
- aio_complete(iocb, ret, 0);
-- iocb = NULL;
-+ /* must not access the iocb after this */
- }
-+ } else {
-+ /*
-+ * Issue an additional retry to avoid waiting forever if
-+ * no waits were queued (e.g. in case of a short read).
-+ */
-+ if (list_empty(&iocb->ki_wait.task_list))
-+ kiocbSetKicked(iocb);
-+ }
-+out:
-+ spin_lock_irq(&ctx->ctx_lock);
-
-- spin_lock_irq(&ctx->ctx_lock);
-- if (NULL != iocb)
-- __aio_put_req(ctx, iocb);
-+ if (-EIOCBRETRY == ret) {
-+ /*
-+ * OK, now that we are done with this iteration
-+ * and know that there is more left to go,
-+ * this is where we let go so that a subsequent
-+ * "kick" can start the next iteration
-+ */
-+ iocb->ki_retry = retry;
-+ /* will make __queue_kicked_iocb succeed from here on */
-+ INIT_LIST_HEAD(&iocb->ki_run_list);
-+ /* we must queue the next iteration ourselves, if it
-+ * has already been kicked */
-+ if (kiocbIsKicked(iocb)) {
-+ __queue_kicked_iocb(iocb);
-+ }
- }
-+ return ret;
-+}
-+
-+/*
-+ * __aio_run_iocbs:
-+ * Process all pending retries queued on the ioctx
-+ * run list.
-+ * Assumes it is operating within the aio issuer's mm
-+ * context. Expects to be called with ctx->ctx_lock held
-+ */
-+static void __aio_run_iocbs(struct kioctx *ctx)
-+{
-+ struct kiocb *iocb;
-+ ssize_t ret;
-+ int count = 0;
-+
-+ while (!list_empty(&ctx->run_list)) {
-+ iocb = list_entry(ctx->run_list.next, struct kiocb,
-+ ki_run_list);
-+ list_del(&iocb->ki_run_list);
-+ ret = aio_run_iocb(iocb);
-+ count++;
-+ }
-+ aio_run++;
-+}
-+
-+/*
-+ * aio_run_iocbs:
-+ * Process all pending retries queued on the ioctx
-+ * run list.
-+ * Assumes it is operating within the aio issuer's mm
-+ * context.
-+ */
-+static inline void aio_run_iocbs(struct kioctx *ctx)
-+{
-+ spin_lock_irq(&ctx->ctx_lock);
-+ __aio_run_iocbs(ctx);
- spin_unlock_irq(&ctx->ctx_lock);
-+}
-
-+/*
-+ * aio_kick_handler:
-+ * Work queue handler triggered to process pending
-+ * retries on an ioctx. Takes on the aio issuer's
-+ * mm context before running the iocbs.
-+ * Run on aiod's context.
-+ */
-+static void aio_kick_handler(void *data)
-+{
-+ struct kioctx *ctx = data;
-+
-+ use_mm(ctx->mm);
-+ spin_lock_irq(&ctx->ctx_lock);
-+ __aio_run_iocbs(ctx);
- unuse_mm(ctx->mm);
-+ spin_unlock_irq(&ctx->ctx_lock);
- }
-
--void kick_iocb(struct kiocb *iocb)
-+
-+/*
-+ * Called by kick_iocb to queue the kiocb for retry
-+ * and if required activate the aio work queue to process
-+ * it
-+ */
-+void queue_kicked_iocb(struct kiocb *iocb)
- {
- struct kioctx *ctx = iocb->ki_ctx;
-+ unsigned long flags;
-+ int run = 0;
-+
-+ WARN_ON((!list_empty(&iocb->ki_wait.task_list)));
-+
-+ spin_lock_irqsave(&ctx->ctx_lock, flags);
-+ run = __queue_kicked_iocb(iocb);
-+ spin_unlock_irqrestore(&ctx->ctx_lock, flags);
-+ if (run) {
-+ queue_work(aio_wq, &ctx->wq);
-+ aio_wakeups++;
-+ }
-+}
-
-+/*
-+ * kick_iocb:
-+ * Called typically from a wait queue callback context
-+ * (aio_wake_function) to trigger a retry of the iocb.
-+ * The retry is usually executed by aio workqueue
-+ * threads (See aio_kick_handler).
-+ */
-+void kick_iocb(struct kiocb *iocb)
-+{
- /* sync iocbs are easy: they can only ever be executing from a
- * single context. */
- if (is_sync_kiocb(iocb)) {
-@@ -603,12 +854,10 @@ void kick_iocb(struct kiocb *iocb)
- return;
- }
-
-+ iocb->ki_kicked++;
-+ /* If its already kicked we shouldn't queue it again */
- if (!kiocbTryKick(iocb)) {
-- unsigned long flags;
-- spin_lock_irqsave(&ctx->ctx_lock, flags);
-- list_add_tail(&iocb->ki_run_list, &ctx->run_list);
-- spin_unlock_irqrestore(&ctx->ctx_lock, flags);
-- schedule_work(&ctx->wq);
-+ queue_kicked_iocb(iocb);
- }
- }
-
-@@ -661,6 +910,9 @@ int aio_complete(struct kiocb *iocb, lon
- */
- spin_lock_irqsave(&ctx->ctx_lock, flags);
-
-+ if (iocb->ki_run_list.prev && !list_empty(&iocb->ki_run_list))
-+ list_del_init(&iocb->ki_run_list);
-+
- ring = kmap_atomic(info->ring_pages[0], KM_IRQ1);
-
- tail = info->tail;
-@@ -689,6 +941,11 @@ int aio_complete(struct kiocb *iocb, lon
-
- pr_debug("added to ring %p at [%lu]\n", iocb, tail);
-
-+ pr_debug("%ld retries: %d of %d (kicked %ld, Q %ld run %ld wake %ld)\n",
-+ iocb->ki_retried,
-+ iocb->ki_nbytes - iocb->ki_left, iocb->ki_nbytes,
-+ iocb->ki_kicked, iocb->ki_queued, aio_run, aio_wakeups);
-+
- /* everything turned out well, dispose of the aiocb. */
- ret = __aio_put_req(ctx, iocb);
-
-@@ -803,6 +1060,7 @@ static int read_events(struct kioctx *ct
- int i = 0;
- struct io_event ent;
- struct timeout to;
-+ int event_loop = 0; /* testing only */
-
- /* needed to zero any padding within an entry (there shouldn't be
- * any, but C is fun!
-@@ -852,7 +1110,6 @@ static int read_events(struct kioctx *ct
- add_wait_queue_exclusive(&ctx->wait, &wait);
- do {
- set_task_state(tsk, TASK_INTERRUPTIBLE);
--
- ret = aio_read_evt(ctx, &ent);
- if (ret)
- break;
-@@ -862,6 +1119,7 @@ static int read_events(struct kioctx *ct
- if (to.timed_out) /* Only check after read evt */
- break;
- schedule();
-+ event_loop++;
- if (signal_pending(tsk)) {
- ret = -EINTR;
- break;
-@@ -889,6 +1147,9 @@ static int read_events(struct kioctx *ct
- if (timeout)
- clear_timeout(&to);
- out:
-+ pr_debug("event loop executed %d times\n", event_loop);
-+ pr_debug("aio_run %ld\n", aio_run);
-+ pr_debug("aio_wakeups %ld\n", aio_wakeups);
- return i ? i : ret;
- }
-
-@@ -918,6 +1179,11 @@ static void io_destroy(struct kioctx *io
-
- aio_cancel_all(ioctx);
- wait_for_all_aios(ioctx);
-+ /*
-+ * this is an overkill, but ensures we don't leave
-+ * the ctx on the aio_wq
-+ */
-+ flush_workqueue(aio_wq);
- put_ioctx(ioctx); /* once for the lookup */
- }
-
-@@ -980,13 +1246,191 @@ asmlinkage long sys_io_destroy(aio_conte
- return -EINVAL;
- }
-
-+/*
-+ * Retry method for aio_read (also used for first time submit)
-+ * Responsible for updating iocb state as retries progress
-+ */
-+static ssize_t aio_pread(struct kiocb *iocb)
-+{
-+ struct file *file = iocb->ki_filp;
-+ ssize_t ret = 0;
-+
-+ ret = file->f_op->aio_read(iocb, iocb->ki_buf,
-+ iocb->ki_left, iocb->ki_pos);
-+
-+ /*
-+ * Can't just depend on iocb->ki_left to determine
-+ * whether we are done. This may have been a short read.
-+ */
-+ if (ret > 0) {
-+ iocb->ki_buf += ret;
-+ iocb->ki_left -= ret;
-+
-+ ret = -EIOCBRETRY;
-+ }
-+
-+ /* This means we must have transferred all that we could */
-+ /* No need to retry anymore */
-+ if ((ret == 0) || (iocb->ki_left == 0))
-+ ret = iocb->ki_nbytes - iocb->ki_left;
-+
-+ return ret;
-+}
-+
-+/*
-+ * Retry method for aio_write (also used for first time submit)
-+ * Responsible for updating iocb state as retries progress
-+ */
-+static ssize_t aio_pwrite(struct kiocb *iocb)
-+{
-+ struct file *file = iocb->ki_filp;
-+ struct address_space *mapping = file->f_dentry->d_inode->i_mapping;
-+ struct inode *inode = mapping->host;
-+ ssize_t ret = 0;
-+
-+ ret = file->f_op->aio_write(iocb, iocb->ki_buf,
-+ iocb->ki_left, iocb->ki_pos);
-+
-+ /*
-+ * Even if iocb->ki_left = 0, we may need to wait
-+ * for a balance_dirty_pages to complete
-+ */
-+ if (ret > 0) {
-+ iocb->ki_buf += iocb->ki_buf ? ret : 0;
-+ iocb->ki_left -= ret;
-+
-+ ret = -EIOCBRETRY;
-+ }
-+
-+ /* This means we must have transferred all that we could */
-+ /* No need to retry anymore unless we need to osync data */
-+ if (ret == 0) {
-+ ret = iocb->ki_nbytes - iocb->ki_left;
-+ if (!iocb->ki_buf)
-+ return ret;
-+
-+ /* Set things up for potential O_SYNC */
-+ if (ret > 0 && ((file->f_flags & O_SYNC) || IS_SYNC(inode))) {
-+ iocb->ki_buf = NULL;
-+ iocb->ki_pos -= ret; /* back up fpos */
-+ iocb->ki_left = ret; /* sync what we have written out */
-+ iocb->ki_nbytes = ret;
-+ ret = -EIOCBRETRY;
-+ }
-+ }
-+
-+ return ret;
-+}
-+
-+static ssize_t aio_fdsync(struct kiocb *iocb)
-+{
-+ struct file *file = iocb->ki_filp;
-+ ssize_t ret = -EINVAL;
-+
-+ if (file->f_op->aio_fsync)
-+ ret = file->f_op->aio_fsync(iocb, 1);
-+ return ret;
-+}
-+
-+static ssize_t aio_fsync(struct kiocb *iocb)
-+{
-+ struct file *file = iocb->ki_filp;
-+ ssize_t ret = -EINVAL;
-+
-+ if (file->f_op->aio_fsync)
-+ ret = file->f_op->aio_fsync(iocb, 0);
-+ return ret;
-+}
-+
-+/*
-+ * aio_setup_iocb:
-+ * Performs the initial checks and aio retry method
-+ * setup for the kiocb at the time of io submission.
-+ */
-+ssize_t aio_setup_iocb(struct kiocb *kiocb)
-+{
-+ struct file *file = kiocb->ki_filp;
-+ ssize_t ret = 0;
-+
-+ switch (kiocb->ki_opcode) {
-+ case IOCB_CMD_PREAD:
-+ ret = -EBADF;
-+ if (unlikely(!(file->f_mode & FMODE_READ)))
-+ break;
-+ ret = -EFAULT;
-+ if (unlikely(!access_ok(VERIFY_WRITE, kiocb->ki_buf,
-+ kiocb->ki_left)))
-+ break;
-+ ret = -EINVAL;
-+ if (file->f_op->aio_read)
-+ kiocb->ki_retry = aio_pread;
-+ break;
-+ case IOCB_CMD_PWRITE:
-+ ret = -EBADF;
-+ if (unlikely(!(file->f_mode & FMODE_WRITE)))
-+ break;
-+ ret = -EFAULT;
-+ if (unlikely(!access_ok(VERIFY_READ, kiocb->ki_buf,
-+ kiocb->ki_left)))
-+ break;
-+ ret = -EINVAL;
-+ if (file->f_op->aio_write)
-+ kiocb->ki_retry = aio_pwrite;
-+ break;
-+ case IOCB_CMD_FDSYNC:
-+ ret = -EINVAL;
-+ if (file->f_op->aio_fsync)
-+ kiocb->ki_retry = aio_fdsync;
-+ break;
-+ case IOCB_CMD_FSYNC:
-+ ret = -EINVAL;
-+ if (file->f_op->aio_fsync)
-+ kiocb->ki_retry = aio_fsync;
-+ break;
-+ default:
-+ dprintk("EINVAL: io_submit: no operation provided\n");
-+ ret = -EINVAL;
-+ }
-+
-+ if (!kiocb->ki_retry)
-+ return ret;
-+
-+ return 0;
-+}
-+
-+/*
-+ * aio_wake_function:
-+ * wait queue callback function for aio notification,
-+ * Simply triggers a retry of the operation via kick_iocb.
-+ *
-+ * This callback is specified in the wait queue entry in
-+ * a kiocb (current->io_wait points to this wait queue
-+ * entry when an aio operation executes; it is used
-+ * instead of a synchronous wait when an i/o blocking
-+ * condition is encountered during aio).
-+ *
-+ * Note:
-+ * This routine is executed with the wait queue lock held.
-+ * Since kick_iocb acquires iocb->ctx->ctx_lock, it nests
-+ * the ioctx lock inside the wait queue lock. This is safe
-+ * because this callback isn't used for wait queues which
-+ * are nested inside ioctx lock (i.e. ctx->wait)
-+ */
-+int aio_wake_function(wait_queue_t *wait, unsigned mode, int sync)
-+{
-+ struct kiocb *iocb = container_of(wait, struct kiocb, ki_wait);
-+
-+ list_del_init(&wait->task_list);
-+ kick_iocb(iocb);
-+ return 1;
-+}
-+
- int io_submit_one(struct kioctx *ctx, struct iocb __user *user_iocb,
- struct iocb *iocb)
- {
- struct kiocb *req;
- struct file *file;
- ssize_t ret;
-- char *buf;
-
- /* enforce forwards compatibility on users */
- if (unlikely(iocb->aio_reserved1 || iocb->aio_reserved2 ||
-@@ -1027,51 +1471,31 @@ int io_submit_one(struct kioctx *ctx, st
- req->ki_user_data = iocb->aio_data;
- req->ki_pos = iocb->aio_offset;
-
-- buf = (char *)(unsigned long)iocb->aio_buf;
-+ req->ki_buf = (char *)(unsigned long)iocb->aio_buf;
-+ req->ki_left = req->ki_nbytes = iocb->aio_nbytes;
-+ req->ki_opcode = iocb->aio_lio_opcode;
-+ init_waitqueue_func_entry(&req->ki_wait, aio_wake_function);
-+ INIT_LIST_HEAD(&req->ki_wait.task_list);
-+ req->ki_run_list.next = req->ki_run_list.prev = NULL;
-+ req->ki_retry = NULL;
-+ req->ki_retried = 0;
-+ req->ki_kicked = 0;
-+ req->ki_queued = 0;
-+ aio_run = 0;
-+ aio_wakeups = 0;
-
-- switch (iocb->aio_lio_opcode) {
-- case IOCB_CMD_PREAD:
-- ret = -EBADF;
-- if (unlikely(!(file->f_mode & FMODE_READ)))
-- goto out_put_req;
-- ret = -EFAULT;
-- if (unlikely(!access_ok(VERIFY_WRITE, buf, iocb->aio_nbytes)))
-- goto out_put_req;
-- ret = -EINVAL;
-- if (file->f_op->aio_read)
-- ret = file->f_op->aio_read(req, buf,
-- iocb->aio_nbytes, req->ki_pos);
-- break;
-- case IOCB_CMD_PWRITE:
-- ret = -EBADF;
-- if (unlikely(!(file->f_mode & FMODE_WRITE)))
-- goto out_put_req;
-- ret = -EFAULT;
-- if (unlikely(!access_ok(VERIFY_READ, buf, iocb->aio_nbytes)))
-- goto out_put_req;
-- ret = -EINVAL;
-- if (file->f_op->aio_write)
-- ret = file->f_op->aio_write(req, buf,
-- iocb->aio_nbytes, req->ki_pos);
-- break;
-- case IOCB_CMD_FDSYNC:
-- ret = -EINVAL;
-- if (file->f_op->aio_fsync)
-- ret = file->f_op->aio_fsync(req, 1);
-- break;
-- case IOCB_CMD_FSYNC:
-- ret = -EINVAL;
-- if (file->f_op->aio_fsync)
-- ret = file->f_op->aio_fsync(req, 0);
-- break;
-- default:
-- dprintk("EINVAL: io_submit: no operation provided\n");
-- ret = -EINVAL;
-- }
-+ ret = aio_setup_iocb(req);
-+
-+ if (ret)
-+ goto out_put_req;
-+
-+ spin_lock_irq(&ctx->ctx_lock);
-+ ret = aio_run_iocb(req);
-+ spin_unlock_irq(&ctx->ctx_lock);
-+
-+ if (-EIOCBRETRY == ret)
-+ queue_work(aio_wq, &ctx->wq);
-
-- if (likely(-EIOCBQUEUED == ret))
-- return 0;
-- aio_complete(req, ret, 0);
- return 0;
-
- out_put_req:
---- linux-2.6.0-test1/fs/binfmt_elf.c 2003-07-13 21:44:35.000000000 -0700
-+++ 25/fs/binfmt_elf.c 2003-07-19 17:03:50.000000000 -0700
-@@ -1158,7 +1158,7 @@ static int elf_dump_thread_status(long s
- t->num_notes++;
- sz += notesize(&t->notes[0]);
-
-- if ((t->prstatus.pr_fpvalid = elf_core_copy_task_fpregs(p, &t->fpu))) {
-+ if ((t->prstatus.pr_fpvalid = elf_core_copy_task_fpregs(p, NULL, &t->fpu))) {
- fill_note(&t->notes[1], "CORE", NT_PRFPREG, sizeof(t->fpu), &(t->fpu));
- t->num_notes++;
- sz += notesize(&t->notes[1]);
-@@ -1286,7 +1286,7 @@ static int elf_core_dump(long signr, str
- fill_note(notes +2, "CORE", NT_TASKSTRUCT, sizeof(*current), current);
-
- /* Try to dump the FPU. */
-- if ((prstatus->pr_fpvalid = elf_core_copy_task_fpregs(current, fpu)))
-+ if ((prstatus->pr_fpvalid = elf_core_copy_task_fpregs(current, regs, fpu)))
- fill_note(notes +3, "CORE", NT_PRFPREG, sizeof(*fpu), fpu);
- else
- --numnote;
---- linux-2.6.0-test1/fs/bio.c 2003-06-26 22:07:25.000000000 -0700
-+++ 25/fs/bio.c 2003-07-19 17:03:50.000000000 -0700
-@@ -18,7 +18,7 @@
- #include <linux/mm.h>
- #include <linux/swap.h>
- #include <linux/bio.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/slab.h>
- #include <linux/init.h>
- #include <linux/kernel.h>
---- linux-2.6.0-test1/fs/buffer.c 2003-07-13 21:44:35.000000000 -0700
-+++ 25/fs/buffer.c 2003-07-19 17:06:53.000000000 -0700
-@@ -91,6 +91,7 @@ void wake_up_buffer(struct buffer_head *
- {
- wait_queue_head_t *wq = bh_waitq_head(bh);
-
-+ smp_mb();
- if (waitqueue_active(wq))
- wake_up_all(wq);
- }
-@@ -115,27 +116,50 @@ void unlock_buffer(struct buffer_head *b
- }
-
- /*
-- * Block until a buffer comes unlocked. This doesn't stop it
-+ * Wait until a buffer comes unlocked. This doesn't stop it
- * from becoming locked again - you have to lock it yourself
- * if you want to preserve its state.
-+ * If the wait queue parameter specifies an async i/o callback,
-+ * then instead of blocking, we just queue up the callback
-+ * on the wait queue for async notification when the buffer gets
-+ * unlocked.
-+ * A NULL wait queue parameter defaults to synchronous behaviour
- */
--void __wait_on_buffer(struct buffer_head * bh)
-+int __wait_on_buffer_wq(struct buffer_head * bh, wait_queue_t *wait)
- {
- wait_queue_head_t *wqh = bh_waitq_head(bh);
-- DEFINE_WAIT(wait);
-+ DEFINE_WAIT(local_wait);
-+
-+ if (!wait)
-+ wait = &local_wait;
-
- if (atomic_read(&bh->b_count) == 0 &&
- (!bh->b_page || !PageLocked(bh->b_page)))
- buffer_error();
-
- do {
-- prepare_to_wait(wqh, &wait, TASK_UNINTERRUPTIBLE);
-+ prepare_to_wait(wqh, wait, TASK_UNINTERRUPTIBLE);
- if (buffer_locked(bh)) {
- blk_run_queues();
-+ if (!is_sync_wait(wait)) {
-+ /*
-+ * if we've queued an async wait queue
-+ * callback do not block; just tell the
-+ * caller to return and retry later when
-+ * the callback is notified
-+ */
-+ return -EIOCBRETRY;
-+ }
- io_schedule();
- }
- } while (buffer_locked(bh));
-- finish_wait(wqh, &wait);
-+ finish_wait(wqh, wait);
-+ return 0;
-+}
-+
-+void __wait_on_buffer(struct buffer_head * bh)
-+{
-+ __wait_on_buffer_wq(bh, NULL);
- }
-
- static void
-@@ -414,6 +438,9 @@ __find_get_block_slow(struct block_devic
- bh = bh->b_this_page;
- } while (bh != head);
- buffer_error();
-+ printk("block=%llu, b_blocknr=%llu\n",
-+ (unsigned long long)block, (unsigned long long)bh->b_blocknr);
-+ printk("b_state=0x%08lx, b_size=%u\n", bh->b_state, bh->b_size);
- out_unlock:
- spin_unlock(&bd_mapping->private_lock);
- page_cache_release(page);
-@@ -1274,9 +1301,12 @@ void __bforget(struct buffer_head *bh)
- __brelse(bh);
- }
-
--static struct buffer_head *__bread_slow(struct buffer_head *bh)
-+static struct buffer_head *__bread_slow_wq(struct buffer_head *bh,
-+ wait_queue_t *wait)
- {
-- lock_buffer(bh);
-+ if (-EIOCBRETRY == lock_buffer_wq(bh, wait))
-+ return ERR_PTR(-EIOCBRETRY);
-+
- if (buffer_uptodate(bh)) {
- unlock_buffer(bh);
- return bh;
-@@ -1286,7 +1316,8 @@ static struct buffer_head *__bread_slow(
- get_bh(bh);
- bh->b_end_io = end_buffer_io_sync;
- submit_bh(READ, bh);
-- wait_on_buffer(bh);
-+ if (-EIOCBRETRY == wait_on_buffer_wq(bh, wait))
-+ return ERR_PTR(-EIOCBRETRY);
- if (buffer_uptodate(bh))
- return bh;
- }
-@@ -1294,6 +1325,11 @@ static struct buffer_head *__bread_slow(
- return NULL;
- }
-
-+static inline struct buffer_head *__bread_slow(struct buffer_head *bh)
-+{
-+ return __bread_slow_wq(bh, NULL);
-+}
-+
- /*
- * Per-cpu buffer LRU implementation. To reduce the cost of __find_get_block().
- * The bhs[] array is sorted - newest buffer is at bhs[0]. Buffers have their
-@@ -1481,6 +1517,18 @@ __bread(struct block_device *bdev, secto
- }
- EXPORT_SYMBOL(__bread);
-
-+struct buffer_head *
-+__bread_wq(struct block_device *bdev, sector_t block, int size,
-+ wait_queue_t *wait)
-+{
-+ struct buffer_head *bh = __getblk(bdev, block, size);
-+
-+ if (!buffer_uptodate(bh))
-+ bh = __bread_slow_wq(bh, wait);
-+ return bh;
-+}
-+EXPORT_SYMBOL(__bread_wq);
-+
- /*
- * invalidate_bh_lrus() is called rarely - at unmount. Because it is only for
- * unmount it only needs to ensure that all buffers from the target device are
-@@ -1958,8 +2006,9 @@ static int __block_prepare_write(struct
- /*
- * If we issued read requests - let them complete.
- */
-- while(wait_bh > wait) {
-- wait_on_buffer(*--wait_bh);
-+ while (wait_bh > wait) {
-+ if ((err = wait_on_buffer_wq(*--wait_bh, current->io_wait)))
-+ return err;
- if (!buffer_uptodate(*wait_bh))
- return -EIO;
- }
---- linux-2.6.0-test1/fs/cifs/CHANGES 2003-07-13 21:44:35.000000000 -0700
-+++ 25/fs/cifs/CHANGES 2003-07-19 17:03:50.000000000 -0700
-@@ -1,3 +1,12 @@
-+Version 0.83
-+------------
-+Fix oops when mounting to long server names caused by inverted parms to kmalloc.
-+Fix MultiuserMount (/proc/fs/cifs configuration setting) so that when enabled
-+we will choose a cifs user session (smb uid) that better matches the local
-+uid if a) the mount uid does not match the current uid and b) we have another
-+session to the same server (ip address) for a different mount which
-+matches the current local uid.
-+
- Version 0.82
- ------------
- Add support for mknod of block or character devices. Fix oplock
---- linux-2.6.0-test1/fs/cifs/cifsfs.c 2003-07-13 21:44:35.000000000 -0700
-+++ 25/fs/cifs/cifsfs.c 2003-07-19 17:03:50.000000000 -0700
-@@ -230,7 +230,7 @@ cifs_show_options(struct seq_file *s, st
- if (cifs_sb) {
- if (cifs_sb->tcon) {
- seq_printf(s, ",unc=%s", cifs_sb->tcon->treeName);
-- if (cifs_sb->tcon->ses->userName)
-+ if ((cifs_sb->tcon->ses) && (cifs_sb->tcon->ses->userName))
- seq_printf(s, ",username=%s",
- cifs_sb->tcon->ses->userName);
- if(cifs_sb->tcon->ses->domainName)
---- linux-2.6.0-test1/fs/cifs/cifsglob.h 2003-07-10 18:50:31.000000000 -0700
-+++ 25/fs/cifs/cifsglob.h 2003-07-19 17:03:50.000000000 -0700
-@@ -155,7 +155,8 @@ struct cifsSesInfo {
- char *serverOS; /* name of operating system underlying the server */
- char *serverNOS; /* name of network operating system that the server is running */
- char *serverDomain; /* security realm of server */
-- int Suid; /* needed for user level security */
-+ int Suid; /* remote smb uid */
-+ uid_t linux_uid; /* local Linux uid */
- int capabilities;
- char serverName[SERVER_NAME_LEN_WITH_NULL * 2]; /* BB make bigger for tcp names - will ipv6 and sctp addresses fit here?? */
- char userName[MAX_USERNAME_SIZE + 1];
---- linux-2.6.0-test1/fs/cifs/connect.c 2003-07-13 21:44:35.000000000 -0700
-+++ 25/fs/cifs/connect.c 2003-07-19 17:03:50.000000000 -0700
-@@ -405,7 +405,7 @@ parse_mount_options(char *options, const
- return 1; /* needs_arg; */
- }
- if ((temp_len = strnlen(value, 300)) < 300) {
-- vol->UNC = kmalloc(GFP_KERNEL, temp_len);
-+ vol->UNC = kmalloc(temp_len+1,GFP_KERNEL);
- strcpy(vol->UNC,value);
- if (strncmp(vol->UNC, "//", 2) == 0) {
- vol->UNC[0] = '\\';
-@@ -482,7 +482,7 @@ parse_mount_options(char *options, const
- return 1;
- }
- if ((temp_len = strnlen(devname, 300)) < 300) {
-- vol->UNC = kmalloc(GFP_KERNEL, temp_len);
-+ vol->UNC = kmalloc(temp_len+1,GFP_KERNEL);
- strcpy(vol->UNC,devname);
- if (strncmp(vol->UNC, "//", 2) == 0) {
- vol->UNC[0] = '\\';
-@@ -860,7 +860,7 @@ cifs_mount(struct super_block *sb, struc
- FreeXid(xid);
- return -EINVAL;
- }
-- /* BB add support to use the multiuser_mount flag BB */
-+
- existingCifsSes =
- find_tcp_session(sin_server.sin_addr.s_addr,
- volume_info.username, &srvTcp);
-@@ -926,6 +926,7 @@ cifs_mount(struct super_block *sb, struc
- if (volume_info.domainname)
- strncpy(pSesInfo->domainName,
- volume_info.domainname,MAX_USERNAME_SIZE);
-+ pSesInfo->linux_uid = volume_info.linux_uid;
-
- rc = setup_session(xid,pSesInfo, cifs_sb->local_nls);
- if(!rc)
---- linux-2.6.0-test1/fs/cifs/misc.c 2003-07-13 21:44:35.000000000 -0700
-+++ 25/fs/cifs/misc.c 2003-07-19 17:03:50.000000000 -0700
-@@ -190,6 +190,8 @@ header_assemble(struct smb_hdr *buffer,
- {
- int i;
- __u32 tmp;
-+ struct list_head* temp_item;
-+ struct cifsSesInfo * ses;
- char *temp = (char *) buffer;
-
- for (i = 0; i < MAX_CIFS_HDR_SIZE; i++) {
-@@ -225,7 +227,52 @@ header_assemble(struct smb_hdr *buffer,
- if (treeCon->ses->capabilities & CAP_STATUS32) {
- buffer->Flags2 |= SMBFLG2_ERR_STATUS;
- }
-+
- buffer->Uid = treeCon->ses->Suid; /* always in LE format */
-+ if(multiuser_mount != 0) {
-+ /* For the multiuser case, there are few obvious technically */
-+ /* possible mechanisms to match the local linux user (uid) */
-+ /* to a valid remote smb user (smb_uid): */
-+ /* 1) Query Winbind (or other local pam/nss daemon */
-+ /* for userid/password/logon_domain or credential */
-+ /* 2) Query Winbind for uid to sid to username mapping */
-+ /* and see if we have a matching password for existing*/
-+ /* session for that user perhas getting password by */
-+ /* adding a new pam_cifs module that stores passwords */
-+ /* so that the cifs vfs can get at that for all logged*/
-+ /* on users */
-+ /* 3) (Which is the mechanism we have chosen) */
-+ /* Search through sessions to the same server for a */
-+ /* a match on the uid that was passed in on mount */
-+ /* with the current processes uid (or euid?) and use */
-+ /* that smb uid. If no existing smb session for */
-+ /* that uid found, use the default smb session ie */
-+ /* the smb session for the volume mounted which is */
-+ /* the same as would be used if the multiuser mount */
-+ /* flag were disabled. */
-+
-+ /* BB Add support for establishing new tCon and SMB Session */
-+ /* with userid/password pairs found on the smb session */
-+ /* for other target tcp/ip addresses BB */
-+ if(current->uid != treeCon->ses->linux_uid) {
-+ cFYI(1,("Multiuser mode and UID did not match tcon uid "));
-+ read_lock(&GlobalSMBSeslock);
-+ list_for_each(temp_item, &GlobalSMBSessionList) {
-+ ses = list_entry(temp_item, struct cifsSesInfo, cifsSessionList);
-+ if(ses->linux_uid == current->uid) {
-+ if(ses->server == treeCon->ses->server) {
-+ cFYI(1,("found matching uid substitute right smb_uid"));
-+ buffer->Uid = ses->Suid;
-+ break;
-+ } else {
-+ /* BB eventually call setup_session here */
-+ cFYI(1,("local UID found but smb sess with this server does not exist"));
-+ }
-+ }
-+ }
-+ read_unlock(&GlobalSMBSeslock);
-+ }
-+ }
- }
- if (treeCon->Flags & SMB_SHARE_IS_IN_DFS)
- buffer->Flags2 |= SMBFLG2_DFS;
---- linux-2.6.0-test1/fs/cifs/TODO 2003-07-10 18:50:31.000000000 -0700
-+++ 25/fs/cifs/TODO 2003-07-19 17:03:50.000000000 -0700
-@@ -17,9 +17,12 @@ c) multi-user mounts - multiplexed sessi
-
- d) Kerberos/SPNEGO session setup support - (started)
-
--e) NTLMv2 authentication and MD5-HMAC signing SMB PDUs - (mostly implemented)
-- signing necessary for some Windows 2003 servers in domain
-- mode.
-+e) NTLMv2 authentication (mostly implemented)
-+
-+f) MD5-HMAC signing SMB PDUs when SPNEGO style SessionSetup
-+used (Kerberos or NTLMSSP). Signing alreadyimplemented for NTLM
-+ and raw NTLMSSP already. This is important when enabling
-+ extended security and mounting to Windows 2003 Servers
-
- f) Directory entry caching relies on a 1 second timer, rather than
- using FindNotify or equivalent. - (started)
-@@ -43,11 +46,9 @@ extra copy in/out of the socket buffers
-
- m) finish support for IPv6
-
--n) send oplock break response when sent (oplock currently disabled in
--/proc/fs/cifs)
--
--o) reduces the oplock breaks coming from windows). Piggyback identical
--file opens on top of each other by incrementing reference count rather
-+o) Better optimize open (and pathbased setfilesize) to reduce the
-+oplock breaks coming from windows srv. Piggyback identical file
-+opens on top of each other by incrementing reference count rather
- than resending (helps reduce server resource utilization and avoid
- spurious oplock breaks).
-
---- linux-2.6.0-test1/fs/cifs/transport.c 2003-07-13 21:44:35.000000000 -0700
-+++ 25/fs/cifs/transport.c 2003-07-19 17:03:50.000000000 -0700
-@@ -45,6 +45,11 @@ AllocMidQEntry(struct smb_hdr *smb_buffe
- cERROR(1, ("Null session passed in to AllocMidQEntry "));
- return NULL;
- }
-+ if (ses->server == NULL) {
-+ cERROR(1, ("Null TCP session in AllocMidQEntry"));
-+ return NULL;
-+ }
-+
- temp = (struct mid_q_entry *) kmem_cache_alloc(cifs_mid_cachep,
- SLAB_KERNEL);
- if (temp == NULL)
-@@ -65,7 +70,6 @@ AllocMidQEntry(struct smb_hdr *smb_buffe
- /* Should we wake up tcp thread first? BB */
- timeout = wait_event_interruptible_timeout(ses->server->response_q,
- (ses->server->tcpStatus == CifsGood), timeout);
-- cFYI(1,("timeout (after reconnection wait) %d",timeout));
- }
-
- if (ses->server->tcpStatus == CifsGood) {
---- linux-2.6.0-test1/fs/compat_ioctl.c 2003-07-02 14:53:16.000000000 -0700
-+++ 25/fs/compat_ioctl.c 2003-07-19 17:03:50.000000000 -0700
-@@ -52,7 +52,7 @@
- #include <linux/raw.h>
- #include <linux/smb_fs.h>
- #include <linux/blkpg.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/elevator.h>
- #include <linux/rtc.h>
- #include <linux/pci.h>
---- linux-2.6.0-test1/fs/devfs/base.c 2003-07-13 21:44:35.000000000 -0700
-+++ 25/fs/devfs/base.c 2003-07-19 17:03:50.000000000 -0700
-@@ -676,6 +676,7 @@
- #include <linux/smp.h>
- #include <linux/version.h>
- #include <linux/rwsem.h>
-+#include <linux/sched.h>
-
- #include <asm/uaccess.h>
- #include <asm/io.h>
-@@ -1325,8 +1326,20 @@ static void free_dentry (struct devfs_en
-
- static int is_devfsd_or_child (struct fs_info *fs_info)
- {
-- if (current == fs_info->devfsd_task) return (TRUE);
-- if (current->pgrp == fs_info->devfsd_pgrp) return (TRUE);
-+ struct task_struct *p = current;
-+
-+ if (p == fs_info->devfsd_task) return (TRUE);
-+ if (p->pgrp == fs_info->devfsd_pgrp) return (TRUE);
-+ read_lock(&tasklist_lock);
-+ for ( ; p != &init_task; p = p->real_parent)
-+ {
-+ if (p == fs_info->devfsd_task)
-+ {
-+ read_unlock (&tasklist_lock);
-+ return (TRUE);
-+ }
-+ }
-+ read_unlock (&tasklist_lock);
- return (FALSE);
- } /* End Function is_devfsd_or_child */
-
-@@ -1432,12 +1445,6 @@ int devfs_mk_bdev(dev_t dev, umode_t mod
- va_list args;
- int error, n;
-
-- if (!S_ISBLK(mode)) {
-- printk(KERN_WARNING "%s: invalide mode (%u) for %s\n",
-- __FUNCTION__, mode, buf);
-- return -EINVAL;
-- }
--
- va_start(args, fmt);
- n = vsnprintf(buf, 64, fmt, args);
- if (n >= 64 || !buf[0]) {
-@@ -1445,6 +1452,12 @@ int devfs_mk_bdev(dev_t dev, umode_t mod
- __FUNCTION__);
- return -EINVAL;
- }
-+
-+ if (!S_ISBLK(mode)) {
-+ printk(KERN_WARNING "%s: invalide mode (%u) for %s\n",
-+ __FUNCTION__, mode, buf);
-+ return -EINVAL;
-+ }
-
- de = _devfs_prepare_leaf(&dir, buf, mode);
- if (!de) {
-@@ -1478,12 +1491,6 @@ int devfs_mk_cdev(dev_t dev, umode_t mod
- va_list args;
- int error, n;
-
-- if (!S_ISCHR(mode)) {
-- printk(KERN_WARNING "%s: invalide mode (%u) for %s\n",
-- __FUNCTION__, mode, buf);
-- return -EINVAL;
-- }
--
- va_start(args, fmt);
- n = vsnprintf(buf, 64, fmt, args);
- if (n >= 64 || !buf[0]) {
-@@ -1492,6 +1499,12 @@ int devfs_mk_cdev(dev_t dev, umode_t mod
- return -EINVAL;
- }
-
-+ if (!S_ISCHR(mode)) {
-+ printk(KERN_WARNING "%s: invalide mode (%u) for %s\n",
-+ __FUNCTION__, mode, buf);
-+ return -EINVAL;
-+ }
-+
- de = _devfs_prepare_leaf(&dir, buf, mode);
- if (!de) {
- printk(KERN_WARNING "%s: could not prepare leaf for %s\n",
---- linux-2.6.0-test1/fs/exec.c 2003-07-13 21:44:35.000000000 -0700
-+++ 25/fs/exec.c 2003-07-19 17:07:16.000000000 -0700
-@@ -305,10 +305,10 @@ void put_dirty_page(struct task_struct *
- if (!pte_chain)
- goto out_sig;
- spin_lock(&tsk->mm->page_table_lock);
-- pmd = pmd_alloc(tsk->mm, pgd, address);
-+ pmd = pmd_alloc_map(tsk->mm, pgd, address);
- if (!pmd)
- goto out;
-- pte = pte_alloc_map(tsk->mm, pmd, address);
-+ pte = pte_alloc_map(tsk->mm, pgd, &pmd, address);
- if (!pte)
- goto out;
- if (!pte_none(*pte)) {
-@@ -320,6 +320,7 @@ void put_dirty_page(struct task_struct *
- set_pte(pte, pte_mkdirty(pte_mkwrite(mk_pte(page, prot))));
- pte_chain = page_add_rmap(page, pte, pte_chain);
- pte_unmap(pte);
-+ pmd_unmap(pmd);
- tsk->mm->rss++;
- spin_unlock(&tsk->mm->page_table_lock);
-
-@@ -327,6 +328,8 @@ void put_dirty_page(struct task_struct *
- pte_chain_free(pte_chain);
- return;
- out:
-+ if (pmd)
-+ pmd_unmap(pmd);
- spin_unlock(&tsk->mm->page_table_lock);
- out_sig:
- __free_page(page);
---- linux-2.6.0-test1/fs/ext2/inode.c 2003-06-26 22:07:25.000000000 -0700
-+++ 25/fs/ext2/inode.c 2003-07-19 17:06:55.000000000 -0700
-@@ -257,11 +257,12 @@ static int ext2_block_to_path(struct ino
- * or when it reads all @depth-1 indirect blocks successfully and finds
- * the whole chain, all way to the data (returns %NULL, *err == 0).
- */
--static Indirect *ext2_get_branch(struct inode *inode,
-+static Indirect *ext2_get_branch_wq(struct inode *inode,
- int depth,
- int *offsets,
- Indirect chain[4],
-- int *err)
-+ int *err,
-+ wait_queue_t *wait)
- {
- struct super_block *sb = inode->i_sb;
- Indirect *p = chain;
-@@ -273,8 +274,8 @@ static Indirect *ext2_get_branch(struct
- if (!p->key)
- goto no_block;
- while (--depth) {
-- bh = sb_bread(sb, le32_to_cpu(p->key));
-- if (!bh)
-+ bh = sb_bread_wq(sb, le32_to_cpu(p->key), wait);
-+ if (!bh || IS_ERR(bh))
- goto failure;
- read_lock(&EXT2_I(inode)->i_meta_lock);
- if (!verify_chain(chain, p))
-@@ -292,11 +293,21 @@ changed:
- *err = -EAGAIN;
- goto no_block;
- failure:
-- *err = -EIO;
-+ *err = IS_ERR(bh) ? PTR_ERR(bh) : -EIO;
- no_block:
- return p;
- }
-
-+static Indirect *ext2_get_branch(struct inode *inode,
-+ int depth,
-+ int *offsets,
-+ Indirect chain[4],
-+ int *err)
-+{
-+ return ext2_get_branch_wq(inode, depth, offsets, chain,
-+ err, NULL);
-+}
-+
- /**
- * ext2_find_near - find a place for allocation with sufficient locality
- * @inode: owner
-@@ -536,7 +547,8 @@ changed:
- * reachable from inode.
- */
-
--static int ext2_get_block(struct inode *inode, sector_t iblock, struct buffer_head *bh_result, int create)
-+static int ext2_get_block_wq(struct inode *inode, sector_t iblock,
-+ struct buffer_head *bh_result, int create, wait_queue_t *wait)
- {
- int err = -EIO;
- int offsets[4];
-@@ -551,7 +563,8 @@ static int ext2_get_block(struct inode *
- goto out;
-
- reread:
-- partial = ext2_get_branch(inode, depth, offsets, chain, &err);
-+ partial = ext2_get_branch_wq(inode, depth, offsets, chain, &err,
-+ wait);
-
- /* Simplest case - block found, no allocation needed */
- if (!partial) {
-@@ -565,7 +578,7 @@ got_it:
- }
-
- /* Next simple case - plain lookup or failed read of indirect block */
-- if (!create || err == -EIO) {
-+ if (!create || err == -EIO || err == -EIOCBRETRY) {
- cleanup:
- while (partial > chain) {
- brelse(partial->bh);
-@@ -606,6 +619,19 @@ changed:
- goto reread;
- }
-
-+static int ext2_get_block_async(struct inode *inode, sector_t iblock,
-+ struct buffer_head *bh_result, int create)
-+{
-+ return ext2_get_block_wq(inode, iblock, bh_result, create,
-+ current->io_wait);
-+}
-+
-+static int ext2_get_block(struct inode *inode, sector_t iblock,
-+ struct buffer_head *bh_result, int create)
-+{
-+ return ext2_get_block_wq(inode, iblock, bh_result, create, NULL);
-+}
-+
- static int ext2_writepage(struct page *page, struct writeback_control *wbc)
- {
- return block_write_full_page(page, ext2_get_block, wbc);
-@@ -627,7 +653,7 @@ static int
- ext2_prepare_write(struct file *file, struct page *page,
- unsigned from, unsigned to)
- {
-- return block_prepare_write(page,from,to,ext2_get_block);
-+ return block_prepare_write(page,from,to,ext2_get_block_async);
- }
-
- static int
-@@ -1125,9 +1151,16 @@ void ext2_read_inode (struct inode * ino
- inode->i_mapping->a_ops = &ext2_aops;
- }
- } else {
-+ dev_t devno = le32_to_cpu(raw_inode->i_block[0]);
-+
-+ if (devno == 0) {
-+ unsigned int lo = le32_to_cpu(raw_inode->i_block[1]);
-+ unsigned int hi = le32_to_cpu(raw_inode->i_block[2]);
-+
-+ devno = ((unsigned long long) hi << 32) | lo;
-+ }
- inode->i_op = &ext2_special_inode_operations;
-- init_special_inode(inode, inode->i_mode,
-- le32_to_cpu(raw_inode->i_block[0]));
-+ init_special_inode(inode, inode->i_mode, devno);
- }
- brelse (bh);
- ext2_set_inode_flags(inode);
-@@ -1215,10 +1248,22 @@ static int ext2_update_inode(struct inod
- }
-
- raw_inode->i_generation = cpu_to_le32(inode->i_generation);
-- if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode))
-- raw_inode->i_block[0] = cpu_to_le32(kdev_t_to_nr(inode->i_rdev));
-- else for (n = 0; n < EXT2_N_BLOCKS; n++)
-- raw_inode->i_block[n] = ei->i_data[n];
-+ if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode)) {
-+ dev_t devno = kdev_t_to_nr(inode->i_rdev);
-+ unsigned int hi = (sizeof(dev_t) > 4) ? (devno >> 32) : 0;
-+ unsigned int lo = (devno & 0xffffffff);
-+
-+ if (hi == 0 && lo != 0) {
-+ raw_inode->i_block[0] = cpu_to_le32(lo);
-+ } else {
-+ raw_inode->i_block[0] = 0;
-+ raw_inode->i_block[1] = cpu_to_le32(lo);
-+ raw_inode->i_block[2] = cpu_to_le32(hi);
-+ }
-+ } else {
-+ for (n = 0; n < EXT2_N_BLOCKS; n++)
-+ raw_inode->i_block[n] = ei->i_data[n];
-+ }
- mark_buffer_dirty(bh);
- if (do_sync) {
- sync_dirty_buffer(bh);
---- linux-2.6.0-test1/fs/ext3/acl.c 2003-07-10 18:50:31.000000000 -0700
-+++ 25/fs/ext3/acl.c 2003-07-19 17:03:50.000000000 -0700
-@@ -425,7 +425,7 @@ ext3_acl_chmod(struct inode *inode)
- if (!error) {
- handle_t *handle;
-
-- handle = ext3_journal_start(inode, EXT3_XATTR_TRANS_BLOCKS);
-+ handle = ext3_journal_start(inode, EXT3_DATA_TRANS_BLOCKS);
- if (IS_ERR(handle)) {
- error = PTR_ERR(handle);
- ext3_std_error(inode->i_sb, error);
-@@ -531,7 +531,7 @@ ext3_xattr_set_acl(struct inode *inode,
- } else
- acl = NULL;
-
-- handle = ext3_journal_start(inode, EXT3_XATTR_TRANS_BLOCKS);
-+ handle = ext3_journal_start(inode, EXT3_DATA_TRANS_BLOCKS);
- if (IS_ERR(handle))
- return PTR_ERR(handle);
- error = ext3_set_acl(handle, inode, type, acl);
---- linux-2.6.0-test1/fs/ext3/balloc.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/fs/ext3/balloc.c 2003-07-19 17:07:17.000000000 -0700
-@@ -279,7 +279,8 @@ error_return:
- return;
- }
-
--/* For ext3 allocations, we must not reuse any blocks which are
-+/*
-+ * For ext3 allocations, we must not reuse any blocks which are
- * allocated in the bitmap buffer's "last committed data" copy. This
- * prevents deletes from freeing up the page for reuse until we have
- * committed the delete transaction.
-@@ -294,14 +295,21 @@ error_return:
- * data-writes at some point, and disable it for metadata allocations or
- * sync-data inodes.
- */
--static inline int ext3_test_allocatable(int nr, struct buffer_head *bh,
-- int have_access)
-+static inline int ext3_test_allocatable(int nr, struct buffer_head *bh)
- {
-+ int ret;
-+ struct journal_head *jh = bh2jh(bh);
-+
- if (ext3_test_bit(nr, bh->b_data))
- return 0;
-- if (!have_access || !buffer_jbd(bh) || !bh2jh(bh)->b_committed_data)
-- return 1;
-- return !ext3_test_bit(nr, bh2jh(bh)->b_committed_data);
-+
-+ jbd_lock_bh_state(bh);
-+ if (!jh->b_committed_data)
-+ ret = 1;
-+ else
-+ ret = !ext3_test_bit(nr, jh->b_committed_data);
-+ jbd_unlock_bh_state(bh);
-+ return ret;
- }
-
- /*
-@@ -311,11 +319,12 @@ static inline int ext3_test_allocatable(
- * the initial goal; then for a free byte somewhere in the bitmap; then
- * for any free bit in the bitmap.
- */
--static int find_next_usable_block(int start, struct buffer_head *bh,
-- int maxblocks, int have_access)
-+static int
-+find_next_usable_block(int start, struct buffer_head *bh, int maxblocks)
- {
- int here, next;
- char *p, *r;
-+ struct journal_head *jh = bh2jh(bh);
-
- if (start > 0) {
- /*
-@@ -328,48 +337,38 @@ static int find_next_usable_block(int st
- */
- int end_goal = (start + 63) & ~63;
- here = ext3_find_next_zero_bit(bh->b_data, end_goal, start);
-- if (here < end_goal &&
-- ext3_test_allocatable(here, bh, have_access))
-+ if (here < end_goal && ext3_test_allocatable(here, bh))
- return here;
--
-- ext3_debug ("Bit not found near goal\n");
-+ ext3_debug("Bit not found near goal\n");
- }
-
- here = start;
- if (here < 0)
- here = 0;
-
-- /*
-- * There has been no free block found in the near vicinity of
-- * the goal: do a search forward through the block groups,
-- * searching in each group first for an entire free byte in the
-- * bitmap and then for any free bit.
-- *
-- * Search first in the remainder of the current group
-- */
-- p = ((char *) bh->b_data) + (here >> 3);
-+ p = ((char *)bh->b_data) + (here >> 3);
- r = memscan(p, 0, (maxblocks - here + 7) >> 3);
-- next = (r - ((char *) bh->b_data)) << 3;
-+ next = (r - ((char *)bh->b_data)) << 3;
-
-- if (next < maxblocks && ext3_test_allocatable(next, bh, have_access))
-+ if (next < maxblocks && ext3_test_allocatable(next, bh))
- return next;
-
-- /* The bitmap search --- search forward alternately
-- * through the actual bitmap and the last-committed copy
-- * until we find a bit free in both. */
--
-+ /*
-+ * The bitmap search --- search forward alternately through the actual
-+ * bitmap and the last-committed copy until we find a bit free in
-+ * both
-+ */
- while (here < maxblocks) {
-- next = ext3_find_next_zero_bit ((unsigned long *) bh->b_data,
-- maxblocks, here);
-+ next = ext3_find_next_zero_bit(bh->b_data, maxblocks, here);
- if (next >= maxblocks)
- return -1;
-- if (ext3_test_allocatable(next, bh, have_access))
-+ if (ext3_test_allocatable(next, bh))
- return next;
--
-- if (have_access)
-- here = ext3_find_next_zero_bit
-- ((unsigned long *) bh2jh(bh)->b_committed_data,
-- maxblocks, next);
-+ jbd_lock_bh_state(bh);
-+ if (jh->b_committed_data)
-+ here = ext3_find_next_zero_bit(jh->b_committed_data,
-+ maxblocks, next);
-+ jbd_unlock_bh_state(bh);
- }
- return -1;
- }
-@@ -384,14 +383,20 @@ static int find_next_usable_block(int st
- static inline int
- claim_block(spinlock_t *lock, int block, struct buffer_head *bh)
- {
-+ struct journal_head *jh = bh2jh(bh);
-+ int ret;
-+
- if (ext3_set_bit_atomic(lock, block, bh->b_data))
- return 0;
-- if (buffer_jbd(bh) && bh2jh(bh)->b_committed_data &&
-- ext3_test_bit(block, bh2jh(bh)->b_committed_data)) {
-+ jbd_lock_bh_state(bh);
-+ if (jh->b_committed_data && ext3_test_bit(block,jh->b_committed_data)) {
- ext3_clear_bit_atomic(lock, block, bh->b_data);
-- return 0;
-+ ret = 0;
-+ } else {
-+ ret = 1;
- }
-- return 1;
-+ jbd_unlock_bh_state(bh);
-+ return ret;
- }
-
- /*
-@@ -403,43 +408,34 @@ static int
- ext3_try_to_allocate(struct super_block *sb, handle_t *handle, int group,
- struct buffer_head *bitmap_bh, int goal, int *errp)
- {
-- int i, fatal = 0;
-- int have_access = 0;
-+ int i;
-+ int fatal;
- int credits = 0;
-
- *errp = 0;
-
-- if (goal >= 0 && ext3_test_allocatable(goal, bitmap_bh, 0))
-- goto got;
--
--repeat:
-- goal = find_next_usable_block(goal, bitmap_bh,
-- EXT3_BLOCKS_PER_GROUP(sb), have_access);
-- if (goal < 0)
-+ /*
-+ * Make sure we use undo access for the bitmap, because it is critical
-+ * that we do the frozen_data COW on bitmap buffers in all cases even
-+ * if the buffer is in BJ_Forget state in the committing transaction.
-+ */
-+ BUFFER_TRACE(bitmap_bh, "get undo access for new block");
-+ fatal = ext3_journal_get_undo_access(handle, bitmap_bh, &credits);
-+ if (fatal) {
-+ *errp = fatal;
- goto fail;
-+ }
-
-- for (i = 0;
-- i < 7 && goal > 0 &&
-- ext3_test_allocatable(goal - 1, bitmap_bh, have_access);
-- i++, goal--);
--
--got:
-- if (!have_access) {
-- /*
-- * Make sure we use undo access for the bitmap, because it is
-- * critical that we do the frozen_data COW on bitmap buffers in
-- * all cases even if the buffer is in BJ_Forget state in the
-- * committing transaction.
-- */
-- BUFFER_TRACE(bitmap_bh, "get undo access for new block");
-- fatal = ext3_journal_get_undo_access(handle, bitmap_bh,
-- &credits);
-- if (fatal) {
-- *errp = fatal;
-- goto fail;
-- }
-- jbd_lock_bh_state(bitmap_bh);
-- have_access = 1;
-+repeat:
-+ if (goal < 0 || !ext3_test_allocatable(goal, bitmap_bh)) {
-+ goal = find_next_usable_block(goal, bitmap_bh,
-+ EXT3_BLOCKS_PER_GROUP(sb));
-+ if (goal < 0)
-+ goto fail_access;
-+
-+ for (i = 0; i < 7 && goal > 0 &&
-+ ext3_test_allocatable(goal - 1, bitmap_bh);
-+ i++, goal--);
- }
-
- if (!claim_block(sb_bgl_lock(EXT3_SB(sb), group), goal, bitmap_bh)) {
-@@ -449,29 +445,25 @@ got:
- */
- goal++;
- if (goal >= EXT3_BLOCKS_PER_GROUP(sb))
-- goto fail;
-+ goto fail_access;
- goto repeat;
- }
-
- BUFFER_TRACE(bitmap_bh, "journal_dirty_metadata for bitmap block");
-- jbd_unlock_bh_state(bitmap_bh);
- fatal = ext3_journal_dirty_metadata(handle, bitmap_bh);
- if (fatal) {
- *errp = fatal;
- goto fail;
- }
--
- return goal;
-+
-+fail_access:
-+ BUFFER_TRACE(bitmap_bh, "journal_release_buffer");
-+ ext3_journal_release_buffer(handle, bitmap_bh, credits);
- fail:
-- if (have_access) {
-- BUFFER_TRACE(bitmap_bh, "journal_release_buffer");
-- jbd_unlock_bh_state(bitmap_bh);
-- ext3_journal_release_buffer(handle, bitmap_bh, credits);
-- }
- return -1;
- }
-
--
- /*
- * ext3_new_block uses a goal block to assist allocation. If the goal is
- * free, or there is a free block within 32 blocks of the goal, that block
---- linux-2.6.0-test1/fs/ext3/inode.c 2003-07-13 21:44:35.000000000 -0700
-+++ 25/fs/ext3/inode.c 2003-07-19 17:07:19.000000000 -0700
-@@ -936,12 +936,14 @@ struct buffer_head *ext3_getblk(handle_t
- ext3_get_block instead, so it's not a
- problem. */
- lock_buffer(bh);
-- BUFFER_TRACE(bh, "call get_create_access");
-- fatal = ext3_journal_get_create_access(handle, bh);
-- if (!fatal) {
-- memset(bh->b_data, 0,
-- inode->i_sb->s_blocksize);
-- set_buffer_uptodate(bh);
-+ if (!buffer_uptodate(bh)) {
-+ BUFFER_TRACE(bh, "call get_create_access");
-+ fatal = ext3_journal_get_create_access(handle, bh);
-+ if (!fatal) {
-+ memset(bh->b_data, 0,
-+ inode->i_sb->s_blocksize);
-+ set_buffer_uptodate(bh);
-+ }
- }
- unlock_buffer(bh);
- BUFFER_TRACE(bh, "call ext3_journal_dirty_metadata");
-@@ -2337,26 +2339,114 @@ static unsigned long ext3_get_inode_bloc
- }
-
- /*
-- * ext3_get_inode_loc returns with an extra refcount against the
-- * inode's underlying buffer_head on success.
-+ * ext3_get_inode_loc returns with an extra refcount against the inode's
-+ * underlying buffer_head on success. If `in_mem' is false then we're purely
-+ * trying to determine the inode's location on-disk and no read need be
-+ * performed.
- */
--
--int ext3_get_inode_loc (struct inode *inode, struct ext3_iloc *iloc)
-+static int ext3_get_inode_loc(struct inode *inode,
-+ struct ext3_iloc *iloc, int in_mem)
- {
- unsigned long block;
-+ struct buffer_head *bh;
-
- block = ext3_get_inode_block(inode->i_sb, inode->i_ino, iloc);
-- if (block) {
-- struct buffer_head *bh = sb_bread(inode->i_sb, block);
-- if (bh) {
-- iloc->bh = bh;
-- return 0;
-- }
-+ if (!block)
-+ return -EIO;
-+
-+ bh = sb_getblk(inode->i_sb, block);
-+ if (!bh) {
- ext3_error (inode->i_sb, "ext3_get_inode_loc",
-- "unable to read inode block - "
-- "inode=%lu, block=%lu", inode->i_ino, block);
-+ "unable to read inode block - "
-+ "inode=%lu, block=%lu", inode->i_ino, block);
-+ return -EIO;
- }
-- return -EIO;
-+ if (!buffer_uptodate(bh)) {
-+ lock_buffer(bh);
-+ if (buffer_uptodate(bh)) {
-+ /* someone brought it uptodate while we waited */
-+ unlock_buffer(bh);
-+ goto has_buffer;
-+ }
-+
-+ /* we can't skip I/O if inode is on a disk only */
-+ if (in_mem) {
-+ struct buffer_head *bitmap_bh;
-+ struct ext3_group_desc *desc;
-+ int inodes_per_buffer;
-+ int inode_offset, i;
-+ int block_group;
-+ int start;
-+
-+ /*
-+ * If this is the only valid inode in the block we
-+ * need not read the block.
-+ */
-+ block_group = (inode->i_ino - 1) /
-+ EXT3_INODES_PER_GROUP(inode->i_sb);
-+ inodes_per_buffer = bh->b_size /
-+ EXT3_INODE_SIZE(inode->i_sb);
-+ inode_offset = ((inode->i_ino - 1) %
-+ EXT3_INODES_PER_GROUP(inode->i_sb));
-+ start = inode_offset & ~(inodes_per_buffer - 1);
-+
-+ /* Is the inode bitmap in cache? */
-+ desc = ext3_get_group_desc(inode->i_sb,
-+ block_group, NULL);
-+ if (!desc)
-+ goto make_io;
-+
-+ bitmap_bh = sb_getblk(inode->i_sb,
-+ le32_to_cpu(desc->bg_inode_bitmap));
-+ if (!bitmap_bh)
-+ goto make_io;
-+
-+ /*
-+ * If the inode bitmap isn't in cache then the
-+ * optimisation may end up performing two reads instead
-+ * of one, so skip it.
-+ */
-+ if (!buffer_uptodate(bitmap_bh)) {
-+ brelse(bitmap_bh);
-+ goto make_io;
-+ }
-+ for (i = start; i < start + inodes_per_buffer; i++) {
-+ if (i == inode_offset)
-+ continue;
-+ if (ext3_test_bit(i, bitmap_bh->b_data))
-+ break;
-+ }
-+ brelse(bitmap_bh);
-+ if (i == start + inodes_per_buffer) {
-+ /* all other inodes are free, so skip I/O */
-+ memset(bh->b_data, 0, bh->b_size);
-+ set_buffer_uptodate(bh);
-+ unlock_buffer(bh);
-+ goto has_buffer;
-+ }
-+ }
-+
-+make_io:
-+ /*
-+ * There are another valid inodes in the buffer so we must
-+ * read the block from disk
-+ */
-+ get_bh(bh);
-+ bh->b_end_io = end_buffer_io_sync;
-+ submit_bh(READ, bh);
-+ wait_on_buffer(bh);
-+ if (!buffer_uptodate(bh)) {
-+ ext3_error(inode->i_sb, "ext3_get_inode_loc",
-+ "unable to read inode block - "
-+ "inode=%lu, block=%lu",
-+ inode->i_ino, block);
-+ brelse(bh);
-+ return -EIO;
-+ }
-+ }
-+has_buffer:
-+ iloc->bh = bh;
-+ return 0;
- }
-
- void ext3_set_inode_flags(struct inode *inode)
-@@ -2376,7 +2466,6 @@ void ext3_set_inode_flags(struct inode *
- inode->i_flags |= S_DIRSYNC;
- }
-
--
- void ext3_read_inode(struct inode * inode)
- {
- struct ext3_iloc iloc;
-@@ -2389,7 +2478,7 @@ void ext3_read_inode(struct inode * inod
- ei->i_acl = EXT3_ACL_NOT_CACHED;
- ei->i_default_acl = EXT3_ACL_NOT_CACHED;
- #endif
-- if (ext3_get_inode_loc(inode, &iloc))
-+ if (ext3_get_inode_loc(inode, &iloc, 0))
- goto bad_inode;
- bh = iloc.bh;
- raw_inode = ext3_raw_inode(&iloc);
-@@ -2476,9 +2565,15 @@ void ext3_read_inode(struct inode * inod
- ext3_set_aops(inode);
- }
- } else {
-+ dev_t devno = le32_to_cpu(raw_inode->i_block[0]);
-+ if (devno == 0) {
-+ unsigned int lo = le32_to_cpu(raw_inode->i_block[1]);
-+ unsigned int hi = le32_to_cpu(raw_inode->i_block[2]);
-+ devno = ((unsigned long long) hi << 32) | lo;
-+ }
-+
- inode->i_op = &ext3_special_inode_operations;
-- init_special_inode(inode, inode->i_mode,
-- le32_to_cpu(raw_inode->i_block[0]));
-+ init_special_inode(inode, inode->i_mode, devno);
- }
- brelse (iloc.bh);
- ext3_set_inode_flags(inode);
-@@ -2578,12 +2673,22 @@ static int ext3_do_update_inode(handle_t
- }
- }
- raw_inode->i_generation = cpu_to_le32(inode->i_generation);
-- if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode))
-- raw_inode->i_block[0] =
-- cpu_to_le32(kdev_t_to_nr(inode->i_rdev));
-- else for (block = 0; block < EXT3_N_BLOCKS; block++)
-- raw_inode->i_block[block] = ei->i_data[block];
-+ if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode)) {
-+ dev_t devno = kdev_t_to_nr(inode->i_rdev);
-+ unsigned int hi = (sizeof(dev_t) > 4) ? (devno >> 32) : 0;
-+ unsigned int lo = (devno & 0xffffffff);
-
-+ if (hi == 0 && lo != 0) {
-+ raw_inode->i_block[0] = cpu_to_le32(lo);
-+ } else {
-+ raw_inode->i_block[0] = 0;
-+ raw_inode->i_block[1] = cpu_to_le32(lo);
-+ raw_inode->i_block[2] = cpu_to_le32(hi);
-+ }
-+ } else {
-+ for (block = 0; block < EXT3_N_BLOCKS; block++)
-+ raw_inode->i_block[block] = ei->i_data[block];
-+ }
- BUFFER_TRACE(bh, "call ext3_journal_dirty_metadata");
- rc = ext3_journal_dirty_metadata(handle, bh);
- if (!err)
-@@ -2793,7 +2898,7 @@ ext3_reserve_inode_write(handle_t *handl
- {
- int err = 0;
- if (handle) {
-- err = ext3_get_inode_loc(inode, iloc);
-+ err = ext3_get_inode_loc(inode, iloc, 1);
- if (!err) {
- BUFFER_TRACE(iloc->bh, "get_write_access");
- err = ext3_journal_get_write_access(handle, iloc->bh);
-@@ -2891,7 +2996,7 @@ ext3_pin_inode(handle_t *handle, struct
-
- int err = 0;
- if (handle) {
-- err = ext3_get_inode_loc(inode, &iloc);
-+ err = ext3_get_inode_loc(inode, &iloc, 1);
- if (!err) {
- BUFFER_TRACE(iloc.bh, "get_write_access");
- err = journal_get_write_access(handle, iloc.bh);
---- linux-2.6.0-test1/fs/ext3/super.c 2003-07-10 18:50:31.000000000 -0700
-+++ 25/fs/ext3/super.c 2003-07-19 17:07:20.000000000 -0700
-@@ -1811,7 +1811,10 @@ void ext3_write_super (struct super_bloc
- if (down_trylock(&sb->s_lock) == 0)
- BUG();
- sb->s_dirt = 0;
-+#if 0
-+ /* we really don't need this because of log's nature -bzzz */
- journal_start_commit(EXT3_SB(sb)->s_journal, NULL);
-+#endif
- }
-
- static int ext3_sync_fs(struct super_block *sb, int wait)
---- linux-2.6.0-test1/fs/ext3/xattr.c 2003-07-10 18:50:31.000000000 -0700
-+++ 25/fs/ext3/xattr.c 2003-07-19 17:03:50.000000000 -0700
-@@ -875,7 +875,7 @@ ext3_xattr_set(struct inode *inode, int
- handle_t *handle;
- int error, error2;
-
-- handle = ext3_journal_start(inode, EXT3_XATTR_TRANS_BLOCKS);
-+ handle = ext3_journal_start(inode, EXT3_DATA_TRANS_BLOCKS);
- if (IS_ERR(handle))
- error = PTR_ERR(handle);
- else
-@@ -1050,12 +1050,10 @@ ext3_xattr_cache_find(handle_t *handle,
- ext3_error(inode->i_sb, "ext3_xattr_cache_find",
- "inode %ld: block %ld read error",
- inode->i_ino, (unsigned long) ce->e_block);
-- } else {
-+ } else if (ext3_journal_get_write_access_credits(
-+ handle, bh, credits) == 0) {
- /* ext3_journal_get_write_access() requires an unlocked
- * bh, which complicates things here. */
-- if (ext3_journal_get_write_access_credits(handle, bh,
-- credits) != 0)
-- return NULL;
- lock_buffer(bh);
- if (le32_to_cpu(HDR(bh)->h_refcount) >
- EXT3_XATTR_REFCOUNT_MAX) {
-@@ -1070,6 +1068,7 @@ ext3_xattr_cache_find(handle_t *handle,
- }
- unlock_buffer(bh);
- journal_release_buffer(handle, bh, *credits);
-+ *credits = 0;
- brelse(bh);
- }
- ce = mb_cache_entry_find_next(ce, 0, inode->i_sb->s_bdev, hash);
---- linux-2.6.0-test1/fs/inode.c 2003-07-13 21:44:35.000000000 -0700
-+++ 25/fs/inode.c 2003-07-19 17:07:03.000000000 -0700
-@@ -184,6 +184,7 @@ void inode_init_once(struct inode *inode
- INIT_RADIX_TREE(&inode->i_data.page_tree, GFP_ATOMIC);
- spin_lock_init(&inode->i_data.page_lock);
- init_MUTEX(&inode->i_data.i_shared_sem);
-+ atomic_set(&inode->i_data.truncate_count, 0);
- INIT_LIST_HEAD(&inode->i_data.private_list);
- spin_lock_init(&inode->i_data.private_lock);
- INIT_LIST_HEAD(&inode->i_data.i_mmap);
---- linux-2.6.0-test1/fs/intermezzo/sysctl.c 2003-06-14 12:17:59.000000000 -0700
-+++ 25/fs/intermezzo/sysctl.c 2003-07-19 17:03:50.000000000 -0700
-@@ -36,7 +36,6 @@
- #include <asm/segment.h>
- #include <asm/uaccess.h>
- #include <linux/utsname.h>
--#include <linux/blk.h>
-
- #include "intermezzo_fs.h"
- #include "intermezzo_psdev.h"
---- linux-2.6.0-test1/fs/intermezzo/vfs.c 2003-07-10 18:50:31.000000000 -0700
-+++ 25/fs/intermezzo/vfs.c 2003-07-19 17:03:50.000000000 -0700
-@@ -66,7 +66,7 @@
- #include <linux/file.h>
- #include <linux/fs.h>
- #include <linux/namei.h>
--#include <linux/blk.h>
-+#include <linux/genhd.h>
-
- #include "intermezzo_fs.h"
- #include "intermezzo_psdev.h"
---- linux-2.6.0-test1/fs/jbd/journal.c 2003-07-13 21:44:35.000000000 -0700
-+++ 25/fs/jbd/journal.c 2003-07-19 17:07:09.000000000 -0700
-@@ -119,19 +119,16 @@ void __journal_internal_check(void)
- * the disk. Flushing these old buffers to reclaim space in the log is
- * known as checkpointing, and this thread is responsible for that job.
- */
--
--journal_t *current_journal; // AKPM: debug
--
- int kjournald(void *arg)
- {
- journal_t *journal = (journal_t *) arg;
- transaction_t *transaction;
- struct timer_list timer;
-
-- current_journal = journal;
--
- daemonize("kjournald");
-
-+ current->flags |= PF_SYNCWRITE; /* Anticipatory scheduler hint */
-+
- /* Set up an interval timer which can be used to trigger a
- commit wakeup after the commit interval expires */
- init_timer(&timer);
---- linux-2.6.0-test1/fs/jbd/transaction.c 2003-07-13 21:44:35.000000000 -0700
-+++ 25/fs/jbd/transaction.c 2003-07-19 17:04:15.000000000 -0700
-@@ -742,7 +742,7 @@ int journal_get_write_access(handle_t *h
- /* We do not want to get caught playing with fields which the
- * log thread also manipulates. Make sure that the buffer
- * completes any outstanding IO before proceeding. */
-- rc = do_get_write_access(handle, jh, 0, NULL);
-+ rc = do_get_write_access(handle, jh, 0, credits);
- journal_put_journal_head(jh);
- return rc;
- }
-@@ -1106,16 +1106,6 @@ int journal_dirty_metadata(handle_t *han
- if (jh->b_transaction == handle->h_transaction &&
- jh->b_jlist == BJ_Metadata) {
- JBUFFER_TRACE(jh, "fastpath");
-- console_verbose();
-- if (jh->b_transaction != journal->j_running_transaction) {
-- printk("jh->b_transaction=%p\n", jh->b_transaction);
-- printk("journal->j_running_transaction=%p\n",
-- journal->j_running_transaction);
-- printk("handle->h_transaction=%p\n",
-- handle->h_transaction);
-- printk("journal->j_committing_transaction=%p\n",
-- journal->j_committing_transaction);
-- }
- J_ASSERT_JH(jh, jh->b_transaction ==
- journal->j_running_transaction);
- goto out_unlock_bh;
-@@ -1328,9 +1318,6 @@ int journal_stop(handle_t *handle)
- journal_t *journal = transaction->t_journal;
- int old_handle_count, err;
-
-- if (!handle)
-- return 0;
--
- J_ASSERT(transaction->t_updates > 0);
- J_ASSERT(journal_current_handle() == handle);
-
---- linux-2.6.0-test1/fs/jffs2/Makefile 2003-06-14 12:18:03.000000000 -0700
-+++ 25/fs/jffs2/Makefile 2003-07-19 17:03:50.000000000 -0700
-@@ -13,6 +13,7 @@ JFFS2_OBJS := dir.o file.o ioctl.o nodel
-
- LINUX_OBJS-24 := super-v24.o crc32.o
- LINUX_OBJS-25 := super.o
-+LINUX_OBJS-26 := super.o
-
- NAND_OBJS-$(CONFIG_JFFS2_FS_NAND) := wbuf.o
-
---- linux-2.6.0-test1/fs/Kconfig 2003-06-26 22:07:25.000000000 -0700
-+++ 25/fs/Kconfig 2003-07-19 17:07:09.000000000 -0700
-@@ -1323,6 +1323,31 @@ config NFS_V4
-
- If unsure, say N.
-
-+config NFS_DIRECTIO
-+ bool
-+ depends on NFS_FS
-+ default y
-+ help
-+ This option enables applications to perform uncached I/O on files
-+ in NFS file systems using the O_DIRECT open() flag. When O_DIRECT
-+ is set for a file, its data is not cached in the system's page
-+ cache. Data is moved to and from user-level application buffers
-+ directly. Unlike local disk-based file systems, NFS O_DIRECT has
-+ no alignment restrictions.
-+
-+ Unless your program is designed to use O_DIRECT properly, you are
-+ much better off allowing the NFS client to manage data caching for
-+ you. Misusing O_DIRECT can cause poor server performance or network
-+ storms. This kernel build option defaults OFF to avoid exposing
-+ system administrators unwittingly to a potentially hazardous
-+ feature.
-+
-+ For more details on NFS O_DIRECT, see fs/nfs/direct.c.
-+
-+ If unsure, say N. This reduces the size of the NFS client, and
-+ causes open() to return EINVAL if a file residing in NFS is
-+ opened with the O_DIRECT flag.
-+
- config NFSD
- tristate "NFS server support"
- depends on INET
---- linux-2.6.0-test1/fs/lockd/clntlock.c 2003-06-14 12:18:34.000000000 -0700
-+++ 25/fs/lockd/clntlock.c 2003-07-19 17:03:50.000000000 -0700
-@@ -187,8 +187,9 @@ nlmclnt_recovery(struct nlm_host *host,
- } else {
- nlmclnt_prepare_reclaim(host, newstate);
- nlm_get_host(host);
-- MOD_INC_USE_COUNT;
-- kernel_thread(reclaimer, host, CLONE_KERNEL);
-+ __module_get(THIS_MODULE);
-+ if (kernel_thread(reclaimer, host, CLONE_KERNEL))
-+ module_put(THIS_MODULE);
- }
- }
-
-@@ -244,7 +245,5 @@ restart:
- nlm_release_host(host);
- lockd_down();
- unlock_kernel();
-- MOD_DEC_USE_COUNT;
--
-- return 0;
-+ module_put_and_exit(0);
- }
---- linux-2.6.0-test1/fs/lockd/svc.c 2003-07-02 14:53:16.000000000 -0700
-+++ 25/fs/lockd/svc.c 2003-07-19 17:03:50.000000000 -0700
-@@ -88,7 +88,11 @@ lockd(struct svc_rqst *rqstp)
- unsigned long grace_period_expire;
-
- /* Lock module and set up kernel thread */
-- MOD_INC_USE_COUNT;
-+ /* lockd_up is waiting for us to startup, so will
-+ * be holding a reference to this module, so it
-+ * is safe to just claim another reference
-+ */
-+ __module_get(THIS_MODULE);
- lock_kernel();
-
- /*
-@@ -183,7 +187,7 @@ lockd(struct svc_rqst *rqstp)
-
- /* Release module */
- unlock_kernel();
-- MOD_DEC_USE_COUNT;
-+ module_put_and_exit(0);
- }
-
- /*
---- linux-2.6.0-test1/fs/namei.c 2003-07-13 21:44:35.000000000 -0700
-+++ 25/fs/namei.c 2003-07-19 17:06:37.000000000 -0700
-@@ -1424,11 +1424,12 @@ int vfs_mknod(struct inode *dir, struct
- return error;
- }
-
--asmlinkage long sys_mknod(const char __user * filename, int mode, dev_t dev)
-+static long
-+do_mknod(const char __user *filename, int mode, dev_t dev)
- {
- int error = 0;
-- char * tmp;
-- struct dentry * dentry;
-+ char *tmp;
-+ struct dentry *dentry;
- struct nameidata nd;
-
- if (S_ISDIR(mode))
-@@ -1469,6 +1470,27 @@ out:
- return error;
- }
-
-+asmlinkage long
-+sys_mknod(const char __user *filename, int mode, unsigned int devnr)
-+{
-+ dev_t dev = devnr;
-+
-+ if (dev != devnr)
-+ return -EOVERFLOW;
-+ return do_mknod(filename, mode, dev);
-+}
-+
-+asmlinkage long
-+sys_mknod64(const char __user *filename, int mode,
-+ unsigned int major, unsigned int minor)
-+{
-+ dev_t dev = MKDEV(major, minor);
-+
-+ if (MAJOR(dev) != major || MINOR(dev) != minor)
-+ return -EOVERFLOW;
-+ return do_mknod(filename, mode, dev);
-+}
-+
- int vfs_mkdir(struct inode *dir, struct dentry *dentry, int mode)
- {
- int error = may_create(dir, dentry, NULL);
---- linux-2.6.0-test1/fs/namespace.c 2003-07-13 21:44:35.000000000 -0700
-+++ 25/fs/namespace.c 2003-07-19 17:03:50.000000000 -0700
-@@ -1158,3 +1158,13 @@ void __init mnt_init(unsigned long mempa
- init_rootfs();
- init_mount_tree();
- }
-+
-+void __put_namespace(struct namespace *namespace)
-+{
-+ down_write(&namespace->sem);
-+ spin_lock(&vfsmount_lock);
-+ umount_tree(namespace->root);
-+ spin_unlock(&vfsmount_lock);
-+ up_write(&namespace->sem);
-+ kfree(namespace);
-+}
---- linux-2.6.0-test1/fs/nfs/direct.c 2003-06-26 22:07:25.000000000 -0700
-+++ 25/fs/nfs/direct.c 2003-07-19 17:07:08.000000000 -0700
-@@ -1,7 +1,7 @@
- /*
- * linux/fs/nfs/direct.c
- *
-- * Copyright (C) 2001 by Chuck Lever <cel@netapp.com>
-+ * Copyright (C) 2003 by Chuck Lever <cel@netapp.com>
- *
- * High-performance uncached I/O for the Linux NFS client
- *
-@@ -26,19 +26,23 @@
- * also supports uncaching whole NFS partitions with "-o forcedirectio,"
- * an undocumented mount option.
- *
-- * Designed by Jeff Kimmel, Chuck Lever, and Trond Myklebust.
-+ * Designed by Jeff Kimmel, Chuck Lever, and Trond Myklebust, with
-+ * help from Andrew Morton.
- *
- * 18 Dec 2001 Initial implementation for 2.4 --cel
- * 08 Jul 2002 Version for 2.4.19, with bug fixes --trondmy
-- * 24 Sep 2002 Rewrite to use asynchronous RPCs, port to 2.5 --cel
-+ * 08 Jun 2003 Port to 2.5 APIs --cel
- *
- */
-
- #include <linux/config.h>
-+#include <linux/errno.h>
- #include <linux/sched.h>
- #include <linux/kernel.h>
-+#include <linux/smp_lock.h>
- #include <linux/file.h>
--#include <linux/errno.h>
-+#include <linux/pagemap.h>
-+
- #include <linux/nfs_fs.h>
- #include <linux/nfs_page.h>
- #include <linux/sunrpc/clnt.h>
-@@ -46,35 +50,41 @@
- #include <asm/system.h>
- #include <asm/uaccess.h>
-
--#define NFSDBG_FACILITY (NFSDBG_PAGECACHE | NFSDBG_VFS)
-+#define NFSDBG_FACILITY NFSDBG_VFS
- #define VERF_SIZE (2 * sizeof(__u32))
-+#define MAX_DIRECTIO_SIZE (4096UL << PAGE_SHIFT)
-
-
- /**
-- * nfs_get_user_pages - find and set up page representing user buffer
-- * addr: user-space address of target buffer
-- * size: total size in bytes of target buffer
-- * @pages: returned array of page struct pointers underlying target buffer
-- * write: whether or not buffer is target of a write operation
-+ * nfs_get_user_pages - find and set up pages underlying user's buffer
-+ * rw: direction (read or write)
-+ * user_addr: starting address of this segment of user's buffer
-+ * count: size of this segment
-+ * @pages: returned array of page struct pointers underlying user's buffer
- */
- static inline int
--nfs_get_user_pages(unsigned long addr, size_t size,
-- struct page ***pages, int rw)
-+nfs_get_user_pages(int rw, unsigned long user_addr, size_t size,
-+ struct page ***pages)
- {
- int result = -ENOMEM;
-- unsigned page_count = (unsigned) size >> PAGE_SHIFT;
-- unsigned array_size = (page_count * sizeof(struct page *)) + 2U;
-+ unsigned long page_count;
-+ size_t array_size;
-+
-+ /* set an arbitrary limit to prevent arithmetic overflow */
-+ if (size > MAX_DIRECTIO_SIZE)
-+ return -EFBIG;
-
-- *pages = (struct page **) kmalloc(array_size, GFP_KERNEL);
-+ page_count = (user_addr + size + PAGE_SIZE - 1) >> PAGE_SHIFT;
-+ page_count -= user_addr >> PAGE_SHIFT;
-+
-+ array_size = (page_count * sizeof(struct page *));
-+ *pages = kmalloc(array_size, GFP_KERNEL);
- if (*pages) {
- down_read(¤t->mm->mmap_sem);
-- result = get_user_pages(current, current->mm, addr,
-- page_count, (rw == WRITE), 0,
-+ result = get_user_pages(current, current->mm, user_addr,
-+ page_count, (rw == READ), 0,
- *pages, NULL);
- up_read(¤t->mm->mmap_sem);
-- if (result < 0)
-- printk(KERN_ERR "%s: get_user_pages result %d\n",
-- __FUNCTION__, result);
- }
- return result;
- }
-@@ -84,176 +94,349 @@ nfs_get_user_pages(unsigned long addr, s
- * @pages: array of page struct pointers underlying target buffer
- */
- static inline void
--nfs_free_user_pages(struct page **pages, unsigned count)
-+nfs_free_user_pages(struct page **pages)
- {
-- unsigned page = 0;
-+ kfree(pages);
-+}
-
-- while (count--)
-- page_cache_release(pages[page++]);
-+/**
-+ * nfs_direct_read_seg - Read in one iov segment. Generate separate
-+ * read RPCs for each "rsize" bytes.
-+ * @inode: target inode
-+ * @cred: user's credential
-+ * user_addr: starting address of this segment of user's buffer
-+ * count: size of this segment
-+ * file_offset: offset in file to begin the operation
-+ * @pages: array of addresses of page structs defining user's buffer
-+ * nr_pages: size of pages array
-+ */
-+static int
-+nfs_direct_read_seg(struct inode *inode, struct rpc_cred *cred,
-+ unsigned long user_addr, size_t count, loff_t file_offset,
-+ struct page **pages, int nr_pages)
-+{
-+ const unsigned int rsize = NFS_SERVER(inode)->rsize;
-+ int tot_bytes = 0;
-+ int curpage = 0;
-+ struct nfs_read_data rdata = {
-+ .flags = 0,
-+ .cred = cred,
-+ .inode = inode,
-+ .args = {
-+ .fh = NFS_FH(inode),
-+ },
-+ .res = {
-+ .fattr = &rdata.fattr,
-+ },
-+ };
-+
-+ do {
-+ int request, result;
-+
-+ request = count;
-+ if (count > rsize)
-+ request = rsize;
-+ rdata.args.count = request,
-+ rdata.args.pgbase = user_addr & ~PAGE_MASK;
-+ rdata.args.offset = file_offset;
-+ rdata.args.pages = &pages[curpage];
-+
-+ dprintk("NFS: direct read: c=%u o=%Ld ua=%lu, pb=%u, cp=%u\n",
-+ rdata.args.count, (long long) rdata.args.offset,
-+ user_addr, rdata.args.pgbase, curpage);
-+
-+ lock_kernel();
-+ result = NFS_PROTO(inode)->read(&rdata);
-+ unlock_kernel();
-+
-+ if (result < 0) {
-+ if (result == -EISDIR)
-+ result = -EINVAL;
-+ return result;
-+ }
-
-- kfree(pages);
-+ tot_bytes += result;
-+ count -= result;
-+ file_offset += result;
-+ user_addr += result;
-+
-+ if (rdata.res.eof)
-+ break;
-+
-+ curpage += (rdata.args.pgbase + result) >> PAGE_SHIFT;
-+ } while (count);
-+
-+ /* XXX: should we zero the rest of the user's buffer if we
-+ * hit eof? */
-+
-+ return tot_bytes;
- }
-
- /**
-- * nfs_iov2pagelist - convert an array of iovecs to a list of page requests
-- * @inode: inode of target file
-- * @cred: credentials of user who requested I/O
-+ * nfs_direct_read - For each iov segment, map the user's buffer
-+ * then generate read RPCs.
-+ * @inode: target inode
-+ * @cred: user's credential
- * @iov: array of vectors that define I/O buffer
-- * offset: where in file to begin the read
-+ * file_offset: offset in file to begin the operation
- * nr_segs: size of iovec array
-- * @requests: append new page requests to this list head
-+ *
-+ * generic_file_direct_IO has already pushed out any non-direct
-+ * writes so that this read will see them when we read from the
-+ * server.
- */
- static int
--nfs_iov2pagelist(int rw, const struct inode *inode,
-- const struct rpc_cred *cred,
-- const struct iovec *iov, loff_t offset,
-- unsigned long nr_segs, struct list_head *requests)
-+nfs_direct_read(struct inode *inode, struct rpc_cred *cred,
-+ const struct iovec *iov, loff_t file_offset,
-+ unsigned long nr_segs)
- {
-- unsigned seg;
- int tot_bytes = 0;
-- struct page **pages;
-+ unsigned long seg = 0;
-
-- /* for each iovec in the array... */
-- for (seg = 0; seg < nr_segs; seg++) {
-- const unsigned long user_addr =
-- (unsigned long) iov[seg].iov_base;
-- size_t bytes = iov[seg].iov_len;
-- unsigned int pg_offset = (user_addr & ~PAGE_MASK);
-- int page_count, page = 0;
--
-- page_count = nfs_get_user_pages(user_addr, bytes, &pages, rw);
-- if (page_count < 0) {
-- nfs_release_list(requests);
-- return page_count;
-+ while ((seg < nr_segs) && (tot_bytes >= 0)) {
-+ int result, page_count;
-+ struct page **pages;
-+ const struct iovec *vec = &iov[seg++];
-+ unsigned long user_addr = (unsigned long) vec->iov_base;
-+ size_t size = vec->iov_len;
-+
-+ page_count = nfs_get_user_pages(READ, user_addr, size, &pages);
-+ if (page_count < 0) {
-+ nfs_free_user_pages(pages);
-+ return page_count;
-+ }
-+
-+ result = nfs_direct_read_seg(inode, cred, user_addr, size,
-+ file_offset, pages, page_count);
-+ if (result < 0)
-+ tot_bytes = result;
-+ else {
-+ tot_bytes += result;
-+ file_offset += result;
- }
-
-- /* ...build as many page requests as required */
-- while (bytes > 0) {
-- struct nfs_page *new;
-- const unsigned int pg_bytes = (bytes > PAGE_SIZE) ?
-- PAGE_SIZE : bytes;
--
-- new = nfs_create_request((struct rpc_cred *) cred,
-- (struct inode *) inode,
-- pages[page],
-- pg_offset, pg_bytes);
-- if (IS_ERR(new)) {
-- nfs_free_user_pages(pages, page_count);
-- nfs_release_list(requests);
-- return PTR_ERR(new);
-- }
-- new->wb_index = offset;
-- nfs_list_add_request(new, requests);
--
-- /* after the first page */
-- pg_offset = 0;
-- offset += PAGE_SIZE;
-- tot_bytes += pg_bytes;
-- bytes -= pg_bytes;
-- page++;
-+ nfs_free_user_pages(pages);
-+ }
-+
-+ return tot_bytes;
-+}
-+
-+/**
-+ * nfs_direct_write_seg - Write out one iov segment. Generate separate
-+ * write RPCs for each "wsize" bytes, then commit.
-+ * @inode: target inode
-+ * @cred: user's credential
-+ * user_addr: starting address of this segment of user's buffer
-+ * count: size of this segment
-+ * file_offset: offset in file to begin the operation
-+ * @pages: array of addresses of page structs defining user's buffer
-+ * nr_pages: size of pages array
-+ */
-+static int
-+nfs_direct_write_seg(struct inode *inode, struct rpc_cred *cred,
-+ unsigned long user_addr, size_t count, loff_t file_offset,
-+ struct page **pages, int nr_pages)
-+{
-+ const unsigned int wsize = NFS_SERVER(inode)->wsize;
-+ loff_t save_offset = file_offset;
-+ size_t save_count = count;
-+ int need_commit = 0;
-+ int tot_bytes = 0;
-+ int curpage = 0;
-+ struct nfs_writeverf first_verf;
-+ struct nfs_write_data wdata = {
-+ .cred = cred,
-+ .inode = inode,
-+ .args = {
-+ .fh = NFS_FH(inode),
-+ },
-+ .res = {
-+ .fattr = &wdata.fattr,
-+ .verf = &wdata.verf,
-+ },
-+ };
-+
-+ wdata.args.stable = NFS_UNSTABLE;
-+ if (IS_SYNC(inode) || NFS_PROTO(inode)->version == 2 || count <= wsize)
-+ wdata.args.stable = NFS_FILE_SYNC;
-+
-+retry:
-+ do {
-+ int request, result;
-+
-+ request = count;
-+ if (count > wsize)
-+ request = wsize;
-+ wdata.args.count = request,
-+ wdata.args.pgbase = user_addr & ~PAGE_MASK;
-+ wdata.args.offset = file_offset;
-+ wdata.args.pages = &pages[curpage];
-+
-+ dprintk("NFS: direct write: c=%u o=%Ld ua=%lu, pb=%u, cp=%u\n",
-+ wdata.args.count, (long long) wdata.args.offset,
-+ user_addr, wdata.args.pgbase, curpage);
-+
-+ lock_kernel();
-+ result = NFS_PROTO(inode)->write(&wdata);
-+ unlock_kernel();
-+
-+ if (result < 0)
-+ return result;
-+
-+ if (!tot_bytes)
-+ memcpy(&first_verf.verifier, &wdata.verf.verifier,
-+ VERF_SIZE);
-+ if (wdata.verf.committed != NFS_FILE_SYNC) {
-+ need_commit = 1;
-+ if (memcmp(&first_verf.verifier,
-+ &wdata.verf.verifier, VERF_SIZE))
-+ goto sync_retry;
- }
-
-- /* don't release pages here -- I/O completion will do that */
-- nfs_free_user_pages(pages, 0);
-+ tot_bytes += result;
-+ count -= result;
-+ file_offset += result;
-+ user_addr += result;
-+
-+ curpage += (wdata.args.pgbase + result) >> PAGE_SHIFT;
-+ } while (count);
-+
-+ /*
-+ * Commit data written so far, even in the event of an error
-+ */
-+ if (need_commit) {
-+ int result;
-+
-+ wdata.args.count = tot_bytes;
-+ wdata.args.offset = save_offset;
-+
-+ lock_kernel();
-+ result = NFS_PROTO(inode)->commit(&wdata);
-+ unlock_kernel();
-+
-+ if (result < 0)
-+ goto sync_retry;
-+ if (memcmp(&first_verf.verifier, &wdata.verf.verifier,
-+ VERF_SIZE))
-+ goto sync_retry;
- }
-
- return tot_bytes;
-+
-+sync_retry:
-+ wdata.args.stable = NFS_FILE_SYNC;
-+ file_offset = save_offset;
-+ count = save_count;
-+ goto retry;
- }
-
- /**
-- * do_nfs_direct_IO - Read or write data without caching
-- * @inode: inode of target file
-- * @cred: credentials of user who requested I/O
-+ * nfs_direct_write - For each iov segment, map the user's buffer
-+ * then generate write and commit RPCs.
-+ * @inode: target inode
-+ * @cred: user's credential
- * @iov: array of vectors that define I/O buffer
-- * offset: where in file to begin the read
-+ * file_offset: offset in file to begin the operation
- * nr_segs: size of iovec array
- *
-- * Break the passed-in iovec into a series of page-sized or smaller
-- * requests, where each page is mapped for direct user-land I/O.
-- *
-- * For each of these pages, create an NFS page request and
-- * append it to an automatic list of page requests.
-- *
-- * When all page requests have been queued, start the I/O on the
-- * whole list. The underlying routines coalesce the pages on the
-- * list into a bunch of asynchronous "r/wsize" network requests.
-- *
-- * I/O completion automatically unmaps and releases the pages.
-+ * Upon return, generic_file_direct_IO invalidates any cached pages
-+ * that non-direct readers might access, so they will pick up these
-+ * writes immediately.
- */
- static int
--do_nfs_direct_IO(int rw, const struct inode *inode,
-- const struct rpc_cred *cred, const struct iovec *iov,
-- loff_t offset, unsigned long nr_segs)
-+nfs_direct_write(struct inode *inode, struct rpc_cred *cred,
-+ const struct iovec *iov, loff_t file_offset,
-+ unsigned long nr_segs)
- {
-- LIST_HEAD(requests);
-- int result, tot_bytes;
-+ int tot_bytes = 0;
-+ unsigned long seg = 0;
-
-- result = nfs_iov2pagelist(rw, inode, cred, iov, offset, nr_segs,
-- &requests);
-- if (result < 0)
-- return result;
-- tot_bytes = result;
-+ while ((seg < nr_segs) && (tot_bytes >= 0)) {
-+ int result, page_count;
-+ struct page **pages;
-+ const struct iovec *vec = &iov[seg++];
-+ unsigned long user_addr = (unsigned long) vec->iov_base;
-+ size_t size = vec->iov_len;
-+
-+ page_count = nfs_get_user_pages(WRITE, user_addr, size, &pages);
-+ if (page_count < 0) {
-+ nfs_free_user_pages(pages);
-+ return page_count;
-+ }
-
-- switch (rw) {
-- case READ:
-- if (IS_SYNC(inode) || (NFS_SERVER(inode)->rsize < PAGE_SIZE)) {
-- result = nfs_direct_read_sync(inode, cred, iov, offset, nr_segs);
-- break;
-+ result = nfs_direct_write_seg(inode, cred, user_addr, size,
-+ file_offset, pages, page_count);
-+ if (result < 0)
-+ tot_bytes = result;
-+ else {
-+ tot_bytes += result;
-+ file_offset += result;
- }
-- result = nfs_pagein_list(&requests, NFS_SERVER(inode)->rpages);
-- nfs_wait_for_reads(&requests);
-- break;
-- case WRITE:
-- if (IS_SYNC(inode) || (NFS_SERVER(inode)->wsize < PAGE_SIZE))
-- result = nfs_direct_write_sync(inode, cred, iov, offset, nr_segs);
-- else
-- result = nfs_flush_list(&requests,
-- NFS_SERVER(inode)->wpages, FLUSH_WAIT);
-
-- /* invalidate cache so non-direct readers pick up changes */
-- invalidate_inode_pages((struct inode *) inode);
-- break;
-- default:
-- result = -EINVAL;
-- break;
-+ nfs_free_user_pages(pages);
- }
-
-- if (result < 0)
-- return result;
- return tot_bytes;
- }
-
- /**
- * nfs_direct_IO - NFS address space operation for direct I/O
- * rw: direction (read or write)
-- * @file: file struct of target file
-+ * @iocb: target I/O control block
- * @iov: array of vectors that define I/O buffer
-- * offset: offset in file to begin the operation
-+ * file_offset: offset in file to begin the operation
- * nr_segs: size of iovec array
- *
-+ * Usually a file system implements direct I/O by calling out to
-+ * blockdev_direct_IO. The NFS client doesn't have a backing block
-+ * device, so we do everything by hand instead.
-+ *
- * The inode's i_sem is no longer held by the VFS layer before it calls
- * this function to do a write.
- */
- int
- nfs_direct_IO(int rw, struct kiocb *iocb, const struct iovec *iov,
-- loff_t offset, unsigned long nr_segs)
-+ loff_t file_offset, unsigned long nr_segs)
- {
-- /* None of this works yet, so prevent it from compiling. */
--#if 0
-- int result;
-+ int result = -EINVAL;
-+ struct file *file = iocb->ki_filp;
- struct dentry *dentry = file->f_dentry;
-- const struct inode *inode = dentry->d_inode->i_mapping->host;
-- const struct rpc_cred *cred = nfs_file_cred(file);
--#endif
--
-- dfprintk(VFS, "NFS: direct_IO(%s) (%s/%s) off/no(%Lu/%lu)\n",
-- ((rw == READ) ? "READ" : "WRITE"),
-- dentry->d_parent->d_name.name,
-- dentry->d_name.name, offset, nr_segs);
-+ struct inode *inode = dentry->d_inode;
-+ struct rpc_cred *cred;
-+
-+ /*
-+ * No support for async yet
-+ */
-+ if (!is_sync_kiocb(iocb))
-+ goto out;
-+
-+ cred = get_rpccred(nfs_file_cred(file));
-+ if (!cred)
-+ cred = get_rpccred(NFS_I(inode)->mm_cred);
-+
-+ switch (rw) {
-+ case READ:
-+ dprintk("NFS: direct_IO(read) (%s) off/no(%Lu/%lu)\n",
-+ dentry->d_name.name, file_offset, nr_segs);
-+
-+ result = nfs_direct_read(inode, cred, iov,
-+ file_offset, nr_segs);
-+ break;
-+ case WRITE:
-+ dprintk("NFS: direct_IO(write) (%s) off/no(%Lu/%lu)\n",
-+ dentry->d_name.name, file_offset, nr_segs);
-
-- result = do_nfs_direct_IO(rw, inode, cred, iov, offset, nr_segs);
-+ result = nfs_direct_write(inode, cred, iov,
-+ file_offset, nr_segs);
-+ break;
-+ default:
-+ break;
-+ }
-
-- dfprintk(VFS, "NFS: direct_IO result = %d\n", result);
-+ if (cred)
-+ put_rpccred(cred);
-
-+out:
-+ dprintk("NFS: direct_IO result=%d\n", result);
- return result;
- }
---- linux-2.6.0-test1/fs/nfsd/nfssvc.c 2003-07-13 21:44:35.000000000 -0700
-+++ 25/fs/nfsd/nfssvc.c 2003-07-19 17:03:50.000000000 -0700
-@@ -116,9 +116,12 @@ nfsd_svc(unsigned short port, int nrserv
- nrservs -= (nfsd_serv->sv_nrthreads-1);
- while (nrservs > 0) {
- nrservs--;
-+ __module_get(THIS_MODULE);
- error = svc_create_thread(nfsd, nfsd_serv);
-- if (error < 0)
-+ if (error < 0) {
-+ module_put(THIS_MODULE);
- break;
-+ }
- }
- victim = nfsd_list.next;
- while (nrservs < 0 && victim != &nfsd_list) {
-@@ -175,7 +178,6 @@ nfsd(struct svc_rqst *rqstp)
- sigset_t shutdown_mask, allowed_mask;
-
- /* Lock module and set up kernel thread */
-- MOD_INC_USE_COUNT;
- lock_kernel();
- daemonize("nfsd");
- current->rlim[RLIMIT_FSIZE].rlim_cur = RLIM_INFINITY;
-@@ -281,7 +283,7 @@ out:
- svc_exit_thread(rqstp);
-
- /* Release module */
-- MOD_DEC_USE_COUNT;
-+ module_put_and_exit(0);
- }
-
- int
---- linux-2.6.0-test1/fs/nfs/inode.c 2003-07-13 21:44:35.000000000 -0700
-+++ 25/fs/nfs/inode.c 2003-07-19 17:03:50.000000000 -0700
-@@ -151,15 +151,16 @@ void
- nfs_put_super(struct super_block *sb)
- {
- struct nfs_server *server = NFS_SB(sb);
-- struct rpc_clnt *rpc;
-
- #ifdef CONFIG_NFS_V4
- if (server->idmap != NULL)
- nfs_idmap_delete(server);
- #endif /* CONFIG_NFS_V4 */
-
-- if ((rpc = server->client) != NULL)
-- rpc_shutdown_client(rpc);
-+ if (server->client != NULL)
-+ rpc_shutdown_client(server->client);
-+ if (server->client_sys != NULL)
-+ rpc_shutdown_client(server->client_sys);
-
- if (!(server->flags & NFS_MOUNT_NONLM))
- lockd_down(); /* release rpc.lockd */
-@@ -226,27 +227,57 @@ nfs_block_size(unsigned long bsize, unsi
- /*
- * Obtain the root inode of the file system.
- */
--static struct inode *
--nfs_get_root(struct super_block *sb, struct nfs_fh *rootfh)
-+static int
-+nfs_get_root(struct inode **rooti, rpc_authflavor_t authflavor, struct super_block *sb, struct nfs_fh *rootfh)
- {
- struct nfs_server *server = NFS_SB(sb);
-- struct nfs_fattr fattr;
-- struct inode *inode;
-+ struct nfs_fattr fattr = { };
- int error;
-
-- if ((error = server->rpc_ops->getroot(server, rootfh, &fattr)) < 0) {
-+ error = server->rpc_ops->getroot(server, rootfh, &fattr);
-+ if (error == -EACCES && authflavor > RPC_AUTH_MAXFLAVOR) {
-+ /*
-+ * Some authentication types (gss/krb5, most notably)
-+ * are such that root won't be able to present a
-+ * credential for GETATTR (ie, getroot()).
-+ *
-+ * We still want the mount to succeed.
-+ *
-+ * So we fake the attr values and mark the inode as such.
-+ * On the first succesful traversal, we fix everything.
-+ * The auth type test isn't quite correct, but whatever.
-+ */
-+ dfprintk(VFS, "NFS: faking root inode\n");
-+
-+ fattr.fileid = 1;
-+ fattr.nlink = 2; /* minimum for a dir */
-+ fattr.type = NFDIR;
-+ fattr.mode = S_IFDIR|S_IRUGO|S_IXUGO;
-+ fattr.size = 4096;
-+ fattr.du.nfs3.used = 1;
-+ fattr.valid = NFS_ATTR_FATTR|NFS_ATTR_FATTR_V3;
-+ } else if (error < 0) {
- printk(KERN_NOTICE "nfs_get_root: getattr error = %d\n", -error);
-- return NULL;
-+ *rooti = NULL; /* superfluous ... but safe */
-+ return error;
- }
-
-- inode = __nfs_fhget(sb, rootfh, &fattr);
-- return inode;
-+ *rooti = __nfs_fhget(sb, rootfh, &fattr);
-+ if (error == -EACCES && authflavor > RPC_AUTH_MAXFLAVOR) {
-+ if (*rooti) {
-+ NFS_FLAGS(*rooti) |= NFS_INO_FAKE_ROOT;
-+ NFS_CACHEINV((*rooti));
-+ error = 0;
-+ }
-+ }
-+ return error;
- }
-
- /*
- * Do NFS version-independent mount processing, and sanity checking
- */
--int nfs_sb_init(struct super_block *sb)
-+static int
-+nfs_sb_init(struct super_block *sb, rpc_authflavor_t authflavor)
- {
- struct nfs_server *server;
- struct inode *root_inode = NULL;
-@@ -267,8 +298,7 @@ int nfs_sb_init(struct super_block *sb)
- sb->s_op = &nfs_sops;
-
- /* Did getting the root inode fail? */
-- root_inode = nfs_get_root(sb, &server->fh);
-- if (!root_inode)
-+ if (nfs_get_root(&root_inode, authflavor, sb, &server->fh) < 0)
- goto out_no_root;
- sb->s_root = d_alloc_root(root_inode);
- if (!sb->s_root)
-@@ -346,19 +376,66 @@ out_no_root:
- }
-
- /*
-+ * Create an RPC client handle.
-+ */
-+static struct rpc_clnt *
-+nfs_create_client(struct nfs_server *server, const struct nfs_mount_data *data)
-+{
-+ struct rpc_timeout timeparms;
-+ struct rpc_xprt *xprt = NULL;
-+ struct rpc_clnt *clnt = NULL;
-+ int tcp = (data->flags & NFS_MOUNT_TCP);
-+
-+ /* Initialize timeout values */
-+ timeparms.to_initval = data->timeo * HZ / 10;
-+ timeparms.to_retries = data->retrans;
-+ timeparms.to_maxval = tcp ? RPC_MAX_TCP_TIMEOUT : RPC_MAX_UDP_TIMEOUT;
-+ timeparms.to_exponential = 1;
-+
-+ if (!timeparms.to_initval)
-+ timeparms.to_initval = (tcp ? 600 : 11) * HZ / 10;
-+ if (!timeparms.to_retries)
-+ timeparms.to_retries = 5;
-+
-+ /* create transport and client */
-+ xprt = xprt_create_proto(tcp ? IPPROTO_TCP : IPPROTO_UDP,
-+ &server->addr, &timeparms);
-+ if (xprt == NULL) {
-+ printk(KERN_WARNING "NFS: cannot create RPC transport.\n");
-+ goto out_fail;
-+ }
-+ clnt = rpc_create_client(xprt, server->hostname, &nfs_program,
-+ server->rpc_ops->version, data->pseudoflavor);
-+ if (clnt == NULL) {
-+ printk(KERN_WARNING "NFS: cannot create RPC client.\n");
-+ goto out_fail;
-+ }
-+
-+ clnt->cl_intr = (server->flags & NFS_MOUNT_INTR) ? 1 : 0;
-+ clnt->cl_softrtry = (server->flags & NFS_MOUNT_SOFT) ? 1 : 0;
-+ clnt->cl_droppriv = (server->flags & NFS_MOUNT_BROKEN_SUID) ? 1 : 0;
-+ clnt->cl_chatty = 1;
-+
-+ return clnt;
-+
-+out_fail:
-+ if (xprt)
-+ xprt_destroy(xprt);
-+ return NULL;
-+}
-+
-+/*
- * The way this works is that the mount process passes a structure
- * in the data argument which contains the server's IP address
- * and the root file handle obtained from the server's mount
- * daemon. We stash these away in the private superblock fields.
- */
--int nfs_fill_super(struct super_block *sb, struct nfs_mount_data *data, int silent)
-+static int
-+nfs_fill_super(struct super_block *sb, struct nfs_mount_data *data, int silent)
- {
- struct nfs_server *server;
-- struct rpc_xprt *xprt = NULL;
-- struct rpc_clnt *clnt = NULL;
-- struct rpc_timeout timeparms;
-- int tcp, err = -EIO;
-- u32 authflavor;
-+ int err = -EIO;
-+ rpc_authflavor_t authflavor;
-
- server = NFS_SB(sb);
- sb->s_blocksize_bits = 0;
-@@ -400,46 +477,20 @@ int nfs_fill_super(struct super_block *s
- server->rpc_ops = &nfs_v2_clientops;
- }
-
-- /* Which protocol do we use? */
-- tcp = (data->flags & NFS_MOUNT_TCP);
--
-- /* Initialize timeout values */
-- timeparms.to_initval = data->timeo * HZ / 10;
-- timeparms.to_retries = data->retrans;
-- timeparms.to_maxval = tcp? RPC_MAX_TCP_TIMEOUT : RPC_MAX_UDP_TIMEOUT;
-- timeparms.to_exponential = 1;
--
-- if (!timeparms.to_initval)
-- timeparms.to_initval = (tcp ? 600 : 11) * HZ / 10;
-- if (!timeparms.to_retries)
-- timeparms.to_retries = 5;
--
-- /* Now create transport and client */
-- xprt = xprt_create_proto(tcp? IPPROTO_TCP : IPPROTO_UDP,
-- &server->addr, &timeparms);
-- if (xprt == NULL) {
-- printk(KERN_WARNING "NFS: cannot create RPC transport.\n");
-- goto out_fail;
-- }
--
-- if (data->flags & NFS_MOUNT_SECFLAVOUR)
-- authflavor = data->pseudoflavor;
-- else
-- authflavor = RPC_AUTH_UNIX;
--
-- clnt = rpc_create_client(xprt, server->hostname, &nfs_program,
-- server->rpc_ops->version, authflavor);
-- if (clnt == NULL) {
-- printk(KERN_WARNING "NFS: cannot create RPC client.\n");
-- xprt_destroy(xprt);
-+ /* Fill in pseudoflavor for mount version < 5 */
-+ if (!(data->flags & NFS_MOUNT_SECFLAVOUR))
-+ data->pseudoflavor = RPC_AUTH_UNIX;
-+ authflavor = data->pseudoflavor; /* save for sb_init() */
-+ /* XXX maybe we want to add a server->pseudoflavor field */
-+
-+ /* Create RPC client handles */
-+ server->client = nfs_create_client(server, data);
-+ if (server->client == NULL)
- goto out_fail;
-- }
--
-- clnt->cl_intr = (server->flags & NFS_MOUNT_INTR) ? 1 : 0;
-- clnt->cl_softrtry = (server->flags & NFS_MOUNT_SOFT) ? 1 : 0;
-- clnt->cl_droppriv = (server->flags & NFS_MOUNT_BROKEN_SUID) ? 1 : 0;
-- clnt->cl_chatty = 1;
-- server->client = clnt;
-+ data->pseudoflavor = RPC_AUTH_UNIX; /* RFC 2623, sec 2.3.2 */
-+ server->client_sys = nfs_create_client(server, data);
-+ if (server->client_sys == NULL)
-+ goto out_shutdown;
-
- /* Fire up rpciod if not yet running */
- if (rpciod_up() != 0) {
-@@ -447,7 +498,7 @@ int nfs_fill_super(struct super_block *s
- goto out_shutdown;
- }
-
-- err = nfs_sb_init(sb);
-+ err = nfs_sb_init(sb, authflavor);
- if (err != 0)
- goto out_noinit;
-
-@@ -466,7 +517,10 @@ int nfs_fill_super(struct super_block *s
- out_noinit:
- rpciod_down();
- out_shutdown:
-- rpc_shutdown_client(server->client);
-+ if (server->client)
-+ rpc_shutdown_client(server->client);
-+ if (server->client_sys)
-+ rpc_shutdown_client(server->client_sys);
- out_fail:
- if (server->hostname)
- kfree(server->hostname);
-@@ -904,6 +958,11 @@ __nfs_revalidate_inode(struct nfs_server
- goto out_nowait;
- if (NFS_STALE(inode) && inode != inode->i_sb->s_root->d_inode)
- goto out_nowait;
-+ if (NFS_FAKE_ROOT(inode)) {
-+ dfprintk(VFS, "NFS: not revalidating fake root\n");
-+ status = 0;
-+ goto out_nowait;
-+ }
-
- while (NFS_REVALIDATING(inode)) {
- status = nfs_wait_on_inode(inode, NFS_INO_REVALIDATING);
-@@ -1007,6 +1066,13 @@ __nfs_refresh_inode(struct inode *inode,
- inode->i_sb->s_id, inode->i_ino,
- atomic_read(&inode->i_count), fattr->valid);
-
-+ /* First successful call after mount, fill real data. */
-+ if (NFS_FAKE_ROOT(inode)) {
-+ dfprintk(VFS, "NFS: updating fake root\n");
-+ nfsi->fileid = fattr->fileid;
-+ NFS_FLAGS(inode) &= ~NFS_INO_FAKE_ROOT;
-+ }
-+
- if (nfsi->fileid != fattr->fileid) {
- printk(KERN_ERR "nfs_refresh_inode: inode number mismatch\n"
- "expected (%s/0x%Lx), got (%s/0x%Lx)\n",
-@@ -1229,6 +1295,8 @@ static struct super_block *nfs_get_sb(st
- root->size = NFS2_FHSIZE;
- memcpy(root->data, data->old_root.data, NFS2_FHSIZE);
- }
-+ if (data->version < 5)
-+ data->flags &= ~NFS_MOUNT_SECFLAVOUR;
- }
-
- if (root->size > sizeof(root->data)) {
-@@ -1373,7 +1441,7 @@ static int nfs4_fill_super(struct super_
- if ((server->idmap = nfs_idmap_new(server)) == NULL)
- printk(KERN_WARNING "NFS: couldn't start IDmap\n");
-
-- err = nfs_sb_init(sb);
-+ err = nfs_sb_init(sb, authflavour);
- if (err == 0)
- return 0;
- rpciod_down();
---- linux-2.6.0-test1/fs/nfs/nfs3proc.c 2003-06-26 22:07:25.000000000 -0700
-+++ 25/fs/nfs/nfs3proc.c 2003-07-19 17:07:07.000000000 -0700
-@@ -225,81 +225,74 @@ nfs3_proc_readlink(struct inode *inode,
- }
-
- static int
--nfs3_proc_read(struct inode *inode, struct rpc_cred *cred,
-- struct nfs_fattr *fattr, int flags,
-- unsigned int base, unsigned int count, struct page *page,
-- int *eofp)
--{
-- u64 offset = page_offset(page) + base;
-- struct nfs_readargs arg = {
-- .fh = NFS_FH(inode),
-- .offset = offset,
-- .count = count,
-- .pgbase = base,
-- .pages = &page
-- };
-- struct nfs_readres res = {
-- .fattr = fattr,
-- .count = count,
-- };
-+nfs3_proc_read(struct nfs_read_data *rdata)
-+{
-+ int flags = rdata->flags;
-+ struct inode * inode = rdata->inode;
-+ struct nfs_fattr * fattr = rdata->res.fattr;
- struct rpc_message msg = {
- .rpc_proc = &nfs3_procedures[NFS3PROC_READ],
-- .rpc_argp = &arg,
-- .rpc_resp = &res,
-- .rpc_cred = cred
-+ .rpc_argp = &rdata->args,
-+ .rpc_resp = &rdata->res,
-+ .rpc_cred = rdata->cred,
- };
- int status;
-
-- dprintk("NFS call read %d @ %Ld\n", count, (long long)offset);
-+ dprintk("NFS call read %d @ %Ld\n", rdata->args.count,
-+ (long long) rdata->args.offset);
- fattr->valid = 0;
- status = rpc_call_sync(NFS_CLIENT(inode), &msg, flags);
- if (status >= 0)
- nfs_refresh_inode(inode, fattr);
- dprintk("NFS reply read: %d\n", status);
-- *eofp = res.eof;
- return status;
- }
-
- static int
--nfs3_proc_write(struct inode *inode, struct rpc_cred *cred,
-- struct nfs_fattr *fattr, int flags,
-- unsigned int base, unsigned int count,
-- struct page *page, struct nfs_writeverf *verf)
-+nfs3_proc_write(struct nfs_write_data *wdata)
- {
-- u64 offset = page_offset(page) + base;
-- struct nfs_writeargs arg = {
-- .fh = NFS_FH(inode),
-- .offset = offset,
-- .count = count,
-- .stable = NFS_FILE_SYNC,
-- .pgbase = base,
-- .pages = &page
-- };
-- struct nfs_writeres res = {
-- .fattr = fattr,
-- .verf = verf,
-- };
-+ int rpcflags = wdata->flags;
-+ struct inode * inode = wdata->inode;
-+ struct nfs_fattr * fattr = wdata->res.fattr;
- struct rpc_message msg = {
- .rpc_proc = &nfs3_procedures[NFS3PROC_WRITE],
-- .rpc_argp = &arg,
-- .rpc_resp = &res,
-- .rpc_cred = cred
-+ .rpc_argp = &wdata->args,
-+ .rpc_resp = &wdata->res,
-+ .rpc_cred = wdata->cred,
- };
-- int status, rpcflags = 0;
-+ int status;
-
-- dprintk("NFS call write %d @ %Ld\n", count, (long long)offset);
-+ dprintk("NFS call write %d @ %Ld\n", wdata->args.count,
-+ (long long) wdata->args.offset);
- fattr->valid = 0;
-- if (flags & NFS_RW_SWAP)
-- rpcflags |= NFS_RPC_SWAPFLAGS;
-- arg.stable = (flags & NFS_RW_SYNC) ? NFS_FILE_SYNC : NFS_UNSTABLE;
--
- status = rpc_call_sync(NFS_CLIENT(inode), &msg, rpcflags);
--
- if (status >= 0)
- nfs3_write_refresh_inode(inode, fattr);
-+ dprintk("NFS reply write: %d\n", status);
-+ return status < 0? status : wdata->res.count;
-+}
-
-- dprintk("NFS reply read: %d\n", status);
-- return status < 0? status : res.count;
-+static int
-+nfs3_proc_commit(struct nfs_write_data *cdata)
-+{
-+ struct inode * inode = cdata->inode;
-+ struct nfs_fattr * fattr = cdata->res.fattr;
-+ struct rpc_message msg = {
-+ .rpc_proc = &nfs3_procedures[NFS3PROC_COMMIT],
-+ .rpc_argp = &cdata->args,
-+ .rpc_resp = &cdata->res,
-+ .rpc_cred = cdata->cred,
-+ };
-+ int status;
-+
-+ dprintk("NFS call commit %d @ %Ld\n", cdata->args.count,
-+ (long long) cdata->args.offset);
-+ fattr->valid = 0;
-+ status = rpc_call_sync(NFS_CLIENT(inode), &msg, 0);
-+ if (status >= 0)
-+ nfs3_write_refresh_inode(inode, fattr);
-+ dprintk("NFS reply commit: %d\n", status);
-+ return status;
- }
-
- /*
-@@ -681,7 +674,7 @@ nfs3_proc_fsinfo(struct nfs_server *serv
-
- dprintk("NFS call fsinfo\n");
- info->fattr->valid = 0;
-- status = rpc_call(server->client, NFS3PROC_FSINFO, fhandle, info, 0);
-+ status = rpc_call(server->client_sys, NFS3PROC_FSINFO, fhandle, info, 0);
- dprintk("NFS reply fsinfo: %d\n", status);
- return status;
- }
-@@ -862,6 +855,7 @@ struct nfs_rpc_ops nfs_v3_clientops = {
- .readlink = nfs3_proc_readlink,
- .read = nfs3_proc_read,
- .write = nfs3_proc_write,
-+ .commit = nfs3_proc_commit,
- .create = nfs3_proc_create,
- .remove = nfs3_proc_remove,
- .unlink_setup = nfs3_proc_unlink_setup,
---- linux-2.6.0-test1/fs/nfs/nfs3xdr.c 2003-06-14 12:18:51.000000000 -0700
-+++ 25/fs/nfs/nfs3xdr.c 2003-07-19 17:03:50.000000000 -0700
-@@ -124,8 +124,6 @@ xdr_decode_fhandle(u32 *p, struct nfs_fh
-
- /*
- * Encode/decode time.
-- * Since the VFS doesn't care for fractional times, we ignore the
-- * nanosecond field.
- */
- static inline u32 *
- xdr_encode_time3(u32 *p, struct timespec *timep)
---- linux-2.6.0-test1/fs/nfs/nfs4proc.c 2003-06-26 22:07:25.000000000 -0700
-+++ 25/fs/nfs/nfs4proc.c 2003-07-19 17:07:07.000000000 -0700
-@@ -1012,45 +1012,36 @@ nfs4_proc_readlink(struct inode *inode,
- }
-
- static int
--nfs4_proc_read(struct inode *inode, struct rpc_cred *cred,
-- struct nfs_fattr *fattr, int flags,
-- unsigned int base, unsigned int count,
-- struct page *page, int *eofp)
-+nfs4_proc_read(struct nfs_read_data *rdata)
- {
-+ int flags = rdata->flags;
-+ struct inode *inode = rdata->inode;
-+ struct nfs_fattr *fattr = rdata->res.fattr;
-+ nfs4_stateid *stateid = &rdata->args.stateid;
- struct nfs_server *server = NFS_SERVER(inode);
- struct nfs4_shareowner *sp;
-- uint64_t offset = page_offset(page) + base;
-- struct nfs_readargs arg = {
-- .fh = NFS_FH(inode),
-- .offset = offset,
-- .count = count,
-- .pgbase = base,
-- .pages = &page,
-- };
-- struct nfs_readres res = {
-- .fattr = fattr,
-- .count = count,
-- };
- struct rpc_message msg = {
- .rpc_proc = &nfs4_procedures[NFSPROC4_CLNT_READ],
-- .rpc_argp = &arg,
-- .rpc_resp = &res,
-- .rpc_cred = cred,
-+ .rpc_argp = &rdata->args,
-+ .rpc_resp = &rdata->res,
-+ .rpc_cred = rdata->cred,
- };
- unsigned long timestamp = jiffies;
- int status;
-
-- dprintk("NFS call read %d @ %Ld\n", count, (long long)offset);
-+ dprintk("NFS call read %d @ %Ld\n", rdata->args.count,
-+ (long long) rdata->args.offset);
-+
- /*
-- * Try first to use O_RDONLY, then O_RDWR stateid.
-- */
-+ * Try first to use O_RDONLY, then O_RDWR stateid.
-+ */
- sp = nfs4_get_inode_share(inode, O_RDONLY);
- if (!sp)
- sp = nfs4_get_inode_share(inode, O_RDWR);
- if (sp)
-- memcpy(arg.stateid,sp->so_stateid, sizeof(nfs4_stateid));
-+ memcpy(stateid, sp->so_stateid, sizeof(nfs4_stateid));
- else
-- memcpy(arg.stateid, zero_stateid, sizeof(nfs4_stateid));
-+ memcpy(stateid, zero_stateid, sizeof(nfs4_stateid));
-
- fattr->valid = 0;
- status = rpc_call_sync(server->client, &msg, flags);
-@@ -1061,56 +1052,82 @@ nfs4_proc_read(struct inode *inode, stru
- nfs_zap_caches(inode);
- }
- dprintk("NFS reply read: %d\n", status);
-- *eofp = res.eof;
- return status;
- }
-
- static int
--nfs4_proc_write(struct inode *inode, struct rpc_cred *cred,
-- struct nfs_fattr *fattr, int flags,
-- unsigned int base, unsigned int count,
-- struct page *page, struct nfs_writeverf *verf)
-+nfs4_proc_write(struct nfs_write_data *wdata)
- {
-+ int rpcflags = wdata->flags;
-+ struct inode *inode = wdata->inode;
-+ struct nfs_fattr *fattr = wdata->res.fattr;
-+ nfs4_stateid *stateid = &wdata->args.stateid;
- struct nfs_server *server = NFS_SERVER(inode);
-- struct nfs4_shareowner *sp;
-- uint64_t offset = page_offset(page) + base;
-- struct nfs_writeargs arg = {
-- .fh = NFS_FH(inode),
-- .offset = offset,
-- .count = count,
-- .stable = (flags & NFS_RW_SYNC) ? NFS_FILE_SYNC : NFS_UNSTABLE,
-- .pgbase = base,
-- .pages = &page,
-- };
-- struct nfs_writeres res = {
-- .fattr = fattr,
-- .count = count,
-- .verf = verf,
-- };
-+ struct nfs4_shareowner *sp;
- struct rpc_message msg = {
- .rpc_proc = &nfs4_procedures[NFSPROC4_CLNT_WRITE],
-- .rpc_argp = &arg,
-- .rpc_resp = &res,
-- .rpc_cred = cred,
-+ .rpc_argp = &wdata->args,
-+ .rpc_resp = &wdata->res,
-+ .rpc_cred = wdata->cred,
-+ };
-+ int status;
-+
-+ dprintk("NFS call write %d @ %Ld\n", wdata->args.count,
-+ (long long) wdata->args.offset);
-+
-+ /*
-+ * Try first to use O_WRONLY, then O_RDWR stateid.
-+ */
-+ sp = nfs4_get_inode_share(inode, O_WRONLY);
-+ if (!sp)
-+ sp = nfs4_get_inode_share(inode, O_RDWR);
-+
-+ if (sp)
-+ memcpy(stateid, sp->so_stateid, sizeof(nfs4_stateid));
-+ else
-+ memcpy(stateid, zero_stateid, sizeof(nfs4_stateid));
-+
-+ fattr->valid = 0;
-+ status = rpc_call_sync(server->client, &msg, rpcflags);
-+ dprintk("NFS reply write: %d\n", status);
-+ return status;
-+}
-+
-+static int
-+nfs4_proc_commit(struct nfs_write_data *cdata)
-+{
-+ struct inode *inode = cdata->inode;
-+ struct nfs_fattr *fattr = cdata->res.fattr;
-+ nfs4_stateid *stateid = &cdata->args.stateid;
-+ struct nfs_server *server = NFS_SERVER(inode);
-+ struct nfs4_shareowner *sp;
-+ struct rpc_message msg = {
-+ .rpc_proc = &nfs4_procedures[NFSPROC4_CLNT_COMMIT],
-+ .rpc_argp = &cdata->args,
-+ .rpc_resp = &cdata->res,
-+ .rpc_cred = cdata->cred,
- };
-- int rpcflags = (flags & NFS_RW_SWAP) ? NFS_RPC_SWAPFLAGS : 0;
-+ int status;
-
-- dprintk("NFS call write %d @ %Ld\n", count, (long long)offset);
-+ dprintk("NFS call commit %d @ %Ld\n", cdata->args.count,
-+ (long long) cdata->args.offset);
-
- /*
-- * Try first to use O_WRONLY, then O_RDWR stateid.
-- */
-+ * Try first to use O_WRONLY, then O_RDWR stateid.
-+ */
- sp = nfs4_get_inode_share(inode, O_WRONLY);
- if (!sp)
- sp = nfs4_get_inode_share(inode, O_RDWR);
-
- if (sp)
-- memcpy(arg.stateid,sp->so_stateid, sizeof(nfs4_stateid));
-+ memcpy(stateid, sp->so_stateid, sizeof(nfs4_stateid));
- else
-- memcpy(arg.stateid, zero_stateid, sizeof(nfs4_stateid));
-+ memcpy(stateid, zero_stateid, sizeof(nfs4_stateid));
-
- fattr->valid = 0;
-- return rpc_call_sync(server->client, &msg, rpcflags);
-+ status = rpc_call_sync(server->client, &msg, 0);
-+ dprintk("NFS reply commit: %d\n", status);
-+ return status;
- }
-
- /*
-@@ -1752,7 +1769,7 @@ struct nfs_rpc_ops nfs_v4_clientops = {
- .readlink = nfs4_proc_readlink,
- .read = nfs4_proc_read,
- .write = nfs4_proc_write,
-- .commit = NULL,
-+ .commit = nfs4_proc_commit,
- .create = nfs4_proc_create,
- .remove = nfs4_proc_remove,
- .unlink_setup = nfs4_proc_unlink_setup,
---- linux-2.6.0-test1/fs/nfs/pagelist.c 2003-06-26 22:07:25.000000000 -0700
-+++ 25/fs/nfs/pagelist.c 2003-07-19 17:07:05.000000000 -0700
-@@ -154,26 +154,6 @@ nfs_release_request(struct nfs_page *req
- }
-
- /**
-- * nfs_release_list - cleanly dispose of an unattached list of page requests
-- * @list: list of doomed page requests
-- */
--void
--nfs_release_list(struct list_head *list)
--{
-- while (!list_empty(list)) {
-- struct nfs_page *req = nfs_list_entry(list);
--
-- nfs_list_remove_request(req);
--
-- page_cache_release(req->wb_page);
--
-- /* Release struct file or cached credential */
-- nfs_clear_request(req);
-- nfs_page_free(req);
-- }
--}
--
--/**
- * nfs_list_add_request - Insert a request into a sorted list
- * @req: request
- * @head: head of list into which to insert the request.
-@@ -222,37 +202,6 @@ nfs_wait_on_request(struct nfs_page *req
- }
-
- /**
-- * nfs_wait_for_reads - wait for outstanding requests to complete
-- * @head: list of page requests to wait for
-- */
--int
--nfs_wait_for_reads(struct list_head *head)
--{
-- struct list_head *p = head->next;
-- unsigned int res = 0;
--
-- while (p != head) {
-- struct nfs_page *req = nfs_list_entry(p);
-- int error;
--
-- if (!NFS_WBACK_BUSY(req))
-- continue;
--
-- req->wb_count++;
-- error = nfs_wait_on_request(req);
-- if (error < 0)
-- return error;
-- nfs_list_remove_request(req);
-- nfs_clear_request(req);
-- nfs_page_free(req);
--
-- p = head->next;
-- res++;
-- }
-- return res;
--}
--
--/**
- * nfs_coalesce_requests - Split coalesced requests out from a list.
- * @head: source list
- * @dst: destination list
---- linux-2.6.0-test1/fs/nfs/proc.c 2003-06-26 22:07:25.000000000 -0700
-+++ 25/fs/nfs/proc.c 2003-07-19 17:07:07.000000000 -0700
-@@ -149,82 +149,62 @@ nfs_proc_readlink(struct inode *inode, s
- }
-
- static int
--nfs_proc_read(struct inode *inode, struct rpc_cred *cred,
-- struct nfs_fattr *fattr, int flags,
-- unsigned int base, unsigned int count, struct page *page,
-- int *eofp)
--{
-- u64 offset = page_offset(page) + base;
-- struct nfs_readargs arg = {
-- .fh = NFS_FH(inode),
-- .offset = offset,
-- .count = count,
-- .pgbase = base,
-- .pages = &page
-- };
-- struct nfs_readres res = {
-- .fattr = fattr,
-- .count = count
-- };
-+nfs_proc_read(struct nfs_read_data *rdata)
-+{
-+ int flags = rdata->flags;
-+ struct inode * inode = rdata->inode;
-+ struct nfs_fattr * fattr = rdata->res.fattr;
- struct rpc_message msg = {
- .rpc_proc = &nfs_procedures[NFSPROC_READ],
-- .rpc_argp = &arg,
-- .rpc_resp = &res,
-- .rpc_cred = cred
-+ .rpc_argp = &rdata->args,
-+ .rpc_resp = &rdata->res,
-+ .rpc_cred = rdata->cred,
- };
- int status;
-
-- dprintk("NFS call read %d @ %Ld\n", count, (long long)offset);
-+ dprintk("NFS call read %d @ %Ld\n", rdata->args.count,
-+ (long long) rdata->args.offset);
- fattr->valid = 0;
- status = rpc_call_sync(NFS_CLIENT(inode), &msg, flags);
--
-- if (status >= 0)
-+ if (status >= 0) {
- nfs_refresh_inode(inode, fattr);
-+ /* NFSv2 reads don't return an eof flag, so we make
-+ * up a value here. XDR has already set eof to 0. */
-+ if (status < rdata->args.count)
-+ rdata->res.eof = 1;
-+ }
- dprintk("NFS reply read: %d\n", status);
-- *eofp = res.eof;
- return status;
- }
-
- static int
--nfs_proc_write(struct inode *inode, struct rpc_cred *cred,
-- struct nfs_fattr *fattr, int how,
-- unsigned int base, unsigned int count,
-- struct page *page, struct nfs_writeverf *verf)
-+nfs_proc_write(struct nfs_write_data *wdata)
- {
-- u64 offset = page_offset(page) + base;
-- struct nfs_writeargs arg = {
-- .fh = NFS_FH(inode),
-- .offset = offset,
-- .count = count,
-- .stable = NFS_FILE_SYNC,
-- .pgbase = base,
-- .pages = &page
-- };
-- struct nfs_writeres res = {
-- .fattr = fattr,
-- .verf = verf,
-- .count = count
-- };
-+ int flags = wdata->flags;
-+ struct inode * inode = wdata->inode;
-+ struct nfs_fattr * fattr = wdata->res.fattr;
- struct rpc_message msg = {
- .rpc_proc = &nfs_procedures[NFSPROC_WRITE],
-- .rpc_argp = &arg,
-- .rpc_resp = &res,
-- .rpc_cred = cred
-+ .rpc_argp = &wdata->args,
-+ .rpc_resp = &wdata->res,
-+ .rpc_cred = wdata->cred
- };
-- int status, flags = 0;
-+ int status;
-
-- dprintk("NFS call write %d @ %Ld\n", count, (long long)offset);
-+ dprintk("NFS call write %d @ %Ld\n", wdata->args.count,
-+ (long long) wdata->args.offset);
- fattr->valid = 0;
-- if (how & NFS_RW_SWAP)
-- flags |= NFS_RPC_SWAPFLAGS;
- status = rpc_call_sync(NFS_CLIENT(inode), &msg, flags);
--
-- if (status >= 0)
-+ if (status >= 0) {
- nfs_write_refresh_inode(inode, fattr);
--
-+ /* NFSv2 writes don't return a byte count or write
-+ * verifier, so we make up values here. Note that
-+ * v2 writes are always NFS_FILE_SYNC writes. */
-+ wdata->res.count = wdata->args.count;
-+ wdata->verf.committed = NFS_FILE_SYNC;
-+ }
- dprintk("NFS reply write: %d\n", status);
-- verf->committed = NFS_FILE_SYNC; /* NFSv2 always syncs data */
-- return status < 0? status : count;
-+ return status < 0? status : wdata->res.count;
- }
-
- static int
---- linux-2.6.0-test1/fs/nfs/read.c 2003-06-26 22:07:25.000000000 -0700
-+++ 25/fs/nfs/read.c 2003-07-19 17:07:06.000000000 -0700
-@@ -69,19 +69,28 @@ void nfs_readdata_release(struct rpc_tas
- static int
- nfs_readpage_sync(struct file *file, struct inode *inode, struct page *page)
- {
-- struct rpc_cred *cred = NULL;
-- struct nfs_fattr fattr;
-- unsigned int offset = 0;
- unsigned int rsize = NFS_SERVER(inode)->rsize;
- unsigned int count = PAGE_CACHE_SIZE;
- int result;
-- int flags = IS_SWAPFILE(inode)? NFS_RPC_SWAPFLAGS : 0;
-- int eof;
-+ struct nfs_read_data rdata = {
-+ .flags = (IS_SWAPFILE(inode)? NFS_RPC_SWAPFLAGS : 0),
-+ .cred = NULL,
-+ .inode = inode,
-+ .args = {
-+ .fh = NFS_FH(inode),
-+ .pages = &page,
-+ .pgbase = 0UL,
-+ .count = rsize,
-+ },
-+ .res = {
-+ .fattr = &rdata.fattr,
-+ }
-+ };
-
- dprintk("NFS: nfs_readpage_sync(%p)\n", page);
-
- if (file)
-- cred = nfs_file_cred(file);
-+ rdata.cred = nfs_file_cred(file);
-
- /*
- * This works now because the socket layer never tries to DMA
-@@ -89,17 +98,19 @@ nfs_readpage_sync(struct file *file, str
- */
- do {
- if (count < rsize)
-- rsize = count;
-+ rdata.args.count = count;
-+ rdata.res.count = rdata.args.count;
-+ rdata.args.offset = page_offset(page) + rdata.args.pgbase;
-
- dprintk("NFS: nfs_proc_read(%s, (%s/%Ld), %Lu, %u)\n",
- NFS_SERVER(inode)->hostname,
- inode->i_sb->s_id,
- (long long)NFS_FILEID(inode),
-- (unsigned long long)offset, rsize);
-+ (unsigned long long)rdata.args.pgbase,
-+ rdata.args.count);
-
- lock_kernel();
-- result = NFS_PROTO(inode)->read(inode, cred, &fattr, flags,
-- offset, rsize, page, &eof);
-+ result = NFS_PROTO(inode)->read(&rdata);
- unlock_kernel();
-
- /*
-@@ -111,14 +122,15 @@ nfs_readpage_sync(struct file *file, str
- result = -EINVAL;
- goto io_error;
- }
-- count -= result;
-- offset += result;
-- if (result < rsize) /* NFSv2ism */
-+ count -= result;
-+ rdata.args.pgbase += result;
-+
-+ if (rdata.res.eof)
- break;
- } while (count);
-
- if (count)
-- memclear_highpage_flush(page, offset, count);
-+ memclear_highpage_flush(page, rdata.args.pgbase, count);
- SetPageUptodate(page);
- if (PageError(page))
- ClearPageError(page);
---- linux-2.6.0-test1/fs/nfs/write.c 2003-07-13 21:44:35.000000000 -0700
-+++ 25/fs/nfs/write.c 2003-07-19 17:07:07.000000000 -0700
-@@ -132,66 +132,73 @@ static int
- nfs_writepage_sync(struct file *file, struct inode *inode, struct page *page,
- unsigned int offset, unsigned int count)
- {
-- struct rpc_cred *cred = NULL;
-- loff_t base;
- unsigned int wsize = NFS_SERVER(inode)->wsize;
-- int result, refresh = 0, written = 0, flags;
-- u8 *buffer;
-- struct nfs_fattr fattr;
-- struct nfs_writeverf verf;
--
-+ int result, written = 0;
-+ int swapfile = IS_SWAPFILE(inode);
-+ struct nfs_write_data wdata = {
-+ .flags = swapfile ? NFS_RPC_SWAPFLAGS : 0,
-+ .cred = NULL,
-+ .inode = inode,
-+ .args = {
-+ .fh = NFS_FH(inode),
-+ .pages = &page,
-+ .stable = NFS_FILE_SYNC,
-+ .pgbase = offset,
-+ .count = wsize,
-+ },
-+ .res = {
-+ .fattr = &wdata.fattr,
-+ .verf = &wdata.verf,
-+ },
-+ };
-
- if (file)
-- cred = get_rpccred(nfs_file_cred(file));
-- if (!cred)
-- cred = get_rpccred(NFS_I(inode)->mm_cred);
-+ wdata.cred = get_rpccred(nfs_file_cred(file));
-+ if (!wdata.cred)
-+ wdata.cred = get_rpccred(NFS_I(inode)->mm_cred);
-
- dprintk("NFS: nfs_writepage_sync(%s/%Ld %d@%Ld)\n",
- inode->i_sb->s_id,
- (long long)NFS_FILEID(inode),
- count, (long long)(page_offset(page) + offset));
-
-- base = page_offset(page) + offset;
--
-- flags = ((IS_SWAPFILE(inode)) ? NFS_RW_SWAP : 0) | NFS_RW_SYNC;
--
- do {
-- if (count < wsize && !IS_SWAPFILE(inode))
-- wsize = count;
-+ if (count < wsize && !swapfile)
-+ wdata.args.count = count;
-+ wdata.args.offset = page_offset(page) + wdata.args.pgbase;
-
-- result = NFS_PROTO(inode)->write(inode, cred, &fattr, flags,
-- offset, wsize, page, &verf);
-+ result = NFS_PROTO(inode)->write(&wdata);
-
- if (result < 0) {
- /* Must mark the page invalid after I/O error */
- ClearPageUptodate(page);
- goto io_error;
- }
-- if (result != wsize)
-- printk("NFS: short write, wsize=%u, result=%d\n",
-- wsize, result);
-- refresh = 1;
-- buffer += wsize;
-- base += wsize;
-- offset += wsize;
-- written += wsize;
-- count -= wsize;
-+ if (result < wdata.args.count)
-+ printk(KERN_WARNING "NFS: short write, count=%u, result=%d\n",
-+ wdata.args.count, result);
-+
-+ wdata.args.offset += result;
-+ wdata.args.pgbase += result;
-+ written += result;
-+ count -= result;
-+
- /*
- * If we've extended the file, update the inode
- * now so we don't invalidate the cache.
- */
-- if (base > i_size_read(inode))
-- i_size_write(inode, base);
-+ if (wdata.args.offset > i_size_read(inode))
-+ i_size_write(inode, wdata.args.offset);
- } while (count);
-
- if (PageError(page))
- ClearPageError(page);
-
- io_error:
-- if (cred)
-- put_rpccred(cred);
-+ if (wdata.cred)
-+ put_rpccred(wdata.cred);
-
-- return written? written : result;
-+ return written ? written : result;
- }
-
- static int
---- linux-2.6.0-test1/fs/partitions/check.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/fs/partitions/check.c 2003-07-19 17:03:50.000000000 -0700
-@@ -16,7 +16,6 @@
- #include <linux/init.h>
- #include <linux/module.h>
- #include <linux/fs.h>
--#include <linux/blk.h>
- #include <linux/kmod.h>
- #include <linux/ctype.h>
- #include <linux/devfs_fs_kernel.h>
-@@ -348,6 +347,9 @@ void register_disk(struct gendisk *disk)
- return;
- }
-
-+ /* always add handle for the whole disk */
-+ devfs_add_partitioned(disk);
-+
- /* No such device (e.g., media were just removed) */
- if (!get_capacity(disk))
- return;
-@@ -356,7 +358,6 @@ void register_disk(struct gendisk *disk)
- if (blkdev_get(bdev, FMODE_READ, 0, BDEV_RAW) < 0)
- return;
- state = check_partition(disk, bdev);
-- devfs_add_partitioned(disk);
- if (state) {
- for (j = 1; j < state->limit; j++) {
- sector_t size = state->parts[j].size;
---- linux-2.6.0-test1/fs/partitions/efi.h 2003-06-14 12:18:28.000000000 -0700
-+++ 25/fs/partitions/efi.h 2003-07-19 17:03:50.000000000 -0700
-@@ -32,7 +32,6 @@
- #include <linux/kernel.h>
- #include <linux/major.h>
- #include <linux/string.h>
--#include <linux/blk.h>
- #include <linux/efi.h>
-
- #define MSDOS_MBR_SIGNATURE 0xaa55
---- linux-2.6.0-test1/fs/partitions/nec98.c 2003-06-14 12:17:57.000000000 -0700
-+++ 25/fs/partitions/nec98.c 2003-07-19 17:03:50.000000000 -0700
-@@ -8,7 +8,6 @@
- #include <linux/fs.h>
- #include <linux/genhd.h>
- #include <linux/kernel.h>
--#include <linux/blk.h>
- #include <linux/hdreg.h>
-
- #include "check.h"
---- linux-2.6.0-test1/fs/proc/array.c 2003-06-26 22:07:25.000000000 -0700
-+++ 25/fs/proc/array.c 2003-07-19 17:06:42.000000000 -0700
-@@ -300,7 +300,7 @@ int proc_pid_stat(struct task_struct *ta
- task_lock(task);
- mm = task->mm;
- if(mm)
-- atomic_inc(&mm->mm_users);
-+ mm = mmgrab(mm);
- if (task->tty) {
- tty_pgrp = task->tty->pgrp;
- tty_nr = task->tty->device;
---- linux-2.6.0-test1/fs/proc/proc_misc.c 2003-07-10 18:50:32.000000000 -0700
-+++ 25/fs/proc/proc_misc.c 2003-07-19 17:06:40.000000000 -0700
-@@ -274,6 +274,18 @@ static struct file_operations proc_cpuin
- .release = seq_release,
- };
-
-+extern struct seq_operations rcu_op;
-+static int rcu_open(struct inode *inode, struct file *file)
-+{
-+ return seq_open(file, &rcu_op);
-+}
-+static struct file_operations proc_rcu_operations = {
-+ .open = rcu_open,
-+ .read = seq_read,
-+ .llseek = seq_lseek,
-+ .release = seq_release,
-+};
-+
- extern struct seq_operations vmstat_op;
- static int vmstat_open(struct inode *inode, struct file *file)
- {
-@@ -388,10 +400,8 @@ static int kstat_read_proc(char *page, c
- system += kstat_cpu(i).cpustat.system;
- idle += kstat_cpu(i).cpustat.idle;
- iowait += kstat_cpu(i).cpustat.iowait;
--#if !defined(CONFIG_ARCH_S390)
- for (j = 0 ; j < NR_IRQS ; j++)
- sum += kstat_cpu(i).irqs[j];
--#endif
- }
-
- len = sprintf(page, "cpu %u %u %u %u %u\n",
-@@ -412,7 +422,7 @@ static int kstat_read_proc(char *page, c
- }
- len += sprintf(page + len, "intr %u", sum);
-
--#if !defined(CONFIG_ARCH_S390) && !defined(CONFIG_PPC64) && !defined(CONFIG_ALPHA)
-+#if !defined(CONFIG_PPC64) && !defined(CONFIG_ALPHA)
- for (i = 0 ; i < NR_IRQS ; i++)
- len += sprintf(page + len, " %u", kstat_irqs(i));
- #endif
-@@ -440,7 +450,6 @@ static int devices_read_proc(char *page,
- return proc_calc_metrics(page, start, off, count, eof, len);
- }
-
--#if !defined(CONFIG_ARCH_S390)
- extern int show_interrupts(struct seq_file *p, void *v);
- static int interrupts_open(struct inode *inode, struct file *file)
- {
-@@ -466,7 +475,6 @@ static struct file_operations proc_inter
- .llseek = seq_lseek,
- .release = single_release,
- };
--#endif
-
- static int filesystems_read_proc(char *page, char **start, off_t off,
- int count, int *eof, void *data)
-@@ -536,7 +544,8 @@ static ssize_t read_profile(struct file
- buf++; p++; count--; read++;
- }
- pnt = (char *)prof_buffer + p - sizeof(unsigned int);
-- copy_to_user(buf,(void *)pnt,count);
-+ if (copy_to_user(buf,(void *)pnt,count))
-+ return -EFAULT;
- read += count;
- *ppos += read;
- return read;
-@@ -606,6 +615,36 @@ static void create_seq_entry(char *name,
- entry->proc_fops = f;
- }
-
-+#ifdef CONFIG_LOCKMETER
-+extern ssize_t get_lockmeter_info(char *, size_t, loff_t *);
-+extern ssize_t put_lockmeter_info(const char *, size_t);
-+extern int get_lockmeter_info_size(void);
-+
-+/*
-+ * This function accesses lock metering information.
-+ */
-+static ssize_t read_lockmeter(struct file *file, char *buf,
-+ size_t count, loff_t *ppos)
-+{
-+ return get_lockmeter_info(buf, count, ppos);
-+}
-+
-+/*
-+ * Writing to /proc/lockmeter resets the counters
-+ */
-+static ssize_t write_lockmeter(struct file * file, const char * buf,
-+ size_t count, loff_t *ppos)
-+{
-+ return put_lockmeter_info(buf, count);
-+}
-+
-+static struct file_operations proc_lockmeter_operations = {
-+ NULL, /* lseek */
-+ read: read_lockmeter,
-+ write: write_lockmeter,
-+};
-+#endif /* CONFIG_LOCKMETER */
-+
- void __init proc_misc_init(void)
- {
- struct proc_dir_entry *entry;
-@@ -644,10 +683,9 @@ void __init proc_misc_init(void)
- if (entry)
- entry->proc_fops = &proc_kmsg_operations;
- create_seq_entry("cpuinfo", 0, &proc_cpuinfo_operations);
-+ create_seq_entry("rcu", 0, &proc_rcu_operations);
- create_seq_entry("partitions", 0, &proc_partitions_operations);
--#if !defined(CONFIG_ARCH_S390)
- create_seq_entry("interrupts", 0, &proc_interrupts_operations);
--#endif
- create_seq_entry("slabinfo",S_IWUSR|S_IRUGO,&proc_slabinfo_operations);
- create_seq_entry("buddyinfo",S_IRUGO, &fragmentation_file_operations);
- create_seq_entry("vmstat",S_IRUGO, &proc_vmstat_file_operations);
-@@ -673,6 +711,13 @@ void __init proc_misc_init(void)
- if (entry)
- entry->proc_fops = &proc_sysrq_trigger_operations;
- #endif
-+#ifdef CONFIG_LOCKMETER
-+ entry = create_proc_entry("lockmeter", S_IWUSR | S_IRUGO, NULL);
-+ if (entry) {
-+ entry->proc_fops = &proc_lockmeter_operations;
-+ entry->size = get_lockmeter_info_size();
-+ }
-+#endif
- #ifdef CONFIG_PPC32
- {
- extern struct file_operations ppc_htab_operations;
---- linux-2.6.0-test1/fs/stat.c 2003-07-13 21:44:35.000000000 -0700
-+++ 25/fs/stat.c 2003-07-19 17:06:16.000000000 -0700
-@@ -123,6 +123,7 @@ static int cp_old_stat(struct kstat *sta
- SET_OLDSTAT_UID(tmp, stat->uid);
- SET_OLDSTAT_GID(tmp, stat->gid);
- tmp.st_rdev = stat->rdev;
-+ tmp.__pad_16bit = 0; /* don't leak kernel stack data! */
- #if BITS_PER_LONG == 32
- if (stat->size > MAX_NON_LFS)
- return -EOVERFLOW;
---- linux-2.6.0-test1/fs/umsdos/ioctl.c 2003-06-14 12:17:57.000000000 -0700
-+++ 25/fs/umsdos/ioctl.c 2003-07-19 17:03:50.000000000 -0700
-@@ -4,6 +4,10 @@
- * Written 1993 by Jacques Gelinas
- *
- * Extended MS-DOS ioctl directory handling functions
-+ *
-+ * Changes:
-+ * 11/07/2003 Daniele Bellucci <bellucda@tiscali.it>
-+ * - audit copy_to_user/put_user in umsdos_ioctl_fill.
- */
-
- #include <asm/uaccess.h>
-@@ -36,11 +40,12 @@ static int umsdos_ioctl_fill (
- struct UMSDOS_DIR_ONCE *d = (struct UMSDOS_DIR_ONCE *) buf;
-
- if (d->count == 0) {
-- copy_to_user (d->ent->d_name, name, name_len);
-- put_user ('\0', d->ent->d_name + name_len);
-- put_user (name_len, &d->ent->d_reclen);
-- put_user (ino, &d->ent->d_ino);
-- put_user (offset, &d->ent->d_off);
-+ if (copy_to_user (d->ent->d_name, name, name_len) ||
-+ put_user ('\0', d->ent->d_name + name_len) ||
-+ put_user (name_len, &d->ent->d_reclen) ||
-+ put_user (ino, &d->ent->d_ino) ||
-+ put_user (offset, &d->ent->d_off))
-+ return -EFAULT;
- d->count = 1;
- ret = 0;
- }
---- linux-2.6.0-test1/fs/vfat/namei.c 2003-07-10 18:50:32.000000000 -0700
-+++ 25/fs/vfat/namei.c 2003-07-19 17:03:50.000000000 -0700
-@@ -375,7 +375,7 @@ shortname_info_to_lcase(struct shortname
- }
-
- static inline int to_shortname_char(struct nls_table *nls,
-- char *buf, int buf_size, wchar_t *src,
-+ unsigned char *buf, int buf_size, wchar_t *src,
- struct shortname_info *info)
- {
- int len;
---- linux-2.6.0-test1/include/acpi/acconfig.h 2003-06-22 12:04:44.000000000 -0700
-+++ 25/include/acpi/acconfig.h 2003-07-19 17:03:50.000000000 -0700
-@@ -64,7 +64,7 @@
-
- /* Version string */
-
--#define ACPI_CA_VERSION 0x20030619
-+#define ACPI_CA_VERSION 0x20030714
-
- /* Maximum objects in the various object caches */
-
---- linux-2.6.0-test1/include/acpi/platform/acenv.h 2003-06-14 12:18:03.000000000 -0700
-+++ 25/include/acpi/platform/acenv.h 2003-07-19 17:03:50.000000000 -0700
-@@ -134,6 +134,9 @@
- #elif defined(__FreeBSD__)
- #include "acfreebsd.h"
-
-+#elif defined(__NetBSD__)
-+#include "acnetbsd.h"
-+
- #elif defined(MODESTO)
- #include "acmodesto.h"
-
-@@ -187,13 +190,14 @@
- #define DEBUGGER_SINGLE_THREADED 0
- #define DEBUGGER_MULTI_THREADED 1
-
-+#ifndef DEBUGGER_THREADING
- #ifdef ACPI_APPLICATION
- #define DEBUGGER_THREADING DEBUGGER_SINGLE_THREADED
-
- #else
- #define DEBUGGER_THREADING DEBUGGER_MULTI_THREADED
- #endif
--
-+#endif /* !DEBUGGER_THREADING */
-
- /******************************************************************************
- *
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-alpha/lockmeter.h 2003-07-19 17:06:40.000000000 -0700
-@@ -0,0 +1,90 @@
-+/*
-+ * Written by John Hawkes (hawkes@sgi.com)
-+ * Based on klstat.h by Jack Steiner (steiner@sgi.com)
-+ *
-+ * Modified by Peter Rival (frival@zk3.dec.com)
-+ */
-+
-+#ifndef _ALPHA_LOCKMETER_H
-+#define _ALPHA_LOCKMETER_H
-+
-+#include <asm/hwrpb.h>
-+#define CPU_CYCLE_FREQUENCY hwrpb->cycle_freq
-+
-+#define get_cycles64() get_cycles()
-+
-+#define THIS_CPU_NUMBER smp_processor_id()
-+
-+#include <linux/version.h>
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,0)
-+#define local_irq_save(x) \
-+ __save_and_cli(x)
-+#define local_irq_restore(x) \
-+ __restore_flags(x)
-+#endif /* Linux version 2.2.x */
-+
-+#define SPINLOCK_MAGIC_INIT /**/
-+
-+/*
-+ * Macros to cache and retrieve an index value inside of a lock
-+ * these macros assume that there are less than 65536 simultaneous
-+ * (read mode) holders of a rwlock.
-+ * We also assume that the hash table has less than 32767 entries.
-+ * the high order bit is used for write locking a rw_lock
-+ * Note: although these defines and macros are the same as what is being used
-+ * in include/asm-i386/lockmeter.h, they are present here to easily
-+ * allow an alternate Alpha implementation.
-+ */
-+/*
-+ * instrumented spinlock structure -- never used to allocate storage
-+ * only used in macros below to overlay a spinlock_t
-+ */
-+typedef struct inst_spinlock_s {
-+ /* remember, Alpha is little endian */
-+ unsigned short lock;
-+ unsigned short index;
-+} inst_spinlock_t;
-+#define PUT_INDEX(lock_ptr,indexv) ((inst_spinlock_t *)(lock_ptr))->index = indexv
-+#define GET_INDEX(lock_ptr) ((inst_spinlock_t *)(lock_ptr))->index
-+
-+/*
-+ * macros to cache and retrieve an index value in a read/write lock
-+ * as well as the cpu where a reader busy period started
-+ * we use the 2nd word (the debug word) for this, so require the
-+ * debug word to be present
-+ */
-+/*
-+ * instrumented rwlock structure -- never used to allocate storage
-+ * only used in macros below to overlay a rwlock_t
-+ */
-+typedef struct inst_rwlock_s {
-+ volatile int lock;
-+ unsigned short index;
-+ unsigned short cpu;
-+} inst_rwlock_t;
-+#define PUT_RWINDEX(rwlock_ptr,indexv) ((inst_rwlock_t *)(rwlock_ptr))->index = indexv
-+#define GET_RWINDEX(rwlock_ptr) ((inst_rwlock_t *)(rwlock_ptr))->index
-+#define PUT_RW_CPU(rwlock_ptr,cpuv) ((inst_rwlock_t *)(rwlock_ptr))->cpu = cpuv
-+#define GET_RW_CPU(rwlock_ptr) ((inst_rwlock_t *)(rwlock_ptr))->cpu
-+
-+/*
-+ * return true if rwlock is write locked
-+ * (note that other lock attempts can cause the lock value to be negative)
-+ */
-+#define RWLOCK_IS_WRITE_LOCKED(rwlock_ptr) (((inst_rwlock_t *)rwlock_ptr)->lock & 1)
-+#define IABS(x) ((x) > 0 ? (x) : -(x))
-+
-+#define RWLOCK_READERS(rwlock_ptr) rwlock_readers(rwlock_ptr)
-+extern inline int rwlock_readers(rwlock_t *rwlock_ptr)
-+{
-+ int tmp = (int) ((inst_rwlock_t *)rwlock_ptr)->lock;
-+ /* readers subtract 2, so we have to: */
-+ /* - andnot off a possible writer (bit 0) */
-+ /* - get the absolute value */
-+ /* - divide by 2 (right shift by one) */
-+ /* to find the number of readers */
-+ if (tmp == 0) return(0);
-+ else return(IABS(tmp & ~1)>>1);
-+}
-+
-+#endif /* _ALPHA_LOCKMETER_H */
---- linux-2.6.0-test1/include/asm-alpha/pgalloc.h 2003-06-14 12:17:56.000000000 -0700
-+++ 25/include/asm-alpha/pgalloc.h 2003-07-19 17:07:16.000000000 -0700
-@@ -24,9 +24,9 @@ pmd_populate_kernel(struct mm_struct *mm
- }
-
- static inline void
--pgd_populate(struct mm_struct *mm, pgd_t *pgd, pmd_t *pmd)
-+pgd_populate(struct mm_struct *mm, pgd_t *pgd, struct page *pmd)
- {
-- pgd_set(pgd, pmd);
-+ pgd_set(pgd, page_address(pmd));
- }
-
- extern pgd_t *pgd_alloc(struct mm_struct *mm);
-@@ -37,19 +37,29 @@ pgd_free(pgd_t *pgd)
- free_page((unsigned long)pgd);
- }
-
--static inline pmd_t *
-+static inline struct page *
- pmd_alloc_one(struct mm_struct *mm, unsigned long address)
- {
-- pmd_t *ret = (pmd_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT);
-- if (ret)
-- clear_page(ret);
-- return ret;
-+ struct page *page = alloc_page(GFP_KERNEL|__GFP_REPEAT);
-+ if (page)
-+ clear_highpage(page);
-+ return page;
-+}
-+
-+static inline pmd_t *
-+pmd_alloc_one_kernel(struct mm_struct *mm, unsigned long addr)
-+{
-+ struct page *page = pmd_alloc_one(mm, addr);
-+ if (page)
-+ return page_address(page);
-+ else
-+ return NULL;
- }
-
- static inline void
--pmd_free(pmd_t *pmd)
-+pmd_free(struct page *pmd)
- {
-- free_page((unsigned long)pmd);
-+ __free_page(pmd);
- }
-
- extern pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long addr);
---- linux-2.6.0-test1/include/asm-alpha/pgtable.h 2003-06-14 12:18:06.000000000 -0700
-+++ 25/include/asm-alpha/pgtable.h 2003-07-19 17:07:16.000000000 -0700
-@@ -229,9 +229,11 @@ pmd_page_kernel(pmd_t pmd)
- #define pmd_page(pmd) (mem_map + ((pmd_val(pmd) & _PFN_MASK) >> 32))
- #endif
-
--extern inline unsigned long pgd_page(pgd_t pgd)
-+extern inline unsigned long __pgd_page(pgd_t pgd)
- { return PAGE_OFFSET + ((pgd_val(pgd) & _PFN_MASK) >> (32-PAGE_SHIFT)); }
-
-+#define pgd_page(pgd) virt_to_page(__pgd_page(pgd))
-+
- extern inline int pte_none(pte_t pte) { return !pte_val(pte); }
- extern inline int pte_present(pte_t pte) { return pte_val(pte) & _PAGE_VALID; }
- extern inline void pte_clear(pte_t *ptep) { pte_val(*ptep) = 0; }
-@@ -280,9 +282,15 @@ extern inline pte_t pte_mkyoung(pte_t pt
- /* Find an entry in the second-level page table.. */
- extern inline pmd_t * pmd_offset(pgd_t * dir, unsigned long address)
- {
-- return (pmd_t *) pgd_page(*dir) + ((address >> PMD_SHIFT) & (PTRS_PER_PAGE - 1));
-+ return (pmd_t *)__pgd_page(*dir) + ((address >> PMD_SHIFT) & (PTRS_PER_PAGE - 1));
- }
-
-+#define pmd_offset_kernel(pgd, addr) pmd_offset(pgd, addr)
-+#define pmd_offset_map(pgd, addr) pmd_offset(pgd, addr)
-+#define pmd_offset_map_nested(pgd, addr) pmd_offset(pgd, addr)
-+#define pmd_unmap(pmd) do { } while (0)
-+#define pmd_unmap_nested(pmd) do { } while (0)
-+
- /* Find an entry in the third-level page table.. */
- extern inline pte_t * pte_offset_kernel(pmd_t * dir, unsigned long address)
- {
---- linux-2.6.0-test1/include/asm-alpha/posix_types.h 2003-06-14 12:18:25.000000000 -0700
-+++ 25/include/asm-alpha/posix_types.h 2003-07-19 17:06:39.000000000 -0700
-@@ -7,7 +7,9 @@
- * assume GCC is being used.
- */
-
--typedef unsigned int __kernel_dev_t;
-+#ifdef __GNUC__
-+typedef unsigned long long __kernel_dev_t;
-+#endif
- typedef unsigned int __kernel_ino_t;
- typedef unsigned int __kernel_mode_t;
- typedef unsigned int __kernel_nlink_t;
---- linux-2.6.0-test1/include/asm-alpha/smp.h 2003-06-22 12:04:45.000000000 -0700
-+++ 25/include/asm-alpha/smp.h 2003-07-19 17:04:07.000000000 -0700
-@@ -3,6 +3,7 @@
-
- #include <linux/config.h>
- #include <linux/threads.h>
-+#include <linux/cpumask.h>
- #include <linux/bitops.h>
- #include <asm/pal.h>
-
-@@ -44,27 +45,12 @@ extern struct cpuinfo_alpha cpu_data[NR_
- #define hard_smp_processor_id() __hard_smp_processor_id()
- #define smp_processor_id() (current_thread_info()->cpu)
-
--extern unsigned long cpu_present_mask;
--extern volatile unsigned long cpu_online_map;
-+extern cpumask_t cpu_present_mask;
-+extern cpumask_t long cpu_online_map;
- extern int smp_num_cpus;
-
--#define cpu_possible(cpu) (cpu_present_mask & (1UL << (cpu)))
--#define cpu_online(cpu) (cpu_online_map & (1UL << (cpu)))
--
--static inline int
--num_online_cpus(void)
--{
-- return hweight64(cpu_online_map);
--}
--
--extern inline int
--any_online_cpu(unsigned int mask)
--{
-- if (mask & cpu_online_map)
-- return __ffs(mask & cpu_online_map);
--
-- return -1;
--}
-+#define cpu_possible(cpu) cpu_isset(cpu, cpu_present_mask)
-+#define cpu_online(cpu) cpu_isset(cpu, cpu_online_map)
-
- extern int smp_call_function_on_cpu(void (*func) (void *info), void *info,int retry, int wait, unsigned long cpu);
-
---- linux-2.6.0-test1/include/asm-alpha/spinlock.h 2003-06-26 22:07:25.000000000 -0700
-+++ 25/include/asm-alpha/spinlock.h 2003-07-19 17:06:40.000000000 -0700
-@@ -6,6 +6,10 @@
- #include <linux/kernel.h>
- #include <asm/current.h>
-
-+#ifdef CONFIG_LOCKMETER
-+#undef DEBUG_SPINLOCK
-+#undef DEBUG_RWLOCK
-+#endif
-
- /*
- * Simple spin lock operations. There are two variants, one clears IRQ's
-@@ -95,9 +99,18 @@ static inline int _raw_spin_trylock(spin
-
- typedef struct {
- volatile int write_lock:1, read_counter:31;
-+#ifdef CONFIG_LOCKMETER
-+ /* required for LOCKMETER since all bits in lock are used */
-+ /* need this storage for CPU and lock INDEX ............. */
-+ unsigned magic;
-+#endif
- } /*__attribute__((aligned(32)))*/ rwlock_t;
-
-+#ifdef CONFIG_LOCKMETER
-+#define RW_LOCK_UNLOCKED (rwlock_t) { 0, 0, 0 }
-+#else
- #define RW_LOCK_UNLOCKED (rwlock_t) { 0, 0 }
-+#endif
-
- #define rwlock_init(x) do { *(x) = RW_LOCK_UNLOCKED; } while(0)
- #define rwlock_is_locked(x) (*(volatile int *)(x) != 0)
-@@ -169,4 +182,41 @@ static inline void _raw_read_unlock(rwlo
- : "m" (*lock) : "memory");
- }
-
-+#ifdef CONFIG_LOCKMETER
-+static inline int _raw_write_trylock(rwlock_t *lock)
-+{
-+ long temp,result;
-+
-+ __asm__ __volatile__(
-+ " ldl_l %1,%0\n"
-+ " mov $31,%2\n"
-+ " bne %1,1f\n"
-+ " or $31,1,%2\n"
-+ " stl_c %2,%0\n"
-+ "1: mb\n"
-+ : "=m" (*(volatile int *)lock), "=&r" (temp), "=&r" (result)
-+ : "m" (*(volatile int *)lock)
-+ );
-+
-+ return (result);
-+}
-+
-+static inline int _raw_read_trylock(rwlock_t *lock)
-+{
-+ unsigned long temp,result;
-+
-+ __asm__ __volatile__(
-+ " ldl_l %1,%0\n"
-+ " mov $31,%2\n"
-+ " blbs %1,1f\n"
-+ " subl %1,2,%2\n"
-+ " stl_c %2,%0\n"
-+ "1: mb\n"
-+ : "=m" (*(volatile int *)lock), "=&r" (temp), "=&r" (result)
-+ : "m" (*(volatile int *)lock)
-+ );
-+ return (result);
-+}
-+#endif /* CONFIG_LOCKMETER */
-+
- #endif /* _ALPHA_SPINLOCK_H */
---- linux-2.6.0-test1/include/asm-arm26/pgalloc.h 2003-07-10 18:50:32.000000000 -0700
-+++ 25/include/asm-arm26/pgalloc.h 2003-07-19 17:07:16.000000000 -0700
-@@ -55,7 +55,8 @@ pmd_populate_kernel(struct mm_struct *mm
- * is thrown away. It just cant be zero. -IM
- */
-
--#define pmd_alloc_one(mm,addr) ({ BUG(); ((pmd_t *)2); })
-+#define pmd_alloc_one(mm,addr) ((struct page *)2); BUG()
-+#define pmd_alloc_one_kernel(mm,addr) ((pmd_t *)2); BUG()
- #define pmd_free(pmd) do { } while (0)
- #define pgd_populate(mm,pmd,pte) BUG()
-
---- linux-2.6.0-test1/include/asm-arm26/pgtable.h 2003-07-10 18:50:32.000000000 -0700
-+++ 25/include/asm-arm26/pgtable.h 2003-07-19 17:07:16.000000000 -0700
-@@ -99,7 +99,7 @@ extern struct page *empty_zero_page;
- * on arm26 we have no 2nd level page table. we simulate this by removing the
- * PMD.
- *
-- * pgd_none is 0 to prevernt pmd_alloc() calling __pmd_alloc(). This causes it
-+ * pgd_none is 0 to prevernt pmd_alloc_map() calling __pmd_alloc(). This causes it
- * to return pmd_offset(pgd,addr) which is a pointer to the pgd (IOW, a no-op).
- *
- * however, to work this way, whilst we are allocating 32 pgds, containing 32
-@@ -134,7 +134,7 @@ extern struct page *empty_zero_page;
-
- #define _PMD_PRESENT (0x01)
-
--/* These definitions allow us to optimise out stuff like pmd_alloc() */
-+/* These definitions allow us to optimise out stuff like pmd_alloc_map() */
- #define pgd_none(pgd) (0)
- #define pgd_bad(pgd) (0)
- #define pgd_present(pgd) (1)
-@@ -189,6 +189,12 @@ extern struct page *empty_zero_page;
- #define pte_unmap(pte) do { } while (0)
- #define pte_unmap_nested(pte) do { } while (0)
-
-+#define pmd_offset_kernel(pgd, addr) pmd_offset(pgd, addr)
-+#define pmd_offset_map(pgd, addr) pmd_offset(pgd, addr)
-+#define pmd_offset_map_nested(pgd, addr) pmd_offset(pgd, addr)
-+#define pmd_unmap(pgd, addr) do { } while (0)
-+#define pmd_unmap_nested(pgd, addr) do { } while (0)
-+
-
- #define _PAGE_PRESENT 0x01
- #define _PAGE_READONLY 0x02
---- linux-2.6.0-test1/include/asm-arm26/posix_types.h 2003-06-14 12:18:24.000000000 -0700
-+++ 25/include/asm-arm26/posix_types.h 2003-07-19 17:06:39.000000000 -0700
-@@ -19,7 +19,9 @@
- * assume GCC is being used.
- */
-
--typedef unsigned short __kernel_dev_t;
-+#ifdef __GNUC__
-+typedef unsigned long long __kernel_dev_t;
-+#endif
- typedef unsigned long __kernel_ino_t;
- typedef unsigned short __kernel_mode_t;
- typedef unsigned short __kernel_nlink_t;
---- linux-2.6.0-test1/include/asm-arm/pgalloc.h 2003-06-14 12:18:34.000000000 -0700
-+++ 25/include/asm-arm/pgalloc.h 2003-07-19 17:07:16.000000000 -0700
-@@ -16,7 +16,8 @@
- /*
- * Since we have only two-level page tables, these are trivial
- */
--#define pmd_alloc_one(mm,addr) ({ BUG(); ((pmd_t *)2); })
-+#define pmd_alloc_one(mm,addr) ({ BUG(); ((struct page *)2); })
-+#define pmd_alloc_one_kernel(mm,addr) ({ BUG(); ((pmd_t *)2); })
- #define pmd_free(pmd) do { } while (0)
- #define pgd_populate(mm,pmd,pte) BUG()
-
---- linux-2.6.0-test1/include/asm-arm/pgtable.h 2003-06-14 12:18:04.000000000 -0700
-+++ 25/include/asm-arm/pgtable.h 2003-07-19 17:07:16.000000000 -0700
-@@ -125,6 +125,11 @@ extern struct page *empty_zero_page;
-
- /* Find an entry in the second-level page table.. */
- #define pmd_offset(dir, addr) ((pmd_t *)(dir))
-+#define pmd_offset_kernel(pgd, addr) pmd_offset(pgd, addr)
-+#define pmd_offset_map(pgd, addr) pmd_offset(pgd, addr)
-+#define pmd_offset_map_nested(pgd, addr) pmd_offset(pgd, addr)
-+#define pmd_unmap(pmd) do { } while (0)
-+#define pmd_unmap_nested(pmd) do { } while (0)
-
- /* Find an entry in the third-level page table.. */
- #define __pte_index(addr) (((addr) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1))
---- linux-2.6.0-test1/include/asm-arm/posix_types.h 2003-06-14 12:17:57.000000000 -0700
-+++ 25/include/asm-arm/posix_types.h 2003-07-19 17:06:39.000000000 -0700
-@@ -19,7 +19,9 @@
- * assume GCC is being used.
- */
-
--typedef unsigned short __kernel_dev_t;
-+#ifdef __GNUC__
-+typedef unsigned long long __kernel_dev_t;
-+#endif
- typedef unsigned long __kernel_ino_t;
- typedef unsigned short __kernel_mode_t;
- typedef unsigned short __kernel_nlink_t;
---- linux-2.6.0-test1/include/asm-cris/pgalloc.h 2003-07-10 18:50:32.000000000 -0700
-+++ 25/include/asm-cris/pgalloc.h 2003-07-19 17:07:16.000000000 -0700
-@@ -57,7 +57,8 @@ extern inline void pte_free(struct page
- * the pgd will always be present..
- */
-
--#define pmd_alloc_one(mm, addr) ({ BUG(); ((pmd_t *)2); })
-+#define pmd_alloc_one(mm, addr) ({ BUG(); ((struct page *)2); })
-+#define pmd_alloc_one_kernel(mm, addr) ({ BUG(); ((pmd_t *)2); })
- #define pmd_free(x) do { } while (0)
- #define __pmd_free_tlb(tlb,x) do { } while (0)
- #define pgd_populate(mm, pmd, pte) BUG()
---- linux-2.6.0-test1/include/asm-cris/pgtable.h 2003-07-10 18:50:32.000000000 -0700
-+++ 25/include/asm-cris/pgtable.h 2003-07-19 17:07:16.000000000 -0700
-@@ -339,4 +339,10 @@ extern inline void update_mmu_cache(stru
-
- typedef pte_t *pte_addr_t;
-
-+#define pmd_offset_kernel(pgd, addr) pmd_offset(pgd, addr)
-+#define pmd_offset_map(pgd, addr) pmd_offset(pgd, addr)
-+#define pmd_offset_map_nested(pgd, addr) pmd_offset(pgd, addr)
-+#define pmd_unmap(pmd) do { } while (0)
-+#define pmd_unmap_nested(pmd) do { } while (0)
-+
- #endif /* _CRIS_PGTABLE_H */
---- linux-2.6.0-test1/include/asm-cris/posix_types.h 2003-07-10 18:50:32.000000000 -0700
-+++ 25/include/asm-cris/posix_types.h 2003-07-19 17:06:39.000000000 -0700
-@@ -14,7 +14,9 @@
- * assume GCC is being used.
- */
-
--typedef unsigned short __kernel_dev_t;
-+#ifdef __GNUC__
-+typedef unsigned long long __kernel_dev_t;
-+#endif
- typedef unsigned long __kernel_ino_t;
- typedef unsigned short __kernel_mode_t;
- typedef unsigned short __kernel_nlink_t;
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-generic/cpumask_array.h 2003-07-19 17:04:07.000000000 -0700
-@@ -0,0 +1,41 @@
-+#ifndef __ASM_GENERIC_CPUMASK_ARRAY_H
-+#define __ASM_GENERIC_CPUMASK_ARRAY_H
-+
-+#define CPU_ARRAY_SIZE BITS_TO_LONGS(NR_CPUS)
-+
-+#define cpu_set(cpu, map) set_bit(cpu, (map).mask)
-+#define cpu_clear(cpu, map) clear_bit(cpu, (map).mask)
-+#define cpu_isset(cpu, map) test_bit(cpu, (map).mask)
-+#define cpu_test_and_set(cpu, map) test_and_set_bit(cpu, (map).mask)
-+
-+#define cpus_and(dst,src1,src2) bitmap_and((dst).mask,(src1).mask, (src2).mask, NR_CPUS)
-+#define cpus_or(dst,src1,src2) bitmap_or((dst).mask, (src1).mask, (src2).mask, NR_CPUS)
-+#define cpus_clear(map) bitmap_clear((map).mask, NR_CPUS)
-+#define cpus_complement(map) bitmap_complement((map).mask, NR_CPUS)
-+#define cpus_equal(map1, map2) bitmap_equal((map1).mask, (map2).mask, NR_CPUS)
-+#define cpus_empty(map) bitmap_empty(map.mask, NR_CPUS)
-+#define cpus_weight(map) bitmap_weight((map).mask, NR_CPUS)
-+#define cpus_shift_right(d, s, n) bitmap_shift_right((d).mask, (s).mask, n, NR_CPUS)
-+#define cpus_shift_left(d, s, n) bitmap_shift_left((d).mask, (s).mask, n, NR_CPUS)
-+#define first_cpu(map) find_first_bit((map).mask, NR_CPUS)
-+#define next_cpu(cpu, map) find_next_bit((map).mask, NR_CPUS, cpu)
-+
-+/* only ever use this for things that are _never_ used on large boxen */
-+#define cpus_coerce(map) ((map).mask[0])
-+#define cpus_promote(map) ({ cpumask_t __cpu_mask = CPU_MASK_NONE;\
-+ __cpu_mask.mask[0] = map; \
-+ __cpu_mask; \
-+ })
-+#define cpumask_of_cpu(cpu) ({ cpumask_t __cpu_mask = CPU_MASK_NONE;\
-+ cpu_set(cpu, __cpu_mask); \
-+ __cpu_mask; \
-+ })
-+#define any_online_cpu(map) find_first_bit((map).mask, NR_CPUS)
-+
-+/*
-+ * um, these need to be usable as static initializers
-+ */
-+#define CPU_MASK_ALL { {[0 ... CPU_ARRAY_SIZE-1] = ~0UL} }
-+#define CPU_MASK_NONE { {[0 ... CPU_ARRAY_SIZE-1] = 0UL} }
-+
-+#endif /* __ASM_GENERIC_CPUMASK_ARRAY_H */
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-generic/cpumask_const_reference.h 2003-07-19 17:04:07.000000000 -0700
-@@ -0,0 +1,29 @@
-+#ifndef __ASM_GENERIC_CPUMASK_CONST_REFERENCE_H
-+#define __ASM_GENERIC_CPUMASK_CONST_REFERENCE_H
-+
-+struct cpumask_ref {
-+ const cpumask_t *val;
-+};
-+
-+typedef const struct cpumask_ref cpumask_const_t;
-+
-+#define mk_cpumask_const(map) ((cpumask_const_t){ &(map) })
-+#define cpu_isset_const(cpu, map) cpu_isset(cpu, *(map).val)
-+
-+#define cpus_and_const(dst,src1,src2) cpus_and(dst,*(src1).val,*(src2).val)
-+#define cpus_or_const(dst,src1,src2) cpus_or(dst,*(src1).val,*(src2).val)
-+
-+#define cpus_equal_const(map1, map2) cpus_equal(*(map1).val, *(map2).val)
-+
-+#define cpus_copy_const(map1, map2) bitmap_copy((map1).mask, (map2).val->mask, NR_CPUS)
-+
-+#define cpus_empty_const(map) cpus_empty(*(map).val)
-+#define cpus_weight_const(map) cpus_weight(*(map).val)
-+#define first_cpu_const(map) first_cpu(*(map).val)
-+#define next_cpu_const(cpu, map) next_cpu(cpu, *(map).val)
-+
-+/* only ever use this for things that are _never_ used on large boxen */
-+#define cpus_coerce_const(map) cpus_coerce(*(map).val)
-+#define any_online_cpu_const(map) any_online_cpu(*(map).val)
-+
-+#endif /* __ASM_GENERIC_CPUMASK_CONST_REFERENCE_H */
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-generic/cpumask_const_value.h 2003-07-19 17:04:07.000000000 -0700
-@@ -0,0 +1,21 @@
-+#ifndef __ASM_GENERIC_CPUMASK_CONST_VALUE_H
-+#define __ASM_GENERIC_CPUMASK_CONST_VALUE_H
-+
-+typedef const cpumask_t cpumask_const_t;
-+
-+#define mk_cpumask_const(map) ((cpumask_const_t)(map))
-+#define cpu_isset_const(cpu, map) cpu_isset(cpu, map)
-+#define cpus_and_const(dst,src1,src2) cpus_and(dst, src1, src2)
-+#define cpus_or_const(dst,src1,src2) cpus_or(dst, src1, src2)
-+#define cpus_equal_const(map1, map2) cpus_equal(map1, map2)
-+#define cpus_empty_const(map) cpus_empty(map)
-+#define cpus_copy_const(map1, map2) do { map1 = (cpumask_t)map2; } while (0)
-+#define cpus_weight_const(map) cpus_weight(map)
-+#define first_cpu_const(map) first_cpu(map)
-+#define next_cpu_const(cpu, map) next_cpu(cpu, map)
-+
-+/* only ever use this for things that are _never_ used on large boxen */
-+#define cpus_coerce_const(map) cpus_coerce(map)
-+#define any_online_cpu_const(map) any_online_cpu(map)
-+
-+#endif /* __ASM_GENERIC_CPUMASK_CONST_VALUE_H */
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-generic/cpumask_up.h 2003-07-19 17:04:07.000000000 -0700
-@@ -0,0 +1,60 @@
-+#ifndef __ASM_GENERIC_CPUMASK_UP_H
-+#define __ASM_GENERIC_CPUMASK_UP_H
-+
-+#define CPU_ARRAY_SIZE BITS_TO_LONGS(NR_CPUS)
-+
-+#define cpus_coerce(map) ((map).mask[0])
-+
-+#define cpu_set(cpu, map) do { cpus_coerce(map) = 1UL; } while (0)
-+#define cpu_clear(cpu, map) do { cpus_coerce(map) = 0UL; } while (0)
-+#define cpu_isset(cpu, map) (cpus_coerce(map) != 0UL)
-+#define cpu_test_and_set(cpu, map) test_and_set_bit(0, (map).mask)
-+
-+#define cpus_and(dst, src1, src2) \
-+ do { \
-+ if (cpus_coerce(src1) && cpus_coerce(src2)) \
-+ cpus_coerce(dst) = 1UL; \
-+ else \
-+ cpus_coerce(dst) = 0UL; \
-+ } while (0)
-+
-+#define cpus_or(dst, src1, src2) \
-+ do { \
-+ if (cpus_coerce(src1) || cpus_coerce(src2)) \
-+ cpus_coerce(dst) = 1UL; \
-+ else \
-+ cpus_coerce(dst) = 0UL; \
-+ } while (0)
-+
-+#define cpus_clear(map) do { cpus_coerce(map) = 0UL; } while (0)
-+
-+#define cpus_complement(map) \
-+ do { \
-+ cpus_coerce(map) = !cpus_coerce(map); \
-+ } while (0)
-+
-+#define cpus_equal(map1, map2) (cpus_coerce(map1) == cpus_coerce(map2))
-+#define cpus_empty(map) (cpus_coerce(map) == 0UL)
-+#define cpus_weight(map) (cpus_coerce(map) ? 1UL : 0UL)
-+#define cpus_shift_right(d, s, n) do { cpus_coerce(d) = 0UL; } while (0)
-+#define cpus_shift_left(d, s, n) do { cpus_coerce(d) = 0UL; } while (0)
-+#define first_cpu(map) (cpus_coerce(map) ? 0 : 1)
-+#define next_cpu(cpu, map) 1
-+
-+/* only ever use this for things that are _never_ used on large boxen */
-+#define cpus_promote(map) \
-+ ({ \
-+ cpumask_t __tmp__; \
-+ cpus_coerce(__tmp__) = map; \
-+ __tmp__; \
-+ })
-+#define cpumask_of_cpu(cpu) cpus_promote(1)
-+#define any_online_cpu(map) (cpus_coerce(map) ? 0 : 1)
-+
-+/*
-+ * um, these need to be usable as static initializers
-+ */
-+#define CPU_MASK_ALL { {[0 ... CPU_ARRAY_SIZE-1] = 1UL} }
-+#define CPU_MASK_NONE { {[0 ... CPU_ARRAY_SIZE-1] = 0UL} }
-+
-+#endif /* __ASM_GENERIC_CPUMASK_UP_H */
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-generic/local.h 2003-07-19 17:03:50.000000000 -0700
-@@ -0,0 +1,118 @@
-+#ifndef _ASM_GENERIC_LOCAL_H
-+#define _ASM_GENERIC_LOCAL_H
-+
-+#include <linux/config.h>
-+#include <linux/percpu.h>
-+#include <asm/types.h>
-+#include <asm/hardirq.h>
-+
-+/* An unsigned long type for operations which are atomic for a single
-+ * CPU. Usually used in combination with per-cpu variables. */
-+
-+#if BITS_PER_LONG == 32 && !defined(CONFIG_SPARC32)
-+/* Implement in terms of atomics. */
-+
-+/* Don't use typedef: don't want them to be mixed with atomic_t's. */
-+typedef struct
-+{
-+ atomic_t a;
-+} local_t;
-+
-+#define LOCAL_INIT(i) { ATOMIC_INIT(i) }
-+
-+#define local_read(l) ((unsigned long)atomic_read(&(l)->a))
-+#define local_set(l,i) atomic_set((&(l)->a),(i))
-+#define local_inc(l) atomic_inc(&(l)->a)
-+#define local_dec(l) atomic_dec(&(l)->a)
-+#define local_add(i,l) atomic_add((i),(&(l)->a))
-+#define local_sub(i,l) atomic_sub((i),(&(l)->a))
-+
-+/* Non-atomic variants, ie. preemption disabled and won't be touched
-+ * in interrupt, etc. Some archs can optimize this case well. */
-+#define __local_inc(l) local_set((l), local_read(l) + 1)
-+#define __local_dec(l) local_set((l), local_read(l) - 1)
-+#define __local_add(i,l) local_set((l), local_read(l) + (i))
-+#define __local_sub(i,l) local_set((l), local_read(l) - (i))
-+
-+#else /* ... can't use atomics. */
-+/* Implement in terms of three variables.
-+ Another option would be to use local_irq_save/restore. */
-+
-+typedef struct
-+{
-+ /* 0 = in hardirq, 1 = in softirq, 2 = usermode. */
-+ unsigned long v[3];
-+} local_t;
-+
-+#define _LOCAL_VAR(l) ((l)->v[!in_interrupt() + !in_irq()])
-+
-+#define LOCAL_INIT(i) { { (i), 0, 0 } }
-+
-+static inline unsigned long local_read(local_t *l)
-+{
-+ return l->v[0] + l->v[1] + l->v[2];
-+}
-+
-+static inline void local_set(local_t *l, unsigned long v)
-+{
-+ l->v[0] = v;
-+ l->v[1] = l->v[2] = 0;
-+}
-+
-+static inline void local_inc(local_t *l)
-+{
-+ preempt_disable();
-+ _LOCAL_VAR(l)++;
-+ preempt_enable();
-+}
-+
-+static inline void local_dec(local_t *l)
-+{
-+ preempt_disable();
-+ _LOCAL_VAR(l)--;
-+ preempt_enable();
-+}
-+
-+static inline void local_add(unsigned long v, local_t *l)
-+{
-+ preempt_disable();
-+ _LOCAL_VAR(l) += v;
-+ preempt_enable();
-+}
-+
-+static inline void local_sub(unsigned long v, local_t *l)
-+{
-+ preempt_disable();
-+ _LOCAL_VAR(l) -= v;
-+ preempt_enable();
-+}
-+
-+/* Non-atomic variants, ie. preemption disabled and won't be touched
-+ * in interrupt, etc. Some archs can optimize this case well. */
-+#define __local_inc(l) ((l)->v[0]++)
-+#define __local_dec(l) ((l)->v[0]--)
-+#define __local_add(i,l) ((l)->v[0] += (i))
-+#define __local_sub(i,l) ((l)->v[0] -= (i))
-+
-+#endif /* Non-atomic implementation */
-+
-+/* Use these for per-cpu local_t variables: on some archs they are
-+ * much more efficient than these naive implementations. Note they take
-+ * a variable (eg. mystruct.foo), not an address.
-+ */
-+#define cpu_local_read(v) local_read(&__get_cpu_var(v))
-+#define cpu_local_set(v, i) local_set(&__get_cpu_var(v), (i))
-+#define cpu_local_inc(v) local_inc(&__get_cpu_var(v))
-+#define cpu_local_dec(v) local_dec(&__get_cpu_var(v))
-+#define cpu_local_add(i, v) local_add((i), &__get_cpu_var(v))
-+#define cpu_local_sub(i, v) local_sub((i), &__get_cpu_var(v))
-+
-+/* Non-atomic increments, ie. preemption disabled and won't be touched
-+ * in interrupt, etc. Some archs can optimize this case well.
-+ */
-+#define __cpu_local_inc(v) __local_inc(&__get_cpu_var(v))
-+#define __cpu_local_dec(v) __local_dec(&__get_cpu_var(v))
-+#define __cpu_local_add(i, v) __local_add((i), &__get_cpu_var(v))
-+#define __cpu_local_sub(i, v) __local_sub((i), &__get_cpu_var(v))
-+
-+#endif /* _ASM_GENERIC_LOCAL_H */
---- linux-2.6.0-test1/include/asm-generic/percpu.h 2003-06-14 12:18:04.000000000 -0700
-+++ 25/include/asm-generic/percpu.h 2003-07-19 17:03:50.000000000 -0700
-@@ -9,33 +9,34 @@ extern unsigned long __per_cpu_offset[NR
-
- /* Separate out the type, so (int[3], foo) works. */
- #define DEFINE_PER_CPU(type, name) \
-- __attribute__((__section__(".data.percpu"))) __typeof__(type) name##__per_cpu
-+ __attribute__((__section__(".data.percpu"))) __typeof__(type) per_cpu__##name
-
- /* var is in discarded region: offset to particular copy we want */
--#define per_cpu(var, cpu) (*RELOC_HIDE(&var##__per_cpu, __per_cpu_offset[cpu]))
-+#define per_cpu(var, cpu) (*RELOC_HIDE(&per_cpu__##var, __per_cpu_offset[cpu]))
- #define __get_cpu_var(var) per_cpu(var, smp_processor_id())
-
--static inline void percpu_modcopy(void *pcpudst, const void *src,
-- unsigned long size)
--{
-- unsigned int i;
-- for (i = 0; i < NR_CPUS; i++)
-- if (cpu_possible(i))
-- memcpy(pcpudst + __per_cpu_offset[i], src, size);
--}
-+/* A macro to avoid #include hell... */
-+#define percpu_modcopy(pcpudst, src, size) \
-+do { \
-+ unsigned int __i; \
-+ for (__i = 0; __i < NR_CPUS; __i++) \
-+ if (cpu_possible(__i)) \
-+ memcpy((pcpudst)+__per_cpu_offset[__i], \
-+ (src), (size)); \
-+} while (0)
- #else /* ! SMP */
-
- #define DEFINE_PER_CPU(type, name) \
-- __typeof__(type) name##__per_cpu
-+ __typeof__(type) per_cpu__##name
-
--#define per_cpu(var, cpu) ((void)cpu, var##__per_cpu)
--#define __get_cpu_var(var) var##__per_cpu
-+#define per_cpu(var, cpu) ((void)cpu, per_cpu__##var)
-+#define __get_cpu_var(var) per_cpu__##var
-
- #endif /* SMP */
-
--#define DECLARE_PER_CPU(type, name) extern __typeof__(type) name##__per_cpu
-+#define DECLARE_PER_CPU(type, name) extern __typeof__(type) per_cpu__##name
-
--#define EXPORT_PER_CPU_SYMBOL(var) EXPORT_SYMBOL(var##__per_cpu)
--#define EXPORT_PER_CPU_SYMBOL_GPL(var) EXPORT_SYMBOL_GPL(var##__per_cpu)
-+#define EXPORT_PER_CPU_SYMBOL(var) EXPORT_SYMBOL(per_cpu__##var)
-+#define EXPORT_PER_CPU_SYMBOL_GPL(var) EXPORT_SYMBOL_GPL(per_cpu__##var)
-
- #endif /* _ASM_GENERIC_PERCPU_H_ */
---- linux-2.6.0-test1/include/asm-generic/sections.h 2003-06-14 12:17:56.000000000 -0700
-+++ 25/include/asm-generic/sections.h 2003-07-19 17:03:50.000000000 -0700
-@@ -3,9 +3,10 @@
-
- /* References to section boundaries */
-
--extern char _text, _etext;
--extern char _data, _edata;
--extern char __bss_start;
--extern char __init_begin, __init_end;
-+extern char _text[], _stext[], _etext[];
-+extern char _data[], _sdata[], _edata[];
-+extern char __bss_start[];
-+extern char __init_begin[], __init_end[];
-+extern char _sinittext[], _einittext[];
-
- #endif /* _ASM_GENERIC_SECTIONS_H_ */
---- linux-2.6.0-test1/include/asm-h8300/pgtable.h 2003-06-14 12:18:08.000000000 -0700
-+++ 25/include/asm-h8300/pgtable.h 2003-07-19 17:07:16.000000000 -0700
-@@ -15,6 +15,11 @@ typedef pte_t *pte_addr_t;
- #define pgd_clear(pgdp)
- #define kern_addr_valid(addr) (1)
- #define pmd_offset(a, b) ((void *)0)
-+#define pmd_offset_kernel(a,b) pmd_offset(a,b)
-+#define pmd_offset_map(a,b) pmd_offset(a,b)
-+#define pmd_offset_map_nested(a,b) pmd_offset(a,b)
-+#define pmd_unmap(pmd) do { } while (0)
-+#define pmd_unmap_nested(pmd) do { } while (0)
-
- #define PAGE_NONE __pgprot(0) /* these mean nothing to NO_MM */
- #define PAGE_SHARED __pgprot(0) /* these mean nothing to NO_MM */
---- linux-2.6.0-test1/include/asm-h8300/posix_types.h 2003-06-14 12:17:56.000000000 -0700
-+++ 25/include/asm-h8300/posix_types.h 2003-07-19 17:06:39.000000000 -0700
-@@ -7,7 +7,9 @@
- * assume GCC is being used.
- */
-
--typedef unsigned short __kernel_dev_t;
-+#ifdef __GNUC__
-+typedef unsigned long long __kernel_dev_t;
-+#endif
- typedef unsigned long __kernel_ino_t;
- typedef unsigned short __kernel_mode_t;
- typedef unsigned short __kernel_nlink_t;
---- linux-2.6.0-test1/include/asm-i386/atomic.h 2003-06-14 12:18:04.000000000 -0700
-+++ 25/include/asm-i386/atomic.h 2003-07-19 17:04:07.000000000 -0700
-@@ -193,7 +193,7 @@ __asm__ __volatile__(LOCK "andl %0,%1" \
-
- #define atomic_set_mask(mask, addr) \
- __asm__ __volatile__(LOCK "orl %0,%1" \
--: : "r" (mask),"m" (*addr) : "memory")
-+: : "r" (mask),"m" (*(addr)) : "memory")
-
- /* Atomic operations are already serializing on x86 */
- #define smp_mb__before_atomic_dec() barrier()
---- linux-2.6.0-test1/include/asm-i386/bitops.h 2003-06-14 12:18:24.000000000 -0700
-+++ 25/include/asm-i386/bitops.h 2003-07-19 17:04:07.000000000 -0700
-@@ -270,7 +270,7 @@ static __inline__ int variable_test_bit(
- * Returns the bit-number of the first zero bit, not the number of the byte
- * containing a bit.
- */
--static __inline__ int find_first_zero_bit(unsigned long * addr, unsigned size)
-+static __inline__ int find_first_zero_bit(const unsigned long *addr, unsigned size)
- {
- int d0, d1, d2;
- int res;
-@@ -302,7 +302,7 @@ static __inline__ int find_first_zero_bi
- * Returns the bit-number of the first set bit, not the number of the byte
- * containing a bit.
- */
--static __inline__ int find_first_bit(unsigned long * addr, unsigned size)
-+static __inline__ int find_first_bit(const unsigned long *addr, unsigned size)
- {
- int d0, d1;
- int res;
-@@ -328,7 +328,7 @@ static __inline__ int find_first_bit(uns
- * @offset: The bitnumber to start searching at
- * @size: The maximum size to search
- */
--static __inline__ int find_next_zero_bit(unsigned long * addr, int size, int offset)
-+static __inline__ int find_next_zero_bit(const unsigned long *addr, int size, int offset)
- {
- unsigned long * p = ((unsigned long *) addr) + (offset >> 5);
- int set = 0, bit = offset & 31, res;
-@@ -361,9 +361,9 @@ static __inline__ int find_next_zero_bit
- * @offset: The bitnumber to start searching at
- * @size: The maximum size to search
- */
--static __inline__ int find_next_bit(unsigned long *addr, int size, int offset)
-+static __inline__ int find_next_bit(const unsigned long *addr, int size, int offset)
- {
-- unsigned long * p = addr + (offset >> 5);
-+ const unsigned long *p = addr + (offset >> 5);
- int set = 0, bit = offset & 31, res;
-
- if (bit) {
-@@ -430,7 +430,7 @@ static __inline__ unsigned long __ffs(un
- * unlikely to be set. It's guaranteed that at least one of the 140
- * bits is cleared.
- */
--static inline int sched_find_first_bit(unsigned long *b)
-+static inline int sched_find_first_bit(const unsigned long *b)
- {
- if (unlikely(b[0]))
- return __ffs(b[0]);
---- linux-2.6.0-test1/include/asm-i386/bugs.h 2003-06-26 22:07:25.000000000 -0700
-+++ 25/include/asm-i386/bugs.h 2003-07-19 17:04:02.000000000 -0700
-@@ -1,11 +1,11 @@
- /*
- * include/asm-i386/bugs.h
- *
-- * Copyright (C) 1994 Linus Torvalds
-+ * Copyright (C) 1994 Linus Torvalds
- *
- * Cyrix stuff, June 1998 by:
- * - Rafael R. Reilova (moved everything from head.S),
-- * <rreilova@ececs.uc.edu>
-+ * <rreilova@ececs.uc.edu>
- * - Channing Corn (tests & fixes),
- * - Andrew D. Balsa (code cleanup).
- *
-@@ -25,7 +25,20 @@
- #include <asm/processor.h>
- #include <asm/i387.h>
- #include <asm/msr.h>
--
-+#ifdef CONFIG_KGDB
-+/*
-+ * Provied the command line "gdb" initial break
-+ */
-+int __init kgdb_initial_break(char * str)
-+{
-+ if (*str == '\0'){
-+ breakpoint();
-+ return 1;
-+ }
-+ return 0;
-+}
-+__setup("gdb",kgdb_initial_break);
-+#endif
- static int __init no_halt(char *s)
- {
- boot_cpu_data.hlt_works_ok = 0;
-@@ -140,7 +153,7 @@ static void __init check_popad(void)
- : "ecx", "edi" );
- /* If this fails, it means that any user program may lock the CPU hard. Too bad. */
- if (res != 12345678) printk( "Buggy.\n" );
-- else printk( "OK.\n" );
-+ else printk( "OK.\n" );
- #endif
- }
-
---- linux-2.6.0-test1/include/asm-i386/genapic.h 2003-06-22 12:04:45.000000000 -0700
-+++ 25/include/asm-i386/genapic.h 2003-07-19 17:04:07.000000000 -0700
-@@ -1,13 +1,13 @@
- #ifndef _ASM_GENAPIC_H
- #define _ASM_GENAPIC_H 1
-
--/*
-+/*
- * Generic APIC driver interface.
-- *
-- * An straight forward mapping of the APIC related parts of the
-+ *
-+ * An straight forward mapping of the APIC related parts of the
- * x86 subarchitecture interface to a dynamic object.
-- *
-- * This is used by the "generic" x86 subarchitecture.
-+ *
-+ * This is used by the "generic" x86 subarchitecture.
- *
- * Copyright 2003 Andi Kleen, SuSE Labs.
- */
-@@ -22,23 +22,23 @@ struct genapic {
- int (*probe)(void);
-
- int (*apic_id_registered)(void);
-- unsigned long (*target_cpus)(void);
-+ cpumask_t (*target_cpus)(void);
- int int_delivery_mode;
- int int_dest_mode;
- int apic_broadcast_id;
- int esr_disable;
-- unsigned long (*check_apicid_used)(unsigned long bitmap, int apicid);
-+ unsigned long (*check_apicid_used)(physid_mask_t bitmap, int apicid);
- unsigned long (*check_apicid_present)(int apicid);
- int no_balance_irq;
- void (*init_apic_ldr)(void);
-- unsigned long (*ioapic_phys_id_map)(unsigned long map);
-+ physid_mask_t (*ioapic_phys_id_map)(physid_mask_t map);
-
- void (*clustered_apic_check)(void);
- int (*multi_timer_check)(int apic, int irq);
- int (*apicid_to_node)(int logical_apicid);
- int (*cpu_to_logical_apicid)(int cpu);
- int (*cpu_present_to_apicid)(int mps_cpu);
-- unsigned long (*apicid_to_cpu_present)(int phys_apicid);
-+ physid_mask_t (*apicid_to_cpu_present)(int phys_apicid);
- int (*mpc_apic_id)(struct mpc_config_processor *m,
- struct mpc_config_translation *t);
- void (*setup_portio_remap)(void);
-@@ -59,11 +59,11 @@ struct genapic {
- int (*acpi_madt_oem_check)(char *oem_id, char *oem_table_id);
-
- unsigned (*get_apic_id)(unsigned long x);
-- unsigned long apic_id_mask;
-- unsigned int (*cpu_mask_to_apicid)(unsigned long cpumask);
-+ unsigned long apic_id_mask;
-+ unsigned int (*cpu_mask_to_apicid)(cpumask_const_t cpumask);
-
- /* ipi */
-- void (*send_IPI_mask)(int mask, int vector);
-+ void (*send_IPI_mask)(cpumask_t mask, int vector);
- void (*send_IPI_allbutself)(int vector);
- void (*send_IPI_all)(int vector);
- };
---- linux-2.6.0-test1/include/asm-i386/highmem.h 2003-06-14 12:17:57.000000000 -0700
-+++ 25/include/asm-i386/highmem.h 2003-07-19 17:07:16.000000000 -0700
-@@ -22,6 +22,7 @@
-
- #include <linux/config.h>
- #include <linux/interrupt.h>
-+#include <linux/threads.h>
- #include <asm/kmap_types.h>
- #include <asm/tlbflush.h>
-
-@@ -39,7 +40,11 @@ extern void kmap_init(void);
- * easily, subsequent pte tables have to be allocated in one physical
- * chunk of RAM.
- */
--#define PKMAP_BASE (0xff800000UL)
-+#if NR_CPUS <= 32
-+#define PKMAP_BASE (0xff400000UL)
-+#else
-+#define PKMAP_BASE (0xfe800000UL)
-+#endif
- #ifdef CONFIG_X86_PAE
- #define LAST_PKMAP 512
- #else
---- linux-2.6.0-test1/include/asm-i386/hw_irq.h 2003-06-14 12:18:51.000000000 -0700
-+++ 25/include/asm-i386/hw_irq.h 2003-07-19 17:04:07.000000000 -0700
-@@ -16,6 +16,7 @@
- #include <linux/profile.h>
- #include <asm/atomic.h>
- #include <asm/irq.h>
-+#include <asm/sections.h>
-
- /*
- * Various low-level irq details needed by irq.c, process.c,
-@@ -30,41 +31,39 @@ extern int irq_vector[NR_IRQS];
- extern void (*interrupt[NR_IRQS])(void);
-
- #ifdef CONFIG_SMP
--extern asmlinkage void reschedule_interrupt(void);
--extern asmlinkage void invalidate_interrupt(void);
--extern asmlinkage void call_function_interrupt(void);
-+asmlinkage void reschedule_interrupt(void);
-+asmlinkage void invalidate_interrupt(void);
-+asmlinkage void call_function_interrupt(void);
- #endif
-
- #ifdef CONFIG_X86_LOCAL_APIC
--extern asmlinkage void apic_timer_interrupt(void);
--extern asmlinkage void error_interrupt(void);
--extern asmlinkage void spurious_interrupt(void);
--extern asmlinkage void thermal_interrupt(struct pt_regs);
-+asmlinkage void apic_timer_interrupt(void);
-+asmlinkage void error_interrupt(void);
-+asmlinkage void spurious_interrupt(void);
-+asmlinkage void thermal_interrupt(struct pt_regs);
- #endif
-
--extern void mask_irq(unsigned int irq);
--extern void unmask_irq(unsigned int irq);
--extern void disable_8259A_irq(unsigned int irq);
--extern void enable_8259A_irq(unsigned int irq);
--extern int i8259A_irq_pending(unsigned int irq);
--extern void make_8259A_irq(unsigned int irq);
--extern void init_8259A(int aeoi);
--extern void FASTCALL(send_IPI_self(int vector));
--extern void init_VISWS_APIC_irqs(void);
--extern void setup_IO_APIC(void);
--extern void disable_IO_APIC(void);
--extern void print_IO_APIC(void);
--extern int IO_APIC_get_PCI_irq_vector(int bus, int slot, int fn);
--extern void send_IPI(int dest, int vector);
--extern void setup_ioapic_dest(unsigned long mask);
-+void mask_irq(unsigned int irq);
-+void unmask_irq(unsigned int irq);
-+void disable_8259A_irq(unsigned int irq);
-+void enable_8259A_irq(unsigned int irq);
-+int i8259A_irq_pending(unsigned int irq);
-+void make_8259A_irq(unsigned int irq);
-+void init_8259A(int aeoi);
-+void FASTCALL(send_IPI_self(int vector));
-+void init_VISWS_APIC_irqs(void);
-+void setup_IO_APIC(void);
-+void disable_IO_APIC(void);
-+void print_IO_APIC(void);
-+int IO_APIC_get_PCI_irq_vector(int bus, int slot, int fn);
-+void send_IPI(int dest, int vector);
-+void setup_ioapic_dest(cpumask_t mask);
-
- extern unsigned long io_apic_irqs;
-
- extern atomic_t irq_err_count;
- extern atomic_t irq_mis_count;
-
--extern char _stext, _etext;
--
- #define IO_APIC_IRQ(x) (((x) >= 16) || ((1<<(x)) & io_apic_irqs))
-
- /*
-@@ -95,7 +94,7 @@ static inline void x86_do_profile(struct
- if (!((1<<smp_processor_id()) & prof_cpu_mask))
- return;
-
-- eip -= (unsigned long) &_stext;
-+ eip -= (unsigned long)_stext;
- eip >>= prof_shift;
- /*
- * Don't ignore out-of-bounds EIP values silently,
-@@ -107,7 +106,7 @@ static inline void x86_do_profile(struct
- atomic_inc((atomic_t *)&prof_buffer[eip]);
- }
-
--#if defined(CONFIG_X86_IO_APIC) && defined(CONFIG_SMP)
-+#if defined(CONFIG_X86_IO_APIC)
- static inline void hw_resend_irq(struct hw_interrupt_type *h, unsigned int i)
- {
- if (IO_APIC_IRQ(i))
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-i386/kgdb.h 2003-07-19 17:04:02.000000000 -0700
-@@ -0,0 +1,59 @@
-+#ifndef __KGDB
-+#define __KGDB
-+
-+/*
-+ * This file should not include ANY others. This makes it usable
-+ * most anywhere without the fear of include order or inclusion.
-+ * Make it so!
-+ *
-+ * This file may be included all the time. It is only active if
-+ * CONFIG_KGDB is defined, otherwise it stubs out all the macros
-+ * and entry points.
-+ */
-+#if defined(CONFIG_KGDB) && !defined(__ASSEMBLY__)
-+
-+extern void breakpoint(void);
-+#define INIT_KGDB_INTS kgdb_enable_ints()
-+
-+#ifndef BREAKPOINT
-+#define BREAKPOINT asm(" int $3")
-+#endif
-+/*
-+ * GDB debug stub (or any debug stub) can point the 'linux_debug_hook'
-+ * pointer to its routine and it will be entered as the first thing
-+ * when a trap occurs.
-+ *
-+ * Return values are, at present, undefined.
-+ *
-+ * The debug hook routine does not necessarily return to its caller.
-+ * It has the register image and thus may choose to resume execution
-+ * anywhere it pleases.
-+ */
-+struct pt_regs;
-+
-+extern int kgdb_handle_exception(int trapno,
-+ int signo, int err_code, struct pt_regs *regs);
-+extern int in_kgdb(struct pt_regs *regs);
-+
-+#ifdef CONFIG_KGDB_TS
-+void kgdb_tstamp(int line, char *source, int data0, int data1);
-+/*
-+ * This is the time stamp function. The macro adds the source info and
-+ * does a cast on the data to allow most any 32-bit value.
-+ */
-+
-+#define kgdb_ts(data0,data1) kgdb_tstamp(__LINE__,__FILE__,(int)data0,(int)data1)
-+#else
-+#define kgdb_ts(data0,data1)
-+#endif
-+#else /* CONFIG_KGDB && ! __ASSEMBLY__ ,stubs follow... */
-+#ifndef BREAKPOINT
-+#define BREAKPOINT
-+#endif
-+#define kgdb_ts(data0,data1)
-+#define in_kgdb
-+#define kgdb_handle_exception
-+#define breakpoint
-+#define INIT_KGDB_INTS
-+#endif
-+#endif /* __KGDB */
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-i386/kgdb_local.h 2003-07-19 17:04:02.000000000 -0700
-@@ -0,0 +1,102 @@
-+#ifndef __KGDB_LOCAL
-+#define ___KGDB_LOCAL
-+#include <linux/config.h>
-+#include <linux/types.h>
-+#include <linux/serial.h>
-+#include <linux/serialP.h>
-+#include <linux/spinlock.h>
-+#include <asm/processor.h>
-+#include <asm/msr.h>
-+#include <asm/kgdb.h>
-+
-+#define PORT 0x3f8
-+#ifdef CONFIG_KGDB_PORT
-+#undef PORT
-+#define PORT CONFIG_KGDB_PORT
-+#endif
-+#define IRQ 4
-+#ifdef CONFIG_KGDB_IRQ
-+#undef IRQ
-+#define IRQ CONFIG_KGDB_IRQ
-+#endif
-+#define SB_CLOCK 1843200
-+#define SB_BASE (SB_CLOCK/16)
-+#define SB_BAUD9600 SB_BASE/9600
-+#define SB_BAUD192 SB_BASE/19200
-+#define SB_BAUD384 SB_BASE/38400
-+#define SB_BAUD576 SB_BASE/57600
-+#define SB_BAUD1152 SB_BASE/115200
-+#ifdef CONFIG_KGDB_9600BAUD
-+#define SB_BAUD SB_BAUD9600
-+#endif
-+#ifdef CONFIG_KGDB_19200BAUD
-+#define SB_BAUD SB_BAUD192
-+#endif
-+#ifdef CONFIG_KGDB_38400BAUD
-+#define SB_BAUD SB_BAUD384
-+#endif
-+#ifdef CONFIG_KGDB_57600BAUD
-+#define SB_BAUD SB_BAUD576
-+#endif
-+#ifdef CONFIG_KGDB_115200BAUD
-+#define SB_BAUD SB_BAUD1152
-+#endif
-+#ifndef SB_BAUD
-+#define SB_BAUD SB_BAUD1152 /* Start with this if not given */
-+#endif
-+
-+#ifndef CONFIG_X86_TSC
-+#undef rdtsc
-+#define rdtsc(a,b) if (a++ > 10000){a = 0; b++;}
-+#undef rdtscll
-+#define rdtscll(s) s++
-+#endif
-+
-+#ifdef _raw_read_unlock /* must use a name that is "define"ed, not an inline */
-+#undef spin_lock
-+#undef spin_trylock
-+#undef spin_unlock
-+#define spin_lock _raw_spin_lock
-+#define spin_trylock _raw_spin_trylock
-+#define spin_unlock _raw_spin_unlock
-+#else
-+#endif
-+#undef spin_unlock_wait
-+#define spin_unlock_wait(x) do { cpu_relax(); barrier();} \
-+ while(spin_is_locked(x))
-+
-+#define SB_IER 1
-+#define SB_MCR UART_MCR_OUT2 | UART_MCR_DTR | UART_MCR_RTS
-+
-+#define FLAGS 0
-+#define SB_STATE { \
-+ magic: SSTATE_MAGIC, \
-+ baud_base: SB_BASE, \
-+ port: PORT, \
-+ irq: IRQ, \
-+ flags: FLAGS, \
-+ custom_divisor:SB_BAUD}
-+#define SB_INFO { \
-+ magic: SERIAL_MAGIC, \
-+ port: PORT,0,FLAGS, \
-+ state: &state, \
-+ tty: (struct tty_struct *)&state, \
-+ IER: SB_IER, \
-+ MCR: SB_MCR}
-+extern void putDebugChar(int);
-+/* RTAI support needs us to really stop/start interrupts */
-+
-+#define kgdb_sti() __asm__ __volatile__("sti": : :"memory")
-+#define kgdb_cli() __asm__ __volatile__("cli": : :"memory")
-+#define kgdb_local_save_flags(x) __asm__ __volatile__(\
-+ "pushfl ; popl %0":"=g" (x): /* no input */)
-+#define kgdb_local_irq_restore(x) __asm__ __volatile__(\
-+ "pushl %0 ; popfl": \
-+ /* no output */ :"g" (x):"memory", "cc")
-+#define kgdb_local_irq_save(x) kgdb_local_save_flags(x); kgdb_cli()
-+
-+#ifdef CONFIG_SERIAL
-+extern void shutdown_for_kgdb(struct async_struct *info);
-+#endif
-+#define INIT_KDEBUG putDebugChar("+");
-+#endif /* __KGDB_LOCAL */
---- linux-2.6.0-test1/include/asm-i386/kmap_types.h 2003-06-14 12:18:28.000000000 -0700
-+++ 25/include/asm-i386/kmap_types.h 2003-07-19 17:07:16.000000000 -0700
-@@ -17,14 +17,16 @@ D(3) KM_USER0,
- D(4) KM_USER1,
- D(5) KM_BIO_SRC_IRQ,
- D(6) KM_BIO_DST_IRQ,
--D(7) KM_PTE0,
--D(8) KM_PTE1,
--D(9) KM_PTE2,
--D(10) KM_IRQ0,
--D(11) KM_IRQ1,
--D(12) KM_SOFTIRQ0,
--D(13) KM_SOFTIRQ1,
--D(14) KM_TYPE_NR
-+D(7) KM_PMD0,
-+D(8) KM_PMD1,
-+D(9) KM_PTE0,
-+D(10) KM_PTE1,
-+D(11) KM_PTE2,
-+D(12) KM_IRQ0,
-+D(13) KM_IRQ1,
-+D(14) KM_SOFTIRQ0,
-+D(15) KM_SOFTIRQ1,
-+D(16) KM_TYPE_NR
- };
-
- #undef D
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-i386/local.h 2003-07-19 17:03:50.000000000 -0700
-@@ -0,0 +1,70 @@
-+#ifndef _ARCH_I386_LOCAL_H
-+#define _ARCH_I386_LOCAL_H
-+
-+#include <linux/percpu.h>
-+
-+typedef struct
-+{
-+ volatile unsigned long counter;
-+} local_t;
-+
-+#define LOCAL_INIT(i) { (i) }
-+
-+#define local_read(v) ((v)->counter)
-+#define local_set(v,i) (((v)->counter) = (i))
-+
-+static __inline__ void local_inc(local_t *v)
-+{
-+ __asm__ __volatile__(
-+ "incl %0"
-+ :"=m" (v->counter)
-+ :"m" (v->counter));
-+}
-+
-+static __inline__ void local_dec(local_t *v)
-+{
-+ __asm__ __volatile__(
-+ "decl %0"
-+ :"=m" (v->counter)
-+ :"m" (v->counter));
-+}
-+
-+static __inline__ void local_add(unsigned long i, local_t *v)
-+{
-+ __asm__ __volatile__(
-+ "addl %1,%0"
-+ :"=m" (v->counter)
-+ :"ir" (i), "m" (v->counter));
-+}
-+
-+static __inline__ void local_sub(unsigned long i, local_t *v)
-+{
-+ __asm__ __volatile__(
-+ "subl %1,%0"
-+ :"=m" (v->counter)
-+ :"ir" (i), "m" (v->counter));
-+}
-+
-+/* On x86, these are no better than the atomic variants. */
-+#define __local_inc(l) local_inc(l)
-+#define __local_dec(l) local_dec(l)
-+#define __local_add(i,l) local_add((i),(l))
-+#define __local_sub(i,l) local_sub((i),(l))
-+
-+/* Use these for per-cpu local_t variables: on some archs they are
-+ * much more efficient than these naive implementations. Note they take
-+ * a variable, not an address.
-+ */
-+#define cpu_local_read(v) local_read(&__get_cpu_var(v))
-+#define cpu_local_set(v, i) local_set(&__get_cpu_var(v), (i))
-+#define cpu_local_inc(v) local_inc(&__get_cpu_var(v))
-+#define cpu_local_dec(v) local_dec(&__get_cpu_var(v))
-+#define cpu_local_add(i, v) local_add((i), &__get_cpu_var(v))
-+#define cpu_local_sub(i, v) local_sub((i), &__get_cpu_var(v))
-+
-+#define __cpu_local_inc(v) cpu_local_inc(v)
-+#define __cpu_local_dec(v) cpu_local_dec(v)
-+#define __cpu_local_add(i, v) cpu_local_add((i), (v))
-+#define __cpu_local_sub(i, v) cpu_local_sub((i), (v))
-+
-+#endif /* _ARCH_I386_LOCAL_H */
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-i386/lockmeter.h 2003-07-19 17:06:40.000000000 -0700
-@@ -0,0 +1,127 @@
-+/*
-+ * Copyright (C) 1999,2000 Silicon Graphics, Inc.
-+ *
-+ * Written by John Hawkes (hawkes@sgi.com)
-+ * Based on klstat.h by Jack Steiner (steiner@sgi.com)
-+ *
-+ * Modified by Ray Bryant (raybry@us.ibm.com)
-+ * Changes Copyright (C) 2000 IBM, Inc.
-+ * Added save of index in spinlock_t to improve efficiency
-+ * of "hold" time reporting for spinlocks.
-+ * Added support for hold time statistics for read and write
-+ * locks.
-+ * Moved machine dependent code here from include/lockmeter.h.
-+ *
-+ */
-+
-+#ifndef _I386_LOCKMETER_H
-+#define _I386_LOCKMETER_H
-+
-+#include <asm/spinlock.h>
-+#include <asm/rwlock.h>
-+
-+#include <linux/version.h>
-+
-+#ifdef __KERNEL__
-+extern unsigned long cpu_khz;
-+#define CPU_CYCLE_FREQUENCY (cpu_khz * 1000)
-+#else
-+#define CPU_CYCLE_FREQUENCY 450000000
-+#endif
-+
-+#define THIS_CPU_NUMBER smp_processor_id()
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,0)
-+#define local_irq_save(x) \
-+ __asm__ __volatile__("pushfl ; popl %0 ; cli":"=g" (x): /* no input */ :"memory")
-+
-+#define local_irq_restore(x) \
-+ __asm__ __volatile__("pushl %0 ; popfl": /* no output */ :"g" (x):"memory")
-+#endif /* Linux version 2.2.x */
-+
-+/*
-+ * macros to cache and retrieve an index value inside of a spin lock
-+ * these macros assume that there are less than 65536 simultaneous
-+ * (read mode) holders of a rwlock. Not normally a problem!!
-+ * we also assume that the hash table has less than 65535 entries.
-+ */
-+/*
-+ * instrumented spinlock structure -- never used to allocate storage
-+ * only used in macros below to overlay a spinlock_t
-+ */
-+typedef struct inst_spinlock_s {
-+ /* remember, Intel is little endian */
-+ unsigned short lock;
-+ unsigned short index;
-+} inst_spinlock_t;
-+#define PUT_INDEX(lock_ptr,indexv) ((inst_spinlock_t *)(lock_ptr))->index = indexv
-+#define GET_INDEX(lock_ptr) ((inst_spinlock_t *)(lock_ptr))->index
-+
-+/*
-+ * macros to cache and retrieve an index value in a read/write lock
-+ * as well as the cpu where a reader busy period started
-+ * we use the 2nd word (the debug word) for this, so require the
-+ * debug word to be present
-+ */
-+/*
-+ * instrumented rwlock structure -- never used to allocate storage
-+ * only used in macros below to overlay a rwlock_t
-+ */
-+typedef struct inst_rwlock_s {
-+ volatile int lock;
-+ unsigned short index;
-+ unsigned short cpu;
-+} inst_rwlock_t;
-+#define PUT_RWINDEX(rwlock_ptr,indexv) ((inst_rwlock_t *)(rwlock_ptr))->index = indexv
-+#define GET_RWINDEX(rwlock_ptr) ((inst_rwlock_t *)(rwlock_ptr))->index
-+#define PUT_RW_CPU(rwlock_ptr,cpuv) ((inst_rwlock_t *)(rwlock_ptr))->cpu = cpuv
-+#define GET_RW_CPU(rwlock_ptr) ((inst_rwlock_t *)(rwlock_ptr))->cpu
-+
-+/*
-+ * return the number of readers for a rwlock_t
-+ */
-+#define RWLOCK_READERS(rwlock_ptr) rwlock_readers(rwlock_ptr)
-+
-+extern inline int rwlock_readers(rwlock_t *rwlock_ptr)
-+{
-+ int tmp = (int) rwlock_ptr->lock;
-+ /* read and write lock attempts may cause the lock value to temporarily */
-+ /* be negative. Until it is >= 0 we know nothing (i. e. can't tell if */
-+ /* is -1 because it was write locked and somebody tried to read lock it */
-+ /* or if it is -1 because it was read locked and somebody tried to write*/
-+ /* lock it. ........................................................... */
-+ do {
-+ tmp = (int) rwlock_ptr->lock;
-+ } while (tmp < 0);
-+ if (tmp == 0) return(0);
-+ else return(RW_LOCK_BIAS-tmp);
-+}
-+
-+/*
-+ * return true if rwlock is write locked
-+ * (note that other lock attempts can cause the lock value to be negative)
-+ */
-+#define RWLOCK_IS_WRITE_LOCKED(rwlock_ptr) ((rwlock_ptr)->lock <= 0)
-+#define IABS(x) ((x) > 0 ? (x) : -(x))
-+#define RWLOCK_IS_READ_LOCKED(rwlock_ptr) ((IABS((rwlock_ptr)->lock) % RW_LOCK_BIAS) != 0)
-+
-+/* this is a lot of typing just to get gcc to emit "rdtsc" */
-+static inline long long get_cycles64 (void)
-+{
-+#ifndef CONFIG_X86_TSC
-+ #error this code requires CONFIG_X86_TSC
-+#else
-+ union longlong_u {
-+ long long intlong;
-+ struct intint_s {
-+ uint32_t eax;
-+ uint32_t edx;
-+ } intint;
-+ } longlong;
-+
-+ rdtsc(longlong.intint.eax,longlong.intint.edx);
-+ return longlong.intlong;
-+#endif
-+}
-+
-+#endif /* _I386_LOCKMETER_H */
---- linux-2.6.0-test1/include/asm-i386/mach-bigsmp/mach_apic.h 2003-06-16 22:32:21.000000000 -0700
-+++ 25/include/asm-i386/mach-bigsmp/mach_apic.h 2003-07-19 17:04:07.000000000 -0700
-@@ -20,7 +20,7 @@ static inline int apic_id_registered(voi
- }
-
- #define APIC_DFR_VALUE (APIC_DFR_CLUSTER)
--static inline unsigned long target_cpus(void)
-+static inline cpumask_t target_cpus(void)
- {
- return cpu_online_map;
- }
-@@ -29,14 +29,15 @@ static inline unsigned long target_cpus(
- #define INT_DELIVERY_MODE dest_LowestPrio
- #define INT_DEST_MODE 1 /* logical delivery broadcast to all procs */
-
--#define APIC_BROADCAST_ID (0x0f)
--static inline unsigned long check_apicid_used(unsigned long bitmap, int apicid)
--{
-+#define APIC_BROADCAST_ID (0xff)
-+static inline unsigned long check_apicid_used(physid_mask_t bitmap, int apicid)
-+{
- return 0;
--}
-+}
-+
- static inline unsigned long check_apicid_present(int bit)
- {
-- return (phys_cpu_present_map & (1 << bit));
-+ return physid_isset(bit, phys_cpu_present_map);
- }
-
- #define apicid_cluster(apicid) (apicid & 0xF0)
-@@ -88,9 +89,9 @@ static inline int cpu_present_to_apicid(
- return (int) bios_cpu_apicid[mps_cpu];
- }
-
--static inline unsigned long apicid_to_cpu_present(int phys_apicid)
-+static inline physid_mask_t apicid_to_cpu_present(int phys_apicid)
- {
-- return (1ul << phys_apicid);
-+ return physid_mask_of_physid(phys_apicid);
- }
-
- extern volatile u8 cpu_2_logical_apicid[];
-@@ -108,13 +109,13 @@ static inline int mpc_apic_id(struct mpc
- (m->mpc_cpufeature & CPU_FAMILY_MASK) >> 8,
- (m->mpc_cpufeature & CPU_MODEL_MASK) >> 4,
- m->mpc_apicver);
-- return (m->mpc_apicid);
-+ return m->mpc_apicid;
- }
-
--static inline ulong ioapic_phys_id_map(ulong phys_map)
-+static inline physid_mask_t ioapic_phys_id_map(physid_mask_t phys_map)
- {
- /* For clustered we don't have a good way to do this yet - hack */
-- return (0x0F);
-+ return physids_promote(0xFUL);
- }
-
- #define WAKE_SECONDARY_VIA_INIT
-@@ -132,25 +133,25 @@ static inline int check_phys_apicid_pres
- return (1);
- }
-
--static inline unsigned int cpu_mask_to_apicid (unsigned long cpumask)
-+static inline unsigned int cpu_mask_to_apicid(cpumask_const_t cpumask)
- {
- int num_bits_set;
- int cpus_found = 0;
- int cpu;
- int apicid;
-
-- num_bits_set = hweight32(cpumask);
-+ num_bits_set = cpus_weight_const(cpumask);
- /* Return id to all */
-- if (num_bits_set == 32)
-+ if (num_bits_set == NR_CPUS)
- return (int) 0xFF;
- /*
- * The cpus in the mask must all be on the apic cluster. If are not
- * on the same apicid cluster return default value of TARGET_CPUS.
- */
-- cpu = ffs(cpumask)-1;
-+ cpu = first_cpu_const(cpumask);
- apicid = cpu_to_logical_apicid(cpu);
- while (cpus_found < num_bits_set) {
-- if (cpumask & (1 << cpu)) {
-+ if (cpu_isset_const(cpu, cpumask)) {
- int new_apicid = cpu_to_logical_apicid(cpu);
- if (apicid_cluster(apicid) !=
- apicid_cluster(new_apicid)){
---- linux-2.6.0-test1/include/asm-i386/mach-bigsmp/mach_ipi.h 2003-06-14 12:18:08.000000000 -0700
-+++ 25/include/asm-i386/mach-bigsmp/mach_ipi.h 2003-07-19 17:04:07.000000000 -0700
-@@ -1,18 +1,19 @@
- #ifndef __ASM_MACH_IPI_H
- #define __ASM_MACH_IPI_H
-
--inline void send_IPI_mask_sequence(int mask, int vector);
-+inline void send_IPI_mask_sequence(cpumask_t mask, int vector);
-
--static inline void send_IPI_mask(int mask, int vector)
-+static inline void send_IPI_mask(cpumask_t mask, int vector)
- {
- send_IPI_mask_sequence(mask, vector);
- }
-
- static inline void send_IPI_allbutself(int vector)
- {
-- unsigned long mask = cpu_online_map & ~(1 << smp_processor_id());
-+ cpumask_t mask = cpu_online_map;
-+ cpu_clear(smp_processor_id(), mask);
-
-- if (mask)
-+ if (!cpus_empty(mask))
- send_IPI_mask(mask, vector);
- }
-
---- linux-2.6.0-test1/include/asm-i386/mach-default/mach_apic.h 2003-06-16 22:32:21.000000000 -0700
-+++ 25/include/asm-i386/mach-default/mach_apic.h 2003-07-19 17:04:07.000000000 -0700
-@@ -5,12 +5,12 @@
-
- #define APIC_DFR_VALUE (APIC_DFR_FLAT)
-
--static inline unsigned long target_cpus(void)
-+static inline cpumask_t target_cpus(void)
- {
- #ifdef CONFIG_SMP
- return cpu_online_map;
- #else
-- return 1;
-+ return cpumask_of_cpu(0);
- #endif
- }
- #define TARGET_CPUS (target_cpus())
-@@ -21,16 +21,20 @@ static inline unsigned long target_cpus(
- #define INT_DELIVERY_MODE dest_LowestPrio
- #define INT_DEST_MODE 1 /* logical delivery broadcast to all procs */
-
-+/*
-+ * this isn't really broadcast, just a (potentially inaccurate) upper
-+ * bound for valid physical APIC id's
-+ */
- #define APIC_BROADCAST_ID 0x0F
-
--static inline unsigned long check_apicid_used(unsigned long bitmap, int apicid)
--{
-- return (bitmap & (1UL << apicid));
--}
-+static inline unsigned long check_apicid_used(physid_mask_t bitmap, int apicid)
-+{
-+ return physid_isset(apicid, bitmap);
-+}
-
--static inline unsigned long check_apicid_present(int bit)
-+static inline unsigned long check_apicid_present(int bit)
- {
-- return (phys_cpu_present_map & (1UL << bit));
-+ return physid_isset(bit, phys_cpu_present_map);
- }
-
- /*
-@@ -50,7 +54,7 @@ static inline void init_apic_ldr(void)
- apic_write_around(APIC_LDR, val);
- }
-
--static inline unsigned long ioapic_phys_id_map(unsigned long phys_map)
-+static inline physid_mask_t ioapic_phys_id_map(physid_mask_t phys_map)
- {
- return phys_map;
- }
-@@ -82,9 +86,9 @@ static inline int cpu_present_to_apicid(
- return mps_cpu;
- }
-
--static inline unsigned long apicid_to_cpu_present(int phys_apicid)
-+static inline physid_mask_t apicid_to_cpu_present(int phys_apicid)
- {
-- return (1ul << phys_apicid);
-+ return physid_mask_of_physid(phys_apicid);
- }
-
- static inline int mpc_apic_id(struct mpc_config_processor *m,
-@@ -104,18 +108,17 @@ static inline void setup_portio_remap(vo
-
- static inline int check_phys_apicid_present(int boot_cpu_physical_apicid)
- {
-- return test_bit(boot_cpu_physical_apicid, &phys_cpu_present_map);
-+ return physid_isset(boot_cpu_physical_apicid, phys_cpu_present_map);
- }
-
- static inline int apic_id_registered(void)
- {
-- return (test_bit(GET_APIC_ID(apic_read(APIC_ID)),
-- &phys_cpu_present_map));
-+ return physid_isset(GET_APIC_ID(apic_read(APIC_ID)), phys_cpu_present_map);
- }
-
--static inline unsigned int cpu_mask_to_apicid (unsigned long cpumask)
-+static inline unsigned int cpu_mask_to_apicid(cpumask_const_t cpumask)
- {
-- return cpumask;
-+ return cpus_coerce_const(cpumask);
- }
-
- static inline void enable_apic_mode(void)
---- linux-2.6.0-test1/include/asm-i386/mach-default/mach_ipi.h 2003-06-14 12:18:33.000000000 -0700
-+++ 25/include/asm-i386/mach-default/mach_ipi.h 2003-07-19 17:04:07.000000000 -0700
-@@ -1,10 +1,10 @@
- #ifndef __ASM_MACH_IPI_H
- #define __ASM_MACH_IPI_H
-
--inline void send_IPI_mask_bitmask(int mask, int vector);
-+inline void send_IPI_mask_bitmask(cpumask_t mask, int vector);
- inline void __send_IPI_shortcut(unsigned int shortcut, int vector);
-
--static inline void send_IPI_mask(int mask, int vector)
-+static inline void send_IPI_mask(cpumask_t mask, int vector)
- {
- send_IPI_mask_bitmask(mask, vector);
- }
---- linux-2.6.0-test1/include/asm-i386/mach-es7000/mach_apic.h 2003-06-16 22:32:21.000000000 -0700
-+++ 25/include/asm-i386/mach-es7000/mach_apic.h 2003-07-19 17:04:07.000000000 -0700
-@@ -11,12 +11,12 @@ static inline int apic_id_registered(voi
- return (1);
- }
-
--static inline unsigned long target_cpus(void)
-+static inline cpumask_t target_cpus(void)
- {
- #if defined CONFIG_ES7000_CLUSTERED_APIC
-- return (0xff);
-+ return CPU_MASK_ALL;
- #else
-- return (bios_cpu_apicid[smp_processor_id()]);
-+ return cpumask_of_cpu(bios_cpu_apicid[smp_processor_id()]);
- #endif
- }
- #define TARGET_CPUS (target_cpus())
-@@ -40,13 +40,13 @@ static inline unsigned long target_cpus(
-
- #define APIC_BROADCAST_ID (0xff)
-
--static inline unsigned long check_apicid_used(unsigned long bitmap, int apicid)
-+static inline unsigned long check_apicid_used(physid_mask_t bitmap, int apicid)
- {
- return 0;
- }
- static inline unsigned long check_apicid_present(int bit)
- {
-- return (phys_cpu_present_map & (1 << bit));
-+ return physid_isset(bit, phys_cpu_present_map);
- }
-
- #define apicid_cluster(apicid) (apicid & 0xF0)
-@@ -88,7 +88,7 @@ static inline void clustered_apic_check(
- int apic = bios_cpu_apicid[smp_processor_id()];
- printk("Enabling APIC mode: %s. Using %d I/O APICs, target cpus %lx\n",
- (apic_version[apic] == 0x14) ?
-- "Physical Cluster" : "Logical Cluster", nr_ioapics, TARGET_CPUS);
-+ "Physical Cluster" : "Logical Cluster", nr_ioapics, cpus_coerce(TARGET_CPUS));
- }
-
- static inline int multi_timer_check(int apic, int irq)
-@@ -110,10 +110,13 @@ static inline int cpu_present_to_apicid(
- return (int) bios_cpu_apicid[mps_cpu];
- }
-
--static inline unsigned long apicid_to_cpu_present(int phys_apicid)
-+static inline physid_mask_t apicid_to_cpu_present(int phys_apicid)
- {
-- static int cpu = 0;
-- return (1ul << cpu++);
-+ static int id = 0;
-+ physid_mask_t mask;
-+ mask = physid_mask_of_physid(id);
-+ ++id;
-+ return mask;
- }
-
- extern volatile u8 cpu_2_logical_apicid[];
-@@ -123,7 +126,7 @@ static inline int cpu_to_logical_apicid(
- return (int)cpu_2_logical_apicid[cpu];
- }
-
--static inline int mpc_apic_id(struct mpc_config_processor *m, int quad)
-+static inline int mpc_apic_id(struct mpc_config_processor *m, struct mpc_config_translation *unused)
- {
- printk("Processor #%d %ld:%ld APIC version %d\n",
- m->mpc_apicid,
-@@ -133,10 +136,10 @@ static inline int mpc_apic_id(struct mpc
- return (m->mpc_apicid);
- }
-
--static inline ulong ioapic_phys_id_map(ulong phys_map)
-+static inline physid_mask_t ioapic_phys_id_map(physid_mask_t phys_map)
- {
- /* For clustered we don't have a good way to do this yet - hack */
-- return (0xff);
-+ return physids_promote(0xff);
- }
-
-
-@@ -151,32 +154,30 @@ static inline int check_phys_apicid_pres
- return (1);
- }
-
--static inline unsigned int cpu_mask_to_apicid (unsigned long cpumask)
-+static inline unsigned int cpu_mask_to_apicid(cpumask_const_t cpumask)
- {
- int num_bits_set;
- int cpus_found = 0;
- int cpu;
- int apicid;
-
-- if (cpumask == TARGET_CPUS)
-- return cpumask;
-- num_bits_set = hweight32(cpumask);
-+ num_bits_set = cpus_weight_const(cpumask);
- /* Return id to all */
-- if (num_bits_set == 32)
-- return TARGET_CPUS;
-+ if (num_bits_set == NR_CPUS)
-+ return 0xFF;
- /*
- * The cpus in the mask must all be on the apic cluster. If are not
- * on the same apicid cluster return default value of TARGET_CPUS.
- */
-- cpu = ffs(cpumask)-1;
-+ cpu = first_cpu_const(cpumask);
- apicid = cpu_to_logical_apicid(cpu);
- while (cpus_found < num_bits_set) {
-- if (cpumask & (1 << cpu)) {
-+ if (cpu_isset_const(cpu, cpumask)) {
- int new_apicid = cpu_to_logical_apicid(cpu);
- if (apicid_cluster(apicid) !=
- apicid_cluster(new_apicid)){
- printk ("%s: Not a valid mask!\n",__FUNCTION__);
-- return TARGET_CPUS;
-+ return 0xFF;
- }
- apicid = new_apicid;
- cpus_found++;
---- linux-2.6.0-test1/include/asm-i386/mach-es7000/mach_ipi.h 2003-06-16 22:32:21.000000000 -0700
-+++ 25/include/asm-i386/mach-es7000/mach_ipi.h 2003-07-19 17:04:07.000000000 -0700
-@@ -1,18 +1,19 @@
- #ifndef __ASM_MACH_IPI_H
- #define __ASM_MACH_IPI_H
-
--static inline void send_IPI_mask_sequence(int mask, int vector);
-+static inline void send_IPI_mask_sequence(cpumask_t mask, int vector);
-
--static inline void send_IPI_mask(int mask, int vector)
-+static inline void send_IPI_mask(cpumask_t mask, int vector)
- {
- send_IPI_mask_sequence(mask, vector);
- }
-
- static inline void send_IPI_allbutself(int vector)
- {
-- unsigned long mask = cpu_online_map & ~(1 << smp_processor_id());
--
-- if (mask)
-+ cpumask_t mask = cpumask_of_cpu(smp_processor_id());
-+ cpus_complement(mask);
-+ cpus_and(mask, mask, cpu_online_map);
-+ if (!cpus_empty(mask))
- send_IPI_mask(mask, vector);
- }
-
---- linux-2.6.0-test1/include/asm-i386/mach-numaq/mach_apic.h 2003-06-16 22:32:21.000000000 -0700
-+++ 25/include/asm-i386/mach-numaq/mach_apic.h 2003-07-19 17:04:07.000000000 -0700
-@@ -6,7 +6,13 @@
-
- #define APIC_DFR_VALUE (APIC_DFR_CLUSTER)
-
--#define TARGET_CPUS (~0UL)
-+static inline cpumask_t target_cpus(void)
-+{
-+ cpumask_t tmp = CPU_MASK_ALL;
-+ return tmp;
-+}
-+
-+#define TARGET_CPUS (target_cpus())
-
- #define NO_BALANCE_IRQ (1)
- #define esr_disable (1)
-@@ -15,13 +21,13 @@
- #define INT_DEST_MODE 0 /* physical delivery on LOCAL quad */
-
- #define APIC_BROADCAST_ID 0x0F
--#define check_apicid_used(bitmap, apicid) ((bitmap) & (1 << (apicid)))
--#define check_apicid_present(bit) (phys_cpu_present_map & (1 << bit))
-+#define check_apicid_used(bitmap, apicid) physid_isset(apicid, bitmap)
-+#define check_apicid_present(bit) physid_isset(bit, phys_cpu_present_map)
- #define apicid_cluster(apicid) (apicid & 0xF0)
-
- static inline int apic_id_registered(void)
- {
-- return (1);
-+ return 1;
- }
-
- static inline void init_apic_ldr(void)
-@@ -41,13 +47,13 @@ static inline void clustered_apic_check(
- */
- static inline int multi_timer_check(int apic, int irq)
- {
-- return (apic != 0 && irq == 0);
-+ return apic != 0 && irq == 0;
- }
-
--static inline ulong ioapic_phys_id_map(ulong phys_map)
-+static inline physid_mask_t ioapic_phys_id_map(physid_mask_t phys_map)
- {
- /* We don't have a good way to do this yet - hack */
-- return 0xf;
-+ return physids_promote(0xFUL);
- }
-
- /* Mapping from cpu number to logical apicid */
-@@ -59,22 +65,25 @@ static inline int cpu_to_logical_apicid(
-
- static inline int cpu_present_to_apicid(int mps_cpu)
- {
-- return ( ((mps_cpu/4)*16) + (1<<(mps_cpu%4)) );
-+ return ((mps_cpu >> 2) << 4) | (1 << (mps_cpu & 0x3));
- }
-
- static inline int generate_logical_apicid(int quad, int phys_apicid)
- {
-- return ( (quad << 4) + (phys_apicid ? phys_apicid << 1 : 1) );
-+ return (quad << 4) + (phys_apicid ? phys_apicid << 1 : 1);
- }
-
- static inline int apicid_to_node(int logical_apicid)
- {
-- return (logical_apicid >> 4);
-+ return logical_apicid >> 4;
- }
-
--static inline unsigned long apicid_to_cpu_present(int logical_apicid)
-+static inline physid_mask_t apicid_to_cpu_present(int logical_apicid)
- {
-- return ( (logical_apicid&0xf) << (4*apicid_to_node(logical_apicid)) );
-+ int node = apicid_to_node(logical_apicid);
-+ int cpu = __ffs(logical_apicid & 0xf);
-+
-+ return physid_mask_of_physid(cpu + 4*node);
- }
-
- static inline int mpc_apic_id(struct mpc_config_processor *m,
-@@ -115,7 +124,7 @@ static inline void enable_apic_mode(void
- * We use physical apicids here, not logical, so just return the default
- * physical broadcast to stop people from breaking us
- */
--static inline unsigned int cpu_mask_to_apicid (unsigned long cpumask)
-+static inline unsigned int cpu_mask_to_apicid(cpumask_const_t cpumask)
- {
- return (int) 0xF;
- }
---- linux-2.6.0-test1/include/asm-i386/mach-numaq/mach_ipi.h 2003-06-14 12:18:29.000000000 -0700
-+++ 25/include/asm-i386/mach-numaq/mach_ipi.h 2003-07-19 17:04:07.000000000 -0700
-@@ -1,18 +1,19 @@
- #ifndef __ASM_MACH_IPI_H
- #define __ASM_MACH_IPI_H
-
--static inline void send_IPI_mask_sequence(int mask, int vector);
-+static inline void send_IPI_mask_sequence(cpumask_t, int vector);
-
--static inline void send_IPI_mask(int mask, int vector)
-+static inline void send_IPI_mask(cpumask_t mask, int vector)
- {
- send_IPI_mask_sequence(mask, vector);
- }
-
- static inline void send_IPI_allbutself(int vector)
- {
-- unsigned long mask = cpu_online_map & ~(1 << smp_processor_id());
-+ cpumask_t mask = cpu_online_map;
-+ cpu_clear(smp_processor_id(), mask);
-
-- if (mask)
-+ if (!cpus_empty(mask))
- send_IPI_mask(mask, vector);
- }
-
---- linux-2.6.0-test1/include/asm-i386/mach-summit/mach_apic.h 2003-06-16 22:32:21.000000000 -0700
-+++ 25/include/asm-i386/mach-summit/mach_apic.h 2003-07-19 17:04:07.000000000 -0700
-@@ -18,17 +18,18 @@ static inline unsigned long xapic_phys_t
-
- #define APIC_DFR_VALUE (APIC_DFR_CLUSTER)
-
--static inline unsigned long target_cpus(void)
-+static inline cpumask_t target_cpus(void)
- {
-- return (~0UL);
-+ cpumask_t tmp = CPU_MASK_ALL;
-+ return tmp;
- }
- #define TARGET_CPUS (target_cpus())
-
- #define INT_DELIVERY_MODE (dest_Fixed)
- #define INT_DEST_MODE 1 /* logical delivery broadcast to all procs */
-
--#define APIC_BROADCAST_ID (0x0F)
--static inline unsigned long check_apicid_used(unsigned long bitmap, int apicid)
-+#define APIC_BROADCAST_ID (0xFF)
-+static inline unsigned long check_apicid_used(physid_mask_t bitmap, int apicid)
- {
- return 0;
- }
-@@ -72,7 +73,7 @@ static inline void clustered_apic_check(
-
- static inline int apicid_to_node(int logical_apicid)
- {
-- return (logical_apicid >> 5); /* 2 clusterids per CEC */
-+ return logical_apicid >> 5; /* 2 clusterids per CEC */
- }
-
- /* Mapping from cpu number to logical apicid */
-@@ -87,15 +88,15 @@ static inline int cpu_present_to_apicid(
- return (int) bios_cpu_apicid[mps_cpu];
- }
-
--static inline ulong ioapic_phys_id_map(ulong phys_map)
-+static inline physid_mask_t ioapic_phys_id_map(physid_mask_t phys_id_map)
- {
- /* For clustered we don't have a good way to do this yet - hack */
-- return 0x0F;
-+ return physids_promote(0x0F);
- }
-
--static inline unsigned long apicid_to_cpu_present(int apicid)
-+static inline physid_mask_t apicid_to_cpu_present(int apicid)
- {
-- return 1;
-+ return physid_mask_of_physid(0);
- }
-
- static inline int mpc_apic_id(struct mpc_config_processor *m,
-@@ -122,25 +123,25 @@ static inline void enable_apic_mode(void
- {
- }
-
--static inline unsigned int cpu_mask_to_apicid (unsigned long cpumask)
-+static inline unsigned int cpu_mask_to_apicid(cpumask_const_t cpumask)
- {
- int num_bits_set;
- int cpus_found = 0;
- int cpu;
- int apicid;
-
-- num_bits_set = hweight32(cpumask);
-+ num_bits_set = cpus_weight_const(cpumask);
- /* Return id to all */
-- if (num_bits_set == 32)
-+ if (num_bits_set == NR_CPUS)
- return (int) 0xFF;
- /*
- * The cpus in the mask must all be on the apic cluster. If are not
- * on the same apicid cluster return default value of TARGET_CPUS.
- */
-- cpu = ffs(cpumask)-1;
-+ cpu = first_cpu_const(cpumask);
- apicid = cpu_to_logical_apicid(cpu);
- while (cpus_found < num_bits_set) {
-- if (cpumask & (1 << cpu)) {
-+ if (cpu_isset_const(cpu, cpumask)) {
- int new_apicid = cpu_to_logical_apicid(cpu);
- if (apicid_cluster(apicid) !=
- apicid_cluster(new_apicid)){
---- linux-2.6.0-test1/include/asm-i386/mach-summit/mach_ipi.h 2003-06-14 12:17:59.000000000 -0700
-+++ 25/include/asm-i386/mach-summit/mach_ipi.h 2003-07-19 17:04:07.000000000 -0700
-@@ -1,18 +1,19 @@
- #ifndef __ASM_MACH_IPI_H
- #define __ASM_MACH_IPI_H
-
--inline void send_IPI_mask_sequence(int mask, int vector);
-+inline void send_IPI_mask_sequence(cpumask_t mask, int vector);
-
--static inline void send_IPI_mask(int mask, int vector)
-+static inline void send_IPI_mask(cpumask_t mask, int vector)
- {
- send_IPI_mask_sequence(mask, vector);
- }
-
- static inline void send_IPI_allbutself(int vector)
- {
-- unsigned long mask = cpu_online_map & ~(1 << smp_processor_id());
-+ cpumask_t mask = cpu_online_map;
-+ cpu_clear(smp_processor_id(), mask);
-
-- if (mask)
-+ if (!cpus_empty(mask))
- send_IPI_mask(mask, vector);
- }
-
---- linux-2.6.0-test1/include/asm-i386/mach-visws/mach_apic.h 2003-06-16 22:32:21.000000000 -0700
-+++ 25/include/asm-i386/mach-visws/mach_apic.h 2003-07-19 17:04:07.000000000 -0700
-@@ -12,17 +12,16 @@
- #ifdef CONFIG_SMP
- #define TARGET_CPUS cpu_online_map
- #else
-- #define TARGET_CPUS 0x01
-+ #define TARGET_CPUS cpumask_of_cpu(0)
- #endif
-
- #define APIC_BROADCAST_ID 0x0F
--#define check_apicid_used(bitmap, apicid) (bitmap & (1 << apicid))
--#define check_apicid_present(bit) (phys_cpu_present_map & (1 << bit))
-+#define check_apicid_used(bitmap, apicid) physid_isset(apicid, bitmap)
-+#define check_apicid_present(bit) physid_isset(bit, phys_cpu_present_map)
-
- static inline int apic_id_registered(void)
- {
-- return (test_bit(GET_APIC_ID(apic_read(APIC_ID)),
-- &phys_cpu_present_map));
-+ return physid_isset(GET_APIC_ID(apic_read(APIC_ID)), phys_cpu_present_map);
- }
-
- /*
-@@ -61,9 +60,9 @@ static inline int cpu_present_to_apicid(
- return mps_cpu;
- }
-
--static inline unsigned long apicid_to_cpu_present(int apicid)
-+static inline physid_mask_t apicid_to_cpu_present(int apicid)
- {
-- return (1ul << apicid);
-+ return physid_mask_of_physid(apicid);
- }
-
- #define WAKE_SECONDARY_VIA_INIT
-@@ -78,11 +77,11 @@ static inline void enable_apic_mode(void
-
- static inline int check_phys_apicid_present(int boot_cpu_physical_apicid)
- {
-- return test_bit(boot_cpu_physical_apicid, &phys_cpu_present_map);
-+ return physid_isset(boot_cpu_physical_apicid, phys_cpu_present_map);
- }
-
--static inline unsigned int cpu_mask_to_apicid (unsigned long cpumask)
-+static inline unsigned int cpu_mask_to_apicid(cpumask_const_t cpumask)
- {
-- return cpumask;
-+ return cpus_coerce_const(cpumask);
- }
- #endif /* __ASM_MACH_APIC_H */
---- linux-2.6.0-test1/include/asm-i386/mmu_context.h 2003-07-10 18:50:32.000000000 -0700
-+++ 25/include/asm-i386/mmu_context.h 2003-07-19 17:04:07.000000000 -0700
-@@ -31,12 +31,12 @@ static inline void switch_mm(struct mm_s
-
- if (likely(prev != next)) {
- /* stop flush ipis for the previous mm */
-- clear_bit(cpu, &prev->cpu_vm_mask);
-+ cpu_clear(cpu, prev->cpu_vm_mask);
- #ifdef CONFIG_SMP
- cpu_tlbstate[cpu].state = TLBSTATE_OK;
- cpu_tlbstate[cpu].active_mm = next;
- #endif
-- set_bit(cpu, &next->cpu_vm_mask);
-+ cpu_set(cpu, next->cpu_vm_mask);
-
- /* Re-load page tables */
- load_cr3(next->pgd);
-@@ -52,7 +52,7 @@ static inline void switch_mm(struct mm_s
- cpu_tlbstate[cpu].state = TLBSTATE_OK;
- BUG_ON(cpu_tlbstate[cpu].active_mm != next);
-
-- if (!test_and_set_bit(cpu, &next->cpu_vm_mask)) {
-+ if (!cpu_test_and_set(cpu, next->cpu_vm_mask)) {
- /* We were in lazy tlb mode and leave_mm disabled
- * tlb flush IPI delivery. We must reload %cr3.
- */
---- linux-2.6.0-test1/include/asm-i386/mpspec.h 2003-06-16 22:32:21.000000000 -0700
-+++ 25/include/asm-i386/mpspec.h 2003-07-19 17:04:07.000000000 -0700
-@@ -1,6 +1,7 @@
- #ifndef __ASM_MPSPEC_H
- #define __ASM_MPSPEC_H
-
-+#include <linux/cpumask.h>
- #include <asm/mpspec_def.h>
- #include <mach_mpspec.h>
-
-@@ -11,7 +12,6 @@ extern int quad_local_to_mp_bus_id [NR_C
- extern int mp_bus_id_to_pci_bus [MAX_MP_BUSSES];
-
- extern unsigned int boot_cpu_physical_apicid;
--extern unsigned long phys_cpu_present_map;
- extern int smp_found_config;
- extern void find_smp_config (void);
- extern void get_smp_config (void);
-@@ -41,5 +41,49 @@ extern void mp_config_ioapic_for_sci(int
- extern void mp_parse_prt (void);
- #endif /*CONFIG_ACPI_BOOT*/
-
-+#define PHYSID_ARRAY_SIZE BITS_TO_LONGS(MAX_APICS)
-+
-+struct physid_mask
-+{
-+ unsigned long mask[PHYSID_ARRAY_SIZE];
-+};
-+
-+typedef struct physid_mask physid_mask_t;
-+
-+#define physid_set(physid, map) set_bit(physid, (map).mask)
-+#define physid_clear(physid, map) clear_bit(physid, (map).mask)
-+#define physid_isset(physid, map) test_bit(physid, (map).mask)
-+#define physid_test_and_set(physid, map) test_and_set_bit(physid, (map).mask)
-+
-+#define physids_and(dst, src1, src2) bitmap_and((dst).mask, (src1).mask, (src2).mask, MAX_APICS)
-+#define physids_or(dst, src1, src2) bitmap_or((dst).mask, (src1).mask, (src2).mask, MAX_APICS)
-+#define physids_clear(map) bitmap_clear((map).mask, MAX_APICS)
-+#define physids_complement(map) bitmap_complement((map).mask, MAX_APICS)
-+#define physids_empty(map) bitmap_empty((map).mask, MAX_APICS)
-+#define physids_equal(map1, map2) bitmap_equal((map1).mask, (map2).mask, MAX_APICS)
-+#define physids_weight(map) bitmap_weight((map).mask, MAX_APICS)
-+#define physids_shift_right(d, s, n) bitmap_shift_right((d).mask, (s).mask, n, MAX_APICS)
-+#define physids_shift_left(d, s, n) bitmap_shift_left((d).mask, (s).mask, n, MAX_APICS)
-+#define physids_coerce(map) ((map).mask[0])
-+
-+#define physids_promote(physids) \
-+ ({ \
-+ physid_mask_t __physid_mask = PHYSID_MASK_NONE; \
-+ __physid_mask.mask[0] = physids; \
-+ __physid_mask; \
-+ })
-+
-+#define physid_mask_of_physid(physid) \
-+ ({ \
-+ physid_mask_t __physid_mask = PHYSID_MASK_NONE; \
-+ physid_set(physid, __physid_mask); \
-+ __physid_mask; \
-+ })
-+
-+#define PHYSID_MASK_ALL { {[0 ... PHYSID_ARRAY_SIZE-1] = ~0UL} }
-+#define PHYSID_MASK_NONE { {[0 ... PHYSID_ARRAY_SIZE-1] = 0UL} }
-+
-+extern physid_mask_t phys_cpu_present_map;
-+
- #endif
-
---- linux-2.6.0-test1/include/asm-i386/numaq.h 2003-06-14 12:18:22.000000000 -0700
-+++ 25/include/asm-i386/numaq.h 2003-07-19 17:04:07.000000000 -0700
-@@ -28,7 +28,7 @@
-
- #ifdef CONFIG_X86_NUMAQ
-
--#define MAX_NUMNODES 8
-+#define MAX_NUMNODES 16
- extern void get_memcfg_numaq(void);
- #define get_memcfg_numa() get_memcfg_numaq()
-
-@@ -159,7 +159,7 @@ struct sys_cfg_data {
-
- static inline unsigned long *get_zholes_size(int nid)
- {
-- return 0;
-+ return NULL;
- }
- #endif /* CONFIG_X86_NUMAQ */
- #endif /* NUMAQ_H */
---- linux-2.6.0-test1/include/asm-i386/pgalloc.h 2003-06-14 12:17:57.000000000 -0700
-+++ 25/include/asm-i386/pgalloc.h 2003-07-19 17:07:16.000000000 -0700
-@@ -45,7 +45,8 @@ static inline void pte_free(struct page
- * (In the PAE case we free the pmds as part of the pgd.)
- */
-
--#define pmd_alloc_one(mm, addr) ({ BUG(); ((pmd_t *)2); })
-+#define pmd_alloc_one(mm, addr) ({ BUG(); ((struct page *)2); })
-+#define pmd_alloc_one_kernel(mm, addr) ({ BUG(); ((pmd_t *)2); })
- #define pmd_free(x) do { } while (0)
- #define __pmd_free_tlb(tlb,x) do { } while (0)
- #define pgd_populate(mm, pmd, pte) BUG()
---- linux-2.6.0-test1/include/asm-i386/pgtable-2level.h 2003-06-14 12:18:22.000000000 -0700
-+++ 25/include/asm-i386/pgtable-2level.h 2003-07-19 17:07:16.000000000 -0700
-@@ -48,13 +48,15 @@ static inline int pgd_present(pgd_t pgd)
- #define set_pmd(pmdptr, pmdval) (*(pmdptr) = pmdval)
- #define set_pgd(pgdptr, pgdval) (*(pgdptr) = pgdval)
-
--#define pgd_page(pgd) \
--((unsigned long) __va(pgd_val(pgd) & PAGE_MASK))
-+#define pgd_page(pgd) pfn_to_page(pgd_val(pgd) >> PAGE_SHIFT)
-+
-+#define pmd_offset_map(pgd, addr) ({ (pmd_t *)(pgd); })
-+#define pmd_offset_map_nested(pgd, addr) pmd_offset_map(pgd, addr)
-+#define pmd_offset_kernel(pgd, addr) pmd_offset_map(pgd, addr)
-+
-+#define pmd_unmap(pmd) do { } while (0)
-+#define pmd_unmap_nested(pmd) do { } while (0)
-
--static inline pmd_t * pmd_offset(pgd_t * dir, unsigned long address)
--{
-- return (pmd_t *) dir;
--}
- #define ptep_get_and_clear(xp) __pte(xchg(&(xp)->pte_low, 0))
- #define pte_same(a, b) ((a).pte_low == (b).pte_low)
- #define pte_page(x) pfn_to_page(pte_pfn(x))
---- linux-2.6.0-test1/include/asm-i386/pgtable-3level.h 2003-06-26 22:07:25.000000000 -0700
-+++ 25/include/asm-i386/pgtable-3level.h 2003-07-19 17:07:16.000000000 -0700
-@@ -64,12 +64,32 @@ static inline void set_pte(pte_t *ptep,
- */
- static inline void pgd_clear (pgd_t * pgd) { }
-
--#define pgd_page(pgd) \
--((unsigned long) __va(pgd_val(pgd) & PAGE_MASK))
-+static inline unsigned long pgd_pfn(pgd_t pgd)
-+{
-+ return pgd_val(pgd) >> PAGE_SHIFT;
-+}
-+
-+#define pgd_page(pgd) pfn_to_page(pgd_pfn(pgd))
-+
-+#define pmd_offset_kernel(pgd, addr) \
-+ ((pmd_t *)__va(pgd_val(*(pgd)) & PAGE_MASK) + pmd_index(addr))
-
- /* Find an entry in the second-level page table.. */
--#define pmd_offset(dir, address) ((pmd_t *) pgd_page(*(dir)) + \
-- pmd_index(address))
-+#ifdef CONFIG_HIGHPMD
-+#define __pmd_offset(pgd, addr, type) \
-+ ((pmd_t *)kmap_atomic(pgd_page(*(pgd)), type) + pmd_index(addr))
-+#define __pmd_unmap(pmd, type) kunmap_atomic(pmd, type)
-+#else
-+#define __pmd_offset(pgd, addr, type) \
-+ ((pmd_t *)__va(pgd_val(*(pgd)) & PAGE_MASK) + pmd_index(addr))
-+#define __pmd_unmap(pmd, type) do { } while (0)
-+#endif
-+
-+#define pmd_offset_map(pgd, addr) __pmd_offset(pgd, addr, KM_PMD0)
-+#define pmd_offset_map_nested(pgd, addr) __pmd_offset(pgd, addr, KM_PMD1)
-+
-+#define pmd_unmap(pmd) __pmd_unmap(pmd, KM_PMD0);
-+#define pmd_unmap_nested(pmd) __pmd_unmap(pmd, KM_PMD1);
-
- static inline pte_t ptep_get_and_clear(pte_t *ptep)
- {
-@@ -123,6 +143,4 @@ static inline pmd_t pfn_pmd(unsigned lon
- #define pgoff_to_pte(off) ((pte_t) { _PAGE_FILE, (off) })
- #define PTE_FILE_MAX_BITS 32
-
--extern struct kmem_cache_s *pae_pgd_cachep;
--
- #endif /* _I386_PGTABLE_3LEVEL_H */
---- linux-2.6.0-test1/include/asm-i386/pgtable.h 2003-06-26 22:07:25.000000000 -0700
-+++ 25/include/asm-i386/pgtable.h 2003-07-19 17:07:16.000000000 -0700
-@@ -21,15 +21,25 @@
- #include <asm/bitops.h>
- #endif
-
--extern pgd_t swapper_pg_dir[1024];
--extern void paging_init(void);
-+#include <linux/slab.h>
-+#include <linux/list.h>
-+#include <linux/spinlock.h>
-
- /*
- * ZERO_PAGE is a global shared page that is always zero: used
- * for zero-mapped memory areas etc..
- */
--extern unsigned long empty_zero_page[1024];
- #define ZERO_PAGE(vaddr) (virt_to_page(empty_zero_page))
-+extern unsigned long empty_zero_page[1024];
-+extern pgd_t swapper_pg_dir[1024];
-+extern kmem_cache_t *pgd_cache;
-+extern spinlock_t pgd_lock;
-+extern struct list_head pgd_list;
-+
-+void pgd_ctor(void *, kmem_cache_t *, unsigned long);
-+void pgd_dtor(void *, kmem_cache_t *, unsigned long);
-+void pgtable_cache_init(void);
-+void paging_init(void);
-
- #endif /* !__ASSEMBLY__ */
-
-@@ -41,20 +51,8 @@ extern unsigned long empty_zero_page[102
- #ifndef __ASSEMBLY__
- #ifdef CONFIG_X86_PAE
- # include <asm/pgtable-3level.h>
--
--/*
-- * Need to initialise the X86 PAE caches
-- */
--extern void pgtable_cache_init(void);
--
- #else
- # include <asm/pgtable-2level.h>
--
--/*
-- * No page table caches to initialise
-- */
--#define pgtable_cache_init() do { } while (0)
--
- #endif
- #endif
-
---- linux-2.6.0-test1/include/asm-i386/posix_types.h 2003-06-26 22:07:25.000000000 -0700
-+++ 25/include/asm-i386/posix_types.h 2003-07-19 17:06:39.000000000 -0700
-@@ -7,7 +7,9 @@
- * assume GCC is being used.
- */
-
--typedef unsigned short __kernel_dev_t;
-+#ifdef __GNUC__
-+typedef unsigned long long __kernel_dev_t;
-+#endif
- typedef unsigned long __kernel_ino_t;
- typedef unsigned short __kernel_mode_t;
- typedef unsigned short __kernel_nlink_t;
---- linux-2.6.0-test1/include/asm-i386/rwlock.h 2003-06-26 22:07:25.000000000 -0700
-+++ 25/include/asm-i386/rwlock.h 2003-07-19 17:04:49.000000000 -0700
-@@ -20,28 +20,52 @@
- #define RW_LOCK_BIAS 0x01000000
- #define RW_LOCK_BIAS_STR "0x01000000"
-
--#define __build_read_lock_ptr(rw, helper) \
-- asm volatile(LOCK "subl $1,(%0)\n\t" \
-- "js 2f\n" \
-- "1:\n" \
-- LOCK_SECTION_START("") \
-- "2:\tcall " helper "\n\t" \
-- "jmp 1b\n" \
-- LOCK_SECTION_END \
-- ::"a" (rw) : "memory")
--
--#define __build_read_lock_const(rw, helper) \
-- asm volatile(LOCK "subl $1,%0\n\t" \
-- "js 2f\n" \
-- "1:\n" \
-- LOCK_SECTION_START("") \
-- "2:\tpushl %%eax\n\t" \
-- "leal %0,%%eax\n\t" \
-- "call " helper "\n\t" \
-- "popl %%eax\n\t" \
-- "jmp 1b\n" \
-- LOCK_SECTION_END \
-- :"=m" (*(volatile int *)rw) : : "memory")
-+#ifdef CONFIG_SPINLINE
-+
-+ #define __build_read_lock_ptr(rw, helper) \
-+ asm volatile(LOCK "subl $1,(%0)\n\t" \
-+ "jns 1f\n\t" \
-+ "call " helper "\n\t" \
-+ "1:\t" \
-+ ::"a" (rw) : "memory")
-+
-+ #define __build_read_lock_const(rw, helper) \
-+ asm volatile(LOCK "subl $1,%0\n\t" \
-+ "jns 1f\n\t" \
-+ "pushl %%eax\n\t" \
-+ "leal %0,%%eax\n\t" \
-+ "call " helper "\n\t" \
-+ "popl %%eax\n\t" \
-+ "1:\t" \
-+ :"=m" (*(volatile int *)rw) : : "memory")
-+
-+#else /* !CONFIG_SPINLINE */
-+
-+ #define __build_read_lock_ptr(rw, helper) \
-+ asm volatile(LOCK "subl $1,(%0)\n\t" \
-+ "js 2f\n" \
-+ "1:\n" \
-+ LOCK_SECTION_START("") \
-+ "2:\tcall " helper "\n\t" \
-+ "jmp 1b\n" \
-+ LOCK_SECTION_END \
-+ ::"a" (rw) : "memory")
-+
-+ #define __build_read_lock_const(rw, helper) \
-+ asm volatile(LOCK "subl $1,%0\n\t" \
-+ "js 2f\n" \
-+ "1:\n" \
-+ LOCK_SECTION_START("") \
-+ "2:\tpushl %%eax\n\t" \
-+ "leal %0,%%eax\n\t" \
-+ "call " helper "\n\t" \
-+ "popl %%eax\n\t" \
-+ "jmp 1b\n" \
-+ LOCK_SECTION_END \
-+ :"=m" (*(volatile int *)rw) : : "memory")
-+
-+#endif /* CONFIG_SPINLINE */
-+
-
- #define __build_read_lock(rw, helper) do { \
- if (__builtin_constant_p(rw)) \
-@@ -50,28 +74,51 @@
- __build_read_lock_ptr(rw, helper); \
- } while (0)
-
--#define __build_write_lock_ptr(rw, helper) \
-- asm volatile(LOCK "subl $" RW_LOCK_BIAS_STR ",(%0)\n\t" \
-- "jnz 2f\n" \
-- "1:\n" \
-- LOCK_SECTION_START("") \
-- "2:\tcall " helper "\n\t" \
-- "jmp 1b\n" \
-- LOCK_SECTION_END \
-- ::"a" (rw) : "memory")
--
--#define __build_write_lock_const(rw, helper) \
-- asm volatile(LOCK "subl $" RW_LOCK_BIAS_STR ",%0\n\t" \
-- "jnz 2f\n" \
-- "1:\n" \
-- LOCK_SECTION_START("") \
-- "2:\tpushl %%eax\n\t" \
-- "leal %0,%%eax\n\t" \
-- "call " helper "\n\t" \
-- "popl %%eax\n\t" \
-- "jmp 1b\n" \
-- LOCK_SECTION_END \
-- :"=m" (*(volatile int *)rw) : : "memory")
-+#ifdef CONFIG_SPINLINE
-+
-+ #define __build_write_lock_ptr(rw, helper) \
-+ asm volatile(LOCK "subl $" RW_LOCK_BIAS_STR ",(%0)\n\t" \
-+ "jz 1f\n\t" \
-+ "call " helper "\n\t" \
-+ "1:\n" \
-+ ::"a" (rw) : "memory")
-+
-+ #define __build_write_lock_const(rw, helper) \
-+ asm volatile(LOCK "subl $" RW_LOCK_BIAS_STR ",%0\n\t" \
-+ "jz 1f\n\t" \
-+ "pushl %%eax\n\t" \
-+ "leal %0,%%eax\n\t" \
-+ "call " helper "\n\t" \
-+ "popl %%eax\n\t" \
-+ "1:\n" \
-+ :"=m" (*(volatile int *)rw) : : "memory")
-+
-+#else /* !CONFIG_SPINLINE */
-+
-+ #define __build_write_lock_ptr(rw, helper) \
-+ asm volatile(LOCK "subl $" RW_LOCK_BIAS_STR ",(%0)\n\t" \
-+ "jnz 2f\n" \
-+ "1:\n" \
-+ LOCK_SECTION_START("") \
-+ "2:\tcall " helper "\n\t" \
-+ "jmp 1b\n" \
-+ LOCK_SECTION_END \
-+ ::"a" (rw) : "memory")
-+
-+ #define __build_write_lock_const(rw, helper) \
-+ asm volatile(LOCK "subl $" RW_LOCK_BIAS_STR ",%0\n\t" \
-+ "jnz 2f\n" \
-+ "1:\n" \
-+ LOCK_SECTION_START("") \
-+ "2:\tpushl %%eax\n\t" \
-+ "leal %0,%%eax\n\t" \
-+ "call " helper "\n\t" \
-+ "popl %%eax\n\t" \
-+ "jmp 1b\n" \
-+ LOCK_SECTION_END \
-+ :"=m" (*(volatile int *)rw) : : "memory")
-+
-+#endif /* CONFIG_SPINLINE */
-
- #define __build_write_lock(rw, helper) do { \
- if (__builtin_constant_p(rw)) \
---- linux-2.6.0-test1/include/asm-i386/smp.h 2003-06-22 12:04:45.000000000 -0700
-+++ 25/include/asm-i386/smp.h 2003-07-19 17:04:07.000000000 -0700
-@@ -8,6 +8,7 @@
- #include <linux/config.h>
- #include <linux/kernel.h>
- #include <linux/threads.h>
-+#include <linux/cpumask.h>
- #endif
-
- #ifdef CONFIG_X86_LOCAL_APIC
-@@ -31,9 +32,7 @@
- */
-
- extern void smp_alloc_memory(void);
--extern unsigned long phys_cpu_present_map;
--extern unsigned long cpu_online_map;
--extern volatile unsigned long smp_invalidate_needed;
-+extern physid_mask_t phys_cpu_present_map;
- extern int pic_mode;
- extern int smp_num_siblings;
- extern int cpu_sibling_map[];
-@@ -54,37 +53,19 @@ extern void zap_low_mappings (void);
- */
- #define smp_processor_id() (current_thread_info()->cpu)
-
--extern volatile unsigned long cpu_callout_map;
-+extern cpumask_t cpu_callout_map;
-
--#define cpu_possible(cpu) (cpu_callout_map & (1<<(cpu)))
--#define cpu_online(cpu) (cpu_online_map & (1<<(cpu)))
--
--#define for_each_cpu(cpu, mask) \
-- for(mask = cpu_online_map; \
-- cpu = __ffs(mask), mask != 0; \
-- mask &= ~(1<<cpu))
--
--extern inline unsigned int num_online_cpus(void)
--{
-- return hweight32(cpu_online_map);
--}
-+#define cpu_possible(cpu) cpu_isset(cpu, cpu_callout_map)
-
- /* We don't mark CPUs online until __cpu_up(), so we need another measure */
- static inline int num_booting_cpus(void)
- {
-- return hweight32(cpu_callout_map);
-+ return cpus_weight(cpu_callout_map);
- }
-
- extern void map_cpu_to_logical_apicid(void);
- extern void unmap_cpu_to_logical_apicid(int cpu);
-
--extern inline unsigned int any_online_cpu(unsigned int mask)
--{
-- if (mask & cpu_online_map)
-- return __ffs(mask & cpu_online_map);
--
-- return NR_CPUS;
--}
- #ifdef CONFIG_X86_LOCAL_APIC
-
- #ifdef APIC_DEFINITION
---- linux-2.6.0-test1/include/asm-i386/spinlock.h 2003-06-26 22:07:25.000000000 -0700
-+++ 25/include/asm-i386/spinlock.h 2003-07-19 17:06:40.000000000 -0700
-@@ -43,18 +43,35 @@ typedef struct {
- #define spin_is_locked(x) (*(volatile signed char *)(&(x)->lock) <= 0)
- #define spin_unlock_wait(x) do { barrier(); } while(spin_is_locked(x))
-
--#define spin_lock_string \
-- "\n1:\t" \
-- "lock ; decb %0\n\t" \
-- "js 2f\n" \
-- LOCK_SECTION_START("") \
-- "2:\t" \
-- "rep;nop\n\t" \
-- "cmpb $0,%0\n\t" \
-- "jle 2b\n\t" \
-- "jmp 1b\n" \
-- LOCK_SECTION_END
-+#ifdef CONFIG_SPINLINE
-
-+ #define spin_lock_string \
-+ "\n1:\t" \
-+ "lock ; decb %0\n\t" \
-+ "js 2f\n" \
-+ "jmp 3f\n" \
-+ "2:\t" \
-+ "rep;nop\n\t" \
-+ "cmpb $0,%0\n\t" \
-+ "jle 2b\n\t" \
-+ "jmp 1b\n" \
-+ "3:\t"
-+
-+#else /* !CONFIG_SPINLINE */
-+
-+ #define spin_lock_string \
-+ "\n1:\t" \
-+ "lock ; decb %0\n\t" \
-+ "js 2f\n" \
-+ LOCK_SECTION_START("") \
-+ "2:\t" \
-+ "rep;nop\n\t" \
-+ "cmpb $0,%0\n\t" \
-+ "jle 2b\n\t" \
-+ "jmp 1b\n" \
-+ LOCK_SECTION_END
-+
-+#endif /* CONFIG_SPINLINE */
- /*
- * This works. Despite all the confusion.
- * (except on PPro SMP or if we are using OOSTORE)
-@@ -138,6 +155,11 @@ here:
- */
- typedef struct {
- volatile unsigned int lock;
-+#ifdef CONFIG_LOCKMETER
-+ /* required for LOCKMETER since all bits in lock are used */
-+ /* and we need this storage for CPU and lock INDEX */
-+ unsigned lockmeter_magic;
-+#endif
- #ifdef CONFIG_DEBUG_SPINLOCK
- unsigned magic;
- #endif
-@@ -145,11 +167,19 @@ typedef struct {
-
- #define RWLOCK_MAGIC 0xdeaf1eed
-
-+#ifdef CONFIG_LOCKMETER
-+#ifdef CONFIG_DEBUG_SPINLOCK
-+#define RWLOCK_MAGIC_INIT , 0, RWLOCK_MAGIC
-+#else
-+#define RWLOCK_MAGIC_INIT , 0
-+#endif
-+#else /* !CONFIG_LOCKMETER */
- #ifdef CONFIG_DEBUG_SPINLOCK
- #define RWLOCK_MAGIC_INIT , RWLOCK_MAGIC
- #else
- #define RWLOCK_MAGIC_INIT /* */
- #endif
-+#endif /* !CONFIG_LOCKMETER */
-
- #define RW_LOCK_UNLOCKED (rwlock_t) { RW_LOCK_BIAS RWLOCK_MAGIC_INIT }
-
-@@ -196,4 +226,58 @@ static inline int _raw_write_trylock(rwl
- return 0;
- }
-
-+#ifdef CONFIG_LOCKMETER
-+static inline int _raw_read_trylock(rwlock_t *lock)
-+{
-+/* FIXME -- replace with assembler */
-+ atomic_t *count = (atomic_t *)lock;
-+ atomic_dec(count);
-+ if (count->counter > 0)
-+ return 1;
-+ atomic_inc(count);
-+ return 0;
-+}
-+#endif
-+
-+#if defined(CONFIG_LOCKMETER) && defined(CONFIG_HAVE_DEC_LOCK)
-+extern void _metered_spin_lock (spinlock_t *lock);
-+extern void _metered_spin_unlock(spinlock_t *lock);
-+
-+/*
-+ * Matches what is in arch/i386/lib/dec_and_lock.c, except this one is
-+ * "static inline" so that the spin_lock(), if actually invoked, is charged
-+ * against the real caller, not against the catch-all atomic_dec_and_lock
-+ */
-+static inline int atomic_dec_and_lock(atomic_t *atomic, spinlock_t *lock)
-+{
-+ int counter;
-+ int newcount;
-+
-+repeat:
-+ counter = atomic_read(atomic);
-+ newcount = counter-1;
-+
-+ if (!newcount)
-+ goto slow_path;
-+
-+ asm volatile("lock; cmpxchgl %1,%2"
-+ :"=a" (newcount)
-+ :"r" (newcount), "m" (atomic->counter), "0" (counter));
-+
-+ /* If the above failed, "eax" will have changed */
-+ if (newcount != counter)
-+ goto repeat;
-+ return 0;
-+
-+slow_path:
-+ _metered_spin_lock(lock);
-+ if (atomic_dec_and_test(atomic))
-+ return 1;
-+ _metered_spin_unlock(lock);
-+ return 0;
-+}
-+
-+#define ATOMIC_DEC_AND_LOCK
-+#endif
-+
- #endif /* __ASM_SPINLOCK_H */
---- linux-2.6.0-test1/include/asm-i386/stat.h 2003-06-14 12:17:57.000000000 -0700
-+++ 25/include/asm-i386/stat.h 2003-07-19 17:06:16.000000000 -0700
-@@ -9,6 +9,7 @@ struct __old_kernel_stat {
- unsigned short st_uid;
- unsigned short st_gid;
- unsigned short st_rdev;
-+ unsigned short __pad_16bit;
- unsigned long st_size;
- unsigned long st_atime;
- unsigned long st_mtime;
---- linux-2.6.0-test1/include/asm-i386/thread_info.h 2003-06-14 12:17:58.000000000 -0700
-+++ 25/include/asm-i386/thread_info.h 2003-07-19 17:03:50.000000000 -0700
-@@ -87,8 +87,8 @@ static inline struct thread_info *curren
-
- /* thread information allocation */
- #define THREAD_SIZE (2*PAGE_SIZE)
--#define alloc_thread_info(tsk) ((struct thread_info *) __get_free_pages(GFP_KERNEL,1))
--#define free_thread_info(ti) free_pages((unsigned long) (ti), 1)
-+#define alloc_thread_info(task) ((struct thread_info *)kmalloc(THREAD_SIZE, GFP_KERNEL))
-+#define free_thread_info(info) kfree(info)
- #define get_thread_info(ti) get_task_struct((ti)->task)
- #define put_thread_info(ti) put_task_struct((ti)->task)
-
---- linux-2.6.0-test1/include/asm-i386/topology.h 2003-06-14 12:17:59.000000000 -0700
-+++ 25/include/asm-i386/topology.h 2003-07-19 17:04:07.000000000 -0700
-@@ -31,9 +31,11 @@
-
- #include <asm/mpspec.h>
-
-+#include <linux/cpumask.h>
-+
- /* Mappings between logical cpu number and node number */
--extern volatile unsigned long node_2_cpu_mask[];
--extern volatile int cpu_2_node[];
-+extern cpumask_t node_2_cpu_mask[];
-+extern int cpu_2_node[];
-
- /* Returns the number of the node containing CPU 'cpu' */
- static inline int cpu_to_node(int cpu)
-@@ -49,7 +51,7 @@ static inline int cpu_to_node(int cpu)
- #define parent_node(node) (node)
-
- /* Returns a bitmask of CPUs on Node 'node'. */
--static inline unsigned long node_to_cpumask(int node)
-+static inline cpumask_t node_to_cpumask(int node)
- {
- return node_2_cpu_mask[node];
- }
-@@ -57,14 +59,15 @@ static inline unsigned long node_to_cpum
- /* Returns the number of the first CPU on Node 'node'. */
- static inline int node_to_first_cpu(int node)
- {
-- return __ffs(node_to_cpumask(node));
-+ cpumask_t mask = node_to_cpumask(node);
-+ return first_cpu(mask);
- }
-
- /* Returns the number of the first MemBlk on Node 'node' */
- #define node_to_memblk(node) (node)
-
- /* Returns the number of the node containing PCI bus 'bus' */
--static inline unsigned long pcibus_to_cpumask(int bus)
-+static inline cpumask_t pcibus_to_cpumask(int bus)
- {
- return node_to_cpumask(mp_bus_id_to_node[bus]);
- }
---- linux-2.6.0-test1/include/asm-i386/unistd.h 2003-07-13 21:44:35.000000000 -0700
-+++ 25/include/asm-i386/unistd.h 2003-07-19 17:06:37.000000000 -0700
-@@ -277,8 +277,9 @@
- #define __NR_fstatfs64 269
- #define __NR_tgkill 270
- #define __NR_utimes 271
-+#define __NR_mknod64 272
-
--#define NR_syscalls 272
-+#define NR_syscalls 273
-
- /* user-visible error numbers are in the range -1 - -124: see <asm-i386/errno.h> */
-
---- linux-2.6.0-test1/include/asm-ia64/atomic.h 2003-06-14 12:17:59.000000000 -0700
-+++ 25/include/asm-ia64/atomic.h 2003-07-19 17:03:50.000000000 -0700
-@@ -9,7 +9,7 @@
- * "int" types were carefully placed so as to ensure proper operation
- * of the macros.
- *
-- * Copyright (C) 1998, 1999, 2002 Hewlett-Packard Co
-+ * Copyright (C) 1998, 1999, 2002-2003 Hewlett-Packard Co
- * David Mosberger-Tang <davidm@hpl.hp.com>
- */
- #include <linux/types.h>
-@@ -21,11 +21,16 @@
- * memory accesses are ordered.
- */
- typedef struct { volatile __s32 counter; } atomic_t;
-+typedef struct { volatile __s64 counter; } atomic64_t;
-
- #define ATOMIC_INIT(i) ((atomic_t) { (i) })
-+#define ATOMIC64_INIT(i) ((atomic64_t) { (i) })
-
- #define atomic_read(v) ((v)->counter)
-+#define atomic64_read(v) ((v)->counter)
-+
- #define atomic_set(v,i) (((v)->counter) = (i))
-+#define atomic64_set(v,i) (((v)->counter) = (i))
-
- static __inline__ int
- ia64_atomic_add (int i, atomic_t *v)
-@@ -37,7 +42,21 @@ ia64_atomic_add (int i, atomic_t *v)
- CMPXCHG_BUGCHECK(v);
- old = atomic_read(v);
- new = old + i;
-- } while (ia64_cmpxchg("acq", v, old, old + i, sizeof(atomic_t)) != old);
-+ } while (ia64_cmpxchg("acq", v, old, new, sizeof(atomic_t)) != old);
-+ return new;
-+}
-+
-+static __inline__ int
-+ia64_atomic64_add (int i, atomic64_t *v)
-+{
-+ __s64 old, new;
-+ CMPXCHG_BUGCHECK_DECL
-+
-+ do {
-+ CMPXCHG_BUGCHECK(v);
-+ old = atomic_read(v);
-+ new = old + i;
-+ } while (ia64_cmpxchg("acq", v, old, new, sizeof(atomic_t)) != old);
- return new;
- }
-
-@@ -55,6 +74,20 @@ ia64_atomic_sub (int i, atomic_t *v)
- return new;
- }
-
-+static __inline__ int
-+ia64_atomic64_sub (int i, atomic64_t *v)
-+{
-+ __s64 old, new;
-+ CMPXCHG_BUGCHECK_DECL
-+
-+ do {
-+ CMPXCHG_BUGCHECK(v);
-+ old = atomic_read(v);
-+ new = old - i;
-+ } while (ia64_cmpxchg("acq", v, old, new, sizeof(atomic_t)) != old);
-+ return new;
-+}
-+
- #define atomic_add_return(i,v) \
- ({ \
- int __ia64_aar_i = (i); \
-@@ -67,6 +100,18 @@ ia64_atomic_sub (int i, atomic_t *v)
- : ia64_atomic_add(__ia64_aar_i, v); \
- })
-
-+#define atomic64_add_return(i,v) \
-+({ \
-+ long __ia64_aar_i = (i); \
-+ (__builtin_constant_p(i) \
-+ && ( (__ia64_aar_i == 1) || (__ia64_aar_i == 4) \
-+ || (__ia64_aar_i == 8) || (__ia64_aar_i == 16) \
-+ || (__ia64_aar_i == -1) || (__ia64_aar_i == -4) \
-+ || (__ia64_aar_i == -8) || (__ia64_aar_i == -16))) \
-+ ? ia64_fetch_and_add(__ia64_aar_i, &(v)->counter) \
-+ : ia64_atomic64_add(__ia64_aar_i, v); \
-+})
-+
- /*
- * Atomically add I to V and return TRUE if the resulting value is
- * negative.
-@@ -77,6 +122,12 @@ atomic_add_negative (int i, atomic_t *v)
- return atomic_add_return(i, v) < 0;
- }
-
-+static __inline__ int
-+atomic64_add_negative (int i, atomic64_t *v)
-+{
-+ return atomic64_add_return(i, v) < 0;
-+}
-+
- #define atomic_sub_return(i,v) \
- ({ \
- int __ia64_asr_i = (i); \
-@@ -89,18 +140,40 @@ atomic_add_negative (int i, atomic_t *v)
- : ia64_atomic_sub(__ia64_asr_i, v); \
- })
-
-+#define atomic64_sub_return(i,v) \
-+({ \
-+ long __ia64_asr_i = (i); \
-+ (__builtin_constant_p(i) \
-+ && ( (__ia64_asr_i == 1) || (__ia64_asr_i == 4) \
-+ || (__ia64_asr_i == 8) || (__ia64_asr_i == 16) \
-+ || (__ia64_asr_i == -1) || (__ia64_asr_i == -4) \
-+ || (__ia64_asr_i == -8) || (__ia64_asr_i == -16))) \
-+ ? ia64_fetch_and_add(-__ia64_asr_i, &(v)->counter) \
-+ : ia64_atomic64_sub(__ia64_asr_i, v); \
-+})
-+
- #define atomic_dec_return(v) atomic_sub_return(1, (v))
- #define atomic_inc_return(v) atomic_add_return(1, (v))
-+#define atomic64_dec_return(v) atomic64_sub_return(1, (v))
-+#define atomic64_inc_return(v) atomic64_add_return(1, (v))
-
- #define atomic_sub_and_test(i,v) (atomic_sub_return((i), (v)) == 0)
- #define atomic_dec_and_test(v) (atomic_sub_return(1, (v)) == 0)
- #define atomic_inc_and_test(v) (atomic_add_return(1, (v)) != 0)
-+#define atomic64_sub_and_test(i,v) (atomic64_sub_return((i), (v)) == 0)
-+#define atomic64_dec_and_test(v) (atomic64_sub_return(1, (v)) == 0)
-+#define atomic64_inc_and_test(v) (atomic64_add_return(1, (v)) != 0)
-
- #define atomic_add(i,v) atomic_add_return((i), (v))
- #define atomic_sub(i,v) atomic_sub_return((i), (v))
- #define atomic_inc(v) atomic_add(1, (v))
- #define atomic_dec(v) atomic_sub(1, (v))
-
-+#define atomic64_add(i,v) atomic64_add_return((i), (v))
-+#define atomic64_sub(i,v) atomic64_sub_return((i), (v))
-+#define atomic64_inc(v) atomic64_add(1, (v))
-+#define atomic64_dec(v) atomic64_sub(1, (v))
-+
- /* Atomic operations are already serializing */
- #define smp_mb__before_atomic_dec() barrier()
- #define smp_mb__after_atomic_dec() barrier()
---- linux-2.6.0-test1/include/asm-ia64/bitops.h 2003-06-14 12:18:33.000000000 -0700
-+++ 25/include/asm-ia64/bitops.h 2003-07-19 17:04:07.000000000 -0700
-@@ -409,7 +409,7 @@ found_middle:
- * Find next bit in a bitmap reasonably efficiently..
- */
- static inline int
--find_next_bit (void *addr, unsigned long size, unsigned long offset)
-+find_next_bit(const void *addr, unsigned long size, unsigned long offset)
- {
- unsigned long *p = ((unsigned long *) addr) + (offset >> 6);
- unsigned long result = offset & ~63UL;
---- linux-2.6.0-test1/include/asm-ia64/elf.h 2003-06-22 12:04:45.000000000 -0700
-+++ 25/include/asm-ia64/elf.h 2003-07-19 17:03:50.000000000 -0700
-@@ -199,11 +199,11 @@ extern int dump_task_fpu (struct task_st
-
- #define GATE_EHDR ((const struct elfhdr *) GATE_ADDR)
-
--#define ARCH_DLINFO \
--do { \
-- extern char __kernel_syscall_via_epc[]; \
-- NEW_AUX_ENT(AT_SYSINFO, __kernel_syscall_via_epc); \
-- NEW_AUX_ENT(AT_SYSINFO_EHDR, (unsigned long) GATE_EHDR); \
-+#define ARCH_DLINFO \
-+do { \
-+ extern char __kernel_syscall_via_epc[]; \
-+ NEW_AUX_ENT(AT_SYSINFO, (unsigned long) __kernel_syscall_via_epc); \
-+ NEW_AUX_ENT(AT_SYSINFO_EHDR, (unsigned long) GATE_EHDR); \
- } while (0)
-
- /*
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-ia64/local.h 2003-07-19 17:03:50.000000000 -0700
-@@ -0,0 +1,50 @@
-+#ifndef _ASM_IA64_LOCAL_H
-+#define _ASM_IA64_LOCAL_H
-+
-+/*
-+ * Copyright (C) 2003 Hewlett-Packard Co
-+ * David Mosberger-Tang <davidm@hpl.hp.com>
-+ */
-+
-+#include <linux/percpu.h>
-+
-+typedef struct {
-+ atomic64_t val;
-+} local_t;
-+
-+#define LOCAL_INIT(i) ((local_t) { { (i) } })
-+#define local_read(l) atomic64_read(&(l)->val)
-+#define local_set(l, i) atomic64_set(&(l)->val, i)
-+#define local_inc(l) atomic64_inc(&(l)->val)
-+#define local_dec(l) atomic64_dec(&(l)->val)
-+#define local_add(l) atomic64_add(&(l)->val)
-+#define local_sub(l) atomic64_sub(&(l)->val)
-+
-+/* Non-atomic variants, i.e., preemption disabled and won't be touched in interrupt, etc. */
-+
-+#define __local_inc(l) (++(l)->val.counter)
-+#define __local_dec(l) (--(l)->val.counter)
-+#define __local_add(i,l) ((l)->val.counter += (i))
-+#define __local_sub(i,l) ((l)->val.counter -= (i))
-+
-+/*
-+ * Use these for per-cpu local_t variables. Note they take a variable (eg. mystruct.foo),
-+ * not an address.
-+ */
-+#define cpu_local_read(v) local_read(&__ia64_per_cpu_var(v))
-+#define cpu_local_set(v, i) local_set(&__ia64_per_cpu_var(v), (i))
-+#define cpu_local_inc(v) local_inc(&__ia64_per_cpu_var(v))
-+#define cpu_local_dec(v) local_dec(&__ia64_per_cpu_var(v))
-+#define cpu_local_add(i, v) local_add((i), &__ia64_per_cpu_var(v))
-+#define cpu_local_sub(i, v) local_sub((i), &__ia64_per_cpu_var(v))
-+
-+/*
-+ * Non-atomic increments, i.e., preemption disabled and won't be touched in interrupt,
-+ * etc.
-+ */
-+#define __cpu_local_inc(v) __local_inc(&__ia64_per_cpu_var(v))
-+#define __cpu_local_dec(v) __local_dec(&__ia64_per_cpu_var(v))
-+#define __cpu_local_add(i, v) __local_add((i), &__ia64_per_cpu_var(v))
-+#define __cpu_local_sub(i, v) __local_sub((i), &__ia64_per_cpu_var(v))
-+
-+#endif /* _ASM_IA64_LOCAL_H */
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-ia64/lockmeter.h 2003-07-19 17:06:40.000000000 -0700
-@@ -0,0 +1,72 @@
-+/*
-+ * Copyright (C) 1999,2000 Silicon Graphics, Inc.
-+ *
-+ * Written by John Hawkes (hawkes@sgi.com)
-+ * Based on klstat.h by Jack Steiner (steiner@sgi.com)
-+ */
-+
-+#ifndef _IA64_LOCKMETER_H
-+#define _IA64_LOCKMETER_H
-+
-+#ifdef local_cpu_data
-+#define CPU_CYCLE_FREQUENCY local_cpu_data->itc_freq
-+#else
-+#define CPU_CYCLE_FREQUENCY my_cpu_data.itc_freq
-+#endif
-+#define get_cycles64() get_cycles()
-+
-+#define THIS_CPU_NUMBER smp_processor_id()
-+
-+/*
-+ * macros to cache and retrieve an index value inside of a lock
-+ * these macros assume that there are less than 65536 simultaneous
-+ * (read mode) holders of a rwlock.
-+ * we also assume that the hash table has less than 32767 entries.
-+ */
-+/*
-+ * instrumented spinlock structure -- never used to allocate storage
-+ * only used in macros below to overlay a spinlock_t
-+ */
-+typedef struct inst_spinlock_s {
-+ /* remember, Intel is little endian */
-+ volatile unsigned short lock;
-+ volatile unsigned short index;
-+} inst_spinlock_t;
-+#define PUT_INDEX(lock_ptr,indexv) ((inst_spinlock_t *)(lock_ptr))->index = indexv
-+#define GET_INDEX(lock_ptr) ((inst_spinlock_t *)(lock_ptr))->index
-+
-+/*
-+ * macros to cache and retrieve an index value in a read/write lock
-+ * as well as the cpu where a reader busy period started
-+ * we use the 2nd word (the debug word) for this, so require the
-+ * debug word to be present
-+ */
-+/*
-+ * instrumented rwlock structure -- never used to allocate storage
-+ * only used in macros below to overlay a rwlock_t
-+ */
-+typedef struct inst_rwlock_s {
-+ volatile int read_counter:31;
-+ volatile int write_lock:1;
-+ volatile unsigned short index;
-+ volatile unsigned short cpu;
-+} inst_rwlock_t;
-+#define PUT_RWINDEX(rwlock_ptr,indexv) ((inst_rwlock_t *)(rwlock_ptr))->index = indexv
-+#define GET_RWINDEX(rwlock_ptr) ((inst_rwlock_t *)(rwlock_ptr))->index
-+#define PUT_RW_CPU(rwlock_ptr,cpuv) ((inst_rwlock_t *)(rwlock_ptr))->cpu = cpuv
-+#define GET_RW_CPU(rwlock_ptr) ((inst_rwlock_t *)(rwlock_ptr))->cpu
-+
-+/*
-+ * return the number of readers for a rwlock_t
-+ */
-+#define RWLOCK_READERS(rwlock_ptr) ((rwlock_ptr)->read_counter)
-+
-+/*
-+ * return true if rwlock is write locked
-+ * (note that other lock attempts can cause the lock value to be negative)
-+ */
-+#define RWLOCK_IS_WRITE_LOCKED(rwlock_ptr) ((rwlock_ptr)->write_lock)
-+#define RWLOCK_IS_READ_LOCKED(rwlock_ptr) ((rwlock_ptr)->read_counter)
-+
-+#endif /* _IA64_LOCKMETER_H */
-+
---- linux-2.6.0-test1/include/asm-ia64/mmu_context.h 2003-07-10 18:50:32.000000000 -0700
-+++ 25/include/asm-ia64/mmu_context.h 2003-07-19 17:03:50.000000000 -0700
-@@ -86,9 +86,9 @@ delayed_tlb_flush (void)
- {
- extern void local_flush_tlb_all (void);
-
-- if (unlikely(__get_cpu_var(ia64_need_tlb_flush))) {
-+ if (unlikely(__ia64_per_cpu_var(ia64_need_tlb_flush))) {
- local_flush_tlb_all();
-- __get_cpu_var(ia64_need_tlb_flush) = 0;
-+ __ia64_per_cpu_var(ia64_need_tlb_flush) = 0;
- }
- }
-
---- linux-2.6.0-test1/include/asm-ia64/percpu.h 2003-06-14 12:18:29.000000000 -0700
-+++ 25/include/asm-ia64/percpu.h 2003-07-19 17:03:50.000000000 -0700
-@@ -1,43 +1,73 @@
- #ifndef _ASM_IA64_PERCPU_H
- #define _ASM_IA64_PERCPU_H
-
--#include <linux/config.h>
--#include <linux/compiler.h>
--
- /*
- * Copyright (C) 2002-2003 Hewlett-Packard Co
- * David Mosberger-Tang <davidm@hpl.hp.com>
- */
-+
- #define PERCPU_ENOUGH_ROOM PERCPU_PAGE_SIZE
-
- #ifdef __ASSEMBLY__
--
--#define THIS_CPU(var) (var##__per_cpu) /* use this to mark accesses to per-CPU variables... */
--
-+# define THIS_CPU(var) (per_cpu__##var) /* use this to mark accesses to per-CPU variables... */
- #else /* !__ASSEMBLY__ */
-
-+#include <linux/config.h>
-+
- #include <linux/threads.h>
-
--extern unsigned long __per_cpu_offset[NR_CPUS];
-+#ifdef HAVE_MODEL_SMALL_ATTRIBUTE
-+# define __SMALL_ADDR_AREA __attribute__((__model__ (__small__)))
-+#else
-+# define __SMALL_ADDR_AREA
-+#endif
-
--#define DEFINE_PER_CPU(type, name) \
-- __attribute__((__section__(".data.percpu"))) __typeof__(type) name##__per_cpu
--#define DECLARE_PER_CPU(type, name) extern __typeof__(type) name##__per_cpu
-+#define DECLARE_PER_CPU(type, name) \
-+ extern __SMALL_ADDR_AREA __typeof__(type) per_cpu__##name
-
--#define __get_cpu_var(var) (var##__per_cpu)
-+/* Separate out the type, so (int[3], foo) works. */
-+#define DEFINE_PER_CPU(type, name) \
-+ __attribute__((__section__(".data.percpu"))) \
-+ __SMALL_ADDR_AREA __typeof__(type) per_cpu__##name
-+
-+/*
-+ * Pretty much a literal copy of asm-generic/percpu.h, except that percpu_modcopy() is an
-+ * external routine, to avoid include-hell.
-+ */
- #ifdef CONFIG_SMP
--# define per_cpu(var, cpu) (*RELOC_HIDE(&var##__per_cpu, __per_cpu_offset[cpu]))
-+
-+extern unsigned long __per_cpu_offset[NR_CPUS];
-+
-+/* Equal to __per_cpu_offset[smp_processor_id()], but faster to access: */
-+DECLARE_PER_CPU(unsigned long, local_per_cpu_offset);
-+
-+#define per_cpu(var, cpu) (*RELOC_HIDE(&per_cpu__##var, __per_cpu_offset[cpu]))
-+#define __get_cpu_var(var) (*RELOC_HIDE(&per_cpu__##var, __ia64_per_cpu_var(local_per_cpu_offset)))
-
- extern void percpu_modcopy(void *pcpudst, const void *src, unsigned long size);
--#else
--# define per_cpu(var, cpu) ((void)cpu, __get_cpu_var(var))
--#endif
-
--#define EXPORT_PER_CPU_SYMBOL(var) EXPORT_SYMBOL(var##__per_cpu)
--#define EXPORT_PER_CPU_SYMBOL_GPL(var) EXPORT_SYMBOL_GPL(var##__per_cpu)
-+#else /* ! SMP */
-+
-+#define per_cpu(var, cpu) ((void)cpu, per_cpu__##var)
-+#define __get_cpu_var(var) per_cpu__##var
-+
-+#endif /* SMP */
-+
-+#define EXPORT_PER_CPU_SYMBOL(var) EXPORT_SYMBOL(per_cpu__##var)
-+#define EXPORT_PER_CPU_SYMBOL_GPL(var) EXPORT_SYMBOL_GPL(per_cpu__##var)
-+
-+/* ia64-specific part: */
-
- extern void setup_per_cpu_areas (void);
-
-+/*
-+ * Be extremely careful when taking the address of this variable! Due to virtual
-+ * remapping, it is different from the canonical address returned by __get_cpu_var(var)!
-+ * On the positive side, using __ia64_per_cpu_var() instead of __get_cpu_var() is slightly
-+ * more efficient.
-+ */
-+#define __ia64_per_cpu_var(var) (per_cpu__##var)
-+
- #endif /* !__ASSEMBLY__ */
-
- #endif /* _ASM_IA64_PERCPU_H */
---- linux-2.6.0-test1/include/asm-ia64/pgalloc.h 2003-06-22 12:04:45.000000000 -0700
-+++ 25/include/asm-ia64/pgalloc.h 2003-07-19 17:07:16.000000000 -0700
-@@ -71,9 +71,9 @@ pgd_free (pgd_t *pgd)
- }
-
- static inline void
--pgd_populate (struct mm_struct *mm, pgd_t *pgd_entry, pmd_t *pmd)
-+pgd_populate (struct mm_struct *mm, pgd_t *pgd_entry, struct page *pmd)
- {
-- pgd_val(*pgd_entry) = __pa(pmd);
-+ pgd_val(*pgd_entry) = __pa(page_address(pmd));
- }
-
-
-@@ -90,8 +90,8 @@ pmd_alloc_one_fast (struct mm_struct *mm
- return (pmd_t *)ret;
- }
-
--static inline pmd_t*
--pmd_alloc_one (struct mm_struct *mm, unsigned long addr)
-+static inline pmd_t *
-+pmd_alloc_one_kernel(struct mm_struct *mm, unsigned long addr)
- {
- pmd_t *pmd = (pmd_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT);
-
-@@ -100,9 +100,16 @@ pmd_alloc_one (struct mm_struct *mm, uns
- return pmd;
- }
-
-+static inline struct page *pmd_alloc_one(struct mm_struct *mm, unsigned long addr)
-+{
-+ pmd_t *pmd = pmd_alloc_one_kernel(mm, addr);
-+ return pmd ? virt_to_page(pmd) : NULL;
-+}
-+
- static inline void
--pmd_free (pmd_t *pmd)
-+pmd_free(struct page *page)
- {
-+ pmd_t *pmd = page_address(page);
- *(unsigned long *)pmd = (unsigned long) pmd_quicklist;
- pmd_quicklist = (unsigned long *) pmd;
- ++pgtable_cache_size;
---- linux-2.6.0-test1/include/asm-ia64/pgtable.h 2003-06-22 12:04:45.000000000 -0700
-+++ 25/include/asm-ia64/pgtable.h 2003-07-19 17:07:16.000000000 -0700
-@@ -257,7 +257,8 @@ ia64_phys_addr_valid (unsigned long addr
- #define pgd_bad(pgd) (!ia64_phys_addr_valid(pgd_val(pgd)))
- #define pgd_present(pgd) (pgd_val(pgd) != 0UL)
- #define pgd_clear(pgdp) (pgd_val(*(pgdp)) = 0UL)
--#define pgd_page(pgd) ((unsigned long) __va(pgd_val(pgd) & _PFN_MASK))
-+#define __pgd_page(pgd) ((unsigned long)__va(pgd_val(pgd) & _PFN_MASK))
-+#define pgd_page(pgd) virt_to_page(__pgd_page(pgd))
-
- /*
- * The following have defined behavior only work if pte_present() is true.
-@@ -326,7 +327,13 @@ pgd_offset (struct mm_struct *mm, unsign
-
- /* Find an entry in the second-level page table.. */
- #define pmd_offset(dir,addr) \
-- ((pmd_t *) pgd_page(*(dir)) + (((addr) >> PMD_SHIFT) & (PTRS_PER_PMD - 1)))
-+ ((pmd_t *)__pgd_page(*(dir)) + (((addr) >> PMD_SHIFT) & (PTRS_PER_PMD - 1)))
-+
-+#define pmd_offset_kernel(pgd, addr) pmd_offset(pgd, addr)
-+#define pmd_offset_map(pgd, addr) pmd_offset(pgd, addr)
-+#define pmd_offset_map_nested(pgd, addr) pmd_offset(pgd, addr)
-+#define pmd_unmap(pmd) do { } while (0)
-+#define pmd_unmap_nested(pmd) do { } while (0)
-
- /*
- * Find an entry in the third-level page table. This looks more complicated than it
---- linux-2.6.0-test1/include/asm-ia64/posix_types.h 2003-06-14 12:18:06.000000000 -0700
-+++ 25/include/asm-ia64/posix_types.h 2003-07-19 17:06:39.000000000 -0700
-@@ -10,7 +10,9 @@
- * David Mosberger-Tang <davidm@hpl.hp.com>
- */
-
--typedef unsigned int __kernel_dev_t;
-+#ifdef __GNUC__
-+typedef unsigned long __kernel_dev_t;
-+#endif
- typedef unsigned int __kernel_ino_t;
- typedef unsigned int __kernel_mode_t;
- typedef unsigned int __kernel_nlink_t;
---- linux-2.6.0-test1/include/asm-ia64/processor.h 2003-07-10 18:50:32.000000000 -0700
-+++ 25/include/asm-ia64/processor.h 2003-07-19 17:03:50.000000000 -0700
-@@ -191,10 +191,12 @@ struct cpuinfo_ia64 {
- DECLARE_PER_CPU(struct cpuinfo_ia64, cpu_info);
-
- /*
-- * The "local" data pointer. It points to the per-CPU data of the currently executing
-+ * The "local" data variable. It refers to the per-CPU data of the currently executing
- * CPU, much like "current" points to the per-task data of the currently executing task.
-+ * Do not use the address of local_cpu_data, since it will be different from
-+ * cpu_data(smp_processor_id())!
- */
--#define local_cpu_data (&__get_cpu_var(cpu_info))
-+#define local_cpu_data (&__ia64_per_cpu_var(cpu_info))
- #define cpu_data(cpu) (&per_cpu(cpu_info, cpu))
-
- extern void identify_cpu (struct cpuinfo_ia64 *);
---- linux-2.6.0-test1/include/asm-ia64/smp.h 2003-06-22 12:04:45.000000000 -0700
-+++ 25/include/asm-ia64/smp.h 2003-07-19 17:04:07.000000000 -0700
-@@ -16,6 +16,7 @@
- #include <linux/init.h>
- #include <linux/threads.h>
- #include <linux/kernel.h>
-+#include <linux/cpumask.h>
-
- #include <asm/bitops.h>
- #include <asm/io.h>
-@@ -37,8 +38,8 @@ extern struct smp_boot_data {
-
- extern char no_int_routing __initdata;
-
--extern unsigned long phys_cpu_present_map;
--extern volatile unsigned long cpu_online_map;
-+extern cpumask_t phys_cpu_present_map;
-+extern cpumask_t cpu_online_map;
- extern unsigned long ipi_base_addr;
- extern unsigned char smp_int_redirect;
-
-@@ -47,22 +48,7 @@ extern volatile int ia64_cpu_to_sapicid[
-
- extern unsigned long ap_wakeup_vector;
-
--#define cpu_possible(cpu) (phys_cpu_present_map & (1UL << (cpu)))
--#define cpu_online(cpu) (cpu_online_map & (1UL << (cpu)))
--
--static inline unsigned int
--num_online_cpus (void)
--{
-- return hweight64(cpu_online_map);
--}
--
--static inline unsigned int
--any_online_cpu (unsigned int mask)
--{
-- if (mask & cpu_online_map)
-- return __ffs(mask & cpu_online_map);
-- return NR_CPUS;
--}
-+#define cpu_possible(cpu) cpu_isset(cpu, phys_cpu_present_map)
-
- /*
- * Function to map hard smp processor id to logical id. Slow, so don't use this in
---- linux-2.6.0-test1/include/asm-ia64/spinlock.h 2003-06-26 22:07:25.000000000 -0700
-+++ 25/include/asm-ia64/spinlock.h 2003-07-19 17:06:40.000000000 -0700
-@@ -120,8 +120,18 @@ _raw_spin_lock (spinlock_t *lock)
- typedef struct {
- volatile int read_counter : 31;
- volatile int write_lock : 1;
-+#ifdef CONFIG_LOCKMETER
-+ /* required for LOCKMETER since all bits in lock are used */
-+ /* and we need this storage for CPU and lock INDEX */
-+ unsigned lockmeter_magic;
-+#endif
- } rwlock_t;
-+
-+#ifdef CONFIG_LOCKMETER
-+#define RW_LOCK_UNLOCKED (rwlock_t) { 0, 0, 0 }
-+#else
- #define RW_LOCK_UNLOCKED (rwlock_t) { 0, 0 }
-+#endif
-
- #define rwlock_init(x) do { *(x) = RW_LOCK_UNLOCKED; } while(0)
- #define rwlock_is_locked(x) (*(volatile int *) (x) != 0)
-@@ -137,6 +147,48 @@ do { \
- } \
- } while (0)
-
-+#ifdef CONFIG_LOCKMETER
-+/*
-+ * HACK: This works, but still have a timing window that affects performance:
-+ * we see that no one owns the Write lock, then someone * else grabs for Write
-+ * lock before we do a read_lock().
-+ * This means that on rare occasions our read_lock() will stall and spin-wait
-+ * until we acquire for Read, instead of simply returning a trylock failure.
-+ */
-+static inline int _raw_read_trylock(rwlock_t *rw)
-+{
-+ if (rw->write_lock) {
-+ return 0;
-+ } else {
-+ _raw_read_lock(rw);
-+ return 1;
-+ }
-+}
-+
-+static inline int _raw_write_trylock(rwlock_t *rw)
-+{
-+ if (!(rw->write_lock)) {
-+ /* isn't currently write-locked... that looks promising... */
-+ if (test_and_set_bit(31, rw) == 0) {
-+ /* now it is write-locked by me... */
-+ if (rw->read_counter) {
-+ /* really read-locked, so release write-lock and fail */
-+ clear_bit(31, rw);
-+ } else {
-+ /* we've the the write-lock, no read-lockers... success! */
-+ barrier();
-+ return 1;
-+ }
-+
-+ }
-+ }
-+
-+ /* falls through ... fails to write-lock */
-+ barrier();
-+ return 0;
-+}
-+#endif
-+
- #define _raw_read_unlock(rw) \
- do { \
- rwlock_t *__read_lock_ptr = (rw); \
-@@ -181,4 +233,25 @@ do { \
- clear_bit(31, (x)); \
- })
-
-+#ifdef CONFIG_LOCKMETER
-+extern void _metered_spin_lock (spinlock_t *lock);
-+extern void _metered_spin_unlock(spinlock_t *lock);
-+
-+/*
-+ * Use a less efficient, and inline, atomic_dec_and_lock() if lockmetering
-+ * so we can see the callerPC of who is actually doing the spin_lock().
-+ * Otherwise, all we see is the generic rollup of all locks done by
-+ * atomic_dec_and_lock().
-+ */
-+static inline int atomic_dec_and_lock(atomic_t *atomic, spinlock_t *lock)
-+{
-+ _metered_spin_lock(lock);
-+ if (atomic_dec_and_test(atomic))
-+ return 1;
-+ _metered_spin_unlock(lock);
-+ return 0;
-+}
-+#define ATOMIC_DEC_AND_LOCK
-+#endif
-+
- #endif /* _ASM_IA64_SPINLOCK_H */
---- linux-2.6.0-test1/include/asm-ia64/system.h 2003-06-22 12:04:45.000000000 -0700
-+++ 25/include/asm-ia64/system.h 2003-07-19 17:03:50.000000000 -0700
-@@ -20,9 +20,9 @@
- #include <asm/percpu.h>
-
- /* 0xa000000000000000 - 0xa000000000000000+PERCPU_PAGE_SIZE remain unmapped */
--#define PERCPU_ADDR (0xa000000000000000 + PERCPU_PAGE_SIZE)
--#define GATE_ADDR (0xa000000000000000 + 2*PERCPU_PAGE_SIZE)
-+#define GATE_ADDR (0xa000000000000000 + PERCPU_PAGE_SIZE)
- #define KERNEL_START 0xa000000100000000
-+#define PERCPU_ADDR (-PERCPU_PAGE_SIZE)
-
- #ifndef __ASSEMBLY__
-
---- linux-2.6.0-test1/include/asm-ia64/tlb.h 2003-07-02 14:53:17.000000000 -0700
-+++ 25/include/asm-ia64/tlb.h 2003-07-19 17:03:50.000000000 -0700
-@@ -126,7 +126,7 @@ ia64_tlb_flush_mmu (struct mmu_gather *t
- static inline struct mmu_gather *
- tlb_gather_mmu (struct mm_struct *mm, unsigned int full_mm_flush)
- {
-- struct mmu_gather *tlb = &per_cpu(mmu_gathers, smp_processor_id());
-+ struct mmu_gather *tlb = &__get_cpu_var(mmu_gathers);
-
- tlb->mm = mm;
- /*
---- linux-2.6.0-test1/include/asm-m68k/motorola_pgalloc.h 2003-06-14 12:18:52.000000000 -0700
-+++ 25/include/asm-m68k/motorola_pgalloc.h 2003-07-19 17:07:16.000000000 -0700
-@@ -63,19 +63,28 @@ static inline void __pte_free_tlb(struct
- }
-
-
--static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long address)
-+static inline pmd_t *pmd_alloc_one_kernel(struct mm_struct *mm, unsigned long address)
- {
- return get_pointer_table();
- }
-
--static inline int pmd_free(pmd_t *pmd)
-+static inline struct page *pmd_alloc_one_kernel(struct mm_struct *mm, unsigned long addr)
- {
-- return free_pointer_table(pmd);
-+ pmd_t *pmd = pmd_alloc_one_kernel(mm, addr);
-+ if (pmd)
-+ return virt_to_page(pmd);
-+ else
-+ return NULL;
- }
-
--static inline int __pmd_free_tlb(struct mmu_gather *tlb, pmd_t *pmd)
-+static inline int pmd_free(struct page *pmd)
- {
-- return free_pointer_table(pmd);
-+ return free_pointer_table(page_address(pmd));
-+}
-+
-+static inline int __pmd_free_tlb(struct mmu_gather *tlb, struct page *pmd)
-+{
-+ return free_pointer_table(page_address(pmd));
- }
-
-
-@@ -100,9 +109,9 @@ static inline void pmd_populate(struct m
- pmd_set(pmd, page_address(page));
- }
-
--static inline void pgd_populate(struct mm_struct *mm, pgd_t *pgd, pmd_t *pmd)
-+static inline void pgd_populate(struct mm_struct *mm, pgd_t *pgd, struct page *pmd)
- {
-- pgd_set(pgd, pmd);
-+ pgd_set(pgd, page_address(pmd));
- }
-
- #endif /* _MOTOROLA_PGALLOC_H */
---- linux-2.6.0-test1/include/asm-m68k/motorola_pgtable.h 2003-06-14 12:18:24.000000000 -0700
-+++ 25/include/asm-m68k/motorola_pgtable.h 2003-07-19 17:07:16.000000000 -0700
-@@ -115,6 +115,7 @@ extern inline void pgd_set(pgd_t * pgdp,
- #define __pte_page(pte) ((unsigned long)__va(pte_val(pte) & PAGE_MASK))
- #define __pmd_page(pmd) ((unsigned long)__va(pmd_val(pmd) & _TABLE_MASK))
- #define __pgd_page(pgd) ((unsigned long)__va(pgd_val(pgd) & _TABLE_MASK))
-+#define pgd_page(pgd) virt_to_page(__pgd_page(pgd))
-
-
- #define pte_none(pte) (!pte_val(pte))
-@@ -203,6 +204,12 @@ extern inline pmd_t * pmd_offset(pgd_t *
- return (pmd_t *)__pgd_page(*dir) + ((address >> PMD_SHIFT) & (PTRS_PER_PMD-1));
- }
-
-+#define pmd_offset_kernel(pgd, addr) pmd_offset(pgd, addr)
-+#define pmd_offset_map(pgd, addr) pmd_offset(pgd, addr)
-+#define pmd_offset_map_nested(pgd, addr) pmd_offset(pgd, addr)
-+#define pmd_unmap(pmd) do { } while (0)
-+#define pmd_unmap_nested(pmd) do { } while (0)
-+
- /* Find an entry in the third-level page table.. */
- extern inline pte_t * pte_offset_kernel(pmd_t * pmdp, unsigned long address)
- {
---- linux-2.6.0-test1/include/asm-m68knommu/pgtable.h 2003-06-14 12:18:23.000000000 -0700
-+++ 25/include/asm-m68knommu/pgtable.h 2003-07-19 17:07:16.000000000 -0700
-@@ -21,7 +21,12 @@ typedef pte_t *pte_addr_t;
- #define pgd_bad(pgd) (0)
- #define pgd_clear(pgdp)
- #define kern_addr_valid(addr) (1)
--#define pmd_offset(a, b) ((void *)0)
-+#define pmd_offset(a, b) ((void *)0)
-+#define pmd_offset_kernel(a, b) pmd_offset(a, b)
-+#define pmd_offset_map(a, b) pmd_offset(a, b)
-+#define pmd_offset_map_nested(a, b) pmd_offset(a, b)
-+#define pmd_unmap(pmd) do { } while (0)
-+#define pmd_unmap_nested(pmd) do { } while (0)
-
- #define PAGE_NONE __pgprot(0)
- #define PAGE_SHARED __pgprot(0)
---- linux-2.6.0-test1/include/asm-m68k/posix_types.h 2003-06-14 12:17:58.000000000 -0700
-+++ 25/include/asm-m68k/posix_types.h 2003-07-19 17:06:39.000000000 -0700
-@@ -7,7 +7,9 @@
- * assume GCC is being used.
- */
-
--typedef unsigned short __kernel_dev_t;
-+#ifdef __GNUC__
-+typedef unsigned long long __kernel_dev_t;
-+#endif
- typedef unsigned long __kernel_ino_t;
- typedef unsigned short __kernel_mode_t;
- typedef unsigned short __kernel_nlink_t;
---- linux-2.6.0-test1/include/asm-m68k/sun3_pgalloc.h 2003-06-14 12:18:08.000000000 -0700
-+++ 25/include/asm-m68k/sun3_pgalloc.h 2003-07-19 17:07:16.000000000 -0700
-@@ -18,7 +18,8 @@
-
- extern const char bad_pmd_string[];
-
--#define pmd_alloc_one(mm,address) ({ BUG(); ((pmd_t *)2); })
-+#define pmd_alloc_one(mm,address) ({ BUG(); ((struct page *)2); })
-+#define pmd_alloc_one_kernel(mm,address) ({ BUG(); ((pmd_t *)2); })
-
-
- static inline void pte_free_kernel(pte_t * pte)
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-mips64/lockmeter.h 2003-07-19 17:06:40.000000000 -0700
-@@ -0,0 +1,120 @@
-+/*
-+ * Copyright (C) 1999,2000 Silicon Graphics, Inc.
-+ *
-+ * Written by John Hawkes (hawkes@sgi.com)
-+ * Based on klstat.h by Jack Steiner (steiner@sgi.com)
-+ */
-+
-+#ifndef _ASM_LOCKMETER_H
-+#define _ASM_LOCKMETER_H
-+
-+#include <linux/time.h>
-+
-+#define SPINLOCK_MAGIC_INIT /* */
-+
-+#define CPU_CYCLE_FREQUENCY get_cpu_cycle_frequency()
-+
-+#define THIS_CPU_NUMBER smp_processor_id()
-+
-+static uint32_t cpu_cycle_frequency = 0;
-+
-+static uint32_t get_cpu_cycle_frequency(void)
-+{
-+ /* a total hack, slow and invasive, but ... it works */
-+ int sec;
-+ uint32_t start_cycles;
-+ struct timeval tv;
-+
-+ if (cpu_cycle_frequency == 0) { /* uninitialized */
-+ do_gettimeofday(&tv);
-+ sec = tv.tv_sec; /* set up to catch the tv_sec rollover */
-+ while (sec == tv.tv_sec) { do_gettimeofday(&tv); }
-+ sec = tv.tv_sec; /* rolled over to a new sec value */
-+ start_cycles = get_cycles();
-+ while (sec == tv.tv_sec) { do_gettimeofday(&tv); }
-+ cpu_cycle_frequency = get_cycles() - start_cycles;
-+ }
-+
-+ return cpu_cycle_frequency;
-+}
-+
-+extern struct timeval xtime;
-+extern long do_gettimeoffset(void);
-+
-+static uint64_t get_cycles64(void)
-+{
-+ static uint64_t last_get_cycles64 = 0;
-+ uint64_t ret;
-+ unsigned long sec;
-+ unsigned long usec, usec_offset;
-+
-+again:
-+ sec = xtime.tv_sec;
-+ usec = xtime.tv_usec;
-+ usec_offset = do_gettimeoffset();
-+ if ((xtime.tv_sec != sec) ||
-+ (xtime.tv_usec != usec)||
-+ (usec_offset >= 20000))
-+ goto again;
-+
-+ ret = ((uint64_t)sec * cpu_cycle_frequency)
-+ + ( ((uint64_t)(usec + usec_offset) * cpu_cycle_frequency) / 1000000 );
-+
-+ /* XXX why does time go backwards? do_gettimeoffset? general time adj? */
-+ if (ret <= last_get_cycles64)
-+ ret = last_get_cycles64+1;
-+ last_get_cycles64 = ret;
-+
-+ return ret;
-+}
-+
-+/*
-+ * macros to cache and retrieve an index value inside of a lock
-+ * these macros assume that there are less than 65536 simultaneous
-+ * (read mode) holders of a rwlock.
-+ * we also assume that the hash table has less than 32767 entries.
-+ * the high order bit is used for write locking a rw_lock
-+ */
-+#define INDEX_MASK 0x7FFF0000
-+#define READERS_MASK 0x0000FFFF
-+#define INDEX_SHIFT 16
-+#define PUT_INDEX(lockp,index) \
-+ lockp->lock = (((lockp->lock) & ~INDEX_MASK) | (index) << INDEX_SHIFT)
-+#define GET_INDEX(lockp) \
-+ (((lockp->lock) & INDEX_MASK) >> INDEX_SHIFT)
-+
-+/*
-+ * macros to cache and retrieve an index value in a read/write lock
-+ * as well as the cpu where a reader busy period started
-+ * we use the 2nd word (the debug word) for this, so require the
-+ * debug word to be present
-+ */
-+/*
-+ * instrumented rwlock structure -- never used to allocate storage
-+ * only used in macros below to overlay a rwlock_t
-+ */
-+typedef struct inst_rwlock_s {
-+ volatile int lock;
-+ unsigned short index;
-+ unsigned short cpu;
-+} inst_rwlock_t;
-+#define PUT_RWINDEX(rwlock_ptr,indexv) ((inst_rwlock_t *)(rwlock_ptr))->index = indexv
-+#define GET_RWINDEX(rwlock_ptr) ((inst_rwlock_t *)(rwlock_ptr))->index
-+#define PUT_RW_CPU(rwlock_ptr,cpuv) ((inst_rwlock_t *)(rwlock_ptr))->cpu = cpuv
-+#define GET_RW_CPU(rwlock_ptr) ((inst_rwlock_t *)(rwlock_ptr))->cpu
-+
-+/*
-+ * return the number of readers for a rwlock_t
-+ */
-+#define RWLOCK_READERS(rwlock_ptr) rwlock_readers(rwlock_ptr)
-+
-+extern inline int rwlock_readers(rwlock_t *rwlock_ptr)
-+{
-+ int tmp = (int) rwlock_ptr->lock;
-+ return (tmp >= 0) ? tmp : 0;
-+}
-+
-+#define RWLOCK_IS_WRITE_LOCKED(rwlock_ptr) ((rwlock_ptr)->lock < 0)
-+#define RWLOCK_IS_READ_LOCKED(rwlock_ptr) ((rwlock_ptr)->lock > 0)
-+
-+#endif /* _ASM_LOCKMETER_H */
---- linux-2.6.0-test1/include/asm-mips64/pgalloc.h 2003-07-02 14:53:17.000000000 -0700
-+++ 25/include/asm-mips64/pgalloc.h 2003-07-19 17:07:16.000000000 -0700
-@@ -28,7 +28,7 @@ static inline void pmd_populate(struct m
- set_pmd(pmd, __pmd((PAGE_OFFSET + page_to_pfn(pte)) << PAGE_SHIFT));
- }
-
--#define pgd_populate(mm, pgd, pmd) set_pgd(pgd, __pgd(pmd))
-+#define pgd_populate(mm, pgd, pmd) set_pgd(pgd, __pgd(page_address(pmd)))
-
- static inline pgd_t *pgd_alloc(struct mm_struct *mm)
- {
-@@ -88,7 +88,7 @@ static inline void pte_free(struct page
- #define __pte_free_tlb(tlb,pte) tlb_remove_page((tlb),(pte))
- #define __pmd_free_tlb(tlb,x) do { } while (0)
-
--static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long address)
-+static inline pmd_t *pmd_alloc_one_kernel(struct mm_struct *mm, unsigned long addr)
- {
- pmd_t *pmd;
-
-@@ -98,9 +98,18 @@ static inline pmd_t *pmd_alloc_one(struc
- return pmd;
- }
-
--static inline void pmd_free(pmd_t *pmd)
-+static inline struct page *pmd_alloc_one(struct mm_struct *mm, unsigned long addr)
- {
-- free_pages((unsigned long)pmd, PMD_ORDER);
-+ pmd_t *pmd = pmd_alloc_one_kernel(mm, addr);
-+ if (pmd)
-+ return virt_to_page(pmd);
-+ else
-+ return NULL;
-+}
-+
-+static inline void pmd_free(struct page *pmd)
-+{
-+ __free_pages(pmd, PMD_ORDER);
- }
-
- extern pte_t kptbl[(PAGE_SIZE << PGD_ORDER)/sizeof(pte_t)];
---- linux-2.6.0-test1/include/asm-mips64/pgtable.h 2003-07-02 14:53:17.000000000 -0700
-+++ 25/include/asm-mips64/pgtable.h 2003-07-19 17:07:16.000000000 -0700
-@@ -155,11 +155,13 @@ extern pmd_t empty_bad_pmd_table[2*PAGE_
- #define pmd_page(pmd) (pfn_to_page(pmd_phys(pmd) >> PAGE_SHIFT))
- #define pmd_page_kernel(pmd) pmd_val(pmd)
-
--static inline unsigned long pgd_page(pgd_t pgd)
-+static inline unsigned long __pgd_page(pgd_t pgd)
- {
- return pgd_val(pgd);
- }
-
-+#define pgd_page(pgd) virt_to_page(__pgd_page(pgd))
-+
- static inline int pte_none(pte_t pte)
- {
- return !(pte_val(pte) & ~_PAGE_GLOBAL);
-@@ -397,10 +399,16 @@ static inline pte_t pte_modify(pte_t pte
- /* Find an entry in the second-level page table.. */
- static inline pmd_t *pmd_offset(pgd_t * dir, unsigned long address)
- {
-- return (pmd_t *) pgd_page(*dir) +
-+ return (pmd_t *)__pgd_page(*dir) +
- ((address >> PMD_SHIFT) & (PTRS_PER_PMD - 1));
- }
-
-+#define pmd_offset_kernel(pgd, addr) pmd_offset(pgd, addr)
-+#define pmd_offset_map(pgd, addr) pmd_offset(pgd, addr)
-+#define pmd_offset_map_nested(pgd, addr) pmd_offset(pgd, addr)
-+#define pmd_unmap(pmd) do { } while(0)
-+#define pmd_unmap_nested(pmd) do { } while(0)
-+
- /* Find an entry in the third-level page table.. */
- #define __pte_offset(address) \
- (((address) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1))
---- linux-2.6.0-test1/include/asm-mips64/posix_types.h 2003-07-02 14:53:17.000000000 -0700
-+++ 25/include/asm-mips64/posix_types.h 2003-07-19 17:06:39.000000000 -0700
-@@ -15,7 +15,9 @@
- * assume GCC is being used.
- */
-
--typedef unsigned int __kernel_dev_t;
-+#ifdef __GNUC__
-+typedef unsigned long __kernel_dev_t;
-+#endif
- typedef unsigned long __kernel_ino_t;
- typedef unsigned int __kernel_mode_t;
- typedef unsigned int __kernel_nlink_t;
---- linux-2.6.0-test1/include/asm-mips64/smp.h 2003-07-02 14:53:17.000000000 -0700
-+++ 25/include/asm-mips64/smp.h 2003-07-19 17:04:07.000000000 -0700
-@@ -17,6 +17,7 @@
-
- #include <linux/bitops.h>
- #include <linux/threads.h>
-+#include <linux/cpumask.h>
- #include <asm/atomic.h>
-
- #define smp_processor_id() (current_thread_info()->cpu)
-@@ -45,56 +46,17 @@ extern struct call_data_struct *call_dat
- #define SMP_RESCHEDULE_YOURSELF 0x1 /* XXX braindead */
- #define SMP_CALL_FUNCTION 0x2
-
--#if (NR_CPUS <= _MIPS_SZLONG)
--
--typedef unsigned long cpumask_t;
--
--#define CPUMASK_CLRALL(p) (p) = 0
--#define CPUMASK_SETB(p, bit) (p) |= 1UL << (bit)
--#define CPUMASK_CLRB(p, bit) (p) &= ~(1UL << (bit))
--#define CPUMASK_TSTB(p, bit) ((p) & (1UL << (bit)))
--
--#elif (NR_CPUS <= 128)
--
--/*
-- * The foll should work till 128 cpus.
-- */
--#define CPUMASK_SIZE (NR_CPUS/_MIPS_SZLONG)
--#define CPUMASK_INDEX(bit) ((bit) >> 6)
--#define CPUMASK_SHFT(bit) ((bit) & 0x3f)
--
--typedef struct {
-- unsigned long _bits[CPUMASK_SIZE];
--} cpumask_t;
--
--#define CPUMASK_CLRALL(p) (p)._bits[0] = 0, (p)._bits[1] = 0
--#define CPUMASK_SETB(p, bit) (p)._bits[CPUMASK_INDEX(bit)] |= \
-- (1UL << CPUMASK_SHFT(bit))
--#define CPUMASK_CLRB(p, bit) (p)._bits[CPUMASK_INDEX(bit)] &= \
-- ~(1UL << CPUMASK_SHFT(bit))
--#define CPUMASK_TSTB(p, bit) ((p)._bits[CPUMASK_INDEX(bit)] & \
-- (1UL << CPUMASK_SHFT(bit)))
--
--#else
--#error cpumask macros only defined for 128p kernels
--#endif
--
- extern cpumask_t phys_cpu_present_map;
- extern cpumask_t cpu_online_map;
-
--#define cpu_possible(cpu) (phys_cpu_present_map & (1<<(cpu)))
--#define cpu_online(cpu) (cpu_online_map & (1<<(cpu)))
--
--extern inline unsigned int num_online_cpus(void)
--{
-- return hweight32(cpu_online_map);
--}
-+#define cpu_possible(cpu) cpu_isset(cpu, phys_cpu_present_map)
-+#define cpu_online(cpu) cpu_isset(cpu, cpu_online_map)
-
--extern volatile unsigned long cpu_callout_map;
-+extern cpumask_t cpu_callout_map;
- /* We don't mark CPUs online until __cpu_up(), so we need another measure */
- static inline int num_booting_cpus(void)
- {
-- return hweight32(cpu_callout_map);
-+ return cpus_weight(cpu_callout_map);
- }
-
- #endif /* CONFIG_SMP */
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-mips/lockmeter.h 2003-07-19 17:06:40.000000000 -0700
-@@ -0,0 +1,126 @@
-+/*
-+ * Copyright (C) 1999,2000 Silicon Graphics, Inc.
-+ *
-+ * Written by John Hawkes (hawkes@sgi.com)
-+ * Based on klstat.h by Jack Steiner (steiner@sgi.com)
-+ * Ported to mips32 for Asita Technologies
-+ * by D.J. Barrow ( dj.barrow@asitatechnologies.com )
-+ */
-+#ifndef _ASM_LOCKMETER_H
-+#define _ASM_LOCKMETER_H
-+
-+/* do_gettimeoffset is a function pointer on mips */
-+/* & it is not included by <linux/time.h> */
-+#include <asm/time.h>
-+#include <linux/time.h>
-+#include <asm/div64.h>
-+
-+#define SPINLOCK_MAGIC_INIT /* */
-+
-+#define CPU_CYCLE_FREQUENCY get_cpu_cycle_frequency()
-+
-+#define THIS_CPU_NUMBER smp_processor_id()
-+
-+static uint32_t cpu_cycle_frequency = 0;
-+
-+static uint32_t get_cpu_cycle_frequency(void)
-+{
-+ /* a total hack, slow and invasive, but ... it works */
-+ int sec;
-+ uint32_t start_cycles;
-+ struct timeval tv;
-+
-+ if (cpu_cycle_frequency == 0) { /* uninitialized */
-+ do_gettimeofday(&tv);
-+ sec = tv.tv_sec; /* set up to catch the tv_sec rollover */
-+ while (sec == tv.tv_sec) { do_gettimeofday(&tv); }
-+ sec = tv.tv_sec; /* rolled over to a new sec value */
-+ start_cycles = get_cycles();
-+ while (sec == tv.tv_sec) { do_gettimeofday(&tv); }
-+ cpu_cycle_frequency = get_cycles() - start_cycles;
-+ }
-+
-+ return cpu_cycle_frequency;
-+}
-+
-+extern struct timeval xtime;
-+
-+static uint64_t get_cycles64(void)
-+{
-+ static uint64_t last_get_cycles64 = 0;
-+ uint64_t ret;
-+ unsigned long sec;
-+ unsigned long usec, usec_offset;
-+
-+again:
-+ sec = xtime.tv_sec;
-+ usec = xtime.tv_usec;
-+ usec_offset = do_gettimeoffset();
-+ if ((xtime.tv_sec != sec) ||
-+ (xtime.tv_usec != usec)||
-+ (usec_offset >= 20000))
-+ goto again;
-+
-+ ret = ((uint64_t)(usec + usec_offset) * cpu_cycle_frequency);
-+ /* We can't do a normal 64 bit division on mips without libgcc.a */
-+ do_div(ret,1000000);
-+ ret += ((uint64_t)sec * cpu_cycle_frequency);
-+
-+ /* XXX why does time go backwards? do_gettimeoffset? general time adj? */
-+ if (ret <= last_get_cycles64)
-+ ret = last_get_cycles64+1;
-+ last_get_cycles64 = ret;
-+
-+ return ret;
-+}
-+
-+/*
-+ * macros to cache and retrieve an index value inside of a lock
-+ * these macros assume that there are less than 65536 simultaneous
-+ * (read mode) holders of a rwlock.
-+ * we also assume that the hash table has less than 32767 entries.
-+ * the high order bit is used for write locking a rw_lock
-+ */
-+#define INDEX_MASK 0x7FFF0000
-+#define READERS_MASK 0x0000FFFF
-+#define INDEX_SHIFT 16
-+#define PUT_INDEX(lockp,index) \
-+ lockp->lock = (((lockp->lock) & ~INDEX_MASK) | (index) << INDEX_SHIFT)
-+#define GET_INDEX(lockp) \
-+ (((lockp->lock) & INDEX_MASK) >> INDEX_SHIFT)
-+
-+/*
-+ * macros to cache and retrieve an index value in a read/write lock
-+ * as well as the cpu where a reader busy period started
-+ * we use the 2nd word (the debug word) for this, so require the
-+ * debug word to be present
-+ */
-+/*
-+ * instrumented rwlock structure -- never used to allocate storage
-+ * only used in macros below to overlay a rwlock_t
-+ */
-+typedef struct inst_rwlock_s {
-+ volatile int lock;
-+ unsigned short index;
-+ unsigned short cpu;
-+} inst_rwlock_t;
-+#define PUT_RWINDEX(rwlock_ptr,indexv) ((inst_rwlock_t *)(rwlock_ptr))->index = indexv
-+#define GET_RWINDEX(rwlock_ptr) ((inst_rwlock_t *)(rwlock_ptr))->index
-+#define PUT_RW_CPU(rwlock_ptr,cpuv) ((inst_rwlock_t *)(rwlock_ptr))->cpu = cpuv
-+#define GET_RW_CPU(rwlock_ptr) ((inst_rwlock_t *)(rwlock_ptr))->cpu
-+
-+/*
-+ * return the number of readers for a rwlock_t
-+ */
-+#define RWLOCK_READERS(rwlock_ptr) rwlock_readers(rwlock_ptr)
-+
-+extern inline int rwlock_readers(rwlock_t *rwlock_ptr)
-+{
-+ int tmp = (int) rwlock_ptr->lock;
-+ return (tmp >= 0) ? tmp : 0;
-+}
-+
-+#define RWLOCK_IS_WRITE_LOCKED(rwlock_ptr) ((rwlock_ptr)->lock < 0)
-+#define RWLOCK_IS_READ_LOCKED(rwlock_ptr) ((rwlock_ptr)->lock > 0)
-+
-+#endif /* _ASM_LOCKMETER_H */
---- linux-2.6.0-test1/include/asm-mips/pgalloc.h 2003-07-02 14:53:17.000000000 -0700
-+++ 25/include/asm-mips/pgalloc.h 2003-07-19 17:07:16.000000000 -0700
-@@ -96,7 +96,8 @@ static inline void pte_free(struct page
- * allocating and freeing a pmd is trivial: the 1-entry pmd is
- * inside the pgd, so has no extra memory associated with it.
- */
--#define pmd_alloc_one(mm, addr) ({ BUG(); ((pmd_t *)2); })
-+#define pmd_alloc_one(mm, addr) ({ BUG(); ((struct page *)2); })
-+#define pmd_alloc_one_kernel(mm, addr) ({ BUG(); ((pmd_t *)2); })
- #define pmd_free(x) do { } while (0)
- #define __pmd_free_tlb(tlb,x) do { } while (0)
-
---- linux-2.6.0-test1/include/asm-mips/pgtable.h 2003-07-02 14:53:17.000000000 -0700
-+++ 25/include/asm-mips/pgtable.h 2003-07-19 17:07:16.000000000 -0700
-@@ -374,6 +374,12 @@ static inline pmd_t *pmd_offset(pgd_t *d
- return (pmd_t *) dir;
- }
-
-+#define pmd_offset_kernel(pgd, addr) pmd_offset(pgd, addr)
-+#define pmd_offset_map(pgd, addr) pmd_offset(pgd, addr)
-+#define pmd_offset_map_nested(pgd, addr) pmd_offset(pgd, addr)
-+#define pmd_unmap(pmd) do { } while (0)
-+#define pmd_unmap_nested(pmd) do { } while (0)
-+
- /* Find an entry in the third-level page table.. */
- #define __pte_offset(address) \
- (((address) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1))
---- linux-2.6.0-test1/include/asm-mips/posix_types.h 2003-07-02 14:53:17.000000000 -0700
-+++ 25/include/asm-mips/posix_types.h 2003-07-19 17:06:39.000000000 -0700
-@@ -14,7 +14,9 @@
- * assume GCC is being used.
- */
-
--typedef unsigned int __kernel_dev_t;
-+#ifdef __GNUC__
-+typedef unsigned long long __kernel_dev_t;
-+#endif
- typedef unsigned long __kernel_ino_t;
- typedef unsigned int __kernel_mode_t;
- typedef unsigned long __kernel_nlink_t;
---- linux-2.6.0-test1/include/asm-mips/smp.h 2003-07-02 14:53:17.000000000 -0700
-+++ 25/include/asm-mips/smp.h 2003-07-19 17:04:07.000000000 -0700
-@@ -17,6 +17,7 @@
-
- #include <linux/bitops.h>
- #include <linux/threads.h>
-+#include <linux/cpumask.h>
- #include <asm/atomic.h>
-
- #define smp_processor_id() (current_thread_info()->cpu)
-@@ -45,56 +46,17 @@ extern struct call_data_struct *call_dat
- #define SMP_RESCHEDULE_YOURSELF 0x1 /* XXX braindead */
- #define SMP_CALL_FUNCTION 0x2
-
--#if (NR_CPUS <= _MIPS_SZLONG)
--
--typedef unsigned long cpumask_t;
--
--#define CPUMASK_CLRALL(p) (p) = 0
--#define CPUMASK_SETB(p, bit) (p) |= 1UL << (bit)
--#define CPUMASK_CLRB(p, bit) (p) &= ~(1UL << (bit))
--#define CPUMASK_TSTB(p, bit) ((p) & (1UL << (bit)))
--
--#elif (NR_CPUS <= 128)
--
--/*
-- * The foll should work till 128 cpus.
-- */
--#define CPUMASK_SIZE (NR_CPUS/_MIPS_SZLONG)
--#define CPUMASK_INDEX(bit) ((bit) >> 6)
--#define CPUMASK_SHFT(bit) ((bit) & 0x3f)
--
--typedef struct {
-- unsigned long _bits[CPUMASK_SIZE];
--} cpumask_t;
--
--#define CPUMASK_CLRALL(p) (p)._bits[0] = 0, (p)._bits[1] = 0
--#define CPUMASK_SETB(p, bit) (p)._bits[CPUMASK_INDEX(bit)] |= \
-- (1UL << CPUMASK_SHFT(bit))
--#define CPUMASK_CLRB(p, bit) (p)._bits[CPUMASK_INDEX(bit)] &= \
-- ~(1UL << CPUMASK_SHFT(bit))
--#define CPUMASK_TSTB(p, bit) ((p)._bits[CPUMASK_INDEX(bit)] & \
-- (1UL << CPUMASK_SHFT(bit)))
--
--#else
--#error cpumask macros only defined for 128p kernels
--#endif
--
- extern cpumask_t phys_cpu_present_map;
- extern cpumask_t cpu_online_map;
-
--#define cpu_possible(cpu) (phys_cpu_present_map & (1<<(cpu)))
--#define cpu_online(cpu) (cpu_online_map & (1<<(cpu)))
--
--extern inline unsigned int num_online_cpus(void)
--{
-- return hweight32(cpu_online_map);
--}
-+#define cpu_possible(cpu) cpu_isset(cpu, phys_cpu_present_map)
-+#define cpu_online(cpu) cpu_isset(cpu, cpu_online_map)
-
--extern volatile unsigned long cpu_callout_map;
-+extern cpumask_t cpu_callout_map;
- /* We don't mark CPUs online until __cpu_up(), so we need another measure */
- static inline int num_booting_cpus(void)
- {
-- return hweight32(cpu_callout_map);
-+ return cpus_weight(cpu_callout_map);
- }
-
- #endif /* CONFIG_SMP */
---- linux-2.6.0-test1/include/asm-mips/spinlock.h 2003-07-02 14:53:17.000000000 -0700
-+++ 25/include/asm-mips/spinlock.h 2003-07-19 17:06:40.000000000 -0700
-@@ -91,9 +91,18 @@ static inline unsigned int _raw_spin_try
-
- typedef struct {
- volatile unsigned int lock;
-+#ifdef CONFIG_LOCKMETER
-+ /* required for LOCKMETER since all bits in lock are used */
-+ /* and we need this storage for CPU and lock INDEX */
-+ unsigned lockmeter_magic;
-+#endif
- } rwlock_t;
-
-+#ifdef CONFIG_LOCKMETER
-+#define RW_LOCK_UNLOCKED (rwlock_t) { 0, 0 }
-+#else
- #define RW_LOCK_UNLOCKED (rwlock_t) { 0 }
-+#endif
-
- #define rwlock_init(x) do { *(x) = RW_LOCK_UNLOCKED; } while(0)
-
---- linux-2.6.0-test1/include/asm-parisc/pgalloc.h 2003-06-14 12:18:35.000000000 -0700
-+++ 25/include/asm-parisc/pgalloc.h 2003-07-19 17:07:16.000000000 -0700
-@@ -28,12 +28,12 @@ static inline void pgd_free(pgd_t *pgd)
-
- /* Three Level Page Table Support for pmd's */
-
--static inline void pgd_populate(struct mm_struct *mm, pgd_t *pgd, pmd_t *pmd)
-+static inline void pgd_populate(struct mm_struct *mm, pgd_t *pgd, struct page *pmd)
- {
-- pgd_val(*pgd) = _PAGE_TABLE + __pa((unsigned long)pmd);
-+ pgd_val(*pgd) = _PAGE_TABLE + __pa(page_address(pmd));
- }
-
--static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long address)
-+static inline pmd_t *pmd_alloc_one_kernel(struct mm_struct *mm, unsigned long addr)
- {
- pmd_t *pmd = (pmd_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT);
- if (pmd)
-@@ -41,9 +41,18 @@ static inline pmd_t *pmd_alloc_one(struc
- return pmd;
- }
-
--static inline void pmd_free(pmd_t *pmd)
-+static inline struct page *pmd_alloc_one(struct mm_struct *mm, unsigned long addr)
- {
-- free_page((unsigned long)pmd);
-+ pmd_t *pmd = pmd_alloc_one_kernel(mm, addr);
-+ if (pmd)
-+ return virt_to_page(pmd);
-+ else
-+ return NULL;
-+}
-+
-+static inline void pmd_free(struct page *pmd)
-+{
-+ __free_page(pmd);
- }
-
- #else
-@@ -55,7 +64,8 @@ static inline void pmd_free(pmd_t *pmd)
- * inside the pgd, so has no extra memory associated with it.
- */
-
--#define pmd_alloc_one(mm, addr) ({ BUG(); ((pmd_t *)2); })
-+#define pmd_alloc_one(mm, addr) ({ BUG(); ((struct page *)2); })
-+#define pmd_alloc_one_kernel(mm, addr) pmd_alloc_one(mm, addr)
- #define pmd_free(x) do { } while (0)
- #define pgd_populate(mm, pmd, pte) BUG()
-
---- linux-2.6.0-test1/include/asm-parisc/pgtable.h 2003-07-13 21:44:35.000000000 -0700
-+++ 25/include/asm-parisc/pgtable.h 2003-07-19 17:07:16.000000000 -0700
-@@ -242,7 +242,8 @@ extern unsigned long *empty_zero_page;
-
-
- #ifdef __LP64__
--#define pgd_page(pgd) ((unsigned long) __va(pgd_val(pgd) & PAGE_MASK))
-+#define __pgd_page(pgd) ((unsigned long) __va(pgd_val(pgd) & PAGE_MASK))
-+#define pgd_page(pgd) virt_to_page(__pgd_page(pgd))
-
- /* For 64 bit we have three level tables */
-
-@@ -339,11 +340,17 @@ extern inline pte_t pte_modify(pte_t pte
-
- #ifdef __LP64__
- #define pmd_offset(dir,address) \
--((pmd_t *) pgd_page(*(dir)) + (((address)>>PMD_SHIFT) & (PTRS_PER_PMD-1)))
-+((pmd_t *)__pgd_page(*(dir)) + (((address)>>PMD_SHIFT) & (PTRS_PER_PMD-1)))
- #else
- #define pmd_offset(dir,addr) ((pmd_t *) dir)
- #endif
-
-+#define pmd_offset_kernel(pgd, addr) pmd_offset(pgd, addr)
-+#define pmd_offset_map(pgd, addr) pmd_offset(pgd, addr)
-+#define pmd_offset_map_nested(pgd, addr) pmd_offset(pgd, addr)
-+#define pmd_unmap(pmd) do { } while (0)
-+#define pmd_unmap_nested(pmd) do { } while (0)
-+
- /* Find an entry in the third-level page table.. */
- #define pte_index(address) (((address) >> PAGE_SHIFT) & (PTRS_PER_PTE-1))
- #define pte_offset_kernel(pmd, address) \
---- linux-2.6.0-test1/include/asm-parisc/posix_types.h 2003-06-14 12:18:30.000000000 -0700
-+++ 25/include/asm-parisc/posix_types.h 2003-07-19 17:06:39.000000000 -0700
-@@ -6,7 +6,9 @@
- * be a little careful about namespace pollution etc. Also, we cannot
- * assume GCC is being used.
- */
--typedef unsigned int __kernel_dev_t;
-+#ifdef __GNUC__
-+typedef unsigned long long __kernel_dev_t;
-+#endif
- typedef unsigned long __kernel_ino_t;
- typedef unsigned short __kernel_mode_t;
- typedef unsigned short __kernel_nlink_t;
---- linux-2.6.0-test1/include/asm-parisc/smp.h 2003-06-22 12:04:45.000000000 -0700
-+++ 25/include/asm-parisc/smp.h 2003-07-19 17:04:07.000000000 -0700
-@@ -14,9 +14,10 @@
- #ifndef ASSEMBLY
- #include <linux/bitops.h>
- #include <linux/threads.h> /* for NR_CPUS */
-+#include <linux/cpumask.h>
- typedef unsigned long address_t;
-
--extern volatile unsigned long cpu_online_map;
-+extern cpumask_t cpu_online_map;
-
-
- /*
-@@ -51,22 +52,10 @@ extern void smp_send_reschedule(int cpu)
- extern unsigned long cpu_present_mask;
-
- #define smp_processor_id() (current_thread_info()->cpu)
--#define cpu_online(cpu) (cpu_online_map & (1<<(cpu)))
-+#define cpu_online(cpu) cpu_isset(cpu, cpu_online_map)
-
--#define cpu_possible(cpu) (cpu_present_mask & (1<<(cpu)))
-+#define cpu_possible(cpu) cpu_isset(cpu, cpu_present_mask)
-
--extern inline unsigned int num_online_cpus(void)
--{
-- return hweight32(cpu_online_map);
--}
--
--extern inline unsigned int any_online_cpu(unsigned int mask)
--{
-- if (mask & cpu_online_map)
-- return __ffs(mask & cpu_online_map);
--
-- return NR_CPUS;
--}
- #endif /* CONFIG_SMP */
-
- #define NO_PROC_ID 0xFF /* No processor magic marker */
---- linux-2.6.0-test1/include/asm-ppc64/mmu_context.h 2003-07-10 18:50:32.000000000 -0700
-+++ 25/include/asm-ppc64/mmu_context.h 2003-07-19 17:04:07.000000000 -0700
-@@ -143,7 +143,7 @@ switch_mm(struct mm_struct *prev, struct
- struct task_struct *tsk)
- {
- flush_stab(tsk, next);
-- set_bit(smp_processor_id(), &next->cpu_vm_mask);
-+ cpu_set(smp_processor_id(), next->cpu_vm_mask);
- }
-
- #define deactivate_mm(tsk,mm) do { } while (0)
---- linux-2.6.0-test1/include/asm-ppc64/pgalloc.h 2003-06-14 12:17:56.000000000 -0700
-+++ 25/include/asm-ppc64/pgalloc.h 2003-07-19 17:07:16.000000000 -0700
-@@ -26,10 +26,10 @@ pgd_free(pgd_t *pgd)
- free_page((unsigned long)pgd);
- }
-
--#define pgd_populate(MM, PGD, PMD) pgd_set(PGD, PMD)
-+#define pgd_populate(MM, PGD, PMD) pgd_set(PGD, page_address(PMD))
-
- static inline pmd_t *
--pmd_alloc_one(struct mm_struct *mm, unsigned long addr)
-+pmd_alloc_one_kernel(struct mm_struct *mm, unsigned long addr)
- {
- pmd_t *pmd;
-
-@@ -39,10 +39,19 @@ pmd_alloc_one(struct mm_struct *mm, unsi
- return pmd;
- }
-
-+static inline struct page *pmd_alloc_one(struct mm_struct *mm, unsigned long addr)
-+{
-+ pmd_t *pmd = pmd_alloc_one_kernel(mm, addr);
-+ if (pmd)
-+ return virt_to_page(pmd);
-+ else
-+ return NULL;
-+}
-+
- static inline void
--pmd_free(pmd_t *pmd)
-+pmd_free(struct page *pmd)
- {
-- free_page((unsigned long)pmd);
-+ __free_page(pmd);
- }
-
- #define __pmd_free_tlb(tlb, pmd) pmd_free(pmd)
---- linux-2.6.0-test1/include/asm-ppc64/pgtable.h 2003-06-14 12:18:34.000000000 -0700
-+++ 25/include/asm-ppc64/pgtable.h 2003-07-19 17:07:16.000000000 -0700
-@@ -190,7 +190,8 @@ extern unsigned long empty_zero_page[PAG
- #define pgd_bad(pgd) ((pgd_val(pgd)) == 0)
- #define pgd_present(pgd) (pgd_val(pgd) != 0UL)
- #define pgd_clear(pgdp) (pgd_val(*(pgdp)) = 0UL)
--#define pgd_page(pgd) (__bpn_to_ba(pgd_val(pgd)))
-+#define __pgd_page(pgd) (__bpn_to_ba(pgd_val(pgd)))
-+#define pgd_page(pgd) virt_to_page(__pgd_page(pgd))
-
- /*
- * Find an entry in a page-table-directory. We combine the address region
-@@ -203,12 +204,18 @@ extern unsigned long empty_zero_page[PAG
-
- /* Find an entry in the second-level page table.. */
- #define pmd_offset(dir,addr) \
-- ((pmd_t *) pgd_page(*(dir)) + (((addr) >> PMD_SHIFT) & (PTRS_PER_PMD - 1)))
-+ ((pmd_t *)__pgd_page(*(dir)) + (((addr) >> PMD_SHIFT) & (PTRS_PER_PMD - 1)))
-
- /* Find an entry in the third-level page table.. */
- #define pte_offset_kernel(dir,addr) \
- ((pte_t *) pmd_page_kernel(*(dir)) + (((addr) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1)))
-
-+#define pmd_offset_kernel(pgd, addr) pmd_offset(pgd, addr)
-+#define pmd_offset_map(pgd, addr) pmd_offset(pgd, addr)
-+#define pmd_offset_map_nested(pgd, addr) pmd_offset(pgd, addr)
-+#define pmd_unmap(pmd) do { } while (0)
-+#define pmd_unmap_nested(pmd) do { } while (0)
-+
- #define pte_offset_map(dir,addr) pte_offset_kernel((dir), (addr))
- #define pte_offset_map_nested(dir,addr) pte_offset_kernel((dir), (addr))
- #define pte_unmap(pte) do { } while(0)
---- linux-2.6.0-test1/include/asm-ppc64/semaphore.h 2003-06-26 22:07:26.000000000 -0700
-+++ 25/include/asm-ppc64/semaphore.h 2003-07-19 17:04:51.000000000 -0700
-@@ -22,6 +22,7 @@ struct semaphore {
- * sleeping on `wait'.
- */
- atomic_t count;
-+ int sleepers;
- wait_queue_head_t wait;
- #ifdef WAITQUEUE_DEBUG
- long __magic;
-@@ -37,6 +38,7 @@ struct semaphore {
-
- #define __SEMAPHORE_INITIALIZER(name, count) \
- { ATOMIC_INIT(count), \
-+ 0, \
- __WAIT_QUEUE_HEAD_INITIALIZER((name).wait) \
- __SEM_DEBUG_INIT(name) }
-
-@@ -52,6 +54,7 @@ struct semaphore {
- static inline void sema_init (struct semaphore *sem, int val)
- {
- atomic_set(&sem->count, val);
-+ sem->sleepers = 0;
- init_waitqueue_head(&sem->wait);
- #ifdef WAITQUEUE_DEBUG
- sem->__magic = (long)&sem->__magic;
---- linux-2.6.0-test1/include/asm-ppc64/smp.h 2003-07-02 14:53:17.000000000 -0700
-+++ 25/include/asm-ppc64/smp.h 2003-07-19 17:04:07.000000000 -0700
-@@ -19,6 +19,7 @@
-
- #include <linux/config.h>
- #include <linux/threads.h>
-+#include <linux/cpumask.h>
- #include <linux/kernel.h>
-
- #ifdef CONFIG_SMP
-@@ -27,31 +28,13 @@
-
- #include <asm/paca.h>
-
--extern unsigned long cpu_online_map;
--
- extern void smp_message_pass(int target, int msg, unsigned long data, int wait);
- extern void smp_send_tlb_invalidate(int);
- extern void smp_send_xmon_break(int cpu);
- struct pt_regs;
- extern void smp_message_recv(int, struct pt_regs *);
-
--#define cpu_online(cpu) test_bit((cpu), &cpu_online_map)
--
- #define cpu_possible(cpu) paca[cpu].active
--
--static inline unsigned int num_online_cpus(void)
--{
-- return hweight64(cpu_online_map);
--}
--
--static inline unsigned int any_online_cpu(unsigned int mask)
--{
-- if (mask & cpu_online_map)
-- return __ffs(mask & cpu_online_map);
--
-- return NR_CPUS;
--}
--
- #define smp_processor_id() (get_paca()->xPacaIndex)
-
- /* Since OpenPIC has only 4 IPIs, we use slightly different message numbers.
---- linux-2.6.0-test1/include/asm-ppc64/tlb.h 2003-06-14 12:18:07.000000000 -0700
-+++ 25/include/asm-ppc64/tlb.h 2003-07-19 17:04:07.000000000 -0700
-@@ -49,6 +49,7 @@ static inline void __tlb_remove_tlb_entr
- struct ppc64_tlb_batch *batch = &ppc64_tlb_batch[cpu];
- unsigned long i = batch->index;
- pte_t pte;
-+ cpumask_t local_cpumask = cpumask_of_cpu(cpu);
-
- if (pte_val(*ptep) & _PAGE_HASHPTE) {
- pte = __pte(pte_update(ptep, _PAGE_HPTEFLAGS, 0));
-@@ -61,7 +62,7 @@ static inline void __tlb_remove_tlb_entr
- if (i == PPC64_TLB_BATCH_NR) {
- int local = 0;
-
-- if (tlb->mm->cpu_vm_mask == (1UL << cpu))
-+ if (cpus_equal(tlb->mm->cpu_vm_mask, local_cpumask))
- local = 1;
-
- flush_hash_range(tlb->mm->context, i, local);
-@@ -78,8 +79,9 @@ static inline void tlb_flush(struct mmu_
- int cpu = smp_processor_id();
- struct ppc64_tlb_batch *batch = &ppc64_tlb_batch[cpu];
- int local = 0;
-+ cpumask_t local_cpumask = cpumask_of_cpu(smp_processor_id());
-
-- if (tlb->mm->cpu_vm_mask == (1UL << smp_processor_id()))
-+ if (cpus_equal(tlb->mm->cpu_vm_mask, local_cpumask))
- local = 1;
-
- flush_hash_range(tlb->mm->context, batch->index, local);
---- linux-2.6.0-test1/include/asm-ppc/hardirq.h 2003-07-02 14:53:17.000000000 -0700
-+++ 25/include/asm-ppc/hardirq.h 2003-07-19 17:03:50.000000000 -0700
-@@ -14,8 +14,6 @@
- */
- typedef struct {
- unsigned long __softirq_pending; /* set_bit is used on this */
-- unsigned int __syscall_count;
-- struct task_struct * __ksoftirqd_task;
- unsigned int __last_jiffy_stamp;
- } ____cacheline_aligned irq_cpustat_t;
-
---- linux-2.6.0-test1/include/asm-ppc/ipc.h 2003-06-14 12:18:52.000000000 -0700
-+++ 25/include/asm-ppc/ipc.h 2003-07-19 17:03:50.000000000 -0700
-@@ -14,6 +14,7 @@ struct ipc_kludge {
- #define SEMOP 1
- #define SEMGET 2
- #define SEMCTL 3
-+#define SEMTIMEDOP 4
- #define MSGSND 11
- #define MSGRCV 12
- #define MSGGET 13
---- linux-2.6.0-test1/include/asm-ppc/pci.h 2003-06-22 12:04:45.000000000 -0700
-+++ 25/include/asm-ppc/pci.h 2003-07-19 17:03:50.000000000 -0700
-@@ -53,18 +53,12 @@ extern unsigned long phys_to_bus(unsigne
- extern unsigned long pci_phys_to_bus(unsigned long pa, int busnr);
- extern unsigned long pci_bus_to_phys(unsigned int ba, int busnr);
-
--/* Dynamic DMA Mapping stuff, stolen from i386
-- * ++ajoshi
-+/*
-+ * Dynamic DMA Mapping stuff
-+ * Originally stolen from i386 by ajoshi and updated by paulus
-+ * Non-consistent cache support by Dan Malek
- */
-
--#include <linux/types.h>
--#include <linux/slab.h>
--#include <linux/string.h>
--#include <asm/scatterlist.h>
--#include <asm/io.h>
--
--struct pci_dev;
--
- /* The PCI address space does equal the physical memory
- * address space. The networking and block device layers use
- * this boolean for bounce buffer decisions.
-@@ -101,8 +95,7 @@ extern void pci_free_consistent(struct p
- static inline dma_addr_t pci_map_single(struct pci_dev *hwdev, void *ptr,
- size_t size, int direction)
- {
-- if (direction == PCI_DMA_NONE)
-- BUG();
-+ BUG_ON(direction == PCI_DMA_NONE);
-
- consistent_sync(ptr, size, direction);
-
-@@ -130,10 +123,11 @@ static inline void pci_unmap_single(stru
- * to pci_map_single, but takes a struct page instead of a virtual address
- */
- static inline dma_addr_t pci_map_page(struct pci_dev *hwdev, struct page *page,
-- unsigned long offset, size_t size, int direction)
-+ unsigned long offset, size_t size,
-+ int direction)
- {
-- if (direction == PCI_DMA_NONE)
-- BUG();
-+ BUG_ON(direction == PCI_DMA_NONE);
-+ consistent_sync_page(page, offset, size, direction);
- return (page - mem_map) * PAGE_SIZE + PCI_DRAM_OFFSET + offset;
- }
-
-@@ -171,10 +165,11 @@ static inline int pci_map_sg(struct pci_
- /*
- * temporary 2.4 hack
- */
-- for (i = 0; i < nents; i++) {
-- if (!sg[i].page)
-- BUG();
-- sg[i].dma_address = page_to_bus(sg[i].page) + sg[i].offset;
-+ for (i = 0; i < nents; i++, sg++) {
-+ BUG_ON(!sg->page);
-+ consistent_sync_page(sg->page, sg->offset,
-+ sg->length, direction);
-+ sg->dma_address = page_to_bus(sg->page) + sg->offset;
- }
-
- return nents;
-@@ -187,8 +182,7 @@ static inline int pci_map_sg(struct pci_
- static inline void pci_unmap_sg(struct pci_dev *hwdev, struct scatterlist *sg,
- int nents, int direction)
- {
-- if (direction == PCI_DMA_NONE)
-- BUG();
-+ BUG_ON(direction == PCI_DMA_NONE);
- /* nothing to do */
- }
-
-@@ -205,8 +199,7 @@ static inline void pci_dma_sync_single(s
- dma_addr_t dma_handle,
- size_t size, int direction)
- {
-- if (direction == PCI_DMA_NONE)
-- BUG();
-+ BUG_ON(direction == PCI_DMA_NONE);
-
- consistent_sync(bus_to_virt(dma_handle), size, direction);
- }
-@@ -221,9 +214,13 @@ static inline void pci_dma_sync_sg(struc
- struct scatterlist *sg,
- int nelems, int direction)
- {
-- if (direction == PCI_DMA_NONE)
-- BUG();
-- /* nothing to do */
-+ int i;
-+
-+ BUG_ON(direction == PCI_DMA_NONE);
-+
-+ for (i = 0; i < nelems; i++, sg++)
-+ consistent_sync_page(sg->page, sg->offset,
-+ sg->length, direction);
- }
-
- /* Return whether the given PCI device DMA address mask can
---- linux-2.6.0-test1/include/asm-ppc/pgalloc.h 2003-06-14 12:17:55.000000000 -0700
-+++ 25/include/asm-ppc/pgalloc.h 2003-07-19 17:07:16.000000000 -0700
-@@ -15,7 +15,8 @@ extern void pgd_free(pgd_t *pgd);
- * We don't have any real pmd's, and this code never triggers because
- * the pgd will always be present..
- */
--#define pmd_alloc_one(mm,address) ({ BUG(); ((pmd_t *)2); })
-+#define pmd_alloc_one(mm,address) ({ BUG(); ((struct page *)2); })
-+#define pmd_alloc_one_kernel(mm,addr) ({ BUG(); ((pmd_t *)2); })
- #define pmd_free(x) do { } while (0)
- #define __pmd_free_tlb(tlb,x) do { } while (0)
- #define pgd_populate(mm, pmd, pte) BUG()
---- linux-2.6.0-test1/include/asm-ppc/pgtable.h 2003-06-14 12:18:01.000000000 -0700
-+++ 25/include/asm-ppc/pgtable.h 2003-07-19 17:07:16.000000000 -0700
-@@ -370,8 +370,9 @@ static inline int pgd_bad(pgd_t pgd) {
- static inline int pgd_present(pgd_t pgd) { return 1; }
- #define pgd_clear(xp) do { } while (0)
-
--#define pgd_page(pgd) \
-+#define __pgd_page(pgd) \
- ((unsigned long) __va(pgd_val(pgd) & PAGE_MASK))
-+#define pgd_page(pgd) virt_to_page(__pgd_page(pgd))
-
- /*
- * The following only work if pte_present() is true.
-@@ -503,6 +504,12 @@ static inline pmd_t * pmd_offset(pgd_t *
- return (pmd_t *) dir;
- }
-
-+#define pmd_offset_kernel(pgd, addr) pmd_offset(pgd, addr)
-+#define pmd_offset_map(pgd, addr) pmd_offset(pgd, addr)
-+#define pmd_offset_map_nested(pgd, addr) pmd_offset(pgd, addr)
-+#define pmd_unmap(pmd) do { } while (0)
-+#define pmd_unmap_nested(pmd) do { } while (0)
-+
- /* Find an entry in the third-level page table.. */
- #define pte_index(address) \
- (((address) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1))
---- linux-2.6.0-test1/include/asm-ppc/posix_types.h 2003-06-14 12:18:08.000000000 -0700
-+++ 25/include/asm-ppc/posix_types.h 2003-07-19 17:06:39.000000000 -0700
-@@ -7,7 +7,9 @@
- * assume GCC is being used.
- */
-
--typedef unsigned int __kernel_dev_t;
-+#ifdef __GNUC__
-+typedef unsigned long long __kernel_dev_t;
-+#endif
- typedef unsigned long __kernel_ino_t;
- typedef unsigned int __kernel_mode_t;
- typedef unsigned short __kernel_nlink_t;
---- linux-2.6.0-test1/include/asm-ppc/processor.h 2003-06-14 12:17:56.000000000 -0700
-+++ 25/include/asm-ppc/processor.h 2003-07-19 17:03:50.000000000 -0700
-@@ -705,6 +705,7 @@ struct thread_struct {
- .ksp = INIT_SP, \
- .fs = KERNEL_DS, \
- .pgdir = swapper_pg_dir, \
-+ .fpexc_mode = MSR_FE0 | MSR_FE1, \
- }
-
- /*
---- linux-2.6.0-test1/include/asm-ppc/smp.h 2003-06-22 12:04:45.000000000 -0700
-+++ 25/include/asm-ppc/smp.h 2003-07-19 17:04:07.000000000 -0700
-@@ -14,6 +14,7 @@
- #include <linux/kernel.h>
- #include <linux/bitops.h>
- #include <linux/errno.h>
-+#include <linux/cpumask.h>
-
- #ifdef CONFIG_SMP
-
-@@ -28,8 +29,8 @@ struct cpuinfo_PPC {
- };
-
- extern struct cpuinfo_PPC cpu_data[];
--extern unsigned long cpu_online_map;
--extern unsigned long cpu_possible_map;
-+extern cpumask_t cpu_online_map;
-+extern cpumask_t cpu_possible_map;
- extern unsigned long smp_proc_in_lock[];
- extern volatile unsigned long cpu_callin_map[];
- extern int smp_tb_synchronized;
-@@ -45,21 +46,8 @@ extern void smp_local_timer_interrupt(st
-
- #define smp_processor_id() (current_thread_info()->cpu)
-
--#define cpu_online(cpu) (cpu_online_map & (1<<(cpu)))
--#define cpu_possible(cpu) (cpu_possible_map & (1<<(cpu)))
--
--extern inline unsigned int num_online_cpus(void)
--{
-- return hweight32(cpu_online_map);
--}
--
--extern inline unsigned int any_online_cpu(unsigned int mask)
--{
-- if (mask & cpu_online_map)
-- return __ffs(mask & cpu_online_map);
--
-- return NR_CPUS;
--}
-+#define cpu_online(cpu) cpu_isset(cpu, cpu_online_map)
-+#define cpu_possible(cpu) cpu_isset(cpu, cpu_possible_map)
-
- extern int __cpu_up(unsigned int cpu);
-
---- linux-2.6.0-test1/include/asm-ppc/uaccess.h 2003-06-14 12:17:56.000000000 -0700
-+++ 25/include/asm-ppc/uaccess.h 2003-07-19 17:03:51.000000000 -0700
-@@ -16,10 +16,13 @@
- * get_fs() == KERNEL_DS, checking is bypassed.
- *
- * For historical reasons, these macros are grossly misnamed.
-+ *
-+ * The fs/ds values are now the highest legal address in the "segment".
-+ * This simplifies the checking in the routines below.
- */
-
--#define KERNEL_DS ((mm_segment_t) { 0 })
--#define USER_DS ((mm_segment_t) { 1 })
-+#define KERNEL_DS ((mm_segment_t) { ~0UL })
-+#define USER_DS ((mm_segment_t) { TASK_SIZE - 1 })
-
- #define get_ds() (KERNEL_DS)
- #define get_fs() (current->thread.fs)
-@@ -27,14 +30,15 @@
-
- #define segment_eq(a,b) ((a).seg == (b).seg)
-
--#define __kernel_ok (segment_eq(get_fs(), KERNEL_DS))
--#define __user_ok(addr,size) (((size) <= TASK_SIZE)&&((addr) <= TASK_SIZE-(size)))
--#define __access_ok(addr,size) (__kernel_ok || __user_ok((addr),(size)))
--#define access_ok(type,addr,size) __access_ok((unsigned long)(addr),(size))
-+#define __access_ok(addr,size) \
-+ ((addr) <= current->thread.fs.seg \
-+ && ((size) == 0 || (size) - 1 <= current->thread.fs.seg - (addr)))
-+
-+#define access_ok(type, addr, size) __access_ok((unsigned long)(addr),(size))
-
- extern inline int verify_area(int type, const void __user * addr, unsigned long size)
- {
-- return access_ok(type,addr,size) ? 0 : -EFAULT;
-+ return access_ok(type, addr, size) ? 0 : -EFAULT;
- }
-
-
-@@ -303,7 +307,7 @@ extern int __strnlen_user(const char __u
- */
- extern __inline__ int strnlen_user(const char __user *str, long len)
- {
-- unsigned long top = __kernel_ok? ~0UL: TASK_SIZE - 1;
-+ unsigned long top = current->thread.fs.seg;
-
- if ((unsigned long)str > top)
- return 0;
---- linux-2.6.0-test1/include/asm-ppc/unistd.h 2003-06-16 22:32:21.000000000 -0700
-+++ 25/include/asm-ppc/unistd.h 2003-07-19 17:03:51.000000000 -0700
-@@ -253,177 +253,112 @@
- #define __NR_clock_gettime 246
- #define __NR_clock_getres 247
- #define __NR_clock_nanosleep 248
-+#define __NR_swapcontext 249
-+#define __NR_tgkill 250
-+#define __NR_utimes 251
-+#define __NR_statfs64 252
-+#define __NR_fstatfs64 253
-
--#define __NR_syscalls 249
-+#define __NR_syscalls 254
-
- #define __NR(n) #n
-
--#define __syscall_return(type) \
-- return (__sc_err & 0x10000000 ? errno = __sc_ret, __sc_ret = -1 : 0), \
-- (type) __sc_ret
--
--#define __syscall_clobbers \
-- "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
-+/* On powerpc a system call basically clobbers the same registers like a
-+ * function call, with the exception of LR (which is needed for the
-+ * "sc; bnslr" sequence) and CR (where only CR0.SO is clobbered to signal
-+ * an error return status).
-+ */
-
--#define _syscall0(type,name) \
--type name(void) \
--{ \
-+#define __syscall_nr(nr, type, name, args...) \
- unsigned long __sc_ret, __sc_err; \
- { \
-- register unsigned long __sc_0 __asm__ ("r0"); \
-- register unsigned long __sc_3 __asm__ ("r3"); \
-- \
-- __sc_0 = __NR_##name; \
-- __asm__ __volatile__ \
-- ("sc \n\t" \
-- "mfcr %1 " \
-- : "=&r" (__sc_3), "=&r" (__sc_0) \
-- : "0" (__sc_3), "1" (__sc_0) \
-- : __syscall_clobbers); \
-+ register unsigned long __sc_0 __asm__ ("r0"); \
-+ register unsigned long __sc_3 __asm__ ("r3"); \
-+ register unsigned long __sc_4 __asm__ ("r4"); \
-+ register unsigned long __sc_5 __asm__ ("r5"); \
-+ register unsigned long __sc_6 __asm__ ("r6"); \
-+ register unsigned long __sc_7 __asm__ ("r7"); \
-+ \
-+ __sc_loadargs_##nr(name, args); \
-+ __asm__ __volatile__ \
-+ ("sc \n\t" \
-+ "mfcr %0 " \
-+ : "=&r" (__sc_0), \
-+ "=&r" (__sc_3), "=&r" (__sc_4), \
-+ "=&r" (__sc_5), "=&r" (__sc_6), \
-+ "=&r" (__sc_7) \
-+ : __sc_asm_input_##nr \
-+ : "cr0", "ctr", "memory", \
-+ "r8", "r9", "r10","r11", "r12"); \
- __sc_ret = __sc_3; \
- __sc_err = __sc_0; \
- } \
-- __syscall_return (type); \
-+ if (__sc_err & 0x10000000) \
-+ { \
-+ errno = __sc_ret; \
-+ __sc_ret = -1; \
-+ } \
-+ return (type) __sc_ret
-+
-+#define __sc_loadargs_0(name, dummy...) \
-+ __sc_0 = __NR_##name
-+#define __sc_loadargs_1(name, arg1) \
-+ __sc_loadargs_0(name); \
-+ __sc_3 = (unsigned long) (arg1)
-+#define __sc_loadargs_2(name, arg1, arg2) \
-+ __sc_loadargs_1(name, arg1); \
-+ __sc_4 = (unsigned long) (arg2)
-+#define __sc_loadargs_3(name, arg1, arg2, arg3) \
-+ __sc_loadargs_2(name, arg1, arg2); \
-+ __sc_5 = (unsigned long) (arg3)
-+#define __sc_loadargs_4(name, arg1, arg2, arg3, arg4) \
-+ __sc_loadargs_3(name, arg1, arg2, arg3); \
-+ __sc_6 = (unsigned long) (arg4)
-+#define __sc_loadargs_5(name, arg1, arg2, arg3, arg4, arg5) \
-+ __sc_loadargs_4(name, arg1, arg2, arg3, arg4); \
-+ __sc_7 = (unsigned long) (arg5)
-+
-+#define __sc_asm_input_0 "0" (__sc_0)
-+#define __sc_asm_input_1 __sc_asm_input_0, "1" (__sc_3)
-+#define __sc_asm_input_2 __sc_asm_input_1, "2" (__sc_4)
-+#define __sc_asm_input_3 __sc_asm_input_2, "3" (__sc_5)
-+#define __sc_asm_input_4 __sc_asm_input_3, "4" (__sc_6)
-+#define __sc_asm_input_5 __sc_asm_input_4, "5" (__sc_7)
-+
-+#define _syscall0(type,name) \
-+type name(void) \
-+{ \
-+ __syscall_nr(0, type, name); \
- }
-
- #define _syscall1(type,name,type1,arg1) \
- type name(type1 arg1) \
- { \
-- unsigned long __sc_ret, __sc_err; \
-- { \
-- register unsigned long __sc_0 __asm__ ("r0"); \
-- register unsigned long __sc_3 __asm__ ("r3"); \
-- \
-- __sc_3 = (unsigned long) (arg1); \
-- __sc_0 = __NR_##name; \
-- __asm__ __volatile__ \
-- ("sc \n\t" \
-- "mfcr %1 " \
-- : "=&r" (__sc_3), "=&r" (__sc_0) \
-- : "0" (__sc_3), "1" (__sc_0) \
-- : __syscall_clobbers); \
-- __sc_ret = __sc_3; \
-- __sc_err = __sc_0; \
-- } \
-- __syscall_return (type); \
-+ __syscall_nr(1, type, name, arg1); \
- }
-
- #define _syscall2(type,name,type1,arg1,type2,arg2) \
- type name(type1 arg1, type2 arg2) \
- { \
-- unsigned long __sc_ret, __sc_err; \
-- { \
-- register unsigned long __sc_0 __asm__ ("r0"); \
-- register unsigned long __sc_3 __asm__ ("r3"); \
-- register unsigned long __sc_4 __asm__ ("r4"); \
-- \
-- __sc_3 = (unsigned long) (arg1); \
-- __sc_4 = (unsigned long) (arg2); \
-- __sc_0 = __NR_##name; \
-- __asm__ __volatile__ \
-- ("sc \n\t" \
-- "mfcr %1 " \
-- : "=&r" (__sc_3), "=&r" (__sc_0) \
-- : "0" (__sc_3), "1" (__sc_0), \
-- "r" (__sc_4) \
-- : __syscall_clobbers); \
-- __sc_ret = __sc_3; \
-- __sc_err = __sc_0; \
-- } \
-- __syscall_return (type); \
-+ __syscall_nr(2, type, name, arg1, arg2); \
- }
-
- #define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \
- type name(type1 arg1, type2 arg2, type3 arg3) \
- { \
-- unsigned long __sc_ret, __sc_err; \
-- { \
-- register unsigned long __sc_0 __asm__ ("r0"); \
-- register unsigned long __sc_3 __asm__ ("r3"); \
-- register unsigned long __sc_4 __asm__ ("r4"); \
-- register unsigned long __sc_5 __asm__ ("r5"); \
-- \
-- __sc_3 = (unsigned long) (arg1); \
-- __sc_4 = (unsigned long) (arg2); \
-- __sc_5 = (unsigned long) (arg3); \
-- __sc_0 = __NR_##name; \
-- __asm__ __volatile__ \
-- ("sc \n\t" \
-- "mfcr %1 " \
-- : "=&r" (__sc_3), "=&r" (__sc_0) \
-- : "0" (__sc_3), "1" (__sc_0), \
-- "r" (__sc_4), \
-- "r" (__sc_5) \
-- : __syscall_clobbers); \
-- __sc_ret = __sc_3; \
-- __sc_err = __sc_0; \
-- } \
-- __syscall_return (type); \
-+ __syscall_nr(3, type, name, arg1, arg2, arg3); \
- }
-
- #define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \
- type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4) \
- { \
-- unsigned long __sc_ret, __sc_err; \
-- { \
-- register unsigned long __sc_0 __asm__ ("r0"); \
-- register unsigned long __sc_3 __asm__ ("r3"); \
-- register unsigned long __sc_4 __asm__ ("r4"); \
-- register unsigned long __sc_5 __asm__ ("r5"); \
-- register unsigned long __sc_6 __asm__ ("r6"); \
-- \
-- __sc_3 = (unsigned long) (arg1); \
-- __sc_4 = (unsigned long) (arg2); \
-- __sc_5 = (unsigned long) (arg3); \
-- __sc_6 = (unsigned long) (arg4); \
-- __sc_0 = __NR_##name; \
-- __asm__ __volatile__ \
-- ("sc \n\t" \
-- "mfcr %1 " \
-- : "=&r" (__sc_3), "=&r" (__sc_0) \
-- : "0" (__sc_3), "1" (__sc_0), \
-- "r" (__sc_4), \
-- "r" (__sc_5), \
-- "r" (__sc_6) \
-- : __syscall_clobbers); \
-- __sc_ret = __sc_3; \
-- __sc_err = __sc_0; \
-- } \
-- __syscall_return (type); \
-+ __syscall_nr(4, type, name, arg1, arg2, arg3, arg4); \
- }
-
- #define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5) \
- type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5) \
- { \
-- unsigned long __sc_ret, __sc_err; \
-- { \
-- register unsigned long __sc_0 __asm__ ("r0"); \
-- register unsigned long __sc_3 __asm__ ("r3"); \
-- register unsigned long __sc_4 __asm__ ("r4"); \
-- register unsigned long __sc_5 __asm__ ("r5"); \
-- register unsigned long __sc_6 __asm__ ("r6"); \
-- register unsigned long __sc_7 __asm__ ("r7"); \
-- \
-- __sc_3 = (unsigned long) (arg1); \
-- __sc_4 = (unsigned long) (arg2); \
-- __sc_5 = (unsigned long) (arg3); \
-- __sc_6 = (unsigned long) (arg4); \
-- __sc_7 = (unsigned long) (arg5); \
-- __sc_0 = __NR_##name; \
-- __asm__ __volatile__ \
-- ("sc \n\t" \
-- "mfcr %1 " \
-- : "=&r" (__sc_3), "=&r" (__sc_0) \
-- : "0" (__sc_3), "1" (__sc_0), \
-- "r" (__sc_4), \
-- "r" (__sc_5), \
-- "r" (__sc_6), \
-- "r" (__sc_7) \
-- : __syscall_clobbers); \
-- __sc_ret = __sc_3; \
-- __sc_err = __sc_0; \
-- } \
-- __syscall_return (type); \
-+ __syscall_nr(5, type, name, arg1, arg2, arg3, arg4, arg5); \
- }
-
- #ifdef __KERNEL__
---- linux-2.6.0-test1/include/asm-s390/bitops.h 2003-06-14 12:17:56.000000000 -0700
-+++ 25/include/asm-s390/bitops.h 2003-07-19 17:04:07.000000000 -0700
-@@ -505,7 +505,7 @@ static inline int __test_bit(unsigned lo
- unsigned char ch;
-
- addr = (unsigned long) ptr + ((nr ^ (__BITOPS_WORDSIZE - 8)) >> 3);
-- ch = *(unsigned char *) addr;
-+ ch = *(volatile unsigned char *) addr;
- return (ch >> (nr & 7)) & 1;
- }
-
---- linux-2.6.0-test1/include/asm-s390/dma.h 2003-06-14 12:18:33.000000000 -0700
-+++ 25/include/asm-s390/dma.h 2003-07-19 17:03:51.000000000 -0700
-@@ -2,8 +2,6 @@
- * include/asm-s390/dma.h
- *
- * S390 version
-- *
-- * This file exists so that an #include <dma.h> doesn't break anything.
- */
-
- #ifndef _ASM_DMA_H
---- linux-2.6.0-test1/include/asm-s390/dma-mapping.h 2003-06-14 12:18:52.000000000 -0700
-+++ 25/include/asm-s390/dma-mapping.h 2003-07-19 17:03:51.000000000 -0700
-@@ -1 +1,11 @@
--#include <asm-generic/dma-mapping.h>
-+/*
-+ * include/asm-s390/dma-mapping.h
-+ *
-+ * S390 version
-+ *
-+ * This file exists so that #include <dma-mapping.h> doesn't break anything.
-+ */
-+
-+#ifndef _ASM_DMA_MAPPING_H
-+#define _ASM_DMA_MAPPING_H
-+#endif /* _ASM_DMA_MAPPING_H */
---- linux-2.6.0-test1/include/asm-s390/irq.h 2003-06-14 12:18:30.000000000 -0700
-+++ 25/include/asm-s390/irq.h 2003-07-19 17:03:51.000000000 -0700
-@@ -8,16 +8,13 @@
- * the definition of irqs has changed in 2.5.46:
- * NR_IRQS is no longer the number of i/o
- * interrupts (65536), but rather the number
-- * of interrupt classes (6).
-+ * of interrupt classes (2).
-+ * Only external and i/o interrupts make much sense here (CH).
- */
-
- enum interruption_class {
- EXTERNAL_INTERRUPT,
- IO_INTERRUPT,
-- MACHINE_CHECK_INTERRUPT,
-- PROGRAM_INTERRUPT,
-- RESTART_INTERRUPT,
-- SUPERVISOR_CALL,
-
- NR_IRQS,
- };
---- linux-2.6.0-test1/include/asm-s390/mmu_context.h 2003-07-10 18:50:32.000000000 -0700
-+++ 25/include/asm-s390/mmu_context.h 2003-07-19 17:04:07.000000000 -0700
-@@ -42,7 +42,7 @@ static inline void switch_mm(struct mm_s
- : : "m" (pgd) );
- #endif /* __s390x__ */
- }
-- set_bit(smp_processor_id(), &next->cpu_vm_mask);
-+ cpu_set(smp_processor_id(), next->cpu_vm_mask);
- }
-
- #define deactivate_mm(tsk,mm) do { } while (0)
---- linux-2.6.0-test1/include/asm-s390/pgalloc.h 2003-06-14 12:18:24.000000000 -0700
-+++ 25/include/asm-s390/pgalloc.h 2003-07-19 17:07:16.000000000 -0700
-@@ -61,12 +61,13 @@ static inline void pgd_free(pgd_t *pgd)
- * We use pmd cache only on s390x, so these are dummy routines. This
- * code never triggers because the pgd will always be present.
- */
--#define pmd_alloc_one(mm,address) ({ BUG(); ((pmd_t *)2); })
-+#define pmd_alloc_one(mm,address) ({ BUG(); ((struct page *)2); })
-+#define pmd_alloc_one_kernel(mm,addr) ({ BUG(); ((pmd_t *)2); })
- #define pmd_free(x) do { } while (0)
- #define __pmd_free_tlb(tlb,x) do { } while (0)
- #define pgd_populate(mm, pmd, pte) BUG()
- #else /* __s390x__ */
--static inline pmd_t * pmd_alloc_one(struct mm_struct *mm, unsigned long vmaddr)
-+static inline pmd_t * pmd_alloc_one_kernel(struct mm_struct *mm, unsigned long vmaddr)
- {
- pmd_t *pmd;
- int i;
-@@ -79,16 +80,25 @@ static inline pmd_t * pmd_alloc_one(stru
- return pmd;
- }
-
--static inline void pmd_free (pmd_t *pmd)
-+static inline struct page *pmd_alloc_one(struct mm_struct *mm, unsigned long addr)
- {
-- free_pages((unsigned long) pmd, 2);
-+ pmd_t *pmd = pmd_alloc_one_kernel(mm, addr);
-+ if (pmd)
-+ return virt_to_page(pmd);
-+ else
-+ return NULL;
-+}
-+
-+static inline void pmd_free(struct page *pmd)
-+{
-+ __free_pages(pmd, 2);
- }
-
- #define __pmd_free_tlb(tlb,pmd) pmd_free(pmd)
-
--static inline void pgd_populate(struct mm_struct *mm, pgd_t *pgd, pmd_t *pmd)
-+static inline void pgd_populate(struct mm_struct *mm, pgd_t *pgd, struct page *pmd)
- {
-- pgd_val(*pgd) = _PGD_ENTRY | __pa(pmd);
-+ pgd_val(*pgd) = _PGD_ENTRY | __pa(page_address(pmd));
- }
-
- #endif /* __s390x__ */
---- linux-2.6.0-test1/include/asm-s390/pgtable.h 2003-06-14 12:18:30.000000000 -0700
-+++ 25/include/asm-s390/pgtable.h 2003-07-19 17:07:16.000000000 -0700
-@@ -613,6 +613,7 @@ static inline pte_t mk_pte_phys(unsigned
- /* to find an entry in a page-table-directory */
- #define pgd_index(address) ((address >> PGDIR_SHIFT) & (PTRS_PER_PGD-1))
- #define pgd_offset(mm, address) ((mm)->pgd+pgd_index(address))
-+#define pgd_page(pgd) virt_to_page(pgd_page_kernel(pgd))
-
- /* to find an entry in a kernel page-table-directory */
- #define pgd_offset_k(address) pgd_offset(&init_mm, address)
-@@ -634,6 +635,12 @@ extern inline pmd_t * pmd_offset(pgd_t *
-
- #endif /* __s390x__ */
-
-+#define pmd_offset_kernel(pgd, addr) pmd_offset(pgd, addr)
-+#define pmd_offset_map(pgd, addr) pmd_offset(pgd, addr)
-+#define pmd_offset_map_nested(pgd, addr) pmd_offset(pgd, addr)
-+#define pmd_unmap(pmd) do { } while (0)
-+#define pmd_unmap_nested(pmd) do { } while (0)
-+
- /* Find an entry in the third-level page table.. */
- #define pte_index(address) (((address) >> PAGE_SHIFT) & (PTRS_PER_PTE-1))
- #define pte_offset_kernel(pmd, address) \
---- linux-2.6.0-test1/include/asm-s390/posix_types.h 2003-06-14 12:17:55.000000000 -0700
-+++ 25/include/asm-s390/posix_types.h 2003-07-19 17:06:39.000000000 -0700
-@@ -34,7 +34,9 @@ typedef long long __kernel_loff_t;
-
- #ifndef __s390x__
-
--typedef unsigned short __kernel_dev_t;
-+#ifdef __GNUC__
-+typedef unsigned long long __kernel_dev_t;
-+#endif
- typedef unsigned long __kernel_ino_t;
- typedef unsigned short __kernel_mode_t;
- typedef unsigned short __kernel_nlink_t;
-@@ -51,7 +53,9 @@ typedef unsigned short __kernel_old_dev_
-
- #else /* __s390x__ */
-
--typedef unsigned int __kernel_dev_t;
-+#ifdef __GNUC__
-+typedef unsigned long long __kernel_dev_t;
-+#endif
- typedef unsigned int __kernel_ino_t;
- typedef unsigned int __kernel_mode_t;
- typedef unsigned int __kernel_nlink_t;
---- linux-2.6.0-test1/include/asm-s390/siginfo.h 2003-06-14 12:18:33.000000000 -0700
-+++ 25/include/asm-s390/siginfo.h 2003-07-19 17:03:51.000000000 -0700
-@@ -10,6 +10,9 @@
- #define _S390_SIGINFO_H
-
- #define HAVE_ARCH_SI_CODES
-+#ifdef __s390x__
-+#define __ARCH_SI_PREAMBLE_SIZE (4 * sizeof(int))
-+#endif
-
- #include <asm-generic/siginfo.h>
-
---- linux-2.6.0-test1/include/asm-s390/smp.h 2003-06-22 12:04:45.000000000 -0700
-+++ 25/include/asm-s390/smp.h 2003-07-19 17:04:07.000000000 -0700
-@@ -11,6 +11,7 @@
-
- #include <linux/config.h>
- #include <linux/threads.h>
-+#include <linux/cpumask.h>
- #include <linux/bitops.h>
-
- #if defined(__KERNEL__) && defined(CONFIG_SMP) && !defined(__ASSEMBLY__)
-@@ -28,8 +29,8 @@ typedef struct
- __u16 cpu;
- } sigp_info;
-
--extern volatile unsigned long cpu_online_map;
--extern volatile unsigned long cpu_possible_map;
-+extern cpumask_t cpu_online_map;
-+extern cpumask_t cpu_possible_map;
-
- #define NO_PROC_ID 0xFF /* No processor magic marker */
-
-@@ -47,25 +48,8 @@ extern volatile unsigned long cpu_possib
-
- #define smp_processor_id() (current_thread_info()->cpu)
-
--#define cpu_online(cpu) (cpu_online_map & (1<<(cpu)))
--#define cpu_possible(cpu) (cpu_possible_map & (1<<(cpu)))
--
--extern inline unsigned int num_online_cpus(void)
--{
--#ifndef __s390x__
-- return hweight32(cpu_online_map);
--#else /* __s390x__ */
-- return hweight64(cpu_online_map);
--#endif /* __s390x__ */
--}
--
--extern inline unsigned int any_online_cpu(unsigned int mask)
--{
-- if (mask & cpu_online_map)
-- return __ffs(mask & cpu_online_map);
--
-- return NR_CPUS;
--}
-+#define cpu_online(cpu) cpu_isset(cpu, cpu_online_map)
-+#define cpu_possible(cpu) cpu_isset(cpu, cpu_possible_map)
-
- extern __inline__ __u16 hard_smp_processor_id(void)
- {
---- linux-2.6.0-test1/include/asm-s390/tlbflush.h 2003-06-14 12:18:49.000000000 -0700
-+++ 25/include/asm-s390/tlbflush.h 2003-07-19 17:04:07.000000000 -0700
-@@ -98,13 +98,15 @@ static inline void global_flush_tlb(void
-
- static inline void __flush_tlb_mm(struct mm_struct * mm)
- {
-+ cpumask_t local_cpumask;
- preempt_disable();
-- if (mm->cpu_vm_mask != (1UL << smp_processor_id())) {
-+ local_cpumask = cpumask_of_cpu(smp_processor_id());
-+ if (cpus_equal(mm->cpu_vm_mask, local_cpumask)) {
- /* mm was active on more than one cpu. */
- if (mm == current->active_mm &&
- atomic_read(&mm->mm_users) == 1)
- /* this cpu is the only one using the mm. */
-- mm->cpu_vm_mask = 1UL << smp_processor_id();
-+ mm->cpu_vm_mask = local_cpumask;
- global_flush_tlb();
- } else
- local_flush_tlb();
---- linux-2.6.0-test1/include/asm-sh/pgalloc.h 2003-07-02 14:53:18.000000000 -0700
-+++ 25/include/asm-sh/pgalloc.h 2003-07-19 17:07:16.000000000 -0700
-@@ -94,7 +94,8 @@ static inline void pte_free(struct page
- * inside the pgd, so has no extra memory associated with it.
- */
-
--#define pmd_alloc_one(mm, addr) ({ BUG(); ((pmd_t *)2); })
-+#define pmd_alloc_one_kernel(mm, addr) ({ BUG(); ((pmd_t *)2); })
-+#define pmd_alloc_one(mm, addr) ({ BUG(); ((struct page *)2); })
- #define pmd_free(x) do { } while (0)
- #define __pmd_free_tlb(tlb,x) do { } while (0)
- #define pgd_populate(mm, pmd, pte) BUG()
---- linux-2.6.0-test1/include/asm-sh/pgtable-2level.h 2003-07-02 14:53:18.000000000 -0700
-+++ 25/include/asm-sh/pgtable-2level.h 2003-07-19 17:07:16.000000000 -0700
-@@ -48,14 +48,21 @@ static inline void pgd_clear (pgd_t * pg
- #define set_pmd(pmdptr, pmdval) (*(pmdptr) = pmdval)
- #define set_pgd(pgdptr, pgdval) (*(pgdptr) = pgdval)
-
--#define pgd_page(pgd) \
-+#define __pgd_page(pgd) \
- ((unsigned long) __va(pgd_val(pgd) & PAGE_MASK))
-+#define pgd_page(pgd) virt_to_page(__pgd_page(pgd))
-
- static inline pmd_t * pmd_offset(pgd_t * dir, unsigned long address)
- {
- return (pmd_t *) dir;
- }
-
-+#define pmd_offset_kernel(pgd, addr) pmd_offset(pgd, addr)
-+#define pmd_offset_map(pgd, addr) pmd_offset(pgd, addr)
-+#define pmd_offset_map_nested(pgd, addr) pmd_offset(pgd, addr)
-+#define pmd_unmap(pmd) do { } while (0)
-+#define pmd_unmap_nested(pmd) do { } while (0)
-+
- #define pte_pfn(x) ((unsigned long)(((x).pte >> PAGE_SHIFT)))
- #define pfn_pte(pfn, prot) __pte(((pfn) << PAGE_SHIFT) | pgprot_val(prot))
- #define pfn_pmd(pfn, prot) __pmd(((pfn) << PAGE_SHIFT) | pgprot_val(prot))
---- linux-2.6.0-test1/include/asm-sh/posix_types.h 2003-07-02 14:53:18.000000000 -0700
-+++ 25/include/asm-sh/posix_types.h 2003-07-19 17:06:39.000000000 -0700
-@@ -7,7 +7,9 @@
- * assume GCC is being used.
- */
-
--typedef unsigned short __kernel_dev_t;
-+#ifdef __GNUC__
-+typedef unsigned long long __kernel_dev_t;
-+#endif
- typedef unsigned long __kernel_ino_t;
- typedef unsigned short __kernel_mode_t;
- typedef unsigned short __kernel_nlink_t;
---- linux-2.6.0-test1/include/asm-sparc64/atomic.h 2003-06-14 12:18:34.000000000 -0700
-+++ 25/include/asm-sparc64/atomic.h 2003-07-19 17:03:51.000000000 -0700
-@@ -9,25 +9,46 @@
- #define __ARCH_SPARC64_ATOMIC__
-
- typedef struct { volatile int counter; } atomic_t;
--#define ATOMIC_INIT(i) { (i) }
-+typedef struct { volatile long counter; } atomic64_t;
-+
-+#define ATOMIC_INIT(i) { (i) }
-+#define ATOMIC64_INIT(i) { (i) }
-
- #define atomic_read(v) ((v)->counter)
-+#define atomic64_read(v) ((v)->counter)
-+
- #define atomic_set(v, i) (((v)->counter) = i)
-+#define atomic64_set(v, i) (((v)->counter) = i)
-
- extern int __atomic_add(int, atomic_t *);
-+extern int __atomic64_add(int, atomic64_t *);
-+
- extern int __atomic_sub(int, atomic_t *);
-+extern int __atomic64_sub(int, atomic64_t *);
-
- #define atomic_add(i, v) ((void)__atomic_add(i, v))
-+#define atomic64_add(i, v) ((void)__atomic64_add(i, v))
-+
- #define atomic_sub(i, v) ((void)__atomic_sub(i, v))
-+#define atomic64_sub(i, v) ((void)__atomic64_sub(i, v))
-
- #define atomic_dec_return(v) __atomic_sub(1, v)
-+#define atomic64_dec_return(v) __atomic64_sub(1, v)
-+
- #define atomic_inc_return(v) __atomic_add(1, v)
-+#define atomic64_inc_return(v) __atomic64_add(1, v)
-
- #define atomic_sub_and_test(i, v) (__atomic_sub(i, v) == 0)
-+#define atomic64_sub_and_test(i, v) (__atomic64_sub(i, v) == 0)
-+
- #define atomic_dec_and_test(v) (__atomic_sub(1, v) == 0)
-+#define atomic64_dec_and_test(v) (__atomic64_sub(1, v) == 0)
-
- #define atomic_inc(v) ((void)__atomic_add(1, v))
-+#define atomic64_inc(v) ((void)__atomic64_add(1, v))
-+
- #define atomic_dec(v) ((void)__atomic_sub(1, v))
-+#define atomic64_dec(v) ((void)__atomic64_sub(1, v))
-
- /* Atomic operations are already serializing */
- #define smp_mb__before_atomic_dec() barrier()
---- linux-2.6.0-test1/include/asm-sparc64/bitops.h 2003-06-14 12:17:58.000000000 -0700
-+++ 25/include/asm-sparc64/bitops.h 2003-07-19 17:04:07.000000000 -0700
-@@ -156,6 +156,14 @@ static __inline__ int ffs(int x)
-
- #ifdef ULTRA_HAS_POPULATION_COUNT
-
-+static __inline__ unsigned int hweight64(unsigned long w)
-+{
-+ unsigned int res;
-+
-+ __asm__ ("popc %1,%0" : "=r" (res) : "r" (w));
-+ return res;
-+}
-+
- static __inline__ unsigned int hweight32(unsigned int w)
- {
- unsigned int res;
-@@ -182,6 +190,7 @@ static __inline__ unsigned int hweight8(
-
- #else
-
-+#define hweight64(x) generic_hweight64(x)
- #define hweight32(x) generic_hweight32(x)
- #define hweight16(x) generic_hweight16(x)
- #define hweight8(x) generic_hweight8(x)
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-sparc64/local.h 2003-07-19 17:03:51.000000000 -0700
-@@ -0,0 +1,40 @@
-+#ifndef _ARCH_SPARC64_LOCAL_H
-+#define _ARCH_SPARC64_LOCAL_H
-+
-+#include <linux/percpu.h>
-+#include <asm/atomic.h>
-+
-+typedef atomic64_t local_t;
-+
-+#define LOCAL_INIT(i) ATOMIC64_INIT(i)
-+#define local_read(v) atomic64_read(v)
-+#define local_set(v,i) atomic64_set(v,i)
-+
-+#define local_inc(v) atomic64_inc(v)
-+#define local_dec(v) atomic64_inc(v)
-+#define local_add(i, v) atomic64_add(i, v)
-+#define local_sub(i, v) atomic64_sub(i, v)
-+
-+#define __local_inc(v) ((v)->counter++)
-+#define __local_dec(v) ((v)->counter++)
-+#define __local_add(i,v) ((v)->counter+=(i))
-+#define __local_sub(i,v) ((v)->counter-=(i))
-+
-+/* Use these for per-cpu local_t variables: on some archs they are
-+ * much more efficient than these naive implementations. Note they take
-+ * a variable, not an address.
-+ */
-+#define cpu_local_read(v) local_read(&__get_cpu_var(v))
-+#define cpu_local_set(v, i) local_set(&__get_cpu_var(v), (i))
-+
-+#define cpu_local_inc(v) local_inc(&__get_cpu_var(v))
-+#define cpu_local_dec(v) local_dec(&__get_cpu_var(v))
-+#define cpu_local_add(i, v) local_add((i), &__get_cpu_var(v))
-+#define cpu_local_sub(i, v) local_sub((i), &__get_cpu_var(v))
-+
-+#define __cpu_local_inc(v) __local_inc(&__get_cpu_var(v))
-+#define __cpu_local_dec(v) __local_dec(&__get_cpu_var(v))
-+#define __cpu_local_add(i, v) __local_add((i), &__get_cpu_var(v))
-+#define __cpu_local_sub(i, v) __local_sub((i), &__get_cpu_var(v))
-+
-+#endif /* _ARCH_SPARC64_LOCAL_H */
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-sparc64/lockmeter.h 2003-07-19 17:06:40.000000000 -0700
-@@ -0,0 +1,47 @@
-+/*
-+ * Copyright (C) 2000 Anton Blanchard (anton@linuxcare.com)
-+ */
-+
-+#ifndef _SPARC64_LOCKMETER_H
-+#define _SPARC64_LOCKMETER_H
-+
-+#include <asm/spinlock.h>
-+
-+#include <linux/version.h>
-+
-+extern unsigned long cpu_hz;
-+#define CPU_CYCLE_FREQUENCY cpu_hz
-+
-+#define THIS_CPU_NUMBER __cpu_number_map[smp_processor_id()]
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,0)
-+#define local_irq_save(x) __save_and_cli(x)
-+#define local_irq_restore(x) __restore_flags(x)
-+#endif /* Linux version 2.2.x */
-+
-+#define PUT_INDEX(lock_ptr,indexv) (lock_ptr)->index = (indexv)
-+#define GET_INDEX(lock_ptr) (lock_ptr)->index
-+
-+#define PUT_RWINDEX(rwlock_ptr,indexv) (rwlock_ptr)->index = (indexv)
-+#define GET_RWINDEX(rwlock_ptr) (rwlock_ptr)->index
-+#define PUT_RW_CPU(rwlock_ptr,cpuv) (rwlock_ptr)->cpu = (cpuv)
-+#define GET_RW_CPU(rwlock_ptr) (rwlock_ptr)->cpu
-+
-+#define RWLOCK_READERS(rwlock_ptr) rwlock_readers(rwlock_ptr)
-+
-+extern inline int rwlock_readers(rwlock_t *rwlock_ptr)
-+{
-+ signed int tmp = rwlock_ptr->lock;
-+
-+ if (tmp > 0)
-+ return tmp;
-+ else
-+ return 0;
-+}
-+
-+#define RWLOCK_IS_WRITE_LOCKED(rwlock_ptr) ((signed int)((rwlock_ptr)->lock) < 0)
-+#define RWLOCK_IS_READ_LOCKED(rwlock_ptr) ((signed int)((rwlock_ptr)->lock) > 0)
-+
-+#define get_cycles64() get_cycles()
-+
-+#endif /* _SPARC64_LOCKMETER_H */
---- linux-2.6.0-test1/include/asm-sparc64/mmu_context.h 2003-07-10 18:50:32.000000000 -0700
-+++ 25/include/asm-sparc64/mmu_context.h 2003-07-19 17:04:07.000000000 -0700
-@@ -125,7 +125,7 @@ static inline void switch_mm(struct mm_s
- }
-
- {
-- unsigned long vm_mask = (1UL << smp_processor_id());
-+ int cpu = smp_processor_id();
-
- /* Even if (mm == old_mm) we _must_ check
- * the cpu_vm_mask. If we do not we could
-@@ -133,8 +133,8 @@ static inline void switch_mm(struct mm_s
- * smp_flush_tlb_{page,range,mm} on sparc64
- * and lazy tlb switches work. -DaveM
- */
-- if (!ctx_valid || !(mm->cpu_vm_mask & vm_mask)) {
-- mm->cpu_vm_mask |= vm_mask;
-+ if (!ctx_valid || !cpu_isset(cpu, mm->cpu_vm_mask)) {
-+ cpu_set(cpu, mm->cpu_vm_mask);
- __flush_tlb_mm(CTX_HWBITS(mm->context), SECONDARY_CONTEXT);
- }
- }
-@@ -148,14 +148,14 @@ extern void __flush_tlb_mm(unsigned long
- /* Activate a new MM instance for the current task. */
- static inline void activate_mm(struct mm_struct *active_mm, struct mm_struct *mm)
- {
-- unsigned long vm_mask;
-+ int cpu;
-
- spin_lock(&mm->page_table_lock);
- if (!CTX_VALID(mm->context))
- get_new_mmu_context(mm);
-- vm_mask = (1UL << smp_processor_id());
-- if (!(mm->cpu_vm_mask & vm_mask))
-- mm->cpu_vm_mask |= vm_mask;
-+ cpu = smp_processor_id();
-+ if (!cpu_isset(cpu, mm->cpu_vm_mask))
-+ cpu_set(cpu, mm->cpu_vm_mask);
- spin_unlock(&mm->page_table_lock);
-
- load_secondary_context(mm);
---- linux-2.6.0-test1/include/asm-sparc64/pgalloc.h 2003-06-14 12:18:34.000000000 -0700
-+++ 25/include/asm-sparc64/pgalloc.h 2003-07-19 17:07:16.000000000 -0700
-@@ -132,7 +132,7 @@ static __inline__ void free_pgd_slow(pgd
- #define DCACHE_COLOR(address) 0
- #endif
-
--#define pgd_populate(MM, PGD, PMD) pgd_set(PGD, PMD)
-+#define pgd_populate(MM, PGD, PMD) pgd_set(PGD, page_address(PMD))
-
- static __inline__ pmd_t *pmd_alloc_one_fast(struct mm_struct *mm, unsigned long address)
- {
-@@ -153,7 +153,7 @@ static __inline__ pmd_t *pmd_alloc_one_f
- return (pmd_t *)ret;
- }
-
--static __inline__ pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long address)
-+static __inline__ pmd_t *pmd_alloc_one_kernel(struct mm_struct *mm, unsigned long address)
- {
- pmd_t *pmd;
-
-@@ -166,6 +166,15 @@ static __inline__ pmd_t *pmd_alloc_one(s
- return pmd;
- }
-
-+static inline struct page *pmd_alloc_one(struct mm_struct *mm, unsigned long addr)
-+{
-+ pmd_t *pmd = pmd_alloc_one_kernel(mm, addr);
-+ if (pmd)
-+ return virt_to_page(pmd);
-+ else
-+ return NULL;
-+}
-+
- static __inline__ void free_pmd_fast(pmd_t *pmd)
- {
- unsigned long color = DCACHE_COLOR((unsigned long)pmd);
-@@ -222,7 +231,7 @@ static __inline__ void free_pte_slow(pte
-
- #define pte_free_kernel(pte) free_pte_fast(pte)
- #define pte_free(pte) free_pte_fast(page_address(pte))
--#define pmd_free(pmd) free_pmd_fast(pmd)
-+#define pmd_free(pmd) free_pmd_fast(page_address(pmd))
- #define pgd_free(pgd) free_pgd_fast(pgd)
- #define pgd_alloc(mm) get_pgd_fast()
-
---- linux-2.6.0-test1/include/asm-sparc64/pgtable.h 2003-06-14 12:17:56.000000000 -0700
-+++ 25/include/asm-sparc64/pgtable.h 2003-07-19 17:07:16.000000000 -0700
-@@ -228,7 +228,8 @@ static inline pte_t pte_modify(pte_t ori
- (pgd_val(*(pgdp)) = (__pa((unsigned long) (pmdp)) >> 11UL))
- #define __pmd_page(pmd) ((unsigned long) __va((pmd_val(pmd)<<11UL)))
- #define pmd_page(pmd) virt_to_page((void *)__pmd_page(pmd))
--#define pgd_page(pgd) ((unsigned long) __va((pgd_val(pgd)<<11UL)))
-+#define __pgd_page(pgd) ((unsigned long) __va((pgd_val(pgd)<<11UL)))
-+#define pgd_page(pgd) virt_to_page(__pgd_page(pgd))
- #define pte_none(pte) (!pte_val(pte))
- #define pte_present(pte) (pte_val(pte) & _PAGE_PRESENT)
- #define pte_clear(pte) (pte_val(*(pte)) = 0UL)
-@@ -270,8 +271,13 @@ static inline pte_t pte_modify(pte_t ori
- #define pgd_offset_k(address) pgd_offset(&init_mm, address)
-
- /* Find an entry in the second-level page table.. */
--#define pmd_offset(dir, address) ((pmd_t *) pgd_page(*(dir)) + \
-+#define pmd_offset(dir, address) ((pmd_t *)__pgd_page(*(dir)) + \
- ((address >> PMD_SHIFT) & (REAL_PTRS_PER_PMD-1)))
-+#define pmd_offset_kernel(pgd, addr) pmd_offset(pgd, addr)
-+#define pmd_offset_map(pgd, addr) pmd_offset(pgd, addr)
-+#define pmd_offset_map_nested(pgd, addr) pmd_offset(pgd, addr)
-+#define pmd_unmap(pmd) do { } while (0)
-+#define pmd_unmap_nested(pmd) do { } while (0)
-
- /* Find an entry in the third-level page table.. */
- #define pte_index(dir, address) ((pte_t *) __pmd_page(*(dir)) + \
---- linux-2.6.0-test1/include/asm-sparc64/posix_types.h 2003-06-14 12:18:32.000000000 -0700
-+++ 25/include/asm-sparc64/posix_types.h 2003-07-19 17:06:39.000000000 -0700
-@@ -16,7 +16,9 @@ typedef int __kernel_
- typedef int __kernel_ipc_pid_t;
- typedef unsigned int __kernel_uid_t;
- typedef unsigned int __kernel_gid_t;
--typedef unsigned int __kernel_dev_t;
-+#ifdef __GNUC__
-+typedef unsigned long __kernel_dev_t;
-+#endif
- typedef unsigned long __kernel_ino_t;
- typedef unsigned int __kernel_mode_t;
- typedef unsigned short __kernel_umode_t;
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-sparc64/sections.h 2003-07-19 17:03:51.000000000 -0700
-@@ -0,0 +1,7 @@
-+#ifndef _SPARC64_SECTIONS_H
-+#define _SPARC64_SECTIONS_H
-+
-+/* nothing to see, move along */
-+#include <asm-generic/sections.h>
-+
-+#endif
---- linux-2.6.0-test1/include/asm-sparc64/smp.h 2003-06-22 12:04:45.000000000 -0700
-+++ 25/include/asm-sparc64/smp.h 2003-07-19 17:04:07.000000000 -0700
-@@ -14,6 +14,7 @@
-
- #ifndef __ASSEMBLY__
-
-+#include <linux/cpumask.h>
- #include <linux/cache.h>
-
- /* PROM provided per-processor information we need
-@@ -68,25 +69,14 @@ extern cpuinfo_sparc cpu_data[NR_CPUS];
-
- extern unsigned char boot_cpu_id;
-
--extern unsigned long phys_cpu_present_map;
--#define cpu_possible(cpu) (phys_cpu_present_map & (1UL << (cpu)))
-+extern cpumask_t phys_cpu_present_map;
-+#define cpu_possible(cpu) cpu_isset(cpu, phys_cpu_present_map)
-
--extern unsigned long cpu_online_map;
--#define cpu_online(cpu) (cpu_online_map & (1UL << (cpu)))
--
--extern atomic_t sparc64_num_cpus_online;
--#define num_online_cpus() (atomic_read(&sparc64_num_cpus_online))
-+#define cpu_online(cpu) cpu_isset(cpu, cpu_online_map)
-
- extern atomic_t sparc64_num_cpus_possible;
- #define num_possible_cpus() (atomic_read(&sparc64_num_cpus_possible))
-
--static inline unsigned int any_online_cpu(unsigned long mask)
--{
-- if ((mask &= cpu_online_map) != 0UL)
-- return __ffs(mask);
-- return NR_CPUS;
--}
--
- /*
- * General functions that each host system must provide.
- */
---- linux-2.6.0-test1/include/asm-sparc64/spinlock.h 2003-06-26 22:07:26.000000000 -0700
-+++ 25/include/asm-sparc64/spinlock.h 2003-07-19 17:06:40.000000000 -0700
-@@ -30,15 +30,23 @@
-
- #ifndef CONFIG_DEBUG_SPINLOCK
-
--typedef unsigned char spinlock_t;
--#define SPIN_LOCK_UNLOCKED 0
-+typedef struct {
-+ unsigned char lock;
-+ unsigned int index;
-+} spinlock_t;
-
--#define spin_lock_init(lock) (*((unsigned char *)(lock)) = 0)
--#define spin_is_locked(lock) (*((volatile unsigned char *)(lock)) != 0)
-+#ifdef CONFIG_LOCKMETER
-+#define SPIN_LOCK_UNLOCKED (spinlock_t) {0, 0}
-+#else
-+#define SPIN_LOCK_UNLOCKED (spinlock_t) { 0 }
-+#endif
-
--#define spin_unlock_wait(lock) \
-+#define spin_lock_init(__lock) do { *(__lock) = SPIN_LOCK_UNLOCKED; } while(0)
-+#define spin_is_locked(__lock) (*((volatile unsigned char *)(&((__lock)->lock))) != 0)
-+
-+#define spin_unlock_wait(__lock) \
- do { membar("#LoadLoad"); \
--} while(*((volatile unsigned char *)lock))
-+} while(*((volatile unsigned char *)(&(((spinlock_t *)__lock)->lock))))
-
- static __inline__ void _raw_spin_lock(spinlock_t *lock)
- {
-@@ -109,8 +117,20 @@ extern int _spin_trylock (spinlock_t *lo
-
- #ifndef CONFIG_DEBUG_SPINLOCK
-
--typedef unsigned int rwlock_t;
--#define RW_LOCK_UNLOCKED 0
-+#ifdef CONFIG_LOCKMETER
-+typedef struct {
-+ unsigned int lock;
-+ unsigned int index;
-+ unsigned int cpu;
-+} rwlock_t;
-+#define RW_LOCK_UNLOCKED (rwlock_t) { 0, 0, 0xff }
-+#else
-+typedef struct {
-+ unsigned int lock;
-+} rwlock_t;
-+#define RW_LOCK_UNLOCKED (rwlock_t) { 0 }
-+#endif
-+
- #define rwlock_init(lp) do { *(lp) = RW_LOCK_UNLOCKED; } while(0)
- #define rwlock_is_locked(x) (*(x) != RW_LOCK_UNLOCKED)
-
---- linux-2.6.0-test1/include/asm-sparc/pgalloc.h 2003-06-14 12:17:57.000000000 -0700
-+++ 25/include/asm-sparc/pgalloc.h 2003-07-19 17:07:16.000000000 -0700
-@@ -38,15 +38,24 @@ BTFIXUPDEF_CALL(void, free_pgd_fast, pgd
-
- BTFIXUPDEF_CALL(void, pgd_set, pgd_t *, pmd_t *)
- #define pgd_set(pgdp,pmdp) BTFIXUP_CALL(pgd_set)(pgdp,pmdp)
--#define pgd_populate(MM, PGD, PMD) pgd_set(PGD, PMD)
-+#define pgd_populate(MM, PGD, PMD) pgd_set(PGD, page_address(PMD))
-
--BTFIXUPDEF_CALL(pmd_t *, pmd_alloc_one, struct mm_struct *, unsigned long)
--#define pmd_alloc_one(mm, address) BTFIXUP_CALL(pmd_alloc_one)(mm, address)
-+BTFIXUPDEF_CALL(pmd_t *, __pmd_alloc_one, struct mm_struct *, unsigned long)
-+#define pmd_alloc_one_kernel(mm, address) BTFIXUP_CALL(__pmd_alloc_one)(mm, address)
-+
-+static inline struct page *pmd_alloc_one(struct mm_struct *mm, unsigned long addr)
-+{
-+ pmd_t *pmd = pmd_alloc_one_kernel(mm, addr);
-+ if (pmd)
-+ return virt_to_page(pmd);
-+ else
-+ return NULL;
-+}
-
- BTFIXUPDEF_CALL(void, free_pmd_fast, pmd_t *)
- #define free_pmd_fast(pmd) BTFIXUP_CALL(free_pmd_fast)(pmd)
-
--#define pmd_free(pmd) free_pmd_fast(pmd)
-+#define pmd_free(pmd) free_pmd_fast(page_address(pmd))
- #define __pmd_free_tlb(tlb, pmd) pmd_free(pmd)
-
- BTFIXUPDEF_CALL(void, pmd_populate, pmd_t *, struct page *)
---- linux-2.6.0-test1/include/asm-sparc/pgtable.h 2003-06-14 12:18:22.000000000 -0700
-+++ 25/include/asm-sparc/pgtable.h 2003-07-19 17:07:16.000000000 -0700
-@@ -202,10 +202,11 @@ extern unsigned long empty_zero_page;
- /*
- */
- BTFIXUPDEF_CALL_CONST(struct page *, pmd_page, pmd_t)
--BTFIXUPDEF_CALL_CONST(unsigned long, pgd_page, pgd_t)
-+BTFIXUPDEF_CALL_CONST(unsigned long, __pgd_page, pgd_t)
-
- #define pmd_page(pmd) BTFIXUP_CALL(pmd_page)(pmd)
--#define pgd_page(pgd) BTFIXUP_CALL(pgd_page)(pgd)
-+#define __pgd_page(pgd) BTFIXUP_CALL(__pgd_page)(pgd)
-+#define pgd_page(pgd) virt_to_page(__pgd_page(pgd))
-
- BTFIXUPDEF_SETHI(none_mask)
- BTFIXUPDEF_CALL_CONST(int, pte_present, pte_t)
-@@ -352,6 +353,11 @@ extern __inline__ pte_t pte_modify(pte_t
- /* Find an entry in the second-level page table.. */
- BTFIXUPDEF_CALL(pmd_t *, pmd_offset, pgd_t *, unsigned long)
- #define pmd_offset(dir,addr) BTFIXUP_CALL(pmd_offset)(dir,addr)
-+#define pmd_offset_kernel(pgd, addr) pmd_offset(pgd, addr)
-+#define pmd_offset_map(pgd, addr) pmd_offset(pgd, addr)
-+#define pmd_offset_map_nested(pgd, addr) pmd_offset(pgd, addr)
-+#define pmd_unmap(pmd) do { } while (0)
-+#define pmd_unmap_nested(pmd) do { } while (0)
-
- /* Find an entry in the third-level page table.. */
- BTFIXUPDEF_CALL(pte_t *, pte_offset_kernel, pmd_t *, unsigned long)
---- linux-2.6.0-test1/include/asm-sparc/posix_types.h 2003-06-14 12:18:06.000000000 -0700
-+++ 25/include/asm-sparc/posix_types.h 2003-07-19 17:06:39.000000000 -0700
-@@ -17,7 +17,9 @@ typedef int __kernel_
- typedef unsigned short __kernel_ipc_pid_t;
- typedef unsigned short __kernel_uid_t;
- typedef unsigned short __kernel_gid_t;
--typedef unsigned short __kernel_dev_t;
-+#ifdef __GNUC__
-+typedef unsigned long long __kernel_dev_t;
-+#endif
- typedef unsigned long __kernel_ino_t;
- typedef unsigned short __kernel_mode_t;
- typedef unsigned short __kernel_umode_t;
---- linux-2.6.0-test1/include/asm-sparc/smp.h 2003-06-14 12:18:04.000000000 -0700
-+++ 25/include/asm-sparc/smp.h 2003-07-19 17:04:07.000000000 -0700
-@@ -8,6 +8,7 @@
-
- #include <linux/config.h>
- #include <linux/threads.h>
-+#include <linux/cpumask.h>
- #include <asm/head.h>
- #include <asm/btfixup.h>
-
---- linux-2.6.0-test1/include/asm-um/pgalloc.h 2003-06-14 12:18:30.000000000 -0700
-+++ 25/include/asm-um/pgalloc.h 2003-07-19 17:07:16.000000000 -0700
-@@ -42,7 +42,8 @@ static inline void pte_free(struct page
- * inside the pgd, so has no extra memory associated with it.
- */
-
--#define pmd_alloc_one(mm, addr) ({ BUG(); ((pmd_t *)2); })
-+#define pmd_alloc_one(mm, addr) ({ BUG(); ((struct page *)2); })
-+#define pmd_alloc_one_kernel(mm, addr) ({ BUG(); ((pmd_t *)2); })
- #define pmd_free(x) do { } while (0)
- #define __pmd_free_tlb(tlb,x) do { } while (0)
- #define pgd_populate(mm, pmd, pte) BUG()
---- linux-2.6.0-test1/include/asm-um/pgtable.h 2003-06-14 12:18:52.000000000 -0700
-+++ 25/include/asm-um/pgtable.h 2003-07-19 17:07:16.000000000 -0700
-@@ -374,6 +374,12 @@ static inline pmd_t * pmd_offset(pgd_t *
- return (pmd_t *) dir;
- }
-
-+#define pmd_offset_kernel(pgd, addr) pmd_offset(pgd, addr)
-+#define pmd_offset_map(pgd, addr) pmd_offset(pgd, addr)
-+#define pmd_offset_map_nested(pgd, addr) pmd_offset(pgd, addr)
-+#define pmd_unmap(pgd, addr) do { } while (0)
-+#define pmd_unmap_nested(pgd, addr) do { } while (0)
-+
- /* Find an entry in the third-level page table.. */
- #define pte_index(address) (((address) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1))
- #define pte_offset_kernel(dir, address) \
---- linux-2.6.0-test1/include/asm-um/smp.h 2003-06-14 12:17:56.000000000 -0700
-+++ 25/include/asm-um/smp.h 2003-07-19 17:04:07.000000000 -0700
-@@ -1,13 +1,14 @@
- #ifndef __UM_SMP_H
- #define __UM_SMP_H
-
--extern unsigned long cpu_online_map;
--
- #ifdef CONFIG_SMP
-
- #include "linux/config.h"
- #include "linux/bitops.h"
- #include "asm/current.h"
-+#include "linux/cpumask.h"
-+
-+extern cpumask_t cpu_online_map;
-
- #define smp_processor_id() (current->thread_info->cpu)
- #define cpu_logical_map(n) (n)
-@@ -16,16 +17,11 @@ extern unsigned long cpu_online_map;
- extern int hard_smp_processor_id(void);
- #define NO_PROC_ID -1
-
--#define cpu_online(cpu) (cpu_online_map & (1<<(cpu)))
-+#define cpu_online(cpu) cpu_isset(cpu, cpu_online_map)
-
- extern int ncpus;
- #define cpu_possible(cpu) (cpu < ncpus)
-
--extern inline unsigned int num_online_cpus(void)
--{
-- return(hweight32(cpu_online_map));
--}
--
- extern inline void smp_cpus_done(unsigned int maxcpus)
- {
- }
---- linux-2.6.0-test1/include/asm-v850/anna.h 2003-06-14 12:18:06.000000000 -0700
-+++ 25/include/asm-v850/anna.h 2003-07-19 17:03:51.000000000 -0700
-@@ -1,8 +1,8 @@
- /*
- * include/asm-v850/anna.h -- Anna V850E2 evaluation cpu chip/board
- *
-- * Copyright (C) 2001,2002 NEC Corporation
-- * Copyright (C) 2001,2002 Miles Bader <miles@gnu.org>
-+ * Copyright (C) 2001,02,03 NEC Electronics Corporation
-+ * Copyright (C) 2001,02,03 Miles Bader <miles@gnu.org>
- *
- * This file is subject to the terms and conditions of the GNU General
- * Public License. See the file COPYING in the main directory of this
-@@ -14,8 +14,9 @@
- #ifndef __V850_ANNA_H__
- #define __V850_ANNA_H__
-
-+#include <asm/v850e2.h> /* Based on V850E2 core. */
-+
-
--#define CPU_ARCH "v850e2"
- #define CPU_MODEL "v850e2/anna"
- #define CPU_MODEL_LONG "NEC V850E2/Anna"
- #define PLATFORM "anna"
-@@ -48,30 +49,6 @@
-
-
- /* Anna specific control registers. */
--#define ANNA_CSC_ADDR(n) (0xFFFFF060 + (n) * 2)
--#define ANNA_CSC(n) (*(volatile u16 *)ANNA_CSC_ADDR(n))
--#define ANNA_BPC_ADDR 0xFFFFF064
--#define ANNA_BPC (*(volatile u16 *)ANNA_BPC_ADDR)
--#define ANNA_BSC_ADDR 0xFFFFF066
--#define ANNA_BSC (*(volatile u16 *)ANNA_BSC_ADDR)
--#define ANNA_BEC_ADDR 0xFFFFF068
--#define ANNA_BEC (*(volatile u16 *)ANNA_BEC_ADDR)
--#define ANNA_BHC_ADDR 0xFFFFF06A
--#define ANNA_BHC (*(volatile u16 *)ANNA_BHC_ADDR)
--#define ANNA_BCT_ADDR(n) (0xFFFFF480 + (n) * 2)
--#define ANNA_BCT(n) (*(volatile u16 *)ANNA_BCT_ADDR(n))
--#define ANNA_DWC_ADDR(n) (0xFFFFF484 + (n) * 2)
--#define ANNA_DWC(n) (*(volatile u16 *)ANNA_DWC_ADDR(n))
--#define ANNA_BCC_ADDR 0xFFFFF488
--#define ANNA_BCC (*(volatile u16 *)ANNA_BCC_ADDR)
--#define ANNA_ASC_ADDR 0xFFFFF48A
--#define ANNA_ASC (*(volatile u16 *)ANNA_ASC_ADDR)
--#define ANNA_LBS_ADDR 0xFFFFF48E
--#define ANNA_LBS (*(volatile u16 *)ANNA_LBS_ADDR)
--#define ANNA_SCR3_ADDR 0xFFFFF4AC
--#define ANNA_SCR3 (*(volatile u16 *)ANNA_SCR3_ADDR)
--#define ANNA_RFS3_ADDR 0xFFFFF4AE
--#define ANNA_RFS3 (*(volatile u16 *)ANNA_RFS3_ADDR)
- #define ANNA_ILBEN_ADDR 0xFFFFF7F2
- #define ANNA_ILBEN (*(volatile u16 *)ANNA_ILBEN_ADDR)
-
-@@ -85,9 +62,6 @@
- #define ANNA_PORT_PM(n) (*(volatile u8 *)ANNA_PORT_PM_ADDR(n))
-
-
--/* NB85E-style interrupt system. */
--#include <asm/nb85e_intc.h>
--
- /* Hardware-specific interrupt numbers (in the kernel IRQ namespace). */
- #define IRQ_INTP(n) (n) /* Pnnn (pin) interrupts 0-15 */
- #define IRQ_INTP_NUM 16
-@@ -116,12 +90,15 @@ extern void anna_init_irqs (void);
-
-
- /* Anna UART details (basically the same as the V850E/MA1, but 2 channels). */
--#define NB85E_UART_NUM_CHANNELS 2
--#define NB85E_UART_BASE_FREQ (SYS_CLOCK_FREQ / 2)
--#define NB85E_UART_CHIP_NAME "V850E2/NA85E2A"
-+#define V850E_UART_NUM_CHANNELS 2
-+#define V850E_UART_BASE_FREQ (SYS_CLOCK_FREQ / 2)
-+#define V850E_UART_CHIP_NAME "V850E2/NA85E2A"
-+
-+/* This is the UART channel that's actually connected on the board. */
-+#define V850E_UART_CONSOLE_CHANNEL 1
-
- /* This is a function that gets called before configuring the UART. */
--#define NB85E_UART_PRE_CONFIGURE anna_uart_pre_configure
-+#define V850E_UART_PRE_CONFIGURE anna_uart_pre_configure
- #ifndef __ASSEMBLY__
- extern void anna_uart_pre_configure (unsigned chan,
- unsigned cflags, unsigned baud);
-@@ -130,9 +107,9 @@ extern void anna_uart_pre_configure (uns
- /* This board supports RTS/CTS for the on-chip UART, but only for channel 1. */
-
- /* CTS for UART channel 1 is pin P37 (bit 7 of port 3). */
--#define NB85E_UART_CTS(chan) ((chan) == 1 ? !(ANNA_PORT_IO(3) & 0x80) : 1)
-+#define V850E_UART_CTS(chan) ((chan) == 1 ? !(ANNA_PORT_IO(3) & 0x80) : 1)
- /* RTS for UART channel 1 is pin P07 (bit 7 of port 0). */
--#define NB85E_UART_SET_RTS(chan, val) \
-+#define V850E_UART_SET_RTS(chan, val) \
- do { \
- if (chan == 1) { \
- unsigned old = ANNA_PORT_IO(0); \
-@@ -145,16 +122,16 @@ extern void anna_uart_pre_configure (uns
-
-
- /* Timer C details. */
--#define NB85E_TIMER_C_BASE_ADDR 0xFFFFF600
-+#define V850E_TIMER_C_BASE_ADDR 0xFFFFF600
-
- /* Timer D details (the Anna actually has 5 of these; should change later). */
--#define NB85E_TIMER_D_BASE_ADDR 0xFFFFF540
--#define NB85E_TIMER_D_TMD_BASE_ADDR (NB85E_TIMER_D_BASE_ADDR + 0x0)
--#define NB85E_TIMER_D_CMD_BASE_ADDR (NB85E_TIMER_D_BASE_ADDR + 0x2)
--#define NB85E_TIMER_D_TMCD_BASE_ADDR (NB85E_TIMER_D_BASE_ADDR + 0x4)
-+#define V850E_TIMER_D_BASE_ADDR 0xFFFFF540
-+#define V850E_TIMER_D_TMD_BASE_ADDR (V850E_TIMER_D_BASE_ADDR + 0x0)
-+#define V850E_TIMER_D_CMD_BASE_ADDR (V850E_TIMER_D_BASE_ADDR + 0x2)
-+#define V850E_TIMER_D_TMCD_BASE_ADDR (V850E_TIMER_D_BASE_ADDR + 0x4)
-
--#define NB85E_TIMER_D_BASE_FREQ SYS_CLOCK_FREQ
--#define NB85E_TIMER_D_TMCD_CS_MIN 1 /* min 2^1 divider */
-+#define V850E_TIMER_D_BASE_FREQ SYS_CLOCK_FREQ
-+#define V850E_TIMER_D_TMCD_CS_MIN 1 /* min 2^1 divider */
-
-
- /* For <asm/param.h> */
---- linux-2.6.0-test1/include/asm-v850/as85ep1.h 2003-06-14 12:18:30.000000000 -0700
-+++ 25/include/asm-v850/as85ep1.h 2003-07-19 17:03:51.000000000 -0700
-@@ -1,8 +1,8 @@
- /*
- * include/asm-v850/as85ep1.h -- AS85EP1 evaluation CPU chip/board
- *
-- * Copyright (C) 2001,2002 NEC Corporation
-- * Copyright (C) 2001,2002 Miles Bader <miles@gnu.org>
-+ * Copyright (C) 2001,02,03 NEC Electronics Corporation
-+ * Copyright (C) 2001,02,03 Miles Bader <miles@gnu.org>
- *
- * This file is subject to the terms and conditions of the GNU General
- * Public License. See the file COPYING in the main directory of this
-@@ -14,8 +14,9 @@
- #ifndef __V850_AS85EP1_H__
- #define __V850_AS85EP1_H__
-
-+#include <asm/v850e.h>
-+
-
--#define CPU_ARCH "v850e"
- #define CPU_MODEL "as85ep1"
- #define CPU_MODEL_LONG "NEC V850E/AS85EP1"
- #define PLATFORM "AS85EP1"
-@@ -86,9 +87,6 @@
- #define AS85EP1_PORT_PMC(n) (*(volatile u8 *)AS85EP1_PORT_PMC_ADDR(n))
-
-
--/* NB85E-style interrupt system. */
--#include <asm/nb85e_intc.h>
--
- /* Hardware-specific interrupt numbers (in the kernel IRQ namespace). */
- #define IRQ_INTCCC(n) (0x0C + (n))
- #define IRQ_INTCCC_NUM 8
-@@ -110,12 +108,12 @@ extern void as85ep1_init_irqs (void);
-
-
- /* AS85EP1 UART details (basically the same as the V850E/MA1, but 2 channels). */
--#define NB85E_UART_NUM_CHANNELS 2
--#define NB85E_UART_BASE_FREQ (SYS_CLOCK_FREQ / 4)
--#define NB85E_UART_CHIP_NAME "V850E/NA85E"
-+#define V850E_UART_NUM_CHANNELS 2
-+#define V850E_UART_BASE_FREQ (SYS_CLOCK_FREQ / 4)
-+#define V850E_UART_CHIP_NAME "V850E/NA85E"
-
- /* This is a function that gets called before configuring the UART. */
--#define NB85E_UART_PRE_CONFIGURE as85ep1_uart_pre_configure
-+#define V850E_UART_PRE_CONFIGURE as85ep1_uart_pre_configure
- #ifndef __ASSEMBLY__
- extern void as85ep1_uart_pre_configure (unsigned chan,
- unsigned cflags, unsigned baud);
-@@ -124,9 +122,9 @@ extern void as85ep1_uart_pre_configure (
- /* This board supports RTS/CTS for the on-chip UART, but only for channel 1. */
-
- /* CTS for UART channel 1 is pin P54 (bit 4 of port 5). */
--#define NB85E_UART_CTS(chan) ((chan) == 1 ? !(AS85EP1_PORT_IO(5) & 0x10) : 1)
-+#define V850E_UART_CTS(chan) ((chan) == 1 ? !(AS85EP1_PORT_IO(5) & 0x10) : 1)
- /* RTS for UART channel 1 is pin P53 (bit 3 of port 5). */
--#define NB85E_UART_SET_RTS(chan, val) \
-+#define V850E_UART_SET_RTS(chan, val) \
- do { \
- if (chan == 1) { \
- unsigned old = AS85EP1_PORT_IO(5); \
-@@ -139,16 +137,16 @@ extern void as85ep1_uart_pre_configure (
-
-
- /* Timer C details. */
--#define NB85E_TIMER_C_BASE_ADDR 0xFFFFF600
-+#define V850E_TIMER_C_BASE_ADDR 0xFFFFF600
-
- /* Timer D details (the AS85EP1 actually has 5 of these; should change later). */
--#define NB85E_TIMER_D_BASE_ADDR 0xFFFFF540
--#define NB85E_TIMER_D_TMD_BASE_ADDR (NB85E_TIMER_D_BASE_ADDR + 0x0)
--#define NB85E_TIMER_D_CMD_BASE_ADDR (NB85E_TIMER_D_BASE_ADDR + 0x2)
--#define NB85E_TIMER_D_TMCD_BASE_ADDR (NB85E_TIMER_D_BASE_ADDR + 0x4)
-+#define V850E_TIMER_D_BASE_ADDR 0xFFFFF540
-+#define V850E_TIMER_D_TMD_BASE_ADDR (V850E_TIMER_D_BASE_ADDR + 0x0)
-+#define V850E_TIMER_D_CMD_BASE_ADDR (V850E_TIMER_D_BASE_ADDR + 0x2)
-+#define V850E_TIMER_D_TMCD_BASE_ADDR (V850E_TIMER_D_BASE_ADDR + 0x4)
-
--#define NB85E_TIMER_D_BASE_FREQ SYS_CLOCK_FREQ
--#define NB85E_TIMER_D_TMCD_CS_MIN 2 /* min 2^2 divider */
-+#define V850E_TIMER_D_BASE_FREQ SYS_CLOCK_FREQ
-+#define V850E_TIMER_D_TMCD_CS_MIN 2 /* min 2^2 divider */
-
-
- /* For <asm/param.h> */
---- linux-2.6.0-test1/include/asm-v850/asm.h 2003-06-14 12:18:08.000000000 -0700
-+++ 25/include/asm-v850/asm.h 2003-07-19 17:03:51.000000000 -0700
-@@ -1,7 +1,7 @@
- /*
- * include/asm-v850/asm.h -- Macros for writing assembly code
- *
-- * Copyright (C) 2001,02,03 NEC Corporation
-+ * Copyright (C) 2001,02,03 NEC Electronics Corporation
- * Copyright (C) 2001,02,03 Miles Bader <miles@gnu.org>
- *
- * This file is subject to the terms and conditions of the GNU General
---- linux-2.6.0-test1/include/asm-v850/cacheflush.h 2003-06-14 12:18:07.000000000 -0700
-+++ 25/include/asm-v850/cacheflush.h 2003-07-19 17:03:51.000000000 -0700
-@@ -1,8 +1,8 @@
- /*
- * include/asm-v850/cacheflush.h
- *
-- * Copyright (C) 2001,02 NEC Corporation
-- * Copyright (C) 2001,02 Miles Bader <miles@gnu.org>
-+ * Copyright (C) 2001,02,03 NEC Electronics Corporation
-+ * Copyright (C) 2001,02,03 Miles Bader <miles@gnu.org>
- *
- * This file is subject to the terms and conditions of the GNU General
- * Public License. See the file COPYING in the main directory of this
-@@ -21,21 +21,40 @@
- #include <asm/machdep.h>
-
-
--#ifndef flush_cache_all
--/* If there's no flush_cache_all macro defined by <asm/machdep.h>, then
-- this processor has no cache, so just define these as nops. */
--
-+/* The following are all used by the kernel in ways that only affect
-+ systems with MMUs, so we don't need them. */
- #define flush_cache_all() ((void)0)
- #define flush_cache_mm(mm) ((void)0)
- #define flush_cache_range(vma, start, end) ((void)0)
- #define flush_cache_page(vma, vmaddr) ((void)0)
- #define flush_dcache_page(page) ((void)0)
-+
-+#ifdef CONFIG_NO_CACHE
-+
-+/* Some systems have no cache at all, in which case we don't need these
-+ either. */
- #define flush_icache() ((void)0)
- #define flush_icache_range(start, end) ((void)0)
- #define flush_icache_page(vma,pg) ((void)0)
- #define flush_icache_user_range(vma,pg,adr,len) ((void)0)
- #define flush_cache_sigtramp(vaddr) ((void)0)
-
--#endif /* !flush_cache_all */
-+#else /* !CONFIG_NO_CACHE */
-+
-+struct page;
-+struct mm_struct;
-+struct vm_area_struct;
-+
-+/* Otherwise, somebody had better define them. */
-+extern void flush_icache (void);
-+extern void flush_icache_range (unsigned long start, unsigned long end);
-+extern void flush_icache_page (struct vm_area_struct *vma, struct page *page);
-+extern void flush_icache_user_range (struct vm_area_struct *vma,
-+ struct page *page,
-+ unsigned long adr, int len);
-+extern void flush_cache_sigtramp (unsigned long addr);
-+
-+#endif /* CONFIG_NO_CACHE */
-+
-
- #endif /* __V850_CACHEFLUSH_H__ */
---- linux-2.6.0-test1/include/asm-v850/entry.h 2003-06-14 12:18:52.000000000 -0700
-+++ 25/include/asm-v850/entry.h 2003-07-19 17:03:51.000000000 -0700
-@@ -65,10 +65,10 @@
- #define RESET_GUARD_ACTIVE 0xFAB4BEEF
- #endif /* CONFIG_RESET_GUARD */
-
--#ifdef CONFIG_V850E_MA1_HIGHRES_TIMER
-+#ifdef CONFIG_V850E_HIGHRES_TIMER
- #define HIGHRES_TIMER_SLOW_TICKS_ADDR (KERNEL_VAR_SPACE_ADDR + 32)
- #define HIGHRES_TIMER_SLOW_TICKS KERNEL_VAR (HIGHRES_TIMER_SLOW_TICKS_ADDR)
--#endif /* CONFIG_V850E_MA1_HIGHRES_TIMER */
-+#endif /* CONFIG_V850E_HIGHRES_TIMER */
-
- #ifndef __ASSEMBLY__
-
---- linux-2.6.0-test1/include/asm-v850/fpga85e2c.h 2003-06-14 12:18:22.000000000 -0700
-+++ 25/include/asm-v850/fpga85e2c.h 2003-07-19 17:03:51.000000000 -0700
-@@ -2,8 +2,8 @@
- * include/asm-v850/fpga85e2c.h -- Machine-dependent defs for
- * FPGA implementation of V850E2/NA85E2C
- *
-- * Copyright (C) 2002 NEC Corporation
-- * Copyright (C) 2002 Miles Bader <miles@gnu.org>
-+ * Copyright (C) 2002,03 NEC Electronics Corporation
-+ * Copyright (C) 2002,03 Miles Bader <miles@gnu.org>
- *
- * This file is subject to the terms and conditions of the GNU General
- * Public License. See the file COPYING in the main directory of this
-@@ -15,11 +15,10 @@
- #ifndef __V850_FPGA85E2C_H__
- #define __V850_FPGA85E2C_H__
-
--
-+#include <asm/v850e2.h>
- #include <asm/clinkage.h>
-
-
--#define CPU_ARCH "v850e2"
- #define CPU_MODEL "v850e2/fpga85e2c"
- #define CPU_MODEL_LONG "NEC V850E2/NA85E2C"
- #define PLATFORM "fpga85e2c"
-@@ -42,27 +41,6 @@
- #define CSDEV_ADDR(n) (0xFFE80110 + 2*(n))
- #define CSDEV(n) (*(volatile unsigned char *)CSDEV_ADDR (n))
-
--/* The BSC register controls bus-sizing. Each memory area CSn uses a pair
-- of bits N*2 and N*2+1, where 00 means an 8-bit bus size, 01 16-bit, and
-- 10 32-bit. */
--#define BSC_ADDR 0xFFFFF066
--#define BSC (*(volatile unsigned short *)BSC_ADDR)
--
--#define DWC_ADDR(n) (0xFFFFF484 + 2*(n))
--#define DWC(n) (*(volatile unsigned short *)DWC_ADDR (n))
--
--#define ASC_ADDR 0xFFFFF48A
--#define ASC (*(volatile unsigned short *)ASC_ADDR)
--
--#define BTSC_ADDR 0xFFFFF070
--#define BTSC (*(volatile unsigned short *)BTSC_ADDR)
--
--#define BHC_ADDR 0xFFFFF06A
--#define BHC (*(volatile unsigned short *)BHC_ADDR)
--
--
--/* NB85E-style interrupt system. */
--#include <asm/nb85e_intc.h>
-
- /* Timer interrupts 0-3, interrupt at intervals from CLK/4096 to CLK/16384. */
- #define IRQ_RPU(n) (60 + (n))
---- linux-2.6.0-test1/include/asm-v850/highres_timer.h 2003-06-14 12:18:34.000000000 -0700
-+++ 25/include/asm-v850/highres_timer.h 2003-07-19 17:03:51.000000000 -0700
-@@ -1,8 +1,8 @@
- /*
- * include/asm-v850/highres_timer.h -- High resolution timing routines
- *
-- * Copyright (C) 2001 NEC Corporation
-- * Copyright (C) 2001 Miles Bader <miles@gnu.org>
-+ * Copyright (C) 2001,03 NEC Electronics Corporation
-+ * Copyright (C) 2001,03 Miles Bader <miles@gnu.org>
- *
- * This file is subject to the terms and conditions of the GNU General
- * Public License. See the file COPYING in the main directory of this
-@@ -25,7 +25,7 @@
- counter overflows). */
- #define HIGHRES_TIMER_SLOW_TICK_RATE 25
-
--/* Which timer in the nb85e `Timer D' we use. */
-+/* Which timer in the V850E `Timer D' we use. */
- #define HIGHRES_TIMER_TIMER_D_UNIT 3
-
-
---- linux-2.6.0-test1/include/asm-v850/ma1.h 2003-06-14 12:18:24.000000000 -0700
-+++ 25/include/asm-v850/ma1.h 2003-07-19 17:03:51.000000000 -0700
-@@ -1,8 +1,8 @@
- /*
- * include/asm-v850/ma1.h -- V850E/MA1 cpu chip
- *
-- * Copyright (C) 2001,02 NEC Corporation
-- * Copyright (C) 2001,02 Miles Bader <miles@gnu.org>
-+ * Copyright (C) 2001,02,03 NEC Electronics Corporation
-+ * Copyright (C) 2001,02,03 Miles Bader <miles@gnu.org>
- *
- * This file is subject to the terms and conditions of the GNU General
- * Public License. See the file COPYING in the main directory of this
-@@ -40,12 +40,11 @@
- #define IRQ_INTST(n) (0x27 + (n)*4) /* UART 0-2 transmission completion */
- #define IRQ_INTST_NUM 3
-
--/* For <asm/irq.h> */
- #define NUM_CPU_IRQS 0x30
-
-
- /* The MA1 has a UART with 3 channels. */
--#define NB85E_UART_NUM_CHANNELS 3
-+#define V850E_UART_NUM_CHANNELS 3
-
-
- #endif /* __V850_MA1_H__ */
---- linux-2.6.0-test1/include/asm-v850/machdep.h 2003-06-14 12:18:07.000000000 -0700
-+++ 25/include/asm-v850/machdep.h 2003-07-19 17:03:51.000000000 -0700
-@@ -1,8 +1,8 @@
- /*
- * include/asm-v850/machdep.h -- Machine-dependent definitions
- *
-- * Copyright (C) 2001,02 NEC Corporation
-- * Copyright (C) 2001,02 Miles Bader <miles@gnu.org>
-+ * Copyright (C) 2001,02,03 NEC Electronics Corporation
-+ * Copyright (C) 2001,02,03 Miles Bader <miles@gnu.org>
- *
- * This file is subject to the terms and conditions of the GNU General
- * Public License. See the file COPYING in the main directory of this
-@@ -20,6 +20,9 @@
- #ifdef CONFIG_V850E_MA1
- #include <asm/ma1.h>
- #endif
-+#ifdef CONFIG_V850E_ME2
-+#include <asm/me2.h>
-+#endif
- #ifdef CONFIG_V850E_TEG
- #include <asm/teg.h>
- #endif
-@@ -36,6 +39,9 @@
- #ifdef CONFIG_RTE_CB_MA1
- #include <asm/rte_ma1_cb.h>
- #endif
-+#ifdef CONFIG_RTE_CB_ME2
-+#include <asm/rte_me2_cb.h>
-+#endif
- #ifdef CONFIG_RTE_CB_NB85E
- #include <asm/rte_nb85e_cb.h>
- #endif
-@@ -45,6 +51,9 @@
- #ifdef CONFIG_V850E2_SIM85E2C
- #include <asm/sim85e2c.h>
- #endif
-+#ifdef CONFIG_V850E2_SIM85E2S
-+#include <asm/sim85e2s.h>
-+#endif
- #ifdef CONFIG_V850E2_FPGA85E2C
- #include <asm/fpga85e2c.h>
- #endif
---- linux-2.6.0-test1/include/asm-v850/ma.h 2003-06-14 12:17:58.000000000 -0700
-+++ 25/include/asm-v850/ma.h 2003-07-19 17:03:51.000000000 -0700
-@@ -1,8 +1,8 @@
- /*
- * include/asm-v850/ma.h -- V850E/MA series of cpu chips
- *
-- * Copyright (C) 2001,02 NEC Corporation
-- * Copyright (C) 2001,02 Miles Bader <miles@gnu.org>
-+ * Copyright (C) 2001,02,03 NEC Electronics Corporation
-+ * Copyright (C) 2001,02,03 Miles Bader <miles@gnu.org>
- *
- * This file is subject to the terms and conditions of the GNU General
- * Public License. See the file COPYING in the main directory of this
-@@ -14,9 +14,8 @@
- #ifndef __V850_MA_H__
- #define __V850_MA_H__
-
--
--/* The MA series uses the NB85E cpu core. */
--#include <asm/nb85e.h>
-+/* The MA series uses the V850E cpu core. */
-+#include <asm/v850e.h>
-
-
- /* For <asm/entry.h> */
-@@ -28,10 +27,10 @@
-
-
- /* MA series UART details. */
--#define NB85E_UART_BASE_FREQ CPU_CLOCK_FREQ
-+#define V850E_UART_BASE_FREQ CPU_CLOCK_FREQ
-
- /* This is a function that gets called before configuring the UART. */
--#define NB85E_UART_PRE_CONFIGURE ma_uart_pre_configure
-+#define V850E_UART_PRE_CONFIGURE ma_uart_pre_configure
- #ifndef __ASSEMBLY__
- extern void ma_uart_pre_configure (unsigned chan,
- unsigned cflags, unsigned baud);
-@@ -39,16 +38,16 @@ extern void ma_uart_pre_configure (unsig
-
-
- /* MA series timer C details. */
--#define NB85E_TIMER_C_BASE_ADDR 0xFFFFF600
-+#define V850E_TIMER_C_BASE_ADDR 0xFFFFF600
-
-
- /* MA series timer D details. */
--#define NB85E_TIMER_D_BASE_ADDR 0xFFFFF540
--#define NB85E_TIMER_D_TMD_BASE_ADDR (NB85E_TIMER_D_BASE_ADDR + 0x0)
--#define NB85E_TIMER_D_CMD_BASE_ADDR (NB85E_TIMER_D_BASE_ADDR + 0x2)
--#define NB85E_TIMER_D_TMCD_BASE_ADDR (NB85E_TIMER_D_BASE_ADDR + 0x4)
-+#define V850E_TIMER_D_BASE_ADDR 0xFFFFF540
-+#define V850E_TIMER_D_TMD_BASE_ADDR (V850E_TIMER_D_BASE_ADDR + 0x0)
-+#define V850E_TIMER_D_CMD_BASE_ADDR (V850E_TIMER_D_BASE_ADDR + 0x2)
-+#define V850E_TIMER_D_TMCD_BASE_ADDR (V850E_TIMER_D_BASE_ADDR + 0x4)
-
--#define NB85E_TIMER_D_BASE_FREQ CPU_CLOCK_FREQ
-+#define V850E_TIMER_D_BASE_FREQ CPU_CLOCK_FREQ
-
-
- /* Port 0 */
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-v850/me2.h 2003-07-19 17:03:51.000000000 -0700
-@@ -0,0 +1,182 @@
-+/*
-+ * include/asm-v850/me2.h -- V850E/ME2 cpu chip
-+ *
-+ * Copyright (C) 2001,02,03 NEC Electronics Corporation
-+ * Copyright (C) 2001,02,03 Miles Bader <miles@gnu.org>
-+ *
-+ * This file is subject to the terms and conditions of the GNU General
-+ * Public License. See the file COPYING in the main directory of this
-+ * archive for more details.
-+ *
-+ * Written by Miles Bader <miles@gnu.org>
-+ */
-+
-+#ifndef __V850_ME2_H__
-+#define __V850_ME2_H__
-+
-+#include <asm/v850e.h>
-+#include <asm/v850e_cache.h>
-+
-+
-+#define CPU_MODEL "v850e/me2"
-+#define CPU_MODEL_LONG "NEC V850E/ME2"
-+
-+
-+/* Hardware-specific interrupt numbers (in the kernel IRQ namespace). */
-+#define IRQ_INTP(n) (n) /* Pnnn (pin) interrupts */
-+#define IRQ_INTP_NUM 31
-+#define IRQ_INTCMD(n) (0x31 + (n)) /* interval timer interrupts 0-3 */
-+#define IRQ_INTCMD_NUM 4
-+#define IRQ_INTDMA(n) (0x41 + (n)) /* DMA interrupts 0-3 */
-+#define IRQ_INTDMA_NUM 4
-+#define IRQ_INTUBTIRE(n) (0x49 + (n)*5)/* UARTB 0-1 reception error */
-+#define IRQ_INTUBTIRE_NUM 2
-+#define IRQ_INTUBTIR(n) (0x4a + (n)*5) /* UARTB 0-1 reception complete */
-+#define IRQ_INTUBTIR_NUM 2
-+#define IRQ_INTUBTIT(n) (0x4b + (n)*5) /* UARTB 0-1 transmission complete */
-+#define IRQ_INTUBTIT_NUM 2
-+#define IRQ_INTUBTIF(n) (0x4c + (n)*5) /* UARTB 0-1 FIFO trans. complete */
-+#define IRQ_INTUBTIF_NUM 2
-+#define IRQ_INTUBTITO(n) (0x4d + (n)*5) /* UARTB 0-1 reception timeout */
-+#define IRQ_INTUBTITO_NUM 2
-+
-+/* For <asm/irq.h> */
-+#define NUM_CPU_IRQS 0x59 /* V850E/ME2 */
-+
-+
-+/* For <asm/entry.h> */
-+/* We use on-chip RAM, for a few miscellaneous variables that must be
-+ accessible using a load instruction relative to R0. */
-+#define R0_RAM_ADDR 0xFFFFB000 /* V850E/ME2 */
-+
-+
-+/* V850E/ME2 UARTB details.*/
-+#define V850E_UART_NUM_CHANNELS 2
-+#define V850E_UARTB_BASE_FREQ (CPU_CLOCK_FREQ / 4)
-+
-+/* This is a function that gets called before configuring the UART. */
-+#define V850E_UART_PRE_CONFIGURE me2_uart_pre_configure
-+#ifndef __ASSEMBLY__
-+extern void me2_uart_pre_configure (unsigned chan,
-+ unsigned cflags, unsigned baud);
-+#endif /* __ASSEMBLY__ */
-+
-+
-+/* V850E/ME2 timer C details. */
-+#define V850E_TIMER_C_BASE_ADDR 0xFFFFF600
-+
-+
-+/* V850E/ME2 timer D details. */
-+#define V850E_TIMER_D_BASE_ADDR 0xFFFFF540
-+#define V850E_TIMER_D_TMD_BASE_ADDR (V850E_TIMER_D_BASE_ADDR + 0x0)
-+#define V850E_TIMER_D_CMD_BASE_ADDR (V850E_TIMER_D_BASE_ADDR + 0x2)
-+#define V850E_TIMER_D_TMCD_BASE_ADDR (V850E_TIMER_D_BASE_ADDR + 0x4)
-+
-+#define V850E_TIMER_D_BASE_FREQ (CPU_CLOCK_FREQ / 2)
-+
-+
-+/* Select iRAM mode. */
-+#define ME2_IRAMM_ADDR 0xFFFFF80A
-+#define ME2_IRAMM (*(volatile u8*)ME2_IRAMM_ADDR)
-+
-+
-+/* Interrupt edge-detection configuration. INTF(n) and INTR(n) are only
-+ valid for n == 1, 2, or 5. */
-+#define ME2_INTF_ADDR(n) (0xFFFFFC00 + (n) * 0x2)
-+#define ME2_INTF(n) (*(volatile u8*)ME2_INTF_ADDR(n))
-+#define ME2_INTR_ADDR(n) (0xFFFFFC20 + (n) * 0x2)
-+#define ME2_INTR(n) (*(volatile u8*)ME2_INTR_ADDR(n))
-+#define ME2_INTFAL_ADDR 0xFFFFFC10
-+#define ME2_INTFAL (*(volatile u8*)ME2_INTFAL_ADDR)
-+#define ME2_INTRAL_ADDR 0xFFFFFC30
-+#define ME2_INTRAL (*(volatile u8*)ME2_INTRAL_ADDR)
-+#define ME2_INTFDH_ADDR 0xFFFFFC16
-+#define ME2_INTFDH (*(volatile u16*)ME2_INTFDH_ADDR)
-+#define ME2_INTRDH_ADDR 0xFFFFFC36
-+#define ME2_INTRDH (*(volatile u16*)ME2_INTRDH_ADDR)
-+#define ME2_SESC_ADDR(n) (0xFFFFF609 + (n) * 0x10)
-+#define ME2_SESC(n) (*(volatile u8*)ME2_SESC_ADDR(n))
-+#define ME2_SESA10_ADDR 0xFFFFF5AD
-+#define ME2_SESA10 (*(volatile u8*)ME2_SESA10_ADDR)
-+#define ME2_SESA11_ADDR 0xFFFFF5DD
-+#define ME2_SESA11 (*(volatile u8*)ME2_SESA11_ADDR)
-+
-+
-+/* Port 1 */
-+/* Direct I/O. Bits 0-3 are pins P10-P13. */
-+#define ME2_PORT1_IO_ADDR 0xFFFFF402
-+#define ME2_PORT1_IO (*(volatile u8 *)ME2_PORT1_IO_ADDR)
-+/* Port mode (for direct I/O, 0 = output, 1 = input). */
-+#define ME2_PORT1_PM_ADDR 0xFFFFF422
-+#define ME2_PORT1_PM (*(volatile u8 *)ME2_PORT1_PM_ADDR)
-+/* Port mode control (0 = direct I/O mode, 1 = alternative I/O mode). */
-+#define ME2_PORT1_PMC_ADDR 0xFFFFF442
-+#define ME2_PORT1_PMC (*(volatile u8 *)ME2_PORT1_PMC_ADDR)
-+/* Port function control (for serial interfaces, 0 = CSI30, 1 = UARTB0 ). */
-+#define ME2_PORT1_PFC_ADDR 0xFFFFF462
-+#define ME2_PORT1_PFC (*(volatile u8 *)ME2_PORT1_PFC_ADDR)
-+
-+/* Port 2 */
-+/* Direct I/O. Bits 0-3 are pins P20-P25. */
-+#define ME2_PORT2_IO_ADDR 0xFFFFF404
-+#define ME2_PORT2_IO (*(volatile u8 *)ME2_PORT2_IO_ADDR)
-+/* Port mode (for direct I/O, 0 = output, 1 = input). */
-+#define ME2_PORT2_PM_ADDR 0xFFFFF424
-+#define ME2_PORT2_PM (*(volatile u8 *)ME2_PORT2_PM_ADDR)
-+/* Port mode control (0 = direct I/O mode, 1 = alternative I/O mode). */
-+#define ME2_PORT2_PMC_ADDR 0xFFFFF444
-+#define ME2_PORT2_PMC (*(volatile u8 *)ME2_PORT2_PMC_ADDR)
-+/* Port function control (for serial interfaces, 0 = INTP2x, 1 = UARTB1 ). */
-+#define ME2_PORT2_PFC_ADDR 0xFFFFF464
-+#define ME2_PORT2_PFC (*(volatile u8 *)ME2_PORT2_PFC_ADDR)
-+
-+/* Port 5 */
-+/* Direct I/O. Bits 0-5 are pins P50-P55. */
-+#define ME2_PORT5_IO_ADDR 0xFFFFF40A
-+#define ME2_PORT5_IO (*(volatile u8 *)ME2_PORT5_IO_ADDR)
-+/* Port mode (for direct I/O, 0 = output, 1 = input). */
-+#define ME2_PORT5_PM_ADDR 0xFFFFF42A
-+#define ME2_PORT5_PM (*(volatile u8 *)ME2_PORT5_PM_ADDR)
-+/* Port mode control (0 = direct I/O mode, 1 = alternative I/O mode). */
-+#define ME2_PORT5_PMC_ADDR 0xFFFFF44A
-+#define ME2_PORT5_PMC (*(volatile u8 *)ME2_PORT5_PMC_ADDR)
-+/* Port function control (). */
-+#define ME2_PORT5_PFC_ADDR 0xFFFFF46A
-+#define ME2_PORT5_PFC (*(volatile u8 *)ME2_PORT5_PFC_ADDR)
-+
-+/* Port 6 */
-+/* Direct I/O. Bits 5-7 are pins P65-P67. */
-+#define ME2_PORT6_IO_ADDR 0xFFFFF40C
-+#define ME2_PORT6_IO (*(volatile u8 *)ME2_PORT6_IO_ADDR)
-+/* Port mode (for direct I/O, 0 = output, 1 = input). */
-+#define ME2_PORT6_PM_ADDR 0xFFFFF42C
-+#define ME2_PORT6_PM (*(volatile u8 *)ME2_PORT6_PM_ADDR)
-+/* Port mode control (0 = direct I/O mode, 1 = alternative I/O mode). */
-+#define ME2_PORT6_PMC_ADDR 0xFFFFF44C
-+#define ME2_PORT6_PMC (*(volatile u8 *)ME2_PORT6_PMC_ADDR)
-+/* Port function control (). */
-+#define ME2_PORT6_PFC_ADDR 0xFFFFF46C
-+#define ME2_PORT6_PFC (*(volatile u8 *)ME2_PORT6_PFC_ADDR)
-+
-+/* Port 7 */
-+/* Direct I/O. Bits 2-7 are pins P72-P77. */
-+#define ME2_PORT7_IO_ADDR 0xFFFFF40E
-+#define ME2_PORT7_IO (*(volatile u8 *)ME2_PORT7_IO_ADDR)
-+/* Port mode (for direct I/O, 0 = output, 1 = input). */
-+#define ME2_PORT7_PM_ADDR 0xFFFFF42E
-+#define ME2_PORT7_PM (*(volatile u8 *)ME2_PORT7_PM_ADDR)
-+/* Port mode control (0 = direct I/O mode, 1 = alternative I/O mode). */
-+#define ME2_PORT7_PMC_ADDR 0xFFFFF44E
-+#define ME2_PORT7_PMC (*(volatile u8 *)ME2_PORT7_PMC_ADDR)
-+/* Port function control (). */
-+#define ME2_PORT7_PFC_ADDR 0xFFFFF46E
-+#define ME2_PORT7_PFC (*(volatile u8 *)ME2_PORT7_PFC_ADDR)
-+
-+
-+#ifndef __ASSEMBLY__
-+/* Initialize V850E/ME2 chip interrupts. */
-+extern void me2_init_irqs (void);
-+#endif /* !__ASSEMBLY__ */
-+
-+
-+#endif /* __V850_ME2_H__ */
---- linux-2.6.0-test1/include/asm-v850/nb85e_cache.h 2003-06-14 12:18:21.000000000 -0700
-+++ /dev/null 2002-08-30 16:31:37.000000000 -0700
-@@ -1,78 +0,0 @@
--/*
-- * include/asm-v850/nb85e_cache_cache.h -- Cache control for NB85E_CACHE212 and
-- * NB85E_CACHE213 cache memories
-- *
-- * Copyright (C) 2001,03 NEC Electronics Corporation
-- * Copyright (C) 2001,03 Miles Bader <miles@gnu.org>
-- *
-- * This file is subject to the terms and conditions of the GNU General
-- * Public License. See the file COPYING in the main directory of this
-- * archive for more details.
-- *
-- * Written by Miles Bader <miles@gnu.org>
-- */
--
--#ifndef __V850_NB85E_CACHE_H__
--#define __V850_NB85E_CACHE_H__
--
--#include <asm/types.h>
--
--
--/* Cache control registers. */
--#define NB85E_CACHE_BHC_ADDR 0xFFFFF06A
--#define NB85E_CACHE_BHC (*(volatile u16 *)NB85E_CACHE_BHC_ADDR)
--#define NB85E_CACHE_ICC_ADDR 0xFFFFF070
--#define NB85E_CACHE_ICC (*(volatile u16 *)NB85E_CACHE_ICC_ADDR)
--#define NB85E_CACHE_ISI_ADDR 0xFFFFF072
--#define NB85E_CACHE_ISI (*(volatile u16 *)NB85E_CACHE_ISI_ADDR)
--#define NB85E_CACHE_DCC_ADDR 0xFFFFF078
--#define NB85E_CACHE_DCC (*(volatile u16 *)NB85E_CACHE_DCC_ADDR)
--
--/* Size of a cache line in bytes. */
--#define NB85E_CACHE_LINE_SIZE 16
--
--/* For <asm/cache.h> */
--#define L1_CACHE_BYTES NB85E_CACHE_LINE_SIZE
--
--
--#if defined(__KERNEL__) && !defined(__ASSEMBLY__)
--
--/* Set caching params via the BHC and DCC registers. */
--void nb85e_cache_enable (u16 bhc, u16 dcc);
--
--struct page;
--struct mm_struct;
--struct vm_area_struct;
--
--extern void nb85e_cache_flush_all (void);
--extern void nb85e_cache_flush_mm (struct mm_struct *mm);
--extern void nb85e_cache_flush_range (struct mm_struct *mm,
-- unsigned long start,
-- unsigned long end);
--extern void nb85e_cache_flush_page (struct vm_area_struct *vma,
-- unsigned long page_addr);
--extern void nb85e_cache_flush_dcache_page (struct page *page);
--extern void nb85e_cache_flush_icache (void);
--extern void nb85e_cache_flush_icache_range (unsigned long start,
-- unsigned long end);
--extern void nb85e_cache_flush_icache_page (struct vm_area_struct *vma,
-- struct page *page);
--extern void nb85e_cache_flush_icache_user_range (struct vm_area_struct *vma,
-- struct page *page,
-- unsigned long adr, int len);
--extern void nb85e_cache_flush_sigtramp (unsigned long addr);
--
--#define flush_cache_all nb85e_cache_flush_all
--#define flush_cache_mm nb85e_cache_flush_mm
--#define flush_cache_range nb85e_cache_flush_range
--#define flush_cache_page nb85e_cache_flush_page
--#define flush_dcache_page nb85e_cache_flush_dcache_page
--#define flush_icache nb85e_cache_flush_icache
--#define flush_icache_range nb85e_cache_flush_icache_range
--#define flush_icache_page nb85e_cache_flush_icache_page
--#define flush_icache_user_range nb85e_cache_flush_icache_user_range
--#define flush_cache_sigtramp nb85e_cache_flush_sigtramp
--
--#endif /* __KERNEL__ && !__ASSEMBLY__ */
--
--#endif /* __V850_NB85E_CACHE_H__ */
---- linux-2.6.0-test1/include/asm-v850/nb85e.h 2003-06-14 12:18:21.000000000 -0700
-+++ /dev/null 2002-08-30 16:31:37.000000000 -0700
-@@ -1,21 +0,0 @@
--/*
-- * include/asm-v850/nb85e.h -- NB85E cpu core
-- *
-- * Copyright (C) 2001,02 NEC Corporation
-- * Copyright (C) 2001,02 Miles Bader <miles@gnu.org>
-- *
-- * This file is subject to the terms and conditions of the GNU General
-- * Public License. See the file COPYING in the main directory of this
-- * archive for more details.
-- *
-- * Written by Miles Bader <miles@gnu.org>
-- */
--
--#ifndef __V850_NB85E_H__
--#define __V850_NB85E_H__
--
--#include <asm/nb85e_intc.h>
--
--#define CPU_ARCH "v850e"
--
--#endif /* __V850_NB85E_H__ */
---- linux-2.6.0-test1/include/asm-v850/nb85e_intc.h 2003-06-14 12:18:29.000000000 -0700
-+++ /dev/null 2002-08-30 16:31:37.000000000 -0700
-@@ -1,133 +0,0 @@
--/*
-- * include/asm-v850/nb85e_intc.h -- NB85E cpu core interrupt controller (INTC)
-- *
-- * Copyright (C) 2001,02,03 NEC Electronics Corporation
-- * Copyright (C) 2001,02,03 Miles Bader <miles@gnu.org>
-- *
-- * This file is subject to the terms and conditions of the GNU General
-- * Public License. See the file COPYING in the main directory of this
-- * archive for more details.
-- *
-- * Written by Miles Bader <miles@gnu.org>
-- */
--
--#ifndef __V850_NB85E_INTC_H__
--#define __V850_NB85E_INTC_H__
--
--
--/* There are 4 16-bit `Interrupt Mask Registers' located contiguously
-- starting from this base. Each interrupt uses a single bit to
-- indicated enabled/disabled status. */
--#define NB85E_INTC_IMR_BASE_ADDR 0xFFFFF100
--#define NB85E_INTC_IMR_ADDR(irq) (NB85E_INTC_IMR_BASE_ADDR + ((irq) >> 3))
--#define NB85E_INTC_IMR_BIT(irq) ((irq) & 0x7)
--
--/* Each maskable interrupt has a single-byte control register at this
-- address. */
--#define NB85E_INTC_IC_BASE_ADDR 0xFFFFF110
--#define NB85E_INTC_IC_ADDR(irq) (NB85E_INTC_IC_BASE_ADDR + ((irq) << 1))
--#define NB85E_INTC_IC(irq) (*(volatile u8 *)NB85E_INTC_IC_ADDR(irq))
--/* Encode priority PR for storing in an interrupt control register. */
--#define NB85E_INTC_IC_PR(pr) (pr)
--/* Interrupt disable bit in an interrupt control register. */
--#define NB85E_INTC_IC_MK_BIT 6
--#define NB85E_INTC_IC_MK (1 << NB85E_INTC_IC_MK_BIT)
--/* Interrupt pending flag in an interrupt control register. */
--#define NB85E_INTC_IC_IF_BIT 7
--#define NB85E_INTC_IC_IF (1 << NB85E_INTC_IC_IF_BIT)
--
--/* The ISPR (In-service priority register) contains one bit for each interrupt
-- priority level, which is set to one when that level is currently being
-- serviced (and thus blocking any interrupts of equal or lesser level). */
--#define NB85E_INTC_ISPR_ADDR 0xFFFFF1FA
--#define NB85E_INTC_ISPR (*(volatile u8 *)NB85E_INTC_ISPR_ADDR)
--
--
--#ifndef __ASSEMBLY__
--
--/* Enable interrupt handling for interrupt IRQ. */
--static inline void nb85e_intc_enable_irq (unsigned irq)
--{
-- __asm__ __volatile__ ("clr1 %0, [%1]"
-- :: "r" (NB85E_INTC_IMR_BIT (irq)),
-- "r" (NB85E_INTC_IMR_ADDR (irq))
-- : "memory");
--}
--
--/* Disable interrupt handling for interrupt IRQ. Note that any
-- interrupts received while disabled will be delivered once the
-- interrupt is enabled again, unless they are explicitly cleared using
-- `nb85e_intc_clear_pending_irq'. */
--static inline void nb85e_intc_disable_irq (unsigned irq)
--{
-- __asm__ __volatile__ ("set1 %0, [%1]"
-- :: "r" (NB85E_INTC_IMR_BIT (irq)),
-- "r" (NB85E_INTC_IMR_ADDR (irq))
-- : "memory");
--}
--
--/* Return true if interrupt handling for interrupt IRQ is enabled. */
--static inline int nb85e_intc_irq_enabled (unsigned irq)
--{
-- int rval;
-- __asm__ __volatile__ ("tst1 %1, [%2]; setf z, %0"
-- : "=r" (rval)
-- : "r" (NB85E_INTC_IMR_BIT (irq)),
-- "r" (NB85E_INTC_IMR_ADDR (irq)));
-- return rval;
--}
--
--/* Disable irqs from 0 until LIMIT. LIMIT must be a multiple of 8. */
--static inline void _nb85e_intc_disable_irqs (unsigned limit)
--{
-- unsigned long addr;
-- for (addr = NB85E_INTC_IMR_BASE_ADDR; limit >= 8; addr++, limit -= 8)
-- *(char *)addr = 0xFF;
--}
--
--/* Disable all irqs. This is purposely a macro, because NUM_MACH_IRQS
-- will be only be defined later. */
--#define nb85e_intc_disable_irqs() _nb85e_intc_disable_irqs (NUM_MACH_IRQS)
--
--/* Clear any pending interrupts for IRQ. */
--static inline void nb85e_intc_clear_pending_irq (unsigned irq)
--{
-- __asm__ __volatile__ ("clr1 %0, 0[%1]"
-- :: "i" (NB85E_INTC_IC_IF_BIT),
-- "r" (NB85E_INTC_IC_ADDR (irq))
-- : "memory");
--}
--
--/* Return true if interrupt IRQ is pending (but disabled). */
--static inline int nb85e_intc_irq_pending (unsigned irq)
--{
-- int rval;
-- __asm__ __volatile__ ("tst1 %1, 0[%2]; setf nz, %0"
-- : "=r" (rval)
-- : "i" (NB85E_INTC_IC_IF_BIT),
-- "r" (NB85E_INTC_IC_ADDR (irq)));
-- return rval;
--}
--
--
--struct nb85e_intc_irq_init {
-- const char *name; /* name of interrupt type */
--
-- /* Range of kernel irq numbers for this type:
-- BASE, BASE+INTERVAL, ..., BASE+INTERVAL*NUM */
-- unsigned base, num, interval;
--
-- unsigned priority; /* interrupt priority to assign */
--};
--struct hw_interrupt_type; /* fwd decl */
--
--/* Initialize HW_IRQ_TYPES for INTC-controlled irqs described in array
-- INITS (which is terminated by an entry with the name field == 0). */
--extern void nb85e_intc_init_irq_types (struct nb85e_intc_irq_init *inits,
-- struct hw_interrupt_type *hw_irq_types);
--
--
--#endif /* !__ASSEMBLY__ */
--
--
--#endif /* __V850_NB85E_INTC_H__ */
---- linux-2.6.0-test1/include/asm-v850/nb85e_timer_c.h 2003-06-14 12:17:58.000000000 -0700
-+++ /dev/null 2002-08-30 16:31:37.000000000 -0700
-@@ -1,48 +0,0 @@
--/*
-- * include/asm-v850/nb85e_timer_c.h -- `Timer C' component often used
-- * with the NB85E cpu core
-- *
-- * Copyright (C) 2001 NEC Corporation
-- * Copyright (C) 2001 Miles Bader <miles@gnu.org>
-- *
-- * This file is subject to the terms and conditions of the GNU General
-- * Public License. See the file COPYING in the main directory of this
-- * archive for more details.
-- *
-- * Written by Miles Bader <miles@gnu.org>
-- */
--
--/* NOTE: this include file currently contains only enough to allow us to
-- use timer C as an interrupt pass-through. */
--
--#ifndef __V850_NB85E_TIMER_C_H__
--#define __V850_NB85E_TIMER_C_H__
--
--#include <asm/types.h>
--#include <asm/machdep.h> /* Pick up chip-specific defs. */
--
--
--/* Timer C (16-bit interval timers). */
--
--/* Control register 0 for timer C. */
--#define NB85E_TIMER_C_TMCC0_ADDR(n) (NB85E_TIMER_C_BASE_ADDR + 0x6 + 0x10 *(n))
--#define NB85E_TIMER_C_TMCC0(n) (*(volatile u8 *)NB85E_TIMER_C_TMCC0_ADDR(n))
--#define NB85E_TIMER_C_TMCC0_CAE 0x01 /* clock action enable */
--#define NB85E_TIMER_C_TMCC0_CE 0x02 /* count enable */
--/* ... */
--
--/* Control register 1 for timer C. */
--#define NB85E_TIMER_C_TMCC1_ADDR(n) (NB85E_TIMER_C_BASE_ADDR + 0x8 + 0x10 *(n))
--#define NB85E_TIMER_C_TMCC1(n) (*(volatile u8 *)NB85E_TIMER_C_TMCC1_ADDR(n))
--#define NB85E_TIMER_C_TMCC1_CMS0 0x01 /* capture/compare mode select (ccc0) */
--#define NB85E_TIMER_C_TMCC1_CMS1 0x02 /* capture/compare mode select (ccc1) */
--/* ... */
--
--/* Interrupt edge-sensitivity control for timer C. */
--#define NB85E_TIMER_C_SESC_ADDR(n) (NB85E_TIMER_C_BASE_ADDR + 0x9 + 0x10 *(n))
--#define NB85E_TIMER_C_SESC(n) (*(volatile u8 *)NB85E_TIMER_C_SESC_ADDR(n))
--
--/* ...etc... */
--
--
--#endif /* __V850_NB85E_TIMER_C_H__ */
---- linux-2.6.0-test1/include/asm-v850/nb85e_timer_d.h 2003-06-14 12:18:06.000000000 -0700
-+++ /dev/null 2002-08-30 16:31:37.000000000 -0700
-@@ -1,62 +0,0 @@
--/*
-- * include/asm-v850/nb85e_timer_d.h -- `Timer D' component often used
-- * with the NB85E cpu core
-- *
-- * Copyright (C) 2001,02,03 NEC Electronics Corporation
-- * Copyright (C) 2001,02,03 Miles Bader <miles@gnu.org>
-- *
-- * This file is subject to the terms and conditions of the GNU General
-- * Public License. See the file COPYING in the main directory of this
-- * archive for more details.
-- *
-- * Written by Miles Bader <miles@gnu.org>
-- */
--
--#ifndef __V850_NB85E_TIMER_D_H__
--#define __V850_NB85E_TIMER_D_H__
--
--#include <asm/types.h>
--#include <asm/machdep.h> /* Pick up chip-specific defs. */
--
--
--/* Timer D (16-bit interval timers). */
--
--/* Count registers for timer D. */
--#define NB85E_TIMER_D_TMD_ADDR(n) (NB85E_TIMER_D_TMD_BASE_ADDR + 0x10 * (n))
--#define NB85E_TIMER_D_TMD(n) (*(volatile u16 *)NB85E_TIMER_D_TMD_ADDR(n))
--
--/* Count compare registers for timer D. */
--#define NB85E_TIMER_D_CMD_ADDR(n) (NB85E_TIMER_D_CMD_BASE_ADDR + 0x10 * (n))
--#define NB85E_TIMER_D_CMD(n) (*(volatile u16 *)NB85E_TIMER_D_CMD_ADDR(n))
--
--/* Control registers for timer D. */
--#define NB85E_TIMER_D_TMCD_ADDR(n) (NB85E_TIMER_D_TMCD_BASE_ADDR + 0x10 * (n))
--#define NB85E_TIMER_D_TMCD(n) (*(volatile u8 *)NB85E_TIMER_D_TMCD_ADDR(n))
--/* Control bits for timer D. */
--#define NB85E_TIMER_D_TMCD_CE 0x2 /* count enable */
--#define NB85E_TIMER_D_TMCD_CAE 0x1 /* clock action enable */
--/* Clock divider setting (log2). */
--#define NB85E_TIMER_D_TMCD_CS(divlog2) (((divlog2) - NB85E_TIMER_D_TMCD_CS_MIN) << 4)
--/* Minimum clock divider setting (log2). */
--#ifndef NB85E_TIMER_D_TMCD_CS_MIN /* Can be overridden by mach-specific hdrs */
--#define NB85E_TIMER_D_TMCD_CS_MIN 2 /* Default is correct for the v850e/ma1 */
--#endif
--/* Maximum clock divider setting (log2). */
--#define NB85E_TIMER_D_TMCD_CS_MAX (NB85E_TIMER_D_TMCD_CS_MIN + 7)
--
--/* Return the clock-divider (log2) of timer D unit N. */
--#define NB85E_TIMER_D_DIVLOG2(n) \
-- (((NB85E_TIMER_D_TMCD(n) >> 4) & 0x7) + NB85E_TIMER_D_TMCD_CS_MIN)
--
--
--#ifndef __ASSEMBLY__
--
--/* Start interval timer TIMER (0-3). The timer will issue the
-- corresponding INTCMD interrupt RATE times per second. This function
-- does not enable the interrupt. */
--extern void nb85e_timer_d_configure (unsigned timer, unsigned rate);
--
--#endif /* !__ASSEMBLY__ */
--
--
--#endif /* __V850_NB85E_TIMER_D_H__ */
---- linux-2.6.0-test1/include/asm-v850/nb85e_uart.h 2003-06-14 12:18:50.000000000 -0700
-+++ /dev/null 2002-08-30 16:31:37.000000000 -0700
-@@ -1,144 +0,0 @@
--/*
-- * include/asm-v850/nb85e_uart.h -- On-chip UART often used with the
-- * NB85E cpu core
-- *
-- * Copyright (C) 2001,02 NEC Corporation
-- * Copyright (C) 2001,02 Miles Bader <miles@gnu.org>
-- *
-- * This file is subject to the terms and conditions of the GNU General
-- * Public License. See the file COPYING in the main directory of this
-- * archive for more details.
-- *
-- * Written by Miles Bader <miles@gnu.org>
-- */
--
--/* There's not actually a single UART implementation used by nb85e
-- derivatives, but rather a series of implementations that are all
-- `close' to one another. This file attempts to capture some
-- commonality between them. */
--
--#ifndef __V850_NB85E_UART_H__
--#define __V850_NB85E_UART_H__
--
--#include <asm/types.h>
--#include <asm/machdep.h> /* Pick up chip-specific defs. */
--
--
--/* The base address of the UART control registers for channel N.
-- The default is the address used on the V850E/MA1. */
--#ifndef NB85E_UART_BASE_ADDR
--#define NB85E_UART_BASE_ADDR(n) (0xFFFFFA00 + 0x10 * (n))
--#endif
--
--/* Addresses of specific UART control registers for channel N.
-- The defaults are the addresses used on the V850E/MA1; if a platform
-- wants to redefine any of these, it must redefine them all. */
--#ifndef NB85E_UART_ASIM_ADDR
--#define NB85E_UART_ASIM_ADDR(n) (NB85E_UART_BASE_ADDR(n) + 0x0)
--#define NB85E_UART_RXB_ADDR(n) (NB85E_UART_BASE_ADDR(n) + 0x2)
--#define NB85E_UART_ASIS_ADDR(n) (NB85E_UART_BASE_ADDR(n) + 0x3)
--#define NB85E_UART_TXB_ADDR(n) (NB85E_UART_BASE_ADDR(n) + 0x4)
--#define NB85E_UART_ASIF_ADDR(n) (NB85E_UART_BASE_ADDR(n) + 0x5)
--#define NB85E_UART_CKSR_ADDR(n) (NB85E_UART_BASE_ADDR(n) + 0x6)
--#define NB85E_UART_BRGC_ADDR(n) (NB85E_UART_BASE_ADDR(n) + 0x7)
--#endif
--
--#ifndef NB85E_UART_CKSR_MAX_FREQ
--#define NB85E_UART_CKSR_MAX_FREQ (25*1000*1000)
--#endif
--
--/* UART config registers. */
--#define NB85E_UART_ASIM(n) (*(volatile u8 *)NB85E_UART_ASIM_ADDR(n))
--/* Control bits for config registers. */
--#define NB85E_UART_ASIM_CAE 0x80 /* clock enable */
--#define NB85E_UART_ASIM_TXE 0x40 /* transmit enable */
--#define NB85E_UART_ASIM_RXE 0x20 /* receive enable */
--#define NB85E_UART_ASIM_PS_MASK 0x18 /* mask covering parity-select bits */
--#define NB85E_UART_ASIM_PS_NONE 0x00 /* no parity */
--#define NB85E_UART_ASIM_PS_ZERO 0x08 /* zero parity */
--#define NB85E_UART_ASIM_PS_ODD 0x10 /* odd parity */
--#define NB85E_UART_ASIM_PS_EVEN 0x18 /* even parity */
--#define NB85E_UART_ASIM_CL_8 0x04 /* char len is 8 bits (otherwise, 7) */
--#define NB85E_UART_ASIM_SL_2 0x02 /* 2 stop bits (otherwise, 1) */
--#define NB85E_UART_ASIM_ISRM 0x01 /* generate INTSR interrupt on errors
-- (otherwise, generate INTSER) */
--
--/* UART serial interface status registers. */
--#define NB85E_UART_ASIS(n) (*(volatile u8 *)NB85E_UART_ASIS_ADDR(n))
--/* Control bits for status registers. */
--#define NB85E_UART_ASIS_PE 0x04 /* parity error */
--#define NB85E_UART_ASIS_FE 0x02 /* framing error */
--#define NB85E_UART_ASIS_OVE 0x01 /* overrun error */
--
--/* UART serial interface transmission status registers. */
--#define NB85E_UART_ASIF(n) (*(volatile u8 *)NB85E_UART_ASIF_ADDR(n))
--#define NB85E_UART_ASIF_TXBF 0x02 /* transmit buffer flag (data in TXB) */
--#define NB85E_UART_ASIF_TXSF 0x01 /* transmit shift flag (sending data) */
--
--/* UART receive buffer register. */
--#define NB85E_UART_RXB(n) (*(volatile u8 *)NB85E_UART_RXB_ADDR(n))
--
--/* UART transmit buffer register. */
--#define NB85E_UART_TXB(n) (*(volatile u8 *)NB85E_UART_TXB_ADDR(n))
--
--/* UART baud-rate generator control registers. */
--#define NB85E_UART_CKSR(n) (*(volatile u8 *)NB85E_UART_CKSR_ADDR(n))
--#define NB85E_UART_CKSR_MAX 11
--#define NB85E_UART_BRGC(n) (*(volatile u8 *)NB85E_UART_BRGC_ADDR(n))
--
--
--/* This UART doesn't implement RTS/CTS by default, but some platforms
-- implement them externally, so check to see if <asm/machdep.h> defined
-- anything. */
--#ifdef NB85E_UART_CTS
--#define nb85e_uart_cts(n) NB85E_UART_CTS(n)
--#else
--#define nb85e_uart_cts(n) (1)
--#endif
--
--/* Do the same for RTS. */
--#ifdef NB85E_UART_SET_RTS
--#define nb85e_uart_set_rts(n,v) NB85E_UART_SET_RTS(n,v)
--#else
--#define nb85e_uart_set_rts(n,v) ((void)0)
--#endif
--
--/* Return true if all characters awaiting transmission on uart channel N
-- have been transmitted. */
--#define nb85e_uart_xmit_done(n) \
-- (! (NB85E_UART_ASIF(n) & NB85E_UART_ASIF_TXBF))
--/* Wait for this to be true. */
--#define nb85e_uart_wait_for_xmit_done(n) \
-- do { } while (! nb85e_uart_xmit_done (n))
--
--/* Return true if uart channel N is ready to transmit a character. */
--#define nb85e_uart_xmit_ok(n) \
-- (nb85e_uart_xmit_done(n) && nb85e_uart_cts(n))
--/* Wait for this to be true. */
--#define nb85e_uart_wait_for_xmit_ok(n) \
-- do { } while (! nb85e_uart_xmit_ok (n))
--
--/* Write character CH to uart channel N. */
--#define nb85e_uart_putc(n, ch) (NB85E_UART_TXB(n) = (ch))
--
--
--#define NB85E_UART_MINOR_BASE 64
--
--
--#ifndef __ASSEMBLY__
--
--/* Setup a console using channel 0 of the builtin uart. */
--extern void nb85e_uart_cons_init (unsigned chan);
--
--/* Configure and turn on uart channel CHAN, using the termios `control
-- modes' bits in CFLAGS, and a baud-rate of BAUD. */
--void nb85e_uart_configure (unsigned chan, unsigned cflags, unsigned baud);
--
--/* If the macro NB85E_UART_PRE_CONFIGURE is defined (presumably by a
-- <asm/machdep.h>), it is called from nb85e_uart_pre_configure before
-- anything else is done, with interrupts disabled. */
--
--#endif /* !__ASSEMBLY__ */
--
--
--#endif /* __V850_NB85E_UART_H__ */
---- linux-2.6.0-test1/include/asm-v850/nb85e_utils.h 2003-06-14 12:18:20.000000000 -0700
-+++ /dev/null 2002-08-30 16:31:37.000000000 -0700
-@@ -1,35 +0,0 @@
--/*
-- * include/asm-v850/nb85e_utils.h -- Utility functions associated with
-- * the NB85E cpu core
-- *
-- * Copyright (C) 2001 NEC Corporation
-- * Copyright (C) 2001 Miles Bader <miles@gnu.org>
-- *
-- * This file is subject to the terms and conditions of the GNU General
-- * Public License. See the file COPYING in the main directory of this
-- * archive for more details.
-- *
-- * Written by Miles Bader <miles@gnu.org>
-- */
--
--#ifndef __V850_NB85E_UTILS_H__
--#define __V850_NB85E_UTILS_H__
--
--/* Calculate counter clock-divider and count values to attain the
-- desired frequency RATE from the base frequency BASE_FREQ. The
-- counter is expected to have a clock-divider, which can divide the
-- system cpu clock by a power of two value from MIN_DIVLOG2 to
-- MAX_DIV_LOG2, and a word-size of COUNTER_SIZE bits (the counter
-- counts up and resets whenever it's equal to the compare register,
-- generating an interrupt or whatever when it does so). The returned
-- values are: *DIVLOG2 -- log2 of the desired clock divider and *COUNT
-- -- the counter compare value to use. Returns true if it was possible
-- to find a reasonable value, otherwise false (and the other return
-- values will be set to be as good as possible). */
--extern int calc_counter_params (unsigned long base_freq,
-- unsigned long rate,
-- unsigned min_divlog2, unsigned max_divlog2,
-- unsigned counter_size,
-- unsigned *divlog2, unsigned *count);
--
--#endif /* __V850_NB85E_UTILS_H__ */
---- linux-2.6.0-test1/include/asm-v850/pgtable.h 2003-06-14 12:18:25.000000000 -0700
-+++ 25/include/asm-v850/pgtable.h 2003-07-19 17:07:16.000000000 -0700
-@@ -13,6 +13,11 @@ typedef pte_t *pte_addr_t;
- #define pgd_clear(pgdp) ((void)0)
-
- #define pmd_offset(a, b) ((void *)0)
-+#define pmd_offset_kernel(pgd, addr) pmd_offset(pgd, addr)
-+#define pmd_offset_map(pgd, addr) pmd_offset(pgd, addr)
-+#define pmd_offset_map_nested(pgd, addr) pmd_offset(pgd, addr)
-+#define pmd_unmap(pmd) do { } while (0)
-+#define pmd_unmap_nested(pmd) do { } while (0)
-
- #define kern_addr_valid(addr) (1)
-
---- linux-2.6.0-test1/include/asm-v850/posix_types.h 2003-06-14 12:18:52.000000000 -0700
-+++ 25/include/asm-v850/posix_types.h 2003-07-19 17:06:39.000000000 -0700
-@@ -14,7 +14,9 @@
- #ifndef __V850_POSIX_TYPES_H__
- #define __V850_POSIX_TYPES_H__
-
--typedef unsigned int __kernel_dev_t;
-+#ifdef __GNUC__
-+typedef unsigned long long __kernel_dev_t;
-+#endif
- typedef unsigned long __kernel_ino_t;
- typedef unsigned long long __kernel_ino64_t;
- typedef unsigned int __kernel_mode_t;
---- linux-2.6.0-test1/include/asm-v850/processor.h 2003-06-14 12:18:04.000000000 -0700
-+++ 25/include/asm-v850/processor.h 2003-07-19 17:03:51.000000000 -0700
-@@ -1,7 +1,7 @@
- /*
- * include/asm-v850/processor.h
- *
-- * Copyright (C) 2001,02,03 NEC Corporation
-+ * Copyright (C) 2001,02,03 NEC Electronics Corporation
- * Copyright (C) 2001,02,03 Miles Bader <miles@gnu.org>
- *
- * This file is subject to the terms and conditions of the GNU General
---- linux-2.6.0-test1/include/asm-v850/ptrace.h 2003-06-14 12:18:51.000000000 -0700
-+++ 25/include/asm-v850/ptrace.h 2003-07-19 17:03:51.000000000 -0700
-@@ -1,7 +1,7 @@
- /*
- * include/asm-v850/ptrace.h -- Access to CPU registers
- *
-- * Copyright (C) 2001,02,03 NEC Corporation
-+ * Copyright (C) 2001,02,03 NEC Electronics Corporation
- * Copyright (C) 2001,02,03 Miles Bader <miles@gnu.org>
- *
- * This file is subject to the terms and conditions of the GNU General
---- linux-2.6.0-test1/include/asm-v850/rte_cb.h 2003-06-14 12:18:08.000000000 -0700
-+++ 25/include/asm-v850/rte_cb.h 2003-07-19 17:03:51.000000000 -0700
-@@ -1,7 +1,7 @@
- /*
- * include/asm-v850/rte_cb.h -- Midas labs RTE-CB series of evaluation boards
- *
-- * Copyright (C) 2001,02,03 NEC Corporation
-+ * Copyright (C) 2001,02,03 NEC Electronics Corporation
- * Copyright (C) 2001,02,03 Miles Bader <miles@gnu.org>
- *
- * This file is subject to the terms and conditions of the GNU General
-@@ -20,42 +20,54 @@
- #define MB_A_SRAM_SIZE 0x00200000 /* 2MB */
-
-
-+#ifdef CONFIG_RTE_GBUS_INT
- /* GBUS interrupt support. */
--#define GBUS_INT_BASE_IRQ NUM_CPU_IRQS
--#define GBUS_INT_BASE_ADDR (GCS2_ADDR + 0x00006000)
--#include <asm/gbus_int.h>
-
--/* We define NUM_MACH_IRQS to include extra interrupts from the GBUS. */
--#define NUM_MACH_IRQS (NUM_CPU_IRQS + IRQ_GBUS_INT_NUM)
-+# include <asm/gbus_int.h>
-+
-+# define GBUS_INT_BASE_IRQ NUM_RTE_CB_IRQS
-+# define GBUS_INT_BASE_ADDR (GCS2_ADDR + 0x00006000)
-
- /* Some specific interrupts. */
--#define IRQ_MB_A_LAN IRQ_GBUS_INT(10)
--#define IRQ_MB_A_PCI1(n) (IRQ_GBUS_INT(16) + (n))
--#define IRQ_MB_A_PCI1_NUM 4
--#define IRQ_MB_A_PCI2(n) (IRQ_GBUS_INT(20) + (n))
--#define IRQ_MB_A_PCI2_NUM 4
--#define IRQ_MB_A_EXT(n) (IRQ_GBUS_INT(24) + (n))
--#define IRQ_MB_A_EXT_NUM 4
--#define IRQ_MB_A_USB_OC(n) (IRQ_GBUS_INT(28) + (n))
--#define IRQ_MB_A_USB_OC_NUM 2
--#define IRQ_MB_A_PCMCIA_OC IRQ_GBUS_INT(30)
-+# define IRQ_MB_A_LAN IRQ_GBUS_INT(10)
-+# define IRQ_MB_A_PCI1(n) (IRQ_GBUS_INT(16) + (n))
-+# define IRQ_MB_A_PCI1_NUM 4
-+# define IRQ_MB_A_PCI2(n) (IRQ_GBUS_INT(20) + (n))
-+# define IRQ_MB_A_PCI2_NUM 4
-+# define IRQ_MB_A_EXT(n) (IRQ_GBUS_INT(24) + (n))
-+# define IRQ_MB_A_EXT_NUM 4
-+# define IRQ_MB_A_USB_OC(n) (IRQ_GBUS_INT(28) + (n))
-+# define IRQ_MB_A_USB_OC_NUM 2
-+# define IRQ_MB_A_PCMCIA_OC IRQ_GBUS_INT(30)
-+
-+/* We define NUM_MACH_IRQS to include extra interrupts from the GBUS. */
-+# define NUM_MACH_IRQS (NUM_RTE_CB_IRQS + IRQ_GBUS_INT_NUM)
-
-+#else /* !CONFIG_RTE_GBUS_INT */
-
-+# define NUM_MACH_IRQS NUM_RTE_CB_IRQS
-+
-+#endif /* CONFIG_RTE_GBUS_INT */
-+
-+
-+#ifdef CONFIG_RTE_MB_A_PCI
- /* Mother-A PCI bus support. */
--#include <asm/rte_mb_a_pci.h>
-+
-+# include <asm/rte_mb_a_pci.h>
-
- /* These are the base addresses used for allocating device address
- space. 512K of the motherboard SRAM is in the same space, so we have
- to be careful not to let it be allocated. */
--#define PCIBIOS_MIN_MEM (MB_A_PCI_MEM_ADDR + 0x80000)
--#define PCIBIOS_MIN_IO MB_A_PCI_IO_ADDR
-+# define PCIBIOS_MIN_MEM (MB_A_PCI_MEM_ADDR + 0x80000)
-+# define PCIBIOS_MIN_IO MB_A_PCI_IO_ADDR
-
- /* As we don't really support PCI DMA to cpu memory, and use bounce-buffers
- instead, perversely enough, this becomes always true! */
--#define pci_dma_supported(dev, mask) 1
--#define pci_dac_dma_supported(dev, mask) 0
--#define pcibios_assign_all_busses() 1
-+# define pci_dma_supported(dev, mask) 1
-+# define pci_dac_dma_supported(dev, mask) 0
-+# define pcibios_assign_all_busses() 1
-
-+#endif /* CONFIG_RTE_MB_A_PCI */
-
-
- /* For <asm/param.h> */
---- linux-2.6.0-test1/include/asm-v850/rte_ma1_cb.h 2003-06-14 12:17:59.000000000 -0700
-+++ 25/include/asm-v850/rte_ma1_cb.h 2003-07-19 17:03:51.000000000 -0700
-@@ -17,25 +17,6 @@
- #include <asm/rte_cb.h> /* Common defs for Midas RTE-CB boards. */
-
-
--/* CPU addresses of GBUS memory spaces. */
--#define GCS0_ADDR 0x05000000 /* GCS0 - Common SRAM (2MB) */
--#define GCS0_SIZE 0x00200000 /* 2MB */
--#define GCS1_ADDR 0x06000000 /* GCS1 - Flash ROM (8MB) */
--#define GCS1_SIZE 0x00800000 /* 8MB */
--#define GCS2_ADDR 0x07900000 /* GCS2 - I/O registers */
--#define GCS2_SIZE 0x00400000 /* 4MB */
--#define GCS5_ADDR 0x04000000 /* GCS5 - PCI bus space */
--#define GCS5_SIZE 0x01000000 /* 16MB */
--#define GCS6_ADDR 0x07980000 /* GCS6 - PCI control registers */
--#define GCS6_SIZE 0x00000200 /* 512B */
--
--
--/* The GBUS GINT0 - GINT4 interrupts are connected to the INTP000 - INTP011
-- pins on the CPU. These are shared among the GBUS interrupts. */
--#define IRQ_GINT(n) IRQ_INTP(n)
--#define IRQ_GINT_NUM 4
--
--
- #define PLATFORM "rte-v850e/ma1-cb"
- #define PLATFORM_LONG "Midas lab RTE-V850E/MA1-CB"
-
-@@ -53,10 +34,32 @@
- #define SDRAM_SIZE 0x02000000 /* 32MB */
-
-
-+/* CPU addresses of GBUS memory spaces. */
-+#define GCS0_ADDR 0x05000000 /* GCS0 - Common SRAM (2MB) */
-+#define GCS0_SIZE 0x00200000 /* 2MB */
-+#define GCS1_ADDR 0x06000000 /* GCS1 - Flash ROM (8MB) */
-+#define GCS1_SIZE 0x00800000 /* 8MB */
-+#define GCS2_ADDR 0x07900000 /* GCS2 - I/O registers */
-+#define GCS2_SIZE 0x00400000 /* 4MB */
-+#define GCS5_ADDR 0x04000000 /* GCS5 - PCI bus space */
-+#define GCS5_SIZE 0x01000000 /* 16MB */
-+#define GCS6_ADDR 0x07980000 /* GCS6 - PCI control registers */
-+#define GCS6_SIZE 0x00000200 /* 512B */
-+
-+
- /* For <asm/page.h> */
- #define PAGE_OFFSET SRAM_ADDR
-
-
-+/* The GBUS GINT0 - GINT3 interrupts are connected to the INTP000 - INTP011
-+ pins on the CPU. These are shared among the GBUS interrupts. */
-+#define IRQ_GINT(n) IRQ_INTP(n)
-+#define IRQ_GINT_NUM 4
-+
-+/* Used by <asm/rte_cb.h> to derive NUM_MACH_IRQS. */
-+#define NUM_RTE_CB_IRQS NUM_CPU_IRQS
-+
-+
- #ifdef CONFIG_ROM_KERNEL
- /* Kernel is in ROM, starting at address 0. */
-
-@@ -98,8 +101,8 @@
-
- /* Override the basic MA uart pre-initialization so that we can
- initialize extra stuff. */
--#undef NB85E_UART_PRE_CONFIGURE /* should be defined by <asm/ma.h> */
--#define NB85E_UART_PRE_CONFIGURE rte_ma1_cb_uart_pre_configure
-+#undef V850E_UART_PRE_CONFIGURE /* should be defined by <asm/ma.h> */
-+#define V850E_UART_PRE_CONFIGURE rte_ma1_cb_uart_pre_configure
- #ifndef __ASSEMBLY__
- extern void rte_ma1_cb_uart_pre_configure (unsigned chan,
- unsigned cflags, unsigned baud);
-@@ -108,9 +111,9 @@ extern void rte_ma1_cb_uart_pre_configur
- /* This board supports RTS/CTS for the on-chip UART, but only for channel 0. */
-
- /* CTS for UART channel 0 is pin P43 (bit 3 of port 4). */
--#define NB85E_UART_CTS(chan) ((chan) == 0 ? !(MA_PORT4_IO & 0x8) : 1)
-+#define V850E_UART_CTS(chan) ((chan) == 0 ? !(MA_PORT4_IO & 0x8) : 1)
- /* RTS for UART channel 0 is pin P42 (bit 2 of port 4). */
--#define NB85E_UART_SET_RTS(chan, val) \
-+#define V850E_UART_SET_RTS(chan, val) \
- do { \
- if (chan == 0) { \
- unsigned old = MA_PORT4_IO; \
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-v850/rte_me2_cb.h 2003-07-19 17:03:51.000000000 -0700
-@@ -0,0 +1,202 @@
-+/*
-+ * include/asm-v850/rte_me2_cb.h -- Midas labs RTE-V850E/ME2-CB board
-+ *
-+ * Copyright (C) 2001,02,03 NEC Corporation
-+ * Copyright (C) 2001,02,03 Miles Bader <miles@gnu.org>
-+ *
-+ * This file is subject to the terms and conditions of the GNU General
-+ * Public License. See the file COPYING in the main directory of this
-+ * archive for more details.
-+ *
-+ * Written by Miles Bader <miles@gnu.org>
-+ */
-+
-+#ifndef __V850_RTE_ME2_CB_H__
-+#define __V850_RTE_ME2_CB_H__
-+
-+#include <asm/rte_cb.h> /* Common defs for Midas RTE-CB boards. */
-+
-+
-+#define PLATFORM "rte-v850e/me2-cb"
-+#define PLATFORM_LONG "Midas lab RTE-V850E/ME2-CB"
-+
-+#define CPU_CLOCK_FREQ 150000000 /* 150MHz */
-+#define FIXED_BOGOMIPS 50
-+
-+/* 32MB of onbard SDRAM. */
-+#define SDRAM_ADDR 0x00800000
-+#define SDRAM_SIZE 0x02000000 /* 32MB */
-+
-+
-+/* CPU addresses of GBUS memory spaces. */
-+#define GCS0_ADDR 0x04000000 /* GCS0 - Common SRAM (2MB) */
-+#define GCS0_SIZE 0x00800000 /* 8MB */
-+#define GCS1_ADDR 0x04800000 /* GCS1 - Flash ROM (8MB) */
-+#define GCS1_SIZE 0x00800000 /* 8MB */
-+#define GCS2_ADDR 0x07000000 /* GCS2 - I/O registers */
-+#define GCS2_SIZE 0x00800000 /* 8MB */
-+#define GCS5_ADDR 0x08000000 /* GCS5 - PCI bus space */
-+#define GCS5_SIZE 0x02000000 /* 32MB */
-+#define GCS6_ADDR 0x07800000 /* GCS6 - PCI control registers */
-+#define GCS6_SIZE 0x00800000 /* 8MB */
-+
-+
-+/* For <asm/page.h> */
-+#define PAGE_OFFSET SDRAM_ADDR
-+
-+
-+#ifdef CONFIG_ROM_KERNEL
-+/* Kernel is in ROM, starting at address 0. */
-+
-+#define INTV_BASE 0
-+#define ROOT_FS_IMAGE_RW 0
-+
-+#else /* !CONFIG_ROM_KERNEL */
-+/* Using RAM-kernel. Assume some sort of boot-loader got us loaded at
-+ address 0. */
-+
-+#define INTV_BASE 0
-+#define ROOT_FS_IMAGE_RW 1
-+
-+#endif /* CONFIG_ROM_KERNEL */
-+
-+
-+/* Some misc. on-board devices. */
-+
-+/* Seven-segment LED display (four digits). */
-+#define LED_ADDR(n) (0x0FE02000 + (n))
-+#define LED(n) (*(volatile unsigned char *)LED_ADDR(n))
-+#define LED_NUM_DIGITS 4
-+
-+
-+/* On-board PIC. */
-+
-+#define CB_PIC_BASE_ADDR 0x0FE04000
-+
-+#define CB_PIC_INT0M_ADDR (CB_PIC_BASE_ADDR + 0x00)
-+#define CB_PIC_INT0M (*(volatile u16 *)CB_PIC_INT0M_ADDR)
-+#define CB_PIC_INT1M_ADDR (CB_PIC_BASE_ADDR + 0x10)
-+#define CB_PIC_INT1M (*(volatile u16 *)CB_PIC_INT1M_ADDR)
-+#define CB_PIC_INTR_ADDR (CB_PIC_BASE_ADDR + 0x20)
-+#define CB_PIC_INTR (*(volatile u16 *)CB_PIC_INTR_ADDR)
-+#define CB_PIC_INTEN_ADDR (CB_PIC_BASE_ADDR + 0x30)
-+#define CB_PIC_INTEN (*(volatile u16 *)CB_PIC_INTEN_ADDR)
-+
-+#define CB_PIC_INT0EN 0x0001
-+#define CB_PIC_INT1EN 0x0002
-+#define CB_PIC_INT0SEL 0x0080
-+
-+/* The PIC interrupts themselves. */
-+#define CB_PIC_BASE_IRQ NUM_CPU_IRQS
-+#define IRQ_CB_PIC_NUM 10
-+
-+/* Some specific CB_PIC interrupts. */
-+#define IRQ_CB_EXTTM0 (CB_PIC_BASE_IRQ + 0)
-+#define IRQ_CB_EXTSIO (CB_PIC_BASE_IRQ + 1)
-+#define IRQ_CB_TOVER (CB_PIC_BASE_IRQ + 2)
-+#define IRQ_CB_GINT0 (CB_PIC_BASE_IRQ + 3)
-+#define IRQ_CB_USB (CB_PIC_BASE_IRQ + 4)
-+#define IRQ_CB_LANC (CB_PIC_BASE_IRQ + 5)
-+#define IRQ_CB_USB_VBUS_ON (CB_PIC_BASE_IRQ + 6)
-+#define IRQ_CB_USB_VBUS_OFF (CB_PIC_BASE_IRQ + 7)
-+#define IRQ_CB_EXTTM1 (CB_PIC_BASE_IRQ + 8)
-+#define IRQ_CB_EXTTM2 (CB_PIC_BASE_IRQ + 9)
-+
-+/* The GBUS GINT1 - GINT3 (note, not GINT0!) interrupts are connected to
-+ the INTP65 - INTP67 pins on the CPU. These are shared among the GBUS
-+ interrupts. */
-+#define IRQ_GINT(n) IRQ_INTP((n) + 9) /* 0 is unused! */
-+#define IRQ_GINT_NUM 4 /* 0 is unused! */
-+
-+/* The shared interrupt line from the PIC is connected to CPU pin INTP23. */
-+#define IRQ_CB_PIC IRQ_INTP(4) /* P23 */
-+
-+/* Used by <asm/rte_cb.h> to derive NUM_MACH_IRQS. */
-+#define NUM_RTE_CB_IRQS (NUM_CPU_IRQS + IRQ_CB_PIC_NUM)
-+
-+
-+#ifndef __ASSEMBLY__
-+struct cb_pic_irq_init {
-+ const char *name; /* name of interrupt type */
-+
-+ /* Range of kernel irq numbers for this type:
-+ BASE, BASE+INTERVAL, ..., BASE+INTERVAL*NUM */
-+ unsigned base, num, interval;
-+
-+ unsigned priority; /* interrupt priority to assign */
-+};
-+struct hw_interrupt_type; /* fwd decl */
-+
-+/* Enable interrupt handling for interrupt IRQ. */
-+extern void cb_pic_enable_irq (unsigned irq);
-+/* Disable interrupt handling for interrupt IRQ. Note that any interrupts
-+ received while disabled will be delivered once the interrupt is enabled
-+ again, unless they are explicitly cleared using `cb_pic_clear_pending_irq'. */
-+extern void cb_pic_disable_irq (unsigned irq);
-+/* Initialize HW_IRQ_TYPES for PIC irqs described in array INITS (which is
-+ terminated by an entry with the name field == 0). */
-+extern void cb_pic_init_irq_types (struct cb_pic_irq_init *inits,
-+ struct hw_interrupt_type *hw_irq_types);
-+/* Initialize PIC interrupts. */
-+extern void cb_pic_init_irqs (void);
-+#endif /* __ASSEMBLY__ */
-+
-+
-+/* TL16C550C on board UART see also asm/serial.h */
-+#define CB_UART_BASE 0x0FE08000
-+#define CB_UART_REG_GAP 0x10
-+#define CB_UART_CLOCK 0x16000000
-+
-+/* CompactFlash setting see also asm/ide.h, asm/hdreg.h. */
-+#define CB_CF_BASE 0x0FE0C000
-+#define CB_CF_CCR_ADDR (CB_CF_BASE+0x200)
-+#define CB_CF_CCR (*(volatile u8 *)CB_CF_CCR_ADDR)
-+#define CB_CF_REG0_ADDR (CB_CF_BASE+0x1000)
-+#define CB_CF_REG0 (*(volatile u16 *)CB_CF_REG0_ADDR)
-+#define CB_CF_STS0_ADDR (CB_CF_BASE+0x1004)
-+#define CB_CF_STS0 (*(volatile u16 *)CB_CF_STS0_ADDR)
-+#define CB_PCATA_BASE (CB_CF_BASE+0x800)
-+#define CB_IDE_BASE (CB_CF_BASE+0x9F0)
-+#define CB_IDE_CTRL (CB_CF_BASE+0xBF6)
-+#define CB_IDE_REG_OFFS 0x1
-+
-+
-+/* SMSC LAN91C111 setting */
-+#if defined(CONFIG_SMC91111)
-+#define CB_LANC_BASE 0x0FE10300
-+#define CONFIG_SMC16BITONLY
-+#define ETH0_ADDR CB_LANC_BASE
-+#define ETH0_IRQ IRQ_CB_LANC
-+#endif /* CONFIG_SMC16BITONLY */
-+
-+
-+#undef V850E_UART_PRE_CONFIGURE
-+#define V850E_UART_PRE_CONFIGURE rte_me2_cb_uart_pre_configure
-+#ifndef __ASSEMBLY__
-+extern void rte_me2_cb_uart_pre_configure (unsigned chan,
-+ unsigned cflags, unsigned baud);
-+#endif /* __ASSEMBLY__ */
-+
-+/* This board supports RTS/CTS for the on-chip UART, but only for channel 0. */
-+
-+/* CTS for UART channel 0 is pin P22 (bit 2 of port 2). */
-+#define V850E_UART_CTS(chan) ((chan) == 0 ? !(ME2_PORT2_IO & 0x4) : 1)
-+/* RTS for UART channel 0 is pin P21 (bit 1 of port 2). */
-+#define V850E_UART_SET_RTS(chan, val) \
-+ do { \
-+ if (chan == 0) { \
-+ unsigned old = ME2_PORT2_IO; \
-+ if (val) \
-+ ME2_PORT2_IO = old & ~0x2; \
-+ else \
-+ ME2_PORT2_IO = old | 0x2; \
-+ } \
-+ } while (0)
-+
-+
-+#ifndef __ASSEMBLY__
-+extern void rte_me2_cb_init_irqs (void);
-+#endif /* !__ASSEMBLY__ */
-+
-+
-+#endif /* __V850_RTE_ME2_CB_H__ */
---- linux-2.6.0-test1/include/asm-v850/rte_nb85e_cb.h 2003-06-14 12:18:30.000000000 -0700
-+++ 25/include/asm-v850/rte_nb85e_cb.h 2003-07-19 17:03:51.000000000 -0700
-@@ -17,6 +17,21 @@
- #include <asm/rte_cb.h> /* Common defs for Midas RTE-CB boards. */
-
-
-+#define PLATFORM "rte-v850e/nb85e-cb"
-+#define PLATFORM_LONG "Midas lab RTE-V850E/NB85E-CB"
-+
-+#define CPU_CLOCK_FREQ 50000000 /* 50MHz */
-+
-+/* 1MB of onboard SRAM. Note that the monitor ROM uses parts of this
-+ for its own purposes, so care must be taken. */
-+#define SRAM_ADDR 0x03C00000
-+#define SRAM_SIZE 0x00100000 /* 1MB */
-+
-+/* 16MB of onbard SDRAM. */
-+#define SDRAM_ADDR 0x01000000
-+#define SDRAM_SIZE 0x01000000 /* 16MB */
-+
-+
- /* CPU addresses of GBUS memory spaces. */
- #define GCS0_ADDR 0x00400000 /* GCS0 - Common SRAM (2MB) */
- #define GCS0_SIZE 0x00400000 /* 4MB */
-@@ -39,20 +54,8 @@
- #define IRQ_GINT(n) (10 + (n))
- #define IRQ_GINT_NUM 3
-
--
--#define PLATFORM "rte-v850e/nb85e-cb"
--#define PLATFORM_LONG "Midas lab RTE-V850E/NB85E-CB"
--
--#define CPU_CLOCK_FREQ 50000000 /* 50MHz */
--
--/* 1MB of onboard SRAM. Note that the monitor ROM uses parts of this
-- for its own purposes, so care must be taken. */
--#define SRAM_ADDR 0x03C00000
--#define SRAM_SIZE 0x00100000 /* 1MB */
--
--/* 16MB of onbard SDRAM. */
--#define SDRAM_ADDR 0x01000000
--#define SDRAM_SIZE 0x01000000 /* 16MB */
-+/* Used by <asm/rte_cb.h> to derive NUM_MACH_IRQS. */
-+#define NUM_RTE_CB_IRQS NUM_CPU_IRQS
-
-
- #ifdef CONFIG_ROM_KERNEL
-@@ -86,8 +89,8 @@
-
- /* Override the basic TEG UART pre-initialization so that we can
- initialize extra stuff. */
--#undef NB85E_UART_PRE_CONFIGURE /* should be defined by <asm/teg.h> */
--#define NB85E_UART_PRE_CONFIGURE rte_nb85e_cb_uart_pre_configure
-+#undef V850E_UART_PRE_CONFIGURE /* should be defined by <asm/teg.h> */
-+#define V850E_UART_PRE_CONFIGURE rte_nb85e_cb_uart_pre_configure
- #ifndef __ASSEMBLY__
- extern void rte_nb85e_cb_uart_pre_configure (unsigned chan,
- unsigned cflags, unsigned baud);
-@@ -96,9 +99,9 @@ extern void rte_nb85e_cb_uart_pre_config
- /* This board supports RTS/CTS for the on-chip UART. */
-
- /* CTS is pin P00. */
--#define NB85E_UART_CTS(chan) (! (TEG_PORT0_IO & 0x1))
-+#define V850E_UART_CTS(chan) (! (TEG_PORT0_IO & 0x1))
- /* RTS is pin P02. */
--#define NB85E_UART_SET_RTS(chan, val) \
-+#define V850E_UART_SET_RTS(chan, val) \
- do { \
- unsigned old = TEG_PORT0_IO; \
- TEG_PORT0_IO = val ? (old & ~0x4) : (old | 0x4); \
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-v850/serial.h 2003-07-19 17:03:51.000000000 -0700
-@@ -0,0 +1,58 @@
-+/*
-+ * This file is subject to the terms and conditions of the GNU General Public
-+ * License. See the file "COPYING" in the main directory of this archive
-+ * for more details.
-+ *
-+ * Copyright (C) 1999 by Ralf Baechle
-+ * Copyright (C) 1999, 2000 Silicon Graphics, Inc.
-+ */
-+#include <linux/config.h>
-+
-+#ifdef CONFIG_RTE_CB_ME2
-+
-+#include <asm/rte_me2_cb.h>
-+
-+#define STD_COM_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST)
-+
-+#define irq_cannonicalize(x) (x)
-+#define BASE_BAUD 250000 /* (16MHz / (16 * 38400)) * 9600 */
-+#define RS_TABLE_SIZE 1
-+#define SERIAL_PORT_DFNS \
-+ { 0, BASE_BAUD, CB_UART_BASE, IRQ_CB_EXTSIO, STD_COM_FLAGS },
-+
-+/* Redefine UART register offsets. */
-+#undef UART_RX
-+#undef UART_TX
-+#undef UART_DLL
-+#undef UART_TRG
-+#undef UART_DLM
-+#undef UART_IER
-+#undef UART_FCTR
-+#undef UART_IIR
-+#undef UART_FCR
-+#undef UART_EFR
-+#undef UART_LCR
-+#undef UART_MCR
-+#undef UART_LSR
-+#undef UART_MSR
-+#undef UART_SCR
-+#undef UART_EMSR
-+
-+#define UART_RX (0 * CB_UART_REG_GAP)
-+#define UART_TX (0 * CB_UART_REG_GAP)
-+#define UART_DLL (0 * CB_UART_REG_GAP)
-+#define UART_TRG (0 * CB_UART_REG_GAP)
-+#define UART_DLM (1 * CB_UART_REG_GAP)
-+#define UART_IER (1 * CB_UART_REG_GAP)
-+#define UART_FCTR (1 * CB_UART_REG_GAP)
-+#define UART_IIR (2 * CB_UART_REG_GAP)
-+#define UART_FCR (2 * CB_UART_REG_GAP)
-+#define UART_EFR (2 * CB_UART_REG_GAP)
-+#define UART_LCR (3 * CB_UART_REG_GAP)
-+#define UART_MCR (4 * CB_UART_REG_GAP)
-+#define UART_LSR (5 * CB_UART_REG_GAP)
-+#define UART_MSR (6 * CB_UART_REG_GAP)
-+#define UART_SCR (7 * CB_UART_REG_GAP)
-+#define UART_EMSR (7 * CB_UART_REG_GAP)
-+
-+#endif /* CONFIG_RTE_CB_ME2 */
---- linux-2.6.0-test1/include/asm-v850/sim85e2c.h 2003-06-14 12:18:01.000000000 -0700
-+++ 25/include/asm-v850/sim85e2c.h 2003-07-19 17:03:51.000000000 -0700
-@@ -15,78 +15,12 @@
- #ifndef __V850_SIM85E2C_H__
- #define __V850_SIM85E2C_H__
-
-+/* Use generic sim85e2 settings, other than the various names. */
-+#include <asm/sim85e2.h>
-
--#define CPU_ARCH "v850e2"
- #define CPU_MODEL "v850e2"
- #define CPU_MODEL_LONG "NEC V850E2"
- #define PLATFORM "sim85e2c"
- #define PLATFORM_LONG "SIM85E2C V850E2 simulator"
-
--
--/* Various memory areas supported by the simulator.
-- These should match the corresponding definitions in the linker script. */
--
--/* `instruction RAM'; instruction fetches are much faster from IRAM than
-- from DRAM. */
--#define IRAM_ADDR 0
--#define IRAM_SIZE 0x00100000 /* 1MB */
--/* `data RAM', below and contiguous with the I/O space.
-- Data fetches are much faster from DRAM than from IRAM. */
--#define DRAM_ADDR 0xfff00000
--#define DRAM_SIZE 0x000ff000 /* 1020KB */
--/* `external ram'. Unlike the above RAM areas, this memory is cached,
-- so both instruction and data fetches should be (mostly) fast --
-- however, currently only write-through caching is supported, so writes
-- to ERAM will be slow. */
--#define ERAM_ADDR 0x00100000
--#define ERAM_SIZE 0x07f00000 /* 127MB (max) */
--
--
--/* CPU core control registers; these should be expanded and moved into
-- separate header files when we support some other processors based on
-- the same E2 core. */
--/* Bus Transaction Control Register */
--#define NA85E2C_CACHE_BTSC_ADDR 0xfffff070
--#define NA85E2C_CACHE_BTSC (*(volatile unsigned short *)NA85E2C_CACHE_BTSC_ADDR)
--#define NA85E2C_CACHE_BTSC_ICM 0x1 /* icache enable */
--#define NA85E2C_CACHE_BTSC_DCM0 0x4 /* dcache enable, bit 0 */
--#define NA85E2C_CACHE_BTSC_DCM1 0x8 /* dcache enable, bit 1 */
--/* Cache Configuration Register */
--#define NA85E2C_BUSM_BHC_ADDR 0xfffff06a
--#define NA85E2C_BUSM_BHC (*(volatile unsigned short *)NA85E2C_BUSM_BHC_ADDR)
--
--/* Simulator specific control registers. */
--/* NOTHAL controls whether the simulator will stop at a `halt' insn. */
--#define NOTHAL_ADDR 0xffffff22
--#define NOTHAL (*(volatile unsigned char *)NOTHAL_ADDR)
--/* The simulator will stop N cycles after N is written to SIMFIN. */
--#define SIMFIN_ADDR 0xffffff24
--#define SIMFIN (*(volatile unsigned short *)SIMFIN_ADDR)
--
--
--/* The simulator has an nb85e-style interrupt system. */
--#include <asm/nb85e_intc.h>
--
--/* For <asm/irq.h> */
--#define NUM_CPU_IRQS 64
--
--
--/* For <asm/page.h> */
--#define PAGE_OFFSET DRAM_ADDR
--
--
--/* For <asm/entry.h> */
--/* `R0 RAM', used for a few miscellaneous variables that must be accessible
-- using a load instruction relative to R0. The sim85e2c simulator
-- actually puts 1020K of RAM from FFF00000 to FFFFF000, so we arbitarily
-- choose a small portion at the end of that. */
--#define R0_RAM_ADDR 0xFFFFE000
--
--
--/* For <asm/param.h> */
--#ifndef HZ
--#define HZ 24 /* Minimum supported frequency. */
--#endif
--
--
- #endif /* __V850_SIM85E2C_H__ */
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-v850/sim85e2.h 2003-07-19 17:03:51.000000000 -0700
-@@ -0,0 +1,79 @@
-+/*
-+ * include/asm-v850/sim85e2.h -- Machine-dependent defs for
-+ * V850E2 RTL simulator
-+ *
-+ * Copyright (C) 2002,03 NEC Electronics Corporation
-+ * Copyright (C) 2002,03 Miles Bader <miles@gnu.org>
-+ *
-+ * This file is subject to the terms and conditions of the GNU General
-+ * Public License. See the file COPYING in the main directory of this
-+ * archive for more details.
-+ *
-+ * Written by Miles Bader <miles@gnu.org>
-+ */
-+
-+#ifndef __V850_SIM85E2_H__
-+#define __V850_SIM85E2_H__
-+
-+
-+#include <asm/v850e2.h> /* Based on V850E2 core. */
-+
-+
-+/* Various memory areas supported by the simulator.
-+ These should match the corresponding definitions in the linker script. */
-+
-+/* `instruction RAM'; instruction fetches are much faster from IRAM than
-+ from DRAM. */
-+#define IRAM_ADDR 0
-+#define IRAM_SIZE 0x00100000 /* 1MB */
-+/* `data RAM', below and contiguous with the I/O space.
-+ Data fetches are much faster from DRAM than from IRAM. */
-+#define DRAM_ADDR 0xfff00000
-+#define DRAM_SIZE 0x000ff000 /* 1020KB */
-+/* `external ram'. Unlike the above RAM areas, this memory is cached,
-+ so both instruction and data fetches should be (mostly) fast --
-+ however, currently only write-through caching is supported, so writes
-+ to ERAM will be slow. */
-+#define ERAM_ADDR 0x00100000
-+#define ERAM_SIZE 0x07f00000 /* 127MB (max) */
-+/* Dynamic RAM; uses memory controller. */
-+#define SDRAM_ADDR 0x10000000
-+#if 0
-+#define SDRAM_SIZE 0x01000000 /* 16MB */
-+#else
-+#define SDRAM_SIZE 0x00200000 /* Only use 2MB for testing */
-+#endif
-+
-+
-+/* Simulator specific control registers. */
-+/* NOTHAL controls whether the simulator will stop at a `halt' insn. */
-+#define SIM85E2_NOTHAL_ADDR 0xffffff22
-+#define SIM85E2_NOTHAL (*(volatile u8 *)SIM85E2_NOTHAL_ADDR)
-+/* The simulator will stop N cycles after N is written to SIMFIN. */
-+#define SIM85E2_SIMFIN_ADDR 0xffffff24
-+#define SIM85E2_SIMFIN (*(volatile u16 *)SIM85E2_SIMFIN_ADDR)
-+
-+
-+/* For <asm/irq.h> */
-+#define NUM_CPU_IRQS 64
-+
-+
-+/* For <asm/page.h> */
-+#define PAGE_OFFSET SDRAM_ADDR
-+
-+
-+/* For <asm/entry.h> */
-+/* `R0 RAM', used for a few miscellaneous variables that must be accessible
-+ using a load instruction relative to R0. The sim85e2 simulator
-+ actually puts 1020K of RAM from FFF00000 to FFFFF000, so we arbitarily
-+ choose a small portion at the end of that. */
-+#define R0_RAM_ADDR 0xFFFFE000
-+
-+
-+/* For <asm/param.h> */
-+#ifndef HZ
-+#define HZ 24 /* Minimum supported frequency. */
-+#endif
-+
-+
-+#endif /* __V850_SIM85E2_H__ */
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-v850/sim85e2s.h 2003-07-19 17:03:51.000000000 -0700
-@@ -0,0 +1,28 @@
-+/*
-+ * include/asm-v850/sim85e2s.h -- Machine-dependent defs for
-+ * V850E2 RTL simulator
-+ *
-+ * Copyright (C) 2003 NEC Electronics Corporation
-+ * Copyright (C) 2003 Miles Bader <miles@gnu.org>
-+ *
-+ * This file is subject to the terms and conditions of the GNU General
-+ * Public License. See the file COPYING in the main directory of this
-+ * archive for more details.
-+ *
-+ * Written by Miles Bader <miles@gnu.org>
-+ */
-+
-+#ifndef __V850_SIM85E2S_H__
-+#define __V850_SIM85E2S_H__
-+
-+#include <asm/sim85e2.h> /* Use generic sim85e2 settings. */
-+#if 0
-+#include <asm/v850e2_cache.h> /* + cache */
-+#endif
-+
-+#define CPU_MODEL "v850e2"
-+#define CPU_MODEL_LONG "NEC V850E2"
-+#define PLATFORM "sim85e2s"
-+#define PLATFORM_LONG "SIM85E2S V850E2 simulator"
-+
-+#endif /* __V850_SIM85E2S_H__ */
---- linux-2.6.0-test1/include/asm-v850/stat.h 2003-06-14 12:18:26.000000000 -0700
-+++ 25/include/asm-v850/stat.h 2003-07-19 17:03:51.000000000 -0700
-@@ -1,7 +1,7 @@
- /*
- * include/asm-v850/stat.h -- v850 stat structure
- *
-- * Copyright (C) 2001,02,03 NEC Corporation
-+ * Copyright (C) 2001,02,03 NEC Electronics Corporation
- * Copyright (C) 2001,02,03 Miles Bader <miles@gnu.org>
- *
- * This file is subject to the terms and conditions of the GNU General
---- linux-2.6.0-test1/include/asm-v850/system.h 2003-06-14 12:18:29.000000000 -0700
-+++ 25/include/asm-v850/system.h 2003-07-19 17:03:51.000000000 -0700
-@@ -1,7 +1,7 @@
- /*
- * include/asm-v850/system.h -- Low-level interrupt/thread ops
- *
-- * Copyright (C) 2001,02,03 NEC Corporation
-+ * Copyright (C) 2001,02,03 NEC Electronics Corporation
- * Copyright (C) 2001,02,03 Miles Bader <miles@gnu.org>
- *
- * This file is subject to the terms and conditions of the GNU General
---- linux-2.6.0-test1/include/asm-v850/teg.h 2003-06-14 12:17:56.000000000 -0700
-+++ 25/include/asm-v850/teg.h 2003-07-19 17:03:51.000000000 -0700
-@@ -15,9 +15,9 @@
- #define __V850_TEG_H__
-
-
--/* The TEG uses the NB85E cpu core. */
--#include <asm/nb85e.h>
--#include <asm/nb85e_cache.h>
-+/* The TEG uses the V850E cpu core. */
-+#include <asm/v850e.h>
-+#include <asm/v850e_cache.h>
-
-
- #define CPU_MODEL "v850e/nb85e-teg"
-@@ -51,18 +51,18 @@
-
-
- /* TEG UART details. */
--#define NB85E_UART_BASE_ADDR(n) (0xFFFFF600 + 0x10 * (n))
--#define NB85E_UART_ASIM_ADDR(n) (NB85E_UART_BASE_ADDR(n) + 0x0)
--#define NB85E_UART_ASIS_ADDR(n) (NB85E_UART_BASE_ADDR(n) + 0x2)
--#define NB85E_UART_ASIF_ADDR(n) (NB85E_UART_BASE_ADDR(n) + 0x4)
--#define NB85E_UART_CKSR_ADDR(n) (NB85E_UART_BASE_ADDR(n) + 0x6)
--#define NB85E_UART_BRGC_ADDR(n) (NB85E_UART_BASE_ADDR(n) + 0x8)
--#define NB85E_UART_TXB_ADDR(n) (NB85E_UART_BASE_ADDR(n) + 0xA)
--#define NB85E_UART_RXB_ADDR(n) (NB85E_UART_BASE_ADDR(n) + 0xC)
--#define NB85E_UART_NUM_CHANNELS 1
--#define NB85E_UART_BASE_FREQ CPU_CLOCK_FREQ
-+#define V850E_UART_BASE_ADDR(n) (0xFFFFF600 + 0x10 * (n))
-+#define V850E_UART_ASIM_ADDR(n) (V850E_UART_BASE_ADDR(n) + 0x0)
-+#define V850E_UART_ASIS_ADDR(n) (V850E_UART_BASE_ADDR(n) + 0x2)
-+#define V850E_UART_ASIF_ADDR(n) (V850E_UART_BASE_ADDR(n) + 0x4)
-+#define V850E_UART_CKSR_ADDR(n) (V850E_UART_BASE_ADDR(n) + 0x6)
-+#define V850E_UART_BRGC_ADDR(n) (V850E_UART_BASE_ADDR(n) + 0x8)
-+#define V850E_UART_TXB_ADDR(n) (V850E_UART_BASE_ADDR(n) + 0xA)
-+#define V850E_UART_RXB_ADDR(n) (V850E_UART_BASE_ADDR(n) + 0xC)
-+#define V850E_UART_NUM_CHANNELS 1
-+#define V850E_UART_BASE_FREQ CPU_CLOCK_FREQ
- /* This is a function that gets called before configuring the UART. */
--#define NB85E_UART_PRE_CONFIGURE teg_uart_pre_configure
-+#define V850E_UART_PRE_CONFIGURE teg_uart_pre_configure
- #ifndef __ASSEMBLY__
- extern void teg_uart_pre_configure (unsigned chan,
- unsigned cflags, unsigned baud);
-@@ -70,15 +70,15 @@ extern void teg_uart_pre_configure (unsi
-
-
- /* The TEG RTPU. */
--#define NB85E_RTPU_BASE_ADDR 0xFFFFF210
-+#define V850E_RTPU_BASE_ADDR 0xFFFFF210
-
-
- /* TEG series timer D details. */
--#define NB85E_TIMER_D_BASE_ADDR 0xFFFFF210
--#define NB85E_TIMER_D_TMCD_BASE_ADDR (NB85E_TIMER_D_BASE_ADDR + 0x0)
--#define NB85E_TIMER_D_TMD_BASE_ADDR (NB85E_TIMER_D_BASE_ADDR + 0x4)
--#define NB85E_TIMER_D_CMD_BASE_ADDR (NB85E_TIMER_D_BASE_ADDR + 0x8)
--#define NB85E_TIMER_D_BASE_FREQ CPU_CLOCK_FREQ
-+#define V850E_TIMER_D_BASE_ADDR 0xFFFFF210
-+#define V850E_TIMER_D_TMCD_BASE_ADDR (V850E_TIMER_D_BASE_ADDR + 0x0)
-+#define V850E_TIMER_D_TMD_BASE_ADDR (V850E_TIMER_D_BASE_ADDR + 0x4)
-+#define V850E_TIMER_D_CMD_BASE_ADDR (V850E_TIMER_D_BASE_ADDR + 0x8)
-+#define V850E_TIMER_D_BASE_FREQ CPU_CLOCK_FREQ
-
-
- /* `Interrupt Source Select' control register. */
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-v850/v850e2_cache.h 2003-07-19 17:03:51.000000000 -0700
-@@ -0,0 +1,74 @@
-+/*
-+ * include/asm-v850/v850e2_cache_cache.h -- Cache control for V850E2
-+ * cache memories
-+ *
-+ * Copyright (C) 2003 NEC Electronics Corporation
-+ * Copyright (C) 2003 Miles Bader <miles@gnu.org>
-+ *
-+ * This file is subject to the terms and conditions of the GNU General
-+ * Public License. See the file COPYING in the main directory of this
-+ * archive for more details.
-+ *
-+ * Written by Miles Bader <miles@gnu.org>
-+ */
-+
-+#ifndef __V850_V850E2_CACHE_H__
-+#define __V850_V850E2_CACHE_H__
-+
-+#include <asm/types.h>
-+
-+
-+/* Cache control registers. */
-+
-+/* Bus Transaction Control */
-+#define V850E2_CACHE_BTSC_ADDR 0xFFFFF070
-+#define V850E2_CACHE_BTSC (*(volatile u16 *)V850E2_CACHE_BTSC_ADDR)
-+#define V850E2_CACHE_BTSC_ICM 0x0001 /* icache enable */
-+#define V850E2_CACHE_BTSC_DCM0 0x0004 /* dcache enable, bit 0 */
-+#define V850E2_CACHE_BTSC_DCM1 0x0008 /* dcache enable, bit 1 */
-+#define V850E2_CACHE_BTSC_DCM_WT /* write-through */ \
-+ V850E2_CACHE_BTSC_DCM0
-+#ifdef CONFIG_V850E2_V850E2S
-+# define V850E2_CACHE_BTSC_DCM_WB_NO_ALLOC /* write-back, non-alloc */ \
-+ V850E2_CACHE_BTSC_DCM1
-+# define V850E2_CACHE_BTSC_DCM_WB_ALLOC /* write-back, non-alloc */ \
-+ (V850E2_CACHE_BTSC_DCM1 | V850E2_CACHE_BTSC_DCM0)
-+# define V850E2_CACHE_BTSC_ISEQ 0x0010 /* icache `address sequence mode' */
-+# define V850E2_CACHE_BTSC_DSEQ 0x0020 /* dcache `address sequence mode' */
-+# define V850E2_CACHE_BTSC_IRFC 0x0030
-+# define V850E2_CACHE_BTSC_ILCD 0x4000
-+# define V850E2_CACHE_BTSC_VABE 0x8000
-+#endif /* CONFIG_V850E2_V850E2S */
-+
-+/* Cache operation start address register (low-bits). */
-+#define V850E2_CACHE_CADL_ADDR 0xFFFFF074
-+#define V850E2_CACHE_CADL (*(volatile u16 *)V850E2_CACHE_CADL_ADDR)
-+/* Cache operation start address register (high-bits). */
-+#define V850E2_CACHE_CADH_ADDR 0xFFFFF076
-+#define V850E2_CACHE_CADH (*(volatile u16 *)V850E2_CACHE_CADH_ADDR)
-+/* Cache operation count register. */
-+#define V850E2_CACHE_CCNT_ADDR 0xFFFFF078
-+#define V850E2_CACHE_CCNT (*(volatile u16 *)V850E2_CACHE_CCNT_ADDR)
-+/* Cache operation specification register. */
-+#define V850E2_CACHE_COPR_ADDR 0xFFFFF07A
-+#define V850E2_CACHE_COPR (*(volatile u16 *)V850E2_CACHE_COPR_ADDR)
-+#define V850E2_CACHE_COPR_STRT 0x0001 /* start cache operation */
-+#define V850E2_CACHE_COPR_LBSL 0x0100 /* 0 = icache, 1 = dcache */
-+#define V850E2_CACHE_COPR_WSLE 0x0200 /* operate on cache way */
-+#define V850E2_CACHE_COPR_WSL(way) ((way) * 0x0400) /* way select */
-+#define V850E2_CACHE_COPR_CFC(op) ((op) * 0x1000) /* cache function code */
-+
-+
-+/* Size of a cache line in bytes. */
-+#define V850E2_CACHE_LINE_SIZE_BITS 4
-+#define V850E2_CACHE_LINE_SIZE (1 << V850E2_CACHE_LINE_SIZE_BITS)
-+
-+/* The size of each cache `way' in lines. */
-+#define V850E2_CACHE_WAY_SIZE 256
-+
-+
-+/* For <asm/cache.h> */
-+#define L1_CACHE_BYTES V850E2_CACHE_LINE_SIZE
-+
-+
-+#endif /* __V850_V850E2_CACHE_H__ */
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-v850/v850e2.h 2003-07-19 17:03:51.000000000 -0700
-@@ -0,0 +1,69 @@
-+/*
-+ * include/asm-v850/v850e2.h -- Machine-dependent defs for V850E2 CPUs
-+ *
-+ * Copyright (C) 2002,03 NEC Electronics Corporation
-+ * Copyright (C) 2002,03 Miles Bader <miles@gnu.org>
-+ *
-+ * This file is subject to the terms and conditions of the GNU General
-+ * Public License. See the file COPYING in the main directory of this
-+ * archive for more details.
-+ *
-+ * Written by Miles Bader <miles@gnu.org>
-+ */
-+
-+#ifndef __V850_V850E2_H__
-+#define __V850_V850E2_H__
-+
-+#include <asm/v850e_intc.h> /* v850e-style interrupt system. */
-+
-+
-+#define CPU_ARCH "v850e2"
-+
-+
-+/* Control registers. */
-+
-+/* Chip area select control */
-+#define V850E2_CSC_ADDR(n) (0xFFFFF060 + (n) * 2)
-+#define V850E2_CSC(n) (*(volatile u16 *)V850E2_CSC_ADDR(n))
-+/* I/O area select control */
-+#define V850E2_BPC_ADDR 0xFFFFF064
-+#define V850E2_BPC (*(volatile u16 *)V850E2_BPC_ADDR)
-+/* Bus size configuration */
-+#define V850E2_BSC_ADDR 0xFFFFF066
-+#define V850E2_BSC (*(volatile u16 *)V850E2_BSC_ADDR)
-+/* Endian configuration */
-+#define V850E2_BEC_ADDR 0xFFFFF068
-+#define V850E2_BEC (*(volatile u16 *)V850E2_BEC_ADDR)
-+/* Cache configuration */
-+#define V850E2_BHC_ADDR 0xFFFFF06A
-+#define V850E2_BHC (*(volatile u16 *)V850E2_BHC_ADDR)
-+/* NPB strobe-wait configuration */
-+#define V850E2_VSWC_ADDR 0xFFFFF06E
-+#define V850E2_VSWC (*(volatile u16 *)V850E2_VSWC_ADDR)
-+/* Bus cycle type */
-+#define V850E2_BCT_ADDR(n) (0xFFFFF480 + (n) * 2)
-+#define V850E2_BCT(n) (*(volatile u16 *)V850E2_BCT_ADDR(n))
-+/* Data wait control */
-+#define V850E2_DWC_ADDR(n) (0xFFFFF484 + (n) * 2)
-+#define V850E2_DWC(n) (*(volatile u16 *)V850E2_DWC_ADDR(n))
-+/* Bus cycle control */
-+#define V850E2_BCC_ADDR 0xFFFFF488
-+#define V850E2_BCC (*(volatile u16 *)V850E2_BCC_ADDR)
-+/* Address wait control */
-+#define V850E2_ASC_ADDR 0xFFFFF48A
-+#define V850E2_ASC (*(volatile u16 *)V850E2_ASC_ADDR)
-+/* Local bus sizing control */
-+#define V850E2_LBS_ADDR 0xFFFFF48E
-+#define V850E2_LBS (*(volatile u16 *)V850E2_LBS_ADDR)
-+/* Line buffer control */
-+#define V850E2_LBC_ADDR(n) (0xFFFFF490 + (n) * 2)
-+#define V850E2_LBC(n) (*(volatile u16 *)V850E2_LBC_ADDR(n))
-+/* SDRAM configuration */
-+#define V850E2_SCR_ADDR(n) (0xFFFFF4A0 + (n) * 4)
-+#define V850E2_SCR(n) (*(volatile u16 *)V850E2_SCR_ADDR(n))
-+/* SDRAM refresh cycle control */
-+#define V850E2_RFS_ADDR(n) (0xFFFFF4A2 + (n) * 4)
-+#define V850E2_RFS(n) (*(volatile u16 *)V850E2_RFS_ADDR(n))
-+
-+
-+#endif /* __V850_V850E2_H__ */
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-v850/v850e_cache.h 2003-07-19 17:03:51.000000000 -0700
-@@ -0,0 +1,48 @@
-+/*
-+ * include/asm-v850/v850e_cache.h -- Cache control for V850E cache memories
-+ *
-+ * Copyright (C) 2001,03 NEC Electronics Corporation
-+ * Copyright (C) 2001,03 Miles Bader <miles@gnu.org>
-+ *
-+ * This file is subject to the terms and conditions of the GNU General
-+ * Public License. See the file COPYING in the main directory of this
-+ * archive for more details.
-+ *
-+ * Written by Miles Bader <miles@gnu.org>
-+ */
-+
-+/* This file implements cache control for the rather simple cache used on
-+ some V850E CPUs, specifically the NB85E/TEG CPU-core and the V850E/ME2
-+ CPU. V850E2 processors have their own (better) cache
-+ implementation. */
-+
-+#ifndef __V850_V850E_CACHE_H__
-+#define __V850_V850E_CACHE_H__
-+
-+#include <asm/types.h>
-+
-+
-+/* Cache control registers. */
-+#define V850E_CACHE_BHC_ADDR 0xFFFFF06A
-+#define V850E_CACHE_BHC (*(volatile u16 *)V850E_CACHE_BHC_ADDR)
-+#define V850E_CACHE_ICC_ADDR 0xFFFFF070
-+#define V850E_CACHE_ICC (*(volatile u16 *)V850E_CACHE_ICC_ADDR)
-+#define V850E_CACHE_ISI_ADDR 0xFFFFF072
-+#define V850E_CACHE_ISI (*(volatile u16 *)V850E_CACHE_ISI_ADDR)
-+#define V850E_CACHE_DCC_ADDR 0xFFFFF078
-+#define V850E_CACHE_DCC (*(volatile u16 *)V850E_CACHE_DCC_ADDR)
-+
-+/* Size of a cache line in bytes. */
-+#define V850E_CACHE_LINE_SIZE 16
-+
-+/* For <asm/cache.h> */
-+#define L1_CACHE_BYTES V850E_CACHE_LINE_SIZE
-+
-+
-+#if defined(__KERNEL__) && !defined(__ASSEMBLY__)
-+/* Set caching params via the BHC, ICC, and DCC registers. */
-+void v850e_cache_enable (u16 bhc, u16 icc, u16 dcc);
-+#endif /* __KERNEL__ && !__ASSEMBLY__ */
-+
-+
-+#endif /* __V850_V850E_CACHE_H__ */
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-v850/v850e.h 2003-07-19 17:03:51.000000000 -0700
-@@ -0,0 +1,21 @@
-+/*
-+ * include/asm-v850/v850e.h -- V850E CPU
-+ *
-+ * Copyright (C) 2001,02,03 NEC Electronics Corporation
-+ * Copyright (C) 2001,02,03 Miles Bader <miles@gnu.org>
-+ *
-+ * This file is subject to the terms and conditions of the GNU General
-+ * Public License. See the file COPYING in the main directory of this
-+ * archive for more details.
-+ *
-+ * Written by Miles Bader <miles@gnu.org>
-+ */
-+
-+#ifndef __V850_V850E_H__
-+#define __V850_V850E_H__
-+
-+#include <asm/v850e_intc.h>
-+
-+#define CPU_ARCH "v850e"
-+
-+#endif /* __V850_V850E_H__ */
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-v850/v850e_intc.h 2003-07-19 17:03:51.000000000 -0700
-@@ -0,0 +1,133 @@
-+/*
-+ * include/asm-v850/v850e_intc.h -- V850E CPU interrupt controller (INTC)
-+ *
-+ * Copyright (C) 2001,02,03 NEC Electronics Corporation
-+ * Copyright (C) 2001,02,03 Miles Bader <miles@gnu.org>
-+ *
-+ * This file is subject to the terms and conditions of the GNU General
-+ * Public License. See the file COPYING in the main directory of this
-+ * archive for more details.
-+ *
-+ * Written by Miles Bader <miles@gnu.org>
-+ */
-+
-+#ifndef __V850_V850E_INTC_H__
-+#define __V850_V850E_INTC_H__
-+
-+
-+/* There are 4 16-bit `Interrupt Mask Registers' located contiguously
-+ starting from this base. Each interrupt uses a single bit to
-+ indicated enabled/disabled status. */
-+#define V850E_INTC_IMR_BASE_ADDR 0xFFFFF100
-+#define V850E_INTC_IMR_ADDR(irq) (V850E_INTC_IMR_BASE_ADDR + ((irq) >> 3))
-+#define V850E_INTC_IMR_BIT(irq) ((irq) & 0x7)
-+
-+/* Each maskable interrupt has a single-byte control register at this
-+ address. */
-+#define V850E_INTC_IC_BASE_ADDR 0xFFFFF110
-+#define V850E_INTC_IC_ADDR(irq) (V850E_INTC_IC_BASE_ADDR + ((irq) << 1))
-+#define V850E_INTC_IC(irq) (*(volatile u8 *)V850E_INTC_IC_ADDR(irq))
-+/* Encode priority PR for storing in an interrupt control register. */
-+#define V850E_INTC_IC_PR(pr) (pr)
-+/* Interrupt disable bit in an interrupt control register. */
-+#define V850E_INTC_IC_MK_BIT 6
-+#define V850E_INTC_IC_MK (1 << V850E_INTC_IC_MK_BIT)
-+/* Interrupt pending flag in an interrupt control register. */
-+#define V850E_INTC_IC_IF_BIT 7
-+#define V850E_INTC_IC_IF (1 << V850E_INTC_IC_IF_BIT)
-+
-+/* The ISPR (In-service priority register) contains one bit for each interrupt
-+ priority level, which is set to one when that level is currently being
-+ serviced (and thus blocking any interrupts of equal or lesser level). */
-+#define V850E_INTC_ISPR_ADDR 0xFFFFF1FA
-+#define V850E_INTC_ISPR (*(volatile u8 *)V850E_INTC_ISPR_ADDR)
-+
-+
-+#ifndef __ASSEMBLY__
-+
-+/* Enable interrupt handling for interrupt IRQ. */
-+static inline void v850e_intc_enable_irq (unsigned irq)
-+{
-+ __asm__ __volatile__ ("clr1 %0, [%1]"
-+ :: "r" (V850E_INTC_IMR_BIT (irq)),
-+ "r" (V850E_INTC_IMR_ADDR (irq))
-+ : "memory");
-+}
-+
-+/* Disable interrupt handling for interrupt IRQ. Note that any
-+ interrupts received while disabled will be delivered once the
-+ interrupt is enabled again, unless they are explicitly cleared using
-+ `v850e_intc_clear_pending_irq'. */
-+static inline void v850e_intc_disable_irq (unsigned irq)
-+{
-+ __asm__ __volatile__ ("set1 %0, [%1]"
-+ :: "r" (V850E_INTC_IMR_BIT (irq)),
-+ "r" (V850E_INTC_IMR_ADDR (irq))
-+ : "memory");
-+}
-+
-+/* Return true if interrupt handling for interrupt IRQ is enabled. */
-+static inline int v850e_intc_irq_enabled (unsigned irq)
-+{
-+ int rval;
-+ __asm__ __volatile__ ("tst1 %1, [%2]; setf z, %0"
-+ : "=r" (rval)
-+ : "r" (V850E_INTC_IMR_BIT (irq)),
-+ "r" (V850E_INTC_IMR_ADDR (irq)));
-+ return rval;
-+}
-+
-+/* Disable irqs from 0 until LIMIT. LIMIT must be a multiple of 8. */
-+static inline void _v850e_intc_disable_irqs (unsigned limit)
-+{
-+ unsigned long addr;
-+ for (addr = V850E_INTC_IMR_BASE_ADDR; limit >= 8; addr++, limit -= 8)
-+ *(char *)addr = 0xFF;
-+}
-+
-+/* Disable all irqs. This is purposely a macro, because NUM_MACH_IRQS
-+ will be only be defined later. */
-+#define v850e_intc_disable_irqs() _v850e_intc_disable_irqs (NUM_MACH_IRQS)
-+
-+/* Clear any pending interrupts for IRQ. */
-+static inline void v850e_intc_clear_pending_irq (unsigned irq)
-+{
-+ __asm__ __volatile__ ("clr1 %0, 0[%1]"
-+ :: "i" (V850E_INTC_IC_IF_BIT),
-+ "r" (V850E_INTC_IC_ADDR (irq))
-+ : "memory");
-+}
-+
-+/* Return true if interrupt IRQ is pending (but disabled). */
-+static inline int v850e_intc_irq_pending (unsigned irq)
-+{
-+ int rval;
-+ __asm__ __volatile__ ("tst1 %1, 0[%2]; setf nz, %0"
-+ : "=r" (rval)
-+ : "i" (V850E_INTC_IC_IF_BIT),
-+ "r" (V850E_INTC_IC_ADDR (irq)));
-+ return rval;
-+}
-+
-+
-+struct v850e_intc_irq_init {
-+ const char *name; /* name of interrupt type */
-+
-+ /* Range of kernel irq numbers for this type:
-+ BASE, BASE+INTERVAL, ..., BASE+INTERVAL*NUM */
-+ unsigned base, num, interval;
-+
-+ unsigned priority; /* interrupt priority to assign */
-+};
-+struct hw_interrupt_type; /* fwd decl */
-+
-+/* Initialize HW_IRQ_TYPES for INTC-controlled irqs described in array
-+ INITS (which is terminated by an entry with the name field == 0). */
-+extern void v850e_intc_init_irq_types (struct v850e_intc_irq_init *inits,
-+ struct hw_interrupt_type *hw_irq_types);
-+
-+
-+#endif /* !__ASSEMBLY__ */
-+
-+
-+#endif /* __V850_V850E_INTC_H__ */
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-v850/v850e_timer_c.h 2003-07-19 17:03:51.000000000 -0700
-@@ -0,0 +1,48 @@
-+/*
-+ * include/asm-v850/v850e_timer_c.h -- `Timer C' component often used
-+ * with the V850E cpu core
-+ *
-+ * Copyright (C) 2001,03 NEC Electronics Corporation
-+ * Copyright (C) 2001,03 Miles Bader <miles@gnu.org>
-+ *
-+ * This file is subject to the terms and conditions of the GNU General
-+ * Public License. See the file COPYING in the main directory of this
-+ * archive for more details.
-+ *
-+ * Written by Miles Bader <miles@gnu.org>
-+ */
-+
-+/* NOTE: this include file currently contains only enough to allow us to
-+ use timer C as an interrupt pass-through. */
-+
-+#ifndef __V850_V850E_TIMER_C_H__
-+#define __V850_V850E_TIMER_C_H__
-+
-+#include <asm/types.h>
-+#include <asm/machdep.h> /* Pick up chip-specific defs. */
-+
-+
-+/* Timer C (16-bit interval timers). */
-+
-+/* Control register 0 for timer C. */
-+#define V850E_TIMER_C_TMCC0_ADDR(n) (V850E_TIMER_C_BASE_ADDR + 0x6 + 0x10 *(n))
-+#define V850E_TIMER_C_TMCC0(n) (*(volatile u8 *)V850E_TIMER_C_TMCC0_ADDR(n))
-+#define V850E_TIMER_C_TMCC0_CAE 0x01 /* clock action enable */
-+#define V850E_TIMER_C_TMCC0_CE 0x02 /* count enable */
-+/* ... */
-+
-+/* Control register 1 for timer C. */
-+#define V850E_TIMER_C_TMCC1_ADDR(n) (V850E_TIMER_C_BASE_ADDR + 0x8 + 0x10 *(n))
-+#define V850E_TIMER_C_TMCC1(n) (*(volatile u8 *)V850E_TIMER_C_TMCC1_ADDR(n))
-+#define V850E_TIMER_C_TMCC1_CMS0 0x01 /* capture/compare mode select (ccc0) */
-+#define V850E_TIMER_C_TMCC1_CMS1 0x02 /* capture/compare mode select (ccc1) */
-+/* ... */
-+
-+/* Interrupt edge-sensitivity control for timer C. */
-+#define V850E_TIMER_C_SESC_ADDR(n) (V850E_TIMER_C_BASE_ADDR + 0x9 + 0x10 *(n))
-+#define V850E_TIMER_C_SESC(n) (*(volatile u8 *)V850E_TIMER_C_SESC_ADDR(n))
-+
-+/* ...etc... */
-+
-+
-+#endif /* __V850_V850E_TIMER_C_H__ */
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-v850/v850e_timer_d.h 2003-07-19 17:03:51.000000000 -0700
-@@ -0,0 +1,62 @@
-+/*
-+ * include/asm-v850/v850e_timer_d.h -- `Timer D' component often used
-+ * with the V850E cpu core
-+ *
-+ * Copyright (C) 2001,02,03 NEC Electronics Corporation
-+ * Copyright (C) 2001,02,03 Miles Bader <miles@gnu.org>
-+ *
-+ * This file is subject to the terms and conditions of the GNU General
-+ * Public License. See the file COPYING in the main directory of this
-+ * archive for more details.
-+ *
-+ * Written by Miles Bader <miles@gnu.org>
-+ */
-+
-+#ifndef __V850_V850E_TIMER_D_H__
-+#define __V850_V850E_TIMER_D_H__
-+
-+#include <asm/types.h>
-+#include <asm/machdep.h> /* Pick up chip-specific defs. */
-+
-+
-+/* Timer D (16-bit interval timers). */
-+
-+/* Count registers for timer D. */
-+#define V850E_TIMER_D_TMD_ADDR(n) (V850E_TIMER_D_TMD_BASE_ADDR + 0x10 * (n))
-+#define V850E_TIMER_D_TMD(n) (*(volatile u16 *)V850E_TIMER_D_TMD_ADDR(n))
-+
-+/* Count compare registers for timer D. */
-+#define V850E_TIMER_D_CMD_ADDR(n) (V850E_TIMER_D_CMD_BASE_ADDR + 0x10 * (n))
-+#define V850E_TIMER_D_CMD(n) (*(volatile u16 *)V850E_TIMER_D_CMD_ADDR(n))
-+
-+/* Control registers for timer D. */
-+#define V850E_TIMER_D_TMCD_ADDR(n) (V850E_TIMER_D_TMCD_BASE_ADDR + 0x10 * (n))
-+#define V850E_TIMER_D_TMCD(n) (*(volatile u8 *)V850E_TIMER_D_TMCD_ADDR(n))
-+/* Control bits for timer D. */
-+#define V850E_TIMER_D_TMCD_CE 0x2 /* count enable */
-+#define V850E_TIMER_D_TMCD_CAE 0x1 /* clock action enable */
-+/* Clock divider setting (log2). */
-+#define V850E_TIMER_D_TMCD_CS(divlog2) (((divlog2) - V850E_TIMER_D_TMCD_CS_MIN) << 4)
-+/* Minimum clock divider setting (log2). */
-+#ifndef V850E_TIMER_D_TMCD_CS_MIN /* Can be overridden by mach-specific hdrs */
-+#define V850E_TIMER_D_TMCD_CS_MIN 2 /* Default is correct for the v850e/ma1 */
-+#endif
-+/* Maximum clock divider setting (log2). */
-+#define V850E_TIMER_D_TMCD_CS_MAX (V850E_TIMER_D_TMCD_CS_MIN + 7)
-+
-+/* Return the clock-divider (log2) of timer D unit N. */
-+#define V850E_TIMER_D_DIVLOG2(n) \
-+ (((V850E_TIMER_D_TMCD(n) >> 4) & 0x7) + V850E_TIMER_D_TMCD_CS_MIN)
-+
-+
-+#ifndef __ASSEMBLY__
-+
-+/* Start interval timer TIMER (0-3). The timer will issue the
-+ corresponding INTCMD interrupt RATE times per second. This function
-+ does not enable the interrupt. */
-+extern void v850e_timer_d_configure (unsigned timer, unsigned rate);
-+
-+#endif /* !__ASSEMBLY__ */
-+
-+
-+#endif /* __V850_V850E_TIMER_D_H__ */
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-v850/v850e_uarta.h 2003-07-19 17:03:51.000000000 -0700
-@@ -0,0 +1,278 @@
-+/*
-+ * include/asm-v850/v850e_uarta.h -- original V850E on-chip UART
-+ *
-+ * Copyright (C) 2001,02,03 NEC Electronics Corporation
-+ * Copyright (C) 2001,02,03 Miles Bader <miles@gnu.org>
-+ *
-+ * This file is subject to the terms and conditions of the GNU General
-+ * Public License. See the file COPYING in the main directory of this
-+ * archive for more details.
-+ *
-+ * Written by Miles Bader <miles@gnu.org>
-+ */
-+
-+/* This is the original V850E UART implementation is called just `UART' in
-+ the docs, but we name this header file <asm/v850e_uarta.h> because the
-+ name <asm/v850e_uart.h> is used for the common driver that handles both
-+ `UART' and `UARTB' implementations. */
-+
-+#ifndef __V850_V850E_UARTA_H__
-+#define __V850_V850E_UARTA_H__
-+
-+\f
-+/* Raw hardware interface. */
-+
-+/* The base address of the UART control registers for channel N.
-+ The default is the address used on the V850E/MA1. */
-+#ifndef V850E_UART_BASE_ADDR
-+#define V850E_UART_BASE_ADDR(n) (0xFFFFFA00 + 0x10 * (n))
-+#endif
-+
-+/* Addresses of specific UART control registers for channel N.
-+ The defaults are the addresses used on the V850E/MA1; if a platform
-+ wants to redefine any of these, it must redefine them all. */
-+#ifndef V850E_UART_ASIM_ADDR
-+#define V850E_UART_ASIM_ADDR(n) (V850E_UART_BASE_ADDR(n) + 0x0)
-+#define V850E_UART_RXB_ADDR(n) (V850E_UART_BASE_ADDR(n) + 0x2)
-+#define V850E_UART_ASIS_ADDR(n) (V850E_UART_BASE_ADDR(n) + 0x3)
-+#define V850E_UART_TXB_ADDR(n) (V850E_UART_BASE_ADDR(n) + 0x4)
-+#define V850E_UART_ASIF_ADDR(n) (V850E_UART_BASE_ADDR(n) + 0x5)
-+#define V850E_UART_CKSR_ADDR(n) (V850E_UART_BASE_ADDR(n) + 0x6)
-+#define V850E_UART_BRGC_ADDR(n) (V850E_UART_BASE_ADDR(n) + 0x7)
-+#endif
-+
-+/* UART config registers. */
-+#define V850E_UART_ASIM(n) (*(volatile u8 *)V850E_UART_ASIM_ADDR(n))
-+/* Control bits for config registers. */
-+#define V850E_UART_ASIM_CAE 0x80 /* clock enable */
-+#define V850E_UART_ASIM_TXE 0x40 /* transmit enable */
-+#define V850E_UART_ASIM_RXE 0x20 /* receive enable */
-+#define V850E_UART_ASIM_PS_MASK 0x18 /* mask covering parity-select bits */
-+#define V850E_UART_ASIM_PS_NONE 0x00 /* no parity */
-+#define V850E_UART_ASIM_PS_ZERO 0x08 /* zero parity */
-+#define V850E_UART_ASIM_PS_ODD 0x10 /* odd parity */
-+#define V850E_UART_ASIM_PS_EVEN 0x18 /* even parity */
-+#define V850E_UART_ASIM_CL_8 0x04 /* char len is 8 bits (otherwise, 7) */
-+#define V850E_UART_ASIM_SL_2 0x02 /* 2 stop bits (otherwise, 1) */
-+#define V850E_UART_ASIM_ISRM 0x01 /* generate INTSR interrupt on errors
-+ (otherwise, generate INTSER) */
-+
-+/* UART serial interface status registers. */
-+#define V850E_UART_ASIS(n) (*(volatile u8 *)V850E_UART_ASIS_ADDR(n))
-+/* Control bits for status registers. */
-+#define V850E_UART_ASIS_PE 0x04 /* parity error */
-+#define V850E_UART_ASIS_FE 0x02 /* framing error */
-+#define V850E_UART_ASIS_OVE 0x01 /* overrun error */
-+
-+/* UART serial interface transmission status registers. */
-+#define V850E_UART_ASIF(n) (*(volatile u8 *)V850E_UART_ASIF_ADDR(n))
-+#define V850E_UART_ASIF_TXBF 0x02 /* transmit buffer flag (data in TXB) */
-+#define V850E_UART_ASIF_TXSF 0x01 /* transmit shift flag (sending data) */
-+
-+/* UART receive buffer register. */
-+#define V850E_UART_RXB(n) (*(volatile u8 *)V850E_UART_RXB_ADDR(n))
-+
-+/* UART transmit buffer register. */
-+#define V850E_UART_TXB(n) (*(volatile u8 *)V850E_UART_TXB_ADDR(n))
-+
-+/* UART baud-rate generator control registers. */
-+#define V850E_UART_CKSR(n) (*(volatile u8 *)V850E_UART_CKSR_ADDR(n))
-+#define V850E_UART_CKSR_MAX 11
-+#define V850E_UART_BRGC(n) (*(volatile u8 *)V850E_UART_BRGC_ADDR(n))
-+#define V850E_UART_BRGC_MIN 8
-+
-+
-+#ifndef V850E_UART_CKSR_MAX_FREQ
-+#define V850E_UART_CKSR_MAX_FREQ (25*1000*1000)
-+#endif
-+
-+/* Calculate the minimum value for CKSR on this processor. */
-+static inline unsigned v850e_uart_cksr_min (void)
-+{
-+ int min = 0;
-+ unsigned freq = V850E_UART_BASE_FREQ;
-+ while (freq > V850E_UART_CKSR_MAX_FREQ) {
-+ freq >>= 1;
-+ min++;
-+ }
-+ return min;
-+}
-+
-+\f
-+/* Slightly abstract interface used by driver. */
-+
-+
-+/* Interrupts used by the UART. */
-+
-+/* Received when the most recently transmitted character has been sent. */
-+#define V850E_UART_TX_IRQ(chan) IRQ_INTST (chan)
-+/* Received when a new character has been received. */
-+#define V850E_UART_RX_IRQ(chan) IRQ_INTSR (chan)
-+
-+
-+/* UART clock generator interface. */
-+
-+/* This type encapsulates a particular uart frequency. */
-+typedef struct {
-+ unsigned clk_divlog2;
-+ unsigned brgen_count;
-+} v850e_uart_speed_t;
-+
-+/* Calculate a uart speed from BAUD for this uart. */
-+static inline v850e_uart_speed_t v850e_uart_calc_speed (unsigned baud)
-+{
-+ v850e_uart_speed_t speed;
-+
-+ /* Calculate the log2 clock divider and baud-rate counter values
-+ (note that the UART divides the resulting clock by 2, so
-+ multiply BAUD by 2 here to compensate). */
-+ calc_counter_params (V850E_UART_BASE_FREQ, baud * 2,
-+ v850e_uart_cksr_min(),
-+ V850E_UART_CKSR_MAX, 8/*bits*/,
-+ &speed.clk_divlog2, &speed.brgen_count);
-+
-+ return speed;
-+}
-+
-+/* Return the current speed of uart channel CHAN. */
-+static inline v850e_uart_speed_t v850e_uart_speed (unsigned chan)
-+{
-+ v850e_uart_speed_t speed;
-+ speed.clk_divlog2 = V850E_UART_CKSR (chan);
-+ speed.brgen_count = V850E_UART_BRGC (chan);
-+ return speed;
-+}
-+
-+/* Set the current speed of uart channel CHAN. */
-+static inline void v850e_uart_set_speed(unsigned chan,v850e_uart_speed_t speed)
-+{
-+ V850E_UART_CKSR (chan) = speed.clk_divlog2;
-+ V850E_UART_BRGC (chan) = speed.brgen_count;
-+}
-+
-+static inline int
-+v850e_uart_speed_eq (v850e_uart_speed_t speed1, v850e_uart_speed_t speed2)
-+{
-+ return speed1.clk_divlog2 == speed2.clk_divlog2
-+ && speed1.brgen_count == speed2.brgen_count;
-+}
-+
-+/* Minimum baud rate possible. */
-+#define v850e_uart_min_baud() \
-+ ((V850E_UART_BASE_FREQ >> V850E_UART_CKSR_MAX) / (2 * 255) + 1)
-+
-+/* Maximum baud rate possible. The error is quite high at max, though. */
-+#define v850e_uart_max_baud() \
-+ ((V850E_UART_BASE_FREQ >> v850e_uart_cksr_min()) / (2 *V850E_UART_BRGC_MIN))
-+
-+/* The `maximum' clock rate the uart can used, which is wanted (though not
-+ really used in any useful way) by the serial framework. */
-+#define v850e_uart_max_clock() \
-+ ((V850E_UART_BASE_FREQ >> v850e_uart_cksr_min()) / 2)
-+
-+
-+/* UART configuration interface. */
-+
-+/* Type of the uart config register; must be a scalar. */
-+typedef u16 v850e_uart_config_t;
-+
-+/* The uart hardware config register for channel CHAN. */
-+#define V850E_UART_CONFIG(chan) V850E_UART_ASIM (chan)
-+
-+/* This config bit set if the uart is enabled. */
-+#define V850E_UART_CONFIG_ENABLED V850E_UART_ASIM_CAE
-+/* If the uart _isn't_ enabled, store this value to it to do so. */
-+#define V850E_UART_CONFIG_INIT V850E_UART_ASIM_CAE
-+/* Store this config value to disable the uart channel completely. */
-+#define V850E_UART_CONFIG_FINI 0
-+
-+/* Setting/clearing these bits enable/disable TX/RX, respectively (but
-+ otherwise generally leave things running). */
-+#define V850E_UART_CONFIG_RX_ENABLE V850E_UART_ASIM_RXE
-+#define V850E_UART_CONFIG_TX_ENABLE V850E_UART_ASIM_TXE
-+
-+/* These masks define which config bits affect TX/RX modes, respectively. */
-+#define V850E_UART_CONFIG_RX_BITS \
-+ (V850E_UART_ASIM_PS_MASK | V850E_UART_ASIM_CL_8 | V850E_UART_ASIM_ISRM)
-+#define V850E_UART_CONFIG_TX_BITS \
-+ (V850E_UART_ASIM_PS_MASK | V850E_UART_ASIM_CL_8 | V850E_UART_ASIM_SL_2)
-+
-+static inline v850e_uart_config_t v850e_uart_calc_config (unsigned cflags)
-+{
-+ v850e_uart_config_t config = 0;
-+
-+ /* Figure out new configuration of control register. */
-+ if (cflags & CSTOPB)
-+ /* Number of stop bits, 1 or 2. */
-+ config |= V850E_UART_ASIM_SL_2;
-+ if ((cflags & CSIZE) == CS8)
-+ /* Number of data bits, 7 or 8. */
-+ config |= V850E_UART_ASIM_CL_8;
-+ if (! (cflags & PARENB))
-+ /* No parity check/generation. */
-+ config |= V850E_UART_ASIM_PS_NONE;
-+ else if (cflags & PARODD)
-+ /* Odd parity check/generation. */
-+ config |= V850E_UART_ASIM_PS_ODD;
-+ else
-+ /* Even parity check/generation. */
-+ config |= V850E_UART_ASIM_PS_EVEN;
-+ if (cflags & CREAD)
-+ /* Reading enabled. */
-+ config |= V850E_UART_ASIM_RXE;
-+
-+ config |= V850E_UART_ASIM_CAE;
-+ config |= V850E_UART_ASIM_TXE; /* Writing is always enabled. */
-+ config |= V850E_UART_ASIM_ISRM; /* Errors generate a read-irq. */
-+
-+ return config;
-+}
-+
-+/* This should delay as long as necessary for a recently written config
-+ setting to settle, before we turn the uart back on. */
-+static inline void
-+v850e_uart_config_delay (v850e_uart_config_t config, v850e_uart_speed_t speed)
-+{
-+ /* The UART may not be reset properly unless we wait at least 2
-+ `basic-clocks' until turning on the TXE/RXE bits again.
-+ A `basic clock' is the clock used by the baud-rate generator,
-+ i.e., the cpu clock divided by the 2^new_clk_divlog2.
-+ The loop takes 2 insns, so loop CYCLES / 2 times. */
-+ register unsigned count = 1 << speed.clk_divlog2;
-+ while (--count != 0)
-+ /* nothing */;
-+}
-+
-+
-+/* RX/TX interface. */
-+
-+/* Return true if all characters awaiting transmission on uart channel N
-+ have been transmitted. */
-+#define v850e_uart_xmit_done(n) \
-+ (! (V850E_UART_ASIF(n) & V850E_UART_ASIF_TXBF))
-+/* Wait for this to be true. */
-+#define v850e_uart_wait_for_xmit_done(n) \
-+ do { } while (! v850e_uart_xmit_done (n))
-+
-+/* Return true if uart channel N is ready to transmit a character. */
-+#define v850e_uart_xmit_ok(n) \
-+ (v850e_uart_xmit_done(n) && v850e_uart_cts(n))
-+/* Wait for this to be true. */
-+#define v850e_uart_wait_for_xmit_ok(n) \
-+ do { } while (! v850e_uart_xmit_ok (n))
-+
-+/* Write character CH to uart channel CHAN. */
-+#define v850e_uart_putc(chan, ch) (V850E_UART_TXB(chan) = (ch))
-+
-+/* Return latest character read on channel CHAN. */
-+#define v850e_uart_getc(chan) V850E_UART_RXB (chan)
-+
-+/* Return bit-mask of uart error status. */
-+#define v850e_uart_err(chan) V850E_UART_ASIS (chan)
-+/* Various error bits set in the error result. */
-+#define V850E_UART_ERR_OVERRUN V850E_UART_ASIS_OVE
-+#define V850E_UART_ERR_FRAME V850E_UART_ASIS_FE
-+#define V850E_UART_ERR_PARITY V850E_UART_ASIS_PE
-+
-+
-+#endif /* __V850_V850E_UARTA_H__ */
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-v850/v850e_uartb.h 2003-07-19 17:03:51.000000000 -0700
-@@ -0,0 +1,262 @@
-+/*
-+ * include/asm-v850/v850e_uartb.h -- V850E on-chip `UARTB' UART
-+ *
-+ * Copyright (C) 2001,02,03 NEC Electronics Corporation
-+ * Copyright (C) 2001,02,03 Miles Bader <miles@gnu.org>
-+ *
-+ * This file is subject to the terms and conditions of the GNU General
-+ * Public License. See the file COPYING in the main directory of this
-+ * archive for more details.
-+ *
-+ * Written by Miles Bader <miles@gnu.org>
-+ */
-+
-+/* The V850E UARTB is basically a superset of the original V850E UART, but
-+ even where it's the same, the names and details have changed a bit.
-+ It's similar enough to use the same driver (v850e_uart.c), but the
-+ details have been abstracted slightly to do so. */
-+
-+#ifndef __V850_V850E_UARTB_H__
-+#define __V850_V850E_UARTB_H__
-+
-+\f
-+/* Raw hardware interface. */
-+
-+#define V850E_UARTB_BASE_ADDR(n) (0xFFFFFA00 + 0x10 * (n))
-+
-+/* Addresses of specific UART control registers for channel N. */
-+#define V850E_UARTB_CTL0_ADDR(n) (V850E_UARTB_BASE_ADDR(n) + 0x0)
-+#define V850E_UARTB_CTL2_ADDR(n) (V850E_UARTB_BASE_ADDR(n) + 0x2)
-+#define V850E_UARTB_STR_ADDR(n) (V850E_UARTB_BASE_ADDR(n) + 0x4)
-+#define V850E_UARTB_RX_ADDR(n) (V850E_UARTB_BASE_ADDR(n) + 0x6)
-+#define V850E_UARTB_RXAP_ADDR(n) (V850E_UARTB_BASE_ADDR(n) + 0x6)
-+#define V850E_UARTB_TX_ADDR(n) (V850E_UARTB_BASE_ADDR(n) + 0x8)
-+#define V850E_UARTB_FIC0_ADDR(n) (V850E_UARTB_BASE_ADDR(n) + 0xA)
-+#define V850E_UARTB_FIC1_ADDR(n) (V850E_UARTB_BASE_ADDR(n) + 0xB)
-+#define V850E_UARTB_FIC2_ADDR(n) (V850E_UARTB_BASE_ADDR(n) + 0xC)
-+#define V850E_UARTB_FIS0_ADDR(n) (V850E_UARTB_BASE_ADDR(n) + 0xE)
-+#define V850E_UARTB_FIS1_ADDR(n) (V850E_UARTB_BASE_ADDR(n) + 0xF)
-+
-+/* UARTB control register 0 (general config). */
-+#define V850E_UARTB_CTL0(n) (*(volatile u8 *)V850E_UARTB_CTL0_ADDR(n))
-+/* Control bits for config registers. */
-+#define V850E_UARTB_CTL0_PWR 0x80 /* clock enable */
-+#define V850E_UARTB_CTL0_TXE 0x40 /* transmit enable */
-+#define V850E_UARTB_CTL0_RXE 0x20 /* receive enable */
-+#define V850E_UARTB_CTL0_DIR 0x10 /* */
-+#define V850E_UARTB_CTL0_PS1 0x08 /* parity */
-+#define V850E_UARTB_CTL0_PS0 0x04 /* parity */
-+#define V850E_UARTB_CTL0_CL 0x02 /* char len 1:8bit, 0:7bit */
-+#define V850E_UARTB_CTL0_SL 0x01 /* stop bit 1:2bit, 0:1bit */
-+#define V850E_UARTB_CTL0_PS_MASK 0x0C /* mask covering parity bits */
-+#define V850E_UARTB_CTL0_PS_NONE 0x00 /* no parity */
-+#define V850E_UARTB_CTL0_PS_ZERO 0x04 /* zero parity */
-+#define V850E_UARTB_CTL0_PS_ODD 0x08 /* odd parity */
-+#define V850E_UARTB_CTL0_PS_EVEN 0x0C /* even parity */
-+#define V850E_UARTB_CTL0_CL_8 0x02 /* char len 1:8bit, 0:7bit */
-+#define V850E_UARTB_CTL0_SL_2 0x01 /* stop bit 1:2bit, 0:1bit */
-+
-+/* UARTB control register 2 (clock divider). */
-+#define V850E_UARTB_CTL2(n) (*(volatile u16 *)V850E_UARTB_CTL2_ADDR(n))
-+#define V850E_UARTB_CTL2_MIN 4
-+#define V850E_UARTB_CTL2_MAX 0xFFFF
-+
-+/* UARTB serial interface status register. */
-+#define V850E_UARTB_STR(n) (*(volatile u8 *)V850E_UARTB_STR_ADDR(n))
-+/* Control bits for status registers. */
-+#define V850E_UARTB_STR_TSF 0x80 /* UBTX or FIFO exist data */
-+#define V850E_UARTB_STR_OVF 0x08 /* overflow error */
-+#define V850E_UARTB_STR_PE 0x04 /* parity error */
-+#define V850E_UARTB_STR_FE 0x02 /* framing error */
-+#define V850E_UARTB_STR_OVE 0x01 /* overrun error */
-+
-+/* UARTB receive data register. */
-+#define V850E_UARTB_RX(n) (*(volatile u8 *)V850E_UARTB_RX_ADDR(n))
-+#define V850E_UARTB_RXAP(n) (*(volatile u16 *)V850E_UARTB_RXAP_ADDR(n))
-+/* Control bits for status registers. */
-+#define V850E_UARTB_RXAP_PEF 0x0200 /* parity error */
-+#define V850E_UARTB_RXAP_FEF 0x0100 /* framing error */
-+
-+/* UARTB transmit data register. */
-+#define V850E_UARTB_TX(n) (*(volatile u8 *)V850E_UARTB_TX_ADDR(n))
-+
-+/* UARTB FIFO control register 0. */
-+#define V850E_UARTB_FIC0(n) (*(volatile u8 *)V850E_UARTB_FIC0_ADDR(n))
-+
-+/* UARTB FIFO control register 1. */
-+#define V850E_UARTB_FIC1(n) (*(volatile u8 *)V850E_UARTB_FIC1_ADDR(n))
-+
-+/* UARTB FIFO control register 2. */
-+#define V850E_UARTB_FIC2(n) (*(volatile u16 *)V850E_UARTB_FIC2_ADDR(n))
-+
-+/* UARTB FIFO status register 0. */
-+#define V850E_UARTB_FIS0(n) (*(volatile u8 *)V850E_UARTB_FIS0_ADDR(n))
-+
-+/* UARTB FIFO status register 1. */
-+#define V850E_UARTB_FIS1(n) (*(volatile u8 *)V850E_UARTB_FIS1_ADDR(n))
-+
-+\f
-+/* Slightly abstract interface used by driver. */
-+
-+
-+/* Interrupts used by the UART. */
-+
-+/* Received when the most recently transmitted character has been sent. */
-+#define V850E_UART_TX_IRQ(chan) IRQ_INTUBTIT (chan)
-+/* Received when a new character has been received. */
-+#define V850E_UART_RX_IRQ(chan) IRQ_INTUBTIR (chan)
-+
-+/* Use by serial driver for information purposes. */
-+#define V850E_UART_BASE_ADDR(chan) V850E_UARTB_BASE_ADDR(chan)
-+
-+
-+/* UART clock generator interface. */
-+
-+/* This type encapsulates a particular uart frequency. */
-+typedef u16 v850e_uart_speed_t;
-+
-+/* Calculate a uart speed from BAUD for this uart. */
-+static inline v850e_uart_speed_t v850e_uart_calc_speed (unsigned baud)
-+{
-+ v850e_uart_speed_t speed;
-+
-+ /*
-+ * V850E/ME2 UARTB baud rate is determined by the value of UBCTL2
-+ * fx = V850E_UARTB_BASE_FREQ = CPU_CLOCK_FREQ/4
-+ * baud = fx / 2*speed [ speed >= 4 ]
-+ */
-+ speed = V850E_UARTB_CTL2_MIN;
-+ while (((V850E_UARTB_BASE_FREQ / 2) / speed ) > baud)
-+ speed++;
-+
-+ return speed;
-+}
-+
-+/* Return the current speed of uart channel CHAN. */
-+#define v850e_uart_speed(chan) V850E_UARTB_CTL2 (chan)
-+
-+/* Set the current speed of uart channel CHAN. */
-+#define v850e_uart_set_speed(chan, speed) (V850E_UARTB_CTL2 (chan) = (speed))
-+
-+/* Return true if SPEED1 and SPEED2 are the same. */
-+#define v850e_uart_speed_eq(speed1, speed2) ((speed1) == (speed2))
-+
-+/* Minimum baud rate possible. */
-+#define v850e_uart_min_baud() \
-+ ((V850E_UARTB_BASE_FREQ / 2) / V850E_UARTB_CTL2_MAX)
-+
-+/* Maximum baud rate possible. The error is quite high at max, though. */
-+#define v850e_uart_max_baud() \
-+ ((V850E_UARTB_BASE_FREQ / 2) / V850E_UARTB_CTL2_MIN)
-+
-+/* The `maximum' clock rate the uart can used, which is wanted (though not
-+ really used in any useful way) by the serial framework. */
-+#define v850e_uart_max_clock() \
-+ (V850E_UARTB_BASE_FREQ / 2)
-+
-+
-+/* UART configuration interface. */
-+
-+/* Type of the uart config register; must be a scalar. */
-+typedef u16 v850e_uart_config_t;
-+
-+/* The uart hardware config register for channel CHAN. */
-+#define V850E_UART_CONFIG(chan) V850E_UARTB_CTL0 (chan)
-+
-+/* This config bit set if the uart is enabled. */
-+#define V850E_UART_CONFIG_ENABLED V850E_UARTB_CTL0_PWR
-+/* If the uart _isn't_ enabled, store this value to it to do so. */
-+#define V850E_UART_CONFIG_INIT V850E_UARTB_CTL0_PWR
-+/* Store this config value to disable the uart channel completely. */
-+#define V850E_UART_CONFIG_FINI 0
-+
-+/* Setting/clearing these bits enable/disable TX/RX, respectively (but
-+ otherwise generally leave things running). */
-+#define V850E_UART_CONFIG_RX_ENABLE V850E_UARTB_CTL0_RXE
-+#define V850E_UART_CONFIG_TX_ENABLE V850E_UARTB_CTL0_TXE
-+
-+/* These masks define which config bits affect TX/RX modes, respectively. */
-+#define V850E_UART_CONFIG_RX_BITS \
-+ (V850E_UARTB_CTL0_PS_MASK | V850E_UARTB_CTL0_CL_8)
-+#define V850E_UART_CONFIG_TX_BITS \
-+ (V850E_UARTB_CTL0_PS_MASK | V850E_UARTB_CTL0_CL_8 | V850E_UARTB_CTL0_SL_2)
-+
-+static inline v850e_uart_config_t v850e_uart_calc_config (unsigned cflags)
-+{
-+ v850e_uart_config_t config = 0;
-+
-+ /* Figure out new configuration of control register. */
-+ if (cflags & CSTOPB)
-+ /* Number of stop bits, 1 or 2. */
-+ config |= V850E_UARTB_CTL0_SL_2;
-+ if ((cflags & CSIZE) == CS8)
-+ /* Number of data bits, 7 or 8. */
-+ config |= V850E_UARTB_CTL0_CL_8;
-+ if (! (cflags & PARENB))
-+ /* No parity check/generation. */
-+ config |= V850E_UARTB_CTL0_PS_NONE;
-+ else if (cflags & PARODD)
-+ /* Odd parity check/generation. */
-+ config |= V850E_UARTB_CTL0_PS_ODD;
-+ else
-+ /* Even parity check/generation. */
-+ config |= V850E_UARTB_CTL0_PS_EVEN;
-+ if (cflags & CREAD)
-+ /* Reading enabled. */
-+ config |= V850E_UARTB_CTL0_RXE;
-+
-+ config |= V850E_UARTB_CTL0_PWR;
-+ config |= V850E_UARTB_CTL0_TXE; /* Writing is always enabled. */
-+ config |= V850E_UARTB_CTL0_DIR; /* LSB first. */
-+
-+ return config;
-+}
-+
-+/* This should delay as long as necessary for a recently written config
-+ setting to settle, before we turn the uart back on. */
-+static inline void
-+v850e_uart_config_delay (v850e_uart_config_t config, v850e_uart_speed_t speed)
-+{
-+ /* The UART may not be reset properly unless we wait at least 2
-+ `basic-clocks' until turning on the TXE/RXE bits again.
-+ A `basic clock' is the clock used by the baud-rate generator,
-+ i.e., the cpu clock divided by the 2^new_clk_divlog2.
-+ The loop takes 2 insns, so loop CYCLES / 2 times. */
-+ register unsigned count = 1 << speed;
-+ while (--count != 0)
-+ /* nothing */;
-+}
-+
-+
-+/* RX/TX interface. */
-+
-+/* Return true if all characters awaiting transmission on uart channel N
-+ have been transmitted. */
-+#define v850e_uart_xmit_done(n) \
-+ (! (V850E_UARTB_STR(n) & V850E_UARTB_STR_TSF))
-+/* Wait for this to be true. */
-+#define v850e_uart_wait_for_xmit_done(n) \
-+ do { } while (! v850e_uart_xmit_done (n))
-+
-+/* Return true if uart channel N is ready to transmit a character. */
-+#define v850e_uart_xmit_ok(n) \
-+ (v850e_uart_xmit_done(n) && v850e_uart_cts(n))
-+/* Wait for this to be true. */
-+#define v850e_uart_wait_for_xmit_ok(n) \
-+ do { } while (! v850e_uart_xmit_ok (n))
-+
-+/* Write character CH to uart channel CHAN. */
-+#define v850e_uart_putc(chan, ch) (V850E_UARTB_TX(chan) = (ch))
-+
-+/* Return latest character read on channel CHAN. */
-+#define v850e_uart_getc(chan) V850E_UARTB_RX (chan)
-+
-+/* Return bit-mask of uart error status. */
-+#define v850e_uart_err(chan) V850E_UARTB_STR (chan)
-+/* Various error bits set in the error result. */
-+#define V850E_UART_ERR_OVERRUN V850E_UARTB_STR_OVE
-+#define V850E_UART_ERR_FRAME V850E_UARTB_STR_FE
-+#define V850E_UART_ERR_PARITY V850E_UARTB_STR_PE
-+
-+
-+#endif /* __V850_V850E_UARTB_H__ */
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-v850/v850e_uart.h 2003-07-19 17:03:51.000000000 -0700
-@@ -0,0 +1,77 @@
-+/*
-+ * include/asm-v850/v850e_uart.h -- common V850E on-chip UART driver
-+ *
-+ * Copyright (C) 2001,02,03 NEC Electronics Corporation
-+ * Copyright (C) 2001,02,03 Miles Bader <miles@gnu.org>
-+ *
-+ * This file is subject to the terms and conditions of the GNU General
-+ * Public License. See the file COPYING in the main directory of this
-+ * archive for more details.
-+ *
-+ * Written by Miles Bader <miles@gnu.org>
-+ */
-+
-+/* There's not actually a single UART implementation used by V850E CPUs,
-+ but rather a series of implementations that are all `close' to one
-+ another. This file corresponds to the single driver which handles all
-+ of them. */
-+
-+#ifndef __V850_V850E_UART_H__
-+#define __V850_V850E_UART_H__
-+
-+#include <linux/config.h>
-+#include <linux/termios.h>
-+
-+#include <asm/v850e_utils.h>
-+#include <asm/types.h>
-+#include <asm/machdep.h> /* Pick up chip-specific defs. */
-+
-+
-+/* Include model-specific definitions. */
-+#ifdef CONFIG_V850E_UART
-+# ifdef CONFIG_V850E_UARTB
-+# include <asm-v850/v850e_uartb.h>
-+# else
-+# include <asm-v850/v850e_uarta.h> /* original V850E UART */
-+# endif
-+#endif
-+
-+
-+/* Optional capabilities some hardware provides. */
-+
-+/* This UART doesn't implement RTS/CTS by default, but some platforms
-+ implement them externally, so check to see if <asm/machdep.h> defined
-+ anything. */
-+#ifdef V850E_UART_CTS
-+#define v850e_uart_cts(n) V850E_UART_CTS(n)
-+#else
-+#define v850e_uart_cts(n) (1)
-+#endif
-+
-+/* Do the same for RTS. */
-+#ifdef V850E_UART_SET_RTS
-+#define v850e_uart_set_rts(n,v) V850E_UART_SET_RTS(n,v)
-+#else
-+#define v850e_uart_set_rts(n,v) ((void)0)
-+#endif
-+
-+
-+/* This is the serial channel to use for the boot console (if desired). */
-+#ifndef V850E_UART_CONSOLE_CHANNEL
-+# define V850E_UART_CONSOLE_CHANNEL 0
-+#endif
-+
-+
-+#ifndef __ASSEMBLY__
-+
-+/* Setup a console using channel 0 of the builtin uart. */
-+extern void v850e_uart_cons_init (unsigned chan);
-+
-+/* Configure and turn on uart channel CHAN, using the termios `control
-+ modes' bits in CFLAGS, and a baud-rate of BAUD. */
-+void v850e_uart_configure (unsigned chan, unsigned cflags, unsigned baud);
-+
-+#endif /* !__ASSEMBLY__ */
-+
-+
-+#endif /* __V850_V850E_UART_H__ */
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-v850/v850e_utils.h 2003-07-19 17:03:51.000000000 -0700
-@@ -0,0 +1,35 @@
-+/*
-+ * include/asm-v850/v850e_utils.h -- Utility functions associated with
-+ * V850E CPUs
-+ *
-+ * Copyright (C) 2001,03 NEC Electronics Corporation
-+ * Copyright (C) 2001,03 Miles Bader <miles@gnu.org>
-+ *
-+ * This file is subject to the terms and conditions of the GNU General
-+ * Public License. See the file COPYING in the main directory of this
-+ * archive for more details.
-+ *
-+ * Written by Miles Bader <miles@gnu.org>
-+ */
-+
-+#ifndef __V850_V850E_UTILS_H__
-+#define __V850_V850E_UTILS_H__
-+
-+/* Calculate counter clock-divider and count values to attain the
-+ desired frequency RATE from the base frequency BASE_FREQ. The
-+ counter is expected to have a clock-divider, which can divide the
-+ system cpu clock by a power of two value from MIN_DIVLOG2 to
-+ MAX_DIV_LOG2, and a word-size of COUNTER_SIZE bits (the counter
-+ counts up and resets whenever it's equal to the compare register,
-+ generating an interrupt or whatever when it does so). The returned
-+ values are: *DIVLOG2 -- log2 of the desired clock divider and *COUNT
-+ -- the counter compare value to use. Returns true if it was possible
-+ to find a reasonable value, otherwise false (and the other return
-+ values will be set to be as good as possible). */
-+extern int calc_counter_params (unsigned long base_freq,
-+ unsigned long rate,
-+ unsigned min_divlog2, unsigned max_divlog2,
-+ unsigned counter_size,
-+ unsigned *divlog2, unsigned *count);
-+
-+#endif /* __V850_V850E_UTILS_H__ */
---- linux-2.6.0-test1/include/asm-x86_64/bitops.h 2003-06-14 12:18:08.000000000 -0700
-+++ 25/include/asm-x86_64/bitops.h 2003-07-19 17:04:07.000000000 -0700
-@@ -477,6 +477,7 @@ static __inline__ int ffs(int x)
- * The Hamming Weight of a number is the total number of bits set in it.
- */
-
-+#define hweight64(x) generic_hweight64(x)
- #define hweight32(x) generic_hweight32(x)
- #define hweight16(x) generic_hweight16(x)
- #define hweight8(x) generic_hweight8(x)
---- linux-2.6.0-test1/include/asm-x86_64/mpspec.h 2003-06-14 12:18:09.000000000 -0700
-+++ 25/include/asm-x86_64/mpspec.h 2003-07-19 17:04:07.000000000 -0700
-@@ -171,7 +171,7 @@ extern int quad_local_to_mp_bus_id [NR_C
- extern int mp_bus_id_to_pci_bus [MAX_MP_BUSSES];
-
- extern unsigned int boot_cpu_physical_apicid;
--extern unsigned long phys_cpu_present_map;
-+extern cpumask_t phys_cpu_present_map;
- extern int smp_found_config;
- extern void find_smp_config (void);
- extern void get_smp_config (void);
---- linux-2.6.0-test1/include/asm-x86_64/pgalloc.h 2003-06-14 12:18:22.000000000 -0700
-+++ 25/include/asm-x86_64/pgalloc.h 2003-07-19 17:07:16.000000000 -0700
-@@ -10,7 +10,7 @@
- #define pmd_populate_kernel(mm, pmd, pte) \
- set_pmd(pmd, __pmd(_PAGE_TABLE | __pa(pte)))
- #define pgd_populate(mm, pgd, pmd) \
-- set_pgd(pgd, __pgd(_PAGE_TABLE | __pa(pmd)))
-+ set_pgd(pgd, __pgd(_PAGE_TABLE | __pa(page_address(pmd))))
-
- static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmd, struct page *pte)
- {
-@@ -22,18 +22,25 @@ extern __inline__ pmd_t *get_pmd(void)
- return (pmd_t *)get_zeroed_page(GFP_KERNEL);
- }
-
--extern __inline__ void pmd_free(pmd_t *pmd)
-+extern __inline__ void pmd_free(struct page *pmd)
- {
-- if ((unsigned long)pmd & (PAGE_SIZE-1))
-- BUG();
-- free_page((unsigned long)pmd);
-+ __free_page(pmd);
- }
-
--static inline pmd_t *pmd_alloc_one (struct mm_struct *mm, unsigned long addr)
-+static inline pmd_t *pmd_alloc_one_kernel(struct mm_struct *mm, unsigned long addr)
- {
- return (pmd_t *)get_zeroed_page(GFP_KERNEL|__GFP_REPEAT);
- }
-
-+static inline struct page *pmd_alloc_one(struct mm_struct *mm, unsigned long addr)
-+{
-+ pmd_t *pmd = pmd_alloc_one_kernel(mm, addr);
-+ if (pmd)
-+ return virt_to_page(pmd);
-+ else
-+ return NULL;
-+}
-+
- static inline pgd_t *pgd_alloc (struct mm_struct *mm)
- {
- return (pgd_t *)get_zeroed_page(GFP_KERNEL|__GFP_REPEAT);
---- linux-2.6.0-test1/include/asm-x86_64/pgtable.h 2003-07-02 14:53:18.000000000 -0700
-+++ 25/include/asm-x86_64/pgtable.h 2003-07-19 17:07:16.000000000 -0700
-@@ -98,8 +98,9 @@ static inline void set_pml4(pml4_t *dst,
- pml4_val(*dst) = pml4_val(val);
- }
-
--#define pgd_page(pgd) \
-+#define __pgd_page(pgd) \
- ((unsigned long) __va(pgd_val(pgd) & PHYSICAL_PAGE_MASK))
-+#define pgd_page(pgd) virt_to_page(__pgd_page(pgd))
-
- #define ptep_get_and_clear(xp) __pte(xchg(&(xp)->pte, 0))
- #define pte_same(a, b) ((a).pte == (b).pte)
-@@ -332,8 +333,13 @@ static inline pgd_t *current_pgd_offset_
- #define pmd_page(pmd) (pfn_to_page(pmd_val(pmd) >> PAGE_SHIFT))
-
- #define pmd_index(address) (((address) >> PMD_SHIFT) & (PTRS_PER_PMD-1))
--#define pmd_offset(dir, address) ((pmd_t *) pgd_page(*(dir)) + \
-+#define pmd_offset(dir, address) ((pmd_t *)__pgd_page(*(dir)) + \
- pmd_index(address))
-+#define pmd_offset_kernel(pgd, addr) pmd_offset(pgd, addr)
-+#define pmd_offset_map(pgd, addr) pmd_offset(pgd, addr)
-+#define pmd_offset_map_nested(pgd, addr) pmd_offset(pgd, addr)
-+#define pmd_unmap(pmd) do { } while (0)
-+#define pmd_unmap_nested(pmd) do { } while (0)
- #define pmd_none(x) (!pmd_val(x))
- #define pmd_present(x) (pmd_val(x) & _PAGE_PRESENT)
- #define pmd_clear(xp) do { set_pmd(xp, __pmd(0)); } while (0)
---- linux-2.6.0-test1/include/asm-x86_64/posix_types.h 2003-06-14 12:18:48.000000000 -0700
-+++ 25/include/asm-x86_64/posix_types.h 2003-07-19 17:06:39.000000000 -0700
-@@ -7,7 +7,9 @@
- * assume GCC is being used.
- */
-
-+#ifdef __GNUC__
- typedef unsigned long __kernel_dev_t;
-+#endif
- typedef unsigned long __kernel_ino_t;
- typedef unsigned int __kernel_mode_t;
- typedef unsigned long __kernel_nlink_t;
---- linux-2.6.0-test1/include/asm-x86_64/smp.h 2003-06-22 12:04:45.000000000 -0700
-+++ 25/include/asm-x86_64/smp.h 2003-07-19 17:04:07.000000000 -0700
-@@ -7,6 +7,7 @@
- #ifndef __ASSEMBLY__
- #include <linux/config.h>
- #include <linux/threads.h>
-+#include <linux/cpumask.h>
- #include <linux/bitops.h>
- extern int disable_apic;
- #endif
-@@ -35,8 +36,8 @@ struct pt_regs;
- */
-
- extern void smp_alloc_memory(void);
--extern unsigned long phys_cpu_present_map;
--extern unsigned long cpu_online_map;
-+extern cpumask_t phys_cpu_present_map;
-+extern cpumask_t cpu_online_map;
- extern volatile unsigned long smp_invalidate_needed;
- extern int pic_mode;
- extern void smp_flush_tlb(void);
-@@ -56,35 +57,17 @@ void smp_stop_cpu(void);
- * compresses data structures.
- */
-
--extern volatile unsigned long cpu_callout_map;
-+extern cpumask_t cpu_callout_map;
-
--#define cpu_possible(cpu) (cpu_callout_map & (1<<(cpu)))
--#define cpu_online(cpu) (cpu_online_map & (1<<(cpu)))
--
--#define for_each_cpu(cpu, mask) \
-- for(mask = cpu_online_map; \
-- cpu = __ffs(mask), mask != 0; \
-- mask &= ~(1UL<<cpu))
--
--extern inline unsigned int any_online_cpu(unsigned int mask)
--{
-- if (mask & cpu_online_map)
-- return __ffs(mask & cpu_online_map);
--
-- return NR_CPUS;
--}
--
--extern inline unsigned int num_online_cpus(void)
--{
-- return hweight32(cpu_online_map);
--}
-+#define cpu_possible(cpu) cpu_isset(cpu, cpu_callout_map)
-+#define cpu_online(cpu) cpu_isset(cpu, cpu_online_map)
-
- static inline int num_booting_cpus(void)
- {
-- return hweight32(cpu_callout_map);
-+ return cpus_weight(cpu_callout_map);
- }
-
--extern volatile unsigned long cpu_callout_map;
-+extern cpumask_t cpu_callout_map;
-
- #define smp_processor_id() read_pda(cpunumber)
-
-@@ -104,7 +87,7 @@ extern inline int safe_smp_processor_id(
- return hard_smp_processor_id();
- }
-
--#define cpu_online(cpu) (cpu_online_map & (1<<(cpu)))
-+#define cpu_online(cpu) cpu_isset(cpu, cpu_online_map)
- #endif /* !ASSEMBLY */
-
- #define NO_PROC_ID 0xFF /* No processor magic marker */
-@@ -117,7 +100,6 @@ extern inline int safe_smp_processor_id(
- #ifndef CONFIG_SMP
- #define stack_smp_processor_id() 0
- #define safe_smp_processor_id() 0
--#define for_each_cpu(x) (x)=0;
- #define cpu_logical_map(x) (x)
- #else
- #include <asm/thread_info.h>
---- linux-2.6.0-test1/include/asm-x86_64/topology.h 2003-06-14 12:18:25.000000000 -0700
-+++ 25/include/asm-x86_64/topology.h 2003-07-19 17:04:07.000000000 -0700
-@@ -8,13 +8,13 @@
- /* Map the K8 CPU local memory controllers to a simple 1:1 CPU:NODE topology */
-
- extern int fake_node;
--extern unsigned long cpu_online_map;
-+extern cpumask_t cpu_online_map;
-
- #define cpu_to_node(cpu) (fake_node ? 0 : (cpu))
- #define memblk_to_node(memblk) (fake_node ? 0 : (memblk))
- #define parent_node(node) (node)
- #define node_to_first_cpu(node) (fake_node ? 0 : (node))
--#define node_to_cpu_mask(node) (fake_node ? cpu_online_map : (1UL << (node)))
-+#define node_to_cpu_mask(node) (fake_node ? cpu_online_map : cpumask_of_cpu(node))
- #define node_to_memblk(node) (node)
-
- #define NODE_BALANCE_RATE 30 /* CHECKME */
---- linux-2.6.0-test1/include/linux/aio.h 2003-06-26 22:07:26.000000000 -0700
-+++ 25/include/linux/aio.h 2003-07-19 17:07:03.000000000 -0700
-@@ -54,7 +54,7 @@ struct kiocb {
- struct file *ki_filp;
- struct kioctx *ki_ctx; /* may be NULL for sync ops */
- int (*ki_cancel)(struct kiocb *, struct io_event *);
-- long (*ki_retry)(struct kiocb *);
-+ ssize_t (*ki_retry)(struct kiocb *);
-
- struct list_head ki_list; /* the aio core uses this
- * for cancellation */
-@@ -63,6 +63,16 @@ struct kiocb {
- __u64 ki_user_data; /* user's data for completion */
- loff_t ki_pos;
-
-+ /* State that we remember to be able to restart/retry */
-+ unsigned short ki_opcode;
-+ size_t ki_nbytes; /* copy of iocb->aio_nbytes */
-+ char *ki_buf; /* remaining iocb->aio_buf */
-+ size_t ki_left; /* remaining bytes */
-+ wait_queue_t ki_wait;
-+ long ki_retried; /* just for testing */
-+ long ki_kicked; /* just for testing */
-+ long ki_queued; /* just for testing */
-+
- char private[KIOCB_PRIVATE_SIZE];
- };
-
-@@ -77,6 +87,8 @@ struct kiocb {
- (x)->ki_ctx = &tsk->active_mm->default_kioctx; \
- (x)->ki_cancel = NULL; \
- (x)->ki_user_obj = tsk; \
-+ (x)->ki_user_data = 0; \
-+ init_wait((&(x)->ki_wait)); \
- } while (0)
-
- #define AIO_RING_MAGIC 0xa10a10a1
-@@ -159,6 +171,17 @@ int FASTCALL(io_submit_one(struct kioctx
- #define get_ioctx(kioctx) do { if (unlikely(atomic_read(&(kioctx)->users) <= 0)) BUG(); atomic_inc(&(kioctx)->users); } while (0)
- #define put_ioctx(kioctx) do { if (unlikely(atomic_dec_and_test(&(kioctx)->users))) __put_ioctx(kioctx); else if (unlikely(atomic_read(&(kioctx)->users) < 0)) BUG(); } while (0)
-
-+#define in_aio() !is_sync_wait(current->io_wait)
-+/* may be used for debugging */
-+#define warn_if_async() if (in_aio()) {\
-+ printk(KERN_ERR "%s(%s:%d) called in async context!\n", \
-+ __FUNCTION__, __FILE__, __LINE__); \
-+ dump_stack(); \
-+ }
-+
-+#define io_wait_to_kiocb(wait) container_of(wait, struct kiocb, ki_wait)
-+#define is_retried_kiocb(iocb) ((iocb)->ki_retried > 1)
-+
- #include <linux/aio_abi.h>
-
- static inline struct kiocb *list_kiocb(struct list_head *h)
---- linux-2.6.0-test1/include/linux/atmdev.h 2003-07-02 14:53:18.000000000 -0700
-+++ 25/include/linux/atmdev.h 2003-07-19 17:03:51.000000000 -0700
-@@ -252,6 +252,7 @@ enum {
- ATM_VF_SESSION, /* VCC is p2mp session control descriptor */
- ATM_VF_HASSAP, /* SAP has been set */
- ATM_VF_CLOSE, /* asynchronous close - treat like VF_RELEASED*/
-+ ATM_VF_WAITING, /* waiting for reply from sigd */
- };
-
-
-@@ -291,14 +292,11 @@ struct atm_vcc {
- void *dev_data; /* per-device data */
- void *proto_data; /* per-protocol data */
- struct k_atm_aal_stats *stats; /* pointer to AAL stats group */
-- wait_queue_head_t sleep; /* if socket is busy */
- struct sock *sk; /* socket backpointer */
- /* SVC part --- may move later ------------------------------------- */
- short itf; /* interface number */
- struct sockaddr_atmsvc local;
- struct sockaddr_atmsvc remote;
-- void (*callback)(struct atm_vcc *vcc);
-- int reply; /* also used by ATMTCP */
- /* Multipoint part ------------------------------------------------- */
- struct atm_vcc *session; /* session VCC descriptor */
- /* Other stuff ----------------------------------------------------- */
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/linux/bitmap.h 2003-07-19 17:04:13.000000000 -0700
-@@ -0,0 +1,159 @@
-+#ifndef __LINUX_BITMAP_H
-+#define __LINUX_BITMAP_H
-+
-+#ifndef __ASSEMBLY__
-+
-+#include <linux/config.h>
-+#include <linux/compiler.h>
-+#include <linux/types.h>
-+#include <linux/kernel.h>
-+#include <linux/bitops.h>
-+#include <linux/string.h>
-+
-+static inline int bitmap_empty(const unsigned long *bitmap, int bits)
-+{
-+ int k, lim = bits/BITS_PER_LONG;
-+ for (k = 0; k < lim; ++k)
-+ if (bitmap[k])
-+ return 0;
-+
-+ if (bits % BITS_PER_LONG)
-+ if (bitmap[k] & ((1UL << (bits % BITS_PER_LONG)) - 1))
-+ return 0;
-+
-+ return 1;
-+}
-+
-+static inline int bitmap_full(const unsigned long *bitmap, int bits)
-+{
-+ int k, lim = bits/BITS_PER_LONG;
-+ for (k = 0; k < lim; ++k)
-+ if (~bitmap[k])
-+ return 0;
-+
-+ if (bits % BITS_PER_LONG)
-+ if (~bitmap[k] & ((1UL << (bits % BITS_PER_LONG)) - 1))
-+ return 0;
-+
-+ return 1;
-+}
-+
-+static inline int bitmap_equal(const unsigned long *bitmap1,
-+ unsigned long *bitmap2, int bits)
-+{
-+ int k, lim = bits/BITS_PER_LONG;;
-+ for (k = 0; k < lim; ++k)
-+ if (bitmap1[k] != bitmap2[k])
-+ return 0;
-+
-+ if (bits % BITS_PER_LONG)
-+ if ((bitmap1[k] ^ bitmap2[k]) &
-+ ((1UL << (bits % BITS_PER_LONG)) - 1))
-+ return 0;
-+
-+ return 1;
-+}
-+
-+static inline void bitmap_complement(unsigned long *bitmap, int bits)
-+{
-+ int k;
-+
-+ for (k = 0; k < BITS_TO_LONGS(bits); ++k)
-+ bitmap[k] = ~bitmap[k];
-+}
-+
-+static inline void bitmap_clear(unsigned long *bitmap, int bits)
-+{
-+ CLEAR_BITMAP((unsigned long *)bitmap, bits);
-+}
-+
-+static inline void bitmap_fill(unsigned long *bitmap, int bits)
-+{
-+ memset(bitmap, 0xff, BITS_TO_LONGS(bits)*sizeof(unsigned long));
-+}
-+
-+static inline void bitmap_copy(unsigned long *dst,
-+ const unsigned long *src, int bits)
-+{
-+ memcpy(dst, src, BITS_TO_LONGS(bits)*sizeof(unsigned long));
-+}
-+
-+static inline void bitmap_shift_right(unsigned long *dst,
-+ const unsigned long *src, int shift, int bits)
-+{
-+ int k;
-+ DECLARE_BITMAP(__shr_tmp, bits);
-+
-+ bitmap_clear(__shr_tmp, bits);
-+ for (k = 0; k < bits - shift; ++k)
-+ if (test_bit(k + shift, src))
-+ set_bit(k, __shr_tmp);
-+ bitmap_copy(dst, __shr_tmp, bits);
-+}
-+
-+static inline void bitmap_shift_left(unsigned long *dst,
-+ const unsigned long *src, int shift, int bits)
-+{
-+ int k;
-+ DECLARE_BITMAP(__shl_tmp, bits);
-+
-+ bitmap_clear(__shl_tmp, bits);
-+ for (k = bits; k >= shift; --k)
-+ if (test_bit(k - shift, src))
-+ set_bit(k, __shl_tmp);
-+ bitmap_copy(dst, __shl_tmp, bits);
-+}
-+
-+static inline void bitmap_and(unsigned long *dst, const unsigned long *bitmap1,
-+ const unsigned long *bitmap2, int bits)
-+{
-+ int k;
-+ int nr = BITS_TO_LONGS(bits);
-+
-+ for (k = 0; k < nr; k++)
-+ dst[k] = bitmap1[k] & bitmap2[k];
-+}
-+
-+static inline void bitmap_or(unsigned long *dst, const unsigned long *bitmap1,
-+ const unsigned long *bitmap2, int bits)
-+{
-+ int k;
-+ int nr = BITS_TO_LONGS(bits);
-+
-+ for (k = 0; k < nr; k++)
-+ dst[k] = bitmap1[k] | bitmap2[k];
-+}
-+
-+#if BITS_PER_LONG == 32
-+static inline int bitmap_weight(const unsigned long *bitmap, int bits)
-+{
-+ int k, w = 0, lim = bits/BITS_PER_LONG;
-+
-+ for (k = 0; k < lim; k++)
-+ w += hweight32(bitmap[k]);
-+
-+ if (bits % BITS_PER_LONG)
-+ w += hweight32(bitmap[k] &
-+ ((1UL << (bits % BITS_PER_LONG)) - 1));
-+
-+ return w;
-+}
-+#else
-+static inline int bitmap_weight(const unsigned long *bitmap, int bits)
-+{
-+ int k, w = 0, lim = bits/BITS_PER_LONG;
-+
-+ for (k = 0; k < lim; k++)
-+ w += hweight64(bitmap[k]);
-+
-+ if (bits % BITS_PER_LONG)
-+ w += hweight64(bitmap[k] &
-+ ((1UL << (bits % BITS_PER_LONG)) - 1));
-+
-+ return w;
-+}
-+#endif
-+
-+#endif /* __ASSEMBLY__ */
-+
-+#endif /* __LINUX_BITMAP_H */
---- linux-2.6.0-test1/include/linux/blkdev.h 2003-07-10 18:50:32.000000000 -0700
-+++ 25/include/linux/blkdev.h 2003-07-19 17:06:49.000000000 -0700
-@@ -44,9 +44,9 @@ struct as_io_context {
- unsigned long ttime_samples;
- unsigned long ttime_mean;
- /* Layout pattern */
-- long seek_samples;
-+ unsigned int seek_samples;
- sector_t last_request_pos;
-- sector_t seek_total;
-+ u64 seek_total;
- sector_t seek_mean;
- };
-
-@@ -491,6 +491,7 @@ extern void __blk_attempt_remerge(reques
- extern struct request *blk_get_request(request_queue_t *, int, int);
- extern void blk_put_request(struct request *);
- extern void blk_insert_request(request_queue_t *, struct request *, int, void *);
-+extern void blk_requeue_request(request_queue_t *, struct request *);
- extern void blk_plug_device(request_queue_t *);
- extern int blk_remove_plug(request_queue_t *);
- extern void blk_recount_segments(request_queue_t *, struct bio *);
-@@ -549,6 +550,7 @@ extern void blk_queue_max_phys_segments(
- extern void blk_queue_max_hw_segments(request_queue_t *, unsigned short);
- extern void blk_queue_max_segment_size(request_queue_t *, unsigned int);
- extern void blk_queue_hardsect_size(request_queue_t *, unsigned short);
-+extern void blk_queue_stack_limits(request_queue_t *t, request_queue_t *b);
- extern void blk_queue_segment_boundary(request_queue_t *, unsigned long);
- extern void blk_queue_prep_rq(request_queue_t *, prep_rq_fn *pfn);
- extern void blk_queue_merge_bvec(request_queue_t *, merge_bvec_fn *);
-@@ -574,6 +576,7 @@ extern void blk_queue_free_tags(request_
- extern int blk_queue_resize_tags(request_queue_t *, int);
- extern void blk_queue_invalidate_tags(request_queue_t *);
- extern void blk_congestion_wait(int rw, long timeout);
-+extern int blk_congestion_wait_wq(int rw, long timeout, wait_queue_t *wait);
-
- extern void blk_rq_bio_prep(request_queue_t *, struct request *, struct bio *);
- extern void blk_rq_prep_restart(struct request *);
---- linux-2.6.0-test1/include/linux/blk.h 2003-06-14 12:18:30.000000000 -0700
-+++ 25/include/linux/blk.h 2003-07-19 17:03:51.000000000 -0700
-@@ -1,2 +1,2 @@
--/* this file is obsolete, please use <linux/blkdev.h> instead */
-+#warning this file is obsolete, please use <linux/blkdev.h> instead
- #include <linux/blkdev.h>
---- linux-2.6.0-test1/include/linux/buffer_head.h 2003-07-10 18:50:32.000000000 -0700
-+++ 25/include/linux/buffer_head.h 2003-07-19 17:07:00.000000000 -0700
-@@ -158,6 +158,7 @@ void mark_buffer_async_write(struct buff
- void invalidate_bdev(struct block_device *, int);
- int sync_blockdev(struct block_device *bdev);
- void __wait_on_buffer(struct buffer_head *);
-+int __wait_on_buffer_wq(struct buffer_head *, wait_queue_t *wait);
- wait_queue_head_t *bh_waitq_head(struct buffer_head *bh);
- void wake_up_buffer(struct buffer_head *bh);
- int fsync_bdev(struct block_device *);
-@@ -169,6 +170,8 @@ void __brelse(struct buffer_head *);
- void __bforget(struct buffer_head *);
- void __breadahead(struct block_device *, sector_t block, int size);
- struct buffer_head *__bread(struct block_device *, sector_t block, int size);
-+struct buffer_head *__bread_wq(struct block_device *, sector_t block,
-+ int size, wait_queue_t *wait);
- struct buffer_head *alloc_buffer_head(int gfp_flags);
- void free_buffer_head(struct buffer_head * bh);
- void FASTCALL(unlock_buffer(struct buffer_head *bh));
-@@ -203,11 +206,6 @@ int nobh_prepare_write(struct page*, uns
- int nobh_commit_write(struct file *, struct page *, unsigned, unsigned);
- int nobh_truncate_page(struct address_space *, loff_t);
-
--#define OSYNC_METADATA (1<<0)
--#define OSYNC_DATA (1<<1)
--#define OSYNC_INODE (1<<2)
--int generic_osync_inode(struct inode *, int);
--
-
- /*
- * inline definitions
-@@ -226,13 +224,13 @@ static inline void put_bh(struct buffer_
-
- static inline void brelse(struct buffer_head *bh)
- {
-- if (bh)
-+ if (bh && !IS_ERR(bh))
- __brelse(bh);
- }
-
- static inline void bforget(struct buffer_head *bh)
- {
-- if (bh)
-+ if (bh && !IS_ERR(bh))
- __bforget(bh);
- }
-
-@@ -249,7 +247,12 @@ sb_breadahead(struct super_block *sb, se
- }
-
- static inline struct buffer_head *
--sb_getblk(struct super_block *sb, sector_t block)
-+sb_bread_wq(struct super_block *sb, sector_t block, wait_queue_t *wait)
-+{
-+ return __bread_wq(sb->s_bdev, block, sb->s_blocksize, wait);
-+}
-+
-+static inline struct buffer_head *sb_getblk(struct super_block *sb, sector_t block)
- {
- return __getblk(sb->s_bdev, block, sb->s_blocksize);
- }
-@@ -273,16 +276,34 @@ map_bh(struct buffer_head *bh, struct su
- * __wait_on_buffer() just to trip a debug check. Because debug code in inline
- * functions is bloaty.
- */
--static inline void wait_on_buffer(struct buffer_head *bh)
-+
-+static inline int wait_on_buffer_wq(struct buffer_head *bh, wait_queue_t *wait)
- {
- if (buffer_locked(bh) || atomic_read(&bh->b_count) == 0)
-- __wait_on_buffer(bh);
-+ return __wait_on_buffer_wq(bh, wait);
-+
-+ return 0;
-+}
-+
-+static inline void wait_on_buffer(struct buffer_head *bh)
-+{
-+ wait_on_buffer_wq(bh, NULL);
-+}
-+
-+static inline int lock_buffer_wq(struct buffer_head *bh, wait_queue_t *wait)
-+{
-+ while (test_set_buffer_locked(bh)) {
-+ int ret = __wait_on_buffer_wq(bh, wait);
-+ if (ret)
-+ return ret;
-+ }
-+
-+ return 0;
- }
-
- static inline void lock_buffer(struct buffer_head *bh)
- {
-- while (test_set_buffer_locked(bh))
-- __wait_on_buffer(bh);
-+ lock_buffer_wq(bh, NULL);
- }
-
- #endif /* _LINUX_BUFFER_HEAD_H */
---- linux-2.6.0-test1/include/linux/compiler.h 2003-07-10 18:50:32.000000000 -0700
-+++ 25/include/linux/compiler.h 2003-07-19 17:04:50.000000000 -0700
-@@ -78,6 +78,6 @@
- shouldn't recognize the original var, and make assumptions about it */
- #define RELOC_HIDE(ptr, off) \
- ({ unsigned long __ptr; \
-- __asm__ ("" : "=g"(__ptr) : "0"(ptr)); \
-+ __asm__ ("" : "=r"(__ptr) : "0"(ptr)); \
- (typeof(ptr)) (__ptr + (off)); })
- #endif /* __LINUX_COMPILER_H */
---- linux-2.6.0-test1/include/linux/config.h 2003-06-26 22:07:26.000000000 -0700
-+++ 25/include/linux/config.h 2003-07-19 17:04:53.000000000 -0700
-@@ -2,5 +2,8 @@
- #define _LINUX_CONFIG_H
-
- #include <linux/autoconf.h>
-+#if defined(__i386__) && !defined(IN_BOOTLOADER)
-+#include <asm/kgdb.h>
-+#endif
-
- #endif
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/linux/cpumask.h 2003-07-19 17:04:07.000000000 -0700
-@@ -0,0 +1,62 @@
-+#ifndef __LINUX_CPUMASK_H
-+#define __LINUX_CPUMASK_H
-+
-+#include <linux/config.h>
-+#include <linux/kernel.h>
-+#include <linux/threads.h>
-+#include <linux/types.h>
-+#include <linux/bitmap.h>
-+
-+#define CPU_ARRAY_SIZE BITS_TO_LONGS(NR_CPUS)
-+
-+struct cpumask
-+{
-+ unsigned long mask[CPU_ARRAY_SIZE];
-+};
-+
-+typedef struct cpumask cpumask_t;
-+
-+#ifdef CONFIG_SMP
-+#include <asm-generic/cpumask_array.h>
-+#else
-+#include <asm-generic/cpumask_up.h>
-+#endif
-+
-+#if NR_CPUS <= 4*BITS_PER_LONG
-+#include <asm-generic/cpumask_const_value.h>
-+#else
-+#include <asm-generic/cpumask_const_reference.h>
-+#endif
-+
-+
-+#ifdef CONFIG_SMP
-+
-+extern cpumask_t cpu_online_map;
-+
-+#define num_online_cpus() cpus_weight(cpu_online_map)
-+#define cpu_online(cpu) cpu_isset(cpu, cpu_online_map)
-+#else
-+#define cpu_online_map cpumask_of_cpu(0)
-+#define num_online_cpus() 1
-+#define cpu_online(cpu) ({ BUG_ON((cpu) != 0); 1; })
-+#endif
-+
-+static inline int next_online_cpu(int cpu, cpumask_t map)
-+{
-+ do
-+ cpu = next_cpu_const(cpu, map);
-+ while (cpu < NR_CPUS && !cpu_online(cpu));
-+ return cpu;
-+}
-+
-+#define for_each_cpu(cpu, map) \
-+ for (cpu = first_cpu_const(map); \
-+ cpu < NR_CPUS; \
-+ cpu = next_cpu_const(cpu,map))
-+
-+#define for_each_online_cpu(cpu, map) \
-+ for (cpu = first_cpu_const(map); \
-+ cpu < NR_CPUS; \
-+ cpu = next_online_cpu(cpu,map))
-+
-+#endif /* __LINUX_CPUMASK_H */
---- linux-2.6.0-test1/include/linux/dm-ioctl.h 2003-06-14 12:17:56.000000000 -0700
-+++ 25/include/linux/dm-ioctl.h 2003-07-19 17:03:51.000000000 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (C) 2001 Sistina Software (UK) Limited.
-+ * Copyright (C) 2003 Sistina Software (UK) Limited.
- *
- * This file is released under the LGPL.
- */
-@@ -7,143 +7,12 @@
- #ifndef _LINUX_DM_IOCTL_H
- #define _LINUX_DM_IOCTL_H
-
--#include <linux/types.h>
-+#include <linux/config.h>
-
--#define DM_DIR "mapper" /* Slashes not supported */
--#define DM_MAX_TYPE_NAME 16
--#define DM_NAME_LEN 128
--#define DM_UUID_LEN 129
-+#ifdef CONFIG_DM_IOCTL_V4
-+#include "dm-ioctl-v4.h"
-+#else
-+#include "dm-ioctl-v1.h"
-+#endif
-
--/*
-- * Implements a traditional ioctl interface to the device mapper.
-- */
--
--/*
-- * All ioctl arguments consist of a single chunk of memory, with
-- * this structure at the start. If a uuid is specified any
-- * lookup (eg. for a DM_INFO) will be done on that, *not* the
-- * name.
-- */
--struct dm_ioctl {
-- /*
-- * The version number is made up of three parts:
-- * major - no backward or forward compatibility,
-- * minor - only backwards compatible,
-- * patch - both backwards and forwards compatible.
-- *
-- * All clients of the ioctl interface should fill in the
-- * version number of the interface that they were
-- * compiled with.
-- *
-- * All recognised ioctl commands (ie. those that don't
-- * return -ENOTTY) fill out this field, even if the
-- * command failed.
-- */
-- uint32_t version[3]; /* in/out */
-- uint32_t data_size; /* total size of data passed in
-- * including this struct */
--
-- uint32_t data_start; /* offset to start of data
-- * relative to start of this struct */
--
-- uint32_t target_count; /* in/out */
-- uint32_t open_count; /* out */
-- uint32_t flags; /* in/out */
--
-- __kernel_dev_t dev; /* in/out */
--
-- char name[DM_NAME_LEN]; /* device name */
-- char uuid[DM_UUID_LEN]; /* unique identifier for
-- * the block device */
--};
--
--/*
-- * Used to specify tables. These structures appear after the
-- * dm_ioctl.
-- */
--struct dm_target_spec {
-- int32_t status; /* used when reading from kernel only */
-- uint64_t sector_start;
-- uint32_t length;
--
-- /*
-- * Offset in bytes (from the start of this struct) to
-- * next target_spec.
-- */
-- uint32_t next;
--
-- char target_type[DM_MAX_TYPE_NAME];
--
-- /*
-- * Parameter string starts immediately after this object.
-- * Be careful to add padding after string to ensure correct
-- * alignment of subsequent dm_target_spec.
-- */
--};
--
--/*
-- * Used to retrieve the target dependencies.
-- */
--struct dm_target_deps {
-- uint32_t count;
--
-- __kernel_dev_t dev[0]; /* out */
--};
--
--/*
-- * If you change this make sure you make the corresponding change
-- * to dm-ioctl.c:lookup_ioctl()
-- */
--enum {
-- /* Top level cmds */
-- DM_VERSION_CMD = 0,
-- DM_REMOVE_ALL_CMD,
--
-- /* device level cmds */
-- DM_DEV_CREATE_CMD,
-- DM_DEV_REMOVE_CMD,
-- DM_DEV_RELOAD_CMD,
-- DM_DEV_RENAME_CMD,
-- DM_DEV_SUSPEND_CMD,
-- DM_DEV_DEPS_CMD,
-- DM_DEV_STATUS_CMD,
--
-- /* target level cmds */
-- DM_TARGET_STATUS_CMD,
-- DM_TARGET_WAIT_CMD
--};
--
--#define DM_IOCTL 0xfd
--
--#define DM_VERSION _IOWR(DM_IOCTL, DM_VERSION_CMD, struct dm_ioctl)
--#define DM_REMOVE_ALL _IOWR(DM_IOCTL, DM_REMOVE_ALL_CMD, struct dm_ioctl)
--
--#define DM_DEV_CREATE _IOWR(DM_IOCTL, DM_DEV_CREATE_CMD, struct dm_ioctl)
--#define DM_DEV_REMOVE _IOWR(DM_IOCTL, DM_DEV_REMOVE_CMD, struct dm_ioctl)
--#define DM_DEV_RELOAD _IOWR(DM_IOCTL, DM_DEV_RELOAD_CMD, struct dm_ioctl)
--#define DM_DEV_SUSPEND _IOWR(DM_IOCTL, DM_DEV_SUSPEND_CMD, struct dm_ioctl)
--#define DM_DEV_RENAME _IOWR(DM_IOCTL, DM_DEV_RENAME_CMD, struct dm_ioctl)
--#define DM_DEV_DEPS _IOWR(DM_IOCTL, DM_DEV_DEPS_CMD, struct dm_ioctl)
--#define DM_DEV_STATUS _IOWR(DM_IOCTL, DM_DEV_STATUS_CMD, struct dm_ioctl)
--
--#define DM_TARGET_STATUS _IOWR(DM_IOCTL, DM_TARGET_STATUS_CMD, struct dm_ioctl)
--#define DM_TARGET_WAIT _IOWR(DM_IOCTL, DM_TARGET_WAIT_CMD, struct dm_ioctl)
--
--#define DM_VERSION_MAJOR 1
--#define DM_VERSION_MINOR 0
--#define DM_VERSION_PATCHLEVEL 6
--#define DM_VERSION_EXTRA "-ioctl (2002-10-15)"
--
--/* Status bits */
--#define DM_READONLY_FLAG 0x00000001
--#define DM_SUSPEND_FLAG 0x00000002
--#define DM_EXISTS_FLAG 0x00000004
--#define DM_PERSISTENT_DEV_FLAG 0x00000008
--
--/*
-- * Flag passed into ioctl STATUS command to get table information
-- * rather than current status.
-- */
--#define DM_STATUS_TABLE_FLAG 0x00000010
--
--#endif /* _LINUX_DM_IOCTL_H */
-+#endif
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/linux/dm-ioctl-v1.h 2003-07-19 17:03:51.000000000 -0700
-@@ -0,0 +1,149 @@
-+/*
-+ * Copyright (C) 2001 Sistina Software (UK) Limited.
-+ *
-+ * This file is released under the LGPL.
-+ */
-+
-+#ifndef _LINUX_DM_IOCTL_V1_H
-+#define _LINUX_DM_IOCTL_V1_H
-+
-+#include <linux/types.h>
-+
-+#define DM_DIR "mapper" /* Slashes not supported */
-+#define DM_MAX_TYPE_NAME 16
-+#define DM_NAME_LEN 128
-+#define DM_UUID_LEN 129
-+
-+/*
-+ * Implements a traditional ioctl interface to the device mapper.
-+ */
-+
-+/*
-+ * All ioctl arguments consist of a single chunk of memory, with
-+ * this structure at the start. If a uuid is specified any
-+ * lookup (eg. for a DM_INFO) will be done on that, *not* the
-+ * name.
-+ */
-+struct dm_ioctl {
-+ /*
-+ * The version number is made up of three parts:
-+ * major - no backward or forward compatibility,
-+ * minor - only backwards compatible,
-+ * patch - both backwards and forwards compatible.
-+ *
-+ * All clients of the ioctl interface should fill in the
-+ * version number of the interface that they were
-+ * compiled with.
-+ *
-+ * All recognised ioctl commands (ie. those that don't
-+ * return -ENOTTY) fill out this field, even if the
-+ * command failed.
-+ */
-+ uint32_t version[3]; /* in/out */
-+ uint32_t data_size; /* total size of data passed in
-+ * including this struct */
-+
-+ uint32_t data_start; /* offset to start of data
-+ * relative to start of this struct */
-+
-+ uint32_t target_count; /* in/out */
-+ uint32_t open_count; /* out */
-+ uint32_t flags; /* in/out */
-+
-+ __kernel_dev_t dev; /* in/out */
-+
-+ char name[DM_NAME_LEN]; /* device name */
-+ char uuid[DM_UUID_LEN]; /* unique identifier for
-+ * the block device */
-+};
-+
-+/*
-+ * Used to specify tables. These structures appear after the
-+ * dm_ioctl.
-+ */
-+struct dm_target_spec {
-+ int32_t status; /* used when reading from kernel only */
-+ uint64_t sector_start;
-+ uint32_t length;
-+
-+ /*
-+ * Offset in bytes (from the start of this struct) to
-+ * next target_spec.
-+ */
-+ uint32_t next;
-+
-+ char target_type[DM_MAX_TYPE_NAME];
-+
-+ /*
-+ * Parameter string starts immediately after this object.
-+ * Be careful to add padding after string to ensure correct
-+ * alignment of subsequent dm_target_spec.
-+ */
-+};
-+
-+/*
-+ * Used to retrieve the target dependencies.
-+ */
-+struct dm_target_deps {
-+ uint32_t count;
-+
-+ __kernel_dev_t dev[0]; /* out */
-+};
-+
-+/*
-+ * If you change this make sure you make the corresponding change
-+ * to dm-ioctl.c:lookup_ioctl()
-+ */
-+enum {
-+ /* Top level cmds */
-+ DM_VERSION_CMD = 0,
-+ DM_REMOVE_ALL_CMD,
-+
-+ /* device level cmds */
-+ DM_DEV_CREATE_CMD,
-+ DM_DEV_REMOVE_CMD,
-+ DM_DEV_RELOAD_CMD,
-+ DM_DEV_RENAME_CMD,
-+ DM_DEV_SUSPEND_CMD,
-+ DM_DEV_DEPS_CMD,
-+ DM_DEV_STATUS_CMD,
-+
-+ /* target level cmds */
-+ DM_TARGET_STATUS_CMD,
-+ DM_TARGET_WAIT_CMD
-+};
-+
-+#define DM_IOCTL 0xfd
-+
-+#define DM_VERSION _IOWR(DM_IOCTL, DM_VERSION_CMD, struct dm_ioctl)
-+#define DM_REMOVE_ALL _IOWR(DM_IOCTL, DM_REMOVE_ALL_CMD, struct dm_ioctl)
-+
-+#define DM_DEV_CREATE _IOWR(DM_IOCTL, DM_DEV_CREATE_CMD, struct dm_ioctl)
-+#define DM_DEV_REMOVE _IOWR(DM_IOCTL, DM_DEV_REMOVE_CMD, struct dm_ioctl)
-+#define DM_DEV_RELOAD _IOWR(DM_IOCTL, DM_DEV_RELOAD_CMD, struct dm_ioctl)
-+#define DM_DEV_SUSPEND _IOWR(DM_IOCTL, DM_DEV_SUSPEND_CMD, struct dm_ioctl)
-+#define DM_DEV_RENAME _IOWR(DM_IOCTL, DM_DEV_RENAME_CMD, struct dm_ioctl)
-+#define DM_DEV_DEPS _IOWR(DM_IOCTL, DM_DEV_DEPS_CMD, struct dm_ioctl)
-+#define DM_DEV_STATUS _IOWR(DM_IOCTL, DM_DEV_STATUS_CMD, struct dm_ioctl)
-+
-+#define DM_TARGET_STATUS _IOWR(DM_IOCTL, DM_TARGET_STATUS_CMD, struct dm_ioctl)
-+#define DM_TARGET_WAIT _IOWR(DM_IOCTL, DM_TARGET_WAIT_CMD, struct dm_ioctl)
-+
-+#define DM_VERSION_MAJOR 1
-+#define DM_VERSION_MINOR 0
-+#define DM_VERSION_PATCHLEVEL 6
-+#define DM_VERSION_EXTRA "-ioctl (2002-10-15)"
-+
-+/* Status bits */
-+#define DM_READONLY_FLAG 0x00000001
-+#define DM_SUSPEND_FLAG 0x00000002
-+#define DM_EXISTS_FLAG 0x00000004
-+#define DM_PERSISTENT_DEV_FLAG 0x00000008
-+
-+/*
-+ * Flag passed into ioctl STATUS command to get table information
-+ * rather than current status.
-+ */
-+#define DM_STATUS_TABLE_FLAG 0x00000010
-+
-+#endif /* _LINUX_DM_IOCTL_H */
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/linux/dm-ioctl-v4.h 2003-07-19 17:03:51.000000000 -0700
-@@ -0,0 +1,237 @@
-+/*
-+ * Copyright (C) 2001 - 2003 Sistina Software (UK) Limited.
-+ *
-+ * This file is released under the LGPL.
-+ */
-+
-+#ifndef _LINUX_DM_IOCTL_V4_H
-+#define _LINUX_DM_IOCTL_V4_H
-+
-+#include <linux/types.h>
-+
-+#define DM_DIR "mapper" /* Slashes not supported */
-+#define DM_MAX_TYPE_NAME 16
-+#define DM_NAME_LEN 128
-+#define DM_UUID_LEN 129
-+
-+/*
-+ * A traditional ioctl interface for the device mapper.
-+ *
-+ * Each device can have two tables associated with it, an
-+ * 'active' table which is the one currently used by io passing
-+ * through the device, and an 'inactive' one which is a table
-+ * that is being prepared as a replacement for the 'active' one.
-+ *
-+ * DM_VERSION:
-+ * Just get the version information for the ioctl interface.
-+ *
-+ * DM_REMOVE_ALL:
-+ * Remove all dm devices, destroy all tables. Only really used
-+ * for debug.
-+ *
-+ * DM_LIST_DEVICES:
-+ * Get a list of all the dm device names.
-+ *
-+ * DM_DEV_CREATE:
-+ * Create a new device, neither the 'active' or 'inactive' table
-+ * slots will be filled. The device will be in suspended state
-+ * after creation, however any io to the device will get errored
-+ * since it will be out-of-bounds.
-+ *
-+ * DM_DEV_REMOVE:
-+ * Remove a device, destroy any tables.
-+ *
-+ * DM_DEV_RENAME:
-+ * Rename a device.
-+ *
-+ * DM_SUSPEND:
-+ * This performs both suspend and resume, depending which flag is
-+ * passed in.
-+ * Suspend: This command will not return until all pending io to
-+ * the device has completed. Further io will be deferred until
-+ * the device is resumed.
-+ * Resume: It is no longer an error to issue this command on an
-+ * unsuspended device. If a table is present in the 'inactive'
-+ * slot, it will be moved to the active slot, then the old table
-+ * from the active slot will be _destroyed_. Finally the device
-+ * is resumed.
-+ *
-+ * DM_DEV_STATUS:
-+ * Retrieves the status for the table in the 'active' slot.
-+ *
-+ * DM_DEV_WAIT:
-+ * Wait for a significant event to occur to the device. This
-+ * could either be caused by an event triggered by one of the
-+ * targets of the table in the 'active' slot, or a table change.
-+ *
-+ * DM_TABLE_LOAD:
-+ * Load a table into the 'inactive' slot for the device. The
-+ * device does _not_ need to be suspended prior to this command.
-+ *
-+ * DM_TABLE_CLEAR:
-+ * Destroy any table in the 'inactive' slot (ie. abort).
-+ *
-+ * DM_TABLE_DEPS:
-+ * Return a set of device dependencies for the 'active' table.
-+ *
-+ * DM_TABLE_STATUS:
-+ * Return the targets status for the 'active' table.
-+ */
-+
-+/*
-+ * All ioctl arguments consist of a single chunk of memory, with
-+ * this structure at the start. If a uuid is specified any
-+ * lookup (eg. for a DM_INFO) will be done on that, *not* the
-+ * name.
-+ */
-+struct dm_ioctl {
-+ /*
-+ * The version number is made up of three parts:
-+ * major - no backward or forward compatibility,
-+ * minor - only backwards compatible,
-+ * patch - both backwards and forwards compatible.
-+ *
-+ * All clients of the ioctl interface should fill in the
-+ * version number of the interface that they were
-+ * compiled with.
-+ *
-+ * All recognised ioctl commands (ie. those that don't
-+ * return -ENOTTY) fill out this field, even if the
-+ * command failed.
-+ */
-+ uint32_t version[3]; /* in/out */
-+ uint32_t data_size; /* total size of data passed in
-+ * including this struct */
-+
-+ uint32_t data_start; /* offset to start of data
-+ * relative to start of this struct */
-+
-+ uint32_t target_count; /* in/out */
-+ int32_t open_count; /* out */
-+ uint32_t flags; /* in/out */
-+ uint32_t event_nr; /* in/out */
-+ uint32_t padding;
-+
-+ uint64_t dev; /* in/out */
-+
-+ char name[DM_NAME_LEN]; /* device name */
-+ char uuid[DM_UUID_LEN]; /* unique identifier for
-+ * the block device */
-+};
-+
-+/*
-+ * Used to specify tables. These structures appear after the
-+ * dm_ioctl.
-+ */
-+struct dm_target_spec {
-+ uint64_t sector_start;
-+ uint64_t length;
-+ int32_t status; /* used when reading from kernel only */
-+
-+ /*
-+ * Offset in bytes (from the start of this struct) to
-+ * next target_spec.
-+ */
-+ uint32_t next;
-+
-+ char target_type[DM_MAX_TYPE_NAME];
-+
-+ /*
-+ * Parameter string starts immediately after this object.
-+ * Be careful to add padding after string to ensure correct
-+ * alignment of subsequent dm_target_spec.
-+ */
-+};
-+
-+/*
-+ * Used to retrieve the target dependencies.
-+ */
-+struct dm_target_deps {
-+ uint32_t count; /* Array size */
-+ uint32_t padding; /* unused */
-+ uint64_t dev[0]; /* out */
-+};
-+
-+/*
-+ * Used to get a list of all dm devices.
-+ */
-+struct dm_name_list {
-+ uint64_t dev;
-+ uint32_t next; /* offset to the next record from
-+ the _start_ of this */
-+ char name[0];
-+};
-+
-+/*
-+ * If you change this make sure you make the corresponding change
-+ * to dm-ioctl.c:lookup_ioctl()
-+ */
-+enum {
-+ /* Top level cmds */
-+ DM_VERSION_CMD = 0,
-+ DM_REMOVE_ALL_CMD,
-+ DM_LIST_DEVICES_CMD,
-+
-+ /* device level cmds */
-+ DM_DEV_CREATE_CMD,
-+ DM_DEV_REMOVE_CMD,
-+ DM_DEV_RENAME_CMD,
-+ DM_DEV_SUSPEND_CMD,
-+ DM_DEV_STATUS_CMD,
-+ DM_DEV_WAIT_CMD,
-+
-+ /* Table level cmds */
-+ DM_TABLE_LOAD_CMD,
-+ DM_TABLE_CLEAR_CMD,
-+ DM_TABLE_DEPS_CMD,
-+ DM_TABLE_STATUS_CMD,
-+};
-+
-+#define DM_IOCTL 0xfd
-+
-+#define DM_VERSION _IOWR(DM_IOCTL, DM_VERSION_CMD, struct dm_ioctl)
-+#define DM_REMOVE_ALL _IOWR(DM_IOCTL, DM_REMOVE_ALL_CMD, struct dm_ioctl)
-+#define DM_LIST_DEVICES _IOWR(DM_IOCTL, DM_LIST_DEVICES_CMD, struct dm_ioctl)
-+
-+#define DM_DEV_CREATE _IOWR(DM_IOCTL, DM_DEV_CREATE_CMD, struct dm_ioctl)
-+#define DM_DEV_REMOVE _IOWR(DM_IOCTL, DM_DEV_REMOVE_CMD, struct dm_ioctl)
-+#define DM_DEV_RENAME _IOWR(DM_IOCTL, DM_DEV_RENAME_CMD, struct dm_ioctl)
-+#define DM_DEV_SUSPEND _IOWR(DM_IOCTL, DM_DEV_SUSPEND_CMD, struct dm_ioctl)
-+#define DM_DEV_STATUS _IOWR(DM_IOCTL, DM_DEV_STATUS_CMD, struct dm_ioctl)
-+#define DM_DEV_WAIT _IOWR(DM_IOCTL, DM_DEV_WAIT_CMD, struct dm_ioctl)
-+
-+#define DM_TABLE_LOAD _IOWR(DM_IOCTL, DM_TABLE_LOAD_CMD, struct dm_ioctl)
-+#define DM_TABLE_CLEAR _IOWR(DM_IOCTL, DM_TABLE_CLEAR_CMD, struct dm_ioctl)
-+#define DM_TABLE_DEPS _IOWR(DM_IOCTL, DM_TABLE_DEPS_CMD, struct dm_ioctl)
-+#define DM_TABLE_STATUS _IOWR(DM_IOCTL, DM_TABLE_STATUS_CMD, struct dm_ioctl)
-+
-+#define DM_VERSION_MAJOR 4
-+#define DM_VERSION_MINOR 0
-+#define DM_VERSION_PATCHLEVEL 0
-+#define DM_VERSION_EXTRA "-ioctl (2003-06-04)"
-+
-+/* Status bits */
-+#define DM_READONLY_FLAG (1 << 0) /* In/Out */
-+#define DM_SUSPEND_FLAG (1 << 1) /* In/Out */
-+#define DM_PERSISTENT_DEV_FLAG (1 << 3) /* In */
-+
-+/*
-+ * Flag passed into ioctl STATUS command to get table information
-+ * rather than current status.
-+ */
-+#define DM_STATUS_TABLE_FLAG (1 << 4) /* In */
-+
-+/*
-+ * Flags that indicate whether a table is present in either of
-+ * the two table slots that a device has.
-+ */
-+#define DM_ACTIVE_PRESENT_FLAG (1 << 5) /* Out */
-+#define DM_INACTIVE_PRESENT_FLAG (1 << 6) /* Out */
-+
-+/*
-+ * Indicates that the buffer passed in wasn't big enough for the
-+ * results.
-+ */
-+#define DM_BUFFER_FULL_FLAG (1 << 8) /* Out */
-+
-+#endif /* _LINUX_DM_IOCTL_H */
---- linux-2.6.0-test1/include/linux/elevator.h 2003-07-10 18:50:32.000000000 -0700
-+++ 25/include/linux/elevator.h 2003-07-19 17:03:51.000000000 -0700
-@@ -13,6 +13,7 @@ typedef struct request *(elevator_next_r
- typedef void (elevator_add_req_fn) (request_queue_t *, struct request *, struct list_head *);
- typedef int (elevator_queue_empty_fn) (request_queue_t *);
- typedef void (elevator_remove_req_fn) (request_queue_t *, struct request *);
-+typedef void (elevator_requeue_req_fn) (request_queue_t *, struct request *);
- typedef struct request *(elevator_request_list_fn) (request_queue_t *, struct request *);
- typedef struct list_head *(elevator_get_sort_head_fn) (request_queue_t *, struct request *);
- typedef void (elevator_completed_req_fn) (request_queue_t *, struct request *);
-@@ -33,6 +34,7 @@ struct elevator_s
- elevator_next_req_fn *elevator_next_req_fn;
- elevator_add_req_fn *elevator_add_req_fn;
- elevator_remove_req_fn *elevator_remove_req_fn;
-+ elevator_requeue_req_fn *elevator_requeue_req_fn;
-
- elevator_queue_empty_fn *elevator_queue_empty_fn;
- elevator_completed_req_fn *elevator_completed_req_fn;
-@@ -64,6 +66,7 @@ extern void elv_merge_requests(request_q
- struct request *);
- extern void elv_merged_request(request_queue_t *, struct request *);
- extern void elv_remove_request(request_queue_t *, struct request *);
-+extern void elv_requeue_request(request_queue_t *, struct request *);
- extern int elv_queue_empty(request_queue_t *);
- extern struct request *elv_next_request(struct request_queue *q);
- extern struct request *elv_former_request(request_queue_t *, struct request *);
---- linux-2.6.0-test1/include/linux/elfcore.h 2003-06-14 12:18:51.000000000 -0700
-+++ 25/include/linux/elfcore.h 2003-07-19 17:03:51.000000000 -0700
-@@ -107,12 +107,12 @@ static inline int elf_core_copy_task_reg
-
- extern int dump_fpu (struct pt_regs *, elf_fpregset_t *);
-
--static inline int elf_core_copy_task_fpregs(struct task_struct *t, elf_fpregset_t *fpu)
-+static inline int elf_core_copy_task_fpregs(struct task_struct *t, struct pt_regs *regs, elf_fpregset_t *fpu)
- {
- #ifdef ELF_CORE_COPY_FPREGS
- return ELF_CORE_COPY_FPREGS(t, fpu);
- #else
-- return dump_fpu(NULL, fpu);
-+ return dump_fpu(regs, fpu);
- #endif
- }
-
---- linux-2.6.0-test1/include/linux/errno.h 2003-06-26 22:07:26.000000000 -0700
-+++ 25/include/linux/errno.h 2003-07-19 17:06:43.000000000 -0700
-@@ -22,6 +22,7 @@
- #define EBADTYPE 527 /* Type not supported by server */
- #define EJUKEBOX 528 /* Request initiated, but will not complete before timeout */
- #define EIOCBQUEUED 529 /* iocb queued, will get completion event */
-+#define EIOCBRETRY 530 /* iocb queued, will trigger a retry */
-
- #endif
-
---- linux-2.6.0-test1/include/linux/ext3_fs.h 2003-07-10 18:50:32.000000000 -0700
-+++ 25/include/linux/ext3_fs.h 2003-07-19 17:07:18.000000000 -0700
-@@ -721,7 +721,6 @@ extern int ext3_forget(handle_t *, int,
- extern struct buffer_head * ext3_getblk (handle_t *, struct inode *, long, int, int *);
- extern struct buffer_head * ext3_bread (handle_t *, struct inode *, int, int, int *);
-
--extern int ext3_get_inode_loc (struct inode *, struct ext3_iloc *);
- extern void ext3_read_inode (struct inode *);
- extern void ext3_write_inode (struct inode *, int);
- extern int ext3_setattr (struct dentry *, struct iattr *);
---- linux-2.6.0-test1/include/linux/ext3_jbd.h 2003-06-22 12:04:45.000000000 -0700
-+++ 25/include/linux/ext3_jbd.h 2003-07-19 17:03:51.000000000 -0700
-@@ -30,10 +30,11 @@
-
- #define EXT3_SINGLEDATA_TRANS_BLOCKS 8U
-
--/* Extended attributes may touch two data buffers, two bitmap buffers,
-- * and two group and summaries. */
-+/* Extended attribute operations touch at most two data buffers,
-+ * two bitmap buffers, and two group summaries, in addition to the inode
-+ * and the superblock, which are already accounted for. */
-
--#define EXT3_XATTR_TRANS_BLOCKS 8
-+#define EXT3_XATTR_TRANS_BLOCKS 6U
-
- /* Define the minimum size for a transaction which modifies data. This
- * needs to take into account the fact that we may end up modifying two
---- linux-2.6.0-test1/include/linux/fb.h 2003-06-14 12:18:06.000000000 -0700
-+++ 25/include/linux/fb.h 2003-07-19 17:04:55.000000000 -0700
-@@ -2,7 +2,6 @@
- #define _LINUX_FB_H
-
- #include <linux/tty.h>
--#include <linux/workqueue.h>
- #include <asm/types.h>
- #include <asm/io.h>
-
-@@ -326,28 +325,38 @@ struct fb_cursor {
- struct fb_image image; /* Cursor image */
- };
-
-+#ifdef __KERNEL__
-+
-+#include <linux/fs.h>
-+#include <linux/init.h>
-+#include <linux/workqueue.h>
-+#include <linux/devfs_fs_kernel.h>
-+
-+/*
-+ * The purpose of this structure is to translate data
-+ * from the hardwre independent format of fbdev to what
-+ * format the hardware needs.
-+ */
-+
- #define FB_PIXMAP_DEFAULT 1 /* used internally by fbcon */
- #define FB_PIXMAP_SYSTEM 2 /* memory is in system RAM */
- #define FB_PIXMAP_IO 4 /* memory is iomapped */
- #define FB_PIXMAP_SYNC 256 /* set if GPU can DMA */
-
- struct fb_pixmap {
-- __u8 *addr; /* pointer to memory */
-- __u32 size; /* size of buffer in bytes */
-- __u32 offset; /* current offset to buffer */
-- __u32 buf_align; /* byte alignment of each bitmap */
-- __u32 scan_align; /* alignment per scanline */
-- __u32 flags; /* see FB_PIXMAP_* */
-- /* access methods */
-- void (*outbuf)(u8 *dst, u8 *addr, unsigned int size);
-- u8 (*inbuf) (u8 *addr);
-- spinlock_t lock; /* spinlock */
-+ u8 *addr; /* pointer to memory */
-+ u32 size; /* size of buffer in bytes */
-+ u32 offset; /* current offset to buffer */
-+ u32 buf_align; /* byte alignment of each bitmap */
-+ u32 scan_align; /* alignment per scanline */
-+ u32 access_align; /* alignment per read/write */
-+ u32 flags; /* see FB_PIXMAP_* */
-+ spinlock_t lock; /* spinlock */
- atomic_t count;
-+ /* access methods */
-+ void (*outbuf)(u8 *addr, u8 *dst, unsigned int size);
-+ u8 (*inbuf) (u8 *addr);
- };
--#ifdef __KERNEL__
--
--#include <linux/fs.h>
--#include <linux/init.h>
-
- struct fb_info;
- struct vm_area_struct;
-@@ -396,24 +405,24 @@ struct fb_ops {
- };
-
- struct fb_info {
-- int node;
-- int flags;
-- int open; /* Has this been open already ? */
-+ int node;
-+ int flags;
- #define FBINFO_FLAG_MODULE 1 /* Low-level driver is a module */
-- struct fb_var_screeninfo var; /* Current var */
-- struct fb_fix_screeninfo fix; /* Current fix */
-- struct fb_monspecs monspecs; /* Current Monitor specs */
-- struct fb_cursor cursor; /* Current cursor */
-- struct work_struct queue; /* Framebuffer event queue */
-- struct fb_pixmap pixmap; /* Current pixmap */
-- struct fb_cmap cmap; /* Current cmap */
-- struct fb_ops *fbops;
-- char *screen_base; /* Virtual address */
-- struct vc_data *display_fg; /* Console visible on this display */
-- int currcon; /* Current VC. */
-- void *pseudo_palette; /* Fake palette of 16 colors */
-- /* From here on everything is device dependent */
-- void *par;
-+ struct fb_var_screeninfo var; /* Current var */
-+ struct fb_fix_screeninfo fix; /* Current fix */
-+ struct fb_monspecs monspecs; /* Current Monitor specs */
-+ struct fb_cursor cursor; /* Current cursor */
-+ struct work_struct queue; /* Framebuffer event queue */
-+ struct fb_pixmap pixmap; /* Image HW mapper */
-+ struct fb_pixmap sprite; /* Cursor HW mapper */
-+ struct fb_cmap cmap; /* Current cmap */
-+ struct fb_ops *fbops;
-+ char *screen_base; /* Virtual address */
-+ struct vc_data *display_fg; /* Console visible on this display */
-+ void *pseudo_palette; /* Fake palette of 16 colors */
-+ int currcon; /* Current VC. */
-+ /* From here on everything is device dependent */
-+ void *par;
- };
-
- #ifdef MODULE
-@@ -481,12 +490,12 @@ extern int register_framebuffer(struct f
- extern int unregister_framebuffer(struct fb_info *fb_info);
- extern int fb_prepare_logo(struct fb_info *fb_info);
- extern int fb_show_logo(struct fb_info *fb_info);
--extern u32 fb_get_buffer_offset(struct fb_info *info, u32 size);
--extern void move_buf_unaligned(struct fb_info *info, u8 *dst, u8 *src, u32 d_pitch,
-- u32 height, u32 mask, u32 shift_high, u32 shift_low,
-+extern char* fb_get_buffer_offset(struct fb_info *info, struct fb_pixmap *buf, u32 size);
-+extern void move_buf_unaligned(struct fb_info *info, struct fb_pixmap *buf, u8 *dst, u8 *src,
-+ u32 d_pitch, u32 height, u32 mask, u32 shift_high, u32 shift_low,
- u32 mod, u32 idx);
--extern void move_buf_aligned(struct fb_info *info, u8 *dst, u8 *src, u32 d_pitch,
-- u32 s_pitch, u32 height);
-+extern void move_buf_aligned(struct fb_info *info, struct fb_pixmap *buf, u8 *dst, u8 *src,
-+ u32 d_pitch, u32 s_pitch, u32 height);
- extern struct fb_info *registered_fb[FB_MAX];
- extern int num_registered_fb;
-
---- linux-2.6.0-test1/include/linux/fs.h 2003-07-13 21:44:35.000000000 -0700
-+++ 25/include/linux/fs.h 2003-07-19 17:07:03.000000000 -0700
-@@ -323,6 +323,7 @@ struct address_space {
- struct list_head i_mmap; /* list of private mappings */
- struct list_head i_mmap_shared; /* list of shared mappings */
- struct semaphore i_shared_sem; /* protect both above lists */
-+ atomic_t truncate_count; /* Cover race condition with truncate */
- unsigned long dirtied_when; /* jiffies of first page dirtying */
- int gfp_mask; /* how to allocate the pages */
- struct backing_dev_info *backing_dev_info; /* device readahead, etc */
-@@ -729,6 +730,11 @@ extern int vfs_rename(struct inode *, st
- #define DT_SOCK 12
- #define DT_WHT 14
-
-+#define OSYNC_METADATA (1<<0)
-+#define OSYNC_DATA (1<<1)
-+#define OSYNC_INODE (1<<2)
-+int generic_osync_inode(struct inode *, int);
-+
- /*
- * This is the "filldir" function type, used by readdir() to let
- * the kernel specify what kind of dirent layout it wants to have.
---- linux-2.6.0-test1/include/linux/hfs_sysdep.h 2003-06-14 12:17:58.000000000 -0700
-+++ 25/include/linux/hfs_sysdep.h 2003-07-19 17:03:51.000000000 -0700
-@@ -28,9 +28,6 @@
-
- extern struct timezone sys_tz;
-
--#undef offsetof
--#define offsetof(TYPE, MEMB) ((size_t) &((TYPE *)0)->MEMB)
--
- /* Typedefs for integer types by size and signedness */
- typedef __u8 hfs_u8;
- typedef __u16 hfs_u16;
---- linux-2.6.0-test1/include/linux/ide.h 2003-07-02 14:53:18.000000000 -0700
-+++ 25/include/linux/ide.h 2003-07-19 17:03:51.000000000 -0700
-@@ -1288,12 +1288,6 @@ extern ide_devices_t *idescsi;
- #endif
- extern int noautodma;
-
--/*
-- * We need blk.h, but we replace its end_request by our own version.
-- */
--#define IDE_DRIVER /* Toggle some magic bits in blk.h */
--#include <linux/blk.h>
--
- extern int ide_end_request (ide_drive_t *drive, int uptodate, int nrsecs);
-
- /*
---- linux-2.6.0-test1/include/linux/init_task.h 2003-06-26 22:07:26.000000000 -0700
-+++ 25/include/linux/init_task.h 2003-07-19 17:06:43.000000000 -0700
-@@ -70,7 +70,7 @@
- .prio = MAX_PRIO-20, \
- .static_prio = MAX_PRIO-20, \
- .policy = SCHED_NORMAL, \
-- .cpus_allowed = ~0UL, \
-+ .cpus_allowed = CPU_MASK_ALL, \
- .mm = NULL, \
- .active_mm = &init_mm, \
- .run_list = LIST_HEAD_INIT(tsk.run_list), \
-@@ -108,6 +108,7 @@
- .proc_lock = SPIN_LOCK_UNLOCKED, \
- .switch_lock = SPIN_LOCK_UNLOCKED, \
- .journal_info = NULL, \
-+ .io_wait = NULL, \
- }
-
-
---- linux-2.6.0-test1/include/linux/irq.h 2003-06-14 12:18:08.000000000 -0700
-+++ 25/include/linux/irq.h 2003-07-19 17:04:07.000000000 -0700
-@@ -15,6 +15,7 @@
-
- #include <linux/cache.h>
- #include <linux/spinlock.h>
-+#include <linux/cpumask.h>
-
- #include <asm/irq.h>
- #include <asm/ptrace.h>
-@@ -44,7 +45,7 @@ struct hw_interrupt_type {
- void (*disable)(unsigned int irq);
- void (*ack)(unsigned int irq);
- void (*end)(unsigned int irq);
-- void (*set_affinity)(unsigned int irq, unsigned long mask);
-+ void (*set_affinity)(unsigned int irq, cpumask_t dest);
- };
-
- typedef struct hw_interrupt_type hw_irq_controller;
---- linux-2.6.0-test1/include/linux/kdev_t.h 2003-06-26 22:07:26.000000000 -0700
-+++ 25/include/linux/kdev_t.h 2003-07-19 17:06:39.000000000 -0700
-@@ -1,82 +1,14 @@
- #ifndef _LINUX_KDEV_T_H
- #define _LINUX_KDEV_T_H
- #ifdef __KERNEL__
--/*
--As a preparation for the introduction of larger device numbers,
--we introduce a type kdev_t to hold them. No information about
--this type is known outside of this include file.
--
--Objects of type kdev_t designate a device. Outside of the kernel
--the corresponding things are objects of type dev_t - usually an
--integral type with the device major and minor in the high and low
--bits, respectively. Conversion is done by
--
--extern kdev_t to_kdev_t(int);
--
--It is up to the various file systems to decide how objects of type
--dev_t are stored on disk.
--The only other point of contact between kernel and outside world
--are the system calls stat and mknod, new versions of which will
--eventually have to be used in libc.
--
--[Unfortunately, the floppy control ioctls fail to hide the internal
--kernel structures, and the fd_device field of a struct floppy_drive_struct
--is user-visible. So, it remains a dev_t for the moment, with some ugly
--conversions in floppy.c.]
--
--Inside the kernel, we aim for a kdev_t type that is a pointer
--to a structure with information about the device (like major,
--minor, size, blocksize, sectorsize, name, read-only flag,
--struct file_operations etc.).
--
--However, for the time being we let kdev_t be almost the same as dev_t:
--
--typedef struct { unsigned short major, minor; } kdev_t;
--
--Admissible operations on an object of type kdev_t:
--- passing it along
--- comparing it for equality with another such object
--- storing it in inode->i_rdev or tty->device
--- using its bit pattern as argument in a hash function
--- finding its major and minor
--- complaining about it
--
--An object of type kdev_t is created only by the function MKDEV(),
--with the single exception of the constant 0 (no device).
--
--Right now the other information mentioned above is usually found
--in static arrays indexed by major or major,minor.
--
--An obstacle to immediately using
-- typedef struct { ... (* lots of information *) } *kdev_t
--is the case of mknod used to create a block device that the
--kernel doesn't know about at present (but first learns about
--when some module is inserted).
--
--aeb - 950811
--*/
-
-+#include <linux/types.h> /* for dev_t */
-
--/*
-- * NOTE NOTE NOTE!
-- *
-- * The kernel-internal "kdev_t" will eventually have
-- * 20 bits for minor numbers, and 12 bits for majors.
-- *
-- * HOWEVER, the external representation is still 8+8
-- * bits, and there is no way to generate the extended
-- * "kdev_t" format yet. Which is just as well, since
-- * we still use "minor" as an index into various
-- * static arrays, and they are sized for a 8-bit index.
-- */
- typedef struct {
-- unsigned short value;
-+ unsigned long long value;
- } kdev_t;
-
--#define KDEV_MINOR_BITS 8
--#define KDEV_MAJOR_BITS 8
--
--#define __mkdev(major,minor) (((major) << KDEV_MINOR_BITS) + (minor))
-+#define __mkdev(major, minor) (((unsigned long long)(major) << 32) + (minor))
-
- #define mk_kdev(major, minor) ((kdev_t) { __mkdev(major,minor) } )
-
-@@ -85,12 +17,12 @@ typedef struct {
- * internal equality comparisons and for things
- * like NFS filehandle conversion.
- */
--static inline unsigned int kdev_val(kdev_t dev)
-+static inline unsigned long long kdev_val(kdev_t dev)
- {
- return dev.value;
- }
-
--static inline kdev_t val_to_kdev(unsigned int val)
-+static inline kdev_t val_to_kdev(unsigned long long val)
- {
- kdev_t dev;
- dev.value = val;
-@@ -107,37 +39,85 @@ static inline int kdev_same(kdev_t dev1,
-
- #define kdev_none(d1) (!kdev_val(d1))
-
--/* Mask off the high bits for now.. */
--#define minor(dev) ((dev).value & 0xff)
--#define major(dev) (((dev).value >> KDEV_MINOR_BITS) & 0xff)
-+#define minor(dev) (unsigned int)((dev).value & 0xffffffff)
-+#define major(dev) (unsigned int)((dev).value >> 32)
-
- /* These are for user-level "dev_t" */
--#define MINORBITS 8
--#define MINORMASK ((1U << MINORBITS) - 1)
-+/* Going back and forth between dev and (ma,mi) is one-to-one
-+ provided ma is nonzero or ma is zero and mi is 8-bit only.
-+ Never use major 0 together with a minor larger than 255. */
-+#if 0
-+/* readable versions */
-+static inline unsigned int
-+MAJOR(dev_t dev) {
-+ return (dev & ~0xffffffffULL) ? (dev >> 32) :
-+ (dev & ~0xffff) ? (dev >> 16) : (dev >> 8);
-+}
-
--#define MAJOR(dev) ((unsigned int) ((dev) >> MINORBITS))
--#define MINOR(dev) ((unsigned int) ((dev) & MINORMASK))
--#define MKDEV(ma,mi) (((ma) << MINORBITS) | (mi))
-+static inline unsigned int
-+MINOR(dev_t dev) {
-+ return (dev & ~0xffffffffULL) ? (dev & 0xffffffff) :
-+ (dev & ~0xffff) ? (dev & 0xffff) : (dev & 0xff);
-+}
-+
-+static inline dev_t
-+MKDEV(unsigned int major, unsigned int minor) {
-+ unsigned int both = (major | minor);
-+ return ((both & ~0xffff) ? (((dev_t) major) << 32) :
-+ (both & ~0xff) ? (((dev_t) major) << 16) :
-+ (((dev_t) major) << 8) ) | minor;
-+}
-+#else
-+/* ugly macro versions */
-+#define MAJOR(dev) ((unsigned int)({ dev_t __dev = dev; \
-+ (__dev & ~0xffffffffULL) ? (__dev >> 32) : \
-+ (__dev & ~0xffff) ? (__dev >> 16) : (__dev >> 8); }))
-+#define MINOR(dev) ((unsigned int)({ dev_t __dev = dev; \
-+ (__dev & ~0xffffffffULL) ? (__dev & 0xffffffff) : \
-+ (__dev & ~0xffff) ? (__dev & 0xffff) : (__dev & 0xff); }))
-+#define constant_MKDEV(ma, mi) \
-+ ((((ma)|(mi)) & ~0xffff) ? ((ma) << 32) | (mi) : \
-+ (((ma)|(mi)) & ~0xff) ? ((ma) << 16) | (mi) : ((ma) << 8) | (mi))
-+#define MKDEV(major, minor) ({ \
-+ unsigned int __ma = major, __mi = minor, __both = (__ma | __mi); \
-+ ((sizeof(dev_t) > 4 && (__both & ~0xffff)) ? (((dev_t) __ma) << 32) : \
-+ (__both & ~0xff) ? (((dev_t) __ma) << 16) : (((dev_t) __ma) << 8) \
-+ ) | __mi; })
-+#endif
-
- /*
- * Conversion functions
- */
-
--static inline int kdev_t_to_nr(kdev_t dev)
-+static inline dev_t kdev_t_to_nr(kdev_t dev)
- {
-- return MKDEV(major(dev), minor(dev));
-+ unsigned int ma = major(dev);
-+ unsigned int mi = minor(dev);
-+ return MKDEV(ma, mi);
- }
-
--static inline kdev_t to_kdev_t(int dev)
-+static inline kdev_t to_kdev_t(dev_t dev)
- {
-- return mk_kdev(MAJOR(dev),MINOR(dev));
-+ unsigned int ma = MAJOR(dev);
-+ unsigned int mi = MINOR(dev);
-+ return mk_kdev(ma, mi);
- }
-
-+#define print_dev_t(buffer, dev) \
-+ sprintf((buffer), "%u:%u\n", MAJOR(dev), MINOR(dev))
-+
-+#define format_dev_t(buffer, dev) \
-+ ({ \
-+ sprintf(buffer, "%u:%u", MAJOR(dev), MINOR(dev)); \
-+ buffer; \
-+ })
-+
- #else /* __KERNEL__ */
-
- /*
- Some programs want their definitions of MAJOR and MINOR and MKDEV
- from the kernel sources. These must be the externally visible ones.
-+Of course such programs should be updated.
- */
- #define MAJOR(dev) ((dev)>>8)
- #define MINOR(dev) ((dev) & 0xff)
---- linux-2.6.0-test1/include/linux/kernel_stat.h 2003-07-10 18:50:32.000000000 -0700
-+++ 25/include/linux/kernel_stat.h 2003-07-19 17:03:51.000000000 -0700
-@@ -23,9 +23,7 @@ struct cpu_usage_stat {
-
- struct kernel_stat {
- struct cpu_usage_stat cpustat;
--#if !defined(CONFIG_ARCH_S390)
- unsigned int irqs[NR_IRQS];
--#endif
- };
-
- DECLARE_PER_CPU(struct kernel_stat, kstat);
-@@ -36,7 +34,6 @@ DECLARE_PER_CPU(struct kernel_stat, ksta
-
- extern unsigned long nr_context_switches(void);
-
--#if !defined(CONFIG_ARCH_S390)
- /*
- * Number of interrupts per specific IRQ source, since bootup
- */
-@@ -50,6 +47,5 @@ static inline int kstat_irqs(int irq)
-
- return sum;
- }
--#endif
-
- #endif /* _LINUX_KERNEL_STAT_H */
---- linux-2.6.0-test1/include/linux/linux_logo.h 2003-06-14 12:18:05.000000000 -0700
-+++ 25/include/linux/linux_logo.h 2003-07-19 17:04:55.000000000 -0700
-@@ -16,13 +16,11 @@
-
- #include <linux/init.h>
-
--
- #define LINUX_LOGO_MONO 1 /* monochrome black/white */
- #define LINUX_LOGO_VGA16 2 /* 16 colors VGA text palette */
- #define LINUX_LOGO_CLUT224 3 /* 224 colors */
- #define LINUX_LOGO_GRAY256 4 /* 256 levels grayscale */
-
--
- struct linux_logo {
- int type; /* one of LINUX_LOGO_* */
- unsigned int width;
-@@ -32,6 +30,6 @@ struct linux_logo {
- const unsigned char *data;
- };
-
--extern const struct linux_logo *fb_find_logo(int depth);
-+extern const struct linux_logo *find_logo(int depth);
-
- #endif /* _LINUX_LINUX_LOGO_H */
---- linux-2.6.0-test1/include/linux/list.h 2003-06-26 22:07:26.000000000 -0700
-+++ 25/include/linux/list.h 2003-07-19 17:06:35.000000000 -0700
-@@ -142,8 +142,11 @@ static inline void __list_del(struct lis
- * Note: list_empty on entry does not return true after this, the entry is
- * in an undefined state.
- */
-+#include <linux/kernel.h> /* BUG_ON */
- static inline void list_del(struct list_head *entry)
- {
-+ BUG_ON(entry->prev->next != entry);
-+ BUG_ON(entry->next->prev != entry);
- __list_del(entry->prev, entry->next);
- entry->next = LIST_POISON1;
- entry->prev = LIST_POISON2;
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/linux/lockmeter.h 2003-07-19 17:06:40.000000000 -0700
-@@ -0,0 +1,320 @@
-+/*
-+ * Copyright (C) 1999-2002 Silicon Graphics, Inc.
-+ *
-+ * Written by John Hawkes (hawkes@sgi.com)
-+ * Based on klstat.h by Jack Steiner (steiner@sgi.com)
-+ *
-+ * Modified by Ray Bryant (raybry@us.ibm.com) Feb-Apr 2000
-+ * Changes Copyright (C) 2000 IBM, Inc.
-+ * Added save of index in spinlock_t to improve efficiency
-+ * of "hold" time reporting for spinlocks
-+ * Added support for hold time statistics for read and write
-+ * locks.
-+ * Moved machine dependent code to include/asm/lockmeter.h.
-+ *
-+ */
-+
-+#ifndef _LINUX_LOCKMETER_H
-+#define _LINUX_LOCKMETER_H
-+
-+
-+/*---------------------------------------------------
-+ * architecture-independent lockmeter.h
-+ *-------------------------------------------------*/
-+
-+/*
-+ * raybry -- version 2: added efficient hold time statistics
-+ * requires lstat recompile, so flagged as new version
-+ * raybry -- version 3: added global reader lock data
-+ * hawkes -- version 4: removed some unnecessary fields to simplify mips64 port
-+ */
-+#define LSTAT_VERSION 5
-+
-+int lstat_update(void*, void*, int);
-+int lstat_update_time(void*, void*, int, uint32_t);
-+
-+/*
-+ * Currently, the mips64 and sparc64 kernels talk to a 32-bit lockstat, so we
-+ * need to force compatibility in the inter-communication data structure.
-+ */
-+
-+#if defined(CONFIG_MIPS32_COMPAT)
-+#define TIME_T uint32_t
-+#elif defined(CONFIG_SPARC32_COMPAT)
-+#define TIME_T uint64_t
-+#else
-+#define TIME_T time_t
-+#endif
-+
-+#if defined(__KERNEL__) || (!defined(CONFIG_MIPS32_COMPAT) && !defined(CONFIG_SPARC32_COMPAT)) || (_MIPS_SZLONG==32)
-+#define POINTER void *
-+#else
-+#define POINTER int64_t
-+#endif
-+
-+/*
-+ * Values for the "action" parameter passed to lstat_update.
-+ * ZZZ - do we want a try-success status here???
-+ */
-+#define LSTAT_ACT_NO_WAIT 0
-+#define LSTAT_ACT_SPIN 1
-+#define LSTAT_ACT_REJECT 2
-+#define LSTAT_ACT_WW_SPIN 3
-+#define LSTAT_ACT_SLEPT 4 /* UNUSED */
-+
-+#define LSTAT_ACT_MAX_VALUES 4 /* NOTE: Increase to 5 if use ACT_SLEPT */
-+
-+/*
-+ * Special values for the low 2 bits of an RA passed to
-+ * lstat_update.
-+ */
-+/* we use these values to figure out what kind of lock data */
-+/* is stored in the statistics table entry at index ....... */
-+#define LSTAT_RA_SPIN 0 /* spin lock data */
-+#define LSTAT_RA_READ 1 /* read lock statistics */
-+#define LSTAT_RA_SEMA 2 /* RESERVED */
-+#define LSTAT_RA_WRITE 3 /* write lock statistics*/
-+
-+#define LSTAT_RA(n) \
-+ ((void*)( ((unsigned long)__builtin_return_address(0) & ~3) | n) )
-+
-+/*
-+ * Constants used for lock addresses in the lstat_directory
-+ * to indicate special values of the lock address.
-+ */
-+#define LSTAT_MULTI_LOCK_ADDRESS NULL
-+
-+/*
-+ * Maximum size of the lockstats tables. Increase this value
-+ * if its not big enough. (Nothing bad happens if its not
-+ * big enough although some locks will not be monitored.)
-+ * We record overflows of this quantity in lstat_control.dir_overflows
-+ *
-+ * Note: The max value here must fit into the field set
-+ * and obtained by the macro's PUT_INDEX() and GET_INDEX().
-+ * This value depends on how many bits are available in the
-+ * lock word in the particular machine implementation we are on.
-+ */
-+#define LSTAT_MAX_STAT_INDEX 2000
-+
-+/*
-+ * Size and mask for the hash table into the directory.
-+ */
-+#define LSTAT_HASH_TABLE_SIZE 4096 /* must be 2**N */
-+#define LSTAT_HASH_TABLE_MASK (LSTAT_HASH_TABLE_SIZE-1)
-+
-+#define DIRHASH(ra) ((unsigned long)(ra)>>2 & LSTAT_HASH_TABLE_MASK)
-+
-+/*
-+ * This defines an entry in the lockstat directory. It contains
-+ * information about a lock being monitored.
-+ * A directory entry only contains the lock identification -
-+ * counts on usage of the lock are kept elsewhere in a per-cpu
-+ * data structure to minimize cache line pinging.
-+ */
-+typedef struct {
-+ POINTER caller_ra; /* RA of code that set lock */
-+ POINTER lock_ptr; /* lock address */
-+ ushort next_stat_index; /* Used to link multiple locks that have the same hash table value */
-+} lstat_directory_entry_t;
-+
-+/*
-+ * A multi-dimensioned array used to contain counts for lock accesses.
-+ * The array is 3-dimensional:
-+ * - CPU number. Keep from thrashing cache lines between CPUs
-+ * - Directory entry index. Identifies the lock
-+ * - Action. Indicates what kind of contention occurred on an
-+ * access to the lock.
-+ *
-+ * The index of an entry in the directory is the same as the 2nd index
-+ * of the entry in the counts array.
-+ */
-+/*
-+ * This table contains data for spin_locks, write locks, and read locks
-+ * Not all data is used for all cases. In particular, the hold time
-+ * information is not stored here for read locks since that is a global
-+ * (e. g. cannot be separated out by return address) quantity.
-+ * See the lstat_read_lock_counts_t structure for the global read lock
-+ * hold time.
-+ */
-+typedef struct {
-+ uint64_t cum_wait_ticks; /* sum of wait times */
-+ /* for write locks, sum of time a */
-+ /* writer is waiting for a reader */
-+ int64_t cum_hold_ticks; /* cumulative sum of holds */
-+ /* not used for read mode locks */
-+ /* must be signed. ............... */
-+ uint32_t max_wait_ticks; /* max waiting time */
-+ uint32_t max_hold_ticks; /* max holding time */
-+ uint64_t cum_wait_ww_ticks; /* sum times writer waits on writer*/
-+ uint32_t max_wait_ww_ticks; /* max wait time writer vs writer */
-+ /* prev 2 only used for write locks*/
-+ uint32_t acquire_time; /* time lock acquired this CPU */
-+ uint32_t count[LSTAT_ACT_MAX_VALUES];
-+} lstat_lock_counts_t;
-+
-+typedef lstat_lock_counts_t lstat_cpu_counts_t[LSTAT_MAX_STAT_INDEX];
-+
-+/*
-+ * User request to:
-+ * - turn statistic collection on/off, or to reset
-+ */
-+#define LSTAT_OFF 0
-+#define LSTAT_ON 1
-+#define LSTAT_RESET 2
-+#define LSTAT_RELEASE 3
-+
-+#define LSTAT_MAX_READ_LOCK_INDEX 1000
-+typedef struct {
-+ POINTER lock_ptr; /* address of lock for output stats */
-+ uint32_t read_lock_count;
-+ int64_t cum_hold_ticks; /* sum of read lock hold times over */
-+ /* all callers. ....................*/
-+ uint32_t write_index; /* last write lock hash table index */
-+ uint32_t busy_periods; /* count of busy periods ended this */
-+ uint64_t start_busy; /* time this busy period started. ..*/
-+ uint64_t busy_ticks; /* sum of busy periods this lock. ..*/
-+ uint64_t max_busy; /* longest busy period for this lock*/
-+ uint32_t max_readers; /* maximum number of readers ...... */
-+#ifdef USER_MODE_TESTING
-+ rwlock_t entry_lock; /* lock for this read lock entry... */
-+ /* avoid having more than one rdr at*/
-+ /* needed for user space testing... */
-+ /* not needed for kernel 'cause it */
-+ /* is non-preemptive. ............. */
-+#endif
-+} lstat_read_lock_counts_t;
-+typedef lstat_read_lock_counts_t lstat_read_lock_cpu_counts_t[LSTAT_MAX_READ_LOCK_INDEX];
-+
-+#if defined(__KERNEL__) || defined(USER_MODE_TESTING)
-+
-+#ifndef USER_MODE_TESTING
-+#include <asm/lockmeter.h>
-+#else
-+#include "asm_newlockmeter.h"
-+#endif
-+
-+/*
-+ * Size and mask for the hash table into the directory.
-+ */
-+#define LSTAT_HASH_TABLE_SIZE 4096 /* must be 2**N */
-+#define LSTAT_HASH_TABLE_MASK (LSTAT_HASH_TABLE_SIZE-1)
-+
-+#define DIRHASH(ra) ((unsigned long)(ra)>>2 & LSTAT_HASH_TABLE_MASK)
-+
-+/*
-+ * This version eliminates the per processor lock stack. What we do is to
-+ * store the index of the lock hash structure in unused bits in the lock
-+ * itself. Then on unlock we can find the statistics record without doing
-+ * any additional hash or lock stack lookup. This works for spin_locks.
-+ * Hold time reporting is now basically as cheap as wait time reporting
-+ * so we ignore the difference between LSTAT_ON_HOLD and LSTAT_ON_WAIT
-+ * as in version 1.1.* of lockmeter.
-+ *
-+ * For rw_locks, we store the index of a global reader stats structure in
-+ * the lock and the writer index is stored in the latter structure.
-+ * For read mode locks we hash at the time of the lock to find an entry
-+ * in the directory for reader wait time and the like.
-+ * At unlock time for read mode locks, we update just the global structure
-+ * so we don't need to know the reader directory index value at unlock time.
-+ *
-+ */
-+
-+/*
-+ * Protocol to change lstat_control.state
-+ * This is complicated because we don't want the cum_hold_time for
-+ * a rw_lock to be decremented in _read_lock_ without making sure it
-+ * is incremented in _read_lock_ and vice versa. So here is the
-+ * way we change the state of lstat_control.state:
-+ * I. To Turn Statistics On
-+ * After allocating storage, set lstat_control.state non-zero.
-+ * This works because we don't start updating statistics for in use
-+ * locks until the reader lock count goes to zero.
-+ * II. To Turn Statistics Off:
-+ * (0) Disable interrupts on this CPU
-+ * (1) Seize the lstat_control.directory_lock
-+ * (2) Obtain the current value of lstat_control.next_free_read_lock_index
-+ * (3) Store a zero in lstat_control.state.
-+ * (4) Release the lstat_control.directory_lock
-+ * (5) For each lock in the read lock list up to the saved value
-+ * (well, -1) of the next_free_read_lock_index, do the following:
-+ * (a) Check validity of the stored lock address
-+ * by making sure that the word at the saved addr
-+ * has an index that matches this entry. If not
-+ * valid, then skip this entry.
-+ * (b) If there is a write lock already set on this lock,
-+ * skip to (d) below.
-+ * (c) Set a non-metered write lock on the lock
-+ * (d) set the cached INDEX in the lock to zero
-+ * (e) Release the non-metered write lock.
-+ * (6) Re-enable interrupts
-+ *
-+ * These rules ensure that a read lock will not have its statistics
-+ * partially updated even though the global lock recording state has
-+ * changed. See put_lockmeter_info() for implementation.
-+ *
-+ * The reason for (b) is that there may be write locks set on the
-+ * syscall path to put_lockmeter_info() from user space. If we do
-+ * not do this check, then we can deadlock. A similar problem would
-+ * occur if the lock was read locked by the current CPU. At the
-+ * moment this does not appear to happen.
-+ */
-+
-+/*
-+ * Main control structure for lockstat. Used to turn statistics on/off
-+ * and to maintain directory info.
-+ */
-+typedef struct {
-+ int state;
-+ spinlock_t control_lock; /* used to serialize turning statistics on/off */
-+ spinlock_t directory_lock; /* for serialize adding entries to directory */
-+ volatile int next_free_dir_index;/* next free entry in the directory */
-+ /* FIXME not all of these fields are used / needed .............. */
-+ /* the following fields represent data since */
-+ /* first "lstat on" or most recent "lstat reset" */
-+ TIME_T first_started_time; /* time when measurement first enabled */
-+ TIME_T started_time; /* time when measurement last started */
-+ TIME_T ending_time; /* time when measurement last disabled */
-+ uint64_t started_cycles64; /* cycles when measurement last started */
-+ uint64_t ending_cycles64; /* cycles when measurement last disabled */
-+ uint64_t enabled_cycles64; /* total cycles with measurement enabled */
-+ int intervals; /* number of measurement intervals recorded */
-+ /* i. e. number of times did lstat on;lstat off */
-+ lstat_directory_entry_t *dir; /* directory */
-+ int dir_overflow; /* count of times ran out of space in directory */
-+ int rwlock_overflow; /* count of times we couldn't allocate a rw block*/
-+ ushort *hashtab; /* hash table for quick dir scans */
-+ lstat_cpu_counts_t *counts[NR_CPUS]; /* Array of pointers to per-cpu stats */
-+ int next_free_read_lock_index; /* next rwlock reader (global) stats block */
-+ lstat_read_lock_cpu_counts_t *read_lock_counts[NR_CPUS]; /* per cpu read lock stats */
-+} lstat_control_t;
-+
-+#endif /* defined(__KERNEL__) || defined(USER_MODE_TESTING) */
-+
-+typedef struct {
-+ short lstat_version; /* version of the data */
-+ short state; /* the current state is returned */
-+ int maxcpus; /* Number of cpus present */
-+ int next_free_dir_index; /* index of the next free directory entry */
-+ TIME_T first_started_time; /* when measurement enabled for first time */
-+ TIME_T started_time; /* time in secs since 1969 when stats last turned on */
-+ TIME_T ending_time; /* time in secs since 1969 when stats last turned off */
-+ uint32_t cycleval; /* cycles per second */
-+#ifdef notyet
-+ void *kernel_magic_addr; /* address of kernel_magic */
-+ void *kernel_end_addr; /* contents of kernel magic (points to "end") */
-+#endif
-+ int next_free_read_lock_index; /* index of next (global) read lock stats struct */
-+ uint64_t started_cycles64; /* cycles when measurement last started */
-+ uint64_t ending_cycles64; /* cycles when stats last turned off */
-+ uint64_t enabled_cycles64; /* total cycles with measurement enabled */
-+ int intervals; /* number of measurement intervals recorded */
-+ /* i.e. number of times we did lstat on;lstat off*/
-+ int dir_overflow; /* number of times we wanted more space in directory */
-+ int rwlock_overflow; /* # of times we wanted more space in read_locks_count */
-+ struct new_utsname uts; /* info about machine where stats are measured */
-+ /* -T option of lockstat allows data to be */
-+ /* moved to another machine. ................. */
-+} lstat_user_request_t;
-+
-+#endif /* _LINUX_LOCKMETER_H */
---- linux-2.6.0-test1/include/linux/loop.h 2003-07-13 21:44:35.000000000 -0700
-+++ 25/include/linux/loop.h 2003-07-19 17:03:51.000000000 -0700
-@@ -15,7 +15,7 @@
-
- #ifdef __KERNEL__
- #include <linux/bio.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/spinlock.h>
-
- /* Possible states of device */
---- linux-2.6.0-test1/include/linux/mm.h 2003-07-10 18:50:32.000000000 -0700
-+++ 25/include/linux/mm.h 2003-07-19 17:07:16.000000000 -0700
-@@ -421,10 +421,14 @@ int copy_page_range(struct mm_struct *ds
- int zeromap_page_range(struct vm_area_struct *vma, unsigned long from,
- unsigned long size, pgprot_t prot);
-
-+extern void invalidate_mmap_range(struct address_space *mapping,
-+ loff_t const holebegin,
-+ loff_t const holelen);
- extern int vmtruncate(struct inode * inode, loff_t offset);
- extern pmd_t *FASTCALL(__pmd_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long address));
-+pmd_t *FASTCALL(__pmd_alloc_kernel(struct mm_struct *mm, pgd_t *pmd, unsigned long address));
- extern pte_t *FASTCALL(pte_alloc_kernel(struct mm_struct *mm, pmd_t *pmd, unsigned long address));
--extern pte_t *FASTCALL(pte_alloc_map(struct mm_struct *mm, pmd_t *pmd, unsigned long address));
-+pte_t *FASTCALL(pte_alloc_map(struct mm_struct *mm, pgd_t *pgd, pmd_t **pmd, unsigned long address));
- extern int install_page(struct mm_struct *mm, struct vm_area_struct *vma, unsigned long addr, struct page *page, pgprot_t prot);
- extern int handle_mm_fault(struct mm_struct *mm,struct vm_area_struct *vma, unsigned long address, int write_access);
- extern int make_pages_present(unsigned long addr, unsigned long end);
-@@ -485,12 +489,11 @@ static inline int set_page_dirty(struct
- * inlining and the symmetry break with pte_alloc_map() that does all
- * of this out-of-line.
- */
--static inline pmd_t *pmd_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long address)
--{
-- if (pgd_none(*pgd))
-- return __pmd_alloc(mm, pgd, address);
-- return pmd_offset(pgd, address);
--}
-+#define pmd_alloc_map(mm, pgd, addr) \
-+ (pgd_none(*(pgd))? __pmd_alloc(mm,pgd,addr): pmd_offset_map(pgd,addr))
-+
-+#define pmd_alloc_kernel(mm, pgd, addr) \
-+ (pgd_none(*(pgd))? __pmd_alloc_kernel(mm,pgd,addr): pmd_offset_kernel(pgd,addr))
-
- extern void free_area_init(unsigned long * zones_size);
- extern void free_area_init_node(int nid, pg_data_t *pgdat, struct page *pmap,
---- linux-2.6.0-test1/include/linux/module.h 2003-07-02 14:53:18.000000000 -0700
-+++ 25/include/linux/module.h 2003-07-19 17:03:51.000000000 -0700
-@@ -16,6 +16,7 @@
- #include <linux/kmod.h>
- #include <linux/elf.h>
- #include <linux/stringify.h>
-+#include <asm/local.h>
-
- #include <asm/module.h>
-
-@@ -171,7 +172,7 @@ void *__symbol_get_gpl(const char *symbo
-
- struct module_ref
- {
-- atomic_t count;
-+ local_t count;
- } ____cacheline_aligned;
-
- enum module_state
-@@ -276,19 +277,17 @@ struct module *module_get_kallsym(unsign
- char *type,
- char namebuf[128]);
- int is_exported(const char *name, const struct module *mod);
--#ifdef CONFIG_MODULE_UNLOAD
-
-+extern void __module_put_and_exit(struct module *mod, long code)
-+ __attribute__((noreturn));
-+#define module_put_and_exit(code) __module_put_and_exit(THIS_MODULE, code);
-+
-+#ifdef CONFIG_MODULE_UNLOAD
- unsigned int module_refcount(struct module *mod);
- void __symbol_put(const char *symbol);
- #define symbol_put(x) __symbol_put(MODULE_SYMBOL_PREFIX #x)
- void symbol_put_addr(void *addr);
-
--/* We only need protection against local interrupts. */
--#ifndef __HAVE_ARCH_LOCAL_INC
--#define local_inc(x) atomic_inc(x)
--#define local_dec(x) atomic_dec(x)
--#endif
--
- /* Sometimes we know we already have a refcount, and it's easier not
- to handle the error case (which only happens with rmmod --wait). */
- static inline void __module_get(struct module *module)
-@@ -445,6 +444,8 @@ static inline int unregister_module_noti
- return 0;
- }
-
-+#define module_put_and_exit(code) do_exit(code)
-+
- #endif /* CONFIG_MODULES */
-
- #ifdef MODULE
---- linux-2.6.0-test1/include/linux/namespace.h 2003-06-14 12:18:22.000000000 -0700
-+++ 25/include/linux/namespace.h 2003-07-19 17:03:51.000000000 -0700
-@@ -2,7 +2,7 @@
- #define _NAMESPACE_H_
- #ifdef __KERNEL__
-
--#include <linux/dcache.h>
-+#include <linux/mount.h>
- #include <linux/sched.h>
-
- struct namespace {
-@@ -14,17 +14,12 @@ struct namespace {
-
- extern void umount_tree(struct vfsmount *);
- extern int copy_namespace(int, struct task_struct *);
-+void __put_namespace(struct namespace *namespace);
-
- static inline void put_namespace(struct namespace *namespace)
- {
-- if (atomic_dec_and_test(&namespace->count)) {
-- down_write(&namespace->sem);
-- spin_lock(&dcache_lock);
-- umount_tree(namespace->root);
-- spin_unlock(&dcache_lock);
-- up_write(&namespace->sem);
-- kfree(namespace);
-- }
-+ if (atomic_dec_and_test(&namespace->count))
-+ __put_namespace(namespace);
- }
-
- static inline void exit_namespace(struct task_struct *p)
---- linux-2.6.0-test1/include/linux/netdevice.h 2003-07-10 18:50:32.000000000 -0700
-+++ 25/include/linux/netdevice.h 2003-07-19 17:03:51.000000000 -0700
-@@ -29,6 +29,7 @@
- #include <linux/if_ether.h>
- #include <linux/if_packet.h>
- #include <linux/device.h>
-+#include <linux/percpu.h>
-
- #include <asm/atomic.h>
- #include <asm/cache.h>
-@@ -544,10 +545,9 @@ struct softnet_data
- struct sk_buff *completion_queue;
-
- struct net_device backlog_dev; /* Sorry. 8) */
--} ____cacheline_aligned;
--
-+};
-
--extern struct softnet_data softnet_data[NR_CPUS];
-+DECLARE_PER_CPU(struct softnet_data,softnet_data);
-
- #define HAVE_NETIF_QUEUE
-
-@@ -555,12 +555,12 @@ static inline void __netif_schedule(stru
- {
- if (!test_and_set_bit(__LINK_STATE_SCHED, &dev->state)) {
- unsigned long flags;
-- int cpu;
-+ struct softnet_data *sd;
-
- local_irq_save(flags);
-- cpu = smp_processor_id();
-- dev->next_sched = softnet_data[cpu].output_queue;
-- softnet_data[cpu].output_queue = dev;
-+ sd = &__get_cpu_var(softnet_data);
-+ dev->next_sched = sd->output_queue;
-+ sd->output_queue = dev;
- raise_softirq_irqoff(NET_TX_SOFTIRQ);
- local_irq_restore(flags);
- }
-@@ -605,13 +605,13 @@ static inline int netif_running(const st
- static inline void dev_kfree_skb_irq(struct sk_buff *skb)
- {
- if (atomic_dec_and_test(&skb->users)) {
-- int cpu;
-+ struct softnet_data *sd;
- unsigned long flags;
-
- local_irq_save(flags);
-- cpu = smp_processor_id();
-- skb->next = softnet_data[cpu].completion_queue;
-- softnet_data[cpu].completion_queue = skb;
-+ sd = &__get_cpu_var(softnet_data);
-+ skb->next = sd->completion_queue;
-+ sd->completion_queue = skb;
- raise_softirq_irqoff(NET_TX_SOFTIRQ);
- local_irq_restore(flags);
- }
-@@ -769,12 +769,10 @@ static inline int netif_rx_schedule_prep
- static inline void __netif_rx_schedule(struct net_device *dev)
- {
- unsigned long flags;
-- int cpu;
-
- local_irq_save(flags);
-- cpu = smp_processor_id();
- dev_hold(dev);
-- list_add_tail(&dev->poll_list, &softnet_data[cpu].poll_list);
-+ list_add_tail(&dev->poll_list, &__get_cpu_var(softnet_data).poll_list);
- if (dev->quota < 0)
- dev->quota += dev->weight;
- else
-@@ -798,13 +796,11 @@ static inline int netif_rx_reschedule(st
- {
- if (netif_rx_schedule_prep(dev)) {
- unsigned long flags;
-- int cpu;
-
- dev->quota += undo;
-
- local_irq_save(flags);
-- cpu = smp_processor_id();
-- list_add_tail(&dev->poll_list, &softnet_data[cpu].poll_list);
-+ list_add_tail(&dev->poll_list, &__get_cpu_var(softnet_data).poll_list);
- __raise_softirq_irqoff(NET_RX_SOFTIRQ);
- local_irq_restore(flags);
- return 1;
---- linux-2.6.0-test1/include/linux/nfs_fs.h 2003-07-10 18:50:32.000000000 -0700
-+++ 25/include/linux/nfs_fs.h 2003-07-19 17:07:05.000000000 -0700
-@@ -172,6 +172,7 @@ struct nfs_inode {
- #define NFS_INO_ADVISE_RDPLUS 0x0002 /* advise readdirplus */
- #define NFS_INO_REVALIDATING 0x0004 /* revalidating attrs */
- #define NFS_INO_FLUSH 0x0008 /* inode is due for flushing */
-+#define NFS_INO_FAKE_ROOT 0x0080 /* root inode placeholder */
-
- static inline struct nfs_inode *NFS_I(struct inode *inode)
- {
-@@ -207,6 +208,7 @@ do { \
- #define NFS_FLAGS(inode) (NFS_I(inode)->flags)
- #define NFS_REVALIDATING(inode) (NFS_FLAGS(inode) & NFS_INO_REVALIDATING)
- #define NFS_STALE(inode) (NFS_FLAGS(inode) & NFS_INO_STALE)
-+#define NFS_FAKE_ROOT(inode) (NFS_FLAGS(inode) & NFS_INO_FAKE_ROOT)
-
- #define NFS_FILEID(inode) (NFS_I(inode)->fileid)
-
-@@ -269,7 +271,7 @@ nfs_file_cred(struct file *file)
- /*
- * linux/fs/nfs/direct.c
- */
--extern int nfs_direct_IO(int, struct file *, const struct iovec *, loff_t,
-+extern int nfs_direct_IO(int, struct kiocb *, const struct iovec *, loff_t,
- unsigned long);
-
- /*
---- linux-2.6.0-test1/include/linux/nfs_fs_sb.h 2003-06-14 12:18:52.000000000 -0700
-+++ 25/include/linux/nfs_fs_sb.h 2003-07-19 17:03:51.000000000 -0700
-@@ -9,6 +9,7 @@
- */
- struct nfs_server {
- struct rpc_clnt * client; /* RPC client handle */
-+ struct rpc_clnt * client_sys; /* 2nd handle for FSINFO */
- struct nfs_rpc_ops * rpc_ops; /* NFS protocol vector */
- struct backing_dev_info backing_dev_info;
- int flags; /* various flags */
---- linux-2.6.0-test1/include/linux/nfs_mount.h 2003-06-14 12:17:56.000000000 -0700
-+++ 25/include/linux/nfs_mount.h 2003-07-19 17:03:51.000000000 -0700
-@@ -20,7 +20,7 @@
- * mount-to-kernel version compatibility. Some of these aren't used yet
- * but here they are anyway.
- */
--#define NFS_MOUNT_VERSION 4
-+#define NFS_MOUNT_VERSION 5
-
- struct nfs_mount_data {
- int version; /* 1 */
-@@ -40,7 +40,7 @@ struct nfs_mount_data {
- int namlen; /* 2 */
- unsigned int bsize; /* 3 */
- struct nfs3_fh root; /* 4 */
-- int pseudoflavor; /* 4 */
-+ int pseudoflavor; /* 5 */
- };
-
- /* bits in the flags field */
-@@ -57,7 +57,7 @@ struct nfs_mount_data {
- #define NFS_MOUNT_NONLM 0x0200 /* 3 */
- #define NFS_MOUNT_BROKEN_SUID 0x0400 /* 4 */
- #define NFS_MOUNT_STRICTLOCK 0x1000 /* reserved for NFSv4 */
--#define NFS_MOUNT_SECFLAVOUR 0x2000 /* reserved */
-+#define NFS_MOUNT_SECFLAVOUR 0x2000 /* 5 */
- #define NFS_MOUNT_FLAGMASK 0xFFFF
-
- #endif
---- linux-2.6.0-test1/include/linux/nfs_page.h 2003-06-26 22:07:26.000000000 -0700
-+++ 25/include/linux/nfs_page.h 2003-07-19 17:07:05.000000000 -0700
-@@ -46,7 +46,6 @@ extern struct nfs_page *nfs_create_reque
- unsigned int, unsigned int);
- extern void nfs_clear_request(struct nfs_page *req);
- extern void nfs_release_request(struct nfs_page *req);
--extern void nfs_release_list(struct list_head *list);
-
-
- extern void nfs_list_add_request(struct nfs_page *, struct list_head *);
-@@ -56,7 +55,6 @@ extern int nfs_scan_list(struct list_hea
- extern int nfs_coalesce_requests(struct list_head *, struct list_head *,
- unsigned int);
- extern int nfs_wait_on_request(struct nfs_page *);
--extern int nfs_wait_for_reads(struct list_head *);
-
- extern spinlock_t nfs_wreq_lock;
-
---- linux-2.6.0-test1/include/linux/nfs_xdr.h 2003-06-26 22:07:26.000000000 -0700
-+++ 25/include/linux/nfs_xdr.h 2003-07-19 17:07:07.000000000 -0700
-@@ -591,6 +591,7 @@ struct nfs4_compound {
- #endif /* CONFIG_NFS_V4 */
-
- struct nfs_read_data {
-+ int flags;
- struct rpc_task task;
- struct inode *inode;
- struct rpc_cred *cred;
-@@ -605,6 +606,7 @@ struct nfs_read_data {
- };
-
- struct nfs_write_data {
-+ int flags;
- struct rpc_task task;
- struct inode *inode;
- struct rpc_cred *cred;
-@@ -634,16 +636,9 @@ struct nfs_rpc_ops {
- struct nfs_fh *, struct nfs_fattr *);
- int (*access) (struct inode *, struct rpc_cred *, int);
- int (*readlink)(struct inode *, struct page *);
-- int (*read) (struct inode *, struct rpc_cred *,
-- struct nfs_fattr *,
-- int, unsigned int, unsigned int,
-- struct page *, int *eofp);
-- int (*write) (struct inode *, struct rpc_cred *,
-- struct nfs_fattr *,
-- int, unsigned int, unsigned int,
-- struct page *, struct nfs_writeverf *verfp);
-- int (*commit) (struct inode *, struct nfs_fattr *,
-- unsigned long, unsigned int);
-+ int (*read) (struct nfs_read_data *);
-+ int (*write) (struct nfs_write_data *);
-+ int (*commit) (struct nfs_write_data *);
- int (*create) (struct inode *, struct qstr *, struct iattr *,
- int, struct nfs_fh *, struct nfs_fattr *);
- int (*remove) (struct inode *, struct qstr *);
---- linux-2.6.0-test1/include/linux/node.h 2003-06-14 12:18:34.000000000 -0700
-+++ 25/include/linux/node.h 2003-07-19 17:04:07.000000000 -0700
-@@ -20,9 +20,10 @@
- #define _LINUX_NODE_H_
-
- #include <linux/sysdev.h>
-+#include <linux/cpumask.h>
-
- struct node {
-- unsigned long cpumap; /* Bitmap of CPUs on the Node */
-+ cpumask_t cpumap; /* Bitmap of CPUs on the Node */
- struct sys_device sysdev;
- };
-
---- linux-2.6.0-test1/include/linux/pagemap.h 2003-06-26 22:07:26.000000000 -0700
-+++ 25/include/linux/pagemap.h 2003-07-19 17:07:00.000000000 -0700
-@@ -130,17 +130,27 @@ static inline void ___add_to_page_cache(
- extern void FASTCALL(__lock_page(struct page *page));
- extern void FASTCALL(unlock_page(struct page *page));
-
--static inline void lock_page(struct page *page)
-+
-+extern int FASTCALL(__lock_page_wq(struct page *page, wait_queue_t *wait));
-+static inline int lock_page_wq(struct page *page, wait_queue_t *wait)
- {
- if (TestSetPageLocked(page))
-- __lock_page(page);
-+ return __lock_page_wq(page, wait);
-+ else
-+ return 0;
-+}
-+
-+static inline void lock_page(struct page *page)
-+{
-+ lock_page_wq(page, NULL);
- }
-
- /*
- * This is exported only for wait_on_page_locked/wait_on_page_writeback.
- * Never use this directly!
- */
--extern void FASTCALL(wait_on_page_bit(struct page *page, int bit_nr));
-+extern int FASTCALL(wait_on_page_bit_wq(struct page *page, int bit_nr,
-+ wait_queue_t *wait));
-
- /*
- * Wait for a page to be unlocked.
-@@ -149,19 +159,33 @@ extern void FASTCALL(wait_on_page_bit(st
- * ie with increased "page->count" so that the page won't
- * go away during the wait..
- */
--static inline void wait_on_page_locked(struct page *page)
-+static inline int wait_on_page_locked_wq(struct page *page, wait_queue_t *wait)
- {
- if (PageLocked(page))
-- wait_on_page_bit(page, PG_locked);
-+ return wait_on_page_bit_wq(page, PG_locked, wait);
-+ return 0;
-+}
-+
-+static inline void wait_on_page_locked(struct page *page)
-+{
-+ wait_on_page_locked_wq(page, NULL);
- }
-
- /*
- * Wait for a page to complete writeback
- */
--static inline void wait_on_page_writeback(struct page *page)
-+
-+static inline int wait_on_page_writeback_wq(struct page *page,
-+ wait_queue_t *wait)
- {
- if (PageWriteback(page))
-- wait_on_page_bit(page, PG_writeback);
-+ return wait_on_page_bit_wq(page, PG_writeback, wait);
-+ return 0;
-+}
-+
-+static inline void wait_on_page_writeback(struct page *page)
-+{
-+ wait_on_page_writeback_wq(page, NULL);
- }
-
- extern void end_page_writeback(struct page *page);
---- linux-2.6.0-test1/include/linux/pci.h 2003-07-10 18:50:32.000000000 -0700
-+++ 25/include/linux/pci.h 2003-07-19 17:03:51.000000000 -0700
-@@ -715,7 +715,6 @@ static inline int pci_dac_set_dma_mask(s
- static inline int pci_assign_resource(struct pci_dev *dev, int i) { return -EBUSY;}
- static inline int pci_register_driver(struct pci_driver *drv) { return 0;}
- static inline void pci_unregister_driver(struct pci_driver *drv) { }
--static inline int scsi_to_pci_dma_dir(unsigned char scsi_dir) { return scsi_dir; }
- static inline int pci_find_capability (struct pci_dev *dev, int cap) {return 0; }
- static inline const struct pci_device_id *pci_match_device(const struct pci_device_id *ids, const struct pci_dev *dev) { return NULL; }
-
---- linux-2.6.0-test1/include/linux/raid/md_k.h 2003-06-26 22:07:26.000000000 -0700
-+++ 25/include/linux/raid/md_k.h 2003-07-19 17:06:39.000000000 -0700
-@@ -64,11 +64,7 @@ static inline int level_to_pers (int lev
- typedef struct mddev_s mddev_t;
- typedef struct mdk_rdev_s mdk_rdev_t;
-
--#if (MINORBITS != 8)
--#error MD does not handle bigger kdev yet
--#endif
--
--#define MAX_MD_DEVS (1<<MINORBITS) /* Max number of md dev */
-+#define MAX_MD_DEVS 256 /* Max number of md dev */
-
- /*
- * options passed in raidrun:
---- linux-2.6.0-test1/include/linux/rcupdate.h 2003-06-26 22:07:26.000000000 -0700
-+++ 25/include/linux/rcupdate.h 2003-07-19 17:04:56.000000000 -0700
-@@ -40,6 +40,7 @@
- #include <linux/spinlock.h>
- #include <linux/threads.h>
- #include <linux/percpu.h>
-+#include <linux/cpumask.h>
-
- /**
- * struct rcu_head - callback structure for use with RCU
-@@ -67,7 +68,7 @@ struct rcu_ctrlblk {
- spinlock_t mutex; /* Guard this struct */
- long curbatch; /* Current batch number. */
- long maxbatch; /* Max requested batch number. */
-- unsigned long rcu_cpu_mask; /* CPUs that need to switch in order */
-+ cpumask_t rcu_cpu_mask; /* CPUs that need to switch in order */
- /* for current batch to proceed. */
- };
-
-@@ -95,6 +96,8 @@ struct rcu_data {
- long batch; /* Batch # for current RCU batch */
- struct list_head nxtlist;
- struct list_head curlist;
-+ long nr_rcureqs;
-+ long nr_rcupdates;
- };
-
- DECLARE_PER_CPU(struct rcu_data, rcu_data);
-@@ -105,6 +108,8 @@ extern struct rcu_ctrlblk rcu_ctrlblk;
- #define RCU_batch(cpu) (per_cpu(rcu_data, (cpu)).batch)
- #define RCU_nxtlist(cpu) (per_cpu(rcu_data, (cpu)).nxtlist)
- #define RCU_curlist(cpu) (per_cpu(rcu_data, (cpu)).curlist)
-+#define RCU_nr_rcureqs(cpu) (per_cpu(rcu_data, (cpu)).nr_rcureqs)
-+#define RCU_nr_rcupdates(cpu) (per_cpu(rcu_data, (cpu)).nr_rcupdates)
-
- #define RCU_QSCTR_INVALID 0
-
-@@ -114,7 +119,7 @@ static inline int rcu_pending(int cpu)
- rcu_batch_before(RCU_batch(cpu), rcu_ctrlblk.curbatch)) ||
- (list_empty(&RCU_curlist(cpu)) &&
- !list_empty(&RCU_nxtlist(cpu))) ||
-- test_bit(cpu, &rcu_ctrlblk.rcu_cpu_mask))
-+ cpu_isset(cpu, rcu_ctrlblk.rcu_cpu_mask))
- return 1;
- else
- return 0;
---- linux-2.6.0-test1/include/linux/root_dev.h 2003-06-26 22:07:26.000000000 -0700
-+++ 25/include/linux/root_dev.h 2003-07-19 17:06:39.000000000 -0700
-@@ -1,18 +1,16 @@
- #ifndef _ROOT_DEV_H_
- #define _ROOT_DEV_H_
-
--enum {
-- Root_NFS = MKDEV(UNNAMED_MAJOR, 255),
-- Root_RAM0 = MKDEV(RAMDISK_MAJOR, 0),
-- Root_RAM1 = MKDEV(RAMDISK_MAJOR, 1),
-- Root_FD0 = MKDEV(FLOPPY_MAJOR, 0),
-- Root_HDA1 = MKDEV(IDE0_MAJOR, 1),
-- Root_HDA2 = MKDEV(IDE0_MAJOR, 2),
-- Root_SDA1 = MKDEV(SCSI_DISK0_MAJOR, 1),
-- Root_SDA2 = MKDEV(SCSI_DISK0_MAJOR, 2),
-- Root_HDC1 = MKDEV(IDE1_MAJOR, 1),
-- Root_SR0 = MKDEV(SCSI_CDROM_MAJOR, 0),
--};
-+#define Root_NFS MKDEV(UNNAMED_MAJOR, 255)
-+#define Root_RAM0 MKDEV(RAMDISK_MAJOR, 0)
-+#define Root_RAM1 MKDEV(RAMDISK_MAJOR, 1)
-+#define Root_FD0 MKDEV(FLOPPY_MAJOR, 0)
-+#define Root_HDA1 MKDEV(IDE0_MAJOR, 1)
-+#define Root_HDA2 MKDEV(IDE0_MAJOR, 2)
-+#define Root_SDA1 MKDEV(SCSI_DISK0_MAJOR, 1)
-+#define Root_SDA2 MKDEV(SCSI_DISK0_MAJOR, 2)
-+#define Root_HDC1 MKDEV(IDE1_MAJOR, 1)
-+#define Root_SR0 MKDEV(SCSI_CDROM_MAJOR, 0)
-
- extern dev_t ROOT_DEV;
-
---- linux-2.6.0-test1/include/linux/sched.h 2003-07-10 18:50:32.000000000 -0700
-+++ 25/include/linux/sched.h 2003-07-19 17:07:10.000000000 -0700
-@@ -12,6 +12,7 @@
- #include <linux/jiffies.h>
- #include <linux/rbtree.h>
- #include <linux/thread_info.h>
-+#include <linux/cpumask.h>
-
- #include <asm/system.h>
- #include <asm/semaphore.h>
-@@ -52,6 +53,7 @@ struct exec_domain;
- #define CLONE_DETACHED 0x00400000 /* parent wants no child-exit signal */
- #define CLONE_UNTRACED 0x00800000 /* set if the tracing process can't force CLONE_PTRACE on this clone */
- #define CLONE_CHILD_SETTID 0x01000000 /* set the TID in the child */
-+#define CLONE_STOPPED 0x02000000 /* Start in stopped state */
-
- /*
- * List of flags we want to share for kernel threads,
-@@ -149,6 +151,7 @@ extern void init_idle(task_t *idle, int
-
- extern void show_state(void);
- extern void show_regs(struct pt_regs *);
-+extern void show_trace_task(task_t *tsk);
-
- /*
- * TASK is a pointer to the task whose backtrace we want to see (or NULL for current
-@@ -202,7 +205,7 @@ struct mm_struct {
- unsigned long arg_start, arg_end, env_start, env_end;
- unsigned long rss, total_vm, locked_vm;
- unsigned long def_flags;
-- unsigned long cpu_vm_mask;
-+ cpumask_t cpu_vm_mask;
- unsigned long swap_address;
-
- unsigned dumpable:1;
-@@ -338,10 +341,11 @@ struct task_struct {
- prio_array_t *array;
-
- unsigned long sleep_avg;
-+ unsigned long avg_start;
- unsigned long last_run;
-
- unsigned long policy;
-- unsigned long cpus_allowed;
-+ cpumask_t cpus_allowed;
- unsigned int time_slice, first_time_slice;
-
- struct list_head tasks;
-@@ -456,12 +460,24 @@ struct task_struct {
-
- unsigned long ptrace_message;
- siginfo_t *last_siginfo; /* For ptrace use. */
-+ long debug;
-+/*
-+ * current io wait handle: wait queue entry to use for io waits
-+ * If this thread is processing aio, this points at the waitqueue
-+ * inside the currently handled kiocb. It may be NULL (i.e. default
-+ * to a stack based synchronous wait) if its doing sync IO.
-+ */
-+ wait_queue_t *io_wait;
- };
-
- extern void __put_task_struct(struct task_struct *tsk);
- #define get_task_struct(tsk) do { atomic_inc(&(tsk)->usage); } while(0)
--#define put_task_struct(tsk) \
--do { if (atomic_dec_and_test(&(tsk)->usage)) __put_task_struct(tsk); } while(0)
-+#define put_task_struct(tsk) \
-+ do { \
-+ BUG_ON((tsk)->debug == 0x6b6b6b6b); \
-+ if (atomic_dec_and_test(&(tsk)->usage)) \
-+ __put_task_struct(tsk); \
-+ } while (0)
-
- /*
- * Per process flags
-@@ -488,9 +504,9 @@ do { if (atomic_dec_and_test(&(tsk)->usa
- #define PF_SYNCWRITE 0x00200000 /* I am doing a sync write */
-
- #ifdef CONFIG_SMP
--extern int set_cpus_allowed(task_t *p, unsigned long new_mask);
-+extern int set_cpus_allowed(task_t *p, cpumask_t new_mask);
- #else
--static inline int set_cpus_allowed(task_t *p, unsigned long new_mask)
-+static inline int set_cpus_allowed(task_t *p, cpumask_t new_mask)
- {
- return 0;
- }
-@@ -636,6 +652,8 @@ static inline void mmdrop(struct mm_stru
-
- /* mmput gets rid of the mappings and all user-space */
- extern void mmput(struct mm_struct *);
-+/* Grab a reference to the mm if its not already going away */
-+extern struct mm_struct *mmgrab(struct mm_struct *);
- /* Remove the current tasks stale references to the old mm_struct */
- extern void mm_release(struct task_struct *, struct mm_struct *);
-
-@@ -743,7 +761,7 @@ static inline struct mm_struct * get_tas
- task_lock(task);
- mm = task->mm;
- if (mm)
-- atomic_inc(&mm->mm_users);
-+ mm = mmgrab(mm);
- task_unlock(task);
-
- return mm;
---- linux-2.6.0-test1/include/linux/serial_core.h 2003-06-14 12:17:58.000000000 -0700
-+++ 25/include/linux/serial_core.h 2003-07-19 17:03:51.000000000 -0700
-@@ -57,7 +57,7 @@
- #define PORT_SUNSAB 39
-
- /* NEC v850. */
--#define PORT_NB85E_UART 40
-+#define PORT_V850E_UART 40
-
- /* NEC PC-9800 */
- #define PORT_8251_PC98 41
---- linux-2.6.0-test1/include/linux/smp.h 2003-06-14 12:18:22.000000000 -0700
-+++ 25/include/linux/smp.h 2003-07-19 17:04:07.000000000 -0700
-@@ -102,9 +102,6 @@ void smp_prepare_boot_cpu(void);
- #define smp_call_function(func,info,retry,wait) ({ 0; })
- #define on_each_cpu(func,info,retry,wait) ({ func(info); 0; })
- static inline void smp_send_reschedule(int cpu) { }
--#define cpu_online_map 1
--#define cpu_online(cpu) ({ BUG_ON((cpu) != 0); 1; })
--#define num_online_cpus() 1
- #define num_booting_cpus() 1
- #define cpu_possible(cpu) ({ BUG_ON((cpu) != 0); 1; })
- #define smp_prepare_boot_cpu() do {} while (0)
---- linux-2.6.0-test1/include/linux/spinlock.h 2003-07-02 14:53:18.000000000 -0700
-+++ 25/include/linux/spinlock.h 2003-07-19 17:06:40.000000000 -0700
-@@ -184,6 +184,17 @@ typedef struct {
-
- #endif /* !SMP */
-
-+#ifdef CONFIG_LOCKMETER
-+extern void _metered_spin_lock (spinlock_t *lock);
-+extern void _metered_spin_unlock (spinlock_t *lock);
-+extern int _metered_spin_trylock(spinlock_t *lock);
-+extern void _metered_read_lock (rwlock_t *lock);
-+extern void _metered_read_unlock (rwlock_t *lock);
-+extern void _metered_write_lock (rwlock_t *lock);
-+extern void _metered_write_unlock (rwlock_t *lock);
-+extern int _metered_write_trylock(rwlock_t *lock);
-+#endif
-+
- /*
- * Define the various spin_lock and rw_lock methods. Note we define these
- * regardless of whether CONFIG_SMP or CONFIG_PREEMPT are set. The various
-@@ -389,6 +400,141 @@ do { \
- _raw_spin_trylock(lock) ? 1 : \
- ({preempt_enable(); local_bh_enable(); 0;});})
-
-+#ifdef CONFIG_LOCKMETER
-+#undef spin_lock
-+#undef spin_trylock
-+#undef spin_unlock
-+#undef spin_lock_irqsave
-+#undef spin_lock_irq
-+#undef spin_lock_bh
-+#undef read_lock
-+#undef read_unlock
-+#undef write_lock
-+#undef write_unlock
-+#undef write_trylock
-+#undef spin_unlock_bh
-+#undef read_lock_irqsave
-+#undef read_lock_irq
-+#undef read_lock_bh
-+#undef read_unlock_bh
-+#undef write_lock_irqsave
-+#undef write_lock_irq
-+#undef write_lock_bh
-+#undef write_unlock_bh
-+
-+#define spin_lock(lock) \
-+do { \
-+ preempt_disable(); \
-+ _metered_spin_lock(lock); \
-+} while(0)
-+
-+#define spin_trylock(lock) ({preempt_disable(); _metered_spin_trylock(lock) ? \
-+ 1 : ({preempt_enable(); 0;});})
-+#define spin_unlock(lock) \
-+do { \
-+ _metered_spin_unlock(lock); \
-+ preempt_enable(); \
-+} while (0)
-+
-+#define spin_lock_irqsave(lock, flags) \
-+do { \
-+ local_irq_save(flags); \
-+ preempt_disable(); \
-+ _metered_spin_lock(lock); \
-+} while (0)
-+
-+#define spin_lock_irq(lock) \
-+do { \
-+ local_irq_disable(); \
-+ preempt_disable(); \
-+ _metered_spin_lock(lock); \
-+} while (0)
-+
-+#define spin_lock_bh(lock) \
-+do { \
-+ local_bh_disable(); \
-+ preempt_disable(); \
-+ _metered_spin_lock(lock); \
-+} while (0)
-+
-+#define spin_unlock_bh(lock) \
-+do { \
-+ _metered_spin_unlock(lock); \
-+ preempt_enable(); \
-+ local_bh_enable(); \
-+} while (0)
-+
-+
-+#define read_lock(lock) ({preempt_disable(); _metered_read_lock(lock);})
-+#define read_unlock(lock) ({_metered_read_unlock(lock); preempt_enable();})
-+#define write_lock(lock) ({preempt_disable(); _metered_write_lock(lock);})
-+#define write_unlock(lock) ({_metered_write_unlock(lock); preempt_enable();})
-+#define write_trylock(lock) ({preempt_disable();_metered_write_trylock(lock) ? \
-+ 1 : ({preempt_enable(); 0;});})
-+#define spin_unlock_no_resched(lock) \
-+do { \
-+ _metered_spin_unlock(lock); \
-+ preempt_enable_no_resched(); \
-+} while (0)
-+
-+#define read_lock_irqsave(lock, flags) \
-+do { \
-+ local_irq_save(flags); \
-+ preempt_disable(); \
-+ _metered_read_lock(lock); \
-+} while (0)
-+
-+#define read_lock_irq(lock) \
-+do { \
-+ local_irq_disable(); \
-+ preempt_disable(); \
-+ _metered_read_lock(lock); \
-+} while (0)
-+
-+#define read_lock_bh(lock) \
-+do { \
-+ local_bh_disable(); \
-+ preempt_disable(); \
-+ _metered_read_lock(lock); \
-+} while (0)
-+
-+#define read_unlock_bh(lock) \
-+do { \
-+ _metered_read_unlock(lock); \
-+ preempt_enable(); \
-+ local_bh_enable(); \
-+} while (0)
-+
-+#define write_lock_irqsave(lock, flags) \
-+do { \
-+ local_irq_save(flags); \
-+ preempt_disable(); \
-+ _metered_write_lock(lock); \
-+} while (0)
-+
-+#define write_lock_irq(lock) \
-+do { \
-+ local_irq_disable(); \
-+ preempt_disable(); \
-+ _metered_write_lock(lock); \
-+} while (0)
-+
-+#define write_lock_bh(lock) \
-+do { \
-+ local_bh_disable(); \
-+ preempt_disable(); \
-+ _metered_write_lock(lock); \
-+} while (0)
-+
-+#define write_unlock_bh(lock) \
-+do { \
-+ _metered_write_unlock(lock); \
-+ preempt_enable(); \
-+ local_bh_enable(); \
-+} while (0)
-+
-+#endif /* !CONFIG_LOCKMETER */
-+
- /* "lock on reference count zero" */
- #ifndef ATOMIC_DEC_AND_LOCK
- #include <asm/atomic.h>
---- linux-2.6.0-test1/include/linux/times.h 2003-06-14 12:17:57.000000000 -0700
-+++ 25/include/linux/times.h 2003-07-19 17:03:51.000000000 -0700
-@@ -11,6 +11,26 @@
- # define jiffies_to_clock_t(x) ((clock_t) jiffies_64_to_clock_t((u64) x))
- #endif
-
-+static inline unsigned long clock_t_to_jiffies(unsigned long x)
-+{
-+#if (HZ % USER_HZ)==0
-+ if (x >= ~0UL / (HZ / USER_HZ))
-+ return ~0UL;
-+ return x * (HZ / USER_HZ);
-+#else
-+ u64 jif;
-+
-+ /* Don't worry about loss of precision here .. */
-+ if (x >= ~0UL / HZ * USER_HZ)
-+ return ~0UL;
-+
-+ /* .. but do try to contain it here */
-+ jif = x * (u64) HZ;
-+ do_div(jif, USER_HZ);
-+ return jif;
-+#endif
-+}
-+
- static inline u64 jiffies_64_to_clock_t(u64 x)
- {
- #if (HZ % USER_HZ)==0
---- linux-2.6.0-test1/include/linux/topology.h 2003-06-14 12:18:25.000000000 -0700
-+++ 25/include/linux/topology.h 2003-07-19 17:04:07.000000000 -0700
-@@ -27,6 +27,7 @@
- #ifndef _LINUX_TOPOLOGY_H
- #define _LINUX_TOPOLOGY_H
-
-+#include <linux/cpumask.h>
- #include <linux/bitops.h>
- #include <linux/mmzone.h>
- #include <linux/smp.h>
-@@ -34,7 +35,12 @@
- #include <asm/topology.h>
-
- #ifndef nr_cpus_node
--#define nr_cpus_node(node) (hweight_long(node_to_cpumask(node)))
-+#define nr_cpus_node(node) \
-+ ({ \
-+ cpumask_t __tmp__; \
-+ __tmp__ = node_to_cpumask(node); \
-+ cpus_weight(__tmp__); \
-+ })
- #endif
-
- static inline int __next_node_with_cpus(int node)
---- linux-2.6.0-test1/include/linux/tty.h 2003-06-14 12:18:21.000000000 -0700
-+++ 25/include/linux/tty.h 2003-07-19 17:03:51.000000000 -0700
-@@ -57,40 +57,40 @@
- */
-
- struct screen_info {
-- unsigned char orig_x; /* 0x00 */
-- unsigned char orig_y; /* 0x01 */
-- unsigned short dontuse1; /* 0x02 -- EXT_MEM_K sits here */
-- unsigned short orig_video_page; /* 0x04 */
-- unsigned char orig_video_mode; /* 0x06 */
-- unsigned char orig_video_cols; /* 0x07 */
-- unsigned short unused2; /* 0x08 */
-- unsigned short orig_video_ega_bx; /* 0x0a */
-- unsigned short unused3; /* 0x0c */
-- unsigned char orig_video_lines; /* 0x0e */
-- unsigned char orig_video_isVGA; /* 0x0f */
-- unsigned short orig_video_points; /* 0x10 */
-+ u8 orig_x; /* 0x00 */
-+ u8 orig_y; /* 0x01 */
-+ u16 dontuse1; /* 0x02 -- EXT_MEM_K sits here */
-+ u16 orig_video_page; /* 0x04 */
-+ u8 orig_video_mode; /* 0x06 */
-+ u8 orig_video_cols; /* 0x07 */
-+ u16 unused2; /* 0x08 */
-+ u16 orig_video_ega_bx; /* 0x0a */
-+ u16 unused3; /* 0x0c */
-+ u8 orig_video_lines; /* 0x0e */
-+ u8 orig_video_isVGA; /* 0x0f */
-+ u16 orig_video_points; /* 0x10 */
-
- /* VESA graphic mode -- linear frame buffer */
-- unsigned short lfb_width; /* 0x12 */
-- unsigned short lfb_height; /* 0x14 */
-- unsigned short lfb_depth; /* 0x16 */
-- unsigned long lfb_base; /* 0x18 */
-- unsigned long lfb_size; /* 0x1c */
-- unsigned short dontuse2, dontuse3; /* 0x20 -- CL_MAGIC and CL_OFFSET here */
-- unsigned short lfb_linelength; /* 0x24 */
-- unsigned char red_size; /* 0x26 */
-- unsigned char red_pos; /* 0x27 */
-- unsigned char green_size; /* 0x28 */
-- unsigned char green_pos; /* 0x29 */
-- unsigned char blue_size; /* 0x2a */
-- unsigned char blue_pos; /* 0x2b */
-- unsigned char rsvd_size; /* 0x2c */
-- unsigned char rsvd_pos; /* 0x2d */
-- unsigned short vesapm_seg; /* 0x2e */
-- unsigned short vesapm_off; /* 0x30 */
-- unsigned short pages; /* 0x32 */
-- unsigned short vesa_attributes; /* 0x34 */
-- /* 0x36 -- 0x3f reserved for future expansion */
-+ u16 lfb_width; /* 0x12 */
-+ u16 lfb_height; /* 0x14 */
-+ u16 lfb_depth; /* 0x16 */
-+ u32 lfb_base; /* 0x18 */
-+ u32 lfb_size; /* 0x1c */
-+ u16 dontuse2, dontuse3; /* 0x20 -- CL_MAGIC and CL_OFFSET here */
-+ u16 lfb_linelength; /* 0x24 */
-+ u8 red_size; /* 0x26 */
-+ u8 red_pos; /* 0x27 */
-+ u8 green_size; /* 0x28 */
-+ u8 green_pos; /* 0x29 */
-+ u8 blue_size; /* 0x2a */
-+ u8 blue_pos; /* 0x2b */
-+ u8 rsvd_size; /* 0x2c */
-+ u8 rsvd_pos; /* 0x2d */
-+ u16 vesapm_seg; /* 0x2e */
-+ u16 vesapm_off; /* 0x30 */
-+ u16 pages; /* 0x32 */
-+ u16 vesa_attributes; /* 0x34 */
-+ /* 0x36 -- 0x3f reserved for future expansion */
- };
-
- extern struct screen_info screen_info;
---- linux-2.6.0-test1/include/linux/usb.h 2003-07-02 14:53:18.000000000 -0700
-+++ 25/include/linux/usb.h 2003-07-19 17:03:51.000000000 -0700
-@@ -80,7 +80,8 @@ struct usb_host_interface {
- * @act_altsetting: index of current altsetting. this number is always
- * less than num_altsetting. after the device is configured, each
- * interface uses its default setting of zero.
-- * @max_altsetting:
-+ * @max_altsetting: the max number of altsettings for this interface.
-+ * @driver: the USB driver that is bound to this interface.
- * @minor: the minor number assigned to this interface, if this
- * interface is bound to a driver that uses the USB major number.
- * If this interface does not use the USB major, this field should
-@@ -409,7 +410,11 @@ static inline int usb_make_path (struct
- * do (or don't) show up otherwise in the filesystem.
- * @id_table: USB drivers use ID table to support hotplugging.
- * Export this with MODULE_DEVICE_TABLE(usb,...). This must be set
-- * or your driver's probe function will never get called.
-+ * or your driver's probe function will never get called.
-+ * @driver: the driver model core driver structure.
-+ * @serialize: a semaphore used to serialize access to this driver. Used
-+ * in the probe and disconnect functions. Only the USB core should use
-+ * this lock.
- *
- * USB drivers must provide a name, probe() and disconnect() methods,
- * and an id_table. Other driver fields are optional.
-@@ -575,6 +580,8 @@ typedef void (*usb_complete_t)(struct ur
- * it likes with the URB, including resubmitting or freeing it.
- * @iso_frame_desc: Used to provide arrays of ISO transfer buffers and to
- * collect the transfer status for each buffer.
-+ * @timeout: If set to zero, the urb will never timeout. Otherwise this is
-+ * the time in jiffies that this urb will timeout in.
- *
- * This structure identifies USB transfer requests. URBs must be allocated by
- * calling usb_alloc_urb() and freed with a call to usb_free_urb().
-@@ -677,10 +684,14 @@ typedef void (*usb_complete_t)(struct ur
- */
- struct urb
- {
-+ /* private, usb core and host controller only fields in the urb */
- spinlock_t lock; /* lock for the URB */
- atomic_t count; /* reference count of the URB */
- void *hcpriv; /* private data for host controller */
- struct list_head urb_list; /* list pointer to all active urbs */
-+ int bandwidth; /* bandwidth for INT/ISO request */
-+
-+ /* public, documented fields in the urb that can be used by drivers */
- struct usb_device *dev; /* (in) pointer to associated device */
- unsigned int pipe; /* (in) pipe information */
- int status; /* (return) non-ISO status */
-@@ -689,7 +700,6 @@ struct urb
- dma_addr_t transfer_dma; /* (in) dma addr for transfer_buffer */
- int transfer_buffer_length; /* (in) data buffer length */
- int actual_length; /* (return) actual transfer length */
-- int bandwidth; /* bandwidth for INT/ISO request */
- unsigned char *setup_packet; /* (in) setup packet (control only) */
- dma_addr_t setup_dma; /* (in) dma addr for setup_packet */
- int start_frame; /* (modify) start frame (INT/ISO) */
-@@ -891,8 +901,10 @@ struct usb_sg_request {
- int status;
- size_t bytes;
-
-- // members not documented above are private to usbcore,
-- // and are not provided for driver access!
-+ /*
-+ * members below are private to usbcore,
-+ * and are not provided for driver access!
-+ */
- spinlock_t lock;
-
- struct usb_device *dev;
---- linux-2.6.0-test1/include/linux/wait.h 2003-06-26 22:07:26.000000000 -0700
-+++ 25/include/linux/wait.h 2003-07-19 17:06:43.000000000 -0700
-@@ -80,6 +80,15 @@ static inline int waitqueue_active(wait_
- return !list_empty(&q->task_list);
- }
-
-+/*
-+ * Used to distinguish between sync and async io wait context:
-+ * sync i/o typically specifies a NULL wait queue entry or a wait
-+ * queue entry bound to a task (current task) to wake up.
-+ * aio specifies a wait queue entry with an async notification
-+ * callback routine, not associated with any task.
-+ */
-+#define is_sync_wait(wait) (!(wait) || ((wait)->task))
-+
- extern void FASTCALL(add_wait_queue(wait_queue_head_t *q, wait_queue_t * wait));
- extern void FASTCALL(add_wait_queue_exclusive(wait_queue_head_t *q, wait_queue_t * wait));
- extern void FASTCALL(remove_wait_queue(wait_queue_head_t *q, wait_queue_t * wait));
---- linux-2.6.0-test1/include/linux/writeback.h 2003-06-26 22:07:26.000000000 -0700
-+++ 25/include/linux/writeback.h 2003-07-19 17:06:57.000000000 -0700
-@@ -84,10 +84,12 @@ int dirty_writeback_centisecs_handler(st
- void *, size_t *);
-
- void page_writeback_init(void);
--void balance_dirty_pages(struct address_space *mapping);
--void balance_dirty_pages_ratelimited(struct address_space *mapping);
-+int balance_dirty_pages(struct address_space *mapping);
-+int balance_dirty_pages_ratelimited(struct address_space *mapping);
- int pdflush_operation(void (*fn)(unsigned long), unsigned long arg0);
- int do_writepages(struct address_space *mapping, struct writeback_control *wbc);
-+ssize_t sync_page_range(struct inode *inode, struct address_space *mapping,
-+ loff_t pos, size_t count);
-
- /* pdflush.c */
- extern int nr_pdflush_threads; /* Global so it can be exported to sysctl
---- linux-2.6.0-test1/include/media/saa7146.h 2003-07-02 14:53:18.000000000 -0700
-+++ 25/include/media/saa7146.h 2003-07-19 17:03:51.000000000 -0700
-@@ -89,8 +89,6 @@ struct saa7146_extension
- #define SAA7146_USE_I2C_IRQ 0x1
- int flags;
-
-- struct saa7146_ext_vv *ext_vv_data;
--
- /* pairs of subvendor and subdevice ids for
- supported devices, last entry 0xffff, 0xfff */
- struct module *module;
-@@ -134,6 +132,7 @@ struct saa7146_dev
- /* extension handling */
- struct saa7146_extension *ext; /* indicates if handled by extension */
- void *ext_priv; /* pointer for extension private use (most likely some private data) */
-+ struct saa7146_ext_vv *ext_vv_data;
-
- /* per device video/vbi informations (if available) */
- struct saa7146_vv *vv_data;
---- linux-2.6.0-test1/include/media/saa7146_vv.h 2003-07-02 14:53:18.000000000 -0700
-+++ 25/include/media/saa7146_vv.h 2003-07-19 17:03:51.000000000 -0700
-@@ -10,12 +10,10 @@
- #define BUFFER_TIMEOUT (HZ/2) /* 0.5 seconds */
-
- #define WRITE_RPS0(x) do { \
-- static int count = 0; \
- dev->d_rps0.cpu_addr[ count++ ] = cpu_to_le32(x); \
- } while (0);
-
- #define WRITE_RPS1(x) do { \
-- static int count = 0; \
- dev->d_rps1.cpu_addr[ count++ ] = cpu_to_le32(x); \
- } while (0);
-
-@@ -41,13 +39,13 @@ struct saa7146_standard
- char *name;
- v4l2_std_id id;
-
-- int v_offset;
-- int v_field;
-- int v_calc;
-+ int v_offset; /* number of lines of vertical offset before processing */
-+ int v_field; /* number of lines in a field for HPS to process */
-+ int v_calc; /* number of vertical active lines */
-
-- int h_offset;
-- int h_pixels;
-- int h_calc;
-+ int h_offset; /* horizontal offset of processing window */
-+ int h_pixels; /* number of horizontal pixels to process */
-+ int h_calc; /* number of horizontal active pixels */
-
- int v_max_out;
- int h_max_out;
-@@ -122,6 +120,7 @@ struct saa7146_vv
- /* video capture */
- struct saa7146_dmaqueue video_q;
- struct saa7146_fh *streaming;
-+ enum v4l2_field last_field;
-
- /* common: fixme? shouldn't this be in saa7146_fh?
- (this leads to a more complicated question: shall the driver
-@@ -166,7 +165,7 @@ struct saa7146_ext_vv
- int (*std_callback)(struct saa7146_dev*, struct saa7146_standard *);
-
- struct saa7146_extension_ioctls *ioctls;
-- int (*ioctl)(struct saa7146_dev*, unsigned int cmd, void *arg);
-+ int (*ioctl)(struct saa7146_fh*, unsigned int cmd, void *arg);
- };
-
- struct saa7146_use_ops {
-@@ -188,7 +187,7 @@ int saa7146_buffer_queue(struct saa7146_
- void saa7146_buffer_timeout(unsigned long data);
- void saa7146_dma_free(struct saa7146_dev *dev,struct saa7146_buf *buf);
-
--int saa7146_vv_init(struct saa7146_dev* dev);
-+int saa7146_vv_init(struct saa7146_dev* dev, struct saa7146_ext_vv *ext_vv);
- int saa7146_vv_release(struct saa7146_dev* dev);
-
-
-@@ -201,6 +200,8 @@ void saa7146_set_gpio(struct saa7146_dev
-
- /* from saa7146_video.c */
- extern struct saa7146_use_ops saa7146_video_uops;
-+int saa7146_start_preview(struct saa7146_fh *fh);
-+int saa7146_stop_preview(struct saa7146_fh *fh);
-
- /* from saa7146_vbi.c */
- extern struct saa7146_use_ops saa7146_vbi_uops;
-@@ -215,35 +216,6 @@ extern struct saa7146_use_ops saa7146_vb
- #define SAA7146_HPS_SYNC_PORT_A 0x00
- #define SAA7146_HPS_SYNC_PORT_B 0x01
-
--/* number of vertical active lines */
--#define V_ACTIVE_LINES_PAL 576
--#define V_ACTIVE_LINES_NTSC 480
--#define V_ACTIVE_LINES_SECAM 576
--
--/* number of lines in a field for HPS to process */
--#define V_FIELD_PAL 288
--#define V_FIELD_NTSC 240
--#define V_FIELD_SECAM 288
--
--/* number of lines of vertical offset before processing */
--#define V_OFFSET_PAL 0x17
--#define V_OFFSET_NTSC 0x16
--#define V_OFFSET_SECAM 0x14
--
--/* number of horizontal pixels to process */
--#define H_PIXELS_PAL 680
--#define H_PIXELS_NTSC 708
--#define H_PIXELS_SECAM 720
--
--/* horizontal offset of processing window */
--#define H_OFFSET_PAL 0x14
--#define H_OFFSET_NTSC 0x06
--#define H_OFFSET_SECAM 0x14
--
--#define SAA7146_PAL_VALUES V_OFFSET_PAL, V_FIELD_PAL, V_ACTIVE_LINES_PAL, H_OFFSET_PAL, H_PIXELS_PAL, H_PIXELS_PAL+1, V_ACTIVE_LINES_PAL, 768
--#define SAA7146_NTSC_VALUES V_OFFSET_NTSC, V_FIELD_NTSC, V_ACTIVE_LINES_NTSC, H_OFFSET_NTSC, H_PIXELS_NTSC, H_PIXELS_NTSC+1, V_ACTIVE_LINES_NTSC, 640
--#define SAA7146_SECAM_VALUES V_OFFSET_SECAM, V_FIELD_SECAM, V_ACTIVE_LINES_SECAM, H_OFFSET_SECAM, H_PIXELS_SECAM, H_PIXELS_SECAM+1, V_ACTIVE_LINES_SECAM, 768
--
- /* some memory sizes */
- #define SAA7146_CLIPPING_MEM (14*PAGE_SIZE)
-
---- linux-2.6.0-test1/include/net/ip_vs.h 2003-07-13 21:44:35.000000000 -0700
-+++ 25/include/net/ip_vs.h 2003-07-19 17:03:51.000000000 -0700
-@@ -887,7 +887,6 @@ extern int sysctl_ip_vs_cache_bypass;
- extern int sysctl_ip_vs_expire_nodest_conn;
- extern int sysctl_ip_vs_sync_threshold[2];
- extern int sysctl_ip_vs_nat_icmp_send;
--extern atomic_t ip_vs_dropentry;
- extern struct ip_vs_stats ip_vs_stats;
-
- extern struct ip_vs_service *
-@@ -902,7 +901,6 @@ extern struct ip_vs_dest *
- ip_vs_lookup_real_service(__u16 protocol, __u32 daddr, __u16 dport);
- extern int ip_vs_use_count_inc(void);
- extern void ip_vs_use_count_dec(void);
--extern void update_defense_level(void);
- extern int ip_vs_control_init(void);
- extern void ip_vs_control_cleanup(void);
-
---- linux-2.6.0-test1/include/pcmcia/ss.h 2003-07-13 21:44:35.000000000 -0700
-+++ 25/include/pcmcia/ss.h 2003-07-19 17:03:51.000000000 -0700
-@@ -51,6 +51,7 @@
- #define SS_3VCARD 0x1000
- #define SS_XVCARD 0x2000
- #define SS_PENDING 0x4000
-+#define SS_ZVCARD 0x8000
-
- /* InquireSocket capabilities */
- #define SS_CAP_PAGE_REGS 0x0001
-@@ -209,6 +210,10 @@ struct pcmcia_socket {
- /* socket operations */
- struct pccard_operations * ops;
-
-+ /* Zoom video behaviour is so chip specific its not worth adding
-+ this to _ops */
-+ void (*zoom_video)(struct pcmcia_socket *, int);
-+
- /* state thread */
- struct semaphore skt_sem; /* protects socket h/w state */
-
---- linux-2.6.0-test1/include/scsi/scsi_device.h 2003-07-02 14:53:18.000000000 -0700
-+++ 25/include/scsi/scsi_device.h 2003-07-19 17:03:51.000000000 -0700
-@@ -11,8 +11,6 @@ struct scsi_mode_data;
-
-
- struct scsi_device {
-- struct class_device sdev_classdev;
--
- struct list_head siblings; /* list of all devices on this host */
- struct list_head same_target_siblings; /* just the devices sharing same target id */
- struct Scsi_Host *host;
-@@ -86,10 +84,11 @@ struct scsi_device {
- unsigned int max_device_blocked; /* what device_blocked counts down from */
- #define SCSI_DEFAULT_DEVICE_BLOCKED 3
-
-- struct device sdev_driverfs_dev;
-+ struct device sdev_gendev;
-+ struct class_device sdev_classdev;
- };
- #define to_scsi_device(d) \
-- container_of(d, struct scsi_device, sdev_driverfs_dev)
-+ container_of(d, struct scsi_device, sdev_gendev)
-
- extern struct scsi_device *scsi_add_device(struct Scsi_Host *,
- uint, uint, uint);
---- linux-2.6.0-test1/include/scsi/scsi_host.h 2003-06-22 12:04:45.000000000 -0700
-+++ 25/include/scsi/scsi_host.h 2003-07-19 17:03:51.000000000 -0700
-@@ -329,12 +329,12 @@ struct scsi_host_template {
- #define SCSI_DEFAULT_HOST_BLOCKED 7
-
- /*
-- * Pointer to the sysfs class properties for this host
-+ * Pointer to the sysfs class properties for this host, NULL terminated.
- */
- struct class_device_attribute **shost_attrs;
-
- /*
-- * Pointer to the SCSI device properties for this host
-+ * Pointer to the SCSI device properties for this host, NULL terminated.
- */
- struct device_attribute **sdev_attrs;
-
-@@ -442,12 +442,6 @@ struct Scsi_Host {
- */
- unsigned int max_host_blocked;
-
-- /*
-- * Support for sysfs
-- */
-- struct device host_gendev;
-- struct class_device class_dev;
--
- /* legacy crap */
- unsigned long base;
- unsigned long io_port;
-@@ -455,6 +449,9 @@ struct Scsi_Host {
- unsigned char dma_channel;
- unsigned int irq;
-
-+ /* ldm bits */
-+ struct device shost_gendev;
-+ struct class_device shost_classdev;
-
- /*
- * List of hosts per template.
-@@ -474,12 +471,13 @@ struct Scsi_Host {
- __attribute__ ((aligned (sizeof(unsigned long))));
- };
- #define dev_to_shost(d) \
-- container_of(d, struct Scsi_Host, host_gendev)
-+ container_of(d, struct Scsi_Host, shost_gendev)
- #define class_to_shost(d) \
-- container_of(d, struct Scsi_Host, class_dev)
-+ container_of(d, struct Scsi_Host, shost_classdev)
-
- extern struct Scsi_Host *scsi_host_alloc(struct scsi_host_template *, int);
- extern int scsi_add_host(struct Scsi_Host *, struct device *);
-+extern void scsi_scan_host(struct Scsi_Host *);
- extern int scsi_remove_host(struct Scsi_Host *);
- extern void scsi_host_get(struct Scsi_Host *);
- extern void scsi_host_put(struct Scsi_Host *t);
-@@ -495,16 +493,14 @@ static inline void scsi_assign_lock(stru
- static inline void scsi_set_device(struct Scsi_Host *shost,
- struct device *dev)
- {
-- shost->host_gendev.parent = dev;
-+ shost->shost_gendev.parent = dev;
- }
-
- static inline struct device *scsi_get_device(struct Scsi_Host *shost)
- {
-- return shost->host_gendev.parent;
-+ return shost->shost_gendev.parent;
- }
-
--extern void scsi_sysfs_release_attributes(struct scsi_host_template *);
--
- extern void scsi_unblock_requests(struct Scsi_Host *);
- extern void scsi_block_requests(struct Scsi_Host *);
-
---- linux-2.6.0-test1/include/scsi/scsi_request.h 2003-07-02 14:53:18.000000000 -0700
-+++ 25/include/scsi/scsi_request.h 2003-07-19 17:03:51.000000000 -0700
-@@ -56,7 +56,7 @@ extern void scsi_do_req(struct scsi_requ
- int timeout, int retries);
-
- struct scsi_mode_data {
-- __u16 length;
-+ __u32 length;
- __u16 block_descriptor_length;
- __u8 medium_type;
- __u8 device_specific;
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/video/epson1355.h 2003-07-19 17:04:55.000000000 -0700
-@@ -0,0 +1,64 @@
-+/*
-+ * include/video/epson13xx.h -- Epson 13xx frame buffer
-+ *
-+ * Copyright (C) Hewlett-Packard Company. All rights reserved.
-+ *
-+ * Written by Christopher Hoover <ch@hpl.hp.com>
-+ *
-+ */
-+
-+#ifndef _EPSON13XX_H_
-+#define _EPSON13XX_H_
-+
-+#define REG_REVISION_CODE 0x00
-+#define REG_MEMORY_CONFIG 0x01
-+#define REG_PANEL_TYPE 0x02
-+#define REG_MOD_RATE 0x03
-+#define REG_HORZ_DISP_WIDTH 0x04
-+#define REG_HORZ_NONDISP_PERIOD 0x05
-+#define REG_HRTC_START_POSITION 0x06
-+#define REG_HRTC_PULSE_WIDTH 0x07
-+#define REG_VERT_DISP_HEIGHT0 0x08
-+#define REG_VERT_DISP_HEIGHT1 0x09
-+#define REG_VERT_NONDISP_PERIOD 0x0A
-+#define REG_VRTC_START_POSITION 0x0B
-+#define REG_VRTC_PULSE_WIDTH 0x0C
-+#define REG_DISPLAY_MODE 0x0D
-+#define REG_SCRN1_LINE_COMPARE0 0x0E
-+#define REG_SCRN1_LINE_COMPARE1 0x0F
-+#define REG_SCRN1_DISP_START_ADDR0 0x10
-+#define REG_SCRN1_DISP_START_ADDR1 0x11
-+#define REG_SCRN1_DISP_START_ADDR2 0x12
-+#define REG_SCRN2_DISP_START_ADDR0 0x13
-+#define REG_SCRN2_DISP_START_ADDR1 0x14
-+#define REG_SCRN2_DISP_START_ADDR2 0x15
-+#define REG_MEM_ADDR_OFFSET0 0x16
-+#define REG_MEM_ADDR_OFFSET1 0x17
-+#define REG_PIXEL_PANNING 0x18
-+#define REG_CLOCK_CONFIG 0x19
-+#define REG_POWER_SAVE_CONFIG 0x1A
-+#define REG_MISC 0x1B
-+#define REG_MD_CONFIG_READBACK0 0x1C
-+#define REG_MD_CONFIG_READBACK1 0x1D
-+#define REG_GPIO_CONFIG0 0x1E
-+#define REG_GPIO_CONFIG1 0x1F
-+#define REG_GPIO_CONTROL0 0x20
-+#define REG_GPIO_CONTROL1 0x21
-+#define REG_PERF_ENHANCEMENT0 0x22
-+#define REG_PERF_ENHANCEMENT1 0x23
-+#define REG_LUT_ADDR 0x24
-+#define REG_RESERVED_1 0x25
-+#define REG_LUT_DATA 0x26
-+#define REG_INK_CURSOR_CONTROL 0x27
-+#define REG_CURSOR_X_POSITION0 0x28
-+#define REG_CURSOR_X_POSITION1 0x29
-+#define REG_CURSOR_Y_POSITION0 0x2A
-+#define REG_CURSOR_Y_POSITION1 0x2B
-+#define REG_INK_CURSOR_COLOR0_0 0x2C
-+#define REG_INK_CURSOR_COLOR0_1 0x2D
-+#define REG_INK_CURSOR_COLOR1_0 0x2E
-+#define REG_INK_CURSOR_COLOR1_1 0x2F
-+#define REG_INK_CURSOR_START_ADDR 0x30
-+#define REG_ALTERNATE_FRM 0x31
-+
-+#endif
---- linux-2.6.0-test1/include/video/neomagic.h 2003-06-14 12:18:07.000000000 -0700
-+++ 25/include/video/neomagic.h 2003-07-19 17:04:55.000000000 -0700
-@@ -75,45 +75,45 @@
-
-
- struct xtimings {
-- unsigned int pixclock;
-- unsigned int HDisplay;
-- unsigned int HSyncStart;
-- unsigned int HSyncEnd;
-- unsigned int HTotal;
-- unsigned int VDisplay;
-- unsigned int VSyncStart;
-- unsigned int VSyncEnd;
-- unsigned int VTotal;
-- unsigned int sync;
-- int dblscan;
-- int interlaced;
-+ unsigned int pixclock;
-+ unsigned int HDisplay;
-+ unsigned int HSyncStart;
-+ unsigned int HSyncEnd;
-+ unsigned int HTotal;
-+ unsigned int VDisplay;
-+ unsigned int VSyncStart;
-+ unsigned int VSyncEnd;
-+ unsigned int VTotal;
-+ unsigned int sync;
-+ int dblscan;
-+ int interlaced;
- };
-
-
- /* --------------------------------------------------------------------- */
-
- typedef volatile struct {
-- __u32 bltStat;
-- __u32 bltCntl;
-- __u32 xpColor;
-- __u32 fgColor;
-- __u32 bgColor;
-- __u32 pitch;
-- __u32 clipLT;
-- __u32 clipRB;
-- __u32 srcBitOffset;
-- __u32 srcStart;
-- __u32 reserved0;
-- __u32 dstStart;
-- __u32 xyExt;
--
-- __u32 reserved1[19];
--
-- __u32 pageCntl;
-- __u32 pageBase;
-- __u32 postBase;
-- __u32 postPtr;
-- __u32 dataPtr;
-+ __u32 bltStat;
-+ __u32 bltCntl;
-+ __u32 xpColor;
-+ __u32 fgColor;
-+ __u32 bgColor;
-+ __u32 pitch;
-+ __u32 clipLT;
-+ __u32 clipRB;
-+ __u32 srcBitOffset;
-+ __u32 srcStart;
-+ __u32 reserved0;
-+ __u32 dstStart;
-+ __u32 xyExt;
-+
-+ __u32 reserved1[19];
-+
-+ __u32 pageCntl;
-+ __u32 pageBase;
-+ __u32 postBase;
-+ __u32 postPtr;
-+ __u32 dataPtr;
- } Neo2200;
-
- #define NR_PALETTE 256
-@@ -124,142 +124,65 @@ typedef volatile struct {
- #define NEO_EXT_GR_MAX 0xC7
-
- struct neofb_par {
--
-- unsigned char MiscOutReg; /* Misc */
-- unsigned char CRTC[25]; /* Crtc Controller */
-- unsigned char Sequencer[5]; /* Video Sequencer */
-- unsigned char Graphics[9]; /* Video Graphics */
-- unsigned char Attribute[21]; /* Video Atribute */
--
-- unsigned char GeneralLockReg;
-- unsigned char ExtCRTDispAddr;
-- unsigned char ExtCRTOffset;
-- unsigned char SysIfaceCntl1;
-- unsigned char SysIfaceCntl2;
-- unsigned char ExtColorModeSelect;
-- unsigned char biosMode;
--
-- unsigned char PanelDispCntlReg1;
-- unsigned char PanelDispCntlReg2;
-- unsigned char PanelDispCntlReg3;
-- unsigned char PanelVertCenterReg1;
-- unsigned char PanelVertCenterReg2;
-- unsigned char PanelVertCenterReg3;
-- unsigned char PanelVertCenterReg4;
-- unsigned char PanelVertCenterReg5;
-- unsigned char PanelHorizCenterReg1;
-- unsigned char PanelHorizCenterReg2;
-- unsigned char PanelHorizCenterReg3;
-- unsigned char PanelHorizCenterReg4;
-- unsigned char PanelHorizCenterReg5;
--
-- int ProgramVCLK;
-- unsigned char VCLK3NumeratorLow;
-- unsigned char VCLK3NumeratorHigh;
-- unsigned char VCLK3Denominator;
-- unsigned char VerticalExt;
-+ struct vgastate state;
-+ unsigned char MiscOutReg; /* Misc */
-+ unsigned char CRTC[25]; /* Crtc Controller */
-+ unsigned char Sequencer[5]; /* Video Sequencer */
-+ unsigned char Graphics[9]; /* Video Graphics */
-+ unsigned char Attribute[21]; /* Video Atribute */
-+
-+ unsigned char GeneralLockReg;
-+ unsigned char ExtCRTDispAddr;
-+ unsigned char ExtCRTOffset;
-+ unsigned char SysIfaceCntl1;
-+ unsigned char SysIfaceCntl2;
-+ unsigned char ExtColorModeSelect;
-+ unsigned char biosMode;
-+
-+ unsigned char PanelDispCntlReg1;
-+ unsigned char PanelDispCntlReg2;
-+ unsigned char PanelDispCntlReg3;
-+ unsigned char PanelVertCenterReg1;
-+ unsigned char PanelVertCenterReg2;
-+ unsigned char PanelVertCenterReg3;
-+ unsigned char PanelVertCenterReg4;
-+ unsigned char PanelVertCenterReg5;
-+ unsigned char PanelHorizCenterReg1;
-+ unsigned char PanelHorizCenterReg2;
-+ unsigned char PanelHorizCenterReg3;
-+ unsigned char PanelHorizCenterReg4;
-+ unsigned char PanelHorizCenterReg5;
-+
-+ int ProgramVCLK;
-+ unsigned char VCLK3NumeratorLow;
-+ unsigned char VCLK3NumeratorHigh;
-+ unsigned char VCLK3Denominator;
-+ unsigned char VerticalExt;
-
- #ifdef CONFIG_MTRR
-- int mtrr;
-+ int mtrr;
- #endif
-- u8 *mmio_vbase;
-+ u8 *mmio_vbase;
-
-- Neo2200 *neo2200;
-+ Neo2200 *neo2200;
-
-- /* Panels size */
-- int NeoPanelWidth;
-- int NeoPanelHeight;
-+ /* Panels size */
-+ int NeoPanelWidth;
-+ int NeoPanelHeight;
-
-- int maxClock;
-+ int maxClock;
-
-- int pci_burst;
-- int lcd_stretch;
-- int internal_display;
-- int external_display;
-- int libretto;
-+ int pci_burst;
-+ int lcd_stretch;
-+ int internal_display;
-+ int external_display;
-+ int libretto;
- };
-
- typedef struct {
-- int x_res;
-- int y_res;
-- int mode;
-+ int x_res;
-+ int y_res;
-+ int mode;
- } biosMode;
-
--/* vga IO functions */
--static inline u8 VGArCR (u8 index)
--{
-- outb (index, 0x3d4);
-- return inb (0x3d5);
--}
--
--static inline void VGAwCR (u8 index, u8 val)
--{
-- outb (index, 0x3d4);
-- outb (val, 0x3d5);
--}
--
--static inline u8 VGArGR (u8 index)
--{
-- outb (index, 0x3ce);
-- return inb (0x3cf);
--}
--
--static inline void VGAwGR (u8 index, u8 val)
--{
-- outb (index, 0x3ce);
-- outb (val, 0x3cf);
--}
--
--static inline u8 VGArSEQ (u8 index)
--{
-- outb (index, 0x3c4);
-- return inb (0x3c5);
--}
--
--static inline void VGAwSEQ (u8 index, u8 val)
--{
-- outb (index, 0x3c4);
-- outb (val, 0x3c5);
--}
--
--
--static int paletteEnabled = 0;
--
--static inline void VGAenablePalette (void)
--{
-- u8 tmp;
--
-- tmp = inb (0x3da);
-- outb (0x00, 0x3c0);
-- paletteEnabled = 1;
--}
--
--static inline void VGAdisablePalette (void)
--{
-- u8 tmp;
--
-- tmp = inb (0x3da);
-- outb (0x20, 0x3c0);
-- paletteEnabled = 0;
--}
--
--static inline void VGAwATTR (u8 index, u8 value)
--{
-- u8 tmp;
--
-- if (paletteEnabled)
-- index &= ~0x20;
-- else
-- index |= 0x20;
--
-- tmp = inb (0x3da);
-- outb (index, 0x3c0);
-- outb (value, 0x3c0);
--}
--
--static inline void VGAwMISC (u8 value)
--{
-- outb (value, 0x3c2);
--}
- #endif
--
---- linux-2.6.0-test1/include/video/sisfb.h 2003-06-14 12:18:08.000000000 -0700
-+++ 25/include/video/sisfb.h 2003-07-19 17:04:55.000000000 -0700
-@@ -6,6 +6,53 @@
- #include <asm/ioctl.h>
- #include <asm/types.h>
-
-+/* TW: vbflags */
-+#define CRT2_DEFAULT 0x00000001
-+#define CRT2_LCD 0x00000002 /* TW: Never change the order of the CRT2_XXX entries */
-+#define CRT2_TV 0x00000004 /* (see SISCycleCRT2Type()) */
-+#define CRT2_VGA 0x00000008
-+#define CRT2_ENABLE (CRT2_LCD | CRT2_TV | CRT2_VGA)
-+#define VB_DISPTYPE_DISP2 CRT2_ENABLE
-+#define VB_DISPTYPE_CRT2 CRT2_ENABLE
-+#define TV_NTSC 0x00000010
-+#define TV_PAL 0x00000020
-+#define TV_HIVISION 0x00000040
-+#define TV_HIVISION_LV 0x00000080
-+#define TV_TYPE (TV_NTSC | TV_PAL | TV_HIVISION | TV_HIVISION_LV)
-+#define TV_AVIDEO 0x00000100
-+#define TV_SVIDEO 0x00000200
-+#define TV_SCART 0x00000400
-+#define TV_INTERFACE (TV_AVIDEO | TV_SVIDEO | TV_SCART | TV_CHSCART | TV_CHHDTV)
-+#define VB_USELCDA 0x00000800
-+#define TV_PALM 0x00001000
-+#define TV_PALN 0x00002000
-+#define TV_CHSCART 0x00008000
-+#define TV_CHHDTV 0x00010000
-+#define VGA2_CONNECTED 0x00040000
-+#define VB_DISPTYPE_CRT1 0x00080000 /* CRT1 connected and used */
-+#define VBDISPTYPE_DISP1 VB_DISPTYPE_CRT1
-+#define VB_301 0x00100000 /* Video bridge type */
-+#define VB_301B 0x00200000
-+#define VB_302B 0x00400000
-+#define VB_30xBDH 0x00800000 /* 30xB DH version (w/o LCD support) */
-+#define VB_LVDS 0x01000000
-+#define VB_CHRONTEL 0x02000000
-+#define VB_301LV 0x04000000
-+#define VB_302LV 0x08000000
-+#define VB_TRUMPION 0x10000000
-+#define VB_VIDEOBRIDGE (VB_301|VB_301B|VB_302B|VB_301LV|VB_302LV| \
-+ VB_LVDS|VB_CHRONTEL|VB_TRUMPION)
-+#define VB_SISBRIDGE (VB_301|VB_301B|VB_302B|VB_301LV|VB_302LV)
-+#define VB_SINGLE_MODE 0x20000000 /* CRT1 or CRT2; determined by VB_DISPTYPE_CRTx */
-+#define VB_DISPMODE_SINGLE VB_SINGLE_MODE
-+#define VB_MIRROR_MODE 0x40000000 /* CRT1 + CRT2 identical (mirror mode) */
-+#define VB_DISPMODE_MIRROR VB_MIRROR_MODE
-+#define VB_DUALVIEW_MODE 0x80000000 /* CRT1 + CRT2 independent (dual head mode) */
-+#define VB_DISPMODE_DUAL VB_DUALVIEW_MODE
-+#define VB_DISPLAY_MODE (VB_SINGLE_MODE | VB_MIRROR_MODE | VB_DUALVIEW_MODE)
-+
-+
-+/* entries for disp_state - deprecated as of 1.6.02 */
- #define DISPTYPE_CRT1 0x00000008L
- #define DISPTYPE_CRT2 0x00000004L
- #define DISPTYPE_LCD 0x00000002L
-@@ -16,6 +63,7 @@
- #define DISPMODE_MIRROR 0x00000010L
- #define DISPMODE_DUALVIEW 0x00000040L
-
-+/* Deprecated as of 1.6.02 - use vbflags instead */
- #define HASVB_NONE 0x00
- #define HASVB_301 0x01
- #define HASVB_LVDS 0x02
-@@ -39,6 +87,7 @@ typedef enum _SIS_CHIP_TYPE {
- SIS_650,
- SIS_740,
- SIS_330,
-+ SIS_660,
- MAX_SIS_CHIP
- } SIS_CHIP_TYPE;
-
-@@ -83,13 +132,15 @@ struct ap_data {
- struct mode_info minfo;
- unsigned long iobase;
- unsigned int mem_size;
-- unsigned long disp_state;
-+ unsigned long disp_state; /* deprecated */
- SIS_CHIP_TYPE chip;
- unsigned char hasVB;
-- SIS_TV_TYPE TV_type;
-- SIS_TV_PLUG TV_plug;
-+ SIS_TV_TYPE TV_type; /* deprecated */
-+ SIS_TV_PLUG TV_plug; /* deprecated */
- unsigned long version;
-- char reserved[256];
-+ unsigned long vbflags; /* replaces deprecated entries above */
-+ unsigned long currentvbflags;
-+ char reserved[248];
- };
-
- struct video_info {
-@@ -114,10 +165,10 @@ struct video_info {
- int video_linelength;
- unsigned int refresh_rate;
-
-- unsigned long disp_state;
-- unsigned char hasVB;
-- unsigned char TV_type;
-- unsigned char TV_plug;
-+ unsigned long disp_state; /* DEPRECATED */
-+ unsigned char hasVB; /* DEPRECATED */
-+ unsigned char TV_type; /* DEPRECATED */
-+ unsigned char TV_plug; /* DEPRECATED */
-
- SIS_CHIP_TYPE chip;
- unsigned char revision_id;
-@@ -136,8 +187,19 @@ struct video_info {
-
- unsigned short subsysvendor;
- unsigned short subsysdevice;
-+
-+ unsigned long vbflags; /* Replacing deprecated stuff from above */
-+ unsigned long currentvbflags;
-+
-+ int current_bpp;
-+ int current_width;
-+ int current_height;
-+ int current_htotal;
-+ int current_vtotal;
-+ __u32 current_pixclock;
-+ int current_refresh_rate;
-
-- char reserved[236];
-+ char reserved[200];
- };
-
-
-@@ -177,8 +239,11 @@ struct _SISFB_INFO {
- unsigned char sisfb_lcdpdc; /* PanelDelayCompensation */
-
- unsigned char sisfb_lcda; /* Detected status of LCDA for low res/text modes */
-+
-+ unsigned long sisfb_vbflags;
-+ unsigned long sisfb_currentvbflags;
-
-- char reserved[235]; /* for future use */
-+ char reserved[227]; /* for future use */
- };
-
- #ifdef __KERNEL__
---- linux-2.6.0-test1/init/do_mounts.h 2003-06-14 12:18:24.000000000 -0700
-+++ 25/init/do_mounts.h 2003-07-19 17:03:51.000000000 -0700
-@@ -6,7 +6,7 @@
- #include <linux/unistd.h>
- #include <linux/slab.h>
- #include <linux/mount.h>
--#include <linux/blk.h>
-+#include <linux/major.h>
- #include <linux/root_dev.h>
-
- asmlinkage long sys_unlink(const char *name);
---- linux-2.6.0-test1/init/do_mounts_initrd.c 2003-06-14 12:17:57.000000000 -0700
-+++ 25/init/do_mounts_initrd.c 2003-07-19 17:03:51.000000000 -0700
-@@ -5,6 +5,7 @@
- #include <linux/ext2_fs.h>
- #include <linux/romfs_fs.h>
- #include <linux/initrd.h>
-+#include <linux/sched.h>
-
- #include "do_mounts.h"
-
---- linux-2.6.0-test1/init/do_mounts_rd.c 2003-06-14 12:18:28.000000000 -0700
-+++ 25/init/do_mounts_rd.c 2003-07-19 17:03:51.000000000 -0700
-@@ -5,6 +5,7 @@
- #include <linux/ext2_fs.h>
- #include <linux/romfs_fs.h>
- #include <linux/initrd.h>
-+#include <linux/string.h>
-
- #include "do_mounts.h"
-
---- linux-2.6.0-test1/init/main.c 2003-06-26 22:07:26.000000000 -0700
-+++ 25/init/main.c 2003-07-19 17:03:51.000000000 -0700
-@@ -23,7 +23,6 @@
- #include <linux/ioport.h>
- #include <linux/init.h>
- #include <linux/smp_lock.h>
--#include <linux/blk.h>
- #include <linux/initrd.h>
- #include <linux/hdreg.h>
- #include <linux/bootmem.h>
---- linux-2.6.0-test1/kernel/compat.c 2003-07-13 21:44:35.000000000 -0700
-+++ 25/kernel/compat.c 2003-07-19 17:03:51.000000000 -0700
-@@ -425,9 +425,11 @@ asmlinkage int compat_sys_sched_getaffin
- &kernel_mask);
- set_fs(old_fs);
-
-- if (ret > 0)
-+ if (ret > 0) {
-+ ret = sizeof(compat_ulong_t);
- if (put_user(kernel_mask, user_mask_ptr))
- return -EFAULT;
-+ }
-
- return ret;
- }
---- linux-2.6.0-test1/kernel/extable.c 2003-06-14 12:18:06.000000000 -0700
-+++ 25/kernel/extable.c 2003-07-19 17:03:51.000000000 -0700
-@@ -17,10 +17,10 @@
- */
- #include <linux/module.h>
- #include <asm/uaccess.h>
-+#include <asm/sections.h>
-
- extern const struct exception_table_entry __start___ex_table[];
- extern const struct exception_table_entry __stop___ex_table[];
--extern char _stext[], _etext[], _sinittext[], _einittext[];
-
- /* Given an address, look for it in the exception tables. */
- const struct exception_table_entry *search_exception_tables(unsigned long addr)
---- linux-2.6.0-test1/kernel/fork.c 2003-07-13 21:44:35.000000000 -0700
-+++ 25/kernel/fork.c 2003-07-19 17:06:43.000000000 -0700
-@@ -53,13 +53,6 @@ DEFINE_PER_CPU(unsigned long, process_co
-
- rwlock_t tasklist_lock __cacheline_aligned = RW_LOCK_UNLOCKED; /* outer */
-
--/*
-- * A per-CPU task cache - this relies on the fact that
-- * the very last portion of sys_exit() is executed with
-- * preemption turned off.
-- */
--static task_t *task_cache[NR_CPUS] __cacheline_aligned;
--
- int nr_processes(void)
- {
- int cpu;
-@@ -80,26 +73,8 @@ static kmem_cache_t *task_struct_cachep;
-
- static void free_task(struct task_struct *tsk)
- {
-- /*
-- * The task cache is effectively disabled right now.
-- * Do we want it? The slab cache already has per-cpu
-- * stuff, but the thread info (usually a order-1 page
-- * allocation) doesn't.
-- */
-- if (tsk != current) {
-- free_thread_info(tsk->thread_info);
-- free_task_struct(tsk);
-- } else {
-- int cpu = get_cpu();
--
-- tsk = task_cache[cpu];
-- if (tsk) {
-- free_thread_info(tsk->thread_info);
-- free_task_struct(tsk);
-- }
-- task_cache[cpu] = current;
-- put_cpu();
-- }
-+ free_thread_info(tsk->thread_info);
-+ free_task_struct(tsk);
- }
-
- void __put_task_struct(struct task_struct *tsk)
-@@ -146,7 +121,12 @@ void prepare_to_wait(wait_queue_head_t *
- {
- unsigned long flags;
-
-- __set_current_state(state);
-+ /*
-+ * don't alter the task state if this is just going to
-+ * queue an async wait queue callback
-+ */
-+ if (is_sync_wait(wait))
-+ __set_current_state(state);
- wait->flags &= ~WQ_FLAG_EXCLUSIVE;
- spin_lock_irqsave(&q->lock, flags);
- if (list_empty(&wait->task_list))
-@@ -159,7 +139,12 @@ prepare_to_wait_exclusive(wait_queue_hea
- {
- unsigned long flags;
-
-- __set_current_state(state);
-+ /*
-+ * don't alter the task state if this is just going to
-+ * queue an async wait queue callback
-+ */
-+ if (is_sync_wait(wait))
-+ __set_current_state(state);
- wait->flags |= WQ_FLAG_EXCLUSIVE;
- spin_lock_irqsave(&q->lock, flags);
- if (list_empty(&wait->task_list))
-@@ -220,25 +205,18 @@ static struct task_struct *dup_task_stru
- {
- struct task_struct *tsk;
- struct thread_info *ti;
-- int cpu = get_cpu();
-
- prepare_to_copy(orig);
-
-- tsk = task_cache[cpu];
-- task_cache[cpu] = NULL;
-- put_cpu();
-- if (!tsk) {
-- tsk = alloc_task_struct();
-- if (!tsk)
-- return NULL;
--
-- ti = alloc_thread_info(tsk);
-- if (!ti) {
-- free_task_struct(tsk);
-- return NULL;
-- }
-- } else
-- ti = tsk->thread_info;
-+ tsk = alloc_task_struct();
-+ if (!tsk)
-+ return NULL;
-+
-+ ti = alloc_thread_info(tsk);
-+ if (!ti) {
-+ free_task_struct(tsk);
-+ return NULL;
-+ }
-
- *ti = *orig->thread_info;
- *tsk = *orig;
-@@ -265,7 +243,7 @@ static inline int dup_mmap(struct mm_str
- mm->free_area_cache = TASK_UNMAPPED_BASE;
- mm->map_count = 0;
- mm->rss = 0;
-- mm->cpu_vm_mask = 0;
-+ cpus_clear(mm->cpu_vm_mask);
- pprev = &mm->mmap;
-
- /*
-@@ -430,6 +408,23 @@ void mmput(struct mm_struct *mm)
- }
- }
-
-+/*
-+ * Checks if the use count of an mm is non-zero and if so
-+ * returns a reference to it after bumping up the use count.
-+ * If the use count is zero, it means this mm is going away,
-+ * so return NULL.
-+ */
-+struct mm_struct *mmgrab(struct mm_struct *mm)
-+{
-+ spin_lock(&mmlist_lock);
-+ if (!atomic_read(&mm->mm_users))
-+ mm = NULL;
-+ else
-+ atomic_inc(&mm->mm_users);
-+ spin_unlock(&mmlist_lock);
-+ return mm;
-+}
-+
- /* Please note the differences between mmput and mm_release.
- * mmput is called whenever we stop holding onto a mm_struct,
- * error success whatever.
-@@ -791,8 +786,10 @@ struct task_struct *copy_process(unsigne
- goto fork_out;
-
- retval = -EAGAIN;
-- if (atomic_read(&p->user->processes) >= p->rlim[RLIMIT_NPROC].rlim_cur) {
-- if (!capable(CAP_SYS_ADMIN) && !capable(CAP_SYS_RESOURCE))
-+ if (atomic_read(&p->user->processes) >=
-+ p->rlim[RLIMIT_NPROC].rlim_cur) {
-+ if (!capable(CAP_SYS_ADMIN) && !capable(CAP_SYS_RESOURCE) &&
-+ p->user != &root_user)
- goto bad_fork_free;
- }
-
-@@ -866,6 +863,7 @@ struct task_struct *copy_process(unsigne
- p->start_time = get_jiffies_64();
- p->security = NULL;
- p->io_context = NULL;
-+ p->io_wait = NULL;
-
- retval = -ENOMEM;
- if ((retval = security_task_alloc(p)))
-@@ -1106,7 +1104,7 @@ long do_fork(unsigned long clone_flags,
- init_completion(&vfork);
- }
-
-- if (p->ptrace & PT_PTRACED) {
-+ if ((p->ptrace & PT_PTRACED) || (clone_flags & CLONE_STOPPED)) {
- /*
- * We'll start up with an immediate SIGSTOP.
- */
-@@ -1114,7 +1112,9 @@ long do_fork(unsigned long clone_flags,
- set_tsk_thread_flag(p, TIF_SIGPENDING);
- }
-
-- wake_up_forked_process(p); /* do this last */
-+ p->state = TASK_STOPPED;
-+ if (!(clone_flags & CLONE_STOPPED))
-+ wake_up_forked_process(p); /* do this last */
- ++total_forks;
-
- if (unlikely (trace)) {
---- linux-2.6.0-test1/kernel/ksyms.c 2003-07-13 21:44:35.000000000 -0700
-+++ 25/kernel/ksyms.c 2003-07-19 17:06:51.000000000 -0700
-@@ -120,12 +120,14 @@ EXPORT_SYMBOL(mem_map);
- EXPORT_SYMBOL(max_mapnr);
- #endif
- EXPORT_SYMBOL(high_memory);
-+EXPORT_SYMBOL_GPL(invalidate_mmap_range);
- EXPORT_SYMBOL(vmtruncate);
- EXPORT_SYMBOL(find_vma);
- EXPORT_SYMBOL(get_unmapped_area);
- EXPORT_SYMBOL(init_mm);
- EXPORT_SYMBOL(blk_queue_bounce);
- EXPORT_SYMBOL(blk_congestion_wait);
-+EXPORT_SYMBOL(blk_congestion_wait_wq);
- #ifdef CONFIG_HIGHMEM
- EXPORT_SYMBOL(kmap_high);
- EXPORT_SYMBOL(kunmap_high);
-@@ -219,6 +221,7 @@ EXPORT_SYMBOL(sync_dirty_buffer);
- EXPORT_SYMBOL(submit_bh);
- EXPORT_SYMBOL(unlock_buffer);
- EXPORT_SYMBOL(__wait_on_buffer);
-+EXPORT_SYMBOL(__wait_on_buffer_wq);
- EXPORT_SYMBOL(blockdev_direct_IO);
- EXPORT_SYMBOL(block_write_full_page);
- EXPORT_SYMBOL(block_read_full_page);
-@@ -605,6 +608,19 @@ EXPORT_SYMBOL(next_thread);
- EXPORT_SYMBOL(__per_cpu_offset);
- #endif
-
-+EXPORT_SYMBOL(set_fs_pwd);
-+EXPORT_SYMBOL(set_fs_root);
-+
-+#if defined(CONFIG_LOCKMETER)
-+EXPORT_SYMBOL(_metered_spin_lock);
-+EXPORT_SYMBOL(_metered_spin_unlock);
-+EXPORT_SYMBOL(_metered_spin_trylock);
-+EXPORT_SYMBOL(_metered_read_lock);
-+EXPORT_SYMBOL(_metered_read_unlock);
-+EXPORT_SYMBOL(_metered_write_lock);
-+EXPORT_SYMBOL(_metered_write_unlock);
-+#endif
-+
- /* debug */
- EXPORT_SYMBOL(dump_stack);
- EXPORT_SYMBOL(ptrace_notify);
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/kernel/lockmeter.c 2003-07-19 17:06:40.000000000 -0700
-@@ -0,0 +1,1169 @@
-+/*
-+ * Copyright (C) 1999,2000 Silicon Graphics, Inc.
-+ *
-+ * Written by John Hawkes (hawkes@sgi.com)
-+ * Based on klstat.c by Jack Steiner (steiner@sgi.com)
-+ *
-+ * Modified by Ray Bryant (raybry@us.ibm.com)
-+ * Changes Copyright (C) 2000 IBM, Inc.
-+ * Added save of index in spinlock_t to improve efficiency
-+ * of "hold" time reporting for spinlocks
-+ * Added support for hold time statistics for read and write
-+ * locks.
-+ */
-+
-+#include <linux/config.h>
-+#include <linux/types.h>
-+#include <linux/errno.h>
-+#include <linux/slab.h>
-+#include <linux/sched.h>
-+#include <linux/smp.h>
-+#include <linux/threads.h>
-+#include <linux/version.h>
-+#include <linux/vmalloc.h>
-+#include <linux/spinlock.h>
-+#include <linux/utsname.h>
-+#include <asm/system.h>
-+#include <asm/uaccess.h>
-+
-+#include <linux/lockmeter.h>
-+
-+#define ASSERT(cond)
-+#define bzero(loc,size) memset(loc,0,size)
-+
-+/*<---------------------------------------------------*/
-+/* lockmeter.c */
-+/*>---------------------------------------------------*/
-+
-+static lstat_control_t lstat_control __cacheline_aligned =
-+ { LSTAT_OFF, SPIN_LOCK_UNLOCKED, SPIN_LOCK_UNLOCKED,
-+ 19 * 0, NR_CPUS * 0, 0, NR_CPUS * 0 };
-+
-+static ushort lstat_make_dir_entry(void *, void *);
-+
-+/*
-+ * lstat_lookup
-+ *
-+ * Given a RA, locate the directory entry for the lock.
-+ */
-+static ushort
-+lstat_lookup(void *lock_ptr, void *caller_ra)
-+{
-+ ushort index;
-+ lstat_directory_entry_t *dirp;
-+
-+ dirp = lstat_control.dir;
-+
-+ index = lstat_control.hashtab[DIRHASH(caller_ra)];
-+ while (dirp[index].caller_ra != caller_ra) {
-+ if (index == 0) {
-+ return lstat_make_dir_entry(lock_ptr, caller_ra);
-+ }
-+ index = dirp[index].next_stat_index;
-+ }
-+
-+ if (dirp[index].lock_ptr != NULL && dirp[index].lock_ptr != lock_ptr) {
-+ dirp[index].lock_ptr = NULL;
-+ }
-+
-+ return index;
-+}
-+
-+/*
-+ * lstat_make_dir_entry
-+ * Called to add a new lock to the lock directory.
-+ */
-+static ushort
-+lstat_make_dir_entry(void *lock_ptr, void *caller_ra)
-+{
-+ lstat_directory_entry_t *dirp;
-+ ushort index, hindex;
-+ unsigned long flags;
-+
-+ /* lock the table without recursively reentering this metering code */
-+ local_irq_save(flags);
-+ _raw_spin_lock(&lstat_control.directory_lock);
-+
-+ hindex = DIRHASH(caller_ra);
-+ index = lstat_control.hashtab[hindex];
-+ dirp = lstat_control.dir;
-+ while (index && dirp[index].caller_ra != caller_ra)
-+ index = dirp[index].next_stat_index;
-+
-+ if (index == 0) {
-+ if (lstat_control.next_free_dir_index < LSTAT_MAX_STAT_INDEX) {
-+ index = lstat_control.next_free_dir_index++;
-+ lstat_control.dir[index].caller_ra = caller_ra;
-+ lstat_control.dir[index].lock_ptr = lock_ptr;
-+ lstat_control.dir[index].next_stat_index =
-+ lstat_control.hashtab[hindex];
-+ lstat_control.hashtab[hindex] = index;
-+ } else {
-+ lstat_control.dir_overflow++;
-+ }
-+ }
-+ _raw_spin_unlock(&lstat_control.directory_lock);
-+ local_irq_restore(flags);
-+ return index;
-+}
-+
-+int
-+lstat_update(void *lock_ptr, void *caller_ra, int action)
-+{
-+ int index;
-+ int cpu;
-+
-+ ASSERT(action < LSTAT_ACT_MAX_VALUES);
-+
-+ if (lstat_control.state == LSTAT_OFF)
-+ return 0;
-+
-+ index = lstat_lookup(lock_ptr, caller_ra);
-+ cpu = THIS_CPU_NUMBER;
-+ (*lstat_control.counts[cpu])[index].count[action]++;
-+ (*lstat_control.counts[cpu])[index].acquire_time = get_cycles();
-+
-+ return index;
-+}
-+
-+int
-+lstat_update_time(void *lock_ptr, void *caller_ra, int action, uint32_t ticks)
-+{
-+ ushort index;
-+ int cpu;
-+
-+ ASSERT(action < LSTAT_ACT_MAX_VALUES);
-+
-+ if (lstat_control.state == LSTAT_OFF)
-+ return 0;
-+
-+ index = lstat_lookup(lock_ptr, caller_ra);
-+ cpu = THIS_CPU_NUMBER;
-+ (*lstat_control.counts[cpu])[index].count[action]++;
-+ (*lstat_control.counts[cpu])[index].cum_wait_ticks += (uint64_t) ticks;
-+ if ((*lstat_control.counts[cpu])[index].max_wait_ticks < ticks)
-+ (*lstat_control.counts[cpu])[index].max_wait_ticks = ticks;
-+
-+ (*lstat_control.counts[cpu])[index].acquire_time = get_cycles();
-+
-+ return index;
-+}
-+
-+void
-+_metered_spin_lock(spinlock_t * lock_ptr)
-+{
-+ if (lstat_control.state == LSTAT_OFF) {
-+ _raw_spin_lock(lock_ptr); /* do the real lock */
-+ PUT_INDEX(lock_ptr, 0); /* clean index in case lockmetering */
-+ /* gets turned on before unlock */
-+ } else {
-+ void *this_pc = LSTAT_RA(LSTAT_RA_SPIN);
-+ int index;
-+
-+ if (_raw_spin_trylock(lock_ptr)) {
-+ index = lstat_update(lock_ptr, this_pc,
-+ LSTAT_ACT_NO_WAIT);
-+ } else {
-+ uint32_t start_cycles = get_cycles();
-+ _raw_spin_lock(lock_ptr); /* do the real lock */
-+ index = lstat_update_time(lock_ptr, this_pc,
-+ LSTAT_ACT_SPIN, get_cycles() - start_cycles);
-+ }
-+ /* save the index in the lock itself for use in spin unlock */
-+ PUT_INDEX(lock_ptr, index);
-+ }
-+}
-+
-+int
-+_metered_spin_trylock(spinlock_t * lock_ptr)
-+{
-+ if (lstat_control.state == LSTAT_OFF) {
-+ return _raw_spin_trylock(lock_ptr);
-+ } else {
-+ int retval;
-+ void *this_pc = LSTAT_RA(LSTAT_RA_SPIN);
-+
-+ if ((retval = _raw_spin_trylock(lock_ptr))) {
-+ int index = lstat_update(lock_ptr, this_pc,
-+ LSTAT_ACT_NO_WAIT);
-+ /*
-+ * save the index in the lock itself for use in spin
-+ * unlock
-+ */
-+ PUT_INDEX(lock_ptr, index);
-+ } else {
-+ lstat_update(lock_ptr, this_pc, LSTAT_ACT_REJECT);
-+ }
-+
-+ return retval;
-+ }
-+}
-+
-+void
-+_metered_spin_unlock(spinlock_t * lock_ptr)
-+{
-+ int index = -1;
-+
-+ if (lstat_control.state != LSTAT_OFF) {
-+ index = GET_INDEX(lock_ptr);
-+ /*
-+ * If statistics were turned off when we set the lock,
-+ * then the index can be zero. If that is the case,
-+ * then collect no stats on this call.
-+ */
-+ if (index > 0) {
-+ uint32_t hold_time;
-+ int cpu = THIS_CPU_NUMBER;
-+ hold_time = get_cycles() -
-+ (*lstat_control.counts[cpu])[index].acquire_time;
-+ (*lstat_control.counts[cpu])[index].cum_hold_ticks +=
-+ (uint64_t) hold_time;
-+ if ((*lstat_control.counts[cpu])[index].max_hold_ticks <
-+ hold_time)
-+ (*lstat_control.counts[cpu])[index].
-+ max_hold_ticks = hold_time;
-+ }
-+ }
-+
-+ /* make sure we don't have a stale index value saved */
-+ PUT_INDEX(lock_ptr, 0);
-+ _raw_spin_unlock(lock_ptr); /* do the real unlock */
-+}
-+
-+/*
-+ * allocate the next global read lock structure and store its index
-+ * in the rwlock at "lock_ptr".
-+ */
-+uint32_t
-+alloc_rwlock_struct(rwlock_t * rwlock_ptr)
-+{
-+ int index;
-+ unsigned long flags;
-+ int cpu = THIS_CPU_NUMBER;
-+
-+ /* If we've already overflowed, then do a quick exit */
-+ if (lstat_control.next_free_read_lock_index >
-+ LSTAT_MAX_READ_LOCK_INDEX) {
-+ lstat_control.rwlock_overflow++;
-+ return 0;
-+ }
-+
-+ local_irq_save(flags);
-+ _raw_spin_lock(&lstat_control.directory_lock);
-+
-+ /* It is possible this changed while we were waiting for the directory_lock */
-+ if (lstat_control.state == LSTAT_OFF) {
-+ index = 0;
-+ goto unlock;
-+ }
-+
-+ /* It is possible someone else got here first and set the index */
-+ if ((index = GET_RWINDEX(rwlock_ptr)) == 0) {
-+ /*
-+ * we can't turn on read stats for this lock while there are
-+ * readers (this would mess up the running hold time sum at
-+ * unlock time)
-+ */
-+ if (RWLOCK_READERS(rwlock_ptr) != 0) {
-+ index = 0;
-+ goto unlock;
-+ }
-+
-+ /*
-+ * if stats are turned on after being off, we may need to
-+ * return an old index from when the statistics were on last
-+ * time.
-+ */
-+ for (index = 1; index < lstat_control.next_free_read_lock_index;
-+ index++)
-+ if ((*lstat_control.read_lock_counts[cpu])[index].
-+ lock_ptr == rwlock_ptr)
-+ goto put_index_and_unlock;
-+
-+ /* allocate the next global read lock structure */
-+ if (lstat_control.next_free_read_lock_index >=
-+ LSTAT_MAX_READ_LOCK_INDEX) {
-+ lstat_control.rwlock_overflow++;
-+ index = 0;
-+ goto unlock;
-+ }
-+ index = lstat_control.next_free_read_lock_index++;
-+
-+ /*
-+ * initialize the global read stats data structure for each
-+ * cpu
-+ */
-+ for (cpu = 0; cpu < num_online_cpus(); cpu++) {
-+ (*lstat_control.read_lock_counts[cpu])[index].lock_ptr =
-+ rwlock_ptr;
-+ }
-+put_index_and_unlock:
-+ /* store the index for the read lock structure into the lock */
-+ PUT_RWINDEX(rwlock_ptr, index);
-+ }
-+
-+unlock:
-+ _raw_spin_unlock(&lstat_control.directory_lock);
-+ local_irq_restore(flags);
-+ return index;
-+}
-+
-+void
-+_metered_read_lock(rwlock_t * rwlock_ptr)
-+{
-+ void *this_pc;
-+ uint32_t start_cycles;
-+ int index;
-+ int cpu;
-+ unsigned long flags;
-+ int readers_before, readers_after;
-+ uint64_t cycles64;
-+
-+ if (lstat_control.state == LSTAT_OFF) {
-+ _raw_read_lock(rwlock_ptr);
-+ /* clean index in case lockmetering turns on before an unlock */
-+ PUT_RWINDEX(rwlock_ptr, 0);
-+ return;
-+ }
-+
-+ this_pc = LSTAT_RA(LSTAT_RA_READ);
-+ cpu = THIS_CPU_NUMBER;
-+ index = GET_RWINDEX(rwlock_ptr);
-+
-+ /* allocate the global stats entry for this lock, if needed */
-+ if (index == 0)
-+ index = alloc_rwlock_struct(rwlock_ptr);
-+
-+ readers_before = RWLOCK_READERS(rwlock_ptr);
-+ if (_raw_read_trylock(rwlock_ptr)) {
-+ /*
-+ * We have decremented the lock to count a new reader,
-+ * and have confirmed that no writer has it locked.
-+ */
-+ /* update statistics if enabled */
-+ if (index > 0) {
-+ local_irq_save(flags);
-+ lstat_update((void *) rwlock_ptr, this_pc,
-+ LSTAT_ACT_NO_WAIT);
-+ /* preserve value of TSC so cum_hold_ticks and start_busy use same value */
-+ cycles64 = get_cycles64();
-+ (*lstat_control.read_lock_counts[cpu])[index].
-+ cum_hold_ticks -= cycles64;
-+
-+ /* record time and cpu of start of busy period */
-+ /* this is not perfect (some race conditions are possible) */
-+ if (readers_before == 0) {
-+ (*lstat_control.read_lock_counts[cpu])[index].
-+ start_busy = cycles64;
-+ PUT_RW_CPU(rwlock_ptr, cpu);
-+ }
-+ readers_after = RWLOCK_READERS(rwlock_ptr);
-+ if (readers_after >
-+ (*lstat_control.read_lock_counts[cpu])[index].
-+ max_readers)
-+ (*lstat_control.read_lock_counts[cpu])[index].
-+ max_readers = readers_after;
-+ local_irq_restore(flags);
-+ }
-+
-+ return;
-+ }
-+ /* If we get here, then we could not quickly grab the read lock */
-+
-+ start_cycles = get_cycles(); /* start counting the wait time */
-+
-+ /* Now spin until read_lock is successful */
-+ _raw_read_lock(rwlock_ptr);
-+
-+ lstat_update_time((void *) rwlock_ptr, this_pc, LSTAT_ACT_SPIN,
-+ get_cycles() - start_cycles);
-+
-+ /* update statistics if they are enabled for this lock */
-+ if (index > 0) {
-+ local_irq_save(flags);
-+ cycles64 = get_cycles64();
-+ (*lstat_control.read_lock_counts[cpu])[index].cum_hold_ticks -=
-+ cycles64;
-+
-+ /* this is not perfect (some race conditions are possible) */
-+ if (readers_before == 0) {
-+ (*lstat_control.read_lock_counts[cpu])[index].
-+ start_busy = cycles64;
-+ PUT_RW_CPU(rwlock_ptr, cpu);
-+ }
-+ readers_after = RWLOCK_READERS(rwlock_ptr);
-+ if (readers_after >
-+ (*lstat_control.read_lock_counts[cpu])[index].max_readers)
-+ (*lstat_control.read_lock_counts[cpu])[index].
-+ max_readers = readers_after;
-+ local_irq_restore(flags);
-+ }
-+}
-+
-+void
-+_metered_read_unlock(rwlock_t * rwlock_ptr)
-+{
-+ int index;
-+ int cpu;
-+ unsigned long flags;
-+ uint64_t busy_length;
-+ uint64_t cycles64;
-+
-+ if (lstat_control.state == LSTAT_OFF) {
-+ _raw_read_unlock(rwlock_ptr);
-+ return;
-+ }
-+
-+ index = GET_RWINDEX(rwlock_ptr);
-+ cpu = THIS_CPU_NUMBER;
-+
-+ if (index > 0) {
-+ local_irq_save(flags);
-+ /*
-+ * preserve value of TSC so cum_hold_ticks and busy_ticks are
-+ * consistent.
-+ */
-+ cycles64 = get_cycles64();
-+ (*lstat_control.read_lock_counts[cpu])[index].cum_hold_ticks +=
-+ cycles64;
-+ (*lstat_control.read_lock_counts[cpu])[index].read_lock_count++;
-+
-+ /*
-+ * once again, this is not perfect (some race conditions are
-+ * possible)
-+ */
-+ if (RWLOCK_READERS(rwlock_ptr) == 1) {
-+ int cpu1 = GET_RW_CPU(rwlock_ptr);
-+ uint64_t last_start_busy =
-+ (*lstat_control.read_lock_counts[cpu1])[index].
-+ start_busy;
-+ (*lstat_control.read_lock_counts[cpu])[index].
-+ busy_periods++;
-+ if (cycles64 > last_start_busy) {
-+ busy_length = cycles64 - last_start_busy;
-+ (*lstat_control.read_lock_counts[cpu])[index].
-+ busy_ticks += busy_length;
-+ if (busy_length >
-+ (*lstat_control.
-+ read_lock_counts[cpu])[index].
-+ max_busy)
-+ (*lstat_control.
-+ read_lock_counts[cpu])[index].
-+ max_busy = busy_length;
-+ }
-+ }
-+ local_irq_restore(flags);
-+ }
-+ _raw_read_unlock(rwlock_ptr);
-+}
-+
-+void
-+_metered_write_lock(rwlock_t * rwlock_ptr)
-+{
-+ uint32_t start_cycles;
-+ void *this_pc;
-+ uint32_t spin_ticks = 0; /* in anticipation of a potential wait */
-+ int index;
-+ int write_index = 0;
-+ int cpu;
-+ enum {
-+ writer_writer_conflict,
-+ writer_reader_conflict
-+ } why_wait = writer_writer_conflict;
-+
-+ if (lstat_control.state == LSTAT_OFF) {
-+ _raw_write_lock(rwlock_ptr);
-+ /* clean index in case lockmetering turns on before an unlock */
-+ PUT_RWINDEX(rwlock_ptr, 0);
-+ return;
-+ }
-+
-+ this_pc = LSTAT_RA(LSTAT_RA_WRITE);
-+ cpu = THIS_CPU_NUMBER;
-+ index = GET_RWINDEX(rwlock_ptr);
-+
-+ /* allocate the global stats entry for this lock, if needed */
-+ if (index == 0) {
-+ index = alloc_rwlock_struct(rwlock_ptr);
-+ }
-+
-+ if (_raw_write_trylock(rwlock_ptr)) {
-+ /* We acquired the lock on the first try */
-+ write_index = lstat_update((void *) rwlock_ptr, this_pc,
-+ LSTAT_ACT_NO_WAIT);
-+ /* save the write_index for use in unlock if stats enabled */
-+ if (index > 0)
-+ (*lstat_control.read_lock_counts[cpu])[index].
-+ write_index = write_index;
-+ return;
-+ }
-+
-+ /* If we get here, then we could not quickly grab the write lock */
-+ start_cycles = get_cycles(); /* start counting the wait time */
-+
-+ why_wait = RWLOCK_READERS(rwlock_ptr) ?
-+ writer_reader_conflict : writer_writer_conflict;
-+
-+ /* Now set the lock and wait for conflicts to disappear */
-+ _raw_write_lock(rwlock_ptr);
-+
-+ spin_ticks = get_cycles() - start_cycles;
-+
-+ /* update stats -- if enabled */
-+ if (index > 0 && spin_ticks) {
-+ if (why_wait == writer_reader_conflict) {
-+ /* waited due to a reader holding the lock */
-+ write_index = lstat_update_time((void *)rwlock_ptr,
-+ this_pc, LSTAT_ACT_SPIN, spin_ticks);
-+ } else {
-+ /*
-+ * waited due to another writer holding the lock
-+ */
-+ write_index = lstat_update_time((void *)rwlock_ptr,
-+ this_pc, LSTAT_ACT_WW_SPIN, spin_ticks);
-+ (*lstat_control.counts[cpu])[write_index].
-+ cum_wait_ww_ticks += spin_ticks;
-+ if (spin_ticks >
-+ (*lstat_control.counts[cpu])[write_index].
-+ max_wait_ww_ticks) {
-+ (*lstat_control.counts[cpu])[write_index].
-+ max_wait_ww_ticks = spin_ticks;
-+ }
-+ }
-+
-+ /* save the directory index for use on write_unlock */
-+ (*lstat_control.read_lock_counts[cpu])[index].
-+ write_index = write_index;
-+ }
-+}
-+
-+void
-+_metered_write_unlock(rwlock_t * rwlock_ptr)
-+{
-+ int index;
-+ int cpu;
-+ int write_index;
-+ uint32_t hold_time;
-+
-+ if (lstat_control.state == LSTAT_OFF) {
-+ _raw_write_unlock(rwlock_ptr);
-+ return;
-+ }
-+
-+ cpu = THIS_CPU_NUMBER;
-+ index = GET_RWINDEX(rwlock_ptr);
-+
-+ /* update statistics if stats enabled for this lock */
-+ if (index > 0) {
-+ write_index =
-+ (*lstat_control.read_lock_counts[cpu])[index].write_index;
-+
-+ hold_time = get_cycles() -
-+ (*lstat_control.counts[cpu])[write_index].acquire_time;
-+ (*lstat_control.counts[cpu])[write_index].cum_hold_ticks +=
-+ (uint64_t) hold_time;
-+ if ((*lstat_control.counts[cpu])[write_index].max_hold_ticks <
-+ hold_time)
-+ (*lstat_control.counts[cpu])[write_index].
-+ max_hold_ticks = hold_time;
-+ }
-+ _raw_write_unlock(rwlock_ptr);
-+}
-+
-+int
-+_metered_write_trylock(rwlock_t * rwlock_ptr)
-+{
-+ int retval;
-+ void *this_pc = LSTAT_RA(LSTAT_RA_WRITE);
-+
-+ if ((retval = _raw_write_trylock(rwlock_ptr))) {
-+ lstat_update(rwlock_ptr, this_pc, LSTAT_ACT_NO_WAIT);
-+ } else {
-+ lstat_update(rwlock_ptr, this_pc, LSTAT_ACT_REJECT);
-+ }
-+
-+ return retval;
-+}
-+
-+static void
-+init_control_space(void)
-+{
-+ /* Set all control space pointers to null and indices to "empty" */
-+ int cpu;
-+
-+ /*
-+ * Access CPU_CYCLE_FREQUENCY at the outset, which in some
-+ * architectures may trigger a runtime calculation that uses a
-+ * spinlock. Let's do this before lockmetering is turned on.
-+ */
-+ if (CPU_CYCLE_FREQUENCY == 0)
-+ BUG();
-+
-+ lstat_control.hashtab = NULL;
-+ lstat_control.dir = NULL;
-+ for (cpu = 0; cpu < NR_CPUS; cpu++) {
-+ lstat_control.counts[cpu] = NULL;
-+ lstat_control.read_lock_counts[cpu] = NULL;
-+ }
-+}
-+
-+static int
-+reset_lstat_data(void)
-+{
-+ int cpu, flags;
-+
-+ flags = 0;
-+ lstat_control.next_free_dir_index = 1; /* 0 is for overflows */
-+ lstat_control.next_free_read_lock_index = 1;
-+ lstat_control.dir_overflow = 0;
-+ lstat_control.rwlock_overflow = 0;
-+
-+ lstat_control.started_cycles64 = 0;
-+ lstat_control.ending_cycles64 = 0;
-+ lstat_control.enabled_cycles64 = 0;
-+ lstat_control.first_started_time = 0;
-+ lstat_control.started_time = 0;
-+ lstat_control.ending_time = 0;
-+ lstat_control.intervals = 0;
-+
-+ /*
-+ * paranoia -- in case someone does a "lockstat reset" before
-+ * "lockstat on"
-+ */
-+ if (lstat_control.hashtab) {
-+ bzero(lstat_control.hashtab,
-+ LSTAT_HASH_TABLE_SIZE * sizeof (short));
-+ bzero(lstat_control.dir, LSTAT_MAX_STAT_INDEX *
-+ sizeof (lstat_directory_entry_t));
-+
-+ for (cpu = 0; cpu < num_online_cpus(); cpu++) {
-+ bzero(lstat_control.counts[cpu],
-+ sizeof (lstat_cpu_counts_t));
-+ bzero(lstat_control.read_lock_counts[cpu],
-+ sizeof (lstat_read_lock_cpu_counts_t));
-+ }
-+ }
-+#ifdef NOTDEF
-+ _raw_spin_unlock(&lstat_control.directory_lock);
-+ local_irq_restore(flags);
-+#endif
-+ return 1;
-+}
-+
-+static void
-+release_control_space(void)
-+{
-+ /*
-+ * Called when either (1) allocation of kmem
-+ * or (2) when user writes LSTAT_RELEASE to /pro/lockmeter.
-+ * Assume that all pointers have been initialized to zero,
-+ * i.e., nonzero pointers are valid addresses.
-+ */
-+ int cpu;
-+
-+ if (lstat_control.hashtab) {
-+ kfree(lstat_control.hashtab);
-+ lstat_control.hashtab = NULL;
-+ }
-+
-+ if (lstat_control.dir) {
-+ vfree(lstat_control.dir);
-+ lstat_control.dir = NULL;
-+ }
-+
-+ for (cpu = 0; cpu < NR_CPUS; cpu++) {
-+ if (lstat_control.counts[cpu]) {
-+ vfree(lstat_control.counts[cpu]);
-+ lstat_control.counts[cpu] = NULL;
-+ }
-+ if (lstat_control.read_lock_counts[cpu]) {
-+ kfree(lstat_control.read_lock_counts[cpu]);
-+ lstat_control.read_lock_counts[cpu] = NULL;
-+ }
-+ }
-+}
-+
-+int
-+get_lockmeter_info_size(void)
-+{
-+ return sizeof (lstat_user_request_t)
-+ + num_online_cpus() * sizeof (lstat_cpu_counts_t)
-+ + num_online_cpus() * sizeof (lstat_read_lock_cpu_counts_t)
-+ + (LSTAT_MAX_STAT_INDEX * sizeof (lstat_directory_entry_t));
-+}
-+
-+ssize_t
-+get_lockmeter_info(char *buffer, size_t max_len, loff_t * last_index)
-+{
-+ lstat_user_request_t req;
-+ struct timeval tv;
-+ ssize_t next_ret_bcount;
-+ ssize_t actual_ret_bcount = 0;
-+ int cpu;
-+
-+ *last_index = 0; /* a one-shot read */
-+
-+ req.lstat_version = LSTAT_VERSION;
-+ req.state = lstat_control.state;
-+ req.maxcpus = num_online_cpus();
-+ req.cycleval = CPU_CYCLE_FREQUENCY;
-+#ifdef notyet
-+ req.kernel_magic_addr = (void *) &_etext;
-+ req.kernel_end_addr = (void *) &_etext;
-+#endif
-+ req.uts = system_utsname;
-+ req.intervals = lstat_control.intervals;
-+
-+ req.first_started_time = lstat_control.first_started_time;
-+ req.started_time = lstat_control.started_time;
-+ req.started_cycles64 = lstat_control.started_cycles64;
-+
-+ req.next_free_dir_index = lstat_control.next_free_dir_index;
-+ req.next_free_read_lock_index = lstat_control.next_free_read_lock_index;
-+ req.dir_overflow = lstat_control.dir_overflow;
-+ req.rwlock_overflow = lstat_control.rwlock_overflow;
-+
-+ if (lstat_control.state == LSTAT_OFF) {
-+ if (req.intervals == 0) {
-+ /* mesasurement is off and no valid data present */
-+ next_ret_bcount = sizeof (lstat_user_request_t);
-+ req.enabled_cycles64 = 0;
-+
-+ if ((actual_ret_bcount + next_ret_bcount) > max_len)
-+ return actual_ret_bcount;
-+
-+ copy_to_user(buffer, (void *) &req, next_ret_bcount);
-+ actual_ret_bcount += next_ret_bcount;
-+ return actual_ret_bcount;
-+ } else {
-+ /*
-+ * measurement is off but valid data present
-+ * fetch time info from lstat_control
-+ */
-+ req.ending_time = lstat_control.ending_time;
-+ req.ending_cycles64 = lstat_control.ending_cycles64;
-+ req.enabled_cycles64 = lstat_control.enabled_cycles64;
-+ }
-+ } else {
-+ /*
-+ * this must be a read while data active--use current time,
-+ * etc
-+ */
-+ do_gettimeofday(&tv);
-+ req.ending_time = tv.tv_sec;
-+ req.ending_cycles64 = get_cycles64();
-+ req.enabled_cycles64 = req.ending_cycles64 -
-+ req.started_cycles64 + lstat_control.enabled_cycles64;
-+ }
-+
-+ next_ret_bcount = sizeof (lstat_user_request_t);
-+ if ((actual_ret_bcount + next_ret_bcount) > max_len)
-+ return actual_ret_bcount;
-+
-+ copy_to_user(buffer, (void *) &req, next_ret_bcount);
-+ actual_ret_bcount += next_ret_bcount;
-+
-+ if (!lstat_control.counts[0]) /* not initialized? */
-+ return actual_ret_bcount;
-+
-+ next_ret_bcount = sizeof (lstat_cpu_counts_t);
-+ for (cpu = 0; cpu < num_online_cpus(); cpu++) {
-+ if ((actual_ret_bcount + next_ret_bcount) > max_len)
-+ return actual_ret_bcount; /* leave early */
-+ copy_to_user(buffer + actual_ret_bcount,
-+ lstat_control.counts[cpu], next_ret_bcount);
-+ actual_ret_bcount += next_ret_bcount;
-+ }
-+
-+ next_ret_bcount = LSTAT_MAX_STAT_INDEX *
-+ sizeof (lstat_directory_entry_t);
-+ if (((actual_ret_bcount + next_ret_bcount) > max_len)
-+ || !lstat_control.dir)
-+ return actual_ret_bcount; /* leave early */
-+
-+ copy_to_user(buffer + actual_ret_bcount, lstat_control.dir,
-+ next_ret_bcount);
-+ actual_ret_bcount += next_ret_bcount;
-+
-+ next_ret_bcount = sizeof (lstat_read_lock_cpu_counts_t);
-+ for (cpu = 0; cpu < num_online_cpus(); cpu++) {
-+ if (actual_ret_bcount + next_ret_bcount > max_len)
-+ return actual_ret_bcount;
-+ copy_to_user(buffer + actual_ret_bcount,
-+ lstat_control.read_lock_counts[cpu],
-+ next_ret_bcount);
-+ actual_ret_bcount += next_ret_bcount;
-+ }
-+
-+ return actual_ret_bcount;
-+}
-+
-+/*
-+ * Writing to the /proc lockmeter node enables or disables metering.
-+ * based upon the first byte of the "written" data.
-+ * The following values are defined:
-+ * LSTAT_ON: 1st call: allocates storage, intializes and turns on measurement
-+ * subsequent calls just turn on measurement
-+ * LSTAT_OFF: turns off measurement
-+ * LSTAT_RESET: resets statistics
-+ * LSTAT_RELEASE: releases statistics storage
-+ *
-+ * This allows one to accumulate statistics over several lockstat runs:
-+ *
-+ * lockstat on
-+ * lockstat off
-+ * ...repeat above as desired...
-+ * lockstat get
-+ * ...now start a new set of measurements...
-+ * lockstat reset
-+ * lockstat on
-+ * ...
-+ *
-+ */
-+ssize_t
-+put_lockmeter_info(const char *buffer, size_t len)
-+{
-+ int error = 0;
-+ int dirsize, countsize, read_lock_countsize, hashsize;
-+ int cpu;
-+ char put_char;
-+ int i, read_lock_blocks;
-+ unsigned long flags;
-+ rwlock_t *lock_ptr;
-+ struct timeval tv;
-+
-+ if (len <= 0)
-+ return -EINVAL;
-+
-+ _raw_spin_lock(&lstat_control.control_lock);
-+
-+ get_user(put_char, buffer);
-+ switch (put_char) {
-+
-+ case LSTAT_OFF:
-+ if (lstat_control.state != LSTAT_OFF) {
-+ /*
-+ * To avoid seeing read lock hold times in an
-+ * inconsisent state, we have to follow this protocol
-+ * to turn off statistics
-+ */
-+ local_irq_save(flags);
-+ /*
-+ * getting this lock will stop any read lock block
-+ * allocations
-+ */
-+ _raw_spin_lock(&lstat_control.directory_lock);
-+ /*
-+ * keep any more read lock blocks from being
-+ * allocated
-+ */
-+ lstat_control.state = LSTAT_OFF;
-+ /* record how may read lock blocks there are */
-+ read_lock_blocks =
-+ lstat_control.next_free_read_lock_index;
-+ _raw_spin_unlock(&lstat_control.directory_lock);
-+ /* now go through the list of read locks */
-+ cpu = THIS_CPU_NUMBER;
-+ for (i = 1; i < read_lock_blocks; i++) {
-+ lock_ptr =
-+ (*lstat_control.read_lock_counts[cpu])[i].
-+ lock_ptr;
-+ /* is this saved lock address still valid? */
-+ if (GET_RWINDEX(lock_ptr) == i) {
-+ /*
-+ * lock address appears to still be
-+ * valid because we only hold one lock
-+ * at a time, this can't cause a
-+ * deadlock unless this is a lock held
-+ * as part of the current system call
-+ * path. At the moment there
-+ * are no READ mode locks held to get
-+ * here from user space, so we solve
-+ * this by skipping locks held in
-+ * write mode.
-+ */
-+ if (RWLOCK_IS_WRITE_LOCKED(lock_ptr)) {
-+ PUT_RWINDEX(lock_ptr, 0);
-+ continue;
-+ }
-+ /*
-+ * now we know there are no read
-+ * holders of this lock! stop
-+ * statistics collection for this
-+ * lock
-+ */
-+ _raw_write_lock(lock_ptr);
-+ PUT_RWINDEX(lock_ptr, 0);
-+ _raw_write_unlock(lock_ptr);
-+ }
-+ /*
-+ * it may still be possible for the hold time
-+ * sum to be negative e.g. if a lock is
-+ * reallocated while "busy" we will have to fix
-+ * this up in the data reduction program.
-+ */
-+ }
-+ local_irq_restore(flags);
-+ lstat_control.intervals++;
-+ lstat_control.ending_cycles64 = get_cycles64();
-+ lstat_control.enabled_cycles64 +=
-+ lstat_control.ending_cycles64 -
-+ lstat_control.started_cycles64;
-+ do_gettimeofday(&tv);
-+ lstat_control.ending_time = tv.tv_sec;
-+ /*
-+ * don't deallocate the structures -- we may do a
-+ * lockstat on to add to the data that is already
-+ * there. Use LSTAT_RELEASE to release storage
-+ */
-+ } else {
-+ error = -EBUSY; /* already OFF */
-+ }
-+ break;
-+
-+ case LSTAT_ON:
-+ if (lstat_control.state == LSTAT_OFF) {
-+#ifdef DEBUG_LOCKMETER
-+ printk("put_lockmeter_info(cpu=%d): LSTAT_ON\n",
-+ THIS_CPU_NUMBER);
-+#endif
-+ lstat_control.next_free_dir_index = 1; /* 0 is for overflows */
-+
-+ dirsize = LSTAT_MAX_STAT_INDEX *
-+ sizeof (lstat_directory_entry_t);
-+ hashsize =
-+ (1 + LSTAT_HASH_TABLE_SIZE) * sizeof (ushort);
-+ countsize = sizeof (lstat_cpu_counts_t);
-+ read_lock_countsize =
-+ sizeof (lstat_read_lock_cpu_counts_t);
-+#ifdef DEBUG_LOCKMETER
-+ printk(" dirsize:%d", dirsize);
-+ printk(" hashsize:%d", hashsize);
-+ printk(" countsize:%d", countsize);
-+ printk(" read_lock_countsize:%d\n",
-+ read_lock_countsize);
-+#endif
-+#ifdef DEBUG_LOCKMETER
-+ {
-+ int secs;
-+ unsigned long cycles;
-+ uint64_t cycles64;
-+
-+ do_gettimeofday(&tv);
-+ secs = tv.tv_sec;
-+ do {
-+ do_gettimeofday(&tv);
-+ } while (secs == tv.tv_sec);
-+ cycles = get_cycles();
-+ cycles64 = get_cycles64();
-+ secs = tv.tv_sec;
-+ do {
-+ do_gettimeofday(&tv);
-+ } while (secs == tv.tv_sec);
-+ cycles = get_cycles() - cycles;
-+ cycles64 = get_cycles64() - cycles;
-+ printk("lockmeter: cycleFrequency:%d "
-+ "cycles:%d cycles64:%d\n",
-+ CPU_CYCLE_FREQUENCY, cycles, cycles64);
-+ }
-+#endif
-+
-+ /*
-+ * if this is the first call, allocate storage and
-+ * initialize
-+ */
-+ if (!lstat_control.hashtab) {
-+
-+ spin_lock_init(&lstat_control.directory_lock);
-+
-+ /* guarantee all pointers at zero */
-+ init_control_space();
-+
-+ lstat_control.hashtab =
-+ kmalloc(hashsize, GFP_KERNEL);
-+ if (!lstat_control.hashtab) {
-+ error = -ENOSPC;
-+#ifdef DEBUG_LOCKMETER
-+ printk("!!error kmalloc of hashtab\n");
-+#endif
-+ }
-+ lstat_control.dir = vmalloc(dirsize);
-+ if (!lstat_control.dir) {
-+ error = -ENOSPC;
-+#ifdef DEBUG_LOCKMETER
-+ printk("!!error kmalloc of dir\n");
-+#endif
-+ }
-+
-+ for (cpu = 0; cpu < num_online_cpus(); cpu++) {
-+ lstat_control.counts[cpu] =
-+ vmalloc(countsize);
-+ if (!lstat_control.counts[cpu]) {
-+ error = -ENOSPC;
-+#ifdef DEBUG_LOCKMETER
-+ printk("!!error vmalloc of "
-+ "counts[%d]\n", cpu);
-+#endif
-+ }
-+ lstat_control.read_lock_counts[cpu] =
-+ (lstat_read_lock_cpu_counts_t *)
-+ kmalloc(read_lock_countsize,
-+ GFP_KERNEL);
-+ if (!lstat_control.
-+ read_lock_counts[cpu]) {
-+ error = -ENOSPC;
-+#ifdef DEBUG_LOCKMETER
-+ printk("!!error kmalloc of "
-+ "read_lock_counts[%d]\n",
-+ cpu);
-+#endif
-+ }
-+ }
-+ }
-+
-+ if (error) {
-+ /*
-+ * One or more kmalloc failures -- free
-+ * everything
-+ */
-+ release_control_space();
-+ } else {
-+
-+ if (!reset_lstat_data()) {
-+ error = -EINVAL;
-+ break;
-+ };
-+
-+ /*
-+ * record starting and ending times and the
-+ * like
-+ */
-+ if (lstat_control.intervals == 0) {
-+ do_gettimeofday(&tv);
-+ lstat_control.first_started_time =
-+ tv.tv_sec;
-+ }
-+ lstat_control.started_cycles64 = get_cycles64();
-+ do_gettimeofday(&tv);
-+ lstat_control.started_time = tv.tv_sec;
-+
-+ lstat_control.state = LSTAT_ON;
-+ }
-+ } else {
-+ error = -EBUSY; /* already ON */
-+ }
-+ break;
-+
-+ case LSTAT_RESET:
-+ if (lstat_control.state == LSTAT_OFF) {
-+ if (!reset_lstat_data())
-+ error = -EINVAL;
-+ } else {
-+ error = -EBUSY; /* still on; can't reset */
-+ }
-+ break;
-+
-+ case LSTAT_RELEASE:
-+ if (lstat_control.state == LSTAT_OFF) {
-+ release_control_space();
-+ lstat_control.intervals = 0;
-+ lstat_control.enabled_cycles64 = 0;
-+ } else {
-+ error = -EBUSY;
-+ }
-+ break;
-+
-+ default:
-+ error = -EINVAL;
-+ } /* switch */
-+
-+ _raw_spin_unlock(&lstat_control.control_lock);
-+ return error ? error : len;
-+}
-+
-+#ifdef USER_MODE_TESTING
-+/* following used for user mode testing */
-+void
-+lockmeter_init()
-+{
-+ int dirsize, hashsize, countsize, read_lock_countsize, cpu;
-+
-+ printf("lstat_control is at %x size=%d\n", &lstat_control,
-+ sizeof (lstat_control));
-+ printf("sizeof(spinlock_t)=%d\n", sizeof (spinlock_t));
-+ lstat_control.state = LSTAT_ON;
-+
-+ lstat_control.directory_lock = SPIN_LOCK_UNLOCKED;
-+ lstat_control.next_free_dir_index = 1; /* 0 is for overflows */
-+ lstat_control.next_free_read_lock_index = 1;
-+
-+ dirsize = LSTAT_MAX_STAT_INDEX * sizeof (lstat_directory_entry_t);
-+ hashsize = (1 + LSTAT_HASH_TABLE_SIZE) * sizeof (ushort);
-+ countsize = sizeof (lstat_cpu_counts_t);
-+ read_lock_countsize = sizeof (lstat_read_lock_cpu_counts_t);
-+
-+ lstat_control.hashtab = (ushort *) malloc(hashsize);
-+
-+ if (lstat_control.hashtab == 0) {
-+ printf("malloc failure for at line %d in lockmeter.c\n",
-+ __LINE__);
-+ exit(0);
-+ }
-+
-+ lstat_control.dir = (lstat_directory_entry_t *) malloc(dirsize);
-+
-+ if (lstat_control.dir == 0) {
-+ printf("malloc failure for at line %d in lockmeter.c\n", cpu,
-+ __LINE__);
-+ exit(0);
-+ }
-+
-+ for (cpu = 0; cpu < num_online_cpus(); cpu++) {
-+ int j, k;
-+ j = (int) (lstat_control.counts[cpu] =
-+ (lstat_cpu_counts_t *) malloc(countsize));
-+ k = (int) (lstat_control.read_lock_counts[cpu] =
-+ (lstat_read_lock_cpu_counts_t *)
-+ malloc(read_lock_countsize));
-+ if (j * k == 0) {
-+ printf("malloc failure for cpu=%d at line %d in "
-+ "lockmeter.c\n", cpu, __LINE__);
-+ exit(0);
-+ }
-+ }
-+
-+ memset(lstat_control.hashtab, 0, hashsize);
-+ memset(lstat_control.dir, 0, dirsize);
-+
-+ for (cpu = 0; cpu < num_online_cpus(); cpu++) {
-+ memset(lstat_control.counts[cpu], 0, countsize);
-+ memset(lstat_control.read_lock_counts[cpu], 0,
-+ read_lock_countsize);
-+ }
-+}
-+
-+asm("
-+.align 4
-+.globl __write_lock_failed
-+__write_lock_failed:
-+ " LOCK "addl $" RW_LOCK_BIAS_STR ",(%eax)
-+1: cmpl $" RW_LOCK_BIAS_STR ",(%eax)
-+ jne 1b
-+
-+ " LOCK "subl $" RW_LOCK_BIAS_STR ",(%eax)
-+ jnz __write_lock_failed
-+ ret
-+
-+
-+.align 4
-+.globl __read_lock_failed
-+__read_lock_failed:
-+ lock ; incl (%eax)
-+1: cmpl $1,(%eax)
-+ js 1b
-+
-+ lock ; decl (%eax)
-+ js __read_lock_failed
-+ ret
-+");
-+#endif
---- linux-2.6.0-test1/kernel/Makefile 2003-06-26 22:07:26.000000000 -0700
-+++ 25/kernel/Makefile 2003-07-19 17:06:40.000000000 -0700
-@@ -11,6 +11,7 @@ obj-y = sched.o fork.o exec_domain.o
- obj-$(CONFIG_FUTEX) += futex.o
- obj-$(CONFIG_GENERIC_ISA_DMA) += dma.o
- obj-$(CONFIG_SMP) += cpu.o
-+obj-$(CONFIG_LOCKMETER) += lockmeter.o
- obj-$(CONFIG_UID16) += uid16.o
- obj-$(CONFIG_MODULES) += ksyms.o module.o
- obj-$(CONFIG_KALLSYMS) += kallsyms.o
---- linux-2.6.0-test1/kernel/module.c 2003-07-02 14:53:18.000000000 -0700
-+++ 25/kernel/module.c 2003-07-19 17:04:07.000000000 -0700
-@@ -98,6 +98,17 @@ int init_module(void)
- }
- EXPORT_SYMBOL(init_module);
-
-+/* A thread that wants to hold a reference to a module only while it
-+ * is running can call ths to safely exit.
-+ * nfsd and lockd use this.
-+ */
-+void __module_put_and_exit(struct module *mod, long code)
-+{
-+ module_put(mod);
-+ do_exit(code);
-+}
-+EXPORT_SYMBOL(__module_put_and_exit);
-+
- /* Find a module section: 0 means not found. */
- static unsigned int find_sec(Elf_Ehdr *hdr,
- Elf_Shdr *sechdrs,
-@@ -374,9 +385,9 @@ static void module_unload_init(struct mo
-
- INIT_LIST_HEAD(&mod->modules_which_use_me);
- for (i = 0; i < NR_CPUS; i++)
-- atomic_set(&mod->ref[i].count, 0);
-+ local_set(&mod->ref[i].count, 0);
- /* Hold reference count during initialization. */
-- atomic_set(&mod->ref[smp_processor_id()].count, 1);
-+ local_set(&mod->ref[smp_processor_id()].count, 1);
- /* Backwards compatibility macros put refcount during init. */
- mod->waiter = current;
- }
-@@ -471,7 +482,7 @@ static int stopref(void *cpu)
- struct sched_param param = { .sched_priority = MAX_RT_PRIO-1 };
- setscheduler(current->pid, SCHED_FIFO, ¶m);
- #endif
-- set_cpus_allowed(current, 1UL << (unsigned long)cpu);
-+ set_cpus_allowed(current, cpumask_of_cpu((int)(long)cpu));
-
- /* Ack: we are alive */
- atomic_inc(&stopref_thread_ack);
-@@ -524,7 +535,7 @@ static void stopref_set_state(enum stopr
- static int stop_refcounts(void)
- {
- unsigned int i, cpu;
-- unsigned long old_allowed;
-+ cpumask_t old_allowed;
- int ret = 0;
-
- /* One thread per cpu. We'll do our own. */
-@@ -532,7 +543,7 @@ static int stop_refcounts(void)
-
- /* FIXME: racy with set_cpus_allowed. */
- old_allowed = current->cpus_allowed;
-- set_cpus_allowed(current, 1UL << (unsigned long)cpu);
-+ set_cpus_allowed(current, cpumask_of_cpu(cpu));
-
- atomic_set(&stopref_thread_ack, 0);
- stopref_num_threads = 0;
-@@ -599,7 +610,7 @@ unsigned int module_refcount(struct modu
- unsigned int i, total = 0;
-
- for (i = 0; i < NR_CPUS; i++)
-- total += atomic_read(&mod->ref[i].count);
-+ total += local_read(&mod->ref[i].count);
- return total;
- }
- EXPORT_SYMBOL(module_refcount);
-@@ -610,7 +621,10 @@ static void free_module(struct module *m
- #ifdef CONFIG_MODULE_FORCE_UNLOAD
- static inline int try_force(unsigned int flags)
- {
-- return (flags & O_TRUNC);
-+ int ret = (flags & O_TRUNC);
-+ if (ret)
-+ tainted |= TAINT_FORCED_MODULE;
-+ return ret;
- }
- #else
- static inline int try_force(unsigned int flags)
---- linux-2.6.0-test1/kernel/printk.c 2003-07-02 14:53:18.000000000 -0700
-+++ 25/kernel/printk.c 2003-07-19 17:07:04.000000000 -0700
-@@ -399,9 +399,13 @@ asmlinkage int printk(const char *fmt, .
- char *p;
- static char printk_buf[1024];
- static int log_level_unknown = 1;
-+ static int printk_cpu = -1;
-
-- if (oops_in_progress) {
-- /* If a crash is occurring, make sure we can't deadlock */
-+ if (oops_in_progress && printk_cpu == smp_processor_id()) {
-+ /*
-+ * If a crash is occurring during printk() on this CPU, make
-+ * sure we can't deadlock
-+ */
- spin_lock_init(&logbuf_lock);
- /* And make sure that we print immediately */
- init_MUTEX(&console_sem);
-@@ -409,6 +413,7 @@ asmlinkage int printk(const char *fmt, .
-
- /* This stops the holder of console_sem just where we want him */
- spin_lock_irqsave(&logbuf_lock, flags);
-+ printk_cpu = smp_processor_id();
-
- /* Emit the output into the temporary buffer */
- va_start(args, fmt);
---- linux-2.6.0-test1/kernel/profile.c 2003-06-14 12:18:34.000000000 -0700
-+++ 25/kernel/profile.c 2003-07-19 17:03:51.000000000 -0700
-@@ -8,8 +8,7 @@
- #include <linux/bootmem.h>
- #include <linux/notifier.h>
- #include <linux/mm.h>
--
--extern char _stext, _etext;
-+#include <asm/sections.h>
-
- unsigned int * prof_buffer;
- unsigned long prof_len;
-@@ -36,7 +35,7 @@ void __init profile_init(void)
- return;
-
- /* only text is profiled */
-- prof_len = (unsigned long) &_etext - (unsigned long) &_stext;
-+ prof_len = _etext - _stext;
- prof_len >>= prof_shift;
-
- size = prof_len * sizeof(unsigned int) + PAGE_SIZE - 1;
---- linux-2.6.0-test1/kernel/rcupdate.c 2003-06-26 22:07:26.000000000 -0700
-+++ 25/kernel/rcupdate.c 2003-07-19 17:04:56.000000000 -0700
-@@ -41,6 +41,7 @@
- #include <linux/module.h>
- #include <linux/completion.h>
- #include <linux/percpu.h>
-+#include <linux/seq_file.h>
- #include <linux/notifier.h>
- #include <linux/rcupdate.h>
- #include <linux/cpu.h>
-@@ -48,7 +49,7 @@
- /* Definition for rcupdate control block. */
- struct rcu_ctrlblk rcu_ctrlblk =
- { .mutex = SPIN_LOCK_UNLOCKED, .curbatch = 1,
-- .maxbatch = 1, .rcu_cpu_mask = 0 };
-+ .maxbatch = 1, .rcu_cpu_mask = CPU_MASK_NONE };
- DEFINE_PER_CPU(struct rcu_data, rcu_data) = { 0L };
-
- /* Fake initialization required by compiler */
-@@ -76,6 +77,7 @@ void call_rcu(struct rcu_head *head, voi
- local_irq_save(flags);
- cpu = smp_processor_id();
- list_add_tail(&head->list, &RCU_nxtlist(cpu));
-+ RCU_nr_rcureqs(cpu)++;
- local_irq_restore(flags);
- }
-
-@@ -83,7 +85,7 @@ void call_rcu(struct rcu_head *head, voi
- * Invoke the completed RCU callbacks. They are expected to be in
- * a per-cpu list.
- */
--static void rcu_do_batch(struct list_head *list)
-+static void rcu_do_batch(int cpu, struct list_head *list)
- {
- struct list_head *entry;
- struct rcu_head *head;
-@@ -93,6 +95,7 @@ static void rcu_do_batch(struct list_hea
- list_del(entry);
- head = list_entry(entry, struct rcu_head, list);
- head->func(head->arg);
-+ RCU_nr_rcupdates(cpu)++;
- }
- }
-
-@@ -107,7 +110,7 @@ static void rcu_start_batch(long newbatc
- rcu_ctrlblk.maxbatch = newbatch;
- }
- if (rcu_batch_before(rcu_ctrlblk.maxbatch, rcu_ctrlblk.curbatch) ||
-- (rcu_ctrlblk.rcu_cpu_mask != 0)) {
-+ !cpus_empty(rcu_ctrlblk.rcu_cpu_mask)) {
- return;
- }
- rcu_ctrlblk.rcu_cpu_mask = cpu_online_map;
-@@ -122,7 +125,7 @@ static void rcu_check_quiescent_state(vo
- {
- int cpu = smp_processor_id();
-
-- if (!test_bit(cpu, &rcu_ctrlblk.rcu_cpu_mask))
-+ if (!cpu_isset(cpu, rcu_ctrlblk.rcu_cpu_mask))
- return;
-
- /*
-@@ -138,12 +141,12 @@ static void rcu_check_quiescent_state(vo
- return;
-
- spin_lock(&rcu_ctrlblk.mutex);
-- if (!test_bit(cpu, &rcu_ctrlblk.rcu_cpu_mask))
-+ if (!cpu_isset(cpu, rcu_ctrlblk.rcu_cpu_mask))
- goto out_unlock;
-
-- clear_bit(cpu, &rcu_ctrlblk.rcu_cpu_mask);
-+ cpu_clear(cpu, rcu_ctrlblk.rcu_cpu_mask);
- RCU_last_qsctr(cpu) = RCU_QSCTR_INVALID;
-- if (rcu_ctrlblk.rcu_cpu_mask != 0)
-+ if (!cpus_empty(rcu_ctrlblk.rcu_cpu_mask))
- goto out_unlock;
-
- rcu_ctrlblk.curbatch++;
-@@ -186,7 +189,7 @@ static void rcu_process_callbacks(unsign
- }
- rcu_check_quiescent_state();
- if (!list_empty(&list))
-- rcu_do_batch(&list);
-+ rcu_do_batch(cpu, &list);
- }
-
- void rcu_check_callbacks(int cpu, int user)
-@@ -265,3 +268,44 @@ void synchronize_kernel(void)
-
- EXPORT_SYMBOL(call_rcu);
- EXPORT_SYMBOL(synchronize_kernel);
-+
-+#ifdef CONFIG_PROC_FS
-+
-+static void *rcu_start(struct seq_file *m, loff_t *pos)
-+{
-+ static int cpu;
-+ cpu = *pos;
-+ return *pos < NR_CPUS ? &cpu : NULL;
-+}
-+
-+static void *rcu_next(struct seq_file *m, void *v, loff_t *pos)
-+{
-+ ++*pos;
-+ return rcu_start(m, pos);
-+}
-+
-+static void rcu_stop(struct seq_file *m, void *v)
-+{
-+}
-+
-+static int show_rcu(struct seq_file *m, void *v)
-+{
-+ int cpu = *(int *)v;
-+
-+ if (!cpu_online(cpu))
-+ return 0;
-+ seq_printf(m, "CPU : %d\n", cpu);
-+ seq_printf(m, "RCU requests : %ld\n", RCU_nr_rcureqs(cpu));
-+ seq_printf(m, "RCU updates : %ld\n\n", RCU_nr_rcupdates(cpu));
-+ return 0;
-+}
-+
-+struct seq_operations rcu_op = {
-+ .start = rcu_start,
-+ .next = rcu_next,
-+ .stop = rcu_stop,
-+ .show = show_rcu,
-+};
-+
-+#endif
-+
---- linux-2.6.0-test1/kernel/sched.c 2003-07-13 21:44:35.000000000 -0700
-+++ 25/kernel/sched.c 2003-07-19 17:07:14.000000000 -0700
-@@ -68,14 +68,16 @@
- */
- #define MIN_TIMESLICE ( 10 * HZ / 1000)
- #define MAX_TIMESLICE (200 * HZ / 1000)
--#define CHILD_PENALTY 50
-+#define CHILD_PENALTY 95
- #define PARENT_PENALTY 100
- #define EXIT_WEIGHT 3
- #define PRIO_BONUS_RATIO 25
- #define INTERACTIVE_DELTA 2
-+#define MIN_SLEEP_AVG (HZ)
- #define MAX_SLEEP_AVG (10*HZ)
- #define STARVATION_LIMIT (10*HZ)
- #define NODE_THRESHOLD 125
-+#define MAX_BONUS (MAX_USER_PRIO * PRIO_BONUS_RATIO / 100)
-
- /*
- * If a task is 'interactive' then we reinsert it in the active
-@@ -176,7 +178,7 @@ struct runqueue {
- static DEFINE_PER_CPU(struct runqueue, runqueues);
-
- #define cpu_rq(cpu) (&per_cpu(runqueues, (cpu)))
--#define this_rq() (&__get_cpu_var(runqueues))
-+#define this_rq() (cpu_rq(smp_processor_id())) /* not __get_cpu_var(runqueues)! */
- #define task_rq(p) cpu_rq(task_cpu(p))
- #define cpu_curr(cpu) (cpu_rq(cpu)->curr)
- #define rt_task(p) ((p)->prio < MAX_RT_PRIO)
-@@ -297,6 +299,26 @@ static inline void enqueue_task(struct t
- array->nr_active++;
- p->array = array;
- }
-+/*
-+ * normalise_sleep converts a task's sleep_avg to
-+ * an appropriate proportion of MIN_SLEEP_AVG.
-+ */
-+static inline void normalise_sleep(task_t *p)
-+{
-+ unsigned long old_avg_time = jiffies - p->avg_start;
-+
-+ if (unlikely(old_avg_time < MIN_SLEEP_AVG))
-+ return;
-+
-+ if (p->sleep_avg > MAX_SLEEP_AVG)
-+ p->sleep_avg = MAX_SLEEP_AVG;
-+
-+ if (old_avg_time > MAX_SLEEP_AVG)
-+ old_avg_time = MAX_SLEEP_AVG;
-+
-+ p->sleep_avg = p->sleep_avg * MIN_SLEEP_AVG / old_avg_time;
-+ p->avg_start = jiffies - MIN_SLEEP_AVG;
-+}
-
- /*
- * effective_prio - return the priority that is based on the static
-@@ -315,11 +337,28 @@ static inline void enqueue_task(struct t
- static int effective_prio(task_t *p)
- {
- int bonus, prio;
-+ unsigned long sleep_period;
-
- if (rt_task(p))
- return p->prio;
-
-- bonus = MAX_USER_PRIO*PRIO_BONUS_RATIO*p->sleep_avg/MAX_SLEEP_AVG/100 -
-+ sleep_period = jiffies - p->avg_start;
-+
-+ if (unlikely(!sleep_period))
-+ return p->static_prio;
-+
-+ if (sleep_period > MAX_SLEEP_AVG)
-+ sleep_period = MAX_SLEEP_AVG;
-+
-+ if (p->sleep_avg > sleep_period)
-+ sleep_period = p->sleep_avg;
-+
-+ /*
-+ * The bonus is determined according to the accumulated
-+ * sleep avg over the duration the task has been running
-+ * until it reaches MAX_SLEEP_AVG. -ck
-+ */
-+ bonus = MAX_USER_PRIO*PRIO_BONUS_RATIO*p->sleep_avg/sleep_period/100 -
- MAX_USER_PRIO*PRIO_BONUS_RATIO/100/2;
-
- prio = p->static_prio - bonus;
-@@ -350,31 +389,47 @@ static inline void activate_task(task_t
- long sleep_time = jiffies - p->last_run - 1;
-
- if (sleep_time > 0) {
-- int sleep_avg;
--
- /*
-- * This code gives a bonus to interactive tasks.
-- *
-- * The boost works by updating the 'average sleep time'
-- * value here, based on ->last_run. The more time a task
-- * spends sleeping, the higher the average gets - and the
-- * higher the priority boost gets as well.
-+ * User tasks that sleep a long time are categorised as idle and
-+ * will get just under interactive status with a small runtime
-+ * to allow them to become interactive or non-interactive rapidly
- */
-- sleep_avg = p->sleep_avg + sleep_time;
-+ if (sleep_time > MIN_SLEEP_AVG && p->mm){
-+ p->avg_start = jiffies - MIN_SLEEP_AVG;
-+ p->sleep_avg = MIN_SLEEP_AVG * (MAX_BONUS - INTERACTIVE_DELTA - 2) /
-+ MAX_BONUS;
-+ } else {
-+ unsigned long runtime = jiffies - p->avg_start;
-
-- /*
-- * 'Overflow' bonus ticks go to the waker as well, so the
-- * ticks are not lost. This has the effect of further
-- * boosting tasks that are related to maximum-interactive
-- * tasks.
-- */
-- if (sleep_avg > MAX_SLEEP_AVG)
-- sleep_avg = MAX_SLEEP_AVG;
-- if (p->sleep_avg != sleep_avg) {
-- p->sleep_avg = sleep_avg;
-- p->prio = effective_prio(p);
-+ if (runtime > MAX_SLEEP_AVG)
-+ runtime = MAX_SLEEP_AVG;
-+
-+ /*
-+ * This code gives a bonus to interactive tasks.
-+ *
-+ * The boost works by updating the 'average sleep time'
-+ * value here, based on ->last_run. The more time a task
-+ * spends sleeping, the higher the average gets - and the
-+ * higher the priority boost gets as well.
-+ */
-+ p->sleep_avg += sleep_time;
-+
-+ /*
-+ * Processes that sleep get pushed to a higher priority
-+ * each time they sleep
-+ */
-+ p->sleep_avg = (p->sleep_avg * MAX_BONUS / runtime + 1) * runtime / MAX_BONUS;
-+
-+ if (p->sleep_avg > MAX_SLEEP_AVG)
-+ p->sleep_avg = MAX_SLEEP_AVG;
-+ }
-+
-+ if (unlikely(p->avg_start > jiffies)){
-+ p->avg_start = jiffies;
-+ p->sleep_avg = 0;
- }
- }
-+ p->prio = effective_prio(p);
- __activate_task(p, rq);
- }
-
-@@ -489,7 +544,7 @@ repeat_lock_task:
- */
- if (unlikely(sync && !task_running(rq, p) &&
- (task_cpu(p) != smp_processor_id()) &&
-- (p->cpus_allowed & (1UL << smp_processor_id())))) {
-+ cpu_isset(smp_processor_id(), p->cpus_allowed))) {
-
- set_task_cpu(p, smp_processor_id());
- task_rq_unlock(rq, &flags);
-@@ -551,6 +606,7 @@ void wake_up_forked_process(task_t * p)
- * from forking tasks that are max-interactive.
- */
- current->sleep_avg = current->sleep_avg * PARENT_PENALTY / 100;
-+ normalise_sleep(p);
- p->sleep_avg = p->sleep_avg * CHILD_PENALTY / 100;
- p->prio = effective_prio(p);
- set_task_cpu(p, smp_processor_id());
-@@ -591,6 +647,8 @@ void sched_exit(task_t * p)
- * If the child was a (relative-) CPU hog then decrease
- * the sleep_avg of the parent as well.
- */
-+ normalise_sleep(p);
-+ normalise_sleep(p->parent);
- if (p->sleep_avg < p->parent->sleep_avg)
- p->parent->sleep_avg = (p->parent->sleep_avg * EXIT_WEIGHT +
- p->sleep_avg) / (EXIT_WEIGHT + 1);
-@@ -758,13 +816,13 @@ static inline void double_rq_unlock(runq
- */
- static void sched_migrate_task(task_t *p, int dest_cpu)
- {
-- unsigned long old_mask;
-+ cpumask_t old_mask;
-
- old_mask = p->cpus_allowed;
-- if (!(old_mask & (1UL << dest_cpu)))
-+ if (!cpu_isset(dest_cpu, old_mask))
- return;
- /* force the process onto the specified CPU */
-- set_cpus_allowed(p, 1UL << dest_cpu);
-+ set_cpus_allowed(p, cpumask_of_cpu(dest_cpu));
-
- /* restore the cpus allowed mask */
- set_cpus_allowed(p, old_mask);
-@@ -777,7 +835,7 @@ static void sched_migrate_task(task_t *p
- static int sched_best_cpu(struct task_struct *p)
- {
- int i, minload, load, best_cpu, node = 0;
-- unsigned long cpumask;
-+ cpumask_t cpumask;
-
- best_cpu = task_cpu(p);
- if (cpu_rq(best_cpu)->nr_running <= 2)
-@@ -801,7 +859,7 @@ static int sched_best_cpu(struct task_st
- minload = 10000000;
- cpumask = node_to_cpumask(node);
- for (i = 0; i < NR_CPUS; ++i) {
-- if (!(cpumask & (1UL << i)))
-+ if (!cpu_isset(i, cpumask))
- continue;
- if (cpu_rq(i)->nr_running < minload) {
- best_cpu = i;
-@@ -888,7 +946,7 @@ static inline unsigned int double_lock_b
- /*
- * find_busiest_queue - find the busiest runqueue among the cpus in cpumask.
- */
--static inline runqueue_t *find_busiest_queue(runqueue_t *this_rq, int this_cpu, int idle, int *imbalance, unsigned long cpumask)
-+static inline runqueue_t *find_busiest_queue(runqueue_t *this_rq, int this_cpu, int idle, int *imbalance, cpumask_t cpumask)
- {
- int nr_running, load, max_load, i;
- runqueue_t *busiest, *rq_src;
-@@ -923,7 +981,7 @@ static inline runqueue_t *find_busiest_q
- busiest = NULL;
- max_load = 1;
- for (i = 0; i < NR_CPUS; i++) {
-- if (!((1UL << i) & cpumask))
-+ if (!cpu_isset(i, cpumask))
- continue;
-
- rq_src = cpu_rq(i);
-@@ -942,10 +1000,10 @@ static inline runqueue_t *find_busiest_q
- if (likely(!busiest))
- goto out;
-
-- *imbalance = (max_load - nr_running) / 2;
-+ *imbalance = max_load - nr_running;
-
- /* It needs an at least ~25% imbalance to trigger balancing. */
-- if (!idle && (*imbalance < (max_load + 3)/4)) {
-+ if (!idle && ((*imbalance)*4 < max_load)) {
- busiest = NULL;
- goto out;
- }
-@@ -955,7 +1013,7 @@ static inline runqueue_t *find_busiest_q
- * Make sure nothing changed since we checked the
- * runqueue length.
- */
-- if (busiest->nr_running <= nr_running + 1) {
-+ if (busiest->nr_running <= nr_running) {
- spin_unlock(&busiest->lock);
- busiest = NULL;
- }
-@@ -995,7 +1053,7 @@ static inline void pull_task(runqueue_t
- * We call this with the current runqueue locked,
- * irqs disabled.
- */
--static void load_balance(runqueue_t *this_rq, int idle, unsigned long cpumask)
-+static void load_balance(runqueue_t *this_rq, int idle, cpumask_t cpumask)
- {
- int imbalance, idx, this_cpu = smp_processor_id();
- runqueue_t *busiest;
-@@ -1008,6 +1066,12 @@ static void load_balance(runqueue_t *thi
- goto out;
-
- /*
-+ * We only want to steal a number of tasks equal to 1/2 the imbalance,
-+ * otherwise we'll just shift the imbalance to the new queue:
-+ */
-+ imbalance /= 2;
-+
-+ /*
- * We first consider expired tasks. Those will likely not be
- * executed in the near future, and they are most likely to
- * be cache-cold, thus switching CPUs has the least effect
-@@ -1049,7 +1113,7 @@ skip_queue:
- #define CAN_MIGRATE_TASK(p,rq,this_cpu) \
- ((!idle || (jiffies - (p)->last_run > cache_decay_ticks)) && \
- !task_running(rq, p) && \
-- ((p)->cpus_allowed & (1UL << (this_cpu))))
-+ cpu_isset(this_cpu, (p)->cpus_allowed))
-
- curr = curr->prev;
-
-@@ -1092,10 +1156,10 @@ out:
- static void balance_node(runqueue_t *this_rq, int idle, int this_cpu)
- {
- int node = find_busiest_node(cpu_to_node(this_cpu));
-- unsigned long cpumask, this_cpumask = 1UL << this_cpu;
-
- if (node >= 0) {
-- cpumask = node_to_cpumask(node) | this_cpumask;
-+ cpumask_t cpumask = node_to_cpumask(node);
-+ cpu_set(this_cpu, cpumask);
- spin_lock(&this_rq->lock);
- load_balance(this_rq, idle, cpumask);
- spin_unlock(&this_rq->lock);
-@@ -1207,11 +1271,7 @@ void scheduler_tick(int user_ticks, int
- spin_lock(&rq->lock);
- /*
- * The task was running during this tick - update the
-- * time slice counter and the sleep average. Note: we
-- * do not update a thread's priority until it either
-- * goes to sleep or uses up its timeslice. This makes
-- * it possible for interactive tasks to use up their
-- * timeslices at their highest priority levels.
-+ * time slice counter and the sleep average.
- */
- if (p->sleep_avg)
- p->sleep_avg--;
-@@ -1244,6 +1304,17 @@ void scheduler_tick(int user_ticks, int
- enqueue_task(p, rq->expired);
- } else
- enqueue_task(p, rq->active);
-+ } else if (p->mm && !((task_timeslice(p) - p->time_slice) %
-+ (MIN_TIMESLICE * (MAX_BONUS + 1 - p->sleep_avg * MAX_BONUS / MAX_SLEEP_AVG)))){
-+ /*
-+ * Running user tasks get requeued with their remaining timeslice
-+ * after a period proportional to how cpu intensive they are to
-+ * minimise the duration one interactive task can starve another
-+ */
-+ dequeue_task(p, rq->active);
-+ set_tsk_need_resched(p);
-+ p->prio = effective_prio(p);
-+ enqueue_task(p, rq->active);
- }
- out_unlock:
- spin_unlock(&rq->lock);
-@@ -1606,6 +1677,13 @@ out_unlock:
- task_rq_unlock(rq, &flags);
- }
-
-+#if defined( CONFIG_KGDB)
-+struct task_struct * kgdb_get_idle(int this_cpu)
-+{
-+ return cpu_rq(this_cpu)->idle;
-+}
-+#endif
-+
- #ifndef __alpha__
-
- /*
-@@ -1898,7 +1976,7 @@ out_unlock:
- asmlinkage long sys_sched_setaffinity(pid_t pid, unsigned int len,
- unsigned long __user *user_mask_ptr)
- {
-- unsigned long new_mask;
-+ cpumask_t new_mask;
- int retval;
- task_t *p;
-
-@@ -1946,7 +2024,7 @@ asmlinkage long sys_sched_getaffinity(pi
- unsigned long __user *user_mask_ptr)
- {
- unsigned int real_len;
-- unsigned long mask;
-+ cpumask_t mask;
- int retval;
- task_t *p;
-
-@@ -1962,7 +2040,7 @@ asmlinkage long sys_sched_getaffinity(pi
- goto out_unlock;
-
- retval = 0;
-- mask = p->cpus_allowed & cpu_online_map;
-+ cpus_and(mask, p->cpus_allowed, cpu_online_map);
-
- out_unlock:
- read_unlock(&tasklist_lock);
-@@ -2080,7 +2158,7 @@ asmlinkage long sys_sched_get_priority_m
- }
-
- /**
-- * sys_sched_get_priority_mix - return minimum RT priority.
-+ * sys_sched_get_priority_min - return minimum RT priority.
- * @policy: scheduling class.
- *
- * this syscall returns the minimum rt_priority that can be used
-@@ -2159,17 +2237,16 @@ static inline struct task_struct *younge
-
- static void show_task(task_t * p)
- {
-- unsigned long free = 0;
- task_t *relative;
-- int state;
-- static const char * stat_nam[] = { "R", "S", "D", "T", "Z", "W" };
-+ unsigned state;
-+ static const char *stat_nam[] = { "R", "S", "D", "T", "Z", "W" };
-
- printk("%-13.13s ", p->comm);
- state = p->state ? __ffs(p->state) + 1 : 0;
-- if (((unsigned) state) < sizeof(stat_nam)/sizeof(char *))
-+ if (state < ARRAY_SIZE(stat_nam))
- printk(stat_nam[state]);
- else
-- printk(" ");
-+ printk("?");
- #if (BITS_PER_LONG == 32)
- if (p == current)
- printk(" current ");
-@@ -2181,13 +2258,7 @@ static void show_task(task_t * p)
- else
- printk(" %016lx ", thread_saved_pc(p));
- #endif
-- {
-- unsigned long * n = (unsigned long *) (p->thread_info+1);
-- while (!*n)
-- n++;
-- free = (unsigned long) n - (unsigned long)(p+1);
-- }
-- printk("%5lu %5d %6d ", free, p->pid, p->parent->pid);
-+ printk("%5d %6d ", p->pid, p->parent->pid);
- if ((relative = eldest_child(p)))
- printk("%5d ", relative->pid);
- else
-@@ -2214,12 +2285,12 @@ void show_state(void)
-
- #if (BITS_PER_LONG == 32)
- printk("\n"
-- " free sibling\n");
-- printk(" task PC stack pid father child younger older\n");
-+ " sibling\n");
-+ printk(" task PC pid father child younger older\n");
- #else
- printk("\n"
-- " free sibling\n");
-- printk(" task PC stack pid father child younger older\n");
-+ " sibling\n");
-+ printk(" task PC pid father child younger older\n");
- #endif
- read_lock(&tasklist_lock);
- do_each_thread(g, p) {
-@@ -2292,7 +2363,7 @@ typedef struct {
- * task must not exit() & deallocate itself prematurely. The
- * call is not atomic; no spinlocks may be held.
- */
--int set_cpus_allowed(task_t *p, unsigned long new_mask)
-+int set_cpus_allowed(task_t *p, cpumask_t new_mask)
- {
- unsigned long flags;
- migration_req_t req;
-@@ -2307,7 +2378,7 @@ int set_cpus_allowed(task_t *p, unsigned
- * Can the task run on the task's current CPU? If not then
- * migrate the thread off to a proper CPU.
- */
-- if (new_mask & (1UL << task_cpu(p))) {
-+ if (cpu_isset(task_cpu(p), new_mask)) {
- task_rq_unlock(rq, &flags);
- return 0;
- }
-@@ -2377,7 +2448,7 @@ static int migration_thread(void * data)
- * migration thread on this CPU, guaranteed (we're started
- * serially).
- */
-- set_cpus_allowed(current, 1UL << cpu);
-+ set_cpus_allowed(current, cpumask_of_cpu(cpu));
-
- ret = setscheduler(0, SCHED_FIFO, ¶m);
-
-@@ -2541,7 +2612,7 @@ void __might_sleep(char *file, int line)
- if (time_before(jiffies, prev_jiffy + HZ))
- return;
- prev_jiffy = jiffies;
-- printk(KERN_ERR "Debug: sleeping function called from illegal"
-+ printk(KERN_ERR "Debug: sleeping function called from invalid"
- " context at %s:%d\n", file, line);
- dump_stack();
- }
---- linux-2.6.0-test1/kernel/softirq.c 2003-07-10 18:50:32.000000000 -0700
-+++ 25/kernel/softirq.c 2003-07-19 17:04:53.000000000 -0700
-@@ -59,11 +59,22 @@ static inline void wakeup_softirqd(void)
- wake_up_process(tsk);
- }
-
-+/*
-+ * We restart softirq processing MAX_SOFTIRQ_RESTART times,
-+ * and we fall back to softirqd after that.
-+ *
-+ * This number has been established via experimentation.
-+ * The two things to balance is latency against fairness -
-+ * we want to handle softirqs as soon as possible, but they
-+ * should not be able to lock up the box.
-+ */
-+#define MAX_SOFTIRQ_RESTART 10
-+
- asmlinkage void do_softirq(void)
- {
-+ int max_restart = MAX_SOFTIRQ_RESTART;
- __u32 pending;
- unsigned long flags;
-- __u32 mask;
-
- if (in_interrupt())
- return;
-@@ -75,7 +86,6 @@ asmlinkage void do_softirq(void)
- if (pending) {
- struct softirq_action *h;
-
-- mask = ~pending;
- local_bh_disable();
- restart:
- /* Reset the pending bitmask before enabling irqs */
-@@ -95,10 +105,8 @@ restart:
- local_irq_disable();
-
- pending = local_softirq_pending();
-- if (pending & mask) {
-- mask &= ~pending;
-+ if (pending && --max_restart)
- goto restart;
-- }
- if (pending)
- wakeup_softirqd();
- __local_bh_enable();
-@@ -322,9 +330,8 @@ static int ksoftirqd(void * __bind_cpu)
- current->flags |= PF_IOTHREAD;
-
- /* Migrate to the right CPU */
-- set_cpus_allowed(current, 1UL << cpu);
-- if (smp_processor_id() != cpu)
-- BUG();
-+ set_cpus_allowed(current, cpumask_of_cpu(cpu));
-+ BUG_ON(smp_processor_id() != cpu);
-
- __set_current_state(TASK_INTERRUPTIBLE);
- mb();
---- linux-2.6.0-test1/kernel/suspend.c 2003-07-10 18:50:32.000000000 -0700
-+++ 25/kernel/suspend.c 2003-07-19 17:03:51.000000000 -0700
-@@ -52,7 +52,6 @@
- #include <linux/genhd.h>
- #include <linux/kernel.h>
- #include <linux/major.h>
--#include <linux/blk.h>
- #include <linux/swap.h>
- #include <linux/pm.h>
- #include <linux/device.h>
---- linux-2.6.0-test1/kernel/sys.c 2003-07-13 21:44:35.000000000 -0700
-+++ 25/kernel/sys.c 2003-07-19 17:03:51.000000000 -0700
-@@ -601,6 +601,14 @@ static int set_user(uid_t new_ruid, int
- new_user = alloc_uid(new_ruid);
- if (!new_user)
- return -EAGAIN;
-+
-+ if (atomic_read(&new_user->processes) >=
-+ current->rlim[RLIMIT_NPROC].rlim_cur &&
-+ new_user != &root_user) {
-+ free_uid(new_user);
-+ return -EAGAIN;
-+ }
-+
- switch_uid(new_user);
-
- if(dumpclear)
-@@ -1159,6 +1167,7 @@ asmlinkage long sys_newuname(struct new_
- asmlinkage long sys_sethostname(char __user *name, int len)
- {
- int errno;
-+ char tmp[__NEW_UTS_LEN];
-
- if (!capable(CAP_SYS_ADMIN))
- return -EPERM;
-@@ -1166,7 +1175,8 @@ asmlinkage long sys_sethostname(char __u
- return -EINVAL;
- down_write(&uts_sem);
- errno = -EFAULT;
-- if (!copy_from_user(system_utsname.nodename, name, len)) {
-+ if (!copy_from_user(tmp, name, len)) {
-+ memcpy(system_utsname.nodename, tmp, len);
- system_utsname.nodename[len] = 0;
- errno = 0;
- }
-@@ -1198,6 +1208,7 @@ asmlinkage long sys_gethostname(char __u
- asmlinkage long sys_setdomainname(char __user *name, int len)
- {
- int errno;
-+ char tmp[__NEW_UTS_LEN];
-
- if (!capable(CAP_SYS_ADMIN))
- return -EPERM;
-@@ -1206,9 +1217,10 @@ asmlinkage long sys_setdomainname(char _
-
- down_write(&uts_sem);
- errno = -EFAULT;
-- if (!copy_from_user(system_utsname.domainname, name, len)) {
-- errno = 0;
-+ if (!copy_from_user(tmp, name, len)) {
-+ memcpy(system_utsname.domainname, tmp, len);
- system_utsname.domainname[len] = 0;
-+ errno = 0;
- }
- up_write(&uts_sem);
- return errno;
---- linux-2.6.0-test1/kernel/time.c 2003-06-16 22:32:21.000000000 -0700
-+++ 25/kernel/time.c 2003-07-19 17:03:51.000000000 -0700
-@@ -66,7 +66,7 @@ asmlinkage long sys_time(int * tloc)
- * architectures that need it).
- */
-
--asmlinkage long sys_stime(int * tptr)
-+asmlinkage long sys_stime(time_t *tptr)
- {
- struct timespec tv;
-
-@@ -160,22 +160,25 @@ int do_sys_settimeofday(struct timespec
- return 0;
- }
-
--asmlinkage long sys_settimeofday(struct timeval __user *tv, struct timezone __user *tz)
-+asmlinkage long sys_settimeofday(struct timeval __user *tv,
-+ struct timezone __user *tz)
- {
-- struct timespec new_tv;
-+ struct timeval user_tv;
-+ struct timespec new_ts;
- struct timezone new_tz;
-
- if (tv) {
-- if (copy_from_user(&new_tv, tv, sizeof(*tv)))
-+ if (copy_from_user(&user_tv, tv, sizeof(*tv)))
- return -EFAULT;
-- new_tv.tv_nsec *= NSEC_PER_USEC;
-+ new_ts.tv_sec = user_tv.tv_sec;
-+ new_ts.tv_nsec = user_tv.tv_usec * NSEC_PER_USEC;
- }
- if (tz) {
- if (copy_from_user(&new_tz, tz, sizeof(*tz)))
- return -EFAULT;
- }
-
-- return do_sys_settimeofday(tv ? &new_tv : NULL, tz ? &new_tz : NULL);
-+ return do_sys_settimeofday(tv ? &new_ts : NULL, tz ? &new_tz : NULL);
- }
-
- long pps_offset; /* pps time offset (us) */
---- linux-2.6.0-test1/kernel/timer.c 2003-07-10 18:50:32.000000000 -0700
-+++ 25/kernel/timer.c 2003-07-19 17:04:53.000000000 -0700
-@@ -160,7 +160,7 @@ static void internal_add_timer(tvec_base
- */
- void add_timer(struct timer_list *timer)
- {
-- tvec_base_t *base = &get_cpu_var(tvec_bases);
-+ tvec_base_t *base = &per_cpu(tvec_bases, get_cpu());
- unsigned long flags;
-
- BUG_ON(timer_pending(timer) || !timer->function);
-@@ -171,7 +171,7 @@ void add_timer(struct timer_list *timer)
- internal_add_timer(base, timer);
- timer->base = base;
- spin_unlock_irqrestore(&base->lock, flags);
-- put_cpu_var(tvec_bases);
-+ put_cpu();
- }
-
- /***
-@@ -234,7 +234,7 @@ int mod_timer(struct timer_list *timer,
- return 1;
-
- spin_lock_irqsave(&timer->lock, flags);
-- new_base = &__get_cpu_var(tvec_bases);
-+ new_base = &per_cpu(tvec_bases, smp_processor_id());
- repeat:
- old_base = timer->base;
-
-@@ -792,7 +792,7 @@ seqlock_t xtime_lock __cacheline_aligned
- */
- static void run_timer_softirq(struct softirq_action *h)
- {
-- tvec_base_t *base = &__get_cpu_var(tvec_bases);
-+ tvec_base_t *base = &per_cpu(tvec_bases, smp_processor_id());
-
- if (time_after_eq(jiffies, base->timer_jiffies))
- __run_timers(base);
---- linux-2.6.0-test1/kernel/workqueue.c 2003-07-02 14:53:18.000000000 -0700
-+++ 25/kernel/workqueue.c 2003-07-19 17:04:07.000000000 -0700
-@@ -176,7 +176,7 @@ static int worker_thread(void *__startup
- cwq->thread = current;
-
- set_user_nice(current, -10);
-- set_cpus_allowed(current, 1UL << cpu);
-+ set_cpus_allowed(current, cpumask_of_cpu(cpu));
-
- complete(&startup->done);
-
---- linux-2.6.0-test1/MAINTAINERS 2003-07-13 21:44:34.000000000 -0700
-+++ 25/MAINTAINERS 2003-07-19 17:04:55.000000000 -0700
-@@ -657,6 +657,11 @@ L: emu10k1-devel@lists.sourceforge.net
- W: http://sourceforge.net/projects/emu10k1/
- S: Maintained
-
-+EPSON 1355 FRAMEBUFFER DRIVER
-+P: Christopher Hoover
-+M: ch@murgatroid.com, ch@hpl.hp.com
-+S: Maintained
-+
- ETHEREXPRESS-16 NETWORK DRIVER
- P: Philip Blundell
- M: Philip.Blundell@pobox.com
-@@ -973,7 +978,7 @@ M: scott.feldman@intel.com
- S: Supported
-
- INTERMEZZO FILE SYSTEM
--P: Chen Yang
-+P: Cluster File Systems
- M: intermezzo-devel@lists.sf.net
- W: http://www.inter-mezzo.org/
- L: intermezzo-discuss@lists.sourceforge.net
-@@ -1076,6 +1081,12 @@ L: kbuild-devel@lists.sourceforge.net
- W: http://kbuild.sourceforge.net
- S: Maintained
-
-+KGDB FOR I386 PLATFORM
-+P: George Anzinger
-+M: george@mvista.com
-+L: linux-net@vger.kernel.org
-+S: Supported
-+
- KERNEL NFSD
- P: Neil Brown
- M: neilb@cse.unsw.edu.au
---- linux-2.6.0-test1/Makefile 2003-07-13 21:44:34.000000000 -0700
-+++ 25/Makefile 2003-07-19 17:03:58.000000000 -0700
-@@ -1,7 +1,7 @@
- VERSION = 2
- PATCHLEVEL = 6
- SUBLEVEL = 0
--EXTRAVERSION = -test1
-+EXTRAVERSION = -test1-mm2
-
- # *DOCUMENTATION*
- # To see a list of typical targets execute "make help"
-@@ -781,7 +781,8 @@ rpm: clean spec
- tar -cvz $(RCS_TAR_IGNORE) -f $(KERNELPATH).tar.gz $(KERNELPATH)/. ; \
- rm $(KERNELPATH) ; \
- cd $(TOPDIR) ; \
-- $(CONFIG_SHELL) $(srctree)/scripts/mkversion > .version ; \
-+ $(CONFIG_SHELL) $(srctree)/scripts/mkversion > .tmp_version ; \
-+ mv -f .tmp_version .version; \
- $(RPM) -ta $(TOPDIR)/../$(KERNELPATH).tar.gz ; \
- rm $(TOPDIR)/../$(KERNELPATH).tar.gz
-
---- linux-2.6.0-test1/mm/bootmem.c 2003-07-10 18:50:32.000000000 -0700
-+++ 25/mm/bootmem.c 2003-07-19 17:03:51.000000000 -0700
-@@ -183,7 +183,7 @@ restart_scan:
- for (i = preferred; i < eidx; i += incr) {
- unsigned long j;
- i = find_next_zero_bit(bdata->node_bootmem_map, eidx, i);
-- i = (i + incr - 1) & -incr;
-+ i = ALIGN(i, incr);
- if (test_bit(i, bdata->node_bootmem_map))
- continue;
- for (j = i + 1; j < i + areasize; ++j) {
-@@ -195,7 +195,7 @@ restart_scan:
- start = i;
- goto found;
- fail_block:
-- ;
-+ i = ALIGN(j, incr);
- }
-
- if (preferred > offset) {
---- linux-2.6.0-test1/mm/filemap.c 2003-07-13 21:44:35.000000000 -0700
-+++ 25/mm/filemap.c 2003-07-19 17:07:03.000000000 -0700
-@@ -265,21 +265,42 @@ static wait_queue_head_t *page_waitqueue
- return &zone->wait_table[hash_ptr(page, zone->wait_table_bits)];
- }
-
--void wait_on_page_bit(struct page *page, int bit_nr)
-+/*
-+ * wait for the specified page bit to be cleared
-+ * this could be a synchronous wait or could just queue an async
-+ * notification callback depending on the wait queue entry parameter
-+ *
-+ * A NULL wait queue parameter defaults to sync behaviour
-+ */
-+int wait_on_page_bit_wq(struct page *page, int bit_nr, wait_queue_t *wait)
- {
- wait_queue_head_t *waitqueue = page_waitqueue(page);
-- DEFINE_WAIT(wait);
-+ DEFINE_WAIT(local_wait);
-+
-+ if (!wait)
-+ wait = &local_wait; /* default to a sync wait entry */
-
- do {
-- prepare_to_wait(waitqueue, &wait, TASK_UNINTERRUPTIBLE);
-+ prepare_to_wait(waitqueue, wait, TASK_UNINTERRUPTIBLE);
- if (test_bit(bit_nr, &page->flags)) {
- sync_page(page);
-+ if (!is_sync_wait(wait)) {
-+ /*
-+ * if we've queued an async wait queue
-+ * callback do not block; just tell the
-+ * caller to return and retry later when
-+ * the callback is notified
-+ */
-+ return -EIOCBRETRY;
-+ }
- io_schedule();
- }
- } while (test_bit(bit_nr, &page->flags));
-- finish_wait(waitqueue, &wait);
-+ finish_wait(waitqueue, wait);
-+
-+ return 0;
- }
--EXPORT_SYMBOL(wait_on_page_bit);
-+EXPORT_SYMBOL(wait_on_page_bit_wq);
-
- /**
- * unlock_page() - unlock a locked page
-@@ -289,7 +310,9 @@ EXPORT_SYMBOL(wait_on_page_bit);
- * Unlocks the page and wakes up sleepers in ___wait_on_page_locked().
- * Also wakes sleepers in wait_on_page_writeback() because the wakeup
- * mechananism between PageLocked pages and PageWriteback pages is shared.
-- * But that's OK - sleepers in wait_on_page_writeback() just go back to sleep.
-+ * But that's OK - sleepers in wait_on_page_writeback() just go back to sleep,
-+ * or in case the wakeup notifies async wait queue entries, as in the case
-+ * of aio, retries would be triggered and may re-queue their callbacks.
- *
- * The first mb is necessary to safely close the critical section opened by the
- * TestSetPageLocked(), the second mb is necessary to enforce ordering between
-@@ -326,26 +349,51 @@ void end_page_writeback(struct page *pag
- EXPORT_SYMBOL(end_page_writeback);
-
- /*
-- * Get a lock on the page, assuming we need to sleep to get it.
-+ * Get a lock on the page, assuming we need to either sleep to get it
-+ * or to queue an async notification callback to try again when its
-+ * available.
-+ *
-+ * A NULL wait queue parameter defaults to sync behaviour. Otherwise
-+ * it specifies the wait queue entry to be used for async notification
-+ * or waiting.
- *
- * Ugly: running sync_page() in state TASK_UNINTERRUPTIBLE is scary. If some
- * random driver's requestfn sets TASK_RUNNING, we could busywait. However
- * chances are that on the second loop, the block layer's plug list is empty,
- * so sync_page() will then return in state TASK_UNINTERRUPTIBLE.
- */
--void __lock_page(struct page *page)
-+int __lock_page_wq(struct page *page, wait_queue_t *wait)
- {
- wait_queue_head_t *wqh = page_waitqueue(page);
-- DEFINE_WAIT(wait);
-+ DEFINE_WAIT(local_wait);
-+
-+ if (!wait)
-+ wait = &local_wait;
-
- while (TestSetPageLocked(page)) {
-- prepare_to_wait(wqh, &wait, TASK_UNINTERRUPTIBLE);
-+ prepare_to_wait(wqh, wait, TASK_UNINTERRUPTIBLE);
- if (PageLocked(page)) {
- sync_page(page);
-+ if (!is_sync_wait(wait)) {
-+ /*
-+ * if we've queued an async wait queue
-+ * callback do not block; just tell the
-+ * caller to return and retry later when
-+ * the callback is notified
-+ */
-+ return -EIOCBRETRY;
-+ }
- io_schedule();
- }
- }
-- finish_wait(wqh, &wait);
-+ finish_wait(wqh, wait);
-+ return 0;
-+}
-+EXPORT_SYMBOL(__lock_page_wq);
-+
-+void __lock_page(struct page *page)
-+{
-+ __lock_page_wq(page, NULL);
- }
- EXPORT_SYMBOL(__lock_page);
-
-@@ -395,8 +443,8 @@ struct page *find_trylock_page(struct ad
- *
- * Returns zero if the page was not present. find_lock_page() may sleep.
- */
--struct page *find_lock_page(struct address_space *mapping,
-- unsigned long offset)
-+struct page *find_lock_page_wq(struct address_space *mapping,
-+ unsigned long offset, wait_queue_t *wait)
- {
- struct page *page;
-
-@@ -407,7 +455,10 @@ repeat:
- page_cache_get(page);
- if (TestSetPageLocked(page)) {
- spin_unlock(&mapping->page_lock);
-- lock_page(page);
-+ if (-EIOCBRETRY == lock_page_wq(page, wait)) {
-+ page_cache_release(page);
-+ return ERR_PTR(-EIOCBRETRY);
-+ }
- spin_lock(&mapping->page_lock);
-
- /* Has the page been truncated while we slept? */
-@@ -422,6 +473,12 @@ repeat:
- return page;
- }
-
-+struct page *find_lock_page(struct address_space *mapping,
-+ unsigned long offset)
-+{
-+ return find_lock_page_wq(mapping, offset, NULL);
-+}
-+
- /**
- * find_or_create_page - locate or add a pagecache page
- *
-@@ -544,21 +601,39 @@ void do_generic_mapping_read(struct addr
- read_actor_t actor)
- {
- struct inode *inode = mapping->host;
-- unsigned long index, offset;
-+ unsigned long index, offset, last, end_index;
- struct page *cached_page;
-+ loff_t isize = i_size_read(inode);
- int error;
-
- cached_page = NULL;
- index = *ppos >> PAGE_CACHE_SHIFT;
- offset = *ppos & ~PAGE_CACHE_MASK;
-
-+ last = (*ppos + desc->count) >> PAGE_CACHE_SHIFT;
-+ end_index = isize >> PAGE_CACHE_SHIFT;
-+ if (last > end_index)
-+ last = end_index;
-+
-+ /* Don't repeat the readahead if we are executing aio retries */
-+ if (in_aio()) {
-+ if (is_retried_kiocb(io_wait_to_kiocb(current->io_wait)))
-+ goto done_readahead;
-+ }
-+
-+ /*
-+ * Let the readahead logic know upfront about all
-+ * the pages we'll need to satisfy this request
-+ */
-+ for (; index < last; index++)
-+ page_cache_readahead(mapping, ra, filp, index);
-+ index = *ppos >> PAGE_CACHE_SHIFT;
-+
-+done_readahead:
- for (;;) {
- struct page *page;
-- unsigned long end_index, nr, ret;
-- loff_t isize = i_size_read(inode);
-+ unsigned long nr, ret;
-
-- end_index = isize >> PAGE_CACHE_SHIFT;
--
- if (index > end_index)
- break;
- nr = PAGE_CACHE_SIZE;
-@@ -569,7 +644,6 @@ void do_generic_mapping_read(struct addr
- }
-
- cond_resched();
-- page_cache_readahead(mapping, ra, filp, index);
-
- nr = nr - offset;
- find_page:
-@@ -619,7 +693,12 @@ page_not_up_to_date:
- goto page_ok;
-
- /* Get exclusive access to the page ... */
-- lock_page(page);
-+
-+ if (lock_page_wq(page, current->io_wait)) {
-+ pr_debug("queued lock page \n");
-+ error = -EIOCBRETRY;
-+ goto sync_error;
-+ }
-
- /* Did it get unhashed before we got the lock? */
- if (!page->mapping) {
-@@ -641,13 +720,23 @@ readpage:
- if (!error) {
- if (PageUptodate(page))
- goto page_ok;
-- wait_on_page_locked(page);
-+ if (wait_on_page_locked_wq(page, current->io_wait)) {
-+ pr_debug("queued wait_on_page \n");
-+ error = -EIOCBRETRY;
-+ goto sync_error;
-+ }
-+
- if (PageUptodate(page))
- goto page_ok;
- error = -EIO;
- }
-
-- /* UHHUH! A synchronous read error occurred. Report it */
-+sync_error:
-+ /* We don't have uptodate data in the page yet */
-+ /* Could be due to an error or because we need to
-+ * retry when we get an async i/o notification.
-+ * Report the reason.
-+ */
- desc->error = error;
- page_cache_release(page);
- break;
-@@ -1385,7 +1474,9 @@ __grab_cache_page(struct address_space *
- int err;
- struct page *page;
- repeat:
-- page = find_lock_page(mapping, index);
-+ page = find_lock_page_wq(mapping, index, current->io_wait);
-+ if (IS_ERR(page))
-+ return page;
- if (!page) {
- if (!*cached_page) {
- *cached_page = page_cache_alloc(mapping);
-@@ -1672,7 +1763,6 @@ generic_file_aio_write_nolock(struct kio
- if (err)
- goto out;
-
--
- if (count == 0)
- goto out;
-
-@@ -1726,6 +1816,10 @@ generic_file_aio_write_nolock(struct kio
- fault_in_pages_readable(buf, bytes);
-
- page = __grab_cache_page(mapping,index,&cached_page,&lru_pvec);
-+ if (IS_ERR(page)) {
-+ status = PTR_ERR(page);
-+ break;
-+ }
- if (!page) {
- status = -ENOMEM;
- break;
-@@ -1776,7 +1870,11 @@ generic_file_aio_write_nolock(struct kio
- page_cache_release(page);
- if (status < 0)
- break;
-- balance_dirty_pages_ratelimited(mapping);
-+ status = balance_dirty_pages_ratelimited(mapping);
-+ if (status < 0) {
-+ pr_debug("async balance_dirty_pages\n");
-+ break;
-+ }
- cond_resched();
- } while (count);
- *ppos = pos;
-@@ -1787,12 +1885,14 @@ generic_file_aio_write_nolock(struct kio
- /*
- * For now, when the user asks for O_SYNC, we'll actually give O_DSYNC
- */
-- if (status >= 0) {
-- if ((file->f_flags & O_SYNC) || IS_SYNC(inode))
-- status = generic_osync_inode(inode,
-- OSYNC_METADATA|OSYNC_DATA);
-+ if (likely(status >= 0)) {
-+ if (unlikely((file->f_flags & O_SYNC) || IS_SYNC(inode))) {
-+ if (!a_ops->writepage)
-+ status = generic_osync_inode(inode,
-+ OSYNC_METADATA|OSYNC_DATA);
-+ }
- }
--
-+
- out_status:
- err = written ? written : status;
- out:
-@@ -1819,18 +1919,43 @@ ssize_t generic_file_aio_write(struct ki
- size_t count, loff_t pos)
- {
- struct file *file = iocb->ki_filp;
-- struct inode *inode = file->f_dentry->d_inode->i_mapping->host;
-- ssize_t err;
-- struct iovec local_iov = { .iov_base = (void __user *)buf, .iov_len = count };
-+ struct address_space *mapping = file->f_dentry->d_inode->i_mapping;
-+ struct inode *inode = mapping->host;
-+ ssize_t ret;
-+ struct iovec local_iov = { .iov_base = (void __user *)buf,
-+ .iov_len = count };
-
- BUG_ON(iocb->ki_pos != pos);
-
-+ if (!buf && !is_sync_kiocb(iocb)) {
-+ /* nothing to transfer, may just need to sync data */
-+ ret = count;
-+ goto osync;
-+ }
-+
- down(&inode->i_sem);
-- err = generic_file_aio_write_nolock(iocb, &local_iov, 1,
-+ ret = generic_file_aio_write_nolock(iocb, &local_iov, 1,
- &iocb->ki_pos);
- up(&inode->i_sem);
-
-- return err;
-+ /*
-+ * Avoid doing a sync in parts for aio - its more efficient to
-+ * call in again after all the data has been copied
-+ */
-+ if (!is_sync_kiocb(iocb))
-+ return ret;
-+
-+osync:
-+ if (ret > 0 && ((file->f_flags & O_SYNC) || IS_SYNC(inode))) {
-+ ssize_t err;
-+
-+ err = sync_page_range(inode, mapping, pos, ret);
-+ if (err < 0)
-+ ret = err;
-+ else
-+ iocb->ki_pos = pos + err;
-+ }
-+ return ret;
- }
- EXPORT_SYMBOL(generic_file_aio_write);
- EXPORT_SYMBOL(generic_file_aio_write_nolock);
-@@ -1838,15 +1963,24 @@ EXPORT_SYMBOL(generic_file_aio_write_nol
- ssize_t generic_file_write(struct file *file, const char __user *buf,
- size_t count, loff_t *ppos)
- {
-- struct inode *inode = file->f_dentry->d_inode->i_mapping->host;
-- ssize_t err;
-- struct iovec local_iov = { .iov_base = (void __user *)buf, .iov_len = count };
-+ struct address_space *mapping = file->f_dentry->d_inode->i_mapping;
-+ struct inode *inode = mapping->host;
-+ ssize_t ret;
-+ struct iovec local_iov = { .iov_base = (void __user *)buf,
-+ .iov_len = count };
-
- down(&inode->i_sem);
-- err = generic_file_write_nolock(file, &local_iov, 1, ppos);
-+ ret = generic_file_write_nolock(file, &local_iov, 1, ppos);
- up(&inode->i_sem);
-
-- return err;
-+ if (ret > 0 && ((file->f_flags & O_SYNC) || IS_SYNC(inode))) {
-+ ssize_t err;
-+
-+ err = sync_page_range(inode, mapping, *ppos - ret, ret);
-+ if (err < 0)
-+ ret = err;
-+ }
-+ return ret;
- }
-
- ssize_t generic_file_readv(struct file *filp, const struct iovec *iov,
-@@ -1863,7 +1997,7 @@ ssize_t generic_file_readv(struct file *
- }
-
- ssize_t generic_file_writev(struct file *file, const struct iovec *iov,
-- unsigned long nr_segs, loff_t * ppos)
-+ unsigned long nr_segs, loff_t *ppos)
- {
- struct inode *inode = file->f_dentry->d_inode;
- ssize_t ret;
-@@ -1871,6 +2005,15 @@ ssize_t generic_file_writev(struct file
- down(&inode->i_sem);
- ret = generic_file_write_nolock(file, iov, nr_segs, ppos);
- up(&inode->i_sem);
-+
-+ if (ret > 0 && ((file->f_flags & O_SYNC) || IS_SYNC(inode))) {
-+ ssize_t err;
-+
-+ err = sync_page_range(inode, inode->i_mapping,
-+ *ppos - ret, ret);
-+ if (err < 0)
-+ ret = err;
-+ }
- return ret;
- }
-
---- linux-2.6.0-test1/mm/fremap.c 2003-06-14 12:17:56.000000000 -0700
-+++ 25/mm/fremap.c 2003-07-19 17:07:16.000000000 -0700
-@@ -67,11 +67,11 @@ int install_page(struct mm_struct *mm, s
- pgd = pgd_offset(mm, addr);
- spin_lock(&mm->page_table_lock);
-
-- pmd = pmd_alloc(mm, pgd, addr);
-+ pmd = pmd_alloc_map(mm, pgd, addr);
- if (!pmd)
- goto err_unlock;
-
-- pte = pte_alloc_map(mm, pmd, addr);
-+ pte = pte_alloc_map(mm, pgd, &pmd, addr);
- if (!pte)
- goto err_unlock;
-
-@@ -82,6 +82,7 @@ int install_page(struct mm_struct *mm, s
- set_pte(pte, mk_pte(page, prot));
- pte_chain = page_add_rmap(page, pte, pte_chain);
- pte_unmap(pte);
-+ pmd_unmap(pmd);
- if (flush)
- flush_tlb_page(vma, addr);
- update_mmu_cache(vma, addr, *pte);
---- linux-2.6.0-test1/mm/memory.c 2003-07-13 21:44:35.000000000 -0700
-+++ 25/mm/memory.c 2003-07-19 17:07:16.000000000 -0700
-@@ -104,6 +104,7 @@ static inline void free_one_pgd(struct m
- {
- int j;
- pmd_t * pmd;
-+ struct page *page;
-
- if (pgd_none(*dir))
- return;
-@@ -112,11 +113,13 @@ static inline void free_one_pgd(struct m
- pgd_clear(dir);
- return;
- }
-- pmd = pmd_offset(dir, 0);
-+ page = pgd_page(*dir);
-+ pmd = pmd_offset_map(dir, 0);
- pgd_clear(dir);
- for (j = 0; j < PTRS_PER_PMD ; j++)
- free_one_pmd(tlb, pmd+j);
-- pmd_free_tlb(tlb, pmd);
-+ pmd_unmap(pmd);
-+ pmd_free_tlb(tlb, page);
- }
-
- /*
-@@ -136,30 +139,38 @@ void clear_page_tables(struct mmu_gather
- } while (--nr);
- }
-
--pte_t * pte_alloc_map(struct mm_struct *mm, pmd_t *pmd, unsigned long address)
-+/*
-+ * error return happens with pmd unmapped
-+ */
-+pte_t *pte_alloc_map(struct mm_struct *mm, pgd_t *pgd, pmd_t **pmd, unsigned long addr)
- {
-- if (!pmd_present(*pmd)) {
-+ if (!pmd_present(**pmd)) {
- struct page *new;
-
-+ pmd_unmap(*pmd);
- spin_unlock(&mm->page_table_lock);
-- new = pte_alloc_one(mm, address);
-+ new = pte_alloc_one(mm, addr);
- spin_lock(&mm->page_table_lock);
-- if (!new)
-+ if (!new) {
-+ *pmd = NULL;
- return NULL;
-+ }
-+
-+ *pmd = pmd_offset_map(pgd, addr);
-
- /*
- * Because we dropped the lock, we should re-check the
- * entry, as somebody else could have populated it..
- */
-- if (pmd_present(*pmd)) {
-+ if (pmd_present(**pmd)) {
- pte_free(new);
- goto out;
- }
-- pgtable_add_rmap(new, mm, address);
-- pmd_populate(mm, pmd, new);
-+ pgtable_add_rmap(new, mm, addr);
-+ pmd_populate(mm, *pmd, new);
- }
- out:
-- return pte_offset_map(pmd, address);
-+ return pte_offset_map(*pmd, addr);
- }
-
- pte_t * pte_alloc_kernel(struct mm_struct *mm, pmd_t *pmd, unsigned long address)
-@@ -199,7 +210,7 @@ out:
- * variable count and make things faster. -jj
- *
- * dst->page_table_lock is held on entry and exit,
-- * but may be dropped within pmd_alloc() and pte_alloc_map().
-+ * but may be dropped within pmd_alloc_map() and pte_alloc_map().
- */
- int copy_page_range(struct mm_struct *dst, struct mm_struct *src,
- struct vm_area_struct *vma)
-@@ -244,11 +255,10 @@ skip_copy_pmd_range: address = (address
- continue;
- }
-
-- src_pmd = pmd_offset(src_pgd, address);
-- dst_pmd = pmd_alloc(dst, dst_pgd, address);
-+ dst_pmd = pmd_alloc_map(dst, dst_pgd, address);
- if (!dst_pmd)
- goto nomem;
--
-+ src_pmd = pmd_offset_map_nested(src_pgd, address);
- do {
- pte_t * src_pte, * dst_pte;
-
-@@ -261,15 +271,20 @@ skip_copy_pmd_range: address = (address
- pmd_clear(src_pmd);
- skip_copy_pte_range:
- address = (address + PMD_SIZE) & PMD_MASK;
-- if (address >= end)
-+ if (address >= end) {
-+ pmd_unmap(dst_pmd);
-+ pmd_unmap_nested(src_pmd);
- goto out;
-+ }
- goto cont_copy_pmd_range;
- }
-
-- dst_pte = pte_alloc_map(dst, dst_pmd, address);
-+ pmd_unmap_nested(src_pmd);
-+ dst_pte = pte_alloc_map(dst, dst_pgd, &dst_pmd, address);
- if (!dst_pte)
- goto nomem;
- spin_lock(&src->page_table_lock);
-+ src_pmd = pmd_offset_map_nested(src_pgd, address);
- src_pte = pte_offset_map_nested(src_pmd, address);
- do {
- pte_t pte = *src_pte;
-@@ -336,6 +351,8 @@ skip_copy_pte_range:
- */
- pte_unmap_nested(src_pte);
- pte_unmap(dst_pte);
-+ pmd_unmap_nested(src_pmd);
-+ pmd_unmap(dst_pmd);
- spin_unlock(&src->page_table_lock);
- spin_unlock(&dst->page_table_lock);
- pte_chain = pte_chain_alloc(GFP_KERNEL);
-@@ -343,12 +360,16 @@ skip_copy_pte_range:
- if (!pte_chain)
- goto nomem;
- spin_lock(&src->page_table_lock);
-+ dst_pmd = pmd_offset_map(dst_pgd, address);
-+ src_pmd = pmd_offset_map_nested(src_pgd, address);
- dst_pte = pte_offset_map(dst_pmd, address);
- src_pte = pte_offset_map_nested(src_pmd,
- address);
- cont_copy_pte_range_noset:
- address += PAGE_SIZE;
- if (address >= end) {
-+ pmd_unmap(dst_pmd);
-+ pmd_unmap_nested(src_pmd);
- pte_unmap_nested(src_pte);
- pte_unmap(dst_pte);
- goto out_unlock;
-@@ -364,6 +385,8 @@ cont_copy_pmd_range:
- src_pmd++;
- dst_pmd++;
- } while ((unsigned long)src_pmd & PMD_TABLE_MASK);
-+ pmd_unmap_nested(src_pmd-1);
-+ pmd_unmap(dst_pmd-1);
- }
- out_unlock:
- spin_unlock(&src->page_table_lock);
-@@ -439,7 +462,7 @@ zap_pmd_range(struct mmu_gather *tlb, pg
- pgd_clear(dir);
- return;
- }
-- pmd = pmd_offset(dir, address);
-+ pmd = pmd_offset_map(dir, address);
- end = address + size;
- if (end > ((address + PGDIR_SIZE) & PGDIR_MASK))
- end = ((address + PGDIR_SIZE) & PGDIR_MASK);
-@@ -448,6 +471,7 @@ zap_pmd_range(struct mmu_gather *tlb, pg
- address = (address + PMD_SIZE) & PMD_MASK;
- pmd++;
- } while (address < end);
-+ pmd_unmap(pmd - 1);
- }
-
- void unmap_page_range(struct mmu_gather *tlb, struct vm_area_struct *vma,
-@@ -629,20 +653,27 @@ follow_page(struct mm_struct *mm, unsign
- if (pgd_none(*pgd) || pgd_bad(*pgd))
- goto out;
-
-- pmd = pmd_offset(pgd, address);
-+ pmd = pmd_offset_map(pgd, address);
- if (pmd_none(*pmd))
-- goto out;
-- if (pmd_huge(*pmd))
-- return follow_huge_pmd(mm, address, pmd, write);
-- if (pmd_bad(*pmd))
-- goto out;
-+ goto out_unmap;
-+ if (pmd_bad(*pmd)) {
-+ pmd_ERROR(*pmd);
-+ pmd_clear(pmd);
-+ goto out_unmap;
-+ }
-+ if (pmd_huge(*pmd)) {
-+ struct page *page = follow_huge_pmd(mm, address, pmd, write);
-+ pmd_unmap(pmd);
-+ return page;
-+ }
-
- ptep = pte_offset_map(pmd, address);
- if (!ptep)
-- goto out;
-+ goto out_unmap;
-
- pte = *ptep;
- pte_unmap(ptep);
-+ pmd_unmap(pmd);
- if (pte_present(pte)) {
- if (!write || (pte_write(pte) && pte_dirty(pte))) {
- pfn = pte_pfn(pte);
-@@ -653,6 +684,9 @@ follow_page(struct mm_struct *mm, unsign
-
- out:
- return NULL;
-+out_unmap:
-+ pmd_unmap(pmd);
-+ goto out;
- }
-
- /*
-@@ -711,7 +745,7 @@ int get_user_pages(struct task_struct *t
- pgd = pgd_offset_k(pg);
- if (!pgd)
- return i ? : -EFAULT;
-- pmd = pmd_offset(pgd, pg);
-+ pmd = pmd_offset_kernel(pgd, pg);
- if (!pmd)
- return i ? : -EFAULT;
- pte = pte_offset_kernel(pmd, pg);
-@@ -803,8 +837,8 @@ static void zeromap_pte_range(pte_t * pt
- } while (address && (address < end));
- }
-
--static inline int zeromap_pmd_range(struct mm_struct *mm, pmd_t * pmd, unsigned long address,
-- unsigned long size, pgprot_t prot)
-+static inline int zeromap_pmd_range(struct mm_struct *mm, pgd_t *pgd, pmd_t **pmd,
-+ unsigned long address, unsigned long size, pgprot_t prot)
- {
- unsigned long end;
-
-@@ -813,13 +847,13 @@ static inline int zeromap_pmd_range(stru
- if (end > PGDIR_SIZE)
- end = PGDIR_SIZE;
- do {
-- pte_t * pte = pte_alloc_map(mm, pmd, address);
-+ pte_t *pte = pte_alloc_map(mm, pgd, pmd, address);
- if (!pte)
- return -ENOMEM;
- zeromap_pte_range(pte, address, end - address, prot);
- pte_unmap(pte);
- address = (address + PMD_SIZE) & PMD_MASK;
-- pmd++;
-+ (*pmd)++;
- } while (address && (address < end));
- return 0;
- }
-@@ -839,13 +873,14 @@ int zeromap_page_range(struct vm_area_st
-
- spin_lock(&mm->page_table_lock);
- do {
-- pmd_t *pmd = pmd_alloc(mm, dir, address);
-+ pmd_t *pmd = pmd_alloc_map(mm, dir, address);
- error = -ENOMEM;
- if (!pmd)
- break;
-- error = zeromap_pmd_range(mm, pmd, address, end - address, prot);
-+ error = zeromap_pmd_range(mm, dir, &pmd, address, end - address, prot);
- if (error)
- break;
-+ pmd_unmap(pmd - 1);
- address = (address + PGDIR_SIZE) & PGDIR_MASK;
- dir++;
- } while (address && (address < end));
-@@ -880,8 +915,9 @@ static inline void remap_pte_range(pte_t
- } while (address && (address < end));
- }
-
--static inline int remap_pmd_range(struct mm_struct *mm, pmd_t * pmd, unsigned long address, unsigned long size,
-- unsigned long phys_addr, pgprot_t prot)
-+static inline int remap_pmd_range(struct mm_struct *mm, pgd_t *pgd, pmd_t **pmd,
-+ unsigned long address, unsigned long size,
-+ unsigned long phys_addr, pgprot_t prot)
- {
- unsigned long base, end;
-
-@@ -892,13 +928,13 @@ static inline int remap_pmd_range(struct
- end = PGDIR_SIZE;
- phys_addr -= address;
- do {
-- pte_t * pte = pte_alloc_map(mm, pmd, base + address);
-+ pte_t *pte = pte_alloc_map(mm, pgd, pmd, base + address);
- if (!pte)
- return -ENOMEM;
- remap_pte_range(pte, base + address, end - address, address + phys_addr, prot);
- pte_unmap(pte);
- address = (address + PMD_SIZE) & PMD_MASK;
-- pmd++;
-+ (*pmd)++;
- } while (address && (address < end));
- return 0;
- }
-@@ -920,13 +956,14 @@ int remap_page_range(struct vm_area_stru
-
- spin_lock(&mm->page_table_lock);
- do {
-- pmd_t *pmd = pmd_alloc(mm, dir, from);
-+ pmd_t *pmd = pmd_alloc_map(mm, dir, from);
- error = -ENOMEM;
- if (!pmd)
- break;
-- error = remap_pmd_range(mm, pmd, from, end - from, phys_addr + from, prot);
-+ error = remap_pmd_range(mm, dir, &pmd, from, end - from, phys_addr + from, prot);
- if (error)
- break;
-+ pmd_unmap(pmd - 1);
- from = (from + PGDIR_SIZE) & PGDIR_MASK;
- dir++;
- } while (from && (from < end));
-@@ -996,6 +1033,7 @@ static int do_wp_page(struct mm_struct *
- * data, but for the moment just pretend this is OOM.
- */
- pte_unmap(page_table);
-+ pmd_unmap(pmd);
- printk(KERN_ERR "do_wp_page: bogus page at address %08lx\n",
- address);
- goto oom;
-@@ -1010,11 +1048,13 @@ static int do_wp_page(struct mm_struct *
- establish_pte(vma, address, page_table,
- pte_mkyoung(pte_mkdirty(pte_mkwrite(pte))));
- pte_unmap(page_table);
-+ pmd_unmap(pmd);
- ret = VM_FAULT_MINOR;
- goto out;
- }
- }
- pte_unmap(page_table);
-+ pmd_unmap(pmd);
-
- /*
- * Ok, we need to copy. Oh, well..
-@@ -1034,6 +1074,7 @@ static int do_wp_page(struct mm_struct *
- * Re-check the pte - we dropped the lock
- */
- spin_lock(&mm->page_table_lock);
-+ pmd = pmd_offset_map(pgd_offset(mm, address), address);
- page_table = pte_offset_map(pmd, address);
- if (pte_same(*page_table, pte)) {
- if (PageReserved(old_page))
-@@ -1047,6 +1088,7 @@ static int do_wp_page(struct mm_struct *
- new_page = old_page;
- }
- pte_unmap(page_table);
-+ pmd_unmap(pmd);
- page_cache_release(new_page);
- page_cache_release(old_page);
- ret = VM_FAULT_MINOR;
-@@ -1062,35 +1104,77 @@ out:
- return ret;
- }
-
--static void vmtruncate_list(struct list_head *head, unsigned long pgoff)
-+/*
-+ * Helper function for invalidate_mmap_range().
-+ * Both hba and hlen are page numbers in PAGE_SIZE units.
-+ * An hlen of zero blows away the entire portion file after hba.
-+ */
-+static void
-+invalidate_mmap_range_list(struct list_head *head,
-+ unsigned long const hba,
-+ unsigned long const hlen)
- {
-- unsigned long start, end, len, diff;
-- struct vm_area_struct *vma;
- struct list_head *curr;
--
-+ unsigned long hea; /* last page of hole. */
-+ unsigned long vba;
-+ unsigned long vea; /* last page of corresponding uva hole. */
-+ struct vm_area_struct *vp;
-+ unsigned long zba;
-+ unsigned long zea;
-+
-+ hea = hba + hlen - 1; /* avoid overflow. */
-+ if (hea < hba)
-+ hea = ULONG_MAX;
- list_for_each(curr, head) {
-- vma = list_entry(curr, struct vm_area_struct, shared);
-- start = vma->vm_start;
-- end = vma->vm_end;
-- len = end - start;
--
-- /* mapping wholly truncated? */
-- if (vma->vm_pgoff >= pgoff) {
-- zap_page_range(vma, start, len);
-- continue;
-- }
-+ vp = list_entry(curr, struct vm_area_struct, shared);
-+ vba = vp->vm_pgoff;
-+ vea = vba + ((vp->vm_end - vp->vm_start) >> PAGE_SHIFT) - 1;
-+ if (hea < vba || vea < hba)
-+ continue; /* Mapping disjoint from hole. */
-+ zba = (hba <= vba) ? vba : hba;
-+ zea = (vea <= hea) ? vea : hea;
-+ zap_page_range(vp,
-+ ((zba - vba) << PAGE_SHIFT) + vp->vm_start,
-+ (zea - zba + 1) << PAGE_SHIFT);
-+ }
-+}
-
-- /* mapping wholly unaffected? */
-- len = len >> PAGE_SHIFT;
-- diff = pgoff - vma->vm_pgoff;
-- if (diff >= len)
-- continue;
-+/**
-+ * invalidate_mmap_range - invalidate the portion of all mmaps
-+ * in the specified address_space corresponding to the specified
-+ * page range in the underlying file.
-+ * @address_space: the address space containing mmaps to be invalidated.
-+ * @holebegin: byte in first page to invalidate, relative to the start of
-+ * the underlying file. This will be rounded down to a PAGE_SIZE
-+ * boundary. Note that this is different from vmtruncate(), which
-+ * must keep the partial page. In contrast, we must get rid of
-+ * partial pages.
-+ * @holelen: size of prospective hole in bytes. This will be rounded
-+ * up to a PAGE_SIZE boundary. A holelen of zero truncates to the
-+ * end of the file.
-+ */
-+void invalidate_mmap_range(struct address_space *mapping,
-+ loff_t const holebegin, loff_t const holelen)
-+{
-+ unsigned long hba = holebegin >> PAGE_SHIFT;
-+ unsigned long hlen = (holelen + PAGE_SIZE - 1) >> PAGE_SHIFT;
-+
-+ /* Check for overflow. */
-+ if (sizeof(holelen) > sizeof(hlen)) {
-+ long long holeend =
-+ (holebegin + holelen + PAGE_SIZE - 1) >> PAGE_SHIFT;
-
-- /* Ok, partially affected.. */
-- start += diff << PAGE_SHIFT;
-- len = (len - diff) << PAGE_SHIFT;
-- zap_page_range(vma, start, len);
-+ if (holeend & ~(long long)ULONG_MAX)
-+ hlen = ULONG_MAX - hba + 1;
- }
-+ down(&mapping->i_shared_sem);
-+ /* Protect against page fault */
-+ atomic_inc(&mapping->truncate_count);
-+ if (unlikely(!list_empty(&mapping->i_mmap)))
-+ invalidate_mmap_range_list(&mapping->i_mmap, hba, hlen);
-+ if (unlikely(!list_empty(&mapping->i_mmap_shared)))
-+ invalidate_mmap_range_list(&mapping->i_mmap_shared, hba, hlen);
-+ up(&mapping->i_shared_sem);
- }
-
- /*
-@@ -1103,20 +1187,13 @@ static void vmtruncate_list(struct list_
- */
- int vmtruncate(struct inode * inode, loff_t offset)
- {
-- unsigned long pgoff;
- struct address_space *mapping = inode->i_mapping;
- unsigned long limit;
-
- if (inode->i_size < offset)
- goto do_expand;
- i_size_write(inode, offset);
-- pgoff = (offset + PAGE_SIZE - 1) >> PAGE_SHIFT;
-- down(&mapping->i_shared_sem);
-- if (unlikely(!list_empty(&mapping->i_mmap)))
-- vmtruncate_list(&mapping->i_mmap, pgoff);
-- if (unlikely(!list_empty(&mapping->i_mmap_shared)))
-- vmtruncate_list(&mapping->i_mmap_shared, pgoff);
-- up(&mapping->i_shared_sem);
-+ invalidate_mmap_range(mapping, offset + PAGE_SIZE - 1, 0);
- truncate_inode_pages(mapping, offset);
- goto out_truncate;
-
-@@ -1180,6 +1257,7 @@ static int do_swap_page(struct mm_struct
- struct pte_chain *pte_chain = NULL;
-
- pte_unmap(page_table);
-+ pmd_unmap(pmd);
- spin_unlock(&mm->page_table_lock);
- page = lookup_swap_cache(entry);
- if (!page) {
-@@ -1191,12 +1269,14 @@ static int do_swap_page(struct mm_struct
- * we released the page table lock.
- */
- spin_lock(&mm->page_table_lock);
-+ pmd = pmd_offset_map(pgd_offset(mm, address), address);
- page_table = pte_offset_map(pmd, address);
- if (pte_same(*page_table, orig_pte))
- ret = VM_FAULT_OOM;
- else
- ret = VM_FAULT_MINOR;
- pte_unmap(page_table);
-+ pmd_unmap(pmd);
- spin_unlock(&mm->page_table_lock);
- goto out;
- }
-@@ -1219,9 +1299,11 @@ static int do_swap_page(struct mm_struct
- * released the page table lock.
- */
- spin_lock(&mm->page_table_lock);
-+ pmd = pmd_offset_map(pgd_offset(mm, address), address);
- page_table = pte_offset_map(pmd, address);
- if (!pte_same(*page_table, orig_pte)) {
- pte_unmap(page_table);
-+ pmd_unmap(pmd);
- spin_unlock(&mm->page_table_lock);
- unlock_page(page);
- page_cache_release(page);
-@@ -1247,6 +1329,7 @@ static int do_swap_page(struct mm_struct
-
- /* No need to invalidate - it was non-present before */
- update_mmu_cache(vma, address, pte);
-+ pmd_unmap(pmd);
- pte_unmap(page_table);
- spin_unlock(&mm->page_table_lock);
- out:
-@@ -1272,11 +1355,13 @@ do_anonymous_page(struct mm_struct *mm,
- pte_chain = pte_chain_alloc(GFP_ATOMIC);
- if (!pte_chain) {
- pte_unmap(page_table);
-+ pmd_unmap(pmd);
- spin_unlock(&mm->page_table_lock);
- pte_chain = pte_chain_alloc(GFP_KERNEL);
- if (!pte_chain)
- goto no_mem;
- spin_lock(&mm->page_table_lock);
-+ pmd = pmd_offset_map(pgd_offset(mm, addr), addr);
- page_table = pte_offset_map(pmd, addr);
- }
-
-@@ -1287,6 +1372,7 @@ do_anonymous_page(struct mm_struct *mm,
- if (write_access) {
- /* Allocate our own private page. */
- pte_unmap(page_table);
-+ pmd_unmap(pmd);
- spin_unlock(&mm->page_table_lock);
-
- page = alloc_page(GFP_HIGHUSER);
-@@ -1295,9 +1381,11 @@ do_anonymous_page(struct mm_struct *mm,
- clear_user_highpage(page, addr);
-
- spin_lock(&mm->page_table_lock);
-+ pmd = pmd_offset_map(pgd_offset(mm, addr), addr);
- page_table = pte_offset_map(pmd, addr);
-
- if (!pte_none(*page_table)) {
-+ pmd_unmap(pmd);
- pte_unmap(page_table);
- page_cache_release(page);
- spin_unlock(&mm->page_table_lock);
-@@ -1313,6 +1401,7 @@ do_anonymous_page(struct mm_struct *mm,
- set_pte(page_table, entry);
- /* ignores ZERO_PAGE */
- pte_chain = page_add_rmap(page, page_table, pte_chain);
-+ pmd_unmap(pmd);
- pte_unmap(page_table);
-
- /* No need to invalidate - it was non-present before */
-@@ -1345,16 +1434,22 @@ do_no_page(struct mm_struct *mm, struct
- unsigned long address, int write_access, pte_t *page_table, pmd_t *pmd)
- {
- struct page * new_page;
-+ struct address_space *mapping;
- pte_t entry;
- struct pte_chain *pte_chain;
-+ int sequence;
- int ret;
-
- if (!vma->vm_ops || !vma->vm_ops->nopage)
- return do_anonymous_page(mm, vma, page_table,
- pmd, write_access, address);
- pte_unmap(page_table);
-- spin_unlock(&mm->page_table_lock);
-+ pmd_unmap(pmd);
-
-+ mapping = vma->vm_file->f_dentry->d_inode->i_mapping;
-+ sequence = atomic_read(&mapping->truncate_count);
-+ spin_unlock(&mm->page_table_lock);
-+retry:
- new_page = vma->vm_ops->nopage(vma, address & PAGE_MASK, 0);
-
- /* no page was available -- either SIGBUS or OOM */
-@@ -1383,6 +1478,18 @@ do_no_page(struct mm_struct *mm, struct
- }
-
- spin_lock(&mm->page_table_lock);
-+ /*
-+ * For a file-backed vma, someone could have truncated or otherwise
-+ * invalidated this page. If invalidate_mmap_range got called,
-+ * retry getting the page.
-+ */
-+ if (unlikely(sequence != atomic_read(&mapping->truncate_count))) {
-+ sequence = atomic_read(&mapping->truncate_count);
-+ spin_unlock(&mm->page_table_lock);
-+ page_cache_release(new_page);
-+ goto retry;
-+ }
-+ pmd = pmd_offset_map(pgd_offset(mm, address), address);
- page_table = pte_offset_map(pmd, address);
-
- /*
-@@ -1405,9 +1512,11 @@ do_no_page(struct mm_struct *mm, struct
- set_pte(page_table, entry);
- pte_chain = page_add_rmap(new_page, page_table, pte_chain);
- pte_unmap(page_table);
-+ pmd_unmap(pmd);
- } else {
- /* One of our sibling threads was faster, back out. */
- pte_unmap(page_table);
-+ pmd_unmap(pmd);
- page_cache_release(new_page);
- spin_unlock(&mm->page_table_lock);
- ret = VM_FAULT_MINOR;
-@@ -1451,6 +1560,7 @@ static int do_file_page(struct mm_struct
- pgoff = pte_to_pgoff(*pte);
-
- pte_unmap(pte);
-+ pmd_unmap(pmd);
- spin_unlock(&mm->page_table_lock);
-
- err = vma->vm_ops->populate(vma, address & PAGE_MASK, PAGE_SIZE, vma->vm_page_prot, pgoff, 0);
-@@ -1511,6 +1621,7 @@ static inline int handle_pte_fault(struc
- entry = pte_mkyoung(entry);
- establish_pte(vma, address, pte, entry);
- pte_unmap(pte);
-+ pmd_unmap(pmd);
- spin_unlock(&mm->page_table_lock);
- return VM_FAULT_MINOR;
- }
-@@ -1537,10 +1648,10 @@ int handle_mm_fault(struct mm_struct *mm
- * and the SMP-safe atomic PTE updates.
- */
- spin_lock(&mm->page_table_lock);
-- pmd = pmd_alloc(mm, pgd, address);
-+ pmd = pmd_alloc_map(mm, pgd, address);
-
- if (pmd) {
-- pte_t * pte = pte_alloc_map(mm, pmd, address);
-+ pte_t *pte = pte_alloc_map(mm, pgd, &pmd, address);
- if (pte)
- return handle_pte_fault(mm, vma, address, write_access, pte, pmd);
- }
-@@ -1559,10 +1670,33 @@ int handle_mm_fault(struct mm_struct *mm
- */
- pmd_t *__pmd_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long address)
- {
-+ struct page *page;
-+
-+ spin_unlock(&mm->page_table_lock);
-+ page = pmd_alloc_one(mm, address);
-+ spin_lock(&mm->page_table_lock);
-+ if (!page)
-+ return NULL;
-+
-+ /*
-+ * Because we dropped the lock, we should re-check the
-+ * entry, as somebody else could have populated it..
-+ */
-+ if (pgd_present(*pgd)) {
-+ pmd_free(page);
-+ goto out;
-+ }
-+ pgd_populate(mm, pgd, page);
-+out:
-+ return pmd_offset_map(pgd, address);
-+}
-+
-+pmd_t *__pmd_alloc_kernel(struct mm_struct *mm, pgd_t *pgd, unsigned long address)
-+{
- pmd_t *new;
-
- spin_unlock(&mm->page_table_lock);
-- new = pmd_alloc_one(mm, address);
-+ new = pmd_alloc_one_kernel(mm, address);
- spin_lock(&mm->page_table_lock);
- if (!new)
- return NULL;
-@@ -1572,12 +1706,12 @@ pmd_t *__pmd_alloc(struct mm_struct *mm,
- * entry, as somebody else could have populated it..
- */
- if (pgd_present(*pgd)) {
-- pmd_free(new);
-+ pmd_free(virt_to_page(new));
- goto out;
- }
-- pgd_populate(mm, pgd, new);
-+ pgd_populate(mm, pgd, virt_to_page(new));
- out:
-- return pmd_offset(pgd, address);
-+ return pmd_offset_kernel(pgd, address);
- }
-
- int make_pages_present(unsigned long addr, unsigned long end)
-@@ -1609,7 +1743,7 @@ struct page * vmalloc_to_page(void * vma
- pte_t *ptep, pte;
-
- if (!pgd_none(*pgd)) {
-- pmd = pmd_offset(pgd, addr);
-+ pmd = pmd_offset_map(pgd, addr);
- if (!pmd_none(*pmd)) {
- preempt_disable();
- ptep = pte_offset_map(pmd, addr);
-@@ -1619,6 +1753,7 @@ struct page * vmalloc_to_page(void * vma
- pte_unmap(ptep);
- preempt_enable();
- }
-+ pmd_unmap(pmd);
- }
- return page;
- }
---- linux-2.6.0-test1/mm/mprotect.c 2003-07-10 18:50:32.000000000 -0700
-+++ 25/mm/mprotect.c 2003-07-19 17:07:16.000000000 -0700
-@@ -73,7 +73,7 @@ change_pmd_range(pgd_t *pgd, unsigned lo
- pgd_clear(pgd);
- return;
- }
-- pmd = pmd_offset(pgd, address);
-+ pmd = pmd_offset_map(pgd, address);
- address &= ~PGDIR_MASK;
- end = address + size;
- if (end > PGDIR_SIZE)
-@@ -83,6 +83,7 @@ change_pmd_range(pgd_t *pgd, unsigned lo
- address = (address + PMD_SIZE) & PMD_MASK;
- pmd++;
- } while (address && (address < end));
-+ pmd_unmap(pmd - 1);
- }
-
- static void
---- linux-2.6.0-test1/mm/mremap.c 2003-07-10 18:50:32.000000000 -0700
-+++ 25/mm/mremap.c 2003-07-19 17:07:16.000000000 -0700
-@@ -38,7 +38,7 @@ static pte_t *get_one_pte_map_nested(str
- goto end;
- }
-
-- pmd = pmd_offset(pgd, addr);
-+ pmd = pmd_offset_map_nested(pgd, addr);
- if (pmd_none(*pmd))
- goto end;
- if (pmd_bad(*pmd)) {
-@@ -53,6 +53,7 @@ static pte_t *get_one_pte_map_nested(str
- pte = NULL;
- }
- end:
-+ pmd_unmap_nested(pmd);
- return pte;
- }
-
-@@ -61,12 +62,15 @@ static inline int page_table_present(str
- {
- pgd_t *pgd;
- pmd_t *pmd;
-+ int ret;
-
- pgd = pgd_offset(mm, addr);
- if (pgd_none(*pgd))
- return 0;
-- pmd = pmd_offset(pgd, addr);
-- return pmd_present(*pmd);
-+ pmd = pmd_offset_map(pgd, addr);
-+ ret = pmd_present(*pmd);
-+ pmd_unmap(pmd);
-+ return ret != 0;
- }
- #else
- #define page_table_present(mm, addr) (1)
-@@ -74,12 +78,15 @@ static inline int page_table_present(str
-
- static inline pte_t *alloc_one_pte_map(struct mm_struct *mm, unsigned long addr)
- {
-+ pgd_t *pgd;
- pmd_t *pmd;
- pte_t *pte = NULL;
-
-- pmd = pmd_alloc(mm, pgd_offset(mm, addr), addr);
-+ pgd = pgd_offset(mm, addr);
-+ pmd = pmd_alloc_map(mm, pgd, addr);
- if (pmd)
-- pte = pte_alloc_map(mm, pmd, addr);
-+ pte = pte_alloc_map(mm, pgd, &pmd, addr);
-+ pmd_unmap(pmd);
- return pte;
- }
-
---- linux-2.6.0-test1/mm/msync.c 2003-06-14 12:18:07.000000000 -0700
-+++ 25/mm/msync.c 2003-07-19 17:07:16.000000000 -0700
-@@ -82,7 +82,7 @@ static inline int filemap_sync_pmd_range
- pgd_clear(pgd);
- return 0;
- }
-- pmd = pmd_offset(pgd, address);
-+ pmd = pmd_offset_map(pgd, address);
- if ((address & PGDIR_MASK) != (end & PGDIR_MASK))
- end = (address & PGDIR_MASK) + PGDIR_SIZE;
- error = 0;
-@@ -91,6 +91,7 @@ static inline int filemap_sync_pmd_range
- address = (address + PMD_SIZE) & PMD_MASK;
- pmd++;
- } while (address && (address < end));
-+ pmd_unmap(pmd - 1);
- return error;
- }
-
---- linux-2.6.0-test1/mm/page-writeback.c 2003-07-02 14:53:18.000000000 -0700
-+++ 25/mm/page-writeback.c 2003-07-19 17:06:58.000000000 -0700
-@@ -28,6 +28,7 @@
- #include <linux/smp.h>
- #include <linux/sysctl.h>
- #include <linux/cpu.h>
-+#include <linux/pagevec.h>
-
- /*
- * The maximum number of pages to writeout in a single bdflush/kupdate
-@@ -144,7 +145,7 @@ get_dirty_limits(struct page_state *ps,
- * If we're over `background_thresh' then pdflush is woken to perform some
- * writeout.
- */
--void balance_dirty_pages(struct address_space *mapping)
-+int balance_dirty_pages(struct address_space *mapping)
- {
- struct page_state ps;
- long nr_reclaimable;
-@@ -161,6 +162,7 @@ void balance_dirty_pages(struct address_
- .sync_mode = WB_SYNC_NONE,
- .older_than_this = NULL,
- .nr_to_write = write_chunk,
-+ .nonblocking = !is_sync_wait(current->io_wait)
- };
-
- get_dirty_limits(&ps, &background_thresh, &dirty_thresh);
-@@ -187,7 +189,11 @@ void balance_dirty_pages(struct address_
- if (pages_written >= write_chunk)
- break; /* We've done our duty */
- }
-- blk_congestion_wait(WRITE, HZ/10);
-+ if (-EIOCBRETRY == blk_congestion_wait_wq(WRITE, HZ/10,
-+ current->io_wait)) {
-+ pr_debug("async blk congestion wait\n");
-+ return -EIOCBRETRY;
-+ }
- }
-
- if (nr_reclaimable + ps.nr_writeback <= dirty_thresh)
-@@ -195,6 +201,8 @@ void balance_dirty_pages(struct address_
-
- if (!writeback_in_progress(bdi) && nr_reclaimable > background_thresh)
- pdflush_operation(background_writeout, 0);
-+
-+ return 0;
- }
-
- /**
-@@ -210,7 +218,7 @@ void balance_dirty_pages(struct address_
- * decrease the ratelimiting by a lot, to prevent individual processes from
- * overshooting the limit by (ratelimit_pages) each.
- */
--void balance_dirty_pages_ratelimited(struct address_space *mapping)
-+int balance_dirty_pages_ratelimited(struct address_space *mapping)
- {
- static DEFINE_PER_CPU(int, ratelimits) = 0;
- long ratelimit;
-@@ -222,10 +230,10 @@ void balance_dirty_pages_ratelimited(str
- if (get_cpu_var(ratelimits)++ >= ratelimit) {
- __get_cpu_var(ratelimits) = 0;
- put_cpu_var(ratelimits);
-- balance_dirty_pages(mapping);
-- return;
-+ return balance_dirty_pages(mapping);
- }
- put_cpu_var(ratelimits);
-+ return 0;
- }
-
- /*
-@@ -560,3 +568,107 @@ int test_clear_page_dirty(struct page *p
- return 0;
- }
- EXPORT_SYMBOL(test_clear_page_dirty);
-+
-+
-+static ssize_t operate_on_page_range(struct address_space *mapping,
-+ loff_t pos, size_t count, int (*operator)(struct page *))
-+{
-+ pgoff_t first = pos >> PAGE_CACHE_SHIFT;
-+ pgoff_t last = (pos + count - 1) >> PAGE_CACHE_SHIFT; /* inclusive */
-+ pgoff_t next = first;
-+ struct pagevec pvec;
-+ ssize_t ret = 0, bytes = 0;
-+ int i;
-+
-+ if (count == 0)
-+ return 0;
-+
-+ pagevec_init(&pvec, 0);
-+ while (pagevec_lookup(&pvec, mapping, next,
-+ min((pgoff_t)PAGEVEC_SIZE, last - next + 1))) {
-+ for (i = 0; i < pagevec_count(&pvec); i++) {
-+ struct page *page = pvec.pages[i];
-+
-+ lock_page(page); /* stabilise ->index */
-+ if (!page->mapping) { /* truncated */
-+ unlock_page(page);
-+ next++;
-+ continue;
-+ }
-+ next = page->index + 1;
-+ ret = (*operator)(page);
-+ if (ret == -EIOCBRETRY)
-+ break;
-+ if (PageError(page)) {
-+ if (!ret)
-+ ret = -EIO;
-+ }
-+ if (next > last)
-+ break;
-+ }
-+ pagevec_release(&pvec);
-+ if ((next > last) || (ret == -EIOCBRETRY))
-+ break;
-+ }
-+ bytes = (next << PAGE_CACHE_SHIFT) - pos;
-+ if (bytes > count)
-+ bytes = count;
-+ return (bytes && (!ret || (ret == -EIOCBRETRY))) ? bytes : ret;
-+}
-+
-+static int page_waiter(struct page *page)
-+{
-+ unlock_page(page);
-+ return wait_on_page_writeback_wq(page, current->io_wait);
-+}
-+
-+static size_t
-+wait_on_page_range(struct address_space *mapping, loff_t pos, size_t count)
-+{
-+ return operate_on_page_range(mapping, pos, count, page_waiter);
-+}
-+
-+static int page_writer(struct page *page)
-+{
-+ struct writeback_control wbc = {
-+ .sync_mode = WB_SYNC_ALL,
-+ .nr_to_write = 1,
-+ };
-+
-+ wait_on_page_writeback(page);
-+ return page->mapping->a_ops->writepage(page, &wbc);
-+}
-+
-+static ssize_t
-+write_out_page_range(struct address_space *mapping, loff_t pos, size_t count)
-+{
-+ return operate_on_page_range(mapping, pos, count, page_writer);
-+}
-+
-+/*
-+ * Write and wait upon all the pages in the passed range. This is a "data
-+ * integrity" operation. It waits upon in-flight writeout before starting and
-+ * waiting upon new writeout. If there was an IO error, return it.
-+ *
-+ * We need to re-take i_sem during the generic_osync_inode list walk because
-+ * it is otherwise livelockable.
-+ */
-+ssize_t sync_page_range(struct inode *inode, struct address_space *mapping,
-+ loff_t pos, size_t count)
-+{
-+ int ret;
-+
-+ if (!mapping->a_ops->writepage)
-+ return 0;
-+ if (mapping->backing_dev_info->memory_backed)
-+ return 0;
-+ ret = write_out_page_range(mapping, pos, count);
-+ if (ret >= 0) {
-+ down(&inode->i_sem);
-+ ret = generic_osync_inode(inode, OSYNC_METADATA);
-+ up(&inode->i_sem);
-+ }
-+ if (ret >= 0)
-+ ret = wait_on_page_range(mapping, pos, count);
-+ return ret;
-+}
---- linux-2.6.0-test1/mm/slab.c 2003-07-10 18:50:32.000000000 -0700
-+++ 25/mm/slab.c 2003-07-19 17:07:16.000000000 -0700
-@@ -1628,7 +1628,13 @@ static inline void *cache_free_debugchec
- kfree_debugcheck(objp);
- page = virt_to_page(objp);
-
-- BUG_ON(GET_PAGE_CACHE(page) != cachep);
-+ if (GET_PAGE_CACHE(page) != cachep) {
-+ printk(KERN_ERR "mismatch in kmem_cache_free: expected cache %p, got %p\n",
-+ GET_PAGE_CACHE(page),cachep);
-+ printk(KERN_ERR "%p is %s.\n", cachep, cachep->name);
-+ printk(KERN_ERR "%p is %s.\n", GET_PAGE_CACHE(page), GET_PAGE_CACHE(page)->name);
-+ WARN_ON(1);
-+ }
- slabp = GET_PAGE_SLAB(page);
-
- if (cachep->flags & SLAB_STORE_USER) {
-@@ -2482,11 +2488,11 @@ static void *s_start(struct seq_file *m,
- seq_puts(m, "slabinfo - version: 2.0\n");
- #endif
- seq_puts(m, "# name <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab>");
-- seq_puts(m, " : tunables <batchcount> <limit <sharedfactor>");
-+ seq_puts(m, " : tunables <batchcount> <limit> <sharedfactor>");
- seq_puts(m, " : slabdata <active_slabs> <num_slabs> <sharedavail>");
- #if STATS
- seq_puts(m, " : globalstat <listallocs> <maxobjs> <grown> <reaped> <error> <maxfreeable> <freelimit>");
-- seq_puts(m, " : cpustat <allochit <allocmiss <freehit <freemiss>");
-+ seq_puts(m, " : cpustat <allochit> <allocmiss> <freehit <freemiss>");
- #endif
- seq_putc(m, '\n');
- }
-@@ -2717,7 +2723,7 @@ void ptrinfo(unsigned long addr)
- printk("No pgd.\n");
- break;
- }
-- pmd = pmd_offset(pgd, addr);
-+ pmd = pmd_offset_kernel(pgd, addr);
- if (pmd_none(*pmd)) {
- printk("No pmd.\n");
- break;
---- linux-2.6.0-test1/mm/swapfile.c 2003-07-13 21:44:35.000000000 -0700
-+++ 25/mm/swapfile.c 2003-07-19 17:07:16.000000000 -0700
-@@ -448,7 +448,7 @@ static int unuse_pgd(struct vm_area_stru
- pgd_clear(dir);
- return 0;
- }
-- pmd = pmd_offset(dir, address);
-+ pmd = pmd_offset_map(dir, address);
- offset = address & PGDIR_MASK;
- address &= ~PGDIR_MASK;
- end = address + size;
-@@ -463,6 +463,7 @@ static int unuse_pgd(struct vm_area_stru
- address = (address + PMD_SIZE) & PMD_MASK;
- pmd++;
- } while (address && (address < end));
-+ pmd_unmap(pmd - 1);
- return 0;
- }
-
---- linux-2.6.0-test1/mm/swap_state.c 2003-06-26 22:07:26.000000000 -0700
-+++ 25/mm/swap_state.c 2003-07-19 17:07:03.000000000 -0700
-@@ -35,6 +35,7 @@ struct address_space swapper_space = {
- .i_mmap = LIST_HEAD_INIT(swapper_space.i_mmap),
- .i_mmap_shared = LIST_HEAD_INIT(swapper_space.i_mmap_shared),
- .i_shared_sem = __MUTEX_INITIALIZER(swapper_space.i_shared_sem),
-+ .truncate_count = ATOMIC_INIT(0),
- .private_lock = SPIN_LOCK_UNLOCKED,
- .private_list = LIST_HEAD_INIT(swapper_space.private_list),
- };
---- linux-2.6.0-test1/mm/vmalloc.c 2003-06-14 12:18:23.000000000 -0700
-+++ 25/mm/vmalloc.c 2003-07-19 17:07:16.000000000 -0700
-@@ -70,7 +70,7 @@ static void unmap_area_pmd(pgd_t *dir, u
- return;
- }
-
-- pmd = pmd_offset(dir, address);
-+ pmd = pmd_offset_kernel(dir, address);
- address &= ~PGDIR_MASK;
- end = address + size;
- if (end > PGDIR_SIZE)
-@@ -159,7 +159,7 @@ int map_vm_area(struct vm_struct *area,
- dir = pgd_offset_k(address);
- spin_lock(&init_mm.page_table_lock);
- do {
-- pmd_t *pmd = pmd_alloc(&init_mm, dir, address);
-+ pmd_t *pmd = pmd_alloc_kernel(&init_mm, dir, address);
- if (!pmd) {
- err = -ENOMEM;
- break;
---- linux-2.6.0-test1/mm/vmscan.c 2003-07-13 21:44:35.000000000 -0700
-+++ 25/mm/vmscan.c 2003-07-19 17:06:15.000000000 -0700
-@@ -921,7 +921,7 @@ static int balance_pgdat(pg_data_t *pgda
- if (i < ZONE_HIGHMEM) {
- reclaim_state->reclaimed_slab = 0;
- shrink_slab(max_scan + nr_mapped, GFP_KERNEL);
-- to_free += reclaim_state->reclaimed_slab;
-+ to_free -= reclaim_state->reclaimed_slab;
- }
- if (zone->all_unreclaimable)
- continue;
-@@ -930,7 +930,8 @@ static int balance_pgdat(pg_data_t *pgda
- }
- if (all_zones_ok)
- break;
-- blk_congestion_wait(WRITE, HZ/10);
-+ if (to_free)
-+ blk_congestion_wait(WRITE, HZ/10);
- }
- return nr_pages - to_free;
- }
-@@ -956,11 +957,11 @@ int kswapd(void *p)
- struct reclaim_state reclaim_state = {
- .reclaimed_slab = 0,
- };
-- unsigned long cpumask;
-+ cpumask_t cpumask;
-
- daemonize("kswapd%d", pgdat->node_id);
- cpumask = node_to_cpumask(pgdat->node_id);
-- if (cpumask)
-+ if (!cpus_empty(cpumask))
- set_cpus_allowed(tsk, cpumask);
- current->reclaim_state = &reclaim_state;
-
---- linux-2.6.0-test1/net/atm/br2684.c 2003-06-14 12:18:08.000000000 -0700
-+++ 25/net/atm/br2684.c 2003-07-19 17:03:51.000000000 -0700
-@@ -16,9 +16,12 @@ Author: Marcell GAL, 2000, XDSL Ltd, Hun
- #include <linux/ip.h>
- #include <asm/uaccess.h>
- #include <net/arp.h>
-+#include <linux/atm.h>
-+#include <linux/atmdev.h>
-
- #include <linux/atmbr2684.h>
-
-+#include "common.h"
- #include "ipcommon.h"
-
- /*
-@@ -768,8 +771,6 @@ static struct file_operations br2684_pro
-
- extern struct proc_dir_entry *atm_proc_root; /* from proc.c */
-
--extern int (*br2684_ioctl_hook)(struct atm_vcc *, unsigned int, unsigned long);
--
- /* the following avoids some spurious warnings from the compiler */
- #define UNUSED __attribute__((unused))
-
-@@ -779,14 +780,14 @@ static int __init UNUSED br2684_init(voi
- if ((p = create_proc_entry("br2684", 0, atm_proc_root)) == NULL)
- return -ENOMEM;
- p->proc_fops = &br2684_proc_operations;
-- br2684_ioctl_hook = br2684_ioctl;
-+ br2684_ioctl_set(br2684_ioctl);
- return 0;
- }
-
- static void __exit UNUSED br2684_exit(void)
- {
- struct br2684_dev *brdev;
-- br2684_ioctl_hook = NULL;
-+ br2684_ioctl_set(NULL);
- remove_proc_entry("br2684", atm_proc_root);
- while (!list_empty(&br2684_devs)) {
- brdev = list_entry_brdev(br2684_devs.next);
---- linux-2.6.0-test1/net/atm/clip.c 2003-07-10 18:50:32.000000000 -0700
-+++ 25/net/atm/clip.c 2003-07-19 17:03:51.000000000 -0700
-@@ -67,7 +67,7 @@ static int to_atmarpd(enum atmarp_ctrl_t
- ctrl->ip = ip;
- atm_force_charge(atmarpd,skb->truesize);
- skb_queue_tail(&atmarpd->sk->sk_receive_queue, skb);
-- wake_up(&atmarpd->sleep);
-+ atmarpd->sk->sk_data_ready(atmarpd->sk, skb->len);
- return 0;
- }
-
---- linux-2.6.0-test1/net/atm/common.c 2003-07-02 14:53:18.000000000 -0700
-+++ 25/net/atm/common.c 2003-07-19 17:03:51.000000000 -0700
-@@ -129,14 +129,34 @@ EXPORT_SYMBOL(atm_clip_ops_set);
- #endif
-
- #if defined(CONFIG_PPPOATM) || defined(CONFIG_PPPOATM_MODULE)
--int (*pppoatm_ioctl_hook)(struct atm_vcc *, unsigned int, unsigned long);
--EXPORT_SYMBOL(pppoatm_ioctl_hook);
-+static DECLARE_MUTEX(pppoatm_ioctl_mutex);
-+
-+static int (*pppoatm_ioctl_hook)(struct atm_vcc *, unsigned int, unsigned long);
-+
-+void pppoatm_ioctl_set(int (*hook)(struct atm_vcc *, unsigned int, unsigned long))
-+{
-+ down(&pppoatm_ioctl_mutex);
-+ pppoatm_ioctl_hook = hook;
-+ up(&pppoatm_ioctl_mutex);
-+}
-+#ifdef CONFIG_PPPOATM_MODULE
-+EXPORT_SYMBOL(pppoatm_ioctl_set);
-+#endif
- #endif
-
- #if defined(CONFIG_ATM_BR2684) || defined(CONFIG_ATM_BR2684_MODULE)
--int (*br2684_ioctl_hook)(struct atm_vcc *, unsigned int, unsigned long);
-+static DECLARE_MUTEX(br2684_ioctl_mutex);
-+
-+static int (*br2684_ioctl_hook)(struct atm_vcc *, unsigned int, unsigned long);
-+
-+void br2684_ioctl_set(int (*hook)(struct atm_vcc *, unsigned int, unsigned long))
-+{
-+ down(&br2684_ioctl_mutex);
-+ br2684_ioctl_hook = hook;
-+ up(&br2684_ioctl_mutex);
-+}
- #ifdef CONFIG_ATM_BR2684_MODULE
--EXPORT_SYMBOL(br2684_ioctl_hook);
-+EXPORT_SYMBOL(br2684_ioctl_set);
- #endif
- #endif
-
-@@ -215,6 +235,37 @@ static void vcc_sock_destruct(struct soc
-
- kfree(sk->sk_protinfo);
- }
-+
-+static void vcc_def_wakeup(struct sock *sk)
-+{
-+ read_lock(&sk->sk_callback_lock);
-+ if (sk->sk_sleep && waitqueue_active(sk->sk_sleep))
-+ wake_up(sk->sk_sleep);
-+ read_unlock(&sk->sk_callback_lock);
-+}
-+
-+static inline int vcc_writable(struct sock *sk)
-+{
-+ struct atm_vcc *vcc = atm_sk(sk);
-+
-+ return (vcc->qos.txtp.max_sdu +
-+ atomic_read(&sk->sk_wmem_alloc)) <= sk->sk_sndbuf;
-+}
-+
-+static void vcc_write_space(struct sock *sk)
-+{
-+ read_lock(&sk->sk_callback_lock);
-+
-+ if (vcc_writable(sk)) {
-+ if (sk->sk_sleep && waitqueue_active(sk->sk_sleep))
-+ wake_up_interruptible(sk->sk_sleep);
-+
-+ sk_wake_async(sk, 2, POLL_OUT);
-+ }
-+
-+ read_unlock(&sk->sk_callback_lock);
-+}
-+
-
- int vcc_create(struct socket *sock, int protocol, int family)
- {
-@@ -227,7 +278,9 @@ int vcc_create(struct socket *sock, int
- sk = sk_alloc(family, GFP_KERNEL, 1, NULL);
- if (!sk)
- return -ENOMEM;
-- sock_init_data(NULL, sk);
-+ sock_init_data(sock, sk);
-+ sk->sk_state_change = vcc_def_wakeup;
-+ sk->sk_write_space = vcc_write_space;
-
- vcc = atm_sk(sk) = kmalloc(sizeof(*vcc), GFP_KERNEL);
- if (!vcc) {
-@@ -238,7 +291,6 @@ int vcc_create(struct socket *sock, int
- memset(vcc, 0, sizeof(*vcc));
- vcc->sk = sk;
- vcc->dev = NULL;
-- vcc->callback = NULL;
- memset(&vcc->local,0,sizeof(struct sockaddr_atmsvc));
- memset(&vcc->remote,0,sizeof(struct sockaddr_atmsvc));
- vcc->qos.txtp.max_sdu = 1 << 16; /* for meta VCs */
-@@ -249,8 +301,6 @@ int vcc_create(struct socket *sock, int
- vcc->push_oam = NULL;
- vcc->vpi = vcc->vci = 0; /* no VCI/VPI yet */
- vcc->atm_options = vcc->aal_options = 0;
-- init_waitqueue_head(&vcc->sleep);
-- sk->sk_sleep = &vcc->sleep;
- sk->sk_destruct = vcc_sock_destruct;
- sock->sk = sk;
- return 0;
-@@ -300,9 +350,9 @@ int vcc_release(struct socket *sock)
- void vcc_release_async(struct atm_vcc *vcc, int reply)
- {
- set_bit(ATM_VF_CLOSE, &vcc->flags);
-- vcc->reply = reply;
- vcc->sk->sk_err = -reply;
-- wake_up(&vcc->sleep);
-+ clear_bit(ATM_VF_WAITING, &vcc->flags);
-+ vcc->sk->sk_state_change(vcc->sk);
- }
-
-
-@@ -475,7 +525,7 @@ int vcc_recvmsg(struct kiocb *iocb, stru
- vcc = ATM_SD(sock);
- if (test_bit(ATM_VF_RELEASED,&vcc->flags) ||
- test_bit(ATM_VF_CLOSE,&vcc->flags))
-- return vcc->reply;
-+ return -sk->sk_err;
- if (!test_bit(ATM_VF_READY, &vcc->flags))
- return 0;
-
-@@ -532,7 +582,7 @@ int vcc_sendmsg(struct kiocb *iocb, stru
- vcc = ATM_SD(sock);
- if (test_bit(ATM_VF_RELEASED, &vcc->flags) ||
- test_bit(ATM_VF_CLOSE, &vcc->flags)) {
-- error = vcc->reply;
-+ error = -sk->sk_err;
- goto out;
- }
- if (!test_bit(ATM_VF_READY, &vcc->flags)) {
-@@ -549,7 +599,7 @@ int vcc_sendmsg(struct kiocb *iocb, stru
- }
- /* verify_area is done by net/socket.c */
- eff = (size+3) & ~3; /* align to word boundary */
-- prepare_to_wait(&vcc->sleep, &wait, TASK_INTERRUPTIBLE);
-+ prepare_to_wait(sk->sk_sleep, &wait, TASK_INTERRUPTIBLE);
- error = 0;
- while (!(skb = alloc_tx(vcc,eff))) {
- if (m->msg_flags & MSG_DONTWAIT) {
-@@ -563,16 +613,16 @@ int vcc_sendmsg(struct kiocb *iocb, stru
- }
- if (test_bit(ATM_VF_RELEASED,&vcc->flags) ||
- test_bit(ATM_VF_CLOSE,&vcc->flags)) {
-- error = vcc->reply;
-+ error = -sk->sk_err;
- break;
- }
- if (!test_bit(ATM_VF_READY,&vcc->flags)) {
- error = -EPIPE;
- break;
- }
-- prepare_to_wait(&vcc->sleep, &wait, TASK_INTERRUPTIBLE);
-+ prepare_to_wait(sk->sk_sleep, &wait, TASK_INTERRUPTIBLE);
- }
-- finish_wait(&vcc->sleep, &wait);
-+ finish_wait(sk->sk_sleep, &wait);
- if (error)
- goto out;
- skb->dev = NULL; /* for paths shared with net_device interfaces */
-@@ -591,29 +641,38 @@ out:
- }
-
-
--unsigned int atm_poll(struct file *file,struct socket *sock,poll_table *wait)
-+unsigned int vcc_poll(struct file *file, struct socket *sock, poll_table *wait)
- {
-+ struct sock *sk = sock->sk;
- struct atm_vcc *vcc;
- unsigned int mask;
-
-- vcc = ATM_SD(sock);
-- poll_wait(file,&vcc->sleep,wait);
-+ poll_wait(file, sk->sk_sleep, wait);
- mask = 0;
-- if (skb_peek(&vcc->sk->sk_receive_queue))
-- mask |= POLLIN | POLLRDNORM;
-- if (test_bit(ATM_VF_RELEASED,&vcc->flags) ||
-- test_bit(ATM_VF_CLOSE,&vcc->flags))
-+
-+ vcc = ATM_SD(sock);
-+
-+ /* exceptional events */
-+ if (sk->sk_err)
-+ mask = POLLERR;
-+
-+ if (test_bit(ATM_VF_RELEASED, &vcc->flags) ||
-+ test_bit(ATM_VF_CLOSE, &vcc->flags))
- mask |= POLLHUP;
-- if (sock->state != SS_CONNECTING) {
-- if (vcc->qos.txtp.traffic_class != ATM_NONE &&
-- vcc->qos.txtp.max_sdu +
-- atomic_read(&vcc->sk->sk_wmem_alloc) <= vcc->sk->sk_sndbuf)
-- mask |= POLLOUT | POLLWRNORM;
-- }
-- else if (vcc->reply != WAITING) {
-- mask |= POLLOUT | POLLWRNORM;
-- if (vcc->reply) mask |= POLLERR;
-- }
-+
-+ /* readable? */
-+ if (!skb_queue_empty(&sk->sk_receive_queue))
-+ mask |= POLLIN | POLLRDNORM;
-+
-+ /* writable? */
-+ if (sock->state == SS_CONNECTING &&
-+ test_bit(ATM_VF_WAITING, &vcc->flags))
-+ return mask;
-+
-+ if (vcc->qos.txtp.traffic_class != ATM_NONE &&
-+ vcc_writable(vcc->sk))
-+ mask |= POLLOUT | POLLWRNORM | POLLWRBAND;
-+
- return mask;
- }
-
-@@ -859,19 +918,22 @@ int vcc_ioctl(struct socket *sock, unsig
- default:
- break;
- }
-+ error = -ENOIOCTLCMD;
- #if defined(CONFIG_PPPOATM) || defined(CONFIG_PPPOATM_MODULE)
-- if (pppoatm_ioctl_hook) {
-+ down(&pppoatm_ioctl_mutex);
-+ if (pppoatm_ioctl_hook)
- error = pppoatm_ioctl_hook(vcc, cmd, arg);
-- if (error != -ENOIOCTLCMD)
-- goto done;
-- }
-+ up(&pppoatm_ioctl_mutex);
-+ if (error != -ENOIOCTLCMD)
-+ goto done;
- #endif
- #if defined(CONFIG_ATM_BR2684) || defined(CONFIG_ATM_BR2684_MODULE)
-- if (br2684_ioctl_hook) {
-+ down(&br2684_ioctl_mutex);
-+ if (br2684_ioctl_hook)
- error = br2684_ioctl_hook(vcc, cmd, arg);
-- if (error != -ENOIOCTLCMD)
-- goto done;
-- }
-+ up(&br2684_ioctl_mutex);
-+ if (error != -ENOIOCTLCMD)
-+ goto done;
- #endif
-
- error = atm_dev_ioctl(cmd, arg);
---- linux-2.6.0-test1/net/atm/common.h 2003-07-02 14:53:18.000000000 -0700
-+++ 25/net/atm/common.h 2003-07-19 17:03:51.000000000 -0700
-@@ -17,7 +17,7 @@ int vcc_recvmsg(struct kiocb *iocb, stru
- int size, int flags);
- int vcc_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *m,
- int total_len);
--unsigned int atm_poll(struct file *file,struct socket *sock,poll_table *wait);
-+unsigned int vcc_poll(struct file *file, struct socket *sock, poll_table *wait);
- int vcc_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg);
- int vcc_setsockopt(struct socket *sock, int level, int optname, char *optval,
- int optlen);
-@@ -26,6 +26,9 @@ int vcc_getsockopt(struct socket *sock,
-
- void atm_shutdown_dev(struct atm_dev *dev);
-
-+void pppoatm_ioctl_set(int (*hook)(struct atm_vcc *, unsigned int, unsigned long));
-+void br2684_ioctl_set(int (*hook)(struct atm_vcc *, unsigned int, unsigned long));
-+
- int atmpvc_init(void);
- void atmpvc_exit(void);
- int atmsvc_init(void);
---- linux-2.6.0-test1/net/atm/lec.c 2003-07-02 14:53:18.000000000 -0700
-+++ 25/net/atm/lec.c 2003-07-19 17:03:51.000000000 -0700
-@@ -134,7 +134,7 @@ static void lec_handle_bridge(struct sk_
- priv = (struct lec_priv *)dev->priv;
- atm_force_charge(priv->lecd, skb2->truesize);
- skb_queue_tail(&priv->lecd->sk->sk_receive_queue, skb2);
-- wake_up(&priv->lecd->sleep);
-+ priv->lecd->sk->sk_data_ready(priv->lecd->sk, skb2->len);
- }
-
- return;
-@@ -513,7 +513,7 @@ lec_atm_send(struct atm_vcc *vcc, struct
- memcpy(skb2->data, mesg, sizeof(struct atmlec_msg));
- atm_force_charge(priv->lecd, skb2->truesize);
- skb_queue_tail(&priv->lecd->sk->sk_receive_queue, skb2);
-- wake_up(&priv->lecd->sleep);
-+ priv->lecd->sk->sk_data_ready(priv->lecd->sk, skb2->len);
- }
- if (f != NULL) br_fdb_put_hook(f);
- #endif /* defined(CONFIG_BRIDGE) || defined(CONFIG_BRIDGE_MODULE) */
-@@ -598,13 +598,13 @@ send_to_lecd(struct lec_priv *priv, atml
-
- atm_force_charge(priv->lecd, skb->truesize);
- skb_queue_tail(&priv->lecd->sk->sk_receive_queue, skb);
-- wake_up(&priv->lecd->sleep);
-+ priv->lecd->sk->sk_data_ready(priv->lecd->sk, skb->len);
-
- if (data != NULL) {
- DPRINTK("lec: about to send %d bytes of data\n", data->len);
- atm_force_charge(priv->lecd, data->truesize);
- skb_queue_tail(&priv->lecd->sk->sk_receive_queue, data);
-- wake_up(&priv->lecd->sleep);
-+ priv->lecd->sk->sk_data_ready(priv->lecd->sk, skb->len);
- }
-
- return 0;
-@@ -686,7 +686,7 @@ lec_push(struct atm_vcc *vcc, struct sk_
- if (memcmp(skb->data, lec_ctrl_magic, 4) ==0) { /* Control frame, to daemon*/
- DPRINTK("%s: To daemon\n",dev->name);
- skb_queue_tail(&vcc->sk->sk_receive_queue, skb);
-- wake_up(&vcc->sleep);
-+ vcc->sk->sk_data_ready(vcc->sk, skb->len);
- } else { /* Data frame, queue to protocol handlers */
- unsigned char *dst;
-
---- linux-2.6.0-test1/net/atm/mpc.c 2003-07-02 14:53:18.000000000 -0700
-+++ 25/net/atm/mpc.c 2003-07-19 17:03:51.000000000 -0700
-@@ -669,7 +669,7 @@ static void mpc_push(struct atm_vcc *vcc
- dprintk("mpoa: (%s) mpc_push: control packet arrived\n", dev->name);
- /* Pass control packets to daemon */
- skb_queue_tail(&vcc->sk->sk_receive_queue, skb);
-- wake_up(&vcc->sleep);
-+ vcc->sk->sk_data_ready(vcc->sk, skb->len);
- return;
- }
-
-@@ -947,7 +947,7 @@ int msg_to_mpoad(struct k_message *mesg,
- memcpy(skb->data, mesg, sizeof(struct k_message));
- atm_force_charge(mpc->mpoad_vcc, skb->truesize);
- skb_queue_tail(&mpc->mpoad_vcc->sk->sk_receive_queue, skb);
-- wake_up(&mpc->mpoad_vcc->sleep);
-+ mpc->mpoad_vcc->sk->sk_data_ready(mpc->mpoad_vcc->sk, skb->len);
-
- return 0;
- }
-@@ -1226,7 +1226,7 @@ static void purge_egress_shortcut(struct
-
- atm_force_charge(vcc, skb->truesize);
- skb_queue_tail(&vcc->sk->sk_receive_queue, skb);
-- wake_up(&vcc->sleep);
-+ vcc->sk->sk_data_ready(vcc->sk, skb->len);
- dprintk("mpoa: purge_egress_shortcut: exiting:\n");
-
- return;
---- linux-2.6.0-test1/net/atm/pppoatm.c 2003-06-14 12:18:24.000000000 -0700
-+++ 25/net/atm/pppoatm.c 2003-07-19 17:03:51.000000000 -0700
-@@ -44,6 +44,8 @@
- #include <linux/ppp_channel.h>
- #include <linux/atmppp.h>
-
-+#include "common.h"
-+
- #if 0
- #define DPRINTK(format, args...) \
- printk(KERN_DEBUG "pppoatm: " format, ##args)
-@@ -344,17 +346,15 @@ static int pppoatm_ioctl(struct atm_vcc
- /* the following avoids some spurious warnings from the compiler */
- #define UNUSED __attribute__((unused))
-
--extern int (*pppoatm_ioctl_hook)(struct atm_vcc *, unsigned int, unsigned long);
--
- static int __init UNUSED pppoatm_init(void)
- {
-- pppoatm_ioctl_hook = pppoatm_ioctl;
-+ pppoatm_ioctl_set(pppoatm_ioctl);
- return 0;
- }
-
- static void __exit UNUSED pppoatm_exit(void)
- {
-- pppoatm_ioctl_hook = NULL;
-+ pppoatm_ioctl_set(NULL);
- }
-
- module_init(pppoatm_init);
---- linux-2.6.0-test1/net/atm/proc.c 2003-07-02 14:53:18.000000000 -0700
-+++ 25/net/atm/proc.c 2003-07-19 17:03:51.000000000 -0700
-@@ -224,7 +224,7 @@ static void vc_info(struct atm_vcc *vcc,
- here += sprintf(here, "%3d", vcc->sk->sk_family);
- }
- here += sprintf(here," %04lx %5d %7d/%7d %7d/%7d\n",vcc->flags,
-- vcc->reply,
-+ vcc->sk->sk_err,
- atomic_read(&vcc->sk->sk_wmem_alloc), vcc->sk->sk_sndbuf,
- atomic_read(&vcc->sk->sk_rmem_alloc), vcc->sk->sk_rcvbuf);
- }
---- linux-2.6.0-test1/net/atm/pvc.c 2003-07-02 14:53:18.000000000 -0700
-+++ 25/net/atm/pvc.c 2003-07-19 17:03:51.000000000 -0700
-@@ -111,7 +111,7 @@ static struct proto_ops pvc_proto_ops =
- .socketpair = sock_no_socketpair,
- .accept = sock_no_accept,
- .getname = pvc_getname,
-- .poll = atm_poll,
-+ .poll = vcc_poll,
- .ioctl = vcc_ioctl,
- .listen = sock_no_listen,
- .shutdown = pvc_shutdown,
---- linux-2.6.0-test1/net/atm/raw.c 2003-06-14 12:18:34.000000000 -0700
-+++ 25/net/atm/raw.c 2003-07-19 17:03:51.000000000 -0700
-@@ -29,7 +29,7 @@ void atm_push_raw(struct atm_vcc *vcc,st
- {
- if (skb) {
- skb_queue_tail(&vcc->sk->sk_receive_queue, skb);
-- wake_up(&vcc->sleep);
-+ vcc->sk->sk_data_ready(vcc->sk, skb->len);
- }
- }
-
-@@ -40,7 +40,7 @@ static void atm_pop_raw(struct atm_vcc *
- skb->truesize);
- atomic_sub(skb->truesize, &vcc->sk->sk_wmem_alloc);
- dev_kfree_skb_any(skb);
-- wake_up(&vcc->sleep);
-+ vcc->sk->sk_write_space(vcc->sk);
- }
-
-
---- linux-2.6.0-test1/net/atm/signaling.c 2003-07-02 14:53:18.000000000 -0700
-+++ 25/net/atm/signaling.c 2003-07-19 17:03:51.000000000 -0700
-@@ -61,7 +61,7 @@ static void sigd_put_skb(struct sk_buff
- #endif
- atm_force_charge(sigd,skb->truesize);
- skb_queue_tail(&sigd->sk->sk_receive_queue,skb);
-- wake_up(&sigd->sleep);
-+ sigd->sk->sk_data_ready(sigd->sk, skb->len);
- }
-
-
-@@ -103,7 +103,8 @@ static int sigd_send(struct atm_vcc *vcc
- vcc = *(struct atm_vcc **) &msg->vcc;
- switch (msg->type) {
- case as_okay:
-- vcc->reply = msg->reply;
-+ vcc->sk->sk_err = -msg->reply;
-+ clear_bit(ATM_VF_WAITING, &vcc->flags);
- if (!*vcc->local.sas_addr.prv &&
- !*vcc->local.sas_addr.pub) {
- vcc->local.sas_family = AF_ATMSVC;
-@@ -123,8 +124,8 @@ static int sigd_send(struct atm_vcc *vcc
- case as_error:
- clear_bit(ATM_VF_REGIS,&vcc->flags);
- clear_bit(ATM_VF_READY,&vcc->flags);
-- vcc->reply = msg->reply;
- vcc->sk->sk_err = -msg->reply;
-+ clear_bit(ATM_VF_WAITING, &vcc->flags);
- break;
- case as_indicate:
- vcc = *(struct atm_vcc **) &msg->listen_vcc;
-@@ -137,19 +138,16 @@ static int sigd_send(struct atm_vcc *vcc
- }
- vcc->sk->sk_ack_backlog++;
- skb_queue_tail(&vcc->sk->sk_receive_queue, skb);
-- if (vcc->callback) {
-- DPRINTK("waking vcc->sleep 0x%p\n",
-- &vcc->sleep);
-- vcc->callback(vcc);
-- }
-+ DPRINTK("waking vcc->sk->sk_sleep 0x%p\n", vcc->sk->sk_sleep);
-+ vcc->sk->sk_state_change(vcc->sk);
- as_indicate_complete:
- release_sock(vcc->sk);
- return 0;
- case as_close:
- set_bit(ATM_VF_RELEASED,&vcc->flags);
- clear_bit(ATM_VF_READY,&vcc->flags);
-- vcc->reply = msg->reply;
- vcc->sk->sk_err = -msg->reply;
-+ clear_bit(ATM_VF_WAITING, &vcc->flags);
- break;
- case as_modify:
- modify_qos(vcc,msg);
-@@ -159,7 +157,7 @@ as_indicate_complete:
- (int) msg->type);
- return -EINVAL;
- }
-- if (vcc->callback) vcc->callback(vcc);
-+ vcc->sk->sk_state_change(vcc->sk);
- dev_kfree_skb(skb);
- return 0;
- }
-@@ -205,9 +203,9 @@ static void purge_vcc(struct atm_vcc *vc
- if (vcc->sk->sk_family == PF_ATMSVC &&
- !test_bit(ATM_VF_META,&vcc->flags)) {
- set_bit(ATM_VF_RELEASED,&vcc->flags);
-- vcc->reply = -EUNATCH;
- vcc->sk->sk_err = EUNATCH;
-- wake_up(&vcc->sleep);
-+ clear_bit(ATM_VF_WAITING, &vcc->flags);
-+ vcc->sk->sk_state_change(vcc->sk);
- }
- }
-
---- linux-2.6.0-test1/net/atm/signaling.h 2003-06-14 12:17:56.000000000 -0700
-+++ 25/net/atm/signaling.h 2003-07-19 17:03:51.000000000 -0700
-@@ -11,9 +11,6 @@
- #include <linux/atmsvc.h>
-
-
--#define WAITING 1 /* for reply: 0: no error, < 0: error, ... */
--
--
- extern struct atm_vcc *sigd; /* needed in svc_release */
-
-
---- linux-2.6.0-test1/net/atm/svc.c 2003-07-02 14:53:18.000000000 -0700
-+++ 25/net/atm/svc.c 2003-07-19 17:03:51.000000000 -0700
-@@ -43,14 +43,6 @@ static int svc_create(struct socket *soc
- */
-
-
--void svc_callback(struct atm_vcc *vcc)
--{
-- wake_up(&vcc->sleep);
--}
--
--
--
--
- static int svc_shutdown(struct socket *sock,int how)
- {
- return 0;
-@@ -64,13 +56,13 @@ static void svc_disconnect(struct atm_vc
-
- DPRINTK("svc_disconnect %p\n",vcc);
- if (test_bit(ATM_VF_REGIS,&vcc->flags)) {
-- prepare_to_wait(&vcc->sleep, &wait, TASK_UNINTERRUPTIBLE);
-+ prepare_to_wait(vcc->sk->sk_sleep, &wait, TASK_UNINTERRUPTIBLE);
- sigd_enq(vcc,as_close,NULL,NULL,NULL);
- while (!test_bit(ATM_VF_RELEASED,&vcc->flags) && sigd) {
- schedule();
-- prepare_to_wait(&vcc->sleep, &wait, TASK_UNINTERRUPTIBLE);
-+ prepare_to_wait(vcc->sk->sk_sleep, &wait, TASK_UNINTERRUPTIBLE);
- }
-- finish_wait(&vcc->sleep, &wait);
-+ finish_wait(vcc->sk->sk_sleep, &wait);
- }
- /* beware - socket is still in use by atmsigd until the last
- as_indicate has been answered */
-@@ -145,22 +137,22 @@ static int svc_bind(struct socket *sock,
- goto out;
- }
- vcc->local = *addr;
-- vcc->reply = WAITING;
-- prepare_to_wait(&vcc->sleep, &wait, TASK_UNINTERRUPTIBLE);
-+ set_bit(ATM_VF_WAITING, &vcc->flags);
-+ prepare_to_wait(sk->sk_sleep, &wait, TASK_UNINTERRUPTIBLE);
- sigd_enq(vcc,as_bind,NULL,NULL,&vcc->local);
-- while (vcc->reply == WAITING && sigd) {
-+ while (test_bit(ATM_VF_WAITING, &vcc->flags) && sigd) {
- schedule();
-- prepare_to_wait(&vcc->sleep, &wait, TASK_UNINTERRUPTIBLE);
-+ prepare_to_wait(sk->sk_sleep, &wait, TASK_UNINTERRUPTIBLE);
- }
-- finish_wait(&vcc->sleep, &wait);
-+ finish_wait(sk->sk_sleep, &wait);
- clear_bit(ATM_VF_REGIS,&vcc->flags); /* doesn't count */
- if (!sigd) {
- error = -EUNATCH;
- goto out;
- }
-- if (!vcc->reply)
-+ if (!sk->sk_err)
- set_bit(ATM_VF_BOUND,&vcc->flags);
-- error = vcc->reply;
-+ error = -sk->sk_err;
- out:
- release_sock(sk);
- return error;
-@@ -191,13 +183,13 @@ static int svc_connect(struct socket *so
- error = -EISCONN;
- goto out;
- case SS_CONNECTING:
-- if (vcc->reply == WAITING) {
-+ if (test_bit(ATM_VF_WAITING, &vcc->flags)) {
- error = -EALREADY;
- goto out;
- }
- sock->state = SS_UNCONNECTED;
-- if (vcc->reply) {
-- error = vcc->reply;
-+ if (sk->sk_err) {
-+ error = -sk->sk_err;
- goto out;
- }
- break;
-@@ -226,20 +218,20 @@ static int svc_connect(struct socket *so
- goto out;
- }
- vcc->remote = *addr;
-- vcc->reply = WAITING;
-- prepare_to_wait(&vcc->sleep, &wait, TASK_INTERRUPTIBLE);
-+ set_bit(ATM_VF_WAITING, &vcc->flags);
-+ prepare_to_wait(sk->sk_sleep, &wait, TASK_INTERRUPTIBLE);
- sigd_enq(vcc,as_connect,NULL,NULL,&vcc->remote);
- if (flags & O_NONBLOCK) {
-- finish_wait(&vcc->sleep, &wait);
-+ finish_wait(sk->sk_sleep, &wait);
- sock->state = SS_CONNECTING;
- error = -EINPROGRESS;
- goto out;
- }
- error = 0;
-- while (vcc->reply == WAITING && sigd) {
-+ while (test_bit(ATM_VF_WAITING, &vcc->flags) && sigd) {
- schedule();
- if (!signal_pending(current)) {
-- prepare_to_wait(&vcc->sleep, &wait, TASK_INTERRUPTIBLE);
-+ prepare_to_wait(sk->sk_sleep, &wait, TASK_INTERRUPTIBLE);
- continue;
- }
- DPRINTK("*ABORT*\n");
-@@ -256,14 +248,14 @@ static int svc_connect(struct socket *so
- * Kernel <--close--- Demon
- */
- sigd_enq(vcc,as_close,NULL,NULL,NULL);
-- while (vcc->reply == WAITING && sigd) {
-- prepare_to_wait(&vcc->sleep, &wait, TASK_INTERRUPTIBLE);
-+ while (test_bit(ATM_VF_WAITING, &vcc->flags) && sigd) {
-+ prepare_to_wait(sk->sk_sleep, &wait, TASK_INTERRUPTIBLE);
- schedule();
- }
-- if (!vcc->reply)
-+ if (!sk->sk_err)
- while (!test_bit(ATM_VF_RELEASED,&vcc->flags)
- && sigd) {
-- prepare_to_wait(&vcc->sleep, &wait, TASK_INTERRUPTIBLE);
-+ prepare_to_wait(sk->sk_sleep, &wait, TASK_INTERRUPTIBLE);
- schedule();
- }
- clear_bit(ATM_VF_REGIS,&vcc->flags);
-@@ -273,15 +265,15 @@ static int svc_connect(struct socket *so
- error = -EINTR;
- break;
- }
-- finish_wait(&vcc->sleep, &wait);
-+ finish_wait(sk->sk_sleep, &wait);
- if (error)
- goto out;
- if (!sigd) {
- error = -EUNATCH;
- goto out;
- }
-- if (vcc->reply) {
-- error = vcc->reply;
-+ if (sk->sk_err) {
-+ error = -sk->sk_err;
- goto out;
- }
- }
-@@ -319,14 +311,14 @@ static int svc_listen(struct socket *soc
- error = -EINVAL;
- goto out;
- }
-- vcc->reply = WAITING;
-- prepare_to_wait(&vcc->sleep, &wait, TASK_UNINTERRUPTIBLE);
-+ set_bit(ATM_VF_WAITING, &vcc->flags);
-+ prepare_to_wait(sk->sk_sleep, &wait, TASK_UNINTERRUPTIBLE);
- sigd_enq(vcc,as_listen,NULL,NULL,&vcc->local);
-- while (vcc->reply == WAITING && sigd) {
-+ while (test_bit(ATM_VF_WAITING, &vcc->flags) && sigd) {
- schedule();
-- prepare_to_wait(&vcc->sleep, &wait, TASK_UNINTERRUPTIBLE);
-+ prepare_to_wait(sk->sk_sleep, &wait, TASK_UNINTERRUPTIBLE);
- }
-- finish_wait(&vcc->sleep, &wait);
-+ finish_wait(sk->sk_sleep, &wait);
- if (!sigd) {
- error = -EUNATCH;
- goto out;
-@@ -334,7 +326,7 @@ static int svc_listen(struct socket *soc
- set_bit(ATM_VF_LISTEN,&vcc->flags);
- vcc->sk->sk_max_ack_backlog = backlog > 0 ? backlog :
- ATM_BACKLOG_DEFAULT;
-- error = vcc->reply;
-+ error = -sk->sk_err;
- out:
- release_sock(sk);
- return error;
-@@ -362,12 +354,12 @@ static int svc_accept(struct socket *soc
- while (1) {
- DEFINE_WAIT(wait);
-
-- prepare_to_wait(&old_vcc->sleep, &wait, TASK_INTERRUPTIBLE);
-+ prepare_to_wait(old_vcc->sk->sk_sleep, &wait, TASK_INTERRUPTIBLE);
- while (!(skb = skb_dequeue(&old_vcc->sk->sk_receive_queue)) &&
- sigd) {
- if (test_bit(ATM_VF_RELEASED,&old_vcc->flags)) break;
- if (test_bit(ATM_VF_CLOSE,&old_vcc->flags)) {
-- error = old_vcc->reply;
-+ error = -sk->sk_err;
- break;
- }
- if (flags & O_NONBLOCK) {
-@@ -381,9 +373,9 @@ static int svc_accept(struct socket *soc
- error = -ERESTARTSYS;
- break;
- }
-- prepare_to_wait(&old_vcc->sleep, &wait, TASK_INTERRUPTIBLE);
-+ prepare_to_wait(old_vcc->sk->sk_sleep, &wait, TASK_INTERRUPTIBLE);
- }
-- finish_wait(&old_vcc->sleep, &wait);
-+ finish_wait(old_vcc->sk->sk_sleep, &wait);
- if (error)
- goto out;
- if (!skb) {
-@@ -407,23 +399,24 @@ static int svc_accept(struct socket *soc
- goto out;
- }
- /* wait should be short, so we ignore the non-blocking flag */
-- new_vcc->reply = WAITING;
-- prepare_to_wait(&new_vcc->sleep, &wait, TASK_UNINTERRUPTIBLE);
-+ set_bit(ATM_VF_WAITING, &new_vcc->flags);
-+ prepare_to_wait(new_vcc->sk->sk_sleep, &wait, TASK_UNINTERRUPTIBLE);
- sigd_enq(new_vcc,as_accept,old_vcc,NULL,NULL);
-- while (new_vcc->reply == WAITING && sigd) {
-+ while (test_bit(ATM_VF_WAITING, &new_vcc->flags) && sigd) {
- release_sock(sk);
- schedule();
- lock_sock(sk);
-- prepare_to_wait(&new_vcc->sleep, &wait, TASK_UNINTERRUPTIBLE);
-+ prepare_to_wait(new_vcc->sk->sk_sleep, &wait, TASK_UNINTERRUPTIBLE);
- }
-- finish_wait(&new_vcc->sleep, &wait);
-+ finish_wait(new_vcc->sk->sk_sleep, &wait);
- if (!sigd) {
- error = -EUNATCH;
- goto out;
- }
-- if (!new_vcc->reply) break;
-- if (new_vcc->reply != -ERESTARTSYS) {
-- error = new_vcc->reply;
-+ if (!new_vcc->sk->sk_err)
-+ break;
-+ if (new_vcc->sk->sk_err != ERESTARTSYS) {
-+ error = -new_vcc->sk->sk_err;
- goto out;
- }
- }
-@@ -451,17 +444,17 @@ int svc_change_qos(struct atm_vcc *vcc,s
- {
- DEFINE_WAIT(wait);
-
-- vcc->reply = WAITING;
-- prepare_to_wait(&vcc->sleep, &wait, TASK_UNINTERRUPTIBLE);
-+ set_bit(ATM_VF_WAITING, &vcc->flags);
-+ prepare_to_wait(vcc->sk->sk_sleep, &wait, TASK_UNINTERRUPTIBLE);
- sigd_enq2(vcc,as_modify,NULL,NULL,&vcc->local,qos,0);
-- while (vcc->reply == WAITING && !test_bit(ATM_VF_RELEASED,&vcc->flags)
-- && sigd) {
-+ while (test_bit(ATM_VF_WAITING, &vcc->flags) &&
-+ !test_bit(ATM_VF_RELEASED, &vcc->flags) && sigd) {
- schedule();
-- prepare_to_wait(&vcc->sleep, &wait, TASK_UNINTERRUPTIBLE);
-+ prepare_to_wait(vcc->sk->sk_sleep, &wait, TASK_UNINTERRUPTIBLE);
- }
-- finish_wait(&vcc->sleep, &wait);
-+ finish_wait(vcc->sk->sk_sleep, &wait);
- if (!sigd) return -EUNATCH;
-- return vcc->reply;
-+ return -vcc->sk->sk_err;
- }
-
-
-@@ -527,7 +520,7 @@ static struct proto_ops svc_proto_ops =
- .socketpair = sock_no_socketpair,
- .accept = svc_accept,
- .getname = svc_getname,
-- .poll = atm_poll,
-+ .poll = vcc_poll,
- .ioctl = vcc_ioctl,
- .listen = svc_listen,
- .shutdown = svc_shutdown,
-@@ -547,7 +540,6 @@ static int svc_create(struct socket *soc
- sock->ops = &svc_proto_ops;
- error = vcc_create(sock, protocol, AF_ATMSVC);
- if (error) return error;
-- ATM_SD(sock)->callback = svc_callback;
- ATM_SD(sock)->local.sas_family = AF_ATMSVC;
- ATM_SD(sock)->remote.sas_family = AF_ATMSVC;
- return 0;
---- linux-2.6.0-test1/net/core/dev.c 2003-07-10 18:50:32.000000000 -0700
-+++ 25/net/core/dev.c 2003-07-19 17:03:51.000000000 -0700
-@@ -178,7 +178,7 @@ static struct notifier_block *netdev_cha
- * Device drivers call our routines to queue packets here. We empty the
- * queue in the local softnet handler.
- */
--struct softnet_data softnet_data[NR_CPUS] __cacheline_aligned;
-+DEFINE_PER_CPU(struct softnet_data, softnet_data) = { 0, };
-
- #ifdef CONFIG_NET_FASTROUTE
- int netdev_fastroute;
-@@ -1280,34 +1280,35 @@ static void get_sample_stats(int cpu)
- unsigned long rd;
- int rq;
- #endif
-- int blog = softnet_data[cpu].input_pkt_queue.qlen;
-- int avg_blog = softnet_data[cpu].avg_blog;
-+ struct softnet_data *sd = &per_cpu(softnet_data, cpu);
-+ int blog = sd->input_pkt_queue.qlen;
-+ int avg_blog = sd->avg_blog;
-
- avg_blog = (avg_blog >> 1) + (blog >> 1);
-
- if (avg_blog > mod_cong) {
- /* Above moderate congestion levels. */
-- softnet_data[cpu].cng_level = NET_RX_CN_HIGH;
-+ sd->cng_level = NET_RX_CN_HIGH;
- #ifdef RAND_LIE
- rd = net_random();
- rq = rd % netdev_max_backlog;
- if (rq < avg_blog) /* unlucky bastard */
-- softnet_data[cpu].cng_level = NET_RX_DROP;
-+ sd->cng_level = NET_RX_DROP;
- #endif
- } else if (avg_blog > lo_cong) {
-- softnet_data[cpu].cng_level = NET_RX_CN_MOD;
-+ sd->cng_level = NET_RX_CN_MOD;
- #ifdef RAND_LIE
- rd = net_random();
- rq = rd % netdev_max_backlog;
- if (rq < avg_blog) /* unlucky bastard */
-- softnet_data[cpu].cng_level = NET_RX_CN_HIGH;
-+ sd->cng_level = NET_RX_CN_HIGH;
- #endif
- } else if (avg_blog > no_cong)
-- softnet_data[cpu].cng_level = NET_RX_CN_LOW;
-+ sd->cng_level = NET_RX_CN_LOW;
- else /* no congestion */
-- softnet_data[cpu].cng_level = NET_RX_SUCCESS;
-+ sd->cng_level = NET_RX_SUCCESS;
-
-- softnet_data[cpu].avg_blog = avg_blog;
-+ sd->avg_blog = avg_blog;
- }
-
- #ifdef OFFLINE_SAMPLE
-@@ -1357,7 +1358,7 @@ int netif_rx(struct sk_buff *skb)
- */
- local_irq_save(flags);
- this_cpu = smp_processor_id();
-- queue = &softnet_data[this_cpu];
-+ queue = &__get_cpu_var(softnet_data);
-
- netdev_rx_stat[this_cpu].total++;
- if (queue->input_pkt_queue.qlen <= netdev_max_backlog) {
-@@ -1445,14 +1446,14 @@ static __inline__ void skb_bond(struct s
-
- static void net_tx_action(struct softirq_action *h)
- {
-- int cpu = smp_processor_id();
-+ struct softnet_data *sd = &__get_cpu_var(softnet_data);
-
-- if (softnet_data[cpu].completion_queue) {
-+ if (sd->completion_queue) {
- struct sk_buff *clist;
-
- local_irq_disable();
-- clist = softnet_data[cpu].completion_queue;
-- softnet_data[cpu].completion_queue = NULL;
-+ clist = sd->completion_queue;
-+ sd->completion_queue = NULL;
- local_irq_enable();
-
- while (clist) {
-@@ -1464,12 +1465,12 @@ static void net_tx_action(struct softirq
- }
- }
-
-- if (softnet_data[cpu].output_queue) {
-+ if (sd->output_queue) {
- struct net_device *head;
-
- local_irq_disable();
-- head = softnet_data[cpu].output_queue;
-- softnet_data[cpu].output_queue = NULL;
-+ head = sd->output_queue;
-+ sd->output_queue = NULL;
- local_irq_enable();
-
- while (head) {
-@@ -1611,8 +1612,7 @@ static int process_backlog(struct net_de
- {
- int work = 0;
- int quota = min(backlog_dev->quota, *budget);
-- int this_cpu = smp_processor_id();
-- struct softnet_data *queue = &softnet_data[this_cpu];
-+ struct softnet_data *queue = &__get_cpu_var(softnet_data);
- unsigned long start_time = jiffies;
-
- for (;;) {
-@@ -1673,7 +1673,7 @@ job_done:
- static void net_rx_action(struct softirq_action *h)
- {
- int this_cpu = smp_processor_id();
-- struct softnet_data *queue = &softnet_data[this_cpu];
-+ struct softnet_data *queue = &__get_cpu_var(softnet_data);
- unsigned long start_time = jiffies;
- int budget = netdev_max_backlog;
-
-@@ -2979,7 +2979,7 @@ static int __init net_dev_init(void)
- for (i = 0; i < NR_CPUS; i++) {
- struct softnet_data *queue;
-
-- queue = &softnet_data[i];
-+ queue = &per_cpu(softnet_data, i);
- skb_queue_head_init(&queue->input_pkt_queue);
- queue->throttle = 0;
- queue->cng_level = 0;
---- linux-2.6.0-test1/net/ipv4/ip_gre.c 2003-07-10 18:50:32.000000000 -0700
-+++ 25/net/ipv4/ip_gre.c 2003-07-19 17:03:51.000000000 -0700
-@@ -816,6 +816,7 @@ static int ipgre_tunnel_xmit(struct sk_b
- skb_set_owner_w(new_skb, skb->sk);
- dev_kfree_skb(skb);
- skb = new_skb;
-+ old_iph = skb->nh.iph;
- }
-
- skb->nh.raw = skb_push(skb, gre_hlen);
---- linux-2.6.0-test1/net/ipv4/ipip.c 2003-07-10 18:50:32.000000000 -0700
-+++ 25/net/ipv4/ipip.c 2003-07-19 17:03:51.000000000 -0700
-@@ -616,6 +616,7 @@ static int ipip_tunnel_xmit(struct sk_bu
- skb_set_owner_w(new_skb, skb->sk);
- dev_kfree_skb(skb);
- skb = new_skb;
-+ old_iph = skb->nh.iph;
- }
-
- skb->nh.raw = skb_push(skb, sizeof(struct iphdr));
---- linux-2.6.0-test1/net/ipv4/ipvs/ip_vs_conn.c 2003-07-13 21:44:35.000000000 -0700
-+++ 25/net/ipv4/ipvs/ip_vs_conn.c 2003-07-19 17:03:51.000000000 -0700
-@@ -507,9 +507,6 @@ static void ip_vs_conn_expire(unsigned l
- * refcnt==1 implies I'm the only one referrer
- */
- if (likely(atomic_read(&cp->refcnt) == 1)) {
-- /* make sure that there is no timer on it now */
-- del_timer_sync(&cp->timer);
--
- /* does anybody control me? */
- if (cp->control)
- ip_vs_control_del(cp);
-@@ -517,7 +514,6 @@ static void ip_vs_conn_expire(unsigned l
- if (unlikely(cp->app != NULL))
- ip_vs_unbind_app(cp);
- ip_vs_unbind_dest(cp);
-- //ip_vs_timeout_detach(cp);
- if (cp->flags & IP_VS_CONN_F_NO_CPORT)
- atomic_dec(&ip_vs_conn_no_cport_cnt);
- atomic_dec(&ip_vs_conn_count);
---- linux-2.6.0-test1/net/ipv4/ipvs/ip_vs_ctl.c 2003-07-13 21:44:35.000000000 -0700
-+++ 25/net/ipv4/ipvs/ip_vs_ctl.c 2003-07-19 17:03:51.000000000 -0700
-@@ -93,7 +93,7 @@ int ip_vs_get_debug_level(void)
- /*
- * update_defense_level is called from timer bh and from sysctl.
- */
--void update_defense_level(void)
-+static void update_defense_level(void)
- {
- struct sysinfo i;
- static int old_secure_tcp = 0;
-@@ -210,6 +210,22 @@ void update_defense_level(void)
- }
-
-
-+/*
-+ * Timer for checking the defense
-+ */
-+static struct timer_list defense_timer;
-+#define DEFENSE_TIMER_PERIOD 1*HZ
-+
-+static void defense_timer_handler(unsigned long data)
-+{
-+ update_defense_level();
-+ if (atomic_read(&ip_vs_dropentry))
-+ ip_vs_random_dropentry();
-+
-+ mod_timer(&defense_timer, jiffies + DEFENSE_TIMER_PERIOD);
-+}
-+
-+
- int
- ip_vs_use_count_inc(void)
- {
-@@ -2187,6 +2203,12 @@ int ip_vs_control_init(void)
- ip_vs_stats.lock = SPIN_LOCK_UNLOCKED;
- ip_vs_new_estimator(&ip_vs_stats);
-
-+ /* Hook the defense timer */
-+ init_timer(&defense_timer);
-+ defense_timer.function = defense_timer_handler;
-+ defense_timer.expires = jiffies + DEFENSE_TIMER_PERIOD;
-+ add_timer(&defense_timer);
-+
- LeaveFunction(2);
- return 0;
- }
-@@ -2196,6 +2218,7 @@ void ip_vs_control_cleanup(void)
- {
- EnterFunction(2);
- ip_vs_trash_cleanup();
-+ del_timer_sync(&defense_timer);
- ip_vs_kill_estimator(&ip_vs_stats);
- unregister_sysctl_table(ipv4_vs_table.sysctl_header);
- proc_net_remove("ip_vs_stats");
---- linux-2.6.0-test1/net/ipv4/ipvs/ip_vs_xmit.c 2003-07-13 21:44:35.000000000 -0700
-+++ 25/net/ipv4/ipvs/ip_vs_xmit.c 2003-07-19 17:03:51.000000000 -0700
-@@ -78,7 +78,6 @@ __ip_vs_get_out_rt(struct ip_vs_conn *cp
- .daddr = dest->addr,
- .saddr = 0,
- .tos = rtos, } },
-- .proto = cp->protocol,
- };
-
- if (ip_route_output_key(&rt, &fl)) {
-@@ -102,7 +101,6 @@ __ip_vs_get_out_rt(struct ip_vs_conn *cp
- .daddr = dest->addr,
- .saddr = 0,
- .tos = rtos, } },
-- .proto = cp->protocol,
- };
-
- if (ip_route_output_key(&rt, &fl)) {
---- linux-2.6.0-test1/net/ipv4/ipvs/Kconfig 2003-07-13 21:44:35.000000000 -0700
-+++ 25/net/ipv4/ipvs/Kconfig 2003-07-19 17:03:51.000000000 -0700
-@@ -147,7 +147,7 @@ config IP_VS_WLC
- unsure, say N.
-
- config IP_VS_LBLC
-- tristate "locality-based least-connection with replication scheduling"
-+ tristate "locality-based least-connection scheduling"
- depends on IP_VS
- ---help---
- The locality-based least-connection scheduling algorithm is for
-@@ -163,7 +163,7 @@ config IP_VS_LBLC
- unsure, say N.
-
- config IP_VS_LBLCR
-- tristate "locality-based least-connection with replication schedulin"
-+ tristate "locality-based least-connection with replication scheduling"
- depends on IP_VS
- ---help---
- The locality-based least-connection with replication scheduling
---- linux-2.6.0-test1/net/ipv4/tcp_input.c 2003-07-13 21:44:35.000000000 -0700
-+++ 25/net/ipv4/tcp_input.c 2003-07-19 17:03:51.000000000 -0700
-@@ -2373,7 +2373,7 @@ static void tcp_fin(struct sk_buff *skb,
- tcp_schedule_ack(tp);
-
- sk->sk_shutdown |= RCV_SHUTDOWN;
-- sock_reset_flag(sk, SOCK_DONE);
-+ sock_set_flag(sk, SOCK_DONE);
-
- switch (sk->sk_state) {
- case TCP_SYN_RECV:
---- linux-2.6.0-test1/net/ipv6/addrconf.c 2003-07-10 18:50:32.000000000 -0700
-+++ 25/net/ipv6/addrconf.c 2003-07-19 17:03:51.000000000 -0700
-@@ -368,7 +368,8 @@ static struct inet6_dev * ipv6_add_dev(s
- dev, dev->name);
- ndev->cnf.use_tempaddr = -1;
- } else {
-- __ipv6_regen_rndid(ndev);
-+ in6_dev_hold(ndev);
-+ ipv6_regen_rndid((unsigned long) ndev);
- }
- #endif
-
-@@ -1122,9 +1123,6 @@ static int __ipv6_regen_rndid(struct ine
- sg[1].offset = ((long) eui64 & ~PAGE_MASK);
- sg[1].length = 8;
-
-- if (!del_timer(&idev->regen_timer))
-- in6_dev_hold(idev);
--
- dev = idev->dev;
-
- if (ipv6_generate_eui64(eui64, dev)) {
-@@ -1137,7 +1135,6 @@ regen:
- spin_lock(&md5_tfm_lock);
- if (unlikely(md5_tfm == NULL)) {
- spin_unlock(&md5_tfm_lock);
-- in6_dev_put(idev);
- return -1;
- }
- crypto_digest_init(md5_tfm);
-@@ -1170,33 +1167,41 @@ regen:
- if ((idev->rndid[2]|idev->rndid[3]|idev->rndid[4]|idev->rndid[5]|idev->rndid[6]|idev->rndid[7]) == 0x00)
- goto regen;
- }
--
-- idev->regen_timer.expires = jiffies +
-- idev->cnf.temp_prefered_lft * HZ -
-- idev->cnf.regen_max_retry * idev->cnf.dad_transmits * idev->nd_parms->retrans_time - desync_factor;
-- if (time_before(idev->regen_timer.expires, jiffies)) {
-- idev->regen_timer.expires = 0;
-- printk(KERN_WARNING
-- "__ipv6_regen_rndid(): too short regeneration interval; timer disabled for %s.\n",
-- idev->dev->name);
-- in6_dev_put(idev);
-- return -1;
-- }
-
-- add_timer(&idev->regen_timer);
- return 0;
- }
-
- static void ipv6_regen_rndid(unsigned long data)
- {
- struct inet6_dev *idev = (struct inet6_dev *) data;
-+ unsigned long expires;
-
- read_lock_bh(&addrconf_lock);
- write_lock_bh(&idev->lock);
-- if (!idev->dead)
-- __ipv6_regen_rndid(idev);
-+
-+ if (idev->dead)
-+ goto out;
-+
-+ if (__ipv6_regen_rndid(idev) < 0)
-+ goto out;
-+
-+ expires = jiffies +
-+ idev->cnf.temp_prefered_lft * HZ -
-+ idev->cnf.regen_max_retry * idev->cnf.dad_transmits * idev->nd_parms->retrans_time - desync_factor;
-+ if (time_before(expires, jiffies)) {
-+ printk(KERN_WARNING
-+ "ipv6_regen_rndid(): too short regeneration interval; timer disabled for %s.\n",
-+ idev->dev->name);
-+ goto out;
-+ }
-+
-+ if (!mod_timer(&idev->regen_timer, expires))
-+ in6_dev_hold(idev);
-+
-+out:
- write_unlock_bh(&idev->lock);
- read_unlock_bh(&addrconf_lock);
-+ in6_dev_put(idev);
- }
-
- static int __ipv6_try_regen_rndid(struct inet6_dev *idev, struct in6_addr *tmpaddr) {
-@@ -1928,6 +1933,27 @@ static int addrconf_ifdown(struct net_de
- /* Step 3: clear address list */
-
- write_lock_bh(&idev->lock);
-+#ifdef CONFIG_IPV6_PRIVACY
-+ if (how == 1 && del_timer(&idev->regen_timer))
-+ in6_dev_put(idev);
-+
-+ /* clear tempaddr list */
-+ while ((ifa = idev->tempaddr_list) != NULL) {
-+ idev->tempaddr_list = ifa->tmp_next;
-+ ifa->tmp_next = NULL;
-+ ifa->dead = 1;
-+ write_unlock_bh(&idev->lock);
-+ spin_lock_bh(&ifa->lock);
-+
-+ if (ifa->ifpub) {
-+ in6_ifa_put(ifa->ifpub);
-+ ifa->ifpub = NULL;
-+ }
-+ spin_unlock_bh(&ifa->lock);
-+ in6_ifa_put(ifa);
-+ write_lock_bh(&idev->lock);
-+ }
-+#endif
- while ((ifa = idev->addr_list) != NULL) {
- idev->addr_list = ifa->if_next;
- ifa->if_next = NULL;
---- linux-2.6.0-test1/net/ipv6/ah6.c 2003-06-16 22:32:21.000000000 -0700
-+++ 25/net/ipv6/ah6.c 2003-07-19 17:03:51.000000000 -0700
-@@ -19,7 +19,7 @@
- *
- * Mitsuru KANDA @USAGI : IPv6 Support
- * Kazunori MIYAZAWA @USAGI :
-- * Kunihiro Ishiguro :
-+ * Kunihiro Ishiguro <kunihiro@ipinfusion.com>
- *
- * This file is derived from net/ipv4/ah.c.
- */
---- linux-2.6.0-test1/net/ipv6/esp6.c 2003-06-14 12:18:24.000000000 -0700
-+++ 25/net/ipv6/esp6.c 2003-07-19 17:03:51.000000000 -0700
-@@ -19,7 +19,7 @@
- *
- * Mitsuru KANDA @USAGI : IPv6 Support
- * Kazunori MIYAZAWA @USAGI :
-- * Kunihiro Ishiguro :
-+ * Kunihiro Ishiguro <kunihiro@ipinfusion.com>
- *
- * This file is derived from net/ipv4/esp.c
- */
---- linux-2.6.0-test1/net/ipv6/route.c 2003-07-13 21:44:35.000000000 -0700
-+++ 25/net/ipv6/route.c 2003-07-19 17:03:51.000000000 -0700
-@@ -567,6 +567,11 @@ struct dst_entry *ndisc_dst_alloc(struct
- if (unlikely(rt == NULL))
- goto out;
-
-+ if (dev)
-+ dev_hold(dev);
-+ if (neigh)
-+ neigh_hold(neigh);
-+
- rt->rt6i_dev = dev;
- rt->rt6i_nexthop = neigh;
- rt->rt6i_expires = 0;
---- linux-2.6.0-test1/net/ipv6/sit.c 2003-07-10 18:50:32.000000000 -0700
-+++ 25/net/ipv6/sit.c 2003-07-19 17:03:51.000000000 -0700
-@@ -550,6 +550,7 @@ static int ipip6_tunnel_xmit(struct sk_b
- skb_set_owner_w(new_skb, skb->sk);
- dev_kfree_skb(skb);
- skb = new_skb;
-+ iph6 = skb->nh.ipv6h;
- }
-
- skb->nh.raw = skb_push(skb, sizeof(struct iphdr));
---- linux-2.6.0-test1/net/ipv6/tcp_ipv6.c 2003-07-10 18:50:32.000000000 -0700
-+++ 25/net/ipv6/tcp_ipv6.c 2003-07-19 17:03:51.000000000 -0700
-@@ -579,7 +579,7 @@ static int tcp_v6_connect(struct sock *s
-
- addr_type = ipv6_addr_type(&usin->sin6_addr);
-
-- if(addr_type & IPV6_ADDR_MULTICAST)
-+ if (addr_type & (IPV6_ADDR_ANYCAST | IPV6_ADDR_MULTICAST))
- return -ENETUNREACH;
-
- if (addr_type&IPV6_ADDR_LINKLOCAL) {
-@@ -967,12 +967,14 @@ static void tcp_v6_send_reset(struct sk_
- struct tcphdr *th = skb->h.th, *t1;
- struct sk_buff *buff;
- struct flowi fl;
-+ int daddr_type;
-
- if (th->rst)
- return;
-
-- if (ipv6_addr_is_multicast(&skb->nh.ipv6h->daddr))
-- return;
-+ daddr_type = ipv6_addr_type(&skb->nh.ipv6h->daddr);
-+ if (daddr_type & (IPV6_ADDR_ANYCAST | IPV6_ADDR_MULTICAST))
-+ return;
-
- /*
- * We need to grab some memory, and put together an RST,
-@@ -1171,13 +1173,14 @@ static int tcp_v6_conn_request(struct so
- struct tcp_opt tmptp, *tp = tcp_sk(sk);
- struct open_request *req = NULL;
- __u32 isn = TCP_SKB_CB(skb)->when;
-+ int daddr_type;
-
- if (skb->protocol == htons(ETH_P_IP))
- return tcp_v4_conn_request(sk, skb);
-
-- /* FIXME: do the same check for anycast */
-- if (ipv6_addr_is_multicast(&skb->nh.ipv6h->daddr))
-- goto drop;
-+ daddr_type = ipv6_addr_type(&skb->nh.ipv6h->daddr);
-+ if (daddr_type & (IPV6_ADDR_ANYCAST | IPV6_ADDR_MULTICAST))
-+ goto drop;
-
- /*
- * There are no SYN attacks on IPv6, yet...
---- linux-2.6.0-test1/net/ipv6/xfrm6_input.c 2003-07-02 14:53:18.000000000 -0700
-+++ 25/net/ipv6/xfrm6_input.c 2003-07-19 17:03:51.000000000 -0700
-@@ -4,7 +4,7 @@
- * Authors:
- * Mitsuru KANDA @USAGI
- * Kazunori MIYAZAWA @USAGI
-- * Kunihiro Ishiguro
-+ * Kunihiro Ishiguro <kunihiro@ipinfusion.com>
- * YOSHIFUJI Hideaki @USAGI
- * IPv6 support
- */
---- linux-2.6.0-test1/net/ipv6/xfrm6_policy.c 2003-06-22 12:04:45.000000000 -0700
-+++ 25/net/ipv6/xfrm6_policy.c 2003-07-19 17:03:51.000000000 -0700
-@@ -4,7 +4,7 @@
- * Authors:
- * Mitsuru KANDA @USAGI
- * Kazunori MIYAZAWA @USAGI
-- * Kunihiro Ishiguro
-+ * Kunihiro Ishiguro <kunihiro@ipinfusion.com>
- * IPv6 support
- * YOSHIFUJI Hideaki
- * Split up af-specific portion
---- linux-2.6.0-test1/net/ipv6/xfrm6_state.c 2003-06-14 12:18:08.000000000 -0700
-+++ 25/net/ipv6/xfrm6_state.c 2003-07-19 17:03:51.000000000 -0700
-@@ -4,7 +4,7 @@
- * Authors:
- * Mitsuru KANDA @USAGI
- * Kazunori MIYAZAWA @USAGI
-- * Kunihiro Ishiguro
-+ * Kunihiro Ishiguro <kunihiro@ipinfusion.com>
- * IPv6 support
- * YOSHIFUJI Hideaki @USAGI
- * Split up af-specific portion
---- linux-2.6.0-test1/net/netsyms.c 2003-07-13 21:44:35.000000000 -0700
-+++ 25/net/netsyms.c 2003-07-19 17:03:51.000000000 -0700
-@@ -685,7 +685,7 @@ EXPORT_SYMBOL(ip_route_me_harder);
-
- EXPORT_SYMBOL(register_gifconf);
-
--EXPORT_SYMBOL(softnet_data);
-+EXPORT_PER_CPU_SYMBOL(softnet_data);
-
- #ifdef CONFIG_NET_RADIO
- #include <net/iw_handler.h> /* Wireless Extensions driver API */
---- linux-2.6.0-test1/net/sunrpc/auth_gss/auth_gss.c 2003-06-14 12:18:09.000000000 -0700
-+++ 25/net/sunrpc/auth_gss/auth_gss.c 2003-07-19 17:03:51.000000000 -0700
-@@ -235,7 +235,7 @@ gss_parse_init_downcall(struct gss_api_m
- goto err;
- }
- ctx->gc_proc = RPC_GSS_PROC_DATA;
-- ctx->gc_seq = 0;
-+ ctx->gc_seq = 1; /* NetApp 6.4R1 doesn't accept seq. no. 0 */
- spin_lock_init(&ctx->gc_seq_lock);
- atomic_set(&ctx->count,1);
-
---- linux-2.6.0-test1/net/sunrpc/clnt.c 2003-06-14 12:18:07.000000000 -0700
-+++ 25/net/sunrpc/clnt.c 2003-07-19 17:07:18.000000000 -0700
-@@ -385,7 +385,8 @@ rpc_setbufsize(struct rpc_clnt *clnt, un
- xprt->rcvsize = 0;
- if (rcvsize)
- xprt->rcvsize = rcvsize + RPC_SLACK_SPACE;
-- xprt_sock_setbufsize(xprt);
-+ if (xprt_connected(xprt))
-+ xprt_sock_setbufsize(xprt);
- }
-
- /*
-@@ -743,14 +744,14 @@ call_timeout(struct rpc_task *task)
-
- dprintk("RPC: %4d call_timeout (major)\n", task->tk_pid);
- if (clnt->cl_softrtry) {
-- if (clnt->cl_chatty && !task->tk_exit)
-+ if (clnt->cl_chatty)
- printk(KERN_NOTICE "%s: server %s not responding, timed out\n",
- clnt->cl_protname, clnt->cl_server);
- rpc_exit(task, -EIO);
- return;
- }
-
-- if (clnt->cl_chatty && !(task->tk_flags & RPC_CALL_MAJORSEEN) && rpc_ntimeo(&clnt->cl_rtt) > 7) {
-+ if (clnt->cl_chatty && !(task->tk_flags & RPC_CALL_MAJORSEEN)) {
- task->tk_flags |= RPC_CALL_MAJORSEEN;
- printk(KERN_NOTICE "%s: server %s not responding, still trying\n",
- clnt->cl_protname, clnt->cl_server);
---- linux-2.6.0-test1/net/sunrpc/xprt.c 2003-06-14 12:18:25.000000000 -0700
-+++ 25/net/sunrpc/xprt.c 2003-07-19 17:07:18.000000000 -0700
-@@ -436,6 +436,7 @@ xprt_connect(struct rpc_task *task)
- goto out_write;
- }
- xprt_bind_socket(xprt, sock);
-+ xprt_sock_setbufsize(xprt);
-
- if (!xprt->stream)
- goto out_write;
-@@ -1041,21 +1042,6 @@ out:
- }
-
- /*
-- * Exponential backoff for UDP retries
-- */
--static inline int
--xprt_expbackoff(struct rpc_task *task, struct rpc_rqst *req)
--{
-- int backoff;
--
-- req->rq_ntimeo++;
-- backoff = min(rpc_ntimeo(&task->tk_client->cl_rtt), XPRT_MAX_BACKOFF);
-- if (req->rq_ntimeo < (1 << backoff))
-- return 1;
-- return 0;
--}
--
--/*
- * RPC receive timeout handler.
- */
- static void
-@@ -1068,14 +1054,7 @@ xprt_timer(struct rpc_task *task)
- if (req->rq_received)
- goto out;
-
-- if (!xprt->nocong) {
-- if (xprt_expbackoff(task, req)) {
-- rpc_add_timer(task, xprt_timer);
-- goto out_unlock;
-- }
-- rpc_inc_timeo(&task->tk_client->cl_rtt);
-- xprt_adjust_cwnd(req->rq_xprt, -ETIMEDOUT);
-- }
-+ xprt_adjust_cwnd(req->rq_xprt, -ETIMEDOUT);
- req->rq_nresend++;
-
- dprintk("RPC: %4d xprt_timer (%s request)\n",
-@@ -1085,7 +1064,6 @@ xprt_timer(struct rpc_task *task)
- out:
- task->tk_timeout = 0;
- rpc_wake_up_task(task);
--out_unlock:
- spin_unlock(&xprt->sock_lock);
- }
-
-@@ -1221,16 +1199,17 @@ xprt_transmit(struct rpc_task *task)
- return;
- out_receive:
- dprintk("RPC: %4d xmit complete\n", task->tk_pid);
-+ spin_lock_bh(&xprt->sock_lock);
- /* Set the task's receive timeout value */
- if (!xprt->nocong) {
- task->tk_timeout = rpc_calc_rto(&clnt->cl_rtt,
- task->tk_msg.rpc_proc->p_timer);
-- req->rq_ntimeo = 0;
-+ task->tk_timeout <<= clnt->cl_timeout.to_retries
-+ - req->rq_timeout.to_retries;
- if (task->tk_timeout > req->rq_timeout.to_maxval)
- task->tk_timeout = req->rq_timeout.to_maxval;
- } else
- task->tk_timeout = req->rq_timeout.to_current;
-- spin_lock_bh(&xprt->sock_lock);
- /* Don't race with disconnect */
- if (!xprt_connected(xprt))
- task->tk_status = -ENOTCONN;
---- linux-2.6.0-test1/net/wanrouter/wanmain.c 2003-07-10 18:50:32.000000000 -0700
-+++ 25/net/wanrouter/wanmain.c 2003-07-19 17:03:51.000000000 -0700
-@@ -668,7 +668,7 @@ static int wanrouter_device_stat(struct
- static int wanrouter_device_new_if(struct wan_device *wandev,
- wanif_conf_t *u_conf)
- {
-- wanif_conf_t conf;
-+ wanif_conf_t *cnf;
- struct net_device *dev = NULL;
- #ifdef CONFIG_WANPIPE_MULTPPP
- struct ppp_device *pppdev=NULL;
-@@ -678,38 +678,47 @@ static int wanrouter_device_new_if(struc
- if ((wandev->state == WAN_UNCONFIGURED) || (wandev->new_if == NULL))
- return -ENODEV;
-
-- if (copy_from_user(&conf, u_conf, sizeof(wanif_conf_t)))
-- return -EFAULT;
--
-- if (conf.magic != ROUTER_MAGIC)
-- return -EINVAL;
-+ cnf = kmalloc(sizeof(wanif_conf_t), GFP_KERNEL);
-+ if (!cnf)
-+ return -ENOBUFS;
-+
-+ err = -EFAULT;
-+ if (copy_from_user(cnf, u_conf, sizeof(wanif_conf_t)))
-+ goto out;
-+
-+ err = -EINVAL;
-+ if (cnf->magic != ROUTER_MAGIC)
-+ goto out;
-
-- if (conf.config_id == WANCONFIG_MPPP) {
-+ if (cnf->config_id == WANCONFIG_MPPP) {
- #ifdef CONFIG_WANPIPE_MULTPPP
- pppdev = kmalloc(sizeof(struct ppp_device), GFP_KERNEL);
-+ err = -ENOBUFS;
- if (pppdev == NULL)
-- return -ENOBUFS;
-+ goto out;
- memset(pppdev, 0, sizeof(struct ppp_device));
- pppdev->dev = kmalloc(sizeof(struct net_device), GFP_KERNEL);
- if (pppdev->dev == NULL) {
- kfree(pppdev);
-- return -ENOBUFS;
-+ err = -ENOBUFS;
-+ goto out;
- }
- memset(pppdev->dev, 0, sizeof(struct net_device));
-- err = wandev->new_if(wandev,
-- (struct net_device *)pppdev, &conf);
-+ err = wandev->new_if(wandev, (struct net_device *)pppdev, cnf);
- dev = pppdev->dev;
- #else
- printk(KERN_INFO "%s: Wanpipe Mulit-Port PPP support has not been compiled in!\n",
- wandev->name);
-- return -EPROTONOSUPPORT;
-+ err = -EPROTONOSUPPORT;
-+ goto out;
- #endif
- } else {
- dev = kmalloc(sizeof(struct net_device), GFP_KERNEL);
-+ err = -ENOBUFS;
- if (dev == NULL)
-- return -ENOBUFS;
-+ goto out;
- memset(dev, 0, sizeof(struct net_device));
-- err = wandev->new_if(wandev, dev, &conf);
-+ err = wandev->new_if(wandev, dev, cnf);
- }
-
- if (!err) {
-@@ -748,7 +757,8 @@ static int wanrouter_device_new_if(struc
- ++wandev->ndev;
-
- unlock_adapter_irq(&wandev->lock, &smp_flags);
-- return 0; /* done !!! */
-+ err = 0; /* done !!! */
-+ goto out;
- }
- }
- if (wandev->del_if)
-@@ -761,18 +771,19 @@ static int wanrouter_device_new_if(struc
- dev->priv = NULL;
- }
-
--
- #ifdef CONFIG_WANPIPE_MULTPPP
-- if (conf.config_id == WANCONFIG_MPPP)
-+ if (cnf->config_id == WANCONFIG_MPPP)
- kfree(pppdev);
- else
- kfree(dev);
- #else
- /* Sync PPP is disabled */
-- if (conf.config_id != WANCONFIG_MPPP)
-+ if (cnf->config_id != WANCONFIG_MPPP)
- kfree(dev);
- #endif
-
-+out:
-+ kfree(cnf);
- return err;
- }
-
---- linux-2.6.0-test1/net/xfrm/xfrm_policy.c 2003-07-13 21:44:35.000000000 -0700
-+++ 25/net/xfrm/xfrm_policy.c 2003-07-19 17:03:51.000000000 -0700
-@@ -4,7 +4,7 @@
- * Changes:
- * Mitsuru KANDA @USAGI
- * Kazunori MIYAZAWA @USAGI
-- * Kunihiro Ishiguro
-+ * Kunihiro Ishiguro <kunihiro@ipinfusion.com>
- * IPv6 support
- * Kazunori MIYAZAWA @USAGI
- * YOSHIFUJI Hideaki
---- linux-2.6.0-test1/net/xfrm/xfrm_state.c 2003-07-10 18:50:32.000000000 -0700
-+++ 25/net/xfrm/xfrm_state.c 2003-07-19 17:03:51.000000000 -0700
-@@ -4,7 +4,7 @@
- * Changes:
- * Mitsuru KANDA @USAGI
- * Kazunori MIYAZAWA @USAGI
-- * Kunihiro Ishiguro
-+ * Kunihiro Ishiguro <kunihiro@ipinfusion.com>
- * IPv6 support
- * YOSHIFUJI Hideaki @USAGI
- * Split up af-specific functions
---- linux-2.6.0-test1/net/xfrm/xfrm_user.c 2003-07-10 18:50:32.000000000 -0700
-+++ 25/net/xfrm/xfrm_user.c 2003-07-19 17:03:51.000000000 -0700
-@@ -5,7 +5,7 @@
- * Changes:
- * Mitsuru KANDA @USAGI
- * Kazunori MIYAZAWA @USAGI
-- * Kunihiro Ishiguro
-+ * Kunihiro Ishiguro <kunihiro@ipinfusion.com>
- * IPv6 support
- *
- */
---- linux-2.6.0-test1/scripts/ver_linux 2003-07-10 18:50:32.000000000 -0700
-+++ 25/scripts/ver_linux 2003-07-19 17:03:51.000000000 -0700
-@@ -54,11 +54,14 @@ pppd --version 2>&1| grep version | awk
- isdnctrl 2>&1 | grep version | awk \
- 'NR==1{print "isdn4k-utils ", $NF}'
-
-+showmount --version 2>&1 | grep nfs-utils | awk \
-+'NR==1{print "nfs-utils ", $NF}'
-+
- ls -l `ldd /bin/sh | awk '/libc/{print $3}'` | sed \
- -e 's/\.so$//' | awk -F'[.-]' '{print "Linux C Library " \
- $(NF-2)"."$(NF-1)"."$NF}'
-
--ldd -v > /dev/null 2>&1 && ldd -v || ldd --version |head -1 | awk \
-+ldd -v > /dev/null 2>&1 && ldd -v || ldd --version |head -n 1 | awk \
- 'NR==1{print "Dynamic linker (ldd) ", $NF}'
-
- ls -l /usr/lib/lib{g,stdc}++.so 2>/dev/null | awk -F. \
---- linux-2.6.0-test1/security/Kconfig 2003-06-14 12:18:25.000000000 -0700
-+++ 25/security/Kconfig 2003-07-19 17:04:47.000000000 -0700
-@@ -44,5 +44,7 @@ config SECURITY_ROOTPLUG
-
- If you are unsure how to answer this question, answer N.
-
-+source security/selinux/Kconfig
-+
- endmenu
-
---- linux-2.6.0-test1/security/Makefile 2003-06-14 12:18:28.000000000 -0700
-+++ 25/security/Makefile 2003-07-19 17:04:47.000000000 -0700
-@@ -2,6 +2,8 @@
- # Makefile for the kernel security code
- #
-
-+subdir-$(CONFIG_SECURITY_SELINUX) += selinux
-+
- # if we don't select a security model, use the default capabilities
- ifneq ($(CONFIG_SECURITY),y)
- obj-y += capability.o
-@@ -9,5 +11,9 @@ endif
-
- # Object file lists
- obj-$(CONFIG_SECURITY) += security.o dummy.o
-+# Must precede capability.o in order to stack properly.
-+ifeq ($(CONFIG_SECURITY_SELINUX),y)
-+ obj-$(CONFIG_SECURITY_SELINUX) += selinux/built-in.o
-+endif
- obj-$(CONFIG_SECURITY_CAPABILITIES) += capability.o
- obj-$(CONFIG_SECURITY_ROOTPLUG) += root_plug.o
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/avc.c 2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,1115 @@
-+/*
-+ * Implementation of the kernel access vector cache (AVC).
-+ *
-+ * Authors: Stephen Smalley, <sds@epoch.ncsc.mil>
-+ * James Morris <jmorris@redhat.com>
-+ *
-+ * Copyright (C) 2003 Red Hat, Inc., James Morris <jmorris@redhat.com>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2,
-+ * as published by the Free Software Foundation.
-+ */
-+#include <linux/types.h>
-+#include <linux/stddef.h>
-+#include <linux/kernel.h>
-+#include <linux/slab.h>
-+#include <linux/fs.h>
-+#include <linux/dcache.h>
-+#include <linux/skbuff.h>
-+#include <net/sock.h>
-+#include <linux/un.h>
-+#include <net/af_unix.h>
-+#include <linux/ip.h>
-+#include <linux/udp.h>
-+#include <linux/tcp.h>
-+#include "avc.h"
-+#include "avc_ss.h"
-+#include "class_to_string.h"
-+#include "common_perm_to_string.h"
-+#include "av_inherit.h"
-+#include "av_perm_to_string.h"
-+#include "objsec.h"
-+
-+#define AVC_CACHE_SLOTS 512
-+#define AVC_CACHE_MAXNODES 410
-+
-+struct avc_entry {
-+ u32 ssid;
-+ u32 tsid;
-+ u16 tclass;
-+ struct av_decision avd;
-+ int used; /* used recently */
-+};
-+
-+struct avc_node {
-+ struct avc_entry ae;
-+ struct avc_node *next;
-+};
-+
-+struct avc_cache {
-+ struct avc_node *slots[AVC_CACHE_SLOTS];
-+ u32 lru_hint; /* LRU hint for reclaim scan */
-+ u32 active_nodes;
-+ u32 latest_notif; /* latest revocation notification */
-+};
-+
-+struct avc_callback_node {
-+ int (*callback) (u32 event, u32 ssid, u32 tsid,
-+ u16 tclass, u32 perms,
-+ u32 *out_retained);
-+ u32 events;
-+ u32 ssid;
-+ u32 tsid;
-+ u16 tclass;
-+ u32 perms;
-+ struct avc_callback_node *next;
-+};
-+
-+static spinlock_t avc_lock = SPIN_LOCK_UNLOCKED;
-+static spinlock_t avc_log_lock = SPIN_LOCK_UNLOCKED;
-+static struct avc_node *avc_node_freelist = NULL;
-+static struct avc_cache avc_cache;
-+static char *avc_audit_buffer = NULL;
-+static unsigned avc_cache_stats[AVC_NSTATS];
-+static struct avc_callback_node *avc_callbacks = NULL;
-+static unsigned int avc_log_level = 4; /* default: KERN_WARNING */
-+static char avc_level_string[4] = "< >";
-+
-+static inline int avc_hash(u32 ssid, u32 tsid, u16 tclass)
-+{
-+ return (ssid ^ (tsid<<2) ^ (tclass<<4)) & (AVC_CACHE_SLOTS - 1);
-+}
-+
-+/**
-+ * avc_dump_av - Display an access vector in human-readable form.
-+ * @tclass: target security class
-+ * @av: access vector
-+ */
-+void avc_dump_av(u16 tclass, u32 av)
-+{
-+ char **common_pts = 0;
-+ u32 common_base = 0;
-+ int i, i2, perm;
-+
-+ if (av == 0) {
-+ printk(" null");
-+ return;
-+ }
-+
-+ for (i = 0; i < ARRAY_SIZE(av_inherit); i++) {
-+ if (av_inherit[i].tclass == tclass) {
-+ common_pts = av_inherit[i].common_pts;
-+ common_base = av_inherit[i].common_base;
-+ break;
-+ }
-+ }
-+
-+ printk(" {");
-+ i = 0;
-+ perm = 1;
-+ while (perm < common_base) {
-+ if (perm & av)
-+ printk(" %s", common_pts[i]);
-+ i++;
-+ perm <<= 1;
-+ }
-+
-+ while (i < sizeof(av) * 8) {
-+ if (perm & av) {
-+ for (i2 = 0; i2 < ARRAY_SIZE(av_perm_to_string); i2++) {
-+ if ((av_perm_to_string[i2].tclass == tclass) &&
-+ (av_perm_to_string[i2].value == perm))
-+ break;
-+ }
-+ if (i2 < ARRAY_SIZE(av_perm_to_string))
-+ printk(" %s", av_perm_to_string[i2].name);
-+ }
-+ i++;
-+ perm <<= 1;
-+ }
-+
-+ printk(" }");
-+}
-+
-+/**
-+ * avc_dump_query - Display a SID pair and a class in human-readable form.
-+ * @ssid: source security identifier
-+ * @tsid: target security identifier
-+ * @tclass: target security class
-+ */
-+void avc_dump_query(u32 ssid, u32 tsid, u16 tclass)
-+{
-+ int rc;
-+ char *scontext;
-+ u32 scontext_len;
-+
-+ rc = security_sid_to_context(ssid, &scontext, &scontext_len);
-+ if (rc)
-+ printk("ssid=%d", ssid);
-+ else {
-+ printk("scontext=%s", scontext);
-+ kfree(scontext);
-+ }
-+
-+ rc = security_sid_to_context(tsid, &scontext, &scontext_len);
-+ if (rc)
-+ printk(" tsid=%d", tsid);
-+ else {
-+ printk(" tcontext=%s", scontext);
-+ kfree(scontext);
-+ }
-+ printk(" tclass=%s", class_to_string[tclass]);
-+}
-+
-+/**
-+ * avc_init - Initialize the AVC.
-+ *
-+ * Initialize the access vector cache.
-+ */
-+void avc_init(void)
-+{
-+ struct avc_node *new;
-+ int i;
-+
-+ for (i = 0; i < AVC_NSTATS; i++)
-+ avc_cache_stats[i] = 0;
-+
-+ for (i = 0; i < AVC_CACHE_SLOTS; i++)
-+ avc_cache.slots[i] = 0;
-+ avc_cache.lru_hint = 0;
-+ avc_cache.active_nodes = 0;
-+ avc_cache.latest_notif = 0;
-+
-+ for (i = 0; i < AVC_CACHE_MAXNODES; i++) {
-+ new = kmalloc(sizeof(*new), GFP_ATOMIC);
-+ if (!new) {
-+ printk(KERN_WARNING "avc: only able to allocate "
-+ "%d entries\n", i);
-+ break;
-+ }
-+ memset(new, 0, sizeof(*new));
-+ new->next = avc_node_freelist;
-+ avc_node_freelist = new;
-+ }
-+
-+ avc_audit_buffer = (char *)__get_free_page(GFP_ATOMIC);
-+ if (!avc_audit_buffer)
-+ panic("AVC: unable to allocate audit buffer\n");
-+
-+ avc_level_string[1] = '0' + avc_log_level;
-+}
-+
-+#if 0
-+static void avc_hash_eval(char *tag)
-+{
-+ int i, chain_len, max_chain_len, slots_used;
-+ struct avc_node *node;
-+ unsigned long flags;
-+
-+ spin_lock_irqsave(&avc_lock,flags);
-+
-+ slots_used = 0;
-+ max_chain_len = 0;
-+ for (i = 0; i < AVC_CACHE_SLOTS; i++) {
-+ node = avc_cache.slots[i];
-+ if (node) {
-+ slots_used++;
-+ chain_len = 0;
-+ while (node) {
-+ chain_len++;
-+ node = node->next;
-+ }
-+ if (chain_len > max_chain_len)
-+ max_chain_len = chain_len;
-+ }
-+ }
-+
-+ spin_unlock_irqrestore(&avc_lock,flags);
-+
-+ printk(KERN_INFO "\n");
-+ printk(KERN_INFO "%s avc: %d entries and %d/%d buckets used, longest "
-+ "chain length %d\n", tag, avc_cache.active_nodes, slots_used,
-+ AVC_CACHE_SLOTS, max_chain_len);
-+}
-+#else
-+static inline void avc_hash_eval(char *tag)
-+{ }
-+#endif
-+
-+static inline struct avc_node *avc_reclaim_node(void)
-+{
-+ struct avc_node *prev, *cur;
-+ int hvalue, try;
-+
-+ hvalue = avc_cache.lru_hint;
-+ for (try = 0; try < 2; try++) {
-+ do {
-+ prev = NULL;
-+ cur = avc_cache.slots[hvalue];
-+ while (cur) {
-+ if (!cur->ae.used)
-+ goto found;
-+
-+ cur->ae.used = 0;
-+
-+ prev = cur;
-+ cur = cur->next;
-+ }
-+ hvalue = (hvalue + 1) & (AVC_CACHE_SLOTS - 1);
-+ } while (hvalue != avc_cache.lru_hint);
-+ }
-+
-+ panic("avc_reclaim_node");
-+
-+found:
-+ avc_cache.lru_hint = hvalue;
-+
-+ if (prev == NULL)
-+ avc_cache.slots[hvalue] = cur->next;
-+ else
-+ prev->next = cur->next;
-+
-+ return cur;
-+}
-+
-+static inline struct avc_node *avc_claim_node(u32 ssid,
-+ u32 tsid, u16 tclass)
-+{
-+ struct avc_node *new;
-+ int hvalue;
-+
-+ hvalue = avc_hash(ssid, tsid, tclass);
-+ if (avc_node_freelist) {
-+ new = avc_node_freelist;
-+ avc_node_freelist = avc_node_freelist->next;
-+ avc_cache.active_nodes++;
-+ } else {
-+ new = avc_reclaim_node();
-+ if (!new)
-+ goto out;
-+ }
-+
-+ new->ae.used = 1;
-+ new->ae.ssid = ssid;
-+ new->ae.tsid = tsid;
-+ new->ae.tclass = tclass;
-+ new->next = avc_cache.slots[hvalue];
-+ avc_cache.slots[hvalue] = new;
-+
-+out:
-+ return new;
-+}
-+
-+static inline struct avc_node *avc_search_node(u32 ssid, u32 tsid,
-+ u16 tclass, int *probes)
-+{
-+ struct avc_node *cur;
-+ int hvalue;
-+ int tprobes = 1;
-+
-+ hvalue = avc_hash(ssid, tsid, tclass);
-+ cur = avc_cache.slots[hvalue];
-+ while (cur != NULL &&
-+ (ssid != cur->ae.ssid ||
-+ tclass != cur->ae.tclass ||
-+ tsid != cur->ae.tsid)) {
-+ tprobes++;
-+ cur = cur->next;
-+ }
-+
-+ if (cur == NULL) {
-+ /* cache miss */
-+ goto out;
-+ }
-+
-+ /* cache hit */
-+ if (probes)
-+ *probes = tprobes;
-+
-+ cur->ae.used = 1;
-+
-+out:
-+ return cur;
-+}
-+
-+/**
-+ * avc_lookup - Look up an AVC entry.
-+ * @ssid: source security identifier
-+ * @tsid: target security identifier
-+ * @tclass: target security class
-+ * @requested: requested permissions, interpreted based on @tclass
-+ * @aeref: AVC entry reference
-+ *
-+ * Look up an AVC entry that is valid for the
-+ * @requested permissions between the SID pair
-+ * (@ssid, @tsid), interpreting the permissions
-+ * based on @tclass. If a valid AVC entry exists,
-+ * then this function updates @aeref to refer to the
-+ * entry and returns %0. Otherwise, this function
-+ * returns -%ENOENT.
-+ */
-+int avc_lookup(u32 ssid, u32 tsid, u16 tclass,
-+ u32 requested, struct avc_entry_ref *aeref)
-+{
-+ struct avc_node *node;
-+ int probes, rc = 0;
-+
-+ avc_cache_stats_incr(AVC_CAV_LOOKUPS);
-+ node = avc_search_node(ssid, tsid, tclass,&probes);
-+
-+ if (node && ((node->ae.avd.decided & requested) == requested)) {
-+ avc_cache_stats_incr(AVC_CAV_HITS);
-+ avc_cache_stats_add(AVC_CAV_PROBES,probes);
-+ aeref->ae = &node->ae;
-+ goto out;
-+ }
-+
-+ avc_cache_stats_incr(AVC_CAV_MISSES);
-+ rc = -ENOENT;
-+out:
-+ return rc;
-+}
-+
-+/**
-+ * avc_insert - Insert an AVC entry.
-+ * @ssid: source security identifier
-+ * @tsid: target security identifier
-+ * @tclass: target security class
-+ * @ae: AVC entry
-+ * @aeref: AVC entry reference
-+ *
-+ * Insert an AVC entry for the SID pair
-+ * (@ssid, @tsid) and class @tclass.
-+ * The access vectors and the sequence number are
-+ * normally provided by the security server in
-+ * response to a security_compute_av() call. If the
-+ * sequence number @ae->avd.seqno is not less than the latest
-+ * revocation notification, then the function copies
-+ * the access vectors into a cache entry, updates
-+ * @aeref to refer to the entry, and returns %0.
-+ * Otherwise, this function returns -%EAGAIN.
-+ */
-+int avc_insert(u32 ssid, u32 tsid, u16 tclass,
-+ struct avc_entry *ae, struct avc_entry_ref *aeref)
-+{
-+ struct avc_node *node;
-+ int rc = 0;
-+
-+ if (ae->avd.seqno < avc_cache.latest_notif) {
-+ printk(KERN_WARNING "avc: seqno %d < latest_notif %d\n",
-+ ae->avd.seqno, avc_cache.latest_notif);
-+ rc = -EAGAIN;
-+ goto out;
-+ }
-+
-+ node = avc_claim_node(ssid, tsid, tclass);
-+ if (!node) {
-+ rc = -ENOMEM;
-+ goto out;
-+ }
-+
-+ node->ae.avd.allowed = ae->avd.allowed;
-+ node->ae.avd.decided = ae->avd.decided;
-+ node->ae.avd.auditallow = ae->avd.auditallow;
-+ node->ae.avd.auditdeny = ae->avd.auditdeny;
-+ node->ae.avd.seqno = ae->avd.seqno;
-+ aeref->ae = &node->ae;
-+out:
-+ return rc;
-+}
-+
-+static inline void avc_print_ipv4_addr(u32 addr, u16 port, char *name1, char *name2)
-+{
-+ if (addr)
-+ printk(" %s=%d.%d.%d.%d", name1, NIPQUAD(addr));
-+ if (port)
-+ printk(" %s=%d", name2, ntohs(port));
-+}
-+
-+/*
-+ * Copied from net/core/utils.c:net_ratelimit and modified for
-+ * use by the AVC audit facility.
-+ */
-+#define AVC_MSG_COST 5*HZ
-+#define AVC_MSG_BURST 10*5*HZ
-+
-+/*
-+ * This enforces a rate limit: not more than one kernel message
-+ * every 5secs to make a denial-of-service attack impossible.
-+ */
-+static int avc_ratelimit(void)
-+{
-+ static spinlock_t ratelimit_lock = SPIN_LOCK_UNLOCKED;
-+ static unsigned long toks = 10*5*HZ;
-+ static unsigned long last_msg;
-+ static int missed, rc = 0;
-+ unsigned long flags;
-+ unsigned long now = jiffies;
-+
-+ spin_lock_irqsave(&ratelimit_lock, flags);
-+ toks += now - last_msg;
-+ last_msg = now;
-+ if (toks > AVC_MSG_BURST)
-+ toks = AVC_MSG_BURST;
-+ if (toks >= AVC_MSG_COST) {
-+ int lost = missed;
-+ missed = 0;
-+ toks -= AVC_MSG_COST;
-+ spin_unlock_irqrestore(&ratelimit_lock, flags);
-+ if (lost)
-+ printk(KERN_WARNING "AVC: %d messages suppressed.\n",
-+ lost);
-+ rc = 1;
-+ goto out;
-+ }
-+ missed++;
-+ spin_unlock_irqrestore(&ratelimit_lock, flags);
-+out:
-+ return rc;
-+}
-+
-+static inline int check_avc_ratelimit(void)
-+{
-+ if (selinux_enforcing)
-+ return avc_ratelimit();
-+ else {
-+ /* If permissive, then never suppress messages. */
-+ return 1;
-+ }
-+}
-+
-+/**
-+ * avc_audit - Audit the granting or denial of permissions.
-+ * @ssid: source security identifier
-+ * @tsid: target security identifier
-+ * @tclass: target security class
-+ * @requested: requested permissions
-+ * @avd: access vector decisions
-+ * @result: result from avc_has_perm_noaudit
-+ * @a: auxiliary audit data
-+ *
-+ * Audit the granting or denial of permissions in accordance
-+ * with the policy. This function is typically called by
-+ * avc_has_perm() after a permission check, but can also be
-+ * called directly by callers who use avc_has_perm_noaudit()
-+ * in order to separate the permission check from the auditing.
-+ * For example, this separation is useful when the permission check must
-+ * be performed under a lock, to allow the lock to be released
-+ * before calling the auditing code.
-+ */
-+void avc_audit(u32 ssid, u32 tsid,
-+ u16 tclass, u32 requested,
-+ struct av_decision *avd, int result, struct avc_audit_data *a)
-+{
-+ struct task_struct *tsk = current;
-+ struct inode *inode = NULL;
-+ char *p;
-+ u32 denied, audited;
-+
-+ denied = requested & ~avd->allowed;
-+ if (denied) {
-+ audited = denied;
-+ if (!(audited & avd->auditdeny))
-+ return;
-+ } else if (result) {
-+ audited = denied = requested;
-+ } else {
-+ audited = requested;
-+ if (!(audited & avd->auditallow))
-+ return;
-+ }
-+
-+ if (!check_avc_ratelimit())
-+ return;
-+
-+ /* prevent overlapping printks */
-+ spin_lock_irq(&avc_log_lock);
-+
-+ printk("%s\n", avc_level_string);
-+ printk("%savc: %s ", avc_level_string, denied ? "denied" : "granted");
-+ avc_dump_av(tclass,audited);
-+ printk(" for ");
-+ if (a && a->tsk)
-+ tsk = a->tsk;
-+ if (tsk && tsk->pid) {
-+ struct mm_struct *mm;
-+ struct vm_area_struct *vma;
-+ printk(" pid=%d", tsk->pid);
-+ if (tsk == current)
-+ mm = current->mm;
-+ else
-+ mm = get_task_mm(tsk);
-+ if (mm) {
-+ if (down_read_trylock(&mm->mmap_sem)) {
-+ vma = mm->mmap;
-+ while (vma) {
-+ if ((vma->vm_flags & VM_EXECUTABLE) &&
-+ vma->vm_file) {
-+ p = d_path(vma->vm_file->f_dentry,
-+ vma->vm_file->f_vfsmnt,
-+ avc_audit_buffer,
-+ PAGE_SIZE);
-+ printk(" exe=%s", p);
-+ break;
-+ }
-+ vma = vma->vm_next;
-+ }
-+ up_read(&mm->mmap_sem);
-+ }
-+ if (tsk != current)
-+ mmput(mm);
-+ } else {
-+ printk(" comm=%s", tsk->comm);
-+ }
-+ }
-+ if (a) {
-+ switch (a->type) {
-+ case AVC_AUDIT_DATA_IPC:
-+ printk(" key=%d", a->u.ipc_id);
-+ break;
-+ case AVC_AUDIT_DATA_CAP:
-+ printk(" capability=%d", a->u.cap);
-+ break;
-+ case AVC_AUDIT_DATA_FS:
-+ if (a->u.fs.dentry) {
-+ if (a->u.fs.mnt) {
-+ p = d_path(a->u.fs.dentry,
-+ a->u.fs.mnt,
-+ avc_audit_buffer,
-+ PAGE_SIZE);
-+ if (p)
-+ printk(" path=%s", p);
-+ }
-+ inode = a->u.fs.dentry->d_inode;
-+ } else if (a->u.fs.inode) {
-+ inode = a->u.fs.inode;
-+ }
-+ if (inode)
-+ printk(" dev=%s ino=%ld",
-+ inode->i_sb->s_id, inode->i_ino);
-+ break;
-+ case AVC_AUDIT_DATA_NET:
-+ if (a->u.net.sk) {
-+ struct sock *sk = a->u.net.sk;
-+ struct unix_sock *u;
-+ struct inet_opt *inet;
-+
-+ switch (sk->sk_family) {
-+ case AF_INET:
-+ inet = inet_sk(sk);
-+ avc_print_ipv4_addr(inet->rcv_saddr,
-+ inet->sport,
-+ "laddr", "lport");
-+ avc_print_ipv4_addr(inet->daddr,
-+ inet->dport,
-+ "faddr", "fport");
-+ break;
-+ case AF_UNIX:
-+ u = unix_sk(sk);
-+ if (u->dentry) {
-+ p = d_path(u->dentry,
-+ u->mnt,
-+ avc_audit_buffer,
-+ PAGE_SIZE);
-+ printk(" path=%s", p);
-+ } else if (u->addr) {
-+ p = avc_audit_buffer;
-+ memcpy(p,
-+ u->addr->name->sun_path,
-+ u->addr->len-sizeof(short));
-+ if (*p == 0) {
-+ *p = '@';
-+ p += u->addr->len-sizeof(short);
-+ *p = 0;
-+ }
-+ printk(" path=%s",
-+ avc_audit_buffer);
-+ }
-+ break;
-+ }
-+ }
-+ if (a->u.net.daddr) {
-+ printk(" daddr=%d.%d.%d.%d",
-+ NIPQUAD(a->u.net.daddr));
-+ if (a->u.net.port)
-+ printk(" dest=%d", a->u.net.port);
-+ } else if (a->u.net.port)
-+ printk(" port=%d", a->u.net.port);
-+ if (a->u.net.skb) {
-+ struct sk_buff *skb = a->u.net.skb;
-+
-+ if ((skb->protocol == htons(ETH_P_IP)) &&
-+ skb->nh.iph) {
-+ u16 source = 0, dest = 0;
-+ u8 protocol = skb->nh.iph->protocol;
-+
-+
-+ if (protocol == IPPROTO_TCP &&
-+ skb->h.th) {
-+ source = skb->h.th->source;
-+ dest = skb->h.th->dest;
-+ }
-+ if (protocol == IPPROTO_UDP &&
-+ skb->h.uh) {
-+ source = skb->h.uh->source;
-+ dest = skb->h.uh->dest;
-+ }
-+
-+ avc_print_ipv4_addr(skb->nh.iph->saddr,
-+ source,
-+ "saddr", "source");
-+ avc_print_ipv4_addr(skb->nh.iph->daddr,
-+ dest,
-+ "daddr", "dest");
-+ }
-+ }
-+ if (a->u.net.netif)
-+ printk(" netif=%s", a->u.net.netif);
-+ break;
-+ }
-+ }
-+ printk(" ");
-+ avc_dump_query(ssid, tsid, tclass);
-+ printk("\n");
-+
-+ spin_unlock_irq(&avc_log_lock);
-+}
-+
-+/**
-+ * avc_add_callback - Register a callback for security events.
-+ * @callback: callback function
-+ * @events: security events
-+ * @ssid: source security identifier or %SECSID_WILD
-+ * @tsid: target security identifier or %SECSID_WILD
-+ * @tclass: target security class
-+ * @perms: permissions
-+ *
-+ * Register a callback function for events in the set @events
-+ * related to the SID pair (@ssid, @tsid) and
-+ * and the permissions @perms, interpreting
-+ * @perms based on @tclass. Returns %0 on success or
-+ * -%ENOMEM if insufficient memory exists to add the callback.
-+ */
-+int avc_add_callback(int (*callback)(u32 event, u32 ssid, u32 tsid,
-+ u16 tclass, u32 perms,
-+ u32 *out_retained),
-+ u32 events, u32 ssid, u32 tsid,
-+ u16 tclass, u32 perms)
-+{
-+ struct avc_callback_node *c;
-+ int rc = 0;
-+
-+ c = kmalloc(sizeof(*c), GFP_ATOMIC);
-+ if (!c) {
-+ rc = -ENOMEM;
-+ goto out;
-+ }
-+
-+ c->callback = callback;
-+ c->events = events;
-+ c->ssid = ssid;
-+ c->tsid = tsid;
-+ c->perms = perms;
-+ c->next = avc_callbacks;
-+ avc_callbacks = c;
-+out:
-+ return rc;
-+}
-+
-+static inline int avc_sidcmp(u32 x, u32 y)
-+{
-+ return (x == y || x == SECSID_WILD || y == SECSID_WILD);
-+}
-+
-+static inline void avc_update_node(u32 event, struct avc_node *node, u32 perms)
-+{
-+ switch (event) {
-+ case AVC_CALLBACK_GRANT:
-+ node->ae.avd.allowed |= perms;
-+ break;
-+ case AVC_CALLBACK_TRY_REVOKE:
-+ case AVC_CALLBACK_REVOKE:
-+ node->ae.avd.allowed &= ~perms;
-+ break;
-+ case AVC_CALLBACK_AUDITALLOW_ENABLE:
-+ node->ae.avd.auditallow |= perms;
-+ break;
-+ case AVC_CALLBACK_AUDITALLOW_DISABLE:
-+ node->ae.avd.auditallow &= ~perms;
-+ break;
-+ case AVC_CALLBACK_AUDITDENY_ENABLE:
-+ node->ae.avd.auditdeny |= perms;
-+ break;
-+ case AVC_CALLBACK_AUDITDENY_DISABLE:
-+ node->ae.avd.auditdeny &= ~perms;
-+ break;
-+ }
-+}
-+
-+static int avc_update_cache(u32 event, u32 ssid, u32 tsid,
-+ u16 tclass, u32 perms)
-+{
-+ struct avc_node *node;
-+ int i;
-+ unsigned long flags;
-+
-+ spin_lock_irqsave(&avc_lock,flags);
-+
-+ if (ssid == SECSID_WILD || tsid == SECSID_WILD) {
-+ /* apply to all matching nodes */
-+ for (i = 0; i < AVC_CACHE_SLOTS; i++) {
-+ for (node = avc_cache.slots[i]; node;
-+ node = node->next) {
-+ if (avc_sidcmp(ssid, node->ae.ssid) &&
-+ avc_sidcmp(tsid, node->ae.tsid) &&
-+ tclass == node->ae.tclass) {
-+ avc_update_node(event,node,perms);
-+ }
-+ }
-+ }
-+ } else {
-+ /* apply to one node */
-+ node = avc_search_node(ssid, tsid, tclass, 0);
-+ if (node) {
-+ avc_update_node(event,node,perms);
-+ }
-+ }
-+
-+ spin_unlock_irqrestore(&avc_lock,flags);
-+
-+ return 0;
-+}
-+
-+static int avc_control(u32 event, u32 ssid, u32 tsid,
-+ u16 tclass, u32 perms,
-+ u32 seqno, u32 *out_retained)
-+{
-+ struct avc_callback_node *c;
-+ u32 tretained = 0, cretained = 0;
-+ int rc = 0;
-+ unsigned long flags;
-+
-+ /*
-+ * try_revoke only removes permissions from the cache
-+ * state if they are not retained by the object manager.
-+ * Hence, try_revoke must wait until after the callbacks have
-+ * been invoked to update the cache state.
-+ */
-+ if (event != AVC_CALLBACK_TRY_REVOKE)
-+ avc_update_cache(event,ssid,tsid,tclass,perms);
-+
-+ for (c = avc_callbacks; c; c = c->next)
-+ {
-+ if ((c->events & event) &&
-+ avc_sidcmp(c->ssid, ssid) &&
-+ avc_sidcmp(c->tsid, tsid) &&
-+ c->tclass == tclass &&
-+ (c->perms & perms)) {
-+ cretained = 0;
-+ rc = c->callback(event, ssid, tsid, tclass,
-+ (c->perms & perms),
-+ &cretained);
-+ if (rc)
-+ goto out;
-+ tretained |= cretained;
-+ }
-+ }
-+
-+ if (event == AVC_CALLBACK_TRY_REVOKE) {
-+ /* revoke any unretained permissions */
-+ perms &= ~tretained;
-+ avc_update_cache(event,ssid,tsid,tclass,perms);
-+ *out_retained = tretained;
-+ }
-+
-+ spin_lock_irqsave(&avc_lock,flags);
-+ if (seqno > avc_cache.latest_notif)
-+ avc_cache.latest_notif = seqno;
-+ spin_unlock_irqrestore(&avc_lock,flags);
-+
-+out:
-+ return rc;
-+}
-+
-+/**
-+ * avc_ss_grant - Grant previously denied permissions.
-+ * @ssid: source security identifier or %SECSID_WILD
-+ * @tsid: target security identifier or %SECSID_WILD
-+ * @tclass: target security class
-+ * @perms: permissions to grant
-+ * @seqno: policy sequence number
-+ */
-+int avc_ss_grant(u32 ssid, u32 tsid, u16 tclass,
-+ u32 perms, u32 seqno)
-+{
-+ return avc_control(AVC_CALLBACK_GRANT,
-+ ssid, tsid, tclass, perms, seqno, 0);
-+}
-+
-+/**
-+ * avc_ss_try_revoke - Try to revoke previously granted permissions.
-+ * @ssid: source security identifier or %SECSID_WILD
-+ * @tsid: target security identifier or %SECSID_WILD
-+ * @tclass: target security class
-+ * @perms: permissions to grant
-+ * @seqno: policy sequence number
-+ * @out_retained: subset of @perms that are retained
-+ *
-+ * Try to revoke previously granted permissions, but
-+ * only if they are not retained as migrated permissions.
-+ * Return the subset of permissions that are retained via @out_retained.
-+ */
-+int avc_ss_try_revoke(u32 ssid, u32 tsid, u16 tclass,
-+ u32 perms, u32 seqno, u32 *out_retained)
-+{
-+ return avc_control(AVC_CALLBACK_TRY_REVOKE,
-+ ssid, tsid, tclass, perms, seqno, out_retained);
-+}
-+
-+/**
-+ * avc_ss_revoke - Revoke previously granted permissions.
-+ * @ssid: source security identifier or %SECSID_WILD
-+ * @tsid: target security identifier or %SECSID_WILD
-+ * @tclass: target security class
-+ * @perms: permissions to grant
-+ * @seqno: policy sequence number
-+ *
-+ * Revoke previously granted permissions, even if
-+ * they are retained as migrated permissions.
-+ */
-+int avc_ss_revoke(u32 ssid, u32 tsid, u16 tclass,
-+ u32 perms, u32 seqno)
-+{
-+ return avc_control(AVC_CALLBACK_REVOKE,
-+ ssid, tsid, tclass, perms, seqno, 0);
-+}
-+
-+/**
-+ * avc_ss_reset - Flush the cache and revalidate migrated permissions.
-+ * @seqno: policy sequence number
-+ */
-+int avc_ss_reset(u32 seqno)
-+{
-+ struct avc_callback_node *c;
-+ int i, rc = 0;
-+ struct avc_node *node, *tmp;
-+ unsigned long flags;
-+
-+ avc_hash_eval("reset");
-+
-+ spin_lock_irqsave(&avc_lock,flags);
-+
-+ for (i = 0; i < AVC_CACHE_SLOTS; i++) {
-+ node = avc_cache.slots[i];
-+ while (node) {
-+ tmp = node;
-+ node = node->next;
-+ tmp->ae.ssid = tmp->ae.tsid = SECSID_NULL;
-+ tmp->ae.tclass = SECCLASS_NULL;
-+ tmp->ae.avd.allowed = tmp->ae.avd.decided = 0;
-+ tmp->ae.avd.auditallow = tmp->ae.avd.auditdeny = 0;
-+ tmp->ae.used = 0;
-+ tmp->next = avc_node_freelist;
-+ avc_node_freelist = tmp;
-+ avc_cache.active_nodes--;
-+ }
-+ avc_cache.slots[i] = 0;
-+ }
-+ avc_cache.lru_hint = 0;
-+
-+ spin_unlock_irqrestore(&avc_lock,flags);
-+
-+ for (i = 0; i < AVC_NSTATS; i++)
-+ avc_cache_stats[i] = 0;
-+
-+ for (c = avc_callbacks; c; c = c->next) {
-+ if (c->events & AVC_CALLBACK_RESET) {
-+ rc = c->callback(AVC_CALLBACK_RESET,
-+ 0, 0, 0, 0, 0);
-+ if (rc)
-+ goto out;
-+ }
-+ }
-+
-+ spin_lock_irqsave(&avc_lock,flags);
-+ if (seqno > avc_cache.latest_notif)
-+ avc_cache.latest_notif = seqno;
-+ spin_unlock_irqrestore(&avc_lock,flags);
-+out:
-+ return rc;
-+}
-+
-+/**
-+ * avc_ss_set_auditallow - Enable or disable auditing of granted permissions.
-+ * @ssid: source security identifier or %SECSID_WILD
-+ * @tsid: target security identifier or %SECSID_WILD
-+ * @tclass: target security class
-+ * @perms: permissions to grant
-+ * @seqno: policy sequence number
-+ * @enable: enable flag.
-+ */
-+int avc_ss_set_auditallow(u32 ssid, u32 tsid, u16 tclass,
-+ u32 perms, u32 seqno, u32 enable)
-+{
-+ if (enable)
-+ return avc_control(AVC_CALLBACK_AUDITALLOW_ENABLE,
-+ ssid, tsid, tclass, perms, seqno, 0);
-+ else
-+ return avc_control(AVC_CALLBACK_AUDITALLOW_DISABLE,
-+ ssid, tsid, tclass, perms, seqno, 0);
-+}
-+
-+/**
-+ * avc_ss_set_auditdeny - Enable or disable auditing of denied permissions.
-+ * @ssid: source security identifier or %SECSID_WILD
-+ * @tsid: target security identifier or %SECSID_WILD
-+ * @tclass: target security class
-+ * @perms: permissions to grant
-+ * @seqno: policy sequence number
-+ * @enable: enable flag.
-+ */
-+int avc_ss_set_auditdeny(u32 ssid, u32 tsid, u16 tclass,
-+ u32 perms, u32 seqno, u32 enable)
-+{
-+ if (enable)
-+ return avc_control(AVC_CALLBACK_AUDITDENY_ENABLE,
-+ ssid, tsid, tclass, perms, seqno, 0);
-+ else
-+ return avc_control(AVC_CALLBACK_AUDITDENY_DISABLE,
-+ ssid, tsid, tclass, perms, seqno, 0);
-+}
-+
-+/**
-+ * avc_has_perm_noaudit - Check permissions but perform no auditing.
-+ * @ssid: source security identifier
-+ * @tsid: target security identifier
-+ * @tclass: target security class
-+ * @requested: requested permissions, interpreted based on @tclass
-+ * @aeref: AVC entry reference
-+ * @avd: access vector decisions
-+ *
-+ * Check the AVC to determine whether the @requested permissions are granted
-+ * for the SID pair (@ssid, @tsid), interpreting the permissions
-+ * based on @tclass, and call the security server on a cache miss to obtain
-+ * a new decision and add it to the cache. Update @aeref to refer to an AVC
-+ * entry with the resulting decisions, and return a copy of the decisions
-+ * in @avd. Return %0 if all @requested permissions are granted,
-+ * -%EACCES if any permissions are denied, or another -errno upon
-+ * other errors. This function is typically called by avc_has_perm(),
-+ * but may also be called directly to separate permission checking from
-+ * auditing, e.g. in cases where a lock must be held for the check but
-+ * should be released for the auditing.
-+ */
-+int avc_has_perm_noaudit(u32 ssid, u32 tsid,
-+ u16 tclass, u32 requested,
-+ struct avc_entry_ref *aeref, struct av_decision *avd)
-+{
-+ struct avc_entry *ae;
-+ int rc = 0;
-+ unsigned long flags;
-+ struct avc_entry entry;
-+ u32 denied;
-+ struct avc_entry_ref ref;
-+
-+ if (!aeref) {
-+ avc_entry_ref_init(&ref);
-+ aeref = &ref;
-+ }
-+
-+ spin_lock_irqsave(&avc_lock, flags);
-+ avc_cache_stats_incr(AVC_ENTRY_LOOKUPS);
-+ ae = aeref->ae;
-+ if (ae) {
-+ if (ae->ssid == ssid &&
-+ ae->tsid == tsid &&
-+ ae->tclass == tclass &&
-+ ((ae->avd.decided & requested) == requested)) {
-+ avc_cache_stats_incr(AVC_ENTRY_HITS);
-+ ae->used = 1;
-+ } else {
-+ avc_cache_stats_incr(AVC_ENTRY_DISCARDS);
-+ ae = 0;
-+ }
-+ }
-+
-+ if (!ae) {
-+ avc_cache_stats_incr(AVC_ENTRY_MISSES);
-+ rc = avc_lookup(ssid, tsid, tclass, requested, aeref);
-+ if (rc) {
-+ spin_unlock_irqrestore(&avc_lock,flags);
-+ rc = security_compute_av(ssid,tsid,tclass,requested,&entry.avd);
-+ if (rc)
-+ goto out;
-+ spin_lock_irqsave(&avc_lock, flags);
-+ rc = avc_insert(ssid,tsid,tclass,&entry,aeref);
-+ if (rc) {
-+ spin_unlock_irqrestore(&avc_lock,flags);
-+ goto out;
-+ }
-+ }
-+ ae = aeref->ae;
-+ }
-+
-+ if (avd)
-+ memcpy(avd, &ae->avd, sizeof(*avd));
-+
-+ denied = requested & ~(ae->avd.allowed);
-+
-+ if (!requested || denied) {
-+ if (selinux_enforcing) {
-+ spin_unlock_irqrestore(&avc_lock,flags);
-+ rc = -EACCES;
-+ goto out;
-+ } else {
-+ ae->avd.allowed |= requested;
-+ spin_unlock_irqrestore(&avc_lock,flags);
-+ goto out;
-+ }
-+ }
-+
-+ spin_unlock_irqrestore(&avc_lock,flags);
-+out:
-+ return rc;
-+}
-+
-+/**
-+ * avc_has_perm - Check permissions and perform any appropriate auditing.
-+ * @ssid: source security identifier
-+ * @tsid: target security identifier
-+ * @tclass: target security class
-+ * @requested: requested permissions, interpreted based on @tclass
-+ * @aeref: AVC entry reference
-+ * @auditdata: auxiliary audit data
-+ *
-+ * Check the AVC to determine whether the @requested permissions are granted
-+ * for the SID pair (@ssid, @tsid), interpreting the permissions
-+ * based on @tclass, and call the security server on a cache miss to obtain
-+ * a new decision and add it to the cache. Update @aeref to refer to an AVC
-+ * entry with the resulting decisions. Audit the granting or denial of
-+ * permissions in accordance with the policy. Return %0 if all @requested
-+ * permissions are granted, -%EACCES if any permissions are denied, or
-+ * another -errno upon other errors.
-+ */
-+int avc_has_perm(u32 ssid, u32 tsid, u16 tclass,
-+ u32 requested, struct avc_entry_ref *aeref,
-+ struct avc_audit_data *auditdata)
-+{
-+ struct av_decision avd;
-+ int rc;
-+
-+ rc = avc_has_perm_noaudit(ssid, tsid, tclass, requested, aeref, &avd);
-+ avc_audit(ssid, tsid, tclass, requested, &avd, rc, auditdata);
-+ return rc;
-+}
-+
-+static int __init avc_log_level_setup(char *str)
-+{
-+ avc_log_level = simple_strtol(str, NULL, 0);
-+ if (avc_log_level > 7)
-+ avc_log_level = 7;
-+ return 1;
-+}
-+
-+__setup("avc_log_level=", avc_log_level_setup);
-+
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/hooks.c 2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,3405 @@
-+/*
-+ * NSA Security-Enhanced Linux (SELinux) security module
-+ *
-+ * This file contains the SELinux hook function implementations.
-+ *
-+ * Authors: Stephen Smalley, <sds@epoch.ncsc.mil>
-+ * Chris Vance, <cvance@nai.com>
-+ * Wayne Salamon, <wsalamon@nai.com>
-+ * James Morris <jmorris@redhat.com>
-+ *
-+ * Copyright (C) 2001,2002 Networks Associates Technology, Inc.
-+ * Copyright (C) 2003 Red Hat, Inc., James Morris <jmorris@redhat.com>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2,
-+ * as published by the Free Software Foundation.
-+ */
-+
-+#define XATTR_SECURITY_PREFIX "security."
-+#define XATTR_SELINUX_SUFFIX "selinux"
-+#define XATTR_NAME_SELINUX XATTR_SECURITY_PREFIX XATTR_SELINUX_SUFFIX
-+
-+#include <linux/config.h>
-+#include <linux/module.h>
-+#include <linux/init.h>
-+#include <linux/kernel.h>
-+#include <linux/ptrace.h>
-+#include <linux/errno.h>
-+#include <linux/sched.h>
-+#include <linux/security.h>
-+#include <linux/xattr.h>
-+#include <linux/capability.h>
-+#include <linux/unistd.h>
-+#include <linux/mm.h>
-+#include <linux/mman.h>
-+#include <linux/slab.h>
-+#include <linux/pagemap.h>
-+#include <linux/swap.h>
-+#include <linux/smp_lock.h>
-+#include <linux/spinlock.h>
-+#include <linux/file.h>
-+#include <linux/namei.h>
-+#include <linux/mount.h>
-+#include <linux/ext2_fs.h>
-+#include <linux/proc_fs.h>
-+#include <linux/kd.h>
-+#include <net/icmp.h>
-+#include <net/ip.h> /* for sysctl_local_port_range[] */
-+#include <net/tcp.h> /* struct or_callable used in sock_rcv_skb */
-+#include <asm/uaccess.h>
-+#include <asm/semaphore.h>
-+#include <asm/ioctls.h>
-+#include <linux/bitops.h>
-+#include <linux/interrupt.h>
-+#include <linux/netdevice.h> /* for network interface checks */
-+#include <linux/netlink.h>
-+#include <linux/tcp.h>
-+#include <linux/quota.h>
-+#include <linux/un.h> /* for Unix socket types */
-+#include <net/af_unix.h> /* for Unix socket types */
-+
-+#include "avc.h"
-+#include "objsec.h"
-+
-+#ifdef CONFIG_SECURITY_SELINUX_DEVELOP
-+int selinux_enforcing = 0;
-+
-+static int __init enforcing_setup(char *str)
-+{
-+ selinux_enforcing = simple_strtol(str,NULL,0);
-+ return 1;
-+}
-+__setup("enforcing=", enforcing_setup);
-+#endif
-+
-+/* Original (dummy) security module. */
-+static struct security_operations *original_ops = NULL;
-+
-+/* Minimal support for a secondary security module,
-+ just to allow the use of the dummy or capability modules.
-+ The owlsm module can alternatively be used as a secondary
-+ module as long as CONFIG_OWLSM_FD is not enabled. */
-+static struct security_operations *secondary_ops = NULL;
-+
-+/* Lists of inode and superblock security structures initialized
-+ before the policy was loaded. */
-+static LIST_HEAD(inode_security_head);
-+static spinlock_t inode_security_lock = SPIN_LOCK_UNLOCKED;
-+
-+static LIST_HEAD(superblock_security_head);
-+static spinlock_t sb_security_lock = SPIN_LOCK_UNLOCKED;
-+
-+/* Allocate and free functions for each kind of security blob. */
-+
-+static int task_alloc_security(struct task_struct *task)
-+{
-+ struct task_security_struct *tsec;
-+
-+ tsec = kmalloc(sizeof(struct task_security_struct), GFP_KERNEL);
-+ if (!tsec)
-+ return -ENOMEM;
-+
-+ memset(tsec, 0, sizeof(struct task_security_struct));
-+ tsec->magic = SELINUX_MAGIC;
-+ tsec->task = task;
-+ tsec->osid = tsec->sid = SECINITSID_UNLABELED;
-+ task->security = tsec;
-+
-+ return 0;
-+}
-+
-+static void task_free_security(struct task_struct *task)
-+{
-+ struct task_security_struct *tsec = task->security;
-+
-+ if (!tsec || tsec->magic != SELINUX_MAGIC)
-+ return;
-+
-+ task->security = NULL;
-+ kfree(tsec);
-+}
-+
-+static int inode_alloc_security(struct inode *inode)
-+{
-+ struct task_security_struct *tsec = current->security;
-+ struct inode_security_struct *isec;
-+
-+ isec = kmalloc(sizeof(struct inode_security_struct), GFP_KERNEL);
-+ if (!isec)
-+ return -ENOMEM;
-+
-+ memset(isec, 0, sizeof(struct inode_security_struct));
-+ init_MUTEX(&isec->sem);
-+ INIT_LIST_HEAD(&isec->list);
-+ isec->magic = SELINUX_MAGIC;
-+ isec->inode = inode;
-+ isec->sid = SECINITSID_UNLABELED;
-+ isec->sclass = SECCLASS_FILE;
-+ if (tsec && tsec->magic == SELINUX_MAGIC)
-+ isec->task_sid = tsec->sid;
-+ else
-+ isec->task_sid = SECINITSID_UNLABELED;
-+ inode->i_security = isec;
-+
-+ return 0;
-+}
-+
-+static void inode_free_security(struct inode *inode)
-+{
-+ struct inode_security_struct *isec = inode->i_security;
-+
-+ if (!isec || isec->magic != SELINUX_MAGIC)
-+ return;
-+
-+ spin_lock(&inode_security_lock);
-+ if (!list_empty(&isec->list))
-+ list_del_init(&isec->list);
-+ spin_unlock(&inode_security_lock);
-+
-+ inode->i_security = NULL;
-+ kfree(isec);
-+}
-+
-+static int file_alloc_security(struct file *file)
-+{
-+ struct task_security_struct *tsec = current->security;
-+ struct file_security_struct *fsec;
-+
-+ fsec = kmalloc(sizeof(struct file_security_struct), GFP_ATOMIC);
-+ if (!fsec)
-+ return -ENOMEM;
-+
-+ memset(fsec, 0, sizeof(struct file_security_struct));
-+ fsec->magic = SELINUX_MAGIC;
-+ fsec->file = file;
-+ if (tsec && tsec->magic == SELINUX_MAGIC) {
-+ fsec->sid = tsec->sid;
-+ fsec->fown_sid = tsec->sid;
-+ } else {
-+ fsec->sid = SECINITSID_UNLABELED;
-+ fsec->fown_sid = SECINITSID_UNLABELED;
-+ }
-+ file->f_security = fsec;
-+
-+ return 0;
-+}
-+
-+static void file_free_security(struct file *file)
-+{
-+ struct file_security_struct *fsec = file->f_security;
-+
-+ if (!fsec || fsec->magic != SELINUX_MAGIC)
-+ return;
-+
-+ file->f_security = NULL;
-+ kfree(fsec);
-+}
-+
-+static int superblock_alloc_security(struct super_block *sb)
-+{
-+ struct superblock_security_struct *sbsec;
-+
-+ sbsec = kmalloc(sizeof(struct superblock_security_struct), GFP_KERNEL);
-+ if (!sbsec)
-+ return -ENOMEM;
-+
-+ memset(sbsec, 0, sizeof(struct superblock_security_struct));
-+ init_MUTEX(&sbsec->sem);
-+ INIT_LIST_HEAD(&sbsec->list);
-+ sbsec->magic = SELINUX_MAGIC;
-+ sbsec->sb = sb;
-+ sbsec->sid = SECINITSID_UNLABELED;
-+ sb->s_security = sbsec;
-+
-+ return 0;
-+}
-+
-+static void superblock_free_security(struct super_block *sb)
-+{
-+ struct superblock_security_struct *sbsec = sb->s_security;
-+
-+ if (!sbsec || sbsec->magic != SELINUX_MAGIC)
-+ return;
-+
-+ spin_lock(&sb_security_lock);
-+ if (!list_empty(&sbsec->list))
-+ list_del_init(&sbsec->list);
-+ spin_unlock(&sb_security_lock);
-+
-+ sb->s_security = NULL;
-+ kfree(sbsec);
-+}
-+
-+/* The security server must be initialized before
-+ any labeling or access decisions can be provided. */
-+extern int ss_initialized;
-+
-+/* The file system's label must be initialized prior to use. */
-+
-+static char *labeling_behaviors[5] = {
-+ "uses xattr",
-+ "uses transition SIDs",
-+ "uses task SIDs",
-+ "uses genfs_contexts",
-+ "not configured for labeling"
-+};
-+
-+static int inode_doinit_with_dentry(struct inode *inode, struct dentry *opt_dentry);
-+
-+static inline int inode_doinit(struct inode *inode)
-+{
-+ return inode_doinit_with_dentry(inode, NULL);
-+}
-+
-+static int superblock_doinit(struct super_block *sb)
-+{
-+ struct superblock_security_struct *sbsec = sb->s_security;
-+ struct dentry *root = sb->s_root;
-+ struct inode *inode = root->d_inode;
-+ int rc = 0;
-+
-+ down(&sbsec->sem);
-+ if (sbsec->initialized)
-+ goto out;
-+
-+ if (!ss_initialized) {
-+ /* Defer initialization until selinux_complete_init,
-+ after the initial policy is loaded and the security
-+ server is ready to handle calls. */
-+ spin_lock(&sb_security_lock);
-+ if (list_empty(&sbsec->list))
-+ list_add(&sbsec->list, &superblock_security_head);
-+ spin_unlock(&sb_security_lock);
-+ goto out;
-+ }
-+
-+ /* Determine the labeling behavior to use for this filesystem type. */
-+ rc = security_fs_use(sb->s_type->name, &sbsec->behavior, &sbsec->sid);
-+ if (rc) {
-+ printk(KERN_WARNING "%s: security_fs_use(%s) returned %d\n",
-+ __FUNCTION__, sb->s_type->name, rc);
-+ goto out;
-+ }
-+
-+ if (sbsec->behavior == SECURITY_FS_USE_XATTR) {
-+ /* Make sure that the xattr handler exists and that no
-+ error other than -ENODATA is returned by getxattr on
-+ the root directory. -ENODATA is ok, as this may be
-+ the first boot of the SELinux kernel before we have
-+ assigned xattr values to the filesystem. */
-+ if (!inode->i_op->getxattr) {
-+ printk(KERN_WARNING "SELinux: (dev %s, type %s) has no "
-+ "xattr support\n", sb->s_id, sb->s_type->name);
-+ rc = -EOPNOTSUPP;
-+ goto out;
-+ }
-+ rc = inode->i_op->getxattr(root, XATTR_NAME_SELINUX, NULL, 0);
-+ if (rc < 0 && rc != -ENODATA) {
-+ if (rc == -EOPNOTSUPP)
-+ printk(KERN_WARNING "SELinux: (dev %s, type "
-+ "%s) has no security xattr handler\n",
-+ sb->s_id, sb->s_type->name);
-+ else
-+ printk(KERN_WARNING "SELinux: (dev %s, type "
-+ "%s) getxattr errno %d\n", sb->s_id,
-+ sb->s_type->name, -rc);
-+ goto out;
-+ }
-+ }
-+
-+ if (strcmp(sb->s_type->name, "proc") == 0)
-+ sbsec->proc = 1;
-+
-+ sbsec->initialized = 1;
-+
-+ printk(KERN_INFO "SELinux: initialized (dev %s, type %s), %s\n",
-+ sb->s_id, sb->s_type->name,
-+ labeling_behaviors[sbsec->behavior-1]);
-+
-+ /* Initialize the root inode. */
-+ rc = inode_doinit_with_dentry(sb->s_root->d_inode, sb->s_root);
-+out:
-+ up(&sbsec->sem);
-+ return rc;
-+}
-+
-+static inline u16 inode_mode_to_security_class(umode_t mode)
-+{
-+ switch (mode & S_IFMT) {
-+ case S_IFSOCK:
-+ return SECCLASS_SOCK_FILE;
-+ case S_IFLNK:
-+ return SECCLASS_LNK_FILE;
-+ case S_IFREG:
-+ return SECCLASS_FILE;
-+ case S_IFBLK:
-+ return SECCLASS_BLK_FILE;
-+ case S_IFDIR:
-+ return SECCLASS_DIR;
-+ case S_IFCHR:
-+ return SECCLASS_CHR_FILE;
-+ case S_IFIFO:
-+ return SECCLASS_FIFO_FILE;
-+
-+ }
-+
-+ return SECCLASS_FILE;
-+}
-+
-+static inline u16 socket_type_to_security_class(int family, int type)
-+{
-+ switch (family) {
-+ case PF_UNIX:
-+ switch (type) {
-+ case SOCK_STREAM:
-+ return SECCLASS_UNIX_STREAM_SOCKET;
-+ case SOCK_DGRAM:
-+ return SECCLASS_UNIX_DGRAM_SOCKET;
-+ }
-+ case PF_INET:
-+ case PF_INET6:
-+ switch (type) {
-+ case SOCK_STREAM:
-+ return SECCLASS_TCP_SOCKET;
-+ case SOCK_DGRAM:
-+ return SECCLASS_UDP_SOCKET;
-+ case SOCK_RAW:
-+ return SECCLASS_RAWIP_SOCKET;
-+ }
-+ case PF_NETLINK:
-+ return SECCLASS_NETLINK_SOCKET;
-+ case PF_PACKET:
-+ return SECCLASS_PACKET_SOCKET;
-+ case PF_KEY:
-+ return SECCLASS_KEY_SOCKET;
-+ }
-+
-+ return SECCLASS_SOCKET;
-+}
-+
-+#ifdef CONFIG_PROC_FS
-+static int selinux_proc_get_sid(struct proc_dir_entry *de,
-+ u16 tclass,
-+ u32 *sid)
-+{
-+ int buflen, rc;
-+ char *buffer, *path, *end;
-+
-+ buffer = (char*)__get_free_page(GFP_KERNEL);
-+ if (!buffer)
-+ return -ENOMEM;
-+
-+ buflen = PAGE_SIZE;
-+ end = buffer+buflen;
-+ *--end = '\0';
-+ buflen--;
-+ path = end-1;
-+ *path = '/';
-+ while (de && de != de->parent) {
-+ buflen -= de->namelen + 1;
-+ if (buflen < 0)
-+ break;
-+ end -= de->namelen;
-+ memcpy(end, de->name, de->namelen);
-+ *--end = '/';
-+ path = end;
-+ de = de->parent;
-+ }
-+ rc = security_genfs_sid("proc", path, tclass, sid);
-+ free_page((unsigned long)buffer);
-+ return rc;
-+}
-+#else
-+static int selinux_proc_get_sid(struct proc_dir_entry *de,
-+ u16 tclass,
-+ u32 *sid)
-+{
-+ return -EINVAL;
-+}
-+#endif
-+
-+/* The inode's security attributes must be initialized before first use. */
-+static int inode_doinit_with_dentry(struct inode *inode, struct dentry *opt_dentry)
-+{
-+ struct superblock_security_struct *sbsec = NULL;
-+ struct inode_security_struct *isec = inode->i_security;
-+ u32 sid;
-+ struct dentry *dentry;
-+#define INITCONTEXTLEN 255
-+ char *context = NULL;
-+ unsigned len = 0;
-+ int rc = 0;
-+ int hold_sem = 0;
-+
-+ if (isec->initialized)
-+ goto out;
-+
-+ down(&isec->sem);
-+ hold_sem = 1;
-+ if (isec->initialized)
-+ goto out;
-+
-+ sbsec = inode->i_sb->s_security;
-+ if (!sbsec || !sbsec->initialized) {
-+ /* Defer initialization until selinux_complete_init,
-+ after the initial policy is loaded and the security
-+ server is ready to handle calls. */
-+ spin_lock(&inode_security_lock);
-+ if (list_empty(&isec->list))
-+ list_add(&isec->list, &inode_security_head);
-+ spin_unlock(&inode_security_lock);
-+ goto out;
-+ }
-+
-+ switch (sbsec->behavior) {
-+ case SECURITY_FS_USE_XATTR:
-+ if (!inode->i_op->getxattr) {
-+ isec->sid = SECINITSID_FILE;
-+ break;
-+ }
-+
-+ /* Need a dentry, since the xattr API requires one.
-+ Life would be simpler if we could just pass the inode. */
-+ if (opt_dentry) {
-+ /* Called from d_instantiate or d_splice_alias. */
-+ dentry = dget(opt_dentry);
-+ } else {
-+ /* Called from selinux_complete_init, try to find a dentry. */
-+ dentry = d_find_alias(inode);
-+ }
-+ if (!dentry) {
-+ printk(KERN_WARNING "%s: no dentry for dev=%s "
-+ "ino=%ld\n", __FUNCTION__, inode->i_sb->s_id,
-+ inode->i_ino);
-+ goto out;
-+ }
-+
-+ len = INITCONTEXTLEN;
-+ context = kmalloc(len, GFP_KERNEL);
-+ if (!context) {
-+ rc = -ENOMEM;
-+ dput(dentry);
-+ goto out;
-+ }
-+ rc = inode->i_op->getxattr(dentry, XATTR_NAME_SELINUX,
-+ context, len);
-+ if (rc == -ERANGE) {
-+ /* Need a larger buffer. Query for the right size. */
-+ rc = inode->i_op->getxattr(dentry, XATTR_NAME_SELINUX,
-+ NULL, 0);
-+ if (rc < 0) {
-+ dput(dentry);
-+ goto out;
-+ }
-+ kfree(context);
-+ len = rc;
-+ context = kmalloc(len, GFP_KERNEL);
-+ if (!context) {
-+ rc = -ENOMEM;
-+ dput(dentry);
-+ goto out;
-+ }
-+ rc = inode->i_op->getxattr(dentry,
-+ XATTR_NAME_SELINUX,
-+ context, len);
-+ }
-+ dput(dentry);
-+ if (rc < 0) {
-+ if (rc != -ENODATA) {
-+ printk(KERN_WARNING "%s: getxattr returned "
-+ "%d for dev=%s ino=%ld\n", __FUNCTION__,
-+ -rc, inode->i_sb->s_id, inode->i_ino);
-+ kfree(context);
-+ goto out;
-+ }
-+ /* Map ENODATA to the default file SID */
-+ sid = SECINITSID_FILE;
-+ rc = 0;
-+ } else {
-+ rc = security_context_to_sid(context, rc, &sid);
-+ if (rc) {
-+ printk(KERN_WARNING "%s: context_to_sid(%s) "
-+ "returned %d for dev=%s ino=%ld\n",
-+ __FUNCTION__, context, -rc,
-+ inode->i_sb->s_id, inode->i_ino);
-+ kfree(context);
-+ goto out;
-+ }
-+ }
-+ kfree(context);
-+ isec->sid = sid;
-+ break;
-+ case SECURITY_FS_USE_TASK:
-+ isec->sid = isec->task_sid;
-+ break;
-+ case SECURITY_FS_USE_TRANS:
-+ /* Default to the fs SID. */
-+ isec->sid = sbsec->sid;
-+
-+ /* Try to obtain a transition SID. */
-+ isec->sclass = inode_mode_to_security_class(inode->i_mode);
-+ rc = security_transition_sid(isec->task_sid,
-+ sbsec->sid,
-+ isec->sclass,
-+ &sid);
-+ if (rc)
-+ goto out;
-+ isec->sid = sid;
-+ break;
-+ default:
-+ /* Default to the fs SID. */
-+ isec->sid = sbsec->sid;
-+
-+ if (sbsec->proc) {
-+ struct proc_inode *proci = PROC_I(inode);
-+ if (proci->pde) {
-+ isec->sclass = inode_mode_to_security_class(inode->i_mode);
-+ rc = selinux_proc_get_sid(proci->pde,
-+ isec->sclass,
-+ &sid);
-+ if (rc)
-+ goto out;
-+ isec->sid = sid;
-+ }
-+ }
-+ break;
-+ }
-+
-+ isec->initialized = 1;
-+
-+out:
-+ if (inode->i_sock) {
-+ struct socket *sock = SOCKET_I(inode);
-+ if (sock->sk) {
-+ isec->sclass = socket_type_to_security_class(sock->sk->sk_family,
-+ sock->sk->sk_type);
-+ } else {
-+ isec->sclass = SECCLASS_SOCKET;
-+ }
-+ } else {
-+ isec->sclass = inode_mode_to_security_class(inode->i_mode);
-+ }
-+
-+ if (hold_sem)
-+ up(&isec->sem);
-+ return rc;
-+}
-+
-+/* Convert a Linux signal to an access vector. */
-+static inline u32 signal_to_av(int sig)
-+{
-+ u32 perm = 0;
-+
-+ switch (sig) {
-+ case SIGCHLD:
-+ /* Commonly granted from child to parent. */
-+ perm = PROCESS__SIGCHLD;
-+ break;
-+ case SIGKILL:
-+ /* Cannot be caught or ignored */
-+ perm = PROCESS__SIGKILL;
-+ break;
-+ case SIGSTOP:
-+ /* Cannot be caught or ignored */
-+ perm = PROCESS__SIGSTOP;
-+ break;
-+ default:
-+ /* All other signals. */
-+ perm = PROCESS__SIGNAL;
-+ break;
-+ }
-+
-+ return perm;
-+}
-+
-+/* Check permission betweeen a pair of tasks, e.g. signal checks,
-+ fork check, ptrace check, etc. */
-+int task_has_perm(struct task_struct *tsk1,
-+ struct task_struct *tsk2,
-+ u32 perms)
-+{
-+ struct task_security_struct *tsec1, *tsec2;
-+
-+ tsec1 = tsk1->security;
-+ tsec2 = tsk2->security;
-+ return avc_has_perm(tsec1->sid, tsec2->sid,
-+ SECCLASS_PROCESS, perms, &tsec2->avcr, NULL);
-+}
-+
-+/* Check whether a task is allowed to use a capability. */
-+int task_has_capability(struct task_struct *tsk,
-+ int cap)
-+{
-+ struct task_security_struct *tsec;
-+ struct avc_audit_data ad;
-+
-+ tsec = tsk->security;
-+
-+ AVC_AUDIT_DATA_INIT(&ad,CAP);
-+ ad.tsk = tsk;
-+ ad.u.cap = cap;
-+
-+ return avc_has_perm(tsec->sid, tsec->sid,
-+ SECCLASS_CAPABILITY, CAP_TO_MASK(cap), NULL, &ad);
-+}
-+
-+/* Check whether a task is allowed to use a system operation. */
-+int task_has_system(struct task_struct *tsk,
-+ u32 perms)
-+{
-+ struct task_security_struct *tsec;
-+
-+ tsec = tsk->security;
-+
-+ return avc_has_perm(tsec->sid, SECINITSID_KERNEL,
-+ SECCLASS_SYSTEM, perms, NULL, NULL);
-+}
-+
-+/* Check whether a task has a particular permission to an inode.
-+ The 'aeref' parameter is optional and allows other AVC
-+ entry references to be passed (e.g. the one in the struct file).
-+ The 'adp' parameter is optional and allows other audit
-+ data to be passed (e.g. the dentry). */
-+int inode_has_perm(struct task_struct *tsk,
-+ struct inode *inode,
-+ u32 perms,
-+ struct avc_entry_ref *aeref,
-+ struct avc_audit_data *adp)
-+{
-+ struct task_security_struct *tsec;
-+ struct inode_security_struct *isec;
-+ struct avc_audit_data ad;
-+
-+ tsec = tsk->security;
-+ isec = inode->i_security;
-+
-+ if (!adp) {
-+ adp = &ad;
-+ AVC_AUDIT_DATA_INIT(&ad, FS);
-+ ad.u.fs.inode = inode;
-+ }
-+
-+ return avc_has_perm(tsec->sid, isec->sid, isec->sclass,
-+ perms, aeref ? aeref : &isec->avcr, adp);
-+}
-+
-+/* Same as inode_has_perm, but pass explicit audit data containing
-+ the dentry to help the auditing code to more easily generate the
-+ pathname if needed. */
-+static inline int dentry_has_perm(struct task_struct *tsk,
-+ struct vfsmount *mnt,
-+ struct dentry *dentry,
-+ u32 av)
-+{
-+ struct inode *inode = dentry->d_inode;
-+ struct avc_audit_data ad;
-+ AVC_AUDIT_DATA_INIT(&ad,FS);
-+ ad.u.fs.mnt = mnt;
-+ ad.u.fs.dentry = dentry;
-+ return inode_has_perm(tsk, inode, av, NULL, &ad);
-+}
-+
-+/* Check whether a task can use an open file descriptor to
-+ access an inode in a given way. Check access to the
-+ descriptor itself, and then use dentry_has_perm to
-+ check a particular permission to the file.
-+ Access to the descriptor is implicitly granted if it
-+ has the same SID as the process. If av is zero, then
-+ access to the file is not checked, e.g. for cases
-+ where only the descriptor is affected like seek. */
-+static inline int file_has_perm(struct task_struct *tsk,
-+ struct file *file,
-+ u32 av)
-+{
-+ struct task_security_struct *tsec = tsk->security;
-+ struct file_security_struct *fsec = file->f_security;
-+ struct vfsmount *mnt = file->f_vfsmnt;
-+ struct dentry *dentry = file->f_dentry;
-+ struct inode *inode = dentry->d_inode;
-+ struct avc_audit_data ad;
-+ int rc;
-+
-+ AVC_AUDIT_DATA_INIT(&ad, FS);
-+ ad.u.fs.mnt = mnt;
-+ ad.u.fs.dentry = dentry;
-+
-+ if (tsec->sid != fsec->sid) {
-+ rc = avc_has_perm(tsec->sid, fsec->sid,
-+ SECCLASS_FD,
-+ FD__USE,
-+ &fsec->avcr, &ad);
-+ if (rc)
-+ return rc;
-+ }
-+
-+ /* av is zero if only checking access to the descriptor. */
-+ if (av)
-+ return inode_has_perm(tsk, inode, av, &fsec->inode_avcr, &ad);
-+
-+ return 0;
-+}
-+
-+/* Check whether a task can create a file. */
-+static int may_create(struct inode *dir,
-+ struct dentry *dentry,
-+ u16 tclass)
-+{
-+ struct task_security_struct *tsec;
-+ struct inode_security_struct *dsec;
-+ struct superblock_security_struct *sbsec;
-+ u32 newsid;
-+ struct avc_audit_data ad;
-+ int rc;
-+
-+ tsec = current->security;
-+ dsec = dir->i_security;
-+
-+ AVC_AUDIT_DATA_INIT(&ad, FS);
-+ ad.u.fs.dentry = dentry;
-+
-+ rc = avc_has_perm(tsec->sid, dsec->sid, SECCLASS_DIR,
-+ DIR__ADD_NAME | DIR__SEARCH,
-+ &dsec->avcr, &ad);
-+ if (rc)
-+ return rc;
-+
-+ if (tsec->create_sid) {
-+ newsid = tsec->create_sid;
-+ } else {
-+ rc = security_transition_sid(tsec->sid, dsec->sid, tclass,
-+ &newsid);
-+ if (rc)
-+ return rc;
-+ }
-+
-+ rc = avc_has_perm(tsec->sid, newsid, tclass, FILE__CREATE, NULL, &ad);
-+ if (rc)
-+ return rc;
-+
-+ sbsec = dir->i_sb->s_security;
-+
-+ return avc_has_perm(newsid, sbsec->sid,
-+ SECCLASS_FILESYSTEM,
-+ FILESYSTEM__ASSOCIATE, NULL, &ad);
-+}
-+
-+#define MAY_LINK 0
-+#define MAY_UNLINK 1
-+#define MAY_RMDIR 2
-+
-+/* Check whether a task can link, unlink, or rmdir a file/directory. */
-+static int may_link(struct inode *dir,
-+ struct dentry *dentry,
-+ int kind)
-+
-+{
-+ struct task_security_struct *tsec;
-+ struct inode_security_struct *dsec, *isec;
-+ struct avc_audit_data ad;
-+ u32 av;
-+ int rc;
-+
-+ tsec = current->security;
-+ dsec = dir->i_security;
-+ isec = dentry->d_inode->i_security;
-+
-+ AVC_AUDIT_DATA_INIT(&ad, FS);
-+ ad.u.fs.dentry = dentry;
-+
-+ av = DIR__SEARCH;
-+ av |= (kind ? DIR__REMOVE_NAME : DIR__ADD_NAME);
-+ rc = avc_has_perm(tsec->sid, dsec->sid, SECCLASS_DIR,
-+ av, &dsec->avcr, &ad);
-+ if (rc)
-+ return rc;
-+
-+ switch (kind) {
-+ case MAY_LINK:
-+ av = FILE__LINK;
-+ break;
-+ case MAY_UNLINK:
-+ av = FILE__UNLINK;
-+ break;
-+ case MAY_RMDIR:
-+ av = DIR__RMDIR;
-+ break;
-+ default:
-+ printk(KERN_WARNING "may_link: unrecognized kind %d\n", kind);
-+ return 0;
-+ }
-+
-+ rc = avc_has_perm(tsec->sid, isec->sid, isec->sclass,
-+ av, &isec->avcr, &ad);
-+ return rc;
-+}
-+
-+static inline int may_rename(struct inode *old_dir,
-+ struct dentry *old_dentry,
-+ struct inode *new_dir,
-+ struct dentry *new_dentry)
-+{
-+ struct task_security_struct *tsec;
-+ struct inode_security_struct *old_dsec, *new_dsec, *old_isec, *new_isec;
-+ struct avc_audit_data ad;
-+ u32 av;
-+ int old_is_dir, new_is_dir;
-+ int rc;
-+
-+ tsec = current->security;
-+ old_dsec = old_dir->i_security;
-+ old_isec = old_dentry->d_inode->i_security;
-+ old_is_dir = S_ISDIR(old_dentry->d_inode->i_mode);
-+ new_dsec = new_dir->i_security;
-+
-+ AVC_AUDIT_DATA_INIT(&ad, FS);
-+
-+ ad.u.fs.dentry = old_dentry;
-+ rc = avc_has_perm(tsec->sid, old_dsec->sid, SECCLASS_DIR,
-+ DIR__REMOVE_NAME | DIR__SEARCH,
-+ &old_dsec->avcr, &ad);
-+ if (rc)
-+ return rc;
-+ rc = avc_has_perm(tsec->sid, old_isec->sid,
-+ old_isec->sclass,
-+ FILE__RENAME,
-+ &old_isec->avcr, &ad);
-+ if (rc)
-+ return rc;
-+ if (old_is_dir && new_dir != old_dir) {
-+ rc = avc_has_perm(tsec->sid, old_isec->sid,
-+ old_isec->sclass,
-+ DIR__REPARENT,
-+ &old_isec->avcr, &ad);
-+ if (rc)
-+ return rc;
-+ }
-+
-+ ad.u.fs.dentry = new_dentry;
-+ av = DIR__ADD_NAME | DIR__SEARCH;
-+ if (new_dentry->d_inode)
-+ av |= DIR__REMOVE_NAME;
-+ rc = avc_has_perm(tsec->sid, new_dsec->sid, SECCLASS_DIR,
-+ av,&new_dsec->avcr, &ad);
-+ if (rc)
-+ return rc;
-+ if (new_dentry->d_inode) {
-+ new_isec = new_dentry->d_inode->i_security;
-+ new_is_dir = S_ISDIR(new_dentry->d_inode->i_mode);
-+ rc = avc_has_perm(tsec->sid, new_isec->sid,
-+ new_isec->sclass,
-+ (new_is_dir ? DIR__RMDIR : FILE__UNLINK),
-+ &new_isec->avcr, &ad);
-+ if (rc)
-+ return rc;
-+ }
-+
-+ return 0;
-+}
-+
-+/* Check whether a task can perform a filesystem operation. */
-+int superblock_has_perm(struct task_struct *tsk,
-+ struct super_block *sb,
-+ u32 perms,
-+ struct avc_audit_data *ad)
-+{
-+ struct task_security_struct *tsec;
-+ struct superblock_security_struct *sbsec;
-+
-+ tsec = tsk->security;
-+ sbsec = sb->s_security;
-+ return avc_has_perm(tsec->sid, sbsec->sid, SECCLASS_FILESYSTEM,
-+ perms, NULL, ad);
-+}
-+
-+/* Convert a Linux mode and permission mask to an access vector. */
-+static inline u32 file_mask_to_av(int mode, int mask)
-+{
-+ u32 av = 0;
-+
-+ if ((mode & S_IFMT) != S_IFDIR) {
-+ if (mask & MAY_EXEC)
-+ av |= FILE__EXECUTE;
-+ if (mask & MAY_READ)
-+ av |= FILE__READ;
-+
-+ if (mask & MAY_APPEND)
-+ av |= FILE__APPEND;
-+ else if (mask & MAY_WRITE)
-+ av |= FILE__WRITE;
-+
-+ } else {
-+ if (mask & MAY_EXEC)
-+ av |= DIR__SEARCH;
-+ if (mask & MAY_WRITE)
-+ av |= DIR__WRITE;
-+ if (mask & MAY_READ)
-+ av |= DIR__READ;
-+ }
-+
-+ return av;
-+}
-+
-+/* Convert a Linux file to an access vector. */
-+static inline u32 file_to_av(struct file *file)
-+{
-+ u32 av = 0;
-+
-+ if (file->f_mode & FMODE_READ)
-+ av |= FILE__READ;
-+ if (file->f_mode & FMODE_WRITE) {
-+ if (file->f_flags & O_APPEND)
-+ av |= FILE__APPEND;
-+ else
-+ av |= FILE__WRITE;
-+ }
-+
-+ return av;
-+}
-+
-+/* Set an inode's SID to a specified value. */
-+int inode_security_set_sid(struct inode *inode, u32 sid)
-+{
-+ struct inode_security_struct *isec = inode->i_security;
-+
-+ down(&isec->sem);
-+ isec->sclass = inode_mode_to_security_class(inode->i_mode);
-+ isec->sid = sid;
-+ isec->initialized = 1;
-+ up(&isec->sem);
-+ return 0;
-+}
-+
-+/* Set the security attributes on a newly created file. */
-+static int post_create(struct inode *dir,
-+ struct dentry *dentry)
-+{
-+
-+ struct task_security_struct *tsec;
-+ struct inode *inode;
-+ struct inode_security_struct *dsec;
-+ struct superblock_security_struct *sbsec;
-+ u32 newsid;
-+ char *context;
-+ unsigned int len;
-+ int rc;
-+
-+ tsec = current->security;
-+ dsec = dir->i_security;
-+
-+ inode = dentry->d_inode;
-+ if (!inode) {
-+ /* Some file system types (e.g. NFS) may not instantiate
-+ a dentry for all create operations (e.g. symlink),
-+ so we have to check to see if the inode is non-NULL. */
-+ printk(KERN_WARNING "post_create: no inode, dir (dev=%s, "
-+ "ino=%ld)\n", dir->i_sb->s_id, dir->i_ino);
-+ return 0;
-+ }
-+
-+ if (tsec->create_sid) {
-+ newsid = tsec->create_sid;
-+ } else {
-+ rc = security_transition_sid(tsec->sid, dsec->sid,
-+ inode_mode_to_security_class(inode->i_mode),
-+ &newsid);
-+ if (rc) {
-+ printk(KERN_WARNING "post_create: "
-+ "security_transition_sid failed, rc=%d (dev=%s "
-+ "ino=%ld)\n",
-+ -rc, inode->i_sb->s_id, inode->i_ino);
-+ return rc;
-+ }
-+ }
-+
-+ rc = inode_security_set_sid(inode, newsid);
-+ if (rc) {
-+ printk(KERN_WARNING "post_create: inode_security_set_sid "
-+ "failed, rc=%d (dev=%s ino=%ld)\n",
-+ -rc, inode->i_sb->s_id, inode->i_ino);
-+ return rc;
-+ }
-+
-+ sbsec = dir->i_sb->s_security;
-+ if (!sbsec)
-+ return 0;
-+
-+ if (sbsec->behavior == SECURITY_FS_USE_XATTR &&
-+ inode->i_op->setxattr) {
-+ /* Use extended attributes. */
-+ rc = security_sid_to_context(newsid, &context, &len);
-+ if (rc) {
-+ printk(KERN_WARNING "post_create: sid_to_context "
-+ "failed, rc=%d (dev=%s ino=%ld)\n",
-+ -rc, inode->i_sb->s_id, inode->i_ino);
-+ return rc;
-+ }
-+ down(&inode->i_sem);
-+ rc = inode->i_op->setxattr(dentry,
-+ XATTR_NAME_SELINUX,
-+ context, len, 0);
-+ up(&inode->i_sem);
-+ kfree(context);
-+ if (rc < 0) {
-+ printk(KERN_WARNING "post_create: setxattr failed, "
-+ "rc=%d (dev=%s ino=%ld)\n",
-+ -rc, inode->i_sb->s_id, inode->i_ino);
-+ return rc;
-+ }
-+ }
-+
-+ return 0;
-+}
-+
-+
-+/* Hook functions begin here. */
-+
-+static int selinux_ptrace(struct task_struct *parent, struct task_struct *child)
-+{
-+ int rc;
-+
-+ rc = secondary_ops->ptrace(parent,child);
-+ if (rc)
-+ return rc;
-+
-+ return task_has_perm(parent, child, PROCESS__PTRACE);
-+}
-+
-+static int selinux_capget(struct task_struct *target, kernel_cap_t *effective,
-+ kernel_cap_t *inheritable, kernel_cap_t *permitted)
-+{
-+ int error;
-+
-+ error = task_has_perm(current, target, PROCESS__GETCAP);
-+ if (error)
-+ return error;
-+
-+ return secondary_ops->capget(target, effective, inheritable, permitted);
-+}
-+
-+static int selinux_capset_check(struct task_struct *target, kernel_cap_t *effective,
-+ kernel_cap_t *inheritable, kernel_cap_t *permitted)
-+{
-+ int error;
-+
-+ error = task_has_perm(current, target, PROCESS__SETCAP);
-+ if (error)
-+ return error;
-+
-+ return secondary_ops->capset_check(target, effective, inheritable, permitted);
-+}
-+
-+static void selinux_capset_set(struct task_struct *target, kernel_cap_t *effective,
-+ kernel_cap_t *inheritable, kernel_cap_t *permitted)
-+{
-+ int error;
-+
-+ error = task_has_perm(current, target, PROCESS__SETCAP);
-+ if (error)
-+ return;
-+
-+ return secondary_ops->capset_set(target, effective, inheritable, permitted);
-+}
-+
-+static int selinux_capable(struct task_struct *tsk, int cap)
-+{
-+ int rc;
-+
-+ rc = secondary_ops->capable(tsk, cap);
-+ if (rc)
-+ return rc;
-+
-+ return task_has_capability(tsk,cap);
-+}
-+
-+static int selinux_sysctl(ctl_table *table, int op)
-+{
-+ int error = 0;
-+ u32 av;
-+ struct task_security_struct *tsec;
-+ u32 tsid;
-+ int rc;
-+
-+ tsec = current->security;
-+
-+ rc = selinux_proc_get_sid(table->de, (op == 001) ?
-+ SECCLASS_DIR : SECCLASS_FILE, &tsid);
-+ if (rc) {
-+ /* Default to the well-defined sysctl SID. */
-+ tsid = SECINITSID_SYSCTL;
-+ }
-+
-+ /* The op values are "defined" in sysctl.c, thereby creating
-+ * a bad coupling between this module and sysctl.c */
-+ if(op == 001) {
-+ error = avc_has_perm(tsec->sid, tsid,
-+ SECCLASS_DIR, DIR__SEARCH, NULL, NULL);
-+ } else {
-+ av = 0;
-+ if (op & 004)
-+ av |= FILE__READ;
-+ if (op & 002)
-+ av |= FILE__WRITE;
-+ if (av)
-+ error = avc_has_perm(tsec->sid, tsid,
-+ SECCLASS_FILE, av, NULL, NULL);
-+ }
-+
-+ return error;
-+}
-+
-+static int selinux_quotactl(int cmds, int type, int id, struct super_block *sb)
-+{
-+ int rc = 0;
-+
-+ if (!sb)
-+ return 0;
-+
-+ switch (cmds) {
-+ case Q_SYNC:
-+ case Q_QUOTAON:
-+ case Q_QUOTAOFF:
-+ case Q_SETINFO:
-+ case Q_SETQUOTA:
-+ rc = superblock_has_perm(current,
-+ sb,
-+ FILESYSTEM__QUOTAMOD, NULL);
-+ break;
-+ case Q_GETFMT:
-+ case Q_GETINFO:
-+ case Q_GETQUOTA:
-+ rc = superblock_has_perm(current,
-+ sb,
-+ FILESYSTEM__QUOTAGET, NULL);
-+ break;
-+ default:
-+ rc = 0; /* let the kernel handle invalid cmds */
-+ break;
-+ }
-+ return rc;
-+}
-+
-+static int selinux_quota_on(struct file *f)
-+{
-+ return file_has_perm(current, f, FILE__QUOTAON);;
-+}
-+
-+static int selinux_syslog(int type)
-+{
-+ int rc;
-+
-+ rc = secondary_ops->syslog(type);
-+ if (rc)
-+ return rc;
-+
-+ switch (type) {
-+ case 3: /* Read last kernel messages */
-+ rc = task_has_system(current, SYSTEM__SYSLOG_READ);
-+ break;
-+ case 6: /* Disable logging to console */
-+ case 7: /* Enable logging to console */
-+ case 8: /* Set level of messages printed to console */
-+ rc = task_has_system(current, SYSTEM__SYSLOG_CONSOLE);
-+ break;
-+ case 0: /* Close log */
-+ case 1: /* Open log */
-+ case 2: /* Read from log */
-+ case 4: /* Read/clear last kernel messages */
-+ case 5: /* Clear ring buffer */
-+ default:
-+ rc = task_has_system(current, SYSTEM__SYSLOG_MOD);
-+ break;
-+ }
-+ return rc;
-+}
-+
-+/*
-+ * Check that a process has enough memory to allocate a new virtual
-+ * mapping. 0 means there is enough memory for the allocation to
-+ * succeed and -ENOMEM implies there is not.
-+ *
-+ * We currently support three overcommit policies, which are set via the
-+ * vm.overcommit_memory sysctl. See Documentation/vm/overcommit-acounting
-+ *
-+ * Strict overcommit modes added 2002 Feb 26 by Alan Cox.
-+ * Additional code 2002 Jul 20 by Robert Love.
-+ */
-+static int selinux_vm_enough_memory(long pages)
-+{
-+ unsigned long free, allowed;
-+ int rc;
-+ struct task_security_struct *tsec = current->security;
-+
-+ vm_acct_memory(pages);
-+
-+ /*
-+ * Sometimes we want to use more memory than we have
-+ */
-+ if (sysctl_overcommit_memory == 1)
-+ return 0;
-+
-+ if (sysctl_overcommit_memory == 0) {
-+ free = get_page_cache_size();
-+ free += nr_free_pages();
-+ free += nr_swap_pages;
-+
-+ /*
-+ * Any slabs which are created with the
-+ * SLAB_RECLAIM_ACCOUNT flag claim to have contents
-+ * which are reclaimable, under pressure. The dentry
-+ * cache and most inode caches should fall into this
-+ */
-+ free += atomic_read(&slab_reclaim_pages);
-+
-+ /*
-+ * Leave the last 3% for privileged processes.
-+ * Don't audit the check, as it is applied to all processes
-+ * that allocate mappings.
-+ */
-+ rc = secondary_ops->capable(current, CAP_SYS_ADMIN);
-+ if (!rc) {
-+ rc = avc_has_perm_noaudit(tsec->sid, tsec->sid,
-+ SECCLASS_CAPABILITY,
-+ CAP_TO_MASK(CAP_SYS_ADMIN),
-+ NULL, NULL);
-+ }
-+ if (rc)
-+ free -= free / 32;
-+
-+ if (free > pages)
-+ return 0;
-+ vm_unacct_memory(pages);
-+ return -ENOMEM;
-+ }
-+
-+ allowed = totalram_pages * sysctl_overcommit_ratio / 100;
-+ allowed += total_swap_pages;
-+
-+ if (atomic_read(&vm_committed_space) < allowed)
-+ return 0;
-+
-+ vm_unacct_memory(pages);
-+
-+ return -ENOMEM;
-+}
-+
-+static int selinux_netlink_send(struct sk_buff *skb)
-+{
-+ if (capable(CAP_NET_ADMIN))
-+ cap_raise (NETLINK_CB (skb).eff_cap, CAP_NET_ADMIN);
-+ else
-+ NETLINK_CB(skb).eff_cap = 0;
-+ return 0;
-+}
-+
-+static int selinux_netlink_recv(struct sk_buff *skb)
-+{
-+ if (!cap_raised(NETLINK_CB(skb).eff_cap, CAP_NET_ADMIN))
-+ return -EPERM;
-+ return 0;
-+}
-+
-+/* binprm security operations */
-+
-+static int selinux_bprm_alloc_security(struct linux_binprm *bprm)
-+{
-+ int rc;
-+
-+ /* Make sure that the secondary module doesn't use the
-+ bprm->security field, since we do not yet support chaining
-+ of multiple security structures on the field. Neither
-+ the dummy nor the capability module use the field. The owlsm
-+ module uses the field if CONFIG_OWLSM_FD is enabled. */
-+ rc = secondary_ops->bprm_alloc_security(bprm);
-+ if (rc)
-+ return rc;
-+ if (bprm->security) {
-+ printk(KERN_WARNING "%s: no support yet for chaining on the "
-+ "security field by secondary modules.\n", __FUNCTION__);
-+ /* Release the secondary module's security object. */
-+ secondary_ops->bprm_free_security(bprm);
-+ /* Unregister the secondary module to prevent problems
-+ with subsequent binprm hooks. This will revert to the
-+ original (dummy) module for the secondary operations. */
-+ rc = security_ops->unregister_security("unknown", secondary_ops);
-+ if (rc)
-+ return rc;
-+ printk(KERN_WARNING "%s: Unregistered the secondary security "
-+ "module.\n", __FUNCTION__);
-+ }
-+ bprm->security = NULL;
-+ return 0;
-+}
-+
-+static int selinux_bprm_set_security(struct linux_binprm *bprm)
-+{
-+ struct task_security_struct *tsec;
-+ struct inode *inode = bprm->file->f_dentry->d_inode;
-+ struct inode_security_struct *isec;
-+ u32 newsid;
-+ struct avc_audit_data ad;
-+ int rc;
-+
-+ rc = secondary_ops->bprm_set_security(bprm);
-+ if (rc)
-+ return rc;
-+
-+ if (bprm->sh_bang || bprm->security)
-+ /* The security field should already be set properly. */
-+ return 0;
-+
-+ tsec = current->security;
-+ isec = inode->i_security;
-+
-+ /* Default to the current task SID. */
-+ bprm->security = (void *)tsec->sid;
-+
-+ /* Reset create SID on execve. */
-+ tsec->create_sid = 0;
-+
-+ if (tsec->exec_sid) {
-+ newsid = tsec->exec_sid;
-+ /* Reset exec SID on execve. */
-+ tsec->exec_sid = 0;
-+ } else {
-+ /* Check for a default transition on this program. */
-+ rc = security_transition_sid(tsec->sid, isec->sid,
-+ SECCLASS_PROCESS, &newsid);
-+ if (rc)
-+ return rc;
-+ }
-+
-+ AVC_AUDIT_DATA_INIT(&ad, FS);
-+ ad.u.fs.mnt = bprm->file->f_vfsmnt;
-+ ad.u.fs.dentry = bprm->file->f_dentry;
-+
-+ if (bprm->file->f_vfsmnt->mnt_flags & MNT_NOSUID)
-+ newsid = tsec->sid;
-+
-+ if (tsec->sid == newsid) {
-+ rc = avc_has_perm(tsec->sid, isec->sid,
-+ SECCLASS_FILE, FILE__EXECUTE_NO_TRANS,
-+ &isec->avcr, &ad);
-+ if (rc)
-+ return rc;
-+ } else {
-+ /* Check permissions for the transition. */
-+ rc = avc_has_perm(tsec->sid, newsid,
-+ SECCLASS_PROCESS, PROCESS__TRANSITION,
-+ NULL,
-+ &ad);
-+ if (rc)
-+ return rc;
-+
-+ rc = avc_has_perm(newsid, isec->sid,
-+ SECCLASS_FILE, FILE__ENTRYPOINT,
-+ &isec->avcr, &ad);
-+ if (rc)
-+ return rc;
-+
-+ /* Set the security field to the new SID. */
-+ bprm->security = (void*) newsid;
-+ }
-+
-+ return 0;
-+}
-+
-+static int selinux_bprm_check_security (struct linux_binprm *bprm)
-+{
-+ return 0;
-+}
-+
-+
-+static int selinux_bprm_secureexec (struct linux_binprm *bprm)
-+{
-+ struct task_security_struct *tsec = current->security;
-+ int atsecure = 0;
-+
-+ if (tsec->osid != tsec->sid) {
-+ /* Enable secure mode for SIDs transitions unless
-+ the noatsecure permission is granted between
-+ the two SIDs, i.e. ahp returns 0. */
-+ atsecure = avc_has_perm(tsec->osid, tsec->sid,
-+ SECCLASS_PROCESS,
-+ PROCESS__NOATSECURE, NULL, NULL);
-+ }
-+
-+ /* Note that we must include the legacy uid/gid test below
-+ to retain it, as the new userland will simply use the
-+ value passed by AT_SECURE to decide whether to enable
-+ secure mode. */
-+ return ( atsecure || current->euid != current->uid ||
-+ current->egid != current->gid);
-+}
-+
-+static void selinux_bprm_free_security(struct linux_binprm *bprm)
-+{
-+ /* Nothing to do - not dynamically allocated. */
-+ return;
-+}
-+
-+/* Derived from fs/exec.c:flush_old_files. */
-+static inline void flush_unauthorized_files(struct files_struct * files)
-+{
-+ struct avc_audit_data ad;
-+ struct file *file;
-+ long j = -1;
-+
-+ AVC_AUDIT_DATA_INIT(&ad,FS);
-+
-+ spin_lock(&files->file_lock);
-+ for (;;) {
-+ unsigned long set, i;
-+
-+ j++;
-+ i = j * __NFDBITS;
-+ if (i >= files->max_fds || i >= files->max_fdset)
-+ break;
-+ set = files->open_fds->fds_bits[j];
-+ if (!set)
-+ continue;
-+ spin_unlock(&files->file_lock);
-+ for ( ; set ; i++,set >>= 1) {
-+ if (set & 1) {
-+ file = fget(i);
-+ if (!file)
-+ continue;
-+ if (file_has_perm(current,
-+ file,
-+ file_to_av(file)))
-+ sys_close(i);
-+ fput(file);
-+ }
-+ }
-+ spin_lock(&files->file_lock);
-+
-+ }
-+ spin_unlock(&files->file_lock);
-+}
-+
-+static void selinux_bprm_compute_creds(struct linux_binprm *bprm)
-+{
-+ struct task_security_struct *tsec, *psec;
-+ u32 sid;
-+ struct av_decision avd;
-+ int rc;
-+
-+ secondary_ops->bprm_compute_creds(bprm);
-+
-+ tsec = current->security;
-+
-+ sid = (u32)bprm->security;
-+ if (!sid)
-+ sid = tsec->sid;
-+
-+ tsec->osid = tsec->sid;
-+ if (tsec->sid != sid) {
-+ /* Check for shared state. If not ok, leave SID
-+ unchanged and kill. */
-+ if ((atomic_read(¤t->fs->count) > 1 ||
-+ atomic_read(¤t->files->count) > 1 ||
-+ atomic_read(¤t->sighand->count) > 1)) {
-+ rc = avc_has_perm(tsec->sid, sid,
-+ SECCLASS_PROCESS, PROCESS__SHARE,
-+ NULL, NULL);
-+ if (rc) {
-+ force_sig_specific(SIGKILL, current);
-+ return;
-+ }
-+ }
-+
-+ /* Check for ptracing, and update the task SID if ok.
-+ Otherwise, leave SID unchanged and kill. */
-+ task_lock(current);
-+ if (current->ptrace & PT_PTRACED) {
-+ psec = current->parent->security;
-+ rc = avc_has_perm_noaudit(psec->sid, sid,
-+ SECCLASS_PROCESS, PROCESS__PTRACE,
-+ NULL, &avd);
-+ if (!rc)
-+ tsec->sid = sid;
-+ task_unlock(current);
-+ avc_audit(psec->sid, sid, SECCLASS_PROCESS,
-+ PROCESS__PTRACE, &avd, rc, NULL);
-+ if (rc) {
-+ force_sig_specific(SIGKILL, current);
-+ return;
-+ }
-+ } else {
-+ tsec->sid = sid;
-+ task_unlock(current);
-+ }
-+
-+ /* Close files for which the new task SID is not authorized. */
-+ flush_unauthorized_files(current->files);
-+
-+ /* Wake up the parent if it is waiting so that it can
-+ recheck wait permission to the new task SID. */
-+ wake_up_interruptible(¤t->parent->wait_chldexit);
-+ }
-+}
-+
-+/* superblock security operations */
-+
-+static int selinux_sb_alloc_security(struct super_block *sb)
-+{
-+ return superblock_alloc_security(sb);
-+}
-+
-+static void selinux_sb_free_security(struct super_block *sb)
-+{
-+ superblock_free_security(sb);
-+}
-+
-+static int selinux_sb_kern_mount(struct super_block *sb)
-+{
-+ struct avc_audit_data ad;
-+ int rc;
-+
-+ rc = superblock_doinit(sb);
-+ if (rc)
-+ return rc;
-+
-+ AVC_AUDIT_DATA_INIT(&ad,FS);
-+ ad.u.fs.dentry = sb->s_root;
-+ return superblock_has_perm(current, sb, FILESYSTEM__MOUNT, &ad);
-+}
-+
-+static int selinux_sb_statfs(struct super_block *sb)
-+{
-+ struct avc_audit_data ad;
-+
-+ AVC_AUDIT_DATA_INIT(&ad,FS);
-+ ad.u.fs.dentry = sb->s_root;
-+ return superblock_has_perm(current, sb, FILESYSTEM__GETATTR, &ad);
-+}
-+
-+static int selinux_mount(char * dev_name,
-+ struct nameidata *nd,
-+ char * type,
-+ unsigned long flags,
-+ void * data)
-+{
-+ if (flags & MS_REMOUNT)
-+ return superblock_has_perm(current, nd->mnt->mnt_sb,
-+ FILESYSTEM__REMOUNT, NULL);
-+ else
-+ return dentry_has_perm(current, nd->mnt, nd->dentry,
-+ FILE__MOUNTON);
-+}
-+
-+static int selinux_umount(struct vfsmount *mnt, int flags)
-+{
-+ return superblock_has_perm(current,mnt->mnt_sb,
-+ FILESYSTEM__UNMOUNT,NULL);
-+}
-+
-+/* inode security operations */
-+
-+static int selinux_inode_alloc_security(struct inode *inode)
-+{
-+ return inode_alloc_security(inode);
-+}
-+
-+static void selinux_inode_free_security(struct inode *inode)
-+{
-+ inode_free_security(inode);
-+}
-+
-+static int selinux_inode_create(struct inode *dir, struct dentry *dentry, int mask)
-+{
-+ return may_create(dir, dentry, SECCLASS_FILE);
-+}
-+
-+static void selinux_inode_post_create(struct inode *dir, struct dentry *dentry, int mask)
-+{
-+ post_create(dir, dentry);
-+}
-+
-+static int selinux_inode_link(struct dentry *old_dentry, struct inode *dir, struct dentry *new_dentry)
-+{
-+ int rc;
-+
-+ rc = secondary_ops->inode_link(old_dentry,dir,new_dentry);
-+ if (rc)
-+ return rc;
-+ return may_link(dir, old_dentry, MAY_LINK);
-+}
-+
-+static void selinux_inode_post_link(struct dentry *old_dentry, struct inode *inode, struct dentry *new_dentry)
-+{
-+ return;
-+}
-+
-+static int selinux_inode_unlink(struct inode *dir, struct dentry *dentry)
-+{
-+ return may_link(dir, dentry, MAY_UNLINK);
-+}
-+
-+static int selinux_inode_symlink(struct inode *dir, struct dentry *dentry, const char *name)
-+{
-+ return may_create(dir, dentry, SECCLASS_LNK_FILE);
-+}
-+
-+static void selinux_inode_post_symlink(struct inode *dir, struct dentry *dentry, const char *name)
-+{
-+ post_create(dir, dentry);
-+}
-+
-+static int selinux_inode_mkdir(struct inode *dir, struct dentry *dentry, int mask)
-+{
-+ return may_create(dir, dentry, SECCLASS_DIR);
-+}
-+
-+static void selinux_inode_post_mkdir(struct inode *dir, struct dentry *dentry, int mask)
-+{
-+ post_create(dir, dentry);
-+}
-+
-+static int selinux_inode_rmdir(struct inode *dir, struct dentry *dentry)
-+{
-+ return may_link(dir, dentry, MAY_RMDIR);
-+}
-+
-+static int selinux_inode_mknod(struct inode *dir, struct dentry *dentry, int mode, dev_t dev)
-+{
-+ return may_create(dir, dentry, inode_mode_to_security_class(mode));
-+}
-+
-+static void selinux_inode_post_mknod(struct inode *dir, struct dentry *dentry, int mode, dev_t dev)
-+{
-+ post_create(dir, dentry);
-+}
-+
-+static int selinux_inode_rename(struct inode *old_inode, struct dentry *old_dentry,
-+ struct inode *new_inode, struct dentry *new_dentry)
-+{
-+ return may_rename(old_inode, old_dentry, new_inode, new_dentry);
-+}
-+
-+static void selinux_inode_post_rename(struct inode *old_inode, struct dentry *old_dentry,
-+ struct inode *new_inode, struct dentry *new_dentry)
-+{
-+ return;
-+}
-+
-+static int selinux_inode_readlink(struct dentry *dentry)
-+{
-+ return dentry_has_perm(current, NULL, dentry, FILE__READ);
-+}
-+
-+static int selinux_inode_follow_link(struct dentry *dentry, struct nameidata *nameidata)
-+{
-+ int rc;
-+
-+ rc = secondary_ops->inode_follow_link(dentry,nameidata);
-+ if (rc)
-+ return rc;
-+ return dentry_has_perm(current, NULL, dentry, FILE__READ);
-+}
-+
-+static int selinux_inode_permission(struct inode *inode, int mask)
-+{
-+ if (!mask) {
-+ /* No permission to check. Existence test. */
-+ return 0;
-+ }
-+
-+ return inode_has_perm(current, inode,
-+ file_mask_to_av(inode->i_mode, mask), NULL, NULL);
-+}
-+
-+static int selinux_inode_setattr(struct dentry *dentry, struct iattr *iattr)
-+{
-+ if (iattr->ia_valid & (ATTR_MODE | ATTR_UID | ATTR_GID |
-+ ATTR_ATIME_SET | ATTR_MTIME_SET))
-+ return dentry_has_perm(current, NULL, dentry, FILE__SETATTR);
-+
-+ return dentry_has_perm(current, NULL, dentry, FILE__WRITE);
-+}
-+
-+static int selinux_inode_getattr(struct vfsmount *mnt, struct dentry *dentry)
-+{
-+ return dentry_has_perm(current, mnt, dentry, FILE__GETATTR);
-+}
-+
-+static int selinux_inode_setxattr(struct dentry *dentry, char *name, void *value, size_t size, int flags)
-+{
-+ struct task_security_struct *tsec = current->security;
-+ struct inode *inode = dentry->d_inode;
-+ struct inode_security_struct *isec = inode->i_security;
-+ struct superblock_security_struct *sbsec;
-+ struct avc_audit_data ad;
-+ u32 newsid;
-+ int rc = 0;
-+
-+ if (strcmp(name, XATTR_NAME_SELINUX)) {
-+ if (!strncmp(name, XATTR_SECURITY_PREFIX,
-+ sizeof XATTR_SECURITY_PREFIX - 1) &&
-+ !capable(CAP_SYS_ADMIN)) {
-+ /* A different attribute in the security namespace.
-+ Restrict to administrator. */
-+ return -EPERM;
-+ }
-+
-+ /* Not an attribute we recognize, so just check the
-+ ordinary setattr permission. */
-+ return dentry_has_perm(current, NULL, dentry, FILE__SETATTR);
-+ }
-+
-+ AVC_AUDIT_DATA_INIT(&ad,FS);
-+ ad.u.fs.dentry = dentry;
-+
-+ rc = avc_has_perm(tsec->sid, isec->sid, isec->sclass,
-+ FILE__RELABELFROM,
-+ &isec->avcr, &ad);
-+ if (rc)
-+ return rc;
-+
-+ rc = security_context_to_sid(value, size, &newsid);
-+ if (rc)
-+ return rc;
-+
-+ rc = avc_has_perm(tsec->sid, newsid, isec->sclass,
-+ FILE__RELABELTO, NULL, &ad);
-+ if (rc)
-+ return rc;
-+
-+ sbsec = inode->i_sb->s_security;
-+ if (!sbsec)
-+ return 0;
-+
-+ return avc_has_perm(newsid,
-+ sbsec->sid,
-+ SECCLASS_FILESYSTEM,
-+ FILESYSTEM__ASSOCIATE,
-+ NULL,
-+ &ad);
-+}
-+
-+static void selinux_inode_post_setxattr(struct dentry *dentry, char *name,
-+ void *value, size_t size, int flags)
-+{
-+ struct inode *inode = dentry->d_inode;
-+ struct inode_security_struct *isec = inode->i_security;
-+ u32 newsid;
-+ int rc;
-+
-+ if (strcmp(name, XATTR_NAME_SELINUX)) {
-+ /* Not an attribute we recognize, so nothing to do. */
-+ return;
-+ }
-+
-+ rc = security_context_to_sid(value, size, &newsid);
-+ if (rc) {
-+ printk(KERN_WARNING "%s: unable to obtain SID for context "
-+ "%s, rc=%d\n", __FUNCTION__, (char*)value, -rc);
-+ return;
-+ }
-+
-+ isec->sid = newsid;
-+ return;
-+}
-+
-+static int selinux_inode_getxattr (struct dentry *dentry, char *name)
-+{
-+ return dentry_has_perm(current, NULL, dentry, FILE__GETATTR);
-+}
-+
-+static int selinux_inode_listxattr (struct dentry *dentry)
-+{
-+ return dentry_has_perm(current, NULL, dentry, FILE__GETATTR);
-+}
-+
-+static int selinux_inode_removexattr (struct dentry *dentry, char *name)
-+{
-+ if (strcmp(name, XATTR_NAME_SELINUX)) {
-+ if (!strncmp(name, XATTR_SECURITY_PREFIX,
-+ sizeof XATTR_SECURITY_PREFIX - 1) &&
-+ !capable(CAP_SYS_ADMIN)) {
-+ /* A different attribute in the security namespace.
-+ Restrict to administrator. */
-+ return -EPERM;
-+ }
-+
-+ /* Not an attribute we recognize, so just check the
-+ ordinary setattr permission. Might want a separate
-+ permission for removexattr. */
-+ return dentry_has_perm(current, NULL, dentry, FILE__SETATTR);
-+ }
-+
-+ /* No one is allowed to remove a SELinux security label.
-+ You can change the label, but all data must be labeled. */
-+ return -EACCES;
-+}
-+
-+static int selinux_inode_getsecurity(struct dentry *dentry, const char *name, void *buffer, size_t size)
-+{
-+ struct inode *inode = dentry->d_inode;
-+ struct inode_security_struct *isec = inode->i_security;
-+ char *context;
-+ unsigned len;
-+ int rc;
-+
-+ /* Permission check handled by selinux_inode_getxattr hook.*/
-+
-+ if (strcmp(name, XATTR_SELINUX_SUFFIX))
-+ return -EOPNOTSUPP;
-+
-+ rc = security_sid_to_context(isec->sid, &context, &len);
-+ if (rc)
-+ return rc;
-+
-+ if (!buffer || !size) {
-+ kfree(context);
-+ return len;
-+ }
-+ if (size < len) {
-+ kfree(context);
-+ return -ERANGE;
-+ }
-+ memcpy(buffer, context, len);
-+ kfree(context);
-+ return len;
-+}
-+
-+static int selinux_inode_setsecurity(struct dentry *dentry, const char *name,
-+ const void *value, size_t size, int flags)
-+{
-+ struct inode *inode = dentry->d_inode;
-+ struct inode_security_struct *isec = inode->i_security;
-+ u32 newsid;
-+ int rc;
-+
-+ if (strcmp(name, XATTR_SELINUX_SUFFIX))
-+ return -EOPNOTSUPP;
-+
-+ if (!value || !size)
-+ return -EACCES;
-+
-+ rc = security_context_to_sid((void*)value, size, &newsid);
-+ if (rc)
-+ return rc;
-+
-+ isec->sid = newsid;
-+ return 0;
-+}
-+
-+static int selinux_inode_listsecurity(struct dentry *dentry, char *buffer)
-+{
-+ const int len = sizeof(XATTR_NAME_SELINUX);
-+ if (buffer)
-+ memcpy(buffer, XATTR_NAME_SELINUX, len);
-+ return len;
-+}
-+
-+/* file security operations */
-+
-+static int selinux_file_permission(struct file *file, int mask)
-+{
-+ struct inode *inode = file->f_dentry->d_inode;
-+
-+ if (!mask) {
-+ /* No permission to check. Existence test. */
-+ return 0;
-+ }
-+
-+ /* file_mask_to_av won't add FILE__WRITE if MAY_APPEND is set */
-+ if ((file->f_flags & O_APPEND) && (mask & MAY_WRITE))
-+ mask |= MAY_APPEND;
-+
-+ return file_has_perm(current, file,
-+ file_mask_to_av(inode->i_mode, mask));
-+}
-+
-+static int selinux_file_alloc_security(struct file *file)
-+{
-+ return file_alloc_security(file);
-+}
-+
-+static void selinux_file_free_security(struct file *file)
-+{
-+ file_free_security(file);
-+}
-+
-+static int selinux_file_ioctl(struct file *file, unsigned int cmd,
-+ unsigned long arg)
-+{
-+ int error = 0;
-+
-+ switch (cmd) {
-+ case FIONREAD:
-+ /* fall through */
-+ case FIBMAP:
-+ /* fall through */
-+ case FIGETBSZ:
-+ /* fall through */
-+ case EXT2_IOC_GETFLAGS:
-+ /* fall through */
-+ case EXT2_IOC_GETVERSION:
-+ error = file_has_perm(current, file, FILE__GETATTR);
-+ break;
-+
-+ case EXT2_IOC_SETFLAGS:
-+ /* fall through */
-+ case EXT2_IOC_SETVERSION:
-+ error = file_has_perm(current, file, FILE__SETATTR);
-+ break;
-+
-+ /* sys_ioctl() checks */
-+ case FIONBIO:
-+ /* fall through */
-+ case FIOASYNC:
-+ error = file_has_perm(current, file, 0);
-+ break;
-+
-+ case KDSKBENT:
-+ case KDSKBSENT:
-+ if (!capable(CAP_SYS_TTY_CONFIG))
-+ error = -EPERM;
-+ break;
-+
-+ /* default case assumes that the command will go
-+ * to the file's ioctl() function.
-+ */
-+ default:
-+ error = file_has_perm(current, file, FILE__IOCTL);
-+
-+ }
-+ return error;
-+}
-+
-+static int selinux_file_mmap(struct file *file, unsigned long prot, unsigned long flags)
-+{
-+ u32 av;
-+
-+ if (file) {
-+ /* read access is always possible with a mapping */
-+ av = FILE__READ;
-+
-+ /* write access only matters if the mapping is shared */
-+ if ((flags & MAP_TYPE) == MAP_SHARED && (prot & PROT_WRITE))
-+ av |= FILE__WRITE;
-+
-+ if (prot & PROT_EXEC)
-+ av |= FILE__EXECUTE;
-+
-+ return file_has_perm(current, file, av);
-+ }
-+ return 0;
-+}
-+
-+static int selinux_file_mprotect(struct vm_area_struct *vma,
-+ unsigned long prot)
-+{
-+ return selinux_file_mmap(vma->vm_file, prot, vma->vm_flags);
-+}
-+
-+static int selinux_file_lock(struct file *file, unsigned int cmd)
-+{
-+ return file_has_perm(current, file, FILE__LOCK);
-+}
-+
-+static int selinux_file_fcntl(struct file *file, unsigned int cmd,
-+ unsigned long arg)
-+{
-+ int err = 0;
-+
-+ switch (cmd) {
-+ case F_SETFL:
-+ if (!file->f_dentry || !file->f_dentry->d_inode) {
-+ err = -EINVAL;
-+ break;
-+ }
-+
-+ if ((file->f_flags & O_APPEND) && !(arg & O_APPEND)) {
-+ err = file_has_perm(current, file,FILE__WRITE);
-+ break;
-+ }
-+ /* fall through */
-+ case F_SETOWN:
-+ case F_SETSIG:
-+ case F_GETFL:
-+ case F_GETOWN:
-+ case F_GETSIG:
-+ /* Just check FD__USE permission */
-+ err = file_has_perm(current, file, 0);
-+ break;
-+ case F_GETLK:
-+ case F_SETLK:
-+ case F_SETLKW:
-+ case F_GETLK64:
-+ case F_SETLK64:
-+ case F_SETLKW64:
-+ if (!file->f_dentry || !file->f_dentry->d_inode) {
-+ err = -EINVAL;
-+ break;
-+ }
-+ err = file_has_perm(current, file, FILE__LOCK);
-+ break;
-+ }
-+
-+ return err;
-+}
-+
-+static int selinux_file_set_fowner(struct file *file)
-+{
-+ struct task_security_struct *tsec;
-+ struct file_security_struct *fsec;
-+
-+ tsec = current->security;
-+ fsec = file->f_security;
-+ fsec->fown_sid = tsec->sid;
-+
-+ return 0;
-+}
-+
-+static int selinux_file_send_sigiotask(struct task_struct *tsk,
-+ struct fown_struct *fown,
-+ int fd, int reason)
-+{
-+ struct file *file;
-+ u32 perm;
-+ struct task_security_struct *tsec;
-+ struct file_security_struct *fsec;
-+
-+ /* struct fown_struct is never outside the context of a struct file */
-+ file = (struct file *)((long)fown - offsetof(struct file,f_owner));
-+
-+ tsec = tsk->security;
-+ fsec = file->f_security;
-+
-+ if (!fown->signum)
-+ perm = signal_to_av(SIGIO); /* as per send_sigio_to_task */
-+ else
-+ perm = signal_to_av(fown->signum);
-+
-+ return avc_has_perm(fsec->fown_sid, tsec->sid,
-+ SECCLASS_PROCESS, perm, NULL, NULL);
-+}
-+
-+static int selinux_file_receive(struct file *file)
-+{
-+ return file_has_perm(current, file, file_to_av(file));
-+}
-+
-+/* task security operations */
-+
-+static int selinux_task_create(unsigned long clone_flags)
-+{
-+ return task_has_perm(current, current, PROCESS__FORK);
-+}
-+
-+static int selinux_task_alloc_security(struct task_struct *tsk)
-+{
-+ struct task_security_struct *tsec1, *tsec2;
-+ int rc;
-+
-+ tsec1 = current->security;
-+
-+ rc = task_alloc_security(tsk);
-+ if (rc)
-+ return rc;
-+ tsec2 = tsk->security;
-+
-+ tsec2->osid = tsec1->osid;
-+ tsec2->sid = tsec1->sid;
-+
-+ /* Retain the exec and create SIDs across fork */
-+ tsec2->exec_sid = tsec1->exec_sid;
-+ tsec2->create_sid = tsec1->create_sid;
-+
-+ return 0;
-+}
-+
-+static void selinux_task_free_security(struct task_struct *tsk)
-+{
-+ task_free_security(tsk);
-+}
-+
-+static int selinux_task_setuid(uid_t id0, uid_t id1, uid_t id2, int flags)
-+{
-+ /* Since setuid only affects the current process, and
-+ since the SELinux controls are not based on the Linux
-+ identity attributes, SELinux does not need to control
-+ this operation. However, SELinux does control the use
-+ of the CAP_SETUID and CAP_SETGID capabilities using the
-+ capable hook. */
-+ return 0;
-+}
-+
-+static int selinux_task_post_setuid(uid_t id0, uid_t id1, uid_t id2, int flags)
-+{
-+ return secondary_ops->task_post_setuid(id0,id1,id2,flags);
-+}
-+
-+static int selinux_task_setgid(gid_t id0, gid_t id1, gid_t id2, int flags)
-+{
-+ /* See the comment for setuid above. */
-+ return 0;
-+}
-+
-+static int selinux_task_setpgid(struct task_struct *p, pid_t pgid)
-+{
-+ return task_has_perm(current, p, PROCESS__SETPGID);
-+}
-+
-+static int selinux_task_getpgid(struct task_struct *p)
-+{
-+ return task_has_perm(current, p, PROCESS__GETPGID);
-+}
-+
-+static int selinux_task_getsid(struct task_struct *p)
-+{
-+ return task_has_perm(current, p, PROCESS__GETSESSION);
-+}
-+
-+static int selinux_task_setgroups(int gidsetsize, gid_t *grouplist)
-+{
-+ /* See the comment for setuid above. */
-+ return 0;
-+}
-+
-+static int selinux_task_setnice(struct task_struct *p, int nice)
-+{
-+ return task_has_perm(current,p, PROCESS__SETSCHED);
-+}
-+
-+static int selinux_task_setrlimit(unsigned int resource, struct rlimit *new_rlim)
-+{
-+ /* SELinux does not currently provide a process
-+ resource limit policy based on security contexts.
-+ It does control the use of the CAP_SYS_RESOURCE capability
-+ using the capable hook. */
-+ return 0;
-+}
-+
-+static int selinux_task_setscheduler(struct task_struct *p, int policy, struct sched_param *lp)
-+{
-+ struct task_security_struct *tsec1, *tsec2;
-+
-+ tsec1 = current->security;
-+ tsec2 = p->security;
-+
-+ /* No auditing from the setscheduler hook, since the runqueue lock
-+ is held and the system will deadlock if we try to log an audit
-+ message. */
-+ return avc_has_perm_noaudit(tsec1->sid, tsec2->sid,
-+ SECCLASS_PROCESS, PROCESS__SETSCHED,
-+ &tsec2->avcr, NULL);
-+}
-+
-+static int selinux_task_getscheduler(struct task_struct *p)
-+{
-+ return task_has_perm(current, p, PROCESS__GETSCHED);
-+}
-+
-+static int selinux_task_kill(struct task_struct *p, struct siginfo *info, int sig)
-+{
-+ u32 perm;
-+
-+ if (info && ((unsigned long)info == 1 ||
-+ (unsigned long)info == 2 || SI_FROMKERNEL(info)))
-+ return 0;
-+
-+ if (!sig)
-+ perm = PROCESS__SIGNULL; /* null signal; existence test */
-+ else
-+ perm = signal_to_av(sig);
-+
-+ return task_has_perm(current, p, perm);
-+}
-+
-+static int selinux_task_prctl(int option,
-+ unsigned long arg2,
-+ unsigned long arg3,
-+ unsigned long arg4,
-+ unsigned long arg5)
-+{
-+ /* The current prctl operations do not appear to require
-+ any SELinux controls since they merely observe or modify
-+ the state of the current process. */
-+ return 0;
-+}
-+
-+static int selinux_task_wait(struct task_struct *p)
-+{
-+ u32 perm;
-+
-+ perm = signal_to_av(p->exit_signal);
-+
-+ return task_has_perm(p, current, perm);
-+}
-+
-+static void selinux_task_reparent_to_init(struct task_struct *p)
-+{
-+ struct task_security_struct *tsec;
-+
-+ secondary_ops->task_reparent_to_init(p);
-+
-+ tsec = p->security;
-+ tsec->osid = tsec->sid;
-+ tsec->sid = SECINITSID_KERNEL;
-+ return;
-+}
-+
-+static void selinux_task_to_inode(struct task_struct *p,
-+ struct inode *inode)
-+{
-+ struct task_security_struct *tsec = p->security;
-+ struct inode_security_struct *isec = inode->i_security;
-+
-+ isec->sid = tsec->sid;
-+ isec->initialized = 1;
-+ return;
-+}
-+
-+#ifdef CONFIG_SECURITY_NETWORK
-+
-+/* socket security operations */
-+static int socket_has_perm(struct task_struct *task, struct socket *sock,
-+ u32 perms)
-+{
-+ struct inode_security_struct *isec;
-+ struct task_security_struct *tsec;
-+ struct avc_audit_data ad;
-+ int err;
-+
-+ tsec = task->security;
-+ isec = SOCK_INODE(sock)->i_security;
-+
-+ AVC_AUDIT_DATA_INIT(&ad,NET);
-+ ad.u.net.sk = sock->sk;
-+ err = avc_has_perm(tsec->sid, isec->sid, isec->sclass,
-+ perms, &isec->avcr, &ad);
-+
-+ return err;
-+}
-+
-+static int selinux_socket_create(int family, int type, int protocol)
-+{
-+ int err;
-+ struct task_security_struct *tsec;
-+
-+ tsec = current->security;
-+
-+ err = avc_has_perm(tsec->sid, tsec->sid,
-+ socket_type_to_security_class(family, type),
-+ SOCKET__CREATE, NULL, NULL);
-+
-+ return err;
-+}
-+
-+static void selinux_socket_post_create(struct socket *sock, int family, int type, int protocol)
-+{
-+ int err;
-+ struct inode_security_struct *isec;
-+ struct task_security_struct *tsec;
-+
-+ err = inode_doinit(SOCK_INODE(sock));
-+ if (err < 0)
-+ return;
-+ isec = SOCK_INODE(sock)->i_security;
-+
-+ tsec = current->security;
-+ isec->sclass = socket_type_to_security_class(family, type);
-+ isec->sid = tsec->sid;
-+
-+ return;
-+}
-+
-+/* Range of port numbers used to automatically bind.
-+ Need to determine whether we should perform a name_bind
-+ permission check between the socket and the port number. */
-+#define ip_local_port_range_0 sysctl_local_port_range[0]
-+#define ip_local_port_range_1 sysctl_local_port_range[1]
-+
-+static int selinux_socket_bind(struct socket *sock, struct sockaddr *address, int addrlen)
-+{
-+ int err;
-+
-+ err = socket_has_perm(current, sock, SOCKET__BIND);
-+ if (err)
-+ return err;
-+
-+ /*
-+ * If PF_INET, check name_bind permission for the port.
-+ */
-+ if (sock->sk->sk_family == PF_INET) {
-+ struct inode_security_struct *isec;
-+ struct task_security_struct *tsec;
-+ struct avc_audit_data ad;
-+ struct sockaddr_in *addr = (struct sockaddr_in *)address;
-+ unsigned short snum = ntohs(addr->sin_port);
-+ struct sock *sk = sock->sk;
-+ u32 sid;
-+
-+ tsec = current->security;
-+ isec = SOCK_INODE(sock)->i_security;
-+
-+ if (snum&&(snum < max(PROT_SOCK,ip_local_port_range_0) ||
-+ snum > ip_local_port_range_1)) {
-+ err = security_port_sid(sk->sk_family, sk->sk_type,
-+ sk->sk_protocol, snum, &sid);
-+ if (err)
-+ return err;
-+ AVC_AUDIT_DATA_INIT(&ad,NET);
-+ ad.u.net.port = snum;
-+ err = avc_has_perm(isec->sid, sid,
-+ isec->sclass,
-+ SOCKET__NAME_BIND, NULL, &ad);
-+ if (err)
-+ return err;
-+ }
-+ }
-+
-+ return 0;
-+}
-+
-+static int selinux_socket_connect(struct socket *sock, struct sockaddr *address, int addrlen)
-+{
-+ int err;
-+ struct sock *sk = sock->sk;
-+ struct avc_audit_data ad;
-+ struct task_security_struct *tsec;
-+ struct inode_security_struct *isec;
-+
-+ isec = SOCK_INODE(sock)->i_security;
-+
-+ tsec = current->security;
-+
-+ AVC_AUDIT_DATA_INIT(&ad, NET);
-+ ad.u.net.sk = sk;
-+ err = avc_has_perm(tsec->sid, isec->sid, isec->sclass,
-+ SOCKET__CONNECT, &isec->avcr, &ad);
-+ if (err)
-+ return err;
-+
-+ return 0;
-+}
-+
-+static int selinux_socket_listen(struct socket *sock, int backlog)
-+{
-+ int err;
-+ struct task_security_struct *tsec;
-+ struct inode_security_struct *isec;
-+ struct avc_audit_data ad;
-+
-+ tsec = current->security;
-+
-+ isec = SOCK_INODE(sock)->i_security;
-+
-+ AVC_AUDIT_DATA_INIT(&ad, NET);
-+ ad.u.net.sk = sock->sk;
-+
-+ err = avc_has_perm(tsec->sid, isec->sid, isec->sclass,
-+ SOCKET__LISTEN, &isec->avcr, &ad);
-+ if (err)
-+ return err;
-+
-+ return 0;
-+}
-+
-+static int selinux_socket_accept(struct socket *sock, struct socket *newsock)
-+{
-+ int err;
-+ struct task_security_struct *tsec;
-+ struct inode_security_struct *isec;
-+ struct inode_security_struct *newisec;
-+ struct avc_audit_data ad;
-+
-+ tsec = current->security;
-+
-+ isec = SOCK_INODE(sock)->i_security;
-+
-+ AVC_AUDIT_DATA_INIT(&ad, NET);
-+ ad.u.net.sk = sock->sk;
-+
-+ err = avc_has_perm(tsec->sid, isec->sid, isec->sclass,
-+ SOCKET__ACCEPT, &isec->avcr, &ad);
-+ if (err)
-+ return err;
-+
-+ err = inode_doinit(SOCK_INODE(newsock));
-+ if (err < 0)
-+ return err;
-+ newisec = SOCK_INODE(newsock)->i_security;
-+
-+ newisec->sclass = isec->sclass;
-+ newisec->sid = isec->sid;
-+
-+ return 0;
-+}
-+
-+static int selinux_socket_sendmsg(struct socket *sock, struct msghdr *msg,
-+ int size)
-+{
-+ struct task_security_struct *tsec;
-+ struct inode_security_struct *isec;
-+ struct avc_audit_data ad;
-+ struct sock *sk;
-+ int err;
-+
-+ isec = SOCK_INODE(sock)->i_security;
-+
-+ tsec = current->security;
-+
-+ sk = sock->sk;
-+
-+ AVC_AUDIT_DATA_INIT(&ad, NET);
-+ ad.u.net.sk = sk;
-+ err = avc_has_perm(tsec->sid, isec->sid, isec->sclass,
-+ SOCKET__WRITE, &isec->avcr, &ad);
-+ if (err)
-+ return err;
-+
-+ return 0;
-+}
-+
-+static int selinux_socket_recvmsg(struct socket *sock, struct msghdr *msg,
-+ int size, int flags)
-+{
-+ struct inode_security_struct *isec;
-+ struct task_security_struct *tsec;
-+ struct avc_audit_data ad;
-+ int err;
-+
-+ isec = SOCK_INODE(sock)->i_security;
-+ tsec = current->security;
-+
-+ AVC_AUDIT_DATA_INIT(&ad,NET);
-+ ad.u.net.sk = sock->sk;
-+ err = avc_has_perm(tsec->sid, isec->sid, isec->sclass,
-+ SOCKET__READ, &isec->avcr, &ad);
-+ if (err)
-+ return err;
-+
-+ return 0;
-+}
-+
-+static int selinux_socket_getsockname(struct socket *sock)
-+{
-+ struct inode_security_struct *isec;
-+ struct task_security_struct *tsec;
-+ struct avc_audit_data ad;
-+ int err;
-+
-+ tsec = current->security;
-+ isec = SOCK_INODE(sock)->i_security;
-+
-+ AVC_AUDIT_DATA_INIT(&ad,NET);
-+ ad.u.net.sk = sock->sk;
-+ err = avc_has_perm(tsec->sid, isec->sid, isec->sclass,
-+ SOCKET__GETATTR, &isec->avcr, &ad);
-+ if (err)
-+ return err;
-+
-+ return 0;
-+}
-+
-+static int selinux_socket_getpeername(struct socket *sock)
-+{
-+ struct inode_security_struct *isec;
-+ struct task_security_struct *tsec;
-+ struct avc_audit_data ad;
-+ int err;
-+
-+ tsec = current->security;
-+ isec = SOCK_INODE(sock)->i_security;
-+
-+ AVC_AUDIT_DATA_INIT(&ad,NET);
-+ ad.u.net.sk = sock->sk;
-+ err = avc_has_perm(tsec->sid, isec->sid, isec->sclass,
-+ SOCKET__GETATTR, &isec->avcr, &ad);
-+ if (err)
-+ return err;
-+
-+ return 0;
-+}
-+
-+static int selinux_socket_setsockopt(struct socket *sock,int level,int optname)
-+{
-+ return socket_has_perm(current, sock, SOCKET__SETOPT);
-+}
-+
-+static int selinux_socket_getsockopt(struct socket *sock, int level,
-+ int optname)
-+{
-+ return socket_has_perm(current, sock, SOCKET__GETOPT);
-+}
-+
-+static int selinux_socket_shutdown(struct socket *sock, int how)
-+{
-+ return socket_has_perm(current, sock, SOCKET__SHUTDOWN);
-+}
-+
-+static int selinux_socket_unix_stream_connect(struct socket *sock,
-+ struct socket *other,
-+ struct sock *newsk)
-+{
-+ struct inode_security_struct *isec;
-+ struct inode_security_struct *other_isec;
-+ struct avc_audit_data ad;
-+ int err;
-+
-+ isec = SOCK_INODE(sock)->i_security;
-+ other_isec = SOCK_INODE(other)->i_security;
-+
-+ AVC_AUDIT_DATA_INIT(&ad,NET);
-+ ad.u.net.sk = other->sk;
-+
-+ err = avc_has_perm(isec->sid, other_isec->sid,
-+ isec->sclass,
-+ UNIX_STREAM_SOCKET__CONNECTTO,
-+ &other_isec->avcr, &ad);
-+ if (err)
-+ return err;
-+
-+ return 0;
-+}
-+
-+static int selinux_socket_unix_may_send(struct socket *sock,
-+ struct socket *other)
-+{
-+ struct inode_security_struct *isec;
-+ struct inode_security_struct *other_isec;
-+ struct avc_audit_data ad;
-+ int err;
-+
-+ isec = SOCK_INODE(sock)->i_security;
-+ other_isec = SOCK_INODE(other)->i_security;
-+
-+ AVC_AUDIT_DATA_INIT(&ad,NET);
-+ ad.u.net.sk = other->sk;
-+
-+ err = avc_has_perm(isec->sid, other_isec->sid,
-+ isec->sclass,
-+ SOCKET__SENDTO,
-+ &other_isec->avcr, &ad);
-+ if (err)
-+ return err;
-+
-+ return 0;
-+}
-+
-+#endif
-+
-+static int ipc_alloc_security(struct task_struct *task,
-+ struct kern_ipc_perm *perm,
-+ u16 sclass)
-+{
-+ struct task_security_struct *tsec = task->security;
-+ struct ipc_security_struct *isec;
-+
-+ isec = kmalloc(sizeof(struct ipc_security_struct), GFP_KERNEL);
-+ if (!isec)
-+ return -ENOMEM;
-+
-+ memset(isec, 0, sizeof(struct ipc_security_struct));
-+ isec->magic = SELINUX_MAGIC;
-+ isec->sclass = sclass;
-+ isec->ipc_perm = perm;
-+ if (tsec) {
-+ isec->sid = tsec->sid;
-+ } else {
-+ isec->sid = SECINITSID_UNLABELED;
-+ }
-+ perm->security = isec;
-+
-+ return 0;
-+}
-+
-+static void ipc_free_security(struct kern_ipc_perm *perm)
-+{
-+ struct ipc_security_struct *isec = perm->security;
-+ if (!isec || isec->magic != SELINUX_MAGIC)
-+ return;
-+
-+ perm->security = NULL;
-+ kfree(isec);
-+}
-+
-+static int msg_msg_alloc_security(struct msg_msg *msg)
-+{
-+ struct msg_security_struct *msec;
-+
-+ msec = kmalloc(sizeof(struct msg_security_struct), GFP_KERNEL);
-+ if (!msec)
-+ return -ENOMEM;
-+
-+ memset(msec, 0, sizeof(struct msg_security_struct));
-+ msec->magic = SELINUX_MAGIC;
-+ msec->msg = msg;
-+ msec->sid = SECINITSID_UNLABELED;
-+ msg->security = msec;
-+
-+ return 0;
-+}
-+
-+static void msg_msg_free_security(struct msg_msg *msg)
-+{
-+ struct msg_security_struct *msec = msg->security;
-+ if (!msec || msec->magic != SELINUX_MAGIC)
-+ return;
-+
-+ msg->security = NULL;
-+ kfree(msec);
-+}
-+
-+static int ipc_has_perm(struct kern_ipc_perm *ipc_perms,
-+ u16 sclass, u32 perms)
-+{
-+ struct task_security_struct *tsec;
-+ struct ipc_security_struct *isec;
-+ struct avc_audit_data ad;
-+
-+ tsec = current->security;
-+ isec = ipc_perms->security;
-+
-+ AVC_AUDIT_DATA_INIT(&ad, IPC);
-+ ad.u.ipc_id = ipc_perms->key;
-+
-+ return avc_has_perm(tsec->sid, isec->sid, sclass,
-+ perms, &isec->avcr, &ad);
-+}
-+
-+static int selinux_msg_msg_alloc_security(struct msg_msg *msg)
-+{
-+ return msg_msg_alloc_security(msg);
-+}
-+
-+static void selinux_msg_msg_free_security(struct msg_msg *msg)
-+{
-+ return msg_msg_free_security(msg);
-+}
-+
-+/* message queue security operations */
-+static int selinux_msg_queue_alloc_security(struct msg_queue *msq)
-+{
-+ struct task_security_struct *tsec;
-+ struct ipc_security_struct *isec;
-+ struct avc_audit_data ad;
-+ int rc;
-+
-+ rc = ipc_alloc_security(current, &msq->q_perm, SECCLASS_MSGQ);
-+ if (rc)
-+ return rc;
-+
-+ tsec = current->security;
-+ isec = msq->q_perm.security;
-+
-+ AVC_AUDIT_DATA_INIT(&ad, IPC);
-+ ad.u.ipc_id = msq->q_perm.key;
-+
-+ rc = avc_has_perm(tsec->sid, isec->sid, SECCLASS_MSGQ,
-+ MSGQ__CREATE, &isec->avcr, &ad);
-+ if (rc) {
-+ ipc_free_security(&msq->q_perm);
-+ return rc;
-+ }
-+ return 0;
-+}
-+
-+static void selinux_msg_queue_free_security(struct msg_queue *msq)
-+{
-+ ipc_free_security(&msq->q_perm);
-+}
-+
-+static int selinux_msg_queue_associate(struct msg_queue *msq, int msqflg)
-+{
-+ struct task_security_struct *tsec;
-+ struct ipc_security_struct *isec;
-+ struct avc_audit_data ad;
-+
-+ tsec = current->security;
-+ isec = msq->q_perm.security;
-+
-+ AVC_AUDIT_DATA_INIT(&ad, IPC);
-+ ad.u.ipc_id = msq->q_perm.key;
-+
-+ return avc_has_perm(tsec->sid, isec->sid, SECCLASS_MSGQ,
-+ MSGQ__ASSOCIATE, &isec->avcr, &ad);
-+}
-+
-+static int selinux_msg_queue_msgctl(struct msg_queue *msq, int cmd)
-+{
-+ int err;
-+ int perms;
-+
-+ switch(cmd) {
-+ case IPC_INFO:
-+ case MSG_INFO:
-+ /* No specific object, just general system-wide information. */
-+ return task_has_system(current, SYSTEM__IPC_INFO);
-+ case IPC_STAT:
-+ case MSG_STAT:
-+ perms = MSGQ__GETATTR | MSGQ__ASSOCIATE;
-+ break;
-+ case IPC_SET:
-+ perms = MSGQ__SETATTR;
-+ break;
-+ case IPC_RMID:
-+ perms = MSGQ__DESTROY;
-+ break;
-+ default:
-+ return 0;
-+ }
-+
-+ err = ipc_has_perm(&msq->q_perm, SECCLASS_MSGQ, perms);
-+ return err;
-+}
-+
-+static int selinux_msg_queue_msgsnd(struct msg_queue *msq, struct msg_msg *msg, int msqflg)
-+{
-+ struct task_security_struct *tsec;
-+ struct ipc_security_struct *isec;
-+ struct msg_security_struct *msec;
-+ struct avc_audit_data ad;
-+ int rc;
-+
-+ tsec = current->security;
-+ isec = msq->q_perm.security;
-+ msec = msg->security;
-+
-+ /*
-+ * First time through, need to assign label to the message
-+ */
-+ if (msec->sid == SECINITSID_UNLABELED) {
-+ /*
-+ * Compute new sid based on current process and
-+ * message queue this message will be stored in
-+ */
-+ rc = security_transition_sid(tsec->sid,
-+ isec->sid,
-+ SECCLASS_MSG,
-+ &msec->sid);
-+ if (rc)
-+ return rc;
-+ }
-+
-+ AVC_AUDIT_DATA_INIT(&ad, IPC);
-+ ad.u.ipc_id = msq->q_perm.key;
-+
-+ /* Can this process write to the queue? */
-+ rc = avc_has_perm(tsec->sid, isec->sid, SECCLASS_MSGQ,
-+ MSGQ__WRITE, &isec->avcr, &ad);
-+ if (!rc)
-+ /* Can this process send the message */
-+ rc = avc_has_perm(tsec->sid, msec->sid,
-+ SECCLASS_MSG, MSG__SEND,
-+ &msec->avcr, &ad);
-+ if (!rc)
-+ /* Can the message be put in the queue? */
-+ rc = avc_has_perm(msec->sid, isec->sid,
-+ SECCLASS_MSGQ, MSGQ__ENQUEUE,
-+ &isec->avcr, &ad);
-+
-+ return rc;
-+}
-+
-+static int selinux_msg_queue_msgrcv(struct msg_queue *msq, struct msg_msg *msg,
-+ struct task_struct *target,
-+ long type, int mode)
-+{
-+ struct task_security_struct *tsec;
-+ struct ipc_security_struct *isec;
-+ struct msg_security_struct *msec;
-+ struct avc_audit_data ad;
-+ int rc;
-+
-+ tsec = target->security;
-+ isec = msq->q_perm.security;
-+ msec = msg->security;
-+
-+ AVC_AUDIT_DATA_INIT(&ad, IPC);
-+ ad.u.ipc_id = msq->q_perm.key;
-+
-+ rc = avc_has_perm(tsec->sid, isec->sid,
-+ SECCLASS_MSGQ, MSGQ__READ,
-+ &isec->avcr, &ad);
-+ if (!rc)
-+ rc = avc_has_perm(tsec->sid, msec->sid,
-+ SECCLASS_MSG, MSG__RECEIVE,
-+ &msec->avcr, &ad);
-+ return rc;
-+}
-+
-+/* Shared Memory security operations */
-+static int selinux_shm_alloc_security(struct shmid_kernel *shp)
-+{
-+ struct task_security_struct *tsec;
-+ struct ipc_security_struct *isec;
-+ struct avc_audit_data ad;
-+ int rc;
-+
-+ rc = ipc_alloc_security(current, &shp->shm_perm, SECCLASS_SHM);
-+ if (rc)
-+ return rc;
-+
-+ tsec = current->security;
-+ isec = shp->shm_perm.security;
-+
-+ AVC_AUDIT_DATA_INIT(&ad, IPC);
-+ ad.u.ipc_id = shp->shm_perm.key;
-+
-+ rc = avc_has_perm(tsec->sid, isec->sid, SECCLASS_SHM,
-+ SHM__CREATE, &isec->avcr, &ad);
-+ if (rc) {
-+ ipc_free_security(&shp->shm_perm);
-+ return rc;
-+ }
-+ return 0;
-+}
-+
-+static void selinux_shm_free_security(struct shmid_kernel *shp)
-+{
-+ ipc_free_security(&shp->shm_perm);
-+}
-+
-+static int selinux_shm_associate(struct shmid_kernel *shp, int shmflg)
-+{
-+ struct task_security_struct *tsec;
-+ struct ipc_security_struct *isec;
-+ struct avc_audit_data ad;
-+
-+ tsec = current->security;
-+ isec = shp->shm_perm.security;
-+
-+ AVC_AUDIT_DATA_INIT(&ad, IPC);
-+ ad.u.ipc_id = shp->shm_perm.key;
-+
-+ return avc_has_perm(tsec->sid, isec->sid, SECCLASS_SHM,
-+ SHM__ASSOCIATE, &isec->avcr, &ad);
-+}
-+
-+/* Note, at this point, shp is locked down */
-+static int selinux_shm_shmctl(struct shmid_kernel *shp, int cmd)
-+{
-+ int perms;
-+ int err;
-+
-+ switch(cmd) {
-+ case IPC_INFO:
-+ case SHM_INFO:
-+ /* No specific object, just general system-wide information. */
-+ return task_has_system(current, SYSTEM__IPC_INFO);
-+ case IPC_STAT:
-+ case SHM_STAT:
-+ perms = SHM__GETATTR | SHM__ASSOCIATE;
-+ break;
-+ case IPC_SET:
-+ perms = SHM__SETATTR;
-+ break;
-+ case SHM_LOCK:
-+ case SHM_UNLOCK:
-+ perms = SHM__LOCK;
-+ break;
-+ case IPC_RMID:
-+ perms = SHM__DESTROY;
-+ break;
-+ default:
-+ return 0;
-+ }
-+
-+ err = ipc_has_perm(&shp->shm_perm, SECCLASS_SHM, perms);
-+ return err;
-+}
-+
-+static int selinux_shm_shmat(struct shmid_kernel *shp,
-+ char *shmaddr, int shmflg)
-+{
-+ u32 perms;
-+
-+ if (shmflg & SHM_RDONLY)
-+ perms = SHM__READ;
-+ else
-+ perms = SHM__READ | SHM__WRITE;
-+
-+ return ipc_has_perm(&shp->shm_perm, SECCLASS_SHM, perms);
-+}
-+
-+/* Semaphore security operations */
-+static int selinux_sem_alloc_security(struct sem_array *sma)
-+{
-+ struct task_security_struct *tsec;
-+ struct ipc_security_struct *isec;
-+ struct avc_audit_data ad;
-+ int rc;
-+
-+ rc = ipc_alloc_security(current, &sma->sem_perm, SECCLASS_SEM);
-+ if (rc)
-+ return rc;
-+
-+ tsec = current->security;
-+ isec = sma->sem_perm.security;
-+
-+ AVC_AUDIT_DATA_INIT(&ad, IPC);
-+ ad.u.ipc_id = sma->sem_perm.key;
-+
-+ rc = avc_has_perm(tsec->sid, isec->sid, SECCLASS_SEM,
-+ SEM__CREATE, &isec->avcr, &ad);
-+ if (rc) {
-+ ipc_free_security(&sma->sem_perm);
-+ return rc;
-+ }
-+ return 0;
-+}
-+
-+static void selinux_sem_free_security(struct sem_array *sma)
-+{
-+ ipc_free_security(&sma->sem_perm);
-+}
-+
-+static int selinux_sem_associate(struct sem_array *sma, int semflg)
-+{
-+ struct task_security_struct *tsec;
-+ struct ipc_security_struct *isec;
-+ struct avc_audit_data ad;
-+
-+ tsec = current->security;
-+ isec = sma->sem_perm.security;
-+
-+ AVC_AUDIT_DATA_INIT(&ad, IPC);
-+ ad.u.ipc_id = sma->sem_perm.key;
-+
-+ return avc_has_perm(tsec->sid, isec->sid, SECCLASS_SEM,
-+ SEM__ASSOCIATE, &isec->avcr, &ad);
-+}
-+
-+/* Note, at this point, sma is locked down */
-+static int selinux_sem_semctl(struct sem_array *sma, int cmd)
-+{
-+ int err;
-+ u32 perms;
-+
-+ switch(cmd) {
-+ case IPC_INFO:
-+ case SEM_INFO:
-+ /* No specific object, just general system-wide information. */
-+ return task_has_system(current, SYSTEM__IPC_INFO);
-+ case GETPID:
-+ case GETNCNT:
-+ case GETZCNT:
-+ perms = SEM__GETATTR;
-+ break;
-+ case GETVAL:
-+ case GETALL:
-+ perms = SEM__READ;
-+ break;
-+ case SETVAL:
-+ case SETALL:
-+ perms = SEM__WRITE;
-+ break;
-+ case IPC_RMID:
-+ perms = SEM__DESTROY;
-+ break;
-+ case IPC_SET:
-+ perms = SEM__SETATTR;
-+ break;
-+ case IPC_STAT:
-+ case SEM_STAT:
-+ perms = SEM__GETATTR | SEM__ASSOCIATE;
-+ break;
-+ default:
-+ return 0;
-+ }
-+
-+ err = ipc_has_perm(&sma->sem_perm, SECCLASS_SEM, perms);
-+ return err;
-+}
-+
-+static int selinux_sem_semop(struct sem_array *sma,
-+ struct sembuf *sops, unsigned nsops, int alter)
-+{
-+ u32 perms;
-+
-+ if (alter)
-+ perms = SEM__READ | SEM__WRITE;
-+ else
-+ perms = SEM__READ;
-+
-+ return ipc_has_perm(&sma->sem_perm, SECCLASS_SEM, perms);
-+}
-+
-+static int selinux_ipc_permission(struct kern_ipc_perm *ipcp, short flag)
-+{
-+ struct ipc_security_struct *isec = ipcp->security;
-+ u16 sclass = SECCLASS_IPC;
-+ u32 av = 0;
-+
-+ if (isec && isec->magic == SELINUX_MAGIC)
-+ sclass = isec->sclass;
-+
-+ av = 0;
-+ if (flag & S_IRUGO)
-+ av |= IPC__UNIX_READ;
-+ if (flag & S_IWUGO)
-+ av |= IPC__UNIX_WRITE;
-+
-+ if (av == 0)
-+ return 0;
-+
-+ return ipc_has_perm(ipcp, sclass, av);
-+}
-+
-+/* module stacking operations */
-+int selinux_register_security (const char *name, struct security_operations *ops)
-+{
-+ if (secondary_ops != original_ops) {
-+ printk(KERN_INFO "%s: There is already a secondary security "
-+ "module registered.\n", __FUNCTION__);
-+ return -EINVAL;
-+ }
-+
-+ secondary_ops = ops;
-+
-+ printk(KERN_INFO "%s: Registering secondary module %s\n",
-+ __FUNCTION__,
-+ name);
-+
-+ return 0;
-+}
-+
-+int selinux_unregister_security (const char *name, struct security_operations *ops)
-+{
-+ if (ops != secondary_ops) {
-+ printk (KERN_INFO "%s: trying to unregister a security module "
-+ "that is not registered.\n", __FUNCTION__);
-+ return -EINVAL;
-+ }
-+
-+ secondary_ops = original_ops;
-+
-+ return 0;
-+}
-+
-+static void selinux_d_instantiate (struct dentry *dentry, struct inode *inode)
-+{
-+ if (inode)
-+ inode_doinit_with_dentry(inode, dentry);
-+}
-+
-+static int selinux_getprocattr(struct task_struct *p,
-+ char *name, void *value, size_t size)
-+{
-+ struct task_security_struct *tsec;
-+ u32 sid;
-+ char *context;
-+ size_t len;
-+ int error;
-+
-+ if (current != p) {
-+ error = task_has_perm(current, p, PROCESS__GETATTR);
-+ if (error)
-+ return error;
-+ }
-+
-+ if (!size)
-+ return -ERANGE;
-+
-+ tsec = p->security;
-+
-+ if (!strcmp(name, "current"))
-+ sid = tsec->sid;
-+ else if (!strcmp(name, "prev"))
-+ sid = tsec->osid;
-+ else if (!strcmp(name, "exec"))
-+ sid = tsec->exec_sid;
-+ else if (!strcmp(name, "fscreate"))
-+ sid = tsec->create_sid;
-+ else
-+ return -EINVAL;
-+
-+ if (!sid)
-+ return 0;
-+
-+ error = security_sid_to_context(sid, &context, &len);
-+ if (error)
-+ return error;
-+ if (len > size) {
-+ kfree(context);
-+ return -ERANGE;
-+ }
-+ memcpy(value, context, len);
-+ kfree(context);
-+ return len;
-+}
-+
-+static int selinux_setprocattr(struct task_struct *p,
-+ char *name, void *value, size_t size)
-+{
-+ struct task_security_struct *tsec;
-+ u32 sid = 0;
-+ int error;
-+
-+ if (current != p || !strcmp(name, "current")) {
-+ /* SELinux only allows a process to change its own
-+ security attributes, and it only allows the process
-+ current SID to change via exec. */
-+ return -EACCES;
-+ }
-+
-+ /*
-+ * Basic control over ability to set these attributes at all.
-+ * current == p, but we'll pass them separately in case the
-+ * above restriction is ever removed.
-+ */
-+ if (!strcmp(name, "exec"))
-+ error = task_has_perm(current, p, PROCESS__SETEXEC);
-+ else if (!strcmp(name, "fscreate"))
-+ error = task_has_perm(current, p, PROCESS__SETFSCREATE);
-+ else
-+ error = -EINVAL;
-+ if (error)
-+ return error;
-+
-+ /* Obtain a SID for the context, if one was specified. */
-+ if (size) {
-+ int error;
-+ error = security_context_to_sid(value, size, &sid);
-+ if (error)
-+ return error;
-+ }
-+
-+ /* Permission checking based on the specified context is
-+ performed during the actual operation (execve,
-+ open/mkdir/...), when we know the full context of the
-+ operation. See selinux_bprm_set_security for the execve
-+ checks and may_create for the file creation checks. The
-+ operation will then fail if the context is not permitted. */
-+ tsec = p->security;
-+ if (!strcmp(name, "exec"))
-+ tsec->exec_sid = sid;
-+ else if (!strcmp(name, "fscreate"))
-+ tsec->create_sid = sid;
-+ else
-+ return -EINVAL;
-+
-+ return size;
-+}
-+
-+struct security_operations selinux_ops = {
-+ .ptrace = selinux_ptrace,
-+ .capget = selinux_capget,
-+ .capset_check = selinux_capset_check,
-+ .capset_set = selinux_capset_set,
-+ .sysctl = selinux_sysctl,
-+ .capable = selinux_capable,
-+ .quotactl = selinux_quotactl,
-+ .quota_on = selinux_quota_on,
-+ .syslog = selinux_syslog,
-+ .vm_enough_memory = selinux_vm_enough_memory,
-+
-+ .netlink_send = selinux_netlink_send,
-+ .netlink_recv = selinux_netlink_recv,
-+
-+ .bprm_alloc_security = selinux_bprm_alloc_security,
-+ .bprm_free_security = selinux_bprm_free_security,
-+ .bprm_compute_creds = selinux_bprm_compute_creds,
-+ .bprm_set_security = selinux_bprm_set_security,
-+ .bprm_check_security = selinux_bprm_check_security,
-+ .bprm_secureexec = selinux_bprm_secureexec,
-+
-+ .sb_alloc_security = selinux_sb_alloc_security,
-+ .sb_free_security = selinux_sb_free_security,
-+ .sb_kern_mount = selinux_sb_kern_mount,
-+ .sb_statfs = selinux_sb_statfs,
-+ .sb_mount = selinux_mount,
-+ .sb_umount = selinux_umount,
-+
-+ .inode_alloc_security = selinux_inode_alloc_security,
-+ .inode_free_security = selinux_inode_free_security,
-+ .inode_create = selinux_inode_create,
-+ .inode_post_create = selinux_inode_post_create,
-+ .inode_link = selinux_inode_link,
-+ .inode_post_link = selinux_inode_post_link,
-+ .inode_unlink = selinux_inode_unlink,
-+ .inode_symlink = selinux_inode_symlink,
-+ .inode_post_symlink = selinux_inode_post_symlink,
-+ .inode_mkdir = selinux_inode_mkdir,
-+ .inode_post_mkdir = selinux_inode_post_mkdir,
-+ .inode_rmdir = selinux_inode_rmdir,
-+ .inode_mknod = selinux_inode_mknod,
-+ .inode_post_mknod = selinux_inode_post_mknod,
-+ .inode_rename = selinux_inode_rename,
-+ .inode_post_rename = selinux_inode_post_rename,
-+ .inode_readlink = selinux_inode_readlink,
-+ .inode_follow_link = selinux_inode_follow_link,
-+ .inode_permission = selinux_inode_permission,
-+ .inode_setattr = selinux_inode_setattr,
-+ .inode_getattr = selinux_inode_getattr,
-+ .inode_setxattr = selinux_inode_setxattr,
-+ .inode_post_setxattr = selinux_inode_post_setxattr,
-+ .inode_getxattr = selinux_inode_getxattr,
-+ .inode_listxattr = selinux_inode_listxattr,
-+ .inode_removexattr = selinux_inode_removexattr,
-+ .inode_getsecurity = selinux_inode_getsecurity,
-+ .inode_setsecurity = selinux_inode_setsecurity,
-+ .inode_listsecurity = selinux_inode_listsecurity,
-+
-+ .file_permission = selinux_file_permission,
-+ .file_alloc_security = selinux_file_alloc_security,
-+ .file_free_security = selinux_file_free_security,
-+ .file_ioctl = selinux_file_ioctl,
-+ .file_mmap = selinux_file_mmap,
-+ .file_mprotect = selinux_file_mprotect,
-+ .file_lock = selinux_file_lock,
-+ .file_fcntl = selinux_file_fcntl,
-+ .file_set_fowner = selinux_file_set_fowner,
-+ .file_send_sigiotask = selinux_file_send_sigiotask,
-+ .file_receive = selinux_file_receive,
-+
-+ .task_create = selinux_task_create,
-+ .task_alloc_security = selinux_task_alloc_security,
-+ .task_free_security = selinux_task_free_security,
-+ .task_setuid = selinux_task_setuid,
-+ .task_post_setuid = selinux_task_post_setuid,
-+ .task_setgid = selinux_task_setgid,
-+ .task_setpgid = selinux_task_setpgid,
-+ .task_getpgid = selinux_task_getpgid,
-+ .task_getsid = selinux_task_getsid,
-+ .task_setgroups = selinux_task_setgroups,
-+ .task_setnice = selinux_task_setnice,
-+ .task_setrlimit = selinux_task_setrlimit,
-+ .task_setscheduler = selinux_task_setscheduler,
-+ .task_getscheduler = selinux_task_getscheduler,
-+ .task_kill = selinux_task_kill,
-+ .task_wait = selinux_task_wait,
-+ .task_prctl = selinux_task_prctl,
-+ .task_reparent_to_init = selinux_task_reparent_to_init,
-+ .task_to_inode = selinux_task_to_inode,
-+
-+ .ipc_permission = selinux_ipc_permission,
-+
-+ .msg_msg_alloc_security = selinux_msg_msg_alloc_security,
-+ .msg_msg_free_security = selinux_msg_msg_free_security,
-+
-+ .msg_queue_alloc_security = selinux_msg_queue_alloc_security,
-+ .msg_queue_free_security = selinux_msg_queue_free_security,
-+ .msg_queue_associate = selinux_msg_queue_associate,
-+ .msg_queue_msgctl = selinux_msg_queue_msgctl,
-+ .msg_queue_msgsnd = selinux_msg_queue_msgsnd,
-+ .msg_queue_msgrcv = selinux_msg_queue_msgrcv,
-+
-+ .shm_alloc_security = selinux_shm_alloc_security,
-+ .shm_free_security = selinux_shm_free_security,
-+ .shm_associate = selinux_shm_associate,
-+ .shm_shmctl = selinux_shm_shmctl,
-+ .shm_shmat = selinux_shm_shmat,
-+
-+ .sem_alloc_security = selinux_sem_alloc_security,
-+ .sem_free_security = selinux_sem_free_security,
-+ .sem_associate = selinux_sem_associate,
-+ .sem_semctl = selinux_sem_semctl,
-+ .sem_semop = selinux_sem_semop,
-+
-+ .register_security = selinux_register_security,
-+ .unregister_security = selinux_unregister_security,
-+
-+ .d_instantiate = selinux_d_instantiate,
-+
-+ .getprocattr = selinux_getprocattr,
-+ .setprocattr = selinux_setprocattr,
-+
-+#ifdef CONFIG_SECURITY_NETWORK
-+ .unix_stream_connect = selinux_socket_unix_stream_connect,
-+ .unix_may_send = selinux_socket_unix_may_send,
-+
-+ .socket_create = selinux_socket_create,
-+ .socket_post_create = selinux_socket_post_create,
-+ .socket_bind = selinux_socket_bind,
-+ .socket_connect = selinux_socket_connect,
-+ .socket_listen = selinux_socket_listen,
-+ .socket_accept = selinux_socket_accept,
-+ .socket_sendmsg = selinux_socket_sendmsg,
-+ .socket_recvmsg = selinux_socket_recvmsg,
-+ .socket_getsockname = selinux_socket_getsockname,
-+ .socket_getpeername = selinux_socket_getpeername,
-+ .socket_getsockopt = selinux_socket_getsockopt,
-+ .socket_setsockopt = selinux_socket_setsockopt,
-+ .socket_shutdown = selinux_socket_shutdown,
-+#endif
-+};
-+
-+__init int selinux_init(void)
-+{
-+ struct task_security_struct *tsec;
-+
-+ printk(KERN_INFO "SELinux: Initializing.\n");
-+
-+ /* Set the security state for the initial task. */
-+ if (task_alloc_security(current))
-+ panic("SELinux: Failed to initialize initial task.\n");
-+ tsec = current->security;
-+ tsec->osid = tsec->sid = SECINITSID_KERNEL;
-+
-+ avc_init();
-+
-+ original_ops = secondary_ops = security_ops;
-+ if (!secondary_ops)
-+ panic ("SELinux: No initial security operations\n");
-+ if (register_security (&selinux_ops))
-+ panic("SELinux: Unable to register with kernel.\n");
-+
-+ if (selinux_enforcing) {
-+ printk(KERN_INFO "SELinux: Starting in enforcing mode\n");
-+ } else {
-+ printk(KERN_INFO "SELinux: Starting in permissive mode\n");
-+ }
-+ return 0;
-+}
-+
-+void selinux_complete_init(void)
-+{
-+ printk(KERN_INFO "SELinux: Completing initialization.\n");
-+
-+ /* Set up any superblocks initialized prior to the policy load. */
-+ printk(KERN_INFO "SELinux: Setting up existing superblocks.\n");
-+ spin_lock(&sb_security_lock);
-+next_sb:
-+ if (!list_empty(&superblock_security_head)) {
-+ struct superblock_security_struct *sbsec =
-+ list_entry(superblock_security_head.next,
-+ struct superblock_security_struct,
-+ list);
-+ struct super_block *sb = sbsec->sb;
-+ spin_lock(&sb_lock);
-+ sb->s_count++;
-+ spin_unlock(&sb_lock);
-+ spin_unlock(&sb_security_lock);
-+ down_read(&sb->s_umount);
-+ if (sb->s_root)
-+ superblock_doinit(sb);
-+ drop_super(sb);
-+ spin_lock(&sb_security_lock);
-+ list_del_init(&sbsec->list);
-+ goto next_sb;
-+ }
-+ spin_unlock(&sb_security_lock);
-+
-+ /* Set up any inodes initialized prior to the policy load. */
-+ printk(KERN_INFO "SELinux: Setting up existing inodes.\n");
-+ spin_lock(&inode_security_lock);
-+next_inode:
-+ if (!list_empty(&inode_security_head)) {
-+ struct inode_security_struct *isec =
-+ list_entry(inode_security_head.next,
-+ struct inode_security_struct, list);
-+ struct inode *inode = isec->inode;
-+ spin_unlock(&inode_security_lock);
-+ inode = igrab(inode);
-+ if (inode) {
-+ inode_doinit(inode);
-+ iput(inode);
-+ }
-+ spin_lock(&inode_security_lock);
-+ list_del_init(&isec->list);
-+ goto next_inode;
-+ }
-+ spin_unlock(&inode_security_lock);
-+}
-+
-+/* SELinux requires early initialization in order to label
-+ all processes and objects when they are created. */
-+security_initcall(selinux_init);
-+
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/include/avc.h 2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,159 @@
-+/*
-+ * Access vector cache interface for object managers.
-+ *
-+ * Author : Stephen Smalley, <sds@epoch.ncsc.mil>
-+ */
-+#ifndef _SELINUX_AVC_H_
-+#define _SELINUX_AVC_H_
-+
-+#include <linux/stddef.h>
-+#include <linux/errno.h>
-+#include <linux/kernel.h>
-+#include <linux/kdev_t.h>
-+#include <linux/spinlock.h>
-+#include <asm/system.h>
-+#include "flask.h"
-+#include "av_permissions.h"
-+#include "security.h"
-+
-+#ifdef CONFIG_SECURITY_SELINUX_DEVELOP
-+extern int selinux_enforcing;
-+#else
-+#define selinux_enforcing 1
-+#endif
-+
-+/*
-+ * An entry in the AVC.
-+ */
-+struct avc_entry;
-+
-+/*
-+ * A reference to an AVC entry.
-+ */
-+struct avc_entry_ref {
-+ struct avc_entry *ae;
-+};
-+
-+/* Initialize an AVC entry reference before first use. */
-+static inline void avc_entry_ref_init(struct avc_entry_ref *h)
-+{
-+ h->ae = NULL;
-+}
-+
-+struct task_struct;
-+struct vfsmount;
-+struct dentry;
-+struct inode;
-+struct sock;
-+struct sk_buff;
-+
-+/* Auxiliary data to use in generating the audit record. */
-+struct avc_audit_data {
-+ char type;
-+#define AVC_AUDIT_DATA_FS 1
-+#define AVC_AUDIT_DATA_NET 2
-+#define AVC_AUDIT_DATA_CAP 3
-+#define AVC_AUDIT_DATA_IPC 4
-+ struct task_struct *tsk;
-+ union {
-+ struct {
-+ struct vfsmount *mnt;
-+ struct dentry *dentry;
-+ struct inode *inode;
-+ } fs;
-+ struct {
-+ char *netif;
-+ struct sk_buff *skb;
-+ struct sock *sk;
-+ u16 port;
-+ u32 daddr;
-+ } net;
-+ int cap;
-+ int ipc_id;
-+ } u;
-+};
-+
-+/* Initialize an AVC audit data structure. */
-+#define AVC_AUDIT_DATA_INIT(_d,_t) \
-+ { memset((_d), 0, sizeof(struct avc_audit_data)); (_d)->type = AVC_AUDIT_DATA_##_t; }
-+
-+/*
-+ * AVC statistics
-+ */
-+#define AVC_ENTRY_LOOKUPS 0
-+#define AVC_ENTRY_HITS 1
-+#define AVC_ENTRY_MISSES 2
-+#define AVC_ENTRY_DISCARDS 3
-+#define AVC_CAV_LOOKUPS 4
-+#define AVC_CAV_HITS 5
-+#define AVC_CAV_PROBES 6
-+#define AVC_CAV_MISSES 7
-+#define AVC_NSTATS 8
-+extern unsigned avc_cache_stats[AVC_NSTATS];
-+
-+#ifdef AVC_CACHE_STATS
-+static inline void avc_cache_stats_incr(int type)
-+{
-+ avc_cache_stats[type]++;
-+}
-+
-+static inline void avc_cache_stats_add(int type, unsigned val)
-+{
-+ avc_cache_stats[type] += val;
-+}
-+#else
-+static inline void avc_cache_stats_incr(int type)
-+{ }
-+
-+static inline void avc_cache_stats_add(int type, unsigned val)
-+{ }
-+#endif
-+
-+/*
-+ * AVC display support
-+ */
-+void avc_dump_av(u16 tclass, u32 av);
-+void avc_dump_query(u32 ssid, u32 tsid, u16 tclass);
-+void avc_dump_cache(char *tag);
-+
-+/*
-+ * AVC operations
-+ */
-+
-+void avc_init(void);
-+
-+int avc_lookup(u32 ssid, u32 tsid, u16 tclass,
-+ u32 requested, struct avc_entry_ref *aeref);
-+
-+int avc_insert(u32 ssid, u32 tsid, u16 tclass,
-+ struct avc_entry *ae, struct avc_entry_ref *out_aeref);
-+
-+void avc_audit(u32 ssid, u32 tsid,
-+ u16 tclass, u32 requested,
-+ struct av_decision *avd, int result, struct avc_audit_data *auditdata);
-+
-+int avc_has_perm_noaudit(u32 ssid, u32 tsid,
-+ u16 tclass, u32 requested,
-+ struct avc_entry_ref *aeref, struct av_decision *avd);
-+
-+int avc_has_perm(u32 ssid, u32 tsid,
-+ u16 tclass, u32 requested,
-+ struct avc_entry_ref *aeref, struct avc_audit_data *auditdata);
-+
-+#define AVC_CALLBACK_GRANT 1
-+#define AVC_CALLBACK_TRY_REVOKE 2
-+#define AVC_CALLBACK_REVOKE 4
-+#define AVC_CALLBACK_RESET 8
-+#define AVC_CALLBACK_AUDITALLOW_ENABLE 16
-+#define AVC_CALLBACK_AUDITALLOW_DISABLE 32
-+#define AVC_CALLBACK_AUDITDENY_ENABLE 64
-+#define AVC_CALLBACK_AUDITDENY_DISABLE 128
-+
-+int avc_add_callback(int (*callback)(u32 event, u32 ssid, u32 tsid,
-+ u16 tclass, u32 perms,
-+ u32 *out_retained),
-+ u32 events, u32 ssid, u32 tsid,
-+ u16 tclass, u32 perms);
-+
-+#endif /* _SELINUX_AVC_H_ */
-+
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/include/avc_ss.h 2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,27 @@
-+/*
-+ * Access vector cache interface for the security server.
-+ *
-+ * Author : Stephen Smalley, <sds@epoch.ncsc.mil>
-+ */
-+#ifndef _SELINUX_AVC_SS_H_
-+#define _SELINUX_AVC_SS_H_
-+
-+#include "flask.h"
-+
-+int avc_ss_grant(u32 ssid, u32 tsid, u16 tclass, u32 perms, u32 seqno);
-+
-+int avc_ss_try_revoke(u32 ssid, u32 tsid, u16 tclass, u32 perms, u32 seqno,
-+ u32 *out_retained);
-+
-+int avc_ss_revoke(u32 ssid, u32 tsid, u16 tclass, u32 perms, u32 seqno);
-+
-+int avc_ss_reset(u32 seqno);
-+
-+int avc_ss_set_auditallow(u32 ssid, u32 tsid, u16 tclass, u32 perms,
-+ u32 seqno, u32 enable);
-+
-+int avc_ss_set_auditdeny(u32 ssid, u32 tsid, u16 tclass, u32 perms,
-+ u32 seqno, u32 enable);
-+
-+#endif /* _SELINUX_AVC_SS_H_ */
-+
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/include/av_inherit.h 2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,35 @@
-+/* This file is automatically generated. Do not edit. */
-+/* FLASK */
-+
-+struct av_inherit
-+{
-+ u16 tclass;
-+ char **common_pts;
-+ u32 common_base;
-+};
-+
-+static struct av_inherit av_inherit[] = {
-+ { SECCLASS_DIR, common_file_perm_to_string, 0x00020000UL },
-+ { SECCLASS_FILE, common_file_perm_to_string, 0x00020000UL },
-+ { SECCLASS_LNK_FILE, common_file_perm_to_string, 0x00020000UL },
-+ { SECCLASS_CHR_FILE, common_file_perm_to_string, 0x00020000UL },
-+ { SECCLASS_BLK_FILE, common_file_perm_to_string, 0x00020000UL },
-+ { SECCLASS_SOCK_FILE, common_file_perm_to_string, 0x00020000UL },
-+ { SECCLASS_FIFO_FILE, common_file_perm_to_string, 0x00020000UL },
-+ { SECCLASS_SOCKET, common_socket_perm_to_string, 0x00400000UL },
-+ { SECCLASS_TCP_SOCKET, common_socket_perm_to_string, 0x00400000UL },
-+ { SECCLASS_UDP_SOCKET, common_socket_perm_to_string, 0x00400000UL },
-+ { SECCLASS_RAWIP_SOCKET, common_socket_perm_to_string, 0x00400000UL },
-+ { SECCLASS_NETLINK_SOCKET, common_socket_perm_to_string, 0x00400000UL },
-+ { SECCLASS_PACKET_SOCKET, common_socket_perm_to_string, 0x00400000UL },
-+ { SECCLASS_KEY_SOCKET, common_socket_perm_to_string, 0x00400000UL },
-+ { SECCLASS_UNIX_STREAM_SOCKET, common_socket_perm_to_string, 0x00400000UL },
-+ { SECCLASS_UNIX_DGRAM_SOCKET, common_socket_perm_to_string, 0x00400000UL },
-+ { SECCLASS_IPC, common_ipc_perm_to_string, 0x00000200UL },
-+ { SECCLASS_SEM, common_ipc_perm_to_string, 0x00000200UL },
-+ { SECCLASS_MSGQ, common_ipc_perm_to_string, 0x00000200UL },
-+ { SECCLASS_SHM, common_ipc_perm_to_string, 0x00000200UL },
-+};
-+
-+
-+/* FLASK */
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/include/av_permissions.h 2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,550 @@
-+/* This file is automatically generated. Do not edit. */
-+/* FLASK */
-+
-+#define COMMON_FILE__IOCTL 0x00000001UL
-+#define COMMON_FILE__READ 0x00000002UL
-+#define COMMON_FILE__WRITE 0x00000004UL
-+#define COMMON_FILE__CREATE 0x00000008UL
-+#define COMMON_FILE__GETATTR 0x00000010UL
-+#define COMMON_FILE__SETATTR 0x00000020UL
-+#define COMMON_FILE__LOCK 0x00000040UL
-+#define COMMON_FILE__RELABELFROM 0x00000080UL
-+#define COMMON_FILE__RELABELTO 0x00000100UL
-+#define COMMON_FILE__APPEND 0x00000200UL
-+#define COMMON_FILE__UNLINK 0x00000400UL
-+#define COMMON_FILE__LINK 0x00000800UL
-+#define COMMON_FILE__RENAME 0x00001000UL
-+#define COMMON_FILE__EXECUTE 0x00002000UL
-+#define COMMON_FILE__SWAPON 0x00004000UL
-+#define COMMON_FILE__QUOTAON 0x00008000UL
-+#define COMMON_FILE__MOUNTON 0x00010000UL
-+
-+#define COMMON_SOCKET__IOCTL 0x00000001UL
-+#define COMMON_SOCKET__READ 0x00000002UL
-+#define COMMON_SOCKET__WRITE 0x00000004UL
-+#define COMMON_SOCKET__CREATE 0x00000008UL
-+#define COMMON_SOCKET__GETATTR 0x00000010UL
-+#define COMMON_SOCKET__SETATTR 0x00000020UL
-+#define COMMON_SOCKET__LOCK 0x00000040UL
-+#define COMMON_SOCKET__RELABELFROM 0x00000080UL
-+#define COMMON_SOCKET__RELABELTO 0x00000100UL
-+#define COMMON_SOCKET__APPEND 0x00000200UL
-+#define COMMON_SOCKET__BIND 0x00000400UL
-+#define COMMON_SOCKET__CONNECT 0x00000800UL
-+#define COMMON_SOCKET__LISTEN 0x00001000UL
-+#define COMMON_SOCKET__ACCEPT 0x00002000UL
-+#define COMMON_SOCKET__GETOPT 0x00004000UL
-+#define COMMON_SOCKET__SETOPT 0x00008000UL
-+#define COMMON_SOCKET__SHUTDOWN 0x00010000UL
-+#define COMMON_SOCKET__RECVFROM 0x00020000UL
-+#define COMMON_SOCKET__SENDTO 0x00040000UL
-+#define COMMON_SOCKET__RECV_MSG 0x00080000UL
-+#define COMMON_SOCKET__SEND_MSG 0x00100000UL
-+#define COMMON_SOCKET__NAME_BIND 0x00200000UL
-+
-+#define COMMON_IPC__CREATE 0x00000001UL
-+#define COMMON_IPC__DESTROY 0x00000002UL
-+#define COMMON_IPC__GETATTR 0x00000004UL
-+#define COMMON_IPC__SETATTR 0x00000008UL
-+#define COMMON_IPC__READ 0x00000010UL
-+#define COMMON_IPC__WRITE 0x00000020UL
-+#define COMMON_IPC__ASSOCIATE 0x00000040UL
-+#define COMMON_IPC__UNIX_READ 0x00000080UL
-+#define COMMON_IPC__UNIX_WRITE 0x00000100UL
-+
-+#define FILESYSTEM__MOUNT 0x00000001UL
-+#define FILESYSTEM__REMOUNT 0x00000002UL
-+#define FILESYSTEM__UNMOUNT 0x00000004UL
-+#define FILESYSTEM__GETATTR 0x00000008UL
-+#define FILESYSTEM__RELABELFROM 0x00000010UL
-+#define FILESYSTEM__RELABELTO 0x00000020UL
-+#define FILESYSTEM__TRANSITION 0x00000040UL
-+#define FILESYSTEM__ASSOCIATE 0x00000080UL
-+#define FILESYSTEM__QUOTAMOD 0x00000100UL
-+#define FILESYSTEM__QUOTAGET 0x00000200UL
-+
-+#define DIR__EXECUTE 0x00002000UL
-+#define DIR__UNLINK 0x00000400UL
-+#define DIR__SETATTR 0x00000020UL
-+#define DIR__QUOTAON 0x00008000UL
-+#define DIR__RELABELFROM 0x00000080UL
-+#define DIR__LINK 0x00000800UL
-+#define DIR__WRITE 0x00000004UL
-+#define DIR__IOCTL 0x00000001UL
-+#define DIR__RELABELTO 0x00000100UL
-+#define DIR__READ 0x00000002UL
-+#define DIR__RENAME 0x00001000UL
-+#define DIR__APPEND 0x00000200UL
-+#define DIR__LOCK 0x00000040UL
-+#define DIR__SWAPON 0x00004000UL
-+#define DIR__GETATTR 0x00000010UL
-+#define DIR__MOUNTON 0x00010000UL
-+#define DIR__CREATE 0x00000008UL
-+
-+#define DIR__ADD_NAME 0x00020000UL
-+#define DIR__REMOVE_NAME 0x00040000UL
-+#define DIR__REPARENT 0x00080000UL
-+#define DIR__SEARCH 0x00100000UL
-+#define DIR__RMDIR 0x00200000UL
-+
-+#define FILE__EXECUTE 0x00002000UL
-+#define FILE__UNLINK 0x00000400UL
-+#define FILE__SETATTR 0x00000020UL
-+#define FILE__QUOTAON 0x00008000UL
-+#define FILE__RELABELFROM 0x00000080UL
-+#define FILE__LINK 0x00000800UL
-+#define FILE__WRITE 0x00000004UL
-+#define FILE__IOCTL 0x00000001UL
-+#define FILE__RELABELTO 0x00000100UL
-+#define FILE__READ 0x00000002UL
-+#define FILE__RENAME 0x00001000UL
-+#define FILE__APPEND 0x00000200UL
-+#define FILE__LOCK 0x00000040UL
-+#define FILE__SWAPON 0x00004000UL
-+#define FILE__GETATTR 0x00000010UL
-+#define FILE__MOUNTON 0x00010000UL
-+#define FILE__CREATE 0x00000008UL
-+
-+#define FILE__EXECUTE_NO_TRANS 0x00020000UL
-+#define FILE__ENTRYPOINT 0x00040000UL
-+
-+#define LNK_FILE__EXECUTE 0x00002000UL
-+#define LNK_FILE__UNLINK 0x00000400UL
-+#define LNK_FILE__SETATTR 0x00000020UL
-+#define LNK_FILE__QUOTAON 0x00008000UL
-+#define LNK_FILE__RELABELFROM 0x00000080UL
-+#define LNK_FILE__LINK 0x00000800UL
-+#define LNK_FILE__WRITE 0x00000004UL
-+#define LNK_FILE__IOCTL 0x00000001UL
-+#define LNK_FILE__RELABELTO 0x00000100UL
-+#define LNK_FILE__READ 0x00000002UL
-+#define LNK_FILE__RENAME 0x00001000UL
-+#define LNK_FILE__APPEND 0x00000200UL
-+#define LNK_FILE__LOCK 0x00000040UL
-+#define LNK_FILE__SWAPON 0x00004000UL
-+#define LNK_FILE__GETATTR 0x00000010UL
-+#define LNK_FILE__MOUNTON 0x00010000UL
-+#define LNK_FILE__CREATE 0x00000008UL
-+
-+#define CHR_FILE__EXECUTE 0x00002000UL
-+#define CHR_FILE__UNLINK 0x00000400UL
-+#define CHR_FILE__SETATTR 0x00000020UL
-+#define CHR_FILE__QUOTAON 0x00008000UL
-+#define CHR_FILE__RELABELFROM 0x00000080UL
-+#define CHR_FILE__LINK 0x00000800UL
-+#define CHR_FILE__WRITE 0x00000004UL
-+#define CHR_FILE__IOCTL 0x00000001UL
-+#define CHR_FILE__RELABELTO 0x00000100UL
-+#define CHR_FILE__READ 0x00000002UL
-+#define CHR_FILE__RENAME 0x00001000UL
-+#define CHR_FILE__APPEND 0x00000200UL
-+#define CHR_FILE__LOCK 0x00000040UL
-+#define CHR_FILE__SWAPON 0x00004000UL
-+#define CHR_FILE__GETATTR 0x00000010UL
-+#define CHR_FILE__MOUNTON 0x00010000UL
-+#define CHR_FILE__CREATE 0x00000008UL
-+
-+#define BLK_FILE__EXECUTE 0x00002000UL
-+#define BLK_FILE__UNLINK 0x00000400UL
-+#define BLK_FILE__SETATTR 0x00000020UL
-+#define BLK_FILE__QUOTAON 0x00008000UL
-+#define BLK_FILE__RELABELFROM 0x00000080UL
-+#define BLK_FILE__LINK 0x00000800UL
-+#define BLK_FILE__WRITE 0x00000004UL
-+#define BLK_FILE__IOCTL 0x00000001UL
-+#define BLK_FILE__RELABELTO 0x00000100UL
-+#define BLK_FILE__READ 0x00000002UL
-+#define BLK_FILE__RENAME 0x00001000UL
-+#define BLK_FILE__APPEND 0x00000200UL
-+#define BLK_FILE__LOCK 0x00000040UL
-+#define BLK_FILE__SWAPON 0x00004000UL
-+#define BLK_FILE__GETATTR 0x00000010UL
-+#define BLK_FILE__MOUNTON 0x00010000UL
-+#define BLK_FILE__CREATE 0x00000008UL
-+
-+#define SOCK_FILE__EXECUTE 0x00002000UL
-+#define SOCK_FILE__UNLINK 0x00000400UL
-+#define SOCK_FILE__SETATTR 0x00000020UL
-+#define SOCK_FILE__QUOTAON 0x00008000UL
-+#define SOCK_FILE__RELABELFROM 0x00000080UL
-+#define SOCK_FILE__LINK 0x00000800UL
-+#define SOCK_FILE__WRITE 0x00000004UL
-+#define SOCK_FILE__IOCTL 0x00000001UL
-+#define SOCK_FILE__RELABELTO 0x00000100UL
-+#define SOCK_FILE__READ 0x00000002UL
-+#define SOCK_FILE__RENAME 0x00001000UL
-+#define SOCK_FILE__APPEND 0x00000200UL
-+#define SOCK_FILE__LOCK 0x00000040UL
-+#define SOCK_FILE__SWAPON 0x00004000UL
-+#define SOCK_FILE__GETATTR 0x00000010UL
-+#define SOCK_FILE__MOUNTON 0x00010000UL
-+#define SOCK_FILE__CREATE 0x00000008UL
-+
-+#define FIFO_FILE__EXECUTE 0x00002000UL
-+#define FIFO_FILE__UNLINK 0x00000400UL
-+#define FIFO_FILE__SETATTR 0x00000020UL
-+#define FIFO_FILE__QUOTAON 0x00008000UL
-+#define FIFO_FILE__RELABELFROM 0x00000080UL
-+#define FIFO_FILE__LINK 0x00000800UL
-+#define FIFO_FILE__WRITE 0x00000004UL
-+#define FIFO_FILE__IOCTL 0x00000001UL
-+#define FIFO_FILE__RELABELTO 0x00000100UL
-+#define FIFO_FILE__READ 0x00000002UL
-+#define FIFO_FILE__RENAME 0x00001000UL
-+#define FIFO_FILE__APPEND 0x00000200UL
-+#define FIFO_FILE__LOCK 0x00000040UL
-+#define FIFO_FILE__SWAPON 0x00004000UL
-+#define FIFO_FILE__GETATTR 0x00000010UL
-+#define FIFO_FILE__MOUNTON 0x00010000UL
-+#define FIFO_FILE__CREATE 0x00000008UL
-+
-+#define FD__USE 0x00000001UL
-+
-+#define SOCKET__RELABELTO 0x00000100UL
-+#define SOCKET__RECV_MSG 0x00080000UL
-+#define SOCKET__RELABELFROM 0x00000080UL
-+#define SOCKET__SETOPT 0x00008000UL
-+#define SOCKET__APPEND 0x00000200UL
-+#define SOCKET__SETATTR 0x00000020UL
-+#define SOCKET__SENDTO 0x00040000UL
-+#define SOCKET__GETOPT 0x00004000UL
-+#define SOCKET__READ 0x00000002UL
-+#define SOCKET__SHUTDOWN 0x00010000UL
-+#define SOCKET__LISTEN 0x00001000UL
-+#define SOCKET__BIND 0x00000400UL
-+#define SOCKET__WRITE 0x00000004UL
-+#define SOCKET__ACCEPT 0x00002000UL
-+#define SOCKET__CONNECT 0x00000800UL
-+#define SOCKET__LOCK 0x00000040UL
-+#define SOCKET__IOCTL 0x00000001UL
-+#define SOCKET__CREATE 0x00000008UL
-+#define SOCKET__NAME_BIND 0x00200000UL
-+#define SOCKET__SEND_MSG 0x00100000UL
-+#define SOCKET__RECVFROM 0x00020000UL
-+#define SOCKET__GETATTR 0x00000010UL
-+
-+#define TCP_SOCKET__RELABELTO 0x00000100UL
-+#define TCP_SOCKET__RECV_MSG 0x00080000UL
-+#define TCP_SOCKET__RELABELFROM 0x00000080UL
-+#define TCP_SOCKET__SETOPT 0x00008000UL
-+#define TCP_SOCKET__APPEND 0x00000200UL
-+#define TCP_SOCKET__SETATTR 0x00000020UL
-+#define TCP_SOCKET__SENDTO 0x00040000UL
-+#define TCP_SOCKET__GETOPT 0x00004000UL
-+#define TCP_SOCKET__READ 0x00000002UL
-+#define TCP_SOCKET__SHUTDOWN 0x00010000UL
-+#define TCP_SOCKET__LISTEN 0x00001000UL
-+#define TCP_SOCKET__BIND 0x00000400UL
-+#define TCP_SOCKET__WRITE 0x00000004UL
-+#define TCP_SOCKET__ACCEPT 0x00002000UL
-+#define TCP_SOCKET__CONNECT 0x00000800UL
-+#define TCP_SOCKET__LOCK 0x00000040UL
-+#define TCP_SOCKET__IOCTL 0x00000001UL
-+#define TCP_SOCKET__CREATE 0x00000008UL
-+#define TCP_SOCKET__NAME_BIND 0x00200000UL
-+#define TCP_SOCKET__SEND_MSG 0x00100000UL
-+#define TCP_SOCKET__RECVFROM 0x00020000UL
-+#define TCP_SOCKET__GETATTR 0x00000010UL
-+
-+#define TCP_SOCKET__CONNECTTO 0x00400000UL
-+#define TCP_SOCKET__NEWCONN 0x00800000UL
-+#define TCP_SOCKET__ACCEPTFROM 0x01000000UL
-+
-+#define UDP_SOCKET__RELABELTO 0x00000100UL
-+#define UDP_SOCKET__RECV_MSG 0x00080000UL
-+#define UDP_SOCKET__RELABELFROM 0x00000080UL
-+#define UDP_SOCKET__SETOPT 0x00008000UL
-+#define UDP_SOCKET__APPEND 0x00000200UL
-+#define UDP_SOCKET__SETATTR 0x00000020UL
-+#define UDP_SOCKET__SENDTO 0x00040000UL
-+#define UDP_SOCKET__GETOPT 0x00004000UL
-+#define UDP_SOCKET__READ 0x00000002UL
-+#define UDP_SOCKET__SHUTDOWN 0x00010000UL
-+#define UDP_SOCKET__LISTEN 0x00001000UL
-+#define UDP_SOCKET__BIND 0x00000400UL
-+#define UDP_SOCKET__WRITE 0x00000004UL
-+#define UDP_SOCKET__ACCEPT 0x00002000UL
-+#define UDP_SOCKET__CONNECT 0x00000800UL
-+#define UDP_SOCKET__LOCK 0x00000040UL
-+#define UDP_SOCKET__IOCTL 0x00000001UL
-+#define UDP_SOCKET__CREATE 0x00000008UL
-+#define UDP_SOCKET__NAME_BIND 0x00200000UL
-+#define UDP_SOCKET__SEND_MSG 0x00100000UL
-+#define UDP_SOCKET__RECVFROM 0x00020000UL
-+#define UDP_SOCKET__GETATTR 0x00000010UL
-+
-+#define RAWIP_SOCKET__RELABELTO 0x00000100UL
-+#define RAWIP_SOCKET__RECV_MSG 0x00080000UL
-+#define RAWIP_SOCKET__RELABELFROM 0x00000080UL
-+#define RAWIP_SOCKET__SETOPT 0x00008000UL
-+#define RAWIP_SOCKET__APPEND 0x00000200UL
-+#define RAWIP_SOCKET__SETATTR 0x00000020UL
-+#define RAWIP_SOCKET__SENDTO 0x00040000UL
-+#define RAWIP_SOCKET__GETOPT 0x00004000UL
-+#define RAWIP_SOCKET__READ 0x00000002UL
-+#define RAWIP_SOCKET__SHUTDOWN 0x00010000UL
-+#define RAWIP_SOCKET__LISTEN 0x00001000UL
-+#define RAWIP_SOCKET__BIND 0x00000400UL
-+#define RAWIP_SOCKET__WRITE 0x00000004UL
-+#define RAWIP_SOCKET__ACCEPT 0x00002000UL
-+#define RAWIP_SOCKET__CONNECT 0x00000800UL
-+#define RAWIP_SOCKET__LOCK 0x00000040UL
-+#define RAWIP_SOCKET__IOCTL 0x00000001UL
-+#define RAWIP_SOCKET__CREATE 0x00000008UL
-+#define RAWIP_SOCKET__NAME_BIND 0x00200000UL
-+#define RAWIP_SOCKET__SEND_MSG 0x00100000UL
-+#define RAWIP_SOCKET__RECVFROM 0x00020000UL
-+#define RAWIP_SOCKET__GETATTR 0x00000010UL
-+
-+#define NODE__TCP_RECV 0x00000001UL
-+#define NODE__TCP_SEND 0x00000002UL
-+#define NODE__UDP_RECV 0x00000004UL
-+#define NODE__UDP_SEND 0x00000008UL
-+#define NODE__RAWIP_RECV 0x00000010UL
-+#define NODE__RAWIP_SEND 0x00000020UL
-+#define NODE__ENFORCE_DEST 0x00000040UL
-+
-+#define NETIF__TCP_RECV 0x00000001UL
-+#define NETIF__TCP_SEND 0x00000002UL
-+#define NETIF__UDP_RECV 0x00000004UL
-+#define NETIF__UDP_SEND 0x00000008UL
-+#define NETIF__RAWIP_RECV 0x00000010UL
-+#define NETIF__RAWIP_SEND 0x00000020UL
-+
-+#define NETLINK_SOCKET__RELABELTO 0x00000100UL
-+#define NETLINK_SOCKET__RECV_MSG 0x00080000UL
-+#define NETLINK_SOCKET__RELABELFROM 0x00000080UL
-+#define NETLINK_SOCKET__SETOPT 0x00008000UL
-+#define NETLINK_SOCKET__APPEND 0x00000200UL
-+#define NETLINK_SOCKET__SETATTR 0x00000020UL
-+#define NETLINK_SOCKET__SENDTO 0x00040000UL
-+#define NETLINK_SOCKET__GETOPT 0x00004000UL
-+#define NETLINK_SOCKET__READ 0x00000002UL
-+#define NETLINK_SOCKET__SHUTDOWN 0x00010000UL
-+#define NETLINK_SOCKET__LISTEN 0x00001000UL
-+#define NETLINK_SOCKET__BIND 0x00000400UL
-+#define NETLINK_SOCKET__WRITE 0x00000004UL
-+#define NETLINK_SOCKET__ACCEPT 0x00002000UL
-+#define NETLINK_SOCKET__CONNECT 0x00000800UL
-+#define NETLINK_SOCKET__LOCK 0x00000040UL
-+#define NETLINK_SOCKET__IOCTL 0x00000001UL
-+#define NETLINK_SOCKET__CREATE 0x00000008UL
-+#define NETLINK_SOCKET__NAME_BIND 0x00200000UL
-+#define NETLINK_SOCKET__SEND_MSG 0x00100000UL
-+#define NETLINK_SOCKET__RECVFROM 0x00020000UL
-+#define NETLINK_SOCKET__GETATTR 0x00000010UL
-+
-+#define PACKET_SOCKET__RELABELTO 0x00000100UL
-+#define PACKET_SOCKET__RECV_MSG 0x00080000UL
-+#define PACKET_SOCKET__RELABELFROM 0x00000080UL
-+#define PACKET_SOCKET__SETOPT 0x00008000UL
-+#define PACKET_SOCKET__APPEND 0x00000200UL
-+#define PACKET_SOCKET__SETATTR 0x00000020UL
-+#define PACKET_SOCKET__SENDTO 0x00040000UL
-+#define PACKET_SOCKET__GETOPT 0x00004000UL
-+#define PACKET_SOCKET__READ 0x00000002UL
-+#define PACKET_SOCKET__SHUTDOWN 0x00010000UL
-+#define PACKET_SOCKET__LISTEN 0x00001000UL
-+#define PACKET_SOCKET__BIND 0x00000400UL
-+#define PACKET_SOCKET__WRITE 0x00000004UL
-+#define PACKET_SOCKET__ACCEPT 0x00002000UL
-+#define PACKET_SOCKET__CONNECT 0x00000800UL
-+#define PACKET_SOCKET__LOCK 0x00000040UL
-+#define PACKET_SOCKET__IOCTL 0x00000001UL
-+#define PACKET_SOCKET__CREATE 0x00000008UL
-+#define PACKET_SOCKET__NAME_BIND 0x00200000UL
-+#define PACKET_SOCKET__SEND_MSG 0x00100000UL
-+#define PACKET_SOCKET__RECVFROM 0x00020000UL
-+#define PACKET_SOCKET__GETATTR 0x00000010UL
-+
-+#define KEY_SOCKET__RELABELTO 0x00000100UL
-+#define KEY_SOCKET__RECV_MSG 0x00080000UL
-+#define KEY_SOCKET__RELABELFROM 0x00000080UL
-+#define KEY_SOCKET__SETOPT 0x00008000UL
-+#define KEY_SOCKET__APPEND 0x00000200UL
-+#define KEY_SOCKET__SETATTR 0x00000020UL
-+#define KEY_SOCKET__SENDTO 0x00040000UL
-+#define KEY_SOCKET__GETOPT 0x00004000UL
-+#define KEY_SOCKET__READ 0x00000002UL
-+#define KEY_SOCKET__SHUTDOWN 0x00010000UL
-+#define KEY_SOCKET__LISTEN 0x00001000UL
-+#define KEY_SOCKET__BIND 0x00000400UL
-+#define KEY_SOCKET__WRITE 0x00000004UL
-+#define KEY_SOCKET__ACCEPT 0x00002000UL
-+#define KEY_SOCKET__CONNECT 0x00000800UL
-+#define KEY_SOCKET__LOCK 0x00000040UL
-+#define KEY_SOCKET__IOCTL 0x00000001UL
-+#define KEY_SOCKET__CREATE 0x00000008UL
-+#define KEY_SOCKET__NAME_BIND 0x00200000UL
-+#define KEY_SOCKET__SEND_MSG 0x00100000UL
-+#define KEY_SOCKET__RECVFROM 0x00020000UL
-+#define KEY_SOCKET__GETATTR 0x00000010UL
-+
-+#define UNIX_STREAM_SOCKET__RELABELTO 0x00000100UL
-+#define UNIX_STREAM_SOCKET__RECV_MSG 0x00080000UL
-+#define UNIX_STREAM_SOCKET__RELABELFROM 0x00000080UL
-+#define UNIX_STREAM_SOCKET__SETOPT 0x00008000UL
-+#define UNIX_STREAM_SOCKET__APPEND 0x00000200UL
-+#define UNIX_STREAM_SOCKET__SETATTR 0x00000020UL
-+#define UNIX_STREAM_SOCKET__SENDTO 0x00040000UL
-+#define UNIX_STREAM_SOCKET__GETOPT 0x00004000UL
-+#define UNIX_STREAM_SOCKET__READ 0x00000002UL
-+#define UNIX_STREAM_SOCKET__SHUTDOWN 0x00010000UL
-+#define UNIX_STREAM_SOCKET__LISTEN 0x00001000UL
-+#define UNIX_STREAM_SOCKET__BIND 0x00000400UL
-+#define UNIX_STREAM_SOCKET__WRITE 0x00000004UL
-+#define UNIX_STREAM_SOCKET__ACCEPT 0x00002000UL
-+#define UNIX_STREAM_SOCKET__CONNECT 0x00000800UL
-+#define UNIX_STREAM_SOCKET__LOCK 0x00000040UL
-+#define UNIX_STREAM_SOCKET__IOCTL 0x00000001UL
-+#define UNIX_STREAM_SOCKET__CREATE 0x00000008UL
-+#define UNIX_STREAM_SOCKET__NAME_BIND 0x00200000UL
-+#define UNIX_STREAM_SOCKET__SEND_MSG 0x00100000UL
-+#define UNIX_STREAM_SOCKET__RECVFROM 0x00020000UL
-+#define UNIX_STREAM_SOCKET__GETATTR 0x00000010UL
-+
-+#define UNIX_STREAM_SOCKET__CONNECTTO 0x00400000UL
-+#define UNIX_STREAM_SOCKET__NEWCONN 0x00800000UL
-+#define UNIX_STREAM_SOCKET__ACCEPTFROM 0x01000000UL
-+
-+#define UNIX_DGRAM_SOCKET__RELABELTO 0x00000100UL
-+#define UNIX_DGRAM_SOCKET__RECV_MSG 0x00080000UL
-+#define UNIX_DGRAM_SOCKET__RELABELFROM 0x00000080UL
-+#define UNIX_DGRAM_SOCKET__SETOPT 0x00008000UL
-+#define UNIX_DGRAM_SOCKET__APPEND 0x00000200UL
-+#define UNIX_DGRAM_SOCKET__SETATTR 0x00000020UL
-+#define UNIX_DGRAM_SOCKET__SENDTO 0x00040000UL
-+#define UNIX_DGRAM_SOCKET__GETOPT 0x00004000UL
-+#define UNIX_DGRAM_SOCKET__READ 0x00000002UL
-+#define UNIX_DGRAM_SOCKET__SHUTDOWN 0x00010000UL
-+#define UNIX_DGRAM_SOCKET__LISTEN 0x00001000UL
-+#define UNIX_DGRAM_SOCKET__BIND 0x00000400UL
-+#define UNIX_DGRAM_SOCKET__WRITE 0x00000004UL
-+#define UNIX_DGRAM_SOCKET__ACCEPT 0x00002000UL
-+#define UNIX_DGRAM_SOCKET__CONNECT 0x00000800UL
-+#define UNIX_DGRAM_SOCKET__LOCK 0x00000040UL
-+#define UNIX_DGRAM_SOCKET__IOCTL 0x00000001UL
-+#define UNIX_DGRAM_SOCKET__CREATE 0x00000008UL
-+#define UNIX_DGRAM_SOCKET__NAME_BIND 0x00200000UL
-+#define UNIX_DGRAM_SOCKET__SEND_MSG 0x00100000UL
-+#define UNIX_DGRAM_SOCKET__RECVFROM 0x00020000UL
-+#define UNIX_DGRAM_SOCKET__GETATTR 0x00000010UL
-+
-+#define PROCESS__FORK 0x00000001UL
-+#define PROCESS__TRANSITION 0x00000002UL
-+#define PROCESS__SIGCHLD 0x00000004UL
-+#define PROCESS__SIGKILL 0x00000008UL
-+#define PROCESS__SIGSTOP 0x00000010UL
-+#define PROCESS__SIGNULL 0x00000020UL
-+#define PROCESS__SIGNAL 0x00000040UL
-+#define PROCESS__PTRACE 0x00000080UL
-+#define PROCESS__GETSCHED 0x00000100UL
-+#define PROCESS__SETSCHED 0x00000200UL
-+#define PROCESS__GETSESSION 0x00000400UL
-+#define PROCESS__GETPGID 0x00000800UL
-+#define PROCESS__SETPGID 0x00001000UL
-+#define PROCESS__GETCAP 0x00002000UL
-+#define PROCESS__SETCAP 0x00004000UL
-+#define PROCESS__SHARE 0x00008000UL
-+#define PROCESS__GETATTR 0x00010000UL
-+#define PROCESS__SETEXEC 0x00020000UL
-+#define PROCESS__SETFSCREATE 0x00040000UL
-+#define PROCESS__NOATSECURE 0x00080000UL
-+
-+#define IPC__SETATTR 0x00000008UL
-+#define IPC__READ 0x00000010UL
-+#define IPC__ASSOCIATE 0x00000040UL
-+#define IPC__DESTROY 0x00000002UL
-+#define IPC__UNIX_WRITE 0x00000100UL
-+#define IPC__CREATE 0x00000001UL
-+#define IPC__UNIX_READ 0x00000080UL
-+#define IPC__GETATTR 0x00000004UL
-+#define IPC__WRITE 0x00000020UL
-+
-+#define SEM__SETATTR 0x00000008UL
-+#define SEM__READ 0x00000010UL
-+#define SEM__ASSOCIATE 0x00000040UL
-+#define SEM__DESTROY 0x00000002UL
-+#define SEM__UNIX_WRITE 0x00000100UL
-+#define SEM__CREATE 0x00000001UL
-+#define SEM__UNIX_READ 0x00000080UL
-+#define SEM__GETATTR 0x00000004UL
-+#define SEM__WRITE 0x00000020UL
-+
-+#define MSGQ__SETATTR 0x00000008UL
-+#define MSGQ__READ 0x00000010UL
-+#define MSGQ__ASSOCIATE 0x00000040UL
-+#define MSGQ__DESTROY 0x00000002UL
-+#define MSGQ__UNIX_WRITE 0x00000100UL
-+#define MSGQ__CREATE 0x00000001UL
-+#define MSGQ__UNIX_READ 0x00000080UL
-+#define MSGQ__GETATTR 0x00000004UL
-+#define MSGQ__WRITE 0x00000020UL
-+
-+#define MSGQ__ENQUEUE 0x00000200UL
-+
-+#define MSG__SEND 0x00000001UL
-+#define MSG__RECEIVE 0x00000002UL
-+
-+#define SHM__SETATTR 0x00000008UL
-+#define SHM__READ 0x00000010UL
-+#define SHM__ASSOCIATE 0x00000040UL
-+#define SHM__DESTROY 0x00000002UL
-+#define SHM__UNIX_WRITE 0x00000100UL
-+#define SHM__CREATE 0x00000001UL
-+#define SHM__UNIX_READ 0x00000080UL
-+#define SHM__GETATTR 0x00000004UL
-+#define SHM__WRITE 0x00000020UL
-+
-+#define SHM__LOCK 0x00000200UL
-+
-+#define SECURITY__COMPUTE_AV 0x00000001UL
-+#define SECURITY__COMPUTE_CREATE 0x00000002UL
-+#define SECURITY__COMPUTE_MEMBER 0x00000004UL
-+#define SECURITY__CHECK_CONTEXT 0x00000008UL
-+#define SECURITY__LOAD_POLICY 0x00000010UL
-+#define SECURITY__COMPUTE_RELABEL 0x00000020UL
-+#define SECURITY__COMPUTE_USER 0x00000040UL
-+#define SECURITY__SETENFORCE 0x00000080UL
-+
-+#define SYSTEM__IPC_INFO 0x00000001UL
-+#define SYSTEM__SYSLOG_READ 0x00000002UL
-+#define SYSTEM__SYSLOG_MOD 0x00000004UL
-+#define SYSTEM__SYSLOG_CONSOLE 0x00000008UL
-+
-+#define CAPABILITY__CHOWN 0x00000001UL
-+#define CAPABILITY__DAC_OVERRIDE 0x00000002UL
-+#define CAPABILITY__DAC_READ_SEARCH 0x00000004UL
-+#define CAPABILITY__FOWNER 0x00000008UL
-+#define CAPABILITY__FSETID 0x00000010UL
-+#define CAPABILITY__KILL 0x00000020UL
-+#define CAPABILITY__SETGID 0x00000040UL
-+#define CAPABILITY__SETUID 0x00000080UL
-+#define CAPABILITY__SETPCAP 0x00000100UL
-+#define CAPABILITY__LINUX_IMMUTABLE 0x00000200UL
-+#define CAPABILITY__NET_BIND_SERVICE 0x00000400UL
-+#define CAPABILITY__NET_BROADCAST 0x00000800UL
-+#define CAPABILITY__NET_ADMIN 0x00001000UL
-+#define CAPABILITY__NET_RAW 0x00002000UL
-+#define CAPABILITY__IPC_LOCK 0x00004000UL
-+#define CAPABILITY__IPC_OWNER 0x00008000UL
-+#define CAPABILITY__SYS_MODULE 0x00010000UL
-+#define CAPABILITY__SYS_RAWIO 0x00020000UL
-+#define CAPABILITY__SYS_CHROOT 0x00040000UL
-+#define CAPABILITY__SYS_PTRACE 0x00080000UL
-+#define CAPABILITY__SYS_PACCT 0x00100000UL
-+#define CAPABILITY__SYS_ADMIN 0x00200000UL
-+#define CAPABILITY__SYS_BOOT 0x00400000UL
-+#define CAPABILITY__SYS_NICE 0x00800000UL
-+#define CAPABILITY__SYS_RESOURCE 0x01000000UL
-+#define CAPABILITY__SYS_TIME 0x02000000UL
-+#define CAPABILITY__SYS_TTY_CONFIG 0x04000000UL
-+#define CAPABILITY__MKNOD 0x08000000UL
-+#define CAPABILITY__LEASE 0x10000000UL
-+
-+#define PASSWD__PASSWD 0x00000001UL
-+#define PASSWD__CHFN 0x00000002UL
-+#define PASSWD__CHSH 0x00000004UL
-+
-+
-+/* FLASK */
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/include/av_perm_to_string.h 2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,120 @@
-+/* This file is automatically generated. Do not edit. */
-+/* FLASK */
-+
-+struct av_perm_to_string
-+{
-+ u16 tclass;
-+ u32 value;
-+ char *name;
-+};
-+
-+static struct av_perm_to_string av_perm_to_string[] = {
-+ { SECCLASS_FILESYSTEM, FILESYSTEM__MOUNT, "mount" },
-+ { SECCLASS_FILESYSTEM, FILESYSTEM__REMOUNT, "remount" },
-+ { SECCLASS_FILESYSTEM, FILESYSTEM__UNMOUNT, "unmount" },
-+ { SECCLASS_FILESYSTEM, FILESYSTEM__GETATTR, "getattr" },
-+ { SECCLASS_FILESYSTEM, FILESYSTEM__RELABELFROM, "relabelfrom" },
-+ { SECCLASS_FILESYSTEM, FILESYSTEM__RELABELTO, "relabelto" },
-+ { SECCLASS_FILESYSTEM, FILESYSTEM__TRANSITION, "transition" },
-+ { SECCLASS_FILESYSTEM, FILESYSTEM__ASSOCIATE, "associate" },
-+ { SECCLASS_FILESYSTEM, FILESYSTEM__QUOTAMOD, "quotamod" },
-+ { SECCLASS_FILESYSTEM, FILESYSTEM__QUOTAGET, "quotaget" },
-+ { SECCLASS_DIR, DIR__ADD_NAME, "add_name" },
-+ { SECCLASS_DIR, DIR__REMOVE_NAME, "remove_name" },
-+ { SECCLASS_DIR, DIR__REPARENT, "reparent" },
-+ { SECCLASS_DIR, DIR__SEARCH, "search" },
-+ { SECCLASS_DIR, DIR__RMDIR, "rmdir" },
-+ { SECCLASS_FILE, FILE__EXECUTE_NO_TRANS, "execute_no_trans" },
-+ { SECCLASS_FILE, FILE__ENTRYPOINT, "entrypoint" },
-+ { SECCLASS_FD, FD__USE, "use" },
-+ { SECCLASS_TCP_SOCKET, TCP_SOCKET__CONNECTTO, "connectto" },
-+ { SECCLASS_TCP_SOCKET, TCP_SOCKET__NEWCONN, "newconn" },
-+ { SECCLASS_TCP_SOCKET, TCP_SOCKET__ACCEPTFROM, "acceptfrom" },
-+ { SECCLASS_NODE, NODE__TCP_RECV, "tcp_recv" },
-+ { SECCLASS_NODE, NODE__TCP_SEND, "tcp_send" },
-+ { SECCLASS_NODE, NODE__UDP_RECV, "udp_recv" },
-+ { SECCLASS_NODE, NODE__UDP_SEND, "udp_send" },
-+ { SECCLASS_NODE, NODE__RAWIP_RECV, "rawip_recv" },
-+ { SECCLASS_NODE, NODE__RAWIP_SEND, "rawip_send" },
-+ { SECCLASS_NODE, NODE__ENFORCE_DEST, "enforce_dest" },
-+ { SECCLASS_NETIF, NETIF__TCP_RECV, "tcp_recv" },
-+ { SECCLASS_NETIF, NETIF__TCP_SEND, "tcp_send" },
-+ { SECCLASS_NETIF, NETIF__UDP_RECV, "udp_recv" },
-+ { SECCLASS_NETIF, NETIF__UDP_SEND, "udp_send" },
-+ { SECCLASS_NETIF, NETIF__RAWIP_RECV, "rawip_recv" },
-+ { SECCLASS_NETIF, NETIF__RAWIP_SEND, "rawip_send" },
-+ { SECCLASS_UNIX_STREAM_SOCKET, UNIX_STREAM_SOCKET__CONNECTTO, "connectto" },
-+ { SECCLASS_UNIX_STREAM_SOCKET, UNIX_STREAM_SOCKET__NEWCONN, "newconn" },
-+ { SECCLASS_UNIX_STREAM_SOCKET, UNIX_STREAM_SOCKET__ACCEPTFROM, "acceptfrom" },
-+ { SECCLASS_PROCESS, PROCESS__FORK, "fork" },
-+ { SECCLASS_PROCESS, PROCESS__TRANSITION, "transition" },
-+ { SECCLASS_PROCESS, PROCESS__SIGCHLD, "sigchld" },
-+ { SECCLASS_PROCESS, PROCESS__SIGKILL, "sigkill" },
-+ { SECCLASS_PROCESS, PROCESS__SIGSTOP, "sigstop" },
-+ { SECCLASS_PROCESS, PROCESS__SIGNULL, "signull" },
-+ { SECCLASS_PROCESS, PROCESS__SIGNAL, "signal" },
-+ { SECCLASS_PROCESS, PROCESS__PTRACE, "ptrace" },
-+ { SECCLASS_PROCESS, PROCESS__GETSCHED, "getsched" },
-+ { SECCLASS_PROCESS, PROCESS__SETSCHED, "setsched" },
-+ { SECCLASS_PROCESS, PROCESS__GETSESSION, "getsession" },
-+ { SECCLASS_PROCESS, PROCESS__GETPGID, "getpgid" },
-+ { SECCLASS_PROCESS, PROCESS__SETPGID, "setpgid" },
-+ { SECCLASS_PROCESS, PROCESS__GETCAP, "getcap" },
-+ { SECCLASS_PROCESS, PROCESS__SETCAP, "setcap" },
-+ { SECCLASS_PROCESS, PROCESS__SHARE, "share" },
-+ { SECCLASS_PROCESS, PROCESS__GETATTR, "getattr" },
-+ { SECCLASS_PROCESS, PROCESS__SETEXEC, "setexec" },
-+ { SECCLASS_PROCESS, PROCESS__SETFSCREATE, "setfscreate" },
-+ { SECCLASS_PROCESS, PROCESS__NOATSECURE, "noatsecure" },
-+ { SECCLASS_MSGQ, MSGQ__ENQUEUE, "enqueue" },
-+ { SECCLASS_MSG, MSG__SEND, "send" },
-+ { SECCLASS_MSG, MSG__RECEIVE, "receive" },
-+ { SECCLASS_SHM, SHM__LOCK, "lock" },
-+ { SECCLASS_SECURITY, SECURITY__COMPUTE_AV, "compute_av" },
-+ { SECCLASS_SECURITY, SECURITY__COMPUTE_CREATE, "compute_create" },
-+ { SECCLASS_SECURITY, SECURITY__COMPUTE_MEMBER, "compute_member" },
-+ { SECCLASS_SECURITY, SECURITY__CHECK_CONTEXT, "check_context" },
-+ { SECCLASS_SECURITY, SECURITY__LOAD_POLICY, "load_policy" },
-+ { SECCLASS_SECURITY, SECURITY__COMPUTE_RELABEL, "compute_relabel" },
-+ { SECCLASS_SECURITY, SECURITY__COMPUTE_USER, "compute_user" },
-+ { SECCLASS_SECURITY, SECURITY__SETENFORCE, "setenforce" },
-+ { SECCLASS_SYSTEM, SYSTEM__IPC_INFO, "ipc_info" },
-+ { SECCLASS_SYSTEM, SYSTEM__SYSLOG_READ, "syslog_read" },
-+ { SECCLASS_SYSTEM, SYSTEM__SYSLOG_MOD, "syslog_mod" },
-+ { SECCLASS_SYSTEM, SYSTEM__SYSLOG_CONSOLE, "syslog_console" },
-+ { SECCLASS_CAPABILITY, CAPABILITY__CHOWN, "chown" },
-+ { SECCLASS_CAPABILITY, CAPABILITY__DAC_OVERRIDE, "dac_override" },
-+ { SECCLASS_CAPABILITY, CAPABILITY__DAC_READ_SEARCH, "dac_read_search" },
-+ { SECCLASS_CAPABILITY, CAPABILITY__FOWNER, "fowner" },
-+ { SECCLASS_CAPABILITY, CAPABILITY__FSETID, "fsetid" },
-+ { SECCLASS_CAPABILITY, CAPABILITY__KILL, "kill" },
-+ { SECCLASS_CAPABILITY, CAPABILITY__SETGID, "setgid" },
-+ { SECCLASS_CAPABILITY, CAPABILITY__SETUID, "setuid" },
-+ { SECCLASS_CAPABILITY, CAPABILITY__SETPCAP, "setpcap" },
-+ { SECCLASS_CAPABILITY, CAPABILITY__LINUX_IMMUTABLE, "linux_immutable" },
-+ { SECCLASS_CAPABILITY, CAPABILITY__NET_BIND_SERVICE, "net_bind_service" },
-+ { SECCLASS_CAPABILITY, CAPABILITY__NET_BROADCAST, "net_broadcast" },
-+ { SECCLASS_CAPABILITY, CAPABILITY__NET_ADMIN, "net_admin" },
-+ { SECCLASS_CAPABILITY, CAPABILITY__NET_RAW, "net_raw" },
-+ { SECCLASS_CAPABILITY, CAPABILITY__IPC_LOCK, "ipc_lock" },
-+ { SECCLASS_CAPABILITY, CAPABILITY__IPC_OWNER, "ipc_owner" },
-+ { SECCLASS_CAPABILITY, CAPABILITY__SYS_MODULE, "sys_module" },
-+ { SECCLASS_CAPABILITY, CAPABILITY__SYS_RAWIO, "sys_rawio" },
-+ { SECCLASS_CAPABILITY, CAPABILITY__SYS_CHROOT, "sys_chroot" },
-+ { SECCLASS_CAPABILITY, CAPABILITY__SYS_PTRACE, "sys_ptrace" },
-+ { SECCLASS_CAPABILITY, CAPABILITY__SYS_PACCT, "sys_pacct" },
-+ { SECCLASS_CAPABILITY, CAPABILITY__SYS_ADMIN, "sys_admin" },
-+ { SECCLASS_CAPABILITY, CAPABILITY__SYS_BOOT, "sys_boot" },
-+ { SECCLASS_CAPABILITY, CAPABILITY__SYS_NICE, "sys_nice" },
-+ { SECCLASS_CAPABILITY, CAPABILITY__SYS_RESOURCE, "sys_resource" },
-+ { SECCLASS_CAPABILITY, CAPABILITY__SYS_TIME, "sys_time" },
-+ { SECCLASS_CAPABILITY, CAPABILITY__SYS_TTY_CONFIG, "sys_tty_config" },
-+ { SECCLASS_CAPABILITY, CAPABILITY__MKNOD, "mknod" },
-+ { SECCLASS_CAPABILITY, CAPABILITY__LEASE, "lease" },
-+ { SECCLASS_PASSWD, PASSWD__PASSWD, "passwd" },
-+ { SECCLASS_PASSWD, PASSWD__CHFN, "chfn" },
-+ { SECCLASS_PASSWD, PASSWD__CHSH, "chsh" },
-+};
-+
-+
-+/* FLASK */
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/include/class_to_string.h 2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,39 @@
-+/* This file is automatically generated. Do not edit. */
-+/*
-+ * Security object class definitions
-+ */
-+static char *class_to_string[] =
-+{
-+ "null",
-+ "security",
-+ "process",
-+ "system",
-+ "capability",
-+ "filesystem",
-+ "file",
-+ "dir",
-+ "fd",
-+ "lnk_file",
-+ "chr_file",
-+ "blk_file",
-+ "sock_file",
-+ "fifo_file",
-+ "socket",
-+ "tcp_socket",
-+ "udp_socket",
-+ "rawip_socket",
-+ "node",
-+ "netif",
-+ "netlink_socket",
-+ "packet_socket",
-+ "key_socket",
-+ "unix_stream_socket",
-+ "unix_dgram_socket",
-+ "sem",
-+ "msg",
-+ "msgq",
-+ "shm",
-+ "ipc",
-+ "passwd",
-+};
-+
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/include/common_perm_to_string.h 2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,65 @@
-+/* This file is automatically generated. Do not edit. */
-+/* FLASK */
-+
-+static char *common_file_perm_to_string[] =
-+{
-+ "ioctl",
-+ "read",
-+ "write",
-+ "create",
-+ "getattr",
-+ "setattr",
-+ "lock",
-+ "relabelfrom",
-+ "relabelto",
-+ "append",
-+ "unlink",
-+ "link",
-+ "rename",
-+ "execute",
-+ "swapon",
-+ "quotaon",
-+ "mounton",
-+};
-+
-+static char *common_socket_perm_to_string[] =
-+{
-+ "ioctl",
-+ "read",
-+ "write",
-+ "create",
-+ "getattr",
-+ "setattr",
-+ "lock",
-+ "relabelfrom",
-+ "relabelto",
-+ "append",
-+ "bind",
-+ "connect",
-+ "listen",
-+ "accept",
-+ "getopt",
-+ "setopt",
-+ "shutdown",
-+ "recvfrom",
-+ "sendto",
-+ "recv_msg",
-+ "send_msg",
-+ "name_bind",
-+};
-+
-+static char *common_ipc_perm_to_string[] =
-+{
-+ "create",
-+ "destroy",
-+ "getattr",
-+ "setattr",
-+ "read",
-+ "write",
-+ "associate",
-+ "unix_read",
-+ "unix_write",
-+};
-+
-+
-+/* FLASK */
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/include/flask.h 2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,71 @@
-+/* This file is automatically generated. Do not edit. */
-+#ifndef _SELINUX_FLASK_H_
-+#define _SELINUX_FLASK_H_
-+
-+/*
-+ * Security object class definitions
-+ */
-+#define SECCLASS_SECURITY 1
-+#define SECCLASS_PROCESS 2
-+#define SECCLASS_SYSTEM 3
-+#define SECCLASS_CAPABILITY 4
-+#define SECCLASS_FILESYSTEM 5
-+#define SECCLASS_FILE 6
-+#define SECCLASS_DIR 7
-+#define SECCLASS_FD 8
-+#define SECCLASS_LNK_FILE 9
-+#define SECCLASS_CHR_FILE 10
-+#define SECCLASS_BLK_FILE 11
-+#define SECCLASS_SOCK_FILE 12
-+#define SECCLASS_FIFO_FILE 13
-+#define SECCLASS_SOCKET 14
-+#define SECCLASS_TCP_SOCKET 15
-+#define SECCLASS_UDP_SOCKET 16
-+#define SECCLASS_RAWIP_SOCKET 17
-+#define SECCLASS_NODE 18
-+#define SECCLASS_NETIF 19
-+#define SECCLASS_NETLINK_SOCKET 20
-+#define SECCLASS_PACKET_SOCKET 21
-+#define SECCLASS_KEY_SOCKET 22
-+#define SECCLASS_UNIX_STREAM_SOCKET 23
-+#define SECCLASS_UNIX_DGRAM_SOCKET 24
-+#define SECCLASS_SEM 25
-+#define SECCLASS_MSG 26
-+#define SECCLASS_MSGQ 27
-+#define SECCLASS_SHM 28
-+#define SECCLASS_IPC 29
-+#define SECCLASS_PASSWD 30
-+
-+/*
-+ * Security identifier indices for initial entities
-+ */
-+#define SECINITSID_KERNEL 1
-+#define SECINITSID_SECURITY 2
-+#define SECINITSID_UNLABELED 3
-+#define SECINITSID_FS 4
-+#define SECINITSID_FILE 5
-+#define SECINITSID_FILE_LABELS 6
-+#define SECINITSID_INIT 7
-+#define SECINITSID_ANY_SOCKET 8
-+#define SECINITSID_PORT 9
-+#define SECINITSID_NETIF 10
-+#define SECINITSID_NETMSG 11
-+#define SECINITSID_NODE 12
-+#define SECINITSID_IGMP_PACKET 13
-+#define SECINITSID_ICMP_SOCKET 14
-+#define SECINITSID_TCP_SOCKET 15
-+#define SECINITSID_SYSCTL_MODPROBE 16
-+#define SECINITSID_SYSCTL 17
-+#define SECINITSID_SYSCTL_FS 18
-+#define SECINITSID_SYSCTL_KERNEL 19
-+#define SECINITSID_SYSCTL_NET 20
-+#define SECINITSID_SYSCTL_NET_UNIX 21
-+#define SECINITSID_SYSCTL_VM 22
-+#define SECINITSID_SYSCTL_DEV 23
-+#define SECINITSID_KMOD 24
-+#define SECINITSID_POLICY 25
-+#define SECINITSID_SCMP_PACKET 26
-+
-+#define SECINITSID_NUM 26
-+
-+#endif
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/include/initial_sid_to_string.h 2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,32 @@
-+/* This file is automatically generated. Do not edit. */
-+static char *initial_sid_to_string[] =
-+{
-+ "null",
-+ "kernel",
-+ "security",
-+ "unlabeled",
-+ "fs",
-+ "file",
-+ "file_labels",
-+ "init",
-+ "any_socket",
-+ "port",
-+ "netif",
-+ "netmsg",
-+ "node",
-+ "igmp_packet",
-+ "icmp_socket",
-+ "tcp_socket",
-+ "sysctl_modprobe",
-+ "sysctl",
-+ "sysctl_fs",
-+ "sysctl_kernel",
-+ "sysctl_net",
-+ "sysctl_net_unix",
-+ "sysctl_vm",
-+ "sysctl_dev",
-+ "kmod",
-+ "policy",
-+ "scmp_packet",
-+};
-+
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/include/objsec.h 2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,88 @@
-+/*
-+ * NSA Security-Enhanced Linux (SELinux) security module
-+ *
-+ * This file contains the SELinux security data structures for kernel objects.
-+ *
-+ * Author(s): Stephen Smalley, <sds@epoch.ncsc.mil>
-+ * Chris Vance, <cvance@nai.com>
-+ * Wayne Salamon, <wsalamon@nai.com>
-+ * James Morris <jmorris@redhat.com>
-+ *
-+ * Copyright (C) 2001,2002 Networks Associates Technology, Inc.
-+ * Copyright (C) 2003 Red Hat, Inc., James Morris <jmorris@redhat.com>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2,
-+ * as published by the Free Software Foundation.
-+ */
-+#ifndef _SELINUX_OBJSEC_H_
-+#define _SELINUX_OBJSEC_H_
-+
-+#include <linux/list.h>
-+#include <linux/sched.h>
-+#include <linux/fs.h>
-+#include <linux/in.h>
-+#include "flask.h"
-+#include "avc.h"
-+
-+struct task_security_struct {
-+ unsigned long magic; /* magic number for this module */
-+ struct task_struct *task; /* back pointer to task object */
-+ u32 osid; /* SID prior to last execve */
-+ u32 sid; /* current SID */
-+ u32 exec_sid; /* exec SID */
-+ u32 create_sid; /* fscreate SID */
-+ struct avc_entry_ref avcr; /* reference to process permissions */
-+};
-+
-+struct inode_security_struct {
-+ unsigned long magic; /* magic number for this module */
-+ struct inode *inode; /* back pointer to inode object */
-+ struct list_head list; /* list of inode_security_struct */
-+ u32 task_sid; /* SID of creating task */
-+ u32 sid; /* SID of this object */
-+ u16 sclass; /* security class of this object */
-+ struct avc_entry_ref avcr; /* reference to object permissions */
-+ unsigned char initialized; /* initialization flag */
-+ struct semaphore sem;
-+ unsigned char inherit; /* inherit SID from parent entry */
-+};
-+
-+struct file_security_struct {
-+ unsigned long magic; /* magic number for this module */
-+ struct file *file; /* back pointer to file object */
-+ u32 sid; /* SID of open file description */
-+ u32 fown_sid; /* SID of file owner (for SIGIO) */
-+ struct avc_entry_ref avcr; /* reference to fd permissions */
-+ struct avc_entry_ref inode_avcr; /* reference to object permissions */
-+};
-+
-+struct superblock_security_struct {
-+ unsigned long magic; /* magic number for this module */
-+ struct super_block *sb; /* back pointer to sb object */
-+ struct list_head list; /* list of superblock_security_struct */
-+ u32 sid; /* SID of file system */
-+ unsigned int behavior; /* labeling behavior */
-+ unsigned char initialized; /* initialization flag */
-+ unsigned char proc; /* proc fs */
-+ struct semaphore sem;
-+};
-+
-+struct msg_security_struct {
-+ unsigned long magic; /* magic number for this module */
-+ struct msg_msg *msg; /* back pointer */
-+ u32 sid; /* SID of message */
-+ struct avc_entry_ref avcr; /* reference to permissions */
-+};
-+
-+struct ipc_security_struct {
-+ unsigned long magic; /* magic number for this module */
-+ struct kern_ipc_perm *ipc_perm; /* back pointer */
-+ u16 sclass; /* security class of this object */
-+ u32 sid; /* SID of IPC resource */
-+ struct avc_entry_ref avcr; /* reference to permissions */
-+};
-+
-+extern int inode_security_set_sid(struct inode *inode, u32 sid);
-+
-+#endif /* _SELINUX_OBJSEC_H_ */
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/include/security.h 2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,70 @@
-+/*
-+ * Security server interface.
-+ *
-+ * Author : Stephen Smalley, <sds@epoch.ncsc.mil>
-+ */
-+#ifndef _SELINUX_SECURITY_H_
-+#define _SELINUX_SECURITY_H_
-+
-+#include "flask.h"
-+
-+#define SECSID_NULL 0x00000000 /* unspecified SID */
-+#define SECSID_WILD 0xffffffff /* wildcard SID */
-+#define SECCLASS_NULL 0x0000 /* no class */
-+
-+#define SELINUX_MAGIC 0xf97cff8c
-+
-+int security_load_policy(void * data, size_t len);
-+
-+struct av_decision {
-+ u32 allowed;
-+ u32 decided;
-+ u32 auditallow;
-+ u32 auditdeny;
-+ u32 seqno;
-+};
-+
-+int security_compute_av(u32 ssid, u32 tsid,
-+ u16 tclass, u32 requested,
-+ struct av_decision *avd);
-+
-+int security_transition_sid(u32 ssid, u32 tsid,
-+ u16 tclass, u32 *out_sid);
-+
-+int security_member_sid(u32 ssid, u32 tsid,
-+ u16 tclass, u32 *out_sid);
-+
-+int security_change_sid(u32 ssid, u32 tsid,
-+ u16 tclass, u32 *out_sid);
-+
-+int security_sid_to_context(u32 sid, char **scontext,
-+ u32 *scontext_len);
-+
-+int security_context_to_sid(char *scontext, u32 scontext_len,
-+ u32 *out_sid);
-+
-+int security_get_user_sids(u32 callsid, char *username,
-+ u32 **sids, u32 *nel);
-+
-+int security_port_sid(u16 domain, u16 type, u8 protocol, u16 port,
-+ u32 *out_sid);
-+
-+int security_netif_sid(char *name, u32 *if_sid,
-+ u32 *msg_sid);
-+
-+int security_node_sid(u16 domain, void *addr, u32 addrlen,
-+ u32 *out_sid);
-+
-+#define SECURITY_FS_USE_XATTR 1 /* use xattr */
-+#define SECURITY_FS_USE_TRANS 2 /* use transition SIDs, e.g. devpts/tmpfs */
-+#define SECURITY_FS_USE_TASK 3 /* use task SIDs, e.g. pipefs/sockfs */
-+#define SECURITY_FS_USE_GENFS 4 /* use the genfs support */
-+#define SECURITY_FS_USE_NONE 5 /* no labeling support */
-+int security_fs_use(const char *fstype, unsigned int *behavior,
-+ u32 *sid);
-+
-+int security_genfs_sid(const char *fstype, char *name, u16 sclass,
-+ u32 *sid);
-+
-+#endif /* _SELINUX_SECURITY_H_ */
-+
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/Kconfig 2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,34 @@
-+config SECURITY_SELINUX
-+ bool "NSA SELinux Support"
-+ depends on SECURITY
-+ default n
-+ help
-+ This enables NSA Security-Enhanced Linux (SELinux).
-+ You will also need a policy configuration and a labeled filesystem.
-+ You can obtain the policy compiler (checkpolicy), the utility for
-+ labeling filesystems (setfiles), and an example policy configuration
-+ from http://www.nsa.gov/selinux.
-+ If you are unsure how to answer this question, answer N.
-+
-+config SECURITY_SELINUX_DEVELOP
-+ bool "NSA SELinux Development Support"
-+ depends on SECURITY_SELINUX
-+ default y
-+ help
-+ This enables the development support option of NSA SELinux,
-+ which is useful for experimenting with SELinux and developing
-+ policies. If unsure, say Y. With this option enabled, the
-+ kernel will start in permissive mode (log everything, deny nothing)
-+ unless you specify enforcing=1 on the kernel command line. You
-+ can interactively toggle the kernel between enforcing mode and
-+ permissive mode (if permitted by the policy) via /selinux/enforce.
-+
-+config SECURITY_SELINUX_MLS
-+ bool "NSA SELinux MLS policy (EXPERIMENTAL)"
-+ depends on SECURITY_SELINUX && EXPERIMENTAL
-+ default n
-+ help
-+ This enables the NSA SELinux Multi-Level Security (MLS) policy in
-+ addition to the default RBAC/TE policy. This policy is
-+ experimental and has not been configured for use. Unless you
-+ specifically want to experiment with MLS, say N.
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/Makefile 2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,10 @@
-+#
-+# Makefile for building the SELinux module as part of the kernel tree.
-+#
-+
-+obj-$(CONFIG_SECURITY_SELINUX) := selinux.o ss/
-+
-+selinux-objs := avc.o hooks.o selinuxfs.o
-+
-+EXTRA_CFLAGS += -Isecurity/selinux/include
-+
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/selinuxfs.c 2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,593 @@
-+#include <linux/config.h>
-+#include <linux/kernel.h>
-+#include <linux/slab.h>
-+#include <linux/vmalloc.h>
-+#include <linux/fs.h>
-+#include <linux/init.h>
-+#include <linux/string.h>
-+#include <linux/security.h>
-+#include <asm/uaccess.h>
-+
-+/* selinuxfs pseudo filesystem for exporting the security policy API.
-+ Based on the proc code and the fs/nfsd/nfsctl.c code. */
-+
-+#include "flask.h"
-+#include "avc.h"
-+#include "avc_ss.h"
-+#include "security.h"
-+#include "objsec.h"
-+
-+/* Check whether a task is allowed to use a security operation. */
-+int task_has_security(struct task_struct *tsk,
-+ u32 perms)
-+{
-+ struct task_security_struct *tsec;
-+
-+ tsec = tsk->security;
-+
-+ return avc_has_perm(tsec->sid, SECINITSID_SECURITY,
-+ SECCLASS_SECURITY, perms, NULL, NULL);
-+}
-+
-+enum sel_inos {
-+ SEL_ROOT_INO = 2,
-+ SEL_LOAD, /* load policy */
-+ SEL_ENFORCE, /* get or set enforcing status */
-+ SEL_CONTEXT, /* validate context */
-+ SEL_ACCESS, /* compute access decision */
-+ SEL_CREATE, /* compute create labeling decision */
-+ SEL_RELABEL, /* compute relabeling decision */
-+ SEL_USER /* compute reachable user contexts */
-+};
-+
-+static ssize_t sel_read_enforce(struct file *filp, char *buf,
-+ size_t count, loff_t *ppos)
-+{
-+ char *page;
-+ ssize_t length;
-+ ssize_t end;
-+
-+ if (count < 0 || count > PAGE_SIZE)
-+ return -EINVAL;
-+ if (!(page = (char*)__get_free_page(GFP_KERNEL)))
-+ return -ENOMEM;
-+ memset(page, 0, PAGE_SIZE);
-+
-+ length = snprintf(page, PAGE_SIZE, "%d", selinux_enforcing);
-+ if (length < 0) {
-+ free_page((unsigned long)page);
-+ return length;
-+ }
-+
-+ if (*ppos >= length) {
-+ free_page((unsigned long)page);
-+ return 0;
-+ }
-+ if (count + *ppos > length)
-+ count = length - *ppos;
-+ end = count + *ppos;
-+ if (copy_to_user(buf, (char *) page + *ppos, count)) {
-+ count = -EFAULT;
-+ goto out;
-+ }
-+ *ppos = end;
-+out:
-+ free_page((unsigned long)page);
-+ return count;
-+}
-+
-+#ifdef CONFIG_SECURITY_SELINUX_DEVELOP
-+static ssize_t sel_write_enforce(struct file * file, const char * buf,
-+ size_t count, loff_t *ppos)
-+
-+{
-+ char *page;
-+ ssize_t length;
-+ int new_value;
-+
-+ if (count < 0 || count >= PAGE_SIZE)
-+ return -ENOMEM;
-+ if (*ppos != 0) {
-+ /* No partial writes. */
-+ return -EINVAL;
-+ }
-+ page = (char*)__get_free_page(GFP_KERNEL);
-+ if (!page)
-+ return -ENOMEM;
-+ memset(page, 0, PAGE_SIZE);
-+ length = -EFAULT;
-+ if (copy_from_user(page, buf, count))
-+ goto out;
-+
-+ length = -EINVAL;
-+ if (sscanf(page, "%d", &new_value) != 1)
-+ goto out;
-+
-+ if (new_value != selinux_enforcing) {
-+ length = task_has_security(current, SECURITY__SETENFORCE);
-+ if (length)
-+ goto out;
-+ selinux_enforcing = new_value;
-+ if (selinux_enforcing)
-+ avc_ss_reset(0);
-+ }
-+ length = count;
-+out:
-+ free_page((unsigned long) page);
-+ return length;
-+}
-+#else
-+#define sel_write_enforce NULL
-+#endif
-+
-+static struct file_operations sel_enforce_ops = {
-+ .read = sel_read_enforce,
-+ .write = sel_write_enforce,
-+};
-+
-+static ssize_t sel_write_load(struct file * file, const char * buf,
-+ size_t count, loff_t *ppos)
-+
-+{
-+ ssize_t length;
-+ void *data;
-+
-+ length = task_has_security(current, SECURITY__LOAD_POLICY);
-+ if (length)
-+ return length;
-+
-+ if (*ppos != 0) {
-+ /* No partial writes. */
-+ return -EINVAL;
-+ }
-+
-+ if ((count < 0) || (count > 64 * 1024 * 1024) || (data = vmalloc(count)) == NULL)
-+ return -ENOMEM;
-+
-+ length = -EFAULT;
-+ if (copy_from_user(data, buf, count) != 0)
-+ goto out;
-+
-+ length = security_load_policy(data, count);
-+ if (length)
-+ goto out;
-+
-+ length = count;
-+out:
-+ vfree(data);
-+ return length;
-+}
-+
-+static struct file_operations sel_load_ops = {
-+ .write = sel_write_load,
-+};
-+
-+
-+static ssize_t sel_write_context(struct file * file, const char * buf,
-+ size_t count, loff_t *ppos)
-+
-+{
-+ char *page;
-+ u32 sid;
-+ ssize_t length;
-+
-+ length = task_has_security(current, SECURITY__CHECK_CONTEXT);
-+ if (length)
-+ return length;
-+
-+ if (count < 0 || count >= PAGE_SIZE)
-+ return -ENOMEM;
-+ if (*ppos != 0) {
-+ /* No partial writes. */
-+ return -EINVAL;
-+ }
-+ page = (char*)__get_free_page(GFP_KERNEL);
-+ if (!page)
-+ return -ENOMEM;
-+ memset(page, 0, PAGE_SIZE);
-+ length = -EFAULT;
-+ if (copy_from_user(page, buf, count))
-+ goto out;
-+
-+ length = security_context_to_sid(page, count, &sid);
-+ if (length < 0)
-+ goto out;
-+
-+ length = count;
-+out:
-+ free_page((unsigned long) page);
-+ return length;
-+}
-+
-+static struct file_operations sel_context_ops = {
-+ .write = sel_write_context,
-+};
-+
-+
-+/*
-+ * Remaining nodes use transaction based IO methods like nfsd/nfsctl.c
-+ */
-+static ssize_t sel_write_access(struct file * file, char *buf, size_t size);
-+static ssize_t sel_write_create(struct file * file, char *buf, size_t size);
-+static ssize_t sel_write_relabel(struct file * file, char *buf, size_t size);
-+static ssize_t sel_write_user(struct file * file, char *buf, size_t size);
-+
-+static ssize_t (*write_op[])(struct file *, char *, size_t) = {
-+ [SEL_ACCESS] = sel_write_access,
-+ [SEL_CREATE] = sel_write_create,
-+ [SEL_RELABEL] = sel_write_relabel,
-+ [SEL_USER] = sel_write_user,
-+};
-+
-+/* an argresp is stored in an allocated page and holds the
-+ * size of the argument or response, along with its content
-+ */
-+struct argresp {
-+ ssize_t size;
-+ char data[0];
-+};
-+
-+#define PAYLOAD_SIZE (PAGE_SIZE - sizeof(struct argresp))
-+
-+/*
-+ * transaction based IO methods.
-+ * The file expects a single write which triggers the transaction, and then
-+ * possibly a read which collects the result - which is stored in a
-+ * file-local buffer.
-+ */
-+static ssize_t TA_write(struct file *file, const char *buf, size_t size, loff_t *pos)
-+{
-+ ino_t ino = file->f_dentry->d_inode->i_ino;
-+ struct argresp *ar;
-+ ssize_t rv = 0;
-+
-+ if (ino >= sizeof(write_op)/sizeof(write_op[0]) || !write_op[ino])
-+ return -EINVAL;
-+ if (file->private_data)
-+ return -EINVAL; /* only one write allowed per open */
-+ if (size > PAYLOAD_SIZE - 1) /* allow one byte for null terminator */
-+ return -EFBIG;
-+
-+ ar = kmalloc(PAGE_SIZE, GFP_KERNEL);
-+ if (!ar)
-+ return -ENOMEM;
-+ memset(ar, 0, PAGE_SIZE); /* clear buffer, particularly last byte */
-+ ar->size = 0;
-+ down(&file->f_dentry->d_inode->i_sem);
-+ if (file->private_data)
-+ rv = -EINVAL;
-+ else
-+ file->private_data = ar;
-+ up(&file->f_dentry->d_inode->i_sem);
-+ if (rv) {
-+ kfree(ar);
-+ return rv;
-+ }
-+ if (copy_from_user(ar->data, buf, size))
-+ return -EFAULT;
-+
-+ rv = write_op[ino](file, ar->data, size);
-+ if (rv>0) {
-+ ar->size = rv;
-+ rv = size;
-+ }
-+ return rv;
-+}
-+
-+static ssize_t TA_read(struct file *file, char *buf, size_t size, loff_t *pos)
-+{
-+ struct argresp *ar;
-+ ssize_t rv = 0;
-+
-+ if (file->private_data == NULL)
-+ rv = TA_write(file, buf, 0, pos);
-+ if (rv < 0)
-+ return rv;
-+
-+ ar = file->private_data;
-+ if (!ar)
-+ return 0;
-+ if (*pos >= ar->size)
-+ return 0;
-+ if (*pos + size > ar->size)
-+ size = ar->size - *pos;
-+ if (copy_to_user(buf, ar->data + *pos, size))
-+ return -EFAULT;
-+ *pos += size;
-+ return size;
-+}
-+
-+static int TA_open(struct inode *inode, struct file *file)
-+{
-+ file->private_data = NULL;
-+ return 0;
-+}
-+
-+static int TA_release(struct inode *inode, struct file *file)
-+{
-+ void *p = file->private_data;
-+ file->private_data = NULL;
-+ kfree(p);
-+ return 0;
-+}
-+
-+static struct file_operations transaction_ops = {
-+ .write = TA_write,
-+ .read = TA_read,
-+ .open = TA_open,
-+ .release = TA_release,
-+};
-+
-+/*
-+ * payload - write methods
-+ * If the method has a response, the response should be put in buf,
-+ * and the length returned. Otherwise return 0 or and -error.
-+ */
-+
-+static ssize_t sel_write_access(struct file * file, char *buf, size_t size)
-+{
-+ char *scon, *tcon;
-+ u32 ssid, tsid;
-+ u16 tclass;
-+ u32 req;
-+ struct av_decision avd;
-+ ssize_t length;
-+
-+ length = task_has_security(current, SECURITY__COMPUTE_AV);
-+ if (length)
-+ return length;
-+
-+ length = -ENOMEM;
-+ scon = kmalloc(size+1, GFP_KERNEL);
-+ if (!scon)
-+ return length;
-+ memset(scon, 0, size+1);
-+
-+ tcon = kmalloc(size+1, GFP_KERNEL);
-+ if (!tcon)
-+ goto out;
-+ memset(tcon, 0, size+1);
-+
-+ length = -EINVAL;
-+ if (sscanf(buf, "%s %s %hu %x", scon, tcon, &tclass, &req) != 4)
-+ goto out2;
-+
-+ length = security_context_to_sid(scon, strlen(scon)+1, &ssid);
-+ if (length < 0)
-+ goto out2;
-+ length = security_context_to_sid(tcon, strlen(tcon)+1, &tsid);
-+ if (length < 0)
-+ goto out2;
-+
-+ length = security_compute_av(ssid, tsid, tclass, req, &avd);
-+ if (length < 0)
-+ goto out2;
-+
-+ length = snprintf(buf, PAYLOAD_SIZE, "%x %x %x %x %u",
-+ avd.allowed, avd.decided,
-+ avd.auditallow, avd.auditdeny,
-+ avd.seqno);
-+out2:
-+ kfree(tcon);
-+out:
-+ kfree(scon);
-+ return length;
-+}
-+
-+static ssize_t sel_write_create(struct file * file, char *buf, size_t size)
-+{
-+ char *scon, *tcon;
-+ u32 ssid, tsid, newsid;
-+ u16 tclass;
-+ ssize_t length;
-+ char *newcon;
-+ u32 len;
-+
-+ length = task_has_security(current, SECURITY__COMPUTE_CREATE);
-+ if (length)
-+ return length;
-+
-+ length = -ENOMEM;
-+ scon = kmalloc(size+1, GFP_KERNEL);
-+ if (!scon)
-+ return length;
-+ memset(scon, 0, size+1);
-+
-+ tcon = kmalloc(size+1, GFP_KERNEL);
-+ if (!tcon)
-+ goto out;
-+ memset(tcon, 0, size+1);
-+
-+ length = -EINVAL;
-+ if (sscanf(buf, "%s %s %hu", scon, tcon, &tclass) != 3)
-+ goto out2;
-+
-+ length = security_context_to_sid(scon, strlen(scon)+1, &ssid);
-+ if (length < 0)
-+ goto out2;
-+ length = security_context_to_sid(tcon, strlen(tcon)+1, &tsid);
-+ if (length < 0)
-+ goto out2;
-+
-+ length = security_transition_sid(ssid, tsid, tclass, &newsid);
-+ if (length < 0)
-+ goto out2;
-+
-+ length = security_sid_to_context(newsid, &newcon, &len);
-+ if (length < 0)
-+ goto out2;
-+
-+ if (len > PAYLOAD_SIZE) {
-+ printk(KERN_ERR "%s: context size (%u) exceeds payload "
-+ "max\n", __FUNCTION__, len);
-+ length = -ERANGE;
-+ goto out3;
-+ }
-+
-+ memcpy(buf, newcon, len);
-+ length = len;
-+out3:
-+ kfree(newcon);
-+out2:
-+ kfree(tcon);
-+out:
-+ kfree(scon);
-+ return length;
-+}
-+
-+static ssize_t sel_write_relabel(struct file * file, char *buf, size_t size)
-+{
-+ char *scon, *tcon;
-+ u32 ssid, tsid, newsid;
-+ u16 tclass;
-+ ssize_t length;
-+ char *newcon;
-+ u32 len;
-+
-+ length = task_has_security(current, SECURITY__COMPUTE_RELABEL);
-+ if (length)
-+ return length;
-+
-+ length = -ENOMEM;
-+ scon = kmalloc(size+1, GFP_KERNEL);
-+ if (!scon)
-+ return length;
-+ memset(scon, 0, size+1);
-+
-+ tcon = kmalloc(size+1, GFP_KERNEL);
-+ if (!tcon)
-+ goto out;
-+ memset(tcon, 0, size+1);
-+
-+ length = -EINVAL;
-+ if (sscanf(buf, "%s %s %hu", scon, tcon, &tclass) != 3)
-+ goto out2;
-+
-+ length = security_context_to_sid(scon, strlen(scon)+1, &ssid);
-+ if (length < 0)
-+ goto out2;
-+ length = security_context_to_sid(tcon, strlen(tcon)+1, &tsid);
-+ if (length < 0)
-+ goto out2;
-+
-+ length = security_change_sid(ssid, tsid, tclass, &newsid);
-+ if (length < 0)
-+ goto out2;
-+
-+ length = security_sid_to_context(newsid, &newcon, &len);
-+ if (length < 0)
-+ goto out2;
-+
-+ if (len > PAYLOAD_SIZE) {
-+ length = -ERANGE;
-+ goto out3;
-+ }
-+
-+ memcpy(buf, newcon, len);
-+ length = len;
-+out3:
-+ kfree(newcon);
-+out2:
-+ kfree(tcon);
-+out:
-+ kfree(scon);
-+ return length;
-+}
-+
-+static ssize_t sel_write_user(struct file * file, char *buf, size_t size)
-+{
-+ char *con, *user, *ptr;
-+ u32 sid, *sids;
-+ ssize_t length;
-+ char *newcon;
-+ int i, rc;
-+ u32 len, nsids;
-+
-+ length = task_has_security(current, SECURITY__COMPUTE_USER);
-+ if (length)
-+ return length;
-+
-+ length = -ENOMEM;
-+ con = kmalloc(size+1, GFP_KERNEL);
-+ if (!con)
-+ return length;
-+ memset(con, 0, size+1);
-+
-+ user = kmalloc(size+1, GFP_KERNEL);
-+ if (!user)
-+ goto out;
-+ memset(user, 0, size+1);
-+
-+ length = -EINVAL;
-+ if (sscanf(buf, "%s %s", con, user) != 2)
-+ goto out2;
-+
-+ length = security_context_to_sid(con, strlen(con)+1, &sid);
-+ if (length < 0)
-+ goto out2;
-+
-+ length = security_get_user_sids(sid, user, &sids, &nsids);
-+ if (length < 0)
-+ goto out2;
-+
-+ length = sprintf(buf, "%u", nsids) + 1;
-+ ptr = buf + length;
-+ for (i = 0; i < nsids; i++) {
-+ rc = security_sid_to_context(sids[i], &newcon, &len);
-+ if (rc) {
-+ length = rc;
-+ goto out3;
-+ }
-+ if ((length + len) >= PAYLOAD_SIZE) {
-+ kfree(newcon);
-+ length = -ERANGE;
-+ goto out3;
-+ }
-+ memcpy(ptr, newcon, len);
-+ kfree(newcon);
-+ ptr += len;
-+ length += len;
-+ }
-+out3:
-+ kfree(sids);
-+out2:
-+ kfree(user);
-+out:
-+ kfree(con);
-+ return length;
-+}
-+
-+
-+static int sel_fill_super(struct super_block * sb, void * data, int silent)
-+{
-+ static struct tree_descr selinux_files[] = {
-+ [SEL_LOAD] = {"load", &sel_load_ops, S_IRUSR|S_IWUSR},
-+ [SEL_ENFORCE] = {"enforce", &sel_enforce_ops, S_IRUSR|S_IWUSR},
-+ [SEL_CONTEXT] = {"context", &sel_context_ops, S_IRUGO|S_IWUGO},
-+ [SEL_ACCESS] = {"access", &transaction_ops, S_IRUGO|S_IWUGO},
-+ [SEL_CREATE] = {"create", &transaction_ops, S_IRUGO|S_IWUGO},
-+ [SEL_RELABEL] = {"relabel", &transaction_ops, S_IRUGO|S_IWUGO},
-+ [SEL_USER] = {"user", &transaction_ops, S_IRUGO|S_IWUGO},
-+ /* last one */ {""}
-+ };
-+ return simple_fill_super(sb, SELINUX_MAGIC, selinux_files);
-+}
-+
-+static struct super_block *sel_get_sb(struct file_system_type *fs_type,
-+ int flags, const char *dev_name, void *data)
-+{
-+ return get_sb_single(fs_type, flags, data, sel_fill_super);
-+}
-+
-+static struct file_system_type sel_fs_type = {
-+ .name = "selinuxfs",
-+ .get_sb = sel_get_sb,
-+ .kill_sb = kill_litter_super,
-+};
-+
-+static int __init init_sel_fs(void)
-+{
-+ return register_filesystem(&sel_fs_type);
-+}
-+
-+__initcall(init_sel_fs);
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/ss/avtab.c 2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,264 @@
-+/*
-+ * Implementation of the access vector table type.
-+ *
-+ * Author : Stephen Smalley, <sds@epoch.ncsc.mil>
-+ */
-+#include "avtab.h"
-+#include "policydb.h"
-+
-+#define AVTAB_HASH(keyp) \
-+((keyp->target_class + \
-+ (keyp->target_type << 2) + \
-+ (keyp->source_type << 9)) & \
-+ AVTAB_HASH_MASK)
-+
-+int avtab_insert(struct avtab *h, struct avtab_key *key, struct avtab_datum *datum)
-+{
-+ int hvalue;
-+ struct avtab_node *prev, *cur, *newnode;
-+
-+ if (!h)
-+ return -EINVAL;
-+
-+ hvalue = AVTAB_HASH(key);
-+ for (prev = NULL, cur = h->htable[hvalue];
-+ cur;
-+ prev = cur, cur = cur->next) {
-+ if (key->source_type == cur->key.source_type &&
-+ key->target_type == cur->key.target_type &&
-+ key->target_class == cur->key.target_class &&
-+ (datum->specified & cur->datum.specified))
-+ return -EEXIST;
-+ if (key->source_type < cur->key.source_type)
-+ break;
-+ if (key->source_type == cur->key.source_type &&
-+ key->target_type < cur->key.target_type)
-+ break;
-+ if (key->source_type == cur->key.source_type &&
-+ key->target_type == cur->key.target_type &&
-+ key->target_class < cur->key.target_class)
-+ break;
-+ }
-+
-+ newnode = kmalloc(sizeof(*newnode), GFP_KERNEL);
-+ if (newnode == NULL)
-+ return -ENOMEM;
-+ memset(newnode, 0, sizeof(*newnode));
-+ newnode->key = *key;
-+ newnode->datum = *datum;
-+ if (prev) {
-+ newnode->next = prev->next;
-+ prev->next = newnode;
-+ } else {
-+ newnode->next = h->htable[hvalue];
-+ h->htable[hvalue] = newnode;
-+ }
-+
-+ h->nel++;
-+ return 0;
-+}
-+
-+
-+struct avtab_datum *avtab_search(struct avtab *h, struct avtab_key *key, int specified)
-+{
-+ int hvalue;
-+ struct avtab_node *cur;
-+
-+ if (!h)
-+ return NULL;
-+
-+ hvalue = AVTAB_HASH(key);
-+ for (cur = h->htable[hvalue]; cur; cur = cur->next) {
-+ if (key->source_type == cur->key.source_type &&
-+ key->target_type == cur->key.target_type &&
-+ key->target_class == cur->key.target_class &&
-+ (specified & cur->datum.specified))
-+ return &cur->datum;
-+
-+ if (key->source_type < cur->key.source_type)
-+ break;
-+ if (key->source_type == cur->key.source_type &&
-+ key->target_type < cur->key.target_type)
-+ break;
-+ if (key->source_type == cur->key.source_type &&
-+ key->target_type == cur->key.target_type &&
-+ key->target_class < cur->key.target_class)
-+ break;
-+ }
-+
-+ return NULL;
-+}
-+
-+void avtab_destroy(struct avtab *h)
-+{
-+ int i;
-+ struct avtab_node *cur, *temp;
-+
-+ if (!h)
-+ return;
-+
-+ for (i = 0; i < AVTAB_SIZE; i++) {
-+ cur = h->htable[i];
-+ while (cur != NULL) {
-+ temp = cur;
-+ cur = cur->next;
-+ kfree(temp);
-+ }
-+ h->htable[i] = NULL;
-+ }
-+ kfree(h->htable);
-+}
-+
-+
-+int avtab_map(struct avtab *h,
-+ int (*apply) (struct avtab_key *k,
-+ struct avtab_datum *d,
-+ void *args),
-+ void *args)
-+{
-+ int i, ret;
-+ struct avtab_node *cur;
-+
-+ if (!h)
-+ return 0;
-+
-+ for (i = 0; i < AVTAB_SIZE; i++) {
-+ cur = h->htable[i];
-+ while (cur != NULL) {
-+ ret = apply(&cur->key, &cur->datum, args);
-+ if (ret)
-+ return ret;
-+ cur = cur->next;
-+ }
-+ }
-+ return 0;
-+}
-+
-+int avtab_init(struct avtab *h)
-+{
-+ int i;
-+
-+ h->htable = kmalloc(sizeof(*(h->htable)) * AVTAB_SIZE, GFP_KERNEL);
-+ if (!h->htable)
-+ return -ENOMEM;
-+ for (i = 0; i < AVTAB_SIZE; i++)
-+ h->htable[i] = NULL;
-+ h->nel = 0;
-+ return 0;
-+}
-+
-+void avtab_hash_eval(struct avtab *h, char *tag)
-+{
-+ int i, chain_len, slots_used, max_chain_len;
-+ struct avtab_node *cur;
-+
-+ slots_used = 0;
-+ max_chain_len = 0;
-+ for (i = 0; i < AVTAB_SIZE; i++) {
-+ cur = h->htable[i];
-+ if (cur) {
-+ slots_used++;
-+ chain_len = 0;
-+ while (cur) {
-+ chain_len++;
-+ cur = cur->next;
-+ }
-+
-+ if (chain_len > max_chain_len)
-+ max_chain_len = chain_len;
-+ }
-+ }
-+
-+ printk(KERN_INFO "%s: %d entries and %d/%d buckets used, longest "
-+ "chain length %d\n", tag, h->nel, slots_used, AVTAB_SIZE,
-+ max_chain_len);
-+}
-+
-+int avtab_read(struct avtab *a, void *fp, u32 config)
-+{
-+ int i, rc = -EINVAL;
-+ struct avtab_key avkey;
-+ struct avtab_datum avdatum;
-+ u32 *buf;
-+ u32 nel, items, items2;
-+
-+
-+ buf = next_entry(fp, sizeof(u32));
-+ if (!buf) {
-+ printk(KERN_ERR "security: avtab: truncated table\n");
-+ goto bad;
-+ }
-+ nel = le32_to_cpu(buf[0]);
-+ if (!nel) {
-+ printk(KERN_ERR "security: avtab: table is empty\n");
-+ goto bad;
-+ }
-+ for (i = 0; i < nel; i++) {
-+ memset(&avkey, 0, sizeof(avkey));
-+ memset(&avdatum, 0, sizeof(avdatum));
-+
-+ buf = next_entry(fp, sizeof(u32));
-+ if (!buf) {
-+ printk(KERN_ERR "security: avtab: truncated entry\n");
-+ goto bad;
-+ }
-+ items2 = le32_to_cpu(buf[0]);
-+ buf = next_entry(fp, sizeof(u32)*items2);
-+ if (!buf) {
-+ printk(KERN_ERR "security: avtab: truncated entry\n");
-+ goto bad;
-+ }
-+ items = 0;
-+ avkey.source_type = le32_to_cpu(buf[items++]);
-+ avkey.target_type = le32_to_cpu(buf[items++]);
-+ avkey.target_class = le32_to_cpu(buf[items++]);
-+ avdatum.specified = le32_to_cpu(buf[items++]);
-+ if (!(avdatum.specified & (AVTAB_AV | AVTAB_TYPE))) {
-+ printk(KERN_ERR "security: avtab: null entry\n");
-+ goto bad;
-+ }
-+ if ((avdatum.specified & AVTAB_AV) &&
-+ (avdatum.specified & AVTAB_TYPE)) {
-+ printk(KERN_ERR "security: avtab: entry has both "
-+ "access vectors and types\n");
-+ goto bad;
-+ }
-+ if (avdatum.specified & AVTAB_AV) {
-+ if (avdatum.specified & AVTAB_ALLOWED)
-+ avtab_allowed(&avdatum) = le32_to_cpu(buf[items++]);
-+ if (avdatum.specified & AVTAB_AUDITDENY)
-+ avtab_auditdeny(&avdatum) = le32_to_cpu(buf[items++]);
-+ if (avdatum.specified & AVTAB_AUDITALLOW)
-+ avtab_auditallow(&avdatum) = le32_to_cpu(buf[items++]);
-+ } else {
-+ if (avdatum.specified & AVTAB_TRANSITION)
-+ avtab_transition(&avdatum) = le32_to_cpu(buf[items++]);
-+ if (avdatum.specified & AVTAB_CHANGE)
-+ avtab_change(&avdatum) = le32_to_cpu(buf[items++]);
-+ if (avdatum.specified & AVTAB_MEMBER)
-+ avtab_member(&avdatum) = le32_to_cpu(buf[items++]);
-+ }
-+ if (items != items2) {
-+ printk(KERN_ERR "security: avtab: entry only had %d "
-+ "items, expected %d\n", items2, items);
-+ goto bad;
-+ }
-+ rc = avtab_insert(a, &avkey, &avdatum);
-+ if (rc) {
-+ if (rc == -ENOMEM)
-+ printk(KERN_ERR "security: avtab: out of memory\n");
-+ if (rc == -EEXIST)
-+ printk(KERN_ERR "security: avtab: duplicate entry\n");
-+ goto bad;
-+ }
-+ }
-+
-+ rc = 0;
-+out:
-+ return rc;
-+
-+bad:
-+ avtab_destroy(a);
-+ goto out;
-+}
-+
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/ss/avtab.h 2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,68 @@
-+/*
-+ * An access vector table (avtab) is a hash table
-+ * of access vectors and transition types indexed
-+ * by a type pair and a class. An access vector
-+ * table is used to represent the type enforcement
-+ * tables.
-+ *
-+ * Author : Stephen Smalley, <sds@epoch.ncsc.mil>
-+ */
-+#ifndef _SS_AVTAB_H_
-+#define _SS_AVTAB_H_
-+
-+struct avtab_key {
-+ u32 source_type; /* source type */
-+ u32 target_type; /* target type */
-+ u32 target_class; /* target object class */
-+};
-+
-+struct avtab_datum {
-+#define AVTAB_ALLOWED 1
-+#define AVTAB_AUDITALLOW 2
-+#define AVTAB_AUDITDENY 4
-+#define AVTAB_AV (AVTAB_ALLOWED | AVTAB_AUDITALLOW | AVTAB_AUDITDENY)
-+#define AVTAB_TRANSITION 16
-+#define AVTAB_MEMBER 32
-+#define AVTAB_CHANGE 64
-+#define AVTAB_TYPE (AVTAB_TRANSITION | AVTAB_MEMBER | AVTAB_CHANGE)
-+ u32 specified; /* what fields are specified */
-+ u32 data[3]; /* access vectors or types */
-+#define avtab_allowed(x) (x)->data[0]
-+#define avtab_auditdeny(x) (x)->data[1]
-+#define avtab_auditallow(x) (x)->data[2]
-+#define avtab_transition(x) (x)->data[0]
-+#define avtab_change(x) (x)->data[1]
-+#define avtab_member(x) (x)->data[2]
-+};
-+
-+struct avtab_node {
-+ struct avtab_key key;
-+ struct avtab_datum datum;
-+ struct avtab_node *next;
-+};
-+
-+struct avtab {
-+ struct avtab_node **htable;
-+ u32 nel; /* number of elements */
-+};
-+
-+int avtab_init(struct avtab *);
-+int avtab_insert(struct avtab *h, struct avtab_key *k, struct avtab_datum *d);
-+struct avtab_datum *avtab_search(struct avtab *h, struct avtab_key *k, int specified);
-+void avtab_destroy(struct avtab *h);
-+int avtab_map(struct avtab *h,
-+ int (*apply) (struct avtab_key *k,
-+ struct avtab_datum *d,
-+ void *args),
-+ void *args);
-+void avtab_hash_eval(struct avtab *h, char *tag);
-+int avtab_read(struct avtab *a, void *fp, u32 config);
-+
-+#define AVTAB_HASH_BITS 15
-+#define AVTAB_HASH_BUCKETS (1 << AVTAB_HASH_BITS)
-+#define AVTAB_HASH_MASK (AVTAB_HASH_BUCKETS-1)
-+
-+#define AVTAB_SIZE AVTAB_HASH_BUCKETS
-+
-+#endif /* _SS_AVTAB_H_ */
-+
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/ss/constraint.h 2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,54 @@
-+/*
-+ * A constraint is a condition that must be satisfied in
-+ * order for one or more permissions to be granted.
-+ * Constraints are used to impose additional restrictions
-+ * beyond the type-based rules in `te' or the role-based
-+ * transition rules in `rbac'. Constraints are typically
-+ * used to prevent a process from transitioning to a new user
-+ * identity or role unless it is in a privileged type.
-+ * Constraints are likewise typically used to prevent a
-+ * process from labeling an object with a different user
-+ * identity.
-+ *
-+ * Author : Stephen Smalley, <sds@epoch.ncsc.mil>
-+ */
-+#ifndef _SS_CONSTRAINT_H_
-+#define _SS_CONSTRAINT_H_
-+
-+#include "ebitmap.h"
-+
-+#define CEXPR_MAXDEPTH 5
-+
-+struct constraint_expr {
-+#define CEXPR_NOT 1 /* not expr */
-+#define CEXPR_AND 2 /* expr and expr */
-+#define CEXPR_OR 3 /* expr or expr */
-+#define CEXPR_ATTR 4 /* attr op attr */
-+#define CEXPR_NAMES 5 /* attr op names */
-+ u32 expr_type; /* expression type */
-+
-+#define CEXPR_USER 1 /* user */
-+#define CEXPR_ROLE 2 /* role */
-+#define CEXPR_TYPE 4 /* type */
-+#define CEXPR_TARGET 8 /* target if set, source otherwise */
-+ u32 attr; /* attribute */
-+
-+#define CEXPR_EQ 1 /* == or eq */
-+#define CEXPR_NEQ 2 /* != */
-+#define CEXPR_DOM 3 /* dom */
-+#define CEXPR_DOMBY 4 /* domby */
-+#define CEXPR_INCOMP 5 /* incomp */
-+ u32 op; /* operator */
-+
-+ struct ebitmap names; /* names */
-+
-+ struct constraint_expr *next; /* next expression */
-+};
-+
-+struct constraint_node {
-+ u32 permissions; /* constrained permissions */
-+ struct constraint_expr *expr; /* constraint on permissions */
-+ struct constraint_node *next; /* next constraint */
-+};
-+
-+#endif /* _SS_CONSTRAINT_H_ */
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/ss/context.h 2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,117 @@
-+/*
-+ * A security context is a set of security attributes
-+ * associated with each subject and object controlled
-+ * by the security policy. Security contexts are
-+ * externally represented as variable-length strings
-+ * that can be interpreted by a user or application
-+ * with an understanding of the security policy.
-+ * Internally, the security server uses a simple
-+ * structure. This structure is private to the
-+ * security server and can be changed without affecting
-+ * clients of the security server.
-+ *
-+ * Author : Stephen Smalley, <sds@epoch.ncsc.mil>
-+ */
-+#ifndef _SS_CONTEXT_H_
-+#define _SS_CONTEXT_H_
-+
-+#include "ebitmap.h"
-+#include "mls_types.h"
-+
-+/*
-+ * A security context consists of an authenticated user
-+ * identity, a role, a type and a MLS range.
-+ */
-+struct context {
-+ u32 user;
-+ u32 role;
-+ u32 type;
-+#ifdef CONFIG_SECURITY_SELINUX_MLS
-+ struct mls_range range;
-+#endif
-+};
-+
-+#ifdef CONFIG_SECURITY_SELINUX_MLS
-+
-+static inline void mls_context_init(struct context *c)
-+{
-+ memset(&c->range, 0, sizeof(c->range));
-+}
-+
-+static inline int mls_context_cpy(struct context *dst, struct context *src)
-+{
-+ int rc;
-+
-+ dst->range.level[0].sens = src->range.level[0].sens;
-+ rc = ebitmap_cpy(&dst->range.level[0].cat, &src->range.level[0].cat);
-+ if (rc)
-+ goto out;
-+
-+ dst->range.level[1].sens = src->range.level[1].sens;
-+ rc = ebitmap_cpy(&dst->range.level[1].cat, &src->range.level[1].cat);
-+ if (rc)
-+ ebitmap_destroy(&dst->range.level[0].cat);
-+out:
-+ return rc;
-+}
-+
-+static inline int mls_context_cmp(struct context *c1, struct context *c2)
-+{
-+ return ((c1->range.level[0].sens == c2->range.level[0].sens) &&
-+ ebitmap_cmp(&c1->range.level[0].cat,&c2->range.level[0].cat) &&
-+ (c1->range.level[1].sens == c2->range.level[1].sens) &&
-+ ebitmap_cmp(&c1->range.level[1].cat,&c2->range.level[1].cat));
-+}
-+
-+static inline void mls_context_destroy(struct context *c)
-+{
-+ ebitmap_destroy(&c->range.level[0].cat);
-+ ebitmap_destroy(&c->range.level[1].cat);
-+ mls_context_init(c);
-+}
-+
-+#else
-+
-+static inline void mls_context_init(struct context *c)
-+{ }
-+
-+static inline int mls_context_cpy(struct context *dst, struct context *src)
-+{ return 0; }
-+
-+static inline int mls_context_cmp(struct context *c1, struct context *c2)
-+{ return 1; }
-+
-+static inline void mls_context_destroy(struct context *c)
-+{ }
-+
-+#endif
-+
-+static inline void context_init(struct context *c)
-+{
-+ memset(c, 0, sizeof(*c));
-+}
-+
-+static inline int context_cpy(struct context *dst, struct context *src)
-+{
-+ dst->user = src->user;
-+ dst->role = src->role;
-+ dst->type = src->type;
-+ return mls_context_cpy(dst, src);
-+}
-+
-+static inline void context_destroy(struct context *c)
-+{
-+ c->user = c->role = c->type = 0;
-+ mls_context_destroy(c);
-+}
-+
-+static inline int context_cmp(struct context *c1, struct context *c2)
-+{
-+ return ((c1->user == c2->user) &&
-+ (c1->role == c2->role) &&
-+ (c1->type == c2->type) &&
-+ mls_context_cmp(c1, c2));
-+}
-+
-+#endif /* _SS_CONTEXT_H_ */
-+
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/ss/ebitmap.c 2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,332 @@
-+/*
-+ * Implementation of the extensible bitmap type.
-+ *
-+ * Author : Stephen Smalley, <sds@epoch.ncsc.mil>
-+ */
-+#include "ebitmap.h"
-+#include "policydb.h"
-+
-+int ebitmap_or(struct ebitmap *dst, struct ebitmap *e1, struct ebitmap *e2)
-+{
-+ struct ebitmap_node *n1, *n2, *new, *prev;
-+
-+ ebitmap_init(dst);
-+
-+ n1 = e1->node;
-+ n2 = e2->node;
-+ prev = 0;
-+ while (n1 || n2) {
-+ new = kmalloc(sizeof(*new), GFP_ATOMIC);
-+ if (!new) {
-+ ebitmap_destroy(dst);
-+ return -ENOMEM;
-+ }
-+ memset(new, 0, sizeof(*new));
-+ if (n1 && n2 && n1->startbit == n2->startbit) {
-+ new->startbit = n1->startbit;
-+ new->map = n1->map | n2->map;
-+ n1 = n1->next;
-+ n2 = n2->next;
-+ } else if (!n2 || (n1 && n1->startbit < n2->startbit)) {
-+ new->startbit = n1->startbit;
-+ new->map = n1->map;
-+ n1 = n1->next;
-+ } else {
-+ new->startbit = n2->startbit;
-+ new->map = n2->map;
-+ n2 = n2->next;
-+ }
-+
-+ new->next = 0;
-+ if (prev)
-+ prev->next = new;
-+ else
-+ dst->node = new;
-+ prev = new;
-+ }
-+
-+ dst->highbit = (e1->highbit > e2->highbit) ? e1->highbit : e2->highbit;
-+ return 0;
-+}
-+
-+int ebitmap_cmp(struct ebitmap *e1, struct ebitmap *e2)
-+{
-+ struct ebitmap_node *n1, *n2;
-+
-+ if (e1->highbit != e2->highbit)
-+ return 0;
-+
-+ n1 = e1->node;
-+ n2 = e2->node;
-+ while (n1 && n2 &&
-+ (n1->startbit == n2->startbit) &&
-+ (n1->map == n2->map)) {
-+ n1 = n1->next;
-+ n2 = n2->next;
-+ }
-+
-+ if (n1 || n2)
-+ return 0;
-+
-+ return 1;
-+}
-+
-+int ebitmap_cpy(struct ebitmap *dst, struct ebitmap *src)
-+{
-+ struct ebitmap_node *n, *new, *prev;
-+
-+ ebitmap_init(dst);
-+ n = src->node;
-+ prev = 0;
-+ while (n) {
-+ new = kmalloc(sizeof(*new), GFP_ATOMIC);
-+ if (!new) {
-+ ebitmap_destroy(dst);
-+ return -ENOMEM;
-+ }
-+ memset(new, 0, sizeof(*new));
-+ new->startbit = n->startbit;
-+ new->map = n->map;
-+ new->next = 0;
-+ if (prev)
-+ prev->next = new;
-+ else
-+ dst->node = new;
-+ prev = new;
-+ n = n->next;
-+ }
-+
-+ dst->highbit = src->highbit;
-+ return 0;
-+}
-+
-+int ebitmap_contains(struct ebitmap *e1, struct ebitmap *e2)
-+{
-+ struct ebitmap_node *n1, *n2;
-+
-+ if (e1->highbit < e2->highbit)
-+ return 0;
-+
-+ n1 = e1->node;
-+ n2 = e2->node;
-+ while (n1 && n2 && (n1->startbit <= n2->startbit)) {
-+ if (n1->startbit < n2->startbit) {
-+ n1 = n1->next;
-+ continue;
-+ }
-+ if ((n1->map & n2->map) != n2->map)
-+ return 0;
-+
-+ n1 = n1->next;
-+ n2 = n2->next;
-+ }
-+
-+ if (n2)
-+ return 0;
-+
-+ return 1;
-+}
-+
-+int ebitmap_get_bit(struct ebitmap *e, unsigned long bit)
-+{
-+ struct ebitmap_node *n;
-+
-+ if (e->highbit < bit)
-+ return 0;
-+
-+ n = e->node;
-+ while (n && (n->startbit <= bit)) {
-+ if ((n->startbit + MAPSIZE) > bit) {
-+ if (n->map & (MAPBIT << (bit - n->startbit)))
-+ return 1;
-+ else
-+ return 0;
-+ }
-+ n = n->next;
-+ }
-+
-+ return 0;
-+}
-+
-+int ebitmap_set_bit(struct ebitmap *e, unsigned long bit, int value)
-+{
-+ struct ebitmap_node *n, *prev, *new;
-+
-+ prev = 0;
-+ n = e->node;
-+ while (n && n->startbit <= bit) {
-+ if ((n->startbit + MAPSIZE) > bit) {
-+ if (value) {
-+ n->map |= (MAPBIT << (bit - n->startbit));
-+ } else {
-+ n->map &= ~(MAPBIT << (bit - n->startbit));
-+ if (!n->map) {
-+ /* drop this node from the bitmap */
-+
-+ if (!n->next) {
-+ /*
-+ * this was the highest map
-+ * within the bitmap
-+ */
-+ if (prev)
-+ e->highbit = prev->startbit + MAPSIZE;
-+ else
-+ e->highbit = 0;
-+ }
-+ if (prev)
-+ prev->next = n->next;
-+ else
-+ e->node = n->next;
-+
-+ kfree(n);
-+ }
-+ }
-+ return 0;
-+ }
-+ prev = n;
-+ n = n->next;
-+ }
-+
-+ if (!value)
-+ return 0;
-+
-+ new = kmalloc(sizeof(*new), GFP_ATOMIC);
-+ if (!new)
-+ return -ENOMEM;
-+ memset(new, 0, sizeof(*new));
-+
-+ new->startbit = bit & ~(MAPSIZE - 1);
-+ new->map = (MAPBIT << (bit - new->startbit));
-+
-+ if (!n)
-+ /* this node will be the highest map within the bitmap */
-+ e->highbit = new->startbit + MAPSIZE;
-+
-+ if (prev) {
-+ new->next = prev->next;
-+ prev->next = new;
-+ } else {
-+ new->next = e->node;
-+ e->node = new;
-+ }
-+
-+ return 0;
-+}
-+
-+void ebitmap_destroy(struct ebitmap *e)
-+{
-+ struct ebitmap_node *n, *temp;
-+
-+ if (!e)
-+ return;
-+
-+ n = e->node;
-+ while (n) {
-+ temp = n;
-+ n = n->next;
-+ kfree(temp);
-+ }
-+
-+ e->highbit = 0;
-+ e->node = 0;
-+ return;
-+}
-+
-+int ebitmap_read(struct ebitmap *e, void *fp)
-+{
-+ int rc = -EINVAL;
-+ struct ebitmap_node *n, *l;
-+ u32 *buf, mapsize, count, i;
-+ u64 map;
-+
-+ ebitmap_init(e);
-+
-+ buf = next_entry(fp, sizeof(u32)*3);
-+ if (!buf)
-+ goto out;
-+
-+ mapsize = le32_to_cpu(buf[0]);
-+ e->highbit = le32_to_cpu(buf[1]);
-+ count = le32_to_cpu(buf[2]);
-+
-+ if (mapsize != MAPSIZE) {
-+ printk(KERN_ERR "security: ebitmap: map size %d does not "
-+ "match my size %d (high bit was %d)\n", mapsize,
-+ MAPSIZE, e->highbit);
-+ goto out;
-+ }
-+ if (!e->highbit) {
-+ e->node = NULL;
-+ goto ok;
-+ }
-+ if (e->highbit & (MAPSIZE - 1)) {
-+ printk(KERN_ERR "security: ebitmap: high bit (%d) is not a "
-+ "multiple of the map size (%d)\n", e->highbit, MAPSIZE);
-+ goto bad;
-+ }
-+ l = NULL;
-+ for (i = 0; i < count; i++) {
-+ buf = next_entry(fp, sizeof(u32));
-+ if (!buf) {
-+ printk(KERN_ERR "security: ebitmap: truncated map\n");
-+ goto bad;
-+ }
-+ n = kmalloc(sizeof(*n), GFP_KERNEL);
-+ if (!n) {
-+ printk(KERN_ERR "security: ebitmap: out of memory\n");
-+ rc = -ENOMEM;
-+ goto bad;
-+ }
-+ memset(n, 0, sizeof(*n));
-+
-+ n->startbit = le32_to_cpu(buf[0]);
-+
-+ if (n->startbit & (MAPSIZE - 1)) {
-+ printk(KERN_ERR "security: ebitmap start bit (%d) is "
-+ "not a multiple of the map size (%d)\n",
-+ n->startbit, MAPSIZE);
-+ goto bad_free;
-+ }
-+ if (n->startbit > (e->highbit - MAPSIZE)) {
-+ printk(KERN_ERR "security: ebitmap start bit (%d) is "
-+ "beyond the end of the bitmap (%d)\n",
-+ n->startbit, (e->highbit - MAPSIZE));
-+ goto bad_free;
-+ }
-+ buf = next_entry(fp, sizeof(u64));
-+ if (!buf) {
-+ printk(KERN_ERR "security: ebitmap: truncated map\n");
-+ goto bad_free;
-+ }
-+ memcpy(&map, buf, sizeof(u64));
-+ n->map = le64_to_cpu(map);
-+
-+ if (!n->map) {
-+ printk(KERN_ERR "security: ebitmap: null map in "
-+ "ebitmap (startbit %d)\n", n->startbit);
-+ goto bad_free;
-+ }
-+ if (l) {
-+ if (n->startbit <= l->startbit) {
-+ printk(KERN_ERR "security: ebitmap: start "
-+ "bit %d comes after start bit %d\n",
-+ n->startbit, l->startbit);
-+ goto bad_free;
-+ }
-+ l->next = n;
-+ } else
-+ e->node = n;
-+
-+ l = n;
-+ }
-+
-+ok:
-+ rc = 0;
-+out:
-+ return rc;
-+bad_free:
-+ kfree(n);
-+bad:
-+ ebitmap_destroy(e);
-+ goto out;
-+}
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/ss/ebitmap.h 2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,49 @@
-+/*
-+ * An extensible bitmap is a bitmap that supports an
-+ * arbitrary number of bits. Extensible bitmaps are
-+ * used to represent sets of values, such as types,
-+ * roles, categories, and classes.
-+ *
-+ * Each extensible bitmap is implemented as a linked
-+ * list of bitmap nodes, where each bitmap node has
-+ * an explicitly specified starting bit position within
-+ * the total bitmap.
-+ *
-+ * Author : Stephen Smalley, <sds@epoch.ncsc.mil>
-+ */
-+#ifndef _SS_EBITMAP_H_
-+#define _SS_EBITMAP_H_
-+
-+#define MAPTYPE u64 /* portion of bitmap in each node */
-+#define MAPSIZE (sizeof(MAPTYPE) * 8) /* number of bits in node bitmap */
-+#define MAPBIT 1ULL /* a bit in the node bitmap */
-+
-+struct ebitmap_node {
-+ u32 startbit; /* starting position in the total bitmap */
-+ MAPTYPE map; /* this node's portion of the bitmap */
-+ struct ebitmap_node *next;
-+};
-+
-+struct ebitmap {
-+ struct ebitmap_node *node; /* first node in the bitmap */
-+ u32 highbit; /* highest position in the total bitmap */
-+};
-+
-+#define ebitmap_length(e) ((e)->highbit)
-+#define ebitmap_startbit(e) ((e)->node ? (e)->node->startbit : 0)
-+
-+static inline void ebitmap_init(struct ebitmap *e)
-+{
-+ memset(e, 0, sizeof(*e));
-+}
-+
-+int ebitmap_cmp(struct ebitmap *e1, struct ebitmap *e2);
-+int ebitmap_or(struct ebitmap *dst, struct ebitmap *e1, struct ebitmap *e2);
-+int ebitmap_cpy(struct ebitmap *dst, struct ebitmap *src);
-+int ebitmap_contains(struct ebitmap *e1, struct ebitmap *e2);
-+int ebitmap_get_bit(struct ebitmap *e, unsigned long bit);
-+int ebitmap_set_bit(struct ebitmap *e, unsigned long bit, int value);
-+void ebitmap_destroy(struct ebitmap *e);
-+int ebitmap_read(struct ebitmap *e, void *fp);
-+
-+#endif /* _SS_EBITMAP_H_ */
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/ss/global.h 2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,17 @@
-+#ifndef _SS_GLOBAL_H_
-+#define _SS_GLOBAL_H_
-+
-+#include <linux/kernel.h>
-+#include <linux/slab.h>
-+#include <linux/string.h>
-+#include <linux/ctype.h>
-+#include <linux/in.h>
-+#include <linux/spinlock.h>
-+#include <asm/semaphore.h>
-+
-+#include "flask.h"
-+#include "avc.h"
-+#include "avc_ss.h"
-+#include "security.h"
-+
-+#endif /* _SS_GLOBAL_H_ */
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/ss/hashtab.c 2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,277 @@
-+/*
-+ * Implementation of the hash table type.
-+ *
-+ * Author : Stephen Smalley, <sds@epoch.ncsc.mil>
-+ */
-+#include "hashtab.h"
-+
-+struct hashtab *hashtab_create(u32 (*hash_value)(struct hashtab *h, void *key),
-+ int (*keycmp)(struct hashtab *h, void *key1, void *key2),
-+ u32 size)
-+{
-+ struct hashtab *p;
-+ u32 i;
-+
-+ p = kmalloc(sizeof(*p), GFP_KERNEL);
-+ if (p == NULL)
-+ return p;
-+
-+ memset(p, 0, sizeof(*p));
-+ p->size = size;
-+ p->nel = 0;
-+ p->hash_value = hash_value;
-+ p->keycmp = keycmp;
-+ p->htable = kmalloc(sizeof(*(p->htable)) * size, GFP_KERNEL);
-+ if (p->htable == NULL) {
-+ kfree(p);
-+ return NULL;
-+ }
-+
-+ for (i = 0; i < size; i++)
-+ p->htable[i] = NULL;
-+
-+ return p;
-+}
-+
-+int hashtab_insert(struct hashtab *h, void *key, void *datum)
-+{
-+ u32 hvalue;
-+ struct hashtab_node *prev, *cur, *newnode;
-+
-+ if (!h || h->nel == HASHTAB_MAX_NODES)
-+ return -EINVAL;
-+
-+ hvalue = h->hash_value(h, key);
-+ prev = NULL;
-+ cur = h->htable[hvalue];
-+ while (cur && h->keycmp(h, key, cur->key) > 0) {
-+ prev = cur;
-+ cur = cur->next;
-+ }
-+
-+ if (cur && (h->keycmp(h, key, cur->key) == 0))
-+ return -EEXIST;
-+
-+ newnode = kmalloc(sizeof(*newnode), GFP_KERNEL);
-+ if (newnode == NULL)
-+ return -ENOMEM;
-+ memset(newnode, 0, sizeof(*newnode));
-+ newnode->key = key;
-+ newnode->datum = datum;
-+ if (prev) {
-+ newnode->next = prev->next;
-+ prev->next = newnode;
-+ } else {
-+ newnode->next = h->htable[hvalue];
-+ h->htable[hvalue] = newnode;
-+ }
-+
-+ h->nel++;
-+ return 0;
-+}
-+
-+int hashtab_remove(struct hashtab *h, void *key,
-+ void (*destroy)(void *k, void *d, void *args),
-+ void *args)
-+{
-+ u32 hvalue;
-+ struct hashtab_node *cur, *last;
-+
-+ if (!h)
-+ return -EINVAL;
-+
-+ hvalue = h->hash_value(h, key);
-+ last = NULL;
-+ cur = h->htable[hvalue];
-+ while (cur != NULL && h->keycmp(h, key, cur->key) > 0) {
-+ last = cur;
-+ cur = cur->next;
-+ }
-+
-+ if (cur == NULL || (h->keycmp(h, key, cur->key) != 0))
-+ return -ENOENT;
-+
-+ if (last == NULL)
-+ h->htable[hvalue] = cur->next;
-+ else
-+ last->next = cur->next;
-+
-+ if (destroy)
-+ destroy(cur->key, cur->datum, args);
-+ kfree(cur);
-+ h->nel--;
-+ return 0;
-+}
-+
-+int hashtab_replace(struct hashtab *h, void *key, void *datum,
-+ void (*destroy)(void *k, void *d, void *args),
-+ void *args)
-+{
-+ u32 hvalue;
-+ struct hashtab_node *prev, *cur, *newnode;
-+
-+ if (!h)
-+ return -EINVAL;
-+
-+ hvalue = h->hash_value(h, key);
-+ prev = NULL;
-+ cur = h->htable[hvalue];
-+ while (cur != NULL && h->keycmp(h, key, cur->key) > 0) {
-+ prev = cur;
-+ cur = cur->next;
-+ }
-+
-+ if (cur && (h->keycmp(h, key, cur->key) == 0)) {
-+ if (destroy)
-+ destroy(cur->key, cur->datum, args);
-+ cur->key = key;
-+ cur->datum = datum;
-+ } else {
-+ newnode = kmalloc(sizeof(*newnode), GFP_KERNEL);
-+ if (newnode == NULL)
-+ return -ENOMEM;
-+ memset(newnode, 0, sizeof(*newnode));
-+ newnode->key = key;
-+ newnode->datum = datum;
-+ if (prev) {
-+ newnode->next = prev->next;
-+ prev->next = newnode;
-+ } else {
-+ newnode->next = h->htable[hvalue];
-+ h->htable[hvalue] = newnode;
-+ }
-+ }
-+
-+ return 0;
-+}
-+
-+void *hashtab_search(struct hashtab *h, void *key)
-+{
-+ u32 hvalue;
-+ struct hashtab_node *cur;
-+
-+ if (!h)
-+ return NULL;
-+
-+ hvalue = h->hash_value(h, key);
-+ cur = h->htable[hvalue];
-+ while (cur != NULL && h->keycmp(h, key, cur->key) > 0)
-+ cur = cur->next;
-+
-+ if (cur == NULL || (h->keycmp(h, key, cur->key) != 0))
-+ return NULL;
-+
-+ return cur->datum;
-+}
-+
-+void hashtab_destroy(struct hashtab *h)
-+{
-+ u32 i;
-+ struct hashtab_node *cur, *temp;
-+
-+ if (!h)
-+ return;
-+
-+ for (i = 0; i < h->size; i++) {
-+ cur = h->htable[i];
-+ while (cur != NULL) {
-+ temp = cur;
-+ cur = cur->next;
-+ kfree(temp);
-+ }
-+ h->htable[i] = NULL;
-+ }
-+
-+ kfree(h->htable);
-+ h->htable = NULL;
-+
-+ kfree(h);
-+}
-+
-+int hashtab_map(struct hashtab *h,
-+ int (*apply)(void *k, void *d, void *args),
-+ void *args)
-+{
-+ u32 i;
-+ int ret;
-+ struct hashtab_node *cur;
-+
-+ if (!h)
-+ return 0;
-+
-+ for (i = 0; i < h->size; i++) {
-+ cur = h->htable[i];
-+ while (cur != NULL) {
-+ ret = apply(cur->key, cur->datum, args);
-+ if (ret)
-+ return ret;
-+ cur = cur->next;
-+ }
-+ }
-+ return 0;
-+}
-+
-+
-+void hashtab_map_remove_on_error(struct hashtab *h,
-+ int (*apply)(void *k, void *d, void *args),
-+ void (*destroy)(void *k, void *d, void *args),
-+ void *args)
-+{
-+ u32 i;
-+ int ret;
-+ struct hashtab_node *last, *cur, *temp;
-+
-+ if (!h)
-+ return;
-+
-+ for (i = 0; i < h->size; i++) {
-+ last = NULL;
-+ cur = h->htable[i];
-+ while (cur != NULL) {
-+ ret = apply(cur->key, cur->datum, args);
-+ if (ret) {
-+ if (last)
-+ last->next = cur->next;
-+ else
-+ h->htable[i] = cur->next;
-+
-+ temp = cur;
-+ cur = cur->next;
-+ if (destroy)
-+ destroy(temp->key, temp->datum, args);
-+ kfree(temp);
-+ h->nel--;
-+ } else {
-+ last = cur;
-+ cur = cur->next;
-+ }
-+ }
-+ }
-+ return;
-+}
-+
-+void hashtab_stat(struct hashtab *h, struct hashtab_info *info)
-+{
-+ u32 i, chain_len, slots_used, max_chain_len;
-+ struct hashtab_node *cur;
-+
-+ slots_used = 0;
-+ max_chain_len = 0;
-+ for (slots_used = max_chain_len = i = 0; i < h->size; i++) {
-+ cur = h->htable[i];
-+ if (cur) {
-+ slots_used++;
-+ chain_len = 0;
-+ while (cur) {
-+ chain_len++;
-+ cur = cur->next;
-+ }
-+
-+ if (chain_len > max_chain_len)
-+ max_chain_len = chain_len;
-+ }
-+ }
-+
-+ info->slots_used = slots_used;
-+ info->max_chain_len = max_chain_len;
-+}
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/ss/hashtab.h 2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,125 @@
-+/*
-+ * A hash table (hashtab) maintains associations between
-+ * key values and datum values. The type of the key values
-+ * and the type of the datum values is arbitrary. The
-+ * functions for hash computation and key comparison are
-+ * provided by the creator of the table.
-+ *
-+ * Author : Stephen Smalley, <sds@epoch.ncsc.mil>
-+ */
-+#ifndef _SS_HASHTAB_H_
-+#define _SS_HASHTAB_H_
-+
-+#define HASHTAB_MAX_NODES 0xffffffff
-+
-+struct hashtab_node {
-+ void *key;
-+ void *datum;
-+ struct hashtab_node *next;
-+};
-+
-+struct hashtab {
-+ struct hashtab_node **htable; /* hash table */
-+ u32 size; /* number of slots in hash table */
-+ u32 nel; /* number of elements in hash table */
-+ u32 (*hash_value)(struct hashtab *h, void *key);
-+ /* hash function */
-+ int (*keycmp)(struct hashtab *h, void *key1, void *key2);
-+ /* key comparison function */
-+};
-+
-+struct hashtab_info {
-+ u32 slots_used;
-+ u32 max_chain_len;
-+};
-+
-+/*
-+ * Creates a new hash table with the specified characteristics.
-+ *
-+ * Returns NULL if insufficent space is available or
-+ * the new hash table otherwise.
-+ */
-+struct hashtab *hashtab_create(u32 (*hash_value)(struct hashtab *h, void *key),
-+ int (*keycmp)(struct hashtab *h, void *key1, void *key2),
-+ u32 size);
-+
-+/*
-+ * Inserts the specified (key, datum) pair into the specified hash table.
-+ *
-+ * Returns -ENOMEM on memory allocation error,
-+ * -EEXIST if there is already an entry with the same key,
-+ * -EINVAL for general errors or
-+ * 0 otherwise.
-+ */
-+int hashtab_insert(struct hashtab *h, void *k, void *d);
-+
-+/*
-+ * Removes the entry with the specified key from the hash table.
-+ * Applies the specified destroy function to (key,datum,args) for
-+ * the entry.
-+ *
-+ * Returns -ENOENT if no entry has the specified key,
-+ * -EINVAL for general errors or
-+ *0 otherwise.
-+ */
-+int hashtab_remove(struct hashtab *h, void *k,
-+ void (*destroy)(void *k, void *d, void *args),
-+ void *args);
-+
-+/*
-+ * Insert or replace the specified (key, datum) pair in the specified
-+ * hash table. If an entry for the specified key already exists,
-+ * then the specified destroy function is applied to (key,datum,args)
-+ * for the entry prior to replacing the entry's contents.
-+ *
-+ * Returns -ENOMEM if insufficient space is available,
-+ * -EINVAL for general errors or
-+ * 0 otherwise.
-+ */
-+int hashtab_replace(struct hashtab *h, void *k, void *d,
-+ void (*destroy)(void *k, void *d, void *args),
-+ void *args);
-+
-+/*
-+ * Searches for the entry with the specified key in the hash table.
-+ *
-+ * Returns NULL if no entry has the specified key or
-+ * the datum of the entry otherwise.
-+ */
-+void *hashtab_search(struct hashtab *h, void *k);
-+
-+/*
-+ * Destroys the specified hash table.
-+ */
-+void hashtab_destroy(struct hashtab *h);
-+
-+/*
-+ * Applies the specified apply function to (key,datum,args)
-+ * for each entry in the specified hash table.
-+ *
-+ * The order in which the function is applied to the entries
-+ * is dependent upon the internal structure of the hash table.
-+ *
-+ * If apply returns a non-zero status, then hashtab_map will cease
-+ * iterating through the hash table and will propagate the error
-+ * return to its caller.
-+ */
-+int hashtab_map(struct hashtab *h,
-+ int (*apply)(void *k, void *d, void *args),
-+ void *args);
-+
-+/*
-+ * Same as hashtab_map, except that if apply returns a non-zero status,
-+ * then the (key,datum) pair will be removed from the hashtab and the
-+ * destroy function will be applied to (key,datum,args).
-+ */
-+void hashtab_map_remove_on_error(struct hashtab *h,
-+ int (*apply)(void *k, void *d, void *args),
-+ void (*destroy)(void *k, void *d, void *args),
-+ void *args);
-+
-+
-+/* Fill info with some hash table statistics */
-+void hashtab_stat(struct hashtab *h, struct hashtab_info *info);
-+
-+#endif /* _SS_HASHTAB_H */
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/ss/Makefile 2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,14 @@
-+#
-+# Makefile for building the SELinux security server as part of the kernel tree.
-+#
-+
-+EXTRA_CFLAGS += -Isecurity/selinux/include -include security/selinux/ss/global.h
-+
-+obj-y := ss.o
-+
-+ss-objs := ebitmap.o hashtab.o symtab.o sidtab.o avtab.o policydb.o services.o
-+
-+ifeq ($(CONFIG_SECURITY_SELINUX_MLS),y)
-+ss-objs += mls.o
-+endif
-+
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/ss/mls.c 2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,741 @@
-+/*
-+ * Implementation of the multi-level security (MLS) policy.
-+ *
-+ * Author : Stephen Smalley, <sds@epoch.ncsc.mil>
-+ */
-+#include "mls.h"
-+#include "policydb.h"
-+#include "services.h"
-+
-+/*
-+ * Remove any permissions from `allowed' that are
-+ * denied by the MLS policy.
-+ */
-+void mls_compute_av(struct context *scontext,
-+ struct context *tcontext,
-+ struct class_datum *tclass,
-+ u32 *allowed)
-+{
-+ unsigned int rel[2];
-+ int l;
-+
-+ for (l = 0; l < 2; l++)
-+ rel[l] = mls_level_relation(scontext->range.level[l],
-+ tcontext->range.level[l]);
-+
-+ if (rel[1] != MLS_RELATION_EQ) {
-+ if (rel[1] != MLS_RELATION_DOM &&
-+ !ebitmap_get_bit(&policydb.trustedreaders, scontext->type - 1) &&
-+ !ebitmap_get_bit(&policydb.trustedobjects, tcontext->type - 1)) {
-+ /* read(s,t) = (s.high >= t.high) = False */
-+ *allowed = (*allowed) & ~(tclass->mlsperms.read);
-+ }
-+ if (rel[1] != MLS_RELATION_DOMBY &&
-+ !ebitmap_get_bit(&policydb.trustedreaders, tcontext->type - 1) &&
-+ !ebitmap_get_bit(&policydb.trustedobjects, scontext->type - 1)) {
-+ /* readby(s,t) = read(t,s) = False */
-+ *allowed = (*allowed) & ~(tclass->mlsperms.readby);
-+ }
-+ }
-+ if (((rel[0] != MLS_RELATION_DOMBY && rel[0] != MLS_RELATION_EQ) ||
-+ ((!mls_level_eq(tcontext->range.level[0],
-+ tcontext->range.level[1])) &&
-+ (rel[1] != MLS_RELATION_DOM && rel[1] != MLS_RELATION_EQ))) &&
-+ !ebitmap_get_bit(&policydb.trustedwriters, scontext->type - 1) &&
-+ !ebitmap_get_bit(&policydb.trustedobjects, tcontext->type - 1)) {
-+ /*
-+ * write(s,t) = ((s.low <= t.low = t.high) or (s.low
-+ * <= t.low <= t.high <= s.high)) = False
-+ */
-+ *allowed = (*allowed) & ~(tclass->mlsperms.write);
-+ }
-+
-+ if (((rel[0] != MLS_RELATION_DOM && rel[0] != MLS_RELATION_EQ) ||
-+ ((!mls_level_eq(scontext->range.level[0],
-+ scontext->range.level[1])) &&
-+ (rel[1] != MLS_RELATION_DOMBY && rel[1] != MLS_RELATION_EQ))) &&
-+ !ebitmap_get_bit(&policydb.trustedwriters, tcontext->type - 1) &&
-+ !ebitmap_get_bit(&policydb.trustedobjects, scontext->type - 1)) {
-+ /* writeby(s,t) = write(t,s) = False */
-+ *allowed = (*allowed) & ~(tclass->mlsperms.writeby);
-+ }
-+}
-+
-+/*
-+ * Return the length in bytes for the MLS fields of the
-+ * security context string representation of `context'.
-+ */
-+int mls_compute_context_len(struct context * context)
-+{
-+ int i, l, len;
-+
-+
-+ len = 0;
-+ for (l = 0; l < 2; l++) {
-+ len += strlen(policydb.p_sens_val_to_name[context->range.level[l].sens - 1]) + 1;
-+
-+ for (i = 1; i <= ebitmap_length(&context->range.level[l].cat); i++)
-+ if (ebitmap_get_bit(&context->range.level[l].cat, i - 1))
-+ len += strlen(policydb.p_cat_val_to_name[i - 1]) + 1;
-+
-+ if (mls_level_relation(context->range.level[0], context->range.level[1])
-+ == MLS_RELATION_EQ)
-+ break;
-+ }
-+
-+ return len;
-+}
-+
-+/*
-+ * Write the security context string representation of
-+ * the MLS fields of `context' into the string `*scontext'.
-+ * Update `*scontext' to point to the end of the MLS fields.
-+ */
-+int mls_sid_to_context(struct context *context,
-+ char **scontext)
-+{
-+ char *scontextp;
-+ int i, l;
-+
-+ scontextp = *scontext;
-+
-+ for (l = 0; l < 2; l++) {
-+ strcpy(scontextp,
-+ policydb.p_sens_val_to_name[context->range.level[l].sens - 1]);
-+ scontextp += strlen(policydb.p_sens_val_to_name[context->range.level[l].sens - 1]);
-+ *scontextp = ':';
-+ scontextp++;
-+ for (i = 1; i <= ebitmap_length(&context->range.level[l].cat); i++)
-+ if (ebitmap_get_bit(&context->range.level[l].cat, i - 1)) {
-+ strcpy(scontextp, policydb.p_cat_val_to_name[i - 1]);
-+ scontextp += strlen(policydb.p_cat_val_to_name[i - 1]);
-+ *scontextp = ',';
-+ scontextp++;
-+ }
-+ if (mls_level_relation(context->range.level[0], context->range.level[1])
-+ != MLS_RELATION_EQ) {
-+ scontextp--;
-+ sprintf(scontextp, "-");
-+ scontextp++;
-+
-+ } else {
-+ break;
-+ }
-+ }
-+
-+ *scontext = scontextp;
-+ return 0;
-+}
-+
-+/*
-+ * Return 1 if the MLS fields in the security context
-+ * structure `c' are valid. Return 0 otherwise.
-+ */
-+int mls_context_isvalid(struct policydb *p, struct context *c)
-+{
-+ unsigned int relation;
-+ struct level_datum *levdatum;
-+ struct user_datum *usrdatum;
-+ struct mls_range_list *rnode;
-+ int i, l;
-+
-+ /*
-+ * MLS range validity checks: high must dominate low, low level must
-+ * be valid (category set <-> sensitivity check), and high level must
-+ * be valid (category set <-> sensitivity check)
-+ */
-+ relation = mls_level_relation(c->range.level[1],
-+ c->range.level[0]);
-+ if (!(relation & (MLS_RELATION_DOM | MLS_RELATION_EQ)))
-+ /* High does not dominate low. */
-+ return 0;
-+
-+ for (l = 0; l < 2; l++) {
-+ if (!c->range.level[l].sens || c->range.level[l].sens > p->p_levels.nprim)
-+ return 0;
-+ levdatum = hashtab_search(p->p_levels.table,
-+ p->p_sens_val_to_name[c->range.level[l].sens - 1]);
-+ if (!levdatum)
-+ return 0;
-+
-+ for (i = 1; i <= ebitmap_length(&c->range.level[l].cat); i++) {
-+ if (ebitmap_get_bit(&c->range.level[l].cat, i - 1)) {
-+ if (i > p->p_cats.nprim)
-+ return 0;
-+ if (!ebitmap_get_bit(&levdatum->level->cat, i - 1))
-+ /*
-+ * Category may not be associated with
-+ * sensitivity in low level.
-+ */
-+ return 0;
-+ }
-+ }
-+ }
-+
-+ if (c->role == OBJECT_R_VAL)
-+ return 1;
-+
-+ /*
-+ * User must be authorized for the MLS range.
-+ */
-+ if (!c->user || c->user > p->p_users.nprim)
-+ return 0;
-+ usrdatum = p->user_val_to_struct[c->user - 1];
-+ for (rnode = usrdatum->ranges; rnode; rnode = rnode->next) {
-+ if (mls_range_contains(rnode->range, c->range))
-+ break;
-+ }
-+ if (!rnode)
-+ /* user may not be associated with range */
-+ return 0;
-+
-+ return 1;
-+}
-+
-+
-+/*
-+ * Set the MLS fields in the security context structure
-+ * `context' based on the string representation in
-+ * the string `*scontext'. Update `*scontext' to
-+ * point to the end of the string representation of
-+ * the MLS fields.
-+ *
-+ * This function modifies the string in place, inserting
-+ * NULL characters to terminate the MLS fields.
-+ */
-+int mls_context_to_sid(char oldc,
-+ char **scontext,
-+ struct context *context)
-+{
-+
-+ char delim;
-+ char *scontextp, *p;
-+ struct level_datum *levdatum;
-+ struct cat_datum *catdatum;
-+ int l, rc = -EINVAL;
-+
-+ if (!oldc) {
-+ /* No MLS component to the security context. Try
-+ to use a default 'unclassified' value. */
-+ levdatum = hashtab_search(policydb.p_levels.table,
-+ "unclassified");
-+ if (!levdatum)
-+ goto out;
-+ context->range.level[0].sens = levdatum->level->sens;
-+ context->range.level[1].sens = context->range.level[0].sens;
-+ rc = 0;
-+ goto out;
-+ }
-+
-+ /* Extract low sensitivity. */
-+ scontextp = p = *scontext;
-+ while (*p && *p != ':' && *p != '-')
-+ p++;
-+
-+ delim = *p;
-+ if (delim != 0)
-+ *p++ = 0;
-+
-+ for (l = 0; l < 2; l++) {
-+ levdatum = hashtab_search(policydb.p_levels.table, scontextp);
-+ if (!levdatum)
-+ goto out;
-+
-+ context->range.level[l].sens = levdatum->level->sens;
-+
-+ if (delim == ':') {
-+ /* Extract low category set. */
-+ while (1) {
-+ scontextp = p;
-+ while (*p && *p != ',' && *p != '-')
-+ p++;
-+ delim = *p;
-+ if (delim != 0)
-+ *p++ = 0;
-+
-+ catdatum = hashtab_search(policydb.p_cats.table,
-+ scontextp);
-+ if (!catdatum)
-+ goto out;
-+
-+ rc = ebitmap_set_bit(&context->range.level[l].cat,
-+ catdatum->value - 1, 1);
-+ if (rc)
-+ goto out;
-+ if (delim != ',')
-+ break;
-+ }
-+ }
-+ if (delim == '-') {
-+ /* Extract high sensitivity. */
-+ scontextp = p;
-+ while (*p && *p != ':')
-+ p++;
-+
-+ delim = *p;
-+ if (delim != 0)
-+ *p++ = 0;
-+ } else
-+ break;
-+ }
-+
-+ if (l == 0) {
-+ context->range.level[1].sens = context->range.level[0].sens;
-+ rc = ebitmap_cpy(&context->range.level[1].cat,
-+ &context->range.level[0].cat);
-+ if (rc)
-+ goto out;
-+ }
-+ *scontext = p;
-+ rc = 0;
-+out:
-+ return rc;
-+}
-+
-+/*
-+ * Copies the MLS range from `src' into `dst'.
-+ */
-+static inline int mls_copy_context(struct context *dst,
-+ struct context *src)
-+{
-+ int l, rc = 0;
-+
-+ /* Copy the MLS range from the source context */
-+ for (l = 0; l < 2; l++) {
-+
-+ dst->range.level[l].sens = src->range.level[l].sens;
-+ rc = ebitmap_cpy(&dst->range.level[l].cat,
-+ &src->range.level[l].cat);
-+ if (rc)
-+ break;
-+ }
-+
-+ return rc;
-+}
-+
-+/*
-+ * Convert the MLS fields in the security context
-+ * structure `c' from the values specified in the
-+ * policy `oldp' to the values specified in the policy `newp'.
-+ */
-+int mls_convert_context(struct policydb *oldp,
-+ struct policydb *newp,
-+ struct context *c)
-+{
-+ struct level_datum *levdatum;
-+ struct cat_datum *catdatum;
-+ struct ebitmap bitmap;
-+ int l, i;
-+
-+ for (l = 0; l < 2; l++) {
-+ levdatum = hashtab_search(newp->p_levels.table,
-+ oldp->p_sens_val_to_name[c->range.level[l].sens - 1]);
-+
-+ if (!levdatum)
-+ return -EINVAL;
-+ c->range.level[l].sens = levdatum->level->sens;
-+
-+ ebitmap_init(&bitmap);
-+ for (i = 1; i <= ebitmap_length(&c->range.level[l].cat); i++) {
-+ if (ebitmap_get_bit(&c->range.level[l].cat, i - 1)) {
-+ int rc;
-+
-+ catdatum = hashtab_search(newp->p_cats.table,
-+ oldp->p_cat_val_to_name[i - 1]);
-+ if (!catdatum)
-+ return -EINVAL;
-+ rc = ebitmap_set_bit(&bitmap, catdatum->value - 1, 1);
-+ if (rc)
-+ return rc;
-+ }
-+ }
-+ ebitmap_destroy(&c->range.level[l].cat);
-+ c->range.level[l].cat = bitmap;
-+ }
-+
-+ return 0;
-+}
-+
-+int mls_compute_sid(struct context *scontext,
-+ struct context *tcontext,
-+ u16 tclass,
-+ u32 specified,
-+ struct context *newcontext)
-+{
-+ switch (specified) {
-+ case AVTAB_TRANSITION:
-+ case AVTAB_CHANGE:
-+ /* Use the process MLS attributes. */
-+ return mls_copy_context(newcontext, scontext);
-+ case AVTAB_MEMBER:
-+ /* Only polyinstantiate the MLS attributes if
-+ the type is being polyinstantiated */
-+ if (newcontext->type != tcontext->type) {
-+ /* Use the process MLS attributes. */
-+ return mls_copy_context(newcontext, scontext);
-+ } else {
-+ /* Use the related object MLS attributes. */
-+ return mls_copy_context(newcontext, tcontext);
-+ }
-+ default:
-+ return -EINVAL;
-+ }
-+ return -EINVAL;
-+}
-+
-+void mls_user_destroy(struct user_datum *usrdatum)
-+{
-+ struct mls_range_list *rnode, *rtmp;
-+ rnode = usrdatum->ranges;
-+ while (rnode) {
-+ rtmp = rnode;
-+ rnode = rnode->next;
-+ ebitmap_destroy(&rtmp->range.level[0].cat);
-+ ebitmap_destroy(&rtmp->range.level[1].cat);
-+ kfree(rtmp);
-+ }
-+}
-+
-+int mls_read_perm(struct perm_datum *perdatum, void *fp)
-+{
-+ u32 *buf;
-+
-+ buf = next_entry(fp, sizeof(u32));
-+ if (!buf)
-+ return -EINVAL;
-+ perdatum->base_perms = le32_to_cpu(buf[0]);
-+ return 0;
-+}
-+
-+/*
-+ * Read a MLS level structure from a policydb binary
-+ * representation file.
-+ */
-+struct mls_level *mls_read_level(void *fp)
-+{
-+ struct mls_level *l;
-+ u32 *buf;
-+
-+ l = kmalloc(sizeof(*l), GFP_ATOMIC);
-+ if (!l) {
-+ printk(KERN_ERR "security: mls: out of memory\n");
-+ return NULL;
-+ }
-+ memset(l, 0, sizeof(*l));
-+
-+ buf = next_entry(fp, sizeof(u32));
-+ if (!buf) {
-+ printk(KERN_ERR "security: mls: truncated level\n");
-+ goto bad;
-+ }
-+ l->sens = cpu_to_le32(buf[0]);
-+
-+ if (ebitmap_read(&l->cat, fp)) {
-+ printk(KERN_ERR "security: mls: error reading level "
-+ "categories\n");
-+ goto bad;
-+ }
-+ return l;
-+
-+bad:
-+ kfree(l);
-+ return NULL;
-+}
-+
-+
-+/*
-+ * Read a MLS range structure from a policydb binary
-+ * representation file.
-+ */
-+static int mls_read_range_helper(struct mls_range *r, void *fp)
-+{
-+ u32 *buf;
-+ int items, rc = -EINVAL;
-+
-+ buf = next_entry(fp, sizeof(u32));
-+ if (!buf)
-+ goto out;
-+
-+ items = le32_to_cpu(buf[0]);
-+ buf = next_entry(fp, sizeof(u32) * items);
-+ if (!buf) {
-+ printk(KERN_ERR "security: mls: truncated range\n");
-+ goto out;
-+ }
-+ r->level[0].sens = le32_to_cpu(buf[0]);
-+ if (items > 1) {
-+ r->level[1].sens = le32_to_cpu(buf[1]);
-+ } else {
-+ r->level[1].sens = r->level[0].sens;
-+ }
-+
-+ rc = ebitmap_read(&r->level[0].cat, fp);
-+ if (rc) {
-+ printk(KERN_ERR "security: mls: error reading low "
-+ "categories\n");
-+ goto out;
-+ }
-+ if (items > 1) {
-+ rc = ebitmap_read(&r->level[1].cat, fp);
-+ if (rc) {
-+ printk(KERN_ERR "security: mls: error reading high "
-+ "categories\n");
-+ goto bad_high;
-+ }
-+ } else {
-+ rc = ebitmap_cpy(&r->level[1].cat, &r->level[0].cat);
-+ if (rc) {
-+ printk(KERN_ERR "security: mls: out of memory\n");
-+ goto bad_high;
-+ }
-+ }
-+
-+ rc = 0;
-+out:
-+ return rc;
-+bad_high:
-+ ebitmap_destroy(&r->level[0].cat);
-+ goto out;
-+}
-+
-+int mls_read_range(struct context *c, void *fp)
-+{
-+ return mls_read_range_helper(&c->range, fp);
-+}
-+
-+
-+/*
-+ * Read a MLS perms structure from a policydb binary
-+ * representation file.
-+ */
-+int mls_read_class(struct class_datum *cladatum, void *fp)
-+{
-+ struct mls_perms *p = &cladatum->mlsperms;
-+ u32 *buf;
-+
-+ buf = next_entry(fp, sizeof(u32)*4);
-+ if (!buf) {
-+ printk(KERN_ERR "security: mls: truncated mls permissions\n");
-+ return -EINVAL;
-+ }
-+ p->read = le32_to_cpu(buf[0]);
-+ p->readby = le32_to_cpu(buf[1]);
-+ p->write = le32_to_cpu(buf[2]);
-+ p->writeby = le32_to_cpu(buf[3]);
-+ return 0;
-+}
-+
-+int mls_read_user(struct user_datum *usrdatum, void *fp)
-+{
-+ struct mls_range_list *r, *l;
-+ int rc = 0;
-+ u32 nel, i;
-+ u32 *buf;
-+
-+ buf = next_entry(fp, sizeof(u32));
-+ if (!buf) {
-+ rc = -EINVAL;
-+ goto out;
-+ }
-+ nel = le32_to_cpu(buf[0]);
-+ l = NULL;
-+ for (i = 0; i < nel; i++) {
-+ r = kmalloc(sizeof(*r), GFP_ATOMIC);
-+ if (!r) {
-+ rc = -ENOMEM;
-+ goto out;
-+ }
-+ memset(r, 0, sizeof(*r));
-+
-+ rc = mls_read_range_helper(&r->range, fp);
-+ if (rc)
-+ goto out;
-+
-+ if (l)
-+ l->next = r;
-+ else
-+ usrdatum->ranges = r;
-+ l = r;
-+ }
-+out:
-+ return rc;
-+}
-+
-+int mls_read_nlevels(struct policydb *p, void *fp)
-+{
-+ u32 *buf;
-+
-+ buf = next_entry(fp, sizeof(u32));
-+ if (!buf)
-+ return -EINVAL;
-+ p->nlevels = le32_to_cpu(buf[0]);
-+ return 0;
-+}
-+
-+int mls_read_trusted(struct policydb *p, void *fp)
-+{
-+ int rc = 0;
-+
-+ rc = ebitmap_read(&p->trustedreaders, fp);
-+ if (rc)
-+ goto out;
-+ rc = ebitmap_read(&p->trustedwriters, fp);
-+ if (rc)
-+ goto out;
-+ rc = ebitmap_read(&p->trustedobjects, fp);
-+out:
-+ return rc;
-+}
-+
-+int sens_index(void *key, void *datum, void *datap)
-+{
-+ struct policydb *p;
-+ struct level_datum *levdatum;
-+
-+
-+ levdatum = datum;
-+ p = datap;
-+
-+ if (!levdatum->isalias)
-+ p->p_sens_val_to_name[levdatum->level->sens - 1] = key;
-+
-+ return 0;
-+}
-+
-+int cat_index(void *key, void *datum, void *datap)
-+{
-+ struct policydb *p;
-+ struct cat_datum *catdatum;
-+
-+
-+ catdatum = datum;
-+ p = datap;
-+
-+
-+ if (!catdatum->isalias)
-+ p->p_cat_val_to_name[catdatum->value - 1] = key;
-+
-+ return 0;
-+}
-+
-+int sens_destroy(void *key, void *datum, void *p)
-+{
-+ struct level_datum *levdatum;
-+
-+ kfree(key);
-+ levdatum = datum;
-+ if (!levdatum->isalias) {
-+ ebitmap_destroy(&levdatum->level->cat);
-+ kfree(levdatum->level);
-+ }
-+ kfree(datum);
-+ return 0;
-+}
-+
-+int cat_destroy(void *key, void *datum, void *p)
-+{
-+ kfree(key);
-+ kfree(datum);
-+ return 0;
-+}
-+
-+int sens_read(struct policydb *p, struct hashtab *h, void *fp)
-+{
-+ char *key = 0;
-+ struct level_datum *levdatum;
-+ int rc;
-+ u32 *buf, len;
-+
-+ levdatum = kmalloc(sizeof(*levdatum), GFP_ATOMIC);
-+ if (!levdatum) {
-+ rc = -ENOMEM;
-+ goto out;
-+ }
-+ memset(levdatum, 0, sizeof(*levdatum));
-+
-+ buf = next_entry(fp, sizeof(u32)*2);
-+ if (!buf) {
-+ rc = -EINVAL;
-+ goto bad;
-+ }
-+
-+ len = le32_to_cpu(buf[0]);
-+ levdatum->isalias = le32_to_cpu(buf[1]);
-+
-+ buf = next_entry(fp, len);
-+ if (!buf) {
-+ rc = -EINVAL;
-+ goto bad;
-+ }
-+ key = kmalloc(len + 1,GFP_ATOMIC);
-+ if (!key) {
-+ rc = -ENOMEM;
-+ goto bad;
-+ }
-+ memcpy(key, buf, len);
-+ key[len] = 0;
-+
-+ levdatum->level = mls_read_level(fp);
-+ if (!levdatum->level) {
-+ rc = -EINVAL;
-+ goto bad;
-+ }
-+
-+ rc = hashtab_insert(h, key, levdatum);
-+ if (rc)
-+ goto bad;
-+out:
-+ return rc;
-+bad:
-+ sens_destroy(key, levdatum, NULL);
-+ goto out;
-+}
-+
-+
-+int cat_read(struct policydb *p, struct hashtab *h, void *fp)
-+{
-+ char *key = 0;
-+ struct cat_datum *catdatum;
-+ int rc;
-+ u32 *buf, len;
-+
-+ catdatum = kmalloc(sizeof(*catdatum), GFP_ATOMIC);
-+ if (!catdatum) {
-+ rc = -ENOMEM;
-+ goto out;
-+ }
-+ memset(catdatum, 0, sizeof(*catdatum));
-+
-+ buf = next_entry(fp, sizeof(u32)*3);
-+ if (!buf) {
-+ rc = -EINVAL;
-+ goto bad;
-+ }
-+
-+ len = le32_to_cpu(buf[0]);
-+ catdatum->value = le32_to_cpu(buf[1]);
-+ catdatum->isalias = le32_to_cpu(buf[2]);
-+
-+ buf = next_entry(fp, len);
-+ if (!buf) {
-+ rc = -EINVAL;
-+ goto bad;
-+ }
-+ key = kmalloc(len + 1,GFP_ATOMIC);
-+ if (!key) {
-+ rc = -ENOMEM;
-+ goto bad;
-+ }
-+ memcpy(key, buf, len);
-+ key[len] = 0;
-+
-+ rc = hashtab_insert(h, key, catdatum);
-+ if (rc)
-+ goto bad;
-+out:
-+ return rc;
-+
-+bad:
-+ cat_destroy(key, catdatum, NULL);
-+ goto out;
-+}
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/ss/mls.h 2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,99 @@
-+/*
-+ * Multi-level security (MLS) policy operations.
-+ *
-+ * Author : Stephen Smalley, <sds@epoch.ncsc.mil>
-+ */
-+#ifndef _SS_MLS_H_
-+#define _SS_MLS_H_
-+
-+#include "context.h"
-+#include "policydb.h"
-+
-+#ifdef CONFIG_SECURITY_SELINUX_MLS
-+
-+void mls_compute_av(struct context *scontext,
-+ struct context *tcontext,
-+ struct class_datum *tclass,
-+ u32 *allowed);
-+
-+int mls_compute_context_len(struct context *context);
-+int mls_sid_to_context(struct context *context, char **scontext);
-+int mls_context_isvalid(struct policydb *p, struct context *c);
-+
-+int mls_context_to_sid(char oldc,
-+ char **scontext,
-+ struct context *context);
-+
-+int mls_convert_context(struct policydb *oldp,
-+ struct policydb *newp,
-+ struct context *context);
-+
-+int mls_compute_sid(struct context *scontext,
-+ struct context *tcontext,
-+ u16 tclass,
-+ u32 specified,
-+ struct context *newcontext);
-+
-+int sens_index(void *key, void *datum, void *datap);
-+int cat_index(void *key, void *datum, void *datap);
-+int sens_destroy(void *key, void *datum, void *p);
-+int cat_destroy(void *key, void *datum, void *p);
-+int sens_read(struct policydb *p, struct hashtab *h, void *fp);
-+int cat_read(struct policydb *p, struct hashtab *h, void *fp);
-+
-+#define mls_for_user_ranges(user, usercon) { \
-+struct mls_range_list *__ranges; \
-+for (__ranges = user->ranges; __ranges; __ranges = __ranges->next) { \
-+usercon.range = __ranges->range;
-+
-+#define mls_end_user_ranges } }
-+
-+#define mls_symtab_names , "levels", "categories"
-+#define mls_symtab_sizes , 16, 16
-+#define mls_index_f ,sens_index, cat_index
-+#define mls_destroy_f ,sens_destroy, cat_destroy
-+#define mls_read_f ,sens_read, cat_read
-+#define mls_write_f ,sens_write, cat_write
-+#define mls_policydb_index_others(p) printk(", %d levels", p->nlevels);
-+
-+#define mls_set_config(config) config |= POLICYDB_CONFIG_MLS
-+
-+void mls_user_destroy(struct user_datum *usrdatum);
-+int mls_read_range(struct context *c, void *fp);
-+int mls_read_perm(struct perm_datum *perdatum, void *fp);
-+int mls_read_class(struct class_datum *cladatum, void *fp);
-+int mls_read_user(struct user_datum *usrdatum, void *fp);
-+int mls_read_nlevels(struct policydb *p, void *fp);
-+int mls_read_trusted(struct policydb *p, void *fp);
-+
-+#else
-+
-+#define mls_compute_av(scontext, tcontext, tclass_datum, allowed)
-+#define mls_compute_context_len(context) 0
-+#define mls_sid_to_context(context, scontextpp)
-+#define mls_context_isvalid(p, c) 1
-+#define mls_context_to_sid(oldc, context_str, context) 0
-+#define mls_convert_context(oldp, newp, c) 0
-+#define mls_compute_sid(scontext, tcontext, tclass, specified, newcontextp) 0
-+#define mls_for_user_ranges(user, usercon)
-+#define mls_end_user_ranges
-+#define mls_symtab_names
-+#define mls_symtab_sizes
-+#define mls_index_f
-+#define mls_destroy_f
-+#define mls_read_f
-+#define mls_write_f
-+#define mls_policydb_index_others(p)
-+#define mls_set_config(config)
-+#define mls_user_destroy(usrdatum)
-+#define mls_read_range(c, fp) 0
-+#define mls_read_perm(p, fp) 0
-+#define mls_read_class(c, fp) 0
-+#define mls_read_user(u, fp) 0
-+#define mls_read_nlevels(p, fp) 0
-+#define mls_read_trusted(p, fp) 0
-+
-+#endif
-+
-+#endif /* _SS_MLS_H */
-+
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/ss/mls_types.h 2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,58 @@
-+/*
-+ * Type definitions for the multi-level security (MLS) policy.
-+ *
-+ * Author : Stephen Smalley, <sds@epoch.ncsc.mil>
-+ */
-+#ifndef _SS_MLS_TYPES_H_
-+#define _SS_MLS_TYPES_H_
-+
-+struct mls_level {
-+ u32 sens; /* sensitivity */
-+ struct ebitmap cat; /* category set */
-+};
-+
-+struct mls_range {
-+ struct mls_level level[2]; /* low == level[0], high == level[1] */
-+};
-+
-+struct mls_range_list {
-+ struct mls_range range;
-+ struct mls_range_list *next;
-+};
-+
-+#define MLS_RELATION_DOM 1 /* source dominates */
-+#define MLS_RELATION_DOMBY 2 /* target dominates */
-+#define MLS_RELATION_EQ 4 /* source and target are equivalent */
-+#define MLS_RELATION_INCOMP 8 /* source and target are incomparable */
-+
-+#define mls_level_eq(l1,l2) \
-+(((l1).sens == (l2).sens) && ebitmap_cmp(&(l1).cat,&(l2).cat))
-+
-+#define mls_level_relation(l1,l2) ( \
-+(((l1).sens == (l2).sens) && ebitmap_cmp(&(l1).cat,&(l2).cat)) ? \
-+ MLS_RELATION_EQ : \
-+(((l1).sens >= (l2).sens) && ebitmap_contains(&(l1).cat, &(l2).cat)) ? \
-+ MLS_RELATION_DOM : \
-+(((l2).sens >= (l1).sens) && ebitmap_contains(&(l2).cat, &(l1).cat)) ? \
-+ MLS_RELATION_DOMBY : \
-+ MLS_RELATION_INCOMP )
-+
-+#define mls_range_contains(r1,r2) \
-+((mls_level_relation((r1).level[0], (r2).level[0]) & \
-+ (MLS_RELATION_EQ | MLS_RELATION_DOMBY)) && \
-+ (mls_level_relation((r1).level[1], (r2).level[1]) & \
-+ (MLS_RELATION_EQ | MLS_RELATION_DOM)))
-+
-+/*
-+ * Every access vector permission is mapped to a set of MLS base
-+ * permissions, based on the flow properties of the corresponding
-+ * operation.
-+ */
-+struct mls_perms {
-+ u32 read; /* permissions that map to `read' */
-+ u32 readby; /* permissions that map to `readby' */
-+ u32 write; /* permissions that map to `write' */
-+ u32 writeby; /* permissions that map to `writeby' */
-+};
-+
-+#endif /* _SS_MLS_TYPES_H_ */
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/ss/policydb.c 2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,1429 @@
-+/*
-+ * Implementation of the policy database.
-+ *
-+ * Author : Stephen Smalley, <sds@epoch.ncsc.mil>
-+ */
-+#include "policydb.h"
-+#include "mls.h"
-+
-+#define _DEBUG_HASHES
-+
-+#ifdef DEBUG_HASHES
-+static char *symtab_name[SYM_NUM] = {
-+ "common prefixes",
-+ "classes",
-+ "roles",
-+ "types",
-+ "users"
-+ mls_symtab_names
-+};
-+#endif
-+
-+static unsigned int symtab_sizes[SYM_NUM] = {
-+ 2,
-+ 32,
-+ 16,
-+ 512,
-+ 128
-+ mls_symtab_sizes
-+};
-+
-+/*
-+ * Initialize the role table.
-+ */
-+int roles_init(struct policydb *p)
-+{
-+ char *key = 0;
-+ int rc;
-+ struct role_datum *role;
-+
-+ role = kmalloc(sizeof(*role), GFP_KERNEL);
-+ if (!role) {
-+ rc = -ENOMEM;
-+ goto out;
-+ }
-+ memset(role, 0, sizeof(*role));
-+ role->value = ++p->p_roles.nprim;
-+ if (role->value != OBJECT_R_VAL) {
-+ rc = -EINVAL;
-+ goto out_free_role;
-+ }
-+ key = kmalloc(strlen(OBJECT_R)+1,GFP_KERNEL);
-+ if (!key) {
-+ rc = -ENOMEM;
-+ goto out_free_role;
-+ }
-+ strcpy(key, OBJECT_R);
-+ rc = hashtab_insert(p->p_roles.table, key, role);
-+ if (rc)
-+ goto out_free_key;
-+out:
-+ return rc;
-+
-+out_free_key:
-+ kfree(key);
-+out_free_role:
-+ kfree(role);
-+ goto out;
-+}
-+
-+/*
-+ * Initialize a policy database structure.
-+ */
-+int policydb_init(struct policydb *p)
-+{
-+ int i, rc;
-+
-+ memset(p, 0, sizeof(*p));
-+
-+ for (i = 0; i < SYM_NUM; i++) {
-+ rc = symtab_init(&p->symtab[i], symtab_sizes[i]);
-+ if (rc)
-+ goto out_free_symtab;
-+ }
-+
-+ rc = avtab_init(&p->te_avtab);
-+ if (rc)
-+ goto out_free_symtab;
-+
-+ rc = roles_init(p);
-+ if (rc)
-+ goto out_free_avtab;
-+
-+out:
-+ return rc;
-+
-+out_free_avtab:
-+ avtab_destroy(&p->te_avtab);
-+
-+out_free_symtab:
-+ for (i = 0; i < SYM_NUM; i++)
-+ hashtab_destroy(p->symtab[i].table);
-+ goto out;
-+}
-+
-+/*
-+ * The following *_index functions are used to
-+ * define the val_to_name and val_to_struct arrays
-+ * in a policy database structure. The val_to_name
-+ * arrays are used when converting security context
-+ * structures into string representations. The
-+ * val_to_struct arrays are used when the attributes
-+ * of a class, role, or user are needed.
-+ */
-+
-+static int common_index(void *key, void *datum, void *datap)
-+{
-+ struct policydb *p;
-+ struct common_datum *comdatum;
-+
-+ comdatum = datum;
-+ p = datap;
-+ p->p_common_val_to_name[comdatum->value - 1] = key;
-+ return 0;
-+}
-+
-+static int class_index(void *key, void *datum, void *datap)
-+{
-+ struct policydb *p;
-+ struct class_datum *cladatum;
-+
-+ cladatum = datum;
-+ p = datap;
-+ p->p_class_val_to_name[cladatum->value - 1] = key;
-+ p->class_val_to_struct[cladatum->value - 1] = cladatum;
-+ return 0;
-+}
-+
-+static int role_index(void *key, void *datum, void *datap)
-+{
-+ struct policydb *p;
-+ struct role_datum *role;
-+
-+ role = datum;
-+ p = datap;
-+ p->p_role_val_to_name[role->value - 1] = key;
-+ p->role_val_to_struct[role->value - 1] = role;
-+ return 0;
-+}
-+
-+static int type_index(void *key, void *datum, void *datap)
-+{
-+ struct policydb *p;
-+ struct type_datum *typdatum;
-+
-+ typdatum = datum;
-+ p = datap;
-+
-+ if (typdatum->primary)
-+ p->p_type_val_to_name[typdatum->value - 1] = key;
-+
-+ return 0;
-+}
-+
-+static int user_index(void *key, void *datum, void *datap)
-+{
-+ struct policydb *p;
-+ struct user_datum *usrdatum;
-+
-+ usrdatum = datum;
-+ p = datap;
-+ p->p_user_val_to_name[usrdatum->value - 1] = key;
-+ p->user_val_to_struct[usrdatum->value - 1] = usrdatum;
-+ return 0;
-+}
-+
-+static int (*index_f[SYM_NUM]) (void *key, void *datum, void *datap) =
-+{
-+ common_index,
-+ class_index,
-+ role_index,
-+ type_index,
-+ user_index
-+ mls_index_f
-+};
-+
-+/*
-+ * Define the common val_to_name array and the class
-+ * val_to_name and val_to_struct arrays in a policy
-+ * database structure.
-+ *
-+ * Caller must clean up upon failure.
-+ */
-+int policydb_index_classes(struct policydb *p)
-+{
-+ int rc;
-+
-+ p->p_common_val_to_name =
-+ kmalloc(p->p_commons.nprim * sizeof(char *), GFP_KERNEL);
-+ if (!p->p_common_val_to_name) {
-+ rc = -ENOMEM;
-+ goto out;
-+ }
-+
-+ rc = hashtab_map(p->p_commons.table, common_index, p);
-+ if (rc)
-+ goto out;
-+
-+ p->class_val_to_struct =
-+ kmalloc(p->p_classes.nprim * sizeof(*(p->class_val_to_struct)), GFP_KERNEL);
-+ if (!p->class_val_to_struct) {
-+ rc = -ENOMEM;
-+ goto out;
-+ }
-+
-+ p->p_class_val_to_name =
-+ kmalloc(p->p_classes.nprim * sizeof(char *), GFP_KERNEL);
-+ if (!p->p_class_val_to_name) {
-+ rc = -ENOMEM;
-+ goto out;
-+ }
-+
-+ rc = hashtab_map(p->p_classes.table, class_index, p);
-+out:
-+ return rc;
-+}
-+
-+#ifdef DEBUG_HASHES
-+static void symtab_hash_eval(struct symtab *s)
-+{
-+ int i;
-+
-+ for (i = 0; i < SYM_NUM; i++) {
-+ struct hashtab *h = s[i].table;
-+ struct hashtab_info info;
-+
-+ hashtab_stat(h, &info);
-+ printk(KERN_INFO "%s: %d entries and %d/%d buckets used, "
-+ "longest chain length %d\n", symtab_name[i], h->nel,
-+ info.slots_used, h->size, info.max_chain_len);
-+ }
-+}
-+#endif
-+
-+/*
-+ * Define the other val_to_name and val_to_struct arrays
-+ * in a policy database structure.
-+ *
-+ * Caller must clean up on failure.
-+ */
-+int policydb_index_others(struct policydb *p)
-+{
-+ int i, rc = 0;
-+
-+ printk(KERN_INFO "security: %d users, %d roles, %d types",
-+ p->p_users.nprim, p->p_roles.nprim, p->p_types.nprim);
-+ mls_policydb_index_others(p);
-+ printk("\n");
-+
-+ printk(KERN_INFO "security: %d classes, %d rules\n",
-+ p->p_classes.nprim, p->te_avtab.nel);
-+
-+#ifdef DEBUG_HASHES
-+ avtab_hash_eval(&p->te_avtab, "rules");
-+ symtab_hash_eval(p->symtab);
-+#endif
-+
-+ p->role_val_to_struct =
-+ kmalloc(p->p_roles.nprim * sizeof(*(p->role_val_to_struct)),
-+ GFP_KERNEL);
-+ if (!p->role_val_to_struct) {
-+ rc = -ENOMEM;
-+ goto out;
-+ }
-+
-+ p->user_val_to_struct =
-+ kmalloc(p->p_users.nprim * sizeof(*(p->user_val_to_struct)),
-+ GFP_KERNEL);
-+ if (!p->user_val_to_struct) {
-+ rc = -ENOMEM;
-+ goto out;
-+ }
-+
-+ for (i = SYM_ROLES; i < SYM_NUM; i++) {
-+ p->sym_val_to_name[i] =
-+ kmalloc(p->symtab[i].nprim * sizeof(char *), GFP_KERNEL);
-+ if (!p->sym_val_to_name[i]) {
-+ rc = -ENOMEM;
-+ goto out;
-+ }
-+ rc = hashtab_map(p->symtab[i].table, index_f[i], p);
-+ if (rc)
-+ goto out;
-+ }
-+
-+out:
-+ return rc;
-+}
-+
-+/*
-+ * The following *_destroy functions are used to
-+ * free any memory allocated for each kind of
-+ * symbol data in the policy database.
-+ */
-+
-+static int perm_destroy(void *key, void *datum, void *p)
-+{
-+ kfree(key);
-+ kfree(datum);
-+ return 0;
-+}
-+
-+static int common_destroy(void *key, void *datum, void *p)
-+{
-+ struct common_datum *comdatum;
-+
-+ kfree(key);
-+ comdatum = datum;
-+ hashtab_map(comdatum->permissions.table, perm_destroy, 0);
-+ hashtab_destroy(comdatum->permissions.table);
-+ kfree(datum);
-+ return 0;
-+}
-+
-+static int class_destroy(void *key, void *datum, void *p)
-+{
-+ struct class_datum *cladatum;
-+ struct constraint_node *constraint, *ctemp;
-+ struct constraint_expr *e, *etmp;
-+
-+ kfree(key);
-+ cladatum = datum;
-+ hashtab_map(cladatum->permissions.table, perm_destroy, 0);
-+ hashtab_destroy(cladatum->permissions.table);
-+ constraint = cladatum->constraints;
-+ while (constraint) {
-+ e = constraint->expr;
-+ while (e) {
-+ ebitmap_destroy(&e->names);
-+ etmp = e;
-+ e = e->next;
-+ kfree(etmp);
-+ }
-+ ctemp = constraint;
-+ constraint = constraint->next;
-+ kfree(ctemp);
-+ }
-+ kfree(cladatum->comkey);
-+ kfree(datum);
-+ return 0;
-+}
-+
-+static int role_destroy(void *key, void *datum, void *p)
-+{
-+ struct role_datum *role;
-+
-+ kfree(key);
-+ role = datum;
-+ ebitmap_destroy(&role->dominates);
-+ ebitmap_destroy(&role->types);
-+ kfree(datum);
-+ return 0;
-+}
-+
-+static int type_destroy(void *key, void *datum, void *p)
-+{
-+ kfree(key);
-+ kfree(datum);
-+ return 0;
-+}
-+
-+static int user_destroy(void *key, void *datum, void *p)
-+{
-+ struct user_datum *usrdatum;
-+
-+ kfree(key);
-+ usrdatum = datum;
-+ ebitmap_destroy(&usrdatum->roles);
-+ mls_user_destroy(usrdatum);
-+ kfree(datum);
-+ return 0;
-+}
-+
-+static int (*destroy_f[SYM_NUM]) (void *key, void *datum, void *datap) =
-+{
-+ common_destroy,
-+ class_destroy,
-+ role_destroy,
-+ type_destroy,
-+ user_destroy
-+ mls_destroy_f
-+};
-+
-+/*
-+ * Free any memory allocated by a policy database structure.
-+ */
-+void policydb_destroy(struct policydb *p)
-+{
-+ struct ocontext *c, *ctmp;
-+ struct genfs *g, *gtmp;
-+ int i;
-+
-+ for (i = 0; i < SYM_NUM; i++) {
-+ hashtab_map(p->symtab[i].table, destroy_f[i], 0);
-+ hashtab_destroy(p->symtab[i].table);
-+ }
-+
-+ for (i = 0; i < SYM_NUM; i++) {
-+ if (p->sym_val_to_name[i])
-+ kfree(p->sym_val_to_name[i]);
-+ }
-+
-+ if (p->class_val_to_struct)
-+ kfree(p->class_val_to_struct);
-+ if (p->role_val_to_struct)
-+ kfree(p->role_val_to_struct);
-+ if (p->user_val_to_struct)
-+ kfree(p->user_val_to_struct);
-+
-+ avtab_destroy(&p->te_avtab);
-+
-+ for (i = 0; i < OCON_NUM; i++) {
-+ c = p->ocontexts[i];
-+ while (c) {
-+ ctmp = c;
-+ c = c->next;
-+ context_destroy(&ctmp->context[0]);
-+ context_destroy(&ctmp->context[1]);
-+ if (i == OCON_ISID || i == OCON_FS ||
-+ i == OCON_NETIF || i == OCON_FSUSE)
-+ kfree(ctmp->u.name);
-+ kfree(ctmp);
-+ }
-+ }
-+
-+ g = p->genfs;
-+ while (g) {
-+ kfree(g->fstype);
-+ c = g->head;
-+ while (c) {
-+ ctmp = c;
-+ c = c->next;
-+ context_destroy(&ctmp->context[0]);
-+ kfree(ctmp->u.name);
-+ kfree(ctmp);
-+ }
-+ gtmp = g;
-+ g = g->next;
-+ kfree(gtmp);
-+ }
-+
-+ return;
-+}
-+
-+/*
-+ * Load the initial SIDs specified in a policy database
-+ * structure into a SID table.
-+ */
-+int policydb_load_isids(struct policydb *p, struct sidtab *s)
-+{
-+ struct ocontext *head, *c;
-+ int rc;
-+
-+ rc = sidtab_init(s);
-+ if (rc) {
-+ printk(KERN_ERR "security: out of memory on SID table init\n");
-+ goto out;
-+ }
-+
-+ head = p->ocontexts[OCON_ISID];
-+ for (c = head; c; c = c->next) {
-+ if (!c->context[0].user) {
-+ printk(KERN_ERR "security: SID %s was never "
-+ "defined.\n", c->u.name);
-+ rc = -EINVAL;
-+ goto out;
-+ }
-+ if (sidtab_insert(s, c->sid[0], &c->context[0])) {
-+ printk(KERN_ERR "security: unable to load initial "
-+ "SID %s.\n", c->u.name);
-+ rc = -EINVAL;
-+ goto out;
-+ }
-+ }
-+out:
-+ return rc;
-+}
-+
-+/*
-+ * Return 1 if the fields in the security context
-+ * structure `c' are valid. Return 0 otherwise.
-+ */
-+int policydb_context_isvalid(struct policydb *p, struct context *c)
-+{
-+ struct role_datum *role;
-+ struct user_datum *usrdatum;
-+
-+ /*
-+ * Role must be authorized for the type.
-+ */
-+ if (!c->role || c->role > p->p_roles.nprim)
-+ return 0;
-+
-+ if (c->role != OBJECT_R_VAL) {
-+ role = p->role_val_to_struct[c->role - 1];
-+ if (!ebitmap_get_bit(&role->types,
-+ c->type - 1))
-+ /* role may not be associated with type */
-+ return 0;
-+
-+ /*
-+ * User must be authorized for the role.
-+ */
-+ if (!c->user || c->user > p->p_users.nprim)
-+ return 0;
-+ usrdatum = p->user_val_to_struct[c->user - 1];
-+ if (!usrdatum)
-+ return 0;
-+
-+ if (!ebitmap_get_bit(&usrdatum->roles,
-+ c->role - 1))
-+ /* user may not be associated with role */
-+ return 0;
-+ }
-+
-+ if (!mls_context_isvalid(p, c))
-+ return 0;
-+
-+ return 1;
-+}
-+
-+/*
-+ * Read and validate a security context structure
-+ * from a policydb binary representation file.
-+ */
-+static int context_read_and_validate(struct context *c,
-+ struct policydb *p,
-+ void *fp)
-+{
-+ u32 *buf;
-+ int rc = 0;
-+
-+ buf = next_entry(fp, sizeof(u32)*3);
-+ if (!buf) {
-+ printk(KERN_ERR "security: context truncated\n");
-+ rc = -EINVAL;
-+ goto out;
-+ }
-+ c->user = le32_to_cpu(buf[0]);
-+ c->role = le32_to_cpu(buf[1]);
-+ c->type = le32_to_cpu(buf[2]);
-+ if (mls_read_range(c, fp)) {
-+ printk(KERN_ERR "security: error reading MLS range of "
-+ "context\n");
-+ rc = -EINVAL;
-+ goto out;
-+ }
-+
-+ if (!policydb_context_isvalid(p, c)) {
-+ printk(KERN_ERR "security: invalid security context\n");
-+ context_destroy(c);
-+ rc = -EINVAL;
-+ }
-+out:
-+ return rc;
-+}
-+
-+/*
-+ * The following *_read functions are used to
-+ * read the symbol data from a policy database
-+ * binary representation file.
-+ */
-+
-+static int perm_read(struct policydb *p, struct hashtab *h, void *fp)
-+{
-+ char *key = 0;
-+ struct perm_datum *perdatum;
-+ int rc;
-+ u32 *buf, len;
-+
-+ perdatum = kmalloc(sizeof(*perdatum), GFP_KERNEL);
-+ if (!perdatum) {
-+ rc = -ENOMEM;
-+ goto out;
-+ }
-+ memset(perdatum, 0, sizeof(*perdatum));
-+
-+ buf = next_entry(fp, sizeof(u32)*2);
-+ if (!buf) {
-+ rc = -EINVAL;
-+ goto bad;
-+ }
-+
-+ len = le32_to_cpu(buf[0]);
-+ perdatum->value = le32_to_cpu(buf[1]);
-+ rc = mls_read_perm(perdatum, fp);
-+ if (rc)
-+ goto bad;
-+
-+ buf = next_entry(fp, len);
-+ if (!buf) {
-+ rc = -EINVAL;
-+ goto bad;
-+ }
-+ key = kmalloc(len + 1,GFP_KERNEL);
-+ if (!key) {
-+ rc = -ENOMEM;
-+ goto bad;
-+ }
-+ memcpy(key, buf, len);
-+ key[len] = 0;
-+
-+ rc = hashtab_insert(h, key, perdatum);
-+ if (rc)
-+ goto bad;
-+out:
-+ return rc;
-+bad:
-+ perm_destroy(key, perdatum, NULL);
-+ goto out;
-+}
-+
-+static int common_read(struct policydb *p, struct hashtab *h, void *fp)
-+{
-+ char *key = 0;
-+ struct common_datum *comdatum;
-+ u32 *buf, len, nel;
-+ int i, rc;
-+
-+ comdatum = kmalloc(sizeof(*comdatum), GFP_KERNEL);
-+ if (!comdatum) {
-+ rc = -ENOMEM;
-+ goto out;
-+ }
-+ memset(comdatum, 0, sizeof(*comdatum));
-+
-+ buf = next_entry(fp, sizeof(u32)*4);
-+ if (!buf) {
-+ rc = -EINVAL;
-+ goto bad;
-+ }
-+
-+ len = le32_to_cpu(buf[0]);
-+ comdatum->value = le32_to_cpu(buf[1]);
-+
-+ rc = symtab_init(&comdatum->permissions, PERM_SYMTAB_SIZE);
-+ if (rc)
-+ goto bad;
-+ comdatum->permissions.nprim = le32_to_cpu(buf[2]);
-+ nel = le32_to_cpu(buf[3]);
-+
-+ buf = next_entry(fp, len);
-+ if (!buf) {
-+ rc = -EINVAL;
-+ goto bad;
-+ }
-+ key = kmalloc(len + 1,GFP_KERNEL);
-+ if (!key) {
-+ rc = -ENOMEM;
-+ goto bad;
-+ }
-+ memcpy(key, buf, len);
-+ key[len] = 0;
-+
-+ for (i = 0; i < nel; i++) {
-+ rc = perm_read(p, comdatum->permissions.table, fp);
-+ if (rc)
-+ goto bad;
-+ }
-+
-+ rc = hashtab_insert(h, key, comdatum);
-+ if (rc)
-+ goto bad;
-+out:
-+ return rc;
-+bad:
-+ common_destroy(key, comdatum, NULL);
-+ goto out;
-+}
-+
-+static int class_read(struct policydb *p, struct hashtab *h, void *fp)
-+{
-+ char *key = 0;
-+ struct class_datum *cladatum;
-+ struct constraint_node *c, *lc;
-+ struct constraint_expr *e, *le;
-+ u32 *buf, len, len2, ncons, nexpr, nel;
-+ int i, j, depth, rc;
-+
-+ cladatum = kmalloc(sizeof(*cladatum), GFP_KERNEL);
-+ if (!cladatum) {
-+ rc = -ENOMEM;
-+ goto bad;
-+ }
-+ memset(cladatum, 0, sizeof(*cladatum));
-+
-+ buf = next_entry(fp, sizeof(u32)*6);
-+ if (!buf) {
-+ rc = -EINVAL;
-+ goto bad;
-+ }
-+
-+ len = le32_to_cpu(buf[0]);
-+ len2 = le32_to_cpu(buf[1]);
-+ cladatum->value = le32_to_cpu(buf[2]);
-+
-+ rc = symtab_init(&cladatum->permissions, PERM_SYMTAB_SIZE);
-+ if (rc)
-+ goto bad;
-+ cladatum->permissions.nprim = le32_to_cpu(buf[3]);
-+ nel = le32_to_cpu(buf[4]);
-+
-+ ncons = le32_to_cpu(buf[5]);
-+
-+ buf = next_entry(fp, len);
-+ if (!buf) {
-+ rc = -EINVAL;
-+ goto bad;
-+ }
-+ key = kmalloc(len + 1,GFP_KERNEL);
-+ if (!key) {
-+ rc = -ENOMEM;
-+ goto bad;
-+ }
-+ memcpy(key, buf, len);
-+ key[len] = 0;
-+
-+ if (len2) {
-+ cladatum->comkey = kmalloc(len2 + 1,GFP_KERNEL);
-+ if (!cladatum->comkey) {
-+ rc = -ENOMEM;
-+ goto bad;
-+ }
-+ buf = next_entry(fp, len2);
-+ if (!buf) {
-+ rc = -EINVAL;
-+ goto bad;
-+ }
-+ memcpy(cladatum->comkey, buf, len2);
-+ cladatum->comkey[len2] = 0;
-+
-+ cladatum->comdatum = hashtab_search(p->p_commons.table,
-+ cladatum->comkey);
-+ if (!cladatum->comdatum) {
-+ printk(KERN_ERR "security: unknown common %s\n",
-+ cladatum->comkey);
-+ rc = -EINVAL;
-+ goto bad;
-+ }
-+ }
-+ for (i = 0; i < nel; i++) {
-+ rc = perm_read(p, cladatum->permissions.table, fp);
-+ if (rc)
-+ goto bad;
-+ }
-+
-+ lc = NULL;
-+ rc = -EINVAL;
-+ for (i = 0; i < ncons; i++) {
-+ c = kmalloc(sizeof(*c), GFP_KERNEL);
-+ if (!c) {
-+ rc = -ENOMEM;
-+ goto bad;
-+ }
-+ memset(c, 0, sizeof(*c));
-+ buf = next_entry(fp, sizeof(u32)*2);
-+ if (!buf)
-+ goto bad;
-+ c->permissions = le32_to_cpu(buf[0]);
-+ nexpr = le32_to_cpu(buf[1]);
-+ le = NULL;
-+ depth = -1;
-+ for (j = 0; j < nexpr; j++) {
-+ e = kmalloc(sizeof(*e), GFP_KERNEL);
-+ if (!e) {
-+ rc = -ENOMEM;
-+ goto bad;
-+ }
-+ memset(e, 0, sizeof(*e));
-+ buf = next_entry(fp, sizeof(u32)*3);
-+ if (!buf) {
-+ kfree(e);
-+ goto bad;
-+ }
-+ e->expr_type = le32_to_cpu(buf[0]);
-+ e->attr = le32_to_cpu(buf[1]);
-+ e->op = le32_to_cpu(buf[2]);
-+
-+ switch (e->expr_type) {
-+ case CEXPR_NOT:
-+ if (depth < 0) {
-+ kfree(e);
-+ goto bad;
-+ }
-+ break;
-+ case CEXPR_AND:
-+ case CEXPR_OR:
-+ if (depth < 1) {
-+ kfree(e);
-+ goto bad;
-+ }
-+ depth--;
-+ break;
-+ case CEXPR_ATTR:
-+ if (depth == (CEXPR_MAXDEPTH-1)) {
-+ kfree(e);
-+ goto bad;
-+ }
-+ depth++;
-+ break;
-+ case CEXPR_NAMES:
-+ if (depth == (CEXPR_MAXDEPTH-1)) {
-+ kfree(e);
-+ goto bad;
-+ }
-+ depth++;
-+ if (ebitmap_read(&e->names, fp)) {
-+ kfree(e);
-+ goto bad;
-+ }
-+ break;
-+ default:
-+ kfree(e);
-+ goto bad;
-+ break;
-+ }
-+ if (le) {
-+ le->next = e;
-+ } else {
-+ c->expr = e;
-+ }
-+ le = e;
-+ }
-+ if (depth != 0)
-+ goto bad;
-+ if (lc) {
-+ lc->next = c;
-+ } else {
-+ cladatum->constraints = c;
-+ }
-+ lc = c;
-+ }
-+
-+ rc = mls_read_class(cladatum, fp);
-+ if (rc)
-+ goto bad;
-+
-+ rc = hashtab_insert(h, key, cladatum);
-+ if (rc)
-+ goto bad;
-+out:
-+ return rc;
-+bad:
-+ class_destroy(key, cladatum, NULL);
-+ goto out;
-+}
-+
-+static int role_read(struct policydb *p, struct hashtab *h, void *fp)
-+{
-+ char *key = 0;
-+ struct role_datum *role;
-+ int rc;
-+ u32 *buf, len;
-+
-+ role = kmalloc(sizeof(*role), GFP_KERNEL);
-+ if (!role) {
-+ rc = -ENOMEM;
-+ goto out;
-+ }
-+ memset(role, 0, sizeof(*role));
-+
-+ buf = next_entry(fp, sizeof(u32)*2);
-+ if (!buf) {
-+ rc = -EINVAL;
-+ goto bad;
-+ }
-+
-+ len = le32_to_cpu(buf[0]);
-+ role->value = le32_to_cpu(buf[1]);
-+
-+ buf = next_entry(fp, len);
-+ if (!buf) {
-+ rc = -EINVAL;
-+ goto bad;
-+ }
-+ key = kmalloc(len + 1,GFP_KERNEL);
-+ if (!key) {
-+ rc = -ENOMEM;
-+ goto bad;
-+ }
-+ memcpy(key, buf, len);
-+ key[len] = 0;
-+
-+ rc = ebitmap_read(&role->dominates, fp);
-+ if (rc)
-+ goto bad;
-+
-+ rc = ebitmap_read(&role->types, fp);
-+ if (rc)
-+ goto bad;
-+
-+ if (strcmp(key, OBJECT_R) == 0) {
-+ if (role->value != OBJECT_R_VAL) {
-+ printk(KERN_ERR "Role %s has wrong value %d\n",
-+ OBJECT_R, role->value);
-+ rc = -EINVAL;
-+ goto bad;
-+ }
-+ rc = 0;
-+ goto bad;
-+ }
-+
-+ rc = hashtab_insert(h, key, role);
-+ if (rc)
-+ goto bad;
-+out:
-+ return rc;
-+bad:
-+ role_destroy(key, role, NULL);
-+ goto out;
-+}
-+
-+static int type_read(struct policydb *p, struct hashtab *h, void *fp)
-+{
-+ char *key = 0;
-+ struct type_datum *typdatum;
-+ int rc;
-+ u32 *buf, len;
-+
-+ typdatum = kmalloc(sizeof(*typdatum),GFP_KERNEL);
-+ if (!typdatum) {
-+ rc = -ENOMEM;
-+ return rc;
-+ }
-+ memset(typdatum, 0, sizeof(*typdatum));
-+
-+ buf = next_entry(fp, sizeof(u32)*3);
-+ if (!buf) {
-+ rc = -EINVAL;
-+ goto bad;
-+ }
-+
-+ len = le32_to_cpu(buf[0]);
-+ typdatum->value = le32_to_cpu(buf[1]);
-+ typdatum->primary = le32_to_cpu(buf[2]);
-+
-+ buf = next_entry(fp, len);
-+ if (!buf) {
-+ rc = -EINVAL;
-+ goto bad;
-+ }
-+ key = kmalloc(len + 1,GFP_KERNEL);
-+ if (!key) {
-+ rc = -ENOMEM;
-+ goto bad;
-+ }
-+ memcpy(key, buf, len);
-+ key[len] = 0;
-+
-+ rc = hashtab_insert(h, key, typdatum);
-+ if (rc)
-+ goto bad;
-+out:
-+ return rc;
-+bad:
-+ type_destroy(key, typdatum, NULL);
-+ goto out;
-+}
-+
-+static int user_read(struct policydb *p, struct hashtab *h, void *fp)
-+{
-+ char *key = 0;
-+ struct user_datum *usrdatum;
-+ int rc;
-+ u32 *buf, len;
-+
-+
-+ usrdatum = kmalloc(sizeof(*usrdatum), GFP_KERNEL);
-+ if (!usrdatum) {
-+ rc = -ENOMEM;
-+ goto out;
-+ }
-+ memset(usrdatum, 0, sizeof(*usrdatum));
-+
-+ buf = next_entry(fp, sizeof(u32)*2);
-+ if (!buf) {
-+ rc = -EINVAL;
-+ goto bad;
-+ }
-+
-+ len = le32_to_cpu(buf[0]);
-+ usrdatum->value = le32_to_cpu(buf[1]);
-+
-+ buf = next_entry(fp, len);
-+ if (!buf) {
-+ rc = -EINVAL;
-+ goto bad;
-+ }
-+ key = kmalloc(len + 1,GFP_KERNEL);
-+ if (!key) {
-+ rc = -ENOMEM;
-+ goto bad;
-+ }
-+ memcpy(key, buf, len);
-+ key[len] = 0;
-+
-+ rc = ebitmap_read(&usrdatum->roles, fp);
-+ if (rc)
-+ goto bad;
-+
-+ rc = mls_read_user(usrdatum, fp);
-+ if (rc)
-+ goto bad;
-+
-+ rc = hashtab_insert(h, key, usrdatum);
-+ if (rc)
-+ goto bad;
-+out:
-+ return rc;
-+bad:
-+ user_destroy(key, usrdatum, NULL);
-+ goto out;
-+}
-+
-+static int (*read_f[SYM_NUM]) (struct policydb *p, struct hashtab *h, void *fp) =
-+{
-+ common_read,
-+ class_read,
-+ role_read,
-+ type_read,
-+ user_read
-+ mls_read_f
-+};
-+
-+#define mls_config(x) \
-+ ((x) & POLICYDB_CONFIG_MLS) ? "mls" : "no_mls"
-+
-+/*
-+ * Read the configuration data from a policy database binary
-+ * representation file into a policy database structure.
-+ */
-+int policydb_read(struct policydb *p, void *fp)
-+{
-+ struct role_allow *ra, *lra;
-+ struct role_trans *tr, *ltr;
-+ struct ocontext *l, *c, *newc;
-+ struct genfs *genfs_p, *genfs, *newgenfs;
-+ int i, j, rc;
-+ u32 *buf, len, len2, config, nprim, nel, nel2;
-+ char *policydb_str;
-+
-+ config = 0;
-+ mls_set_config(config);
-+
-+ rc = policydb_init(p);
-+ if (rc)
-+ goto out;
-+
-+ rc = -EINVAL;
-+ /* Read the magic number and string length. */
-+ buf = next_entry(fp, sizeof(u32)* 2);
-+ if (!buf)
-+ goto bad;
-+
-+ for (i = 0; i < 2; i++)
-+ buf[i] = le32_to_cpu(buf[i]);
-+
-+ if (buf[0] != POLICYDB_MAGIC) {
-+ printk(KERN_ERR "security: policydb magic number 0x%x does "
-+ "not match expected magic number 0x%x\n",
-+ buf[0], POLICYDB_MAGIC);
-+ goto bad;
-+ }
-+
-+ len = buf[1];
-+ if (len != strlen(POLICYDB_STRING)) {
-+ printk(KERN_ERR "security: policydb string length %d does not "
-+ "match expected length %d\n",
-+ len, strlen(POLICYDB_STRING));
-+ goto bad;
-+ }
-+ buf = next_entry(fp, len);
-+ if (!buf) {
-+ printk(KERN_ERR "security: truncated policydb string identifier\n");
-+ goto bad;
-+ }
-+ policydb_str = kmalloc(len + 1,GFP_KERNEL);
-+ if (!policydb_str) {
-+ printk(KERN_ERR "security: unable to allocate memory for policydb "
-+ "string of length %d\n", len);
-+ rc = -ENOMEM;
-+ goto bad;
-+ }
-+ memcpy(policydb_str, buf, len);
-+ policydb_str[len] = 0;
-+ if (strcmp(policydb_str, POLICYDB_STRING)) {
-+ printk(KERN_ERR "security: policydb string %s does not match "
-+ "my string %s\n", policydb_str, POLICYDB_STRING);
-+ kfree(policydb_str);
-+ goto bad;
-+ }
-+ /* Done with policydb_str. */
-+ kfree(policydb_str);
-+ policydb_str = NULL;
-+
-+ /* Read the version, config, and table sizes. */
-+ buf = next_entry(fp, sizeof(u32)*4);
-+ if (!buf)
-+ goto bad;
-+ for (i = 0; i < 4; i++)
-+ buf[i] = le32_to_cpu(buf[i]);
-+
-+ if (buf[0] != POLICYDB_VERSION) {
-+ printk(KERN_ERR "security: policydb version %d does not match "
-+ "my version %d\n", buf[0], POLICYDB_VERSION);
-+ goto bad;
-+ }
-+ if (buf[1] != config) {
-+ printk(KERN_ERR "security: policydb configuration (%s) does "
-+ "not match my configuration (%s)\n",
-+ mls_config(buf[1]),
-+ mls_config(config));
-+ goto bad;
-+ }
-+ if (buf[2] != SYM_NUM || buf[3] != OCON_NUM) {
-+ printk(KERN_ERR "security: policydb table sizes (%d,%d) do "
-+ "not match mine (%d,%d)\n",
-+ buf[2], buf[3], SYM_NUM, OCON_NUM);
-+ goto bad;
-+ }
-+
-+ rc = mls_read_nlevels(p, fp);
-+ if (rc)
-+ goto bad;
-+
-+ for (i = 0; i < SYM_NUM; i++) {
-+ buf = next_entry(fp, sizeof(u32)*2);
-+ if (!buf) {
-+ rc = -EINVAL;
-+ goto bad;
-+ }
-+ nprim = le32_to_cpu(buf[0]);
-+ nel = le32_to_cpu(buf[1]);
-+ for (j = 0; j < nel; j++) {
-+ rc = read_f[i](p, p->symtab[i].table, fp);
-+ if (rc)
-+ goto bad;
-+ }
-+
-+ p->symtab[i].nprim = nprim;
-+ }
-+
-+ rc = avtab_read(&p->te_avtab, fp, config);
-+ if (rc)
-+ goto bad;
-+
-+ buf = next_entry(fp, sizeof(u32));
-+ if (!buf) {
-+ rc = -EINVAL;
-+ goto bad;
-+ }
-+ nel = le32_to_cpu(buf[0]);
-+ ltr = NULL;
-+ for (i = 0; i < nel; i++) {
-+ tr = kmalloc(sizeof(*tr), GFP_KERNEL);
-+ if (!tr) {
-+ rc = -ENOMEM;
-+ goto bad;
-+ }
-+ memset(tr, 0, sizeof(*tr));
-+ if (ltr) {
-+ ltr->next = tr;
-+ } else {
-+ p->role_tr = tr;
-+ }
-+ buf = next_entry(fp, sizeof(u32)*3);
-+ if (!buf) {
-+ rc = -EINVAL;
-+ goto bad;
-+ }
-+ tr->role = le32_to_cpu(buf[0]);
-+ tr->type = le32_to_cpu(buf[1]);
-+ tr->new_role = le32_to_cpu(buf[2]);
-+ ltr = tr;
-+ }
-+
-+ buf = next_entry(fp, sizeof(u32));
-+ if (!buf) {
-+ rc = -EINVAL;
-+ goto bad;
-+ }
-+ nel = le32_to_cpu(buf[0]);
-+ lra = NULL;
-+ for (i = 0; i < nel; i++) {
-+ ra = kmalloc(sizeof(*ra), GFP_KERNEL);
-+ if (!ra) {
-+ rc = -ENOMEM;
-+ goto bad;
-+ }
-+ memset(ra, 0, sizeof(*ra));
-+ if (lra) {
-+ lra->next = ra;
-+ } else {
-+ p->role_allow = ra;
-+ }
-+ buf = next_entry(fp, sizeof(u32)*2);
-+ if (!buf) {
-+ rc = -EINVAL;
-+ goto bad;
-+ }
-+ ra->role = le32_to_cpu(buf[0]);
-+ ra->new_role = le32_to_cpu(buf[1]);
-+ lra = ra;
-+ }
-+
-+ rc = policydb_index_classes(p);
-+ if (rc)
-+ goto bad;
-+
-+ rc = policydb_index_others(p);
-+ if (rc)
-+ goto bad;
-+
-+ for (i = 0; i < OCON_NUM; i++) {
-+ buf = next_entry(fp, sizeof(u32));
-+ if (!buf) {
-+ rc = -EINVAL;
-+ goto bad;
-+ }
-+ nel = le32_to_cpu(buf[0]);
-+ l = NULL;
-+ for (j = 0; j < nel; j++) {
-+ c = kmalloc(sizeof(*c), GFP_KERNEL);
-+ if (!c) {
-+ rc = -ENOMEM;
-+ goto bad;
-+ }
-+ memset(c, 0, sizeof(*c));
-+ if (l) {
-+ l->next = c;
-+ } else {
-+ p->ocontexts[i] = c;
-+ }
-+ l = c;
-+ rc = -EINVAL;
-+ switch (i) {
-+ case OCON_ISID:
-+ buf = next_entry(fp, sizeof(u32));
-+ if (!buf)
-+ goto bad;
-+ c->sid[0] = le32_to_cpu(buf[0]);
-+ rc = context_read_and_validate(&c->context[0], p, fp);
-+ if (rc)
-+ goto bad;
-+ break;
-+ case OCON_FS:
-+ case OCON_NETIF:
-+ buf = next_entry(fp, sizeof(u32));
-+ if (!buf)
-+ goto bad;
-+ len = le32_to_cpu(buf[0]);
-+ buf = next_entry(fp, len);
-+ if (!buf)
-+ goto bad;
-+ c->u.name = kmalloc(len + 1,GFP_KERNEL);
-+ if (!c->u.name) {
-+ rc = -ENOMEM;
-+ goto bad;
-+ }
-+ memcpy(c->u.name, buf, len);
-+ c->u.name[len] = 0;
-+ rc = context_read_and_validate(&c->context[0], p, fp);
-+ if (rc)
-+ goto bad;
-+ rc = context_read_and_validate(&c->context[1], p, fp);
-+ if (rc)
-+ goto bad;
-+ break;
-+ case OCON_PORT:
-+ buf = next_entry(fp, sizeof(u32)*3);
-+ if (!buf)
-+ goto bad;
-+ c->u.port.protocol = le32_to_cpu(buf[0]);
-+ c->u.port.low_port = le32_to_cpu(buf[1]);
-+ c->u.port.high_port = le32_to_cpu(buf[2]);
-+ rc = context_read_and_validate(&c->context[0], p, fp);
-+ if (rc)
-+ goto bad;
-+ break;
-+ case OCON_NODE:
-+ buf = next_entry(fp, sizeof(u32)* 2);
-+ if (!buf)
-+ goto bad;
-+ c->u.node.addr = le32_to_cpu(buf[0]);
-+ c->u.node.mask = le32_to_cpu(buf[1]);
-+ rc = context_read_and_validate(&c->context[0], p, fp);
-+ if (rc)
-+ goto bad;
-+ break;
-+ case OCON_FSUSE:
-+ buf = next_entry(fp, sizeof(u32)*2);
-+ if (!buf)
-+ goto bad;
-+ c->v.behavior = le32_to_cpu(buf[0]);
-+ len = le32_to_cpu(buf[1]);
-+ buf = next_entry(fp, len);
-+ if (!buf)
-+ goto bad;
-+ c->u.name = kmalloc(len + 1,GFP_KERNEL);
-+ if (!c->u.name) {
-+ rc = -ENOMEM;
-+ goto bad;
-+ }
-+ memcpy(c->u.name, buf, len);
-+ c->u.name[len] = 0;
-+ rc = context_read_and_validate(&c->context[0], p, fp);
-+ if (rc)
-+ goto bad;
-+ break;
-+ }
-+ }
-+ }
-+
-+ buf = next_entry(fp, sizeof(u32));
-+ if (!buf) {
-+ rc = -EINVAL;
-+ goto bad;
-+ }
-+ nel = le32_to_cpu(buf[0]);
-+ genfs_p = NULL;
-+ rc = -EINVAL;
-+ for (i = 0; i < nel; i++) {
-+ newgenfs = kmalloc(sizeof(*newgenfs), GFP_KERNEL);
-+ if (!newgenfs) {
-+ rc = -ENOMEM;
-+ goto bad;
-+ }
-+ memset(newgenfs, 0, sizeof(*newgenfs));
-+ buf = next_entry(fp, sizeof(u32));
-+ if (!buf)
-+ goto bad;
-+ len = le32_to_cpu(buf[0]);
-+ buf = next_entry(fp, len);
-+ if (!buf)
-+ goto bad;
-+ newgenfs->fstype = kmalloc(len + 1,GFP_KERNEL);
-+ if (!newgenfs->fstype) {
-+ rc = -ENOMEM;
-+ goto bad;
-+ }
-+ memcpy(newgenfs->fstype, buf, len);
-+ newgenfs->fstype[len] = 0;
-+ for (genfs_p = NULL, genfs = p->genfs; genfs;
-+ genfs_p = genfs, genfs = genfs->next) {
-+ if (strcmp(newgenfs->fstype, genfs->fstype) == 0) {
-+ printk(KERN_ERR "security: dup genfs "
-+ "fstype %s\n", newgenfs->fstype);
-+ goto bad;
-+ }
-+ if (strcmp(newgenfs->fstype, genfs->fstype) < 0)
-+ break;
-+ }
-+ newgenfs->next = genfs;
-+ if (genfs_p)
-+ genfs_p->next = newgenfs;
-+ else
-+ p->genfs = newgenfs;
-+ buf = next_entry(fp, sizeof(u32));
-+ if (!buf)
-+ goto bad;
-+ nel2 = le32_to_cpu(buf[0]);
-+ for (j = 0; j < nel2; j++) {
-+ newc = kmalloc(sizeof(*newc), GFP_KERNEL);
-+ if (!newc) {
-+ rc = -ENOMEM;
-+ goto bad;
-+ }
-+ memset(newc, 0, sizeof(*newc));
-+ buf = next_entry(fp, sizeof(u32));
-+ if (!buf)
-+ goto bad;
-+ len = le32_to_cpu(buf[0]);
-+ buf = next_entry(fp, len);
-+ if (!buf)
-+ goto bad;
-+ newc->u.name = kmalloc(len + 1,GFP_KERNEL);
-+ if (!newc->u.name) {
-+ rc = -ENOMEM;
-+ goto bad;
-+ }
-+ memcpy(newc->u.name, buf, len);
-+ newc->u.name[len] = 0;
-+ buf = next_entry(fp, sizeof(u32));
-+ if (!buf)
-+ goto bad;
-+ newc->v.sclass = le32_to_cpu(buf[0]);
-+ if (context_read_and_validate(&newc->context[0], p, fp))
-+ goto bad;
-+ for (l = NULL, c = newgenfs->head; c;
-+ l = c, c = c->next) {
-+ if (!strcmp(newc->u.name, c->u.name) &&
-+ (!c->v.sclass || !newc->v.sclass ||
-+ newc->v.sclass == c->v.sclass)) {
-+ printk(KERN_ERR "security: dup genfs "
-+ "entry (%s,%s)\n",
-+ newgenfs->fstype, c->u.name);
-+ goto bad;
-+ }
-+ len = strlen(newc->u.name);
-+ len2 = strlen(c->u.name);
-+ if (len > len2)
-+ break;
-+ }
-+ newc->next = c;
-+ if (l)
-+ l->next = newc;
-+ else
-+ newgenfs->head = newc;
-+ }
-+ }
-+
-+ rc = mls_read_trusted(p, fp);
-+ if (rc)
-+ goto bad;
-+out:
-+ return rc;
-+bad:
-+ policydb_destroy(p);
-+ goto out;
-+}
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/ss/policydb.h 2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,256 @@
-+/*
-+ * A policy database (policydb) specifies the
-+ * configuration data for the security policy.
-+ *
-+ * Author : Stephen Smalley, <sds@epoch.ncsc.mil>
-+ */
-+#ifndef _SS_POLICYDB_H_
-+#define _SS_POLICYDB_H_
-+
-+#include "symtab.h"
-+#include "avtab.h"
-+#include "sidtab.h"
-+#include "context.h"
-+#include "constraint.h"
-+
-+/*
-+ * A datum type is defined for each kind of symbol
-+ * in the configuration data: individual permissions,
-+ * common prefixes for access vectors, classes,
-+ * users, roles, types, sensitivities, categories, etc.
-+ */
-+
-+/* Permission attributes */
-+struct perm_datum {
-+ u32 value; /* permission bit + 1 */
-+#ifdef CONFIG_SECURITY_SELINUX_MLS
-+#define MLS_BASE_READ 1 /* MLS base permission `read' */
-+#define MLS_BASE_WRITE 2 /* MLS base permission `write' */
-+#define MLS_BASE_READBY 4 /* MLS base permission `readby' */
-+#define MLS_BASE_WRITEBY 8 /* MLS base permission `writeby' */
-+ u32 base_perms; /* MLS base permission mask */
-+#endif
-+};
-+
-+/* Attributes of a common prefix for access vectors */
-+struct common_datum {
-+ u32 value; /* internal common value */
-+ struct symtab permissions; /* common permissions */
-+};
-+
-+/* Class attributes */
-+struct class_datum {
-+ u32 value; /* class value */
-+ char *comkey; /* common name */
-+ struct common_datum *comdatum; /* common datum */
-+ struct symtab permissions; /* class-specific permission symbol table */
-+ struct constraint_node *constraints; /* constraints on class permissions */
-+#ifdef CONFIG_SECURITY_SELINUX_MLS
-+ struct mls_perms mlsperms; /* MLS base permission masks */
-+#endif
-+};
-+
-+/* Role attributes */
-+struct role_datum {
-+ u32 value; /* internal role value */
-+ struct ebitmap dominates; /* set of roles dominated by this role */
-+ struct ebitmap types; /* set of authorized types for role */
-+};
-+
-+struct role_trans {
-+ u32 role; /* current role */
-+ u32 type; /* program executable type */
-+ u32 new_role; /* new role */
-+ struct role_trans *next;
-+};
-+
-+struct role_allow {
-+ u32 role; /* current role */
-+ u32 new_role; /* new role */
-+ struct role_allow *next;
-+};
-+
-+/* Type attributes */
-+struct type_datum {
-+ u32 value; /* internal type value */
-+ unsigned char primary; /* primary name? */
-+};
-+
-+/* User attributes */
-+struct user_datum {
-+ u32 value; /* internal user value */
-+ struct ebitmap roles; /* set of authorized roles for user */
-+#ifdef CONFIG_SECURITY_SELINUX_MLS
-+ struct mls_range_list *ranges; /* list of authorized MLS ranges for user */
-+#endif
-+};
-+
-+
-+#ifdef CONFIG_SECURITY_SELINUX_MLS
-+/* Sensitivity attributes */
-+struct level_datum {
-+ struct mls_level *level; /* sensitivity and associated categories */
-+ unsigned char isalias; /* is this sensitivity an alias for another? */
-+};
-+
-+/* Category attributes */
-+struct cat_datum {
-+ u32 value; /* internal category bit + 1 */
-+ unsigned char isalias; /* is this category an alias for another? */
-+};
-+#endif
-+
-+
-+/*
-+ * The configuration data includes security contexts for
-+ * initial SIDs, unlabeled file systems, TCP and UDP port numbers,
-+ * network interfaces, and nodes. This structure stores the
-+ * relevant data for one such entry. Entries of the same kind
-+ * (e.g. all initial SIDs) are linked together into a list.
-+ */
-+struct ocontext {
-+ union {
-+ char *name; /* name of initial SID, fs, netif, fstype, path */
-+ struct {
-+ u8 protocol;
-+ u16 low_port;
-+ u16 high_port;
-+ } port; /* TCP or UDP port information */
-+ struct {
-+ u32 addr;
-+ u32 mask;
-+ } node; /* node information */
-+ } u;
-+ union {
-+ u32 sclass; /* security class for genfs */
-+ u32 behavior; /* labeling behavior for fs_use */
-+ } v;
-+ struct context context[2]; /* security context(s) */
-+ u32 sid[2]; /* SID(s) */
-+ struct ocontext *next;
-+};
-+
-+struct genfs {
-+ char *fstype;
-+ struct ocontext *head;
-+ struct genfs *next;
-+};
-+
-+/* symbol table array indices */
-+#define SYM_COMMONS 0
-+#define SYM_CLASSES 1
-+#define SYM_ROLES 2
-+#define SYM_TYPES 3
-+#define SYM_USERS 4
-+#ifdef CONFIG_SECURITY_SELINUX_MLS
-+#define SYM_LEVELS 5
-+#define SYM_CATS 6
-+#define SYM_NUM 7
-+#else
-+#define SYM_NUM 5
-+#endif
-+
-+/* object context array indices */
-+#define OCON_ISID 0 /* initial SIDs */
-+#define OCON_FS 1 /* unlabeled file systems */
-+#define OCON_PORT 2 /* TCP and UDP port numbers */
-+#define OCON_NETIF 3 /* network interfaces */
-+#define OCON_NODE 4 /* nodes */
-+#define OCON_FSUSE 5 /* fs_use */
-+#define OCON_NUM 6
-+
-+/* The policy database */
-+struct policydb {
-+ /* symbol tables */
-+ struct symtab symtab[SYM_NUM];
-+#define p_commons symtab[SYM_COMMONS]
-+#define p_classes symtab[SYM_CLASSES]
-+#define p_roles symtab[SYM_ROLES]
-+#define p_types symtab[SYM_TYPES]
-+#define p_users symtab[SYM_USERS]
-+#define p_levels symtab[SYM_LEVELS]
-+#define p_cats symtab[SYM_CATS]
-+
-+ /* symbol names indexed by (value - 1) */
-+ char **sym_val_to_name[SYM_NUM];
-+#define p_common_val_to_name sym_val_to_name[SYM_COMMONS]
-+#define p_class_val_to_name sym_val_to_name[SYM_CLASSES]
-+#define p_role_val_to_name sym_val_to_name[SYM_ROLES]
-+#define p_type_val_to_name sym_val_to_name[SYM_TYPES]
-+#define p_user_val_to_name sym_val_to_name[SYM_USERS]
-+#define p_sens_val_to_name sym_val_to_name[SYM_LEVELS]
-+#define p_cat_val_to_name sym_val_to_name[SYM_CATS]
-+
-+ /* class, role, and user attributes indexed by (value - 1) */
-+ struct class_datum **class_val_to_struct;
-+ struct role_datum **role_val_to_struct;
-+ struct user_datum **user_val_to_struct;
-+
-+ /* type enforcement access vectors and transitions */
-+ struct avtab te_avtab;
-+
-+ /* role transitions */
-+ struct role_trans *role_tr;
-+
-+ /* role allows */
-+ struct role_allow *role_allow;
-+
-+ /* security contexts of initial SIDs, unlabeled file systems,
-+ TCP or UDP port numbers, network interfaces and nodes */
-+ struct ocontext *ocontexts[OCON_NUM];
-+
-+ /* security contexts for files in filesystems that cannot support
-+ a persistent label mapping or use another
-+ fixed labeling behavior. */
-+ struct genfs *genfs;
-+
-+#ifdef CONFIG_SECURITY_SELINUX_MLS
-+ /* number of legitimate MLS levels */
-+ u32 nlevels;
-+
-+ struct ebitmap trustedreaders;
-+ struct ebitmap trustedwriters;
-+ struct ebitmap trustedobjects;
-+#endif
-+};
-+
-+extern int policydb_init(struct policydb *p);
-+extern int policydb_index_classes(struct policydb *p);
-+extern int policydb_index_others(struct policydb *p);
-+extern int constraint_expr_destroy(struct constraint_expr *expr);
-+extern void policydb_destroy(struct policydb *p);
-+extern int policydb_load_isids(struct policydb *p, struct sidtab *s);
-+extern int policydb_context_isvalid(struct policydb *p, struct context *c);
-+extern int policydb_read(struct policydb *p, void *fp);
-+
-+#define PERM_SYMTAB_SIZE 32
-+
-+#define POLICYDB_VERSION 15
-+#define POLICYDB_CONFIG_MLS 1
-+
-+#define OBJECT_R "object_r"
-+#define OBJECT_R_VAL 1
-+
-+#define POLICYDB_MAGIC SELINUX_MAGIC
-+#define POLICYDB_STRING "SE Linux"
-+
-+struct policy_file {
-+ char *data;
-+ size_t len;
-+};
-+
-+static inline void *next_entry(struct policy_file *fp, size_t bytes)
-+{
-+ void *buf;
-+
-+ if (bytes > fp->len)
-+ return NULL;
-+
-+ buf = fp->data;
-+ fp->data += bytes;
-+ fp->len -= bytes;
-+ return buf;
-+}
-+
-+#endif /* _SS_POLICYDB_H_ */
-+
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/ss/services.c 2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,1413 @@
-+/*
-+ * Implementation of the security services.
-+ *
-+ * Authors : Stephen Smalley, <sds@epoch.ncsc.mil>
-+ * James Morris <jmorris@redhat.com>
-+ *
-+ * Copyright (C) 2003 Red Hat, Inc., James Morris <jmorris@redhat.com>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2,
-+ * as published by the Free Software Foundation.
-+ */
-+#include "context.h"
-+#include "policydb.h"
-+#include "sidtab.h"
-+#include "services.h"
-+#include "mls.h"
-+
-+static rwlock_t policy_rwlock = RW_LOCK_UNLOCKED;
-+#define POLICY_RDLOCK read_lock(&policy_rwlock)
-+#define POLICY_WRLOCK write_lock_irq(&policy_rwlock)
-+#define POLICY_RDUNLOCK read_unlock(&policy_rwlock)
-+#define POLICY_WRUNLOCK write_unlock_irq(&policy_rwlock)
-+
-+static DECLARE_MUTEX(load_sem);
-+#define LOAD_LOCK down(&load_sem)
-+#define LOAD_UNLOCK up(&load_sem)
-+
-+struct sidtab sidtab;
-+struct policydb policydb;
-+int ss_initialized = 0;
-+
-+/*
-+ * The largest sequence number that has been used when
-+ * providing an access decision to the access vector cache.
-+ * The sequence number only changes when a policy change
-+ * occurs.
-+ */
-+static u32 latest_granting = 0;
-+
-+/*
-+ * Return the boolean value of a constraint expression
-+ * when it is applied to the specified source and target
-+ * security contexts.
-+ */
-+static int constraint_expr_eval(struct context *scontext,
-+ struct context *tcontext,
-+ struct constraint_expr *cexpr)
-+{
-+ u32 val1, val2;
-+ struct context *c;
-+ struct role_datum *r1, *r2;
-+ struct constraint_expr *e;
-+ int s[CEXPR_MAXDEPTH];
-+ int sp = -1;
-+
-+ for (e = cexpr; e; e = e->next) {
-+ switch (e->expr_type) {
-+ case CEXPR_NOT:
-+ BUG_ON(sp < 0);
-+ s[sp] = !s[sp];
-+ break;
-+ case CEXPR_AND:
-+ BUG_ON(sp < 1);
-+ sp--;
-+ s[sp] &= s[sp+1];
-+ break;
-+ case CEXPR_OR:
-+ BUG_ON(sp < 1);
-+ sp--;
-+ s[sp] |= s[sp+1];
-+ break;
-+ case CEXPR_ATTR:
-+ if (sp == (CEXPR_MAXDEPTH-1))
-+ return 0;
-+ switch (e->attr) {
-+ case CEXPR_USER:
-+ val1 = scontext->user;
-+ val2 = tcontext->user;
-+ break;
-+ case CEXPR_TYPE:
-+ val1 = scontext->type;
-+ val2 = tcontext->type;
-+ break;
-+ case CEXPR_ROLE:
-+ val1 = scontext->role;
-+ val2 = tcontext->role;
-+ r1 = policydb.role_val_to_struct[val1 - 1];
-+ r2 = policydb.role_val_to_struct[val2 - 1];
-+ switch (e->op) {
-+ case CEXPR_DOM:
-+ s[++sp] = ebitmap_get_bit(&r1->dominates,
-+ val2 - 1);
-+ continue;
-+ case CEXPR_DOMBY:
-+ s[++sp] = ebitmap_get_bit(&r2->dominates,
-+ val1 - 1);
-+ continue;
-+ case CEXPR_INCOMP:
-+ s[++sp] = ( !ebitmap_get_bit(&r1->dominates,
-+ val2 - 1) &&
-+ !ebitmap_get_bit(&r2->dominates,
-+ val1 - 1) );
-+ continue;
-+ default:
-+ break;
-+ }
-+ break;
-+ default:
-+ BUG();
-+ return 0;
-+ }
-+
-+ switch (e->op) {
-+ case CEXPR_EQ:
-+ s[++sp] = (val1 == val2);
-+ break;
-+ case CEXPR_NEQ:
-+ s[++sp] = (val1 != val2);
-+ break;
-+ default:
-+ BUG();
-+ return 0;
-+ }
-+ break;
-+ case CEXPR_NAMES:
-+ if (sp == (CEXPR_MAXDEPTH-1))
-+ return 0;
-+ c = scontext;
-+ if (e->attr & CEXPR_TARGET)
-+ c = tcontext;
-+ if (e->attr & CEXPR_USER)
-+ val1 = c->user;
-+ else if (e->attr & CEXPR_ROLE)
-+ val1 = c->role;
-+ else if (e->attr & CEXPR_TYPE)
-+ val1 = c->type;
-+ else {
-+ BUG();
-+ return 0;
-+ }
-+
-+ switch (e->op) {
-+ case CEXPR_EQ:
-+ s[++sp] = ebitmap_get_bit(&e->names, val1 - 1);
-+ break;
-+ case CEXPR_NEQ:
-+ s[++sp] = !ebitmap_get_bit(&e->names, val1 - 1);
-+ break;
-+ default:
-+ BUG();
-+ return 0;
-+ }
-+ break;
-+ default:
-+ BUG();
-+ return 0;
-+ }
-+ }
-+
-+ BUG_ON(sp != 0);
-+ return s[0];
-+}
-+
-+/*
-+ * Compute access vectors based on a context structure pair for
-+ * the permissions in a particular class.
-+ */
-+static int context_struct_compute_av(struct context *scontext,
-+ struct context *tcontext,
-+ u16 tclass,
-+ u32 requested,
-+ struct av_decision *avd)
-+{
-+ struct constraint_node *constraint;
-+ struct role_allow *ra;
-+ struct avtab_key avkey;
-+ struct avtab_datum *avdatum;
-+ struct class_datum *tclass_datum;
-+
-+ if (!tclass || tclass > policydb.p_classes.nprim) {
-+ printk(KERN_ERR "security_compute_av: unrecognized class %d\n",
-+ tclass);
-+ return -EINVAL;
-+ }
-+ tclass_datum = policydb.class_val_to_struct[tclass - 1];
-+
-+ /*
-+ * Initialize the access vectors to the default values.
-+ */
-+ avd->allowed = 0;
-+ avd->decided = 0xffffffff;
-+ avd->auditallow = 0;
-+ avd->auditdeny = 0xffffffff;
-+ avd->seqno = latest_granting;
-+
-+ /*
-+ * If a specific type enforcement rule was defined for
-+ * this permission check, then use it.
-+ */
-+ avkey.source_type = scontext->type;
-+ avkey.target_type = tcontext->type;
-+ avkey.target_class = tclass;
-+ avdatum = avtab_search(&policydb.te_avtab, &avkey, AVTAB_AV);
-+ if (avdatum) {
-+ if (avdatum->specified & AVTAB_ALLOWED)
-+ avd->allowed = avtab_allowed(avdatum);
-+ if (avdatum->specified & AVTAB_AUDITDENY)
-+ avd->auditdeny = avtab_auditdeny(avdatum);
-+ if (avdatum->specified & AVTAB_AUDITALLOW)
-+ avd->auditallow = avtab_auditallow(avdatum);
-+ }
-+
-+ /*
-+ * Remove any permissions prohibited by the MLS policy.
-+ */
-+ mls_compute_av(scontext, tcontext, tclass_datum, &avd->allowed);
-+
-+ /*
-+ * Remove any permissions prohibited by a constraint.
-+ */
-+ constraint = tclass_datum->constraints;
-+ while (constraint) {
-+ if ((constraint->permissions & (avd->allowed)) &&
-+ !constraint_expr_eval(scontext, tcontext,
-+ constraint->expr)) {
-+ avd->allowed = (avd->allowed) & ~(constraint->permissions);
-+ }
-+ constraint = constraint->next;
-+ }
-+
-+ /*
-+ * If checking process transition permission and the
-+ * role is changing, then check the (current_role, new_role)
-+ * pair.
-+ */
-+ if (tclass == SECCLASS_PROCESS &&
-+ avd->allowed && PROCESS__TRANSITION &&
-+ scontext->role != tcontext->role) {
-+ for (ra = policydb.role_allow; ra; ra = ra->next) {
-+ if (scontext->role == ra->role &&
-+ tcontext->role == ra->new_role)
-+ break;
-+ }
-+ if (!ra)
-+ avd->allowed = (avd->allowed) & ~(PROCESS__TRANSITION);
-+ }
-+
-+ return 0;
-+}
-+
-+/**
-+ * security_compute_av - Compute access vector decisions.
-+ * @ssid: source security identifier
-+ * @tsid: target security identifier
-+ * @tclass: target security class
-+ * @requested: requested permissions
-+ * @avd: access vector decisions
-+ *
-+ * Compute a set of access vector decisions based on the
-+ * SID pair (@ssid, @tsid) for the permissions in @tclass.
-+ * Return -%EINVAL if any of the parameters are invalid or %0
-+ * if the access vector decisions were computed successfully.
-+ */
-+int security_compute_av(u32 ssid,
-+ u32 tsid,
-+ u16 tclass,
-+ u32 requested,
-+ struct av_decision *avd)
-+{
-+ struct context *scontext = 0, *tcontext = 0;
-+ int rc = 0;
-+
-+ if (!ss_initialized) {
-+ avd->allowed = requested;
-+ avd->decided = requested;
-+ avd->auditallow = 0;
-+ avd->auditdeny = 0xffffffff;
-+ avd->seqno = latest_granting;
-+ return 0;
-+ }
-+
-+ POLICY_RDLOCK;
-+
-+ scontext = sidtab_search(&sidtab, ssid);
-+ if (!scontext) {
-+ printk(KERN_ERR "security_compute_av: unrecognized SID %d\n",
-+ ssid);
-+ rc = -EINVAL;
-+ goto out;
-+ }
-+ tcontext = sidtab_search(&sidtab, tsid);
-+ if (!tcontext) {
-+ printk(KERN_ERR "security_compute_av: unrecognized SID %d\n",
-+ tsid);
-+ rc = -EINVAL;
-+ goto out;
-+ }
-+
-+ rc = context_struct_compute_av(scontext, tcontext, tclass,
-+ requested, avd);
-+out:
-+ POLICY_RDUNLOCK;
-+ return rc;
-+}
-+
-+/*
-+ * Write the security context string representation of
-+ * the context structure `context' into a dynamically
-+ * allocated string of the correct size. Set `*scontext'
-+ * to point to this string and set `*scontext_len' to
-+ * the length of the string.
-+ */
-+int context_struct_to_string(struct context *context, char **scontext, u32 *scontext_len)
-+{
-+ char *scontextp;
-+
-+ *scontext = 0;
-+ *scontext_len = 0;
-+
-+ /* Compute the size of the context. */
-+ *scontext_len += strlen(policydb.p_user_val_to_name[context->user - 1]) + 1;
-+ *scontext_len += strlen(policydb.p_role_val_to_name[context->role - 1]) + 1;
-+ *scontext_len += strlen(policydb.p_type_val_to_name[context->type - 1]) + 1;
-+ *scontext_len += mls_compute_context_len(context);
-+
-+ /* Allocate space for the context; caller must free this space. */
-+ scontextp = kmalloc(*scontext_len+1,GFP_ATOMIC);
-+ if (!scontextp) {
-+ return -ENOMEM;
-+ }
-+ *scontext = scontextp;
-+
-+ /*
-+ * Copy the user name, role name and type name into the context.
-+ */
-+ sprintf(scontextp, "%s:%s:%s:",
-+ policydb.p_user_val_to_name[context->user - 1],
-+ policydb.p_role_val_to_name[context->role - 1],
-+ policydb.p_type_val_to_name[context->type - 1]);
-+ scontextp += strlen(policydb.p_user_val_to_name[context->user - 1]) +
-+ 1 + strlen(policydb.p_role_val_to_name[context->role - 1]) +
-+ 1 + strlen(policydb.p_type_val_to_name[context->type - 1]) + 1;
-+
-+ mls_sid_to_context(context, &scontextp);
-+
-+ scontextp--;
-+ *scontextp = 0;
-+
-+ return 0;
-+}
-+
-+#include "initial_sid_to_string.h"
-+
-+/**
-+ * security_sid_to_context - Obtain a context for a given SID.
-+ * @sid: security identifier, SID
-+ * @scontext: security context
-+ * @scontext_len: length in bytes
-+ *
-+ * Write the string representation of the context associated with @sid
-+ * into a dynamically allocated string of the correct size. Set @scontext
-+ * to point to this string and set @scontext_len to the length of the string.
-+ */
-+int security_sid_to_context(u32 sid, char **scontext, u32 *scontext_len)
-+{
-+ struct context *context;
-+ int rc = 0;
-+
-+ if (!ss_initialized) {
-+ if (sid <= SECINITSID_NUM) {
-+ char *scontextp;
-+
-+ *scontext_len = strlen(initial_sid_to_string[sid]) + 1;
-+ scontextp = kmalloc(*scontext_len,GFP_KERNEL);
-+ strcpy(scontextp, initial_sid_to_string[sid]);
-+ *scontext = scontextp;
-+ goto out;
-+ }
-+ printk(KERN_ERR "security_sid_to_context: called before initial "
-+ "load_policy on unknown SID %d\n", sid);
-+ rc = -EINVAL;
-+ goto out;
-+ }
-+ POLICY_RDLOCK;
-+ context = sidtab_search(&sidtab, sid);
-+ if (!context) {
-+ printk(KERN_ERR "security_sid_to_context: unrecognized SID "
-+ "%d\n", sid);
-+ rc = -EINVAL;
-+ goto out_unlock;
-+ }
-+ rc = context_struct_to_string(context, scontext, scontext_len);
-+out_unlock:
-+ POLICY_RDUNLOCK;
-+out:
-+ return rc;
-+
-+}
-+
-+/**
-+ * security_context_to_sid - Obtain a SID for a given security context.
-+ * @scontext: security context
-+ * @scontext_len: length in bytes
-+ * @sid: security identifier, SID
-+ *
-+ * Obtains a SID associated with the security context that
-+ * has the string representation specified by @scontext.
-+ * Returns -%EINVAL if the context is invalid, -%ENOMEM if insufficient
-+ * memory is available, or 0 on success.
-+ */
-+int security_context_to_sid(char *scontext, u32 scontext_len, u32 *sid)
-+{
-+ char *scontext2;
-+ struct context context;
-+ struct role_datum *role;
-+ struct type_datum *typdatum;
-+ struct user_datum *usrdatum;
-+ char *scontextp, *p, oldc;
-+ int rc = 0;
-+
-+ if (!ss_initialized) {
-+ int i;
-+
-+ for (i = 1; i < SECINITSID_NUM; i++) {
-+ if (!strcmp(initial_sid_to_string[i], scontext)) {
-+ *sid = i;
-+ goto out;
-+ }
-+ }
-+ printk(KERN_ERR "security_context_to_sid: called before "
-+ "initial load_policy on unknown context %s\n", scontext);
-+ rc = -EINVAL;
-+ goto out;
-+ }
-+ *sid = SECSID_NULL;
-+
-+ /* Copy the string so that we can modify the copy as we parse it.
-+ The string should already by null terminated, but we append a
-+ null suffix to the copy to avoid problems with the existing
-+ attr package, which doesn't view the null terminator as part
-+ of the attribute value. */
-+ scontext2 = kmalloc(scontext_len+1,GFP_KERNEL);
-+ if (!scontext2) {
-+ rc = -ENOMEM;
-+ goto out;
-+ }
-+ memcpy(scontext2, scontext, scontext_len);
-+ scontext2[scontext_len] = 0;
-+
-+ context_init(&context);
-+ *sid = SECSID_NULL;
-+
-+ POLICY_RDLOCK;
-+
-+ /* Parse the security context. */
-+
-+ rc = -EINVAL;
-+ scontextp = (char *) scontext2;
-+
-+ /* Extract the user. */
-+ p = scontextp;
-+ while (*p && *p != ':')
-+ p++;
-+
-+ if (*p == 0)
-+ goto out_unlock;
-+
-+ *p++ = 0;
-+
-+ usrdatum = hashtab_search(policydb.p_users.table, scontextp);
-+ if (!usrdatum)
-+ goto out_unlock;
-+
-+ context.user = usrdatum->value;
-+
-+ /* Extract role. */
-+ scontextp = p;
-+ while (*p && *p != ':')
-+ p++;
-+
-+ if (*p == 0)
-+ goto out_unlock;
-+
-+ *p++ = 0;
-+
-+ role = hashtab_search(policydb.p_roles.table, scontextp);
-+ if (!role)
-+ goto out_unlock;
-+ context.role = role->value;
-+
-+ /* Extract type. */
-+ scontextp = p;
-+ while (*p && *p != ':')
-+ p++;
-+ oldc = *p;
-+ *p++ = 0;
-+
-+ typdatum = hashtab_search(policydb.p_types.table, scontextp);
-+ if (!typdatum)
-+ goto out_unlock;
-+
-+ context.type = typdatum->value;
-+
-+ rc = mls_context_to_sid(oldc, &p, &context);
-+ if (rc)
-+ goto out_unlock;
-+
-+ /* Check the validity of the new context. */
-+ if (!policydb_context_isvalid(&policydb, &context)) {
-+ rc = -EINVAL;
-+ goto out_unlock;
-+ }
-+ /* Obtain the new sid. */
-+ rc = sidtab_context_to_sid(&sidtab, &context, sid);
-+out_unlock:
-+ POLICY_RDUNLOCK;
-+ context_destroy(&context);
-+ kfree(scontext2);
-+out:
-+ return rc;
-+}
-+
-+static inline int compute_sid_handle_invalid_context(
-+ struct context *scontext,
-+ struct context *tcontext,
-+ u16 tclass,
-+ struct context *newcontext)
-+{
-+ int rc = 0;
-+
-+ if (selinux_enforcing) {
-+ rc = -EACCES;
-+ } else {
-+ char *s, *t, *n;
-+ u32 slen, tlen, nlen;
-+
-+ context_struct_to_string(scontext, &s, &slen);
-+ context_struct_to_string(tcontext, &t, &tlen);
-+ context_struct_to_string(newcontext, &n, &nlen);
-+ printk(KERN_ERR "security_compute_sid: invalid context %s", n);
-+ printk(" for scontext=%s", s);
-+ printk(" tcontext=%s", t);
-+ printk(" tclass=%s\n", policydb.p_class_val_to_name[tclass-1]);
-+ kfree(s);
-+ kfree(t);
-+ kfree(n);
-+ }
-+ return rc;
-+}
-+
-+static int security_compute_sid(u32 ssid,
-+ u32 tsid,
-+ u16 tclass,
-+ u32 specified,
-+ u32 *out_sid)
-+{
-+ struct context *scontext = 0, *tcontext = 0, newcontext;
-+ struct role_trans *roletr = 0;
-+ struct avtab_key avkey;
-+ struct avtab_datum *avdatum;
-+ unsigned int type_change = 0;
-+ int rc = 0;
-+
-+ if (!ss_initialized) {
-+ switch (tclass) {
-+ case SECCLASS_PROCESS:
-+ *out_sid = ssid;
-+ break;
-+ default:
-+ *out_sid = tsid;
-+ break;
-+ }
-+ goto out;
-+ }
-+
-+ POLICY_RDLOCK;
-+
-+ scontext = sidtab_search(&sidtab, ssid);
-+ if (!scontext) {
-+ printk(KERN_ERR "security_compute_sid: unrecognized SID %d\n",
-+ ssid);
-+ rc = -EINVAL;
-+ goto out_unlock;
-+ }
-+ tcontext = sidtab_search(&sidtab, tsid);
-+ if (!tcontext) {
-+ printk(KERN_ERR "security_compute_sid: unrecognized SID %d\n",
-+ tsid);
-+ rc = -EINVAL;
-+ goto out_unlock;
-+ }
-+
-+ context_init(&newcontext);
-+
-+ /* Set the user identity. */
-+ switch (specified) {
-+ case AVTAB_TRANSITION:
-+ case AVTAB_CHANGE:
-+ /* Use the process user identity. */
-+ newcontext.user = scontext->user;
-+ break;
-+ case AVTAB_MEMBER:
-+ /* Use the related object owner. */
-+ newcontext.user = tcontext->user;
-+ break;
-+ }
-+
-+ /* Set the role and type to default values. */
-+ switch (tclass) {
-+ case SECCLASS_PROCESS:
-+ /* Use the current role and type of process. */
-+ newcontext.role = scontext->role;
-+ newcontext.type = scontext->type;
-+ break;
-+ default:
-+ /* Use the well-defined object role. */
-+ newcontext.role = OBJECT_R_VAL;
-+ /* Use the type of the related object. */
-+ newcontext.type = tcontext->type;
-+ }
-+
-+ /* Look for a type transition/member/change rule. */
-+ avkey.source_type = scontext->type;
-+ avkey.target_type = tcontext->type;
-+ avkey.target_class = tclass;
-+ avdatum = avtab_search(&policydb.te_avtab, &avkey, AVTAB_TYPE);
-+ type_change = (avdatum && (avdatum->specified & specified));
-+ if (type_change) {
-+ /* Use the type from the type transition/member/change rule. */
-+ switch (specified) {
-+ case AVTAB_TRANSITION:
-+ newcontext.type = avtab_transition(avdatum);
-+ break;
-+ case AVTAB_MEMBER:
-+ newcontext.type = avtab_member(avdatum);
-+ break;
-+ case AVTAB_CHANGE:
-+ newcontext.type = avtab_change(avdatum);
-+ break;
-+ }
-+ }
-+
-+ /* Check for class-specific changes. */
-+ switch (tclass) {
-+ case SECCLASS_PROCESS:
-+ if (specified & AVTAB_TRANSITION) {
-+ /* Look for a role transition rule. */
-+ for (roletr = policydb.role_tr; roletr;
-+ roletr = roletr->next) {
-+ if (roletr->role == scontext->role &&
-+ roletr->type == tcontext->type) {
-+ /* Use the role transition rule. */
-+ newcontext.role = roletr->new_role;
-+ break;
-+ }
-+ }
-+ }
-+
-+ if (!type_change && !roletr) {
-+ /* No change in process role or type. */
-+ *out_sid = ssid;
-+ goto out_unlock;
-+
-+ }
-+ break;
-+ default:
-+ if (!type_change &&
-+ (newcontext.user == tcontext->user) &&
-+ mls_context_cmp(scontext, tcontext)) {
-+ /* No change in object type, owner,
-+ or MLS attributes. */
-+ *out_sid = tsid;
-+ goto out_unlock;
-+ }
-+ break;
-+ }
-+
-+ /* Set the MLS attributes.
-+ This is done last because it may allocate memory. */
-+ rc = mls_compute_sid(scontext, tcontext, tclass, specified, &newcontext);
-+ if (rc)
-+ goto out_unlock;
-+
-+ /* Check the validity of the context. */
-+ if (!policydb_context_isvalid(&policydb, &newcontext)) {
-+ rc = compute_sid_handle_invalid_context(scontext,
-+ tcontext,
-+ tclass,
-+ &newcontext);
-+ if (rc)
-+ goto out_unlock;
-+ }
-+ /* Obtain the sid for the context. */
-+ rc = sidtab_context_to_sid(&sidtab, &newcontext, out_sid);
-+out_unlock:
-+ POLICY_RDUNLOCK;
-+ context_destroy(&newcontext);
-+out:
-+ return rc;
-+}
-+
-+/**
-+ * security_transition_sid - Compute the SID for a new subject/object.
-+ * @ssid: source security identifier
-+ * @tsid: target security identifier
-+ * @tclass: target security class
-+ * @out_sid: security identifier for new subject/object
-+ *
-+ * Compute a SID to use for labeling a new subject or object in the
-+ * class @tclass based on a SID pair (@ssid, @tsid).
-+ * Return -%EINVAL if any of the parameters are invalid, -%ENOMEM
-+ * if insufficient memory is available, or %0 if the new SID was
-+ * computed successfully.
-+ */
-+int security_transition_sid(u32 ssid,
-+ u32 tsid,
-+ u16 tclass,
-+ u32 *out_sid)
-+{
-+ return security_compute_sid(ssid, tsid, tclass, AVTAB_TRANSITION, out_sid);
-+}
-+
-+/**
-+ * security_member_sid - Compute the SID for member selection.
-+ * @ssid: source security identifier
-+ * @tsid: target security identifier
-+ * @tclass: target security class
-+ * @out_sid: security identifier for selected member
-+ *
-+ * Compute a SID to use when selecting a member of a polyinstantiated
-+ * object of class @tclass based on a SID pair (@ssid, @tsid).
-+ * Return -%EINVAL if any of the parameters are invalid, -%ENOMEM
-+ * if insufficient memory is available, or %0 if the SID was
-+ * computed successfully.
-+ */
-+int security_member_sid(u32 ssid,
-+ u32 tsid,
-+ u16 tclass,
-+ u32 *out_sid)
-+{
-+ return security_compute_sid(ssid, tsid, tclass, AVTAB_MEMBER, out_sid);
-+}
-+
-+/**
-+ * security_change_sid - Compute the SID for object relabeling.
-+ * @ssid: source security identifier
-+ * @tsid: target security identifier
-+ * @tclass: target security class
-+ * @out_sid: security identifier for selected member
-+ *
-+ * Compute a SID to use for relabeling an object of class @tclass
-+ * based on a SID pair (@ssid, @tsid).
-+ * Return -%EINVAL if any of the parameters are invalid, -%ENOMEM
-+ * if insufficient memory is available, or %0 if the SID was
-+ * computed successfully.
-+ */
-+int security_change_sid(u32 ssid,
-+ u32 tsid,
-+ u16 tclass,
-+ u32 *out_sid)
-+{
-+ return security_compute_sid(ssid, tsid, tclass, AVTAB_CHANGE, out_sid);
-+}
-+
-+/*
-+ * Verify that each permission that is defined under the
-+ * existing policy is still defined with the same value
-+ * in the new policy.
-+ */
-+static int validate_perm(void *key, void *datum, void *p)
-+{
-+ struct hashtab *h;
-+ struct perm_datum *perdatum, *perdatum2;
-+ int rc = 0;
-+
-+
-+ h = p;
-+ perdatum = datum;
-+
-+ perdatum2 = hashtab_search(h, key);
-+ if (!perdatum2) {
-+ printk(KERN_ERR "security: permission %s disappeared",
-+ (char *)key);
-+ rc = -ENOENT;
-+ goto out;
-+ }
-+ if (perdatum->value != perdatum2->value) {
-+ printk(KERN_ERR "security: the value of permission %s changed",
-+ (char *)key);
-+ rc = -EINVAL;
-+ }
-+out:
-+ return rc;
-+}
-+
-+/*
-+ * Verify that each class that is defined under the
-+ * existing policy is still defined with the same
-+ * attributes in the new policy.
-+ */
-+static int validate_class(void *key, void *datum, void *p)
-+{
-+ struct policydb *newp;
-+ struct class_datum *cladatum, *cladatum2;
-+ int rc;
-+
-+ newp = p;
-+ cladatum = datum;
-+
-+ cladatum2 = hashtab_search(newp->p_classes.table, key);
-+ if (!cladatum2) {
-+ printk(KERN_ERR "security: class %s disappeared\n",
-+ (char *)key);
-+ rc = -ENOENT;
-+ goto out;
-+ }
-+ if (cladatum->value != cladatum2->value) {
-+ printk(KERN_ERR "security: the value of class %s changed\n",
-+ (char *)key);
-+ rc = -EINVAL;
-+ goto out;
-+ }
-+ if ((cladatum->comdatum && !cladatum2->comdatum) ||
-+ (!cladatum->comdatum && cladatum2->comdatum)) {
-+ printk(KERN_ERR "security: the inherits clause for the access "
-+ "vector definition for class %s changed\n", (char *)key);
-+ rc = -EINVAL;
-+ goto out;
-+ }
-+ if (cladatum->comdatum) {
-+ rc = hashtab_map(cladatum->comdatum->permissions.table, validate_perm,
-+ cladatum2->comdatum->permissions.table);
-+ if (rc) {
-+ printk(" in the access vector definition for class "
-+ "%s\n", (char *)key);
-+ goto out;
-+ }
-+ }
-+ rc = hashtab_map(cladatum->permissions.table, validate_perm,
-+ cladatum2->permissions.table);
-+ if (rc)
-+ printk(" in access vector definition for class %s\n",
-+ (char *)key);
-+out:
-+ return rc;
-+}
-+
-+/* Clone the SID into the new SID table. */
-+static int clone_sid(u32 sid,
-+ struct context *context,
-+ void *arg)
-+{
-+ struct sidtab *s = arg;
-+
-+ return sidtab_insert(s, sid, context);
-+}
-+
-+static inline int convert_context_handle_invalid_context(struct context *context)
-+{
-+ int rc = 0;
-+
-+ if (selinux_enforcing) {
-+ rc = -EINVAL;
-+ } else {
-+ char *s;
-+ u32 len;
-+
-+ context_struct_to_string(context, &s, &len);
-+ printk(KERN_ERR "security: context %s is invalid\n", s);
-+ kfree(s);
-+ }
-+ return rc;
-+}
-+
-+struct convert_context_args {
-+ struct policydb *oldp;
-+ struct policydb *newp;
-+};
-+
-+/*
-+ * Convert the values in the security context
-+ * structure `c' from the values specified
-+ * in the policy `p->oldp' to the values specified
-+ * in the policy `p->newp'. Verify that the
-+ * context is valid under the new policy.
-+ */
-+static int convert_context(u32 key,
-+ struct context *c,
-+ void *p)
-+{
-+ struct convert_context_args *args;
-+ struct context oldc;
-+ struct role_datum *role;
-+ struct type_datum *typdatum;
-+ struct user_datum *usrdatum;
-+ char *s;
-+ u32 len;
-+ int rc = -EINVAL;
-+
-+ args = p;
-+
-+ rc = context_cpy(&oldc, c);
-+ if (rc)
-+ goto out;
-+
-+ /* Convert the user. */
-+ usrdatum = hashtab_search(args->newp->p_users.table,
-+ args->oldp->p_user_val_to_name[c->user - 1]);
-+ if (!usrdatum) {
-+ goto bad;
-+ }
-+ c->user = usrdatum->value;
-+
-+ /* Convert the role. */
-+ role = hashtab_search(args->newp->p_roles.table,
-+ args->oldp->p_role_val_to_name[c->role - 1]);
-+ if (!role) {
-+ goto bad;
-+ }
-+ c->role = role->value;
-+
-+ /* Convert the type. */
-+ typdatum = hashtab_search(args->newp->p_types.table,
-+ args->oldp->p_type_val_to_name[c->type - 1]);
-+ if (!typdatum) {
-+ goto bad;
-+ }
-+ c->type = typdatum->value;
-+
-+ rc = mls_convert_context(args->oldp, args->newp, c);
-+ if (rc)
-+ goto bad;
-+
-+ /* Check the validity of the new context. */
-+ if (!policydb_context_isvalid(args->newp, c)) {
-+ rc = convert_context_handle_invalid_context(&oldc);
-+ if (rc)
-+ goto bad;
-+ }
-+
-+ context_destroy(&oldc);
-+out:
-+ return rc;
-+bad:
-+ context_struct_to_string(&oldc, &s, &len);
-+ context_destroy(&oldc);
-+ printk(KERN_ERR "security: invalidating context %s\n", s);
-+ kfree(s);
-+ goto out;
-+}
-+
-+extern void selinux_complete_init(void);
-+
-+/**
-+ * security_load_policy - Load a security policy configuration.
-+ * @data: binary policy data
-+ * @len: length of data in bytes
-+ *
-+ * Load a new set of security policy configuration data,
-+ * validate it and convert the SID table as necessary.
-+ * This function will flush the access vector cache after
-+ * loading the new policy.
-+ */
-+int security_load_policy(void *data, size_t len)
-+{
-+ struct policydb oldpolicydb, newpolicydb;
-+ struct sidtab oldsidtab, newsidtab;
-+ struct convert_context_args args;
-+ u32 seqno;
-+ int rc = 0;
-+ struct policy_file file = { data, len }, *fp = &file;
-+
-+ LOAD_LOCK;
-+
-+ if (!ss_initialized) {
-+ if (policydb_read(&policydb, fp)) {
-+ LOAD_UNLOCK;
-+ return -EINVAL;
-+ }
-+ if (policydb_load_isids(&policydb, &sidtab)) {
-+ LOAD_UNLOCK;
-+ policydb_destroy(&policydb);
-+ return -EINVAL;
-+ }
-+ ss_initialized = 1;
-+ LOAD_UNLOCK;
-+ selinux_complete_init();
-+ return 0;
-+ }
-+
-+#if 0
-+ sidtab_hash_eval(&sidtab, "sids");
-+#endif
-+
-+ if (policydb_read(&newpolicydb, fp)) {
-+ LOAD_UNLOCK;
-+ return -EINVAL;
-+ }
-+
-+ sidtab_init(&newsidtab);
-+
-+ /* Verify that the existing classes did not change. */
-+ if (hashtab_map(policydb.p_classes.table, validate_class, &newpolicydb)) {
-+ printk(KERN_ERR "security: the definition of an existing "
-+ "class changed\n");
-+ rc = -EINVAL;
-+ goto err;
-+ }
-+
-+ /* Clone the SID table. */
-+ sidtab_shutdown(&sidtab);
-+ if (sidtab_map(&sidtab, clone_sid, &newsidtab)) {
-+ rc = -ENOMEM;
-+ goto err;
-+ }
-+
-+ /* Convert the internal representations of contexts
-+ in the new SID table and remove invalid SIDs. */
-+ args.oldp = &policydb;
-+ args.newp = &newpolicydb;
-+ sidtab_map_remove_on_error(&newsidtab, convert_context, &args);
-+
-+ /* Save the old policydb and SID table to free later. */
-+ memcpy(&oldpolicydb, &policydb, sizeof policydb);
-+ sidtab_set(&oldsidtab, &sidtab);
-+
-+ /* Install the new policydb and SID table. */
-+ POLICY_WRLOCK;
-+ memcpy(&policydb, &newpolicydb, sizeof policydb);
-+ sidtab_set(&sidtab, &newsidtab);
-+ seqno = ++latest_granting;
-+ POLICY_WRUNLOCK;
-+ LOAD_UNLOCK;
-+
-+ /* Free the old policydb and SID table. */
-+ policydb_destroy(&oldpolicydb);
-+ sidtab_destroy(&oldsidtab);
-+
-+ avc_ss_reset(seqno);
-+
-+ return 0;
-+
-+err:
-+ LOAD_UNLOCK;
-+ sidtab_destroy(&newsidtab);
-+ policydb_destroy(&newpolicydb);
-+ return rc;
-+
-+}
-+
-+/**
-+ * security_port_sid - Obtain the SID for a port.
-+ * @domain: communication domain aka address family
-+ * @type: socket type
-+ * @protocol: protocol number
-+ * @port: port number
-+ * @out_sid: security identifier
-+ */
-+int security_port_sid(u16 domain,
-+ u16 type,
-+ u8 protocol,
-+ u16 port,
-+ u32 *out_sid)
-+{
-+ struct ocontext *c;
-+ int rc = 0;
-+
-+ POLICY_RDLOCK;
-+
-+ c = policydb.ocontexts[OCON_PORT];
-+ while (c) {
-+ if (c->u.port.protocol == protocol &&
-+ c->u.port.low_port <= port &&
-+ c->u.port.high_port >= port)
-+ break;
-+ c = c->next;
-+ }
-+
-+ if (c) {
-+ if (!c->sid[0]) {
-+ rc = sidtab_context_to_sid(&sidtab,
-+ &c->context[0],
-+ &c->sid[0]);
-+ if (rc)
-+ goto out;
-+ }
-+ *out_sid = c->sid[0];
-+ } else {
-+ *out_sid = SECINITSID_PORT;
-+ }
-+
-+out:
-+ POLICY_RDUNLOCK;
-+ return rc;
-+}
-+
-+/**
-+ * security_netif_sid - Obtain the SID for a network interface.
-+ * @name: interface name
-+ * @if_sid: interface SID
-+ * @msg_sid: default SID for received packets
-+ */
-+int security_netif_sid(char *name,
-+ u32 *if_sid,
-+ u32 *msg_sid)
-+{
-+ int rc = 0;
-+ struct ocontext *c;
-+
-+ POLICY_RDLOCK;
-+
-+ c = policydb.ocontexts[OCON_NETIF];
-+ while (c) {
-+ if (strcmp(name, c->u.name) == 0)
-+ break;
-+ c = c->next;
-+ }
-+
-+ if (c) {
-+ if (!c->sid[0] || !c->sid[1]) {
-+ rc = sidtab_context_to_sid(&sidtab,
-+ &c->context[0],
-+ &c->sid[0]);
-+ if (rc)
-+ goto out;
-+ rc = sidtab_context_to_sid(&sidtab,
-+ &c->context[1],
-+ &c->sid[1]);
-+ if (rc)
-+ goto out;
-+ }
-+ *if_sid = c->sid[0];
-+ *msg_sid = c->sid[1];
-+ } else {
-+ *if_sid = SECINITSID_NETIF;
-+ *msg_sid = SECINITSID_NETMSG;
-+ }
-+
-+out:
-+ POLICY_RDUNLOCK;
-+ return rc;
-+}
-+
-+
-+/**
-+ * security_node_sid - Obtain the SID for a node (host).
-+ * @domain: communication domain aka address family
-+ * @addrp: address
-+ * @addrlen: address length in bytes
-+ * @out_sid: security identifier
-+ */
-+int security_node_sid(u16 domain,
-+ void *addrp,
-+ u32 addrlen,
-+ u32 *out_sid)
-+{
-+ int rc = 0;
-+ u32 addr;
-+ struct ocontext *c;
-+
-+ POLICY_RDLOCK;
-+
-+ if (domain != AF_INET || addrlen != sizeof(u32)) {
-+ *out_sid = SECINITSID_NODE;
-+ goto out;
-+ }
-+ addr = *((u32 *)addrp);
-+
-+ c = policydb.ocontexts[OCON_NODE];
-+ while (c) {
-+ if (c->u.node.addr == (addr & c->u.node.mask))
-+ break;
-+ c = c->next;
-+ }
-+
-+ if (c) {
-+ if (!c->sid[0]) {
-+ rc = sidtab_context_to_sid(&sidtab,
-+ &c->context[0],
-+ &c->sid[0]);
-+ if (rc)
-+ goto out;
-+ }
-+ *out_sid = c->sid[0];
-+ } else {
-+ *out_sid = SECINITSID_NODE;
-+ }
-+
-+out:
-+ POLICY_RDUNLOCK;
-+ return rc;
-+}
-+
-+#define SIDS_NEL 25
-+
-+/**
-+ * security_get_user_sids - Obtain reachable SIDs for a user.
-+ * @fromsid: starting SID
-+ * @username: username
-+ * @sids: array of reachable SIDs for user
-+ * @nel: number of elements in @sids
-+ *
-+ * Generate the set of SIDs for legal security contexts
-+ * for a given user that can be reached by @fromsid.
-+ * Set *@sids to point to a dynamically allocated
-+ * array containing the set of SIDs. Set *@nel to the
-+ * number of elements in the array.
-+ */
-+
-+int security_get_user_sids(u32 fromsid,
-+ char *username,
-+ u32 **sids,
-+ u32 *nel)
-+{
-+ struct context *fromcon, usercon;
-+ u32 *mysids, *mysids2, sid;
-+ u32 mynel = 0, maxnel = SIDS_NEL;
-+ struct user_datum *user;
-+ struct role_datum *role;
-+ struct av_decision avd;
-+ int rc = 0, i, j;
-+
-+ if (!ss_initialized) {
-+ *sids = NULL;
-+ *nel = 0;
-+ goto out;
-+ }
-+
-+ POLICY_RDLOCK;
-+
-+ fromcon = sidtab_search(&sidtab, fromsid);
-+ if (!fromcon) {
-+ rc = -EINVAL;
-+ goto out_unlock;
-+ }
-+
-+ user = hashtab_search(policydb.p_users.table, username);
-+ if (!user) {
-+ rc = -EINVAL;
-+ goto out_unlock;
-+ }
-+ usercon.user = user->value;
-+
-+ mysids = kmalloc(maxnel*sizeof(*mysids), GFP_ATOMIC);
-+ if (!mysids) {
-+ rc = -ENOMEM;
-+ goto out_unlock;
-+ }
-+ memset(mysids, 0, maxnel*sizeof(*mysids));
-+
-+ for (i = ebitmap_startbit(&user->roles); i < ebitmap_length(&user->roles); i++) {
-+ if (!ebitmap_get_bit(&user->roles, i))
-+ continue;
-+ role = policydb.role_val_to_struct[i];
-+ usercon.role = i+1;
-+ for (j = ebitmap_startbit(&role->types); j < ebitmap_length(&role->types); j++) {
-+ if (!ebitmap_get_bit(&role->types, j))
-+ continue;
-+ usercon.type = j+1;
-+ if (usercon.type == fromcon->type)
-+ continue;
-+ mls_for_user_ranges(user,usercon) {
-+ rc = context_struct_compute_av(fromcon, &usercon,
-+ SECCLASS_PROCESS,
-+ PROCESS__TRANSITION,
-+ &avd);
-+ if (rc || !(avd.allowed & PROCESS__TRANSITION))
-+ continue;
-+ rc = sidtab_context_to_sid(&sidtab, &usercon, &sid);
-+ if (rc) {
-+ kfree(mysids);
-+ goto out_unlock;
-+ }
-+ if (mynel < maxnel) {
-+ mysids[mynel++] = sid;
-+ } else {
-+ maxnel += SIDS_NEL;
-+ mysids2 = kmalloc(maxnel*sizeof(*mysids2), GFP_ATOMIC);
-+ if (!mysids2) {
-+ rc = -ENOMEM;
-+ kfree(mysids);
-+ goto out_unlock;
-+ }
-+ memset(mysids2, 0, maxnel*sizeof(*mysids2));
-+ memcpy(mysids2, mysids, mynel * sizeof(*mysids2));
-+ kfree(mysids);
-+ mysids = mysids2;
-+ mysids[mynel++] = sid;
-+ }
-+ }
-+ mls_end_user_ranges;
-+ }
-+ }
-+
-+ *sids = mysids;
-+ *nel = mynel;
-+
-+out_unlock:
-+ POLICY_RDUNLOCK;
-+out:
-+ return rc;
-+}
-+
-+/**
-+ * security_genfs_sid - Obtain a SID for a file in a filesystem
-+ * @fstype: filesystem type
-+ * @path: path from root of mount
-+ * @sclass: file security class
-+ * @sid: SID for path
-+ *
-+ * Obtain a SID to use for a file in a filesystem that
-+ * cannot support xattr or use a fixed labeling behavior like
-+ * transition SIDs or task SIDs.
-+ */
-+int security_genfs_sid(const char *fstype,
-+ char *path,
-+ u16 sclass,
-+ u32 *sid)
-+{
-+ int len;
-+ struct genfs *genfs;
-+ struct ocontext *c;
-+ int rc = 0, cmp = 0;
-+
-+ POLICY_RDLOCK;
-+
-+ for (genfs = policydb.genfs; genfs; genfs = genfs->next) {
-+ cmp = strcmp(fstype, genfs->fstype);
-+ if (cmp <= 0)
-+ break;
-+ }
-+
-+ if (!genfs || cmp) {
-+ *sid = SECINITSID_UNLABELED;
-+ rc = -ENOENT;
-+ goto out;
-+ }
-+
-+ for (c = genfs->head; c; c = c->next) {
-+ len = strlen(c->u.name);
-+ if ((!c->v.sclass || sclass == c->v.sclass) &&
-+ (strncmp(c->u.name, path, len) == 0))
-+ break;
-+ }
-+
-+ if (!c) {
-+ *sid = SECINITSID_UNLABELED;
-+ rc = -ENOENT;
-+ goto out;
-+ }
-+
-+ if (!c->sid[0]) {
-+ rc = sidtab_context_to_sid(&sidtab,
-+ &c->context[0],
-+ &c->sid[0]);
-+ if (rc)
-+ goto out;
-+ }
-+
-+ *sid = c->sid[0];
-+out:
-+ POLICY_RDUNLOCK;
-+ return rc;
-+}
-+
-+/**
-+ * security_fs_use - Determine how to handle labeling for a filesystem.
-+ * @fstype: filesystem type
-+ * @behavior: labeling behavior
-+ * @sid: SID for filesystem (superblock)
-+ */
-+int security_fs_use(
-+ const char *fstype,
-+ unsigned int *behavior,
-+ u32 *sid)
-+{
-+ int rc = 0;
-+ struct ocontext *c;
-+
-+ POLICY_RDLOCK;
-+
-+ c = policydb.ocontexts[OCON_FSUSE];
-+ while (c) {
-+ if (strcmp(fstype, c->u.name) == 0)
-+ break;
-+ c = c->next;
-+ }
-+
-+ if (c) {
-+ *behavior = c->v.behavior;
-+ if (!c->sid[0]) {
-+ rc = sidtab_context_to_sid(&sidtab,
-+ &c->context[0],
-+ &c->sid[0]);
-+ if (rc)
-+ goto out;
-+ }
-+ *sid = c->sid[0];
-+ } else {
-+ rc = security_genfs_sid(fstype, "/", SECCLASS_DIR, sid);
-+ if (rc) {
-+ *behavior = SECURITY_FS_USE_NONE;
-+ rc = 0;
-+ } else {
-+ *behavior = SECURITY_FS_USE_GENFS;
-+ }
-+ }
-+
-+out:
-+ POLICY_RDUNLOCK;
-+ return rc;
-+}
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/ss/services.h 2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,21 @@
-+/*
-+ * Implementation of the security services.
-+ *
-+ * Author : Stephen Smalley, <sds@epoch.ncsc.mil>
-+ */
-+#ifndef _SS_SERVICES_H_
-+#define _SS_SERVICES_H_
-+
-+#include "policydb.h"
-+#include "sidtab.h"
-+
-+/*
-+ * The security server uses two global data structures
-+ * when providing its services: the SID table (sidtab)
-+ * and the policy database (policydb).
-+ */
-+extern struct sidtab sidtab;
-+extern struct policydb policydb;
-+
-+#endif /* _SS_SERVICES_H_ */
-+
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/ss/sidtab.c 2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,329 @@
-+/*
-+ * Implementation of the SID table type.
-+ *
-+ * Author : Stephen Smalley, <sds@epoch.ncsc.mil>
-+ */
-+#include "sidtab.h"
-+
-+#define SIDTAB_HASH(sid) \
-+(sid & SIDTAB_HASH_MASK)
-+
-+#define INIT_SIDTAB_LOCK(s) spin_lock_init(&s->lock)
-+#define SIDTAB_LOCK(s) spin_lock_irq(&s->lock)
-+#define SIDTAB_UNLOCK(s) spin_unlock_irq(&s->lock)
-+
-+int sidtab_init(struct sidtab *s)
-+{
-+ int i;
-+
-+ s->htable = kmalloc(sizeof(*(s->htable)) * SIDTAB_SIZE, GFP_ATOMIC);
-+ if (!s->htable)
-+ return -ENOMEM;
-+ for (i = 0; i < SIDTAB_SIZE; i++)
-+ s->htable[i] = NULL;
-+ s->nel = 0;
-+ s->next_sid = 1;
-+ s->shutdown = 0;
-+ INIT_SIDTAB_LOCK(s);
-+ return 0;
-+}
-+
-+int sidtab_insert(struct sidtab *s, u32 sid, struct context *context)
-+{
-+ int hvalue, rc = 0;
-+ struct sidtab_node *prev, *cur, *newnode;
-+
-+ if (!s) {
-+ rc = -ENOMEM;
-+ goto out;
-+ }
-+
-+ hvalue = SIDTAB_HASH(sid);
-+ prev = NULL;
-+ cur = s->htable[hvalue];
-+ while (cur != NULL && sid > cur->sid) {
-+ prev = cur;
-+ cur = cur->next;
-+ }
-+
-+ if (cur && sid == cur->sid) {
-+ rc = -EEXIST;
-+ goto out;
-+ }
-+
-+ newnode = kmalloc(sizeof(*newnode), GFP_ATOMIC);
-+ if (newnode == NULL) {
-+ rc = -ENOMEM;
-+ goto out;
-+ }
-+ newnode->sid = sid;
-+ if (context_cpy(&newnode->context, context)) {
-+ kfree(newnode);
-+ rc = -ENOMEM;
-+ goto out;
-+ }
-+
-+ if (prev) {
-+ newnode->next = prev->next;
-+ wmb();
-+ prev->next = newnode;
-+ } else {
-+ newnode->next = s->htable[hvalue];
-+ wmb();
-+ s->htable[hvalue] = newnode;
-+ }
-+
-+ s->nel++;
-+ if (sid >= s->next_sid)
-+ s->next_sid = sid + 1;
-+out:
-+ return rc;
-+}
-+
-+int sidtab_remove(struct sidtab *s, u32 sid)
-+{
-+ int hvalue, rc = 0;
-+ struct sidtab_node *cur, *last;
-+
-+ if (!s) {
-+ rc = -ENOENT;
-+ goto out;
-+ }
-+
-+ hvalue = SIDTAB_HASH(sid);
-+ last = NULL;
-+ cur = s->htable[hvalue];
-+ while (cur != NULL && sid > cur->sid) {
-+ last = cur;
-+ cur = cur->next;
-+ }
-+
-+ if (cur == NULL || sid != cur->sid) {
-+ rc = -ENOENT;
-+ goto out;
-+ }
-+
-+ if (last == NULL)
-+ s->htable[hvalue] = cur->next;
-+ else
-+ last->next = cur->next;
-+
-+ context_destroy(&cur->context);
-+
-+ kfree(cur);
-+ s->nel--;
-+out:
-+ return rc;
-+}
-+
-+struct context *sidtab_search(struct sidtab *s, u32 sid)
-+{
-+ int hvalue;
-+ struct sidtab_node *cur;
-+
-+ if (!s)
-+ return NULL;
-+
-+ hvalue = SIDTAB_HASH(sid);
-+ cur = s->htable[hvalue];
-+ while (cur != NULL && sid > cur->sid)
-+ cur = cur->next;
-+
-+ if (cur == NULL || sid != cur->sid) {
-+ /* Remap invalid SIDs to the unlabeled SID. */
-+ sid = SECINITSID_UNLABELED;
-+ hvalue = SIDTAB_HASH(sid);
-+ cur = s->htable[hvalue];
-+ while (cur != NULL && sid > cur->sid)
-+ cur = cur->next;
-+ if (!cur || sid != cur->sid)
-+ return NULL;
-+ }
-+
-+ return &cur->context;
-+}
-+
-+int sidtab_map(struct sidtab *s,
-+ int (*apply) (u32 sid,
-+ struct context *context,
-+ void *args),
-+ void *args)
-+{
-+ int i, rc = 0;
-+ struct sidtab_node *cur;
-+
-+ if (!s)
-+ goto out;
-+
-+ for (i = 0; i < SIDTAB_SIZE; i++) {
-+ cur = s->htable[i];
-+ while (cur != NULL) {
-+ rc = apply(cur->sid, &cur->context, args);
-+ if (rc)
-+ goto out;
-+ cur = cur->next;
-+ }
-+ }
-+out:
-+ return rc;
-+}
-+
-+void sidtab_map_remove_on_error(struct sidtab *s,
-+ int (*apply) (u32 sid,
-+ struct context *context,
-+ void *args),
-+ void *args)
-+{
-+ int i, ret;
-+ struct sidtab_node *last, *cur, *temp;
-+
-+ if (!s)
-+ return;
-+
-+ for (i = 0; i < SIDTAB_SIZE; i++) {
-+ last = NULL;
-+ cur = s->htable[i];
-+ while (cur != NULL) {
-+ ret = apply(cur->sid, &cur->context, args);
-+ if (ret) {
-+ if (last) {
-+ last->next = cur->next;
-+ } else {
-+ s->htable[i] = cur->next;
-+ }
-+
-+ temp = cur;
-+ cur = cur->next;
-+ context_destroy(&temp->context);
-+ kfree(temp);
-+ s->nel--;
-+ } else {
-+ last = cur;
-+ cur = cur->next;
-+ }
-+ }
-+ }
-+
-+ return;
-+}
-+
-+static inline u32 sidtab_search_context(struct sidtab *s,
-+ struct context *context)
-+{
-+ int i;
-+ struct sidtab_node *cur;
-+
-+ for (i = 0; i < SIDTAB_SIZE; i++) {
-+ cur = s->htable[i];
-+ while (cur != NULL) {
-+ if (context_cmp(&cur->context, context))
-+ return cur->sid;
-+ cur = cur->next;
-+ }
-+ }
-+ return 0;
-+}
-+
-+int sidtab_context_to_sid(struct sidtab *s,
-+ struct context *context,
-+ u32 *out_sid)
-+{
-+ u32 sid;
-+ int ret = 0;
-+
-+ *out_sid = SECSID_NULL;
-+
-+ sid = sidtab_search_context(s, context);
-+ if (!sid) {
-+ SIDTAB_LOCK(s);
-+ /* Rescan now that we hold the lock. */
-+ sid = sidtab_search_context(s, context);
-+ if (sid)
-+ goto unlock_out;
-+ /* No SID exists for the context. Allocate a new one. */
-+ if (s->next_sid == UINT_MAX || s->shutdown) {
-+ ret = -ENOMEM;
-+ goto unlock_out;
-+ }
-+ sid = s->next_sid++;
-+ ret = sidtab_insert(s, sid, context);
-+ if (ret)
-+ s->next_sid--;
-+unlock_out:
-+ SIDTAB_UNLOCK(s);
-+ }
-+
-+ if (ret)
-+ return ret;
-+
-+ *out_sid = sid;
-+ return 0;
-+}
-+
-+void sidtab_hash_eval(struct sidtab *h, char *tag)
-+{
-+ int i, chain_len, slots_used, max_chain_len;
-+ struct sidtab_node *cur;
-+
-+ slots_used = 0;
-+ max_chain_len = 0;
-+ for (i = 0; i < SIDTAB_SIZE; i++) {
-+ cur = h->htable[i];
-+ if (cur) {
-+ slots_used++;
-+ chain_len = 0;
-+ while (cur) {
-+ chain_len++;
-+ cur = cur->next;
-+ }
-+
-+ if (chain_len > max_chain_len)
-+ max_chain_len = chain_len;
-+ }
-+ }
-+
-+ printk(KERN_INFO "%s: %d entries and %d/%d buckets used, longest "
-+ "chain length %d\n", tag, h->nel, slots_used, SIDTAB_SIZE,
-+ max_chain_len);
-+}
-+
-+void sidtab_destroy(struct sidtab *s)
-+{
-+ int i;
-+ struct sidtab_node *cur, *temp;
-+
-+ if (!s)
-+ return;
-+
-+ for (i = 0; i < SIDTAB_SIZE; i++) {
-+ cur = s->htable[i];
-+ while (cur != NULL) {
-+ temp = cur;
-+ cur = cur->next;
-+ context_destroy(&temp->context);
-+ kfree(temp);
-+ }
-+ s->htable[i] = NULL;
-+ }
-+ kfree(s->htable);
-+ s->htable = NULL;
-+ s->nel = 0;
-+ s->next_sid = 1;
-+}
-+
-+void sidtab_set(struct sidtab *dst, struct sidtab *src)
-+{
-+ SIDTAB_LOCK(src);
-+ dst->htable = src->htable;
-+ dst->nel = src->nel;
-+ dst->next_sid = src->next_sid;
-+ dst->shutdown = 0;
-+ SIDTAB_UNLOCK(src);
-+}
-+
-+void sidtab_shutdown(struct sidtab *s)
-+{
-+ SIDTAB_LOCK(s);
-+ s->shutdown = 1;
-+ SIDTAB_UNLOCK(s);
-+}
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/ss/sidtab.h 2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,59 @@
-+/*
-+ * A security identifier table (sidtab) is a hash table
-+ * of security context structures indexed by SID value.
-+ *
-+ * Author : Stephen Smalley, <sds@epoch.ncsc.mil>
-+ */
-+#ifndef _SS_SIDTAB_H_
-+#define _SS_SIDTAB_H_
-+
-+#include "context.h"
-+
-+struct sidtab_node {
-+ u32 sid; /* security identifier */
-+ struct context context; /* security context structure */
-+ struct sidtab_node *next;
-+};
-+
-+#define SIDTAB_HASH_BITS 7
-+#define SIDTAB_HASH_BUCKETS (1 << SIDTAB_HASH_BITS)
-+#define SIDTAB_HASH_MASK (SIDTAB_HASH_BUCKETS-1)
-+
-+#define SIDTAB_SIZE SIDTAB_HASH_BUCKETS
-+
-+struct sidtab {
-+ struct sidtab_node **htable;
-+ unsigned int nel; /* number of elements */
-+ unsigned int next_sid; /* next SID to allocate */
-+ unsigned char shutdown;
-+ spinlock_t lock;
-+};
-+
-+int sidtab_init(struct sidtab *s);
-+int sidtab_insert(struct sidtab *s, u32 sid, struct context *context);
-+struct context *sidtab_search(struct sidtab *s, u32 sid);
-+
-+int sidtab_map(struct sidtab *s,
-+ int (*apply) (u32 sid,
-+ struct context *context,
-+ void *args),
-+ void *args);
-+
-+void sidtab_map_remove_on_error(struct sidtab *s,
-+ int (*apply) (u32 sid,
-+ struct context *context,
-+ void *args),
-+ void *args);
-+
-+int sidtab_context_to_sid(struct sidtab *s,
-+ struct context *context,
-+ u32 *sid);
-+
-+void sidtab_hash_eval(struct sidtab *h, char *tag);
-+void sidtab_destroy(struct sidtab *s);
-+void sidtab_set(struct sidtab *dst, struct sidtab *src);
-+void sidtab_shutdown(struct sidtab *s);
-+
-+#endif /* _SS_SIDTAB_H_ */
-+
-+
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/ss/symtab.c 2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,40 @@
-+/*
-+ * Implementation of the symbol table type.
-+ *
-+ * Author : Stephen Smalley, <sds@epoch.ncsc.mil>
-+ */
-+#include "symtab.h"
-+
-+static unsigned int symhash(struct hashtab *h, void *key)
-+{
-+ char *p, *keyp;
-+ unsigned int size;
-+ unsigned int val;
-+
-+ val = 0;
-+ keyp = key;
-+ size = strlen(keyp);
-+ for (p = keyp; (p - keyp) < size; p++)
-+ val = (val << 4 | (val >> (8*sizeof(unsigned int)-4))) ^ (*p);
-+ return val & (h->size - 1);
-+}
-+
-+static int symcmp(struct hashtab *h, void *key1, void *key2)
-+{
-+ char *keyp1, *keyp2;
-+
-+ keyp1 = key1;
-+ keyp2 = key2;
-+ return strcmp(keyp1, keyp2);
-+}
-+
-+
-+int symtab_init(struct symtab *s, unsigned int size)
-+{
-+ s->table = hashtab_create(symhash, symcmp, size);
-+ if (!s->table)
-+ return -1;
-+ s->nprim = 0;
-+ return 0;
-+}
-+
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/ss/symtab.h 2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,23 @@
-+/*
-+ * A symbol table (symtab) maintains associations between symbol
-+ * strings and datum values. The type of the datum values
-+ * is arbitrary. The symbol table type is implemented
-+ * using the hash table type (hashtab).
-+ *
-+ * Author : Stephen Smalley, <sds@epoch.ncsc.mil>
-+ */
-+#ifndef _SS_SYMTAB_H_
-+#define _SS_SYMTAB_H_
-+
-+#include "hashtab.h"
-+
-+struct symtab {
-+ struct hashtab *table; /* hash table (keyed on a string) */
-+ u32 nprim; /* number of primary names in table */
-+};
-+
-+int symtab_init(struct symtab *s, unsigned int size);
-+
-+#endif /* _SS_SYMTAB_H_ */
-+
-+
---- linux-2.6.0-test1/sound/core/timer.c 2003-06-14 12:18:24.000000000 -0700
-+++ 25/sound/core/timer.c 2003-07-19 17:06:14.000000000 -0700
-@@ -1688,10 +1688,11 @@ static ssize_t snd_timer_user_read(struc
- break;
- }
- }
-- spin_unlock_irq(&tu->qlock);
- if (err < 0)
- break;
-
-+ spin_unlock_irq(&tu->qlock);
-+
- if (tu->tread) {
- if (copy_to_user(buffer, &tu->tqueue[tu->qhead++], sizeof(snd_timer_tread_t))) {
- err = -EFAULT;
-@@ -1712,6 +1713,7 @@ static ssize_t snd_timer_user_read(struc
- spin_lock_irq(&tu->qlock);
- tu->qused--;
- }
-+ spin_unlock_irq(&tu->qlock);
- return result > 0 ? result : err;
- }
-
---- linux-2.6.0-test1/sound/isa/cmi8330.c 2003-06-14 12:17:58.000000000 -0700
-+++ 25/sound/isa/cmi8330.c 2003-07-19 17:03:51.000000000 -0700
-@@ -293,7 +293,7 @@ static int __devinit snd_cmi8330_pnp(int
- const struct pnp_card_device_id *id)
- {
- struct pnp_dev *pdev;
-- struct pnp_resource_table * cfg = kmalloc(GFP_ATOMIC, sizeof(struct pnp_resource_table));
-+ struct pnp_resource_table *cfg = kmalloc(sizeof(*cfg), GFP_ATOMIC);
- int err;
-
- acard->cap = pnp_request_card_device(card, id->devs[0].id, NULL);
---- linux-2.6.0-test1/sound/isa/es18xx.c 2003-06-14 12:18:08.000000000 -0700
-+++ 25/sound/isa/es18xx.c 2003-07-19 17:03:51.000000000 -0700
-@@ -1966,7 +1966,7 @@ static int __devinit snd_audiodrive_pnp(
- const struct pnp_card_device_id *id)
- {
- struct pnp_dev *pdev;
-- struct pnp_resource_table * cfg = kmalloc(GFP_ATOMIC, sizeof(struct pnp_resource_table));
-+ struct pnp_resource_table *cfg = kmalloc(sizeof(*cfg), GFP_ATOMIC);
- int err;
-
- if (!cfg)
---- linux-2.6.0-test1/sound/oss/ac97_plugin_ad1980.c 2003-07-13 21:44:35.000000000 -0700
-+++ 25/sound/oss/ac97_plugin_ad1980.c 2003-07-19 17:03:51.000000000 -0700
-@@ -17,7 +17,7 @@
- the provisions above, a recipient may use your version of this
- file under either the OSL or the GPL.
-
-- Authors: Arjan van de Ven <arjanv@redhat.com>
-+ Authors: Alan Cox <alan@redhat.com>
-
- This is an example codec plugin. This one switches the connections
- around to match the setups some vendors use with audio switched to
---- linux-2.6.0-test1/sound/oss/ad1816.c 2003-06-14 12:18:33.000000000 -0700
-+++ 25/sound/oss/ad1816.c 2003-07-19 17:03:51.000000000 -0700
-@@ -1,15 +1,15 @@
- /*
- *
-- * AD1816 lowlevel sound driver for Linux 2.2.0 and above
-+ * AD1816 lowlevel sound driver for Linux 2.6.0 and above
- *
-- * Copyright (C) 1998 by Thorsten Knabe <tek@rbg.informatik.tu-darmstadt.de>
-+ * Copyright (C) 1998-2003 by Thorsten Knabe <linux@thorsten-knabe.de>
- *
- * Based on the CS4232/AD1848 driver Copyright (C) by Hannu Savolainen 1993-1996
- *
- *
-- * version: 1.3.1
-- * status: experimental
-- * date: 1999/4/18
-+ * version: 1.5
-+ * status: beta
-+ * date: 2003/07/15
- *
- * Changes:
- * Oleg Drokin: Some cleanup of load/unload functions. 1998/11/24
-@@ -30,8 +30,17 @@
- * Christoph Hellwig: Added isapnp support 2000/03/15
- *
- * Arnaldo Carvalho de Melo: get rid of check_region 2001/10/07
-+ *
-+ * Thorsten Knabe: Compiling with CONFIG_PNP enabled
-+ * works again. It is now possible to use more than one
-+ * AD1816 sound card. Sample rate now may be changed during
-+ * playback/capture. printk() uses log levels everywhere.
-+ * SMP fixes. DMA handling fixes.
-+ * Other minor code cleanup. 2003/07/15
-+ *
- */
-
-+
- #include <linux/config.h>
- #include <linux/module.h>
- #include <linux/init.h>
-@@ -42,9 +51,6 @@
- #include "sound_config.h"
-
- #define DEBUGNOISE(x)
--#define DEBUGINFO(x)
--#define DEBUGLOG(x)
--#define DEBUGWARN(x)
-
- #define CHECK_FOR_POWER { int timeout=100; \
- while (timeout > 0 && (inb(devc->base)&0x80)!= 0x80) {\
-@@ -63,21 +69,21 @@ typedef struct
- int dma_playback;
- int dma_capture;
-
-- int speed; /* open */
-+ int opened; /* open */
-+ int speed;
- int channels;
- int audio_format;
-- unsigned char format_bits;
- int audio_mode;
-- int opened;
-
- int recmask; /* setup */
-+ unsigned char format_bits;
- int supported_devices;
- int supported_rec_devices;
- unsigned short levels[SOUND_MIXER_NRDEVICES];
-+ /* misc */
-+ struct pnp_dev *pnpdev; /* configured via pnp */
- int dev_no; /* this is the # in audio_devs and NOT
- in ad1816_info */
-- int irq_ok;
-- int *osp;
- spinlock_t lock;
- } ad1816_info;
-
-@@ -85,12 +91,6 @@ static int nr_ad1816_devs;
- static int ad1816_clockfreq = 33000;
- static int options;
-
--/* for backward mapping of irq to sound device */
--
--static volatile char irq2dev[17] = {-1, -1, -1, -1, -1, -1, -1, -1,
-- -1, -1, -1, -1, -1, -1, -1, -1, -1};
--
--
- /* supported audio formats */
- static int ad_format_mask =
- AFMT_U8 | AFMT_S16_LE | AFMT_S16_BE | AFMT_MU_LAW | AFMT_A_LAW;
-@@ -105,33 +105,22 @@ static ad1816_info dev_info[MAX_AUDIO_DE
-
- static int ad_read (ad1816_info * devc, int reg)
- {
-- unsigned long flags;
- int result;
-
- CHECK_FOR_POWER;
--
-- spin_lock_irqsave(&devc->lock,flags); /* make register access atomic */
- outb ((unsigned char) (reg & 0x3f), devc->base+0);
- result = inb(devc->base+2);
- result+= inb(devc->base+3)<<8;
-- spin_unlock_irqrestore(&devc->lock,flags);
--
- return (result);
- }
-
-
- static void ad_write (ad1816_info * devc, int reg, int data)
- {
-- unsigned long flags;
--
- CHECK_FOR_POWER;
--
-- spin_lock_irqsave(&devc->lock,flags); /* make register access atomic */
- outb ((unsigned char) (reg & 0xff), devc->base+0);
- outb ((unsigned char) (data & 0xff),devc->base+2);
- outb ((unsigned char) ((data>>8)&0xff),devc->base+3);
-- spin_unlock_irqrestore(&devc->lock,flags);
--
- }
-
- /* ------------------------------------------------------------------- */
-@@ -144,7 +133,7 @@ static void ad1816_halt_input (int dev)
- ad1816_info *devc = (ad1816_info *) audio_devs[dev]->devc;
- unsigned char buffer;
-
-- DEBUGINFO (printk("ad1816: halt_input called\n"));
-+ DEBUGNOISE(printk(KERN_DEBUG "ad1816: halt_input called\n"));
-
- spin_lock_irqsave(&devc->lock,flags);
-
-@@ -176,7 +165,7 @@ static void ad1816_halt_output (int dev)
-
- unsigned char buffer;
-
-- DEBUGINFO (printk("ad1816: halt_output called!\n"));
-+ DEBUGNOISE(printk(KERN_DEBUG "ad1816: halt_output called!\n"));
-
- spin_lock_irqsave(&devc->lock,flags);
- /* Mute pcm output */
-@@ -210,7 +199,7 @@ static void ad1816_output_block (int dev
- unsigned long cnt;
- ad1816_info *devc = (ad1816_info *) audio_devs[dev]->devc;
-
-- DEBUGINFO(printk("ad1816: output_block called buf=%ld count=%d flags=%d\n",buf,count,intrflag));
-+ DEBUGNOISE(printk(KERN_DEBUG "ad1816: output_block called buf=%ld count=%d flags=%d\n",buf,count,intrflag));
-
- cnt = count/4 - 1;
-
-@@ -231,7 +220,7 @@ static void ad1816_start_input (int dev,
- unsigned long cnt;
- ad1816_info *devc = (ad1816_info *) audio_devs[dev]->devc;
-
-- DEBUGINFO(printk("ad1816: start_input called buf=%ld count=%d flags=%d\n",buf,count,intrflag));
-+ DEBUGNOISE(printk(KERN_DEBUG "ad1816: start_input called buf=%ld count=%d flags=%d\n",buf,count,intrflag));
-
- cnt = count/4 - 1;
-
-@@ -239,7 +228,6 @@ static void ad1816_start_input (int dev,
-
- /* set transfer count */
- ad_write (devc, 10, cnt & 0xffff);
--
- devc->audio_mode |= PCM_ENABLE_INPUT;
- spin_unlock_irqrestore(&devc->lock,flags);
- }
-@@ -251,33 +239,19 @@ static int ad1816_prepare_for_input (int
- ad1816_info *devc = (ad1816_info *) audio_devs[dev]->devc;
- unsigned char fmt_bits;
-
-- DEBUGINFO (printk ("ad1816: prepare_for_input called: bsize=%d bcount=%d\n",bsize,bcount));
-+ DEBUGNOISE(printk(KERN_DEBUG "ad1816: prepare_for_input called: bsize=%d bcount=%d\n",bsize,bcount));
-
- spin_lock_irqsave(&devc->lock,flags);
--
- fmt_bits= (devc->format_bits&0x7)<<3;
-
- /* set mono/stereo mode */
- if (devc->channels > 1) {
- fmt_bits |=0x4;
- }
--
- /* set Mono/Stereo in playback/capture register */
- outb( (inb(devc->base+8) & ~0x3C)|fmt_bits, devc->base+8);
- outb( (inb(devc->base+9) & ~0x3C)|fmt_bits, devc->base+9);
--
-- /* If compiled into kernel, AD1816_CLOCK is defined, so use it */
--#ifdef AD1816_CLOCK
-- ad1816_clockfreq=AD1816_CLOCK;
--#endif
--
-- /* capture/playback frequency correction for soundcards
-- with clock chips != 33MHz (allowed range 5 - 100 kHz) */
-
-- if (ad1816_clockfreq<5000 || ad1816_clockfreq>100000) {
-- ad1816_clockfreq=33000;
-- }
--
- freq=((unsigned int)devc->speed*33000)/ad1816_clockfreq;
-
- /* write playback/capture speeds */
-@@ -297,7 +271,7 @@ static int ad1816_prepare_for_output (in
- ad1816_info *devc = (ad1816_info *) audio_devs[dev]->devc;
- unsigned char fmt_bits;
-
-- DEBUGINFO (printk ("ad1816: prepare_for_output called: bsize=%d bcount=%d\n",bsize,bcount));
-+ DEBUGNOISE(printk(KERN_DEBUG "ad1816: prepare_for_output called: bsize=%d bcount=%d\n",bsize,bcount));
-
- spin_lock_irqsave(&devc->lock,flags);
-
-@@ -311,17 +285,6 @@ static int ad1816_prepare_for_output (in
- outb( (inb(devc->base+8) & ~0x3C)|fmt_bits, devc->base+8);
- outb( (inb(devc->base+9) & ~0x3C)|fmt_bits, devc->base+9);
-
--#ifdef AD1816_CLOCK
-- ad1816_clockfreq=AD1816_CLOCK;
--#endif
--
-- /* capture/playback frequency correction for soundcards
-- with clock chips != 33MHz (allowed range 5 - 100 kHz)*/
--
-- if (ad1816_clockfreq<5000 || ad1816_clockfreq>100000) {
-- ad1816_clockfreq=33000;
-- }
--
- freq=((unsigned int)devc->speed*33000)/ad1816_clockfreq;
-
- /* write playback/capture speeds */
-@@ -340,7 +303,7 @@ static void ad1816_trigger (int dev, int
- unsigned long flags;
- ad1816_info *devc = (ad1816_info *) audio_devs[dev]->devc;
-
-- DEBUGINFO (printk("ad1816: trigger called! (devc=%d,devc->base=%d\n", devc, devc->base));
-+ DEBUGNOISE(printk(KERN_DEBUG "ad1816: trigger called! (devc=%d,devc->base=%d\n", devc, devc->base));
-
- /* mode may have changed */
-
-@@ -388,10 +351,17 @@ static void ad1816_reset (int dev)
- /* set playback speed */
- static int ad1816_set_speed (int dev, int arg)
- {
-+ unsigned long flags;
-+ unsigned int freq;
-+ int ret;
-+
- ad1816_info *devc = (ad1816_info *) audio_devs[dev]->devc;
-
-+ spin_lock_irqsave(&devc->lock, flags);
- if (arg == 0) {
-- return devc->speed;
-+ ret = devc->speed;
-+ spin_unlock_irqrestore(&devc->lock, flags);
-+ return ret;
- }
- /* range checking */
- if (arg < 4000) {
-@@ -400,14 +370,23 @@ static int ad1816_set_speed (int dev, in
- if (arg > 55000) {
- arg = 55000;
- }
--
- devc->speed = arg;
-- return devc->speed;
-+
-+ /* change speed during playback */
-+ freq=((unsigned int)devc->speed*33000)/ad1816_clockfreq;
-+ /* write playback/capture speeds */
-+ ad_write (devc, 2, freq & 0xffff);
-+ ad_write (devc, 3, freq & 0xffff);
-+
-+ ret = devc->speed;
-+ spin_unlock_irqrestore(&devc->lock, flags);
-+ return ret;
-
- }
-
- static unsigned int ad1816_set_bits (int dev, unsigned int arg)
- {
-+ unsigned long flags;
- ad1816_info *devc = (ad1816_info *) audio_devs[dev]->devc;
-
- static struct format_tbl {
-@@ -428,10 +407,13 @@ static unsigned int ad1816_set_bits (int
-
- int i, n = sizeof (format2bits) / sizeof (struct format_tbl);
-
-+ spin_lock_irqsave(&devc->lock, flags);
- /* return current format */
-- if (arg == 0)
-- return devc->audio_format;
--
-+ if (arg == 0) {
-+ arg = devc->audio_format;
-+ spin_unlock_irqrestore(&devc->lock, flags);
-+ return arg;
-+ }
- devc->audio_format = arg;
-
- /* search matching format bits */
-@@ -439,12 +421,15 @@ static unsigned int ad1816_set_bits (int
- if (format2bits[i].format == arg) {
- devc->format_bits = format2bits[i].bits;
- devc->audio_format = arg;
-+ spin_unlock_irqrestore(&devc->lock, flags);
- return arg;
- }
-
- /* Still hanging here. Something must be terribly wrong */
- devc->format_bits = 0;
-- return devc->audio_format = AFMT_U8;
-+ devc->audio_format = AFMT_U8;
-+ spin_unlock_irqrestore(&devc->lock, flags);
-+ return(AFMT_U8);
- }
-
- static short ad1816_set_channels (int dev, short arg)
-@@ -486,9 +471,8 @@ static int ad1816_open (int dev, int mod
- devc->speed = 8000;
- devc->audio_format=AFMT_U8;
- devc->channels=1;
--
-- ad1816_reset(devc->dev_no); /* halt all pending output */
- spin_unlock_irqrestore(&devc->lock,flags);
-+ ad1816_reset(devc->dev_no); /* halt all pending output */
- return 0;
- }
-
-@@ -497,17 +481,15 @@ static void ad1816_close (int dev) /* cl
- unsigned long flags;
- ad1816_info *devc = (ad1816_info *) audio_devs[dev]->devc;
-
-- spin_lock_irqsave(&devc->lock,flags);
--
- /* halt all pending output */
- ad1816_reset(devc->dev_no);
--
-+
-+ spin_lock_irqsave(&devc->lock,flags);
- devc->opened = 0;
- devc->audio_mode = 0;
- devc->speed = 8000;
- devc->audio_format=AFMT_U8;
- devc->format_bits = 0;
--
- spin_unlock_irqrestore(&devc->lock,flags);
- }
-
-@@ -543,25 +525,13 @@ static struct audio_driver ad1816_audio_
- static irqreturn_t ad1816_interrupt (int irq, void *dev_id, struct pt_regs *dummy)
- {
- unsigned char status;
-- ad1816_info *devc;
-- int dev;
--
-+ ad1816_info *devc = (ad1816_info *)dev_id;
-
- if (irq < 0 || irq > 15) {
- printk(KERN_WARNING "ad1816: Got bogus interrupt %d\n", irq);
- return IRQ_NONE;
- }
-
-- dev = irq2dev[irq];
--
-- if (dev < 0 || dev >= num_audiodevs) {
-- printk(KERN_WARNING "ad1816: IRQ2AD1816-mapping failed for "
-- "irq %d device %d\n", irq,dev);
-- return IRQ_NONE;
-- }
--
-- devc = (ad1816_info *) audio_devs[dev]->devc;
--
- spin_lock(&devc->lock);
-
- /* read interrupt register */
-@@ -569,18 +539,19 @@ static irqreturn_t ad1816_interrupt (int
- /* Clear all interrupt */
- outb (~status, devc->base+1);
-
-- DEBUGNOISE (printk("ad1816: Got interrupt subclass %d\n",status));
--
-- devc->irq_ok=1;
-+ DEBUGNOISE(printk(KERN_DEBUG "ad1816: Got interrupt subclass %d\n",status));
-
-- if (status == 0)
-- DEBUGWARN(printk ("ad1816: interrupt: Got interrupt, but no reason?\n"));
-+ if (status == 0) {
-+ DEBUGNOISE(printk(KERN_DEBUG "ad1816: interrupt: Got interrupt, but no source.\n"));
-+ spin_unlock(&devc->lock);
-+ return IRQ_NONE;
-+ }
-
- if (devc->opened && (devc->audio_mode & PCM_ENABLE_INPUT) && (status&64))
-- DMAbuf_inputintr (dev);
-+ DMAbuf_inputintr (devc->dev_no);
-
- if (devc->opened && (devc->audio_mode & PCM_ENABLE_OUTPUT) && (status & 128))
-- DMAbuf_outputintr (dev, 1);
-+ DMAbuf_outputintr (devc->dev_no, 1);
-
- spin_unlock(&devc->lock);
- return IRQ_HANDLED;
-@@ -671,9 +642,11 @@ static unsigned short default_mixer_leve
- static int
- ad1816_set_recmask (ad1816_info * devc, int mask)
- {
-+ unsigned long flags;
- unsigned char recdev;
- int i, n;
-
-+ spin_lock_irqsave(&devc->lock, flags);
- mask &= devc->supported_rec_devices;
-
- n = 0;
-@@ -733,6 +706,7 @@ ad1816_set_recmask (ad1816_info * devc,
- (ad_read (devc, 20) & 0x8f8f) | recdev | (recdev<<8));
-
- devc->recmask = mask;
-+ spin_unlock_irqrestore(&devc->lock, flags);
- return mask;
- }
-
-@@ -760,7 +734,7 @@ change_bits (int *regval, int dev, int c
- static int
- ad1816_mixer_get (ad1816_info * devc, int dev)
- {
-- DEBUGINFO(printk("ad1816: mixer_get called!\n"));
-+ DEBUGNOISE(printk(KERN_DEBUG "ad1816: mixer_get called!\n"));
-
- /* range check + supported mixer check */
- if (dev < 0 || dev >= SOUND_MIXER_NRDEVICES )
-@@ -781,8 +755,9 @@ ad1816_mixer_set (ad1816_info * devc, in
- int regoffs;
- int val;
- int valmute;
-+ unsigned long flags;
-
-- DEBUGINFO(printk("ad1816: mixer_set called!\n"));
-+ DEBUGNOISE(printk(KERN_DEBUG "ad1816: mixer_set called!\n"));
-
- if (dev < 0 || dev >= SOUND_MIXER_NRDEVICES )
- return -(EINVAL);
-@@ -813,6 +788,7 @@ ad1816_mixer_set (ad1816_info * devc, in
- /* sanity check */
- if (mix_devices[dev][LEFT_CHN].nbits == 0)
- return -(EINVAL);
-+ spin_lock_irqsave(&devc->lock, flags);
-
- /* keep precise volume internal */
- devc->levels[dev] = retvol;
-@@ -840,8 +816,10 @@ ad1816_mixer_set (ad1816_info * devc, in
- */
-
- /* Was just a mono channel */
-- if (mix_devices[dev][RIGHT_CHN].nbits == 0)
-+ if (mix_devices[dev][RIGHT_CHN].nbits == 0) {
-+ spin_unlock_irqrestore(&devc->lock, flags);
- return retvol;
-+ }
-
- regoffs = mix_devices[dev][RIGHT_CHN].regno;
- val = ad_read (devc, regoffs);
-@@ -857,7 +835,7 @@ ad1816_mixer_set (ad1816_info * devc, in
- valmute &= ~0x80;
- }
- ad_write (devc, regoffs, valmute); /* mute */
--
-+ spin_unlock_irqrestore(&devc->lock, flags);
- return retvol;
- }
-
-@@ -901,7 +879,7 @@ ad1816_mixer_ioctl (int dev, unsigned in
- ad1816_info *devc = mixer_devs[dev]->devc;
- int val;
-
-- DEBUGINFO(printk("ad1816: mixer_ioctl called!\n"));
-+ DEBUGNOISE(printk(KERN_DEBUG "ad1816: mixer_ioctl called!\n"));
-
- /* Mixer ioctl */
- if (((cmd >> 8) & 0xff) == 'M') {
-@@ -980,83 +958,91 @@ static struct mixer_operations ad1816_mi
-
- /* ------------------------------------------------------------------- */
-
--/* stuff for card recognition, init and unloading */
-+/* stuff for card recognition, init and unloading PNP ...*/
-
-
--/* replace with probe routine */
--static int __init probe_ad1816 ( struct address_info *hw_config )
-+/* check if AD1816 present at specified hw_config and register device with OS
-+ * return 1 if initialization was successful, 0 otherwise
-+ */
-+static int __init ad1816_init_card (struct address_info *hw_config,
-+ struct pnp_dev *pnp)
- {
-- ad1816_info *devc = &dev_info[nr_ad1816_devs];
-- int io_base=hw_config->io_base;
-- int *osp=hw_config->osp;
-+ ad1816_info *devc = NULL;
- int tmp;
-+ int oss_devno = -1;
-
-- printk(KERN_INFO "ad1816: AD1816 sounddriver "
-- "Copyright (C) 1998 by Thorsten Knabe\n");
-- printk(KERN_INFO "ad1816: io=0x%x, irq=%d, dma=%d, dma2=%d, "
-- "clockfreq=%d, options=%d isadmabug=%d\n",
-+ printk(KERN_INFO "ad1816: initializing card: io=0x%x, irq=%d, dma=%d, "
-+ "dma2=%d, clockfreq=%d, options=%d isadmabug=%d "
-+ "%s\n",
- hw_config->io_base,
- hw_config->irq,
- hw_config->dma,
- hw_config->dma2,
- ad1816_clockfreq,
- options,
-- isa_dma_bridge_buggy);
-+ isa_dma_bridge_buggy,
-+ pnp?"(PNP)":"");
-
-- if (!request_region(io_base, 16, "AD1816 Sound")) {
-- printk(KERN_WARNING "ad1816: I/O port 0x%03x not free\n",
-- io_base);
-- goto err;
-- }
--
-- DEBUGLOG(printk ("ad1816: detect(%x)\n", io_base));
--
-+ /* ad1816_info structure remaining ? */
- if (nr_ad1816_devs >= MAX_AUDIO_DEV) {
-- printk(KERN_WARNING "ad1816: detect error - step 0\n");
-- goto out_release_region;
-+ printk(KERN_WARNING "ad1816: no more ad1816_info structures "
-+ "left\n");
-+ goto out;
- }
-
-- devc->base = io_base;
-- devc->irq_ok = 0;
-- devc->irq = 0;
-+ devc = &dev_info[nr_ad1816_devs];
-+ devc->base = hw_config->io_base;
-+ devc->irq = hw_config->irq;
-+ devc->dma_playback=hw_config->dma;
-+ devc->dma_capture=hw_config->dma2;
- devc->opened = 0;
-- devc->osp = osp;
-+ devc->pnpdev = pnp;
- spin_lock_init(&devc->lock);
-
-+ if (!request_region(devc->base, 16, "AD1816 Sound")) {
-+ printk(KERN_WARNING "ad1816: I/O port 0x%03x not free\n",
-+ devc->base);
-+ goto out;
-+ }
-+
-+ printk(KERN_INFO "ad1816: Examining AD1816 at address 0x%03x.\n",
-+ devc->base);
-+
-+
-+ /* tests for ad1816 */
- /* base+0: bit 1 must be set but not 255 */
- tmp=inb(devc->base);
- if ( (tmp&0x80)==0 || tmp==255 ) {
-- DEBUGLOG (printk ("ad1816: Chip is not an AD1816 or chip is not active (Test 0)\n"));
-+ printk (KERN_INFO "ad1816: Chip is not an AD1816 or chip "
-+ "is not active (Test 0)\n");
- goto out_release_region;
- }
-
--
- /* writes to ireg 8 are copied to ireg 9 */
- ad_write(devc,8,12345);
- if (ad_read(devc,9)!=12345) {
-- DEBUGLOG (printk ("ad1816: Chip is not an AD1816 (Test 1)\n"));
-+ printk(KERN_INFO "ad1816: Chip is not an AD1816 (Test 1)\n");
- goto out_release_region;
- }
-
- /* writes to ireg 8 are copied to ireg 9 */
- ad_write(devc,8,54321);
- if (ad_read(devc,9)!=54321) {
-- DEBUGLOG (printk ("ad1816: Chip is not an AD1816 (Test 2)\n"));
-+ printk(KERN_INFO "ad1816: Chip is not an AD1816 (Test 2)\n");
- goto out_release_region;
- }
-
--
- /* writes to ireg 10 are copied to ireg 11 */
- ad_write(devc,10,54321);
- if (ad_read(devc,11)!=54321) {
-- DEBUGLOG (printk ("ad1816: Chip is not an AD1816 (Test 3)\n"));
-+ printk (KERN_INFO "ad1816: Chip is not an AD1816 (Test 3)\n");
- goto out_release_region;
- }
-
- /* writes to ireg 10 are copied to ireg 11 */
- ad_write(devc,10,12345);
- if (ad_read(devc,11)!=12345) {
-- DEBUGLOG (printk ("ad1816: Chip is not an AD1816 (Test 4)\n"));
-+ printk (KERN_INFO "ad1816: Chip is not an AD1816 (Test 4)\n");
- goto out_release_region;
- }
-
-@@ -1064,35 +1050,12 @@ static int __init probe_ad1816 ( struct
- tmp=inb(devc->base+1);
- outb(0xff,devc->base+1);
- if (inb(devc->base+1)!=tmp) {
-- DEBUGLOG (printk ("ad1816: Chip is not an AD1816 (Test 5)\n"));
-+ printk(KERN_INFO "ad1816: Chip is not an AD1816 (Test 5)\n");
- goto out_release_region;
- }
--
-
-- DEBUGLOG (printk ("ad1816: detect() - Detected OK\n"));
-- DEBUGLOG (printk ("ad1816: AD1816 Version: %d\n",ad_read(devc,45)));
--
-- /* detection was successful */
-- return 1;
--out_release_region:
-- release_region(io_base, 16);
-- /* detection was NOT successful */
--err: return 0;
--}
--
--
--/* allocate resources from the kernel. If any allocation fails, free
-- all allocated resources and exit attach.
--
-- */
--
--static void __init attach_ad1816 (struct address_info *hw_config)
--{
-- int my_dev;
-- char dev_name[100];
-- ad1816_info *devc = &dev_info[nr_ad1816_devs];
--
-- devc->base = hw_config->io_base;
-+ printk(KERN_INFO "ad1816: AD1816 (version %d) successfully detected!\n",
-+ ad_read(devc,45));
-
- /* disable all interrupts */
- ad_write(devc,1,0);
-@@ -1101,62 +1064,54 @@ static void __init attach_ad1816 (struct
- outb (0, devc->base+1);
-
- /* allocate irq */
-- if (hw_config->irq < 0 || hw_config->irq > 15)
-+ if (devc->irq < 0 || devc->irq > 15)
- goto out_release_region;
-- if (request_irq(hw_config->irq, ad1816_interrupt,0,
-- "SoundPort", hw_config->osp) < 0) {
-+ if (request_irq(devc->irq, ad1816_interrupt,0,
-+ "SoundPort", devc) < 0) {
- printk(KERN_WARNING "ad1816: IRQ in use\n");
- goto out_release_region;
- }
-- devc->irq=hw_config->irq;
-
- /* DMA stuff */
-- if (sound_alloc_dma (hw_config->dma, "Sound System")) {
-+ if (sound_alloc_dma (devc->dma_playback, "Sound System")) {
- printk(KERN_WARNING "ad1816: Can't allocate DMA%d\n",
-- hw_config->dma);
-+ devc->dma_playback);
- goto out_free_irq;
- }
-- devc->dma_playback=hw_config->dma;
-
-- if ( hw_config->dma2 != -1 && hw_config->dma2 != hw_config->dma) {
-- if (sound_alloc_dma(hw_config->dma2,
-+ if ( devc->dma_capture >= 0 &&
-+ devc->dma_capture != devc->dma_playback) {
-+ if (sound_alloc_dma(devc->dma_capture,
- "Sound System (capture)")) {
- printk(KERN_WARNING "ad1816: Can't allocate DMA%d\n",
-- hw_config->dma2);
-+ devc->dma_capture);
- goto out_free_dma;
- }
-- devc->dma_capture=hw_config->dma2;
- devc->audio_mode=DMA_AUTOMODE|DMA_DUPLEX;
- } else {
-- devc->dma_capture=-1;
-+ printk(KERN_WARNING "ad1816: Only one DMA channel "
-+ "available/configured. No duplex operation possible\n");
- devc->audio_mode=DMA_AUTOMODE;
- }
-
-- sprintf (dev_name,"AD1816 audio driver");
--
-- conf_printf2 (dev_name,
-- devc->base, devc->irq, hw_config->dma, hw_config->dma2);
-+ conf_printf2 ("AD1816 audio driver",
-+ devc->base, devc->irq, devc->dma_playback,
-+ devc->dma_capture);
-
- /* register device */
-- if ((my_dev = sound_install_audiodrv (AUDIO_DRIVER_VERSION,
-- dev_name,
-+ if ((oss_devno = sound_install_audiodrv (AUDIO_DRIVER_VERSION,
-+ "AD1816 audio driver",
- &ad1816_audio_driver,
- sizeof (struct audio_driver),
- devc->audio_mode,
- ad_format_mask,
- devc,
-- hw_config->dma,
-- hw_config->dma2)) < 0) {
-+ devc->dma_playback,
-+ devc->dma_capture)) < 0) {
- printk(KERN_WARNING "ad1816: Can't install sound driver\n");
- goto out_free_dma_2;
- }
-
-- /* fill rest of structure with reasonable default values */
-- irq2dev[hw_config->irq] = devc->dev_no = my_dev;
-- devc->opened = 0;
-- devc->irq_ok = 0;
-- devc->osp = hw_config->osp;
-- nr_ad1816_devs++;
-
- ad_write(devc,32,0x80f0); /* sound system mode */
- if (options&1) {
-@@ -1186,25 +1141,30 @@ static void __init attach_ad1816 (struct
- ad1816_mixer_reset (devc);
-
- /* register mixer */
-- if ((audio_devs[my_dev]->mixer_dev=sound_install_mixer(
-+ if ((audio_devs[oss_devno]->mixer_dev=sound_install_mixer(
- MIXER_DRIVER_VERSION,
-- dev_name,
-+ "AD1816 audio driver",
- &ad1816_mixer_operations,
- sizeof (struct mixer_operations),
-- devc)) >= 0) {
-- audio_devs[my_dev]->min_fragment = 0;
-+ devc)) < 0) {
-+ printk(KERN_WARNING "Can't install mixer\n");
- }
--out: return;
-+ /* make ad1816_info active */
-+ nr_ad1816_devs++;
-+ printk(KERN_INFO "ad1816: card successfully installed!\n");
-+ return 1;
-+ /* error handling */
- out_free_dma_2:
-- if (devc->dma_capture >= 0)
-- sound_free_dma(hw_config->dma2);
-+ if (devc->dma_capture >= 0 && devc->dma_capture != devc->dma_playback)
-+ sound_free_dma(devc->dma_capture);
- out_free_dma:
-- sound_free_dma(hw_config->dma);
-+ sound_free_dma(devc->dma_playback);
- out_free_irq:
-- free_irq(hw_config->irq,hw_config->osp);
-+ free_irq(devc->irq, devc);
- out_release_region:
-- release_region(hw_config->io_base, 16);
-- goto out;
-+ release_region(devc->base, 16);
-+out:
-+ return 0;
- }
-
- static void __exit unload_card(ad1816_info *devc)
-@@ -1212,7 +1172,7 @@ static void __exit unload_card(ad1816_in
- int mixer, dev = 0;
-
- if (devc != NULL) {
-- DEBUGLOG (printk("ad1816: Unloading card at base=%x\n",devc->base));
-+ printk("ad1816: Unloading card at address 0x%03x\n",devc->base);
-
- dev = devc->dev_no;
- mixer = audio_devs[dev]->mixer_dev;
-@@ -1221,45 +1181,41 @@ static void __exit unload_card(ad1816_in
- if(mixer>=0) {
- sound_unload_mixerdev(mixer);
- }
-+ /* unreg audiodev */
- sound_unload_audiodev(dev);
-
- /* free dma channels */
-- if (devc->dma_capture>=0) {
-+ if (devc->dma_capture>=0 &&
-+ devc->dma_capture != devc->dma_playback) {
- sound_free_dma(devc->dma_capture);
- }
--
-- /* card won't get added if resources could not be allocated
-- thus we need not ckeck if allocation was successful */
- sound_free_dma (devc->dma_playback);
-- free_irq(devc->irq, devc->osp);
-+ /* free irq */
-+ free_irq(devc->irq, devc);
-+ /* free io */
- release_region (devc->base, 16);
--
-- DEBUGLOG (printk("ad1816: Unloading card at base=%x was successful\n",devc->base));
-+#ifdef __ISAPNP__
-+ if (devc->pnpdev) {
-+ pnp_disable_dev(devc->pnpdev);
-+ pnp_device_detach(devc->pnpdev);
-+ }
-+#endif
-
- } else
- printk(KERN_WARNING "ad1816: no device/card specified\n");
- }
-
--static struct address_info cfg;
--
- static int __initdata io = -1;
- static int __initdata irq = -1;
- static int __initdata dma = -1;
- static int __initdata dma2 = -1;
-
- #ifdef __ISAPNP__
--struct pci_dev *ad1816_dev = NULL;
--
--static int activated = 1;
--
-+/* use isapnp for configuration */
- static int isapnp = 1;
- static int isapnpjump = 0;
--
- MODULE_PARM(isapnp, "i");
- MODULE_PARM(isapnpjump, "i");
--
--#else
--static int isapnp = 0;
- #endif
-
- MODULE_PARM(io,"i");
-@@ -1270,51 +1226,6 @@ MODULE_PARM(ad1816_clockfreq,"i");
- MODULE_PARM(options,"i");
-
- #ifdef __ISAPNP__
--
--static struct pci_dev *activate_dev(char *devname, char *resname, struct pci_dev *dev)
--{
-- int err;
--
-- if(dev->active) {
-- activated = 0;
-- return(dev);
-- }
--
-- if((err = dev->activate(dev)) < 0) {
-- printk(KERN_ERR "ad1816: %s %s config failed (out of resources?)[%d]\n",
-- devname, resname, err);
-- dev->deactivate(dev);
-- return(NULL);
-- }
--
-- return(dev);
--}
--
--static struct pci_dev *ad1816_init_generic(struct pci_bus *bus, struct pci_dev *card,
-- struct address_info *hw_config)
--{
-- if((ad1816_dev = isapnp_find_dev(bus, card->vendor, card->device, NULL))) {
-- ad1816_dev->prepare(ad1816_dev);
--
-- if((ad1816_dev = activate_dev("Analog Devices 1816(A)", "ad1816", ad1816_dev))) {
-- hw_config->io_base = ad1816_dev->resource[2].start;
-- hw_config->irq = ad1816_dev->irq_resource[0].start;
-- hw_config->dma = ad1816_dev->dma_resource[0].start;
-- hw_config->dma2 = ad1816_dev->dma_resource[1].start;
-- }
-- }
--
-- return(ad1816_dev);
--}
--
--static struct ad1816_data {
-- struct pci_dev * (*initfunc)(struct pci_bus*, struct pci_dev *, struct address_info *);
-- char *name;
--} ad1816_pnp_data[] __initdata = {
-- { &ad1816_init_generic, "Analog Devices 1815" },
-- { &ad1816_init_generic, "Analog Devices 1816A" }
--};
--
- static struct {
- unsigned short card_vendor, card_device;
- unsigned short vendor;
-@@ -1323,107 +1234,101 @@ static struct {
- } isapnp_ad1816_list[] __initdata = {
- { ISAPNP_ANY_ID, ISAPNP_ANY_ID,
- ISAPNP_VENDOR('A','D','S'), ISAPNP_FUNCTION(0x7150),
-- &ad1816_pnp_data[0] },
-+ 0 },
- { ISAPNP_ANY_ID, ISAPNP_ANY_ID,
- ISAPNP_VENDOR('A','D','S'), ISAPNP_FUNCTION(0x7180),
-- &ad1816_pnp_data[1] },
-+ 0 },
- {0}
- };
-
- MODULE_DEVICE_TABLE(isapnp, isapnp_ad1816_list);
-
--static int __init ad1816_init_isapnp(struct address_info *hw_config,
-- struct pci_bus *bus, struct pci_dev *card, int slot)
-+
-+void __init ad1816_config_pnp_card(struct pnp_card *card, unsigned short vendor,
-+ unsigned short function)
- {
-- struct pci_dev *idev = NULL;
--
-- /* You missed the init func? That's bad. */
-- if(isapnp_ad1816_list[slot].data->initfunc) {
-- char *busname = bus->name[0] ? bus->name : isapnp_ad1816_list[slot].data->name;
--
-- printk(KERN_INFO "ad1816: %s detected\n", busname);
--
-- /* Initialize this baby. */
-- if((idev = isapnp_ad1816_list[slot].data->initfunc(bus, card, hw_config))) {
-- /* We got it. */
--
-- printk(KERN_NOTICE "ad1816: ISAPnP reports '%s' at i/o %#x, irq %d, dma %d, %d\n",
-- busname,
-- hw_config->io_base, hw_config->irq, hw_config->dma,
-- hw_config->dma2);
-- return 1;
-- } else
-- printk(KERN_INFO "ad1816: Failed to initialize %s\n", busname);
-- } else
-- printk(KERN_ERR "ad1816: Bad entry in ad1816.c PnP table\n");
--
-- return 0;
-+ struct address_info cfg;
-+ struct pnp_dev *card_dev = pnp_find_dev(card, vendor, function, NULL);
-+ if (!card_dev) return;
-+ if (pnp_device_attach(card_dev) < 0) {
-+ printk(KERN_WARNING "ad1816: Failed to attach PnP device\n");
-+ return;
-+ }
-+ if (pnp_activate_dev(card_dev) < 0) {
-+ printk(KERN_WARNING "ad1816: Failed to activate PnP device\n");
-+ pnp_device_detach(card_dev);
-+ return;
-+ }
-+ cfg.io_base = pnp_port_start(card_dev, 2);
-+ cfg.irq = pnp_irq(card_dev, 0);
-+ cfg.dma = pnp_irq(card_dev, 0);
-+ cfg.dma2 = pnp_irq(card_dev, 1);
-+ if (!ad1816_init_card(&cfg, card_dev)) {
-+ pnp_disable_dev(card_dev);
-+ pnp_device_detach(card_dev);
-+ }
- }
-
--/*
-- * Actually this routine will detect and configure only the first card with successful
-- * initialization. isapnpjump could be used to jump to a specific entry.
-- * Please always add entries at the end of the array.
-- * Should this be fixed? - azummo
-- */
--
--int __init ad1816_probe_isapnp(struct address_info *hw_config)
-+void __init ad1816_config_pnp_cards(void)
- {
-+ int nr_pnp_cfg;
- int i;
-
- /* Count entries in isapnp_ad1816_list */
-- for (i = 0; isapnp_ad1816_list[i].vendor != 0; i++)
-- ;
-+ for (nr_pnp_cfg = 0; isapnp_ad1816_list[nr_pnp_cfg].card_vendor != 0;
-+ nr_pnp_cfg++);
- /* Check and adjust isapnpjump */
-- if( isapnpjump < 0 || isapnpjump > ( i - 1 ) ) {
-- printk(KERN_ERR "ad1816: Valid range for isapnpjump is 0-%d. Adjusted to 0.\n", i-1);
-+ if( isapnpjump < 0 || isapnpjump >= nr_pnp_cfg) {
-+ printk(KERN_WARNING
-+ "ad1816: Valid range for isapnpjump is 0-%d. "
-+ "Adjusted to 0.\n", nr_pnp_cfg-1);
- isapnpjump = 0;
- }
--
-- for (i = isapnpjump; isapnp_ad1816_list[i].vendor != 0; i++) {
-- struct pci_dev *card = NULL;
--
-- while ((card = isapnp_find_dev(NULL, isapnp_ad1816_list[i].vendor,
-- isapnp_ad1816_list[i].function, card)))
-- if(ad1816_init_isapnp(hw_config, card->bus, card, i))
-- return 0;
-+ for (i = isapnpjump; isapnp_ad1816_list[i].card_vendor != 0; i++) {
-+ struct pnp_card *card = NULL;
-+ /* iterate over all pnp cards */
-+ while ((card = pnp_find_card(isapnp_ad1816_list[i].card_vendor,
-+ isapnp_ad1816_list[i].card_device, card)))
-+ ad1816_config_pnp_card(card,
-+ isapnp_ad1816_list[i].vendor,
-+ isapnp_ad1816_list[i].function);
- }
--
-- return -ENODEV;
- }
- #endif
-
-+/* module initialization */
- static int __init init_ad1816(void)
- {
--
--#ifdef __ISAPNP__
-- if(isapnp && (ad1816_probe_isapnp(&cfg) < 0) ) {
-- printk(KERN_NOTICE "ad1816: No ISAPnP cards found, trying standard ones...\n");
-- isapnp = 0;
-- }
-+ printk(KERN_INFO "ad1816: AD1816 sounddriver "
-+ "Copyright (C) 1998-2003 by Thorsten Knabe and "
-+ "others\n");
-+#ifdef AD1816_CLOCK
-+ /* set ad1816_clockfreq if set during compilation */
-+ ad1816_clockfreq=AD1816_CLOCK;
- #endif
--
-- if( isapnp == 0) {
-- cfg.io_base = io;
-- cfg.irq = irq;
-- cfg.dma = dma;
-- cfg.dma2 = dma2;
-- }
--
-- if (cfg.io_base == -1 || cfg.irq == -1 || cfg.dma == -1 || cfg.dma2 == -1) {
-- printk(KERN_INFO "ad1816: dma, dma2, irq and io must be set.\n");
-- return -EINVAL;
-+ if (ad1816_clockfreq<5000 || ad1816_clockfreq>100000) {
-+ ad1816_clockfreq=33000;
- }
-
-- if (probe_ad1816(&cfg) == 0) {
-- return -ENODEV;
-+#ifdef __ISAPNP__
-+ /* configure PnP cards */
-+ if(isapnp) ad1816_config_pnp_cards();
-+#endif
-+ /* configure card by module params */
-+ if (io != -1 && irq != -1 && dma != -1) {
-+ struct address_info cfg;
-+ cfg.io_base = io;
-+ cfg.irq = irq;
-+ cfg.dma = dma;
-+ cfg.dma2 = dma2;
-+ ad1816_init_card(&cfg, NULL);
- }
--
-- attach_ad1816(&cfg);
--
-+ if (nr_ad1816_devs <= 0)
-+ return -ENODEV;
- return 0;
- }
-
-+/* module cleanup */
- static void __exit cleanup_ad1816 (void)
- {
- int i;
-@@ -1435,18 +1340,14 @@ static void __exit cleanup_ad1816 (void)
- unload_card(devc);
- }
- nr_ad1816_devs=0;
--
--#ifdef __ISAPNP__
-- if(activated)
-- if(ad1816_dev)
-- ad1816_dev->deactivate(ad1816_dev);
--#endif
-+ printk(KERN_INFO "ad1816: driver unloaded!\n");
- }
-
- module_init(init_ad1816);
- module_exit(cleanup_ad1816);
-
- #ifndef MODULE
-+/* kernel command line parameter evaluation */
- static int __init setup_ad1816(char *str)
- {
- /* io, irq, dma, dma2 */
-@@ -1458,7 +1359,6 @@ static int __init setup_ad1816(char *str
- irq = ints[2];
- dma = ints[3];
- dma2 = ints[4];
--
- return 1;
- }
-
---- linux-2.6.0-test1/sound/oss/ad1889.c 2003-07-13 21:44:35.000000000 -0700
-+++ 25/sound/oss/ad1889.c 2003-07-19 17:03:51.000000000 -0700
-@@ -245,7 +245,6 @@ static ad1889_dev_t *ad1889_alloc_dev(st
- dmabuf->ready = 0;
- dmabuf->rate = 44100;
- }
--out:
- return dev;
-
- err_free_dmabuf:
---- linux-2.6.0-test1/sound/oss/btaudio.c 2003-07-13 21:44:35.000000000 -0700
-+++ 25/sound/oss/btaudio.c 2003-07-19 17:03:51.000000000 -0700
-@@ -328,8 +328,8 @@ static int btaudio_mixer_ioctl(struct in
- if (cmd == SOUND_MIXER_INFO) {
- mixer_info info;
- memset(&info,0,sizeof(info));
-- strncpy(info.id,"bt878",sizeof(info.id));
-- strncpy(info.name,"Brooktree Bt878 audio",sizeof(info.name));
-+ strlcpy(info.id,"bt878",sizeof(info.id));
-+ strlcpy(info.name,"Brooktree Bt878 audio",sizeof(info.name));
- info.modify_counter = bta->mixcount;
- if (copy_to_user((void *)arg, &info, sizeof(info)))
- return -EFAULT;
-@@ -338,8 +338,8 @@ static int btaudio_mixer_ioctl(struct in
- if (cmd == SOUND_OLD_MIXER_INFO) {
- _old_mixer_info info;
- memset(&info,0,sizeof(info));
-- strncpy(info.id,"bt878",sizeof(info.id)-1);
-- strncpy(info.name,"Brooktree Bt878 audio",sizeof(info.name));
-+ strlcpy(info.id,"bt878",sizeof(info.id)-1);
-+ strlcpy(info.name,"Brooktree Bt878 audio",sizeof(info.name));
- if (copy_to_user((void *)arg, &info, sizeof(info)))
- return -EFAULT;
- return 0;
---- linux-2.6.0-test1/sound/oss/dmasound/dmasound_core.c 2003-07-13 21:44:35.000000000 -0700
-+++ 25/sound/oss/dmasound/dmasound_core.c 2003-07-19 17:03:51.000000000 -0700
-@@ -1660,13 +1660,13 @@ static int __init dmasound_setup(char *s
- #ifdef HAS_RECORD
- case 5:
- if ((ints[5] < 0) || (ints[5] > MAX_CATCH_RADIUS))
-- printk("dmasound_setup: illegal catch radius, using default = %d\n", catchRadius);
-+ printk("dmasound_setup: invalid catch radius, using default = %d\n", catchRadius);
- else
- catchRadius = ints[5];
- /* fall through */
- case 4:
- if (ints[4] < MIN_BUFFERS)
-- printk("dmasound_setup: illegal number of read buffers, using default = %d\n",
-+ printk("dmasound_setup: invalid number of read buffers, using default = %d\n",
- numReadBufs);
- else
- numReadBufs = ints[4];
-@@ -1675,21 +1675,21 @@ static int __init dmasound_setup(char *s
- if ((size = ints[3]) < 256) /* check for small buffer specs */
- size <<= 10 ;
- if (size < MIN_BUFSIZE || size > MAX_BUFSIZE)
-- printk("dmasound_setup: illegal read buffer size, using default = %d\n", readBufSize);
-+ printk("dmasound_setup: invalid read buffer size, using default = %d\n", readBufSize);
- else
- readBufSize = size;
- /* fall through */
- #else
- case 3:
- if ((ints[3] < 0) || (ints[3] > MAX_CATCH_RADIUS))
-- printk("dmasound_setup: illegal catch radius, using default = %d\n", catchRadius);
-+ printk("dmasound_setup: invalid catch radius, using default = %d\n", catchRadius);
- else
- catchRadius = ints[3];
- /* fall through */
- #endif
- case 2:
- if (ints[1] < MIN_BUFFERS)
-- printk("dmasound_setup: illegal number of buffers, using default = %d\n", numWriteBufs);
-+ printk("dmasound_setup: invalid number of buffers, using default = %d\n", numWriteBufs);
- else
- numWriteBufs = ints[1];
- /* fall through */
-@@ -1697,13 +1697,13 @@ static int __init dmasound_setup(char *s
- if ((size = ints[2]) < 256) /* check for small buffer specs */
- size <<= 10 ;
- if (size < MIN_BUFSIZE || size > MAX_BUFSIZE)
-- printk("dmasound_setup: illegal write buffer size, using default = %d\n", writeBufSize);
-+ printk("dmasound_setup: invalid write buffer size, using default = %d\n", writeBufSize);
- else
- writeBufSize = size;
- case 0:
- break;
- default:
-- printk("dmasound_setup: illegal number of arguments\n");
-+ printk("dmasound_setup: invalid number of arguments\n");
- return 0;
- }
- return 1;
---- linux-2.6.0-test1/sound/oss/emu10k1/8010.h 2003-06-14 12:17:56.000000000 -0700
-+++ 25/sound/oss/emu10k1/8010.h 2003-07-19 17:03:51.000000000 -0700
-@@ -1,7 +1,7 @@
- /*
- **********************************************************************
- * 8010.h
-- * Copyright 1999, 2000 Creative Labs, Inc.
-+ * Copyright 1999-2001 Creative Labs, Inc.
- *
- **********************************************************************
- *
-@@ -11,6 +11,8 @@
- * November 2, 1999 Alan Cox Cleaned of 8bit chars, DOS
- * line endings
- * December 8, 1999 Jon Taylor Added lots of new register info
-+ * May 16, 2001 Daniel Bertrand Added unofficial DBG register info
-+ * Oct-Nov 2001 D.B. Added unofficial Audigy registers
- *
- **********************************************************************
- *
-@@ -39,6 +41,14 @@
-
- #include <linux/types.h>
-
-+// Driver version:
-+#define MAJOR_VER 0
-+#define MINOR_VER 20
-+#define DRIVER_VERSION "0.20a"
-+
-+
-+// Audigy specify registers are prefixed with 'A_'
-+
- /************************************************************************************************/
- /* PCI function 0 registers, address = <val> + PCIBASE0 */
- /************************************************************************************************/
-@@ -57,6 +67,11 @@
- #define IPR 0x08 /* Global interrupt pending register */
- /* Clear pending interrupts by writing a 1 to */
- /* the relevant bits and zero to the other bits */
-+
-+/* The next two interrupts are for the midi port on the Audigy Drive (A_MPU1) */
-+#define A_IPR_MIDITRANSBUFEMPTY2 0x10000000 /* MIDI UART transmit buffer empty */
-+#define A_IPR_MIDIRECVBUFEMPTY2 0x08000000 /* MIDI UART receive buffer empty */
-+
- #define IPR_SAMPLERATETRACKER 0x01000000 /* Sample rate tracker lock status change */
- #define IPR_FXDSP 0x00800000 /* Enable FX DSP interrupts */
- #define IPR_FORCEINT 0x00400000 /* Force Sound Blaster interrupt */
-@@ -81,6 +96,10 @@
- /* IP is written with CL set, the bit in CLIPL */
- /* or CLIPH corresponding to the CIN value */
- /* written will be cleared. */
-+#define A_IPR_MIDITRANSBUFEMPTY1 IPR_MIDITRANSBUFEMPTY /* MIDI UART transmit buffer empty */
-+#define A_IPR_MIDIRECVBUFEMPTY1 IPR_MIDIRECVBUFEMPTY /* MIDI UART receive buffer empty */
-+
-+
-
- #define INTE 0x0c /* Interrupt enable register */
- #define INTE_VIRTUALSB_MASK 0xc0000000 /* Virtual Soundblaster I/O port capture */
-@@ -108,6 +127,11 @@
- /* behavior and possibly random segfaults and */
- /* lockups if enabled. */
-
-+/* The next two interrupts are for the midi port on the Audigy Drive (A_MPU1) */
-+#define A_INTE_MIDITXENABLE2 0x00020000 /* Enable MIDI transmit-buffer-empty interrupts */
-+#define A_INTE_MIDIRXENABLE2 0x00010000 /* Enable MIDI receive-buffer-empty interrupts */
-+
-+
- #define INTE_SAMPLERATETRACKER 0x00002000 /* Enable sample rate tracker interrupts */
- /* NOTE: This bit must always be enabled */
- #define INTE_FXDSPENABLE 0x00001000 /* Enable FX DSP interrupts */
-@@ -124,6 +148,10 @@
- #define INTE_MIDITXENABLE 0x00000002 /* Enable MIDI transmit-buffer-empty interrupts */
- #define INTE_MIDIRXENABLE 0x00000001 /* Enable MIDI receive-buffer-empty interrupts */
-
-+/* The next two interrupts are for the midi port on the Audigy (A_MPU2) */
-+#define A_INTE_MIDITXENABLE1 INTE_MIDITXENABLE
-+#define A_INTE_MIDIRXENABLE1 INTE_MIDIRXENABLE
-+
- #define WC 0x10 /* Wall Clock register */
- #define WC_SAMPLECOUNTER_MASK 0x03FFFFC0 /* Sample periods elapsed since reset */
- #define WC_SAMPLECOUNTER 0x14060010
-@@ -186,6 +214,8 @@
- /* Should be set to 1 when the EMU10K1 is */
- /* completely initialized. */
-
-+//For Audigy, MPU port move to 0x70-0x74 ptr register
-+
- #define MUDATA 0x18 /* MPU401 data register (8 bits) */
-
- #define MUCMD 0x19 /* MPU401 command register (8 bits) */
-@@ -197,13 +227,16 @@
- #define MUSTAT_IRDYN 0x80 /* 0 = MIDI data or command ACK */
- #define MUSTAT_ORDYN 0x40 /* 0 = MUDATA can accept a command or data */
-
--#define TIMER 0x1a /* Timer terminal count register */
-+#define A_IOCFG 0x18 /* GPIO on Audigy card (16bits) */
-+#define A_GPINPUT_MASK 0xff00
-+#define A_GPOUTPUT_MASK 0x00ff
-+
-+#define TIMER 0x1a /* Timer terminal count register (16-bit) */
- /* NOTE: After the rate is changed, a maximum */
- /* of 1024 sample periods should be allowed */
- /* before the new rate is guaranteed accurate. */
--#define TIMER_RATE_MASK 0x000003ff /* Timer interrupt rate in sample periods */
-+#define TIMER_RATE_MASK 0x03ff /* Timer interrupt rate in sample periods */
- /* 0 == 1024 periods, [1..4] are not useful */
--#define TIMER_RATE 0x0a00001a
-
- #define AC97DATA 0x1c /* AC97 register set data register (16 bit) */
-
-@@ -386,6 +419,8 @@
- #define TREMFRQ 0x1c /* Tremolo amount and modulation LFO frequency register */
- #define TREMFRQ_DEPTH 0x0000ff00 /* Tremolo depth */
- /* Signed 2's complement, with +/- 12dB extremes */
-+#define TREMFRQ_FREQUENCY 0x000000ff /* Tremolo LFO frequency */
-+ /* ??Hz steps, maximum of ?? Hz. */
-
- #define FM2FRQ2 0x1d /* Vibrato amount and vibrato LFO frequency register */
- #define FM2FRQ2_DEPTH 0x0000ff00 /* Vibrato LFO vibrato depth */
-@@ -426,7 +461,12 @@
- #define ADCCR_LCHANENABLE 0x00000008 /* Enables left channel for writing to the host */
- /* NOTE: To guarantee phase coherency, both channels */
- /* must be disabled prior to enabling both channels. */
-+#define A_ADCCR_RCHANENABLE 0x00000020
-+#define A_ADCCR_LCHANENABLE 0x00000010
-+
-+#define A_ADCCR_SAMPLERATE_MASK 0x0000000F /* Audigy sample rate convertor output rate */
- #define ADCCR_SAMPLERATE_MASK 0x00000007 /* Sample rate convertor output rate */
-+
- #define ADCCR_SAMPLERATE_48 0x00000000 /* 48kHz sample rate */
- #define ADCCR_SAMPLERATE_44 0x00000001 /* 44.1kHz sample rate */
- #define ADCCR_SAMPLERATE_32 0x00000002 /* 32kHz sample rate */
-@@ -436,10 +476,16 @@
- #define ADCCR_SAMPLERATE_11 0x00000006 /* 11.025kHz sample rate */
- #define ADCCR_SAMPLERATE_8 0x00000007 /* 8kHz sample rate */
-
-+#define A_ADCCR_SAMPLERATE_12 0x00000006 /* 12kHz sample rate */
-+#define A_ADCCR_SAMPLERATE_11 0x00000007 /* 11.025kHz sample rate */
-+#define A_ADCCR_SAMPLERATE_8 0x00000008 /* 8kHz sample rate */
-+
- #define FXWC 0x43 /* FX output write channels register */
- /* When set, each bit enables the writing of the */
-- /* corresponding FX output channel into host memory */
--
-+ /* corresponding FX output channel (internal registers */
-+ /* 0x20-0x3f) into host memory. This mode of recording */
-+ /* is 16bit, 48KHz only. All 32 channels can be enabled */
-+ /* simultaneously. */
- #define TCBS 0x44 /* Tank cache buffer size register */
- #define TCBS_MASK 0x00000007 /* Tank cache buffer size field */
- #define TCBS_BUFFSIZE_16K 0x00000000
-@@ -519,6 +565,13 @@
-
- #define REG53 0x53 /* DO NOT PROGRAM THIS REGISTER!!! MAY DESTROY CHIP */
-
-+#define A_DBG 0x53
-+#define A_DBG_SINGLE_STEP 0x00020000 /* Set to zero to start dsp */
-+#define A_DBG_ZC 0x40000000 /* zero tram counter */
-+#define A_DBG_STEP_ADDR 0x000003ff
-+#define A_DBG_SATURATION_OCCURED 0x20000000
-+#define A_DBG_SATURATION_ADDR 0x0ffc0000
-+
- #define SPCS0 0x54 /* SPDIF output Channel Status 0 register */
-
- #define SPCS1 0x55 /* SPDIF output Channel Status 1 register */
-@@ -582,10 +635,19 @@
- #define SRCS_RATELOCKED 0x01000000 /* Sample rate locked */
- #define SRCS_ESTSAMPLERATE 0x0007ffff /* Do not modify this field. */
-
-+
-+/* Note that these values can vary +/- by a small amount */
-+#define SRCS_SPDIFRATE_44 0x0003acd9
-+#define SRCS_SPDIFRATE_48 0x00040000
-+#define SRCS_SPDIFRATE_96 0x00080000
-+
- #define MICIDX 0x63 /* Microphone recording buffer index register */
- #define MICIDX_MASK 0x0000ffff /* 16-bit value */
- #define MICIDX_IDX 0x10000063
-
-+#define A_ADCIDX 0x63
-+#define A_ADCIDX_IDX 0x10000063
-+
- #define ADCIDX 0x64 /* ADC recording buffer index register */
- #define ADCIDX_MASK 0x0000ffff /* 16 bit index field */
- #define ADCIDX_IDX 0x10000064
-@@ -594,9 +656,50 @@
- #define FXIDX_MASK 0x0000ffff /* 16-bit value */
- #define FXIDX_IDX 0x10000065
-
-+/* This is the MPU port on the card (via the game port) */
-+#define A_MUDATA1 0x70
-+#define A_MUCMD1 0x71
-+#define A_MUSTAT1 A_MUCMD1
-+
-+/* This is the MPU port on the Audigy Drive */
-+#define A_MUDATA2 0x72
-+#define A_MUCMD2 0x73
-+#define A_MUSTAT2 A_MUCMD2
-+
-+/* The next two are the Audigy equivalent of FXWC */
-+/* the Audigy can record any output (16bit, 48kHz, up to 64 channel simultaneously) */
-+/* Each bit selects a channel for recording */
-+#define A_FXWC1 0x74 /* Selects 0x7f-0x60 for FX recording */
-+#define A_FXWC2 0x75 /* Selects 0x9f-0x80 for FX recording */
-+
-+#define A_SPDIF_SAMPLERATE 0x76 /* Set the sample rate of SPDIF output */
-+#define A_SPDIF_48000 0x00000080
-+#define A_SPDIF_44100 0x00000000
-+#define A_SPDIF_96000 0x00000040
-+
-+#define A_FXRT2 0x7c
-+#define A_FXRT_CHANNELE 0x0000003f /* Effects send bus number for channel's effects send E */
-+#define A_FXRT_CHANNELF 0x00003f00 /* Effects send bus number for channel's effects send F */
-+#define A_FXRT_CHANNELG 0x003f0000 /* Effects send bus number for channel's effects send G */
-+#define A_FXRT_CHANNELH 0x3f000000 /* Effects send bus number for channel's effects send H */
-+
-+#define A_SENDAMOUNTS 0x7d
-+#define A_FXSENDAMOUNT_E_MASK 0xff000000
-+#define A_FXSENDAMOUNT_F_MASK 0x00ff0000
-+#define A_FXSENDAMOUNT_G_MASK 0x0000ff00
-+#define A_FXSENDAMOUNT_H_MASK 0x000000ff
-+
-+/* The send amounts for this one are the same as used with the emu10k1 */
-+#define A_FXRT1 0x7e
-+#define A_FXRT_CHANNELA 0x0000003f
-+#define A_FXRT_CHANNELB 0x00003f00
-+#define A_FXRT_CHANNELC 0x003f0000
-+#define A_FXRT_CHANNELD 0x3f000000
-+
-+
- /* Each FX general purpose register is 32 bits in length, all bits are used */
- #define FXGPREGBASE 0x100 /* FX general purpose registers base */
--
-+#define A_FXGPREGBASE 0x400 /* Audigy GPRs, 0x400 to 0x5ff */
- /* Tank audio data is logarithmically compressed down to 16 bits before writing to TRAM and is */
- /* decompressed back to 20 bits on a read. There are a total of 160 locations, the last 32 */
- /* locations are for external TRAM. */
-@@ -621,4 +724,14 @@
- #define HIWORD_RESULT_MASK 0x000ffc00 /* Instruction result */
- #define HIWORD_OPA_MASK 0x000003ff /* Instruction operand A */
-
-+
-+/* Audigy Soundcard have a different instruction format */
-+#define AUDIGY_CODEBASE 0x600
-+#define A_LOWORD_OPY_MASK 0x000007ff
-+#define A_LOWORD_OPX_MASK 0x007ff000
-+#define A_HIWORD_OPCODE_MASK 0x0f000000
-+#define A_HIWORD_RESULT_MASK 0x007ff000
-+#define A_HIWORD_OPA_MASK 0x000007ff
-+
-+
- #endif /* _8010_H */
---- linux-2.6.0-test1/sound/oss/emu10k1/audio.c 2003-06-14 12:17:57.000000000 -0700
-+++ 25/sound/oss/emu10k1/audio.c 2003-07-19 17:03:51.000000000 -0700
-@@ -158,8 +158,8 @@ static ssize_t emu10k1_audio_write(struc
- spin_unlock_irqrestore(&woinst->lock, flags);
- return -ENXIO;
- }
--
-- if (woinst->format.passthrough) {
-+ // This is for emu10k1 revs less than 7, we need to go through tram
-+ if (woinst->format.passthrough == 1) {
- int r;
-
- woinst->buffer.ossfragshift = PT_BLOCKSIZE_LOG2;
-@@ -350,8 +350,9 @@ static int emu10k1_audio_ioctl(struct in
-
- case SNDCTL_DSP_GETCAPS:
- DPF(2, "SNDCTL_DSP_GETCAPS:\n");
-- return put_user(DSP_CAP_DUPLEX | DSP_CAP_REALTIME | DSP_CAP_TRIGGER | DSP_CAP_MMAP | DSP_CAP_COPROC, (int *) arg);
--
-+ return put_user(DSP_CAP_DUPLEX | DSP_CAP_REALTIME |
-+ DSP_CAP_TRIGGER | DSP_CAP_MMAP |
-+ DSP_CAP_COPROC| DSP_CAP_MULTI, (int *) arg);
- case SNDCTL_DSP_SPEED:
- DPF(2, "SNDCTL_DSP_SPEED:\n");
-
-@@ -528,8 +529,8 @@ static int emu10k1_audio_ioctl(struct in
- else if (file->f_mode & FMODE_WRITE) {
- val = AFMT_S16_LE | AFMT_U8;
- if (emu10k1_find_control_gpr(&wave_dev->card->mgr,
-- wave_dev->card->pt.patch_name,
-- wave_dev->card->pt.enable_gpr_name) >= 0)
-+ wave_dev->card->pt.patch_name,
-+ wave_dev->card->pt.enable_gpr_name) >= 0)
- val |= AFMT_AC3;
- }
- return put_user(val, (int *) arg);
-@@ -789,7 +790,7 @@ static int emu10k1_audio_ioctl(struct in
- cinfo.blocks = 0;
- }
-
-- if(wiinst->mmapped)
-+ if (wiinst->mmapped)
- wiinst->buffer.bytestocopy %= wiinst->buffer.fragment_size;
-
- spin_unlock_irqrestore(&wiinst->lock, flags);
-@@ -811,15 +812,17 @@ static int emu10k1_audio_ioctl(struct in
- spin_lock_irqsave(&woinst->lock, flags);
-
- if (woinst->state & WAVE_STATE_OPEN ||
-- (woinst->format.passthrough && wave_dev->card->pt.state)) {
-+ ((woinst->format.passthrough == 1) && wave_dev->card->pt.state)) {
- int num_fragments;
-- if (woinst->format.passthrough) {
-+
-+ if (woinst->format.passthrough == 1) {
- emu10k1_pt_waveout_update(wave_dev);
- cinfo.bytes = woinst->total_played;
- } else {
- emu10k1_waveout_update(woinst);
- cinfo.bytes = woinst->total_played;
- }
-+
- cinfo.ptr = woinst->buffer.hw_pos;
- num_fragments = cinfo.bytes / woinst->buffer.fragment_size;
- cinfo.blocks = num_fragments - woinst->blocks;
-@@ -899,7 +902,7 @@ static int emu10k1_audio_ioctl(struct in
-
- if (file->f_mode & FMODE_WRITE) {
- /* digital pass-through fragment count and size are fixed values */
-- if (woinst->state & WAVE_STATE_OPEN || woinst->format.passthrough)
-+ if (woinst->state & WAVE_STATE_OPEN || (woinst->format.passthrough == 1))
- return -EINVAL; /* too late to change */
-
- woinst->buffer.ossfragshift = val & 0xffff;
-@@ -936,19 +939,35 @@ static int emu10k1_audio_ioctl(struct in
- kfree (buf);
- return -EINVAL;
- }
-+
-+ if (buf->command == CMD_WRITE) {
-+
- #ifdef DBGEMU
-- if ( (buf->offs < 0) || (buf->offs + buf->len > 0x800) || (buf->len > 1000)) {
-+ if ((buf->offs < 0) || (buf->offs + buf->len > 0xe00) || (buf->len > 1000)) {
- #else
-- if ( ((buf->offs < 0x100 ) || (buf->offs + buf->len > 0x800) || (buf->len > 1000))
-- && !( ( buf->offs == DBG) && (buf->len ==1) )){
--#endif
-- kfree(buf);
-- return -EINVAL;
-- }
-+ if (((buf->offs < 0x100) || (buf->offs + buf->len > (wave_dev->card->is_audigy ? 0xe00 : 0x800)) || (buf->len > 1000)
-+ ) && !(
-+ //any register allowed raw access to users goes here:
-+ (buf->offs == DBG ||
-+ buf->offs == A_DBG)
-+ && (buf->len == 1))) {
-+#endif
-+ kfree(buf);
-+ return -EINVAL;
-+ }
-+ } else {
-+ if ((buf->offs < 0) || (buf->offs + buf->len > 0xe00) || (buf->len > 1000)) {
-+ kfree(buf);
-+ return -EINVAL;
-+ }
-+ }
-+
-+ if (((unsigned)buf->flags) > 0x3f)
-+ buf->flags = 0;
-
- if (buf->command == CMD_READ) {
- for (i = 0; i < buf->len; i++)
-- ((u32 *) buf->data)[i] = sblive_readptr(wave_dev->card, buf->offs + i, 0);
-+ ((u32 *) buf->data)[i] = sblive_readptr(wave_dev->card, buf->offs + i, buf->flags);
-
- if (copy_to_user((copr_buffer *) arg, buf, sizeof(copr_buffer))) {
- kfree(buf);
-@@ -956,7 +975,7 @@ static int emu10k1_audio_ioctl(struct in
- }
- } else {
- for (i = 0; i < buf->len; i++)
-- sblive_writeptr(wave_dev->card, buf->offs + i, 0, ((u32 *) buf->data)[i]);
-+ sblive_writeptr(wave_dev->card, buf->offs + i, buf->flags, ((u32 *) buf->data)[i]);
- }
-
- kfree (buf);
-@@ -1244,8 +1263,9 @@ static int emu10k1_audio_release(struct
- struct woinst *woinst = wave_dev->woinst;
-
- spin_lock_irqsave(&woinst->lock, flags);
--
-- if (woinst->format.passthrough && card->pt.state != PT_STATE_INACTIVE) {
-+ if(woinst->format.passthrough==2)
-+ card->pt.state=PT_STATE_PLAYING;
-+ if (woinst->format.passthrough && card->pt.state != PT_STATE_INACTIVE){
- spin_lock(&card->pt.lock);
- emu10k1_pt_stop(card);
- spin_unlock(&card->pt.lock);
---- linux-2.6.0-test1/sound/oss/emu10k1/cardmi.c 2003-06-14 12:18:22.000000000 -0700
-+++ 25/sound/oss/emu10k1/cardmi.c 2003-07-19 17:03:51.000000000 -0700
-@@ -113,7 +113,7 @@ int emu10k1_mpuin_close(struct emu10k1_c
- }
-
- /* Disable RX interrupt */
-- emu10k1_irq_disable(card, INTE_MIDIRXENABLE);
-+ emu10k1_irq_disable(card, card->is_audigy ? A_INTE_MIDIRXENABLE : INTE_MIDIRXENABLE);
-
- emu10k1_mpu_release(card);
-
-@@ -189,7 +189,7 @@ int emu10k1_mpuin_start(struct emu10k1_c
- card_mpuin->qhead = 0;
- card_mpuin->qtail = 0;
-
-- emu10k1_irq_enable(card, INTE_MIDIRXENABLE);
-+ emu10k1_irq_enable(card, card->is_audigy ? A_INTE_MIDIRXENABLE : INTE_MIDIRXENABLE);
- }
-
- return 0;
-@@ -207,7 +207,7 @@ int emu10k1_mpuin_stop(struct emu10k1_ca
-
- DPF(2, "emu10k1_mpuin_stop()\n");
-
-- emu10k1_irq_disable(card, INTE_MIDIRXENABLE);
-+ emu10k1_irq_disable(card, card->is_audigy ? A_INTE_MIDIRXENABLE : INTE_MIDIRXENABLE);
-
- card_mpuin->status &= ~FLAGS_MIDM_STARTED; /* clear */
-
-@@ -246,7 +246,7 @@ int emu10k1_mpuin_reset(struct emu10k1_c
-
- DPF(2, "emu10k1_mpuin_reset()\n");
-
-- emu10k1_irq_disable(card, INTE_MIDIRXENABLE);
-+ emu10k1_irq_disable(card, card->is_audigy ? A_INTE_MIDIRXENABLE : INTE_MIDIRXENABLE);
-
- while (card_mpuin->firstmidiq) {
- midiq = card_mpuin->firstmidiq;
---- linux-2.6.0-test1/sound/oss/emu10k1/cardmo.c 2003-06-14 12:17:58.000000000 -0700
-+++ 25/sound/oss/emu10k1/cardmo.c 2003-07-19 17:03:51.000000000 -0700
-@@ -72,7 +72,7 @@ int emu10k1_mpuout_close(struct emu10k1_
-
- DPF(2, "emu10k1_mpuout_close()\n");
-
-- emu10k1_irq_disable(card, INTE_MIDITXENABLE);
-+ emu10k1_irq_disable(card, card->is_audigy ? A_INTE_MIDITXENABLE : INTE_MIDITXENABLE);
-
- spin_lock_irqsave(&card_mpuout->lock, flags);
-
-@@ -142,7 +142,7 @@ int emu10k1_mpuout_add_buffer(struct emu
-
- card_mpuout->intr = 0;
-
-- emu10k1_irq_enable(card, INTE_MIDITXENABLE);
-+ emu10k1_irq_enable(card, card->is_audigy ? A_INTE_MIDITXENABLE : INTE_MIDITXENABLE);
-
- spin_unlock_irqrestore(&card_mpuout->lock, flags);
-
-@@ -206,7 +206,7 @@ void emu10k1_mpuout_bh(unsigned long ref
-
- if ((card_mpuout->firstmidiq != NULL) || cByteSent) {
- card_mpuout->intr = 0;
-- emu10k1_irq_enable(card, INTE_MIDITXENABLE);
-+ emu10k1_irq_enable(card, card->is_audigy ? A_INTE_MIDITXENABLE : INTE_MIDITXENABLE);
- }
-
- spin_unlock_irqrestore(&card_mpuout->lock, flags);
-@@ -221,7 +221,7 @@ int emu10k1_mpuout_irqhandler(struct emu
- DPF(4, "emu10k1_mpuout_irqhandler\n");
-
- card_mpuout->intr = 1;
-- emu10k1_irq_disable(card, INTE_MIDITXENABLE);
-+ emu10k1_irq_disable(card, card->is_audigy ? A_INTE_MIDITXENABLE : INTE_MIDITXENABLE);
-
- tasklet_hi_schedule(&card_mpuout->tasklet);
-
---- linux-2.6.0-test1/sound/oss/emu10k1/cardwo.c 2003-06-14 12:18:30.000000000 -0700
-+++ 25/sound/oss/emu10k1/cardwo.c 2003-07-19 17:03:51.000000000 -0700
-@@ -85,25 +85,36 @@ static void query_format(struct emu10k1_
- break;
- }
- if (do_passthrough) {
-- i = emu10k1_find_control_gpr(&card->mgr, card->pt.patch_name, card->pt.intr_gpr_name);
-- j = emu10k1_find_control_gpr(&card->mgr, card->pt.patch_name, card->pt.enable_gpr_name);
- /* currently only one waveout instance may use pass-through */
-- if (i < 0 || j < 0 || woinst->state != WAVE_STATE_CLOSED ||
-+ if (woinst->state != WAVE_STATE_CLOSED ||
- card->pt.state != PT_STATE_INACTIVE ||
-- (wave_fmt->samplingrate != 48000 && !is_ac3) ||
- (wave_fmt->samplingrate != 48000 && !is_ac3)) {
- DPF(2, "unable to set pass-through mode\n");
-- } else {
-- wave_fmt->samplingrate = 48000;
-- wave_fmt->channels = 2;
-- wave_fmt->passthrough = 1;
-- card->pt.intr_gpr = i;
-- card->pt.enable_gpr = j;
-- card->pt.state = PT_STATE_INACTIVE;
-- card->pt.pos_gpr = emu10k1_find_control_gpr(&card->mgr, card->pt.patch_name, card->pt.pos_gpr_name);
-- DPD(2, "is_ac3 is %d\n", is_ac3);
-- card->pt.ac3data = is_ac3;
-- wave_fmt->bitsperchannel = 16;
-+ } else if (USE_PT_METHOD1) {
-+ i = emu10k1_find_control_gpr(&card->mgr, card->pt.patch_name, card->pt.intr_gpr_name);
-+ j = emu10k1_find_control_gpr(&card->mgr, card->pt.patch_name, card->pt.enable_gpr_name);
-+ if (i < 0 || j < 0)
-+ DPF(2, "unable to set pass-through mode\n");
-+ else {
-+ wave_fmt->samplingrate = 48000;
-+ wave_fmt->channels = 2;
-+ card->pt.pos_gpr = emu10k1_find_control_gpr(&card->mgr, card->pt.patch_name,
-+ card->pt.pos_gpr_name);
-+ wave_fmt->passthrough = 1;
-+ card->pt.intr_gpr = i;
-+ card->pt.enable_gpr = j;
-+ card->pt.state = PT_STATE_INACTIVE;
-+
-+ DPD(2, "is_ac3 is %d\n", is_ac3);
-+ card->pt.ac3data = is_ac3;
-+ wave_fmt->bitsperchannel = 16;
-+ }
-+ }else{
-+ DPF(2, "Using Passthrough Method 2\n");
-+ card->pt.enable_gpr = emu10k1_find_control_gpr(&card->mgr, card->pt.patch_name,
-+ card->pt.enable_gpr_name);
-+ wave_fmt->passthrough = 2;
-+ wave_fmt->bitsperchannel = 16;
- }
- }
-
-@@ -149,33 +160,37 @@ static int get_voice(struct emu10k1_card
- voice->endloop = voice->startloop + woinst->buffer.size / woinst->format.bytespervoicesample;
- voice->start = voice->startloop;
-
-- if (voice->flags & VOICE_FLAGS_STEREO) {
-- voice->params[0].send_a = card->waveout.send_a[1];
-- voice->params[0].send_b = card->waveout.send_b[1];
-- voice->params[0].send_c = card->waveout.send_c[1];
-- voice->params[0].send_d = card->waveout.send_d[1];
--
-- if (woinst->device)
-- voice->params[0].send_routing = 0x7654;
-- else
-- voice->params[0].send_routing = card->waveout.send_routing[1];
--
-- voice->params[0].volume_target = 0xffff;
-- voice->params[0].initial_fc = 0xff;
-- voice->params[0].initial_attn = 0x00;
-- voice->params[0].byampl_env_sustain = 0x7f;
-- voice->params[0].byampl_env_decay = 0x7f;
--
-- voice->params[1].send_a = card->waveout.send_a[2];
-- voice->params[1].send_b = card->waveout.send_b[2];
-- voice->params[1].send_c = card->waveout.send_c[2];
-- voice->params[1].send_d = card->waveout.send_d[2];
--
-- if (woinst->device)
-- voice->params[1].send_routing = 0x7654;
-- else
-- voice->params[1].send_routing = card->waveout.send_routing[2];
-+
-+ voice->params[0].volume_target = 0xffff;
-+ voice->params[0].initial_fc = 0xff;
-+ voice->params[0].initial_attn = 0x00;
-+ voice->params[0].byampl_env_sustain = 0x7f;
-+ voice->params[0].byampl_env_decay = 0x7f;
-
-+
-+ if (voice->flags & VOICE_FLAGS_STEREO) {
-+ if (woinst->format.passthrough == 2) {
-+ voice->params[0].send_routing = voice->params[1].send_routing = card->waveout.send_routing[ROUTE_PT];
-+ voice->params[0].send_routing2 = voice->params[1].send_routing2 = card->waveout.send_routing2[ROUTE_PT];
-+ voice->params[0].send_dcba = 0xff;
-+ voice->params[1].send_dcba = 0xff00;
-+ voice->params[0].send_hgfe = voice->params[1].send_hgfe=0;
-+ } else {
-+ voice->params[0].send_dcba = card->waveout.send_dcba[SEND_LEFT];
-+ voice->params[0].send_hgfe = card->waveout.send_hgfe[SEND_LEFT];
-+ voice->params[1].send_dcba = card->waveout.send_dcba[SEND_RIGHT];
-+ voice->params[1].send_hgfe = card->waveout.send_hgfe[SEND_RIGHT];
-+
-+ if (woinst->device) {
-+ // /dev/dps1
-+ voice->params[0].send_routing = voice->params[1].send_routing = card->waveout.send_routing[ROUTE_PCM1];
-+ voice->params[0].send_routing2 = voice->params[1].send_routing2 = card->waveout.send_routing2[ROUTE_PCM1];
-+ } else {
-+ voice->params[0].send_routing = voice->params[1].send_routing = card->waveout.send_routing[ROUTE_PCM];
-+ voice->params[0].send_routing2 = voice->params[1].send_routing2 = card->waveout.send_routing2[ROUTE_PCM];
-+ }
-+ }
-+
- voice->params[1].volume_target = 0xffff;
- voice->params[1].initial_fc = 0xff;
- voice->params[1].initial_attn = 0x00;
-@@ -183,30 +198,28 @@ static int get_voice(struct emu10k1_card
- voice->params[1].byampl_env_decay = 0x7f;
- } else {
- if (woinst->num_voices > 1) {
-- voice->params[0].send_a = 0xff;
-- voice->params[0].send_b = 0;
-- voice->params[0].send_c = 0;
-- voice->params[0].send_d = 0;
--
-- voice->params[0].send_routing =
-- 0xfff0 + card->mchannel_fx + voicenum;
-+ // Multichannel pcm
-+ voice->params[0].send_dcba=0xff;
-+ voice->params[0].send_hgfe=0;
-+ if (card->is_audigy) {
-+ voice->params[0].send_routing = 0x3f3f3f00 + card->mchannel_fx + voicenum;
-+ voice->params[0].send_routing2 = 0x3f3f3f3f;
-+ } else {
-+ voice->params[0].send_routing = 0xfff0 + card->mchannel_fx + voicenum;
-+ }
-+
- } else {
-- voice->params[0].send_a = card->waveout.send_a[0];
-- voice->params[0].send_b = card->waveout.send_b[0];
-- voice->params[0].send_c = card->waveout.send_c[0];
-- voice->params[0].send_d = card->waveout.send_d[0];
--
-- if (woinst->device)
-- voice->params[0].send_routing = 0x7654;
-- else
-- voice->params[0].send_routing = card->waveout.send_routing[0];
-- }
--
-- voice->params[0].volume_target = 0xffff;
-- voice->params[0].initial_fc = 0xff;
-- voice->params[0].initial_attn = 0x00;
-- voice->params[0].byampl_env_sustain = 0x7f;
-- voice->params[0].byampl_env_decay = 0x7f;
-+ voice->params[0].send_dcba = card->waveout.send_dcba[SEND_MONO];
-+ voice->params[0].send_hgfe = card->waveout.send_hgfe[SEND_MONO];
-+
-+ if (woinst->device) {
-+ voice->params[0].send_routing = card->waveout.send_routing[ROUTE_PCM1];
-+ voice->params[0].send_routing2 = card->waveout.send_routing2[ROUTE_PCM1];
-+ } else {
-+ voice->params[0].send_routing = card->waveout.send_routing[ROUTE_PCM];
-+ voice->params[0].send_routing2 = card->waveout.send_routing2[ROUTE_PCM];
-+ }
-+ }
- }
-
- DPD(2, "voice: startloop=%#x, endloop=%#x\n", voice->startloop, voice->endloop);
-@@ -280,9 +293,16 @@ void emu10k1_waveout_start(struct emu10k
- {
- struct emu10k1_card *card = wave_dev->card;
- struct woinst *woinst = wave_dev->woinst;
-+ struct pt_data *pt = &card->pt;
-
- DPF(2, "emu10k1_waveout_start()\n");
-
-+ if (woinst->format.passthrough == 2) {
-+ emu10k1_pt_setup(wave_dev);
-+ sblive_writeptr(card, (card->is_audigy ? A_GPR_BASE : GPR_BASE) + pt->enable_gpr, 0, 1);
-+ pt->state = PT_STATE_PLAYING;
-+ }
-+
- /* Actual start */
- emu10k1_voices_start(woinst->voice, woinst->num_voices, woinst->total_played);
-
---- linux-2.6.0-test1/sound/oss/emu10k1/efxmgr.c 2003-07-13 21:44:35.000000000 -0700
-+++ 25/sound/oss/emu10k1/efxmgr.c 2003-07-19 17:03:51.000000000 -0700
-@@ -80,15 +80,20 @@ void emu10k1_set_control_gpr(struct emu1
- if (addr < 0 || addr >= NUM_GPRS)
- return;
-
-- if (flag)
-- val += sblive_readptr(card, GPR_BASE + addr, 0);
--
-- if (val > mgr->gpr[addr].max)
-- val = mgr->gpr[addr].max;
-- else if (val < mgr->gpr[addr].min)
-- val = mgr->gpr[addr].min;
--
-- sblive_writeptr(card, GPR_BASE + addr, 0, val);
-+ //fixme: once patch manager is up, remember to fix this for the audigy
-+ if (card->is_audigy) {
-+ sblive_writeptr(card, A_GPR_BASE + addr, 0, val);
-+ } else {
-+ if (flag)
-+ val += sblive_readptr(card, GPR_BASE + addr, 0);
-+ if (val > mgr->gpr[addr].max)
-+ val = mgr->gpr[addr].max;
-+ else if (val < mgr->gpr[addr].min)
-+ val = mgr->gpr[addr].min;
-+ sblive_writeptr(card, GPR_BASE + addr, 0, val);
-+ }
-+
-+
- }
-
- //TODO: make this configurable:
---- linux-2.6.0-test1/sound/oss/emu10k1/efxmgr.h 2003-06-14 12:18:35.000000000 -0700
-+++ 25/sound/oss/emu10k1/efxmgr.h 2003-07-19 17:03:51.000000000 -0700
-@@ -32,16 +32,30 @@
- #ifndef _EFXMGR_H
- #define _EFXMGR_H
-
--#define WRITE_EFX(a, b, c) sblive_writeptr((a), MICROCODEBASE + (b), 0, (c))
-+struct emu_efx_info_t{
-+ int opcode_shift;
-+ int high_operand_shift;
-+ int instruction_start;
-+ int gpr_base;
-+ int output_base;
-+};
-+
-+
-+#define WRITE_EFX(a, b, c) sblive_writeptr((a), emu_efx_info[card->is_audigy].instruction_start + (b), 0, (c))
-
- #define OP(op, z, w, x, y) \
-- do { WRITE_EFX(card, (pc) * 2, ((x) << 10) | (y)); \
-- WRITE_EFX(card, (pc) * 2 + 1, ((op) << 20) | ((z) << 10) | (w)); \
-+ do { WRITE_EFX(card, (pc) * 2, ((x) << emu_efx_info[card->is_audigy].high_operand_shift) | (y)); \
-+ WRITE_EFX(card, (pc) * 2 + 1, ((op) << emu_efx_info[card->is_audigy].opcode_shift ) | ((z) << emu_efx_info[card->is_audigy].high_operand_shift) | (w)); \
- ++pc; } while (0)
-
- #define NUM_INPUTS 0x20
- #define NUM_OUTPUTS 0x20
- #define NUM_GPRS 0x100
-+
-+#define A_NUM_INPUTS 0x60
-+#define A_NUM_OUTPUTS 0x60 //fixme: this may or may not be true
-+#define A_NUM_GPRS 0x200
-+
- #define GPR_NAME_SIZE 32
- #define PATCH_NAME_SIZE 32
-
-@@ -98,6 +112,9 @@ enum {
- #define GPR_BASE 0x100
- #define OUTPUT_BASE 0x20
-
-+#define A_GPR_BASE 0x400
-+#define A_OUTPUT_BASE 0x60
-+
- #define MAX_PATCHES_PAGES 32
-
- struct patch_manager {
---- linux-2.6.0-test1/sound/oss/emu10k1/hwaccess.c 2003-06-14 12:18:06.000000000 -0700
-+++ 25/sound/oss/emu10k1/hwaccess.c 2003-07-19 17:03:51.000000000 -0700
-@@ -160,6 +160,24 @@ void emu10k1_writefn0(struct emu10k1_car
- return;
- }
-
-+void emu10k1_writefn0_2(struct emu10k1_card *card, u32 reg, u32 data, int size)
-+{
-+ unsigned long flags;
-+
-+ spin_lock_irqsave(&card->lock, flags);
-+
-+ if (size == 32)
-+ outl(data, card->iobase + (reg & 0x1F));
-+ else if (size == 16)
-+ outw(data, card->iobase + (reg & 0x1F));
-+ else
-+ outb(data, card->iobase + (reg & 0x1F));
-+
-+ spin_unlock_irqrestore(&card->lock, flags);
-+
-+ return;
-+}
-+
- u32 emu10k1_readfn0(struct emu10k1_card * card, u32 reg)
- {
- u32 val;
-@@ -200,12 +218,13 @@ void emu10k1_timer_set(struct emu10k1_ca
- * write/read Emu10k1 pointer-offset register set, accessed through *
- * the PTR and DATA registers *
- *************************************************************************/
-+#define A_PTR_ADDRESS_MASK 0x0fff0000
- void sblive_writeptr(struct emu10k1_card *card, u32 reg, u32 channel, u32 data)
- {
- u32 regptr;
- unsigned long flags;
-
-- regptr = ((reg << 16) & PTR_ADDRESS_MASK) | (channel & PTR_CHANNELNUM_MASK);
-+ regptr = ((reg << 16) & A_PTR_ADDRESS_MASK) | (channel & PTR_CHANNELNUM_MASK);
-
- if (reg & 0xff000000) {
- u32 mask;
-@@ -242,7 +261,7 @@ void sblive_writeptr_tag(struct emu10k1_
- spin_lock_irqsave(&card->lock, flags);
- while ((reg = va_arg(args, u32)) != TAGLIST_END) {
- u32 data = va_arg(args, u32);
-- u32 regptr = (((reg << 16) & PTR_ADDRESS_MASK)
-+ u32 regptr = (((reg << 16) & A_PTR_ADDRESS_MASK)
- | (channel & PTR_CHANNELNUM_MASK));
- outl(regptr, card->iobase + PTR);
- if (reg & 0xff000000) {
-@@ -267,7 +286,7 @@ u32 sblive_readptr(struct emu10k1_card *
- u32 regptr, val;
- unsigned long flags;
-
-- regptr = ((reg << 16) & PTR_ADDRESS_MASK) | (channel & PTR_CHANNELNUM_MASK);
-+ regptr = ((reg << 16) & A_PTR_ADDRESS_MASK) | (channel & PTR_CHANNELNUM_MASK);
-
- if (reg & 0xff000000) {
- u32 mask;
-@@ -389,7 +408,7 @@ void emu10k1_ac97_write(struct ac97_code
-
- outb(reg, card->iobase + AC97ADDRESS);
- outw(value, card->iobase + AC97DATA);
--
-+ outb( AC97_EXTENDED_ID, card->iobase + AC97ADDRESS);
- spin_unlock_irqrestore(&card->lock, flags);
- }
-
-@@ -402,15 +421,23 @@ int emu10k1_mpu_write_data(struct emu10k
- unsigned long flags;
- int ret;
-
-- spin_lock_irqsave(&card->lock, flags);
-+ if (card->is_audigy) {
-+ if ((sblive_readptr(card, A_MUSTAT,0) & MUSTAT_ORDYN) == 0) {
-+ sblive_writeptr(card, A_MUDATA, 0, data);
-+ ret = 0;
-+ } else
-+ ret = -1;
-+ } else {
-+ spin_lock_irqsave(&card->lock, flags);
-
-- if ((inb(card->iobase + MUSTAT) & MUSTAT_ORDYN) == 0) {
-- outb(data, card->iobase + MUDATA);
-- ret = 0;
-- } else
-- ret = -1;
-+ if ((inb(card->iobase + MUSTAT) & MUSTAT_ORDYN) == 0) {
-+ outb(data, card->iobase + MUDATA);
-+ ret = 0;
-+ } else
-+ ret = -1;
-
-- spin_unlock_irqrestore(&card->lock, flags);
-+ spin_unlock_irqrestore(&card->lock, flags);
-+ }
-
- return ret;
- }
-@@ -420,15 +447,23 @@ int emu10k1_mpu_read_data(struct emu10k1
- unsigned long flags;
- int ret;
-
-- spin_lock_irqsave(&card->lock, flags);
-+ if (card->is_audigy) {
-+ if ((sblive_readptr(card, A_MUSTAT,0) & MUSTAT_IRDYN) == 0) {
-+ *data = sblive_readptr(card, A_MUDATA,0);
-+ ret = 0;
-+ } else
-+ ret = -1;
-+ } else {
-+ spin_lock_irqsave(&card->lock, flags);
-
-- if ((inb(card->iobase + MUSTAT) & MUSTAT_IRDYN) == 0) {
-- *data = inb(card->iobase + MUDATA);
-- ret = 0;
-- } else
-- ret = -1;
-+ if ((inb(card->iobase + MUSTAT) & MUSTAT_IRDYN) == 0) {
-+ *data = inb(card->iobase + MUDATA);
-+ ret = 0;
-+ } else
-+ ret = -1;
-
-- spin_unlock_irqrestore(&card->lock, flags);
-+ spin_unlock_irqrestore(&card->lock, flags);
-+ }
-
- return ret;
- }
-@@ -439,37 +474,54 @@ int emu10k1_mpu_reset(struct emu10k1_car
- unsigned long flags;
-
- DPF(2, "emu10k1_mpu_reset()\n");
-+ if (card->is_audigy) {
-+ if (card->mpuacqcount == 0) {
-+ sblive_writeptr(card, A_MUCMD, 0, MUCMD_RESET);
-+ sblive_wcwait(card, 8);
-+ sblive_writeptr(card, A_MUCMD, 0, MUCMD_RESET);
-+ sblive_wcwait(card, 8);
-+ sblive_writeptr(card, A_MUCMD, 0, MUCMD_ENTERUARTMODE);
-+ sblive_wcwait(card, 8);
-+ status = sblive_readptr(card, A_MUDATA, 0);
-+ if (status == 0xfe)
-+ return 0;
-+ else
-+ return -1;
-+ }
-
-- if (card->mpuacqcount == 0) {
-- spin_lock_irqsave(&card->lock, flags);
-- outb(MUCMD_RESET, card->iobase + MUCMD);
-- spin_unlock_irqrestore(&card->lock, flags);
-+ return 0;
-+ } else {
-+ if (card->mpuacqcount == 0) {
-+ spin_lock_irqsave(&card->lock, flags);
-+ outb(MUCMD_RESET, card->iobase + MUCMD);
-+ spin_unlock_irqrestore(&card->lock, flags);
-
-- sblive_wcwait(card, 8);
-+ sblive_wcwait(card, 8);
-
-- spin_lock_irqsave(&card->lock, flags);
-- outb(MUCMD_RESET, card->iobase + MUCMD);
-- spin_unlock_irqrestore(&card->lock, flags);
-+ spin_lock_irqsave(&card->lock, flags);
-+ outb(MUCMD_RESET, card->iobase + MUCMD);
-+ spin_unlock_irqrestore(&card->lock, flags);
-
-- sblive_wcwait(card, 8);
-+ sblive_wcwait(card, 8);
-
-- spin_lock_irqsave(&card->lock, flags);
-- outb(MUCMD_ENTERUARTMODE, card->iobase + MUCMD);
-- spin_unlock_irqrestore(&card->lock, flags);
-+ spin_lock_irqsave(&card->lock, flags);
-+ outb(MUCMD_ENTERUARTMODE, card->iobase + MUCMD);
-+ spin_unlock_irqrestore(&card->lock, flags);
-
-- sblive_wcwait(card, 8);
-+ sblive_wcwait(card, 8);
-
-- spin_lock_irqsave(&card->lock, flags);
-- status = inb(card->iobase + MUDATA);
-- spin_unlock_irqrestore(&card->lock, flags);
-+ spin_lock_irqsave(&card->lock, flags);
-+ status = inb(card->iobase + MUDATA);
-+ spin_unlock_irqrestore(&card->lock, flags);
-
-- if (status == 0xfe)
-- return 0;
-- else
-- return -1;
-- }
-+ if (status == 0xfe)
-+ return 0;
-+ else
-+ return -1;
-+ }
-
-- return 0;
-+ return 0;
-+ }
- }
-
- int emu10k1_mpu_acquire(struct emu10k1_card *card)
---- linux-2.6.0-test1/sound/oss/emu10k1/hwaccess.h 2003-07-13 21:44:35.000000000 -0700
-+++ 25/sound/oss/emu10k1/hwaccess.h 2003-07-19 17:03:51.000000000 -0700
-@@ -79,13 +79,21 @@ struct memhandle
-
- struct emu10k1_waveout
- {
-- u16 send_routing[3];
--
-- u8 send_a[3];
-- u8 send_b[3];
-- u8 send_c[3];
-- u8 send_d[3];
-+ u32 send_routing[3];
-+ // audigy only:
-+ u32 send_routing2[3];
-+
-+ u32 send_dcba[3];
-+ // audigy only:
-+ u32 send_hgfe[3];
- };
-+#define ROUTE_PCM 0
-+#define ROUTE_PT 1
-+#define ROUTE_PCM1 2
-+
-+#define SEND_MONO 0
-+#define SEND_LEFT 1
-+#define SEND_RIGHT 2
-
- struct emu10k1_wavein
- {
-@@ -129,7 +137,7 @@ struct mixer_private_ioctl {
- #define CMD_AC97_BOOST _IOW('D', 20, struct mixer_private_ioctl)
-
- //up this number when breaking compatibility
--#define PRIVATE3_VERSION 1
-+#define PRIVATE3_VERSION 2
-
- struct emu10k1_card
- {
-@@ -181,7 +189,7 @@ struct emu10k1_card
- u32 has_toslink; // TOSLink detection
-
- u8 chiprev; /* Chip revision */
--
-+ u8 is_audigy;
- u8 is_aps;
-
- struct patch_manager mgr;
-@@ -211,6 +219,7 @@ extern struct list_head emu10k1_devs;
- /* Hardware Abstraction Layer access functions */
-
- void emu10k1_writefn0(struct emu10k1_card *, u32, u32);
-+void emu10k1_writefn0_2(struct emu10k1_card *, u32, u32, int);
- u32 emu10k1_readfn0(struct emu10k1_card *, u32);
-
- void emu10k1_timer_set(struct emu10k1_card *, u16);
---- linux-2.6.0-test1/sound/oss/emu10k1/irqmgr.h 2003-06-14 12:18:03.000000000 -0700
-+++ 25/sound/oss/emu10k1/irqmgr.h 2003-07-19 17:03:51.000000000 -0700
-@@ -33,15 +33,15 @@
- #define _IRQ_H
-
- /* EMU Irq Types */
--#define IRQTYPE_PCIBUSERROR IPR_PCIERROR
--#define IRQTYPE_MIXERBUTTON (IPR_VOLINCR | IPR_VOLDECR | IPR_MUTE)
--#define IRQTYPE_VOICE (IPR_CHANNELLOOP | IPR_CHANNELNUMBERMASK)
--#define IRQTYPE_RECORD (IPR_ADCBUFFULL | IPR_ADCBUFHALFFULL | IPR_MICBUFFULL | IPR_MICBUFHALFFULL | IPR_EFXBUFFULL | IPR_EFXBUFHALFFULL)
--#define IRQTYPE_MPUOUT IPR_MIDITRANSBUFEMPTY
--#define IRQTYPE_MPUIN IPR_MIDIRECVBUFEMPTY
--#define IRQTYPE_TIMER IPR_INTERVALTIMER
--#define IRQTYPE_SPDIF (IPR_GPSPDIFSTATUSCHANGE | IPR_CDROMSTATUSCHANGE)
--#define IRQTYPE_DSP IPR_FXDSP
-+#define IRQTYPE_PCIBUSERROR IPR_PCIERROR
-+#define IRQTYPE_MIXERBUTTON (IPR_VOLINCR | IPR_VOLDECR | IPR_MUTE)
-+#define IRQTYPE_VOICE (IPR_CHANNELLOOP | IPR_CHANNELNUMBERMASK)
-+#define IRQTYPE_RECORD (IPR_ADCBUFFULL | IPR_ADCBUFHALFFULL | IPR_MICBUFFULL | IPR_MICBUFHALFFULL | IPR_EFXBUFFULL | IPR_EFXBUFHALFFULL)
-+#define IRQTYPE_MPUOUT (IPR_MIDITRANSBUFEMPTY | A_IPR_MIDITRANSBUFEMPTY2)
-+#define IRQTYPE_MPUIN (IPR_MIDIRECVBUFEMPTY | A_IPR_MIDIRECVBUFEMPTY2)
-+#define IRQTYPE_TIMER IPR_INTERVALTIMER
-+#define IRQTYPE_SPDIF (IPR_GPSPDIFSTATUSCHANGE | IPR_CDROMSTATUSCHANGE)
-+#define IRQTYPE_DSP IPR_FXDSP
-
- void emu10k1_timer_irqhandler(struct emu10k1_card *);
- void emu10k1_dsp_irqhandler(struct emu10k1_card *);
---- linux-2.6.0-test1/sound/oss/emu10k1/main.c 2003-07-13 21:44:35.000000000 -0700
-+++ 25/sound/oss/emu10k1/main.c 2003-07-19 17:03:51.000000000 -0700
-@@ -78,10 +78,11 @@
- * Cleaned up poll() functions (audio and midi). Don't start input.
- * Restrict DMA pages used to 512Mib range.
- * New AC97_BOOST mixer ioctl.
-- * 0.19 Real fix for kernel with highmem support (cast dma_handle to u32).
-+ * 0.19a Added Support for Audigy Cards
-+ * Real fix for kernel with highmem support (cast dma_handle to u32).
- * Fix recording buffering parameters calculation.
- * Use unsigned long for variables in bit ops.
-- * 0.20 Fixed recording startup
-+ * 0.20a Fixed recording startup
- * Fixed timer rate setting (it's a 16-bit register)
- *********************************************************************/
-
-@@ -114,7 +115,6 @@
- #define SNDCARD_EMU10K1 46
- #endif
-
--#define DRIVER_VERSION "0.20"
-
- /* the emu10k1 _seems_ to only supports 29 bit (512MiB) bit bus master */
- #define EMU10K1_DMA_MASK 0x1fffffff /* DMA buffer mask for pci_alloc_consist */
-@@ -126,20 +126,27 @@
- #ifndef PCI_DEVICE_ID_CREATIVE_EMU10K1
- #define PCI_DEVICE_ID_CREATIVE_EMU10K1 0x0002
- #endif
-+#ifndef PCI_DEVICE_ID_CREATIVE_AUDIGY
-+#define PCI_DEVICE_ID_CREATIVE_AUDIGY 0x0004
-+#endif
-
- #define EMU_APS_SUBID 0x40011102
-
- enum {
- EMU10K1 = 0,
-+ AUDIGY,
- };
-
- static char *card_names[] __devinitdata = {
- "EMU10K1",
-+ "Audigy",
- };
-
- static struct pci_device_id emu10k1_pci_tbl[] = {
- {PCI_VENDOR_ID_CREATIVE, PCI_DEVICE_ID_CREATIVE_EMU10K1,
- PCI_ANY_ID, PCI_ANY_ID, 0, 0, EMU10K1},
-+ {PCI_VENDOR_ID_CREATIVE, PCI_DEVICE_ID_CREATIVE_AUDIGY,
-+ PCI_ANY_ID, PCI_ANY_ID, 0, 0, AUDIGY},
- {0,}
- };
-
-@@ -161,6 +168,67 @@ extern irqreturn_t emu10k1_interrupt(int
-
- static int __devinit emu10k1_audio_init(struct emu10k1_card *card)
- {
-+ /* Assign default playback voice parameters */
-+ if (card->is_audigy)
-+ card->mchannel_fx = 0;
-+ else
-+ card->mchannel_fx = 8;
-+
-+
-+ if (card->is_audigy) {
-+ /* mono voice */
-+ card->waveout.send_dcba[SEND_MONO] = 0xffffffff;
-+ card->waveout.send_hgfe[SEND_MONO] = 0x0000ffff;
-+
-+ /* stereo voice */
-+ /* left */
-+ card->waveout.send_dcba[SEND_LEFT] = 0x00ff00ff;
-+ card->waveout.send_hgfe[SEND_LEFT] = 0x00007f7f;
-+ /* right */
-+ card->waveout.send_dcba[SEND_RIGHT] = 0xff00ff00;
-+ card->waveout.send_hgfe[SEND_RIGHT] = 0x00007f7f;
-+
-+ card->waveout.send_routing[ROUTE_PCM] = 0x03020100; // Regular pcm
-+ card->waveout.send_routing2[ROUTE_PCM] = 0x07060504;
-+
-+ card->waveout.send_routing[ROUTE_PT] = 0x3f3f3d3c; // Passthrough
-+ card->waveout.send_routing2[ROUTE_PT] = 0x3f3f3f3f;
-+
-+ card->waveout.send_routing[ROUTE_PCM1] = 0x03020100; // Spare
-+ card->waveout.send_routing2[ROUTE_PCM1] = 0x07060404;
-+
-+ } else {
-+ /* mono voice */
-+ card->waveout.send_dcba[SEND_MONO] = 0x0000ffff;
-+
-+ /* stereo voice */
-+ /* left */
-+ card->waveout.send_dcba[SEND_LEFT] = 0x000000ff;
-+ /* right */
-+ card->waveout.send_dcba[SEND_RIGHT] = 0x0000ff00;
-+
-+ card->waveout.send_routing[ROUTE_PCM] = 0x3210; // pcm
-+ card->waveout.send_routing[ROUTE_PT] = 0x3210; // passthrough
-+ card->waveout.send_routing[ROUTE_PCM1] = 0x7654; // /dev/dsp1
-+ }
-+
-+ /* Assign default recording parameters */
-+ /* FIXME */
-+ if (card->is_aps)
-+ card->wavein.recsrc = WAVERECORD_FX;
-+ else
-+ card->wavein.recsrc = WAVERECORD_AC97;
-+
-+ card->wavein.fxwc = 0x0003;
-+ return 0;
-+}
-+
-+static void emu10k1_audio_cleanup(struct emu10k1_card *card)
-+{
-+}
-+
-+static int __devinit emu10k1_register_devices(struct emu10k1_card *card)
-+{
- card->audio_dev = register_sound_dsp(&emu10k1_audio_fops, -1);
- if (card->audio_dev < 0) {
- printk(KERN_ERR "emu10k1: cannot register first audio device!\n");
-@@ -173,56 +241,167 @@ static int __devinit emu10k1_audio_init(
- goto err_dev1;
- }
-
-- /* Assign default playback voice parameters */
-- card->mchannel_fx = 8;
-- /* mono voice */
-- card->waveout.send_a[0] = 0xff;
-- card->waveout.send_b[0] = 0xff;
-- card->waveout.send_c[0] = 0x00;
-- card->waveout.send_d[0] = 0x00;
-- card->waveout.send_routing[0] = 0x3210;
--
-- /* stereo voice */
-- /* left */
-- card->waveout.send_a[1] = 0xff;
-- card->waveout.send_b[1] = 0x00;
-- card->waveout.send_c[1] = 0x00;
-- card->waveout.send_d[1] = 0x00;
-- card->waveout.send_routing[1] = 0x3210;
--
-- /* right */
-- card->waveout.send_a[2] = 0x00;
-- card->waveout.send_b[2] = 0xff;
-- card->waveout.send_c[2] = 0x00;
-- card->waveout.send_d[2] = 0x00;
-- card->waveout.send_routing[2] = 0x3210;
-+ card->ac97->dev_mixer = register_sound_mixer(&emu10k1_mixer_fops, -1);
-+ if (card->ac97->dev_mixer < 0) {
-+ printk(KERN_ERR "emu10k1: cannot register mixer device\n");
-+ goto err_mixer;
-+ }
-
-- /* Assign default recording parameters */
-- /* FIXME */
-- if (card->is_aps)
-- card->wavein.recsrc = WAVERECORD_FX;
-- else
-- card->wavein.recsrc = WAVERECORD_AC97;
-+ card->midi_dev = register_sound_midi(&emu10k1_midi_fops, -1);
-+ if (card->midi_dev < 0) {
-+ printk(KERN_ERR "emu10k1: cannot register midi device!\n");
-+ goto err_midi;
-+ }
-
-- card->wavein.fxwc = 0x0003;
-+#ifdef EMU10K1_SEQUENCER
-+ card->seq_dev = sound_alloc_mididev();
-+ if (card->seq_dev == -1)
-+ printk(KERN_WARNING "emu10k1: unable to register sequencer device!");
-+ else {
-+ std_midi_synth.midi_dev = card->seq_dev;
-+ midi_devs[card->seq_dev] =
-+ (struct midi_operations *)
-+ kmalloc(sizeof(struct midi_operations), GFP_KERNEL);
-+
-+ if (midi_devs[card->seq_dev] == NULL) {
-+ printk(KERN_ERR "emu10k1: unable to allocate memory!");
-+ sound_unload_mididev(card->seq_dev);
-+ card->seq_dev = -1;
-+ /* return without error */
-+ } else {
-+ memcpy((char *)midi_devs[card->seq_dev],
-+ (char *)&emu10k1_midi_operations,
-+ sizeof(struct midi_operations));
-+ midi_devs[card->seq_dev]->devc = card;
-+ sequencer_init();
-+ card->seq_mididev = NULL;
-+ }
-+ }
-+#endif
- return 0;
-
-+err_midi:
-+ unregister_sound_mixer(card->ac97->dev_mixer);
-+err_mixer:
-+ unregister_sound_dsp(card->audio_dev);
- err_dev1:
- unregister_sound_dsp(card->audio_dev);
- err_dev:
- return -ENODEV;
- }
-
--static void __devinit emu10k1_audio_cleanup(struct emu10k1_card *card)
-+static void emu10k1_unregister_devices(struct emu10k1_card *card)
- {
-+#ifdef EMU10K1_SEQUENCER
-+ if (card->seq_dev > -1) {
-+ kfree(midi_devs[card->seq_dev]);
-+ midi_devs[card->seq_dev] = NULL;
-+ sound_unload_mididev(card->seq_dev);
-+ card->seq_dev = -1;
-+ }
-+#endif
-+
-+ unregister_sound_midi(card->midi_dev);
-+ unregister_sound_mixer(card->ac97->dev_mixer);
- unregister_sound_dsp(card->audio_dev1);
- unregister_sound_dsp(card->audio_dev);
- }
-
--static int __devinit emu10k1_mixer_init(struct emu10k1_card *card)
-+int emu10k1_info_proc (char *page, char **start, off_t off,
-+ int count, int *eof, void *data)
-+{
-+ struct emu10k1_card *card = data;
-+ int len = 0;
-+
-+ if (card == NULL)
-+ return -ENODEV;
-+
-+ len += sprintf (page + len, "Driver Version : %s\n", DRIVER_VERSION);
-+ len += sprintf (page + len, "Card type : %s\n", card->is_aps ? "Aps" : (card->is_audigy ? "Audigy" : "Emu10k1"));
-+ len += sprintf (page + len, "Revision : %d\n", card->chiprev);
-+ len += sprintf (page + len, "Model : %#06x\n", card->model);
-+ len += sprintf (page + len, "IO : %#06lx-%#06lx\n", card->iobase, card->iobase + card->length - 1);
-+ len += sprintf (page + len, "IRQ : %d\n\n", card->irq);
-+
-+ len += sprintf (page + len, "Registered /dev Entries:\n");
-+ len += sprintf (page + len, "/dev/dsp%d\n", card->audio_dev / 16);
-+ len += sprintf (page + len, "/dev/dsp%d\n", card->audio_dev1 / 16);
-+ len += sprintf (page + len, "/dev/mixer%d\n", card->ac97->dev_mixer / 16);
-+ len += sprintf (page + len, "/dev/midi%d\n", card->midi_dev / 16);
-+
-+#ifdef EMU10K1_SEQUENCER
-+ len += sprintf (page + len, "/dev/sequencer\n");
-+#endif
-+
-+ return len;
-+}
-+
-+static int __devinit emu10k1_proc_init(struct emu10k1_card *card)
-+{
-+ char s[48];
-+
-+ if (!proc_mkdir ("driver/emu10k1", 0)) {
-+ printk(KERN_ERR "emu10k1: unable to create proc directory driver/emu10k1\n");
-+ goto err_out;
-+ }
-+
-+ sprintf(s, "driver/emu10k1/%s", card->pci_dev->slot_name);
-+ if (!proc_mkdir (s, 0)) {
-+ printk(KERN_ERR "emu10k1: unable to create proc directory %s\n", s);
-+ goto err_emu10k1_proc;
-+ }
-+
-+ sprintf(s, "driver/emu10k1/%s/info", card->pci_dev->slot_name);
-+ if (!create_proc_read_entry (s, 0, 0, emu10k1_info_proc, card)) {
-+ printk(KERN_ERR "emu10k1: unable to create proc entry %s\n", s);
-+ goto err_dev_proc;
-+ }
-+
-+ if (!card->is_aps) {
-+ sprintf(s, "driver/emu10k1/%s/ac97", card->pci_dev->slot_name);
-+ if (!create_proc_read_entry (s, 0, 0, ac97_read_proc, card->ac97)) {
-+ printk(KERN_ERR "emu10k1: unable to create proc entry %s\n", s);
-+ goto err_proc_ac97;
-+ }
-+ }
-+
-+ return 0;
-+
-+err_proc_ac97:
-+ sprintf(s, "driver/emu10k1/%s/info", card->pci_dev->slot_name);
-+ remove_proc_entry(s, NULL);
-+
-+err_dev_proc:
-+ sprintf(s, "driver/emu10k1/%s", card->pci_dev->slot_name);
-+ remove_proc_entry(s, NULL);
-+
-+err_emu10k1_proc:
-+ remove_proc_entry("driver/emu10k1", NULL);
-+
-+err_out:
-+ return -EIO;
-+}
-+
-+static void emu10k1_proc_cleanup(struct emu10k1_card *card)
- {
-- char s[32];
-+ char s[48];
-
-+ if (!card->is_aps) {
-+ sprintf(s, "driver/emu10k1/%s/ac97", card->pci_dev->slot_name);
-+ remove_proc_entry(s, NULL);
-+ }
-+
-+ sprintf(s, "driver/emu10k1/%s/info", card->pci_dev->slot_name);
-+ remove_proc_entry(s, NULL);
-+
-+ sprintf(s, "driver/emu10k1/%s", card->pci_dev->slot_name);
-+ remove_proc_entry(s, NULL);
-+
-+ remove_proc_entry("driver/emu10k1", NULL);
-+}
-+
-+static int __devinit emu10k1_mixer_init(struct emu10k1_card *card)
-+{
- struct ac97_codec *codec = ac97_alloc_codec();
-
- if(codec == NULL)
-@@ -231,15 +410,6 @@ static int __devinit emu10k1_mixer_init(
- return -EIO;
- }
- card->ac97 = codec;
--
--#warning "Initialisation order race. Must register after usable"
--
-- card->ac97->dev_mixer = register_sound_mixer(&emu10k1_mixer_fops, -1);
-- if (card->ac97->dev_mixer < 0) {
-- printk(KERN_ERR "emu10k1: cannot register mixer device\n");
-- goto err_codec;
-- }
--
- card->ac97->private_data = card;
-
- if (!card->is_aps) {
-@@ -261,23 +431,6 @@ static int __devinit emu10k1_mixer_init(
- // Force 5bit:
- //card->ac97->bit_resolution=5;
-
-- if (!proc_mkdir ("driver/emu10k1", 0)) {
-- printk(KERN_ERR "emu10k1: unable to create proc directory driver/emu10k1\n");
-- goto err_out;
-- }
--
-- sprintf(s, "driver/emu10k1/%s", card->pci_dev->slot_name);
-- if (!proc_mkdir (s, 0)) {
-- printk(KERN_ERR "emu10k1: unable to create proc directory %s\n", s);
-- goto err_emu10k1_proc;
-- }
--
-- sprintf(s, "driver/emu10k1/%s/ac97", card->pci_dev->slot_name);
-- if (!create_proc_read_entry (s, 0, 0, ac97_read_proc, card->ac97)) {
-- printk(KERN_ERR "emu10k1: unable to create proc entry %s\n", s);
-- goto err_ac97_proc;
-- }
--
- /* these will store the original values and never be modified */
- card->ac97_supported_mixers = card->ac97->supported_mixers;
- card->ac97_stereo_mixers = card->ac97->stereo_mixers;
-@@ -285,34 +438,13 @@ static int __devinit emu10k1_mixer_init(
-
- return 0;
-
-- err_ac97_proc:
-- sprintf(s, "driver/emu10k1/%s", card->pci_dev->slot_name);
-- remove_proc_entry(s, NULL);
--
-- err_emu10k1_proc:
-- remove_proc_entry("driver/emu10k1", NULL);
- err_out:
-- unregister_sound_mixer (card->ac97->dev_mixer);
-- err_codec:
- ac97_release_codec(card->ac97);
- return -EIO;
- }
-
--static void __devinit emu10k1_mixer_cleanup(struct emu10k1_card *card)
-+static void emu10k1_mixer_cleanup(struct emu10k1_card *card)
- {
-- char s[32];
--
-- if (!card->is_aps) {
-- sprintf(s, "driver/emu10k1/%s/ac97", card->pci_dev->slot_name);
-- remove_proc_entry(s, NULL);
--
-- sprintf(s, "driver/emu10k1/%s", card->pci_dev->slot_name);
-- remove_proc_entry(s, NULL);
--
-- remove_proc_entry("driver/emu10k1", NULL);
-- }
--
-- unregister_sound_mixer (card->ac97->dev_mixer);
- ac97_release_codec(card->ac97);
- }
-
-@@ -320,13 +452,6 @@ static int __devinit emu10k1_midi_init(s
- {
- int ret;
-
-- card->midi_dev = register_sound_midi(&emu10k1_midi_fops, -1);
-- if (card->midi_dev < 0) {
-- printk(KERN_ERR "emu10k1: cannot register midi device!\n");
-- return -ENODEV;
-- }
--
--
- card->mpuout = kmalloc(sizeof(struct emu10k1_mpuout), GFP_KERNEL);
- if (card->mpuout == NULL) {
- printk(KERN_WARNING "emu10k1: Unable to allocate emu10k1_mpuout: out of memory\n");
-@@ -366,31 +491,6 @@ static int __devinit emu10k1_midi_init(s
- goto err_out3;
- }
-
--#ifdef EMU10K1_SEQUENCER
-- card->seq_dev = sound_alloc_mididev();
-- if (card->seq_dev == -1)
-- printk(KERN_WARNING "emu10k1: unable to register sequencer device!");
-- else {
-- std_midi_synth.midi_dev = card->seq_dev;
-- midi_devs[card->seq_dev] =
-- (struct midi_operations *)
-- kmalloc(sizeof(struct midi_operations), GFP_KERNEL);
--
-- if (midi_devs[card->seq_dev] == NULL) {
-- printk(KERN_ERR "emu10k1: unable to allocate memory!");
-- sound_unload_mididev(card->seq_dev);
-- card->seq_dev = -1;
-- return 0;
-- } else {
-- memcpy((char *)midi_devs[card->seq_dev],
-- (char *)&emu10k1_midi_operations,
-- sizeof(struct midi_operations));
-- midi_devs[card->seq_dev]->devc = card;
-- sequencer_init();
-- }
-- }
-- card->seq_mididev = 0;
--#endif
- return 0;
-
- err_out3:
-@@ -398,28 +498,16 @@ err_out3:
- err_out2:
- kfree(card->mpuout);
- err_out1:
-- unregister_sound_midi(card->midi_dev);
- return ret;
- }
-
--static void __devinit emu10k1_midi_cleanup(struct emu10k1_card *card)
-+static void emu10k1_midi_cleanup(struct emu10k1_card *card)
- {
- tasklet_kill(&card->mpuout->tasklet);
- kfree(card->mpuout);
-
- tasklet_kill(&card->mpuin->tasklet);
- kfree(card->mpuin);
--
--#ifdef EMU10K1_SEQUENCER
-- if (card->seq_dev > -1) {
-- kfree(midi_devs[card->seq_dev]);
-- midi_devs[card->seq_dev] = NULL;
-- sound_unload_mididev(card->seq_dev);
-- card->seq_dev = -1;
-- }
--#endif
--
-- unregister_sound_midi(card->midi_dev);
- }
-
- static void __devinit voice_init(struct emu10k1_card *card)
-@@ -450,7 +538,7 @@ static void __devinit addxmgr_init(struc
- card->emupagetable[1] = MAXPAGES - 1;
- }
-
--static void __devinit fx_cleanup(struct patch_manager *mgr)
-+static void fx_cleanup(struct patch_manager *mgr)
- {
- int i;
- for(i = 0; i < mgr->current_pages; i++)
-@@ -465,24 +553,25 @@ static int __devinit fx_init(struct emu1
- s32 left, right;
- int i;
- u32 pc = 0;
-- u32 patch_n;
-+ u32 patch_n=0;
-+ struct emu_efx_info_t emu_efx_info[2]=
-+ {{ 20, 10, 0x400, 0x100, 0x20 },
-+ { 24, 12, 0x600, 0x400, 0x60 },
-+ };
-+
-
- for (i = 0; i < SOUND_MIXER_NRDEVICES; i++) {
- mgr->ctrl_gpr[i][0] = -1;
- mgr->ctrl_gpr[i][1] = -1;
- }
-
-- for (i = 0; i < 512; i++)
-- OP(6, 0x40, 0x40, 0x40, 0x40);
--
-- for (i = 0; i < 256; i++)
-- sblive_writeptr_tag(card, 0,
-- FXGPREGBASE + i, 0,
-- TANKMEMADDRREGBASE + i, 0,
-- TAGLIST_END);
-
-- /* !! The number bellow must equal the number of patches, currently 11 !! */
-- mgr->current_pages = (11 + PATCHES_PER_PAGE - 1) / PATCHES_PER_PAGE;
-+ if (card->is_audigy)
-+ mgr->current_pages = (2 + PATCHES_PER_PAGE - 1) / PATCHES_PER_PAGE;
-+ else
-+ /* !! The number below must equal the number of patches, currently 11 !! */
-+ mgr->current_pages = (11 + PATCHES_PER_PAGE - 1) / PATCHES_PER_PAGE;
-+
- for (i = 0; i < mgr->current_pages; i++) {
- mgr->patch[i] = (void *)__get_free_page(GFP_KERNEL);
- if (mgr->patch[i] == NULL) {
-@@ -493,215 +582,298 @@ static int __devinit fx_init(struct emu1
- memset(mgr->patch[i], 0, PAGE_SIZE);
- }
-
-- pc = 0;
-- patch_n = 0;
-- //first free GPR = 0x11b
--
-- /* FX volume correction and Volume control*/
-- INPUT_PATCH_START(patch, "Pcm L vol", 0x0, 0);
-- GET_OUTPUT_GPR(patch, 0x100, 0x0);
-- GET_CONTROL_GPR(patch, 0x106, "Vol", 0, 0x7fffffff);
-- GET_DYNAMIC_GPR(patch, 0x112);
--
-- OP(4, 0x112, 0x40, PCM_IN_L, 0x44); //*4
-- OP(0, 0x100, 0x040, 0x112, 0x106); //*vol
-- INPUT_PATCH_END(patch);
--
--
-- INPUT_PATCH_START(patch, "Pcm R vol", 0x1, 0);
-- GET_OUTPUT_GPR(patch, 0x101, 0x1);
-- GET_CONTROL_GPR(patch, 0x107, "Vol", 0, 0x7fffffff);
-- GET_DYNAMIC_GPR(patch, 0x112);
--
-- OP(4, 0x112, 0x40, PCM_IN_R, 0x44);
-- OP(0, 0x101, 0x040, 0x112, 0x107);
--
-- INPUT_PATCH_END(patch);
--
--
-- // CD-Digital In Volume control
-- INPUT_PATCH_START(patch, "CD-Digital Vol L", 0x12, 0);
-- GET_OUTPUT_GPR(patch, 0x10c, 0x12);
-- GET_CONTROL_GPR(patch, 0x10d, "Vol", 0, 0x7fffffff);
--
-- OP(0, 0x10c, 0x040, SPDIF_CD_L, 0x10d);
-- INPUT_PATCH_END(patch);
--
-- INPUT_PATCH_START(patch, "CD-Digital Vol R", 0x13, 0);
-- GET_OUTPUT_GPR(patch, 0x10e, 0x13);
-- GET_CONTROL_GPR(patch, 0x10f, "Vol", 0, 0x7fffffff);
--
-- OP(0, 0x10e, 0x040, SPDIF_CD_R, 0x10f);
-- INPUT_PATCH_END(patch);
--
-- //Volume Correction for Multi-channel Inputs
-- INPUT_PATCH_START(patch, "Multi-Channel Gain", 0x08, 0);
-- patch->input=patch->output=0x3F00;
--
-- GET_OUTPUT_GPR(patch, 0x113, MULTI_FRONT_L);
-- GET_OUTPUT_GPR(patch, 0x114, MULTI_FRONT_R);
-- GET_OUTPUT_GPR(patch, 0x115, MULTI_REAR_L);
-- GET_OUTPUT_GPR(patch, 0x116, MULTI_REAR_R);
-- GET_OUTPUT_GPR(patch, 0x117, MULTI_CENTER);
-- GET_OUTPUT_GPR(patch, 0x118, MULTI_LFE);
--
-- OP(4, 0x113, 0x40, MULTI_FRONT_L, 0x44);
-- OP(4, 0x114, 0x40, MULTI_FRONT_R, 0x44);
-- OP(4, 0x115, 0x40, MULTI_REAR_L, 0x44);
-- OP(4, 0x116, 0x40, MULTI_REAR_R, 0x44);
-- OP(4, 0x117, 0x40, MULTI_CENTER, 0x44);
-- OP(4, 0x118, 0x40, MULTI_LFE, 0x44);
--
-- INPUT_PATCH_END(patch);
--
--
-- //Routing patch start
-- ROUTING_PATCH_START(rpatch, "Routing");
-- GET_INPUT_GPR(rpatch, 0x100, 0x0);
-- GET_INPUT_GPR(rpatch, 0x101, 0x1);
-- GET_INPUT_GPR(rpatch, 0x10c, 0x12);
-- GET_INPUT_GPR(rpatch, 0x10e, 0x13);
-- GET_INPUT_GPR(rpatch, 0x113, MULTI_FRONT_L);
-- GET_INPUT_GPR(rpatch, 0x114, MULTI_FRONT_R);
-- GET_INPUT_GPR(rpatch, 0x115, MULTI_REAR_L);
-- GET_INPUT_GPR(rpatch, 0x116, MULTI_REAR_R);
-- GET_INPUT_GPR(rpatch, 0x117, MULTI_CENTER);
-- GET_INPUT_GPR(rpatch, 0x118, MULTI_LFE);
--
-- GET_DYNAMIC_GPR(rpatch, 0x102);
-- GET_DYNAMIC_GPR(rpatch, 0x103);
--
-- GET_OUTPUT_GPR(rpatch, 0x104, 0x8);
-- GET_OUTPUT_GPR(rpatch, 0x105, 0x9);
-- GET_OUTPUT_GPR(rpatch, 0x10a, 0x2);
-- GET_OUTPUT_GPR(rpatch, 0x10b, 0x3);
--
--
-- /* input buffer */
-- OP(6, 0x102, AC97_IN_L, 0x40, 0x40);
-- OP(6, 0x103, AC97_IN_R, 0x40, 0x40);
--
--
-- /* Digital In + PCM + MULTI_FRONT-> AC97 out (front speakers)*/
-- OP(6, AC97_FRONT_L, 0x100, 0x10c, 0x113);
--
-- CONNECT(MULTI_FRONT_L, AC97_FRONT_L);
-- CONNECT(PCM_IN_L, AC97_FRONT_L);
-- CONNECT(SPDIF_CD_L, AC97_FRONT_L);
--
-- OP(6, AC97_FRONT_R, 0x101, 0x10e, 0x114);
--
-- CONNECT(MULTI_FRONT_R, AC97_FRONT_R);
-- CONNECT(PCM_IN_R, AC97_FRONT_R);
-- CONNECT(SPDIF_CD_R, AC97_FRONT_R);
--
-- /* Digital In + PCM + AC97 In + PCM1 + MULTI_REAR --> Rear Channel */
-- OP(6, 0x104, PCM1_IN_L, 0x100, 0x115);
-- OP(6, 0x104, 0x104, 0x10c, 0x102);
--
-- CONNECT(MULTI_REAR_L, ANALOG_REAR_L);
-- CONNECT(AC97_IN_L, ANALOG_REAR_L);
-- CONNECT(PCM_IN_L, ANALOG_REAR_L);
-- CONNECT(SPDIF_CD_L, ANALOG_REAR_L);
-- CONNECT(PCM1_IN_L, ANALOG_REAR_L);
--
-- OP(6, 0x105, PCM1_IN_R, 0x101, 0x116);
-- OP(6, 0x105, 0x105, 0x10e, 0x103);
--
-- CONNECT(MULTI_REAR_R, ANALOG_REAR_R);
-- CONNECT(AC97_IN_R, ANALOG_REAR_R);
-- CONNECT(PCM_IN_R, ANALOG_REAR_R);
-- CONNECT(SPDIF_CD_R, ANALOG_REAR_R);
-- CONNECT(PCM1_IN_R, ANALOG_REAR_R);
--
-- /* Digital In + PCM + AC97 In + MULTI_FRONT --> Digital out */
-- OP(6, 0x10a, 0x100, 0x102, 0x10c);
-- OP(6, 0x10a, 0x10a, 0x113, 0x40);
--
-- CONNECT(MULTI_FRONT_L, DIGITAL_OUT_L);
-- CONNECT(PCM_IN_L, DIGITAL_OUT_L);
-- CONNECT(AC97_IN_L, DIGITAL_OUT_L);
-- CONNECT(SPDIF_CD_L, DIGITAL_OUT_L);
--
-- OP(6, 0x10b, 0x101, 0x103, 0x10e);
-- OP(6, 0x10b, 0x10b, 0x114, 0x40);
--
-- CONNECT(MULTI_FRONT_R, DIGITAL_OUT_R);
-- CONNECT(PCM_IN_R, DIGITAL_OUT_R);
-- CONNECT(AC97_IN_R, DIGITAL_OUT_R);
-- CONNECT(SPDIF_CD_R, DIGITAL_OUT_R);
--
-- /* AC97 In --> ADC Recording Buffer */
-- OP(6, ADC_REC_L, 0x102, 0x40, 0x40);
--
-- CONNECT(AC97_IN_L, ADC_REC_L);
--
-- OP(6, ADC_REC_R, 0x103, 0x40, 0x40);
--
-- CONNECT(AC97_IN_R, ADC_REC_R);
-+ if (card->is_audigy) {
-+ for (i = 0; i < 1024; i++)
-+ OP(0xf, 0x0c0, 0x0c0, 0x0cf, 0x0c0);
-+
-+ for (i = 0; i < 512 ; i++)
-+ sblive_writeptr(card, A_GPR_BASE+i,0,0);
-+
-+ pc=0;
-+
-+ //Pcm input volume
-+ OP(0, 0x402, 0x0c0, 0x406, 0x000);
-+ OP(0, 0x403, 0x0c0, 0x407, 0x001);
-+
-+ //CD-Digital input Volume
-+ OP(0, 0x404, 0x0c0, 0x40d, 0x42);
-+ OP(0, 0x405, 0x0c0, 0x40f, 0x43);
-+
-+ // CD + PCM
-+ OP(6, 0x400, 0x0c0, 0x402, 0x404);
-+ OP(6, 0x401, 0x0c0, 0x403, 0x405);
-+
-+ // Front Output + Master Volume
-+ OP(0, 0x68, 0x0c0, 0x408, 0x400);
-+ OP(0, 0x69, 0x0c0, 0x409, 0x401);
-+
-+ // Add-in analog inputs for other speakers
-+ OP(6, 0x400, 0x40, 0x400, 0xc0);
-+ OP(6, 0x401, 0x41, 0x401, 0xc0);
-+
-+ // Digital Front + Master Volume
-+ OP(0, 0x60, 0x0c0, 0x408, 0x400);
-+ OP(0, 0x61, 0x0c0, 0x409, 0x401);
-+
-+ // Rear Output + Rear Volume
-+ OP(0, 0x06e, 0x0c0, 0x419, 0x400);
-+ OP(0, 0x06f, 0x0c0, 0x41a, 0x401);
-+
-+ // Digital Rear Output + Rear Volume
-+ OP(0, 0x066, 0x0c0, 0x419, 0x400);
-+ OP(0, 0x067, 0x0c0, 0x41a, 0x401);
-+
-+ // Audigy Drive, Headphone out
-+ OP(6, 0x64, 0x0c0, 0x0c0, 0x400);
-+ OP(6, 0x65, 0x0c0, 0x0c0, 0x401);
-+
-+ // ac97 Recording
-+ OP(6, 0x76, 0x0c0, 0x0c0, 0x40);
-+ OP(6, 0x77, 0x0c0, 0x0c0, 0x41);
-+
-+ // Center = sub = Left/2 + Right/2
-+ OP(0xe, 0x400, 0x401, 0xcd, 0x400);
-+
-+ // center/sub Volume (master)
-+ OP(0, 0x06a, 0x0c0, 0x408, 0x400);
-+ OP(0, 0x06b, 0x0c0, 0x409, 0x400);
-+
-+ // Digital center/sub Volume (master)
-+ OP(0, 0x062, 0x0c0, 0x408, 0x400);
-+ OP(0, 0x063, 0x0c0, 0x409, 0x400);
-+
-+ ROUTING_PATCH_START(rpatch, "Routing");
-+ ROUTING_PATCH_END(rpatch);
-+
-+ /* delimiter patch */
-+ patch = PATCH(mgr, patch_n);
-+ patch->code_size = 0;
-
-+
-+ sblive_writeptr(card, 0x53, 0, 0);
-+ } else {
-+ for (i = 0; i < 512 ; i++)
-+ OP(6, 0x40, 0x40, 0x40, 0x40);
-+
-+ for (i = 0; i < 256; i++)
-+ sblive_writeptr_tag(card, 0,
-+ FXGPREGBASE + i, 0,
-+ TANKMEMADDRREGBASE + i, 0,
-+ TAGLIST_END);
-
-- /* fx12:Analog-Center */
-- OP(6, ANALOG_CENTER, 0x117, 0x40, 0x40);
-- CONNECT(MULTI_CENTER, ANALOG_CENTER);
-+
-+ pc = 0;
-
-- /* fx11:Analog-LFE */
-- OP(6, ANALOG_LFE, 0x118, 0x40, 0x40);
-- CONNECT(MULTI_LFE, ANALOG_LFE);
-+ //first free GPR = 0x11b
-+
-+
-+ /* FX volume correction and Volume control*/
-+ INPUT_PATCH_START(patch, "Pcm L vol", 0x0, 0);
-+ GET_OUTPUT_GPR(patch, 0x100, 0x0);
-+ GET_CONTROL_GPR(patch, 0x106, "Vol", 0, 0x7fffffff);
-+ GET_DYNAMIC_GPR(patch, 0x112);
-+
-+ OP(4, 0x112, 0x40, PCM_IN_L, 0x44); //*4
-+ OP(0, 0x100, 0x040, 0x112, 0x106); //*vol
-+ INPUT_PATCH_END(patch);
-+
-+
-+ INPUT_PATCH_START(patch, "Pcm R vol", 0x1, 0);
-+ GET_OUTPUT_GPR(patch, 0x101, 0x1);
-+ GET_CONTROL_GPR(patch, 0x107, "Vol", 0, 0x7fffffff);
-+ GET_DYNAMIC_GPR(patch, 0x112);
-+
-+ OP(4, 0x112, 0x40, PCM_IN_R, 0x44);
-+ OP(0, 0x101, 0x040, 0x112, 0x107);
-+
-+ INPUT_PATCH_END(patch);
-+
-+
-+ // CD-Digital In Volume control
-+ INPUT_PATCH_START(patch, "CD-Digital Vol L", 0x12, 0);
-+ GET_OUTPUT_GPR(patch, 0x10c, 0x12);
-+ GET_CONTROL_GPR(patch, 0x10d, "Vol", 0, 0x7fffffff);
-+
-+ OP(0, 0x10c, 0x040, SPDIF_CD_L, 0x10d);
-+ INPUT_PATCH_END(patch);
-+
-+ INPUT_PATCH_START(patch, "CD-Digital Vol R", 0x13, 0);
-+ GET_OUTPUT_GPR(patch, 0x10e, 0x13);
-+ GET_CONTROL_GPR(patch, 0x10f, "Vol", 0, 0x7fffffff);
-+
-+ OP(0, 0x10e, 0x040, SPDIF_CD_R, 0x10f);
-+ INPUT_PATCH_END(patch);
-+
-+ //Volume Correction for Multi-channel Inputs
-+ INPUT_PATCH_START(patch, "Multi-Channel Gain", 0x08, 0);
-+ patch->input=patch->output=0x3F00;
-+
-+ GET_OUTPUT_GPR(patch, 0x113, MULTI_FRONT_L);
-+ GET_OUTPUT_GPR(patch, 0x114, MULTI_FRONT_R);
-+ GET_OUTPUT_GPR(patch, 0x115, MULTI_REAR_L);
-+ GET_OUTPUT_GPR(patch, 0x116, MULTI_REAR_R);
-+ GET_OUTPUT_GPR(patch, 0x117, MULTI_CENTER);
-+ GET_OUTPUT_GPR(patch, 0x118, MULTI_LFE);
-+
-+ OP(4, 0x113, 0x40, MULTI_FRONT_L, 0x44);
-+ OP(4, 0x114, 0x40, MULTI_FRONT_R, 0x44);
-+ OP(4, 0x115, 0x40, MULTI_REAR_L, 0x44);
-+ OP(4, 0x116, 0x40, MULTI_REAR_R, 0x44);
-+ OP(4, 0x117, 0x40, MULTI_CENTER, 0x44);
-+ OP(4, 0x118, 0x40, MULTI_LFE, 0x44);
-+
-+ INPUT_PATCH_END(patch);
-
-- /* fx12:Digital-Center */
-- OP(6, DIGITAL_CENTER, 0x117, 0x40, 0x40);
-- CONNECT(MULTI_CENTER, DIGITAL_CENTER);
-
-- /* fx11:Analog-LFE */
-- OP(6, DIGITAL_LFE, 0x118, 0x40, 0x40);
-- CONNECT(MULTI_LFE, DIGITAL_LFE);
-+ //Routing patch start
-+ ROUTING_PATCH_START(rpatch, "Routing");
-+ GET_INPUT_GPR(rpatch, 0x100, 0x0);
-+ GET_INPUT_GPR(rpatch, 0x101, 0x1);
-+ GET_INPUT_GPR(rpatch, 0x10c, 0x12);
-+ GET_INPUT_GPR(rpatch, 0x10e, 0x13);
-+ GET_INPUT_GPR(rpatch, 0x113, MULTI_FRONT_L);
-+ GET_INPUT_GPR(rpatch, 0x114, MULTI_FRONT_R);
-+ GET_INPUT_GPR(rpatch, 0x115, MULTI_REAR_L);
-+ GET_INPUT_GPR(rpatch, 0x116, MULTI_REAR_R);
-+ GET_INPUT_GPR(rpatch, 0x117, MULTI_CENTER);
-+ GET_INPUT_GPR(rpatch, 0x118, MULTI_LFE);
-+
-+ GET_DYNAMIC_GPR(rpatch, 0x102);
-+ GET_DYNAMIC_GPR(rpatch, 0x103);
-+
-+ GET_OUTPUT_GPR(rpatch, 0x104, 0x8);
-+ GET_OUTPUT_GPR(rpatch, 0x105, 0x9);
-+ GET_OUTPUT_GPR(rpatch, 0x10a, 0x2);
-+ GET_OUTPUT_GPR(rpatch, 0x10b, 0x3);
-+
-+
-+ /* input buffer */
-+ OP(6, 0x102, AC97_IN_L, 0x40, 0x40);
-+ OP(6, 0x103, AC97_IN_R, 0x40, 0x40);
-+
-+
-+ /* Digital In + PCM + MULTI_FRONT-> AC97 out (front speakers)*/
-+ OP(6, AC97_FRONT_L, 0x100, 0x10c, 0x113);
-+
-+ CONNECT(MULTI_FRONT_L, AC97_FRONT_L);
-+ CONNECT(PCM_IN_L, AC97_FRONT_L);
-+ CONNECT(SPDIF_CD_L, AC97_FRONT_L);
-+
-+ OP(6, AC97_FRONT_R, 0x101, 0x10e, 0x114);
-+
-+ CONNECT(MULTI_FRONT_R, AC97_FRONT_R);
-+ CONNECT(PCM_IN_R, AC97_FRONT_R);
-+ CONNECT(SPDIF_CD_R, AC97_FRONT_R);
-+
-+ /* Digital In + PCM + AC97 In + PCM1 + MULTI_REAR --> Rear Channel */
-+ OP(6, 0x104, PCM1_IN_L, 0x100, 0x115);
-+ OP(6, 0x104, 0x104, 0x10c, 0x102);
-+
-+ CONNECT(MULTI_REAR_L, ANALOG_REAR_L);
-+ CONNECT(AC97_IN_L, ANALOG_REAR_L);
-+ CONNECT(PCM_IN_L, ANALOG_REAR_L);
-+ CONNECT(SPDIF_CD_L, ANALOG_REAR_L);
-+ CONNECT(PCM1_IN_L, ANALOG_REAR_L);
-+
-+ OP(6, 0x105, PCM1_IN_R, 0x101, 0x116);
-+ OP(6, 0x105, 0x105, 0x10e, 0x103);
-+
-+ CONNECT(MULTI_REAR_R, ANALOG_REAR_R);
-+ CONNECT(AC97_IN_R, ANALOG_REAR_R);
-+ CONNECT(PCM_IN_R, ANALOG_REAR_R);
-+ CONNECT(SPDIF_CD_R, ANALOG_REAR_R);
-+ CONNECT(PCM1_IN_R, ANALOG_REAR_R);
-+
-+ /* Digital In + PCM + AC97 In + MULTI_FRONT --> Digital out */
-+ OP(6, 0x10b, 0x100, 0x102, 0x10c);
-+ OP(6, 0x10b, 0x10b, 0x113, 0x40);
-+
-+ CONNECT(MULTI_FRONT_L, DIGITAL_OUT_L);
-+ CONNECT(PCM_IN_L, DIGITAL_OUT_L);
-+ CONNECT(AC97_IN_L, DIGITAL_OUT_L);
-+ CONNECT(SPDIF_CD_L, DIGITAL_OUT_L);
-+
-+ OP(6, 0x10a, 0x101, 0x103, 0x10e);
-+ OP(6, 0x10b, 0x10b, 0x114, 0x40);
-+
-+ CONNECT(MULTI_FRONT_R, DIGITAL_OUT_R);
-+ CONNECT(PCM_IN_R, DIGITAL_OUT_R);
-+ CONNECT(AC97_IN_R, DIGITAL_OUT_R);
-+ CONNECT(SPDIF_CD_R, DIGITAL_OUT_R);
-+
-+ /* AC97 In --> ADC Recording Buffer */
-+ OP(6, ADC_REC_L, 0x102, 0x40, 0x40);
-+
-+ CONNECT(AC97_IN_L, ADC_REC_L);
-+
-+ OP(6, ADC_REC_R, 0x103, 0x40, 0x40);
-+
-+ CONNECT(AC97_IN_R, ADC_REC_R);
-+
-+
-+ /* fx12:Analog-Center */
-+ OP(6, ANALOG_CENTER, 0x117, 0x40, 0x40);
-+ CONNECT(MULTI_CENTER, ANALOG_CENTER);
-+
-+ /* fx11:Analog-LFE */
-+ OP(6, ANALOG_LFE, 0x118, 0x40, 0x40);
-+ CONNECT(MULTI_LFE, ANALOG_LFE);
-+
-+ /* fx12:Digital-Center */
-+ OP(6, DIGITAL_CENTER, 0x117, 0x40, 0x40);
-+ CONNECT(MULTI_CENTER, DIGITAL_CENTER);
-+
-+ /* fx11:Analog-LFE */
-+ OP(6, DIGITAL_LFE, 0x118, 0x40, 0x40);
-+ CONNECT(MULTI_LFE, DIGITAL_LFE);
-
-- ROUTING_PATCH_END(rpatch);
-+ ROUTING_PATCH_END(rpatch);
-
-
-- // Rear volume control
-- OUTPUT_PATCH_START(patch, "Vol Rear L", 0x8, 0);
-- GET_INPUT_GPR(patch, 0x104, 0x8);
-- GET_CONTROL_GPR(patch, 0x119, "Vol", 0, 0x7fffffff);
-+ // Rear volume control
-+ OUTPUT_PATCH_START(patch, "Vol Rear L", 0x8, 0);
-+ GET_INPUT_GPR(patch, 0x104, 0x8);
-+ GET_CONTROL_GPR(patch, 0x119, "Vol", 0, 0x7fffffff);
-
-- OP(0, ANALOG_REAR_L, 0x040, 0x104, 0x119);
-- OUTPUT_PATCH_END(patch);
-+ OP(0, ANALOG_REAR_L, 0x040, 0x104, 0x119);
-+ OUTPUT_PATCH_END(patch);
-
-+ OUTPUT_PATCH_START(patch, "Vol Rear R", 0x9, 0);
-+ GET_INPUT_GPR(patch, 0x105, 0x9);
-+ GET_CONTROL_GPR(patch, 0x11a, "Vol", 0, 0x7fffffff);
-
-- OUTPUT_PATCH_START(patch, "Vol Rear R", 0x9, 0);
-- GET_INPUT_GPR(patch, 0x105, 0x9);
-- GET_CONTROL_GPR(patch, 0x11a, "Vol", 0, 0x7fffffff);
-+ OP(0, ANALOG_REAR_R, 0x040, 0x105, 0x11a);
-+ OUTPUT_PATCH_END(patch);
-
-- OP(0, ANALOG_REAR_R, 0x040, 0x105, 0x11a);
-- OUTPUT_PATCH_END(patch);
-
-+ //Master volume control on front-digital
-+ OUTPUT_PATCH_START(patch, "Vol Master L", 0x2, 1);
-+ GET_INPUT_GPR(patch, 0x10a, 0x2);
-+ GET_CONTROL_GPR(patch, 0x108, "Vol", 0, 0x7fffffff);
-
-- //Master volume control on front-digital
-- OUTPUT_PATCH_START(patch, "Vol Master L", 0x2, 1);
-- GET_INPUT_GPR(patch, 0x10a, 0x2);
-- GET_CONTROL_GPR(patch, 0x108, "Vol", 0, 0x7fffffff);
-+ OP(0, DIGITAL_OUT_L, 0x040, 0x10a, 0x108);
-+ OUTPUT_PATCH_END(patch);
-
-- OP(0, DIGITAL_OUT_L, 0x040, 0x10a, 0x108);
-- OUTPUT_PATCH_END(patch);
-
-+ OUTPUT_PATCH_START(patch, "Vol Master R", 0x3, 1);
-+ GET_INPUT_GPR(patch, 0x10b, 0x3);
-+ GET_CONTROL_GPR(patch, 0x109, "Vol", 0, 0x7fffffff);
-
-- OUTPUT_PATCH_START(patch, "Vol Master R", 0x3, 1);
-- GET_INPUT_GPR(patch, 0x10b, 0x3);
-- GET_CONTROL_GPR(patch, 0x109, "Vol", 0, 0x7fffffff);
-+ OP(0, DIGITAL_OUT_R, 0x040, 0x10b, 0x109);
-+ OUTPUT_PATCH_END(patch);
-
-- OP(0, DIGITAL_OUT_R, 0x040, 0x10b, 0x109);
-- OUTPUT_PATCH_END(patch);
-
-+ /* delimiter patch */
-+ patch = PATCH(mgr, patch_n);
-+ patch->code_size = 0;
-
-- /* delimiter patch */
-- patch = PATCH(mgr, patch_n);
-- patch->code_size = 0;
--
-- sblive_writeptr(card, DBG, 0, 0);
-+
-+ sblive_writeptr(card, DBG, 0, 0);
-+ }
-
- mgr->lock = SPIN_LOCK_UNLOCKED;
-
-+ // Set up Volume controls, try to keep this the same for both Audigy and Live
-
- //Master volume
- mgr->ctrl_gpr[SOUND_MIXER_VOLUME][0] = 8;
-@@ -749,8 +921,16 @@ static int __devinit fx_init(struct emu1
- emu10k1_set_volume_gpr(card, 0xd, left, VOL_5BIT);
- emu10k1_set_volume_gpr(card, 0xf, right, VOL_5BIT);
-
-- //hard wire the ac97's pcm, we'll do that in dsp code instead.
-- emu10k1_ac97_write(card->ac97, 0x18, 0x0);
-+
-+ //hard wire the ac97's pcm, pcm volume is done above using dsp code.
-+ if (card->is_audigy)
-+ //for Audigy, we mute it and use the philips 6 channel DAC instead
-+ emu10k1_ac97_write(card->ac97, 0x18, 0x8000);
-+ else
-+ //For the Live we hardwire it to full volume
-+ emu10k1_ac97_write(card->ac97, 0x18, 0x0);
-+
-+ //remove it from the ac97_codec's control
- card->ac97_supported_mixers &= ~SOUND_MASK_PCM;
- card->ac97_stereo_mixers &= ~SOUND_MASK_PCM;
-
-@@ -789,6 +969,13 @@ static int __devinit hw_init(struct emu1
- SOLEH, 0,
- TAGLIST_END);
-
-+ if (card->is_audigy) {
-+ sblive_writeptr_tag(card,0,
-+ 0x5e,0xf00,
-+ 0x5f,0x3,
-+ TAGLIST_END);
-+ }
-+
- /* Init envelope engine */
- for (nCh = 0; nCh < NUM_G; nCh++) {
- sblive_writeptr_tag(card, nCh,
-@@ -824,6 +1011,21 @@ static int __devinit hw_init(struct emu1
- ENVVAL, 0,
- TAGLIST_END);
- sblive_writeptr(card, CPF, nCh, 0);
-+ /*
-+ Audigy FXRT initialization
-+ reversed eng'd, may not be accurate.
-+ */
-+ if (card->is_audigy) {
-+ sblive_writeptr_tag(card,nCh,
-+ 0x4c,0x0,
-+ 0x4d,0x0,
-+ 0x4e,0x0,
-+ 0x4f,0x0,
-+ A_FXRT1, 0x3f3f3f3f,
-+ A_FXRT2, 0x3f3f3f3f,
-+ A_SENDAMOUNTS, 0,
-+ TAGLIST_END);
-+ }
- }
-
-
-@@ -858,6 +1060,25 @@ static int __devinit hw_init(struct emu1
-
- TAGLIST_END);
-
-+ if (card->is_audigy && (card->chiprev == 4)) {
-+ /* Hacks for Alice3 to work independent of haP16V driver */
-+ u32 tmp;
-+
-+ //Setup SRCMulti_I2S SamplingRate
-+ tmp = sblive_readptr(card, A_SPDIF_SAMPLERATE, 0);
-+ tmp &= 0xfffff1ff;
-+ tmp |= (0x2<<9);
-+ sblive_writeptr(card, A_SPDIF_SAMPLERATE, 0, tmp);
-+
-+ /* Setup SRCSel (Enable Spdif,I2S SRCMulti) */
-+ emu10k1_writefn0(card, 0x20, 0x600000);
-+ emu10k1_writefn0(card, 0x24, 0x14);
-+
-+ /* Setup SRCMulti Input Audio Enable */
-+ emu10k1_writefn0(card, 0x20, 0x6E0000);
-+ emu10k1_writefn0(card, 0x24, 0xFF00FF00);
-+ }
-+
- ret = fx_init(card); /* initialize effects engine */
- if (ret < 0)
- return ret;
-@@ -905,16 +1126,30 @@ static int __devinit hw_init(struct emu1
- /* Lock Tank Memory = 1 */
- /* Lock Sound Memory = 0 */
- /* Auto Mute = 1 */
--
-- if (card->model == 0x20 || card->model == 0xc400 ||
-- (card->model == 0x21 && card->chiprev < 6))
-- emu10k1_writefn0(card, HCFG, HCFG_AUDIOENABLE | HCFG_LOCKTANKCACHE_MASK | HCFG_AUTOMUTE);
-- else
-- emu10k1_writefn0(card, HCFG, HCFG_AUDIOENABLE | HCFG_LOCKTANKCACHE_MASK | HCFG_AUTOMUTE | HCFG_JOYENABLE);
--
-+ if (card->is_audigy) {
-+ if (card->chiprev == 4)
-+ emu10k1_writefn0(card, HCFG, HCFG_AUDIOENABLE | HCFG_AC3ENABLE_CDSPDIF | HCFG_AC3ENABLE_GPSPDIF | HCFG_AUTOMUTE | HCFG_JOYENABLE);
-+ else
-+ emu10k1_writefn0(card, HCFG, HCFG_AUDIOENABLE | HCFG_AUTOMUTE | HCFG_JOYENABLE);
-+ } else {
-+ if (card->model == 0x20 || card->model == 0xc400 ||
-+ (card->model == 0x21 && card->chiprev < 6))
-+ emu10k1_writefn0(card, HCFG, HCFG_AUDIOENABLE | HCFG_LOCKTANKCACHE_MASK | HCFG_AUTOMUTE);
-+ else
-+ emu10k1_writefn0(card, HCFG, HCFG_AUDIOENABLE | HCFG_LOCKTANKCACHE_MASK | HCFG_AUTOMUTE | HCFG_JOYENABLE);
-+ }
- /* Enable Vol_Ctrl irqs */
- emu10k1_irq_enable(card, INTE_VOLINCRENABLE | INTE_VOLDECRENABLE | INTE_MUTEENABLE | INTE_FXDSPENABLE);
-
-+ if (card->is_audigy && (card->chiprev == 4)) {
-+ /* Unmute Analog now. Set GPO6 to 1 for Apollo.
-+ * This has to be done after init ALice3 I2SOut beyond 48KHz.
-+ * So, sequence is important. */
-+ u32 tmp = emu10k1_readfn0(card, A_IOCFG);
-+ tmp |= 0x0040;
-+ emu10k1_writefn0(card, A_IOCFG, tmp);
-+ }
-+
- /* FIXME: TOSLink detection */
- card->has_toslink = 0;
-
-@@ -967,7 +1202,7 @@ static int __devinit emu10k1_init(struct
- return 0;
- }
-
--static void __devinit emu10k1_cleanup(struct emu10k1_card *card)
-+static void emu10k1_cleanup(struct emu10k1_card *card)
- {
- int ch;
-
-@@ -1012,6 +1247,8 @@ static void __devinit emu10k1_cleanup(st
- SOLEH, 0,
- TAGLIST_END);
-
-+ if (card->is_audigy)
-+ sblive_writeptr(card, 0, A_DBG, A_DBG_SINGLE_STEP);
-
- pci_free_consistent(card->pci_dev, card->virtualpagetable.size, card->virtualpagetable.addr, card->virtualpagetable.dma_handle);
- pci_free_consistent(card->pci_dev, card->silentpage.size, card->silentpage.addr, card->silentpage.dma_handle);
-@@ -1074,6 +1311,9 @@ static int __devinit emu10k1_probe(struc
- card_names[pci_id->driver_data], card->chiprev, card->model, card->iobase,
- card->iobase + card->length - 1, card->irq);
-
-+ if (pci_id->device == PCI_DEVICE_ID_CREATIVE_AUDIGY)
-+ card->is_audigy = 1;
-+
- pci_read_config_dword(pci_dev, PCI_SUBSYSTEM_VENDOR_ID, &subsysvid);
- card->is_aps = (subsysvid == EMU_APS_SUBID);
-
-@@ -1083,13 +1323,13 @@ static int __devinit emu10k1_probe(struc
- init_waitqueue_head(&card->open_wait);
-
- ret = emu10k1_audio_init(card);
-- if(ret < 0) {
-+ if (ret < 0) {
- printk(KERN_ERR "emu10k1: cannot initialize audio devices\n");
- goto err_audio;
- }
-
- ret = emu10k1_mixer_init(card);
-- if(ret < 0) {
-+ if (ret < 0) {
- printk(KERN_ERR "emu10k1: cannot initialize AC97 codec\n");
- goto err_mixer;
- }
-@@ -1109,10 +1349,28 @@ static int __devinit emu10k1_probe(struc
- if (card->is_aps)
- emu10k1_ecard_init(card);
-
-+ ret = emu10k1_register_devices(card);
-+ if (ret < 0)
-+ goto err_register;
-+
-+ /* proc entries must be created after registering devices, as
-+ * emu10k1_info_proc prints card->audio_dev &co. */
-+ ret = emu10k1_proc_init(card);
-+ if (ret < 0) {
-+ printk(KERN_ERR "emu10k1: cannot initialize proc directory\n");
-+ goto err_proc;
-+ }
-+
- list_add(&card->list, &emu10k1_devs);
-
- return 0;
-
-+err_proc:
-+ emu10k1_unregister_devices(card);
-+
-+err_register:
-+ emu10k1_cleanup(card);
-+
- err_emu10k1_init:
- emu10k1_midi_cleanup(card);
-
-@@ -1141,9 +1399,11 @@ static void __devexit emu10k1_remove(str
-
- list_del(&card->list);
-
-+ emu10k1_unregister_devices(card);
- emu10k1_cleanup(card);
- emu10k1_midi_cleanup(card);
- emu10k1_mixer_cleanup(card);
-+ emu10k1_proc_cleanup(card);
- emu10k1_audio_cleanup(card);
- free_irq(card->irq, card);
- release_region(card->iobase, card->length);
---- linux-2.6.0-test1/sound/oss/emu10k1/midi.h 2003-06-14 12:18:00.000000000 -0700
-+++ 25/sound/oss/emu10k1/midi.h 2003-07-19 17:03:51.000000000 -0700
-@@ -52,4 +52,27 @@ struct emu10k1_mididevice
- struct list_head mid_hdrs;
- };
-
-+/* uncomment next line to use midi port on Audigy drive */
-+//#define USE_AUDIGY_DRIVE_MIDI
-+
-+#ifdef USE_AUDIGY_DRIVE_MIDI
-+#define A_MUDATA A_MUDATA2
-+#define A_MUCMD A_MUCMD2
-+#define A_MUSTAT A_MUCMD2
-+#define A_IPR_MIDITRANSBUFEMPTY A_IPR_MIDITRANSBUFEMPTY2
-+#define A_IPR_MIDIRECVBUFEMPTY A_IPR_MIDIRECVBUFEMPTY2
-+#define A_INTE_MIDITXENABLE A_INTE_MIDITXENABLE2
-+#define A_INTE_MIDIRXENABLE A_INTE_MIDIRXENABLE2
-+#else
-+#define A_MUDATA A_MUDATA1
-+#define A_MUCMD A_MUCMD1
-+#define A_MUSTAT A_MUCMD1
-+#define A_IPR_MIDITRANSBUFEMPTY A_IPR_MIDITRANSBUFEMPTY1
-+#define A_IPR_MIDIRECVBUFEMPTY A_IPR_MIDIRECVBUFEMPTY1
-+#define A_INTE_MIDITXENABLE A_INTE_MIDITXENABLE1
-+#define A_INTE_MIDIRXENABLE A_INTE_MIDIRXENABLE1
-+#endif
-+
-+
- #endif /* _MIDI_H */
-+
---- linux-2.6.0-test1/sound/oss/emu10k1/mixer.c 2003-07-13 21:44:35.000000000 -0700
-+++ 25/sound/oss/emu10k1/mixer.c 2003-07-19 17:03:51.000000000 -0700
-@@ -136,7 +136,7 @@ static void set_bass(struct emu10k1_card
- r = (r * 40 + 50) / 100;
-
- for (i = 0; i < 5; i++)
-- sblive_writeptr(card, GPR_BASE + card->mgr.ctrl_gpr[SOUND_MIXER_BASS][0] + i, 0, bass_table[l][i]);
-+ sblive_writeptr(card, (card->is_audigy ? A_GPR_BASE : GPR_BASE) + card->mgr.ctrl_gpr[SOUND_MIXER_BASS][0] + i, 0, bass_table[l][i]);
- }
-
- static void set_treble(struct emu10k1_card *card, int l, int r)
-@@ -147,7 +147,7 @@ static void set_treble(struct emu10k1_ca
- r = (r * 40 + 50) / 100;
-
- for (i = 0; i < 5; i++)
-- sblive_writeptr(card, GPR_BASE + card->mgr.ctrl_gpr[SOUND_MIXER_TREBLE][0] + i , 0, treble_table[l][i]);
-+ sblive_writeptr(card, (card->is_audigy ? A_GPR_BASE : GPR_BASE) + card->mgr.ctrl_gpr[SOUND_MIXER_TREBLE][0] + i , 0, treble_table[l][i]);
- }
-
- const char volume_params[SOUND_MIXER_NRDEVICES]= {
-@@ -206,22 +206,25 @@ static int emu10k1_private_mixer(struct
- switch (ctl->cmd) {
- #ifdef DBGEMU
- case CMD_WRITEFN0:
-- emu10k1_writefn0(card, ctl->val[0], ctl->val[1]);
-+ emu10k1_writefn0_2(card, ctl->val[0], ctl->val[1], ctl->val[2]);
- break;
--
-+#endif
- case CMD_WRITEPTR:
-- if (ctl->val[1] >= 0x40 || ctl->val[0] > 0xff) {
-+#ifdef DBGEMU
-+ if (ctl->val[1] >= 0x40 || ctl->val[0] >= 0x1000) {
-+#else
-+ if (ctl->val[1] >= 0x40 || ctl->val[0] >= 0x1000 || ((ctl->val[0] < 0x100 ) &&
-+ //Any register allowed raw access goes here:
-+ (ctl->val[0] != A_SPDIF_SAMPLERATE) && (ctl->val[0] != A_DBG)
-+ )
-+ ) {
-+#endif
- ret = -EINVAL;
- break;
- }
--
-- if ((ctl->val[0] & 0x7ff) > 0x3f)
-- ctl->val[1] = 0x00;
--
- sblive_writeptr(card, ctl->val[0], ctl->val[1], ctl->val[2]);
--
- break;
--#endif
-+
- case CMD_READFN0:
- ctl->val[2] = emu10k1_readfn0(card, ctl->val[0]);
-
-@@ -286,16 +289,13 @@ static int emu10k1_private_mixer(struct
-
- case CMD_GETVOICEPARAM:
- ctl->val[0] = card->waveout.send_routing[0];
-- ctl->val[1] = card->waveout.send_a[0] | card->waveout.send_b[0] << 8 |
-- card->waveout.send_c[0] << 16 | card->waveout.send_d[0] << 24;
-+ ctl->val[1] = card->waveout.send_dcba[0];
-
- ctl->val[2] = card->waveout.send_routing[1];
-- ctl->val[3] = card->waveout.send_a[1] | card->waveout.send_b[1] << 8 |
-- card->waveout.send_c[1] << 16 | card->waveout.send_d[1] << 24;
-+ ctl->val[3] = card->waveout.send_dcba[1];
-
- ctl->val[4] = card->waveout.send_routing[2];
-- ctl->val[5] = card->waveout.send_a[2] | card->waveout.send_b[2] << 8 |
-- card->waveout.send_c[2] << 16 | card->waveout.send_d[2] << 24;
-+ ctl->val[5] = card->waveout.send_dcba[2];
-
- if (copy_to_user((void *) arg, ctl, sizeof(struct mixer_private_ioctl)))
- ret = -EFAULT;
-@@ -303,23 +303,14 @@ static int emu10k1_private_mixer(struct
- break;
-
- case CMD_SETVOICEPARAM:
-- card->waveout.send_routing[0] = ctl->val[0] & 0xffff;
-- card->waveout.send_a[0] = ctl->val[1] & 0xff;
-- card->waveout.send_b[0] = (ctl->val[1] >> 8) & 0xff;
-- card->waveout.send_c[0] = (ctl->val[1] >> 16) & 0xff;
-- card->waveout.send_d[0] = (ctl->val[1] >> 24) & 0xff;
--
-- card->waveout.send_routing[1] = ctl->val[2] & 0xffff;
-- card->waveout.send_a[1] = ctl->val[3] & 0xff;
-- card->waveout.send_b[1] = (ctl->val[3] >> 8) & 0xff;
-- card->waveout.send_c[1] = (ctl->val[3] >> 16) & 0xff;
-- card->waveout.send_d[1] = (ctl->val[3] >> 24) & 0xff;
--
-- card->waveout.send_routing[2] = ctl->val[4] & 0xffff;
-- card->waveout.send_a[2] = ctl->val[5] & 0xff;
-- card->waveout.send_b[2] = (ctl->val[5] >> 8) & 0xff;
-- card->waveout.send_c[2] = (ctl->val[5] >> 16) & 0xff;
-- card->waveout.send_d[2] = (ctl->val[5] >> 24) & 0xff;
-+ card->waveout.send_routing[0] = ctl->val[0];
-+ card->waveout.send_dcba[0] = ctl->val[1];
-+
-+ card->waveout.send_routing[1] = ctl->val[2];
-+ card->waveout.send_dcba[1] = ctl->val[3];
-+
-+ card->waveout.send_routing[2] = ctl->val[4];
-+ card->waveout.send_dcba[2] = ctl->val[5];
-
- break;
-
-@@ -416,12 +407,16 @@ static int emu10k1_private_mixer(struct
- break;
-
- case CMD_SETGPOUT:
-- if (ctl->val[0] > 2 || ctl->val[1] > 1) {
-+ if ( ((ctl->val[0] > 2) && (!card->is_audigy))
-+ || (ctl->val[0] > 15) || ctl->val[1] > 1) {
- ret= -EINVAL;
- break;
- }
-
-- emu10k1_writefn0(card, (1 << 24) | (((ctl->val[0]) + 10) << 16) | HCFG, ctl->val[1]);
-+ if (card->is_audigy)
-+ emu10k1_writefn0(card, (1 << 24) | ((ctl->val[0]) << 16) | A_IOCFG, ctl->val[1]);
-+ else
-+ emu10k1_writefn0(card, (1 << 24) | (((ctl->val[0]) + 10) << 16) | HCFG, ctl->val[1]);
- break;
-
- case CMD_GETGPR2OSS:
-@@ -493,13 +488,20 @@ static int emu10k1_private_mixer(struct
- break;
-
- case CMD_PRIVATE3_VERSION:
-- ctl->val[0]=PRIVATE3_VERSION;
-+ ctl->val[0] = PRIVATE3_VERSION; //private3 version
-+ ctl->val[1] = MAJOR_VER; //major driver version
-+ ctl->val[2] = MINOR_VER; //minor driver version
-+ ctl->val[3] = card->is_audigy; //1=card is audigy
-+
-+ if (card->is_audigy)
-+ ctl->val[4]=emu10k1_readfn0(card, 0x18);
-+
- if (copy_to_user((void *) arg, ctl, sizeof(struct mixer_private_ioctl)))
- ret = -EFAULT;
- break;
-
- case CMD_AC97_BOOST:
-- if(ctl->val[0])
-+ if (ctl->val[0])
- emu10k1_ac97_write(card->ac97, 0x18, 0x0);
- else
- emu10k1_ac97_write(card->ac97, 0x18, 0x0808);
-@@ -556,7 +558,7 @@ static int emu10k1_private_mixer(struct
-
- card->tankmem.size = size;
-
-- sblive_writeptr_tag(card, 0, TCB, (u32) card->tankmem.dma_handle, TCBS, size_reg, TAGLIST_END);
-+ sblive_writeptr_tag(card, 0, TCB, (u32) card->tankmem.dma_handle, TCBS,(u32) size_reg, TAGLIST_END);
-
- emu10k1_writefn0(card, HCFG_LOCKTANKCACHE, 0);
- }
-@@ -623,8 +625,13 @@ static int emu10k1_mixer_ioctl(struct in
- if (cmd == SOUND_MIXER_INFO) {
- mixer_info info;
-
-- strncpy(info.id, card->ac97->name, sizeof(info.id));
-- strncpy(info.name, "Creative SBLive - Emu10k1", sizeof(info.name));
-+ strlcpy(info.id, card->ac97->name, sizeof(info.id));
-+
-+ if (card->is_audigy)
-+ strlcpy(info.name, "Audigy - Emu10k1", sizeof(info.name));
-+ else
-+ strlcpy(info.name, "Creative SBLive - Emu10k1", sizeof(info.name));
-+
- info.modify_counter = card->ac97->modcnt;
-
- if (copy_to_user((void *)arg, &info, sizeof(info)))
---- linux-2.6.0-test1/sound/oss/emu10k1/passthrough.c 2003-06-14 12:18:09.000000000 -0700
-+++ 25/sound/oss/emu10k1/passthrough.c 2003-07-19 17:03:51.000000000 -0700
-@@ -109,7 +109,7 @@ static int pt_putblock(struct emu10k1_wa
- return 0;
- }
-
--static int pt_setup(struct emu10k1_wavedevice *wave_dev)
-+int emu10k1_pt_setup(struct emu10k1_wavedevice *wave_dev)
- {
- u32 bits;
- struct emu10k1_card *card = wave_dev->card;
-@@ -155,7 +155,7 @@ ssize_t emu10k1_pt_write(struct file *fi
- pt->prepend_size = 0;
- if (pt->buf == NULL)
- return -ENOMEM;
-- pt_setup(wave_dev);
-+ emu10k1_pt_setup(wave_dev);
- }
- if (pt->prepend_size) {
- int needed = PT_BLOCKSIZE - pt->prepend_size;
-@@ -208,13 +208,14 @@ void emu10k1_pt_stop(struct emu10k1_card
-
- if (pt->state != PT_STATE_INACTIVE) {
- DPF(2, "digital pass-through stopped\n");
-- sblive_writeptr(card, GPR_BASE + pt->enable_gpr, 0, 0);
-+ sblive_writeptr(card, (card->is_audigy ? A_GPR_BASE : GPR_BASE) + pt->enable_gpr, 0, 0);
- for (i = 0; i < 3; i++) {
- if (pt->spcs_to_use & (1 << i))
- sblive_writeptr(card, SPCS0 + i, 0, pt->old_spcs[i]);
- }
- pt->state = PT_STATE_INACTIVE;
-- kfree(pt->buf);
-+ if(pt->buf)
-+ kfree(pt->buf);
- }
- }
-
---- linux-2.6.0-test1/sound/oss/emu10k1/passthrough.h 2003-06-14 12:18:21.000000000 -0700
-+++ 25/sound/oss/emu10k1/passthrough.h 2003-07-19 17:03:51.000000000 -0700
-@@ -63,7 +63,36 @@ struct pt_data
- spinlock_t lock;
- };
-
-+/*
-+ Passthrough can be done in two methods:
-+
-+ Method 1 : tram
-+ In original emu10k1, we couldn't bypass the sample rate converters. Even at 48kHz
-+ (the internal sample rate of the emu10k1) the samples would get messed up.
-+ To over come this, samples are copied into the tram and a special dsp patch copies
-+ the samples out and generates interrupts when a block has finnished playing.
-+
-+ Method 2 : Interpolator bypass
-+
-+ Creative fixed the sample rate convert problem in emu10k1 rev 7 and higher
-+ (including the emu10k2 (audigy)). This allows us to use the regular, and much simpler
-+ playback method.
-+
-+
-+ In both methods, dsp code is used to mux audio and passthrough. This ensures that the spdif
-+ doesn't receive audio and pasthrough data at the same time. The spdif flag SPCS_NOTAUDIODATA
-+ is set to tell
-+
-+ */
-+
-+// emu10k1 revs greater than or equal to 7 can use method2
-+
-+#define USE_PT_METHOD2 (card->is_audigy)
-+#define USE_PT_METHOD1 !USE_PT_METHOD2
-+
- ssize_t emu10k1_pt_write(struct file *file, const char *buf, size_t count);
-+
-+int emu10k1_pt_setup(struct emu10k1_wavedevice *wave_dev);
- void emu10k1_pt_stop(struct emu10k1_card *card);
- void emu10k1_pt_waveout_update(struct emu10k1_wavedevice *wave_dev);
-
---- linux-2.6.0-test1/sound/oss/emu10k1/recmgr.c 2003-06-14 12:18:52.000000000 -0700
-+++ 25/sound/oss/emu10k1/recmgr.c 2003-07-19 17:03:51.000000000 -0700
-@@ -74,7 +74,7 @@ void emu10k1_set_record_src(struct emu10
- DPF(2, "recording source: AC97\n");
- buffer->sizereg = ADCBS;
- buffer->addrreg = ADCBA;
-- buffer->idxreg = ADCIDX_IDX;
-+ buffer->idxreg = card->is_audigy ? A_ADCIDX_IDX : ADCIDX_IDX;
-
- switch (wiinst->format.samplingrate) {
- case 0xBB80:
-@@ -95,21 +95,27 @@ void emu10k1_set_record_src(struct emu10
- case 0x3E80:
- buffer->adcctl = ADCCR_SAMPLERATE_16;
- break;
-+ // FIXME: audigy supports 12kHz recording
-+ /*
-+ case ????:
-+ buffer->adcctl = A_ADCCR_SAMPLERATE_12;
-+ break;
-+ */
- case 0x2B11:
-- buffer->adcctl = ADCCR_SAMPLERATE_11;
-+ buffer->adcctl = card->is_audigy ? A_ADCCR_SAMPLERATE_11 : ADCCR_SAMPLERATE_11;
- break;
- case 0x1F40:
-- buffer->adcctl = ADCCR_SAMPLERATE_8;
-+ buffer->adcctl = card->is_audigy ? A_ADCCR_SAMPLERATE_8 : ADCCR_SAMPLERATE_8;
- break;
- default:
- BUG();
- break;
- }
-
-- buffer->adcctl |= ADCCR_LCHANENABLE;
-+ buffer->adcctl |= card->is_audigy ? A_ADCCR_LCHANENABLE : ADCCR_LCHANENABLE;
-
- if (wiinst->format.channels == 2)
-- buffer->adcctl |= ADCCR_RCHANENABLE;
-+ buffer->adcctl |= card->is_audigy ? A_ADCCR_RCHANENABLE : ADCCR_RCHANENABLE;
-
- break;
-
---- linux-2.6.0-test1/sound/oss/emu10k1/voicemgr.c 2003-06-14 12:18:23.000000000 -0700
-+++ 25/sound/oss/emu10k1/voicemgr.c 2003-07-19 17:03:51.000000000 -0700
-@@ -32,6 +32,34 @@
- #include "voicemgr.h"
- #include "8010.h"
-
-+#define PITCH_48000 0x00004000
-+#define PITCH_96000 0x00008000
-+#define PITCH_85000 0x00007155
-+#define PITCH_80726 0x00006ba2
-+#define PITCH_67882 0x00005a82
-+#define PITCH_57081 0x00004c1c
-+
-+u32 emu10k1_select_interprom(struct emu10k1_card *card, struct emu_voice *voice)
-+{
-+ if(voice->pitch_target==PITCH_48000)
-+ return CCCA_INTERPROM_0;
-+ else if(voice->pitch_target<PITCH_48000)
-+ return CCCA_INTERPROM_1;
-+ else if(voice->pitch_target>=PITCH_96000)
-+ return CCCA_INTERPROM_0;
-+ else if(voice->pitch_target>=PITCH_85000)
-+ return CCCA_INTERPROM_6;
-+ else if(voice->pitch_target>=PITCH_80726)
-+ return CCCA_INTERPROM_5;
-+ else if(voice->pitch_target>=PITCH_67882)
-+ return CCCA_INTERPROM_4;
-+ else if(voice->pitch_target>=PITCH_57081)
-+ return CCCA_INTERPROM_3;
-+ else
-+ return CCCA_INTERPROM_2;
-+}
-+
-+
- /**
- * emu10k1_voice_alloc_buffer -
- *
-@@ -216,17 +244,25 @@ void emu10k1_voice_playback_setup(struct
- voice->start += start;
-
- for (i = 0; i < (voice->flags & VOICE_FLAGS_STEREO ? 2 : 1); i++) {
-- sblive_writeptr(card, FXRT, voice->num + i, voice->params[i].send_routing << 16);
-+ if (card->is_audigy) {
-+ sblive_writeptr(card, A_FXRT1, voice->num + i, voice->params[i].send_routing);
-+ sblive_writeptr(card, A_FXRT2, voice->num + i, voice->params[i].send_routing2);
-+ sblive_writeptr(card, A_SENDAMOUNTS, voice->num + i, voice->params[i].send_hgfe);
-+ } else {
-+ sblive_writeptr(card, FXRT, voice->num + i, voice->params[i].send_routing << 16);
-+ }
-
- /* Stop CA */
- /* Assumption that PT is already 0 so no harm overwriting */
-- sblive_writeptr(card, PTRX, voice->num + i, (voice->params[i].send_a << 8) | voice->params[i].send_b);
-+ sblive_writeptr(card, PTRX, voice->num + i, ((voice->params[i].send_dcba & 0xff) << 8)
-+ | ((voice->params[i].send_dcba & 0xff00) >> 8));
-
- sblive_writeptr_tag(card, voice->num + i,
- /* CSL, ST, CA */
-- DSL, voice->endloop | (voice->params[i].send_d << 24),
-- PSST, voice->startloop | (voice->params[i].send_c << 24),
-- CCCA, (voice->start) | CCCA_INTERPROM_0 | ((voice->flags & VOICE_FLAGS_16BIT) ? 0 : CCCA_8BITSELECT),
-+ DSL, voice->endloop | (voice->params[i].send_dcba & 0xff000000),
-+ PSST, voice->startloop | ((voice->params[i].send_dcba & 0x00ff0000) << 8),
-+ CCCA, (voice->start) | emu10k1_select_interprom(card,voice) |
-+ ((voice->flags & VOICE_FLAGS_16BIT) ? 0 : CCCA_8BITSELECT),
- /* Clear filter delay memory */
- Z1, 0,
- Z2, 0,
---- linux-2.6.0-test1/sound/oss/emu10k1/voicemgr.h 2003-06-14 12:18:23.000000000 -0700
-+++ 25/sound/oss/emu10k1/voicemgr.h 2003-07-19 17:03:51.000000000 -0700
-@@ -48,11 +48,13 @@ struct voice_param
- /* FX bus amount send */
-
- u32 send_routing;
-+ // audigy only:
-+ u32 send_routing2;
-+
-+ u32 send_dcba;
-+ // audigy only:
-+ u32 send_hgfe;
-
-- u32 send_a;
-- u32 send_b;
-- u32 send_c;
-- u32 send_d;
-
- u32 initial_fc;
- u32 fc_target;
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/sound/oss/hal2.c 2003-07-19 17:03:51.000000000 -0700
-@@ -0,0 +1,1498 @@
-+/*
-+ * Driver for HAL2 sound processors
-+ * Copyright (c) 2001, 2002 Ladislav Michl <ladis@psi.cz>
-+ *
-+ * Based on Ulf Carlsson's code.
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+ *
-+ * Supported devices:
-+ * /dev/dsp standard dsp device, (mostly) OSS compatible
-+ * /dev/mixer standard mixer device, (mostly) OSS compatible
-+ *
-+ * BUGS:
-+ * + Driver currently supports indigo mode only.
-+ * + Recording doesn't work. I guess that it is caused by PBUS channel
-+ * misconfiguration, but until I get relevant info I'm unable to fix it.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/sched.h>
-+#include <linux/init.h>
-+#include <linux/slab.h>
-+#include <linux/poll.h>
-+#include <linux/sound.h>
-+#include <linux/soundcard.h>
-+#include <asm/io.h>
-+#include <asm/uaccess.h>
-+#include <asm/sgi/sgint23.h>
-+
-+#include "hal2.h"
-+
-+#if 0
-+#define DEBUG(args...) printk(args)
-+#else
-+#define DEBUG(args...)
-+#endif
-+
-+#if 0
-+#define DEBUG_MIX(args...) printk(args)
-+#else
-+#define DEBUG_MIX(args...)
-+#endif
-+
-+#define H2_INDIRECT_WAIT(regs) while (regs->isr & H2_ISR_TSTATUS);
-+
-+#define H2_READ_ADDR(addr) (addr | (1<<7))
-+#define H2_WRITE_ADDR(addr) (addr)
-+
-+static char *hal2str = "HAL2 audio";
-+static int ibuffers = 32;
-+static int obuffers = 32;
-+
-+/* I doubt anyone has a machine with two HAL2 cards. It's possible to
-+ * have two HPC's, so it is probably possible to have two HAL2 cards.
-+ * Try to deal with it, but note that it is not tested.
-+ */
-+#define MAXCARDS 2
-+static hal2_card_t* hal2_card[MAXCARDS];
-+
-+static const struct {
-+ unsigned char idx:4, avail:1;
-+} mixtable[SOUND_MIXER_NRDEVICES] = {
-+ [SOUND_MIXER_PCM] = { H2_MIX_OUTPUT_ATT, 1 }, /* voice */
-+ [SOUND_MIXER_MIC] = { H2_MIX_INPUT_GAIN, 1 }, /* mic */
-+};
-+
-+#define H2_SUPPORTED_FORMATS (AFMT_S16_LE | AFMT_S16_BE)
-+
-+static inline void hal2_isr_write(hal2_card_t *hal2, u32 val)
-+{
-+ hal2->ctl_regs->isr = val;
-+}
-+
-+static inline u32 hal2_isr_look(hal2_card_t *hal2)
-+{
-+ return hal2->ctl_regs->isr;
-+}
-+
-+static inline u32 hal2_rev_look(hal2_card_t *hal2)
-+{
-+ return hal2->ctl_regs->rev;
-+}
-+
-+#if 0
-+static u16 hal2_i_look16(hal2_card_t *hal2, u32 addr)
-+{
-+ hal2_ctl_regs_t *regs = hal2->ctl_regs;
-+
-+ regs->iar = H2_READ_ADDR(addr);
-+ H2_INDIRECT_WAIT(regs);
-+ return (regs->idr0 & 0xffff);
-+}
-+#endif
-+
-+static u32 hal2_i_look32(hal2_card_t *hal2, u32 addr)
-+{
-+ u32 ret;
-+ hal2_ctl_regs_t *regs = hal2->ctl_regs;
-+
-+ regs->iar = H2_READ_ADDR(addr);
-+ H2_INDIRECT_WAIT(regs);
-+ ret = regs->idr0 & 0xffff;
-+ regs->iar = H2_READ_ADDR(addr | 0x1);
-+ H2_INDIRECT_WAIT(regs);
-+ ret |= (regs->idr0 & 0xffff) << 16;
-+ return ret;
-+}
-+
-+static void hal2_i_write16(hal2_card_t *hal2, u32 addr, u16 val)
-+{
-+ hal2_ctl_regs_t *regs = hal2->ctl_regs;
-+
-+ regs->idr0 = val;
-+ regs->idr1 = 0;
-+ regs->idr2 = 0;
-+ regs->idr3 = 0;
-+ regs->iar = H2_WRITE_ADDR(addr);
-+ H2_INDIRECT_WAIT(regs);
-+}
-+
-+static void hal2_i_write32(hal2_card_t *hal2, u32 addr, u32 val)
-+{
-+ hal2_ctl_regs_t *regs = hal2->ctl_regs;
-+
-+ regs->idr0 = val & 0xffff;
-+ regs->idr1 = val >> 16;
-+ regs->idr2 = 0;
-+ regs->idr3 = 0;
-+ regs->iar = H2_WRITE_ADDR(addr);
-+ H2_INDIRECT_WAIT(regs);
-+}
-+
-+static void hal2_i_setbit16(hal2_card_t *hal2, u32 addr, u16 bit)
-+{
-+ hal2_ctl_regs_t *regs = hal2->ctl_regs;
-+
-+ regs->iar = H2_READ_ADDR(addr);
-+ H2_INDIRECT_WAIT(regs);
-+ regs->idr0 = regs->idr0 | bit;
-+ regs->idr1 = 0;
-+ regs->idr2 = 0;
-+ regs->idr3 = 0;
-+ regs->iar = H2_WRITE_ADDR(addr);
-+ H2_INDIRECT_WAIT(regs);
-+}
-+
-+static void hal2_i_setbit32(hal2_card_t *hal2, u32 addr, u32 bit)
-+{
-+ u32 tmp;
-+ hal2_ctl_regs_t *regs = hal2->ctl_regs;
-+
-+ regs->iar = H2_READ_ADDR(addr);
-+ H2_INDIRECT_WAIT(regs);
-+ tmp = regs->idr0 | (regs->idr1 << 16) | bit;
-+ regs->idr0 = tmp & 0xffff;
-+ regs->idr1 = tmp >> 16;
-+ regs->idr2 = 0;
-+ regs->idr3 = 0;
-+ regs->iar = H2_WRITE_ADDR(addr);
-+ H2_INDIRECT_WAIT(regs);
-+}
-+
-+static void hal2_i_clearbit16(hal2_card_t *hal2, u32 addr, u16 bit)
-+{
-+ hal2_ctl_regs_t *regs = hal2->ctl_regs;
-+
-+ regs->iar = H2_READ_ADDR(addr);
-+ H2_INDIRECT_WAIT(regs);
-+ regs->idr0 = regs->idr0 & ~bit;
-+ regs->idr1 = 0;
-+ regs->idr2 = 0;
-+ regs->idr3 = 0;
-+ regs->iar = H2_WRITE_ADDR(addr);
-+ H2_INDIRECT_WAIT(regs);
-+}
-+
-+#if 0
-+static void hal2_i_clearbit32(hal2_card_t *hal2, u32 addr, u32 bit)
-+{
-+ u32 tmp;
-+ hal2_ctl_regs_t *regs = hal2->ctl_regs;
-+
-+ regs->iar = H2_READ_ADDR(addr);
-+ H2_INDIRECT_WAIT(regs);
-+ tmp = (regs->idr0 | (regs->idr1 << 16)) & ~bit;
-+ regs->idr0 = tmp & 0xffff;
-+ regs->idr1 = tmp >> 16;
-+ regs->idr2 = 0;
-+ regs->idr3 = 0;
-+ regs->iar = H2_WRITE_ADDR(addr);
-+ H2_INDIRECT_WAIT(regs);
-+}
-+#endif
-+
-+#ifdef HAL2_DEBUG
-+static void hal2_dump_regs(hal2_card_t *hal2)
-+{
-+ printk("isr: %08hx ", hal2_isr_look(hal2));
-+ printk("rev: %08hx\n", hal2_rev_look(hal2));
-+ printk("relay: %04hx\n", hal2_i_look16(hal2, H2I_RELAY_C));
-+ printk("port en: %04hx ", hal2_i_look16(hal2, H2I_DMA_PORT_EN));
-+ printk("dma end: %04hx ", hal2_i_look16(hal2, H2I_DMA_END));
-+ printk("dma drv: %04hx\n", hal2_i_look16(hal2, H2I_DMA_DRV));
-+ printk("syn ctl: %04hx ", hal2_i_look16(hal2, H2I_SYNTH_C));
-+ printk("aesrx ctl: %04hx ", hal2_i_look16(hal2, H2I_AESRX_C));
-+ printk("aestx ctl: %04hx ", hal2_i_look16(hal2, H2I_AESTX_C));
-+ printk("dac ctl1: %04hx ", hal2_i_look16(hal2, H2I_ADC_C1));
-+ printk("dac ctl2: %08lx ", hal2_i_look32(hal2, H2I_ADC_C2));
-+ printk("adc ctl1: %04hx ", hal2_i_look16(hal2, H2I_DAC_C1));
-+ printk("adc ctl2: %08lx ", hal2_i_look32(hal2, H2I_DAC_C2));
-+ printk("syn map: %04hx\n", hal2_i_look16(hal2, H2I_SYNTH_MAP_C));
-+ printk("bres1 ctl1: %04hx ", hal2_i_look16(hal2, H2I_BRES1_C1));
-+ printk("bres1 ctl2: %04lx ", hal2_i_look32(hal2, H2I_BRES1_C2));
-+ printk("bres2 ctl1: %04hx ", hal2_i_look16(hal2, H2I_BRES2_C1));
-+ printk("bres2 ctl2: %04lx ", hal2_i_look32(hal2, H2I_BRES2_C2));
-+ printk("bres3 ctl1: %04hx ", hal2_i_look16(hal2, H2I_BRES3_C1));
-+ printk("bres3 ctl2: %04lx\n", hal2_i_look32(hal2, H2I_BRES3_C2));
-+}
-+#endif
-+
-+static hal2_card_t* hal2_dsp_find_card(int minor)
-+{
-+ int i;
-+
-+ for (i = 0; i < MAXCARDS; i++)
-+ if (hal2_card[i] != NULL && hal2_card[i]->dev_dsp == minor)
-+ return hal2_card[i];
-+ return NULL;
-+}
-+
-+static hal2_card_t* hal2_mixer_find_card(int minor)
-+{
-+ int i;
-+
-+ for (i = 0; i < MAXCARDS; i++)
-+ if (hal2_card[i] != NULL && hal2_card[i]->dev_mixer == minor)
-+ return hal2_card[i];
-+ return NULL;
-+}
-+
-+
-+static void hal2_dac_interrupt(hal2_codec_t *dac)
-+{
-+ int running;
-+
-+ spin_lock(&dac->lock);
-+
-+ /* if tail buffer contains zero samples DMA stream was already
-+ * stopped */
-+ running = dac->tail->info.cnt;
-+ dac->tail->info.cnt = 0;
-+ dac->tail->info.desc.cntinfo = HPCDMA_XIE | HPCDMA_EOX;
-+ dma_cache_wback_inv((unsigned long) dac->tail,
-+ sizeof(struct hpc_dma_desc));
-+ /* we just proccessed empty buffer, don't update tail pointer */
-+ if (running)
-+ dac->tail = dac->tail->info.next;
-+
-+ spin_unlock(&dac->lock);
-+
-+ wake_up(&dac->dma_wait);
-+}
-+
-+static void hal2_adc_interrupt(hal2_codec_t *adc)
-+{
-+ int running;
-+
-+ spin_lock(&adc->lock);
-+
-+ /* if head buffer contains nonzero samples DMA stream was already
-+ * stopped */
-+ running = !adc->head->info.cnt;
-+ adc->head->info.cnt = H2_BUFFER_SIZE;
-+ adc->head->info.desc.cntinfo = HPCDMA_XIE | HPCDMA_EOX;
-+ dma_cache_wback_inv((unsigned long) adc->head,
-+ sizeof(struct hpc_dma_desc));
-+ /* we just proccessed empty buffer, don't update head pointer */
-+ if (running) {
-+ dma_cache_inv((unsigned long) adc->head->data, H2_BUFFER_SIZE);
-+ adc->head = adc->head->info.next;
-+ }
-+
-+ spin_unlock(&adc->lock);
-+
-+ wake_up(&adc->dma_wait);
-+}
-+
-+static irqreturn_t hal2_interrupt(int irq, void *dev_id, struct pt_regs *regs)
-+{
-+ hal2_card_t *hal2 = (hal2_card_t*)dev_id;
-+
-+ /* decide what caused this interrupt */
-+ if (hal2->dac.pbus.pbus->pbdma_ctrl & HPC3_PDMACTRL_INT)
-+ hal2_dac_interrupt(&hal2->dac);
-+ if (hal2->adc.pbus.pbus->pbdma_ctrl & HPC3_PDMACTRL_INT)
-+ hal2_adc_interrupt(&hal2->adc);
-+ return IRQ_HANDLED;
-+}
-+
-+static int hal2_compute_rate(hal2_codec_t *codec, unsigned int rate)
-+{
-+ unsigned short inc;
-+
-+ /* We default to 44.1 kHz and if it isn't possible to fall back to
-+ * 48.0 kHz with the needed adjustments of real_rate.
-+ */
-+
-+ DEBUG("rate: %d\n", rate);
-+
-+ /* Refer to CS4216 data sheet */
-+ if (rate < 4000)
-+ rate = 4000;
-+ if (rate > 50000)
-+ rate = 50000;
-+
-+ /* Note: This is NOT the way they set up the bresenham clock generators
-+ * in the specification. I've tried to implement that method but it
-+ * doesn't work. It's probably another silly bug in the spec.
-+ *
-+ * I accidently discovered this method while I was testing and it seems
-+ * to work very well with all frequencies, and thee shall follow rule #1
-+ * of programming :-)
-+ */
-+
-+ if (44100 % rate == 0) {
-+ inc = 44100 / rate;
-+ if (inc < 1) inc = 1;
-+ codec->master = 44100;
-+ } else {
-+ inc = 48000 / rate;
-+ if (inc < 1) inc = 1;
-+ rate = 48000 / inc;
-+ codec->master = 48000;
-+ }
-+ codec->inc = inc;
-+ codec->mod = 1;
-+
-+ DEBUG("real_rate: %d\n", rate);
-+
-+ return rate;
-+}
-+
-+static void hal2_set_dac_rate(hal2_card_t *hal2)
-+{
-+ unsigned int master = hal2->dac.master;
-+ int inc = hal2->dac.inc;
-+ int mod = hal2->dac.mod;
-+
-+ DEBUG("master: %d inc: %d mod: %d\n", master, inc, mod);
-+
-+ hal2_i_write16(hal2, H2I_BRES1_C1, (master == 44100) ? 1 : 0);
-+ hal2_i_write32(hal2, H2I_BRES1_C2, ((0xffff & (mod - inc - 1)) << 16) | 1);
-+}
-+
-+static void hal2_set_adc_rate(hal2_card_t *hal2)
-+{
-+ unsigned int master = hal2->adc.master;
-+ int inc = hal2->adc.inc;
-+ int mod = hal2->adc.mod;
-+
-+ DEBUG("master: %d inc: %d mod: %d\n", master, inc, mod);
-+
-+ hal2_i_write16(hal2, H2I_BRES2_C1, (master == 44100) ? 1 : 0);
-+ hal2_i_write32(hal2, H2I_BRES2_C2, ((0xffff & (mod - inc - 1)) << 16) | 1);
-+}
-+
-+static void hal2_setup_dac(hal2_card_t *hal2)
-+{
-+ unsigned int fifobeg, fifoend, highwater, sample_size;
-+ hal2_pbus_t *pbus = &hal2->dac.pbus;
-+
-+ DEBUG("hal2_setup_dac\n");
-+
-+ /* Now we set up some PBUS information. The PBUS needs information about
-+ * what portion of the fifo it will use. If it's receiving or
-+ * transmitting, and finally whether the stream is little endian or big
-+ * endian. The information is written later, on the start call.
-+ */
-+ sample_size = 2 * hal2->dac.voices;
-+
-+ /* Fifo should be set to hold exactly four samples. Highwater mark
-+ * should be set to two samples. */
-+ highwater = (sample_size * 2) >> 1; /* halfwords */
-+ fifobeg = 0; /* playback is first */
-+ fifoend = (sample_size * 4) >> 3; /* doublewords */
-+ pbus->ctrl = HPC3_PDMACTRL_RT | HPC3_PDMACTRL_LD |
-+ (highwater << 8) | (fifobeg << 16) | (fifoend << 24);
-+ /* We disable everything before we do anything at all */
-+ pbus->pbus->pbdma_ctrl = HPC3_PDMACTRL_LD;
-+ hal2_i_clearbit16(hal2, H2I_DMA_PORT_EN, H2I_DMA_PORT_EN_CODECTX);
-+ hal2_i_clearbit16(hal2, H2I_DMA_DRV, (1 << pbus->pbusnr));
-+ /* Setup the HAL2 for playback */
-+ hal2_set_dac_rate(hal2);
-+ /* We are using 1st Bresenham clock generator for playback */
-+ hal2_i_write16(hal2, H2I_DAC_C1, (pbus->pbusnr << H2I_C1_DMA_SHIFT)
-+ | (1 << H2I_C1_CLKID_SHIFT)
-+ | (hal2->dac.voices << H2I_C1_DATAT_SHIFT));
-+}
-+
-+static void hal2_setup_adc(hal2_card_t *hal2)
-+{
-+ unsigned int fifobeg, fifoend, highwater, sample_size;
-+ hal2_pbus_t *pbus = &hal2->adc.pbus;
-+
-+ DEBUG("hal2_setup_adc\n");
-+
-+ sample_size = 2 * hal2->adc.voices;
-+
-+ highwater = (sample_size * 2) >> 1; /* halfwords */
-+ fifobeg = (4 * 4) >> 3; /* record is second */
-+ fifoend = (4 * 4 + sample_size * 4) >> 3; /* doublewords */
-+ pbus->ctrl = HPC3_PDMACTRL_RT | HPC3_PDMACTRL_RCV | HPC3_PDMACTRL_LD |
-+ (highwater << 8) | (fifobeg << 16) | (fifoend << 24);
-+ pbus->pbus->pbdma_ctrl = HPC3_PDMACTRL_LD;
-+ hal2_i_clearbit16(hal2, H2I_DMA_PORT_EN, H2I_DMA_PORT_EN_CODECR);
-+ hal2_i_clearbit16(hal2, H2I_DMA_DRV, (1 << pbus->pbusnr));
-+ /* Setup the HAL2 for record */
-+ hal2_set_adc_rate(hal2);
-+ /* We are using 2nd Bresenham clock generator for record */
-+ hal2_i_write16(hal2, H2I_ADC_C1, (pbus->pbusnr << H2I_C1_DMA_SHIFT)
-+ | (2 << H2I_C1_CLKID_SHIFT)
-+ | (hal2->adc.voices << H2I_C1_DATAT_SHIFT));
-+}
-+
-+static void hal2_start_dac(hal2_card_t *hal2)
-+{
-+ hal2_pbus_t *pbus = &hal2->dac.pbus;
-+
-+ DEBUG("hal2_start_dac\n");
-+
-+ pbus->pbus->pbdma_dptr = PHYSADDR(hal2->dac.tail);
-+ pbus->pbus->pbdma_ctrl = pbus->ctrl | HPC3_PDMACTRL_ACT;
-+
-+ /* set endianess */
-+ if (hal2->dac.format & AFMT_S16_LE)
-+ hal2_i_setbit16(hal2, H2I_DMA_END, H2I_DMA_END_CODECTX);
-+ else
-+ hal2_i_clearbit16(hal2, H2I_DMA_END, H2I_DMA_END_CODECTX);
-+ /* set DMA bus */
-+ hal2_i_setbit16(hal2, H2I_DMA_DRV, (1 << pbus->pbusnr));
-+ /* enable DAC */
-+ hal2_i_setbit16(hal2, H2I_DMA_PORT_EN, H2I_DMA_PORT_EN_CODECTX);
-+}
-+
-+static void hal2_start_adc(hal2_card_t *hal2)
-+{
-+ hal2_pbus_t *pbus = &hal2->adc.pbus;
-+
-+ DEBUG("hal2_start_adc\n");
-+
-+ pbus->pbus->pbdma_dptr = PHYSADDR(hal2->adc.head);
-+ pbus->pbus->pbdma_ctrl = pbus->ctrl | HPC3_PDMACTRL_ACT;
-+
-+ /* set endianess */
-+ if (hal2->adc.format & AFMT_S16_LE)
-+ hal2_i_setbit16(hal2, H2I_DMA_END, H2I_DMA_END_CODECR);
-+ else
-+ hal2_i_clearbit16(hal2, H2I_DMA_END, H2I_DMA_END_CODECR);
-+ /* set DMA bus */
-+ hal2_i_setbit16(hal2, H2I_DMA_DRV, (1 << pbus->pbusnr));
-+ /* enable ADC */
-+ hal2_i_setbit16(hal2, H2I_DMA_PORT_EN, H2I_DMA_PORT_EN_CODECR);
-+}
-+
-+static inline void hal2_stop_dac(hal2_card_t *hal2)
-+{
-+ DEBUG("hal2_stop_dac\n");
-+
-+ hal2->dac.pbus.pbus->pbdma_ctrl = HPC3_PDMACTRL_LD;
-+ /* The HAL2 itself may remain enabled safely */
-+}
-+
-+static inline void hal2_stop_adc(hal2_card_t *hal2)
-+{
-+ DEBUG("hal2_stop_adc\n");
-+
-+ hal2->adc.pbus.pbus->pbdma_ctrl = HPC3_PDMACTRL_LD;
-+}
-+
-+#define hal2_alloc_dac_dmabuf(hal2) hal2_alloc_dmabuf(hal2, 1)
-+#define hal2_alloc_adc_dmabuf(hal2) hal2_alloc_dmabuf(hal2, 0)
-+static int hal2_alloc_dmabuf(hal2_card_t *hal2, int is_dac)
-+{
-+ int buffers, cntinfo;
-+ hal2_buf_t *buf, *prev;
-+ hal2_codec_t *codec;
-+
-+ if (is_dac) {
-+ codec = &hal2->dac;
-+ buffers = obuffers;
-+ cntinfo = HPCDMA_XIE | HPCDMA_EOX;
-+ } else {
-+ codec = &hal2->adc;
-+ buffers = ibuffers;
-+ cntinfo = HPCDMA_XIE | H2_BUFFER_SIZE;
-+ }
-+
-+ DEBUG("allocating %d DMA buffers.\n", buffers);
-+
-+ buf = (hal2_buf_t*) get_zeroed_page(GFP_KERNEL);
-+ if (!buf)
-+ return -ENOMEM;
-+ codec->head = buf;
-+ codec->tail = buf;
-+
-+ while (--buffers) {
-+ buf->info.desc.pbuf = PHYSADDR(&buf->data);
-+ buf->info.desc.cntinfo = cntinfo;
-+ buf->info.cnt = 0;
-+ prev = buf;
-+ buf = (hal2_buf_t*) get_zeroed_page(GFP_KERNEL);
-+ if (!buf) {
-+ printk("HAL2: Not enough memory for DMA buffer.\n");
-+ buf = codec->head;
-+ while (buf) {
-+ prev = buf;
-+ free_page((unsigned long) buf);
-+ buf = prev->info.next;
-+ }
-+ return -ENOMEM;
-+ }
-+ prev->info.next = buf;
-+ prev->info.desc.pnext = PHYSADDR(buf);
-+ /* The PBUS can prolly not read this stuff when it's in
-+ * the cache so we have to flush it back to main memory
-+ */
-+ dma_cache_wback_inv((unsigned long) prev, PAGE_SIZE);
-+ }
-+ buf->info.desc.pbuf = PHYSADDR(&buf->data);
-+ buf->info.desc.cntinfo = cntinfo;
-+ buf->info.cnt = 0;
-+ buf->info.next = codec->head;
-+ buf->info.desc.pnext = PHYSADDR(codec->head);
-+ dma_cache_wback_inv((unsigned long) buf, PAGE_SIZE);
-+
-+ return 0;
-+}
-+
-+#define hal2_free_dac_dmabuf(hal2) hal2_free_dmabuf(hal2, 1)
-+#define hal2_free_adc_dmabuf(hal2) hal2_free_dmabuf(hal2, 0)
-+static void hal2_free_dmabuf(hal2_card_t *hal2, int is_dac)
-+{
-+ hal2_buf_t *buf, *next;
-+ hal2_codec_t *codec = (is_dac) ? &hal2->dac : &hal2->adc;
-+
-+ if (!codec->head)
-+ return;
-+
-+ buf = codec->head->info.next;
-+ codec->head->info.next = NULL;
-+ while (buf) {
-+ next = buf->info.next;
-+ free_page((unsigned long) buf);
-+ buf = next;
-+ }
-+ codec->head = codec->tail = NULL;
-+}
-+
-+/*
-+ * Add 'count' bytes to 'buffer' from DMA ring buffers. Return number of
-+ * bytes added or -EFAULT if copy_from_user failed.
-+ */
-+static int hal2_get_buffer(hal2_card_t *hal2, char *buffer, int count)
-+{
-+ unsigned long flags;
-+ int size, ret = 0;
-+ hal2_codec_t *adc = &hal2->adc;
-+
-+ spin_lock_irqsave(&adc->lock, flags);
-+
-+ DEBUG("getting %d bytes ", count);
-+
-+ /* enable DMA stream if there are no data */
-+ if (!(adc->pbus.pbus->pbdma_ctrl & HPC3_PDMACTRL_ISACT) &&
-+ adc->tail->info.cnt == 0)
-+ hal2_start_adc(hal2);
-+
-+ DEBUG("... ");
-+
-+ while (adc->tail->info.cnt > 0 && count > 0) {
-+ size = min(adc->tail->info.cnt, count);
-+ spin_unlock_irqrestore(&adc->lock, flags);
-+
-+ if (copy_to_user(buffer, &adc->tail->data[H2_BUFFER_SIZE-size],
-+ size)) {
-+ ret = -EFAULT;
-+ goto out;
-+ }
-+
-+ spin_lock_irqsave(&adc->lock, flags);
-+
-+ adc->tail->info.cnt -= size;
-+ /* buffer is empty, update tail pointer */
-+ if (adc->tail->info.cnt == 0) {
-+ adc->tail->info.desc.cntinfo = HPCDMA_XIE |
-+ H2_BUFFER_SIZE;
-+ dma_cache_wback_inv((unsigned long) adc->tail,
-+ sizeof(struct hpc_dma_desc));
-+ adc->tail = adc->tail->info.next;
-+ /* enable DMA stream again if needed */
-+ if (!(adc->pbus.pbus->pbdma_ctrl & HPC3_PDMACTRL_ISACT))
-+ hal2_start_adc(hal2);
-+
-+ }
-+ buffer += size;
-+ ret += size;
-+ count -= size;
-+
-+ DEBUG("(%d) ", size);
-+ }
-+ spin_unlock_irqrestore(&adc->lock, flags);
-+out:
-+ DEBUG("\n");
-+
-+ return ret;
-+}
-+
-+/*
-+ * Add 'count' bytes from 'buffer' to DMA ring buffers. Return number of
-+ * bytes added or -EFAULT if copy_from_user failed.
-+ */
-+static int hal2_add_buffer(hal2_card_t *hal2, char *buffer, int count)
-+{
-+ unsigned long flags;
-+ int size, ret = 0;
-+ hal2_codec_t *dac = &hal2->dac;
-+
-+ spin_lock_irqsave(&dac->lock, flags);
-+
-+ DEBUG("adding %d bytes ", count);
-+
-+ while (dac->head->info.cnt == 0 && count > 0) {
-+ size = min((int)H2_BUFFER_SIZE, count);
-+ spin_unlock_irqrestore(&dac->lock, flags);
-+
-+ if (copy_from_user(dac->head->data, buffer, size)) {
-+ ret = -EFAULT;
-+ goto out;
-+ }
-+ spin_lock_irqsave(&dac->lock, flags);
-+
-+ dac->head->info.desc.cntinfo = size | HPCDMA_XIE;
-+ dac->head->info.cnt = size;
-+ dma_cache_wback_inv((unsigned long) dac->head,
-+ size + PAGE_SIZE - H2_BUFFER_SIZE);
-+ buffer += size;
-+ ret += size;
-+ count -= size;
-+ dac->head = dac->head->info.next;
-+
-+ DEBUG("(%d) ", size);
-+ }
-+ if (!(dac->pbus.pbus->pbdma_ctrl & HPC3_PDMACTRL_ISACT) && ret > 0)
-+ hal2_start_dac(hal2);
-+
-+ spin_unlock_irqrestore(&dac->lock, flags);
-+out:
-+ DEBUG("\n");
-+
-+ return ret;
-+}
-+
-+#define hal2_reset_dac_pointer(hal2) hal2_reset_pointer(hal2, 1)
-+#define hal2_reset_adc_pointer(hal2) hal2_reset_pointer(hal2, 0)
-+static void hal2_reset_pointer(hal2_card_t *hal2, int is_dac)
-+{
-+ hal2_codec_t *codec = (is_dac) ? &hal2->dac : &hal2->adc;
-+
-+ DEBUG("hal2_reset_pointer\n");
-+
-+ codec->tail = codec->head;
-+ do {
-+ codec->tail->info.desc.cntinfo = HPCDMA_XIE | (is_dac) ?
-+ HPCDMA_EOX : H2_BUFFER_SIZE;
-+ codec->tail->info.cnt = 0;
-+ dma_cache_wback_inv((unsigned long) codec->tail,
-+ sizeof(struct hpc_dma_desc));
-+ codec->tail = codec->tail->info.next;
-+ } while (codec->tail != codec->head);
-+}
-+
-+static int hal2_sync_dac(hal2_card_t *hal2)
-+{
-+ DECLARE_WAITQUEUE(wait, current);
-+ hal2_codec_t *dac = &hal2->dac;
-+ int ret = 0;
-+ signed long timeout = 1000 * H2_BUFFER_SIZE * 2 * dac->voices *
-+ HZ / dac->sample_rate / 900;
-+
-+ down(&dac->sem);
-+
-+ while (dac->pbus.pbus->pbdma_ctrl & HPC3_PDMACTRL_ISACT) {
-+ add_wait_queue(&dac->dma_wait, &wait);
-+ set_current_state(TASK_INTERRUPTIBLE);
-+ if (!schedule_timeout(timeout))
-+ /* We may get bogus timeout when system is
-+ * heavily loaded */
-+ if (dac->tail->info.cnt) {
-+ printk("HAL2: timeout...\n");
-+ ret = -ETIME;
-+ }
-+ if (signal_pending(current))
-+ ret = -ERESTARTSYS;
-+ if (ret) {
-+ hal2_stop_dac(hal2);
-+ hal2_reset_dac_pointer(hal2);
-+ }
-+ remove_wait_queue(&dac->dma_wait, &wait);
-+ }
-+
-+ up(&dac->sem);
-+
-+ return ret;
-+}
-+
-+static int hal2_write_mixer(hal2_card_t *hal2, int index, int vol)
-+{
-+ unsigned int l, r;
-+
-+ DEBUG_MIX("mixer %d write\n", index);
-+
-+ if (index >= SOUND_MIXER_NRDEVICES || !mixtable[index].avail)
-+ return -EINVAL;
-+
-+ r = (vol >> 8) & 0xff;
-+ if (r > 100)
-+ r = 100;
-+ l = vol & 0xff;
-+ if (l > 100)
-+ l = 100;
-+
-+ hal2->mixer.volume[mixtable[index].idx] = l | (r << 8);
-+
-+ switch (mixtable[index].idx) {
-+ case H2_MIX_OUTPUT_ATT: {
-+
-+ DEBUG_MIX("output attenuator %d,%d\n", l, r);
-+
-+ if (r | l) {
-+ unsigned int tmp = hal2_i_look32(hal2, H2I_DAC_C2);
-+
-+ tmp &= ~(H2I_C2_L_ATT_M | H2I_C2_R_ATT_M | H2I_C2_MUTE);
-+
-+ /* Attenuator has five bits */
-+ l = (31 * (100 - l) / 99);
-+ r = (31 * (100 - r) / 99);
-+
-+ DEBUG_MIX("left: %d, right %d\n", l, r);
-+
-+ tmp |= (l << H2I_C2_L_ATT_SHIFT) & H2I_C2_L_ATT_M;
-+ tmp |= (r << H2I_C2_R_ATT_SHIFT) & H2I_C2_R_ATT_M;
-+ hal2_i_write32(hal2, H2I_DAC_C2, tmp);
-+ } else
-+ hal2_i_setbit32(hal2, H2I_DAC_C2, H2I_C2_MUTE);
-+ }
-+ case H2_MIX_INPUT_GAIN: {
-+ /* TODO */
-+ }
-+ }
-+ return 0;
-+}
-+
-+static void hal2_init_mixer(hal2_card_t *hal2)
-+{
-+ int i;
-+
-+ for (i = 0; i < SOUND_MIXER_NRDEVICES; i++)
-+ hal2_write_mixer(hal2, i, 100 | (100 << 8));
-+
-+}
-+
-+static int hal2_mixer_ioctl(hal2_card_t *hal2, unsigned int cmd,
-+ unsigned long arg)
-+{
-+ int val;
-+
-+ if (cmd == SOUND_MIXER_INFO) {
-+ mixer_info info;
-+
-+ strncpy(info.id, hal2str, sizeof(info.id));
-+ strncpy(info.name, hal2str, sizeof(info.name));
-+ info.modify_counter = hal2->mixer.modcnt;
-+ if (copy_to_user((void *)arg, &info, sizeof(info)))
-+ return -EFAULT;
-+ return 0;
-+ }
-+ if (cmd == SOUND_OLD_MIXER_INFO) {
-+ _old_mixer_info info;
-+
-+ strncpy(info.id, hal2str, sizeof(info.id));
-+ strncpy(info.name, hal2str, sizeof(info.name));
-+ if (copy_to_user((void *)arg, &info, sizeof(info)))
-+ return -EFAULT;
-+ return 0;
-+ }
-+ if (cmd == OSS_GETVERSION)
-+ return put_user(SOUND_VERSION, (int *)arg);
-+
-+ if (_IOC_TYPE(cmd) != 'M' || _IOC_SIZE(cmd) != sizeof(int))
-+ return -EINVAL;
-+
-+ if (_IOC_DIR(cmd) == _IOC_READ) {
-+ switch (_IOC_NR(cmd)) {
-+ /* Give the current record source */
-+ case SOUND_MIXER_RECSRC:
-+ val = 0; /* FIXME */
-+ break;
-+ /* Give the supported mixers, all of them support stereo */
-+ case SOUND_MIXER_DEVMASK:
-+ case SOUND_MIXER_STEREODEVS: {
-+ int i;
-+
-+ for (val = i = 0; i < SOUND_MIXER_NRDEVICES; i++)
-+ if (mixtable[i].avail)
-+ val |= 1 << i;
-+ break;
-+ }
-+ /* Arg contains a bit for each supported recording source */
-+ case SOUND_MIXER_RECMASK:
-+ val = 0;
-+ break;
-+ case SOUND_MIXER_CAPS:
-+ val = 0;
-+ break;
-+ /* Read a specific mixer */
-+ default: {
-+ int i = _IOC_NR(cmd);
-+
-+ if (i >= SOUND_MIXER_NRDEVICES || !mixtable[i].avail)
-+ return -EINVAL;
-+ val = hal2->mixer.volume[mixtable[i].idx];
-+ break;
-+ }
-+ }
-+ return put_user(val, (int *)arg);
-+ }
-+
-+ if (_IOC_DIR(cmd) != (_IOC_WRITE|_IOC_READ))
-+ return -EINVAL;
-+
-+ hal2->mixer.modcnt++;
-+
-+ if (get_user(val, (int *)arg))
-+ return -EFAULT;
-+
-+ switch (_IOC_NR(cmd)) {
-+ /* Arg contains a bit for each recording source */
-+ case SOUND_MIXER_RECSRC:
-+ return 0; /* FIXME */
-+ default:
-+ return hal2_write_mixer(hal2, _IOC_NR(cmd), val);
-+ }
-+
-+ return 0;
-+}
-+
-+static int hal2_open_mixdev(struct inode *inode, struct file *file)
-+{
-+ hal2_card_t *hal2 = hal2_mixer_find_card(MINOR(inode->i_rdev));
-+
-+ if (hal2) {
-+ file->private_data = hal2;
-+ return 0;
-+ }
-+ return -ENODEV;
-+}
-+
-+static int hal2_release_mixdev(struct inode *inode, struct file *file)
-+{
-+ return 0;
-+}
-+
-+static int hal2_ioctl_mixdev(struct inode *inode, struct file *file,
-+ unsigned int cmd, unsigned long arg)
-+{
-+ return hal2_mixer_ioctl((hal2_card_t *)file->private_data, cmd, arg);
-+}
-+
-+
-+static int hal2_ioctl(struct inode *inode, struct file *file,
-+ unsigned int cmd, unsigned long arg)
-+{
-+ int val;
-+ hal2_card_t *hal2 = (hal2_card_t *) file->private_data;
-+
-+ switch (cmd) {
-+ case OSS_GETVERSION:
-+ return put_user(SOUND_VERSION, (int *)arg);
-+
-+ case SNDCTL_DSP_SYNC:
-+ if (file->f_mode & FMODE_WRITE)
-+ return hal2_sync_dac(hal2);
-+ return 0;
-+
-+ case SNDCTL_DSP_SETDUPLEX:
-+ return 0;
-+
-+ case SNDCTL_DSP_GETCAPS:
-+ return put_user(DSP_CAP_DUPLEX | DSP_CAP_MULTI, (int *)arg);
-+
-+ case SNDCTL_DSP_RESET:
-+ if (file->f_mode & FMODE_READ) {
-+ hal2_stop_adc(hal2);
-+ hal2_reset_adc_pointer(hal2);
-+ }
-+ if (file->f_mode & FMODE_WRITE) {
-+ hal2_stop_dac(hal2);
-+ hal2_reset_dac_pointer(hal2);
-+ }
-+ return 0;
-+
-+ case SNDCTL_DSP_SPEED:
-+ if (get_user(val, (int *)arg))
-+ return -EFAULT;
-+ if (file->f_mode & FMODE_READ) {
-+ hal2_stop_adc(hal2);
-+ val = hal2_compute_rate(&hal2->adc, val);
-+ hal2->adc.sample_rate = val;
-+ hal2_set_adc_rate(hal2);
-+ }
-+ if (file->f_mode & FMODE_WRITE) {
-+ hal2_stop_dac(hal2);
-+ val = hal2_compute_rate(&hal2->dac, val);
-+ hal2->dac.sample_rate = val;
-+ hal2_set_dac_rate(hal2);
-+ }
-+ return put_user(val, (int *)arg);
-+
-+ case SNDCTL_DSP_STEREO:
-+ if (get_user(val, (int *)arg))
-+ return -EFAULT;
-+ if (file->f_mode & FMODE_READ) {
-+ hal2_stop_adc(hal2);
-+ hal2->adc.voices = (val) ? 2 : 1;
-+ hal2_setup_adc(hal2);
-+ }
-+ if (file->f_mode & FMODE_WRITE) {
-+ hal2_stop_dac(hal2);
-+ hal2->dac.voices = (val) ? 2 : 1;
-+ hal2_setup_dac(hal2);
-+ }
-+ return 0;
-+
-+ case SNDCTL_DSP_CHANNELS:
-+ if (get_user(val, (int *)arg))
-+ return -EFAULT;
-+ if (val != 0) {
-+ if (file->f_mode & FMODE_READ) {
-+ hal2_stop_adc(hal2);
-+ hal2->adc.voices = (val == 1) ? 1 : 2;
-+ hal2_setup_adc(hal2);
-+ }
-+ if (file->f_mode & FMODE_WRITE) {
-+ hal2_stop_dac(hal2);
-+ hal2->dac.voices = (val == 1) ? 1 : 2;
-+ hal2_setup_dac(hal2);
-+ }
-+ }
-+ val = -EINVAL;
-+ if (file->f_mode & FMODE_READ)
-+ val = hal2->adc.voices;
-+ if (file->f_mode & FMODE_WRITE)
-+ val = hal2->dac.voices;
-+ return put_user(val, (int *)arg);
-+
-+ case SNDCTL_DSP_GETFMTS: /* Returns a mask */
-+ return put_user(H2_SUPPORTED_FORMATS, (int *)arg);
-+
-+ case SNDCTL_DSP_SETFMT: /* Selects ONE fmt*/
-+ if (get_user(val, (int *)arg))
-+ return -EFAULT;
-+ if (val != AFMT_QUERY) {
-+ if (!(val & H2_SUPPORTED_FORMATS))
-+ return -EINVAL;
-+ if (file->f_mode & FMODE_READ) {
-+ hal2_stop_adc(hal2);
-+ hal2->adc.format = val;
-+ hal2_setup_adc(hal2);
-+ }
-+ if (file->f_mode & FMODE_WRITE) {
-+ hal2_stop_dac(hal2);
-+ hal2->dac.format = val;
-+ hal2_setup_dac(hal2);
-+ }
-+ } else {
-+ val = -EINVAL;
-+ if (file->f_mode & FMODE_READ)
-+ val = hal2->adc.format;
-+ if (file->f_mode & FMODE_WRITE)
-+ val = hal2->dac.format;
-+ }
-+ return put_user(val, (int *)arg);
-+
-+ case SNDCTL_DSP_POST:
-+ return 0;
-+
-+ case SNDCTL_DSP_GETOSPACE: {
-+ unsigned long flags;
-+ audio_buf_info info;
-+ hal2_buf_t *buf;
-+ hal2_codec_t *dac = &hal2->dac;
-+
-+ if (!(file->f_mode & FMODE_WRITE))
-+ return -EINVAL;
-+
-+ spin_lock_irqsave(&dac->lock, flags);
-+ info.fragments = 0;
-+ buf = dac->head;
-+ while (buf->info.cnt == 0 && buf != dac->tail) {
-+ info.fragments++;
-+ buf = buf->info.next;
-+ }
-+ spin_unlock_irqrestore(&dac->lock, flags);
-+
-+ info.fragstotal = obuffers;
-+ info.fragsize = H2_BUFFER_SIZE;
-+ info.bytes = info.fragsize * info.fragments;
-+
-+ return copy_to_user((void *)arg, &info, sizeof(info)) ? -EFAULT : 0;
-+ }
-+
-+ case SNDCTL_DSP_GETISPACE: {
-+ unsigned long flags;
-+ audio_buf_info info;
-+ hal2_buf_t *buf;
-+ hal2_codec_t *adc = &hal2->adc;
-+
-+ if (!(file->f_mode & FMODE_READ))
-+ return -EINVAL;
-+
-+ spin_lock_irqsave(&adc->lock, flags);
-+ info.fragments = 0;
-+ info.bytes = 0;
-+ buf = adc->tail;
-+ while (buf->info.cnt > 0 && buf != adc->head) {
-+ info.fragments++;
-+ info.bytes += buf->info.cnt;
-+ buf = buf->info.next;
-+ }
-+ spin_unlock_irqrestore(&adc->lock, flags);
-+
-+ info.fragstotal = ibuffers;
-+ info.fragsize = H2_BUFFER_SIZE;
-+
-+ return copy_to_user((void *)arg, &info, sizeof(info)) ? -EFAULT : 0;
-+ }
-+
-+ case SNDCTL_DSP_NONBLOCK:
-+ file->f_flags |= O_NONBLOCK;
-+ return 0;
-+
-+ case SNDCTL_DSP_GETBLKSIZE:
-+ return put_user(H2_BUFFER_SIZE, (int *)arg);
-+
-+ case SNDCTL_DSP_SETFRAGMENT:
-+ return 0;
-+
-+ case SOUND_PCM_READ_RATE:
-+ val = -EINVAL;
-+ if (file->f_mode & FMODE_READ)
-+ val = hal2->adc.sample_rate;
-+ if (file->f_mode & FMODE_WRITE)
-+ val = hal2->dac.sample_rate;
-+ return put_user(val, (int *)arg);
-+
-+ case SOUND_PCM_READ_CHANNELS:
-+ val = -EINVAL;
-+ if (file->f_mode & FMODE_READ)
-+ val = hal2->adc.voices;
-+ if (file->f_mode & FMODE_WRITE)
-+ val = hal2->dac.voices;
-+ return put_user(val, (int *)arg);
-+
-+ case SOUND_PCM_READ_BITS:
-+ val = 16;
-+ return put_user(val, (int *)arg);
-+ }
-+
-+ return hal2_mixer_ioctl(hal2, cmd, arg);
-+}
-+
-+static ssize_t hal2_read(struct file *file, char *buffer,
-+ size_t count, loff_t *ppos)
-+{
-+ ssize_t err;
-+ hal2_card_t *hal2 = (hal2_card_t *) file->private_data;
-+ hal2_codec_t *adc = &hal2->adc;
-+
-+ if (count == 0)
-+ return 0;
-+ if (ppos != &file->f_pos)
-+ return -ESPIPE;
-+
-+ down(&adc->sem);
-+
-+ if (file->f_flags & O_NONBLOCK) {
-+ err = hal2_get_buffer(hal2, buffer, count);
-+ err = err == 0 ? -EAGAIN : err;
-+ } else {
-+ do {
-+ /* ~10% longer */
-+ signed long timeout = 1000 * H2_BUFFER_SIZE *
-+ 2 * adc->voices * HZ / adc->sample_rate / 900;
-+ DECLARE_WAITQUEUE(wait, current);
-+ ssize_t cnt = 0;
-+
-+ err = hal2_get_buffer(hal2, buffer, count);
-+ if (err > 0) {
-+ count -= err;
-+ cnt += err;
-+ buffer += err;
-+ err = cnt;
-+ }
-+ if (count > 0 && err >= 0) {
-+ add_wait_queue(&adc->dma_wait, &wait);
-+ set_current_state(TASK_INTERRUPTIBLE);
-+ /* Well, it is possible, that interrupt already
-+ * arrived. Hmm, shit happens, we have one more
-+ * buffer filled ;) */
-+ if (!schedule_timeout(timeout))
-+ /* We may get bogus timeout when system
-+ * is heavily loaded */
-+ if (!adc->tail->info.cnt) {
-+ printk("HAL2: timeout...\n");
-+ hal2_stop_adc(hal2);
-+ hal2_reset_adc_pointer(hal2);
-+ err = -EAGAIN;
-+ }
-+ if (signal_pending(current))
-+ err = -ERESTARTSYS;
-+ remove_wait_queue(&adc->dma_wait, &wait);
-+ }
-+ } while (count > 0 && err >= 0);
-+
-+ }
-+
-+ up(&adc->sem);
-+
-+ return err;
-+}
-+
-+static ssize_t hal2_write(struct file *file, const char *buffer,
-+ size_t count, loff_t *ppos)
-+{
-+ ssize_t err;
-+ char *buf = (char*) buffer;
-+ hal2_card_t *hal2 = (hal2_card_t *) file->private_data;
-+ hal2_codec_t *dac = &hal2->dac;
-+
-+ if (count == 0)
-+ return 0;
-+ if (ppos != &file->f_pos)
-+ return -ESPIPE;
-+
-+ down(&dac->sem);
-+
-+ if (file->f_flags & O_NONBLOCK) {
-+ err = hal2_add_buffer(hal2, buf, count);
-+ err = err == 0 ? -EAGAIN : err;
-+ } else {
-+ do {
-+ /* ~10% longer */
-+ signed long timeout = 1000 * H2_BUFFER_SIZE *
-+ 2 * dac->voices * HZ / dac->sample_rate / 900;
-+ DECLARE_WAITQUEUE(wait, current);
-+ ssize_t cnt = 0;
-+
-+ err = hal2_add_buffer(hal2, buf, count);
-+ if (err > 0) {
-+ count -= err;
-+ cnt += err;
-+ buf += err;
-+ err = cnt;
-+ }
-+ if (count > 0 && err >= 0) {
-+ add_wait_queue(&dac->dma_wait, &wait);
-+ set_current_state(TASK_INTERRUPTIBLE);
-+ /* Well, it is possible, that interrupt already
-+ * arrived. Hmm, shit happens, we have one more
-+ * buffer free ;) */
-+ if (!schedule_timeout(timeout))
-+ /* We may get bogus timeout when system
-+ * is heavily loaded */
-+ if (dac->head->info.cnt) {
-+ printk("HAL2: timeout...\n");
-+ hal2_stop_dac(hal2);
-+ hal2_reset_dac_pointer(hal2);
-+ err = -EAGAIN;
-+ }
-+ if (signal_pending(current))
-+ err = -ERESTARTSYS;
-+ remove_wait_queue(&dac->dma_wait, &wait);
-+ }
-+ } while (count > 0 && err >= 0);
-+ }
-+
-+ up(&dac->sem);
-+
-+ return err;
-+}
-+
-+static unsigned int hal2_poll(struct file *file, struct poll_table_struct *wait)
-+{
-+ unsigned long flags;
-+ unsigned int mask = 0;
-+ hal2_card_t *hal2 = (hal2_card_t *) file->private_data;
-+
-+ if (file->f_mode & FMODE_READ) {
-+ hal2_codec_t *adc = &hal2->adc;
-+
-+ poll_wait(file, &hal2->adc.dma_wait, wait);
-+ spin_lock_irqsave(&adc->lock, flags);
-+ if (adc->tail->info.cnt > 0)
-+ mask |= POLLIN;
-+ spin_unlock_irqrestore(&adc->lock, flags);
-+ }
-+
-+ if (file->f_mode & FMODE_WRITE) {
-+ hal2_codec_t *dac = &hal2->dac;
-+
-+ poll_wait(file, &dac->dma_wait, wait);
-+ spin_lock_irqsave(&dac->lock, flags);
-+ if (dac->head->info.cnt == 0)
-+ mask |= POLLOUT;
-+ spin_unlock_irqrestore(&dac->lock, flags);
-+ }
-+
-+ return mask;
-+}
-+
-+static int hal2_open(struct inode *inode, struct file *file)
-+{
-+ int err;
-+ hal2_card_t *hal2 = hal2_dsp_find_card(MINOR(inode->i_rdev));
-+
-+ DEBUG("opening audio device.\n");
-+
-+ if (!hal2) {
-+ printk("HAL2: Whee?! Open door and go away!\n");
-+ return -ENODEV;
-+ }
-+ file->private_data = hal2;
-+
-+ if (file->f_mode & FMODE_READ) {
-+ if (hal2->adc.usecount)
-+ return -EBUSY;
-+
-+ /* OSS spec wanted us to use 8 bit, 8 kHz mono by default,
-+ * but HAL2 can't do 8bit audio */
-+ hal2->adc.format = AFMT_S16_BE;
-+ hal2->adc.voices = 1;
-+ hal2->adc.sample_rate = hal2_compute_rate(&hal2->adc, 8000);
-+ hal2_set_adc_rate(hal2);
-+
-+ /* alloc DMA buffers */
-+ err = hal2_alloc_adc_dmabuf(hal2);
-+ if (err)
-+ return err;
-+ hal2_setup_adc(hal2);
-+
-+ hal2->adc.usecount++;
-+ }
-+
-+ if (file->f_mode & FMODE_WRITE) {
-+ if (hal2->dac.usecount)
-+ return -EBUSY;
-+
-+ hal2->dac.format = AFMT_S16_BE;
-+ hal2->dac.voices = 1;
-+ hal2->dac.sample_rate = hal2_compute_rate(&hal2->dac, 8000);
-+ hal2_set_dac_rate(hal2);
-+
-+ /* alloc DMA buffers */
-+ err = hal2_alloc_dac_dmabuf(hal2);
-+ if (err)
-+ return err;
-+ hal2_setup_dac(hal2);
-+
-+ hal2->dac.usecount++;
-+ }
-+
-+ return 0;
-+}
-+
-+static int hal2_release(struct inode *inode, struct file *file)
-+{
-+ hal2_card_t *hal2 = (hal2_card_t *) file->private_data;
-+
-+ if (file->f_mode & FMODE_READ) {
-+ hal2_stop_adc(hal2);
-+ hal2_free_adc_dmabuf(hal2);
-+ hal2->adc.usecount--;
-+ }
-+
-+ if (file->f_mode & FMODE_WRITE) {
-+ hal2_sync_dac(hal2);
-+ hal2_free_dac_dmabuf(hal2);
-+ hal2->dac.usecount--;
-+ }
-+
-+ return 0;
-+}
-+
-+static struct file_operations hal2_audio_fops = {
-+ owner: THIS_MODULE,
-+ llseek: no_llseek,
-+ read: hal2_read,
-+ write: hal2_write,
-+ poll: hal2_poll,
-+ ioctl: hal2_ioctl,
-+ open: hal2_open,
-+ release: hal2_release,
-+};
-+
-+static struct file_operations hal2_mixer_fops = {
-+ owner: THIS_MODULE,
-+ llseek: no_llseek,
-+ ioctl: hal2_ioctl_mixdev,
-+ open: hal2_open_mixdev,
-+ release: hal2_release_mixdev,
-+};
-+
-+static int hal2_request_irq(hal2_card_t *hal2, int irq)
-+{
-+ unsigned long flags;
-+ int ret = 0;
-+
-+ save_and_cli(flags);
-+ if (request_irq(irq, hal2_interrupt, SA_SHIRQ, hal2str, hal2)) {
-+ printk(KERN_ERR "HAL2: Can't get irq %d\n", irq);
-+ ret = -EAGAIN;
-+ }
-+ restore_flags(flags);
-+ return ret;
-+}
-+
-+static int hal2_alloc_resources(hal2_card_t *hal2, struct hpc3_regs *hpc3)
-+{
-+ hal2_pbus_t *pbus;
-+
-+ pbus = &hal2->dac.pbus;
-+ pbus->pbusnr = 0;
-+ pbus->pbus = &hpc3->pbdma[pbus->pbusnr];
-+ /* The spec says that we should write 0x08248844 but that's WRONG. HAL2
-+ * does 8 bit DMA, not 16 bit even if it generates 16 bit audio. */
-+ hpc3->pbus_dmacfgs[pbus->pbusnr][0] = 0x08208844; /* Magic :-) */
-+
-+ pbus = &hal2->adc.pbus;
-+ pbus->pbusnr = 1;
-+ pbus->pbus = &hpc3->pbdma[pbus->pbusnr];
-+ hpc3->pbus_dmacfgs[pbus->pbusnr][0] = 0x08208844; /* Magic :-) */
-+
-+ return hal2_request_irq(hal2, SGI_HPCDMA_IRQ);
-+}
-+
-+static void hal2_init_codec(hal2_codec_t *codec)
-+{
-+ init_waitqueue_head(&codec->dma_wait);
-+ init_MUTEX(&codec->sem);
-+ spin_lock_init(&codec->lock);
-+}
-+
-+static void hal2_free_resources(hal2_card_t *hal2)
-+{
-+ free_irq(SGI_HPCDMA_IRQ, hal2);
-+}
-+
-+static int hal2_detect(hal2_card_t *hal2)
-+{
-+ unsigned short board, major, minor;
-+ unsigned short rev;
-+
-+ /* reset HAL2 */
-+ hal2_isr_write(hal2, 0);
-+
-+ /* release reset */
-+ hal2_isr_write(hal2, H2_ISR_GLOBAL_RESET_N | H2_ISR_CODEC_RESET_N);
-+
-+ hal2_i_write16(hal2, H2I_RELAY_C, H2I_RELAY_C_STATE);
-+
-+ if ((rev = hal2_rev_look(hal2)) & H2_REV_AUDIO_PRESENT) {
-+ DEBUG("HAL2: no device detected, rev: 0x%04hx\n", rev);
-+ return -ENODEV;
-+ }
-+
-+ board = (rev & H2_REV_BOARD_M) >> 12;
-+ major = (rev & H2_REV_MAJOR_CHIP_M) >> 4;
-+ minor = (rev & H2_REV_MINOR_CHIP_M);
-+
-+ printk("SGI HAL2 Processor revision %i.%i.%i detected\n",
-+ board, major, minor);
-+
-+ if (board != 4 || major != 1 || minor != 0)
-+ printk( "Other revision than 4.1.0 detected. "
-+ "Your card is probably unsupported\n");
-+
-+ return 0;
-+}
-+
-+static int hal2_init_card(hal2_card_t **phal2, struct hpc3_regs *hpc3,
-+ unsigned long hpc3_base)
-+{
-+ int ret = 0;
-+ hal2_card_t *hal2;
-+
-+ hal2 = (hal2_card_t *) kmalloc(sizeof(hal2_card_t), GFP_KERNEL);
-+ if (!hal2)
-+ return -ENOMEM;
-+ memset(hal2, 0, sizeof(hal2_card_t));
-+
-+ hal2->ctl_regs = (hal2_ctl_regs_t *) KSEG1ADDR(hpc3_base + H2_CTL_PIO);
-+ hal2->aes_regs = (hal2_aes_regs_t *) KSEG1ADDR(hpc3_base + H2_AES_PIO);
-+ hal2->vol_regs = (hal2_vol_regs_t *) KSEG1ADDR(hpc3_base + H2_VOL_PIO);
-+ hal2->syn_regs = (hal2_syn_regs_t *) KSEG1ADDR(hpc3_base + H2_SYN_PIO);
-+
-+ if (hal2_detect(hal2) < 0) {
-+ printk("HAL2 audio processor not found\n");
-+ ret = -ENODEV;
-+ goto fail1;
-+ }
-+
-+ hal2_init_codec(&hal2->dac);
-+ hal2_init_codec(&hal2->adc);
-+
-+ ret = hal2_alloc_resources(hal2, hpc3);
-+ if (ret)
-+ goto fail1;
-+
-+ hal2_init_mixer(hal2);
-+
-+ hal2->dev_dsp = register_sound_dsp(&hal2_audio_fops, -1);
-+ if (hal2->dev_dsp < 0) {
-+ ret = hal2->dev_dsp;
-+ goto fail2;
-+ }
-+
-+ hal2->dev_mixer = register_sound_mixer(&hal2_mixer_fops, -1);
-+ if (hal2->dev_mixer < 0) {
-+ ret = hal2->dev_mixer;
-+ goto fail3;
-+ }
-+
-+ *phal2 = hal2;
-+ return 0;
-+fail3:
-+ unregister_sound_dsp(hal2->dev_dsp);
-+fail2:
-+ hal2_free_resources(hal2);
-+fail1:
-+ kfree(hal2);
-+
-+ return ret;
-+}
-+
-+/*
-+ * We are assuming only one HAL2 card. If you ever meet machine with more than
-+ * one, tell immediately about it to someone. Preferably to me. --ladis
-+ */
-+static int __init init_hal2(void)
-+{
-+ int i;
-+
-+ for (i = 0; i < MAXCARDS; i++)
-+ hal2_card[i] = NULL;
-+
-+ return hal2_init_card(&hal2_card[0], hpc3c0, HPC3_CHIP0_PBASE);
-+}
-+
-+static void __exit exit_hal2(void)
-+{
-+ int i;
-+
-+ for (i = 0; i < MAXCARDS; i++)
-+ if (hal2_card[i]) {
-+ hal2_free_resources(hal2_card[i]);
-+ unregister_sound_dsp(hal2_card[i]->dev_dsp);
-+ unregister_sound_mixer(hal2_card[i]->dev_mixer);
-+ kfree(hal2_card[i]);
-+ }
-+}
-+
-+module_init(init_hal2);
-+module_exit(exit_hal2);
-+
-+MODULE_DESCRIPTION("OSS compatible driver for SGI HAL2 audio");
-+MODULE_AUTHOR("Ladislav Michl");
-+MODULE_LICENSE("GPL");
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/sound/oss/hal2.h 2003-07-19 17:03:51.000000000 -0700
-@@ -0,0 +1,328 @@
-+#ifndef __HAL2_H
-+#define __HAL2_H
-+
-+/*
-+ * Driver for HAL2 sound processors
-+ * Copyright (c) 1999 Ulf Carlsson <ulfc@bun.falkenberg.se>
-+ * Copyright (c) 2001 Ladislav Michl <ladis@psi.cz>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+ *
-+ */
-+
-+#include <asm/addrspace.h>
-+#include <asm/sgi/sgihpc.h>
-+#include <linux/spinlock.h>
-+#include <linux/types.h>
-+
-+#define H2_HAL2_BASE 0x58000
-+#define H2_CTL_PIO (H2_HAL2_BASE + 0 * 0x400)
-+#define H2_AES_PIO (H2_HAL2_BASE + 1 * 0x400)
-+#define H2_VOL_PIO (H2_HAL2_BASE + 2 * 0x400)
-+#define H2_SYN_PIO (H2_HAL2_BASE + 3 * 0x400)
-+
-+/* Indirect status register */
-+
-+#define H2_ISR_TSTATUS 0x01 /* RO: transaction status 1=busy */
-+#define H2_ISR_USTATUS 0x02 /* RO: utime status bit 1=armed */
-+#define H2_ISR_QUAD_MODE 0x04 /* codec mode 0=indigo 1=quad */
-+#define H2_ISR_GLOBAL_RESET_N 0x08 /* chip global reset 0=reset */
-+#define H2_ISR_CODEC_RESET_N 0x10 /* codec/synth reset 0=reset */
-+
-+/* Revision register */
-+
-+#define H2_REV_AUDIO_PRESENT 0x8000 /* RO: audio present 0=present */
-+#define H2_REV_BOARD_M 0x7000 /* RO: bits 14:12, board revision */
-+#define H2_REV_MAJOR_CHIP_M 0x00F0 /* RO: bits 7:4, major chip revision */
-+#define H2_REV_MINOR_CHIP_M 0x000F /* RO: bits 3:0, minor chip revision */
-+
-+/* Indirect address register */
-+
-+/*
-+ * Address of indirect internal register to be accessed. A write to this
-+ * register initiates read or write access to the indirect registers in the
-+ * HAL2. Note that there af four indirect data registers for write access to
-+ * registers larger than 16 byte.
-+ */
-+
-+#define H2_IAR_TYPE_M 0xF000 /* bits 15:12, type of functional */
-+ /* block the register resides in */
-+ /* 1=DMA Port */
-+ /* 9=Global DMA Control */
-+ /* 2=Bresenham */
-+ /* 3=Unix Timer */
-+#define H2_IAR_NUM_M 0x0F00 /* bits 11:8 instance of the */
-+ /* blockin which the indirect */
-+ /* register resides */
-+ /* If IAR_TYPE_M=DMA Port: */
-+ /* 1=Synth In */
-+ /* 2=AES In */
-+ /* 3=AES Out */
-+ /* 4=DAC Out */
-+ /* 5=ADC Out */
-+ /* 6=Synth Control */
-+ /* If IAR_TYPE_M=Global DMA Control: */
-+ /* 1=Control */
-+ /* If IAR_TYPE_M=Bresenham: */
-+ /* 1=Bresenham Clock Gen 1 */
-+ /* 2=Bresenham Clock Gen 2 */
-+ /* 3=Bresenham Clock Gen 3 */
-+ /* If IAR_TYPE_M=Unix Timer: */
-+ /* 1=Unix Timer */
-+#define H2_IAR_ACCESS_SELECT 0x0080 /* 1=read 0=write */
-+#define H2_IAR_PARAM 0x000C /* Parameter Select */
-+#define H2_IAR_RB_INDEX_M 0x0003 /* Read Back Index */
-+ /* 00:word0 */
-+ /* 01:word1 */
-+ /* 10:word2 */
-+ /* 11:word3 */
-+/*
-+ * HAL2 internal addressing
-+ *
-+ * The HAL2 has "indirect registers" (idr) which are accessed by writing to the
-+ * Indirect Data registers. Write the address to the Indirect Address register
-+ * to transfer the data.
-+ *
-+ * We define the H2IR_* to the read address and H2IW_* to the write address and
-+ * H2I_* to be fields in whatever register is referred to.
-+ *
-+ * When we write to indirect registers which are larger than one word (16 bit)
-+ * we have to fill more than one indirect register before writing. When we read
-+ * back however we have to read several times, each time with different Read
-+ * Back Indexes (there are defs for doing this easily).
-+ */
-+
-+/*
-+ * Relay Control
-+ */
-+#define H2I_RELAY_C 0x9100
-+#define H2I_RELAY_C_STATE 0x01 /* state of RELAY pin signal */
-+
-+/* DMA port enable */
-+
-+#define H2I_DMA_PORT_EN 0x9104
-+#define H2I_DMA_PORT_EN_SY_IN 0x01 /* Synth_in DMA port */
-+#define H2I_DMA_PORT_EN_AESRX 0x02 /* AES receiver DMA port */
-+#define H2I_DMA_PORT_EN_AESTX 0x04 /* AES transmitter DMA port */
-+#define H2I_DMA_PORT_EN_CODECTX 0x08 /* CODEC transmit DMA port */
-+#define H2I_DMA_PORT_EN_CODECR 0x10 /* CODEC receive DMA port */
-+
-+#define H2I_DMA_END 0x9108 /* global dma endian select */
-+#define H2I_DMA_END_SY_IN 0x01 /* Synth_in DMA port */
-+#define H2I_DMA_END_AESRX 0x02 /* AES receiver DMA port */
-+#define H2I_DMA_END_AESTX 0x04 /* AES transmitter DMA port */
-+#define H2I_DMA_END_CODECTX 0x08 /* CODEC transmit DMA port */
-+#define H2I_DMA_END_CODECR 0x10 /* CODEC receive DMA port */
-+ /* 0=b_end 1=l_end */
-+
-+#define H2I_DMA_DRV 0x910C /* global PBUS DMA enable */
-+
-+#define H2I_SYNTH_C 0x1104 /* Synth DMA control */
-+
-+#define H2I_AESRX_C 0x1204 /* AES RX dma control */
-+
-+#define H2I_C_TS_EN 0x20 /* Timestamp enable */
-+#define H2I_C_TS_FRMT 0x40 /* Timestamp format */
-+#define H2I_C_NAUDIO 0x80 /* Sign extend */
-+
-+/* AESRX CTL, 16 bit */
-+
-+#define H2I_AESTX_C 0x1304 /* AES TX DMA control */
-+#define H2I_AESTX_C_CLKID_SHIFT 3 /* Bresenham Clock Gen 1-3 */
-+#define H2I_AESTX_C_CLKID_M 0x18
-+#define H2I_AESTX_C_DATAT_SHIFT 8 /* 1=mono 2=stereo (3=quad) */
-+#define H2I_AESTX_C_DATAT_M 0x300
-+
-+/* CODEC registers */
-+
-+#define H2I_DAC_C1 0x1404 /* DAC DMA control, 16 bit */
-+#define H2I_DAC_C2 0x1408 /* DAC DMA control, 32 bit */
-+#define H2I_ADC_C1 0x1504 /* ADC DMA control, 16 bit */
-+#define H2I_ADC_C2 0x1508 /* ADC DMA control, 32 bit */
-+
-+/* Bits in CTL1 register */
-+
-+#define H2I_C1_DMA_SHIFT 0 /* DMA channel */
-+#define H2I_C1_DMA_M 0x7
-+#define H2I_C1_CLKID_SHIFT 3 /* Bresenham Clock Gen 1-3 */
-+#define H2I_C1_CLKID_M 0x18
-+#define H2I_C1_DATAT_SHIFT 8 /* 1=mono 2=stereo (3=quad) */
-+#define H2I_C1_DATAT_M 0x300
-+
-+/* Bits in CTL2 register */
-+
-+#define H2I_C2_R_GAIN_SHIFT 0 /* right a/d input gain */
-+#define H2I_C2_R_GAIN_M 0xf
-+#define H2I_C2_L_GAIN_SHIFT 4 /* left a/d input gain */
-+#define H2I_C2_L_GAIN_M 0xf0
-+#define H2I_C2_R_SEL 0x100 /* right input select */
-+#define H2I_C2_L_SEL 0x200 /* left input select */
-+#define H2I_C2_MUTE 0x400 /* mute */
-+#define H2I_C2_DO1 0x00010000 /* digital output port bit 0 */
-+#define H2I_C2_DO2 0x00020000 /* digital output port bit 1 */
-+#define H2I_C2_R_ATT_SHIFT 18 /* right d/a output - */
-+#define H2I_C2_R_ATT_M 0x007c0000 /* attenuation */
-+#define H2I_C2_L_ATT_SHIFT 23 /* left d/a output - */
-+#define H2I_C2_L_ATT_M 0x0f800000 /* attenuation */
-+
-+#define H2I_SYNTH_MAP_C 0x1104 /* synth dma handshake ctrl */
-+
-+/* Clock generator CTL 1, 16 bit */
-+
-+#define H2I_BRES1_C1 0x2104
-+#define H2I_BRES2_C1 0x2204
-+#define H2I_BRES3_C1 0x2304
-+
-+#define H2I_BRES_C1_SHIFT 0 /* 0=48.0 1=44.1 2=aes_rx */
-+#define H2I_BRES_C1_M 0x03
-+
-+/* Clock generator CTL 2, 32 bit */
-+
-+#define H2I_BRES1_C2 0x2108
-+#define H2I_BRES2_C2 0x2208
-+#define H2I_BRES3_C2 0x2308
-+
-+#define H2I_BRES_C2_INC_SHIFT 0 /* increment value */
-+#define H2I_BRES_C2_INC_M 0xffff
-+#define H2I_BRES_C2_MOD_SHIFT 16 /* modcontrol value */
-+#define H2I_BRES_C2_MOD_M 0xffff0000 /* modctrl=0xffff&(modinc-1) */
-+
-+/* Unix timer, 64 bit */
-+
-+#define H2I_UTIME 0x3104
-+#define H2I_UTIME_0_LD 0xffff /* microseconds, LSB's */
-+#define H2I_UTIME_1_LD0 0x0f /* microseconds, MSB's */
-+#define H2I_UTIME_1_LD1 0xf0 /* tenths of microseconds */
-+#define H2I_UTIME_2_LD 0xffff /* seconds, LSB's */
-+#define H2I_UTIME_3_LD 0xffff /* seconds, MSB's */
-+
-+typedef volatile u32 hal2_reg_t;
-+
-+typedef struct stru_hal2_ctl_regs hal2_ctl_regs_t;
-+struct stru_hal2_ctl_regs {
-+ hal2_reg_t _unused0[4];
-+ hal2_reg_t isr; /* 0x10 Status Register */
-+ hal2_reg_t _unused1[3];
-+ hal2_reg_t rev; /* 0x20 Revision Register */
-+ hal2_reg_t _unused2[3];
-+ hal2_reg_t iar; /* 0x30 Indirect Address Register */
-+ hal2_reg_t _unused3[3];
-+ hal2_reg_t idr0; /* 0x40 Indirect Data Register 0 */
-+ hal2_reg_t _unused4[3];
-+ hal2_reg_t idr1; /* 0x50 Indirect Data Register 1 */
-+ hal2_reg_t _unused5[3];
-+ hal2_reg_t idr2; /* 0x60 Indirect Data Register 2 */
-+ hal2_reg_t _unused6[3];
-+ hal2_reg_t idr3; /* 0x70 Indirect Data Register 3 */
-+};
-+
-+typedef struct stru_hal2_aes_regs hal2_aes_regs_t;
-+struct stru_hal2_aes_regs {
-+ hal2_reg_t rx_stat[2]; /* Status registers */
-+ hal2_reg_t rx_cr[2]; /* Control registers */
-+ hal2_reg_t rx_ud[4]; /* User data window */
-+ hal2_reg_t rx_st[24]; /* Channel status data */
-+
-+ hal2_reg_t tx_stat[1]; /* Status register */
-+ hal2_reg_t tx_cr[3]; /* Control registers */
-+ hal2_reg_t tx_ud[4]; /* User data window */
-+ hal2_reg_t tx_st[24]; /* Channel status data */
-+};
-+
-+typedef struct stru_hal2_vol_regs hal2_vol_regs_t;
-+struct stru_hal2_vol_regs {
-+ hal2_reg_t right; /* 0x00 Right volume */
-+ hal2_reg_t left; /* 0x04 Left volume */
-+};
-+
-+typedef struct stru_hal2_syn_regs hal2_syn_regs_t;
-+struct stru_hal2_syn_regs {
-+ hal2_reg_t _unused0[2];
-+ hal2_reg_t page; /* DOC Page register */
-+ hal2_reg_t regsel; /* DOC Register selection */
-+ hal2_reg_t dlow; /* DOC Data low */
-+ hal2_reg_t dhigh; /* DOC Data high */
-+ hal2_reg_t irq; /* IRQ Status */
-+ hal2_reg_t dram; /* DRAM Access */
-+};
-+
-+/* HAL2 specific structures */
-+
-+typedef struct stru_hal2_pbus hal2_pbus_t;
-+struct stru_hal2_pbus {
-+ struct hpc3_pbus_dmacregs *pbus;
-+ int pbusnr;
-+ unsigned int ctrl; /* Current state of pbus->pbdma_ctrl */
-+};
-+
-+typedef struct stru_hal2_binfo hal2_binfo_t;
-+typedef struct stru_hal2_buffer hal2_buf_t;
-+struct stru_hal2_binfo {
-+ volatile struct hpc_dma_desc desc;
-+ hal2_buf_t *next; /* pointer to next buffer */
-+ int cnt; /* bytes in buffer */
-+};
-+#define H2_BUFFER_SIZE (PAGE_SIZE - \
-+ ((sizeof(hal2_binfo_t) - 1) / 8 + 1) * 8)
-+struct stru_hal2_buffer {
-+ hal2_binfo_t info;
-+ char data[H2_BUFFER_SIZE] __attribute__((aligned(8)));
-+};
-+
-+typedef struct stru_hal2_codec hal2_codec_t;
-+struct stru_hal2_codec {
-+ hal2_buf_t *head;
-+ hal2_buf_t *tail;
-+ hal2_pbus_t pbus;
-+ unsigned int format; /* Audio data format */
-+ int voices; /* mono/stereo */
-+ unsigned int sample_rate;
-+ unsigned int master; /* Master frequency */
-+ unsigned short mod; /* MOD value */
-+ unsigned short inc; /* INC value */
-+
-+ wait_queue_head_t dma_wait;
-+ spinlock_t lock;
-+ struct semaphore sem;
-+
-+ int usecount; /* recording and playback are
-+ * independent */
-+};
-+
-+#define H2_MIX_OUTPUT_ATT 0
-+#define H2_MIX_INPUT_GAIN 1
-+#define H2_MIXERS 2
-+typedef struct stru_hal2_mixer hal2_mixer_t;
-+struct stru_hal2_mixer {
-+ int modcnt;
-+ unsigned int volume[H2_MIXERS];
-+};
-+
-+typedef struct stru_hal2_card hal2_card_t;
-+struct stru_hal2_card {
-+ int dev_dsp; /* audio device */
-+ int dev_mixer; /* mixer device */
-+ int dev_midi; /* midi device */
-+
-+ hal2_ctl_regs_t *ctl_regs; /* HAL2 ctl registers */
-+ hal2_aes_regs_t *aes_regs; /* HAL2 vol registers */
-+ hal2_vol_regs_t *vol_regs; /* HAL2 aes registers */
-+ hal2_syn_regs_t *syn_regs; /* HAL2 syn registers */
-+
-+ hal2_codec_t dac;
-+ hal2_codec_t adc;
-+ hal2_mixer_t mixer;
-+};
-+
-+#endif /* __HAL2_H */
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/sound/oss/harmony.c 2003-07-19 17:03:51.000000000 -0700
-@@ -0,0 +1,1307 @@
-+/*
-+ drivers/sound/harmony.c
-+
-+ This is a sound driver for ASP's and Lasi's Harmony sound chip
-+ and is unlikely to be used for anything other than on a HP PA-RISC.
-+
-+ Harmony is found in HP 712s, 715/new and many other GSC based machines.
-+ On older 715 machines you'll find the technically identical chip
-+ called 'Vivace'. Both Harmony and Vicace are supported by this driver.
-+
-+ Copyright 2000 (c) Linuxcare Canada, Alex deVries <alex@linuxcare.com>
-+ Copyright 2000-2002 (c) Helge Deller <deller@gmx.de>
-+ Copyright 2001 (c) Matthieu Delahaye <delahaym@esiee.fr>
-+ Copyright 2001 (c) Jean-Christophe Vaugeois <vaugeoij@esiee.fr>
-+
-+
-+TODO:
-+ - fix SNDCTL_DSP_GETOSPACE and SNDCTL_DSP_GETISPACE ioctls to
-+ return the real values
-+ - add private ioctl for selecting line- or microphone input
-+ (only one of them is available at the same time)
-+ - add module parameters
-+ - implement mmap functionality
-+ - implement gain meter ?
-+ - ...
-+*/
-+
-+#include <linux/delay.h>
-+#include <linux/errno.h>
-+#include <linux/init.h>
-+#include <linux/ioport.h>
-+#include <linux/types.h>
-+#include <linux/mm.h>
-+#include <linux/pci.h>
-+
-+#include <asm/gsc.h>
-+#include <asm/io.h>
-+#include <asm/pgalloc.h>
-+
-+#include "sound_config.h"
-+
-+
-+#define PFX "harmony: "
-+#define HARMONY_VERSION "V0.9a"
-+
-+#undef DEBUG
-+#ifdef DEBUG
-+# define DPRINTK printk
-+#else
-+# define DPRINTK(x,...)
-+#endif
-+
-+
-+#define MAX_BUFS 10 /* maximum number of rotating buffers */
-+#define HARMONY_BUF_SIZE 4096 /* needs to be a multiple of PAGE_SIZE (4096)! */
-+
-+#define CNTL_C 0x80000000
-+#define CNTL_ST 0x00000020
-+#define CNTL_44100 0x00000015 /* HARMONY_SR_44KHZ */
-+#define CNTL_8000 0x00000008 /* HARMONY_SR_8KHZ */
-+
-+#define GAINCTL_HE 0x08000000
-+#define GAINCTL_LE 0x04000000
-+#define GAINCTL_SE 0x02000000
-+
-+#define DSTATUS_PN 0x00000200
-+#define DSTATUS_RN 0x00000002
-+
-+#define DSTATUS_IE 0x80000000
-+
-+#define HARMONY_DF_16BIT_LINEAR 0
-+#define HARMONY_DF_8BIT_ULAW 1
-+#define HARMONY_DF_8BIT_ALAW 2
-+
-+#define HARMONY_SS_MONO 0
-+#define HARMONY_SS_STEREO 1
-+
-+#define HARMONY_SR_8KHZ 0x08
-+#define HARMONY_SR_16KHZ 0x09
-+#define HARMONY_SR_27KHZ 0x0A
-+#define HARMONY_SR_32KHZ 0x0B
-+#define HARMONY_SR_48KHZ 0x0E
-+#define HARMONY_SR_9KHZ 0x0F
-+#define HARMONY_SR_5KHZ 0x10
-+#define HARMONY_SR_11KHZ 0x11
-+#define HARMONY_SR_18KHZ 0x12
-+#define HARMONY_SR_22KHZ 0x13
-+#define HARMONY_SR_37KHZ 0x14
-+#define HARMONY_SR_44KHZ 0x15
-+#define HARMONY_SR_33KHZ 0x16
-+#define HARMONY_SR_6KHZ 0x17
-+
-+/*
-+ * Some magics numbers used to auto-detect file formats
-+ */
-+
-+#define HARMONY_MAGIC_8B_ULAW 1
-+#define HARMONY_MAGIC_8B_ALAW 27
-+#define HARMONY_MAGIC_16B_LINEAR 3
-+#define HARMONY_MAGIC_MONO 1
-+#define HARMONY_MAGIC_STEREO 2
-+
-+/*
-+ * Channels Positions in mixer register
-+ */
-+
-+#define GAIN_HE_SHIFT 27
-+#define GAIN_HE_MASK ( 1 << GAIN_HE_SHIFT)
-+#define GAIN_LE_SHIFT 26
-+#define GAIN_LE_MASK ( 1 << GAIN_LE_SHIFT)
-+#define GAIN_SE_SHIFT 25
-+#define GAIN_SE_MASK ( 1 << GAIN_SE_SHIFT)
-+#define GAIN_IS_SHIFT 24
-+#define GAIN_IS_MASK ( 1 << GAIN_IS_SHIFT)
-+#define GAIN_MA_SHIFT 20
-+#define GAIN_MA_MASK ( 0x0f << GAIN_MA_SHIFT)
-+#define GAIN_LI_SHIFT 16
-+#define GAIN_LI_MASK ( 0x0f << GAIN_LI_SHIFT)
-+#define GAIN_RI_SHIFT 12
-+#define GAIN_RI_MASK ( 0x0f << GAIN_RI_SHIFT)
-+#define GAIN_LO_SHIFT 6
-+#define GAIN_LO_MASK ( 0x3f << GAIN_LO_SHIFT)
-+#define GAIN_RO_SHIFT 0
-+#define GAIN_RO_MASK ( 0x3f << GAIN_RO_SHIFT)
-+
-+
-+#define MAX_OUTPUT_LEVEL (GAIN_RO_MASK >> GAIN_RO_SHIFT)
-+#define MAX_INPUT_LEVEL (GAIN_RI_MASK >> GAIN_RI_SHIFT)
-+#define MAX_VOLUME_LEVEL (GAIN_MA_MASK >> GAIN_MA_SHIFT)
-+
-+/*
-+ * Channels Mask in mixer register
-+ */
-+
-+#define GAIN_TOTAL_SILENCE 0x00F00FFF
-+#define GAIN_DEFAULT 0x0FF00000
-+
-+
-+struct harmony_hpa {
-+ u8 unused000;
-+ u8 id;
-+ u8 teleshare_id;
-+ u8 unused003;
-+ u32 reset;
-+ u32 cntl;
-+ u32 gainctl;
-+ u32 pnxtadd;
-+ u32 pcuradd;
-+ u32 rnxtadd;
-+ u32 rcuradd;
-+ u32 dstatus;
-+ u32 ov;
-+ u32 pio;
-+ u32 unused02c;
-+ u32 unused030[3];
-+ u32 diag;
-+};
-+
-+struct harmony_dev {
-+ int irq;
-+ struct harmony_hpa *hpa;
-+ u32 current_gain;
-+ u8 data_format; /* HARMONY_DF_xx_BIT_xxx */
-+ u8 sample_rate; /* HARMONY_SR_xx_KHZ */
-+ u8 stereo_select; /* HARMONY_SS_MONO or HARMONY_SS_STEREO */
-+ int format_initialized;
-+ u32 dac_rate; /* 8000 ... 48000 (Hz) */
-+ int suspended_playing;
-+ int suspended_recording;
-+
-+ int blocked_playing;
-+ int blocked_recording;
-+
-+ wait_queue_head_t wq_play, wq_record;
-+ int first_filled_play; /* first buffer containing data (next to play) */
-+ int nb_filled_play;
-+ int play_offset;
-+ int first_filled_record;
-+ int nb_filled_record;
-+
-+ int audio_open, mixer_open;
-+ int dsp_unit, mixer_unit;
-+
-+ struct pci_dev *fake_pci_dev; /* The fake pci_dev needed for
-+ pci_* functions under ccio. */
-+};
-+
-+
-+static struct harmony_dev harmony;
-+
-+
-+/*
-+ * Dynamic sound buffer allocation and DMA memory
-+ */
-+
-+struct harmony_buffer {
-+ unsigned char *addr;
-+ dma_addr_t dma_handle;
-+ int dma_consistent; /* Zero if pci_alloc_consistent() fails */
-+ int len;
-+};
-+
-+/*
-+ * Harmony memory buffers
-+ */
-+
-+static struct harmony_buffer played_buf, recorded_buf, silent, graveyard;
-+
-+
-+#define CHECK_WBACK_INV_OFFSET(b,offset,len) \
-+ do { if (!b.dma_consistent) \
-+ dma_cache_wback_inv((unsigned long)b.addr+offset,len); \
-+ } while (0)
-+
-+
-+static int __init harmony_alloc_buffer(struct harmony_buffer *b,
-+ int buffer_count)
-+{
-+ b->len = buffer_count * HARMONY_BUF_SIZE;
-+ b->addr = pci_alloc_consistent(harmony.fake_pci_dev,
-+ b->len, &b->dma_handle);
-+ if (b->addr && b->dma_handle) {
-+ b->dma_consistent = 1;
-+ DPRINTK(KERN_INFO PFX "consistent memory: 0x%lx, played_buf: 0x%lx\n",
-+ (unsigned long)b->dma_handle, (unsigned long)b->addr);
-+ } else {
-+ b->dma_consistent = 0;
-+ /* kmalloc()ed memory will HPMC on ccio machines ! */
-+ b->addr = kmalloc(b->len, GFP_KERNEL);
-+ if (!b->addr) {
-+ printk(KERN_ERR PFX "couldn't allocate memory\n");
-+ return -EBUSY;
-+ }
-+ b->dma_handle = __pa(b->addr);
-+ }
-+ return 0;
-+}
-+
-+static void __exit harmony_free_buffer(struct harmony_buffer *b)
-+{
-+ if (!b->addr)
-+ return;
-+
-+ if (b->dma_consistent)
-+ pci_free_consistent(harmony.fake_pci_dev,
-+ b->len, b->addr, b->dma_handle);
-+ else
-+ kfree(b->addr);
-+
-+ memset(b, 0, sizeof(*b));
-+}
-+
-+
-+
-+/*
-+ * Low-Level sound-chip programming
-+ */
-+
-+static void __inline__ harmony_wait_CNTL(void)
-+{
-+ /* Wait until we're out of control mode */
-+ while (gsc_readl(&harmony.hpa->cntl) & CNTL_C)
-+ /* wait */ ;
-+}
-+
-+
-+static void harmony_update_control(void)
-+{
-+ u32 default_cntl;
-+
-+ /* Set CNTL */
-+ default_cntl = (CNTL_C | /* The C bit */
-+ (harmony.data_format << 6) | /* Set the data format */
-+ (harmony.stereo_select << 5) | /* Stereo select */
-+ (harmony.sample_rate)); /* Set sample rate */
-+ harmony.format_initialized = 1;
-+
-+ /* initialize CNTL */
-+ gsc_writel(default_cntl, &harmony.hpa->cntl);
-+}
-+
-+static void harmony_set_control(u8 data_format, u8 sample_rate, u8 stereo_select)
-+{
-+ harmony.sample_rate = sample_rate;
-+ harmony.data_format = data_format;
-+ harmony.stereo_select = stereo_select;
-+ harmony_update_control();
-+}
-+
-+static void harmony_set_rate(u8 data_rate)
-+{
-+ harmony.sample_rate = data_rate;
-+ harmony_update_control();
-+}
-+
-+static int harmony_detect_rate(int *freq)
-+{
-+ int newrate;
-+ switch (*freq) {
-+ case 8000: newrate = HARMONY_SR_8KHZ; break;
-+ case 16000: newrate = HARMONY_SR_16KHZ; break;
-+ case 27428: newrate = HARMONY_SR_27KHZ; break;
-+ case 32000: newrate = HARMONY_SR_32KHZ; break;
-+ case 48000: newrate = HARMONY_SR_48KHZ; break;
-+ case 9600: newrate = HARMONY_SR_9KHZ; break;
-+ case 5125: newrate = HARMONY_SR_5KHZ; break;
-+ case 11025: newrate = HARMONY_SR_11KHZ; break;
-+ case 18900: newrate = HARMONY_SR_18KHZ; break;
-+ case 22050: newrate = HARMONY_SR_22KHZ; break;
-+ case 37800: newrate = HARMONY_SR_37KHZ; break;
-+ case 44100: newrate = HARMONY_SR_44KHZ; break;
-+ case 33075: newrate = HARMONY_SR_33KHZ; break;
-+ case 6615: newrate = HARMONY_SR_6KHZ; break;
-+ default: newrate = HARMONY_SR_8KHZ;
-+ *freq = 8000; break;
-+ }
-+ return newrate;
-+}
-+
-+static void harmony_set_format(u8 data_format)
-+{
-+ harmony.data_format = data_format;
-+ harmony_update_control();
-+}
-+
-+static void harmony_set_stereo(u8 stereo_select)
-+{
-+ harmony.stereo_select = stereo_select;
-+ harmony_update_control();
-+}
-+
-+static void harmony_disable_interrupts(void)
-+{
-+ harmony_wait_CNTL();
-+ gsc_writel(0, &harmony.hpa->dstatus);
-+}
-+
-+static void harmony_enable_interrupts(void)
-+{
-+ harmony_wait_CNTL();
-+ gsc_writel(DSTATUS_IE, &harmony.hpa->dstatus);
-+}
-+
-+/*
-+ * harmony_silence()
-+ *
-+ * This subroutine fills in a buffer starting at location start and
-+ * silences for length bytes. This references the current
-+ * configuration of the audio format.
-+ *
-+ */
-+
-+static void harmony_silence(struct harmony_buffer *buffer, int start, int length)
-+{
-+ u8 silence_char;
-+
-+ /* Despite what you hear, silence is different in
-+ different audio formats. */
-+ switch (harmony.data_format) {
-+ case HARMONY_DF_8BIT_ULAW: silence_char = 0x55; break;
-+ case HARMONY_DF_8BIT_ALAW: silence_char = 0xff; break;
-+ case HARMONY_DF_16BIT_LINEAR: /* fall through */
-+ default: silence_char = 0;
-+ }
-+
-+ memset(buffer->addr+start, silence_char, length);
-+}
-+
-+
-+static int harmony_audio_open(struct inode *inode, struct file *file)
-+{
-+ if (harmony.audio_open)
-+ return -EBUSY;
-+
-+ harmony.audio_open++;
-+ harmony.suspended_playing = harmony.suspended_recording = 1;
-+ harmony.blocked_playing = harmony.blocked_recording = 0;
-+ harmony.first_filled_play = harmony.first_filled_record = 0;
-+ harmony.nb_filled_play = harmony.nb_filled_record = 0;
-+ harmony.play_offset = 0;
-+ init_waitqueue_head(&harmony.wq_play);
-+ init_waitqueue_head(&harmony.wq_record);
-+
-+ /* Start off in a balanced mode. */
-+ harmony_set_control(HARMONY_DF_8BIT_ULAW, HARMONY_SR_8KHZ, HARMONY_SS_MONO);
-+ harmony_update_control();
-+ harmony.format_initialized = 0;
-+
-+ /* Clear out all the buffers and flush to cache */
-+ harmony_silence(&played_buf, 0, HARMONY_BUF_SIZE*MAX_BUFS);
-+ CHECK_WBACK_INV_OFFSET(played_buf, 0, HARMONY_BUF_SIZE*MAX_BUFS);
-+
-+ return 0;
-+}
-+
-+/*
-+ * Release (close) the audio device.
-+ */
-+
-+static int harmony_audio_release(struct inode *inode, struct file *file)
-+{
-+ if (!harmony.audio_open)
-+ return -EBUSY;
-+
-+ harmony.audio_open--;
-+
-+ return 0;
-+}
-+
-+/*
-+ * Read recorded data off the audio device.
-+ */
-+
-+static ssize_t harmony_audio_read(struct file *file,
-+ char *buffer,
-+ size_t size_count,
-+ loff_t *ppos)
-+{
-+ int total_count = (int) size_count;
-+ int count = 0;
-+ int buf_to_read;
-+
-+ while (count<total_count) {
-+ /* Wait until we're out of control mode */
-+ harmony_wait_CNTL();
-+
-+ /* Figure out which buffer to fill in */
-+ if (harmony.nb_filled_record <= 2) {
-+ harmony.blocked_recording = 1;
-+ if (harmony.suspended_recording) {
-+ harmony.suspended_recording = 0;
-+ harmony_enable_interrupts();
-+ }
-+
-+ interruptible_sleep_on(&harmony.wq_record);
-+ harmony.blocked_recording = 0;
-+ }
-+
-+ if (harmony.nb_filled_record < 2)
-+ return -EBUSY;
-+
-+ buf_to_read = harmony.first_filled_record;
-+
-+ /* Copy the page to an aligned buffer */
-+ if (copy_to_user(buffer+count, recorded_buf.addr +
-+ (HARMONY_BUF_SIZE*buf_to_read),
-+ HARMONY_BUF_SIZE)) {
-+ count = -EFAULT;
-+ break;
-+ }
-+
-+ harmony.nb_filled_record--;
-+ harmony.first_filled_record++;
-+ harmony.first_filled_record %= MAX_BUFS;
-+
-+ count += HARMONY_BUF_SIZE;
-+ }
-+ return count;
-+}
-+
-+
-+
-+
-+/*
-+ * Here is the place where we try to recognize file format.
-+ * Sun/NeXT .au files begin with the string .snd
-+ * At offset 12 is specified the encoding.
-+ * At offset 16 is specified speed rate
-+ * At Offset 20 is specified the numbers of voices
-+ */
-+
-+#define four_bytes_to_u32(start) (file_header[start] << 24)|\
-+ (file_header[start+1] << 16)|\
-+ (file_header[start+2] << 8)|\
-+ (file_header[start+3]);
-+
-+#define test_rate(tested,real_value,harmony_value) if ((tested)<=(real_value))\
-+
-+
-+static int harmony_format_auto_detect(const char *buffer, int block_size)
-+{
-+ u8 file_header[24];
-+ u32 start_string;
-+ int ret = 0;
-+
-+ if (block_size>24) {
-+ if (copy_from_user(file_header, buffer, sizeof(file_header)))
-+ ret = -EFAULT;
-+
-+ start_string = four_bytes_to_u32(0);
-+
-+ if ((file_header[4]==0) && (start_string==0x2E736E64)) {
-+ u32 format;
-+ u32 nb_voices;
-+ u32 speed;
-+
-+ format = four_bytes_to_u32(12);
-+ nb_voices = four_bytes_to_u32(20);
-+ speed = four_bytes_to_u32(16);
-+
-+ switch (format) {
-+ case HARMONY_MAGIC_8B_ULAW:
-+ harmony.data_format = HARMONY_DF_8BIT_ULAW;
-+ break;
-+ case HARMONY_MAGIC_8B_ALAW:
-+ harmony.data_format = HARMONY_DF_8BIT_ALAW;
-+ break;
-+ case HARMONY_MAGIC_16B_LINEAR:
-+ harmony.data_format = HARMONY_DF_16BIT_LINEAR;
-+ break;
-+ default:
-+ harmony_set_control(HARMONY_DF_16BIT_LINEAR,
-+ HARMONY_SR_44KHZ, HARMONY_SS_STEREO);
-+ goto out;
-+ }
-+ switch (nb_voices) {
-+ case HARMONY_MAGIC_MONO:
-+ harmony.stereo_select = HARMONY_SS_MONO;
-+ break;
-+ case HARMONY_MAGIC_STEREO:
-+ harmony.stereo_select = HARMONY_SS_STEREO;
-+ break;
-+ default:
-+ harmony.stereo_select = HARMONY_SS_MONO;
-+ break;
-+ }
-+ harmony_set_rate(harmony_detect_rate(&speed));
-+ harmony.dac_rate = speed;
-+ goto out;
-+ }
-+ }
-+ harmony_set_control(HARMONY_DF_8BIT_ULAW, HARMONY_SR_8KHZ, HARMONY_SS_MONO);
-+out:
-+ return ret;
-+}
-+#undef four_bytes_to_u32
-+
-+
-+static ssize_t harmony_audio_write(struct file *file,
-+ const char *buffer,
-+ size_t size_count,
-+ loff_t *ppos)
-+{
-+ int total_count = (int) size_count;
-+ int count = 0;
-+ int frame_size;
-+ int buf_to_fill;
-+
-+ if (!harmony.format_initialized) {
-+ if (harmony_format_auto_detect(buffer, total_count))
-+ return -EFAULT;
-+ }
-+
-+ while (count<total_count) {
-+ /* Wait until we're out of control mode */
-+ harmony_wait_CNTL();
-+
-+ /* Figure out which buffer to fill in */
-+ if (harmony.nb_filled_play+2 >= MAX_BUFS && !harmony.play_offset) {
-+ harmony.blocked_playing = 1;
-+ interruptible_sleep_on(&harmony.wq_play);
-+ harmony.blocked_playing = 0;
-+ }
-+ if (harmony.nb_filled_play+2 >= MAX_BUFS && !harmony.play_offset)
-+ return -EBUSY;
-+
-+
-+ buf_to_fill = (harmony.first_filled_play+harmony.nb_filled_play);
-+ if (harmony.play_offset)
-+ buf_to_fill--;
-+ buf_to_fill %= MAX_BUFS;
-+
-+ /* Figure out the size of the frame */
-+ if ((total_count-count) > HARMONY_BUF_SIZE - harmony.play_offset) {
-+ frame_size = HARMONY_BUF_SIZE - harmony.play_offset;
-+ } else {
-+ frame_size = total_count - count;
-+ /* Clear out the buffer, since there we'll only be
-+ overlaying part of the old buffer with the new one */
-+ harmony_silence(&played_buf,
-+ HARMONY_BUF_SIZE*buf_to_fill+frame_size+harmony.play_offset,
-+ HARMONY_BUF_SIZE-frame_size-harmony.play_offset);
-+ }
-+
-+ /* Copy the page to an aligned buffer */
-+ if (copy_from_user(played_buf.addr +(HARMONY_BUF_SIZE*buf_to_fill) + harmony.play_offset,
-+ buffer+count, frame_size))
-+ return -EFAULT;
-+ CHECK_WBACK_INV_OFFSET(played_buf, (HARMONY_BUF_SIZE*buf_to_fill + harmony.play_offset),
-+ frame_size);
-+
-+ if (!harmony.play_offset)
-+ harmony.nb_filled_play++;
-+
-+ count += frame_size;
-+ harmony.play_offset += frame_size;
-+ harmony.play_offset %= HARMONY_BUF_SIZE;
-+ if (harmony.suspended_playing && (harmony.nb_filled_play>=4))
-+ harmony_enable_interrupts();
-+ }
-+
-+ return count;
-+}
-+
-+static unsigned int harmony_audio_poll(struct file *file,
-+ struct poll_table_struct *wait)
-+{
-+ unsigned int mask = 0;
-+
-+ if (file->f_mode & FMODE_READ) {
-+ if (!harmony.suspended_recording)
-+ poll_wait(file, &harmony.wq_record, wait);
-+ if (harmony.nb_filled_record)
-+ mask |= POLLIN | POLLRDNORM;
-+ }
-+
-+ if (file->f_mode & FMODE_WRITE) {
-+ if (!harmony.suspended_playing)
-+ poll_wait(file, &harmony.wq_play, wait);
-+ if (harmony.nb_filled_play)
-+ mask |= POLLOUT | POLLWRNORM;
-+ }
-+
-+ return mask;
-+}
-+
-+static int harmony_audio_ioctl(struct inode *inode,
-+ struct file *file,
-+ unsigned int cmd,
-+ unsigned long arg)
-+{
-+ int ival, new_format;
-+ int frag_size, frag_buf;
-+ struct audio_buf_info info;
-+
-+ switch (cmd) {
-+ case OSS_GETVERSION:
-+ return put_user(SOUND_VERSION, (int *) arg);
-+
-+ case SNDCTL_DSP_GETCAPS:
-+ ival = DSP_CAP_DUPLEX;
-+ return put_user(ival, (int *) arg);
-+
-+ case SNDCTL_DSP_GETFMTS:
-+ ival = (AFMT_S16_BE | AFMT_MU_LAW | AFMT_A_LAW );
-+ return put_user(ival, (int *) arg);
-+
-+ case SNDCTL_DSP_SETFMT:
-+ if (get_user(ival, (int *) arg))
-+ return -EFAULT;
-+ if (ival != AFMT_QUERY) {
-+ switch (ival) {
-+ case AFMT_MU_LAW: new_format = HARMONY_DF_8BIT_ULAW; break;
-+ case AFMT_A_LAW: new_format = HARMONY_DF_8BIT_ALAW; break;
-+ case AFMT_S16_LE: /* fall through, but not really supported */
-+ case AFMT_S16_BE: new_format = HARMONY_DF_16BIT_LINEAR;
-+ ival = AFMT_S16_BE;
-+ break;
-+ default: {
-+ DPRINTK(KERN_WARNING PFX
-+ "unsupported sound format 0x%04x requested.\n",
-+ ival);
-+ return -EINVAL;
-+ }
-+ }
-+ harmony_set_format(new_format);
-+ } else {
-+ switch (harmony.data_format) {
-+ case HARMONY_DF_8BIT_ULAW: ival = AFMT_MU_LAW; break;
-+ case HARMONY_DF_8BIT_ALAW: ival = AFMT_A_LAW; break;
-+ case HARMONY_DF_16BIT_LINEAR: ival = AFMT_U16_BE; break;
-+ default: ival = 0;
-+ }
-+ }
-+ return put_user(ival, (int *) arg);
-+
-+ case SOUND_PCM_READ_RATE:
-+ ival = harmony.dac_rate;
-+ return put_user(ival, (int *) arg);
-+
-+ case SNDCTL_DSP_SPEED:
-+ if (get_user(ival, (int *) arg))
-+ return -EFAULT;
-+ harmony_set_rate(harmony_detect_rate(&ival));
-+ harmony.dac_rate = ival;
-+ return put_user(ival, (int*) arg);
-+
-+ case SNDCTL_DSP_STEREO:
-+ if (get_user(ival, (int *) arg))
-+ return -EFAULT;
-+ if (ival != 0 && ival != 1)
-+ return -EINVAL;
-+ harmony_set_stereo(ival);
-+ return put_user(ival, (int *) arg);
-+
-+ case SNDCTL_DSP_GETBLKSIZE:
-+ ival = HARMONY_BUF_SIZE;
-+ return put_user(ival, (int *) arg);
-+
-+ case SNDCTL_DSP_NONBLOCK:
-+ file->f_flags |= O_NONBLOCK;
-+ return 0;
-+
-+ case SNDCTL_DSP_RESET:
-+ if (!harmony.suspended_recording) {
-+ /* TODO: stop_recording() */
-+ }
-+ return 0;
-+
-+ case SNDCTL_DSP_SETFRAGMENT:
-+ if (get_user(ival, (int *)arg))
-+ return -EFAULT;
-+ frag_size = ival & 0xffff;
-+ frag_buf = (ival>>16) & 0xffff;
-+ /* TODO: We use hardcoded fragment sizes and numbers for now */
-+ frag_size = 12; /* 4096 == 2^12 */
-+ frag_buf = MAX_BUFS;
-+ ival = (frag_buf << 16) + frag_size;
-+ return put_user(ival, (int *) arg);
-+
-+ case SNDCTL_DSP_GETOSPACE:
-+ if (!(file->f_mode & FMODE_WRITE))
-+ return -EINVAL;
-+ info.fragstotal = MAX_BUFS;
-+ info.fragments = MAX_BUFS - harmony.nb_filled_play;
-+ info.fragsize = HARMONY_BUF_SIZE;
-+ info.bytes = info.fragments * info.fragsize;
-+ return copy_to_user((void *)arg, &info, sizeof(info));
-+
-+ case SNDCTL_DSP_GETISPACE:
-+ if (!(file->f_mode & FMODE_READ))
-+ return -EINVAL;
-+ info.fragstotal = MAX_BUFS;
-+ info.fragments = /*MAX_BUFS-*/ harmony.nb_filled_record;
-+ info.fragsize = HARMONY_BUF_SIZE;
-+ info.bytes = info.fragments * info.fragsize;
-+ return copy_to_user((void *)arg, &info, sizeof(info));
-+
-+ case SNDCTL_DSP_SYNC:
-+ return 0;
-+ }
-+
-+ return -EINVAL;
-+}
-+
-+
-+/*
-+ * harmony_interrupt()
-+ *
-+ * harmony interruption service routine
-+ *
-+ */
-+
-+static irqreturn_t harmony_interrupt(int irq, void *dev, struct pt_regs *regs)
-+{
-+ u32 dstatus;
-+ struct harmony_hpa *hpa;
-+
-+ /* Setup the hpa */
-+ hpa = ((struct harmony_dev *)dev)->hpa;
-+ harmony_wait_CNTL();
-+
-+ /* Read dstatus and pcuradd (the current address) */
-+ dstatus = gsc_readl(&hpa->dstatus);
-+
-+ /* Turn off interrupts */
-+ harmony_disable_interrupts();
-+
-+ /* Check if this is a request to get the next play buffer */
-+ if (dstatus & DSTATUS_PN) {
-+ if (!harmony.nb_filled_play) {
-+ harmony.suspended_playing = 1;
-+ gsc_writel((unsigned long)silent.dma_handle, &hpa->pnxtadd);
-+
-+ if (!harmony.suspended_recording)
-+ harmony_enable_interrupts();
-+ } else {
-+ harmony.suspended_playing = 0;
-+ gsc_writel((unsigned long)played_buf.dma_handle +
-+ (HARMONY_BUF_SIZE*harmony.first_filled_play),
-+ &hpa->pnxtadd);
-+ harmony.first_filled_play++;
-+ harmony.first_filled_play %= MAX_BUFS;
-+ harmony.nb_filled_play--;
-+
-+ harmony_enable_interrupts();
-+ }
-+
-+ if (harmony.blocked_playing)
-+ wake_up_interruptible(&harmony.wq_play);
-+ }
-+
-+ /* Check if we're being asked to fill in a recording buffer */
-+ if (dstatus & DSTATUS_RN) {
-+ if((harmony.nb_filled_record+2>=MAX_BUFS) || harmony.suspended_recording)
-+ {
-+ harmony.nb_filled_record = 0;
-+ harmony.first_filled_record = 0;
-+ harmony.suspended_recording = 1;
-+ gsc_writel((unsigned long)graveyard.dma_handle, &hpa->rnxtadd);
-+ if (!harmony.suspended_playing)
-+ harmony_enable_interrupts();
-+ } else {
-+ int buf_to_fill;
-+ buf_to_fill = (harmony.first_filled_record+harmony.nb_filled_record) % MAX_BUFS;
-+ CHECK_WBACK_INV_OFFSET(recorded_buf, HARMONY_BUF_SIZE*buf_to_fill, HARMONY_BUF_SIZE);
-+ gsc_writel((unsigned long)recorded_buf.dma_handle +
-+ HARMONY_BUF_SIZE*buf_to_fill,
-+ &hpa->rnxtadd);
-+ harmony.nb_filled_record++;
-+ harmony_enable_interrupts();
-+ }
-+
-+ if (harmony.blocked_recording && harmony.nb_filled_record>3)
-+ wake_up_interruptible(&harmony.wq_record);
-+ }
-+ return IRQ_HANDLED;
-+}
-+
-+/*
-+ * Sound playing functions
-+ */
-+
-+static struct file_operations harmony_audio_fops = {
-+ owner: THIS_MODULE,
-+ llseek: no_llseek,
-+ read: harmony_audio_read,
-+ write: harmony_audio_write,
-+ poll: harmony_audio_poll,
-+ ioctl: harmony_audio_ioctl,
-+ open: harmony_audio_open,
-+ release:harmony_audio_release,
-+};
-+
-+static int harmony_audio_init(void)
-+{
-+ /* Request that IRQ */
-+ if (request_irq(harmony.irq, harmony_interrupt, 0 ,"harmony", &harmony)) {
-+ printk(KERN_ERR PFX "Error requesting irq %d.\n", harmony.irq);
-+ return -EFAULT;
-+ }
-+
-+ harmony.dsp_unit = register_sound_dsp(&harmony_audio_fops, -1);
-+ if (harmony.dsp_unit < 0) {
-+ printk(KERN_ERR PFX "Error registering dsp\n");
-+ free_irq(harmony.irq, &harmony);
-+ return -EFAULT;
-+ }
-+
-+ /* Clear the buffers so you don't end up with crap in the buffers. */
-+ harmony_silence(&played_buf, 0, HARMONY_BUF_SIZE*MAX_BUFS);
-+
-+ /* Make sure this makes it to cache */
-+ CHECK_WBACK_INV_OFFSET(played_buf, 0, HARMONY_BUF_SIZE*MAX_BUFS);
-+
-+ /* Clear out the silent buffer and flush to cache */
-+ harmony_silence(&silent, 0, HARMONY_BUF_SIZE);
-+ CHECK_WBACK_INV_OFFSET(silent, 0, HARMONY_BUF_SIZE);
-+
-+ harmony.audio_open = 0;
-+
-+ return 0;
-+}
-+
-+
-+/*
-+ * mixer functions
-+ */
-+
-+static void harmony_mixer_set_gain(void)
-+{
-+ harmony_wait_CNTL();
-+ gsc_writel(harmony.current_gain, &harmony.hpa->gainctl);
-+}
-+
-+/*
-+ * Read gain of selected channel.
-+ * The OSS rate is from 0 (silent) to 100 -> need some conversions
-+ *
-+ * The harmony gain are attenuation for output and monitor gain.
-+ * is amplifaction for input gain
-+ */
-+#define to_harmony_level(level,max) ((level)*max/100)
-+#define to_oss_level(level,max) ((level)*100/max)
-+
-+static int harmony_mixer_get_level(int channel)
-+{
-+ int left_level;
-+ int right_level;
-+
-+ switch (channel) {
-+ case SOUND_MIXER_OGAIN:
-+ left_level = (harmony.current_gain & GAIN_LO_MASK) >> GAIN_LO_SHIFT;
-+ right_level = (harmony.current_gain & GAIN_RO_MASK) >> GAIN_RO_SHIFT;
-+ left_level = to_oss_level(MAX_OUTPUT_LEVEL - left_level, MAX_OUTPUT_LEVEL);
-+ right_level = to_oss_level(MAX_OUTPUT_LEVEL - right_level, MAX_OUTPUT_LEVEL);
-+ return (right_level << 8)+left_level;
-+
-+ case SOUND_MIXER_IGAIN:
-+ left_level = (harmony.current_gain & GAIN_LI_MASK) >> GAIN_LI_SHIFT;
-+ right_level= (harmony.current_gain & GAIN_RI_MASK) >> GAIN_RI_SHIFT;
-+ left_level = to_oss_level(left_level, MAX_INPUT_LEVEL);
-+ right_level= to_oss_level(right_level, MAX_INPUT_LEVEL);
-+ return (right_level << 8)+left_level;
-+
-+ case SOUND_MIXER_VOLUME:
-+ left_level = (harmony.current_gain & GAIN_MA_MASK) >> GAIN_MA_SHIFT;
-+ left_level = to_oss_level(MAX_VOLUME_LEVEL-left_level, MAX_VOLUME_LEVEL);
-+ return left_level;
-+ }
-+ return -EINVAL;
-+}
-+
-+
-+
-+/*
-+ * Some conversions for the same reasons.
-+ * We give back the new real value(s) due to
-+ * the rescale.
-+ */
-+
-+static int harmony_mixer_set_level(int channel, int value)
-+{
-+ int left_level;
-+ int right_level;
-+ int new_left_level;
-+ int new_right_level;
-+
-+ right_level = (value & 0x0000ff00) >> 8;
-+ left_level = value & 0x000000ff;
-+
-+ switch (channel) {
-+ case SOUND_MIXER_OGAIN:
-+ right_level = to_harmony_level(100-right_level, MAX_OUTPUT_LEVEL);
-+ left_level = to_harmony_level(100-left_level, MAX_OUTPUT_LEVEL);
-+ new_right_level = to_oss_level(MAX_OUTPUT_LEVEL - right_level, MAX_OUTPUT_LEVEL);
-+ new_left_level = to_oss_level(MAX_OUTPUT_LEVEL - left_level, MAX_OUTPUT_LEVEL);
-+ harmony.current_gain = (harmony.current_gain & ~(GAIN_LO_MASK | GAIN_RO_MASK))
-+ | (left_level << GAIN_LO_SHIFT) | (right_level << GAIN_RO_SHIFT);
-+ harmony_mixer_set_gain();
-+ return (new_right_level << 8) + new_left_level;
-+
-+ case SOUND_MIXER_IGAIN:
-+ right_level = to_harmony_level(right_level, MAX_INPUT_LEVEL);
-+ left_level = to_harmony_level(left_level, MAX_INPUT_LEVEL);
-+ new_right_level = to_oss_level(right_level, MAX_INPUT_LEVEL);
-+ new_left_level = to_oss_level(left_level, MAX_INPUT_LEVEL);
-+ harmony.current_gain = (harmony.current_gain & ~(GAIN_LI_MASK | GAIN_RI_MASK))
-+ | (left_level << GAIN_LI_SHIFT) | (right_level << GAIN_RI_SHIFT);
-+ harmony_mixer_set_gain();
-+ return (new_right_level << 8) + new_left_level;
-+
-+ case SOUND_MIXER_VOLUME:
-+ left_level = to_harmony_level(100-left_level, MAX_VOLUME_LEVEL);
-+ new_left_level = to_oss_level(MAX_VOLUME_LEVEL-left_level, MAX_VOLUME_LEVEL);
-+ harmony.current_gain = (harmony.current_gain & ~GAIN_MA_MASK)| (left_level << GAIN_MA_SHIFT);
-+ harmony_mixer_set_gain();
-+ return new_left_level;
-+ }
-+
-+ return -EINVAL;
-+}
-+
-+#undef to_harmony_level
-+#undef to_oss_level
-+
-+/*
-+ * Return the selected input device (mic or line)
-+ */
-+
-+static int harmony_mixer_get_recmask(void)
-+{
-+ int current_input_line;
-+
-+ current_input_line = (harmony.current_gain & GAIN_IS_MASK)
-+ >> GAIN_IS_SHIFT;
-+ if (current_input_line)
-+ return SOUND_MASK_MIC;
-+
-+ return SOUND_MASK_LINE;
-+}
-+
-+/*
-+ * Set the input (only one at time, arbitrary priority to line in)
-+ */
-+
-+static int harmony_mixer_set_recmask(int recmask)
-+{
-+ int new_input_line;
-+ int new_input_mask;
-+
-+ if ((recmask & SOUND_MASK_LINE)) {
-+ new_input_line = 0;
-+ new_input_mask = SOUND_MASK_LINE;
-+ } else {
-+ new_input_line = 1;
-+ new_input_mask = SOUND_MASK_MIC;
-+ }
-+ harmony.current_gain = ((harmony.current_gain & ~GAIN_IS_MASK) |
-+ (new_input_line << GAIN_IS_SHIFT ));
-+ harmony_mixer_set_gain();
-+ return new_input_mask;
-+}
-+
-+
-+/*
-+ * give the active outlines
-+ */
-+
-+static int harmony_mixer_get_outmask(void)
-+{
-+ int outmask = 0;
-+
-+ if (harmony.current_gain & GAIN_HE_MASK) outmask |=SOUND_MASK_PHONEOUT;
-+ if (harmony.current_gain & GAIN_LE_MASK) outmask |=SOUND_MASK_LINE;
-+ if (harmony.current_gain & GAIN_SE_MASK) outmask |=SOUND_MASK_SPEAKER;
-+
-+ return outmask;
-+}
-+
-+
-+static int harmony_mixer_set_outmask(int outmask)
-+{
-+ if (outmask & SOUND_MASK_PHONEOUT)
-+ harmony.current_gain |= GAIN_HE_MASK;
-+ else
-+ harmony.current_gain &= ~GAIN_HE_MASK;
-+
-+ if (outmask & SOUND_MASK_LINE)
-+ harmony.current_gain |= GAIN_LE_MASK;
-+ else
-+ harmony.current_gain &= ~GAIN_LE_MASK;
-+
-+ if (outmask & SOUND_MASK_SPEAKER)
-+ harmony.current_gain |= GAIN_SE_MASK;
-+ else
-+ harmony.current_gain &= ~GAIN_SE_MASK;
-+
-+ harmony_mixer_set_gain();
-+
-+ return (outmask & (SOUND_MASK_PHONEOUT | SOUND_MASK_LINE | SOUND_MASK_SPEAKER));
-+}
-+
-+/*
-+ * This code is inspired from sb_mixer.c
-+ */
-+
-+static int harmony_mixer_ioctl(struct inode * inode, struct file * file,
-+ unsigned int cmd, unsigned long arg)
-+{
-+ int val;
-+ int ret;
-+
-+ if (cmd == SOUND_MIXER_INFO) {
-+ mixer_info info;
-+ memset(&info, 0, sizeof(info));
-+ strncpy(info.id, "harmony", sizeof(info.id)-1);
-+ strncpy(info.name, "Harmony audio", sizeof(info.name)-1);
-+ info.modify_counter = 1; /* ? */
-+ if (copy_to_user((void *)arg, &info, sizeof(info)))
-+ return -EFAULT;
-+ return 0;
-+ }
-+
-+ if (cmd == OSS_GETVERSION)
-+ return put_user(SOUND_VERSION, (int *)arg);
-+
-+ /* read */
-+ val = 0;
-+ if (_SIOC_DIR(cmd) & _SIOC_WRITE)
-+ if (get_user(val, (int *)arg))
-+ return -EFAULT;
-+
-+ switch (cmd) {
-+ case MIXER_READ(SOUND_MIXER_CAPS):
-+ ret = SOUND_CAP_EXCL_INPUT;
-+ break;
-+ case MIXER_READ(SOUND_MIXER_STEREODEVS):
-+ ret = SOUND_MASK_IGAIN | SOUND_MASK_OGAIN;
-+ break;
-+
-+ case MIXER_READ(SOUND_MIXER_RECMASK):
-+ ret = SOUND_MASK_MIC | SOUND_MASK_LINE;
-+ break;
-+ case MIXER_READ(SOUND_MIXER_DEVMASK):
-+ ret = SOUND_MASK_OGAIN | SOUND_MASK_IGAIN |
-+ SOUND_MASK_VOLUME;
-+ break;
-+ case MIXER_READ(SOUND_MIXER_OUTMASK):
-+ ret = SOUND_MASK_SPEAKER | SOUND_MASK_LINE |
-+ SOUND_MASK_PHONEOUT;
-+ break;
-+
-+ case MIXER_WRITE(SOUND_MIXER_RECSRC):
-+ ret = harmony_mixer_set_recmask(val);
-+ break;
-+ case MIXER_READ(SOUND_MIXER_RECSRC):
-+ ret = harmony_mixer_get_recmask();
-+ break;
-+
-+ case MIXER_WRITE(SOUND_MIXER_OUTSRC):
-+ ret = harmony_mixer_set_outmask(val);
-+ break;
-+ case MIXER_READ(SOUND_MIXER_OUTSRC):
-+ ret = harmony_mixer_get_outmask();
-+ break;
-+
-+ case MIXER_WRITE(SOUND_MIXER_OGAIN):
-+ case MIXER_WRITE(SOUND_MIXER_IGAIN):
-+ case MIXER_WRITE(SOUND_MIXER_VOLUME):
-+ ret = harmony_mixer_set_level(cmd & 0xff, val);
-+ break;
-+
-+ case MIXER_READ(SOUND_MIXER_OGAIN):
-+ case MIXER_READ(SOUND_MIXER_IGAIN):
-+ case MIXER_READ(SOUND_MIXER_VOLUME):
-+ ret = harmony_mixer_get_level(cmd & 0xff);
-+ break;
-+
-+ default:
-+ return -EINVAL;
-+ }
-+
-+ if (put_user(ret, (int *)arg))
-+ return -EFAULT;
-+ return 0;
-+}
-+
-+
-+static int harmony_mixer_open(struct inode *inode, struct file *file)
-+{
-+ if (harmony.mixer_open)
-+ return -EBUSY;
-+ harmony.mixer_open++;
-+ return 0;
-+}
-+
-+static int harmony_mixer_release(struct inode *inode, struct file *file)
-+{
-+ if (!harmony.mixer_open)
-+ return -EBUSY;
-+ harmony.mixer_open--;
-+ return 0;
-+}
-+
-+static struct file_operations harmony_mixer_fops = {
-+ owner: THIS_MODULE,
-+ llseek: no_llseek,
-+ open: harmony_mixer_open,
-+ release: harmony_mixer_release,
-+ ioctl: harmony_mixer_ioctl,
-+};
-+
-+
-+/*
-+ * Mute all the output and reset Harmony.
-+ */
-+
-+static void __init harmony_mixer_reset(void)
-+{
-+ harmony.current_gain = GAIN_TOTAL_SILENCE;
-+ harmony_mixer_set_gain();
-+ harmony_wait_CNTL();
-+ gsc_writel(1, &harmony.hpa->reset);
-+ mdelay(50); /* wait 50 ms */
-+ gsc_writel(0, &harmony.hpa->reset);
-+ harmony.current_gain = GAIN_DEFAULT;
-+ harmony_mixer_set_gain();
-+}
-+
-+static int __init harmony_mixer_init(void)
-+{
-+ /* Register the device file operations */
-+ harmony.mixer_unit = register_sound_mixer(&harmony_mixer_fops, -1);
-+ if (harmony.mixer_unit < 0) {
-+ printk(KERN_WARNING PFX "Error Registering Mixer Driver\n");
-+ return -EFAULT;
-+ }
-+
-+ harmony_mixer_reset();
-+ harmony.mixer_open = 0;
-+
-+ return 0;
-+}
-+
-+
-+
-+/*
-+ * This is the callback that's called by the inventory hardware code
-+ * if it finds a match to the registered driver.
-+ */
-+static int __init
-+harmony_driver_callback(struct parisc_device *dev)
-+{
-+ u8 id;
-+ u8 rev;
-+ u32 cntl;
-+ int ret;
-+
-+ if (harmony.hpa) {
-+ /* We only support one Harmony at this time */
-+ printk(KERN_ERR PFX "driver already registered\n");
-+ return -EBUSY;
-+ }
-+
-+ /* Set the HPA of harmony */
-+ harmony.hpa = (struct harmony_hpa *)dev->hpa;
-+
-+ harmony.irq = dev->irq;
-+ if (!harmony.irq) {
-+ printk(KERN_ERR PFX "no irq found\n");
-+ return -ENODEV;
-+ }
-+
-+ /* Grab the ID and revision from the device */
-+ id = gsc_readb(&harmony.hpa->id);
-+ if ((id | 1) != 0x15) {
-+ printk(KERN_WARNING PFX "wrong harmony id 0x%02x\n", id);
-+ return -EBUSY;
-+ }
-+ cntl = gsc_readl(&harmony.hpa->cntl);
-+ rev = (cntl>>20) & 0xff;
-+
-+ printk(KERN_INFO "Lasi Harmony Audio driver " HARMONY_VERSION ", "
-+ "h/w id %i, rev. %i at 0x%lx, IRQ %i\n",
-+ id, rev, dev->hpa, harmony.irq);
-+
-+ /* Make sure the control bit isn't set, although I don't think it
-+ ever is. */
-+ if (cntl & CNTL_C) {
-+ printk(KERN_WARNING PFX "CNTL busy\n");
-+ harmony.hpa = 0;
-+ return -EBUSY;
-+ }
-+
-+ /* a fake pci_dev is needed for pci_* functions under ccio */
-+ harmony.fake_pci_dev = ccio_get_fake(dev);
-+
-+ /* Initialize the memory buffers */
-+ if (harmony_alloc_buffer(&played_buf, MAX_BUFS) ||
-+ harmony_alloc_buffer(&recorded_buf, MAX_BUFS) ||
-+ harmony_alloc_buffer(&graveyard, 1) ||
-+ harmony_alloc_buffer(&silent, 1)) {
-+ ret = -EBUSY;
-+ goto out_err;
-+ }
-+
-+ /* Initialize /dev/mixer and /dev/audio */
-+ if ((ret=harmony_mixer_init()))
-+ goto out_err;
-+ if ((ret=harmony_audio_init()))
-+ goto out_err;
-+
-+ return 0;
-+
-+out_err:
-+ harmony.hpa = 0;
-+ harmony_free_buffer(&played_buf);
-+ harmony_free_buffer(&recorded_buf);
-+ harmony_free_buffer(&graveyard);
-+ harmony_free_buffer(&silent);
-+ return ret;
-+}
-+
-+
-+static struct parisc_device_id harmony_tbl[] = {
-+ /* { HPHW_FIO, HVERSION_REV_ANY_ID, HVERSION_ANY_ID, 0x0007A }, Bushmaster/Flounder */
-+ { HPHW_FIO, HVERSION_REV_ANY_ID, HVERSION_ANY_ID, 0x0007B }, /* 712/715 Audio */
-+ { HPHW_FIO, HVERSION_REV_ANY_ID, HVERSION_ANY_ID, 0x0007E }, /* Pace Audio */
-+ { HPHW_FIO, HVERSION_REV_ANY_ID, HVERSION_ANY_ID, 0x0007F }, /* Outfield / Coral II */
-+ { 0, }
-+};
-+
-+MODULE_DEVICE_TABLE(parisc, harmony_tbl);
-+
-+static struct parisc_driver harmony_driver = {
-+ name: "Lasi Harmony",
-+ id_table: harmony_tbl,
-+ probe: harmony_driver_callback,
-+};
-+
-+static int __init init_harmony(void)
-+{
-+ return register_parisc_driver(&harmony_driver);
-+}
-+
-+static void __exit cleanup_harmony(void)
-+{
-+ free_irq(harmony.irq, &harmony);
-+ unregister_sound_mixer(harmony.mixer_unit);
-+ unregister_sound_dsp(harmony.dsp_unit);
-+ harmony_free_buffer(&played_buf);
-+ harmony_free_buffer(&recorded_buf);
-+ harmony_free_buffer(&graveyard);
-+ harmony_free_buffer(&silent);
-+ unregister_parisc_driver(&harmony_driver);
-+}
-+
-+EXPORT_NO_SYMBOLS;
-+
-+MODULE_AUTHOR("Alex DeVries <alex@linuxcare.com>");
-+MODULE_DESCRIPTION("Harmony sound driver");
-+MODULE_LICENSE("GPL");
-+
-+module_init(init_harmony);
-+module_exit(cleanup_harmony);
-+
---- /dev/null 2002-08-30 16:31:37.000000000 -0700
-+++ 25/sound/oss/kahlua.c 2003-07-19 17:03:51.000000000 -0700
-@@ -0,0 +1,227 @@
-+/*
-+ * Initialisation code for Cyrix/NatSemi VSA1 softaudio
-+ *
-+ * (C) Copyright 2003 Red Hat Inc <alan@redhat.com>
-+ *
-+ * XpressAudio(tm) is used on the Cyrix MediaGX (now NatSemi Geode) systems.
-+ * The older version (VSA1) provides fairly good soundblaster emulation
-+ * although there are a couple of bugs: large DMA buffers break record,
-+ * and the MPU event handling seems suspect. VSA2 allows the native driver
-+ * to control the AC97 audio engine directly and requires a different driver.
-+ *
-+ * Thanks to National Semiconductor for providing the needed information
-+ * on the XpressAudio(tm) internals.
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License as published by the
-+ * Free Software Foundation; either version 2, or (at your option) any
-+ * later version.
-+ *
-+ * This program is distributed in the hope that it will be useful, but
-+ * WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * General Public License for more details.
-+ *
-+ * TO DO:
-+ * Investigate whether we can portably support Cognac (5520) in the
-+ * same manner.
-+ */
-+
-+#include <linux/config.h>
-+#include <linux/init.h>
-+#include <linux/module.h>
-+#include <linux/pci.h>
-+
-+#include "sound_config.h"
-+
-+#include "sb.h"
-+
-+/*
-+ * Read a soundblaster compatible mixer register.
-+ * In this case we are actually reading an SMI trap
-+ * not real hardware.
-+ */
-+
-+static u8 __devinit mixer_read(unsigned long io, u8 reg)
-+{
-+ outb(reg, io + 4);
-+ udelay(20);
-+ reg = inb(io + 5);
-+ udelay(20);
-+ return reg;
-+}
-+
-+static int __devinit probe_one(struct pci_dev *pdev, const struct pci_device_id *ent)
-+{
-+ struct address_info *hw_config;
-+ unsigned long base;
-+ void *mem;
-+ unsigned long io;
-+ u16 map;
-+ u8 irq, dma8, dma16;
-+ int oldquiet;
-+ extern int sb_be_quiet;
-+
-+ base = pci_resource_start(pdev, 0);
-+ if(base == 0UL)
-+ return 1;
-+
-+ mem = ioremap(base, 128);
-+ if(mem == 0UL)
-+ return 1;
-+ map = readw(mem + 0x18); /* Read the SMI enables */
-+ iounmap(mem);
-+
-+ /* Map bits
-+ 0:1 * 0x20 + 0x200 = sb base
-+ 2 sb enable
-+ 3 adlib enable
-+ 5 MPU enable 0x330
-+ 6 MPU enable 0x300
-+
-+ The other bits may be used internally so must be masked */
-+
-+ io = 0x220 + 0x20 * (map & 3);
-+
-+ if(map & (1<<2))
-+ printk(KERN_INFO "kahlua: XpressAudio at 0x%lx\n", io);
-+ else
-+ return 1;
-+
-+ if(map & (1<<5))
-+ printk(KERN_INFO "kahlua: MPU at 0x300\n");
-+ else if(map & (1<<6))
-+ printk(KERN_INFO "kahlua: MPU at 0x330\n");
-+
-+ irq = mixer_read(io, 0x80) & 0x0F;
-+ dma8 = mixer_read(io, 0x81);
-+
-+ // printk("IRQ=%x MAP=%x DMA=%x\n", irq, map, dma8);
-+
-+ if(dma8 & 0x20)
-+ dma16 = 5;
-+ else if(dma8 & 0x40)
-+ dma16 = 6;
-+ else if(dma8 & 0x80)
-+ dma16 = 7;
-+ else
-+ {
-+ printk(KERN_ERR "kahlua: No 16bit DMA enabled.\n");
-+ return 1;
-+ }
-+
-+ if(dma8 & 0x01)
-+ dma8 = 0;
-+ else if(dma8 & 0x02)
-+ dma8 = 1;
-+ else if(dma8 & 0x08)
-+ dma8 = 3;
-+ else
-+ {
-+ printk(KERN_ERR "kahlua: No 8bit DMA enabled.\n");
-+ return 1;
-+ }
-+
-+ if(irq & 1)
-+ irq = 9;
-+ else if(irq & 2)
-+ irq = 5;
-+ else if(irq & 4)
-+ irq = 7;
-+ else if(irq & 8)
-+ irq = 10;
-+ else
-+ {
-+ printk(KERN_ERR "kahlua: SB IRQ not set.\n");
-+ return 1;
-+ }
-+
-+ printk(KERN_INFO "kahlua: XpressAudio on IRQ %d, DMA %d, %d\n",
-+ irq, dma8, dma16);
-+
-+ hw_config = kmalloc(sizeof(struct address_info), GFP_KERNEL);
-+ if(hw_config == NULL)
-+ {
-+ printk(KERN_ERR "kahlua: out of memory.\n");
-+ return 1;
-+ }
-+ memset(hw_config, 0, sizeof(*hw_config));
-+
-+ pci_set_drvdata(pdev, hw_config);
-+
-+ hw_config->io_base = io;
-+ hw_config->irq = irq;
-+ hw_config->dma = dma8;
-+ hw_config->dma2 = dma16;
-+ hw_config->name = "Cyrix XpressAudio";
-+ hw_config->driver_use_1 = SB_NO_MIDI | SB_PCI_IRQ;
-+
-+ if(sb_dsp_detect(hw_config, 0, 0, NULL)==0)
-+ {
-+ printk(KERN_ERR "kahlua: audio not responding.\n");
-+ goto err_out_free;
-+ }
-+
-+ oldquiet = sb_be_quiet;
-+ sb_be_quiet = 1;
-+ if(sb_dsp_init(hw_config, THIS_MODULE))
-+ {
-+ sb_be_quiet = oldquiet;
-+ goto err_out_free;
-+ }
-+ sb_be_quiet = oldquiet;
-+
-+ return 0;
-+
-+err_out_free:
-+ pci_set_drvdata(pdev, NULL);
-+ kfree(hw_config);
-+ return 1;
-+}
-+
-+static void __devexit remove_one(struct pci_dev *pdev)
-+{
-+ struct address_info *hw_config = pci_get_drvdata(pdev);
-+ sb_dsp_unload(hw_config, 0);
-+ pci_set_drvdata(pdev, NULL);
-+ kfree(hw_config);
-+}
-+
-+MODULE_AUTHOR("Alan Cox");
-+MODULE_DESCRIPTION("Kahlua VSA1 PCI Audio");
-+MODULE_LICENSE("GPL");
-+
-+/*
-+ * 5530 only. The 5510/5520 decode is different.
-+ */
-+
-+static struct pci_device_id id_tbl[] __devinitdata = {
-+ { PCI_VENDOR_ID_CYRIX, PCI_DEVICE_ID_CYRIX_5530_AUDIO, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
-+ { }
-+};
-+
-+MODULE_DEVICE_TABLE(pci, id_tbl);
-+
-+static struct pci_driver kahlua_driver = {
-+ name: "kahlua",
-+ id_table: id_tbl,
-+ probe: probe_one,
-+ remove: __devexit_p(remove_one),
-+};
-+
-+
-+static int __init kahlua_init_module(void)
-+{
-+ printk(KERN_INFO "Cyrix Kahlua VSA1 XpressAudio support (c) Copyright 2003 Red Hat Inc\n");
-+ return pci_module_init(&kahlua_driver);
-+}
-+
-+static void __devexit kahlua_cleanup_module(void)
-+{
-+ return pci_unregister_driver(&kahlua_driver);
-+}
-+
-+
-+module_init(kahlua_init_module);
-+module_exit(kahlua_cleanup_module);
-+
---- linux-2.6.0-test1/sound/oss/Kconfig 2003-07-13 21:44:35.000000000 -0700
-+++ 25/sound/oss/Kconfig 2003-07-19 17:03:51.000000000 -0700
-@@ -233,6 +233,10 @@ config SOUND_ICH
- Support for integral audio in Intel's I/O Controller Hub (ICH)
- chipset, as used on the 810/820/840 motherboards.
-
-+config SOUND_HARMONY
-+ tristate "PA Harmony audio driver"
-+ depends on GSC_LASI && SOUND
-+
- config SOUND_RME96XX
- tristate "RME Hammerfall (RME96XX) support (EXPERIMENTAL)"
- depends on SOUND_PRIME!=n && SOUND && PCI && EXPERIMENTAL
-@@ -260,6 +264,10 @@ config SOUND_VWSND
- <file:Documentation/sound/oss/vwsnd> for more info on this driver's
- capabilities.
-
-+config SOUND_HAL2
-+ tristate "SGI HAL2 sound (EXPERIMENTAL)"
-+ depends on SGI_IP22 && SOUND && EXPERIMENTAL
-+
- config SOUND_VRC5477
- tristate "NEC Vrc5477 AC97 sound"
- depends on SOUND_PRIME!=n && DDB5477 && SOUND
-@@ -1126,3 +1134,23 @@ config SOUND_TVMIXER
- Support for audio mixer facilities on the BT848 TV frame-grabber
- card.
-
-+config SOUND_KAHLUA
-+ tristate "XpressAudio Sound Blaster emulation"
-+ depends on SOUND_SB
-+
-+config SOUND_ALI5455
-+ tristate "ALi5455 audio support"
-+ depends on SOUND_PRIME!=n && PCI
-+
-+config SOUND_FORTE
-+ tristate "ForteMedia FM801 driver"
-+ depends on SOUND_PRIME!=n && PCI
-+
-+config SOUND_RME96XX
-+ tristate "RME Hammerfall (RME96XX) support"
-+ depends on SOUND_PRIME!=n && PCI
-+
-+config SOUND_AD1980
-+ tristate "AD1980 front/back switch plugin"
-+ depends on SOUND_PRIME!=n
-+
---- linux-2.6.0-test1/sound/oss/Makefile 2003-07-13 21:44:35.000000000 -0700
-+++ 25/sound/oss/Makefile 2003-07-19 17:03:51.000000000 -0700
-@@ -10,6 +10,7 @@ obj-$(CONFIG_SOUND_CS4232) += cs4232.o a
-
- # Please leave it as is, cause the link order is significant !
-
-+obj-$(CONFIG_SOUND_HAL2) += hal2.o
- obj-$(CONFIG_SOUND_AEDSP16) += aedsp16.o
- obj-$(CONFIG_SOUND_PSS) += pss.o ad1848.o mpu401.o
- obj-$(CONFIG_SOUND_TRIX) += trix.o ad1848.o sb_lib.o uart401.o
-@@ -21,6 +22,7 @@ obj-$(CONFIG_SOUND_MSS) += ad1848.o
- obj-$(CONFIG_SOUND_OPL3SA2) += opl3sa2.o ad1848.o mpu401.o
- obj-$(CONFIG_SOUND_PAS) += pas2.o sb.o sb_lib.o uart401.o
- obj-$(CONFIG_SOUND_SB) += sb.o sb_lib.o uart401.o
-+obj-$(CONFIG_SOUND_KAHLUA) += kahlua.o
- obj-$(CONFIG_SOUND_WAVEFRONT) += wavefront.o
- obj-$(CONFIG_SOUND_MAUI) += maui.o mpu401.o
- obj-$(CONFIG_SOUND_MPU401) += mpu401.o
-@@ -60,10 +62,16 @@ obj-$(CONFIG_SOUND_FUSION) += cs46xx.o a
- obj-$(CONFIG_SOUND_MAESTRO) += maestro.o
- obj-$(CONFIG_SOUND_MAESTRO3) += maestro3.o ac97_codec.o
- obj-$(CONFIG_SOUND_TRIDENT) += trident.o ac97_codec.o
-+obj-$(CONFIG_SOUND_HARMONY) += harmony.o
- obj-$(CONFIG_SOUND_EMU10K1) += ac97_codec.o
- obj-$(CONFIG_SOUND_RME96XX) += rme96xx.o
- obj-$(CONFIG_SOUND_BT878) += btaudio.o
-+obj-$(CONFIG_SOUND_ALI5455) += ali5455.o ac97_codec.o
- obj-$(CONFIG_SOUND_IT8172) += ite8172.o ac97_codec.o
-+obj-$(CONFIG_SOUND_FORTE) += forte.o
-+
-+obj-$(CONFIG_SOUND_AD1980) += ac97_plugin_ad1980.o
-+obj-$(CONFIG_SOUND_WM97XX) += ac97_plugin_wm97xx.o
-
- ifeq ($(CONFIG_MIDI_EMU10K1),y)
- obj-$(CONFIG_SOUND_EMU10K1) += sound.o
---- linux-2.6.0-test1/sound/pci/ice1712/ak4xxx.c 2003-06-14 12:17:55.000000000 -0700
-+++ 25/sound/pci/ice1712/ak4xxx.c 2003-07-19 17:06:15.000000000 -0700
-@@ -116,8 +116,8 @@ static void snd_ice1712_akm4xxx_write(ak
- /*
- * initialize the akm4xxx_t record with the template
- */
--int __devinit snd_ice1712_akm4xxx_init(akm4xxx_t *ak, const akm4xxx_t *temp,
-- const struct snd_ak4xxx_private *_priv, ice1712_t *ice)
-+int snd_ice1712_akm4xxx_init(akm4xxx_t *ak, const akm4xxx_t *temp,
-+ const struct snd_ak4xxx_private *_priv, ice1712_t *ice)
- {
- struct snd_ak4xxx_private *priv;
-
-@@ -139,7 +139,7 @@ int __devinit snd_ice1712_akm4xxx_init(a
- return 0;
- }
-
--void __devexit snd_ice1712_akm4xxx_free(ice1712_t *ice)
-+void snd_ice1712_akm4xxx_free(ice1712_t *ice)
- {
- unsigned int akidx;
- if (ice->akm == NULL)
-@@ -155,7 +155,7 @@ void __devexit snd_ice1712_akm4xxx_free(
- /*
- * build AK4xxx controls
- */
--int __devinit snd_ice1712_akm4xxx_build_controls(ice1712_t *ice)
-+int snd_ice1712_akm4xxx_build_controls(ice1712_t *ice)
- {
- unsigned int akidx;
- int err;
---- linux-2.6.0-test1/sound/pci/intel8x0.c 2003-06-14 12:18:23.000000000 -0700
-+++ 25/sound/pci/intel8x0.c 2003-07-19 17:04:58.000000000 -0700
-@@ -2062,10 +2062,8 @@ static void __devinit intel8x0_measure_a
-
- t = stop_time.tv_sec - start_time.tv_sec;
- t *= 1000000;
-- if (stop_time.tv_usec < start_time.tv_usec)
-- t -= start_time.tv_usec - stop_time.tv_usec;
-- else
-- t += stop_time.tv_usec - start_time.tv_usec;
-+ t += stop_time.tv_usec - start_time.tv_usec;
-+ printk(KERN_INFO "%s: measured %lu usecs\n", __FUNCTION__, t);
- if (t == 0) {
- snd_printk(KERN_ERR "?? calculation error..\n");
- return;
---- linux-2.6.0-test1/usr/Makefile 2003-07-10 18:50:32.000000000 -0700
-+++ 25/usr/Makefile 2003-07-19 17:03:51.000000000 -0700
-@@ -3,7 +3,7 @@ obj-y := initramfs_data.o
-
- host-progs := gen_init_cpio
-
--clean-files := initramfs_data.cpio.gz
-+clean-files := initramfs_data.cpio.gz initramfs_data.S
-
- $(src)/initramfs_data.S: $(obj)/initramfs_data.cpio.gz
- echo " .section .init.ramfs,\"a\"" > $(src)/initramfs_data.S