From 4af33c1ed3d7545131ab7ab180b61084566f32e1 Mon Sep 17 00:00:00 2001 From: phil Date: Tue, 22 Jul 2003 14:05:20 +0000 Subject: [PATCH] partial merge of b_unify into b_devel (20030722_0202) --- .../kernel_patches/patches/2.6.0-test1-mm2.patch | 179799 ++++++++++++++++++ .../kernel_patches/patches/kexec-2.6.0-full.patch | 1428 + .../patches/lkcd-kernel-changes-2.6.0-test1.patch | 588 + .../patches/vfs_intent_2.6.0-test1.patch | 764 + lustre/kernel_patches/pc/2.6.0-test1-mm2.pc | 1202 + lustre/kernel_patches/pc/kexec-2.6.0-full.pc | 23 + .../pc/lkcd-kernel-changes-2.6.0-test1.pc | 25 + lustre/kernel_patches/pc/vfs_intent_2.6.0-test1.pc | 14 + lustre/kernel_patches/series/kgdb_2.6.0_test1 | 15 + 9 files changed, 183858 insertions(+) create mode 100644 lustre/kernel_patches/patches/2.6.0-test1-mm2.patch create mode 100644 lustre/kernel_patches/patches/kexec-2.6.0-full.patch create mode 100644 lustre/kernel_patches/patches/lkcd-kernel-changes-2.6.0-test1.patch create mode 100644 lustre/kernel_patches/patches/vfs_intent_2.6.0-test1.patch create mode 100644 lustre/kernel_patches/pc/2.6.0-test1-mm2.pc create mode 100644 lustre/kernel_patches/pc/kexec-2.6.0-full.pc create mode 100644 lustre/kernel_patches/pc/lkcd-kernel-changes-2.6.0-test1.pc create mode 100644 lustre/kernel_patches/pc/vfs_intent_2.6.0-test1.pc create mode 100644 lustre/kernel_patches/series/kgdb_2.6.0_test1 diff --git a/lustre/kernel_patches/patches/2.6.0-test1-mm2.patch b/lustre/kernel_patches/patches/2.6.0-test1-mm2.patch new file mode 100644 index 0000000..9f476e0 --- /dev/null +++ b/lustre/kernel_patches/patches/2.6.0-test1-mm2.patch @@ -0,0 +1,179799 @@ +--- 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 + #include /* max_low_pfn */ + #include +-#ifdef CONFIG_BLK_DEV_INITRD +-#include +-#endif + + #include + #include +--- 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 + #include + #include +-#include ++#include + #include + #include + #include +--- 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 + #include + #include +-#include ++#include + + #include + #include +--- 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 + #include + #include +-#include + #include + + #include +--- 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 + + #ifdef CONFIG_BLK_DEV_INITRD +-#include + #include + #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 + #include + #include +-#ifdef CONFIG_BLK_DEV_RAM +-#include +-#endif + #include + #include + #include +--- 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< + #include + #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 + #include + +- +- + /* + * 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 ++ * ModuleState: Experimental $ ++ * ++ * NOTES: See Below $ ++ * ++ * Modified for 386 by Jim Kingdon, Cygnus Support. ++ * Compatibility with 2.1.xx kernel by David Grothe ++ * ++ * 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 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 ++ * ++ * Integrated into 2.2.5 kernel by Tigran Aivazian ++ * 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 ++ * ++ * $#. ++ * ++ * where ++ * :: ++ * :: < two hex digits computed as modulo 256 sum of > ++ * ++ * 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 ++#include ++#include /* for strcpy */ ++#include ++#include ++#include ++#include ++#include /* for linux pt_regs struct */ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++/************************************************************************ ++ * ++ * 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 $# */ ++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; ++ ++ /* $#. */ ++ 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 ++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 ++#include ++#include ++#include ++#include ++ ++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 /* time stamp code */ ++#include /* 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 + #include + ++#ifdef CONFIG_KGDB ++#include ++#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< + #include + #include ++#include + #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< + */ + +-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 ++#include ++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 + #include + ++#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 ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#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 ++#include ++#include ++#include + #include + #include + #include +--- 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 ++#include ++#include ++#include + #include + #include + #include +--- 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 ++#include ++#include + #include + #include + #include + #include + #include ++#include + #include + #include + +--- 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 ++#include ++#include ++#include + #include + #include + #include +--- 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_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<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 + #include + #include +-#ifdef CONFIG_BLK_DEV_INITRD +-#include +-#endif + #include + #include + #include +@@ -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 + #include + #include ++#include + + #include + #include +@@ -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 +-#include ++#include + #include + #include + #include +--- 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 + #include + #include +-#include ++#include + #include + #include + #include +--- 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 +-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 + */ + +@@ -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<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= 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 <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 + #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 . The root ++ * basically like pmd_alloc_map() and pte_alloc_map() in . 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 + #include + #include +-#ifdef CONFIG_BLK_DEV_RAM +-#include +-#endif + + #include + #include +--- 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 + #include + #include +-#ifdef CONFIG_BLK_DEV_RAM +-#include +-#endif + + #include + #include +--- 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 + #include + #include +-#ifdef CONFIG_BLK_DEV_RAM +-#include +-#endif + #include + + #include +--- 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 + + #ifdef CONFIG_BLK_DEV_INITRD +-#include + #include + #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 + #include + #include +-#ifdef CONFIG_BLK_DEV_RAM +-#include +-#endif + #include + #include + #include +--- 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 + #include + #include +-#ifdef CONFIG_BLK_DEV_RAM +-#include +-#endif + #include + #include + #include +--- 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 + #include + #include +-#include ++#include + + #include + #include +--- 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 + #include + #include +-#include ++#include + #include + #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 + #include + #include +-#include ++#include + #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 + #include + #include +-#include ++#include + #include + #include + +--- 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 + #include + #include +-#include ++#include + #include + #include + +--- 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 + #include + #include +-#include ++#include + #include + #include + #include +--- 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 + #include + #include +-#include ++#include + #ifdef CONFIG_RTC_DS1742 + #include + #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 + #include + #include +-#include ++#include + #include + #ifdef CONFIG_RTC_DS1742 + #include +--- 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 +-#include ++#include + #include + #include + #include +--- 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 + #include + #include +-#include + #include + #include + #include +--- 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 + #include + #include +-#include + #include + + #include +--- 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 ++#include + + #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 + #include + #include +-#include + #include + #include + #include +@@ -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 + #include + ++#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 + #include + #include +-#include + #include + + #include +--- 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 + #include + #include +-#ifdef CONFIG_BLK_DEV_INITRD +-#include /* for initrd_* */ +-#endif + + #include + #include +@@ -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 + #include + #include ++#include + + #include + #include +@@ -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 + */ +- 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 + #include + #include + #include +@@ -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 + #include + #include +-#include + #include + + #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 + #include + #include + #include +--- 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 + #include + #include +-#include + #include + #include + +--- 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 + #include + #include +-#include + #include + #include + +--- 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 + #include + #include +-#include + #include + #include + #include +--- 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 + #include + +-#include + #include + #include + #include +--- 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 + #include + #include ++#include ++ + #include + #include ++#include + + /* + * 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 + #include + #include ++#include ++ + #include + #include + #include + #include + #include + #include ++#include + + /* + * 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 + #include + #include +-#ifdef CONFIG_BLK_DEV_INITRD +-#include +-#endif + #include + #include + +--- 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 + #include + #include +-#ifdef CONFIG_BLK_DEV_INITRD +-#include +-#endif + #include + #include + +--- 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 + #include + #include +-#include + #include + #include + #include +--- 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<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 + #include + #include ++#include + + 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 + #include + #include ++#include + + #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 + #include + #include ++#include + + 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 + #include + #include +-#include + #include + #include + #include +--- 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 + #include + #include +-#include + #include + #include + #include +@@ -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;ithread_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 ++ * Copyright (C) 2002,03 NEC Electronics Corporation ++ * Copyright (C) 2002,03 Miles Bader + * + * 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 + #include + #include +-#include +-#include ++#include ++#include + + #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 ++ * Copyright (C) 2002,03 NEC Electronics Corporation ++ * Copyright (C) 2002,03 Miles Bader + * + * 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 + #include + #include +-#include +-#include ++#include ++#include + + #include "mach.h" + +@@ -90,20 +90,14 @@ void __init mach_early_init (void) + AS85EP1_IRAMM = 0x0; /* $BFbB"L?Na(BRAM$B$O!V(Bread-mode$B!W$K$J$j$^$9(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 ++ * Copyright (C) 2002,03 NEC Electronics Corporation ++ * Copyright (C) 2002,03 Miles Bader + * + * 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) + + /* 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); + } + + +--- 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 ++ * Copyright (C) 2001,02,03 NEC Electronics Corporation ++ * Copyright (C) 2001,02,03 Miles Bader + * + * 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 ++ * Copyright (C) 2001,02,03 NEC Electronics Corporation ++ * Copyright (C) 2001,02,03 Miles Bader + * + * 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 +-#include ++#include + #include + + #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 + #include + +-#ifdef CONFIG_V850E_MA1_HIGHRES_TIMER ++#ifdef CONFIG_V850E_HIGHRES_TIMER + #include + #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 + #include + #include +-#include ++#include + + #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 ++ * ++ * 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 ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++ ++#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 +- * +- * 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 +- */ +- +-#include +-#include +- +-#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 (); +-} +- +- +-/* 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 +- * +- * 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 +- */ +- +-#include +-#include +-#include +- +-#include +- +-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 +- * +- * 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 +- */ +- +-#include +- +-#include +-#include +- +-/* 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 +- * +- * 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 +- */ +- +-/* Note: these functions are often associated with the N85E cpu core, +- but not always, which is why they're not in `nb85e.c'. */ +- +-#include +- +-/* 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 + + #include +-#include ++#include + + #include "mach.h" + +@@ -34,7 +34,7 @@ extern void multi_init (void); + + 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 + #include + #include +-#include ++#include + + #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 ++ * ++ * 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 ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#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 */ ++} ++ ++/* 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 ++} ++ ++ ++/* 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 + #include +-#include ++#include + #include + + #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 ++ * ++ * 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 ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++ ++#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; ++} ++ ++/* 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); ++} ++ ++ ++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 +- * +- * 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 +- */ +- +-#include +-#include +-#include +-#include +-#include +-#include +-#include +- +-#include +-#include +-#include +- +-#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; +-} +- +-/* 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); +-} +- +- +-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 + #include + #include +-#include ++#include + + #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 ++ * ++ * 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 ++ */ ++ ++#include ++ ++#include ++ ++/* 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)) ++ ++ ++/* 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; ++} ++ ++ ++/* 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); ++} ++ ++ ++/* 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 ++ * ++ * 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 ++ */ ++ ++/* 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 ++#include ++ ++#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 (); ++} ++ ++ ++/* 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 ++ * ++ * 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 ++ */ ++ ++#include ++#include ++#include ++ ++#include ++ ++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 ++ * ++ * 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 ++ */ ++ ++#include ++ ++#include ++#include ++ ++/* 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 ++ * ++ * 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 ++ */ ++ ++#include ++ ++/* 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 + #include + +--- 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 + +--- 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<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 + + /* 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< + */ + +-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 + #include + #include +-#ifdef CONFIG_BLK_DEV_INITRD +-#include +-#endif + #include + #include + #include +--- 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 + #include + #include +-#include + #include + #include + #include +--- /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 ++ . 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 ++ . prior to that. If beforethat is used next, it will display ++ . event -1. ++. ++ andthen commands are: set_andthen, andthen_next, andthen and beforethat ++end ++ ++ ++document andthen ++ andthen ++. displays the next event in the list. sets up to display ++. the oldest saved event first. ++. (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 and 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 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. 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 ++Organization: Gcom, Inc ++To: David Grothe ++ ++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" ++Organization: Veritas Software (India) ++To: Dave Grothe , linux-kernel@vger.rutgers.edu ++CC: David Milburn , ++ "Edouard G. Parmelan" , ++ ezannoni@cygnus.com, Keith Owens ++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
++ Places a hardware execution breakpoint ++ = 0 - 3 ++
= Hex digits without leading "0x". ++end ++ ++#hwwbrk breakpointno length address ++define hwwbrk ++ maintenance packet Y$arg0,1,$arg1,$arg2 ++end ++document hwwbrk ++ hwwbrk
++ Places a hardware write breakpoint ++ = 0 - 3 ++ = 1 (1 byte), 2 (2 byte), 3 (4 byte) ++
= Hex digits without leading "0x". ++end ++ ++#hwabrk breakpointno length address ++define hwabrk ++ maintenance packet Y$arg0,1,$arg1,$arg2 ++end ++document hwabrk ++ hwabrk
++ Places a hardware access breakpoint ++ = 0 - 3 ++ = 1 (1 byte), 2 (2 byte), 3 (4 byte) ++
= Hex digits without leading "0x". ++end ++ ++#hwrmbrk breakpointno ++define hwrmbrk ++ maintenance packet y$arg0 ++end ++document hwrmbrk ++ hwrmbrk ++ = 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 ++# ++# ++# 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 ++# ++# 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
''. ++# ++# 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: ++# ++# ++# 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 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: ++Use the 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 ++Internal user-command used to validate the module parameter. ++If 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 ++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 ++Load the symbols table of the module from the object file where ++first section aligment is . ++To retreive alignment, use `objdump -h '. ++end ++ ++define mod-add-symbols ++ mod-add-symbols-align $arg0 $arg1 sizeof(long) ++end ++document mod-add-symbols ++mod-add-symbols ++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 ++Does mod-add-symbols /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 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 ++ 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 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 () 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 ++ ++ ++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 ++ ++mod-print-symbols ++ Prints all the symbols in the indicated module. ++ ++mod-add-symbols ++ 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 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 ++ ++ ++Amit S. Kale ++ ++ ++(First kgdb by David Grothe ) ++ ++(modified by Tigran Aivazian ) ++ Putting gdbstub into the kernel config menu. ++ ++(modified by Scott Foehner ) ++ Hooks for entering gdbstub at boot time. ++ ++(modified by Amit S. Kale ) ++ Threads, ia-32 hw debugging, mp support, console support, ++ nmi watchdog handling. ++ ++(modified by George Anzinger ) ++ 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 ++# ++# Loading the module file into gdb ++# (gdb) source ++# ++# 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/.errs contains stderr output of insmod ++# MAPFILE - /tmp/.map contains stdout output of insmod ++# GDBSCRIPT - $GDBSCRIPTS/load 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. + + 03 Nov 2002 + ++Updated the magic table to Linux 2.5.74. ++ ++ Fabian Frederick ++ ++ 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 + + +-#include +- + /* 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 + #include + #include +-#include + #include + + #include +--- 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 + #include + #include ++#include + #include + #include + #include +@@ -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 + #include + #include ++#include + + #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 + #include + #include ++#include + #include + + 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 + #include + #include +-#include + #include + #include + #include /* 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 + #include + #include +-#include + + #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 + #include + #include +-#include + #include + #include + #include +@@ -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 + #include + #include +-#include + #include + + #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 + #include + +-#include + #include + #include + #include +--- 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 + #include + #include +-#include + #include + #include + #include +--- 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 + #include + #include +-#include + #include + #include + +--- 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 + #include + #include +-#include + #include + #include + #include +--- 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 + #include + #include +-#include + #include + #include + #include +--- 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 + #include + #include +-#include + #include + #include + #include +@@ -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 + #include + #include /* for the compatibility eject ioctl */ + #include +--- 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 ++#include + #include + #include /* for the compatibility eject ioctl */ + #include +@@ -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 + #include + #include +-#include ++#include + #include + #include + #include +@@ -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 /* for capable() */ +-#include /* for set_device_ro() */ ++#include + #include + #include + #include +@@ -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 + #include + #include +-#include ++#include + #include + #include + #include +@@ -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 + +-#include + #include + #include + #include +@@ -55,8 +54,6 @@ + #include + #include + #include +-#include +-#include + #include + + #include +@@ -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 + #include + #include +-#include ++#include + #include + + 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 + #include + #include /* for the eject ioctl */ +-#include ++#include + #include + #include + +--- 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 + #include + #include +-#include ++#include + #include + #include + +@@ -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 + #include + #include +-#include ++#include + #include + #include + #include +--- 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 + #include + #include +-#include + #include + #include + #include +--- 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 + #include + #include +-#include + #include + #include + #include +--- 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 ++#include + #include + + 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 + #include + #include +-#include ++#include + #include + + #include +--- 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 + #include + #include +-#include + #include + #include + +--- 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 +-#include ++#include + #include "aztcd.h" + + #include +--- 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 + #include + #include ++#include + + #include + +@@ -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 ++#include + + #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 ++#include + + #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 + + #define MAJOR_NR GOLDSTAR_CDROM_MAJOR +-#include ++#include + #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 + #include + #include +-#include ++#include + + #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 + #define MAJOR_NR MITSUMI_X_CDROM_MAJOR +-#include ++#include + #include + + /* 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 + + #include +-#include ++#include + + #include + #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 ++#include + + /*==========================================================================*/ + #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 + #include + #include +-#include ++#include + #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 + + #define MAJOR_NR CDU535_CDROM_MAJOR +-#include ++#include + + #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 +-// Uncomment the following if you want it compiled with modversions + + #include + +@@ -120,82 +119,11 @@ + #include + #include + +-#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 +-# include +-# include +-#else +-# include +-#endif ++#include ++#include ++#include + +-// 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 +-# 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 + + #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 + + #include ++#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 + #include + #include +@@ -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 , 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 ++ * Copyright (C) 2001, 2002, 2003 Paul Mundt + * + * This program 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 + * Added nowayout module option to override CONFIG_WATCHDOG_NOWAYOUT ++ * ++ * 19-Apr-2002 Rob Radez ++ * Added expect close support, made emulated timeout runtime changeable ++ * general cleanups, add some ioctls + */ + #include + #include +@@ -22,76 +26,50 @@ + #include + #include + #include ++#include + + #include + #include +- +-#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 + + /* +- * 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 "); ++MODULE_AUTHOR("Paul Mundt "); + 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 +@@ -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 + #include + #include +-#include + + #include + #include +--- 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 +-#include + #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 +- . ++ . + + 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 . If you say Y ++ comments at the top of . 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 . ++ Please read the comments at the top of . + + 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 . ++ Please read the comments at the top of . + + 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 +- . ++ . + + 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 . ++ Please read the comments at the top of . + + 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 . ++ Please read the comments at the top of . + + 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 +- and for ++ and 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 and +- files for more info. ++ 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 and +- files for more info. ++ 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 for more info. ++ 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 +- and for ++ and 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 and +- for more info. ++ 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 +- . ++ . + + 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 + #include + +-#include +- + #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 ++#include + #include + #include + #include +--- 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 + #include + #include +-#include + #include + #include + #include +--- 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 ++ * + */ + + #include +@@ -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 + #include + #include +-#include ++#include + #include + #include + #include +--- 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 + #include +-#include + #include + #include + #include +@@ -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 +-#include +-#include + #include +-#include +-#include +-#include +-#include +-#include +- +-#include +- +-#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 ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++ ++#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 ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++ ++#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 +- + #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; pathraid_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 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 "); + 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 ++#include ++ ++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 ++#include ++#include ++ ++#include "dvb_i2c.h" ++#include "dvb_frontend.h" ++#include "dvb_functions.h" ++ ++#include ++#include ++#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 + #include + #include +-#include +-#include + + #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 + #include + #include +-#include + #include ++#include ++#include + + #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 +-#include +-#include +-#include + #include ++#include ++#include + #include + #include + #include ++#include + #include + + 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 ++ + /** + * 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 +-#include +-#include +-#include +-#include +-#include +- + #include ++#include + + #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 + */ +- +-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; imulti_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; imulti_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; idev_num; i++) ++ for (i=0; istate[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; idev_num; i++) { ++ ++ for (i=0; istate[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; idev_num; i++) ++ for (i=0; istate[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 ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ ++ GNU General Public License for more details. ++ ++ You 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 ++#include ++#include ++#include ++#include ++ ++#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 "); ++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 ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ ++ GNU General Public License for more details. ++ ++ You 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 ++ Copyright (C) 2003 Paul Andreassen + + This 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 ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#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> 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 ++#include ++#include ++#include ++ ++#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 ++ * Copyright (c) 2003 Felix Domke ++ * ++ * This program is free software; you can redistribute it and/or ++ * modify it under the terms of the 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 ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "dvb_frontend.h" ++#include "dmxdev.h" ++#include "dvb_demux.h" ++#include "dvb_net.h" ++ ++#include ++#include ++#include ++#include ++ ++#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 "); ++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 ++ ++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 ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You 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 ++#include ++ ++#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 ++#include ++#include ++#include ++#include ++ ++ ++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 \n\n", ++ argv[0]); ++ return -1; ++ } ++ ++ fd = open (argv[1], O_RDONLY); ++ ++ printf ("\n#include \n\nu8 %s [] __initdata = {", ++ argv[2]); ++ ++ while ((count = read (fd, buf, 8)) > 0) { ++ printf ("\n\t"); ++ for (i=0;i $@ +--- /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 ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You 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 ++#include ++#include ++#include ++ ++#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 "); ++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 ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You 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 ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You 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 ++ ++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 "); ++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 ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You 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 ++ ++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 "); ++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 . + ++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 . ++ ++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 . ++ + 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 ++ * - pms_capture: report back -EFAULT + */ + + #include +@@ -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 /* needed for access to Scsi_Host struct */ + #include +-#include /* 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 + #include + #include +-#include /* for io_request_lock (spinlock) decl */ + #include /* for mdelay */ + #include /* needed for in_interrupt() proto */ + #include /* 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 +- + #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 + #include + #include +-#include ++#include + #include + #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 + #include + #include +-#include + #include + #include + #include +--- 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 + #include + #include +-#include + #include /* 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 - 0.86 ++ * Daniele Bellucci - 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 + #include +@@ -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 - 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 + */ + + #include +@@ -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 . +- + 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 ++#include ++#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: 2.6.0-test1-mm2.patch,v 1.1.2.2 2003/07/22 07:20:21 braam Exp $ ++ * $Id: 2.6.0-test1-mm2.patch,v 1.1.2.2 2003/07/22 07:20:21 braam Exp $ + * + * Device driver for the PCMCIA controller module of the + * Hitachi HD64465 handheld companion chip. +@@ -24,7 +24,6 @@ + * + * by Greg Banks + * (c) 2000 PocketPenguins Inc +- * + */ + + #include +@@ -37,28 +36,26 @@ + #include + #include + #include +-#include ++#include + #include + + #include +-#include ++#include ++#include + + #include + #include + #include ++#include ++#include + #include + #include +-#include + #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; ipending_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 ; imem_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; iprivate[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<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 + #include + #include +-#include + #include + #include + +--- 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.1.2.2 $ ++ * $Revision: 1.1.2.2 $ + */ + + #include +@@ -17,7 +17,6 @@ + #include + #include + #include +-#include + + #include + +@@ -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 + #include + #include +-#include + + #include + #include +--- 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 + #include + #include +-#include + #include + #include /* HDIO_GETGEO */ + #include +--- 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 + #include + #include +-#include + #include + #include + +--- 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.1.2.2 $ ++ * $Revision: 1.1.2.2 $ + * + * 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.1.2.2 $ ++ * $Revision: 1.1.2.2 $ + * + * Copyright (C) 1999-2002 IBM Deutschland Entwicklung GmbH, + * IBM Corporation +@@ -16,10 +16,12 @@ + #include + #include + #include ++#include + + #include + #include + #include ++#include + + #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.1.2.2 $ ++ * $Revision: 1.1.2.2 $ + * + * 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.1.2.2 $" ++#define VERSION_QDIO_C "$Revision: 1.1.2.2 $" + + /****************** MODULE PARAMETER VARIABLES ********************/ + MODULE_AUTHOR("Utz Bacher "); +@@ -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.1.2.2 $) ++ * linux/drivers/s390/net/qeth.c ($Revision: 1.1.2.2 $) + * + * 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.1.2.2 $" ++#define VERSION_QETH_C "$Revision: 1.1.2.2 $" + 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.1.2.2 $" ++#define VERSION_QETH_H "$Revision: 1.1.2.2 $" + + /******************** 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.1.2.2 $" ++#define VERSION_QETH_MPC_H "$Revision: 1.1.2.2 $" + + #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 ++ * ++ * DB - Audit every copy_to_user in envctrl_read. ++ * Daniele Bellucci + */ + + #include +@@ -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 + #include + +-/* +- * is controlled from the outside with these definitions. +- */ + #define MAJOR_NR JSFD_MAJOR + +-#include + #include + #include + #include +--- 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 + #include + #include +-#include ++#include + #include + #include + #include +--- 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 + #include + #include +-#include ++#include + #include + #include + +@@ -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 + #include + #include +-#include ++#include + #include + #include + #include +--- 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 + #include +-#include ++#include + #include + #include + #include +--- 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 + #include +-#include ++#include + #include + #include + #include +--- 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 + #include + #include +-#include ++#include + #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 + #include + #include +-#include ++#include + #include + #include + #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 + #include + #include +-#include ++#include + #include + #include + #include +--- 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 + #include + #include +-#include ++#include + #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 + #include + #include +-#include ++#include + #include + #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 + #include + #include +-#include ++#include + #include "scsi.h" + #include "hosts.h" + #include +@@ -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 + #include + #include +-#include ++#include + #include + #include + #include +--- 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 + #include + #include +-#include ++#include + #include + #include + #include +--- 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 + #include + #include +-#include ++#include + #include + #include + +--- 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 + #include + #include +-#include ++#include + #include "scsi.h" + #include "hosts.h" + #include +@@ -241,9 +241,7 @@ + #include + #include + #include +-#include + #include +-#include + #include + + #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 + #include + #include +-#include ++#include + #include + #include + +--- 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 ++#include + #include + #include + #include +@@ -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 +-#include + #include + #include + #include +--- 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 /* For fetching system memory size */ +-#include /* For block_size() */ ++#include /* 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 +-#include + #include + #include + #include +--- 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: 2.6.0-test1-mm2.patch,v 1.1.2.2 2003/07/22 07:20:21 braam Exp $ + */ + +-#include + #include + #include + #include +--- 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 + #include + #include +-#include ++#include + #include + #include + #include +-#include + #include + #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 + #include + #include +-#include ++#include + #include + #include + +--- 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 + #include +-#include ++#include + #include + #include + #include +--- 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 + #include + #include +-#include ++#include + #include + #include + #include +@@ -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 +-#include ++#include + #include + #include + #include +--- 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 + #include + #include +-#include ++#include + #include + + #include +@@ -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 +-#include ++#include + #include + #include + #include +--- 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 + #include + #include +-#include ++#include + + #include + #include +@@ -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 +-#include ++#include + #include + #include + #include +--- 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 +-#include ++#include + #include + #include + #include +@@ -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 + #include + #include +-#include ++#include + #include + + #include +@@ -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 +-#include ++#include + #include + #include + #include +--- 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 +-#include ++#include + #include + #include + #include +--- 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 + #include + #include +-#include ++#include + #include + #include + #include +--- 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 + #include + #include +-#include ++#include + #include + + #include +--- 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 + #include + #include +-#include ++#include + #include + #include + #include +--- 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 + #include + #include +-#include ++#include + #include + #include + #include +--- 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 + #include + #include +-#include + #include + #include + #include +--- 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 + #include +-#include ++#include + #include + #include + #include +--- 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 + + #include +-#include ++#include + #include + #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 ++#include + #include + #include + #include // 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 + #include + #include +-#include ++#include + #include + #include + #include +--- 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 + #include + #include +-#include ++#include + #include + #include + #include +--- 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 + #include + #include +-#include ++#include + #include + #include + #include +--- 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 + #include + #include +-#include ++#include + #include + #include + #include +--- 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 + #include + #include +-#include ++#include + #include + #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 + #include + #include +-#include ++#include + #include + #include + +--- 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 + #include +-#include ++#include + #include + #include + #include +--- 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 /* for CONFIG_PCI */ + #include /* for PCI support */ + #include +-#include ++#include + #include /* for udelay */ + #include + #include /* 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 + #include + #include +-#include ++#include + #include + #include + #include +--- 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 + #include + #include +-#include ++#include + #include + #include + #include +--- 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 + #include + #include +-#include ++#include + #include + #include + +--- 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 + #include + #include +-#include ++#include + #include + #include + #include +--- 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 + #include + #include +-#include ++#include + #include + #include + #include +--- 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 + #include + #include +-#include ++#include + #include + #include + #include +--- 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 + #include +-#include ++#include + #include + #include + #include +--- 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 + #include + #include +-#include ++#include + #include + #include + #include +--- 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 + #endif + +-#if LINUX_VERSION_CODE >= 0x010300 +-#include +-#else +-#include "../block/blk.h" +-#endif ++#include ++ + #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 + #include + #include +-#include ++#include + #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 + #include +-#include ++#include + #include + #include + #include +--- 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 + #include +-#include ++#include + #include + + #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 + #include + #include +-#include ++#include + #include + #include + #include +--- 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 ++#include + #include + #include + #include +--- 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 + #include + #include +-#include ++#include + #include + #include + +--- 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 +-#include + #include + #include + #include +--- 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 + #include + #include +-#include ++#include + #include + #include + #include +--- 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 + #include + #include +-#include ++#include + #include + #include + #include +--- 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 + #include + +-#include ++#include + #include + + #include +--- 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 ++#endif ++#ifdef __FreeBSD__ ++#include ++#endif ++#ifdef __OpenBSD__ ++#include ++#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 = ""; ++ ++ 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 ++#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 ++ ++#ifndef ISP_MODULE ++#define __NO_VERSION__ ++#endif ++#ifdef LINUX_ISP_TARGET_MODE ++#define EXPORT_SYMTAB ++#endif ++ ++#include ++#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 ++#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 ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) ++#include ++#include ++#else ++#include ++#endif ++#include ++#include ++#include ++#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 ++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@", 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, ""); ++ 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, ""); ++ } 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, ""); ++ } ++ 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, ""); ++ 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 ++ */ ++/* ++ * Include header file appropriate for platform we're building on. ++ */ ++ ++#ifdef __NetBSD__ ++#include ++#endif ++#ifdef __FreeBSD__ ++#include ++#endif ++#ifdef __OpenBSD__ ++#include ++#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 ++#ifdef ISP_TARGET_MODE ++#include ++#include ++#endif ++#endif ++#ifdef __FreeBSD__ ++#include ++#ifdef ISP_TARGET_MODE ++#include ++#include ++#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 + #include + #include +-#include ++#include + #include + #include + +--- 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 + #include + #include +-#include ++#include + #include + #include + #include +--- 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 + #include + #include +-#include ++#include + #include + #include + #include +--- 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 + #include + #include +-#include ++#include + #include + + #include +--- 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 + #include + #include +-#include ++#include + #include + #include + #include +--- 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 + #include +-#include ++#include + #include + #include + #include +--- 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 + #include + #include +-#include ++#include + #include + #include + #include +--- 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 + #include +-#include ++#include + #include + #include + #include +--- 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 + #include +-#include ++#include + #include + #include + +--- 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 + #include + +-#include ++#include + #include + #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 + #include + +-#include ++#include + + #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,1,35) + #include +--- 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 + #include + #include +-#include ++#include + #include + #include + #include +--- 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 + #include + #include +-#include ++#include + #include + #include + #include +@@ -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 + #include + #include +-#include ++#include + #include + #include + #include +--- 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 + #include + #include +-#include ++#include + #include + #include + #include +--- 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 + #include + #include +-#include ++#include ++#include + #include + #include + #include +--- 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 +-#include ++#include + #include + #include + #include +--- 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 ++#include + #include + #include + #include +--- 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 + #include + #include +-#include ++#include + #include + #include + +--- 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 + #include + #include +-#include ++#include + #include + + #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 + #include + #include +-#include ++#include + #include + + #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 + #include + #include +-#include ++#include + #include + + #include +@@ -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 + #include + #include +-#include ++#include + #include + + #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 + #include + #include +-#include ++#include + #include + #include + #include +--- 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 ++#include + #include + #include + #include +--- 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 + #include + #include +-#include ++#include + #include + #include + +--- 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 + +-#include ++#include + #include + #include + #include +--- 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 + #include + #include +-#include ++#include + #include + #include + #include +@@ -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 +-#include /* to get disk capacity */ ++#include /* to get disk capacity */ + #include + #include + #include +@@ -140,6 +140,7 @@ + + #include + #include ++#include + + #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 ++#include + #include + #include + #include +--- 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 ++#include + #include + #include + #include +--- 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 + #include + #include +-#include ++#include + #include + #include + #include +--- 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 + #include + #include +-#include ++#include + #include + #include + #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 + #include + +-#include ++#include + #include "scsi.h" + #include "hosts.h" + #include +@@ -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 + #include + +-#include ++#include + #include "scsi.h" + #include "hosts.h" + #include +--- 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 +-#include ++#include + #include + #include + #include +@@ -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 + #include + #include +-#include ++#include + #include + + #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 + #include + #include +-#include ++#include + #include + #include + +@@ -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 + #include + #include +-#include ++#include + + #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 + #include + #include +-#include ++#include + #include + + #include +@@ -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 + #include + #include +-#include ++#include + #include + #include + +@@ -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 + #include + #include +-#include ++#include + #include + + #include +--- 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 + #include + +-#include ++#include + #include "scsi.h" + #include "hosts.h" + #include +@@ -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 + #include + #include +-#include ++#include + #include + #include + #include +--- 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 + #include + +-#include ++#include + #include + #include + #include +@@ -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 + #include + #include +-#include ++#include + #include + + #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 + #include + #include +-#include ++#include + #include + #include + #include +--- 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 + #include + +-#include ++#include + #include "scsi.h" + #include "hosts.h" + #include +--- 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 + #include + #include +-#include ++#include + #include + #include + #include +--- 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 + #include + #include +-#include ++#include + + #include + #include +--- 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 + #include + #include +-#include ++#include + + #include + #include +--- 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 + #include + #include +-#include ++#include + #include + #include + #include +--- 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 + #include + #include +-#include ++#include + #include + #include + #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 + #include + +-#include ++#include + + #ifdef __sparc__ + # include +--- 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 + #include + +-#include ++#include + + #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,1,35) + #include +@@ -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 + #include + #include +-#include ++#include + #include + #include + #include +--- 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 + #include + #include +-#include ++#include + #include + + #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 + #include + #include +-#include ++#include + #include + #include + #include +--- 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 +-#include ++#include + #include + #include + #include +--- 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 + #include + #include +-#include ++#include + #include + + #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 + #include + #include +-#include ++#include + #include + #include + +--- 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 + #include + #include +-#include ++#include + #include + #include + #include +@@ -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 +- * +- * 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 +- */ +- +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +- +-#include +-#include +- +-/* 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 +- +- +-/* 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)) +- +- +-/* 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); +-} +- +- +-/* 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 */ +- +-/* 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); +-} +- +-/* 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, +-}; +- +-/* 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 ++ * ++ * 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 ++ */ ++ ++/* 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 ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++ ++/* 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 */ ++ ++ ++/* 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); ++} ++ ++ ++/* 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 */ ++ ++/* 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; ++} ++ ++ ++/* 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, ++}; ++ ++/* 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, + * Fabio Ferrari, + * Artis Kugevics, ++ * Daniele Bellucci, + * + * 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: 2.6.0-test1-mm2.patch,v $ + * Revision 1.1.2.2 2003/07/22 07:20:21 braam + * - these should apply, but they don't quite compile (something with netdump) + * ++ * ++ * 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; cntcid_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 "); + 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 + #include + #include +-#include ++#include + #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 + + #include +-#include ++#include + #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 +@@ -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 + #include + +-#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 + #include +-#include + #include + #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 ++#include + #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; juse_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; juse_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; jarray[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; iarray[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 ++#include + #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; jiobuf; ++ 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 +-#include ++#include + #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 + * 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 +-#include ++#include + #include + #include + #include +@@ -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 ++ * 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 ++ * ++ * 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 ++ * + * 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 +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include + #include +-#include ++#include ++#include + #include ++#include + #include +-#include